<?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>131596</bug_id>
          
          <creation_ts>2014-04-13 13:28:40 -0700</creation_ts>
          <short_desc>Web Inspector: rewrite CodeGeneratorInspector to be modular and testable</short_desc>
          <delta_ts>2015-09-14 10:47:34 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector</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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>87183</blocked>
    
    <blocked>133711</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Brian Burg">burg</reporter>
          <assigned_to name="Brian Burg">burg</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>bunhere</cc>
    
    <cc>cgarcia</cc>
    
    <cc>commit-queue</cc>
    
    <cc>glenn</cc>
    
    <cc>graouts</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>joepeck</cc>
    
    <cc>ossy</cc>
    
    <cc>rakuco</cc>
    
    <cc>sergio</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1000325</commentid>
    <comment_count>0</comment_count>
    <who name="Brian Burg">burg</who>
    <bug_when>2014-04-13 13:28:40 -0700</bug_when>
    <thetext>Right now it&apos;s pretty scary to touch the code generator. It&apos;s a big ball of mud.

I&apos;m working on a prototype that splits parsing/typechecking from the separate code generators.
The approach has worked well for the replay inputs generator, both from a testing and maintainability perspective.
Once we have some tests, it will be economically feasible to make minor changes, cleanup, optimization to the protocol specification format or code generators without excessive nail biting.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1000326</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2014-04-13 13:28:53 -0700</bug_when>
    <thetext>&lt;rdar://problem/16603443&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1000327</commentid>
    <comment_count>2</comment_count>
      <attachid>229243</attachid>
    <who name="Brian Burg">burg</who>
    <bug_when>2014-04-13 13:35:55 -0700</bug_when>
    <thetext>Created attachment 229243
WIP - can parse and typecheck 6.0 and 7.0 combined protocols</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1001842</commentid>
    <comment_count>3</comment_count>
      <attachid>229624</attachid>
    <who name="Brian Burg">burg</who>
    <bug_when>2014-04-17 21:58:08 -0700</bug_when>
    <thetext>Created attachment 229624
WIP: generates InspectorWebBackendCommands.js and InspectorWebBackendDispatchers.h</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1002015</commentid>
    <comment_count>4</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2014-04-18 13:47:32 -0700</bug_when>
    <thetext>Can you post example output files?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1002430</commentid>
    <comment_count>5</comment_count>
      <attachid>229774</attachid>
    <who name="Brian Burg">burg</who>
    <bug_when>2014-04-20 16:13:12 -0700</bug_when>
    <thetext>Created attachment 229774
WIP: generates InspectorWebBackendCommands.js and InspectorWebBackendDispatchers.h,cpp</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1002431</commentid>
    <comment_count>6</comment_count>
    <who name="Brian Burg">burg</who>
    <bug_when>2014-04-20 16:22:06 -0700</bug_when>
    <thetext>Newest version (3rd WIP) has the following changes from the 2nd WIP:

 * tests that don&apos;t fail will produce one big concatenated file, to reduce the number of results files needed.
 * generator knowledge of how to represent types is no longer in the Type subclasses, it&apos;s provided by static methods that do instanceof checks.
 * generates the backend dispatcher implementations.
 * added some important tests for async commands, domain sizes/include guards, and parameter passing modes for all the various configurations (in/out, optional, object/array/primitive).

I think the architecture is pretty well defined now, so you could start pre-reviewing the models.py and the existing generators.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1002433</commentid>
    <comment_count>7</comment_count>
      <attachid>229776</attachid>
    <who name="Brian Burg">burg</who>
    <bug_when>2014-04-20 16:23:12 -0700</bug_when>
    <thetext>Created attachment 229776
current generated output for actual InspectorJS/Web.json files</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1002459</commentid>
    <comment_count>8</comment_count>
      <attachid>229782</attachid>
    <who name="Brian Burg">burg</who>
    <bug_when>2014-04-20 21:25:17 -0700</bug_when>
    <thetext>Created attachment 229782
WIP 4: generates all except type builders</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1011514</commentid>
    <comment_count>9</comment_count>
      <attachid>232019</attachid>
    <who name="Brian Burg">burg</who>
    <bug_when>2014-05-24 10:45:58 -0700</bug_when>
    <thetext>Created attachment 232019
patch, with windows fixes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1011530</commentid>
    <comment_count>10</comment_count>
      <attachid>232025</attachid>
    <who name="Brian Burg">burg</who>
    <bug_when>2014-05-24 13:02:27 -0700</bug_when>
    <thetext>Created attachment 232025
changes to turn CMake/GCC happy</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1011592</commentid>
    <comment_count>11</comment_count>
      <attachid>232043</attachid>
    <who name="Brian Burg">burg</who>
    <bug_when>2014-05-25 15:09:02 -0700</bug_when>
    <thetext>Created attachment 232043
PFR v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1011593</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-05-25 15:12:08 -0700</bug_when>
    <thetext>Attachment 232043 did not pass style-queue:


ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_frontend_dispatcher_implementation.py:63:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_frontend_dispatcher_implementation.py:115:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_frontend_dispatcher_implementation.py:66:  [FrontendDispatcherImplementationGenerator.generate_output] Instance of &apos;FrontendDispatcherImplementationGenerator&apos; has no &apos;domains_to_generate&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generator_templates.py:251:  whitespace before &apos;)&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_type_builder_implementation.py:66:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_type_builder_implementation.py:124:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_type_builder_implementation.py:143:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_type_builder_implementation.py:160:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_type_builder_implementation.py:57:  [TypeBuilderImplementationGenerator.generate_output] Instance of &apos;TypeBuilderImplementationGenerator&apos; has no &apos;calculate_types_requiring_shape_assertions&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_type_builder_implementation.py:87:  [TypeBuilderImplementationGenerator._generate_enum_mapping] Instance of &apos;TypeBuilderImplementationGenerator&apos; has no &apos;assigned_enum_values&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_type_builder_implementation.py:98:  [TypeBuilderImplementationGenerator._generate_open_field_names] Instance of &apos;TypeBuilderImplementationGenerator&apos; has no &apos;domains_to_generate&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_type_builder_implementation.py:108:  [TypeBuilderImplementationGenerator._generate_builders_for_domain.&lt;lambda&gt;] Instance of &apos;TypeBuilderImplementationGenerator&apos; has no &apos;type_needs_shape_assertions&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_commands.py:75:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_commands.py:91:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_commands.py:102:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_commands.py:111:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_header.py:71:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_header.py:100:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_header.py:108:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_header.py:144:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_header.py:184:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_header.py:74:  [BackendDispatcherHeaderGenerator.generate_output] Instance of &apos;BackendDispatcherHeaderGenerator&apos; has no &apos;domains_to_generate&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_header.py:115:  [BackendDispatcherHeaderGenerator._generate_anonymous_enum_for_parameter] Instance of &apos;BackendDispatcherHeaderGenerator&apos; has no &apos;encoding_for_enum_value&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_implementation.py:66:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_implementation.py:82:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_implementation.py:117:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_implementation.py:127:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_implementation.py:133:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_implementation.py:168:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_implementation.py:189:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_implementation.py:202:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_implementation.py:216:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_implementation.py:242:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_implementation.py:69:  [BackendDispatcherImplementationGenerator.generate_output] Instance of &apos;BackendDispatcherImplementationGenerator&apos; has no &apos;domains_to_generate&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_frontend_dispatcher_header.py:70:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_frontend_dispatcher_header.py:86:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_frontend_dispatcher_header.py:112:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_frontend_dispatcher_header.py:73:  [FrontendDispatcherHeaderGenerator.generate_output] Instance of &apos;FrontendDispatcherHeaderGenerator&apos; has no &apos;domains_to_generate&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_frontend_dispatcher_header.py:93:  [FrontendDispatcherHeaderGenerator._generate_anonymous_enum_for_parameter] Instance of &apos;FrontendDispatcherHeaderGenerator&apos; has no &apos;encoding_for_enum_value&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generator.py:42:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generator.py:72:  whitespace before &apos;]&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generator.py:83:  whitespace before &apos;]&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generator.py:212:  whitespace before &apos;]&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/models.py:61:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/models.py:150:  [Type.raw_name] Instance of &apos;Type&apos; has no &apos;_name&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/models.py:150:  [Type.raw_name] Instance of &apos;Type&apos; has no &apos;_name&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_type_builder_header.py:63:  whitespace before &apos;]&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_type_builder_header.py:78:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_type_builder_header.py:287:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_type_builder_header.py:310:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/generate-inspector-protocol-bindings.py:175:  whitespace before &apos;}&apos;  [pep8/E202] [5]
Total errors found: 51 in 81 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1028042</commentid>
    <comment_count>13</comment_count>
      <attachid>232043</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2014-08-08 20:49:39 -0700</bug_when>
    <thetext>Comment on attachment 232043
PFR v1

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

This is looking really really great!

I reviewed the build files, models, generator, and runner scripts. I have yet to look at the individual generators and tests, so still more review work.

&gt; Source/JavaScriptCore/CMakeLists.txt:882
&gt; +    DEPENDS ${JavaScriptCore_INSPECTOR_PROTOCOL_SCIRPTS}

Typo: &quot;SCIRPTS&quot; =&gt; &quot;SCRIPTS&quot;

&gt; Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj:5251
&gt; +			name = codegen;

Nit: ideally this would be &quot;path = codegen&quot; instead of name. So when adding a file to this directory, Xcode will automatically open a file picker for this directory instead of the root.

&gt; Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj:5254
&gt; +		C4703CC1192844A40013FBEA /* codegen */ = {

Nit: This section seems duplicated It has the same UUID, so it seems accidental?

&gt; Source/JavaScriptCore/inspector/InspectorTypeBuilder.h:198
&gt; +    static void assertCorrectValue(InspectorValue*);

I never liked assertCorrectValue. Really this is just checking if the value is the appropriate type. How about &quot;assertTypeOfValue&quot; or &quot;assertValueHasExpectedTypes&quot;?

&gt; Source/JavaScriptCore/inspector/InspectorTypeBuilder.h:203
&gt; +template&lt;typename T, InspectorValue::Type TYPE&gt;
&gt; +struct PrimitiveBindingTraits {

Looks like template type &quot;T&quot; is unused. You should be able to remove it.

&gt; Source/JavaScriptCore/inspector/InspectorTypeBuilder.h:247
&gt; +template&lt;&gt; struct BindingTraits&lt;InspectorArray&gt; : public PrimitiveBindingTraits&lt;InspectorArray, InspectorValue::Type::Array&gt; { };

Which simplifies these:

- template&lt;&gt; struct BindingTraits&lt;InspectorArray&gt; : public PrimitiveBindingTraits&lt;InspectorArray, InspectorValue::Type::Array&gt; { };
+ template&lt;&gt; struct BindingTraits&lt;InspectorArray&gt; : public PrimitiveBindingTraits&lt;InspectorValue::Type::Array&gt; { };

&gt; Source/JavaScriptCore/inspector/InspectorValues.h:123
&gt; +        , m_doubleValue((double)value) { }

Nit: static_cast&lt;double&gt;(value)

&gt; Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_commands.py:39
&gt; +# Use a global logger, which normally only logs errors.
&gt; +# It can be configured to log debug messages from the CLI.
&gt; +logging.basicConfig(format=&apos;%(levelname)s: %(message)s&apos;, level=logging.ERROR)
&gt; +log = logging.getLogger(&apos;global&apos;)

This is at the top of each file with mixed comments. I think you can standardize with no comment.

&gt; Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_commands.py:48
&gt; +    def __init__(self, model, input_filepath):
&gt; +        self._model = model
&gt; +        self._input_filepath = input_filepath
&gt; +
&gt; +    def model(self):
&gt; +        return self._model

This is duplicated across all the Generators. Ideally they would call super and the base class would handle it.

    super(Generator, self).__init__(mode, input_filepath)

&gt; Source/JavaScriptCore/inspector/scripts/codegen/generator.py:90
&gt; +    def __init__(self, model, input_filepath):
&gt; +        self._model = model
&gt; +        self._input_filepath = input_filepath

Would be good for subclasses to use this!

&gt; Source/JavaScriptCore/inspector/scripts/codegen/generator.py:132
&gt; +    def all_types_needing_shape_assertions(self):
&gt; +        return self._types_needing_shape_assertions

Nit: Unused, can be removed.

Or, if you want to keep it, this should calculate_types_needing_shape_assertions like the single checker.

&gt; Source/JavaScriptCore/inspector/scripts/codegen/generator.py:207
&gt; +        guard = _DOMAIN_TO_CPP_GUARD_MAP.get(domain.domain_name, None)

Nit: None is the default missing value.

&gt; Source/JavaScriptCore/inspector/scripts/codegen/generator.py:222
&gt; +        # Enum values could be integer literals, so don&apos;t try to convert those.
&gt; +        if not isinstance(enum_value, (unicode, str)):
&gt; +            return

Is that true? I see no existing protocol enum&apos;s that are not &quot;type&quot;:&quot;string&quot;. Maybe we should make that a requirement, unless you have something in mind for non-string enums.

&gt; Source/JavaScriptCore/inspector/scripts/codegen/generator.py:231
&gt; +        regex = &apos;(\w*)(%s)(\w*)&apos; % &quot;|&quot;.join(_ALWAYS_UPPERCASED_ENUM_VALUE_SUBSTRINGS)
&gt; +
&gt; +        def replaceCallback(match):
&gt; +            return &quot;&quot;.join([match.group(1), match.group(2).upper(), match.group(3)])
&gt; +
&gt; +        # Split on hyphen, introduce camelcase, and force uppercasing of acronyms.
&gt; +        subwords = map(lambda x: x[0].upper() + x[1:], enum_value.split(&apos;-&apos;))
&gt; +        return re.sub(regex, replaceCallback, &quot;&quot;.join(subwords), flags=re.IGNORECASE)

The regex is too greedy and unnecessary complex. It will cause re.sub to only substitute the first occurrence of a found string. Also, you have a nice ucfirst function you can reuse.

You should be able to simplify to:

        regex = &apos;(%s)&apos; % &quot;|&quot;.join(_ALWAYS_UPPERCASED_ENUM_VALUE_SUBSTRINGS)

        def replaceCallback(match):
            return match.group(1).upper()

        # Split on hyphen, introduce camelcase, and force uppercasing of acronyms.
        subwords = map(ucfirst, name.split(&apos;-&apos;))
        return re.sub(regex, replaceCallback, &quot;&quot;.join(subwords), flags=re.IGNORECASE)

Now this will convert an enum value like &quot;html-to-xml&quot; to &quot;HTMLToXML&quot; instead of &quot;htmlToXML&quot;.

&gt; Source/JavaScriptCore/inspector/scripts/codegen/generator.py:275
&gt; +        if isinstance(type, ObjectType) and len(type.members) == 0:
&gt; +            return &apos;Inspector::InspectorObject&apos;
&gt; +        if isinstance(type, (ObjectType, AliasedType, EnumType)):
&gt; +            return &apos;Inspector::TypeBuilder::%s::%s&apos; % (type.type_domain().domain_name, type.raw_name())
&gt; +        elif isinstance(type, ArrayType):
&gt; +            return &apos;Inspector::TypeBuilder::Array&lt;%s&gt;&apos; % Generator.type_builder_string_for_type(type.element_type)
&gt; +        elif isinstance(type, PrimitiveType):
&gt; +            return Generator.cpp_name_for_primitive_type(type)

I tried not to nit too much about if/else return style. But here you have both an if return and elif return chains. Personally, I prefer if return chains.

&gt; Source/JavaScriptCore/inspector/scripts/codegen/generator.py:288
&gt; +        if isinstance(_type, AliasedType):
&gt; +            _type = _type.aliased_type  # Fall through to primitive.

This comment should be &quot;Fall through to enum or primitive.&quot; An aliased_type can be an enum if it is a $ref to a type that is a string enum.

&gt; Source/JavaScriptCore/inspector/scripts/codegen/generator.py:295
&gt; +        if isinstance(_type, ObjectType) or _type.qualified_name() is &apos;object&apos;:
&gt; +            return &apos;const RefPtr&lt;Inspector::InspectorObject&gt;&apos; + sigil

When would the &quot;_type.qualified_name() is &apos;object&apos;&quot; be true when the first is not?

&gt; Source/JavaScriptCore/inspector/scripts/codegen/generator.py:307
&gt; +        return &quot;unknown_unchecked_formal_in_parameter_type&quot;

Maybe raise an exception here?

&gt; Source/JavaScriptCore/inspector/scripts/codegen/generator.py:311
&gt; +    @staticmethod
&gt; +    def type_string_for_checked_formal_in_parameter(parameter):
&gt; +        return Generator.type_string_for_type_with_name(parameter.type, parameter.parameter_name, parameter.is_optional)

I&apos;m confused here. The name says &quot;formal_in_parameter&quot;, but it looks like it is used by generation for Event parameters which are basically like out params. A better name would help.

Also, how does this generate a $ref event parameter, like in Debugger.didSampleProbe?

        {
            &quot;name&quot;: &quot;didSampleProbe&quot;,
            &quot;description&quot;: &quot;Fires when a new probe sample is collected.&quot;,
            &quot;parameters&quot;: [
                { &quot;name&quot;: &quot;sample&quot;, &quot;$ref&quot;: &quot;ProbeSample&quot;, &quot;description&quot;: &quot;A collected probe sample.&quot; }
            ]
        },

We currently generate a FrontendDispatcer method like:

    void didSampleProbe(PassRefPtr&lt;Inspector::TypeBuilder::Debugger::ProbeSample&gt; sample);

It looks to me like in type_string_for_type_with_name an ObjectType would do the right thing but an AliasedType does the wrong thing. How does this work?

&gt; Source/JavaScriptCore/inspector/scripts/codegen/generator.py:330
&gt; +        elif isinstance(_type, AliasedType):
&gt; +            builder_type = Generator.type_builder_string_for_type(_type)
&gt; +            if is_optional:
&gt; +                return &apos;const %s* const&apos; % builder_type
&gt; +            elif _type.aliased_type.qualified_name() in [&apos;integer&apos;, &apos;number&apos;]:
&gt; +                return Generator.cpp_name_for_primitive_type(_type.aliased_type)
&gt; +            elif _type.aliased_type.qualified_name() in [&apos;string&apos;]:
&gt; +                return &apos;const %s&amp;&apos; % builder_type
&gt; +            else:
&gt; +                return builder_type

This is the block I don&apos;t understand.

&gt; Source/JavaScriptCore/inspector/scripts/codegen/generator.py:477
&gt; +        elif isinstance(type, AliasedType):
&gt; +            return Generator.js_name_for_parameter_type(type.aliased_type)
&gt; +        elif isinstance(type, EnumType):
&gt; +            return Generator.js_name_for_parameter_type(type.primitive_type)

This could do the fall through stuff if you wanted to continue to trend of avoiding unnecessary recursion.

&gt; Source/JavaScriptCore/inspector/scripts/codegen/generator.py:486
&gt; +    # Decide whether certain helpers are necesary in a situation.

Typo: &quot;necesary&quot; =&gt; &quot;necessary&quot;

&gt; Source/JavaScriptCore/inspector/scripts/codegen/generator.py:497
&gt; +class DummyGenerator(Generator):
&gt; +    pass

Not used anywhere.

&gt; Source/JavaScriptCore/inspector/scripts/codegen/models.py:59
&gt; +    &apos;RGBA&apos;: &apos;Rgba&apos;,

The old generator said:

    &quot;RGBA&quot;: &quot;Rgba&quot;,  # RGBA is reported to be conflicting with a define name in Windows CE.

That might be good a good comment to keep or incorporate into your comment (the mention of Windows CE). I think we can easily rename to &quot;RGBAColor&quot; and then remove this whole thing!

&gt; Source/JavaScriptCore/inspector/scripts/codegen/models.py:123
&gt; +        if type_kind is not None and referenced_type_name is not None:
&gt; +            raise ParseException(&quot;Type reference cannot have both &apos;type&apos; and &apos;$ref&apos; keys.&quot;)
&gt; +
&gt; +        if type_kind == &quot;array&quot; and array_items is None:
&gt; +            raise ParseException(&quot;Type reference with type &apos;array&apos; must have key &apos;items&apos; to define array element type.&quot;)

We can add a check that enums have at least 1 value. (See later comments regarding making enum_values None instead of empty array)

    if enum_values is not None and len(enum_values) == 0:
        raise ParseException(&quot;Type reference with enum values must have at least one enum value.&quot;)

And perhaps this should have and is_enum or has_enum_values to make checks down below easier:

    def has_enum_values(self):
        return self._enum_values is not None

&gt; Source/JavaScriptCore/inspector/scripts/codegen/models.py:150
&gt; +    def raw_name(self):
&gt; +        return _TYPES_NEEDING_RENAME_WORKAROUNDS.get(self._name, self._name)

This is not overridden by subclasses, lets move it up above the comment about subclasses.

&gt; Source/JavaScriptCore/inspector/scripts/codegen/models.py:183
&gt; +            return &apos;AliasedType[%s -&gt; %s]&apos; % (self.qualified_name(), self.aliased_type.__repr__())

[Applies to multiple places]

Apparently python string interpolation has %r to automatically do __repr__() instead of __str__. That would read better.

&gt; Source/JavaScriptCore/inspector/scripts/codegen/models.py:292
&gt; +        self._enum_value_count = 0
&gt; +        self._enum_values = {}

Nit: Unused / moved! Can be removed.

&gt; Source/JavaScriptCore/inspector/scripts/codegen/models.py:315
&gt; +                raise ParseException(&quot;Malformed specification: types is not an array&quot;)

Nit: &quot;Malformed specification&quot; =&gt; &quot;Malformed domain specification&quot;

&gt; Source/JavaScriptCore/inspector/scripts/codegen/models.py:338
&gt; +                raise ParseException(&quot;Malformed specification: properties is not an array&quot;)

Nit: &quot;Malformed specification&quot; =&gt; &quot;Malformed type specification&quot;

Etc for the other Malformed specification parse exceptions.

&gt; Source/JavaScriptCore/inspector/scripts/codegen/models.py:341
&gt; +        type_ref = TypeReference(json[&apos;type&apos;], None, json.get(&apos;enum&apos;, []), json.get(&apos;items&apos;))

[Applies to multiple places]

Can we default enum_values to None instead of an empty array, that seems cleaner.

All the places that check &quot;len(... .enum_values) &gt; 0&quot; can check if enum_values is not None or the earlier &quot;is_enum&quot; proposal.

&gt; Source/JavaScriptCore/inspector/scripts/codegen/models.py:383
&gt; +    def parse_parameter(self, json):

This is used for parsing both &quot;params&quot; and &quot;returns&quot; of a command/event. How about naming this &quot;parse_parameter_or_return_type_declaration&quot;.

&gt; Source/JavaScriptCore/inspector/scripts/codegen/models.py:395
&gt; +        for _primitive_type in [&apos;boolean&apos;, &apos;integer&apos;, &apos;number&apos;]:
&gt; +            self.types_by_name[_primitive_type] = PrimitiveType(_primitive_type)

For my own education, why do you sometimes use _ prefixed variable names and other times regular ones. Is that a convention for loop variables?

&gt; Source/JavaScriptCore/inspector/scripts/codegen/models.py:424
&gt; +                elif kind == &quot;array&quot;:
&gt; +                    type_instance = ArrayType(_declaration.type_ref.array_type_ref, _domain)
&gt; +                elif kind == &quot;object&quot;:
&gt; +                    type_instance = ObjectType(_declaration.type_name, _domain, _declaration.type_members)
&gt; +                else:
&gt; +                    type_instance = AliasedType(_declaration.type_name, _domain, _declaration.type_ref)

Object reads weird compared to the others that all explicitly have &quot;type_ref&quot;. Maybe &quot;type_members&quot; should be named &quot;member_type_refs&quot;.

&gt; Source/JavaScriptCore/inspector/scripts/codegen/models.py:506
&gt; +class TypeDeclaration:
&gt; +    def __init__(self, type_name, type_ref, description, type_members):

Nit: I&apos;m getting all excited about the warnings you are adding. Maybe we should add a warning here that the type name should start with a capital letter. This ensure someone doesn&apos;t add a new type that conflicts with a built-in type.

&gt; Source/JavaScriptCore/inspector/scripts/generate-inspector-protocol-bindings.py:88
&gt; +        try:
&gt; +            read_file = open(self._filepath, &quot;r&quot;)
&gt; +            old_text = read_file.read()
&gt; +            read_file.close()
&gt; +            text_changed = old_text != self._output
&gt; +        except:
&gt; +            # Ignore, just overwrite by default
&gt; +            pass

We can avoid reading files entirely if self.force_output.

&gt; Source/JavaScriptCore/inspector/scripts/generate-inspector-protocol-bindings.py:107
&gt; +                protocol.parse_specification(parsed_json, isSupplemental=isSupplemental)

Nit: &quot;isSupplemental=isSupplemental&quot; =&gt; &quot;isSupplemental&quot;?

&gt; Source/JavaScriptCore/inspector/scripts/generate-inspector-protocol-bindings.py:145
&gt; +    if concatenate_output:
&gt; +            filename = os.path.join(os.path.basename(primary_specification_filepath) + &apos;-result&apos;)
&gt; +            output_file = IncrementalFileWriter(os.path.join(output_dirpath, filename), force_output)
&gt; +            output_file.write(&apos;\n&apos;.join(single_output_file_contents))
&gt; +            output_file.close()

Style: Indented too far.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1028133</commentid>
    <comment_count>14</comment_count>
      <attachid>232043</attachid>
    <who name="Brian Burg">burg</who>
    <bug_when>2014-08-10 23:42:04 -0700</bug_when>
    <thetext>Comment on attachment 232043
PFR v1

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

&gt;&gt; Source/JavaScriptCore/inspector/scripts/codegen/generator.py:222
&gt;&gt; +            return
&gt; 
&gt; Is that true? I see no existing protocol enum&apos;s that are not &quot;type&quot;:&quot;string&quot;. Maybe we should make that a requirement, unless you have something in mind for non-string enums.

I thought it was used somewhere. Will remove...

&gt;&gt; Source/JavaScriptCore/inspector/scripts/codegen/generator.py:231
&gt;&gt; +        return re.sub(regex, replaceCallback, &quot;&quot;.join(subwords), flags=re.IGNORECASE)
&gt; 
&gt; The regex is too greedy and unnecessary complex. It will cause re.sub to only substitute the first occurrence of a found string. Also, you have a nice ucfirst function you can reuse.
&gt; 
&gt; You should be able to simplify to:
&gt; 
&gt;         regex = &apos;(%s)&apos; % &quot;|&quot;.join(_ALWAYS_UPPERCASED_ENUM_VALUE_SUBSTRINGS)
&gt; 
&gt;         def replaceCallback(match):
&gt;             return match.group(1).upper()
&gt; 
&gt;         # Split on hyphen, introduce camelcase, and force uppercasing of acronyms.
&gt;         subwords = map(ucfirst, name.split(&apos;-&apos;))
&gt;         return re.sub(regex, replaceCallback, &quot;&quot;.join(subwords), flags=re.IGNORECASE)
&gt; 
&gt; Now this will convert an enum value like &quot;html-to-xml&quot; to &quot;HTMLToXML&quot; instead of &quot;htmlToXML&quot;.

Good catch.

&gt;&gt; Source/JavaScriptCore/inspector/scripts/codegen/generator.py:295
&gt;&gt; +            return &apos;const RefPtr&lt;Inspector::InspectorObject&gt;&apos; + sigil
&gt; 
&gt; When would the &quot;_type.qualified_name() is &apos;object&apos;&quot; be true when the first is not?

The &apos;any&apos; type. I added a comment.

&gt;&gt; Source/JavaScriptCore/inspector/scripts/codegen/generator.py:311
&gt;&gt; +        return Generator.type_string_for_type_with_name(parameter.type, parameter.parameter_name, parameter.is_optional)
&gt; 
&gt; I&apos;m confused here. The name says &quot;formal_in_parameter&quot;, but it looks like it is used by generation for Event parameters which are basically like out params. A better name would help.
&gt; 
&gt; Also, how does this generate a $ref event parameter, like in Debugger.didSampleProbe?
&gt; 
&gt;         {
&gt;             &quot;name&quot;: &quot;didSampleProbe&quot;,
&gt;             &quot;description&quot;: &quot;Fires when a new probe sample is collected.&quot;,
&gt;             &quot;parameters&quot;: [
&gt;                 { &quot;name&quot;: &quot;sample&quot;, &quot;$ref&quot;: &quot;ProbeSample&quot;, &quot;description&quot;: &quot;A collected probe sample.&quot; }
&gt;             ]
&gt;         },
&gt; 
&gt; We currently generate a FrontendDispatcer method like:
&gt; 
&gt;     void didSampleProbe(PassRefPtr&lt;Inspector::TypeBuilder::Debugger::ProbeSample&gt; sample);
&gt; 
&gt; It looks to me like in type_string_for_type_with_name an ObjectType would do the right thing but an AliasedType does the wrong thing. How does this work?

It falls through to the last case for AliasedType, returning the type from type_builder_string_for_type, which accounts for aliased values.

&gt;&gt; Source/JavaScriptCore/inspector/scripts/codegen/models.py:59
&gt;&gt; +    &apos;RGBA&apos;: &apos;Rgba&apos;,
&gt; 
&gt; The old generator said:
&gt; 
&gt;     &quot;RGBA&quot;: &quot;Rgba&quot;,  # RGBA is reported to be conflicting with a define name in Windows CE.
&gt; 
&gt; That might be good a good comment to keep or incorporate into your comment (the mention of Windows CE). I think we can easily rename to &quot;RGBAColor&quot; and then remove this whole thing!

OK, we can refactor later.

&gt;&gt; Source/JavaScriptCore/inspector/scripts/codegen/models.py:395
&gt;&gt; +            self.types_by_name[_primitive_type] = PrimitiveType(_primitive_type)
&gt; 
&gt; For my own education, why do you sometimes use _ prefixed variable names and other times regular ones. Is that a convention for loop variables?

Usually it is to distinguish local variables. Sometimes it is to avoid builtin keywords (especially &apos;type&apos;).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1028199</commentid>
    <comment_count>15</comment_count>
      <attachid>232043</attachid>
    <who name="Brian Burg">burg</who>
    <bug_when>2014-08-11 09:34:37 -0700</bug_when>
    <thetext>Comment on attachment 232043
PFR v1

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

&gt;&gt; Source/JavaScriptCore/inspector/scripts/codegen/models.py:123
&gt;&gt; +            raise ParseException(&quot;Type reference with type &apos;array&apos; must have key &apos;items&apos; to define array element type.&quot;)
&gt; 
&gt; We can add a check that enums have at least 1 value. (See later comments regarding making enum_values None instead of empty array)
&gt; 
&gt;     if enum_values is not None and len(enum_values) == 0:
&gt;         raise ParseException(&quot;Type reference with enum values must have at least one enum value.&quot;)
&gt; 
&gt; And perhaps this should have and is_enum or has_enum_values to make checks down below easier:
&gt; 
&gt;     def has_enum_values(self):
&gt;         return self._enum_values is not None

OK

&gt;&gt; Source/JavaScriptCore/inspector/scripts/codegen/models.py:424
&gt;&gt; +                    type_instance = AliasedType(_declaration.type_name, _domain, _declaration.type_ref)
&gt; 
&gt; Object reads weird compared to the others that all explicitly have &quot;type_ref&quot;. Maybe &quot;type_members&quot; should be named &quot;member_type_refs&quot;.

type_members returns an array of TypeMembers. TypeReferences do not have an &apos;optional&apos; flag, nor room for a description. That&apos;s why TypeMember exists.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1028243</commentid>
    <comment_count>16</comment_count>
      <attachid>236385</attachid>
    <who name="Brian Burg">burg</who>
    <bug_when>2014-08-11 11:33:43 -0700</bug_when>
    <thetext>Created attachment 236385
PFR v2

The new patch addresses all comments to date, and removes stale test results.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1028244</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-08-11 11:36:16 -0700</bug_when>
    <thetext>Attachment 236385 did not pass style-queue:


ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_header.py:61:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_header.py:90:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_header.py:98:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_header.py:134:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_header.py:174:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_header.py:44:  [BackendDispatcherHeaderGenerator.output_filename] Instance of &apos;BackendDispatcherHeaderGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_header.py:48:  [BackendDispatcherHeaderGenerator.generate_output] Instance of &apos;BackendDispatcherHeaderGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_header.py:56:  [BackendDispatcherHeaderGenerator.generate_output] Instance of &apos;BackendDispatcherHeaderGenerator&apos; has no &apos;generate_license&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_header.py:61:  [BackendDispatcherHeaderGenerator.generate_output] Instance of &apos;BackendDispatcherHeaderGenerator&apos; has no &apos;_input_filepath&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_header.py:64:  [BackendDispatcherHeaderGenerator.generate_output] Instance of &apos;BackendDispatcherHeaderGenerator&apos; has no &apos;domains_to_generate&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_header.py:77:  [BackendDispatcherHeaderGenerator._generate_handler_declarations_for_domain] Instance of &apos;BackendDispatcherHeaderGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_header.py:105:  [BackendDispatcherHeaderGenerator._generate_anonymous_enum_for_parameter] Instance of &apos;BackendDispatcherHeaderGenerator&apos; has no &apos;encoding_for_enum_value&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_header.py:162:  [BackendDispatcherHeaderGenerator._generate_dispatcher_declarations_for_domain] Instance of &apos;BackendDispatcherHeaderGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generator.py:45:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generator.py:75:  whitespace before &apos;]&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generator.py:86:  whitespace before &apos;]&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generator.py:215:  whitespace before &apos;]&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_type_builder_implementation.py:57:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_type_builder_implementation.py:115:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_type_builder_implementation.py:134:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_type_builder_implementation.py:151:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/models.py:63:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/models.py:61:  at least two spaces before inline comment  [pep8/E261] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/models.py:148:  [Type.raw_name] Instance of &apos;Type&apos; has no &apos;_name&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/models.py:148:  [Type.raw_name] Instance of &apos;Type&apos; has no &apos;_name&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_frontend_dispatcher_implementation.py:54:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_frontend_dispatcher_implementation.py:106:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_commands.py:65:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_commands.py:81:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_commands.py:92:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_commands.py:101:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_implementation.py:58:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_implementation.py:74:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_implementation.py:109:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_implementation.py:119:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_implementation.py:125:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_implementation.py:160:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_implementation.py:181:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_implementation.py:194:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_implementation.py:208:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_implementation.py:234:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/generate-inspector-protocol-bindings.py:177:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/generate-inspector-protocol-bindings.py:124:  [generate_from_specification] Undefined variable &apos;FrontendDispatcherHeaderGenerator&apos;  [pylint/E0602] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/generate-inspector-protocol-bindings.py:126:  [generate_from_specification] Undefined variable &apos;TypeBuilderHeaderGenerator&apos;  [pylint/E0602] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generator_templates.py:251:  whitespace before &apos;)&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_type_builder_header.py:53:  whitespace before &apos;]&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_type_builder_header.py:68:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_type_builder_header.py:277:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_type_builder_header.py:300:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/WebCore/inspector/InspectorReplayAgent.h:107:  The parameter name &quot;segmentState&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_frontend_dispatcher_header.py:60:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_frontend_dispatcher_header.py:76:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_frontend_dispatcher_header.py:102:  whitespace before &apos;}&apos;  [pep8/E202] [5]
Total errors found: 53 in 89 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1028414</commentid>
    <comment_count>18</comment_count>
      <attachid>236385</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2014-08-11 21:46:54 -0700</bug_when>
    <thetext>Comment on attachment 236385
PFR v2

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

Made it through the generators today. A little hairier, but still great. I&apos;ll look at the tests next and that should mean I&apos;ve looked at the entire patch.

&gt; Source/JavaScriptCore/ChangeLog:362
&gt; +2014-08-11  Brian J. Burg  &lt;burg@cs.washington.edu&gt;
&gt; +
&gt; +        Web Inspector: use type builders to construct high fidelity type information payloads
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=135803

Oops.

&gt; Source/JavaScriptCore/CMakeLists.txt:942
&gt;      DEPENDS ${JavaScriptCore_INSPECTOR_SCRIPTS_DIR}/CodeGeneratorInspector.py
&gt;              ${JavaScriptCore_INSPECTOR_SCRIPTS_DIR}/CodeGeneratorInspectorStrings.py

You will need to update the DEPENDS for the new generators.

&gt; Source/JavaScriptCore/inspector/scripts/CodeGeneratorInspector.py:-1
&gt; -#!/usr/bin/env python

You should also delete the CodeGeneratorInspectorStrings.py, which surprisingly is not deleted!

&gt; Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_commands.py:33
&gt; +from generator import Generator, ucfirst
&gt; +from string import Template
&gt; +from generator_templates import GeneratorTemplates as Templates
&gt; +from models import EnumType

Should these be sorted somehow? The order differs between files.

&gt; Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_commands.py:47
&gt; +    def generate_output(self):
&gt; +        domains_to_generate = []

Seems like this should override domains_to_generate from the superclass with the implementation below.

&gt; Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_commands.py:51
&gt; +            enum_types = filter(lambda declaration: isinstance(declaration.type, EnumType), _domain.type_declarations)
&gt; +            if _domain.is_supplemental:
&gt; +                continue

Nit: enum_type line can go after this continue.

&gt; Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_header.py:56
&gt; +        sections = []
&gt; +        sections.append(self.generate_license())

[Applies to multiple places]

I think things would look nicer if these lines were put down with the rest of the sections modifications. Then you have all params initialized, and then all sections generated together in a tight block.

&gt; Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_header.py:58
&gt; +            &apos;headerGuardString&apos;: re.sub(&apos;[-./]&apos;, &apos;_&apos;, self.output_filename()),

[Applies to multiple places]

Maybe you will need \ too for Windows? I suppose this could be made very generic:

    re.sub(&apos;\W+&apos;, &apos;_&apos;, self.output_filename())

&gt; Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_header.py:65
&gt; +        domains = self.domains_to_generate()
&gt; +        domains = filter(lambda domain: len(domain.commands) &gt; 0, domains)

[Applies to multiple places]

This could override domains_to_generate. Fine as is though.

&gt; Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_header.py:95
&gt; +    def _generate_anonymous_enum_for_parameter(self, parameter, command):

This is done in multiple places exactly identical. Maybe it could be shared somewhere.

&gt; Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_implementation.py:36
&gt; +# Use a global logger, which normally only logs errors.

You can remove this comment.

&gt; Source/JavaScriptCore/inspector/scripts/codegen/generate_type_builder_header.py:314
&gt; +        if type_member.member_name in [&apos;value&apos;, &apos;array&apos;, &apos;string&apos;, &apos;number&apos;, &apos;integer&apos;]:
&gt; +            lines.append(&apos;    using Inspector::InspectorObjectBase::set%s;&apos; % ucfirst(type_member.member_name))
&gt; +            lines.append(&apos;&apos;)

This does not sound right. We should not be looking at the name of the type_member, but the type of the type_member.

It seems like this might be working by accident (as was the case in the old generator too).

For example, given an existing type with optional fields:

        {
            &quot;id&quot;: &quot;KeyPath&quot;,
            &quot;type&quot;: &quot;object&quot;,
            &quot;description&quot;: &quot;Key path.&quot;,
            &quot;properties&quot;: [
                { &quot;name&quot;: &quot;type&quot;, &quot;type&quot;: &quot;string&quot;, &quot;enum&quot;: [&quot;null&quot;, &quot;string&quot;, &quot;array&quot;], &quot;description&quot;: &quot;Key path type.&quot; },
                { &quot;name&quot;: &quot;string&quot;, &quot;type&quot;: &quot;string&quot;, &quot;optional&quot;: true, &quot;description&quot;: &quot;String value.&quot; },
                { &quot;name&quot;: &quot;array&quot;, &quot;type&quot;: &quot;array&quot;, &quot;optional&quot;: true, &quot;items&quot;: { &quot;type&quot;: &quot;string&quot; }, &quot;description&quot;: &quot;Array value.&quot; }
            ]
        }

We generate this for the optional fields:

    /*
     * Synthetic constructor:
     * RefPtr&lt;KeyPath&gt; result = KeyPath::create()
     *     .setType(...);
     */
    static Builder&lt;NoFieldsSet&gt; create()
    {
        return Builder&lt;NoFieldsSet&gt;(Inspector::InspectorObject::create());
    }
    typedef Inspector::TypeBuilder::StructItemTraits ItemTraits;

    void setString(const String&amp; value)
    {
        this-&gt;setString(ASCIILiteral(&quot;string&quot;), value);
    }
    using Inspector::InspectorObjectBase::setString;


    void setArray(PassRefPtr&lt;Inspector::TypeBuilder::Array&lt;String&gt; &gt; value)
    {
        this-&gt;setValue(ASCIILiteral(&quot;array&quot;), value);
    }
    using Inspector::InspectorObjectBase::setArray;


The &quot;using&quot; lines here makes sense by accident because the field was named &quot;array&quot;.

I have a feeling that all of these using lines can probably just be removed! The methods are all protected in the base class. If they are required, we should do it correctly (and match the implementation inside the setter).

---

Having said that, the fact that setArray takes an Array and calls setValue also sounds wrong, but is fine because setArray/setValue/setObject are identical. We should still fix that. See comment later on.

&gt; Source/JavaScriptCore/inspector/scripts/codegen/generate_type_builder_implementation.py:142
&gt; +            lines.append(&quot;&quot;&quot;    {
&gt; +        InspectorObject::iterator %(memberName)sPos;
&gt; +        %(memberName)sPos = object-&gt;find(&quot;%(memberName)s&quot;);
&gt; +        ASSERT(%(memberName)sPos != object-&gt;end());
&gt; +        %(assertMethod)s(%(memberName)sPos-&gt;value.get());
&gt; +    }&quot;&quot;&quot; % args)

[Applies to multiple places in the patch]

I always wondered if part of what slows us down in debug builds is this find(...) for every single member. I wonder if there is a better way to check the properties.

We can combine the type declaration and assignment, and we should use ASCIILiteral:

    InspectorObject::iterator %(memberName)sPos = object-&gt;find(ASCIILiteral(&quot;%(memberName)s&quot;));

&gt; Source/JavaScriptCore/inspector/scripts/codegen/generate_type_builder_implementation.py:177
&gt; +        lines.append(&apos;    WTF::String s;&apos;)

I don&apos;t think the &quot;WTF::&quot; is needed here, we can drop it.

&gt; Source/JavaScriptCore/inspector/scripts/codegen/generator.py:251
&gt; +        if isinstance(type, ObjectType) or isinstance(type, ArrayType):
&gt; +            return &apos;setValue&apos;

I think ObjectType can use setObject and ArrayType can use setArray.

These 3 methods are all implemented identically right now in InspectorObjectBase. I don&apos;t think we ever have to actually use setValue ourselves.

&gt; Source/JavaScriptCore/inspector/scripts/codegen/generator_templates.py:33
&gt; + * Copyright (C) 2014 Apple Inc. All rights reserved.

And:

    Copyright (c) 2014 University of Washington. All rights reserved.

Also maybe some of the copyrights from the Strings generator file which we are replacing.

&gt; Source/JavaScriptCore/inspector/scripts/codegen/generator_templates.py:58
&gt; +// by the script: JavaScriptCore/replay/scripts/CodeGeneratorInspector.py&quot;&quot;&quot;)

Wrong script! Should be:

    Source/JavaScriptCore/inspector/scripts/codegen/generator_templates.py

&gt; Source/JavaScriptCore/inspector/scripts/codegen/models.py:540
&gt; +        self.is_optional = is_optional

Judging by the bug you fixed, maybe we should type check things like &quot;is_optional&quot; (boolean) when we parse to catch errors even earlier! Great find.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1029004</commentid>
    <comment_count>19</comment_count>
      <attachid>236385</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2014-08-13 19:12:44 -0700</bug_when>
    <thetext>Comment on attachment 236385
PFR v2

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

r=me! I&apos;ve now looked over everything. This is great!

I wonder if we should and how we can have the run-input-generator-tests and run-inspector-gnerator-tests added to build bot that runs all tests.

&gt; Source/JavaScriptCore/inspector/scripts/tests/domains-with-varying-command-sizes.json:5
&gt; +    &quot;domain&quot;: &quot;Network1&quot;,
&gt; +
&gt; +    &quot;commands&quot;: [

Nit: Extra blank line can be removed.

&gt; Source/JavaScriptCore/inspector/scripts/tests/expected/domains-with-varying-command-sizes.json-result:374
&gt; +#ifndef InspectorTestFrontendDispatchers_h
&gt; +#define InspectorTestFrontendDispatchers_h
&gt; +
&gt; +#if ENABLE(INSPECTOR)
&gt; +
&gt; +#include &quot;InspectorTestTypeBuilders.h&quot;
&gt; +#include &lt;inspector/InspectorFrontendChannel.h&gt;
&gt; +#include &lt;inspector/InspectorValues.h&gt;
&gt; +#include &lt;wtf/PassRefPtr.h&gt;
&gt; +#include &lt;wtf/text/WTFString.h&gt;
&gt; +
&gt; +namespace Inspector {
&gt; +
&gt; +
&gt; +
&gt; +} // namespace Inspector

Heh. Maybe we should make empty files when generating frontend dispatchers for input without events. But seeing as this won&apos;t happen in practice it&apos;ll probably be a waste of time.

&gt; Source/JavaScriptCore/inspector/scripts/tests/expected/domains-with-varying-command-sizes.json-result:542
&gt; +static const char* const enum_constant_values[] = {
&gt; +};
&gt; +
&gt; +String getTestEnumConstantValue(int code) {
&gt; +    return enum_constant_values[code];
&gt; +}

Likewise.

&gt; Source/WebCore/inspector/protocol/CSS.json:167
&gt; +	    &quot;type&quot;: &quot;string&quot;,

Nit: Broken indentation.

&gt; Tools/Scripts/webkitpy/inspector/main.py:124
&gt; +        input_directory = os.path.join(&apos;JavaScriptCore&apos;, &apos;inspector&apos;, &apos;scripts&apos;, &apos;tests&apos;)
&gt; +        reference_directory = os.path.join(&apos;JavaScriptCore&apos;, &apos;inspector&apos;, &apos;scripts&apos;, &apos;tests&apos;, &apos;expected&apos;)

Hmm, I wonder if we should put the tests outside of JavaScriptCore/inspector/scripts/tests. But you are matching a precedent WebCore/bindings/scripts/tests and JavaScriptCore/replay/scripts.

Still, one big reason worth moving it out is that I don&apos;t want my code searches to be showing test results / expected results files when I do a search inside Source/JavaScriptCore. I do a lot of searches from Source/JavaScriptCore/inspector and I could see it picking up things in this directory.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1029171</commentid>
    <comment_count>20</comment_count>
      <attachid>236385</attachid>
    <who name="Brian Burg">burg</who>
    <bug_when>2014-08-14 12:43:49 -0700</bug_when>
    <thetext>Comment on attachment 236385
PFR v2

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

&gt;&gt; Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_header.py:95
&gt;&gt; +    def _generate_anonymous_enum_for_parameter(self, parameter, command):
&gt; 
&gt; This is done in multiple places exactly identical. Maybe it could be shared somewhere.

one is for commands, the other for events. They use different accessor names.

&gt;&gt; Source/JavaScriptCore/inspector/scripts/codegen/generate_type_builder_header.py:314
&gt;&gt; +            lines.append(&apos;&apos;)
&gt; 
&gt; This does not sound right. We should not be looking at the name of the type_member, but the type of the type_member.
&gt; 
&gt; It seems like this might be working by accident (as was the case in the old generator too).
&gt; 
&gt; For example, given an existing type with optional fields:
&gt; 
&gt;         {
&gt;             &quot;id&quot;: &quot;KeyPath&quot;,
&gt;             &quot;type&quot;: &quot;object&quot;,
&gt;             &quot;description&quot;: &quot;Key path.&quot;,
&gt;             &quot;properties&quot;: [
&gt;                 { &quot;name&quot;: &quot;type&quot;, &quot;type&quot;: &quot;string&quot;, &quot;enum&quot;: [&quot;null&quot;, &quot;string&quot;, &quot;array&quot;], &quot;description&quot;: &quot;Key path type.&quot; },
&gt;                 { &quot;name&quot;: &quot;string&quot;, &quot;type&quot;: &quot;string&quot;, &quot;optional&quot;: true, &quot;description&quot;: &quot;String value.&quot; },
&gt;                 { &quot;name&quot;: &quot;array&quot;, &quot;type&quot;: &quot;array&quot;, &quot;optional&quot;: true, &quot;items&quot;: { &quot;type&quot;: &quot;string&quot; }, &quot;description&quot;: &quot;Array value.&quot; }
&gt;             ]
&gt;         }
&gt; 
&gt; We generate this for the optional fields:
&gt; 
&gt;     /*
&gt;      * Synthetic constructor:
&gt;      * RefPtr&lt;KeyPath&gt; result = KeyPath::create()
&gt;      *     .setType(...);
&gt;      */
&gt;     static Builder&lt;NoFieldsSet&gt; create()
&gt;     {
&gt;         return Builder&lt;NoFieldsSet&gt;(Inspector::InspectorObject::create());
&gt;     }
&gt;     typedef Inspector::TypeBuilder::StructItemTraits ItemTraits;
&gt; 
&gt;     void setString(const String&amp; value)
&gt;     {
&gt;         this-&gt;setString(ASCIILiteral(&quot;string&quot;), value);
&gt;     }
&gt;     using Inspector::InspectorObjectBase::setString;
&gt; 
&gt; 
&gt;     void setArray(PassRefPtr&lt;Inspector::TypeBuilder::Array&lt;String&gt; &gt; value)
&gt;     {
&gt;         this-&gt;setValue(ASCIILiteral(&quot;array&quot;), value);
&gt;     }
&gt;     using Inspector::InspectorObjectBase::setArray;
&gt; 
&gt; 
&gt; The &quot;using&quot; lines here makes sense by accident because the field was named &quot;array&quot;.
&gt; 
&gt; I have a feeling that all of these using lines can probably just be removed! The methods are all protected in the base class. If they are required, we should do it correctly (and match the implementation inside the setter).
&gt; 
&gt; ---
&gt; 
&gt; Having said that, the fact that setArray takes an Array and calls setValue also sounds wrong, but is fine because setArray/setValue/setObject are identical. We should still fix that. See comment later on.

It should just call InspectorObjectBase::%(keyedSet)s(...) to avoid this stupid &apos;using&apos; stuff. Thanks for pointing it out, I probably didn&apos;t quite see the fix before. (Thanks for the test case too..)

&gt;&gt; Source/JavaScriptCore/inspector/scripts/codegen/generate_type_builder_implementation.py:142
&gt;&gt; +    }&quot;&quot;&quot; % args)
&gt; 
&gt; [Applies to multiple places in the patch]
&gt; 
&gt; I always wondered if part of what slows us down in debug builds is this find(...) for every single member. I wonder if there is a better way to check the properties.
&gt; 
&gt; We can combine the type declaration and assignment, and we should use ASCIILiteral:
&gt; 
&gt;     InspectorObject::iterator %(memberName)sPos = object-&gt;find(ASCIILiteral(&quot;%(memberName)s&quot;));

We should profile this and address it separately if it shows up. It would be nice to speed up debug builds.

&gt;&gt; Source/JavaScriptCore/inspector/scripts/codegen/generator.py:251
&gt;&gt; +            return &apos;setValue&apos;
&gt; 
&gt; I think ObjectType can use setObject and ArrayType can use setArray.
&gt; 
&gt; These 3 methods are all implemented identically right now in InspectorObjectBase. I don&apos;t think we ever have to actually use setValue ourselves.

I changed InspectorObjectBase::set{Object,Array} to take the *Base types since that&apos;s what everything inherits from. But it seems to work now. Hooray.

&gt;&gt; Source/JavaScriptCore/inspector/scripts/codegen/generator_templates.py:58
&gt;&gt; +// by the script: JavaScriptCore/replay/scripts/CodeGeneratorInspector.py&quot;&quot;&quot;)
&gt; 
&gt; Wrong script! Should be:
&gt; 
&gt;     Source/JavaScriptCore/inspector/scripts/codegen/generator_templates.py

I think this should reference the top-level script. A simple grep of the comment will trace back to the template file.

&gt;&gt; Source/JavaScriptCore/inspector/scripts/codegen/models.py:540
&gt;&gt; +        self.is_optional = is_optional
&gt; 
&gt; Judging by the bug you fixed, maybe we should type check things like &quot;is_optional&quot; (boolean) when we parse to catch errors even earlier! Great find.

Added.

&gt;&gt; Source/JavaScriptCore/inspector/scripts/tests/expected/domains-with-varying-command-sizes.json-result:374
&gt;&gt; +} // namespace Inspector
&gt; 
&gt; Heh. Maybe we should make empty files when generating frontend dispatchers for input without events. But seeing as this won&apos;t happen in practice it&apos;ll probably be a waste of time.

Yeah, I didn&apos;t bother.

&gt;&gt; Tools/Scripts/webkitpy/inspector/main.py:124
&gt;&gt; +        reference_directory = os.path.join(&apos;JavaScriptCore&apos;, &apos;inspector&apos;, &apos;scripts&apos;, &apos;tests&apos;, &apos;expected&apos;)
&gt; 
&gt; Hmm, I wonder if we should put the tests outside of JavaScriptCore/inspector/scripts/tests. But you are matching a precedent WebCore/bindings/scripts/tests and JavaScriptCore/replay/scripts.
&gt; 
&gt; Still, one big reason worth moving it out is that I don&apos;t want my code searches to be showing test results / expected results files when I do a search inside Source/JavaScriptCore. I do a lot of searches from Source/JavaScriptCore/inspector and I could see it picking up things in this directory.

The outputs use weird extensions exactly so you can filter by *cpp,*h,*py, whatever. I&apos;m not sure where you would move these otherwise. webkitpy tests are in the Tools directory I think, but so are the scripts themselves.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1029177</commentid>
    <comment_count>21</comment_count>
      <attachid>236611</attachid>
    <who name="Brian Burg">burg</who>
    <bug_when>2014-08-14 12:50:01 -0700</bug_when>
    <thetext>Created attachment 236611
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1029178</commentid>
    <comment_count>22</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-08-14 12:53:20 -0700</bug_when>
    <thetext>Attachment 236611 did not pass style-queue:


ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_header.py:63:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_header.py:91:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_header.py:99:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_header.py:135:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_header.py:175:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_header.py:45:  [BackendDispatcherHeaderGenerator.output_filename] Instance of &apos;BackendDispatcherHeaderGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_header.py:52:  [BackendDispatcherHeaderGenerator.generate_output] Instance of &apos;BackendDispatcherHeaderGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_header.py:63:  [BackendDispatcherHeaderGenerator.generate_output] Instance of &apos;BackendDispatcherHeaderGenerator&apos; has no &apos;_input_filepath&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_header.py:67:  [BackendDispatcherHeaderGenerator.generate_output] Instance of &apos;BackendDispatcherHeaderGenerator&apos; has no &apos;generate_license&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_header.py:78:  [BackendDispatcherHeaderGenerator._generate_handler_declarations_for_domain] Instance of &apos;BackendDispatcherHeaderGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_header.py:106:  [BackendDispatcherHeaderGenerator._generate_anonymous_enum_for_parameter] Instance of &apos;BackendDispatcherHeaderGenerator&apos; has no &apos;encoding_for_enum_value&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_header.py:163:  [BackendDispatcherHeaderGenerator._generate_dispatcher_declarations_for_domain] Instance of &apos;BackendDispatcherHeaderGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generator.py:47:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generator.py:77:  whitespace before &apos;]&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generator.py:88:  whitespace before &apos;]&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generator.py:217:  whitespace before &apos;]&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_type_builder_implementation.py:55:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_type_builder_implementation.py:115:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_type_builder_implementation.py:134:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_type_builder_implementation.py:150:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/models.py:62:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/models.py:60:  at least two spaces before inline comment  [pep8/E261] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/models.py:147:  [Type.raw_name] Instance of &apos;Type&apos; has no &apos;_name&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/models.py:147:  [Type.raw_name] Instance of &apos;Type&apos; has no &apos;_name&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_frontend_dispatcher_implementation.py:55:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_frontend_dispatcher_implementation.py:106:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_commands.py:62:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_commands.py:76:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_commands.py:87:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_commands.py:95:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_implementation.py:58:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_implementation.py:73:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_implementation.py:108:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_implementation.py:118:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_implementation.py:124:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_implementation.py:159:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_implementation.py:179:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_implementation.py:192:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_implementation.py:206:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_implementation.py:232:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/generate-inspector-protocol-bindings.py:177:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/generate-inspector-protocol-bindings.py:124:  [generate_from_specification] Undefined variable &apos;FrontendDispatcherHeaderGenerator&apos;  [pylint/E0602] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/generate-inspector-protocol-bindings.py:126:  [generate_from_specification] Undefined variable &apos;TypeBuilderHeaderGenerator&apos;  [pylint/E0602] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generator_templates.py:254:  whitespace before &apos;)&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_type_builder_header.py:54:  whitespace before &apos;]&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_type_builder_header.py:67:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_type_builder_header.py:277:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_type_builder_header.py:300:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/WebCore/inspector/InspectorReplayAgent.h:107:  The parameter name &quot;segmentState&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_frontend_dispatcher_header.py:62:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_frontend_dispatcher_header.py:77:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_frontend_dispatcher_header.py:103:  whitespace before &apos;}&apos;  [pep8/E202] [5]
Total errors found: 52 in 90 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1029184</commentid>
    <comment_count>23</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2014-08-14 13:05:07 -0700</bug_when>
    <thetext>(In reply to comment #20)
&gt; (From update of attachment 236385 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=236385&amp;action=review
&gt; 
&gt; &gt;&gt; Source/JavaScriptCore/inspector/scripts/codegen/generator_templates.py:58
&gt; &gt;&gt; +// by the script: JavaScriptCore/replay/scripts/CodeGeneratorInspector.py&quot;&quot;&quot;)
&gt; &gt; 
&gt; &gt; Wrong script! Should be:
&gt; &gt; 
&gt; &gt;     Source/JavaScriptCore/inspector/scripts/codegen/generator_templates.py
&gt; 
&gt; I think this should reference the top-level script. A simple grep of the comment will trace back to the template file.
&gt; 

Oops, I copied the wrong script name, lol.

What I mean is we should not have *replay* in the script name. This should be:

    Source/JavaScriptCore/inspector/scripts/generate-inspector-protocol-bindings.py</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1029185</commentid>
    <comment_count>24</comment_count>
      <attachid>236611</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2014-08-14 13:07:04 -0700</bug_when>
    <thetext>Comment on attachment 236611
Patch

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

&gt; Source/JavaScriptCore/inspector/scripts/codegen/generator_templates.py:61
&gt; +// by the script: Source/JavaScriptCore/inspector/scripts/codegen/generate-inspector-protocol-bindings.py&quot;&quot;&quot;)

Almost fixed! The &quot;/codegen&quot; part is not true.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1029244</commentid>
    <comment_count>25</comment_count>
      <attachid>236631</attachid>
    <who name="Brian Burg">burg</who>
    <bug_when>2014-08-14 15:41:53 -0700</bug_when>
    <thetext>Created attachment 236631
Fix for GTK build</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1029246</commentid>
    <comment_count>26</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-08-14 15:45:30 -0700</bug_when>
    <thetext>Attachment 236631 did not pass style-queue:


ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_header.py:63:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_header.py:91:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_header.py:99:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_header.py:135:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_header.py:175:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_header.py:45:  [BackendDispatcherHeaderGenerator.output_filename] Instance of &apos;BackendDispatcherHeaderGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_header.py:52:  [BackendDispatcherHeaderGenerator.generate_output] Instance of &apos;BackendDispatcherHeaderGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_header.py:63:  [BackendDispatcherHeaderGenerator.generate_output] Instance of &apos;BackendDispatcherHeaderGenerator&apos; has no &apos;_input_filepath&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_header.py:67:  [BackendDispatcherHeaderGenerator.generate_output] Instance of &apos;BackendDispatcherHeaderGenerator&apos; has no &apos;generate_license&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_header.py:78:  [BackendDispatcherHeaderGenerator._generate_handler_declarations_for_domain] Instance of &apos;BackendDispatcherHeaderGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_header.py:106:  [BackendDispatcherHeaderGenerator._generate_anonymous_enum_for_parameter] Instance of &apos;BackendDispatcherHeaderGenerator&apos; has no &apos;encoding_for_enum_value&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_header.py:163:  [BackendDispatcherHeaderGenerator._generate_dispatcher_declarations_for_domain] Instance of &apos;BackendDispatcherHeaderGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generator.py:47:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generator.py:77:  whitespace before &apos;]&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generator.py:88:  whitespace before &apos;]&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generator.py:217:  whitespace before &apos;]&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_type_builder_implementation.py:55:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_type_builder_implementation.py:115:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_type_builder_implementation.py:134:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_type_builder_implementation.py:150:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/models.py:62:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/models.py:60:  at least two spaces before inline comment  [pep8/E261] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/models.py:147:  [Type.raw_name] Instance of &apos;Type&apos; has no &apos;_name&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/models.py:147:  [Type.raw_name] Instance of &apos;Type&apos; has no &apos;_name&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_frontend_dispatcher_implementation.py:55:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_frontend_dispatcher_implementation.py:106:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_commands.py:62:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_commands.py:76:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_commands.py:87:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_commands.py:95:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_implementation.py:58:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_implementation.py:73:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_implementation.py:108:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_implementation.py:118:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_implementation.py:124:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_implementation.py:159:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_implementation.py:179:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_implementation.py:192:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_implementation.py:206:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_implementation.py:232:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/generate-inspector-protocol-bindings.py:177:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/generate-inspector-protocol-bindings.py:124:  [generate_from_specification] Undefined variable &apos;FrontendDispatcherHeaderGenerator&apos;  [pylint/E0602] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/generate-inspector-protocol-bindings.py:126:  [generate_from_specification] Undefined variable &apos;TypeBuilderHeaderGenerator&apos;  [pylint/E0602] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generator_templates.py:254:  whitespace before &apos;)&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_type_builder_header.py:54:  whitespace before &apos;]&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_type_builder_header.py:67:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_type_builder_header.py:277:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_type_builder_header.py:300:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/WebCore/inspector/InspectorReplayAgent.h:107:  The parameter name &quot;segmentState&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_frontend_dispatcher_header.py:62:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_frontend_dispatcher_header.py:77:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_frontend_dispatcher_header.py:103:  whitespace before &apos;}&apos;  [pep8/E202] [5]
Total errors found: 52 in 90 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1029272</commentid>
    <comment_count>27</comment_count>
    <who name="Brian Burg">burg</who>
    <bug_when>2014-08-14 17:25:17 -0700</bug_when>
    <thetext>bfulgham, I&apos;m having trouble diagnosing the windows EWS failure. The latest patch won&apos;t apply, but it builds fine in my Win7 VM. Is this some SVN-ism that got messed up because I use git-svn? I would appreciate any pointers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1029273</commentid>
    <comment_count>28</comment_count>
      <attachid>236640</attachid>
    <who name="Brian Burg">burg</who>
    <bug_when>2014-08-14 17:27:35 -0700</bug_when>
    <thetext>Created attachment 236640
Fix for GTK build (take 2)

Latest patch adds a workaround for re.sub taking different arguments in Python 2.6, which seems to be used by some GTK bots.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1029274</commentid>
    <comment_count>29</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-08-14 17:30:47 -0700</bug_when>
    <thetext>Attachment 236640 did not pass style-queue:


ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_header.py:63:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_header.py:91:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_header.py:99:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_header.py:135:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_header.py:175:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_header.py:45:  [BackendDispatcherHeaderGenerator.output_filename] Instance of &apos;BackendDispatcherHeaderGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_header.py:52:  [BackendDispatcherHeaderGenerator.generate_output] Instance of &apos;BackendDispatcherHeaderGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_header.py:63:  [BackendDispatcherHeaderGenerator.generate_output] Instance of &apos;BackendDispatcherHeaderGenerator&apos; has no &apos;_input_filepath&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_header.py:67:  [BackendDispatcherHeaderGenerator.generate_output] Instance of &apos;BackendDispatcherHeaderGenerator&apos; has no &apos;generate_license&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_header.py:78:  [BackendDispatcherHeaderGenerator._generate_handler_declarations_for_domain] Instance of &apos;BackendDispatcherHeaderGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_header.py:106:  [BackendDispatcherHeaderGenerator._generate_anonymous_enum_for_parameter] Instance of &apos;BackendDispatcherHeaderGenerator&apos; has no &apos;encoding_for_enum_value&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_header.py:163:  [BackendDispatcherHeaderGenerator._generate_dispatcher_declarations_for_domain] Instance of &apos;BackendDispatcherHeaderGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generator.py:47:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generator.py:77:  whitespace before &apos;]&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generator.py:88:  whitespace before &apos;]&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generator.py:217:  whitespace before &apos;]&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_type_builder_implementation.py:55:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_type_builder_implementation.py:115:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_type_builder_implementation.py:134:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_type_builder_implementation.py:150:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/models.py:62:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/models.py:60:  at least two spaces before inline comment  [pep8/E261] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/models.py:147:  [Type.raw_name] Instance of &apos;Type&apos; has no &apos;_name&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/models.py:147:  [Type.raw_name] Instance of &apos;Type&apos; has no &apos;_name&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_frontend_dispatcher_implementation.py:55:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_frontend_dispatcher_implementation.py:106:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_commands.py:62:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_commands.py:76:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_commands.py:87:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_commands.py:95:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_implementation.py:58:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_implementation.py:73:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_implementation.py:108:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_implementation.py:118:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_implementation.py:124:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_implementation.py:159:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_implementation.py:179:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_implementation.py:192:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_implementation.py:206:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_implementation.py:232:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/generate-inspector-protocol-bindings.py:177:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/generate-inspector-protocol-bindings.py:124:  [generate_from_specification] Undefined variable &apos;FrontendDispatcherHeaderGenerator&apos;  [pylint/E0602] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/generate-inspector-protocol-bindings.py:126:  [generate_from_specification] Undefined variable &apos;TypeBuilderHeaderGenerator&apos;  [pylint/E0602] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generator_templates.py:254:  whitespace before &apos;)&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_type_builder_header.py:54:  whitespace before &apos;]&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_type_builder_header.py:67:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_type_builder_header.py:277:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_type_builder_header.py:300:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/WebCore/inspector/InspectorReplayAgent.h:107:  The parameter name &quot;segmentState&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_frontend_dispatcher_header.py:62:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_frontend_dispatcher_header.py:77:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_frontend_dispatcher_header.py:103:  whitespace before &apos;}&apos;  [pep8/E202] [5]
Total errors found: 52 in 90 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1029317</commentid>
    <comment_count>30</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2014-08-15 03:59:18 -0700</bug_when>
    <thetext>It seems this patch killed the EFL and GTK EWS bots, 
they aren&apos;t able to do builds since 6-7 hours. 

Carlos, Gyuyoung, could you trigger clean build on the EWS machines?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1029319</commentid>
    <comment_count>31</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2014-08-15 04:37:13 -0700</bug_when>
    <thetext>(In reply to comment #30)
&gt; It seems this patch killed the EFL and GTK EWS bots, 
&gt; they aren&apos;t able to do builds since 6-7 hours. 
&gt; 
&gt; Carlos, Gyuyoung, could you trigger clean build on the EWS machines?

The problem is that the newly generated WebKitBuild/Release/DerivedSources/JavaScriptCore/InspectorJSTypeBuilders.h remained in the build and the
forwarding header still points to is instead of the original WebKitBuild/Release/DerivedSources/JavaScriptCore/inspector/InspectorJSTypeBuilders.h.

and maybe there are many other leaking headers in the WebKitBuild ...

So changing the generator and output path without changing the
filenames can cause strange incremental build issues. :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1029341</commentid>
    <comment_count>32</comment_count>
    <who name="Brian Burg">burg</who>
    <bug_when>2014-08-15 09:28:39 -0700</bug_when>
    <thetext>(In reply to comment #31)
&gt; (In reply to comment #30)
&gt; &gt; It seems this patch killed the EFL and GTK EWS bots, 
&gt; &gt; they aren&apos;t able to do builds since 6-7 hours. 
&gt; &gt; 
&gt; &gt; Carlos, Gyuyoung, could you trigger clean build on the EWS machines?
&gt; 
&gt; The problem is that the newly generated WebKitBuild/Release/DerivedSources/JavaScriptCore/InspectorJSTypeBuilders.h remained in the build and the
&gt; forwarding header still points to is instead of the original WebKitBuild/Release/DerivedSources/JavaScriptCore/inspector/InspectorJSTypeBuilders.h.
&gt; 
&gt; and maybe there are many other leaking headers in the WebKitBuild ...
&gt; 
&gt; So changing the generator and output path without changing the
&gt; filenames can cause strange incremental build issues. :(

This was a bug in the CMakeLists.txt that was fixed. It was copying to the old placement, since this patch was originally written a few months ago. It should be fixed in the latest patch so that it overwrites the same file locations.

I have gotten the EFL and GTK builds to pass locally, almost done with Windows.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1029344</commentid>
    <comment_count>33</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2014-08-15 09:33:15 -0700</bug_when>
    <thetext>(In reply to comment #27)
&gt; bfulgham, I&apos;m having trouble diagnosing the windows EWS failure. The latest patch won&apos;t apply, but it builds fine in my Win7 VM. Is this some SVN-ism that got messed up because I use git-svn? I would appreciate any pointers.

My guess would be line endings differences. Sometimes patches fail to apply because they are CRLF-ended (e.g., Visual Studio project files), but when edited on Mac they are LF-only. The patch system often chokes on this.

I&apos;ll take a look.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1029372</commentid>
    <comment_count>34</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2014-08-15 10:33:28 -0700</bug_when>
    <thetext>This doesn&apos;t build for me:

18&gt;c:\projects\webkit\opensource\webkitbuild\production\include\private\javascriptcore\InspectorJSTypeBuilders.h(130): error C2491: &apos;Inspector::TypeBuilder::getJSEnumConstantValue&apos; : definition of dllimport function not allowed (..\Modules\websockets\WebSocket.cpp)

This same error is repeated dozens of times in other files that end up including this header.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1029379</commentid>
    <comment_count>35</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2014-08-15 10:49:54 -0700</bug_when>
    <thetext>(In reply to comment #34)
&gt; This doesn&apos;t build for me:
&gt; 
&gt; 18&gt;c:\projects\webkit\opensource\webkitbuild\production\include\private\javascriptcore\InspectorJSTypeBuilders.h(130): error C2491: &apos;Inspector::TypeBuilder::getJSEnumConstantValue&apos; : definition of dllimport function not allowed (..\Modules\websockets\WebSocket.cpp)
&gt; 
&gt; This same error is repeated dozens of times in other files that end up including this header.

The problem may be your new template declaration. I don&apos;t think you need the JS_EXPORT_PRIVATE on the template, since it exists entirely in the header.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1029424</commentid>
    <comment_count>36</comment_count>
      <attachid>236668</attachid>
    <who name="Brian Burg">burg</who>
    <bug_when>2014-08-15 12:11:56 -0700</bug_when>
    <thetext>Created attachment 236668
Fix Windows build issues</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1029427</commentid>
    <comment_count>37</comment_count>
      <attachid>236668</attachid>
    <who name="Brian Burg">burg</who>
    <bug_when>2014-08-15 12:14:25 -0700</bug_when>
    <thetext>Comment on attachment 236668
Fix Windows build issues

oof, looks like my changes to VS filters reformatted the entire solution, will put up a smaller diff.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1029428</commentid>
    <comment_count>38</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-08-15 12:15:25 -0700</bug_when>
    <thetext>Attachment 236668 did not pass style-queue:


ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_header.py:63:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_header.py:91:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_header.py:99:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_header.py:135:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_header.py:175:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_header.py:45:  [BackendDispatcherHeaderGenerator.output_filename] Instance of &apos;BackendDispatcherHeaderGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_header.py:52:  [BackendDispatcherHeaderGenerator.generate_output] Instance of &apos;BackendDispatcherHeaderGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_header.py:63:  [BackendDispatcherHeaderGenerator.generate_output] Instance of &apos;BackendDispatcherHeaderGenerator&apos; has no &apos;_input_filepath&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_header.py:67:  [BackendDispatcherHeaderGenerator.generate_output] Instance of &apos;BackendDispatcherHeaderGenerator&apos; has no &apos;generate_license&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_header.py:78:  [BackendDispatcherHeaderGenerator._generate_handler_declarations_for_domain] Instance of &apos;BackendDispatcherHeaderGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_header.py:106:  [BackendDispatcherHeaderGenerator._generate_anonymous_enum_for_parameter] Instance of &apos;BackendDispatcherHeaderGenerator&apos; has no &apos;encoding_for_enum_value&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_header.py:163:  [BackendDispatcherHeaderGenerator._generate_dispatcher_declarations_for_domain] Instance of &apos;BackendDispatcherHeaderGenerator&apos; has no &apos;model&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generator.py:47:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generator.py:77:  whitespace before &apos;]&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generator.py:88:  whitespace before &apos;]&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generator.py:217:  whitespace before &apos;]&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_type_builder_implementation.py:55:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_type_builder_implementation.py:115:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_type_builder_implementation.py:134:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_type_builder_implementation.py:150:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/models.py:62:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/models.py:60:  at least two spaces before inline comment  [pep8/E261] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/models.py:147:  [Type.raw_name] Instance of &apos;Type&apos; has no &apos;_name&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/models.py:147:  [Type.raw_name] Instance of &apos;Type&apos; has no &apos;_name&apos; member  [pylint/E1101] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_frontend_dispatcher_implementation.py:55:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_frontend_dispatcher_implementation.py:106:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/ChangeLog:31:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_commands.py:62:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_commands.py:76:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_commands.py:87:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_commands.py:95:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_implementation.py:58:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_implementation.py:73:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_implementation.py:108:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_implementation.py:118:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_implementation.py:124:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_implementation.py:159:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_implementation.py:179:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_implementation.py:192:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_implementation.py:206:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_backend_dispatcher_implementation.py:232:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/generate-inspector-protocol-bindings.py:177:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/generate-inspector-protocol-bindings.py:124:  [generate_from_specification] Undefined variable &apos;FrontendDispatcherHeaderGenerator&apos;  [pylint/E0602] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/generate-inspector-protocol-bindings.py:126:  [generate_from_specification] Undefined variable &apos;TypeBuilderHeaderGenerator&apos;  [pylint/E0602] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generator_templates.py:254:  whitespace before &apos;)&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_type_builder_header.py:54:  whitespace before &apos;]&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_type_builder_header.py:67:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_type_builder_header.py:278:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_type_builder_header.py:301:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/WebCore/inspector/InspectorReplayAgent.h:107:  The parameter name &quot;segmentState&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_frontend_dispatcher_header.py:62:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_frontend_dispatcher_header.py:77:  whitespace before &apos;}&apos;  [pep8/E202] [5]
ERROR: Source/JavaScriptCore/inspector/scripts/codegen/generate_frontend_dispatcher_header.py:103:  whitespace before &apos;}&apos;  [pep8/E202] [5]
Total errors found: 53 in 92 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1029450</commentid>
    <comment_count>39</comment_count>
    <who name="Brian Burg">burg</who>
    <bug_when>2014-08-15 13:27:56 -0700</bug_when>
    <thetext>Cannot reproduce win EWS&apos;s problem. I have applied and built the patch on a Win7 VM with both git and svn checkouts. Is it safe to try landing this later today or tomorrow?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1029454</commentid>
    <comment_count>40</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2014-08-15 13:33:28 -0700</bug_when>
    <thetext>(In reply to comment #39)
&gt; Cannot reproduce win EWS&apos;s problem. I have applied and built the patch on a Win7 VM with both git and svn checkouts. Is it safe to try landing this later today or tomorrow?

Sure -- if you can build locally let&apos;s go ahead and land it. Just please watch the bots and be ready to react if something goes wrong :-)

I&apos;m watching bots today, if you want to land it.

Is JoePeck happy with it now? I&apos;m fine on the Windows side.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1029473</commentid>
    <comment_count>41</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2014-08-15 14:48:34 -0700</bug_when>
    <thetext>(In reply to comment #40)
&gt; (In reply to comment #39)
&gt; &gt; Cannot reproduce win EWS&apos;s problem. I have applied and built the patch on a Win7 VM with both git and svn checkouts. Is it safe to try landing this later today or tomorrow?
&gt; 
&gt; Is JoePeck happy with it now? I&apos;m fine on the Windows side.

Heh, this is perhaps an understatement. I am very happy with it =).

I thought of one other possible review comment, we (or rather I) will need to update:

    Source/WebInspectorUI/Scripts/update-LegacyInspectorBackendCommands.rb

So you might want to do one more search for CodeGeneratorInspector.py and see if there are other Tools or Scripts that we might want to adjust.

In any case, update-LegacyInspectorBackendCommands.rb can be done in a follow-up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1029487</commentid>
    <comment_count>42</comment_count>
    <who name="Brian Burg">burg</who>
    <bug_when>2014-08-15 15:40:49 -0700</bug_when>
    <thetext>Committed r172655: &lt;http://trac.webkit.org/changeset/172655&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1029558</commentid>
    <comment_count>43</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2014-08-15 20:25:49 -0700</bug_when>
    <thetext>(In reply to comment #32)
&gt; (In reply to comment #31)
&gt; &gt; (In reply to comment #30)
&gt; &gt; &gt; It seems this patch killed the EFL and GTK EWS bots, 
&gt; &gt; &gt; they aren&apos;t able to do builds since 6-7 hours. 
&gt; &gt; &gt; 
&gt; &gt; &gt; Carlos, Gyuyoung, could you trigger clean build on the EWS machines?
&gt; &gt; 
&gt; &gt; The problem is that the newly generated WebKitBuild/Release/DerivedSources/JavaScriptCore/InspectorJSTypeBuilders.h remained in the build and the
&gt; &gt; forwarding header still points to is instead of the original WebKitBuild/Release/DerivedSources/JavaScriptCore/inspector/InspectorJSTypeBuilders.h.
&gt; &gt; 
&gt; &gt; and maybe there are many other leaking headers in the WebKitBuild ...
&gt; &gt; 
&gt; &gt; So changing the generator and output path without changing the
&gt; &gt; filenames can cause strange incremental build issues. :(
&gt; 
&gt; This was a bug in the CMakeLists.txt that was fixed. It was copying to the old placement, since this patch was originally written a few months ago. It should be fixed in the latest patch so that it overwrites the same file locations.
&gt; 
&gt; I have gotten the EFL and GTK builds to pass locally, almost done with Windows.

I have gotten complaints from others that the GTK EWS bots are failing with warnings about this:
&lt;https://webkit-queues.appspot.com/results/6303728441229312&gt;

Do we need to clear the DerivedSources directory on the GTK bots so that they can get past this issue?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1029567</commentid>
    <comment_count>44</comment_count>
    <who name="Brian Burg">burg</who>
    <bug_when>2014-08-15 21:07:56 -0700</bug_when>
    <thetext>(In reply to comment #43)
&gt; (In reply to comment #32)
&gt; &gt; (In reply to comment #31)
&gt; &gt; &gt; (In reply to comment #30)
&gt; &gt; &gt; &gt; It seems this patch killed the EFL and GTK EWS bots, 
&gt; &gt; &gt; &gt; they aren&apos;t able to do builds since 6-7 hours. 
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Carlos, Gyuyoung, could you trigger clean build on the EWS machines?
&gt; &gt; &gt; 
&gt; &gt; &gt; The problem is that the newly generated WebKitBuild/Release/DerivedSources/JavaScriptCore/InspectorJSTypeBuilders.h remained in the build and the
&gt; &gt; &gt; forwarding header still points to is instead of the original WebKitBuild/Release/DerivedSources/JavaScriptCore/inspector/InspectorJSTypeBuilders.h.
&gt; &gt; &gt; 
&gt; &gt; &gt; and maybe there are many other leaking headers in the WebKitBuild ...
&gt; &gt; &gt; 
&gt; &gt; &gt; So changing the generator and output path without changing the
&gt; &gt; &gt; filenames can cause strange incremental build issues. :(
&gt; &gt; 
&gt; &gt; This was a bug in the CMakeLists.txt that was fixed. It was copying to the old placement, since this patch was originally written a few months ago. It should be fixed in the latest patch so that it overwrites the same file locations.
&gt; &gt; 
&gt; &gt; I have gotten the EFL and GTK builds to pass locally, almost done with Windows.
&gt; 
&gt; I have gotten complaints from others that the GTK EWS bots are failing with warnings about this:
&gt; &lt;https://webkit-queues.appspot.com/results/6303728441229312&gt;
&gt; 
&gt; Do we need to clear the DerivedSources directory on the GTK bots so that they can get past this issue?

Some bots use an old version of python (2.6). I seemed to have missed one use of flags= in re.sub. I&apos;ll fix it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1029575</commentid>
    <comment_count>45</comment_count>
    <who name="Brian Burg">burg</who>
    <bug_when>2014-08-15 21:50:23 -0700</bug_when>
    <thetext>Committed &lt;http://trac.webkit.org/changeset/172686&gt; to address some lingering issues with old bots.

Committed &lt;http://trac.webkit.org/changeset/172687&gt; to rebaseline after fixing a typo in a template.

Let me know here or on IRC if there are any more issues.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1125614</commentid>
    <comment_count>46</comment_count>
      <attachid>236668</attachid>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2015-09-14 10:47:34 -0700</bug_when>
    <thetext>Comment on attachment 236668
Fix Windows build issues

Cleared review? from attachment 236668 so that this bug does not appear in http://webkit.org/pending-review.  If you would like this patch reviewed, please attach it to a new bug (or re-open this bug before marking it for review again).</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>229243</attachid>
            <date>2014-04-13 13:35:55 -0700</date>
            <delta_ts>2014-04-17 21:58:05 -0700</delta_ts>
            <desc>WIP - can parse and typecheck 6.0 and 7.0 combined protocols</desc>
            <filename>bug-131596-20140413133526.patch</filename>
            <type>text/plain</type>
            <size>53343</size>
            <attacher name="Brian Burg">burg</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTY3MTgxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBk
ZGQ3NzcyZjc4YTU3OTY0NDhmYmViNjI3NjY1NDQzZTVmMGFlMGQ5Li44Y2Y5YzE4ZDE1N2IzMGUy
YTk4MWViMzQ2ZDEwMTZkMzFjYmFjOWJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMTggQEAKKzIwMTQtMDQtMTMgIEJyaWFuIEouIEJ1cmcgIDxidXJnQGNzLndhc2hpbmd0
b24uZWR1PgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IHJld3JpdGUgQ29kZUdlbmVyYXRvcklu
c3BlY3RvciB0byBiZSBtb2R1bGFyIGFuZCB0ZXN0YWJsZQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMxNTk2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9Db2RlR2VuZXJh
dG9ySW5zcGVjdG9yMi5weTogQWRkZWQuCisgICAgICAgIChnZW5lcmF0ZV9mcm9tX3NwZWNpZmlj
YXRpb24pOgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vX19pbml0X18ucHk6
IEFkZGVkLgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdG9yLnB5
OiBBZGRlZC4KKyAgICAgICAgKEdlbmVyYXRvcik6CisgICAgICAgIChHZW5lcmF0b3IuX19pbml0
X18pOgorICAgICAgICAoR2VuZXJhdG9yLm1vZGVsKToKKyAgICAgICAgKEdlbmVyYXRvci53cml0
ZV9vdXRwdXRfZmlsZXMpOgorICAgICAgICAoRHVtbXlHZW5lcmF0b3IpOgorICAgICAgICAoSW5j
cmVtZW50YWxGaWxlV3JpdGVyKToKKyAgICAgICAgKEluY3JlbWVudGFsRmlsZVdyaXRlci5fX2lu
aXRfXyk6CisgICAgICAgIChJbmNyZW1lbnRhbEZpbGVXcml0ZXIud3JpdGUpOgorICAgICAgICAo
SW5jcmVtZW50YWxGaWxlV3JpdGVyLmNsb3NlKToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0
cy9jb2RlZ2VuL21vZGVscy5weTogQWRkZWQuCisgICAgICAgIChQYXJzZUV4Y2VwdGlvbik6Cisg
ICAgICAgIChUeXBlY2hlY2tFeGNlcHRpb24pOgorICAgICAgICAoVHlwZU1vZGUpOgorICAgICAg
ICAoVHlwZU1vZGUuX19pbml0X18pOgorICAgICAgICAoVHlwZU1vZGUuZnJvbVN0cmluZyk6Cisg
ICAgICAgIChUeXBlTW9kZXMpOgorICAgICAgICAoVHlwZVJlZmVyZW5jZSk6CisgICAgICAgIChU
eXBlUmVmZXJlbmNlLl9faW5pdF9fKToKKyAgICAgICAgKFR5cGVSZWZlcmVuY2UucmVmZXJlbmNl
ZF9uYW1lKToKKyAgICAgICAgKFR5cGUpOgorICAgICAgICAoVHlwZS5fX2luaXRfXyk6CisgICAg
ICAgIChUeXBlLl9fZXFfXyk6CisgICAgICAgIChUeXBlLl9faGFzaF9fKToKKyAgICAgICAgKFR5
cGUuaXNfZW51bSk6CisgICAgICAgIChUeXBlLnR5cGVfZG9tYWluKToKKyAgICAgICAgKFR5cGUu
dHlwZV9tb2RlKToKKyAgICAgICAgKFR5cGUucXVhbGlmaWVkX25hbWUpOgorICAgICAgICAoVHlw
ZS5yZXNvbHZlX3R5cGVfcmVmZXJlbmNlcyk6CisgICAgICAgIChPYmplY3RUeXBlKToKKyAgICAg
ICAgKE9iamVjdFR5cGUuX19pbml0X18pOgorICAgICAgICAoT2JqZWN0VHlwZS50eXBlX2RvbWFp
bik6CisgICAgICAgIChPYmplY3RUeXBlLnR5cGVfbW9kZSk6CisgICAgICAgIChPYmplY3RUeXBl
LnF1YWxpZmllZF9uYW1lKToKKyAgICAgICAgKE9iamVjdFR5cGUucmVzb2x2ZV90eXBlX3JlZmVy
ZW5jZXMpOgorICAgICAgICAoUHJpbWl0aXZlVHlwZSk6CisgICAgICAgIChQcmltaXRpdmVUeXBl
Ll9faW5pdF9fKToKKyAgICAgICAgKFByaW1pdGl2ZVR5cGUudHlwZV9kb21haW4pOgorICAgICAg
ICAoUHJpbWl0aXZlVHlwZS50eXBlX21vZGUpOgorICAgICAgICAoUHJpbWl0aXZlVHlwZS5xdWFs
aWZpZWRfbmFtZSk6CisgICAgICAgIChBbGlhc2VkVHlwZSk6CisgICAgICAgIChBbGlhc2VkVHlw
ZS5fX2luaXRfXyk6CisgICAgICAgIChBbGlhc2VkVHlwZS50eXBlX2RvbWFpbik6CisgICAgICAg
IChBbGlhc2VkVHlwZS50eXBlX21vZGUpOgorICAgICAgICAoQWxpYXNlZFR5cGUucXVhbGlmaWVk
X25hbWUpOgorICAgICAgICAoQWxpYXNlZFR5cGUucmVzb2x2ZV90eXBlX3JlZmVyZW5jZXMpOgor
ICAgICAgICAoRW51bVR5cGUpOgorICAgICAgICAoRW51bVR5cGUuX19pbml0X18pOgorICAgICAg
ICAoRW51bVR5cGUuaXNfZW51bSk6CisgICAgICAgIChFbnVtVHlwZS50eXBlX2RvbWFpbik6Cisg
ICAgICAgIChFbnVtVHlwZS50eXBlX21vZGUpOgorICAgICAgICAoRW51bVR5cGUucXVhbGlmaWVk
X25hbWUpOgorICAgICAgICAoRW51bVR5cGUucmVzb2x2ZV90eXBlX3JlZmVyZW5jZXMpOgorICAg
ICAgICAoVmVjdG9yVHlwZSk6CisgICAgICAgIChWZWN0b3JUeXBlLl9faW5pdF9fKToKKyAgICAg
ICAgKFZlY3RvclR5cGUudHlwZV9kb21haW4pOgorICAgICAgICAoVmVjdG9yVHlwZS50eXBlX21v
ZGUpOgorICAgICAgICAoVmVjdG9yVHlwZS5xdWFsaWZpZWRfbmFtZSk6CisgICAgICAgIChWZWN0
b3JUeXBlLnJlc29sdmVfdHlwZV9yZWZlcmVuY2VzKToKKyAgICAgICAgKGNoZWNrX2Zvcl9yZXF1
aXJlZF9wcm9wZXJ0aWVzKToKKyAgICAgICAgKFByb3RvY29sKToKKyAgICAgICAgKFByb3RvY29s
Ll9faW5pdF9fKToKKyAgICAgICAgKFByb3RvY29sLnBhcnNlX3RvcGxldmVsKToKKyAgICAgICAg
KFByb3RvY29sLnBhcnNlX2RvbWFpbik6CisgICAgICAgIChQcm90b2NvbC5wYXJzZV90eXBlX2Rl
Y2xhcmF0aW9uKToKKyAgICAgICAgKFByb3RvY29sLnBhcnNlX3R5cGVfbWVtYmVyKToKKyAgICAg
ICAgKFByb3RvY29sLnBhcnNlX2NvbW1hbmQpOgorICAgICAgICAoUHJvdG9jb2wucGFyc2VfZXZl
bnQpOgorICAgICAgICAoUHJvdG9jb2wucGFyc2VfcGFyYW1ldGVyKToKKyAgICAgICAgKFByb3Rv
Y29sLnJlc29sdmVfdHlwZXMpOgorICAgICAgICAoUHJvdG9jb2wubG9va3VwX3R5cGVfZm9yX2Rl
Y2xhcmF0aW9uKToKKyAgICAgICAgKFByb3RvY29sLmxvb2t1cF90eXBlX3JlZmVyZW5jZSk6Cisg
ICAgICAgIChEb21haW4pOgorICAgICAgICAoRG9tYWluLl9faW5pdF9fKToKKyAgICAgICAgKERv
bWFpbi5yZXNvbHZlX3R5cGVfcmVmZXJlbmNlcyk6CisgICAgICAgIChEb21haW5zKToKKyAgICAg
ICAgKFR5cGVEZWNsYXJhdGlvbik6CisgICAgICAgIChUeXBlRGVjbGFyYXRpb24uX19pbml0X18p
OgorICAgICAgICAoVHlwZURlY2xhcmF0aW9uLnJlc29sdmVfdHlwZV9yZWZlcmVuY2VzKToKKyAg
ICAgICAgKFR5cGVNZW1iZXIpOgorICAgICAgICAoVHlwZU1lbWJlci5fX2luaXRfXyk6CisgICAg
ICAgIChUeXBlTWVtYmVyLnJlc29sdmVfdHlwZV9yZWZlcmVuY2VzKToKKyAgICAgICAgKFBhcmFt
ZXRlcik6CisgICAgICAgIChQYXJhbWV0ZXIuX19pbml0X18pOgorICAgICAgICAoUGFyYW1ldGVy
LnJlc29sdmVfdHlwZV9yZWZlcmVuY2VzKToKKyAgICAgICAgKENvbW1hbmQpOgorICAgICAgICAo
Q29tbWFuZC5fX2luaXRfXyk6CisgICAgICAgIChDb21tYW5kLnJlc29sdmVfdHlwZV9yZWZlcmVu
Y2VzKToKKyAgICAgICAgKEV2ZW50KToKKyAgICAgICAgKEV2ZW50Ll9faW5pdF9fKToKKyAgICAg
ICAgKEV2ZW50LnJlc29sdmVfdHlwZV9yZWZlcmVuY2VzKToKKyAgICAgICAgKiBpbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWR1cGxpY2F0ZS10eXBlLWRlY2xhcmF0aW9u
cy5qc29uLWVycm9yOiBBZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9l
eHBlY3RlZC9mYWlsLW9uLXR5cGUtZGVjbGFyYXRpb24tdXNpbmctdHlwZS1yZWZlcmVuY2UuanNv
bi1lcnJvcjogQWRkZWQuCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0
ZWQvZmFpbC1vbi11bmtub3duLXR5cGUtcmVmZXJlbmNlLWluLXR5cGUtZGVjbGFyYXRpb24uanNv
bi1lcnJvcjogQWRkZWQuCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0
ZWQvZmFpbC1vbi11bmtub3duLXR5cGUtcmVmZXJlbmNlLWluLXR5cGUtbWVtYmVyLmpzb24tZXJy
b3I6IEFkZGVkLgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3Nh
bWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24tZXJyb3I6IEFkZGVkLgorICAgICAgICAq
IGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tZHVwbGljYXRlLXR5cGUtZGVjbGFyYXRp
b25zLmpzb246IEFkZGVkLgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwt
b24tdHlwZS1kZWNsYXJhdGlvbi11c2luZy10eXBlLXJlZmVyZW5jZS5qc29uOiBBZGRlZC4KKyAg
ICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZl
cmVuY2UtaW4tdHlwZS1kZWNsYXJhdGlvbi5qc29uOiBBZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1t
ZW1iZXIuanNvbjogQWRkZWQuCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvc2Ft
ZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbjogQWRkZWQuCisgICAgICAgICogaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBl
Lmpzb246IEFkZGVkLgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3R5cGUtZGVj
bGFyYXRpb24tYXJyYXktdHlwZS5qc29uOiBBZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy90eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uOiBBZGRlZC4KKwogMjAx
NC0wNC0xMSAgQnJpYW4gSi4gQnVyZyAgPGJ1cmdAY3Mud2FzaGluZ3Rvbi5lZHU+CiAKICAgICAg
ICAgV2ViIFJlcGxheTogY29kZSBnZW5lcmF0b3Igc2hvdWxkIGNvbnNpZGVyIGVuY2xvc2luZyBj
bGFzcyB3aGVuIGNvbXB1dGluZyBkdXBsaWNhdGUgdHlwZSBuYW1lcwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL0NvZGVHZW5lcmF0b3JJbnNwZWN0
b3IyLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL0NvZGVHZW5l
cmF0b3JJbnNwZWN0b3IyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjEyMDI1NmE5NmUxY2ZkOWQwZDQ3MjJlOGQy
NjUzNGU2MGMzNGNkOTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvQ29kZUdlbmVyYXRvckluc3BlY3RvcjIucHkKQEAgLTAsMCArMSw5
NiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoYykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
IyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisj
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyMgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgb3MucGF0aAoraW1wb3J0IHJlCitpbXBv
cnQgc3lzCitpbXBvcnQgc3RyaW5nCitmcm9tIHN0cmluZyBpbXBvcnQgVGVtcGxhdGUKK2ltcG9y
dCBvcHRwYXJzZQoraW1wb3J0IGxvZ2dpbmcKKwordHJ5OgorICAgIGltcG9ydCBqc29uCitleGNl
cHQgSW1wb3J0RXJyb3I6CisgICAgaW1wb3J0IHNpbXBsZWpzb24gYXMganNvbgorCitmcm9tIGNv
ZGVnZW4gaW1wb3J0ICoKKworIyBVc2UgYSBnbG9iYWwgbG9nZ2VyLCB3aGljaCBub3JtYWxseSBv
bmx5IGxvZ3MgZXJyb3JzLgorIyBJdCBjYW4gYmUgY29uZmlndXJlZCB0byBsb2cgZGVidWcgbWVz
c2FnZXMgZnJvbSB0aGUgQ0xJLgorbG9nZ2luZy5iYXNpY0NvbmZpZyhmb3JtYXQ9JyUobGV2ZWxu
YW1lKXM6ICUobWVzc2FnZSlzJywgbGV2ZWw9bG9nZ2luZy5FUlJPUikKK2xvZyA9IGxvZ2dpbmcu
Z2V0TG9nZ2VyKCdnbG9iYWwnKQorCisKK2RlZiBnZW5lcmF0ZV9mcm9tX3NwZWNpZmljYXRpb24o
aW5wdXRfZmlsZXBhdGg9Tm9uZSwgb3V0cHV0X3ByZWZpeD0iIiwgb3V0cHV0X2RpcnBhdGg9Tm9u
ZSwgZm9yY2Vfb3V0cHV0PUZhbHNlKToKKyAgICB0cnk6CisgICAgICAgIHdpdGggb3BlbihpbnB1
dF9maWxlcGF0aCwgInIiKSBhcyBpbnB1dF9maWxlOgorICAgICAgICAgICAgcGFyc2VkX2pzb24g
PSBqc29uLmxvYWQoaW5wdXRfZmlsZSkKKyAgICBleGNlcHQgVmFsdWVFcnJvciBhcyBlOgorICAg
ICAgICByYWlzZSBFeGNlcHRpb24oIkVycm9yIHBhcnNpbmcgdmFsaWQgSlNPTiBpbiBmaWxlOiAi
ICsgaW5wdXRfZmlsZXBhdGgpCisKKyAgICBwcm90b2NvbCA9IG1vZGVscy5Qcm90b2NvbChwYXJz
ZWRfanNvbikKKyAgICBwcm90b2NvbC5yZXNvbHZlX3R5cGVzKCkKKworICAgIGdlbmVyYXRvcnMg
PSBbXQorICAgIGdlbmVyYXRvcnMuYXBwZW5kKER1bW15R2VuZXJhdG9yKHByb3RvY29sLCBpbnB1
dF9maWxlcGF0aCwgb3V0cHV0X3ByZWZpeCkpCisgICAgZm9yIGdlbmVyYXRvciBpbiBnZW5lcmF0
b3JzOgorICAgICAgICBnZW5lcmF0b3Iud3JpdGVfb3V0cHV0X2ZpbGVzKG91dHB1dF9kaXJwYXRo
LCBmb3JjZV9vdXRwdXQpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBjbGlf
cGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKHVzYWdlPSJ1c2FnZTogJXByb2cgW29wdGlv
bnNdIDxQcm90b2NvbC5qc29uPiIpCisgICAgY2xpX3BhcnNlci5hZGRfb3B0aW9uKCItbyIsICIt
LW91dHB1dERpciIsIGhlbHA9IkRpcmVjdG9yeSB3aGVyZSBnZW5lcmF0ZWQgZmlsZXMgc2hvdWxk
IGJlIHdyaXR0ZW4uIikKKyAgICBjbGlfcGFyc2VyLmFkZF9vcHRpb24oIi0tZm9yY2UiLCBhY3Rp
b249InN0b3JlX3RydWUiLCBoZWxwPSJGb3JjZSBvdXRwdXQgb2YgZ2VuZXJhdGVkIHNjcmlwdHMs
IGV2ZW4gaWYgbm90aGluZyBjaGFuZ2VkLiIpCisgICAgY2xpX3BhcnNlci5hZGRfb3B0aW9uKCIt
diIsICItLWRlYnVnIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwgaGVscD0iTG9nIGV4dHJhIG91dHB1
dCBmb3IgZGVidWdnaW5nIHRoZSBnZW5lcmF0b3IgaXRzZWxmLiIpCisgICAgY2xpX3BhcnNlci5h
ZGRfb3B0aW9uKCItdCIsICItLXRlc3QiLCBhY3Rpb249InN0b3JlX3RydWUiLCBoZWxwPSJFbmFi
bGUgdGVzdCBtb2RlLiBVc2UgdW5pcXVlIG91dHB1dCBmaWxlbmFtZXMgY3JlYXRlZCBieSBwcmVw
ZW5kaW5nIHRoZSBpbnB1dCBmaWxlbmFtZS4iKQorCisgICAgb3B0aW9ucyA9IE5vbmUKKworICAg
IGFyZ19vcHRpb25zLCBhcmdfdmFsdWVzID0gY2xpX3BhcnNlci5wYXJzZV9hcmdzKCkKKyAgICBp
ZiAobGVuKGFyZ192YWx1ZXMpIDwgMSk6CisgICAgICAgIHJhaXNlIFBhcnNlRXhjZXB0aW9uKCJB
dCBsZWFzdCBvbmUgcGxhaW4gYXJndW1lbnQgZXhwZWN0ZWQiKQorCisgICAgaWYgbm90IGFyZ19v
cHRpb25zLm91dHB1dERpcjoKKyAgICAgICAgcmFpc2UgUGFyc2VFeGNlcHRpb24oIk1pc3Npbmcg
b3V0cHV0IGRpcmVjdG9yeSIpCisKKyAgICBpZiBhcmdfb3B0aW9ucy5kZWJ1ZzoKKyAgICAgICAg
bG9nLnNldExldmVsKGxvZ2dpbmcuREVCVUcpCisKKyAgICBvcHRpb25zID0geworICAgICAgICAn
aW5wdXRfZmlsZXBhdGgnOiBhcmdfdmFsdWVzWzBdLAorICAgICAgICAnb3V0cHV0X2RpcnBhdGgn
OiBhcmdfb3B0aW9ucy5vdXRwdXREaXIsCisgICAgICAgICdvdXRwdXRfcHJlZml4Jzogb3MucGF0
aC5iYXNlbmFtZShhcmdfdmFsdWVzWzBdKSBpZiBhcmdfb3B0aW9ucy50ZXN0IGVsc2UgIiIsCisg
ICAgICAgICdmb3JjZV9vdXRwdXQnOiBhcmdfb3B0aW9ucy5mb3JjZQorICAgIH0KKworICAgIHRy
eToKKyAgICAgICAgZ2VuZXJhdGVfZnJvbV9zcGVjaWZpY2F0aW9uKCoqb3B0aW9ucykKKyAgICBl
eGNlcHQgKFBhcnNlRXhjZXB0aW9uLCBUeXBlY2hlY2tFeGNlcHRpb24pIGFzIGU6CisgICAgICAg
IGlmIGFyZ19vcHRpb25zLnRlc3Q6CisgICAgICAgICAgICBsb2cuZXJyb3IoZS5tZXNzYWdlKQor
ICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgICMgRm9yY2UgdGhlIGJ1aWxkIHRvIGZh
aWwuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Y29kZWdlbi9fX2luaXRfXy5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9jb2RlZ2VuL19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNmZGE3NzBlZDU3NGM1NzlkYmUw
MDMzMzRiOGViMzg5NTk5YmZhY2UKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9fX2luaXRfXy5weQpAQCAtMCwwICsxLDQg
QEAKKyMgUmVxdWlyZWQgZm9yIFB5dGhvbiB0byBzZWFyY2ggdGhpcyBkaXJlY3RvcnkgZm9yIG1v
ZHVsZSBmaWxlcworCitmcm9tIG1vZGVscyBpbXBvcnQgKgorZnJvbSBnZW5lcmF0b3IgaW1wb3J0
ICoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9j
b2RlZ2VuL2dlbmVyYXRvci5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9jb2RlZ2VuL2dlbmVyYXRvci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44NWFhMjhlMzc4NjhhZWZjNmNi
ZjdjZDQzYmM4YWI5MzRiZjJkOGQ3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdG9yLnB5CkBAIC0wLDAgKzEs
NjkgQEAKKyMgQ29weXJpZ2h0IChjKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyMgQ29weXJpZ2h0IChjKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0Ogor
IyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworIyBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyMgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisK
KworY2xhc3MgR2VuZXJhdG9yOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRf
ZmlsZXBhdGgsIG91dHB1dF9wcmVmaXgpOgorICAgICAgICBzZWxmLl9tb2RlbCA9IG1vZGVsCisg
ICAgICAgIHNlbGYuX2lucHV0X2ZpbGVwYXRoID0gaW5wdXRfZmlsZXBhdGgKKyAgICAgICAgc2Vs
Zi5fb3V0cHV0X3ByZWZpeCA9IG91dHB1dF9wcmVmaXgKKworICAgIGRlZiBtb2RlbChzZWxmKToK
KyAgICAgICAgcmV0dXJuIHNlbGYuX21vZGVsCisKKyAgICBkZWYgd3JpdGVfb3V0cHV0X2ZpbGVz
KHNlbGYsIF9kaXIsIGZvcmNlPUZhbHNlKToKKyAgICAgICAgcGFzcworCisKK2NsYXNzIER1bW15
R2VuZXJhdG9yKEdlbmVyYXRvcik6CisgICAgcGFzcworCisKKyMgQSB3cml0ZXIgdGhhdCBvbmx5
IHVwZGF0ZXMgZmlsZSBpZiBpdCBhY3R1YWxseSBjaGFuZ2VkLgorY2xhc3MgSW5jcmVtZW50YWxG
aWxlV3JpdGVyOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlcGF0aCwgZm9yY2Vfb3V0cHV0
KToKKyAgICAgICAgc2VsZi5fZmlsZXBhdGggPSBmaWxlcGF0aAorICAgICAgICBzZWxmLl9vdXRw
dXQgPSAiIgorICAgICAgICBzZWxmLmZvcmNlX291dHB1dCA9IGZvcmNlX291dHB1dAorCisgICAg
ZGVmIHdyaXRlKHNlbGYsIHRleHQpOgorICAgICAgICBzZWxmLl9vdXRwdXQgKz0gdGV4dAorCisg
ICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICB0ZXh0X2NoYW5nZWQgPSBUcnVlCisgICAgICAg
IHNlbGYuX291dHB1dCA9IHNlbGYuX291dHB1dC5yc3RyaXAoKSArICJcbiIKKworICAgICAgICB0
cnk6CisgICAgICAgICAgICByZWFkX2ZpbGUgPSBvcGVuKHNlbGYuX2ZpbGVwYXRoLCAiciIpCisg
ICAgICAgICAgICBvbGRfdGV4dCA9IHJlYWRfZmlsZS5yZWFkKCkKKyAgICAgICAgICAgIHJlYWRf
ZmlsZS5jbG9zZSgpCisgICAgICAgICAgICB0ZXh0X2NoYW5nZWQgPSBvbGRfdGV4dCAhPSBzZWxm
Ll9vdXRwdXQKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgIyBJZ25vcmUsIGp1c3Qgb3Zl
cndyaXRlIGJ5IGRlZmF1bHQKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBpZiB0ZXh0X2No
YW5nZWQgb3Igc2VsZi5mb3JjZV9vdXRwdXQ6CisgICAgICAgICAgICBvdXRfZmlsZSA9IG9wZW4o
c2VsZi5fZmlsZXBhdGgsICJ3IikKKyAgICAgICAgICAgIG91dF9maWxlLndyaXRlKHNlbGYuX291
dHB1dCkKKyAgICAgICAgICAgIG91dF9maWxlLmNsb3NlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL21vZGVscy5weSBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL21vZGVscy5weQpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5hMWZkNmU5ZWNkMGFkOGI0NDc2MTU0MmRlYzc3NDk4YmEyNGQ3NzczCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVn
ZW4vbW9kZWxzLnB5CkBAIC0wLDAgKzEsNTI0IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMK
KyMgQ29weXJpZ2h0IChjKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMg
Q29weXJpZ2h0IChjKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyMgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
IyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9y
dCBsb2dnaW5nCisKKyMgVXNlIGEgZ2xvYmFsIGxvZ2dlciwgd2hpY2ggbm9ybWFsbHkgb25seSBs
b2dzIGVycm9ycy4KKyMgSXQgY2FuIGJlIGNvbmZpZ3VyZWQgdG8gbG9nIGRlYnVnIG1lc3NhZ2Vz
IGZyb20gdGhlIENMSS4KK2xvZ2dpbmcuYmFzaWNDb25maWcoZm9ybWF0PSclKGxldmVsbmFtZSlz
OiAlKG1lc3NhZ2UpcycsIGxldmVsPWxvZ2dpbmcuRVJST1IpCitsb2cgPSBsb2dnaW5nLmdldExv
Z2dlcignZ2xvYmFsJykKKworCitjbGFzcyBQYXJzZUV4Y2VwdGlvbihFeGNlcHRpb24pOgorICAg
IHBhc3MKKworCitjbGFzcyBUeXBlY2hlY2tFeGNlcHRpb24oRXhjZXB0aW9uKToKKyAgICBwYXNz
CisKKworY2xhc3MgVHlwZU1vZGU6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUpOgorICAg
ICAgICBzZWxmLl9uYW1lID0gbmFtZQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBmcm9t
U3RyaW5nKG1vZGVTdHJpbmcpOgorICAgICAgICBtb2RlU3RyaW5nID0gbW9kZVN0cmluZy51cHBl
cigpCisgICAgICAgIGlmIG1vZGVTdHJpbmcgPT0gJ1NDQUxBUic6CisgICAgICAgICAgICByZXR1
cm4gVHlwZU1vZGVzLlNDQUxBUgorICAgICAgICBpZiBtb2RlU3RyaW5nID09ICdIRUFWWV9TQ0FM
QVInOgorICAgICAgICAgICAgcmV0dXJuIFR5cGVNb2Rlcy5IRUFWWV9TQ0FMQVIKKyAgICAgICAg
aWYgbW9kZVN0cmluZyA9PSAnVU5JUVVFJzoKKyAgICAgICAgICAgIHJldHVybiBUeXBlTW9kZXMu
VU5JUVVFCisgICAgICAgIGlmIG1vZGVTdHJpbmcgPT0gJ1JFRkNPVU5URUQnOgorICAgICAgICAg
ICAgcmV0dXJuIFR5cGVNb2Rlcy5SRUZDT1VOVEVECisgICAgICAgIGlmIG1vZGVTdHJpbmcgPT0g
J1ZFQ1RPUic6CisgICAgICAgICAgICByZXR1cm4gVHlwZU1vZGVzLlZFQ1RPUgorCisgICAgICAg
IHJhaXNlIFBhcnNlRXhjZXB0aW9uKCJVbmtub3duIHR5cGUgbW9kZTogIiArIG1vZGVTdHJpbmcp
CisKKworY2xhc3MgVHlwZU1vZGVzOgorICAgICMgQ29weSBmb3IgYXNzaWdubWVudCBhbmQgZm9y
IGdldHRlcgorICAgIFNDQUxBUiA9IFR5cGVNb2RlKCJTQ0FMQVIiKQorICAgICMgQ29weSBmb3Ig
YXNzaWdubWVudCwgcGFzcyBieSByZWZlcmVuY2UgZm9yIGdldHRlcgorICAgIEhFQVZZX1NDQUxB
UiA9IFR5cGVNb2RlKCJIRUFWWV9TQ0FMQVIiKQorICAgICMgTW92ZSBmb3IgYXNzaWdubWVudCwg
cGFzcyBieSByZWZlcmVuY2UgZm9yIGdldHRlcgorICAgIFVOSVFVRSA9IFR5cGVNb2RlKCJVTklR
VUUiKQorICAgICMgQ29weSBhIFJlZlB0ciBmb3IgYXNzaWdubWVudCBhbmQgZ2V0dGVyCisgICAg
UkVGQ09VTlRFRCA9IFR5cGVNb2RlKCJSRUZDT1VOVEVEIikKKyAgICAjIE1vdmUgb3BlcmF0b3Ig
Zm9yIGFzc2lnbm1lbnQsIHBhc3MgYnkgcmVmZXJlbmNlIGZvciBnZXR0ZXIKKyAgICBWRUNUT1Ig
PSBUeXBlTW9kZSgiVkVDVE9SIikKKworCitjbGFzcyBUeXBlUmVmZXJlbmNlOgorICAgIGRlZiBf
X2luaXRfXyhzZWxmLCB0eXBlX2tpbmQsIHJlZmVyZW5jZWRfdHlwZV9uYW1lLCBlbnVtX3ZhbHVl
cywgYXJyYXlfaXRlbXMpOgorICAgICAgICBzZWxmLnR5cGVfa2luZCA9IHR5cGVfa2luZAorICAg
ICAgICBzZWxmLnJlZmVyZW5jZWRfdHlwZV9uYW1lID0gcmVmZXJlbmNlZF90eXBlX25hbWUKKyAg
ICAgICAgc2VsZi5lbnVtX3ZhbHVlcyA9IGVudW1fdmFsdWVzCisgICAgICAgIGlmIGFycmF5X2l0
ZW1zIGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLmFycmF5X3R5cGVfcmVmID0gTm9uZQorICAg
ICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hcnJheV90eXBlX3JlZiA9IFR5cGVSZWZlcmVu
Y2UoYXJyYXlfaXRlbXMuZ2V0KCd0eXBlJyksIGFycmF5X2l0ZW1zLmdldCgnJHJlZicpLCBhcnJh
eV9pdGVtcy5nZXQoJ2VudW0nLCBbXSksIGFycmF5X2l0ZW1zLmdldCgnaXRlbXMnKSkKKworICAg
ICAgICBpZiB0eXBlX2tpbmQgaXMgbm90IE5vbmUgYW5kIHJlZmVyZW5jZWRfdHlwZV9uYW1lIGlz
IG5vdCBOb25lOgorICAgICAgICAgICAgcmFpc2UgUGFyc2VFeGNlcHRpb24oIlR5cGUgcmVmZXJl
bmNlIGNhbm5vdCBoYXZlIGJvdGggJ3R5cGUnIGFuZCAnJHJlZicga2V5cy4iKQorCisgICAgICAg
IGlmIHR5cGVfa2luZCA9PSAiYXJyYXkiIGFuZCBhcnJheV9pdGVtcyBpcyBOb25lOgorICAgICAg
ICAgICAgcmFpc2UgUGFyc2VFeGNlcHRpb24oIlR5cGUgcmVmZXJlbmNlIHdpdGggdHlwZSAnYXJy
YXknIG11c3QgaGF2ZSBrZXkgJ2l0ZW1zJyB0byBkZWZpbmUgYXJyYXkgZWxlbWVudCB0eXBlLiIp
CisKKyAgICBkZWYgcmVmZXJlbmNlZF9uYW1lKHNlbGYpOgorICAgICAgICBpZiBzZWxmLnJlZmVy
ZW5jZWRfdHlwZV9uYW1lIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYucmVm
ZXJlbmNlZF90eXBlX25hbWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBzZWxm
LnR5cGVfa2luZCAgIyBpbnRlZ2VyLCBzdHJpbmcsIG51bWJlciwgYm9vbGVhbiwgZW51bSwgb2Jq
ZWN0LCBhcnJheQorCisKK2NsYXNzIFR5cGU6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAg
ICAgICBwYXNzCisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJu
IHNlbGYucXVhbGlmaWVkX25hbWUoKSA9PSBvdGhlci5xdWFsaWZpZWRfbmFtZSgpIGFuZCBzZWxm
LnR5cGVfbW9kZSgpID09IG90aGVyLnR5cGVfbW9kZSgpCisKKyAgICBkZWYgX19oYXNoX18oc2Vs
Zik6CisgICAgICAgIHJldHVybiBzZWxmLnF1YWxpZmllZF9uYW1lKCkuX19oYXNoX18oKQorCisg
ICAgIyBUaGVzZSBtZXRob2RzIHNob3VsZCBiZSBvdmVycmlkZGVuIGJ5IHN1YmNsYXNzZXMuCisg
ICAgZGVmIGlzX2VudW0oc2VsZik6CisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIHR5
cGVfZG9tYWluKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgdHlwZV9tb2RlKHNlbGYp
OgorICAgICAgICBwYXNzCisKKyAgICBkZWYgcXVhbGlmaWVkX25hbWUoc2VsZik6CisgICAgICAg
IHBhc3MKKworICAgICMgVGhpcyBpcyB1c2VkIHRvIHJlc29sdmUgbmVzdGVkIHR5cGVzIGFmdGVy
IGluc3RhbmNlcyBhcmUgY3JlYXRlZC4KKyAgICBkZWYgcmVzb2x2ZV90eXBlX3JlZmVyZW5jZXMo
c2VsZiwgcHJvdG9jb2wpOgorICAgICAgICBwYXNzCisKKworY2xhc3MgT2JqZWN0VHlwZShUeXBl
KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwgZG9tYWluLCBtZW1iZXJzKToKKyAgICAg
ICAgc2VsZi5fbmFtZSA9IG5hbWUKKyAgICAgICAgc2VsZi5fZG9tYWluID0gZG9tYWluCisgICAg
ICAgIHNlbGYuX21lbWJlcnMgPSBtZW1iZXJzCisKKyAgICBkZWYgdHlwZV9kb21haW4oc2VsZik6
CisgICAgICAgIHJldHVybiBzZWxmLl9kb21haW4KKworICAgIGRlZiB0eXBlX21vZGUoc2VsZik6
CisgICAgICAgIHJldHVybiBUeXBlTW9kZXMuUkVGQ09VTlRFRAorCisgICAgZGVmIHF1YWxpZmll
ZF9uYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gICIuIi5qb2luKFtzZWxmLnR5cGVfZG9tYWlu
KCkuZG9tYWluX25hbWUsIHNlbGYuX25hbWVdKQorCisgICAgZGVmIHJlc29sdmVfdHlwZV9yZWZl
cmVuY2VzKHNlbGYsIHByb3RvY29sKToKKyAgICAgICAgcGFzcworCisKK2NsYXNzIFByaW1pdGl2
ZVR5cGUoVHlwZSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsIG1vZGUpOgorICAgICAg
ICBzZWxmLl9uYW1lID0gbmFtZQorICAgICAgICBzZWxmLl9tb2RlID0gbW9kZQorCisgICAgZGVm
IHR5cGVfZG9tYWluKHNlbGYpOgorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIHR5cGVf
bW9kZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX21vZGUKKworICAgIGRlZiBxdWFsaWZp
ZWRfbmFtZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX25hbWUKKworCitjbGFzcyBBbGlh
c2VkVHlwZShUeXBlKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwgZG9tYWluLCBhbGlh
c2VkX3R5cGVfcmVmKToKKyAgICAgICAgc2VsZi5fbmFtZSA9IG5hbWUKKyAgICAgICAgc2VsZi5f
ZG9tYWluID0gZG9tYWluCisgICAgICAgIHNlbGYuX2FsaWFzZWRfdHlwZV9yZWYgPSBhbGlhc2Vk
X3R5cGVfcmVmCisgICAgICAgIHNlbGYuX2FsaWFzZWRfdHlwZSA9IE5vbmUKKworICAgIGRlZiB0
eXBlX2RvbWFpbihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2RvbWFpbgorCisgICAgZGVm
IHR5cGVfbW9kZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2FsaWFzZWRfdHlwZS50eXBl
X21vZGUoKQorCisgICAgZGVmIHF1YWxpZmllZF9uYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4g
ICIuIi5qb2luKFtzZWxmLnR5cGVfZG9tYWluKCkuZG9tYWluX25hbWUsIHNlbGYuX25hbWVdKQor
CisgICAgZGVmIHJlc29sdmVfdHlwZV9yZWZlcmVuY2VzKHNlbGYsIHByb3RvY29sKToKKyAgICAg
ICAgaWYgc2VsZi5fYWxpYXNlZF90eXBlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmV0dXJu
CisKKyAgICAgICAgc2VsZi5fYWxpYXNlZF90eXBlID0gcHJvdG9jb2wubG9va3VwX3R5cGVfcmVm
ZXJlbmNlKHNlbGYuX2FsaWFzZWRfdHlwZV9yZWYsIHNlbGYudHlwZV9kb21haW4oKSkKKyAgICAg
ICAgbG9nLmRlYnVnKCI8IFJlc29sdmVkIHR5cGUgcmVmZXJlbmNlIGZvciBhbGlhc2VkIHR5cGUg
aW4gJXM6ICVzIiAlIChzZWxmLnF1YWxpZmllZF9uYW1lKCksIHNlbGYuX2FsaWFzZWRfdHlwZS5x
dWFsaWZpZWRfbmFtZSgpKSkKKworCitjbGFzcyBFbnVtVHlwZShUeXBlKToKKyAgICBkZWYgX19p
bml0X18oc2VsZiwgbmFtZSwgZG9tYWluLCB2YWx1ZXMsIHByaW1pdGl2ZV90eXBlX3JlZik6Cisg
ICAgICAgIHNlbGYuX25hbWUgPSBuYW1lCisgICAgICAgIHNlbGYuX2RvbWFpbiA9IGRvbWFpbgor
ICAgICAgICBzZWxmLl92YWx1ZXMgPSB2YWx1ZXMKKyAgICAgICAgc2VsZi5fcHJpbWl0aXZlX3R5
cGVfcmVmID0gcHJpbWl0aXZlX3R5cGVfcmVmCisgICAgICAgIHNlbGYuX3ByaW1pdGl2ZV90eXBl
ID0gTm9uZQorCisgICAgZGVmIGlzX2VudW0oc2VsZik6CisgICAgICAgIHJldHVybiBUcnVlCisK
KyAgICBkZWYgdHlwZV9kb21haW4oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9kb21haW4K
KworICAgIGRlZiB0eXBlX21vZGUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9wcmltaXRp
dmVfdHlwZS50eXBlX21vZGUoKQorCisgICAgZGVmIHF1YWxpZmllZF9uYW1lKHNlbGYpOgorICAg
ICAgICByZXR1cm4gICIuIi5qb2luKFtzZWxmLnR5cGVfZG9tYWluKCkuZG9tYWluX25hbWUsIHNl
bGYuX25hbWVdKQorCisgICAgZGVmIHJlc29sdmVfdHlwZV9yZWZlcmVuY2VzKHNlbGYsIHByb3Rv
Y29sKToKKyAgICAgICAgaWYgc2VsZi5fcHJpbWl0aXZlX3R5cGUgaXMgbm90IE5vbmU6CisgICAg
ICAgICAgICByZXR1cm4KKworICAgICAgICBzZWxmLl9wcmltaXRpdmVfdHlwZSA9IHByb3RvY29s
Lmxvb2t1cF90eXBlX3JlZmVyZW5jZShzZWxmLl9wcmltaXRpdmVfdHlwZV9yZWYsIERvbWFpbnMu
R0xPQkFMKQorICAgICAgICBsb2cuZGVidWcoIjwgUmVzb2x2ZWQgdHlwZSByZWZlcmVuY2UgZm9y
IGVudW0gdHlwZSBpbiAlczogJXMiICUgKHNlbGYucXVhbGlmaWVkX25hbWUoKSwgc2VsZi5fcHJp
bWl0aXZlX3R5cGUucXVhbGlmaWVkX25hbWUoKSkpCisgICAgICAgIGxvZy5kZWJ1ZygiPDwgZW51
bSB2YWx1ZXM6ICVzIiAlIHNlbGYuX3ZhbHVlcykKKworCitjbGFzcyBWZWN0b3JUeXBlKFR5cGUp
OgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBlbGVtZW50X3R5cGVfcmVmLCBkb21haW4pOgorICAg
ICAgICBzZWxmLl9kb21haW4gPSBkb21haW4KKyAgICAgICAgc2VsZi5fZWxlbWVudF90eXBlX3Jl
ZiA9IGVsZW1lbnRfdHlwZV9yZWYKKyAgICAgICAgc2VsZi5fZWxlbWVudF90eXBlID0gTm9uZQor
CisgICAgZGVmIHR5cGVfZG9tYWluKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fZG9tYWlu
CisKKyAgICBkZWYgdHlwZV9tb2RlKHNlbGYpOgorICAgICAgICByZXR1cm4gVHlwZU1vZGVzLlZF
Q1RPUgorCisgICAgZGVmIHF1YWxpZmllZF9uYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gICIu
Ii5qb2luKFsidmVjdG9yIiwgc2VsZi5fZWxlbWVudF90eXBlLnF1YWxpZmllZF9uYW1lKCldKQor
CisgICAgZGVmIHJlc29sdmVfdHlwZV9yZWZlcmVuY2VzKHNlbGYsIHByb3RvY29sKToKKyAgICAg
ICAgaWYgc2VsZi5fZWxlbWVudF90eXBlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmV0dXJu
CisKKyAgICAgICAgc2VsZi5fZWxlbWVudF90eXBlID0gcHJvdG9jb2wubG9va3VwX3R5cGVfcmVm
ZXJlbmNlKHNlbGYuX2VsZW1lbnRfdHlwZV9yZWYsIHNlbGYudHlwZV9kb21haW4oKSkKKyAgICAg
ICAgbG9nLmRlYnVnKCI8IFJlc29sdmVkIHR5cGUgcmVmZXJlbmNlIGZvciBlbGVtZW50IHR5cGUg
aW4gJXM6ICVzIiAlIChzZWxmLnF1YWxpZmllZF9uYW1lKCksIHNlbGYuX2VsZW1lbnRfdHlwZS5x
dWFsaWZpZWRfbmFtZSgpKSkKKworCitkZWYgY2hlY2tfZm9yX3JlcXVpcmVkX3Byb3BlcnRpZXMo
cHJvcHMsIG9iaiwgd2hhdCk6CisgICAgZm9yIHByb3AgaW4gcHJvcHM6CisgICAgICAgIGlmIHBy
b3Agbm90IGluIG9iajoKKyAgICAgICAgICAgIHJhaXNlIFBhcnNlRXhjZXB0aW9uKCJXaGVuIHBh
cnNpbmcgJXMsIHJlcXVpcmVkIHByb3BlcnR5IG1pc3Npbmc6ICVzIiAlICh3aGF0LCBwcm9wKSkK
KworCitjbGFzcyBQcm90b2NvbDoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcGFyc2VkX2pzb24p
OgorICAgICAgICBzZWxmLmRvbWFpbnMgPSBbXQorCisgICAgICAgICMgVHlwZXMgYXJlIHF1YWxp
ZmllZCBieSB0aGVpciBlbmNsb3NpbmcgZG9tYWluLCB1bmxlc3MgdGhleSBhcmUgZ2xvYmFsIChp
LmUuLCBmbG9hdCwgc3RyaW5nKQorICAgICAgICBzZWxmLnR5cGVzX2J5X25hbWUgPSB7fQorCisg
ICAgICAgIHNlbGYucGFyc2VfdG9wbGV2ZWwocGFyc2VkX2pzb24pCisKKyAgICBkZWYgcGFyc2Vf
dG9wbGV2ZWwoc2VsZiwganNvbik6CisgICAgICAgIGxvZy5kZWJ1ZygicGFyc2UgdG9wbGV2ZWwi
KQorCisgICAgICAgIGlmIGlzaW5zdGFuY2UoanNvbiwgZGljdCkgYW5kICdkb21haW5zJyBpbiBq
c29uOgorICAgICAgICAgICAganNvbiA9IGpzb25bJ2RvbWFpbnMnXQorICAgICAgICBpZiBub3Qg
aXNpbnN0YW5jZShqc29uLCBsaXN0KToKKyAgICAgICAgICAgIGpzb24gPSBbanNvbl0KKworICAg
ICAgICBmb3IgZG9tYWluIGluIGpzb246CisgICAgICAgICAgICBzZWxmLnBhcnNlX2RvbWFpbihk
b21haW4pCisKKyAgICBkZWYgcGFyc2VfZG9tYWluKHNlbGYsIGpzb24pOgorICAgICAgICBjaGVj
a19mb3JfcmVxdWlyZWRfcHJvcGVydGllcyhbJ2RvbWFpbiddLCBqc29uLCAiZG9tYWluIikKKyAg
ICAgICAgbG9nLmRlYnVnKCJwYXJzZSBkb21haW4gIiArIGpzb25bJ2RvbWFpbiddKQorCisgICAg
ICAgIHR5cGVzID0gW10KKyAgICAgICAgY29tbWFuZHMgPSBbXQorICAgICAgICBldmVudHMgPSBb
XQorCisgICAgICAgIGlmICd0eXBlcycgaW4ganNvbjoKKyAgICAgICAgICAgIGlmIG5vdCBpc2lu
c3RhbmNlKGpzb25bJ3R5cGVzJ10sIGxpc3QpOgorICAgICAgICAgICAgICAgIHJhaXNlIFBhcnNl
RXhjZXB0aW9uKCJNYWxmb3JtZWQgc3BlY2lmaWNhdGlvbjogdHlwZXMgaXMgbm90IGFuIGFycmF5
IikKKyAgICAgICAgICAgIHR5cGVzLmV4dGVuZChbc2VsZi5wYXJzZV90eXBlX2RlY2xhcmF0aW9u
KF9kZWNsYXJhdGlvbikgZm9yIF9kZWNsYXJhdGlvbiBpbiBqc29uWyd0eXBlcyddXSkKKworICAg
ICAgICBpZiAnY29tbWFuZHMnIGluIGpzb246CisgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5j
ZShqc29uWydjb21tYW5kcyddLCBsaXN0KToKKyAgICAgICAgICAgICAgICByYWlzZSBQYXJzZUV4
Y2VwdGlvbigiTWFsZm9ybWVkIHNwZWNpZmljYXRpb246IGNvbW1hbmRzIGlzIG5vdCBhbiBhcnJh
eSIpCisgICAgICAgICAgICBjb21tYW5kcy5leHRlbmQoW3NlbGYucGFyc2VfY29tbWFuZChfY29t
bWFuZCkgZm9yIF9jb21tYW5kIGluIGpzb25bJ2NvbW1hbmRzJ11dKQorCisgICAgICAgIGlmICdl
dmVudHMnIGluIGpzb246CisgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShqc29uWydldmVu
dHMnXSwgbGlzdCk6CisgICAgICAgICAgICAgICAgcmFpc2UgUGFyc2VFeGNlcHRpb24oIk1hbGZv
cm1lZCBzcGVjaWZpY2F0aW9uOiBldmVudHMgaXMgbm90IGFuIGFycmF5IikKKyAgICAgICAgICAg
IGV2ZW50cy5leHRlbmQoW3NlbGYucGFyc2VfZXZlbnQoX2V2ZW50KSBmb3IgX2V2ZW50IGluIGpz
b25bJ2V2ZW50cyddXSkKKworICAgICAgICBzZWxmLmRvbWFpbnMuYXBwZW5kKERvbWFpbihqc29u
Wydkb21haW4nXSwganNvbi5nZXQoJ2Rlc2NyaXB0aW9uJywgIiIpLCB0eXBlcywgY29tbWFuZHMs
IGV2ZW50cykpCisKKyAgICBkZWYgcGFyc2VfdHlwZV9kZWNsYXJhdGlvbihzZWxmLCBqc29uKToK
KyAgICAgICAgY2hlY2tfZm9yX3JlcXVpcmVkX3Byb3BlcnRpZXMoWydpZCcsICd0eXBlJ10sIGpz
b24sICJ0eXBlIikKKyAgICAgICAgbG9nLmRlYnVnKCJwYXJzZSB0eXBlICVzIiAlIGpzb25bJ2lk
J10pCisKKyAgICAgICAgdHlwZV9tZW1iZXJzID0gW10KKworICAgICAgICBpZiAncHJvcGVydGll
cycgaW4ganNvbjoKKyAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGpzb25bJ3Byb3BlcnRp
ZXMnXSwgbGlzdCk6CisgICAgICAgICAgICAgICAgcmFpc2UgUGFyc2VFeGNlcHRpb24oIk1hbGZv
cm1lZCBzcGVjaWZpY2F0aW9uOiBwcm9wZXJ0aWVzIGlzIG5vdCBhbiBhcnJheSIpCisgICAgICAg
ICAgICB0eXBlX21lbWJlcnMuZXh0ZW5kKFtzZWxmLnBhcnNlX3R5cGVfbWVtYmVyKF9tZW1iZXIp
IGZvciBfbWVtYmVyIGluIGpzb25bJ3Byb3BlcnRpZXMnXV0pCisKKyAgICAgICAgdHlwZV9yZWYg
PSBUeXBlUmVmZXJlbmNlKGpzb25bJ3R5cGUnXSwgTm9uZSwganNvbi5nZXQoJ2VudW0nLCBbXSks
IGpzb24uZ2V0KCdpdGVtcycpKQorICAgICAgICByZXR1cm4gVHlwZURlY2xhcmF0aW9uKGpzb25b
J2lkJ10sIHR5cGVfcmVmLCBqc29uLmdldCgiZGVzY3JpcHRpb24iLCAiIiksIHR5cGVfbWVtYmVy
cykKKworICAgIGRlZiBwYXJzZV90eXBlX21lbWJlcihzZWxmLCBqc29uKToKKyAgICAgICAgY2hl
Y2tfZm9yX3JlcXVpcmVkX3Byb3BlcnRpZXMoWyduYW1lJ10sIGpzb24sICJ0eXBlIG1lbWJlciIp
CisgICAgICAgIGxvZy5kZWJ1ZygicGFyc2UgdHlwZSBtZW1iZXIgJXMiICUganNvblsnbmFtZSdd
KQorCisgICAgICAgIHR5cGVfcmVmID0gVHlwZVJlZmVyZW5jZShqc29uLmdldCgndHlwZScpLCBq
c29uLmdldCgnJHJlZicpLCBqc29uLmdldCgnZW51bScsIFtdKSwganNvbi5nZXQoJ2l0ZW1zJykp
CisgICAgICAgIHJldHVybiBUeXBlTWVtYmVyKGpzb25bJ25hbWUnXSwgdHlwZV9yZWYsIGpzb24u
Z2V0KCdvcHRpb25hbCcsIEZhbHNlKSwganNvbi5nZXQoJ2Rlc2NyaXB0aW9uJywgIiIpKQorCisg
ICAgZGVmIHBhcnNlX2NvbW1hbmQoc2VsZiwganNvbik6CisgICAgICAgIGNoZWNrX2Zvcl9yZXF1
aXJlZF9wcm9wZXJ0aWVzKFsnbmFtZSddLCBqc29uLCAiY29tbWFuZCIpCisgICAgICAgIGxvZy5k
ZWJ1ZygicGFyc2UgY29tbWFuZCAlcyIgJSBqc29uWyduYW1lJ10pCisKKyAgICAgICAgY2FsbF9w
YXJhbWV0ZXJzID0gW10KKyAgICAgICAgcmV0dXJuX3BhcmFtZXRlcnMgPSBbXQorCisgICAgICAg
IGlmICdwYXJhbWV0ZXJzJyBpbiBqc29uOgorICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uo
anNvblsncGFyYW1ldGVycyddLCBsaXN0KToKKyAgICAgICAgICAgICAgICByYWlzZSBQYXJzZUV4
Y2VwdGlvbigiTWFsZm9ybWVkIHNwZWNpZmljYXRpb246IHBhcmFtZXRlcnMgaXMgbm90IGFuIGFy
cmF5IikKKyAgICAgICAgICAgIGNhbGxfcGFyYW1ldGVycy5leHRlbmQoW3NlbGYucGFyc2VfcGFy
YW1ldGVyKF9wYXJhbWV0ZXIpIGZvciBfcGFyYW1ldGVyIGluIGpzb25bJ3BhcmFtZXRlcnMnXV0p
CisKKyAgICAgICAgaWYgJ3JldHVybnMnIGluIGpzb246CisgICAgICAgICAgICBpZiBub3QgaXNp
bnN0YW5jZShqc29uWydyZXR1cm5zJ10sIGxpc3QpOgorICAgICAgICAgICAgICAgIHJhaXNlIFBh
cnNlRXhjZXB0aW9uKCJNYWxmb3JtZWQgc3BlY2lmaWNhdGlvbjogcmV0dXJucyBpcyBub3QgYW4g
YXJyYXkiKQorICAgICAgICAgICAgcmV0dXJuX3BhcmFtZXRlcnMuZXh0ZW5kKFtzZWxmLnBhcnNl
X3BhcmFtZXRlcihfcGFyYW1ldGVyKSBmb3IgX3BhcmFtZXRlciBpbiBqc29uWydyZXR1cm5zJ11d
KQorCisgICAgICAgIHJldHVybiBDb21tYW5kKGpzb25bJ25hbWUnXSwgY2FsbF9wYXJhbWV0ZXJz
LCByZXR1cm5fcGFyYW1ldGVycywganNvbi5nZXQoJ2Rlc2NyaXB0aW9uJywgIiIpKQorCisgICAg
ZGVmIHBhcnNlX2V2ZW50KHNlbGYsIGpzb24pOgorICAgICAgICBjaGVja19mb3JfcmVxdWlyZWRf
cHJvcGVydGllcyhbJ25hbWUnXSwganNvbiwgImV2ZW50IikKKyAgICAgICAgbG9nLmRlYnVnKCJw
YXJzZSBldmVudCAlcyIgJSBqc29uWyduYW1lJ10pCisKKyAgICAgICAgZXZlbnRfcGFyYW1ldGVy
cyA9IFtdCisKKyAgICAgICAgaWYgJ3BhcmFtZXRlcnMnIGluIGpzb246CisgICAgICAgICAgICBp
ZiBub3QgaXNpbnN0YW5jZShqc29uWydwYXJhbWV0ZXJzJ10sIGxpc3QpOgorICAgICAgICAgICAg
ICAgIHJhaXNlIFBhcnNlRXhjZXB0aW9uKCJNYWxmb3JtZWQgc3BlY2lmaWNhdGlvbjogcGFyYW1l
dGVycyBpcyBub3QgYW4gYXJyYXkiKQorICAgICAgICAgICAgZXZlbnRfcGFyYW1ldGVycy5leHRl
bmQoW3NlbGYucGFyc2VfcGFyYW1ldGVyKF9wYXJhbWV0ZXIpIGZvciBfcGFyYW1ldGVyIGluIGpz
b25bJ3BhcmFtZXRlcnMnXV0pCisKKyAgICAgICAgcmV0dXJuIEV2ZW50KGpzb25bJ25hbWUnXSwg
ZXZlbnRfcGFyYW1ldGVycywganNvbi5nZXQoJ2Rlc2NyaXB0aW9uJywgIiIpKQorCisgICAgZGVm
IHBhcnNlX3BhcmFtZXRlcihzZWxmLCBqc29uKToKKyAgICAgICAgY2hlY2tfZm9yX3JlcXVpcmVk
X3Byb3BlcnRpZXMoWyduYW1lJ10sIGpzb24sICJwYXJhbWV0ZXIiKQorICAgICAgICBsb2cuZGVi
dWcoInBhcnNlIHBhcmFtZXRlciAlcyIgJSBqc29uWyduYW1lJ10pCisKKyAgICAgICAgdHlwZV9y
ZWYgPSBUeXBlUmVmZXJlbmNlKGpzb24uZ2V0KCd0eXBlJyksIGpzb24uZ2V0KCckcmVmJyksIGpz
b24uZ2V0KCdlbnVtJywgW10pLCBqc29uLmdldCgnaXRlbXMnKSkKKyAgICAgICAgcmV0dXJuIFBh
cmFtZXRlcihqc29uWyduYW1lJ10sIHR5cGVfcmVmLCBqc29uLmdldCgnb3B0aW9uYWwnLCBGYWxz
ZSksIGpzb24uZ2V0KCdkZXNjcmlwdGlvbicsICIiKSkKKworICAgIGRlZiByZXNvbHZlX3R5cGVz
KHNlbGYpOgorICAgICAgICBxdWFsaWZpZWRfZGVjbGFyZWRfdHlwZV9uYW1lcyA9IHNldChbJ2Jv
b2xlYW4nLCAnc3RyaW5nJywgJ2ludGVnZXInLCAnbnVtYmVyJywgJ2VudW0nLCAnYXJyYXknLCAn
b2JqZWN0JywgJ2FueSddKQorCisgICAgICAgIHNlbGYudHlwZXNfYnlfbmFtZVsnc3RyaW5nJ10g
PSBQcmltaXRpdmVUeXBlKCdzdHJpbmcnLCBUeXBlTW9kZXMuSEVBVllfU0NBTEFSKQorICAgICAg
ICBmb3IgX3ByaW1pdGl2ZV90eXBlIGluIFsnYm9vbGVhbicsICdpbnRlZ2VyJywgJ251bWJlcidd
OgorICAgICAgICAgICAgc2VsZi50eXBlc19ieV9uYW1lW19wcmltaXRpdmVfdHlwZV0gPSBQcmlt
aXRpdmVUeXBlKF9wcmltaXRpdmVfdHlwZSwgVHlwZU1vZGVzLlNDQUxBUikKKyAgICAgICAgZm9y
IF9vYmplY3RfdHlwZSBpbiBbJ2FueScsICdvYmplY3QnXToKKyAgICAgICAgICAgIHNlbGYudHlw
ZXNfYnlfbmFtZVtfb2JqZWN0X3R5cGVdID0gUHJpbWl0aXZlVHlwZShfb2JqZWN0X3R5cGUsIFR5
cGVNb2Rlcy5SRUZDT1VOVEVEKQorCisgICAgICAgICMgR2F0aGVyIHF1YWxpZmllZCB0eXBlIG5h
bWVzIGZyb20gdHlwZSBkZWNsYXJhdGlvbnMgaW4gZWFjaCBkb21haW4uCisgICAgICAgIGZvciBf
ZG9tYWluIGluIHNlbGYuZG9tYWluczoKKyAgICAgICAgICAgIGZvciBfZGVjbGFyYXRpb24gaW4g
X2RvbWFpbi50eXBlX2RlY2xhcmF0aW9uczoKKyAgICAgICAgICAgICAgICAjIEJhc2ljIHNhbml0
eSBjaGVja2luZy4KKyAgICAgICAgICAgICAgICBpZiBfZGVjbGFyYXRpb24udHlwZV9yZWYucmVm
ZXJlbmNlZF90eXBlX25hbWUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHJhaXNl
IFR5cGVjaGVja0V4Y2VwdGlvbigiVHlwZSBkZWNsYXJhdGlvbnMgbXVzdCBuYW1lIGEgYmFzZSB0
eXBlLCBub3QgYSB0eXBlIHJlZmVyZW5jZS4iKQorCisgICAgICAgICAgICAgICAgIyBGaW5kIGR1
cGxpY2F0ZSBxdWFsaWZpZWQgdHlwZSBuYW1lcy4KKyAgICAgICAgICAgICAgICBxdWFsaWZpZWRf
dHlwZV9uYW1lID0gIi4iLmpvaW4oW19kb21haW4uZG9tYWluX25hbWUsIF9kZWNsYXJhdGlvbi50
eXBlX25hbWVdKQorICAgICAgICAgICAgICAgIGlmIHF1YWxpZmllZF90eXBlX25hbWUgaW4gcXVh
bGlmaWVkX2RlY2xhcmVkX3R5cGVfbmFtZXM6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFR5
cGVjaGVja0V4Y2VwdGlvbigiRHVwbGljYXRlIHR5cGUgZGVjbGFyYXRpb246ICVzIiAlIHF1YWxp
ZmllZF90eXBlX25hbWUpCisKKyAgICAgICAgICAgICAgICBxdWFsaWZpZWRfZGVjbGFyZWRfdHlw
ZV9uYW1lcy5hZGQocXVhbGlmaWVkX3R5cGVfbmFtZSkKKworICAgICAgICAgICAgICAgIHR5cGVf
aW5zdGFuY2UgPSBOb25lCisKKyAgICAgICAgICAgICAgICBraW5kID0gX2RlY2xhcmF0aW9uLnR5
cGVfcmVmLnR5cGVfa2luZAorICAgICAgICAgICAgICAgIGlmIGxlbihfZGVjbGFyYXRpb24udHlw
ZV9yZWYuZW51bV92YWx1ZXMpID4gMDoKKyAgICAgICAgICAgICAgICAgICAgcHJpbWl0aXZlX3R5
cGVfcmVmID0gVHlwZVJlZmVyZW5jZShfZGVjbGFyYXRpb24udHlwZV9yZWYudHlwZV9raW5kLCBO
b25lLCBbXSwgTm9uZSkKKyAgICAgICAgICAgICAgICAgICAgdHlwZV9pbnN0YW5jZSA9IEVudW1U
eXBlKF9kZWNsYXJhdGlvbi50eXBlX25hbWUsIF9kb21haW4sIF9kZWNsYXJhdGlvbi50eXBlX3Jl
Zi5lbnVtX3ZhbHVlcywgcHJpbWl0aXZlX3R5cGVfcmVmKQorICAgICAgICAgICAgICAgIGVsaWYg
a2luZCA9PSAiYXJyYXkiOgorICAgICAgICAgICAgICAgICAgICB0eXBlX2luc3RhbmNlID0gVmVj
dG9yVHlwZShfZGVjbGFyYXRpb24udHlwZV9yZWYuYXJyYXlfdHlwZV9yZWYsIF9kb21haW4pCisg
ICAgICAgICAgICAgICAgZWxpZiBraW5kID09ICJvYmplY3QiOgorICAgICAgICAgICAgICAgICAg
ICB0eXBlX2luc3RhbmNlID0gT2JqZWN0VHlwZShfZGVjbGFyYXRpb24udHlwZV9uYW1lLCBfZG9t
YWluLCBfZGVjbGFyYXRpb24udHlwZV9tZW1iZXJzKQorICAgICAgICAgICAgICAgIGVsc2U6Cisg
ICAgICAgICAgICAgICAgICAgIHR5cGVfaW5zdGFuY2UgPSBBbGlhc2VkVHlwZShfZGVjbGFyYXRp
b24udHlwZV9uYW1lLCBfZG9tYWluLCBfZGVjbGFyYXRpb24udHlwZV9yZWYpCisKKyAgICAgICAg
ICAgICAgICBzZWxmLnR5cGVzX2J5X25hbWVbcXVhbGlmaWVkX3R5cGVfbmFtZV0gPSB0eXBlX2lu
c3RhbmNlCisKKyAgICAgICAgIyBSZXNvbHZlIGFsbCB0eXBlIHJlZmVyZW5jZXMgcmVjdXJzaXZl
bHkuCisgICAgICAgIGZvciBfZG9tYWluIGluIHNlbGYuZG9tYWluczoKKyAgICAgICAgICAgIF9k
b21haW4ucmVzb2x2ZV90eXBlX3JlZmVyZW5jZXMoc2VsZikKKworICAgIGRlZiBsb29rdXBfdHlw
ZV9mb3JfZGVjbGFyYXRpb24oc2VsZiwgZGVjbGFyYXRpb24sIGRvbWFpbik6CisgICAgICAgICMg
VGhpcyB3aWxsIG9ubHkgbWF0Y2ggYSB0eXBlIGRlZmluZWQgaW4gdGhlIHNhbWUgZG9tYWluLCB3
aGVyZSBwcmVmaXhlcyBhcmVuJ3QgcmVxdWlyZWQuCisgICAgICAgIHF1YWxpZmllZF9uYW1lID0g
Ii4iLmpvaW4oW2RvbWFpbi5kb21haW5fbmFtZSwgZGVjbGFyYXRpb24udHlwZV9uYW1lXSkKKyAg
ICAgICAgaWYgcXVhbGlmaWVkX25hbWUgaW4gc2VsZi50eXBlc19ieV9uYW1lOgorICAgICAgICAg
ICAgZm91bmRfdHlwZSA9IHNlbGYudHlwZXNfYnlfbmFtZVtxdWFsaWZpZWRfbmFtZV0KKyAgICAg
ICAgICAgIGZvdW5kX3R5cGUucmVzb2x2ZV90eXBlX3JlZmVyZW5jZXMoc2VsZikKKyAgICAgICAg
ICAgIHJldHVybiBmb3VuZF90eXBlCisKKyAgICAgICAgcmFpc2UgVHlwZWNoZWNrRXhjZXB0aW9u
KCJMb29rdXAgZmFpbGVkIGZvciB0eXBlIGRlY2xhcmF0aW9uOiAlcyAocmVmZXJlbmNlZCBmcm9t
IGRvbWFpbjogJXMpIiAlIChkZWNsYXJhdGlvbi50eXBlX25hbWUsIGRvbWFpbi5kb21haW5fbmFt
ZSkpCisKKyAgICBkZWYgbG9va3VwX3R5cGVfcmVmZXJlbmNlKHNlbGYsIHR5cGVfcmVmLCBkb21h
aW4pOgorICAgICAgICAjIElmIHJlZmVyZW5jZSBpcyB0byBhbiBhbm9ueW1vdXMgYXJyYXkgdHlw
ZSwgY3JlYXRlIGEgZnJlc2ggaW5zdGFuY2UuCisgICAgICAgIGlmIHR5cGVfcmVmLnR5cGVfa2lu
ZCA9PSAiYXJyYXkiOgorICAgICAgICAgICAgdHlwZV9pbnN0YW5jZSA9IFZlY3RvclR5cGUodHlw
ZV9yZWYuYXJyYXlfdHlwZV9yZWYsIGRvbWFpbikKKyAgICAgICAgICAgIHR5cGVfaW5zdGFuY2Uu
cmVzb2x2ZV90eXBlX3JlZmVyZW5jZXMoc2VsZikKKyAgICAgICAgICAgIGxvZy5kZWJ1ZygiPCBD
cmVhdGVkIGZyZXNoIHR5cGUgaW5zdGFuY2UgZm9yIGFub255bW91cyBhcnJheSB0eXBlOiAlcyIg
JSB0eXBlX2luc3RhbmNlLnF1YWxpZmllZF9uYW1lKCkpCisgICAgICAgICAgICByZXR1cm4gdHlw
ZV9pbnN0YW5jZQorCisgICAgICAgICMgSWYgcmVmZXJlbmNlIGlzIHRvIGFuIGFub255bW91cyBl
bnVtIHR5cGUsIGNyZWF0ZSBhIGZyZXNoIGluc3RhbmNlLgorICAgICAgICBpZiBsZW4odHlwZV9y
ZWYuZW51bV92YWx1ZXMpID4gMDoKKyAgICAgICAgICAgICMgV2UgbmVlZCB0byBjcmVhdGUgYSB0
eXBlIHJlZmVyZW5jZSB3aXRob3V0IGVudW0gdmFsdWVzIGFzIHRoZSBlbnVtJ3MgbmVzdGVkIHR5
cGUuCisgICAgICAgICAgICBwcmltaXRpdmVfdHlwZV9yZWYgPSBUeXBlUmVmZXJlbmNlKHR5cGVf
cmVmLnR5cGVfa2luZCwgTm9uZSwgW10sIE5vbmUpCisgICAgICAgICAgICB0eXBlX2luc3RhbmNl
ID0gRW51bVR5cGUoIihhbm9ueW1vdXMpIiwgZG9tYWluLCB0eXBlX3JlZi5lbnVtX3ZhbHVlcywg
cHJpbWl0aXZlX3R5cGVfcmVmKQorICAgICAgICAgICAgdHlwZV9pbnN0YW5jZS5yZXNvbHZlX3R5
cGVfcmVmZXJlbmNlcyhzZWxmKQorICAgICAgICAgICAgbG9nLmRlYnVnKCI8IENyZWF0ZWQgZnJl
c2ggdHlwZSBpbnN0YW5jZSBmb3IgYW5vbnltb3VzIGVudW0gdHlwZTogJXMiICUgdHlwZV9pbnN0
YW5jZS5xdWFsaWZpZWRfbmFtZSgpKQorICAgICAgICAgICAgcmV0dXJuIHR5cGVfaW5zdGFuY2UK
KworICAgICAgICAjIFRoaXMgd2lsbCBtYXRjaCB3aGVuIHJlZmVyZW5jaW5nIGEgdHlwZSBkZWZp
bmVkIGluIHRoZSBzYW1lIGRvbWFpbiwgd2hlcmUgcHJlZml4ZXMgYXJlbid0IHJlcXVpcmVkLgor
ICAgICAgICBxdWFsaWZpZWRfbmFtZSA9ICIuIi5qb2luKFtkb21haW4uZG9tYWluX25hbWUsIHR5
cGVfcmVmLnJlZmVyZW5jZWRfbmFtZSgpXSkKKyAgICAgICAgaWYgcXVhbGlmaWVkX25hbWUgaW4g
c2VsZi50eXBlc19ieV9uYW1lOgorICAgICAgICAgICAgZm91bmRfdHlwZSA9IHNlbGYudHlwZXNf
YnlfbmFtZVtxdWFsaWZpZWRfbmFtZV0KKyAgICAgICAgICAgIGZvdW5kX3R5cGUucmVzb2x2ZV90
eXBlX3JlZmVyZW5jZXMoc2VsZikKKyAgICAgICAgICAgIGxvZy5kZWJ1ZygiPCBMb29rdXAgc3Vj
Y2VlZGVkIGZvciB1bnF1YWxpZmllZCB0eXBlOiAlcyIgJSBmb3VuZF90eXBlLnF1YWxpZmllZF9u
YW1lKCkpCisgICAgICAgICAgICByZXR1cm4gZm91bmRfdHlwZQorCisgICAgICAgICMgVGhpcyB3
aWxsIG1hdGNoIHByaW1pdGl2ZSB0eXBlcyBhbmQgZnVsbHktcXVhbGlmaWVkIHR5cGVzIGZyb20g
YSBkaWZmZXJlbnQgZG9tYWluLgorICAgICAgICBpZiB0eXBlX3JlZi5yZWZlcmVuY2VkX25hbWUo
KSBpbiBzZWxmLnR5cGVzX2J5X25hbWU6CisgICAgICAgICAgICBmb3VuZF90eXBlID0gc2VsZi50
eXBlc19ieV9uYW1lW3R5cGVfcmVmLnJlZmVyZW5jZWRfbmFtZSgpXQorICAgICAgICAgICAgZm91
bmRfdHlwZS5yZXNvbHZlX3R5cGVfcmVmZXJlbmNlcyhzZWxmKQorICAgICAgICAgICAgbG9nLmRl
YnVnKCI8IExvb2t1cCBzdWNjZWVkZWQgZm9yIHByaW1pdGl2ZSBvciBxdWFsaWZpZWQgdHlwZTog
JXMiICUgZm91bmRfdHlwZS5xdWFsaWZpZWRfbmFtZSgpKQorICAgICAgICAgICAgcmV0dXJuIGZv
dW5kX3R5cGUKKworICAgICAgICByYWlzZSBUeXBlY2hlY2tFeGNlcHRpb24oIkxvb2t1cCBmYWls
ZWQgZm9yIHR5cGUgcmVmZXJlbmNlOiAlcyAocmVmZXJlbmNlZCBmcm9tIGRvbWFpbjogJXMpIiAl
ICh0eXBlX3JlZi5yZWZlcmVuY2VkX25hbWUoKSwgZG9tYWluLmRvbWFpbl9uYW1lKSkKKworCitj
bGFzcyBEb21haW46CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGRvbWFpbl9uYW1lLCBkZXNjcmlw
dGlvbiwgdHlwZV9kZWNsYXJhdGlvbnMsIGNvbW1hbmRzLCBldmVudHMpOgorICAgICAgICBzZWxm
LmRvbWFpbl9uYW1lID0gZG9tYWluX25hbWUKKyAgICAgICAgc2VsZi5kZXNjcmlwdGlvbiA9IGRl
c2NyaXB0aW9uCisgICAgICAgIHNlbGYudHlwZV9kZWNsYXJhdGlvbnMgPSB0eXBlX2RlY2xhcmF0
aW9ucworICAgICAgICBzZWxmLmNvbW1hbmRzID0gY29tbWFuZHMKKyAgICAgICAgc2VsZi5ldmVu
dHMgPSBldmVudHMKKworICAgIGRlZiByZXNvbHZlX3R5cGVfcmVmZXJlbmNlcyhzZWxmLCBwcm90
b2NvbCk6CisgICAgICAgIGxvZy5kZWJ1ZygiPiBSZXNvbHZpbmcgdHlwZSBkZWNsYXJhdGlvbnMg
Zm9yIGRvbWFpbjogJXMiICUgc2VsZi5kb21haW5fbmFtZSkKKyAgICAgICAgZm9yIF9kZWNsYXJh
dGlvbiBpbiBzZWxmLnR5cGVfZGVjbGFyYXRpb25zOgorICAgICAgICAgICAgX2RlY2xhcmF0aW9u
LnJlc29sdmVfdHlwZV9yZWZlcmVuY2VzKHByb3RvY29sLCBzZWxmKQorCisgICAgICAgIGxvZy5k
ZWJ1ZygiPiBSZXNvbHZpbmcgdHlwZXMgaW4gY29tbWFuZHMgZm9yIGRvbWFpbjogJXMiICUgc2Vs
Zi5kb21haW5fbmFtZSkKKyAgICAgICAgZm9yIF9jb21tYW5kIGluIHNlbGYuY29tbWFuZHM6Cisg
ICAgICAgICAgICBfY29tbWFuZC5yZXNvbHZlX3R5cGVfcmVmZXJlbmNlcyhwcm90b2NvbCwgc2Vs
ZikKKworICAgICAgICBsb2cuZGVidWcoIj4gUmVzb2x2aW5nIHR5cGVzIGluIGV2ZW50cyBmb3Ig
ZG9tYWluOiAlcyIgJSBzZWxmLmRvbWFpbl9uYW1lKQorICAgICAgICBmb3IgX2V2ZW50IGluIHNl
bGYuZXZlbnRzOgorICAgICAgICAgICAgX2V2ZW50LnJlc29sdmVfdHlwZV9yZWZlcmVuY2VzKHBy
b3RvY29sLCBzZWxmKQorCisKK2NsYXNzIERvbWFpbnM6CisgICAgR0xPQkFMID0gRG9tYWluKCIi
LCAiVGhlIGdsb2JhbCBkb21haW4sIGluIHdoaWNoIHByaW1pdGl2ZSB0eXBlcyBhcmUgaW1wbGlj
aXRseSBkZWNsYXJlZC4iLCBbXSwgW10sIFtdKQorCisKK2NsYXNzIFR5cGVEZWNsYXJhdGlvbjoK
KyAgICBkZWYgX19pbml0X18oc2VsZiwgdHlwZV9uYW1lLCB0eXBlX3JlZiwgZGVzY3JpcHRpb24s
IHR5cGVfbWVtYmVycyk6CisgICAgICAgIHNlbGYudHlwZV9uYW1lID0gdHlwZV9uYW1lCisgICAg
ICAgIHNlbGYudHlwZV9yZWYgPSB0eXBlX3JlZgorICAgICAgICBzZWxmLmRlc2NyaXB0aW9uID0g
ZGVzY3JpcHRpb24KKyAgICAgICAgc2VsZi50eXBlX21lbWJlcnMgPSB0eXBlX21lbWJlcnMKKwor
ICAgIGRlZiByZXNvbHZlX3R5cGVfcmVmZXJlbmNlcyhzZWxmLCBwcm90b2NvbCwgZG9tYWluKToK
KyAgICAgICAgbG9nLmRlYnVnKCI+PiBSZXNvbHZpbmcgdHlwZSByZWZlcmVuY2VzIGZvciB0eXBl
IGRlY2xhcmF0aW9uOiAlcyIgJSBzZWxmLnR5cGVfbmFtZSkKKyAgICAgICAgc2VsZi50eXBlID0g
cHJvdG9jb2wubG9va3VwX3R5cGVfZm9yX2RlY2xhcmF0aW9uKHNlbGYsIGRvbWFpbikKKworCitj
bGFzcyBUeXBlTWVtYmVyOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtZW1iZXJfbmFtZSwgdHlw
ZV9yZWYsIGlzX29wdGlvbmFsLCBkZXNjcmlwdGlvbik6CisgICAgICAgIHNlbGYubWVtYmVyX25h
bWUgPSBtZW1iZXJfbmFtZQorICAgICAgICBzZWxmLnR5cGVfcmVmID0gdHlwZV9yZWYKKyAgICAg
ICAgc2VsZi5pc19vcHRpb25hbCA9IGlzX29wdGlvbmFsCisgICAgICAgIHNlbGYuZGVzY3JpcHRp
b24gPSBkZXNjcmlwdGlvbgorCisgICAgZGVmIHJlc29sdmVfdHlwZV9yZWZlcmVuY2VzKHNlbGYs
IHByb3RvY29sLCBkb21haW4pOgorICAgICAgICBsb2cuZGVidWcoIj4+PiBSZXNvbHZpbmcgdHlw
ZSByZWZlcmVuY2VzIGZvciB0eXBlIG1lbWJlcjogJXMiICUgc2VsZi5tZW1iZXJfbmFtZSkKKyAg
ICAgICAgc2VsZi50eXBlID0gcHJvdG9jb2wubG9va3VwX3R5cGVfcmVmZXJlbmNlKHNlbGYudHlw
ZV9yZWYsIGRvbWFpbikKKworCitjbGFzcyBQYXJhbWV0ZXI6CisgICAgZGVmIF9faW5pdF9fKHNl
bGYsIHBhcmFtZXRlcl9uYW1lLCB0eXBlX3JlZiwgaXNfb3B0aW9uYWwsIGRlc2NyaXB0aW9uKToK
KyAgICAgICAgc2VsZi5wYXJhbWV0ZXJfbmFtZSA9IHBhcmFtZXRlcl9uYW1lCisgICAgICAgIHNl
bGYudHlwZV9yZWYgPSB0eXBlX3JlZgorICAgICAgICBzZWxmLmlzX29wdGlvbmFsID0gaXNfb3B0
aW9uYWwKKyAgICAgICAgc2VsZi5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uCisKKyAgICBkZWYg
cmVzb2x2ZV90eXBlX3JlZmVyZW5jZXMoc2VsZiwgcHJvdG9jb2wsIGRvbWFpbik6CisgICAgICAg
IGxvZy5kZWJ1ZygiPj4+IFJlc29sdmluZyB0eXBlIHJlZmVyZW5jZXMgZm9yIHBhcmFtZXRlcjog
JXMiICUgc2VsZi5wYXJhbWV0ZXJfbmFtZSkKKyAgICAgICAgc2VsZi50eXBlID0gcHJvdG9jb2wu
bG9va3VwX3R5cGVfcmVmZXJlbmNlKHNlbGYudHlwZV9yZWYsIGRvbWFpbikKKworCitjbGFzcyBD
b21tYW5kOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb21tYW5kX25hbWUsIGNhbGxfcGFyYW1l
dGVycywgcmV0dXJuX3BhcmFtZXRlcnMsIGRlc2NyaXB0aW9uKToKKyAgICAgICAgc2VsZi5jb21t
YW5kX25hbWUgPSBjb21tYW5kX25hbWUKKyAgICAgICAgc2VsZi5jYWxsX3BhcmFtZXRlcnMgPSBj
YWxsX3BhcmFtZXRlcnMKKyAgICAgICAgc2VsZi5yZXR1cm5fcGFyYW1ldGVycyA9IHJldHVybl9w
YXJhbWV0ZXJzCisgICAgICAgIHNlbGYuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbgorCisgICAg
ZGVmIHJlc29sdmVfdHlwZV9yZWZlcmVuY2VzKHNlbGYsIHByb3RvY29sLCBkb21haW4pOgorICAg
ICAgICBsb2cuZGVidWcoIj4+IFJlc29sdmluZyB0eXBlIHJlZmVyZW5jZXMgZm9yIGNhbGwgcGFy
YW1ldGVycyBpbiBjb21tYW5kOiAlcyIgJSBzZWxmLmNvbW1hbmRfbmFtZSkKKyAgICAgICAgZm9y
IF9wYXJhbWV0ZXIgaW4gc2VsZi5jYWxsX3BhcmFtZXRlcnM6CisgICAgICAgICAgICBfcGFyYW1l
dGVyLnJlc29sdmVfdHlwZV9yZWZlcmVuY2VzKHByb3RvY29sLCBkb21haW4pCisKKyAgICAgICAg
bG9nLmRlYnVnKCI+PiBSZXNvbHZpbmcgdHlwZSByZWZlcmVuY2VzIGZvciByZXR1cm4gcGFyYW1l
dGVycyBpbiBjb21tYW5kOiAlcyIgJSBzZWxmLmNvbW1hbmRfbmFtZSkKKyAgICAgICAgZm9yIF9w
YXJhbWV0ZXIgaW4gc2VsZi5yZXR1cm5fcGFyYW1ldGVyczoKKyAgICAgICAgICAgIF9wYXJhbWV0
ZXIucmVzb2x2ZV90eXBlX3JlZmVyZW5jZXMocHJvdG9jb2wsIGRvbWFpbikKKworCitjbGFzcyBF
dmVudDoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZXZlbnRfbmFtZSwgZXZlbnRfcGFyYW1ldGVy
cywgZGVzY3JpcHRpb24pOgorICAgICAgICBzZWxmLmV2ZW50X25hbWUgPSBldmVudF9uYW1lCisg
ICAgICAgIHNlbGYuZXZlbnRfcGFyYW1ldGVycyA9IGV2ZW50X3BhcmFtZXRlcnMKKyAgICAgICAg
c2VsZi5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uCisKKyAgICBkZWYgcmVzb2x2ZV90eXBlX3Jl
ZmVyZW5jZXMoc2VsZiwgcHJvdG9jb2wsIGRvbWFpbik6CisgICAgICAgIGxvZy5kZWJ1ZygiPj4g
UmVzb2x2aW5nIHR5cGUgcmVmZXJlbmNlcyBmb3IgcGFyYW1ldGVycyBpbiBldmVudDogJXMiICUg
c2VsZi5ldmVudF9uYW1lKQorICAgICAgICBmb3IgX3BhcmFtZXRlciBpbiBzZWxmLmV2ZW50X3Bh
cmFtZXRlcnM6CisgICAgICAgICAgICBfcGFyYW1ldGVyLnJlc29sdmVfdHlwZV9yZWZlcmVuY2Vz
KHByb3RvY29sLCBkb21haW4pCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1kdXBsaWNhdGUtdHlwZS1kZWNs
YXJhdGlvbnMuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWR1cGxpY2F0ZS10eXBlLWRlY2xhcmF0aW9ucy5q
c29uLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ0N2NkZjhlMjhlODU2NjEwYTI2ZjgxNTQ5NDNmMzZjZjhi
N2QxZjQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1kdXBsaWNhdGUtdHlwZS1kZWNsYXJhdGlv
bnMuanNvbi1lcnJvcgpAQCAtMCwwICsxIEBACitFUlJPUjogRHVwbGljYXRlIHR5cGUgZGVjbGFy
YXRpb246IFJ1bnRpbWUuUmVtb3RlT2JqZWN0SWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLXR5cGUtZGVj
bGFyYXRpb24tdXNpbmctdHlwZS1yZWZlcmVuY2UuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLXR5cGUtZGVj
bGFyYXRpb24tdXNpbmctdHlwZS1yZWZlcmVuY2UuanNvbi1lcnJvcgpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40MmY1
NzUzYTQzOTYxNDRlYjU2NmM1YzU5NjhkMDQ5YWVjNjE4MmRiCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2Zh
aWwtb24tdHlwZS1kZWNsYXJhdGlvbi11c2luZy10eXBlLXJlZmVyZW5jZS5qc29uLWVycm9yCkBA
IC0wLDAgKzEgQEAKK0VSUk9SOiBUeXBlIHJlZmVyZW5jZSBjYW5ub3QgaGF2ZSBib3RoICd0eXBl
JyBhbmQgJyRyZWYnIGtleXMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi11bmtub3duLXR5cGUtcmVmZXJl
bmNlLWluLXR5cGUtZGVjbGFyYXRpb24uanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLXVua25vd24tdHlwZS1y
ZWZlcmVuY2UtaW4tdHlwZS1kZWNsYXJhdGlvbi5qc29uLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQzYzc4
MmQ4OWRiNTY1ZDcyNGU3NTQwZTMyZWRjZmRiZDc5YTJmNzMKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFp
bC1vbi11bmtub3duLXR5cGUtcmVmZXJlbmNlLWluLXR5cGUtZGVjbGFyYXRpb24uanNvbi1lcnJv
cgpAQCAtMCwwICsxIEBACitFUlJPUjogTG9va3VwIGZhaWxlZCBmb3IgdHlwZSByZWZlcmVuY2U6
IGRyYWdvbiAocmVmZXJlbmNlZCBmcm9tIGRvbWFpbjogUnVudGltZSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWls
LW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1tZW1iZXIuanNvbi1lcnJvciBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWls
LW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1tZW1iZXIuanNvbi1lcnJvcgpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi41MmNiNjViM2E0N2YyOTI3NjI0MWNmZDAxNGJkNmNlNGVhZDhkNDJmCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2V4cGVjdGVkL2ZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVyZW5jZS1pbi10eXBlLW1lbWJlci5q
c29uLWVycm9yCkBAIC0wLDAgKzEgQEAKK0VSUk9SOiBSZWZlcmVuY2VkIHR5cGUgbmFtZSBDb2xv
ciBkb2VzIG5vdCBtYXRjaCBhbnkgdHlwZSBkZWNsYXJhdGlvbnMuCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvc2FtZS10
eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9zYW1lLXR5cGUtaWQtZGlmZmVyZW50
LWRvbWFpbi5qc29uLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmIxMzA0ZjNkYmMxNzhkNTZmMjU1Y2IzYjdj
OWYwODZmNzk5NTZhMDYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvc2FtZS10eXBlLWlkLWRpZmZlcmVudC1k
b21haW4uanNvbi1lcnJvcgpAQCAtMCwwICsxIEBACitFUlJPUjogV2hlbiBwYXJzaW5nIGRvbWFp
biwgcmVxdWlyZWQgcHJvcGVydHkgbWlzc2luZzogZG9tYWluCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1kdXBsaWNhdGUt
dHlwZS1kZWNsYXJhdGlvbnMuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9mYWlsLW9uLWR1cGxpY2F0ZS10eXBlLWRlY2xhcmF0aW9ucy5qc29uCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjcwMmZjNmEzMjcwYTY0NmE0NTA0NDdmZGMwNDAxMzk5NWE5NDJiZjAKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZmFpbC1vbi1kdXBsaWNhdGUtdHlwZS1kZWNsYXJhdGlvbnMuanNvbgpAQCAtMCwwICsxLDE1
IEBACit7CisgICAgImRvbWFpbiI6ICJSdW50aW1lIiwKKyAgICAidHlwZXMiOiBbCisgICAgICAg
IHsKKyAgICAgICAgICAgICJpZCI6ICJSZW1vdGVPYmplY3RJZCIsCisgICAgICAgICAgICAidHlw
ZSI6ICJzdHJpbmciLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBvYmplY3Qg
aWRlbnRpZmllci4iCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJS
ZW1vdGVPYmplY3RJZCIsCisgICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAorICAgICAgICAg
ICAgImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBvYmplY3QgaWRlbnRpZmllci4iCisgICAgICAgIH0K
KyAgICBdCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZmFpbC1vbi10eXBlLWRlY2xhcmF0aW9uLXVzaW5nLXR5cGUtcmVmZXJlbmNl
Lmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFp
bC1vbi10eXBlLWRlY2xhcmF0aW9uLXVzaW5nLXR5cGUtcmVmZXJlbmNlLmpzb24KbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMTliNzU5MGNjYzZmNmJjMzQ0M2E0YTI4M2NhNmZjY2ZkZjMyNzczNAotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWls
LW9uLXR5cGUtZGVjbGFyYXRpb24tdXNpbmctdHlwZS1yZWZlcmVuY2UuanNvbgpAQCAtMCwwICsx
LDEzIEBACitbCit7CisgICAgImRvbWFpbiI6ICJSdW50aW1lIiwKKyAgICAidHlwZXMiOiBbCisg
ICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJSZW1vdGVPYmplY3RJZCIsCisgICAgICAgICAg
ICAidHlwZSI6ICJvYmplY3QiLAorICAgICAgICAgICAgIiRyZWYiOiAiU29tZVR5cGUiLAorICAg
ICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBvYmplY3QgaWRlbnRpZmllci4iCisgICAg
ICAgIH0KKyAgICBdCit9CitdCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi11bmtub3duLXR5cGUtcmVmZXJlbmNlLWluLXR5
cGUtZGVjbGFyYXRpb24uanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1kZWNsYXJh
dGlvbi5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ2ODg3YTI3NDExOTAwYTgwZDUwZjAwM2VhYzM2YzEzYTk5
ZmFlNTgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZmFpbC1vbi11bmtub3duLXR5cGUtcmVmZXJlbmNlLWluLXR5cGUtZGVj
bGFyYXRpb24uanNvbgpAQCAtMCwwICsxLDEyIEBACitbCit7CisgICAgImRvbWFpbiI6ICJSdW50
aW1lIiwKKyAgICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJSZW1v
dGVPYmplY3RJZCIsCisgICAgICAgICAgICAidHlwZSI6ICJkcmFnb24iLAorICAgICAgICAgICAg
ImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBvYmplY3QgaWRlbnRpZmllci4iCisgICAgICAgIH0KKyAg
ICBdCit9CitdCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZmFpbC1vbi11bmtub3duLXR5cGUtcmVmZXJlbmNlLWluLXR5cGUtbWVtYmVy
Lmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFp
bC1vbi11bmtub3duLXR5cGUtcmVmZXJlbmNlLWluLXR5cGUtbWVtYmVyLmpzb24KbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uYjgxN2RiNTA0NGRjMWYyODU1NzAwOGMxZjE3NjFmMWIwNjhmNGNlNgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWls
LW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1tZW1iZXIuanNvbgpAQCAtMCwwICsx
LDE1IEBACitbCit7CisgICAgImRvbWFpbiI6ICJGYW50YXN5IiwKKyAgICAidHlwZXMiOiBbCisg
ICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJEcmFnb25FZ2ciLAorICAgICAgICAgICAgInR5
cGUiOiAib2JqZWN0IiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJBIGRyYWdvbiBlZ2cu
IiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAiY29sb3IiLCAiJHJlZiI6ICJDb2xvciIgfQorICAgICAgICAgICAgXQorICAgICAgICB9Cisg
ICAgXQorfQorXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL3NhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24gYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvc2FtZS10eXBlLWlkLWRpZmZl
cmVudC1kb21haW4uanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zYmY0ZGZmNWNjYzI5ZDBlOGMxZmE0YjJkZDMy
ODNlNzcxNjMyYzdkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3NhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24K
QEAgLTAsMCArMSwyMiBAQAorWworeworICAgICJkb21haW4iOiAiUnVudGltZSIsCisgICAgInR5
cGVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiUmVtb3RlT2JqZWN0SWQiLAor
ICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6
ICJVbmlxdWUgb2JqZWN0IGlkZW50aWZpZXIuIgorICAgICAgICB9CisgICAgXQorfSwKK3sKKyAg
ICAiZG9tYWluIjogIlJ1bnRpbWUyIiwKKyAgICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAg
ICAgICAgICJpZCI6ICJSZW1vdGVPYmplY3RJZCIsCisgICAgICAgICAgICAidHlwZSI6ICJzdHJp
bmciLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBvYmplY3QgaWRlbnRpZmll
ci4iCisgICAgICAgIH0KKyAgICBdCit9CitdCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXBy
aW1pdGl2ZS10eXBlLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24KbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uY2JjOWQ1Mzk0NzhkYjQ5NWM5NjA2N2VjZDU0YTk1YmU1MmY4ZDA3MAotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy90eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbgpAQCAtMCwwICsx
LDEwIEBACit7CisgICAgImRvbWFpbiI6ICJSdW50aW1lIiwKKyAgICAidHlwZXMiOiBbCisgICAg
ICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJSZW1vdGVPYmplY3RJZCIsCisgICAgICAgICAgICAi
dHlwZSI6ICJpbnRlZ2VyIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUgb2Jq
ZWN0IGlkZW50aWZpZXIuIgorICAgICAgICB9CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3R5cGUtZGVjbGFyYXRpb24t
YXJyYXktdHlwZS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL3R5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmMxNjc3
YTAwMjExMzc3YmNkNTgxY2UyODc1NjQ5ZDMzNjFiYmQyNGIKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvdHlwZS1kZWNsYXJh
dGlvbi1hcnJheS10eXBlLmpzb24KQEAgLTAsMCArMSw0MCBAQAorWworeworICAgICJkb21haW4i
OiAiRGVidWdnZXIiLAorICAgICJ0eXBlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlk
IjogIkJyZWFrcG9pbnRJZCIsCisgICAgICAgICAgICAidHlwZSI6ICJpbnRlZ2VyIgorICAgICAg
ICB9CisgICAgXQorfSwKK3sKKyAgICAiZG9tYWluIjogIlJ1bnRpbWUiLAorICAgICJ0eXBlcyI6
IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIkx1Y2t5TnVtYmVycyIsCisgICAgICAg
ICAgICAidHlwZSI6ICJhcnJheSIsCisgICAgICAgICAgICAiaXRlbXMiOiB7ICJ0eXBlIjogImlu
dGVnZXIiIH0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIkJhYnlO
YW1lcyIsCisgICAgICAgICAgICAidHlwZSI6ICJhcnJheSIsCisgICAgICAgICAgICAiaXRlbXMi
OiB7ICJ0eXBlIjogInN0cmluZyIgfQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAg
ICAiaWQiOiAiT2JqZWN0SWQiLAorICAgICAgICAgICAgInR5cGUiOiAiaW50ZWdlciIKKyAgICAg
ICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIk5ld09iamVjdHMiLAorICAgICAg
ICAgICAgInR5cGUiOiAiYXJyYXkiLAorICAgICAgICAgICAgIml0ZW1zIjogeyAiJHJlZiI6ICJP
YmplY3RJZCIgfQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiT2xk
T2JqZWN0cyIsCisgICAgICAgICAgICAidHlwZSI6ICJhcnJheSIsCisgICAgICAgICAgICAiaXRl
bXMiOiB7ICIkcmVmIjogIkRlYnVnZ2VyLkJyZWFrcG9pbnRJZCIgfQorICAgICAgICB9CisgICAg
XQorfQorXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL3R5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24gYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5
cGUuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5jYzQ1MDNkMmFiYmI3ZTExZDE3YTY0NmQ2MTcwOTdjYjExY2Ez
MDExCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL3R5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24KQEAgLTAsMCArMSwx
NSBAQAoreworICAgICJkb21haW4iOiAiUnVudGltZSIsCisgICAgInR5cGVzIjogWworICAgICAg
ICB7CisgICAgICAgICAgICAiaWQiOiAiTHVja3lOdW1iZXJzIiwKKyAgICAgICAgICAgICJ0eXBl
IjogImludGVnZXIiLAorICAgICAgICAgICAgImVudW0iOiBbMCwgMSwgMl0KKyAgICAgICAgfSwK
KyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIkFsbG93ZWRBbmltYWxzIiwKKyAgICAgICAg
ICAgICJ0eXBlIjogInN0cmluZyIsCisgICAgICAgICAgICAiZW51bSI6IFsiUGlncyIsICJXb2x2
ZXMiLCAiQ2F0cyJdCisgICAgICAgIH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9Ub29scy9DaGFu
Z2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZjE3MzNkNWMzYWNkNmNhYTg0ZjVjNGI3OTc1
OTA0ZDA1NTgwNmFmMy4uOTc2YmZlMGNhZTZmOTUwNmMxMjk4YjdiZDk3M2U4MzJmYTc5NTAyYSAx
MDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDIyIEBACisyMDE0LTA0LTEzICBCcmlhbiBKLiBCdXJnICA8YnVyZ0Bjcy53YXNoaW5ndG9u
LmVkdT4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiByZXdyaXRlIENvZGVHZW5lcmF0b3JJbnNw
ZWN0b3IgdG8gYmUgbW9kdWxhciBhbmQgdGVzdGFibGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMTU5NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogU2NyaXB0cy9ydW4taW5zcGVjdG9yLWdlbmVyYXRv
ci10ZXN0czogQWRkZWQuCisgICAgICAgIChtYWluKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtp
dHB5L2luc3BlY3Rvci9fX2luaXRfXy5weTogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJr
aXRweS9pbnNwZWN0b3IvbWFpbi5weTogQWRkZWQuCisgICAgICAgIChJbnNwZWN0b3JHZW5lcmF0
b3JUZXN0cyk6CisgICAgICAgIChJbnNwZWN0b3JHZW5lcmF0b3JUZXN0cy5fX2luaXRfXyk6Cisg
ICAgICAgIChJbnNwZWN0b3JHZW5lcmF0b3JUZXN0cy5nZW5lcmF0ZV9mcm9tX2pzb24pOgorICAg
ICAgICAoSW5zcGVjdG9yR2VuZXJhdG9yVGVzdHMud3JpdGVfZXJyb3JfZmlsZSk6CisgICAgICAg
IChJbnNwZWN0b3JHZW5lcmF0b3JUZXN0cy5kZXRlY3RfY2hhbmdlcyk6CisgICAgICAgIChJbnNw
ZWN0b3JHZW5lcmF0b3JUZXN0cy5ydW5fdGVzdHMpOgorICAgICAgICAoSW5zcGVjdG9yR2VuZXJh
dG9yVGVzdHMubWFpbik6CisKIDIwMTQtMDQtMTAgIFphbiBEb2JlcnNlayAgPHpkb2JlcnNla0Bp
Z2FsaWEuY29tPgogCiAgICAgICAgIFtDTWFrZV0gQWRkIG1pc3NpbmcgV1RGIHVuaXQgdGVzdHMK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvcnVuLWluc3BlY3Rvci1nZW5lcmF0b3ItdGVzdHMg
Yi9Ub29scy9TY3JpcHRzL3J1bi1pbnNwZWN0b3ItZ2VuZXJhdG9yLXRlc3RzCm5ldyBmaWxlIG1v
ZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmFhYWIxODAwYmNhNmY3ZThhMzQ5NmU1OTE4NDIxZWVhZTJkMzhkODIKLS0tIC9kZXYvbnVsbAor
KysgYi9Ub29scy9TY3JpcHRzL3J1bi1pbnNwZWN0b3ItZ2VuZXJhdG9yLXRlc3RzCkBAIC0wLDAg
KzEsNDIgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyBDb3B5cmlnaHQgKEMpIDIwMTQgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisjIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworIyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
IyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisjIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKworaW1wb3J0IHN5cworZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtIGlt
cG9ydCBleGVjdXRpdmUKKworZGVmIG1haW4oYXJndik6CisgICAgIiIiUnVucyByZXBsYXkgaW5w
dXQgY29kZSBnZW5lcmF0b3Igb24gdGVzdCBzcGVjaWZpY2F0aW9uIGZpbGVzIGFuZCBjb21wYXJl
cworICAgIHRoZSByZXN1bHRzIHdpdGggcmVmZXJlbmNlIGZpbGVzLgorCisgICAgT3B0aW9uczoK
KyAgICAgICAtLXJlc2V0LXJlc3VsdHM6IE92ZXJ3cml0ZXMgdGhlIHJlZmVyZW5jZSBmaWxlcyB3
aXRoIHRoZSBnZW5lcmF0ZWQgcmVzdWx0cy4KKworICAgICIiIgorICAgIHJlc2V0X3Jlc3VsdHMg
PSAiLS1yZXNldC1yZXN1bHRzIiBpbiBhcmd2CisKKyAgICBmcm9tIHdlYmtpdHB5Lmluc3BlY3Rv
ci5tYWluIGltcG9ydCBJbnNwZWN0b3JHZW5lcmF0b3JUZXN0cworICAgIHJldHVybiBJbnNwZWN0
b3JHZW5lcmF0b3JUZXN0cyhyZXNldF9yZXN1bHRzLCBleGVjdXRpdmUuRXhlY3V0aXZlKCkpLm1h
aW4oKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHN5cy5leGl0KG1haW4oc3lz
LmFyZ3YpKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9pbnNwZWN0b3IvX19p
bml0X18ucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2luc3BlY3Rvci9fX2luaXRfXy5weQpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5lZjY1YmVlNWJiNzdlOTZlYmM3Y2Q5YzQ3NjQwNjkwZmJkYThhYzE5Ci0tLSAv
ZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9pbnNwZWN0b3IvX19pbml0X18u
cHkKQEAgLTAsMCArMSBAQAorIyBSZXF1aXJlZCBmb3IgUHl0aG9uIHRvIHNlYXJjaCB0aGlzIGRp
cmVjdG9yeSBmb3IgbW9kdWxlIGZpbGVzCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L2luc3BlY3Rvci9tYWluLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9pbnNwZWN0b3Iv
bWFpbi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi40ZDViMWU0M2IwMDJjNTNhOTBhOTViY2NjZjYzZjQyYTVmMTMy
NDUyCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9pbnNwZWN0b3Iv
bWFpbi5weQpAQCAtMCwwICsxLDEzNCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUg
bWV0OgorIworIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUworIyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQKKyMgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBCisjIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBIT0xERVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgb3MKK2ltcG9ydCBvcy5wYXRoCitpbXBv
cnQgc2h1dGlsCitpbXBvcnQgc3lzCitpbXBvcnQgdGVtcGZpbGUKK2Zyb20gd2Via2l0cHkuY29t
bW9uLmNoZWNrb3V0LnNjbS5kZXRlY3Rpb24gaW1wb3J0IGRldGVjdF9zY21fc3lzdGVtCitmcm9t
IHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uZXhlY3V0aXZlIGltcG9ydCBTY3JpcHRFcnJvcgorCisK
K2NsYXNzIEluc3BlY3RvckdlbmVyYXRvclRlc3RzOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYs
IHJlc2V0X3Jlc3VsdHMsIGV4ZWN1dGl2ZSk6CisgICAgICAgIHNlbGYucmVzZXRfcmVzdWx0cyA9
IHJlc2V0X3Jlc3VsdHMKKyAgICAgICAgc2VsZi5leGVjdXRpdmUgPSBleGVjdXRpdmUKKworICAg
IGRlZiBnZW5lcmF0ZV9mcm9tX2pzb24oc2VsZiwganNvbl9maWxlLCBvdXRwdXRfZGlyZWN0b3J5
KToKKyAgICAgICAgY21kID0gWydweXRob24nLAorICAgICAgICAgICAgICAgJ0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IyLnB5JywKKyAgICAg
ICAgICAgICAgICctLW91dHB1dERpcicsIG91dHB1dF9kaXJlY3RvcnksCisgICAgICAgICAgICAg
ICAnLS1mb3JjZScsCisgICAgICAgICAgICAgICAnLS1mcmFtZXdvcmsnLCAnVGVzdCcsCisgICAg
ICAgICAgICAgICAnLS10ZXN0JywKKyAgICAgICAgICAgICAgIGpzb25fZmlsZV0KKworICAgICAg
ICBleGl0X2NvZGUgPSAwCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHN0ZGVycl9vdXRwdXQg
PSBzZWxmLmV4ZWN1dGl2ZS5ydW5fY29tbWFuZChjbWQpCisgICAgICAgICAgICBpZiBzdGRlcnJf
b3V0cHV0OgorICAgICAgICAgICAgICAgIHNlbGYud3JpdGVfZXJyb3JfZmlsZShqc29uX2ZpbGUs
IG91dHB1dF9kaXJlY3RvcnksIHN0ZGVycl9vdXRwdXQpCisgICAgICAgIGV4Y2VwdCBTY3JpcHRF
cnJvciwgZToKKyAgICAgICAgICAgIHByaW50IGUub3V0cHV0CisgICAgICAgICAgICBleGl0X2Nv
ZGUgPSBlLmV4aXRfY29kZQorICAgICAgICByZXR1cm4gZXhpdF9jb2RlCisKKyAgICBkZWYgd3Jp
dGVfZXJyb3JfZmlsZShzZWxmLCBpbnB1dF9maWxlcGF0aCwgb3V0cHV0X2RpcmVjdG9yeSwgZXJy
b3Jfb3V0cHV0KToKKyAgICAgICAgb3V0cHV0X2ZpbGVwYXRoID0gb3MucGF0aC5qb2luKG91dHB1
dF9kaXJlY3RvcnksIG9zLnBhdGguYmFzZW5hbWUoaW5wdXRfZmlsZXBhdGgpICsgJy1lcnJvcicp
CisKKyAgICAgICAgd2l0aCBvcGVuKG91dHB1dF9maWxlcGF0aCwgInciKSBhcyBvdXRwdXRfZmls
ZToKKyAgICAgICAgICAgIG91dHB1dF9maWxlLndyaXRlKGVycm9yX291dHB1dCkKKworICAgIGRl
ZiBkZXRlY3RfY2hhbmdlcyhzZWxmLCB3b3JrX2RpcmVjdG9yeSwgcmVmZXJlbmNlX2RpcmVjdG9y
eSk6CisgICAgICAgIGNoYW5nZXNfZm91bmQgPSBGYWxzZQorICAgICAgICBmb3Igb3V0cHV0X2Zp
bGUgaW4gb3MubGlzdGRpcih3b3JrX2RpcmVjdG9yeSk6CisgICAgICAgICAgICBjbWQgPSBbJ2Rp
ZmYnLAorICAgICAgICAgICAgICAgICAgICctdScsCisgICAgICAgICAgICAgICAgICAgJy1OJywK
KyAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4ocmVmZXJlbmNlX2RpcmVjdG9yeSwgb3V0
cHV0X2ZpbGUpLAorICAgICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbih3b3JrX2RpcmVjdG9y
eSwgb3V0cHV0X2ZpbGUpXQorCisgICAgICAgICAgICBleGl0X2NvZGUgPSAwCisgICAgICAgICAg
ICB0cnk6CisgICAgICAgICAgICAgICAgb3V0cHV0ID0gc2VsZi5leGVjdXRpdmUucnVuX2NvbW1h
bmQoY21kKQorICAgICAgICAgICAgZXhjZXB0IFNjcmlwdEVycm9yLCBlOgorICAgICAgICAgICAg
ICAgIG91dHB1dCA9IGUub3V0cHV0CisgICAgICAgICAgICAgICAgZXhpdF9jb2RlID0gZS5leGl0
X2NvZGUKKworICAgICAgICAgICAgaWYgZXhpdF9jb2RlIG9yIG91dHB1dDoKKyAgICAgICAgICAg
ICAgICBwcmludCAnRkFJTDogJXMnICUgb3V0cHV0X2ZpbGUKKyAgICAgICAgICAgICAgICBwcmlu
dCBvdXRwdXQKKyAgICAgICAgICAgICAgICBjaGFuZ2VzX2ZvdW5kID0gVHJ1ZQorICAgICAgICAg
ICAgZWxzZToKKyAgICAgICAgICAgICAgICBwcmludCAnUEFTUzogJXMnICUgb3V0cHV0X2ZpbGUK
KyAgICAgICAgcmV0dXJuIGNoYW5nZXNfZm91bmQKKworICAgIGRlZiBydW5fdGVzdHMoc2VsZiwg
aW5wdXRfZGlyZWN0b3J5LCByZWZlcmVuY2VfZGlyZWN0b3J5KToKKyAgICAgICAgd29ya19kaXJl
Y3RvcnkgPSByZWZlcmVuY2VfZGlyZWN0b3J5CisKKyAgICAgICAgcGFzc2VkID0gVHJ1ZQorICAg
ICAgICBmb3IgaW5wdXRfZmlsZSBpbiBvcy5saXN0ZGlyKGlucHV0X2RpcmVjdG9yeSk6CisgICAg
ICAgICAgICAobmFtZSwgZXh0ZW5zaW9uKSA9IG9zLnBhdGguc3BsaXRleHQoaW5wdXRfZmlsZSkK
KyAgICAgICAgICAgIGlmIGV4dGVuc2lvbiAhPSAnLmpzb24nOgorICAgICAgICAgICAgICAgIGNv
bnRpbnVlCisgICAgICAgICAgICAjIEdlbmVyYXRlIG91dHB1dCBpbnRvIHRoZSB3b3JrIGRpcmVj
dG9yeSAoZWl0aGVyIHRoZSBnaXZlbiBvbmUgb3IgYQorICAgICAgICAgICAgIyB0ZW1wIG9uZSBp
ZiBub3QgcmVzZXRfcmVzdWx0cyBpcyBwZXJmb3JtZWQpCisgICAgICAgICAgICBpZiBub3Qgc2Vs
Zi5yZXNldF9yZXN1bHRzOgorICAgICAgICAgICAgICAgIHdvcmtfZGlyZWN0b3J5ID0gdGVtcGZp
bGUubWtkdGVtcCgpCisKKyAgICAgICAgICAgIGlmIHNlbGYuZ2VuZXJhdGVfZnJvbV9qc29uKG9z
LnBhdGguam9pbihpbnB1dF9kaXJlY3RvcnksIGlucHV0X2ZpbGUpLCB3b3JrX2RpcmVjdG9yeSk6
CisgICAgICAgICAgICAgICAgcGFzc2VkID0gRmFsc2UKKworICAgICAgICAgICAgaWYgc2VsZi5y
ZXNldF9yZXN1bHRzOgorICAgICAgICAgICAgICAgIHByaW50ICJSZXNldCByZXN1bHRzIGZvciB0
ZXN0OiAlcyIgJSAoaW5wdXRfZmlsZSkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAg
ICAgICAgICAjIERldGVjdCBjaGFuZ2VzCisgICAgICAgICAgICBpZiBzZWxmLmRldGVjdF9jaGFu
Z2VzKHdvcmtfZGlyZWN0b3J5LCByZWZlcmVuY2VfZGlyZWN0b3J5KToKKyAgICAgICAgICAgICAg
ICBwYXNzZWQgPSBGYWxzZQorICAgICAgICAgICAgc2h1dGlsLnJtdHJlZSh3b3JrX2RpcmVjdG9y
eSkKKworICAgICAgICByZXR1cm4gcGFzc2VkCisKKyAgICBkZWYgbWFpbihzZWxmKToKKyAgICAg
ICAgY3VycmVudF9zY20gPSBkZXRlY3Rfc2NtX3N5c3RlbShvcy5jdXJkaXIpCisgICAgICAgIG9z
LmNoZGlyKG9zLnBhdGguam9pbihjdXJyZW50X3NjbS5jaGVja291dF9yb290LCAnU291cmNlJykp
CisKKyAgICAgICAgYWxsX3Rlc3RzX3Bhc3NlZCA9IFRydWUKKworICAgICAgICBpbnB1dF9kaXJl
Y3RvcnkgPSBvcy5wYXRoLmpvaW4oJ0phdmFTY3JpcHRDb3JlJywgJ2luc3BlY3RvcicsICdzY3Jp
cHRzJywgJ3Rlc3RzJykKKyAgICAgICAgcmVmZXJlbmNlX2RpcmVjdG9yeSA9IG9zLnBhdGguam9p
bignSmF2YVNjcmlwdENvcmUnLCAnaW5zcGVjdG9yJywgJ3NjcmlwdHMnLCAndGVzdHMnLCAnZXhw
ZWN0ZWQnKQorICAgICAgICBpZiBub3Qgc2VsZi5ydW5fdGVzdHMoaW5wdXRfZGlyZWN0b3J5LCBy
ZWZlcmVuY2VfZGlyZWN0b3J5KToKKyAgICAgICAgICAgIGFsbF90ZXN0c19wYXNzZWQgPSBGYWxz
ZQorCisgICAgICAgIHByaW50ICcnCisgICAgICAgIGlmIGFsbF90ZXN0c19wYXNzZWQ6CisgICAg
ICAgICAgICBwcmludCAnQWxsIHRlc3RzIFBBU1MhJworICAgICAgICAgICAgcmV0dXJuIDAKKyAg
ICAgICAgZWxzZToKKyAgICAgICAgICAgIHByaW50ICdTb21lIHRlc3RzIEZBSUwhIChUbyB1cGRh
dGUgdGhlIHJlZmVyZW5jZSBmaWxlcywgZXhlY3V0ZSAicnVuLWluc3BlY3Rvci1nZW5lcmF0b3It
dGVzdHMgLS1yZXNldC1yZXN1bHRzIiknCisgICAgICAgICAgICByZXR1cm4gLTEK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>229624</attachid>
            <date>2014-04-17 21:58:08 -0700</date>
            <delta_ts>2014-04-20 16:13:08 -0700</delta_ts>
            <desc>WIP: generates InspectorWebBackendCommands.js and InspectorWebBackendDispatchers.h</desc>
            <filename>bug-131596-20140417215703.patch</filename>
            <type>text/plain</type>
            <size>82899</size>
            <attacher name="Brian Burg">burg</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTY3MTgxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBk
ZGQ3NzcyZjc4YTU3OTY0NDhmYmViNjI3NjY1NDQzZTVmMGFlMGQ5Li5iNzhjYWY1Zjk3ZTIxYzcy
OWNmOTE5OWJhZDg4ZDBmNjIxMTMzMDk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNzUgQEAKKzIwMTQtMDQtMTcgIEJyaWFuIEouIEJ1cmcgIDxidXJnQGNzLndhc2hpbmd0
b24uZWR1PgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IHJld3JpdGUgQ29kZUdlbmVyYXRvcklu
c3BlY3RvciB0byBiZSBtb2R1bGFyIGFuZCB0ZXN0YWJsZQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMxNTk2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9Db2RlR2VuZXJh
dG9ySW5zcGVjdG9yMi5weTogQWRkZWQuCisgICAgICAgIChnZW5lcmF0ZV9mcm9tX3NwZWNpZmlj
YXRpb24pOgorICAgICAgICAoZ2VuZXJhdGVfZnJvbV9zcGVjaWZpY2F0aW9uLmxvYWRfc3BlY2lm
aWNhdGlvbik6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9fX2luaXRfXy5w
eTogQWRkZWQuCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9i
YWNrZW5kX2NvbW1hbmRzLnB5OiBBZGRlZC4KKyAgICAgICAgKG1ha2VfamF2YXNjcmlwdF9pZGVu
dGlmaWVyKToKKyAgICAgICAgKG1ha2VfamF2YXNjcmlwdF9pZGVudGlmaWVyLnJlcGxhY2VDYWxs
YmFjayk6CisgICAgICAgIChCYWNrZW5kQ29tbWFuZHNHZW5lcmF0b3IpOgorICAgICAgICAoQmFj
a2VuZENvbW1hbmRzR2VuZXJhdG9yLl9faW5pdF9fKToKKyAgICAgICAgKEJhY2tlbmRDb21tYW5k
c0dlbmVyYXRvci5tb2RlbCk6CisgICAgICAgIChCYWNrZW5kQ29tbWFuZHNHZW5lcmF0b3Iub3V0
cHV0X2ZpbGVuYW1lKToKKyAgICAgICAgKEJhY2tlbmRDb21tYW5kc0dlbmVyYXRvci53cml0ZV9v
dXRwdXRfZmlsZXMpOgorICAgICAgICAoQmFja2VuZENvbW1hbmRzR2VuZXJhdG9yLmdlbmVyYXRl
X2xpY2Vuc2UpOgorICAgICAgICAoQmFja2VuZENvbW1hbmRzR2VuZXJhdG9yLmdlbmVyYXRlX2Jh
Y2tlbmRfY29tbWFuZHMpOgorICAgICAgICAoQmFja2VuZENvbW1hbmRzR2VuZXJhdG9yLmdlbmVy
YXRlX2RvbWFpbik6CisgICAgICAgIChCYWNrZW5kQ29tbWFuZHNHZW5lcmF0b3IuZ2VuZXJhdGVf
ZG9tYWluLmdlbmVyYXRlX3BhcmFtZXRlcl9vYmplY3QpOgorICAgICAgICAqIGluc3BlY3Rvci9z
Y3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weTogQWRk
ZWQuCisgICAgICAgICh1Y2ZpcnN0KToKKyAgICAgICAgKEJhY2tlbmREaXNwYXRjaGVySGVhZGVy
R2VuZXJhdG9yKToKKyAgICAgICAgKEJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yLl9f
aW5pdF9fKToKKyAgICAgICAgKEJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yLm1vZGVs
KToKKyAgICAgICAgKEJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yLm91dHB1dF9maWxl
bmFtZSk6CisgICAgICAgIChCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvci53cml0ZV9v
dXRwdXRfZmlsZXMpOgorICAgICAgICAoQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3Iu
Z2VuZXJhdGVfbGljZW5zZSk6CisgICAgICAgIChCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVy
YXRvci5nZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXIpOgorICAgICAgICAoQmFja2VuZERpc3Bh
dGNoZXJIZWFkZXJHZW5lcmF0b3IuZ2VuZXJhdGVfYmFja2VuZF9kaXNwYXRjaGVyLnNob3VsZF9n
ZW5lcmF0ZV9kb21haW4pOgorICAgICAgICAoQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0
b3IuZ2VuZXJhdGVfZG9tYWluX2hhbmRsZXIpOgorICAgICAgICAoQmFja2VuZERpc3BhdGNoZXJI
ZWFkZXJHZW5lcmF0b3IuZ2VuZXJhdGVfaGFuZGxlcl9jb21tYW5kKToKKyAgICAgICAgKEJhY2tl
bmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yLmdlbmVyYXRlX2FzeW5jX2hhbmRsZXJfY29tbWFu
ZCk6CisgICAgICAgIChCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvci5nZW5lcmF0ZV9k
b21haW5fZGlzcGF0Y2hlcik6CisgICAgICAgIChCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVy
YXRvci5nZW5lcmF0ZV9kaXNwYXRjaGVyX2NvbW1hbmQpOgorICAgICAgICAqIGluc3BlY3Rvci9z
Y3JpcHRzL2NvZGVnZW4vZ2VuZXJhdG9yLnB5OiBBZGRlZC4KKyAgICAgICAgKEdlbmVyYXRvcik6
CisgICAgICAgIChHZW5lcmF0b3IuX19pbml0X18pOgorICAgICAgICAoR2VuZXJhdG9yLm1vZGVs
KToKKyAgICAgICAgKEdlbmVyYXRvci53cml0ZV9vdXRwdXRfZmlsZXMpOgorICAgICAgICAoR2Vu
ZXJhdG9yLmNwcF9ndWFyZF9mb3JfZG9tYWluKToKKyAgICAgICAgKER1bW15R2VuZXJhdG9yKToK
KyAgICAgICAgKEluY3JlbWVudGFsRmlsZVdyaXRlcik6CisgICAgICAgIChJbmNyZW1lbnRhbEZp
bGVXcml0ZXIuX19pbml0X18pOgorICAgICAgICAoSW5jcmVtZW50YWxGaWxlV3JpdGVyLndyaXRl
KToKKyAgICAgICAgKEluY3JlbWVudGFsRmlsZVdyaXRlci5jbG9zZSk6CisgICAgICAgICogaW5z
cGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0b3JfdGVtcGxhdGVzLnB5OiBBZGRlZC4KKyAg
ICAgICAgKEdlbmVyYXRvclRlbXBsYXRlcyk6CisgICAgICAgIChTdHJpbmcpOgorICAgICAgICAq
IGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vbW9kZWxzLnB5OiBBZGRlZC4KKyAgICAgICAgKFBh
cnNlRXhjZXB0aW9uKToKKyAgICAgICAgKFR5cGVjaGVja0V4Y2VwdGlvbik6CisgICAgICAgIChG
cmFtZXdvcmspOgorICAgICAgICAoRnJhbWV3b3JrLl9faW5pdF9fKToKKyAgICAgICAgKEZyYW1l
d29yay5zZXR0aW5nKToKKyAgICAgICAgKEZyYW1ld29yay5mcm9tU3RyaW5nKToKKyAgICAgICAg
KEZyYW1ld29ya3MpOgorICAgICAgICAoVHlwZU1vZGUpOgorICAgICAgICAoVHlwZU1vZGUuX19p
bml0X18pOgorICAgICAgICAoVHlwZU1vZGUuZnJvbVN0cmluZyk6CisgICAgICAgIChUeXBlTW9k
ZXMpOgorICAgICAgICAoVHlwZVJlZmVyZW5jZSk6CisgICAgICAgIChUeXBlUmVmZXJlbmNlLl9f
aW5pdF9fKToKKyAgICAgICAgKFR5cGVSZWZlcmVuY2UucmVmZXJlbmNlZF9uYW1lKToKKyAgICAg
ICAgKFR5cGUpOgorICAgICAgICAoVHlwZS5fX2luaXRfXyk6CisgICAgICAgIChUeXBlLl9fZXFf
Xyk6CisgICAgICAgIChUeXBlLl9faGFzaF9fKToKKyAgICAgICAgKFR5cGUuaXNfZW51bSk6Cisg
ICAgICAgIChUeXBlLnR5cGVfZG9tYWluKToKKyAgICAgICAgKFR5cGUudHlwZV9tb2RlKToKKyAg
ICAgICAgKFR5cGUucXVhbGlmaWVkX25hbWUpOgorICAgICAgICAoVHlwZS5yZXNvbHZlX3R5cGVf
cmVmZXJlbmNlcyk6CisgICAgICAgIChUeXBlLmluX3BhcmFtZXRlcl90eXBlKToKKyAgICAgICAg
KFR5cGUub3V0X3BhcmFtZXRlcl90eXBlKToKKyAgICAgICAgKFR5cGUudHlwZV9idWlsZGVyX3R5
cGUpOgorICAgICAgICAoT2JqZWN0VHlwZSk6CisgICAgICAgIChPYmplY3RUeXBlLl9faW5pdF9f
KToKKyAgICAgICAgKE9iamVjdFR5cGUudHlwZV9kb21haW4pOgorICAgICAgICAoT2JqZWN0VHlw
ZS50eXBlX21vZGUpOgorICAgICAgICAoT2JqZWN0VHlwZS5xdWFsaWZpZWRfbmFtZSk6CisgICAg
ICAgIChPYmplY3RUeXBlLnJlc29sdmVfdHlwZV9yZWZlcmVuY2VzKToKKyAgICAgICAgKE9iamVj
dFR5cGUuaW5fcGFyYW1ldGVyX3R5cGUpOgorICAgICAgICAoT2JqZWN0VHlwZS5vdXRfcGFyYW1l
dGVyX3R5cGUpOgorICAgICAgICAoT2JqZWN0VHlwZS50eXBlX2J1aWxkZXJfdHlwZSk6CisgICAg
ICAgIChQcmltaXRpdmVUeXBlKToKKyAgICAgICAgKFByaW1pdGl2ZVR5cGUuX19pbml0X18pOgor
ICAgICAgICAoUHJpbWl0aXZlVHlwZS50eXBlX2RvbWFpbik6CisgICAgICAgIChQcmltaXRpdmVU
eXBlLnR5cGVfbW9kZSk6CisgICAgICAgIChQcmltaXRpdmVUeXBlLnF1YWxpZmllZF9uYW1lKToK
KyAgICAgICAgKFByaW1pdGl2ZVR5cGUuaW5fcGFyYW1ldGVyX3R5cGUpOgorICAgICAgICAoUHJp
bWl0aXZlVHlwZS5vdXRfcGFyYW1ldGVyX3R5cGUpOgorICAgICAgICAoUHJpbWl0aXZlVHlwZS50
eXBlX2J1aWxkZXJfdHlwZSk6CisgICAgICAgIChQcmltaXRpdmVUeXBlLmNwcF9wcmltaXRpdmVf
bmFtZSk6CisgICAgICAgIChBbGlhc2VkVHlwZSk6CisgICAgICAgIChBbGlhc2VkVHlwZS5fX2lu
aXRfXyk6CisgICAgICAgIChBbGlhc2VkVHlwZS50eXBlX2RvbWFpbik6CisgICAgICAgIChBbGlh
c2VkVHlwZS50eXBlX21vZGUpOgorICAgICAgICAoQWxpYXNlZFR5cGUucXVhbGlmaWVkX25hbWUp
OgorICAgICAgICAoQWxpYXNlZFR5cGUucmVzb2x2ZV90eXBlX3JlZmVyZW5jZXMpOgorICAgICAg
ICAoQWxpYXNlZFR5cGUuaW5fcGFyYW1ldGVyX3R5cGUpOgorICAgICAgICAoQWxpYXNlZFR5cGUu
b3V0X3BhcmFtZXRlcl90eXBlKToKKyAgICAgICAgKEFsaWFzZWRUeXBlLnR5cGVfYnVpbGRlcl90
eXBlKToKKyAgICAgICAgKEVudW1UeXBlKToKKyAgICAgICAgKEVudW1UeXBlLl9faW5pdF9fKToK
KyAgICAgICAgKEVudW1UeXBlLmlzX2VudW0pOgorICAgICAgICAoRW51bVR5cGUudHlwZV9kb21h
aW4pOgorICAgICAgICAoRW51bVR5cGUudHlwZV9tb2RlKToKKyAgICAgICAgKEVudW1UeXBlLmVu
dW1fdmFsdWVzKToKKyAgICAgICAgKEVudW1UeXBlLnF1YWxpZmllZF9uYW1lKToKKyAgICAgICAg
KEVudW1UeXBlLnJlc29sdmVfdHlwZV9yZWZlcmVuY2VzKToKKyAgICAgICAgKEVudW1UeXBlLmlu
X3BhcmFtZXRlcl90eXBlKToKKyAgICAgICAgKEVudW1UeXBlLm91dF9wYXJhbWV0ZXJfdHlwZSk6
CisgICAgICAgIChFbnVtVHlwZS50eXBlX2J1aWxkZXJfdHlwZSk6CisgICAgICAgIChWZWN0b3JU
eXBlKToKKyAgICAgICAgKFZlY3RvclR5cGUuX19pbml0X18pOgorICAgICAgICAoVmVjdG9yVHlw
ZS50eXBlX2RvbWFpbik6CisgICAgICAgIChWZWN0b3JUeXBlLnR5cGVfbW9kZSk6CisgICAgICAg
IChWZWN0b3JUeXBlLnF1YWxpZmllZF9uYW1lKToKKyAgICAgICAgKFZlY3RvclR5cGUucmVzb2x2
ZV90eXBlX3JlZmVyZW5jZXMpOgorICAgICAgICAoVmVjdG9yVHlwZS5pbl9wYXJhbWV0ZXJfdHlw
ZSk6CisgICAgICAgIChWZWN0b3JUeXBlLm91dF9wYXJhbWV0ZXJfdHlwZSk6CisgICAgICAgIChW
ZWN0b3JUeXBlLnR5cGVfYnVpbGRlcl90eXBlKToKKyAgICAgICAgKGNoZWNrX2Zvcl9yZXF1aXJl
ZF9wcm9wZXJ0aWVzKToKKyAgICAgICAgKFByb3RvY29sKToKKyAgICAgICAgKFByb3RvY29sLl9f
aW5pdF9fKToKKyAgICAgICAgKFByb3RvY29sLnBhcnNlX3NwZWNpZmljYXRpb24pOgorICAgICAg
ICAoUHJvdG9jb2wucGFyc2VfZG9tYWluKToKKyAgICAgICAgKFByb3RvY29sLnBhcnNlX3R5cGVf
ZGVjbGFyYXRpb24pOgorICAgICAgICAoUHJvdG9jb2wucGFyc2VfdHlwZV9tZW1iZXIpOgorICAg
ICAgICAoUHJvdG9jb2wucGFyc2VfY29tbWFuZCk6CisgICAgICAgIChQcm90b2NvbC5wYXJzZV9l
dmVudCk6CisgICAgICAgIChQcm90b2NvbC5wYXJzZV9wYXJhbWV0ZXIpOgorICAgICAgICAoUHJv
dG9jb2wucmVzb2x2ZV90eXBlcyk6CisgICAgICAgIChQcm90b2NvbC5sb29rdXBfdHlwZV9mb3Jf
ZGVjbGFyYXRpb24pOgorICAgICAgICAoUHJvdG9jb2wubG9va3VwX3R5cGVfcmVmZXJlbmNlKToK
KyAgICAgICAgKERvbWFpbik6CisgICAgICAgIChEb21haW4uX19pbml0X18pOgorICAgICAgICAo
RG9tYWluLnJlc29sdmVfdHlwZV9yZWZlcmVuY2VzKToKKyAgICAgICAgKERvbWFpbnMpOgorICAg
ICAgICAoVHlwZURlY2xhcmF0aW9uKToKKyAgICAgICAgKFR5cGVEZWNsYXJhdGlvbi5fX2luaXRf
Xyk6CisgICAgICAgIChUeXBlRGVjbGFyYXRpb24ucmVzb2x2ZV90eXBlX3JlZmVyZW5jZXMpOgor
ICAgICAgICAoVHlwZU1lbWJlcik6CisgICAgICAgIChUeXBlTWVtYmVyLl9faW5pdF9fKToKKyAg
ICAgICAgKFR5cGVNZW1iZXIucmVzb2x2ZV90eXBlX3JlZmVyZW5jZXMpOgorICAgICAgICAoUGFy
YW1ldGVyKToKKyAgICAgICAgKFBhcmFtZXRlci5fX2luaXRfXyk6CisgICAgICAgIChQYXJhbWV0
ZXIucmVzb2x2ZV90eXBlX3JlZmVyZW5jZXMpOgorICAgICAgICAoQ29tbWFuZCk6CisgICAgICAg
IChDb21tYW5kLl9faW5pdF9fKToKKyAgICAgICAgKENvbW1hbmQucmVzb2x2ZV90eXBlX3JlZmVy
ZW5jZXMpOgorICAgICAgICAoRXZlbnQpOgorICAgICAgICAoRXZlbnQuX19pbml0X18pOgorICAg
ICAgICAoRXZlbnQucmVzb2x2ZV90eXBlX3JlZmVyZW5jZXMpOgorICAgICAgICAqIGluc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tZHVwbGljYXRlLXR5cGUtZGVjbGFyYXRp
b25zLmpzb24tZXJyb3I6IEFkZGVkLgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2V4cGVjdGVkL2ZhaWwtb24tdHlwZS1kZWNsYXJhdGlvbi11c2luZy10eXBlLXJlZmVyZW5jZS5q
c29uLWVycm9yOiBBZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBl
Y3RlZC9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1kZWNsYXJhdGlvbi5q
c29uLWVycm9yOiBBZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBl
Y3RlZC9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1tZW1iZXIuanNvbi1l
cnJvcjogQWRkZWQuCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQv
c2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbi1lcnJvcjogQWRkZWQuCisgICAgICAg
ICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1kdXBsaWNhdGUtdHlwZS1kZWNsYXJh
dGlvbnMuanNvbjogQWRkZWQuCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFp
bC1vbi10eXBlLWRlY2xhcmF0aW9uLXVzaW5nLXR5cGUtcmVmZXJlbmNlLmpzb246IEFkZGVkLgor
ICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tdW5rbm93bi10eXBlLXJl
ZmVyZW5jZS1pbi10eXBlLWRlY2xhcmF0aW9uLmpzb246IEFkZGVkLgorICAgICAgICAqIGluc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVyZW5jZS1pbi10eXBl
LW1lbWJlci5qc29uOiBBZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9z
YW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uOiBBZGRlZC4KKyAgICAgICAgKiBpbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy90eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5
cGUuanNvbjogQWRkZWQuCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvdHlwZS1k
ZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb246IEFkZGVkLgorICAgICAgICAqIGluc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL3R5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb246IEFkZGVkLgorCiAy
MDE0LTA0LTExICBCcmlhbiBKLiBCdXJnICA8YnVyZ0Bjcy53YXNoaW5ndG9uLmVkdT4KIAogICAg
ICAgICBXZWIgUmVwbGF5OiBjb2RlIGdlbmVyYXRvciBzaG91bGQgY29uc2lkZXIgZW5jbG9zaW5n
IGNsYXNzIHdoZW4gY29tcHV0aW5nIGR1cGxpY2F0ZSB0eXBlIG5hbWVzCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvQ29kZUdlbmVyYXRvckluc3Bl
Y3RvcjIucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvQ29kZUdl
bmVyYXRvckluc3BlY3RvcjIucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTA3Y2Y3YjQxMjA0Nzc4NjA2ODU4OGQ5
ZmJjMzk5ZDIxNThjNTk2YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yMi5weQpAQCAtMCwwICsx
LDExNiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoYykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisjIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyMgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgb3MucGF0aAoraW1wb3J0IHJlCitp
bXBvcnQgc3lzCitpbXBvcnQgc3RyaW5nCitmcm9tIHN0cmluZyBpbXBvcnQgVGVtcGxhdGUKK2lt
cG9ydCBvcHRwYXJzZQoraW1wb3J0IGxvZ2dpbmcKKwordHJ5OgorICAgIGltcG9ydCBqc29uCitl
eGNlcHQgSW1wb3J0RXJyb3I6CisgICAgaW1wb3J0IHNpbXBsZWpzb24gYXMganNvbgorCitmcm9t
IGNvZGVnZW4gaW1wb3J0ICoKKworCisjIFVzZSBhIGdsb2JhbCBsb2dnZXIsIHdoaWNoIG5vcm1h
bGx5IG9ubHkgbG9ncyBlcnJvcnMuCisjIEl0IGNhbiBiZSBjb25maWd1cmVkIHRvIGxvZyBkZWJ1
ZyBtZXNzYWdlcyBmcm9tIHRoZSBDTEkuCitsb2dnaW5nLmJhc2ljQ29uZmlnKGZvcm1hdD0nJShs
ZXZlbG5hbWUpczogJShtZXNzYWdlKXMnLCBsZXZlbD1sb2dnaW5nLkVSUk9SKQorbG9nID0gbG9n
Z2luZy5nZXRMb2dnZXIoJ2dsb2JhbCcpCisKKworZGVmIGdlbmVyYXRlX2Zyb21fc3BlY2lmaWNh
dGlvbihwcmltYXJ5X3NwZWNpZmljYXRpb25fZmlsZXBhdGg9Tm9uZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3VwcGxlbWVudGFsX3NwZWNpZmljYXRpb25fZmlsZXBhdGhzPVtd
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfcHJlZml4PSIiLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfZGlycGF0aD1Ob25lLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JjZV9vdXRwdXQ9RmFsc2UsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZyYW1ld29ya19uYW1lPSIiKToKKworICAgIGRlZiBsb2Fk
X3NwZWNpZmljYXRpb24ocHJvdG9jb2wsIGZpbGVwYXRoLCBpc1N1cHBsZW1lbnRhbD1GYWxzZSk6
CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpdGggb3BlbihmaWxlcGF0aCwgInIiKSBhcyBp
bnB1dF9maWxlOgorICAgICAgICAgICAgICAgIHBhcnNlZF9qc29uID0ganNvbi5sb2FkKGlucHV0
X2ZpbGUpCisgICAgICAgICAgICAgICAgcHJvdG9jb2wucGFyc2Vfc3BlY2lmaWNhdGlvbihwYXJz
ZWRfanNvbiwgaXNTdXBwbGVtZW50YWw9aXNTdXBwbGVtZW50YWwpCisgICAgICAgIGV4Y2VwdCBW
YWx1ZUVycm9yIGFzIGU6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIkVycm9yIHBhcnNp
bmcgdmFsaWQgSlNPTiBpbiBmaWxlOiAiICsgZmlsZXBhdGgpCisKKyAgICBwcm90b2NvbCA9IG1v
ZGVscy5Qcm90b2NvbChmcmFtZXdvcmtfbmFtZSkKKyAgICBmb3Igc3BlY2lmaWNhdGlvbiBpbiBz
dXBwbGVtZW50YWxfc3BlY2lmaWNhdGlvbl9maWxlcGF0aHM6CisgICAgICAgIGxvYWRfc3BlY2lm
aWNhdGlvbihwcm90b2NvbCwgc3BlY2lmaWNhdGlvbiwgaXNTdXBwbGVtZW50YWw9VHJ1ZSkKKyAg
ICBsb2FkX3NwZWNpZmljYXRpb24ocHJvdG9jb2wsIHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxl
cGF0aCwgaXNTdXBwbGVtZW50YWw9RmFsc2UpCisKKyAgICBwcm90b2NvbC5yZXNvbHZlX3R5cGVz
KCkKKworICAgIGdlbmVyYXRvcnMgPSBbXQorICAgIGdlbmVyYXRvcnMuYXBwZW5kKER1bW15R2Vu
ZXJhdG9yKHByb3RvY29sLCBwcmltYXJ5X3NwZWNpZmljYXRpb25fZmlsZXBhdGgsIG91dHB1dF9w
cmVmaXgpKQorICAgIGdlbmVyYXRvcnMuYXBwZW5kKEJhY2tlbmRDb21tYW5kc0dlbmVyYXRvcihw
cm90b2NvbCwgcHJpbWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRoLCBvdXRwdXRfcHJlZml4KSkK
KyAgICBnZW5lcmF0b3JzLmFwcGVuZChCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvcihw
cm90b2NvbCwgcHJpbWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRoLCBvdXRwdXRfcHJlZml4KSkK
KworICAgIGZvciBnZW5lcmF0b3IgaW4gZ2VuZXJhdG9yczoKKyAgICAgICAgZ2VuZXJhdG9yLndy
aXRlX291dHB1dF9maWxlcyhvdXRwdXRfZGlycGF0aCwgZm9yY2Vfb3V0cHV0KQorCisKK2lmIF9f
bmFtZV9fID09ICdfX21haW5fXyc6CisgICAgYWxsb3dlZF9mcmFtZXdvcmtfbmFtZXMgPSBbJ1dU
RicsICdKYXZhU2NyaXB0Q29yZScsICdXZWJDb3JlJywgJ1dlYktpdCcsICdXZWJLaXQyJywgJ1Rl
c3QnXQorICAgIGNsaV9wYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIodXNhZ2U9InVzYWdl
OiAlcHJvZyBbb3B0aW9uc10gUHJpbWFyeVByb3RvY29sLmpzb24gW1N1cHBsZW1lbnRhbFByb3Rv
Y29sLmpzb24gLi4uXSIpCisgICAgY2xpX3BhcnNlci5hZGRfb3B0aW9uKCItbyIsICItLW91dHB1
dERpciIsIGhlbHA9IkRpcmVjdG9yeSB3aGVyZSBnZW5lcmF0ZWQgZmlsZXMgc2hvdWxkIGJlIHdy
aXR0ZW4uIikKKyAgICBjbGlfcGFyc2VyLmFkZF9vcHRpb24oIi0tZnJhbWV3b3JrIiwgdHlwZT0i
Y2hvaWNlIiwgY2hvaWNlcz1hbGxvd2VkX2ZyYW1ld29ya19uYW1lcywgaGVscD0iVGhlIGZyYW1l
d29yayB0aGF0IHRoZSBwcmltYXJ5IHNwZWNpZmljYXRpb24gYmVsb25ncyB0by4iKQorICAgIGNs
aV9wYXJzZXIuYWRkX29wdGlvbigiLS1mb3JjZSIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGhlbHA9
IkZvcmNlIG91dHB1dCBvZiBnZW5lcmF0ZWQgc2NyaXB0cywgZXZlbiBpZiBub3RoaW5nIGNoYW5n
ZWQuIikKKyAgICBjbGlfcGFyc2VyLmFkZF9vcHRpb24oIi12IiwgIi0tZGVidWciLCBhY3Rpb249
InN0b3JlX3RydWUiLCBoZWxwPSJMb2cgZXh0cmEgb3V0cHV0IGZvciBkZWJ1Z2dpbmcgdGhlIGdl
bmVyYXRvciBpdHNlbGYuIikKKyAgICBjbGlfcGFyc2VyLmFkZF9vcHRpb24oIi10IiwgIi0tdGVz
dCIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGhlbHA9IkVuYWJsZSB0ZXN0IG1vZGUuIFVzZSB1bmlx
dWUgb3V0cHV0IGZpbGVuYW1lcyBjcmVhdGVkIGJ5IHByZXBlbmRpbmcgdGhlIGlucHV0IGZpbGVu
YW1lLiIpCisKKyAgICBvcHRpb25zID0gTm9uZQorCisgICAgYXJnX29wdGlvbnMsIGFyZ192YWx1
ZXMgPSBjbGlfcGFyc2VyLnBhcnNlX2FyZ3MoKQorICAgIGlmIChsZW4oYXJnX3ZhbHVlcykgPCAx
KToKKyAgICAgICAgcmFpc2UgUGFyc2VFeGNlcHRpb24oIkF0IGxlYXN0IG9uZSBwbGFpbiBhcmd1
bWVudCBleHBlY3RlZCIpCisKKyAgICBpZiBub3QgYXJnX29wdGlvbnMub3V0cHV0RGlyOgorICAg
ICAgICByYWlzZSBQYXJzZUV4Y2VwdGlvbigiTWlzc2luZyBvdXRwdXQgZGlyZWN0b3J5IikKKwor
ICAgIGlmIGFyZ19vcHRpb25zLmRlYnVnOgorICAgICAgICBsb2cuc2V0TGV2ZWwobG9nZ2luZy5E
RUJVRykKKworICAgIG9wdGlvbnMgPSB7CisgICAgICAgICdwcmltYXJ5X3NwZWNpZmljYXRpb25f
ZmlsZXBhdGgnOiBhcmdfdmFsdWVzWzBdLAorICAgICAgICAnc3VwcGxlbWVudGFsX3NwZWNpZmlj
YXRpb25fZmlsZXBhdGhzJzogYXJnX3ZhbHVlc1sxOl0sCisgICAgICAgICdvdXRwdXRfZGlycGF0
aCc6IGFyZ19vcHRpb25zLm91dHB1dERpciwKKyAgICAgICAgJ291dHB1dF9wcmVmaXgnOiBvcy5w
YXRoLmJhc2VuYW1lKGFyZ192YWx1ZXNbMF0pIGlmIGFyZ19vcHRpb25zLnRlc3QgZWxzZSAiIiwK
KyAgICAgICAgJ2ZyYW1ld29ya19uYW1lJzogYXJnX29wdGlvbnMuZnJhbWV3b3JrLAorICAgICAg
ICAnZm9yY2Vfb3V0cHV0JzogYXJnX29wdGlvbnMuZm9yY2UKKyAgICB9CisKKyAgICB0cnk6Cisg
ICAgICAgIGdlbmVyYXRlX2Zyb21fc3BlY2lmaWNhdGlvbigqKm9wdGlvbnMpCisgICAgZXhjZXB0
IChQYXJzZUV4Y2VwdGlvbiwgVHlwZWNoZWNrRXhjZXB0aW9uKSBhcyBlOgorICAgICAgICBpZiBh
cmdfb3B0aW9ucy50ZXN0OgorICAgICAgICAgICAgbG9nLmVycm9yKGUubWVzc2FnZSkKKyAgICAg
ICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlICAjIEZvcmNlIHRoZSBidWlsZCB0byBmYWlsLgpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVn
ZW4vX19pbml0X18ucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Y29kZWdlbi9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mMGZhMzIzOWQyYzhlM2I3Yjc1ZjJlOTBk
NzBiOWIyZjI0NjE2ODM2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vX19pbml0X18ucHkKQEAgLTAsMCArMSw3IEBACisj
IFJlcXVpcmVkIGZvciBQeXRob24gdG8gc2VhcmNoIHRoaXMgZGlyZWN0b3J5IGZvciBtb2R1bGUg
ZmlsZXMKKworZnJvbSBtb2RlbHMgaW1wb3J0ICoKK2Zyb20gZ2VuZXJhdG9yIGltcG9ydCAqCisK
K2Zyb20gZ2VuZXJhdGVfYmFja2VuZF9jb21tYW5kcyBpbXBvcnQgKgorZnJvbSBnZW5lcmF0ZV9i
YWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyIGltcG9ydCAqCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9iYWNrZW5kX2Nv
bW1hbmRzLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVn
ZW4vZ2VuZXJhdGVfYmFja2VuZF9jb21tYW5kcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kMDExNmY1Yzg0YzBi
NTkwYTUxZTVkNjk3YzE1MmMxMzE2ZDIxMDlhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfYmFja2VuZF9j
b21tYW5kcy5weQpAQCAtMCwwICsxLDEzMSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIENv
cHlyaWdodCAoYykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHly
aWdodCAoYykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisjIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisKK2ltcG9ydCBs
b2dnaW5nCitpbXBvcnQgb3MucGF0aAoraW1wb3J0IHJlCitpbXBvcnQgc3RyaW5nCisKK2Zyb20g
Z2VuZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IsIEluY3JlbWVudGFsRmlsZVdyaXRlcgorZnJvbSBz
dHJpbmcgaW1wb3J0IFRlbXBsYXRlCitmcm9tIGdlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IEdl
bmVyYXRvclRlbXBsYXRlcyBhcyBUZW1wbGF0ZXMKKworIyBVc2UgYSBnbG9iYWwgbG9nZ2VyLCB3
aGljaCBub3JtYWxseSBvbmx5IGxvZ3MgZXJyb3JzLgorIyBJdCBjYW4gYmUgY29uZmlndXJlZCB0
byBsb2cgZGVidWcgbWVzc2FnZXMgZnJvbSB0aGUgQ0xJLgorbG9nZ2luZy5iYXNpY0NvbmZpZyhm
b3JtYXQ9JyUobGV2ZWxuYW1lKXM6ICUobWVzc2FnZSlzJywgbGV2ZWw9bG9nZ2luZy5FUlJPUikK
K2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQorCitkZWYgbWFrZV9qYXZhc2NyaXB0
X2lkZW50aWZpZXIoc3RyKToKKyAgICBBTFdBWVNfVVBQRVJDQVNFRF9TVUJTVFJJTkdTID0gWydB
UEknLCAnQ1NTJywgJ0RPTScsICdIVE1MJywgJ1hIUicsICdYTUwnXQorICAgIHJlZ2V4ID0gJyhc
dyopKCVzKShcdyopJyAlICJ8Ii5qb2luKEFMV0FZU19VUFBFUkNBU0VEX1NVQlNUUklOR1MpCisg
ICAgZGVmIHJlcGxhY2VDYWxsYmFjayhtYXRjaCk6CisgICAgICAgIHJldHVybiAiIi5qb2luKFtt
YXRjaC5ncm91cCgxKSwgbWF0Y2guZ3JvdXAoMikudXBwZXIoKSwgbWF0Y2guZ3JvdXAoMyldKQor
CisgICAgIyBTcGxpdCBvbiBoeXBoZW4sIGludHJvZHVjZSBjYW1lbGNhc2UsIGFuZCBmb3JjZSB1
cHBlcmNhc2luZyBvZiBhY3Jvbnltcy4KKyAgICBzdWJ3b3JkcyA9IG1hcChsYW1iZGEgeDogeFsw
XS51cHBlcigpICsgeFsxOl0sIHN0ci5zcGxpdCgnLScpKQorICAgIHJldHVybiByZS5zdWIocmVn
ZXgsIHJlcGxhY2VDYWxsYmFjaywgIiIuam9pbihzdWJ3b3JkcyksIGZsYWdzPXJlLklHTk9SRUNB
U0UpCisKK2NsYXNzIEJhY2tlbmRDb21tYW5kc0dlbmVyYXRvcihHZW5lcmF0b3IpOgorICAgIGRl
ZiBfX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgsIG91dHB1dF9wcmVmaXgpOgor
ICAgICAgICBzZWxmLl9tb2RlbCA9IG1vZGVsCisgICAgICAgIHNlbGYuX2lucHV0X2ZpbGVwYXRo
ID0gaW5wdXRfZmlsZXBhdGgKKyAgICAgICAgc2VsZi5fb3V0cHV0X3ByZWZpeCA9IG91dHB1dF9w
cmVmaXgKKworICAgIGRlZiBtb2RlbChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX21vZGVs
CisKKyAgICBkZWYgb3V0cHV0X2ZpbGVuYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gIkluc3Bl
Y3RvciVzQmFja2VuZENvbW1hbmRzLmpzIiAlIHNlbGYubW9kZWwoKS5mcmFtZXdvcmsuc2V0dGlu
ZygncHJlZml4JykKKworICAgIGRlZiB3cml0ZV9vdXRwdXRfZmlsZXMoc2VsZiwgX2RpciwgZm9y
Y2U9RmFsc2UpOgorICAgICAgICBoZWFkZXJfZmlsZSA9IEluY3JlbWVudGFsRmlsZVdyaXRlcihv
cy5wYXRoLmpvaW4oX2Rpciwgc2VsZi5vdXRwdXRfZmlsZW5hbWUoKSksIGZvcmNlKQorICAgICAg
ICBoZWFkZXJfZmlsZS53cml0ZShzZWxmLmdlbmVyYXRlX2JhY2tlbmRfY29tbWFuZHMoKSkKKyAg
ICAgICAgaGVhZGVyX2ZpbGUuY2xvc2UoKQorCisgICAgZGVmIGdlbmVyYXRlX2xpY2Vuc2Uoc2Vs
Zik6CisgICAgICAgIHJldHVybiBUZW1wbGF0ZShUZW1wbGF0ZXMuQ29weXJpZ2h0QmxvY2spLnN1
YnN0aXR1dGUoTm9uZSwgaW5wdXRGaWxlbmFtZT1vcy5wYXRoLmJhc2VuYW1lKHNlbGYuX2lucHV0
X2ZpbGVwYXRoKSkKKworICAgIGRlZiBnZW5lcmF0ZV9iYWNrZW5kX2NvbW1hbmRzKHNlbGYpOgor
ICAgICAgICBzZWN0aW9ucyA9IFtdCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLmdlbmVy
YXRlX2xpY2Vuc2UoKSkKKyAgICAgICAgc2VjdGlvbnMuZXh0ZW5kKFtzZWxmLmdlbmVyYXRlX2Rv
bWFpbihkb21haW4pIGZvciBkb21haW4gaW4gZmlsdGVyKGxhbWJkYSBkb21haW46IG5vdCBkb21h
aW4uaXNfc3VwcGxlbWVudGFsLCBzZWxmLm1vZGVsKCkuZG9tYWlucyldKQorICAgICAgICByZXR1
cm4gIlxuXG4iLmpvaW4oc2VjdGlvbnMpCisKKyAgICBkZWYgZ2VuZXJhdGVfZG9tYWluKHNlbGYs
IGRvbWFpbik6CisgICAgICAgIGxpbmVzID0gW10KKyAgICAgICAgYXJncyA9IHsKKyAgICAgICAg
ICAgICdkb21haW4nOiBkb21haW4uZG9tYWluX25hbWUKKyAgICAgICAgfQorCisgICAgICAgICMg
UHJlYW1ibGUKKyAgICAgICAgbGluZXMuYXBwZW5kKCcvLyAlKGRvbWFpbilzLicgJSBhcmdzKQor
ICAgICAgICBsaW5lcy5hcHBlbmQoJ0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXIlKGRvbWFpbilz
RGlzcGF0Y2hlciA9IEluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW5EaXNwYXRjaGVyLmJp
bmQoSW5zcGVjdG9yQmFja2VuZCwgIiUoZG9tYWluKXMiKTsnICUgYXJncykKKworICAgICAgICAj
IEVudW0gVHlwZSBEZWNsYXJhdGlvbnMKKyAgICAgICAgZm9yIF9kZWNsYXJhdGlvbiBpbiBkb21h
aW4udHlwZV9kZWNsYXJhdGlvbnM6CisgICAgICAgICAgICBpZiBfZGVjbGFyYXRpb24udHlwZS5p
c19lbnVtKCk6CisgICAgICAgICAgICAgICAgZW51bV9hcmdzID0geworICAgICAgICAgICAgICAg
ICAgICAnZG9tYWluJzogZG9tYWluLmRvbWFpbl9uYW1lLAorICAgICAgICAgICAgICAgICAgICAn
ZW51bU5hbWUnOiBfZGVjbGFyYXRpb24udHlwZV9uYW1lLAorICAgICAgICAgICAgICAgICAgICAn
ZW51bU1hcCc6ICIsICIuam9pbihbJyVzOiAiJXMiJyAlIChtYWtlX2phdmFzY3JpcHRfaWRlbnRp
ZmllcihfdmFsdWUpLCBfdmFsdWUpIGZvciBfdmFsdWUgaW4gX2RlY2xhcmF0aW9uLnR5cGUuZW51
bV92YWx1ZXMoKV0pCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGxpbmVzLmFw
cGVuZCgnSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckVudW0oIiUoZG9tYWluKXMuJShlbnVtTmFt
ZSlzIiwgeyUoZW51bU1hcClzfTsnICUgZW51bV9hcmdzKQorCisgICAgICAgICAgICBmb3IgX21l
bWJlciBpbiBmaWx0ZXIobGFtYmRhIHg6IHgudHlwZS5pc19lbnVtKCksIF9kZWNsYXJhdGlvbi50
eXBlX21lbWJlcnMpOgorICAgICAgICAgICAgICAgIGVudW1fYXJncyA9IHsKKyAgICAgICAgICAg
ICAgICAgICAgJ2RvbWFpbic6IGRvbWFpbi5kb21haW5fbmFtZSwKKyAgICAgICAgICAgICAgICAg
ICAgJ2VudW1OYW1lJzogJyVzJXMnICUgKF9kZWNsYXJhdGlvbi50eXBlX25hbWUsIF9tZW1iZXIu
bWVtYmVyX25hbWUuY2FwaXRhbGl6ZSgpKSwKKyAgICAgICAgICAgICAgICAgICAgJ2VudW1NYXAn
OiAiLCAiLmpvaW4oWyclczogIiVzIicgJSAobWFrZV9qYXZhc2NyaXB0X2lkZW50aWZpZXIoX3Zh
bHVlKSwgX3ZhbHVlKSBmb3IgX3ZhbHVlIGluIF9tZW1iZXIudHlwZS5lbnVtX3ZhbHVlcygpXSkK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCdJbnNwZWN0
b3JCYWNrZW5kLnJlZ2lzdGVyRW51bSgiJShkb21haW4pcy4lKGVudW1OYW1lKXMiLCB7JShlbnVt
TWFwKXN9OycgJSBlbnVtX2FyZ3MpCisKKyAgICAgICAgIyBFdmVudHMKKyAgICAgICAgZm9yIF9l
dmVudCBpbiBkb21haW4uZXZlbnRzOgorICAgICAgICAgICAgZXZlbnRfYXJncyA9IHsKKyAgICAg
ICAgICAgICAgICAnZG9tYWluJzogZG9tYWluLmRvbWFpbl9uYW1lLAorICAgICAgICAgICAgICAg
ICdldmVudE5hbWUnOiBfZXZlbnQuZXZlbnRfbmFtZSwKKyAgICAgICAgICAgICAgICAncGFyYW1z
JzogIiwgIi5qb2luKFsnIiVzIicgJSBfcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lIGZvciBfcGFy
YW1ldGVyIGluIF9ldmVudC5ldmVudF9wYXJhbWV0ZXJzXSkKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGxpbmVzLmFwcGVuZCgnSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckV2ZW50KCIlKGRv
bWFpbilzLiUoZXZlbnROYW1lKXMiLCBbJShwYXJhbXMpc10pOycgJSBldmVudF9hcmdzKQorCisg
ICAgICAgICMgQ29tbWFuZHMKKyAgICAgICAgZm9yIF9jb21tYW5kIGluIGRvbWFpbi5jb21tYW5k
czoKKyAgICAgICAgICAgIGRlZiBnZW5lcmF0ZV9wYXJhbWV0ZXJfb2JqZWN0KHBhcmFtZXRlcik6
CisgICAgICAgICAgICAgICAgcGFpcnMgPSBbXQorICAgICAgICAgICAgICAgIHBhaXJzLmFwcGVu
ZCgnIm5hbWUiOiAiJXMiJyAlIF9wYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpCisgICAgICAgICAg
ICAgICAgcGFpcnMuYXBwZW5kKCcidHlwZSI6ICIlcyInICUgX3BhcmFtZXRlci50eXBlX3JlZi50
eXBlX2tpbmQpCisgICAgICAgICAgICAgICAgcGFpcnMuYXBwZW5kKCcib3B0aW9uYWwiOiAlcycg
JSAidHJ1ZSIgaWYgX3BhcmFtZXRlci5pc19vcHRpb25hbCBlbHNlICJmYWxzZSIpCisgICAgICAg
ICAgICAgICAgcmV0dXJuICIsICIuam9pbihwYWlycykKKworICAgICAgICAgICAgY29tbWFuZF9h
cmdzID0geworICAgICAgICAgICAgICAgICdkb21haW4nOiBkb21haW4uZG9tYWluX25hbWUsCisg
ICAgICAgICAgICAgICAgJ2NvbW1hbmROYW1lJzogX2NvbW1hbmQuY29tbWFuZF9uYW1lLAorICAg
ICAgICAgICAgICAgICdjYWxsUGFyYW1zJzogIiwgIi5qb2luKFtnZW5lcmF0ZV9wYXJhbWV0ZXJf
b2JqZWN0KF9wYXJhbWV0ZXIpIGZvciBfcGFyYW1ldGVyIGluIF9jb21tYW5kLmNhbGxfcGFyYW1l
dGVyc10pLAorICAgICAgICAgICAgICAgICdyZXR1cm5QYXJhbXMnOiAiLCAiLmpvaW4oW2dlbmVy
YXRlX3BhcmFtZXRlcl9vYmplY3QoX3BhcmFtZXRlcikgZm9yIF9wYXJhbWV0ZXIgaW4gX2NvbW1h
bmQucmV0dXJuX3BhcmFtZXRlcnNdKSwKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGxpbmVz
LmFwcGVuZCgnSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIiUoZG9tYWluKXMuJShj
b21tYW5kTmFtZSlzIiwgWyUoY2FsbFBhcmFtcylzXSwgWyUocmV0dXJuUGFyYW1zKXNdKTsnICUg
Y29tbWFuZF9hcmdzKQorCisgICAgICAgIHJldHVybiAiXG4iLmpvaW4obGluZXMpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5l
cmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hl
YWRlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi41MDlkMmZlMzA0YzFiNTExZjZkYzE1NmQzZjE3ODU4MWI5MzE5
NmU3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weQpAQCAt
MCwwICsxLDE3NSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIENvcHlyaWdodCAoYykgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoYykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisjIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisj
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyMgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQg
b3MucGF0aAoraW1wb3J0IHJlCitpbXBvcnQgc3RyaW5nCisKK2Zyb20gZ2VuZXJhdG9yIGltcG9y
dCBHZW5lcmF0b3IsIEluY3JlbWVudGFsRmlsZVdyaXRlcgorZnJvbSBzdHJpbmcgaW1wb3J0IFRl
bXBsYXRlCitmcm9tIGdlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IEdlbmVyYXRvclRlbXBsYXRl
cyBhcyBUZW1wbGF0ZXMKKworIyBVc2UgYSBnbG9iYWwgbG9nZ2VyLCB3aGljaCBub3JtYWxseSBv
bmx5IGxvZ3MgZXJyb3JzLgorIyBJdCBjYW4gYmUgY29uZmlndXJlZCB0byBsb2cgZGVidWcgbWVz
c2FnZXMgZnJvbSB0aGUgQ0xJLgorbG9nZ2luZy5iYXNpY0NvbmZpZyhmb3JtYXQ9JyUobGV2ZWxu
YW1lKXM6ICUobWVzc2FnZSlzJywgbGV2ZWw9bG9nZ2luZy5FUlJPUikKK2xvZyA9IGxvZ2dpbmcu
Z2V0TG9nZ2VyKCdnbG9iYWwnKQorCisKK2RlZiB1Y2ZpcnN0KHN0cik6CisgICAgcmV0dXJuIHN0
cls6MV0udXBwZXIoKSArIHN0clsxOl0KKworCitjbGFzcyBCYWNrZW5kRGlzcGF0Y2hlckhlYWRl
ckdlbmVyYXRvcihHZW5lcmF0b3IpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5w
dXRfZmlsZXBhdGgsIG91dHB1dF9wcmVmaXgpOgorICAgICAgICBzZWxmLl9tb2RlbCA9IG1vZGVs
CisgICAgICAgIHNlbGYuX2lucHV0X2ZpbGVwYXRoID0gaW5wdXRfZmlsZXBhdGgKKyAgICAgICAg
c2VsZi5fb3V0cHV0X3ByZWZpeCA9IG91dHB1dF9wcmVmaXgKKworICAgIGRlZiBtb2RlbChzZWxm
KToKKyAgICAgICAgcmV0dXJuIHNlbGYuX21vZGVsCisKKyAgICBkZWYgb3V0cHV0X2ZpbGVuYW1l
KHNlbGYpOgorICAgICAgICByZXR1cm4gIkluc3BlY3RvciVzQmFja2VuZERpc3BhdGNoZXJzLmgi
ICUgc2VsZi5tb2RlbCgpLmZyYW1ld29yay5zZXR0aW5nKCdwcmVmaXgnKQorCisgICAgZGVmIHdy
aXRlX291dHB1dF9maWxlcyhzZWxmLCBfZGlyLCBmb3JjZT1GYWxzZSk6CisgICAgICAgIGhlYWRl
cl9maWxlID0gSW5jcmVtZW50YWxGaWxlV3JpdGVyKG9zLnBhdGguam9pbihfZGlyLCBzZWxmLm91
dHB1dF9maWxlbmFtZSgpKSwgZm9yY2UpCisgICAgICAgIGhlYWRlcl9maWxlLndyaXRlKHNlbGYu
Z2VuZXJhdGVfYmFja2VuZF9kaXNwYXRjaGVyKCkpCisgICAgICAgIGhlYWRlcl9maWxlLmNsb3Nl
KCkKKworICAgIGRlZiBnZW5lcmF0ZV9saWNlbnNlKHNlbGYpOgorICAgICAgICByZXR1cm4gVGVt
cGxhdGUoVGVtcGxhdGVzLkNvcHlyaWdodEJsb2NrKS5zdWJzdGl0dXRlKE5vbmUsIGlucHV0Rmls
ZW5hbWU9b3MucGF0aC5iYXNlbmFtZShzZWxmLl9pbnB1dF9maWxlcGF0aCkpCisKKyAgICBkZWYg
Z2VuZXJhdGVfYmFja2VuZF9kaXNwYXRjaGVyKHNlbGYpOgorICAgICAgICBzZWN0aW9ucyA9IFtd
CisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLmdlbmVyYXRlX2xpY2Vuc2UoKSkKKyAgICAg
ICAgaGVhZGVyX2FyZ3MgPSB7CisgICAgICAgICAgICAnaGVhZGVyR3VhcmRTdHJpbmcnOiByZS5z
dWIoJ1stLi9dJywgJ18nLCBzZWxmLm91dHB1dF9maWxlbmFtZSgpKSwKKyAgICAgICAgICAgICdm
cmFtZXdvcmtQcmVmaXgnOiBzZWxmLm1vZGVsKCkuZnJhbWV3b3JrLnNldHRpbmcoJ3ByZWZpeCcp
LAorICAgICAgICAgICAgJ2lucHV0RmlsZW5hbWUnOiBzZWxmLl9pbnB1dF9maWxlcGF0aAorCisg
ICAgICAgIH0KKworICAgICAgICBkZWYgc2hvdWxkX2dlbmVyYXRlX2RvbWFpbihkb21haW4pOgor
ICAgICAgICAgICAgcmV0dXJuIGxlbihkb21haW4uY29tbWFuZHMpID4gMCBhbmQgbm90IGRvbWFp
bi5pc19zdXBwbGVtZW50YWwKKworICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoVGVt
cGxhdGVzLkRpc3BhdGNoZXJIZWFkZXJQcmVsdWRlKS5zdWJzdGl0dXRlKE5vbmUsICoqaGVhZGVy
X2FyZ3MpKQorICAgICAgICBzZWN0aW9ucy5leHRlbmQoW3NlbGYuZ2VuZXJhdGVfZG9tYWluX2hh
bmRsZXIoZG9tYWluKSBmb3IgZG9tYWluIGluIGZpbHRlcihzaG91bGRfZ2VuZXJhdGVfZG9tYWlu
LCBzZWxmLm1vZGVsKCkuZG9tYWlucyldKQorICAgICAgICBzZWN0aW9ucy5leHRlbmQoW3NlbGYu
Z2VuZXJhdGVfZG9tYWluX2Rpc3BhdGNoZXIoZG9tYWluKSBmb3IgZG9tYWluIGluIGZpbHRlcihz
aG91bGRfZ2VuZXJhdGVfZG9tYWluLCBzZWxmLm1vZGVsKCkuZG9tYWlucyldKQorICAgICAgICBz
ZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVzLkRpc3BhdGNoZXJIZWFkZXJQb3N0bHVk
ZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkKKyAgICAgICAgcmV0dXJuICJcblxu
Ii5qb2luKHNlY3Rpb25zKQorCisgICAgZGVmIGdlbmVyYXRlX2RvbWFpbl9oYW5kbGVyKHNlbGYs
IGRvbWFpbik6CisgICAgICAgIGxpbmVzID0gW10KKyAgICAgICAgZG9tYWluX2d1YXJkID0gR2Vu
ZXJhdG9yLmNwcF9ndWFyZF9mb3JfZG9tYWluKGRvbWFpbikKKyAgICAgICAgaWYgZG9tYWluX2d1
YXJkIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCIjaWYgJXMiICUgZG9t
YWluX2d1YXJkKQorCisgICAgICAgIGNsYXNzQ29tcG9uZW50cyA9IFsnY2xhc3MnXQorICAgICAg
ICBleHBvcnRNYWNybyA9IHNlbGYubW9kZWwoKS5mcmFtZXdvcmsuc2V0dGluZygnZXhwb3J0X21h
Y3JvJywgTm9uZSkKKyAgICAgICAgaWYgZXhwb3J0TWFjcm8gaXMgbm90IE5vbmU6CisgICAgICAg
ICAgICBjbGFzc0NvbXBvbmVudHMuYXBwZW5kKGV4cG9ydE1hY3JvKQorCisgICAgICAgIGhhbmRs
ZXJfYXJncyA9IHsKKyAgICAgICAgICAgICdjbGFzc0FuZEV4cG9ydE1hY3JvJzogIiAiLmpvaW4o
Y2xhc3NDb21wb25lbnRzKSwKKyAgICAgICAgICAgICdkb21haW5OYW1lJzogZG9tYWluLmRvbWFp
bl9uYW1lLAorICAgICAgICAgICAgJ2NvbW1hbmREZWNsYXJhdGlvbnMnOiAiXG4iLmpvaW4oW3Nl
bGYuZ2VuZXJhdGVfaGFuZGxlcl9jb21tYW5kKGNvbW1hbmQpIGZvciBjb21tYW5kIGluIGRvbWFp
bi5jb21tYW5kc10pCisgICAgICAgIH0KKworICAgICAgICBsaW5lcy5hcHBlbmQoVGVtcGxhdGUo
VGVtcGxhdGVzLkRpc3BhdGNoSGVhZGVyRG9tYWluSGFuZGxlckRlY2xhcmF0aW9uKS5zdWJzdGl0
dXRlKE5vbmUsICoqaGFuZGxlcl9hcmdzKSkKKyAgICAgICAgaWYgZG9tYWluX2d1YXJkIGlzIG5v
dCBOb25lOgorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCIjZW5kaWYgLy8gJXMiICUgZG9tYWlu
X2d1YXJkKQorICAgICAgICByZXR1cm4gIlxuIi5qb2luKGxpbmVzKQorCisgICAgZGVmIGdlbmVy
YXRlX2hhbmRsZXJfY29tbWFuZChzZWxmLCBjb21tYW5kKToKKyAgICAgICAgaWYgY29tbWFuZC5p
c19hc3luYzoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmdlbmVyYXRlX2FzeW5jX2hhbmRsZXJf
Y29tbWFuZChjb21tYW5kKQorCisgICAgICAgIHBhcmFtZXRlcnMgPSBbJ0Vycm9yU3RyaW5nKidd
CisgICAgICAgIGZvciBfcGFyYW1ldGVyIGluIGNvbW1hbmQuY2FsbF9wYXJhbWV0ZXJzOgorICAg
ICAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoIiVzIGluXyVzIiAlIChfcGFyYW1ldGVyLnR5cGUu
aW5fcGFyYW1ldGVyX3R5cGUoX3BhcmFtZXRlci5pc19vcHRpb25hbCksIF9wYXJhbWV0ZXIucGFy
YW1ldGVyX25hbWUpKQorCisgICAgICAgIGZvciBfcGFyYW1ldGVyIGluIGNvbW1hbmQucmV0dXJu
X3BhcmFtZXRlcnM6CisgICAgICAgICAgICBvcHRpb25hbF9wcmVmaXggPSAnb3B0XycgaWYgX3Bh
cmFtZXRlci5pc19vcHRpb25hbCBlbHNlICcnCisgICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVu
ZCgiJXMgJXNvdXRfJXMiICUgKF9wYXJhbWV0ZXIudHlwZS5vdXRfcGFyYW1ldGVyX3R5cGUoX3Bh
cmFtZXRlci5pc19vcHRpb25hbCksIG9wdGlvbmFsX3ByZWZpeCwgX3BhcmFtZXRlci5wYXJhbWV0
ZXJfbmFtZSkpCisKKyAgICAgICAgY29tbWFuZF9hcmdzID0geworICAgICAgICAgICAgJ2NvbW1h
bmROYW1lJzogY29tbWFuZC5jb21tYW5kX25hbWUsCisgICAgICAgICAgICAncGFyYW1ldGVycyc6
ICIsICIuam9pbihwYXJhbWV0ZXJzKQorICAgICAgICB9CisgICAgICAgIHJldHVybiAiICAgIHZp
cnR1YWwgdm9pZCAlKGNvbW1hbmROYW1lKXMoJShwYXJhbWV0ZXJzKXMpID0gMDsiICUgY29tbWFu
ZF9hcmdzCisKKyAgICBkZWYgZ2VuZXJhdGVfYXN5bmNfaGFuZGxlcl9jb21tYW5kKHNlbGYsIGNv
bW1hbmQpOgorICAgICAgICBjYWxsYmFja05hbWUgPSAiJXNDYWxsYmFjayIgJSB1Y2ZpcnN0KGNv
bW1hbmQuY29tbWFuZF9uYW1lKQorCisgICAgICAgIGluX3BhcmFtZXRlcnMgPSBbJ0Vycm9yU3Ry
aW5nKiddCisgICAgICAgIGZvciBfcGFyYW1ldGVyIGluIGNvbW1hbmQuY2FsbF9wYXJhbWV0ZXJz
OgorICAgICAgICAgICAgaW5fcGFyYW1ldGVycy5hcHBlbmQoIiVzIGluXyVzIiAlIChfcGFyYW1l
dGVyLnR5cGUuaW5fcGFyYW1ldGVyX3R5cGUoX3BhcmFtZXRlci5pc19vcHRpb25hbCksIF9wYXJh
bWV0ZXIucGFyYW1ldGVyX25hbWUpKQorICAgICAgICBpbl9wYXJhbWV0ZXJzLmFwcGVuZCgiUGFz
c1JlZlB0cjwlcz4gY2FsbGJhY2siICUgY2FsbGJhY2tOYW1lKQorCisgICAgICAgIG91dF9wYXJh
bWV0ZXJzID0gW10KKyAgICAgICAgZm9yIF9wYXJhbWV0ZXIgaW4gY29tbWFuZC5yZXR1cm5fcGFy
YW1ldGVyczoKKyAgICAgICAgICAgIG9wdGlvbmFsX3ByZWZpeCA9ICdvcHRfJyBpZiBfcGFyYW1l
dGVyLmlzX29wdGlvbmFsIGVsc2UgJycKKyAgICAgICAgICAgIG91dF9wYXJhbWV0ZXJzLmFwcGVu
ZCgiJXMgJXMlcyIgJSAoX3BhcmFtZXRlci50eXBlLmluX3BhcmFtZXRlcl90eXBlKF9wYXJhbWV0
ZXIuaXNfb3B0aW9uYWwpLCBvcHRpb25hbF9wcmVmaXgsIF9wYXJhbWV0ZXIucGFyYW1ldGVyX25h
bWUpKQorCisgICAgICAgIGNvbW1hbmRfYXJncyA9IHsKKyAgICAgICAgICAgICdjYWxsYmFja05h
bWUnOiBjYWxsYmFja05hbWUsCisgICAgICAgICAgICAnY29tbWFuZE5hbWUnOiBjb21tYW5kLmNv
bW1hbmRfbmFtZSwKKyAgICAgICAgICAgICdpblBhcmFtZXRlcnMnOiAiLCAiLmpvaW4oaW5fcGFy
YW1ldGVycyksCisgICAgICAgICAgICAnb3V0UGFyYW1ldGVycyc6ICIsICIuam9pbihvdXRfcGFy
YW1ldGVycyksCisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gVGVtcGxhdGUoVGVtcGxhdGVz
LkRpc3BhdGNoSGVhZGVyQXN5bmNDb21tYW5kRGVjbGFyYXRpb24pLnN1YnN0aXR1dGUoTm9uZSwg
Kipjb21tYW5kX2FyZ3MpCisKKyAgICBkZWYgZ2VuZXJhdGVfZG9tYWluX2Rpc3BhdGNoZXIoc2Vs
ZiwgZG9tYWluKToKKyAgICAgICAgbGluZXMgPSBbXQorICAgICAgICBkb21haW5fZ3VhcmQgPSBH
ZW5lcmF0b3IuY3BwX2d1YXJkX2Zvcl9kb21haW4oZG9tYWluKQorICAgICAgICBpZiBkb21haW5f
Z3VhcmQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoIiNpZiAlcyIgJSBk
b21haW5fZ3VhcmQpCisKKyAgICAgICAgY2xhc3NDb21wb25lbnRzID0gWydjbGFzcyddCisgICAg
ICAgIGV4cG9ydE1hY3JvID0gc2VsZi5tb2RlbCgpLmZyYW1ld29yay5zZXR0aW5nKCdleHBvcnRf
bWFjcm8nLCBOb25lKQorICAgICAgICBpZiBleHBvcnRNYWNybyBpcyBub3QgTm9uZToKKyAgICAg
ICAgICAgIGNsYXNzQ29tcG9uZW50cy5hcHBlbmQoZXhwb3J0TWFjcm8pCisKKyAgICAgICAgZGVj
bGFyYXRpb25zID0gW10KKyAgICAgICAgaWYgbGVuKGRvbWFpbi5jb21tYW5kcykgPiAwOgorICAg
ICAgICAgICAgZGVjbGFyYXRpb25zLmFwcGVuZCgncHJpdmF0ZTonKQorICAgICAgICBkZWNsYXJh
dGlvbnMuZXh0ZW5kKFtzZWxmLmdlbmVyYXRlX2Rpc3BhdGNoZXJfY29tbWFuZChjb21tYW5kKSBm
b3IgY29tbWFuZCBpbiBkb21haW4uY29tbWFuZHNdKQorCisgICAgICAgIGhhbmRsZXJfYXJncyA9
IHsKKyAgICAgICAgICAgICdjbGFzc0FuZEV4cG9ydE1hY3JvJzogIiAiLmpvaW4oY2xhc3NDb21w
b25lbnRzKSwKKyAgICAgICAgICAgICdkb21haW5OYW1lJzogZG9tYWluLmRvbWFpbl9uYW1lLAor
ICAgICAgICAgICAgJ2NvbW1hbmREZWNsYXJhdGlvbnMnOiAiXG4iLmpvaW4oZGVjbGFyYXRpb25z
KQorICAgICAgICB9CisKKyAgICAgICAgbGluZXMuYXBwZW5kKFRlbXBsYXRlKFRlbXBsYXRlcy5E
aXNwYXRjaEhlYWRlckRvbWFpbkRpc3BhdGNoZXJEZWNsYXJhdGlvbikuc3Vic3RpdHV0ZShOb25l
LCAqKmhhbmRsZXJfYXJncykpCisgICAgICAgIGlmIGRvbWFpbl9ndWFyZCBpcyBub3QgTm9uZToK
KyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgiI2VuZGlmIC8vICVzIiAlIGRvbWFpbl9ndWFyZCkK
KyAgICAgICAgcmV0dXJuICJcbiIuam9pbihsaW5lcykKKworICAgIGRlZiBnZW5lcmF0ZV9kaXNw
YXRjaGVyX2NvbW1hbmQoc2VsZiwgY29tbWFuZCk6CisgICAgICAgIHJldHVybiAiICAgIHZvaWQg
JXMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdl
KTsiICUgY29tbWFuZC5jb21tYW5kX25hbWUKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRvci5weSBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRvci5weQpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi40ZmE3MmQwZDNmOGZmYzFiNWM4MGMwNTlkZDhhNDUzZDM2NjU2MjRjCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4v
Z2VuZXJhdG9yLnB5CkBAIC0wLDAgKzEsNzkgQEAKKyMgQ29weXJpZ2h0IChjKSAyMDE0IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChjKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisj
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorIyBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKworY2xhc3MgR2VuZXJhdG9yOgorICAgIGRlZiBfX2lu
aXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgsIG91dHB1dF9wcmVmaXgpOgorICAgICAg
ICBzZWxmLl9tb2RlbCA9IG1vZGVsCisgICAgICAgIHNlbGYuX2lucHV0X2ZpbGVwYXRoID0gaW5w
dXRfZmlsZXBhdGgKKyAgICAgICAgc2VsZi5fb3V0cHV0X3ByZWZpeCA9IG91dHB1dF9wcmVmaXgK
KworICAgIGRlZiBtb2RlbChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX21vZGVsCisKKyAg
ICBkZWYgd3JpdGVfb3V0cHV0X2ZpbGVzKHNlbGYsIF9kaXIsIGZvcmNlPUZhbHNlKToKKyAgICAg
ICAgcGFzcworCisgICAgIyBGSVhNRTogVGhpcyBzaG91bGQgYmUgY29udmVydGVkIGludG8gYSBw
cm9wZXJ0eSBvbiB0aGUgZG9tYWluIGluIEpTT04uCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRl
ZiBjcHBfZ3VhcmRfZm9yX2RvbWFpbihkb21haW4pOgorICAgICAgICBvdmVycmlkZXMgPSB7Cisg
ICAgICAgICAgICAnRGF0YWJhc2UnOiAiRU5BQkxFKFNRTF9EQVRBQkFTRSkiLAorICAgICAgICAg
ICAgJ0luZGV4ZWREQic6ICJFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkiLAorICAgICAgICAgICAg
J1dlYlJlcGxheSc6ICJFTkFCTEUoV0VCX1JFUExBWSkiLAorICAgICAgICB9CisKKyAgICAgICAg
cmV0dXJuIG92ZXJyaWRlcy5nZXQoZG9tYWluLmRvbWFpbl9uYW1lLCBOb25lKQorCitjbGFzcyBE
dW1teUdlbmVyYXRvcihHZW5lcmF0b3IpOgorICAgIHBhc3MKKworCisjIEEgd3JpdGVyIHRoYXQg
b25seSB1cGRhdGVzIGZpbGUgaWYgaXQgYWN0dWFsbHkgY2hhbmdlZC4KK2NsYXNzIEluY3JlbWVu
dGFsRmlsZVdyaXRlcjoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZXBhdGgsIGZvcmNlX291
dHB1dCk6CisgICAgICAgIHNlbGYuX2ZpbGVwYXRoID0gZmlsZXBhdGgKKyAgICAgICAgc2VsZi5f
b3V0cHV0ID0gIiIKKyAgICAgICAgc2VsZi5mb3JjZV9vdXRwdXQgPSBmb3JjZV9vdXRwdXQKKwor
ICAgIGRlZiB3cml0ZShzZWxmLCB0ZXh0KToKKyAgICAgICAgc2VsZi5fb3V0cHV0ICs9IHRleHQK
KworICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgdGV4dF9jaGFuZ2VkID0gVHJ1ZQorICAg
ICAgICBzZWxmLl9vdXRwdXQgPSBzZWxmLl9vdXRwdXQucnN0cmlwKCkgKyAiXG4iCisKKyAgICAg
ICAgdHJ5OgorICAgICAgICAgICAgcmVhZF9maWxlID0gb3BlbihzZWxmLl9maWxlcGF0aCwgInIi
KQorICAgICAgICAgICAgb2xkX3RleHQgPSByZWFkX2ZpbGUucmVhZCgpCisgICAgICAgICAgICBy
ZWFkX2ZpbGUuY2xvc2UoKQorICAgICAgICAgICAgdGV4dF9jaGFuZ2VkID0gb2xkX3RleHQgIT0g
c2VsZi5fb3V0cHV0CisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICMgSWdub3JlLCBqdXN0
IG92ZXJ3cml0ZSBieSBkZWZhdWx0CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgaWYgdGV4
dF9jaGFuZ2VkIG9yIHNlbGYuZm9yY2Vfb3V0cHV0OgorICAgICAgICAgICAgb3V0X2ZpbGUgPSBv
cGVuKHNlbGYuX2ZpbGVwYXRoLCAidyIpCisgICAgICAgICAgICBvdXRfZmlsZS53cml0ZShzZWxm
Ll9vdXRwdXQpCisgICAgICAgICAgICBvdXRfZmlsZS5jbG9zZSgpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0b3JfdGVt
cGxhdGVzLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVn
ZW4vZ2VuZXJhdG9yX3RlbXBsYXRlcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wZjQwMTA2ZWIwZWQwZTg0MDdl
MTBjODhlNjhlZDIzNzRiYWU4Y2M0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdG9yX3RlbXBsYXRlcy5weQpA
QCAtMCwwICsxLDEwNyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIENvcHlyaWdodCAoYykg
MjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoYykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
IyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisjIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyMg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisjIEdlbmVyYXRvciB0ZW1wbGF0ZXMs
IHdoaWNoIGNhbiBiZSBmaWxsZWQgd2l0aCBzdHJpbmcuVGVtcGxhdGUuCisjIEZvbGxvd2luZyBh
cmUgY2xhc3NlcyB0aGF0IGZpbGwgdGhlIHRlbXBsYXRlcyBmcm9tIHRoZSB0eXBlY2hlY2tlZCBt
b2RlbC4KKworCitjbGFzcyBHZW5lcmF0b3JUZW1wbGF0ZXM6CisgICAgQ29weXJpZ2h0QmxvY2sg
PSAoCisgICAgIiIiLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSAke2lucHV0RmlsZW5hbWV9CisvLyBieSB0aGUg
c2NyaXB0OiBKYXZhU2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySW5zcGVj
dG9yLnB5IiIiKQorCisgICAgRGlzcGF0Y2hlckhlYWRlclByZWx1ZGUgPSAoCisgICAgIiIiI2lm
bmRlZiAke2hlYWRlckd1YXJkU3RyaW5nfQorI2RlZmluZSAke2hlYWRlckd1YXJkU3RyaW5nfQor
CisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUgIkluc3BlY3RvciR7ZnJhbWV3b3Jr
UHJlZml4fVR5cGVCdWlsZGVycy5oIgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0eXBlZGVm
IFN0cmluZyBFcnJvclN0cmluZzsiIiIpCisKKyAgICBEaXNwYXRjaGVySGVhZGVyUG9zdGx1ZGUg
PSAoCisgICAgIiIifS8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJ
TlNQRUNUT1IpCisKKyNlbmRpZiAvLyAhZGVmaW5lZCgke2hlYWRlckd1YXJkU3RyaW5nfSkiIiIp
CisKKyAgICBEaXNwYXRjaEhlYWRlckRvbWFpbkhhbmRsZXJEZWNsYXJhdGlvbiA9ICgKKyAgICAi
IiIke2NsYXNzQW5kRXhwb3J0TWFjcm99IEluc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlz
cGF0Y2hlckhhbmRsZXIgeworcHVibGljOgorJHtjb21tYW5kRGVjbGFyYXRpb25zfQorcHJvdGVj
dGVkOgorICAgIHZpcnR1YWwgfkluc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXIoKTsKK307IiIiKQorCisgICAgRGlzcGF0Y2hIZWFkZXJEb21haW5EaXNwYXRjaGVy
RGVjbGFyYXRpb24gPSAoCisgICAgIiIiJHtjbGFzc0FuZEV4cG9ydE1hY3JvfSBJbnNwZWN0b3Ik
e2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yOjpJ
bnNwZWN0b3JTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyPiBj
cmVhdGUoSW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciosIEluc3BlY3RvciR7
ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQg
ZGlzcGF0Y2gobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBQYXNzUmVmUHRyPElu
c3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBtZXNzYWdlKSBvdmVycmlkZTsKKyR7Y29tbWFuZERl
Y2xhcmF0aW9uc30KK3ByaXZhdGU6CisgICAgSW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmRE
aXNwYXRjaGVyKEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqLCBJbnNwZWN0
b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7CisgICAgSW5zcGVjdG9y
JHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogbV9hZ2VudDsKK307IiIiKQor
CisgICAgRGlzcGF0Y2hIZWFkZXJBc3luY0NvbW1hbmREZWNsYXJhdGlvbiA9ICgKKyAgICAiIiIg
ICAgY2xhc3MgJHtjYWxsYmFja05hbWV9IDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZSB7CisgICAgcHVibGljOgorICAgICAgICAke2Nh
bGxiYWNrTmFtZX0oUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyPiwgaW50IGlkKTsKKyAgICAgICAgdm9pZCBzZW5kU3VjY2Vzcygke291dFBhcmFtZXRlcnN9
KTsKKyAgICB9OworICAgIHZpcnR1YWwgdm9pZCAke2NvbW1hbmROYW1lfSgke2luUGFyYW1ldGVy
c30pID0gMDsiIiIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvY29kZWdlbi9tb2RlbHMucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvY29kZWdlbi9tb2RlbHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODc1M2Q3MDNjMmM4MTEw
MTNhMWRmMGMzNTJjOTllZTE2ZWVhNWM4OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL21vZGVscy5weQpAQCAtMCwwICsx
LDY2NSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoYykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisjIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyMgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgbG9nZ2luZworCisjIFVzZSBhIGds
b2JhbCBsb2dnZXIsIHdoaWNoIG5vcm1hbGx5IG9ubHkgbG9ncyBlcnJvcnMuCisjIEl0IGNhbiBi
ZSBjb25maWd1cmVkIHRvIGxvZyBkZWJ1ZyBtZXNzYWdlcyBmcm9tIHRoZSBDTEkuCitsb2dnaW5n
LmJhc2ljQ29uZmlnKGZvcm1hdD0nJShsZXZlbG5hbWUpczogJShtZXNzYWdlKXMnLCBsZXZlbD1s
b2dnaW5nLkVSUk9SKQorbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2JhbCcpCisKKworX0ZS
QU1FV09SS19DT05GSUdfTUFQID0geworICAgICJHbG9iYWwiOiB7CisgICAgICAgICJwcmVmaXgi
OiAiIiwKKyAgICB9LAorCisgICAgIldURiI6IHsKKyAgICAgICAgInByZWZpeCI6ICJXVEYiLAor
ICAgIH0sCisgICAgIkphdmFTY3JpcHRDb3JlIjogeworICAgICAgICAicHJlZml4IjogIkpTIiwK
KyAgICAgICAgImV4cG9ydF9tYWNybyI6ICJKU19FWFBPUlRfUFJJVkFURSIKKyAgICB9LAorICAg
ICJXZWJDb3JlIjogeworICAgICAgICAicHJlZml4IjogIldlYiIsCisgICAgfSwKKyAgICAjIFVz
ZWQgZm9yIGNvZGUgZ2VuZXJhdG9yIHRlc3RzLgorICAgICJUZXN0IjogeworICAgICAgICAicHJl
Zml4IjogIlRlc3QiLAorICAgIH0KK30KKworY2xhc3MgUGFyc2VFeGNlcHRpb24oRXhjZXB0aW9u
KToKKyAgICBwYXNzCisKKworY2xhc3MgVHlwZWNoZWNrRXhjZXB0aW9uKEV4Y2VwdGlvbik6Cisg
ICAgcGFzcworCisKK2NsYXNzIEZyYW1ld29yazoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbmFt
ZSk6CisgICAgICAgIHNlbGYuX3NldHRpbmdzID0gX0ZSQU1FV09SS19DT05GSUdfTUFQW25hbWVd
CisgICAgICAgIHNlbGYubmFtZSA9IG5hbWUKKworICAgIGRlZiBzZXR0aW5nKHNlbGYsIGtleSwg
ZGVmYXVsdD0nJyk6CisgICAgICAgIHJldHVybiBzZWxmLl9zZXR0aW5ncy5nZXQoa2V5LCBkZWZh
dWx0KQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBmcm9tU3RyaW5nKGZyYW1ld29ya1N0
cmluZyk6CisgICAgICAgIGlmIGZyYW1ld29ya1N0cmluZyA9PSAiR2xvYmFsIjoKKyAgICAgICAg
ICAgIHJldHVybiBGcmFtZXdvcmtzLkdsb2JhbAorCisgICAgICAgIGlmIGZyYW1ld29ya1N0cmlu
ZyA9PSAiV1RGIjoKKyAgICAgICAgICAgIHJldHVybiBGcmFtZXdvcmtzLldURgorCisgICAgICAg
IGlmIGZyYW1ld29ya1N0cmluZyA9PSAiSmF2YVNjcmlwdENvcmUiOgorICAgICAgICAgICAgcmV0
dXJuIEZyYW1ld29ya3MuSmF2YVNjcmlwdENvcmUKKworICAgICAgICBpZiBmcmFtZXdvcmtTdHJp
bmcgPT0gIldlYkNvcmUiOgorICAgICAgICAgICAgcmV0dXJuIEZyYW1ld29ya3MuV2ViQ29yZQor
CisgICAgICAgIGlmIGZyYW1ld29ya1N0cmluZyA9PSAiVGVzdCI6CisgICAgICAgICAgICByZXR1
cm4gRnJhbWV3b3Jrcy5UZXN0CisKKyAgICAgICAgcmFpc2UgUGFyc2VFeGNlcHRpb24oIlVua25v
d24gZnJhbWV3b3JrOiAlcyIgJSBmcmFtZXdvcmtTdHJpbmcpCisKKworY2xhc3MgRnJhbWV3b3Jr
czoKKyAgICBHbG9iYWwgPSBGcmFtZXdvcmsoIkdsb2JhbCIpCisgICAgV1RGID0gRnJhbWV3b3Jr
KCJXVEYiKQorICAgIEphdmFTY3JpcHRDb3JlID0gRnJhbWV3b3JrKCJKYXZhU2NyaXB0Q29yZSIp
CisgICAgV2ViQ29yZSA9IEZyYW1ld29yaygiV2ViQ29yZSIpCisgICAgVGVzdCA9IEZyYW1ld29y
aygiVGVzdCIpCisKKworY2xhc3MgVHlwZU1vZGU6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5h
bWUpOgorICAgICAgICBzZWxmLl9uYW1lID0gbmFtZQorCisgICAgQHN0YXRpY21ldGhvZAorICAg
IGRlZiBmcm9tU3RyaW5nKG1vZGVTdHJpbmcpOgorICAgICAgICBtb2RlU3RyaW5nID0gbW9kZVN0
cmluZy51cHBlcigpCisgICAgICAgIGlmIG1vZGVTdHJpbmcgPT0gJ1NDQUxBUic6CisgICAgICAg
ICAgICByZXR1cm4gVHlwZU1vZGVzLlNDQUxBUgorICAgICAgICBpZiBtb2RlU3RyaW5nID09ICdI
RUFWWV9TQ0FMQVInOgorICAgICAgICAgICAgcmV0dXJuIFR5cGVNb2Rlcy5IRUFWWV9TQ0FMQVIK
KyAgICAgICAgaWYgbW9kZVN0cmluZyA9PSAnVU5JUVVFJzoKKyAgICAgICAgICAgIHJldHVybiBU
eXBlTW9kZXMuVU5JUVVFCisgICAgICAgIGlmIG1vZGVTdHJpbmcgPT0gJ1JFRkNPVU5URUQnOgor
ICAgICAgICAgICAgcmV0dXJuIFR5cGVNb2Rlcy5SRUZDT1VOVEVECisgICAgICAgIGlmIG1vZGVT
dHJpbmcgPT0gJ1ZFQ1RPUic6CisgICAgICAgICAgICByZXR1cm4gVHlwZU1vZGVzLlZFQ1RPUgor
CisgICAgICAgIHJhaXNlIFBhcnNlRXhjZXB0aW9uKCJVbmtub3duIHR5cGUgbW9kZTogIiArIG1v
ZGVTdHJpbmcpCisKKworY2xhc3MgVHlwZU1vZGVzOgorICAgICMgQ29weSBmb3IgYXNzaWdubWVu
dCBhbmQgZm9yIGdldHRlcgorICAgIFNDQUxBUiA9IFR5cGVNb2RlKCJTQ0FMQVIiKQorICAgICMg
Q29weSBmb3IgYXNzaWdubWVudCwgcGFzcyBieSByZWZlcmVuY2UgZm9yIGdldHRlcgorICAgIEhF
QVZZX1NDQUxBUiA9IFR5cGVNb2RlKCJIRUFWWV9TQ0FMQVIiKQorICAgICMgTW92ZSBmb3IgYXNz
aWdubWVudCwgcGFzcyBieSByZWZlcmVuY2UgZm9yIGdldHRlcgorICAgIFVOSVFVRSA9IFR5cGVN
b2RlKCJVTklRVUUiKQorICAgICMgQ29weSBhIFJlZlB0ciBmb3IgYXNzaWdubWVudCBhbmQgZ2V0
dGVyCisgICAgUkVGQ09VTlRFRCA9IFR5cGVNb2RlKCJSRUZDT1VOVEVEIikKKyAgICAjIE1vdmUg
b3BlcmF0b3IgZm9yIGFzc2lnbm1lbnQsIHBhc3MgYnkgcmVmZXJlbmNlIGZvciBnZXR0ZXIKKyAg
ICBWRUNUT1IgPSBUeXBlTW9kZSgiVkVDVE9SIikKKworCitjbGFzcyBUeXBlUmVmZXJlbmNlOgor
ICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0eXBlX2tpbmQsIHJlZmVyZW5jZWRfdHlwZV9uYW1lLCBl
bnVtX3ZhbHVlcywgYXJyYXlfaXRlbXMpOgorICAgICAgICBzZWxmLnR5cGVfa2luZCA9IHR5cGVf
a2luZAorICAgICAgICBzZWxmLnJlZmVyZW5jZWRfdHlwZV9uYW1lID0gcmVmZXJlbmNlZF90eXBl
X25hbWUKKyAgICAgICAgc2VsZi5lbnVtX3ZhbHVlcyA9IGVudW1fdmFsdWVzCisgICAgICAgIGlm
IGFycmF5X2l0ZW1zIGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLmFycmF5X3R5cGVfcmVmID0g
Tm9uZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hcnJheV90eXBlX3JlZiA9IFR5
cGVSZWZlcmVuY2UoYXJyYXlfaXRlbXMuZ2V0KCd0eXBlJyksIGFycmF5X2l0ZW1zLmdldCgnJHJl
ZicpLCBhcnJheV9pdGVtcy5nZXQoJ2VudW0nLCBbXSksIGFycmF5X2l0ZW1zLmdldCgnaXRlbXMn
KSkKKworICAgICAgICBpZiB0eXBlX2tpbmQgaXMgbm90IE5vbmUgYW5kIHJlZmVyZW5jZWRfdHlw
ZV9uYW1lIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmFpc2UgUGFyc2VFeGNlcHRpb24oIlR5
cGUgcmVmZXJlbmNlIGNhbm5vdCBoYXZlIGJvdGggJ3R5cGUnIGFuZCAnJHJlZicga2V5cy4iKQor
CisgICAgICAgIGlmIHR5cGVfa2luZCA9PSAiYXJyYXkiIGFuZCBhcnJheV9pdGVtcyBpcyBOb25l
OgorICAgICAgICAgICAgcmFpc2UgUGFyc2VFeGNlcHRpb24oIlR5cGUgcmVmZXJlbmNlIHdpdGgg
dHlwZSAnYXJyYXknIG11c3QgaGF2ZSBrZXkgJ2l0ZW1zJyB0byBkZWZpbmUgYXJyYXkgZWxlbWVu
dCB0eXBlLiIpCisKKyAgICBkZWYgcmVmZXJlbmNlZF9uYW1lKHNlbGYpOgorICAgICAgICBpZiBz
ZWxmLnJlZmVyZW5jZWRfdHlwZV9uYW1lIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmV0dXJu
IHNlbGYucmVmZXJlbmNlZF90eXBlX25hbWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJl
dHVybiBzZWxmLnR5cGVfa2luZCAgIyBpbnRlZ2VyLCBzdHJpbmcsIG51bWJlciwgYm9vbGVhbiwg
ZW51bSwgb2JqZWN0LCBhcnJheQorCisKK2NsYXNzIFR5cGU6CisgICAgZGVmIF9faW5pdF9fKHNl
bGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAg
ICAgcmV0dXJuIHNlbGYucXVhbGlmaWVkX25hbWUoKSA9PSBvdGhlci5xdWFsaWZpZWRfbmFtZSgp
IGFuZCBzZWxmLnR5cGVfbW9kZSgpID09IG90aGVyLnR5cGVfbW9kZSgpCisKKyAgICBkZWYgX19o
YXNoX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnF1YWxpZmllZF9uYW1lKCkuX19oYXNo
X18oKQorCisgICAgIyBUaGVzZSBtZXRob2RzIHNob3VsZCBiZSBvdmVycmlkZGVuIGJ5IHN1YmNs
YXNzZXMuCisgICAgZGVmIGlzX2VudW0oc2VsZik6CisgICAgICAgIHJldHVybiBGYWxzZQorCisg
ICAgZGVmIHR5cGVfZG9tYWluKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgdHlwZV9t
b2RlKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgcXVhbGlmaWVkX25hbWUoc2VsZik6
CisgICAgICAgIHBhc3MKKworICAgICMgVGhpcyBpcyB1c2VkIHRvIHJlc29sdmUgbmVzdGVkIHR5
cGVzIGFmdGVyIGluc3RhbmNlcyBhcmUgY3JlYXRlZC4KKyAgICBkZWYgcmVzb2x2ZV90eXBlX3Jl
ZmVyZW5jZXMoc2VsZiwgcHJvdG9jb2wpOgorICAgICAgICBwYXNzCisKKyAgICAjIE1ldGhvZHMg
YmVsb3cgYXJlIGdlbmVyYXRvci1yZWxhdGVkLgorICAgIGRlZiBpbl9wYXJhbWV0ZXJfdHlwZShz
ZWxmLCBpc19vcHRpb25hbCk6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBvdXRfcGFyYW1ldGVy
X3R5cGUoc2VsZiwgaXNfb3B0aW9uYWwpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgdHlwZV9i
dWlsZGVyX3R5cGUoc2VsZik6CisgICAgICAgIHBhc3MKKworCitjbGFzcyBPYmplY3RUeXBlKFR5
cGUpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCBkb21haW4sIG1lbWJlcnMpOgorICAg
ICAgICBzZWxmLl9uYW1lID0gbmFtZQorICAgICAgICBzZWxmLl9kb21haW4gPSBkb21haW4KKyAg
ICAgICAgc2VsZi5fbWVtYmVycyA9IG1lbWJlcnMKKworICAgIGRlZiB0eXBlX2RvbWFpbihzZWxm
KToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2RvbWFpbgorCisgICAgZGVmIHR5cGVfbW9kZShzZWxm
KToKKyAgICAgICAgcmV0dXJuIFR5cGVNb2Rlcy5SRUZDT1VOVEVECisKKyAgICBkZWYgcXVhbGlm
aWVkX25hbWUoc2VsZik6CisgICAgICAgIHJldHVybiAgIi4iLmpvaW4oW3NlbGYudHlwZV9kb21h
aW4oKS5kb21haW5fbmFtZSwgc2VsZi5fbmFtZV0pCisKKyAgICBkZWYgcmVzb2x2ZV90eXBlX3Jl
ZmVyZW5jZXMoc2VsZiwgcHJvdG9jb2wpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgaW5fcGFy
YW1ldGVyX3R5cGUoc2VsZiwgaXNfb3B0aW9uYWwpOgorICAgICAgICBpZiBpc19vcHRpb25hbDoK
KyAgICAgICAgICAgIHJldHVybiAiY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2Jq
ZWN0PioiCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gImNvbnN0IFJlZlB0cjxJ
bnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4mIgorCisgICAgZGVmIG91dF9wYXJhbWV0ZXJfdHlw
ZShzZWxmLCBpc19vcHRpb25hbCk6CisgICAgICAgIHJldHVybiAiUmVmUHRyPCVzPiYiICUgc2Vs
Zi50eXBlX2J1aWxkZXJfdHlwZSgpCisKKyAgICBkZWYgdHlwZV9idWlsZGVyX3R5cGUoc2VsZik6
CisgICAgICAgIHJldHVybiAiSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6JXM6OiVzIiAlIChzZWxm
LnR5cGVfZG9tYWluKCkuZG9tYWluX25hbWUsIHNlbGYuX25hbWUpCisKKworY2xhc3MgUHJpbWl0
aXZlVHlwZShUeXBlKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwgbW9kZSk6CisgICAg
ICAgIHNlbGYuX25hbWUgPSBuYW1lCisgICAgICAgIHNlbGYuX21vZGUgPSBtb2RlCisKKyAgICBk
ZWYgdHlwZV9kb21haW4oc2VsZik6CisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgdHlw
ZV9tb2RlKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fbW9kZQorCisgICAgZGVmIHF1YWxp
ZmllZF9uYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fbmFtZQorCisgICAgZGVmIGlu
X3BhcmFtZXRlcl90eXBlKHNlbGYsIGlzX29wdGlvbmFsKToKKyAgICAgICAgaWYgaXNfb3B0aW9u
YWw6CisgICAgICAgICAgICByZXR1cm4gImNvbnN0ICVzKiIgJSBzZWxmLmNwcF9wcmltaXRpdmVf
bmFtZSgpCisgICAgICAgIGVsaWYgc2VsZi50eXBlX21vZGUoKSBpcyBUeXBlTW9kZXMuSEVBVllf
U0NBTEFSOgorICAgICAgICAgICAgcmV0dXJuICJjb25zdCAlcyYiICUgc2VsZi5jcHBfcHJpbWl0
aXZlX25hbWUoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuY3BwX3By
aW1pdGl2ZV9uYW1lKCkKKworICAgIGRlZiBvdXRfcGFyYW1ldGVyX3R5cGUoc2VsZiwgaXNfb3B0
aW9uYWwpOgorICAgICAgICBpZiBpc19vcHRpb25hbDoKKyAgICAgICAgICAgIHJldHVybiAiSW5z
cGVjdG9yOjpUeXBlQnVpbGRlcjo6T3B0T3V0cHV0PCVzPioiICUgc2VsZi5jcHBfcHJpbWl0aXZl
X25hbWUoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuICIlcyoiICUgc2VsZi5j
cHBfcHJpbWl0aXZlX25hbWUoKQorCisgICAgZGVmIHR5cGVfYnVpbGRlcl90eXBlKHNlbGYpOgor
ICAgICAgICByZXR1cm4gc2VsZi5jcHBfcHJpbWl0aXZlX25hbWUoKQorCisgICAgZGVmIGNwcF9w
cmltaXRpdmVfbmFtZShzZWxmKToKKyAgICAgICAgbWFwcGluZyA9IHsKKyAgICAgICAgICAgICdi
b29sZWFuJzogJ2Jvb2wnLAorICAgICAgICAgICAgJ2ludGVnZXInOiAnaW50JywKKyAgICAgICAg
ICAgICdudW1iZXInOiAnZG91YmxlJywKKyAgICAgICAgICAgICdzdHJpbmcnOiAnU3RyaW5nJywK
KyAgICAgICAgICAgICdvYmplY3QnOiAnSW5zcGVjdG9yT2JqZWN0JywKKyAgICAgICAgICAgICdh
bnknOiAnSW5zcGVjdG9yT2JqZWN0JworICAgICAgICB9CisgICAgICAgIHJldHVybiBtYXBwaW5n
W3NlbGYuX25hbWVdCisKKworY2xhc3MgQWxpYXNlZFR5cGUoVHlwZSk6CisgICAgZGVmIF9faW5p
dF9fKHNlbGYsIG5hbWUsIGRvbWFpbiwgYWxpYXNlZF90eXBlX3JlZik6CisgICAgICAgIHNlbGYu
X25hbWUgPSBuYW1lCisgICAgICAgIHNlbGYuX2RvbWFpbiA9IGRvbWFpbgorICAgICAgICBzZWxm
Ll9hbGlhc2VkX3R5cGVfcmVmID0gYWxpYXNlZF90eXBlX3JlZgorICAgICAgICBzZWxmLl9hbGlh
c2VkX3R5cGUgPSBOb25lCisKKyAgICBkZWYgdHlwZV9kb21haW4oc2VsZik6CisgICAgICAgIHJl
dHVybiBzZWxmLl9kb21haW4KKworICAgIGRlZiB0eXBlX21vZGUoc2VsZik6CisgICAgICAgIHJl
dHVybiBzZWxmLl9hbGlhc2VkX3R5cGUudHlwZV9tb2RlKCkKKworICAgIGRlZiBxdWFsaWZpZWRf
bmFtZShzZWxmKToKKyAgICAgICAgcmV0dXJuICAiLiIuam9pbihbc2VsZi50eXBlX2RvbWFpbigp
LmRvbWFpbl9uYW1lLCBzZWxmLl9uYW1lXSkKKworICAgIGRlZiByZXNvbHZlX3R5cGVfcmVmZXJl
bmNlcyhzZWxmLCBwcm90b2NvbCk6CisgICAgICAgIGlmIHNlbGYuX2FsaWFzZWRfdHlwZSBpcyBu
b3QgTm9uZToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHNlbGYuX2FsaWFzZWRfdHlw
ZSA9IHByb3RvY29sLmxvb2t1cF90eXBlX3JlZmVyZW5jZShzZWxmLl9hbGlhc2VkX3R5cGVfcmVm
LCBzZWxmLnR5cGVfZG9tYWluKCkpCisgICAgICAgIGxvZy5kZWJ1ZygiPCBSZXNvbHZlZCB0eXBl
IHJlZmVyZW5jZSBmb3IgYWxpYXNlZCB0eXBlIGluICVzOiAlcyIgJSAoc2VsZi5xdWFsaWZpZWRf
bmFtZSgpLCBzZWxmLl9hbGlhc2VkX3R5cGUucXVhbGlmaWVkX25hbWUoKSkpCisKKyAgICBkZWYg
aW5fcGFyYW1ldGVyX3R5cGUoc2VsZiwgaXNfb3B0aW9uYWwpOgorICAgICAgICByZXR1cm4gc2Vs
Zi5fYWxpYXNlZF90eXBlLmluX3BhcmFtZXRlcl90eXBlKGlzX29wdGlvbmFsKQorCisgICAgZGVm
IG91dF9wYXJhbWV0ZXJfdHlwZShzZWxmLCBpc19vcHRpb25hbCk6CisgICAgICAgIHJldHVybiAi
JXMqIiAlIHNlbGYudHlwZV9idWlsZGVyX3R5cGUoKQorCisgICAgZGVmIHR5cGVfYnVpbGRlcl90
eXBlKHNlbGYpOgorICAgICAgICByZXR1cm4gIkluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OiVzOjol
cyIgJSAoc2VsZi5fZG9tYWluLmRvbWFpbl9uYW1lLCBzZWxmLl9uYW1lKQorCisKK2NsYXNzIEVu
dW1UeXBlKFR5cGUpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCBkb21haW4sIHZhbHVl
cywgcHJpbWl0aXZlX3R5cGVfcmVmKToKKyAgICAgICAgc2VsZi5fbmFtZSA9IG5hbWUKKyAgICAg
ICAgc2VsZi5fZG9tYWluID0gZG9tYWluCisgICAgICAgIHNlbGYuX3ZhbHVlcyA9IHZhbHVlcwor
ICAgICAgICBzZWxmLl9wcmltaXRpdmVfdHlwZV9yZWYgPSBwcmltaXRpdmVfdHlwZV9yZWYKKyAg
ICAgICAgc2VsZi5fcHJpbWl0aXZlX3R5cGUgPSBOb25lCisKKyAgICBkZWYgaXNfZW51bShzZWxm
KToKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiB0eXBlX2RvbWFpbihzZWxmKToKKyAg
ICAgICAgcmV0dXJuIHNlbGYuX2RvbWFpbgorCisgICAgZGVmIHR5cGVfbW9kZShzZWxmKToKKyAg
ICAgICAgcmV0dXJuIHNlbGYuX3ByaW1pdGl2ZV90eXBlLnR5cGVfbW9kZSgpCisKKyAgICBkZWYg
ZW51bV92YWx1ZXMoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl92YWx1ZXMKKworICAgIGRl
ZiBxdWFsaWZpZWRfbmFtZShzZWxmKToKKyAgICAgICAgcmV0dXJuICAiLiIuam9pbihbc2VsZi50
eXBlX2RvbWFpbigpLmRvbWFpbl9uYW1lLCBzZWxmLl9uYW1lXSkKKworICAgIGRlZiByZXNvbHZl
X3R5cGVfcmVmZXJlbmNlcyhzZWxmLCBwcm90b2NvbCk6CisgICAgICAgIGlmIHNlbGYuX3ByaW1p
dGl2ZV90eXBlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgc2Vs
Zi5fcHJpbWl0aXZlX3R5cGUgPSBwcm90b2NvbC5sb29rdXBfdHlwZV9yZWZlcmVuY2Uoc2VsZi5f
cHJpbWl0aXZlX3R5cGVfcmVmLCBEb21haW5zLkdMT0JBTCkKKyAgICAgICAgbG9nLmRlYnVnKCI8
IFJlc29sdmVkIHR5cGUgcmVmZXJlbmNlIGZvciBlbnVtIHR5cGUgaW4gJXM6ICVzIiAlIChzZWxm
LnF1YWxpZmllZF9uYW1lKCksIHNlbGYuX3ByaW1pdGl2ZV90eXBlLnF1YWxpZmllZF9uYW1lKCkp
KQorICAgICAgICBsb2cuZGVidWcoIjw8IGVudW0gdmFsdWVzOiAlcyIgJSBzZWxmLl92YWx1ZXMp
CisKKyAgICBkZWYgaW5fcGFyYW1ldGVyX3R5cGUoc2VsZiwgaXNfb3B0aW9uYWwpOgorICAgICAg
ICByZXR1cm4gc2VsZi5fcHJpbWl0aXZlX3R5cGUuaW5fcGFyYW1ldGVyX3R5cGUoaXNfb3B0aW9u
YWwpCisKKyAgICBkZWYgb3V0X3BhcmFtZXRlcl90eXBlKHNlbGYsIGlzX29wdGlvbmFsKToKKyAg
ICAgICAgcmV0dXJuIHNlbGYudHlwZV9idWlsZGVyX3R5cGUoKSArICIqIgorCisgICAgZGVmIHR5
cGVfYnVpbGRlcl90eXBlKHNlbGYpOgorICAgICAgICByZXR1cm4gIkluc3BlY3Rvcjo6VHlwZUJ1
aWxkZXI6OiVzOjolczo6RW51bSIgJSAoc2VsZi5fZG9tYWluLmRvbWFpbl9uYW1lLCBzZWxmLl9u
YW1lKQorCisKK2NsYXNzIFZlY3RvclR5cGUoVHlwZSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYs
IGVsZW1lbnRfdHlwZV9yZWYsIGRvbWFpbik6CisgICAgICAgIHNlbGYuX2RvbWFpbiA9IGRvbWFp
bgorICAgICAgICBzZWxmLl9lbGVtZW50X3R5cGVfcmVmID0gZWxlbWVudF90eXBlX3JlZgorICAg
ICAgICBzZWxmLl9lbGVtZW50X3R5cGUgPSBOb25lCisKKyAgICBkZWYgdHlwZV9kb21haW4oc2Vs
Zik6CisgICAgICAgIHJldHVybiBzZWxmLl9kb21haW4KKworICAgIGRlZiB0eXBlX21vZGUoc2Vs
Zik6CisgICAgICAgIHJldHVybiBUeXBlTW9kZXMuVkVDVE9SCisKKyAgICBkZWYgcXVhbGlmaWVk
X25hbWUoc2VsZik6CisgICAgICAgIHJldHVybiAgIi4iLmpvaW4oWyJ2ZWN0b3IiLCBzZWxmLl9l
bGVtZW50X3R5cGUucXVhbGlmaWVkX25hbWUoKV0pCisKKyAgICBkZWYgcmVzb2x2ZV90eXBlX3Jl
ZmVyZW5jZXMoc2VsZiwgcHJvdG9jb2wpOgorICAgICAgICBpZiBzZWxmLl9lbGVtZW50X3R5cGUg
aXMgbm90IE5vbmU6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBzZWxmLl9lbGVtZW50
X3R5cGUgPSBwcm90b2NvbC5sb29rdXBfdHlwZV9yZWZlcmVuY2Uoc2VsZi5fZWxlbWVudF90eXBl
X3JlZiwgc2VsZi50eXBlX2RvbWFpbigpKQorICAgICAgICBsb2cuZGVidWcoIjwgUmVzb2x2ZWQg
dHlwZSByZWZlcmVuY2UgZm9yIGVsZW1lbnQgdHlwZSBpbiAlczogJXMiICUgKHNlbGYucXVhbGlm
aWVkX25hbWUoKSwgc2VsZi5fZWxlbWVudF90eXBlLnF1YWxpZmllZF9uYW1lKCkpKQorCisgICAg
ZGVmIGluX3BhcmFtZXRlcl90eXBlKHNlbGYsIGlzX29wdGlvbmFsKToKKyAgICAgICAgaWYgaXNf
b3B0aW9uYWw6CisgICAgICAgICAgICByZXR1cm4gImNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Oklu
c3BlY3RvckFycmF5PioiCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gImNvbnN0
IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5PiYiCisKKyAgICBkZWYgb3V0X3BhcmFt
ZXRlcl90eXBlKHNlbGYsIGlzX29wdGlvbmFsKToKKyAgICAgICAgcmV0dXJuICJSZWZQdHI8JXM+
JiIgJSBzZWxmLnR5cGVfYnVpbGRlcl90eXBlKCkKKworICAgIGRlZiB0eXBlX2J1aWxkZXJfdHlw
ZShzZWxmKToKKyAgICAgICAgcmV0dXJuICJJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheTwl
cz4iICUgc2VsZi5fZWxlbWVudF90eXBlLnR5cGVfYnVpbGRlcl90eXBlKCkKKworCitkZWYgY2hl
Y2tfZm9yX3JlcXVpcmVkX3Byb3BlcnRpZXMocHJvcHMsIG9iaiwgd2hhdCk6CisgICAgZm9yIHBy
b3AgaW4gcHJvcHM6CisgICAgICAgIGlmIHByb3Agbm90IGluIG9iajoKKyAgICAgICAgICAgIHJh
aXNlIFBhcnNlRXhjZXB0aW9uKCJXaGVuIHBhcnNpbmcgJXMsIHJlcXVpcmVkIHByb3BlcnR5IG1p
c3Npbmc6ICVzIiAlICh3aGF0LCBwcm9wKSkKKworCitjbGFzcyBQcm90b2NvbDoKKyAgICBkZWYg
X19pbml0X18oc2VsZiwgZnJhbWV3b3JrX25hbWUpOgorICAgICAgICBzZWxmLmRvbWFpbnMgPSBb
XQorICAgICAgICBzZWxmLnR5cGVzX2J5X25hbWUgPSB7fQorICAgICAgICBzZWxmLmZyYW1ld29y
ayA9IEZyYW1ld29yay5mcm9tU3RyaW5nKGZyYW1ld29ya19uYW1lKQorCisgICAgZGVmIHBhcnNl
X3NwZWNpZmljYXRpb24oc2VsZiwganNvbiwgaXNTdXBwbGVtZW50YWwpOgorICAgICAgICBsb2cu
ZGVidWcoInBhcnNlIHRvcGxldmVsIikKKworICAgICAgICBpZiBpc2luc3RhbmNlKGpzb24sIGRp
Y3QpIGFuZCAnZG9tYWlucycgaW4ganNvbjoKKyAgICAgICAgICAgIGpzb24gPSBqc29uWydkb21h
aW5zJ10KKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoanNvbiwgbGlzdCk6CisgICAgICAgICAg
ICBqc29uID0gW2pzb25dCisKKyAgICAgICAgZm9yIGRvbWFpbiBpbiBqc29uOgorICAgICAgICAg
ICAgc2VsZi5wYXJzZV9kb21haW4oZG9tYWluLCBpc1N1cHBsZW1lbnRhbCkKKworICAgIGRlZiBw
YXJzZV9kb21haW4oc2VsZiwganNvbiwgaXNTdXBwbGVtZW50YWwpOgorICAgICAgICBjaGVja19m
b3JfcmVxdWlyZWRfcHJvcGVydGllcyhbJ2RvbWFpbiddLCBqc29uLCAiZG9tYWluIikKKyAgICAg
ICAgbG9nLmRlYnVnKCJwYXJzZSBkb21haW4gIiArIGpzb25bJ2RvbWFpbiddKQorCisgICAgICAg
IHR5cGVzID0gW10KKyAgICAgICAgY29tbWFuZHMgPSBbXQorICAgICAgICBldmVudHMgPSBbXQor
CisgICAgICAgIGlmICd0eXBlcycgaW4ganNvbjoKKyAgICAgICAgICAgIGlmIG5vdCBpc2luc3Rh
bmNlKGpzb25bJ3R5cGVzJ10sIGxpc3QpOgorICAgICAgICAgICAgICAgIHJhaXNlIFBhcnNlRXhj
ZXB0aW9uKCJNYWxmb3JtZWQgc3BlY2lmaWNhdGlvbjogdHlwZXMgaXMgbm90IGFuIGFycmF5IikK
KyAgICAgICAgICAgIHR5cGVzLmV4dGVuZChbc2VsZi5wYXJzZV90eXBlX2RlY2xhcmF0aW9uKF9k
ZWNsYXJhdGlvbikgZm9yIF9kZWNsYXJhdGlvbiBpbiBqc29uWyd0eXBlcyddXSkKKworICAgICAg
ICBpZiAnY29tbWFuZHMnIGluIGpzb246CisgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShq
c29uWydjb21tYW5kcyddLCBsaXN0KToKKyAgICAgICAgICAgICAgICByYWlzZSBQYXJzZUV4Y2Vw
dGlvbigiTWFsZm9ybWVkIHNwZWNpZmljYXRpb246IGNvbW1hbmRzIGlzIG5vdCBhbiBhcnJheSIp
CisgICAgICAgICAgICBjb21tYW5kcy5leHRlbmQoW3NlbGYucGFyc2VfY29tbWFuZChfY29tbWFu
ZCkgZm9yIF9jb21tYW5kIGluIGpzb25bJ2NvbW1hbmRzJ11dKQorCisgICAgICAgIGlmICdldmVu
dHMnIGluIGpzb246CisgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShqc29uWydldmVudHMn
XSwgbGlzdCk6CisgICAgICAgICAgICAgICAgcmFpc2UgUGFyc2VFeGNlcHRpb24oIk1hbGZvcm1l
ZCBzcGVjaWZpY2F0aW9uOiBldmVudHMgaXMgbm90IGFuIGFycmF5IikKKyAgICAgICAgICAgIGV2
ZW50cy5leHRlbmQoW3NlbGYucGFyc2VfZXZlbnQoX2V2ZW50KSBmb3IgX2V2ZW50IGluIGpzb25b
J2V2ZW50cyddXSkKKworICAgICAgICBzZWxmLmRvbWFpbnMuYXBwZW5kKERvbWFpbihqc29uWydk
b21haW4nXSwganNvbi5nZXQoJ2Rlc2NyaXB0aW9uJywgIiIpLCBpc1N1cHBsZW1lbnRhbCwgdHlw
ZXMsIGNvbW1hbmRzLCBldmVudHMpKQorCisgICAgZGVmIHBhcnNlX3R5cGVfZGVjbGFyYXRpb24o
c2VsZiwganNvbik6CisgICAgICAgIGNoZWNrX2Zvcl9yZXF1aXJlZF9wcm9wZXJ0aWVzKFsnaWQn
LCAndHlwZSddLCBqc29uLCAidHlwZSIpCisgICAgICAgIGxvZy5kZWJ1ZygicGFyc2UgdHlwZSAl
cyIgJSBqc29uWydpZCddKQorCisgICAgICAgIHR5cGVfbWVtYmVycyA9IFtdCisKKyAgICAgICAg
aWYgJ3Byb3BlcnRpZXMnIGluIGpzb246CisgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShq
c29uWydwcm9wZXJ0aWVzJ10sIGxpc3QpOgorICAgICAgICAgICAgICAgIHJhaXNlIFBhcnNlRXhj
ZXB0aW9uKCJNYWxmb3JtZWQgc3BlY2lmaWNhdGlvbjogcHJvcGVydGllcyBpcyBub3QgYW4gYXJy
YXkiKQorICAgICAgICAgICAgdHlwZV9tZW1iZXJzLmV4dGVuZChbc2VsZi5wYXJzZV90eXBlX21l
bWJlcihfbWVtYmVyKSBmb3IgX21lbWJlciBpbiBqc29uWydwcm9wZXJ0aWVzJ11dKQorCisgICAg
ICAgIHR5cGVfcmVmID0gVHlwZVJlZmVyZW5jZShqc29uWyd0eXBlJ10sIE5vbmUsIGpzb24uZ2V0
KCdlbnVtJywgW10pLCBqc29uLmdldCgnaXRlbXMnKSkKKyAgICAgICAgcmV0dXJuIFR5cGVEZWNs
YXJhdGlvbihqc29uWydpZCddLCB0eXBlX3JlZiwganNvbi5nZXQoImRlc2NyaXB0aW9uIiwgIiIp
LCB0eXBlX21lbWJlcnMpCisKKyAgICBkZWYgcGFyc2VfdHlwZV9tZW1iZXIoc2VsZiwganNvbik6
CisgICAgICAgIGNoZWNrX2Zvcl9yZXF1aXJlZF9wcm9wZXJ0aWVzKFsnbmFtZSddLCBqc29uLCAi
dHlwZSBtZW1iZXIiKQorICAgICAgICBsb2cuZGVidWcoInBhcnNlIHR5cGUgbWVtYmVyICVzIiAl
IGpzb25bJ25hbWUnXSkKKworICAgICAgICB0eXBlX3JlZiA9IFR5cGVSZWZlcmVuY2UoanNvbi5n
ZXQoJ3R5cGUnKSwganNvbi5nZXQoJyRyZWYnKSwganNvbi5nZXQoJ2VudW0nLCBbXSksIGpzb24u
Z2V0KCdpdGVtcycpKQorICAgICAgICByZXR1cm4gVHlwZU1lbWJlcihqc29uWyduYW1lJ10sIHR5
cGVfcmVmLCBqc29uLmdldCgnb3B0aW9uYWwnLCBGYWxzZSksIGpzb24uZ2V0KCdkZXNjcmlwdGlv
bicsICIiKSkKKworICAgIGRlZiBwYXJzZV9jb21tYW5kKHNlbGYsIGpzb24pOgorICAgICAgICBj
aGVja19mb3JfcmVxdWlyZWRfcHJvcGVydGllcyhbJ25hbWUnXSwganNvbiwgImNvbW1hbmQiKQor
ICAgICAgICBsb2cuZGVidWcoInBhcnNlIGNvbW1hbmQgJXMiICUganNvblsnbmFtZSddKQorCisg
ICAgICAgIGNhbGxfcGFyYW1ldGVycyA9IFtdCisgICAgICAgIHJldHVybl9wYXJhbWV0ZXJzID0g
W10KKworICAgICAgICBpZiAncGFyYW1ldGVycycgaW4ganNvbjoKKyAgICAgICAgICAgIGlmIG5v
dCBpc2luc3RhbmNlKGpzb25bJ3BhcmFtZXRlcnMnXSwgbGlzdCk6CisgICAgICAgICAgICAgICAg
cmFpc2UgUGFyc2VFeGNlcHRpb24oIk1hbGZvcm1lZCBzcGVjaWZpY2F0aW9uOiBwYXJhbWV0ZXJz
IGlzIG5vdCBhbiBhcnJheSIpCisgICAgICAgICAgICBjYWxsX3BhcmFtZXRlcnMuZXh0ZW5kKFtz
ZWxmLnBhcnNlX3BhcmFtZXRlcihfcGFyYW1ldGVyKSBmb3IgX3BhcmFtZXRlciBpbiBqc29uWydw
YXJhbWV0ZXJzJ11dKQorCisgICAgICAgIGlmICdyZXR1cm5zJyBpbiBqc29uOgorICAgICAgICAg
ICAgaWYgbm90IGlzaW5zdGFuY2UoanNvblsncmV0dXJucyddLCBsaXN0KToKKyAgICAgICAgICAg
ICAgICByYWlzZSBQYXJzZUV4Y2VwdGlvbigiTWFsZm9ybWVkIHNwZWNpZmljYXRpb246IHJldHVy
bnMgaXMgbm90IGFuIGFycmF5IikKKyAgICAgICAgICAgIHJldHVybl9wYXJhbWV0ZXJzLmV4dGVu
ZChbc2VsZi5wYXJzZV9wYXJhbWV0ZXIoX3BhcmFtZXRlcikgZm9yIF9wYXJhbWV0ZXIgaW4ganNv
blsncmV0dXJucyddXSkKKworICAgICAgICByZXR1cm4gQ29tbWFuZChqc29uWyduYW1lJ10sIGNh
bGxfcGFyYW1ldGVycywgcmV0dXJuX3BhcmFtZXRlcnMsIGpzb24uZ2V0KCdkZXNjcmlwdGlvbics
ICIiKSwganNvbi5nZXQoJ2FzeW5jJywgRmFsc2UpKQorCisgICAgZGVmIHBhcnNlX2V2ZW50KHNl
bGYsIGpzb24pOgorICAgICAgICBjaGVja19mb3JfcmVxdWlyZWRfcHJvcGVydGllcyhbJ25hbWUn
XSwganNvbiwgImV2ZW50IikKKyAgICAgICAgbG9nLmRlYnVnKCJwYXJzZSBldmVudCAlcyIgJSBq
c29uWyduYW1lJ10pCisKKyAgICAgICAgZXZlbnRfcGFyYW1ldGVycyA9IFtdCisKKyAgICAgICAg
aWYgJ3BhcmFtZXRlcnMnIGluIGpzb246CisgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShq
c29uWydwYXJhbWV0ZXJzJ10sIGxpc3QpOgorICAgICAgICAgICAgICAgIHJhaXNlIFBhcnNlRXhj
ZXB0aW9uKCJNYWxmb3JtZWQgc3BlY2lmaWNhdGlvbjogcGFyYW1ldGVycyBpcyBub3QgYW4gYXJy
YXkiKQorICAgICAgICAgICAgZXZlbnRfcGFyYW1ldGVycy5leHRlbmQoW3NlbGYucGFyc2VfcGFy
YW1ldGVyKF9wYXJhbWV0ZXIpIGZvciBfcGFyYW1ldGVyIGluIGpzb25bJ3BhcmFtZXRlcnMnXV0p
CisKKyAgICAgICAgcmV0dXJuIEV2ZW50KGpzb25bJ25hbWUnXSwgZXZlbnRfcGFyYW1ldGVycywg
anNvbi5nZXQoJ2Rlc2NyaXB0aW9uJywgIiIpKQorCisgICAgZGVmIHBhcnNlX3BhcmFtZXRlcihz
ZWxmLCBqc29uKToKKyAgICAgICAgY2hlY2tfZm9yX3JlcXVpcmVkX3Byb3BlcnRpZXMoWyduYW1l
J10sIGpzb24sICJwYXJhbWV0ZXIiKQorICAgICAgICBsb2cuZGVidWcoInBhcnNlIHBhcmFtZXRl
ciAlcyIgJSBqc29uWyduYW1lJ10pCisKKyAgICAgICAgdHlwZV9yZWYgPSBUeXBlUmVmZXJlbmNl
KGpzb24uZ2V0KCd0eXBlJyksIGpzb24uZ2V0KCckcmVmJyksIGpzb24uZ2V0KCdlbnVtJywgW10p
LCBqc29uLmdldCgnaXRlbXMnKSkKKyAgICAgICAgcmV0dXJuIFBhcmFtZXRlcihqc29uWyduYW1l
J10sIHR5cGVfcmVmLCBqc29uLmdldCgnb3B0aW9uYWwnLCBGYWxzZSksIGpzb24uZ2V0KCdkZXNj
cmlwdGlvbicsICIiKSkKKworICAgIGRlZiByZXNvbHZlX3R5cGVzKHNlbGYpOgorICAgICAgICBx
dWFsaWZpZWRfZGVjbGFyZWRfdHlwZV9uYW1lcyA9IHNldChbJ2Jvb2xlYW4nLCAnc3RyaW5nJywg
J2ludGVnZXInLCAnbnVtYmVyJywgJ2VudW0nLCAnYXJyYXknLCAnb2JqZWN0JywgJ2FueSddKQor
CisgICAgICAgIHNlbGYudHlwZXNfYnlfbmFtZVsnc3RyaW5nJ10gPSBQcmltaXRpdmVUeXBlKCdz
dHJpbmcnLCBUeXBlTW9kZXMuSEVBVllfU0NBTEFSKQorICAgICAgICBmb3IgX3ByaW1pdGl2ZV90
eXBlIGluIFsnYm9vbGVhbicsICdpbnRlZ2VyJywgJ251bWJlciddOgorICAgICAgICAgICAgc2Vs
Zi50eXBlc19ieV9uYW1lW19wcmltaXRpdmVfdHlwZV0gPSBQcmltaXRpdmVUeXBlKF9wcmltaXRp
dmVfdHlwZSwgVHlwZU1vZGVzLlNDQUxBUikKKyAgICAgICAgZm9yIF9vYmplY3RfdHlwZSBpbiBb
J2FueScsICdvYmplY3QnXToKKyAgICAgICAgICAgIHNlbGYudHlwZXNfYnlfbmFtZVtfb2JqZWN0
X3R5cGVdID0gUHJpbWl0aXZlVHlwZShfb2JqZWN0X3R5cGUsIFR5cGVNb2Rlcy5SRUZDT1VOVEVE
KQorCisgICAgICAgICMgR2F0aGVyIHF1YWxpZmllZCB0eXBlIG5hbWVzIGZyb20gdHlwZSBkZWNs
YXJhdGlvbnMgaW4gZWFjaCBkb21haW4uCisgICAgICAgIGZvciBfZG9tYWluIGluIHNlbGYuZG9t
YWluczoKKyAgICAgICAgICAgIGZvciBfZGVjbGFyYXRpb24gaW4gX2RvbWFpbi50eXBlX2RlY2xh
cmF0aW9uczoKKyAgICAgICAgICAgICAgICAjIEJhc2ljIHNhbml0eSBjaGVja2luZy4KKyAgICAg
ICAgICAgICAgICBpZiBfZGVjbGFyYXRpb24udHlwZV9yZWYucmVmZXJlbmNlZF90eXBlX25hbWUg
aXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVjaGVja0V4Y2VwdGlv
bigiVHlwZSBkZWNsYXJhdGlvbnMgbXVzdCBuYW1lIGEgYmFzZSB0eXBlLCBub3QgYSB0eXBlIHJl
ZmVyZW5jZS4iKQorCisgICAgICAgICAgICAgICAgIyBGaW5kIGR1cGxpY2F0ZSBxdWFsaWZpZWQg
dHlwZSBuYW1lcy4KKyAgICAgICAgICAgICAgICBxdWFsaWZpZWRfdHlwZV9uYW1lID0gIi4iLmpv
aW4oW19kb21haW4uZG9tYWluX25hbWUsIF9kZWNsYXJhdGlvbi50eXBlX25hbWVdKQorICAgICAg
ICAgICAgICAgIGlmIHF1YWxpZmllZF90eXBlX25hbWUgaW4gcXVhbGlmaWVkX2RlY2xhcmVkX3R5
cGVfbmFtZXM6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVjaGVja0V4Y2VwdGlvbigi
RHVwbGljYXRlIHR5cGUgZGVjbGFyYXRpb246ICVzIiAlIHF1YWxpZmllZF90eXBlX25hbWUpCisK
KyAgICAgICAgICAgICAgICBxdWFsaWZpZWRfZGVjbGFyZWRfdHlwZV9uYW1lcy5hZGQocXVhbGlm
aWVkX3R5cGVfbmFtZSkKKworICAgICAgICAgICAgICAgIHR5cGVfaW5zdGFuY2UgPSBOb25lCisK
KyAgICAgICAgICAgICAgICBraW5kID0gX2RlY2xhcmF0aW9uLnR5cGVfcmVmLnR5cGVfa2luZAor
ICAgICAgICAgICAgICAgIGlmIGxlbihfZGVjbGFyYXRpb24udHlwZV9yZWYuZW51bV92YWx1ZXMp
ID4gMDoKKyAgICAgICAgICAgICAgICAgICAgcHJpbWl0aXZlX3R5cGVfcmVmID0gVHlwZVJlZmVy
ZW5jZShfZGVjbGFyYXRpb24udHlwZV9yZWYudHlwZV9raW5kLCBOb25lLCBbXSwgTm9uZSkKKyAg
ICAgICAgICAgICAgICAgICAgdHlwZV9pbnN0YW5jZSA9IEVudW1UeXBlKF9kZWNsYXJhdGlvbi50
eXBlX25hbWUsIF9kb21haW4sIF9kZWNsYXJhdGlvbi50eXBlX3JlZi5lbnVtX3ZhbHVlcywgcHJp
bWl0aXZlX3R5cGVfcmVmKQorICAgICAgICAgICAgICAgIGVsaWYga2luZCA9PSAiYXJyYXkiOgor
ICAgICAgICAgICAgICAgICAgICB0eXBlX2luc3RhbmNlID0gVmVjdG9yVHlwZShfZGVjbGFyYXRp
b24udHlwZV9yZWYuYXJyYXlfdHlwZV9yZWYsIF9kb21haW4pCisgICAgICAgICAgICAgICAgZWxp
ZiBraW5kID09ICJvYmplY3QiOgorICAgICAgICAgICAgICAgICAgICB0eXBlX2luc3RhbmNlID0g
T2JqZWN0VHlwZShfZGVjbGFyYXRpb24udHlwZV9uYW1lLCBfZG9tYWluLCBfZGVjbGFyYXRpb24u
dHlwZV9tZW1iZXJzKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAg
IHR5cGVfaW5zdGFuY2UgPSBBbGlhc2VkVHlwZShfZGVjbGFyYXRpb24udHlwZV9uYW1lLCBfZG9t
YWluLCBfZGVjbGFyYXRpb24udHlwZV9yZWYpCisKKyAgICAgICAgICAgICAgICBzZWxmLnR5cGVz
X2J5X25hbWVbcXVhbGlmaWVkX3R5cGVfbmFtZV0gPSB0eXBlX2luc3RhbmNlCisKKyAgICAgICAg
IyBSZXNvbHZlIGFsbCB0eXBlIHJlZmVyZW5jZXMgcmVjdXJzaXZlbHkuCisgICAgICAgIGZvciBf
ZG9tYWluIGluIHNlbGYuZG9tYWluczoKKyAgICAgICAgICAgIF9kb21haW4ucmVzb2x2ZV90eXBl
X3JlZmVyZW5jZXMoc2VsZikKKworICAgIGRlZiBsb29rdXBfdHlwZV9mb3JfZGVjbGFyYXRpb24o
c2VsZiwgZGVjbGFyYXRpb24sIGRvbWFpbik6CisgICAgICAgICMgVGhpcyB3aWxsIG9ubHkgbWF0
Y2ggYSB0eXBlIGRlZmluZWQgaW4gdGhlIHNhbWUgZG9tYWluLCB3aGVyZSBwcmVmaXhlcyBhcmVu
J3QgcmVxdWlyZWQuCisgICAgICAgIHF1YWxpZmllZF9uYW1lID0gIi4iLmpvaW4oW2RvbWFpbi5k
b21haW5fbmFtZSwgZGVjbGFyYXRpb24udHlwZV9uYW1lXSkKKyAgICAgICAgaWYgcXVhbGlmaWVk
X25hbWUgaW4gc2VsZi50eXBlc19ieV9uYW1lOgorICAgICAgICAgICAgZm91bmRfdHlwZSA9IHNl
bGYudHlwZXNfYnlfbmFtZVtxdWFsaWZpZWRfbmFtZV0KKyAgICAgICAgICAgIGZvdW5kX3R5cGUu
cmVzb2x2ZV90eXBlX3JlZmVyZW5jZXMoc2VsZikKKyAgICAgICAgICAgIHJldHVybiBmb3VuZF90
eXBlCisKKyAgICAgICAgcmFpc2UgVHlwZWNoZWNrRXhjZXB0aW9uKCJMb29rdXAgZmFpbGVkIGZv
ciB0eXBlIGRlY2xhcmF0aW9uOiAlcyAocmVmZXJlbmNlZCBmcm9tIGRvbWFpbjogJXMpIiAlIChk
ZWNsYXJhdGlvbi50eXBlX25hbWUsIGRvbWFpbi5kb21haW5fbmFtZSkpCisKKyAgICBkZWYgbG9v
a3VwX3R5cGVfcmVmZXJlbmNlKHNlbGYsIHR5cGVfcmVmLCBkb21haW4pOgorICAgICAgICAjIElm
IHJlZmVyZW5jZSBpcyB0byBhbiBhbm9ueW1vdXMgYXJyYXkgdHlwZSwgY3JlYXRlIGEgZnJlc2gg
aW5zdGFuY2UuCisgICAgICAgIGlmIHR5cGVfcmVmLnR5cGVfa2luZCA9PSAiYXJyYXkiOgorICAg
ICAgICAgICAgdHlwZV9pbnN0YW5jZSA9IFZlY3RvclR5cGUodHlwZV9yZWYuYXJyYXlfdHlwZV9y
ZWYsIGRvbWFpbikKKyAgICAgICAgICAgIHR5cGVfaW5zdGFuY2UucmVzb2x2ZV90eXBlX3JlZmVy
ZW5jZXMoc2VsZikKKyAgICAgICAgICAgIGxvZy5kZWJ1ZygiPCBDcmVhdGVkIGZyZXNoIHR5cGUg
aW5zdGFuY2UgZm9yIGFub255bW91cyBhcnJheSB0eXBlOiAlcyIgJSB0eXBlX2luc3RhbmNlLnF1
YWxpZmllZF9uYW1lKCkpCisgICAgICAgICAgICByZXR1cm4gdHlwZV9pbnN0YW5jZQorCisgICAg
ICAgICMgSWYgcmVmZXJlbmNlIGlzIHRvIGFuIGFub255bW91cyBlbnVtIHR5cGUsIGNyZWF0ZSBh
IGZyZXNoIGluc3RhbmNlLgorICAgICAgICBpZiBsZW4odHlwZV9yZWYuZW51bV92YWx1ZXMpID4g
MDoKKyAgICAgICAgICAgICMgV2UgbmVlZCB0byBjcmVhdGUgYSB0eXBlIHJlZmVyZW5jZSB3aXRo
b3V0IGVudW0gdmFsdWVzIGFzIHRoZSBlbnVtJ3MgbmVzdGVkIHR5cGUuCisgICAgICAgICAgICBw
cmltaXRpdmVfdHlwZV9yZWYgPSBUeXBlUmVmZXJlbmNlKHR5cGVfcmVmLnR5cGVfa2luZCwgTm9u
ZSwgW10sIE5vbmUpCisgICAgICAgICAgICB0eXBlX2luc3RhbmNlID0gRW51bVR5cGUoIihhbm9u
eW1vdXMpIiwgZG9tYWluLCB0eXBlX3JlZi5lbnVtX3ZhbHVlcywgcHJpbWl0aXZlX3R5cGVfcmVm
KQorICAgICAgICAgICAgdHlwZV9pbnN0YW5jZS5yZXNvbHZlX3R5cGVfcmVmZXJlbmNlcyhzZWxm
KQorICAgICAgICAgICAgbG9nLmRlYnVnKCI8IENyZWF0ZWQgZnJlc2ggdHlwZSBpbnN0YW5jZSBm
b3IgYW5vbnltb3VzIGVudW0gdHlwZTogJXMiICUgdHlwZV9pbnN0YW5jZS5xdWFsaWZpZWRfbmFt
ZSgpKQorICAgICAgICAgICAgcmV0dXJuIHR5cGVfaW5zdGFuY2UKKworICAgICAgICAjIFRoaXMg
d2lsbCBtYXRjaCB3aGVuIHJlZmVyZW5jaW5nIGEgdHlwZSBkZWZpbmVkIGluIHRoZSBzYW1lIGRv
bWFpbiwgd2hlcmUgcHJlZml4ZXMgYXJlbid0IHJlcXVpcmVkLgorICAgICAgICBxdWFsaWZpZWRf
bmFtZSA9ICIuIi5qb2luKFtkb21haW4uZG9tYWluX25hbWUsIHR5cGVfcmVmLnJlZmVyZW5jZWRf
bmFtZSgpXSkKKyAgICAgICAgaWYgcXVhbGlmaWVkX25hbWUgaW4gc2VsZi50eXBlc19ieV9uYW1l
OgorICAgICAgICAgICAgZm91bmRfdHlwZSA9IHNlbGYudHlwZXNfYnlfbmFtZVtxdWFsaWZpZWRf
bmFtZV0KKyAgICAgICAgICAgIGZvdW5kX3R5cGUucmVzb2x2ZV90eXBlX3JlZmVyZW5jZXMoc2Vs
ZikKKyAgICAgICAgICAgIGxvZy5kZWJ1ZygiPCBMb29rdXAgc3VjY2VlZGVkIGZvciB1bnF1YWxp
ZmllZCB0eXBlOiAlcyIgJSBmb3VuZF90eXBlLnF1YWxpZmllZF9uYW1lKCkpCisgICAgICAgICAg
ICByZXR1cm4gZm91bmRfdHlwZQorCisgICAgICAgICMgVGhpcyB3aWxsIG1hdGNoIHByaW1pdGl2
ZSB0eXBlcyBhbmQgZnVsbHktcXVhbGlmaWVkIHR5cGVzIGZyb20gYSBkaWZmZXJlbnQgZG9tYWlu
LgorICAgICAgICBpZiB0eXBlX3JlZi5yZWZlcmVuY2VkX25hbWUoKSBpbiBzZWxmLnR5cGVzX2J5
X25hbWU6CisgICAgICAgICAgICBmb3VuZF90eXBlID0gc2VsZi50eXBlc19ieV9uYW1lW3R5cGVf
cmVmLnJlZmVyZW5jZWRfbmFtZSgpXQorICAgICAgICAgICAgZm91bmRfdHlwZS5yZXNvbHZlX3R5
cGVfcmVmZXJlbmNlcyhzZWxmKQorICAgICAgICAgICAgbG9nLmRlYnVnKCI8IExvb2t1cCBzdWNj
ZWVkZWQgZm9yIHByaW1pdGl2ZSBvciBxdWFsaWZpZWQgdHlwZTogJXMiICUgZm91bmRfdHlwZS5x
dWFsaWZpZWRfbmFtZSgpKQorICAgICAgICAgICAgcmV0dXJuIGZvdW5kX3R5cGUKKworICAgICAg
ICByYWlzZSBUeXBlY2hlY2tFeGNlcHRpb24oIkxvb2t1cCBmYWlsZWQgZm9yIHR5cGUgcmVmZXJl
bmNlOiAlcyAocmVmZXJlbmNlZCBmcm9tIGRvbWFpbjogJXMpIiAlICh0eXBlX3JlZi5yZWZlcmVu
Y2VkX25hbWUoKSwgZG9tYWluLmRvbWFpbl9uYW1lKSkKKworCitjbGFzcyBEb21haW46CisgICAg
ZGVmIF9faW5pdF9fKHNlbGYsIGRvbWFpbl9uYW1lLCBkZXNjcmlwdGlvbiwgaXNTdXBwbGVtZW50
YWwsIHR5cGVfZGVjbGFyYXRpb25zLCBjb21tYW5kcywgZXZlbnRzKToKKyAgICAgICAgc2VsZi5k
b21haW5fbmFtZSA9IGRvbWFpbl9uYW1lCisgICAgICAgIHNlbGYuZGVzY3JpcHRpb24gPSBkZXNj
cmlwdGlvbgorICAgICAgICBzZWxmLmlzX3N1cHBsZW1lbnRhbCA9IGlzU3VwcGxlbWVudGFsCisg
ICAgICAgIHNlbGYudHlwZV9kZWNsYXJhdGlvbnMgPSB0eXBlX2RlY2xhcmF0aW9ucworICAgICAg
ICBzZWxmLmNvbW1hbmRzID0gY29tbWFuZHMKKyAgICAgICAgc2VsZi5ldmVudHMgPSBldmVudHMK
KworICAgIGRlZiByZXNvbHZlX3R5cGVfcmVmZXJlbmNlcyhzZWxmLCBwcm90b2NvbCk6CisgICAg
ICAgIGxvZy5kZWJ1ZygiPiBSZXNvbHZpbmcgdHlwZSBkZWNsYXJhdGlvbnMgZm9yIGRvbWFpbjog
JXMiICUgc2VsZi5kb21haW5fbmFtZSkKKyAgICAgICAgZm9yIF9kZWNsYXJhdGlvbiBpbiBzZWxm
LnR5cGVfZGVjbGFyYXRpb25zOgorICAgICAgICAgICAgX2RlY2xhcmF0aW9uLnJlc29sdmVfdHlw
ZV9yZWZlcmVuY2VzKHByb3RvY29sLCBzZWxmKQorCisgICAgICAgIGxvZy5kZWJ1ZygiPiBSZXNv
bHZpbmcgdHlwZXMgaW4gY29tbWFuZHMgZm9yIGRvbWFpbjogJXMiICUgc2VsZi5kb21haW5fbmFt
ZSkKKyAgICAgICAgZm9yIF9jb21tYW5kIGluIHNlbGYuY29tbWFuZHM6CisgICAgICAgICAgICBf
Y29tbWFuZC5yZXNvbHZlX3R5cGVfcmVmZXJlbmNlcyhwcm90b2NvbCwgc2VsZikKKworICAgICAg
ICBsb2cuZGVidWcoIj4gUmVzb2x2aW5nIHR5cGVzIGluIGV2ZW50cyBmb3IgZG9tYWluOiAlcyIg
JSBzZWxmLmRvbWFpbl9uYW1lKQorICAgICAgICBmb3IgX2V2ZW50IGluIHNlbGYuZXZlbnRzOgor
ICAgICAgICAgICAgX2V2ZW50LnJlc29sdmVfdHlwZV9yZWZlcmVuY2VzKHByb3RvY29sLCBzZWxm
KQorCisKK2NsYXNzIERvbWFpbnM6CisgICAgR0xPQkFMID0gRG9tYWluKCIiLCAiVGhlIGdsb2Jh
bCBkb21haW4sIGluIHdoaWNoIHByaW1pdGl2ZSB0eXBlcyBhcmUgaW1wbGljaXRseSBkZWNsYXJl
ZC4iLCBUcnVlLCBbXSwgW10sIFtdKQorCisKK2NsYXNzIFR5cGVEZWNsYXJhdGlvbjoKKyAgICBk
ZWYgX19pbml0X18oc2VsZiwgdHlwZV9uYW1lLCB0eXBlX3JlZiwgZGVzY3JpcHRpb24sIHR5cGVf
bWVtYmVycyk6CisgICAgICAgIHNlbGYudHlwZV9uYW1lID0gdHlwZV9uYW1lCisgICAgICAgIHNl
bGYudHlwZV9yZWYgPSB0eXBlX3JlZgorICAgICAgICBzZWxmLmRlc2NyaXB0aW9uID0gZGVzY3Jp
cHRpb24KKyAgICAgICAgc2VsZi50eXBlX21lbWJlcnMgPSB0eXBlX21lbWJlcnMKKworICAgIGRl
ZiByZXNvbHZlX3R5cGVfcmVmZXJlbmNlcyhzZWxmLCBwcm90b2NvbCwgZG9tYWluKToKKyAgICAg
ICAgbG9nLmRlYnVnKCI+PiBSZXNvbHZpbmcgdHlwZSByZWZlcmVuY2VzIGZvciB0eXBlIGRlY2xh
cmF0aW9uOiAlcyIgJSBzZWxmLnR5cGVfbmFtZSkKKyAgICAgICAgc2VsZi50eXBlID0gcHJvdG9j
b2wubG9va3VwX3R5cGVfZm9yX2RlY2xhcmF0aW9uKHNlbGYsIGRvbWFpbikKKyAgICAgICAgZm9y
IF9tZW1iZXIgaW4gc2VsZi50eXBlX21lbWJlcnM6CisgICAgICAgICAgICBfbWVtYmVyLnJlc29s
dmVfdHlwZV9yZWZlcmVuY2VzKHByb3RvY29sLCBkb21haW4pCisKKworY2xhc3MgVHlwZU1lbWJl
cjoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbWVtYmVyX25hbWUsIHR5cGVfcmVmLCBpc19vcHRp
b25hbCwgZGVzY3JpcHRpb24pOgorICAgICAgICBzZWxmLm1lbWJlcl9uYW1lID0gbWVtYmVyX25h
bWUKKyAgICAgICAgc2VsZi50eXBlX3JlZiA9IHR5cGVfcmVmCisgICAgICAgIHNlbGYuaXNfb3B0
aW9uYWwgPSBpc19vcHRpb25hbAorICAgICAgICBzZWxmLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRp
b24KKworICAgIGRlZiByZXNvbHZlX3R5cGVfcmVmZXJlbmNlcyhzZWxmLCBwcm90b2NvbCwgZG9t
YWluKToKKyAgICAgICAgbG9nLmRlYnVnKCI+Pj4gUmVzb2x2aW5nIHR5cGUgcmVmZXJlbmNlcyBm
b3IgdHlwZSBtZW1iZXI6ICVzIiAlIHNlbGYubWVtYmVyX25hbWUpCisgICAgICAgIHNlbGYudHlw
ZSA9IHByb3RvY29sLmxvb2t1cF90eXBlX3JlZmVyZW5jZShzZWxmLnR5cGVfcmVmLCBkb21haW4p
CisKKworY2xhc3MgUGFyYW1ldGVyOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXJhbWV0ZXJf
bmFtZSwgdHlwZV9yZWYsIGlzX29wdGlvbmFsLCBkZXNjcmlwdGlvbik6CisgICAgICAgIHNlbGYu
cGFyYW1ldGVyX25hbWUgPSBwYXJhbWV0ZXJfbmFtZQorICAgICAgICBzZWxmLnR5cGVfcmVmID0g
dHlwZV9yZWYKKyAgICAgICAgc2VsZi5pc19vcHRpb25hbCA9IGlzX29wdGlvbmFsCisgICAgICAg
IHNlbGYuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbgorCisgICAgZGVmIHJlc29sdmVfdHlwZV9y
ZWZlcmVuY2VzKHNlbGYsIHByb3RvY29sLCBkb21haW4pOgorICAgICAgICBsb2cuZGVidWcoIj4+
PiBSZXNvbHZpbmcgdHlwZSByZWZlcmVuY2VzIGZvciBwYXJhbWV0ZXI6ICVzIiAlIHNlbGYucGFy
YW1ldGVyX25hbWUpCisgICAgICAgIHNlbGYudHlwZSA9IHByb3RvY29sLmxvb2t1cF90eXBlX3Jl
ZmVyZW5jZShzZWxmLnR5cGVfcmVmLCBkb21haW4pCisKKworY2xhc3MgQ29tbWFuZDoKKyAgICBk
ZWYgX19pbml0X18oc2VsZiwgY29tbWFuZF9uYW1lLCBjYWxsX3BhcmFtZXRlcnMsIHJldHVybl9w
YXJhbWV0ZXJzLCBkZXNjcmlwdGlvbiwgaXNfYXN5bmMpOgorICAgICAgICBzZWxmLmNvbW1hbmRf
bmFtZSA9IGNvbW1hbmRfbmFtZQorICAgICAgICBzZWxmLmNhbGxfcGFyYW1ldGVycyA9IGNhbGxf
cGFyYW1ldGVycworICAgICAgICBzZWxmLnJldHVybl9wYXJhbWV0ZXJzID0gcmV0dXJuX3BhcmFt
ZXRlcnMKKyAgICAgICAgc2VsZi5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uCisgICAgICAgIHNl
bGYuaXNfYXN5bmMgPSBpc19hc3luYworCisgICAgZGVmIHJlc29sdmVfdHlwZV9yZWZlcmVuY2Vz
KHNlbGYsIHByb3RvY29sLCBkb21haW4pOgorICAgICAgICBsb2cuZGVidWcoIj4+IFJlc29sdmlu
ZyB0eXBlIHJlZmVyZW5jZXMgZm9yIGNhbGwgcGFyYW1ldGVycyBpbiBjb21tYW5kOiAlcyIgJSBz
ZWxmLmNvbW1hbmRfbmFtZSkKKyAgICAgICAgZm9yIF9wYXJhbWV0ZXIgaW4gc2VsZi5jYWxsX3Bh
cmFtZXRlcnM6CisgICAgICAgICAgICBfcGFyYW1ldGVyLnJlc29sdmVfdHlwZV9yZWZlcmVuY2Vz
KHByb3RvY29sLCBkb21haW4pCisKKyAgICAgICAgbG9nLmRlYnVnKCI+PiBSZXNvbHZpbmcgdHlw
ZSByZWZlcmVuY2VzIGZvciByZXR1cm4gcGFyYW1ldGVycyBpbiBjb21tYW5kOiAlcyIgJSBzZWxm
LmNvbW1hbmRfbmFtZSkKKyAgICAgICAgZm9yIF9wYXJhbWV0ZXIgaW4gc2VsZi5yZXR1cm5fcGFy
YW1ldGVyczoKKyAgICAgICAgICAgIF9wYXJhbWV0ZXIucmVzb2x2ZV90eXBlX3JlZmVyZW5jZXMo
cHJvdG9jb2wsIGRvbWFpbikKKworCitjbGFzcyBFdmVudDoKKyAgICBkZWYgX19pbml0X18oc2Vs
ZiwgZXZlbnRfbmFtZSwgZXZlbnRfcGFyYW1ldGVycywgZGVzY3JpcHRpb24pOgorICAgICAgICBz
ZWxmLmV2ZW50X25hbWUgPSBldmVudF9uYW1lCisgICAgICAgIHNlbGYuZXZlbnRfcGFyYW1ldGVy
cyA9IGV2ZW50X3BhcmFtZXRlcnMKKyAgICAgICAgc2VsZi5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0
aW9uCisKKyAgICBkZWYgcmVzb2x2ZV90eXBlX3JlZmVyZW5jZXMoc2VsZiwgcHJvdG9jb2wsIGRv
bWFpbik6CisgICAgICAgIGxvZy5kZWJ1ZygiPj4gUmVzb2x2aW5nIHR5cGUgcmVmZXJlbmNlcyBm
b3IgcGFyYW1ldGVycyBpbiBldmVudDogJXMiICUgc2VsZi5ldmVudF9uYW1lKQorICAgICAgICBm
b3IgX3BhcmFtZXRlciBpbiBzZWxmLmV2ZW50X3BhcmFtZXRlcnM6CisgICAgICAgICAgICBfcGFy
YW1ldGVyLnJlc29sdmVfdHlwZV9yZWZlcmVuY2VzKHByb3RvY29sLCBkb21haW4pCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0
ZWQvZmFpbC1vbi1kdXBsaWNhdGUtdHlwZS1kZWNsYXJhdGlvbnMuanNvbi1lcnJvciBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9u
LWR1cGxpY2F0ZS10eXBlLWRlY2xhcmF0aW9ucy5qc29uLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ0N2Nk
ZjhlMjhlODU2NjEwYTI2ZjgxNTQ5NDNmMzZjZjhiN2QxZjQKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFp
bC1vbi1kdXBsaWNhdGUtdHlwZS1kZWNsYXJhdGlvbnMuanNvbi1lcnJvcgpAQCAtMCwwICsxIEBA
CitFUlJPUjogRHVwbGljYXRlIHR5cGUgZGVjbGFyYXRpb246IFJ1bnRpbWUuUmVtb3RlT2JqZWN0
SWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9leHBlY3RlZC9mYWlsLW9uLXR5cGUtZGVjbGFyYXRpb24tdXNpbmctdHlwZS1yZWZlcmVu
Y2UuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9leHBlY3RlZC9mYWlsLW9uLXR5cGUtZGVjbGFyYXRpb24tdXNpbmctdHlwZS1yZWZlcmVu
Y2UuanNvbi1lcnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40MmY1NzUzYTQzOTYxNDRlYjU2NmM1YzU5NjhkMDQ5
YWVjNjE4MmRiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tdHlwZS1kZWNsYXJhdGlvbi11c2lu
Zy10eXBlLXJlZmVyZW5jZS5qc29uLWVycm9yCkBAIC0wLDAgKzEgQEAKK0VSUk9SOiBUeXBlIHJl
ZmVyZW5jZSBjYW5ub3QgaGF2ZSBib3RoICd0eXBlJyBhbmQgJyRyZWYnIGtleXMuCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0
ZWQvZmFpbC1vbi11bmtub3duLXR5cGUtcmVmZXJlbmNlLWluLXR5cGUtZGVjbGFyYXRpb24uanNv
bi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9l
eHBlY3RlZC9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1kZWNsYXJhdGlv
bi5qc29uLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQzYzc4MmQ4OWRiNTY1ZDcyNGU3NTQwZTMyZWRjZmRi
ZDc5YTJmNzMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi11bmtub3duLXR5cGUtcmVmZXJlbmNl
LWluLXR5cGUtZGVjbGFyYXRpb24uanNvbi1lcnJvcgpAQCAtMCwwICsxIEBACitFUlJPUjogTG9v
a3VwIGZhaWxlZCBmb3IgdHlwZSByZWZlcmVuY2U6IGRyYWdvbiAocmVmZXJlbmNlZCBmcm9tIGRv
bWFpbjogUnVudGltZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2Ut
aW4tdHlwZS1tZW1iZXIuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2Ut
aW4tdHlwZS1tZW1iZXIuanNvbi1lcnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41MmNiNjViM2E0N2YyOTI3NjI0
MWNmZDAxNGJkNmNlNGVhZDhkNDJmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tdW5rbm93bi10
eXBlLXJlZmVyZW5jZS1pbi10eXBlLW1lbWJlci5qc29uLWVycm9yCkBAIC0wLDAgKzEgQEAKK0VS
Uk9SOiBSZWZlcmVuY2VkIHR5cGUgbmFtZSBDb2xvciBkb2VzIG5vdCBtYXRjaCBhbnkgdHlwZSBk
ZWNsYXJhdGlvbnMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNv
bi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9l
eHBlY3RlZC9zYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uLWVycm9yCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmIxMzA0ZjNkYmMxNzhkNTZmMjU1Y2IzYjdjOWYwODZmNzk5NTZhMDYKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhw
ZWN0ZWQvc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbi1lcnJvcgpAQCAtMCwwICsx
IEBACitFUlJPUjogV2hlbiBwYXJzaW5nIGRvbWFpbiwgcmVxdWlyZWQgcHJvcGVydHkgbWlzc2lu
ZzogZG9tYWluCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZmFpbC1vbi1kdXBsaWNhdGUtdHlwZS1kZWNsYXJhdGlvbnMuanNvbiBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWR1cGxp
Y2F0ZS10eXBlLWRlY2xhcmF0aW9ucy5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjcwMmZjNmEzMjcwYTY0NmE0
NTA0NDdmZGMwNDAxMzk5NWE5NDJiZjAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1kdXBsaWNhdGUtdHlwZS1k
ZWNsYXJhdGlvbnMuanNvbgpAQCAtMCwwICsxLDE1IEBACit7CisgICAgImRvbWFpbiI6ICJSdW50
aW1lIiwKKyAgICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJSZW1v
dGVPYmplY3RJZCIsCisgICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAorICAgICAgICAgICAg
ImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBvYmplY3QgaWRlbnRpZmllci4iCisgICAgICAgIH0sCisg
ICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJSZW1vdGVPYmplY3RJZCIsCisgICAgICAgICAg
ICAidHlwZSI6ICJzdHJpbmciLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBv
YmplY3QgaWRlbnRpZmllci4iCisgICAgICAgIH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi10eXBlLWRl
Y2xhcmF0aW9uLXVzaW5nLXR5cGUtcmVmZXJlbmNlLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi10eXBlLWRlY2xhcmF0aW9uLXVzaW5n
LXR5cGUtcmVmZXJlbmNlLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTliNzU5MGNjYzZmNmJjMzQ0M2E0YTI4
M2NhNmZjY2ZkZjMyNzczNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLXR5cGUtZGVjbGFyYXRpb24tdXNpbmct
dHlwZS1yZWZlcmVuY2UuanNvbgpAQCAtMCwwICsxLDEzIEBACitbCit7CisgICAgImRvbWFpbiI6
ICJSdW50aW1lIiwKKyAgICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6
ICJSZW1vdGVPYmplY3RJZCIsCisgICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAorICAgICAg
ICAgICAgIiRyZWYiOiAiU29tZVR5cGUiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVu
aXF1ZSBvYmplY3QgaWRlbnRpZmllci4iCisgICAgICAgIH0KKyAgICBdCit9CitdCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1v
bi11bmtub3duLXR5cGUtcmVmZXJlbmNlLWluLXR5cGUtZGVjbGFyYXRpb24uanNvbiBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLXVua25vd24t
dHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1kZWNsYXJhdGlvbi5qc29uCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ2ODg3
YTI3NDExOTAwYTgwZDUwZjAwM2VhYzM2YzEzYTk5ZmFlNTgKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi11bmtu
b3duLXR5cGUtcmVmZXJlbmNlLWluLXR5cGUtZGVjbGFyYXRpb24uanNvbgpAQCAtMCwwICsxLDEy
IEBACitbCit7CisgICAgImRvbWFpbiI6ICJSdW50aW1lIiwKKyAgICAidHlwZXMiOiBbCisgICAg
ICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJSZW1vdGVPYmplY3RJZCIsCisgICAgICAgICAgICAi
dHlwZSI6ICJkcmFnb24iLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBvYmpl
Y3QgaWRlbnRpZmllci4iCisgICAgICAgIH0KKyAgICBdCit9CitdCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi11bmtub3du
LXR5cGUtcmVmZXJlbmNlLWluLXR5cGUtbWVtYmVyLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi11bmtub3duLXR5cGUtcmVmZXJlbmNl
LWluLXR5cGUtbWVtYmVyLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjgxN2RiNTA0NGRjMWYyODU1NzAwOGMx
ZjE3NjFmMWIwNjhmNGNlNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2Ut
aW4tdHlwZS1tZW1iZXIuanNvbgpAQCAtMCwwICsxLDE1IEBACitbCit7CisgICAgImRvbWFpbiI6
ICJGYW50YXN5IiwKKyAgICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6
ICJEcmFnb25FZ2ciLAorICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKKyAgICAgICAgICAg
ICJkZXNjcmlwdGlvbiI6ICJBIGRyYWdvbiBlZ2cuIiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVz
IjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29sb3IiLCAiJHJlZiI6ICJDb2xvciIg
fQorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXQorfQorXQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3NhbWUtdHlwZS1pZC1k
aWZmZXJlbnQtZG9tYWluLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbgpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4zYmY0ZGZmNWNjYzI5ZDBlOGMxZmE0YjJkZDMyODNlNzcxNjMyYzdkCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3NhbWUt
dHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24KQEAgLTAsMCArMSwyMiBAQAorWworeworICAg
ICJkb21haW4iOiAiUnVudGltZSIsCisgICAgInR5cGVzIjogWworICAgICAgICB7CisgICAgICAg
ICAgICAiaWQiOiAiUmVtb3RlT2JqZWN0SWQiLAorICAgICAgICAgICAgInR5cGUiOiAic3RyaW5n
IiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUgb2JqZWN0IGlkZW50aWZpZXIu
IgorICAgICAgICB9CisgICAgXQorfSwKK3sKKyAgICAiZG9tYWluIjogIlJ1bnRpbWUyIiwKKyAg
ICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJSZW1vdGVPYmplY3RJ
ZCIsCisgICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAorICAgICAgICAgICAgImRlc2NyaXB0
aW9uIjogIlVuaXF1ZSBvYmplY3QgaWRlbnRpZmllci4iCisgICAgICAgIH0KKyAgICBdCit9Citd
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24gYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvdHlwZS1kZWNsYXJhdGlvbi1h
bGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2JjOWQ1Mzk0NzhkYjQ5NWM5
NjA2N2VjZDU0YTk1YmU1MmY4ZDA3MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy90eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQt
cHJpbWl0aXZlLXR5cGUuanNvbgpAQCAtMCwwICsxLDEwIEBACit7CisgICAgImRvbWFpbiI6ICJS
dW50aW1lIiwKKyAgICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJS
ZW1vdGVPYmplY3RJZCIsCisgICAgICAgICAgICAidHlwZSI6ICJpbnRlZ2VyIiwKKyAgICAgICAg
ICAgICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUgb2JqZWN0IGlkZW50aWZpZXIuIgorICAgICAgICB9
CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL3R5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3R5cGUtZGVjbGFyYXRpb24tYXJy
YXktdHlwZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmMxNjc3YTAwMjExMzc3YmNkNTgxY2UyODc1NjQ5ZDMz
NjFiYmQyNGIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24KQEAgLTAs
MCArMSw0MCBAQAorWworeworICAgICJkb21haW4iOiAiRGVidWdnZXIiLAorICAgICJ0eXBlcyI6
IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIkJyZWFrcG9pbnRJZCIsCisgICAgICAg
ICAgICAidHlwZSI6ICJpbnRlZ2VyIgorICAgICAgICB9CisgICAgXQorfSwKK3sKKyAgICAiZG9t
YWluIjogIlJ1bnRpbWUiLAorICAgICJ0eXBlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAg
ImlkIjogIkx1Y2t5TnVtYmVycyIsCisgICAgICAgICAgICAidHlwZSI6ICJhcnJheSIsCisgICAg
ICAgICAgICAiaXRlbXMiOiB7ICJ0eXBlIjogImludGVnZXIiIH0KKyAgICAgICAgfSwKKyAgICAg
ICAgeworICAgICAgICAgICAgImlkIjogIkJhYnlOYW1lcyIsCisgICAgICAgICAgICAidHlwZSI6
ICJhcnJheSIsCisgICAgICAgICAgICAiaXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfQorICAg
ICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiT2JqZWN0SWQiLAorICAgICAg
ICAgICAgInR5cGUiOiAiaW50ZWdlciIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAg
ICAgImlkIjogIk5ld09iamVjdHMiLAorICAgICAgICAgICAgInR5cGUiOiAiYXJyYXkiLAorICAg
ICAgICAgICAgIml0ZW1zIjogeyAiJHJlZiI6ICJPYmplY3RJZCIgfQorICAgICAgICB9LAorICAg
ICAgICB7CisgICAgICAgICAgICAiaWQiOiAiT2xkT2JqZWN0cyIsCisgICAgICAgICAgICAidHlw
ZSI6ICJhcnJheSIsCisgICAgICAgICAgICAiaXRlbXMiOiB7ICIkcmVmIjogIkRlYnVnZ2VyLkJy
ZWFrcG9pbnRJZCIgfQorICAgICAgICB9CisgICAgXQorfQorXQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3R5cGUtZGVjbGFyYXRpb24t
ZW51bS10eXBlLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jYzQ1MDNk
MmFiYmI3ZTExZDE3YTY0NmQ2MTcwOTdjYjExY2EzMDExCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3R5cGUtZGVjbGFyYXRp
b24tZW51bS10eXBlLmpzb24KQEAgLTAsMCArMSwxNSBAQAoreworICAgICJkb21haW4iOiAiUnVu
dGltZSIsCisgICAgInR5cGVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiTHVj
a3lOdW1iZXJzIiwKKyAgICAgICAgICAgICJ0eXBlIjogImludGVnZXIiLAorICAgICAgICAgICAg
ImVudW0iOiBbMCwgMSwgMl0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlk
IjogIkFsbG93ZWRBbmltYWxzIiwKKyAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCisgICAg
ICAgICAgICAiZW51bSI6IFsiUGlncyIsICJXb2x2ZXMiLCAiQ2F0cyJdCisgICAgICAgIH0KKyAg
ICBdCit9CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5k
ZXggZjE3MzNkNWMzYWNkNmNhYTg0ZjVjNGI3OTc1OTA0ZDA1NTgwNmFmMy4uZDExY2QwODFhNjk1
NzRkMDhiYmQ4YTQ1ZjViNzZlMzE0MDVhMTcxOSAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9n
CisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyIEBACisyMDE0LTA0LTE3ICBCcmlh
biBKLiBCdXJnICA8YnVyZ0Bjcy53YXNoaW5ndG9uLmVkdT4KKworICAgICAgICBXZWIgSW5zcGVj
dG9yOiByZXdyaXRlIENvZGVHZW5lcmF0b3JJbnNwZWN0b3IgdG8gYmUgbW9kdWxhciBhbmQgdGVz
dGFibGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEz
MTU5NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
U2NyaXB0cy9ydW4taW5zcGVjdG9yLWdlbmVyYXRvci10ZXN0czogQWRkZWQuCisgICAgICAgICht
YWluKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2luc3BlY3Rvci9fX2luaXRfXy5weTog
QWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9pbnNwZWN0b3IvbWFpbi5weTogQWRk
ZWQuCisgICAgICAgIChJbnNwZWN0b3JHZW5lcmF0b3JUZXN0cyk6CisgICAgICAgIChJbnNwZWN0
b3JHZW5lcmF0b3JUZXN0cy5fX2luaXRfXyk6CisgICAgICAgIChJbnNwZWN0b3JHZW5lcmF0b3JU
ZXN0cy5nZW5lcmF0ZV9mcm9tX2pzb24pOgorICAgICAgICAoSW5zcGVjdG9yR2VuZXJhdG9yVGVz
dHMud3JpdGVfZXJyb3JfZmlsZSk6CisgICAgICAgIChJbnNwZWN0b3JHZW5lcmF0b3JUZXN0cy5k
ZXRlY3RfY2hhbmdlcyk6CisgICAgICAgIChJbnNwZWN0b3JHZW5lcmF0b3JUZXN0cy5ydW5fdGVz
dHMpOgorICAgICAgICAoSW5zcGVjdG9yR2VuZXJhdG9yVGVzdHMubWFpbik6CisKIDIwMTQtMDQt
MTAgIFphbiBEb2JlcnNlayAgPHpkb2JlcnNla0BpZ2FsaWEuY29tPgogCiAgICAgICAgIFtDTWFr
ZV0gQWRkIG1pc3NpbmcgV1RGIHVuaXQgdGVzdHMKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMv
cnVuLWluc3BlY3Rvci1nZW5lcmF0b3ItdGVzdHMgYi9Ub29scy9TY3JpcHRzL3J1bi1pbnNwZWN0
b3ItZ2VuZXJhdG9yLXRlc3RzCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFhYWIxODAwYmNhNmY3ZThhMzQ5NmU1OTE4
NDIxZWVhZTJkMzhkODIKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3J1bi1pbnNw
ZWN0b3ItZ2VuZXJhdG9yLXRlc3RzCkBAIC0wLDAgKzEsNDIgQEAKKyMhL3Vzci9iaW4vZW52IHB5
dGhvbgorIyBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisj
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisj
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisjIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0IHN5cwor
ZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtIGltcG9ydCBleGVjdXRpdmUKKworZGVmIG1haW4o
YXJndik6CisgICAgIiIiUnVucyByZXBsYXkgaW5wdXQgY29kZSBnZW5lcmF0b3Igb24gdGVzdCBz
cGVjaWZpY2F0aW9uIGZpbGVzIGFuZCBjb21wYXJlcworICAgIHRoZSByZXN1bHRzIHdpdGggcmVm
ZXJlbmNlIGZpbGVzLgorCisgICAgT3B0aW9uczoKKyAgICAgICAtLXJlc2V0LXJlc3VsdHM6IE92
ZXJ3cml0ZXMgdGhlIHJlZmVyZW5jZSBmaWxlcyB3aXRoIHRoZSBnZW5lcmF0ZWQgcmVzdWx0cy4K
KworICAgICIiIgorICAgIHJlc2V0X3Jlc3VsdHMgPSAiLS1yZXNldC1yZXN1bHRzIiBpbiBhcmd2
CisKKyAgICBmcm9tIHdlYmtpdHB5Lmluc3BlY3Rvci5tYWluIGltcG9ydCBJbnNwZWN0b3JHZW5l
cmF0b3JUZXN0cworICAgIHJldHVybiBJbnNwZWN0b3JHZW5lcmF0b3JUZXN0cyhyZXNldF9yZXN1
bHRzLCBleGVjdXRpdmUuRXhlY3V0aXZlKCkpLm1haW4oKQorCitpZiBfX25hbWVfXyA9PSAnX19t
YWluX18nOgorICAgIHN5cy5leGl0KG1haW4oc3lzLmFyZ3YpKQpkaWZmIC0tZ2l0IGEvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9pbnNwZWN0b3IvX19pbml0X18ucHkgYi9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L2luc3BlY3Rvci9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lZjY1YmVlNWJiNzdlOTZl
YmM3Y2Q5YzQ3NjQwNjkwZmJkYThhYzE5Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9pbnNwZWN0b3IvX19pbml0X18ucHkKQEAgLTAsMCArMSBAQAorIyBSZXF1aXJl
ZCBmb3IgUHl0aG9uIHRvIHNlYXJjaCB0aGlzIGRpcmVjdG9yeSBmb3IgbW9kdWxlIGZpbGVzCmRp
ZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2luc3BlY3Rvci9tYWluLnB5IGIvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9pbnNwZWN0b3IvbWFpbi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40ZDViMWU0
M2IwMDJjNTNhOTBhOTViY2NjZjYzZjQyYTVmMTMyNDUyCi0tLSAvZGV2L251bGwKKysrIGIvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9pbnNwZWN0b3IvbWFpbi5weQpAQCAtMCwwICsxLDEzNCBAQAor
IyBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMg
Q29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMg
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIworIyAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTICJBUworIyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKKyMgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBCisjIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorIyBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitp
bXBvcnQgb3MKK2ltcG9ydCBvcy5wYXRoCitpbXBvcnQgc2h1dGlsCitpbXBvcnQgc3lzCitpbXBv
cnQgdGVtcGZpbGUKK2Zyb20gd2Via2l0cHkuY29tbW9uLmNoZWNrb3V0LnNjbS5kZXRlY3Rpb24g
aW1wb3J0IGRldGVjdF9zY21fc3lzdGVtCitmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uZXhl
Y3V0aXZlIGltcG9ydCBTY3JpcHRFcnJvcgorCisKK2NsYXNzIEluc3BlY3RvckdlbmVyYXRvclRl
c3RzOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJlc2V0X3Jlc3VsdHMsIGV4ZWN1dGl2ZSk6
CisgICAgICAgIHNlbGYucmVzZXRfcmVzdWx0cyA9IHJlc2V0X3Jlc3VsdHMKKyAgICAgICAgc2Vs
Zi5leGVjdXRpdmUgPSBleGVjdXRpdmUKKworICAgIGRlZiBnZW5lcmF0ZV9mcm9tX2pzb24oc2Vs
ZiwganNvbl9maWxlLCBvdXRwdXRfZGlyZWN0b3J5KToKKyAgICAgICAgY21kID0gWydweXRob24n
LAorICAgICAgICAgICAgICAgJ0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL0NvZGVH
ZW5lcmF0b3JJbnNwZWN0b3IyLnB5JywKKyAgICAgICAgICAgICAgICctLW91dHB1dERpcicsIG91
dHB1dF9kaXJlY3RvcnksCisgICAgICAgICAgICAgICAnLS1mb3JjZScsCisgICAgICAgICAgICAg
ICAnLS1mcmFtZXdvcmsnLCAnVGVzdCcsCisgICAgICAgICAgICAgICAnLS10ZXN0JywKKyAgICAg
ICAgICAgICAgIGpzb25fZmlsZV0KKworICAgICAgICBleGl0X2NvZGUgPSAwCisgICAgICAgIHRy
eToKKyAgICAgICAgICAgIHN0ZGVycl9vdXRwdXQgPSBzZWxmLmV4ZWN1dGl2ZS5ydW5fY29tbWFu
ZChjbWQpCisgICAgICAgICAgICBpZiBzdGRlcnJfb3V0cHV0OgorICAgICAgICAgICAgICAgIHNl
bGYud3JpdGVfZXJyb3JfZmlsZShqc29uX2ZpbGUsIG91dHB1dF9kaXJlY3RvcnksIHN0ZGVycl9v
dXRwdXQpCisgICAgICAgIGV4Y2VwdCBTY3JpcHRFcnJvciwgZToKKyAgICAgICAgICAgIHByaW50
IGUub3V0cHV0CisgICAgICAgICAgICBleGl0X2NvZGUgPSBlLmV4aXRfY29kZQorICAgICAgICBy
ZXR1cm4gZXhpdF9jb2RlCisKKyAgICBkZWYgd3JpdGVfZXJyb3JfZmlsZShzZWxmLCBpbnB1dF9m
aWxlcGF0aCwgb3V0cHV0X2RpcmVjdG9yeSwgZXJyb3Jfb3V0cHV0KToKKyAgICAgICAgb3V0cHV0
X2ZpbGVwYXRoID0gb3MucGF0aC5qb2luKG91dHB1dF9kaXJlY3RvcnksIG9zLnBhdGguYmFzZW5h
bWUoaW5wdXRfZmlsZXBhdGgpICsgJy1lcnJvcicpCisKKyAgICAgICAgd2l0aCBvcGVuKG91dHB1
dF9maWxlcGF0aCwgInciKSBhcyBvdXRwdXRfZmlsZToKKyAgICAgICAgICAgIG91dHB1dF9maWxl
LndyaXRlKGVycm9yX291dHB1dCkKKworICAgIGRlZiBkZXRlY3RfY2hhbmdlcyhzZWxmLCB3b3Jr
X2RpcmVjdG9yeSwgcmVmZXJlbmNlX2RpcmVjdG9yeSk6CisgICAgICAgIGNoYW5nZXNfZm91bmQg
PSBGYWxzZQorICAgICAgICBmb3Igb3V0cHV0X2ZpbGUgaW4gb3MubGlzdGRpcih3b3JrX2RpcmVj
dG9yeSk6CisgICAgICAgICAgICBjbWQgPSBbJ2RpZmYnLAorICAgICAgICAgICAgICAgICAgICct
dScsCisgICAgICAgICAgICAgICAgICAgJy1OJywKKyAgICAgICAgICAgICAgICAgICBvcy5wYXRo
LmpvaW4ocmVmZXJlbmNlX2RpcmVjdG9yeSwgb3V0cHV0X2ZpbGUpLAorICAgICAgICAgICAgICAg
ICAgIG9zLnBhdGguam9pbih3b3JrX2RpcmVjdG9yeSwgb3V0cHV0X2ZpbGUpXQorCisgICAgICAg
ICAgICBleGl0X2NvZGUgPSAwCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgb3V0
cHV0ID0gc2VsZi5leGVjdXRpdmUucnVuX2NvbW1hbmQoY21kKQorICAgICAgICAgICAgZXhjZXB0
IFNjcmlwdEVycm9yLCBlOgorICAgICAgICAgICAgICAgIG91dHB1dCA9IGUub3V0cHV0CisgICAg
ICAgICAgICAgICAgZXhpdF9jb2RlID0gZS5leGl0X2NvZGUKKworICAgICAgICAgICAgaWYgZXhp
dF9jb2RlIG9yIG91dHB1dDoKKyAgICAgICAgICAgICAgICBwcmludCAnRkFJTDogJXMnICUgb3V0
cHV0X2ZpbGUKKyAgICAgICAgICAgICAgICBwcmludCBvdXRwdXQKKyAgICAgICAgICAgICAgICBj
aGFuZ2VzX2ZvdW5kID0gVHJ1ZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBw
cmludCAnUEFTUzogJXMnICUgb3V0cHV0X2ZpbGUKKyAgICAgICAgcmV0dXJuIGNoYW5nZXNfZm91
bmQKKworICAgIGRlZiBydW5fdGVzdHMoc2VsZiwgaW5wdXRfZGlyZWN0b3J5LCByZWZlcmVuY2Vf
ZGlyZWN0b3J5KToKKyAgICAgICAgd29ya19kaXJlY3RvcnkgPSByZWZlcmVuY2VfZGlyZWN0b3J5
CisKKyAgICAgICAgcGFzc2VkID0gVHJ1ZQorICAgICAgICBmb3IgaW5wdXRfZmlsZSBpbiBvcy5s
aXN0ZGlyKGlucHV0X2RpcmVjdG9yeSk6CisgICAgICAgICAgICAobmFtZSwgZXh0ZW5zaW9uKSA9
IG9zLnBhdGguc3BsaXRleHQoaW5wdXRfZmlsZSkKKyAgICAgICAgICAgIGlmIGV4dGVuc2lvbiAh
PSAnLmpzb24nOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAjIEdlbmVy
YXRlIG91dHB1dCBpbnRvIHRoZSB3b3JrIGRpcmVjdG9yeSAoZWl0aGVyIHRoZSBnaXZlbiBvbmUg
b3IgYQorICAgICAgICAgICAgIyB0ZW1wIG9uZSBpZiBub3QgcmVzZXRfcmVzdWx0cyBpcyBwZXJm
b3JtZWQpCisgICAgICAgICAgICBpZiBub3Qgc2VsZi5yZXNldF9yZXN1bHRzOgorICAgICAgICAg
ICAgICAgIHdvcmtfZGlyZWN0b3J5ID0gdGVtcGZpbGUubWtkdGVtcCgpCisKKyAgICAgICAgICAg
IGlmIHNlbGYuZ2VuZXJhdGVfZnJvbV9qc29uKG9zLnBhdGguam9pbihpbnB1dF9kaXJlY3Rvcnks
IGlucHV0X2ZpbGUpLCB3b3JrX2RpcmVjdG9yeSk6CisgICAgICAgICAgICAgICAgcGFzc2VkID0g
RmFsc2UKKworICAgICAgICAgICAgaWYgc2VsZi5yZXNldF9yZXN1bHRzOgorICAgICAgICAgICAg
ICAgIHByaW50ICJSZXNldCByZXN1bHRzIGZvciB0ZXN0OiAlcyIgJSAoaW5wdXRfZmlsZSkKKyAg
ICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAjIERldGVjdCBjaGFuZ2VzCisg
ICAgICAgICAgICBpZiBzZWxmLmRldGVjdF9jaGFuZ2VzKHdvcmtfZGlyZWN0b3J5LCByZWZlcmVu
Y2VfZGlyZWN0b3J5KToKKyAgICAgICAgICAgICAgICBwYXNzZWQgPSBGYWxzZQorICAgICAgICAg
ICAgc2h1dGlsLnJtdHJlZSh3b3JrX2RpcmVjdG9yeSkKKworICAgICAgICByZXR1cm4gcGFzc2Vk
CisKKyAgICBkZWYgbWFpbihzZWxmKToKKyAgICAgICAgY3VycmVudF9zY20gPSBkZXRlY3Rfc2Nt
X3N5c3RlbShvcy5jdXJkaXIpCisgICAgICAgIG9zLmNoZGlyKG9zLnBhdGguam9pbihjdXJyZW50
X3NjbS5jaGVja291dF9yb290LCAnU291cmNlJykpCisKKyAgICAgICAgYWxsX3Rlc3RzX3Bhc3Nl
ZCA9IFRydWUKKworICAgICAgICBpbnB1dF9kaXJlY3RvcnkgPSBvcy5wYXRoLmpvaW4oJ0phdmFT
Y3JpcHRDb3JlJywgJ2luc3BlY3RvcicsICdzY3JpcHRzJywgJ3Rlc3RzJykKKyAgICAgICAgcmVm
ZXJlbmNlX2RpcmVjdG9yeSA9IG9zLnBhdGguam9pbignSmF2YVNjcmlwdENvcmUnLCAnaW5zcGVj
dG9yJywgJ3NjcmlwdHMnLCAndGVzdHMnLCAnZXhwZWN0ZWQnKQorICAgICAgICBpZiBub3Qgc2Vs
Zi5ydW5fdGVzdHMoaW5wdXRfZGlyZWN0b3J5LCByZWZlcmVuY2VfZGlyZWN0b3J5KToKKyAgICAg
ICAgICAgIGFsbF90ZXN0c19wYXNzZWQgPSBGYWxzZQorCisgICAgICAgIHByaW50ICcnCisgICAg
ICAgIGlmIGFsbF90ZXN0c19wYXNzZWQ6CisgICAgICAgICAgICBwcmludCAnQWxsIHRlc3RzIFBB
U1MhJworICAgICAgICAgICAgcmV0dXJuIDAKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHBy
aW50ICdTb21lIHRlc3RzIEZBSUwhIChUbyB1cGRhdGUgdGhlIHJlZmVyZW5jZSBmaWxlcywgZXhl
Y3V0ZSAicnVuLWluc3BlY3Rvci1nZW5lcmF0b3ItdGVzdHMgLS1yZXNldC1yZXN1bHRzIiknCisg
ICAgICAgICAgICByZXR1cm4gLTEK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>229774</attachid>
            <date>2014-04-20 16:13:12 -0700</date>
            <delta_ts>2014-04-20 21:25:14 -0700</delta_ts>
            <desc>WIP: generates InspectorWebBackendCommands.js and InspectorWebBackendDispatchers.h,cpp</desc>
            <filename>bug-131596-20140420161245.patch</filename>
            <type>text/plain</type>
            <size>204565</size>
            <attacher name="Brian Burg">burg</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTY3NTc2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBi
MjZjYjg3MmJhNzY3OTg1YTIyZWY2NGRkNDM3OTk1NDZiZGZiNTk5Li5iMjA1YzBhYmJmNWRiNzlm
NTZmZjJmZjI2ZjMzZmM0ODQ0YWZhNDNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNzUgQEAKKzIwMTQtMDQtMTcgIEJyaWFuIEouIEJ1cmcgIDxidXJnQGNzLndhc2hpbmd0
b24uZWR1PgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IHJld3JpdGUgQ29kZUdlbmVyYXRvcklu
c3BlY3RvciB0byBiZSBtb2R1bGFyIGFuZCB0ZXN0YWJsZQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMxNTk2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9Db2RlR2VuZXJh
dG9ySW5zcGVjdG9yMi5weTogQWRkZWQuCisgICAgICAgIChnZW5lcmF0ZV9mcm9tX3NwZWNpZmlj
YXRpb24pOgorICAgICAgICAoZ2VuZXJhdGVfZnJvbV9zcGVjaWZpY2F0aW9uLmxvYWRfc3BlY2lm
aWNhdGlvbik6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9fX2luaXRfXy5w
eTogQWRkZWQuCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9i
YWNrZW5kX2NvbW1hbmRzLnB5OiBBZGRlZC4KKyAgICAgICAgKG1ha2VfamF2YXNjcmlwdF9pZGVu
dGlmaWVyKToKKyAgICAgICAgKG1ha2VfamF2YXNjcmlwdF9pZGVudGlmaWVyLnJlcGxhY2VDYWxs
YmFjayk6CisgICAgICAgIChCYWNrZW5kQ29tbWFuZHNHZW5lcmF0b3IpOgorICAgICAgICAoQmFj
a2VuZENvbW1hbmRzR2VuZXJhdG9yLl9faW5pdF9fKToKKyAgICAgICAgKEJhY2tlbmRDb21tYW5k
c0dlbmVyYXRvci5tb2RlbCk6CisgICAgICAgIChCYWNrZW5kQ29tbWFuZHNHZW5lcmF0b3Iub3V0
cHV0X2ZpbGVuYW1lKToKKyAgICAgICAgKEJhY2tlbmRDb21tYW5kc0dlbmVyYXRvci53cml0ZV9v
dXRwdXRfZmlsZXMpOgorICAgICAgICAoQmFja2VuZENvbW1hbmRzR2VuZXJhdG9yLmdlbmVyYXRl
X2xpY2Vuc2UpOgorICAgICAgICAoQmFja2VuZENvbW1hbmRzR2VuZXJhdG9yLmdlbmVyYXRlX2Jh
Y2tlbmRfY29tbWFuZHMpOgorICAgICAgICAoQmFja2VuZENvbW1hbmRzR2VuZXJhdG9yLmdlbmVy
YXRlX2RvbWFpbik6CisgICAgICAgIChCYWNrZW5kQ29tbWFuZHNHZW5lcmF0b3IuZ2VuZXJhdGVf
ZG9tYWluLmdlbmVyYXRlX3BhcmFtZXRlcl9vYmplY3QpOgorICAgICAgICAqIGluc3BlY3Rvci9z
Y3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weTogQWRk
ZWQuCisgICAgICAgICh1Y2ZpcnN0KToKKyAgICAgICAgKEJhY2tlbmREaXNwYXRjaGVySGVhZGVy
R2VuZXJhdG9yKToKKyAgICAgICAgKEJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yLl9f
aW5pdF9fKToKKyAgICAgICAgKEJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yLm1vZGVs
KToKKyAgICAgICAgKEJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yLm91dHB1dF9maWxl
bmFtZSk6CisgICAgICAgIChCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvci53cml0ZV9v
dXRwdXRfZmlsZXMpOgorICAgICAgICAoQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3Iu
Z2VuZXJhdGVfbGljZW5zZSk6CisgICAgICAgIChCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVy
YXRvci5nZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXIpOgorICAgICAgICAoQmFja2VuZERpc3Bh
dGNoZXJIZWFkZXJHZW5lcmF0b3IuZ2VuZXJhdGVfYmFja2VuZF9kaXNwYXRjaGVyLnNob3VsZF9n
ZW5lcmF0ZV9kb21haW4pOgorICAgICAgICAoQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0
b3IuZ2VuZXJhdGVfZG9tYWluX2hhbmRsZXIpOgorICAgICAgICAoQmFja2VuZERpc3BhdGNoZXJI
ZWFkZXJHZW5lcmF0b3IuZ2VuZXJhdGVfaGFuZGxlcl9jb21tYW5kKToKKyAgICAgICAgKEJhY2tl
bmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yLmdlbmVyYXRlX2FzeW5jX2hhbmRsZXJfY29tbWFu
ZCk6CisgICAgICAgIChCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvci5nZW5lcmF0ZV9k
b21haW5fZGlzcGF0Y2hlcik6CisgICAgICAgIChCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVy
YXRvci5nZW5lcmF0ZV9kaXNwYXRjaGVyX2NvbW1hbmQpOgorICAgICAgICAqIGluc3BlY3Rvci9z
Y3JpcHRzL2NvZGVnZW4vZ2VuZXJhdG9yLnB5OiBBZGRlZC4KKyAgICAgICAgKEdlbmVyYXRvcik6
CisgICAgICAgIChHZW5lcmF0b3IuX19pbml0X18pOgorICAgICAgICAoR2VuZXJhdG9yLm1vZGVs
KToKKyAgICAgICAgKEdlbmVyYXRvci53cml0ZV9vdXRwdXRfZmlsZXMpOgorICAgICAgICAoR2Vu
ZXJhdG9yLmNwcF9ndWFyZF9mb3JfZG9tYWluKToKKyAgICAgICAgKER1bW15R2VuZXJhdG9yKToK
KyAgICAgICAgKEluY3JlbWVudGFsRmlsZVdyaXRlcik6CisgICAgICAgIChJbmNyZW1lbnRhbEZp
bGVXcml0ZXIuX19pbml0X18pOgorICAgICAgICAoSW5jcmVtZW50YWxGaWxlV3JpdGVyLndyaXRl
KToKKyAgICAgICAgKEluY3JlbWVudGFsRmlsZVdyaXRlci5jbG9zZSk6CisgICAgICAgICogaW5z
cGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0b3JfdGVtcGxhdGVzLnB5OiBBZGRlZC4KKyAg
ICAgICAgKEdlbmVyYXRvclRlbXBsYXRlcyk6CisgICAgICAgIChTdHJpbmcpOgorICAgICAgICAq
IGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vbW9kZWxzLnB5OiBBZGRlZC4KKyAgICAgICAgKFBh
cnNlRXhjZXB0aW9uKToKKyAgICAgICAgKFR5cGVjaGVja0V4Y2VwdGlvbik6CisgICAgICAgIChG
cmFtZXdvcmspOgorICAgICAgICAoRnJhbWV3b3JrLl9faW5pdF9fKToKKyAgICAgICAgKEZyYW1l
d29yay5zZXR0aW5nKToKKyAgICAgICAgKEZyYW1ld29yay5mcm9tU3RyaW5nKToKKyAgICAgICAg
KEZyYW1ld29ya3MpOgorICAgICAgICAoVHlwZU1vZGUpOgorICAgICAgICAoVHlwZU1vZGUuX19p
bml0X18pOgorICAgICAgICAoVHlwZU1vZGUuZnJvbVN0cmluZyk6CisgICAgICAgIChUeXBlTW9k
ZXMpOgorICAgICAgICAoVHlwZVJlZmVyZW5jZSk6CisgICAgICAgIChUeXBlUmVmZXJlbmNlLl9f
aW5pdF9fKToKKyAgICAgICAgKFR5cGVSZWZlcmVuY2UucmVmZXJlbmNlZF9uYW1lKToKKyAgICAg
ICAgKFR5cGUpOgorICAgICAgICAoVHlwZS5fX2luaXRfXyk6CisgICAgICAgIChUeXBlLl9fZXFf
Xyk6CisgICAgICAgIChUeXBlLl9faGFzaF9fKToKKyAgICAgICAgKFR5cGUuaXNfZW51bSk6Cisg
ICAgICAgIChUeXBlLnR5cGVfZG9tYWluKToKKyAgICAgICAgKFR5cGUudHlwZV9tb2RlKToKKyAg
ICAgICAgKFR5cGUucXVhbGlmaWVkX25hbWUpOgorICAgICAgICAoVHlwZS5yZXNvbHZlX3R5cGVf
cmVmZXJlbmNlcyk6CisgICAgICAgIChUeXBlLmluX3BhcmFtZXRlcl90eXBlKToKKyAgICAgICAg
KFR5cGUub3V0X3BhcmFtZXRlcl90eXBlKToKKyAgICAgICAgKFR5cGUudHlwZV9idWlsZGVyX3R5
cGUpOgorICAgICAgICAoT2JqZWN0VHlwZSk6CisgICAgICAgIChPYmplY3RUeXBlLl9faW5pdF9f
KToKKyAgICAgICAgKE9iamVjdFR5cGUudHlwZV9kb21haW4pOgorICAgICAgICAoT2JqZWN0VHlw
ZS50eXBlX21vZGUpOgorICAgICAgICAoT2JqZWN0VHlwZS5xdWFsaWZpZWRfbmFtZSk6CisgICAg
ICAgIChPYmplY3RUeXBlLnJlc29sdmVfdHlwZV9yZWZlcmVuY2VzKToKKyAgICAgICAgKE9iamVj
dFR5cGUuaW5fcGFyYW1ldGVyX3R5cGUpOgorICAgICAgICAoT2JqZWN0VHlwZS5vdXRfcGFyYW1l
dGVyX3R5cGUpOgorICAgICAgICAoT2JqZWN0VHlwZS50eXBlX2J1aWxkZXJfdHlwZSk6CisgICAg
ICAgIChQcmltaXRpdmVUeXBlKToKKyAgICAgICAgKFByaW1pdGl2ZVR5cGUuX19pbml0X18pOgor
ICAgICAgICAoUHJpbWl0aXZlVHlwZS50eXBlX2RvbWFpbik6CisgICAgICAgIChQcmltaXRpdmVU
eXBlLnR5cGVfbW9kZSk6CisgICAgICAgIChQcmltaXRpdmVUeXBlLnF1YWxpZmllZF9uYW1lKToK
KyAgICAgICAgKFByaW1pdGl2ZVR5cGUuaW5fcGFyYW1ldGVyX3R5cGUpOgorICAgICAgICAoUHJp
bWl0aXZlVHlwZS5vdXRfcGFyYW1ldGVyX3R5cGUpOgorICAgICAgICAoUHJpbWl0aXZlVHlwZS50
eXBlX2J1aWxkZXJfdHlwZSk6CisgICAgICAgIChQcmltaXRpdmVUeXBlLmNwcF9wcmltaXRpdmVf
bmFtZSk6CisgICAgICAgIChBbGlhc2VkVHlwZSk6CisgICAgICAgIChBbGlhc2VkVHlwZS5fX2lu
aXRfXyk6CisgICAgICAgIChBbGlhc2VkVHlwZS50eXBlX2RvbWFpbik6CisgICAgICAgIChBbGlh
c2VkVHlwZS50eXBlX21vZGUpOgorICAgICAgICAoQWxpYXNlZFR5cGUucXVhbGlmaWVkX25hbWUp
OgorICAgICAgICAoQWxpYXNlZFR5cGUucmVzb2x2ZV90eXBlX3JlZmVyZW5jZXMpOgorICAgICAg
ICAoQWxpYXNlZFR5cGUuaW5fcGFyYW1ldGVyX3R5cGUpOgorICAgICAgICAoQWxpYXNlZFR5cGUu
b3V0X3BhcmFtZXRlcl90eXBlKToKKyAgICAgICAgKEFsaWFzZWRUeXBlLnR5cGVfYnVpbGRlcl90
eXBlKToKKyAgICAgICAgKEVudW1UeXBlKToKKyAgICAgICAgKEVudW1UeXBlLl9faW5pdF9fKToK
KyAgICAgICAgKEVudW1UeXBlLmlzX2VudW0pOgorICAgICAgICAoRW51bVR5cGUudHlwZV9kb21h
aW4pOgorICAgICAgICAoRW51bVR5cGUudHlwZV9tb2RlKToKKyAgICAgICAgKEVudW1UeXBlLmVu
dW1fdmFsdWVzKToKKyAgICAgICAgKEVudW1UeXBlLnF1YWxpZmllZF9uYW1lKToKKyAgICAgICAg
KEVudW1UeXBlLnJlc29sdmVfdHlwZV9yZWZlcmVuY2VzKToKKyAgICAgICAgKEVudW1UeXBlLmlu
X3BhcmFtZXRlcl90eXBlKToKKyAgICAgICAgKEVudW1UeXBlLm91dF9wYXJhbWV0ZXJfdHlwZSk6
CisgICAgICAgIChFbnVtVHlwZS50eXBlX2J1aWxkZXJfdHlwZSk6CisgICAgICAgIChWZWN0b3JU
eXBlKToKKyAgICAgICAgKFZlY3RvclR5cGUuX19pbml0X18pOgorICAgICAgICAoVmVjdG9yVHlw
ZS50eXBlX2RvbWFpbik6CisgICAgICAgIChWZWN0b3JUeXBlLnR5cGVfbW9kZSk6CisgICAgICAg
IChWZWN0b3JUeXBlLnF1YWxpZmllZF9uYW1lKToKKyAgICAgICAgKFZlY3RvclR5cGUucmVzb2x2
ZV90eXBlX3JlZmVyZW5jZXMpOgorICAgICAgICAoVmVjdG9yVHlwZS5pbl9wYXJhbWV0ZXJfdHlw
ZSk6CisgICAgICAgIChWZWN0b3JUeXBlLm91dF9wYXJhbWV0ZXJfdHlwZSk6CisgICAgICAgIChW
ZWN0b3JUeXBlLnR5cGVfYnVpbGRlcl90eXBlKToKKyAgICAgICAgKGNoZWNrX2Zvcl9yZXF1aXJl
ZF9wcm9wZXJ0aWVzKToKKyAgICAgICAgKFByb3RvY29sKToKKyAgICAgICAgKFByb3RvY29sLl9f
aW5pdF9fKToKKyAgICAgICAgKFByb3RvY29sLnBhcnNlX3NwZWNpZmljYXRpb24pOgorICAgICAg
ICAoUHJvdG9jb2wucGFyc2VfZG9tYWluKToKKyAgICAgICAgKFByb3RvY29sLnBhcnNlX3R5cGVf
ZGVjbGFyYXRpb24pOgorICAgICAgICAoUHJvdG9jb2wucGFyc2VfdHlwZV9tZW1iZXIpOgorICAg
ICAgICAoUHJvdG9jb2wucGFyc2VfY29tbWFuZCk6CisgICAgICAgIChQcm90b2NvbC5wYXJzZV9l
dmVudCk6CisgICAgICAgIChQcm90b2NvbC5wYXJzZV9wYXJhbWV0ZXIpOgorICAgICAgICAoUHJv
dG9jb2wucmVzb2x2ZV90eXBlcyk6CisgICAgICAgIChQcm90b2NvbC5sb29rdXBfdHlwZV9mb3Jf
ZGVjbGFyYXRpb24pOgorICAgICAgICAoUHJvdG9jb2wubG9va3VwX3R5cGVfcmVmZXJlbmNlKToK
KyAgICAgICAgKERvbWFpbik6CisgICAgICAgIChEb21haW4uX19pbml0X18pOgorICAgICAgICAo
RG9tYWluLnJlc29sdmVfdHlwZV9yZWZlcmVuY2VzKToKKyAgICAgICAgKERvbWFpbnMpOgorICAg
ICAgICAoVHlwZURlY2xhcmF0aW9uKToKKyAgICAgICAgKFR5cGVEZWNsYXJhdGlvbi5fX2luaXRf
Xyk6CisgICAgICAgIChUeXBlRGVjbGFyYXRpb24ucmVzb2x2ZV90eXBlX3JlZmVyZW5jZXMpOgor
ICAgICAgICAoVHlwZU1lbWJlcik6CisgICAgICAgIChUeXBlTWVtYmVyLl9faW5pdF9fKToKKyAg
ICAgICAgKFR5cGVNZW1iZXIucmVzb2x2ZV90eXBlX3JlZmVyZW5jZXMpOgorICAgICAgICAoUGFy
YW1ldGVyKToKKyAgICAgICAgKFBhcmFtZXRlci5fX2luaXRfXyk6CisgICAgICAgIChQYXJhbWV0
ZXIucmVzb2x2ZV90eXBlX3JlZmVyZW5jZXMpOgorICAgICAgICAoQ29tbWFuZCk6CisgICAgICAg
IChDb21tYW5kLl9faW5pdF9fKToKKyAgICAgICAgKENvbW1hbmQucmVzb2x2ZV90eXBlX3JlZmVy
ZW5jZXMpOgorICAgICAgICAoRXZlbnQpOgorICAgICAgICAoRXZlbnQuX19pbml0X18pOgorICAg
ICAgICAoRXZlbnQucmVzb2x2ZV90eXBlX3JlZmVyZW5jZXMpOgorICAgICAgICAqIGluc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tZHVwbGljYXRlLXR5cGUtZGVjbGFyYXRp
b25zLmpzb24tZXJyb3I6IEFkZGVkLgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2V4cGVjdGVkL2ZhaWwtb24tdHlwZS1kZWNsYXJhdGlvbi11c2luZy10eXBlLXJlZmVyZW5jZS5q
c29uLWVycm9yOiBBZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBl
Y3RlZC9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1kZWNsYXJhdGlvbi5q
c29uLWVycm9yOiBBZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBl
Y3RlZC9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1tZW1iZXIuanNvbi1l
cnJvcjogQWRkZWQuCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQv
c2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbi1lcnJvcjogQWRkZWQuCisgICAgICAg
ICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1kdXBsaWNhdGUtdHlwZS1kZWNsYXJh
dGlvbnMuanNvbjogQWRkZWQuCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFp
bC1vbi10eXBlLWRlY2xhcmF0aW9uLXVzaW5nLXR5cGUtcmVmZXJlbmNlLmpzb246IEFkZGVkLgor
ICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tdW5rbm93bi10eXBlLXJl
ZmVyZW5jZS1pbi10eXBlLWRlY2xhcmF0aW9uLmpzb246IEFkZGVkLgorICAgICAgICAqIGluc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVyZW5jZS1pbi10eXBl
LW1lbWJlci5qc29uOiBBZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9z
YW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uOiBBZGRlZC4KKyAgICAgICAgKiBpbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy90eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5
cGUuanNvbjogQWRkZWQuCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvdHlwZS1k
ZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb246IEFkZGVkLgorICAgICAgICAqIGluc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL3R5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb246IEFkZGVkLgorCiAy
MDE0LTA0LTIwICBMw6FzemzDsyBMYW5nw7MgIDxsbGFuZ28udS1zemVnZWRAcGFydG5lci5zYW1z
dW5nLmNvbT4KIAogICAgICAgICBKYXZhU2NyaXB0Q29yZTogQVJNIGJ1aWxkIGZpeCBhZnRlciBy
MTY3MDk0LgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IyLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IyLnB5Cm5ldyBmaWxlIG1vZGUg
MTAwNzU1CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU1
NDVhZjRkYzhkZDlhYmI5MWZmOWEwM2QzNjVkMDI4NDhiNjI4ZWIKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvQ29kZUdlbmVyYXRvcklu
c3BlY3RvcjIucHkKQEAgLTAsMCArMSwxNjIgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIwor
IyBDb3B5cmlnaHQgKGMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBD
b3B5cmlnaHQgKGMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisj
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisjIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0
IG9zLnBhdGgKK2ltcG9ydCByZQoraW1wb3J0IHN5cworaW1wb3J0IHN0cmluZworZnJvbSBzdHJp
bmcgaW1wb3J0IFRlbXBsYXRlCitpbXBvcnQgb3B0cGFyc2UKK2ltcG9ydCBsb2dnaW5nCisKK3Ry
eToKKyAgICBpbXBvcnQganNvbgorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIGltcG9ydCBzaW1w
bGVqc29uIGFzIGpzb24KKworZnJvbSBjb2RlZ2VuIGltcG9ydCAqCisKKworIyBVc2UgYSBnbG9i
YWwgbG9nZ2VyLCB3aGljaCBub3JtYWxseSBvbmx5IGxvZ3MgZXJyb3JzLgorIyBJdCBjYW4gYmUg
Y29uZmlndXJlZCB0byBsb2cgZGVidWcgbWVzc2FnZXMgZnJvbSB0aGUgQ0xJLgorbG9nZ2luZy5i
YXNpY0NvbmZpZyhmb3JtYXQ9JyUobGV2ZWxuYW1lKXM6ICUobWVzc2FnZSlzJywgbGV2ZWw9bG9n
Z2luZy5FUlJPUikKK2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQorCisKKyMgQSB3
cml0ZXIgdGhhdCBvbmx5IHVwZGF0ZXMgZmlsZSBpZiBpdCBhY3R1YWxseSBjaGFuZ2VkLgorY2xh
c3MgSW5jcmVtZW50YWxGaWxlV3JpdGVyOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlcGF0
aCwgZm9yY2Vfb3V0cHV0KToKKyAgICAgICAgc2VsZi5fZmlsZXBhdGggPSBmaWxlcGF0aAorICAg
ICAgICBzZWxmLl9vdXRwdXQgPSAiIgorICAgICAgICBzZWxmLmZvcmNlX291dHB1dCA9IGZvcmNl
X291dHB1dAorCisgICAgZGVmIHdyaXRlKHNlbGYsIHRleHQpOgorICAgICAgICBzZWxmLl9vdXRw
dXQgKz0gdGV4dAorCisgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICB0ZXh0X2NoYW5nZWQg
PSBUcnVlCisgICAgICAgIHNlbGYuX291dHB1dCA9IHNlbGYuX291dHB1dC5yc3RyaXAoKSArICJc
biIKKworICAgICAgICB0cnk6CisgICAgICAgICAgICByZWFkX2ZpbGUgPSBvcGVuKHNlbGYuX2Zp
bGVwYXRoLCAiciIpCisgICAgICAgICAgICBvbGRfdGV4dCA9IHJlYWRfZmlsZS5yZWFkKCkKKyAg
ICAgICAgICAgIHJlYWRfZmlsZS5jbG9zZSgpCisgICAgICAgICAgICB0ZXh0X2NoYW5nZWQgPSBv
bGRfdGV4dCAhPSBzZWxmLl9vdXRwdXQKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgIyBJ
Z25vcmUsIGp1c3Qgb3ZlcndyaXRlIGJ5IGRlZmF1bHQKKyAgICAgICAgICAgIHBhc3MKKworICAg
ICAgICBpZiB0ZXh0X2NoYW5nZWQgb3Igc2VsZi5mb3JjZV9vdXRwdXQ6CisgICAgICAgICAgICBv
dXRfZmlsZSA9IG9wZW4oc2VsZi5fZmlsZXBhdGgsICJ3IikKKyAgICAgICAgICAgIG91dF9maWxl
LndyaXRlKHNlbGYuX291dHB1dCkKKyAgICAgICAgICAgIG91dF9maWxlLmNsb3NlKCkKKworCitk
ZWYgZ2VuZXJhdGVfZnJvbV9zcGVjaWZpY2F0aW9uKHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxl
cGF0aD1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdXBwbGVtZW50YWxf
c3BlY2lmaWNhdGlvbl9maWxlcGF0aHM9W10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbmNhdGVuYXRlX291dHB1dD1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgb3V0cHV0X2RpcnBhdGg9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZm9yY2Vfb3V0cHV0PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm
cmFtZXdvcmtfbmFtZT0iIik6CisKKyAgICBkZWYgbG9hZF9zcGVjaWZpY2F0aW9uKHByb3RvY29s
LCBmaWxlcGF0aCwgaXNTdXBwbGVtZW50YWw9RmFsc2UpOgorICAgICAgICB0cnk6CisgICAgICAg
ICAgICB3aXRoIG9wZW4oZmlsZXBhdGgsICJyIikgYXMgaW5wdXRfZmlsZToKKyAgICAgICAgICAg
ICAgICBwYXJzZWRfanNvbiA9IGpzb24ubG9hZChpbnB1dF9maWxlKQorICAgICAgICAgICAgICAg
IHByb3RvY29sLnBhcnNlX3NwZWNpZmljYXRpb24ocGFyc2VkX2pzb24sIGlzU3VwcGxlbWVudGFs
PWlzU3VwcGxlbWVudGFsKQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvciBhcyBlOgorICAgICAg
ICAgICAgcmFpc2UgRXhjZXB0aW9uKCJFcnJvciBwYXJzaW5nIHZhbGlkIEpTT04gaW4gZmlsZTog
IiArIGZpbGVwYXRoKQorCisgICAgcHJvdG9jb2wgPSBtb2RlbHMuUHJvdG9jb2woZnJhbWV3b3Jr
X25hbWUpCisgICAgZm9yIHNwZWNpZmljYXRpb24gaW4gc3VwcGxlbWVudGFsX3NwZWNpZmljYXRp
b25fZmlsZXBhdGhzOgorICAgICAgICBsb2FkX3NwZWNpZmljYXRpb24ocHJvdG9jb2wsIHNwZWNp
ZmljYXRpb24sIGlzU3VwcGxlbWVudGFsPVRydWUpCisgICAgbG9hZF9zcGVjaWZpY2F0aW9uKHBy
b3RvY29sLCBwcmltYXJ5X3NwZWNpZmljYXRpb25fZmlsZXBhdGgsIGlzU3VwcGxlbWVudGFsPUZh
bHNlKQorCisgICAgcHJvdG9jb2wucmVzb2x2ZV90eXBlcygpCisKKyAgICBnZW5lcmF0b3JzID0g
W10KKyAgICBnZW5lcmF0b3JzLmFwcGVuZChCYWNrZW5kQ29tbWFuZHNHZW5lcmF0b3IocHJvdG9j
b2wsIHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aCkpCisgICAgZ2VuZXJhdG9ycy5hcHBl
bmQoQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IocHJvdG9jb2wsIHByaW1hcnlfc3Bl
Y2lmaWNhdGlvbl9maWxlcGF0aCkpCisgICAgZ2VuZXJhdG9ycy5hcHBlbmQoQmFja2VuZERpc3Bh
dGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihwcm90b2NvbCwgcHJpbWFyeV9zcGVjaWZpY2F0
aW9uX2ZpbGVwYXRoKSkKKworICAgIHNpbmdsZV9vdXRwdXRfZmlsZV9jb250ZW50cyA9IFtdCisK
KyAgICBmb3IgZ2VuZXJhdG9yIGluIGdlbmVyYXRvcnM6CisgICAgICAgIG91dHB1dCA9IGdlbmVy
YXRvci5nZW5lcmF0ZV9vdXRwdXQoKQorICAgICAgICBpZiBjb25jYXRlbmF0ZV9vdXRwdXQ6Cisg
ICAgICAgICAgICBzaW5nbGVfb3V0cHV0X2ZpbGVfY29udGVudHMuYXBwZW5kKCcjIyMgQmVnaW4g
RmlsZTogJXMnICUgZ2VuZXJhdG9yLm91dHB1dF9maWxlbmFtZSgpKQorICAgICAgICAgICAgc2lu
Z2xlX291dHB1dF9maWxlX2NvbnRlbnRzLmFwcGVuZChvdXRwdXQpCisgICAgICAgICAgICBzaW5n
bGVfb3V0cHV0X2ZpbGVfY29udGVudHMuYXBwZW5kKCcjIyMgRW5kIEZpbGU6ICVzJyAlIGdlbmVy
YXRvci5vdXRwdXRfZmlsZW5hbWUoKSkKKyAgICAgICAgICAgIHNpbmdsZV9vdXRwdXRfZmlsZV9j
b250ZW50cy5hcHBlbmQoJycpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBvdXRwdXRfZmls
ZSA9IEluY3JlbWVudGFsRmlsZVdyaXRlcihvcy5wYXRoLmpvaW4ob3V0cHV0X2RpcnBhdGgsIGdl
bmVyYXRvci5vdXRwdXRfZmlsZW5hbWUoKSksIGZvcmNlX291dHB1dCkKKyAgICAgICAgICAgIG91
dHB1dF9maWxlLndyaXRlKG91dHB1dCkKKyAgICAgICAgICAgIG91dHB1dF9maWxlLmNsb3NlKCkK
KworICAgIGlmIGNvbmNhdGVuYXRlX291dHB1dDoKKyAgICAgICAgICAgIGZpbGVuYW1lID0gb3Mu
cGF0aC5qb2luKG9zLnBhdGguYmFzZW5hbWUocHJpbWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRo
KSArICctcmVzdWx0JykKKyAgICAgICAgICAgIG91dHB1dF9maWxlID0gSW5jcmVtZW50YWxGaWxl
V3JpdGVyKG9zLnBhdGguam9pbihvdXRwdXRfZGlycGF0aCwgZmlsZW5hbWUpLCBmb3JjZV9vdXRw
dXQpCisgICAgICAgICAgICBvdXRwdXRfZmlsZS53cml0ZSgnXG4nLmpvaW4oc2luZ2xlX291dHB1
dF9maWxlX2NvbnRlbnRzKSkKKyAgICAgICAgICAgIG91dHB1dF9maWxlLmNsb3NlKCkKKworCitp
ZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIGFsbG93ZWRfZnJhbWV3b3JrX25hbWVzID0g
WydXVEYnLCAnSmF2YVNjcmlwdENvcmUnLCAnV2ViQ29yZScsICdXZWJLaXQnLCAnV2ViS2l0Mics
ICdUZXN0J10KKyAgICBjbGlfcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKHVzYWdlPSJ1
c2FnZTogJXByb2cgW29wdGlvbnNdIFByaW1hcnlQcm90b2NvbC5qc29uIFtTdXBwbGVtZW50YWxQ
cm90b2NvbC5qc29uIC4uLl0iKQorICAgIGNsaV9wYXJzZXIuYWRkX29wdGlvbigiLW8iLCAiLS1v
dXRwdXREaXIiLCBoZWxwPSJEaXJlY3Rvcnkgd2hlcmUgZ2VuZXJhdGVkIGZpbGVzIHNob3VsZCBi
ZSB3cml0dGVuLiIpCisgICAgY2xpX3BhcnNlci5hZGRfb3B0aW9uKCItLWZyYW1ld29yayIsIHR5
cGU9ImNob2ljZSIsIGNob2ljZXM9YWxsb3dlZF9mcmFtZXdvcmtfbmFtZXMsIGhlbHA9IlRoZSBm
cmFtZXdvcmsgdGhhdCB0aGUgcHJpbWFyeSBzcGVjaWZpY2F0aW9uIGJlbG9uZ3MgdG8uIikKKyAg
ICBjbGlfcGFyc2VyLmFkZF9vcHRpb24oIi0tZm9yY2UiLCBhY3Rpb249InN0b3JlX3RydWUiLCBo
ZWxwPSJGb3JjZSBvdXRwdXQgb2YgZ2VuZXJhdGVkIHNjcmlwdHMsIGV2ZW4gaWYgbm90aGluZyBj
aGFuZ2VkLiIpCisgICAgY2xpX3BhcnNlci5hZGRfb3B0aW9uKCItdiIsICItLWRlYnVnIiwgYWN0
aW9uPSJzdG9yZV90cnVlIiwgaGVscD0iTG9nIGV4dHJhIG91dHB1dCBmb3IgZGVidWdnaW5nIHRo
ZSBnZW5lcmF0b3IgaXRzZWxmLiIpCisgICAgY2xpX3BhcnNlci5hZGRfb3B0aW9uKCItdCIsICIt
LXRlc3QiLCBhY3Rpb249InN0b3JlX3RydWUiLCBoZWxwPSJFbmFibGUgdGVzdCBtb2RlLiBVc2Ug
dW5pcXVlIG91dHB1dCBmaWxlbmFtZXMgY3JlYXRlZCBieSBwcmVwZW5kaW5nIHRoZSBpbnB1dCBm
aWxlbmFtZS4iKQorCisgICAgb3B0aW9ucyA9IE5vbmUKKworICAgIGFyZ19vcHRpb25zLCBhcmdf
dmFsdWVzID0gY2xpX3BhcnNlci5wYXJzZV9hcmdzKCkKKyAgICBpZiAobGVuKGFyZ192YWx1ZXMp
IDwgMSk6CisgICAgICAgIHJhaXNlIFBhcnNlRXhjZXB0aW9uKCJBdCBsZWFzdCBvbmUgcGxhaW4g
YXJndW1lbnQgZXhwZWN0ZWQiKQorCisgICAgaWYgbm90IGFyZ19vcHRpb25zLm91dHB1dERpcjoK
KyAgICAgICAgcmFpc2UgUGFyc2VFeGNlcHRpb24oIk1pc3Npbmcgb3V0cHV0IGRpcmVjdG9yeSIp
CisKKyAgICBpZiBhcmdfb3B0aW9ucy5kZWJ1ZzoKKyAgICAgICAgbG9nLnNldExldmVsKGxvZ2dp
bmcuREVCVUcpCisKKyAgICBvcHRpb25zID0geworICAgICAgICAncHJpbWFyeV9zcGVjaWZpY2F0
aW9uX2ZpbGVwYXRoJzogYXJnX3ZhbHVlc1swXSwKKyAgICAgICAgJ3N1cHBsZW1lbnRhbF9zcGVj
aWZpY2F0aW9uX2ZpbGVwYXRocyc6IGFyZ192YWx1ZXNbMTpdLAorICAgICAgICAnb3V0cHV0X2Rp
cnBhdGgnOiBhcmdfb3B0aW9ucy5vdXRwdXREaXIsCisgICAgICAgICdjb25jYXRlbmF0ZV9vdXRw
dXQnOiBhcmdfb3B0aW9ucy50ZXN0LAorICAgICAgICAnZnJhbWV3b3JrX25hbWUnOiBhcmdfb3B0
aW9ucy5mcmFtZXdvcmssCisgICAgICAgICdmb3JjZV9vdXRwdXQnOiBhcmdfb3B0aW9ucy5mb3Jj
ZQorICAgIH0KKworICAgIHRyeToKKyAgICAgICAgZ2VuZXJhdGVfZnJvbV9zcGVjaWZpY2F0aW9u
KCoqb3B0aW9ucykKKyAgICBleGNlcHQgKFBhcnNlRXhjZXB0aW9uLCBUeXBlY2hlY2tFeGNlcHRp
b24pIGFzIGU6CisgICAgICAgIGlmIGFyZ19vcHRpb25zLnRlc3Q6CisgICAgICAgICAgICBsb2cu
ZXJyb3IoZS5tZXNzYWdlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgICMgRm9y
Y2UgdGhlIGJ1aWxkIHRvIGZhaWwuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9fX2luaXRfXy5weSBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRj
ZWNiMGNlODRjYTI5Mjc1NDE0MmViNWQyMTg5ZWZhYWQ0OWQyMTcKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9fX2luaXRf
Xy5weQpAQCAtMCwwICsxLDggQEAKKyMgUmVxdWlyZWQgZm9yIFB5dGhvbiB0byBzZWFyY2ggdGhp
cyBkaXJlY3RvcnkgZm9yIG1vZHVsZSBmaWxlcworCitmcm9tIG1vZGVscyBpbXBvcnQgKgorZnJv
bSBnZW5lcmF0b3IgaW1wb3J0ICoKKworZnJvbSBnZW5lcmF0ZV9iYWNrZW5kX2NvbW1hbmRzIGlt
cG9ydCAqCitmcm9tIGdlbmVyYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIgaW1wb3J0ICoK
K2Zyb20gZ2VuZXJhdGVfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uIGltcG9ydCAq
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29k
ZWdlbi9nZW5lcmF0ZV9iYWNrZW5kX2NvbW1hbmRzLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfYmFja2VuZF9jb21tYW5kcy5weQpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5iNWI0YzJkYTk5YzJkNTgxZTFhYTc5MDk5ODRhYjYyZjM1ZjBjZjgyCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2Nv
ZGVnZW4vZ2VuZXJhdGVfYmFja2VuZF9jb21tYW5kcy5weQpAQCAtMCwwICsxLDEyOSBAQAorIyEv
dXNyL2Jpbi9lbnYgcHl0aG9uCisjIENvcHlyaWdodCAoYykgMjAxNCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoYykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyMgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisjIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisj
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyMgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorCisKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgb3MucGF0aAoraW1wb3J0IHJl
CitpbXBvcnQgc3RyaW5nCisKK2Zyb20gZ2VuZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IKK2Zyb20g
c3RyaW5nIGltcG9ydCBUZW1wbGF0ZQorZnJvbSBnZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBH
ZW5lcmF0b3JUZW1wbGF0ZXMgYXMgVGVtcGxhdGVzCisKKyMgVXNlIGEgZ2xvYmFsIGxvZ2dlciwg
d2hpY2ggbm9ybWFsbHkgb25seSBsb2dzIGVycm9ycy4KKyMgSXQgY2FuIGJlIGNvbmZpZ3VyZWQg
dG8gbG9nIGRlYnVnIG1lc3NhZ2VzIGZyb20gdGhlIENMSS4KK2xvZ2dpbmcuYmFzaWNDb25maWco
Zm9ybWF0PSclKGxldmVsbmFtZSlzOiAlKG1lc3NhZ2UpcycsIGxldmVsPWxvZ2dpbmcuRVJST1Ip
Citsb2cgPSBsb2dnaW5nLmdldExvZ2dlcignZ2xvYmFsJykKKworZGVmIG1ha2VfamF2YXNjcmlw
dF9pZGVudGlmaWVyKHJhd19pZGVudGlmaWVyKToKKyAgICAjIEVudW0gdmFsdWVzIGNvdWxkIGJl
IGludGVnZXIgbGl0ZXJhbHMsIHNvIGRvbid0IHRyeSB0byBjb252ZXJ0IHRob3NlLgorICAgIGlm
IG5vdCBpc2luc3RhbmNlKHJhd19pZGVudGlmaWVyLCBzdHIpOgorICAgICAgICByZXR1cm4KKwor
ICAgIEFMV0FZU19VUFBFUkNBU0VEX1NVQlNUUklOR1MgPSBbJ0FQSScsICdDU1MnLCAnRE9NJywg
J0hUTUwnLCAnWEhSJywgJ1hNTCddCisgICAgcmVnZXggPSAnKFx3KikoJXMpKFx3KiknICUgInwi
LmpvaW4oQUxXQVlTX1VQUEVSQ0FTRURfU1VCU1RSSU5HUykKKyAgICBkZWYgcmVwbGFjZUNhbGxi
YWNrKG1hdGNoKToKKyAgICAgICAgcmV0dXJuICIiLmpvaW4oW21hdGNoLmdyb3VwKDEpLCBtYXRj
aC5ncm91cCgyKS51cHBlcigpLCBtYXRjaC5ncm91cCgzKV0pCisKKyAgICAjIFNwbGl0IG9uIGh5
cGhlbiwgaW50cm9kdWNlIGNhbWVsY2FzZSwgYW5kIGZvcmNlIHVwcGVyY2FzaW5nIG9mIGFjcm9u
eW1zLgorICAgIHN1YndvcmRzID0gbWFwKGxhbWJkYSB4OiB4WzBdLnVwcGVyKCkgKyB4WzE6XSwg
cmF3X2lkZW50aWZpZXIuc3BsaXQoJy0nKSkKKyAgICByZXR1cm4gcmUuc3ViKHJlZ2V4LCByZXBs
YWNlQ2FsbGJhY2ssICIiLmpvaW4oc3Vid29yZHMpLCBmbGFncz1yZS5JR05PUkVDQVNFKQorCitj
bGFzcyBCYWNrZW5kQ29tbWFuZHNHZW5lcmF0b3IoR2VuZXJhdG9yKToKKyAgICBkZWYgX19pbml0
X18oc2VsZiwgbW9kZWwsIGlucHV0X2ZpbGVwYXRoKToKKyAgICAgICAgc2VsZi5fbW9kZWwgPSBt
b2RlbAorICAgICAgICBzZWxmLl9pbnB1dF9maWxlcGF0aCA9IGlucHV0X2ZpbGVwYXRoCisKKyAg
ICBkZWYgbW9kZWwoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9tb2RlbAorCisgICAgZGVm
IG91dHB1dF9maWxlbmFtZShzZWxmKToKKyAgICAgICAgcmV0dXJuICJJbnNwZWN0b3Ilc0JhY2tl
bmRDb21tYW5kcy5qcyIgJSBzZWxmLm1vZGVsKCkuZnJhbWV3b3JrLnNldHRpbmcoJ3ByZWZpeCcp
CisKKyAgICBkZWYgZ2VuZXJhdGVfbGljZW5zZShzZWxmKToKKyAgICAgICAgcmV0dXJuIFRlbXBs
YXRlKFRlbXBsYXRlcy5Db3B5cmlnaHRCbG9jaykuc3Vic3RpdHV0ZShOb25lLCBpbnB1dEZpbGVu
YW1lPW9zLnBhdGguYmFzZW5hbWUoc2VsZi5faW5wdXRfZmlsZXBhdGgpKQorCisgICAgZGVmIGdl
bmVyYXRlX291dHB1dChzZWxmKToKKyAgICAgICAgc2VjdGlvbnMgPSBbXQorICAgICAgICBzZWN0
aW9ucy5hcHBlbmQoc2VsZi5nZW5lcmF0ZV9saWNlbnNlKCkpCisgICAgICAgIHNlY3Rpb25zLmV4
dGVuZChbc2VsZi5nZW5lcmF0ZV9kb21haW4oZG9tYWluKSBmb3IgZG9tYWluIGluIGZpbHRlcihs
YW1iZGEgZG9tYWluOiBub3QgZG9tYWluLmlzX3N1cHBsZW1lbnRhbCwgc2VsZi5tb2RlbCgpLmRv
bWFpbnMpXSkKKyAgICAgICAgcmV0dXJuICJcblxuIi5qb2luKHNlY3Rpb25zKQorCisgICAgZGVm
IGdlbmVyYXRlX2RvbWFpbihzZWxmLCBkb21haW4pOgorICAgICAgICBsaW5lcyA9IFtdCisgICAg
ICAgIGFyZ3MgPSB7CisgICAgICAgICAgICAnZG9tYWluJzogZG9tYWluLmRvbWFpbl9uYW1lCisg
ICAgICAgIH0KKworICAgICAgICAjIFByZWFtYmxlCisgICAgICAgIGxpbmVzLmFwcGVuZCgnLy8g
JShkb21haW4pcy4nICUgYXJncykKKyAgICAgICAgbGluZXMuYXBwZW5kKCdJbnNwZWN0b3JCYWNr
ZW5kLnJlZ2lzdGVyJShkb21haW4pc0Rpc3BhdGNoZXIgPSBJbnNwZWN0b3JCYWNrZW5kLnJlZ2lz
dGVyRG9tYWluRGlzcGF0Y2hlci5iaW5kKEluc3BlY3RvckJhY2tlbmQsICIlKGRvbWFpbilzIik7
JyAlIGFyZ3MpCisKKyAgICAgICAgIyBFbnVtIFR5cGUgRGVjbGFyYXRpb25zCisgICAgICAgIGZv
ciBfZGVjbGFyYXRpb24gaW4gZG9tYWluLnR5cGVfZGVjbGFyYXRpb25zOgorICAgICAgICAgICAg
aWYgX2RlY2xhcmF0aW9uLnR5cGUuaXNfZW51bSgpOgorICAgICAgICAgICAgICAgIGVudW1fYXJn
cyA9IHsKKyAgICAgICAgICAgICAgICAgICAgJ2RvbWFpbic6IGRvbWFpbi5kb21haW5fbmFtZSwK
KyAgICAgICAgICAgICAgICAgICAgJ2VudW1OYW1lJzogX2RlY2xhcmF0aW9uLnR5cGVfbmFtZSwK
KyAgICAgICAgICAgICAgICAgICAgJ2VudW1NYXAnOiAiLCAiLmpvaW4oWyclczogIiVzIicgJSAo
bWFrZV9qYXZhc2NyaXB0X2lkZW50aWZpZXIoX3ZhbHVlKSwgX3ZhbHVlKSBmb3IgX3ZhbHVlIGlu
IF9kZWNsYXJhdGlvbi50eXBlLmVudW1fdmFsdWVzKCldKQorICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFbnVt
KCIlKGRvbWFpbilzLiUoZW51bU5hbWUpcyIsIHslKGVudW1NYXApc307JyAlIGVudW1fYXJncykK
KworICAgICAgICAgICAgZm9yIF9tZW1iZXIgaW4gZmlsdGVyKGxhbWJkYSB4OiB4LnR5cGUuaXNf
ZW51bSgpLCBfZGVjbGFyYXRpb24udHlwZV9tZW1iZXJzKToKKyAgICAgICAgICAgICAgICBlbnVt
X2FyZ3MgPSB7CisgICAgICAgICAgICAgICAgICAgICdkb21haW4nOiBkb21haW4uZG9tYWluX25h
bWUsCisgICAgICAgICAgICAgICAgICAgICdlbnVtTmFtZSc6ICclcyVzJyAlIChfZGVjbGFyYXRp
b24udHlwZV9uYW1lLCBfbWVtYmVyLm1lbWJlcl9uYW1lLmNhcGl0YWxpemUoKSksCisgICAgICAg
ICAgICAgICAgICAgICdlbnVtTWFwJzogIiwgIi5qb2luKFsnJXM6ICIlcyInICUgKG1ha2VfamF2
YXNjcmlwdF9pZGVudGlmaWVyKF92YWx1ZSksIF92YWx1ZSkgZm9yIF92YWx1ZSBpbiBfbWVtYmVy
LnR5cGUuZW51bV92YWx1ZXMoKV0pCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGxpbmVzLmFwcGVuZCgnSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckVudW0oIiUoZG9tYWluKXMu
JShlbnVtTmFtZSlzIiwgeyUoZW51bU1hcClzfTsnICUgZW51bV9hcmdzKQorCisgICAgICAgICMg
RXZlbnRzCisgICAgICAgIGZvciBfZXZlbnQgaW4gZG9tYWluLmV2ZW50czoKKyAgICAgICAgICAg
IGV2ZW50X2FyZ3MgPSB7CisgICAgICAgICAgICAgICAgJ2RvbWFpbic6IGRvbWFpbi5kb21haW5f
bmFtZSwKKyAgICAgICAgICAgICAgICAnZXZlbnROYW1lJzogX2V2ZW50LmV2ZW50X25hbWUsCisg
ICAgICAgICAgICAgICAgJ3BhcmFtcyc6ICIsICIuam9pbihbJyIlcyInICUgX3BhcmFtZXRlci5w
YXJhbWV0ZXJfbmFtZSBmb3IgX3BhcmFtZXRlciBpbiBfZXZlbnQuZXZlbnRfcGFyYW1ldGVyc10p
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ0luc3BlY3RvckJhY2tl
bmQucmVnaXN0ZXJFdmVudCgiJShkb21haW4pcy4lKGV2ZW50TmFtZSlzIiwgWyUocGFyYW1zKXNd
KTsnICUgZXZlbnRfYXJncykKKworICAgICAgICAjIENvbW1hbmRzCisgICAgICAgIGZvciBfY29t
bWFuZCBpbiBkb21haW4uY29tbWFuZHM6CisgICAgICAgICAgICBkZWYgZ2VuZXJhdGVfcGFyYW1l
dGVyX29iamVjdChwYXJhbWV0ZXIpOgorICAgICAgICAgICAgICAgIHBhaXJzID0gW10KKyAgICAg
ICAgICAgICAgICBwYWlycy5hcHBlbmQoJyJuYW1lIjogIiVzIicgJSBfcGFyYW1ldGVyLnBhcmFt
ZXRlcl9uYW1lKQorICAgICAgICAgICAgICAgIHBhaXJzLmFwcGVuZCgnInR5cGUiOiAiJXMiJyAl
IF9wYXJhbWV0ZXIudHlwZV9yZWYudHlwZV9raW5kKQorICAgICAgICAgICAgICAgIHBhaXJzLmFw
cGVuZCgnIm9wdGlvbmFsIjogJXMnICUgInRydWUiIGlmIF9wYXJhbWV0ZXIuaXNfb3B0aW9uYWwg
ZWxzZSAiZmFsc2UiKQorICAgICAgICAgICAgICAgIHJldHVybiAiLCAiLmpvaW4ocGFpcnMpCisK
KyAgICAgICAgICAgIGNvbW1hbmRfYXJncyA9IHsKKyAgICAgICAgICAgICAgICAnZG9tYWluJzog
ZG9tYWluLmRvbWFpbl9uYW1lLAorICAgICAgICAgICAgICAgICdjb21tYW5kTmFtZSc6IF9jb21t
YW5kLmNvbW1hbmRfbmFtZSwKKyAgICAgICAgICAgICAgICAnY2FsbFBhcmFtcyc6ICIsICIuam9p
bihbZ2VuZXJhdGVfcGFyYW1ldGVyX29iamVjdChfcGFyYW1ldGVyKSBmb3IgX3BhcmFtZXRlciBp
biBfY29tbWFuZC5jYWxsX3BhcmFtZXRlcnNdKSwKKyAgICAgICAgICAgICAgICAncmV0dXJuUGFy
YW1zJzogIiwgIi5qb2luKFtnZW5lcmF0ZV9wYXJhbWV0ZXJfb2JqZWN0KF9wYXJhbWV0ZXIpIGZv
ciBfcGFyYW1ldGVyIGluIF9jb21tYW5kLnJldHVybl9wYXJhbWV0ZXJzXSksCisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJD
b21tYW5kKCIlKGRvbWFpbilzLiUoY29tbWFuZE5hbWUpcyIsIFslKGNhbGxQYXJhbXMpc10sIFsl
KHJldHVyblBhcmFtcylzXSk7JyAlIGNvbW1hbmRfYXJncykKKworICAgICAgICByZXR1cm4gIlxu
Ii5qb2luKGxpbmVzKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weSBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRl
X2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjBkZDRkOTI2M2YyYTgy
Yjk1ZjdlMmM3MGRlZTUyYmExZmEyY2I1YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2JhY2tlbmRfZGlz
cGF0Y2hlcl9oZWFkZXIucHkKQEAgLTAsMCArMSwxNjQgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhv
bgorIyBDb3B5cmlnaHQgKGMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
IyBDb3B5cmlnaHQgKGMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
IyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisjIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworCitp
bXBvcnQgbG9nZ2luZworaW1wb3J0IG9zLnBhdGgKK2ltcG9ydCByZQoraW1wb3J0IHN0cmluZwor
Citmcm9tIGdlbmVyYXRvciBpbXBvcnQgR2VuZXJhdG9yLCB1Y2ZpcnN0Citmcm9tIHN0cmluZyBp
bXBvcnQgVGVtcGxhdGUKK2Zyb20gZ2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgR2VuZXJhdG9y
VGVtcGxhdGVzIGFzIFRlbXBsYXRlcworCisjIFVzZSBhIGdsb2JhbCBsb2dnZXIsIHdoaWNoIG5v
cm1hbGx5IG9ubHkgbG9ncyBlcnJvcnMuCisjIEl0IGNhbiBiZSBjb25maWd1cmVkIHRvIGxvZyBk
ZWJ1ZyBtZXNzYWdlcyBmcm9tIHRoZSBDTEkuCitsb2cgPSBsb2dnaW5nLmdldExvZ2dlcignZ2xv
YmFsJykKKworCitjbGFzcyBCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvcihHZW5lcmF0
b3IpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpOgorICAg
ICAgICBzZWxmLl9tb2RlbCA9IG1vZGVsCisgICAgICAgIHNlbGYuX2lucHV0X2ZpbGVwYXRoID0g
aW5wdXRfZmlsZXBhdGgKKworICAgIGRlZiBtb2RlbChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNl
bGYuX21vZGVsCisKKyAgICBkZWYgb3V0cHV0X2ZpbGVuYW1lKHNlbGYpOgorICAgICAgICByZXR1
cm4gIkluc3BlY3RvciVzQmFja2VuZERpc3BhdGNoZXJzLmgiICUgc2VsZi5tb2RlbCgpLmZyYW1l
d29yay5zZXR0aW5nKCdwcmVmaXgnKQorCisgICAgZGVmIGdlbmVyYXRlX2xpY2Vuc2Uoc2VsZik6
CisgICAgICAgIHJldHVybiBUZW1wbGF0ZShUZW1wbGF0ZXMuQ29weXJpZ2h0QmxvY2spLnN1YnN0
aXR1dGUoTm9uZSwgaW5wdXRGaWxlbmFtZT1vcy5wYXRoLmJhc2VuYW1lKHNlbGYuX2lucHV0X2Zp
bGVwYXRoKSkKKworICAgIGRlZiBnZW5lcmF0ZV9vdXRwdXQoc2VsZik6CisgICAgICAgIHNlY3Rp
b25zID0gW10KKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfbGljZW5zZSgp
KQorICAgICAgICBoZWFkZXJfYXJncyA9IHsKKyAgICAgICAgICAgICdoZWFkZXJHdWFyZFN0cmlu
Zyc6IHJlLnN1YignWy0uL10nLCAnXycsIHNlbGYub3V0cHV0X2ZpbGVuYW1lKCkpLAorICAgICAg
ICAgICAgJ2ZyYW1ld29ya1ByZWZpeCc6IHNlbGYubW9kZWwoKS5mcmFtZXdvcmsuc2V0dGluZygn
cHJlZml4JyksCisgICAgICAgICAgICAnaW5wdXRGaWxlbmFtZSc6IHNlbGYuX2lucHV0X2ZpbGVw
YXRoCisKKyAgICAgICAgfQorCisgICAgICAgIGRlZiBzaG91bGRfZ2VuZXJhdGVfZG9tYWluKGRv
bWFpbik6CisgICAgICAgICAgICByZXR1cm4gbGVuKGRvbWFpbi5jb21tYW5kcykgPiAwIGFuZCBu
b3QgZG9tYWluLmlzX3N1cHBsZW1lbnRhbAorCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1w
bGF0ZShUZW1wbGF0ZXMuRGlzcGF0Y2hlckhlYWRlclByZWx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwg
KipoZWFkZXJfYXJncykpCisgICAgICAgIHNlY3Rpb25zLmV4dGVuZChbc2VsZi5nZW5lcmF0ZV9k
b21haW5faGFuZGxlcihkb21haW4pIGZvciBkb21haW4gaW4gZmlsdGVyKHNob3VsZF9nZW5lcmF0
ZV9kb21haW4sIHNlbGYubW9kZWwoKS5kb21haW5zKV0pCisgICAgICAgIHNlY3Rpb25zLmV4dGVu
ZChbc2VsZi5nZW5lcmF0ZV9kb21haW5fZGlzcGF0Y2hlcihkb21haW4pIGZvciBkb21haW4gaW4g
ZmlsdGVyKHNob3VsZF9nZW5lcmF0ZV9kb21haW4sIHNlbGYubW9kZWwoKS5kb21haW5zKV0pCisg
ICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMuRGlzcGF0Y2hlckhlYWRl
clBvc3RsdWRlKS5zdWJzdGl0dXRlKE5vbmUsICoqaGVhZGVyX2FyZ3MpKQorICAgICAgICByZXR1
cm4gIlxuXG4iLmpvaW4oc2VjdGlvbnMpCisKKyAgICBkZWYgZ2VuZXJhdGVfZG9tYWluX2hhbmRs
ZXIoc2VsZiwgZG9tYWluKToKKyAgICAgICAgbGluZXMgPSBbXQorICAgICAgICBkb21haW5fZ3Vh
cmQgPSBHZW5lcmF0b3IuY3BwX2d1YXJkX2Zvcl9kb21haW4oZG9tYWluKQorICAgICAgICBpZiBk
b21haW5fZ3VhcmQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoIiNpZiAl
cyIgJSBkb21haW5fZ3VhcmQpCisKKyAgICAgICAgY2xhc3NDb21wb25lbnRzID0gWydjbGFzcydd
CisgICAgICAgIGV4cG9ydE1hY3JvID0gc2VsZi5tb2RlbCgpLmZyYW1ld29yay5zZXR0aW5nKCdl
eHBvcnRfbWFjcm8nLCBOb25lKQorICAgICAgICBpZiBleHBvcnRNYWNybyBpcyBub3QgTm9uZToK
KyAgICAgICAgICAgIGNsYXNzQ29tcG9uZW50cy5hcHBlbmQoZXhwb3J0TWFjcm8pCisKKyAgICAg
ICAgaGFuZGxlcl9hcmdzID0geworICAgICAgICAgICAgJ2NsYXNzQW5kRXhwb3J0TWFjcm8nOiAi
ICIuam9pbihjbGFzc0NvbXBvbmVudHMpLAorICAgICAgICAgICAgJ2RvbWFpbk5hbWUnOiBkb21h
aW4uZG9tYWluX25hbWUsCisgICAgICAgICAgICAnY29tbWFuZERlY2xhcmF0aW9ucyc6ICJcbiIu
am9pbihbc2VsZi5nZW5lcmF0ZV9oYW5kbGVyX2NvbW1hbmQoY29tbWFuZCkgZm9yIGNvbW1hbmQg
aW4gZG9tYWluLmNvbW1hbmRzXSkKKyAgICAgICAgfQorCisgICAgICAgIGxpbmVzLmFwcGVuZChU
ZW1wbGF0ZShUZW1wbGF0ZXMuRGlzcGF0Y2hIZWFkZXJEb21haW5IYW5kbGVyRGVjbGFyYXRpb24p
LnN1YnN0aXR1dGUoTm9uZSwgKipoYW5kbGVyX2FyZ3MpKQorICAgICAgICBpZiBkb21haW5fZ3Vh
cmQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoIiNlbmRpZiAvLyAlcyIg
JSBkb21haW5fZ3VhcmQpCisgICAgICAgIHJldHVybiAiXG4iLmpvaW4obGluZXMpCisKKyAgICBk
ZWYgZ2VuZXJhdGVfaGFuZGxlcl9jb21tYW5kKHNlbGYsIGNvbW1hbmQpOgorICAgICAgICBpZiBj
b21tYW5kLmlzX2FzeW5jOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuZ2VuZXJhdGVfYXN5bmNf
aGFuZGxlcl9jb21tYW5kKGNvbW1hbmQpCisKKyAgICAgICAgcGFyYW1ldGVycyA9IFsnRXJyb3JT
dHJpbmcqJ10KKyAgICAgICAgZm9yIF9wYXJhbWV0ZXIgaW4gY29tbWFuZC5jYWxsX3BhcmFtZXRl
cnM6CisgICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZCgiJXMgaW5fJXMiICUgKEdlbmVyYXRv
ci5jYWxsX3BhcmFtZXRlcl90eXBlX2Zvcl90eXBlKF9wYXJhbWV0ZXIudHlwZSwgX3BhcmFtZXRl
ci5pc19vcHRpb25hbCksIF9wYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpKQorCisgICAgICAgIGZv
ciBfcGFyYW1ldGVyIGluIGNvbW1hbmQucmV0dXJuX3BhcmFtZXRlcnM6CisgICAgICAgICAgICBv
cHRpb25hbF9wcmVmaXggPSAnb3B0XycgaWYgX3BhcmFtZXRlci5pc19vcHRpb25hbCBlbHNlICcn
CisgICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZCgiJXMgJXNvdXRfJXMiICUgKEdlbmVyYXRv
ci5yZXR1cm5fcGFyYW1ldGVyX3R5cGVfZm9yX3R5cGUoX3BhcmFtZXRlci50eXBlLCBfcGFyYW1l
dGVyLmlzX29wdGlvbmFsKSwgb3B0aW9uYWxfcHJlZml4LCBfcGFyYW1ldGVyLnBhcmFtZXRlcl9u
YW1lKSkKKworICAgICAgICBjb21tYW5kX2FyZ3MgPSB7CisgICAgICAgICAgICAnY29tbWFuZE5h
bWUnOiBjb21tYW5kLmNvbW1hbmRfbmFtZSwKKyAgICAgICAgICAgICdwYXJhbWV0ZXJzJzogIiwg
Ii5qb2luKHBhcmFtZXRlcnMpCisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuICIgICAgdmlydHVh
bCB2b2lkICUoY29tbWFuZE5hbWUpcyglKHBhcmFtZXRlcnMpcykgPSAwOyIgJSBjb21tYW5kX2Fy
Z3MKKworICAgIGRlZiBnZW5lcmF0ZV9hc3luY19oYW5kbGVyX2NvbW1hbmQoc2VsZiwgY29tbWFu
ZCk6CisgICAgICAgIGNhbGxiYWNrTmFtZSA9ICIlc0NhbGxiYWNrIiAlIHVjZmlyc3QoY29tbWFu
ZC5jb21tYW5kX25hbWUpCisKKyAgICAgICAgaW5fcGFyYW1ldGVycyA9IFsnRXJyb3JTdHJpbmcq
J10KKyAgICAgICAgZm9yIF9wYXJhbWV0ZXIgaW4gY29tbWFuZC5jYWxsX3BhcmFtZXRlcnM6Cisg
ICAgICAgICAgICBpbl9wYXJhbWV0ZXJzLmFwcGVuZCgiJXMgaW5fJXMiICUgKEdlbmVyYXRvci5j
YWxsX3BhcmFtZXRlcl90eXBlX2Zvcl90eXBlKF9wYXJhbWV0ZXIudHlwZSwgX3BhcmFtZXRlci5p
c19vcHRpb25hbCksIF9wYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpKQorICAgICAgICBpbl9wYXJh
bWV0ZXJzLmFwcGVuZCgiUGFzc1JlZlB0cjwlcz4gY2FsbGJhY2siICUgY2FsbGJhY2tOYW1lKQor
CisgICAgICAgIG91dF9wYXJhbWV0ZXJzID0gW10KKyAgICAgICAgZm9yIF9wYXJhbWV0ZXIgaW4g
Y29tbWFuZC5yZXR1cm5fcGFyYW1ldGVyczoKKyAgICAgICAgICAgIG9wdGlvbmFsX3ByZWZpeCA9
ICdvcHRfJyBpZiBfcGFyYW1ldGVyLmlzX29wdGlvbmFsIGVsc2UgJycKKyAgICAgICAgICAgIG91
dF9wYXJhbWV0ZXJzLmFwcGVuZCgiJXMgJXMlcyIgJSAoR2VuZXJhdG9yLmNhbGxfcGFyYW1ldGVy
X3R5cGVfZm9yX3R5cGUoX3BhcmFtZXRlci50eXBlLCBfcGFyYW1ldGVyLmlzX29wdGlvbmFsKSwg
b3B0aW9uYWxfcHJlZml4LCBfcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKSkKKworICAgICAgICBj
b21tYW5kX2FyZ3MgPSB7CisgICAgICAgICAgICAnY2FsbGJhY2tOYW1lJzogY2FsbGJhY2tOYW1l
LAorICAgICAgICAgICAgJ2NvbW1hbmROYW1lJzogY29tbWFuZC5jb21tYW5kX25hbWUsCisgICAg
ICAgICAgICAnaW5QYXJhbWV0ZXJzJzogIiwgIi5qb2luKGluX3BhcmFtZXRlcnMpLAorICAgICAg
ICAgICAgJ291dFBhcmFtZXRlcnMnOiAiLCAiLmpvaW4ob3V0X3BhcmFtZXRlcnMpLAorICAgICAg
ICB9CisKKyAgICAgICAgcmV0dXJuIFRlbXBsYXRlKFRlbXBsYXRlcy5EaXNwYXRjaEhlYWRlckFz
eW5jQ29tbWFuZERlY2xhcmF0aW9uKS5zdWJzdGl0dXRlKE5vbmUsICoqY29tbWFuZF9hcmdzKQor
CisgICAgZGVmIGdlbmVyYXRlX2RvbWFpbl9kaXNwYXRjaGVyKHNlbGYsIGRvbWFpbik6CisgICAg
ICAgIGxpbmVzID0gW10KKyAgICAgICAgZG9tYWluX2d1YXJkID0gR2VuZXJhdG9yLmNwcF9ndWFy
ZF9mb3JfZG9tYWluKGRvbWFpbikKKyAgICAgICAgaWYgZG9tYWluX2d1YXJkIGlzIG5vdCBOb25l
OgorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCIjaWYgJXMiICUgZG9tYWluX2d1YXJkKQorCisg
ICAgICAgIGNsYXNzQ29tcG9uZW50cyA9IFsnY2xhc3MnXQorICAgICAgICBleHBvcnRNYWNybyA9
IHNlbGYubW9kZWwoKS5mcmFtZXdvcmsuc2V0dGluZygnZXhwb3J0X21hY3JvJywgTm9uZSkKKyAg
ICAgICAgaWYgZXhwb3J0TWFjcm8gaXMgbm90IE5vbmU6CisgICAgICAgICAgICBjbGFzc0NvbXBv
bmVudHMuYXBwZW5kKGV4cG9ydE1hY3JvKQorCisgICAgICAgIGRlY2xhcmF0aW9ucyA9IFtdCisg
ICAgICAgIGlmIGxlbihkb21haW4uY29tbWFuZHMpID4gMDoKKyAgICAgICAgICAgIGRlY2xhcmF0
aW9ucy5hcHBlbmQoJ3ByaXZhdGU6JykKKyAgICAgICAgZGVjbGFyYXRpb25zLmV4dGVuZChbc2Vs
Zi5nZW5lcmF0ZV9kaXNwYXRjaGVyX2NvbW1hbmQoY29tbWFuZCkgZm9yIGNvbW1hbmQgaW4gZG9t
YWluLmNvbW1hbmRzXSkKKworICAgICAgICBoYW5kbGVyX2FyZ3MgPSB7CisgICAgICAgICAgICAn
Y2xhc3NBbmRFeHBvcnRNYWNybyc6ICIgIi5qb2luKGNsYXNzQ29tcG9uZW50cyksCisgICAgICAg
ICAgICAnZG9tYWluTmFtZSc6IGRvbWFpbi5kb21haW5fbmFtZSwKKyAgICAgICAgICAgICdjb21t
YW5kRGVjbGFyYXRpb25zJzogIlxuIi5qb2luKGRlY2xhcmF0aW9ucykKKyAgICAgICAgfQorCisg
ICAgICAgIGxpbmVzLmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMuRGlzcGF0Y2hIZWFkZXJEb21h
aW5EaXNwYXRjaGVyRGVjbGFyYXRpb24pLnN1YnN0aXR1dGUoTm9uZSwgKipoYW5kbGVyX2FyZ3Mp
KQorICAgICAgICBpZiBkb21haW5fZ3VhcmQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBsaW5l
cy5hcHBlbmQoIiNlbmRpZiAvLyAlcyIgJSBkb21haW5fZ3VhcmQpCisgICAgICAgIHJldHVybiAi
XG4iLmpvaW4obGluZXMpCisKKyAgICBkZWYgZ2VuZXJhdGVfZGlzcGF0Y2hlcl9jb21tYW5kKHNl
bGYsIGNvbW1hbmQpOgorICAgICAgICByZXR1cm4gIiAgICB2b2lkICVzKGxvbmcgY2FsbElkLCBj
b25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7IiAlIGNvbW1hbmQuY29t
bWFuZF9uYW1lCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24u
cHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5l
cmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjk2
ZjIyNGU0ZTg2NjIyZWNhOGEzNmQ1MDQ0YzBkMjczYmNlNTE4OAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRl
X2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQpAQCAtMCwwICsxLDI4NyBAQAor
IyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIENvcHlyaWdodCAoYykgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoYykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyMgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisjIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyMgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorCisKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgb3MucGF0aAoraW1wb3J0
IHJlCitpbXBvcnQgc3RyaW5nCisKK2Zyb20gZ2VuZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IsIHVj
Zmlyc3QKK2Zyb20gc3RyaW5nIGltcG9ydCBUZW1wbGF0ZQorZnJvbSBnZW5lcmF0b3JfdGVtcGxh
dGVzIGltcG9ydCBHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgVGVtcGxhdGVzCitmcm9tIG1vZGVscyBp
bXBvcnQgT2JqZWN0VHlwZSwgQXJyYXlUeXBlCisKKyMgVXNlIGEgZ2xvYmFsIGxvZ2dlciwgd2hp
Y2ggbm9ybWFsbHkgb25seSBsb2dzIGVycm9ycy4KK2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdn
bG9iYWwnKQorCisKK2NsYXNzIEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0
b3IoR2VuZXJhdG9yKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbW9kZWwsIGlucHV0X2ZpbGVw
YXRoKToKKyAgICAgICAgc2VsZi5fbW9kZWwgPSBtb2RlbAorICAgICAgICBzZWxmLl9pbnB1dF9m
aWxlcGF0aCA9IGlucHV0X2ZpbGVwYXRoCisKKyAgICBkZWYgbW9kZWwoc2VsZik6CisgICAgICAg
IHJldHVybiBzZWxmLl9tb2RlbAorCisgICAgZGVmIG91dHB1dF9maWxlbmFtZShzZWxmKToKKyAg
ICAgICAgcmV0dXJuICJJbnNwZWN0b3Ilc0JhY2tlbmREaXNwYXRjaGVycy5jcHAiICUgc2VsZi5t
b2RlbCgpLmZyYW1ld29yay5zZXR0aW5nKCdwcmVmaXgnKQorCisgICAgZGVmIGdlbmVyYXRlX2xp
Y2Vuc2Uoc2VsZik6CisgICAgICAgIHJldHVybiBUZW1wbGF0ZShUZW1wbGF0ZXMuQ29weXJpZ2h0
QmxvY2spLnN1YnN0aXR1dGUoTm9uZSwgaW5wdXRGaWxlbmFtZT1vcy5wYXRoLmJhc2VuYW1lKHNl
bGYuX2lucHV0X2ZpbGVwYXRoKSkKKworICAgIGRlZiBnZW5lcmF0ZV9vdXRwdXQoc2VsZik6Cisg
ICAgICAgIHNlY3Rpb25zID0gW10KKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2VuZXJh
dGVfbGljZW5zZSgpKQorICAgICAgICBoZWFkZXJfYXJncyA9IHsKKyAgICAgICAgICAgICdmcmFt
ZXdvcmtQcmVmaXgnOiBzZWxmLm1vZGVsKCkuZnJhbWV3b3JrLnNldHRpbmcoJ3ByZWZpeCcpLAor
ICAgICAgICAgICAgJ2lucHV0RmlsZW5hbWUnOiBzZWxmLl9pbnB1dF9maWxlcGF0aAorICAgICAg
ICB9CisKKyAgICAgICAgZGVmIHNob3VsZF9nZW5lcmF0ZV9kb21haW4oZG9tYWluKToKKyAgICAg
ICAgICAgIHJldHVybiBsZW4oZG9tYWluLmNvbW1hbmRzKSA+IDAgYW5kIG5vdCBkb21haW4uaXNf
c3VwcGxlbWVudGFsCisKKyAgICAgICAgaW5jbHVkZWRfZG9tYWlucyA9IGZpbHRlcihzaG91bGRf
Z2VuZXJhdGVfZG9tYWluLCBzZWxmLm1vZGVsKCkuZG9tYWlucykKKworICAgICAgICBzZWN0aW9u
cy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVzLkRpc3BhdGNoZXJJbXBsZW1lbnRhdGlvblByZWx1
ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCisgICAgICAgIHNlY3Rpb25zLmFw
cGVuZCgiXG4iLmpvaW4oW3NlbGYuZ2VuZXJhdGVfZG9tYWluX2hhbmRsZXJfZGVzdHJ1Y3Rvcihk
b21haW4pIGZvciBkb21haW4gaW4gaW5jbHVkZWRfZG9tYWluc10pKQorICAgICAgICBzZWN0aW9u
cy5leHRlbmQoW3NlbGYuZ2VuZXJhdGVfZG9tYWluX2Rpc3BhdGNoZXIoZG9tYWluKSBmb3IgZG9t
YWluIGluIGluY2x1ZGVkX2RvbWFpbnNdKQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxh
dGUoVGVtcGxhdGVzLkRpc3BhdGNoZXJJbXBsZW1lbnRhdGlvblBvc3RsdWRlKS5zdWJzdGl0dXRl
KE5vbmUsICoqaGVhZGVyX2FyZ3MpKQorICAgICAgICByZXR1cm4gIlxuXG4iLmpvaW4oc2VjdGlv
bnMpCisKKyAgICBkZWYgZ2VuZXJhdGVfZG9tYWluX2hhbmRsZXJfZGVzdHJ1Y3RvcihzZWxmLCBk
b21haW4pOgorICAgICAgICBsaW5lcyA9IFtdCisgICAgICAgIGRlc3RydWN0b3JfYXJncyA9IHsK
KyAgICAgICAgICAgICdkb21haW5OYW1lJzogZG9tYWluLmRvbWFpbl9uYW1lCisgICAgICAgIH0K
KyAgICAgICAgZG9tYWluX2d1YXJkID0gR2VuZXJhdG9yLmNwcF9ndWFyZF9mb3JfZG9tYWluKGRv
bWFpbikKKyAgICAgICAgaWYgZG9tYWluX2d1YXJkIGlzIG5vdCBOb25lOgorICAgICAgICAgICAg
bGluZXMuYXBwZW5kKCcjaWYgJXMnICUgZG9tYWluX2d1YXJkKQorICAgICAgICBsaW5lcy5hcHBl
bmQoJ0luc3BlY3RvciUoZG9tYWluTmFtZSlzQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjp+SW5z
cGVjdG9yJShkb21haW5OYW1lKXNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKSB7IH0nICUgZGVz
dHJ1Y3Rvcl9hcmdzKQorICAgICAgICBpZiBkb21haW5fZ3VhcmQgaXMgbm90IE5vbmU6CisgICAg
ICAgICAgICBsaW5lcy5hcHBlbmQoJyNlbmRpZiAvLyAlcycgJSBkb21haW5fZ3VhcmQpCisKKyAg
ICAgICAgcmV0dXJuICJcbiIuam9pbihsaW5lcykKKworICAgIGRlZiBnZW5lcmF0ZV9kb21haW5f
ZGlzcGF0Y2hlcihzZWxmLCBkb21haW4pOgorICAgICAgICBsaW5lcyA9IFtdCisgICAgICAgIGRv
bWFpbl9ndWFyZCA9IEdlbmVyYXRvci5jcHBfZ3VhcmRfZm9yX2RvbWFpbihkb21haW4pCisgICAg
ICAgIGlmIGRvbWFpbl9ndWFyZCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGxpbmVzLmFwcGVu
ZCgiI2lmICVzIiAlIGRvbWFpbl9ndWFyZCkKKworICAgICAgICBpbXBsZW1lbnRhdGlvbnMgPSBb
XQorCisgICAgICAgIGNvbnN0cnVjdG9yX2FyZ3MgPSB7CisgICAgICAgICAgICAnZG9tYWluTmFt
ZSc6IGRvbWFpbi5kb21haW5fbmFtZSwKKyAgICAgICAgfQorICAgICAgICBpbXBsZW1lbnRhdGlv
bnMuYXBwZW5kKFRlbXBsYXRlKFRlbXBsYXRlcy5EaXNwYXRjaGVySW1wbGVtZW50YXRpb25Eb21h
aW5Db25zdHJ1Y3Rvcikuc3Vic3RpdHV0ZShOb25lLCAqKmNvbnN0cnVjdG9yX2FyZ3MpKQorCisg
ICAgICAgIGlmIGxlbihkb21haW4uY29tbWFuZHMpIDw9IDU6CisgICAgICAgICAgICBpbXBsZW1l
bnRhdGlvbnMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfZG9tYWluX2Rpc3BhdGNoZXJfc21hbGxfc3dp
dGNoKGRvbWFpbikpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpbXBsZW1lbnRhdGlvbnMu
YXBwZW5kKHNlbGYuZ2VuZXJhdGVfZG9tYWluX2Rpc3BhdGNoZXJfbGFyZ2Vfc3dpdGNoKGRvbWFp
bikpCisKKyAgICAgICAgZm9yIF9jb21tYW5kIGluIGRvbWFpbi5jb21tYW5kczoKKyAgICAgICAg
ICAgIGlmIF9jb21tYW5kLmlzX2FzeW5jOgorICAgICAgICAgICAgICAgIGltcGxlbWVudGF0aW9u
cy5hcHBlbmQoc2VsZi5nZW5lcmF0ZV9kaXNwYXRjaGVyX2FzeW5jX2NvbW1hbmRfY2xhc3MoX2Nv
bW1hbmQsIGRvbWFpbikpCisgICAgICAgICAgICBpbXBsZW1lbnRhdGlvbnMuYXBwZW5kKHNlbGYu
Z2VuZXJhdGVfZGlzcGF0Y2hlcl9jb21tYW5kKF9jb21tYW5kLCBkb21haW4pKQorCisgICAgICAg
IGxpbmVzLmFwcGVuZCgiXG5cbiIuam9pbihpbXBsZW1lbnRhdGlvbnMpKQorICAgICAgICBpZiBk
b21haW5fZ3VhcmQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoIiNlbmRp
ZiAvLyAlcyIgJSBkb21haW5fZ3VhcmQpCisgICAgICAgIHJldHVybiAiXG4iLmpvaW4obGluZXMp
CisKKyAgICBkZWYgZ2VuZXJhdGVfZG9tYWluX2Rpc3BhdGNoZXJfc21hbGxfc3dpdGNoKHNlbGYs
IGRvbWFpbik6CisgICAgICAgIGNhc2VzID0gW10KKyAgICAgICAgY2FzZXMuYXBwZW5kKCcgICAg
aWYgKG1ldGhvZCA9PSAiJXMiKScgJSBkb21haW4uY29tbWFuZHNbMF0uY29tbWFuZF9uYW1lKQor
ICAgICAgICBjYXNlcy5hcHBlbmQoJyAgICAgICAgJXMoY2FsbElkLCAqbWVzc2FnZS5nZXQoKSk7
JyAlIGRvbWFpbi5jb21tYW5kc1swXS5jb21tYW5kX25hbWUpCisgICAgICAgIGZvciBfY29tbWFu
ZCBpbiBkb21haW4uY29tbWFuZHNbMTpdOgorICAgICAgICAgICAgY2FzZXMuYXBwZW5kKCcgICAg
ZWxzZSBpZiAobWV0aG9kID09ICIlcyIpJyAlIF9jb21tYW5kLmNvbW1hbmRfbmFtZSkKKyAgICAg
ICAgICAgIGNhc2VzLmFwcGVuZCgnICAgICAgICAlcyhjYWxsSWQsICptZXNzYWdlLmdldCgpKTsn
ICUgX2NvbW1hbmQuY29tbWFuZF9uYW1lKQorCisgICAgICAgIHN3aXRjaF9hcmdzID0geworICAg
ICAgICAgICAgJ2RvbWFpbk5hbWUnOiBkb21haW4uZG9tYWluX25hbWUsCisgICAgICAgICAgICAn
ZGlzcGF0Y2hDYXNlcyc6ICJcbiIuam9pbihjYXNlcykKKyAgICAgICAgfQorCisgICAgICAgIHJl
dHVybiBUZW1wbGF0ZShUZW1wbGF0ZXMuRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uU21hbGxTd2l0
Y2gpLnN1YnN0aXR1dGUoTm9uZSwgKipzd2l0Y2hfYXJncykKKworICAgIGRlZiBnZW5lcmF0ZV9k
b21haW5fZGlzcGF0Y2hlcl9sYXJnZV9zd2l0Y2goc2VsZiwgZG9tYWluKToKKyAgICAgICAgY2Fz
ZXMgPSBbXQorICAgICAgICBmb3IgX2NvbW1hbmQgaW4gZG9tYWluLmNvbW1hbmRzOgorICAgICAg
ICAgICAgYXJncyA9IHsKKyAgICAgICAgICAgICAgICAnZG9tYWluTmFtZSc6IGRvbWFpbi5kb21h
aW5fbmFtZSwKKyAgICAgICAgICAgICAgICAnY29tbWFuZE5hbWUnOiBfY29tbWFuZC5jb21tYW5k
X25hbWUKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2VzLmFwcGVuZCgnICAgICAgICAg
ICAgeyAiJShjb21tYW5kTmFtZSlzIiwgJkluc3BlY3RvciUoZG9tYWluTmFtZSlzQmFja2VuZERp
c3BhdGNoZXI6OiUoY29tbWFuZE5hbWUpcyB9LCcgJSBhcmdzKQorCisgICAgICAgIHN3aXRjaF9h
cmdzID0geworICAgICAgICAgICAgJ2RvbWFpbk5hbWUnOiBkb21haW4uZG9tYWluX25hbWUsCisg
ICAgICAgICAgICAnZGlzcGF0Y2hDYXNlcyc6ICJcbiIuam9pbihjYXNlcykKKyAgICAgICAgfQor
CisgICAgICAgIHJldHVybiBUZW1wbGF0ZShUZW1wbGF0ZXMuRGlzcGF0Y2hlckltcGxlbWVudGF0
aW9uTGFyZ2VTd2l0Y2gpLnN1YnN0aXR1dGUoTm9uZSwgKipzd2l0Y2hfYXJncykKKworICAgIGRl
ZiBnZW5lcmF0ZV9kaXNwYXRjaGVyX2FzeW5jX2NvbW1hbmRfY2xhc3Moc2VsZiwgY29tbWFuZCwg
ZG9tYWluKToKKyAgICAgICAgb3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cyA9IFtdCisgICAgICAg
IGZvcm1hbF9wYXJhbWV0ZXJzID0gW10KKworICAgICAgICBmb3IgX3BhcmFtZXRlciBpbiBjb21t
YW5kLnJldHVybl9wYXJhbWV0ZXJzOgorICAgICAgICAgICAgcGFyYW1fYXJncyA9IHsKKyAgICAg
ICAgICAgICAgICAncGFyYW1ldGVyVHlwZSc6IEdlbmVyYXRvci5jYWxsX3BhcmFtZXRlcl9zdGFj
a190eXBlX2Zvcl90eXBlKF9wYXJhbWV0ZXIudHlwZSwgX3BhcmFtZXRlci5pc19vcHRpb25hbCks
CisgICAgICAgICAgICAgICAgJ3BhcmFtZXRlck5hbWUnOiBfcGFyYW1ldGVyLnBhcmFtZXRlcl9u
YW1lLAorICAgICAgICAgICAgICAgICdrZXllZFNldE1ldGhvZCc6IEdlbmVyYXRvci5rZXllZF9z
ZXRfbWV0aG9kX2Zvcl90eXBlKF9wYXJhbWV0ZXIudHlwZSksCisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGZvcm1hbF9wYXJhbWV0ZXJzLmFwcGVuZCgnJXMgJXMnICUgKEdlbmVyYXRvci5h
c3luY19mb3JtYWxzX3R5cGVfZm9yX3BhcmFtZXRlcihfcGFyYW1ldGVyLCBkb21haW4pLCBfcGFy
YW1ldGVyLnBhcmFtZXRlcl9uYW1lKSkKKworICAgICAgICAgICAgaWYgX3BhcmFtZXRlci5pc19v
cHRpb25hbDoKKyAgICAgICAgICAgICAgICBpZiBHZW5lcmF0b3Iuc2hvdWxkX3VzZV93cmFwcGVy
X2Zvcl9yZXR1cm5fdHlwZShfcGFyYW1ldGVyLnR5cGUpOgorICAgICAgICAgICAgICAgICAgICBv
dXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgIGlmICglKHBhcmFtZXRlck5hbWUp
cy5pc0Fzc2lnbmVkKCkpJyAlIHBhcmFtX2FyZ3MpCisgICAgICAgICAgICAgICAgICAgIG91dF9w
YXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAgICAgIGpzb25NZXNzYWdlLT4lKGtleWVk
U2V0TWV0aG9kKXMoQVNDSUlMaXRlcmFsKCIlKHBhcmFtZXRlck5hbWUpcyIpLCAlKHBhcmFtZXRl
ck5hbWUpcy5nZXRWYWx1ZSgpKTsnICUgcGFyYW1fYXJncykKKyAgICAgICAgICAgICAgICBlbHNl
OgorICAgICAgICAgICAgICAgICAgICBvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRzLmFwcGVuZCgn
ICAgIGlmICglKHBhcmFtZXRlck5hbWUpcyknICUgcGFyYW1fYXJncykKKyAgICAgICAgICAgICAg
ICAgICAgb3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICAgICAganNvbk1lc3Nh
Z2UtPiUoa2V5ZWRTZXRNZXRob2QpcyhBU0NJSUxpdGVyYWwoIiUocGFyYW1ldGVyTmFtZSlzIiks
ICUocGFyYW1ldGVyTmFtZSlzKTsnICUgcGFyYW1fYXJncykKKyAgICAgICAgICAgIGVsaWYgX3Bh
cmFtZXRlci50eXBlLmlzX2VudW0oKToKKyAgICAgICAgICAgICAgICBvdXRfcGFyYW1ldGVyX2Fz
c2lnbm1lbnRzLmFwcGVuZCgnICAgIGpzb25NZXNzYWdlLT4lKGtleWVkU2V0TWV0aG9kKXMoQVND
SUlMaXRlcmFsKCIlKHBhcmFtZXRlck5hbWUpcyIpLCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpn
ZXQlKGZyYW1ld29ya1ByZWZpeClzRW51bUNvbnN0YW50VmFsdWUoJShwYXJhbWV0ZXJOYW1lKXMp
KTsnICUgcGFyYW1fYXJncykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgb3V0
X3BhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICBqc29uTWVzc2FnZS0+JShrZXllZFNl
dE1ldGhvZClzKEFTQ0lJTGl0ZXJhbCgiJShwYXJhbWV0ZXJOYW1lKXMiKSwgJShwYXJhbWV0ZXJO
YW1lKXMpOycgJSBwYXJhbV9hcmdzKQorCisgICAgICAgIGFzeW5jX2FyZ3MgPSB7CisgICAgICAg
ICAgICAnZG9tYWluTmFtZSc6IGRvbWFpbi5kb21haW5fbmFtZSwKKyAgICAgICAgICAgICdjYWxs
YmFja05hbWUnOiB1Y2ZpcnN0KGNvbW1hbmQuY29tbWFuZF9uYW1lKSArICdDYWxsYmFjaycsCisg
ICAgICAgICAgICAnZm9ybWFsUGFyYW1ldGVycyc6ICIsICIuam9pbihmb3JtYWxfcGFyYW1ldGVy
cyksCisgICAgICAgICAgICAnb3V0UGFyYW1ldGVyQXNzaWdubWVudHMnOiAiXG4iLmpvaW4ob3V0
X3BhcmFtZXRlcl9hc3NpZ25tZW50cykKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gVGVtcGxh
dGUoVGVtcGxhdGVzLkRpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkFzeW5jQ29tbWFuZCkuc3Vic3Rp
dHV0ZShOb25lLCAqKmFzeW5jX2FyZ3MpCisKKworICAgIGRlZiBnZW5lcmF0ZV9kaXNwYXRjaGVy
X2NvbW1hbmQoc2VsZiwgY29tbWFuZCwgZG9tYWluKToKKyAgICAgICAgbGluZXMgPSBbXQorICAg
ICAgICBpbl9wYXJhbWV0ZXJfZGVjbGFyYXRpb25zID0gW10KKyAgICAgICAgb3V0X3BhcmFtZXRl
cl9kZWNsYXJhdGlvbnMgPSBbXQorICAgICAgICBvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRzID0g
W10KKyAgICAgICAgbWV0aG9kX3BhcmFtZXRlcnMgPSBbJyZlcnJvciddCisKKyAgICAgICAgZm9y
IF9wYXJhbWV0ZXIgaW4gY29tbWFuZC5jYWxsX3BhcmFtZXRlcnM6CisgICAgICAgICAgICBvdXRf
c3VjY2Vzc19hcmd1bWVudCA9ICdudWxscHRyJworICAgICAgICAgICAgaWYgX3BhcmFtZXRlci5p
c19vcHRpb25hbDoKKyAgICAgICAgICAgICAgICBvdXRfc3VjY2Vzc19hcmd1bWVudCA9ICcmJXNf
dmFsdWVGb3VuZCcgJSBfcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lCisgICAgICAgICAgICAgICAg
aW5fcGFyYW1ldGVyX2RlY2xhcmF0aW9ucy5hcHBlbmQoJyAgICBib29sICVzX3ZhbHVlRm91bmQg
PSBmYWxzZTsnICUgX3BhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkKKworICAgICAgICAgICAgcGFy
YW1fYXJncyA9IHsKKyAgICAgICAgICAgICAgICAncGFyYW1ldGVyVHlwZSc6IEdlbmVyYXRvci5j
YWxsX3BhcmFtZXRlcl9zdGFja190eXBlX2Zvcl90eXBlKF9wYXJhbWV0ZXIudHlwZSwgX3BhcmFt
ZXRlci5pc19vcHRpb25hbCksCisgICAgICAgICAgICAgICAgJ3BhcmFtZXRlck5hbWUnOiBfcGFy
YW1ldGVyLnBhcmFtZXRlcl9uYW1lLAorICAgICAgICAgICAgICAgICdrZXllZEdldE1ldGhvZCc6
IEdlbmVyYXRvci5rZXllZF9nZXRfbWV0aG9kX2Zvcl90eXBlKF9wYXJhbWV0ZXIudHlwZSksCisg
ICAgICAgICAgICAgICAgJ3N1Y2Nlc3NPdXRQYXJhbSc6IG91dF9zdWNjZXNzX2FyZ3VtZW50Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGluX3BhcmFtZXRlcl9kZWNsYXJhdGlvbnMuYXBw
ZW5kKCcgICAgJShwYXJhbWV0ZXJUeXBlKXMgaW5fJShwYXJhbWV0ZXJOYW1lKXMgPSBJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlcjo6JShrZXllZEdldE1ldGhvZClzKHBhcmFtc0NvbnRhaW5lclB0
ciwgQVNDSUlMaXRlcmFsKCIlKHBhcmFtZXRlck5hbWUpcyIpLCAlKHN1Y2Nlc3NPdXRQYXJhbSlz
LCBwcm90b2NvbEVycm9yc1B0cik7JyAlIHBhcmFtX2FyZ3MpCisKKyAgICAgICAgICAgIGlmIF9w
YXJhbWV0ZXIuaXNfb3B0aW9uYWw6CisgICAgICAgICAgICAgICAgbWV0aG9kX3BhcmFtZXRlcnMu
YXBwZW5kKCclKHBhcmFtZXRlck5hbWUpc192YWx1ZUZvdW5kID8gJmluXyUocGFyYW1ldGVyTmFt
ZSlzIDogbnVsbHB0cicgJSBwYXJhbV9hcmdzKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAg
ICAgICAgICBtZXRob2RfcGFyYW1ldGVycy5hcHBlbmQoJ2luXycgKyBfcGFyYW1ldGVyLnBhcmFt
ZXRlcl9uYW1lKQorCisgICAgICAgIGlmIGNvbW1hbmQuaXNfYXN5bmM6CisgICAgICAgICAgICBh
c3luY19hcmdzID0geworICAgICAgICAgICAgICAgICdkb21haW5OYW1lJzogZG9tYWluLmRvbWFp
bl9uYW1lLAorICAgICAgICAgICAgICAgICdjYWxsYmFja05hbWUnOiB1Y2ZpcnN0KGNvbW1hbmQu
Y29tbWFuZF9uYW1lKSArICdDYWxsYmFjaycKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
b3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICAgICAgY2FsbGJhY2stPmRpc2Fi
bGUoKTsnKQorICAgICAgICAgICAgb3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAg
ICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElkLCBJ
bnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3Ip
OycpCisgICAgICAgICAgICBvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgICAg
ICByZXR1cm47JykKKyAgICAgICAgICAgIG1ldGhvZF9wYXJhbWV0ZXJzLmFwcGVuZCgnY2FsbGJh
Y2snKQorCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmb3IgX3BhcmFtZXRlciBpbiBjb21t
YW5kLnJldHVybl9wYXJhbWV0ZXJzOgorICAgICAgICAgICAgICAgIHBhcmFtX2FyZ3MgPSB7Cisg
ICAgICAgICAgICAgICAgICAgICdwYXJhbWV0ZXJUeXBlJzogR2VuZXJhdG9yLnJldHVybl9wYXJh
bWV0ZXJfc3RhY2tfdHlwZV9mb3JfcGFyYW1ldGVyKF9wYXJhbWV0ZXIsIGRvbWFpbiksCisgICAg
ICAgICAgICAgICAgICAgICdwYXJhbWV0ZXJOYW1lJzogX3BhcmFtZXRlci5wYXJhbWV0ZXJfbmFt
ZSwKKyAgICAgICAgICAgICAgICAgICAgJ2tleWVkU2V0TWV0aG9kJzogR2VuZXJhdG9yLmtleWVk
X3NldF9tZXRob2RfZm9yX3R5cGUoX3BhcmFtZXRlci50eXBlKSwKKyAgICAgICAgICAgICAgICAg
ICAgJ2ZyYW1ld29ya1ByZWZpeCc6IHNlbGYubW9kZWwoKS5mcmFtZXdvcmsuc2V0dGluZygncHJl
Zml4JykKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBvdXRfcGFyYW1ldGVy
X2RlY2xhcmF0aW9ucy5hcHBlbmQoJyAgICAlKHBhcmFtZXRlclR5cGUpcyBvdXRfJShwYXJhbWV0
ZXJOYW1lKXM7JyAlIHBhcmFtX2FyZ3MpCisgICAgICAgICAgICAgICAgaWYgX3BhcmFtZXRlci5p
c19vcHRpb25hbDoKKyAgICAgICAgICAgICAgICAgICAgaWYgR2VuZXJhdG9yLnNob3VsZF91c2Vf
d3JhcHBlcl9mb3JfcmV0dXJuX3R5cGUoX3BhcmFtZXRlci50eXBlKToKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAgICAgIGlmIChv
dXRfJShwYXJhbWV0ZXJOYW1lKXMuaXNBc3NpZ25lZCgpKScgJSBwYXJhbV9hcmdzKQorICAgICAg
ICAgICAgICAgICAgICAgICAgb3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICAg
ICAgICAgIHJlc3VsdC0+JShrZXllZFNldE1ldGhvZClzKEFTQ0lJTGl0ZXJhbCgiJShwYXJhbWV0
ZXJOYW1lKXMiKSwgb3V0XyUocGFyYW1ldGVyTmFtZSlzLmdldFZhbHVlKCkpOycgJSBwYXJhbV9h
cmdzKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAg
b3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICAgICAgaWYgKG91dF8lKHBhcmFt
ZXRlck5hbWUpcyknICUgcGFyYW1fYXJncykKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dF9w
YXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAgICAgICAgICByZXN1bHQtPiUoa2V5ZWRT
ZXRNZXRob2QpcyhBU0NJSUxpdGVyYWwoIiUocGFyYW1ldGVyTmFtZSlzIiksIG91dF8lKHBhcmFt
ZXRlck5hbWUpcyk7JyAlIHBhcmFtX2FyZ3MpCisgICAgICAgICAgICAgICAgZWxpZiBfcGFyYW1l
dGVyLnR5cGUuaXNfZW51bSgpOgorICAgICAgICAgICAgICAgICAgICBvdXRfcGFyYW1ldGVyX2Fz
c2lnbm1lbnRzLmFwcGVuZCgnICAgICAgICByZXN1bHQtPiUoa2V5ZWRTZXRNZXRob2QpcyhBU0NJ
SUxpdGVyYWwoIiUocGFyYW1ldGVyTmFtZSlzIiksIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6Omdl
dCUoZnJhbWV3b3JrUHJlZml4KXNFbnVtQ29uc3RhbnRWYWx1ZShvdXRfJShwYXJhbWV0ZXJOYW1l
KXMpKTsnICUgcGFyYW1fYXJncykKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAg
ICAgICAgICBvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgICAgICByZXN1bHQt
PiUoa2V5ZWRTZXRNZXRob2QpcyhBU0NJSUxpdGVyYWwoIiUocGFyYW1ldGVyTmFtZSlzIiksIG91
dF8lKHBhcmFtZXRlck5hbWUpcyk7JyAlIHBhcmFtX2FyZ3MpCisKKyAgICAgICAgICAgICAgICBp
ZiBHZW5lcmF0b3Iuc2hvdWxkX3Bhc3NfYnlfY29weV9mb3JfcmV0dXJuX3R5cGUoX3BhcmFtZXRl
ci50eXBlKToKKyAgICAgICAgICAgICAgICAgICAgbWV0aG9kX3BhcmFtZXRlcnMuYXBwZW5kKCdv
dXRfJyArIF9wYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpCisgICAgICAgICAgICAgICAgZWxzZToK
KyAgICAgICAgICAgICAgICAgICAgbWV0aG9kX3BhcmFtZXRlcnMuYXBwZW5kKCcmb3V0XycgKyBf
cGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKQorCisgICAgICAgIGNvbW1hbmRfYXJncyA9IHsKKyAg
ICAgICAgICAgICdkb21haW5OYW1lJzogZG9tYWluLmRvbWFpbl9uYW1lLAorICAgICAgICAgICAg
J2NhbGxiYWNrTmFtZSc6ICclc0NhbGxiYWNrJyAlIHVjZmlyc3QoY29tbWFuZC5jb21tYW5kX25h
bWUpLAorICAgICAgICAgICAgJ2NvbW1hbmROYW1lJzogY29tbWFuZC5jb21tYW5kX25hbWUsCisg
ICAgICAgICAgICAnaW5QYXJhbWV0ZXJEZWNsYXJhdGlvbnMnOiAiXG4iLmpvaW4oaW5fcGFyYW1l
dGVyX2RlY2xhcmF0aW9ucyksCisgICAgICAgICAgICAnaW52b2NhdGlvblBhcmFtZXRlcnMnOiAi
LCAiLmpvaW4obWV0aG9kX3BhcmFtZXRlcnMpCisgICAgICAgIH0KKworICAgICAgICBpZiBsZW4o
Y29tbWFuZC5jYWxsX3BhcmFtZXRlcnMpID09IDA6CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQo
J3ZvaWQgSW5zcGVjdG9yJShkb21haW5OYW1lKXNCYWNrZW5kRGlzcGF0Y2hlcjo6JShjb21tYW5k
TmFtZSlzKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmKScgJSBjb21tYW5kX2Fy
Z3MpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ3ZvaWQgSW5zcGVj
dG9yJShkb21haW5OYW1lKXNCYWNrZW5kRGlzcGF0Y2hlcjo6JShjb21tYW5kTmFtZSlzKGxvbmcg
Y2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpJyAlIGNvbW1hbmRfYXJncykK
KyAgICAgICAgbGluZXMuYXBwZW5kKCd7JykKKworICAgICAgICBpZiBsZW4oY29tbWFuZC5jYWxs
X3BhcmFtZXRlcnMpID4gMDoKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZChUZW1wbGF0ZShUZW1w
bGF0ZXMuRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uUHJlcGFyZUNvbW1hbmRBcmd1bWVudHMpLnN1
YnN0aXR1dGUoTm9uZSwgKipjb21tYW5kX2FyZ3MpKQorCisgICAgICAgIGxpbmVzLmFwcGVuZCgn
ICAgIEVycm9yU3RyaW5nIGVycm9yOycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7JykK
KyAgICAgICAgaWYgY29tbWFuZC5pc19hc3luYzoKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgn
ICAgIFJlZlB0cjxJbnNwZWN0b3IlKGRvbWFpbk5hbWUpc0JhY2tlbmREaXNwYXRjaGVySGFuZGxl
cjo6JShjYWxsYmFja05hbWUpcz4gY2FsbGJhY2sgPSBhZG9wdFJlZihuZXcgSW5zcGVjdG9yJShk
b21haW5OYW1lKXNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OiUoY2FsbGJhY2tOYW1lKXMobV9i
YWNrZW5kRGlzcGF0Y2hlcixjYWxsSWQpKTsnICUgY29tbWFuZF9hcmdzKQorICAgICAgICBpZiBs
ZW4oY29tbWFuZC5yZXR1cm5fcGFyYW1ldGVycykgPiAwOgorICAgICAgICAgICAgbGluZXMuZXh0
ZW5kKG91dF9wYXJhbWV0ZXJfZGVjbGFyYXRpb25zKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAg
ICBtX2FnZW50LT4lKGNvbW1hbmROYW1lKXMoJShpbnZvY2F0aW9uUGFyYW1ldGVycylzKTsnICUg
Y29tbWFuZF9hcmdzKQorICAgICAgICBsaW5lcy5hcHBlbmQoJycpCisgICAgICAgIGlmIGNvbW1h
bmQuaXNfYXN5bmM6CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBpZiAoZXJyb3IubGVu
Z3RoKCkpIHsnKQorICAgICAgICAgICAgbGluZXMuZXh0ZW5kKG91dF9wYXJhbWV0ZXJfYXNzaWdu
bWVudHMpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICB9JykKKyAgICAgICAgZWxpZiBs
ZW4oY29tbWFuZC5yZXR1cm5fcGFyYW1ldGVycykgPiAxOgorICAgICAgICAgICAgbGluZXMuYXBw
ZW5kKCcgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkgeycpCisgICAgICAgICAgICBsaW5lcy5leHRl
bmQob3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cykKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgn
ICAgIH0nKQorICAgICAgICBlbGlmIGxlbihjb21tYW5kLnJldHVybl9wYXJhbWV0ZXJzKSA9PSAx
OgorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgaWYgKCFlcnJvci5sZW5ndGgoKSknKQor
ICAgICAgICAgICAgbGluZXMuZXh0ZW5kKG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMpCisgICAg
ICAgICAgICBsaW5lcy5hcHBlbmQoJycpCisKKyAgICAgICAgaWYgbm90IGNvbW1hbmQuaXNfYXN5
bmM6CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5z
ZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBlcnJvcik7JykKKyAgICAgICAg
bGluZXMuYXBwZW5kKCd9JykKKyAgICAgICAgcmV0dXJuICJcbiIuam9pbihsaW5lcykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dl
bmVyYXRvci5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2Rl
Z2VuL2dlbmVyYXRvci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42MzZjMGEzMDc2ZDNmMTRmMGZmY2ZmYWVlY2Vm
MTllN2E1MDQ1MGNkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdG9yLnB5CkBAIC0wLDAgKzEsMjEyIEBACisj
IENvcHlyaWdodCAoYykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENv
cHlyaWdodCAoYykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisjIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitmcm9tIG1v
ZGVscyBpbXBvcnQgUHJpbWl0aXZlVHlwZSwgT2JqZWN0VHlwZSwgQXJyYXlUeXBlLCBFbnVtVHlw
ZSwgQWxpYXNlZFR5cGUKKworZGVmIHVjZmlyc3Qoc3RyKToKKyAgICByZXR1cm4gc3RyWzoxXS51
cHBlcigpICsgc3RyWzE6XQorCitfUFJJTUlUSVZFX1RPX0NQUF9OQU1FX01BUCA9IHsKKyAgICAn
Ym9vbGVhbic6ICdib29sJywKKyAgICAnaW50ZWdlcic6ICdpbnQnLAorICAgICdudW1iZXInOiAn
ZG91YmxlJywKKyAgICAnc3RyaW5nJzogJ1N0cmluZycsCisgICAgJ29iamVjdCc6ICdJbnNwZWN0
b3I6Okluc3BlY3Rvck9iamVjdCcsCisgICAgJ2FueSc6ICdJbnNwZWN0b3I6Okluc3BlY3RvclZh
bHVlJworfQorCitjbGFzcyBHZW5lcmF0b3I6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZGVs
LCBpbnB1dF9maWxlcGF0aCk6CisgICAgICAgIHNlbGYuX21vZGVsID0gbW9kZWwKKyAgICAgICAg
c2VsZi5faW5wdXRfZmlsZXBhdGggPSBpbnB1dF9maWxlcGF0aAorCisgICAgZGVmIG1vZGVsKHNl
bGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fbW9kZWwKKworICAgIGRlZiBnZW5lcmF0ZV9vdXRw
dXQoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBvdXRwdXRfZmlsZW5hbWUoc2VsZik6
CisgICAgICAgIHBhc3MKKworICAgICMgRklYTUU6IFRoaXMgc2hvdWxkIGJlIGNvbnZlcnRlZCBp
bnRvIGEgcHJvcGVydHkgb24gdGhlIGRvbWFpbiBpbiBKU09OLgorICAgIEBzdGF0aWNtZXRob2QK
KyAgICBkZWYgY3BwX2d1YXJkX2Zvcl9kb21haW4oZG9tYWluKToKKyAgICAgICAgb3ZlcnJpZGVz
ID0geworICAgICAgICAgICAgJ0RhdGFiYXNlJzogIkVOQUJMRShTUUxfREFUQUJBU0UpIiwKKyAg
ICAgICAgICAgICdJbmRleGVkREInOiAiRU5BQkxFKElOREVYRURfREFUQUJBU0UpIiwKKyAgICAg
ICAgICAgICdSZXBsYXknOiAiRU5BQkxFKFdFQl9SRVBMQVkpIiwKKyAgICAgICAgfQorCisgICAg
ICAgIHJldHVybiBvdmVycmlkZXMuZ2V0KGRvbWFpbi5kb21haW5fbmFtZSwgTm9uZSkKKworICAg
IEBzdGF0aWNtZXRob2QKKyAgICBkZWYga2V5ZWRfZ2V0X21ldGhvZF9mb3JfdHlwZSh0eXBlKToK
KyAgICAgICAgaWYgaXNpbnN0YW5jZSh0eXBlLCBPYmplY3RUeXBlKToKKyAgICAgICAgICAgIHJl
dHVybiAnZ2V0T2JqZWN0JworICAgICAgICBpZiBpc2luc3RhbmNlKHR5cGUsIEFycmF5VHlwZSk6
CisgICAgICAgICAgICByZXR1cm4gJ2dldEFycmF5JworICAgICAgICBlbGlmIGlzaW5zdGFuY2Uo
dHlwZSwgUHJpbWl0aXZlVHlwZSk6CisgICAgICAgICAgICBpZiB0eXBlLnJhd19uYW1lKCkgaXMg
J2ludGVnZXInOgorICAgICAgICAgICAgICAgIHJldHVybiAnZ2V0SW50JworICAgICAgICAgICAg
ZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gJ2dldCcgKyB1Y2ZpcnN0KHR5cGUucmF3X25h
bWUoKSkKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKHR5cGUsIEFsaWFzZWRUeXBlKToKKyAgICAg
ICAgICAgIHJldHVybiBHZW5lcmF0b3Iua2V5ZWRfZ2V0X21ldGhvZF9mb3JfdHlwZSh0eXBlLmFs
aWFzZWRfdHlwZSkKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKHR5cGUsIEVudW1UeXBlKToKKyAg
ICAgICAgICAgIHJldHVybiBHZW5lcmF0b3Iua2V5ZWRfZ2V0X21ldGhvZF9mb3JfdHlwZSh0eXBl
LnByaW1pdGl2ZV90eXBlKQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBrZXllZF9zZXRf
bWV0aG9kX2Zvcl90eXBlKHR5cGUpOgorICAgICAgICBpZiBpc2luc3RhbmNlKHR5cGUsIE9iamVj
dFR5cGUpIG9yIGlzaW5zdGFuY2UodHlwZSwgQXJyYXlUeXBlKToKKyAgICAgICAgICAgIHJldHVy
biAnc2V0VmFsdWUnCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh0eXBlLCBQcmltaXRpdmVUeXBl
KToKKyAgICAgICAgICAgIGlmIHR5cGUucmF3X25hbWUoKSBpbiBbJ2ludGVnZXInLCAnbnVtYmVy
J106CisgICAgICAgICAgICAgICAgcmV0dXJuICdzZXROdW1iZXInCisgICAgICAgICAgICBlbHNl
OgorICAgICAgICAgICAgICAgIHJldHVybiAnc2V0JyArIHVjZmlyc3QodHlwZS5yYXdfbmFtZSgp
KQorICAgICAgICBlbGlmIGlzaW5zdGFuY2UodHlwZSwgQWxpYXNlZFR5cGUpOgorICAgICAgICAg
ICAgcmV0dXJuIEdlbmVyYXRvci5rZXllZF9zZXRfbWV0aG9kX2Zvcl90eXBlKHR5cGUuYWxpYXNl
ZF90eXBlKQorICAgICAgICBlbGlmIGlzaW5zdGFuY2UodHlwZSwgRW51bVR5cGUpOgorICAgICAg
ICAgICAgcmV0dXJuIEdlbmVyYXRvci5rZXllZF9zZXRfbWV0aG9kX2Zvcl90eXBlKHR5cGUucHJp
bWl0aXZlX3R5cGUpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIHR5cGVfYnVpbGRlcl90
eXBlX2Zvcl90eXBlKHR5cGUpOgorICAgICAgICBpZiBpc2luc3RhbmNlKHR5cGUsIChPYmplY3RU
eXBlLCBBbGlhc2VkVHlwZSkpOgorICAgICAgICAgICAgcmV0dXJuICdJbnNwZWN0b3I6OlR5cGVC
dWlsZGVyOjolczo6JXMnICUgKHR5cGUudHlwZV9kb21haW4oKS5kb21haW5fbmFtZSwgdHlwZS5y
YXdfbmFtZSgpKQorICAgICAgICBlbGlmIGlzaW5zdGFuY2UodHlwZSwgQXJyYXlUeXBlKToKKyAg
ICAgICAgICAgIHJldHVybiAnSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk8JXM+JyAlIEdl
bmVyYXRvci50eXBlX2J1aWxkZXJfdHlwZV9mb3JfdHlwZSh0eXBlLmVsZW1lbnRfdHlwZSkKKyAg
ICAgICAgZWxpZiBpc2luc3RhbmNlKHR5cGUsIFByaW1pdGl2ZVR5cGUpOgorICAgICAgICAgICAg
cmV0dXJuIEdlbmVyYXRvci5jcHBfbmFtZV9mb3JfcHJpbWl0aXZlX3R5cGUodHlwZSkKKyAgICAg
ICAgZWxpZiBpc2luc3RhbmNlKHR5cGUsIEVudW1UeXBlKToKKyAgICAgICAgICAgIHJldHVybiAn
SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6JXM6OiVzOjpFbnVtJyAlICh0eXBlLnR5cGVfZG9tYWlu
KCkuZG9tYWluX25hbWUsIHR5cGUucmF3X25hbWUoKSkKKworICAgIEBzdGF0aWNtZXRob2QKKyAg
ICBkZWYgY2FsbF9wYXJhbWV0ZXJfdHlwZV9mb3JfdHlwZSh0eXBlLCBpc19vcHRpb25hbCk6Cisg
ICAgICAgIGlmIGlzaW5zdGFuY2UodHlwZSwgT2JqZWN0VHlwZSk6CisgICAgICAgICAgICBpZiBp
c19vcHRpb25hbDoKKyAgICAgICAgICAgICAgICByZXR1cm4gJ2NvbnN0IFJlZlB0cjxJbnNwZWN0
b3I6Okluc3BlY3Rvck9iamVjdD4qJworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAg
ICByZXR1cm4gJ2NvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4mJworICAg
ICAgICBlbGlmIGlzaW5zdGFuY2UodHlwZSwgQXJyYXlUeXBlKToKKyAgICAgICAgICAgIGlmIGlz
X29wdGlvbmFsOgorICAgICAgICAgICAgICAgIHJldHVybiAiY29uc3QgUmVmUHRyPEluc3BlY3Rv
cjo6SW5zcGVjdG9yQXJyYXk+KiIKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAg
cmV0dXJuICJjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheT4mIgorICAgICAg
ICBlbGlmIGlzaW5zdGFuY2UodHlwZSwgQWxpYXNlZFR5cGUpOgorICAgICAgICAgICAgcmV0dXJu
IEdlbmVyYXRvci5jYWxsX3BhcmFtZXRlcl90eXBlX2Zvcl90eXBlKHR5cGUuYWxpYXNlZF90eXBl
LCBpc19vcHRpb25hbCkKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKHR5cGUsIFByaW1pdGl2ZVR5
cGUpOgorICAgICAgICAgICAgY3BwX25hbWUgPSBHZW5lcmF0b3IuY3BwX25hbWVfZm9yX3ByaW1p
dGl2ZV90eXBlKHR5cGUpCisgICAgICAgICAgICBpZiBpc19vcHRpb25hbDoKKyAgICAgICAgICAg
ICAgICByZXR1cm4gJ2NvbnN0ICVzKicgJSBjcHBfbmFtZQorICAgICAgICAgICAgZWxpZiB0eXBl
LnJhd19uYW1lKCkgaW4gWydzdHJpbmcnXToKKyAgICAgICAgICAgICAgICByZXR1cm4gJ2NvbnN0
ICVzJicgJSBjcHBfbmFtZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1
cm4gY3BwX25hbWUKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKHR5cGUsIEVudW1UeXBlKToKKyAg
ICAgICAgICAgIHJldHVybiBHZW5lcmF0b3IuY2FsbF9wYXJhbWV0ZXJfdHlwZV9mb3JfdHlwZSh0
eXBlLnByaW1pdGl2ZV90eXBlLCBpc19vcHRpb25hbCkKKworICAgIEBzdGF0aWNtZXRob2QKKyAg
ICBkZWYgcmV0dXJuX3BhcmFtZXRlcl90eXBlX2Zvcl90eXBlKHR5cGUsIGlzX29wdGlvbmFsKToK
KyAgICAgICAgaWYgaXNpbnN0YW5jZSh0eXBlLCAoT2JqZWN0VHlwZSwgQXJyYXlUeXBlKSk6Cisg
ICAgICAgICAgICByZXR1cm4gJ1JlZlB0cjwlcz4mJyAlIEdlbmVyYXRvci50eXBlX2J1aWxkZXJf
dHlwZV9mb3JfdHlwZSh0eXBlKQorICAgICAgICBlbGlmIGlzaW5zdGFuY2UodHlwZSwgQWxpYXNl
ZFR5cGUpOgorICAgICAgICAgICAgcmV0dXJuICclcyonICUgR2VuZXJhdG9yLnR5cGVfYnVpbGRl
cl90eXBlX2Zvcl90eXBlKHR5cGUpCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh0eXBlLCBQcmlt
aXRpdmVUeXBlKToKKyAgICAgICAgICAgIGNwcF9uYW1lID0gR2VuZXJhdG9yLmNwcF9uYW1lX2Zv
cl9wcmltaXRpdmVfdHlwZSh0eXBlKQorICAgICAgICAgICAgaWYgaXNfb3B0aW9uYWw6CisgICAg
ICAgICAgICAgICAgcmV0dXJuICJJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8JXM+
KiIgJSBjcHBfbmFtZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4g
JyVzKicgJSBjcHBfbmFtZQorICAgICAgICBlbGlmIGlzaW5zdGFuY2UodHlwZSwgRW51bVR5cGUp
OgorICAgICAgICAgICAgcmV0dXJuICAnJXMqJyAlIEdlbmVyYXRvci50eXBlX2J1aWxkZXJfdHlw
ZV9mb3JfdHlwZSh0eXBlKQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBjYWxsX3BhcmFt
ZXRlcl9zdGFja190eXBlX2Zvcl90eXBlKHR5cGUsIGlzX29wdGlvbmFsKToKKyAgICAgICAgaWYg
aXNpbnN0YW5jZSh0eXBlLCBPYmplY3RUeXBlKToKKyAgICAgICAgICAgIHJldHVybiAiUmVmUHRy
PEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiIKKyAgICAgICAgaWYgaXNpbnN0YW5jZSh0eXBl
LCBBcnJheVR5cGUpOgorICAgICAgICAgICAgcmV0dXJuICJSZWZQdHI8SW5zcGVjdG9yOjpJbnNw
ZWN0b3JBcnJheT4iCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh0eXBlLCBBbGlhc2VkVHlwZSk6
CisgICAgICAgICAgICByZXR1cm4gR2VuZXJhdG9yLmNhbGxfcGFyYW1ldGVyX3N0YWNrX3R5cGVf
Zm9yX3R5cGUodHlwZS5hbGlhc2VkX3R5cGUsIGlzX29wdGlvbmFsKQorICAgICAgICBlbGlmIGlz
aW5zdGFuY2UodHlwZSwgUHJpbWl0aXZlVHlwZSk6CisgICAgICAgICAgICBjcHBfbmFtZSA9IEdl
bmVyYXRvci5jcHBfbmFtZV9mb3JfcHJpbWl0aXZlX3R5cGUodHlwZSkKKyAgICAgICAgICAgIGlm
IHR5cGUucXVhbGlmaWVkX25hbWUoKSBpbiBbJ2FueScsICdvYmplY3QnXToKKyAgICAgICAgICAg
ICAgICByZXR1cm4gIlJlZlB0cjwlcz4iICUgR2VuZXJhdG9yLmNwcF9uYW1lX2Zvcl9wcmltaXRp
dmVfdHlwZSh0eXBlKQorICAgICAgICAgICAgZWxpZiBpc19vcHRpb25hbCBhbmQgdHlwZS5xdWFs
aWZpZWRfbmFtZSgpIG5vdCBpbiBbJ2Jvb2xlYW4nLCAnc3RyaW5nJywgJ2ludGVnZXInXToKKyAg
ICAgICAgICAgICAgICByZXR1cm4gIkluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6Ok9wdE91dHB1dDwl
cz4iICUgY3BwX25hbWUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJu
IGNwcF9uYW1lCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh0eXBlLCBFbnVtVHlwZSk6CisgICAg
ICAgICAgICByZXR1cm4gR2VuZXJhdG9yLmNhbGxfcGFyYW1ldGVyX3N0YWNrX3R5cGVfZm9yX3R5
cGUodHlwZS5wcmltaXRpdmVfdHlwZSwgaXNfb3B0aW9uYWwpCisKKyAgICBAc3RhdGljbWV0aG9k
CisgICAgZGVmIHJldHVybl9wYXJhbWV0ZXJfc3RhY2tfdHlwZV9mb3JfcGFyYW1ldGVyKHBhcmFt
ZXRlciwgZG9tYWluKToKKyAgICAgICAgdHlwZSA9IHBhcmFtZXRlci50eXBlCisgICAgICAgIGlm
IGlzaW5zdGFuY2UodHlwZSwgKEFycmF5VHlwZSwgT2JqZWN0VHlwZSkpOgorICAgICAgICAgICAg
cmV0dXJuICdSZWZQdHI8JXM+JyAlIEdlbmVyYXRvci50eXBlX2J1aWxkZXJfdHlwZV9mb3JfdHlw
ZSh0eXBlKQorICAgICAgICBlbGlmIGlzaW5zdGFuY2UodHlwZSwgQWxpYXNlZFR5cGUpOgorICAg
ICAgICAgICAgcmV0dXJuICclcycgJSBHZW5lcmF0b3IudHlwZV9idWlsZGVyX3R5cGVfZm9yX3R5
cGUodHlwZSkKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKHR5cGUsIFByaW1pdGl2ZVR5cGUpOgor
ICAgICAgICAgICAgY3BwX25hbWUgPSBHZW5lcmF0b3IuY3BwX25hbWVfZm9yX3ByaW1pdGl2ZV90
eXBlKHR5cGUpCisgICAgICAgICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6CisgICAgICAg
ICAgICAgICAgcmV0dXJuICJJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8JXM+IiAl
IGNwcF9uYW1lCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBjcHBf
bmFtZQorICAgICAgICBlbGlmIGlzaW5zdGFuY2UodHlwZSwgRW51bVR5cGUpOgorICAgICAgICAg
ICAgcmV0dXJuICAnSW5zcGVjdG9yJXNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OiVzOjpFbnVt
JyAlIChkb21haW4uZG9tYWluX25hbWUsIHVjZmlyc3QocGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1l
KSkKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgYXN5bmNfZm9ybWFsc190eXBlX2Zvcl9w
YXJhbWV0ZXIocGFyYW1ldGVyLCBkb21haW4pOgorICAgICAgICB0eXBlID0gcGFyYW1ldGVyLnR5
cGUKKyAgICAgICAgaWYgaXNpbnN0YW5jZSh0eXBlLCAoQXJyYXlUeXBlLCBPYmplY3RUeXBlKSk6
CisgICAgICAgICAgICByZXR1cm4gJ1Bhc3NSZWZQdHI8JXM+JyAlIEdlbmVyYXRvci50eXBlX2J1
aWxkZXJfdHlwZV9mb3JfdHlwZSh0eXBlKQorICAgICAgICBlbGlmIGlzaW5zdGFuY2UodHlwZSwg
QWxpYXNlZFR5cGUpOgorICAgICAgICAgICAgcmV0dXJuICclcycgJSBHZW5lcmF0b3IudHlwZV9i
dWlsZGVyX3R5cGVfZm9yX3R5cGUodHlwZSkKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKHR5cGUs
IFByaW1pdGl2ZVR5cGUpOgorICAgICAgICAgICAgY3BwX25hbWUgPSBHZW5lcmF0b3IuY3BwX25h
bWVfZm9yX3ByaW1pdGl2ZV90eXBlKHR5cGUpCisgICAgICAgICAgICBpZiBwYXJhbWV0ZXIuaXNf
b3B0aW9uYWw6CisgICAgICAgICAgICAgICAgcmV0dXJuICdJbnNwZWN0b3I6OlR5cGVCdWlsZGVy
OjpPcHRPdXRwdXQ8JXM+JyAlIGNwcF9uYW1lCisgICAgICAgICAgICBlbGlmIHR5cGUucXVhbGlm
aWVkX25hbWUoKSBpbiBbJ3N0cmluZyddOgorICAgICAgICAgICAgICAgIHJldHVybiAnY29uc3Qg
JXMmJyAlIGNwcF9uYW1lCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVy
biBjcHBfbmFtZQorICAgICAgICBlbGlmIGlzaW5zdGFuY2UodHlwZSwgRW51bVR5cGUpOgorICAg
ICAgICAgICAgcmV0dXJuICAnSW5zcGVjdG9yJXNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OiVz
OjpFbnVtJyAlIChkb21haW4uZG9tYWluX25hbWUsIHVjZmlyc3QocGFyYW1ldGVyLnBhcmFtZXRl
cl9uYW1lKSkKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgY3BwX25hbWVfZm9yX3ByaW1p
dGl2ZV90eXBlKHR5cGUpOgorICAgICAgICByZXR1cm4gX1BSSU1JVElWRV9UT19DUFBfTkFNRV9N
QVAuZ2V0KHR5cGUucmF3X25hbWUoKSkKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgc2hv
dWxkX3VzZV93cmFwcGVyX2Zvcl9yZXR1cm5fdHlwZSh0eXBlKToKKyAgICAgICAgcmV0dXJuIG5v
dCBpc2luc3RhbmNlKHR5cGUsIChBcnJheVR5cGUsIE9iamVjdFR5cGUpKQorCisgICAgQHN0YXRp
Y21ldGhvZAorICAgIGRlZiBzaG91bGRfcGFzc19ieV9jb3B5X2Zvcl9yZXR1cm5fdHlwZSh0eXBl
KToKKyAgICAgICAgcmV0dXJuIGlzaW5zdGFuY2UodHlwZSwgKEFycmF5VHlwZSwgT2JqZWN0VHlw
ZSkpCisKKworY2xhc3MgRHVtbXlHZW5lcmF0b3IoR2VuZXJhdG9yKToKKyAgICBwYXNzCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9n
ZW5lcmF0b3JfdGVtcGxhdGVzLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2NvZGVnZW4vZ2VuZXJhdG9yX3RlbXBsYXRlcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42Y2Q0MWNm
OTQ4ODY5YTllY2JmNzYzNTZlYmE1MThkOTQwODY0ODcyCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdG9yX3Rl
bXBsYXRlcy5weQpAQCAtMCwwICsxLDIwMCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIENv
cHlyaWdodCAoYykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHly
aWdodCAoYykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisjIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisjIEdlbmVyYXRv
ciB0ZW1wbGF0ZXMsIHdoaWNoIGNhbiBiZSBmaWxsZWQgd2l0aCBzdHJpbmcuVGVtcGxhdGUuCisj
IEZvbGxvd2luZyBhcmUgY2xhc3NlcyB0aGF0IGZpbGwgdGhlIHRlbXBsYXRlcyBmcm9tIHRoZSB0
eXBlY2hlY2tlZCBtb2RlbC4KKworCitjbGFzcyBHZW5lcmF0b3JUZW1wbGF0ZXM6CisgICAgQ29w
eXJpZ2h0QmxvY2sgPSAoCisgICAgIiIiLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSAke2lucHV0RmlsZW5hbWV9
CisvLyBieSB0aGUgc2NyaXB0OiBKYXZhU2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0cy9Db2RlR2Vu
ZXJhdG9ySW5zcGVjdG9yLnB5IiIiKQorCisgICAgRGlzcGF0Y2hlckhlYWRlclByZWx1ZGUgPSAo
CisgICAgIiIiI2lmbmRlZiAke2hlYWRlckd1YXJkU3RyaW5nfQorI2RlZmluZSAke2hlYWRlckd1
YXJkU3RyaW5nfQorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUgIkluc3BlY3Rv
ciR7ZnJhbWV3b3JrUHJlZml4fVR5cGVCdWlsZGVycy5oIgorI2luY2x1ZGUgPGluc3BlY3Rvci9J
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3Ig
eworCit0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsiIiIpCisKKyAgICBEaXNwYXRjaGVySGVh
ZGVyUG9zdGx1ZGUgPSAoCisgICAgIiIifSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRp
ZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorCisjZW5kaWYgLy8gIWRlZmluZWQoJHtoZWFkZXJHdWFy
ZFN0cmluZ30pIiIiKQorCisgICAgRGlzcGF0Y2hIZWFkZXJEb21haW5IYW5kbGVyRGVjbGFyYXRp
b24gPSAoCisgICAgIiIiJHtjbGFzc0FuZEV4cG9ydE1hY3JvfSBJbnNwZWN0b3Ike2RvbWFpbk5h
bWV9QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKK3B1YmxpYzoKKyR7Y29tbWFuZERlY2xhcmF0
aW9uc30KK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIH5JbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyKCk7Cit9OyIiIikKKworICAgIERpc3BhdGNoSGVhZGVyRG9t
YWluRGlzcGF0Y2hlckRlY2xhcmF0aW9uID0gKAorICAgICIiIiR7Y2xhc3NBbmRFeHBvcnRNYWNy
b30gSW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGlj
IEluc3BlY3Rvcjo6SW5zcGVjdG9yU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIgeworcHVi
bGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5k
RGlzcGF0Y2hlcj4gY3JlYXRlKEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIq
LCBJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7CisgICAg
dmlydHVhbCB2b2lkIGRpc3BhdGNoKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwg
UGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gbWVzc2FnZSkgb3ZlcnJpZGU7
Ciske2NvbW1hbmREZWNsYXJhdGlvbnN9Citwcml2YXRlOgorICAgIEluc3BlY3RvciR7ZG9tYWlu
TmFtZX1CYWNrZW5kRGlzcGF0Y2hlcihJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyKiwgSW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwor
ICAgIEluc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIG1fYWdl
bnQ7Cit9OyIiIikKKworICAgIERpc3BhdGNoSGVhZGVyQXN5bmNDb21tYW5kRGVjbGFyYXRpb24g
PSAoCisgICAgIiIiICAgIGNsYXNzICR7Y2FsbGJhY2tOYW1lfSA6IHB1YmxpYyBJbnNwZWN0b3I6
Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2UgeworICAgIHB1YmxpYzoK
KyAgICAgICAgJHtjYWxsYmFja05hbWV9KFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlcj4sIGludCBpZCk7CisgICAgICAgIHZvaWQgc2VuZFN1Y2Nlc3MoJHtv
dXRQYXJhbWV0ZXJzfSk7CisgICAgfTsKKyAgICB2aXJ0dWFsIHZvaWQgJHtjb21tYW5kTmFtZX0o
JHtpblBhcmFtZXRlcnN9KSA9IDA7IiIiKQorCisgICAgRGlzcGF0Y2hlckltcGxlbWVudGF0aW9u
UHJlbHVkZSA9ICgKKyAgICAiIiIjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW5zcGVj
dG9yJHtmcmFtZXdvcmtQcmVmaXh9QmFja2VuZERpc3BhdGNoZXJzLmgiCisKKyNpZiBFTkFCTEUo
SU5TUEVDVE9SKQorCisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2hhbm5l
bC5oPgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeyIiIikKKworICAgIERp
c3BhdGNoZXJJbXBsZW1lbnRhdGlvblBvc3RsdWRlID0gKAorICAgICIiIn0gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKyIiIikKKworICAgIERp
c3BhdGNoZXJJbXBsZW1lbnRhdGlvblNtYWxsU3dpdGNoID0gKAorICAgICIiInZvaWQgSW5zcGVj
dG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIGNhbGxJZCwg
Y29uc3QgU3RyaW5nJiBtZXRob2QsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtZXNzYWdl
KQoreworICAgIFJlZjxJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXI+IHBy
b3RlY3QoKnRoaXMpOworCiske2Rpc3BhdGNoQ2FzZXN9CisgICAgZWxzZQorICAgICAgICBtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIEluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgU3RyaW5nKCInIikgKyAiJHtkb21haW5O
YW1lfSIgKyAnLicgKyBtZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7Cit9IiIiKQorCisgICAg
RGlzcGF0Y2hlckltcGxlbWVudGF0aW9uTGFyZ2VTd2l0Y2ggPSAoCisiIiJ2b2lkIEluc3BlY3Rv
ciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyBjYWxsSWQsIGNv
bnN0IFN0cmluZyYgbWV0aG9kLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbWVzc2FnZSkK
K3sKKyAgICBSZWY8SW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyPiBwcm90
ZWN0KCp0aGlzKTsKKworICAgIHR5cGVkZWYgdm9pZCAoSW5zcGVjdG9yJHtkb21haW5OYW1lfUJh
Y2tlbmREaXNwYXRjaGVyOjoqQ2FsbEhhbmRsZXIpKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0
b3I6Okluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7CisgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmlu
ZywgQ2FsbEhhbmRsZXI+IERpc3BhdGNoTWFwOworICAgIERFUFJFQ0FURURfREVGSU5FX1NUQVRJ
Q19MT0NBTChEaXNwYXRjaE1hcCwgZGlzcGF0Y2hNYXAsICgpKTsKKyAgICBpZiAoZGlzcGF0Y2hN
YXAuaXNFbXB0eSgpKSB7CisgICAgICAgIHN0YXRpYyBjb25zdCBzdHJ1Y3QgTWV0aG9kVGFibGUg
eworICAgICAgICAgICAgY29uc3QgY2hhciogbmFtZTsKKyAgICAgICAgICAgIENhbGxIYW5kbGVy
IGhhbmRsZXI7CisgICAgICAgIH0gY29tbWFuZHNbXSA9IHsKKyR7ZGlzcGF0Y2hDYXNlc30KKyAg
ICAgICAgfTsKKyAgICAgICAgc2l6ZV90IGxlbmd0aCA9IFdURl9BUlJBWV9MRU5HVEgoY29tbWFu
ZHMpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQorICAgICAg
ICAgICAgZGlzcGF0Y2hNYXAuYWRkKGNvbW1hbmRzW2ldLm5hbWUsIGNvbW1hbmRzW2ldLmhhbmRs
ZXIpOworICAgIH0KKworICAgIEhhc2hNYXA8U3RyaW5nLCBDYWxsSGFuZGxlcj46Oml0ZXJhdG9y
IGl0ID0gZGlzcGF0Y2hNYXAuZmluZChtZXRob2QpOworICAgIGlmIChpdCA9PSBkaXNwYXRjaE1h
cC5lbmQoKSkgeworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVy
cm9yKCZjYWxsSWQsIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwg
U3RyaW5nKCInIikgKyAiJHtkb21haW5OYW1lfSIgKyAnLicgKyBtZXRob2QgKyAiJyB3YXMgbm90
IGZvdW5kIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAoKCp0aGlzKS4qaXQtPnZh
bHVlKShjYWxsSWQsICptZXNzYWdlLmdldCgpKTsKK30iIiIpCisKKyAgICBEaXNwYXRjaGVySW1w
bGVtZW50YXRpb25Eb21haW5Db25zdHJ1Y3RvciA9ICgKKyAgICAiIiJQYXNzUmVmUHRyPEluc3Bl
Y3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcj4gSW5zcGVjdG9yJHtkb21haW5OYW1l
fUJhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUoSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqIGJh
Y2tlbmREaXNwYXRjaGVyLCBJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyKiBhZ2VudCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEluc3BlY3RvciR7ZG9t
YWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlciwgYWdlbnQpKTsKK30K
KworSW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyOjpJbnNwZWN0b3Ike2Rv
bWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXIoSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqIGJh
Y2tlbmREaXNwYXRjaGVyLCBJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyKiBhZ2VudCkKKyAgICA6IEluc3BlY3RvclN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRj
aGVyKGJhY2tlbmREaXNwYXRjaGVyKQorICAgICwgbV9hZ2VudChhZ2VudCkKK3sKKyAgICBtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4oQVNDSUlMaXRlcmFs
KCIke2RvbWFpbk5hbWV9IiksIHRoaXMpOworfSIiIikKKworICAgIERpc3BhdGNoZXJJbXBsZW1l
bnRhdGlvblByZXBhcmVDb21tYW5kQXJndW1lbnRzID0gKAorIiIiICAgIFJlZlB0cjxJbnNwZWN0
b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CisgICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gbWVzc2FnZS5nZXRPYmpl
Y3QoQVNDSUlMaXRlcmFsKCJwYXJhbXMiKSk7CisgICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXND
b250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CisgICAgSW5zcGVjdG9yQXJyYXkq
IHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7Ciske2luUGFyYW1ldGVy
RGVjbGFyYXRpb25zfQorICAgIGlmIChwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKKyAgICAg
ICAgU3RyaW5nIGVycm9yTWVzc2FnZSA9IFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBv
ZiBtZXRob2QgXCclc1wnIGNhbid0IGJlIHByb2Nlc3NlZCIsICIke2RvbWFpbk5hbWV9LiR7Y29t
bWFuZE5hbWV9Iik7CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29s
RXJyb3IoJmNhbGxJZCwgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkludmFsaWRQYXJhbXMs
IGVycm9yTWVzc2FnZSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyIiIikKKworICAgIERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkFzeW5jQ29tbWFu
ZCA9ICgKKyIiIkluc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6
OiR7Y2FsbGJhY2tOYW1lfTo6JHtjYWxsYmFja05hbWV9KFBhc3NSZWZQdHI8SW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXI+IGJhY2tlbmREaXNwYXRjaGVyLCBpbnQgaWQpIDogSW5zcGVjdG9yOjpJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlKGJhY2tlbmREaXNwYXRjaGVy
LCBpZCkgeyB9CisKK3ZvaWQgSW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVy
SGFuZGxlcjo6JHtjYWxsYmFja05hbWV9OjpzZW5kU3VjY2Vzcygke2Zvcm1hbFBhcmFtZXRlcnN9
KQoreworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGpzb25NZXNzYWdlID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsKKyR7b3V0UGFyYW1ldGVyQXNzaWdubWVudHN9CisgICAgc2VuZElm
QWN0aXZlKGpzb25NZXNzYWdlLCBFcnJvclN0cmluZygpKTsKK30iIiIpCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9tb2RlbHMucHkg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9tb2RlbHMu
cHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uYWZkMTI3MmQ3ZDcyMjg3NmFkOWU4YTY5MDk5OWRmNjJmNGFlYWI2ZAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9jb2RlZ2VuL21vZGVscy5weQpAQCAtMCwwICsxLDU0NCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0
aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisjIENvcHlyaWdodCAoYykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoK
KyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisj
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyMgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisjIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
CitpbXBvcnQgbG9nZ2luZworCisjIFVzZSBhIGdsb2JhbCBsb2dnZXIsIHdoaWNoIG5vcm1hbGx5
IG9ubHkgbG9ncyBlcnJvcnMuCisjIEl0IGNhbiBiZSBjb25maWd1cmVkIHRvIGxvZyBkZWJ1ZyBt
ZXNzYWdlcyBmcm9tIHRoZSBDTEkuCitsb2dnaW5nLmJhc2ljQ29uZmlnKGZvcm1hdD0nJShsZXZl
bG5hbWUpczogJShtZXNzYWdlKXMnLCBsZXZlbD1sb2dnaW5nLkVSUk9SKQorbG9nID0gbG9nZ2lu
Zy5nZXRMb2dnZXIoJ2dsb2JhbCcpCisKKworX0ZSQU1FV09SS19DT05GSUdfTUFQID0geworICAg
ICJHbG9iYWwiOiB7CisgICAgICAgICJwcmVmaXgiOiAiIiwKKyAgICB9LAorCisgICAgIldURiI6
IHsKKyAgICAgICAgInByZWZpeCI6ICJXVEYiLAorICAgIH0sCisgICAgIkphdmFTY3JpcHRDb3Jl
IjogeworICAgICAgICAicHJlZml4IjogIkpTIiwKKyAgICAgICAgImV4cG9ydF9tYWNybyI6ICJK
U19FWFBPUlRfUFJJVkFURSIKKyAgICB9LAorICAgICJXZWJDb3JlIjogeworICAgICAgICAicHJl
Zml4IjogIldlYiIsCisgICAgfSwKKyAgICAjIFVzZWQgZm9yIGNvZGUgZ2VuZXJhdG9yIHRlc3Rz
LgorICAgICJUZXN0IjogeworICAgICAgICAicHJlZml4IjogIlRlc3QiLAorICAgIH0KK30KKwor
Y2xhc3MgUGFyc2VFeGNlcHRpb24oRXhjZXB0aW9uKToKKyAgICBwYXNzCisKKworY2xhc3MgVHlw
ZWNoZWNrRXhjZXB0aW9uKEV4Y2VwdGlvbik6CisgICAgcGFzcworCisKK2NsYXNzIEZyYW1ld29y
azoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSk6CisgICAgICAgIHNlbGYuX3NldHRpbmdz
ID0gX0ZSQU1FV09SS19DT05GSUdfTUFQW25hbWVdCisgICAgICAgIHNlbGYubmFtZSA9IG5hbWUK
KworICAgIGRlZiBzZXR0aW5nKHNlbGYsIGtleSwgZGVmYXVsdD0nJyk6CisgICAgICAgIHJldHVy
biBzZWxmLl9zZXR0aW5ncy5nZXQoa2V5LCBkZWZhdWx0KQorCisgICAgQHN0YXRpY21ldGhvZAor
ICAgIGRlZiBmcm9tU3RyaW5nKGZyYW1ld29ya1N0cmluZyk6CisgICAgICAgIGlmIGZyYW1ld29y
a1N0cmluZyA9PSAiR2xvYmFsIjoKKyAgICAgICAgICAgIHJldHVybiBGcmFtZXdvcmtzLkdsb2Jh
bAorCisgICAgICAgIGlmIGZyYW1ld29ya1N0cmluZyA9PSAiV1RGIjoKKyAgICAgICAgICAgIHJl
dHVybiBGcmFtZXdvcmtzLldURgorCisgICAgICAgIGlmIGZyYW1ld29ya1N0cmluZyA9PSAiSmF2
YVNjcmlwdENvcmUiOgorICAgICAgICAgICAgcmV0dXJuIEZyYW1ld29ya3MuSmF2YVNjcmlwdENv
cmUKKworICAgICAgICBpZiBmcmFtZXdvcmtTdHJpbmcgPT0gIldlYkNvcmUiOgorICAgICAgICAg
ICAgcmV0dXJuIEZyYW1ld29ya3MuV2ViQ29yZQorCisgICAgICAgIGlmIGZyYW1ld29ya1N0cmlu
ZyA9PSAiVGVzdCI6CisgICAgICAgICAgICByZXR1cm4gRnJhbWV3b3Jrcy5UZXN0CisKKyAgICAg
ICAgcmFpc2UgUGFyc2VFeGNlcHRpb24oIlVua25vd24gZnJhbWV3b3JrOiAlcyIgJSBmcmFtZXdv
cmtTdHJpbmcpCisKKworY2xhc3MgRnJhbWV3b3JrczoKKyAgICBHbG9iYWwgPSBGcmFtZXdvcmso
Ikdsb2JhbCIpCisgICAgV1RGID0gRnJhbWV3b3JrKCJXVEYiKQorICAgIEphdmFTY3JpcHRDb3Jl
ID0gRnJhbWV3b3JrKCJKYXZhU2NyaXB0Q29yZSIpCisgICAgV2ViQ29yZSA9IEZyYW1ld29yaygi
V2ViQ29yZSIpCisgICAgVGVzdCA9IEZyYW1ld29yaygiVGVzdCIpCisKKworY2xhc3MgVHlwZVJl
ZmVyZW5jZToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdHlwZV9raW5kLCByZWZlcmVuY2VkX3R5
cGVfbmFtZSwgZW51bV92YWx1ZXMsIGFycmF5X2l0ZW1zKToKKyAgICAgICAgc2VsZi50eXBlX2tp
bmQgPSB0eXBlX2tpbmQKKyAgICAgICAgc2VsZi5yZWZlcmVuY2VkX3R5cGVfbmFtZSA9IHJlZmVy
ZW5jZWRfdHlwZV9uYW1lCisgICAgICAgIHNlbGYuZW51bV92YWx1ZXMgPSBlbnVtX3ZhbHVlcwor
ICAgICAgICBpZiBhcnJheV9pdGVtcyBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5hcnJheV90
eXBlX3JlZiA9IE5vbmUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuYXJyYXlfdHlw
ZV9yZWYgPSBUeXBlUmVmZXJlbmNlKGFycmF5X2l0ZW1zLmdldCgndHlwZScpLCBhcnJheV9pdGVt
cy5nZXQoJyRyZWYnKSwgYXJyYXlfaXRlbXMuZ2V0KCdlbnVtJywgW10pLCBhcnJheV9pdGVtcy5n
ZXQoJ2l0ZW1zJykpCisKKyAgICAgICAgaWYgdHlwZV9raW5kIGlzIG5vdCBOb25lIGFuZCByZWZl
cmVuY2VkX3R5cGVfbmFtZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJhaXNlIFBhcnNlRXhj
ZXB0aW9uKCJUeXBlIHJlZmVyZW5jZSBjYW5ub3QgaGF2ZSBib3RoICd0eXBlJyBhbmQgJyRyZWYn
IGtleXMuIikKKworICAgICAgICBpZiB0eXBlX2tpbmQgPT0gImFycmF5IiBhbmQgYXJyYXlfaXRl
bXMgaXMgTm9uZToKKyAgICAgICAgICAgIHJhaXNlIFBhcnNlRXhjZXB0aW9uKCJUeXBlIHJlZmVy
ZW5jZSB3aXRoIHR5cGUgJ2FycmF5JyBtdXN0IGhhdmUga2V5ICdpdGVtcycgdG8gZGVmaW5lIGFy
cmF5IGVsZW1lbnQgdHlwZS4iKQorCisgICAgZGVmIHJlZmVyZW5jZWRfbmFtZShzZWxmKToKKyAg
ICAgICAgaWYgc2VsZi5yZWZlcmVuY2VkX3R5cGVfbmFtZSBpcyBub3QgTm9uZToKKyAgICAgICAg
ICAgIHJldHVybiBzZWxmLnJlZmVyZW5jZWRfdHlwZV9uYW1lCisgICAgICAgIGVsc2U6CisgICAg
ICAgICAgICByZXR1cm4gc2VsZi50eXBlX2tpbmQgICMgaW50ZWdlciwgc3RyaW5nLCBudW1iZXIs
IGJvb2xlYW4sIGVudW0sIG9iamVjdCwgYXJyYXkKKworCitjbGFzcyBUeXBlOgorICAgIGRlZiBf
X2luaXRfXyhzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhl
cik6CisgICAgICAgIHJldHVybiBzZWxmLnF1YWxpZmllZF9uYW1lKCkgPT0gb3RoZXIucXVhbGlm
aWVkX25hbWUoKQorCisgICAgZGVmIF9faGFzaF9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2Vs
Zi5xdWFsaWZpZWRfbmFtZSgpLl9faGFzaF9fKCkKKworICAgICMgVGhlc2UgbWV0aG9kcyBzaG91
bGQgYmUgb3ZlcnJpZGRlbiBieSBzdWJjbGFzc2VzLgorICAgIGRlZiBpc19lbnVtKHNlbGYpOgor
ICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiB0eXBlX2RvbWFpbihzZWxmKToKKyAgICAg
ICAgcGFzcworCisgICAgZGVmIHJhd19uYW1lKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBk
ZWYgcXVhbGlmaWVkX25hbWUoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgICMgVGhpcyBpcyB1
c2VkIHRvIHJlc29sdmUgbmVzdGVkIHR5cGVzIGFmdGVyIGluc3RhbmNlcyBhcmUgY3JlYXRlZC4K
KyAgICBkZWYgcmVzb2x2ZV90eXBlX3JlZmVyZW5jZXMoc2VsZiwgcHJvdG9jb2wpOgorICAgICAg
ICBwYXNzCisKKworY2xhc3MgT2JqZWN0VHlwZShUeXBlKToKKyAgICBkZWYgX19pbml0X18oc2Vs
ZiwgbmFtZSwgZG9tYWluLCBtZW1iZXJzKToKKyAgICAgICAgc2VsZi5fbmFtZSA9IG5hbWUKKyAg
ICAgICAgc2VsZi5fZG9tYWluID0gZG9tYWluCisgICAgICAgIHNlbGYuX21lbWJlcnMgPSBtZW1i
ZXJzCisKKyAgICBkZWYgdHlwZV9kb21haW4oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9k
b21haW4KKworICAgIGRlZiByYXdfbmFtZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX25h
bWUKKworICAgIGRlZiBxdWFsaWZpZWRfbmFtZShzZWxmKToKKyAgICAgICAgcmV0dXJuICAiLiIu
am9pbihbc2VsZi50eXBlX2RvbWFpbigpLmRvbWFpbl9uYW1lLCBzZWxmLnJhd19uYW1lKCldKQor
CisKK2NsYXNzIFByaW1pdGl2ZVR5cGUoVHlwZSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5h
bWUpOgorICAgICAgICBzZWxmLl9uYW1lID0gbmFtZQorCisgICAgZGVmIHR5cGVfZG9tYWluKHNl
bGYpOgorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIHJhd19uYW1lKHNlbGYpOgorICAg
ICAgICByZXR1cm4gc2VsZi5fbmFtZQorCisgICAgZGVmIHF1YWxpZmllZF9uYW1lKHNlbGYpOgor
ICAgICAgICByZXR1cm4gc2VsZi5fbmFtZQorCisKK2NsYXNzIEFsaWFzZWRUeXBlKFR5cGUpOgor
ICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCBkb21haW4sIGFsaWFzZWRfdHlwZV9yZWYpOgor
ICAgICAgICBzZWxmLl9uYW1lID0gbmFtZQorICAgICAgICBzZWxmLl9kb21haW4gPSBkb21haW4K
KyAgICAgICAgc2VsZi5fYWxpYXNlZF90eXBlX3JlZiA9IGFsaWFzZWRfdHlwZV9yZWYKKyAgICAg
ICAgc2VsZi5hbGlhc2VkX3R5cGUgPSBOb25lCisKKyAgICBkZWYgdHlwZV9kb21haW4oc2VsZik6
CisgICAgICAgIHJldHVybiBzZWxmLl9kb21haW4KKworICAgIGRlZiByYXdfbmFtZShzZWxmKToK
KyAgICAgICAgcmV0dXJuIHNlbGYuX25hbWUKKworICAgIGRlZiBxdWFsaWZpZWRfbmFtZShzZWxm
KToKKyAgICAgICAgcmV0dXJuICAiLiIuam9pbihbc2VsZi50eXBlX2RvbWFpbigpLmRvbWFpbl9u
YW1lLCBzZWxmLnJhd19uYW1lKCldKQorCisgICAgZGVmIHJlc29sdmVfdHlwZV9yZWZlcmVuY2Vz
KHNlbGYsIHByb3RvY29sKToKKyAgICAgICAgaWYgc2VsZi5hbGlhc2VkX3R5cGUgaXMgbm90IE5v
bmU6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBzZWxmLmFsaWFzZWRfdHlwZSA9IHBy
b3RvY29sLmxvb2t1cF90eXBlX3JlZmVyZW5jZShzZWxmLl9hbGlhc2VkX3R5cGVfcmVmLCBzZWxm
LnR5cGVfZG9tYWluKCkpCisgICAgICAgIGxvZy5kZWJ1ZygiPCBSZXNvbHZlZCB0eXBlIHJlZmVy
ZW5jZSBmb3IgYWxpYXNlZCB0eXBlIGluICVzOiAlcyIgJSAoc2VsZi5xdWFsaWZpZWRfbmFtZSgp
LCBzZWxmLmFsaWFzZWRfdHlwZS5xdWFsaWZpZWRfbmFtZSgpKSkKKworCitjbGFzcyBFbnVtVHlw
ZShUeXBlKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwgZG9tYWluLCB2YWx1ZXMsIHBy
aW1pdGl2ZV90eXBlX3JlZik6CisgICAgICAgIHNlbGYuX25hbWUgPSBuYW1lCisgICAgICAgIHNl
bGYuX2RvbWFpbiA9IGRvbWFpbgorICAgICAgICBzZWxmLl92YWx1ZXMgPSB2YWx1ZXMKKyAgICAg
ICAgc2VsZi5fcHJpbWl0aXZlX3R5cGVfcmVmID0gcHJpbWl0aXZlX3R5cGVfcmVmCisgICAgICAg
IHNlbGYucHJpbWl0aXZlX3R5cGUgPSBOb25lCisKKyAgICBkZWYgaXNfZW51bShzZWxmKToKKyAg
ICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiB0eXBlX2RvbWFpbihzZWxmKToKKyAgICAgICAg
cmV0dXJuIHNlbGYuX2RvbWFpbgorCisgICAgZGVmIGVudW1fdmFsdWVzKHNlbGYpOgorICAgICAg
ICByZXR1cm4gc2VsZi5fdmFsdWVzCisKKyAgICBkZWYgcmF3X25hbWUoc2VsZik6CisgICAgICAg
IHJldHVybiBzZWxmLl9uYW1lCisKKyAgICBkZWYgcXVhbGlmaWVkX25hbWUoc2VsZik6CisgICAg
ICAgIHJldHVybiAgIi4iLmpvaW4oW3NlbGYudHlwZV9kb21haW4oKS5kb21haW5fbmFtZSwgc2Vs
Zi5fbmFtZV0pCisKKyAgICBkZWYgcmVzb2x2ZV90eXBlX3JlZmVyZW5jZXMoc2VsZiwgcHJvdG9j
b2wpOgorICAgICAgICBpZiBzZWxmLnByaW1pdGl2ZV90eXBlIGlzIG5vdCBOb25lOgorICAgICAg
ICAgICAgcmV0dXJuCisKKyAgICAgICAgc2VsZi5wcmltaXRpdmVfdHlwZSA9IHByb3RvY29sLmxv
b2t1cF90eXBlX3JlZmVyZW5jZShzZWxmLl9wcmltaXRpdmVfdHlwZV9yZWYsIERvbWFpbnMuR0xP
QkFMKQorICAgICAgICBsb2cuZGVidWcoIjwgUmVzb2x2ZWQgdHlwZSByZWZlcmVuY2UgZm9yIGVu
dW0gdHlwZSBpbiAlczogJXMiICUgKHNlbGYucXVhbGlmaWVkX25hbWUoKSwgc2VsZi5wcmltaXRp
dmVfdHlwZS5xdWFsaWZpZWRfbmFtZSgpKSkKKyAgICAgICAgbG9nLmRlYnVnKCI8PCBlbnVtIHZh
bHVlczogJXMiICUgc2VsZi5lbnVtX3ZhbHVlcygpKQorCisKK2NsYXNzIEFycmF5VHlwZShUeXBl
KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZWxlbWVudF90eXBlX3JlZiwgZG9tYWluKToKKyAg
ICAgICAgc2VsZi5fZG9tYWluID0gZG9tYWluCisgICAgICAgIHNlbGYuX2VsZW1lbnRfdHlwZV9y
ZWYgPSBlbGVtZW50X3R5cGVfcmVmCisgICAgICAgIHNlbGYuZWxlbWVudF90eXBlID0gTm9uZQor
CisgICAgZGVmIHR5cGVfZG9tYWluKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fZG9tYWlu
CisKKyAgICBkZWYgcXVhbGlmaWVkX25hbWUoc2VsZik6CisgICAgICAgIHJldHVybiAgIi4iLmpv
aW4oWyJhcnJheSIsIHNlbGYuZWxlbWVudF90eXBlLnF1YWxpZmllZF9uYW1lKCldKQorCisgICAg
ZGVmIHJlc29sdmVfdHlwZV9yZWZlcmVuY2VzKHNlbGYsIHByb3RvY29sKToKKyAgICAgICAgaWYg
c2VsZi5lbGVtZW50X3R5cGUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICByZXR1cm4KKworICAg
ICAgICBzZWxmLmVsZW1lbnRfdHlwZSA9IHByb3RvY29sLmxvb2t1cF90eXBlX3JlZmVyZW5jZShz
ZWxmLl9lbGVtZW50X3R5cGVfcmVmLCBzZWxmLnR5cGVfZG9tYWluKCkpCisgICAgICAgIGxvZy5k
ZWJ1ZygiPCBSZXNvbHZlZCB0eXBlIHJlZmVyZW5jZSBmb3IgZWxlbWVudCB0eXBlIGluICVzOiAl
cyIgJSAoc2VsZi5xdWFsaWZpZWRfbmFtZSgpLCBzZWxmLmVsZW1lbnRfdHlwZS5xdWFsaWZpZWRf
bmFtZSgpKSkKKworCitkZWYgY2hlY2tfZm9yX3JlcXVpcmVkX3Byb3BlcnRpZXMocHJvcHMsIG9i
aiwgd2hhdCk6CisgICAgZm9yIHByb3AgaW4gcHJvcHM6CisgICAgICAgIGlmIHByb3Agbm90IGlu
IG9iajoKKyAgICAgICAgICAgIHJhaXNlIFBhcnNlRXhjZXB0aW9uKCJXaGVuIHBhcnNpbmcgJXMs
IHJlcXVpcmVkIHByb3BlcnR5IG1pc3Npbmc6ICVzIiAlICh3aGF0LCBwcm9wKSkKKworCitjbGFz
cyBQcm90b2NvbDoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZnJhbWV3b3JrX25hbWUpOgorICAg
ICAgICBzZWxmLmRvbWFpbnMgPSBbXQorICAgICAgICBzZWxmLnR5cGVzX2J5X25hbWUgPSB7fQor
ICAgICAgICBzZWxmLmZyYW1ld29yayA9IEZyYW1ld29yay5mcm9tU3RyaW5nKGZyYW1ld29ya19u
YW1lKQorCisgICAgZGVmIHBhcnNlX3NwZWNpZmljYXRpb24oc2VsZiwganNvbiwgaXNTdXBwbGVt
ZW50YWwpOgorICAgICAgICBsb2cuZGVidWcoInBhcnNlIHRvcGxldmVsIikKKworICAgICAgICBp
ZiBpc2luc3RhbmNlKGpzb24sIGRpY3QpIGFuZCAnZG9tYWlucycgaW4ganNvbjoKKyAgICAgICAg
ICAgIGpzb24gPSBqc29uWydkb21haW5zJ10KKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoanNv
biwgbGlzdCk6CisgICAgICAgICAgICBqc29uID0gW2pzb25dCisKKyAgICAgICAgZm9yIGRvbWFp
biBpbiBqc29uOgorICAgICAgICAgICAgc2VsZi5wYXJzZV9kb21haW4oZG9tYWluLCBpc1N1cHBs
ZW1lbnRhbCkKKworICAgIGRlZiBwYXJzZV9kb21haW4oc2VsZiwganNvbiwgaXNTdXBwbGVtZW50
YWwpOgorICAgICAgICBjaGVja19mb3JfcmVxdWlyZWRfcHJvcGVydGllcyhbJ2RvbWFpbiddLCBq
c29uLCAiZG9tYWluIikKKyAgICAgICAgbG9nLmRlYnVnKCJwYXJzZSBkb21haW4gIiArIGpzb25b
J2RvbWFpbiddKQorCisgICAgICAgIHR5cGVzID0gW10KKyAgICAgICAgY29tbWFuZHMgPSBbXQor
ICAgICAgICBldmVudHMgPSBbXQorCisgICAgICAgIGlmICd0eXBlcycgaW4ganNvbjoKKyAgICAg
ICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGpzb25bJ3R5cGVzJ10sIGxpc3QpOgorICAgICAgICAg
ICAgICAgIHJhaXNlIFBhcnNlRXhjZXB0aW9uKCJNYWxmb3JtZWQgc3BlY2lmaWNhdGlvbjogdHlw
ZXMgaXMgbm90IGFuIGFycmF5IikKKyAgICAgICAgICAgIHR5cGVzLmV4dGVuZChbc2VsZi5wYXJz
ZV90eXBlX2RlY2xhcmF0aW9uKF9kZWNsYXJhdGlvbikgZm9yIF9kZWNsYXJhdGlvbiBpbiBqc29u
Wyd0eXBlcyddXSkKKworICAgICAgICBpZiAnY29tbWFuZHMnIGluIGpzb246CisgICAgICAgICAg
ICBpZiBub3QgaXNpbnN0YW5jZShqc29uWydjb21tYW5kcyddLCBsaXN0KToKKyAgICAgICAgICAg
ICAgICByYWlzZSBQYXJzZUV4Y2VwdGlvbigiTWFsZm9ybWVkIHNwZWNpZmljYXRpb246IGNvbW1h
bmRzIGlzIG5vdCBhbiBhcnJheSIpCisgICAgICAgICAgICBjb21tYW5kcy5leHRlbmQoW3NlbGYu
cGFyc2VfY29tbWFuZChfY29tbWFuZCkgZm9yIF9jb21tYW5kIGluIGpzb25bJ2NvbW1hbmRzJ11d
KQorCisgICAgICAgIGlmICdldmVudHMnIGluIGpzb246CisgICAgICAgICAgICBpZiBub3QgaXNp
bnN0YW5jZShqc29uWydldmVudHMnXSwgbGlzdCk6CisgICAgICAgICAgICAgICAgcmFpc2UgUGFy
c2VFeGNlcHRpb24oIk1hbGZvcm1lZCBzcGVjaWZpY2F0aW9uOiBldmVudHMgaXMgbm90IGFuIGFy
cmF5IikKKyAgICAgICAgICAgIGV2ZW50cy5leHRlbmQoW3NlbGYucGFyc2VfZXZlbnQoX2V2ZW50
KSBmb3IgX2V2ZW50IGluIGpzb25bJ2V2ZW50cyddXSkKKworICAgICAgICBzZWxmLmRvbWFpbnMu
YXBwZW5kKERvbWFpbihqc29uWydkb21haW4nXSwganNvbi5nZXQoJ2Rlc2NyaXB0aW9uJywgIiIp
LCBpc1N1cHBsZW1lbnRhbCwgdHlwZXMsIGNvbW1hbmRzLCBldmVudHMpKQorCisgICAgZGVmIHBh
cnNlX3R5cGVfZGVjbGFyYXRpb24oc2VsZiwganNvbik6CisgICAgICAgIGNoZWNrX2Zvcl9yZXF1
aXJlZF9wcm9wZXJ0aWVzKFsnaWQnLCAndHlwZSddLCBqc29uLCAidHlwZSIpCisgICAgICAgIGxv
Zy5kZWJ1ZygicGFyc2UgdHlwZSAlcyIgJSBqc29uWydpZCddKQorCisgICAgICAgIHR5cGVfbWVt
YmVycyA9IFtdCisKKyAgICAgICAgaWYgJ3Byb3BlcnRpZXMnIGluIGpzb246CisgICAgICAgICAg
ICBpZiBub3QgaXNpbnN0YW5jZShqc29uWydwcm9wZXJ0aWVzJ10sIGxpc3QpOgorICAgICAgICAg
ICAgICAgIHJhaXNlIFBhcnNlRXhjZXB0aW9uKCJNYWxmb3JtZWQgc3BlY2lmaWNhdGlvbjogcHJv
cGVydGllcyBpcyBub3QgYW4gYXJyYXkiKQorICAgICAgICAgICAgdHlwZV9tZW1iZXJzLmV4dGVu
ZChbc2VsZi5wYXJzZV90eXBlX21lbWJlcihfbWVtYmVyKSBmb3IgX21lbWJlciBpbiBqc29uWydw
cm9wZXJ0aWVzJ11dKQorCisgICAgICAgIHR5cGVfcmVmID0gVHlwZVJlZmVyZW5jZShqc29uWyd0
eXBlJ10sIE5vbmUsIGpzb24uZ2V0KCdlbnVtJywgW10pLCBqc29uLmdldCgnaXRlbXMnKSkKKyAg
ICAgICAgcmV0dXJuIFR5cGVEZWNsYXJhdGlvbihqc29uWydpZCddLCB0eXBlX3JlZiwganNvbi5n
ZXQoImRlc2NyaXB0aW9uIiwgIiIpLCB0eXBlX21lbWJlcnMpCisKKyAgICBkZWYgcGFyc2VfdHlw
ZV9tZW1iZXIoc2VsZiwganNvbik6CisgICAgICAgIGNoZWNrX2Zvcl9yZXF1aXJlZF9wcm9wZXJ0
aWVzKFsnbmFtZSddLCBqc29uLCAidHlwZSBtZW1iZXIiKQorICAgICAgICBsb2cuZGVidWcoInBh
cnNlIHR5cGUgbWVtYmVyICVzIiAlIGpzb25bJ25hbWUnXSkKKworICAgICAgICB0eXBlX3JlZiA9
IFR5cGVSZWZlcmVuY2UoanNvbi5nZXQoJ3R5cGUnKSwganNvbi5nZXQoJyRyZWYnKSwganNvbi5n
ZXQoJ2VudW0nLCBbXSksIGpzb24uZ2V0KCdpdGVtcycpKQorICAgICAgICByZXR1cm4gVHlwZU1l
bWJlcihqc29uWyduYW1lJ10sIHR5cGVfcmVmLCBqc29uLmdldCgnb3B0aW9uYWwnLCBGYWxzZSks
IGpzb24uZ2V0KCdkZXNjcmlwdGlvbicsICIiKSkKKworICAgIGRlZiBwYXJzZV9jb21tYW5kKHNl
bGYsIGpzb24pOgorICAgICAgICBjaGVja19mb3JfcmVxdWlyZWRfcHJvcGVydGllcyhbJ25hbWUn
XSwganNvbiwgImNvbW1hbmQiKQorICAgICAgICBsb2cuZGVidWcoInBhcnNlIGNvbW1hbmQgJXMi
ICUganNvblsnbmFtZSddKQorCisgICAgICAgIGNhbGxfcGFyYW1ldGVycyA9IFtdCisgICAgICAg
IHJldHVybl9wYXJhbWV0ZXJzID0gW10KKworICAgICAgICBpZiAncGFyYW1ldGVycycgaW4ganNv
bjoKKyAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGpzb25bJ3BhcmFtZXRlcnMnXSwgbGlz
dCk6CisgICAgICAgICAgICAgICAgcmFpc2UgUGFyc2VFeGNlcHRpb24oIk1hbGZvcm1lZCBzcGVj
aWZpY2F0aW9uOiBwYXJhbWV0ZXJzIGlzIG5vdCBhbiBhcnJheSIpCisgICAgICAgICAgICBjYWxs
X3BhcmFtZXRlcnMuZXh0ZW5kKFtzZWxmLnBhcnNlX3BhcmFtZXRlcihfcGFyYW1ldGVyKSBmb3Ig
X3BhcmFtZXRlciBpbiBqc29uWydwYXJhbWV0ZXJzJ11dKQorCisgICAgICAgIGlmICdyZXR1cm5z
JyBpbiBqc29uOgorICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoanNvblsncmV0dXJucydd
LCBsaXN0KToKKyAgICAgICAgICAgICAgICByYWlzZSBQYXJzZUV4Y2VwdGlvbigiTWFsZm9ybWVk
IHNwZWNpZmljYXRpb246IHJldHVybnMgaXMgbm90IGFuIGFycmF5IikKKyAgICAgICAgICAgIHJl
dHVybl9wYXJhbWV0ZXJzLmV4dGVuZChbc2VsZi5wYXJzZV9wYXJhbWV0ZXIoX3BhcmFtZXRlcikg
Zm9yIF9wYXJhbWV0ZXIgaW4ganNvblsncmV0dXJucyddXSkKKworICAgICAgICByZXR1cm4gQ29t
bWFuZChqc29uWyduYW1lJ10sIGNhbGxfcGFyYW1ldGVycywgcmV0dXJuX3BhcmFtZXRlcnMsIGpz
b24uZ2V0KCdkZXNjcmlwdGlvbicsICIiKSwganNvbi5nZXQoJ2FzeW5jJywgRmFsc2UpKQorCisg
ICAgZGVmIHBhcnNlX2V2ZW50KHNlbGYsIGpzb24pOgorICAgICAgICBjaGVja19mb3JfcmVxdWly
ZWRfcHJvcGVydGllcyhbJ25hbWUnXSwganNvbiwgImV2ZW50IikKKyAgICAgICAgbG9nLmRlYnVn
KCJwYXJzZSBldmVudCAlcyIgJSBqc29uWyduYW1lJ10pCisKKyAgICAgICAgZXZlbnRfcGFyYW1l
dGVycyA9IFtdCisKKyAgICAgICAgaWYgJ3BhcmFtZXRlcnMnIGluIGpzb246CisgICAgICAgICAg
ICBpZiBub3QgaXNpbnN0YW5jZShqc29uWydwYXJhbWV0ZXJzJ10sIGxpc3QpOgorICAgICAgICAg
ICAgICAgIHJhaXNlIFBhcnNlRXhjZXB0aW9uKCJNYWxmb3JtZWQgc3BlY2lmaWNhdGlvbjogcGFy
YW1ldGVycyBpcyBub3QgYW4gYXJyYXkiKQorICAgICAgICAgICAgZXZlbnRfcGFyYW1ldGVycy5l
eHRlbmQoW3NlbGYucGFyc2VfcGFyYW1ldGVyKF9wYXJhbWV0ZXIpIGZvciBfcGFyYW1ldGVyIGlu
IGpzb25bJ3BhcmFtZXRlcnMnXV0pCisKKyAgICAgICAgcmV0dXJuIEV2ZW50KGpzb25bJ25hbWUn
XSwgZXZlbnRfcGFyYW1ldGVycywganNvbi5nZXQoJ2Rlc2NyaXB0aW9uJywgIiIpKQorCisgICAg
ZGVmIHBhcnNlX3BhcmFtZXRlcihzZWxmLCBqc29uKToKKyAgICAgICAgY2hlY2tfZm9yX3JlcXVp
cmVkX3Byb3BlcnRpZXMoWyduYW1lJ10sIGpzb24sICJwYXJhbWV0ZXIiKQorICAgICAgICBsb2cu
ZGVidWcoInBhcnNlIHBhcmFtZXRlciAlcyIgJSBqc29uWyduYW1lJ10pCisKKyAgICAgICAgdHlw
ZV9yZWYgPSBUeXBlUmVmZXJlbmNlKGpzb24uZ2V0KCd0eXBlJyksIGpzb24uZ2V0KCckcmVmJyks
IGpzb24uZ2V0KCdlbnVtJywgW10pLCBqc29uLmdldCgnaXRlbXMnKSkKKyAgICAgICAgcmV0dXJu
IFBhcmFtZXRlcihqc29uWyduYW1lJ10sIHR5cGVfcmVmLCBqc29uLmdldCgnb3B0aW9uYWwnLCBG
YWxzZSksIGpzb24uZ2V0KCdkZXNjcmlwdGlvbicsICIiKSkKKworICAgIGRlZiByZXNvbHZlX3R5
cGVzKHNlbGYpOgorICAgICAgICBxdWFsaWZpZWRfZGVjbGFyZWRfdHlwZV9uYW1lcyA9IHNldChb
J2Jvb2xlYW4nLCAnc3RyaW5nJywgJ2ludGVnZXInLCAnbnVtYmVyJywgJ2VudW0nLCAnYXJyYXkn
LCAnb2JqZWN0JywgJ2FueSddKQorCisgICAgICAgIHNlbGYudHlwZXNfYnlfbmFtZVsnc3RyaW5n
J10gPSBQcmltaXRpdmVUeXBlKCdzdHJpbmcnKQorICAgICAgICBmb3IgX3ByaW1pdGl2ZV90eXBl
IGluIFsnYm9vbGVhbicsICdpbnRlZ2VyJywgJ251bWJlciddOgorICAgICAgICAgICAgc2VsZi50
eXBlc19ieV9uYW1lW19wcmltaXRpdmVfdHlwZV0gPSBQcmltaXRpdmVUeXBlKF9wcmltaXRpdmVf
dHlwZSkKKyAgICAgICAgZm9yIF9vYmplY3RfdHlwZSBpbiBbJ2FueScsICdvYmplY3QnXToKKyAg
ICAgICAgICAgIHNlbGYudHlwZXNfYnlfbmFtZVtfb2JqZWN0X3R5cGVdID0gUHJpbWl0aXZlVHlw
ZShfb2JqZWN0X3R5cGUpCisKKyAgICAgICAgIyBHYXRoZXIgcXVhbGlmaWVkIHR5cGUgbmFtZXMg
ZnJvbSB0eXBlIGRlY2xhcmF0aW9ucyBpbiBlYWNoIGRvbWFpbi4KKyAgICAgICAgZm9yIF9kb21h
aW4gaW4gc2VsZi5kb21haW5zOgorICAgICAgICAgICAgZm9yIF9kZWNsYXJhdGlvbiBpbiBfZG9t
YWluLnR5cGVfZGVjbGFyYXRpb25zOgorICAgICAgICAgICAgICAgICMgQmFzaWMgc2FuaXR5IGNo
ZWNraW5nLgorICAgICAgICAgICAgICAgIGlmIF9kZWNsYXJhdGlvbi50eXBlX3JlZi5yZWZlcmVu
Y2VkX3R5cGVfbmFtZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgVHlw
ZWNoZWNrRXhjZXB0aW9uKCJUeXBlIGRlY2xhcmF0aW9ucyBtdXN0IG5hbWUgYSBiYXNlIHR5cGUs
IG5vdCBhIHR5cGUgcmVmZXJlbmNlLiIpCisKKyAgICAgICAgICAgICAgICAjIEZpbmQgZHVwbGlj
YXRlIHF1YWxpZmllZCB0eXBlIG5hbWVzLgorICAgICAgICAgICAgICAgIHF1YWxpZmllZF90eXBl
X25hbWUgPSAiLiIuam9pbihbX2RvbWFpbi5kb21haW5fbmFtZSwgX2RlY2xhcmF0aW9uLnR5cGVf
bmFtZV0pCisgICAgICAgICAgICAgICAgaWYgcXVhbGlmaWVkX3R5cGVfbmFtZSBpbiBxdWFsaWZp
ZWRfZGVjbGFyZWRfdHlwZV9uYW1lczoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgVHlwZWNo
ZWNrRXhjZXB0aW9uKCJEdXBsaWNhdGUgdHlwZSBkZWNsYXJhdGlvbjogJXMiICUgcXVhbGlmaWVk
X3R5cGVfbmFtZSkKKworICAgICAgICAgICAgICAgIHF1YWxpZmllZF9kZWNsYXJlZF90eXBlX25h
bWVzLmFkZChxdWFsaWZpZWRfdHlwZV9uYW1lKQorCisgICAgICAgICAgICAgICAgdHlwZV9pbnN0
YW5jZSA9IE5vbmUKKworICAgICAgICAgICAgICAgIGtpbmQgPSBfZGVjbGFyYXRpb24udHlwZV9y
ZWYudHlwZV9raW5kCisgICAgICAgICAgICAgICAgaWYgbGVuKF9kZWNsYXJhdGlvbi50eXBlX3Jl
Zi5lbnVtX3ZhbHVlcykgPiAwOgorICAgICAgICAgICAgICAgICAgICBwcmltaXRpdmVfdHlwZV9y
ZWYgPSBUeXBlUmVmZXJlbmNlKF9kZWNsYXJhdGlvbi50eXBlX3JlZi50eXBlX2tpbmQsIE5vbmUs
IFtdLCBOb25lKQorICAgICAgICAgICAgICAgICAgICB0eXBlX2luc3RhbmNlID0gRW51bVR5cGUo
X2RlY2xhcmF0aW9uLnR5cGVfbmFtZSwgX2RvbWFpbiwgX2RlY2xhcmF0aW9uLnR5cGVfcmVmLmVu
dW1fdmFsdWVzLCBwcmltaXRpdmVfdHlwZV9yZWYpCisgICAgICAgICAgICAgICAgZWxpZiBraW5k
ID09ICJhcnJheSI6CisgICAgICAgICAgICAgICAgICAgIHR5cGVfaW5zdGFuY2UgPSBBcnJheVR5
cGUoX2RlY2xhcmF0aW9uLnR5cGVfcmVmLmFycmF5X3R5cGVfcmVmLCBfZG9tYWluKQorICAgICAg
ICAgICAgICAgIGVsaWYga2luZCA9PSAib2JqZWN0IjoKKyAgICAgICAgICAgICAgICAgICAgdHlw
ZV9pbnN0YW5jZSA9IE9iamVjdFR5cGUoX2RlY2xhcmF0aW9uLnR5cGVfbmFtZSwgX2RvbWFpbiwg
X2RlY2xhcmF0aW9uLnR5cGVfbWVtYmVycykKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAg
ICAgICAgICAgICAgICB0eXBlX2luc3RhbmNlID0gQWxpYXNlZFR5cGUoX2RlY2xhcmF0aW9uLnR5
cGVfbmFtZSwgX2RvbWFpbiwgX2RlY2xhcmF0aW9uLnR5cGVfcmVmKQorCisgICAgICAgICAgICAg
ICAgc2VsZi50eXBlc19ieV9uYW1lW3F1YWxpZmllZF90eXBlX25hbWVdID0gdHlwZV9pbnN0YW5j
ZQorCisgICAgICAgICMgUmVzb2x2ZSBhbGwgdHlwZSByZWZlcmVuY2VzIHJlY3Vyc2l2ZWx5Lgor
ICAgICAgICBmb3IgX2RvbWFpbiBpbiBzZWxmLmRvbWFpbnM6CisgICAgICAgICAgICBfZG9tYWlu
LnJlc29sdmVfdHlwZV9yZWZlcmVuY2VzKHNlbGYpCisKKyAgICBkZWYgbG9va3VwX3R5cGVfZm9y
X2RlY2xhcmF0aW9uKHNlbGYsIGRlY2xhcmF0aW9uLCBkb21haW4pOgorICAgICAgICAjIFRoaXMg
d2lsbCBvbmx5IG1hdGNoIGEgdHlwZSBkZWZpbmVkIGluIHRoZSBzYW1lIGRvbWFpbiwgd2hlcmUg
cHJlZml4ZXMgYXJlbid0IHJlcXVpcmVkLgorICAgICAgICBxdWFsaWZpZWRfbmFtZSA9ICIuIi5q
b2luKFtkb21haW4uZG9tYWluX25hbWUsIGRlY2xhcmF0aW9uLnR5cGVfbmFtZV0pCisgICAgICAg
IGlmIHF1YWxpZmllZF9uYW1lIGluIHNlbGYudHlwZXNfYnlfbmFtZToKKyAgICAgICAgICAgIGZv
dW5kX3R5cGUgPSBzZWxmLnR5cGVzX2J5X25hbWVbcXVhbGlmaWVkX25hbWVdCisgICAgICAgICAg
ICBmb3VuZF90eXBlLnJlc29sdmVfdHlwZV9yZWZlcmVuY2VzKHNlbGYpCisgICAgICAgICAgICBy
ZXR1cm4gZm91bmRfdHlwZQorCisgICAgICAgIHJhaXNlIFR5cGVjaGVja0V4Y2VwdGlvbigiTG9v
a3VwIGZhaWxlZCBmb3IgdHlwZSBkZWNsYXJhdGlvbjogJXMgKHJlZmVyZW5jZWQgZnJvbSBkb21h
aW46ICVzKSIgJSAoZGVjbGFyYXRpb24udHlwZV9uYW1lLCBkb21haW4uZG9tYWluX25hbWUpKQor
CisgICAgZGVmIGxvb2t1cF90eXBlX3JlZmVyZW5jZShzZWxmLCB0eXBlX3JlZiwgZG9tYWluKToK
KyAgICAgICAgIyBJZiByZWZlcmVuY2UgaXMgdG8gYW4gYW5vbnltb3VzIGFycmF5IHR5cGUsIGNy
ZWF0ZSBhIGZyZXNoIGluc3RhbmNlLgorICAgICAgICBpZiB0eXBlX3JlZi50eXBlX2tpbmQgPT0g
ImFycmF5IjoKKyAgICAgICAgICAgIHR5cGVfaW5zdGFuY2UgPSBBcnJheVR5cGUodHlwZV9yZWYu
YXJyYXlfdHlwZV9yZWYsIGRvbWFpbikKKyAgICAgICAgICAgIHR5cGVfaW5zdGFuY2UucmVzb2x2
ZV90eXBlX3JlZmVyZW5jZXMoc2VsZikKKyAgICAgICAgICAgIGxvZy5kZWJ1ZygiPCBDcmVhdGVk
IGZyZXNoIHR5cGUgaW5zdGFuY2UgZm9yIGFub255bW91cyBhcnJheSB0eXBlOiAlcyIgJSB0eXBl
X2luc3RhbmNlLnF1YWxpZmllZF9uYW1lKCkpCisgICAgICAgICAgICByZXR1cm4gdHlwZV9pbnN0
YW5jZQorCisgICAgICAgICMgSWYgcmVmZXJlbmNlIGlzIHRvIGFuIGFub255bW91cyBlbnVtIHR5
cGUsIGNyZWF0ZSBhIGZyZXNoIGluc3RhbmNlLgorICAgICAgICBpZiBsZW4odHlwZV9yZWYuZW51
bV92YWx1ZXMpID4gMDoKKyAgICAgICAgICAgICMgV2UgbmVlZCB0byBjcmVhdGUgYSB0eXBlIHJl
ZmVyZW5jZSB3aXRob3V0IGVudW0gdmFsdWVzIGFzIHRoZSBlbnVtJ3MgbmVzdGVkIHR5cGUuCisg
ICAgICAgICAgICBwcmltaXRpdmVfdHlwZV9yZWYgPSBUeXBlUmVmZXJlbmNlKHR5cGVfcmVmLnR5
cGVfa2luZCwgTm9uZSwgW10sIE5vbmUpCisgICAgICAgICAgICB0eXBlX2luc3RhbmNlID0gRW51
bVR5cGUoIihhbm9ueW1vdXMpIiwgZG9tYWluLCB0eXBlX3JlZi5lbnVtX3ZhbHVlcywgcHJpbWl0
aXZlX3R5cGVfcmVmKQorICAgICAgICAgICAgdHlwZV9pbnN0YW5jZS5yZXNvbHZlX3R5cGVfcmVm
ZXJlbmNlcyhzZWxmKQorICAgICAgICAgICAgbG9nLmRlYnVnKCI8IENyZWF0ZWQgZnJlc2ggdHlw
ZSBpbnN0YW5jZSBmb3IgYW5vbnltb3VzIGVudW0gdHlwZTogJXMiICUgdHlwZV9pbnN0YW5jZS5x
dWFsaWZpZWRfbmFtZSgpKQorICAgICAgICAgICAgcmV0dXJuIHR5cGVfaW5zdGFuY2UKKworICAg
ICAgICAjIFRoaXMgd2lsbCBtYXRjaCB3aGVuIHJlZmVyZW5jaW5nIGEgdHlwZSBkZWZpbmVkIGlu
IHRoZSBzYW1lIGRvbWFpbiwgd2hlcmUgcHJlZml4ZXMgYXJlbid0IHJlcXVpcmVkLgorICAgICAg
ICBxdWFsaWZpZWRfbmFtZSA9ICIuIi5qb2luKFtkb21haW4uZG9tYWluX25hbWUsIHR5cGVfcmVm
LnJlZmVyZW5jZWRfbmFtZSgpXSkKKyAgICAgICAgaWYgcXVhbGlmaWVkX25hbWUgaW4gc2VsZi50
eXBlc19ieV9uYW1lOgorICAgICAgICAgICAgZm91bmRfdHlwZSA9IHNlbGYudHlwZXNfYnlfbmFt
ZVtxdWFsaWZpZWRfbmFtZV0KKyAgICAgICAgICAgIGZvdW5kX3R5cGUucmVzb2x2ZV90eXBlX3Jl
ZmVyZW5jZXMoc2VsZikKKyAgICAgICAgICAgIGxvZy5kZWJ1ZygiPCBMb29rdXAgc3VjY2VlZGVk
IGZvciB1bnF1YWxpZmllZCB0eXBlOiAlcyIgJSBmb3VuZF90eXBlLnF1YWxpZmllZF9uYW1lKCkp
CisgICAgICAgICAgICByZXR1cm4gZm91bmRfdHlwZQorCisgICAgICAgICMgVGhpcyB3aWxsIG1h
dGNoIHByaW1pdGl2ZSB0eXBlcyBhbmQgZnVsbHktcXVhbGlmaWVkIHR5cGVzIGZyb20gYSBkaWZm
ZXJlbnQgZG9tYWluLgorICAgICAgICBpZiB0eXBlX3JlZi5yZWZlcmVuY2VkX25hbWUoKSBpbiBz
ZWxmLnR5cGVzX2J5X25hbWU6CisgICAgICAgICAgICBmb3VuZF90eXBlID0gc2VsZi50eXBlc19i
eV9uYW1lW3R5cGVfcmVmLnJlZmVyZW5jZWRfbmFtZSgpXQorICAgICAgICAgICAgZm91bmRfdHlw
ZS5yZXNvbHZlX3R5cGVfcmVmZXJlbmNlcyhzZWxmKQorICAgICAgICAgICAgbG9nLmRlYnVnKCI8
IExvb2t1cCBzdWNjZWVkZWQgZm9yIHByaW1pdGl2ZSBvciBxdWFsaWZpZWQgdHlwZTogJXMiICUg
Zm91bmRfdHlwZS5xdWFsaWZpZWRfbmFtZSgpKQorICAgICAgICAgICAgcmV0dXJuIGZvdW5kX3R5
cGUKKworICAgICAgICByYWlzZSBUeXBlY2hlY2tFeGNlcHRpb24oIkxvb2t1cCBmYWlsZWQgZm9y
IHR5cGUgcmVmZXJlbmNlOiAlcyAocmVmZXJlbmNlZCBmcm9tIGRvbWFpbjogJXMpIiAlICh0eXBl
X3JlZi5yZWZlcmVuY2VkX25hbWUoKSwgZG9tYWluLmRvbWFpbl9uYW1lKSkKKworCitjbGFzcyBE
b21haW46CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGRvbWFpbl9uYW1lLCBkZXNjcmlwdGlvbiwg
aXNTdXBwbGVtZW50YWwsIHR5cGVfZGVjbGFyYXRpb25zLCBjb21tYW5kcywgZXZlbnRzKToKKyAg
ICAgICAgc2VsZi5kb21haW5fbmFtZSA9IGRvbWFpbl9uYW1lCisgICAgICAgIHNlbGYuZGVzY3Jp
cHRpb24gPSBkZXNjcmlwdGlvbgorICAgICAgICBzZWxmLmlzX3N1cHBsZW1lbnRhbCA9IGlzU3Vw
cGxlbWVudGFsCisgICAgICAgIHNlbGYudHlwZV9kZWNsYXJhdGlvbnMgPSB0eXBlX2RlY2xhcmF0
aW9ucworICAgICAgICBzZWxmLmNvbW1hbmRzID0gY29tbWFuZHMKKyAgICAgICAgc2VsZi5ldmVu
dHMgPSBldmVudHMKKworICAgIGRlZiByZXNvbHZlX3R5cGVfcmVmZXJlbmNlcyhzZWxmLCBwcm90
b2NvbCk6CisgICAgICAgIGxvZy5kZWJ1ZygiPiBSZXNvbHZpbmcgdHlwZSBkZWNsYXJhdGlvbnMg
Zm9yIGRvbWFpbjogJXMiICUgc2VsZi5kb21haW5fbmFtZSkKKyAgICAgICAgZm9yIF9kZWNsYXJh
dGlvbiBpbiBzZWxmLnR5cGVfZGVjbGFyYXRpb25zOgorICAgICAgICAgICAgX2RlY2xhcmF0aW9u
LnJlc29sdmVfdHlwZV9yZWZlcmVuY2VzKHByb3RvY29sLCBzZWxmKQorCisgICAgICAgIGxvZy5k
ZWJ1ZygiPiBSZXNvbHZpbmcgdHlwZXMgaW4gY29tbWFuZHMgZm9yIGRvbWFpbjogJXMiICUgc2Vs
Zi5kb21haW5fbmFtZSkKKyAgICAgICAgZm9yIF9jb21tYW5kIGluIHNlbGYuY29tbWFuZHM6Cisg
ICAgICAgICAgICBfY29tbWFuZC5yZXNvbHZlX3R5cGVfcmVmZXJlbmNlcyhwcm90b2NvbCwgc2Vs
ZikKKworICAgICAgICBsb2cuZGVidWcoIj4gUmVzb2x2aW5nIHR5cGVzIGluIGV2ZW50cyBmb3Ig
ZG9tYWluOiAlcyIgJSBzZWxmLmRvbWFpbl9uYW1lKQorICAgICAgICBmb3IgX2V2ZW50IGluIHNl
bGYuZXZlbnRzOgorICAgICAgICAgICAgX2V2ZW50LnJlc29sdmVfdHlwZV9yZWZlcmVuY2VzKHBy
b3RvY29sLCBzZWxmKQorCisKK2NsYXNzIERvbWFpbnM6CisgICAgR0xPQkFMID0gRG9tYWluKCIi
LCAiVGhlIGdsb2JhbCBkb21haW4sIGluIHdoaWNoIHByaW1pdGl2ZSB0eXBlcyBhcmUgaW1wbGlj
aXRseSBkZWNsYXJlZC4iLCBUcnVlLCBbXSwgW10sIFtdKQorCisKK2NsYXNzIFR5cGVEZWNsYXJh
dGlvbjoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdHlwZV9uYW1lLCB0eXBlX3JlZiwgZGVzY3Jp
cHRpb24sIHR5cGVfbWVtYmVycyk6CisgICAgICAgIHNlbGYudHlwZV9uYW1lID0gdHlwZV9uYW1l
CisgICAgICAgIHNlbGYudHlwZV9yZWYgPSB0eXBlX3JlZgorICAgICAgICBzZWxmLmRlc2NyaXB0
aW9uID0gZGVzY3JpcHRpb24KKyAgICAgICAgc2VsZi50eXBlX21lbWJlcnMgPSB0eXBlX21lbWJl
cnMKKworICAgIGRlZiByZXNvbHZlX3R5cGVfcmVmZXJlbmNlcyhzZWxmLCBwcm90b2NvbCwgZG9t
YWluKToKKyAgICAgICAgbG9nLmRlYnVnKCI+PiBSZXNvbHZpbmcgdHlwZSByZWZlcmVuY2VzIGZv
ciB0eXBlIGRlY2xhcmF0aW9uOiAlcyIgJSBzZWxmLnR5cGVfbmFtZSkKKyAgICAgICAgc2VsZi50
eXBlID0gcHJvdG9jb2wubG9va3VwX3R5cGVfZm9yX2RlY2xhcmF0aW9uKHNlbGYsIGRvbWFpbikK
KyAgICAgICAgZm9yIF9tZW1iZXIgaW4gc2VsZi50eXBlX21lbWJlcnM6CisgICAgICAgICAgICBf
bWVtYmVyLnJlc29sdmVfdHlwZV9yZWZlcmVuY2VzKHByb3RvY29sLCBkb21haW4pCisKKworY2xh
c3MgVHlwZU1lbWJlcjoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbWVtYmVyX25hbWUsIHR5cGVf
cmVmLCBpc19vcHRpb25hbCwgZGVzY3JpcHRpb24pOgorICAgICAgICBzZWxmLm1lbWJlcl9uYW1l
ID0gbWVtYmVyX25hbWUKKyAgICAgICAgc2VsZi50eXBlX3JlZiA9IHR5cGVfcmVmCisgICAgICAg
IHNlbGYuaXNfb3B0aW9uYWwgPSBpc19vcHRpb25hbAorICAgICAgICBzZWxmLmRlc2NyaXB0aW9u
ID0gZGVzY3JpcHRpb24KKworICAgIGRlZiByZXNvbHZlX3R5cGVfcmVmZXJlbmNlcyhzZWxmLCBw
cm90b2NvbCwgZG9tYWluKToKKyAgICAgICAgbG9nLmRlYnVnKCI+Pj4gUmVzb2x2aW5nIHR5cGUg
cmVmZXJlbmNlcyBmb3IgdHlwZSBtZW1iZXI6ICVzIiAlIHNlbGYubWVtYmVyX25hbWUpCisgICAg
ICAgIHNlbGYudHlwZSA9IHByb3RvY29sLmxvb2t1cF90eXBlX3JlZmVyZW5jZShzZWxmLnR5cGVf
cmVmLCBkb21haW4pCisKKworY2xhc3MgUGFyYW1ldGVyOgorICAgIGRlZiBfX2luaXRfXyhzZWxm
LCBwYXJhbWV0ZXJfbmFtZSwgdHlwZV9yZWYsIGlzX29wdGlvbmFsLCBkZXNjcmlwdGlvbik6Cisg
ICAgICAgIHNlbGYucGFyYW1ldGVyX25hbWUgPSBwYXJhbWV0ZXJfbmFtZQorICAgICAgICBzZWxm
LnR5cGVfcmVmID0gdHlwZV9yZWYKKyAgICAgICAgc2VsZi5pc19vcHRpb25hbCA9IGlzX29wdGlv
bmFsCisgICAgICAgIHNlbGYuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbgorCisgICAgZGVmIHJl
c29sdmVfdHlwZV9yZWZlcmVuY2VzKHNlbGYsIHByb3RvY29sLCBkb21haW4pOgorICAgICAgICBs
b2cuZGVidWcoIj4+PiBSZXNvbHZpbmcgdHlwZSByZWZlcmVuY2VzIGZvciBwYXJhbWV0ZXI6ICVz
IiAlIHNlbGYucGFyYW1ldGVyX25hbWUpCisgICAgICAgIHNlbGYudHlwZSA9IHByb3RvY29sLmxv
b2t1cF90eXBlX3JlZmVyZW5jZShzZWxmLnR5cGVfcmVmLCBkb21haW4pCisKKworY2xhc3MgQ29t
bWFuZDoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY29tbWFuZF9uYW1lLCBjYWxsX3BhcmFtZXRl
cnMsIHJldHVybl9wYXJhbWV0ZXJzLCBkZXNjcmlwdGlvbiwgaXNfYXN5bmMpOgorICAgICAgICBz
ZWxmLmNvbW1hbmRfbmFtZSA9IGNvbW1hbmRfbmFtZQorICAgICAgICBzZWxmLmNhbGxfcGFyYW1l
dGVycyA9IGNhbGxfcGFyYW1ldGVycworICAgICAgICBzZWxmLnJldHVybl9wYXJhbWV0ZXJzID0g
cmV0dXJuX3BhcmFtZXRlcnMKKyAgICAgICAgc2VsZi5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9u
CisgICAgICAgIHNlbGYuaXNfYXN5bmMgPSBpc19hc3luYworCisgICAgZGVmIHJlc29sdmVfdHlw
ZV9yZWZlcmVuY2VzKHNlbGYsIHByb3RvY29sLCBkb21haW4pOgorICAgICAgICBsb2cuZGVidWco
Ij4+IFJlc29sdmluZyB0eXBlIHJlZmVyZW5jZXMgZm9yIGNhbGwgcGFyYW1ldGVycyBpbiBjb21t
YW5kOiAlcyIgJSBzZWxmLmNvbW1hbmRfbmFtZSkKKyAgICAgICAgZm9yIF9wYXJhbWV0ZXIgaW4g
c2VsZi5jYWxsX3BhcmFtZXRlcnM6CisgICAgICAgICAgICBfcGFyYW1ldGVyLnJlc29sdmVfdHlw
ZV9yZWZlcmVuY2VzKHByb3RvY29sLCBkb21haW4pCisKKyAgICAgICAgbG9nLmRlYnVnKCI+PiBS
ZXNvbHZpbmcgdHlwZSByZWZlcmVuY2VzIGZvciByZXR1cm4gcGFyYW1ldGVycyBpbiBjb21tYW5k
OiAlcyIgJSBzZWxmLmNvbW1hbmRfbmFtZSkKKyAgICAgICAgZm9yIF9wYXJhbWV0ZXIgaW4gc2Vs
Zi5yZXR1cm5fcGFyYW1ldGVyczoKKyAgICAgICAgICAgIF9wYXJhbWV0ZXIucmVzb2x2ZV90eXBl
X3JlZmVyZW5jZXMocHJvdG9jb2wsIGRvbWFpbikKKworCitjbGFzcyBFdmVudDoKKyAgICBkZWYg
X19pbml0X18oc2VsZiwgZXZlbnRfbmFtZSwgZXZlbnRfcGFyYW1ldGVycywgZGVzY3JpcHRpb24p
OgorICAgICAgICBzZWxmLmV2ZW50X25hbWUgPSBldmVudF9uYW1lCisgICAgICAgIHNlbGYuZXZl
bnRfcGFyYW1ldGVycyA9IGV2ZW50X3BhcmFtZXRlcnMKKyAgICAgICAgc2VsZi5kZXNjcmlwdGlv
biA9IGRlc2NyaXB0aW9uCisKKyAgICBkZWYgcmVzb2x2ZV90eXBlX3JlZmVyZW5jZXMoc2VsZiwg
cHJvdG9jb2wsIGRvbWFpbik6CisgICAgICAgIGxvZy5kZWJ1ZygiPj4gUmVzb2x2aW5nIHR5cGUg
cmVmZXJlbmNlcyBmb3IgcGFyYW1ldGVycyBpbiBldmVudDogJXMiICUgc2VsZi5ldmVudF9uYW1l
KQorICAgICAgICBmb3IgX3BhcmFtZXRlciBpbiBzZWxmLmV2ZW50X3BhcmFtZXRlcnM6CisgICAg
ICAgICAgICBfcGFyYW1ldGVyLnJlc29sdmVfdHlwZV9yZWZlcmVuY2VzKHByb3RvY29sLCBkb21h
aW4pCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbiBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9jb21tYW5kcy13aXRoLWFzeW5jLWF0dHJp
YnV0ZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjExYjJkZDU4ZDcwOTkzZmUyYjIxNDZjYWY1NzUzMTRiZWU3
ODhjZTQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgpAQCAtMCww
ICsxLDgzIEBACit7CisgICAgImRvbWFpbiI6ICJEYXRhYmFzZSIsCisgICAgInR5cGVzIjogWwor
ICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiRGF0YWJhc2VJZCIsCisgICAgICAgICAgICAi
dHlwZSI6ICJzdHJpbmciLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBpZGVu
dGlmaWVyIG9mIERhdGFiYXNlIG9iamVjdC4iCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAg
ICAgICAgICJpZCI6ICJFcnJvciIsCisgICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAorICAg
ICAgICAgICAgImRlc2NyaXB0aW9uIjogIkRhdGFiYXNlIGVycm9yLiIsCisgICAgICAgICAgICAi
cHJvcGVydGllcyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm1lc3NhZ2UiLCAidHlw
ZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRpb24iOiAiRXJyb3IgbWVzc2FnZS4iIH0sCisgICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJjb2RlIiwgInR5cGUiOiAiaW50ZWdlciIsICJkZXNjcmlwdGlv
biI6ICJFcnJvciBjb2RlLiIgfQorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXSwKKyAg
ICAiY29tbWFuZHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImV4ZWN1dGVT
UUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMiLAorICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBb
CisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJkYXRhYmFzZUlkIiwgIiRyZWYiOiAiRGF0YWJh
c2VJZCIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInF1ZXJ5IiwgInR5cGUiOiAic3Ry
aW5nIiB9CisgICAgICAgICAgICBdLAorICAgICAgICAgICAgInJldHVybnMiOiBbCisgICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogImFycmF5IiwgIm9wdGlv
bmFsIjogdHJ1ZSwgIml0ZW1zIjogeyAidHlwZSI6ICJzdHJpbmciIH0gfSwKKyAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogIm5vdGVzIiwgInR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjogdHJ1
ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidGltZXN0YW1wIiwgInR5cGUiOiAibnVt
YmVyIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidmFs
dWVzIiwgInR5cGUiOiAib2JqZWN0IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAicGF5bG9hZCIsICJ0eXBlIjogImFueSIsICJvcHRpb25hbCI6IHRydWUg
fSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNxbEVycm9yIiwgIiRyZWYiOiAiRXJyb3Ii
LCAib3B0aW9uYWwiOiB0cnVlIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAg
eworICAgICAgICAgICAgIm5hbWUiOiAiZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1
ZXMiLAorICAgICAgICAgICAgImFzeW5jIjogdHJ1ZSwKKyAgICAgICAgICAgICJwYXJhbWV0ZXJz
IjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZGF0YWJhc2VJZCIsICIkcmVmIjogIkRh
dGFiYXNlSWQiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJxdWVyeSIsICJ0eXBlIjog
InN0cmluZyIgfQorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICJyZXR1cm5zIjogWworICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJhcnJheSIsICJv
cHRpb25hbCI6IHRydWUsICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9IH0sCisgICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6
IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjog
Im51bWJlciIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjog
InZhbHVlcyIsICJ0eXBlIjogIm9iamVjdCIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJhbnkiLCAib3B0aW9uYWwiOiB0
cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzcWxFcnJvciIsICIkcmVmIjogIkVy
cm9yIiwgIm9wdGlvbmFsIjogdHJ1ZSB9CisgICAgICAgICAgICBdCisgICAgICAgIH0sCisgICAg
ICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImV4ZWN1dGVTUUxTeW5jIiwKKyAgICAgICAgICAg
ICJwYXJhbWV0ZXJzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZGF0YWJhc2VJZCIs
ICIkcmVmIjogIkRhdGFiYXNlSWQiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJxdWVy
eSIsICJ0eXBlIjogInN0cmluZyIgfQorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICJyZXR1
cm5zIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6
ICJhcnJheSIsICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9IH0sCisgICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIgfSwKKyAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciIgfSwKKyAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogInZhbHVlcyIsICJ0eXBlIjogIm9iamVjdCIgfSwKKyAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJhbnkiIH0sCisgICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJzcWxFcnJvciIsICIkcmVmIjogIkVycm9yIiB9CisgICAgICAgICAgICBd
CisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImV4ZWN1dGVTUUxB
c3luYyIsCisgICAgICAgICAgICAiYXN5bmMiOiB0cnVlLAorICAgICAgICAgICAgInBhcmFtZXRl
cnMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJkYXRhYmFzZUlkIiwgIiRyZWYiOiAi
RGF0YWJhc2VJZCIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInF1ZXJ5IiwgInR5cGUi
OiAic3RyaW5nIiB9CisgICAgICAgICAgICBdLAorICAgICAgICAgICAgInJldHVybnMiOiBbCisg
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogImFycmF5Iiwg
Iml0ZW1zIjogeyAidHlwZSI6ICJzdHJpbmciIH0gfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1l
IjogIm5vdGVzIiwgInR5cGUiOiAic3RyaW5nIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAidGltZXN0YW1wIiwgInR5cGUiOiAibnVtYmVyIiB9LAorICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAidmFsdWVzIiwgInR5cGUiOiAib2JqZWN0IiB9LAorICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAicGF5bG9hZCIsICJ0eXBlIjogImFueSIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1l
IjogInNxbEVycm9yIiwgIiRyZWYiOiAiRXJyb3IiIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAg
fQorICAgIF0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9jb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRl
cnMuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9j
b21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4zM2JkN2U2OTlhM2Y2ZjU1YTBmNTVkZjY3OTc1YmZhYjY0NjYxYTAxCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2Nv
bW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uCkBAIC0wLDAg
KzEsNTkgQEAKK3sKKyAgICAiZG9tYWluIjogIkRhdGFiYXNlIiwKKyAgICAidHlwZXMiOiBbCisg
ICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJEYXRhYmFzZUlkIiwKKyAgICAgICAgICAgICJ0
eXBlIjogInN0cmluZyIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5pcXVlIGlkZW50
aWZpZXIgb2YgRGF0YWJhc2Ugb2JqZWN0LiIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAg
ICAgICAgImlkIjogIkVycm9yIiwKKyAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCisgICAg
ICAgICAgICAiZGVzY3JpcHRpb24iOiAiRGF0YWJhc2UgZXJyb3IuIiwKKyAgICAgICAgICAgICJw
cm9wZXJ0aWVzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibWVzc2FnZSIsICJ0eXBl
IjogInN0cmluZyIsICJkZXNjcmlwdGlvbiI6ICJFcnJvciBtZXNzYWdlLiIgfSwKKyAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogImNvZGUiLCAidHlwZSI6ICJpbnRlZ2VyIiwgImRlc2NyaXB0aW9u
IjogIkVycm9yIGNvZGUuIiB9CisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdLAorICAg
ICJjb21tYW5kcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiZXhlY3V0ZUFs
bE9wdGlvbmFsUGFyYW1ldGVycyIsCisgICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKKyAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAiYXJyYXkiLCAib3B0
aW9uYWwiOiB0cnVlLCAiaXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSB9LAorICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAibm90ZXMiLCAidHlwZSI6ICJzdHJpbmciLCAib3B0aW9uYWwiOiB0
cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0aW1lc3RhbXAiLCAidHlwZSI6ICJu
dW1iZXIiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ2
YWx1ZXMiLCAidHlwZSI6ICJvYmplY3QiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJwYXlsb2FkIiwgInR5cGUiOiAiYW55IiwgIm9wdGlvbmFsIjogdHJ1
ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic3FsRXJyb3IiLCAiJHJlZiI6ICJFcnJv
ciIsICJvcHRpb25hbCI6IHRydWUgfQorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICJyZXR1
cm5zIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6
ICJhcnJheSIsICJvcHRpb25hbCI6IHRydWUsICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9
IH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIs
ICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRpbWVzdGFt
cCIsICJ0eXBlIjogIm51bWJlciIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogInZhbHVlcyIsICJ0eXBlIjogIm9iamVjdCIsICJvcHRpb25hbCI6IHRydWUg
fSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJhbnkiLCAi
b3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzcWxFcnJvciIs
ICIkcmVmIjogIkVycm9yIiwgIm9wdGlvbmFsIjogdHJ1ZSB9CisgICAgICAgICAgICBdCisgICAg
ICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImV4ZWN1dGVOb09wdGlvbmFs
UGFyYW1ldGVycyIsCisgICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKKyAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAiYXJyYXkiLCAiaXRlbXMiOiB7ICJ0
eXBlIjogInN0cmluZyIgfSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibm90ZXMiLCAi
dHlwZSI6ICJzdHJpbmciIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0aW1lc3RhbXAi
LCAidHlwZSI6ICJudW1iZXIiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ2YWx1ZXMi
LCAidHlwZSI6ICJvYmplY3QiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwYXlsb2Fk
IiwgInR5cGUiOiAiYW55IiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic3FsRXJyb3Ii
LCAiJHJlZiI6ICJFcnJvciIgfQorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICJyZXR1cm5z
IjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJh
cnJheSIsICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9IH0sCisgICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIgfSwKKyAgICAgICAgICAgICAgICB7
ICJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciIgfSwKKyAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogInZhbHVlcyIsICJ0eXBlIjogIm9iamVjdCIgfSwKKyAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJhbnkiIH0sCisgICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJzcWxFcnJvciIsICIkcmVmIjogIkVycm9yIiB9CisgICAgICAgICAgICBdCisg
ICAgICAgIH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5q
c29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2RvbWFp
bnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wMDRkN2M5MDI1
ZTdlODAxOGRhZDcyODZlZGE5ODc4ZTU3Mzk5ZWVkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2RvbWFpbnMtd2l0aC12YXJ5
aW5nLWNvbW1hbmQtc2l6ZXMuanNvbgpAQCAtMCwwICsxLDU1IEBACitbCit7CisgICAgImRvbWFp
biI6ICJOZXR3b3JrMSIsCisKKyAgICAiY29tbWFuZHMiOiBbCisgICAgICAgIHsKKyAgICAgICAg
ICAgICJuYW1lIjogImxvYWRSZXNvdXJjZTEiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjog
IkxvYWRzIGEgcmVzb3VyY2UgaW4gdGhlIGNvbnRleHQgb2YgYSBmcmFtZSBvbiB0aGUgaW5zcGVj
dGVkIHBhZ2Ugd2l0aG91dCBjcm9zcyBvcmlnaW4gY2hlY2tzLiIKKyAgICAgICAgfQorICAgIF0K
K30sCit7CisgICAgImRvbWFpbiI6ICJOZXR3b3JrMiIsCisgICAgInR5cGVzIjogWworICAgICAg
ICB7CisgICAgICAgICAgICAiaWQiOiAiTG9hZGVySWQiLAorICAgICAgICAgICAgInR5cGUiOiAi
c3RyaW5nIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUgbG9hZGVyIGlkZW50
aWZpZXIuIgorICAgICAgICB9CisgICAgXQorfSwKK3sKKyAgICAiZG9tYWluIjogIk5ldHdvcmsz
IiwKKyAgICAiY29tbWFuZHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImxv
YWRSZXNvdXJjZTEiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkxvYWRzIGEgcmVzb3Vy
Y2UgaW4gdGhlIGNvbnRleHQgb2YgYSBmcmFtZSBvbiB0aGUgaW5zcGVjdGVkIHBhZ2Ugd2l0aG91
dCBjcm9zcyBvcmlnaW4gY2hlY2tzLiIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAg
ICAgIm5hbWUiOiAibG9hZFJlc291cmNlMiIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAi
TG9hZHMgYSByZXNvdXJjZSBpbiB0aGUgY29udGV4dCBvZiBhIGZyYW1lIG9uIHRoZSBpbnNwZWN0
ZWQgcGFnZSB3aXRob3V0IGNyb3NzIG9yaWdpbiBjaGVja3MuIgorICAgICAgICB9LAorICAgICAg
ICB7CisgICAgICAgICAgICAibmFtZSI6ICJsb2FkUmVzb3VyY2UzIiwKKyAgICAgICAgICAgICJk
ZXNjcmlwdGlvbiI6ICJMb2FkcyBhIHJlc291cmNlIGluIHRoZSBjb250ZXh0IG9mIGEgZnJhbWUg
b24gdGhlIGluc3BlY3RlZCBwYWdlIHdpdGhvdXQgY3Jvc3Mgb3JpZ2luIGNoZWNrcy4iCisgICAg
ICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImxvYWRSZXNvdXJjZTQiLAor
ICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkxvYWRzIGEgcmVzb3VyY2UgaW4gdGhlIGNvbnRl
eHQgb2YgYSBmcmFtZSBvbiB0aGUgaW5zcGVjdGVkIHBhZ2Ugd2l0aG91dCBjcm9zcyBvcmlnaW4g
Y2hlY2tzLiIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAibG9h
ZFJlc291cmNlNSIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiTG9hZHMgYSByZXNvdXJj
ZSBpbiB0aGUgY29udGV4dCBvZiBhIGZyYW1lIG9uIHRoZSBpbnNwZWN0ZWQgcGFnZSB3aXRob3V0
IGNyb3NzIG9yaWdpbiBjaGVja3MuIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAg
ICAibmFtZSI6ICJsb2FkUmVzb3VyY2U2IiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJM
b2FkcyBhIHJlc291cmNlIGluIHRoZSBjb250ZXh0IG9mIGEgZnJhbWUgb24gdGhlIGluc3BlY3Rl
ZCBwYWdlIHdpdGhvdXQgY3Jvc3Mgb3JpZ2luIGNoZWNrcy4iCisgICAgICAgIH0sCisgICAgICAg
IHsKKyAgICAgICAgICAgICJuYW1lIjogImxvYWRSZXNvdXJjZTciLAorICAgICAgICAgICAgImRl
c2NyaXB0aW9uIjogIkxvYWRzIGEgcmVzb3VyY2UgaW4gdGhlIGNvbnRleHQgb2YgYSBmcmFtZSBv
biB0aGUgaW5zcGVjdGVkIHBhZ2Ugd2l0aG91dCBjcm9zcyBvcmlnaW4gY2hlY2tzLiIKKyAgICAg
ICAgfQorICAgIF0KK30KK10KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9jb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0
ZS5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9leHBlY3RlZC9jb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uLXJlc3VsdApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4wNzkxM2M4MjkwNTgzNGFkMTlhN2Q4YWFkMGM5ZWRmZGIxODAyZGRkCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2V4cGVjdGVkL2NvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24tcmVzdWx0CkBA
IC0wLDAgKzEsMzY2IEBACisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdEJhY2tlbmRDb21t
YW5kcy5qcworLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5q
c29uCisvLyBieSB0aGUgc2NyaXB0OiBKYXZhU2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0cy9Db2Rl
R2VuZXJhdG9ySW5zcGVjdG9yLnB5CisKKy8vIERhdGFiYXNlLgorSW5zcGVjdG9yQmFja2VuZC5y
ZWdpc3RlckRhdGFiYXNlRGlzcGF0Y2hlciA9IEluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21h
aW5EaXNwYXRjaGVyLmJpbmQoSW5zcGVjdG9yQmFja2VuZCwgIkRhdGFiYXNlIik7CitJbnNwZWN0
b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiRGF0YWJhc2UuZXhlY3V0ZVNRTFN5bmNPcHRpb25h
bFJldHVyblZhbHVlcyIsIFsibmFtZSI6ICJkYXRhYmFzZUlkIiwgInR5cGUiOiAiTm9uZSIsIGZh
bHNlLCAibmFtZSI6ICJxdWVyeSIsICJ0eXBlIjogInN0cmluZyIsIGZhbHNlXSwgWyJuYW1lIjog
ImNvbHVtbk5hbWVzIiwgInR5cGUiOiAiYXJyYXkiLCAib3B0aW9uYWwiOiB0cnVlLCAibmFtZSI6
ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IHRydWUsICJuYW1lIjogInRp
bWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciIsICJvcHRpb25hbCI6IHRydWUsICJuYW1lIjogInZh
bHVlcyIsICJ0eXBlIjogIm9iamVjdCIsICJvcHRpb25hbCI6IHRydWUsICJuYW1lIjogInBheWxv
YWQiLCAidHlwZSI6ICJhbnkiLCAib3B0aW9uYWwiOiB0cnVlLCAibmFtZSI6ICJzcWxFcnJvciIs
ICJ0eXBlIjogIk5vbmUiLCAib3B0aW9uYWwiOiB0cnVlXSk7CitJbnNwZWN0b3JCYWNrZW5kLnJl
Z2lzdGVyQ29tbWFuZCgiRGF0YWJhc2UuZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1
ZXMiLCBbIm5hbWUiOiAiZGF0YWJhc2VJZCIsICJ0eXBlIjogIk5vbmUiLCBmYWxzZSwgIm5hbWUi
OiAicXVlcnkiLCAidHlwZSI6ICJzdHJpbmciLCBmYWxzZV0sIFsibmFtZSI6ICJjb2x1bW5OYW1l
cyIsICJ0eXBlIjogImFycmF5IiwgIm9wdGlvbmFsIjogdHJ1ZSwgIm5hbWUiOiAibm90ZXMiLCAi
dHlwZSI6ICJzdHJpbmciLCAib3B0aW9uYWwiOiB0cnVlLCAibmFtZSI6ICJ0aW1lc3RhbXAiLCAi
dHlwZSI6ICJudW1iZXIiLCAib3B0aW9uYWwiOiB0cnVlLCAibmFtZSI6ICJ2YWx1ZXMiLCAidHlw
ZSI6ICJvYmplY3QiLCAib3B0aW9uYWwiOiB0cnVlLCAibmFtZSI6ICJwYXlsb2FkIiwgInR5cGUi
OiAiYW55IiwgIm9wdGlvbmFsIjogdHJ1ZSwgIm5hbWUiOiAic3FsRXJyb3IiLCAidHlwZSI6ICJO
b25lIiwgIm9wdGlvbmFsIjogdHJ1ZV0pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1h
bmQoIkRhdGFiYXNlLmV4ZWN1dGVTUUxTeW5jIiwgWyJuYW1lIjogImRhdGFiYXNlSWQiLCAidHlw
ZSI6ICJOb25lIiwgZmFsc2UsICJuYW1lIjogInF1ZXJ5IiwgInR5cGUiOiAic3RyaW5nIiwgZmFs
c2VdLCBbIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJhcnJheSIsIGZhbHNlLCAibmFt
ZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIsIGZhbHNlLCAibmFtZSI6ICJ0aW1lc3RhbXAi
LCAidHlwZSI6ICJudW1iZXIiLCBmYWxzZSwgIm5hbWUiOiAidmFsdWVzIiwgInR5cGUiOiAib2Jq
ZWN0IiwgZmFsc2UsICJuYW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJhbnkiLCBmYWxzZSwgIm5h
bWUiOiAic3FsRXJyb3IiLCAidHlwZSI6ICJOb25lIiwgZmFsc2VdKTsKK0luc3BlY3RvckJhY2tl
bmQucmVnaXN0ZXJDb21tYW5kKCJEYXRhYmFzZS5leGVjdXRlU1FMQXN5bmMiLCBbIm5hbWUiOiAi
ZGF0YWJhc2VJZCIsICJ0eXBlIjogIk5vbmUiLCBmYWxzZSwgIm5hbWUiOiAicXVlcnkiLCAidHlw
ZSI6ICJzdHJpbmciLCBmYWxzZV0sIFsibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogImFy
cmF5IiwgZmFsc2UsICJuYW1lIjogIm5vdGVzIiwgInR5cGUiOiAic3RyaW5nIiwgZmFsc2UsICJu
YW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciIsIGZhbHNlLCAibmFtZSI6ICJ2YWx1
ZXMiLCAidHlwZSI6ICJvYmplY3QiLCBmYWxzZSwgIm5hbWUiOiAicGF5bG9hZCIsICJ0eXBlIjog
ImFueSIsIGZhbHNlLCAibmFtZSI6ICJzcWxFcnJvciIsICJ0eXBlIjogIk5vbmUiLCBmYWxzZV0p
OworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0QmFja2VuZENvbW1hbmRzLmpzCisKKyMjIyBC
ZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgorLy8gYnkgdGhlIHNjcmlw
dDogSmF2YVNjcmlwdENvcmUvcmVwbGF5L3NjcmlwdHMvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5w
eQorCisjaWZuZGVmIEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnNfaAorI2RlZmluZSBJ
bnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzX2gKKworI2lmIEVOQUJMRShJTlNQRUNUT1Ip
CisKKyNpbmNsdWRlICJJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmgiCisjaW5jbHVkZSA8aW5z
cGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NS
ZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIElu
c3BlY3RvciB7CisKK3R5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCisjaWYgRU5BQkxFKFNR
TF9EQVRBQkFTRSkKK2NsYXNzIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJl
dHVyblZhbHVlcyhFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgaW5fZGF0YWJhc2VJZCwgY29u
c3QgU3RyaW5nJiBpbl9xdWVyeSwgUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5
PFN0cmluZz4+JiBvcHRfb3V0X2NvbHVtbk5hbWVzLCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpP
cHRPdXRwdXQ8U3RyaW5nPiogb3B0X291dF9ub3RlcywgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6
T3B0T3V0cHV0PGRvdWJsZT4qIG9wdF9vdXRfdGltZXN0YW1wLCBJbnNwZWN0b3I6OlR5cGVCdWls
ZGVyOjpPcHRPdXRwdXQ8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+KiBvcHRfb3V0X3ZhbHVl
cywgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6T3B0T3V0cHV0PEluc3BlY3Rvcjo6SW5zcGVjdG9y
VmFsdWU+KiBvcHRfb3V0X3BheWxvYWQsIFJlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpE
YXRhYmFzZTo6RXJyb3I+JiBvcHRfb3V0X3NxbEVycm9yKSA9IDA7CisgICAgY2xhc3MgRXhlY3V0
ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNDYWxsYmFjayA6IHB1YmxpYyBJbnNwZWN0b3I6
Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2UgeworICAgIHB1YmxpYzoK
KyAgICAgICAgRXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNDYWxsYmFjayhQYXNz
UmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+LCBpbnQgaWQpOwor
ICAgICAgICB2b2lkIHNlbmRTdWNjZXNzKGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rv
ckFycmF5Piogb3B0X2NvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcqIG9wdF9ub3RlcywgY29uc3Qg
ZG91YmxlKiBvcHRfdGltZXN0YW1wLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCog
b3B0X3ZhbHVlcywgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSogb3B0X3BheWxvYWQs
IGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4qIG9wdF9zcWxFcnJvcik7
CisgICAgfTsKKyAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5W
YWx1ZXMoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0
cmluZyYgaW5fcXVlcnksIFBhc3NSZWZQdHI8RXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5W
YWx1ZXNDYWxsYmFjaz4gY2FsbGJhY2spID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNR
TFN5bmMoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0
cmluZyYgaW5fcXVlcnksIFJlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheTxTdHJp
bmc+PiYgb3V0X2NvbHVtbk5hbWVzLCBTdHJpbmcqIG91dF9ub3RlcywgZG91YmxlKiBvdXRfdGlt
ZXN0YW1wLCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCogb3V0X3ZhbHVlcywgSW5zcGVjdG9y
OjpJbnNwZWN0b3JWYWx1ZSogb3V0X3BheWxvYWQsIFJlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWls
ZGVyOjpEYXRhYmFzZTo6RXJyb3I+JiBvdXRfc3FsRXJyb3IpID0gMDsKKyAgICBjbGFzcyBFeGVj
dXRlU1FMQXN5bmNDYWxsYmFjayA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyOjpDYWxsYmFja0Jhc2UgeworICAgIHB1YmxpYzoKKyAgICAgICAgRXhlY3V0ZVNR
TEFzeW5jQ2FsbGJhY2soUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyPiwgaW50IGlkKTsKKyAgICAgICAgdm9pZCBzZW5kU3VjY2Vzcyhjb25zdCBSZWZQdHI8
SW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheT4mIGNvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIG5v
dGVzLCBkb3VibGUgdGltZXN0YW1wLCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCB2YWx1ZXMs
IEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUgcGF5bG9hZCwgY29uc3QgUmVmUHRyPEluc3BlY3Rv
cjo6SW5zcGVjdG9yT2JqZWN0PiYgc3FsRXJyb3IpOworICAgIH07CisgICAgdmlydHVhbCB2b2lk
IGV4ZWN1dGVTUUxBc3luYyhFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgaW5fZGF0YWJhc2VJ
ZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSwgUGFzc1JlZlB0cjxFeGVjdXRlU1FMQXN5bmNDYWxs
YmFjaz4gY2FsbGJhY2spID0gMDsKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIH5JbnNwZWN0b3JE
YXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpOworfTsKKyNlbmRpZiAvLyBFTkFCTEUo
U1FMX0RBVEFCQVNFKQorCisjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKK2NsYXNzIEluc3BlY3Rv
ckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNw
ZWN0b3JTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8SW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKElu
c3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqLCBJbnNwZWN0b3JEYXRhYmFzZUJh
Y2tlbmREaXNwYXRjaGVySGFuZGxlciopOworICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaChsb25n
IGNhbGxJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNw
ZWN0b3JPYmplY3Q+IG1lc3NhZ2UpIG92ZXJyaWRlOworcHJpdmF0ZToKKyAgICB2b2lkIGV4ZWN1
dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rv
cjo6SW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsKKyAgICB2b2lkIGV4ZWN1dGVTUUxBc3luY09w
dGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rv
ck9iamVjdCYgbWVzc2FnZSk7CisgICAgdm9pZCBleGVjdXRlU1FMU3luYyhsb25nIGNhbGxJZCwg
Y29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpOworICAgIHZvaWQgZXhl
Y3V0ZVNRTEFzeW5jKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVj
dCYgbWVzc2FnZSk7Citwcml2YXRlOgorICAgIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3Bh
dGNoZXIoSW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciosIEluc3BlY3RvckRh
dGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7CisgICAgSW5zcGVjdG9yRGF0YWJhc2VC
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIG1fYWdlbnQ7Cit9OworI2VuZGlmIC8vIEVOQUJMRShT
UUxfREFUQUJBU0UpCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5B
QkxFKElOU1BFQ1RPUikKKworI2VuZGlmIC8vICFkZWZpbmVkKEluc3BlY3RvclRlc3RCYWNrZW5k
RGlzcGF0Y2hlcnNfaCkKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRj
aGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJz
LmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29u
CisvLyBieSB0aGUgc2NyaXB0OiBKYXZhU2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0cy9Db2RlR2Vu
ZXJhdG9ySW5zcGVjdG9yLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnNw
ZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQor
CisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oPgorI2luY2x1
ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3Ry
aW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisjaWYgRU5BQkxFKFNRTF9EQVRBQkFT
RSkKK0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjp+SW5zcGVjdG9y
RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKSB7IH0KKyNlbmRpZiAvLyBFTkFCTEUo
U1FMX0RBVEFCQVNFKQorCisjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKK1Bhc3NSZWZQdHI8SW5z
cGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcj4gSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5k
RGlzcGF0Y2hlcjo6Y3JlYXRlKEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlz
cGF0Y2hlciwgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50
KQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlz
cGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlciwgYWdlbnQpKTsKK30KKworSW5zcGVjdG9yRGF0YWJh
c2VCYWNrZW5kRGlzcGF0Y2hlcjo6SW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcihJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIsIEluc3BlY3RvckRh
dGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKKyAgICA6IEluc3BlY3RvclN1
cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyKQorICAgICwgbV9h
Z2VudChhZ2VudCkKK3sKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNo
ZXJGb3JEb21haW4oQVNDSUlMaXRlcmFsKCJEYXRhYmFzZSIpLCB0aGlzKTsKK30KKwordm9pZCBJ
bnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIGNhbGxJZCwg
Y29uc3QgU3RyaW5nJiBtZXRob2QsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtZXNzYWdl
KQoreworICAgIFJlZjxJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0
KCp0aGlzKTsKKworICAgIGlmIChtZXRob2QgPT0gImV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1
cm5WYWx1ZXMiKQorICAgICAgICBleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGNh
bGxJZCwgKm1lc3NhZ2UuZ2V0KCkpOworICAgIGVsc2UgaWYgKG1ldGhvZCA9PSAiZXhlY3V0ZVNR
TEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMiKQorICAgICAgICBleGVjdXRlU1FMQXN5bmNPcHRp
b25hbFJldHVyblZhbHVlcyhjYWxsSWQsICptZXNzYWdlLmdldCgpKTsKKyAgICBlbHNlIGlmICht
ZXRob2QgPT0gImV4ZWN1dGVTUUxTeW5jIikKKyAgICAgICAgZXhlY3V0ZVNRTFN5bmMoY2FsbElk
LCAqbWVzc2FnZS5nZXQoKSk7CisgICAgZWxzZSBpZiAobWV0aG9kID09ICJleGVjdXRlU1FMQXN5
bmMiKQorICAgICAgICBleGVjdXRlU1FMQXN5bmMoY2FsbElkLCAqbWVzc2FnZS5nZXQoKSk7Cisg
ICAgZWxzZQorICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9y
KCZjYWxsSWQsIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgU3Ry
aW5nKCInIikgKyAiRGF0YWJhc2UiICsgJy4nICsgbWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIp
OworfQorCit2b2lkIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVT
UUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9i
amVjdCYgbWVzc2FnZSkKK3sKKyAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJy
b3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IHBhcmFtc0NvbnRhaW5lciA9IG1lc3NhZ2UuZ2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicGFy
YW1zIikpOworICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1z
Q29udGFpbmVyLmdldCgpOworICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9
IHByb3RvY29sRXJyb3JzLmdldCgpOworICAgIFN0cmluZyBpbl9kYXRhYmFzZUlkID0gSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXI6OmdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJ
TGl0ZXJhbCgiZGF0YWJhc2VJZCIpLCBudWxscHRyLCBwcm90b2NvbEVycm9yc1B0cik7CisgICAg
U3RyaW5nIGluX3F1ZXJ5ID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldFN0cmluZyhw
YXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgicXVlcnkiKSwgbnVsbHB0ciwgcHJvdG9j
b2xFcnJvcnNQdHIpOworICAgIGlmIChwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKKyAgICAg
ICAgU3RyaW5nIGVycm9yTWVzc2FnZSA9IFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBv
ZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiRGF0YWJhc2UuZXhlY3V0ZVNRTFN5
bmNPcHRpb25hbFJldHVyblZhbHVlcyIpOworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5y
ZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpJ
bnZhbGlkUGFyYW1zLCBlcnJvck1lc3NhZ2UsIHByb3RvY29sRXJyb3JzLnJlbGVhc2UoKSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBFcnJvclN0cmluZyBlcnJvcjsKKyAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwor
ICAgIFJlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheTxTdHJpbmc+PiBvdXRfY29s
dW1uTmFtZXM7CisgICAgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6T3B0T3V0cHV0PFN0cmluZz4g
b3V0X25vdGVzOworICAgIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6Ok9wdE91dHB1dDxkb3VibGU+
IG91dF90aW1lc3RhbXA7CisgICAgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6T3B0T3V0cHV0PElu
c3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBvdXRfdmFsdWVzOworICAgIEluc3BlY3Rvcjo6VHlw
ZUJ1aWxkZXI6Ok9wdE91dHB1dDxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiBvdXRfcGF5bG9h
ZDsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6RGF0YWJhc2U6OkVycm9yPiBv
dXRfc3FsRXJyb3I7CisgICAgbV9hZ2VudC0+ZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZh
bHVlcygmZXJyb3IsIGluX2RhdGFiYXNlSWQsIGluX3F1ZXJ5LCBvdXRfY29sdW1uTmFtZXMsICZv
dXRfbm90ZXMsICZvdXRfdGltZXN0YW1wLCAmb3V0X3ZhbHVlcywgJm91dF9wYXlsb2FkLCBvdXRf
c3FsRXJyb3IpOworCisgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkgeworICAgICAgICBpZiAob3V0
X2NvbHVtbk5hbWVzKQorICAgICAgICAgICAgcmVzdWx0LT5zZXRWYWx1ZShBU0NJSUxpdGVyYWwo
ImNvbHVtbk5hbWVzIiksIG91dF9jb2x1bW5OYW1lcyk7CisgICAgICAgIGlmIChvdXRfbm90ZXMu
aXNBc3NpZ25lZCgpKQorICAgICAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFs
KCJub3RlcyIpLCBvdXRfbm90ZXMuZ2V0VmFsdWUoKSk7CisgICAgICAgIGlmIChvdXRfdGltZXN0
YW1wLmlzQXNzaWduZWQoKSkKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0TnVtYmVyKEFTQ0lJTGl0
ZXJhbCgidGltZXN0YW1wIiksIG91dF90aW1lc3RhbXAuZ2V0VmFsdWUoKSk7CisgICAgICAgIGlm
IChvdXRfdmFsdWVzLmlzQXNzaWduZWQoKSkKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0T2JqZWN0
KEFTQ0lJTGl0ZXJhbCgidmFsdWVzIiksIG91dF92YWx1ZXMuZ2V0VmFsdWUoKSk7CisgICAgICAg
IGlmIChvdXRfcGF5bG9hZC5pc0Fzc2lnbmVkKCkpCisgICAgICAgICAgICByZXN1bHQtPnNldEFu
eShBU0NJSUxpdGVyYWwoInBheWxvYWQiKSwgb3V0X3BheWxvYWQuZ2V0VmFsdWUoKSk7CisgICAg
ICAgIGlmIChvdXRfc3FsRXJyb3IpCisgICAgICAgICAgICByZXN1bHQtPnNldFZhbHVlKEFTQ0lJ
TGl0ZXJhbCgic3FsRXJyb3IiKSwgb3V0X3NxbEVycm9yKTsKKyAgICB9CisgICAgbV9iYWNrZW5k
RGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgZXJyb3Ip
OworfQorCitJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0
ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNDYWxsYmFjazo6RXhlY3V0ZVNRTEFzeW5jT3B0
aW9uYWxSZXR1cm5WYWx1ZXNDYWxsYmFjayhQYXNzUmVmUHRyPEluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyPiBiYWNrZW5kRGlzcGF0Y2hlciwgaW50IGlkKSA6IEluc3BlY3Rvcjo6SW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZShiYWNrZW5kRGlzcGF0Y2hlciwgaWQpIHsg
fQorCit2b2lkIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVj
dXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc0NhbGxiYWNrOjpzZW5kU3VjY2VzcyhQYXNz
UmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5PFN0cmluZz4+IGNvbHVtbk5hbWVz
LCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8U3RyaW5nPiBub3RlcywgSW5zcGVj
dG9yOjpUeXBlQnVpbGRlcjo6T3B0T3V0cHV0PGRvdWJsZT4gdGltZXN0YW1wLCBJbnNwZWN0b3I6
OlR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IHZhbHVl
cywgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6T3B0T3V0cHV0PEluc3BlY3Rvcjo6SW5zcGVjdG9y
VmFsdWU+IHBheWxvYWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6RGF0YWJh
c2U6OkVycm9yPiBzcWxFcnJvcikKK3sKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBqc29u
TWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgaWYgKGNvbHVtbk5hbWVz
KQorICAgICAgICBqc29uTWVzc2FnZS0+c2V0VmFsdWUoQVNDSUlMaXRlcmFsKCJjb2x1bW5OYW1l
cyIpLCBjb2x1bW5OYW1lcyk7CisgICAgaWYgKG5vdGVzLmlzQXNzaWduZWQoKSkKKyAgICAgICAg
anNvbk1lc3NhZ2UtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoIm5vdGVzIiksIG5vdGVzLmdldFZh
bHVlKCkpOworICAgIGlmICh0aW1lc3RhbXAuaXNBc3NpZ25lZCgpKQorICAgICAgICBqc29uTWVz
c2FnZS0+c2V0TnVtYmVyKEFTQ0lJTGl0ZXJhbCgidGltZXN0YW1wIiksIHRpbWVzdGFtcC5nZXRW
YWx1ZSgpKTsKKyAgICBpZiAodmFsdWVzLmlzQXNzaWduZWQoKSkKKyAgICAgICAganNvbk1lc3Nh
Z2UtPnNldE9iamVjdChBU0NJSUxpdGVyYWwoInZhbHVlcyIpLCB2YWx1ZXMuZ2V0VmFsdWUoKSk7
CisgICAgaWYgKHBheWxvYWQuaXNBc3NpZ25lZCgpKQorICAgICAgICBqc29uTWVzc2FnZS0+c2V0
QW55KEFTQ0lJTGl0ZXJhbCgicGF5bG9hZCIpLCBwYXlsb2FkLmdldFZhbHVlKCkpOworICAgIGlm
IChzcWxFcnJvcikKKyAgICAgICAganNvbk1lc3NhZ2UtPnNldFZhbHVlKEFTQ0lJTGl0ZXJhbCgi
c3FsRXJyb3IiKSwgc3FsRXJyb3IpOworICAgIHNlbmRJZkFjdGl2ZShqc29uTWVzc2FnZSwgRXJy
b3JTdHJpbmcoKSk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hl
cjo6ZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyBjYWxsSWQsIGNvbnN0
IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSkKK3sKKyAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+
IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IG1lc3NhZ2UuZ2V0T2JqZWN0KEFTQ0lJ
TGl0ZXJhbCgicGFyYW1zIikpOworICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVy
UHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOworICAgIEluc3BlY3RvckFycmF5KiBwcm90b2Nv
bEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOworICAgIFN0cmluZyBpbl9kYXRhYmFz
ZUlkID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldFN0cmluZyhwYXJhbXNDb250YWlu
ZXJQdHIsIEFTQ0lJTGl0ZXJhbCgiZGF0YWJhc2VJZCIpLCBudWxscHRyLCBwcm90b2NvbEVycm9y
c1B0cik7CisgICAgU3RyaW5nIGluX3F1ZXJ5ID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6
OmdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgicXVlcnkiKSwgbnVs
bHB0ciwgcHJvdG9jb2xFcnJvcnNQdHIpOworICAgIGlmIChwcm90b2NvbEVycm9ycy0+bGVuZ3Ro
KCkpIHsKKyAgICAgICAgU3RyaW5nIGVycm9yTWVzc2FnZSA9IFN0cmluZzo6Zm9ybWF0KCJTb21l
IGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiRGF0YWJhc2Uu
ZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMiKTsKKyAgICAgICAgbV9iYWNrZW5k
RGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElkLCBJbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFtcywgZXJyb3JNZXNzYWdlLCBwcm90b2NvbEVycm9ycy5y
ZWxlYXNlKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgRXJyb3JTdHJpbmcgZXJy
b3I7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0
OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXI6OkV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJhY2s+IGNh
bGxiYWNrID0gYWRvcHRSZWYobmV3IEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc0NhbGxiYWNrKG1fYmFj
a2VuZERpc3BhdGNoZXIsY2FsbElkKSk7CisgICAgbV9hZ2VudC0+ZXhlY3V0ZVNRTEFzeW5jT3B0
aW9uYWxSZXR1cm5WYWx1ZXMoJmVycm9yLCBpbl9kYXRhYmFzZUlkLCBpbl9xdWVyeSwgY2FsbGJh
Y2spOworCisgICAgaWYgKGVycm9yLmxlbmd0aCgpKSB7CisgICAgICAgIGNhbGxiYWNrLT5kaXNh
YmxlKCk7CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3Io
JmNhbGxJZCwgSW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJy
b3IsIGVycm9yKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KK30KKwordm9pZCBJbnNwZWN0b3JE
YXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FMU3luYyhsb25nIGNhbGxJZCwgY29u
c3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKQoreworICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJh
eT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CisgICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gbWVzc2FnZS5nZXRPYmplY3QoQVND
SUlMaXRlcmFsKCJwYXJhbXMiKSk7CisgICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWlu
ZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CisgICAgSW5zcGVjdG9yQXJyYXkqIHByb3Rv
Y29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CisgICAgU3RyaW5nIGluX2RhdGFi
YXNlSWQgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0U3RyaW5nKHBhcmFtc0NvbnRh
aW5lclB0ciwgQVNDSUlMaXRlcmFsKCJkYXRhYmFzZUlkIiksIG51bGxwdHIsIHByb3RvY29sRXJy
b3JzUHRyKTsKKyAgICBTdHJpbmcgaW5fcXVlcnkgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
cjo6Z2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJxdWVyeSIpLCBu
dWxscHRyLCBwcm90b2NvbEVycm9yc1B0cik7CisgICAgaWYgKHByb3RvY29sRXJyb3JzLT5sZW5n
dGgoKSkgeworICAgICAgICBTdHJpbmcgZXJyb3JNZXNzYWdlID0gU3RyaW5nOjpmb3JtYXQoIlNv
bWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJEYXRhYmFz
ZS5leGVjdXRlU1FMU3luYyIpOworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQ
cm90b2NvbEVycm9yKCZjYWxsSWQsIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpJbnZhbGlk
UGFyYW1zLCBlcnJvck1lc3NhZ2UsIHByb3RvY29sRXJyb3JzLnJlbGVhc2UoKSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBFcnJvclN0cmluZyBlcnJvcjsKKyAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJl
ZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheTxTdHJpbmc+PiBvdXRfY29sdW1uTmFt
ZXM7CisgICAgU3RyaW5nIG91dF9ub3RlczsKKyAgICBkb3VibGUgb3V0X3RpbWVzdGFtcDsKKyAg
ICBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCBvdXRfdmFsdWVzOworICAgIEluc3BlY3Rvcjo6
SW5zcGVjdG9yVmFsdWUgb3V0X3BheWxvYWQ7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1
aWxkZXI6OkRhdGFiYXNlOjpFcnJvcj4gb3V0X3NxbEVycm9yOworICAgIG1fYWdlbnQtPmV4ZWN1
dGVTUUxTeW5jKCZlcnJvciwgaW5fZGF0YWJhc2VJZCwgaW5fcXVlcnksIG91dF9jb2x1bW5OYW1l
cywgJm91dF9ub3RlcywgJm91dF90aW1lc3RhbXAsICZvdXRfdmFsdWVzLCAmb3V0X3BheWxvYWQs
IG91dF9zcWxFcnJvcik7CisKKyAgICBpZiAoIWVycm9yLmxlbmd0aCgpKSB7CisgICAgICAgIHJl
c3VsdC0+c2V0VmFsdWUoQVNDSUlMaXRlcmFsKCJjb2x1bW5OYW1lcyIpLCBvdXRfY29sdW1uTmFt
ZXMpOworICAgICAgICByZXN1bHQtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoIm5vdGVzIiksIG91
dF9ub3Rlcyk7CisgICAgICAgIHJlc3VsdC0+c2V0TnVtYmVyKEFTQ0lJTGl0ZXJhbCgidGltZXN0
YW1wIiksIG91dF90aW1lc3RhbXApOworICAgICAgICByZXN1bHQtPnNldE9iamVjdChBU0NJSUxp
dGVyYWwoInZhbHVlcyIpLCBvdXRfdmFsdWVzKTsKKyAgICAgICAgcmVzdWx0LT5zZXRBbnkoQVND
SUlMaXRlcmFsKCJwYXlsb2FkIiksIG91dF9wYXlsb2FkKTsKKyAgICAgICAgcmVzdWx0LT5zZXRW
YWx1ZShBU0NJSUxpdGVyYWwoInNxbEVycm9yIiksIG91dF9zcWxFcnJvcik7CisgICAgfQorICAg
IG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNl
KCksIGVycm9yKTsKK30KKworSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXI6OkV4ZWN1dGVTUUxBc3luY0NhbGxiYWNrOjpFeGVjdXRlU1FMQXN5bmNDYWxsYmFjayhQYXNz
UmVmUHRyPEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiBiYWNrZW5kRGlzcGF0Y2hlciwgaW50
IGlkKSA6IEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFz
ZShiYWNrZW5kRGlzcGF0Y2hlciwgaWQpIHsgfQorCit2b2lkIEluc3BlY3RvckRhdGFiYXNlQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNDYWxsYmFjazo6c2VuZFN1Y2Nl
c3MoUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheTxTdHJpbmc+PiBjb2x1
bW5OYW1lcywgY29uc3QgU3RyaW5nJiBub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgSW5zcGVjdG9y
OjpJbnNwZWN0b3JPYmplY3QgdmFsdWVzLCBJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlIHBheWxv
YWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6RGF0YWJhc2U6OkVycm9yPiBz
cWxFcnJvcikKK3sKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBqc29uTWVzc2FnZSA9IElu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAganNvbk1lc3NhZ2UtPnNldFZhbHVlKEFTQ0lJ
TGl0ZXJhbCgiY29sdW1uTmFtZXMiKSwgY29sdW1uTmFtZXMpOworICAgIGpzb25NZXNzYWdlLT5z
ZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJub3RlcyIpLCBub3Rlcyk7CisgICAganNvbk1lc3NhZ2Ut
PnNldE51bWJlcihBU0NJSUxpdGVyYWwoInRpbWVzdGFtcCIpLCB0aW1lc3RhbXApOworICAgIGpz
b25NZXNzYWdlLT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJ2YWx1ZXMiKSwgdmFsdWVzKTsKKyAg
ICBqc29uTWVzc2FnZS0+c2V0QW55KEFTQ0lJTGl0ZXJhbCgicGF5bG9hZCIpLCBwYXlsb2FkKTsK
KyAgICBqc29uTWVzc2FnZS0+c2V0VmFsdWUoQVNDSUlMaXRlcmFsKCJzcWxFcnJvciIpLCBzcWxF
cnJvcik7CisgICAgc2VuZElmQWN0aXZlKGpzb25NZXNzYWdlLCBFcnJvclN0cmluZygpKTsKK30K
Kwordm9pZCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FMQXN5
bmMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSkKK3sKKyAgICBS
ZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNy
ZWF0ZSgpOworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IG1l
c3NhZ2UuZ2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicGFyYW1zIikpOworICAgIEluc3BlY3Rvck9i
amVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOworICAgIElu
c3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwor
ICAgIFN0cmluZyBpbl9kYXRhYmFzZUlkID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6Omdl
dFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgiZGF0YWJhc2VJZCIpLCBu
dWxscHRyLCBwcm90b2NvbEVycm9yc1B0cik7CisgICAgU3RyaW5nIGluX3F1ZXJ5ID0gSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXI6OmdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJ
TGl0ZXJhbCgicXVlcnkiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnNQdHIpOworICAgIGlmIChw
cm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKKyAgICAgICAgU3RyaW5nIGVycm9yTWVzc2FnZSA9
IFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBw
cm9jZXNzZWQiLCAiRGF0YWJhc2UuZXhlY3V0ZVNRTEFzeW5jIik7CisgICAgICAgIG1fYmFja2Vu
ZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXI6OkludmFsaWRQYXJhbXMsIGVycm9yTWVzc2FnZSwgcHJvdG9jb2xFcnJvcnMu
cmVsZWFzZSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEVycm9yU3RyaW5nIGVy
cm9yOworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVj
dDo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNo
ZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNDYWxsYmFjaz4gY2FsbGJhY2sgPSBhZG9wdFJlZihu
ZXcgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkV4ZWN1dGVTUUxB
c3luY0NhbGxiYWNrKG1fYmFja2VuZERpc3BhdGNoZXIsY2FsbElkKSk7CisgICAgbV9hZ2VudC0+
ZXhlY3V0ZVNRTEFzeW5jKCZlcnJvciwgaW5fZGF0YWJhc2VJZCwgaW5fcXVlcnksIGNhbGxiYWNr
KTsKKworICAgIGlmIChlcnJvci5sZW5ndGgoKSkgeworICAgICAgICBjYWxsYmFjay0+ZGlzYWJs
ZSgpOworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKCZj
YWxsSWQsIEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9y
LCBlcnJvcik7CisgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisjZW5kaWYgLy8gRU5BQkxFKFNR
TF9EQVRBQkFTRSkKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFC
TEUoSU5TUEVDVE9SKQorCisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0
Y2hlcnMuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1w
YXJhbWV0ZXJzLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2NvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4t
cGFyYW1ldGVycy5qc29uLXJlc3VsdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xNjRmYmJkYzRhZGJjNjI1NmU5YmE2
ZWQyZDI2N2RkYzFlMmEwZTJiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2NvbW1hbmRzLXdpdGgtb3B0aW9u
YWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uLXJlc3VsdApAQCAtMCwwICsxLDI3NCBAQAor
IyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kQ29tbWFuZHMuanMKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpz
b24KKy8vIGJ5IHRoZSBzY3JpcHQ6IEphdmFTY3JpcHRDb3JlL3JlcGxheS9zY3JpcHRzL0NvZGVH
ZW5lcmF0b3JJbnNwZWN0b3IucHkKKworLy8gRGF0YWJhc2UuCitJbnNwZWN0b3JCYWNrZW5kLnJl
Z2lzdGVyRGF0YWJhc2VEaXNwYXRjaGVyID0gSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFp
bkRpc3BhdGNoZXIuYmluZChJbnNwZWN0b3JCYWNrZW5kLCAiRGF0YWJhc2UiKTsKK0luc3BlY3Rv
ckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJEYXRhYmFzZS5leGVjdXRlQWxsT3B0aW9uYWxQYXJh
bWV0ZXJzIiwgWyJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAiYXJyYXkiLCAib3B0aW9u
YWwiOiB0cnVlLCAibmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6
IHRydWUsICJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciIsICJvcHRpb25hbCI6
IHRydWUsICJuYW1lIjogInZhbHVlcyIsICJ0eXBlIjogIm9iamVjdCIsICJvcHRpb25hbCI6IHRy
dWUsICJuYW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJhbnkiLCAib3B0aW9uYWwiOiB0cnVlLCAi
bmFtZSI6ICJzcWxFcnJvciIsICJ0eXBlIjogIk5vbmUiLCAib3B0aW9uYWwiOiB0cnVlXSwgWyJu
YW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAiYXJyYXkiLCAib3B0aW9uYWwiOiB0cnVlLCAi
bmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IHRydWUsICJuYW1l
IjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciIsICJvcHRpb25hbCI6IHRydWUsICJuYW1l
IjogInZhbHVlcyIsICJ0eXBlIjogIm9iamVjdCIsICJvcHRpb25hbCI6IHRydWUsICJuYW1lIjog
InBheWxvYWQiLCAidHlwZSI6ICJhbnkiLCAib3B0aW9uYWwiOiB0cnVlLCAibmFtZSI6ICJzcWxF
cnJvciIsICJ0eXBlIjogIk5vbmUiLCAib3B0aW9uYWwiOiB0cnVlXSk7CitJbnNwZWN0b3JCYWNr
ZW5kLnJlZ2lzdGVyQ29tbWFuZCgiRGF0YWJhc2UuZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJz
IiwgWyJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAiYXJyYXkiLCBmYWxzZSwgIm5hbWUi
OiAibm90ZXMiLCAidHlwZSI6ICJzdHJpbmciLCBmYWxzZSwgIm5hbWUiOiAidGltZXN0YW1wIiwg
InR5cGUiOiAibnVtYmVyIiwgZmFsc2UsICJuYW1lIjogInZhbHVlcyIsICJ0eXBlIjogIm9iamVj
dCIsIGZhbHNlLCAibmFtZSI6ICJwYXlsb2FkIiwgInR5cGUiOiAiYW55IiwgZmFsc2UsICJuYW1l
IjogInNxbEVycm9yIiwgInR5cGUiOiAiTm9uZSIsIGZhbHNlXSwgWyJuYW1lIjogImNvbHVtbk5h
bWVzIiwgInR5cGUiOiAiYXJyYXkiLCBmYWxzZSwgIm5hbWUiOiAibm90ZXMiLCAidHlwZSI6ICJz
dHJpbmciLCBmYWxzZSwgIm5hbWUiOiAidGltZXN0YW1wIiwgInR5cGUiOiAibnVtYmVyIiwgZmFs
c2UsICJuYW1lIjogInZhbHVlcyIsICJ0eXBlIjogIm9iamVjdCIsIGZhbHNlLCAibmFtZSI6ICJw
YXlsb2FkIiwgInR5cGUiOiAiYW55IiwgZmFsc2UsICJuYW1lIjogInNxbEVycm9yIiwgInR5cGUi
OiAiTm9uZSIsIGZhbHNlXSk7CisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kQ29t
bWFuZHMuanMKKworIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hl
cnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJu
LXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogSmF2YVNjcmlwdENvcmUvcmVwbGF5
L3NjcmlwdHMvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQorCisjaWZuZGVmIEluc3BlY3RvclRl
c3RCYWNrZW5kRGlzcGF0Y2hlcnNfaAorI2RlZmluZSBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3Bh
dGNoZXJzX2gKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRlICJJbnNwZWN0b3JU
ZXN0VHlwZUJ1aWxkZXJzLmgiCisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3R5cGVkZWYgU3Ry
aW5nIEVycm9yU3RyaW5nOworCisjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKK2NsYXNzIEluc3Bl
Y3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKK3B1YmxpYzoKKyAgICB2aXJ0
dWFsIHZvaWQgZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhFcnJvclN0cmluZyosIGNvbnN0
IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5PiogaW5fY29sdW1uTmFtZXMsIGNvbnN0
IFN0cmluZyogaW5fbm90ZXMsIGNvbnN0IGRvdWJsZSogaW5fdGltZXN0YW1wLCBjb25zdCBJbnNw
ZWN0b3I6Okluc3BlY3Rvck9iamVjdCogaW5fdmFsdWVzLCBjb25zdCBJbnNwZWN0b3I6Okluc3Bl
Y3RvclZhbHVlKiBpbl9wYXlsb2FkLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JP
YmplY3Q+KiBpbl9zcWxFcnJvciwgUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5
PFN0cmluZz4+JiBvcHRfb3V0X2NvbHVtbk5hbWVzLCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpP
cHRPdXRwdXQ8U3RyaW5nPiogb3B0X291dF9ub3RlcywgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6
T3B0T3V0cHV0PGRvdWJsZT4qIG9wdF9vdXRfdGltZXN0YW1wLCBJbnNwZWN0b3I6OlR5cGVCdWls
ZGVyOjpPcHRPdXRwdXQ8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+KiBvcHRfb3V0X3ZhbHVl
cywgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6T3B0T3V0cHV0PEluc3BlY3Rvcjo6SW5zcGVjdG9y
VmFsdWU+KiBvcHRfb3V0X3BheWxvYWQsIFJlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpE
YXRhYmFzZTo6RXJyb3I+JiBvcHRfb3V0X3NxbEVycm9yKSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IGV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhFcnJvclN0cmluZyosIGNvbnN0IFJlZlB0cjxJ
bnNwZWN0b3I6Okluc3BlY3RvckFycmF5PiYgaW5fY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYg
aW5fbm90ZXMsIGRvdWJsZSBpbl90aW1lc3RhbXAsIEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0
IGluX3ZhbHVlcywgSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSBpbl9wYXlsb2FkLCBjb25zdCBS
ZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+JiBpbl9zcWxFcnJvciwgUmVmUHRyPElu
c3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5PFN0cmluZz4+JiBvdXRfY29sdW1uTmFtZXMsIFN0
cmluZyogb3V0X25vdGVzLCBkb3VibGUqIG91dF90aW1lc3RhbXAsIEluc3BlY3Rvcjo6SW5zcGVj
dG9yT2JqZWN0KiBvdXRfdmFsdWVzLCBJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlKiBvdXRfcGF5
bG9hZCwgUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkRhdGFiYXNlOjpFcnJvcj4mIG91
dF9zcWxFcnJvcikgPSAwOworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgfkluc3BlY3RvckRhdGFi
YXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCk7Cit9OworI2VuZGlmIC8vIEVOQUJMRShTUUxf
REFUQUJBU0UpCisKKyNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQorY2xhc3MgSW5zcGVjdG9yRGF0
YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3BlY3Rv
clN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFz
c1JlZlB0cjxJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUoSW5zcGVj
dG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciosIEluc3BlY3RvckRhdGFiYXNlQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyKik7CisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoKGxvbmcgY2Fs
bElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rv
ck9iamVjdD4gbWVzc2FnZSkgb3ZlcnJpZGU7Citwcml2YXRlOgorICAgIHZvaWQgZXhlY3V0ZUFs
bE9wdGlvbmFsUGFyYW1ldGVycyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0
b3JPYmplY3QmIG1lc3NhZ2UpOworICAgIHZvaWQgZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJz
KGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7
Citwcml2YXRlOgorICAgIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIoSW5zcGVj
dG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciosIEluc3BlY3RvckRhdGFiYXNlQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyKik7CisgICAgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXIqIG1fYWdlbnQ7Cit9OworI2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0Up
CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RP
UikKKworI2VuZGlmIC8vICFkZWZpbmVkKEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnNf
aCkKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMj
IyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMu
anNvbgorLy8gYnkgdGhlIHNjcmlwdDogSmF2YVNjcmlwdENvcmUvcmVwbGF5L3NjcmlwdHMvQ29k
ZUdlbmVyYXRvckluc3BlY3Rvci5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
SW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaWYgRU5BQkxFKElOU1BFQ1RP
UikKKworI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4KKyNp
bmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworI2lmIEVOQUJMRShTUUxfREFU
QUJBU0UpCitJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6fkluc3Bl
Y3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCkgeyB9CisjZW5kaWYgLy8gRU5B
QkxFKFNRTF9EQVRBQkFTRSkKKworI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCitQYXNzUmVmUHRy
PEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI+IEluc3BlY3RvckRhdGFiYXNlQmFj
a2VuZERpc3BhdGNoZXI6OmNyZWF0ZShJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciogYmFja2Vu
ZERpc3BhdGNoZXIsIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBh
Z2VudCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEluc3BlY3RvckRhdGFiYXNlQmFja2Vu
ZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIsIGFnZW50KSk7Cit9CisKK0luc3BlY3RvckRh
dGFiYXNlQmFja2VuZERpc3BhdGNoZXI6Okluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNo
ZXIoSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyLCBJbnNwZWN0
b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCisgICAgOiBJbnNwZWN0
b3JTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlcikKKyAgICAs
IG1fYWdlbnQoYWdlbnQpCit7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNw
YXRjaGVyRm9yRG9tYWluKEFTQ0lJTGl0ZXJhbCgiRGF0YWJhc2UiKSwgdGhpcyk7Cit9CisKK3Zv
aWQgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyBjYWxs
SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbWVz
c2FnZSkKK3sKKyAgICBSZWY8SW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcj4gcHJv
dGVjdCgqdGhpcyk7CisKKyAgICBpZiAobWV0aG9kID09ICJleGVjdXRlQWxsT3B0aW9uYWxQYXJh
bWV0ZXJzIikKKyAgICAgICAgZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhjYWxsSWQsICpt
ZXNzYWdlLmdldCgpKTsKKyAgICBlbHNlIGlmIChtZXRob2QgPT0gImV4ZWN1dGVOb09wdGlvbmFs
UGFyYW1ldGVycyIpCisgICAgICAgIGV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhjYWxsSWQs
ICptZXNzYWdlLmdldCgpKTsKKyAgICBlbHNlCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXIt
PnJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6
Ok1ldGhvZE5vdEZvdW5kLCBTdHJpbmcoIiciKSArICJEYXRhYmFzZSIgKyAnLicgKyBtZXRob2Qg
KyAiJyB3YXMgbm90IGZvdW5kIik7Cit9CisKK3ZvaWQgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5k
RGlzcGF0Y2hlcjo6ZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhsb25nIGNhbGxJZCwgY29u
c3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKQoreworICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJh
eT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CisgICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gbWVzc2FnZS5nZXRPYmplY3QoQVND
SUlMaXRlcmFsKCJwYXJhbXMiKSk7CisgICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWlu
ZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CisgICAgSW5zcGVjdG9yQXJyYXkqIHByb3Rv
Y29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CisgICAgYm9vbCBjb2x1bW5OYW1l
c192YWx1ZUZvdW5kID0gZmFsc2U7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJy
YXk+IGluX2NvbHVtbk5hbWVzID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldEFycmF5
KHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJjb2x1bW5OYW1lcyIpLCAmY29sdW1u
TmFtZXNfdmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJvcnNQdHIpOworICAgIGJvb2wgbm90ZXNfdmFs
dWVGb3VuZCA9IGZhbHNlOworICAgIFN0cmluZyBpbl9ub3RlcyA9IEluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyOjpnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoIm5v
dGVzIiksICZub3Rlc192YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0cik7CisgICAgYm9vbCB0
aW1lc3RhbXBfdmFsdWVGb3VuZCA9IGZhbHNlOworICAgIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6
Ok9wdE91dHB1dDxkb3VibGU+IGluX3RpbWVzdGFtcCA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyOjpnZXROdW1iZXIocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoInRpbWVzdGFt
cCIpLCAmdGltZXN0YW1wX3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRyKTsKKyAgICBib29s
IHZhbHVlc192YWx1ZUZvdW5kID0gZmFsc2U7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVj
dG9yT2JqZWN0PiBpbl92YWx1ZXMgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0T2Jq
ZWN0KHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJ2YWx1ZXMiKSwgJnZhbHVlc192
YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0cik7CisgICAgYm9vbCBwYXlsb2FkX3ZhbHVlRm91
bmQgPSBmYWxzZTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4gaW5fcGF5
bG9hZCA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRBbnkocGFyYW1zQ29udGFpbmVy
UHRyLCBBU0NJSUxpdGVyYWwoInBheWxvYWQiKSwgJnBheWxvYWRfdmFsdWVGb3VuZCwgcHJvdG9j
b2xFcnJvcnNQdHIpOworICAgIGJvb2wgc3FsRXJyb3JfdmFsdWVGb3VuZCA9IGZhbHNlOworICAg
IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gaW5fc3FsRXJyb3IgPSBJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0T2JqZWN0KHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlM
aXRlcmFsKCJzcWxFcnJvciIpLCAmc3FsRXJyb3JfdmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJvcnNQ
dHIpOworICAgIGlmIChwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKKyAgICAgICAgU3RyaW5n
IGVycm9yTWVzc2FnZSA9IFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2Qg
JyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiRGF0YWJhc2UuZXhlY3V0ZUFsbE9wdGlvbmFsUGFy
YW1ldGVycyIpOworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVy
cm9yKCZjYWxsSWQsIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCBl
cnJvck1lc3NhZ2UsIHByb3RvY29sRXJyb3JzLnJlbGVhc2UoKSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBFcnJvclN0cmluZyBlcnJvcjsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxJbnNw
ZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheTxTdHJpbmc+PiBvdXRfY29sdW1uTmFtZXM7CisgICAg
SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6T3B0T3V0cHV0PFN0cmluZz4gb3V0X25vdGVzOworICAg
IEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6Ok9wdE91dHB1dDxkb3VibGU+IG91dF90aW1lc3RhbXA7
CisgICAgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6T3B0T3V0cHV0PEluc3BlY3Rvcjo6SW5zcGVj
dG9yT2JqZWN0PiBvdXRfdmFsdWVzOworICAgIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6Ok9wdE91
dHB1dDxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiBvdXRfcGF5bG9hZDsKKyAgICBSZWZQdHI8
SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6RGF0YWJhc2U6OkVycm9yPiBvdXRfc3FsRXJyb3I7Cisg
ICAgbV9hZ2VudC0+ZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycygmZXJyb3IsIGNvbHVtbk5h
bWVzX3ZhbHVlRm91bmQgPyAmaW5fY29sdW1uTmFtZXMgOiBudWxscHRyLCBub3Rlc192YWx1ZUZv
dW5kID8gJmluX25vdGVzIDogbnVsbHB0ciwgdGltZXN0YW1wX3ZhbHVlRm91bmQgPyAmaW5fdGlt
ZXN0YW1wIDogbnVsbHB0ciwgdmFsdWVzX3ZhbHVlRm91bmQgPyAmaW5fdmFsdWVzIDogbnVsbHB0
ciwgcGF5bG9hZF92YWx1ZUZvdW5kID8gJmluX3BheWxvYWQgOiBudWxscHRyLCBzcWxFcnJvcl92
YWx1ZUZvdW5kID8gJmluX3NxbEVycm9yIDogbnVsbHB0ciwgb3V0X2NvbHVtbk5hbWVzLCAmb3V0
X25vdGVzLCAmb3V0X3RpbWVzdGFtcCwgJm91dF92YWx1ZXMsICZvdXRfcGF5bG9hZCwgb3V0X3Nx
bEVycm9yKTsKKworICAgIGlmICghZXJyb3IubGVuZ3RoKCkpIHsKKyAgICAgICAgaWYgKG91dF9j
b2x1bW5OYW1lcykKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0VmFsdWUoQVNDSUlMaXRlcmFsKCJj
b2x1bW5OYW1lcyIpLCBvdXRfY29sdW1uTmFtZXMpOworICAgICAgICBpZiAob3V0X25vdGVzLmlz
QXNzaWduZWQoKSkKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgi
bm90ZXMiKSwgb3V0X25vdGVzLmdldFZhbHVlKCkpOworICAgICAgICBpZiAob3V0X3RpbWVzdGFt
cC5pc0Fzc2lnbmVkKCkpCisgICAgICAgICAgICByZXN1bHQtPnNldE51bWJlcihBU0NJSUxpdGVy
YWwoInRpbWVzdGFtcCIpLCBvdXRfdGltZXN0YW1wLmdldFZhbHVlKCkpOworICAgICAgICBpZiAo
b3V0X3ZhbHVlcy5pc0Fzc2lnbmVkKCkpCisgICAgICAgICAgICByZXN1bHQtPnNldE9iamVjdChB
U0NJSUxpdGVyYWwoInZhbHVlcyIpLCBvdXRfdmFsdWVzLmdldFZhbHVlKCkpOworICAgICAgICBp
ZiAob3V0X3BheWxvYWQuaXNBc3NpZ25lZCgpKQorICAgICAgICAgICAgcmVzdWx0LT5zZXRBbnko
QVNDSUlMaXRlcmFsKCJwYXlsb2FkIiksIG91dF9wYXlsb2FkLmdldFZhbHVlKCkpOworICAgICAg
ICBpZiAob3V0X3NxbEVycm9yKQorICAgICAgICAgICAgcmVzdWx0LT5zZXRWYWx1ZShBU0NJSUxp
dGVyYWwoInNxbEVycm9yIiksIG91dF9zcWxFcnJvcik7CisgICAgfQorICAgIG1fYmFja2VuZERp
c3BhdGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIGVycm9yKTsK
K30KKwordm9pZCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlTm9P
cHRpb25hbFBhcmFtZXRlcnMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVz
c2FnZSkKK3sKKyAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5z
cGVjdG9yQXJyYXk6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFt
c0NvbnRhaW5lciA9IG1lc3NhZ2UuZ2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicGFyYW1zIikpOwor
ICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVy
LmdldCgpOworICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29s
RXJyb3JzLmdldCgpOworICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5PiBpbl9j
b2x1bW5OYW1lcyA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRBcnJheShwYXJhbXND
b250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgiY29sdW1uTmFtZXMiKSwgbnVsbHB0ciwgcHJvdG9j
b2xFcnJvcnNQdHIpOworICAgIFN0cmluZyBpbl9ub3RlcyA9IEluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyOjpnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoIm5vdGVz
IiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzUHRyKTsKKyAgICBkb3VibGUgaW5fdGltZXN0YW1w
ID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldE51bWJlcihwYXJhbXNDb250YWluZXJQ
dHIsIEFTQ0lJTGl0ZXJhbCgidGltZXN0YW1wIiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzUHRy
KTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IGluX3ZhbHVlcyA9IElu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRPYmplY3QocGFyYW1zQ29udGFpbmVyUHRyLCBB
U0NJSUxpdGVyYWwoInZhbHVlcyIpLCBudWxscHRyLCBwcm90b2NvbEVycm9yc1B0cik7CisgICAg
UmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+IGluX3BheWxvYWQgPSBJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlcjo6Z2V0QW55KHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFs
KCJwYXlsb2FkIiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzUHRyKTsKKyAgICBSZWZQdHI8SW5z
cGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IGluX3NxbEVycm9yID0gSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXI6OmdldE9iamVjdChwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgic3Fs
RXJyb3IiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnNQdHIpOworICAgIGlmIChwcm90b2NvbEVy
cm9ycy0+bGVuZ3RoKCkpIHsKKyAgICAgICAgU3RyaW5nIGVycm9yTWVzc2FnZSA9IFN0cmluZzo6
Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQi
LCAiRGF0YWJhc2UuZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzIik7CisgICAgICAgIG1fYmFj
a2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXI6OkludmFsaWRQYXJhbXMsIGVycm9yTWVzc2FnZSwgcHJvdG9jb2xFcnJv
cnMucmVsZWFzZSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEVycm9yU3RyaW5n
IGVycm9yOworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5
PFN0cmluZz4+IG91dF9jb2x1bW5OYW1lczsKKyAgICBTdHJpbmcgb3V0X25vdGVzOworICAgIGRv
dWJsZSBvdXRfdGltZXN0YW1wOworICAgIEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0IG91dF92
YWx1ZXM7CisgICAgSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSBvdXRfcGF5bG9hZDsKKyAgICBS
ZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6RGF0YWJhc2U6OkVycm9yPiBvdXRfc3FsRXJy
b3I7CisgICAgbV9hZ2VudC0+ZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKCZlcnJvciwgaW5f
Y29sdW1uTmFtZXMsIGluX25vdGVzLCBpbl90aW1lc3RhbXAsIGluX3ZhbHVlcywgaW5fcGF5bG9h
ZCwgaW5fc3FsRXJyb3IsIG91dF9jb2x1bW5OYW1lcywgJm91dF9ub3RlcywgJm91dF90aW1lc3Rh
bXAsICZvdXRfdmFsdWVzLCAmb3V0X3BheWxvYWQsIG91dF9zcWxFcnJvcik7CisKKyAgICBpZiAo
IWVycm9yLmxlbmd0aCgpKSB7CisgICAgICAgIHJlc3VsdC0+c2V0VmFsdWUoQVNDSUlMaXRlcmFs
KCJjb2x1bW5OYW1lcyIpLCBvdXRfY29sdW1uTmFtZXMpOworICAgICAgICByZXN1bHQtPnNldFN0
cmluZyhBU0NJSUxpdGVyYWwoIm5vdGVzIiksIG91dF9ub3Rlcyk7CisgICAgICAgIHJlc3VsdC0+
c2V0TnVtYmVyKEFTQ0lJTGl0ZXJhbCgidGltZXN0YW1wIiksIG91dF90aW1lc3RhbXApOworICAg
ICAgICByZXN1bHQtPnNldE9iamVjdChBU0NJSUxpdGVyYWwoInZhbHVlcyIpLCBvdXRfdmFsdWVz
KTsKKyAgICAgICAgcmVzdWx0LT5zZXRBbnkoQVNDSUlMaXRlcmFsKCJwYXlsb2FkIiksIG91dF9w
YXlsb2FkKTsKKyAgICAgICAgcmVzdWx0LT5zZXRWYWx1ZShBU0NJSUxpdGVyYWwoInNxbEVycm9y
IiksIG91dF9zcWxFcnJvcik7CisgICAgfQorICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRS
ZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIGVycm9yKTsKK30KKyNlbmRpZiAvLyBF
TkFCTEUoU1FMX0RBVEFCQVNFKQorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlm
IC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdEJhY2tl
bmREaXNwYXRjaGVycy5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9kb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5k
LXNpemVzLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2V4cGVjdGVkL2RvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNv
bi1yZXN1bHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uYjgwZGEzMjY0YjU0OTg5NDY3YjUxZjdiOWQ5YWZhNzQzZDU4
NWIxYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9leHBlY3RlZC9kb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVz
Lmpzb24tcmVzdWx0CkBAIC0wLDAgKzEsMzMzIEBACisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9y
VGVzdEJhY2tlbmRDb21tYW5kcy5qcworLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW5zLXdpdGgtdmFy
eWluZy1jb21tYW5kLXNpemVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IEphdmFTY3JpcHRDb3Jl
L3JlcGxheS9zY3JpcHRzL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKKworLy8gTmV0d29yazEu
CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyTmV0d29yazFEaXNwYXRjaGVyID0gSW5zcGVjdG9y
QmFja2VuZC5yZWdpc3RlckRvbWFpbkRpc3BhdGNoZXIuYmluZChJbnNwZWN0b3JCYWNrZW5kLCAi
TmV0d29yazEiKTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJOZXR3b3JrMS5s
b2FkUmVzb3VyY2UxIiwgW10sIFtdKTsKKworLy8gTmV0d29yazIuCitJbnNwZWN0b3JCYWNrZW5k
LnJlZ2lzdGVyTmV0d29yazJEaXNwYXRjaGVyID0gSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRv
bWFpbkRpc3BhdGNoZXIuYmluZChJbnNwZWN0b3JCYWNrZW5kLCAiTmV0d29yazIiKTsKKworLy8g
TmV0d29yazMuCitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyTmV0d29yazNEaXNwYXRjaGVyID0g
SW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbkRpc3BhdGNoZXIuYmluZChJbnNwZWN0b3JC
YWNrZW5kLCAiTmV0d29yazMiKTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJO
ZXR3b3JrMy5sb2FkUmVzb3VyY2UxIiwgW10sIFtdKTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0
ZXJDb21tYW5kKCJOZXR3b3JrMy5sb2FkUmVzb3VyY2UyIiwgW10sIFtdKTsKK0luc3BlY3RvckJh
Y2tlbmQucmVnaXN0ZXJDb21tYW5kKCJOZXR3b3JrMy5sb2FkUmVzb3VyY2UzIiwgW10sIFtdKTsK
K0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJOZXR3b3JrMy5sb2FkUmVzb3VyY2U0
IiwgW10sIFtdKTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJOZXR3b3JrMy5s
b2FkUmVzb3VyY2U1IiwgW10sIFtdKTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5k
KCJOZXR3b3JrMy5sb2FkUmVzb3VyY2U2IiwgW10sIFtdKTsKK0luc3BlY3RvckJhY2tlbmQucmVn
aXN0ZXJDb21tYW5kKCJOZXR3b3JrMy5sb2FkUmVzb3VyY2U3IiwgW10sIFtdKTsKKyMjIyBFbmQg
RmlsZTogSW5zcGVjdG9yVGVzdEJhY2tlbmRDb21tYW5kcy5qcworCisjIyMgQmVnaW4gRmlsZTog
SW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFp
bnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogSmF2
YVNjcmlwdENvcmUvcmVwbGF5L3NjcmlwdHMvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQorCisj
aWZuZGVmIEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnNfaAorI2RlZmluZSBJbnNwZWN0
b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzX2gKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNp
bmNsdWRlICJJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmgiCisjaW5jbHVkZSA8aW5zcGVjdG9y
L0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIu
aD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3Rv
ciB7CisKK3R5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCitjbGFzcyBJbnNwZWN0b3JOZXR3
b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lk
IGxvYWRSZXNvdXJjZTEoRXJyb3JTdHJpbmcqKSA9IDA7Citwcm90ZWN0ZWQ6CisgICAgdmlydHVh
bCB+SW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKTsKK307CisKK2Ns
YXNzIEluc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKK3B1YmxpYzoK
KyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlMShFcnJvclN0cmluZyopID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlMihFcnJvclN0cmluZyopID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgbG9hZFJlc291cmNlMyhFcnJvclN0cmluZyopID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
bG9hZFJlc291cmNlNChFcnJvclN0cmluZyopID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJl
c291cmNlNShFcnJvclN0cmluZyopID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNl
NihFcnJvclN0cmluZyopID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlNyhFcnJv
clN0cmluZyopID0gMDsKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIH5JbnNwZWN0b3JOZXR3b3Jr
M0JhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpOworfTsKKworY2xhc3MgSW5zcGVjdG9yTmV0d29y
azFCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3BlY3RvclN1
cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUoSW5zcGVjdG9y
OjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciosIEluc3BlY3Rvck5ldHdvcmsxQmFja2VuZERp
c3BhdGNoZXJIYW5kbGVyKik7CisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoKGxvbmcgY2FsbElk
LCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9i
amVjdD4gbWVzc2FnZSkgb3ZlcnJpZGU7Citwcml2YXRlOgorICAgIHZvaWQgbG9hZFJlc291cmNl
MShsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2Up
OworcHJpdmF0ZToKKyAgICBJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyKEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqLCBJbnNwZWN0b3JOZXR3b3JrMUJhY2tl
bmREaXNwYXRjaGVySGFuZGxlciopOworICAgIEluc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3Bh
dGNoZXJIYW5kbGVyKiBtX2FnZW50OworfTsKKworY2xhc3MgSW5zcGVjdG9yTmV0d29yazNCYWNr
ZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3BlY3RvclN1cHBsZW1l
bnRhbEJhY2tlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJ
bnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUoSW5zcGVjdG9yOjpJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciosIEluc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNo
ZXJIYW5kbGVyKik7CisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoKGxvbmcgY2FsbElkLCBjb25z
dCBTdHJpbmcmIG1ldGhvZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4g
bWVzc2FnZSkgb3ZlcnJpZGU7Citwcml2YXRlOgorICAgIHZvaWQgbG9hZFJlc291cmNlMShsb25n
IGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpOworICAg
IHZvaWQgbG9hZFJlc291cmNlMihsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0
b3JPYmplY3QmIG1lc3NhZ2UpOworICAgIHZvaWQgbG9hZFJlc291cmNlMyhsb25nIGNhbGxJZCwg
Y29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpOworICAgIHZvaWQgbG9h
ZFJlc291cmNlNChsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Qm
IG1lc3NhZ2UpOworICAgIHZvaWQgbG9hZFJlc291cmNlNShsb25nIGNhbGxJZCwgY29uc3QgSW5z
cGVjdG9yOjpJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpOworICAgIHZvaWQgbG9hZFJlc291cmNl
Nihsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2Up
OworICAgIHZvaWQgbG9hZFJlc291cmNlNyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yOjpJ
bnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpOworcHJpdmF0ZToKKyAgICBJbnNwZWN0b3JOZXR3b3Jr
M0JhY2tlbmREaXNwYXRjaGVyKEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIq
LCBJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOworICAgIEluc3Bl
Y3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBtX2FnZW50OworfTsKKworfSAv
LyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorCisj
ZW5kaWYgLy8gIWRlZmluZWQoSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVyc19oKQorIyMj
IEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2lu
IEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIGRvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbgorLy8gYnkgdGhlIHNj
cmlwdDogSmF2YVNjcmlwdENvcmUvcmVwbGF5L3NjcmlwdHMvQ29kZUdlbmVyYXRvckluc3BlY3Rv
ci5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yVGVzdEJhY2tl
bmREaXNwYXRjaGVycy5oIgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUgPGlu
c3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4KKyNpbmNsdWRlIDxpbnNwZWN0b3Iv
SW5zcGVjdG9yVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1l
c3BhY2UgSW5zcGVjdG9yIHsKKworSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXI6On5JbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpIHsgfQor
SW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6On5JbnNwZWN0b3JOZXR3
b3JrM0JhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpIHsgfQorCitQYXNzUmVmUHRyPEluc3BlY3Rv
ck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI+IEluc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3Bh
dGNoZXI6OmNyZWF0ZShJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNo
ZXIsIEluc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKK3sK
KyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEluc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNo
ZXIoYmFja2VuZERpc3BhdGNoZXIsIGFnZW50KSk7Cit9CisKK0luc3BlY3Rvck5ldHdvcmsxQmFj
a2VuZERpc3BhdGNoZXI6Okluc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIoSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyLCBJbnNwZWN0b3JOZXR3b3Jr
MUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCisgICAgOiBJbnNwZWN0b3JTdXBwbGVt
ZW50YWxCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlcikKKyAgICAsIG1fYWdlbnQo
YWdlbnQpCit7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRjaGVyRm9y
RG9tYWluKEFTQ0lJTGl0ZXJhbCgiTmV0d29yazEiKSwgdGhpcyk7Cit9CisKK3ZvaWQgSW5zcGVj
dG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyBjYWxsSWQsIGNvbnN0
IFN0cmluZyYgbWV0aG9kLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbWVzc2FnZSkKK3sK
KyAgICBSZWY8SW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhp
cyk7CisKKyAgICBpZiAobWV0aG9kID09ICJsb2FkUmVzb3VyY2UxIikKKyAgICAgICAgbG9hZFJl
c291cmNlMShjYWxsSWQsICptZXNzYWdlLmdldCgpKTsKKyAgICBlbHNlCisgICAgICAgIG1fYmFj
a2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCBTdHJpbmcoIiciKSArICJOZXR3b3JrMSIg
KyAnLicgKyBtZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7Cit9CisKK3ZvaWQgSW5zcGVjdG9y
TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMShsb25nIGNhbGxJZCwgY29u
c3QgSW5zcGVjdG9yT2JqZWN0JikKK3sKKyAgICBFcnJvclN0cmluZyBlcnJvcjsKKyAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwor
ICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJjZTEoJmVycm9yKTsKKworICAgIG1fYmFja2VuZERpc3Bh
dGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIGVycm9yKTsKK30K
KworUGFzc1JlZlB0cjxJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyPiBJbnNwZWN0
b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUoSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyLCBJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRj
aGVySGFuZGxlciogYWdlbnQpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnNwZWN0b3JO
ZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyLCBhZ2VudCkpOworfQor
CitJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpJbnNwZWN0b3JOZXR3b3JrM0Jh
Y2tlbmREaXNwYXRjaGVyKEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0
Y2hlciwgSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQor
ICAgIDogSW5zcGVjdG9yU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3Bh
dGNoZXIpCisgICAgLCBtX2FnZW50KGFnZW50KQoreworICAgIG1fYmFja2VuZERpc3BhdGNoZXIt
PnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbihBU0NJSUxpdGVyYWwoIk5ldHdvcmszIiksIHRo
aXMpOworfQorCit2b2lkIEluc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmRpc3Bh
dGNoKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUGFzc1JlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IG1lc3NhZ2UpCit7CisgICAgUmVmPEluc3BlY3Rvck5ldHdvcmszQmFja2VuZERp
c3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOworCisgICAgdHlwZWRlZiB2b2lkIChJbnNwZWN0b3JO
ZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjoqQ2FsbEhhbmRsZXIpKGxvbmcgY2FsbElkLCBjb25z
dCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7CisgICAgdHlwZWRlZiBIYXNo
TWFwPFN0cmluZywgQ2FsbEhhbmRsZXI+IERpc3BhdGNoTWFwOworICAgIERFUFJFQ0FURURfREVG
SU5FX1NUQVRJQ19MT0NBTChEaXNwYXRjaE1hcCwgZGlzcGF0Y2hNYXAsICgpKTsKKyAgICBpZiAo
ZGlzcGF0Y2hNYXAuaXNFbXB0eSgpKSB7CisgICAgICAgIHN0YXRpYyBjb25zdCBzdHJ1Y3QgTWV0
aG9kVGFibGUgeworICAgICAgICAgICAgY29uc3QgY2hhciogbmFtZTsKKyAgICAgICAgICAgIENh
bGxIYW5kbGVyIGhhbmRsZXI7CisgICAgICAgIH0gY29tbWFuZHNbXSA9IHsKKyAgICAgICAgICAg
IHsgImxvYWRSZXNvdXJjZTEiLCAmSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6
bG9hZFJlc291cmNlMSB9LAorICAgICAgICAgICAgeyAibG9hZFJlc291cmNlMiIsICZJbnNwZWN0
b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UyIH0sCisgICAgICAgICAg
ICB7ICJsb2FkUmVzb3VyY2UzIiwgJkluc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6
OmxvYWRSZXNvdXJjZTMgfSwKKyAgICAgICAgICAgIHsgImxvYWRSZXNvdXJjZTQiLCAmSW5zcGVj
dG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNCB9LAorICAgICAgICAg
ICAgeyAibG9hZFJlc291cmNlNSIsICZJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVy
Ojpsb2FkUmVzb3VyY2U1IH0sCisgICAgICAgICAgICB7ICJsb2FkUmVzb3VyY2U2IiwgJkluc3Bl
Y3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTYgfSwKKyAgICAgICAg
ICAgIHsgImxvYWRSZXNvdXJjZTciLCAmSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hl
cjo6bG9hZFJlc291cmNlNyB9LAorICAgICAgICB9OworICAgICAgICBzaXplX3QgbGVuZ3RoID0g
V1RGX0FSUkFZX0xFTkdUSChjb21tYW5kcyk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbGVuZ3RoOyArK2kpCisgICAgICAgICAgICBkaXNwYXRjaE1hcC5hZGQoY29tbWFuZHNbaV0u
bmFtZSwgY29tbWFuZHNbaV0uaGFuZGxlcik7CisgICAgfQorCisgICAgSGFzaE1hcDxTdHJpbmcs
IENhbGxIYW5kbGVyPjo6aXRlcmF0b3IgaXQgPSBkaXNwYXRjaE1hcC5maW5kKG1ldGhvZCk7Cisg
ICAgaWYgKGl0ID09IGRpc3BhdGNoTWFwLmVuZCgpKSB7CisgICAgICAgIG1fYmFja2VuZERpc3Bh
dGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCBTdHJpbmcoIiciKSArICJOZXR3b3JrMyIgKyAnLicgKyBt
ZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICAoKCp0aGlzKS4qaXQtPnZhbHVlKShjYWxsSWQsICptZXNzYWdlLmdldCgpKTsKK30KKwordm9p
ZCBJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UxKGxvbmcg
Y2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmKQoreworICAgIEVycm9yU3RyaW5nIGVycm9y
OworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6
Y3JlYXRlKCk7CisgICAgbV9hZ2VudC0+bG9hZFJlc291cmNlMSgmZXJyb3IpOworCisgICAgbV9i
YWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwg
ZXJyb3IpOworfQorCit2b2lkIEluc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6Omxv
YWRSZXNvdXJjZTIobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYpCit7CisgICAg
RXJyb3JTdHJpbmcgZXJyb3I7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0g
SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBtX2FnZW50LT5sb2FkUmVzb3VyY2UyKCZl
cnJvcik7CisKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElkLCBy
ZXN1bHQucmVsZWFzZSgpLCBlcnJvcik7Cit9CisKK3ZvaWQgSW5zcGVjdG9yTmV0d29yazNCYWNr
ZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9y
T2JqZWN0JikKK3sKKyAgICBFcnJvclN0cmluZyBlcnJvcjsKKyAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIG1fYWdlbnQt
PmxvYWRSZXNvdXJjZTMoJmVycm9yKTsKKworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRS
ZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIGVycm9yKTsKK30KKwordm9pZCBJbnNw
ZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U0KGxvbmcgY2FsbElk
LCBjb25zdCBJbnNwZWN0b3JPYmplY3QmKQoreworICAgIEVycm9yU3RyaW5nIGVycm9yOworICAg
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCk7CisgICAgbV9hZ2VudC0+bG9hZFJlc291cmNlNCgmZXJyb3IpOworCisgICAgbV9iYWNrZW5k
RGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgZXJyb3Ip
OworfQorCit2b2lkIEluc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNv
dXJjZTUobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYpCit7CisgICAgRXJyb3JT
dHJpbmcgZXJyb3I7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVj
dG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBtX2FnZW50LT5sb2FkUmVzb3VyY2U1KCZlcnJvcik7
CisKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQu
cmVsZWFzZSgpLCBlcnJvcik7Cit9CisKK3ZvaWQgSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlz
cGF0Y2hlcjo6bG9hZFJlc291cmNlNihsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0
JikKK3sKKyAgICBFcnJvclN0cmluZyBlcnJvcjsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIG1fYWdlbnQtPmxvYWRS
ZXNvdXJjZTYoJmVycm9yKTsKKworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25z
ZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIGVycm9yKTsKK30KKwordm9pZCBJbnNwZWN0b3JO
ZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U3KGxvbmcgY2FsbElkLCBjb25z
dCBJbnNwZWN0b3JPYmplY3QmKQoreworICAgIEVycm9yU3RyaW5nIGVycm9yOworICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Cisg
ICAgbV9hZ2VudC0+bG9hZFJlc291cmNlNygmZXJyb3IpOworCisgICAgbV9iYWNrZW5kRGlzcGF0
Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgZXJyb3IpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1Ip
CisKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9l
eHBlY3RlZC9mYWlsLW9uLWR1cGxpY2F0ZS10eXBlLWRlY2xhcmF0aW9ucy5qc29uLWVycm9yIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2Zh
aWwtb24tZHVwbGljYXRlLXR5cGUtZGVjbGFyYXRpb25zLmpzb24tZXJyb3IKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NDQ3Y2RmOGUyOGU4NTY2MTBhMjZmODE1NDk0M2YzNmNmOGI3ZDFmNAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3Rl
ZC9mYWlsLW9uLWR1cGxpY2F0ZS10eXBlLWRlY2xhcmF0aW9ucy5qc29uLWVycm9yCkBAIC0wLDAg
KzEgQEAKK0VSUk9SOiBEdXBsaWNhdGUgdHlwZSBkZWNsYXJhdGlvbjogUnVudGltZS5SZW1vdGVP
YmplY3RJZApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tdHlwZS1kZWNsYXJhdGlvbi11c2luZy10eXBlLXJl
ZmVyZW5jZS5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tdHlwZS1kZWNsYXJhdGlvbi11c2luZy10eXBlLXJl
ZmVyZW5jZS5qc29uLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQyZjU3NTNhNDM5NjE0NGViNTY2YzVjNTk2
OGQwNDlhZWM2MTgyZGIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi10eXBlLWRlY2xhcmF0aW9u
LXVzaW5nLXR5cGUtcmVmZXJlbmNlLmpzb24tZXJyb3IKQEAgLTAsMCArMSBAQAorRVJST1I6IFR5
cGUgcmVmZXJlbmNlIGNhbm5vdCBoYXZlIGJvdGggJ3R5cGUnIGFuZCAnJHJlZicga2V5cy4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9l
eHBlY3RlZC9mYWlsLW9uLXR5cGUtZGVjbGFyYXRpb24tdXNpbmctdHlwZS1yZWZlcmVuY2UuanNv
bi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
ZXhwZWN0ZWQvZmFpbC1vbi10eXBlLWRlY2xhcmF0aW9uLXVzaW5nLXR5cGUtcmVmZXJlbmNlLmpz
b24tcmVzdWx0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY1MTQ1NWMyZDM5ZGQyM2ZiZmEyYjhjMTg4OWY4M2FkYmIz
NjA0NzAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi10eXBlLWRlY2xhcmF0aW9uLXVzaW5nLXR5
cGUtcmVmZXJlbmNlLmpzb24tcmVzdWx0CkBAIC0wLDAgKzEsMTMwIEBACisjIyMgQmVnaW4gRmls
ZTogSW5zcGVjdG9yVGVzdEJhY2tlbmRDb21tYW5kcy5qcworLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBmYWls
LW9uLXR5cGUtZGVjbGFyYXRpb24tdXNpbmctdHlwZS1yZWZlcmVuY2UuanNvbgorLy8gYnkgdGhl
IHNjcmlwdDogSmF2YVNjcmlwdENvcmUvcmVwbGF5L3NjcmlwdHMvQ29kZUdlbmVyYXRvckluc3Bl
Y3Rvci5weQorCisvLyBSdW50aW1lLgorSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlclJ1bnRpbWVE
aXNwYXRjaGVyID0gSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbkRpc3BhdGNoZXIuYmlu
ZChJbnNwZWN0b3JCYWNrZW5kLCAiUnVudGltZSIpOworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JU
ZXN0QmFja2VuZENvbW1hbmRzLmpzCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0QmFj
a2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZmFpbC1vbi10eXBlLWRlY2xhcmF0
aW9uLXVzaW5nLXR5cGUtcmVmZXJlbmNlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IEphdmFTY3Jp
cHRDb3JlL3JlcGxheS9zY3JpcHRzL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKKworI2lmbmRl
ZiBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzX2gKKyNkZWZpbmUgSW5zcGVjdG9yVGVz
dEJhY2tlbmREaXNwYXRjaGVyc19oCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVk
ZSAiSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5oIgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3Igewor
Cit0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
CisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorCisjZW5kaWYgLy8gIWRlZmluZWQoSW5z
cGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVyc19oKQorIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JU
ZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RC
YWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGZhaWwtb24tdHlwZS1kZWNs
YXJhdGlvbi11c2luZy10eXBlLXJlZmVyZW5jZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBKYXZh
U2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5CisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNo
ZXJzLmgiCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSA8aW5zcGVjdG9yL0lu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oPgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JW
YWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNw
ZWN0b3IgeworCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFC
TEUoSU5TUEVDVE9SKQorCisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0
Y2hlcnMuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi11bmtub3duLXR5cGUtcmVmZXJlbmNlLWluLXR5
cGUtZGVjbGFyYXRpb24uanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2Ut
aW4tdHlwZS1kZWNsYXJhdGlvbi5qc29uLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQzYzc4MmQ4OWRiNTY1
ZDcyNGU3NTQwZTMyZWRjZmRiZDc5YTJmNzMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi11bmtu
b3duLXR5cGUtcmVmZXJlbmNlLWluLXR5cGUtZGVjbGFyYXRpb24uanNvbi1lcnJvcgpAQCAtMCww
ICsxIEBACitFUlJPUjogTG9va3VwIGZhaWxlZCBmb3IgdHlwZSByZWZlcmVuY2U6IGRyYWdvbiAo
cmVmZXJlbmNlZCBmcm9tIGRvbWFpbjogUnVudGltZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLXVua25v
d24tdHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1tZW1iZXIuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLXVua25v
d24tdHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1tZW1iZXIuanNvbi1lcnJvcgpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5m
YWY2NjcyY2JlZjA5NjMwZmQ5YmU4ZmZhZGFjZTEyYzU2MTFjY2E4Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVk
L2ZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVyZW5jZS1pbi10eXBlLW1lbWJlci5qc29uLWVycm9y
CkBAIC0wLDAgKzEgQEAKK0VSUk9SOiBMb29rdXAgZmFpbGVkIGZvciB0eXBlIHJlZmVyZW5jZTog
Q29sb3IgKHJlZmVyZW5jZWQgZnJvbSBkb21haW46IEZhbnRhc3kpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvc2FtZS10
eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9zYW1lLXR5cGUtaWQtZGlmZmVyZW50
LWRvbWFpbi5qc29uLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmIxMzA0ZjNkYmMxNzhkNTZmMjU1Y2IzYjdj
OWYwODZmNzk5NTZhMDYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvc2FtZS10eXBlLWlkLWRpZmZlcmVudC1k
b21haW4uanNvbi1lcnJvcgpAQCAtMCwwICsxIEBACitFUlJPUjogV2hlbiBwYXJzaW5nIGRvbWFp
biwgcmVxdWlyZWQgcHJvcGVydHkgbWlzc2luZzogZG9tYWluCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvc2FtZS10eXBl
LWlkLWRpZmZlcmVudC1kb21haW4uanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvc2FtZS10eXBlLWlkLWRpZmZlcmVudC1k
b21haW4uanNvbi1yZXN1bHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWM5YTgwNDZlNjQxMmJhNGM3NjUxMGFjNTBm
NDA3ZTUzOWZkMWNjZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9zYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRv
bWFpbi5qc29uLXJlc3VsdApAQCAtMCwwICsxLDEzMyBAQAorIyMjIEJlZ2luIEZpbGU6IEluc3Bl
Y3RvclRlc3RCYWNrZW5kQ29tbWFuZHMuanMKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2FtZS10eXBlLWlk
LWRpZmZlcmVudC1kb21haW4uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogSmF2YVNjcmlwdENvcmUv
cmVwbGF5L3NjcmlwdHMvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQorCisvLyBSdW50aW1lLgor
SW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlclJ1bnRpbWVEaXNwYXRjaGVyID0gSW5zcGVjdG9yQmFj
a2VuZC5yZWdpc3RlckRvbWFpbkRpc3BhdGNoZXIuYmluZChJbnNwZWN0b3JCYWNrZW5kLCAiUnVu
dGltZSIpOworCisvLyBSdW50aW1lMi4KK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJSdW50aW1l
MkRpc3BhdGNoZXIgPSBJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluRGlzcGF0Y2hlci5i
aW5kKEluc3BlY3RvckJhY2tlbmQsICJSdW50aW1lMiIpOworIyMjIEVuZCBGaWxlOiBJbnNwZWN0
b3JUZXN0QmFja2VuZENvbW1hbmRzLmpzCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0
QmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2FtZS10eXBlLWlkLWRpZmZl
cmVudC1kb21haW4uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogSmF2YVNjcmlwdENvcmUvcmVwbGF5
L3NjcmlwdHMvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQorCisjaWZuZGVmIEluc3BlY3RvclRl
c3RCYWNrZW5kRGlzcGF0Y2hlcnNfaAorI2RlZmluZSBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3Bh
dGNoZXJzX2gKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRlICJJbnNwZWN0b3JU
ZXN0VHlwZUJ1aWxkZXJzLmgiCisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3R5cGVkZWYgU3Ry
aW5nIEVycm9yU3RyaW5nOworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8v
IEVOQUJMRShJTlNQRUNUT1IpCisKKyNlbmRpZiAvLyAhZGVmaW5lZChJbnNwZWN0b3JUZXN0QmFj
a2VuZERpc3BhdGNoZXJzX2gpCisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kRGlz
cGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRj
aGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4u
anNvbgorLy8gYnkgdGhlIHNjcmlwdDogSmF2YVNjcmlwdENvcmUvcmVwbGF5L3NjcmlwdHMvQ29k
ZUdlbmVyYXRvckluc3BlY3Rvci5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
SW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaWYgRU5BQkxFKElOU1BFQ1RP
UikKKworI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4KKyNp
bmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKK30gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKworIyMjIEVuZCBGaWxl
OiBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVj
bGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0
aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbi1yZXN1bHQKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTJmZTcy
OTcyNzIxNjEzMDRlZjA5NDRjNzAwZGY4ZmNmMzg2Mzk1YgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBl
LWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbi1yZXN1bHQKQEAgLTAsMCAr
MSwxMzAgQEAKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0QmFja2VuZENvbW1hbmRzLmpz
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlw
ZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBKYXZhU2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0cy9D
b2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5CisKKy8vIFJ1bnRpbWUuCitJbnNwZWN0b3JCYWNrZW5k
LnJlZ2lzdGVyUnVudGltZURpc3BhdGNoZXIgPSBJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9t
YWluRGlzcGF0Y2hlci5iaW5kKEluc3BlY3RvckJhY2tlbmQsICJSdW50aW1lIik7CisjIyMgRW5k
IEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kQ29tbWFuZHMuanMKKworIyMjIEJlZ2luIEZpbGU6
IEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBl
LWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlw
dDogSmF2YVNjcmlwdENvcmUvcmVwbGF5L3NjcmlwdHMvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5w
eQorCisjaWZuZGVmIEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnNfaAorI2RlZmluZSBJ
bnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzX2gKKworI2lmIEVOQUJMRShJTlNQRUNUT1Ip
CisKKyNpbmNsdWRlICJJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmgiCisjaW5jbHVkZSA8aW5z
cGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NS
ZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIElu
c3BlY3RvciB7CisKK3R5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCit9IC8vIG5hbWVzcGFj
ZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyNlbmRpZiAvLyAh
ZGVmaW5lZChJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzX2gpCisjIyMgRW5kIEZpbGU6
IEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogSW5z
cGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1k
ZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6
IEphdmFTY3JpcHRDb3JlL3JlcGxheS9zY3JpcHRzL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkK
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkluc3BlY3RvclRlc3RCYWNrZW5kRGlz
cGF0Y2hlcnMuaCIKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRlIDxpbnNwZWN0
b3IvSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLmg+CisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3Bl
Y3RvclZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNl
IEluc3BlY3RvciB7CisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8v
IEVOQUJMRShJTlNQRUNUT1IpCisKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdEJhY2tlbmRE
aXNwYXRjaGVycy5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNv
bi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
ZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24tcmVzdWx0Cm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjU5YWIwNDljYjZiNTA3MjJjMGEwNWNiZTEyMWE5M2M1YTc3YzNmM2MKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhw
ZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24tcmVzdWx0CkBAIC0wLDAgKzEs
MTMzIEBACisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdEJhY2tlbmRDb21tYW5kcy5qcwor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbgorLy8gYnkg
dGhlIHNjcmlwdDogSmF2YVNjcmlwdENvcmUvcmVwbGF5L3NjcmlwdHMvQ29kZUdlbmVyYXRvcklu
c3BlY3Rvci5weQorCisvLyBEZWJ1Z2dlci4KK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEZWJ1
Z2dlckRpc3BhdGNoZXIgPSBJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluRGlzcGF0Y2hl
ci5iaW5kKEluc3BlY3RvckJhY2tlbmQsICJEZWJ1Z2dlciIpOworCisvLyBSdW50aW1lLgorSW5z
cGVjdG9yQmFja2VuZC5yZWdpc3RlclJ1bnRpbWVEaXNwYXRjaGVyID0gSW5zcGVjdG9yQmFja2Vu
ZC5yZWdpc3RlckRvbWFpbkRpc3BhdGNoZXIuYmluZChJbnNwZWN0b3JCYWNrZW5kLCAiUnVudGlt
ZSIpOworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0QmFja2VuZENvbW1hbmRzLmpzCisKKyMj
IyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3Jp
cHQ6IEphdmFTY3JpcHRDb3JlL3JlcGxheS9zY3JpcHRzL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3Iu
cHkKKworI2lmbmRlZiBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzX2gKKyNkZWZpbmUg
SW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVyc19oCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9S
KQorCisjaW5jbHVkZSAiSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5oIgorI2luY2x1ZGUgPGlu
c3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNz
UmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJ
bnNwZWN0b3IgeworCit0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKworfSAvLyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorCisjZW5kaWYgLy8g
IWRlZmluZWQoSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVyc19oKQorIyMjIEVuZCBGaWxl
OiBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IElu
c3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUt
ZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBKYXZhU2NyaXB0
Q29yZS9yZXBsYXkvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5CisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgi
CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbC5oPgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMu
aD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3Ig
eworCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5T
UEVDVE9SKQorCisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMu
Y3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbi1yZXN1bHQgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlw
ZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbi1yZXN1bHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWQ3OWY3NjYy
MzVhY2VmNmVhZjkyNTk2YjI1ZDQ3ZmEwZjMyODUzMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRl
Y2xhcmF0aW9uLWVudW0tdHlwZS5qc29uLXJlc3VsdApAQCAtMCwwICsxLDEzMiBAQAorIyMjIEJl
Z2luIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kQ29tbWFuZHMuanMKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisv
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogSmF2
YVNjcmlwdENvcmUvcmVwbGF5L3NjcmlwdHMvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQorCisv
LyBSdW50aW1lLgorSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlclJ1bnRpbWVEaXNwYXRjaGVyID0g
SW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbkRpc3BhdGNoZXIuYmluZChJbnNwZWN0b3JC
YWNrZW5kLCAiUnVudGltZSIpOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckVudW0oIlJ1bnRp
bWUuTHVja3lOdW1iZXJzIiwge05vbmU6ICIwIiwgTm9uZTogIjEiLCBOb25lOiAiMiJ9OworSW5z
cGVjdG9yQmFja2VuZC5yZWdpc3RlckVudW0oIlJ1bnRpbWUuQWxsb3dlZEFuaW1hbHMiLCB7Tm9u
ZTogIlBpZ3MiLCBOb25lOiAiV29sdmVzIiwgTm9uZTogIkNhdHMifTsKKyMjIyBFbmQgRmlsZTog
SW5zcGVjdG9yVGVzdEJhY2tlbmRDb21tYW5kcy5qcworCisjIyMgQmVnaW4gRmlsZTogSW5zcGVj
dG9yVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFy
YXRpb24tZW51bS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IEphdmFTY3JpcHRDb3JlL3Jl
cGxheS9zY3JpcHRzL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKKworI2lmbmRlZiBJbnNwZWN0
b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzX2gKKyNkZWZpbmUgSW5zcGVjdG9yVGVzdEJhY2tlbmRE
aXNwYXRjaGVyc19oCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSAiSW5zcGVj
dG9yVGVzdFR5cGVCdWlsZGVycy5oIgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0eXBlZGVm
IFN0cmluZyBFcnJvclN0cmluZzsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRp
ZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorCisjZW5kaWYgLy8gIWRlZmluZWQoSW5zcGVjdG9yVGVz
dEJhY2tlbmREaXNwYXRjaGVyc19oKQorIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0QmFja2Vu
ZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kRGlz
cGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tZW51bS10eXBl
Lmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IEphdmFTY3JpcHRDb3JlL3JlcGxheS9zY3JpcHRzL0Nv
ZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
Ikluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2lmIEVOQUJMRShJTlNQRUNU
T1IpCisKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLmg+Cisj
aW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0
L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCit9IC8vIG5hbWVzcGFj
ZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyMjIyBFbmQgRmls
ZTogSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWR1cGxpY2F0
ZS10eXBlLWRlY2xhcmF0aW9ucy5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tZHVwbGljYXRlLXR5cGUtZGVjbGFyYXRpb25zLmpzb24K
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNzAyZmM2YTMyNzBhNjQ2YTQ1MDQ0N2ZkYzA0MDEzOTk1YTk0MmJmMAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9mYWlsLW9uLWR1cGxpY2F0ZS10eXBlLWRlY2xhcmF0aW9ucy5qc29uCkBAIC0wLDAgKzEs
MTUgQEAKK3sKKyAgICAiZG9tYWluIjogIlJ1bnRpbWUiLAorICAgICJ0eXBlcyI6IFsKKyAgICAg
ICAgeworICAgICAgICAgICAgImlkIjogIlJlbW90ZU9iamVjdElkIiwKKyAgICAgICAgICAgICJ0
eXBlIjogInN0cmluZyIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5pcXVlIG9iamVj
dCBpZGVudGlmaWVyLiIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjog
IlJlbW90ZU9iamVjdElkIiwKKyAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCisgICAgICAg
ICAgICAiZGVzY3JpcHRpb24iOiAiVW5pcXVlIG9iamVjdCBpZGVudGlmaWVyLiIKKyAgICAgICAg
fQorICAgIF0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9mYWlsLW9uLXR5cGUtZGVjbGFyYXRpb24tdXNpbmctdHlwZS1yZWZlcmVu
Y2UuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9m
YWlsLW9uLXR5cGUtZGVjbGFyYXRpb24tdXNpbmctdHlwZS1yZWZlcmVuY2UuanNvbgpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4xOWI3NTkwY2NjNmY2YmMzNDQzYTRhMjgzY2E2ZmNjZmRmMzI3NzM0Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2Zh
aWwtb24tdHlwZS1kZWNsYXJhdGlvbi11c2luZy10eXBlLXJlZmVyZW5jZS5qc29uCkBAIC0wLDAg
KzEsMTMgQEAKK1sKK3sKKyAgICAiZG9tYWluIjogIlJ1bnRpbWUiLAorICAgICJ0eXBlcyI6IFsK
KyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIlJlbW90ZU9iamVjdElkIiwKKyAgICAgICAg
ICAgICJ0eXBlIjogIm9iamVjdCIsCisgICAgICAgICAgICAiJHJlZiI6ICJTb21lVHlwZSIsCisg
ICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5pcXVlIG9iamVjdCBpZGVudGlmaWVyLiIKKyAg
ICAgICAgfQorICAgIF0KK30KK10KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2UtaW4t
dHlwZS1kZWNsYXJhdGlvbi5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2ZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVyZW5jZS1pbi10eXBlLWRlY2xh
cmF0aW9uLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDY4ODdhMjc0MTE5MDBhODBkNTBmMDAzZWFjMzZjMTNh
OTlmYWU1OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1k
ZWNsYXJhdGlvbi5qc29uCkBAIC0wLDAgKzEsMTIgQEAKK1sKK3sKKyAgICAiZG9tYWluIjogIlJ1
bnRpbWUiLAorICAgICJ0eXBlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIlJl
bW90ZU9iamVjdElkIiwKKyAgICAgICAgICAgICJ0eXBlIjogImRyYWdvbiIsCisgICAgICAgICAg
ICAiZGVzY3JpcHRpb24iOiAiVW5pcXVlIG9iamVjdCBpZGVudGlmaWVyLiIKKyAgICAgICAgfQor
ICAgIF0KK30KK10KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1tZW1i
ZXIuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9m
YWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1tZW1iZXIuanNvbgpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5iODE3ZGI1MDQ0ZGMxZjI4NTU3MDA4YzFmMTc2MWYxYjA2OGY0Y2U2Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2Zh
aWwtb24tdW5rbm93bi10eXBlLXJlZmVyZW5jZS1pbi10eXBlLW1lbWJlci5qc29uCkBAIC0wLDAg
KzEsMTUgQEAKK1sKK3sKKyAgICAiZG9tYWluIjogIkZhbnRhc3kiLAorICAgICJ0eXBlcyI6IFsK
KyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIkRyYWdvbkVnZyIsCisgICAgICAgICAgICAi
dHlwZSI6ICJvYmplY3QiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkEgZHJhZ29uIGVn
Zy4iLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJjb2xvciIsICIkcmVmIjogIkNvbG9yIiB9CisgICAgICAgICAgICBdCisgICAgICAgIH0K
KyAgICBdCit9CitdCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbiBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9zYW1lLXR5cGUtaWQtZGlm
ZmVyZW50LWRvbWFpbi5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNiZjRkZmY1Y2NjMjlkMGU4YzFmYTRiMmRk
MzI4M2U3NzE2MzJjN2QKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNv
bgpAQCAtMCwwICsxLDIyIEBACitbCit7CisgICAgImRvbWFpbiI6ICJSdW50aW1lIiwKKyAgICAi
dHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJSZW1vdGVPYmplY3RJZCIs
CisgICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAorICAgICAgICAgICAgImRlc2NyaXB0aW9u
IjogIlVuaXF1ZSBvYmplY3QgaWRlbnRpZmllci4iCisgICAgICAgIH0KKyAgICBdCit9LAorewor
ICAgICJkb21haW4iOiAiUnVudGltZTIiLAorICAgICJ0eXBlcyI6IFsKKyAgICAgICAgeworICAg
ICAgICAgICAgImlkIjogIlJlbW90ZU9iamVjdElkIiwKKyAgICAgICAgICAgICJ0eXBlIjogInN0
cmluZyIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5pcXVlIG9iamVjdCBpZGVudGlm
aWVyLiIKKyAgICAgICAgfQorICAgIF0KK30KK10KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy90eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQt
cHJpbWl0aXZlLXR5cGUuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy90eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbgpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5jYmM5ZDUzOTQ3OGRiNDk1Yzk2MDY3ZWNkNTRhOTViZTUyZjhkMDcwCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL3R5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uCkBAIC0wLDAg
KzEsMTAgQEAKK3sKKyAgICAiZG9tYWluIjogIlJ1bnRpbWUiLAorICAgICJ0eXBlcyI6IFsKKyAg
ICAgICAgeworICAgICAgICAgICAgImlkIjogIlJlbW90ZU9iamVjdElkIiwKKyAgICAgICAgICAg
ICJ0eXBlIjogImludGVnZXIiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBv
YmplY3QgaWRlbnRpZmllci4iCisgICAgICAgIH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvdHlwZS1kZWNsYXJhdGlv
bi1hcnJheS10eXBlLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24KbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzE2
NzdhMDAyMTEzNzdiY2Q1ODFjZTI4NzU2NDlkMzM2MWJiZDI0YgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy90eXBlLWRlY2xh
cmF0aW9uLWFycmF5LXR5cGUuanNvbgpAQCAtMCwwICsxLDQwIEBACitbCit7CisgICAgImRvbWFp
biI6ICJEZWJ1Z2dlciIsCisgICAgInR5cGVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAi
aWQiOiAiQnJlYWtwb2ludElkIiwKKyAgICAgICAgICAgICJ0eXBlIjogImludGVnZXIiCisgICAg
ICAgIH0KKyAgICBdCit9LAoreworICAgICJkb21haW4iOiAiUnVudGltZSIsCisgICAgInR5cGVz
IjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiTHVja3lOdW1iZXJzIiwKKyAgICAg
ICAgICAgICJ0eXBlIjogImFycmF5IiwKKyAgICAgICAgICAgICJpdGVtcyI6IHsgInR5cGUiOiAi
aW50ZWdlciIgfQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiQmFi
eU5hbWVzIiwKKyAgICAgICAgICAgICJ0eXBlIjogImFycmF5IiwKKyAgICAgICAgICAgICJpdGVt
cyI6IHsgInR5cGUiOiAic3RyaW5nIiB9CisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAg
ICAgICJpZCI6ICJPYmplY3RJZCIsCisgICAgICAgICAgICAidHlwZSI6ICJpbnRlZ2VyIgorICAg
ICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiTmV3T2JqZWN0cyIsCisgICAg
ICAgICAgICAidHlwZSI6ICJhcnJheSIsCisgICAgICAgICAgICAiaXRlbXMiOiB7ICIkcmVmIjog
Ik9iamVjdElkIiB9CisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJP
bGRPYmplY3RzIiwKKyAgICAgICAgICAgICJ0eXBlIjogImFycmF5IiwKKyAgICAgICAgICAgICJp
dGVtcyI6IHsgIiRyZWYiOiAiRGVidWdnZXIuQnJlYWtwb2ludElkIiB9CisgICAgICAgIH0KKyAg
ICBdCit9CitdCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbiBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy90eXBlLWRlY2xhcmF0aW9uLWVudW0t
dHlwZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNjNDUwM2QyYWJiYjdlMTFkMTdhNjQ2ZDYxNzA5N2NiMTFj
YTMwMTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgpAQCAtMCwwICsx
LDE1IEBACit7CisgICAgImRvbWFpbiI6ICJSdW50aW1lIiwKKyAgICAidHlwZXMiOiBbCisgICAg
ICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJMdWNreU51bWJlcnMiLAorICAgICAgICAgICAgInR5
cGUiOiAiaW50ZWdlciIsCisgICAgICAgICAgICAiZW51bSI6IFswLCAxLCAyXQorICAgICAgICB9
LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiQWxsb3dlZEFuaW1hbHMiLAorICAgICAg
ICAgICAgInR5cGUiOiAic3RyaW5nIiwKKyAgICAgICAgICAgICJlbnVtIjogWyJQaWdzIiwgIldv
bHZlcyIsICJDYXRzIl0KKyAgICAgICAgfQorICAgIF0KK30KZGlmZiAtLWdpdCBhL1Rvb2xzL0No
YW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBlMmI1Njc5ZTA5OTM4M2Y4NThkOTI1Nzhl
MjYxYzczYjYwMjY4MzIyLi5mZjFmMWNiMGFkOTBiOWFkMDczMzE1ZGYyNjllMjMyMjkxODI3MTc1
IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMjIgQEAKKzIwMTQtMDQtMTcgIEJyaWFuIEouIEJ1cmcgIDxidXJnQGNzLndhc2hpbmd0
b24uZWR1PgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IHJld3JpdGUgQ29kZUdlbmVyYXRvcklu
c3BlY3RvciB0byBiZSBtb2R1bGFyIGFuZCB0ZXN0YWJsZQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMxNTk2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTY3JpcHRzL3J1bi1pbnNwZWN0b3ItZ2VuZXJh
dG9yLXRlc3RzOiBBZGRlZC4KKyAgICAgICAgKG1haW4pOgorICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0cHkvaW5zcGVjdG9yL19faW5pdF9fLnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dl
YmtpdHB5L2luc3BlY3Rvci9tYWluLnB5OiBBZGRlZC4KKyAgICAgICAgKEluc3BlY3RvckdlbmVy
YXRvclRlc3RzKToKKyAgICAgICAgKEluc3BlY3RvckdlbmVyYXRvclRlc3RzLl9faW5pdF9fKToK
KyAgICAgICAgKEluc3BlY3RvckdlbmVyYXRvclRlc3RzLmdlbmVyYXRlX2Zyb21fanNvbik6Cisg
ICAgICAgIChJbnNwZWN0b3JHZW5lcmF0b3JUZXN0cy53cml0ZV9lcnJvcl9maWxlKToKKyAgICAg
ICAgKEluc3BlY3RvckdlbmVyYXRvclRlc3RzLmRldGVjdF9jaGFuZ2VzKToKKyAgICAgICAgKElu
c3BlY3RvckdlbmVyYXRvclRlc3RzLnJ1bl90ZXN0cyk6CisgICAgICAgIChJbnNwZWN0b3JHZW5l
cmF0b3JUZXN0cy5tYWluKToKKwogMjAxNC0wNC0yMCAgRGFuIEJlcm5zdGVpbiAgPG1pdHpAYXBw
bGUuY29tPgogCiAgICAgICAgIEZpeGVkIGEgdGVzdCB0aW1pbmcgb3V0IGFmdGVyIHIxNjc1NzIu
CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3J1bi1pbnNwZWN0b3ItZ2VuZXJhdG9yLXRlc3Rz
IGIvVG9vbHMvU2NyaXB0cy9ydW4taW5zcGVjdG9yLWdlbmVyYXRvci10ZXN0cwpuZXcgZmlsZSBt
b2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5hYWFiMTgwMGJjYTZmN2U4YTM0OTZlNTkxODQyMWVlYWUyZDM4ZDgyCi0tLSAvZGV2L251bGwK
KysrIGIvVG9vbHMvU2NyaXB0cy9ydW4taW5zcGVjdG9yLWdlbmVyYXRvci10ZXN0cwpAQCAtMCww
ICsxLDQyIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMgQ29weXJpZ2h0IChDKSAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworIyBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisKK2ltcG9ydCBzeXMKK2Zyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbSBp
bXBvcnQgZXhlY3V0aXZlCisKK2RlZiBtYWluKGFyZ3YpOgorICAgICIiIlJ1bnMgcmVwbGF5IGlu
cHV0IGNvZGUgZ2VuZXJhdG9yIG9uIHRlc3Qgc3BlY2lmaWNhdGlvbiBmaWxlcyBhbmQgY29tcGFy
ZXMKKyAgICB0aGUgcmVzdWx0cyB3aXRoIHJlZmVyZW5jZSBmaWxlcy4KKworICAgIE9wdGlvbnM6
CisgICAgICAgLS1yZXNldC1yZXN1bHRzOiBPdmVyd3JpdGVzIHRoZSByZWZlcmVuY2UgZmlsZXMg
d2l0aCB0aGUgZ2VuZXJhdGVkIHJlc3VsdHMuCisKKyAgICAiIiIKKyAgICByZXNldF9yZXN1bHRz
ID0gIi0tcmVzZXQtcmVzdWx0cyIgaW4gYXJndgorCisgICAgZnJvbSB3ZWJraXRweS5pbnNwZWN0
b3IubWFpbiBpbXBvcnQgSW5zcGVjdG9yR2VuZXJhdG9yVGVzdHMKKyAgICByZXR1cm4gSW5zcGVj
dG9yR2VuZXJhdG9yVGVzdHMocmVzZXRfcmVzdWx0cywgZXhlY3V0aXZlLkV4ZWN1dGl2ZSgpKS5t
YWluKCkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBzeXMuZXhpdChtYWluKHN5
cy5hcmd2KSkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvaW5zcGVjdG9yL19f
aW5pdF9fLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9pbnNwZWN0b3IvX19pbml0X18ucHkK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uZWY2NWJlZTViYjc3ZTk2ZWJjN2NkOWM0NzY0MDY5MGZiZGE4YWMxOQotLS0g
L2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvaW5zcGVjdG9yL19faW5pdF9f
LnB5CkBAIC0wLDAgKzEgQEAKKyMgUmVxdWlyZWQgZm9yIFB5dGhvbiB0byBzZWFyY2ggdGhpcyBk
aXJlY3RvcnkgZm9yIG1vZHVsZSBmaWxlcwpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9pbnNwZWN0b3IvbWFpbi5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvaW5zcGVjdG9y
L21haW4ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNGQ1YjFlNDNiMDAyYzUzYTkwYTk1YmNjY2Y2M2Y0MmE1ZjEz
MjQ1MgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvaW5zcGVjdG9y
L21haW4ucHkKQEAgLTAsMCArMSwxMzQgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJl
IG1ldDoKKyMKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMKKyMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVECisjIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQQorIyBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgSE9MREVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0IG9zCitpbXBvcnQgb3MucGF0aAoraW1w
b3J0IHNodXRpbAoraW1wb3J0IHN5cworaW1wb3J0IHRlbXBmaWxlCitmcm9tIHdlYmtpdHB5LmNv
bW1vbi5jaGVja291dC5zY20uZGV0ZWN0aW9uIGltcG9ydCBkZXRlY3Rfc2NtX3N5c3RlbQorZnJv
bSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmV4ZWN1dGl2ZSBpbXBvcnQgU2NyaXB0RXJyb3IKKwor
CitjbGFzcyBJbnNwZWN0b3JHZW5lcmF0b3JUZXN0czoKKworICAgIGRlZiBfX2luaXRfXyhzZWxm
LCByZXNldF9yZXN1bHRzLCBleGVjdXRpdmUpOgorICAgICAgICBzZWxmLnJlc2V0X3Jlc3VsdHMg
PSByZXNldF9yZXN1bHRzCisgICAgICAgIHNlbGYuZXhlY3V0aXZlID0gZXhlY3V0aXZlCisKKyAg
ICBkZWYgZ2VuZXJhdGVfZnJvbV9qc29uKHNlbGYsIGpzb25fZmlsZSwgb3V0cHV0X2RpcmVjdG9y
eSk6CisgICAgICAgIGNtZCA9IFsncHl0aG9uJywKKyAgICAgICAgICAgICAgICdKYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yMi5weScsCisgICAg
ICAgICAgICAgICAnLS1vdXRwdXREaXInLCBvdXRwdXRfZGlyZWN0b3J5LAorICAgICAgICAgICAg
ICAgJy0tZm9yY2UnLAorICAgICAgICAgICAgICAgJy0tZnJhbWV3b3JrJywgJ1Rlc3QnLAorICAg
ICAgICAgICAgICAgJy0tdGVzdCcsCisgICAgICAgICAgICAgICBqc29uX2ZpbGVdCisKKyAgICAg
ICAgZXhpdF9jb2RlID0gMAorICAgICAgICB0cnk6CisgICAgICAgICAgICBzdGRlcnJfb3V0cHV0
ID0gc2VsZi5leGVjdXRpdmUucnVuX2NvbW1hbmQoY21kKQorICAgICAgICAgICAgaWYgc3RkZXJy
X291dHB1dDoKKyAgICAgICAgICAgICAgICBzZWxmLndyaXRlX2Vycm9yX2ZpbGUoanNvbl9maWxl
LCBvdXRwdXRfZGlyZWN0b3J5LCBzdGRlcnJfb3V0cHV0KQorICAgICAgICBleGNlcHQgU2NyaXB0
RXJyb3IsIGU6CisgICAgICAgICAgICBwcmludCBlLm91dHB1dAorICAgICAgICAgICAgZXhpdF9j
b2RlID0gZS5leGl0X2NvZGUKKyAgICAgICAgcmV0dXJuIGV4aXRfY29kZQorCisgICAgZGVmIHdy
aXRlX2Vycm9yX2ZpbGUoc2VsZiwgaW5wdXRfZmlsZXBhdGgsIG91dHB1dF9kaXJlY3RvcnksIGVy
cm9yX291dHB1dCk6CisgICAgICAgIG91dHB1dF9maWxlcGF0aCA9IG9zLnBhdGguam9pbihvdXRw
dXRfZGlyZWN0b3J5LCBvcy5wYXRoLmJhc2VuYW1lKGlucHV0X2ZpbGVwYXRoKSArICctZXJyb3In
KQorCisgICAgICAgIHdpdGggb3BlbihvdXRwdXRfZmlsZXBhdGgsICJ3IikgYXMgb3V0cHV0X2Zp
bGU6CisgICAgICAgICAgICBvdXRwdXRfZmlsZS53cml0ZShlcnJvcl9vdXRwdXQpCisKKyAgICBk
ZWYgZGV0ZWN0X2NoYW5nZXMoc2VsZiwgd29ya19kaXJlY3RvcnksIHJlZmVyZW5jZV9kaXJlY3Rv
cnkpOgorICAgICAgICBjaGFuZ2VzX2ZvdW5kID0gRmFsc2UKKyAgICAgICAgZm9yIG91dHB1dF9m
aWxlIGluIG9zLmxpc3RkaXIod29ya19kaXJlY3RvcnkpOgorICAgICAgICAgICAgY21kID0gWydk
aWZmJywKKyAgICAgICAgICAgICAgICAgICAnLXUnLAorICAgICAgICAgICAgICAgICAgICctTics
CisgICAgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKHJlZmVyZW5jZV9kaXJlY3RvcnksIG91
dHB1dF9maWxlKSwKKyAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4od29ya19kaXJlY3Rv
cnksIG91dHB1dF9maWxlKV0KKworICAgICAgICAgICAgZXhpdF9jb2RlID0gMAorICAgICAgICAg
ICAgdHJ5OgorICAgICAgICAgICAgICAgIG91dHB1dCA9IHNlbGYuZXhlY3V0aXZlLnJ1bl9jb21t
YW5kKGNtZCkKKyAgICAgICAgICAgIGV4Y2VwdCBTY3JpcHRFcnJvciwgZToKKyAgICAgICAgICAg
ICAgICBvdXRwdXQgPSBlLm91dHB1dAorICAgICAgICAgICAgICAgIGV4aXRfY29kZSA9IGUuZXhp
dF9jb2RlCisKKyAgICAgICAgICAgIGlmIGV4aXRfY29kZSBvciBvdXRwdXQ6CisgICAgICAgICAg
ICAgICAgcHJpbnQgJ0ZBSUw6ICVzJyAlIG91dHB1dF9maWxlCisgICAgICAgICAgICAgICAgcHJp
bnQgb3V0cHV0CisgICAgICAgICAgICAgICAgY2hhbmdlc19mb3VuZCA9IFRydWUKKyAgICAgICAg
ICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcHJpbnQgJ1BBU1M6ICVzJyAlIG91dHB1dF9maWxl
CisgICAgICAgIHJldHVybiBjaGFuZ2VzX2ZvdW5kCisKKyAgICBkZWYgcnVuX3Rlc3RzKHNlbGYs
IGlucHV0X2RpcmVjdG9yeSwgcmVmZXJlbmNlX2RpcmVjdG9yeSk6CisgICAgICAgIHdvcmtfZGly
ZWN0b3J5ID0gcmVmZXJlbmNlX2RpcmVjdG9yeQorCisgICAgICAgIHBhc3NlZCA9IFRydWUKKyAg
ICAgICAgZm9yIGlucHV0X2ZpbGUgaW4gb3MubGlzdGRpcihpbnB1dF9kaXJlY3RvcnkpOgorICAg
ICAgICAgICAgKG5hbWUsIGV4dGVuc2lvbikgPSBvcy5wYXRoLnNwbGl0ZXh0KGlucHV0X2ZpbGUp
CisgICAgICAgICAgICBpZiBleHRlbnNpb24gIT0gJy5qc29uJzoKKyAgICAgICAgICAgICAgICBj
b250aW51ZQorICAgICAgICAgICAgIyBHZW5lcmF0ZSBvdXRwdXQgaW50byB0aGUgd29yayBkaXJl
Y3RvcnkgKGVpdGhlciB0aGUgZ2l2ZW4gb25lIG9yIGEKKyAgICAgICAgICAgICMgdGVtcCBvbmUg
aWYgbm90IHJlc2V0X3Jlc3VsdHMgaXMgcGVyZm9ybWVkKQorICAgICAgICAgICAgaWYgbm90IHNl
bGYucmVzZXRfcmVzdWx0czoKKyAgICAgICAgICAgICAgICB3b3JrX2RpcmVjdG9yeSA9IHRlbXBm
aWxlLm1rZHRlbXAoKQorCisgICAgICAgICAgICBpZiBzZWxmLmdlbmVyYXRlX2Zyb21fanNvbihv
cy5wYXRoLmpvaW4oaW5wdXRfZGlyZWN0b3J5LCBpbnB1dF9maWxlKSwgd29ya19kaXJlY3Rvcnkp
OgorICAgICAgICAgICAgICAgIHBhc3NlZCA9IEZhbHNlCisKKyAgICAgICAgICAgIGlmIHNlbGYu
cmVzZXRfcmVzdWx0czoKKyAgICAgICAgICAgICAgICBwcmludCAiUmVzZXQgcmVzdWx0cyBmb3Ig
dGVzdDogJXMiICUgKGlucHV0X2ZpbGUpCisgICAgICAgICAgICAgICAgY29udGludWUKKworICAg
ICAgICAgICAgIyBEZXRlY3QgY2hhbmdlcworICAgICAgICAgICAgaWYgc2VsZi5kZXRlY3RfY2hh
bmdlcyh3b3JrX2RpcmVjdG9yeSwgcmVmZXJlbmNlX2RpcmVjdG9yeSk6CisgICAgICAgICAgICAg
ICAgcGFzc2VkID0gRmFsc2UKKyAgICAgICAgICAgIHNodXRpbC5ybXRyZWUod29ya19kaXJlY3Rv
cnkpCisKKyAgICAgICAgcmV0dXJuIHBhc3NlZAorCisgICAgZGVmIG1haW4oc2VsZik6CisgICAg
ICAgIGN1cnJlbnRfc2NtID0gZGV0ZWN0X3NjbV9zeXN0ZW0ob3MuY3VyZGlyKQorICAgICAgICBv
cy5jaGRpcihvcy5wYXRoLmpvaW4oY3VycmVudF9zY20uY2hlY2tvdXRfcm9vdCwgJ1NvdXJjZScp
KQorCisgICAgICAgIGFsbF90ZXN0c19wYXNzZWQgPSBUcnVlCisKKyAgICAgICAgaW5wdXRfZGly
ZWN0b3J5ID0gb3MucGF0aC5qb2luKCdKYXZhU2NyaXB0Q29yZScsICdpbnNwZWN0b3InLCAnc2Ny
aXB0cycsICd0ZXN0cycpCisgICAgICAgIHJlZmVyZW5jZV9kaXJlY3RvcnkgPSBvcy5wYXRoLmpv
aW4oJ0phdmFTY3JpcHRDb3JlJywgJ2luc3BlY3RvcicsICdzY3JpcHRzJywgJ3Rlc3RzJywgJ2V4
cGVjdGVkJykKKyAgICAgICAgaWYgbm90IHNlbGYucnVuX3Rlc3RzKGlucHV0X2RpcmVjdG9yeSwg
cmVmZXJlbmNlX2RpcmVjdG9yeSk6CisgICAgICAgICAgICBhbGxfdGVzdHNfcGFzc2VkID0gRmFs
c2UKKworICAgICAgICBwcmludCAnJworICAgICAgICBpZiBhbGxfdGVzdHNfcGFzc2VkOgorICAg
ICAgICAgICAgcHJpbnQgJ0FsbCB0ZXN0cyBQQVNTIScKKyAgICAgICAgICAgIHJldHVybiAwCisg
ICAgICAgIGVsc2U6CisgICAgICAgICAgICBwcmludCAnU29tZSB0ZXN0cyBGQUlMISAoVG8gdXBk
YXRlIHRoZSByZWZlcmVuY2UgZmlsZXMsIGV4ZWN1dGUgInJ1bi1pbnNwZWN0b3ItZ2VuZXJhdG9y
LXRlc3RzIC0tcmVzZXQtcmVzdWx0cyIpJworICAgICAgICAgICAgcmV0dXJuIC0xCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>229776</attachid>
            <date>2014-04-20 16:23:12 -0700</date>
            <delta_ts>2014-04-20 16:23:12 -0700</delta_ts>
            <desc>current generated output for actual InspectorJS/Web.json files</desc>
            <filename>generated domains.zip</filename>
            <type>application/zip</type>
            <size>61837</size>
            <attacher name="Brian Burg">burg</attacher>
            
              <data encoding="base64">UEsDBBQACAAIANxTjkQAAAAAAAAAAAAAAAAQABAASW5zcGVjdG9ySlMuanNvblVYDADyNVRTTxtM
U/UBFADtPWtvHDeS3/0rCGGBOIA8vjvc7QdfLoAiyRstbEuwnE2AdXDgdHNmuO7p7m12SxoE+e9X
D5LNfsz0YyTbt7v5EGtmuslisVjvKv52EmdbqVNz8uqvz357JuA/+83JK3FynqUmS9TJqf1BmajQ
eamz8FfBz4tYrXSqjNiqcpPFRsg0FupOpaURq6wQOi1VISN8WdzrciPKjRJ/lnfylsYUEY+2EG7Y
KEsSFZU4oDFyDSNHhZKlisVyB9/J1IhsRaN8J8WmUKv/+WZTlvmrly/XqlzpQi2r9SLKti/v9Sf9
Uqexeljkm/ylHf9/z26uvvk+AMDNC99/91J+vxDXqRKpUrCUMhMqlUv4sdxo4xZcGZ2uxXdRFqvv
+efvXtIHAH27xeXDQ1kRqwIHMKUsSlGoSOk7fA8Bt2v2K1yIH4rs3sAL3cVrYypY+/1GJ/WLFhKA
Kc1KC2MspBH3KkloBwqVZwWMA9NtGxDbgc/iWMUObhhEr3QkaZOqHP5HQ8JLC0cD5S5XQCzir/QR
//vN/0UP6DigjXeqvM+KT+/V3ytlyqvYjuIfxtHwcVMWMEn71xa9/ZRqGAZWRIMJHQNtAbiqWIjX
V7+8vXwlLqo8QfAVUoade+EnF98hfRggkHu1/KTLRVasXy5f/vt//Ncf//if34uf1VJcpSYHtGfF
KxxSfADwxIXKFRBPGu3EFe6BOfFQ/n46CgsX12/fAX73Lx/PxloV49YPo8FGxWoQAfDgguf9Yit/
y0S2b93Z8m8w58Cyz5uHZNF+PC+yXBWlbpGlB0+cpHLLVJZVRQTAdOlOnKi02uL7Jw/bBD//DRgD
g4GfUqYl/NMevRcy1/jRAMpoheJE5nkkow39XSDi3NiRMfSoiqpClzv8O4PzWJz8etpZrcWYYFgX
JyGme5aUAIdNBlaUZPT5Xhap+6kosuKEJgcmeRAMGB9hHgSkVA9lPxx7RsYXhkfF0XpHzWhAmcC3
ZVGpnvXGurD/2C0tkTvSHyCH6I8oUbLgXQTm/Kciq/Lmp3NgwzI3KmaExv4RaYBL84L11oIEhLjS
PIP98zKN+5DbomiBqxtERVXs2ecuJtp84/0bJyndjFmh1zodpi4Q6OGknk+NmPWNRvFZbZcKZT/N
XiimavggS7FWKSgEKM9JqPrjPQATSMZqm86F6pzednBlDBcu81FhBKELmsp5VqXlXEDf0xAg6GEM
0p94TIDEKwtDUOSygL9A6zIhELIoJLEgXaotskx44w+gPdGkMJneKhCZ26xU18ydYZYR8LpjXU+K
GI2kUY72YBFbWQYrGFwAnMPo0wd3WB2Qt41vBwELNDwaT9DpJ5TyIYbnrLKKXHE8etOOblPDuFf9
GQHwlRfrDnN2Jq/5ANxZpIkYrCbdpM0G1L+Ol9kySV7j7h0lrml7QG8six0h2amqhF1GdI33I4T5
qkrJmHhHAI8QPAEhuHcFDjaf8x6gNP4HRwBeK2CEUbz2HbGlPSxjcLak5rgjuehx80UhLz2C7sID
3U94lme1Xu7yr5qC28vvyAF4UqzwUdNmBfCpzQnqpdBfv1pbyJp5B80hh3C2zQbOziU9ZFrm3Slo
YWlsQgFunIEILMBkYiXJxCSTMtFw9rom8iibbzFGwXcrirUZsaQLfqq7prxwzoGqQGW4YwzD9mRb
sVRosrIVi2I4XOUkcEnXs1LKDJkc+KzpQlQj3WoLSzbXJwFiVPk2SzXYDbCyX358z5vesQ0D6T3A
CZUboD4wywzglmmf+u2n9u4CEItlj9w4jKIP2XqN27qtxwNS++Xtmx/B0rQCbyGuVpbyUNRZijv1
eL3XcAjZIxIgmf0OYEgJQI51e0xCsIxja82qGO3f+ZhNrdXeEeyBRd+l+No+R3JdKiGjCBan0X8U
nss/PHhHEbHus5urqbvQZhgwHwCqPDcgOEhHWAOOUwTpTkuc+blRSpzb6d/Y6YkVbrMCTqkqpU4M
PumEpfl2LyPkkzyGDYYcaP6+bJ1bobMxb+tfhowu1O830sAGAWIkAjQV+1fOJQcDpOq+zS/QLWfH
nUC99uX3tQnxUx6jrjcfXdEBQ6S1pHewjCI0Pe5kUk1mDiFiTLU0yA5gLLu05+ZbIYHG4FuZOEpF
caCzCg5Gig/MQZkhtt1F1AHg3I7BTkX88kJ8QG16I/NcwTFVmmQT8STmZA050nb4oiaxgi0BMwj2
P5V3et0RrHxynv3+7LTrcL9Af0ztCeywFvuz8/uqhzwzcPwD3Yw8Omtkx5HM5VInGpVp4MRgNiQJ
SCtQJsoSf2fv8DYjb/SyUPJTngFhGFA3SpXn7KMusmq9gXlUVCEQpzhlwuw+sKbgHVVGU33EP/g5
j3QM1wOFPtHxzsr6/TPidLUFdpzDNoDLBj5mgcc7+zjOc6u6z4LDa9dHglLr3vPgeJOxtjrNTJ3g
Jvb4DpwOwXdtg7eNUoy/eIXVKorMO9z5XfAAN6BkekX80Q3EHgcc//4YxuFER1tn/inSxO23H4Ud
dIi1Iw75U1HPfpd120GtULaCZCeXMwjb2HqOl6rPaXyhV6DYoRj9pNEaBAVy2eYvw04r0CTkTDfy
Bbza73oK4MBxxXO1WC9Il6SPH2mlH0/4YW3akV+GgYKsiJEERv92cCG6cTwPcfARSztDWxOIO41f
wAL1OsWDW59nWklroYzwqaTM0OFSgZrQIcpqiAxHRgQVGtnESM2xTd/XNF3Hxn0sAgedKdZ8gmbR
0eUD6HqAZcZDZRTyywYG/AwL8TOpkGDL4U7Ep1a9gT0h2zFLkx2QT5Y7T36IxhXvmaqncweOAvoI
3CCV2WPV6z/vLrTHI9XhOuRN76UKE5KFrEpQ8UodgazcMZG019cgk6F1wHBgAIHeV6k9foLhQ9IA
KbKjWX13o1mp7BwTVDKrNCWFs+ZRk2zcB9AxBYNn2GzbZrFe7cJ5lmoDynY2RY14be3aCzZ1n+q4
JF5bqaniTfDdPmHnoiYWyuFwxF4/+ODOviM3dWs+8S4r0SozygagZJqluy2aaN4jMCxutMkTudvv
ox+WOjyCdaU3YXzuGQOqBt8Ek30j7AbtHGfwLn/ezxECJgVxC2frCNj78CrcuOze1CXGyYDZgSXM
omdLjs2hyFgEqzvfoNU4mzXd4hi9/Ih+EREOX8u+KMlMVUx3BaQc98Oly2VWlS2qnm59PJlcC82b
nphCr/Lfb8uwDyHQILRhWQUCSLscLsTDnS5KdIJsZbShILQRuQSROMzRJ4e/QmLsC4Xh8oEq6bjg
dvuFDRsmMzlcnzp/HN0/ApWPXzY+Hy65N3jendb6w+Fl5zxiwt0Hw5TDFqZT1oOIM8QP7n3UjHpt
OZaCX5IzZ5JPAtH65UyodZItJYVlkfroD7RHOKmHGBX9Kcto02dM8d6PyrvJ/EZO3Gj+AT0BLERd
0ifR8EK8hu1mWuC1OGpAjYm/xwW5b+klYCnBeGxHgVKFDISh/G9LRJTGUrrTzu+e4svokS4o3ocC
B/Sq1FC40JIgohfzXci9Ryi6k4XmEIM0JKzqXZxKnIzz4MsJ5HaDVvGt3OaD8cYzYeixIFa33DnN
n7RQQSZ2ny33RORM811NsFcHE0L2rICVY5clTVtPuBhmq/TYVSOEuN+xZF2JfQbyyPmWeC7HTncm
6PFwPhCg+IVxa7TpPMjHCAD4QX5Cu7qsnwiwBcbKMHeHEw5McZuHQKbeJdaOhrqncYe8tWYp8V5a
eEZkbO2STMYzmM05uS9KH++vN6J5RPcE8J4sk8Hb644xcRwSwyMLcU5RfKCaTVYlMaWwgw4MLIgJ
GR+vwxk+VOfC1oiYxDG7KgkFqEu/Ny66PC0ENzGzobHGYH0TkwJqnmCQKdwdEbeW9v0xCQEY8aMg
H4EfxIEEjzIvPYBWQK6Wl4Af6T/hGQ3nsNbZcfj6YfcTpmjNxdYxjnUs7FBlgxUP85ZHSeV1iaqm
B4YR7gKA4T2s72EmIPQubFsJCE794QbwzAj4cNsX4pJDq6zrADheHQ6+o2ncD9vKoKOndgd+lkDG
9WqF0OsgVXjWpmfOK9unBVzXPw4D5DxhmZB5DkYlRdBbbvjM+chQZ6udYwOHuFBlVaSDB2bZCNz2
rafXVr6KHW34Qq4aYiQhlwlGKSwqHVP+YG3J0RnO3i7tMQjf6Fpn9gN3UIt0ndyRywnd15gYIGPr
rp6qEauyEbtvEJSVJA6QmupdTgKotcQOCvqnwJOCNWuR6ghBzqE6JearHmCVKE9zCj7akJxhfzqQ
iWqcU79YThZA6mBnG59QjyV3RJ3XDcwbu5db1N3YnqA14rT40eZ+keDWjSwRHrqG4r2Fwc1h0wZt
Yhi7WpJsjX7pEIM0ARiCdyjDKB2jUKhcmfly5ggRM9NF0uU0I6o2/sVpnoDTsJ39Zu4+HmIij8s2
ZItxTCJ3ygdSj0Hxo3Zu2rrfE3B7lj4tF9gGrz5k+3JJPsvR9jG06TTggnmmzs2yBpGVE1EtOcgM
wsLEaVYQZoFd3w0mOd3CY6DQ3SlWAcla2E5Nzsa5ruAojJqLBG8jpoIuzOlrq4ZLWWhpVdkJ4kye
kLz6g9NlubeIUvVQNpMk5uAVBWw3YtI5V/hQ41x5opooLGURba5S64yYf6YmZmDV7N4qGSQ2EZYx
4hK0jmI3KoRy6xNV7OgrknRDRog06lalRh+wyYeLwlb2B7cuw7V1xg08HM80HXtvFgAlSlTjknb8
nnLSG+qgjyT6WTccq9f/CQs1dYRl62ZxSzh6S87/vsiPU/QtLklFneHPprdt/RDLXIsU1GddiRSd
hEmnaK1KpvVbW67+BU8RwOLic6vH0+pMY3ljDp7lgb4mfpraQEAF6wgX2SiOmLpPAykk47fKCZar
Qd/vwNZ5CWU3zysBj7h9sVttDWkHEZPzAObtKYNCejQOX9rUmdTu6KQ0g8Dku0FpfZ1ePkSqP5du
wiEsbYbngWBmmnGZPUArq/WGmB4oGH2BS4IMF6g8bGh/TT4UF7ZZT94zHjt8xblMydumWJ7aLDv2
IbhnT4WDORwATliaBV8sxJVNcdk7HQo0NvwRGT4lesK2ueS+63RvpsiEiplHywXxaa3UlGVYG6nT
FUdxxmYypZtoZFDbd7OY4QC2upANHK9xJM7RwiTGqqxdO/D5ua08KWSu0Y0ESofhqk58JhhmI9MY
IyphnyJ+3HI/gthSx5gUriipYmWr3NBtf3ZzNVcBurX+N4PxPVuw2izec3EsrPi7A7bEDaPYVHE7
Ewf5qJjNupKAAfKwrGRihjcuzt5lXfZ0lsZvq1L5dl2PtUIXNkf3I6/NsYHg/CIKtjB73cELrcYC
jgDVGrWBreNJBxfKsuiH3V8wNDV3RT/bdQRBQs4I5sQAW50p/nx7/c6RIEUe6400tpjal8EdBNq1
C7nBYjZ1fyzYOQ8TgFP3IwkSPWBZj690z0t2uS+wbq6O9gYEVAN6EIX30nzYFNl9Ohd5HwrMTViF
e04BeBpUxFXh8nBq2CZnJPs88iC5HGWjVTvCBK5pigeenETu9rTNmlUgO4O3WyjqUtlM2Nxazm3g
FEVBPf9sQdMcF2bWnOYRqos5k4ppcVwx6DlnPdKy+O060cBWhBKD8zF+21/BHknMxCrJ822Vph9t
3SjFher6T0ENfDD8MI0igjKxz2gHttONgtDNiKDr2HYpNngVJnY3JhLP4RTLdDcs56lf15v9var6
4vcZh3WbE6Mx2O4DFRiICPFzZG3OQJZrMxK680Ndq/pL52ZCOKxhsio0ElfS2MYyDTjGTDJlyW9U
uoZFuODrzEm1sZ5Hpu65EuQCT9WWzKN7r0Bgcpst9MRqpQqbdKqHEt1vWToWQN6wtzKHfTouA8Ru
/VbmnZI8C+bo0wP8jl0xLaCmCt1TX3JlIUBGatzIUyXEa104vtxOkif24GaxAWCSEbQ1CfbDoZdd
TuCnFCU/cnEwVuu2OTbw3WhzGgi0yWz6NXkiPmTErudz60nss+mvQ9V1xf4QtMIQjhEZ9VN9cbY9
HsYnHmP+J+Tdw1wK+zxNnJzOGL04bvi3h1SxjncHUNbsPvWI52ZFHV3czjQY6wRi7yZmPHGQuIum
oK9C1c5FfuxqlTPOrw9i7HVgffbONMs4fTIA5lmkLqPfkjU5GOaE8llJfwQX2Ojcqkb3tX7vmO0Z
0lP5hI6FnOqPRrgGpNnnHnM+VXHyy4/v8YuL67f4zyXKB4z7oAFNDzp/BDlbfTfX89ubv+gs8dTA
fXrFXk8swzK57L4uKhk2xtiyxkiS1Knv1fLCx/ll9aATLYvdEbUZAW0e3pxGlmlRu4Go8026E4Qv
9hLB+EBnWs4IWA9ZbQPg2kFmRrFjHXOlCRWdjIDEuCJ+7AHFpRk2818HLeO6rS7HG3C28KU+ao16
mJ6KiVrNCeGZ1aPR8xMw1dtlK7fctWLsXknxkRtdfDzpKV4JC9rZmxJm9zyCjDnrCbFNKsQ53M9n
qNSiv+NTGLje0/Xp0nZ5WvOjVLZmrPOSHDHLHZ09HnRqF6YwWD6pAKo3HM7BdHQNyUANm1061Z+a
v7cMp9XyxlvIPgw/osWOT14Zoa/VCiEvO5hnDi34HvydLXzyOh3tpnatxcK2oNNSZidWz4yfeaZT
0IVeXmfFB+zCnL62vV6O9aj1kMgR/NXiYT5QIwtVh7wBmPfdo6ocsTIM0mP24XhBURDAYS+7LE2V
FxM2f4AYILtq0PtBN8egjsRpAXAcnXI2G6WHNM22B2TjlEFYwi4E2PuTA1CPQScYzGtVnhfSTMJp
jUwegOCK7Cjj+JOlpz1iyv56oDdhYZ8Im6DarQ4CRRRP1GQDM+2Zhbhsx5EMdZD0FQmwlMYr7Itg
EPxXsIWnLkXLV1HXc3ZMSVtOy2kQJGjD1PHMlXe7DHJxTZcq+GJsBhFxgUTJ8ZItrBYU9SoFzkfV
qzvuhMkVHdhbUUe6THY2SK64oySt1H6WSUbVE/YCpSyAxdgiJV00wvJTFYJ2tlG/TjCl6aCFZlaz
v2bc8Qj95G2DPty2UfKB27eAVPmxIzSXET0Maobt8pQ4CYgv0iI1tX6r1nmcX7bHJr2uKX3Y8VYt
Z92u4j0AaZWQpzKlFsvILNdAwMQaMeVpP3h2ZoGiZiFufV3Tylf+MWZcwQ89TAF47qIyXPaXgEF/
RN8eZ3LjMOI5pjXAc6iifMsXBjwFzHftPAfQ6EcBywfE0TVX8j4Prt7IC72lDGEPTsEJD/ajXmFj
iHtK36Wu3SoejhmEMByVP9Tiw9al607fqCymVs5kJ1dyOKSyh0txrC/N0hdtHA4jKK8zQBxkDFOQ
GjIImH3W+X4oKUoul/ittLY997hiqI64gqEF2xFstuuuCiEuusR6jHWYGYOCdE/Uajis5xJsqIKQ
x6LzzlokOix1kLbqiLMp5odpAfMcVkm2Lx2oP38FQ3x1YLzGSQeKWHPnhNWIphYBakf6dG8siTnS
OJRO3wT0CGpsTzqJHseTT7pXQnTOoT1nxP3n31n2lUj+jqiZEn42qnixKjSYz8muxYCsbj1u/pvH
YJDvSFzZ2e1h/gdXfI48UhcWsGxva/MpXN7vf+yHPYKdP9F59OTepyKMy27Y2G3oaX+s6pr3wdTG
QtdXEB6Z2TgMDlieOzRco41M15hNhTGoYKOYpIal11qVRyHvrK5J4bZNwEHuuJ+YxBKVMkgXdbCf
Bk1AHFN0h4IRUCi+9NaN8JzvWEEv4uQVmqdcoTl6heb4FYJKs9LrqjhAfQdojdhQZnN7eo58m9Ko
68SqlxhjlajS9T7lG5AL0P9zbPjsywBGJJdRm7oZiwkXYDZYk1DlLifYN7+rVb1Q7Urnw/ulcpoH
kuWu7/fMPo08PEKxyel9GuSm1+iZKbWu8M5wAO1ppJe2o/eKMU4rC9aWflPCaQRbALtf32m+zgns
7MYV5vEx5sxo+XeepRj9oF2rQfzqhOHMTcdEkbNiXW17SsgnbfP7ulNmo3BfSDu670HVNEt13NDG
ruKgM1XtCeBHCBPB76l15QIDIe+BZ+7fInq2YWVJ3cVqNsXMdhrdNB0an8vT0vRVcbXXEZRy6fI7
KGb7cMBbPe6+Hi6jlWnQUyPikac4rDnI8RgX5VjHVLe99KHr7u3En//K9/ZuXASLOeYYB+PY7dEG
M7SQ7WRFcsz5aV4i0kdO+/ZE+4rrLq3gXVth1AirZ+mw71BesIrYecvl+3VL7mAYeyvEiOILbW7k
WtkFzNCOKLndgXTPWmia28sUBZASt9JyydNFlQI1YuWi9SPX76dlnTBvt8sfptlXGbRA/7HaSowI
yphqLamUhB9ZokZkq7HcrIcnXXXLfdtH+UDdPSg+OOOert2jz9DtLi3lwyVGqj7s9jfY7ucenXpy
DbpqhN5HpypXaR2DfpFgeh63zg4fG6rcIghtjjLC80p8pAk/noiVLfzG307h68b89vcqDb6zl0Lj
s32g2Vdcnh9bRJIaHflnhX0Wx+jO5lMEg0I9GKMCcyjVGPkWy6q0Xfn5Ht0JnJ626T3aPMepKTiC
EzyEVuwfEjbFn83fKLmeG1iOy3C/xReC/PqCYHtOhdQGTtOwqQnSY8qEl3hpYns69RBOt+8ocabC
jMSo/LgCDTO5VgJ3sVER0VxSC5LZpbod5rGnvmBkJe5xNaR7ShkOJ3bzWQokcnDCxqiXRD7NayVY
hhEL4Ph/FFVFMf2u1xsuOgo7cgWbu3KXhk9LlatvgJtLjP9v2kXstssMlNVGp4h2eg3dXkx5LmKL
jSEwhdqlAH3WXg89ocLOVcl9zR7meWL+aXo6RKFe3U5S7Ne+JyzQ69ZtfTO8Vy3YFnEp65Rdp6sm
+o6HCs0MNw5ihX2IvuuZ9Wu29fzM1a5i/pl93dB16Nzt3L2OLjMwxEtO9Pq3ds8E6mEb6v+OuTmI
rPap3XXntpH6v3prDIL9VfTWONxTo5P0+NU6mqcI0n3NM2z3BeczniBFqVLNOviuj+jkOs7JNdgt
wRF7ZvuA+IvnhiXByrdRixJZ+CK0QbEePN/XCI67lQ41OLZO0UnlfrWftr/ez3taOXFk+Nbg8CVg
mGfwseGyNe4WAEqDtc2V6H6XQDMjt5CQfD2MzXYeGar5vLK46Zb+Z2mxZIOk/5IDI+UAHYp/IAmA
6wlCMkH7kjjkY2lwX5A9veI6bDeXrVpUp1PYUd2IL7dO/wSpAq/dBOlyX41QYSoLQ9OrEa0IYPNu
Gsl/c6K+vgewpfQQCObIFBRP3U0BQCQJ9azGDkkqWZ1SoiL8ZC+SKzNKLaArGL9M2+CewHJPgmMz
28nmNg5Yo43A9SDOD8F4IAjeA6t72lHM/Jrw991NRifllzuRjU6QX9WJJLim45deM63o8/yGxN1O
mcci6YDHZ59/p9MQdDZaWOoFqLGXf9e6n6NFW+Y0BVVVx05oy0GFQqo2rOGvUqaReo5BVqSCgmzt
bxkmzY4sGFa40gtbVEEueDLM+VrfKd7BKQW8hcqzgnuprrrRRcMXoeA3YfEd5zColuflnO9Mady3
sxA/u1BKPdMau/i56/hYJ1Du5h2n1+ntVsWYJAJCgbykkqKf9hKieYH2mZXGY1H0GDXH/Sg9ohtL
HdHdF65uxNt7khRTdQ974C7Eaa9/6jGl7ABbWop9L7oBbW3cZF2EPvv92a+/P/s/UEsHCGqwRzg5
HAAAfaIAAFBLAwQUAAgACACvrI5EAAAAAAAAAAAAAAAAHQAQAEluc3BlY3RvckpTQmFja2VuZENv
bW1hbmRzLmpzVVgMACpNU1OKt0xT9QEUAO1aX2/bOBJ/76cg/LLtwpvcLu6pi3uQZTnRwpZ8kty0
KAosLTGJujKpIyknxuK++82Qkiw7dmK5uVsc0D5U5JCcfxz+OEPn8sc35EfiinIj87t7Td6678gv
f/v578Qpy4IRn6cXxCkKYkYVkUwxuWbZBazChRHLcqVlvqx0LjihPCOVYiTnRIlKpsxQljmnckNu
hVypIXnI9T0R0nxFpZHLSmT5bZ5S5DEkVDJSMrnKtWYZKaVY5xk09D3V8B8DPkUhHnJ+R1LBsxwX
KeSC61ZMv8f2zxd7qikibhudUpHBzEppMEdT0BW50qVY41DtCGQC/7jQecqGMCNXpAB+yGYr1pi3
qxMITQuar5hEH5FfnioCAjseaRQBO7MKlPvv6EKslTWnTKTVinFNm027hP0QMC7Jimomc1qorePN
hiHjrhlNACTXfkzicJLcOJFHoD2Pwg/+2BuT0SfizOdTIAYuxFAwJn4SEzcMksgfLZIwisnvvzsx
rPnhB+SEM5zgE/E+ziMvjkkYEX82n/rACnhHTpD4XjxEbtPF2A+uhgS4kCBMyNSf+QlMS8KhVck7
sJKEEzLzIvcaus7In/rJJyNy4icBipuAPIfMnSjx3cXUiZDTfBHNw9gjaNrYj92p48+88QXoAHKJ
98ELEhJfO9Np11LUe89Q5DXyQE9nBLOMJDB07Eeem6BF25YLrgP9pkMSzz3Xx4b30QNjnOjTEFib
wxoGsffPBcyDcTJ2Zs4VmPf2ecfgvriLyJuhzuEE+cSLUZz4ySLxyFUYjo3HYy/64Lte/CuZhrHx
2SL2hiAkcVA8cgGHwTC0R4vYR9chLz9IvChazBM/DN6R6/AGnBMR14HVY+PmMDA2w96E0Sfki84w
uzAkN9ce0MFtQW1eEjnojhgc6CbdmSAV/Jl0jCWBdzX1r7zA9XA0REY3fuy9MyEV+THO8a3wGwck
L9B8EyOgm212InhodpX4E+KMP/iovPUVzodQiP06cmBdvHCva+/jYbh88+bykoxD43hv7CeW8cSf
ehAwmsCZpZUWcL4A6IpiQ+4YZ5IixN1KsQKkVSVLtZC/xRdfleDIbbkx506lMi/1e/IbXdPYtF0h
2SVgRkE3l3ZUXbqAaleWp5Att4tyYxRzASFEwS7etCMjmv7BeHYh2R2caybrGeNclVSniAX/IEcn
j8GQnG/nXgCiZW/3pw/JoOY6ePfrccker1Zvm5kX9XfGlKJ3LDaQPRiSPz/Opu/J4HFVQAc90Xhl
8LXtwEjA9IOQfwCZ2xbQao7O3Adyajs/0TKHoRjUASlAV7YFNLj5UgpGAZHWTaBGoDEgI78Dsmza
yDyOkatSyI2llcz1BtnVTaCGCKxAMgA7+PeZjpiyNUPT/5wKVKEQKPyGSm5VerAtoHlSChTH8Av9
MVtWOCPD79nik03J9qWPc5ST5dK27QZB1+5RQpcF+lDjF/uSpqaPX3RcwSiuT/FrtoJKfSVFVZrd
aDo7Iy5cbbRULNuZ0lLRep41PFjdxC1VkLZgrFDTQG3ylXWcNg2gzKW4zY3GpW1tacB0S4bO815c
w826dePK+s/JMqPf50FNGHx59kgcZBKxklE4/BXXizJD7DAcUyScw0+ZPbBcnl3uitUK0oQtA8br
Xf38pfdaSCPOX2yipY5JdR4LxfRM8BymwsZ/vI48Y4t1JacrNjCx09AGGiMfSEsBiykH0i2kR6y/
XJpl9WSWBQDWOwI5EPwdeYHgbF+YuWLwHN9henkcnespr4zlDdsTwLxVciQZ/aMUOddOinnjIRzx
1rSoIJrR73UTTz1EtTnn+LVncVmfziU7AcdaFWJIpFv8uirEkhbA5s40gDQVqSEU+EVMhXQXARU+
BqWEqiQzOGVaSEM/IQW/p2BBq4oVGi6/wuxTz94+D3vVzalUdcxagg2eSqIJFhunuQkg2wGMrFYY
vAiLzQg0t/RcQaBqkBU3d+nA1kszWi6iKfbvqbL3MfbPUHpCAT+zRBjlje6Nvma4vet39TcX2U5n
1gNCWxWWbSRGDM7juvbelmw9iGGAgdqPeUmrZjswu5tIONYIT5AqUEjmsAV4TfsxhWIbyrT+EZLl
WUxXUL6bI2NjxPR72gTZ5f7xjevD2PWbHQHvnQaHLf9z7pCOjWdcIttwZHprmUID1rtwTBvSt8P/
YaGjzcKE/lZkAREeVKslk12xMJXdGZIRCyPN/ProNBOxNDd5zECUuB+AZe+JltXekgi4PfZdlxqQ
eE65ZxbbEXXgattf9KXrjv1zeeha7Ehpju2OHCol3bQ79g27tbtRDUK8rNX/xnYI1ooW0xfU6mm/
ZCuxZkdccIqCZ5wQqM10ziuWiI4xpzv+nDOpWRmuTQifhSOw3OdafMPysNJnrjZ3zplr7dVyNnpS
md77vM4Xdvaom4y8ELb/qpjcHISi/ZkpVSxmXOXHQfkZAMrVE9A7vm7nHKKXCv1aiHLH6tSqzXNO
d9uXp5O32dJh//XXblJxc5WP8VW8UDsK3tZjJ6qYtSxeA4sAi+cY7CH3HlPWYmrHI9rWDMdc0T/G
m0Ik5G6Tz+1IbLO8k0KdPZYQS2oPu47GuzAFQvN40euqznlaVBmrDcKs2Zn7vY9MJgLx1OUOz2aV
Zs2TXl+mkulK8tHmA3i2/+rmuXQu2TpnD69ymo/s1gNVyb0UD/xEIb2DGW8cSK6bMqar5Kqlvbzt
3VcB8/Kbp1jmqmdeBrrTXvl1oMt6UGu1fYY+rlI78Mr6tKTnnyts0bNVtDn4EyETprTPJ9Jcc91a
+6Q6assyty3DwB5tU0xj6dGTE8IqGG11qUvLfhygsAakdyVV933e/Tr+OaNq6xjwtGzDOIkqSPxW
z/06Uc945RipuZ7woNVoGEFaDLeC2cXmTcn2WtwGUnOTdi5OoC54xm4BkfFVq2ra+NKl698V2pNu
Sy18FmxqrpGFnw4QvfwCdkjnuFrqWm0Hc5lOThNURWFEFlhY4gtl/S45wF8/IIMqDYhiAyhj+2CH
r9A9VJlLUTKpNzWK/794cE/tv9iJ8YZr+mh+52kciDeZEWQuNF9KlkL1JuufYPJu37hR499XcPwF
YZpD2zyAVh3qT4UlG627rLqMTnj5bFRmjyw1fzdgaoZHACDW+fnCkE58Pmo4lu0bYpsEvpQQn5UM
9LmQu8kO5buLjtX9vYzuPI9//p5c7j5RmSA6mI1/z0lfCCtTzNQoG+6+udhoOanIuW3Lx7Sg8slL
zdGAhIzE/DXSwae770XKXxEQkCLWV17O1LnxALrtMHnl15cdXAIjgMthccdCqZ9LJAOdVZ1F9XLJ
6XnyQVkNUu8LPI7g50qteL+0vr2VzigJmrUHCoL/AFBLBwjFrhYK0gkAAJMqAABQSwMEFAAIAAgA
vKuTRAAAAAAAAAAAAAAAACEAEABJbnNwZWN0b3JKU0JhY2tlbmREaXNwYXRjaGVycy5jcHBVWAwA
hE1TU0NNU1P1ARQA7V1tc9s2Ev6uX4Fz52zZZeW2c5/kxDeyRNvsyJJOpJNmOh0fLcE2W4rU8cWO
LpP77bd4IQWSoEgl1ItT5kMskYsHu4vF7nIBQqcnDXSCuu584VmPTwFqdo/Rzz/+9A/Umc9tjDRn
0kId20b0ro887GPvGU9b0Io0HOOp5QeedR8Glusg05mi0MfIcpDvht4E0yv3lmN6C/TgejNfQS9W
8IRcj/51w4CgzNyp9WBNTIKhINPDaI69mRUEeIrmnvtsTeFD8GQG8B8GHNt2XyznEU1cZ2qRRj5B
Ie1mOGiTzz+1Uqz5yH2IeJq4U6AM/QDECUzglaCa9+4zucUVQUDgn+MG1gQrQGH5yAY8ArPsloqX
5Ak6ndimNcMe0RH6OcsIdChoJGIE5JyGwNxmeEFMSo40dSfhDDuBGQ3aKYyHC/c9NDMD7Fmm7S8V
TweMAItiRAZgXGs60oeXxvvOWEXweTQevtN6ag9dfECd0agPFwddsKFBD2mGjrrDgTHWLm6N4VhH
//53R4c2R0cEiVB0Bh+Q+utorOo6Go6RdjPqawAF2OPOwNBUXSFo/dueNrhSEKCgwdBAfe1GM4DM
GCqMJVXSEg0v0Y067l7D186F1teMD7TLS80YkO4uob8OGnXGhta97XfGBGl0Ox4NdRUR0Xqa3u13
tBu11wIeoF+kvlMHBtKvO/2+KCnhOyUowbpQgc/OBVDRnkDQnjZWuwaRaPmpC6oD/voK0kdqVyMf
1F9VEKYz/qAANJ2sw4Gu/usW6OA+6nVuOlcgXnO1Ysi4dG/H6g3heXhJcPTbC93QjFtDRVfDYY9q
XFfH77Suqp+h/lCnOrvVVQU6MTqke4ICCoPb8PniVteI6giWNjDU8fh2ZGjDwTG6Hr4H5YxRtwOt
e1TNwwGVGcZmOP5AcIky6Cgo6P21CtdBbQMunjHuEHXooMCuIVJCr6BPQxAWDdSrvnalDroquTsk
QO81XT2mJjXWdEKjsc7fd6DnWyI+tRHgjX0ULFiho4q0S9TpvdMI80xXhB5MQde45UA7/bZ7zbVP
JsNpo3F6inpDqni1pxkM+FLrq2AwAYI5a4aBC/MLHJ1tL9AjdrBnEhf34Lkz8LT+HE8C1/tFb/3h
uw5Bu1/QeedPPGsetNEv5rOp089d18On4DNsc3HK7vqnXfBqVwzT9WK01nzRaHxnORM7BKd3AO7i
wXpsPR0I14SeL8zJn9iZ9ix/bgYT8Ac+IQXaB6QOiPGC4olhwiAcC7BvrAjiNAa79FwnAKzuk+k4
2G49na+mf2faIfaTZC/Bw2mAPwanXR0cj/NI7jYcc4aBvQleqgx9ajTiL13wha6NM6Jcg5+zsddu
/68safMYfUKfl8g9fB8+PmKvDHQRbRo7/lAGvJA4jT4OnQDCQBnsAlKO3BiZvj/GD6PAe1OoznNU
SNJuTzwMk6GZL9oJuk9fUoqBOduQHcB8C44bnxokAELcDz2IfFN3HoAUTQe/FEM1Jf0z1OOzxucS
FthuF/exafmJ9O1lMz0kaR7NBewSArP2CprdUbhmQqmzuwz9D+cefoSsAXvLa5cwOcANWk6zo3c1
rW/BXdNuHnAJDo5ZhsN0+uxa0zLWM+Wfm7ZL8kJwsNpUIckRZEnMdxyS3PDJhasy0x3e/wF/z4HG
90GoSCQgK2PekCoFQNI84YzTtuAzm6xL9PYtOsCOeU+ko/fIP3ahGfF6wrtuPeKgSSyK0tgkmU4C
gagpJH5lfaiJjU3vhhH7AmDi+vqwPg5uXMcClYHef70eq1TSqdBBDsX6XZnTKR8fPB1AABT6SN8q
Bo+b5ljy3PWCEQy1O3Ft1fNcr3kYYeZP23b7hrI7cINLN3SAltlj8+Do4Bh9j2K7h89HrSP4n4sH
t47Qi+mTvB9yemh6sN6c4AYmmREpsz+MzJ0KxdhDmHw+i2aBdLLAw2BoB+htGi925ly33Fv8cM45
OqTY0TyRKtuH72MI88DucuBYfy0Pg3nCZXAUEdB6nmLf1BKxtFO9JOf8HmknydhOdZTntkpoSxJZ
EurpeJ65YJEkdi++qCVKkFZSnpLnpmfOfBCElDfgqf4tEnweI0pFX9biIHKHKcSTNCL0CqCpi8yh
pgAo3ycpwXjzxDWx9b3r2shy7pjDmIp6kAwLNLyABth0mlk2FZQUFEfBSEFOaNtzQpFhjrNBgk3y
3g/nNnYegyeIG+hTHC9E6+eWCiyzq+02qfKYQfNAd2cYmd4jLb3QehT39Ed/94/AfJyjAN1jwswE
MIBFJQ4OrdyQerahoKU5z6ZtTUdUn0pCtLS+lpNK4IZl2Oz758ZWHEXe7GQuQxHsaUfuI5OR1H6j
Yr9hOQEZZgeUq5XwGho8whR7DIb2yhxGNjGuPUXsKTITUXARbLQr9hCyR87cCpFQLsml+ep6SVF9
ap2CSS5W6YrJCjlL9LJxHRAN7GfRJBJhVdVkhXK3UTZZYefSukmwmOMpfkBUiGYZKU66wDgfs+OV
QVUwp3R8PUt0fm36Tzfm/A1TgoKEHs5R1DcQsFY9dTRWux1D7d311EttoN7pRsfQunf9YbfTbwr0
CpqKX2JHSAKHcKdl+epsHiySUcMnC3YTLpMfeOEkQKy4YJC0RqAk/xjZ5MkEOyY187PEXUEg9MT+
Lgk+Q+PZDK76v/0ObjWJ+ymuZSnosMzwMGr0WUnDRJWskjicXAIEmd8FuMM/5y4kAH5nEljPpVFl
bYu6uFjcevYXdUBbFsF/EbIE1MMz9xmvj5tuJ4EG4wosJ8SG23fZun1Z8GxLmToCPB8+g1srqwlO
nwMFeZ67DhShz+MqLD88jFwCNDdDv7SBUmLp6PqQGJYfU0IttTzTmzxpTpcu161he4lmEmDIr9li
pU53XZQFTjWTA1+GzoSYTo/s37D9NbBTLeVTcURUPnTUjxM8p3sr1piRmbaSLjBkzCFkb0OHuOFL
SJzLO9NsU7kMZDrY5oJn4msIkGwogn9eRgjf+i++CxB7toEQ8d64vCNbLT7c9dXBlXHdjAKIkOjD
Yw1q8oYWtPnxDP684Rhn6PvvreOEHGI8hIw9hvzN+r1FApqCxCs8iB0nHiRWhfF2myZRZPnYIg8P
YncPljPlywxCgCZkSTrQXjJEb3XlIE7+yi0dRDxKHriaPAVrnVjweERMDB/nr5esk2H+lRchinOZ
fdLLFlch1kzH6jrZpurrJkt3KyyvM8RXUiyL7LAlfYCoK2aJ2np2WgpVMzbse+E06CNW7TI2VFq3
AXUQzu6pBJWU15eIpbwGdV2hZ9/RLIUmRsDJg2n7vMLBZwHwClTFTPKcqphPQCMMHib7LmZ0jB/x
x3LcUtJqWaaQEd9pVgqYh+vhzGFjkysAtwuRtirLEDGpCDkMFYjhsuewXAnSMzZTJDwnAnKUYtn4
XC4WjyNSybI8vr64yapiddQUy83GYo4vQsueEgkitbXbS6VpU+SGwd29cCHPKhNY1Ifn3l32FBXZ
zs9pPzb/6q+K7yyCCtF96aKVtOv9Jzrknra99N0yrxcTMicnUOe5GdYi4ViEVpJZzRpEE1WgPUyr
WEkqQ9yy+Tcqdks2odj4U2VxF5yc0GIPZFane00YYwxFN76nkGLOIhiRVcGAd5po1TlW1TlWuUgU
2UKFoSiCLJ+B1UF1O0G1jqfbiaeSiEmB4ME2NO3o2qqomQiYbvQyawVhKsnC3sWqJHsRVobpHUat
9HpmHbiqDlzLp1jRhip8kk2b62sqLmaW4WuXvnShmbkpeNGUP9qJ78huV6i9x18z7d0jjyLZfVP7
FOGNoeycleRmO1us4HuV9mntN+Zpx4u/fO/VvqmG8rR71QzDUqnrVo0mDHasGLo9bp/UwhjarVLY
br990grnaNebSxKbFutMbnPPgexUmkqfASPIUtnakpP/hNhbVMgGxStfKJ2AverY8S2yQSK3XBpt
yElQV7kvJwHMFlNzGCuQx/JXL2hHknC6KmXgkJT7LBuvInNP77au0/avW+ikB15ZE3LNb7d1qt0b
ogO+3smYyJRtk2FAeDiIfIwSew4lfwbzBcrElBXKuZKZwlpEU0NczYx5XVXfLVuSZbejUmwSd9sx
N7Wfv465327M3SM/m375pPazkdaJR/AF1aR8Y3q6Sn3jYRpkXaclXZLyEwOmZDjdoQdLvTVUO7HN
ObEHrupK3dgS9BU6svTLbrUvK7+Yn9IdSwqn7EvW86WnueD8lhakiBhVZGvTaFylyDvY4pV5hbH2
dxtM2gIQt8qMjeC9Ni8nfee29nOJnUbZWSnmZmTUd+UyJO8k1x5jcx5jEim50hRJQF2zwIo/zsGO
/FJL86XZWYKusSeVDsyV54bzEu/bCNQV8i2gsj2oUp6KaqzsAPQue729D111RlpxxVXWqtL6q6wD
Vo0tYLhA3qk7cLP+reNMb8IA8xPNCsUvA1KlNsr0R5WzpnQFumLB52JBM8lCpSSoq5Q+AUzFzGOs
QJ7oZxBGHn628EuhRCn6KmVKQVOp8tl7FYmV7KSROq8qen7kv4EAH/DMBeVx9PSCQl7z4TwYhsE8
DN4Qo2XtXkzfePLcl/QWclnuJOR1QlRWkrFWyQt3fHu5EN3ENYmiyMJXKKShRMBZ12Mz2FIuWugl
19cxuKRzE9qt8CmsZdqJSFdieJ0zHrn1d96vsTYTtSbgiV5blt+BAX908FSsKaR6ipxcsq8YJOpu
ifoYcRdNwN29UZY8cKh+ctjIYR+c5RJ58SyORFXlxByRxtMsH68ijmYP1KqjaKI6kZrEUQiTmB3z
wJGVxZ634uKF7LTSfK0LR+6uGpqvPHM3v90XHLqbD1b61N3VVljcz+b1QLSwnwfvxjytOnl3lYKj
Y+Q2efTuKoN/Lb9ZtCEvW3C03nJ4v/BneVb1/Vc+E69gSuybYjZ6KJ5sWuf9/J4QofJIvjo+Ffz0
3zrRKQ+qdGzKF7K4j03Lv79RiUuwKiblK3YbESnfvNc5Cz5fhvoo+C0fBQ9Pf6mjrPMHh9KuOA65
JExELjuWnJTL+E6NoVMSL9lIfuA0ZBhz7AUW9kuCJtpIT++mEYGZXknMRJsiTLYE9QXArGYoQQ/L
KhQoZaOc/dGAFWO8zm8GrHRpaZz6EOv9OsQ6Clm7PsO6wG3VZckNboFiJ/1XuAcq3kP8CjZBccNr
sUhalxVzl9XiVTl9AUP/kfZOCNpt1QlnX7A6x1hn63N87qy3PEhZGJvOI+aLg+Rj6gmSeQ9xqxY1
Tr64lFhpmkXDEWOtv+Qk3Vm/XHPKEwlm1y86USNZhQtMhy8OCUtUkjWqyN+UWqGSMiasDIiAmcUp
sVemmLxupEtupEW84sb1KtjxRgodxflrHVI2F1LqPWn1nrR6T9q29qSRA3fwx0CbFp8SzgmrOyKc
A/LzwbN81Nvp6u10VaXocaGqztL3cAtd4oe+/1L75KT+Nzo+PfK49b66b25fXdmadv2ksbknDeZA
Kn0VJ4Jc8z2ch/jt1YkNfZQ7K3PtV6gF9PJPQXG8/ZLz4rnlkV+ZisN2oVy0UZnfK4sgaXoi47N+
TqjfXamT7e0n26m13Drl3qOUO5VeCIl3FLuUnIikyGMBSx+XllK/alKnxBWnxIkdGXVG/O1mxKzu
/uIsR7swMCeoqwzLCWBWfM9h7DWE5ORGqDoif93ZlXG85jpd9DA77sz1JKdXVtOV5oBhOqad26WV
JIBxToX+pBuVRv7cucdLbonJlhMP5bxsNS5Kul9n1TnbPOpRKtfuAmNi918dGL/dwLg/gSS5+7UO
JOI5+eJklLjXjb6ds84W4dpTbNpTbHgfyGv1F1yA2mnInQabnBnPQS/vynmEpZagtvZbJKGzjVcd
i95u2CeVbO8F0MKXNfZJLRt9/fMzOj2lr2MByAQveWo0vgMscL5wWx10LvpqUxvoI7VrDMfHjf8D
UEsHCJwVF31SEQAAsbEAAFBLAwQUAAgACABMspFEAAAAAAAAAAAAAAAAHwAQAEluc3BlY3RvckpT
QmFja2VuZERpc3BhdGNoZXJzLmhVWAwAKk1TU5+1UFP1ARQA7VpRc6M4En73r9DtVM0mKVe8u3VP
zlyqMCYJUzb4ACeTpywG2dEuIE4IJ66rvd9+LQE2NmYgCZmbupo8JBi1vu7+utVqKR6c9dAZUmm8
YWT1yNGJeop+++XXvyMljgOM9Mg7R0oQIDmaIIYTzNbYP4dZYqKFfZJwRhYpJzRCbuSjNMGIRCih
KfOwfLMgkcs2aElZmPTRE+GPiDL5l6ZcoITUJ0viuQKjj1yGUYxZSDjHPooZXRMfHvijy+EXBpwg
oE8kWiGPRj4RkxKBIuaFmA/F86/nB6YliC4Lmzzqg2SacHCHu2CrQHUXdC2GciIECPxElBMP90GC
JCgAPAGzUyvd27cJlHqBS0LMBEfot6ohoLDESGEI+OmnYNz72IIyL3Mkn3ppiCPuFkEbQDwojDMU
uhwz4gbJjngZMAFcdqNIAOdGt5FtXjl3iqUheJ5Z5q0+1sZodI+U2WwCLw0VcsgYI92xkWoajqWP
5o5p2ej33xUb5vz8s0ASEopxj7QvM0uzbWRaSJ/OJjpAAbalGI6u2X2BNpmPdeO6jwAFGaaDJvpU
d0DMMfuZSdqRmci8QlPNUm/gozLSJ7pzL1Ve6Y4h1F2BPgXNFMvR1flEsQTSbG7NTFtDwrWxbqsT
RZ9q43OwAfQi7VYzHGTfKJNJ2VNh94GjAmukgZ3KCKSkJnB0rFua6giPdk8qUAf2TfrInmmqLh60
Lxo4o1j3fYCWi9U0bO2fc5CDcTRWpso1uHfydWJEXNS5pU2FzeaVwLHnI9vRnbmjoWvTHEvGbc26
1VXNvkAT05aczW2tD0ocRagXKEAYDMPzaG7rgjqBpRuOZlnzmaObxim6Me+AHAupCsweS5pNQ/oM
sTGte4EryJBR6KO7Gw3eA21G7p5jKYIOGwhUnbIkaAU+nZKzyNCuJ/q1ZqiaGDUF0J1ua6cypSzd
FjJ6pvxOAc1z4b7MEbAteyxlcF9GFelXSBnf6sL4jCshD6lg63nmwDx7rt7k7IvFMOj1BgM0NiXx
2lh3MuArfaJBwnAEa9ZNOYX1BYUuCDZohSPMXFHiloyGUGmTGHucss/2+R8JjQTaYiPXXeIxEvMh
+uyuXVs+q5ThAdSMwN0MstFkoEJVu84wKduincebXu8DWUY+XpZ1jFzvTxz5Y5LELvdg5ScPj70P
IEQi3CgnAJFmiGyGSIhMhaiciteRF6RQXH8qITibGI9SEvgw9/zxp53QJ1IIDbbiFXXnj5elGU98
OZi5SWLh5YwfGeP4mQ/unCsb6lS0EuO9yA0xgHklr9C/ez0OVglKMkmkMUZZ9nzR60HRTBL02X6A
WgTp9jCz9FsFlskWQYV6SwNcsfYGammAhYI4XQTEg70IftaE8dQN0JoSH+HIXQT4pKTw7BT9A/1y
URWFetta1guwy6Y4SdwVTlrNSDCf0oiANyD15cbSpGH+3tw+WlAawObxkJnt14G5vp+Tg30DEvEA
hURcgEQwohcYsL9wKb9P0n/aknxyetH7q02wxniRrla4mlv/u2gB9yOG3T9jCswkisfJ+pCygnhX
DrYCGm3mLDjOfADL2kjDBWZ90TJA75BLiMGUBcffWniFn4shQJLvPRqkYbQPlq3HT1vKh8Pto7n4
A/5eyqk0lp1KH5UES+VhOCxCNRzuvNL9MwR94sOi9KZ/ROMekMKYu6kd3amZ0KzrvLz8KJUE+eek
FeEHXLfl4qOMCC363e+UwiMkZRxBRgIdxcs6ohgOoYlt4Cr7KPko21Zb5GjESZRihxbau4hAbag5
js01FJpWKxqE9YjT1sJmylvJxi4cqFpJwtkMuvqW9cdl3qMeQYnluDk2WYshcqYy9K8Us03xXtSs
rEa4CbZxlBBRuyqjJMkLy5sWsex1iCfeJcOhLT2aisJerGXBR8DrKFhhnvVStjwUtqegKJFCRVJC
+IqiqzTyRKaNxXEzSJp0LXPxFy3SAx05B3726SvVbCbyy4y0Zw9npaWRCTg21jqL126QwrgZqdDk
XjE3bGTWKwSP5hd+jiGOSalQlrYoKlfzNaNpXE2yrC9UaRjCNj+B/U+Z6RUpnxq0SoES+dOU47wB
qUximKcsGm1uwdfqaNHXzxheE/zUGEIrhaIWYniAignMFRVql8L1xd6MOdSROOWfhHrYIWB7eBAT
n9zEeWT0qb64YS5qGxwg8qbxK2GSboWZWNvmranpat291R8Nvln71uhso42tvc2T4TW+xi5LmsuY
LFX1CbVNRnsTcfdZogmB4VCL0vDshUmZKS6lZZ5E7deENMByoxUWKyJHYeJzUwVqYuI7Kiy7zjoS
B9hdHfy/qjiyzueblHm8cSuFJ4vA0S1hud3pYDmxtk20bCayHtplK3n9mfzYDkpNyozRGDNOcGMH
cBibra+gYIfyxvZuy0OOuBnjrNui7PKAjm70QPeOWeQGNfpyJsm+FPhZ344HGNrgLIBtKW0FJutS
O0QpWguaRq22xm+0izbsfa330Lp7I7QkEDg0RNkWio5VCTsV//aS/xsJqgD7u69ohAFmdx/5qdGE
S+TBMRc2p2O6K9Jn/dY3jmenx4MhpU4CKv5ZBvW3Wk9DzB8pvD3mRfXcjLZdIJztGSM+FnEla3Ap
j2opX45orYf+uIW+2AEV2fR2pP3r0bfj1V2evh25cpP6asi9wDQm0rulZGt5FD6A4RF/67XuN1zn
tTa8fqE3HZx+rPTGlVm9Wu8YNrto7xi0A7zKnWsHhbN65dqB38XNajdQ8t61I6vSLkjL7my7iKe8
0e0i0fbve9+OeHh92gni4T1pJyusesH5dthj15ydGHtwJ9fx3l+7t7zfNtV+wgu3/3ozv+H+X2/E
6xuAxsvEHx3AC1K+ns13jMwLZrww6+vOyN8w5+tMeH3GNxz8v6t8z27Zu9tBumjR9i9WO9mJS5eB
XbQx5ZuwjvGyy7AOQNMuqPvey2HdUnu3Rdtafr8Q/oUGA3Tkq3u93geYTZZi+NgXELeDf8u+yujv
HDv+XcbT3n8BUEsHCPiPURnNCAAAAi8AAFBLAwQUAAgACADzU45EAAAAAAAAAAAAAAAAEQAQAElu
c3BlY3RvcldlYi5qc29uVVgMAPI1VFN6G0xT9QEUAO19a3PcyJHg9/kVCMVdjOaO4tje3YuLibFj
JVKyuBYlmuQ89jzzAQ1Ud9cSDbRRaFLtDf/3q8ysF16NKgBNcuxxOGJENFCVlZmVlZmVj/9+kRab
mOfixTd/+eK/v4jk/9STF99EL15vtxlP4ooX+VmcrNmLE3qj2m+Z/CL6C/4J//tv8y98gaddn18z
UezKRA9j3obh4P1i8V8sqZq/pkwkJd/CKPDSOatinrE0iu3oUQLDR6UaP+L5sig3+NNpc7htWWxZ
WfHGAsxCohd5vEFwdmX24sRCJ6qS5yt40oBILyuSH5y+iP5+cmhQwf/G3FF5XrEVKw8NC58Mjovj
BUELb8KwtVF/Nn8503kR91hEnYeWmzjnSyaq764/eGHpUr0fyQ+CaZrvNotOkr5urc6LtknJ8Jtb
vhk7jx4iquQYgxPutmlcsQnT0QB+k+ldK9y54rKM9/CAV2wD1JUf/I+SLQ+KFTmRB2xmvgnM/66U
wP/Aq7Xmk0ncj6NFPGV5xZecldGraOPwX7SNeTmB95cw/EUK2NQo/Miqh6K8O31nfxqAaZCMx91h
VVzthJ/c7Nhk+PUhcuO/flanW1Js5GLSgwecBmzFKsSUcJlBNGlVsmpX5r6E8t4IbS7s3AEwQlQs
o2WDpCJ6kN9aVpPHl4iksI2YxJp6OylyKZlzScIojtIi2W3k11EsRJFwucNTGkIU8tWW6G4j/PA2
uCYsRfHTAewhADSxWB4vstap11jSW3xJdBxrpGRFeQFLo19E0PyS8zTZ3xUlskJLRMTwtJKIO4qI
uLACSxKrkotqkcAQ4GFdCGYpx4UUw1IysHuWDrKJ5+6ZIoCQiwywki6wmhW/ZzmtaSwrb4LmCKN+
8xj8xXBBh453BHaIW/ppvwbRqSZn7D4G0dHeunEVIzEr3MeWoDMwTDl12p4zTWI2r7xOtCbebvDw
/A4VuvQXyFukiqaOEvDLUGMUxjtWNKzODIqPnFAPtGWTScvFx+LhU57xvGYuLIoiY3E+qHV98fcv
Ttquh7ObG+1taCDmdi3FhTo+2eetpLqI5Nty68Tp1w+l1JMi0IzVkRq9zjL8mTRxcRJl/A5wuJfn
8poxeFLu5L9PIqnzqecn0Tq+l8yUu4rDt0mRsj/w9Nuv8R/RTsiHEgaxWwj21x3woJ03Kki+y/2M
H9Psp9Fb0FToDzTA5URSO4jEliWgB7QmkXy3S6RoYAReRUxeMlAcImCeMlnH+YqBmhEtJFWZFAVq
qbBnUr5cshJgu+NSpT11USHZKZffRFkRpxLEnYD9BEATEPKI+V/yTPko//3yKw1PEmdS53r5sOZy
HXGSsK0UVdH5p0sJUAq62leAcQlWLvFwz7K9hDtKMg4QwHQpF0lxL/ezHAfnYp+5qGBihyKko9Ug
kVS8gRdu8AULj+TQdZES6Qwdsj2uSRHgrztestQZH8UHiMOuJdtZ/nLLPlc/N6cSp4FOMDvgRWuP
NaSLt/kpiYjD9o/YbXf624yiBrWV2TeN5y19N8kKUSdniBFZlCnP48xPQt6u1T6O1GfIN0qxsvOH
HsUoX9QWNaDDJoWtQ/PJOeJol3PJbdFDvPfS3Jrc8KnkKynqDnNE41eW7zZAuRdS9iBG4L+v4pUE
Ek3EHORIVeBPJVvtsrh8MbDaG0snmPub6Ccc9KcXqGrAP+uy8idnTucletB81QCk3nT3OHqk5L5c
7JFe5tXoJT9lp0rSrYss1Vv0pxf3PI7cIVFufwUTqcWqadRf7nQBJJJkvt79urcYovcRtxZON35n
XQm2S4uL9DKupJLUcsHMRbytmsYPjQSUlhpWm30pmD5zYE9HGnh91kg00K/XLE9ZiZxxJtWKSpoG
4nStXvvq9MWQMqtw4edPArZH9HX6kRRiQavQ5DKODdA+qgK5Y+ssWcIXwh6GC5IiyySVQOWF/Sz1
I8n2WXNsb9a4yNcM9MIU8fg2r8r9sdiDoxqM87hbWx/Y8KzA9cqN+E0klTvWvffiPJFGhVw7qFVf
iojGpZWfRHwpX5Cqlbsh5R+4Svgykkohzz1sHaBoqgTeMdkEZ9KCvLY2jzU8Bxayaz4S4wDQDY65
Vo/6lqgwh7j1o7VEwQ3L8PgcpHZTuPXSGk8kNaqEKeWSuho2gFNyr/75g9T1zR/SjPjNq0Usraiv
QqmM81qHiD0/QjQxB6ajnfShyFZqXxeuDeE0bjMJ+PC1sLRh/K6FgaMMGeGz4Ys7MDxrCgzeq13r
x4OCrj4nDqcXt4NjL9sDb5lb/Zcg9u5jnsFxE8wzGn+IN+SdMJ0Q5ffrSuJvsasCb7v9OQb/60Mv
MLljDU0En0Uv2enqVCrDDzyt1j+9GNQOxKFTqkPokIiWej44OazmLukDGrm09qMaUCMOf30ImBt/
tb1hXPrNGT2YeKhav2dxCqras1Ltb2tadU2pP0zCUV7VTw+Sgq3LtUFuwU3o6xZ1zEqzf9FDOmSj
kFHchblP5rf+uej7oVkqXmV+u8y1juGjoZFTLkA41awD7Qft2MMsLyp5WD6smdxIZcO4glsRPd7Y
vUQDbSC6xg2jGbd13hTp0fTmx944ZYjCq3WxzmN5HKP3n8uDp2bXjMaj2Twjp7CNHjTcd3JMJbnO
H46zxtOysuqzY47HCwHuK+Pyanqz0MGMfi7lqa87lMkRNShBaxqnw+ON5we1JFJchu6ZDsvqQTxd
xWVj/S5vRy9dJ5vn2vHrD40ron7HCbxpfE/q7q+sIUJUcVmBkVjGScVKY3EoQI9y0rTwIm0bvyMn
RNd6be+cSOlJWSIxrWT3kJ3HUh4HCLZLfB8l2yBb4LukP1OMDjECWvg8vy+ye9DXEYLorztpyANj
ROjOwNfB1YW6o6i/RLSEb83FD8+ljrIp5ExFLiFZFfBrsase4jLtuPr0dAqUbCv5Q5Iw9BysWTbH
OgElDvw3yA2yPzqF5PZA28nn+rmszopst8lDJknwCzONPGPyJNsJqfB/NTgly1P/Nb2VQra2Io/R
Q5YD47cWwz67iwnyZsszXI2ivOOxI378eWtdlNVaHjBHdUx6G5YGHDQqBwl8H2e70IHxmwnRt3I/
X9HC9xdSrX1ylGlg/DCWFflqjfGlXVK6LYTD3EQf1OjR1gVqSqyzxPZZsdnutP9cr/bJ0a6hUqfk
NogK/nzbN80MXKw0gCOaVC1t+cY+9VaX29dXjr5snVCkFg2fCYkQV3YV/qqKYbwuvgc4LW5qtwrD
56IrgQNgakjuTrA08yC3ULQyhL6YKeHRLk/DAJYYvJ1oQLpKJbp7O9yrx/X+tsGoeYBZ13V3IIzo
CR2JJWB+tlwqz6bxqjb2f7Qsi42ElwtP0q0ZX63HUq4JEw3mBdQ4V+xohdndrk99TgDWjnU41MY2
J8LBwbcllzZjtZ/AA2ZGPZbcGJttBoLvpxeSHWCXoIQe3iL4XcJrHOl4LAfB+cHxXRqwJOPpcS1k
FNCwjDPBTJiDP5wTHGaAseVOCl0DH8q7WETWmRMkfrdxKVj66W5unOGll6iKwtytLMriAfxRDSTC
sCNw2A4/tlg0oWUxChcKJ7P/dh3b5Mv4OZhZaXqIMKNxiVGbSLDyzaUJRZMd+g6iSkueSiUFkBdH
Qi76FazcUYVxRC0VI4jMLaMih7H1+rrH1r9qsoAnEL7CceQnijypQ4yuYaQ0lac+a1FXHn/EDnGu
f0IRTB435Lbh8K7J5zEeLlLDKx2gD53ItaN72t2sPXAs9e+52MWZRP2G5QJDqjHIl3BSLJciOKqP
XF1HOo28L9ovjedr73fNrnPmD+5a9KfpgBHJjZLP9F8Zz++k6Qb6E+1qjFDCP3/u0Mo0gim2xAIL
+9bMQtvEik/ccf9Ob4OnDbergaLr7Tz6d3rBvO/A2Tm8ml7+Zk0O9LnQh3Wv7IeLj3+KqnhFcsOs
OGjgvBZ1pUe+uf3PD29h6KN74cHVruhgslyczJcGfSLna0/QDnjmBoFDB70SDD7QvYSEhZQt5Wep
yWJSElQo0hBUo6RHFyKKMiTAi61guGNdXOHon+QRJViPmDBbubBvLUkvY5utVBc7Nust4lB9UONf
yTdx9BFPv3dZ8TDIEBCKV/cVnH+6PP1onnZMnBQlhH4UOUZoOykgU6KCjcEh0Jm6Qut0HVfRUq5C
kGFTX5g3hfEj+OZYRNbb4GM4Ls0OclB4mF6+xo9FVVCseJtT+8MY5uNCdePs639x0NqZ+J7bVHLA
q7CcBKlTFK4cAB2xo3+YLEmUIcjUqK0U9TZws+yp7q3zhTNkUP2DoCx4rdjS7bo+BCh9dSsfnkZn
mCkmwD22y1JMcpN4kVuDSFcfAFLnFpDvRkCk0n6qeKZvgXdZRaenRIRaEengCeOYZuwhOBphPUNF
bOgtj3UG5/ljnDYFfqiUvPHpmgdF/ZC3AG7+UkbpCpPN3yJS49WiskX0UuoJsaQfDeDhw6BRTJj/
jIBxPeYB2A7uS+/iBXOE4g+usDMiX+4K4IkTdbpmmZvVUcuhGvKLIBXfZmyDyeaea2gm7vitpJZZ
o/Jc1FZT6/Fgmw5+OQRpVx6JH7SvKZsBBFKbo5S3VjLbBtVYiOcFNWBL0Sa7rU6tAR2rKpkUb0VR
BavJtsSAVJOFA4CNsVXah1IT0DwihxPJDOVyChVfFzYn5ujSa469OEcOz4VjOZoTwNqdGtmDPGp0
KTENHhO4/krbYIy2qQKRYsfp2ASpgDypLj1+/7vfRHTT8Pvf/uY3/5Miy8dwno1vNZagsrBfss/k
Ls722qi03jWrT+IZvtFvnqj87VrUufjq6Pxcuw3/JTB04gIccOHafe1/8JrTh+HHsk7SnuSYZK6X
HBhZ0muN6QYht9ytVIUufJ8bFwe4bDGGTt8sGy9s8+geg3YdOd6a5S4vHvLgBGsHu3aZ47eOV9D4
PFtIOOD2kIvC4w+Fa5so7fb+IH51F2S4dhzlnEvzWuEgrynHkpKCEn4B5PT21jcSDLTDfrQI25Wo
08E4cLuhOELVdmGmTFhcS7IPIId4dHKMubUNzdyrCHs5e2gS4wR+KNkC1Ib7OOOS17H0nxRRprIM
MbqNfVJs/iXdKJlfKY/A/qic2fq6joupNJmBHL3hXEehQ4hs9IxtvzXOGXuPGC8rdRmO9/KbIjUl
EcOTPB1WUXflckx9V66FoJOy6J8I7pBT60JPSFF9RXuRp+xz1yXOWI4Y9Atjia0uF8tz46Z6uMeR
2SpuRBm0mexEGinq4lqNUaOhPnyji6X62SDbhHp0xH+cuDMrFyl5GtVUKjQCBpJHzUlUgMB84AJL
7jAIRzjtWBIFAkhrrGTbLE6UU9NMpNRrSbJvKOppjOpQFatVfzjxL2QfGdfwL2k/AOLlG8GXCkiw
BitM5PZbU3xNYVJzoKF/lHakydqgIropWDAbpEMFpEq2kXyfRsa71gpa+crZa+rj6Pe/j9wItZP6
ZCuQA9IGjRZxckd3SLzSKWBSncOtUq9oUsvdCjtlQCHRuYHjd8ehnMmhKAEz+ZE0B/+iJ3XOxmQu
y9gmJ3CKjL/EbxV311INg+gWp2lXBqw/vdAk+Hz4EvmXRTd5aMqDRNd7ozItgREe+C1cX8IBjOEQ
RCJzU0pHnjJp1fKdYlqqwqbcovWidG7uOO3aAosjmPt4FX+jiKJcWIHm8W5LYX82Jpq365P5uvIm
5k5gvlRnHruG0ko77fwZXccd8hzMsE6ChslJCkCk1LESde+IVWuP5HDtCYtUvnJOoUtU/VQKfwSq
XvUsroad+vhZSos5y2IhhknpFbC7lFyLI61B44N/3HOBF1w/d5FcXdRp2BOCxK5Lnre5crrqiC6F
iC9HJha8zcWu1HEYdtui//aBS3bBsrvWRUWQvdKQAUAMisfCoauSkoR1C9ejakO3qQkPOjOVw8bz
2IyhQHWOW7GqERkSWXjnuozONSq8JYyNrToY7tKID7SLEM1QwilONndYo/3ZgS1bfOEMHFAhHS9p
/wyhhteokZxhBeZWudAGhO946bJwHF2aYXS4CpVyFpRWzz7Hmy3q0ajnxCZa/IHnqSS7iX6RH/O/
SSvuK9SltYcRrslwr6rK4UUuONxEREUuD+N7zh5ALr9K2RYqTOaViqBcyoMWtmiYrmo8gj2oeFwf
cAfiUxfx9RI7hPQ0iini0MYNMV232lT1DkKK2USkvEzAiRnJRchH92G30jUhfMwyay1kDPFFyxmH
i2syyp6FYB0+piXAH33jLNutCrQBehQqqMG/QTGQF270oL5ToJBHcHGrEMMgktE3H+J9sasmdwgY
xcHOgqm3Q4bARBt5kKCeoHbuTFiVOk3vBMF4U5Hek8XhVMQ1Dlwda0r4rIGqE5QnIZXq0toN0D8+
GWU17Ktob1X2NRDlQmKTpY4Oh3tAabj/gOKmM6zbVRXVEaCFgbZgHmJCNOHLNyB7xPK19urwAs1Z
k0/Dce7S6j6bCwiNhKXUmIsHd1P0gDaPWHE0NTMTOi7iGomCfQu7/FfOD+N8F2OPx/vurM+LxcgA
6m7AI1cZ0IAHwrB6GvBgyxv4/SOiRdh8BA0kmPMbXpaShro1DjgIsDVO3myJA1cG5iLMNspRvWyw
KY+yk+M05RQWWSspqzrzfMSQZ6jXlEGucWVTQv4jvo9vcMEanIcy3m4h5ZdVyWl0UakEd2lAQasu
BFbZCiq9gBBCJiVZXPrq2UlEgTY+FEelJqYxTqM3cXInrbLojrGtfLeEywbFS87nD5LKEZZhqX2O
Gh+ZOvLHVEVdSmYhtqweeML0GugLPHshkUvwBc84XhDp+uk1zMULUI/8wDj9dvuHj0WlEjcUtbDm
rKYYeVrV9hTk/yEHRSO1zMgT826Mq+KlVBY4polIaE6//Xr7h8DePHoX139rpUMe3JTfUbOKdhxi
SPahovhx4TGbQ8ox6AmVMBAPyBRAI1B7IeEGVV8UJtudtJJTTddlKaXIKwllSM5dR2jsbPU/WoK5
Vyh/bCAC1yv5fwt+xdTu/BIauamdBgjcMCFi8MgQw3VGlZrdigyMex3wpp2aUry5dxNWYBW53Yfx
A8gCyJbDPaDj860FZ8deQn6+I1yWqo+C6BQlPmmft43O4f3182gJgEwbJaVH8JrK+5DvmwkG8Ciw
lsTZpKnMCF6r+t67Wkzfsr73KhyDwg4+Pit29STJkMTtMxSZCQyBzKPi31Swm7k0I5nqBZIUJZ1+
4oOl7Nw92x1SbkW7yeOjPbVGPUdvEtxiGo6AfIpwkD2q75k0C6HFCKFXqeMucrXHG45XbHacxbqs
Kn3zF4D5tydkOMv/wp+/U3/+7mcnPPhwfIo6PMeXITjXxy8EpzqnuX5uBJrmJaw8j0Xma+vdFhwE
VlUMwgxNQcbD+0Z+PRXWnVCx7jAOXDBlzKuuwna3yHhS7w4VAHodWBCrVk7ooYdrO+zlvtgcBQY9
tEdqHbaAzG6gJ+PYuk2HIKlPMAjP5032vTR68U5vBlgsHD9efojuaWTY0AnwntzM8FjvvGEpmvee
VZ5wgdhxThSfg+tAibNRk/rVPvPrVzEIAL4bXZzjFqVGFnVrwte41wRtapF+J6myqo19MhoasY7T
4uG6KHqyZqedpDc4OiaNUvFugJOUUu0cWRdevYSkHIwrdmarNMyAszJeGeTpGQzmBksyFH2NPDwg
cStzEu14KdCEL1Y5XKlGMLw8sO4gblblfdOzraXuCRwmTvEx+D3UsQP6PEq0mDqWqfp5OL4qTsfK
DeoUNT+JMsGNQwUVCjkGpJZoA1Ccwj+17yWO4HClQ04NVaH27m3SvQW7A1oVQB+go1XTatgkAxp1
DSYrkyofu0Qe9WfxFi69u2J4A2e0gw0fkcJpJjV5Yme0EbV++r2ZcbkyAbyKjUxY3bAaAAVuM1bq
zLhBauLiIvVVtNzltB0W8nsvq69SB7zx1LLFbiUNo9MPzo+DkuG9mh+WGelhPUtq9Zudw/VwqfIa
PfNqJ68Q5a74GmqgyOMfLtor9kltQ4/Ze1DfU+T6sDh7bduWmw6+6K7A4wcY1ynVHCB6XicJE9pJ
2R9K6QFN7I5UA+ZIAo2C9CBtl+Vp3HWrYJ/4KqPN7ahNzvriTBEg5fOjonclj18RTKmBadgu24l9
j6wahBldHADhv+PcMBR44nW4EmTQuG1BPTwPLLlj3kaOiZaEvzFWEqL84R8b/hkCJLscEDgDxXQC
5IkkNdx5oMUOCqQ86j1dJERc/3C6wha1Gi7toCtJ9bCF6OYLLCSi/SaRW77TS3ku4X7g6dcF4Qbk
I3IYHPqEE5t5U2mgcduwk0QnnxhuCeMSTFYVforABfRYjRsZMSWpd7lNe339o977+u7JFGGAvBd0
qMn/40Y4Qc8zxr/jgE4lfXQ9Q3qN0n8pjsNjQVt5loxH6Fv1vW9IdVY8PH92BCg9/F8Yxz0ede/o
c4W56BNcG+h6K9hSU/6MyU7e9ilf5UU5HqBOhm0eU0pG2Tg2y7+5Ml4UGCdmmDXblcDtieTefYRB
s7o4jO+a3uzPibHHLg6zEajvMeWez7JGOKT1jtNXPH72jMqDn34wrsp4s4lRuxRblkHCYNcxeUHz
qere4ZJvjWbzWOy/J6NbsfqtfAeOMsQWqhRWq5C4palwP0I2isMvan/SCyd4/53JJ8u9pOa+Fjtk
STRskcQLlnnZPcYXgZ84Hgl9134SiWLDQLMXkWT2ZJfpDrxazmB/NOQ7v5ubTKp+VKHydVVseDKT
XhfjYAGz3xyoSX+AW+HittR5L9siUynpxXLZxaMGSJu/QuACHG5P4QGwN4UUrGgpHUt/15wLldbh
MrqmFDthMRGCkhYPklvxn7vtCX3HkztlbClj7hn5A8At+uwPaQmkR6lDrM33eFYcauuqIKA6MYJU
dnAQTlApruhzpd2iZMJc8Ehum6rwwBfEhkH8wlgArtX3Vr/GfEzvUwbui/kEFeZafT9Wv+93VD+y
W9ojcXg8lm7U91NtZg3H2bOwnUFeGENZakR3lC2kgZzQAu76j29eH63kvF9MDyXWp3jJXeTIOCow
4S+/efW7f/u3nz17i678p1uVTCWWTplw4T/hAnbS1PlqTXWlGrLwjLcBAOJsu467Ifjtz7oRqSks
/Nvg0q6dLs48AvaCQM6gRgh/3sW9EYhq3zU+a0fIKPQ0Mfpiw/ML9fb/bf4Uf+77qS+bVG7Nv0pg
4f5dmoBMnESfbQldDLnN0CsAajIF4DIIRcY4lBMdjiIVreTuFdTDCcDRe75aZ1AQ9azIl3x1tA6O
6+KBGpxO7zOlQo6WhTw4iqziW6dyCsyTOwyIJqBHH0e6yz0DBqvdQaBU89waOjR9UXyW9plCqzzy
sow4t1ZwO84F6UDDwG0h+jtfTQNODTIrYIuiTFk5DS4aY1aw5Lm24vk0sGiMULBCBB3tt51qOlUr
bGlmRUt4iYX2HQ9XM+lBBYqH9DqQlo+NF6m/4ls3pSg6wyZayqYudDO1ZC7GfJhQcB0bHGdZYH0E
FW5p9LHWnduU8hu91uaFMYY0+GB8GlVsWQzbtinb1juAhoTKEk9/5pvdJsKBoKYVZRkZIKwUlTxQ
cml5p0Ypx1oavz2NvhMsevVbw6lUWy0SuwVadQW62+95yqjlFMIXZWBpq55wvwlnASSXCg8xsLrI
dCLTpc0J4efEwzben9gk0sq7UZIxr1XzgakXR9HoD3gRAVkEaKzZgvYGBjWTxpS0H/HqwfyeOkHs
thAIYj+IY7EV1PTqWZO4ldpR7bY+0QP9JZv6zCzJN/TGbGU//NdKZStM3S0qmxBcDeYzSzBUmviq
RjGbJRHFTpWY8SzwOst+5QJ/Lhhlbj82k0iazsEnUqDBKih050lYBPLjYSCvI60/WriZ9cQecAYn
JPiRxYQDQXhbOCy6ihjSqNHparWzawypVcbOk9Ha+PamhGn343pU0JZFt/U8TsY3lSnpygJ8JGwT
AOH6E3wlZuA2E5X5FCyn7ywV19k+KrOKGbPEuXur24HHM3RtzRgeo8sBzEJV8VpMqwE+K12FF2H9
ex/ADYuuIoAePfSGm9lOox/Avsf+1BROhHcy1JTn/e3lB9/W1RPyX+rMRzueqvAi4FD8wEFPykpu
awIDsDpnB/+gvu7SMMOrN2gZv5/GdJD738NxVMVAMsm6wL6EO8HkhJTcCO3FI2k4QZXDQq7KhHTF
9R1BbSMg1R3WISDnP86clwAlX9Ob25iXoQWgQAY6MepPxeIEiLuTJfXmbZBq7lzNHJOPDjuUQ3dS
ZLDL3hySaMWqWjrAMbqrBTpndIC3nygiB/kfy2K3Hbn/b/abRZHxJFrBIFZT1IHsdHJE790/I8wk
rqzDAyhAlS2wJoCuO27cD3NpzgY5vsZVPdemK9/YdpHN2H3sRNiPbvlUD9QXdmTllAk2r6CVVnfg
fg+79gAWRynHpIS4xCX3xfDXAqdaAf2PsRdaFVv70w3mYaxtrSS0Brc3XaIjetlFrKG4P9hh7PBJ
isUSFIQnFFRwjy8FhpJScxChsKvyOHYQB6QlEShj96uy+WojhWmzT00O0SLH4UNjGp7VjOPNY2es
E3WGCFQ06Yo17AiXOwq86zcsLpP1ePyjW8wLH1dZjOmknzHn5q91F538/49XsVRHBMJDP3vGDx4n
QOeCQnAoXE9STqrGGHtTxSVqxOoW33S3Q7jn2tE0Wl8lhQakqu6SwpwAwQmZvE41qMEQNSwmfaC2
S1NzNTaZmpRGCD75iflMI2BSRWmdOlBFdx6muyxyxUJrA/ySrivNVZCkEh0cDbBs0Y0Eoloz+tj5
imETPC4aOAzut+ACNaES9aMSH4yC3hZEHWov8D8kHbDPWprWkA3oXNgrvWGfQBEw+Vvowhsy9fO6
lriwGXF1wE3g/JhjuMHraOS5hb8MgR2Gd39XFDAtxUzXIhy20ecksMack+SWxGX6XDdICNrPaSnd
eCfS0hQtzJ0OiC91oZ8XUVbkcAW/UFfhqTpl4socM0HuFLySn2aek71cV7S6Mr47Fa92WUueUqXH
HCLoqAqeV8DJES6KCtvrQnWvQxCnBT7YuDdRr1BJkQ00UaPiJyVgNHKmT6PXWeYWvcSICOz7AtqS
YTo3ygZDbyDaIc5E0VmnE0xawbCt8uHgiryoTFurwM4MrLqgdkeXcqS3ucpxHct/LD+UJNt0H0My
Fh7rmGyo2i7BntwUkNGEUYbwgu69xocz0NfNwEvLW62YTB/vcaQfFGU7kCyCoq8SN1AoUxIIm+qw
9BX8R1dWuYz3IB+KDTRXTCElg8ioENVsJxfeLweoglB9qfD3JWLvNLrISVciXJrKqMid6D+GfDcA
FcPhsPFF6awNuj7qwpUV+JxX4O3BHE07kwqOw9gF464kYyFULzMTX3dFxHozoKeG8qMEvShTnkOj
qAGW2vsN+Z8BQz7wtDforCWwkirOV9jKDD4a4n8GOAwdWn01GM47JfZzzlhUaeFnPGfTglEtQGq4
aTDJPXUVryRMmgn6kvVHZkOrEMDU+p8F7lhpgGEkq+U+NKR4bnr41H56ib2OaIXB0bVGhAp1Npaa
hU4jZ+F0qi1EkZnrDdX9U59wWBqcKqFpKMdJi65khBCvSFxTP/6s/m7FKcWoCJlZf90pv+6UwJ0C
rPZUm2SaTRGmUo1VoCYlIXt4CZvNl7QmbmDxvIv0ta0GQeq0thrALeoK2XgeNBH+9ahuuIaqm7+9
rQ1Oo7fcVA+4wE81QqLNTlSYJmTvQ4PYNGUG1IGrvvc8Zc5qHOKN2RdYJXT8xvCrVTrIibTDg1jx
WSdWqXE/zXHydMPoewqN3Cy12qx1Ko0PxYCS/yCw3uzh/uS2eFfi0iYoL+BZ8LvRAReEct1ofz3c
1ZacVXCjS/07nsCp03ErTriFpT2CZwfip3Cq6Ouvo3cXP16+PcH7I7ziGkdcZTJfpHNQeFFv+mEx
+qb5Q1cKoDLe1aWji+knIDUmS1K3kNHx3iMp3EBEoFNW6qKC1fA9MbXtQDDTMBWFE8Y0DX00jnEr
1ldo6htQdI/EQCjasGnSk4Z1IwRPFGBGWXX1hlMKkVJZguTqTPuQZwvxKUwp16FSr4OKqFL5HIE8
Ls0USSD6nOf10UeENr52WnU8EZNRmiLEctbjq+cg6EAnksC+I5Q4WkoehPhmUx8Bl1IPCKaGQraK
45jLznrEeSNXMzhAEAJmb4snInIqNaXh63Ese9U+qMMCmWEqvGXzqOEH1c3eMIlcdmjW4bKkMCUu
dYGD6cu1/KmywaymQs2Rx0ieS5ubYzp36S6H2MPoJMIUAAFd/dS6rQkc58nasyCK8WjlaYs9W/fb
acHopiaLpbms4rpgL4ZflpRscL5r9qo+IcCYszGzQSgbgA83VljMcmDqS/m+sJPi1Z0q0howK1Yh
faI9j3OHch1VVRUOJ6mt3VtbgnLiayvpC8zQTZq6G203ITEN7Xu6G5luoFVRYWXUHY17qlpwpuSd
tCEOWMEz9GJ5jmIQZM17EvKKyt9pi0cScltssRJmYBOwnID2jyTqCr13+5Ph98EMZcmozYCHmDpk
mYIQKlTAePE2XGB2FbjITMknlUu0Bq1OHs54W7spbCdDMJmE7pimq4oAFwRR3Jz5l0WKB/2TbF5d
ANNpU/6PncXY2uz1VnJfuplGFA4Q7qI1I1Dy0j8aZaMWaY9IAMoaC8M/z8HfeVPtM6aqKXedAqFU
mDlWkiRdvc82AS4lkYRcOI1juV3F/Oh2J3VZHku4UmVnlaqyV7/pDi4BJJFcCM2YWHkeV/EvSuLV
IPfLgJS6MyYEjBJQl9hFStgKmmddqKvVCQqkhNv1tEdDeqaU8OjX2lPFgRq0Tt48zbauXwqnZbZq
Altb0hjCXKC1OoUow9WUZybNtmT3vNiJkCmXekr9cST4Qooivy7LzTm6ZlB4pDVBcbvJe9Elzwxb
cLJ+EExopfN71BafYWPj2WUO8BlQr/A1HvO2MeQV3q5MCPOQBoEnet6D7WD6HQxj3rOqodOGMrjs
I8Xfo2ATTjdLSNemWyfjCOowykOwXEgb6vli2XNot+Fn+D3cIWQjemy8e68H5Iu/f3HyBWH7RVpA
pBN6Iz9d6o58CsUtf6W0a1N8BctdQP1euP6r0GxdlCy+Uwl/BdwiQ9lfaf+XaA6DxkcR8ujgJufL
qXs7wbCUGCWFZJlUIIstjCMXAk17nc8FBHJXWMrwAaP0S7bCeSwElEKqFoElOA75eahqsITyjRng
Fjtc1l9ramr1X03vC1U48tXGqKWOCVd7CuLtlRJoL4YyaiQOnfU1u4LWPFshVVMlomoLn1N1kwOf
HpDyfUFhkHDsLNWjMJ/uR+pM3CRl+35XPtYzG+7C6YHxdD3AkJ2JOcg1wN1NYOdAdxHgJrzey3Mj
lSr+4izaq/rLVHq5G2FqJZjmxgJt4wH7B+haSSb1pwamyRkJc8vWaobMQUuUpB99vS2wWuolmqu4
Ny1nX0IfBfiZKoygDE6L4Eiuw5vAjD+C958YcxZrYzltZqxQ8lhV4t0CSpbHR0oDgCZTzcs8eQwd
pUbzz6/I8kKWZKsf31/PgZ1d6ddeDUJVsLfyd9cfoOy2KpiLSZ0SFPRcghym4gP6dx1LCR+hsIKy
MYBKUIFnOr5/vPzwvqq2KnZrBM89D0xOl1doUvRjY8CquKmKMl6xHqOC6hCDUYC68V7dnuEnoTq8
mumit0VKd8+PjkNSjVTLgW/Sz79TiLRsSl7tP5VcWk5epLxRn0QFfmMDeTRihmJUBDRVzwzqfVKC
3YYkQq9fYI/1zDx4CbXZdPq+etihJXhsFSIZtJUJamhziFhyrBaZDoVqzWBAUS7xAJCU2i0MEqsy
Tu4kCCfmia7QzzGT/YFa+kL/w9Ip+Y/XzaE1JTzAU+2Ru+ADbypC1gAUJcKCgSBuJ8+HxhJaGUFN
hkYLSmH3v7UurFCYJ6ZKLrDk/hEKyODR3yfUZBNNDB0RQQeFyh3rqmI18i5+AkKMMfyMcdK3uJqg
CYlB2rhb5EyK8HKKKzRwp4SInBqkk+8kHpc6gat7nabPb22H72HYw/fzb8g6VibfAj8BXoos7cfL
/Bg9qDHHVbyIBQv1X6vP+pXfbsd1dykoXvP56bFN3R9v9a6xmBZMfgp5c/rRmjivez0dlPVPenE+
3MeKiOflgdPD0jfzBVKZgf0i5OQ2hA+DRlYfTdD238I17Dy8wGCoCaywkTZMwzTqd/7BXJH6wiMH
N60Ne6BWH46bdEbZP7ZtkmrEWuXfPHoe1kkHhMY8aYI6r32iBr8FOMDfN8FESWsyp0MSzWOkVA6o
gflLE/QAusNlN39uFSuOxT5PXqhEmCPi7uDG7KvDOw/KkyLbbfJ+nLfTgQ5TYdiqmjBPnO/lJIfn
EH/NlLx2at7rB41ZZjd44jTt0x3CGaaLXUZqZ1gHlKXnb0aqZz/wak3ZoKDQtiXJuMOQ+sA4rZdV
mqfAOSacko+nftim3R7qx2FdvoZePy+NQ5LOUOtPLj7p7oHbU2eCRuROPIUVXAAfg97ufH40l3bZ
laqaobH+J/vo0PDyS1OV4uAU8Q4K9SYloy7APk7vi6WSku6OwXhDGExSWo0WLbN4pUvTH3a9o4QY
w3lU5bkz0p/GNIxX1Kg9B/OpCtMzcSBVoH4MPkS4j8CANK435+3QbA5kOSrTDe2l8OvhLuBQveBt
XtWVGO+JVMCeqYGgHNmqsLxc6gRO+hNrXdQEMc+fYPbR3KIDitrcYsLy7PHisBKm0+rt+XMbgRIq
FWo3ZKWb0dvH2WAauOoUYPI7DitlBvox5TLo6txvJo2dESs6j92EusMiW4vGMD3W2cDdJRdQEepJ
mQnh6mtIWZjK2lEJo0xgcLlxWdkQXF6U+AAfRotilw/HMO+g7siYSb7DgiV+k+BKPm1ZHiTCosyu
AwSmxNuwHojrCZ9qZ1fjTjWShUB7VSJ7oqKP8nqKlFSO8cAKNX9iwz1mtiXfxOX+T6MmuKKP9QHk
d5kYOMf30wUB6QkT5QDpEsc957KsfsodPN2wQr7XEfd4B8/II8GnEI/fqfA4Dteap5JKDBzTezp1
OlWhQFvjnW7QWbx806Ol5qqek9bXOrkOVM1HQnq3J8CtED1VTS5tj6gaRDUxMp7Sz5jIQ/qrod44
F9acPNT2+7Vdkl3vjPX4TWWoZl9cnqu/sBbrWH765+UlX4+l9wzhDjj0AgSEq2vHyknENluJKxV4
vTTVp9XkgBxdwEYM6xF3fDuqjV7JkgJ6SkHIvBxjWCmNV+yG/83zKrZzniWrkmHfz52xEmumk3k2
qB05FuKc5SiRn7T9ERCxaE2Wfh2qIXCIB5RDabhPUCwu0d8d5MSilE8ojbWBGbX3SpNJJwSo3hhe
6DwkBUlTqi0S+xWgXzNA+iUQqnfAy/+rCJxXBI7aP0NJ10BDAQ5U6zRVfeLrnvimDdF9h/gh3rPy
tmShIV743TzxXddS/WclDhjar5BguRJslxaq/M88MNWGHAfVRd7ZwirITn/tNNYZb6p79sKCMtOf
o20heOVztenZDgtG3fuPGtARC0bG16MN1N9NhmV9QE8sbHeD7zujj/TYIGtP4oOLnGrzQ6JLvCh2
VRRDzzXCqtSDMphhik9X72Z78n6wjzpQs9OhmSobCHJzCIbg4isH871hLjOJSvaOhSgSDmG9utyh
9+zoSa3ZO2aXtqZ+g+/qPO+MxFNuO/U0Wwh5KIE8D+nabJsarYuHaANJ0eBfdNaLd8M4rEclow2T
uornpn0r5EyIYfqKipcv9iG41vzJ0jcBWMda9zXM23E8J+biIqfCJnSuzddSyuCdixYXxrbxIdR2
wUoz0LaT6qJgS+xhwK/ZUvVMPArYUExAl6HXhUPBXNKTmn1myrUMQvxH1Q0yPaMOLXPCzRxsV1Wc
rAnyONri6WwrZkOhBPkSFPTT3SlT3TLGYw2v8yLfb4rdzO3HLM6TkiFIdLsNYMZ6ymiRFckdqPOL
4vOwCGlqOnZLtZQgz846jnRtoHWCnK3BOdJPD8Chu0fJASzXiOO+qhFeMvJmC0BanFPHLMMKE47u
M3vIXrNYFPm0ILnXRklXJcgpmRyaoOPgkn/2Td6x4g+EvTnSp1zdQHskUCj+5Xwsxxu8SKGRUvde
zS5c15VxJCL9jST8l/PIzD98xyYlVHFUGKNvcY4/eIu8JM7v49GSogMmt/Y/RYlLoGgWf6i22a5h
bM+PKZpjWJ6qbmpHZaxvOfp+/REE10zLOGHfc8EXPOPV/j1P0977+CNtgJ8MHK/uDSDfRGsE5acX
VKp2mAUzvhWOZDqXoEkbGkqCP9JyAIItsKprhKQWjOF71ZyTOXNkgGkeKTt9+WTJM3RyPSJbgFRU
00IfzIz7lCVVk7zjn3u7rB+Nh/VH30iw5fTefKu/u6l4ctcXN/gIUAuc3xts6Im+zIqHm6Qsskxy
+m2xS9aPDb6G4pXQYMgZABDvdYiKUpUeCXImIPGHizUdaXp20ss/e7RZlQvO4u0jQatmQ6FWoArv
KF7qpWGxlrMVFjv6f3hjdabaTDwmqzhCWJerhb5UkYYs+tsrdW8wVBhPK2lwE3xmcPH4Zw117LDE
CDlmim2cyBP2WSxBwaJFPJYZGrmsTSzunmZNEUxtd8SURVi3w7MgT80PMmFZdJI/iyV1KBZTVrbI
5JtSPj6btWmA5lgcFwX0BxJ2YW/U6I+/QILlgHqty9B1IWFYC5PsAN3l5WHwmARzpvUHtWSClffs
sf0UP9nT7xXqVt9EGpRX/+Kv7+py58cCHB1HUHDb2whWvPLoRi/MC/WmmYu7PpccXVcfO+TV3Vrg
nY94TvwZ2P8lMPR1rmnRQSjeFeXcvXUPXsdB5Xvtj1XFxZ1GPw8M+5IBW0hlE3RoghKI3YRhMPyF
+oc6Pl2Yy3QyM5dDuxLbPmzjjpwWzwglAtI3Iokuc7uikajPm11ysMvZakboDJbEdZw8nZfI/oQO
vuG1/TcJ/91kZlXNfc2rhs86NOzpim6lRKdTnMKpulzjY0nv7Ebj3rcI6nL+H9elP3vpgkyH95zz
9Axb3njGBX1k1UNR3vUUSlW/qsJBOptT10KRxib9DD1G7zkszXTEgX0aXUCLBYkCzCJuRjasq2p7
Anoro6ovqNWRSa4DO/GRPJC3Er9MYDgeL6M1i1O5E06iRZFyfMw3WJmFVUlo9dYPBYw1TyxRhmON
CyJCX/o8YKDDfBwUKhhxHjgUEcdBcss34FfabPsg0ZmhByGxAbaCyV2bQoOmPGER2xYQY+sNzXvi
uElXggq30deGoTUjg3C4Y3shf6ISKwDwf9x8+hhe+kxXY77FHTEJXhqitm/1/XGpyzGPvplUIwCV
3fO4tx4HAfOl6VkKH2K4QATRntj9j+eayCdwfmXU4ZnkCY1LPW7BJ4xFDTY8y7jmi5Jl6DbL9nRV
x2tTeRgwxef9TRWXlddy8E2Goq3I0MLDAfymeZunXpO8k0cUdkIKnSXNRfhSzj/eRHGayrmEmtAj
2zsXwYsZM48kcY6BvqGLUh/iSV8o1oecT4z88Z3Wd4ln9LqtbhYylxBZ+PJubj5EazC61vGdx7WC
yIKpFTiDtB7DVyGUX8RIJY9ZghcSOknJEibFiTo4RmxZ+JwmrB8WE2Jc1Ak06VR4f3t7ZU52akg4
+hDwbzFA0313/cEj+LFaF6nXsLWl0HcekcVKEbDGw3v76NAEDvmG7k6r/j6tg54bnPPq081tg0gT
mIb4bw6uUZz8aGyj5gO+oYbo0KMiiXOsJcmXS4YuBcyqOMOoQ60+nco5QEVIsAAspGelvERNbPjq
taqHF/bu9TpO6ENTltNjklv2uSfizmcir5vZMdzellY+U/Qvxo/jWyq11/o2UrW77S1v0GYnanSi
vwK1PQWfjFRNddA09AmTFrJH5KTanu8Ponhw8ddsiZN3iRrVVwwT2JJqJ233PUXkbXgF5ybchFOw
PVnxgSBPJ1kDWh+KaYWsyK8ZBDj3OLibmsKWJWCA2rDd7XovOLQYsQNSY0eNqBKHt0kPvue+He/C
78i/6oCEp7YnnIFoHDwg3M65uEP5NvY6wOIPwXJMQNW2rrx3e4Cmcj4pOuWEw8EHyk51iqs0LFif
AOJ+S1UlZlpkjTwFf2CLmyK5Y9UcOpQZbC5Fah45PR01M2gKLm7mURd+PZLnJ7WK/J2FzuSunEjk
YtssgN5L5ObM9KlXKI7fadOcAL70yBnbg/u4X/MfmER9P1Xbr6vBM6cy4j0eZfeUWtF+FDPANKhT
ZgCnaydQ8nU3XsxHl6ewvtHwPV91dSyTnQP3HuYMUz82z6u9bivLhYOJQe1Li9faYWmeDV/qG9S7
cnUwkTLdNwta9HuwGjPAx5GQXw/LT8TBZbyVRBqpVIJtB45+paTH2+68Jo3v6CVfRnG+n9RHLueV
HH9id4nujWJuT/Qcxy3hto1LoUqVImyIclCVu4q41RjYAdAnLvm2jJMaD59JVpGi9PSm9qtHKp6a
1u3njjPg9aT8Aropgx6ofivybNj13StUAuCRjGgnv0K8YrU7PwjgLuPjlMquFhC8FqEvDwPUx/74
r6MH6GiRazts6CfPowVIGz7TAaQB6HwNQKBr92c5IWhwPZePgzYuBG1lD/FeoPM6YjAeOQq0yW2D
y/R9u7LhuOgOtPEPQwnSU6XcJ1jaME6Kr1lZo+SNPIoGL2gpFEnlExuzttuUHI2Z0t6xuwe587C5
oWttsRyHjTkjVICOBnxJsriOtnFxMwtEW4izFb7wSNIT7P/869scNG9PH84tFRVfmlWS5wHTlyMa
b2Is1jaL9z++vx66FofNQbcFuK8E5lw8NDoVqwgqOB6ReuDgUdLAqJpFzkAfhcA6CKvB+1nDRZFY
F7ssBZFnRvhGzXsCmutJhEWcTgwTAOJP1A4yETKwq86ktIQR4gzT60u+2FUSlTsBx8JWKkmSl9qB
VY/G0BLlgBrC/yQSJnGORZPekAtWubwOU5NlmZWYWDYL6KCcuGStRNgCfLstygkBaFLt3GWe7SGA
1YHT61Coe4uEunBOQ1QgllQpqho8YfXIGpQpijveruQaSBsa5Ompo+A4Fn28cNWkEH0UqnIgLyi9
Z0IrzaQ+jA9SceZIKWYpesSCK+ndFqsV6Gt8lRfIKbRv4Pxm8l/m6I4ultG3cPL8ARTob7/Gf56o
t5WuCRn66HEPi9Uu4l7fySwl95Y6StAK2nf2UTOYAB1DUrSiY4jUPGX7gpo33hbqNrxrE6hZ51JD
knbNmWF/j29dmGm3gI92JRyyFSCqVWCmm4JW1alUKblArli7P+kXlZ0g9x6WuwK9ATwRSVkIoVSW
SO6P5E60Cw4GByurnfiD3Gtv2A0S9uBy3nEw+ORJkBN0EPhHjpKCbBv3QvExNRmt7bkhroMXcsFb
OGD0zIQzO+H/zrMOPmlELA+F7BXJDnJ+ev10/cJBf1q7wARaItCpNlt8rqA76HOAOl6OzsoGHNux
b92H7VtH+s2jBrJxE7qV0ZyHfWzl7VrTASqHHcJdbuPW1DRQoJvYyw3uEc2gjw8lWCdYc4jBGzTh
38nTzkfNJTHDl4Y3oV5pGu22yKFYhhrcI0r9fWopMwE3RNlrClFsKXr9wrd+PoEUvo95Birb06Pj
H1noHlE2jbm/am3TSfdWfY6k0TeZ5qiSA4TzOGYiJetdfoceJhXH2xUt9aw5/ogsAxj6wPKVb/ne
c4vRDD8bnIGRY/A8cKLXGCoVLfZQoNEQ7uUGi/tKey6DnIFqHRORaWQ0DyFPDxIKoN4FTC1FvRh3
L+iKBDmKjucOFrEqNE4y4FKHhKsh/3n57pd2R9zkBXlUTuMEHMCa1v+sfMCgHbh3qNV34A9bllzq
ctk+wm8jOZOIVx55Q3GesH4f1nBgonIVavURc4LVmPOqt5dYvdlfye3msAXDLk42mlMVhX4mGu8/
sor3xHb1L9361T5XJ6ykEcl2IFiJZP1kffNBh+SBX+tGypv3OvGtJ2i4f2fa6D7X1aUQwtyMume9
J4/IVR2OoHaMtnfk9RxUd6g91r624BkKO8F0TKqp7Jdjcx+V+G2TsiMM3T+4fA76n1Htdy9q7+Tk
DrWxbDyHwkDPmqK+F0LtXaYyN2dAclaIcTtKCtIEP37mSJ62baZjGFWjKaJLlR+xFvg/NMLHyylT
Pf0xhRRO+haMoPGkJRuqSJJd2dGc4J+FtoiFSzIkA6Wii0bHFJ2JumH3qR37VuCl+T8rXR9rz35B
f3fW5LpCnvqii3SvMUOUCmOpqGMsXWMDohs3+QuWFbZ8CT6iiUIrZdUvBepvHC4PZZIMzpWlChi8
geqQYs0Y/nWxUdvoXaF+NlkIGJLpoBj++KQyEw5yee2aAqJEVdG6LSuVa1ilbJfYlxAcNCxf8dwv
tE23jdFtwW72omKbkYj5nrMHiGCDtSHxB5Zmp40Ezmv6dkEoHJbIrTUs817P9MS+7myWd26sSXdo
uXc2C/cr70FTmv513rJFSjrTWGmEi/kqVkUlZvAwqep7pwc8Te3gcFWFrtOxrfpoD4CSKyE3YvWI
9C8F9XOCAG2VlZDqCKQqXs1mZxCFtfvrS+FVIGZE19rWPK1G93NGmLVm8643EaxAOHveSHfbIda8
Ntv+X0s2jctkvY9iPJR0/gkvm3mhU7peLfUhXfMD93uBW2UDID0UK/ZKwTp8RwDFYHGk7sqy7S3T
UWu2TYL+urO4PJ+q+wqTHVC1viNu0HB1/jzMCSHk6gF6VE5vJyZ6JmiGO8yXqdsz4aOXmOmBY6lu
H6ddZNWDiBv3kQHQzHWxVoPHvV2L0h0qdObSPAC453TP7P7v585fetY1LJZJQ3EEbmucsQfKDQMh
f61yKiacJTRQRNkZKJyfqm7AiNtHrbz130Je23B8UhY9ilBU8pgUrd7CvRHltgCu+lTrYWVHlPxI
clOGyiRC0xBR97v+pO1XXLvny320YSzJGzIqfuBx4YvWfsC42mwftF/q8VJDw8L7w96uz1teMr8s
BjWu+mRYIW9Ul+iP71IDexWUgOLin/Ksr/lcz3lCeVPgBIPvX3kl7KMx0Fdaa3Ae+tpjEiFgjIBZ
bPVC9bGadcJOJ6eMNTnnqBJOz3qKhJOTTPmpjlaAwHGKQeqXhCLBgzIsfy6wqsA8k8ZpSkS5Ld6C
3JEKxqcc3AXj/bcE7o0Jm2gQdZ6ELu7wkD0y2/zl4e+QKICMQXxpYlDVprhnc6PTc6WT4M6mQQj5
kmxSgcCLpfqhlThNg6fRS/C/EsEg8TzS8bY3a76s/rfEivx7/dWwHOyhzriSLSAaqxNqckNiCNM/
Iec+/y/yocvTCMpoZMrs1kzXcLLHywq7VnjlPLa0wAyz9ai+BA6nIc/2NpnVFM8Kkg95fM9XEk/j
uSMkC1SiSk9obxuqIhQjH9UYotb1R19hEJ5QKQ9AxIpVPZnU3imo6mu/7kFKKe7w4ryGr4CPElfp
7Sh0MsQ2VK0EeLOZ9h2ds62qV65c7tCNGhIlVab8CTE6LR08DGTKa7XEsRWVuUD50mp8lTIdScGV
hSVIp9I2r1i3wRCQX47ff/RV9j/i1YNqI0UrxHoTIO1nTYKWo6KVhbOYwx1u6rSOHULgc8RVM6ef
vAe0BwDGk/Y0YbvikOO3h+WwRZ654/jayfqute4aW4wBhyVwDnlIO65efOGaXFIIhz3TSeleSNNl
axQj6mpCfe6MKSUBhj0POv5ZVw6yPj2PaNuJdQGOVKnoqCUC5qtXhLH181QsEugdu8j7Kk50OtOk
QAE/GrEfIQhkfNsd9EQM6Tr5KL0fXYAefo+JbOk/kbRaS7+iWDeEXzs68ftg1omAIB7oRze+c6vR
yPW6BLkDhB54OG5fXLMV+zwZgAqCW4XmNcNHESZXrqhB+RwCoF3D55B+9keWs5IncMkiTmlrXMLZ
3Xnx9oGLihwpiEvlSp118w6W9zu0e0MPYv/NXPmmWf3K6s+W1WvXMR7sTaNPZe9KB3v5qUk3rNIm
8CYu73ZwY1bLbvpSRO9vLz88paYEJVQBBi8taV1t/M4jHFErCTQLbpwpuL9ZFw9X0iqQumpSDYmW
a138E5s7GEtxDZ0+tzAIRHJXcQ7FtaaEhQaWWANBB0DQVmqAMa1KIKDnnC12qzdF6VFalQrRQcm3
uhUNd/NykGhBo4CtrVsMj9rWsNqwewTcIDUYVBU6GCqfuIEDsXSIjTzxFOCkDkOVy0s1WGZgpHdX
N3gfO9iMtJ+N4kgOImUAjgJV8KAU5qMykZl/bgbyxs4h9qlBOKU59gS2acIwsU6plPc83xU7ke1R
UI/mncSMRFKy4+LNk3NaF90+95ityWtlgSYykMXSlRqdruyG8pK6eYmp6z4PjPlzFMsDqlwapsKv
sERlwdvATHNP0dXS288s2cG8N6r84ICvUcWYIY/RT+YsYTiUDeHtDN8erbl29CLALuOE09SpIioR
t+BpyvKulgS0agUrOK6peuI30U96uJ9eHFjbiXxPz+W+6AxoCiSYKqXVuix2qzXdTkh2BeIJGMlA
2jNUvaS4LmkIVUe3hRBcDo6v6F7o2F5+qjreYIu+Kq9NtD5wChtqreEQM/hvnwCZ84MqBNyCxFbK
NpSpATcNb7fFLlm/3ewyvA/pkT9Hkhd6yRg4D3BQyk/ENDjO2tXAY4vmbqQEYjT8K/BNpt0TBjcx
wA9ZeslSHo/H2oY+97CmcCLK+JG2FMHNTqO3m22114Z5qmMwsBz7PStLHl5iVa1MOBsZocSde3Zz
o/4CZ2FoJWa8q9xIUcBBoijt+3uOgmEw+j6FOBIF1j18wzPMVFhilSs1plZ/H6NetvGOdMyPDdnv
aWVTN+pYlIGSURbZWIwFyDoNzij9sxOWKRjL460cu/qIfdMOYyjeghtRmin6I+1At+k9uRyG1K20
YHSW8TzJdimkYOkMRbL6JqAQZql7cM4/XZ5+NE9bwUKmYwaCV5gFzOWJgyxP35I9b/DK55Uqbhfx
DUaAQXG8l1cf/zitxphe17VHrG0vNU3lZ3V8WuoazwteMyfN7MMJFK05XftDP390Jh3yvO39hvzP
gCEfeOpbhPDaoIo+GnITMqhOGDq0+mrIu95KTq3Fp7R+O3iWtIhuZIDOODVM8o+2uaAYT8Zsm7Fz
HmfFUHjr6yRhYGgU6NDZcCGgdo/brEyXc0rlCzBg9DLOGMTmSAN1ycsN9JmSQl8+AFsgXzB5HLBd
DtFiX03YcTECFqiAFhF95ixHtfoFyIdj0nEhEzpGQ5scrFwPSh16yTAwz4KgcBURlhS0kPkTfQfK
LERyk6+L2j/G+n27gNHsAZcmeH11kB/+WMYLKT0j9bYrc8dqYalvs9DG5nhgCw3GcIUCFXztX9w/
LTbqyuctfIO1JiZcQLpFHRqpBxNrcj5j8PCqSodB+lXhKfKE6ehLsAwVf9HVMPguQIGEiLL0VGXj
osvhoSMzjWFDK8ojn3rf1orh6r1jozjISTsRZzxnFeYS+9dAsTgi/44agEpg8go8c+UTxMRY7ZUA
RO26BeV0hN1UMfRO+kCpkmPQJmiEGUoUz4uoFlzTUVVstxNRhSM8Q1Q14JqMKmDOXcbSj0YmheJL
qCHwuC4q6mHnyLjngzy9VugF6IA3lALIsnjfcXC0Zz6HN6OXHKrzSu0wFV9Jq7riGQlrK/S5C4vU
jxYMylNgk8H6W2Cfr3YSXfKgpldxr0wn+xm1P5uB+jnklefSEkIUx87CniEHqK5veFp0AzoBsf8l
bQbhWB6ftiwPEj+zmR21crSFBGMCATYBtdNUnTXCt87RUffkti7CDLp8E9Wh9Sbnw7Q56HXVyhBv
EF1y+V2WOtADEl34hb5V+NrcrDglnCZknFnQJt38WACVXdqCcXQFtrJY8syEGvjWSFOfUafjSRnx
aiTVyXVi7/e+YlbmxvXs6ruuS1UNBF6neCXLV7zK/La0GRu+GA7urhf96veRfdes92UMbZpvSp2D
q+8U0OBwPouzbFrNg6vvIo2EBLK4IO3qNHpfZKmIwK5sVSaKtUc2oQ/U6SP1tpy4PkY/9wRmQSUA
aiV6aSVoOBCo+kYb4BpmkqKKM+9ZbuFtZ9N3zjcLSWcjJ1JBURIgFLyqUfOkEafARcUTqumI5aRw
gCklsMbvFlMBCzkMAPfokiFX6J0X2d5EnaWuYMxoE9/BddduSyDlqhPmQWiWuxxLZPanBw4XsVND
+Im83rwTnypBw2UBec4+mq3RQdHBWT7IESLaXcOkLLLdJp823xmO4T0j8HvJ8nH8Q7wzDJK7qWYQ
FnOc7BN2d1nQte3ITde54W6LbZSxe5YRmnQEjZROyd1w/kSasX553iCPp8N5RLWPAA1ZF+sIUarh
tAv7oNgGhn3U9MexYeRr/bUfc9R11r9PCz7s3yMBFQe6T6957hS3Grqu3TG9esjkxesCha2qK2PU
46kt6NVqxPSOz3GaHrSN/BG0Vt/3MfC0IKJrluA192oyIbmgIZQy0LRyp/VvNZKiTZpue/aaOSkF
vRFQcDFY4psnqIxKASxtaOzkQFjRpaRIVxVsBZlZRlH1tZJvaJCDdX6UZkrQmApWbpWonjNY8773
sX5Dq/CBRoOhFn4UcIhSVxjq1XaaHtY0DqsQtXJiuIBPy6VgnsEn9K62QxUCnGAhVaol279Sbcfq
pOvUIdztkm93o+HJVZhqVkgtBkfqDmNq0G+CLkhUuoCp5iSRx0nQFacDC4bXBhW1IhzBuvotoVWi
lGPLASx/BHEMcl9AtcMht1D/Nbl3+Iceow6SV7tad1pNl7ZizspXtMptvO+u5DSGP/4MCHpyJkEo
kEkGlXkA2lt7dDdCh1mBPwjVhILrPhSSdoptJtSYxa2shHfHgl+D7ZKnUGicGXklOSduninoRZPn
G3XuAN9bARKOY6AdltZR91H2Ag2bb2gPTq/on0pbXrucmumYCmmsEuIA1MGANOUJCIoNzzKu7isB
nwkVBWPbIhkuOIr8MYYLabuNMWPcnXtj6202+SqPMPoay2VlGUt0tE2DrZrK0dHZYw6dalbuOFNd
7QyDqBmnM4fGrS97tPdOlwvEoWzGa/2IhPE365m11NhsS7kKXc27qfDM7uhAHwQFcA9fAOPuBEcu
xXuj7IPAriacgS4N/+mLbW32mpbo2BQT4KFPb4s+dblVZILduTcJhXulslVjuKpjE7TR1uDWANgU
Wgb0IZ7HTK93sajeFeVDXHbenU6yKgmVZxQmOIxMAh/rDzZlnok1hPLJo3F27BVv451gV3INkCA8
5LSFd0W0VW9HdaPHGBTRGaWVQn7UhgITdqBJWK1D7fYgLqemBp6QnuHLDqj1nWdBfbcrVX4pvIrt
ySGwAkUMhT5i4UiIIMqxkmT3OEHiA7NJzdl6cB3f5VQW1Z2zcXKBGmZfapl5Eziv6zDtP2kn8CDP
hTztm8rsYSG2zXjCetZsdT4dHm+QVTW+4HkKFYkeD0k+R3rfaB3nt89osMSZHaOqSnQIxa7xE1Ej
h6ZTiyzmGDJbcPrpcxxSHQG5K1a91rUjFFzDZWeovqarrYGqI0WZKUNh3JZjMy14GqBrttE5saAD
K3mc8b+x1E9yaoz0CQg9Guk//3Hz6aOJvX8qiTmOKk5ThLpO5VhvXq4l1bIUsWSw46/OhxLRT2Y4
RGzIjOOQcMjdMBfNjMOmwR7WlTOFagEu3poV5n+VpSwalTXhH1ypLSEnMSFQC1TzYqD+2Hnx46B5
tSL5nleeZtZrx5bC0oeUTqNacjUV00cxrro5yIBi4KUAYwn0mg97lsPcIa8dD7Z2JyDXTRItegnB
7Kg3isHBWL7UA6CJNBUAtMnSk2ixqzBHYclzLtaTesjPyB18g0U9wK6NtiUvMDFWLqZ0XuZ6EbOQ
9Z1a/2S6hu97vAe42W2xU4cc8Wwd56vQaHJj9eINcwZB3OSVgsoW6CASegYI9BOY2AtXBhMIDmas
hjsswNyZ32QZaPjaAmxiwRJCKvhIwxIM2i48rHjbPdD443/YnXzRjBplGopZlCY1xmWRogIbgiL1
KXbqVR6pdXwvwSMWnlFJGoUle/Nkb6bgzKFORl39UsLRRjZnENbaTEW2bkqByXHupGQtVJ/pJ8el
BnFGjsNu2xMx9zyQoyIx5sEN8ulIedXyThmBdUSDZYzEmhQa0sDViC3YgaeDe5AYjzpKbMFvi5c8
0zXqWVDb2JpzovZM1zKYiFxTE6EDvXhiKGVAS+aIH9PC9mNYA/IR8Bou+hxkTpZ5gT7gzvTcluib
DTd0ITEaO7tc46fpgeiO2IR4ekj+6InZ1D9DXts9x4h9uHfLOGo7WMiD59ABAuana3i6cVVX11B4
bwU9MCg/dWd6zGERsBKyyzfsNDLTNAfTZaJVhQUMB1UlBOjGy0bUqOp1eMl9Gv2wpqw/Pa4xOk/k
CuBPBRXCo9+i8D61gNBwU6zzQj3Y6z8fbldqkiPx+3Muttgf5ARqzVKC9021z9g1S+IsUeUx4Vf7
gF5AG+Qiv48znspnH+J9sUP/l/2XqgCNVWyllfQByuTRUNDr9mKj0qSv4lIwaBcAfwBlygtJFcxD
VH/TkWP+BF6EP3S3RMrrhSeXcXmnOyfCv88/XZ7ZBkrw8Y12bOjEDvjv2zx1EaCbl6h6ywpkfHTD
8rTjsUQO4/fwoeQMwTp+Ss9VvJ5+TiYwPPnx/fU1i9M9lDRmZI6qx3opOnPrTCHlqiwW7CYGiQl/
/vEMaUmjI2yvc04peaY2Dd2ftp8DLttPf2CLmyK5Y0oxqj0CFLwHpl/Hdy6KzAtqxc47FivmpXP5
VVnsXwzVcdVbhTaJCgf1kHK0R/TnCj/d+2SuYEUt0p2N2S6vijveK6jVO8CTxoTXp6Wltb3THfdA
dYx2xRt9JOe1kWqBhXsbBAcXixQjopY1rGo1rPVbIKkhbJdX+1naLFNO1OgDfxN/hp16A0lm52xL
JRbb2B2OVaYtLtziBZi5JkeI4a4cMkgL1cSyNalqZ3kSpWwZQ+cbePffQulRi7aivkz1E5NuGILD
rQKirPxmrRHb/9oD37xWXDSe5MSHrhRoiJ5+RneVALOLQ0hEqhnW379n5b4bV1J161FQfDW3H4ry
rqNyxPNNbJTnlCqwclvUgB9B3wf8vl5wwgYGHJS5HQVhlCif1mvjgno108r8ev08KIew7r1qum3Q
8oTu/9xlZR+hhLZut6HBAZe+hkSBNsnCkWdHLldzbOqPhk8ytQLxXVlsnimQglWvd1XRwOWEHke9
vRFmv9ImjPT49h5l73cXURjMVMFNWJRnhPPuekITSEoLusXWKMdEzZSNgVapEt/H3x2PL8Dt3mep
s76Oo/jnv3/x/wFQSwcIQoe5xNtPAAC8QAIAUEsDBBQACAAIAECujkQAAAAAAAAAAAAAAAAeABAA
SW5zcGVjdG9yV2ViQmFja2VuZENvbW1hbmRzLmpzVVgMAPM1VFN4ukxT9QEUAO0923LjNrLv+QqW
XjbZcjxnt7b2Ybb2QZbosc6RJUWUZ5La2qqFSVhCTBEMSNqjTZ1/P924kCB1A0l5ks1JqjIGcekb
Go1G46J3f/zK+6M34ulOsPUm974efeP9+b/+9BdvmKYx9SZJeO0N49iTpZknaEbFC42uoRU2XNKI
Zblgj0XOeOKRJPKKjHos8TJeiJDKnEeWELHznrjYZlfeK8s3HhfyLy9yhLLlEXtiIUEYVx4R1Eup
2LI8p5GXCv7CIkjkG5LDPxTgxDF/ZcnaC3kSMWyUIRRst6X5e0z/6bpBWubxJ0NTyCOoWWQ5sJMT
oBWhkkf+gkVaEAgE/kt4zkJ6BTVY5sUAD8FUaCV7dZoAaRgTtqUCZeT9eZ8QQGhJxBACfEYFEPc2
tHiKSw0p4mGxpUlOTKe9g/7gUC68LcmpYCTOKsHLDkPANhtGAVZ3k8AL5rerT8Ol70F6sZx/nIz9
sXfzgzdcLKaQORuBDs3G3mQVeKP5bLWc3Dys5svA+9e/hgG0+cMfEBLWGM5+8PzvF0s/CLz50pvc
L6YTAAWwl8PZauIHVwht+jCezD5ceQDFm81X3nRyP1lBtdX8SpHkH2jpzW+9e385uoPP4c1kOln9
IFHeTlYzRHcL+IbeYrhcTUYP0+ESIS0elot54HvI2ngSjKbDyb0/vgYaAK/nf/RnKy+4G06nNqdI
d4NRhHXjA53DG6glMQGj48nSH62Qoyo1AtEBfdMrL1j4owkm/O99YGa4/OEKQMvBOp8F/ncPUA/K
vfHwfvgB2Pv6tGCwX0YPS/8eaZ7fIpzg4SZYTVYPK9/7MJ+PpcQDf/lxMvKDv3nTeSBl9hD4V4Bk
NUT0CAUEBsWQvnkIJig6hDWZrfzl8mGxmsxn33h3808gnKU3GkLrsRTzfCZ5hr6ZL39AuCgM2QtX
3qc7H/JBbDPN3mo5RHEEIMDRyq4JWEGeK4tZb+Z/mE4++LORj6VzBPRpEvjfSJVaTgKsM1HIPw0B
8wOyL3UEaFNJS4OvZK96k1tvOP44QeKVrLA+qEIw0ZoD7YKH0Z2WPg6Gd1999e6dN55LwfvjyUoB
vp1MfVCY3IMxS4qcw/gCQxfHO29NEyoImrgnwbdgabOUhjkXn+jj9Y8ZTxDc404OvCwULM3fe/9N
Xkgg0yMu6DswGjHZvVOl2bsRmLUPCigXJbjrdCcpQ3uuTeyIhBt6/VVZ5YaEzzSJrgVdwwinoll1
zLKU5CGah797R1uNgTeWVHWvwchFXzerX3mDJvjBN387Tov/Anbq670216SREYAxK7KHNEKJDq68
fwyeBNnSCaYHW5KwJ5rlD8spfmay7uCfXfAmNH/l4hnRURsby2b8dZ7ELKGnAY/4FsiJDoBe0/wW
ac4+gcG91yRnCP2fiCGBosF7z/CFBYN8l8o8IgTZQcYTGG7aET1NyGNMDbruPBjKb7mQ7AwOEG/T
PuMJLUm36zZ6zdTHOShZ92QW6Gzm9aa3qZJHGwHJOCJHQXBiEELphccdQDw91JJi+zXWug7yXUyD
DaX5HBwQlgDlPz+A4weMgHcn4BO/hmDBcp31LcEPKCihQwEzachf0nURE8wVKjX4XydS4P+KmjtK
Iip+DTQti5j+GuhYCA6ucr5T5g9pGYY5e6GojjIh0RKTx5IyFxQGx3sEuZFOQq6UtRxk8NedjHtw
cUkgvWukQX6iiHAUmzRSsk25yHUBKz+gZMqSZxrJToaiuPqS9KNVNWWs+nKkD8QLQ1L9C361yCTU
n+cqCSCrzFuG308M0/42zXfwRfHvaVRqrkBcktvvCip2S5oVcT7akGStpgiX6QZBZKW6W40HVS5Y
I1dQaJmiW1gMjAQtZ6oysz2YJd2CrBQYs4aYgdehDOQT1JihLXSFK2SXTMkOloH2XNqeQgVJ96gt
tm6gMItGs1J6PMmh3I/pVg3kk9xDOlQNqsKEfs5HtUxXcork8gS5zZmIvYtPgO20RWnfUPoPOI1F
0hJlMCkj0bU5OSlZPDS7orR1RZaEcRHRRUaLiNv1HzmPKUHTPeApztckhuxcFAdaTxKYU5lSTQcA
DQ9GsqLni4Me2wkCUkm37uS2jdkhso+1a9U/2hx37J6afFgF6kD9E9yRXAUiaObauBWL8J0CcKWD
PXkMbVg9fXZN3jCOK59of4GwkV5S3/WBxlUhqgmgNh25iCGz4Rx1izuQtQLT2o+0XEHotcCQE3dv
siwNP0NUK6NqCDtM04XIqQPt38lAtHFue9CdahCTJKKf7foMJsS1dNfbsWpVRLfxFW3s4ZnhzSST
8/U6pkY4X04w1aT+JbkFPcDJM6CxWS5VKEThyG1WtXZRYVFcgnISRXp1Y88GCerXzNWF+UUIR/ta
pLg6k76L1jRG96eaMMtqpX0nnCcOK0jlr8kIWze/T0KJFJhRTLLsFG1t3VPLCY+xb8DJqFG574if
nYDKRcppEar48v2JmBGUXjhmBBAdYkZI1TAMaZaxRxazfFcpxWhDoQXK4ecVuGFoX+EPLrWRLews
/Avf9+yzDEZs8a/Dyv4EzknyQmLmgPODINC5GHhZqxRGQFIag1e6xoGmk/2omTKYJ+T6NKuCNKCT
wsRpTBoKFhzaYmYqE5Azf3rCqebpySUCgVQY/bMW1C5rTWwq184sjlB15VgfpERAqV7DylxXWKWH
fi/3ds1yvFoR65Up9FThFjGoQbUjEQ2grrCsxYdWmCoAISG6MxtuiCAhjiuSkyMM1+q0gKz7Y8SL
pB4ksSDbddqDhspUGLCqxyvjlQr6wniRWbEMXAy1RmJ3WBNH4h4SkWq6IRF/XXKeL4pso2FueKb1
VEBBF1g8TQ/Ccg6YIDyYIMZ6AO5NlpKwXpMzYhD0p4JmzYHaeo6MaJpvDvt9h0Ia7vT9hMHPg96a
M20tnZ4zi/FulMMa+wsS39d30tYb9WHW3MJyptyY5C8ock3zRzkJdCL6RTftvVBWYwuNVIdoTyuO
h2YS68H26b56K/nYxGfDbG9d7ky+8xr7KJ/9jJTq6JKXtxovreYNOStNsSihol/gmz/+CCg/CF6k
zsIrG8eGhAvYJAxWHvaKe0ZV04Orzm5GCIicgxKIu9X9tCs93ALQK5Coh1kXgmwFcCCnlX6CsPGw
YkCJCDc1muSs6TaWj091JxUyk0jrfB9FItS2q/SEj0e1WimHYlrt59a9rVaU4SmvNmFIfq7yG/kR
eGiUiKgP122NsfRo98yBsmKuMZTLeSS6IqzjqJ+YgxEVJlrmHQuDWr24YetNjGd4Rzx5YusD9PWb
yEr4S6hbI9NRzXZu1V5ZdGy5sMcyRXrc6oY8rnvK57f+wLThun3UvmWR0QVZQ0suIpbAQjo73IcX
6pHvClJXnJ9Uxjnb/VuWyd4YPz8+Ds8iLeVz3JL0ZSyid4aFQavTDjW5tD54WNMXebajQ+frlvN2
2tPScSiyDfb6zW5B8s2K3wqJtD4yUlI3Ll9g5VnRpatNoiPEParyNvH8C9EoKIy+jN7YBOyHe467
+Z3m4ozHrZfAl1p6qMYX8eirdWpXl57YEPo6VbjcXPFuIs2JWFP3LUMmw7k3FPx1erTRyW64lP4W
iTx21dIoCtql1ZaI5wfAh75ZuXXYDsQTD4u22mLty43pY7Fe47Wvk/tzutbl9+kMZLf9upJaSN8I
Sp5TDm7aCtm88n4Oisdc0HLvBgewyvl2W+1uDJtbPPagsSta8X8t1G+F3g44talld05JLvjnNYo7
DinFZ/94XkmXYuhXSVrWiC0doZBindnlYloN0fyiJKhVHRi68tbjLyOEX5gIEMP3d8sjWAsRvw3T
PVFq8xoAUlipnLauutLljasG7HJVzaI14ludnOR0m43AnRPleX6V77zteRimva1agQSan+muH+Rh
FB2Di9aKvn5ss3N/GIe9n30IC48js0fiiNFWQ4OzyyF2m+QuZ9mt9ms5Y9l6UBsDNb7POqUgT9H/
qJVFXdakrh1x1sSl++yL7kgZLsrZ980ZqVklkpNHWKCdskm6yqUtkgbrZI8MlSSKynYom8h8OIrb
wOk0nkzjbqPJtMaxpNMrBIOTZH04GaZcz37bUHoNqVI6n2kI/m/w3bQlXZYGntlTadwviIttcpSF
E+EfORDbNsp+in0h3AJFepjIfQwajW9OjJOyzoUHSgnXYVVU0fk/dGdWQrNi+ygvdyYyMcArkkIf
DzSdAn1PVRdjkyEKsRTm+aODNbQySFaijmOJWB5F2UfrjqjU0gpXl0Fcte40iqvmesfHjJn9UZzB
GBIs35VXbF1GQtQA12c4H6W1E5nW+LGJbMkXPgswlxEynOX67nwf5PDLcLcXLpT8OLdhSLlz7eyZ
pee2g63qKXgJAfs3dasNrsISL5u2jbBZbKPY/TNenb27RrJ7aGVXbV7CaNn9Ia5KLL369eqA7XtN
yY6KlaCnnK+yzoUnlRKui/tVERpX5ETqjvLA2XZWULoY7qp1J8PdYKHv2R0FpKeBrmgSlGQ8QaLw
2ibPWA4qI4sHe1hb3NnUgJYK+ilbi+o4U8/CnFBGXePCqqihOng3hkL5NEm0pOotNONrmEPLwJ51
flld8tUPL1QfA3zJAewkZMq/8H3LZVv8g+30e0UDlYCc7++W8An/QvoTfQw4kIgVyjTkz/EBMsiT
fx0cJ8PRJIGewjePDDMLItSDHKlM2ARlhiCDjJ9HpsaxwaZny08sjm9oYK7f61x9877au4053sVV
6fJmhnrPRjeRmsXAY8nJVm6ZMcOOqhQxAWRBf6WghpVxdIm7NEgO5Mt9t4JvzfM0Nt3tACpqljSk
zISfXERQY9REug20ViTgLHMcfQ0PVp3SZK32mGmCz//JlbDObIMWmQGrcAudVF49OI5ZjbF7kmKX
d0FDWHwWCcXlmD6KOwhJElJs00s/7umWi90hLXHW7lMqrcTSisRXYydw3MGoi+5gFsg25Bl00Ayj
U0Iyg60TTgvXOb1vIO2g2CVW+82WGg6MmneDGPPsNNGdwMrDK19EJBKTCT+cHRP3NMtwduqO6rB5
78BQ6bYYPF28uNL0dfHhTGPcDPycC3K3Wi3uyociTj4e0W0H0iBc03LyuuFR/bp6XaznvLJH1fz8
ggJXH3/9i68Mfe+VUmUl8bVF5cK0ZKEdIrDhcqfoRvBXcF9KM1y/TCYP5l6MufAYwn6kc/586Nr4
WxJfR9l6cJgHL/fP/YaNkqO0t0aL06hxyGso3Q8Bnt1JbR76cxpIW7B0q8Z5hOOBFnO7uaxahkxr
S6XF6V3cxeX3bxdnd27lekIS9ltYGElGqiO9wS5T22E/f2T0FZ91AFgmCdkLRbGUksNCaKH3cc0j
ZJh7y8y+djtfQsJC9e8PRY6VGXlh6/oLsC0hjGkuF8gVAMe1UQUiyAlep54qH74XIHkn+QKAkKMi
xhfkpHzMmxWWfYkoTG4twerzDOegOwP9kbwQtUAfMxLz9TyliWF828KZOwiscn6dQeiHle1LIKz8
cjPxi64HEBadjx7IliSKlIlZcR/3+WBMzBNUpNr8ohgs3+10mT5YBPLBg32HdgBbzN2LatvegVAH
rO3kI2i8h2OdcEH3Xu51eiswO8bCJS+uSsITbeFqpF/o6NZCH1c55raFZX6fyK3SbBrTnCpEg30c
znsHF+a8nP0xuN9kX9ozXdJX8y1co9Ih+/U4fpddQSljqm4NJm/p6LofobBqhsArLPQx3P/SfuSz
bEnX9Wuajo+D7i+Cug6mpmjrK3rnu/a/BUGUr6/0G1WbfHs5u4LPL2746wIWK/KaZr17zq+F22GD
JThik2dwb2AJoAM89RvVUOFSozo/hM0ZUyfebheB3NFXO3xvy1kd19vxhfrKkoIXWbyTmrLH2t65
yV68VfgkNtDubned28+xyt3z5TE5sAnly/XnQkRdXlMoe7KO82B856x8W4/6FS/Cjb8tYrkm+iLy
xfCuREgj+Qh/DdtW51zQUSz3yfXg/8gyZq1YLh3xq7T3BOKqR8u8S0k3ISmM/P1rzC1OP+Bu5AV+
0aRGz3/q5f+9CNWXFd8GkjGtflRJBQpqgiRhSNNTemvxkwrQSvPw88UXfujiKb/sH3sCOS0NGXQV
/InFJy8nmiqXDr5qsC4BWEOkTqj9KYzEqsc8R4sHYBD+dQpTGmAkimrwZP+qbS63aJIBhC8R01Dq
7FpnDlRMSH2h2FsBxB9TzPWXmgHd1MG07xRXMo27xZZKWWCMs3NbnnZsui7lZe1dvsHj9zZC0De7
t8uFKItOmLnmY1W6eZ+wQaU1GDQ7RFLz6ujxqMlZ2lvSJHfgapp8VR3VXMqN0xOWR1W4sN1RQF1O
aGr6QpLmhTDR+7PD8Ujj8hXRFo3xn0eoccfyhfRqdAA9rT5a7og0AHfjybRekMIcGykp6gDGPjPV
ojlL0kI+Ry7wGTme2L/u84qHgXRRG5IyDco6YcPc9inqAGpP/XaCYN/f7AQA48wd269lnKSHDCSA
PhwoCsBrwmBwDxCWEHTOpNowaA/uIYlLgG6G0LTHcTaSpkDvW7nb0hIET/tBUOdUVrxmSsqpyDYp
p2NgsLAo4uiWyF9yfCXiMqvUBpG685tkvinuFO3ZQlulTiJWpyx7gcheGcxfgRrEdd5V3uSCW16l
KcWXYTTOQOl6N9S2muwNOPc2Dg8cttQquZ/4Ngxemlh8pOiFsFi+WKPo2ndnWe8nHStsgfxhb/Zv
GvVWu2arA3W7/QDXYWr3O5K5BVuysqnrZdUV+Fn4GtoJd9VUubDDasA6LJRLIuX0ZY4qyQ+DCDit
fQ/w8JE6pyHPK8FKlsShDk2+xwNJxwoH+AOl5lv/7tt79K8beQP8pU7zOwrqRx3f4wXcehbUKsvK
HBmCfo9HkJg5JsXjWN7hkaSVX5KWDJTCHLOyviQckVF89lbC0mnIR3nhL2LnRN6otT9NqXJjTKH6
MmV4LsmUYBryzUZ/eaCrngE17ol4Rr8EykxS547n93p3SpdVGRpjgI6+xhjok8aY1ln6y08ineHL
J+tMF5ptQH0y3urcRomSpszBI/VV/QO5Vl191Nuc6rXqN0r228hrF/sNIn331GSrpYJVT2UM5HG5
Jazw5e/dUrUUeC+PzzVzVV3dAToFebdFEqofaJaaYH+i/gj+SAOCLsl7GbkyX1D2YSTHE+TrlKRX
ymaYsK0cKvLQuCT7QD7UH0m/Ya/6oWykFVRtr+5+5sA6OKi8+ffW8UGVY9c5dHvCbnHkdkVZrvts
71KEDeNYHRvOGOAKvrOb6SyHI46lBTSJ3y3h75bwd0v4uyX8/2QJVeyiNIXy2Ti1Q1Hew8IPx6Oq
JZwytl9tHJPPqBegVOHz+C1+OMjCXd8bQJf8ExfPJ3euVIULu+MKqEv8WNP3Kv/Y8TSVU13au5KP
sypYYOYSSDje1KyhWFGxldumDSwtAEWaf31FDu98an6bdLc5d10BDw13dchuyqDBdNndqijo3DaD
Qi2WFbeEUm6GW8I5v8dtxGdVLh85bhk20PSFJNF1Vcab3a4y+FRXdpVFl77TKBta+ZZI8YeNipw3
eK0fZXM9H/R/UEsHCDz+mbgfFgAAUo8AAFBLAwQUAAgACABvcJREAAAAAAAAAAAAAAAAIgAQAElu
c3BlY3RvcldlYkJhY2tlbmREaXNwYXRjaGVycy5jcHBVWAwAJTZUUyI2VFP1ARQA7X1tc9s4lvX3
/ApuutaR0xxndmvr+aB0Z0uW5ba2HNsjKZ3umpry0iJscyKRapJK4unK/vbn4oUkQAIkKFMipWCq
piNLwAFwcXHuxdvFm9cvrNfWMFg9hd7DY2z1hsfWf/71P/7LGqxWC2SN/fmJNVgsLPJrZIUoQuFn
5J5ALpxxglwvikPvbh17gW85vmutI2R5vhUF63COyDd3nu+ET9Z9EC4j2/rixY9WEJJ/g3WMUZaB
6917cwdj2JYTImuFwqUXx8i1VmHw2XPhQ/zoxPAfBDiLRfDF8x+seeC7Hs4UYRScb4niPv78Hye5
qkVWcJ/UaR64kHIdxdCc2IG6YlTnLviMf2KCwCDwPz+IvTmyIYUXWQvAwzBZsaR5Yp2g0PnC8ZYo
xDKy/rNYESiQk0hSEWinu4bKbacuFm0lQ3KD+XqJ/NhJOu0N9EcAv4fW0olR6DmLKBM86TAMzDcj
UYDZxXhqTa/PZx8Hk5EFn28m17+Oz0Zn1unv1uDm5hK+vBqCDl2dWePZ1BpeX80m49MPs+vJ1Prf
/x1MIc+rVxgJpxhc/W6NfruZjKZT63pijd/fXI4BCrAng6vZeDS1Mdrlh7Px1S+2BSjW1fXMuhy/
H88g2ezaplUaSXJa1+fW+9FkeAF/Dk7Hl+PZ76TI8/HsChd3DuUNrJvBZDYefrgcTDDSzYfJzfV0
ZOGmnY2nw8vB+P3o7ATqAOVao19HVzNrejG4vORbiuudayjGOh1BPQenkIqUBA09G09GwxluUfZp
CKKD+l3a1vRmNBzjD6PfRtCYweR3G6DJYL2+mo7+9gHSwe/W2eD94BdoXq9cMLhfhh8mo/e4ztfn
GGf64XQ6G88+zEbWL9fXZ0Ti09Hk1/FwNH1rXV5Picw+TEc2FDIb4OIxCggMfobPpx+mYyw6jDW+
mo0mkw83s/H11bF1cf0RhDOxhgPIfUbEfH1F2gx9cz35HeNiYZBesK2PFyP4HsR2xZo3mwywOKYg
wOGMTwmlgjxnXGOtq9Evl+NfRlfDEf71GgN9HE9Hx0SlJuMpTjOmhX8cQMkfcPOJjkDd6EdOg23S
q9b43Bqc/TrGlaeywulBFaZjpjmQb/pheMGkjwfDmxcv3ryxzq6J4Edn4xkFPh9fjkBhYgvGrLOO
AxhfQHSLxZP1gHwUOpji7sNgCUwbrdA8DsKP6O7kn1HgY7i7JzLwonnoreK+9T/OZ2dKPg+DEL0B
0lg4T2/or9GbIdDaLxQ0CFO4k9XTixc/eP58sQbWewl8ce89nDy+5L7jiz515p+Q75550cqJ58AI
EU4Lie+t0RVWXxA9Vk3ohmMO9ycvwXiTop2HgR8D1vDR8X20OHl8V57+V2exRpGY7Et8/yZGX+M3
wylQj/+Af33hO0sE1ZujTGjWny9epH9g08WsydCBNhTadAGUt0Bhv/9/tfP0jq0/rW9ZWcPpVAe+
JFke8ez6vQ5iSTIJ4hm6Wz88oFATuSq5pIQp/OM8aMm6OjXD57Ru+rfLW8xCpwM8tjMoJ3bunEiv
2Iq0SaHwG5QLo09atDASzoCcz2T1Gvsu+orcs1OdilUmVtWspAKXzhMKZyHSkkxl4nx/X6H4SxB+
0sGuSJpHvtHUobJ0BcwwuPcWespflbaomR9Hp7eTEVjo3znxTwg16xRYnlLV89JCZ+DpLTxfS35V
afMy/Ah9qCfB8pQM98WNE0UTdH8Thz/pc/A7Sz9tvz8PEZjXXpqlkOS1dZf/yq5RAmsRTDzAlMfH
L/58gX1rmFKsQ3Cq3WAVQwN7PvpSA7MnqRGFP3774lsdG9fv1yh1ZzLCEupn+adrPMskU5GFhixo
ftta3hK4niD45W0h/V/ehegBJi0ozL47B0MAXpjn9wbT4Xh86cGvzqL3Mt+Ul8d0pkXl/jnw3FrK
57LPvUWAJ6rg8Y1dG8/WYNpGXZkjPFl9DOBb2Vi4vvsn/PsO0kQRNDNpJCSrNV5gEhdD2t5r1hQC
AkzSo2VbP/9svXxA8XmIXaqPMNF77/jePYri6CUVNv6fPEEvadRrVscTSNfDeorzoAVeBhALQr5z
t0AcMP2iPhD8nlTjHPuZUDexuvlfNyoiL155UapU1UWmKArNXQVhDOYoDubBYhSGQdg7SjDV47Xf
f08acRVA49c+pKXa1nv56uWx9aNV1HP48tXJK/gvaz2keWV9cSK83mDdY4yXG44Bhd5IRkRO7Y8S
dSfNpg2wEP78NhkF0sESomi9iK2f83ipLTiW5+/3Z08rdLr2Fi6u9yAMnSf1r7mG9/ukkXwb372z
gnV8e4+/H7vRW8ZPhK7+8k4hliPSQFvIyY/YfyO/nyyQ/xA/giKl6kNb/Zd3EYrJFCpHbAkWJjQZ
tlT7Ivh7ApMs6J1Mk2lBJyFaIHCje4BHqrShdrDB3742pB3DanSUtKpV8chYTENWEoMh+lhYt6ld
SHkl4mVEElQNmETEKwfqFQ1hng8GFYWAw5EdTZTTRprjZcKDOcTXeUQoFUBzX1ImzQGQer/ONYxl
F77jczNl8vxkVPCSkHcKo9NiPW1LOu7wsPPXi8UKpyjUjtUDj2/xt7+8Swe69Wc61Hnlf08lDTWm
3/b7eDnZiXsvp8ESWU74QNZ4ycI3o/ZX/x69Av3xX8XWHcKVmQMGcl/aRbNwIrWxb7dks8b+Z2fh
uTdEqLbQvrzQsvHF1YY63fTvby+2SRYMERPpkonnw+SyyPCFsZvQe6ZrtnWUg6lL90wXRb3j8BLK
lxTRIq0pPSZDb4bedkhvav/e0FyVh1zwgfPfUA/YyX1b5EklGcj4UgbZhIucx0x4U1VWQ+Qpm/fL
Ngq4ZS/Zz89e6SrZnKizuCWD0V7PkjesHHub7cWt7eZCFdS+bG1KLshdLEfJVVe6AhUDmbjo3iJV
71XU/fUQqsv657jUSeAUJu8vvBXKvXAimHmvfqJNty2uhHdWUjYkoLnORjeT0XAwwzsto/Px1eh2
OhvMxsPby+vh4LLHpbctl/8jJW9MTtwvJ140Wq7iJ9H6Rfg8xpy1KYrD9Ty26GLODM9LuZT4fzTZ
/NEBncUbom+FX7kGWY/03yzBN8i8BJ/Qjf7+DzAFIu6f6Tod+KcVPUMTWt/sPAK0VROCpZRgECca
p3Kn8dMCRTAergJXB1ORU17G2MfbIBsUIckoL2EYLFfrmFWmVhGynPIyBosFSTR9RCiO9NDFPHLc
LIEeZpa+Cm+GvtbGxHkkuNEGuIU8Jbg1IdVo4DKuUBg/6QPyOSSYcfDwsEBJIg1IMYO8lpM1iAUc
FoyiV0s+hwTTcV2cQgOLpVToDthg8LuRC3lZCzykqevyvJJyYJIxRzcRWrvBFPhYp9L5LPLaXwFH
u+eL4MswWGBJgU+pV3VJRr6EbxmvR96/0G1sUfcXiP3j7PwWn3/7/fZydPXL7KKX0D43pYDKWz2W
0YM8f30L//zEMN5aP/7oHQuN4a0Y9FYK+XfvHyfYDNkW/w0zPcfClKXM+Pb7xM3BeuThaQpf3L3n
u2yLhjOrOJmYDkQoGtad7q9g90xvSyWpnmRW12Pu0slrD2Ytn/GU5Vi9oaTpA37PC+6lzkeXRJJU
qTWZKJwnszjX9OKc58d4ccMH4eoszI1hGlm9KkfRtBbl7oJgYbGDltR63RKiIbQG9bl3FhESkt4K
qaurfArZkONrVFsAxrU/UlVMrz1jH+oA4K5uk9IMW2hVis03TFbDLi+gAlmcqGZkZr30eScKQLb9
PvZ7iXTZ4YEllTT8hn+JmiqGDqixSzsyYoWtyLcjusLVWFmpjhN1Gflx+MTK85JfZBtnEuPDLQZT
hrPVzPXfeIzlqKqf0WEZQwhZM0rgckt6xpZI0BZbWbZGzY1e/LOkANEBr1jKzuXNdgBFyLeFQsUG
1CpTzJoUmQMslpiJp05hHs+meSnTgb57j0myFmQcpkNzmDpjhGVLlsYGVxksYpLgP0RuiRlKBbkp
hBPTK5Eo4mB4eyajBok5y1XHloHXNCMcXE2GTfNlHJtBFYk8X806heXypjuvhZa3Re2yNXjD7Ybb
t8Tt0s0iQ+4NzEbgP4Jwk00QNiWZ878VaVxKAwoeF6CaOJ8iACYUKS1lt9wo7iB2YBm1ES3JmnSB
HPiFKcgj+UNymD8nBf4cP8vThA4wqKT3c8i77fesucYSbu/MZpRKudGDmzzsftlG7jCCsYi15ipE
aKeB+0SpLFOBIptxY5szb7zS2DmMJtgt4rpWhd8Wx+GzF4bnDM+1wHPkoJDhOv7WDY4GU8ZaZLQq
mesogWjkqk1Muse28qA7ZKrCOTbDVIfPVFmNsNY1WJNEofeEK4sHPw1XZrRYpAYlLTJNapG/DHVt
g7qKc4RCExNd0GE01mJNRjNkthGZGR7bdC8ukizdCvyS5z+O+rhJZ2PzWWEq2w638vcHDL1+j/TK
dtZWTBFIrMGmNtgE0D0h++TgZ/AZhV/wuaEmT3ymoPtld4R7Scb0NGd6BPpVWB9hEHH2iNfRQ7RO
4lU0Y5yMcWrbOCWmIbmT3KBhSC5E749ZyF0tNVahIauQoz1to8A06BAtQe4GsTEF7ZiCcN2wJaCA
NecFUXKPvMH19eQy+/6wb/4avqFfXfrFYqPsi9Wv6JILTMOxL1VWm1dBO4VpgmoxTsK0POYOiZaF
VzAEu6Xjy3P84MnX+KrRU8wCqCHTDcg0iT9iSLQREk1YhCNPQUcPm0OVwWQO5fjzTTr1uA+Ss/FR
lLVTcvhGLg/+ILSA0MiReB4wPRIvK2WHupGPBGQM7aHdEyqZSbGOwvFKsRq4VA+GCwdMUVRdVZJd
J+5uEXyPTHEhvJaxyRmVFuhDGvZApl7t2EFJZDLDeFtivOTJ1mbnFiLqHvGIIqCeYZMGfMBUsMz7
85O/Ja6fjAI41hL1y87BNeEHZmiJE1jE32K4btkrnFy4btnPzw7XXfLyZ51w3TIY7XDd8oaVY2+z
vbi13QzXDbUvC9ctF2QSznKb4brlqruqEa5bXncTrnvH4bqBhs8YzwoRZeXdw6WWBKoN0R9rFMXD
RzAImLQjDcRCHgkupAifpEGF5ZhC+iq8wWJRFxKyyIMf4wZgo6YByKVWYxGbpQ9Gkkv7ZRl8RoXI
4aoOSRLL6zVIgqvUqJyYpwI3GkSFENfVyCyXsvVpQm0RpDnkIZlHn2EQXGIeB+9YGvxdOYSkWRWh
2efYdfXuvIUXP2XLU7WKK8eQl3sN7Q4vZu8v9YpIk8v7tg5aVI4Glcfu/xQ54fxRA05IrwgNTn6b
EO9Nh7LyWeRPGMyd0K2LLMum5lntAZ2mlvcOy/8eEoxITGVXr5uK+ST4j97D4wL+Dy7kXGdMC+nL
8P62dnTqKaQvw9OUppBeiueiiySNFh6Xvqx+9HWpGhUkGWQjaB094sqfPt048eMsOA/x/ouvI0xV
1tJSGM7Y3bAoSX7pmCCzLpaYThn1/A9JPil+FCxqGNE0tYLXU7ulyeFpegketlazQAOIJpQgrH1X
Jz9OJpWNVm6cTFZ7J/z0AYAxgxRfTVA0JJ9H+hjDfK0jXZLOPIqQTV669igCngS3/ShC5XSo+xu4
0IR+HzMS25sPAkkohLQ5/P4rTtrIBjzgpBvwHOZWNh40p5tmz+HQdlnJQXwXreJHZfz+ZFsEJ2ps
NwSDkSD9+bK7vB0Co+SkuGxjdkIyUiwyhmRjtaBuNBg8VbA0AnwLfCesWxmuOzSuM4c1RSoTV4oN
jVmVziCoLdn3JB9z1CeSh/w8SXZU8yjDqessXq2XdyjMb86mw6AI3BaDDhYLQ6KGRL8jEsXbY4ZH
n3cwhiPb5FQMXWcs41tMNVWUy0E1chyGrZoeS5F3yLnc5qih28OlW7y62SDVYrg9oln+vIBh2Od5
qjxhyEmTrqQfqI/Kn/8whHm4hEkWmBpkTIK3f5RJTx4ZzizwHyUAOQHSLa82dlyS82SGmQ6NmbrB
CtzxRsMJ/MZFOvAKjNCOjyIeAzV0cGh00P7MzrhKnKuUO6ltuFHwl3JkVDZrbNF7khxxN7x5uLzZ
alxjrOzKIzNb5/ajXPH7RLDJlRVDsXKKTZhLTrI0YnFe++gJGqJsbR6gyd0FMuR7uOT7fW9H5K/J
GS7LT6UzElA7iy0wlOpCoaGqQ6Mq4qUFpOm/hMF6peGscakbpDYOlbhu8jp1nfGUl3gN9TVw3kUQ
LTv2skgkneNXJYVJiFah/9Rd5NW9nw0ooewmTsqkYMnWbwF9twag/Iq3sQSHZgk6Q6AV8QkMk2rd
ylNIkZLmqiR4asW4l9GngNgEF64KkVSL+LtlwzR+hCE+Q3xbIr4spInhOP6F9SCRS5GssmEp4aUj
IXNdXpI+sB5kXWRbUvjdbuQYWjpYWuIm3Gnsogan27wi7wlFRoYilfsipUTI61ALPCXEyzJE1TRR
ZURBLvs0SBIEr8ZmL73co1xC1IpVz0Cai0/P3UA6Ktaw65wnxqYzpMf7hRERSnJxA9trEgWGAA2h
c/OxaEQe4niS6Lkt01+2Y8x0klv+O+IrwP7kSi5zNjndqXI3kwLSBxHZ34Lky6+TcJVK4+QI9aRd
tmOTkI93aKzC9qxCojSN3kDO9FL3Td37MFg2+p5uClinFnHQaB0Y3B450YXgpMam7OYmdoHy+Jd2
U0PCDxSbU9jDvZgtC1BrzMEBm4NO0KA0mrKhwoyupMNSQlmtnJ9Mo08botgeUdCDD40SRQK5R0TB
B0Y3/GBpeEHqkAr8wOWoJNGKQ46lwFJwge0NdTVNXWQREvQJsZcDKnnrFDIgx9cgLgapvxaahswH
1HvvYZM10aRboEU5tOqWsd6qblgOmaySquvedbKWvzxhaFvYKpJQEUfGTNPtMg2mq6J5pWzzSo3w
xIdh1i3thTe2bFZryU5jR0uvVL2tLFbqF89tLpA3AatT+iMib7c0VDxF0zde8H0QPtNkEYwGDRXB
I+YpX7uqyw3reAGYwwbaxEM12DQelt59kFe5oqHrCN0ApQyDIHQ9H1hJvRObeErFLE06TUV00rrS
enbdwxDfnjKeReZZiCaY8yjoOvaTnbKqnTGcXeQa6lxQ+hDvW0iHMbukwY9MLlf5mKB5JYOgE64M
fl3MuDJNuzJah1D+wA+7NXYCBaMZ42uMrzG+TRlf8lCjMb4S40uMhnC0yXGNkVUbWbOJtGMj29aq
Zp0jrFWPfG3rTsBRoXiti/slFd7Zbt6RpCp7Y07M5p7KnOS36nIDy5YMGP7IrGBbJLrK37DnU7di
EbhHkzvw8ibXF3zFjpJmtWYxyRvQxmRu79zFPRZwo0TNEOvMQfGb2HET0zYeqtEZaQbLJqbSKus1
9Lq5aaoEsflmX+cnreXt2BtDTB+kN5ZYYokp7XKmmA1qWzlYkzkeN/44c1yh+ULma+nEr42bhOvo
Ebskp083Tvw4C85DUkGzTLpFcwTC19gH1bZFGG6Pjv+pNM6Q1DPPAiqHMkdxWFcO9lBgJgD249g1
hLb1Iyyse68aXcERQPeS3CQqaBiuMYaTDXCO5gT1OVi+YzlP+caai15bdNxwTzcdpTXF3COWkyqe
YTfhXoZsaOYCyZBub4U3omBhXns7zCBXJvx0w1SXjhVDcJX3+idrP/aWCD6gZRCjBJ2E9SOfCzSZ
MVGDUaTpT3VdPdmdfoqUhiYUcHccPDp9psVw9qFxdjeoTlAyQ3aaQUxosSxOiZPKL0d04gBWRHzO
cjdBXQ7Xlyr8HVIYfptlFhjuOjjuYlGggHDo89bN1YLH1Pd9PVDbMD5FQIfoSuvwWTFHUy0oIhNX
uLSKXTcTdCAb+/DMtUzGh4rH9jjNtys0mnrDEh3Ox1Y8vAVQaL6WRdnVwTJSn9bOk4WoW9Ig9WlN
Gksn/PQB+gPfvZ/Gjt6jkLsSTbFyrcnpPpivzZTy8NyyTvgKRLmMq8CNfDrcCla/4YF/40RRvsrQ
H2fobv3wgIqifGdpJUtbpe6U11ahAbYe+IXjuwsMQCSVsAztIstxg1UMLer56IseXE9SD4pMRaTZ
YL2ydiEPLI1+lnW6Xq0WCI9HZ6HReJrfThSxJwhZMSof8HN5YfbdOVQ4WAI55ZiXawXmpvjRixT2
p0TQLvssM0V0PB4x0rEtmXonI7JopXSHACYMbFZeswaQ/DE49i66t0hTeppteT2E6rP+Oy61rYUT
z5mZfSuUf+FEj++dFVtusi2uhHdWUjYkoLnORjeT0XAwG53dno3Ox1ej2+lsMBsPby+vh4PLHpfe
tlz+j5Qesf3gfjnxotFyFT+JxiMC18WbszZFcbiex9Z70kcz7NlwKfH/aLL5owM6jV/hfSv8yjXI
eqT/Zgm+QeblEr6N/v4PIFsR90/rJcxTsHcD5PRpFYDpBftzpNlX+azWNzuPTh8W3rQASW5JGVHu
cc1N26IAUbbq+YWW4shbCsigLIS7Yi/wN22rEkbZ2iYKrkCSt/i3i8mmrRSyKlu2aQGS3HwZ37Ix
GHn/QrexRZ1IGIQfZ+e3g8lk8Pvt5ejql9lFLxminIMF/qPVYxk9yPPXt/DPTwzjrfXjj96x0Bye
cRzXTSH/7v3jBFOGbfHfMJo4Fhy4MqLs94nJAqFYHnba+OLuPd/tUQPDUSBOJqbDJ80EEmzWpaX0
eRXEbC2Qbbe/fPXy2PrREkwt/P3q5BX8l/ni8PMr64sTWX4Qg+TX4oFDia/bY6bu5LUHnilZUjpO
/cvX3Hyrd1zfnud51UwxD22KmR0gwU5KgydHMNz+THKTMXBScELMvFeIkinSgWLhG7p+24tg9Xw1
w1uGtw6bt2TTG0Nd/D5GkRQ6yV7q6Z8hse1dCkBY5FcwOWmQSVLMPaSTkpUMwyqCQ6QarHzs8EQR
WneKDLMYZumEo2LIRddl2RN+KVvJNfRi6GWHjot6f8CwS/7FE8WA7Ri5VOzWGH4x/LJb98VQjL4D
szcsk9+mNbSyPVpZh4sGCQXQ9pBKCicKDHcI7ok4GDmygO5u3RkxTGGYYsdOhyGLckdjh3yhOJo9
hX+gShUns1WpmjiYrcLe7Fy2Cq3OsWx1a7VK2oEssCQ6eyabNaLiSLZayDs6ka3WfOmBbEyvjAJ/
/tlizwi/zI4R0i/Ux9hImkWE8kDQ2hwS+6Y+1AM568LaNY4Rto0pavHH+gVEeQwOv/Bbffh0w1te
guzn6kK2ZHKqz0smw0DvuGS9IcKUrUM3C1mNdnOdsJQ7uiaZpEpti0ZCAGYO0PAcQO9hgYj1gcYh
NO3nBFLM/ZkrMFU8kZktM1PQCgJU/msSIojGCIK+CT1ZgKA8K3DTkFSrbB7iuIEoQQwqCeWQQ949
OxbdF0OO3yk5Zgs5n5DGi/XaCzmAVrN8cjWmwRoQvP0zEJJph7EPuRsOPHPJCZzqs53qVXtcK53I
Gbo1dNsK3XaK6uRLIIbtipcidAmvYZr7AdRldDU4vRz1pn+7vD0bzAang+noWL6+7sTOXRaOXb66
rkrz/LV1FfImK+sqLP11dXU7NUrZugywBDq6os6aULqerhbuTlbT1Xq+z2vprFUkpgg+6JNfTi/8
Xr8Y9BXN1zECKuGbn37Z2eXtRCc3XdxW6+t3vbRdOoy7JpddLmyrBSMfiGY2sbXTLS6TdqPvGmeg
++KzswqfKAyFcdnrR7GPU/lJFqmLY5zz+jP1sXNITaxVx1y/qvAboj1tx7XfH6VeAg41hEuXfdeT
+XQSP03iRJN4Ce4x7xZzvrpEN5MyT3G7ZIAA9qelT+6lTcWyna7neERK21iubjBI1kuf9KDc7a3a
bkk/EoUBRLKmpgeWNBgahnv+nRX9QYesyhQlQ++fUeBnNFYx/rDGc83MtJ1DUao8lxHrPI+TodMm
1wOmeTAmy53BZVKoA5jkwpApAgXFKjK+H8xj7zPqcVg2T3mKGFMlDmrmnRsv46C9jKw2f6xR2OTa
JMHbN0+Hn6sa90Z7ra/Eir0j5IE/QXk1F95KYHuSPrGp9I8Lk9uMzRT+VKL+dlpZ3qfKuVScRiap
s4liM1pT7oNMUfgZhSPaEsQZg6J2fHvxA2SGRrx5I1/S5Rd7x1dno99wWNvSBd+x74JA3bPTshVf
daJnL/mqoTdY81WDaS/6ljVVp5ztywFLoZvrvmkbyhZ+ywS8i5XfMoWvE9e6rB0mqvWOo1qz9Xg+
mG9Z/9DkkgjByXK8LhBLL401DCYoShcB6LxEF1aWubqMTeHLkTdBlSDOwfNhKo73QfUrm89oYi5n
A7RrMZczA9B2xOXq0d+lfYnd7ddokFmXBLPVDRt93wu/0lxk5Gxlr+zXPVjOfHb7n7ey6fKgjS4o
6qzGCaVjx1WszrPX5eraebNEt70lugjN16EXP12H3oPnN7g6JgLvyTJZqpknUmfVrJgV8j+TKDUW
z55ZQp11NCn58OcSBZ0+wLW05zgAStt/0GZ/Y4ufFpVtJX704kduWhdlfkD+l9ZcgnxFeO+gUMld
OgrGR/g+fITi5mLDQQJ52H33WozD0oTDslVfpQE3pcxDyY0T47KkkpO6KwfrqjxzYULTiRn5cfiE
zwFmXkDytYePVd0FwcJ6dKL38MPOXRh5pchhQOkvCuhTaANy8vt8rFEYLWnfrrwf4/kYz6cdzyer
ETeCGq5UDrlmvTw8hBquUYqp5x3S98qiT95qGKz9uLoiek+WpYB1arGCMTj1/qUhDb1KJHhadSDk
/wk9TRz/AdHb62TLDCpz7ywipDpwXqAXeiWUwDR43zmBxG05klRz7yYAxvl/rvO/Ncf/mU5/LYe/
yM62wIy2QE82TxO2dLj+t3XEj8B+NvK/77nFMHcqI3O5Vb8cxixD3W5+qtGYu79Nrzp/sMa41sa1
Nq51V32dwvk54/Bs4vCo+LsZr0dp+2q4PgVafq7/c3COSuEORPGmg/Sqw6XzhMJZiEqD26gTPfuq
gxp6g6sOajDtqw5lTdUpZ/tywFLo5lWHtA1lVx3KBLyLqw5lCr+vUW4WuE0RdMtV4PKAwvebBHJ3
wLHG+YfBchVEXgw9QOQnhHNXJepq1JtMTTcMe1Omwt/zOeqKod01wWz1HLW+ZMRBauabDc832cK3
D8LVuYSut+xN0fZkvpQq30nOTpjJ0rO2vlO5so8s/A0Vco5rxEHOzV6oJtlcziZC3VCkJMyNiLtz
givxEAzbbW11jXR6o2E3GOLesV6ZG2sosIICOZLjpDehIqWENy98X9i4UhIAx4RMvWwFZhO0WERN
KFJd3hbf7btC8Zcg/FS28qJK8ux1FxXwBqsuKijtNRd1I6vL2Hb7ceu7udrCWlC21qIW7C5WWtTq
XSekhLoNJqBE+wEl1L1TK5xEqaIqcIDjR1/j0LmYzW4ukONih1cPU5JTgg+uUULxp4H7pImdyyUN
I7ECU/fbxUQTMU0vCyDh+GR75TQMvkQoHDqQRRNWllUVomITeB3sXBWC4JOHdDtRnrmqBfWK0MIH
bSINPKOa6uoroZBNgrwIHOxlBOtwrit2PosJCpKRbNeCgiTGu+2QIFX83aX12t0tZFeaoy6JZYfL
2LVMqlncaecpqEfm0TR3MJoh7snCD1PSE5l/aNZ7hAfnCkOWW45hnd4Sn+TcaMMl21soZsfKG10q
TjH3jDPycz7DF4nQ8SLpHYiEu8lDvoKK/b//GvnzwEVujmDyY5gjl1Q/YFaTICcfecSyRV9OMbhl
X6aiojrekb6000YIgkyzyu91CvVJQXKVpN3QAk+miwOGIQ1D7oIhs9Urw438DlcyDGUk15IPJVvh
68DENbUdNEP+pLes0olQj7JsdbcD5eROEySsLiLvurc62FXi+XtJl3REs+nabAcEVk+3WbW/O+3u
THfJ9VvolvbW04TdAePeNe3ekaEKVnoubMJUOnjJSKv28ATgPfPyCntaxtkTFs7Escn5fEKnN8wd
umdX+v1Lbhcwu4wt+3YPLqBv2Fr+6rl4rgX+ihEOdJA77uItET76ZltusMZHDvC5i/V2A21KVytY
/eiDfeRjndxJM3D25LMi/9V6eYfC/EN8pNXkGT7afpr3Gfft9XarjYXb3gLGPZTQ7BN8DLHmTfZ1
uGiwDoC2Z2ZVONBhTGoh/0ZUr3FLfSPcOvfTBSLj3AE2TGym/Ad471x6sPkGxFJ2qln6+7OPNEtR
NzjPLMXRPsysaFsF+lbbjFvczTPMuPplB5gVwtzF6WWFDtc5uqyovTm33P65ZUXX1Dq0rFZOBYjj
utN56K3iWTDCJ/WA7K59bHp0YJWZpUeMl8FntHlZZfmlxS20gRdyCN/57D1AGTogSVr5mW3ZEV8F
UJZa1uPgGcWI/q7V7Vx65Wly4iCQ0AN61eOzlIMO2aSxHi7LJT3V7ITzx7EvPX+sAM7n0YDV6qdC
Jvkp7LNgTpzyGqIo5pJDTx+DLzdgvkBw81izzrlM8vPvOM0Zuls/nAZh4QaDyk0qZlPXui64JJu6
5uc3UxIzEoU16p1lUte6HnAhk+KuAfSw56+DdbR4Iv2iWelCPsUlgDQZSQR2eOQXLwSom6DMLx/4
lJ3pq+Fe4E/pso3e8JfmVfSGmFR6yaGkW+S55UXNgvX8cbRcLxyctp7wpHkVl4ZIKuS+R67naMIL
eVR2J71BysbNr17kafoMZflV2vaM4sryy4rznVX0GMQkaoQOPJe+BA7TYh04nF4CR93B/3E+O1Tb
zjxnETzoAMtzyhw3MD/eZ622s6Tm7k13796QSWfbF29KJyBd2hrf3a2b8vlUl2Sywys3dWeDZhtl
iwGLicSndG7TYLhiDnZPNjSwVp6olzPM1ga/hifEU8GS6/ep3MYuSNy792BQ4ANaXvpnjm7Ug50P
g8tpETtLlgHWPU8m3VnO4JIjZcUCdsmBZatUhga3R4NZrzf5po6gXPtCgaULrYYF+QPyJWOVY7G2
GWVhuGNrZy0ffBL9HUStfPspOZTJpW3ySCYHSx55klep4gGrSKrEyibl3cfCfkrTjmSRh6CllZXe
A6pdGFLNk+pCoE/5AKOvNfEjinuwqVqZaXaF7qZIbbB1sg9o+Hp7vt73emKPUE66KW1IJyOddNRx
Xhv0axsEkO3fd2Bx8FmhpOmqAG3MuySqKmlZTvpckxP5c4nrTvPlMVLp+YljKfJOF365ExWG47fH
8bSLG35aLAM1Z8T1LY5w6MhYHW7HhecC/r5VqmYtGyL+pFb3rRG1N+f4dDpfcWp5yKF1/GfR9git
5A1QmqcJE5SCJUaogN5S57IzYsYYmatKB22GJOdKjTHiI2Gxe5ncqqBeMCyBRcruCR1xpWwxMBZ3
1ZQrUJDuHoTH0jw2bGjb0PZ2aDsr/481Cp8arAHB06oDYaE5DJUp8vG5zs/VuyxC6mZDX3DAZP9B
VbGK9njRBD2gr9X7RTRdo3tFFJLuExWq0XkTXri/YQz485bofkGgJ94cfxfhO7JYvO+xDNh6nTTi
U8EEldn8hD5s9TCmmzHiuOV2cyTDhe3+sPHBpd082JRsyrbzUFO6V4WM0d+e0Y/R17hBW4fhjKkz
pu65ps6EeX+urWOHVIlcJ6TAOkZOCCOPB7UxaM8xaPkbqsaiHf409jFeNjmPxXD7tP4oucxtKF0I
QJjnBMW8And8S6wl3n43pLWt+KVF7XmuO5iZvj3ii1yEBkMXAl3kBqMQpL4tz0YSxqIDG+fpZk4E
dcsJUlZjIXg3zlPX+ZRvq2CkxPnkUVsg8bodZGh8ExrHndwkiScKtGcULoSrMSReIHEp9zD1aZHE
s9A7+0HhXH0Pn8DrdY6hb0PfG9M3F7fLkHeBvCWs0y51FyKbdYm9yZpvkb6LdRYYnAbiaYTCCVTC
4QLujklcGRnO8Pm2+Bz5jb8HwyD3jNXVUQ0NwYtPwigHKcf1TAdaOsYuDfvYAcovr3oapJ/uRPb7
I3+9VO9GKtvZwDNr0jO02XKpajsVqvQR3eFqD7F4HZ/tOHIVaWt6II/PaezKtuwKcSOatCqpk7JH
NkUVU9ZYFHHKoBicnD1p0yuVhtw1zGE80i2zhzxMtOEOgTvkg7Mbnmg+nrbhjO0daFqSgOXNnSQi
eHtGGGLAd0MUAlGII5EjCNLTLU1UlcHpOzBZLX/iu7Tyh/PQ9wbvChiW39qckj3c0OSskr0lsV9E
r34Tw5B+bq2yiqIytWqFR7gHRAxvNM0b5OFu/9YH4eocdR/7sQZjULS9Igz+VRtDEHx4C9eJnQ+T
yzxx8KOSIwra9cytYVkbWVlnWIlfk4Nug5Dw8VlDSFsiJI07jXpc9FWPhmipGtEa9ErVC9PASv3i
ueQBqEZKJmB1Sn9E3sOjxp0BveIpWs0bTvMAHA/PB+2ePkUxWjYbelCA3kejRN5GM0ZJ3ygRZuaM
0lfy3yc7HWx2pvi2TAEP2n7JX7ozlmxbU3JnPkerRi9lUUT98Ajw43IVz9DXWONlgixxgzScgZLA
AtIKdZ6PFY9LGmbOGFjBLRwXU921FTpJL/RzKtjqowLs/c4OLDTnTF9O6kk9hTVlnK4xy8WbrYZ7
4saJorx4YLDcewtUHBTvrOo0qezUY+u1Vai6rYHMTp+9tojcky6nw8xy3GAFnsd9z0dfNLB6khpQ
WCoWnXZqlLJ1GWAJ9LN80/VqtUCYWZ2FRptpfjtR5Z4gWAWbPnjgooXZd+dBeBYswfLk9DZpAtZd
8jqrbOCrheuyz7LRT8fJETMctiXT4WSIF30mLT3H/I49nNes6iRz/LRCLrq3SCN6Oq14zT3Xe1xK
ZJw65d29t0LhZQ8CW0nZkIDmOhvdTEbDwWx0dns2Oh9fjW6ns8FsPLy9vB4OLntcept/Fti2UlOG
yYv75cSLRmAdnkTTH8VO7M1Zm6I4XM9jiz79O8NnG7iU+H802fzRAT3GzyC/FX7lGmSxJ5GzBN+y
F5P/Abwt4v5psXM04uvQ6u6hqSWvTLv0gJcuDksue2A7dsJYF4YkloIEK32MYCV/FZ1lukAOudGp
iVfIqHhy/eYDS1YDOMskAaXP1NUEFTJJQOdgApP82iIQMpnXxDNa6Nxr4onJaf1F8SrK6YBP28ar
4pUM2iW5uDt8WbzCJnRJLLRCbQslWHVLJlCfdkVSsNMdkM/zAh+ytqafaLtY9MNH2sjika+cEPiH
UVieurNyWUhCBpXMy3PILfR95kqZleQt7YmuvcZOaADUvuyEMa07EX18s+ha+axTSl+Z2Ch1regf
ktOq2RjmH3T0XJvP1wR9rZJulCLvmr6ESZuhry0GCQcFbTJIOMDVOerwfROouJ5hCJR/O5sf/3zA
alCwhAPbIidh8acDPnUWf0Wo2FYmHz/A8BldDU4vR72Po9PbyejmcvD7sXTLaIJWC+epbMNIkeLZ
20UK3A02ixRI2ltFyhZWlrDltuOWd3OTiDagbItIKdRdbBAptbrO9pCyBWZzaMebQ2TpauisgANA
OsLyv7KTxDyKzZnamFwW6dYHzjgLbsjFkMDXQ83nKgHGl04WqD50lk8CvnLWEbqBdJgR9HCFLLLt
Gsefo0U9TDGPrMO+eJB0CuNHu/1CFgmkByY1jNnvU/SAuVUPWZZTuRm2SQGynPItvMFnx1vgAckS
R3oFyHLKC5ii0APf9F/IrSV8Wc7qAmqISJbTbPN1d5uPOQ1tb/JpmowuzRlyNdvBjoWeDeyWjPiK
tSmivEE3S2NNL40V13ALTcTnYROHqnLxijVZ40B24tlpHyKn0WnXC/fciYAXwy9O2GgAogL4nqyv
0dFzUnCZzQIbv8CWIxJujS3RRFuqYe0SXzbdMNS3xWjphlQqSIWbLhtaKdIKN0zFWOpd4BJhiaFL
fqZYsTb9THHFpEsyytWs1fkKvwRkzNGWzthEVL5jF7rfu/dIQxrZMC4A75clEtcsjRHipuvCuOTt
T77H2+EN2QKvoY/vhD6SWpFe30atcsCb1Mp3dV6wr1chjLlfBCvdwTE8m/GslMfK6NaWqr6dV722
VhiKu2KGlb9LVjb8R5c6JBvMhv/yhxQ35b/2mE62Pd+BKf6zrgbRxvb707zM2eUgz5VcDCpKgb8b
5LmN3AsCmORQPYe48x4vnJcwtu07sW1dsSfS4z7GnlTxXsJs9F8mN0pqTCGKxFYc7OVmiQPTojz8
I59HOKxUwYdR0vPSYlvlRePzb5MXm7vqszc3feTMZzzpeswnetgJ9ZE/yqmv4JEn9yZZ7ppcR/PU
4zrW19Jim+G6HyAD1PHNG9m9HOnFnJm3RAsYWmVXc5Rpnn05R4m8wfUcJZb2BZ2SdmqUsnUZYAl0
85pO0oSyizolwt3FVZ0SPZde1sEjnXH6zz8ncbqy8U6jnCgPA+MkaBGhIkywElCCVTXIlkxDxSnq
tE/1zlHX6W/tmDXGtap9ZGvpfMWn+acxiP0MreJHZUxh5okVMjTlmBWASWzhsvp12XtL1PmEMYFx
2KQRn+xyBaQBhIsqt5s4wqWU9L1EjJIZ0I9B+Kk8nK8ixbMdQAXuBu6fAknb+VO2sLKELbe9u24f
bUCZ06cU6i5cPqVW17mdrWyBuZ3dfuheZefUCtxbpqSqsL2QklnlWcCGgRakJKP8XjODokkiPfBC
Nhl04PuQoF6tc5nkcmWJzsNgWQdbllMq8Xiwxs6PUBNNwSgym0u8GQ907RIvU6G2L/FWMEyXXMbd
xemtIswuScXdXZTeOqRvVj+2tLH0hYi3ucdSEzytTSa9+8LLdGGiooba14UZ4p5shNERcCLzocyy
Cv/4c5E1uO2rRDFtTqXaobeC29kB/idroXibjWbIibZYY+FtJpqn7nmv5NqrODRpgmTTT0TecTeJ
3q+xQIdogTrD7vl5pmF2jn5yI1HC6q3574W5uOEJwxNb5AnpwpEhC2ECWxyTnWEMxcqaIY1txWMh
K1hNxmAhgPvFGaq1YEMb/OxRPjA55qCLoc3Sxjd89hAvYAPIHGW1fVE8mji+mt6MhrPryfGL/w9Q
SwcI68AVFnYxAAC48gIAUEsDBBQACAAIAEhulEQAAAAAAAAAAAAAAAAgABAASW5zcGVjdG9yV2Vi
QmFja2VuZERpc3BhdGNoZXJzLmhVWAwA8zVUUwgzVFP1ARQA7Vxtc9u6sf7uX4HbM3MaZzxx2+n0
g9NmRpbomB1Z0iHpOPmU0iIssaEIHb7YUe+c+9u7C76TAF8kSMd3JvkQSyLw4MFid7EAgb18e0be
kjHb7gJ3tY7Im/E5+cuf/vxXMtpuPUp0f/mOjDyP8KchCWhIg2fqvINaWNGgjhtGgfsYRy7zie07
JA4pcX0SsjhYUv7Lo+vbwY48sWATXpAXN1oTFvC/LI4QZcMc98ld2ohxQeyAki0NNm4UUYdsA/bs
OvAhWtsR/EcBx/PYi+uvyJL5jouVQkTBehsaXeHnP7+rUQsJe8o4LZkDJeMwgu5ENnBFVPuRPeOj
VBAIAv98FrlLegEl3JB4gIcwRbO8e1VO0OjSs90NDVBG5C9NItBgSSIZEeinEwO543AhSS9TJIct
4w31IzsbtEsYDwbPA7KxIxq4thcWgucDhsDlbmQKYN3qJjHnN9bDyNAIfF4Y80/6RJuQ6y9ktFhM
4cfZGHRoNiG6ZZLxfGYZ+vW9NTdM8q9/jUyo88c/IhKWGM2+EO3zwtBMk8wNot8tpjpAAbYxmlm6
Zl4g2vR+os8+XhBAIbO5Rab6nW5BMWt+kVDSBDXJ/Ibcacb4Fr6OrvWpbn3hTd7o1gybu4H2RmQx
Mix9fD8dGYi0uDcWc1Mj2LWJbo6nI/1Om7wDDtAu0T5pM4uYt6PptNxT5F3rKGJda8BzdA2leEvQ
0YluaGMLe1R8GoPogN/0gpgLbazjB+2zBp0ZGV8uAJob63xmar/cQzl4Tiaju9FH6N6bdsHguIzv
De0OOc9vEMe8vzYt3bq3NPJxPp9wiZua8Ukfa+Z7Mp2bXGb3pnYBjVgjbB5RQGDwGD5f35s6ig6x
9JmlGcb9wtLns3NyO38A4RhkPILaEy7m+Yz3GcZmbnxBXBQGH4UL8nCrwe8gtlnaPcsYoThMEODY
KpeEVkGeVqmzZKZ9nOoftdlYw6dzBHrQTe2cq5Shm1hGTxp/GEHL99h9riPALflY0uALPqpEvyGj
yScdySeywvKgCqaeag7UM+/Ht6n00Rguz84uL8lkzgWvTXQrAb7RpxooTETAZu04YmBf4Og8b0dW
1KeBjS7uKWAb8LThli4jFjzQx3f/DpmPcI87bnjhMnC30RX5p/1sm/zzmAX0EpyGZ+8uk6fh5Rjc
2scElAU53Lvt7uzsJ/fJd+hTpZFre/mN+s7EDbd2tATbD7+uz36CUq5PuwsiJNFmqNAwGKisMDDn
+LO/9GLwr38oQ1i7Lb2OXc+Byu/WfyhK/d3NSl3m5RvtvVt/KNV4iZ4uF3YYGvRpEQmeRfR7dPlg
3Zjgq/wVPj/z7Q0FsGWpX+R/z84iYIVSSUoSLQhYkHx+f3YGjjMMi/I4HaYz1NgGUg2St+BGPYq4
2/gRisI0BP+e3SCKbY88M9eBEY9uAqTyAB71zvbdJxpG4ZtSu28vSNKtv+cNX12VhHd1NQoCeyd/
WmN5dcUbLLf34cPPBKbdr0/4QHfCc/IP8qf3TbLUtx89WiEnKwr9ytBvWMBbrHUKZimYrpKvP8Nc
lLV+kf72llPapCD3xrSlqXofBzfZJeGGDOu/pBK0az+nnGHejACXOlUN+L/BqvTm/P3Zb01NHJvm
Pso3YDxhnh829sjBMaOdR0MYjRn4odpguH6EQ+DDExyBZGweGfPe4s+p+S5CGjtM9lT3oZ8uiPVA
EwHxXV0ZsUc5bW4N2+hron68H1AAH4cq2km6pDuJiMJya1v+SPMoBmJKGsslxEdC86NgV27QzR63
DKXue+D9B4xkB2vOC/7jiBUueTt7Y9hREozSkD9p6dWYbbZxJhcV3eoxGPBfpdlFwGBNE+0y97ss
P2zzdp7Hi5hrStXOFRW5cvhbasOTjOGaf5POD8CtqNnle8O85FCl4ZWumbNLWRVIvYhZEAwMI1ee
kDCUkDUTHtZM43GftqTNNCWaf5w//hv+figoSFsfbonZeLTwzvReGfXUUrcprg5x7Xdph3ASwW+w
nA5e0Pmp72PEVqvCvI/Yxawv6ex8lNHCic+kHoc7pCtBLNGzMAXvzR4ZpeQRVMbddhwsKfbqwALV
YVaJPk5ACj1RvN2yIOJRRaojLj2KG1/k2vLE8kkmDItGZSyfWLBMYy8zgvVon9CtRQ0420QLOLKT
QI8xiJWTAFHNIDx3bjz2MmYejgeEx2Iq2e7VTNlknTedCc7Pfgj7BvUtUbkkjp/M7/ZcRE5SAQxT
I2gPegoyyzSXMemEE9BfY1iIjddQF6vUNVaoFPAjD9gduo3WMmTADXYSFyNEFdppZx91J5nBE6xe
ZCDS2pvPQSpYIp3rH/8mtRbw1Fh+1lz1dlFGxVYmvpTGJ9uLh/J4xjpy7dvAhN0VpbewGmVLg32o
JSIaxrjcZjgKBcFOV6tJvFL++W1Gpl1Mebt7dLPFG2vP4GCmbhjhhuKQVX2JPOMRwceAxVsVJlKh
lFmKl1FsW0MtlzQM3UfXc6NdMSGqWAlyYhL8lOG2cwYGinMYwODWupu2sykvTlhWpUUpe8I2lKMT
G3qEL69MagfLddfKh7vZ3qHD24JZWO1xyFtLI+Tkp4CGsQcL/NhvXQ/yigYvW5/KBF691Eqyccg2
aQye/hKx9PuJ/T6+z7MDZ6/udEz1AktoagW3Z5SMugkkRbqDchrfoXRqLLJlT7J/2ScCTRciXI/W
7mrt4TvUMfOf3JWMSF7MgJpiWylGf5d/enGdaJ1/W1NEGEhwyTwMIAbVAcHi9tm4XDXfLo1DurBX
8JAFjutDPC/VprzTv8R2XepDwvxfofr/w15LNb7nGremWvUouGNWlBvF2nXobYbdaw8+ZzLsPcjA
EYM1tB+N9xi4tOq8NH7SaSUO1zgu17uFHa0tdhPwumLtLPUJlk9rZV6pIJGuz3RHyiQ1/cekYLYi
VUQkgPWFHWbvh5J6nf4eIXnIJUcNmdcdXh8YzxkwI7sbCh8gSo1objg8cuFf2gK2PJZWsE2fVM5m
2OKtgax9DKot1t5wFgfYwYrW9pUy+3f9EKK+awphElWsF7HvsF6OIaA9C27s4Ns9oOIU29wEku8c
LePWEeq7edKyFSLfPJnQx3i1os3jAj02USDwwDYDan/bMrexk9K5WIPBa1+VHQs9rK3MpI00UClW
m3UuJ4+FnoR6UVCcO1NO/Xj4QP7zrdEfMA68dqp7ovUxpC6zkBuUCX8ghnpdhwsKXnpEN+LZr/f7
lQTn0C3j6rSSziugQUHLEj+s90RRRxrK8o3uBL/22G47Gb0ButyhkZkql46imb9Mv+JhxesRHgGs
67gd2Y9FQPVaNDxlZWEl9EKdIZ6T1tgzBIryhkqsElFp3+kSYiOQ4tj2PIxqyRVJZEJEw96Q5NVV
VvEaCIJAEbssVPzXbOVNcaBPqF6Ndj6k06hz/j6HTQ3Nd8yYb8i96b3hhEdKYEkab3wulgFbVViT
G1efSvmiCGuFv3p8mNMO/CY6gpfLaYhGyLbfSiJuDsAHskw/9TbPDmNKjfMneAbmeXkpttDqMdKJ
9lmbyO2Xb7pRZ3L9+xpwwspI9s0yMXDFOabRtLX3u5rPz8Qpc2rR50DQhe7ty2UcuNFuHrgr169o
cZtEGvosHbgTjtnvPFz5HJ2NFx4LTn7EiXbI0A0dNanDmvGXbfJBHTaeJxrLV2J2rBg6ZKUlEWi6
Y762wzt40G9IFQ+n5MUBZyop4aJrT56ly+Pwm7vl73WK81AQCpruf+jA7UcIOQ3bX0nVrIeKjT1q
ByVLOaaeydo6jrK16MeyRuTkSlLqsEwow8OWzhhCFrc0o5N6eDK1dzSwAvqa1hceclLyprt9TZz3
Pf2Yv57n7ctXnnYIagD08Kw0C90ImPH6XcrGcXuwLvEqNWEk7ZaOYlcf9FWmzhGXbLbMaPTCgm+v
SE9wX/F7FNi3lrVIjoEftNXSfXbcoOEWECke7e4a7HSmqh+AeISqF+krQP4dfMvf/qr5eL235Z0K
3pn7fGv0blSGtLR97pauA/YS0oBf5RG8uy6fU5BCteL0JcDYt+bZ0r0oCJBaFIczniTKJnt7vyyX
acyvU2Y7oBD8dvYx51ZRO8cM4jJ1St+A1rVs424oeqsL4jBgSkkY2VHcFoZ7pQ4MfM9b3VCuzK4i
sQyfWTucmsQVLl7XjrPtOMkFW4tpuK9jR3Tuo3w6ox9ey+QylL/ow95eXSUt6A6ohPvk0iCxTzf/
3r5Rux+/PuieDKe4i7fyefQFgyR4PxwKmcna8+1nd9U8bz7kZQq/2yXyegfFMskgJcDFdS3ejFTF
qEcjmlTp6k8CJQmC2zubGSmGHMN6nPSJnw8pg5TvAuP3Hm2PE192oPcpz+O5dxw4lacn23xFDrH9
2GJuAkugZlIf48Vn2jQQ8Kmrg08G8lv87hJ/C8Fd8H4W11U75/K6YDo32cqHj0/a0dQfls4z9u1h
fgniYH1cRxupzeHFuzV7Wdgw4+PRQFF0lQSLrbGV7SMKfzN7zQJBcF1ofggFO9h04HBP3IKSsrlZ
mHx7pbHWGsSlFaUHExw9149ZHHo7LmUpma7z9wUSx4Hqvc6Ttp0a5tNZ8q7EZb7Jg7MaWrtiv7F9
5u82wOn86krz402fSDxstNwRW3dJxmLxcq1tYo8fizhIKrhM5EDUuaOO27lxuMFCHTez06V3qtCf
3NCtB2v9VzHhMEguveSpFNG3t6DDotOiLWfzcaurJYtFBqrutHE1vkjPwJq7MKKbQczWPPIu8sxM
XNtjK4nobFjrbEW3VmCtsNnyS9HSOBscPkwrNeA60b5Lj7ZFhGzdEbAn19vv9Nix9mAiO+h34DeM
2Lbv8YK0o+JNncMm71SE+aeh+QPGi/u0ptgIYrd7g68gUaAVF2/wW/tqSkxAeCavzKt1GyXFFG6g
dOtyh2IKDr08aNdfDW0xHX1pvDI3+HbXXkckURvH9jaKkX5vtRxWI9mNs9iCe+zGhd9Be47bFKMS
e8Sec2PztEQvdtCxKWgxnDtgIdckMhhxa+ONBADlW0w9d/OW1BtUJXxxYTRNvHsmuysdJg/1ztV/
clw5xTLpSnC/WAZZesKrtTzBly8duxtKGLS1g+fLn23X42edEySlbjExOVzV1FhmjtGVX/Did9Uw
/aL7H+oMG9juE/kpr+RvCl7Kp5Mi9qTWMjw9vHZNRilchQz/pa/TbHdzsld6Zb9Zd5yWu6F4XWVv
1yl0ZdnlgI39HTdaYUmx/DZpuy4vm+k7JdLFXxIWPbDg2+sKioDHHWgJRHgWS9iJte6FP6vdsqhN
FMmShIO1uOG0UtLY3u9TmO8DSD/Obfc9E5wbiKgPQcIL6nHEaqxk2wflFWWnprWrjETPOnPgkSdY
wnjtL4EwuUqSP832mgBVXcVXKwAjetnTyeUDWQYUd6p7vR8q7wr0TfX39lw8+rzUG49hrmPwF839
qw2N1sy5EParGSeRXPkxIVLgOhTH132GvqWjm3p6UZpKAQt5Uz/nTb0vgFMXcTiQKOGkElRpbsm9
0Svi7a8Xx1e14RXJ5iv0yY96Z6U8oQ2Lmt/fbFuS+bwqS1VmUNmMrMg0BflAlSCL0lMqARZmiFTj
Uar5G5VglvIuKsbjiWsOx2zmRlSHqQ6ukprwcMRaIkAlFCv5+A5HzLLkqdEacWq7w7EbCemU0BWl
l1M8q4umjaNMPr3Ktk7XohvXJ5yuRc3vP123XB9/VdN1OXXf4TrdzNF3OGY1O59iPEywp8Qr5rnv
lKEleeJUjEmeuU4Jt1oiO7WYWaI6Vd0uMtEpcdjiDHRqgrL2hHBK2ihSrykZNZVw1eRtaoKBSkoy
JQuSZqYzZT5TnYGmxcrpyw7HrWYjU4jHE30pxFMkx2rGK4X8VO0MSdNSqYQWJZtSofGiHFIqcIss
Ump8cpHz6XC8NIfT4UA81ZIKaSmBaaZpUrHawiROildCooj8KHF9r7JdKyFpypzTroikNA5aGXXl
A3pVK6RGXi5Vsalq1JY8XKooHw+/NReXKvrHbKGRj0sVaUWoUqcoNcajmvagOl3OUpaT6bS+Usbi
IFfZkW7qVXnK1/nqp56tTYmp1zKTKZwSlMBKjV2mTsfUzSFVqpZ+cBK1UzoAGYcDzL8jndUP4+82
/mYiOwVnRoocaKotVDbix1Oe/hUqtnmaHGontF85if0NuDOxyw8L7poVBdnZlMOqRVSA1khzpNjN
yPXyiDo+oEa7pzkk69EJHYqcxP4OpTO5zw+H0o5UzT2lwu6l2aIU26x86I+oRgNqtK7RZXlYTmiO
Mgr7G2NHcpkfpti5im6k91IS81fSeKkw8Sw7l4KJXZSfS1G8oBpTnMlLMVllqI2cXwrminJiK8Xe
XOY7juaFepdv9ePCS+0ndOLC9vf34G139H+473YkeVYyVZuhR4T31ADl6cIUHfhX5Qwrqb9UzalF
li+liFmuJBVTQC33lnpIVW8Panmi1NxEqCaFUhIBNFI7KWOqGLWZQEoZU6WYwvRSaqIfaa4pNYcp
hYmn1AhZkllKCbg40ZSa1Usl65SyO1/iRFGKdOSI8OWkVOrgVB03FeeQUhAGpUmjFK8PhJHpcQLc
foXblwWy/ECnXBrIOBywPOhIe/RjidBhwzzniAoctlXjX2uJx9T47CJjmKqVjzq8au4v1U5KZh/H
M7X+FaQnSYZnJjuhF5Mw2N+HtWchelUerJbdTY3fUInXyAynDrKU5U3B/Y1Kojcli5ZyGjgFA1NJ
Enc4nitKFKdsG0o1rDDZm6Ibb/U8bcphDxSCeCKROKljebu+xduPIeyVqe2EU4mUw/6TSVcCt9c3
nfzu0adY4aWCPN6Y9K/QutSTZFY7oV5LGOyv1e3J4l6VTr/GRR5tJkNUEnKkxbKsgAowa+kP1dwI
b+RCVLJTJ0yMqNgJSfT+WAbUt3jV/fyGM66P5z639pIWIGeic4HmQhtbc+O8/PB/HAq+iTpFtx7o
Y6Px8Ov6/Oy/UEsHCMZic3phFAAAeKoAAFBLAQIVAxQACAAIANxTjkRqsEc4ORwAAH2iAAAQAAwA
AAAAAAAAAECkgQAAAABJbnNwZWN0b3JKUy5qc29uVVgIAPI1VFNPG0xTUEsBAhUDFAAIAAgAr6yO
RMWuFgrSCQAAkyoAAB0ADAAAAAAAAAAAQKSBhxwAAEluc3BlY3RvckpTQmFja2VuZENvbW1hbmRz
LmpzVVgIACpNU1OKt0xTUEsBAhUDFAAIAAgAvKuTRJwVF31SEQAAsbEAACEADAAAAAAAAAAAQKSB
tCYAAEluc3BlY3RvckpTQmFja2VuZERpc3BhdGNoZXJzLmNwcFVYCACETVNTQ01TU1BLAQIVAxQA
CAAIAEyykUT4j1EZzQgAAAIvAAAfAAwAAAAAAAAAAECkgWU4AABJbnNwZWN0b3JKU0JhY2tlbmRE
aXNwYXRjaGVycy5oVVgIACpNU1OftVBTUEsBAhUDFAAIAAgA81OOREKHucTbTwAAvEACABEADAAA
AAAAAAAAQKSBj0EAAEluc3BlY3RvcldlYi5qc29uVVgIAPI1VFN6G0xTUEsBAhUDFAAIAAgAQK6O
RDz+mbgfFgAAUo8AAB4ADAAAAAAAAAAAQKSBuZEAAEluc3BlY3RvcldlYkJhY2tlbmRDb21tYW5k
cy5qc1VYCADzNVRTeLpMU1BLAQIVAxQACAAIAG9wlETrwBUWdjEAALjyAgAiAAwAAAAAAAAAAECk
gTSoAABJbnNwZWN0b3JXZWJCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwVVgIACU2VFMiNlRTUEsBAhUD
FAAIAAgASG6URMZic3phFAAAeKoAACAADAAAAAAAAAAAQKSBCtoAAEluc3BlY3RvcldlYkJhY2tl
bmREaXNwYXRjaGVycy5oVVgIAPM1VFMIM1RTUEsFBgAAAAAIAAgArgIAAMnuAAAAAA==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>229782</attachid>
            <date>2014-04-20 21:25:17 -0700</date>
            <delta_ts>2014-05-24 10:45:54 -0700</delta_ts>
            <desc>WIP 4: generates all except type builders</desc>
            <filename>bug-131596-20140420212442.patch</filename>
            <type>text/plain</type>
            <size>252087</size>
            <attacher name="Brian Burg">burg</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTY3NTc2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBi
MjZjYjg3MmJhNzY3OTg1YTIyZWY2NGRkNDM3OTk1NDZiZGZiNTk5Li5iMjA1YzBhYmJmNWRiNzlm
NTZmZjJmZjI2ZjMzZmM0ODQ0YWZhNDNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNzUgQEAKKzIwMTQtMDQtMTcgIEJyaWFuIEouIEJ1cmcgIDxidXJnQGNzLndhc2hpbmd0
b24uZWR1PgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IHJld3JpdGUgQ29kZUdlbmVyYXRvcklu
c3BlY3RvciB0byBiZSBtb2R1bGFyIGFuZCB0ZXN0YWJsZQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMxNTk2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9Db2RlR2VuZXJh
dG9ySW5zcGVjdG9yMi5weTogQWRkZWQuCisgICAgICAgIChnZW5lcmF0ZV9mcm9tX3NwZWNpZmlj
YXRpb24pOgorICAgICAgICAoZ2VuZXJhdGVfZnJvbV9zcGVjaWZpY2F0aW9uLmxvYWRfc3BlY2lm
aWNhdGlvbik6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9fX2luaXRfXy5w
eTogQWRkZWQuCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9i
YWNrZW5kX2NvbW1hbmRzLnB5OiBBZGRlZC4KKyAgICAgICAgKG1ha2VfamF2YXNjcmlwdF9pZGVu
dGlmaWVyKToKKyAgICAgICAgKG1ha2VfamF2YXNjcmlwdF9pZGVudGlmaWVyLnJlcGxhY2VDYWxs
YmFjayk6CisgICAgICAgIChCYWNrZW5kQ29tbWFuZHNHZW5lcmF0b3IpOgorICAgICAgICAoQmFj
a2VuZENvbW1hbmRzR2VuZXJhdG9yLl9faW5pdF9fKToKKyAgICAgICAgKEJhY2tlbmRDb21tYW5k
c0dlbmVyYXRvci5tb2RlbCk6CisgICAgICAgIChCYWNrZW5kQ29tbWFuZHNHZW5lcmF0b3Iub3V0
cHV0X2ZpbGVuYW1lKToKKyAgICAgICAgKEJhY2tlbmRDb21tYW5kc0dlbmVyYXRvci53cml0ZV9v
dXRwdXRfZmlsZXMpOgorICAgICAgICAoQmFja2VuZENvbW1hbmRzR2VuZXJhdG9yLmdlbmVyYXRl
X2xpY2Vuc2UpOgorICAgICAgICAoQmFja2VuZENvbW1hbmRzR2VuZXJhdG9yLmdlbmVyYXRlX2Jh
Y2tlbmRfY29tbWFuZHMpOgorICAgICAgICAoQmFja2VuZENvbW1hbmRzR2VuZXJhdG9yLmdlbmVy
YXRlX2RvbWFpbik6CisgICAgICAgIChCYWNrZW5kQ29tbWFuZHNHZW5lcmF0b3IuZ2VuZXJhdGVf
ZG9tYWluLmdlbmVyYXRlX3BhcmFtZXRlcl9vYmplY3QpOgorICAgICAgICAqIGluc3BlY3Rvci9z
Y3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weTogQWRk
ZWQuCisgICAgICAgICh1Y2ZpcnN0KToKKyAgICAgICAgKEJhY2tlbmREaXNwYXRjaGVySGVhZGVy
R2VuZXJhdG9yKToKKyAgICAgICAgKEJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yLl9f
aW5pdF9fKToKKyAgICAgICAgKEJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yLm1vZGVs
KToKKyAgICAgICAgKEJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yLm91dHB1dF9maWxl
bmFtZSk6CisgICAgICAgIChCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvci53cml0ZV9v
dXRwdXRfZmlsZXMpOgorICAgICAgICAoQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3Iu
Z2VuZXJhdGVfbGljZW5zZSk6CisgICAgICAgIChCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVy
YXRvci5nZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXIpOgorICAgICAgICAoQmFja2VuZERpc3Bh
dGNoZXJIZWFkZXJHZW5lcmF0b3IuZ2VuZXJhdGVfYmFja2VuZF9kaXNwYXRjaGVyLnNob3VsZF9n
ZW5lcmF0ZV9kb21haW4pOgorICAgICAgICAoQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0
b3IuZ2VuZXJhdGVfZG9tYWluX2hhbmRsZXIpOgorICAgICAgICAoQmFja2VuZERpc3BhdGNoZXJI
ZWFkZXJHZW5lcmF0b3IuZ2VuZXJhdGVfaGFuZGxlcl9jb21tYW5kKToKKyAgICAgICAgKEJhY2tl
bmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yLmdlbmVyYXRlX2FzeW5jX2hhbmRsZXJfY29tbWFu
ZCk6CisgICAgICAgIChCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvci5nZW5lcmF0ZV9k
b21haW5fZGlzcGF0Y2hlcik6CisgICAgICAgIChCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVy
YXRvci5nZW5lcmF0ZV9kaXNwYXRjaGVyX2NvbW1hbmQpOgorICAgICAgICAqIGluc3BlY3Rvci9z
Y3JpcHRzL2NvZGVnZW4vZ2VuZXJhdG9yLnB5OiBBZGRlZC4KKyAgICAgICAgKEdlbmVyYXRvcik6
CisgICAgICAgIChHZW5lcmF0b3IuX19pbml0X18pOgorICAgICAgICAoR2VuZXJhdG9yLm1vZGVs
KToKKyAgICAgICAgKEdlbmVyYXRvci53cml0ZV9vdXRwdXRfZmlsZXMpOgorICAgICAgICAoR2Vu
ZXJhdG9yLmNwcF9ndWFyZF9mb3JfZG9tYWluKToKKyAgICAgICAgKER1bW15R2VuZXJhdG9yKToK
KyAgICAgICAgKEluY3JlbWVudGFsRmlsZVdyaXRlcik6CisgICAgICAgIChJbmNyZW1lbnRhbEZp
bGVXcml0ZXIuX19pbml0X18pOgorICAgICAgICAoSW5jcmVtZW50YWxGaWxlV3JpdGVyLndyaXRl
KToKKyAgICAgICAgKEluY3JlbWVudGFsRmlsZVdyaXRlci5jbG9zZSk6CisgICAgICAgICogaW5z
cGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0b3JfdGVtcGxhdGVzLnB5OiBBZGRlZC4KKyAg
ICAgICAgKEdlbmVyYXRvclRlbXBsYXRlcyk6CisgICAgICAgIChTdHJpbmcpOgorICAgICAgICAq
IGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vbW9kZWxzLnB5OiBBZGRlZC4KKyAgICAgICAgKFBh
cnNlRXhjZXB0aW9uKToKKyAgICAgICAgKFR5cGVjaGVja0V4Y2VwdGlvbik6CisgICAgICAgIChG
cmFtZXdvcmspOgorICAgICAgICAoRnJhbWV3b3JrLl9faW5pdF9fKToKKyAgICAgICAgKEZyYW1l
d29yay5zZXR0aW5nKToKKyAgICAgICAgKEZyYW1ld29yay5mcm9tU3RyaW5nKToKKyAgICAgICAg
KEZyYW1ld29ya3MpOgorICAgICAgICAoVHlwZU1vZGUpOgorICAgICAgICAoVHlwZU1vZGUuX19p
bml0X18pOgorICAgICAgICAoVHlwZU1vZGUuZnJvbVN0cmluZyk6CisgICAgICAgIChUeXBlTW9k
ZXMpOgorICAgICAgICAoVHlwZVJlZmVyZW5jZSk6CisgICAgICAgIChUeXBlUmVmZXJlbmNlLl9f
aW5pdF9fKToKKyAgICAgICAgKFR5cGVSZWZlcmVuY2UucmVmZXJlbmNlZF9uYW1lKToKKyAgICAg
ICAgKFR5cGUpOgorICAgICAgICAoVHlwZS5fX2luaXRfXyk6CisgICAgICAgIChUeXBlLl9fZXFf
Xyk6CisgICAgICAgIChUeXBlLl9faGFzaF9fKToKKyAgICAgICAgKFR5cGUuaXNfZW51bSk6Cisg
ICAgICAgIChUeXBlLnR5cGVfZG9tYWluKToKKyAgICAgICAgKFR5cGUudHlwZV9tb2RlKToKKyAg
ICAgICAgKFR5cGUucXVhbGlmaWVkX25hbWUpOgorICAgICAgICAoVHlwZS5yZXNvbHZlX3R5cGVf
cmVmZXJlbmNlcyk6CisgICAgICAgIChUeXBlLmluX3BhcmFtZXRlcl90eXBlKToKKyAgICAgICAg
KFR5cGUub3V0X3BhcmFtZXRlcl90eXBlKToKKyAgICAgICAgKFR5cGUudHlwZV9idWlsZGVyX3R5
cGUpOgorICAgICAgICAoT2JqZWN0VHlwZSk6CisgICAgICAgIChPYmplY3RUeXBlLl9faW5pdF9f
KToKKyAgICAgICAgKE9iamVjdFR5cGUudHlwZV9kb21haW4pOgorICAgICAgICAoT2JqZWN0VHlw
ZS50eXBlX21vZGUpOgorICAgICAgICAoT2JqZWN0VHlwZS5xdWFsaWZpZWRfbmFtZSk6CisgICAg
ICAgIChPYmplY3RUeXBlLnJlc29sdmVfdHlwZV9yZWZlcmVuY2VzKToKKyAgICAgICAgKE9iamVj
dFR5cGUuaW5fcGFyYW1ldGVyX3R5cGUpOgorICAgICAgICAoT2JqZWN0VHlwZS5vdXRfcGFyYW1l
dGVyX3R5cGUpOgorICAgICAgICAoT2JqZWN0VHlwZS50eXBlX2J1aWxkZXJfdHlwZSk6CisgICAg
ICAgIChQcmltaXRpdmVUeXBlKToKKyAgICAgICAgKFByaW1pdGl2ZVR5cGUuX19pbml0X18pOgor
ICAgICAgICAoUHJpbWl0aXZlVHlwZS50eXBlX2RvbWFpbik6CisgICAgICAgIChQcmltaXRpdmVU
eXBlLnR5cGVfbW9kZSk6CisgICAgICAgIChQcmltaXRpdmVUeXBlLnF1YWxpZmllZF9uYW1lKToK
KyAgICAgICAgKFByaW1pdGl2ZVR5cGUuaW5fcGFyYW1ldGVyX3R5cGUpOgorICAgICAgICAoUHJp
bWl0aXZlVHlwZS5vdXRfcGFyYW1ldGVyX3R5cGUpOgorICAgICAgICAoUHJpbWl0aXZlVHlwZS50
eXBlX2J1aWxkZXJfdHlwZSk6CisgICAgICAgIChQcmltaXRpdmVUeXBlLmNwcF9wcmltaXRpdmVf
bmFtZSk6CisgICAgICAgIChBbGlhc2VkVHlwZSk6CisgICAgICAgIChBbGlhc2VkVHlwZS5fX2lu
aXRfXyk6CisgICAgICAgIChBbGlhc2VkVHlwZS50eXBlX2RvbWFpbik6CisgICAgICAgIChBbGlh
c2VkVHlwZS50eXBlX21vZGUpOgorICAgICAgICAoQWxpYXNlZFR5cGUucXVhbGlmaWVkX25hbWUp
OgorICAgICAgICAoQWxpYXNlZFR5cGUucmVzb2x2ZV90eXBlX3JlZmVyZW5jZXMpOgorICAgICAg
ICAoQWxpYXNlZFR5cGUuaW5fcGFyYW1ldGVyX3R5cGUpOgorICAgICAgICAoQWxpYXNlZFR5cGUu
b3V0X3BhcmFtZXRlcl90eXBlKToKKyAgICAgICAgKEFsaWFzZWRUeXBlLnR5cGVfYnVpbGRlcl90
eXBlKToKKyAgICAgICAgKEVudW1UeXBlKToKKyAgICAgICAgKEVudW1UeXBlLl9faW5pdF9fKToK
KyAgICAgICAgKEVudW1UeXBlLmlzX2VudW0pOgorICAgICAgICAoRW51bVR5cGUudHlwZV9kb21h
aW4pOgorICAgICAgICAoRW51bVR5cGUudHlwZV9tb2RlKToKKyAgICAgICAgKEVudW1UeXBlLmVu
dW1fdmFsdWVzKToKKyAgICAgICAgKEVudW1UeXBlLnF1YWxpZmllZF9uYW1lKToKKyAgICAgICAg
KEVudW1UeXBlLnJlc29sdmVfdHlwZV9yZWZlcmVuY2VzKToKKyAgICAgICAgKEVudW1UeXBlLmlu
X3BhcmFtZXRlcl90eXBlKToKKyAgICAgICAgKEVudW1UeXBlLm91dF9wYXJhbWV0ZXJfdHlwZSk6
CisgICAgICAgIChFbnVtVHlwZS50eXBlX2J1aWxkZXJfdHlwZSk6CisgICAgICAgIChWZWN0b3JU
eXBlKToKKyAgICAgICAgKFZlY3RvclR5cGUuX19pbml0X18pOgorICAgICAgICAoVmVjdG9yVHlw
ZS50eXBlX2RvbWFpbik6CisgICAgICAgIChWZWN0b3JUeXBlLnR5cGVfbW9kZSk6CisgICAgICAg
IChWZWN0b3JUeXBlLnF1YWxpZmllZF9uYW1lKToKKyAgICAgICAgKFZlY3RvclR5cGUucmVzb2x2
ZV90eXBlX3JlZmVyZW5jZXMpOgorICAgICAgICAoVmVjdG9yVHlwZS5pbl9wYXJhbWV0ZXJfdHlw
ZSk6CisgICAgICAgIChWZWN0b3JUeXBlLm91dF9wYXJhbWV0ZXJfdHlwZSk6CisgICAgICAgIChW
ZWN0b3JUeXBlLnR5cGVfYnVpbGRlcl90eXBlKToKKyAgICAgICAgKGNoZWNrX2Zvcl9yZXF1aXJl
ZF9wcm9wZXJ0aWVzKToKKyAgICAgICAgKFByb3RvY29sKToKKyAgICAgICAgKFByb3RvY29sLl9f
aW5pdF9fKToKKyAgICAgICAgKFByb3RvY29sLnBhcnNlX3NwZWNpZmljYXRpb24pOgorICAgICAg
ICAoUHJvdG9jb2wucGFyc2VfZG9tYWluKToKKyAgICAgICAgKFByb3RvY29sLnBhcnNlX3R5cGVf
ZGVjbGFyYXRpb24pOgorICAgICAgICAoUHJvdG9jb2wucGFyc2VfdHlwZV9tZW1iZXIpOgorICAg
ICAgICAoUHJvdG9jb2wucGFyc2VfY29tbWFuZCk6CisgICAgICAgIChQcm90b2NvbC5wYXJzZV9l
dmVudCk6CisgICAgICAgIChQcm90b2NvbC5wYXJzZV9wYXJhbWV0ZXIpOgorICAgICAgICAoUHJv
dG9jb2wucmVzb2x2ZV90eXBlcyk6CisgICAgICAgIChQcm90b2NvbC5sb29rdXBfdHlwZV9mb3Jf
ZGVjbGFyYXRpb24pOgorICAgICAgICAoUHJvdG9jb2wubG9va3VwX3R5cGVfcmVmZXJlbmNlKToK
KyAgICAgICAgKERvbWFpbik6CisgICAgICAgIChEb21haW4uX19pbml0X18pOgorICAgICAgICAo
RG9tYWluLnJlc29sdmVfdHlwZV9yZWZlcmVuY2VzKToKKyAgICAgICAgKERvbWFpbnMpOgorICAg
ICAgICAoVHlwZURlY2xhcmF0aW9uKToKKyAgICAgICAgKFR5cGVEZWNsYXJhdGlvbi5fX2luaXRf
Xyk6CisgICAgICAgIChUeXBlRGVjbGFyYXRpb24ucmVzb2x2ZV90eXBlX3JlZmVyZW5jZXMpOgor
ICAgICAgICAoVHlwZU1lbWJlcik6CisgICAgICAgIChUeXBlTWVtYmVyLl9faW5pdF9fKToKKyAg
ICAgICAgKFR5cGVNZW1iZXIucmVzb2x2ZV90eXBlX3JlZmVyZW5jZXMpOgorICAgICAgICAoUGFy
YW1ldGVyKToKKyAgICAgICAgKFBhcmFtZXRlci5fX2luaXRfXyk6CisgICAgICAgIChQYXJhbWV0
ZXIucmVzb2x2ZV90eXBlX3JlZmVyZW5jZXMpOgorICAgICAgICAoQ29tbWFuZCk6CisgICAgICAg
IChDb21tYW5kLl9faW5pdF9fKToKKyAgICAgICAgKENvbW1hbmQucmVzb2x2ZV90eXBlX3JlZmVy
ZW5jZXMpOgorICAgICAgICAoRXZlbnQpOgorICAgICAgICAoRXZlbnQuX19pbml0X18pOgorICAg
ICAgICAoRXZlbnQucmVzb2x2ZV90eXBlX3JlZmVyZW5jZXMpOgorICAgICAgICAqIGluc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tZHVwbGljYXRlLXR5cGUtZGVjbGFyYXRp
b25zLmpzb24tZXJyb3I6IEFkZGVkLgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2V4cGVjdGVkL2ZhaWwtb24tdHlwZS1kZWNsYXJhdGlvbi11c2luZy10eXBlLXJlZmVyZW5jZS5q
c29uLWVycm9yOiBBZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBl
Y3RlZC9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1kZWNsYXJhdGlvbi5q
c29uLWVycm9yOiBBZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBl
Y3RlZC9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1tZW1iZXIuanNvbi1l
cnJvcjogQWRkZWQuCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQv
c2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbi1lcnJvcjogQWRkZWQuCisgICAgICAg
ICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1kdXBsaWNhdGUtdHlwZS1kZWNsYXJh
dGlvbnMuanNvbjogQWRkZWQuCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFp
bC1vbi10eXBlLWRlY2xhcmF0aW9uLXVzaW5nLXR5cGUtcmVmZXJlbmNlLmpzb246IEFkZGVkLgor
ICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tdW5rbm93bi10eXBlLXJl
ZmVyZW5jZS1pbi10eXBlLWRlY2xhcmF0aW9uLmpzb246IEFkZGVkLgorICAgICAgICAqIGluc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVyZW5jZS1pbi10eXBl
LW1lbWJlci5qc29uOiBBZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9z
YW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uOiBBZGRlZC4KKyAgICAgICAgKiBpbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy90eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5
cGUuanNvbjogQWRkZWQuCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvdHlwZS1k
ZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb246IEFkZGVkLgorICAgICAgICAqIGluc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL3R5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb246IEFkZGVkLgorCiAy
MDE0LTA0LTIwICBMw6FzemzDsyBMYW5nw7MgIDxsbGFuZ28udS1zemVnZWRAcGFydG5lci5zYW1z
dW5nLmNvbT4KIAogICAgICAgICBKYXZhU2NyaXB0Q29yZTogQVJNIGJ1aWxkIGZpeCBhZnRlciBy
MTY3MDk0LgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IyLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IyLnB5Cm5ldyBmaWxlIG1vZGUg
MTAwNzU1CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU2
NDFhMWUzNzBmNDBjNjVlMDMwMzdiOTk3MzkwMGI1ZWVjNWM5MjIKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvQ29kZUdlbmVyYXRvcklu
c3BlY3RvcjIucHkKQEAgLTAsMCArMSwxNjYgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIwor
IyBDb3B5cmlnaHQgKGMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBD
b3B5cmlnaHQgKGMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisj
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisjIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0
IG9zLnBhdGgKK2ltcG9ydCByZQoraW1wb3J0IHN5cworaW1wb3J0IHN0cmluZworZnJvbSBzdHJp
bmcgaW1wb3J0IFRlbXBsYXRlCitpbXBvcnQgb3B0cGFyc2UKK2ltcG9ydCBsb2dnaW5nCisKK3Ry
eToKKyAgICBpbXBvcnQganNvbgorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIGltcG9ydCBzaW1w
bGVqc29uIGFzIGpzb24KKworZnJvbSBjb2RlZ2VuIGltcG9ydCAqCisKKworIyBVc2UgYSBnbG9i
YWwgbG9nZ2VyLCB3aGljaCBub3JtYWxseSBvbmx5IGxvZ3MgZXJyb3JzLgorIyBJdCBjYW4gYmUg
Y29uZmlndXJlZCB0byBsb2cgZGVidWcgbWVzc2FnZXMgZnJvbSB0aGUgQ0xJLgorbG9nZ2luZy5i
YXNpY0NvbmZpZyhmb3JtYXQ9JyUobGV2ZWxuYW1lKXM6ICUobWVzc2FnZSlzJywgbGV2ZWw9bG9n
Z2luZy5FUlJPUikKK2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQorCisKKyMgQSB3
cml0ZXIgdGhhdCBvbmx5IHVwZGF0ZXMgZmlsZSBpZiBpdCBhY3R1YWxseSBjaGFuZ2VkLgorY2xh
c3MgSW5jcmVtZW50YWxGaWxlV3JpdGVyOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlcGF0
aCwgZm9yY2Vfb3V0cHV0KToKKyAgICAgICAgc2VsZi5fZmlsZXBhdGggPSBmaWxlcGF0aAorICAg
ICAgICBzZWxmLl9vdXRwdXQgPSAiIgorICAgICAgICBzZWxmLmZvcmNlX291dHB1dCA9IGZvcmNl
X291dHB1dAorCisgICAgZGVmIHdyaXRlKHNlbGYsIHRleHQpOgorICAgICAgICBzZWxmLl9vdXRw
dXQgKz0gdGV4dAorCisgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICB0ZXh0X2NoYW5nZWQg
PSBUcnVlCisgICAgICAgIHNlbGYuX291dHB1dCA9IHNlbGYuX291dHB1dC5yc3RyaXAoKSArICJc
biIKKworICAgICAgICB0cnk6CisgICAgICAgICAgICByZWFkX2ZpbGUgPSBvcGVuKHNlbGYuX2Zp
bGVwYXRoLCAiciIpCisgICAgICAgICAgICBvbGRfdGV4dCA9IHJlYWRfZmlsZS5yZWFkKCkKKyAg
ICAgICAgICAgIHJlYWRfZmlsZS5jbG9zZSgpCisgICAgICAgICAgICB0ZXh0X2NoYW5nZWQgPSBv
bGRfdGV4dCAhPSBzZWxmLl9vdXRwdXQKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgIyBJ
Z25vcmUsIGp1c3Qgb3ZlcndyaXRlIGJ5IGRlZmF1bHQKKyAgICAgICAgICAgIHBhc3MKKworICAg
ICAgICBpZiB0ZXh0X2NoYW5nZWQgb3Igc2VsZi5mb3JjZV9vdXRwdXQ6CisgICAgICAgICAgICBv
dXRfZmlsZSA9IG9wZW4oc2VsZi5fZmlsZXBhdGgsICJ3IikKKyAgICAgICAgICAgIG91dF9maWxl
LndyaXRlKHNlbGYuX291dHB1dCkKKyAgICAgICAgICAgIG91dF9maWxlLmNsb3NlKCkKKworCitk
ZWYgZ2VuZXJhdGVfZnJvbV9zcGVjaWZpY2F0aW9uKHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxl
cGF0aD1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdXBwbGVtZW50YWxf
c3BlY2lmaWNhdGlvbl9maWxlcGF0aHM9W10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbmNhdGVuYXRlX291dHB1dD1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgb3V0cHV0X2RpcnBhdGg9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZm9yY2Vfb3V0cHV0PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm
cmFtZXdvcmtfbmFtZT0iIik6CisKKyAgICBkZWYgbG9hZF9zcGVjaWZpY2F0aW9uKHByb3RvY29s
LCBmaWxlcGF0aCwgaXNTdXBwbGVtZW50YWw9RmFsc2UpOgorICAgICAgICB0cnk6CisgICAgICAg
ICAgICB3aXRoIG9wZW4oZmlsZXBhdGgsICJyIikgYXMgaW5wdXRfZmlsZToKKyAgICAgICAgICAg
ICAgICBwYXJzZWRfanNvbiA9IGpzb24ubG9hZChpbnB1dF9maWxlKQorICAgICAgICAgICAgICAg
IHByb3RvY29sLnBhcnNlX3NwZWNpZmljYXRpb24ocGFyc2VkX2pzb24sIGlzU3VwcGxlbWVudGFs
PWlzU3VwcGxlbWVudGFsKQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvciBhcyBlOgorICAgICAg
ICAgICAgcmFpc2UgRXhjZXB0aW9uKCJFcnJvciBwYXJzaW5nIHZhbGlkIEpTT04gaW4gZmlsZTog
IiArIGZpbGVwYXRoKQorCisgICAgcHJvdG9jb2wgPSBtb2RlbHMuUHJvdG9jb2woZnJhbWV3b3Jr
X25hbWUpCisgICAgZm9yIHNwZWNpZmljYXRpb24gaW4gc3VwcGxlbWVudGFsX3NwZWNpZmljYXRp
b25fZmlsZXBhdGhzOgorICAgICAgICBsb2FkX3NwZWNpZmljYXRpb24ocHJvdG9jb2wsIHNwZWNp
ZmljYXRpb24sIGlzU3VwcGxlbWVudGFsPVRydWUpCisgICAgbG9hZF9zcGVjaWZpY2F0aW9uKHBy
b3RvY29sLCBwcmltYXJ5X3NwZWNpZmljYXRpb25fZmlsZXBhdGgsIGlzU3VwcGxlbWVudGFsPUZh
bHNlKQorCisgICAgcHJvdG9jb2wucmVzb2x2ZV90eXBlcygpCisKKyAgICBnZW5lcmF0b3JzID0g
W10KKyAgICBnZW5lcmF0b3JzLmFwcGVuZChCYWNrZW5kQ29tbWFuZHNHZW5lcmF0b3IocHJvdG9j
b2wsIHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aCkpCisgICAgZ2VuZXJhdG9ycy5hcHBl
bmQoQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IocHJvdG9jb2wsIHByaW1hcnlfc3Bl
Y2lmaWNhdGlvbl9maWxlcGF0aCkpCisgICAgZ2VuZXJhdG9ycy5hcHBlbmQoQmFja2VuZERpc3Bh
dGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihwcm90b2NvbCwgcHJpbWFyeV9zcGVjaWZpY2F0
aW9uX2ZpbGVwYXRoKSkKKyAgICBnZW5lcmF0b3JzLmFwcGVuZChGcm9udGVuZERpc3BhdGNoZXJI
ZWFkZXJHZW5lcmF0b3IocHJvdG9jb2wsIHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aCkp
CisgICAgZ2VuZXJhdG9ycy5hcHBlbmQoRnJvbnRlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25H
ZW5lcmF0b3IocHJvdG9jb2wsIHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aCkpCisjICAg
IGdlbmVyYXRvcnMuYXBwZW5kKFR5cGVCdWlsZGVySGVhZGVyR2VuZXJhdG9yKHByb3RvY29sLCBw
cmltYXJ5X3NwZWNpZmljYXRpb25fZmlsZXBhdGgpKQorIyAgICBnZW5lcmF0b3JzLmFwcGVuZChU
eXBlQnVpbGRlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKHByb3RvY29sLCBwcmltYXJ5X3NwZWNp
ZmljYXRpb25fZmlsZXBhdGgpKQorCisgICAgc2luZ2xlX291dHB1dF9maWxlX2NvbnRlbnRzID0g
W10KKworICAgIGZvciBnZW5lcmF0b3IgaW4gZ2VuZXJhdG9yczoKKyAgICAgICAgb3V0cHV0ID0g
Z2VuZXJhdG9yLmdlbmVyYXRlX291dHB1dCgpCisgICAgICAgIGlmIGNvbmNhdGVuYXRlX291dHB1
dDoKKyAgICAgICAgICAgIHNpbmdsZV9vdXRwdXRfZmlsZV9jb250ZW50cy5hcHBlbmQoJyMjIyBC
ZWdpbiBGaWxlOiAlcycgJSBnZW5lcmF0b3Iub3V0cHV0X2ZpbGVuYW1lKCkpCisgICAgICAgICAg
ICBzaW5nbGVfb3V0cHV0X2ZpbGVfY29udGVudHMuYXBwZW5kKG91dHB1dCkKKyAgICAgICAgICAg
IHNpbmdsZV9vdXRwdXRfZmlsZV9jb250ZW50cy5hcHBlbmQoJyMjIyBFbmQgRmlsZTogJXMnICUg
Z2VuZXJhdG9yLm91dHB1dF9maWxlbmFtZSgpKQorICAgICAgICAgICAgc2luZ2xlX291dHB1dF9m
aWxlX2NvbnRlbnRzLmFwcGVuZCgnJykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG91dHB1
dF9maWxlID0gSW5jcmVtZW50YWxGaWxlV3JpdGVyKG9zLnBhdGguam9pbihvdXRwdXRfZGlycGF0
aCwgZ2VuZXJhdG9yLm91dHB1dF9maWxlbmFtZSgpKSwgZm9yY2Vfb3V0cHV0KQorICAgICAgICAg
ICAgb3V0cHV0X2ZpbGUud3JpdGUob3V0cHV0KQorICAgICAgICAgICAgb3V0cHV0X2ZpbGUuY2xv
c2UoKQorCisgICAgaWYgY29uY2F0ZW5hdGVfb3V0cHV0OgorICAgICAgICAgICAgZmlsZW5hbWUg
PSBvcy5wYXRoLmpvaW4ob3MucGF0aC5iYXNlbmFtZShwcmltYXJ5X3NwZWNpZmljYXRpb25fZmls
ZXBhdGgpICsgJy1yZXN1bHQnKQorICAgICAgICAgICAgb3V0cHV0X2ZpbGUgPSBJbmNyZW1lbnRh
bEZpbGVXcml0ZXIob3MucGF0aC5qb2luKG91dHB1dF9kaXJwYXRoLCBmaWxlbmFtZSksIGZvcmNl
X291dHB1dCkKKyAgICAgICAgICAgIG91dHB1dF9maWxlLndyaXRlKCdcbicuam9pbihzaW5nbGVf
b3V0cHV0X2ZpbGVfY29udGVudHMpKQorICAgICAgICAgICAgb3V0cHV0X2ZpbGUuY2xvc2UoKQor
CisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgYWxsb3dlZF9mcmFtZXdvcmtfbmFt
ZXMgPSBbJ1dURicsICdKYXZhU2NyaXB0Q29yZScsICdXZWJDb3JlJywgJ1dlYktpdCcsICdXZWJL
aXQyJywgJ1Rlc3QnXQorICAgIGNsaV9wYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIodXNh
Z2U9InVzYWdlOiAlcHJvZyBbb3B0aW9uc10gUHJpbWFyeVByb3RvY29sLmpzb24gW1N1cHBsZW1l
bnRhbFByb3RvY29sLmpzb24gLi4uXSIpCisgICAgY2xpX3BhcnNlci5hZGRfb3B0aW9uKCItbyIs
ICItLW91dHB1dERpciIsIGhlbHA9IkRpcmVjdG9yeSB3aGVyZSBnZW5lcmF0ZWQgZmlsZXMgc2hv
dWxkIGJlIHdyaXR0ZW4uIikKKyAgICBjbGlfcGFyc2VyLmFkZF9vcHRpb24oIi0tZnJhbWV3b3Jr
IiwgdHlwZT0iY2hvaWNlIiwgY2hvaWNlcz1hbGxvd2VkX2ZyYW1ld29ya19uYW1lcywgaGVscD0i
VGhlIGZyYW1ld29yayB0aGF0IHRoZSBwcmltYXJ5IHNwZWNpZmljYXRpb24gYmVsb25ncyB0by4i
KQorICAgIGNsaV9wYXJzZXIuYWRkX29wdGlvbigiLS1mb3JjZSIsIGFjdGlvbj0ic3RvcmVfdHJ1
ZSIsIGhlbHA9IkZvcmNlIG91dHB1dCBvZiBnZW5lcmF0ZWQgc2NyaXB0cywgZXZlbiBpZiBub3Ro
aW5nIGNoYW5nZWQuIikKKyAgICBjbGlfcGFyc2VyLmFkZF9vcHRpb24oIi12IiwgIi0tZGVidWci
LCBhY3Rpb249InN0b3JlX3RydWUiLCBoZWxwPSJMb2cgZXh0cmEgb3V0cHV0IGZvciBkZWJ1Z2dp
bmcgdGhlIGdlbmVyYXRvciBpdHNlbGYuIikKKyAgICBjbGlfcGFyc2VyLmFkZF9vcHRpb24oIi10
IiwgIi0tdGVzdCIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGhlbHA9IkVuYWJsZSB0ZXN0IG1vZGUu
IFVzZSB1bmlxdWUgb3V0cHV0IGZpbGVuYW1lcyBjcmVhdGVkIGJ5IHByZXBlbmRpbmcgdGhlIGlu
cHV0IGZpbGVuYW1lLiIpCisKKyAgICBvcHRpb25zID0gTm9uZQorCisgICAgYXJnX29wdGlvbnMs
IGFyZ192YWx1ZXMgPSBjbGlfcGFyc2VyLnBhcnNlX2FyZ3MoKQorICAgIGlmIChsZW4oYXJnX3Zh
bHVlcykgPCAxKToKKyAgICAgICAgcmFpc2UgUGFyc2VFeGNlcHRpb24oIkF0IGxlYXN0IG9uZSBw
bGFpbiBhcmd1bWVudCBleHBlY3RlZCIpCisKKyAgICBpZiBub3QgYXJnX29wdGlvbnMub3V0cHV0
RGlyOgorICAgICAgICByYWlzZSBQYXJzZUV4Y2VwdGlvbigiTWlzc2luZyBvdXRwdXQgZGlyZWN0
b3J5IikKKworICAgIGlmIGFyZ19vcHRpb25zLmRlYnVnOgorICAgICAgICBsb2cuc2V0TGV2ZWwo
bG9nZ2luZy5ERUJVRykKKworICAgIG9wdGlvbnMgPSB7CisgICAgICAgICdwcmltYXJ5X3NwZWNp
ZmljYXRpb25fZmlsZXBhdGgnOiBhcmdfdmFsdWVzWzBdLAorICAgICAgICAnc3VwcGxlbWVudGFs
X3NwZWNpZmljYXRpb25fZmlsZXBhdGhzJzogYXJnX3ZhbHVlc1sxOl0sCisgICAgICAgICdvdXRw
dXRfZGlycGF0aCc6IGFyZ19vcHRpb25zLm91dHB1dERpciwKKyAgICAgICAgJ2NvbmNhdGVuYXRl
X291dHB1dCc6IGFyZ19vcHRpb25zLnRlc3QsCisgICAgICAgICdmcmFtZXdvcmtfbmFtZSc6IGFy
Z19vcHRpb25zLmZyYW1ld29yaywKKyAgICAgICAgJ2ZvcmNlX291dHB1dCc6IGFyZ19vcHRpb25z
LmZvcmNlCisgICAgfQorCisgICAgdHJ5OgorICAgICAgICBnZW5lcmF0ZV9mcm9tX3NwZWNpZmlj
YXRpb24oKipvcHRpb25zKQorICAgIGV4Y2VwdCAoUGFyc2VFeGNlcHRpb24sIFR5cGVjaGVja0V4
Y2VwdGlvbikgYXMgZToKKyAgICAgICAgaWYgYXJnX29wdGlvbnMudGVzdDoKKyAgICAgICAgICAg
IGxvZy5lcnJvcihlLm1lc3NhZ2UpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSAg
IyBGb3JjZSB0aGUgYnVpbGQgdG8gZmFpbC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL19faW5pdF9fLnB5IGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vX19pbml0X18ucHkKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMWJkMjllMjE4NDVjYTk1MDc2YjIyMjg3Yzk0OTI5YzRlNjU5YTZkNgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL19f
aW5pdF9fLnB5CkBAIC0wLDAgKzEsMTIgQEAKKyMgUmVxdWlyZWQgZm9yIFB5dGhvbiB0byBzZWFy
Y2ggdGhpcyBkaXJlY3RvcnkgZm9yIG1vZHVsZSBmaWxlcworCitmcm9tIG1vZGVscyBpbXBvcnQg
KgorZnJvbSBnZW5lcmF0b3IgaW1wb3J0ICoKKworZnJvbSBnZW5lcmF0ZV9iYWNrZW5kX2NvbW1h
bmRzIGltcG9ydCAqCitmcm9tIGdlbmVyYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIgaW1w
b3J0ICoKK2Zyb20gZ2VuZXJhdGVfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uIGlt
cG9ydCAqCitmcm9tIGdlbmVyYXRlX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyIGltcG9ydCAq
Citmcm9tIGdlbmVyYXRlX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24gaW1wb3J0
ICoKKyNmcm9tIGdlbmVyYXRlX3R5cGVfYnVpbGRlcl9oZWFkZXIgaW1wb3J0ICoKKyNmcm9tIGdl
bmVyYXRlX3R5cGVfYnVpbGRlcl9pbXBsZW1lbnRhdGlvbiBpbXBvcnQgKgpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVf
YmFja2VuZF9jb21tYW5kcy5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2JhY2tlbmRfY29tbWFuZHMucHkKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjVi
NGMyZGE5OWMyZDU4MWUxYWE3OTA5OTg0YWI2MmYzNWYwY2Y4MgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRl
X2JhY2tlbmRfY29tbWFuZHMucHkKQEAgLTAsMCArMSwxMjkgQEAKKyMhL3Vzci9iaW4vZW52IHB5
dGhvbgorIyBDb3B5cmlnaHQgKGMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorIyBDb3B5cmlnaHQgKGMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6Cisj
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisjIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKwor
CitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG9zLnBhdGgKK2ltcG9ydCByZQoraW1wb3J0IHN0cmlu
ZworCitmcm9tIGdlbmVyYXRvciBpbXBvcnQgR2VuZXJhdG9yCitmcm9tIHN0cmluZyBpbXBvcnQg
VGVtcGxhdGUKK2Zyb20gZ2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgR2VuZXJhdG9yVGVtcGxh
dGVzIGFzIFRlbXBsYXRlcworCisjIFVzZSBhIGdsb2JhbCBsb2dnZXIsIHdoaWNoIG5vcm1hbGx5
IG9ubHkgbG9ncyBlcnJvcnMuCisjIEl0IGNhbiBiZSBjb25maWd1cmVkIHRvIGxvZyBkZWJ1ZyBt
ZXNzYWdlcyBmcm9tIHRoZSBDTEkuCitsb2dnaW5nLmJhc2ljQ29uZmlnKGZvcm1hdD0nJShsZXZl
bG5hbWUpczogJShtZXNzYWdlKXMnLCBsZXZlbD1sb2dnaW5nLkVSUk9SKQorbG9nID0gbG9nZ2lu
Zy5nZXRMb2dnZXIoJ2dsb2JhbCcpCisKK2RlZiBtYWtlX2phdmFzY3JpcHRfaWRlbnRpZmllcihy
YXdfaWRlbnRpZmllcik6CisgICAgIyBFbnVtIHZhbHVlcyBjb3VsZCBiZSBpbnRlZ2VyIGxpdGVy
YWxzLCBzbyBkb24ndCB0cnkgdG8gY29udmVydCB0aG9zZS4KKyAgICBpZiBub3QgaXNpbnN0YW5j
ZShyYXdfaWRlbnRpZmllciwgc3RyKToKKyAgICAgICAgcmV0dXJuCisKKyAgICBBTFdBWVNfVVBQ
RVJDQVNFRF9TVUJTVFJJTkdTID0gWydBUEknLCAnQ1NTJywgJ0RPTScsICdIVE1MJywgJ1hIUics
ICdYTUwnXQorICAgIHJlZ2V4ID0gJyhcdyopKCVzKShcdyopJyAlICJ8Ii5qb2luKEFMV0FZU19V
UFBFUkNBU0VEX1NVQlNUUklOR1MpCisgICAgZGVmIHJlcGxhY2VDYWxsYmFjayhtYXRjaCk6Cisg
ICAgICAgIHJldHVybiAiIi5qb2luKFttYXRjaC5ncm91cCgxKSwgbWF0Y2guZ3JvdXAoMikudXBw
ZXIoKSwgbWF0Y2guZ3JvdXAoMyldKQorCisgICAgIyBTcGxpdCBvbiBoeXBoZW4sIGludHJvZHVj
ZSBjYW1lbGNhc2UsIGFuZCBmb3JjZSB1cHBlcmNhc2luZyBvZiBhY3Jvbnltcy4KKyAgICBzdWJ3
b3JkcyA9IG1hcChsYW1iZGEgeDogeFswXS51cHBlcigpICsgeFsxOl0sIHJhd19pZGVudGlmaWVy
LnNwbGl0KCctJykpCisgICAgcmV0dXJuIHJlLnN1YihyZWdleCwgcmVwbGFjZUNhbGxiYWNrLCAi
Ii5qb2luKHN1YndvcmRzKSwgZmxhZ3M9cmUuSUdOT1JFQ0FTRSkKKworY2xhc3MgQmFja2VuZENv
bW1hbmRzR2VuZXJhdG9yKEdlbmVyYXRvcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZGVs
LCBpbnB1dF9maWxlcGF0aCk6CisgICAgICAgIHNlbGYuX21vZGVsID0gbW9kZWwKKyAgICAgICAg
c2VsZi5faW5wdXRfZmlsZXBhdGggPSBpbnB1dF9maWxlcGF0aAorCisgICAgZGVmIG1vZGVsKHNl
bGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fbW9kZWwKKworICAgIGRlZiBvdXRwdXRfZmlsZW5h
bWUoc2VsZik6CisgICAgICAgIHJldHVybiAiSW5zcGVjdG9yJXNCYWNrZW5kQ29tbWFuZHMuanMi
ICUgc2VsZi5tb2RlbCgpLmZyYW1ld29yay5zZXR0aW5nKCdwcmVmaXgnKQorCisgICAgZGVmIGdl
bmVyYXRlX2xpY2Vuc2Uoc2VsZik6CisgICAgICAgIHJldHVybiBUZW1wbGF0ZShUZW1wbGF0ZXMu
Q29weXJpZ2h0QmxvY2spLnN1YnN0aXR1dGUoTm9uZSwgaW5wdXRGaWxlbmFtZT1vcy5wYXRoLmJh
c2VuYW1lKHNlbGYuX2lucHV0X2ZpbGVwYXRoKSkKKworICAgIGRlZiBnZW5lcmF0ZV9vdXRwdXQo
c2VsZik6CisgICAgICAgIHNlY3Rpb25zID0gW10KKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNl
bGYuZ2VuZXJhdGVfbGljZW5zZSgpKQorICAgICAgICBzZWN0aW9ucy5leHRlbmQoW3NlbGYuZ2Vu
ZXJhdGVfZG9tYWluKGRvbWFpbikgZm9yIGRvbWFpbiBpbiBmaWx0ZXIobGFtYmRhIGRvbWFpbjog
bm90IGRvbWFpbi5pc19zdXBwbGVtZW50YWwsIHNlbGYubW9kZWwoKS5kb21haW5zKV0pCisgICAg
ICAgIHJldHVybiAiXG5cbiIuam9pbihzZWN0aW9ucykKKworICAgIGRlZiBnZW5lcmF0ZV9kb21h
aW4oc2VsZiwgZG9tYWluKToKKyAgICAgICAgbGluZXMgPSBbXQorICAgICAgICBhcmdzID0gewor
ICAgICAgICAgICAgJ2RvbWFpbic6IGRvbWFpbi5kb21haW5fbmFtZQorICAgICAgICB9CisKKyAg
ICAgICAgIyBQcmVhbWJsZQorICAgICAgICBsaW5lcy5hcHBlbmQoJy8vICUoZG9tYWluKXMuJyAl
IGFyZ3MpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlciUo
ZG9tYWluKXNEaXNwYXRjaGVyID0gSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbkRpc3Bh
dGNoZXIuYmluZChJbnNwZWN0b3JCYWNrZW5kLCAiJShkb21haW4pcyIpOycgJSBhcmdzKQorCisg
ICAgICAgICMgRW51bSBUeXBlIERlY2xhcmF0aW9ucworICAgICAgICBmb3IgX2RlY2xhcmF0aW9u
IGluIGRvbWFpbi50eXBlX2RlY2xhcmF0aW9uczoKKyAgICAgICAgICAgIGlmIF9kZWNsYXJhdGlv
bi50eXBlLmlzX2VudW0oKToKKyAgICAgICAgICAgICAgICBlbnVtX2FyZ3MgPSB7CisgICAgICAg
ICAgICAgICAgICAgICdkb21haW4nOiBkb21haW4uZG9tYWluX25hbWUsCisgICAgICAgICAgICAg
ICAgICAgICdlbnVtTmFtZSc6IF9kZWNsYXJhdGlvbi50eXBlX25hbWUsCisgICAgICAgICAgICAg
ICAgICAgICdlbnVtTWFwJzogIiwgIi5qb2luKFsnJXM6ICIlcyInICUgKG1ha2VfamF2YXNjcmlw
dF9pZGVudGlmaWVyKF92YWx1ZSksIF92YWx1ZSkgZm9yIF92YWx1ZSBpbiBfZGVjbGFyYXRpb24u
dHlwZS5lbnVtX3ZhbHVlcygpXSkKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
bGluZXMuYXBwZW5kKCdJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRW51bSgiJShkb21haW4pcy4l
KGVudW1OYW1lKXMiLCB7JShlbnVtTWFwKXN9OycgJSBlbnVtX2FyZ3MpCisKKyAgICAgICAgICAg
IGZvciBfbWVtYmVyIGluIGZpbHRlcihsYW1iZGEgeDogeC50eXBlLmlzX2VudW0oKSwgX2RlY2xh
cmF0aW9uLnR5cGVfbWVtYmVycyk6CisgICAgICAgICAgICAgICAgZW51bV9hcmdzID0geworICAg
ICAgICAgICAgICAgICAgICAnZG9tYWluJzogZG9tYWluLmRvbWFpbl9uYW1lLAorICAgICAgICAg
ICAgICAgICAgICAnZW51bU5hbWUnOiAnJXMlcycgJSAoX2RlY2xhcmF0aW9uLnR5cGVfbmFtZSwg
X21lbWJlci5tZW1iZXJfbmFtZS5jYXBpdGFsaXplKCkpLAorICAgICAgICAgICAgICAgICAgICAn
ZW51bU1hcCc6ICIsICIuam9pbihbJyVzOiAiJXMiJyAlIChtYWtlX2phdmFzY3JpcHRfaWRlbnRp
ZmllcihfdmFsdWUpLCBfdmFsdWUpIGZvciBfdmFsdWUgaW4gX21lbWJlci50eXBlLmVudW1fdmFs
dWVzKCldKQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQo
J0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFbnVtKCIlKGRvbWFpbilzLiUoZW51bU5hbWUpcyIs
IHslKGVudW1NYXApc307JyAlIGVudW1fYXJncykKKworICAgICAgICAjIEV2ZW50cworICAgICAg
ICBmb3IgX2V2ZW50IGluIGRvbWFpbi5ldmVudHM6CisgICAgICAgICAgICBldmVudF9hcmdzID0g
eworICAgICAgICAgICAgICAgICdkb21haW4nOiBkb21haW4uZG9tYWluX25hbWUsCisgICAgICAg
ICAgICAgICAgJ2V2ZW50TmFtZSc6IF9ldmVudC5ldmVudF9uYW1lLAorICAgICAgICAgICAgICAg
ICdwYXJhbXMnOiAiLCAiLmpvaW4oWyciJXMiJyAlIF9wYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUg
Zm9yIF9wYXJhbWV0ZXIgaW4gX2V2ZW50LmV2ZW50X3BhcmFtZXRlcnNdKQorICAgICAgICAgICAg
fQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCdJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRXZl
bnQoIiUoZG9tYWluKXMuJShldmVudE5hbWUpcyIsIFslKHBhcmFtcylzXSk7JyAlIGV2ZW50X2Fy
Z3MpCisKKyAgICAgICAgIyBDb21tYW5kcworICAgICAgICBmb3IgX2NvbW1hbmQgaW4gZG9tYWlu
LmNvbW1hbmRzOgorICAgICAgICAgICAgZGVmIGdlbmVyYXRlX3BhcmFtZXRlcl9vYmplY3QocGFy
YW1ldGVyKToKKyAgICAgICAgICAgICAgICBwYWlycyA9IFtdCisgICAgICAgICAgICAgICAgcGFp
cnMuYXBwZW5kKCcibmFtZSI6ICIlcyInICUgX3BhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkKKyAg
ICAgICAgICAgICAgICBwYWlycy5hcHBlbmQoJyJ0eXBlIjogIiVzIicgJSBfcGFyYW1ldGVyLnR5
cGVfcmVmLnR5cGVfa2luZCkKKyAgICAgICAgICAgICAgICBwYWlycy5hcHBlbmQoJyJvcHRpb25h
bCI6ICVzJyAlICJ0cnVlIiBpZiBfcGFyYW1ldGVyLmlzX29wdGlvbmFsIGVsc2UgImZhbHNlIikK
KyAgICAgICAgICAgICAgICByZXR1cm4gIiwgIi5qb2luKHBhaXJzKQorCisgICAgICAgICAgICBj
b21tYW5kX2FyZ3MgPSB7CisgICAgICAgICAgICAgICAgJ2RvbWFpbic6IGRvbWFpbi5kb21haW5f
bmFtZSwKKyAgICAgICAgICAgICAgICAnY29tbWFuZE5hbWUnOiBfY29tbWFuZC5jb21tYW5kX25h
bWUsCisgICAgICAgICAgICAgICAgJ2NhbGxQYXJhbXMnOiAiLCAiLmpvaW4oW2dlbmVyYXRlX3Bh
cmFtZXRlcl9vYmplY3QoX3BhcmFtZXRlcikgZm9yIF9wYXJhbWV0ZXIgaW4gX2NvbW1hbmQuY2Fs
bF9wYXJhbWV0ZXJzXSksCisgICAgICAgICAgICAgICAgJ3JldHVyblBhcmFtcyc6ICIsICIuam9p
bihbZ2VuZXJhdGVfcGFyYW1ldGVyX29iamVjdChfcGFyYW1ldGVyKSBmb3IgX3BhcmFtZXRlciBp
biBfY29tbWFuZC5yZXR1cm5fcGFyYW1ldGVyc10pLAorICAgICAgICAgICAgfQorICAgICAgICAg
ICAgbGluZXMuYXBwZW5kKCdJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiJShkb21h
aW4pcy4lKGNvbW1hbmROYW1lKXMiLCBbJShjYWxsUGFyYW1zKXNdLCBbJShyZXR1cm5QYXJhbXMp
c10pOycgJSBjb21tYW5kX2FyZ3MpCisKKyAgICAgICAgcmV0dXJuICJcbiIuam9pbihsaW5lcykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2Rl
Z2VuL2dlbmVyYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9iYWNrZW5kX2Rpc3Bh
dGNoZXJfaGVhZGVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY5ZWNkYWNmYTk2Mzk3OWVlMjZiNDhhMDYzYmY2
M2ViZTk3ZDk1ZDgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVy
LnB5CkBAIC0wLDAgKzEsMTcyIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMgQ29weXJpZ2h0
IChjKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChj
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMK
KyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMK
KyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyMgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKworaW1wb3J0IGxvZ2dpbmcK
K2ltcG9ydCBvcy5wYXRoCitpbXBvcnQgcmUKK2ltcG9ydCBzdHJpbmcKKworZnJvbSBnZW5lcmF0
b3IgaW1wb3J0IEdlbmVyYXRvciwgdWNmaXJzdAorZnJvbSBzdHJpbmcgaW1wb3J0IFRlbXBsYXRl
Citmcm9tIGdlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IEdlbmVyYXRvclRlbXBsYXRlcyBhcyBU
ZW1wbGF0ZXMKKworIyBVc2UgYSBnbG9iYWwgbG9nZ2VyLCB3aGljaCBub3JtYWxseSBvbmx5IGxv
Z3MgZXJyb3JzLgorIyBJdCBjYW4gYmUgY29uZmlndXJlZCB0byBsb2cgZGVidWcgbWVzc2FnZXMg
ZnJvbSB0aGUgQ0xJLgorbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2JhbCcpCisKKworY2xh
c3MgQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IoR2VuZXJhdG9yKToKKyAgICBkZWYg
X19pbml0X18oc2VsZiwgbW9kZWwsIGlucHV0X2ZpbGVwYXRoKToKKyAgICAgICAgc2VsZi5fbW9k
ZWwgPSBtb2RlbAorICAgICAgICBzZWxmLl9pbnB1dF9maWxlcGF0aCA9IGlucHV0X2ZpbGVwYXRo
CisKKyAgICBkZWYgbW9kZWwoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9tb2RlbAorCisg
ICAgZGVmIG91dHB1dF9maWxlbmFtZShzZWxmKToKKyAgICAgICAgcmV0dXJuICJJbnNwZWN0b3Il
c0JhY2tlbmREaXNwYXRjaGVycy5oIiAlIHNlbGYubW9kZWwoKS5mcmFtZXdvcmsuc2V0dGluZygn
cHJlZml4JykKKworICAgIGRlZiBnZW5lcmF0ZV9saWNlbnNlKHNlbGYpOgorICAgICAgICByZXR1
cm4gVGVtcGxhdGUoVGVtcGxhdGVzLkNvcHlyaWdodEJsb2NrKS5zdWJzdGl0dXRlKE5vbmUsIGlu
cHV0RmlsZW5hbWU9b3MucGF0aC5iYXNlbmFtZShzZWxmLl9pbnB1dF9maWxlcGF0aCkpCisKKyAg
ICBkZWYgZ2VuZXJhdGVfb3V0cHV0KHNlbGYpOgorICAgICAgICBoZWFkZXJzID0gWworICAgICAg
ICAgICAgJyJJbnNwZWN0b3Ilc1R5cGVCdWlsZGVycy5oIicgJSBzZWxmLm1vZGVsKCkuZnJhbWV3
b3JrLnNldHRpbmcoJ3ByZWZpeCcpLAorICAgICAgICAgICAgJzxpbnNwZWN0b3IvSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXIuaD4nLAorICAgICAgICAgICAgJzx3dGYvUGFzc1JlZlB0ci5oPics
CisgICAgICAgICAgICAnPHd0Zi90ZXh0L1dURlN0cmluZy5oPiddCisKKyAgICAgICAgdHlwZWRl
ZnMgPSBbKCdTdHJpbmcnLCAnRXJyb3JTdHJpbmcnKV0KKworICAgICAgICBzZWN0aW9ucyA9IFtd
CisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLmdlbmVyYXRlX2xpY2Vuc2UoKSkKKyAgICAg
ICAgaGVhZGVyX2FyZ3MgPSB7CisgICAgICAgICAgICAnaGVhZGVyR3VhcmRTdHJpbmcnOiByZS5z
dWIoJ1stLi9dJywgJ18nLCBzZWxmLm91dHB1dF9maWxlbmFtZSgpKSwKKyAgICAgICAgICAgICdp
bmNsdWRlcyc6ICdcbicuam9pbihbJyNpbmNsdWRlICcgKyBoZWFkZXIgZm9yIGhlYWRlciBpbiBo
ZWFkZXJzXSksCisgICAgICAgICAgICAndHlwZWRlZnMnOiAnXG4nLmpvaW4oWyd0eXBlZGVmICVz
ICVzOycgJSB0eXBlZGVmIGZvciB0eXBlZGVmIGluIHR5cGVkZWZzXSksCisgICAgICAgICAgICAn
aW5wdXRGaWxlbmFtZSc6IHNlbGYuX2lucHV0X2ZpbGVwYXRoCisgICAgICAgIH0KKworICAgICAg
ICBkZWYgc2hvdWxkX2dlbmVyYXRlX2RvbWFpbihkb21haW4pOgorICAgICAgICAgICAgcmV0dXJu
IGxlbihkb21haW4uY29tbWFuZHMpID4gMCBhbmQgbm90IGRvbWFpbi5pc19zdXBwbGVtZW50YWwK
KworICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVzLkNwcEhlYWRlclBy
ZWx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCisgICAgICAgIHNlY3Rpb25z
LmV4dGVuZChbc2VsZi5nZW5lcmF0ZV9kb21haW5faGFuZGxlcihkb21haW4pIGZvciBkb21haW4g
aW4gZmlsdGVyKHNob3VsZF9nZW5lcmF0ZV9kb21haW4sIHNlbGYubW9kZWwoKS5kb21haW5zKV0p
CisgICAgICAgIHNlY3Rpb25zLmV4dGVuZChbc2VsZi5nZW5lcmF0ZV9kb21haW5fZGlzcGF0Y2hl
cihkb21haW4pIGZvciBkb21haW4gaW4gZmlsdGVyKHNob3VsZF9nZW5lcmF0ZV9kb21haW4sIHNl
bGYubW9kZWwoKS5kb21haW5zKV0pCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShU
ZW1wbGF0ZXMuQ3BwSGVhZGVyUG9zdGx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJn
cykpCisgICAgICAgIHJldHVybiAiXG5cbiIuam9pbihzZWN0aW9ucykKKworICAgIGRlZiBnZW5l
cmF0ZV9kb21haW5faGFuZGxlcihzZWxmLCBkb21haW4pOgorICAgICAgICBsaW5lcyA9IFtdCisg
ICAgICAgIGRvbWFpbl9ndWFyZCA9IEdlbmVyYXRvci5jcHBfZ3VhcmRfZm9yX2RvbWFpbihkb21h
aW4pCisgICAgICAgIGlmIGRvbWFpbl9ndWFyZCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGxp
bmVzLmFwcGVuZCgiI2lmICVzIiAlIGRvbWFpbl9ndWFyZCkKKworICAgICAgICBjbGFzc0NvbXBv
bmVudHMgPSBbJ2NsYXNzJ10KKyAgICAgICAgZXhwb3J0TWFjcm8gPSBzZWxmLm1vZGVsKCkuZnJh
bWV3b3JrLnNldHRpbmcoJ2V4cG9ydF9tYWNybycsIE5vbmUpCisgICAgICAgIGlmIGV4cG9ydE1h
Y3JvIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgY2xhc3NDb21wb25lbnRzLmFwcGVuZChleHBv
cnRNYWNybykKKworICAgICAgICBoYW5kbGVyX2FyZ3MgPSB7CisgICAgICAgICAgICAnY2xhc3NB
bmRFeHBvcnRNYWNybyc6ICIgIi5qb2luKGNsYXNzQ29tcG9uZW50cyksCisgICAgICAgICAgICAn
ZG9tYWluTmFtZSc6IGRvbWFpbi5kb21haW5fbmFtZSwKKyAgICAgICAgICAgICdjb21tYW5kRGVj
bGFyYXRpb25zJzogIlxuIi5qb2luKFtzZWxmLmdlbmVyYXRlX2hhbmRsZXJfY29tbWFuZChjb21t
YW5kKSBmb3IgY29tbWFuZCBpbiBkb21haW4uY29tbWFuZHNdKQorICAgICAgICB9CisKKyAgICAg
ICAgbGluZXMuYXBwZW5kKFRlbXBsYXRlKFRlbXBsYXRlcy5CYWNrZW5kRGlzcGF0Y2hlckhlYWRl
ckRvbWFpbkhhbmRsZXJEZWNsYXJhdGlvbikuc3Vic3RpdHV0ZShOb25lLCAqKmhhbmRsZXJfYXJn
cykpCisgICAgICAgIGlmIGRvbWFpbl9ndWFyZCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGxp
bmVzLmFwcGVuZCgiI2VuZGlmIC8vICVzIiAlIGRvbWFpbl9ndWFyZCkKKyAgICAgICAgcmV0dXJu
ICJcbiIuam9pbihsaW5lcykKKworICAgIGRlZiBnZW5lcmF0ZV9oYW5kbGVyX2NvbW1hbmQoc2Vs
ZiwgY29tbWFuZCk6CisgICAgICAgIGlmIGNvbW1hbmQuaXNfYXN5bmM6CisgICAgICAgICAgICBy
ZXR1cm4gc2VsZi5nZW5lcmF0ZV9hc3luY19oYW5kbGVyX2NvbW1hbmQoY29tbWFuZCkKKworICAg
ICAgICBwYXJhbWV0ZXJzID0gWydFcnJvclN0cmluZyonXQorICAgICAgICBmb3IgX3BhcmFtZXRl
ciBpbiBjb21tYW5kLmNhbGxfcGFyYW1ldGVyczoKKyAgICAgICAgICAgIHBhcmFtZXRlcnMuYXBw
ZW5kKCIlcyBpbl8lcyIgJSAoR2VuZXJhdG9yLmNhbGxfcGFyYW1ldGVyX3R5cGVfZm9yX3R5cGUo
X3BhcmFtZXRlci50eXBlLCBfcGFyYW1ldGVyLmlzX29wdGlvbmFsKSwgX3BhcmFtZXRlci5wYXJh
bWV0ZXJfbmFtZSkpCisKKyAgICAgICAgZm9yIF9wYXJhbWV0ZXIgaW4gY29tbWFuZC5yZXR1cm5f
cGFyYW1ldGVyczoKKyAgICAgICAgICAgIG9wdGlvbmFsX3ByZWZpeCA9ICdvcHRfJyBpZiBfcGFy
YW1ldGVyLmlzX29wdGlvbmFsIGVsc2UgJycKKyAgICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5k
KCIlcyAlc291dF8lcyIgJSAoR2VuZXJhdG9yLnJldHVybl9wYXJhbWV0ZXJfdHlwZV9mb3JfdHlw
ZShfcGFyYW1ldGVyLnR5cGUsIF9wYXJhbWV0ZXIuaXNfb3B0aW9uYWwpLCBvcHRpb25hbF9wcmVm
aXgsIF9wYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpKQorCisgICAgICAgIGNvbW1hbmRfYXJncyA9
IHsKKyAgICAgICAgICAgICdjb21tYW5kTmFtZSc6IGNvbW1hbmQuY29tbWFuZF9uYW1lLAorICAg
ICAgICAgICAgJ3BhcmFtZXRlcnMnOiAiLCAiLmpvaW4ocGFyYW1ldGVycykKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gIiAgICB2aXJ0dWFsIHZvaWQgJShjb21tYW5kTmFtZSlzKCUocGFyYW1l
dGVycylzKSA9IDA7IiAlIGNvbW1hbmRfYXJncworCisgICAgZGVmIGdlbmVyYXRlX2FzeW5jX2hh
bmRsZXJfY29tbWFuZChzZWxmLCBjb21tYW5kKToKKyAgICAgICAgY2FsbGJhY2tOYW1lID0gIiVz
Q2FsbGJhY2siICUgdWNmaXJzdChjb21tYW5kLmNvbW1hbmRfbmFtZSkKKworICAgICAgICBpbl9w
YXJhbWV0ZXJzID0gWydFcnJvclN0cmluZyonXQorICAgICAgICBmb3IgX3BhcmFtZXRlciBpbiBj
b21tYW5kLmNhbGxfcGFyYW1ldGVyczoKKyAgICAgICAgICAgIGluX3BhcmFtZXRlcnMuYXBwZW5k
KCIlcyBpbl8lcyIgJSAoR2VuZXJhdG9yLmNhbGxfcGFyYW1ldGVyX3R5cGVfZm9yX3R5cGUoX3Bh
cmFtZXRlci50eXBlLCBfcGFyYW1ldGVyLmlzX29wdGlvbmFsKSwgX3BhcmFtZXRlci5wYXJhbWV0
ZXJfbmFtZSkpCisgICAgICAgIGluX3BhcmFtZXRlcnMuYXBwZW5kKCJQYXNzUmVmUHRyPCVzPiBj
YWxsYmFjayIgJSBjYWxsYmFja05hbWUpCisKKyAgICAgICAgb3V0X3BhcmFtZXRlcnMgPSBbXQor
ICAgICAgICBmb3IgX3BhcmFtZXRlciBpbiBjb21tYW5kLnJldHVybl9wYXJhbWV0ZXJzOgorICAg
ICAgICAgICAgb3B0aW9uYWxfcHJlZml4ID0gJ29wdF8nIGlmIF9wYXJhbWV0ZXIuaXNfb3B0aW9u
YWwgZWxzZSAnJworICAgICAgICAgICAgb3V0X3BhcmFtZXRlcnMuYXBwZW5kKCIlcyAlcyVzIiAl
IChHZW5lcmF0b3IuY2FsbF9wYXJhbWV0ZXJfdHlwZV9mb3JfdHlwZShfcGFyYW1ldGVyLnR5cGUs
IF9wYXJhbWV0ZXIuaXNfb3B0aW9uYWwpLCBvcHRpb25hbF9wcmVmaXgsIF9wYXJhbWV0ZXIucGFy
YW1ldGVyX25hbWUpKQorCisgICAgICAgIGNvbW1hbmRfYXJncyA9IHsKKyAgICAgICAgICAgICdj
YWxsYmFja05hbWUnOiBjYWxsYmFja05hbWUsCisgICAgICAgICAgICAnY29tbWFuZE5hbWUnOiBj
b21tYW5kLmNvbW1hbmRfbmFtZSwKKyAgICAgICAgICAgICdpblBhcmFtZXRlcnMnOiAiLCAiLmpv
aW4oaW5fcGFyYW1ldGVycyksCisgICAgICAgICAgICAnb3V0UGFyYW1ldGVycyc6ICIsICIuam9p
bihvdXRfcGFyYW1ldGVycyksCisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gVGVtcGxhdGUo
VGVtcGxhdGVzLkJhY2tlbmREaXNwYXRjaGVySGVhZGVyQXN5bmNDb21tYW5kRGVjbGFyYXRpb24p
LnN1YnN0aXR1dGUoTm9uZSwgKipjb21tYW5kX2FyZ3MpCisKKyAgICBkZWYgZ2VuZXJhdGVfZG9t
YWluX2Rpc3BhdGNoZXIoc2VsZiwgZG9tYWluKToKKyAgICAgICAgbGluZXMgPSBbXQorICAgICAg
ICBkb21haW5fZ3VhcmQgPSBHZW5lcmF0b3IuY3BwX2d1YXJkX2Zvcl9kb21haW4oZG9tYWluKQor
ICAgICAgICBpZiBkb21haW5fZ3VhcmQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBsaW5lcy5h
cHBlbmQoIiNpZiAlcyIgJSBkb21haW5fZ3VhcmQpCisKKyAgICAgICAgY2xhc3NDb21wb25lbnRz
ID0gWydjbGFzcyddCisgICAgICAgIGV4cG9ydE1hY3JvID0gc2VsZi5tb2RlbCgpLmZyYW1ld29y
ay5zZXR0aW5nKCdleHBvcnRfbWFjcm8nLCBOb25lKQorICAgICAgICBpZiBleHBvcnRNYWNybyBp
cyBub3QgTm9uZToKKyAgICAgICAgICAgIGNsYXNzQ29tcG9uZW50cy5hcHBlbmQoZXhwb3J0TWFj
cm8pCisKKyAgICAgICAgZGVjbGFyYXRpb25zID0gW10KKyAgICAgICAgaWYgbGVuKGRvbWFpbi5j
b21tYW5kcykgPiAwOgorICAgICAgICAgICAgZGVjbGFyYXRpb25zLmFwcGVuZCgncHJpdmF0ZTon
KQorICAgICAgICBkZWNsYXJhdGlvbnMuZXh0ZW5kKFtzZWxmLmdlbmVyYXRlX2Rpc3BhdGNoZXJf
Y29tbWFuZChjb21tYW5kKSBmb3IgY29tbWFuZCBpbiBkb21haW4uY29tbWFuZHNdKQorCisgICAg
ICAgIGhhbmRsZXJfYXJncyA9IHsKKyAgICAgICAgICAgICdjbGFzc0FuZEV4cG9ydE1hY3JvJzog
IiAiLmpvaW4oY2xhc3NDb21wb25lbnRzKSwKKyAgICAgICAgICAgICdkb21haW5OYW1lJzogZG9t
YWluLmRvbWFpbl9uYW1lLAorICAgICAgICAgICAgJ2NvbW1hbmREZWNsYXJhdGlvbnMnOiAiXG4i
LmpvaW4oZGVjbGFyYXRpb25zKQorICAgICAgICB9CisKKyAgICAgICAgbGluZXMuYXBwZW5kKFRl
bXBsYXRlKFRlbXBsYXRlcy5CYWNrZW5kRGlzcGF0Y2hlckhlYWRlckRvbWFpbkRpc3BhdGNoZXJE
ZWNsYXJhdGlvbikuc3Vic3RpdHV0ZShOb25lLCAqKmhhbmRsZXJfYXJncykpCisgICAgICAgIGlm
IGRvbWFpbl9ndWFyZCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgiI2Vu
ZGlmIC8vICVzIiAlIGRvbWFpbl9ndWFyZCkKKyAgICAgICAgcmV0dXJuICJcbiIuam9pbihsaW5l
cykKKworICAgIGRlZiBnZW5lcmF0ZV9kaXNwYXRjaGVyX2NvbW1hbmQoc2VsZiwgY29tbWFuZCk6
CisgICAgICAgIHJldHVybiAiICAgIHZvaWQgJXMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rv
cjo6SW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsiICUgY29tbWFuZC5jb21tYW5kX25hbWUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2Vu
L2dlbmVyYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2JhY2tlbmRf
ZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wZTE2NmY3YzYzN2ZjN2I1
NWRkMzNhMWFjODRmZmM4ODAyZDk2NzM0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfYmFja2VuZF9kaXNw
YXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5CkBAIC0wLDAgKzEsMjkzIEBACisjIS91c3IvYmluL2Vu
diBweXRob24KKyMgQ29weXJpZ2h0IChjKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyMgQ29weXJpZ2h0IChjKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0
OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworIyBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyMg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisKKworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBvcy5wYXRoCitpbXBvcnQgcmUKK2ltcG9ydCBz
dHJpbmcKKworZnJvbSBnZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvciwgdWNmaXJzdAorZnJvbSBz
dHJpbmcgaW1wb3J0IFRlbXBsYXRlCitmcm9tIGdlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IEdl
bmVyYXRvclRlbXBsYXRlcyBhcyBUZW1wbGF0ZXMKK2Zyb20gbW9kZWxzIGltcG9ydCBPYmplY3RU
eXBlLCBBcnJheVR5cGUKKworIyBVc2UgYSBnbG9iYWwgbG9nZ2VyLCB3aGljaCBub3JtYWxseSBv
bmx5IGxvZ3MgZXJyb3JzLgorbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2JhbCcpCisKKwor
Y2xhc3MgQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihHZW5lcmF0b3Ip
OgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpOgorICAgICAg
ICBzZWxmLl9tb2RlbCA9IG1vZGVsCisgICAgICAgIHNlbGYuX2lucHV0X2ZpbGVwYXRoID0gaW5w
dXRfZmlsZXBhdGgKKworICAgIGRlZiBtb2RlbChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYu
X21vZGVsCisKKyAgICBkZWYgb3V0cHV0X2ZpbGVuYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4g
Ikluc3BlY3RvciVzQmFja2VuZERpc3BhdGNoZXJzLmNwcCIgJSBzZWxmLm1vZGVsKCkuZnJhbWV3
b3JrLnNldHRpbmcoJ3ByZWZpeCcpCisKKyAgICBkZWYgZ2VuZXJhdGVfbGljZW5zZShzZWxmKToK
KyAgICAgICAgcmV0dXJuIFRlbXBsYXRlKFRlbXBsYXRlcy5Db3B5cmlnaHRCbG9jaykuc3Vic3Rp
dHV0ZShOb25lLCBpbnB1dEZpbGVuYW1lPW9zLnBhdGguYmFzZW5hbWUoc2VsZi5faW5wdXRfZmls
ZXBhdGgpKQorCisgICAgZGVmIGdlbmVyYXRlX291dHB1dChzZWxmKToKKyAgICAgICAgc2Vjb25k
YXJ5X2hlYWRlcnMgPSBbCisgICAgICAgICAgICAnPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwuaD4nLAorICAgICAgICAgICAgJzxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+
JywKKyAgICAgICAgICAgICc8d3RmL3RleHQvQ1N0cmluZy5oPiddCisKKyAgICAgICAgc2VjdGlv
bnMgPSBbXQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5nZW5lcmF0ZV9saWNlbnNlKCkp
CisgICAgICAgIGhlYWRlcl9hcmdzID0geworICAgICAgICAgICAgJ3ByaW1hcnlJbmNsdWRlJzog
J0luc3BlY3RvciVzQmFja2VuZERpc3BhdGNoZXJzLmgnICUgc2VsZi5tb2RlbCgpLmZyYW1ld29y
ay5zZXR0aW5nKCdwcmVmaXgnKSwKKyAgICAgICAgICAgICdzZWNvbmRhcnlJbmNsdWRlcyc6ICJc
biIuam9pbihbJyNpbmNsdWRlICVzJyAlIGhlYWRlciBmb3IgaGVhZGVyIGluIHNlY29uZGFyeV9o
ZWFkZXJzXSksCisgICAgICAgICAgICAnaW5wdXRGaWxlbmFtZSc6IHNlbGYuX2lucHV0X2ZpbGVw
YXRoCisgICAgICAgIH0KKworICAgICAgICBkZWYgc2hvdWxkX2dlbmVyYXRlX2RvbWFpbihkb21h
aW4pOgorICAgICAgICAgICAgcmV0dXJuIGxlbihkb21haW4uY29tbWFuZHMpID4gMCBhbmQgbm90
IGRvbWFpbi5pc19zdXBwbGVtZW50YWwKKworICAgICAgICBpbmNsdWRlZF9kb21haW5zID0gZmls
dGVyKHNob3VsZF9nZW5lcmF0ZV9kb21haW4sIHNlbGYubW9kZWwoKS5kb21haW5zKQorCisgICAg
ICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMuQ3BwSW1wbGVtZW50YXRpb25Q
cmVsdWRlKS5zdWJzdGl0dXRlKE5vbmUsICoqaGVhZGVyX2FyZ3MpKQorICAgICAgICBzZWN0aW9u
cy5hcHBlbmQoIlxuIi5qb2luKFtzZWxmLmdlbmVyYXRlX2RvbWFpbl9oYW5kbGVyX2Rlc3RydWN0
b3IoZG9tYWluKSBmb3IgZG9tYWluIGluIGluY2x1ZGVkX2RvbWFpbnNdKSkKKyAgICAgICAgc2Vj
dGlvbnMuZXh0ZW5kKFtzZWxmLmdlbmVyYXRlX2RvbWFpbl9kaXNwYXRjaGVyKGRvbWFpbikgZm9y
IGRvbWFpbiBpbiBpbmNsdWRlZF9kb21haW5zXSkKKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRl
bXBsYXRlKFRlbXBsYXRlcy5DcHBJbXBsZW1lbnRhdGlvblBvc3RsdWRlKS5zdWJzdGl0dXRlKE5v
bmUsICoqaGVhZGVyX2FyZ3MpKQorICAgICAgICByZXR1cm4gIlxuXG4iLmpvaW4oc2VjdGlvbnMp
CisKKyAgICBkZWYgZ2VuZXJhdGVfZG9tYWluX2hhbmRsZXJfZGVzdHJ1Y3RvcihzZWxmLCBkb21h
aW4pOgorICAgICAgICBsaW5lcyA9IFtdCisgICAgICAgIGRlc3RydWN0b3JfYXJncyA9IHsKKyAg
ICAgICAgICAgICdkb21haW5OYW1lJzogZG9tYWluLmRvbWFpbl9uYW1lCisgICAgICAgIH0KKyAg
ICAgICAgZG9tYWluX2d1YXJkID0gR2VuZXJhdG9yLmNwcF9ndWFyZF9mb3JfZG9tYWluKGRvbWFp
bikKKyAgICAgICAgaWYgZG9tYWluX2d1YXJkIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgbGlu
ZXMuYXBwZW5kKCcjaWYgJXMnICUgZG9tYWluX2d1YXJkKQorICAgICAgICBsaW5lcy5hcHBlbmQo
J0luc3BlY3RvciUoZG9tYWluTmFtZSlzQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjp+SW5zcGVj
dG9yJShkb21haW5OYW1lKXNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKSB7IH0nICUgZGVzdHJ1
Y3Rvcl9hcmdzKQorICAgICAgICBpZiBkb21haW5fZ3VhcmQgaXMgbm90IE5vbmU6CisgICAgICAg
ICAgICBsaW5lcy5hcHBlbmQoJyNlbmRpZiAvLyAlcycgJSBkb21haW5fZ3VhcmQpCisKKyAgICAg
ICAgcmV0dXJuICJcbiIuam9pbihsaW5lcykKKworICAgIGRlZiBnZW5lcmF0ZV9kb21haW5fZGlz
cGF0Y2hlcihzZWxmLCBkb21haW4pOgorICAgICAgICBsaW5lcyA9IFtdCisgICAgICAgIGRvbWFp
bl9ndWFyZCA9IEdlbmVyYXRvci5jcHBfZ3VhcmRfZm9yX2RvbWFpbihkb21haW4pCisgICAgICAg
IGlmIGRvbWFpbl9ndWFyZCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgi
I2lmICVzIiAlIGRvbWFpbl9ndWFyZCkKKworICAgICAgICBpbXBsZW1lbnRhdGlvbnMgPSBbXQor
CisgICAgICAgIGNvbnN0cnVjdG9yX2FyZ3MgPSB7CisgICAgICAgICAgICAnZG9tYWluTmFtZSc6
IGRvbWFpbi5kb21haW5fbmFtZSwKKyAgICAgICAgfQorICAgICAgICBpbXBsZW1lbnRhdGlvbnMu
YXBwZW5kKFRlbXBsYXRlKFRlbXBsYXRlcy5CYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9u
RG9tYWluQ29uc3RydWN0b3IpLnN1YnN0aXR1dGUoTm9uZSwgKipjb25zdHJ1Y3Rvcl9hcmdzKSkK
KworICAgICAgICBpZiBsZW4oZG9tYWluLmNvbW1hbmRzKSA8PSA1OgorICAgICAgICAgICAgaW1w
bGVtZW50YXRpb25zLmFwcGVuZChzZWxmLmdlbmVyYXRlX2RvbWFpbl9kaXNwYXRjaGVyX3NtYWxs
X3N3aXRjaChkb21haW4pKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaW1wbGVtZW50YXRp
b25zLmFwcGVuZChzZWxmLmdlbmVyYXRlX2RvbWFpbl9kaXNwYXRjaGVyX2xhcmdlX3N3aXRjaChk
b21haW4pKQorCisgICAgICAgIGZvciBfY29tbWFuZCBpbiBkb21haW4uY29tbWFuZHM6CisgICAg
ICAgICAgICBpZiBfY29tbWFuZC5pc19hc3luYzoKKyAgICAgICAgICAgICAgICBpbXBsZW1lbnRh
dGlvbnMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfZGlzcGF0Y2hlcl9hc3luY19jb21tYW5kX2NsYXNz
KF9jb21tYW5kLCBkb21haW4pKQorICAgICAgICAgICAgaW1wbGVtZW50YXRpb25zLmFwcGVuZChz
ZWxmLmdlbmVyYXRlX2Rpc3BhdGNoZXJfY29tbWFuZChfY29tbWFuZCwgZG9tYWluKSkKKworICAg
ICAgICBsaW5lcy5hcHBlbmQoIlxuXG4iLmpvaW4oaW1wbGVtZW50YXRpb25zKSkKKyAgICAgICAg
aWYgZG9tYWluX2d1YXJkIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCIj
ZW5kaWYgLy8gJXMiICUgZG9tYWluX2d1YXJkKQorICAgICAgICByZXR1cm4gIlxuIi5qb2luKGxp
bmVzKQorCisgICAgZGVmIGdlbmVyYXRlX2RvbWFpbl9kaXNwYXRjaGVyX3NtYWxsX3N3aXRjaChz
ZWxmLCBkb21haW4pOgorICAgICAgICBjYXNlcyA9IFtdCisgICAgICAgIGNhc2VzLmFwcGVuZCgn
ICAgIGlmIChtZXRob2QgPT0gIiVzIiknICUgZG9tYWluLmNvbW1hbmRzWzBdLmNvbW1hbmRfbmFt
ZSkKKyAgICAgICAgY2FzZXMuYXBwZW5kKCcgICAgICAgICVzKGNhbGxJZCwgKm1lc3NhZ2UuZ2V0
KCkpOycgJSBkb21haW4uY29tbWFuZHNbMF0uY29tbWFuZF9uYW1lKQorICAgICAgICBmb3IgX2Nv
bW1hbmQgaW4gZG9tYWluLmNvbW1hbmRzWzE6XToKKyAgICAgICAgICAgIGNhc2VzLmFwcGVuZCgn
ICAgIGVsc2UgaWYgKG1ldGhvZCA9PSAiJXMiKScgJSBfY29tbWFuZC5jb21tYW5kX25hbWUpCisg
ICAgICAgICAgICBjYXNlcy5hcHBlbmQoJyAgICAgICAgJXMoY2FsbElkLCAqbWVzc2FnZS5nZXQo
KSk7JyAlIF9jb21tYW5kLmNvbW1hbmRfbmFtZSkKKworICAgICAgICBzd2l0Y2hfYXJncyA9IHsK
KyAgICAgICAgICAgICdkb21haW5OYW1lJzogZG9tYWluLmRvbWFpbl9uYW1lLAorICAgICAgICAg
ICAgJ2Rpc3BhdGNoQ2FzZXMnOiAiXG4iLmpvaW4oY2FzZXMpCisgICAgICAgIH0KKworICAgICAg
ICByZXR1cm4gVGVtcGxhdGUoVGVtcGxhdGVzLkJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRp
b25TbWFsbFN3aXRjaCkuc3Vic3RpdHV0ZShOb25lLCAqKnN3aXRjaF9hcmdzKQorCisgICAgZGVm
IGdlbmVyYXRlX2RvbWFpbl9kaXNwYXRjaGVyX2xhcmdlX3N3aXRjaChzZWxmLCBkb21haW4pOgor
ICAgICAgICBjYXNlcyA9IFtdCisgICAgICAgIGZvciBfY29tbWFuZCBpbiBkb21haW4uY29tbWFu
ZHM6CisgICAgICAgICAgICBhcmdzID0geworICAgICAgICAgICAgICAgICdkb21haW5OYW1lJzog
ZG9tYWluLmRvbWFpbl9uYW1lLAorICAgICAgICAgICAgICAgICdjb21tYW5kTmFtZSc6IF9jb21t
YW5kLmNvbW1hbmRfbmFtZQorICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZXMuYXBwZW5k
KCcgICAgICAgICAgICB7ICIlKGNvbW1hbmROYW1lKXMiLCAmSW5zcGVjdG9yJShkb21haW5OYW1l
KXNCYWNrZW5kRGlzcGF0Y2hlcjo6JShjb21tYW5kTmFtZSlzIH0sJyAlIGFyZ3MpCisKKyAgICAg
ICAgc3dpdGNoX2FyZ3MgPSB7CisgICAgICAgICAgICAnZG9tYWluTmFtZSc6IGRvbWFpbi5kb21h
aW5fbmFtZSwKKyAgICAgICAgICAgICdkaXNwYXRjaENhc2VzJzogIlxuIi5qb2luKGNhc2VzKQor
ICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIFRlbXBsYXRlKFRlbXBsYXRlcy5CYWNrZW5kRGlz
cGF0Y2hlckltcGxlbWVudGF0aW9uTGFyZ2VTd2l0Y2gpLnN1YnN0aXR1dGUoTm9uZSwgKipzd2l0
Y2hfYXJncykKKworICAgIGRlZiBnZW5lcmF0ZV9kaXNwYXRjaGVyX2FzeW5jX2NvbW1hbmRfY2xh
c3Moc2VsZiwgY29tbWFuZCwgZG9tYWluKToKKyAgICAgICAgb3V0X3BhcmFtZXRlcl9hc3NpZ25t
ZW50cyA9IFtdCisgICAgICAgIGZvcm1hbF9wYXJhbWV0ZXJzID0gW10KKworICAgICAgICBmb3Ig
X3BhcmFtZXRlciBpbiBjb21tYW5kLnJldHVybl9wYXJhbWV0ZXJzOgorICAgICAgICAgICAgcGFy
YW1fYXJncyA9IHsKKyAgICAgICAgICAgICAgICAncGFyYW1ldGVyVHlwZSc6IEdlbmVyYXRvci5j
YWxsX3BhcmFtZXRlcl9zdGFja190eXBlX2Zvcl90eXBlKF9wYXJhbWV0ZXIudHlwZSwgX3BhcmFt
ZXRlci5pc19vcHRpb25hbCksCisgICAgICAgICAgICAgICAgJ3BhcmFtZXRlck5hbWUnOiBfcGFy
YW1ldGVyLnBhcmFtZXRlcl9uYW1lLAorICAgICAgICAgICAgICAgICdrZXllZFNldE1ldGhvZCc6
IEdlbmVyYXRvci5rZXllZF9zZXRfbWV0aG9kX2Zvcl90eXBlKF9wYXJhbWV0ZXIudHlwZSksCisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZvcm1hbF9wYXJhbWV0ZXJzLmFwcGVuZCgnJXMg
JXMnICUgKEdlbmVyYXRvci5mb3JtYWxfcGFyYW1ldGVyX3R5cGVfZm9yX3JldHVybl9wYXJhbWV0
ZXIoX3BhcmFtZXRlciwgZG9tYWluKSwgX3BhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkpCisKKyAg
ICAgICAgICAgIGlmIF9wYXJhbWV0ZXIuaXNfb3B0aW9uYWw6CisgICAgICAgICAgICAgICAgaWYg
R2VuZXJhdG9yLnNob3VsZF91c2Vfd3JhcHBlcl9mb3JfcmV0dXJuX3R5cGUoX3BhcmFtZXRlci50
eXBlKToKKyAgICAgICAgICAgICAgICAgICAgb3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBl
bmQoJyAgICBpZiAoJShwYXJhbWV0ZXJOYW1lKXMuaXNBc3NpZ25lZCgpKScgJSBwYXJhbV9hcmdz
KQorICAgICAgICAgICAgICAgICAgICBvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRzLmFwcGVuZCgn
ICAgICAgICBqc29uTWVzc2FnZS0+JShrZXllZFNldE1ldGhvZClzKEFTQ0lJTGl0ZXJhbCgiJShw
YXJhbWV0ZXJOYW1lKXMiKSwgJShwYXJhbWV0ZXJOYW1lKXMuZ2V0VmFsdWUoKSk7JyAlIHBhcmFt
X2FyZ3MpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgb3V0X3Bh
cmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICBpZiAoJShwYXJhbWV0ZXJOYW1lKXMpJyAl
IHBhcmFtX2FyZ3MpCisgICAgICAgICAgICAgICAgICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdubWVu
dHMuYXBwZW5kKCcgICAgICAgIGpzb25NZXNzYWdlLT4lKGtleWVkU2V0TWV0aG9kKXMoQVNDSUlM
aXRlcmFsKCIlKHBhcmFtZXRlck5hbWUpcyIpLCAlKHBhcmFtZXRlck5hbWUpcyk7JyAlIHBhcmFt
X2FyZ3MpCisgICAgICAgICAgICBlbGlmIF9wYXJhbWV0ZXIudHlwZS5pc19lbnVtKCk6CisgICAg
ICAgICAgICAgICAgb3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICBqc29uTWVz
c2FnZS0+JShrZXllZFNldE1ldGhvZClzKEFTQ0lJTGl0ZXJhbCgiJShwYXJhbWV0ZXJOYW1lKXMi
KSwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Z2V0JShmcmFtZXdvcmtQcmVmaXgpc0VudW1Db25z
dGFudFZhbHVlKCUocGFyYW1ldGVyTmFtZSlzKSk7JyAlIHBhcmFtX2FyZ3MpCisgICAgICAgICAg
ICBlbHNlOgorICAgICAgICAgICAgICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5k
KCcgICAganNvbk1lc3NhZ2UtPiUoa2V5ZWRTZXRNZXRob2QpcyhBU0NJSUxpdGVyYWwoIiUocGFy
YW1ldGVyTmFtZSlzIiksICUocGFyYW1ldGVyTmFtZSlzKTsnICUgcGFyYW1fYXJncykKKworICAg
ICAgICBhc3luY19hcmdzID0geworICAgICAgICAgICAgJ2RvbWFpbk5hbWUnOiBkb21haW4uZG9t
YWluX25hbWUsCisgICAgICAgICAgICAnY2FsbGJhY2tOYW1lJzogdWNmaXJzdChjb21tYW5kLmNv
bW1hbmRfbmFtZSkgKyAnQ2FsbGJhY2snLAorICAgICAgICAgICAgJ2Zvcm1hbFBhcmFtZXRlcnMn
OiAiLCAiLmpvaW4oZm9ybWFsX3BhcmFtZXRlcnMpLAorICAgICAgICAgICAgJ291dFBhcmFtZXRl
ckFzc2lnbm1lbnRzJzogIlxuIi5qb2luKG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMpCisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIFRlbXBsYXRlKFRlbXBsYXRlcy5CYWNrZW5kRGlzcGF0Y2hl
ckltcGxlbWVudGF0aW9uQXN5bmNDb21tYW5kKS5zdWJzdGl0dXRlKE5vbmUsICoqYXN5bmNfYXJn
cykKKworCisgICAgZGVmIGdlbmVyYXRlX2Rpc3BhdGNoZXJfY29tbWFuZChzZWxmLCBjb21tYW5k
LCBkb21haW4pOgorICAgICAgICBsaW5lcyA9IFtdCisgICAgICAgIGluX3BhcmFtZXRlcl9kZWNs
YXJhdGlvbnMgPSBbXQorICAgICAgICBvdXRfcGFyYW1ldGVyX2RlY2xhcmF0aW9ucyA9IFtdCisg
ICAgICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMgPSBbXQorICAgICAgICBtZXRob2RfcGFy
YW1ldGVycyA9IFsnJmVycm9yJ10KKworICAgICAgICBmb3IgX3BhcmFtZXRlciBpbiBjb21tYW5k
LmNhbGxfcGFyYW1ldGVyczoKKyAgICAgICAgICAgIG91dF9zdWNjZXNzX2FyZ3VtZW50ID0gJ251
bGxwdHInCisgICAgICAgICAgICBpZiBfcGFyYW1ldGVyLmlzX29wdGlvbmFsOgorICAgICAgICAg
ICAgICAgIG91dF9zdWNjZXNzX2FyZ3VtZW50ID0gJyYlc192YWx1ZUZvdW5kJyAlIF9wYXJhbWV0
ZXIucGFyYW1ldGVyX25hbWUKKyAgICAgICAgICAgICAgICBpbl9wYXJhbWV0ZXJfZGVjbGFyYXRp
b25zLmFwcGVuZCgnICAgIGJvb2wgJXNfdmFsdWVGb3VuZCA9IGZhbHNlOycgJSBfcGFyYW1ldGVy
LnBhcmFtZXRlcl9uYW1lKQorCisgICAgICAgICAgICBwYXJhbV9hcmdzID0geworICAgICAgICAg
ICAgICAgICdwYXJhbWV0ZXJUeXBlJzogR2VuZXJhdG9yLmNhbGxfcGFyYW1ldGVyX3N0YWNrX3R5
cGVfZm9yX3R5cGUoX3BhcmFtZXRlci50eXBlLCBfcGFyYW1ldGVyLmlzX29wdGlvbmFsKSwKKyAg
ICAgICAgICAgICAgICAncGFyYW1ldGVyTmFtZSc6IF9wYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUs
CisgICAgICAgICAgICAgICAgJ2tleWVkR2V0TWV0aG9kJzogR2VuZXJhdG9yLmtleWVkX2dldF9t
ZXRob2RfZm9yX3R5cGUoX3BhcmFtZXRlci50eXBlKSwKKyAgICAgICAgICAgICAgICAnc3VjY2Vz
c091dFBhcmFtJzogb3V0X3N1Y2Nlc3NfYXJndW1lbnQKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgaW5fcGFyYW1ldGVyX2RlY2xhcmF0aW9ucy5hcHBlbmQoJyAgICAlKHBhcmFtZXRlclR5
cGUpcyBpbl8lKHBhcmFtZXRlck5hbWUpcyA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjol
KGtleWVkR2V0TWV0aG9kKXMocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoIiUocGFy
YW1ldGVyTmFtZSlzIiksICUoc3VjY2Vzc091dFBhcmFtKXMsIHByb3RvY29sRXJyb3JzUHRyKTsn
ICUgcGFyYW1fYXJncykKKworICAgICAgICAgICAgaWYgX3BhcmFtZXRlci5pc19vcHRpb25hbDoK
KyAgICAgICAgICAgICAgICBtZXRob2RfcGFyYW1ldGVycy5hcHBlbmQoJyUocGFyYW1ldGVyTmFt
ZSlzX3ZhbHVlRm91bmQgPyAmaW5fJShwYXJhbWV0ZXJOYW1lKXMgOiBudWxscHRyJyAlIHBhcmFt
X2FyZ3MpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG1ldGhvZF9wYXJhbWV0
ZXJzLmFwcGVuZCgnaW5fJyArIF9wYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpCisKKyAgICAgICAg
aWYgY29tbWFuZC5pc19hc3luYzoKKyAgICAgICAgICAgIGFzeW5jX2FyZ3MgPSB7CisgICAgICAg
ICAgICAgICAgJ2RvbWFpbk5hbWUnOiBkb21haW4uZG9tYWluX25hbWUsCisgICAgICAgICAgICAg
ICAgJ2NhbGxiYWNrTmFtZSc6IHVjZmlyc3QoY29tbWFuZC5jb21tYW5kX25hbWUpICsgJ0NhbGxi
YWNrJworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBvdXRfcGFyYW1ldGVyX2Fzc2lnbm1l
bnRzLmFwcGVuZCgnICAgICAgICBjYWxsYmFjay0+ZGlzYWJsZSgpOycpCisgICAgICAgICAgICBv
dXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgICAgICBtX2JhY2tlbmREaXNwYXRj
aGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7JykKKyAgICAgICAgICAgIG91dF9w
YXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAgICAgIHJldHVybjsnKQorICAgICAgICAg
ICAgbWV0aG9kX3BhcmFtZXRlcnMuYXBwZW5kKCdjYWxsYmFjaycpCisKKyAgICAgICAgZWxzZToK
KyAgICAgICAgICAgIGZvciBfcGFyYW1ldGVyIGluIGNvbW1hbmQucmV0dXJuX3BhcmFtZXRlcnM6
CisgICAgICAgICAgICAgICAgcGFyYW1fYXJncyA9IHsKKyAgICAgICAgICAgICAgICAgICAgJ3Bh
cmFtZXRlclR5cGUnOiBHZW5lcmF0b3IucmV0dXJuX3BhcmFtZXRlcl9zdGFja190eXBlX2Zvcl9w
YXJhbWV0ZXIoX3BhcmFtZXRlciwgZG9tYWluKSwKKyAgICAgICAgICAgICAgICAgICAgJ3BhcmFt
ZXRlck5hbWUnOiBfcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lLAorICAgICAgICAgICAgICAgICAg
ICAna2V5ZWRTZXRNZXRob2QnOiBHZW5lcmF0b3Iua2V5ZWRfc2V0X21ldGhvZF9mb3JfdHlwZShf
cGFyYW1ldGVyLnR5cGUpLAorICAgICAgICAgICAgICAgICAgICAnZnJhbWV3b3JrUHJlZml4Jzog
c2VsZi5tb2RlbCgpLmZyYW1ld29yay5zZXR0aW5nKCdwcmVmaXgnKQorICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgIG91dF9wYXJhbWV0ZXJfZGVjbGFyYXRpb25zLmFwcGVuZCgn
ICAgICUocGFyYW1ldGVyVHlwZSlzIG91dF8lKHBhcmFtZXRlck5hbWUpczsnICUgcGFyYW1fYXJn
cykKKyAgICAgICAgICAgICAgICBpZiBfcGFyYW1ldGVyLmlzX29wdGlvbmFsOgorICAgICAgICAg
ICAgICAgICAgICBpZiBHZW5lcmF0b3Iuc2hvdWxkX3VzZV93cmFwcGVyX2Zvcl9yZXR1cm5fdHlw
ZShfcGFyYW1ldGVyLnR5cGUpOgorICAgICAgICAgICAgICAgICAgICAgICAgb3V0X3BhcmFtZXRl
cl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICAgICAgaWYgKG91dF8lKHBhcmFtZXRlck5hbWUpcy5p
c0Fzc2lnbmVkKCkpJyAlIHBhcmFtX2FyZ3MpCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRf
cGFyYW1ldGVyX2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgICAgICAgICAgcmVzdWx0LT4lKGtleWVk
U2V0TWV0aG9kKXMoQVNDSUlMaXRlcmFsKCIlKHBhcmFtZXRlck5hbWUpcyIpLCBvdXRfJShwYXJh
bWV0ZXJOYW1lKXMuZ2V0VmFsdWUoKSk7JyAlIHBhcmFtX2FyZ3MpCisgICAgICAgICAgICAgICAg
ICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBvdXRfcGFyYW1ldGVyX2Fzc2lnbm1l
bnRzLmFwcGVuZCgnICAgICAgICBpZiAob3V0XyUocGFyYW1ldGVyTmFtZSlzKScgJSBwYXJhbV9h
cmdzKQorICAgICAgICAgICAgICAgICAgICAgICAgb3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cy5h
cHBlbmQoJyAgICAgICAgICAgIHJlc3VsdC0+JShrZXllZFNldE1ldGhvZClzKEFTQ0lJTGl0ZXJh
bCgiJShwYXJhbWV0ZXJOYW1lKXMiKSwgb3V0XyUocGFyYW1ldGVyTmFtZSlzKTsnICUgcGFyYW1f
YXJncykKKyAgICAgICAgICAgICAgICBlbGlmIF9wYXJhbWV0ZXIudHlwZS5pc19lbnVtKCk6Cisg
ICAgICAgICAgICAgICAgICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAg
ICAgIHJlc3VsdC0+JShrZXllZFNldE1ldGhvZClzKEFTQ0lJTGl0ZXJhbCgiJShwYXJhbWV0ZXJO
YW1lKXMiKSwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Z2V0JShmcmFtZXdvcmtQcmVmaXgpc0Vu
dW1Db25zdGFudFZhbHVlKG91dF8lKHBhcmFtZXRlck5hbWUpcykpOycgJSBwYXJhbV9hcmdzKQor
ICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIG91dF9wYXJhbWV0ZXJf
YXNzaWdubWVudHMuYXBwZW5kKCcgICAgICAgIHJlc3VsdC0+JShrZXllZFNldE1ldGhvZClzKEFT
Q0lJTGl0ZXJhbCgiJShwYXJhbWV0ZXJOYW1lKXMiKSwgb3V0XyUocGFyYW1ldGVyTmFtZSlzKTsn
ICUgcGFyYW1fYXJncykKKworICAgICAgICAgICAgICAgIGlmIEdlbmVyYXRvci5zaG91bGRfcGFz
c19ieV9jb3B5X2Zvcl9yZXR1cm5fdHlwZShfcGFyYW1ldGVyLnR5cGUpOgorICAgICAgICAgICAg
ICAgICAgICBtZXRob2RfcGFyYW1ldGVycy5hcHBlbmQoJ291dF8nICsgX3BhcmFtZXRlci5wYXJh
bWV0ZXJfbmFtZSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBt
ZXRob2RfcGFyYW1ldGVycy5hcHBlbmQoJyZvdXRfJyArIF9wYXJhbWV0ZXIucGFyYW1ldGVyX25h
bWUpCisKKyAgICAgICAgY29tbWFuZF9hcmdzID0geworICAgICAgICAgICAgJ2RvbWFpbk5hbWUn
OiBkb21haW4uZG9tYWluX25hbWUsCisgICAgICAgICAgICAnY2FsbGJhY2tOYW1lJzogJyVzQ2Fs
bGJhY2snICUgdWNmaXJzdChjb21tYW5kLmNvbW1hbmRfbmFtZSksCisgICAgICAgICAgICAnY29t
bWFuZE5hbWUnOiBjb21tYW5kLmNvbW1hbmRfbmFtZSwKKyAgICAgICAgICAgICdpblBhcmFtZXRl
ckRlY2xhcmF0aW9ucyc6ICJcbiIuam9pbihpbl9wYXJhbWV0ZXJfZGVjbGFyYXRpb25zKSwKKyAg
ICAgICAgICAgICdpbnZvY2F0aW9uUGFyYW1ldGVycyc6ICIsICIuam9pbihtZXRob2RfcGFyYW1l
dGVycykKKyAgICAgICAgfQorCisgICAgICAgIGlmIGxlbihjb21tYW5kLmNhbGxfcGFyYW1ldGVy
cykgPT0gMDoKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgndm9pZCBJbnNwZWN0b3IlKGRvbWFp
bk5hbWUpc0JhY2tlbmREaXNwYXRjaGVyOjolKGNvbW1hbmROYW1lKXMobG9uZyBjYWxsSWQsIGNv
bnN0IEluc3BlY3Rvck9iamVjdCYpJyAlIGNvbW1hbmRfYXJncykKKyAgICAgICAgZWxzZToKKyAg
ICAgICAgICAgIGxpbmVzLmFwcGVuZCgndm9pZCBJbnNwZWN0b3IlKGRvbWFpbk5hbWUpc0JhY2tl
bmREaXNwYXRjaGVyOjolKGNvbW1hbmROYW1lKXMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rv
ck9iamVjdCYgbWVzc2FnZSknICUgY29tbWFuZF9hcmdzKQorICAgICAgICBsaW5lcy5hcHBlbmQo
J3snKQorCisgICAgICAgIGlmIGxlbihjb21tYW5kLmNhbGxfcGFyYW1ldGVycykgPiAwOgorICAg
ICAgICAgICAgbGluZXMuYXBwZW5kKFRlbXBsYXRlKFRlbXBsYXRlcy5CYWNrZW5kRGlzcGF0Y2hl
ckltcGxlbWVudGF0aW9uUHJlcGFyZUNvbW1hbmRBcmd1bWVudHMpLnN1YnN0aXR1dGUoTm9uZSwg
Kipjb21tYW5kX2FyZ3MpKQorCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIEVycm9yU3RyaW5n
IGVycm9yOycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7JykKKyAgICAgICAgaWYgY29t
bWFuZC5pc19hc3luYzoKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIFJlZlB0cjxJbnNw
ZWN0b3IlKGRvbWFpbk5hbWUpc0JhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6JShjYWxsYmFja05h
bWUpcz4gY2FsbGJhY2sgPSBhZG9wdFJlZihuZXcgSW5zcGVjdG9yJShkb21haW5OYW1lKXNCYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXI6OiUoY2FsbGJhY2tOYW1lKXMobV9iYWNrZW5kRGlzcGF0Y2hl
cixjYWxsSWQpKTsnICUgY29tbWFuZF9hcmdzKQorICAgICAgICBpZiBsZW4oY29tbWFuZC5yZXR1
cm5fcGFyYW1ldGVycykgPiAwOgorICAgICAgICAgICAgbGluZXMuZXh0ZW5kKG91dF9wYXJhbWV0
ZXJfZGVjbGFyYXRpb25zKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBtX2FnZW50LT4lKGNv
bW1hbmROYW1lKXMoJShpbnZvY2F0aW9uUGFyYW1ldGVycylzKTsnICUgY29tbWFuZF9hcmdzKQor
ICAgICAgICBsaW5lcy5hcHBlbmQoJycpCisgICAgICAgIGlmIGNvbW1hbmQuaXNfYXN5bmM6Cisg
ICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBpZiAoZXJyb3IubGVuZ3RoKCkpIHsnKQorICAg
ICAgICAgICAgbGluZXMuZXh0ZW5kKG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMpCisgICAgICAg
ICAgICBsaW5lcy5hcHBlbmQoJyAgICB9JykKKyAgICAgICAgZWxpZiBsZW4oY29tbWFuZC5yZXR1
cm5fcGFyYW1ldGVycykgPiAxOgorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgaWYgKCFl
cnJvci5sZW5ndGgoKSkgeycpCisgICAgICAgICAgICBsaW5lcy5leHRlbmQob3V0X3BhcmFtZXRl
cl9hc3NpZ25tZW50cykKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIH0nKQorICAgICAg
ICBlbGlmIGxlbihjb21tYW5kLnJldHVybl9wYXJhbWV0ZXJzKSA9PSAxOgorICAgICAgICAgICAg
bGluZXMuYXBwZW5kKCcgICAgaWYgKCFlcnJvci5sZW5ndGgoKSknKQorICAgICAgICAgICAgbGlu
ZXMuZXh0ZW5kKG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMpCisgICAgICAgICAgICBsaW5lcy5h
cHBlbmQoJycpCisKKyAgICAgICAgaWYgbm90IGNvbW1hbmQuaXNfYXN5bmM6CisgICAgICAgICAg
ICBsaW5lcy5hcHBlbmQoJyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2Fs
bElkLCByZXN1bHQucmVsZWFzZSgpLCBlcnJvcik7JykKKyAgICAgICAgbGluZXMuYXBwZW5kKCd9
JykKKyAgICAgICAgcmV0dXJuICJcbiIuam9pbihsaW5lcykKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2Zyb250ZW5k
X2Rpc3BhdGNoZXJfaGVhZGVyLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfZnJvbnRlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNDAyZjk5ZDUzMWY1OTZhZmZlODdkMGY2NTQyODU0YmJkNGE3MjNiNAotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2Rl
Z2VuL2dlbmVyYXRlX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5CkBAIC0wLDAgKzEsMTA5
IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMgQ29weXJpZ2h0IChjKSAyMDE0IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChjKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
IyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisKKworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBvcy5wYXRoCitp
bXBvcnQgcmUKK2ltcG9ydCBzdHJpbmcKKworZnJvbSBnZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRv
ciwgdWNmaXJzdAorZnJvbSBzdHJpbmcgaW1wb3J0IFRlbXBsYXRlCitmcm9tIGdlbmVyYXRvcl90
ZW1wbGF0ZXMgaW1wb3J0IEdlbmVyYXRvclRlbXBsYXRlcyBhcyBUZW1wbGF0ZXMKKworIyBVc2Ug
YSBnbG9iYWwgbG9nZ2VyLCB3aGljaCBub3JtYWxseSBvbmx5IGxvZ3MgZXJyb3JzLgorIyBJdCBj
YW4gYmUgY29uZmlndXJlZCB0byBsb2cgZGVidWcgbWVzc2FnZXMgZnJvbSB0aGUgQ0xJLgorbG9n
ID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2JhbCcpCisKKworY2xhc3MgRnJvbnRlbmREaXNwYXRj
aGVySGVhZGVyR2VuZXJhdG9yKEdlbmVyYXRvcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1v
ZGVsLCBpbnB1dF9maWxlcGF0aCk6CisgICAgICAgIHNlbGYuX21vZGVsID0gbW9kZWwKKyAgICAg
ICAgc2VsZi5faW5wdXRfZmlsZXBhdGggPSBpbnB1dF9maWxlcGF0aAorCisgICAgZGVmIG1vZGVs
KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fbW9kZWwKKworICAgIGRlZiBvdXRwdXRfZmls
ZW5hbWUoc2VsZik6CisgICAgICAgIHJldHVybiAiSW5zcGVjdG9yJXNGcm9udGVuZERpc3BhdGNo
ZXJzLmgiICUgc2VsZi5tb2RlbCgpLmZyYW1ld29yay5zZXR0aW5nKCdwcmVmaXgnKQorCisgICAg
ZGVmIGdlbmVyYXRlX2xpY2Vuc2Uoc2VsZik6CisgICAgICAgIHJldHVybiBUZW1wbGF0ZShUZW1w
bGF0ZXMuQ29weXJpZ2h0QmxvY2spLnN1YnN0aXR1dGUoTm9uZSwgaW5wdXRGaWxlbmFtZT1vcy5w
YXRoLmJhc2VuYW1lKHNlbGYuX2lucHV0X2ZpbGVwYXRoKSkKKworICAgIGRlZiBnZW5lcmF0ZV9v
dXRwdXQoc2VsZik6CisgICAgICAgIGhlYWRlcnMgPSBbCisgICAgICAgICAgICAnIkluc3BlY3Rv
ciVzVHlwZUJ1aWxkZXJzLmgiJyAlIHNlbGYubW9kZWwoKS5mcmFtZXdvcmsuc2V0dGluZygncHJl
Zml4JyksCisgICAgICAgICAgICAnPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwu
aD4nLAorICAgICAgICAgICAgJzxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+JywKKyAgICAg
ICAgICAgICc8d3RmL1Bhc3NSZWZQdHIuaD4nLAorICAgICAgICAgICAgJzx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4nXQorCisgICAgICAgIHR5cGVkZWZzID0gW10KKworICAgICAgICBzZWN0aW9ucyA9
IFtdCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLmdlbmVyYXRlX2xpY2Vuc2UoKSkKKyAg
ICAgICAgaGVhZGVyX2FyZ3MgPSB7CisgICAgICAgICAgICAnaGVhZGVyR3VhcmRTdHJpbmcnOiBy
ZS5zdWIoJ1stLi9dJywgJ18nLCBzZWxmLm91dHB1dF9maWxlbmFtZSgpKSwKKyAgICAgICAgICAg
ICdpbmNsdWRlcyc6ICdcbicuam9pbihbJyNpbmNsdWRlICcgKyBoZWFkZXIgZm9yIGhlYWRlciBp
biBoZWFkZXJzXSksCisgICAgICAgICAgICAndHlwZWRlZnMnOiAnXG4nLmpvaW4oWyd0eXBlZGVm
ICVzICVzOycgJSB0eXBlZGVmIGZvciB0eXBlZGVmIGluIHR5cGVkZWZzXSksCisgICAgICAgICAg
ICAnaW5wdXRGaWxlbmFtZSc6IHNlbGYuX2lucHV0X2ZpbGVwYXRoCisgICAgICAgIH0KKworICAg
ICAgICBkZWYgc2hvdWxkX2dlbmVyYXRlX2RvbWFpbihkb21haW4pOgorICAgICAgICAgICAgcmV0
dXJuIGxlbihkb21haW4uZXZlbnRzKSA+IDAgYW5kIG5vdCBkb21haW4uaXNfc3VwcGxlbWVudGFs
CisKKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKFRlbXBsYXRlcy5DcHBIZWFkZXJQ
cmVsdWRlKS5zdWJzdGl0dXRlKE5vbmUsICoqaGVhZGVyX2FyZ3MpKQorICAgICAgICBzZWN0aW9u
cy5leHRlbmQoW3NlbGYuZ2VuZXJhdGVfZG9tYWluX2Rpc3BhdGNoZXIoZG9tYWluKSBmb3IgZG9t
YWluIGluIGZpbHRlcihzaG91bGRfZ2VuZXJhdGVfZG9tYWluLCBzZWxmLm1vZGVsKCkuZG9tYWlu
cyldKQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVzLkNwcEhlYWRl
clBvc3RsdWRlKS5zdWJzdGl0dXRlKE5vbmUsICoqaGVhZGVyX2FyZ3MpKQorICAgICAgICByZXR1
cm4gIlxuXG4iLmpvaW4oc2VjdGlvbnMpCisKKyAgICBkZWYgZ2VuZXJhdGVfZG9tYWluX2Rpc3Bh
dGNoZXIoc2VsZiwgZG9tYWluKToKKyAgICAgICAgbGluZXMgPSBbXQorICAgICAgICBkb21haW5f
Z3VhcmQgPSBHZW5lcmF0b3IuY3BwX2d1YXJkX2Zvcl9kb21haW4oZG9tYWluKQorICAgICAgICBp
ZiBkb21haW5fZ3VhcmQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoIiNp
ZiAlcyIgJSBkb21haW5fZ3VhcmQpCisKKyAgICAgICAgY2xhc3NDb21wb25lbnRzID0gWydjbGFz
cyddCisgICAgICAgIGV4cG9ydE1hY3JvID0gc2VsZi5tb2RlbCgpLmZyYW1ld29yay5zZXR0aW5n
KCdleHBvcnRfbWFjcm8nLCBOb25lKQorICAgICAgICBpZiBleHBvcnRNYWNybyBpcyBub3QgTm9u
ZToKKyAgICAgICAgICAgIGNsYXNzQ29tcG9uZW50cy5hcHBlbmQoZXhwb3J0TWFjcm8pCisKKyAg
ICAgICAgaGFuZGxlcl9hcmdzID0geworICAgICAgICAgICAgJ2NsYXNzQW5kRXhwb3J0TWFjcm8n
OiAiICIuam9pbihjbGFzc0NvbXBvbmVudHMpLAorICAgICAgICAgICAgJ2RvbWFpbk5hbWUnOiBk
b21haW4uZG9tYWluX25hbWUsCisgICAgICAgICAgICAnZXZlbnREZWNsYXJhdGlvbnMnOiAiXG4i
LmpvaW4oW3NlbGYuZ2VuZXJhdGVfZGlzcGF0Y2hlcl9ldmVudChldmVudCwgZG9tYWluKSBmb3Ig
ZXZlbnQgaW4gZG9tYWluLmV2ZW50c10pCisgICAgICAgIH0KKworICAgICAgICBsaW5lcy5hcHBl
bmQoVGVtcGxhdGUoVGVtcGxhdGVzLkZyb250ZW5kRGlzcGF0Y2hlckRvbWFpbkRpc3BhdGNoZXJE
ZWNsYXJhdGlvbikuc3Vic3RpdHV0ZShOb25lLCAqKmhhbmRsZXJfYXJncykpCisgICAgICAgIGlm
IGRvbWFpbl9ndWFyZCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgiI2Vu
ZGlmIC8vICVzIiAlIGRvbWFpbl9ndWFyZCkKKyAgICAgICAgcmV0dXJuICJcbiIuam9pbihsaW5l
cykKKworICAgIGRlZiBnZW5lcmF0ZV9kaXNwYXRjaGVyX2V2ZW50KHNlbGYsIGV2ZW50LCBkb21h
aW4pOgorICAgICAgICBmb3JtYWxfcGFyYW1ldGVycyA9IFtdCisgICAgICAgIGZvciBfcGFyYW1l
dGVyIGluIGV2ZW50LmV2ZW50X3BhcmFtZXRlcnM6CisgICAgICAgICAgICBmb3JtYWxfcGFyYW1l
dGVycy5hcHBlbmQoJyVzICVzJyAlIChHZW5lcmF0b3IuZm9ybWFsX3BhcmFtZXRlcl90eXBlX2Zv
cl9ldmVudF9wYXJhbWV0ZXIoX3BhcmFtZXRlciwgZG9tYWluKSwgX3BhcmFtZXRlci5wYXJhbWV0
ZXJfbmFtZSkpCisKKyAgICAgICAgcmV0dXJuICIgICAgdm9pZCAlcyglcyk7IiAlIChldmVudC5l
dmVudF9uYW1lLCAiLCAiLmpvaW4oZm9ybWFsX3BhcmFtZXRlcnMpKQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfZnJv
bnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2Zyb250ZW5kX2Rpc3BhdGNoZXJf
aW1wbGVtZW50YXRpb24ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzc0NjdkNmRlODAzNTcwMTM5YTdkOWYwNDUz
YzlkZTZiN2NkZTkwNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1w
bGVtZW50YXRpb24ucHkKQEAgLTAsMCArMSwxMzkgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgor
IyBDb3B5cmlnaHQgKGMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBD
b3B5cmlnaHQgKGMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisj
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisjIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworCitpbXBv
cnQgbG9nZ2luZworaW1wb3J0IG9zLnBhdGgKK2ltcG9ydCByZQoraW1wb3J0IHN0cmluZworCitm
cm9tIGdlbmVyYXRvciBpbXBvcnQgR2VuZXJhdG9yLCB1Y2ZpcnN0Citmcm9tIHN0cmluZyBpbXBv
cnQgVGVtcGxhdGUKK2Zyb20gZ2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgR2VuZXJhdG9yVGVt
cGxhdGVzIGFzIFRlbXBsYXRlcworZnJvbSBtb2RlbHMgaW1wb3J0IE9iamVjdFR5cGUsIEFycmF5
VHlwZQorCisjIFVzZSBhIGdsb2JhbCBsb2dnZXIsIHdoaWNoIG5vcm1hbGx5IG9ubHkgbG9ncyBl
cnJvcnMuCitsb2cgPSBsb2dnaW5nLmdldExvZ2dlcignZ2xvYmFsJykKKworCitjbGFzcyBGcm9u
dGVuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihHZW5lcmF0b3IpOgorICAgIGRl
ZiBfX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpOgorICAgICAgICBzZWxmLl9t
b2RlbCA9IG1vZGVsCisgICAgICAgIHNlbGYuX2lucHV0X2ZpbGVwYXRoID0gaW5wdXRfZmlsZXBh
dGgKKworICAgIGRlZiBtb2RlbChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX21vZGVsCisK
KyAgICBkZWYgb3V0cHV0X2ZpbGVuYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gIkluc3BlY3Rv
ciVzRnJvbnRlbmREaXNwYXRjaGVycy5jcHAiICUgc2VsZi5tb2RlbCgpLmZyYW1ld29yay5zZXR0
aW5nKCdwcmVmaXgnKQorCisgICAgZGVmIGdlbmVyYXRlX2xpY2Vuc2Uoc2VsZik6CisgICAgICAg
IHJldHVybiBUZW1wbGF0ZShUZW1wbGF0ZXMuQ29weXJpZ2h0QmxvY2spLnN1YnN0aXR1dGUoTm9u
ZSwgaW5wdXRGaWxlbmFtZT1vcy5wYXRoLmJhc2VuYW1lKHNlbGYuX2lucHV0X2ZpbGVwYXRoKSkK
KworICAgIGRlZiBnZW5lcmF0ZV9vdXRwdXQoc2VsZik6CisgICAgICAgIHNlY29uZGFyeV9oZWFk
ZXJzID0gWyc8d3RmL3RleHQvQ1N0cmluZy5oPiddCisKKyAgICAgICAgc2VjdGlvbnMgPSBbXQor
ICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5nZW5lcmF0ZV9saWNlbnNlKCkpCisgICAgICAg
IGhlYWRlcl9hcmdzID0geworICAgICAgICAgICAgJ3ByaW1hcnlJbmNsdWRlJzogJyJJbnNwZWN0
b3Ilc0Zyb250ZW5kRGlzcGF0Y2hlcnMuaCInICUgc2VsZi5tb2RlbCgpLmZyYW1ld29yay5zZXR0
aW5nKCdwcmVmaXgnKSwKKyAgICAgICAgICAgICdzZWNvbmRhcnlJbmNsdWRlcyc6ICJcbiIuam9p
bihbJyNpbmNsdWRlICVzJyAlIGhlYWRlciBmb3IgaGVhZGVyIGluIHNlY29uZGFyeV9oZWFkZXJz
XSksCisgICAgICAgICAgICAnaW5wdXRGaWxlbmFtZSc6IHNlbGYuX2lucHV0X2ZpbGVwYXRoCisg
ICAgICAgIH0KKworICAgICAgICBkZWYgc2hvdWxkX2dlbmVyYXRlX2RvbWFpbihkb21haW4pOgor
ICAgICAgICAgICAgcmV0dXJuIGxlbihkb21haW4uZXZlbnRzKSA+IDAgYW5kIG5vdCBkb21haW4u
aXNfc3VwcGxlbWVudGFsCisKKyAgICAgICAgaW5jbHVkZWRfZG9tYWlucyA9IGZpbHRlcihzaG91
bGRfZ2VuZXJhdGVfZG9tYWluLCBzZWxmLm1vZGVsKCkuZG9tYWlucykKKworICAgICAgICBzZWN0
aW9ucy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVzLkNwcEltcGxlbWVudGF0aW9uUHJlbHVkZSku
c3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkKKyAgICAgICAgc2VjdGlvbnMuZXh0ZW5k
KFtzZWxmLmdlbmVyYXRlX2RvbWFpbl9kaXNwYXRjaGVyKGRvbWFpbikgZm9yIGRvbWFpbiBpbiBp
bmNsdWRlZF9kb21haW5zXSkKKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKFRlbXBs
YXRlcy5DcHBJbXBsZW1lbnRhdGlvblBvc3RsdWRlKS5zdWJzdGl0dXRlKE5vbmUsICoqaGVhZGVy
X2FyZ3MpKQorICAgICAgICByZXR1cm4gIlxuXG4iLmpvaW4oc2VjdGlvbnMpCisKKyAgICBkZWYg
Z2VuZXJhdGVfZG9tYWluX2Rpc3BhdGNoZXIoc2VsZiwgZG9tYWluKToKKyAgICAgICAgbGluZXMg
PSBbXQorICAgICAgICBkb21haW5fZ3VhcmQgPSBHZW5lcmF0b3IuY3BwX2d1YXJkX2Zvcl9kb21h
aW4oZG9tYWluKQorICAgICAgICBpZiBkb21haW5fZ3VhcmQgaXMgbm90IE5vbmU6CisgICAgICAg
ICAgICBsaW5lcy5hcHBlbmQoIiNpZiAlcyIgJSBkb21haW5fZ3VhcmQpCisKKyAgICAgICAgaW1w
bGVtZW50YXRpb25zID0gW10KKworICAgICAgICBmb3IgX2V2ZW50IGluIGRvbWFpbi5ldmVudHM6
CisgICAgICAgICAgICBpbXBsZW1lbnRhdGlvbnMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfZGlzcGF0
Y2hlcl9ldmVudChfZXZlbnQsIGRvbWFpbikpCisKKyAgICAgICAgbGluZXMuYXBwZW5kKCJcblxu
Ii5qb2luKGltcGxlbWVudGF0aW9ucykpCisgICAgICAgIGlmIGRvbWFpbl9ndWFyZCBpcyBub3Qg
Tm9uZToKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgiI2VuZGlmIC8vICVzIiAlIGRvbWFpbl9n
dWFyZCkKKyAgICAgICAgcmV0dXJuICJcbiIuam9pbihsaW5lcykKKworICAgIGRlZiBnZW5lcmF0
ZV9kaXNwYXRjaGVyX2V2ZW50KHNlbGYsIGV2ZW50LCBkb21haW4pOgorICAgICAgICBsaW5lcyA9
IFtdCisgICAgICAgIHBhcmFtZXRlcl9hc3NpZ25tZW50cyA9IFtdCisgICAgICAgIGZvcm1hbF9w
YXJhbWV0ZXJzID0gW10KKworICAgICAgICBmb3IgX3BhcmFtZXRlciBpbiBldmVudC5ldmVudF9w
YXJhbWV0ZXJzOgorCisgICAgICAgICAgICBwYXJhbWV0ZXJfdmFsdWUgPSBfcGFyYW1ldGVyLnBh
cmFtZXRlcl9uYW1lCisgICAgICAgICAgICBpZiBfcGFyYW1ldGVyLmlzX29wdGlvbmFsIGFuZCBu
b3QgR2VuZXJhdG9yLnNob3VsZF9wYXNzX2J5X2NvcHlfZm9yX3JldHVybl90eXBlKF9wYXJhbWV0
ZXIudHlwZSk6CisgICAgICAgICAgICAgICAgcGFyYW1ldGVyX3ZhbHVlID0gJyonICsgcGFyYW1l
dGVyX3ZhbHVlCisgICAgICAgICAgICBpZiBfcGFyYW1ldGVyLnR5cGUuaXNfZW51bSgpOgorICAg
ICAgICAgICAgICAgIHBhcmFtZXRlcl92YWx1ZSA9ICdJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpn
ZXQlc0VudW1Db25zdGFudFZhbHVlKCVzKScgJSAoc2VsZi5tb2RlbCgpLmZyYW1ld29yay5zZXR0
aW5nKCdwcmVmaXgnKSwgcGFyYW1ldGVyX3ZhbHVlKQorCisgICAgICAgICAgICBwYXJhbWV0ZXJf
YXJncyA9IHsKKyAgICAgICAgICAgICAgICAncGFyYW1ldGVyVHlwZSc6IEdlbmVyYXRvci5yZXR1
cm5fcGFyYW1ldGVyX3N0YWNrX3R5cGVfZm9yX3BhcmFtZXRlcihfcGFyYW1ldGVyLCBkb21haW4p
LAorICAgICAgICAgICAgICAgICdwYXJhbWV0ZXJOYW1lJzogX3BhcmFtZXRlci5wYXJhbWV0ZXJf
bmFtZSwKKyAgICAgICAgICAgICAgICAncGFyYW1ldGVyVmFsdWUnOiBwYXJhbWV0ZXJfdmFsdWUs
CisgICAgICAgICAgICAgICAgJ2tleWVkU2V0TWV0aG9kJzogR2VuZXJhdG9yLmtleWVkX3NldF9t
ZXRob2RfZm9yX3R5cGUoX3BhcmFtZXRlci50eXBlKSwKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgaWYgX3BhcmFtZXRlci5pc19vcHRpb25hbDoKKyAgICAgICAgICAgICAgICBwYXJhbWV0
ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAgaWYgKCUocGFyYW1ldGVyTmFtZSlzKScgJSBwYXJh
bWV0ZXJfYXJncykKKyAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5k
KCcgICAgICAgIHBhcmFtc09iamVjdC0+JShrZXllZFNldE1ldGhvZClzKEFTQ0lJTGl0ZXJhbCgi
JShwYXJhbWV0ZXJOYW1lKXMiKSwgJShwYXJhbWV0ZXJWYWx1ZSlzKTsnICUgcGFyYW1ldGVyX2Fy
Z3MpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHBhcmFtZXRlcl9hc3NpZ25t
ZW50cy5hcHBlbmQoJyAgICBwYXJhbXNPYmplY3QtPiUoa2V5ZWRTZXRNZXRob2QpcyhBU0NJSUxp
dGVyYWwoIiUocGFyYW1ldGVyTmFtZSlzIiksICUocGFyYW1ldGVyVmFsdWUpcyk7JyAlIHBhcmFt
ZXRlcl9hcmdzKQorCisgICAgICAgICAgICBmb3JtYWxfcGFyYW1ldGVycy5hcHBlbmQoJyVzICVz
JyAlIChHZW5lcmF0b3IuZm9ybWFsX3BhcmFtZXRlcl90eXBlX2Zvcl9ldmVudF9wYXJhbWV0ZXIo
X3BhcmFtZXRlciwgZG9tYWluKSwgX3BhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkpCisKKyAgICAg
ICAgZXZlbnRfYXJncyA9IHsKKyAgICAgICAgICAgICdkb21haW5OYW1lJzogZG9tYWluLmRvbWFp
bl9uYW1lLAorICAgICAgICAgICAgJ2V2ZW50TmFtZSc6IGV2ZW50LmV2ZW50X25hbWUsCisgICAg
ICAgICAgICAnZm9ybWFsUGFyYW1ldGVycyc6ICIsICIuam9pbihmb3JtYWxfcGFyYW1ldGVycykK
KyAgICAgICAgfQorCisgICAgICAgIGxpbmVzLmFwcGVuZCgndm9pZCBJbnNwZWN0b3IlKGRvbWFp
bk5hbWUpc0Zyb250ZW5kRGlzcGF0Y2hlcjo6JShldmVudE5hbWUpcyglKGZvcm1hbFBhcmFtZXRl
cnMpcyknICUgZXZlbnRfYXJncykKKyAgICAgICAgbGluZXMuYXBwZW5kKCd7JykKKyAgICAgICAg
bGluZXMuYXBwZW5kKCcgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4ganNvbk1lc3NhZ2UgPSBJ
bnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGpz
b25NZXNzYWdlLT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJtZXRob2QiKSwgQVNDSUlMaXRlcmFs
KCIlKGRvbWFpbk5hbWUpcy4lKGV2ZW50TmFtZSlzIikpOycgJSBldmVudF9hcmdzKQorCisgICAg
ICAgIGlmIGxlbihwYXJhbWV0ZXJfYXNzaWdubWVudHMpID4gMDoKKyAgICAgICAgICAgIGxpbmVz
LmFwcGVuZCgnICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3Bl
Y3Rvck9iamVjdDo6Y3JlYXRlKCk7JykKKyAgICAgICAgICAgIGxpbmVzLmV4dGVuZChwYXJhbWV0
ZXJfYXNzaWdubWVudHMpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBqc29uTWVzc2Fn
ZS0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicGFyYW1zIiksIHBhcmFtc09iamVjdCk7JykKKwor
ICAgICAgICBsaW5lcy5hcHBlbmQoJycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIG1faW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQoanNvbk1lc3NhZ2Ut
PnRvSlNPTlN0cmluZygpKTsnKQorICAgICAgICBsaW5lcy5hcHBlbmQoJ30nKQorICAgICAgICBy
ZXR1cm4gIlxuIi5qb2luKGxpbmVzKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdG9yLnB5IGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdG9yLnB5Cm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmRkNTIwZWQ2ZDEyMGFlZjRjZTk4MTg0Y2IzMmE0MjZhZmIwNzkwNDgKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5l
cmF0b3IucHkKQEAgLTAsMCArMSwyNDcgQEAKKyMgQ29weXJpZ2h0IChjKSAyMDE0IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChjKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
IyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisKK2Zyb20gbW9kZWxzIGltcG9ydCBQcmltaXRpdmVUeXBlLCBP
YmplY3RUeXBlLCBBcnJheVR5cGUsIEVudW1UeXBlLCBBbGlhc2VkVHlwZQorCitkZWYgdWNmaXJz
dChzdHIpOgorICAgIHJldHVybiBzdHJbOjFdLnVwcGVyKCkgKyBzdHJbMTpdCisKK19QUklNSVRJ
VkVfVE9fQ1BQX05BTUVfTUFQID0geworICAgICdib29sZWFuJzogJ2Jvb2wnLAorICAgICdpbnRl
Z2VyJzogJ2ludCcsCisgICAgJ251bWJlcic6ICdkb3VibGUnLAorICAgICdzdHJpbmcnOiAnU3Ry
aW5nJywKKyAgICAnb2JqZWN0JzogJ0luc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0JywKKyAgICAn
YW55JzogJ0luc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUnCit9CisKK2NsYXNzIEdlbmVyYXRvcjoK
KyAgICBkZWYgX19pbml0X18oc2VsZiwgbW9kZWwsIGlucHV0X2ZpbGVwYXRoKToKKyAgICAgICAg
c2VsZi5fbW9kZWwgPSBtb2RlbAorICAgICAgICBzZWxmLl9pbnB1dF9maWxlcGF0aCA9IGlucHV0
X2ZpbGVwYXRoCisKKyAgICBkZWYgbW9kZWwoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9t
b2RlbAorCisgICAgZGVmIGdlbmVyYXRlX291dHB1dChzZWxmKToKKyAgICAgICAgcGFzcworCisg
ICAgZGVmIG91dHB1dF9maWxlbmFtZShzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgIyBGSVhN
RTogVGhpcyBzaG91bGQgYmUgY29udmVydGVkIGludG8gYSBwcm9wZXJ0eSBvbiB0aGUgZG9tYWlu
IGluIEpTT04uCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBjcHBfZ3VhcmRfZm9yX2RvbWFp
bihkb21haW4pOgorICAgICAgICBvdmVycmlkZXMgPSB7CisgICAgICAgICAgICAnRGF0YWJhc2Un
OiAiRU5BQkxFKFNRTF9EQVRBQkFTRSkiLAorICAgICAgICAgICAgJ0luZGV4ZWREQic6ICJFTkFC
TEUoSU5ERVhFRF9EQVRBQkFTRSkiLAorICAgICAgICAgICAgJ1JlcGxheSc6ICJFTkFCTEUoV0VC
X1JFUExBWSkiLAorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIG92ZXJyaWRlcy5nZXQoZG9t
YWluLmRvbWFpbl9uYW1lLCBOb25lKQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBrZXll
ZF9nZXRfbWV0aG9kX2Zvcl90eXBlKHR5cGUpOgorICAgICAgICBpZiBpc2luc3RhbmNlKHR5cGUs
IE9iamVjdFR5cGUpOgorICAgICAgICAgICAgcmV0dXJuICdnZXRPYmplY3QnCisgICAgICAgIGlm
IGlzaW5zdGFuY2UodHlwZSwgQXJyYXlUeXBlKToKKyAgICAgICAgICAgIHJldHVybiAnZ2V0QXJy
YXknCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh0eXBlLCBQcmltaXRpdmVUeXBlKToKKyAgICAg
ICAgICAgIGlmIHR5cGUucmF3X25hbWUoKSBpcyAnaW50ZWdlcic6CisgICAgICAgICAgICAgICAg
cmV0dXJuICdnZXRJbnQnCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVy
biAnZ2V0JyArIHVjZmlyc3QodHlwZS5yYXdfbmFtZSgpKQorICAgICAgICBlbGlmIGlzaW5zdGFu
Y2UodHlwZSwgQWxpYXNlZFR5cGUpOgorICAgICAgICAgICAgcmV0dXJuIEdlbmVyYXRvci5rZXll
ZF9nZXRfbWV0aG9kX2Zvcl90eXBlKHR5cGUuYWxpYXNlZF90eXBlKQorICAgICAgICBlbGlmIGlz
aW5zdGFuY2UodHlwZSwgRW51bVR5cGUpOgorICAgICAgICAgICAgcmV0dXJuIEdlbmVyYXRvci5r
ZXllZF9nZXRfbWV0aG9kX2Zvcl90eXBlKHR5cGUucHJpbWl0aXZlX3R5cGUpCisKKyAgICBAc3Rh
dGljbWV0aG9kCisgICAgZGVmIGtleWVkX3NldF9tZXRob2RfZm9yX3R5cGUodHlwZSk6CisgICAg
ICAgIGlmIGlzaW5zdGFuY2UodHlwZSwgT2JqZWN0VHlwZSkgb3IgaXNpbnN0YW5jZSh0eXBlLCBB
cnJheVR5cGUpOgorICAgICAgICAgICAgcmV0dXJuICdzZXRWYWx1ZScKKyAgICAgICAgZWxpZiBp
c2luc3RhbmNlKHR5cGUsIFByaW1pdGl2ZVR5cGUpOgorICAgICAgICAgICAgaWYgdHlwZS5yYXdf
bmFtZSgpIGluIFsnaW50ZWdlcicsICdudW1iZXInXToKKyAgICAgICAgICAgICAgICByZXR1cm4g
J3NldE51bWJlcicKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuICdz
ZXQnICsgdWNmaXJzdCh0eXBlLnJhd19uYW1lKCkpCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh0
eXBlLCBBbGlhc2VkVHlwZSk6CisgICAgICAgICAgICByZXR1cm4gR2VuZXJhdG9yLmtleWVkX3Nl
dF9tZXRob2RfZm9yX3R5cGUodHlwZS5hbGlhc2VkX3R5cGUpCisgICAgICAgIGVsaWYgaXNpbnN0
YW5jZSh0eXBlLCBFbnVtVHlwZSk6CisgICAgICAgICAgICByZXR1cm4gR2VuZXJhdG9yLmtleWVk
X3NldF9tZXRob2RfZm9yX3R5cGUodHlwZS5wcmltaXRpdmVfdHlwZSkKKworICAgIEBzdGF0aWNt
ZXRob2QKKyAgICBkZWYgdHlwZV9idWlsZGVyX3R5cGVfZm9yX3R5cGUodHlwZSk6CisgICAgICAg
IGlmIGlzaW5zdGFuY2UodHlwZSwgKE9iamVjdFR5cGUsIEFsaWFzZWRUeXBlKSk6CisgICAgICAg
ICAgICByZXR1cm4gJ0luc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OiVzOjolcycgJSAodHlwZS50eXBl
X2RvbWFpbigpLmRvbWFpbl9uYW1lLCB0eXBlLnJhd19uYW1lKCkpCisgICAgICAgIGVsaWYgaXNp
bnN0YW5jZSh0eXBlLCBBcnJheVR5cGUpOgorICAgICAgICAgICAgcmV0dXJuICdJbnNwZWN0b3I6
OlR5cGVCdWlsZGVyOjpBcnJheTwlcz4nICUgR2VuZXJhdG9yLnR5cGVfYnVpbGRlcl90eXBlX2Zv
cl90eXBlKHR5cGUuZWxlbWVudF90eXBlKQorICAgICAgICBlbGlmIGlzaW5zdGFuY2UodHlwZSwg
UHJpbWl0aXZlVHlwZSk6CisgICAgICAgICAgICByZXR1cm4gR2VuZXJhdG9yLmNwcF9uYW1lX2Zv
cl9wcmltaXRpdmVfdHlwZSh0eXBlKQorICAgICAgICBlbGlmIGlzaW5zdGFuY2UodHlwZSwgRW51
bVR5cGUpOgorICAgICAgICAgICAgcmV0dXJuICdJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjolczo6
JXM6OkVudW0nICUgKHR5cGUudHlwZV9kb21haW4oKS5kb21haW5fbmFtZSwgdHlwZS5yYXdfbmFt
ZSgpKQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBjYWxsX3BhcmFtZXRlcl90eXBlX2Zv
cl90eXBlKHR5cGUsIGlzX29wdGlvbmFsKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZSh0eXBlLCBP
YmplY3RUeXBlKToKKyAgICAgICAgICAgIGlmIGlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAg
IHJldHVybiAnY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PionCisgICAg
ICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiAnY29uc3QgUmVmUHRyPEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYnCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh0eXBlLCBB
cnJheVR5cGUpOgorICAgICAgICAgICAgaWYgaXNfb3B0aW9uYWw6CisgICAgICAgICAgICAgICAg
cmV0dXJuICJjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheT4qIgorICAgICAg
ICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gImNvbnN0IFJlZlB0cjxJbnNwZWN0
b3I6Okluc3BlY3RvckFycmF5PiYiCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh0eXBlLCBBbGlh
c2VkVHlwZSk6CisgICAgICAgICAgICByZXR1cm4gR2VuZXJhdG9yLmNhbGxfcGFyYW1ldGVyX3R5
cGVfZm9yX3R5cGUodHlwZS5hbGlhc2VkX3R5cGUsIGlzX29wdGlvbmFsKQorICAgICAgICBlbGlm
IGlzaW5zdGFuY2UodHlwZSwgUHJpbWl0aXZlVHlwZSk6CisgICAgICAgICAgICBjcHBfbmFtZSA9
IEdlbmVyYXRvci5jcHBfbmFtZV9mb3JfcHJpbWl0aXZlX3R5cGUodHlwZSkKKyAgICAgICAgICAg
IGlmIGlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAgIHJldHVybiAnY29uc3QgJXMqJyAlIGNw
cF9uYW1lCisgICAgICAgICAgICBlbGlmIHR5cGUucmF3X25hbWUoKSBpbiBbJ3N0cmluZyddOgor
ICAgICAgICAgICAgICAgIHJldHVybiAnY29uc3QgJXMmJyAlIGNwcF9uYW1lCisgICAgICAgICAg
ICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBjcHBfbmFtZQorICAgICAgICBlbGlmIGlz
aW5zdGFuY2UodHlwZSwgRW51bVR5cGUpOgorICAgICAgICAgICAgcmV0dXJuIEdlbmVyYXRvci5j
YWxsX3BhcmFtZXRlcl90eXBlX2Zvcl90eXBlKHR5cGUucHJpbWl0aXZlX3R5cGUsIGlzX29wdGlv
bmFsKQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiByZXR1cm5fcGFyYW1ldGVyX3R5cGVf
Zm9yX3R5cGUodHlwZSwgaXNfb3B0aW9uYWwpOgorICAgICAgICBpZiBpc2luc3RhbmNlKHR5cGUs
IChPYmplY3RUeXBlLCBBcnJheVR5cGUpKToKKyAgICAgICAgICAgIHJldHVybiAnUmVmUHRyPCVz
PiYnICUgR2VuZXJhdG9yLnR5cGVfYnVpbGRlcl90eXBlX2Zvcl90eXBlKHR5cGUpCisgICAgICAg
IGVsaWYgaXNpbnN0YW5jZSh0eXBlLCBBbGlhc2VkVHlwZSk6CisgICAgICAgICAgICByZXR1cm4g
JyVzKicgJSBHZW5lcmF0b3IudHlwZV9idWlsZGVyX3R5cGVfZm9yX3R5cGUodHlwZSkKKyAgICAg
ICAgZWxpZiBpc2luc3RhbmNlKHR5cGUsIFByaW1pdGl2ZVR5cGUpOgorICAgICAgICAgICAgY3Bw
X25hbWUgPSBHZW5lcmF0b3IuY3BwX25hbWVfZm9yX3ByaW1pdGl2ZV90eXBlKHR5cGUpCisgICAg
ICAgICAgICBpZiBpc19vcHRpb25hbDoKKyAgICAgICAgICAgICAgICByZXR1cm4gIkluc3BlY3Rv
cjo6VHlwZUJ1aWxkZXI6Ok9wdE91dHB1dDwlcz4qIiAlIGNwcF9uYW1lCisgICAgICAgICAgICBl
bHNlOgorICAgICAgICAgICAgICAgIHJldHVybiAnJXMqJyAlIGNwcF9uYW1lCisgICAgICAgIGVs
aWYgaXNpbnN0YW5jZSh0eXBlLCBFbnVtVHlwZSk6CisgICAgICAgICAgICByZXR1cm4gICclcyon
ICUgR2VuZXJhdG9yLnR5cGVfYnVpbGRlcl90eXBlX2Zvcl90eXBlKHR5cGUpCisKKyAgICBAc3Rh
dGljbWV0aG9kCisgICAgZGVmIGNhbGxfcGFyYW1ldGVyX3N0YWNrX3R5cGVfZm9yX3R5cGUodHlw
ZSwgaXNfb3B0aW9uYWwpOgorICAgICAgICBpZiBpc2luc3RhbmNlKHR5cGUsIE9iamVjdFR5cGUp
OgorICAgICAgICAgICAgcmV0dXJuICJSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+
IgorICAgICAgICBpZiBpc2luc3RhbmNlKHR5cGUsIEFycmF5VHlwZSk6CisgICAgICAgICAgICBy
ZXR1cm4gIlJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5PiIKKyAgICAgICAgZWxpZiBp
c2luc3RhbmNlKHR5cGUsIEFsaWFzZWRUeXBlKToKKyAgICAgICAgICAgIHJldHVybiBHZW5lcmF0
b3IuY2FsbF9wYXJhbWV0ZXJfc3RhY2tfdHlwZV9mb3JfdHlwZSh0eXBlLmFsaWFzZWRfdHlwZSwg
aXNfb3B0aW9uYWwpCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh0eXBlLCBQcmltaXRpdmVUeXBl
KToKKyAgICAgICAgICAgIGNwcF9uYW1lID0gR2VuZXJhdG9yLmNwcF9uYW1lX2Zvcl9wcmltaXRp
dmVfdHlwZSh0eXBlKQorICAgICAgICAgICAgaWYgdHlwZS5xdWFsaWZpZWRfbmFtZSgpIGluIFsn
YW55JywgJ29iamVjdCddOgorICAgICAgICAgICAgICAgIHJldHVybiAiUmVmUHRyPCVzPiIgJSBH
ZW5lcmF0b3IuY3BwX25hbWVfZm9yX3ByaW1pdGl2ZV90eXBlKHR5cGUpCisgICAgICAgICAgICBl
bGlmIGlzX29wdGlvbmFsIGFuZCB0eXBlLnF1YWxpZmllZF9uYW1lKCkgbm90IGluIFsnYm9vbGVh
bicsICdzdHJpbmcnLCAnaW50ZWdlciddOgorICAgICAgICAgICAgICAgIHJldHVybiAiSW5zcGVj
dG9yOjpUeXBlQnVpbGRlcjo6T3B0T3V0cHV0PCVzPiIgJSBjcHBfbmFtZQorICAgICAgICAgICAg
ZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gY3BwX25hbWUKKyAgICAgICAgZWxpZiBpc2lu
c3RhbmNlKHR5cGUsIEVudW1UeXBlKToKKyAgICAgICAgICAgIHJldHVybiBHZW5lcmF0b3IuY2Fs
bF9wYXJhbWV0ZXJfc3RhY2tfdHlwZV9mb3JfdHlwZSh0eXBlLnByaW1pdGl2ZV90eXBlLCBpc19v
cHRpb25hbCkKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgcmV0dXJuX3BhcmFtZXRlcl9z
dGFja190eXBlX2Zvcl9wYXJhbWV0ZXIocGFyYW1ldGVyLCBkb21haW4pOgorICAgICAgICB0eXBl
ID0gcGFyYW1ldGVyLnR5cGUKKyAgICAgICAgaWYgaXNpbnN0YW5jZSh0eXBlLCAoQXJyYXlUeXBl
LCBPYmplY3RUeXBlKSk6CisgICAgICAgICAgICByZXR1cm4gJ1JlZlB0cjwlcz4nICUgR2VuZXJh
dG9yLnR5cGVfYnVpbGRlcl90eXBlX2Zvcl90eXBlKHR5cGUpCisgICAgICAgIGVsaWYgaXNpbnN0
YW5jZSh0eXBlLCBBbGlhc2VkVHlwZSk6CisgICAgICAgICAgICByZXR1cm4gJyVzJyAlIEdlbmVy
YXRvci50eXBlX2J1aWxkZXJfdHlwZV9mb3JfdHlwZSh0eXBlKQorICAgICAgICBlbGlmIGlzaW5z
dGFuY2UodHlwZSwgUHJpbWl0aXZlVHlwZSk6CisgICAgICAgICAgICBjcHBfbmFtZSA9IEdlbmVy
YXRvci5jcHBfbmFtZV9mb3JfcHJpbWl0aXZlX3R5cGUodHlwZSkKKyAgICAgICAgICAgIGlmIHBh
cmFtZXRlci5pc19vcHRpb25hbDoKKyAgICAgICAgICAgICAgICByZXR1cm4gIkluc3BlY3Rvcjo6
VHlwZUJ1aWxkZXI6Ok9wdE91dHB1dDwlcz4iICUgY3BwX25hbWUKKyAgICAgICAgICAgIGVsc2U6
CisgICAgICAgICAgICAgICAgcmV0dXJuIGNwcF9uYW1lCisgICAgICAgIGVsaWYgaXNpbnN0YW5j
ZSh0eXBlLCBFbnVtVHlwZSk6CisgICAgICAgICAgICByZXR1cm4gICdJbnNwZWN0b3Ilc0JhY2tl
bmREaXNwYXRjaGVySGFuZGxlcjo6JXM6OkVudW0nICUgKGRvbWFpbi5kb21haW5fbmFtZSwgdWNm
aXJzdChwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpKQorCisgICAgQHN0YXRpY21ldGhvZAorICAg
IGRlZiBmb3JtYWxfcGFyYW1ldGVyX3R5cGVfZm9yX3JldHVybl9wYXJhbWV0ZXIocGFyYW1ldGVy
LCBkb21haW4pOgorICAgICAgICB0eXBlID0gcGFyYW1ldGVyLnR5cGUKKyAgICAgICAgaWYgaXNp
bnN0YW5jZSh0eXBlLCAoQXJyYXlUeXBlLCBPYmplY3RUeXBlKSk6CisgICAgICAgICAgICByZXR1
cm4gJ1Bhc3NSZWZQdHI8JXM+JyAlIEdlbmVyYXRvci50eXBlX2J1aWxkZXJfdHlwZV9mb3JfdHlw
ZSh0eXBlKQorICAgICAgICBlbGlmIGlzaW5zdGFuY2UodHlwZSwgQWxpYXNlZFR5cGUpOgorICAg
ICAgICAgICAgcmV0dXJuICclcycgJSBHZW5lcmF0b3IudHlwZV9idWlsZGVyX3R5cGVfZm9yX3R5
cGUodHlwZSkKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKHR5cGUsIFByaW1pdGl2ZVR5cGUpOgor
ICAgICAgICAgICAgY3BwX25hbWUgPSBHZW5lcmF0b3IuY3BwX25hbWVfZm9yX3ByaW1pdGl2ZV90
eXBlKHR5cGUpCisgICAgICAgICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6CisgICAgICAg
ICAgICAgICAgcmV0dXJuICdJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8JXM+JyAl
IGNwcF9uYW1lCisgICAgICAgICAgICBlbGlmIHR5cGUucXVhbGlmaWVkX25hbWUoKSBpbiBbJ3N0
cmluZyddOgorICAgICAgICAgICAgICAgIHJldHVybiAnY29uc3QgJXMmJyAlIGNwcF9uYW1lCisg
ICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBjcHBfbmFtZQorICAgICAg
ICBlbGlmIGlzaW5zdGFuY2UodHlwZSwgRW51bVR5cGUpOgorICAgICAgICAgICAgcmV0dXJuICAn
SW5zcGVjdG9yJXNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OiVzOjpFbnVtJyAlIChkb21haW4u
ZG9tYWluX25hbWUsIHVjZmlyc3QocGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKSkKKworICAgIEBz
dGF0aWNtZXRob2QKKyAgICBkZWYgZm9ybWFsX3BhcmFtZXRlcl90eXBlX2Zvcl9ldmVudF9wYXJh
bWV0ZXIocGFyYW1ldGVyLCBkb21haW4pOgorICAgICAgICB0eXBlID0gcGFyYW1ldGVyLnR5cGUK
KyAgICAgICAgaWYgaXNpbnN0YW5jZSh0eXBlLCAoQXJyYXlUeXBlLCBPYmplY3RUeXBlKSk6Cisg
ICAgICAgICAgICByZXR1cm4gJ1Bhc3NSZWZQdHI8JXM+JyAlIEdlbmVyYXRvci50eXBlX2J1aWxk
ZXJfdHlwZV9mb3JfdHlwZSh0eXBlKQorICAgICAgICBlbGlmIGlzaW5zdGFuY2UodHlwZSwgQWxp
YXNlZFR5cGUpOgorICAgICAgICAgICAgYnVpbGRlcl90eXBlID0gR2VuZXJhdG9yLnR5cGVfYnVp
bGRlcl90eXBlX2Zvcl90eXBlKHR5cGUpCisgICAgICAgICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0
aW9uYWw6CisgICAgICAgICAgICAgICAgcmV0dXJuICdjb25zdCAlcyogY29uc3QnICUgYnVpbGRl
cl90eXBlCisgICAgICAgICAgICBlbGlmIHR5cGUuYWxpYXNlZF90eXBlLnF1YWxpZmllZF9uYW1l
KCkgaW4gWydpbnRlZ2VyJywgJ251bWJlciddOgorICAgICAgICAgICAgICAgIHJldHVybiBHZW5l
cmF0b3IuY3BwX25hbWVfZm9yX3ByaW1pdGl2ZV90eXBlKHR5cGUuYWxpYXNlZF90eXBlKQorICAg
ICAgICAgICAgZWxpZiB0eXBlLmFsaWFzZWRfdHlwZS5xdWFsaWZpZWRfbmFtZSgpIGluIFsnc3Ry
aW5nJ106CisgICAgICAgICAgICAgICAgcmV0dXJuICdjb25zdCAlcyYnICUgYnVpbGRlcl90eXBl
CisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBidWlsZGVyX3R5cGUK
KyAgICAgICAgZWxpZiBpc2luc3RhbmNlKHR5cGUsIFByaW1pdGl2ZVR5cGUpOgorICAgICAgICAg
ICAgY3BwX25hbWUgPSBHZW5lcmF0b3IuY3BwX25hbWVfZm9yX3ByaW1pdGl2ZV90eXBlKHR5cGUp
CisgICAgICAgICAgICBpZiB0eXBlLnF1YWxpZmllZF9uYW1lKCkgaW4gWydvYmplY3QnXToKKyAg
ICAgICAgICAgICAgICByZXR1cm4gJ1Bhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmpl
Y3Q+JworICAgICAgICAgICAgZWxpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6CisgICAgICAgICAg
ICAgICAgcmV0dXJuICdjb25zdCAlcyogY29uc3QnICUgY3BwX25hbWUKKyAgICAgICAgICAgIGVs
aWYgdHlwZS5xdWFsaWZpZWRfbmFtZSgpIGluIFsnc3RyaW5nJ106CisgICAgICAgICAgICAgICAg
cmV0dXJuICdjb25zdCAlcyYnICUgY3BwX25hbWUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGNwcF9uYW1lCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh0eXBlLCBF
bnVtVHlwZSk6CisgICAgICAgICAgICBpZiB0eXBlLmlzX2Fub255bW91czoKKyAgICAgICAgICAg
ICAgICBlbnVtX3R5cGVfbmFtZSA9ICclczo6RW51bScgJSB1Y2ZpcnN0KHBhcmFtZXRlci5wYXJh
bWV0ZXJfbmFtZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZW51bV90eXBl
X25hbWUgPSBHZW5lcmF0b3IudHlwZV9idWlsZGVyX3R5cGVfZm9yX3R5cGUodHlwZSkKKyAgICAg
ICAgICAgIGlmIHBhcmFtZXRlci5pc19vcHRpb25hbDoKKyAgICAgICAgICAgICAgICByZXR1cm4g
JyVzKicgJSBlbnVtX3R5cGVfbmFtZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAg
ICByZXR1cm4gJyVzJyAlIGVudW1fdHlwZV9uYW1lCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAg
ZGVmIGNwcF9uYW1lX2Zvcl9wcmltaXRpdmVfdHlwZSh0eXBlKToKKyAgICAgICAgcmV0dXJuIF9Q
UklNSVRJVkVfVE9fQ1BQX05BTUVfTUFQLmdldCh0eXBlLnJhd19uYW1lKCkpCisKKyAgICBAc3Rh
dGljbWV0aG9kCisgICAgZGVmIHNob3VsZF91c2Vfd3JhcHBlcl9mb3JfcmV0dXJuX3R5cGUodHlw
ZSk6CisgICAgICAgIHJldHVybiBub3QgaXNpbnN0YW5jZSh0eXBlLCAoQXJyYXlUeXBlLCBPYmpl
Y3RUeXBlKSkKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgc2hvdWxkX3Bhc3NfYnlfY29w
eV9mb3JfcmV0dXJuX3R5cGUodHlwZSk6CisgICAgICAgIHJldHVybiBpc2luc3RhbmNlKHR5cGUs
IChBcnJheVR5cGUsIE9iamVjdFR5cGUpKQorCisKK2NsYXNzIER1bW15R2VuZXJhdG9yKEdlbmVy
YXRvcik6CisgICAgcGFzcwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdG9yX3RlbXBsYXRlcy5weSBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRvcl90ZW1wbGF0ZXMu
cHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uYzU0ZDQ1OWMyZTAyMzczODcwYWM1Njk5MDNhZjVlZDc4YWQxOWM1Ywot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9jb2RlZ2VuL2dlbmVyYXRvcl90ZW1wbGF0ZXMucHkKQEAgLTAsMCArMSwyMDQgQEAKKyMhL3Vz
ci9iaW4vZW52IHB5dGhvbgorIyBDb3B5cmlnaHQgKGMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKGMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisj
IGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisjIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworIyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisjIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKworIyBHZW5lcmF0b3IgdGVtcGxhdGVzLCB3aGljaCBjYW4gYmUgZmlsbGVkIHdp
dGggc3RyaW5nLlRlbXBsYXRlLgorIyBGb2xsb3dpbmcgYXJlIGNsYXNzZXMgdGhhdCBmaWxsIHRo
ZSB0ZW1wbGF0ZXMgZnJvbSB0aGUgdHlwZWNoZWNrZWQgbW9kZWwuCisKKworY2xhc3MgR2VuZXJh
dG9yVGVtcGxhdGVzOgorICAgIENvcHlyaWdodEJsb2NrID0gKAorICAgICIiIi8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gJHtpbnB1dEZpbGVuYW1lfQorLy8gYnkgdGhlIHNjcmlwdDogSmF2YVNjcmlwdENvcmUv
cmVwbGF5L3NjcmlwdHMvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weSIiIikKKworICAgIENwcEhl
YWRlclByZWx1ZGUgPSAoCisgICAgIiIiI2lmbmRlZiAke2hlYWRlckd1YXJkU3RyaW5nfQorI2Rl
ZmluZSAke2hlYWRlckd1YXJkU3RyaW5nfQorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworJHtp
bmNsdWRlc30KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKyR7dHlwZWRlZnN9IiIiKQorCisg
ICAgQ3BwSGVhZGVyUG9zdGx1ZGUgPSAoCisgICAgIiIifSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
CisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorCisjZW5kaWYgLy8gIWRlZmluZWQoJHto
ZWFkZXJHdWFyZFN0cmluZ30pIiIiKQorCisgICAgQ3BwSW1wbGVtZW50YXRpb25QcmVsdWRlID0g
KAorICAgICIiIiNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICR7cHJpbWFyeUluY2x1ZGV9
IgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworJHtzZWNvbmRhcnlJbmNsdWRlc30KKworbmFt
ZXNwYWNlIEluc3BlY3RvciB7IiIiKQorCisgICAgQ3BwSW1wbGVtZW50YXRpb25Qb3N0bHVkZSA9
ICgKKyAgICAiIiJ9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJ
TlNQRUNUT1IpCisiIiIpCisKKyAgICBCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckRvbWFpbkhhbmRs
ZXJEZWNsYXJhdGlvbiA9ICgKKyAgICAiIiIke2NsYXNzQW5kRXhwb3J0TWFjcm99IEluc3BlY3Rv
ciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgeworcHVibGljOgorJHtjb21t
YW5kRGVjbGFyYXRpb25zfQorcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgfkluc3BlY3RvciR7ZG9t
YWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKTsKK307IiIiKQorCisgICAgQmFja2Vu
ZERpc3BhdGNoZXJIZWFkZXJEb21haW5EaXNwYXRjaGVyRGVjbGFyYXRpb24gPSAoCisgICAgIiIi
JHtjbGFzc0FuZEV4cG9ydE1hY3JvfSBJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3Bh
dGNoZXIgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JTdXBwbGVtZW50YWxCYWNr
ZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9y
JHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUoSW5zcGVjdG9yOjpJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlciosIEluc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2gobG9uZyBjYWxsSWQsIGNv
bnN0IFN0cmluZyYgbWV0aG9kLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0
PiBtZXNzYWdlKSBvdmVycmlkZTsKKyR7Y29tbWFuZERlY2xhcmF0aW9uc30KK3ByaXZhdGU6Cisg
ICAgSW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyKEluc3BlY3Rvcjo6SW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXIqLCBJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERp
c3BhdGNoZXJIYW5kbGVyKik7CisgICAgSW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNw
YXRjaGVySGFuZGxlciogbV9hZ2VudDsKK307IiIiKQorCisgICAgQmFja2VuZERpc3BhdGNoZXJI
ZWFkZXJBc3luY0NvbW1hbmREZWNsYXJhdGlvbiA9ICgKKyAgICAiIiIgICAgY2xhc3MgJHtjYWxs
YmFja05hbWV9IDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6
OkNhbGxiYWNrQmFzZSB7CisgICAgcHVibGljOgorICAgICAgICAke2NhbGxiYWNrTmFtZX0oUGFz
c1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiwgaW50IGlkKTsK
KyAgICAgICAgdm9pZCBzZW5kU3VjY2Vzcygke291dFBhcmFtZXRlcnN9KTsKKyAgICB9OworICAg
IHZpcnR1YWwgdm9pZCAke2NvbW1hbmROYW1lfSgke2luUGFyYW1ldGVyc30pID0gMDsiIiIpCisK
KyAgICBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uU21hbGxTd2l0Y2ggPSAoCisgICAg
IiIidm9pZCBJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNo
KGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IG1lc3NhZ2UpCit7CisgICAgUmVmPEluc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5k
RGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7CisKKyR7ZGlzcGF0Y2hDYXNlc30KKyAgICBlbHNl
CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJ
ZCwgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCBTdHJpbmcoIici
KSArICIke2RvbWFpbk5hbWV9IiArICcuJyArIG1ldGhvZCArICInIHdhcyBub3QgZm91bmQiKTsK
K30iIiIpCisKKyAgICBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uTGFyZ2VTd2l0Y2gg
PSAoCisiIiJ2b2lkIEluc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcjo6ZGlz
cGF0Y2gobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBQYXNzUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gbWVzc2FnZSkKK3sKKyAgICBSZWY8SW5zcGVjdG9yJHtkb21haW5OYW1lfUJh
Y2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKKworICAgIHR5cGVkZWYgdm9pZCAoSW5z
cGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyOjoqQ2FsbEhhbmRsZXIpKGxvbmcg
Y2FsbElkLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7CisgICAg
dHlwZWRlZiBIYXNoTWFwPFN0cmluZywgQ2FsbEhhbmRsZXI+IERpc3BhdGNoTWFwOworICAgIERF
UFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NBTChEaXNwYXRjaE1hcCwgZGlzcGF0Y2hNYXAsICgp
KTsKKyAgICBpZiAoZGlzcGF0Y2hNYXAuaXNFbXB0eSgpKSB7CisgICAgICAgIHN0YXRpYyBjb25z
dCBzdHJ1Y3QgTWV0aG9kVGFibGUgeworICAgICAgICAgICAgY29uc3QgY2hhciogbmFtZTsKKyAg
ICAgICAgICAgIENhbGxIYW5kbGVyIGhhbmRsZXI7CisgICAgICAgIH0gY29tbWFuZHNbXSA9IHsK
KyR7ZGlzcGF0Y2hDYXNlc30KKyAgICAgICAgfTsKKyAgICAgICAgc2l6ZV90IGxlbmd0aCA9IFdU
Rl9BUlJBWV9MRU5HVEgoY29tbWFuZHMpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGxlbmd0aDsgKytpKQorICAgICAgICAgICAgZGlzcGF0Y2hNYXAuYWRkKGNvbW1hbmRzW2ldLm5h
bWUsIGNvbW1hbmRzW2ldLmhhbmRsZXIpOworICAgIH0KKworICAgIEhhc2hNYXA8U3RyaW5nLCBD
YWxsSGFuZGxlcj46Oml0ZXJhdG9yIGl0ID0gZGlzcGF0Y2hNYXAuZmluZChtZXRob2QpOworICAg
IGlmIChpdCA9PSBkaXNwYXRjaE1hcC5lbmQoKSkgeworICAgICAgICBtX2JhY2tlbmREaXNwYXRj
aGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIEluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyOjpNZXRob2ROb3RGb3VuZCwgU3RyaW5nKCInIikgKyAiJHtkb21haW5OYW1lfSIgKyAnLicg
KyBtZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICAoKCp0aGlzKS4qaXQtPnZhbHVlKShjYWxsSWQsICptZXNzYWdlLmdldCgpKTsKK30iIiIp
CisKKyAgICBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uRG9tYWluQ29uc3RydWN0b3Ig
PSAoCisgICAgIiIiUGFzc1JlZlB0cjxJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3Bh
dGNoZXI+IEluc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKElu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlciwgSW5zcGVjdG9yJHtk
b21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCit7CisgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXIoYmFj
a2VuZERpc3BhdGNoZXIsIGFnZW50KSk7Cit9CisKK0luc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNr
ZW5kRGlzcGF0Y2hlcjo6SW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyKElu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlciwgSW5zcGVjdG9yJHtk
b21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCisgICAgOiBJbnNwZWN0
b3JTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlcikKKyAgICAs
IG1fYWdlbnQoYWdlbnQpCit7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNw
YXRjaGVyRm9yRG9tYWluKEFTQ0lJTGl0ZXJhbCgiJHtkb21haW5OYW1lfSIpLCB0aGlzKTsKK30i
IiIpCisKKyAgICBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uUHJlcGFyZUNvbW1hbmRB
cmd1bWVudHMgPSAoCisiIiIgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9y
cyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBwYXJhbXNDb250YWluZXIgPSBtZXNzYWdlLmdldE9iamVjdChBU0NJSUxpdGVyYWwoInBhcmFt
cyIpKTsKKyAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0Nv
bnRhaW5lci5nZXQoKTsKKyAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBw
cm90b2NvbEVycm9ycy5nZXQoKTsKKyR7aW5QYXJhbWV0ZXJEZWNsYXJhdGlvbnN9CisgICAgaWYg
KHByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgeworICAgICAgICBTdHJpbmcgZXJyb3JNZXNzYWdl
ID0gU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCBcJyVzXCcgY2FuJ3Qg
YmUgcHJvY2Vzc2VkIiwgIiR7ZG9tYWluTmFtZX0uJHtjb21tYW5kTmFtZX0iKTsKKyAgICAgICAg
bV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElkLCBJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFtcywgZXJyb3JNZXNzYWdlLCBwcm90b2Nv
bEVycm9ycy5yZWxlYXNlKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorIiIiKQorCisgICAg
QmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkFzeW5jQ29tbWFuZCA9ICgKKyIiIkluc3Bl
Y3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OiR7Y2FsbGJhY2tOYW1l
fTo6JHtjYWxsYmFja05hbWV9KFBhc3NSZWZQdHI8SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+
IGJhY2tlbmREaXNwYXRjaGVyLCBpbnQgaWQpIDogSW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlKGJhY2tlbmREaXNwYXRjaGVyLCBpZCkgeyB9CisKK3Zv
aWQgSW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6JHtjYWxs
YmFja05hbWV9OjpzZW5kU3VjY2Vzcygke2Zvcm1hbFBhcmFtZXRlcnN9KQoreworICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IGpzb25NZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUo
KTsKKyR7b3V0UGFyYW1ldGVyQXNzaWdubWVudHN9CisgICAgc2VuZElmQWN0aXZlKGpzb25NZXNz
YWdlLCBFcnJvclN0cmluZygpKTsKK30iIiIpCisKKyAgICBGcm9udGVuZERpc3BhdGNoZXJEb21h
aW5EaXNwYXRjaGVyRGVjbGFyYXRpb24gPSAoCisiIiIke2NsYXNzQW5kRXhwb3J0TWFjcm99IElu
c3BlY3RvciR7ZG9tYWluTmFtZX1Gcm9udGVuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIElu
c3BlY3RvciR7ZG9tYWluTmFtZX1Gcm9udGVuZERpc3BhdGNoZXIoSW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIDogbV9pbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IH0KKyR7ZXZlbnREZWNsYXJhdGlvbnN9
Citwcml2YXRlOgorICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogbV9pbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWw7Cit9OyIiIikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL21vZGVscy5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL21vZGVscy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mZDc0NGNi
MTM3MDVhZTI0MzcxZGVmZTk4NzkzOTZhNzQwOTAwNzlkCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vbW9kZWxzLnB5CkBA
IC0wLDAgKzEsNTQ1IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChj
KSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChjKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMg
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMg
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
IyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCBsb2dnaW5nCisKKyMg
VXNlIGEgZ2xvYmFsIGxvZ2dlciwgd2hpY2ggbm9ybWFsbHkgb25seSBsb2dzIGVycm9ycy4KKyMg
SXQgY2FuIGJlIGNvbmZpZ3VyZWQgdG8gbG9nIGRlYnVnIG1lc3NhZ2VzIGZyb20gdGhlIENMSS4K
K2xvZ2dpbmcuYmFzaWNDb25maWcoZm9ybWF0PSclKGxldmVsbmFtZSlzOiAlKG1lc3NhZ2Upcycs
IGxldmVsPWxvZ2dpbmcuRVJST1IpCitsb2cgPSBsb2dnaW5nLmdldExvZ2dlcignZ2xvYmFsJykK
KworCitfRlJBTUVXT1JLX0NPTkZJR19NQVAgPSB7CisgICAgIkdsb2JhbCI6IHsKKyAgICAgICAg
InByZWZpeCI6ICIiLAorICAgIH0sCisKKyAgICAiV1RGIjogeworICAgICAgICAicHJlZml4Ijog
IldURiIsCisgICAgfSwKKyAgICAiSmF2YVNjcmlwdENvcmUiOiB7CisgICAgICAgICJwcmVmaXgi
OiAiSlMiLAorICAgICAgICAiZXhwb3J0X21hY3JvIjogIkpTX0VYUE9SVF9QUklWQVRFIgorICAg
IH0sCisgICAgIldlYkNvcmUiOiB7CisgICAgICAgICJwcmVmaXgiOiAiV2ViIiwKKyAgICB9LAor
ICAgICMgVXNlZCBmb3IgY29kZSBnZW5lcmF0b3IgdGVzdHMuCisgICAgIlRlc3QiOiB7CisgICAg
ICAgICJwcmVmaXgiOiAiVGVzdCIsCisgICAgfQorfQorCitjbGFzcyBQYXJzZUV4Y2VwdGlvbihF
eGNlcHRpb24pOgorICAgIHBhc3MKKworCitjbGFzcyBUeXBlY2hlY2tFeGNlcHRpb24oRXhjZXB0
aW9uKToKKyAgICBwYXNzCisKKworY2xhc3MgRnJhbWV3b3JrOgorICAgIGRlZiBfX2luaXRfXyhz
ZWxmLCBuYW1lKToKKyAgICAgICAgc2VsZi5fc2V0dGluZ3MgPSBfRlJBTUVXT1JLX0NPTkZJR19N
QVBbbmFtZV0KKyAgICAgICAgc2VsZi5uYW1lID0gbmFtZQorCisgICAgZGVmIHNldHRpbmcoc2Vs
Ziwga2V5LCBkZWZhdWx0PScnKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3NldHRpbmdzLmdldChr
ZXksIGRlZmF1bHQpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGZyb21TdHJpbmcoZnJh
bWV3b3JrU3RyaW5nKToKKyAgICAgICAgaWYgZnJhbWV3b3JrU3RyaW5nID09ICJHbG9iYWwiOgor
ICAgICAgICAgICAgcmV0dXJuIEZyYW1ld29ya3MuR2xvYmFsCisKKyAgICAgICAgaWYgZnJhbWV3
b3JrU3RyaW5nID09ICJXVEYiOgorICAgICAgICAgICAgcmV0dXJuIEZyYW1ld29ya3MuV1RGCisK
KyAgICAgICAgaWYgZnJhbWV3b3JrU3RyaW5nID09ICJKYXZhU2NyaXB0Q29yZSI6CisgICAgICAg
ICAgICByZXR1cm4gRnJhbWV3b3Jrcy5KYXZhU2NyaXB0Q29yZQorCisgICAgICAgIGlmIGZyYW1l
d29ya1N0cmluZyA9PSAiV2ViQ29yZSI6CisgICAgICAgICAgICByZXR1cm4gRnJhbWV3b3Jrcy5X
ZWJDb3JlCisKKyAgICAgICAgaWYgZnJhbWV3b3JrU3RyaW5nID09ICJUZXN0IjoKKyAgICAgICAg
ICAgIHJldHVybiBGcmFtZXdvcmtzLlRlc3QKKworICAgICAgICByYWlzZSBQYXJzZUV4Y2VwdGlv
bigiVW5rbm93biBmcmFtZXdvcms6ICVzIiAlIGZyYW1ld29ya1N0cmluZykKKworCitjbGFzcyBG
cmFtZXdvcmtzOgorICAgIEdsb2JhbCA9IEZyYW1ld29yaygiR2xvYmFsIikKKyAgICBXVEYgPSBG
cmFtZXdvcmsoIldURiIpCisgICAgSmF2YVNjcmlwdENvcmUgPSBGcmFtZXdvcmsoIkphdmFTY3Jp
cHRDb3JlIikKKyAgICBXZWJDb3JlID0gRnJhbWV3b3JrKCJXZWJDb3JlIikKKyAgICBUZXN0ID0g
RnJhbWV3b3JrKCJUZXN0IikKKworCitjbGFzcyBUeXBlUmVmZXJlbmNlOgorICAgIGRlZiBfX2lu
aXRfXyhzZWxmLCB0eXBlX2tpbmQsIHJlZmVyZW5jZWRfdHlwZV9uYW1lLCBlbnVtX3ZhbHVlcywg
YXJyYXlfaXRlbXMpOgorICAgICAgICBzZWxmLnR5cGVfa2luZCA9IHR5cGVfa2luZAorICAgICAg
ICBzZWxmLnJlZmVyZW5jZWRfdHlwZV9uYW1lID0gcmVmZXJlbmNlZF90eXBlX25hbWUKKyAgICAg
ICAgc2VsZi5lbnVtX3ZhbHVlcyA9IGVudW1fdmFsdWVzCisgICAgICAgIGlmIGFycmF5X2l0ZW1z
IGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLmFycmF5X3R5cGVfcmVmID0gTm9uZQorICAgICAg
ICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hcnJheV90eXBlX3JlZiA9IFR5cGVSZWZlcmVuY2Uo
YXJyYXlfaXRlbXMuZ2V0KCd0eXBlJyksIGFycmF5X2l0ZW1zLmdldCgnJHJlZicpLCBhcnJheV9p
dGVtcy5nZXQoJ2VudW0nLCBbXSksIGFycmF5X2l0ZW1zLmdldCgnaXRlbXMnKSkKKworICAgICAg
ICBpZiB0eXBlX2tpbmQgaXMgbm90IE5vbmUgYW5kIHJlZmVyZW5jZWRfdHlwZV9uYW1lIGlzIG5v
dCBOb25lOgorICAgICAgICAgICAgcmFpc2UgUGFyc2VFeGNlcHRpb24oIlR5cGUgcmVmZXJlbmNl
IGNhbm5vdCBoYXZlIGJvdGggJ3R5cGUnIGFuZCAnJHJlZicga2V5cy4iKQorCisgICAgICAgIGlm
IHR5cGVfa2luZCA9PSAiYXJyYXkiIGFuZCBhcnJheV9pdGVtcyBpcyBOb25lOgorICAgICAgICAg
ICAgcmFpc2UgUGFyc2VFeGNlcHRpb24oIlR5cGUgcmVmZXJlbmNlIHdpdGggdHlwZSAnYXJyYXkn
IG11c3QgaGF2ZSBrZXkgJ2l0ZW1zJyB0byBkZWZpbmUgYXJyYXkgZWxlbWVudCB0eXBlLiIpCisK
KyAgICBkZWYgcmVmZXJlbmNlZF9uYW1lKHNlbGYpOgorICAgICAgICBpZiBzZWxmLnJlZmVyZW5j
ZWRfdHlwZV9uYW1lIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYucmVmZXJl
bmNlZF90eXBlX25hbWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnR5
cGVfa2luZCAgIyBpbnRlZ2VyLCBzdHJpbmcsIG51bWJlciwgYm9vbGVhbiwgZW51bSwgb2JqZWN0
LCBhcnJheQorCisKK2NsYXNzIFR5cGU6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAg
ICBwYXNzCisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuIHNl
bGYucXVhbGlmaWVkX25hbWUoKSA9PSBvdGhlci5xdWFsaWZpZWRfbmFtZSgpCisKKyAgICBkZWYg
X19oYXNoX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnF1YWxpZmllZF9uYW1lKCkuX19o
YXNoX18oKQorCisgICAgIyBUaGVzZSBtZXRob2RzIHNob3VsZCBiZSBvdmVycmlkZGVuIGJ5IHN1
YmNsYXNzZXMuCisgICAgZGVmIGlzX2VudW0oc2VsZik6CisgICAgICAgIHJldHVybiBGYWxzZQor
CisgICAgZGVmIHR5cGVfZG9tYWluKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgcmF3
X25hbWUoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBxdWFsaWZpZWRfbmFtZShzZWxm
KToKKyAgICAgICAgcGFzcworCisgICAgIyBUaGlzIGlzIHVzZWQgdG8gcmVzb2x2ZSBuZXN0ZWQg
dHlwZXMgYWZ0ZXIgaW5zdGFuY2VzIGFyZSBjcmVhdGVkLgorICAgIGRlZiByZXNvbHZlX3R5cGVf
cmVmZXJlbmNlcyhzZWxmLCBwcm90b2NvbCk6CisgICAgICAgIHBhc3MKKworCitjbGFzcyBQcmlt
aXRpdmVUeXBlKFR5cGUpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lKToKKyAgICAgICAg
c2VsZi5fbmFtZSA9IG5hbWUKKworICAgIGRlZiB0eXBlX2RvbWFpbihzZWxmKToKKyAgICAgICAg
cmV0dXJuIE5vbmUKKworICAgIGRlZiByYXdfbmFtZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNl
bGYuX25hbWUKKworICAgIGRlZiBxdWFsaWZpZWRfbmFtZShzZWxmKToKKyAgICAgICAgcmV0dXJu
IHNlbGYuX25hbWUKKworCitjbGFzcyBBbGlhc2VkVHlwZShUeXBlKToKKyAgICBkZWYgX19pbml0
X18oc2VsZiwgbmFtZSwgZG9tYWluLCBhbGlhc2VkX3R5cGVfcmVmKToKKyAgICAgICAgc2VsZi5f
bmFtZSA9IG5hbWUKKyAgICAgICAgc2VsZi5fZG9tYWluID0gZG9tYWluCisgICAgICAgIHNlbGYu
X2FsaWFzZWRfdHlwZV9yZWYgPSBhbGlhc2VkX3R5cGVfcmVmCisgICAgICAgIHNlbGYuYWxpYXNl
ZF90eXBlID0gTm9uZQorCisgICAgZGVmIHR5cGVfZG9tYWluKHNlbGYpOgorICAgICAgICByZXR1
cm4gc2VsZi5fZG9tYWluCisKKyAgICBkZWYgcmF3X25hbWUoc2VsZik6CisgICAgICAgIHJldHVy
biBzZWxmLl9uYW1lCisKKyAgICBkZWYgcXVhbGlmaWVkX25hbWUoc2VsZik6CisgICAgICAgIHJl
dHVybiAgIi4iLmpvaW4oW3NlbGYudHlwZV9kb21haW4oKS5kb21haW5fbmFtZSwgc2VsZi5yYXdf
bmFtZSgpXSkKKworICAgIGRlZiByZXNvbHZlX3R5cGVfcmVmZXJlbmNlcyhzZWxmLCBwcm90b2Nv
bCk6CisgICAgICAgIGlmIHNlbGYuYWxpYXNlZF90eXBlIGlzIG5vdCBOb25lOgorICAgICAgICAg
ICAgcmV0dXJuCisKKyAgICAgICAgc2VsZi5hbGlhc2VkX3R5cGUgPSBwcm90b2NvbC5sb29rdXBf
dHlwZV9yZWZlcmVuY2Uoc2VsZi5fYWxpYXNlZF90eXBlX3JlZiwgc2VsZi50eXBlX2RvbWFpbigp
KQorICAgICAgICBsb2cuZGVidWcoIjwgUmVzb2x2ZWQgdHlwZSByZWZlcmVuY2UgZm9yIGFsaWFz
ZWQgdHlwZSBpbiAlczogJXMiICUgKHNlbGYucXVhbGlmaWVkX25hbWUoKSwgc2VsZi5hbGlhc2Vk
X3R5cGUucXVhbGlmaWVkX25hbWUoKSkpCisKKworY2xhc3MgRW51bVR5cGUoVHlwZSk6CisgICAg
ZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsIGRvbWFpbiwgdmFsdWVzLCBwcmltaXRpdmVfdHlwZV9y
ZWYsIGlzX2Fub255bW91cz1GYWxzZSk6CisgICAgICAgIHNlbGYuX25hbWUgPSBuYW1lCisgICAg
ICAgIHNlbGYuX2RvbWFpbiA9IGRvbWFpbgorICAgICAgICBzZWxmLl92YWx1ZXMgPSB2YWx1ZXMK
KyAgICAgICAgc2VsZi5fcHJpbWl0aXZlX3R5cGVfcmVmID0gcHJpbWl0aXZlX3R5cGVfcmVmCisg
ICAgICAgIHNlbGYucHJpbWl0aXZlX3R5cGUgPSBOb25lCisgICAgICAgIHNlbGYuaXNfYW5vbnlt
b3VzID0gaXNfYW5vbnltb3VzCisKKyAgICBkZWYgaXNfZW51bShzZWxmKToKKyAgICAgICAgcmV0
dXJuIFRydWUKKworICAgIGRlZiB0eXBlX2RvbWFpbihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNl
bGYuX2RvbWFpbgorCisgICAgZGVmIGVudW1fdmFsdWVzKHNlbGYpOgorICAgICAgICByZXR1cm4g
c2VsZi5fdmFsdWVzCisKKyAgICBkZWYgcmF3X25hbWUoc2VsZik6CisgICAgICAgIHJldHVybiBz
ZWxmLl9uYW1lCisKKyAgICBkZWYgcXVhbGlmaWVkX25hbWUoc2VsZik6CisgICAgICAgIHJldHVy
biAgIi4iLmpvaW4oW3NlbGYudHlwZV9kb21haW4oKS5kb21haW5fbmFtZSwgc2VsZi5fbmFtZV0p
CisKKyAgICBkZWYgcmVzb2x2ZV90eXBlX3JlZmVyZW5jZXMoc2VsZiwgcHJvdG9jb2wpOgorICAg
ICAgICBpZiBzZWxmLnByaW1pdGl2ZV90eXBlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmV0
dXJuCisKKyAgICAgICAgc2VsZi5wcmltaXRpdmVfdHlwZSA9IHByb3RvY29sLmxvb2t1cF90eXBl
X3JlZmVyZW5jZShzZWxmLl9wcmltaXRpdmVfdHlwZV9yZWYsIERvbWFpbnMuR0xPQkFMKQorICAg
ICAgICBsb2cuZGVidWcoIjwgUmVzb2x2ZWQgdHlwZSByZWZlcmVuY2UgZm9yIGVudW0gdHlwZSBp
biAlczogJXMiICUgKHNlbGYucXVhbGlmaWVkX25hbWUoKSwgc2VsZi5wcmltaXRpdmVfdHlwZS5x
dWFsaWZpZWRfbmFtZSgpKSkKKyAgICAgICAgbG9nLmRlYnVnKCI8PCBlbnVtIHZhbHVlczogJXMi
ICUgc2VsZi5lbnVtX3ZhbHVlcygpKQorCisKK2NsYXNzIEFycmF5VHlwZShUeXBlKToKKyAgICBk
ZWYgX19pbml0X18oc2VsZiwgZWxlbWVudF90eXBlX3JlZiwgZG9tYWluKToKKyAgICAgICAgc2Vs
Zi5fZG9tYWluID0gZG9tYWluCisgICAgICAgIHNlbGYuX2VsZW1lbnRfdHlwZV9yZWYgPSBlbGVt
ZW50X3R5cGVfcmVmCisgICAgICAgIHNlbGYuZWxlbWVudF90eXBlID0gTm9uZQorCisgICAgZGVm
IHR5cGVfZG9tYWluKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fZG9tYWluCisKKyAgICBk
ZWYgcXVhbGlmaWVkX25hbWUoc2VsZik6CisgICAgICAgIHJldHVybiAgIi4iLmpvaW4oWyJhcnJh
eSIsIHNlbGYuZWxlbWVudF90eXBlLnF1YWxpZmllZF9uYW1lKCldKQorCisgICAgZGVmIHJlc29s
dmVfdHlwZV9yZWZlcmVuY2VzKHNlbGYsIHByb3RvY29sKToKKyAgICAgICAgaWYgc2VsZi5lbGVt
ZW50X3R5cGUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBzZWxm
LmVsZW1lbnRfdHlwZSA9IHByb3RvY29sLmxvb2t1cF90eXBlX3JlZmVyZW5jZShzZWxmLl9lbGVt
ZW50X3R5cGVfcmVmLCBzZWxmLnR5cGVfZG9tYWluKCkpCisgICAgICAgIGxvZy5kZWJ1ZygiPCBS
ZXNvbHZlZCB0eXBlIHJlZmVyZW5jZSBmb3IgZWxlbWVudCB0eXBlIGluICVzOiAlcyIgJSAoc2Vs
Zi5xdWFsaWZpZWRfbmFtZSgpLCBzZWxmLmVsZW1lbnRfdHlwZS5xdWFsaWZpZWRfbmFtZSgpKSkK
KworCitjbGFzcyBPYmplY3RUeXBlKFR5cGUpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1l
LCBkb21haW4sIG1lbWJlcnMpOgorICAgICAgICBzZWxmLl9uYW1lID0gbmFtZQorICAgICAgICBz
ZWxmLl9kb21haW4gPSBkb21haW4KKyAgICAgICAgc2VsZi5fbWVtYmVycyA9IG1lbWJlcnMKKwor
ICAgIGRlZiB0eXBlX2RvbWFpbihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2RvbWFpbgor
CisgICAgZGVmIHJhd19uYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fbmFtZQorCisg
ICAgZGVmIHF1YWxpZmllZF9uYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gICIuIi5qb2luKFtz
ZWxmLnR5cGVfZG9tYWluKCkuZG9tYWluX25hbWUsIHNlbGYucmF3X25hbWUoKV0pCisKKworZGVm
IGNoZWNrX2Zvcl9yZXF1aXJlZF9wcm9wZXJ0aWVzKHByb3BzLCBvYmosIHdoYXQpOgorICAgIGZv
ciBwcm9wIGluIHByb3BzOgorICAgICAgICBpZiBwcm9wIG5vdCBpbiBvYmo6CisgICAgICAgICAg
ICByYWlzZSBQYXJzZUV4Y2VwdGlvbigiV2hlbiBwYXJzaW5nICVzLCByZXF1aXJlZCBwcm9wZXJ0
eSBtaXNzaW5nOiAlcyIgJSAod2hhdCwgcHJvcCkpCisKKworY2xhc3MgUHJvdG9jb2w6CisgICAg
ZGVmIF9faW5pdF9fKHNlbGYsIGZyYW1ld29ya19uYW1lKToKKyAgICAgICAgc2VsZi5kb21haW5z
ID0gW10KKyAgICAgICAgc2VsZi50eXBlc19ieV9uYW1lID0ge30KKyAgICAgICAgc2VsZi5mcmFt
ZXdvcmsgPSBGcmFtZXdvcmsuZnJvbVN0cmluZyhmcmFtZXdvcmtfbmFtZSkKKworICAgIGRlZiBw
YXJzZV9zcGVjaWZpY2F0aW9uKHNlbGYsIGpzb24sIGlzU3VwcGxlbWVudGFsKToKKyAgICAgICAg
bG9nLmRlYnVnKCJwYXJzZSB0b3BsZXZlbCIpCisKKyAgICAgICAgaWYgaXNpbnN0YW5jZShqc29u
LCBkaWN0KSBhbmQgJ2RvbWFpbnMnIGluIGpzb246CisgICAgICAgICAgICBqc29uID0ganNvblsn
ZG9tYWlucyddCisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGpzb24sIGxpc3QpOgorICAgICAg
ICAgICAganNvbiA9IFtqc29uXQorCisgICAgICAgIGZvciBkb21haW4gaW4ganNvbjoKKyAgICAg
ICAgICAgIHNlbGYucGFyc2VfZG9tYWluKGRvbWFpbiwgaXNTdXBwbGVtZW50YWwpCisKKyAgICBk
ZWYgcGFyc2VfZG9tYWluKHNlbGYsIGpzb24sIGlzU3VwcGxlbWVudGFsKToKKyAgICAgICAgY2hl
Y2tfZm9yX3JlcXVpcmVkX3Byb3BlcnRpZXMoWydkb21haW4nXSwganNvbiwgImRvbWFpbiIpCisg
ICAgICAgIGxvZy5kZWJ1ZygicGFyc2UgZG9tYWluICIgKyBqc29uWydkb21haW4nXSkKKworICAg
ICAgICB0eXBlcyA9IFtdCisgICAgICAgIGNvbW1hbmRzID0gW10KKyAgICAgICAgZXZlbnRzID0g
W10KKworICAgICAgICBpZiAndHlwZXMnIGluIGpzb246CisgICAgICAgICAgICBpZiBub3QgaXNp
bnN0YW5jZShqc29uWyd0eXBlcyddLCBsaXN0KToKKyAgICAgICAgICAgICAgICByYWlzZSBQYXJz
ZUV4Y2VwdGlvbigiTWFsZm9ybWVkIHNwZWNpZmljYXRpb246IHR5cGVzIGlzIG5vdCBhbiBhcnJh
eSIpCisgICAgICAgICAgICB0eXBlcy5leHRlbmQoW3NlbGYucGFyc2VfdHlwZV9kZWNsYXJhdGlv
bihfZGVjbGFyYXRpb24pIGZvciBfZGVjbGFyYXRpb24gaW4ganNvblsndHlwZXMnXV0pCisKKyAg
ICAgICAgaWYgJ2NvbW1hbmRzJyBpbiBqc29uOgorICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFu
Y2UoanNvblsnY29tbWFuZHMnXSwgbGlzdCk6CisgICAgICAgICAgICAgICAgcmFpc2UgUGFyc2VF
eGNlcHRpb24oIk1hbGZvcm1lZCBzcGVjaWZpY2F0aW9uOiBjb21tYW5kcyBpcyBub3QgYW4gYXJy
YXkiKQorICAgICAgICAgICAgY29tbWFuZHMuZXh0ZW5kKFtzZWxmLnBhcnNlX2NvbW1hbmQoX2Nv
bW1hbmQpIGZvciBfY29tbWFuZCBpbiBqc29uWydjb21tYW5kcyddXSkKKworICAgICAgICBpZiAn
ZXZlbnRzJyBpbiBqc29uOgorICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoanNvblsnZXZl
bnRzJ10sIGxpc3QpOgorICAgICAgICAgICAgICAgIHJhaXNlIFBhcnNlRXhjZXB0aW9uKCJNYWxm
b3JtZWQgc3BlY2lmaWNhdGlvbjogZXZlbnRzIGlzIG5vdCBhbiBhcnJheSIpCisgICAgICAgICAg
ICBldmVudHMuZXh0ZW5kKFtzZWxmLnBhcnNlX2V2ZW50KF9ldmVudCkgZm9yIF9ldmVudCBpbiBq
c29uWydldmVudHMnXV0pCisKKyAgICAgICAgc2VsZi5kb21haW5zLmFwcGVuZChEb21haW4oanNv
blsnZG9tYWluJ10sIGpzb24uZ2V0KCdkZXNjcmlwdGlvbicsICIiKSwgaXNTdXBwbGVtZW50YWws
IHR5cGVzLCBjb21tYW5kcywgZXZlbnRzKSkKKworICAgIGRlZiBwYXJzZV90eXBlX2RlY2xhcmF0
aW9uKHNlbGYsIGpzb24pOgorICAgICAgICBjaGVja19mb3JfcmVxdWlyZWRfcHJvcGVydGllcyhb
J2lkJywgJ3R5cGUnXSwganNvbiwgInR5cGUiKQorICAgICAgICBsb2cuZGVidWcoInBhcnNlIHR5
cGUgJXMiICUganNvblsnaWQnXSkKKworICAgICAgICB0eXBlX21lbWJlcnMgPSBbXQorCisgICAg
ICAgIGlmICdwcm9wZXJ0aWVzJyBpbiBqc29uOgorICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFu
Y2UoanNvblsncHJvcGVydGllcyddLCBsaXN0KToKKyAgICAgICAgICAgICAgICByYWlzZSBQYXJz
ZUV4Y2VwdGlvbigiTWFsZm9ybWVkIHNwZWNpZmljYXRpb246IHByb3BlcnRpZXMgaXMgbm90IGFu
IGFycmF5IikKKyAgICAgICAgICAgIHR5cGVfbWVtYmVycy5leHRlbmQoW3NlbGYucGFyc2VfdHlw
ZV9tZW1iZXIoX21lbWJlcikgZm9yIF9tZW1iZXIgaW4ganNvblsncHJvcGVydGllcyddXSkKKwor
ICAgICAgICB0eXBlX3JlZiA9IFR5cGVSZWZlcmVuY2UoanNvblsndHlwZSddLCBOb25lLCBqc29u
LmdldCgnZW51bScsIFtdKSwganNvbi5nZXQoJ2l0ZW1zJykpCisgICAgICAgIHJldHVybiBUeXBl
RGVjbGFyYXRpb24oanNvblsnaWQnXSwgdHlwZV9yZWYsIGpzb24uZ2V0KCJkZXNjcmlwdGlvbiIs
ICIiKSwgdHlwZV9tZW1iZXJzKQorCisgICAgZGVmIHBhcnNlX3R5cGVfbWVtYmVyKHNlbGYsIGpz
b24pOgorICAgICAgICBjaGVja19mb3JfcmVxdWlyZWRfcHJvcGVydGllcyhbJ25hbWUnXSwganNv
biwgInR5cGUgbWVtYmVyIikKKyAgICAgICAgbG9nLmRlYnVnKCJwYXJzZSB0eXBlIG1lbWJlciAl
cyIgJSBqc29uWyduYW1lJ10pCisKKyAgICAgICAgdHlwZV9yZWYgPSBUeXBlUmVmZXJlbmNlKGpz
b24uZ2V0KCd0eXBlJyksIGpzb24uZ2V0KCckcmVmJyksIGpzb24uZ2V0KCdlbnVtJywgW10pLCBq
c29uLmdldCgnaXRlbXMnKSkKKyAgICAgICAgcmV0dXJuIFR5cGVNZW1iZXIoanNvblsnbmFtZSdd
LCB0eXBlX3JlZiwganNvbi5nZXQoJ29wdGlvbmFsJywgRmFsc2UpLCBqc29uLmdldCgnZGVzY3Jp
cHRpb24nLCAiIikpCisKKyAgICBkZWYgcGFyc2VfY29tbWFuZChzZWxmLCBqc29uKToKKyAgICAg
ICAgY2hlY2tfZm9yX3JlcXVpcmVkX3Byb3BlcnRpZXMoWyduYW1lJ10sIGpzb24sICJjb21tYW5k
IikKKyAgICAgICAgbG9nLmRlYnVnKCJwYXJzZSBjb21tYW5kICVzIiAlIGpzb25bJ25hbWUnXSkK
KworICAgICAgICBjYWxsX3BhcmFtZXRlcnMgPSBbXQorICAgICAgICByZXR1cm5fcGFyYW1ldGVy
cyA9IFtdCisKKyAgICAgICAgaWYgJ3BhcmFtZXRlcnMnIGluIGpzb246CisgICAgICAgICAgICBp
ZiBub3QgaXNpbnN0YW5jZShqc29uWydwYXJhbWV0ZXJzJ10sIGxpc3QpOgorICAgICAgICAgICAg
ICAgIHJhaXNlIFBhcnNlRXhjZXB0aW9uKCJNYWxmb3JtZWQgc3BlY2lmaWNhdGlvbjogcGFyYW1l
dGVycyBpcyBub3QgYW4gYXJyYXkiKQorICAgICAgICAgICAgY2FsbF9wYXJhbWV0ZXJzLmV4dGVu
ZChbc2VsZi5wYXJzZV9wYXJhbWV0ZXIoX3BhcmFtZXRlcikgZm9yIF9wYXJhbWV0ZXIgaW4ganNv
blsncGFyYW1ldGVycyddXSkKKworICAgICAgICBpZiAncmV0dXJucycgaW4ganNvbjoKKyAgICAg
ICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGpzb25bJ3JldHVybnMnXSwgbGlzdCk6CisgICAgICAg
ICAgICAgICAgcmFpc2UgUGFyc2VFeGNlcHRpb24oIk1hbGZvcm1lZCBzcGVjaWZpY2F0aW9uOiBy
ZXR1cm5zIGlzIG5vdCBhbiBhcnJheSIpCisgICAgICAgICAgICByZXR1cm5fcGFyYW1ldGVycy5l
eHRlbmQoW3NlbGYucGFyc2VfcGFyYW1ldGVyKF9wYXJhbWV0ZXIpIGZvciBfcGFyYW1ldGVyIGlu
IGpzb25bJ3JldHVybnMnXV0pCisKKyAgICAgICAgcmV0dXJuIENvbW1hbmQoanNvblsnbmFtZSdd
LCBjYWxsX3BhcmFtZXRlcnMsIHJldHVybl9wYXJhbWV0ZXJzLCBqc29uLmdldCgnZGVzY3JpcHRp
b24nLCAiIiksIGpzb24uZ2V0KCdhc3luYycsIEZhbHNlKSkKKworICAgIGRlZiBwYXJzZV9ldmVu
dChzZWxmLCBqc29uKToKKyAgICAgICAgY2hlY2tfZm9yX3JlcXVpcmVkX3Byb3BlcnRpZXMoWydu
YW1lJ10sIGpzb24sICJldmVudCIpCisgICAgICAgIGxvZy5kZWJ1ZygicGFyc2UgZXZlbnQgJXMi
ICUganNvblsnbmFtZSddKQorCisgICAgICAgIGV2ZW50X3BhcmFtZXRlcnMgPSBbXQorCisgICAg
ICAgIGlmICdwYXJhbWV0ZXJzJyBpbiBqc29uOgorICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFu
Y2UoanNvblsncGFyYW1ldGVycyddLCBsaXN0KToKKyAgICAgICAgICAgICAgICByYWlzZSBQYXJz
ZUV4Y2VwdGlvbigiTWFsZm9ybWVkIHNwZWNpZmljYXRpb246IHBhcmFtZXRlcnMgaXMgbm90IGFu
IGFycmF5IikKKyAgICAgICAgICAgIGV2ZW50X3BhcmFtZXRlcnMuZXh0ZW5kKFtzZWxmLnBhcnNl
X3BhcmFtZXRlcihfcGFyYW1ldGVyKSBmb3IgX3BhcmFtZXRlciBpbiBqc29uWydwYXJhbWV0ZXJz
J11dKQorCisgICAgICAgIHJldHVybiBFdmVudChqc29uWyduYW1lJ10sIGV2ZW50X3BhcmFtZXRl
cnMsIGpzb24uZ2V0KCdkZXNjcmlwdGlvbicsICIiKSkKKworICAgIGRlZiBwYXJzZV9wYXJhbWV0
ZXIoc2VsZiwganNvbik6CisgICAgICAgIGNoZWNrX2Zvcl9yZXF1aXJlZF9wcm9wZXJ0aWVzKFsn
bmFtZSddLCBqc29uLCAicGFyYW1ldGVyIikKKyAgICAgICAgbG9nLmRlYnVnKCJwYXJzZSBwYXJh
bWV0ZXIgJXMiICUganNvblsnbmFtZSddKQorCisgICAgICAgIHR5cGVfcmVmID0gVHlwZVJlZmVy
ZW5jZShqc29uLmdldCgndHlwZScpLCBqc29uLmdldCgnJHJlZicpLCBqc29uLmdldCgnZW51bScs
IFtdKSwganNvbi5nZXQoJ2l0ZW1zJykpCisgICAgICAgIHJldHVybiBQYXJhbWV0ZXIoanNvblsn
bmFtZSddLCB0eXBlX3JlZiwganNvbi5nZXQoJ29wdGlvbmFsJywgRmFsc2UpLCBqc29uLmdldCgn
ZGVzY3JpcHRpb24nLCAiIikpCisKKyAgICBkZWYgcmVzb2x2ZV90eXBlcyhzZWxmKToKKyAgICAg
ICAgcXVhbGlmaWVkX2RlY2xhcmVkX3R5cGVfbmFtZXMgPSBzZXQoWydib29sZWFuJywgJ3N0cmlu
ZycsICdpbnRlZ2VyJywgJ251bWJlcicsICdlbnVtJywgJ2FycmF5JywgJ29iamVjdCcsICdhbnkn
XSkKKworICAgICAgICBzZWxmLnR5cGVzX2J5X25hbWVbJ3N0cmluZyddID0gUHJpbWl0aXZlVHlw
ZSgnc3RyaW5nJykKKyAgICAgICAgZm9yIF9wcmltaXRpdmVfdHlwZSBpbiBbJ2Jvb2xlYW4nLCAn
aW50ZWdlcicsICdudW1iZXInXToKKyAgICAgICAgICAgIHNlbGYudHlwZXNfYnlfbmFtZVtfcHJp
bWl0aXZlX3R5cGVdID0gUHJpbWl0aXZlVHlwZShfcHJpbWl0aXZlX3R5cGUpCisgICAgICAgIGZv
ciBfb2JqZWN0X3R5cGUgaW4gWydhbnknLCAnb2JqZWN0J106CisgICAgICAgICAgICBzZWxmLnR5
cGVzX2J5X25hbWVbX29iamVjdF90eXBlXSA9IFByaW1pdGl2ZVR5cGUoX29iamVjdF90eXBlKQor
CisgICAgICAgICMgR2F0aGVyIHF1YWxpZmllZCB0eXBlIG5hbWVzIGZyb20gdHlwZSBkZWNsYXJh
dGlvbnMgaW4gZWFjaCBkb21haW4uCisgICAgICAgIGZvciBfZG9tYWluIGluIHNlbGYuZG9tYWlu
czoKKyAgICAgICAgICAgIGZvciBfZGVjbGFyYXRpb24gaW4gX2RvbWFpbi50eXBlX2RlY2xhcmF0
aW9uczoKKyAgICAgICAgICAgICAgICAjIEJhc2ljIHNhbml0eSBjaGVja2luZy4KKyAgICAgICAg
ICAgICAgICBpZiBfZGVjbGFyYXRpb24udHlwZV9yZWYucmVmZXJlbmNlZF90eXBlX25hbWUgaXMg
bm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVjaGVja0V4Y2VwdGlvbigi
VHlwZSBkZWNsYXJhdGlvbnMgbXVzdCBuYW1lIGEgYmFzZSB0eXBlLCBub3QgYSB0eXBlIHJlZmVy
ZW5jZS4iKQorCisgICAgICAgICAgICAgICAgIyBGaW5kIGR1cGxpY2F0ZSBxdWFsaWZpZWQgdHlw
ZSBuYW1lcy4KKyAgICAgICAgICAgICAgICBxdWFsaWZpZWRfdHlwZV9uYW1lID0gIi4iLmpvaW4o
W19kb21haW4uZG9tYWluX25hbWUsIF9kZWNsYXJhdGlvbi50eXBlX25hbWVdKQorICAgICAgICAg
ICAgICAgIGlmIHF1YWxpZmllZF90eXBlX25hbWUgaW4gcXVhbGlmaWVkX2RlY2xhcmVkX3R5cGVf
bmFtZXM6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVjaGVja0V4Y2VwdGlvbigiRHVw
bGljYXRlIHR5cGUgZGVjbGFyYXRpb246ICVzIiAlIHF1YWxpZmllZF90eXBlX25hbWUpCisKKyAg
ICAgICAgICAgICAgICBxdWFsaWZpZWRfZGVjbGFyZWRfdHlwZV9uYW1lcy5hZGQocXVhbGlmaWVk
X3R5cGVfbmFtZSkKKworICAgICAgICAgICAgICAgIHR5cGVfaW5zdGFuY2UgPSBOb25lCisKKyAg
ICAgICAgICAgICAgICBraW5kID0gX2RlY2xhcmF0aW9uLnR5cGVfcmVmLnR5cGVfa2luZAorICAg
ICAgICAgICAgICAgIGlmIGxlbihfZGVjbGFyYXRpb24udHlwZV9yZWYuZW51bV92YWx1ZXMpID4g
MDoKKyAgICAgICAgICAgICAgICAgICAgcHJpbWl0aXZlX3R5cGVfcmVmID0gVHlwZVJlZmVyZW5j
ZShfZGVjbGFyYXRpb24udHlwZV9yZWYudHlwZV9raW5kLCBOb25lLCBbXSwgTm9uZSkKKyAgICAg
ICAgICAgICAgICAgICAgdHlwZV9pbnN0YW5jZSA9IEVudW1UeXBlKF9kZWNsYXJhdGlvbi50eXBl
X25hbWUsIF9kb21haW4sIF9kZWNsYXJhdGlvbi50eXBlX3JlZi5lbnVtX3ZhbHVlcywgcHJpbWl0
aXZlX3R5cGVfcmVmKQorICAgICAgICAgICAgICAgIGVsaWYga2luZCA9PSAiYXJyYXkiOgorICAg
ICAgICAgICAgICAgICAgICB0eXBlX2luc3RhbmNlID0gQXJyYXlUeXBlKF9kZWNsYXJhdGlvbi50
eXBlX3JlZi5hcnJheV90eXBlX3JlZiwgX2RvbWFpbikKKyAgICAgICAgICAgICAgICBlbGlmIGtp
bmQgPT0gIm9iamVjdCI6CisgICAgICAgICAgICAgICAgICAgIHR5cGVfaW5zdGFuY2UgPSBPYmpl
Y3RUeXBlKF9kZWNsYXJhdGlvbi50eXBlX25hbWUsIF9kb21haW4sIF9kZWNsYXJhdGlvbi50eXBl
X21lbWJlcnMpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgdHlw
ZV9pbnN0YW5jZSA9IEFsaWFzZWRUeXBlKF9kZWNsYXJhdGlvbi50eXBlX25hbWUsIF9kb21haW4s
IF9kZWNsYXJhdGlvbi50eXBlX3JlZikKKworICAgICAgICAgICAgICAgIHNlbGYudHlwZXNfYnlf
bmFtZVtxdWFsaWZpZWRfdHlwZV9uYW1lXSA9IHR5cGVfaW5zdGFuY2UKKworICAgICAgICAjIFJl
c29sdmUgYWxsIHR5cGUgcmVmZXJlbmNlcyByZWN1cnNpdmVseS4KKyAgICAgICAgZm9yIF9kb21h
aW4gaW4gc2VsZi5kb21haW5zOgorICAgICAgICAgICAgX2RvbWFpbi5yZXNvbHZlX3R5cGVfcmVm
ZXJlbmNlcyhzZWxmKQorCisgICAgZGVmIGxvb2t1cF90eXBlX2Zvcl9kZWNsYXJhdGlvbihzZWxm
LCBkZWNsYXJhdGlvbiwgZG9tYWluKToKKyAgICAgICAgIyBUaGlzIHdpbGwgb25seSBtYXRjaCBh
IHR5cGUgZGVmaW5lZCBpbiB0aGUgc2FtZSBkb21haW4sIHdoZXJlIHByZWZpeGVzIGFyZW4ndCBy
ZXF1aXJlZC4KKyAgICAgICAgcXVhbGlmaWVkX25hbWUgPSAiLiIuam9pbihbZG9tYWluLmRvbWFp
bl9uYW1lLCBkZWNsYXJhdGlvbi50eXBlX25hbWVdKQorICAgICAgICBpZiBxdWFsaWZpZWRfbmFt
ZSBpbiBzZWxmLnR5cGVzX2J5X25hbWU6CisgICAgICAgICAgICBmb3VuZF90eXBlID0gc2VsZi50
eXBlc19ieV9uYW1lW3F1YWxpZmllZF9uYW1lXQorICAgICAgICAgICAgZm91bmRfdHlwZS5yZXNv
bHZlX3R5cGVfcmVmZXJlbmNlcyhzZWxmKQorICAgICAgICAgICAgcmV0dXJuIGZvdW5kX3R5cGUK
KworICAgICAgICByYWlzZSBUeXBlY2hlY2tFeGNlcHRpb24oIkxvb2t1cCBmYWlsZWQgZm9yIHR5
cGUgZGVjbGFyYXRpb246ICVzIChyZWZlcmVuY2VkIGZyb20gZG9tYWluOiAlcykiICUgKGRlY2xh
cmF0aW9uLnR5cGVfbmFtZSwgZG9tYWluLmRvbWFpbl9uYW1lKSkKKworICAgIGRlZiBsb29rdXBf
dHlwZV9yZWZlcmVuY2Uoc2VsZiwgdHlwZV9yZWYsIGRvbWFpbik6CisgICAgICAgICMgSWYgcmVm
ZXJlbmNlIGlzIHRvIGFuIGFub255bW91cyBhcnJheSB0eXBlLCBjcmVhdGUgYSBmcmVzaCBpbnN0
YW5jZS4KKyAgICAgICAgaWYgdHlwZV9yZWYudHlwZV9raW5kID09ICJhcnJheSI6CisgICAgICAg
ICAgICB0eXBlX2luc3RhbmNlID0gQXJyYXlUeXBlKHR5cGVfcmVmLmFycmF5X3R5cGVfcmVmLCBk
b21haW4pCisgICAgICAgICAgICB0eXBlX2luc3RhbmNlLnJlc29sdmVfdHlwZV9yZWZlcmVuY2Vz
KHNlbGYpCisgICAgICAgICAgICBsb2cuZGVidWcoIjwgQ3JlYXRlZCBmcmVzaCB0eXBlIGluc3Rh
bmNlIGZvciBhbm9ueW1vdXMgYXJyYXkgdHlwZTogJXMiICUgdHlwZV9pbnN0YW5jZS5xdWFsaWZp
ZWRfbmFtZSgpKQorICAgICAgICAgICAgcmV0dXJuIHR5cGVfaW5zdGFuY2UKKworICAgICAgICAj
IElmIHJlZmVyZW5jZSBpcyB0byBhbiBhbm9ueW1vdXMgZW51bSB0eXBlLCBjcmVhdGUgYSBmcmVz
aCBpbnN0YW5jZS4KKyAgICAgICAgaWYgbGVuKHR5cGVfcmVmLmVudW1fdmFsdWVzKSA+IDA6Cisg
ICAgICAgICAgICAjIFdlIG5lZWQgdG8gY3JlYXRlIGEgdHlwZSByZWZlcmVuY2Ugd2l0aG91dCBl
bnVtIHZhbHVlcyBhcyB0aGUgZW51bSdzIG5lc3RlZCB0eXBlLgorICAgICAgICAgICAgcHJpbWl0
aXZlX3R5cGVfcmVmID0gVHlwZVJlZmVyZW5jZSh0eXBlX3JlZi50eXBlX2tpbmQsIE5vbmUsIFtd
LCBOb25lKQorICAgICAgICAgICAgdHlwZV9pbnN0YW5jZSA9IEVudW1UeXBlKCIoYW5vbnltb3Vz
KSIsIGRvbWFpbiwgdHlwZV9yZWYuZW51bV92YWx1ZXMsIHByaW1pdGl2ZV90eXBlX3JlZiwgVHJ1
ZSkKKyAgICAgICAgICAgIHR5cGVfaW5zdGFuY2UucmVzb2x2ZV90eXBlX3JlZmVyZW5jZXMoc2Vs
ZikKKyAgICAgICAgICAgIGxvZy5kZWJ1ZygiPCBDcmVhdGVkIGZyZXNoIHR5cGUgaW5zdGFuY2Ug
Zm9yIGFub255bW91cyBlbnVtIHR5cGU6ICVzIiAlIHR5cGVfaW5zdGFuY2UucXVhbGlmaWVkX25h
bWUoKSkKKyAgICAgICAgICAgIHJldHVybiB0eXBlX2luc3RhbmNlCisKKyAgICAgICAgIyBUaGlz
IHdpbGwgbWF0Y2ggd2hlbiByZWZlcmVuY2luZyBhIHR5cGUgZGVmaW5lZCBpbiB0aGUgc2FtZSBk
b21haW4sIHdoZXJlIHByZWZpeGVzIGFyZW4ndCByZXF1aXJlZC4KKyAgICAgICAgcXVhbGlmaWVk
X25hbWUgPSAiLiIuam9pbihbZG9tYWluLmRvbWFpbl9uYW1lLCB0eXBlX3JlZi5yZWZlcmVuY2Vk
X25hbWUoKV0pCisgICAgICAgIGlmIHF1YWxpZmllZF9uYW1lIGluIHNlbGYudHlwZXNfYnlfbmFt
ZToKKyAgICAgICAgICAgIGZvdW5kX3R5cGUgPSBzZWxmLnR5cGVzX2J5X25hbWVbcXVhbGlmaWVk
X25hbWVdCisgICAgICAgICAgICBmb3VuZF90eXBlLnJlc29sdmVfdHlwZV9yZWZlcmVuY2VzKHNl
bGYpCisgICAgICAgICAgICBsb2cuZGVidWcoIjwgTG9va3VwIHN1Y2NlZWRlZCBmb3IgdW5xdWFs
aWZpZWQgdHlwZTogJXMiICUgZm91bmRfdHlwZS5xdWFsaWZpZWRfbmFtZSgpKQorICAgICAgICAg
ICAgcmV0dXJuIGZvdW5kX3R5cGUKKworICAgICAgICAjIFRoaXMgd2lsbCBtYXRjaCBwcmltaXRp
dmUgdHlwZXMgYW5kIGZ1bGx5LXF1YWxpZmllZCB0eXBlcyBmcm9tIGEgZGlmZmVyZW50IGRvbWFp
bi4KKyAgICAgICAgaWYgdHlwZV9yZWYucmVmZXJlbmNlZF9uYW1lKCkgaW4gc2VsZi50eXBlc19i
eV9uYW1lOgorICAgICAgICAgICAgZm91bmRfdHlwZSA9IHNlbGYudHlwZXNfYnlfbmFtZVt0eXBl
X3JlZi5yZWZlcmVuY2VkX25hbWUoKV0KKyAgICAgICAgICAgIGZvdW5kX3R5cGUucmVzb2x2ZV90
eXBlX3JlZmVyZW5jZXMoc2VsZikKKyAgICAgICAgICAgIGxvZy5kZWJ1ZygiPCBMb29rdXAgc3Vj
Y2VlZGVkIGZvciBwcmltaXRpdmUgb3IgcXVhbGlmaWVkIHR5cGU6ICVzIiAlIGZvdW5kX3R5cGUu
cXVhbGlmaWVkX25hbWUoKSkKKyAgICAgICAgICAgIHJldHVybiBmb3VuZF90eXBlCisKKyAgICAg
ICAgcmFpc2UgVHlwZWNoZWNrRXhjZXB0aW9uKCJMb29rdXAgZmFpbGVkIGZvciB0eXBlIHJlZmVy
ZW5jZTogJXMgKHJlZmVyZW5jZWQgZnJvbSBkb21haW46ICVzKSIgJSAodHlwZV9yZWYucmVmZXJl
bmNlZF9uYW1lKCksIGRvbWFpbi5kb21haW5fbmFtZSkpCisKKworY2xhc3MgRG9tYWluOgorICAg
IGRlZiBfX2luaXRfXyhzZWxmLCBkb21haW5fbmFtZSwgZGVzY3JpcHRpb24sIGlzU3VwcGxlbWVu
dGFsLCB0eXBlX2RlY2xhcmF0aW9ucywgY29tbWFuZHMsIGV2ZW50cyk6CisgICAgICAgIHNlbGYu
ZG9tYWluX25hbWUgPSBkb21haW5fbmFtZQorICAgICAgICBzZWxmLmRlc2NyaXB0aW9uID0gZGVz
Y3JpcHRpb24KKyAgICAgICAgc2VsZi5pc19zdXBwbGVtZW50YWwgPSBpc1N1cHBsZW1lbnRhbAor
ICAgICAgICBzZWxmLnR5cGVfZGVjbGFyYXRpb25zID0gdHlwZV9kZWNsYXJhdGlvbnMKKyAgICAg
ICAgc2VsZi5jb21tYW5kcyA9IGNvbW1hbmRzCisgICAgICAgIHNlbGYuZXZlbnRzID0gZXZlbnRz
CisKKyAgICBkZWYgcmVzb2x2ZV90eXBlX3JlZmVyZW5jZXMoc2VsZiwgcHJvdG9jb2wpOgorICAg
ICAgICBsb2cuZGVidWcoIj4gUmVzb2x2aW5nIHR5cGUgZGVjbGFyYXRpb25zIGZvciBkb21haW46
ICVzIiAlIHNlbGYuZG9tYWluX25hbWUpCisgICAgICAgIGZvciBfZGVjbGFyYXRpb24gaW4gc2Vs
Zi50eXBlX2RlY2xhcmF0aW9uczoKKyAgICAgICAgICAgIF9kZWNsYXJhdGlvbi5yZXNvbHZlX3R5
cGVfcmVmZXJlbmNlcyhwcm90b2NvbCwgc2VsZikKKworICAgICAgICBsb2cuZGVidWcoIj4gUmVz
b2x2aW5nIHR5cGVzIGluIGNvbW1hbmRzIGZvciBkb21haW46ICVzIiAlIHNlbGYuZG9tYWluX25h
bWUpCisgICAgICAgIGZvciBfY29tbWFuZCBpbiBzZWxmLmNvbW1hbmRzOgorICAgICAgICAgICAg
X2NvbW1hbmQucmVzb2x2ZV90eXBlX3JlZmVyZW5jZXMocHJvdG9jb2wsIHNlbGYpCisKKyAgICAg
ICAgbG9nLmRlYnVnKCI+IFJlc29sdmluZyB0eXBlcyBpbiBldmVudHMgZm9yIGRvbWFpbjogJXMi
ICUgc2VsZi5kb21haW5fbmFtZSkKKyAgICAgICAgZm9yIF9ldmVudCBpbiBzZWxmLmV2ZW50czoK
KyAgICAgICAgICAgIF9ldmVudC5yZXNvbHZlX3R5cGVfcmVmZXJlbmNlcyhwcm90b2NvbCwgc2Vs
ZikKKworCitjbGFzcyBEb21haW5zOgorICAgIEdMT0JBTCA9IERvbWFpbigiIiwgIlRoZSBnbG9i
YWwgZG9tYWluLCBpbiB3aGljaCBwcmltaXRpdmUgdHlwZXMgYXJlIGltcGxpY2l0bHkgZGVjbGFy
ZWQuIiwgVHJ1ZSwgW10sIFtdLCBbXSkKKworCitjbGFzcyBUeXBlRGVjbGFyYXRpb246CisgICAg
ZGVmIF9faW5pdF9fKHNlbGYsIHR5cGVfbmFtZSwgdHlwZV9yZWYsIGRlc2NyaXB0aW9uLCB0eXBl
X21lbWJlcnMpOgorICAgICAgICBzZWxmLnR5cGVfbmFtZSA9IHR5cGVfbmFtZQorICAgICAgICBz
ZWxmLnR5cGVfcmVmID0gdHlwZV9yZWYKKyAgICAgICAgc2VsZi5kZXNjcmlwdGlvbiA9IGRlc2Ny
aXB0aW9uCisgICAgICAgIHNlbGYudHlwZV9tZW1iZXJzID0gdHlwZV9tZW1iZXJzCisKKyAgICBk
ZWYgcmVzb2x2ZV90eXBlX3JlZmVyZW5jZXMoc2VsZiwgcHJvdG9jb2wsIGRvbWFpbik6CisgICAg
ICAgIGxvZy5kZWJ1ZygiPj4gUmVzb2x2aW5nIHR5cGUgcmVmZXJlbmNlcyBmb3IgdHlwZSBkZWNs
YXJhdGlvbjogJXMiICUgc2VsZi50eXBlX25hbWUpCisgICAgICAgIHNlbGYudHlwZSA9IHByb3Rv
Y29sLmxvb2t1cF90eXBlX2Zvcl9kZWNsYXJhdGlvbihzZWxmLCBkb21haW4pCisgICAgICAgIGZv
ciBfbWVtYmVyIGluIHNlbGYudHlwZV9tZW1iZXJzOgorICAgICAgICAgICAgX21lbWJlci5yZXNv
bHZlX3R5cGVfcmVmZXJlbmNlcyhwcm90b2NvbCwgZG9tYWluKQorCisKK2NsYXNzIFR5cGVNZW1i
ZXI6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1lbWJlcl9uYW1lLCB0eXBlX3JlZiwgaXNfb3B0
aW9uYWwsIGRlc2NyaXB0aW9uKToKKyAgICAgICAgc2VsZi5tZW1iZXJfbmFtZSA9IG1lbWJlcl9u
YW1lCisgICAgICAgIHNlbGYudHlwZV9yZWYgPSB0eXBlX3JlZgorICAgICAgICBzZWxmLmlzX29w
dGlvbmFsID0gaXNfb3B0aW9uYWwKKyAgICAgICAgc2VsZi5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0
aW9uCisKKyAgICBkZWYgcmVzb2x2ZV90eXBlX3JlZmVyZW5jZXMoc2VsZiwgcHJvdG9jb2wsIGRv
bWFpbik6CisgICAgICAgIGxvZy5kZWJ1ZygiPj4+IFJlc29sdmluZyB0eXBlIHJlZmVyZW5jZXMg
Zm9yIHR5cGUgbWVtYmVyOiAlcyIgJSBzZWxmLm1lbWJlcl9uYW1lKQorICAgICAgICBzZWxmLnR5
cGUgPSBwcm90b2NvbC5sb29rdXBfdHlwZV9yZWZlcmVuY2Uoc2VsZi50eXBlX3JlZiwgZG9tYWlu
KQorCisKK2NsYXNzIFBhcmFtZXRlcjoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcGFyYW1ldGVy
X25hbWUsIHR5cGVfcmVmLCBpc19vcHRpb25hbCwgZGVzY3JpcHRpb24pOgorICAgICAgICBzZWxm
LnBhcmFtZXRlcl9uYW1lID0gcGFyYW1ldGVyX25hbWUKKyAgICAgICAgc2VsZi50eXBlX3JlZiA9
IHR5cGVfcmVmCisgICAgICAgIHNlbGYuaXNfb3B0aW9uYWwgPSBpc19vcHRpb25hbAorICAgICAg
ICBzZWxmLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb24KKworICAgIGRlZiByZXNvbHZlX3R5cGVf
cmVmZXJlbmNlcyhzZWxmLCBwcm90b2NvbCwgZG9tYWluKToKKyAgICAgICAgbG9nLmRlYnVnKCI+
Pj4gUmVzb2x2aW5nIHR5cGUgcmVmZXJlbmNlcyBmb3IgcGFyYW1ldGVyOiAlcyIgJSBzZWxmLnBh
cmFtZXRlcl9uYW1lKQorICAgICAgICBzZWxmLnR5cGUgPSBwcm90b2NvbC5sb29rdXBfdHlwZV9y
ZWZlcmVuY2Uoc2VsZi50eXBlX3JlZiwgZG9tYWluKQorCisKK2NsYXNzIENvbW1hbmQ6CisgICAg
ZGVmIF9faW5pdF9fKHNlbGYsIGNvbW1hbmRfbmFtZSwgY2FsbF9wYXJhbWV0ZXJzLCByZXR1cm5f
cGFyYW1ldGVycywgZGVzY3JpcHRpb24sIGlzX2FzeW5jKToKKyAgICAgICAgc2VsZi5jb21tYW5k
X25hbWUgPSBjb21tYW5kX25hbWUKKyAgICAgICAgc2VsZi5jYWxsX3BhcmFtZXRlcnMgPSBjYWxs
X3BhcmFtZXRlcnMKKyAgICAgICAgc2VsZi5yZXR1cm5fcGFyYW1ldGVycyA9IHJldHVybl9wYXJh
bWV0ZXJzCisgICAgICAgIHNlbGYuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbgorICAgICAgICBz
ZWxmLmlzX2FzeW5jID0gaXNfYXN5bmMKKworICAgIGRlZiByZXNvbHZlX3R5cGVfcmVmZXJlbmNl
cyhzZWxmLCBwcm90b2NvbCwgZG9tYWluKToKKyAgICAgICAgbG9nLmRlYnVnKCI+PiBSZXNvbHZp
bmcgdHlwZSByZWZlcmVuY2VzIGZvciBjYWxsIHBhcmFtZXRlcnMgaW4gY29tbWFuZDogJXMiICUg
c2VsZi5jb21tYW5kX25hbWUpCisgICAgICAgIGZvciBfcGFyYW1ldGVyIGluIHNlbGYuY2FsbF9w
YXJhbWV0ZXJzOgorICAgICAgICAgICAgX3BhcmFtZXRlci5yZXNvbHZlX3R5cGVfcmVmZXJlbmNl
cyhwcm90b2NvbCwgZG9tYWluKQorCisgICAgICAgIGxvZy5kZWJ1ZygiPj4gUmVzb2x2aW5nIHR5
cGUgcmVmZXJlbmNlcyBmb3IgcmV0dXJuIHBhcmFtZXRlcnMgaW4gY29tbWFuZDogJXMiICUgc2Vs
Zi5jb21tYW5kX25hbWUpCisgICAgICAgIGZvciBfcGFyYW1ldGVyIGluIHNlbGYucmV0dXJuX3Bh
cmFtZXRlcnM6CisgICAgICAgICAgICBfcGFyYW1ldGVyLnJlc29sdmVfdHlwZV9yZWZlcmVuY2Vz
KHByb3RvY29sLCBkb21haW4pCisKKworY2xhc3MgRXZlbnQ6CisgICAgZGVmIF9faW5pdF9fKHNl
bGYsIGV2ZW50X25hbWUsIGV2ZW50X3BhcmFtZXRlcnMsIGRlc2NyaXB0aW9uKToKKyAgICAgICAg
c2VsZi5ldmVudF9uYW1lID0gZXZlbnRfbmFtZQorICAgICAgICBzZWxmLmV2ZW50X3BhcmFtZXRl
cnMgPSBldmVudF9wYXJhbWV0ZXJzCisgICAgICAgIHNlbGYuZGVzY3JpcHRpb24gPSBkZXNjcmlw
dGlvbgorCisgICAgZGVmIHJlc29sdmVfdHlwZV9yZWZlcmVuY2VzKHNlbGYsIHByb3RvY29sLCBk
b21haW4pOgorICAgICAgICBsb2cuZGVidWcoIj4+IFJlc29sdmluZyB0eXBlIHJlZmVyZW5jZXMg
Zm9yIHBhcmFtZXRlcnMgaW4gZXZlbnQ6ICVzIiAlIHNlbGYuZXZlbnRfbmFtZSkKKyAgICAgICAg
Zm9yIF9wYXJhbWV0ZXIgaW4gc2VsZi5ldmVudF9wYXJhbWV0ZXJzOgorICAgICAgICAgICAgX3Bh
cmFtZXRlci5yZXNvbHZlX3R5cGVfcmVmZXJlbmNlcyhwcm90b2NvbCwgZG9tYWluKQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2NvbW1h
bmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4xMWIyZGQ1OGQ3MDk5M2ZlMmIyMTQ2Y2FmNTc1MzE0YmVlNzg4Y2U0Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2NvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24KQEAgLTAsMCArMSw4MyBAQAor
eworICAgICJkb21haW4iOiAiRGF0YWJhc2UiLAorICAgICJ0eXBlcyI6IFsKKyAgICAgICAgewor
ICAgICAgICAgICAgImlkIjogIkRhdGFiYXNlSWQiLAorICAgICAgICAgICAgInR5cGUiOiAic3Ry
aW5nIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUgaWRlbnRpZmllciBvZiBE
YXRhYmFzZSBvYmplY3QuIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQi
OiAiRXJyb3IiLAorICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKKyAgICAgICAgICAgICJk
ZXNjcmlwdGlvbiI6ICJEYXRhYmFzZSBlcnJvci4iLAorICAgICAgICAgICAgInByb3BlcnRpZXMi
OiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJtZXNzYWdlIiwgInR5cGUiOiAic3RyaW5n
IiwgImRlc2NyaXB0aW9uIjogIkVycm9yIG1lc3NhZ2UuIiB9LAorICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAiY29kZSIsICJ0eXBlIjogImludGVnZXIiLCAiZGVzY3JpcHRpb24iOiAiRXJyb3Ig
Y29kZS4iIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0sCisgICAgImNvbW1hbmRz
IjogWworICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJleGVjdXRlU1FMU3luY09wdGlv
bmFsUmV0dXJuVmFsdWVzIiwKKyAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWworICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAiZGF0YWJhc2VJZCIsICIkcmVmIjogIkRhdGFiYXNlSWQiIH0sCisg
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJxdWVyeSIsICJ0eXBlIjogInN0cmluZyIgfQorICAg
ICAgICAgICAgXSwKKyAgICAgICAgICAgICJyZXR1cm5zIjogWworICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJhcnJheSIsICJvcHRpb25hbCI6IHRydWUs
ICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9IH0sCisgICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciIsICJvcHRp
b25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInZhbHVlcyIsICJ0eXBl
IjogIm9iamVjdCIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1l
IjogInBheWxvYWQiLCAidHlwZSI6ICJhbnkiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJzcWxFcnJvciIsICIkcmVmIjogIkVycm9yIiwgIm9wdGlvbmFs
IjogdHJ1ZSB9CisgICAgICAgICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAg
ICAgICJuYW1lIjogImV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzIiwKKyAgICAg
ICAgICAgICJhc3luYyI6IHRydWUsCisgICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKKyAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogImRhdGFiYXNlSWQiLCAiJHJlZiI6ICJEYXRhYmFzZUlkIiB9
LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicXVlcnkiLCAidHlwZSI6ICJzdHJpbmciIH0K
KyAgICAgICAgICAgIF0sCisgICAgICAgICAgICAicmV0dXJucyI6IFsKKyAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAiYXJyYXkiLCAib3B0aW9uYWwiOiB0
cnVlLCAiaXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSB9LAorICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAibm90ZXMiLCAidHlwZSI6ICJzdHJpbmciLCAib3B0aW9uYWwiOiB0cnVlIH0sCisg
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0aW1lc3RhbXAiLCAidHlwZSI6ICJudW1iZXIiLCAi
b3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ2YWx1ZXMiLCAi
dHlwZSI6ICJvYmplY3QiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJwYXlsb2FkIiwgInR5cGUiOiAiYW55IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAic3FsRXJyb3IiLCAiJHJlZiI6ICJFcnJvciIsICJvcHRp
b25hbCI6IHRydWUgfQorICAgICAgICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7CisgICAg
ICAgICAgICAibmFtZSI6ICJleGVjdXRlU1FMU3luYyIsCisgICAgICAgICAgICAicGFyYW1ldGVy
cyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImRhdGFiYXNlSWQiLCAiJHJlZiI6ICJE
YXRhYmFzZUlkIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicXVlcnkiLCAidHlwZSI6
ICJzdHJpbmciIH0KKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICAicmV0dXJucyI6IFsKKyAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAiYXJyYXkiLCAi
aXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAibm90ZXMiLCAidHlwZSI6ICJzdHJpbmciIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJ0aW1lc3RhbXAiLCAidHlwZSI6ICJudW1iZXIiIH0sCisgICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJ2YWx1ZXMiLCAidHlwZSI6ICJvYmplY3QiIH0sCisgICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJwYXlsb2FkIiwgInR5cGUiOiAiYW55IiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAic3FsRXJyb3IiLCAiJHJlZiI6ICJFcnJvciIgfQorICAgICAgICAgICAgXQorICAgICAgICB9
LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJleGVjdXRlU1FMQXN5bmMiLAorICAg
ICAgICAgICAgImFzeW5jIjogdHJ1ZSwKKyAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWworICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAiZGF0YWJhc2VJZCIsICIkcmVmIjogIkRhdGFiYXNlSWQi
IH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJxdWVyeSIsICJ0eXBlIjogInN0cmluZyIg
fQorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICJyZXR1cm5zIjogWworICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJhcnJheSIsICJpdGVtcyI6IHsg
InR5cGUiOiAic3RyaW5nIiB9IH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJub3RlcyIs
ICJ0eXBlIjogInN0cmluZyIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRpbWVzdGFt
cCIsICJ0eXBlIjogIm51bWJlciIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInZhbHVl
cyIsICJ0eXBlIjogIm9iamVjdCIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBheWxv
YWQiLCAidHlwZSI6ICJhbnkiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzcWxFcnJv
ciIsICIkcmVmIjogIkVycm9yIiB9CisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdCit9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24gYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvY29tbWFuZHMtd2l0
aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzNiZDdl
Njk5YTNmNmY1NWEwZjU1ZGY2Nzk3NWJmYWI2NDY2MWEwMQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9jb21tYW5kcy13aXRo
LW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgpAQCAtMCwwICsxLDU5IEBACit7
CisgICAgImRvbWFpbiI6ICJEYXRhYmFzZSIsCisgICAgInR5cGVzIjogWworICAgICAgICB7Cisg
ICAgICAgICAgICAiaWQiOiAiRGF0YWJhc2VJZCIsCisgICAgICAgICAgICAidHlwZSI6ICJzdHJp
bmciLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBpZGVudGlmaWVyIG9mIERh
dGFiYXNlIG9iamVjdC4iCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6
ICJFcnJvciIsCisgICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAorICAgICAgICAgICAgImRl
c2NyaXB0aW9uIjogIkRhdGFiYXNlIGVycm9yLiIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6
IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm1lc3NhZ2UiLCAidHlwZSI6ICJzdHJpbmci
LCAiZGVzY3JpcHRpb24iOiAiRXJyb3IgbWVzc2FnZS4iIH0sCisgICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJjb2RlIiwgInR5cGUiOiAiaW50ZWdlciIsICJkZXNjcmlwdGlvbiI6ICJFcnJvciBj
b2RlLiIgfQorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXSwKKyAgICAiY29tbWFuZHMi
OiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImV4ZWN1dGVBbGxPcHRpb25hbFBh
cmFtZXRlcnMiLAorICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCisgICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogImFycmF5IiwgIm9wdGlvbmFsIjogdHJ1
ZSwgIml0ZW1zIjogeyAidHlwZSI6ICJzdHJpbmciIH0gfSwKKyAgICAgICAgICAgICAgICB7ICJu
YW1lIjogIm5vdGVzIiwgInR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAidGltZXN0YW1wIiwgInR5cGUiOiAibnVtYmVyIiwgIm9w
dGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidmFsdWVzIiwgInR5
cGUiOiAib2JqZWN0IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAicGF5bG9hZCIsICJ0eXBlIjogImFueSIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogInNxbEVycm9yIiwgIiRyZWYiOiAiRXJyb3IiLCAib3B0aW9u
YWwiOiB0cnVlIH0KKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICAicmV0dXJucyI6IFsKKyAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAiYXJyYXkiLCAi
b3B0aW9uYWwiOiB0cnVlLCAiaXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSB9LAorICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAibm90ZXMiLCAidHlwZSI6ICJzdHJpbmciLCAib3B0aW9uYWwi
OiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0aW1lc3RhbXAiLCAidHlwZSI6
ICJudW1iZXIiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJ2YWx1ZXMiLCAidHlwZSI6ICJvYmplY3QiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJwYXlsb2FkIiwgInR5cGUiOiAiYW55IiwgIm9wdGlvbmFsIjog
dHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic3FsRXJyb3IiLCAiJHJlZiI6ICJF
cnJvciIsICJvcHRpb25hbCI6IHRydWUgfQorICAgICAgICAgICAgXQorICAgICAgICB9LAorICAg
ICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMi
LAorICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogImFycmF5IiwgIml0ZW1zIjogeyAidHlwZSI6ICJzdHJp
bmciIH0gfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm5vdGVzIiwgInR5cGUiOiAic3Ry
aW5nIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidGltZXN0YW1wIiwgInR5cGUiOiAi
bnVtYmVyIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidmFsdWVzIiwgInR5cGUiOiAi
b2JqZWN0IiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicGF5bG9hZCIsICJ0eXBlIjog
ImFueSIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNxbEVycm9yIiwgIiRyZWYiOiAi
RXJyb3IiIH0KKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICAicmV0dXJucyI6IFsKKyAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAiYXJyYXkiLCAiaXRl
bXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
bm90ZXMiLCAidHlwZSI6ICJzdHJpbmciIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0
aW1lc3RhbXAiLCAidHlwZSI6ICJudW1iZXIiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJ2YWx1ZXMiLCAidHlwZSI6ICJvYmplY3QiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJwYXlsb2FkIiwgInR5cGUiOiAiYW55IiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
c3FsRXJyb3IiLCAiJHJlZiI6ICJFcnJvciIgfQorICAgICAgICAgICAgXQorICAgICAgICB9Cisg
ICAgXQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2RvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbiBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9kb21haW5zLXdpdGgtdmFy
eWluZy1jb21tYW5kLXNpemVzLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDA0ZDdjOTAyNWU3ZTgwMThkYWQ3
Mjg2ZWRhOTg3OGU1NzM5OWVlZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9kb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5k
LXNpemVzLmpzb24KQEAgLTAsMCArMSw1NSBAQAorWworeworICAgICJkb21haW4iOiAiTmV0d29y
azEiLAorCisgICAgImNvbW1hbmRzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6
ICJsb2FkUmVzb3VyY2UxIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJMb2FkcyBhIHJl
c291cmNlIGluIHRoZSBjb250ZXh0IG9mIGEgZnJhbWUgb24gdGhlIGluc3BlY3RlZCBwYWdlIHdp
dGhvdXQgY3Jvc3Mgb3JpZ2luIGNoZWNrcy4iCisgICAgICAgIH0KKyAgICBdCit9LAoreworICAg
ICJkb21haW4iOiAiTmV0d29yazIiLAorICAgICJ0eXBlcyI6IFsKKyAgICAgICAgeworICAgICAg
ICAgICAgImlkIjogIkxvYWRlcklkIiwKKyAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCisg
ICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5pcXVlIGxvYWRlciBpZGVudGlmaWVyLiIKKyAg
ICAgICAgfQorICAgIF0KK30sCit7CisgICAgImRvbWFpbiI6ICJOZXR3b3JrMyIsCisgICAgImNv
bW1hbmRzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJsb2FkUmVzb3VyY2Ux
IiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJMb2FkcyBhIHJlc291cmNlIGluIHRoZSBj
b250ZXh0IG9mIGEgZnJhbWUgb24gdGhlIGluc3BlY3RlZCBwYWdlIHdpdGhvdXQgY3Jvc3Mgb3Jp
Z2luIGNoZWNrcy4iCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjog
ImxvYWRSZXNvdXJjZTIiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkxvYWRzIGEgcmVz
b3VyY2UgaW4gdGhlIGNvbnRleHQgb2YgYSBmcmFtZSBvbiB0aGUgaW5zcGVjdGVkIHBhZ2Ugd2l0
aG91dCBjcm9zcyBvcmlnaW4gY2hlY2tzLiIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAg
ICAgICAgIm5hbWUiOiAibG9hZFJlc291cmNlMyIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24i
OiAiTG9hZHMgYSByZXNvdXJjZSBpbiB0aGUgY29udGV4dCBvZiBhIGZyYW1lIG9uIHRoZSBpbnNw
ZWN0ZWQgcGFnZSB3aXRob3V0IGNyb3NzIG9yaWdpbiBjaGVja3MuIgorICAgICAgICB9LAorICAg
ICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJsb2FkUmVzb3VyY2U0IiwKKyAgICAgICAgICAg
ICJkZXNjcmlwdGlvbiI6ICJMb2FkcyBhIHJlc291cmNlIGluIHRoZSBjb250ZXh0IG9mIGEgZnJh
bWUgb24gdGhlIGluc3BlY3RlZCBwYWdlIHdpdGhvdXQgY3Jvc3Mgb3JpZ2luIGNoZWNrcy4iCisg
ICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImxvYWRSZXNvdXJjZTUi
LAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkxvYWRzIGEgcmVzb3VyY2UgaW4gdGhlIGNv
bnRleHQgb2YgYSBmcmFtZSBvbiB0aGUgaW5zcGVjdGVkIHBhZ2Ugd2l0aG91dCBjcm9zcyBvcmln
aW4gY2hlY2tzLiIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAi
bG9hZFJlc291cmNlNiIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiTG9hZHMgYSByZXNv
dXJjZSBpbiB0aGUgY29udGV4dCBvZiBhIGZyYW1lIG9uIHRoZSBpbnNwZWN0ZWQgcGFnZSB3aXRo
b3V0IGNyb3NzIG9yaWdpbiBjaGVja3MuIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAg
ICAgICAibmFtZSI6ICJsb2FkUmVzb3VyY2U3IiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6
ICJMb2FkcyBhIHJlc291cmNlIGluIHRoZSBjb250ZXh0IG9mIGEgZnJhbWUgb24gdGhlIGluc3Bl
Y3RlZCBwYWdlIHdpdGhvdXQgY3Jvc3Mgb3JpZ2luIGNoZWNrcy4iCisgICAgICAgIH0KKyAgICBd
Cit9CitdCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbi1yZXN1
bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0
ZWQvY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbi1yZXN1bHQKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
YzBhMDVhOGZkNzMzNmE1YjkyNTg5YjU0MjgyM2NlMjJiMmMyOTAyNQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3Rl
ZC9jb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uLXJlc3VsdApAQCAtMCwwICsxLDQ2
MSBAQAorIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kQ29tbWFuZHMuanMKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgorLy8gYnkg
dGhlIHNjcmlwdDogSmF2YVNjcmlwdENvcmUvcmVwbGF5L3NjcmlwdHMvQ29kZUdlbmVyYXRvcklu
c3BlY3Rvci5weQorCisvLyBEYXRhYmFzZS4KK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEYXRh
YmFzZURpc3BhdGNoZXIgPSBJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluRGlzcGF0Y2hl
ci5iaW5kKEluc3BlY3RvckJhY2tlbmQsICJEYXRhYmFzZSIpOworSW5zcGVjdG9yQmFja2VuZC5y
ZWdpc3RlckNvbW1hbmQoIkRhdGFiYXNlLmV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1
ZXMiLCBbIm5hbWUiOiAiZGF0YWJhc2VJZCIsICJ0eXBlIjogIk5vbmUiLCBmYWxzZSwgIm5hbWUi
OiAicXVlcnkiLCAidHlwZSI6ICJzdHJpbmciLCBmYWxzZV0sIFsibmFtZSI6ICJjb2x1bW5OYW1l
cyIsICJ0eXBlIjogImFycmF5IiwgIm9wdGlvbmFsIjogdHJ1ZSwgIm5hbWUiOiAibm90ZXMiLCAi
dHlwZSI6ICJzdHJpbmciLCAib3B0aW9uYWwiOiB0cnVlLCAibmFtZSI6ICJ0aW1lc3RhbXAiLCAi
dHlwZSI6ICJudW1iZXIiLCAib3B0aW9uYWwiOiB0cnVlLCAibmFtZSI6ICJ2YWx1ZXMiLCAidHlw
ZSI6ICJvYmplY3QiLCAib3B0aW9uYWwiOiB0cnVlLCAibmFtZSI6ICJwYXlsb2FkIiwgInR5cGUi
OiAiYW55IiwgIm9wdGlvbmFsIjogdHJ1ZSwgIm5hbWUiOiAic3FsRXJyb3IiLCAidHlwZSI6ICJO
b25lIiwgIm9wdGlvbmFsIjogdHJ1ZV0pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1h
bmQoIkRhdGFiYXNlLmV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzIiwgWyJuYW1l
IjogImRhdGFiYXNlSWQiLCAidHlwZSI6ICJOb25lIiwgZmFsc2UsICJuYW1lIjogInF1ZXJ5Iiwg
InR5cGUiOiAic3RyaW5nIiwgZmFsc2VdLCBbIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6
ICJhcnJheSIsICJvcHRpb25hbCI6IHRydWUsICJuYW1lIjogIm5vdGVzIiwgInR5cGUiOiAic3Ry
aW5nIiwgIm9wdGlvbmFsIjogdHJ1ZSwgIm5hbWUiOiAidGltZXN0YW1wIiwgInR5cGUiOiAibnVt
YmVyIiwgIm9wdGlvbmFsIjogdHJ1ZSwgIm5hbWUiOiAidmFsdWVzIiwgInR5cGUiOiAib2JqZWN0
IiwgIm9wdGlvbmFsIjogdHJ1ZSwgIm5hbWUiOiAicGF5bG9hZCIsICJ0eXBlIjogImFueSIsICJv
cHRpb25hbCI6IHRydWUsICJuYW1lIjogInNxbEVycm9yIiwgInR5cGUiOiAiTm9uZSIsICJvcHRp
b25hbCI6IHRydWVdKTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJEYXRhYmFz
ZS5leGVjdXRlU1FMU3luYyIsIFsibmFtZSI6ICJkYXRhYmFzZUlkIiwgInR5cGUiOiAiTm9uZSIs
IGZhbHNlLCAibmFtZSI6ICJxdWVyeSIsICJ0eXBlIjogInN0cmluZyIsIGZhbHNlXSwgWyJuYW1l
IjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAiYXJyYXkiLCBmYWxzZSwgIm5hbWUiOiAibm90ZXMi
LCAidHlwZSI6ICJzdHJpbmciLCBmYWxzZSwgIm5hbWUiOiAidGltZXN0YW1wIiwgInR5cGUiOiAi
bnVtYmVyIiwgZmFsc2UsICJuYW1lIjogInZhbHVlcyIsICJ0eXBlIjogIm9iamVjdCIsIGZhbHNl
LCAibmFtZSI6ICJwYXlsb2FkIiwgInR5cGUiOiAiYW55IiwgZmFsc2UsICJuYW1lIjogInNxbEVy
cm9yIiwgInR5cGUiOiAiTm9uZSIsIGZhbHNlXSk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVy
Q29tbWFuZCgiRGF0YWJhc2UuZXhlY3V0ZVNRTEFzeW5jIiwgWyJuYW1lIjogImRhdGFiYXNlSWQi
LCAidHlwZSI6ICJOb25lIiwgZmFsc2UsICJuYW1lIjogInF1ZXJ5IiwgInR5cGUiOiAic3RyaW5n
IiwgZmFsc2VdLCBbIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJhcnJheSIsIGZhbHNl
LCAibmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIsIGZhbHNlLCAibmFtZSI6ICJ0aW1l
c3RhbXAiLCAidHlwZSI6ICJudW1iZXIiLCBmYWxzZSwgIm5hbWUiOiAidmFsdWVzIiwgInR5cGUi
OiAib2JqZWN0IiwgZmFsc2UsICJuYW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJhbnkiLCBmYWxz
ZSwgIm5hbWUiOiAic3FsRXJyb3IiLCAidHlwZSI6ICJOb25lIiwgZmFsc2VdKTsKKyMjIyBFbmQg
RmlsZTogSW5zcGVjdG9yVGVzdEJhY2tlbmRDb21tYW5kcy5qcworCisjIyMgQmVnaW4gRmlsZTog
SW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1h
bmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IEphdmFTY3Jp
cHRDb3JlL3JlcGxheS9zY3JpcHRzL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKKworI2lmbmRl
ZiBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzX2gKKyNkZWZpbmUgSW5zcGVjdG9yVGVz
dEJhY2tlbmREaXNwYXRjaGVyc19oCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVk
ZSAiSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5oIgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3Igewor
Cit0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKworI2lmIEVOQUJMRShTUUxfREFUQUJBU0Up
CitjbGFzcyBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7CitwdWJs
aWM6CisgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMo
RXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYg
aW5fcXVlcnksIFJlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheTxTdHJpbmc+PiYg
b3B0X291dF9jb2x1bW5OYW1lcywgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6T3B0T3V0cHV0PFN0
cmluZz4qIG9wdF9vdXRfbm90ZXMsIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6Ok9wdE91dHB1dDxk
b3VibGU+KiBvcHRfb3V0X3RpbWVzdGFtcCwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6T3B0T3V0
cHV0PEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0Piogb3B0X291dF92YWx1ZXMsIEluc3BlY3Rv
cjo6VHlwZUJ1aWxkZXI6Ok9wdE91dHB1dDxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiogb3B0
X291dF9wYXlsb2FkLCBSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6RGF0YWJhc2U6OkVy
cm9yPiYgb3B0X291dF9zcWxFcnJvcikgPSAwOworICAgIGNsYXNzIEV4ZWN1dGVTUUxBc3luY09w
dGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJhY2sgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIEV4
ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJhY2soUGFzc1JlZlB0cjxJbnNw
ZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiwgaW50IGlkKTsKKyAgICAgICAgdm9p
ZCBzZW5kU3VjY2Vzcyhjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheT4qIG9w
dF9jb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nKiBvcHRfbm90ZXMsIGNvbnN0IGRvdWJsZSogb3B0
X3RpbWVzdGFtcCwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QqIG9wdF92YWx1ZXMs
IGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUqIG9wdF9wYXlsb2FkLCBjb25zdCBSZWZQ
dHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+KiBvcHRfc3FsRXJyb3IpOworICAgIH07Cisg
ICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKEVycm9y
U3RyaW5nKiwgY29uc3QgU3RyaW5nJiBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1
ZXJ5LCBQYXNzUmVmUHRyPEV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJh
Y2s+IGNhbGxiYWNrKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVTUUxTeW5jKEVycm9y
U3RyaW5nKiwgY29uc3QgU3RyaW5nJiBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1
ZXJ5LCBSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk8U3RyaW5nPj4mIG91dF9j
b2x1bW5OYW1lcywgU3RyaW5nKiBvdXRfbm90ZXMsIGRvdWJsZSogb3V0X3RpbWVzdGFtcCwgSW5z
cGVjdG9yOjpJbnNwZWN0b3JPYmplY3QqIG91dF92YWx1ZXMsIEluc3BlY3Rvcjo6SW5zcGVjdG9y
VmFsdWUqIG91dF9wYXlsb2FkLCBSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6RGF0YWJh
c2U6OkVycm9yPiYgb3V0X3NxbEVycm9yKSA9IDA7CisgICAgY2xhc3MgRXhlY3V0ZVNRTEFzeW5j
Q2FsbGJhY2sgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6
Q2FsbGJhY2tCYXNlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIEV4ZWN1dGVTUUxBc3luY0NhbGxi
YWNrKFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4sIGlu
dCBpZCk7CisgICAgICAgIHZvaWQgc2VuZFN1Y2Nlc3MoY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6
SW5zcGVjdG9yQXJyYXk+JiBjb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBub3RlcywgZG91Ymxl
IHRpbWVzdGFtcCwgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QgdmFsdWVzLCBJbnNwZWN0b3I6
Okluc3BlY3RvclZhbHVlIHBheWxvYWQsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rv
ck9iamVjdD4mIHNxbEVycm9yKTsKKyAgICB9OworICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU1FM
QXN5bmMoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0
cmluZyYgaW5fcXVlcnksIFBhc3NSZWZQdHI8RXhlY3V0ZVNRTEFzeW5jQ2FsbGJhY2s+IGNhbGxi
YWNrKSA9IDA7Citwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB+SW5zcGVjdG9yRGF0YWJhc2VCYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXIoKTsKK307CisjZW5kaWYgLy8gRU5BQkxFKFNRTF9EQVRBQkFT
RSkKKworI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCitjbGFzcyBJbnNwZWN0b3JEYXRhYmFzZUJh
Y2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yU3VwcGxl
bWVudGFsQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRy
PEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShJbnNwZWN0b3I6Oklu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiwgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2gobG9uZyBjYWxsSWQsIGNv
bnN0IFN0cmluZyYgbWV0aG9kLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0
PiBtZXNzYWdlKSBvdmVycmlkZTsKK3ByaXZhdGU6CisgICAgdm9pZCBleGVjdXRlU1FMU3luY09w
dGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rv
ck9iamVjdCYgbWVzc2FnZSk7CisgICAgdm9pZCBleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVy
blZhbHVlcyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QmIG1l
c3NhZ2UpOworICAgIHZvaWQgZXhlY3V0ZVNRTFN5bmMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsKKyAgICB2b2lkIGV4ZWN1dGVTUUxBc3lu
Yyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2Up
OworcHJpdmF0ZToKKyAgICBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqLCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tl
bmREaXNwYXRjaGVySGFuZGxlciopOworICAgIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3Bh
dGNoZXJIYW5kbGVyKiBtX2FnZW50OworfTsKKyNlbmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNF
KQorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNU
T1IpCisKKyNlbmRpZiAvLyAhZGVmaW5lZChJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJz
X2gpCisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisj
IyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgorLy8gYnkgdGhl
IHNjcmlwdDogSmF2YVNjcmlwdENvcmUvcmVwbGF5L3NjcmlwdHMvQ29kZUdlbmVyYXRvckluc3Bl
Y3Rvci5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSBJbnNwZWN0b3JUZXN0QmFj
a2VuZERpc3BhdGNoZXJzLmgiCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSA8
aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oPgorI2luY2x1ZGUgPGluc3BlY3Rv
ci9JbnNwZWN0b3JWYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25h
bWVzcGFjZSBJbnNwZWN0b3IgeworCisjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKK0luc3BlY3Rv
ckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjp+SW5zcGVjdG9yRGF0YWJhc2VCYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXIoKSB7IH0KKyNlbmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNF
KQorCisjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKK1Bhc3NSZWZQdHI8SW5zcGVjdG9yRGF0YWJh
c2VCYWNrZW5kRGlzcGF0Y2hlcj4gSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6
Y3JlYXRlKEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlciwgSW5z
cGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQoreworICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcihiYWNr
ZW5kRGlzcGF0Y2hlciwgYWdlbnQpKTsKK30KKworSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlz
cGF0Y2hlcjo6SW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcihJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIsIEluc3BlY3RvckRhdGFiYXNlQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKKyAgICA6IEluc3BlY3RvclN1cHBsZW1lbnRhbEJh
Y2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyKQorICAgICwgbV9hZ2VudChhZ2VudCkK
K3sKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4o
QVNDSUlMaXRlcmFsKCJEYXRhYmFzZSIpLCB0aGlzKTsKK30KKwordm9pZCBJbnNwZWN0b3JEYXRh
YmFzZUJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5n
JiBtZXRob2QsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtZXNzYWdlKQoreworICAgIFJl
ZjxJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKKwor
ICAgIGlmIChtZXRob2QgPT0gImV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMiKQor
ICAgICAgICBleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGNhbGxJZCwgKm1lc3Nh
Z2UuZ2V0KCkpOworICAgIGVsc2UgaWYgKG1ldGhvZCA9PSAiZXhlY3V0ZVNRTEFzeW5jT3B0aW9u
YWxSZXR1cm5WYWx1ZXMiKQorICAgICAgICBleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZh
bHVlcyhjYWxsSWQsICptZXNzYWdlLmdldCgpKTsKKyAgICBlbHNlIGlmIChtZXRob2QgPT0gImV4
ZWN1dGVTUUxTeW5jIikKKyAgICAgICAgZXhlY3V0ZVNRTFN5bmMoY2FsbElkLCAqbWVzc2FnZS5n
ZXQoKSk7CisgICAgZWxzZSBpZiAobWV0aG9kID09ICJleGVjdXRlU1FMQXN5bmMiKQorICAgICAg
ICBleGVjdXRlU1FMQXN5bmMoY2FsbElkLCAqbWVzc2FnZS5nZXQoKSk7CisgICAgZWxzZQorICAg
ICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIElu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgU3RyaW5nKCInIikgKyAi
RGF0YWJhc2UiICsgJy4nICsgbWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOworfQorCit2b2lk
IEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxTeW5jT3B0aW9u
YWxSZXR1cm5WYWx1ZXMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2Fn
ZSkKK3sKKyAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVj
dG9yQXJyYXk6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0Nv
bnRhaW5lciA9IG1lc3NhZ2UuZ2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicGFyYW1zIikpOworICAg
IEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdl
dCgpOworICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJy
b3JzLmdldCgpOworICAgIFN0cmluZyBpbl9kYXRhYmFzZUlkID0gSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXI6OmdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgiZGF0
YWJhc2VJZCIpLCBudWxscHRyLCBwcm90b2NvbEVycm9yc1B0cik7CisgICAgU3RyaW5nIGluX3F1
ZXJ5ID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldFN0cmluZyhwYXJhbXNDb250YWlu
ZXJQdHIsIEFTQ0lJTGl0ZXJhbCgicXVlcnkiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnNQdHIp
OworICAgIGlmIChwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKKyAgICAgICAgU3RyaW5nIGVy
cm9yTWVzc2FnZSA9IFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVz
JyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiRGF0YWJhc2UuZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJl
dHVyblZhbHVlcyIpOworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2Nv
bEVycm9yKCZjYWxsSWQsIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1z
LCBlcnJvck1lc3NhZ2UsIHByb3RvY29sRXJyb3JzLnJlbGVhc2UoKSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBFcnJvclN0cmluZyBlcnJvcjsKKyAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxJ
bnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheTxTdHJpbmc+PiBvdXRfY29sdW1uTmFtZXM7Cisg
ICAgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6T3B0T3V0cHV0PFN0cmluZz4gb3V0X25vdGVzOwor
ICAgIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6Ok9wdE91dHB1dDxkb3VibGU+IG91dF90aW1lc3Rh
bXA7CisgICAgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6T3B0T3V0cHV0PEluc3BlY3Rvcjo6SW5z
cGVjdG9yT2JqZWN0PiBvdXRfdmFsdWVzOworICAgIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6Ok9w
dE91dHB1dDxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiBvdXRfcGF5bG9hZDsKKyAgICBSZWZQ
dHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6RGF0YWJhc2U6OkVycm9yPiBvdXRfc3FsRXJyb3I7
CisgICAgbV9hZ2VudC0+ZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcygmZXJyb3Is
IGluX2RhdGFiYXNlSWQsIGluX3F1ZXJ5LCBvdXRfY29sdW1uTmFtZXMsICZvdXRfbm90ZXMsICZv
dXRfdGltZXN0YW1wLCAmb3V0X3ZhbHVlcywgJm91dF9wYXlsb2FkLCBvdXRfc3FsRXJyb3IpOwor
CisgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkgeworICAgICAgICBpZiAob3V0X2NvbHVtbk5hbWVz
KQorICAgICAgICAgICAgcmVzdWx0LT5zZXRWYWx1ZShBU0NJSUxpdGVyYWwoImNvbHVtbk5hbWVz
IiksIG91dF9jb2x1bW5OYW1lcyk7CisgICAgICAgIGlmIChvdXRfbm90ZXMuaXNBc3NpZ25lZCgp
KQorICAgICAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJub3RlcyIpLCBv
dXRfbm90ZXMuZ2V0VmFsdWUoKSk7CisgICAgICAgIGlmIChvdXRfdGltZXN0YW1wLmlzQXNzaWdu
ZWQoKSkKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0TnVtYmVyKEFTQ0lJTGl0ZXJhbCgidGltZXN0
YW1wIiksIG91dF90aW1lc3RhbXAuZ2V0VmFsdWUoKSk7CisgICAgICAgIGlmIChvdXRfdmFsdWVz
LmlzQXNzaWduZWQoKSkKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJh
bCgidmFsdWVzIiksIG91dF92YWx1ZXMuZ2V0VmFsdWUoKSk7CisgICAgICAgIGlmIChvdXRfcGF5
bG9hZC5pc0Fzc2lnbmVkKCkpCisgICAgICAgICAgICByZXN1bHQtPnNldEFueShBU0NJSUxpdGVy
YWwoInBheWxvYWQiKSwgb3V0X3BheWxvYWQuZ2V0VmFsdWUoKSk7CisgICAgICAgIGlmIChvdXRf
c3FsRXJyb3IpCisgICAgICAgICAgICByZXN1bHQtPnNldFZhbHVlKEFTQ0lJTGl0ZXJhbCgic3Fs
RXJyb3IiKSwgb3V0X3NxbEVycm9yKTsKKyAgICB9CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+
c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgZXJyb3IpOworfQorCitJbnNw
ZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jT3B0
aW9uYWxSZXR1cm5WYWx1ZXNDYWxsYmFjazo6RXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5W
YWx1ZXNDYWxsYmFjayhQYXNzUmVmUHRyPEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiBiYWNr
ZW5kRGlzcGF0Y2hlciwgaW50IGlkKSA6IEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXI6OkNhbGxiYWNrQmFzZShiYWNrZW5kRGlzcGF0Y2hlciwgaWQpIHsgfQorCit2b2lkIElu
c3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNP
cHRpb25hbFJldHVyblZhbHVlc0NhbGxiYWNrOjpzZW5kU3VjY2VzcyhQYXNzUmVmUHRyPEluc3Bl
Y3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5PFN0cmluZz4+IGNvbHVtbk5hbWVzLCBJbnNwZWN0b3I6
OlR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8U3RyaW5nPiBub3RlcywgSW5zcGVjdG9yOjpUeXBlQnVp
bGRlcjo6T3B0T3V0cHV0PGRvdWJsZT4gdGltZXN0YW1wLCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVy
OjpPcHRPdXRwdXQ8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IHZhbHVlcywgSW5zcGVjdG9y
OjpUeXBlQnVpbGRlcjo6T3B0T3V0cHV0PEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+IHBheWxv
YWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6RGF0YWJhc2U6OkVycm9yPiBz
cWxFcnJvcikKK3sKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBqc29uTWVzc2FnZSA9IElu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgaWYgKGNvbHVtbk5hbWVzKQorICAgICAgICBq
c29uTWVzc2FnZS0+c2V0VmFsdWUoQVNDSUlMaXRlcmFsKCJjb2x1bW5OYW1lcyIpLCBjb2x1bW5O
YW1lcyk7CisgICAgaWYgKG5vdGVzLmlzQXNzaWduZWQoKSkKKyAgICAgICAganNvbk1lc3NhZ2Ut
PnNldFN0cmluZyhBU0NJSUxpdGVyYWwoIm5vdGVzIiksIG5vdGVzLmdldFZhbHVlKCkpOworICAg
IGlmICh0aW1lc3RhbXAuaXNBc3NpZ25lZCgpKQorICAgICAgICBqc29uTWVzc2FnZS0+c2V0TnVt
YmVyKEFTQ0lJTGl0ZXJhbCgidGltZXN0YW1wIiksIHRpbWVzdGFtcC5nZXRWYWx1ZSgpKTsKKyAg
ICBpZiAodmFsdWVzLmlzQXNzaWduZWQoKSkKKyAgICAgICAganNvbk1lc3NhZ2UtPnNldE9iamVj
dChBU0NJSUxpdGVyYWwoInZhbHVlcyIpLCB2YWx1ZXMuZ2V0VmFsdWUoKSk7CisgICAgaWYgKHBh
eWxvYWQuaXNBc3NpZ25lZCgpKQorICAgICAgICBqc29uTWVzc2FnZS0+c2V0QW55KEFTQ0lJTGl0
ZXJhbCgicGF5bG9hZCIpLCBwYXlsb2FkLmdldFZhbHVlKCkpOworICAgIGlmIChzcWxFcnJvcikK
KyAgICAgICAganNvbk1lc3NhZ2UtPnNldFZhbHVlKEFTQ0lJTGl0ZXJhbCgic3FsRXJyb3IiKSwg
c3FsRXJyb3IpOworICAgIHNlbmRJZkFjdGl2ZShqc29uTWVzc2FnZSwgRXJyb3JTdHJpbmcoKSk7
Cit9CisKK3ZvaWQgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNR
TEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9i
amVjdCYgbWVzc2FnZSkKK3sKKyAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJy
b3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IHBhcmFtc0NvbnRhaW5lciA9IG1lc3NhZ2UuZ2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicGFy
YW1zIikpOworICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1z
Q29udGFpbmVyLmdldCgpOworICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9
IHByb3RvY29sRXJyb3JzLmdldCgpOworICAgIFN0cmluZyBpbl9kYXRhYmFzZUlkID0gSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXI6OmdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJ
TGl0ZXJhbCgiZGF0YWJhc2VJZCIpLCBudWxscHRyLCBwcm90b2NvbEVycm9yc1B0cik7CisgICAg
U3RyaW5nIGluX3F1ZXJ5ID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldFN0cmluZyhw
YXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgicXVlcnkiKSwgbnVsbHB0ciwgcHJvdG9j
b2xFcnJvcnNQdHIpOworICAgIGlmIChwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKKyAgICAg
ICAgU3RyaW5nIGVycm9yTWVzc2FnZSA9IFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBv
ZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiRGF0YWJhc2UuZXhlY3V0ZVNRTEFz
eW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMiKTsKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+
cmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElkLCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6
SW52YWxpZFBhcmFtcywgZXJyb3JNZXNzYWdlLCBwcm90b2NvbEVycm9ycy5yZWxlYXNlKCkpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgRXJyb3JTdHJpbmcgZXJyb3I7CisgICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsK
KyAgICBSZWZQdHI8SW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkV4
ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJhY2s+IGNhbGxiYWNrID0gYWRv
cHRSZWYobmV3IEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVj
dXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc0NhbGxiYWNrKG1fYmFja2VuZERpc3BhdGNo
ZXIsY2FsbElkKSk7CisgICAgbV9hZ2VudC0+ZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5W
YWx1ZXMoJmVycm9yLCBpbl9kYXRhYmFzZUlkLCBpbl9xdWVyeSwgY2FsbGJhY2spOworCisgICAg
aWYgKGVycm9yLmxlbmd0aCgpKSB7CisgICAgICAgIGNhbGxiYWNrLT5kaXNhYmxlKCk7CisgICAg
ICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgSW5z
cGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KK30KKwordm9pZCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tl
bmREaXNwYXRjaGVyOjpleGVjdXRlU1FMU3luYyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9y
T2JqZWN0JiBtZXNzYWdlKQoreworICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xF
cnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gcGFyYW1zQ29udGFpbmVyID0gbWVzc2FnZS5nZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJw
YXJhbXMiKSk7CisgICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJh
bXNDb250YWluZXIuZ2V0KCk7CisgICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRy
ID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CisgICAgU3RyaW5nIGluX2RhdGFiYXNlSWQgPSBJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgQVND
SUlMaXRlcmFsKCJkYXRhYmFzZUlkIiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzUHRyKTsKKyAg
ICBTdHJpbmcgaW5fcXVlcnkgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0U3RyaW5n
KHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJxdWVyeSIpLCBudWxscHRyLCBwcm90
b2NvbEVycm9yc1B0cik7CisgICAgaWYgKHByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgeworICAg
ICAgICBTdHJpbmcgZXJyb3JNZXNzYWdlID0gU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRz
IG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJEYXRhYmFzZS5leGVjdXRlU1FM
U3luYyIpOworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9y
KCZjYWxsSWQsIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCBlcnJv
ck1lc3NhZ2UsIHByb3RvY29sRXJyb3JzLnJlbGVhc2UoKSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBFcnJvclN0cmluZyBlcnJvcjsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxJbnNwZWN0
b3I6OlR5cGVCdWlsZGVyOjpBcnJheTxTdHJpbmc+PiBvdXRfY29sdW1uTmFtZXM7CisgICAgU3Ry
aW5nIG91dF9ub3RlczsKKyAgICBkb3VibGUgb3V0X3RpbWVzdGFtcDsKKyAgICBJbnNwZWN0b3I6
Okluc3BlY3Rvck9iamVjdCBvdXRfdmFsdWVzOworICAgIEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFs
dWUgb3V0X3BheWxvYWQ7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkRhdGFi
YXNlOjpFcnJvcj4gb3V0X3NxbEVycm9yOworICAgIG1fYWdlbnQtPmV4ZWN1dGVTUUxTeW5jKCZl
cnJvciwgaW5fZGF0YWJhc2VJZCwgaW5fcXVlcnksIG91dF9jb2x1bW5OYW1lcywgJm91dF9ub3Rl
cywgJm91dF90aW1lc3RhbXAsICZvdXRfdmFsdWVzLCAmb3V0X3BheWxvYWQsIG91dF9zcWxFcnJv
cik7CisKKyAgICBpZiAoIWVycm9yLmxlbmd0aCgpKSB7CisgICAgICAgIHJlc3VsdC0+c2V0VmFs
dWUoQVNDSUlMaXRlcmFsKCJjb2x1bW5OYW1lcyIpLCBvdXRfY29sdW1uTmFtZXMpOworICAgICAg
ICByZXN1bHQtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoIm5vdGVzIiksIG91dF9ub3Rlcyk7Cisg
ICAgICAgIHJlc3VsdC0+c2V0TnVtYmVyKEFTQ0lJTGl0ZXJhbCgidGltZXN0YW1wIiksIG91dF90
aW1lc3RhbXApOworICAgICAgICByZXN1bHQtPnNldE9iamVjdChBU0NJSUxpdGVyYWwoInZhbHVl
cyIpLCBvdXRfdmFsdWVzKTsKKyAgICAgICAgcmVzdWx0LT5zZXRBbnkoQVNDSUlMaXRlcmFsKCJw
YXlsb2FkIiksIG91dF9wYXlsb2FkKTsKKyAgICAgICAgcmVzdWx0LT5zZXRWYWx1ZShBU0NJSUxp
dGVyYWwoInNxbEVycm9yIiksIG91dF9zcWxFcnJvcik7CisgICAgfQorICAgIG1fYmFja2VuZERp
c3BhdGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIGVycm9yKTsK
K30KKworSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkV4ZWN1dGVT
UUxBc3luY0NhbGxiYWNrOjpFeGVjdXRlU1FMQXN5bmNDYWxsYmFjayhQYXNzUmVmUHRyPEluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyPiBiYWNrZW5kRGlzcGF0Y2hlciwgaW50IGlkKSA6IEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZShiYWNrZW5kRGlz
cGF0Y2hlciwgaWQpIHsgfQorCit2b2lkIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNo
ZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNDYWxsYmFjazo6c2VuZFN1Y2Nlc3MoUGFzc1JlZlB0
cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheTxTdHJpbmc+PiBjb2x1bW5OYW1lcywgY29u
c3QgU3RyaW5nJiBub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgSW5zcGVjdG9yOjpJbnNwZWN0b3JP
YmplY3QgdmFsdWVzLCBJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlIHBheWxvYWQsIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6RGF0YWJhc2U6OkVycm9yPiBzcWxFcnJvcikKK3sK
KyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBqc29uTWVzc2FnZSA9IEluc3BlY3Rvck9iamVj
dDo6Y3JlYXRlKCk7CisgICAganNvbk1lc3NhZ2UtPnNldFZhbHVlKEFTQ0lJTGl0ZXJhbCgiY29s
dW1uTmFtZXMiKSwgY29sdW1uTmFtZXMpOworICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoQVND
SUlMaXRlcmFsKCJub3RlcyIpLCBub3Rlcyk7CisgICAganNvbk1lc3NhZ2UtPnNldE51bWJlcihB
U0NJSUxpdGVyYWwoInRpbWVzdGFtcCIpLCB0aW1lc3RhbXApOworICAgIGpzb25NZXNzYWdlLT5z
ZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJ2YWx1ZXMiKSwgdmFsdWVzKTsKKyAgICBqc29uTWVzc2Fn
ZS0+c2V0QW55KEFTQ0lJTGl0ZXJhbCgicGF5bG9hZCIpLCBwYXlsb2FkKTsKKyAgICBqc29uTWVz
c2FnZS0+c2V0VmFsdWUoQVNDSUlMaXRlcmFsKCJzcWxFcnJvciIpLCBzcWxFcnJvcik7CisgICAg
c2VuZElmQWN0aXZlKGpzb25NZXNzYWdlLCBFcnJvclN0cmluZygpKTsKK30KKwordm9pZCBJbnNw
ZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FMQXN5bmMobG9uZyBjYWxs
SWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSkKK3sKKyAgICBSZWZQdHI8SW5zcGVj
dG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOworICAg
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IG1lc3NhZ2UuZ2V0T2Jq
ZWN0KEFTQ0lJTGl0ZXJhbCgicGFyYW1zIikpOworICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1z
Q29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOworICAgIEluc3BlY3RvckFycmF5
KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOworICAgIFN0cmluZyBp
bl9kYXRhYmFzZUlkID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldFN0cmluZyhwYXJh
bXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgiZGF0YWJhc2VJZCIpLCBudWxscHRyLCBwcm90
b2NvbEVycm9yc1B0cik7CisgICAgU3RyaW5nIGluX3F1ZXJ5ID0gSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXI6OmdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgicXVl
cnkiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnNQdHIpOworICAgIGlmIChwcm90b2NvbEVycm9y
cy0+bGVuZ3RoKCkpIHsKKyAgICAgICAgU3RyaW5nIGVycm9yTWVzc2FnZSA9IFN0cmluZzo6Zm9y
bWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAi
RGF0YWJhc2UuZXhlY3V0ZVNRTEFzeW5jIik7CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXIt
PnJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6
OkludmFsaWRQYXJhbXMsIGVycm9yTWVzc2FnZSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEVycm9yU3RyaW5nIGVycm9yOworICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7
CisgICAgUmVmUHRyPEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpF
eGVjdXRlU1FMQXN5bmNDYWxsYmFjaz4gY2FsbGJhY2sgPSBhZG9wdFJlZihuZXcgSW5zcGVjdG9y
RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkV4ZWN1dGVTUUxBc3luY0NhbGxiYWNr
KG1fYmFja2VuZERpc3BhdGNoZXIsY2FsbElkKSk7CisgICAgbV9hZ2VudC0+ZXhlY3V0ZVNRTEFz
eW5jKCZlcnJvciwgaW5fZGF0YWJhc2VJZCwgaW5fcXVlcnksIGNhbGxiYWNrKTsKKworICAgIGlm
IChlcnJvci5sZW5ndGgoKSkgeworICAgICAgICBjYWxsYmFjay0+ZGlzYWJsZSgpOworICAgICAg
ICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9Cit9CisjZW5kaWYgLy8gRU5BQkxFKFNRTF9EQVRBQkFTRSkK
KworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9S
KQorCisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisK
KyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24KKy8vIGJ5IHRo
ZSBzY3JpcHQ6IEphdmFTY3JpcHRDb3JlL3JlcGxheS9zY3JpcHRzL0NvZGVHZW5lcmF0b3JJbnNw
ZWN0b3IucHkKKworI2lmbmRlZiBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVyc19oCisj
ZGVmaW5lIEluc3BlY3RvclRlc3RGcm9udGVuZERpc3BhdGNoZXJzX2gKKworI2lmIEVOQUJMRShJ
TlNQRUNUT1IpCisKKyNpbmNsdWRlICJJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmgiCisjaW5j
bHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oPgorI2luY2x1ZGUgPGlu
c3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsK
KworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BF
Q1RPUikKKworI2VuZGlmIC8vICFkZWZpbmVkKEluc3BlY3RvclRlc3RGcm9udGVuZERpc3BhdGNo
ZXJzX2gpCisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgK
KworIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uCisvLyBi
eSB0aGUgc2NyaXB0OiBKYXZhU2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0cy9Db2RlR2VuZXJhdG9y
SW5zcGVjdG9yLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JU
ZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIiIKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit9
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisK
KyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhw
ZWN0ZWQvY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24t
cmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4
cGVjdGVkL2NvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29u
LXJlc3VsdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5lNjUxOWRkNzNmNDlkZjA1NTI3YjQ4ODVkZGI5NDcyMTkwMWZl
MjdjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2NvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4t
cGFyYW1ldGVycy5qc29uLXJlc3VsdApAQCAtMCwwICsxLDM2OSBAQAorIyMjIEJlZ2luIEZpbGU6
IEluc3BlY3RvclRlc3RCYWNrZW5kQ29tbWFuZHMuanMKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFu
ZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBz
Y3JpcHQ6IEphdmFTY3JpcHRDb3JlL3JlcGxheS9zY3JpcHRzL0NvZGVHZW5lcmF0b3JJbnNwZWN0
b3IucHkKKworLy8gRGF0YWJhc2UuCitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRGF0YWJhc2VE
aXNwYXRjaGVyID0gSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbkRpc3BhdGNoZXIuYmlu
ZChJbnNwZWN0b3JCYWNrZW5kLCAiRGF0YWJhc2UiKTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0
ZXJDb21tYW5kKCJEYXRhYmFzZS5leGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzIiwgWyJuYW1l
IjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAiYXJyYXkiLCAib3B0aW9uYWwiOiB0cnVlLCAibmFt
ZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IHRydWUsICJuYW1lIjog
InRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciIsICJvcHRpb25hbCI6IHRydWUsICJuYW1lIjog
InZhbHVlcyIsICJ0eXBlIjogIm9iamVjdCIsICJvcHRpb25hbCI6IHRydWUsICJuYW1lIjogInBh
eWxvYWQiLCAidHlwZSI6ICJhbnkiLCAib3B0aW9uYWwiOiB0cnVlLCAibmFtZSI6ICJzcWxFcnJv
ciIsICJ0eXBlIjogIk5vbmUiLCAib3B0aW9uYWwiOiB0cnVlXSwgWyJuYW1lIjogImNvbHVtbk5h
bWVzIiwgInR5cGUiOiAiYXJyYXkiLCAib3B0aW9uYWwiOiB0cnVlLCAibmFtZSI6ICJub3RlcyIs
ICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IHRydWUsICJuYW1lIjogInRpbWVzdGFtcCIs
ICJ0eXBlIjogIm51bWJlciIsICJvcHRpb25hbCI6IHRydWUsICJuYW1lIjogInZhbHVlcyIsICJ0
eXBlIjogIm9iamVjdCIsICJvcHRpb25hbCI6IHRydWUsICJuYW1lIjogInBheWxvYWQiLCAidHlw
ZSI6ICJhbnkiLCAib3B0aW9uYWwiOiB0cnVlLCAibmFtZSI6ICJzcWxFcnJvciIsICJ0eXBlIjog
Ik5vbmUiLCAib3B0aW9uYWwiOiB0cnVlXSk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29t
bWFuZCgiRGF0YWJhc2UuZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzIiwgWyJuYW1lIjogImNv
bHVtbk5hbWVzIiwgInR5cGUiOiAiYXJyYXkiLCBmYWxzZSwgIm5hbWUiOiAibm90ZXMiLCAidHlw
ZSI6ICJzdHJpbmciLCBmYWxzZSwgIm5hbWUiOiAidGltZXN0YW1wIiwgInR5cGUiOiAibnVtYmVy
IiwgZmFsc2UsICJuYW1lIjogInZhbHVlcyIsICJ0eXBlIjogIm9iamVjdCIsIGZhbHNlLCAibmFt
ZSI6ICJwYXlsb2FkIiwgInR5cGUiOiAiYW55IiwgZmFsc2UsICJuYW1lIjogInNxbEVycm9yIiwg
InR5cGUiOiAiTm9uZSIsIGZhbHNlXSwgWyJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAi
YXJyYXkiLCBmYWxzZSwgIm5hbWUiOiAibm90ZXMiLCAidHlwZSI6ICJzdHJpbmciLCBmYWxzZSwg
Im5hbWUiOiAidGltZXN0YW1wIiwgInR5cGUiOiAibnVtYmVyIiwgZmFsc2UsICJuYW1lIjogInZh
bHVlcyIsICJ0eXBlIjogIm9iamVjdCIsIGZhbHNlLCAibmFtZSI6ICJwYXlsb2FkIiwgInR5cGUi
OiAiYW55IiwgZmFsc2UsICJuYW1lIjogInNxbEVycm9yIiwgInR5cGUiOiAiTm9uZSIsIGZhbHNl
XSk7CisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kQ29tbWFuZHMuanMKKworIyMj
IEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNv
bgorLy8gYnkgdGhlIHNjcmlwdDogSmF2YVNjcmlwdENvcmUvcmVwbGF5L3NjcmlwdHMvQ29kZUdl
bmVyYXRvckluc3BlY3Rvci5weQorCisjaWZuZGVmIEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0
Y2hlcnNfaAorI2RlZmluZSBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzX2gKKworI2lm
IEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRlICJJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJz
LmgiCisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Cisj
aW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3R5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5n
OworCisjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKK2NsYXNzIEluc3BlY3RvckRhdGFiYXNlQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0
ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhFcnJvclN0cmluZyosIGNvbnN0IFJlZlB0cjxJbnNwZWN0
b3I6Okluc3BlY3RvckFycmF5PiogaW5fY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyogaW5fbm90
ZXMsIGNvbnN0IGRvdWJsZSogaW5fdGltZXN0YW1wLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rv
ck9iamVjdCogaW5fdmFsdWVzLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlKiBpbl9w
YXlsb2FkLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+KiBpbl9zcWxF
cnJvciwgUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5PFN0cmluZz4+JiBvcHRf
b3V0X2NvbHVtbk5hbWVzLCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8U3RyaW5n
Piogb3B0X291dF9ub3RlcywgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6T3B0T3V0cHV0PGRvdWJs
ZT4qIG9wdF9vdXRfdGltZXN0YW1wLCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8
SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+KiBvcHRfb3V0X3ZhbHVlcywgSW5zcGVjdG9yOjpU
eXBlQnVpbGRlcjo6T3B0T3V0cHV0PEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+KiBvcHRfb3V0
X3BheWxvYWQsIFJlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpEYXRhYmFzZTo6RXJyb3I+
JiBvcHRfb3V0X3NxbEVycm9yKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVOb09wdGlv
bmFsUGFyYW1ldGVycyhFcnJvclN0cmluZyosIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3Bl
Y3RvckFycmF5PiYgaW5fY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgaW5fbm90ZXMsIGRvdWJs
ZSBpbl90aW1lc3RhbXAsIEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0IGluX3ZhbHVlcywgSW5z
cGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSBpbl9wYXlsb2FkLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9y
OjpJbnNwZWN0b3JPYmplY3Q+JiBpbl9zcWxFcnJvciwgUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1
aWxkZXI6OkFycmF5PFN0cmluZz4+JiBvdXRfY29sdW1uTmFtZXMsIFN0cmluZyogb3V0X25vdGVz
LCBkb3VibGUqIG91dF90aW1lc3RhbXAsIEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0KiBvdXRf
dmFsdWVzLCBJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlKiBvdXRfcGF5bG9hZCwgUmVmUHRyPElu
c3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkRhdGFiYXNlOjpFcnJvcj4mIG91dF9zcWxFcnJvcikgPSAw
OworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgfkluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3Bh
dGNoZXJIYW5kbGVyKCk7Cit9OworI2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0UpCisKKyNp
ZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQorY2xhc3MgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlz
cGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3BlY3RvclN1cHBsZW1lbnRhbEJh
Y2tlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0
b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUoSW5zcGVjdG9yOjpJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlciosIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyKik7CisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoKGxvbmcgY2FsbElkLCBjb25zdCBTdHJp
bmcmIG1ldGhvZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gbWVzc2Fn
ZSkgb3ZlcnJpZGU7Citwcml2YXRlOgorICAgIHZvaWQgZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1l
dGVycyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QmIG1lc3Nh
Z2UpOworICAgIHZvaWQgZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgY2FsbElkLCBj
b25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7Citwcml2YXRlOgorICAg
IEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIoSW5zcGVjdG9yOjpJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlciosIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyKik7CisgICAgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIG1f
YWdlbnQ7Cit9OworI2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0UpCisKK30gLy8gbmFtZXNw
YWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKworI2VuZGlmIC8v
ICFkZWZpbmVkKEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnNfaCkKKyMjIyBFbmQgRmls
ZTogSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBJ
bnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21t
YW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhl
IHNjcmlwdDogSmF2YVNjcmlwdENvcmUvcmVwbGF5L3NjcmlwdHMvQ29kZUdlbmVyYXRvckluc3Bl
Y3Rvci5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSBJbnNwZWN0b3JUZXN0QmFj
a2VuZERpc3BhdGNoZXJzLmgiCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSA8
aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oPgorI2luY2x1ZGUgPGluc3BlY3Rv
ci9JbnNwZWN0b3JWYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25h
bWVzcGFjZSBJbnNwZWN0b3IgeworCisjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKK0luc3BlY3Rv
ckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjp+SW5zcGVjdG9yRGF0YWJhc2VCYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXIoKSB7IH0KKyNlbmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNF
KQorCisjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKK1Bhc3NSZWZQdHI8SW5zcGVjdG9yRGF0YWJh
c2VCYWNrZW5kRGlzcGF0Y2hlcj4gSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6
Y3JlYXRlKEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlciwgSW5z
cGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQoreworICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcihiYWNr
ZW5kRGlzcGF0Y2hlciwgYWdlbnQpKTsKK30KKworSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlz
cGF0Y2hlcjo6SW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcihJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIsIEluc3BlY3RvckRhdGFiYXNlQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKKyAgICA6IEluc3BlY3RvclN1cHBsZW1lbnRhbEJh
Y2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyKQorICAgICwgbV9hZ2VudChhZ2VudCkK
K3sKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4o
QVNDSUlMaXRlcmFsKCJEYXRhYmFzZSIpLCB0aGlzKTsKK30KKwordm9pZCBJbnNwZWN0b3JEYXRh
YmFzZUJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5n
JiBtZXRob2QsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtZXNzYWdlKQoreworICAgIFJl
ZjxJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKKwor
ICAgIGlmIChtZXRob2QgPT0gImV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMiKQorICAgICAg
ICBleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKGNhbGxJZCwgKm1lc3NhZ2UuZ2V0KCkpOwor
ICAgIGVsc2UgaWYgKG1ldGhvZCA9PSAiZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzIikKKyAg
ICAgICAgZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKGNhbGxJZCwgKm1lc3NhZ2UuZ2V0KCkp
OworICAgIGVsc2UKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xF
cnJvcigmY2FsbElkLCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQs
IFN0cmluZygiJyIpICsgIkRhdGFiYXNlIiArICcuJyArIG1ldGhvZCArICInIHdhcyBub3QgZm91
bmQiKTsKK30KKwordm9pZCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVj
dXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmpl
Y3QmIG1lc3NhZ2UpCit7CisgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9y
cyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBwYXJhbXNDb250YWluZXIgPSBtZXNzYWdlLmdldE9iamVjdChBU0NJSUxpdGVyYWwoInBhcmFt
cyIpKTsKKyAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0Nv
bnRhaW5lci5nZXQoKTsKKyAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBw
cm90b2NvbEVycm9ycy5nZXQoKTsKKyAgICBib29sIGNvbHVtbk5hbWVzX3ZhbHVlRm91bmQgPSBm
YWxzZTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheT4gaW5fY29sdW1uTmFt
ZXMgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0QXJyYXkocGFyYW1zQ29udGFpbmVy
UHRyLCBBU0NJSUxpdGVyYWwoImNvbHVtbk5hbWVzIiksICZjb2x1bW5OYW1lc192YWx1ZUZvdW5k
LCBwcm90b2NvbEVycm9yc1B0cik7CisgICAgYm9vbCBub3Rlc192YWx1ZUZvdW5kID0gZmFsc2U7
CisgICAgU3RyaW5nIGluX25vdGVzID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldFN0
cmluZyhwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgibm90ZXMiKSwgJm5vdGVzX3Zh
bHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRyKTsKKyAgICBib29sIHRpbWVzdGFtcF92YWx1ZUZv
dW5kID0gZmFsc2U7CisgICAgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6T3B0T3V0cHV0PGRvdWJs
ZT4gaW5fdGltZXN0YW1wID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldE51bWJlcihw
YXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgidGltZXN0YW1wIiksICZ0aW1lc3RhbXBf
dmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJvcnNQdHIpOworICAgIGJvb2wgdmFsdWVzX3ZhbHVlRm91
bmQgPSBmYWxzZTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IGluX3Zh
bHVlcyA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRPYmplY3QocGFyYW1zQ29udGFp
bmVyUHRyLCBBU0NJSUxpdGVyYWwoInZhbHVlcyIpLCAmdmFsdWVzX3ZhbHVlRm91bmQsIHByb3Rv
Y29sRXJyb3JzUHRyKTsKKyAgICBib29sIHBheWxvYWRfdmFsdWVGb3VuZCA9IGZhbHNlOworICAg
IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiBpbl9wYXlsb2FkID0gSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXI6OmdldEFueShwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJh
bCgicGF5bG9hZCIpLCAmcGF5bG9hZF92YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0cik7Cisg
ICAgYm9vbCBzcWxFcnJvcl92YWx1ZUZvdW5kID0gZmFsc2U7CisgICAgUmVmUHRyPEluc3BlY3Rv
cjo6SW5zcGVjdG9yT2JqZWN0PiBpbl9zcWxFcnJvciA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyOjpnZXRPYmplY3QocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoInNxbEVycm9y
IiksICZzcWxFcnJvcl92YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0cik7CisgICAgaWYgKHBy
b3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgeworICAgICAgICBTdHJpbmcgZXJyb3JNZXNzYWdlID0g
U3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHBy
b2Nlc3NlZCIsICJEYXRhYmFzZS5leGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzIik7CisgICAg
ICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkludmFsaWRQYXJhbXMsIGVycm9yTWVzc2FnZSwgcHJv
dG9jb2xFcnJvcnMucmVsZWFzZSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEVy
cm9yU3RyaW5nIGVycm9yOworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IElu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxk
ZXI6OkFycmF5PFN0cmluZz4+IG91dF9jb2x1bW5OYW1lczsKKyAgICBJbnNwZWN0b3I6OlR5cGVC
dWlsZGVyOjpPcHRPdXRwdXQ8U3RyaW5nPiBvdXRfbm90ZXM7CisgICAgSW5zcGVjdG9yOjpUeXBl
QnVpbGRlcjo6T3B0T3V0cHV0PGRvdWJsZT4gb3V0X3RpbWVzdGFtcDsKKyAgICBJbnNwZWN0b3I6
OlR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IG91dF92
YWx1ZXM7CisgICAgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6T3B0T3V0cHV0PEluc3BlY3Rvcjo6
SW5zcGVjdG9yVmFsdWU+IG91dF9wYXlsb2FkOworICAgIFJlZlB0cjxJbnNwZWN0b3I6OlR5cGVC
dWlsZGVyOjpEYXRhYmFzZTo6RXJyb3I+IG91dF9zcWxFcnJvcjsKKyAgICBtX2FnZW50LT5leGVj
dXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKCZlcnJvciwgY29sdW1uTmFtZXNfdmFsdWVGb3VuZCA/
ICZpbl9jb2x1bW5OYW1lcyA6IG51bGxwdHIsIG5vdGVzX3ZhbHVlRm91bmQgPyAmaW5fbm90ZXMg
OiBudWxscHRyLCB0aW1lc3RhbXBfdmFsdWVGb3VuZCA/ICZpbl90aW1lc3RhbXAgOiBudWxscHRy
LCB2YWx1ZXNfdmFsdWVGb3VuZCA/ICZpbl92YWx1ZXMgOiBudWxscHRyLCBwYXlsb2FkX3ZhbHVl
Rm91bmQgPyAmaW5fcGF5bG9hZCA6IG51bGxwdHIsIHNxbEVycm9yX3ZhbHVlRm91bmQgPyAmaW5f
c3FsRXJyb3IgOiBudWxscHRyLCBvdXRfY29sdW1uTmFtZXMsICZvdXRfbm90ZXMsICZvdXRfdGlt
ZXN0YW1wLCAmb3V0X3ZhbHVlcywgJm91dF9wYXlsb2FkLCBvdXRfc3FsRXJyb3IpOworCisgICAg
aWYgKCFlcnJvci5sZW5ndGgoKSkgeworICAgICAgICBpZiAob3V0X2NvbHVtbk5hbWVzKQorICAg
ICAgICAgICAgcmVzdWx0LT5zZXRWYWx1ZShBU0NJSUxpdGVyYWwoImNvbHVtbk5hbWVzIiksIG91
dF9jb2x1bW5OYW1lcyk7CisgICAgICAgIGlmIChvdXRfbm90ZXMuaXNBc3NpZ25lZCgpKQorICAg
ICAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJub3RlcyIpLCBvdXRfbm90
ZXMuZ2V0VmFsdWUoKSk7CisgICAgICAgIGlmIChvdXRfdGltZXN0YW1wLmlzQXNzaWduZWQoKSkK
KyAgICAgICAgICAgIHJlc3VsdC0+c2V0TnVtYmVyKEFTQ0lJTGl0ZXJhbCgidGltZXN0YW1wIiks
IG91dF90aW1lc3RhbXAuZ2V0VmFsdWUoKSk7CisgICAgICAgIGlmIChvdXRfdmFsdWVzLmlzQXNz
aWduZWQoKSkKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgidmFs
dWVzIiksIG91dF92YWx1ZXMuZ2V0VmFsdWUoKSk7CisgICAgICAgIGlmIChvdXRfcGF5bG9hZC5p
c0Fzc2lnbmVkKCkpCisgICAgICAgICAgICByZXN1bHQtPnNldEFueShBU0NJSUxpdGVyYWwoInBh
eWxvYWQiKSwgb3V0X3BheWxvYWQuZ2V0VmFsdWUoKSk7CisgICAgICAgIGlmIChvdXRfc3FsRXJy
b3IpCisgICAgICAgICAgICByZXN1bHQtPnNldFZhbHVlKEFTQ0lJTGl0ZXJhbCgic3FsRXJyb3Ii
KSwgb3V0X3NxbEVycm9yKTsKKyAgICB9CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJl
c3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgZXJyb3IpOworfQorCit2b2lkIEluc3Bl
Y3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVy
cyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKQoreworICAgIFJl
ZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3Jl
YXRlKCk7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gbWVz
c2FnZS5nZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJwYXJhbXMiKSk7CisgICAgSW5zcGVjdG9yT2Jq
ZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CisgICAgSW5z
cGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7Cisg
ICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXk+IGluX2NvbHVtbk5hbWVzID0gSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldEFycmF5KHBhcmFtc0NvbnRhaW5lclB0ciwgQVND
SUlMaXRlcmFsKCJjb2x1bW5OYW1lcyIpLCBudWxscHRyLCBwcm90b2NvbEVycm9yc1B0cik7Cisg
ICAgU3RyaW5nIGluX25vdGVzID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldFN0cmlu
ZyhwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgibm90ZXMiKSwgbnVsbHB0ciwgcHJv
dG9jb2xFcnJvcnNQdHIpOworICAgIGRvdWJsZSBpbl90aW1lc3RhbXAgPSBJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlcjo6Z2V0TnVtYmVyKHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFs
KCJ0aW1lc3RhbXAiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnNQdHIpOworICAgIFJlZlB0cjxJ
bnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gaW5fdmFsdWVzID0gSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXI6OmdldE9iamVjdChwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgidmFs
dWVzIiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzUHRyKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9y
OjpJbnNwZWN0b3JWYWx1ZT4gaW5fcGF5bG9hZCA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
OjpnZXRBbnkocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoInBheWxvYWQiKSwgbnVs
bHB0ciwgcHJvdG9jb2xFcnJvcnNQdHIpOworICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rv
ck9iamVjdD4gaW5fc3FsRXJyb3IgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0T2Jq
ZWN0KHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJzcWxFcnJvciIpLCBudWxscHRy
LCBwcm90b2NvbEVycm9yc1B0cik7CisgICAgaWYgKHByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkg
eworICAgICAgICBTdHJpbmcgZXJyb3JNZXNzYWdlID0gU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJn
dW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJEYXRhYmFzZS5leGVj
dXRlTm9PcHRpb25hbFBhcmFtZXRlcnMiKTsKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+
cmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElkLCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6
SW52YWxpZFBhcmFtcywgZXJyb3JNZXNzYWdlLCBwcm90b2NvbEVycm9ycy5yZWxlYXNlKCkpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgRXJyb3JTdHJpbmcgZXJyb3I7CisgICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsK
KyAgICBSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk8U3RyaW5nPj4gb3V0X2Nv
bHVtbk5hbWVzOworICAgIFN0cmluZyBvdXRfbm90ZXM7CisgICAgZG91YmxlIG91dF90aW1lc3Rh
bXA7CisgICAgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Qgb3V0X3ZhbHVlczsKKyAgICBJbnNw
ZWN0b3I6Okluc3BlY3RvclZhbHVlIG91dF9wYXlsb2FkOworICAgIFJlZlB0cjxJbnNwZWN0b3I6
OlR5cGVCdWlsZGVyOjpEYXRhYmFzZTo6RXJyb3I+IG91dF9zcWxFcnJvcjsKKyAgICBtX2FnZW50
LT5leGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMoJmVycm9yLCBpbl9jb2x1bW5OYW1lcywgaW5f
bm90ZXMsIGluX3RpbWVzdGFtcCwgaW5fdmFsdWVzLCBpbl9wYXlsb2FkLCBpbl9zcWxFcnJvciwg
b3V0X2NvbHVtbk5hbWVzLCAmb3V0X25vdGVzLCAmb3V0X3RpbWVzdGFtcCwgJm91dF92YWx1ZXMs
ICZvdXRfcGF5bG9hZCwgb3V0X3NxbEVycm9yKTsKKworICAgIGlmICghZXJyb3IubGVuZ3RoKCkp
IHsKKyAgICAgICAgcmVzdWx0LT5zZXRWYWx1ZShBU0NJSUxpdGVyYWwoImNvbHVtbk5hbWVzIiks
IG91dF9jb2x1bW5OYW1lcyk7CisgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJh
bCgibm90ZXMiKSwgb3V0X25vdGVzKTsKKyAgICAgICAgcmVzdWx0LT5zZXROdW1iZXIoQVNDSUlM
aXRlcmFsKCJ0aW1lc3RhbXAiKSwgb3V0X3RpbWVzdGFtcCk7CisgICAgICAgIHJlc3VsdC0+c2V0
T2JqZWN0KEFTQ0lJTGl0ZXJhbCgidmFsdWVzIiksIG91dF92YWx1ZXMpOworICAgICAgICByZXN1
bHQtPnNldEFueShBU0NJSUxpdGVyYWwoInBheWxvYWQiKSwgb3V0X3BheWxvYWQpOworICAgICAg
ICByZXN1bHQtPnNldFZhbHVlKEFTQ0lJTGl0ZXJhbCgic3FsRXJyb3IiKSwgb3V0X3NxbEVycm9y
KTsKKyAgICB9CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwg
cmVzdWx0LnJlbGVhc2UoKSwgZXJyb3IpOworfQorI2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJB
U0UpCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BF
Q1RPUikKKworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNw
cAorCisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFt
ZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogSmF2YVNjcmlwdENvcmUvcmVwbGF5L3Njcmlw
dHMvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQorCisjaWZuZGVmIEluc3BlY3RvclRlc3RGcm9u
dGVuZERpc3BhdGNoZXJzX2gKKyNkZWZpbmUgSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hl
cnNfaAorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUgIkluc3BlY3RvclRlc3RU
eXBlQnVpbGRlcnMuaCIKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsLmg+CisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPgorI2luY2x1ZGUg
PHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25h
bWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNl
bmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorCisjZW5kaWYgLy8gIWRlZmluZWQoSW5zcGVjdG9y
VGVzdEZyb250ZW5kRGlzcGF0Y2hlcnNfaCkKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdEZy
b250ZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdEZyb250
ZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtb3B0aW9u
YWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBKYXZhU2Ny
aXB0Q29yZS9yZXBsYXkvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5CisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVy
cy5oIiIKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3Ry
aW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyMjIyBFbmQgRmlsZTogSW5zcGVj
dG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZG9tYWlucy13aXRoLXZh
cnlpbmctY29tbWFuZC1zaXplcy5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9kb21haW5zLXdpdGgtdmFyeWluZy1jb21t
YW5kLXNpemVzLmpzb24tcmVzdWx0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU2OTczNTAzZDgzYTJlMDc5N2YyYjcw
ZGZiOTc0YzYzZmU2MTc1NGQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZG9tYWlucy13aXRoLXZhcnlpbmct
Y29tbWFuZC1zaXplcy5qc29uLXJlc3VsdApAQCAtMCwwICsxLDQyOCBAQAorIyMjIEJlZ2luIEZp
bGU6IEluc3BlY3RvclRlc3RCYWNrZW5kQ29tbWFuZHMuanMKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9t
YWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBK
YXZhU2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5CisK
Ky8vIE5ldHdvcmsxLgorSW5zcGVjdG9yQmFja2VuZC5yZWdpc3Rlck5ldHdvcmsxRGlzcGF0Y2hl
ciA9IEluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW5EaXNwYXRjaGVyLmJpbmQoSW5zcGVj
dG9yQmFja2VuZCwgIk5ldHdvcmsxIik7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFu
ZCgiTmV0d29yazEubG9hZFJlc291cmNlMSIsIFtdLCBbXSk7CisKKy8vIE5ldHdvcmsyLgorSW5z
cGVjdG9yQmFja2VuZC5yZWdpc3Rlck5ldHdvcmsyRGlzcGF0Y2hlciA9IEluc3BlY3RvckJhY2tl
bmQucmVnaXN0ZXJEb21haW5EaXNwYXRjaGVyLmJpbmQoSW5zcGVjdG9yQmFja2VuZCwgIk5ldHdv
cmsyIik7CisKKy8vIE5ldHdvcmszLgorSW5zcGVjdG9yQmFja2VuZC5yZWdpc3Rlck5ldHdvcmsz
RGlzcGF0Y2hlciA9IEluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW5EaXNwYXRjaGVyLmJp
bmQoSW5zcGVjdG9yQmFja2VuZCwgIk5ldHdvcmszIik7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lz
dGVyQ29tbWFuZCgiTmV0d29yazMubG9hZFJlc291cmNlMSIsIFtdLCBbXSk7CitJbnNwZWN0b3JC
YWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiTmV0d29yazMubG9hZFJlc291cmNlMiIsIFtdLCBbXSk7
CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiTmV0d29yazMubG9hZFJlc291cmNl
MyIsIFtdLCBbXSk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiTmV0d29yazMu
bG9hZFJlc291cmNlNCIsIFtdLCBbXSk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFu
ZCgiTmV0d29yazMubG9hZFJlc291cmNlNSIsIFtdLCBbXSk7CitJbnNwZWN0b3JCYWNrZW5kLnJl
Z2lzdGVyQ29tbWFuZCgiTmV0d29yazMubG9hZFJlc291cmNlNiIsIFtdLCBbXSk7CitJbnNwZWN0
b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiTmV0d29yazMubG9hZFJlc291cmNlNyIsIFtdLCBb
XSk7CisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kQ29tbWFuZHMuanMKKworIyMj
IEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBkb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24KKy8vIGJ5IHRo
ZSBzY3JpcHQ6IEphdmFTY3JpcHRDb3JlL3JlcGxheS9zY3JpcHRzL0NvZGVHZW5lcmF0b3JJbnNw
ZWN0b3IucHkKKworI2lmbmRlZiBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzX2gKKyNk
ZWZpbmUgSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVyc19oCisKKyNpZiBFTkFCTEUoSU5T
UEVDVE9SKQorCisjaW5jbHVkZSAiSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5oIgorI2luY2x1
ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHd0
Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVz
cGFjZSBJbnNwZWN0b3IgeworCit0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKworY2xhc3Mg
SW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgeworcHVibGljOgorICAg
IHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UxKEVycm9yU3RyaW5nKikgPSAwOworcHJvdGVjdGVk
OgorICAgIHZpcnR1YWwgfkluc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVy
KCk7Cit9OworCitjbGFzcyBJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVySGFuZGxl
ciB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTEoRXJyb3JTdHJpbmcq
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTIoRXJyb3JTdHJpbmcqKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTMoRXJyb3JTdHJpbmcqKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTQoRXJyb3JTdHJpbmcqKSA9IDA7CisgICAgdmlydHVh
bCB2b2lkIGxvYWRSZXNvdXJjZTUoRXJyb3JTdHJpbmcqKSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IGxvYWRSZXNvdXJjZTYoRXJyb3JTdHJpbmcqKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGxvYWRS
ZXNvdXJjZTcoRXJyb3JTdHJpbmcqKSA9IDA7Citwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB+SW5z
cGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKTsKK307CisKK2NsYXNzIElu
c3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9y
OjpJbnNwZWN0b3JTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAg
c3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcj4gY3Jl
YXRlKEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqLCBJbnNwZWN0b3JOZXR3
b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOworICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRj
aChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFBhc3NSZWZQdHI8SW5zcGVjdG9y
OjpJbnNwZWN0b3JPYmplY3Q+IG1lc3NhZ2UpIG92ZXJyaWRlOworcHJpdmF0ZToKKyAgICB2b2lk
IGxvYWRSZXNvdXJjZTEobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2Jq
ZWN0JiBtZXNzYWdlKTsKK3ByaXZhdGU6CisgICAgSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlz
cGF0Y2hlcihJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiwgSW5zcGVjdG9y
TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKKyAgICBJbnNwZWN0b3JOZXR3b3Jr
MUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogbV9hZ2VudDsKK307CisKK2NsYXNzIEluc3BlY3Rv
ck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNw
ZWN0b3JTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8SW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKElu
c3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqLCBJbnNwZWN0b3JOZXR3b3JrM0Jh
Y2tlbmREaXNwYXRjaGVySGFuZGxlciopOworICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaChsb25n
IGNhbGxJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNw
ZWN0b3JPYmplY3Q+IG1lc3NhZ2UpIG92ZXJyaWRlOworcHJpdmF0ZToKKyAgICB2b2lkIGxvYWRS
ZXNvdXJjZTEobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0JiBt
ZXNzYWdlKTsKKyAgICB2b2lkIGxvYWRSZXNvdXJjZTIobG9uZyBjYWxsSWQsIGNvbnN0IEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsKKyAgICB2b2lkIGxvYWRSZXNvdXJjZTMo
bG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsK
KyAgICB2b2lkIGxvYWRSZXNvdXJjZTQobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvcjo6SW5z
cGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsKKyAgICB2b2lkIGxvYWRSZXNvdXJjZTUobG9uZyBjYWxs
SWQsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsKKyAgICB2b2lk
IGxvYWRSZXNvdXJjZTYobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2Jq
ZWN0JiBtZXNzYWdlKTsKKyAgICB2b2lkIGxvYWRSZXNvdXJjZTcobG9uZyBjYWxsSWQsIGNvbnN0
IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsKK3ByaXZhdGU6CisgICAgSW5z
cGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcihJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyKiwgSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIq
KTsKKyAgICBJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciogbV9hZ2Vu
dDsKK307CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElO
U1BFQ1RPUikKKworI2VuZGlmIC8vICFkZWZpbmVkKEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0
Y2hlcnNfaCkKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVycy5o
CisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBkb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24K
Ky8vIGJ5IHRoZSBzY3JpcHQ6IEphdmFTY3JpcHRDb3JlL3JlcGxheS9zY3JpcHRzL0NvZGVHZW5l
cmF0b3JJbnNwZWN0b3IucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgSW5zcGVj
dG9yVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKwor
I2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4KKyNpbmNsdWRl
IDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworSW5zcGVjdG9yTmV0d29yazFCYWNrZW5k
RGlzcGF0Y2hlckhhbmRsZXI6On5JbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFu
ZGxlcigpIHsgfQorSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6On5J
bnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpIHsgfQorCitQYXNzUmVm
UHRyPEluc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI+IEluc3BlY3Rvck5ldHdvcmsx
QmFja2VuZERpc3BhdGNoZXI6OmNyZWF0ZShJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciogYmFj
a2VuZERpc3BhdGNoZXIsIEluc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVy
KiBhZ2VudCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEluc3BlY3Rvck5ldHdvcmsxQmFj
a2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIsIGFnZW50KSk7Cit9CisKK0luc3BlY3Rv
ck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI6Okluc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3Bh
dGNoZXIoSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyLCBJbnNw
ZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCisgICAgOiBJbnNw
ZWN0b3JTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlcikKKyAg
ICAsIG1fYWdlbnQoYWdlbnQpCit7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJE
aXNwYXRjaGVyRm9yRG9tYWluKEFTQ0lJTGl0ZXJhbCgiTmV0d29yazEiKSwgdGhpcyk7Cit9CisK
K3ZvaWQgSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyBj
YWxsSWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
bWVzc2FnZSkKK3sKKyAgICBSZWY8SW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcj4g
cHJvdGVjdCgqdGhpcyk7CisKKyAgICBpZiAobWV0aG9kID09ICJsb2FkUmVzb3VyY2UxIikKKyAg
ICAgICAgbG9hZFJlc291cmNlMShjYWxsSWQsICptZXNzYWdlLmdldCgpKTsKKyAgICBlbHNlCisg
ICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwg
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCBTdHJpbmcoIiciKSAr
ICJOZXR3b3JrMSIgKyAnLicgKyBtZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7Cit9CisKK3Zv
aWQgSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMShsb25n
IGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JikKK3sKKyAgICBFcnJvclN0cmluZyBlcnJv
cjsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6
OmNyZWF0ZSgpOworICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJjZTEoJmVycm9yKTsKKworICAgIG1f
YmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCks
IGVycm9yKTsKK30KKworUGFzc1JlZlB0cjxJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRj
aGVyPiBJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUoSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyLCBJbnNwZWN0b3JOZXR3b3JrM0Jh
Y2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyLCBh
Z2VudCkpOworfQorCitJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpJbnNwZWN0
b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyKEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiBi
YWNrZW5kRGlzcGF0Y2hlciwgSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXIqIGFnZW50KQorICAgIDogSW5zcGVjdG9yU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIo
YmFja2VuZERpc3BhdGNoZXIpCisgICAgLCBtX2FnZW50KGFnZW50KQoreworICAgIG1fYmFja2Vu
ZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbihBU0NJSUxpdGVyYWwoIk5l
dHdvcmszIiksIHRoaXMpOworfQorCit2b2lkIEluc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3Bh
dGNoZXI6OmRpc3BhdGNoKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUGFzc1Jl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1lc3NhZ2UpCit7CisgICAgUmVmPEluc3BlY3Rvck5ldHdv
cmszQmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOworCisgICAgdHlwZWRlZiB2b2lk
IChJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjoqQ2FsbEhhbmRsZXIpKGxvbmcg
Y2FsbElkLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7CisgICAg
dHlwZWRlZiBIYXNoTWFwPFN0cmluZywgQ2FsbEhhbmRsZXI+IERpc3BhdGNoTWFwOworICAgIERF
UFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NBTChEaXNwYXRjaE1hcCwgZGlzcGF0Y2hNYXAsICgp
KTsKKyAgICBpZiAoZGlzcGF0Y2hNYXAuaXNFbXB0eSgpKSB7CisgICAgICAgIHN0YXRpYyBjb25z
dCBzdHJ1Y3QgTWV0aG9kVGFibGUgeworICAgICAgICAgICAgY29uc3QgY2hhciogbmFtZTsKKyAg
ICAgICAgICAgIENhbGxIYW5kbGVyIGhhbmRsZXI7CisgICAgICAgIH0gY29tbWFuZHNbXSA9IHsK
KyAgICAgICAgICAgIHsgImxvYWRSZXNvdXJjZTEiLCAmSW5zcGVjdG9yTmV0d29yazNCYWNrZW5k
RGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMSB9LAorICAgICAgICAgICAgeyAibG9hZFJlc291cmNl
MiIsICZJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UyIH0s
CisgICAgICAgICAgICB7ICJsb2FkUmVzb3VyY2UzIiwgJkluc3BlY3Rvck5ldHdvcmszQmFja2Vu
ZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTMgfSwKKyAgICAgICAgICAgIHsgImxvYWRSZXNvdXJj
ZTQiLCAmSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNCB9
LAorICAgICAgICAgICAgeyAibG9hZFJlc291cmNlNSIsICZJbnNwZWN0b3JOZXR3b3JrM0JhY2tl
bmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U1IH0sCisgICAgICAgICAgICB7ICJsb2FkUmVzb3Vy
Y2U2IiwgJkluc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTYg
fSwKKyAgICAgICAgICAgIHsgImxvYWRSZXNvdXJjZTciLCAmSW5zcGVjdG9yTmV0d29yazNCYWNr
ZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNyB9LAorICAgICAgICB9OworICAgICAgICBzaXpl
X3QgbGVuZ3RoID0gV1RGX0FSUkFZX0xFTkdUSChjb21tYW5kcyk7CisgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCisgICAgICAgICAgICBkaXNwYXRjaE1hcC5hZGQo
Y29tbWFuZHNbaV0ubmFtZSwgY29tbWFuZHNbaV0uaGFuZGxlcik7CisgICAgfQorCisgICAgSGFz
aE1hcDxTdHJpbmcsIENhbGxIYW5kbGVyPjo6aXRlcmF0b3IgaXQgPSBkaXNwYXRjaE1hcC5maW5k
KG1ldGhvZCk7CisgICAgaWYgKGl0ID09IGRpc3BhdGNoTWFwLmVuZCgpKSB7CisgICAgICAgIG1f
YmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCBTdHJpbmcoIiciKSArICJOZXR3b3Jr
MyIgKyAnLicgKyBtZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICAoKCp0aGlzKS4qaXQtPnZhbHVlKShjYWxsSWQsICptZXNzYWdlLmdldCgp
KTsKK30KKwordm9pZCBJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVz
b3VyY2UxKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmKQoreworICAgIEVycm9y
U3RyaW5nIGVycm9yOworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3Bl
Y3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgbV9hZ2VudC0+bG9hZFJlc291cmNlMSgmZXJyb3Ip
OworCisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0
LnJlbGVhc2UoKSwgZXJyb3IpOworfQorCit2b2lkIEluc3BlY3Rvck5ldHdvcmszQmFja2VuZERp
c3BhdGNoZXI6OmxvYWRSZXNvdXJjZTIobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVj
dCYpCit7CisgICAgRXJyb3JTdHJpbmcgZXJyb3I7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBtX2FnZW50LT5sb2Fk
UmVzb3VyY2UyKCZlcnJvcik7CisKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9u
c2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBlcnJvcik7Cit9CisKK3ZvaWQgSW5zcGVjdG9y
TmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMyhsb25nIGNhbGxJZCwgY29u
c3QgSW5zcGVjdG9yT2JqZWN0JikKK3sKKyAgICBFcnJvclN0cmluZyBlcnJvcjsKKyAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwor
ICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJjZTMoJmVycm9yKTsKKworICAgIG1fYmFja2VuZERpc3Bh
dGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIGVycm9yKTsKK30K
Kwordm9pZCBJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U0
KGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmKQoreworICAgIEVycm9yU3RyaW5n
IGVycm9yOworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCk7CisgICAgbV9hZ2VudC0+bG9hZFJlc291cmNlNCgmZXJyb3IpOworCisg
ICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVh
c2UoKSwgZXJyb3IpOworfQorCit2b2lkIEluc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNo
ZXI6OmxvYWRSZXNvdXJjZTUobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYpCit7
CisgICAgRXJyb3JTdHJpbmcgZXJyb3I7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVz
dWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBtX2FnZW50LT5sb2FkUmVzb3Vy
Y2U1KCZlcnJvcik7CisKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2Fs
bElkLCByZXN1bHQucmVsZWFzZSgpLCBlcnJvcik7Cit9CisKK3ZvaWQgSW5zcGVjdG9yTmV0d29y
azNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNihsb25nIGNhbGxJZCwgY29uc3QgSW5z
cGVjdG9yT2JqZWN0JikKK3sKKyAgICBFcnJvclN0cmluZyBlcnJvcjsKKyAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIG1f
YWdlbnQtPmxvYWRSZXNvdXJjZTYoJmVycm9yKTsKKworICAgIG1fYmFja2VuZERpc3BhdGNoZXIt
PnNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIGVycm9yKTsKK30KKwordm9p
ZCBJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U3KGxvbmcg
Y2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmKQoreworICAgIEVycm9yU3RyaW5nIGVycm9y
OworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6
Y3JlYXRlKCk7CisgICAgbV9hZ2VudC0+bG9hZFJlc291cmNlNygmZXJyb3IpOworCisgICAgbV9i
YWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwg
ZXJyb3IpOworfQorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJM
RShJTlNQRUNUT1IpCisKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRj
aGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RGcm9udGVuZERpc3BhdGNo
ZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXpl
cy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBKYXZhU2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0cy9D
b2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5CisKKyNpZm5kZWYgSW5zcGVjdG9yVGVzdEZyb250ZW5k
RGlzcGF0Y2hlcnNfaAorI2RlZmluZSBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVyc19o
CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSAiSW5zcGVjdG9yVGVzdFR5cGVC
dWlsZGVycy5oIgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwu
aD4KKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW5jbHVkZSA8d3Rm
L1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNw
YWNlIEluc3BlY3RvciB7CisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlm
IC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyNlbmRpZiAvLyAhZGVmaW5lZChJbnNwZWN0b3JUZXN0
RnJvbnRlbmREaXNwYXRjaGVyc19oKQorIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0RnJvbnRl
bmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0RnJvbnRlbmRE
aXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmctY29t
bWFuZC1zaXplcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBKYXZhU2NyaXB0Q29yZS9yZXBsYXkv
c2NyaXB0cy9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIiIKKworI2lmIEVO
QUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVz
cGFjZSBJbnNwZWN0b3IgeworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8v
IEVOQUJMRShJTlNQRUNUT1IpCisKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdEZyb250ZW5k
RGlzcGF0Y2hlcnMuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1kdXBsaWNhdGUtdHlwZS1kZWNsYXJh
dGlvbnMuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWR1cGxpY2F0ZS10eXBlLWRlY2xhcmF0aW9ucy5qc29u
LWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjQ0N2NkZjhlMjhlODU2NjEwYTI2ZjgxNTQ5NDNmMzZjZjhiN2Qx
ZjQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1kdXBsaWNhdGUtdHlwZS1kZWNsYXJhdGlvbnMu
anNvbi1lcnJvcgpAQCAtMCwwICsxIEBACitFUlJPUjogRHVwbGljYXRlIHR5cGUgZGVjbGFyYXRp
b246IFJ1bnRpbWUuUmVtb3RlT2JqZWN0SWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLXR5cGUtZGVjbGFy
YXRpb24tdXNpbmctdHlwZS1yZWZlcmVuY2UuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLXR5cGUtZGVjbGFy
YXRpb24tdXNpbmctdHlwZS1yZWZlcmVuY2UuanNvbi1lcnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40MmY1NzUz
YTQzOTYxNDRlYjU2NmM1YzU5NjhkMDQ5YWVjNjE4MmRiCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwt
b24tdHlwZS1kZWNsYXJhdGlvbi11c2luZy10eXBlLXJlZmVyZW5jZS5qc29uLWVycm9yCkBAIC0w
LDAgKzEgQEAKK0VSUk9SOiBUeXBlIHJlZmVyZW5jZSBjYW5ub3QgaGF2ZSBib3RoICd0eXBlJyBh
bmQgJyRyZWYnIGtleXMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi10eXBlLWRlY2xhcmF0aW9uLXVzaW5n
LXR5cGUtcmVmZXJlbmNlLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tdHlwZS1kZWNsYXJhdGlvbi11c2lu
Zy10eXBlLXJlZmVyZW5jZS5qc29uLXJlc3VsdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kNjM4MDdjNTRhZDBiZDAx
ZGY4NGIyMzc4ZDcxMDVhZTRhMzRjYTE3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tdHlwZS1k
ZWNsYXJhdGlvbi11c2luZy10eXBlLXJlZmVyZW5jZS5qc29uLXJlc3VsdApAQCAtMCwwICsxLDIy
NSBAQAorIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kQ29tbWFuZHMuanMKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gZmFpbC1vbi10eXBlLWRlY2xhcmF0aW9uLXVzaW5nLXR5cGUtcmVmZXJl
bmNlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IEphdmFTY3JpcHRDb3JlL3JlcGxheS9zY3JpcHRz
L0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKKworLy8gUnVudGltZS4KK0luc3BlY3RvckJhY2tl
bmQucmVnaXN0ZXJSdW50aW1lRGlzcGF0Y2hlciA9IEluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJE
b21haW5EaXNwYXRjaGVyLmJpbmQoSW5zcGVjdG9yQmFja2VuZCwgIlJ1bnRpbWUiKTsKKyMjIyBF
bmQgRmlsZTogSW5zcGVjdG9yVGVzdEJhY2tlbmRDb21tYW5kcy5qcworCisjIyMgQmVnaW4gRmls
ZTogSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGZh
aWwtb24tdHlwZS1kZWNsYXJhdGlvbi11c2luZy10eXBlLXJlZmVyZW5jZS5qc29uCisvLyBieSB0
aGUgc2NyaXB0OiBKYXZhU2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySW5z
cGVjdG9yLnB5CisKKyNpZm5kZWYgSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVyc19oCisj
ZGVmaW5lIEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnNfaAorCisjaWYgRU5BQkxFKElO
U1BFQ1RPUikKKworI2luY2x1ZGUgIkluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuaCIKKyNpbmNs
dWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx3
dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1l
c3BhY2UgSW5zcGVjdG9yIHsKKwordHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKK30gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKworI2Vu
ZGlmIC8vICFkZWZpbmVkKEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnNfaCkKKyMjIyBF
bmQgRmlsZTogSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBG
aWxlOiBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBmYWlsLW9uLXR5cGUtZGVjbGFyYXRpb24tdXNpbmctdHlwZS1yZWZlcmVuY2UuanNvbgorLy8g
YnkgdGhlIHNjcmlwdDogSmF2YVNjcmlwdENvcmUvcmVwbGF5L3NjcmlwdHMvQ29kZUdlbmVyYXRv
ckluc3BlY3Rvci5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSBJbnNwZWN0b3JU
ZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5j
bHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oPgorI2luY2x1ZGUgPGlu
c3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+
CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
CisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorCisjIyMgRW5kIEZpbGU6IEluc3BlY3Rv
clRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JU
ZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGZhaWwtb24tdHlwZS1k
ZWNsYXJhdGlvbi11c2luZy10eXBlLXJlZmVyZW5jZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBK
YXZhU2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5CisK
KyNpZm5kZWYgSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnNfaAorI2RlZmluZSBJbnNw
ZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVyc19oCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQor
CisjaW5jbHVkZSAiSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5oIgorI2luY2x1ZGUgPGluc3Bl
Y3Rvci9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4KKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5z
cGVjdG9yVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCit9IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyNl
bmRpZiAvLyAhZGVmaW5lZChJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVyc19oKQorIyMj
IEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdp
biBGaWxlOiBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gZmFpbC1vbi10eXBlLWRlY2xhcmF0aW9uLXVzaW5nLXR5cGUtcmVmZXJlbmNlLmpzb24K
Ky8vIGJ5IHRoZSBzY3JpcHQ6IEphdmFTY3JpcHRDb3JlL3JlcGxheS9zY3JpcHRzL0NvZGVHZW5l
cmF0b3JJbnNwZWN0b3IucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkluc3Bl
Y3RvclRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiIgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikK
KworI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7
CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RP
UikKKworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9leHBlY3RlZC9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1kZWNsYXJh
dGlvbi5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVyZW5jZS1pbi10eXBlLWRl
Y2xhcmF0aW9uLmpzb24tZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDNjNzgyZDg5ZGI1NjVkNzI0ZTc1NDBl
MzJlZGNmZGJkNzlhMmY3MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLXVua25vd24tdHlwZS1y
ZWZlcmVuY2UtaW4tdHlwZS1kZWNsYXJhdGlvbi5qc29uLWVycm9yCkBAIC0wLDAgKzEgQEAKK0VS
Uk9SOiBMb29rdXAgZmFpbGVkIGZvciB0eXBlIHJlZmVyZW5jZTogZHJhZ29uIChyZWZlcmVuY2Vk
IGZyb20gZG9tYWluOiBSdW50aW1lKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tdW5rbm93bi10eXBlLXJl
ZmVyZW5jZS1pbi10eXBlLW1lbWJlci5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tdW5rbm93bi10eXBlLXJl
ZmVyZW5jZS1pbi10eXBlLW1lbWJlci5qc29uLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZhZjY2NzJjYmVm
MDk2MzBmZDliZThmZmFkYWNlMTJjNTYxMWNjYTgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi11
bmtub3duLXR5cGUtcmVmZXJlbmNlLWluLXR5cGUtbWVtYmVyLmpzb24tZXJyb3IKQEAgLTAsMCAr
MSBAQAorRVJST1I6IExvb2t1cCBmYWlsZWQgZm9yIHR5cGUgcmVmZXJlbmNlOiBDb2xvciAocmVm
ZXJlbmNlZCBmcm9tIGRvbWFpbjogRmFudGFzeSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9zYW1lLXR5cGUtaWQtZGlm
ZmVyZW50LWRvbWFpbi5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3NhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpz
b24tZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uYjEzMDRmM2RiYzE3OGQ1NmYyNTVjYjNiN2M5ZjA4NmY3OTk1
NmEwNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9leHBlY3RlZC9zYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29u
LWVycm9yCkBAIC0wLDAgKzEgQEAKK0VSUk9SOiBXaGVuIHBhcnNpbmcgZG9tYWluLCByZXF1aXJl
ZCBwcm9wZXJ0eSBtaXNzaW5nOiBkb21haW4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9zYW1lLXR5cGUtaWQtZGlmZmVy
ZW50LWRvbWFpbi5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9leHBlY3RlZC9zYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29u
LXJlc3VsdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi44Y2Y1NTQxM2RmMzhlNjU4ZTYxZWU0NmY3MjBiYzljMWQ5MzVj
MjA3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3NhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24t
cmVzdWx0CkBAIC0wLDAgKzEsMjI4IEBACisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdEJh
Y2tlbmRDb21tYW5kcy5qcworLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50
LWRvbWFpbi5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBKYXZhU2NyaXB0Q29yZS9yZXBsYXkvc2Ny
aXB0cy9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5CisKKy8vIFJ1bnRpbWUuCitJbnNwZWN0b3JC
YWNrZW5kLnJlZ2lzdGVyUnVudGltZURpc3BhdGNoZXIgPSBJbnNwZWN0b3JCYWNrZW5kLnJlZ2lz
dGVyRG9tYWluRGlzcGF0Y2hlci5iaW5kKEluc3BlY3RvckJhY2tlbmQsICJSdW50aW1lIik7CisK
Ky8vIFJ1bnRpbWUyLgorSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlclJ1bnRpbWUyRGlzcGF0Y2hl
ciA9IEluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW5EaXNwYXRjaGVyLmJpbmQoSW5zcGVj
dG9yQmFja2VuZCwgIlJ1bnRpbWUyIik7CisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RCYWNr
ZW5kQ29tbWFuZHMuanMKKworIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kRGlz
cGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFp
bi5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBKYXZhU2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0cy9D
b2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5CisKKyNpZm5kZWYgSW5zcGVjdG9yVGVzdEJhY2tlbmRE
aXNwYXRjaGVyc19oCisjZGVmaW5lIEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnNfaAor
CisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUgIkluc3BlY3RvclRlc3RUeXBlQnVp
bGRlcnMuaCIKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIu
aD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordHlwZWRlZiBTdHJpbmcgRXJyb3JT
dHJpbmc7CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElO
U1BFQ1RPUikKKworI2VuZGlmIC8vICFkZWZpbmVkKEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0
Y2hlcnNfaCkKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVycy5o
CisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCisvLyBi
eSB0aGUgc2NyaXB0OiBKYXZhU2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0cy9Db2RlR2VuZXJhdG9y
SW5zcGVjdG9yLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlIEluc3BlY3RvclRl
c3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNs
dWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLmg+CisjaW5jbHVkZSA8aW5z
cGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
KworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
KworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9y
VGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRl
c3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2FtZS10eXBlLWlkLWRp
ZmZlcmVudC1kb21haW4uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogSmF2YVNjcmlwdENvcmUvcmVw
bGF5L3NjcmlwdHMvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQorCisjaWZuZGVmIEluc3BlY3Rv
clRlc3RGcm9udGVuZERpc3BhdGNoZXJzX2gKKyNkZWZpbmUgSW5zcGVjdG9yVGVzdEZyb250ZW5k
RGlzcGF0Y2hlcnNfaAorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUgIkluc3Bl
Y3RvclRlc3RUeXBlQnVpbGRlcnMuaCIKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsLmg+CisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPgor
I2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVj
dG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorCisjZW5kaWYgLy8gIWRlZmluZWQo
SW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnNfaCkKKyMjIyBFbmQgRmlsZTogSW5zcGVj
dG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9y
VGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNhbWUtdHlwZS1p
ZC1kaWZmZXJlbnQtZG9tYWluLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IEphdmFTY3JpcHRDb3Jl
L3JlcGxheS9zY3JpcHRzL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkluc3BlY3RvclRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiIgor
CisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
KworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisj
ZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0
RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWFsaWFz
ZWQtcHJpbWl0aXZlLXR5cGUuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXBy
aW1pdGl2ZS10eXBlLmpzb24tcmVzdWx0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM0OTc3OGQ0MGYzOTRlZmRlOGFj
MDg4ZjJiZGQ4MzM4ZDdjOWYwNWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1h
bGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24tcmVzdWx0CkBAIC0wLDAgKzEsMjI1IEBACisjIyMg
QmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdEJhY2tlbmRDb21tYW5kcy5qcworLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
Ky8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbgorLy8gYnkg
dGhlIHNjcmlwdDogSmF2YVNjcmlwdENvcmUvcmVwbGF5L3NjcmlwdHMvQ29kZUdlbmVyYXRvcklu
c3BlY3Rvci5weQorCisvLyBSdW50aW1lLgorSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlclJ1bnRp
bWVEaXNwYXRjaGVyID0gSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbkRpc3BhdGNoZXIu
YmluZChJbnNwZWN0b3JCYWNrZW5kLCAiUnVudGltZSIpOworIyMjIEVuZCBGaWxlOiBJbnNwZWN0
b3JUZXN0QmFja2VuZENvbW1hbmRzLmpzCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0
QmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1h
bGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IEphdmFTY3JpcHRD
b3JlL3JlcGxheS9zY3JpcHRzL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKKworI2lmbmRlZiBJ
bnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzX2gKKyNkZWZpbmUgSW5zcGVjdG9yVGVzdEJh
Y2tlbmREaXNwYXRjaGVyc19oCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSAi
SW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5oIgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0
eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisK
KyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorCisjZW5kaWYgLy8gIWRlZmluZWQoSW5zcGVj
dG9yVGVzdEJhY2tlbmREaXNwYXRjaGVyc19oKQorIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0
QmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RCYWNr
ZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYWxp
YXNlZC1wcmltaXRpdmUtdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBKYXZhU2NyaXB0Q29y
ZS9yZXBsYXkvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5CisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlIEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKwor
I2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsLmg+CisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisK
KworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNU
T1IpCisKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAK
KworIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpz
b24KKy8vIGJ5IHRoZSBzY3JpcHQ6IEphdmFTY3JpcHRDb3JlL3JlcGxheS9zY3JpcHRzL0NvZGVH
ZW5lcmF0b3JJbnNwZWN0b3IucHkKKworI2lmbmRlZiBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNw
YXRjaGVyc19oCisjZGVmaW5lIEluc3BlY3RvclRlc3RGcm9udGVuZERpc3BhdGNoZXJzX2gKKwor
I2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRlICJJbnNwZWN0b3JUZXN0VHlwZUJ1aWxk
ZXJzLmgiCisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oPgor
I2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvUGFz
c1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8g
RU5BQkxFKElOU1BFQ1RPUikKKworI2VuZGlmIC8vICFkZWZpbmVkKEluc3BlY3RvclRlc3RGcm9u
dGVuZERpc3BhdGNoZXJzX2gpCisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RGcm9udGVuZERp
c3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RGcm9udGVuZERpc3Bh
dGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJp
bWl0aXZlLXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogSmF2YVNjcmlwdENvcmUvcmVwbGF5
L3NjcmlwdHMvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQorCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIiCisKKyNpZiBF
TkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1l
c3BhY2UgSW5zcGVjdG9yIHsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAv
LyBFTkFCTEUoSU5TUEVDVE9SKQorCisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RGcm9udGVu
ZERpc3BhdGNoZXJzLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5q
c29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbi1yZXN1bHQKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uYjA4ZjY3MWM3YzhiM2NlNzA5Yjk1ZGQ0NTFmZWRkMTkyNjJkNDI1NAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9l
eHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbi1yZXN1bHQKQEAgLTAsMCAr
MSwyMjggQEAKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0QmFja2VuZENvbW1hbmRzLmpz
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uCisvLyBi
eSB0aGUgc2NyaXB0OiBKYXZhU2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0cy9Db2RlR2VuZXJhdG9y
SW5zcGVjdG9yLnB5CisKKy8vIERlYnVnZ2VyLgorSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRl
YnVnZ2VyRGlzcGF0Y2hlciA9IEluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW5EaXNwYXRj
aGVyLmJpbmQoSW5zcGVjdG9yQmFja2VuZCwgIkRlYnVnZ2VyIik7CisKKy8vIFJ1bnRpbWUuCitJ
bnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyUnVudGltZURpc3BhdGNoZXIgPSBJbnNwZWN0b3JCYWNr
ZW5kLnJlZ2lzdGVyRG9tYWluRGlzcGF0Y2hlci5iaW5kKEluc3BlY3RvckJhY2tlbmQsICJSdW50
aW1lIik7CisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kQ29tbWFuZHMuanMKKwor
IyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbgorLy8gYnkgdGhlIHNj
cmlwdDogSmF2YVNjcmlwdENvcmUvcmVwbGF5L3NjcmlwdHMvQ29kZUdlbmVyYXRvckluc3BlY3Rv
ci5weQorCisjaWZuZGVmIEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnNfaAorI2RlZmlu
ZSBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzX2gKKworI2lmIEVOQUJMRShJTlNQRUNU
T1IpCisKKyNpbmNsdWRlICJJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmgiCisjaW5jbHVkZSA8
aW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8d3RmL1Bh
c3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNl
IEluc3BlY3RvciB7CisKK3R5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCit9IC8vIG5hbWVz
cGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyNlbmRpZiAv
LyAhZGVmaW5lZChJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzX2gpCisjIyMgRW5kIEZp
bGU6IEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTog
SW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlw
ZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IEphdmFTY3Jp
cHRDb3JlL3JlcGxheS9zY3JpcHRzL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVycy5o
IgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwuaD4KKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVz
Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9y
IHsKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElO
U1BFQ1RPUikKKworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJz
LmNwcAorCisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMu
aAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbgorLy8g
YnkgdGhlIHNjcmlwdDogSmF2YVNjcmlwdENvcmUvcmVwbGF5L3NjcmlwdHMvQ29kZUdlbmVyYXRv
ckluc3BlY3Rvci5weQorCisjaWZuZGVmIEluc3BlY3RvclRlc3RGcm9udGVuZERpc3BhdGNoZXJz
X2gKKyNkZWZpbmUgSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnNfaAorCisjaWYgRU5B
QkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUgIkluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuaCIK
KyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLmg+CisjaW5jbHVk
ZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRy
Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0
b3IgeworCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUo
SU5TUEVDVE9SKQorCisjZW5kaWYgLy8gIWRlZmluZWQoSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlz
cGF0Y2hlcnNfaCkKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hl
cnMuaAorCisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMu
Y3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uCisv
LyBieSB0aGUgc2NyaXB0OiBKYXZhU2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0cy9Db2RlR2VuZXJh
dG9ySW5zcGVjdG9yLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnNwZWN0
b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIiIKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisK
KyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3Igewor
Cit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1Ip
CisKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
ZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbi1yZXN1bHQgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNs
YXJhdGlvbi1lbnVtLXR5cGUuanNvbi1yZXN1bHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGQxZTRhZDk2ZTM3NTZh
YjVjYjFjN2I5YmJkODU5YWRmYzdkYzgzMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0
aW9uLWVudW0tdHlwZS5qc29uLXJlc3VsdApAQCAtMCwwICsxLDIyNyBAQAorIyMjIEJlZ2luIEZp
bGU6IEluc3BlY3RvclRlc3RCYWNrZW5kQ29tbWFuZHMuanMKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlw
ZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogSmF2YVNjcmlw
dENvcmUvcmVwbGF5L3NjcmlwdHMvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQorCisvLyBSdW50
aW1lLgorSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlclJ1bnRpbWVEaXNwYXRjaGVyID0gSW5zcGVj
dG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbkRpc3BhdGNoZXIuYmluZChJbnNwZWN0b3JCYWNrZW5k
LCAiUnVudGltZSIpOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckVudW0oIlJ1bnRpbWUuTHVj
a3lOdW1iZXJzIiwge05vbmU6ICIwIiwgTm9uZTogIjEiLCBOb25lOiAiMiJ9OworSW5zcGVjdG9y
QmFja2VuZC5yZWdpc3RlckVudW0oIlJ1bnRpbWUuQWxsb3dlZEFuaW1hbHMiLCB7Tm9uZTogIlBp
Z3MiLCBOb25lOiAiV29sdmVzIiwgTm9uZTogIkNhdHMifTsKKyMjIyBFbmQgRmlsZTogSW5zcGVj
dG9yVGVzdEJhY2tlbmRDb21tYW5kcy5qcworCisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVz
dEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24t
ZW51bS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IEphdmFTY3JpcHRDb3JlL3JlcGxheS9z
Y3JpcHRzL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKKworI2lmbmRlZiBJbnNwZWN0b3JUZXN0
QmFja2VuZERpc3BhdGNoZXJzX2gKKyNkZWZpbmUgSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRj
aGVyc19oCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSAiSW5zcGVjdG9yVGVz
dFR5cGVCdWlsZGVycy5oIgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0eXBlZGVmIFN0cmlu
ZyBFcnJvclN0cmluZzsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBF
TkFCTEUoSU5TUEVDVE9SKQorCisjZW5kaWYgLy8gIWRlZmluZWQoSW5zcGVjdG9yVGVzdEJhY2tl
bmREaXNwYXRjaGVyc19oKQorIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3Bh
dGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hl
cnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24K
Ky8vIGJ5IHRoZSBzY3JpcHQ6IEphdmFTY3JpcHRDb3JlL3JlcGxheS9zY3JpcHRzL0NvZGVHZW5l
cmF0b3JJbnNwZWN0b3IucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgSW5zcGVj
dG9yVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKwor
I2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4KKyNpbmNsdWRl
IDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3Bl
Y3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKworIyMjIEVuZCBGaWxlOiBJbnNw
ZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogSW5zcGVj
dG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xh
cmF0aW9uLWVudW0tdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBKYXZhU2NyaXB0Q29yZS9y
ZXBsYXkvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5CisKKyNpZm5kZWYgSW5zcGVj
dG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnNfaAorI2RlZmluZSBJbnNwZWN0b3JUZXN0RnJvbnRl
bmREaXNwYXRjaGVyc19oCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSAiSW5z
cGVjdG9yVGVzdFR5cGVCdWlsZGVycy5oIgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwuaD4KKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+
CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyNlbmRpZiAvLyAhZGVmaW5l
ZChJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVyc19oKQorIyMjIEVuZCBGaWxlOiBJbnNw
ZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0
b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNs
YXJhdGlvbi1lbnVtLXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogSmF2YVNjcmlwdENvcmUv
cmVwbGF5L3NjcmlwdHMvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQorCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIiCisK
KyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgor
CituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNl
bmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorCisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RG
cm9udGVuZERpc3BhdGNoZXJzLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tZHVwbGljYXRlLXR5cGUtZGVjbGFyYXRp
b25zLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
ZmFpbC1vbi1kdXBsaWNhdGUtdHlwZS1kZWNsYXJhdGlvbnMuanNvbgpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43MDJm
YzZhMzI3MGE2NDZhNDUwNDQ3ZmRjMDQwMTM5OTVhOTQyYmYwCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tZHVw
bGljYXRlLXR5cGUtZGVjbGFyYXRpb25zLmpzb24KQEAgLTAsMCArMSwxNSBAQAoreworICAgICJk
b21haW4iOiAiUnVudGltZSIsCisgICAgInR5cGVzIjogWworICAgICAgICB7CisgICAgICAgICAg
ICAiaWQiOiAiUmVtb3RlT2JqZWN0SWQiLAorICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwK
KyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUgb2JqZWN0IGlkZW50aWZpZXIuIgor
ICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiUmVtb3RlT2JqZWN0SWQi
LAorICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlv
biI6ICJVbmlxdWUgb2JqZWN0IGlkZW50aWZpZXIuIgorICAgICAgICB9CisgICAgXQorfQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2Zh
aWwtb24tdHlwZS1kZWNsYXJhdGlvbi11c2luZy10eXBlLXJlZmVyZW5jZS5qc29uIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tdHlwZS1kZWNs
YXJhdGlvbi11c2luZy10eXBlLXJlZmVyZW5jZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE5Yjc1OTBjY2M2
ZjZiYzM0NDNhNGEyODNjYTZmY2NmZGYzMjc3MzQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi10eXBlLWRlY2xh
cmF0aW9uLXVzaW5nLXR5cGUtcmVmZXJlbmNlLmpzb24KQEAgLTAsMCArMSwxMyBAQAorWworewor
ICAgICJkb21haW4iOiAiUnVudGltZSIsCisgICAgInR5cGVzIjogWworICAgICAgICB7CisgICAg
ICAgICAgICAiaWQiOiAiUmVtb3RlT2JqZWN0SWQiLAorICAgICAgICAgICAgInR5cGUiOiAib2Jq
ZWN0IiwKKyAgICAgICAgICAgICIkcmVmIjogIlNvbWVUeXBlIiwKKyAgICAgICAgICAgICJkZXNj
cmlwdGlvbiI6ICJVbmlxdWUgb2JqZWN0IGlkZW50aWZpZXIuIgorICAgICAgICB9CisgICAgXQor
fQorXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2ZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVyZW5jZS1pbi10eXBlLWRlY2xhcmF0aW9u
Lmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFp
bC1vbi11bmtub3duLXR5cGUtcmVmZXJlbmNlLWluLXR5cGUtZGVjbGFyYXRpb24uanNvbgpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5kNjg4N2EyNzQxMTkwMGE4MGQ1MGYwMDNlYWMzNmMxM2E5OWZhZTU4Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2ZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVyZW5jZS1pbi10eXBlLWRlY2xhcmF0aW9uLmpzb24K
QEAgLTAsMCArMSwxMiBAQAorWworeworICAgICJkb21haW4iOiAiUnVudGltZSIsCisgICAgInR5
cGVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiUmVtb3RlT2JqZWN0SWQiLAor
ICAgICAgICAgICAgInR5cGUiOiAiZHJhZ29uIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6
ICJVbmlxdWUgb2JqZWN0IGlkZW50aWZpZXIuIgorICAgICAgICB9CisgICAgXQorfQorXQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2Zh
aWwtb24tdW5rbm93bi10eXBlLXJlZmVyZW5jZS1pbi10eXBlLW1lbWJlci5qc29uIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tdW5rbm93bi10
eXBlLXJlZmVyZW5jZS1pbi10eXBlLW1lbWJlci5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI4MTdkYjUwNDRk
YzFmMjg1NTcwMDhjMWYxNzYxZjFiMDY4ZjRjZTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi11bmtub3duLXR5
cGUtcmVmZXJlbmNlLWluLXR5cGUtbWVtYmVyLmpzb24KQEAgLTAsMCArMSwxNSBAQAorWworewor
ICAgICJkb21haW4iOiAiRmFudGFzeSIsCisgICAgInR5cGVzIjogWworICAgICAgICB7CisgICAg
ICAgICAgICAiaWQiOiAiRHJhZ29uRWdnIiwKKyAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIs
CisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiQSBkcmFnb24gZWdnLiIsCisgICAgICAgICAg
ICAicHJvcGVydGllcyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbG9yIiwgIiRy
ZWYiOiAiQ29sb3IiIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0KK30KK10KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9z
YW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3NhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpz
b24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uM2JmNGRmZjVjY2MyOWQwZThjMWZhNGIyZGQzMjgzZTc3MTYzMmM3ZAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9zYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCkBAIC0wLDAgKzEsMjIg
QEAKK1sKK3sKKyAgICAiZG9tYWluIjogIlJ1bnRpbWUiLAorICAgICJ0eXBlcyI6IFsKKyAgICAg
ICAgeworICAgICAgICAgICAgImlkIjogIlJlbW90ZU9iamVjdElkIiwKKyAgICAgICAgICAgICJ0
eXBlIjogInN0cmluZyIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5pcXVlIG9iamVj
dCBpZGVudGlmaWVyLiIKKyAgICAgICAgfQorICAgIF0KK30sCit7CisgICAgImRvbWFpbiI6ICJS
dW50aW1lMiIsCisgICAgInR5cGVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAi
UmVtb3RlT2JqZWN0SWQiLAorICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKKyAgICAgICAg
ICAgICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUgb2JqZWN0IGlkZW50aWZpZXIuIgorICAgICAgICB9
CisgICAgXQorfQorXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL3R5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5q
c29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3R5cGUt
ZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNiYzlk
NTM5NDc4ZGI0OTVjOTYwNjdlY2Q1NGE5NWJlNTJmOGQwNzAKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvdHlwZS1kZWNsYXJh
dGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24KQEAgLTAsMCArMSwxMCBAQAoreworICAg
ICJkb21haW4iOiAiUnVudGltZSIsCisgICAgInR5cGVzIjogWworICAgICAgICB7CisgICAgICAg
ICAgICAiaWQiOiAiUmVtb3RlT2JqZWN0SWQiLAorICAgICAgICAgICAgInR5cGUiOiAiaW50ZWdl
ciIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5pcXVlIG9iamVjdCBpZGVudGlmaWVy
LiIKKyAgICAgICAgfQorICAgIF0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy90eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNv
biBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy90eXBlLWRl
Y2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jMTY3N2EwMDIxMTM3N2JjZDU4
MWNlMjg3NTY0OWQzMzYxYmJkMjRiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3R5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlw
ZS5qc29uCkBAIC0wLDAgKzEsNDAgQEAKK1sKK3sKKyAgICAiZG9tYWluIjogIkRlYnVnZ2VyIiwK
KyAgICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJCcmVha3BvaW50
SWQiLAorICAgICAgICAgICAgInR5cGUiOiAiaW50ZWdlciIKKyAgICAgICAgfQorICAgIF0KK30s
Cit7CisgICAgImRvbWFpbiI6ICJSdW50aW1lIiwKKyAgICAidHlwZXMiOiBbCisgICAgICAgIHsK
KyAgICAgICAgICAgICJpZCI6ICJMdWNreU51bWJlcnMiLAorICAgICAgICAgICAgInR5cGUiOiAi
YXJyYXkiLAorICAgICAgICAgICAgIml0ZW1zIjogeyAidHlwZSI6ICJpbnRlZ2VyIiB9CisgICAg
ICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJCYWJ5TmFtZXMiLAorICAgICAg
ICAgICAgInR5cGUiOiAiYXJyYXkiLAorICAgICAgICAgICAgIml0ZW1zIjogeyAidHlwZSI6ICJz
dHJpbmciIH0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIk9iamVj
dElkIiwKKyAgICAgICAgICAgICJ0eXBlIjogImludGVnZXIiCisgICAgICAgIH0sCisgICAgICAg
IHsKKyAgICAgICAgICAgICJpZCI6ICJOZXdPYmplY3RzIiwKKyAgICAgICAgICAgICJ0eXBlIjog
ImFycmF5IiwKKyAgICAgICAgICAgICJpdGVtcyI6IHsgIiRyZWYiOiAiT2JqZWN0SWQiIH0KKyAg
ICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIk9sZE9iamVjdHMiLAorICAg
ICAgICAgICAgInR5cGUiOiAiYXJyYXkiLAorICAgICAgICAgICAgIml0ZW1zIjogeyAiJHJlZiI6
ICJEZWJ1Z2dlci5CcmVha3BvaW50SWQiIH0KKyAgICAgICAgfQorICAgIF0KK30KK10KZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy90eXBl
LWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL3R5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24KbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uY2M0NTAzZDJhYmJiN2UxMWQxN2E2NDZkNjE3MDk3Y2IxMWNhMzAxMQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy90
eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uCkBAIC0wLDAgKzEsMTUgQEAKK3sKKyAgICAi
ZG9tYWluIjogIlJ1bnRpbWUiLAorICAgICJ0eXBlcyI6IFsKKyAgICAgICAgeworICAgICAgICAg
ICAgImlkIjogIkx1Y2t5TnVtYmVycyIsCisgICAgICAgICAgICAidHlwZSI6ICJpbnRlZ2VyIiwK
KyAgICAgICAgICAgICJlbnVtIjogWzAsIDEsIDJdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAg
ICAgICAgICAgICJpZCI6ICJBbGxvd2VkQW5pbWFscyIsCisgICAgICAgICAgICAidHlwZSI6ICJz
dHJpbmciLAorICAgICAgICAgICAgImVudW0iOiBbIlBpZ3MiLCAiV29sdmVzIiwgIkNhdHMiXQor
ICAgICAgICB9CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMv
Q2hhbmdlTG9nCmluZGV4IGUyYjU2NzllMDk5MzgzZjg1OGQ5MjU3OGUyNjFjNzNiNjAyNjgzMjIu
LmZmMWYxY2IwYWQ5MGI5YWQwNzMzMTVkZjI2OWUyMzIyOTE4MjcxNzUgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMiBAQAorMjAx
NC0wNC0xNyAgQnJpYW4gSi4gQnVyZyAgPGJ1cmdAY3Mud2FzaGluZ3Rvbi5lZHU+CisKKyAgICAg
ICAgV2ViIEluc3BlY3RvcjogcmV3cml0ZSBDb2RlR2VuZXJhdG9ySW5zcGVjdG9yIHRvIGJlIG1v
ZHVsYXIgYW5kIHRlc3RhYmxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMzE1OTYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIFNjcmlwdHMvcnVuLWluc3BlY3Rvci1nZW5lcmF0b3ItdGVzdHM6IEFkZGVk
LgorICAgICAgICAobWFpbik6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9pbnNwZWN0b3Iv
X19pbml0X18ucHk6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvaW5zcGVjdG9y
L21haW4ucHk6IEFkZGVkLgorICAgICAgICAoSW5zcGVjdG9yR2VuZXJhdG9yVGVzdHMpOgorICAg
ICAgICAoSW5zcGVjdG9yR2VuZXJhdG9yVGVzdHMuX19pbml0X18pOgorICAgICAgICAoSW5zcGVj
dG9yR2VuZXJhdG9yVGVzdHMuZ2VuZXJhdGVfZnJvbV9qc29uKToKKyAgICAgICAgKEluc3BlY3Rv
ckdlbmVyYXRvclRlc3RzLndyaXRlX2Vycm9yX2ZpbGUpOgorICAgICAgICAoSW5zcGVjdG9yR2Vu
ZXJhdG9yVGVzdHMuZGV0ZWN0X2NoYW5nZXMpOgorICAgICAgICAoSW5zcGVjdG9yR2VuZXJhdG9y
VGVzdHMucnVuX3Rlc3RzKToKKyAgICAgICAgKEluc3BlY3RvckdlbmVyYXRvclRlc3RzLm1haW4p
OgorCiAyMDE0LTA0LTIwICBEYW4gQmVybnN0ZWluICA8bWl0ekBhcHBsZS5jb20+CiAKICAgICAg
ICAgRml4ZWQgYSB0ZXN0IHRpbWluZyBvdXQgYWZ0ZXIgcjE2NzU3Mi4KZGlmZiAtLWdpdCBhL1Rv
b2xzL1NjcmlwdHMvcnVuLWluc3BlY3Rvci1nZW5lcmF0b3ItdGVzdHMgYi9Ub29scy9TY3JpcHRz
L3J1bi1pbnNwZWN0b3ItZ2VuZXJhdG9yLXRlc3RzCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFhYWIxODAwYmNhNmY3
ZThhMzQ5NmU1OTE4NDIxZWVhZTJkMzhkODIKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3Jp
cHRzL3J1bi1pbnNwZWN0b3ItZ2VuZXJhdG9yLXRlc3RzCkBAIC0wLDAgKzEsNDIgQEAKKyMhL3Vz
ci9iaW4vZW52IHB5dGhvbgorIyBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6Cisj
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisjIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKwor
aW1wb3J0IHN5cworZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtIGltcG9ydCBleGVjdXRpdmUK
KworZGVmIG1haW4oYXJndik6CisgICAgIiIiUnVucyByZXBsYXkgaW5wdXQgY29kZSBnZW5lcmF0
b3Igb24gdGVzdCBzcGVjaWZpY2F0aW9uIGZpbGVzIGFuZCBjb21wYXJlcworICAgIHRoZSByZXN1
bHRzIHdpdGggcmVmZXJlbmNlIGZpbGVzLgorCisgICAgT3B0aW9uczoKKyAgICAgICAtLXJlc2V0
LXJlc3VsdHM6IE92ZXJ3cml0ZXMgdGhlIHJlZmVyZW5jZSBmaWxlcyB3aXRoIHRoZSBnZW5lcmF0
ZWQgcmVzdWx0cy4KKworICAgICIiIgorICAgIHJlc2V0X3Jlc3VsdHMgPSAiLS1yZXNldC1yZXN1
bHRzIiBpbiBhcmd2CisKKyAgICBmcm9tIHdlYmtpdHB5Lmluc3BlY3Rvci5tYWluIGltcG9ydCBJ
bnNwZWN0b3JHZW5lcmF0b3JUZXN0cworICAgIHJldHVybiBJbnNwZWN0b3JHZW5lcmF0b3JUZXN0
cyhyZXNldF9yZXN1bHRzLCBleGVjdXRpdmUuRXhlY3V0aXZlKCkpLm1haW4oKQorCitpZiBfX25h
bWVfXyA9PSAnX19tYWluX18nOgorICAgIHN5cy5leGl0KG1haW4oc3lzLmFyZ3YpKQpkaWZmIC0t
Z2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9pbnNwZWN0b3IvX19pbml0X18ucHkgYi9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L2luc3BlY3Rvci9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lZjY1
YmVlNWJiNzdlOTZlYmM3Y2Q5YzQ3NjQwNjkwZmJkYThhYzE5Ci0tLSAvZGV2L251bGwKKysrIGIv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9pbnNwZWN0b3IvX19pbml0X18ucHkKQEAgLTAsMCArMSBA
QAorIyBSZXF1aXJlZCBmb3IgUHl0aG9uIHRvIHNlYXJjaCB0aGlzIGRpcmVjdG9yeSBmb3IgbW9k
dWxlIGZpbGVzCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2luc3BlY3Rvci9t
YWluLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9pbnNwZWN0b3IvbWFpbi5weQpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi40ZDViMWU0M2IwMDJjNTNhOTBhOTViY2NjZjYzZjQyYTVmMTMyNDUyCi0tLSAvZGV2L251
bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9pbnNwZWN0b3IvbWFpbi5weQpAQCAtMCww
ICsxLDEzNCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIworIyAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUworIyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKKyMgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBCisjIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAorIyBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorCitpbXBvcnQgb3MKK2ltcG9ydCBvcy5wYXRoCitpbXBvcnQgc2h1dGlsCitpbXBv
cnQgc3lzCitpbXBvcnQgdGVtcGZpbGUKK2Zyb20gd2Via2l0cHkuY29tbW9uLmNoZWNrb3V0LnNj
bS5kZXRlY3Rpb24gaW1wb3J0IGRldGVjdF9zY21fc3lzdGVtCitmcm9tIHdlYmtpdHB5LmNvbW1v
bi5zeXN0ZW0uZXhlY3V0aXZlIGltcG9ydCBTY3JpcHRFcnJvcgorCisKK2NsYXNzIEluc3BlY3Rv
ckdlbmVyYXRvclRlc3RzOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJlc2V0X3Jlc3VsdHMs
IGV4ZWN1dGl2ZSk6CisgICAgICAgIHNlbGYucmVzZXRfcmVzdWx0cyA9IHJlc2V0X3Jlc3VsdHMK
KyAgICAgICAgc2VsZi5leGVjdXRpdmUgPSBleGVjdXRpdmUKKworICAgIGRlZiBnZW5lcmF0ZV9m
cm9tX2pzb24oc2VsZiwganNvbl9maWxlLCBvdXRwdXRfZGlyZWN0b3J5KToKKyAgICAgICAgY21k
ID0gWydweXRob24nLAorICAgICAgICAgICAgICAgJ0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IyLnB5JywKKyAgICAgICAgICAgICAgICctLW91
dHB1dERpcicsIG91dHB1dF9kaXJlY3RvcnksCisgICAgICAgICAgICAgICAnLS1mb3JjZScsCisg
ICAgICAgICAgICAgICAnLS1mcmFtZXdvcmsnLCAnVGVzdCcsCisgICAgICAgICAgICAgICAnLS10
ZXN0JywKKyAgICAgICAgICAgICAgIGpzb25fZmlsZV0KKworICAgICAgICBleGl0X2NvZGUgPSAw
CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHN0ZGVycl9vdXRwdXQgPSBzZWxmLmV4ZWN1dGl2
ZS5ydW5fY29tbWFuZChjbWQpCisgICAgICAgICAgICBpZiBzdGRlcnJfb3V0cHV0OgorICAgICAg
ICAgICAgICAgIHNlbGYud3JpdGVfZXJyb3JfZmlsZShqc29uX2ZpbGUsIG91dHB1dF9kaXJlY3Rv
cnksIHN0ZGVycl9vdXRwdXQpCisgICAgICAgIGV4Y2VwdCBTY3JpcHRFcnJvciwgZToKKyAgICAg
ICAgICAgIHByaW50IGUub3V0cHV0CisgICAgICAgICAgICBleGl0X2NvZGUgPSBlLmV4aXRfY29k
ZQorICAgICAgICByZXR1cm4gZXhpdF9jb2RlCisKKyAgICBkZWYgd3JpdGVfZXJyb3JfZmlsZShz
ZWxmLCBpbnB1dF9maWxlcGF0aCwgb3V0cHV0X2RpcmVjdG9yeSwgZXJyb3Jfb3V0cHV0KToKKyAg
ICAgICAgb3V0cHV0X2ZpbGVwYXRoID0gb3MucGF0aC5qb2luKG91dHB1dF9kaXJlY3RvcnksIG9z
LnBhdGguYmFzZW5hbWUoaW5wdXRfZmlsZXBhdGgpICsgJy1lcnJvcicpCisKKyAgICAgICAgd2l0
aCBvcGVuKG91dHB1dF9maWxlcGF0aCwgInciKSBhcyBvdXRwdXRfZmlsZToKKyAgICAgICAgICAg
IG91dHB1dF9maWxlLndyaXRlKGVycm9yX291dHB1dCkKKworICAgIGRlZiBkZXRlY3RfY2hhbmdl
cyhzZWxmLCB3b3JrX2RpcmVjdG9yeSwgcmVmZXJlbmNlX2RpcmVjdG9yeSk6CisgICAgICAgIGNo
YW5nZXNfZm91bmQgPSBGYWxzZQorICAgICAgICBmb3Igb3V0cHV0X2ZpbGUgaW4gb3MubGlzdGRp
cih3b3JrX2RpcmVjdG9yeSk6CisgICAgICAgICAgICBjbWQgPSBbJ2RpZmYnLAorICAgICAgICAg
ICAgICAgICAgICctdScsCisgICAgICAgICAgICAgICAgICAgJy1OJywKKyAgICAgICAgICAgICAg
ICAgICBvcy5wYXRoLmpvaW4ocmVmZXJlbmNlX2RpcmVjdG9yeSwgb3V0cHV0X2ZpbGUpLAorICAg
ICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbih3b3JrX2RpcmVjdG9yeSwgb3V0cHV0X2ZpbGUp
XQorCisgICAgICAgICAgICBleGl0X2NvZGUgPSAwCisgICAgICAgICAgICB0cnk6CisgICAgICAg
ICAgICAgICAgb3V0cHV0ID0gc2VsZi5leGVjdXRpdmUucnVuX2NvbW1hbmQoY21kKQorICAgICAg
ICAgICAgZXhjZXB0IFNjcmlwdEVycm9yLCBlOgorICAgICAgICAgICAgICAgIG91dHB1dCA9IGUu
b3V0cHV0CisgICAgICAgICAgICAgICAgZXhpdF9jb2RlID0gZS5leGl0X2NvZGUKKworICAgICAg
ICAgICAgaWYgZXhpdF9jb2RlIG9yIG91dHB1dDoKKyAgICAgICAgICAgICAgICBwcmludCAnRkFJ
TDogJXMnICUgb3V0cHV0X2ZpbGUKKyAgICAgICAgICAgICAgICBwcmludCBvdXRwdXQKKyAgICAg
ICAgICAgICAgICBjaGFuZ2VzX2ZvdW5kID0gVHJ1ZQorICAgICAgICAgICAgZWxzZToKKyAgICAg
ICAgICAgICAgICBwcmludCAnUEFTUzogJXMnICUgb3V0cHV0X2ZpbGUKKyAgICAgICAgcmV0dXJu
IGNoYW5nZXNfZm91bmQKKworICAgIGRlZiBydW5fdGVzdHMoc2VsZiwgaW5wdXRfZGlyZWN0b3J5
LCByZWZlcmVuY2VfZGlyZWN0b3J5KToKKyAgICAgICAgd29ya19kaXJlY3RvcnkgPSByZWZlcmVu
Y2VfZGlyZWN0b3J5CisKKyAgICAgICAgcGFzc2VkID0gVHJ1ZQorICAgICAgICBmb3IgaW5wdXRf
ZmlsZSBpbiBvcy5saXN0ZGlyKGlucHV0X2RpcmVjdG9yeSk6CisgICAgICAgICAgICAobmFtZSwg
ZXh0ZW5zaW9uKSA9IG9zLnBhdGguc3BsaXRleHQoaW5wdXRfZmlsZSkKKyAgICAgICAgICAgIGlm
IGV4dGVuc2lvbiAhPSAnLmpzb24nOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAg
ICAgICAjIEdlbmVyYXRlIG91dHB1dCBpbnRvIHRoZSB3b3JrIGRpcmVjdG9yeSAoZWl0aGVyIHRo
ZSBnaXZlbiBvbmUgb3IgYQorICAgICAgICAgICAgIyB0ZW1wIG9uZSBpZiBub3QgcmVzZXRfcmVz
dWx0cyBpcyBwZXJmb3JtZWQpCisgICAgICAgICAgICBpZiBub3Qgc2VsZi5yZXNldF9yZXN1bHRz
OgorICAgICAgICAgICAgICAgIHdvcmtfZGlyZWN0b3J5ID0gdGVtcGZpbGUubWtkdGVtcCgpCisK
KyAgICAgICAgICAgIGlmIHNlbGYuZ2VuZXJhdGVfZnJvbV9qc29uKG9zLnBhdGguam9pbihpbnB1
dF9kaXJlY3RvcnksIGlucHV0X2ZpbGUpLCB3b3JrX2RpcmVjdG9yeSk6CisgICAgICAgICAgICAg
ICAgcGFzc2VkID0gRmFsc2UKKworICAgICAgICAgICAgaWYgc2VsZi5yZXNldF9yZXN1bHRzOgor
ICAgICAgICAgICAgICAgIHByaW50ICJSZXNldCByZXN1bHRzIGZvciB0ZXN0OiAlcyIgJSAoaW5w
dXRfZmlsZSkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAjIERldGVj
dCBjaGFuZ2VzCisgICAgICAgICAgICBpZiBzZWxmLmRldGVjdF9jaGFuZ2VzKHdvcmtfZGlyZWN0
b3J5LCByZWZlcmVuY2VfZGlyZWN0b3J5KToKKyAgICAgICAgICAgICAgICBwYXNzZWQgPSBGYWxz
ZQorICAgICAgICAgICAgc2h1dGlsLnJtdHJlZSh3b3JrX2RpcmVjdG9yeSkKKworICAgICAgICBy
ZXR1cm4gcGFzc2VkCisKKyAgICBkZWYgbWFpbihzZWxmKToKKyAgICAgICAgY3VycmVudF9zY20g
PSBkZXRlY3Rfc2NtX3N5c3RlbShvcy5jdXJkaXIpCisgICAgICAgIG9zLmNoZGlyKG9zLnBhdGgu
am9pbihjdXJyZW50X3NjbS5jaGVja291dF9yb290LCAnU291cmNlJykpCisKKyAgICAgICAgYWxs
X3Rlc3RzX3Bhc3NlZCA9IFRydWUKKworICAgICAgICBpbnB1dF9kaXJlY3RvcnkgPSBvcy5wYXRo
LmpvaW4oJ0phdmFTY3JpcHRDb3JlJywgJ2luc3BlY3RvcicsICdzY3JpcHRzJywgJ3Rlc3RzJykK
KyAgICAgICAgcmVmZXJlbmNlX2RpcmVjdG9yeSA9IG9zLnBhdGguam9pbignSmF2YVNjcmlwdENv
cmUnLCAnaW5zcGVjdG9yJywgJ3NjcmlwdHMnLCAndGVzdHMnLCAnZXhwZWN0ZWQnKQorICAgICAg
ICBpZiBub3Qgc2VsZi5ydW5fdGVzdHMoaW5wdXRfZGlyZWN0b3J5LCByZWZlcmVuY2VfZGlyZWN0
b3J5KToKKyAgICAgICAgICAgIGFsbF90ZXN0c19wYXNzZWQgPSBGYWxzZQorCisgICAgICAgIHBy
aW50ICcnCisgICAgICAgIGlmIGFsbF90ZXN0c19wYXNzZWQ6CisgICAgICAgICAgICBwcmludCAn
QWxsIHRlc3RzIFBBU1MhJworICAgICAgICAgICAgcmV0dXJuIDAKKyAgICAgICAgZWxzZToKKyAg
ICAgICAgICAgIHByaW50ICdTb21lIHRlc3RzIEZBSUwhIChUbyB1cGRhdGUgdGhlIHJlZmVyZW5j
ZSBmaWxlcywgZXhlY3V0ZSAicnVuLWluc3BlY3Rvci1nZW5lcmF0b3ItdGVzdHMgLS1yZXNldC1y
ZXN1bHRzIiknCisgICAgICAgICAgICByZXR1cm4gLTEK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>232019</attachid>
            <date>2014-05-24 10:45:58 -0700</date>
            <delta_ts>2014-05-24 13:02:18 -0700</delta_ts>
            <desc>patch, with windows fixes</desc>
            <filename>bug-131596-20140524104533.patch</filename>
            <type>text/plain</type>
            <size>627250</size>
            <attacher name="Brian Burg">burg</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTY5Mjk3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBk
NDg4OGRiY2QzNGU3NWUwZTZlYjE1MTNjN2MwNDMxM2NjZmJiNTgyLi44MjY0MmQwOWNhNmFiZWNm
MjAyNzNiYzcyZmI3NTZmMDEyNDFmODNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNzUgQEAKKzIwMTQtMDQtMTcgIEJyaWFuIEouIEJ1cmcgIDxidXJnQGNzLndhc2hpbmd0
b24uZWR1PgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IHJld3JpdGUgQ29kZUdlbmVyYXRvcklu
c3BlY3RvciB0byBiZSBtb2R1bGFyIGFuZCB0ZXN0YWJsZQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMxNTk2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9Db2RlR2VuZXJh
dG9ySW5zcGVjdG9yMi5weTogQWRkZWQuCisgICAgICAgIChnZW5lcmF0ZV9mcm9tX3NwZWNpZmlj
YXRpb24pOgorICAgICAgICAoZ2VuZXJhdGVfZnJvbV9zcGVjaWZpY2F0aW9uLmxvYWRfc3BlY2lm
aWNhdGlvbik6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9fX2luaXRfXy5w
eTogQWRkZWQuCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9i
YWNrZW5kX2NvbW1hbmRzLnB5OiBBZGRlZC4KKyAgICAgICAgKG1ha2VfamF2YXNjcmlwdF9pZGVu
dGlmaWVyKToKKyAgICAgICAgKG1ha2VfamF2YXNjcmlwdF9pZGVudGlmaWVyLnJlcGxhY2VDYWxs
YmFjayk6CisgICAgICAgIChCYWNrZW5kQ29tbWFuZHNHZW5lcmF0b3IpOgorICAgICAgICAoQmFj
a2VuZENvbW1hbmRzR2VuZXJhdG9yLl9faW5pdF9fKToKKyAgICAgICAgKEJhY2tlbmRDb21tYW5k
c0dlbmVyYXRvci5tb2RlbCk6CisgICAgICAgIChCYWNrZW5kQ29tbWFuZHNHZW5lcmF0b3Iub3V0
cHV0X2ZpbGVuYW1lKToKKyAgICAgICAgKEJhY2tlbmRDb21tYW5kc0dlbmVyYXRvci53cml0ZV9v
dXRwdXRfZmlsZXMpOgorICAgICAgICAoQmFja2VuZENvbW1hbmRzR2VuZXJhdG9yLmdlbmVyYXRl
X2xpY2Vuc2UpOgorICAgICAgICAoQmFja2VuZENvbW1hbmRzR2VuZXJhdG9yLmdlbmVyYXRlX2Jh
Y2tlbmRfY29tbWFuZHMpOgorICAgICAgICAoQmFja2VuZENvbW1hbmRzR2VuZXJhdG9yLmdlbmVy
YXRlX2RvbWFpbik6CisgICAgICAgIChCYWNrZW5kQ29tbWFuZHNHZW5lcmF0b3IuZ2VuZXJhdGVf
ZG9tYWluLmdlbmVyYXRlX3BhcmFtZXRlcl9vYmplY3QpOgorICAgICAgICAqIGluc3BlY3Rvci9z
Y3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weTogQWRk
ZWQuCisgICAgICAgICh1Y2ZpcnN0KToKKyAgICAgICAgKEJhY2tlbmREaXNwYXRjaGVySGVhZGVy
R2VuZXJhdG9yKToKKyAgICAgICAgKEJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yLl9f
aW5pdF9fKToKKyAgICAgICAgKEJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yLm1vZGVs
KToKKyAgICAgICAgKEJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yLm91dHB1dF9maWxl
bmFtZSk6CisgICAgICAgIChCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvci53cml0ZV9v
dXRwdXRfZmlsZXMpOgorICAgICAgICAoQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3Iu
Z2VuZXJhdGVfbGljZW5zZSk6CisgICAgICAgIChCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVy
YXRvci5nZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXIpOgorICAgICAgICAoQmFja2VuZERpc3Bh
dGNoZXJIZWFkZXJHZW5lcmF0b3IuZ2VuZXJhdGVfYmFja2VuZF9kaXNwYXRjaGVyLnNob3VsZF9n
ZW5lcmF0ZV9kb21haW4pOgorICAgICAgICAoQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0
b3IuZ2VuZXJhdGVfZG9tYWluX2hhbmRsZXIpOgorICAgICAgICAoQmFja2VuZERpc3BhdGNoZXJI
ZWFkZXJHZW5lcmF0b3IuZ2VuZXJhdGVfaGFuZGxlcl9jb21tYW5kKToKKyAgICAgICAgKEJhY2tl
bmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yLmdlbmVyYXRlX2FzeW5jX2hhbmRsZXJfY29tbWFu
ZCk6CisgICAgICAgIChCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvci5nZW5lcmF0ZV9k
b21haW5fZGlzcGF0Y2hlcik6CisgICAgICAgIChCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVy
YXRvci5nZW5lcmF0ZV9kaXNwYXRjaGVyX2NvbW1hbmQpOgorICAgICAgICAqIGluc3BlY3Rvci9z
Y3JpcHRzL2NvZGVnZW4vZ2VuZXJhdG9yLnB5OiBBZGRlZC4KKyAgICAgICAgKEdlbmVyYXRvcik6
CisgICAgICAgIChHZW5lcmF0b3IuX19pbml0X18pOgorICAgICAgICAoR2VuZXJhdG9yLm1vZGVs
KToKKyAgICAgICAgKEdlbmVyYXRvci53cml0ZV9vdXRwdXRfZmlsZXMpOgorICAgICAgICAoR2Vu
ZXJhdG9yLmNwcF9ndWFyZF9mb3JfZG9tYWluKToKKyAgICAgICAgKER1bW15R2VuZXJhdG9yKToK
KyAgICAgICAgKEluY3JlbWVudGFsRmlsZVdyaXRlcik6CisgICAgICAgIChJbmNyZW1lbnRhbEZp
bGVXcml0ZXIuX19pbml0X18pOgorICAgICAgICAoSW5jcmVtZW50YWxGaWxlV3JpdGVyLndyaXRl
KToKKyAgICAgICAgKEluY3JlbWVudGFsRmlsZVdyaXRlci5jbG9zZSk6CisgICAgICAgICogaW5z
cGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0b3JfdGVtcGxhdGVzLnB5OiBBZGRlZC4KKyAg
ICAgICAgKEdlbmVyYXRvclRlbXBsYXRlcyk6CisgICAgICAgIChTdHJpbmcpOgorICAgICAgICAq
IGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vbW9kZWxzLnB5OiBBZGRlZC4KKyAgICAgICAgKFBh
cnNlRXhjZXB0aW9uKToKKyAgICAgICAgKFR5cGVjaGVja0V4Y2VwdGlvbik6CisgICAgICAgIChG
cmFtZXdvcmspOgorICAgICAgICAoRnJhbWV3b3JrLl9faW5pdF9fKToKKyAgICAgICAgKEZyYW1l
d29yay5zZXR0aW5nKToKKyAgICAgICAgKEZyYW1ld29yay5mcm9tU3RyaW5nKToKKyAgICAgICAg
KEZyYW1ld29ya3MpOgorICAgICAgICAoVHlwZU1vZGUpOgorICAgICAgICAoVHlwZU1vZGUuX19p
bml0X18pOgorICAgICAgICAoVHlwZU1vZGUuZnJvbVN0cmluZyk6CisgICAgICAgIChUeXBlTW9k
ZXMpOgorICAgICAgICAoVHlwZVJlZmVyZW5jZSk6CisgICAgICAgIChUeXBlUmVmZXJlbmNlLl9f
aW5pdF9fKToKKyAgICAgICAgKFR5cGVSZWZlcmVuY2UucmVmZXJlbmNlZF9uYW1lKToKKyAgICAg
ICAgKFR5cGUpOgorICAgICAgICAoVHlwZS5fX2luaXRfXyk6CisgICAgICAgIChUeXBlLl9fZXFf
Xyk6CisgICAgICAgIChUeXBlLl9faGFzaF9fKToKKyAgICAgICAgKFR5cGUuaXNfZW51bSk6Cisg
ICAgICAgIChUeXBlLnR5cGVfZG9tYWluKToKKyAgICAgICAgKFR5cGUudHlwZV9tb2RlKToKKyAg
ICAgICAgKFR5cGUucXVhbGlmaWVkX25hbWUpOgorICAgICAgICAoVHlwZS5yZXNvbHZlX3R5cGVf
cmVmZXJlbmNlcyk6CisgICAgICAgIChUeXBlLmluX3BhcmFtZXRlcl90eXBlKToKKyAgICAgICAg
KFR5cGUub3V0X3BhcmFtZXRlcl90eXBlKToKKyAgICAgICAgKFR5cGUudHlwZV9idWlsZGVyX3R5
cGUpOgorICAgICAgICAoT2JqZWN0VHlwZSk6CisgICAgICAgIChPYmplY3RUeXBlLl9faW5pdF9f
KToKKyAgICAgICAgKE9iamVjdFR5cGUudHlwZV9kb21haW4pOgorICAgICAgICAoT2JqZWN0VHlw
ZS50eXBlX21vZGUpOgorICAgICAgICAoT2JqZWN0VHlwZS5xdWFsaWZpZWRfbmFtZSk6CisgICAg
ICAgIChPYmplY3RUeXBlLnJlc29sdmVfdHlwZV9yZWZlcmVuY2VzKToKKyAgICAgICAgKE9iamVj
dFR5cGUuaW5fcGFyYW1ldGVyX3R5cGUpOgorICAgICAgICAoT2JqZWN0VHlwZS5vdXRfcGFyYW1l
dGVyX3R5cGUpOgorICAgICAgICAoT2JqZWN0VHlwZS50eXBlX2J1aWxkZXJfdHlwZSk6CisgICAg
ICAgIChQcmltaXRpdmVUeXBlKToKKyAgICAgICAgKFByaW1pdGl2ZVR5cGUuX19pbml0X18pOgor
ICAgICAgICAoUHJpbWl0aXZlVHlwZS50eXBlX2RvbWFpbik6CisgICAgICAgIChQcmltaXRpdmVU
eXBlLnR5cGVfbW9kZSk6CisgICAgICAgIChQcmltaXRpdmVUeXBlLnF1YWxpZmllZF9uYW1lKToK
KyAgICAgICAgKFByaW1pdGl2ZVR5cGUuaW5fcGFyYW1ldGVyX3R5cGUpOgorICAgICAgICAoUHJp
bWl0aXZlVHlwZS5vdXRfcGFyYW1ldGVyX3R5cGUpOgorICAgICAgICAoUHJpbWl0aXZlVHlwZS50
eXBlX2J1aWxkZXJfdHlwZSk6CisgICAgICAgIChQcmltaXRpdmVUeXBlLmNwcF9wcmltaXRpdmVf
bmFtZSk6CisgICAgICAgIChBbGlhc2VkVHlwZSk6CisgICAgICAgIChBbGlhc2VkVHlwZS5fX2lu
aXRfXyk6CisgICAgICAgIChBbGlhc2VkVHlwZS50eXBlX2RvbWFpbik6CisgICAgICAgIChBbGlh
c2VkVHlwZS50eXBlX21vZGUpOgorICAgICAgICAoQWxpYXNlZFR5cGUucXVhbGlmaWVkX25hbWUp
OgorICAgICAgICAoQWxpYXNlZFR5cGUucmVzb2x2ZV90eXBlX3JlZmVyZW5jZXMpOgorICAgICAg
ICAoQWxpYXNlZFR5cGUuaW5fcGFyYW1ldGVyX3R5cGUpOgorICAgICAgICAoQWxpYXNlZFR5cGUu
b3V0X3BhcmFtZXRlcl90eXBlKToKKyAgICAgICAgKEFsaWFzZWRUeXBlLnR5cGVfYnVpbGRlcl90
eXBlKToKKyAgICAgICAgKEVudW1UeXBlKToKKyAgICAgICAgKEVudW1UeXBlLl9faW5pdF9fKToK
KyAgICAgICAgKEVudW1UeXBlLmlzX2VudW0pOgorICAgICAgICAoRW51bVR5cGUudHlwZV9kb21h
aW4pOgorICAgICAgICAoRW51bVR5cGUudHlwZV9tb2RlKToKKyAgICAgICAgKEVudW1UeXBlLmVu
dW1fdmFsdWVzKToKKyAgICAgICAgKEVudW1UeXBlLnF1YWxpZmllZF9uYW1lKToKKyAgICAgICAg
KEVudW1UeXBlLnJlc29sdmVfdHlwZV9yZWZlcmVuY2VzKToKKyAgICAgICAgKEVudW1UeXBlLmlu
X3BhcmFtZXRlcl90eXBlKToKKyAgICAgICAgKEVudW1UeXBlLm91dF9wYXJhbWV0ZXJfdHlwZSk6
CisgICAgICAgIChFbnVtVHlwZS50eXBlX2J1aWxkZXJfdHlwZSk6CisgICAgICAgIChWZWN0b3JU
eXBlKToKKyAgICAgICAgKFZlY3RvclR5cGUuX19pbml0X18pOgorICAgICAgICAoVmVjdG9yVHlw
ZS50eXBlX2RvbWFpbik6CisgICAgICAgIChWZWN0b3JUeXBlLnR5cGVfbW9kZSk6CisgICAgICAg
IChWZWN0b3JUeXBlLnF1YWxpZmllZF9uYW1lKToKKyAgICAgICAgKFZlY3RvclR5cGUucmVzb2x2
ZV90eXBlX3JlZmVyZW5jZXMpOgorICAgICAgICAoVmVjdG9yVHlwZS5pbl9wYXJhbWV0ZXJfdHlw
ZSk6CisgICAgICAgIChWZWN0b3JUeXBlLm91dF9wYXJhbWV0ZXJfdHlwZSk6CisgICAgICAgIChW
ZWN0b3JUeXBlLnR5cGVfYnVpbGRlcl90eXBlKToKKyAgICAgICAgKGNoZWNrX2Zvcl9yZXF1aXJl
ZF9wcm9wZXJ0aWVzKToKKyAgICAgICAgKFByb3RvY29sKToKKyAgICAgICAgKFByb3RvY29sLl9f
aW5pdF9fKToKKyAgICAgICAgKFByb3RvY29sLnBhcnNlX3NwZWNpZmljYXRpb24pOgorICAgICAg
ICAoUHJvdG9jb2wucGFyc2VfZG9tYWluKToKKyAgICAgICAgKFByb3RvY29sLnBhcnNlX3R5cGVf
ZGVjbGFyYXRpb24pOgorICAgICAgICAoUHJvdG9jb2wucGFyc2VfdHlwZV9tZW1iZXIpOgorICAg
ICAgICAoUHJvdG9jb2wucGFyc2VfY29tbWFuZCk6CisgICAgICAgIChQcm90b2NvbC5wYXJzZV9l
dmVudCk6CisgICAgICAgIChQcm90b2NvbC5wYXJzZV9wYXJhbWV0ZXIpOgorICAgICAgICAoUHJv
dG9jb2wucmVzb2x2ZV90eXBlcyk6CisgICAgICAgIChQcm90b2NvbC5sb29rdXBfdHlwZV9mb3Jf
ZGVjbGFyYXRpb24pOgorICAgICAgICAoUHJvdG9jb2wubG9va3VwX3R5cGVfcmVmZXJlbmNlKToK
KyAgICAgICAgKERvbWFpbik6CisgICAgICAgIChEb21haW4uX19pbml0X18pOgorICAgICAgICAo
RG9tYWluLnJlc29sdmVfdHlwZV9yZWZlcmVuY2VzKToKKyAgICAgICAgKERvbWFpbnMpOgorICAg
ICAgICAoVHlwZURlY2xhcmF0aW9uKToKKyAgICAgICAgKFR5cGVEZWNsYXJhdGlvbi5fX2luaXRf
Xyk6CisgICAgICAgIChUeXBlRGVjbGFyYXRpb24ucmVzb2x2ZV90eXBlX3JlZmVyZW5jZXMpOgor
ICAgICAgICAoVHlwZU1lbWJlcik6CisgICAgICAgIChUeXBlTWVtYmVyLl9faW5pdF9fKToKKyAg
ICAgICAgKFR5cGVNZW1iZXIucmVzb2x2ZV90eXBlX3JlZmVyZW5jZXMpOgorICAgICAgICAoUGFy
YW1ldGVyKToKKyAgICAgICAgKFBhcmFtZXRlci5fX2luaXRfXyk6CisgICAgICAgIChQYXJhbWV0
ZXIucmVzb2x2ZV90eXBlX3JlZmVyZW5jZXMpOgorICAgICAgICAoQ29tbWFuZCk6CisgICAgICAg
IChDb21tYW5kLl9faW5pdF9fKToKKyAgICAgICAgKENvbW1hbmQucmVzb2x2ZV90eXBlX3JlZmVy
ZW5jZXMpOgorICAgICAgICAoRXZlbnQpOgorICAgICAgICAoRXZlbnQuX19pbml0X18pOgorICAg
ICAgICAoRXZlbnQucmVzb2x2ZV90eXBlX3JlZmVyZW5jZXMpOgorICAgICAgICAqIGluc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tZHVwbGljYXRlLXR5cGUtZGVjbGFyYXRp
b25zLmpzb24tZXJyb3I6IEFkZGVkLgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2V4cGVjdGVkL2ZhaWwtb24tdHlwZS1kZWNsYXJhdGlvbi11c2luZy10eXBlLXJlZmVyZW5jZS5q
c29uLWVycm9yOiBBZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBl
Y3RlZC9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1kZWNsYXJhdGlvbi5q
c29uLWVycm9yOiBBZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBl
Y3RlZC9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1tZW1iZXIuanNvbi1l
cnJvcjogQWRkZWQuCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQv
c2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbi1lcnJvcjogQWRkZWQuCisgICAgICAg
ICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1kdXBsaWNhdGUtdHlwZS1kZWNsYXJh
dGlvbnMuanNvbjogQWRkZWQuCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFp
bC1vbi10eXBlLWRlY2xhcmF0aW9uLXVzaW5nLXR5cGUtcmVmZXJlbmNlLmpzb246IEFkZGVkLgor
ICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tdW5rbm93bi10eXBlLXJl
ZmVyZW5jZS1pbi10eXBlLWRlY2xhcmF0aW9uLmpzb246IEFkZGVkLgorICAgICAgICAqIGluc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVyZW5jZS1pbi10eXBl
LW1lbWJlci5qc29uOiBBZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9z
YW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uOiBBZGRlZC4KKyAgICAgICAgKiBpbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy90eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5
cGUuanNvbjogQWRkZWQuCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvdHlwZS1k
ZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb246IEFkZGVkLgorICAgICAgICAqIGluc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL3R5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb246IEFkZGVkLgorCiAy
MDE0LTA1LTIzICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CiAKICAg
ICAgICAgUmVtb3ZlIG9wZXJhdGlvbkNhbGxHZXR0ZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0Rl
cml2ZWRTb3VyY2VzLm1ha2UKaW5kZXggNjEwZGMxMmIwZmUxOTU1YjQ4NjdjMDkyMWEwODgwMDgw
ZDAxM2UzMy4uZDBkOTUxMmVhNjg1NTg0ZGFiOGVmMjdkZGQyMjVjYTJhMzNjZmIyOSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKQEAgLTEyMiw4ICsxMjIsMTkg
QEAgSU5TUEVDVE9SX0RPTUFJTlMgPSBcCiAjCiAKIElOU1BFQ1RPUl9HRU5FUkFUT1JfU0NSSVBU
UyA9IFwKLQkkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3Ivc2NyaXB0cy9Db2RlR2VuZXJhdG9y
SW5zcGVjdG9yLnB5IFwKLQkkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3Ivc2NyaXB0cy9Db2Rl
R2VuZXJhdG9ySW5zcGVjdG9yU3RyaW5ncy5weSBcCisJJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVj
dG9yL3NjcmlwdHMvY29kZWdlbi9fX2luaXRfXy5weSBcCisJJChKYXZhU2NyaXB0Q29yZSkvaW5z
cGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9iYWNrZW5kX2NvbW1hbmRzLnB5IFwKKwkk
KEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2JhY2tl
bmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkgXAorCSQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9z
Y3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9u
LnB5IFwKKwkkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVy
YXRlX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5IFwKKwkkKEphdmFTY3JpcHRDb3JlKS9p
bnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1w
bGVtZW50YXRpb24ucHkgXAorCSQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9zY3JpcHRzL2Nv
ZGVnZW4vZ2VuZXJhdGVfdHlwZV9idWlsZGVyX2hlYWRlci5weSBcCisJJChKYXZhU2NyaXB0Q29y
ZSkvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV90eXBlX2J1aWxkZXJfaW1wbGVt
ZW50YXRpb24ucHkgXAorCSQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVn
ZW4vZ2VuZXJhdG9yX3RlbXBsYXRlcy5weSBcCisJJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9y
L3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0b3IucHkgXAorCSQoSmF2YVNjcmlwdENvcmUpL2luc3Bl
Y3Rvci9zY3JpcHRzL2NvZGVnZW4vbW9kZWxzLnB5IFwKKwkkKEphdmFTY3JpcHRDb3JlKS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1jb21iaW5lZC1pbnNwZWN0b3ItanNvbi5weSBcCisJJChK
YXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5IFwKICMKIAogYWxsIDogXApAQCAtMTQ0LDcgKzE1NSw3IEBAIEluc3Bl
Y3RvckpTLmpzb24gOiBpbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1jb21iaW5lZC1pbnNwZWN0
b3ItanNvbi5weSAkKElOU1BFCiAKICMgSW5zcGVjdG9yIEJhY2tlbmQgRGlzcGF0Y2hlcnMsIEZy
b250ZW5kIERpc3BhdGNoZXJzLCBUeXBlIEJ1aWxkZXJzCiBJbnNwZWN0b3JKU0Zyb250ZW5kRGlz
cGF0Y2hlcnMuaCA6IEluc3BlY3RvckpTLmpzb24gJChJTlNQRUNUT1JfR0VORVJBVE9SX1NDUklQ
VFMpCi0JJChQWVRIT04pICQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9zY3JpcHRzL0NvZGVH
ZW5lcmF0b3JJbnNwZWN0b3IucHkgLi9JbnNwZWN0b3JKUy5qc29uIC0tb3V0cHV0X2hfZGlyIC4g
LS1vdXRwdXRfY3BwX2RpciAuIC0tb3V0cHV0X2pzX2RpciAuIC0tb3V0cHV0X3R5cGUgSmF2YVNj
cmlwdAorCSQoUFlUSE9OKSAkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkgLS1mcmFtZXdvcmsgSmF2YVNjcmlw
dENvcmUgLS1vdXRwdXREaXIgLiAuL0luc3BlY3RvckpTLmpzb24KIAogSW5qZWN0ZWRTY3JpcHRT
b3VyY2UuaCA6IGluc3BlY3Rvci9JbmplY3RlZFNjcmlwdFNvdXJjZS5qcyAkKEphdmFTY3JpcHRD
b3JlKS9pbnNwZWN0b3Ivc2NyaXB0cy9qc21pbi5weSAkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0
b3Ivc2NyaXB0cy94eGQucGwKIAkkKFBZVEhPTikgJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9y
L3NjcmlwdHMvanNtaW4ucHkgPCAkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3IvSW5qZWN0ZWRT
Y3JpcHRTb3VyY2UuanMgPiAuL0luamVjdGVkU2NyaXB0U291cmNlLm1pbi5qcwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovY29weS1maWxl
cy5jbWQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9jb3B5
LWZpbGVzLmNtZAppbmRleCA1MzVlMjdiM2ExOWUwNjc2ZTExNGQ2NTQwMjBkYzZjYmRjYTQyMzU2
Li5hOTgwY2UxODY4NjliMTJhYTEzMTc4NTEyZmVkMzU1MGQ1YTZmNGFkIDEwMDc1NQotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9jb3B5LWZpbGVzLmNt
ZAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9jb3B5
LWZpbGVzLmNtZApAQCAtNjQsNiArNjQsNyBAQCBmb3IgJSVkIGluICgKIGVjaG8gQ29weWluZyBJ
bnNwZWN0b3Igc2NyaXB0cyBhcyBpZiB0aGV5IHdlcmUgcHJpdmF0ZSBoZWFkZXJzLi4uDQogZm9y
ICUlZCBpbiAoDQogICAgIGluc3BlY3RvclxzY3JpcHRzDQorCWluc3BlY3RvclxzY3JpcHRzXGNv
ZGVnZW4NCiApIGRvICgNCiAgICAgeGNvcHkgL3kgL2QgLi5cJSVkXCogIiVQcml2YXRlSGVhZGVy
c0RpcmVjdG9yeSUiID5OVUwNCiApDQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBj
MzUzYWEwNjE2MDU4ODliMzVjMGNlMTE3NDIzMmQxNjdlODhhNjAyLi5jMWQzMGEwOGUxZWUzMTQ1
MDQyYTg0MzJmMzMwM2VlMDlhNmQ1MWQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpA
QCAtMTI2OCw4ICsxMjY4LDYgQEAKIAkJQTUzMjQzOEExODU2ODMzNTAwMkVENjkyIC8qIEluc3Bl
Y3RvckpTRnJvbnRlbmREaXNwYXRjaGVycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQTUzMjQzODQxODU2ODMxNzAwMkVENjkyIC8qIEluc3BlY3RvckpT
RnJvbnRlbmREaXNwYXRjaGVycy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCUE1MzI0MzhCMTg1NjgzMzUwMDJFRDY5MiAvKiBJbnNwZWN0b3JKU1R5
cGVCdWlsZGVycy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBNTMyNDM4NTE4NTY4MzE3MDAyRUQ2OTIgLyogSW5zcGVjdG9ySlNUeXBlQnVpbGRlcnMu
Y3BwICovOyB9OwogCQlBNTMyNDM4QzE4NTY4MzM1MDAyRUQ2OTIgLyogSW5zcGVjdG9ySlNUeXBl
QnVpbGRlcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEE1MzI0Mzg2MTg1NjgzMTcwMDJFRDY5MiAvKiBJbnNwZWN0b3JKU1R5cGVCdWlsZGVycy5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUE1MzI0Mzky
MTg1Njk3MDkwMDJFRDY5MiAvKiBDb2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5IGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTUzMjQzOEYxODU2OTZFNjAwMkVE
NjkyIC8qIENvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkgKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJQTUzMjQzOTMxODU2OTcwOTAwMkVENjkyIC8qIENv
ZGVHZW5lcmF0b3JJbnNwZWN0b3JTdHJpbmdzLnB5IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTUzMjQzOTAxODU2OTZFNjAwMkVENjkyIC8qIENvZGVHZW5l
cmF0b3JJbnNwZWN0b3JTdHJpbmdzLnB5ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCUE1MzI0Mzk0MTg1Njk3MDkwMDJFRDY5MiAvKiBnZW5lcmF0ZS1j
b21iaW5lZC1pbnNwZWN0b3ItanNvbi5weSBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEE1MzI0MzkxMTg1Njk2RTYwMDJFRDY5MiAvKiBnZW5lcmF0ZS1jb21i
aW5lZC1pbnNwZWN0b3ItanNvbi5weSAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQlBNTMyNDM5ODE4NTZBNDg5MDAyRUQ2OTIgLyogSW5zcGVjdG9ySlMu
anNvbiBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1MzI0
Mzk1MTg1NkE0NzUwMDJFRDY5MiAvKiBJbnNwZWN0b3JKUy5qc29uICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE1M0NFMDg1MThCQzFBNTYwMEJFREY3
NiAvKiBDb25zb2xlUHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEE1M0NFMDgxMThCQzFBNTYwMEJFREY3NiAvKiBDb25zb2xlUHJvdG90
eXBlLmNwcCAqLzsgfTsKQEAgLTE2OTgsNiArMTY5NiwxNyBAQAogCQlDMkZDQUUxMjE3QTlDMjRF
MDAzNEM3MzUgLyogQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyRkNBRTBFMTdBOUMyNEUwMDM0QzczNSAv
KiBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuY3BwICovOyB9OwogCQlDMkZDQUUxMzE3QTlDMjRF
MDAzNEM3MzUgLyogQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMkZDQUUwRjE3QTlDMjRFMDAzNEM3MzUgLyog
Qnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJQzJGRTE4QTQxNkJBRUM0MDAwQUYzMDYxIC8qIFN0cnVjdHVy
ZVJhcmVEYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBDMkZFMThBMzE2QkFFQzQwMDBBRjMwNjEgLyogU3RydWN0dXJlUmFyZURhdGEuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlDNDcwM0NDMDE5Mjg0
NDk2MDAxM0ZCRUEgLyogZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5IGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzQ3MDNDQkYxOTI4
NDQ5NjAwMTNGQkVBIC8qIGdlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weSAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlDNDcwM0ND
RTE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJhdGVfYmFja2VuZF9jb21tYW5kcy5weSBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM0NzAzQ0MzMTkyODQ0Q0Mw
MDEzRkJFQSAvKiBnZW5lcmF0ZV9iYWNrZW5kX2NvbW1hbmRzLnB5ICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUM0NzAzQ0NGMTkyODQ0Q0MwMDEzRkJF
QSAvKiBnZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5IGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzQ3MDNDQzQxOTI4NDRDQzAwMTNGQkVB
IC8qIGdlbmVyYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkgKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQzQ3MDNDRDAxOTI4NDRDQzAwMTNG
QkVBIC8qIGdlbmVyYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM0NzAzQ0M1MTkyODQ0
Q0MwMDEzRkJFQSAvKiBnZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24u
cHkgKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQzQ3
MDNDRDExOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRlX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVh
ZGVyLnB5IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzQ3
MDNDQzYxOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRlX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVh
ZGVyLnB5ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJ
CUM0NzAzQ0QyMTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0ZV9mcm9udGVuZF9kaXNwYXRjaGVy
X2ltcGxlbWVudGF0aW9uLnB5IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQzQ3MDNDQzcxOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRlX2Zyb250ZW5kX2Rp
c3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkgKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJQzQ3MDNDRDMxOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRl
X3R5cGVfYnVpbGRlcl9oZWFkZXIucHkgaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBDNDcwM0NDODE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJhdGVfdHlwZV9i
dWlsZGVyX2hlYWRlci5weSAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OworCQlDNDcwM0NENDE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJhdGVfdHlwZV9idWls
ZGVyX2ltcGxlbWVudGF0aW9uLnB5IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQzQ3MDNDQzkxOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRlX3R5cGVfYnVp
bGRlcl9pbXBsZW1lbnRhdGlvbi5weSAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQlDNDcwM0NENTE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJhdG9yX3Rl
bXBsYXRlcy5weSBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEM0NzAzQ0NBMTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0b3JfdGVtcGxhdGVzLnB5ICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUM0NzAzQ0Q2MTky
ODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0b3IucHkgaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBDNDcwM0NDQjE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJhdG9y
LnB5ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUM0
NzAzQ0Q3MTkyODQ0Q0MwMDEzRkJFQSAvKiBtb2RlbHMucHkgaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNDcwM0NDQzE5Mjg0NENDMDAxM0ZCRUEgLyogbW9k
ZWxzLnB5ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CUUxMjRBOEY3MEU1NTU3NzUwMDMwOTFGMSAvKiBPcGFxdWVKU1N0cmluZy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTEyNEE4RjUwRTU1NTc3NTAwMzA5
MUYxIC8qIE9wYXF1ZUpTU3RyaW5nLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJRTEyNEE4RjgwRTU1NTc3NTAwMzA5MUYxIC8qIE9wYXF1ZUpTU3Ry
aW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUx
MjRBOEY2MEU1NTU3NzUwMDMwOTFGMSAvKiBPcGFxdWVKU1N0cmluZy5jcHAgKi87IH07CiAJCUUx
Nzg2MzZEMEQ5QkVFQzMwMEQ3NEU3NSAvKiBJbml0aWFsaXplVGhyZWFkaW5nLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxNzg2MzZDMEQ5QkVFQzMw
MEQ3NEU3NSAvKiBJbml0aWFsaXplVGhyZWFkaW5nLmNwcCAqLzsgfTsKQEAgLTI4NzAsOCArMjg3
OSw2IEBACiAJCUE1MzI0Mzg1MTg1NjgzMTcwMDJFRDY5MiAvKiBJbnNwZWN0b3JKU1R5cGVCdWls
ZGVycy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbnNwZWN0b3JKU1R5cGVCdWlsZGVycy5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE1MzI0Mzg2MTg1NjgzMTcwMDJFRDY5MiAv
KiBJbnNwZWN0b3JKU1R5cGVCdWlsZGVycy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnNwZWN0b3JKU1R5
cGVCdWlsZGVycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNTMyNDM4RDE4NTY5
NkNBMDAyRUQ2OTIgLyogcHJvdG9jb2wgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBmb2xkZXI7IHBhdGggPSBwcm90b2NvbDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJQTUzMjQzOEYxODU2OTZFNjAwMkVENjkyIC8qIENvZGVHZW5lcmF0b3JJ
bnNwZWN0b3IucHkgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnNjcmlwdC5weXRob247IHBhdGggPSBDb2RlR2Vu
ZXJhdG9ySW5zcGVjdG9yLnB5OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBNTMyNDM5
MDE4NTY5NkU2MDAyRUQ2OTIgLyogQ29kZUdlbmVyYXRvckluc3BlY3RvclN0cmluZ3MucHkgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSB0ZXh0LnNjcmlwdC5weXRob247IHBhdGggPSBDb2RlR2VuZXJhdG9ySW5zcGVjdG9y
U3RyaW5ncy5weTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTUzMjQzOTExODU2OTZF
NjAwMkVENjkyIC8qIGdlbmVyYXRlLWNvbWJpbmVkLWluc3BlY3Rvci1qc29uLnB5ICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gdGV4dC5zY3JpcHQucHl0aG9uOyBwYXRoID0gImdlbmVyYXRlLWNvbWJpbmVkLWluc3BlY3Rv
ci1qc29uLnB5Ijsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTUzMjQzOTUxODU2QTQ3
NTAwMkVENjkyIC8qIEluc3BlY3RvckpTLmpzb24gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lmpzb247IHBhdGgg
PSBJbnNwZWN0b3JKUy5qc29uOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNTMyNDM5
NjE4NTZBNDc1MDAyRUQ2OTIgLyogSW5zcGVjdG9ySlNCYWNrZW5kQ29tbWFuZHMuanMgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7IHBhdGggPSBJbnNwZWN0b3JKU0JhY2tlbmRDb21t
YW5kcy5qczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTMyOTAsNiArMzI5NywxOCBA
QAogCQlDMkZDQUUwRTE3QTlDMjRFMDAzNEM3MzUgLyogQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lz
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJ5dGVjb2RlTGl2ZW5l
c3NBbmFseXNpcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyRkNBRTBGMTdB
OUMyNEUwMDM0QzczNSAvKiBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyRkUxOEEzMTZCQUVDNDAwMEFGMzA2MSAvKiBTdHJ1Y3R1
cmVSYXJlRGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHJ1Y3R1cmVS
YXJlRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDNDcwM0NCRjE5Mjg0NDk2
MDAxM0ZCRUEgLyogZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5ICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gdGV4dC5zY3JpcHQucHl0aG9uOyBwYXRoID0gImdlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weSI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUM0NzAzQ0My
MTkyODQ0Q0MwMDEzRkJFQSAvKiBfX2luaXRfXy5weSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuc2NyaXB0LnB5
dGhvbjsgbmFtZSA9IF9faW5pdF9fLnB5OyBwYXRoID0gY29kZWdlbi9fX2luaXRfXy5weTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzQ3MDNDQzMxOTI4NDRDQzAwMTNGQkVBIC8qIGdl
bmVyYXRlX2JhY2tlbmRfY29tbWFuZHMucHkgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnNjcmlwdC5weXRob247
IG5hbWUgPSBnZW5lcmF0ZV9iYWNrZW5kX2NvbW1hbmRzLnB5OyBwYXRoID0gY29kZWdlbi9nZW5l
cmF0ZV9iYWNrZW5kX2NvbW1hbmRzLnB5OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlD
NDcwM0NDNDE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJhdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hl
YWRlci5weSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHRleHQuc2NyaXB0LnB5dGhvbjsgbmFtZSA9IGdlbmVyYXRlX2Jh
Y2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHk7IHBhdGggPSBjb2RlZ2VuL2dlbmVyYXRlX2JhY2tl
bmRfZGlzcGF0Y2hlcl9oZWFkZXIucHk7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUM0
NzAzQ0M1MTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaW1w
bGVtZW50YXRpb24ucHkgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnNjcmlwdC5weXRob247IG5hbWUgPSBnZW5l
cmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHk7IHBhdGggPSBjb2RlZ2Vu
L2dlbmVyYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzQ3MDNDQzYxOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRl
X2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5zY3JpcHQucHl0
aG9uOyBuYW1lID0gZ2VuZXJhdGVfZnJvbnRlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHk7IHBhdGgg
PSBjb2RlZ2VuL2dlbmVyYXRlX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5OyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlDNDcwM0NDNzE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJh
dGVfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQu
c2NyaXB0LnB5dGhvbjsgbmFtZSA9IGdlbmVyYXRlX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVt
ZW50YXRpb24ucHk7IHBhdGggPSBjb2RlZ2VuL2dlbmVyYXRlX2Zyb250ZW5kX2Rpc3BhdGNoZXJf
aW1wbGVtZW50YXRpb24ucHk7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUM0NzAzQ0M4
MTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0ZV90eXBlX2J1aWxkZXJfaGVhZGVyLnB5ICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gdGV4dC5zY3JpcHQucHl0aG9uOyBuYW1lID0gZ2VuZXJhdGVfdHlwZV9idWlsZGVyX2hl
YWRlci5weTsgcGF0aCA9IGNvZGVnZW4vZ2VuZXJhdGVfdHlwZV9idWlsZGVyX2hlYWRlci5weTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzQ3MDNDQzkxOTI4NDRDQzAwMTNGQkVBIC8q
IGdlbmVyYXRlX3R5cGVfYnVpbGRlcl9pbXBsZW1lbnRhdGlvbi5weSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQu
c2NyaXB0LnB5dGhvbjsgbmFtZSA9IGdlbmVyYXRlX3R5cGVfYnVpbGRlcl9pbXBsZW1lbnRhdGlv
bi5weTsgcGF0aCA9IGNvZGVnZW4vZ2VuZXJhdGVfdHlwZV9idWlsZGVyX2ltcGxlbWVudGF0aW9u
LnB5OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDNDcwM0NDQTE5Mjg0NENDMDAxM0ZC
RUEgLyogZ2VuZXJhdG9yX3RlbXBsYXRlcy5weSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuc2NyaXB0LnB5dGhv
bjsgbmFtZSA9IGdlbmVyYXRvcl90ZW1wbGF0ZXMucHk7IHBhdGggPSBjb2RlZ2VuL2dlbmVyYXRv
cl90ZW1wbGF0ZXMucHk7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUM0NzAzQ0NCMTky
ODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0b3IucHkgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnNjcmlwdC5weXRo
b247IG5hbWUgPSBnZW5lcmF0b3IucHk7IHBhdGggPSBjb2RlZ2VuL2dlbmVyYXRvci5weTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzQ3MDNDQ0MxOTI4NDRDQzAwMTNGQkVBIC8qIG1v
ZGVscy5weSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHRleHQuc2NyaXB0LnB5dGhvbjsgbmFtZSA9IG1vZGVscy5weTsg
cGF0aCA9IGNvZGVnZW4vbW9kZWxzLnB5OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlE
MjEyMDIyODBBRDQzMTBDMDBFRDc5QjYgLyogRGF0ZUNvbnZlcnNpb24uY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERhdGVDb252ZXJzaW9uLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDIxMjAyMjkwQUQ0MzEwQzAwRUQ3OUI2IC8qIERhdGVDb252
ZXJzaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEYXRlQ29udmVyc2lv
bi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMTI0QThGNTBFNTU1Nzc1MDAzMDkx
RjEgLyogT3BhcXVlSlNTdHJpbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
T3BhcXVlSlNTdHJpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTUwOTMsMTAg
KzUxMTIsMTAgQEAKIAkJQTUzMjQzOEUxODU2OTZDRTAwMkVENjkyIC8qIHNjcmlwdHMgKi8gPSB7
CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCUE1MzI0MzhGMTg1Njk2
RTYwMDJFRDY5MiAvKiBDb2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5ICovLAotCQkJCUE1MzI0Mzkw
MTg1Njk2RTYwMDJFRDY5MiAvKiBDb2RlR2VuZXJhdG9ySW5zcGVjdG9yU3RyaW5ncy5weSAqLywK
KwkJCQlDNDcwM0NDMTE5Mjg0NEE0MDAxM0ZCRUEgLyogY29kZWdlbiAqLywKIAkJCQlBNTg0MEUy
NjE4N0M5ODA3MDA4NDNCMTAgLyogY3NzbWluLnB5ICovLAogCQkJCUE1MzI0MzkxMTg1Njk2RTYw
MDJFRDY5MiAvKiBnZW5lcmF0ZS1jb21iaW5lZC1pbnNwZWN0b3ItanNvbi5weSAqLywKKwkJCQlD
NDcwM0NCRjE5Mjg0NDk2MDAxM0ZCRUEgLyogZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5ICovLAogCQkJCUE1ODQwRTI4MTg3Q0E1QjgwMDg0M0IxMCAvKiBpbmxpbmUtYW5k
LW1pbmlmeS1zdHlsZXNoZWV0cy1hbmQtc2NyaXB0cy5weSAqLywKIAkJCQlBNTEzRTVDNDE4NUY5
MkRDMDA3RTk1QUQgLyoganNtaW4ucHkgKi8sCiAJCQkJQTUxM0U1QzUxODVGOTJGMDAwN0U5NUFE
IC8qIHh4ZC5wbCAqLywKQEAgLTUyMTQsNiArNTIzMywyNCBAQAogCQkJcGF0aCA9IGJ1aWx0aW5z
OwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKKwkJQzQ3MDNDQzExOTI4NDRBNDAw
MTNGQkVBIC8qIGNvZGVnZW4gKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVu
ID0gKAorCQkJCUM0NzAzQ0MyMTkyODQ0Q0MwMDEzRkJFQSAvKiBfX2luaXRfXy5weSAqLywKKwkJ
CQlDNDcwM0NDMzE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJhdGVfYmFja2VuZF9jb21tYW5kcy5w
eSAqLywKKwkJCQlDNDcwM0NDNDE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJhdGVfYmFja2VuZF9k
aXNwYXRjaGVyX2hlYWRlci5weSAqLywKKwkJCQlDNDcwM0NDNTE5Mjg0NENDMDAxM0ZCRUEgLyog
Z2VuZXJhdGVfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5ICovLAorCQkJCUM0
NzAzQ0M2MTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0ZV9mcm9udGVuZF9kaXNwYXRjaGVyX2hl
YWRlci5weSAqLywKKwkJCQlDNDcwM0NDNzE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJhdGVfZnJv
bnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSAqLywKKwkJCQlDNDcwM0NDODE5Mjg0
NENDMDAxM0ZCRUEgLyogZ2VuZXJhdGVfdHlwZV9idWlsZGVyX2hlYWRlci5weSAqLywKKwkJCQlD
NDcwM0NDOTE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJhdGVfdHlwZV9idWlsZGVyX2ltcGxlbWVu
dGF0aW9uLnB5ICovLAorCQkJCUM0NzAzQ0NBMTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0b3Jf
dGVtcGxhdGVzLnB5ICovLAorCQkJCUM0NzAzQ0NCMTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0
b3IucHkgKi8sCisJCQkJQzQ3MDNDQ0MxOTI4NDRDQzAwMTNGQkVBIC8qIG1vZGVscy5weSAqLywK
KwkJCSk7CisJCQluYW1lID0gY29kZWdlbjsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJ
CX07CiAvKiBFbmQgUEJYR3JvdXAgc2VjdGlvbiAqLwogCiAvKiBCZWdpbiBQQlhIZWFkZXJzQnVp
bGRQaGFzZSBzZWN0aW9uICovCkBAIC01NDk5LDYgKzU1MzYsMTkgQEAKIAkJCQkyQUFCQ0RFNzE4
RUYyOTQyMDAwMDIwOTYgLyogR0NMb2dnaW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTUyNDhG
OTE5MTQ0MkQ5MDBCN0ZERTQgLyogVmFyaWFibGVXYXRjaHBvaW50U2V0SW5saW5lcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQzJEQTc3ODMxOEUyNTk5OTAwNjZGQ0I2IC8qIEhlYXBJbmxpbmVzLmgg
aW4gSGVhZGVycyAqLywKKwkJCQlBNTMyNDM5NDE4NTY5NzA5MDAyRUQ2OTIgLyogZ2VuZXJhdGUt
Y29tYmluZWQtaW5zcGVjdG9yLWpzb24ucHkgaW4gSGVhZGVycyAqLywKKwkJCQlBNTg0MEUyNzE4
N0M5ODFFMDA4NDNCMTAgLyogY3NzbWluLnB5IGluIEhlYWRlcnMgKi8sCisJCQkJQzQ3MDNDRDMx
OTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRlX3R5cGVfYnVpbGRlcl9oZWFkZXIucHkgaW4gSGVh
ZGVycyAqLywKKwkJCQlDNDcwM0NEMjE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJhdGVfZnJvbnRl
bmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSBpbiBIZWFkZXJzICovLAorCQkJCUM0NzAz
Q0QxMTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0ZV9mcm9udGVuZF9kaXNwYXRjaGVyX2hlYWRl
ci5weSBpbiBIZWFkZXJzICovLAorCQkJCUM0NzAzQ0Q1MTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5l
cmF0b3JfdGVtcGxhdGVzLnB5IGluIEhlYWRlcnMgKi8sCisJCQkJQzQ3MDNDRDYxOTI4NDRDQzAw
MTNGQkVBIC8qIGdlbmVyYXRvci5weSBpbiBIZWFkZXJzICovLAorCQkJCUM0NzAzQ0NGMTkyODQ0
Q0MwMDEzRkJFQSAvKiBnZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5IGluIEhl
YWRlcnMgKi8sCisJCQkJQzQ3MDNDQzAxOTI4NDQ5NjAwMTNGQkVBIC8qIGdlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weSBpbiBIZWFkZXJzICovLAorCQkJCUM0NzAzQ0QwMTky
ODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRp
b24ucHkgaW4gSGVhZGVycyAqLywKKwkJCQlDNDcwM0NDRTE5Mjg0NENDMDAxM0ZCRUEgLyogZ2Vu
ZXJhdGVfYmFja2VuZF9jb21tYW5kcy5weSBpbiBIZWFkZXJzICovLAorCQkJCUM0NzAzQ0Q0MTky
ODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0ZV90eXBlX2J1aWxkZXJfaW1wbGVtZW50YXRpb24ucHkg
aW4gSGVhZGVycyAqLywKKwkJCQlDNDcwM0NENzE5Mjg0NENDMDAxM0ZCRUEgLyogbW9kZWxzLnB5
IGluIEhlYWRlcnMgKi8sCiAJCQkJMkFBQ0U2M0QxOENBNUEwMzAwRUQwMTkxIC8qIEdDQWN0aXZp
dHlDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkE4MzYzODYxOEQ3RDBFRTAwMDBFQkND
IC8qIEVkZW5HQ0FjdGl2aXR5Q2FsbGJhY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTJBODM2MzhB
MThEN0QwRkUwMDAwRUJDQyAvKiBGdWxsR0NBY3Rpdml0eUNhbGxiYWNrLmggaW4gSGVhZGVycyAq
LywKQEAgLTU1NTcsOCArNTYwNyw2IEBACiAJCQkJMEZEOEEzMTQxN0Q0MzI2QzAwQ0EyQzQwIC8q
IENvZGVCbG9ja1NldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5NkVCQjMxNjY3NkVGNjAwOEJB
REUzIC8qIENvZGVCbG9ja1dpdGhKSVRUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzdGMTgy
MjE2NDA4OEIyMDA2NDBBNDcgLyogQ29kZUNhY2hlLmggaW4gSGVhZGVycyAqLywKLQkJCQlBNTMy
NDM5MjE4NTY5NzA5MDAyRUQ2OTIgLyogQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weSBpbiBIZWFk
ZXJzICovLAotCQkJCUE1MzI0MzkzMTg1Njk3MDkwMDJFRDY5MiAvKiBDb2RlR2VuZXJhdG9ySW5z
cGVjdG9yU3RyaW5ncy5weSBpbiBIZWFkZXJzICovLAogCQkJCTg2RTExNkIxMEZFNzVBQzgwMEI1
MTJCQyAvKiBDb2RlTG9jYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQkQ3RTY5MTQ0Nzk5
OTYwMDQ4MTMxNSAvKiBDb2RlT3JpZ2luLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjIxQzI3RDE0
QkU3MjdBMDBBREM2NEIgLyogQ29kZVNwZWNpYWxpemF0aW9uS2luZC5oIGluIEhlYWRlcnMgKi8s
CkBAIC01NTg5LDcgKzU2MzcsNiBAQAogCQkJCUMyMThEMTQwMTY1NUNGRDUwMDYyQkI4MSAvKiBD
b3B5V29ya0xpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTJBNjgyOTVCMTg3NUY4MDUwMEI2QzNF
MiAvKiBDb3B5V3JpdGVCYXJyaWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1REU2RTVCMzBFMTcy
OEVDMDAxODA0MDcgLyogY3JlYXRlX2hhc2hfdGFibGUgaW4gSGVhZGVycyAqLywKLQkJCQlBNTg0
MEUyNzE4N0M5ODFFMDA4NDNCMTAgLyogY3NzbWluLnB5IGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0
MjZBNEIxNDYwQ0Q2RTAwMTMxRjhGIC8qIERhdGFGb3JtYXQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGMkI2NkRGMTdCNkI1QUIwMEE3QUUzRiAvKiBEYXRhVmlldy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQkNEMjAzNEEwRTE3MTM1RTAwMkM3RTgyIC8qIERhdGVDb25zdHJ1Y3Rvci5oIGluIEhlYWRl
cnMgKi8sCkBAIC01ODI2LDcgKzU4NzMsNiBAQAogCQkJCTBGMkI2NkFGMTdCNkI1NDUwMEE3QUUz
RiAvKiBHQ0luY29taW5nUmVmQ291bnRlZFNldElubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUMyMjM5RDFCMTYyNjJCREQwMDVBQzVGRCAvKiBHQ1RocmVhZC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQzIxMTIyRTIxNUREOUFCMzAwNzkwRTNBIC8qIEdDVGhyZWFkU2hhcmVkRGF0YS5oIGluIEhl
YWRlcnMgKi8sCi0JCQkJQTUzMjQzOTQxODU2OTcwOTAwMkVENjkyIC8qIGdlbmVyYXRlLWNvbWJp
bmVkLWluc3BlY3Rvci1qc29uLnB5IGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RTAxN0I2QjVB
QjAwQTdBRTNGIC8qIEdlbmVyaWNUeXBlZEFycmF5Vmlldy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEYxRkU1MUMxOTIyQTNCQzAwNjk4N0M1IC8qIEFib3J0UmVhc29uLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRjJCNjZFMTE3QjZCNUFCMDBBN0FFM0YgLyogR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5s
aW5lcy5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL0NvbnNvbGVNZXNzYWdlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3IvQ29uc29sZU1lc3NhZ2UuY3BwCmluZGV4IDQwNzkwYmY1ZDllNTkxYmUwZTM1ZjYyYTQ1
MTg3OGJjZDU3MmM3ZjYuLjAyMDNiYzFhOWY3MzZiNDhmYzIxZWMxMWM4ZTNiNDk1MDlkMTA5NTkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvQ29uc29sZU1lc3Nh
Z2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvQ29uc29sZU1lc3Nh
Z2UuY3BwCkBAIC0xMzEsNyArMTMxLDcgQEAgdm9pZCBDb25zb2xlTWVzc2FnZTo6YXV0b2dlbmVy
YXRlTWV0YWRhdGEoSlNDOjpFeGVjU3RhdGUqIHN0YXRlKQogICAgIH0KIH0KIAotc3RhdGljIElu
c3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNvbnNvbGU6OkNvbnNvbGVNZXNzYWdlOjpTb3VyY2U6OkVu
dW0gbWVzc2FnZVNvdXJjZVZhbHVlKE1lc3NhZ2VTb3VyY2Ugc291cmNlKQorc3RhdGljIEluc3Bl
Y3Rvcjo6VHlwZUJ1aWxkZXI6OkNvbnNvbGU6OkNvbnNvbGVNZXNzYWdlOjpTb3VyY2UgbWVzc2Fn
ZVNvdXJjZVZhbHVlKE1lc3NhZ2VTb3VyY2Ugc291cmNlKQogewogICAgIHN3aXRjaCAoc291cmNl
KSB7CiAgICAgY2FzZSBNZXNzYWdlU291cmNlOjpYTUw6IHJldHVybiBJbnNwZWN0b3I6OlR5cGVC
dWlsZGVyOjpDb25zb2xlOjpDb25zb2xlTWVzc2FnZTo6U291cmNlOjpYTUw7CkBAIC0xNDgsNyAr
MTQ4LDcgQEAgc3RhdGljIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNvbnNvbGU6OkNvbnNvbGVN
ZXNzYWdlOjpTb3VyY2U6OkVudW0gbWVzc2FnZVNvdXIKICAgICByZXR1cm4gSW5zcGVjdG9yOjpU
eXBlQnVpbGRlcjo6Q29uc29sZTo6Q29uc29sZU1lc3NhZ2U6OlNvdXJjZTo6T3RoZXI7CiB9CiAK
LXN0YXRpYyBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDb25zb2xlOjpDb25zb2xlTWVzc2FnZTo6
VHlwZTo6RW51bSBtZXNzYWdlVHlwZVZhbHVlKE1lc3NhZ2VUeXBlIHR5cGUpCitzdGF0aWMgSW5z
cGVjdG9yOjpUeXBlQnVpbGRlcjo6Q29uc29sZTo6Q29uc29sZU1lc3NhZ2U6OlR5cGUgbWVzc2Fn
ZVR5cGVWYWx1ZShNZXNzYWdlVHlwZSB0eXBlKQogewogICAgIHN3aXRjaCAodHlwZSkgewogICAg
IGNhc2UgTWVzc2FnZVR5cGU6OkxvZzogcmV0dXJuIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNv
bnNvbGU6OkNvbnNvbGVNZXNzYWdlOjpUeXBlOjpMb2c7CkBAIC0xNjgsNyArMTY4LDcgQEAgc3Rh
dGljIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNvbnNvbGU6OkNvbnNvbGVNZXNzYWdlOjpUeXBl
OjpFbnVtIG1lc3NhZ2VUeXBlVmEKICAgICByZXR1cm4gSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6
Q29uc29sZTo6Q29uc29sZU1lc3NhZ2U6OlR5cGU6OkxvZzsKIH0KIAotc3RhdGljIEluc3BlY3Rv
cjo6VHlwZUJ1aWxkZXI6OkNvbnNvbGU6OkNvbnNvbGVNZXNzYWdlOjpMZXZlbDo6RW51bSBtZXNz
YWdlTGV2ZWxWYWx1ZShNZXNzYWdlTGV2ZWwgbGV2ZWwpCitzdGF0aWMgSW5zcGVjdG9yOjpUeXBl
QnVpbGRlcjo6Q29uc29sZTo6Q29uc29sZU1lc3NhZ2U6OkxldmVsIG1lc3NhZ2VMZXZlbFZhbHVl
KE1lc3NhZ2VMZXZlbCBsZXZlbCkKIHsKICAgICBzd2l0Y2ggKGxldmVsKSB7CiAgICAgY2FzZSBN
ZXNzYWdlTGV2ZWw6OkxvZzogcmV0dXJuIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNvbnNvbGU6
OkNvbnNvbGVNZXNzYWdlOjpMZXZlbDo6TG9nOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0LmNwcAppbmRleCA3ODVkYWQwYWM4OGU0ZTcwZDk4
NWY2MDk4ODA1ZWRjNDViYWY2OGYxLi5lNWEyNjIyZGRlYjE0NTJmZTkyYmNhNDZhODA0NTliOTli
YWQ0MDhhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luamVj
dGVkU2NyaXB0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luamVj
dGVkU2NyaXB0LmNwcApAQCAtMTAwLDEzICsxMDAsMTMgQEAgdm9pZCBJbmplY3RlZFNjcmlwdDo6
Z2V0RnVuY3Rpb25EZXRhaWxzKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5n
JgogCiAgICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiByZXN1bHRWYWx1ZTsKICAgICBtYWtlQ2Fs
bChmdW5jdGlvbiwgJnJlc3VsdFZhbHVlKTsKLSAgICBpZiAoIXJlc3VsdFZhbHVlIHx8IHJlc3Vs
dFZhbHVlLT50eXBlKCkgIT0gSW5zcGVjdG9yVmFsdWU6OlR5cGVPYmplY3QpIHsKKyAgICBpZiAo
IXJlc3VsdFZhbHVlIHx8IHJlc3VsdFZhbHVlLT50eXBlKCkgIT0gSW5zcGVjdG9yVmFsdWU6OlR5
cGU6Ok9iamVjdCkgewogICAgICAgICBpZiAoIXJlc3VsdFZhbHVlLT5hc1N0cmluZyhlcnJvclN0
cmluZykpCiAgICAgICAgICAgICAqZXJyb3JTdHJpbmcgPSBBU0NJSUxpdGVyYWwoIkludGVybmFs
IGVycm9yIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICAqcmVzdWx0ID0gSW5zcGVj
dG9yOjpUeXBlQnVpbGRlcjo6RGVidWdnZXI6OkZ1bmN0aW9uRGV0YWlsczo6cnVudGltZUNhc3Qo
cmVzdWx0VmFsdWUpOworICAgICpyZXN1bHQgPSBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6VHlw
ZUJ1aWxkZXI6OkRlYnVnZ2VyOjpGdW5jdGlvbkRldGFpbHM+OjpydW50aW1lQ2FzdChyZXN1bHRW
YWx1ZSk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRTY3JpcHQ6OmdldFByb3BlcnRpZXMoRXJyb3JTdHJp
bmcqIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBib29sIG93blByb3BlcnRp
ZXMsIFJlZlB0cjxBcnJheTxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpSdW50aW1lOjpQcm9wZXJ0
eURlc2NyaXB0b3I+PiogcHJvcGVydGllcykKQEAgLTExNywxMiArMTE3LDEyIEBAIHZvaWQgSW5q
ZWN0ZWRTY3JpcHQ6OmdldFByb3BlcnRpZXMoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBjb25z
dCBTdHJpbmcmIG9iamVjCiAKICAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHJlc3VsdDsKICAg
ICBtYWtlQ2FsbChmdW5jdGlvbiwgJnJlc3VsdCk7Ci0gICAgaWYgKCFyZXN1bHQgfHwgcmVzdWx0
LT50eXBlKCkgIT0gSW5zcGVjdG9yVmFsdWU6OlR5cGVBcnJheSkgeworICAgIGlmICghcmVzdWx0
IHx8IHJlc3VsdC0+dHlwZSgpICE9IEluc3BlY3RvclZhbHVlOjpUeXBlOjpBcnJheSkgewogICAg
ICAgICAqZXJyb3JTdHJpbmcgPSBBU0NJSUxpdGVyYWwoIkludGVybmFsIGVycm9yIik7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKLSAgICAqcHJvcGVydGllcyA9IEFycmF5PEluc3BlY3Rvcjo6
VHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OlByb3BlcnR5RGVzY3JpcHRvcj46OnJ1bnRpbWVDYXN0KHJl
c3VsdCk7CisgICAgKnByb3BlcnRpZXMgPSBCaW5kaW5nVHJhaXRzPEFycmF5PEluc3BlY3Rvcjo6
VHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OlByb3BlcnR5RGVzY3JpcHRvcj4+OjpydW50aW1lQ2FzdChy
ZXN1bHQpOwogfQogCiB2b2lkIEluamVjdGVkU2NyaXB0OjpnZXRJbnRlcm5hbFByb3BlcnRpZXMo
RXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBSZWZQdHI8
QXJyYXk8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UnVudGltZTo6SW50ZXJuYWxQcm9wZXJ0eURl
c2NyaXB0b3I+PiogcHJvcGVydGllcykKQEAgLTEzMiwxMiArMTMyLDEyIEBAIHZvaWQgSW5qZWN0
ZWRTY3JpcHQ6OmdldEludGVybmFsUHJvcGVydGllcyhFcnJvclN0cmluZyogZXJyb3JTdHJpbmcs
IGNvbnN0IFN0cmluCiAKICAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHJlc3VsdDsKICAgICBt
YWtlQ2FsbChmdW5jdGlvbiwgJnJlc3VsdCk7Ci0gICAgaWYgKCFyZXN1bHQgfHwgcmVzdWx0LT50
eXBlKCkgIT0gSW5zcGVjdG9yVmFsdWU6OlR5cGVBcnJheSkgeworICAgIGlmICghcmVzdWx0IHx8
IHJlc3VsdC0+dHlwZSgpICE9IEluc3BlY3RvclZhbHVlOjpUeXBlOjpBcnJheSkgewogICAgICAg
ICAqZXJyb3JTdHJpbmcgPSBBU0NJSUxpdGVyYWwoIkludGVybmFsIGVycm9yIik7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICBSZWZQdHI8QXJyYXk8SW5zcGVjdG9yOjpUeXBlQnVpbGRl
cjo6UnVudGltZTo6SW50ZXJuYWxQcm9wZXJ0eURlc2NyaXB0b3I+PiBhcnJheSA9IEFycmF5PElu
c3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OkludGVybmFsUHJvcGVydHlEZXNjcmlwdG9y
Pjo6cnVudGltZUNhc3QocmVzdWx0KTsKKyAgICBhdXRvIGFycmF5ID0gQmluZGluZ1RyYWl0czxB
cnJheTxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpSdW50aW1lOjpJbnRlcm5hbFByb3BlcnR5RGVz
Y3JpcHRvcj4+OjpydW50aW1lQ2FzdChyZXN1bHQpOwogICAgIGlmIChhcnJheS0+bGVuZ3RoKCkg
PiAwKQogICAgICAgICAqcHJvcGVydGllcyA9IGFycmF5OwogfQpAQCAtMTUyLDggKzE1Miw4IEBA
IFBhc3NSZWZQdHI8QXJyYXk8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6RGVidWdnZXI6OkNhbGxG
cmFtZT4+IEluamVjdGVkU2NyaXB0Ojp3CiAgICAgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUgY2Fs
bEZyYW1lc1ZhbHVlID0gY2FsbEZ1bmN0aW9uV2l0aEV2YWxFbmFibGVkKGZ1bmN0aW9uLCBoYWRF
eGNlcHRpb24pOwogICAgIEFTU0VSVCghaGFkRXhjZXB0aW9uKTsKICAgICBSZWZQdHI8SW5zcGVj
dG9yVmFsdWU+IHJlc3VsdCA9IGNhbGxGcmFtZXNWYWx1ZS50b0luc3BlY3RvclZhbHVlKHNjcmlw
dFN0YXRlKCkpOwotICAgIGlmIChyZXN1bHQtPnR5cGUoKSA9PSBJbnNwZWN0b3JWYWx1ZTo6VHlw
ZUFycmF5KQotICAgICAgICByZXR1cm4gQXJyYXk8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6RGVi
dWdnZXI6OkNhbGxGcmFtZT46OnJ1bnRpbWVDYXN0KHJlc3VsdCk7CisgICAgaWYgKHJlc3VsdC0+
dHlwZSgpID09IEluc3BlY3RvclZhbHVlOjpUeXBlOjpBcnJheSkKKyAgICAgICAgcmV0dXJuIEJp
bmRpbmdUcmFpdHM8QXJyYXk8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6RGVidWdnZXI6OkNhbGxG
cmFtZT4+OjpydW50aW1lQ2FzdChyZXN1bHQpOwogCiAgICAgcmV0dXJuIEFycmF5PEluc3BlY3Rv
cjo6VHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpDYWxsRnJhbWU+OjpjcmVhdGUoKTsKIH0KQEAgLTE3
Myw3ICsxNzMsNyBAQCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlJ1bnRpbWU6
OlJlbW90ZU9iamVjdD4gSW5qZWN0ZWRTY3JpcHQ6OndyYXBPYgogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKIAogICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJhd1Jlc3VsdCA9IHIudG9JbnNw
ZWN0b3JWYWx1ZShzY3JpcHRTdGF0ZSgpKS0+YXNPYmplY3QoKTsKLSAgICByZXR1cm4gSW5zcGVj
dG9yOjpUeXBlQnVpbGRlcjo6UnVudGltZTo6UmVtb3RlT2JqZWN0OjpydW50aW1lQ2FzdChyYXdS
ZXN1bHQpOworICAgIHJldHVybiBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6
OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD46OnJ1bnRpbWVDYXN0KHJhd1Jlc3VsdCk7CiB9CiAKIFBh
c3NSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiBJ
bmplY3RlZFNjcmlwdDo6d3JhcFRhYmxlKGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiB0
YWJsZSwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGNvbHVtbnMpIGNvbnN0CkBAIC0x
OTMsNyArMTkzLDcgQEAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpSdW50aW1l
OjpSZW1vdGVPYmplY3Q+IEluamVjdGVkU2NyaXB0Ojp3cmFwVGEKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAKICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByYXdSZXN1bHQgPSByLnRvSW5z
cGVjdG9yVmFsdWUoc2NyaXB0U3RhdGUoKSktPmFzT2JqZWN0KCk7Ci0gICAgcmV0dXJuIEluc3Bl
Y3Rvcjo6VHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdDo6cnVudGltZUNhc3QocmF3
UmVzdWx0KTsKKyAgICByZXR1cm4gQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlR5cGVCdWlsZGVy
OjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+OjpydW50aW1lQ2FzdChyYXdSZXN1bHQpOwogfQogCiBE
ZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSBJbmplY3RlZFNjcmlwdDo6ZmluZE9iamVjdEJ5SWQoY29u
c3QgU3RyaW5nJiBvYmplY3RJZCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRCYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRCYXNlLmNwcAppbmRleCBkOTU2MWUxZjRhNzg2
Zjk2NTUwZTIyZGFhMzQyMzdlYzkzYWVjZjFiLi5mZTEwZDZjNGJmYmFmYmYyODZjYzNhOGQzNWM5
YzU4ZGQ1NDI0YzFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L0luamVjdGVkU2NyaXB0QmFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9JbmplY3RlZFNjcmlwdEJhc2UuY3BwCkBAIC0xMjgsNyArMTI4LDcgQEAgdm9pZCBJbmpl
Y3RlZFNjcmlwdEJhc2U6Om1ha2VFdmFsQ2FsbChFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIERl
cHJlY2F0ZWQ6OlNjcmkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChyZXN1bHQt
PnR5cGUoKSA9PSBJbnNwZWN0b3JWYWx1ZTo6VHlwZVN0cmluZykgeworICAgIGlmIChyZXN1bHQt
PnR5cGUoKSA9PSBJbnNwZWN0b3JWYWx1ZTo6VHlwZTo6U3RyaW5nKSB7CiAgICAgICAgIHJlc3Vs
dC0+YXNTdHJpbmcoZXJyb3JTdHJpbmcpOwogICAgICAgICBBU1NFUlQoZXJyb3JTdHJpbmctPmxl
bmd0aCgpKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMTQ3LDcgKzE0Nyw3IEBAIHZvaWQgSW5qZWN0
ZWRTY3JpcHRCYXNlOjptYWtlRXZhbENhbGwoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBEZXBy
ZWNhdGVkOjpTY3JpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICAqb2JqZWN0UmVzdWx0
ID0gVHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdDo6cnVudGltZUNhc3QocmVzdWx0
T2JqKTsKKyAgICAqb2JqZWN0UmVzdWx0ID0gQmluZGluZ1RyYWl0czxUeXBlQnVpbGRlcjo6UnVu
dGltZTo6UmVtb3RlT2JqZWN0Pjo6cnVudGltZUNhc3QocmVzdWx0T2JqKTsKICAgICAqd2FzVGhy
b3duID0gd2FzVGhyb3duVmFsOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0TWFuYWdlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0TWFuYWdlci5jcHAKaW5kZXggZWYwZDlhMzc0
NzM0ZDI1NjRlYzBjODFiNjM4NGQ2YzdkMDM0ZWExZC4uNDUxNzNmYzgzN2JhZTBlMjA2NDE3YzM1
NTExMTkyZTU0NjYzOGNiOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9JbmplY3RlZFNjcmlwdE1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmNwcApAQCAtOTUsNyArOTUsNyBAQCBp
bnQgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOjppbmplY3RlZFNjcmlwdElkRm9yKEV4ZWNTdGF0ZSog
c2NyaXB0U3RhdGUpCiBJbmplY3RlZFNjcmlwdCBJbmplY3RlZFNjcmlwdE1hbmFnZXI6OmluamVj
dGVkU2NyaXB0Rm9yT2JqZWN0SWQoY29uc3QgU3RyaW5nJiBvYmplY3RJZCkKIHsKICAgICBSZWZQ
dHI8SW5zcGVjdG9yVmFsdWU+IHBhcnNlZE9iamVjdElkID0gSW5zcGVjdG9yVmFsdWU6OnBhcnNl
SlNPTihvYmplY3RJZCk7Ci0gICAgaWYgKHBhcnNlZE9iamVjdElkICYmIHBhcnNlZE9iamVjdElk
LT50eXBlKCkgPT0gSW5zcGVjdG9yVmFsdWU6OlR5cGVPYmplY3QpIHsKKyAgICBpZiAocGFyc2Vk
T2JqZWN0SWQgJiYgcGFyc2VkT2JqZWN0SWQtPnR5cGUoKSA9PSBJbnNwZWN0b3JWYWx1ZTo6VHlw
ZTo6T2JqZWN0KSB7CiAgICAgICAgIGxvbmcgaW5qZWN0ZWRTY3JpcHRJZCA9IDA7CiAgICAgICAg
IGJvb2wgc3VjY2VzcyA9IHBhcnNlZE9iamVjdElkLT5hc09iamVjdCgpLT5nZXROdW1iZXIoQVND
SUlMaXRlcmFsKCJpbmplY3RlZFNjcmlwdElkIiksICZpbmplY3RlZFNjcmlwdElkKTsKICAgICAg
ICAgaWYgKHN1Y2Nlc3MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL0luc3BlY3RvclR5cGVCdWlsZGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL0luc3BlY3RvclR5cGVCdWlsZGVyLmgKaW5kZXggOGVhNzZlYzkwYzYwZTA3NzYxNzk1YzFj
MTQ3OTUyZDQ3ODY4ZmU1OC4uYjY3MDc1OGNkOGE4ZDYzNDc4ZGVmNDBjNzVmYzY5MGU3ZjEwMDFh
YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JU
eXBlQnVpbGRlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yVHlwZUJ1aWxkZXIuaApAQCAtNjMsNTQgKzYzLDYgQEAgcHJpdmF0ZToKICAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShPcHRPdXRwdXQpOwogfTsKIAotCi0vLyBBIHNtYWxsIHRyYW5zaWVudCB3
cmFwcGVyIGFyb3VuZCBpbnQgdHlwZSwgdGhhdCBjYW4gYmUgdXNlZCBhcyBhIGZ1bmNpdG9uIHBh
cmFtZXRlciB0eXBlCi0vLyBjbGV2ZXJseSBkaXNhbGxvd2luZyBDKysgaW1wbGljaXQgY2FzdHMg
ZnJvbSBmbG9hdCBvciBkb3VibGUuCi1jbGFzcyBFeGFjdGx5SW50IHsKLXB1YmxpYzoKLSAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIEV4YWN0bHlJbnQoVCB0KSA6IG1fdmFsdWUoY2FzdF90
b19pbnQ8VD4odCkpIHsgfQotICAgIEV4YWN0bHlJbnQoKSB7IH0KLQotICAgIG9wZXJhdG9yIGlu
dCgpIHsgcmV0dXJuIG1fdmFsdWU7IH0KLQotcHJpdmF0ZToKLSAgICBpbnQgbV92YWx1ZTsKLQot
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgc3RhdGljIGludCBjYXN0X3RvX2ludChUKSB7
IHJldHVybiBUOjpkZWZhdWx0X2Nhc2VfY2FzdF9pc19ub3Rfc3VwcG9ydGVkKCk7IH0KLX07Ci0K
LXRlbXBsYXRlPD4KLWlubGluZSBpbnQgRXhhY3RseUludDo6Y2FzdF90b19pbnQ8aW50PihpbnQg
aSkgeyByZXR1cm4gaTsgfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUgaW50IEV4YWN0bHlJbnQ6OmNh
c3RfdG9faW50PHVuc2lnbmVkIGludD4odW5zaWduZWQgaW50IGkpIHsgcmV0dXJuIGk7IH0KLQot
I2lmICFBU1NFUlRfRElTQUJMRUQKLWNsYXNzIFJ1bnRpbWVDYXN0SGVscGVyIHsKLXB1YmxpYzoK
LSAgICB0ZW1wbGF0ZTxJbnNwZWN0b3JWYWx1ZTo6VHlwZSBUWVBFPgotICAgIHN0YXRpYyB2b2lk
IGFzc2VydFR5cGUoSW5zcGVjdG9yVmFsdWUqIHZhbHVlKQotICAgIHsKLSAgICAgICAgQVNTRVJU
KHZhbHVlLT50eXBlKCkgPT0gVFlQRSk7Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgYXNzZXJ0
QW55KEluc3BlY3RvclZhbHVlKikKLSAgICB7Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgYXNz
ZXJ0SW50KEluc3BlY3RvclZhbHVlKiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGRvdWJsZSB2Owot
ICAgICAgICBib29sIGNhc3RSZXMgPSB2YWx1ZS0+YXNOdW1iZXIoJnYpOwotICAgICAgICBBU1NF
UlRfVU5VU0VEKGNhc3RSZXMsIGNhc3RSZXMpOwotICAgICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8
ZG91YmxlPihzdGF0aWNfY2FzdDxpbnQ+KHYpKSA9PSB2KTsKLSAgICB9Ci19OwotI2VuZGlmCi0K
LQogLy8gVGhpcyBjbGFzcyBwcm92aWRlcyAiVHJhaXRzIiB0eXBlIGZvciB0aGUgaW5wdXQgdHlw
ZSBULiBJdCBpcyBwcm9ncmFtbWVkIHVzaW5nIEMrKyB0ZW1wbGF0ZSBzcGVjaWFsaXphdGlvbgog
Ly8gdGVjaG5pcXVlLiBCeSBkZWZhdWx0IGl0IHNpbXBseSB0YWtlcyAiSXRlbVRyYWl0cyIgdHlw
ZSBmcm9tIFQsIGJ1dCBpdCBkb2Vzbid0IHdvcmsgd2l0aCB0aGUgYmFzZSB0eXBlcy4KIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+CkBAIC0xNDQsMjkgKzk2LDYgQEAgcHVibGljOgogICAgIHsKICAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBBcnJheTxUPigpKTsKICAgICB9Ci0KLSAgICBzdGF0aWMg
UGFzc1JlZlB0cjxBcnJheTxUPj4gcnVudGltZUNhc3QoUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1
ZT4gdmFsdWUpCi0gICAgewotICAgICAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFycmF5Owot
ICAgICAgICBib29sIGNhc3RSZXMgPSB2YWx1ZS0+YXNBcnJheSgmYXJyYXkpOwotICAgICAgICBB
U1NFUlRfVU5VU0VEKGNhc3RSZXMsIGNhc3RSZXMpOwotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAg
ICAgICAgYXNzZXJ0Q29ycmVjdFZhbHVlKGFycmF5LmdldCgpKTsKLSNlbmRpZiAvLyAhQVNTRVJU
X0RJU0FCTEVECi0gICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihBcnJheTxUPikgPT0gc2l6
ZW9mKEluc3BlY3RvckFycmF5KSwgdHlwZV9jYXN0X3Byb2JsZW0pOwotICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8QXJyYXk8VD4qPihzdGF0aWNfY2FzdDxJbnNwZWN0b3JBcnJheUJhc2UqPihh
cnJheS5nZXQoKSkpOwotICAgIH0KLQotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICBzdGF0aWMg
dm9pZCBhc3NlcnRDb3JyZWN0VmFsdWUoSW5zcGVjdG9yVmFsdWUqIHZhbHVlKQotICAgIHsKLSAg
ICAgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBhcnJheTsKLSAgICAgICAgYm9vbCBjYXN0UmVz
ID0gdmFsdWUtPmFzQXJyYXkoJmFycmF5KTsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChjYXN0UmVz
LCBjYXN0UmVzKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFycmF5LT5sZW5n
dGgoKTsgaSsrKQotICAgICAgICAgICAgQXJyYXlJdGVtSGVscGVyPFQ+OjpUcmFpdHM6OnRlbXBs
YXRlIGFzc2VydENvcnJlY3RWYWx1ZTxUPihhcnJheS0+Z2V0KGkpLmdldCgpKTsKLSAgICB9Ci0j
ZW5kaWYgLy8gIUFTU0VSVF9ESVNBQkxFRAogfTsKIAogc3RydWN0IFN0cnVjdEl0ZW1UcmFpdHMg
ewpAQCAtMTc0LDE0ICsxMDMsNiBAQCBzdHJ1Y3QgU3RydWN0SXRlbVRyYWl0cyB7CiAgICAgewog
ICAgICAgICBhcnJheS0+cHVzaFZhbHVlKHZhbHVlKTsKICAgICB9Ci0KLSNpZiAhQVNTRVJUX0RJ
U0FCTEVECi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBzdGF0aWMgdm9pZCBhc3NlcnRD
b3JyZWN0VmFsdWUoSW5zcGVjdG9yVmFsdWUqIHZhbHVlKQotICAgIHsKLSAgICAgICAgVDo6YXNz
ZXJ0Q29ycmVjdFZhbHVlKHZhbHVlKTsKLSAgICB9Ci0jZW5kaWYgLy8gIUFTU0VSVF9ESVNBQkxF
RAogfTsKIAogdGVtcGxhdGU8PgpAQCAtMTkxLDE0ICsxMTIsNiBAQCBzdHJ1Y3QgQXJyYXlJdGVt
SGVscGVyPFN0cmluZz4gewogICAgICAgICB7CiAgICAgICAgICAgICBhcnJheS0+cHVzaFN0cmlu
Zyh2YWx1ZSk7CiAgICAgICAgIH0KLQotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVD4KLSAgICAgICAgc3RhdGljIHZvaWQgYXNzZXJ0Q29ycmVjdFZhbHVl
KEluc3BlY3RvclZhbHVlKiB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgUnVudGltZUNh
c3RIZWxwZXI6OmFzc2VydFR5cGU8SW5zcGVjdG9yVmFsdWU6OlR5cGVTdHJpbmc+KHZhbHVlKTsK
LSAgICAgICAgfQotI2VuZGlmIC8vICFBU1NFUlRfRElTQUJMRUQKICAgICB9OwogfTsKIApAQCAt
MjA5LDE0ICsxMjIsNiBAQCBzdHJ1Y3QgQXJyYXlJdGVtSGVscGVyPGludD4gewogICAgICAgICB7
CiAgICAgICAgICAgICBhcnJheS0+cHVzaEludCh2YWx1ZSk7CiAgICAgICAgIH0KLQotI2lmICFB
U1NFUlRfRElTQUJMRUQKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICAgICAgc3Rh
dGljIHZvaWQgYXNzZXJ0Q29ycmVjdFZhbHVlKEluc3BlY3RvclZhbHVlKiB2YWx1ZSkKLSAgICAg
ICAgewotICAgICAgICAgICAgUnVudGltZUNhc3RIZWxwZXI6OmFzc2VydEludCh2YWx1ZSk7Ci0g
ICAgICAgIH0KLSNlbmRpZiAvLyAhQVNTRVJUX0RJU0FCTEVECiAgICAgfTsKIH07CiAKQEAgLTIy
NywxNCArMTMyLDYgQEAgc3RydWN0IEFycmF5SXRlbUhlbHBlcjxkb3VibGU+IHsKICAgICAgICAg
ewogICAgICAgICAgICAgYXJyYXktPnB1c2hOdW1iZXIodmFsdWUpOwogICAgICAgICB9Ci0KLSNp
ZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgICAg
IHN0YXRpYyB2b2lkIGFzc2VydENvcnJlY3RWYWx1ZShJbnNwZWN0b3JWYWx1ZSogdmFsdWUpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIFJ1bnRpbWVDYXN0SGVscGVyOjphc3NlcnRUeXBlPEluc3Bl
Y3RvclZhbHVlOjpUeXBlTnVtYmVyPih2YWx1ZSk7Ci0gICAgICAgIH0KLSNlbmRpZiAvLyAhQVNT
RVJUX0RJU0FCTEVECiAgICAgfTsKIH07CiAKQEAgLTI0NSwxNCArMTQyLDYgQEAgc3RydWN0IEFy
cmF5SXRlbUhlbHBlcjxib29sPiB7CiAgICAgICAgIHsKICAgICAgICAgICAgIGFycmF5LT5wdXNo
Qm9vbGVhbih2YWx1ZSk7CiAgICAgICAgIH0KLQotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICAgICAgc3RhdGljIHZvaWQgYXNzZXJ0Q29ycmVj
dFZhbHVlKEluc3BlY3RvclZhbHVlKiB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgUnVu
dGltZUNhc3RIZWxwZXI6OmFzc2VydFR5cGU8SW5zcGVjdG9yVmFsdWU6OlR5cGVCb29sZWFuPih2
YWx1ZSk7Ci0gICAgICAgIH0KLSNlbmRpZiAvLyAhQVNTRVJUX0RJU0FCTEVECiAgICAgfTsKIH07
CiAKQEAgLTI2MywxNCArMTUyLDYgQEAgc3RydWN0IEFycmF5SXRlbUhlbHBlcjxJbnNwZWN0b3JW
YWx1ZT4gewogICAgICAgICB7CiAgICAgICAgICAgICBhcnJheS0+cHVzaFZhbHVlKHZhbHVlKTsK
ICAgICAgICAgfQotCi0jaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgotICAgICAgICBzdGF0aWMgdm9pZCBhc3NlcnRDb3JyZWN0VmFsdWUoSW5zcGVjdG9y
VmFsdWUqIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBSdW50aW1lQ2FzdEhlbHBlcjo6
YXNzZXJ0QW55KHZhbHVlKTsKLSAgICAgICAgfQotI2VuZGlmIC8vICFBU1NFUlRfRElTQUJMRUQK
ICAgICB9OwogfTsKIApAQCAtMjgxLDE0ICsxNjIsNiBAQCBzdHJ1Y3QgQXJyYXlJdGVtSGVscGVy
PEluc3BlY3Rvck9iamVjdD4gewogICAgICAgICB7CiAgICAgICAgICAgICBhcnJheS0+cHVzaFZh
bHVlKHZhbHVlKTsKICAgICAgICAgfQotCi0jaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgICAgICBzdGF0aWMgdm9pZCBhc3NlcnRDb3JyZWN0VmFs
dWUoSW5zcGVjdG9yVmFsdWUqIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBSdW50aW1l
Q2FzdEhlbHBlcjo6YXNzZXJ0VHlwZTxJbnNwZWN0b3JWYWx1ZTo6VHlwZU9iamVjdD4odmFsdWUp
OwotICAgICAgICB9Ci0jZW5kaWYgLy8gIUFTU0VSVF9ESVNBQkxFRAogICAgIH07CiB9OwogCkBA
IC0yOTksMTQgKzE3Miw2IEBAIHN0cnVjdCBBcnJheUl0ZW1IZWxwZXI8SW5zcGVjdG9yQXJyYXk+
IHsKICAgICAgICAgewogICAgICAgICAgICAgYXJyYXktPnB1c2hBcnJheSh2YWx1ZSk7CiAgICAg
ICAgIH0KLQotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VD4KLSAgICAgICAgc3RhdGljIHZvaWQgYXNzZXJ0Q29ycmVjdFZhbHVlKEluc3BlY3RvclZhbHVl
KiB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgUnVudGltZUNhc3RIZWxwZXI6OmFzc2Vy
dFR5cGU8SW5zcGVjdG9yVmFsdWU6OlR5cGVBcnJheT4odmFsdWUpOwotICAgICAgICB9Ci0jZW5k
aWYgLy8gIUFTU0VSVF9ESVNBQkxFRAogICAgIH07CiB9OwogCkBAIC0zMTcsMTkgKzE4Miw5MiBA
QCBzdHJ1Y3QgQXJyYXlJdGVtSGVscGVyPFR5cGVCdWlsZGVyOjpBcnJheTxUPj4gewogICAgICAg
ICB7CiAgICAgICAgICAgICBhcnJheS0+cHVzaFZhbHVlKHZhbHVlKTsKICAgICAgICAgfQorICAg
IH07Cit9OworCisvLyBIZWxwZXIgbWV0aG9kcyBmb3IgVHlwZUJ1aWxkZXIgYW5kIG90aGVyIElu
c3BlY3RvciB0eXBlcyBhcmUgcHJvdmlkZWQgYnkKKy8vIHNwZWNpYWxpemF0aW9ucyBvZiBCaW5k
aW5nVHJhaXRzPFQ+LiBTb21lIGFyZSBnZW5lcmF0ZWQgZm9yIHByb3RvY29sIHR5cGVzLgogCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3RydWN0IEJpbmRpbmdUcmFpdHMgeworICAgIHR5cGVkZWYg
VCBCaW5kaW5nVHlwZTsKKworICAgIHN0YXRpYyBJbnNwZWN0b3JWYWx1ZTo6VHlwZSB0eXBlVGFn
KCk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8VD4gcnVudGltZUNhc3QoUGFzc1JlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+KTsKICNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFM+Ci0gICAgICAgIHN0YXRpYyB2b2lkIGFzc2VydENvcnJlY3RWYWx1ZShJbnNwZWN0
b3JWYWx1ZSogdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFM6OmFzc2VydENvcnJlY3RW
YWx1ZSh2YWx1ZSk7Ci0gICAgICAgIH0KKyAgICBzdGF0aWMgdm9pZCBhc3NlcnRDb3JyZWN0VmFs
dWUoSW5zcGVjdG9yVmFsdWUqIHZhbHVlKTsKKyNlbmRpZiAvLyAhQVNTRVJUX0RJU0FCTEVECit9
OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBJbnNwZWN0b3JWYWx1ZTo6VHlwZSBUWVBFPgorc3Ry
dWN0IFByaW1pdGl2ZUJpbmRpbmdUcmFpdHMgeworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICBz
dGF0aWMgdm9pZCBhc3NlcnRDb3JyZWN0VmFsdWUoSW5zcGVjdG9yVmFsdWUqIHZhbHVlKQorICAg
IHsKKyAgICAgICAgQVNTRVJUKHZhbHVlLT50eXBlKCkgPT0gVFlQRSk7CisgICAgfQorICAgICNl
bmRpZiAvLyAhQVNTRVJUX0RJU0FCTEVECit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3Ry
dWN0IEJpbmRpbmdUcmFpdHM8VHlwZUJ1aWxkZXI6OkFycmF5PFQ+PiB7CisgICAgc3RhdGljIFBh
c3NSZWZQdHI8QXJyYXk8VD4+IHJ1bnRpbWVDYXN0KFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+
IHZhbHVlKQorICAgIHsKKyAgICAgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBhcnJheTsKKyAg
ICAgICAgYm9vbCBjYXN0UmVzID0gdmFsdWUtPmFzQXJyYXkoJmFycmF5KTsKKyAgICAgICAgQVNT
RVJUX1VOVVNFRChjYXN0UmVzLCBjYXN0UmVzKTsKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAg
ICAgIGFzc2VydENvcnJlY3RWYWx1ZShhcnJheS5nZXQoKSk7CisjZW5kaWYgLy8gIUFTU0VSVF9E
SVNBQkxFRAorICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoQXJyYXk8VD4pID09IHNpemVv
ZihJbnNwZWN0b3JBcnJheSksIHR5cGVfY2FzdF9wcm9ibGVtKTsKKyAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PEFycmF5PFQ+Kj4oc3RhdGljX2Nhc3Q8SW5zcGVjdG9yQXJyYXlCYXNlKj4oYXJy
YXkuZ2V0KCkpKTsKKyAgICB9CisKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgc3RhdGljIHZv
aWQgYXNzZXJ0Q29ycmVjdFZhbHVlKEluc3BlY3RvclZhbHVlKiB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJyYXk7CisgICAgICAgIGJvb2wgY2FzdFJlcyA9
IHZhbHVlLT5hc0FycmF5KCZhcnJheSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoY2FzdFJlcywg
Y2FzdFJlcyk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhcnJheS0+bGVuZ3Ro
KCk7IGkrKykKKyAgICAgICAgICAgIEJpbmRpbmdUcmFpdHM8VD46OmFzc2VydENvcnJlY3RWYWx1
ZShhcnJheS0+Z2V0KGkpLmdldCgpKTsKKyAgICB9CisjZW5kaWYgLy8gIUFTU0VSVF9ESVNBQkxF
RAorfTsKKwordGVtcGxhdGU8Pgorc3RydWN0IEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yVmFsdWU+
IHsKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgc3RhdGljIHZvaWQgYXNzZXJ0Q29ycmVjdFZh
bHVlKEluc3BlY3RvclZhbHVlKikKKyAgICB7CisgICAgfQorI2VuZGlmIC8vICFBU1NFUlRfRElT
QUJMRUQKK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yQXJy
YXk+IDogcHVibGljIFByaW1pdGl2ZUJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yQXJyYXksIEluc3Bl
Y3RvclZhbHVlOjpUeXBlOjpBcnJheT4geyB9OwordGVtcGxhdGU8PiBzdHJ1Y3QgQmluZGluZ1Ry
YWl0czxJbnNwZWN0b3JPYmplY3Q+IDogcHVibGljIFByaW1pdGl2ZUJpbmRpbmdUcmFpdHM8SW5z
cGVjdG9yT2JqZWN0LCBJbnNwZWN0b3JWYWx1ZTo6VHlwZTo6T2JqZWN0PiB7IH07Cit0ZW1wbGF0
ZTw+IHN0cnVjdCBCaW5kaW5nVHJhaXRzPFN0cmluZz4gOiBwdWJsaWMgUHJpbWl0aXZlQmluZGlu
Z1RyYWl0czxTdHJpbmcsIEluc3BlY3RvclZhbHVlOjpUeXBlOjpTdHJpbmc+IHsgfTsKK3RlbXBs
YXRlPD4gc3RydWN0IEJpbmRpbmdUcmFpdHM8Ym9vbD4gOiBwdWJsaWMgUHJpbWl0aXZlQmluZGlu
Z1RyYWl0czxib29sLCBJbnNwZWN0b3JWYWx1ZTo6VHlwZTo6Qm9vbGVhbj4geyB9OwordGVtcGxh
dGU8PiBzdHJ1Y3QgQmluZGluZ1RyYWl0czxkb3VibGU+IDogcHVibGljIFByaW1pdGl2ZUJpbmRp
bmdUcmFpdHM8ZG91YmxlLCBJbnNwZWN0b3JWYWx1ZTo6VHlwZTo6TnVtYmVyPiB7IH07CisKKy8v
IEZJWE1FOiBBZGQgYW4gSW5zcGVjdG9yOjpUeXBlIHRhZyBmb3IgaW50IHNvIHdlIGNhbiByZW1v
dmUgdGhpcyBzcGVjaWFsIGNhc2UuCit0ZW1wbGF0ZTw+CitzdHJ1Y3QgQmluZGluZ1RyYWl0czxp
bnQ+IHsKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgc3RhdGljIHZvaWQgYXNzZXJ0Q29ycmVj
dFZhbHVlKEluc3BlY3RvclZhbHVlKiB2YWx1ZSkKKyAgICB7CisgICAgICAgIGRvdWJsZSB2Owor
ICAgICAgICBib29sIGNhc3RSZXMgPSB2YWx1ZS0+YXNOdW1iZXIoJnYpOworICAgICAgICBBU1NF
UlRfVU5VU0VEKGNhc3RSZXMsIGNhc3RSZXMpOworICAgICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8
ZG91YmxlPihzdGF0aWNfY2FzdDxpbnQ+KHYpKSA9PSB2KTsKKyAgICB9CiAjZW5kaWYgLy8gIUFT
U0VSVF9ESVNBQkxFRAotICAgIH07CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBUeXBlQnVpbGRlcgog
Cit1c2luZyBUeXBlQnVpbGRlcjo6QmluZGluZ1RyYWl0czsKKwogfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCiAKICNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuY3BwCmluZGV4IDE5MmZiNmM5
ZDkwOTI0ZTYxN2M1ZDMyYzVkMmUzYmI5ZmNjZDNlMWEuLmUyZDAzNWRjMDlhMWJiZDg1ZjE3YWEw
MTA4ZTIwMTg2MTVmOWEyZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL0luc3BlY3RvclZhbHVlcy5jcHAKQEAgLTU3OSwxMyArNTc5LDEzIEBAIFN0cmluZyBJ
bnNwZWN0b3JWYWx1ZTo6dG9KU09OU3RyaW5nKCkgY29uc3QKIAogdm9pZCBJbnNwZWN0b3JWYWx1
ZTo6d3JpdGVKU09OKFN0cmluZ0J1aWxkZXIqIG91dHB1dCkgY29uc3QKIHsKLSAgICBBU1NFUlQo
bV90eXBlID09IFR5cGVOdWxsKTsKKyAgICBBU1NFUlQobV90eXBlID09IFR5cGU6Ok51bGwpOwog
ICAgIG91dHB1dC0+YXBwZW5kKG51bGxTdHJpbmcsIDQpOwogfQogCiBib29sIEluc3BlY3RvckJh
c2ljVmFsdWU6OmFzQm9vbGVhbihib29sKiBvdXRwdXQpIGNvbnN0CiB7Ci0gICAgaWYgKHR5cGUo
KSAhPSBUeXBlQm9vbGVhbikKKyAgICBpZiAodHlwZSgpICE9IFR5cGU6OkJvb2xlYW4pCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAqb3V0cHV0ID0gbV9ib29sVmFsdWU7CiAgICAgcmV0dXJu
IHRydWU7CkBAIC01OTMsNyArNTkzLDcgQEAgYm9vbCBJbnNwZWN0b3JCYXNpY1ZhbHVlOjphc0Jv
b2xlYW4oYm9vbCogb3V0cHV0KSBjb25zdAogCiBib29sIEluc3BlY3RvckJhc2ljVmFsdWU6OmFz
TnVtYmVyKGRvdWJsZSogb3V0cHV0KSBjb25zdAogewotICAgIGlmICh0eXBlKCkgIT0gVHlwZU51
bWJlcikKKyAgICBpZiAodHlwZSgpICE9IFR5cGU6Ok51bWJlcikKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICpvdXRwdXQgPSBtX2RvdWJsZVZhbHVlOwogICAgIHJldHVybiB0cnVlOwpAQCAt
NjAxLDcgKzYwMSw3IEBAIGJvb2wgSW5zcGVjdG9yQmFzaWNWYWx1ZTo6YXNOdW1iZXIoZG91Ymxl
KiBvdXRwdXQpIGNvbnN0CiAKIGJvb2wgSW5zcGVjdG9yQmFzaWNWYWx1ZTo6YXNOdW1iZXIoZmxv
YXQqIG91dHB1dCkgY29uc3QKIHsKLSAgICBpZiAodHlwZSgpICE9IFR5cGVOdW1iZXIpCisgICAg
aWYgKHR5cGUoKSAhPSBUeXBlOjpOdW1iZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAq
b3V0cHV0ID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fZG91YmxlVmFsdWUpOwogICAgIHJldHVybiB0
cnVlOwpAQCAtNjA5LDcgKzYwOSw3IEBAIGJvb2wgSW5zcGVjdG9yQmFzaWNWYWx1ZTo6YXNOdW1i
ZXIoZmxvYXQqIG91dHB1dCkgY29uc3QKIAogYm9vbCBJbnNwZWN0b3JCYXNpY1ZhbHVlOjphc051
bWJlcihpbnQqIG91dHB1dCkgY29uc3QKIHsKLSAgICBpZiAodHlwZSgpICE9IFR5cGVOdW1iZXIp
CisgICAgaWYgKHR5cGUoKSAhPSBUeXBlOjpOdW1iZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAqb3V0cHV0ID0gc3RhdGljX2Nhc3Q8aW50PihtX2RvdWJsZVZhbHVlKTsKICAgICByZXR1
cm4gdHJ1ZTsKQEAgLTYxNyw3ICs2MTcsNyBAQCBib29sIEluc3BlY3RvckJhc2ljVmFsdWU6OmFz
TnVtYmVyKGludCogb3V0cHV0KSBjb25zdAogCiBib29sIEluc3BlY3RvckJhc2ljVmFsdWU6OmFz
TnVtYmVyKHVuc2lnbmVkKiBvdXRwdXQpIGNvbnN0CiB7Ci0gICAgaWYgKHR5cGUoKSAhPSBUeXBl
TnVtYmVyKQorICAgIGlmICh0eXBlKCkgIT0gVHlwZTo6TnVtYmVyKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgKm91dHB1dCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2RvdWJsZVZhbHVl
KTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTYyNSw3ICs2MjUsNyBAQCBib29sIEluc3BlY3RvckJh
c2ljVmFsdWU6OmFzTnVtYmVyKHVuc2lnbmVkKiBvdXRwdXQpIGNvbnN0CiAKIGJvb2wgSW5zcGVj
dG9yQmFzaWNWYWx1ZTo6YXNOdW1iZXIobG9uZyogb3V0cHV0KSBjb25zdAogewotICAgIGlmICh0
eXBlKCkgIT0gVHlwZU51bWJlcikKKyAgICBpZiAodHlwZSgpICE9IFR5cGU6Ok51bWJlcikKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICpvdXRwdXQgPSBzdGF0aWNfY2FzdDxsb25nPihtX2Rv
dWJsZVZhbHVlKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTYzMyw3ICs2MzMsNyBAQCBib29sIElu
c3BlY3RvckJhc2ljVmFsdWU6OmFzTnVtYmVyKGxvbmcqIG91dHB1dCkgY29uc3QKIAogYm9vbCBJ
bnNwZWN0b3JCYXNpY1ZhbHVlOjphc051bWJlcihsb25nIGxvbmcqIG91dHB1dCkgY29uc3QKIHsK
LSAgICBpZiAodHlwZSgpICE9IFR5cGVOdW1iZXIpCisgICAgaWYgKHR5cGUoKSAhPSBUeXBlOjpO
dW1iZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAqb3V0cHV0ID0gc3RhdGljX2Nhc3Q8
bG9uZyBsb25nPihtX2RvdWJsZVZhbHVlKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTY0MSw3ICs2
NDEsNyBAQCBib29sIEluc3BlY3RvckJhc2ljVmFsdWU6OmFzTnVtYmVyKGxvbmcgbG9uZyogb3V0
cHV0KSBjb25zdAogCiBib29sIEluc3BlY3RvckJhc2ljVmFsdWU6OmFzTnVtYmVyKHVuc2lnbmVk
IGxvbmcqIG91dHB1dCkgY29uc3QKIHsKLSAgICBpZiAodHlwZSgpICE9IFR5cGVOdW1iZXIpCisg
ICAgaWYgKHR5cGUoKSAhPSBUeXBlOjpOdW1iZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAqb3V0cHV0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4obV9kb3VibGVWYWx1ZSk7CiAg
ICAgcmV0dXJuIHRydWU7CkBAIC02NDksNyArNjQ5LDcgQEAgYm9vbCBJbnNwZWN0b3JCYXNpY1Zh
bHVlOjphc051bWJlcih1bnNpZ25lZCBsb25nKiBvdXRwdXQpIGNvbnN0CiAKIGJvb2wgSW5zcGVj
dG9yQmFzaWNWYWx1ZTo6YXNOdW1iZXIodW5zaWduZWQgbG9uZyBsb25nKiBvdXRwdXQpIGNvbnN0
CiB7Ci0gICAgaWYgKHR5cGUoKSAhPSBUeXBlTnVtYmVyKQorICAgIGlmICh0eXBlKCkgIT0gVHlw
ZTo6TnVtYmVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgKm91dHB1dCA9IHN0YXRpY19j
YXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4obV9kb3VibGVWYWx1ZSk7CiAgICAgcmV0dXJuIHRydWU7
CkBAIC02NTcsMTMgKzY1NywxMyBAQCBib29sIEluc3BlY3RvckJhc2ljVmFsdWU6OmFzTnVtYmVy
KHVuc2lnbmVkIGxvbmcgbG9uZyogb3V0cHV0KSBjb25zdAogCiB2b2lkIEluc3BlY3RvckJhc2lj
VmFsdWU6OndyaXRlSlNPTihTdHJpbmdCdWlsZGVyKiBvdXRwdXQpIGNvbnN0CiB7Ci0gICAgQVNT
RVJUKHR5cGUoKSA9PSBUeXBlQm9vbGVhbiB8fCB0eXBlKCkgPT0gVHlwZU51bWJlcik7Ci0gICAg
aWYgKHR5cGUoKSA9PSBUeXBlQm9vbGVhbikgeworICAgIEFTU0VSVCh0eXBlKCkgPT0gVHlwZTo6
Qm9vbGVhbiB8fCB0eXBlKCkgPT0gVHlwZTo6TnVtYmVyKTsKKyAgICBpZiAodHlwZSgpID09IFR5
cGU6OkJvb2xlYW4pIHsKICAgICAgICAgaWYgKG1fYm9vbFZhbHVlKQogICAgICAgICAgICAgb3V0
cHV0LT5hcHBlbmQodHJ1ZVN0cmluZywgNCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG91
dHB1dC0+YXBwZW5kKGZhbHNlU3RyaW5nLCA1KTsKLSAgICB9IGVsc2UgaWYgKHR5cGUoKSA9PSBU
eXBlTnVtYmVyKSB7CisgICAgfSBlbHNlIGlmICh0eXBlKCkgPT0gVHlwZTo6TnVtYmVyKSB7CiAg
ICAgICAgIE51bWJlclRvTFN0cmluZ0J1ZmZlciBidWZmZXI7CiAgICAgICAgIGlmICghc3RkOjpp
c2Zpbml0ZShtX2RvdWJsZVZhbHVlKSkgewogICAgICAgICAgICAgb3V0cHV0LT5hcHBlbmQobnVs
bFN0cmluZywgNCk7CkBAIC02OTMsNyArNjkzLDcgQEAgYm9vbCBJbnNwZWN0b3JTdHJpbmc6OmFz
U3RyaW5nKFN0cmluZyogb3V0cHV0KSBjb25zdAogCiB2b2lkIEluc3BlY3RvclN0cmluZzo6d3Jp
dGVKU09OKFN0cmluZ0J1aWxkZXIqIG91dHB1dCkgY29uc3QKIHsKLSAgICBBU1NFUlQodHlwZSgp
ID09IFR5cGVTdHJpbmcpOworICAgIEFTU0VSVCh0eXBlKCkgPT0gVHlwZTo6U3RyaW5nKTsKICAg
ICBkb3VibGVRdW90ZVN0cmluZyhtX3N0cmluZ1ZhbHVlLCBvdXRwdXQpOwogfQogCkBAIC03ODYs
NyArNzg2LDcgQEAgdm9pZCBJbnNwZWN0b3JPYmplY3RCYXNlOjp3cml0ZUpTT04oU3RyaW5nQnVp
bGRlciogb3V0cHV0KSBjb25zdAogfQogCiBJbnNwZWN0b3JPYmplY3RCYXNlOjpJbnNwZWN0b3JP
YmplY3RCYXNlKCkKLSAgICA6IEluc3BlY3RvclZhbHVlKFR5cGVPYmplY3QpCisgICAgOiBJbnNw
ZWN0b3JWYWx1ZShUeXBlOjpPYmplY3QpCiAgICAgLCBtX2RhdGEoKQogICAgICwgbV9vcmRlcigp
CiB7CkBAIC04MjEsNyArODIxLDcgQEAgdm9pZCBJbnNwZWN0b3JBcnJheUJhc2U6OndyaXRlSlNP
TihTdHJpbmdCdWlsZGVyKiBvdXRwdXQpIGNvbnN0CiB9CiAKIEluc3BlY3RvckFycmF5QmFzZTo6
SW5zcGVjdG9yQXJyYXlCYXNlKCkKLSAgICA6IEluc3BlY3RvclZhbHVlKFR5cGVBcnJheSkKKyAg
ICA6IEluc3BlY3RvclZhbHVlKFR5cGU6OkFycmF5KQogICAgICwgbV9kYXRhKCkKIHsKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVz
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oCmlu
ZGV4IDNiODYxNjY0ZGEzMzc5ZGViNTY4OWJjMDAxMzRkZTI2ZWJhNjczZGEuLmFiZDlhNzkzNTYy
OTgxMzQzMDUzNjBiMzcwMGFiOTM4M2FjN2JkNTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaApAQCAtNDcsMjMgKzQ3LDIzIEBAIGNs
YXNzIEpTX0VYUE9SVF9QUklWQVRFIEluc3BlY3RvclZhbHVlIDogcHVibGljIFJlZkNvdW50ZWQ8
SW5zcGVjdG9yVmFsdWU+IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3QgaW50IG1heERlcHRo
ID0gMTAwMDsKIAotICAgIEluc3BlY3RvclZhbHVlKCkgOiBtX3R5cGUoVHlwZU51bGwpIHsgfQor
ICAgIEluc3BlY3RvclZhbHVlKCkgOiBtX3R5cGUoVHlwZTo6TnVsbCkgeyB9CiAgICAgdmlydHVh
bCB+SW5zcGVjdG9yVmFsdWUoKSB7IH0KIAogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rv
clZhbHVlPiBudWxsKCk7CiAKLSAgICB0eXBlZGVmIGVudW0gewotICAgICAgICBUeXBlTnVsbCA9
IDAsCi0gICAgICAgIFR5cGVCb29sZWFuLAotICAgICAgICBUeXBlTnVtYmVyLAotICAgICAgICBU
eXBlU3RyaW5nLAotICAgICAgICBUeXBlT2JqZWN0LAotICAgICAgICBUeXBlQXJyYXkKLSAgICB9
IFR5cGU7CisgICAgZW51bSBjbGFzcyBUeXBlIHsKKyAgICAgICAgTnVsbCA9IDAsCisgICAgICAg
IEJvb2xlYW4sCisgICAgICAgIE51bWJlciwKKyAgICAgICAgU3RyaW5nLAorICAgICAgICBPYmpl
Y3QsCisgICAgICAgIEFycmF5CisgICAgfTsKIAogICAgIFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0
dXJuIG1fdHlwZTsgfQogCi0gICAgYm9vbCBpc051bGwoKSBjb25zdCB7IHJldHVybiBtX3R5cGUg
PT0gVHlwZU51bGw7IH0KKyAgICBib29sIGlzTnVsbCgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSA9
PSBUeXBlOjpOdWxsOyB9CiAKICAgICB2aXJ0dWFsIGJvb2wgYXNCb29sZWFuKGJvb2wqIG91dHB1
dCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGFzTnVtYmVyKGRvdWJsZSogb3V0cHV0KSBjb25z
dDsKQEAgLTExMyw5ICsxMTMsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHdyaXRlSlNP
TihTdHJpbmdCdWlsZGVyKiBvdXRwdXQpIGNvbnN0IG92ZXJyaWRlOwogCiBwcml2YXRlOgotICAg
IGV4cGxpY2l0IEluc3BlY3RvckJhc2ljVmFsdWUoYm9vbCB2YWx1ZSkgOiBJbnNwZWN0b3JWYWx1
ZShUeXBlQm9vbGVhbiksIG1fYm9vbFZhbHVlKHZhbHVlKSB7IH0KLSAgICBleHBsaWNpdCBJbnNw
ZWN0b3JCYXNpY1ZhbHVlKGludCB2YWx1ZSkgOiBJbnNwZWN0b3JWYWx1ZShUeXBlTnVtYmVyKSwg
bV9kb3VibGVWYWx1ZSgoZG91YmxlKXZhbHVlKSB7IH0KLSAgICBleHBsaWNpdCBJbnNwZWN0b3JC
YXNpY1ZhbHVlKGRvdWJsZSB2YWx1ZSkgOiBJbnNwZWN0b3JWYWx1ZShUeXBlTnVtYmVyKSwgbV9k
b3VibGVWYWx1ZSh2YWx1ZSkgeyB9CisgICAgZXhwbGljaXQgSW5zcGVjdG9yQmFzaWNWYWx1ZShi
b29sIHZhbHVlKSA6IEluc3BlY3RvclZhbHVlKFR5cGU6OkJvb2xlYW4pLCBtX2Jvb2xWYWx1ZSh2
YWx1ZSkgeyB9CisgICAgZXhwbGljaXQgSW5zcGVjdG9yQmFzaWNWYWx1ZShpbnQgdmFsdWUpIDog
SW5zcGVjdG9yVmFsdWUoVHlwZTo6TnVtYmVyKSwgbV9kb3VibGVWYWx1ZSgoZG91YmxlKXZhbHVl
KSB7IH0KKyAgICBleHBsaWNpdCBJbnNwZWN0b3JCYXNpY1ZhbHVlKGRvdWJsZSB2YWx1ZSkgOiBJ
bnNwZWN0b3JWYWx1ZShUeXBlOjpOdW1iZXIpLCBtX2RvdWJsZVZhbHVlKHZhbHVlKSB7IH0KIAog
ICAgIHVuaW9uIHsKICAgICAgICAgYm9vbCBtX2Jvb2xWYWx1ZTsKQEAgLTEzMyw4ICsxMzMsOCBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHdyaXRlSlNPTihTdHJpbmdCdWlsZGVyKiBvdXRw
dXQpIGNvbnN0IG92ZXJyaWRlOwogCiBwcml2YXRlOgotICAgIGV4cGxpY2l0IEluc3BlY3RvclN0
cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKSA6IEluc3BlY3RvclZhbHVlKFR5cGVTdHJpbmcpLCBt
X3N0cmluZ1ZhbHVlKHZhbHVlKSB7IH0KLSAgICBleHBsaWNpdCBJbnNwZWN0b3JTdHJpbmcoY29u
c3QgY2hhciogdmFsdWUpIDogSW5zcGVjdG9yVmFsdWUoVHlwZVN0cmluZyksIG1fc3RyaW5nVmFs
dWUodmFsdWUpIHsgfQorICAgIGV4cGxpY2l0IEluc3BlY3RvclN0cmluZyhjb25zdCBTdHJpbmcm
IHZhbHVlKSA6IEluc3BlY3RvclZhbHVlKFR5cGU6OlN0cmluZyksIG1fc3RyaW5nVmFsdWUodmFs
dWUpIHsgfQorICAgIGV4cGxpY2l0IEluc3BlY3RvclN0cmluZyhjb25zdCBjaGFyKiB2YWx1ZSkg
OiBJbnNwZWN0b3JWYWx1ZShUeXBlOjpTdHJpbmcpLCBtX3N0cmluZ1ZhbHVlKHZhbHVlKSB7IH0K
IAogICAgIFN0cmluZyBtX3N0cmluZ1ZhbHVlOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRGVidWdnZXJB
Z2VudC5jcHAKaW5kZXggMjMxMzJmYzIwZWFjZDFiZWUxMGQzNGU3M2Y2YzA4YWI5Y2M4MmFmOC4u
NmExZmVjN2FiOTdjNzZmZmZmYThiYTUxZGFmZGM3ZDk1NGRhOTQxZCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRGVidWdnZXJBZ2Vu
dC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVj
dG9yRGVidWdnZXJBZ2VudC5jcHAKQEAgLTQyOSw3ICs0MjksNyBAQCB2b2lkIEluc3BlY3RvckRl
YnVnZ2VyQWdlbnQ6OmdldEZ1bmN0aW9uRGV0YWlscyhFcnJvclN0cmluZyogZXJyb3JTdHJpbmcs
IGNvbnN0CiAgICAgaW5qZWN0ZWRTY3JpcHQuZ2V0RnVuY3Rpb25EZXRhaWxzKGVycm9yU3RyaW5n
LCBmdW5jdGlvbklkLCAmZGV0YWlscyk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2Vu
dDo6c2NoZWR1bGVQYXVzZU9uTmV4dFN0YXRlbWVudChJbnNwZWN0b3JEZWJ1Z2dlckZyb250ZW5k
RGlzcGF0Y2hlcjo6UmVhc29uOjpFbnVtIGJyZWFrUmVhc29uLCBQYXNzUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gZGF0YSkKK3ZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2NoZWR1bGVQYXVz
ZU9uTmV4dFN0YXRlbWVudChJbnNwZWN0b3JEZWJ1Z2dlckZyb250ZW5kRGlzcGF0Y2hlcjo6UmVh
c29uIGJyZWFrUmVhc29uLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZGF0YSkKIHsKICAg
ICBpZiAobV9qYXZhU2NyaXB0UGF1c2VTY2hlZHVsZWQpCiAgICAgICAgIHJldHVybjsKQEAgLTY3
OCw3ICs2NzgsNyBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpZENvbnRpbnVlKCkK
ICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+cmVzdW1lZCgpOwogfQogCi12b2lkIEluc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQ6OmJyZWFrUHJvZ3JhbShJbnNwZWN0b3JEZWJ1Z2dlckZyb250ZW5kRGlz
cGF0Y2hlcjo6UmVhc29uOjpFbnVtIGJyZWFrUmVhc29uLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gZGF0YSkKK3ZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6YnJlYWtQcm9ncmFtKElu
c3BlY3RvckRlYnVnZ2VyRnJvbnRlbmREaXNwYXRjaGVyOjpSZWFzb24gYnJlYWtSZWFzb24sIFBh
c3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBkYXRhKQogewogICAgIG1fYnJlYWtSZWFzb24gPSBi
cmVha1JlYXNvbjsKICAgICBtX2JyZWFrQXV4RGF0YSA9IGRhdGE7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JEZWJ1
Z2dlckFnZW50LmgKaW5kZXggZWIyMjcwYTljZTI0MjgxM2Y5ZDRlZTU1OTAwZmY4M2E5OTZmNDA2
Yi4uODQ3ZTc4YjYwZjVkY2NmOTY5ZmIzZDAxMTNlZDI1MjNlYTAyN2QzZSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRGVidWdnZXJB
Z2VudC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3Bl
Y3RvckRlYnVnZ2VyQWdlbnQuaApAQCAtOTEsOSArOTEsOSBAQCBwdWJsaWM6CiAgICAgCiAgICAg
dm9pZCBoYW5kbGVDb25zb2xlQXNzZXJ0KCk7CiAKLSAgICB2b2lkIHNjaGVkdWxlUGF1c2VPbk5l
eHRTdGF0ZW1lbnQoSW5zcGVjdG9yRGVidWdnZXJGcm9udGVuZERpc3BhdGNoZXI6OlJlYXNvbjo6
RW51bSBicmVha1JlYXNvbiwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGRhdGEpOworICAg
IHZvaWQgc2NoZWR1bGVQYXVzZU9uTmV4dFN0YXRlbWVudChJbnNwZWN0b3JEZWJ1Z2dlckZyb250
ZW5kRGlzcGF0Y2hlcjo6UmVhc29uIGJyZWFrUmVhc29uLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gZGF0YSk7CiAgICAgdm9pZCBjYW5jZWxQYXVzZU9uTmV4dFN0YXRlbWVudCgpOwotICAg
IHZvaWQgYnJlYWtQcm9ncmFtKEluc3BlY3RvckRlYnVnZ2VyRnJvbnRlbmREaXNwYXRjaGVyOjpS
ZWFzb246OkVudW0gYnJlYWtSZWFzb24sIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBkYXRh
KTsKKyAgICB2b2lkIGJyZWFrUHJvZ3JhbShJbnNwZWN0b3JEZWJ1Z2dlckZyb250ZW5kRGlzcGF0
Y2hlcjo6UmVhc29uIGJyZWFrUmVhc29uLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZGF0
YSk7CiAgICAgdm9pZCBzY3JpcHRFeGVjdXRpb25CbG9ja2VkQnlDU1AoY29uc3QgU3RyaW5nJiBk
aXJlY3RpdmVUZXh0KTsKIAogICAgIGNsYXNzIExpc3RlbmVyIHsKQEAgLTE1OSw3ICsxNTksNyBA
QCBwcml2YXRlOgogICAgIEJyZWFrcG9pbnRJZGVudGlmaWVyVG9EZWJ1Z1NlcnZlckJyZWFrcG9p
bnRJRHNNYXAgbV9icmVha3BvaW50SWRlbnRpZmllclRvRGVidWdTZXJ2ZXJCcmVha3BvaW50SURz
OwogICAgIEJyZWFrcG9pbnRJZGVudGlmaWVyVG9CcmVha3BvaW50TWFwIG1famF2YVNjcmlwdEJy
ZWFrcG9pbnRzOwogICAgIEpTQzo6QnJlYWtwb2ludElEIG1fY29udGludWVUb0xvY2F0aW9uQnJl
YWtwb2ludElEOwotICAgIEluc3BlY3RvckRlYnVnZ2VyRnJvbnRlbmREaXNwYXRjaGVyOjpSZWFz
b246OkVudW0gbV9icmVha1JlYXNvbjsKKyAgICBJbnNwZWN0b3JEZWJ1Z2dlckZyb250ZW5kRGlz
cGF0Y2hlcjo6UmVhc29uIG1fYnJlYWtSZWFzb247CiAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gbV9icmVha0F1eERhdGE7CiAgICAgYm9vbCBtX2VuYWJsZWQ7CiAgICAgYm9vbCBtX2phdmFT
Y3JpcHRQYXVzZVNjaGVkdWxlZDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclJ1bnRpbWVBZ2VudC5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JSdW50aW1lQWdlbnQuY3BwCmluZGV4
IGQ4ZDY5YTI1NDE3MjExYWZiODc2YzAwZGViNDg4NDM1ZmNkMzhlM2EuLmE5MzFiNDNkMGNlMmZj
NzZjZWM4ZWExZGEzN2UyOWRlOWU0ZThmODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclJ1bnRpbWVBZ2VudC5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUnVudGltZUFnZW50
LmNwcApAQCAtODIsNyArODIsNyBAQCBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlR5cGVC
dWlsZGVyOjpSdW50aW1lOjpFcnJvclJhbmdlPiBidWlsZEVycm9yUmFuZ2VPYgogICAgIHJldHVy
biByZXN1bHQucmVsZWFzZSgpOwogfQogCi12b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6cGFy
c2UoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIEluc3BlY3Rvcjo6VHlw
ZUJ1aWxkZXI6OlJ1bnRpbWU6OlN5bnRheEVycm9yVHlwZTo6RW51bSogcmVzdWx0LCBJbnNwZWN0
b3I6OlR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8U3RyaW5nPiogbWVzc2FnZSwgUmVmUHRyPEluc3Bl
Y3Rvcjo6VHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OkVycm9yUmFuZ2U+JiByYW5nZSkKK3ZvaWQgSW5z
cGVjdG9yUnVudGltZUFnZW50OjpwYXJzZShFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgZXhw
cmVzc2lvbiwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UnVudGltZTo6U3ludGF4RXJyb3JUeXBl
KiByZXN1bHQsIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6Ok9wdE91dHB1dDxTdHJpbmc+KiBtZXNz
YWdlLCBSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UnVudGltZTo6RXJyb3JSYW5nZT4m
IHJhbmdlKQogewogICAgIFZNJiB2bSA9IGdsb2JhbFZNKCk7CiAgICAgSlNMb2NrSG9sZGVyIGxv
Y2sodm0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2Vu
dHMvSW5zcGVjdG9yUnVudGltZUFnZW50LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL2FnZW50cy9JbnNwZWN0b3JSdW50aW1lQWdlbnQuaAppbmRleCBkNmMxZWVhMjAwNDFlNzY4
MWVjYTE5Zjg3NjE3NWE3ODEyYjBhZjI0Li45YjE5NzM5YTBjMTk3YWMwMzY2MjhjOGNmNWMxYTFl
YzQyNjQyYzY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2Fn
ZW50cy9JbnNwZWN0b3JSdW50aW1lQWdlbnQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JSdW50aW1lQWdlbnQuaApAQCAtNTksNyArNTksNyBA
QCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgZW5hYmxlKEVycm9yU3RyaW5nKikgb3ZlcnJp
ZGUgeyBtX2VuYWJsZWQgPSB0cnVlOyB9CiAgICAgdmlydHVhbCB2b2lkIGRpc2FibGUoRXJyb3JT
dHJpbmcqKSBvdmVycmlkZSB7IG1fZW5hYmxlZCA9IGZhbHNlOyB9Ci0gICAgdmlydHVhbCB2b2lk
IHBhcnNlKEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBJbnNwZWN0b3I6
OlR5cGVCdWlsZGVyOjpSdW50aW1lOjpTeW50YXhFcnJvclR5cGU6OkVudW0qIHJlc3VsdCwgSW5z
cGVjdG9yOjpUeXBlQnVpbGRlcjo6T3B0T3V0cHV0PFN0cmluZz4qIG1lc3NhZ2UsIFJlZlB0cjxJ
bnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpSdW50aW1lOjpFcnJvclJhbmdlPiYpIG92ZXJyaWRlIGZp
bmFsOworICAgIHZpcnR1YWwgdm9pZCBwYXJzZShFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYg
ZXhwcmVzc2lvbiwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UnVudGltZTo6U3ludGF4RXJyb3JU
eXBlKiByZXN1bHQsIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6Ok9wdE91dHB1dDxTdHJpbmc+KiBt
ZXNzYWdlLCBSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UnVudGltZTo6RXJyb3JSYW5n
ZT4mKSBvdmVycmlkZSBmaW5hbDsKICAgICB2aXJ0dWFsIHZvaWQgZXZhbHVhdGUoRXJyb3JTdHJp
bmcqLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIGNvbnN0IFN0cmluZyogb2JqZWN0R3JvdXAs
IGNvbnN0IGJvb2wqIGluY2x1ZGVDb21tYW5kTGluZUFQSSwgY29uc3QgYm9vbCogZG9Ob3RQYXVz
ZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xlLCBjb25zdCBpbnQqIGV4ZWN1dGlvbkNvbnRleHRJ
ZCwgY29uc3QgYm9vbCogcmV0dXJuQnlWYWx1ZSwgY29uc3QgYm9vbCogZ2VuZXJhdGVQcmV2aWV3
LCBSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYg
cmVzdWx0LCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8Ym9vbD4qIHdhc1Rocm93
bikgb3ZlcnJpZGUgZmluYWw7CiAgICAgdmlydHVhbCB2b2lkIGNhbGxGdW5jdGlvbk9uKEVycm9y
U3RyaW5nKiwgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwgY29uc3QgU3RyaW5nJiBleHByZXNzaW9u
LCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheT4qIG9wdGlvbmFsQXJndW1l
bnRzLCBjb25zdCBib29sKiBkb05vdFBhdXNlT25FeGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUsIGNv
bnN0IGJvb2wqIHJldHVybkJ5VmFsdWUsIGNvbnN0IGJvb2wqIGdlbmVyYXRlUHJldmlldywgUmVm
UHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3Vs
dCwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6T3B0T3V0cHV0PGJvb2w+KiB3YXNUaHJvd24pIG92
ZXJyaWRlIGZpbmFsOwogICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlT2JqZWN0KEVycm9yU3RyaW5n
KiwgY29uc3QgRXJyb3JTdHJpbmcmIG9iamVjdElkKSBvdmVycmlkZSBmaW5hbDsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9Db2RlR2VuZXJhdG9y
SW5zcGVjdG9yLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL0Nv
ZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDkx
ZmE4YzljMmQ3Yjk0OTljYjA4ZDVlZmE0MmE5MjI0OTI2NTMxODQuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKKysrIC9kZXYvbnVsbApAQCAt
MSwyNjE0ICswLDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgotIyBDb3B5cmlnaHQgKGMpIDIw
MTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgQ29weXJpZ2h0IChjKSAyMDEy
IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBDb3B5cmlnaHQgKGMp
IDIwMTMgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMg
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQotIyBtZXQ6Ci0jCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQot
IyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCi0jIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSMgZGlzdHJpYnV0aW9uLgotIyAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0jIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCi0jIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKLSMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0jIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCi0jIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAotIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotIyBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKLSMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LQotaW1wb3J0IG9zLnBhdGgKLWltcG9ydCBzeXMKLWltcG9ydCBzdHJpbmcKLWltcG9ydCBvcHRw
YXJzZQotaW1wb3J0IHJlCi10cnk6Ci0gICAgaW1wb3J0IGpzb24KLWV4Y2VwdCBJbXBvcnRFcnJv
cjoKLSAgICBpbXBvcnQgc2ltcGxlanNvbiBhcyBqc29uCi0KLWltcG9ydCBDb2RlR2VuZXJhdG9y
SW5zcGVjdG9yU3RyaW5ncwotCi0KLURPTUFJTl9ERUZJTkVfTkFNRV9NQVAgPSB7Ci0gICAgIkRh
dGFiYXNlIjogIlNRTF9EQVRBQkFTRSIsCi0gICAgIkluZGV4ZWREQiI6ICJJTkRFWEVEX0RBVEFC
QVNFIiwKLSAgICAiUmVwbGF5IjogIldFQl9SRVBMQVkiLAotfQotCi0KLSMgTWFudWFsbHktZmls
bGVkIG1hcCBvZiB0eXBlIG5hbWUgcmVwbGFjZW1lbnRzLgotVFlQRV9OQU1FX0ZJWF9NQVAgPSB7
Ci0gICAgIlJHQkEiOiAiUmdiYSIsICAjIFJHQkEgaXMgcmVwb3J0ZWQgdG8gYmUgY29uZmxpY3Rp
bmcgd2l0aCBhIGRlZmluZSBuYW1lIGluIFdpbmRvd3MgQ0UuCi0gICAgIiI6ICJFbXB0eSIsCi19
Ci0KLQotVFlQRVNfV0lUSF9SVU5USU1FX0NBU1RfU0VUID0gZnJvemVuc2V0KFsiUnVudGltZS5S
ZW1vdGVPYmplY3QiLCAiUnVudGltZS5Qcm9wZXJ0eURlc2NyaXB0b3IiLCAiUnVudGltZS5JbnRl
cm5hbFByb3BlcnR5RGVzY3JpcHRvciIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJEZWJ1Z2dlci5GdW5jdGlvbkRldGFpbHMiLCAiRGVidWdnZXIuQ2FsbEZyYW1l
IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNhbnZhcy5UcmFj
ZUxvZyIsICJDYW52YXMuUmVzb3VyY2VJbmZvIiwgIkNhbnZhcy5SZXNvdXJjZVN0YXRlIiwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBUaGlzIHNob3VsZCBiZSBh
IHRlbXBvcmFyeSBoYWNrLiBUaW1lbGluZUV2ZW50IHNob3VsZCBiZSBjcmVhdGVkIHZpYSBnZW5l
cmF0ZWQgQysrIEFQSS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IlRpbWVsaW5lLlRpbWVsaW5lRXZlbnQiXSkKLQotVFlQRVNfV0lUSF9PUEVOX0ZJRUxEX0xJU1Rf
U0VUID0gZnJvemVuc2V0KFsiVGltZWxpbmUuVGltZWxpbmVFdmVudCIsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgSW5zcGVjdG9yU3R5bGVTaGVldCBub3Qg
b25seSBjcmVhdGVzIHRoaXMgcHJvcGVydHkgYnV0IHdhbnRzIHRvIHJlYWQgaXQgYW5kIG1vZGlm
eSBpdC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNTUy5D
U1NQcm9wZXJ0eSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICMgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudCBuZWVkcyB0byB1cGRhdGUgbWltZS10eXBlLgotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTmV0d29yay5SZXNwb25z
ZSJdKQotCi1FWEFDVExZX0lOVF9TVVBQT1JURUQgPSBGYWxzZQotCi1JTlNQRUNUT1JfVFlQRVNf
R0VORVJBVE9SX0NPTkZJR19NQVAgPSB7Ci0gICAgIkphdmFTY3JpcHQiOiB7Ci0gICAgICAgICJw
cmVmaXgiOiAiSlMiLAotICAgICAgICAidHlwZWJ1aWxkZXJfZGVwZW5kZW5jeSI6ICIiLAotICAg
ICAgICAiZXhwb3J0X21hY3JvIjogIkpTX0VYUE9SVF9QUklWQVRFIiwKLSAgICB9LAotICAgICJX
ZWIiOiB7Ci0gICAgICAgICJwcmVmaXgiOiAiV2ViIiwKLSAgICAgICAgInR5cGVidWlsZGVyX2Rl
cGVuZGVuY3kiOiAiI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JKU1R5cGVCdWlsZGVycy5o
PiIsCi0gICAgICAgICJleHBvcnRfbWFjcm8iOiAiIiwKLSAgICB9LAotfQotCi1jbWRsaW5lX3Bh
cnNlciA9IG9wdHBhcnNlLk9wdGlvblBhcnNlcih1c2FnZT0idXNhZ2U6ICVwcm9nIFtvcHRpb25z
XSA8SW5zcGVjdG9yLmpzb24+IikKLWNtZGxpbmVfcGFyc2VyLmFkZF9vcHRpb24oIi0tb3V0cHV0
X2hfZGlyIikKLWNtZGxpbmVfcGFyc2VyLmFkZF9vcHRpb24oIi0tb3V0cHV0X2NwcF9kaXIiKQot
Y21kbGluZV9wYXJzZXIuYWRkX29wdGlvbigiLS1vdXRwdXRfanNfZGlyIikKLWNtZGxpbmVfcGFy
c2VyLmFkZF9vcHRpb24oIi0tb3V0cHV0X3R5cGUiKSAgIyBKYXZhU2NyaXB0LCBXZWIKLWNtZGxp
bmVfcGFyc2VyLmFkZF9vcHRpb24oIi0td3JpdGVfYWx3YXlzIiwgYWN0aW9uPSJzdG9yZV90cnVl
IikKLWNtZGxpbmVfcGFyc2VyLmFkZF9vcHRpb24oIi0tbm9fdmVyaWZpY2F0aW9uIiwgYWN0aW9u
PSJzdG9yZV90cnVlIikKLQotdHJ5OgotICAgIGFyZ19vcHRpb25zLCBhcmdfdmFsdWVzID0gY21k
bGluZV9wYXJzZXIucGFyc2VfYXJncygpCi0gICAgaWYgKGxlbihhcmdfdmFsdWVzKSA8IDEpOgot
ICAgICAgICByYWlzZSBFeGNlcHRpb24oIkF0IGxlYXN0IG9uZSBwbGFpbiBhcmd1bWVudCBleHBl
Y3RlZCIpCi0KLSAgICBpbnB1dF9qc29uX2ZpbGVuYW1lID0gYXJnX3ZhbHVlc1swXQotICAgIGRl
cGVuZGVuY3lfanNvbl9maWxlbmFtZXMgPSBhcmdfdmFsdWVzWzE6XQotCi0gICAgb3V0cHV0X2hl
YWRlcl9kaXJuYW1lID0gYXJnX29wdGlvbnMub3V0cHV0X2hfZGlyCi0gICAgb3V0cHV0X2NwcF9k
aXJuYW1lID0gYXJnX29wdGlvbnMub3V0cHV0X2NwcF9kaXIKLSAgICBvdXRwdXRfanNfZGlybmFt
ZSA9IGFyZ19vcHRpb25zLm91dHB1dF9qc19kaXIKLSAgICBvdXRwdXRfdHlwZSA9IGFyZ19vcHRp
b25zLm91dHB1dF90eXBlCi0KLSAgICB3cml0ZV9hbHdheXMgPSBhcmdfb3B0aW9ucy53cml0ZV9h
bHdheXMKLSAgICB2ZXJpZmljYXRpb24gPSBub3QgYXJnX29wdGlvbnMubm9fdmVyaWZpY2F0aW9u
Ci0gICAgaWYgbm90IG91dHB1dF9oZWFkZXJfZGlybmFtZToKLSAgICAgICAgcmFpc2UgRXhjZXB0
aW9uKCJPdXRwdXQgLmggZGlyZWN0b3J5IG11c3QgYmUgc3BlY2lmaWVkIikKLSAgICBpZiBub3Qg
b3V0cHV0X2NwcF9kaXJuYW1lOgotICAgICAgICByYWlzZSBFeGNlcHRpb24oIk91dHB1dCAuY3Bw
IGRpcmVjdG9yeSBtdXN0IGJlIHNwZWNpZmllZCIpCi0gICAgaWYgbm90IG91dHB1dF9qc19kaXJu
YW1lOgotICAgICAgICByYWlzZSBFeGNlcHRpb24oIk91dHB1dCAuanMgZGlyZWN0b3J5IG11c3Qg
YmUgc3BlY2lmaWVkIikKLSAgICBpZiBvdXRwdXRfdHlwZSBub3QgaW4gSU5TUEVDVE9SX1RZUEVT
X0dFTkVSQVRPUl9DT05GSUdfTUFQLmtleXMoKToKLSAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJV
bmtub3duIG91dHB1dCB0eXBlLiBBbGxvd2VkIHR5cGVzIGFyZTogJXMiICUgSU5TUEVDVE9SX1RZ
UEVTX0dFTkVSQVRPUl9DT05GSUdfTUFQLmtleXMoKSkKLWV4Y2VwdCBFeGNlcHRpb246Ci0gICAg
IyBXb3JrIHdpdGggcHl0aG9uIDIgYW5kIDMgaHR0cDovL2RvY3MucHl0aG9uLm9yZy9weTNrL2hv
d3RvL3B5cG9ydGluZy5odG1sCi0gICAgZXhjID0gc3lzLmV4Y19pbmZvKClbMV0KLSAgICBzeXMu
c3RkZXJyLndyaXRlKCJGYWlsZWQgdG8gcGFyc2UgY29tbWFuZC1saW5lIGFyZ3VtZW50czogJXNc
blxuIiAlIGV4YykKLSAgICBzeXMuc3RkZXJyLndyaXRlKCJVc2FnZTogPHNjcmlwdD4gSW5zcGVj
dG9yLmpzb24gLS1vdXRwdXRfaF9kaXIgPG91dHB1dF9oZWFkZXJfZGlyPiAtLW91dHB1dF9jcHBf
ZGlyIDxvdXRwdXRfY3BwX2Rpcj4gLS1vdXRwdXRfanNfZGlyIDxvdXRwdXRfanNfZGlyPiBbLS13
cml0ZV9hbHdheXNdIFstLW5vX3ZlcmlmaWNhdGlvbl1cbiIpCi0gICAgZXhpdCgxKQotCi0KLWRl
ZiBkYXNoX3RvX2NhbWVsY2FzZSh3b3JkKToKLSAgICByZXR1cm4gJycuam9pbih4LmNhcGl0YWxp
emUoKSBvciAnLScgZm9yIHggaW4gd29yZC5zcGxpdCgnLScpKQotCi0KLWRlZiBmaXhfY2FtZWxf
Y2FzZShuYW1lKToKLSAgICByZWZpbmVkID0gcmUuc3ViKHInLShcdyknLCBsYW1iZGEgcGF0OiBw
YXQuZ3JvdXAoMSkudXBwZXIoKSwgbmFtZSkKLSAgICByZWZpbmVkID0gdG9fdGl0bGVfY2FzZShy
ZWZpbmVkKQotICAgIHJldHVybiByZS5zdWIocicoP2kpSFRNTHxYTUx8V01MfEFQSXxHQ3xYSFJ8
RE9NfENTUycsIGxhbWJkYSBwYXQ6IHBhdC5ncm91cCgwKS51cHBlcigpLCByZWZpbmVkKQotCi0K
LWRlZiB0b190aXRsZV9jYXNlKG5hbWUpOgotICAgIHJldHVybiBuYW1lWzoxXS51cHBlcigpICsg
bmFtZVsxOl0KLQotCi1jbGFzcyBDYXBpdGFsaXplcjoKLSAgICBAc3RhdGljbWV0aG9kCi0gICAg
ZGVmIGxvd2VyX2NhbWVsX2Nhc2VfdG9fdXBwZXIoc3RyKToKLSAgICAgICAgaWYgbGVuKHN0cikg
PiAwIGFuZCBzdHJbMF0uaXNsb3dlcigpOgotICAgICAgICAgICAgc3RyID0gc3RyWzBdLnVwcGVy
KCkgKyBzdHJbMTpdCi0gICAgICAgIHJldHVybiBzdHIKLQotICAgIEBzdGF0aWNtZXRob2QKLSAg
ICBkZWYgdXBwZXJfY2FtZWxfY2FzZV90b19sb3dlcihzdHIpOgotICAgICAgICBwb3MgPSAwCi0g
ICAgICAgIHdoaWxlIHBvcyA8IGxlbihzdHIpIGFuZCBzdHJbcG9zXS5pc3VwcGVyKCk6Ci0gICAg
ICAgICAgICBwb3MgKz0gMQotICAgICAgICBpZiBwb3MgPT0gMDoKLSAgICAgICAgICAgIHJldHVy
biBzdHIKLSAgICAgICAgaWYgcG9zID09IDE6Ci0gICAgICAgICAgICByZXR1cm4gc3RyWzBdLmxv
d2VyKCkgKyBzdHJbMTpdCi0gICAgICAgIGlmIHBvcyA8IGxlbihzdHIpOgotICAgICAgICAgICAg
cG9zIC09IDEKLSAgICAgICAgcG9zc2libGVfYWJicmV2aWF0aW9uID0gc3RyWzA6cG9zXQotICAg
ICAgICBpZiBwb3NzaWJsZV9hYmJyZXZpYXRpb24gbm90IGluIENhcGl0YWxpemVyLkFCQlJFVklB
VElPTjoKLSAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiVW5rbm93biBhYmJyZXZpYXRpb24g
JXMiICUgcG9zc2libGVfYWJicmV2aWF0aW9uKQotICAgICAgICBzdHIgPSBwb3NzaWJsZV9hYmJy
ZXZpYXRpb24ubG93ZXIoKSArIHN0cltwb3M6XQotICAgICAgICByZXR1cm4gc3RyCi0KLSAgICBA
c3RhdGljbWV0aG9kCi0gICAgZGVmIGNhbWVsX2Nhc2VfdG9fY2FwaXRhbGl6ZWRfd2l0aF91bmRl
cnNjb3JlcyhzdHIpOgotICAgICAgICBpZiBsZW4oc3RyKSA9PSAwOgotICAgICAgICAgICAgcmV0
dXJuIHN0cgotICAgICAgICBvdXRwdXQgPSBDYXBpdGFsaXplci5zcGxpdF9jYW1lbF9jYXNlXyhz
dHIpCi0gICAgICAgIHJldHVybiAiXyIuam9pbihvdXRwdXQpLnVwcGVyKCkKLQotICAgIEBzdGF0
aWNtZXRob2QKLSAgICBkZWYgc3BsaXRfY2FtZWxfY2FzZV8oc3RyKToKLSAgICAgICAgb3V0cHV0
ID0gW10KLSAgICAgICAgcG9zX2JlaW5nID0gMAotICAgICAgICBwb3MgPSAxCi0gICAgICAgIGhh
c19vbmVsZXR0ZXIgPSBGYWxzZQotICAgICAgICB3aGlsZSBwb3MgPCBsZW4oc3RyKToKLSAgICAg
ICAgICAgIGlmIHN0cltwb3NdLmlzdXBwZXIoKToKLSAgICAgICAgICAgICAgICBvdXRwdXQuYXBw
ZW5kKHN0cltwb3NfYmVpbmc6cG9zXS51cHBlcigpKQotICAgICAgICAgICAgICAgIGlmIHBvcyAt
IHBvc19iZWluZyA9PSAxOgotICAgICAgICAgICAgICAgICAgICBoYXNfb25lbGV0dGVyID0gVHJ1
ZQotICAgICAgICAgICAgICAgIHBvc19iZWluZyA9IHBvcwotICAgICAgICAgICAgcG9zICs9IDEK
LSAgICAgICAgb3V0cHV0LmFwcGVuZChzdHJbcG9zX2JlaW5nOl0pCi0gICAgICAgIGlmIGhhc19v
bmVsZXR0ZXI6Ci0gICAgICAgICAgICBhcnJheV9wb3MgPSAwCi0gICAgICAgICAgICB3aGlsZSBh
cnJheV9wb3MgPCBsZW4ob3V0cHV0KSAtIDE6Ci0gICAgICAgICAgICAgICAgaWYgbGVuKG91dHB1
dFthcnJheV9wb3NdKSA9PSAxOgotICAgICAgICAgICAgICAgICAgICBhcnJheV9wb3NfZW5kID0g
YXJyYXlfcG9zICsgMQotICAgICAgICAgICAgICAgICAgICB3aGlsZSBhcnJheV9wb3NfZW5kIDwg
bGVuKG91dHB1dCkgYW5kIGxlbihvdXRwdXRbYXJyYXlfcG9zX2VuZF0pID09IDE6Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBhcnJheV9wb3NfZW5kICs9IDEKLSAgICAgICAgICAgICAgICAgICAg
aWYgYXJyYXlfcG9zX2VuZCAtIGFycmF5X3BvcyA+IDE6Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBwb3NzaWJsZV9hYmJyZXZpYXRpb24gPSAiIi5qb2luKG91dHB1dFthcnJheV9wb3M6YXJyYXlf
cG9zX2VuZF0pCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiBwb3NzaWJsZV9hYmJyZXZpYXRp
b24udXBwZXIoKSBpbiBDYXBpdGFsaXplci5BQkJSRVZJQVRJT046Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgb3V0cHV0W2FycmF5X3BvczphcnJheV9wb3NfZW5kXSA9IFtwb3NzaWJsZV9h
YmJyZXZpYXRpb25dCi0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGFycmF5X3BvcyA9IGFycmF5X3Bvc19lbmQgLSAxCi0gICAgICAgICAg
ICAgICAgYXJyYXlfcG9zICs9IDEKLSAgICAgICAgcmV0dXJuIG91dHB1dAotCi0gICAgQUJCUkVW
SUFUSU9OID0gZnJvemVuc2V0KFsiWEhSIiwgIkRPTSIsICJDU1MiXSkKLQotVkFMSURBVE9SX0lG
REVGX05BTUUgPSAiIUFTU0VSVF9ESVNBQkxFRCIKLQotCi1jbGFzcyBEb21haW5OYW1lRml4ZXM6
Ci0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIGdldF9maXhlZF9kYXRhKGNscywgZG9tYWluX25h
bWUpOgotICAgICAgICBmaWVsZF9uYW1lX3JlcyA9IENhcGl0YWxpemVyLnVwcGVyX2NhbWVsX2Nh
c2VfdG9fbG93ZXIoZG9tYWluX25hbWUpICsgIkFnZW50IgotCi0gICAgICAgIGNsYXNzIFJlcyhv
YmplY3QpOgotICAgICAgICAgICAgc2tpcF9qc19iaW5kID0gZG9tYWluX25hbWUgaW4gY2xzLnNr
aXBfanNfYmluZF9kb21haW5zCi0KLSAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAg
ICAgIGRlZiBnZXRfZ3VhcmQoKToKLSAgICAgICAgICAgICAgICBpZiBkb21haW5fbmFtZSBpbiBE
T01BSU5fREVGSU5FX05BTUVfTUFQOgotICAgICAgICAgICAgICAgICAgICBkZWZpbmVfbmFtZSA9
IERPTUFJTl9ERUZJTkVfTkFNRV9NQVBbZG9tYWluX25hbWVdCi0KLSAgICAgICAgICAgICAgICAg
ICAgY2xhc3MgR3VhcmQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0g
ICAgICAgICAgICAgICAgICAgICAgICBkZWYgZ2VuZXJhdGVfb3BlbihvdXRwdXQpOgotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoIiNpZiBFTkFCTEUoJXMpXG4iICUg
ZGVmaW5lX25hbWUpCi0KLSAgICAgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGRlZiBnZW5lcmF0ZV9jbG9zZShvdXRwdXQpOgotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoIiNlbmRpZiAvLyBFTkFCTEUoJXMp
XG4iICUgZGVmaW5lX25hbWUpCi0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEd1YXJkCi0K
LSAgICAgICAgcmV0dXJuIFJlcwotCi0gICAgc2tpcF9qc19iaW5kX2RvbWFpbnMgPSBzZXQoWyJE
T01EZWJ1Z2dlciJdKQotCi0KLWNsYXNzIFJhd1R5cGVzKG9iamVjdCk6Ci0gICAgQHN0YXRpY21l
dGhvZAotICAgIGRlZiBnZXQoanNvbl90eXBlKToKLSAgICAgICAgaWYganNvbl90eXBlID09ICJi
b29sZWFuIjoKLSAgICAgICAgICAgIHJldHVybiBSYXdUeXBlcy5Cb29sCi0gICAgICAgIGVsaWYg
anNvbl90eXBlID09ICJzdHJpbmciOgotICAgICAgICAgICAgcmV0dXJuIFJhd1R5cGVzLlN0cmlu
ZwotICAgICAgICBlbGlmIGpzb25fdHlwZSA9PSAiYXJyYXkiOgotICAgICAgICAgICAgcmV0dXJu
IFJhd1R5cGVzLkFycmF5Ci0gICAgICAgIGVsaWYganNvbl90eXBlID09ICJvYmplY3QiOgotICAg
ICAgICAgICAgcmV0dXJuIFJhd1R5cGVzLk9iamVjdAotICAgICAgICBlbGlmIGpzb25fdHlwZSA9
PSAiaW50ZWdlciI6Ci0gICAgICAgICAgICByZXR1cm4gUmF3VHlwZXMuSW50Ci0gICAgICAgIGVs
aWYganNvbl90eXBlID09ICJudW1iZXIiOgotICAgICAgICAgICAgcmV0dXJuIFJhd1R5cGVzLk51
bWJlcgotICAgICAgICBlbGlmIGpzb25fdHlwZSA9PSAiYW55IjoKLSAgICAgICAgICAgIHJldHVy
biBSYXdUeXBlcy5BbnkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlv
bigiVW5rbm93biB0eXBlOiAlcyIgJSBqc29uX3R5cGUpCi0KLSAgICAjIEZvciBvdXRwdXQgcGFy
YW1ldGVyIGFsbCB2YWx1ZXMgYXJlIHBhc3NlZCBieSBwb2ludGVyIGV4Y2VwdCBSZWZQdHItYmFz
ZWQgdHlwZXMuCi0gICAgY2xhc3MgT3V0cHV0UGFzc01vZGVsOgotICAgICAgICBjbGFzcyBCeVBv
aW50ZXI6Ci0gICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICBkZWYgZ2V0X2Fy
Z3VtZW50X3ByZWZpeCgpOgotICAgICAgICAgICAgICAgIHJldHVybiAiJiIKLQotICAgICAgICAg
ICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgZGVmIGdldF9wYXJhbWV0ZXJfdHlwZV9zdWZm
aXgoKToKLSAgICAgICAgICAgICAgICByZXR1cm4gIioiCi0KLSAgICAgICAgY2xhc3MgQnlSZWZl
cmVuY2U6Ci0gICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICBkZWYgZ2V0X2Fy
Z3VtZW50X3ByZWZpeCgpOgotICAgICAgICAgICAgICAgIHJldHVybiAiIgotCi0gICAgICAgICAg
ICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICBkZWYgZ2V0X3BhcmFtZXRlcl90eXBlX3N1ZmZp
eCgpOgotICAgICAgICAgICAgICAgIHJldHVybiAiJiIKLQotICAgIGNsYXNzIEJhc2VUeXBlKG9i
amVjdCk6Ci0gICAgICAgIG5lZWRfaW50ZXJuYWxfcnVudGltZV9jYXN0XyA9IEZhbHNlCi0KLSAg
ICAgICAgQGNsYXNzbWV0aG9kCi0gICAgICAgIGRlZiByZXF1ZXN0X3Jhd19pbnRlcm5hbF9ydW50
aW1lX2Nhc3QoY2xzKToKLSAgICAgICAgICAgIGlmIG5vdCBjbHMubmVlZF9pbnRlcm5hbF9ydW50
aW1lX2Nhc3RfOgotICAgICAgICAgICAgICAgIGNscy5uZWVkX2ludGVybmFsX3J1bnRpbWVfY2Fz
dF8gPSBUcnVlCi0KLSAgICAgICAgQGNsYXNzbWV0aG9kCi0gICAgICAgIGRlZiBnZXRfcmF3X3Zh
bGlkYXRvcl9jYWxsX3RleHQoY2xzKToKLSAgICAgICAgICAgIHJldHVybiAiUnVudGltZUNhc3RI
ZWxwZXI6OmFzc2VydFR5cGU8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZTo6VHlwZSVzPiIgJSBj
bHMuZ2V0X3ZhbGlkYXRlX21ldGhvZF9wYXJhbXMoKS50ZW1wbGF0ZV90eXBlCi0KLSAgICBjbGFz
cyBTdHJpbmcoQmFzZVR5cGUpOgotICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgIGRlZiBn
ZXRfZ2V0dGVyX25hbWUoKToKLSAgICAgICAgICAgIHJldHVybiAiU3RyaW5nIgotCi0gICAgICAg
IGdldF9zZXR0ZXJfbmFtZSA9IGdldF9nZXR0ZXJfbmFtZQotCi0gICAgICAgIEBzdGF0aWNtZXRo
b2QKLSAgICAgICAgZGVmIGdldF9jX2luaXRpYWxpemVyKCk6Ci0gICAgICAgICAgICByZXR1cm4g
IlwiXCIiCi0KLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBkZWYgZ2V0X2pzX2JpbmRf
dHlwZSgpOgotICAgICAgICAgICAgcmV0dXJuICJzdHJpbmciCi0KLSAgICAgICAgQHN0YXRpY21l
dGhvZAotICAgICAgICBkZWYgZ2V0X3ZhbGlkYXRlX21ldGhvZF9wYXJhbXMoKToKLSAgICAgICAg
ICAgIGNsYXNzIFZhbGlkYXRlTWV0aG9kUGFyYW1zOgotICAgICAgICAgICAgICAgIHRlbXBsYXRl
X3R5cGUgPSAiU3RyaW5nIgotICAgICAgICAgICAgcmV0dXJuIFZhbGlkYXRlTWV0aG9kUGFyYW1z
Ci0KLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBkZWYgZ2V0X291dHB1dF9wYXNzX21v
ZGVsKCk6Ci0gICAgICAgICAgICByZXR1cm4gUmF3VHlwZXMuT3V0cHV0UGFzc01vZGVsLkJ5UG9p
bnRlcgotCi0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGlzX2hlYXZ5X3ZhbHVl
KCk6Ci0gICAgICAgICAgICByZXR1cm4gVHJ1ZQotCi0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAg
ICAgICAgZGVmIGdldF9hcnJheV9pdGVtX3Jhd19jX3R5cGVfdGV4dCgpOgotICAgICAgICAgICAg
cmV0dXJuICJTdHJpbmciCi0KLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBkZWYgZ2V0
X3Jhd190eXBlX21vZGVsKCk6Ci0gICAgICAgICAgICByZXR1cm4gVHlwZU1vZGVsLlN0cmluZwot
Ci0gICAgY2xhc3MgSW50KEJhc2VUeXBlKToKLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAg
ICBkZWYgZ2V0X2dldHRlcl9uYW1lKCk6Ci0gICAgICAgICAgICByZXR1cm4gIkludCIKLQotICAg
ICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgIGRlZiBnZXRfc2V0dGVyX25hbWUoKToKLSAgICAg
ICAgICAgIHJldHVybiAiTnVtYmVyIgotCi0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAg
ZGVmIGdldF9jX2luaXRpYWxpemVyKCk6Ci0gICAgICAgICAgICByZXR1cm4gIjAiCi0KLSAgICAg
ICAgQHN0YXRpY21ldGhvZAotICAgICAgICBkZWYgZ2V0X2pzX2JpbmRfdHlwZSgpOgotICAgICAg
ICAgICAgcmV0dXJuICJudW1iZXIiCi0KLSAgICAgICAgQGNsYXNzbWV0aG9kCi0gICAgICAgIGRl
ZiBnZXRfcmF3X3ZhbGlkYXRvcl9jYWxsX3RleHQoY2xzKToKLSAgICAgICAgICAgIHJldHVybiAi
UnVudGltZUNhc3RIZWxwZXI6OmFzc2VydEludCIKLQotICAgICAgICBAc3RhdGljbWV0aG9kCi0g
ICAgICAgIGRlZiBnZXRfb3V0cHV0X3Bhc3NfbW9kZWwoKToKLSAgICAgICAgICAgIHJldHVybiBS
YXdUeXBlcy5PdXRwdXRQYXNzTW9kZWwuQnlQb2ludGVyCi0KLSAgICAgICAgQHN0YXRpY21ldGhv
ZAotICAgICAgICBkZWYgaXNfaGVhdnlfdmFsdWUoKToKLSAgICAgICAgICAgIHJldHVybiBGYWxz
ZQotCi0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGdldF9hcnJheV9pdGVtX3Jh
d19jX3R5cGVfdGV4dCgpOgotICAgICAgICAgICAgcmV0dXJuICJpbnQiCi0KLSAgICAgICAgQHN0
YXRpY21ldGhvZAotICAgICAgICBkZWYgZ2V0X3Jhd190eXBlX21vZGVsKCk6Ci0gICAgICAgICAg
ICByZXR1cm4gVHlwZU1vZGVsLkludAotCi0gICAgY2xhc3MgTnVtYmVyKEJhc2VUeXBlKToKLSAg
ICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBkZWYgZ2V0X2dldHRlcl9uYW1lKCk6Ci0gICAg
ICAgICAgICByZXR1cm4gIkRvdWJsZSIKLQotICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAg
IGRlZiBnZXRfc2V0dGVyX25hbWUoKToKLSAgICAgICAgICAgIHJldHVybiAiTnVtYmVyIgotCi0g
ICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGdldF9jX2luaXRpYWxpemVyKCk6Ci0g
ICAgICAgICAgICByZXR1cm4gIjAiCi0KLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBk
ZWYgZ2V0X2pzX2JpbmRfdHlwZSgpOgotICAgICAgICAgICAgcmV0dXJuICJudW1iZXIiCi0KLSAg
ICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBkZWYgZ2V0X3ZhbGlkYXRlX21ldGhvZF9wYXJh
bXMoKToKLSAgICAgICAgICAgIGNsYXNzIFZhbGlkYXRlTWV0aG9kUGFyYW1zOgotICAgICAgICAg
ICAgICAgIHRlbXBsYXRlX3R5cGUgPSAiTnVtYmVyIgotICAgICAgICAgICAgcmV0dXJuIFZhbGlk
YXRlTWV0aG9kUGFyYW1zCi0KLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBkZWYgZ2V0
X291dHB1dF9wYXNzX21vZGVsKCk6Ci0gICAgICAgICAgICByZXR1cm4gUmF3VHlwZXMuT3V0cHV0
UGFzc01vZGVsLkJ5UG9pbnRlcgotCi0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVm
IGlzX2hlYXZ5X3ZhbHVlKCk6Ci0gICAgICAgICAgICByZXR1cm4gRmFsc2UKLQotICAgICAgICBA
c3RhdGljbWV0aG9kCi0gICAgICAgIGRlZiBnZXRfYXJyYXlfaXRlbV9yYXdfY190eXBlX3RleHQo
KToKLSAgICAgICAgICAgIHJldHVybiAiZG91YmxlIgotCi0gICAgICAgIEBzdGF0aWNtZXRob2QK
LSAgICAgICAgZGVmIGdldF9yYXdfdHlwZV9tb2RlbCgpOgotICAgICAgICAgICAgcmV0dXJuIFR5
cGVNb2RlbC5OdW1iZXIKLQotICAgIGNsYXNzIEJvb2woQmFzZVR5cGUpOgotICAgICAgICBAc3Rh
dGljbWV0aG9kCi0gICAgICAgIGRlZiBnZXRfZ2V0dGVyX25hbWUoKToKLSAgICAgICAgICAgIHJl
dHVybiAiQm9vbGVhbiIKLQotICAgICAgICBnZXRfc2V0dGVyX25hbWUgPSBnZXRfZ2V0dGVyX25h
bWUKLQotICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgIGRlZiBnZXRfY19pbml0aWFsaXpl
cigpOgotICAgICAgICAgICAgcmV0dXJuICJmYWxzZSIKLQotICAgICAgICBAc3RhdGljbWV0aG9k
Ci0gICAgICAgIGRlZiBnZXRfanNfYmluZF90eXBlKCk6Ci0gICAgICAgICAgICByZXR1cm4gImJv
b2xlYW4iCi0KLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBkZWYgZ2V0X3ZhbGlkYXRl
X21ldGhvZF9wYXJhbXMoKToKLSAgICAgICAgICAgIGNsYXNzIFZhbGlkYXRlTWV0aG9kUGFyYW1z
OgotICAgICAgICAgICAgICAgIHRlbXBsYXRlX3R5cGUgPSAiQm9vbGVhbiIKLSAgICAgICAgICAg
IHJldHVybiBWYWxpZGF0ZU1ldGhvZFBhcmFtcwotCi0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAg
ICAgICAgZGVmIGdldF9vdXRwdXRfcGFzc19tb2RlbCgpOgotICAgICAgICAgICAgcmV0dXJuIFJh
d1R5cGVzLk91dHB1dFBhc3NNb2RlbC5CeVBvaW50ZXIKLQotICAgICAgICBAc3RhdGljbWV0aG9k
Ci0gICAgICAgIGRlZiBpc19oZWF2eV92YWx1ZSgpOgotICAgICAgICAgICAgcmV0dXJuIEZhbHNl
Ci0KLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBkZWYgZ2V0X2FycmF5X2l0ZW1fcmF3
X2NfdHlwZV90ZXh0KCk6Ci0gICAgICAgICAgICByZXR1cm4gImJvb2wiCi0KLSAgICAgICAgQHN0
YXRpY21ldGhvZAotICAgICAgICBkZWYgZ2V0X3Jhd190eXBlX21vZGVsKCk6Ci0gICAgICAgICAg
ICByZXR1cm4gVHlwZU1vZGVsLkJvb2wKLQotICAgIGNsYXNzIE9iamVjdChCYXNlVHlwZSk6Ci0g
ICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGdldF9nZXR0ZXJfbmFtZSgpOgotICAg
ICAgICAgICAgcmV0dXJuICJPYmplY3QiCi0KLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAg
ICBkZWYgZ2V0X3NldHRlcl9uYW1lKCk6Ci0gICAgICAgICAgICByZXR1cm4gIlZhbHVlIgotCi0g
ICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGdldF9jX2luaXRpYWxpemVyKCk6Ci0g
ICAgICAgICAgICByZXR1cm4gIkluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkiCi0KLSAgICAgICAg
QHN0YXRpY21ldGhvZAotICAgICAgICBkZWYgZ2V0X2pzX2JpbmRfdHlwZSgpOgotICAgICAgICAg
ICAgcmV0dXJuICJvYmplY3QiCi0KLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBkZWYg
Z2V0X291dHB1dF9hcmd1bWVudF9wcmVmaXgoKToKLSAgICAgICAgICAgIHJldHVybiAiIgotCi0g
ICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGdldF92YWxpZGF0ZV9tZXRob2RfcGFy
YW1zKCk6Ci0gICAgICAgICAgICBjbGFzcyBWYWxpZGF0ZU1ldGhvZFBhcmFtczoKLSAgICAgICAg
ICAgICAgICB0ZW1wbGF0ZV90eXBlID0gIk9iamVjdCIKLSAgICAgICAgICAgIHJldHVybiBWYWxp
ZGF0ZU1ldGhvZFBhcmFtcwotCi0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGdl
dF9vdXRwdXRfcGFzc19tb2RlbCgpOgotICAgICAgICAgICAgcmV0dXJuIFJhd1R5cGVzLk91dHB1
dFBhc3NNb2RlbC5CeVJlZmVyZW5jZQotCi0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAg
ZGVmIGlzX2hlYXZ5X3ZhbHVlKCk6Ci0gICAgICAgICAgICByZXR1cm4gVHJ1ZQotCi0gICAgICAg
IEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGdldF9hcnJheV9pdGVtX3Jhd19jX3R5cGVfdGV4
dCgpOgotICAgICAgICAgICAgcmV0dXJuICJJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCIKLQot
ICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgIGRlZiBnZXRfcmF3X3R5cGVfbW9kZWwoKToK
LSAgICAgICAgICAgIHJldHVybiBUeXBlTW9kZWwuT2JqZWN0Ci0KLSAgICBjbGFzcyBBbnkoQmFz
ZVR5cGUpOgotICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgIGRlZiBnZXRfZ2V0dGVyX25h
bWUoKToKLSAgICAgICAgICAgIHJldHVybiAiVmFsdWUiCi0KLSAgICAgICAgZ2V0X3NldHRlcl9u
YW1lID0gZ2V0X2dldHRlcl9uYW1lCi0KLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBk
ZWYgZ2V0X2NfaW5pdGlhbGl6ZXIoKToKLSAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiVW5z
dXBwb3J0ZWQiKQotCi0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGdldF9qc19i
aW5kX3R5cGUoKToKLSAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiVW5zdXBwb3J0ZWQiKQot
Ci0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGdldF9yYXdfdmFsaWRhdG9yX2Nh
bGxfdGV4dCgpOgotICAgICAgICAgICAgcmV0dXJuICJSdW50aW1lQ2FzdEhlbHBlcjo6YXNzZXJ0
QW55IgotCi0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGdldF9vdXRwdXRfcGFz
c19tb2RlbCgpOgotICAgICAgICAgICAgcmV0dXJuIFJhd1R5cGVzLk91dHB1dFBhc3NNb2RlbC5C
eVJlZmVyZW5jZQotCi0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGlzX2hlYXZ5
X3ZhbHVlKCk6Ci0gICAgICAgICAgICByZXR1cm4gVHJ1ZQotCi0gICAgICAgIEBzdGF0aWNtZXRo
b2QKLSAgICAgICAgZGVmIGdldF9hcnJheV9pdGVtX3Jhd19jX3R5cGVfdGV4dCgpOgotICAgICAg
ICAgICAgcmV0dXJuICJJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlIgotCi0gICAgICAgIEBzdGF0
aWNtZXRob2QKLSAgICAgICAgZGVmIGdldF9yYXdfdHlwZV9tb2RlbCgpOgotICAgICAgICAgICAg
cmV0dXJuIFR5cGVNb2RlbC5BbnkKLQotICAgIGNsYXNzIEFycmF5KEJhc2VUeXBlKToKLSAgICAg
ICAgQHN0YXRpY21ldGhvZAotICAgICAgICBkZWYgZ2V0X2dldHRlcl9uYW1lKCk6Ci0gICAgICAg
ICAgICByZXR1cm4gIkFycmF5IgotCi0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVm
IGdldF9zZXR0ZXJfbmFtZSgpOgotICAgICAgICAgICAgcmV0dXJuICJWYWx1ZSIKLQotICAgICAg
ICBAc3RhdGljbWV0aG9kCi0gICAgICAgIGRlZiBnZXRfY19pbml0aWFsaXplcigpOgotICAgICAg
ICAgICAgcmV0dXJuICJJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCkiCi0KLSAgICAgICAgQHN0YXRp
Y21ldGhvZAotICAgICAgICBkZWYgZ2V0X2pzX2JpbmRfdHlwZSgpOgotICAgICAgICAgICAgcmV0
dXJuICJvYmplY3QiCi0KLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBkZWYgZ2V0X291
dHB1dF9hcmd1bWVudF9wcmVmaXgoKToKLSAgICAgICAgICAgIHJldHVybiAiIgotCi0gICAgICAg
IEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGdldF92YWxpZGF0ZV9tZXRob2RfcGFyYW1zKCk6
Ci0gICAgICAgICAgICBjbGFzcyBWYWxpZGF0ZU1ldGhvZFBhcmFtczoKLSAgICAgICAgICAgICAg
ICB0ZW1wbGF0ZV90eXBlID0gIkFycmF5IgotICAgICAgICAgICAgcmV0dXJuIFZhbGlkYXRlTWV0
aG9kUGFyYW1zCi0KLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBkZWYgZ2V0X291dHB1
dF9wYXNzX21vZGVsKCk6Ci0gICAgICAgICAgICByZXR1cm4gUmF3VHlwZXMuT3V0cHV0UGFzc01v
ZGVsLkJ5UmVmZXJlbmNlCi0KLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBkZWYgaXNf
aGVhdnlfdmFsdWUoKToKLSAgICAgICAgICAgIHJldHVybiBUcnVlCi0KLSAgICAgICAgQHN0YXRp
Y21ldGhvZAotICAgICAgICBkZWYgZ2V0X2FycmF5X2l0ZW1fcmF3X2NfdHlwZV90ZXh0KCk6Ci0g
ICAgICAgICAgICByZXR1cm4gIkluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXkiCi0KLSAgICAgICAg
QHN0YXRpY21ldGhvZAotICAgICAgICBkZWYgZ2V0X3Jhd190eXBlX21vZGVsKCk6Ci0gICAgICAg
ICAgICByZXR1cm4gVHlwZU1vZGVsLkFycmF5Ci0KLQotZGVmIHJlcGxhY2VfcmlnaHRfc2hpZnQo
aW5wdXRfc3RyKToKLSAgICByZXR1cm4gaW5wdXRfc3RyLnJlcGxhY2UoIj4+IiwgIj4gPiIpCi0K
LQotY2xhc3MgQ29tbWFuZFJldHVyblBhc3NNb2RlbDoKLSAgICBjbGFzcyBCeVJlZmVyZW5jZToK
LSAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZhcl90eXBlLCBzZXRfY29uZGl0aW9uKToKLSAg
ICAgICAgICAgIHNlbGYudmFyX3R5cGUgPSB2YXJfdHlwZQotICAgICAgICAgICAgc2VsZi5zZXRf
Y29uZGl0aW9uID0gc2V0X2NvbmRpdGlvbgotCi0gICAgICAgIGRlZiBnZXRfcmV0dXJuX3Zhcl90
eXBlKHNlbGYpOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYudmFyX3R5cGUKLQotICAgICAgICBA
c3RhdGljbWV0aG9kCi0gICAgICAgIGRlZiBnZXRfb3V0cHV0X2FyZ3VtZW50X3ByZWZpeCgpOgot
ICAgICAgICAgICAgcmV0dXJuICIiCi0KLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBk
ZWYgZ2V0X291dHB1dF90b19yYXdfZXhwcmVzc2lvbigpOgotICAgICAgICAgICAgcmV0dXJuICIl
cyIKLQotICAgICAgICBkZWYgZ2V0X291dHB1dF9wYXJhbWV0ZXJfdHlwZShzZWxmKToKLSAgICAg
ICAgICAgIHJldHVybiBzZWxmLnZhcl90eXBlICsgIiYiCi0KLSAgICAgICAgZGVmIGdldF9zZXRf
cmV0dXJuX2NvbmRpdGlvbihzZWxmKToKLSAgICAgICAgICAgIHJldHVybiBzZWxmLnNldF9jb25k
aXRpb24KLQotICAgIGNsYXNzIEJ5UG9pbnRlcjoKLSAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYs
IHZhcl90eXBlKToKLSAgICAgICAgICAgIHNlbGYudmFyX3R5cGUgPSB2YXJfdHlwZQotCi0gICAg
ICAgIGRlZiBnZXRfcmV0dXJuX3Zhcl90eXBlKHNlbGYpOgotICAgICAgICAgICAgcmV0dXJuIHNl
bGYudmFyX3R5cGUKLQotICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgIGRlZiBnZXRfb3V0
cHV0X2FyZ3VtZW50X3ByZWZpeCgpOgotICAgICAgICAgICAgcmV0dXJuICImIgotCi0gICAgICAg
IEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGdldF9vdXRwdXRfdG9fcmF3X2V4cHJlc3Npb24o
KToKLSAgICAgICAgICAgIHJldHVybiAiJXMiCi0KLSAgICAgICAgZGVmIGdldF9vdXRwdXRfcGFy
YW1ldGVyX3R5cGUoc2VsZik6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi52YXJfdHlwZSArICIq
IgotCi0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGdldF9zZXRfcmV0dXJuX2Nv
bmRpdGlvbigpOgotICAgICAgICAgICAgcmV0dXJuIE5vbmUKLQotICAgIGNsYXNzIE9wdE91dHB1
dDoKLSAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZhcl90eXBlKToKLSAgICAgICAgICAgIHNl
bGYudmFyX3R5cGUgPSB2YXJfdHlwZQotCi0gICAgICAgIGRlZiBnZXRfcmV0dXJuX3Zhcl90eXBl
KHNlbGYpOgotICAgICAgICAgICAgcmV0dXJuICJJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpPcHRP
dXRwdXQ8JXM+IiAlIHNlbGYudmFyX3R5cGUKLQotICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAg
ICAgIGRlZiBnZXRfb3V0cHV0X2FyZ3VtZW50X3ByZWZpeCgpOgotICAgICAgICAgICAgcmV0dXJu
ICImIgotCi0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGdldF9vdXRwdXRfdG9f
cmF3X2V4cHJlc3Npb24oKToKLSAgICAgICAgICAgIHJldHVybiAiJXMuZ2V0VmFsdWUoKSIKLQot
ICAgICAgICBkZWYgZ2V0X291dHB1dF9wYXJhbWV0ZXJfdHlwZShzZWxmKToKLSAgICAgICAgICAg
IHJldHVybiAiSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6T3B0T3V0cHV0PCVzPioiICUgc2VsZi52
YXJfdHlwZQotCi0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGdldF9zZXRfcmV0
dXJuX2NvbmRpdGlvbigpOgotICAgICAgICAgICAgcmV0dXJuICIlcy5pc0Fzc2lnbmVkKCkiCi0K
LQotY2xhc3MgVHlwZU1vZGVsOgotICAgIGNsYXNzIFJlZlB0ckJhc2VkKG9iamVjdCk6Ci0gICAg
ICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjbGFzc19uYW1lKToKLSAgICAgICAgICAgIHNlbGYuY2xh
c3NfbmFtZSA9IGNsYXNzX25hbWUKLSAgICAgICAgICAgIHNlbGYub3B0aW9uYWwgPSBGYWxzZQot
Ci0gICAgICAgIGRlZiBnZXRfb3B0aW9uYWwoc2VsZik6Ci0gICAgICAgICAgICByZXN1bHQgPSBU
eXBlTW9kZWwuUmVmUHRyQmFzZWQoc2VsZi5jbGFzc19uYW1lKQotICAgICAgICAgICAgcmVzdWx0
Lm9wdGlvbmFsID0gVHJ1ZQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdAotCi0gICAgICAgIGRl
ZiBnZXRfY29tbWFuZF9yZXR1cm5fcGFzc19tb2RlbChzZWxmKToKLSAgICAgICAgICAgIGlmIHNl
bGYub3B0aW9uYWw6Ci0gICAgICAgICAgICAgICAgc2V0X2NvbmRpdGlvbiA9ICIlcyIKLSAgICAg
ICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2V0X2NvbmRpdGlvbiA9IE5vbmUKLSAgICAg
ICAgICAgIHJldHVybiBDb21tYW5kUmV0dXJuUGFzc01vZGVsLkJ5UmVmZXJlbmNlKHJlcGxhY2Vf
cmlnaHRfc2hpZnQoIlJlZlB0cjwlcz4iICUgc2VsZi5jbGFzc19uYW1lKSwgc2V0X2NvbmRpdGlv
bikKLQotICAgICAgICBkZWYgZ2V0X2lucHV0X3BhcmFtX3R5cGVfdGV4dChzZWxmKToKLSAgICAg
ICAgICAgIHJldHVybiByZXBsYWNlX3JpZ2h0X3NoaWZ0KCJQYXNzUmVmUHRyPCVzPiIgJSBzZWxm
LmNsYXNzX25hbWUpCi0KLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBkZWYgZ2V0X2V2
ZW50X3NldHRlcl9leHByZXNzaW9uX3BhdHRlcm4oKToKLSAgICAgICAgICAgIHJldHVybiAiJXMi
Ci0KLSAgICBjbGFzcyBFbnVtKG9iamVjdCk6Ci0gICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBi
YXNlX3R5cGVfbmFtZSk6Ci0gICAgICAgICAgICBzZWxmLnR5cGVfbmFtZSA9IGJhc2VfdHlwZV9u
YW1lICsgIjo6RW51bSIKLQotICAgICAgICBkZWYgZ2V0X29wdGlvbmFsKGJhc2Vfc2VsZik6Ci0g
ICAgICAgICAgICBjbGFzcyBFbnVtT3B0aW9uYWw6Ci0gICAgICAgICAgICAgICAgQGNsYXNzbWV0
aG9kCi0gICAgICAgICAgICAgICAgZGVmIGdldF9vcHRpb25hbChjbHMpOgotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gY2xzCi0KLSAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAg
ICAgICAgICAgICAgZGVmIGdldF9jb21tYW5kX3JldHVybl9wYXNzX21vZGVsKCk6Ci0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBDb21tYW5kUmV0dXJuUGFzc01vZGVsLk9wdE91dHB1dChiYXNl
X3NlbGYudHlwZV9uYW1lKQotCi0gICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAg
ICAgICAgICAgIGRlZiBnZXRfaW5wdXRfcGFyYW1fdHlwZV90ZXh0KCk6Ci0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBiYXNlX3NlbGYudHlwZV9uYW1lICsgIioiCi0KLSAgICAgICAgICAgICAg
ICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICAgICAgZGVmIGdldF9ldmVudF9zZXR0ZXJfZXhw
cmVzc2lvbl9wYXR0ZXJuKCk6Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigi
VE9ETyIpCi0gICAgICAgICAgICByZXR1cm4gRW51bU9wdGlvbmFsCi0KLSAgICAgICAgZGVmIGdl
dF9jb21tYW5kX3JldHVybl9wYXNzX21vZGVsKHNlbGYpOgotICAgICAgICAgICAgcmV0dXJuIENv
bW1hbmRSZXR1cm5QYXNzTW9kZWwuQnlQb2ludGVyKHNlbGYudHlwZV9uYW1lKQotCi0gICAgICAg
IGRlZiBnZXRfaW5wdXRfcGFyYW1fdHlwZV90ZXh0KHNlbGYpOgotICAgICAgICAgICAgcmV0dXJu
IHNlbGYudHlwZV9uYW1lCi0KLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBkZWYgZ2V0
X2V2ZW50X3NldHRlcl9leHByZXNzaW9uX3BhdHRlcm4oKToKLSAgICAgICAgICAgIHJldHVybiAi
JXMiCi0KLSAgICBjbGFzcyBWYWx1ZVR5cGUob2JqZWN0KToKLSAgICAgICAgZGVmIF9faW5pdF9f
KHNlbGYsIHR5cGVfbmFtZSwgaXNfaGVhdnkpOgotICAgICAgICAgICAgc2VsZi50eXBlX25hbWUg
PSB0eXBlX25hbWUKLSAgICAgICAgICAgIHNlbGYuaXNfaGVhdnkgPSBpc19oZWF2eQotCi0gICAg
ICAgIGRlZiBnZXRfb3B0aW9uYWwoc2VsZik6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5WYWx1
ZU9wdGlvbmFsKHNlbGYpCi0KLSAgICAgICAgZGVmIGdldF9jb21tYW5kX3JldHVybl9wYXNzX21v
ZGVsKHNlbGYpOgotICAgICAgICAgICAgcmV0dXJuIENvbW1hbmRSZXR1cm5QYXNzTW9kZWwuQnlQ
b2ludGVyKHNlbGYudHlwZV9uYW1lKQotCi0gICAgICAgIGRlZiBnZXRfaW5wdXRfcGFyYW1fdHlw
ZV90ZXh0KHNlbGYpOgotICAgICAgICAgICAgaWYgc2VsZi5pc19oZWF2eToKLSAgICAgICAgICAg
ICAgICByZXR1cm4gImNvbnN0ICVzJiIgJSBzZWxmLnR5cGVfbmFtZQotICAgICAgICAgICAgZWxz
ZToKLSAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi50eXBlX25hbWUKLQotICAgICAgICBkZWYg
Z2V0X29wdF9vdXRwdXRfdHlwZV8oc2VsZik6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi50eXBl
X25hbWUKLQotICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgIGRlZiBnZXRfZXZlbnRfc2V0
dGVyX2V4cHJlc3Npb25fcGF0dGVybigpOgotICAgICAgICAgICAgcmV0dXJuICIlcyIKLQotICAg
ICAgICBjbGFzcyBWYWx1ZU9wdGlvbmFsOgotICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYs
IGJhc2UpOgotICAgICAgICAgICAgICAgIHNlbGYuYmFzZSA9IGJhc2UKLQotICAgICAgICAgICAg
ZGVmIGdldF9vcHRpb25hbChzZWxmKToKLSAgICAgICAgICAgICAgICByZXR1cm4gc2VsZgotCi0g
ICAgICAgICAgICBkZWYgZ2V0X2NvbW1hbmRfcmV0dXJuX3Bhc3NfbW9kZWwoc2VsZik6Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIENvbW1hbmRSZXR1cm5QYXNzTW9kZWwuT3B0T3V0cHV0KHNlbGYu
YmFzZS5nZXRfb3B0X291dHB1dF90eXBlXygpKQotCi0gICAgICAgICAgICBkZWYgZ2V0X2lucHV0
X3BhcmFtX3R5cGVfdGV4dChzZWxmKToKLSAgICAgICAgICAgICAgICByZXR1cm4gImNvbnN0ICVz
KiBjb25zdCIgJSBzZWxmLmJhc2UudHlwZV9uYW1lCi0KLSAgICAgICAgICAgIEBzdGF0aWNtZXRo
b2QKLSAgICAgICAgICAgIGRlZiBnZXRfZXZlbnRfc2V0dGVyX2V4cHJlc3Npb25fcGF0dGVybigp
OgotICAgICAgICAgICAgICAgIHJldHVybiAiKiVzIgotCi0gICAgY2xhc3MgRXhhY3RseUludChW
YWx1ZVR5cGUpOgotICAgICAgICBkZWYgX19pbml0X18oc2VsZik6Ci0gICAgICAgICAgICBUeXBl
TW9kZWwuVmFsdWVUeXBlLl9faW5pdF9fKHNlbGYsICJpbnQiLCBGYWxzZSkKLQotICAgICAgICBk
ZWYgZ2V0X2lucHV0X3BhcmFtX3R5cGVfdGV4dChzZWxmKToKLSAgICAgICAgICAgIHJldHVybiAi
SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6RXhhY3RseUludCIKLQotICAgICAgICBkZWYgZ2V0X29w
dF9vdXRwdXRfdHlwZV8oc2VsZik6Ci0gICAgICAgICAgICByZXR1cm4gIkluc3BlY3Rvcjo6VHlw
ZUJ1aWxkZXI6OkV4YWN0bHlJbnQiCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgaW5pdF9j
bGFzcyhjbHMpOgotICAgICAgICBjbHMuQm9vbCA9IGNscy5WYWx1ZVR5cGUoImJvb2wiLCBGYWxz
ZSkKLSAgICAgICAgaWYgRVhBQ1RMWV9JTlRfU1VQUE9SVEVEOgotICAgICAgICAgICAgY2xzLklu
dCA9IGNscy5FeGFjdGx5SW50KCkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGNscy5JbnQg
PSBjbHMuVmFsdWVUeXBlKCJpbnQiLCBGYWxzZSkKLSAgICAgICAgY2xzLk51bWJlciA9IGNscy5W
YWx1ZVR5cGUoImRvdWJsZSIsIEZhbHNlKQotICAgICAgICBjbHMuU3RyaW5nID0gY2xzLlZhbHVl
VHlwZSgiU3RyaW5nIiwgVHJ1ZSwpCi0gICAgICAgIGNscy5PYmplY3QgPSBjbHMuUmVmUHRyQmFz
ZWQoIkluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0IikKLSAgICAgICAgY2xzLkFycmF5ID0gY2xz
LlJlZlB0ckJhc2VkKCJJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5IikKLSAgICAgICAgY2xzLkFu
eSA9IGNscy5SZWZQdHJCYXNlZCgiSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSIpCi0KLVR5cGVN
b2RlbC5pbml0X2NsYXNzKCkKLQotCi0jIENvbGxlY3Rpb24gb2YgSW5zcGVjdG9yT2JqZWN0IGNs
YXNzIG1ldGhvZHMgdGhhdCBhcmUgbGlrZWx5IHRvIGJlIG92ZXJsb2FkZWQgaW4gZ2VuZXJhdGVk
IGNsYXNzLgotIyBXZSBtdXN0IGV4cGxpY2l0bHkgaW1wb3J0IGFsbCBvdmVybG9hZGVkIG1ldGhv
ZHMgb3IgdGhleSB3b24ndCBiZSBhdmFpbGFibGUgdG8gdXNlci4KLUlOU1BFQ1RPUl9PQkpFQ1Rf
U0VUVEVSX05BTUVTID0gZnJvemVuc2V0KFsic2V0VmFsdWUiLCAic2V0Qm9vbGVhbiIsICJzZXRO
dW1iZXIiLCAic2V0U3RyaW5nIiwgInNldFZhbHVlIiwgInNldE9iamVjdCIsICJzZXRBcnJheSJd
KQotCi0KLWRlZiBmaXhfdHlwZV9uYW1lKGpzb25fbmFtZSk6Ci0gICAgaWYganNvbl9uYW1lIGlu
IFRZUEVfTkFNRV9GSVhfTUFQOgotICAgICAgICBmaXhlZCA9IFRZUEVfTkFNRV9GSVhfTUFQW2pz
b25fbmFtZV0KLQotICAgICAgICBjbGFzcyBSZXN1bHQob2JqZWN0KToKLSAgICAgICAgICAgIGNs
YXNzX25hbWUgPSBmaXhlZAotCi0gICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAg
ICBkZWYgb3V0cHV0X2NvbW1lbnQod3JpdGVyKToKLSAgICAgICAgICAgICAgICB3cml0ZXIubmV3
bGluZSgiLy8gVHlwZSBvcmlnaW5hbGx5IHdhcyBuYW1lZCAnJXMnLlxuIiAlIGpzb25fbmFtZSkK
LSAgICBlbHNlOgotCi0gICAgICAgIGNsYXNzIFJlc3VsdChvYmplY3QpOgotICAgICAgICAgICAg
Y2xhc3NfbmFtZSA9IGpzb25fbmFtZQotCi0gICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAg
ICAgICAgICBkZWYgb3V0cHV0X2NvbW1lbnQod3JpdGVyKToKLSAgICAgICAgICAgICAgICBwYXNz
Ci0KLSAgICByZXR1cm4gUmVzdWx0Ci0KLQotY2xhc3MgV3JpdGVyOgotICAgIGRlZiBfX2luaXRf
XyhzZWxmLCBvdXRwdXQsIGluZGVudCk6Ci0gICAgICAgIHNlbGYub3V0cHV0ID0gb3V0cHV0Ci0g
ICAgICAgIHNlbGYuaW5kZW50ID0gaW5kZW50Ci0KLSAgICBkZWYgbmV3bGluZShzZWxmLCBzdHIp
OgotICAgICAgICBpZiAoc2VsZi5pbmRlbnQpOgotICAgICAgICAgICAgc2VsZi5vdXRwdXQuYXBw
ZW5kKHNlbGYuaW5kZW50KQotICAgICAgICBzZWxmLm91dHB1dC5hcHBlbmQoc3RyKQotCi0gICAg
ZGVmIGFwcGVuZChzZWxmLCBzdHIpOgotICAgICAgICBzZWxmLm91dHB1dC5hcHBlbmQoc3RyKQot
Ci0gICAgZGVmIG5ld2xpbmVfbXVsdGlsaW5lKHNlbGYsIHN0cik6Ci0gICAgICAgIHBhcnRzID0g
c3RyLnNwbGl0KCdcbicpCi0gICAgICAgIHNlbGYubmV3bGluZShwYXJ0c1swXSkKLSAgICAgICAg
Zm9yIHAgaW4gcGFydHNbMTpdOgotICAgICAgICAgICAgc2VsZi5vdXRwdXQuYXBwZW5kKCdcbicp
Ci0gICAgICAgICAgICBpZiBwOgotICAgICAgICAgICAgICAgIHNlbGYubmV3bGluZShwKQotCi0g
ICAgZGVmIGFwcGVuZF9tdWx0aWxpbmUoc2VsZiwgc3RyKToKLSAgICAgICAgcGFydHMgPSBzdHIu
c3BsaXQoJ1xuJykKLSAgICAgICAgc2VsZi5hcHBlbmQocGFydHNbMF0pCi0gICAgICAgIGZvciBw
IGluIHBhcnRzWzE6XToKLSAgICAgICAgICAgIHNlbGYub3V0cHV0LmFwcGVuZCgnXG4nKQotICAg
ICAgICAgICAgaWYgcDoKLSAgICAgICAgICAgICAgICBzZWxmLm5ld2xpbmUocCkKLQotICAgIGRl
ZiBnZXRfaW5kZW50KHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5pbmRlbnQKLQotICAgIGRl
ZiBnZXRfaW5kZW50ZWQoc2VsZiwgYWRkaXRpb25hbF9pbmRlbnQpOgotICAgICAgICByZXR1cm4g
V3JpdGVyKHNlbGYub3V0cHV0LCBzZWxmLmluZGVudCArIGFkZGl0aW9uYWxfaW5kZW50KQotCi0g
ICAgZGVmIGluc2VydF93cml0ZXIoc2VsZiwgYWRkaXRpb25hbF9pbmRlbnQpOgotICAgICAgICBu
ZXdfb3V0cHV0ID0gW10KLSAgICAgICAgc2VsZi5vdXRwdXQuYXBwZW5kKG5ld19vdXRwdXQpCi0g
ICAgICAgIHJldHVybiBXcml0ZXIobmV3X291dHB1dCwgc2VsZi5pbmRlbnQgKyBhZGRpdGlvbmFs
X2luZGVudCkKLQotCi1jbGFzcyBFbnVtQ29uc3RhbnRzOgotICAgIG1hcF8gPSB7fQotICAgIGNv
bnN0YW50c18gPSBbXQotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIGFkZF9jb25zdGFudChj
bHMsIHZhbHVlKToKLSAgICAgICAgaWYgdmFsdWUgaW4gY2xzLm1hcF86Ci0gICAgICAgICAgICBy
ZXR1cm4gY2xzLm1hcF9bdmFsdWVdCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBwb3MgPSBs
ZW4oY2xzLm1hcF8pCi0gICAgICAgICAgICBjbHMubWFwX1t2YWx1ZV0gPSBwb3MKLSAgICAgICAg
ICAgIGNscy5jb25zdGFudHNfLmFwcGVuZCh2YWx1ZSkKLSAgICAgICAgICAgIHJldHVybiBwb3MK
LQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBnZXRfZW51bV9jb25zdGFudF9jb2RlKGNscyk6
Ci0gICAgICAgIG91dHB1dCA9IFtdCi0gICAgICAgIGZvciBpdGVtIGluIGNscy5jb25zdGFudHNf
OgotICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgiICAgIFwiIiArIGl0ZW0gKyAiXCIiKQotICAg
ICAgICByZXR1cm4gIixcbiIuam9pbihvdXRwdXQpICsgIlxuIgotCi0KLSMgVHlwZWJ1aWxkZXIg
Y29kZSBpcyBnZW5lcmF0ZWQgaW4gc2V2ZXJhbCBwYXNzZXM6IGZpcnN0IHR5cGVkZWZzLCB0aGVu
IG90aGVyIGNsYXNzZXMuCi0jIE1hbnVhbCBwYXNzIG1hbmFnZW1lbnQgaXMgbmVlZGVkIGJlY2F1
c2Ugd2UgY2Fubm90IGhhdmUgZm9yd2FyZCBkZWNsYXJhdGlvbnMgZm9yIHR5cGVkZWZzLgotY2xh
c3MgVHlwZUJ1aWxkZXJQYXNzOgotICAgIFRZUEVERUYgPSAidHlwZWRlZiIKLSAgICBNQUlOID0g
Im1haW4iCi0KLQotY2xhc3MgVHlwZUJpbmRpbmdzOgotICAgIEBzdGF0aWNtZXRob2QKLSAgICBk
ZWYgY3JlYXRlX25hbWVkX3R5cGVfZGVjbGFyYXRpb24oanNvbl90eXBhYmxlLCBjb250ZXh0X2Rv
bWFpbl9uYW1lLCB0eXBlX2RhdGEpOgotICAgICAgICBqc29uX3R5cGUgPSB0eXBlX2RhdGEuZ2V0
X2pzb25fdHlwZSgpCi0KLSAgICAgICAgY2xhc3MgSGVscGVyOgotICAgICAgICAgICAgaXNfYWRf
aG9jID0gRmFsc2UKLSAgICAgICAgICAgIGZ1bGxfbmFtZV9wcmVmaXhfZm9yX3VzZSA9ICJJbnNw
ZWN0b3I6OlR5cGVCdWlsZGVyOjoiICsgY29udGV4dF9kb21haW5fbmFtZSArICI6OiIKLSAgICAg
ICAgICAgIGZ1bGxfbmFtZV9wcmVmaXhfZm9yX2ltcGwgPSAiSW5zcGVjdG9yOjpUeXBlQnVpbGRl
cjo6IiArIGNvbnRleHRfZG9tYWluX25hbWUgKyAiOjoiCi0KLSAgICAgICAgICAgIEBzdGF0aWNt
ZXRob2QKLSAgICAgICAgICAgIGRlZiB3cml0ZV9kb2Mod3JpdGVyKToKLSAgICAgICAgICAgICAg
ICBpZiAiZGVzY3JpcHRpb24iIGluIGpzb25fdHlwZToKLSAgICAgICAgICAgICAgICAgICAgd3Jp
dGVyLm5ld2xpbmUoIi8qICIpCi0gICAgICAgICAgICAgICAgICAgIHdyaXRlci5hcHBlbmQoanNv
bl90eXBlWyJkZXNjcmlwdGlvbiJdKQotICAgICAgICAgICAgICAgICAgICB3cml0ZXIuYXBwZW5k
KCIgKi9cbiIpCi0KLSAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgIGRlZiBh
ZGRfdG9fZm9yd2FyZF9saXN0ZW5lcihmb3J3YXJkX2xpc3RlbmVyKToKLSAgICAgICAgICAgICAg
ICBmb3J3YXJkX2xpc3RlbmVyLmFkZF90eXBlX2RhdGEodHlwZV9kYXRhKQotCi0KLSAgICAgICAg
Zml4ZWRfdHlwZV9uYW1lID0gZml4X3R5cGVfbmFtZShqc29uX3R5cGVbImlkIl0pCi0gICAgICAg
IHJldHVybiBUeXBlQmluZGluZ3MuY3JlYXRlX3R5cGVfZGVjbGFyYXRpb25fKGpzb25fdHlwYWJs
ZSwgY29udGV4dF9kb21haW5fbmFtZSwgZml4ZWRfdHlwZV9uYW1lLCBIZWxwZXIpCi0KLSAgICBA
c3RhdGljbWV0aG9kCi0gICAgZGVmIGNyZWF0ZV9hZF9ob2NfdHlwZV9kZWNsYXJhdGlvbihqc29u
X3R5cGFibGUsIGNvbnRleHRfZG9tYWluX25hbWUsIGFkX2hvY190eXBlX2NvbnRleHQpOgotICAg
ICAgICBjbGFzcyBIZWxwZXI6Ci0gICAgICAgICAgICBpc19hZF9ob2MgPSBUcnVlCi0gICAgICAg
ICAgICBmdWxsX25hbWVfcHJlZml4X2Zvcl91c2UgPSBhZF9ob2NfdHlwZV9jb250ZXh0LmNvbnRh
aW5lcl9yZWxhdGl2ZV9uYW1lX3ByZWZpeAotICAgICAgICAgICAgZnVsbF9uYW1lX3ByZWZpeF9m
b3JfaW1wbCA9IGFkX2hvY190eXBlX2NvbnRleHQuY29udGFpbmVyX2Z1bGxfbmFtZV9wcmVmaXgK
LQotICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgZGVmIHdyaXRlX2RvYyh3
cml0ZXIpOgotICAgICAgICAgICAgICAgIHBhc3MKLQotICAgICAgICAgICAgQHN0YXRpY21ldGhv
ZAotICAgICAgICAgICAgZGVmIGFkZF90b19mb3J3YXJkX2xpc3RlbmVyKGZvcndhcmRfbGlzdGVu
ZXIpOgotICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgZml4ZWRfdHlwZV9uYW1lID0gYWRf
aG9jX3R5cGVfY29udGV4dC5nZXRfdHlwZV9uYW1lX2ZpeCgpCi0gICAgICAgIHJldHVybiBUeXBl
QmluZGluZ3MuY3JlYXRlX3R5cGVfZGVjbGFyYXRpb25fKGpzb25fdHlwYWJsZSwgY29udGV4dF9k
b21haW5fbmFtZSwgZml4ZWRfdHlwZV9uYW1lLCBIZWxwZXIpCi0KLSAgICBAc3RhdGljbWV0aG9k
Ci0gICAgZGVmIGNyZWF0ZV90eXBlX2RlY2xhcmF0aW9uXyhqc29uX3R5cGFibGUsIGNvbnRleHRf
ZG9tYWluX25hbWUsIGZpeGVkX3R5cGVfbmFtZSwgaGVscGVyKToKLSAgICAgICAgaWYganNvbl90
eXBhYmxlWyJ0eXBlIl0gPT0gInN0cmluZyI6Ci0gICAgICAgICAgICBpZiAiZW51bSIgaW4ganNv
bl90eXBhYmxlOgotCi0gICAgICAgICAgICAgICAgY2xhc3MgRW51bUJpbmRpbmc6Ci0gICAgICAg
ICAgICAgICAgICAgIG5lZWRfdXNlcl9ydW50aW1lX2Nhc3RfID0gRmFsc2UKLSAgICAgICAgICAg
ICAgICAgICAgbmVlZF9pbnRlcm5hbF9ydW50aW1lX2Nhc3RfID0gRmFsc2UKLQotICAgICAgICAg
ICAgICAgICAgICBAY2xhc3NtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgZGVmIHJlc29sdmVf
aW5uZXIoY2xzLCByZXNvbHZlX2NvbnRleHQpOgotICAgICAgICAgICAgICAgICAgICAgICAgcGFz
cwotCi0gICAgICAgICAgICAgICAgICAgIEBjbGFzc21ldGhvZAotICAgICAgICAgICAgICAgICAg
ICBkZWYgcmVxdWVzdF91c2VyX3J1bnRpbWVfY2FzdChjbHMsIHJlcXVlc3QpOgotICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgcmVxdWVzdDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
bHMubmVlZF91c2VyX3J1bnRpbWVfY2FzdF8gPSBUcnVlCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmVxdWVzdC5hY2tub3dsZWRnZSgpCi0KLSAgICAgICAgICAgICAgICAgICAgQGNsYXNz
bWV0aG9kCi0gICAgICAgICAgICAgICAgICAgIGRlZiByZXF1ZXN0X2ludGVybmFsX3J1bnRpbWVf
Y2FzdChjbHMpOgotICAgICAgICAgICAgICAgICAgICAgICAgY2xzLm5lZWRfaW50ZXJuYWxfcnVu
dGltZV9jYXN0XyA9IFRydWUKLQotICAgICAgICAgICAgICAgICAgICBAY2xhc3NtZXRob2QKLSAg
ICAgICAgICAgICAgICAgICAgZGVmIGdldF9jb2RlX2dlbmVyYXRvcihlbnVtX2JpbmRpbmdfY2xz
KToKLSAgICAgICAgICAgICAgICAgICAgICAgICNGSVhNRTogZ2VuZXJhdGUgYWQtaG9jIGVudW1z
IHRvbyBvbmNlIHdlIGZpZ3VyZSBvdXQgaG93IHRvIGJldHRlciBpbXBsZW1lbnQgdGhlbSBpbiBD
KysuCi0gICAgICAgICAgICAgICAgICAgICAgICBjb21tZW50X291dCA9IGhlbHBlci5pc19hZF9o
b2MKLQotICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3MgQ29kZUdlbmVyYXRvcjoKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZGVmIGdlbmVyYXRlX3R5cGVfYnVpbGRlcih3cml0ZXIsIGdlbmVyYXRlX2NvbnRl
eHQpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtID0ganNvbl90eXBhYmxl
WyJlbnVtIl0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscGVyLndyaXRlX2Rv
Yyh3cml0ZXIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW1fbmFtZSA9IGZp
eGVkX3R5cGVfbmFtZS5jbGFzc19uYW1lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZpeGVkX3R5cGVfbmFtZS5vdXRwdXRfY29tbWVudCh3cml0ZXIpCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCJzdHJ1Y3QgIikKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVuZChlbnVtX25hbWUpCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHdyaXRlci5hcHBlbmQoIiB7XG4iKQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB3cml0ZXIubmV3bGluZSgiICAgIGVudW0gRW51bSB7XG4iKQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgZW51bV9pdGVtIGluIGVudW06Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtX3BvcyA9IEVudW1Db25zdGFudHMu
YWRkX2NvbnN0YW50KGVudW1faXRlbSkKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaXRlbV9jX25hbWUgPSBmaXhfY2FtZWxfY2FzZShlbnVtX2l0ZW0pCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBpdGVtX2NfbmFtZSBpbiBUWVBFX05BTUVfRklY
X01BUDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtX2NfbmFt
ZSA9IFRZUEVfTkFNRV9GSVhfTUFQW2l0ZW1fY19uYW1lXQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIiAgICAgICAgIikKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5hcHBlbmQoaXRlbV9jX25hbWUpCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuYXBwZW5kKCIgPSAiKQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVuZCgiJXMiICUgZW51bV9w
b3MpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuYXBwZW5kKCIs
XG4iKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3bGluZSgiICAg
IH07XG4iKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBlbnVtX2JpbmRpbmdf
Y2xzLm5lZWRfdXNlcl9ydW50aW1lX2Nhc3RfOgotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJOb3QgeWV0IGltcGxlbWVudGVkIikKLQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBlbnVtX2JpbmRpbmdfY2xzLm5lZWRfaW50ZXJu
YWxfcnVudGltZV9jYXN0XzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdy
aXRlci5hcHBlbmQoIiNpZiAlc1xuIiAlIFZBTElEQVRPUl9JRkRFRl9OQU1FKQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIiAgICBzdGF0aWMgdm9p
ZCBhc3NlcnRDb3JyZWN0VmFsdWUoSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSogdmFsdWUpO1xu
IikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5hcHBlbmQoIiNl
bmRpZiAgLy8gJXNcbiIgJSBWQUxJREFUT1JfSUZERUZfTkFNRSkKLQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlciA9IGdlbmVyYXRlX2NvbnRleHQu
dmFsaWRhdG9yX3dyaXRlcgotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
b21haW5fZml4ZXMgPSBEb21haW5OYW1lRml4ZXMuZ2V0X2ZpeGVkX2RhdGEoY29udGV4dF9kb21h
aW5fbmFtZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbWFpbl9ndWFy
ZCA9IGRvbWFpbl9maXhlcy5nZXRfZ3VhcmQoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgZG9tYWluX2d1YXJkOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRvbWFpbl9ndWFyZC5nZW5lcmF0ZV9vcGVuKHZhbGlkYXRvcl93cml0ZXIpCi0K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3
bGluZSgidm9pZCAlcyVzOjphc3NlcnRDb3JyZWN0VmFsdWUoSW5zcGVjdG9yOjpJbnNwZWN0b3JW
YWx1ZSogdmFsdWUpXG4iICUgKGhlbHBlci5mdWxsX25hbWVfcHJlZml4X2Zvcl9pbXBsLCBlbnVt
X25hbWUpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dy
aXRlci5uZXdsaW5lKCJ7XG4iKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCIgICAgV1RGOjpTdHJpbmcgcztcbiIpCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIiAg
ICBib29sIGNhc3RfcmVzID0gdmFsdWUtPmFzU3RyaW5nKCZzKTtcbiIpCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIiAgICBBU1NF
UlQoY2FzdF9yZXMpO1xuIikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
IGxlbihlbnVtKSA+IDA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uZGl0aW9uX2xpc3QgPSBbXQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGZvciBlbnVtX2l0ZW0gaW4gZW51bToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZW51bV9wb3MgPSBFbnVtQ29uc3RhbnRzLmFkZF9jb25zdGFudChlbnVt
X2l0ZW0pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRp
dGlvbl9saXN0LmFwcGVuZCgicyA9PSBcIiVzXCIiICUgZW51bV9pdGVtKQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgiICAg
IEFTU0VSVCglcyk7XG4iICUgIiB8fCAiLmpvaW4oY29uZGl0aW9uX2xpc3QpKQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCJ9XG4i
KQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBkb21haW5fZ3VhcmQ6
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9tYWluX2d1YXJkLmdl
bmVyYXRlX2Nsb3NlKHZhbGlkYXRvcl93cml0ZXIpCi0KLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgiXG5cbiIpCi0KLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIn07IC8vIHN0cnVjdCAiKQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuYXBwZW5kKGVudW1fbmFtZSkK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVuZCgiXG4iKQotCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGRlZiByZWdpc3Rlcl91c2UoZm9yd2FyZF9saXN0ZW5lcik6Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKLQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X2dl
bmVyYXRlX3Bhc3NfaWQoKToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IFR5cGVCdWlsZGVyUGFzcy5NQUlOCi0KLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBD
b2RlR2VuZXJhdG9yCi0KLSAgICAgICAgICAgICAgICAgICAgQGNsYXNzbWV0aG9kCi0gICAgICAg
ICAgICAgICAgICAgIGRlZiBnZXRfdmFsaWRhdG9yX2NhbGxfdGV4dChjbHMpOgotICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGhlbHBlci5mdWxsX25hbWVfcHJlZml4X2Zvcl91c2UgKyBm
aXhlZF90eXBlX25hbWUuY2xhc3NfbmFtZSArICI6OmFzc2VydENvcnJlY3RWYWx1ZSIKLQotICAg
ICAgICAgICAgICAgICAgICBAY2xhc3NtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgZGVmIGdl
dF9hcnJheV9pdGVtX2NfdHlwZV90ZXh0KGNscyk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gaGVscGVyLmZ1bGxfbmFtZV9wcmVmaXhfZm9yX3VzZSArIGZpeGVkX3R5cGVfbmFtZS5j
bGFzc19uYW1lICsgIjo6RW51bSIKLQotICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9k
Ci0gICAgICAgICAgICAgICAgICAgIGRlZiBnZXRfc2V0dGVyX3ZhbHVlX2V4cHJlc3Npb25fcGF0
dGVybigpOgotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJJbnNwZWN0b3I6OlR5cGVC
dWlsZGVyOjpnZXQlc0VudW1Db25zdGFudFZhbHVlKCVzKSIKLQotICAgICAgICAgICAgICAgICAg
ICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgIGRlZiByZWR1Y2VfdG9fcmF3X3R5
cGUoKToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSYXdUeXBlcy5TdHJpbmcKLQot
ICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgIGRl
ZiBnZXRfdHlwZV9tb2RlbCgpOgotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFR5cGVN
b2RlbC5FbnVtKGhlbHBlci5mdWxsX25hbWVfcHJlZml4X2Zvcl91c2UgKyBmaXhlZF90eXBlX25h
bWUuY2xhc3NfbmFtZSkKLQotICAgICAgICAgICAgICAgIHJldHVybiBFbnVtQmluZGluZwotICAg
ICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBpZiBoZWxwZXIuaXNfYWRfaG9jOgotCi0g
ICAgICAgICAgICAgICAgICAgIGNsYXNzIFBsYWluU3RyaW5nOgotICAgICAgICAgICAgICAgICAg
ICAgICAgQGNsYXNzbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWYgcmVzb2x2ZV9p
bm5lcihjbHMsIHJlc29sdmVfY29udGV4dCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
cGFzcwotCi0gICAgICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAg
ICAgICAgICAgICAgICBkZWYgcmVxdWVzdF91c2VyX3J1bnRpbWVfY2FzdChyZXF1ZXN0KToKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIlVuc3VwcG9ydGVkIikK
LQotICAgICAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgICAg
ICAgICAgICAgZGVmIHJlcXVlc3RfaW50ZXJuYWxfcnVudGltZV9jYXN0KCk6Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcGFzcwotCi0gICAgICAgICAgICAgICAgICAgICAgICBAc3RhdGlj
bWV0aG9kCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X2NvZGVfZ2VuZXJhdG9yKCk6
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKLQotICAgICAgICAgICAg
ICAgICAgICAgICAgQGNsYXNzbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0
X3ZhbGlkYXRvcl9jYWxsX3RleHQoY2xzKToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gUmF3VHlwZXMuU3RyaW5nLmdldF9yYXdfdmFsaWRhdG9yX2NhbGxfdGV4dCgpCi0KLSAg
ICAgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGRlZiByZWR1Y2VfdG9fcmF3X3R5cGUoKToKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gUmF3VHlwZXMuU3RyaW5nCi0KLSAgICAgICAgICAgICAgICAgICAgICAgIEBzdGF0
aWNtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBnZXRfdHlwZV9tb2RlbCgpOgot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBUeXBlTW9kZWwuU3RyaW5nCi0KLSAg
ICAgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGRlZiBnZXRfc2V0dGVyX3ZhbHVlX2V4cHJlc3Npb25fcGF0dGVybigpOgotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBOb25lCi0KLSAgICAgICAgICAgICAgICAgICAgICAg
IEBjbGFzc21ldGhvZAotICAgICAgICAgICAgICAgICAgICAgICAgZGVmIGdldF9hcnJheV9pdGVt
X2NfdHlwZV90ZXh0KGNscyk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNs
cy5yZWR1Y2VfdG9fcmF3X3R5cGUoKS5nZXRfYXJyYXlfaXRlbV9yYXdfY190eXBlX3RleHQoKQot
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBQbGFpblN0cmluZwotCi0gICAgICAgICAgICAg
ICAgZWxzZToKLQotICAgICAgICAgICAgICAgICAgICBjbGFzcyBUeXBlZGVmU3RyaW5nOgotICAg
ICAgICAgICAgICAgICAgICAgICAgQGNsYXNzbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgICAg
ICBkZWYgcmVzb2x2ZV9pbm5lcihjbHMsIHJlc29sdmVfY29udGV4dCk6Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcGFzcwotCi0gICAgICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0
aG9kCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWYgcmVxdWVzdF91c2VyX3J1bnRpbWVfY2Fz
dChyZXF1ZXN0KToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24o
IlVuc3VwcG9ydGVkIikKLQotICAgICAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAot
ICAgICAgICAgICAgICAgICAgICAgICAgZGVmIHJlcXVlc3RfaW50ZXJuYWxfcnVudGltZV9jYXN0
KCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgUmF3VHlwZXMuU3RyaW5nLnJlcXVlc3Rf
cmF3X2ludGVybmFsX3J1bnRpbWVfY2FzdCgpCi0KLSAgICAgICAgICAgICAgICAgICAgICAgIEBz
dGF0aWNtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBnZXRfY29kZV9nZW5lcmF0
b3IoKToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcyBDb2RlR2VuZXJhdG9yOgot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRlZiBnZW5lcmF0ZV90eXBlX2J1aWxkZXIod3JpdGVyLCBn
ZW5lcmF0ZV9jb250ZXh0KToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhl
bHBlci53cml0ZV9kb2Mod3JpdGVyKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZml4ZWRfdHlwZV9uYW1lLm91dHB1dF9jb21tZW50KHdyaXRlcikKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCJ0eXBlZGVmIFN0cmluZyAiKQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVuZChmaXhlZF90
eXBlX25hbWUuY2xhc3NfbmFtZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHdyaXRlci5hcHBlbmQoIjtcblxuIikKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZiByZWdp
c3Rlcl91c2UoZm9yd2FyZF9saXN0ZW5lcik6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwYXNzCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21l
dGhvZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X2dlbmVyYXRlX3Bh
c3NfaWQoKToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBUeXBl
QnVpbGRlclBhc3MuVFlQRURFRgotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IENvZGVHZW5lcmF0b3IKLQotICAgICAgICAgICAgICAgICAgICAgICAgQGNsYXNzbWV0aG9kCi0g
ICAgICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X3ZhbGlkYXRvcl9jYWxsX3RleHQoY2xzKToK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmF3VHlwZXMuU3RyaW5nLmdldF9y
YXdfdmFsaWRhdG9yX2NhbGxfdGV4dCgpCi0KLSAgICAgICAgICAgICAgICAgICAgICAgIEBzdGF0
aWNtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlZiByZWR1Y2VfdG9fcmF3X3R5cGUo
KToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmF3VHlwZXMuU3RyaW5nCi0K
LSAgICAgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGRlZiBnZXRfdHlwZV9tb2RlbCgpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBUeXBlTW9kZWwuVmFsdWVUeXBlKCIlcyVzIiAlIChoZWxwZXIuZnVsbF9uYW1lX3By
ZWZpeF9mb3JfdXNlLCBmaXhlZF90eXBlX25hbWUuY2xhc3NfbmFtZSksIFRydWUpCi0KLSAgICAg
ICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgICAg
IGRlZiBnZXRfc2V0dGVyX3ZhbHVlX2V4cHJlc3Npb25fcGF0dGVybigpOgotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBOb25lCi0KLSAgICAgICAgICAgICAgICAgICAgICAgIEBj
bGFzc21ldGhvZAotICAgICAgICAgICAgICAgICAgICAgICAgZGVmIGdldF9hcnJheV9pdGVtX2Nf
dHlwZV90ZXh0KGNscyk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJjb25z
dCAlcyVzJiIgJSAoaGVscGVyLmZ1bGxfbmFtZV9wcmVmaXhfZm9yX3VzZSwgZml4ZWRfdHlwZV9u
YW1lLmNsYXNzX25hbWUpCi0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFR5cGVkZWZTdHJp
bmcKLQotICAgICAgICBlbGlmIGpzb25fdHlwYWJsZVsidHlwZSJdID09ICJpbnRlZ2VyIjoKLSAg
ICAgICAgICAgICAgICBpZiBoZWxwZXIuaXNfYWRfaG9jOgotCi0gICAgICAgICAgICAgICAgICAg
IGNsYXNzIFBsYWluSW50ZWdlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgIEBjbGFzc21ldGhv
ZAotICAgICAgICAgICAgICAgICAgICAgICAgZGVmIHJlc29sdmVfaW5uZXIoY2xzLCByZXNvbHZl
X2NvbnRleHQpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKLQotICAgICAgICAg
ICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgICAgICAgICAgICAgZGVm
IHJlcXVlc3RfdXNlcl9ydW50aW1lX2Nhc3QocmVxdWVzdCk6Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJVbnN1cHBvcnRlZCIpCi0KLSAgICAgICAgICAgICAg
ICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlZiByZXF1
ZXN0X2ludGVybmFsX3J1bnRpbWVfY2FzdCgpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHBhc3MKLQotICAgICAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAg
ICAgICAgICAgICAgICAgZGVmIGdldF9jb2RlX2dlbmVyYXRvcigpOgotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBOb25lCi0KLSAgICAgICAgICAgICAgICAgICAgICAgIEBjbGFz
c21ldGhvZAotICAgICAgICAgICAgICAgICAgICAgICAgZGVmIGdldF92YWxpZGF0b3JfY2FsbF90
ZXh0KGNscyk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJhd1R5cGVzLklu
dC5nZXRfcmF3X3ZhbGlkYXRvcl9jYWxsX3RleHQoKQotCi0gICAgICAgICAgICAgICAgICAgICAg
ICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWYgcmVkdWNlX3RvX3Jh
d190eXBlKCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJhd1R5cGVzLklu
dAotCi0gICAgICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICAg
ICAgICAgICAgICBkZWYgZ2V0X3R5cGVfbW9kZWwoKToKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gVHlwZU1vZGVsLkludAotCi0gICAgICAgICAgICAgICAgICAgICAgICBAc3Rh
dGljbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X3NldHRlcl92YWx1ZV9l
eHByZXNzaW9uX3BhdHRlcm4oKToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
Tm9uZQotCi0gICAgICAgICAgICAgICAgICAgICAgICBAY2xhc3NtZXRob2QKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGRlZiBnZXRfYXJyYXlfaXRlbV9jX3R5cGVfdGV4dChjbHMpOgotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjbHMucmVkdWNlX3RvX3Jhd190eXBlKCkuZ2V0
X2FycmF5X2l0ZW1fcmF3X2NfdHlwZV90ZXh0KCkKLQotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gUGxhaW5JbnRlZ2VyCi0KLSAgICAgICAgICAgICAgICBlbHNlOgotCi0gICAgICAgICAgICAg
ICAgICAgIGNsYXNzIFR5cGVkZWZJbnRlZ2VyOgotICAgICAgICAgICAgICAgICAgICAgICAgQGNs
YXNzbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWYgcmVzb2x2ZV9pbm5lcihjbHMs
IHJlc29sdmVfY29udGV4dCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzcwotCi0g
ICAgICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICAgICAgICAg
ICAgICBkZWYgcmVxdWVzdF91c2VyX3J1bnRpbWVfY2FzdChyZXF1ZXN0KToKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIlVuc3VwcG9ydGVkIikKLQotICAgICAg
ICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgICAgICAgICAgICAg
ZGVmIHJlcXVlc3RfaW50ZXJuYWxfcnVudGltZV9jYXN0KCk6Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgUmF3VHlwZXMuSW50LnJlcXVlc3RfcmF3X2ludGVybmFsX3J1bnRpbWVfY2FzdCgp
Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGRlZiBnZXRfY29kZV9nZW5lcmF0b3IoKToKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjbGFzcyBDb2RlR2VuZXJhdG9yOgotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBn
ZW5lcmF0ZV90eXBlX2J1aWxkZXIod3JpdGVyLCBnZW5lcmF0ZV9jb250ZXh0KToKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHBlci53cml0ZV9kb2Mod3JpdGVyKQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZml4ZWRfdHlwZV9uYW1lLm91dHB1dF9j
b21tZW50KHdyaXRlcikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRl
ci5uZXdsaW5lKCJ0eXBlZGVmIGludCAiKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgd3JpdGVyLmFwcGVuZChmaXhlZF90eXBlX25hbWUuY2xhc3NfbmFtZSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5hcHBlbmQoIjtcblxuIikKLQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRlZiByZWdpc3Rlcl91c2UoZm9yd2FyZF9saXN0ZW5lcik6Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCi0KLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkZWYgZ2V0X2dlbmVyYXRlX3Bhc3NfaWQoKToKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBUeXBlQnVpbGRlclBhc3MuVFlQRURFRgotCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENvZGVHZW5lcmF0b3IKLQotICAgICAgICAgICAg
ICAgICAgICAgICAgQGNsYXNzbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0
X3ZhbGlkYXRvcl9jYWxsX3RleHQoY2xzKToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gUmF3VHlwZXMuSW50LmdldF9yYXdfdmFsaWRhdG9yX2NhbGxfdGV4dCgpCi0KLSAgICAg
ICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgICAg
IGRlZiByZWR1Y2VfdG9fcmF3X3R5cGUoKToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gUmF3VHlwZXMuSW50Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRo
b2QKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBnZXRfdHlwZV9tb2RlbCgpOgotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBUeXBlTW9kZWwuSW50Ci0KLSAgICAgICAgICAg
ICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBn
ZXRfc2V0dGVyX3ZhbHVlX2V4cHJlc3Npb25fcGF0dGVybigpOgotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBOb25lCi0KLSAgICAgICAgICAgICAgICAgICAgICAgIEBjbGFzc21l
dGhvZAotICAgICAgICAgICAgICAgICAgICAgICAgZGVmIGdldF9hcnJheV9pdGVtX2NfdHlwZV90
ZXh0KGNscyk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhlbHBlci5mdWxs
X25hbWVfcHJlZml4X2Zvcl91c2UgKyBmaXhlZF90eXBlX25hbWUuY2xhc3NfbmFtZQotCi0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBUeXBlZGVmSW50ZWdlcgotCi0gICAgICAgIGVsaWYganNv
bl90eXBhYmxlWyJ0eXBlIl0gPT0gIm9iamVjdCI6Ci0gICAgICAgICAgICBpZiAicHJvcGVydGll
cyIgaW4ganNvbl90eXBhYmxlOgotCi0gICAgICAgICAgICAgICAgY2xhc3MgQ2xhc3NCaW5kaW5n
OgotICAgICAgICAgICAgICAgICAgICByZXNvbHZlX2RhdGFfID0gTm9uZQotICAgICAgICAgICAg
ICAgICAgICBuZWVkX3VzZXJfcnVudGltZV9jYXN0XyA9IEZhbHNlCi0gICAgICAgICAgICAgICAg
ICAgIG5lZWRfaW50ZXJuYWxfcnVudGltZV9jYXN0XyA9IEZhbHNlCi0KLSAgICAgICAgICAgICAg
ICAgICAgQGNsYXNzbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgIGRlZiByZXNvbHZlX2lubmVy
KGNscywgcmVzb2x2ZV9jb250ZXh0KToKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIGNscy5y
ZXNvbHZlX2RhdGFfOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybgotCi0gICAg
ICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzID0ganNvbl90eXBhYmxlWyJwcm9wZXJ0aWVz
Il0KLSAgICAgICAgICAgICAgICAgICAgICAgIG1haW4gPSBbXQotICAgICAgICAgICAgICAgICAg
ICAgICAgb3B0aW9uYWwgPSBbXQotCi0gICAgICAgICAgICAgICAgICAgICAgICBhZF9ob2NfdHlw
ZV9saXN0ID0gW10KLQotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHByb3AgaW4gcHJvcGVy
dGllczoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wX25hbWUgPSBwcm9wWyJuYW1l
Il0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZF9ob2NfdHlwZV9jb250ZXh0ID0gY2xz
LkFkSG9jVHlwZUNvbnRleHRJbXBsKHByb3BfbmFtZSwgZml4ZWRfdHlwZV9uYW1lLmNsYXNzX25h
bWUsIHJlc29sdmVfY29udGV4dCwgYWRfaG9jX3R5cGVfbGlzdCwgaGVscGVyLmZ1bGxfbmFtZV9w
cmVmaXhfZm9yX2ltcGwpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmluZGluZyA9IHJl
c29sdmVfcGFyYW1fdHlwZShwcm9wLCBjb250ZXh0X2RvbWFpbl9uYW1lLCBhZF9ob2NfdHlwZV9j
b250ZXh0KQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZV9nZW5lcmF0b3IgPSBi
aW5kaW5nLmdldF9jb2RlX2dlbmVyYXRvcigpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgY29kZV9nZW5lcmF0b3I6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVf
Z2VuZXJhdG9yLnJlZ2lzdGVyX3VzZShyZXNvbHZlX2NvbnRleHQuZm9yd2FyZF9saXN0ZW5lcikK
LQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzIFByb3BlcnR5RGF0YToKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1fdHlwZV9iaW5kaW5nID0gYmluZGluZwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwID0gcHJvcAotCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgcHJvcC5nZXQoIm9wdGlvbmFsIik6Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG9wdGlvbmFsLmFwcGVuZChQcm9wZXJ0eURhdGEpCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bWFpbi5hcHBlbmQoUHJvcGVydHlEYXRhKQotCi0gICAgICAgICAgICAgICAgICAgICAgICBjbGFz
cyBSZXNvbHZlRGF0YToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWluX3Byb3BlcnRp
ZXMgPSBtYWluCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWxfcHJvcGVydGll
cyA9IG9wdGlvbmFsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRfaG9jX3R5cGVzID0g
YWRfaG9jX3R5cGVfbGlzdAotCi0gICAgICAgICAgICAgICAgICAgICAgICBjbHMucmVzb2x2ZV9k
YXRhXyA9IFJlc29sdmVEYXRhCi0KLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciBhZF9ob2Mg
aW4gYWRfaG9jX3R5cGVfbGlzdDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZF9ob2Mu
cmVzb2x2ZV9pbm5lcihyZXNvbHZlX2NvbnRleHQpCi0KLSAgICAgICAgICAgICAgICAgICAgQGNs
YXNzbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgIGRlZiByZXF1ZXN0X3VzZXJfcnVudGltZV9j
YXN0KGNscywgcmVxdWVzdCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgcmVxdWVz
dDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4KLSAgICAgICAgICAgICAgICAg
ICAgICAgIGNscy5uZWVkX3VzZXJfcnVudGltZV9jYXN0XyA9IFRydWUKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHJlcXVlc3QuYWNrbm93bGVkZ2UoKQotICAgICAgICAgICAgICAgICAgICAgICAg
Y2xzLnJlcXVlc3RfaW50ZXJuYWxfcnVudGltZV9jYXN0KCkKLQotICAgICAgICAgICAgICAgICAg
ICBAY2xhc3NtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgZGVmIHJlcXVlc3RfaW50ZXJuYWxf
cnVudGltZV9jYXN0KGNscyk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiBjbHMubmVlZF9p
bnRlcm5hbF9ydW50aW1lX2Nhc3RfOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
bgotICAgICAgICAgICAgICAgICAgICAgICAgY2xzLm5lZWRfaW50ZXJuYWxfcnVudGltZV9jYXN0
XyA9IFRydWUKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciBwIGluIGNscy5yZXNvbHZlX2Rh
dGFfLm1haW5fcHJvcGVydGllczoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLnBhcmFt
X3R5cGVfYmluZGluZy5yZXF1ZXN0X2ludGVybmFsX3J1bnRpbWVfY2FzdCgpCi0gICAgICAgICAg
ICAgICAgICAgICAgICBmb3IgcCBpbiBjbHMucmVzb2x2ZV9kYXRhXy5vcHRpb25hbF9wcm9wZXJ0
aWVzOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAucGFyYW1fdHlwZV9iaW5kaW5nLnJl
cXVlc3RfaW50ZXJuYWxfcnVudGltZV9jYXN0KCkKLQotICAgICAgICAgICAgICAgICAgICBAY2xh
c3NtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgZGVmIGdldF9jb2RlX2dlbmVyYXRvcihjbGFz
c19iaW5kaW5nX2Nscyk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcyBDb2RlR2VuZXJh
dG9yOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBjbGFzc21ldGhvZAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRlZiBnZW5lcmF0ZV90eXBlX2J1aWxkZXIoY2xzLCB3cml0ZXIs
IGdlbmVyYXRlX2NvbnRleHQpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNv
bHZlX2RhdGEgPSBjbGFzc19iaW5kaW5nX2Nscy5yZXNvbHZlX2RhdGFfCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGhlbHBlci53cml0ZV9kb2Mod3JpdGVyKQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjbGFzc19uYW1lID0gZml4ZWRfdHlwZV9uYW1lLmNsYXNzX25h
bWUKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc19vcGVuX3R5cGUgPSAoY29u
dGV4dF9kb21haW5fbmFtZSArICIuIiArIGNsYXNzX25hbWUpIGluIFRZUEVTX1dJVEhfT1BFTl9G
SUVMRF9MSVNUX1NFVAotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpeGVkX3R5
cGVfbmFtZS5vdXRwdXRfY29tbWVudCh3cml0ZXIpCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHdyaXRlci5uZXdsaW5lKCJjbGFzcyAiKQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB3cml0ZXIuYXBwZW5kKGNsYXNzX25hbWUpCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHdyaXRlci5hcHBlbmQoIiA6IHB1YmxpYyAiKQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiBpc19vcGVuX3R5cGU6Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB3cml0ZXIuYXBwZW5kKCJJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCIpCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB3cml0ZXIuYXBwZW5kKCJJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVj
dEJhc2UiKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuYXBwZW5kKCIg
e1xuIikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoInB1
YmxpYzpcbiIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkX2hvY190eXBlX3dy
aXRlciA9IHdyaXRlci5pbnNlcnRfd3JpdGVyKCIgICAgIikKLQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmb3IgYWRfaG9jX3R5cGUgaW4gcmVzb2x2ZV9kYXRhLmFkX2hvY190eXBl
czoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVfZ2VuZXJhdG9yID0g
YWRfaG9jX3R5cGUuZ2V0X2NvZGVfZ2VuZXJhdG9yKCkKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIGNvZGVfZ2VuZXJhdG9yOgotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvZGVfZ2VuZXJhdG9yLmdlbmVyYXRlX3R5cGVfYnVpbGRlcihhZF9o
b2NfdHlwZV93cml0ZXIsIGdlbmVyYXRlX2NvbnRleHQpCi0KLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmVfbXVsdGlsaW5lKAotIiIiICAgIGVudW0gewotICAg
ICAgICBOb0ZpZWxkc1NldCA9IDAsCi0iIiIpCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3RhdGVfZW51bV9pdGVtcyA9IFtdCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIGxlbihyZXNvbHZlX2RhdGEubWFpbl9wcm9wZXJ0aWVzKSA+IDA6Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwb3MgPSAwCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmb3IgcHJvcF9kYXRhIGluIHJlc29sdmVfZGF0YS5tYWluX3Byb3BlcnRp
ZXM6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbV9uYW1lID0g
Q2FwaXRhbGl6ZXIubG93ZXJfY2FtZWxfY2FzZV90b191cHBlcihwcm9wX2RhdGEucFsibmFtZSJd
KSArICJTZXQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVf
ZW51bV9pdGVtcy5hcHBlbmQoaXRlbV9uYW1lKQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCIgICAgICAgICVzID0gMSA8PCAlcyxcbiIgJSAo
aXRlbV9uYW1lLCBwb3MpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHBvcyArPSAxCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxfZmllbGRz
X3NldF92YWx1ZSA9ICIoIiArICgiIHwgIi5qb2luKHN0YXRlX2VudW1faXRlbXMpKSArICIpIgot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYWxsX2ZpZWxkc19zZXRfdmFsdWUgPSAiMCIKLQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3bGluZV9tdWx0aWxpbmUoQ29kZUdlbmVy
YXRvckluc3BlY3RvclN0cmluZ3MuY2xhc3NfYmluZGluZ19idWlsZGVyX3BhcnRfMQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAoYWxs
X2ZpZWxkc19zZXRfdmFsdWUsIGNsYXNzX25hbWUsIGNsYXNzX25hbWUpKQotCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHBvcyA9IDAKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZm9yIHByb3BfZGF0YSBpbiByZXNvbHZlX2RhdGEubWFpbl9wcm9wZXJ0aWVzOgotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcF9uYW1lID0gcHJvcF9kYXRhLnBb
Im5hbWUiXQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbV90eXBl
X2JpbmRpbmcgPSBwcm9wX2RhdGEucGFyYW1fdHlwZV9iaW5kaW5nCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwYXJhbV9yYXdfdHlwZSA9IHBhcmFtX3R5cGVfYmluZGluZy5y
ZWR1Y2VfdG9fcmF3X3R5cGUoKQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB3cml0ZXIubmV3bGluZV9tdWx0aWxpbmUoQ29kZUdlbmVyYXRvckluc3BlY3RvclN0cmluZ3Mu
Y2xhc3NfYmluZGluZ19idWlsZGVyX3BhcnRfMgotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICUgKHN0YXRlX2VudW1faXRlbXNbcG9zXSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBDYXBpdGFsaXplci5sb3dlcl9jYW1lbF9jYXNlX3Rv
X3VwcGVyKHByb3BfbmFtZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcGFyYW1fdHlwZV9iaW5kaW5nLmdldF90eXBlX21vZGVsKCkuZ2V0X2lucHV0X3BhcmFt
X3R5cGVfdGV4dCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0YXRlX2VudW1faXRlbXNbcG9zXSwgcHJvcF9uYW1lLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHBhcmFtX3Jhd190eXBlLmdldF9zZXR0ZXJfbmFtZSgpLCBw
cm9wX25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9y
bWF0X3NldHRlcl92YWx1ZV9leHByZXNzaW9uKHBhcmFtX3R5cGVfYmluZGluZywgInZhbHVlIiks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfZW51bV9p
dGVtc1twb3NdKSkKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zICs9
IDEKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3bGluZV9tdWx0
aWxpbmUoQ29kZUdlbmVyYXRvckluc3BlY3RvclN0cmluZ3MuY2xhc3NfYmluZGluZ19idWlsZGVy
X3BhcnRfMwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJSAoY2xhc3NfbmFtZSwgY2xhc3NfbmFtZSwgY2xhc3NfbmFtZSwgY2xhc3NfbmFt
ZSwgY2xhc3NfbmFtZSkpCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVy
Lm5ld2xpbmUoIiAgICAvKlxuIikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3Jp
dGVyLm5ld2xpbmUoIiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6XG4iKQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3bGluZSgiICAgICAqIFJlZlB0cjwlcz4g
cmVzdWx0ID0gJXM6OmNyZWF0ZSgpIiAlIChjbGFzc19uYW1lLCBjbGFzc19uYW1lKSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHByb3BfZGF0YSBpbiByZXNvbHZlX2RhdGEu
bWFpbl9wcm9wZXJ0aWVzOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3Jp
dGVyLmFwcGVuZF9tdWx0aWxpbmUoIlxuICAgICAqICAgICAuc2V0JXMoLi4uKSIgJSBDYXBpdGFs
aXplci5sb3dlcl9jYW1lbF9jYXNlX3RvX3VwcGVyKHByb3BfZGF0YS5wWyJuYW1lIl0pKQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuYXBwZW5kX211bHRpbGluZSgiO1xu
ICAgICAqL1xuIikKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3
bGluZV9tdWx0aWxpbmUoQ29kZUdlbmVyYXRvckluc3BlY3RvclN0cmluZ3MuY2xhc3NfYmluZGlu
Z19idWlsZGVyX3BhcnRfNCkKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0
ZXIubmV3bGluZSgiICAgIHR5cGVkZWYgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6U3RydWN0SXRl
bVRyYWl0cyBJdGVtVHJhaXRzO1xuIikKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmb3IgcHJvcF9kYXRhIGluIHJlc29sdmVfZGF0YS5vcHRpb25hbF9wcm9wZXJ0aWVzOgotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcF9uYW1lID0gcHJvcF9kYXRhLnBb
Im5hbWUiXQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1fdHlwZV9i
aW5kaW5nID0gcHJvcF9kYXRhLnBhcmFtX3R5cGVfYmluZGluZwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2V0dGVyX25hbWUgPSAic2V0JXMiICUgQ2FwaXRhbGl6ZXIubG93
ZXJfY2FtZWxfY2FzZV90b191cHBlcihwcm9wX25hbWUpCi0KLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHdyaXRlci5hcHBlbmRfbXVsdGlsaW5lKCJcbiAgICB2b2lkICVzIiAl
IHNldHRlcl9uYW1lKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVy
LmFwcGVuZCgiKCVzIHZhbHVlKVxuIiAlIHBhcmFtX3R5cGVfYmluZGluZy5nZXRfdHlwZV9tb2Rl
bCgpLmdldF9pbnB1dF9wYXJhbV90eXBlX3RleHQoKSkKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCIgICAge1xuIikKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCIgICAgICAgIHRoaXMtPnNldCVzKEFT
Q0lJTGl0ZXJhbChcIiVzXCIpLCAlcyk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJSAocGFyYW1fdHlwZV9iaW5kaW5nLnJlZHVjZV90b19yYXdfdHlwZSgpLmdl
dF9zZXR0ZXJfbmFtZSgpLCBwcm9wX2RhdGEucFsibmFtZSJdLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdF9zZXR0ZXJfdmFsdWVfZXhwcmVzc2lvbihw
YXJhbV90eXBlX2JpbmRpbmcsICJ2YWx1ZSIpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCIgICAgfVxuIikKLQotCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiBzZXR0ZXJfbmFtZSBpbiBJTlNQRUNUT1JfT0JKRUNUX1NF
VFRFUl9OQU1FUzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0
ZXIubmV3bGluZSgiICAgIHVzaW5nIEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0QmFzZTo6JXM7
XG5cbiIgJSBzZXR0ZXJfbmFtZSkKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiBjbGFzc19iaW5kaW5nX2Nscy5uZWVkX3VzZXJfcnVudGltZV9jYXN0XzoKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCIgICAgc3RhdGljIFBhc3NS
ZWZQdHI8JXM+IHJ1bnRpbWVDYXN0KFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1
ZT4gdmFsdWUpXG4iICUgY2xhc3NfbmFtZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHdyaXRlci5uZXdsaW5lKCIgICAge1xuIikKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCIgICAgICAgIFJlZlB0cjxJbnNwZWN0b3I6Oklu
c3BlY3Rvck9iamVjdD4gb2JqZWN0O1xuIikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHdyaXRlci5uZXdsaW5lKCIgICAgICAgIGJvb2wgY2FzdFJlcyA9IHZhbHVlLT5hc09i
amVjdCgmb2JqZWN0KTtcbiIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3
cml0ZXIubmV3bGluZSgiICAgICAgICBBU1NFUlRfVU5VU0VEKGNhc3RSZXMsIGNhc3RSZXMpO1xu
IikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5hcHBlbmQoIiNp
ZiAlc1xuIiAlIFZBTElEQVRPUl9JRkRFRl9OQU1FKQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIiAgICAgICAgYXNzZXJ0Q29ycmVjdFZhbHVlKG9i
amVjdC5nZXQoKSk7XG4iKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3Jp
dGVyLmFwcGVuZCgiI2VuZGlmICAvLyAlc1xuIiAlIFZBTElEQVRPUl9JRkRFRl9OQU1FKQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIiAgICAgICAg
Q09NUElMRV9BU1NFUlQoc2l6ZW9mKCVzKSA9PSBzaXplb2YoSW5zcGVjdG9yOjpJbnNwZWN0b3JP
YmplY3RCYXNlKSwgdHlwZV9jYXN0X3Byb2JsZW0pO1xuIiAlIGNsYXNzX25hbWUpCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3bGluZSgiICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8JXMqPihzdGF0aWNfY2FzdDxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVj
dEJhc2UqPihvYmplY3QuZ2V0KCkpKTtcbiIgJSBjbGFzc19uYW1lKQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIiAgICB9XG4iKQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVuZCgiXG4iKQotCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGNsYXNzX2JpbmRpbmdfY2xzLm5lZWRfaW50ZXJu
YWxfcnVudGltZV9jYXN0XzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdy
aXRlci5hcHBlbmQoIiNpZiAlc1xuIiAlIFZBTElEQVRPUl9JRkRFRl9OQU1FKQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIiAgICBzdGF0aWMgJXMg
dm9pZCBhc3NlcnRDb3JyZWN0VmFsdWUoSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSogdmFsdWUp
O1xuIiAlIElOU1BFQ1RPUl9UWVBFU19HRU5FUkFUT1JfQ09ORklHX01BUFtvdXRwdXRfdHlwZV1b
ImV4cG9ydF9tYWNybyJdKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3Jp
dGVyLmFwcGVuZCgiI2VuZGlmICAvLyAlc1xuIiAlIFZBTElEQVRPUl9JRkRFRl9OQU1FKQotCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9zZWRfZmllbGRfc2V0ID0gKGNv
bnRleHRfZG9tYWluX25hbWUgKyAiLiIgKyBjbGFzc19uYW1lKSBub3QgaW4gVFlQRVNfV0lUSF9P
UEVOX0ZJRUxEX0xJU1RfU0VUCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHZhbGlkYXRvcl93cml0ZXIgPSBnZW5lcmF0ZV9jb250ZXh0LnZhbGlkYXRvcl93cml0ZXIKLQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9tYWluX2ZpeGVzID0gRG9tYWlu
TmFtZUZpeGVzLmdldF9maXhlZF9kYXRhKGNvbnRleHRfZG9tYWluX25hbWUpCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBkb21haW5fZ3VhcmQgPSBkb21haW5fZml4ZXMuZ2V0
X2d1YXJkKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGRvbWFpbl9n
dWFyZDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb21haW5fZ3Vh
cmQuZ2VuZXJhdGVfb3Blbih2YWxpZGF0b3Jfd3JpdGVyKQotCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoInZvaWQgJXMlczo6YXNz
ZXJ0Q29ycmVjdFZhbHVlKEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUqIHZhbHVlKVxuIiAlICho
ZWxwZXIuZnVsbF9uYW1lX3ByZWZpeF9mb3JfaW1wbCwgY2xhc3NfbmFtZSkpCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIntcbiIp
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5l
d2xpbmUoIiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBvYmplY3Q7XG4iKQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCIgICAg
Ym9vbCBjYXN0UmVzID0gdmFsdWUtPmFzT2JqZWN0KCZvYmplY3QpO1xuIikKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgiICAgIEFT
U0VSVF9VTlVTRUQoY2FzdFJlcywgY2FzdFJlcyk7XG4iKQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZm9yIHByb3BfZGF0YSBpbiByZXNvbHZlX2RhdGEubWFpbl9wcm9wZXJ0
aWVzOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93
cml0ZXIubmV3bGluZSgiICAgIHtcbiIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaXRfbmFtZSA9ICIlc1BvcyIgJSBwcm9wX2RhdGEucFsibmFtZSJdCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5l
KCIgICAgICAgIEluc3BlY3Rvck9iamVjdDo6aXRlcmF0b3IgJXM7XG4iICUgaXRfbmFtZSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5l
d2xpbmUoIiAgICAgICAgJXMgPSBvYmplY3QtPmZpbmQoXCIlc1wiKTtcbiIgJSAoaXRfbmFtZSwg
cHJvcF9kYXRhLnBbIm5hbWUiXSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCIgICAgICAgIEFTU0VSVCglcyAhPSBvYmpl
Y3QtPmVuZCgpKTtcbiIgJSBpdF9uYW1lKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgiICAgICAgICAlcyglcy0+dmFsdWUu
Z2V0KCkpO1xuIiAlIChwcm9wX2RhdGEucGFyYW1fdHlwZV9iaW5kaW5nLmdldF92YWxpZGF0b3Jf
Y2FsbF90ZXh0KCksIGl0X25hbWUpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgiICAgIH1cbiIpCi0KLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGNsb3NlZF9maWVsZF9zZXQ6Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCIg
ICAgaW50IGZvdW5kUHJvcGVydGllc0NvdW50ID0gJXM7XG4iICUgbGVuKHJlc29sdmVfZGF0YS5t
YWluX3Byb3BlcnRpZXMpKQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm
b3IgcHJvcF9kYXRhIGluIHJlc29sdmVfZGF0YS5vcHRpb25hbF9wcm9wZXJ0aWVzOgotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGlu
ZSgiICAgIHtcbiIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRf
bmFtZSA9ICIlc1BvcyIgJSBwcm9wX2RhdGEucFsibmFtZSJdCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCIgICAgICAgIElu
c3BlY3Rvck9iamVjdDo6aXRlcmF0b3IgJXM7XG4iICUgaXRfbmFtZSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIiAgICAg
ICAgJXMgPSBvYmplY3QtPmZpbmQoXCIlc1wiKTtcbiIgJSAoaXRfbmFtZSwgcHJvcF9kYXRhLnBb
Im5hbWUiXSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRh
dG9yX3dyaXRlci5uZXdsaW5lKCIgICAgICAgIGlmICglcyAhPSBvYmplY3QtPmVuZCgpKSB7XG4i
ICUgaXRfbmFtZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxp
ZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIiAgICAgICAgICAgICVzKCVzLT52YWx1ZS5nZXQoKSk7XG4i
ICUgKHByb3BfZGF0YS5wYXJhbV90eXBlX2JpbmRpbmcuZ2V0X3ZhbGlkYXRvcl9jYWxsX3RleHQo
KSwgaXRfbmFtZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
Y2xvc2VkX2ZpZWxkX3NldDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCIgICAgICAgICAgICArK2ZvdW5kUHJvcGVy
dGllc0NvdW50O1xuIikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIiAgICAgICAgfVxuIikKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIiAgICB9XG4i
KQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBjbG9zZWRfZmllbGRf
c2V0OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93
cml0ZXIubmV3bGluZSgiICAgIGlmIChmb3VuZFByb3BlcnRpZXNDb3VudCAhPSBvYmplY3QtPnNp
emUoKSlcbiIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRh
dG9yX3dyaXRlci5uZXdsaW5lKCIgICAgICAgIEZBVEFMKFwiVW5leHBlY3RlZCBwcm9wZXJ0aWVz
IGluIG9iamVjdDogJXNcXG5cIiwgb2JqZWN0LT50b0pTT05TdHJpbmcoKS5hc2NpaSgpLmRhdGEo
KSk7XG4iKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dy
aXRlci5uZXdsaW5lKCJ9XG4iKQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiBkb21haW5fZ3VhcmQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZG9tYWluX2d1YXJkLmdlbmVyYXRlX2Nsb3NlKHZhbGlkYXRvcl93cml0ZXIpCi0KLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgi
XG5cbiIpCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgaXNfb3Blbl90eXBl
OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3BwX3dyaXRlciA9IGdlbmVy
YXRlX2NvbnRleHQuY3BwX3dyaXRlcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgd3JpdGVyLmFwcGVuZCgiXG4iKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgd3JpdGVyLm5ld2xpbmUoIiAgICAvLyBQcm9wZXJ0eSBuYW1lcyBmb3IgdHlwZSBnZW5lcmF0
ZWQgYXMgb3Blbi5cbiIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3Ig
cHJvcF9kYXRhIGluIHJlc29sdmVfZGF0YS5tYWluX3Byb3BlcnRpZXMgKyByZXNvbHZlX2RhdGEu
b3B0aW9uYWxfcHJvcGVydGllczoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBwcm9wX25hbWUgPSBwcm9wX2RhdGEucFsibmFtZSJdCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcHJvcF9maWVsZF9uYW1lID0gQ2FwaXRhbGl6ZXIubG93ZXJf
Y2FtZWxfY2FzZV90b191cHBlcihwcm9wX25hbWUpCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIiAgICBzdGF0aWMgY29uc3QgY2hhciogJXM7
XG4iICUgKHByb3BfZmllbGRfbmFtZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY3BwX3dyaXRlci5uZXdsaW5lKCJjb25zdCBjaGFyKiAlcyVzOjolcyA9IFwiJXNc
IjtcbiIgJSAoaGVscGVyLmZ1bGxfbmFtZV9wcmVmaXhfZm9yX2ltcGwsIGNsYXNzX25hbWUsIHBy
b3BfZmllbGRfbmFtZSwgcHJvcF9uYW1lKSkKLQotCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHdyaXRlci5uZXdsaW5lKCJ9O1xuXG4iKQotCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBnZW5l
cmF0ZV9mb3J3YXJkX2RlY2xhcmF0aW9uKHdyaXRlcik6Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNsYXNzX25hbWUgPSBmaXhlZF90eXBlX25hbWUuY2xhc3NfbmFtZQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3bGluZSgiY2xhc3MgIikKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVuZChjbGFzc19uYW1lKQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuYXBwZW5kKCI7XG4iKQotCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRlZiByZWdpc3Rlcl91c2UoZm9yd2FyZF9saXN0ZW5lcik6Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGhlbHBlci5hZGRfdG9fZm9yd2FyZF9saXN0ZW5lcihmb3J3
YXJkX2xpc3RlbmVyKQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhv
ZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBnZXRfZ2VuZXJhdGVfcGFzc19pZCgp
OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHlwZUJ1aWxkZXJQYXNz
Lk1BSU4KLQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENvZGVHZW5lcmF0b3IKLQot
ICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgIGRl
ZiBnZXRfdmFsaWRhdG9yX2NhbGxfdGV4dCgpOgotICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGhlbHBlci5mdWxsX25hbWVfcHJlZml4X2Zvcl91c2UgKyBmaXhlZF90eXBlX25hbWUuY2xh
c3NfbmFtZSArICI6OmFzc2VydENvcnJlY3RWYWx1ZSIKLQotICAgICAgICAgICAgICAgICAgICBA
Y2xhc3NtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgZGVmIGdldF9hcnJheV9pdGVtX2NfdHlw
ZV90ZXh0KGNscyk6Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaGVscGVyLmZ1bGxf
bmFtZV9wcmVmaXhfZm9yX3VzZSArIGZpeGVkX3R5cGVfbmFtZS5jbGFzc19uYW1lCi0KLSAgICAg
ICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0
X3NldHRlcl92YWx1ZV9leHByZXNzaW9uX3BhdHRlcm4oKToKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBOb25lCi0KLSAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAg
ICAgICAgICAgICAgICAgICBkZWYgcmVkdWNlX3RvX3Jhd190eXBlKCk6Ci0gICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gUmF3VHlwZXMuT2JqZWN0Ci0KLSAgICAgICAgICAgICAgICAgICAg
QHN0YXRpY21ldGhvZAotICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X3R5cGVfbW9kZWwoKToK
LSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBUeXBlTW9kZWwuUmVmUHRyQmFzZWQoaGVs
cGVyLmZ1bGxfbmFtZV9wcmVmaXhfZm9yX3VzZSArIGZpeGVkX3R5cGVfbmFtZS5jbGFzc19uYW1l
KQotCi0gICAgICAgICAgICAgICAgICAgIGNsYXNzIEFkSG9jVHlwZUNvbnRleHRJbXBsOgotICAg
ICAgICAgICAgICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHByb3BlcnR5X25hbWUsIGNs
YXNzX25hbWUsIHJlc29sdmVfY29udGV4dCwgYWRfaG9jX3R5cGVfbGlzdCwgcGFyZW50X2Z1bGxf
bmFtZV9wcmVmaXgpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucHJvcGVydHlf
bmFtZSA9IHByb3BlcnR5X25hbWUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNs
YXNzX25hbWUgPSBjbGFzc19uYW1lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5y
ZXNvbHZlX2NvbnRleHQgPSByZXNvbHZlX2NvbnRleHQKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzZWxmLmFkX2hvY190eXBlX2xpc3QgPSBhZF9ob2NfdHlwZV9saXN0Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2VsZi5jb250YWluZXJfZnVsbF9uYW1lX3ByZWZpeCA9IHBhcmVu
dF9mdWxsX25hbWVfcHJlZml4ICsgY2xhc3NfbmFtZSArICI6OiIKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzZWxmLmNvbnRhaW5lcl9yZWxhdGl2ZV9uYW1lX3ByZWZpeCA9ICIiCi0KLSAg
ICAgICAgICAgICAgICAgICAgICAgIGRlZiBnZXRfdHlwZV9uYW1lX2ZpeChzZWxmKToKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjbGFzcyBOYW1lRml4OgotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjbGFzc19uYW1lID0gQ2FwaXRhbGl6ZXIubG93ZXJfY2FtZWxfY2FzZV90
b191cHBlcihzZWxmLnByb3BlcnR5X25hbWUpCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWYg
b3V0cHV0X2NvbW1lbnQod3JpdGVyKToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHdyaXRlci5uZXdsaW5lKCIvLyBOYW1lZCBhZnRlciBwcm9wZXJ0eSBuYW1lICclcycgd2hp
bGUgZ2VuZXJhdGluZyAlcy5cbiIgJSAoc2VsZi5wcm9wZXJ0eV9uYW1lLCBzZWxmLmNsYXNzX25h
bWUpKQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5hbWVGaXgKLQotICAg
ICAgICAgICAgICAgICAgICAgICAgZGVmIGFkZF90eXBlKHNlbGYsIGJpbmRpbmcpOgotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYWRfaG9jX3R5cGVfbGlzdC5hcHBlbmQoYmluZGlu
ZykKLQotICAgICAgICAgICAgICAgIHJldHVybiBDbGFzc0JpbmRpbmcKLSAgICAgICAgICAgIGVs
c2U6Ci0KLSAgICAgICAgICAgICAgICBjbGFzcyBQbGFpbk9iamVjdEJpbmRpbmc6Ci0gICAgICAg
ICAgICAgICAgICAgIEBjbGFzc21ldGhvZAotICAgICAgICAgICAgICAgICAgICBkZWYgcmVzb2x2
ZV9pbm5lcihjbHMsIHJlc29sdmVfY29udGV4dCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBw
YXNzCi0KLSAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgICAg
ICAgICBkZWYgcmVxdWVzdF91c2VyX3J1bnRpbWVfY2FzdChyZXF1ZXN0KToKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHBhc3MKLQotICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0g
ICAgICAgICAgICAgICAgICAgIGRlZiByZXF1ZXN0X2ludGVybmFsX3J1bnRpbWVfY2FzdCgpOgot
ICAgICAgICAgICAgICAgICAgICAgICAgUmF3VHlwZXMuT2JqZWN0LnJlcXVlc3RfcmF3X2ludGVy
bmFsX3J1bnRpbWVfY2FzdCgpCi0KLSAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAot
ICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X2NvZGVfZ2VuZXJhdG9yKCk6Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBwYXNzCi0KLSAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAot
ICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X3ZhbGlkYXRvcl9jYWxsX3RleHQoKToKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiAiUnVudGltZUNhc3RIZWxwZXI6OmFzc2VydFR5cGU8
SW5zcGVjdG9yVmFsdWU6OlR5cGVPYmplY3Q+IgotCi0gICAgICAgICAgICAgICAgICAgIEBjbGFz
c21ldGhvZAotICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X2FycmF5X2l0ZW1fY190eXBlX3Rl
eHQoY2xzKToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjbHMucmVkdWNlX3RvX3Jh
d190eXBlKCkuZ2V0X2FycmF5X2l0ZW1fcmF3X2NfdHlwZV90ZXh0KCkKLQotICAgICAgICAgICAg
ICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgIGRlZiBnZXRfc2V0dGVy
X3ZhbHVlX2V4cHJlc3Npb25fcGF0dGVybigpOgotICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIE5vbmUKLQotICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAg
ICAgICAgICAgIGRlZiByZWR1Y2VfdG9fcmF3X3R5cGUoKToKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBSYXdUeXBlcy5PYmplY3QKLQotICAgICAgICAgICAgICAgICAgICBAc3RhdGlj
bWV0aG9kCi0gICAgICAgICAgICAgICAgICAgIGRlZiBnZXRfdHlwZV9tb2RlbCgpOgotICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIFR5cGVNb2RlbC5PYmplY3QKLQotICAgICAgICAgICAg
ICAgIHJldHVybiBQbGFpbk9iamVjdEJpbmRpbmcKLSAgICAgICAgZWxpZiBqc29uX3R5cGFibGVb
InR5cGUiXSA9PSAiYXJyYXkiOgotICAgICAgICAgICAgaWYgIml0ZW1zIiBpbiBqc29uX3R5cGFi
bGU6Ci0KLSAgICAgICAgICAgICAgICBhZF9ob2NfdHlwZXMgPSBbXQotCi0gICAgICAgICAgICAg
ICAgY2xhc3MgQWRIb2NUeXBlQ29udGV4dDoKLSAgICAgICAgICAgICAgICAgICAgY29udGFpbmVy
X2Z1bGxfbmFtZV9wcmVmaXggPSAiPG5vdCB5ZXQgZGVmaW5lZD4iCi0gICAgICAgICAgICAgICAg
ICAgIGNvbnRhaW5lcl9yZWxhdGl2ZV9uYW1lX3ByZWZpeCA9ICIiCi0KLSAgICAgICAgICAgICAg
ICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X3R5cGVfbmFt
ZV9maXgoKToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmaXhlZF90eXBlX25hbWUK
LQotICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICAgICAgICAg
IGRlZiBhZGRfdHlwZShiaW5kaW5nKToKLSAgICAgICAgICAgICAgICAgICAgICAgIGFkX2hvY190
eXBlcy5hcHBlbmQoYmluZGluZykKLQotICAgICAgICAgICAgICAgIGl0ZW1fYmluZGluZyA9IHJl
c29sdmVfcGFyYW1fdHlwZShqc29uX3R5cGFibGVbIml0ZW1zIl0sIGNvbnRleHRfZG9tYWluX25h
bWUsIEFkSG9jVHlwZUNvbnRleHQpCi0KLSAgICAgICAgICAgICAgICBjbGFzcyBBcnJheUJpbmRp
bmc6Ci0gICAgICAgICAgICAgICAgICAgIHJlc29sdmVfZGF0YV8gPSBOb25lCi0gICAgICAgICAg
ICAgICAgICAgIG5lZWRfaW50ZXJuYWxfcnVudGltZV9jYXN0XyA9IEZhbHNlCi0KLSAgICAgICAg
ICAgICAgICAgICAgQGNsYXNzbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgIGRlZiByZXNvbHZl
X2lubmVyKGNscywgcmVzb2x2ZV9jb250ZXh0KToKLSAgICAgICAgICAgICAgICAgICAgICAgIGlm
IGNscy5yZXNvbHZlX2RhdGFfOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybgot
Ci0gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcyBSZXNvbHZlRGF0YToKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpdGVtX3R5cGVfYmluZGluZyA9IGl0ZW1fYmluZGluZwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGFkX2hvY190eXBlX2xpc3QgPSBhZF9ob2NfdHlwZXMKLQot
ICAgICAgICAgICAgICAgICAgICAgICAgY2xzLnJlc29sdmVfZGF0YV8gPSBSZXNvbHZlRGF0YQot
Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgdCBpbiBhZF9ob2NfdHlwZXM6Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdC5yZXNvbHZlX2lubmVyKHJlc29sdmVfY29udGV4dCkKLQot
ICAgICAgICAgICAgICAgICAgICBAY2xhc3NtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgZGVm
IHJlcXVlc3RfdXNlcl9ydW50aW1lX2Nhc3QoY2xzLCByZXF1ZXN0KToKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiTm90IGltcGxlbWVudGVkIHlldCIpCi0KLSAgICAg
ICAgICAgICAgICAgICAgQGNsYXNzbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgIGRlZiByZXF1
ZXN0X2ludGVybmFsX3J1bnRpbWVfY2FzdChjbHMpOgotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgY2xzLm5lZWRfaW50ZXJuYWxfcnVudGltZV9jYXN0XzoKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4KLSAgICAgICAgICAgICAgICAgICAgICAgIGNscy5uZWVkX2ludGVybmFs
X3J1bnRpbWVfY2FzdF8gPSBUcnVlCi0gICAgICAgICAgICAgICAgICAgICAgICBjbHMucmVzb2x2
ZV9kYXRhXy5pdGVtX3R5cGVfYmluZGluZy5yZXF1ZXN0X2ludGVybmFsX3J1bnRpbWVfY2FzdCgp
Ci0KLSAgICAgICAgICAgICAgICAgICAgQGNsYXNzbWV0aG9kCi0gICAgICAgICAgICAgICAgICAg
IGRlZiBnZXRfY29kZV9nZW5lcmF0b3IoYXJyYXlfYmluZGluZ19jbHMpOgotCi0gICAgICAgICAg
ICAgICAgICAgICAgICBjbGFzcyBDb2RlR2VuZXJhdG9yOgotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWYgZ2Vu
ZXJhdGVfdHlwZV9idWlsZGVyKHdyaXRlciwgZ2VuZXJhdGVfY29udGV4dCk6Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGFkX2hvY190eXBlX3dyaXRlciA9IHdyaXRlcgotCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmVfZGF0YSA9IGFycmF5X2JpbmRpbmdf
Y2xzLnJlc29sdmVfZGF0YV8KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3Ig
YWRfaG9jX3R5cGUgaW4gcmVzb2x2ZV9kYXRhLmFkX2hvY190eXBlX2xpc3Q6Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlX2dlbmVyYXRvciA9IGFkX2hvY190eXBlLmdl
dF9jb2RlX2dlbmVyYXRvcigpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiBjb2RlX2dlbmVyYXRvcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb2RlX2dlbmVyYXRvci5nZW5lcmF0ZV90eXBlX2J1aWxkZXIoYWRfaG9jX3R5cGVfd3JpdGVy
LCBnZW5lcmF0ZV9jb250ZXh0KQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQHN0YXRp
Y21ldGhvZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBnZW5lcmF0ZV9mb3J3YXJk
X2RlY2xhcmF0aW9uKHdyaXRlcik6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBh
c3MKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBkZWYgcmVnaXN0ZXJfdXNlKGZvcndhcmRfbGlzdGVuZXIpOgot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtX2NvZGVfZ2VuZXJhdG9yID0gaXRl
bV9iaW5kaW5nLmdldF9jb2RlX2dlbmVyYXRvcigpCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIGl0ZW1fY29kZV9nZW5lcmF0b3I6Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpdGVtX2NvZGVfZ2VuZXJhdG9yLnJlZ2lzdGVyX3VzZShmb3J3YXJkX2xpc3Rl
bmVyKQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRlZiBnZXRfZ2VuZXJhdGVfcGFzc19pZCgpOgotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHlwZUJ1aWxkZXJQYXNzLk1BSU4KLQot
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENvZGVHZW5lcmF0b3IKLQotICAgICAgICAg
ICAgICAgICAgICBAY2xhc3NtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgZGVmIGdldF92YWxp
ZGF0b3JfY2FsbF90ZXh0KGNscyk6Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2xz
LmdldF9hcnJheV9pdGVtX2NfdHlwZV90ZXh0KCkgKyAiOjphc3NlcnRDb3JyZWN0VmFsdWUiCi0K
LSAgICAgICAgICAgICAgICAgICAgQGNsYXNzbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgIGRl
ZiBnZXRfYXJyYXlfaXRlbV9jX3R5cGVfdGV4dChjbHMpOgotICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHJlcGxhY2VfcmlnaHRfc2hpZnQoIkluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFy
cmF5PCVzPiIgJSBjbHMucmVzb2x2ZV9kYXRhXy5pdGVtX3R5cGVfYmluZGluZy5nZXRfYXJyYXlf
aXRlbV9jX3R5cGVfdGV4dCgpKQotCi0gICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QK
LSAgICAgICAgICAgICAgICAgICAgZGVmIGdldF9zZXR0ZXJfdmFsdWVfZXhwcmVzc2lvbl9wYXR0
ZXJuKCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQotCi0gICAgICAgICAg
ICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgZGVmIHJlZHVjZV90
b19yYXdfdHlwZSgpOgotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJhd1R5cGVzLkFy
cmF5Ci0KLSAgICAgICAgICAgICAgICAgICAgQGNsYXNzbWV0aG9kCi0gICAgICAgICAgICAgICAg
ICAgIGRlZiBnZXRfdHlwZV9tb2RlbChjbHMpOgotICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIFR5cGVNb2RlbC5SZWZQdHJCYXNlZChjbHMuZ2V0X2FycmF5X2l0ZW1fY190eXBlX3RleHQo
KSkKLQotICAgICAgICAgICAgICAgIHJldHVybiBBcnJheUJpbmRpbmcKLSAgICAgICAgICAgIGVs
c2U6Ci0gICAgICAgICAgICAgICAgIyBGYWxsLXRocm91Z2ggdG8gcmF3IHR5cGUuCi0gICAgICAg
ICAgICAgICAgcGFzcwotCi0gICAgICAgIHJhd190eXBlID0gUmF3VHlwZXMuZ2V0KGpzb25fdHlw
YWJsZVsidHlwZSJdKQotCi0gICAgICAgIHJldHVybiBSYXdUeXBlQmluZGluZyhyYXdfdHlwZSkK
LQotCi1jbGFzcyBSYXdUeXBlQmluZGluZzoKLSAgICBkZWYgX19pbml0X18oc2VsZiwgcmF3X3R5
cGUpOgotICAgICAgICBzZWxmLnJhd190eXBlXyA9IHJhd190eXBlCi0KLSAgICBkZWYgcmVzb2x2
ZV9pbm5lcihzZWxmLCByZXNvbHZlX2NvbnRleHQpOgotICAgICAgICBwYXNzCi0KLSAgICBkZWYg
cmVxdWVzdF91c2VyX3J1bnRpbWVfY2FzdChzZWxmLCByZXF1ZXN0KToKLSAgICAgICAgcmFpc2Ug
RXhjZXB0aW9uKCJVbnN1cHBvcnRlZCIpCi0KLSAgICBkZWYgcmVxdWVzdF9pbnRlcm5hbF9ydW50
aW1lX2Nhc3Qoc2VsZik6Ci0gICAgICAgIHNlbGYucmF3X3R5cGVfLnJlcXVlc3RfcmF3X2ludGVy
bmFsX3J1bnRpbWVfY2FzdCgpCi0KLSAgICBkZWYgZ2V0X2NvZGVfZ2VuZXJhdG9yKHNlbGYpOgot
ICAgICAgICByZXR1cm4gTm9uZQotCi0gICAgZGVmIGdldF92YWxpZGF0b3JfY2FsbF90ZXh0KHNl
bGYpOgotICAgICAgICByZXR1cm4gc2VsZi5yYXdfdHlwZV8uZ2V0X3Jhd192YWxpZGF0b3JfY2Fs
bF90ZXh0KCkKLQotICAgIGRlZiBnZXRfYXJyYXlfaXRlbV9jX3R5cGVfdGV4dChzZWxmKToKLSAg
ICAgICAgcmV0dXJuIHNlbGYucmF3X3R5cGVfLmdldF9hcnJheV9pdGVtX3Jhd19jX3R5cGVfdGV4
dCgpCi0KLSAgICBkZWYgZ2V0X3NldHRlcl92YWx1ZV9leHByZXNzaW9uX3BhdHRlcm4oc2VsZik6
Ci0gICAgICAgIHJldHVybiBOb25lCi0KLSAgICBkZWYgcmVkdWNlX3RvX3Jhd190eXBlKHNlbGYp
OgotICAgICAgICByZXR1cm4gc2VsZi5yYXdfdHlwZV8KLQotICAgIGRlZiBnZXRfdHlwZV9tb2Rl
bChzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYucmF3X3R5cGVfLmdldF9yYXdfdHlwZV9tb2Rl
bCgpCi0KLQotY2xhc3MgVHlwZURhdGEob2JqZWN0KToKLSAgICBkZWYgX19pbml0X18oc2VsZiwg
anNvbl90eXBlLCBqc29uX2RvbWFpbiwgZG9tYWluX2RhdGEpOgotICAgICAgICBzZWxmLmpzb25f
dHlwZV8gPSBqc29uX3R5cGUKLSAgICAgICAgc2VsZi5qc29uX2RvbWFpbl8gPSBqc29uX2RvbWFp
bgotICAgICAgICBzZWxmLmRvbWFpbl9kYXRhXyA9IGRvbWFpbl9kYXRhCi0KLSAgICAgICAgaWYg
InR5cGUiIG5vdCBpbiBqc29uX3R5cGU6Ci0gICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIlVu
a25vd24gdHlwZSIpCi0KLSAgICAgICAganNvbl90eXBlX25hbWUgPSBqc29uX3R5cGVbInR5cGUi
XQotICAgICAgICBzZWxmLnJhd190eXBlXyA9IFJhd1R5cGVzLmdldChqc29uX3R5cGVfbmFtZSkK
LSAgICAgICAgc2VsZi5iaW5kaW5nX2JlaW5nX3Jlc29sdmVkXyA9IEZhbHNlCi0gICAgICAgIHNl
bGYuYmluZGluZ18gPSBOb25lCi0KLSAgICBkZWYgZ2V0X3Jhd190eXBlKHNlbGYpOgotICAgICAg
ICByZXR1cm4gc2VsZi5yYXdfdHlwZV8KLQotICAgIGRlZiBnZXRfYmluZGluZyhzZWxmKToKLSAg
ICAgICAgaWYgbm90IHNlbGYuYmluZGluZ186Ci0gICAgICAgICAgICBpZiBzZWxmLmJpbmRpbmdf
YmVpbmdfcmVzb2x2ZWRfOgotICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiVHlwZSAl
cyBpcyBhbHJlYWR5IGJlaW5nIHJlc29sdmVkIiAlIHNlbGYuanNvbl90eXBlX1sidHlwZSJdKQot
ICAgICAgICAgICAgIyBSZXNvbHZlIG9ubHkgbGF6aWx5LCBiZWNhdXNlIHJlc29sdmluZyBvbmUg
bmFtZWQgdHlwZSBtYXkgcmVxdWlyZSByZXNvbHZpbmcgc29tZSBvdGhlciBuYW1lZCB0eXBlLgot
ICAgICAgICAgICAgc2VsZi5iaW5kaW5nX2JlaW5nX3Jlc29sdmVkXyA9IFRydWUKLSAgICAgICAg
ICAgIHRyeToKLSAgICAgICAgICAgICAgICBzZWxmLmJpbmRpbmdfID0gVHlwZUJpbmRpbmdzLmNy
ZWF0ZV9uYW1lZF90eXBlX2RlY2xhcmF0aW9uKHNlbGYuanNvbl90eXBlXywgc2VsZi5qc29uX2Rv
bWFpbl9bImRvbWFpbiJdLCBzZWxmKQotICAgICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAg
ICAgICBzZWxmLmJpbmRpbmdfYmVpbmdfcmVzb2x2ZWRfID0gRmFsc2UKLQotICAgICAgICByZXR1
cm4gc2VsZi5iaW5kaW5nXwotCi0gICAgZGVmIGdldF9qc29uX3R5cGUoc2VsZik6Ci0gICAgICAg
IHJldHVybiBzZWxmLmpzb25fdHlwZV8KLQotICAgIGRlZiBnZXRfbmFtZShzZWxmKToKLSAgICAg
ICAgcmV0dXJuIHNlbGYuanNvbl90eXBlX1siaWQiXQotCi0gICAgZGVmIGdldF9kb21haW5fbmFt
ZShzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuanNvbl9kb21haW5fWyJkb21haW4iXQotCi0K
LWNsYXNzIERvbWFpbkRhdGE6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGpzb25fZG9tYWluKToK
LSAgICAgICAgc2VsZi5qc29uX2RvbWFpbiA9IGpzb25fZG9tYWluCi0gICAgICAgIHNlbGYudHlw
ZXNfID0gW10KLQotICAgIGRlZiBhZGRfdHlwZShzZWxmLCB0eXBlX2RhdGEpOgotICAgICAgICBz
ZWxmLnR5cGVzXy5hcHBlbmQodHlwZV9kYXRhKQotCi0gICAgZGVmIG5hbWUoc2VsZik6Ci0gICAg
ICAgIHJldHVybiBzZWxmLmpzb25fZG9tYWluWyJkb21haW4iXQotCi0gICAgZGVmIHR5cGVzKHNl
bGYpOgotICAgICAgICByZXR1cm4gc2VsZi50eXBlc18KLQotCi1jbGFzcyBUeXBlTWFwOgotICAg
IGRlZiBfX2luaXRfXyhzZWxmLCBhcGksIGRlcGVuZGVuY3lfYXBpKToKLSAgICAgICAgc2VsZi5t
YXBfID0ge30KLSAgICAgICAgc2VsZi5kb21haW5zXyA9IFtdCi0gICAgICAgIHNlbGYuZG9tYWlu
c190b19nZW5lcmF0ZV8gPSBbXQotICAgICAgICBmb3IganNvbl9kb21haW4gaW4gYXBpWyJkb21h
aW5zIl06Ci0gICAgICAgICAgICBzZWxmLmFkZF9kb21haW4oanNvbl9kb21haW4sIFRydWUpCi0g
ICAgICAgIGZvciBqc29uX2RvbWFpbiBpbiBkZXBlbmRlbmN5X2FwaVsiZG9tYWlucyJdOgotICAg
ICAgICAgICAgc2VsZi5hZGRfZG9tYWluKGpzb25fZG9tYWluLCBGYWxzZSkKLQotICAgIGRlZiBh
ZGRfZG9tYWluKHNlbGYsIGpzb25fZG9tYWluLCBzaG91bGRfZ2VuZXJhdGUpOgotICAgICAgICBk
b21haW5fbmFtZSA9IGpzb25fZG9tYWluWyJkb21haW4iXQotCi0gICAgICAgIGRvbWFpbl9tYXAg
PSB7fQotICAgICAgICBzZWxmLm1hcF9bZG9tYWluX25hbWVdID0gZG9tYWluX21hcAotCi0gICAg
ICAgIGRvbWFpbl9kYXRhID0gRG9tYWluRGF0YShqc29uX2RvbWFpbikKLSAgICAgICAgc2VsZi5k
b21haW5zXy5hcHBlbmQoZG9tYWluX2RhdGEpCi0KLSAgICAgICAgaWYgc2hvdWxkX2dlbmVyYXRl
OgotICAgICAgICAgICAgIyBGSVhNRTogVGhlIG9yZGVyIG9mIHR5cGVzIHNob3VsZCBub3QgbWF0
dGVyLiBUaGUgZ2VuZXJhdGVkIGNvZGUgc2hvdWxkIHdvcmsgcmVnYXJkbGVzcyBvZiB0aGUgb3Jk
ZXIgb2YgdHlwZXMuCi0gICAgICAgICAgICBpZiBkb21haW5fbmFtZSA9PSAiUGFnZSI6Ci0gICAg
ICAgICAgICAgICAgc2VsZi5kb21haW5zX3RvX2dlbmVyYXRlXy5pbnNlcnQoMCwgZG9tYWluX2Rh
dGEpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHNlbGYuZG9tYWluc190b19n
ZW5lcmF0ZV8uYXBwZW5kKGRvbWFpbl9kYXRhKQotCi0gICAgICAgIGlmICJ0eXBlcyIgaW4ganNv
bl9kb21haW46Ci0gICAgICAgICAgICBmb3IganNvbl90eXBlIGluIGpzb25fZG9tYWluWyJ0eXBl
cyJdOgotICAgICAgICAgICAgICAgIHR5cGVfbmFtZSA9IGpzb25fdHlwZVsiaWQiXQotICAgICAg
ICAgICAgICAgIHR5cGVfZGF0YSA9IFR5cGVEYXRhKGpzb25fdHlwZSwganNvbl9kb21haW4sIGRv
bWFpbl9kYXRhKQotICAgICAgICAgICAgICAgIGRvbWFpbl9tYXBbdHlwZV9uYW1lXSA9IHR5cGVf
ZGF0YQotICAgICAgICAgICAgICAgIGRvbWFpbl9kYXRhLmFkZF90eXBlKHR5cGVfZGF0YSkKLQot
ICAgIGRlZiBkb21haW5zKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5kb21haW5zXwotCi0g
ICAgZGVmIGRvbWFpbnNfdG9fZ2VuZXJhdGUoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLmRv
bWFpbnNfdG9fZ2VuZXJhdGVfCi0KLSAgICBkZWYgZ2V0KHNlbGYsIGRvbWFpbl9uYW1lLCB0eXBl
X25hbWUpOgotICAgICAgICByZXR1cm4gc2VsZi5tYXBfW2RvbWFpbl9uYW1lXVt0eXBlX25hbWVd
Ci0KLQotZGVmIHJlc29sdmVfcGFyYW1fdHlwZShqc29uX3BhcmFtZXRlciwgc2NvcGVfZG9tYWlu
X25hbWUsIGFkX2hvY190eXBlX2NvbnRleHQpOgotICAgIGlmICIkcmVmIiBpbiBqc29uX3BhcmFt
ZXRlcjoKLSAgICAgICAganNvbl9yZWYgPSBqc29uX3BhcmFtZXRlclsiJHJlZiJdCi0gICAgICAg
IHR5cGVfZGF0YSA9IGdldF9yZWZfZGF0YShqc29uX3JlZiwgc2NvcGVfZG9tYWluX25hbWUpCi0g
ICAgICAgIHJldHVybiB0eXBlX2RhdGEuZ2V0X2JpbmRpbmcoKQotICAgIGVsaWYgInR5cGUiIGlu
IGpzb25fcGFyYW1ldGVyOgotICAgICAgICByZXN1bHQgPSBUeXBlQmluZGluZ3MuY3JlYXRlX2Fk
X2hvY190eXBlX2RlY2xhcmF0aW9uKGpzb25fcGFyYW1ldGVyLCBzY29wZV9kb21haW5fbmFtZSwg
YWRfaG9jX3R5cGVfY29udGV4dCkKLSAgICAgICAgYWRfaG9jX3R5cGVfY29udGV4dC5hZGRfdHlw
ZShyZXN1bHQpCi0gICAgICAgIHJldHVybiByZXN1bHQKLSAgICBlbHNlOgotICAgICAgICByYWlz
ZSBFeGNlcHRpb24oIlVua25vd24gdHlwZSIpCi0KLQotZGVmIHJlc29sdmVfcGFyYW1fcmF3X3R5
cGUoanNvbl9wYXJhbWV0ZXIsIHNjb3BlX2RvbWFpbl9uYW1lKToKLSAgICBpZiAiJHJlZiIgaW4g
anNvbl9wYXJhbWV0ZXI6Ci0gICAgICAgIGpzb25fcmVmID0ganNvbl9wYXJhbWV0ZXJbIiRyZWYi
XQotICAgICAgICB0eXBlX2RhdGEgPSBnZXRfcmVmX2RhdGEoanNvbl9yZWYsIHNjb3BlX2RvbWFp
bl9uYW1lKQotICAgICAgICByZXR1cm4gdHlwZV9kYXRhLmdldF9yYXdfdHlwZSgpCi0gICAgZWxp
ZiAidHlwZSIgaW4ganNvbl9wYXJhbWV0ZXI6Ci0gICAgICAgIGpzb25fdHlwZSA9IGpzb25fcGFy
YW1ldGVyWyJ0eXBlIl0KLSAgICAgICAgcmV0dXJuIFJhd1R5cGVzLmdldChqc29uX3R5cGUpCi0g
ICAgZWxzZToKLSAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJVbmtub3duIHR5cGUiKQotCi0KLWRl
ZiBnZXRfcmVmX2RhdGEoanNvbl9yZWYsIHNjb3BlX2RvbWFpbl9uYW1lKToKLSAgICBkb3RfcG9z
ID0ganNvbl9yZWYuZmluZCgiLiIpCi0gICAgaWYgZG90X3BvcyA9PSAtMToKLSAgICAgICAgZG9t
YWluX25hbWUgPSBzY29wZV9kb21haW5fbmFtZQotICAgICAgICB0eXBlX25hbWUgPSBqc29uX3Jl
ZgotICAgIGVsc2U6Ci0gICAgICAgIGRvbWFpbl9uYW1lID0ganNvbl9yZWZbOmRvdF9wb3NdCi0g
ICAgICAgIHR5cGVfbmFtZSA9IGpzb25fcmVmW2RvdF9wb3MgKyAxOl0KLQotICAgIHJldHVybiB0
eXBlX21hcC5nZXQoZG9tYWluX25hbWUsIHR5cGVfbmFtZSkKLQotCi1pbnB1dF9maWxlID0gb3Bl
bihpbnB1dF9qc29uX2ZpbGVuYW1lLCAiciIpCi1qc29uX3N0cmluZyA9IGlucHV0X2ZpbGUucmVh
ZCgpCi1qc29uX2FwaSA9IGpzb24ubG9hZHMoanNvbl9zdHJpbmcpCi1pbnB1dF9maWxlLmNsb3Nl
KCkKLWlmIG5vdCAiZG9tYWlucyIgaW4ganNvbl9hcGk6Ci0gICAganNvbl9hcGkgPSB7ImRvbWFp
bnMiOiBbanNvbl9hcGldfQotCi1kZXBlbmRlbmN5X2FwaSA9IHsiZG9tYWlucyI6IFtdfQotZm9y
IGRlcGVuZGVuY3lfanNvbl9maWxlbmFtZSBpbiBkZXBlbmRlbmN5X2pzb25fZmlsZW5hbWVzOgot
ICAgIGRlcGVuZGVuY3lfaW5wdXRfZmlsZSA9IG9wZW4oZGVwZW5kZW5jeV9qc29uX2ZpbGVuYW1l
LCAiciIpCi0gICAgZGVwZW5kZW5jeV9qc29uX3N0cmluZyA9IGRlcGVuZGVuY3lfaW5wdXRfZmls
ZS5yZWFkKCkKLSAgICBkZXBlbmRlbmN5X2pzb25fYXBpID0ganNvbi5sb2FkcyhkZXBlbmRlbmN5
X2pzb25fc3RyaW5nKQotICAgIGRlcGVuZGVuY3lfaW5wdXRfZmlsZS5jbG9zZSgpCi0gICAgaWYg
bm90ICJkb21haW5zIiBpbiBkZXBlbmRlbmN5X2pzb25fYXBpOgotICAgICAgICBkZXBlbmRlbmN5
X2pzb25fYXBpID0geyJkb21haW5zIjogW2RlcGVuZGVuY3lfanNvbl9hcGldfQotICAgIGRlcGVu
ZGVuY3lfYXBpWyJkb21haW5zIl0gKz0gZGVwZW5kZW5jeV9qc29uX2FwaVsiZG9tYWlucyJdCi0K
LQotY2xhc3MgVGVtcGxhdGVzOgotICAgIGRlZiBnZXRfdGhpc19zY3JpcHRfcGF0aF8oYWJzb2x1
dGVfcGF0aCk6Ci0gICAgICAgIGFic29sdXRlX3BhdGggPSBvcy5wYXRoLmFic3BhdGgoYWJzb2x1
dGVfcGF0aCkKLSAgICAgICAgY29tcG9uZW50cyA9IFtdCi0KLSAgICAgICAgZGVmIGZpbGxfcmVj
dXJzaXZlKHBhdGhfcGFydCwgZGVwdGgpOgotICAgICAgICAgICAgaWYgZGVwdGggPD0gMCBvciBw
YXRoX3BhcnQgPT0gJy8nOgotICAgICAgICAgICAgICAgIHJldHVybgotICAgICAgICAgICAgZmls
bF9yZWN1cnNpdmUob3MucGF0aC5kaXJuYW1lKHBhdGhfcGFydCksIGRlcHRoIC0gMSkKLSAgICAg
ICAgICAgIGNvbXBvbmVudHMuYXBwZW5kKG9zLnBhdGguYmFzZW5hbWUocGF0aF9wYXJ0KSkKLQot
ICAgICAgICAjIFR5cGljYWwgcGF0aCBpcyAvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVH
ZW5lcmF0b3JJbnNwZWN0b3IucHkKLSAgICAgICAgIyBMZXQncyB0YWtlIDQgY29tcG9uZW50cyBm
cm9tIHRoZSByZWFsIHBhdGggdGhlbi4KLSAgICAgICAgZmlsbF9yZWN1cnNpdmUoYWJzb2x1dGVf
cGF0aCwgNCkKLQotICAgICAgICByZXR1cm4gIi8iLmpvaW4oY29tcG9uZW50cykKLQotICAgIGZp
bGVfaGVhZGVyXyA9ICgiLy8gRmlsZSBpcyBnZW5lcmF0ZWQgYnkgJXNcblxuIiAlIGdldF90aGlz
X3NjcmlwdF9wYXRoXyhzeXMuYXJndlswXSkgKwotIiIiLy8gQ29weXJpZ2h0IChjKSAyMDEzIEFw
cGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLS8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUg
Q2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
LS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0iIiIpCi0KLSAgICBmcm9udGVuZF9kb21h
aW5fY2xhc3MgPSBzdHJpbmcuVGVtcGxhdGUoQ29kZUdlbmVyYXRvckluc3BlY3RvclN0cmluZ3Mu
ZnJvbnRlbmRfZG9tYWluX2NsYXNzKQotICAgIGJhY2tlbmRfZGlzcGF0Y2hlcl9jb25zdHJ1Y3Rv
ciA9IHN0cmluZy5UZW1wbGF0ZShDb2RlR2VuZXJhdG9ySW5zcGVjdG9yU3RyaW5ncy5iYWNrZW5k
X2Rpc3BhdGNoZXJfY29uc3RydWN0b3IpCi0gICAgYmFja2VuZF9kaXNwYXRjaGVyX2Rpc3BhdGNo
X21ldGhvZCA9IHN0cmluZy5UZW1wbGF0ZShDb2RlR2VuZXJhdG9ySW5zcGVjdG9yU3RyaW5ncy5i
YWNrZW5kX2Rpc3BhdGNoZXJfZGlzcGF0Y2hfbWV0aG9kKQotICAgIGJhY2tlbmRfZGlzcGF0Y2hl
cl9kaXNwYXRjaF9tZXRob2Rfc2ltcGxlID0gc3RyaW5nLlRlbXBsYXRlKENvZGVHZW5lcmF0b3JJ
bnNwZWN0b3JTdHJpbmdzLmJhY2tlbmRfZGlzcGF0Y2hlcl9kaXNwYXRjaF9tZXRob2Rfc2ltcGxl
KQotICAgIGJhY2tlbmRfbWV0aG9kID0gc3RyaW5nLlRlbXBsYXRlKENvZGVHZW5lcmF0b3JJbnNw
ZWN0b3JTdHJpbmdzLmJhY2tlbmRfbWV0aG9kKQotICAgIGZyb250ZW5kX21ldGhvZCA9IHN0cmlu
Zy5UZW1wbGF0ZShDb2RlR2VuZXJhdG9ySW5zcGVjdG9yU3RyaW5ncy5mcm9udGVuZF9tZXRob2Qp
Ci0gICAgY2FsbGJhY2tfbWV0aG9kID0gc3RyaW5nLlRlbXBsYXRlKENvZGVHZW5lcmF0b3JJbnNw
ZWN0b3JTdHJpbmdzLmNhbGxiYWNrX21ldGhvZCkKLSAgICBmcm9udGVuZF9oID0gc3RyaW5nLlRl
bXBsYXRlKGZpbGVfaGVhZGVyXyArIENvZGVHZW5lcmF0b3JJbnNwZWN0b3JTdHJpbmdzLmZyb250
ZW5kX2gpCi0gICAgYmFja2VuZF9oID0gc3RyaW5nLlRlbXBsYXRlKGZpbGVfaGVhZGVyXyArIENv
ZGVHZW5lcmF0b3JJbnNwZWN0b3JTdHJpbmdzLmJhY2tlbmRfaCkKLSAgICBiYWNrZW5kX2NwcCA9
IHN0cmluZy5UZW1wbGF0ZShmaWxlX2hlYWRlcl8gKyBDb2RlR2VuZXJhdG9ySW5zcGVjdG9yU3Ry
aW5ncy5iYWNrZW5kX2NwcCkKLSAgICBmcm9udGVuZF9jcHAgPSBzdHJpbmcuVGVtcGxhdGUoZmls
ZV9oZWFkZXJfICsgQ29kZUdlbmVyYXRvckluc3BlY3RvclN0cmluZ3MuZnJvbnRlbmRfY3BwKQot
ICAgIHR5cGVidWlsZGVyX2ggPSBzdHJpbmcuVGVtcGxhdGUoZmlsZV9oZWFkZXJfICsgQ29kZUdl
bmVyYXRvckluc3BlY3RvclN0cmluZ3MudHlwZWJ1aWxkZXJfaCkKLSAgICB0eXBlYnVpbGRlcl9j
cHAgPSBzdHJpbmcuVGVtcGxhdGUoZmlsZV9oZWFkZXJfICsgQ29kZUdlbmVyYXRvckluc3BlY3Rv
clN0cmluZ3MudHlwZWJ1aWxkZXJfY3BwKQotICAgIGJhY2tlbmRfanMgPSBzdHJpbmcuVGVtcGxh
dGUoZmlsZV9oZWFkZXJfICsgQ29kZUdlbmVyYXRvckluc3BlY3RvclN0cmluZ3MuYmFja2VuZF9q
cykKLSAgICBwYXJhbV9jb250YWluZXJfYWNjZXNzX2NvZGUgPSBDb2RlR2VuZXJhdG9ySW5zcGVj
dG9yU3RyaW5ncy5wYXJhbV9jb250YWluZXJfYWNjZXNzX2NvZGUKLQotCi0KLQotCi10eXBlX21h
cCA9IFR5cGVNYXAoanNvbl9hcGksIGRlcGVuZGVuY3lfYXBpKQotCi0KLWNsYXNzIE5lZWRSdW50
aW1lQ2FzdFJlcXVlc3Q6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYpOgotICAgICAgICBzZWxmLmFj
a18gPSBOb25lCi0KLSAgICBkZWYgYWNrbm93bGVkZ2Uoc2VsZik6Ci0gICAgICAgIHNlbGYuYWNr
XyA9IFRydWUKLQotICAgIGRlZiBpc19hY2tub3dsZWRnZWQoc2VsZik6Ci0gICAgICAgIHJldHVy
biBzZWxmLmFja18KLQotCi1kZWYgcmVzb2x2ZV9hbGxfdHlwZXMoKToKLSAgICBydW50aW1lX2Nh
c3RfZ2VuZXJhdGVfcmVxdWVzdHMgPSB7fQotICAgIGZvciB0eXBlX25hbWUgaW4gVFlQRVNfV0lU
SF9SVU5USU1FX0NBU1RfU0VUOgotICAgICAgICBydW50aW1lX2Nhc3RfZ2VuZXJhdGVfcmVxdWVz
dHNbdHlwZV9uYW1lXSA9IE5lZWRSdW50aW1lQ2FzdFJlcXVlc3QoKQotCi0gICAgY2xhc3MgRm9y
d2FyZExpc3RlbmVyOgotICAgICAgICB0eXBlX2RhdGFfc2V0ID0gc2V0KCkKLSAgICAgICAgYWxy
ZWFkeV9kZWNsYXJlZF9zZXQgPSBzZXQoKQotCi0gICAgICAgIEBjbGFzc21ldGhvZAotICAgICAg
ICBkZWYgYWRkX3R5cGVfZGF0YShjbHMsIHR5cGVfZGF0YSk6Ci0gICAgICAgICAgICBpZiB0eXBl
X2RhdGEgbm90IGluIGNscy5hbHJlYWR5X2RlY2xhcmVkX3NldDoKLSAgICAgICAgICAgICAgICBj
bHMudHlwZV9kYXRhX3NldC5hZGQodHlwZV9kYXRhKQotCi0gICAgY2xhc3MgUmVzb2x2ZUNvbnRl
eHQ6Ci0gICAgICAgIGZvcndhcmRfbGlzdGVuZXIgPSBGb3J3YXJkTGlzdGVuZXIKLQotICAgIGZv
ciBkb21haW5fZGF0YSBpbiB0eXBlX21hcC5kb21haW5zKCk6Ci0gICAgICAgIGZvciB0eXBlX2Rh
dGEgaW4gZG9tYWluX2RhdGEudHlwZXMoKToKLSAgICAgICAgICAgIGJpbmRpbmcgPSB0eXBlX2Rh
dGEuZ2V0X2JpbmRpbmcoKQotICAgICAgICAgICAgYmluZGluZy5yZXNvbHZlX2lubmVyKFJlc29s
dmVDb250ZXh0KQotICAgICAgICAgICAgIyBEbyBub3QgZ2VuZXJhdGUgZm9yd2FyZHMgZm9yIHRo
aXMgdHlwZSBhbnkgbG9uZ2VyLgotICAgICAgICAgICAgRm9yd2FyZExpc3RlbmVyLmFscmVhZHlf
ZGVjbGFyZWRfc2V0LmFkZCh0eXBlX2RhdGEpCi0KLSAgICBmb3IgZG9tYWluX2RhdGEgaW4gdHlw
ZV9tYXAuZG9tYWlucygpOgotICAgICAgICBmb3IgdHlwZV9kYXRhIGluIGRvbWFpbl9kYXRhLnR5
cGVzKCk6Ci0gICAgICAgICAgICBmdWxsX3R5cGVfbmFtZSA9ICIlcy4lcyIgJSAodHlwZV9kYXRh
LmdldF9kb21haW5fbmFtZSgpLCB0eXBlX2RhdGEuZ2V0X25hbWUoKSkKLSAgICAgICAgICAgIHJl
cXVlc3QgPSBydW50aW1lX2Nhc3RfZ2VuZXJhdGVfcmVxdWVzdHMucG9wKGZ1bGxfdHlwZV9uYW1l
LCBOb25lKQotICAgICAgICAgICAgYmluZGluZyA9IHR5cGVfZGF0YS5nZXRfYmluZGluZygpCi0g
ICAgICAgICAgICBpZiByZXF1ZXN0OgotICAgICAgICAgICAgICAgIGJpbmRpbmcucmVxdWVzdF91
c2VyX3J1bnRpbWVfY2FzdChyZXF1ZXN0KQotCi0gICAgICAgICAgICBpZiByZXF1ZXN0IGFuZCBu
b3QgcmVxdWVzdC5pc19hY2tub3dsZWRnZWQoKToKLSAgICAgICAgICAgICAgICByYWlzZSBFeGNl
cHRpb24oIkZhaWxlZCB0byBnZW5lcmF0ZSBydW50aW1lQ2FzdCBpbiAiICsgZnVsbF90eXBlX25h
bWUpCi0KLSAgICAjIEZJWE1FOiBUaGlzIGFzc3VtZXMgYWxsIHRoZSBkb21haW5zIGFyZSBwcm9j
ZXNzZWQgYXQgb25jZS4gQ2hhbmdlIHRoaXMgdmVyaWZpY2F0aW9uCi0gICAgIyB0byBvbmx5IHZl
cmlmeSBydW50aW1lIGNhc3RzIGZvciB0aGUgZG9tYWlucyBiZWluZyBnZW5lcmF0ZWQuCi0gICAg
IyBpZiB2ZXJpZmljYXRpb246Ci0gICAgIyAgICAgZm9yIGZ1bGxfdHlwZV9uYW1lIGluIHJ1bnRp
bWVfY2FzdF9nZW5lcmF0ZV9yZXF1ZXN0czoKLSAgICAjICAgICAgICAgcmFpc2UgRXhjZXB0aW9u
KCJGYWlsZWQgdG8gZ2VuZXJhdGUgcnVudGltZUNhc3QuIFR5cGUgIiArIGZ1bGxfdHlwZV9uYW1l
ICsgIiBub3QgZm91bmQiKQotCi0gICAgcmV0dXJuIEZvcndhcmRMaXN0ZW5lcgotCi0KLWdsb2Jh
bF9mb3J3YXJkX2xpc3RlbmVyID0gcmVzb2x2ZV9hbGxfdHlwZXMoKQotCi0KLWRlZiBnZXRfYW5u
b3RhdGVkX3R5cGVfdGV4dChyYXdfdHlwZSwgYW5ub3RhdGVkX3R5cGUpOgotICAgIGlmIGFubm90
YXRlZF90eXBlICE9IHJhd190eXBlOgotICAgICAgICByZXR1cm4gIi8qJXMqLyAlcyIgJSAoYW5u
b3RhdGVkX3R5cGUsIHJhd190eXBlKQotICAgIGVsc2U6Ci0gICAgICAgIHJldHVybiByYXdfdHlw
ZQotCi0KLWRlZiBmb3JtYXRfc2V0dGVyX3ZhbHVlX2V4cHJlc3Npb24ocGFyYW1fdHlwZV9iaW5k
aW5nLCB2YWx1ZV9yZWYpOgotICAgIHBhdHRlcm4gPSBwYXJhbV90eXBlX2JpbmRpbmcuZ2V0X3Nl
dHRlcl92YWx1ZV9leHByZXNzaW9uX3BhdHRlcm4oKQotICAgIGlmIHBhdHRlcm46Ci0gICAgICAg
IHJldHVybiBwYXR0ZXJuICUgKElOU1BFQ1RPUl9UWVBFU19HRU5FUkFUT1JfQ09ORklHX01BUFtv
dXRwdXRfdHlwZV1bInByZWZpeCJdLCB2YWx1ZV9yZWYpCi0gICAgZWxzZToKLSAgICAgICAgcmV0
dXJuIHZhbHVlX3JlZgotCi0KLWNsYXNzIEdlbmVyYXRvcjoKLSAgICBmcm9udGVuZF9kb21haW5f
Y2xhc3NfbGluZXMgPSBbXQotCi0gICAgYmFja2VuZF9tZXRob2RfaW1wbGVtZW50YXRpb25fbGlz
dCA9IFtdCi0gICAgZnJvbnRlbmRfbWV0aG9kX2xpc3QgPSBbXQotICAgIGJhY2tlbmRfanNfZG9t
YWluX2luaXRpYWxpemVyX2xpc3QgPSBbXQotCi0gICAgYmFja2VuZF9oYW5kbGVyX2ludGVyZmFj
ZV9saXN0ID0gW10KLSAgICBiYWNrZW5kX2hhbmRsZXJfaW1wbGVtZW50YXRpb25fbGlzdCA9IFtd
Ci0gICAgYmFja2VuZF9kaXNwYXRjaGVyX2ludGVyZmFjZV9saXN0ID0gW10KLSAgICB0eXBlX2J1
aWxkZXJfZnJhZ21lbnRzID0gW10KLSAgICB0eXBlX2J1aWxkZXJfZm9yd2FyZHMgPSBbXQotICAg
IHZhbGlkYXRvcl9pbXBsX2xpc3QgPSBbXQotICAgIHR5cGVfYnVpbGRlcl9pbXBsX2xpc3QgPSBb
XQotCi0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIGdvKCk6Ci0gICAgICAgIEdlbmVyYXRv
ci5wcm9jZXNzX3R5cGVzKHR5cGVfbWFwKQotCi0gICAgICAgIGZpcnN0X2N5Y2xlX2d1YXJkYWJs
ZV9saXN0X2xpc3QgPSBbCi0gICAgICAgICAgICBHZW5lcmF0b3IuYmFja2VuZF9tZXRob2RfaW1w
bGVtZW50YXRpb25fbGlzdCwKLSAgICAgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX2hhbmRsZXJf
aW50ZXJmYWNlX2xpc3QsCi0gICAgICAgICAgICBHZW5lcmF0b3IuYmFja2VuZF9oYW5kbGVyX2lt
cGxlbWVudGF0aW9uX2xpc3QsCi0gICAgICAgICAgICBHZW5lcmF0b3IuYmFja2VuZF9kaXNwYXRj
aGVyX2ludGVyZmFjZV9saXN0XQotCi0gICAgICAgIGZvciBqc29uX2RvbWFpbiBpbiBqc29uX2Fw
aVsiZG9tYWlucyJdOgotICAgICAgICAgICAgZG9tYWluX25hbWUgPSBqc29uX2RvbWFpblsiZG9t
YWluIl0KLSAgICAgICAgICAgIGRvbWFpbl9uYW1lX2xvd2VyID0gZG9tYWluX25hbWUubG93ZXIo
KQotCi0gICAgICAgICAgICBkb21haW5fZml4ZXMgPSBEb21haW5OYW1lRml4ZXMuZ2V0X2ZpeGVk
X2RhdGEoZG9tYWluX25hbWUpCi0KLSAgICAgICAgICAgIGRvbWFpbl9ndWFyZCA9IGRvbWFpbl9m
aXhlcy5nZXRfZ3VhcmQoKQotCi0gICAgICAgICAgICBpZiBkb21haW5fZ3VhcmQ6Ci0gICAgICAg
ICAgICAgICAgZm9yIGwgaW4gZmlyc3RfY3ljbGVfZ3VhcmRhYmxlX2xpc3RfbGlzdDoKLSAgICAg
ICAgICAgICAgICAgICAgZG9tYWluX2d1YXJkLmdlbmVyYXRlX29wZW4obCkKLQotICAgICAgICAg
ICAgZnJvbnRlbmRfbWV0aG9kX2RlY2xhcmF0aW9uX2xpbmVzID0gW10KLQotICAgICAgICAgICAg
aWYgKCJjb21tYW5kcyIgaW4ganNvbl9kb21haW4gb3IgImV2ZW50cyIgaW4ganNvbl9kb21haW4p
OgotICAgICAgICAgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX2pzX2RvbWFpbl9pbml0aWFsaXpl
cl9saXN0LmFwcGVuZCgiLy8gJXMuXG4iICUgZG9tYWluX25hbWUpCi0gICAgICAgICAgICAgICAg
aWYgbm90IGRvbWFpbl9maXhlcy5za2lwX2pzX2JpbmQ6Ci0gICAgICAgICAgICAgICAgICAgIEdl
bmVyYXRvci5iYWNrZW5kX2pzX2RvbWFpbl9pbml0aWFsaXplcl9saXN0LmFwcGVuZCgiSW5zcGVj
dG9yQmFja2VuZC5yZWdpc3RlciVzRGlzcGF0Y2hlciA9IEluc3BlY3RvckJhY2tlbmQucmVnaXN0
ZXJEb21haW5EaXNwYXRjaGVyLmJpbmQoSW5zcGVjdG9yQmFja2VuZCwgXCIlc1wiKTtcbiIgJSAo
ZG9tYWluX25hbWUsIGRvbWFpbl9uYW1lKSkKLQotICAgICAgICAgICAgaWYgInR5cGVzIiBpbiBq
c29uX2RvbWFpbjoKLSAgICAgICAgICAgICAgICBmb3IganNvbl90eXBlIGluIGpzb25fZG9tYWlu
WyJ0eXBlcyJdOgotICAgICAgICAgICAgICAgICAgICBpZiAidHlwZSIgaW4ganNvbl90eXBlIGFu
ZCBqc29uX3R5cGVbInR5cGUiXSA9PSAic3RyaW5nIiBhbmQgImVudW0iIGluIGpzb25fdHlwZToK
LSAgICAgICAgICAgICAgICAgICAgICAgIGVudW1fbmFtZSA9ICIlcy4lcyIgJSAoZG9tYWluX25h
bWUsIGpzb25fdHlwZVsiaWQiXSkKLSAgICAgICAgICAgICAgICAgICAgICAgIEdlbmVyYXRvci5w
cm9jZXNzX2VudW0oanNvbl90eXBlLCBlbnVtX25hbWUpCi0gICAgICAgICAgICAgICAgICAgIGVs
aWYganNvbl90eXBlWyJ0eXBlIl0gPT0gIm9iamVjdCI6Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBpZiAicHJvcGVydGllcyIgaW4ganNvbl90eXBlOgotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGZvciBqc29uX3Byb3BlcnR5IGluIGpzb25fdHlwZVsicHJvcGVydGllcyJdOgotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAidHlwZSIgaW4ganNvbl9wcm9wZXJ0eSBhbmQg
anNvbl9wcm9wZXJ0eVsidHlwZSJdID09ICJzdHJpbmciIGFuZCAiZW51bSIgaW4ganNvbl9wcm9w
ZXJ0eToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW1fbmFtZSA9ICIl
cy4lcyVzIiAlIChkb21haW5fbmFtZSwganNvbl90eXBlWyJpZCJdLCB0b190aXRsZV9jYXNlKGpz
b25fcHJvcGVydHlbIm5hbWUiXSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBHZW5lcmF0b3IucHJvY2Vzc19lbnVtKGpzb25fcHJvcGVydHksIGVudW1fbmFtZSkKLQotICAg
ICAgICAgICAgaWYgImV2ZW50cyIgaW4ganNvbl9kb21haW46Ci0gICAgICAgICAgICAgICAgaWYg
ZG9tYWluX2d1YXJkOgotICAgICAgICAgICAgICAgICAgICBkb21haW5fZ3VhcmQuZ2VuZXJhdGVf
b3BlbihHZW5lcmF0b3IuZnJvbnRlbmRfbWV0aG9kX2xpc3QpCi0gICAgICAgICAgICAgICAgICAg
IGRvbWFpbl9ndWFyZC5nZW5lcmF0ZV9vcGVuKEdlbmVyYXRvci5mcm9udGVuZF9kb21haW5fY2xh
c3NfbGluZXMpCi0KLSAgICAgICAgICAgICAgICBmb3IganNvbl9ldmVudCBpbiBqc29uX2RvbWFp
blsiZXZlbnRzIl06Ci0gICAgICAgICAgICAgICAgICAgIEdlbmVyYXRvci5wcm9jZXNzX2V2ZW50
KGpzb25fZXZlbnQsIGRvbWFpbl9uYW1lLCBmcm9udGVuZF9tZXRob2RfZGVjbGFyYXRpb25fbGlu
ZXMpCi0KLSAgICAgICAgICAgICAgICBHZW5lcmF0b3IuZnJvbnRlbmRfZG9tYWluX2NsYXNzX2xp
bmVzLmFwcGVuZChUZW1wbGF0ZXMuZnJvbnRlbmRfZG9tYWluX2NsYXNzLnN1YnN0aXR1dGUoTm9u
ZSwKLSAgICAgICAgICAgICAgICAgICAgZXhwb3J0TWFjcm89SU5TUEVDVE9SX1RZUEVTX0dFTkVS
QVRPUl9DT05GSUdfTUFQW291dHB1dF90eXBlXVsiZXhwb3J0X21hY3JvIl0sCi0gICAgICAgICAg
ICAgICAgICAgIGRvbWFpbkNsYXNzTmFtZT0iSW5zcGVjdG9yJXNGcm9udGVuZERpc3BhdGNoZXIi
ICUgZG9tYWluX25hbWUsCi0gICAgICAgICAgICAgICAgICAgIGZyb250ZW5kRG9tYWluTWV0aG9k
RGVjbGFyYXRpb25zPSIiLmpvaW4oZmxhdHRlbl9saXN0KGZyb250ZW5kX21ldGhvZF9kZWNsYXJh
dGlvbl9saW5lcykpKSkKLQotICAgICAgICAgICAgICAgIGlmIGRvbWFpbl9ndWFyZDoKLSAgICAg
ICAgICAgICAgICAgICAgZG9tYWluX2d1YXJkLmdlbmVyYXRlX2Nsb3NlKEdlbmVyYXRvci5mcm9u
dGVuZF9tZXRob2RfbGlzdCkKLSAgICAgICAgICAgICAgICAgICAgZG9tYWluX2d1YXJkLmdlbmVy
YXRlX2Nsb3NlKEdlbmVyYXRvci5mcm9udGVuZF9kb21haW5fY2xhc3NfbGluZXMpCi0KLSAgICAg
ICAgICAgIGRpc3BhdGNoZXJfbmFtZSA9ICJJbnNwZWN0b3IiICsgQ2FwaXRhbGl6ZXIubG93ZXJf
Y2FtZWxfY2FzZV90b191cHBlcihkb21haW5fbmFtZSkgKyAiQmFja2VuZERpc3BhdGNoZXIiCi0g
ICAgICAgICAgICBhZ2VudF9pbnRlcmZhY2VfbmFtZSA9IGRpc3BhdGNoZXJfbmFtZSArICJIYW5k
bGVyIgotCi0gICAgICAgICAgICBpZiAiY29tbWFuZHMiIGluIGpzb25fZG9tYWluOgotICAgICAg
ICAgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX2Rpc3BhdGNoZXJfaW50ZXJmYWNlX2xpc3QuYXBw
ZW5kKCJjbGFzcyAlcyAlcyBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3BlY3RvclN1cHBs
ZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHtcbiIgJSAoSU5TUEVDVE9SX1RZUEVTX0dFTkVSQVRP
Ul9DT05GSUdfTUFQW291dHB1dF90eXBlXVsiZXhwb3J0X21hY3JvIl0sIGRpc3BhdGNoZXJfbmFt
ZSkpCi0gICAgICAgICAgICAgICAgR2VuZXJhdG9yLmJhY2tlbmRfZGlzcGF0Y2hlcl9pbnRlcmZh
Y2VfbGlzdC5hcHBlbmQoInB1YmxpYzpcbiIpCi0gICAgICAgICAgICAgICAgR2VuZXJhdG9yLmJh
Y2tlbmRfZGlzcGF0Y2hlcl9pbnRlcmZhY2VfbGlzdC5hcHBlbmQoIiAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjwlcz4gY3JlYXRlKEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqLCAl
cyopO1xuIiAlIChkaXNwYXRjaGVyX25hbWUsIGFnZW50X2ludGVyZmFjZV9uYW1lKSkKLSAgICAg
ICAgICAgICAgICBHZW5lcmF0b3IuYmFja2VuZF9kaXNwYXRjaGVyX2ludGVyZmFjZV9saXN0LmFw
cGVuZCgiICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5n
JiBtZXRob2QsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IG1lc3NhZ2Up
IG92ZXJyaWRlO1xuIikKLSAgICAgICAgICAgICAgICBHZW5lcmF0b3IuYmFja2VuZF9kaXNwYXRj
aGVyX2ludGVyZmFjZV9saXN0LmFwcGVuZCgicHJpdmF0ZTpcbiIpCi0KLSAgICAgICAgICAgICAg
ICBHZW5lcmF0b3IuYmFja2VuZF9oYW5kbGVyX2ludGVyZmFjZV9saXN0LmFwcGVuZCgiY2xhc3Mg
JXMgJXMge1xuIiAlIChJTlNQRUNUT1JfVFlQRVNfR0VORVJBVE9SX0NPTkZJR19NQVBbb3V0cHV0
X3R5cGVdWyJleHBvcnRfbWFjcm8iXSwgYWdlbnRfaW50ZXJmYWNlX25hbWUpKQotICAgICAgICAg
ICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX2hhbmRsZXJfaW50ZXJmYWNlX2xpc3QuYXBwZW5kKCJw
dWJsaWM6XG4iKQotCi0gICAgICAgICAgICAgICAgYmFja2VuZF9tZXRob2RfY291bnQgPSBsZW4o
R2VuZXJhdG9yLmJhY2tlbmRfbWV0aG9kX2ltcGxlbWVudGF0aW9uX2xpc3QpCi0KLSAgICAgICAg
ICAgICAgICBkaXNwYXRjaGVyX2lmX2NoYWluID0gW10KLSAgICAgICAgICAgICAgICBkaXNwYXRj
aGVyX2NvbW1hbmRzX2xpc3QgPSBbXQotICAgICAgICAgICAgICAgIGZvciBqc29uX2NvbW1hbmQg
aW4ganNvbl9kb21haW5bImNvbW1hbmRzIl06Ci0gICAgICAgICAgICAgICAgICAgIEdlbmVyYXRv
ci5wcm9jZXNzX2NvbW1hbmQoanNvbl9jb21tYW5kLCBkb21haW5fbmFtZSwgYWdlbnRfaW50ZXJm
YWNlX25hbWUsIGRpc3BhdGNoZXJfbmFtZSwgZGlzcGF0Y2hlcl9pZl9jaGFpbiwgZGlzcGF0Y2hl
cl9jb21tYW5kc19saXN0KQotCi0gICAgICAgICAgICAgICAgR2VuZXJhdG9yLmJhY2tlbmRfaGFu
ZGxlcl9pbnRlcmZhY2VfbGlzdC5hcHBlbmQoInByb3RlY3RlZDpcbiIpCi0gICAgICAgICAgICAg
ICAgR2VuZXJhdG9yLmJhY2tlbmRfaGFuZGxlcl9pbnRlcmZhY2VfbGlzdC5hcHBlbmQoIiAgICB2
aXJ0dWFsIH4lcygpO1xuIiAlIGFnZW50X2ludGVyZmFjZV9uYW1lKQotICAgICAgICAgICAgICAg
IEdlbmVyYXRvci5iYWNrZW5kX2hhbmRsZXJfaW50ZXJmYWNlX2xpc3QuYXBwZW5kKCJ9O1xuXG4i
KQotCi0gICAgICAgICAgICAgICAgR2VuZXJhdG9yLmJhY2tlbmRfaGFuZGxlcl9pbXBsZW1lbnRh
dGlvbl9saXN0LmFwcGVuZCgiJXM6On4lcygpIHsgfVxuIiAlIChhZ2VudF9pbnRlcmZhY2VfbmFt
ZSwgYWdlbnRfaW50ZXJmYWNlX25hbWUpKQotCi0gICAgICAgICAgICAgICAgR2VuZXJhdG9yLmJh
Y2tlbmRfZGlzcGF0Y2hlcl9pbnRlcmZhY2VfbGlzdC5hcHBlbmQoInByaXZhdGU6XG4iKQotICAg
ICAgICAgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX2Rpc3BhdGNoZXJfaW50ZXJmYWNlX2xpc3Qu
YXBwZW5kKCIgICAgJXMoSW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciosICVz
Kik7XG4iICUgKGRpc3BhdGNoZXJfbmFtZSwgYWdlbnRfaW50ZXJmYWNlX25hbWUpKQotICAgICAg
ICAgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX2Rpc3BhdGNoZXJfaW50ZXJmYWNlX2xpc3QuYXBw
ZW5kKCIgICAgJXMqIG1fYWdlbnQ7XG4iICUgYWdlbnRfaW50ZXJmYWNlX25hbWUpCi0gICAgICAg
ICAgICAgICAgR2VuZXJhdG9yLmJhY2tlbmRfZGlzcGF0Y2hlcl9pbnRlcmZhY2VfbGlzdC5hcHBl
bmQoIn07XG5cbiIpCi0KLSAgICAgICAgICAgICAgICBHZW5lcmF0b3IuYmFja2VuZF9tZXRob2Rf
aW1wbGVtZW50YXRpb25fbGlzdC5pbnNlcnQoYmFja2VuZF9tZXRob2RfY291bnQsIFRlbXBsYXRl
cy5iYWNrZW5kX2Rpc3BhdGNoZXJfY29uc3RydWN0b3Iuc3Vic3RpdHV0ZShOb25lLAotICAgICAg
ICAgICAgICAgICAgICBkb21haW5OYW1lPWRvbWFpbl9uYW1lLAotICAgICAgICAgICAgICAgICAg
ICBkaXNwYXRjaGVyTmFtZT1kaXNwYXRjaGVyX25hbWUsCi0gICAgICAgICAgICAgICAgICAgIGFn
ZW50TmFtZT1hZ2VudF9pbnRlcmZhY2VfbmFtZSkpCi0KLSAgICAgICAgICAgICAgICBpZiBsZW4o
anNvbl9kb21haW5bImNvbW1hbmRzIl0pIDw9IDU6Ci0gICAgICAgICAgICAgICAgICAgIEdlbmVy
YXRvci5iYWNrZW5kX21ldGhvZF9pbXBsZW1lbnRhdGlvbl9saXN0Lmluc2VydChiYWNrZW5kX21l
dGhvZF9jb3VudCArIDEsIFRlbXBsYXRlcy5iYWNrZW5kX2Rpc3BhdGNoZXJfZGlzcGF0Y2hfbWV0
aG9kX3NpbXBsZS5zdWJzdGl0dXRlKE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICBkb21h
aW5OYW1lPWRvbWFpbl9uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hlck5h
bWU9ZGlzcGF0Y2hlcl9uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgaWZDaGFpbj0iXG4i
LmpvaW4oZGlzcGF0Y2hlcl9pZl9jaGFpbikpKQotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAg
ICAgICAgICAgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX21ldGhvZF9pbXBsZW1lbnRhdGlvbl9s
aXN0Lmluc2VydChiYWNrZW5kX21ldGhvZF9jb3VudCArIDEsIFRlbXBsYXRlcy5iYWNrZW5kX2Rp
c3BhdGNoZXJfZGlzcGF0Y2hfbWV0aG9kLnN1YnN0aXR1dGUoTm9uZSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGRvbWFpbk5hbWU9ZG9tYWluX25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAg
ICBkaXNwYXRjaGVyTmFtZT1kaXNwYXRjaGVyX25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAg
ICBkaXNwYXRjaGVyQ29tbWFuZHM9IlxuIi5qb2luKGRpc3BhdGNoZXJfY29tbWFuZHNfbGlzdCkp
KQotCi0gICAgICAgICAgICAgICAgaWYgZG9tYWluX2d1YXJkOgotICAgICAgICAgICAgICAgICAg
ICBmb3IgbCBpbiByZXZlcnNlZChmaXJzdF9jeWNsZV9ndWFyZGFibGVfbGlzdF9saXN0KToKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGRvbWFpbl9ndWFyZC5nZW5lcmF0ZV9jbG9zZShsKQotICAg
ICAgICAgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX2pzX2RvbWFpbl9pbml0aWFsaXplcl9saXN0
LmFwcGVuZCgiXG4iKQotCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBwcm9jZXNzX2VudW0o
anNvbl9lbnVtLCBlbnVtX25hbWUpOgotICAgICAgICBlbnVtX21lbWJlcnMgPSBbXQotICAgICAg
ICBmb3IgbWVtYmVyIGluIGpzb25fZW51bVsiZW51bSJdOgotICAgICAgICAgICAgZW51bV9tZW1i
ZXJzLmFwcGVuZCgiJXM6IFwiJXNcIiIgJSAoZml4X2NhbWVsX2Nhc2UobWVtYmVyKSwgbWVtYmVy
KSkKLQotICAgICAgICBHZW5lcmF0b3IuYmFja2VuZF9qc19kb21haW5faW5pdGlhbGl6ZXJfbGlz
dC5hcHBlbmQoIkluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFbnVtKFwiJXNcIiwgeyVzfSk7XG4i
ICUgKAotICAgICAgICAgICAgZW51bV9uYW1lLCAiLCAiLmpvaW4oZW51bV9tZW1iZXJzKSkpCi0K
LSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIHByb2Nlc3NfZXZlbnQoanNvbl9ldmVudCwgZG9t
YWluX25hbWUsIGZyb250ZW5kX21ldGhvZF9kZWNsYXJhdGlvbl9saW5lcyk6Ci0gICAgICAgIGV2
ZW50X25hbWUgPSBqc29uX2V2ZW50WyJuYW1lIl0KLQotICAgICAgICBhZF9ob2NfdHlwZV9vdXRw
dXQgPSBbXQotICAgICAgICBmcm9udGVuZF9tZXRob2RfZGVjbGFyYXRpb25fbGluZXMuYXBwZW5k
KGFkX2hvY190eXBlX291dHB1dCkKLSAgICAgICAgYWRfaG9jX3R5cGVfd3JpdGVyID0gV3JpdGVy
KGFkX2hvY190eXBlX291dHB1dCwgIiAgICAgICAgIikKLQotICAgICAgICBkZWNsX3BhcmFtZXRl
cl9saXN0ID0gW10KLQotICAgICAgICBqc29uX3BhcmFtZXRlcnMgPSBqc29uX2V2ZW50LmdldCgi
cGFyYW1ldGVycyIpCi0gICAgICAgIEdlbmVyYXRvci5nZW5lcmF0ZV9zZW5kX21ldGhvZChqc29u
X3BhcmFtZXRlcnMsIGV2ZW50X25hbWUsIGRvbWFpbl9uYW1lLCBhZF9ob2NfdHlwZV93cml0ZXIs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNsX3BhcmFtZXRlcl9s
aXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2VuZXJhdG9yLkV2
ZW50TWV0aG9kU3RydWN0VGVtcGxhdGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHZW5lcmF0b3IuZnJvbnRlbmRfbWV0aG9kX2xpc3QsIFRlbXBsYXRlcy5mcm9udGVu
ZF9tZXRob2QsIHsiZXZlbnROYW1lIjogZXZlbnRfbmFtZX0pCi0KLSAgICAgICAgYmFja2VuZF9q
c19ldmVudF9wYXJhbV9saXN0ID0gW10KLSAgICAgICAgaWYganNvbl9wYXJhbWV0ZXJzOgotICAg
ICAgICAgICAgZm9yIHBhcmFtZXRlciBpbiBqc29uX3BhcmFtZXRlcnM6Ci0gICAgICAgICAgICAg
ICAgcGFyYW1ldGVyX25hbWUgPSBwYXJhbWV0ZXJbIm5hbWUiXQotICAgICAgICAgICAgICAgIGJh
Y2tlbmRfanNfZXZlbnRfcGFyYW1fbGlzdC5hcHBlbmQoIlwiJXNcIiIgJSBwYXJhbWV0ZXJfbmFt
ZSkKLQotICAgICAgICBmcm9udGVuZF9tZXRob2RfZGVjbGFyYXRpb25fbGluZXMuYXBwZW5kKAot
ICAgICAgICAgICAgIiAgICB2b2lkICVzKCVzKTtcbiIgJSAoZXZlbnRfbmFtZSwgIiwgIi5qb2lu
KGRlY2xfcGFyYW1ldGVyX2xpc3QpKSkKLQotICAgICAgICBHZW5lcmF0b3IuYmFja2VuZF9qc19k
b21haW5faW5pdGlhbGl6ZXJfbGlzdC5hcHBlbmQoIkluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJF
dmVudChcIiVzLiVzXCIsIFslc10pO1xuIiAlICgKLSAgICAgICAgICAgIGRvbWFpbl9uYW1lLCBl
dmVudF9uYW1lLCAiLCAiLmpvaW4oYmFja2VuZF9qc19ldmVudF9wYXJhbV9saXN0KSkpCi0KLSAg
ICBjbGFzcyBFdmVudE1ldGhvZFN0cnVjdFRlbXBsYXRlOgotICAgICAgICBAc3RhdGljbWV0aG9k
Ci0gICAgICAgIGRlZiBhcHBlbmRfcHJvbG9nKGxpbmVfbGlzdCk6Ci0gICAgICAgICAgICBsaW5l
X2xpc3QuYXBwZW5kKCIgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0ID0g
SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTtcbiIpCi0KLSAgICAgICAgQHN0YXRpY21ldGhvZAot
ICAgICAgICBkZWYgYXBwZW5kX2VwaWxvZyhsaW5lX2xpc3QpOgotICAgICAgICAgICAgbGluZV9s
aXN0LmFwcGVuZCgiICAgIGpzb25NZXNzYWdlLT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKFwicGFy
YW1zXCIpLCBwYXJhbXNPYmplY3QpO1xuIikKLQotICAgICAgICBjb250YWluZXJfbmFtZSA9ICJw
YXJhbXNPYmplY3QiCi0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIHByb2Nlc3NfY29tbWFu
ZChqc29uX2NvbW1hbmQsIGRvbWFpbl9uYW1lLCBhZ2VudF9pbnRlcmZhY2VfbmFtZSwgZGlzcGF0
Y2hlcl9uYW1lLCBkaXNwYXRjaGVyX2lmX2NoYWluLCBkaXNwYXRjaGVyX2NvbW1hbmRzX2xpc3Qp
OgotICAgICAgICBqc29uX2NvbW1hbmRfbmFtZSA9IGpzb25fY29tbWFuZFsibmFtZSJdCi0KLSAg
ICAgICAgYWRfaG9jX3R5cGVfb3V0cHV0ID0gW10KLSAgICAgICAgR2VuZXJhdG9yLmJhY2tlbmRf
aGFuZGxlcl9pbnRlcmZhY2VfbGlzdC5hcHBlbmQoYWRfaG9jX3R5cGVfb3V0cHV0KQotICAgICAg
ICBhZF9ob2NfdHlwZV93cml0ZXIgPSBXcml0ZXIoYWRfaG9jX3R5cGVfb3V0cHV0LCAiICAgICIp
Ci0KLSAgICAgICAgR2VuZXJhdG9yLmJhY2tlbmRfZGlzcGF0Y2hlcl9pbnRlcmZhY2VfbGlzdC5h
cHBlbmQoIiAgICB2b2lkICVzKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rv
ck9iamVjdCYgbWVzc2FnZSk7XG4iICUganNvbl9jb21tYW5kX25hbWUpCi0KLSAgICAgICAgR2Vu
ZXJhdG9yLmJhY2tlbmRfaGFuZGxlcl9pbnRlcmZhY2VfbGlzdC5hcHBlbmQoIiAgICB2aXJ0dWFs
IHZvaWQgJXMoRXJyb3JTdHJpbmcqIiAlIGpzb25fY29tbWFuZF9uYW1lKQotCi0gICAgICAgIGlm
IG5vdCBkaXNwYXRjaGVyX2lmX2NoYWluOgotICAgICAgICAgICAgZGlzcGF0Y2hlcl9pZl9jaGFp
bi5hcHBlbmQoIiAgICBpZiAobWV0aG9kID09IFwiJXNcIikiICUganNvbl9jb21tYW5kX25hbWUp
Ci0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBkaXNwYXRjaGVyX2lmX2NoYWluLmFwcGVuZCgi
ICAgIGVsc2UgaWYgKG1ldGhvZCA9PSBcIiVzXCIpIiAlIGpzb25fY29tbWFuZF9uYW1lKQotICAg
ICAgICBkaXNwYXRjaGVyX2lmX2NoYWluLmFwcGVuZCgiICAgICAgICAlcyhjYWxsSWQsICptZXNz
YWdlLmdldCgpKTsiICUganNvbl9jb21tYW5kX25hbWUpCi0gICAgICAgIGRpc3BhdGNoZXJfY29t
bWFuZHNfbGlzdC5hcHBlbmQoIiAgICAgICAgICAgIHsgXCIlc1wiLCAmJXM6OiVzIH0sIiAlIChq
c29uX2NvbW1hbmRfbmFtZSwgZGlzcGF0Y2hlcl9uYW1lLCBqc29uX2NvbW1hbmRfbmFtZSkpCi0K
LSAgICAgICAgbWV0aG9kX2luX3BhcmFtc19oYW5kbGluZyA9IFtdCi0gICAgICAgIG1ldGhvZF9k
aXNwYXRjaF9oYW5kbGluZyA9IFtdCi0gICAgICAgIG1ldGhvZF9vdXRfcGFyYW1zX2hhbmRsaW5n
ID0gW10KLSAgICAgICAgbWV0aG9kX2VuZGluZ19oYW5kbGluZyA9IFtdCi0gICAgICAgIG1ldGhv
ZF9yZXF1ZXN0X21lc3NhZ2VfcGFyYW1fbmFtZSA9ICIiCi0gICAgICAgIGFnZW50X2NhbGxfcGFy
YW1fbGlzdCA9IFtdCi0gICAgICAgIGpzX3BhcmFtZXRlcnNfdGV4dCA9ICIiCi0gICAgICAgIGlm
ICJwYXJhbWV0ZXJzIiBpbiBqc29uX2NvbW1hbmQ6Ci0gICAgICAgICAgICBqc29uX3BhcmFtcyA9
IGpzb25fY29tbWFuZFsicGFyYW1ldGVycyJdCi0gICAgICAgICAgICBtZXRob2RfcmVxdWVzdF9t
ZXNzYWdlX3BhcmFtX25hbWUgPSAiIG1lc3NhZ2UiCi0gICAgICAgICAgICBtZXRob2RfaW5fcGFy
YW1zX2hhbmRsaW5nLmFwcGVuZCgiICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xF
cnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7XG4iKQotICAgICAgICAgICAgbWV0aG9k
X2luX3BhcmFtc19oYW5kbGluZy5hcHBlbmQoIiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBw
YXJhbXNDb250YWluZXIgPSBtZXNzYWdlLmdldE9iamVjdChBU0NJSUxpdGVyYWwoXCJwYXJhbXNc
IikpO1xuIikKLSAgICAgICAgICAgIG1ldGhvZF9pbl9wYXJhbXNfaGFuZGxpbmcuYXBwZW5kKCIg
ICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIu
Z2V0KCk7XG4iKQotICAgICAgICAgICAgbWV0aG9kX2luX3BhcmFtc19oYW5kbGluZy5hcHBlbmQo
IiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5n
ZXQoKTtcbiIpCi0gICAgICAgICAgICBqc19wYXJhbV9saXN0ID0gW10KLQotICAgICAgICAgICAg
Zm9yIGpzb25fcGFyYW1ldGVyIGluIGpzb25fcGFyYW1zOgotICAgICAgICAgICAgICAgIGpzb25f
cGFyYW1fbmFtZSA9IGpzb25fcGFyYW1ldGVyWyJuYW1lIl0KLSAgICAgICAgICAgICAgICBwYXJh
bV9yYXdfdHlwZSA9IHJlc29sdmVfcGFyYW1fcmF3X3R5cGUoanNvbl9wYXJhbWV0ZXIsIGRvbWFp
bl9uYW1lKQotCi0gICAgICAgICAgICAgICAgZ2V0dGVyX25hbWUgPSBwYXJhbV9yYXdfdHlwZS5n
ZXRfZ2V0dGVyX25hbWUoKQotCi0gICAgICAgICAgICAgICAgb3B0aW9uYWwgPSBqc29uX3BhcmFt
ZXRlci5nZXQoIm9wdGlvbmFsIikKLQotICAgICAgICAgICAgICAgIG5vbl9vcHRpb25hbF90eXBl
X21vZGVsID0gcGFyYW1fcmF3X3R5cGUuZ2V0X3Jhd190eXBlX21vZGVsKCkKLSAgICAgICAgICAg
ICAgICBpZiBvcHRpb25hbDoKLSAgICAgICAgICAgICAgICAgICAgdHlwZV9tb2RlbCA9IG5vbl9v
cHRpb25hbF90eXBlX21vZGVsLmdldF9vcHRpb25hbCgpCi0gICAgICAgICAgICAgICAgZWxzZToK
LSAgICAgICAgICAgICAgICAgICAgdHlwZV9tb2RlbCA9IG5vbl9vcHRpb25hbF90eXBlX21vZGVs
Ci0KLSAgICAgICAgICAgICAgICBpZiBvcHRpb25hbDoKLSAgICAgICAgICAgICAgICAgICAgY29k
ZSA9ICgiICAgIGJvb2wgJXNfdmFsdWVGb3VuZCA9IGZhbHNlO1xuIgotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICIgICAgJXMgaW5fJXMgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6
Z2V0JXMocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoXCIlc1wiKSwgJiVzX3ZhbHVl
Rm91bmQsIHByb3RvY29sRXJyb3JzUHRyKTtcbiIgJQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKGpzb25fcGFyYW1fbmFtZSwgbm9uX29wdGlvbmFsX3R5cGVfbW9kZWwuZ2V0X2NvbW1hbmRf
cmV0dXJuX3Bhc3NfbW9kZWwoKS5nZXRfcmV0dXJuX3Zhcl90eXBlKCksIGpzb25fcGFyYW1fbmFt
ZSwgZ2V0dGVyX25hbWUsIGpzb25fcGFyYW1fbmFtZSwganNvbl9wYXJhbV9uYW1lKSkKLSAgICAg
ICAgICAgICAgICAgICAgcGFyYW0gPSAiLCAlc192YWx1ZUZvdW5kID8gJmluXyVzIDogbnVsbHB0
ciIgJSAoanNvbl9wYXJhbV9uYW1lLCBqc29uX3BhcmFtX25hbWUpCi0gICAgICAgICAgICAgICAg
ICAgICMgRklYTUU6IHBhc3Mgb3B0aW9uYWwgcmVmcHRyLXZhbHVlcyBhcyBQYXNzUmVmUHRyCi0g
ICAgICAgICAgICAgICAgICAgIGZvcm1hbF9wYXJhbV90eXBlX3BhdHRlcm4gPSAiY29uc3QgJXMq
IgotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIGNvZGUgPSAoIiAg
ICAlcyBpbl8lcyA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXQlcyhwYXJhbXNDb250
YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbChcIiVzXCIpLCBudWxscHRyLCBwcm90b2NvbEVycm9yc1B0
cik7XG4iICUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAobm9uX29wdGlvbmFsX3R5cGVf
bW9kZWwuZ2V0X2NvbW1hbmRfcmV0dXJuX3Bhc3NfbW9kZWwoKS5nZXRfcmV0dXJuX3Zhcl90eXBl
KCksIGpzb25fcGFyYW1fbmFtZSwgZ2V0dGVyX25hbWUsIGpzb25fcGFyYW1fbmFtZSkpCi0gICAg
ICAgICAgICAgICAgICAgIHBhcmFtID0gIiwgaW5fJXMiICUganNvbl9wYXJhbV9uYW1lCi0gICAg
ICAgICAgICAgICAgICAgICMgRklYTUU6IHBhc3Mgbm90LW9wdGlvbmFsIHJlZnB0ci12YWx1ZXMg
YXMgTm9uTnVsbFBhc3NSZWZQdHIKLSAgICAgICAgICAgICAgICAgICAgaWYgcGFyYW1fcmF3X3R5
cGUuaXNfaGVhdnlfdmFsdWUoKToKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hbF9wYXJh
bV90eXBlX3BhdHRlcm4gPSAiY29uc3QgJXMmIgotICAgICAgICAgICAgICAgICAgICBlbHNlOgot
ICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWFsX3BhcmFtX3R5cGVfcGF0dGVybiA9ICIlcyIK
LQotICAgICAgICAgICAgICAgIG1ldGhvZF9pbl9wYXJhbXNfaGFuZGxpbmcuYXBwZW5kKGNvZGUp
Ci0gICAgICAgICAgICAgICAgYWdlbnRfY2FsbF9wYXJhbV9saXN0LmFwcGVuZChwYXJhbSkKLSAg
ICAgICAgICAgICAgICBHZW5lcmF0b3IuYmFja2VuZF9oYW5kbGVyX2ludGVyZmFjZV9saXN0LmFw
cGVuZCgiLCAlcyBpbl8lcyIgJSAoZm9ybWFsX3BhcmFtX3R5cGVfcGF0dGVybiAlIG5vbl9vcHRp
b25hbF90eXBlX21vZGVsLmdldF9jb21tYW5kX3JldHVybl9wYXNzX21vZGVsKCkuZ2V0X3JldHVy
bl92YXJfdHlwZSgpLCBqc29uX3BhcmFtX25hbWUpKQotCi0gICAgICAgICAgICAgICAganNfYmlu
ZF90eXBlID0gcGFyYW1fcmF3X3R5cGUuZ2V0X2pzX2JpbmRfdHlwZSgpCi0gICAgICAgICAgICAg
ICAganNfcGFyYW1fdGV4dCA9ICJ7XCJuYW1lXCI6IFwiJXNcIiwgXCJ0eXBlXCI6IFwiJXNcIiwg
XCJvcHRpb25hbFwiOiAlc30iICUgKAotICAgICAgICAgICAgICAgICAgICBqc29uX3BhcmFtX25h
bWUsCi0gICAgICAgICAgICAgICAgICAgIGpzX2JpbmRfdHlwZSwKLSAgICAgICAgICAgICAgICAg
ICAgKCJ0cnVlIiBpZiAoIm9wdGlvbmFsIiBpbiBqc29uX3BhcmFtZXRlciBhbmQganNvbl9wYXJh
bWV0ZXJbIm9wdGlvbmFsIl0pIGVsc2UgImZhbHNlIikpCi0KLSAgICAgICAgICAgICAgICBqc19w
YXJhbV9saXN0LmFwcGVuZChqc19wYXJhbV90ZXh0KQotCi0gICAgICAgICAgICBtZXRob2RfaW5f
cGFyYW1zX2hhbmRsaW5nLmFwcGVuZCgiICAgIGlmIChwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkp
IHtcbiIpCi0gICAgICAgICAgICBtZXRob2RfaW5fcGFyYW1zX2hhbmRsaW5nLmFwcGVuZCgiICAg
ICAgICBTdHJpbmcgZXJyb3JNZXNzYWdlID0gU3RyaW5nOjpmb3JtYXQoXCJTb21lIGFyZ3VtZW50
cyBvZiBtZXRob2QgJyUlcycgY2FuJ3QgYmUgcHJvY2Vzc2VkXCIsIFwiJXMuJXNcIik7XG4iICUg
KGRvbWFpbl9uYW1lLCBqc29uX2NvbW1hbmRfbmFtZSkpCi0gICAgICAgICAgICBtZXRob2RfaW5f
cGFyYW1zX2hhbmRsaW5nLmFwcGVuZCgiICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBv
cnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpJbnZh
bGlkUGFyYW1zLCBlcnJvck1lc3NhZ2UsIHByb3RvY29sRXJyb3JzLnJlbGVhc2UoKSk7XG4iKQot
ICAgICAgICAgICAgbWV0aG9kX2luX3BhcmFtc19oYW5kbGluZy5hcHBlbmQoIiAgICAgICAgcmV0
dXJuO1xuIikKLSAgICAgICAgICAgIG1ldGhvZF9pbl9wYXJhbXNfaGFuZGxpbmcuYXBwZW5kKCIg
ICAgfVxuIikKLSAgICAgICAgICAgIG1ldGhvZF9pbl9wYXJhbXNfaGFuZGxpbmcuYXBwZW5kKCJc
biIpCi0KLSAgICAgICAgICAgIGpzX3BhcmFtZXRlcnNfdGV4dCA9ICIsICIuam9pbihqc19wYXJh
bV9saXN0KQotCi0gICAgICAgIG1ldGhvZF9kaXNwYXRjaF9oYW5kbGluZy5hcHBlbmQoIiAgICBF
cnJvclN0cmluZyBlcnJvcjtcbiIpCi0gICAgICAgIG1ldGhvZF9kaXNwYXRjaF9oYW5kbGluZy5h
cHBlbmQoIiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmpl
Y3Q6OmNyZWF0ZSgpO1xuIikKLQotICAgICAgICBpZiBqc29uX2NvbW1hbmQuZ2V0KCJhc3luYyIp
ID09IFRydWU6Ci0gICAgICAgICAgICBjYWxsYmFja19uYW1lID0gQ2FwaXRhbGl6ZXIubG93ZXJf
Y2FtZWxfY2FzZV90b191cHBlcihqc29uX2NvbW1hbmRfbmFtZSkgKyAiQ2FsbGJhY2siCi0KLSAg
ICAgICAgICAgIGNhbGxiYWNrX291dHB1dCA9IFtdCi0gICAgICAgICAgICBjYWxsYmFja193cml0
ZXIgPSBXcml0ZXIoY2FsbGJhY2tfb3V0cHV0LCBhZF9ob2NfdHlwZV93cml0ZXIuZ2V0X2luZGVu
dCgpKQotCi0gICAgICAgICAgICBkZWNsX3BhcmFtZXRlcl9saXN0ID0gW10KLSAgICAgICAgICAg
IEdlbmVyYXRvci5nZW5lcmF0ZV9zZW5kX21ldGhvZChqc29uX2NvbW1hbmQuZ2V0KCJyZXR1cm5z
IiksIGpzb25fY29tbWFuZF9uYW1lLCBkb21haW5fbmFtZSwgYWRfaG9jX3R5cGVfd3JpdGVyLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlY2xfcGFyYW1ldGVy
X2xpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2VuZXJh
dG9yLkNhbGxiYWNrTWV0aG9kU3RydWN0VGVtcGxhdGUsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgR2VuZXJhdG9yLmJhY2tlbmRfbWV0aG9kX2ltcGxlbWVudGF0
aW9uX2xpc3QsIFRlbXBsYXRlcy5jYWxsYmFja19tZXRob2QsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgeyJjYWxsYmFja05hbWUiOiBjYWxsYmFja19uYW1lLCAi
aGFuZGxlck5hbWUiOiBhZ2VudF9pbnRlcmZhY2VfbmFtZX0pCi0KLSAgICAgICAgICAgIGNhbGxi
YWNrX3dyaXRlci5uZXdsaW5lKCJjbGFzcyAiICsgY2FsbGJhY2tfbmFtZSArICIgOiBwdWJsaWMg
SW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlIHtcbiIp
Ci0gICAgICAgICAgICBjYWxsYmFja193cml0ZXIubmV3bGluZSgicHVibGljOlxuIikKLSAgICAg
ICAgICAgIGNhbGxiYWNrX3dyaXRlci5uZXdsaW5lKCIgICAgIiArIGNhbGxiYWNrX25hbWUgKyAi
KFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4sIGludCBp
ZCk7XG4iKQotICAgICAgICAgICAgY2FsbGJhY2tfd3JpdGVyLm5ld2xpbmUoIiAgICB2b2lkIHNl
bmRTdWNjZXNzKCIgKyAiLCAiLmpvaW4oZGVjbF9wYXJhbWV0ZXJfbGlzdCkgKyAiKTtcbiIpCi0g
ICAgICAgICAgICBjYWxsYmFja193cml0ZXIubmV3bGluZSgifTtcbiIpCi0KLSAgICAgICAgICAg
IGFkX2hvY190eXBlX291dHB1dC5hcHBlbmQoY2FsbGJhY2tfb3V0cHV0KQotCi0gICAgICAgICAg
ICBtZXRob2RfZGlzcGF0Y2hfaGFuZGxpbmcuYXBwZW5kKCIgICAgUmVmUHRyPCVzOjolcz4gY2Fs
bGJhY2sgPSBhZG9wdFJlZihuZXcgJXM6OiVzKG1fYmFja2VuZERpc3BhdGNoZXIsY2FsbElkKSk7
XG4iICUgKGFnZW50X2ludGVyZmFjZV9uYW1lLCBjYWxsYmFja19uYW1lLCBhZ2VudF9pbnRlcmZh
Y2VfbmFtZSwgY2FsbGJhY2tfbmFtZSkpCi0gICAgICAgICAgICBtZXRob2RfZW5kaW5nX2hhbmRs
aW5nLmFwcGVuZCgiICAgIGlmIChlcnJvci5sZW5ndGgoKSkge1xuIikKLSAgICAgICAgICAgIG1l
dGhvZF9lbmRpbmdfaGFuZGxpbmcuYXBwZW5kKCIgICAgICAgIGNhbGxiYWNrLT5kaXNhYmxlKCk7
XG4iKQotICAgICAgICAgICAgbWV0aG9kX2VuZGluZ19oYW5kbGluZy5hcHBlbmQoIiAgICAgICAg
bV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElkLCBJbnNwZWN0
b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpO1xuIikK
LSAgICAgICAgICAgIG1ldGhvZF9lbmRpbmdfaGFuZGxpbmcuYXBwZW5kKCIgICAgICAgIHJldHVy
bjtcbiIpCi0gICAgICAgICAgICBtZXRob2RfZW5kaW5nX2hhbmRsaW5nLmFwcGVuZCgiICAgIH0i
KQotCi0gICAgICAgICAgICBhZ2VudF9jYWxsX3BhcmFtX2xpc3QuYXBwZW5kKCIsIGNhbGxiYWNr
IikKLSAgICAgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX2hhbmRsZXJfaW50ZXJmYWNlX2xpc3Qu
YXBwZW5kKCIsIFBhc3NSZWZQdHI8JXM+IGNhbGxiYWNrIiAlIGNhbGxiYWNrX25hbWUpCi0gICAg
ICAgIGVsaWYgInJldHVybnMiIGluIGpzb25fY29tbWFuZDoKLSAgICAgICAgICAgIGhhc19tdWx0
aXBsZV9yZXR1cm5zID0gbGVuKGpzb25fY29tbWFuZFsicmV0dXJucyJdKSA+IDEKLSAgICAgICAg
ICAgIGlmIGhhc19tdWx0aXBsZV9yZXR1cm5zOgotICAgICAgICAgICAgICAgIG1ldGhvZF9vdXRf
cGFyYW1zX2hhbmRsaW5nLmFwcGVuZCgiICAgIGlmICghZXJyb3IubGVuZ3RoKCkpIHtcbiIpCi0g
ICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIG1ldGhvZF9vdXRfcGFyYW1zX2hhbmRs
aW5nLmFwcGVuZCgiICAgIGlmICghZXJyb3IubGVuZ3RoKCkpXG4iKQotCi0gICAgICAgICAgICBm
b3IganNvbl9yZXR1cm4gaW4ganNvbl9jb21tYW5kWyJyZXR1cm5zIl06Ci0KLSAgICAgICAgICAg
ICAgICBqc29uX3JldHVybl9uYW1lID0ganNvbl9yZXR1cm5bIm5hbWUiXQotCi0gICAgICAgICAg
ICAgICAgb3B0aW9uYWwgPSBib29sKGpzb25fcmV0dXJuLmdldCgib3B0aW9uYWwiKSkKLQotICAg
ICAgICAgICAgICAgIHJldHVybl90eXBlX2JpbmRpbmcgPSBHZW5lcmF0b3IucmVzb2x2ZV90eXBl
X2FuZF9nZW5lcmF0ZV9hZF9ob2MoanNvbl9yZXR1cm4sIGpzb25fY29tbWFuZF9uYW1lLCBkb21h
aW5fbmFtZSwgYWRfaG9jX3R5cGVfd3JpdGVyLCBhZ2VudF9pbnRlcmZhY2VfbmFtZSArICI6OiIp
Ci0KLSAgICAgICAgICAgICAgICByYXdfdHlwZSA9IHJldHVybl90eXBlX2JpbmRpbmcucmVkdWNl
X3RvX3Jhd190eXBlKCkKLSAgICAgICAgICAgICAgICBzZXR0ZXJfdHlwZSA9IHJhd190eXBlLmdl
dF9zZXR0ZXJfbmFtZSgpCi0gICAgICAgICAgICAgICAgaW5pdGlhbGl6ZXIgPSByYXdfdHlwZS5n
ZXRfY19pbml0aWFsaXplcigpCi0KLSAgICAgICAgICAgICAgICB0eXBlX21vZGVsID0gcmV0dXJu
X3R5cGVfYmluZGluZy5nZXRfdHlwZV9tb2RlbCgpCi0gICAgICAgICAgICAgICAgaWYgb3B0aW9u
YWw6Ci0gICAgICAgICAgICAgICAgICAgIHR5cGVfbW9kZWwgPSB0eXBlX21vZGVsLmdldF9vcHRp
b25hbCgpCi0KLSAgICAgICAgICAgICAgICBjb2RlID0gIiAgICAlcyBvdXRfJXM7XG4iICUgKHR5
cGVfbW9kZWwuZ2V0X2NvbW1hbmRfcmV0dXJuX3Bhc3NfbW9kZWwoKS5nZXRfcmV0dXJuX3Zhcl90
eXBlKCksIGpzb25fcmV0dXJuX25hbWUpCi0gICAgICAgICAgICAgICAgcGFyYW0gPSAiLCAlc291
dF8lcyIgJSAodHlwZV9tb2RlbC5nZXRfY29tbWFuZF9yZXR1cm5fcGFzc19tb2RlbCgpLmdldF9v
dXRwdXRfYXJndW1lbnRfcHJlZml4KCksIGpzb25fcmV0dXJuX25hbWUpCi0gICAgICAgICAgICAg
ICAgdmFyX25hbWUgPSAib3V0XyVzIiAlIGpzb25fcmV0dXJuX25hbWUKLSAgICAgICAgICAgICAg
ICBzZXR0ZXJfYXJndW1lbnQgPSB0eXBlX21vZGVsLmdldF9jb21tYW5kX3JldHVybl9wYXNzX21v
ZGVsKCkuZ2V0X291dHB1dF90b19yYXdfZXhwcmVzc2lvbigpICUgdmFyX25hbWUKLSAgICAgICAg
ICAgICAgICBpZiByZXR1cm5fdHlwZV9iaW5kaW5nLmdldF9zZXR0ZXJfdmFsdWVfZXhwcmVzc2lv
bl9wYXR0ZXJuKCk6Ci0gICAgICAgICAgICAgICAgICAgIHNldHRlcl9hcmd1bWVudCA9IHJldHVy
bl90eXBlX2JpbmRpbmcuZ2V0X3NldHRlcl92YWx1ZV9leHByZXNzaW9uX3BhdHRlcm4oKSAlIChJ
TlNQRUNUT1JfVFlQRVNfR0VORVJBVE9SX0NPTkZJR19NQVBbb3V0cHV0X3R5cGVdWyJwcmVmaXgi
XSwgc2V0dGVyX2FyZ3VtZW50KQotCi0gICAgICAgICAgICAgICAgY29vayA9ICIgICAgICAgIHJl
c3VsdC0+c2V0JXMoQVNDSUlMaXRlcmFsKFwiJXNcIiksICVzKTtcbiIgJSAoc2V0dGVyX3R5cGUs
IGpzb25fcmV0dXJuX25hbWUsIHNldHRlcl9hcmd1bWVudCkKLQotICAgICAgICAgICAgICAgIHNl
dF9jb25kaXRpb25fcGF0dGVybiA9IHR5cGVfbW9kZWwuZ2V0X2NvbW1hbmRfcmV0dXJuX3Bhc3Nf
bW9kZWwoKS5nZXRfc2V0X3JldHVybl9jb25kaXRpb24oKQotICAgICAgICAgICAgICAgIGlmIHNl
dF9jb25kaXRpb25fcGF0dGVybjoKLSAgICAgICAgICAgICAgICAgICAgY29vayA9ICgiICAgICAg
ICBpZiAoJXMpXG4gICAgIiAlIChzZXRfY29uZGl0aW9uX3BhdHRlcm4gJSB2YXJfbmFtZSkpICsg
Y29vawotICAgICAgICAgICAgICAgIGFubm90YXRlZF90eXBlID0gdHlwZV9tb2RlbC5nZXRfY29t
bWFuZF9yZXR1cm5fcGFzc19tb2RlbCgpLmdldF9vdXRwdXRfcGFyYW1ldGVyX3R5cGUoKQotCi0g
ICAgICAgICAgICAgICAgcGFyYW1fbmFtZSA9ICJvdXRfJXMiICUganNvbl9yZXR1cm5fbmFtZQot
ICAgICAgICAgICAgICAgIGlmIG9wdGlvbmFsOgotICAgICAgICAgICAgICAgICAgICBwYXJhbV9u
YW1lID0gIm9wdF8iICsgcGFyYW1fbmFtZQotCi0gICAgICAgICAgICAgICAgR2VuZXJhdG9yLmJh
Y2tlbmRfaGFuZGxlcl9pbnRlcmZhY2VfbGlzdC5hcHBlbmQoIiwgJXMgJXMiICUgKGFubm90YXRl
ZF90eXBlLCBwYXJhbV9uYW1lKSkKLSAgICAgICAgICAgICAgICBtZXRob2Rfb3V0X3BhcmFtc19o
YW5kbGluZy5hcHBlbmQoY29vaykKLSAgICAgICAgICAgICAgICBtZXRob2RfZGlzcGF0Y2hfaGFu
ZGxpbmcuYXBwZW5kKGNvZGUpCi0KLSAgICAgICAgICAgICAgICBhZ2VudF9jYWxsX3BhcmFtX2xp
c3QuYXBwZW5kKHBhcmFtKQotCi0gICAgICAgICAgICBpZiBoYXNfbXVsdGlwbGVfcmV0dXJuczoK
LSAgICAgICAgICAgICAgICBtZXRob2Rfb3V0X3BhcmFtc19oYW5kbGluZy5hcHBlbmQoIiAgICB9
XG4iKQotICAgICAgICAgICAgbWV0aG9kX291dF9wYXJhbXNfaGFuZGxpbmcuYXBwZW5kKCJcbiIp
Ci0KLSAgICAgICAgbWV0aG9kX2Rpc3BhdGNoX2hhbmRsaW5nLmFwcGVuZCgiICAgIG1fYWdlbnQt
PiVzKCZlcnJvciVzKTtcbiIgJSAoanNvbl9jb21tYW5kX25hbWUsICIiLmpvaW4oYWdlbnRfY2Fs
bF9wYXJhbV9saXN0KSkpCi0gICAgICAgIG1ldGhvZF9kaXNwYXRjaF9oYW5kbGluZy5hcHBlbmQo
IlxuIikKLQotICAgICAgICBpZiBub3QgbWV0aG9kX2VuZGluZ19oYW5kbGluZzoKLSAgICAgICAg
ICAgIG1ldGhvZF9lbmRpbmdfaGFuZGxpbmcuYXBwZW5kKCIgICAgbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgZXJyb3IpOyIpCi0KLSAg
ICAgICAgYmFja2VuZF9qc19yZXBseV9wYXJhbV9saXN0ID0gW10KLSAgICAgICAgaWYgInJldHVy
bnMiIGluIGpzb25fY29tbWFuZDoKLSAgICAgICAgICAgIGZvciBqc29uX3JldHVybiBpbiBqc29u
X2NvbW1hbmRbInJldHVybnMiXToKLSAgICAgICAgICAgICAgICBqc29uX3JldHVybl9uYW1lID0g
anNvbl9yZXR1cm5bIm5hbWUiXQotICAgICAgICAgICAgICAgIGJhY2tlbmRfanNfcmVwbHlfcGFy
YW1fbGlzdC5hcHBlbmQoIlwiJXNcIiIgJSBqc29uX3JldHVybl9uYW1lKQotCi0gICAgICAgIGpz
X3JlcGx5X2xpc3QgPSAiWyVzXSIgJSAiLCAiLmpvaW4oYmFja2VuZF9qc19yZXBseV9wYXJhbV9s
aXN0KQotCi0gICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX21ldGhvZF9pbXBsZW1lbnRhdGlvbl9s
aXN0LmFwcGVuZChUZW1wbGF0ZXMuYmFja2VuZF9tZXRob2Quc3Vic3RpdHV0ZShOb25lLAotICAg
ICAgICAgICAgZGlzcGF0Y2hlck5hbWU9ZGlzcGF0Y2hlcl9uYW1lLAotICAgICAgICAgICAgbWV0
aG9kTmFtZT1qc29uX2NvbW1hbmRfbmFtZSwKLSAgICAgICAgICAgIHJlcXVlc3RNZXNzYWdlT2Jq
ZWN0PW1ldGhvZF9yZXF1ZXN0X21lc3NhZ2VfcGFyYW1fbmFtZSwKLSAgICAgICAgICAgIG1ldGhv
ZEluUGFyYW1ldGVyc0hhbmRsaW5nPSIiLmpvaW4obWV0aG9kX2luX3BhcmFtc19oYW5kbGluZyks
Ci0gICAgICAgICAgICBtZXRob2REaXNwYXRjaEhhbmRsaW5nPSIiLmpvaW4obWV0aG9kX2Rpc3Bh
dGNoX2hhbmRsaW5nKSwKLSAgICAgICAgICAgIG1ldGhvZE91dFBhcmFtZXRlcnNIYW5kbGluZz0i
Ii5qb2luKG1ldGhvZF9vdXRfcGFyYW1zX2hhbmRsaW5nKSwKLSAgICAgICAgICAgIG1ldGhvZEVu
ZGluZ0hhbmRsaW5nPSIiLmpvaW4obWV0aG9kX2VuZGluZ19oYW5kbGluZykpKQotCi0gICAgICAg
IEdlbmVyYXRvci5iYWNrZW5kX2pzX2RvbWFpbl9pbml0aWFsaXplcl9saXN0LmFwcGVuZCgiSW5z
cGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoXCIlcy4lc1wiLCBbJXNdLCAlcyk7XG4iICUg
KGRvbWFpbl9uYW1lLCBqc29uX2NvbW1hbmRfbmFtZSwganNfcGFyYW1ldGVyc190ZXh0LCBqc19y
ZXBseV9saXN0KSkKLSAgICAgICAgR2VuZXJhdG9yLmJhY2tlbmRfaGFuZGxlcl9pbnRlcmZhY2Vf
bGlzdC5hcHBlbmQoIikgPSAwO1xuIikKLQotICAgIGNsYXNzIENhbGxiYWNrTWV0aG9kU3RydWN0
VGVtcGxhdGU6Ci0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGFwcGVuZF9wcm9s
b2cobGluZV9saXN0KToKLSAgICAgICAgICAgIHBhc3MKLQotICAgICAgICBAc3RhdGljbWV0aG9k
Ci0gICAgICAgIGRlZiBhcHBlbmRfZXBpbG9nKGxpbmVfbGlzdCk6Ci0gICAgICAgICAgICBwYXNz
Ci0KLSAgICAgICAgY29udGFpbmVyX25hbWUgPSAianNvbk1lc3NhZ2UiCi0KLSAgICAjIEdlbmVy
YXRlcyBjb21tb24gY29kZSBmb3IgZXZlbnQgc2VuZGluZyBhbmQgY2FsbGJhY2sgcmVzcG9uc2Ug
ZGF0YSBzZW5kaW5nLgotICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgZ2VuZXJhdGVfc2VuZF9t
ZXRob2QocGFyYW1ldGVycywgZXZlbnRfbmFtZSwgZG9tYWluX25hbWUsIGFkX2hvY190eXBlX3dy
aXRlciwgZGVjbF9wYXJhbWV0ZXJfbGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bWV0aG9kX3N0cnVjdF90ZW1wbGF0ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2Vu
ZXJhdG9yX21ldGhvZF9saXN0LCBtZXRob2RfdGVtcGxhdGUsIHRlbXBsYXRlX3BhcmFtcyk6Ci0g
ICAgICAgIG1ldGhvZF9saW5lX2xpc3QgPSBbXQotICAgICAgICBpZiBwYXJhbWV0ZXJzOgotICAg
ICAgICAgICAgbWV0aG9kX3N0cnVjdF90ZW1wbGF0ZS5hcHBlbmRfcHJvbG9nKG1ldGhvZF9saW5l
X2xpc3QpCi0gICAgICAgICAgICBmb3IganNvbl9wYXJhbWV0ZXIgaW4gcGFyYW1ldGVyczoKLSAg
ICAgICAgICAgICAgICBwYXJhbWV0ZXJfbmFtZSA9IGpzb25fcGFyYW1ldGVyWyJuYW1lIl0KLQot
ICAgICAgICAgICAgICAgIHBhcmFtX3R5cGVfYmluZGluZyA9IEdlbmVyYXRvci5yZXNvbHZlX3R5
cGVfYW5kX2dlbmVyYXRlX2FkX2hvYyhqc29uX3BhcmFtZXRlciwgZXZlbnRfbmFtZSwgZG9tYWlu
X25hbWUsIGFkX2hvY190eXBlX3dyaXRlciwgIiIpCi0KLSAgICAgICAgICAgICAgICByYXdfdHlw
ZSA9IHBhcmFtX3R5cGVfYmluZGluZy5yZWR1Y2VfdG9fcmF3X3R5cGUoKQotICAgICAgICAgICAg
ICAgIHJhd190eXBlX2JpbmRpbmcgPSBSYXdUeXBlQmluZGluZyhyYXdfdHlwZSkKLQotICAgICAg
ICAgICAgICAgIG9wdGlvbmFsID0gYm9vbChqc29uX3BhcmFtZXRlci5nZXQoIm9wdGlvbmFsIikp
Ci0KLSAgICAgICAgICAgICAgICBzZXR0ZXJfdHlwZSA9IHJhd190eXBlLmdldF9zZXR0ZXJfbmFt
ZSgpCi0KLSAgICAgICAgICAgICAgICB0eXBlX21vZGVsID0gcGFyYW1fdHlwZV9iaW5kaW5nLmdl
dF90eXBlX21vZGVsKCkKLSAgICAgICAgICAgICAgICByYXdfdHlwZV9tb2RlbCA9IHJhd190eXBl
X2JpbmRpbmcuZ2V0X3R5cGVfbW9kZWwoKQotICAgICAgICAgICAgICAgIGlmIG9wdGlvbmFsOgot
ICAgICAgICAgICAgICAgICAgICB0eXBlX21vZGVsID0gdHlwZV9tb2RlbC5nZXRfb3B0aW9uYWwo
KQotICAgICAgICAgICAgICAgICAgICByYXdfdHlwZV9tb2RlbCA9IHJhd190eXBlX21vZGVsLmdl
dF9vcHRpb25hbCgpCi0KLSAgICAgICAgICAgICAgICBhbm5vdGF0ZWRfdHlwZSA9IHR5cGVfbW9k
ZWwuZ2V0X2lucHV0X3BhcmFtX3R5cGVfdGV4dCgpCi0gICAgICAgICAgICAgICAgbW9kZV90eXBl
X2JpbmRpbmcgPSBwYXJhbV90eXBlX2JpbmRpbmcKLQotICAgICAgICAgICAgICAgIGRlY2xfcGFy
YW1ldGVyX2xpc3QuYXBwZW5kKCIlcyAlcyIgJSAoYW5ub3RhdGVkX3R5cGUsIHBhcmFtZXRlcl9u
YW1lKSkKLQotICAgICAgICAgICAgICAgIHNldHRlcl9hcmd1bWVudCA9IHJhd190eXBlX21vZGVs
LmdldF9ldmVudF9zZXR0ZXJfZXhwcmVzc2lvbl9wYXR0ZXJuKCkgJSBwYXJhbWV0ZXJfbmFtZQot
ICAgICAgICAgICAgICAgIGlmIG1vZGVfdHlwZV9iaW5kaW5nLmdldF9zZXR0ZXJfdmFsdWVfZXhw
cmVzc2lvbl9wYXR0ZXJuKCk6Ci0gICAgICAgICAgICAgICAgICAgIHNldHRlcl9hcmd1bWVudCA9
IG1vZGVfdHlwZV9iaW5kaW5nLmdldF9zZXR0ZXJfdmFsdWVfZXhwcmVzc2lvbl9wYXR0ZXJuKCkg
JSAoSU5TUEVDVE9SX1RZUEVTX0dFTkVSQVRPUl9DT05GSUdfTUFQW291dHB1dF90eXBlXVsicHJl
Zml4Il0sIHNldHRlcl9hcmd1bWVudCkKLQotICAgICAgICAgICAgICAgIHNldHRlcl9jb2RlID0g
IiAgICAlcy0+c2V0JXMoQVNDSUlMaXRlcmFsKFwiJXNcIiksICVzKTtcbiIgJSAobWV0aG9kX3N0
cnVjdF90ZW1wbGF0ZS5jb250YWluZXJfbmFtZSwgc2V0dGVyX3R5cGUsIHBhcmFtZXRlcl9uYW1l
LCBzZXR0ZXJfYXJndW1lbnQpCi0gICAgICAgICAgICAgICAgaWYgb3B0aW9uYWw6Ci0gICAgICAg
ICAgICAgICAgICAgIHNldHRlcl9jb2RlID0gKCIgICAgaWYgKCVzKVxuICAgICIgJSBwYXJhbWV0
ZXJfbmFtZSkgKyBzZXR0ZXJfY29kZQotICAgICAgICAgICAgICAgIG1ldGhvZF9saW5lX2xpc3Qu
YXBwZW5kKHNldHRlcl9jb2RlKQotCi0gICAgICAgICAgICBtZXRob2Rfc3RydWN0X3RlbXBsYXRl
LmFwcGVuZF9lcGlsb2cobWV0aG9kX2xpbmVfbGlzdCkKLQotICAgICAgICBnZW5lcmF0b3JfbWV0
aG9kX2xpc3QuYXBwZW5kKG1ldGhvZF90ZW1wbGF0ZS5zdWJzdGl0dXRlKE5vbmUsCi0gICAgICAg
ICAgICBkb21haW5OYW1lPWRvbWFpbl9uYW1lLAotICAgICAgICAgICAgcGFyYW1ldGVycz0iLCAi
LmpvaW4oZGVjbF9wYXJhbWV0ZXJfbGlzdCksCi0gICAgICAgICAgICBjb2RlPSIiLmpvaW4obWV0
aG9kX2xpbmVfbGlzdCksICoqdGVtcGxhdGVfcGFyYW1zKSkKLQotICAgIEBzdGF0aWNtZXRob2QK
LSAgICBkZWYgcmVzb2x2ZV90eXBlX2FuZF9nZW5lcmF0ZV9hZF9ob2MoanNvbl9wYXJhbSwgbWV0
aG9kX25hbWUsIGRvbWFpbl9uYW1lLCBhZF9ob2NfdHlwZV93cml0ZXIsIGNvbnRhaW5lcl9yZWxh
dGl2ZV9uYW1lX3ByZWZpeF9wYXJhbSk6Ci0gICAgICAgIHBhcmFtX25hbWUgPSBqc29uX3BhcmFt
WyJuYW1lIl0KLSAgICAgICAgYWRfaG9jX3R5cGVfbGlzdCA9IFtdCi0KLSAgICAgICAgY2xhc3Mg
QWRIb2NUeXBlQ29udGV4dDoKLSAgICAgICAgICAgIGNvbnRhaW5lcl9mdWxsX25hbWVfcHJlZml4
ID0gIjxub3QgeWV0IGRlZmluZWQ+IgotICAgICAgICAgICAgY29udGFpbmVyX3JlbGF0aXZlX25h
bWVfcHJlZml4ID0gY29udGFpbmVyX3JlbGF0aXZlX25hbWVfcHJlZml4X3BhcmFtCi0KLSAgICAg
ICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgIGRlZiBnZXRfdHlwZV9uYW1lX2ZpeCgp
OgotICAgICAgICAgICAgICAgIGNsYXNzIE5hbWVGaXg6Ci0gICAgICAgICAgICAgICAgICAgIGNs
YXNzX25hbWUgPSBDYXBpdGFsaXplci5sb3dlcl9jYW1lbF9jYXNlX3RvX3VwcGVyKHBhcmFtX25h
bWUpCi0KLSAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgICAg
ICAgICBkZWYgb3V0cHV0X2NvbW1lbnQod3JpdGVyKToKLSAgICAgICAgICAgICAgICAgICAgICAg
IHdyaXRlci5uZXdsaW5lKCIvLyBOYW1lZCBhZnRlciBwYXJhbWV0ZXIgJyVzJyB3aGlsZSBnZW5l
cmF0aW5nIGNvbW1hbmQvZXZlbnQgJXMuXG4iICUgKHBhcmFtX25hbWUsIG1ldGhvZF9uYW1lKSkK
LQotICAgICAgICAgICAgICAgIHJldHVybiBOYW1lRml4Ci0KLSAgICAgICAgICAgIEBzdGF0aWNt
ZXRob2QKLSAgICAgICAgICAgIGRlZiBhZGRfdHlwZShiaW5kaW5nKToKLSAgICAgICAgICAgICAg
ICBhZF9ob2NfdHlwZV9saXN0LmFwcGVuZChiaW5kaW5nKQotCi0gICAgICAgIHR5cGVfYmluZGlu
ZyA9IHJlc29sdmVfcGFyYW1fdHlwZShqc29uX3BhcmFtLCBkb21haW5fbmFtZSwgQWRIb2NUeXBl
Q29udGV4dCkKLQotICAgICAgICBjbGFzcyBJbnRlcmZhY2VGb3J3YXJkTGlzdGVuZXI6Ci0gICAg
ICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICBkZWYgYWRkX3R5cGVfZGF0YSh0eXBl
X2RhdGEpOgotICAgICAgICAgICAgICAgIHBhc3MKLQotICAgICAgICBjbGFzcyBJbnRlcmZhY2VS
ZXNvbHZlQ29udGV4dDoKLSAgICAgICAgICAgIGZvcndhcmRfbGlzdGVuZXIgPSBJbnRlcmZhY2VG
b3J3YXJkTGlzdGVuZXIKLQotICAgICAgICBmb3IgdHlwZSBpbiBhZF9ob2NfdHlwZV9saXN0Ogot
ICAgICAgICAgICAgdHlwZS5yZXNvbHZlX2lubmVyKEludGVyZmFjZVJlc29sdmVDb250ZXh0KQot
Ci0gICAgICAgIGNsYXNzIEludGVyZmFjZUdlbmVyYXRlQ29udGV4dDoKLSAgICAgICAgICAgIHZh
bGlkYXRvcl93cml0ZXIgPSAibm90IHN1cHBvcnRlZCBpbiBJbnRlcmZhY2VHZW5lcmF0ZUNvbnRl
eHQiCi0gICAgICAgICAgICBjcHBfd3JpdGVyID0gdmFsaWRhdG9yX3dyaXRlcgotCi0gICAgICAg
IGZvciB0eXBlIGluIGFkX2hvY190eXBlX2xpc3Q6Ci0gICAgICAgICAgICBnZW5lcmF0b3IgPSB0
eXBlLmdldF9jb2RlX2dlbmVyYXRvcigpCi0gICAgICAgICAgICBpZiBnZW5lcmF0b3I6Ci0gICAg
ICAgICAgICAgICAgZ2VuZXJhdG9yLmdlbmVyYXRlX3R5cGVfYnVpbGRlcihhZF9ob2NfdHlwZV93
cml0ZXIsIEludGVyZmFjZUdlbmVyYXRlQ29udGV4dCkKLQotICAgICAgICByZXR1cm4gdHlwZV9i
aW5kaW5nCi0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIHByb2Nlc3NfdHlwZXModHlwZV9t
YXApOgotICAgICAgICBvdXRwdXQgPSBHZW5lcmF0b3IudHlwZV9idWlsZGVyX2ZyYWdtZW50cwot
Ci0gICAgICAgIGNsYXNzIEdlbmVyYXRlQ29udGV4dDoKLSAgICAgICAgICAgIHZhbGlkYXRvcl93
cml0ZXIgPSBXcml0ZXIoR2VuZXJhdG9yLnZhbGlkYXRvcl9pbXBsX2xpc3QsICIiKQotICAgICAg
ICAgICAgY3BwX3dyaXRlciA9IFdyaXRlcihHZW5lcmF0b3IudHlwZV9idWlsZGVyX2ltcGxfbGlz
dCwgIiIpCi0KLSAgICAgICAgZGVmIGdlbmVyYXRlX2FsbF9kb21haW5zX2NvZGUob3V0LCB0eXBl
X2RhdGFfY2FsbGJhY2spOgotICAgICAgICAgICAgd3JpdGVyID0gV3JpdGVyKG91dCwgIiIpCi0g
ICAgICAgICAgICBmb3IgZG9tYWluX2RhdGEgaW4gdHlwZV9tYXAuZG9tYWluc190b19nZW5lcmF0
ZSgpOgotICAgICAgICAgICAgICAgIGRvbWFpbl9maXhlcyA9IERvbWFpbk5hbWVGaXhlcy5nZXRf
Zml4ZWRfZGF0YShkb21haW5fZGF0YS5uYW1lKCkpCi0gICAgICAgICAgICAgICAgZG9tYWluX2d1
YXJkID0gZG9tYWluX2ZpeGVzLmdldF9ndWFyZCgpCi0KLSAgICAgICAgICAgICAgICBuYW1lc3Bh
Y2VfZGVjbGFyZWQgPSBbXQotCi0gICAgICAgICAgICAgICAgZGVmIG5hbWVzcGFjZV9sYXp5X2dl
bmVyYXRvcigpOgotICAgICAgICAgICAgICAgICAgICBpZiBub3QgbmFtZXNwYWNlX2RlY2xhcmVk
OgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgZG9tYWluX2d1YXJkOgotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGRvbWFpbl9ndWFyZC5nZW5lcmF0ZV9vcGVuKG91dCkKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCJuYW1lc3BhY2UgIikKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHdyaXRlci5hcHBlbmQoZG9tYWluX2RhdGEubmFtZSgpKQotICAgICAgICAg
ICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVuZCgiIHtcbiIpCi0gICAgICAgICAgICAgICAgICAg
ICAgICAjIFdoYXQgaXMgYSBiZXR0ZXIgd2F5IHRvIGNoYW5nZSB2YWx1ZSBmcm9tIG91dGVyIHNj
b3BlPwotICAgICAgICAgICAgICAgICAgICAgICAgbmFtZXNwYWNlX2RlY2xhcmVkLmFwcGVuZChU
cnVlKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gd3JpdGVyCi0KLSAgICAgICAgICAgICAg
ICBmb3IgdHlwZV9kYXRhIGluIGRvbWFpbl9kYXRhLnR5cGVzKCk6Ci0gICAgICAgICAgICAgICAg
ICAgIHR5cGVfZGF0YV9jYWxsYmFjayh0eXBlX2RhdGEsIG5hbWVzcGFjZV9sYXp5X2dlbmVyYXRv
cikKLQotICAgICAgICAgICAgICAgIGlmIG5hbWVzcGFjZV9kZWNsYXJlZDoKLSAgICAgICAgICAg
ICAgICAgICAgd3JpdGVyLmFwcGVuZCgifSAvLyAiKQotICAgICAgICAgICAgICAgICAgICB3cml0
ZXIuYXBwZW5kKGRvbWFpbl9kYXRhLm5hbWUoKSkKLSAgICAgICAgICAgICAgICAgICAgd3JpdGVy
LmFwcGVuZCgiXG5cbiIpCi0KLSAgICAgICAgICAgICAgICAgICAgaWYgZG9tYWluX2d1YXJkOgot
ICAgICAgICAgICAgICAgICAgICAgICAgZG9tYWluX2d1YXJkLmdlbmVyYXRlX2Nsb3NlKG91dCkK
LQotICAgICAgICBkZWYgY3JlYXRlX3R5cGVfYnVpbGRlcl9jYWxsZXIoZ2VuZXJhdGVfcGFzc19p
ZCk6Ci0gICAgICAgICAgICBkZWYgY2FsbF90eXBlX2J1aWxkZXIodHlwZV9kYXRhLCB3cml0ZXJf
Z2V0dGVyKToKLSAgICAgICAgICAgICAgICBjb2RlX2dlbmVyYXRvciA9IHR5cGVfZGF0YS5nZXRf
YmluZGluZygpLmdldF9jb2RlX2dlbmVyYXRvcigpCi0gICAgICAgICAgICAgICAgaWYgY29kZV9n
ZW5lcmF0b3IgYW5kIGdlbmVyYXRlX3Bhc3NfaWQgPT0gY29kZV9nZW5lcmF0b3IuZ2V0X2dlbmVy
YXRlX3Bhc3NfaWQoKToKLSAgICAgICAgICAgICAgICAgICAgd3JpdGVyID0gd3JpdGVyX2dldHRl
cigpCi0KLSAgICAgICAgICAgICAgICAgICAgY29kZV9nZW5lcmF0b3IuZ2VuZXJhdGVfdHlwZV9i
dWlsZGVyKHdyaXRlciwgR2VuZXJhdGVDb250ZXh0KQotICAgICAgICAgICAgcmV0dXJuIGNhbGxf
dHlwZV9idWlsZGVyCi0KLSAgICAgICAgZ2VuZXJhdGVfYWxsX2RvbWFpbnNfY29kZShvdXRwdXQs
IGNyZWF0ZV90eXBlX2J1aWxkZXJfY2FsbGVyKFR5cGVCdWlsZGVyUGFzcy5NQUlOKSkKLQotICAg
ICAgICBHZW5lcmF0b3IudHlwZV9idWlsZGVyX2ZvcndhcmRzLmFwcGVuZCgiLy8gRm9yd2FyZCBk
ZWNsYXJhdGlvbnMuXG4iKQotCi0gICAgICAgIGRlZiBnZW5lcmF0ZV9mb3J3YXJkX2NhbGxiYWNr
KHR5cGVfZGF0YSwgd3JpdGVyX2dldHRlcik6Ci0gICAgICAgICAgICBpZiB0eXBlX2RhdGEgaW4g
Z2xvYmFsX2ZvcndhcmRfbGlzdGVuZXIudHlwZV9kYXRhX3NldDoKLSAgICAgICAgICAgICAgICBi
aW5kaW5nID0gdHlwZV9kYXRhLmdldF9iaW5kaW5nKCkKLSAgICAgICAgICAgICAgICBiaW5kaW5n
LmdldF9jb2RlX2dlbmVyYXRvcigpLmdlbmVyYXRlX2ZvcndhcmRfZGVjbGFyYXRpb24od3JpdGVy
X2dldHRlcigpKQotICAgICAgICBnZW5lcmF0ZV9hbGxfZG9tYWluc19jb2RlKEdlbmVyYXRvci50
eXBlX2J1aWxkZXJfZm9yd2FyZHMsIGdlbmVyYXRlX2ZvcndhcmRfY2FsbGJhY2spCi0KLSAgICAg
ICAgR2VuZXJhdG9yLnR5cGVfYnVpbGRlcl9mb3J3YXJkcy5hcHBlbmQoIi8vIEVuZCBvZiBmb3J3
YXJkIGRlY2xhcmF0aW9ucy5cblxuIikKLQotICAgICAgICBHZW5lcmF0b3IudHlwZV9idWlsZGVy
X2ZvcndhcmRzLmFwcGVuZCgiLy8gVHlwZWRlZnMuXG4iKQotCi0gICAgICAgIGdlbmVyYXRlX2Fs
bF9kb21haW5zX2NvZGUoR2VuZXJhdG9yLnR5cGVfYnVpbGRlcl9mb3J3YXJkcywgY3JlYXRlX3R5
cGVfYnVpbGRlcl9jYWxsZXIoVHlwZUJ1aWxkZXJQYXNzLlRZUEVERUYpKQotCi0gICAgICAgIEdl
bmVyYXRvci50eXBlX2J1aWxkZXJfZm9yd2FyZHMuYXBwZW5kKCIvLyBFbmQgb2YgdHlwZWRlZnMu
XG5cbiIpCi0KLQotZGVmIGZsYXR0ZW5fbGlzdChpbnB1dCk6Ci0gICAgcmVzID0gW10KLQotICAg
IGRlZiBmaWxsX3JlY3Vyc2l2ZShsKToKLSAgICAgICAgZm9yIGl0ZW0gaW4gbDoKLSAgICAgICAg
ICAgIGlmIGlzaW5zdGFuY2UoaXRlbSwgbGlzdCk6Ci0gICAgICAgICAgICAgICAgZmlsbF9yZWN1
cnNpdmUoaXRlbSkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmVzLmFwcGVu
ZChpdGVtKQotICAgIGZpbGxfcmVjdXJzaXZlKGlucHV0KQotICAgIHJldHVybiByZXMKLQotCi0j
IEEgd3JpdGVyIHRoYXQgb25seSB1cGRhdGVzIGZpbGUgaWYgaXQgYWN0dWFsbHkgY2hhbmdlZCB0
byBiZXR0ZXIgc3VwcG9ydCBpbmNyZW1lbnRhbCBidWlsZC4KLWNsYXNzIFNtYXJ0T3V0cHV0Ogot
ICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlX25hbWUpOgotICAgICAgICBzZWxmLmZpbGVfbmFt
ZV8gPSBmaWxlX25hbWUKLSAgICAgICAgc2VsZi5vdXRwdXRfID0gIiIKLQotICAgIGRlZiB3cml0
ZShzZWxmLCB0ZXh0KToKLSAgICAgICAgc2VsZi5vdXRwdXRfICs9IHRleHQKLQotICAgIGRlZiBj
bG9zZShzZWxmKToKLSAgICAgICAgdGV4dF9jaGFuZ2VkID0gVHJ1ZQotICAgICAgICBzZWxmLm91
dHB1dF8gPSBzZWxmLm91dHB1dF8ucnN0cmlwKCkgKyAiXG4iCi0KLSAgICAgICAgdHJ5OgotICAg
ICAgICAgICAgcmVhZF9maWxlID0gb3BlbihzZWxmLmZpbGVfbmFtZV8sICJyIikKLSAgICAgICAg
ICAgIG9sZF90ZXh0ID0gcmVhZF9maWxlLnJlYWQoKQotICAgICAgICAgICAgcmVhZF9maWxlLmNs
b3NlKCkKLSAgICAgICAgICAgIHRleHRfY2hhbmdlZCA9IG9sZF90ZXh0ICE9IHNlbGYub3V0cHV0
XwotICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICAjIElnbm9yZSwganVzdCBvdmVyd3JpdGUg
YnkgZGVmYXVsdAotICAgICAgICAgICAgcGFzcwotCi0gICAgICAgIGlmIHRleHRfY2hhbmdlZCBv
ciB3cml0ZV9hbHdheXM6Ci0gICAgICAgICAgICBvdXRfZmlsZSA9IG9wZW4oc2VsZi5maWxlX25h
bWVfLCAidyIpCi0gICAgICAgICAgICBvdXRfZmlsZS53cml0ZShzZWxmLm91dHB1dF8pCi0gICAg
ICAgICAgICBvdXRfZmlsZS5jbG9zZSgpCi0KLQotR2VuZXJhdG9yLmdvKCkKLQotb3V0cHV0X2Zp
bGVfbmFtZV9wcmVmaXggPSBJTlNQRUNUT1JfVFlQRVNfR0VORVJBVE9SX0NPTkZJR19NQVBbb3V0
cHV0X3R5cGVdWyJwcmVmaXgiXQotCi1iYWNrZW5kX2hfZmlsZSA9IFNtYXJ0T3V0cHV0KG91dHB1
dF9oZWFkZXJfZGlybmFtZSArICgiL0luc3BlY3RvciVzQmFja2VuZERpc3BhdGNoZXJzLmgiICUg
b3V0cHV0X2ZpbGVfbmFtZV9wcmVmaXgpKQotYmFja2VuZF9jcHBfZmlsZSA9IFNtYXJ0T3V0cHV0
KG91dHB1dF9jcHBfZGlybmFtZSArICgiL0luc3BlY3RvciVzQmFja2VuZERpc3BhdGNoZXJzLmNw
cCIgJSBvdXRwdXRfZmlsZV9uYW1lX3ByZWZpeCkpCi0KLWZyb250ZW5kX2hfZmlsZSA9IFNtYXJ0
T3V0cHV0KG91dHB1dF9oZWFkZXJfZGlybmFtZSArICgiL0luc3BlY3RvciVzRnJvbnRlbmREaXNw
YXRjaGVycy5oIiAlIG91dHB1dF9maWxlX25hbWVfcHJlZml4KSkKLWZyb250ZW5kX2NwcF9maWxl
ID0gU21hcnRPdXRwdXQob3V0cHV0X2NwcF9kaXJuYW1lICsgKCIvSW5zcGVjdG9yJXNGcm9udGVu
ZERpc3BhdGNoZXJzLmNwcCIgJSBvdXRwdXRfZmlsZV9uYW1lX3ByZWZpeCkpCi0KLXR5cGVidWls
ZGVyX2hfZmlsZSA9IFNtYXJ0T3V0cHV0KG91dHB1dF9oZWFkZXJfZGlybmFtZSArICgiL0luc3Bl
Y3RvciVzVHlwZUJ1aWxkZXJzLmgiICUgb3V0cHV0X2ZpbGVfbmFtZV9wcmVmaXgpKQotdHlwZWJ1
aWxkZXJfY3BwX2ZpbGUgPSBTbWFydE91dHB1dChvdXRwdXRfY3BwX2Rpcm5hbWUgKyAoIi9JbnNw
ZWN0b3Ilc1R5cGVCdWlsZGVycy5jcHAiICUgb3V0cHV0X2ZpbGVfbmFtZV9wcmVmaXgpKQotCi1i
YWNrZW5kX2pzX2ZpbGUgPSBTbWFydE91dHB1dChvdXRwdXRfanNfZGlybmFtZSArICgiL0luc3Bl
Y3RvciVzQmFja2VuZENvbW1hbmRzLmpzIiAlIG91dHB1dF9maWxlX25hbWVfcHJlZml4KSkKLQot
Ci1iYWNrZW5kX2hfZmlsZS53cml0ZShUZW1wbGF0ZXMuYmFja2VuZF9oLnN1YnN0aXR1dGUoTm9u
ZSwKLSAgICBvdXRwdXRGaWxlTmFtZVByZWZpeD1vdXRwdXRfZmlsZV9uYW1lX3ByZWZpeCwKLSAg
ICBoYW5kbGVySW50ZXJmYWNlcz0iIi5qb2luKGZsYXR0ZW5fbGlzdChHZW5lcmF0b3IuYmFja2Vu
ZF9oYW5kbGVyX2ludGVyZmFjZV9saXN0KSksCi0gICAgZGlzcGF0Y2hlckludGVyZmFjZXM9IiIu
am9pbihmbGF0dGVuX2xpc3QoR2VuZXJhdG9yLmJhY2tlbmRfZGlzcGF0Y2hlcl9pbnRlcmZhY2Vf
bGlzdCkpKSkKLQotYmFja2VuZF9jcHBfZmlsZS53cml0ZShUZW1wbGF0ZXMuYmFja2VuZF9jcHAu
c3Vic3RpdHV0ZShOb25lLAotICAgIG91dHB1dEZpbGVOYW1lUHJlZml4PW91dHB1dF9maWxlX25h
bWVfcHJlZml4LAotICAgIGhhbmRsZXJJbXBsZW1lbnRhdGlvbnM9IiIuam9pbihmbGF0dGVuX2xp
c3QoR2VuZXJhdG9yLmJhY2tlbmRfaGFuZGxlcl9pbXBsZW1lbnRhdGlvbl9saXN0KSksCi0gICAg
bWV0aG9kcz0iXG4iLmpvaW4oR2VuZXJhdG9yLmJhY2tlbmRfbWV0aG9kX2ltcGxlbWVudGF0aW9u
X2xpc3QpKSkKLQotZnJvbnRlbmRfaF9maWxlLndyaXRlKFRlbXBsYXRlcy5mcm9udGVuZF9oLnN1
YnN0aXR1dGUoTm9uZSwKLSAgICBvdXRwdXRGaWxlTmFtZVByZWZpeD1vdXRwdXRfZmlsZV9uYW1l
X3ByZWZpeCwKLSAgICBkb21haW5DbGFzc0xpc3Q9IiIuam9pbihHZW5lcmF0b3IuZnJvbnRlbmRf
ZG9tYWluX2NsYXNzX2xpbmVzKSkpCi0KLWZyb250ZW5kX2NwcF9maWxlLndyaXRlKFRlbXBsYXRl
cy5mcm9udGVuZF9jcHAuc3Vic3RpdHV0ZShOb25lLAotICAgIG91dHB1dEZpbGVOYW1lUHJlZml4
PW91dHB1dF9maWxlX25hbWVfcHJlZml4LAotICAgIG1ldGhvZHM9IlxuIi5qb2luKEdlbmVyYXRv
ci5mcm9udGVuZF9tZXRob2RfbGlzdCkpKQotCi10eXBlYnVpbGRlcl9oX2ZpbGUud3JpdGUoVGVt
cGxhdGVzLnR5cGVidWlsZGVyX2guc3Vic3RpdHV0ZShOb25lLAotICAgIG91dHB1dEZpbGVOYW1l
UHJlZml4PW91dHB1dF9maWxlX25hbWVfcHJlZml4LAotICAgIHR5cGVCdWlsZGVyRGVwZW5kZW5j
aWVzPUlOU1BFQ1RPUl9UWVBFU19HRU5FUkFUT1JfQ09ORklHX01BUFtvdXRwdXRfdHlwZV1bInR5
cGVidWlsZGVyX2RlcGVuZGVuY3kiXSwKLSAgICBleHBvcnRNYWNybz1JTlNQRUNUT1JfVFlQRVNf
R0VORVJBVE9SX0NPTkZJR19NQVBbb3V0cHV0X3R5cGVdWyJleHBvcnRfbWFjcm8iXSwKLSAgICB0
eXBlQnVpbGRlcnM9IiIuam9pbihmbGF0dGVuX2xpc3QoR2VuZXJhdG9yLnR5cGVfYnVpbGRlcl9m
cmFnbWVudHMpKSwKLSAgICBmb3J3YXJkcz0iIi5qb2luKEdlbmVyYXRvci50eXBlX2J1aWxkZXJf
Zm9yd2FyZHMpLAotICAgIHZhbGlkYXRvcklmZGVmTmFtZT1WQUxJREFUT1JfSUZERUZfTkFNRSkp
Ci0KLXR5cGVidWlsZGVyX2NwcF9maWxlLndyaXRlKFRlbXBsYXRlcy50eXBlYnVpbGRlcl9jcHAu
c3Vic3RpdHV0ZShOb25lLAotICAgIG91dHB1dEZpbGVOYW1lUHJlZml4PW91dHB1dF9maWxlX25h
bWVfcHJlZml4LAotICAgIGVudW1Db25zdGFudFZhbHVlcz1FbnVtQ29uc3RhbnRzLmdldF9lbnVt
X2NvbnN0YW50X2NvZGUoKSwKLSAgICBpbXBsQ29kZT0iIi5qb2luKGZsYXR0ZW5fbGlzdChHZW5l
cmF0b3IudHlwZV9idWlsZGVyX2ltcGxfbGlzdCkpLAotICAgIHZhbGlkYXRvckNvZGU9IiIuam9p
bihmbGF0dGVuX2xpc3QoR2VuZXJhdG9yLnZhbGlkYXRvcl9pbXBsX2xpc3QpKSwKLSAgICB2YWxp
ZGF0b3JJZmRlZk5hbWU9VkFMSURBVE9SX0lGREVGX05BTUUpKQotCi1iYWNrZW5kX2pzX2ZpbGUu
d3JpdGUoVGVtcGxhdGVzLmJhY2tlbmRfanMuc3Vic3RpdHV0ZShOb25lLAotICAgIGRvbWFpbklu
aXRpYWxpemVycz0iIi5qb2luKEdlbmVyYXRvci5iYWNrZW5kX2pzX2RvbWFpbl9pbml0aWFsaXpl
cl9saXN0KSkpCi0KLWJhY2tlbmRfaF9maWxlLmNsb3NlKCkKLWJhY2tlbmRfY3BwX2ZpbGUuY2xv
c2UoKQotCi1mcm9udGVuZF9oX2ZpbGUuY2xvc2UoKQotZnJvbnRlbmRfY3BwX2ZpbGUuY2xvc2Uo
KQotCi10eXBlYnVpbGRlcl9oX2ZpbGUuY2xvc2UoKQotdHlwZWJ1aWxkZXJfY3BwX2ZpbGUuY2xv
c2UoKQotCi1iYWNrZW5kX2pzX2ZpbGUuY2xvc2UoKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vX19pbml0X18ucHkgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9fX2luaXRfXy5weQpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4wYjc2MTE4Y2U1ZWUyOWY4NGNkNTUwZTk4NDIxODBhNGViMzQ5NzNhCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVn
ZW4vX19pbml0X18ucHkKQEAgLTAsMCArMSwxMiBAQAorIyBSZXF1aXJlZCBmb3IgUHl0aG9uIHRv
IHNlYXJjaCB0aGlzIGRpcmVjdG9yeSBmb3IgbW9kdWxlIGZpbGVzCisKK2Zyb20gbW9kZWxzIGlt
cG9ydCAqCitmcm9tIGdlbmVyYXRvciBpbXBvcnQgKgorCitmcm9tIGdlbmVyYXRlX2JhY2tlbmRf
Y29tbWFuZHMgaW1wb3J0ICoKK2Zyb20gZ2VuZXJhdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRl
ciBpbXBvcnQgKgorZnJvbSBnZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRp
b24gaW1wb3J0ICoKK2Zyb20gZ2VuZXJhdGVfZnJvbnRlbmRfZGlzcGF0Y2hlcl9oZWFkZXIgaW1w
b3J0ICoKK2Zyb20gZ2VuZXJhdGVfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbiBp
bXBvcnQgKgorZnJvbSBnZW5lcmF0ZV90eXBlX2J1aWxkZXJfaGVhZGVyIGltcG9ydCAqCitmcm9t
IGdlbmVyYXRlX3R5cGVfYnVpbGRlcl9pbXBsZW1lbnRhdGlvbiBpbXBvcnQgKgpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJh
dGVfYmFja2VuZF9jb21tYW5kcy5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2JhY2tlbmRfY29tbWFuZHMucHkKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
N2QyZDU3MTVmNzVlNzFjZDJjYTVkMDZiMjJlYTRjNGEzMzRhYjQ2NAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVy
YXRlX2JhY2tlbmRfY29tbWFuZHMucHkKQEAgLTAsMCArMSwxMzMgQEAKKyMhL3Vzci9iaW4vZW52
IHB5dGhvbgorIyBDb3B5cmlnaHQgKGMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorIyBDb3B5cmlnaHQgKGMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6
CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
IyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisjIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KworCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG9zLnBhdGgKK2ltcG9ydCBzdHJpbmcKKworZnJv
bSBnZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvciwgdWNmaXJzdAorZnJvbSBzdHJpbmcgaW1wb3J0
IFRlbXBsYXRlCitmcm9tIGdlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IEdlbmVyYXRvclRlbXBs
YXRlcyBhcyBUZW1wbGF0ZXMKK2Zyb20gbW9kZWxzIGltcG9ydCBFbnVtVHlwZQorCisjIFVzZSBh
IGdsb2JhbCBsb2dnZXIsIHdoaWNoIG5vcm1hbGx5IG9ubHkgbG9ncyBlcnJvcnMuCisjIEl0IGNh
biBiZSBjb25maWd1cmVkIHRvIGxvZyBkZWJ1ZyBtZXNzYWdlcyBmcm9tIHRoZSBDTEkuCitsb2dn
aW5nLmJhc2ljQ29uZmlnKGZvcm1hdD0nJShsZXZlbG5hbWUpczogJShtZXNzYWdlKXMnLCBsZXZl
bD1sb2dnaW5nLkVSUk9SKQorbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2JhbCcpCisKKwor
Y2xhc3MgQmFja2VuZENvbW1hbmRzR2VuZXJhdG9yKEdlbmVyYXRvcik6CisgICAgZGVmIF9faW5p
dF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0aCk6CisgICAgICAgIHNlbGYuX21vZGVsID0g
bW9kZWwKKyAgICAgICAgc2VsZi5faW5wdXRfZmlsZXBhdGggPSBpbnB1dF9maWxlcGF0aAorCisg
ICAgZGVmIG1vZGVsKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fbW9kZWwKKworICAgIGRl
ZiBvdXRwdXRfZmlsZW5hbWUoc2VsZik6CisgICAgICAgIHJldHVybiAiSW5zcGVjdG9yJXNCYWNr
ZW5kQ29tbWFuZHMuanMiICUgc2VsZi5tb2RlbCgpLmZyYW1ld29yay5zZXR0aW5nKCdwcmVmaXgn
KQorCisgICAgZGVmIGdlbmVyYXRlX2xpY2Vuc2Uoc2VsZik6CisgICAgICAgIHJldHVybiBUZW1w
bGF0ZShUZW1wbGF0ZXMuQ29weXJpZ2h0QmxvY2spLnN1YnN0aXR1dGUoTm9uZSwgaW5wdXRGaWxl
bmFtZT1vcy5wYXRoLmJhc2VuYW1lKHNlbGYuX2lucHV0X2ZpbGVwYXRoKSkKKworICAgIGRlZiBn
ZW5lcmF0ZV9vdXRwdXQoc2VsZik6CisgICAgICAgIGRvbWFpbnNfdG9fZ2VuZXJhdGUgPSBbXQor
ICAgICAgICBmb3IgX2RvbWFpbiBpbiBzZWxmLm1vZGVsKCkuZG9tYWluczoKKyAgICAgICAgICAg
IGVudW1fdHlwZXMgPSBmaWx0ZXIobGFtYmRhIGRlY2xhcmF0aW9uOiBpc2luc3RhbmNlKGRlY2xh
cmF0aW9uLnR5cGUsIEVudW1UeXBlKSwgX2RvbWFpbi50eXBlX2RlY2xhcmF0aW9ucykKKyAgICAg
ICAgICAgIGlmIF9kb21haW4uaXNfc3VwcGxlbWVudGFsOgorICAgICAgICAgICAgICAgIGNvbnRp
bnVlCisgICAgICAgICAgICBlbGlmIGxlbihfZG9tYWluLmNvbW1hbmRzKSA9PSAwIGFuZCBsZW4o
X2RvbWFpbi5ldmVudHMpID09IDAgYW5kIGxlbihlbnVtX3R5cGVzKSA9PSAwOgorICAgICAgICAg
ICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGRvbWFpbnNfdG9fZ2VuZXJhdGUuYXBwZW5k
KF9kb21haW4pCisKKyAgICAgICAgc2VjdGlvbnMgPSBbXQorICAgICAgICBzZWN0aW9ucy5hcHBl
bmQoc2VsZi5nZW5lcmF0ZV9saWNlbnNlKCkpCisgICAgICAgIHNlY3Rpb25zLmV4dGVuZChbc2Vs
Zi5nZW5lcmF0ZV9kb21haW4oZG9tYWluKSBmb3IgZG9tYWluIGluIGRvbWFpbnNfdG9fZ2VuZXJh
dGVdKQorICAgICAgICByZXR1cm4gIlxuXG4iLmpvaW4oc2VjdGlvbnMpCisKKyAgICBkZWYgZ2Vu
ZXJhdGVfZG9tYWluKHNlbGYsIGRvbWFpbik6CisgICAgICAgIGxpbmVzID0gW10KKyAgICAgICAg
YXJncyA9IHsKKyAgICAgICAgICAgICdkb21haW4nOiBkb21haW4uZG9tYWluX25hbWUKKyAgICAg
ICAgfQorCisgICAgICAgICMgUHJlYW1ibGUKKyAgICAgICAgbGluZXMuYXBwZW5kKCcvLyAlKGRv
bWFpbilzLicgJSBhcmdzKQorCisgICAgICAgIGhhc19hc3luY19jb21tYW5kcyA9IGFueShtYXAo
bGFtYmRhIGNvbW1hbmQ6IGNvbW1hbmQuaXNfYXN5bmMsIGRvbWFpbi5jb21tYW5kcykpCisgICAg
ICAgIGlmIGxlbihkb21haW4uZXZlbnRzKSA+IDAgb3IgaGFzX2FzeW5jX2NvbW1hbmRzOgorICAg
ICAgICAgICAgbGluZXMuYXBwZW5kKCdJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyJShkb21haW4p
c0Rpc3BhdGNoZXIgPSBJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluRGlzcGF0Y2hlci5i
aW5kKEluc3BlY3RvckJhY2tlbmQsICIlKGRvbWFpbilzIik7JyAlIGFyZ3MpCisKKyAgICAgICAg
IyBFbnVtIFR5cGUgRGVjbGFyYXRpb25zCisgICAgICAgIGZvciBfZGVjbGFyYXRpb24gaW4gZG9t
YWluLnR5cGVfZGVjbGFyYXRpb25zOgorICAgICAgICAgICAgaWYgX2RlY2xhcmF0aW9uLnR5cGUu
aXNfZW51bSgpOgorICAgICAgICAgICAgICAgIGVudW1fYXJncyA9IHsKKyAgICAgICAgICAgICAg
ICAgICAgJ2RvbWFpbic6IGRvbWFpbi5kb21haW5fbmFtZSwKKyAgICAgICAgICAgICAgICAgICAg
J2VudW1OYW1lJzogX2RlY2xhcmF0aW9uLnR5cGVfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAg
J2VudW1NYXAnOiAiLCAiLmpvaW4oWyclczogIiVzIicgJSAoR2VuZXJhdG9yLnN0eWxpemVkX25h
bWVfZm9yX2VudW1fdmFsdWUoZW51bV92YWx1ZSksIGVudW1fdmFsdWUpIGZvciBlbnVtX3ZhbHVl
IGluIF9kZWNsYXJhdGlvbi50eXBlLmVudW1fdmFsdWVzKCldKQorICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJF
bnVtKCIlKGRvbWFpbilzLiUoZW51bU5hbWUpcyIsIHslKGVudW1NYXApc30pOycgJSBlbnVtX2Fy
Z3MpCisKKyAgICAgICAgICAgIGRlZiBpc19hbm9ueW1vdXNfZW51bV9tZW1iZXIodHlwZV9tZW1i
ZXIpOgorICAgICAgICAgICAgICAgIHJldHVybiBpc2luc3RhbmNlKHR5cGVfbWVtYmVyLnR5cGUs
IEVudW1UeXBlKSBhbmQgdHlwZV9tZW1iZXIudHlwZS5pc19hbm9ueW1vdXMKKworICAgICAgICAg
ICAgZm9yIF9tZW1iZXIgaW4gZmlsdGVyKGlzX2Fub255bW91c19lbnVtX21lbWJlciwgX2RlY2xh
cmF0aW9uLnR5cGVfbWVtYmVycyk6CisgICAgICAgICAgICAgICAgZW51bV9hcmdzID0geworICAg
ICAgICAgICAgICAgICAgICAnZG9tYWluJzogZG9tYWluLmRvbWFpbl9uYW1lLAorICAgICAgICAg
ICAgICAgICAgICAnZW51bU5hbWUnOiAnJXMlcycgJSAoX2RlY2xhcmF0aW9uLnR5cGVfbmFtZSwg
dWNmaXJzdChfbWVtYmVyLm1lbWJlcl9uYW1lKSksCisgICAgICAgICAgICAgICAgICAgICdlbnVt
TWFwJzogIiwgIi5qb2luKFsnJXM6ICIlcyInICUgKEdlbmVyYXRvci5zdHlsaXplZF9uYW1lX2Zv
cl9lbnVtX3ZhbHVlKGVudW1fdmFsdWUpLCBlbnVtX3ZhbHVlKSBmb3IgZW51bV92YWx1ZSBpbiBf
bWVtYmVyLnR5cGUuZW51bV92YWx1ZXMoKV0pCisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGxpbmVzLmFwcGVuZCgnSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckVudW0oIiUoZG9t
YWluKXMuJShlbnVtTmFtZSlzIiwgeyUoZW51bU1hcClzfSk7JyAlIGVudW1fYXJncykKKworICAg
ICAgICAjIEV2ZW50cworICAgICAgICBmb3IgX2V2ZW50IGluIGRvbWFpbi5ldmVudHM6CisgICAg
ICAgICAgICBldmVudF9hcmdzID0geworICAgICAgICAgICAgICAgICdkb21haW4nOiBkb21haW4u
ZG9tYWluX25hbWUsCisgICAgICAgICAgICAgICAgJ2V2ZW50TmFtZSc6IF9ldmVudC5ldmVudF9u
YW1lLAorICAgICAgICAgICAgICAgICdwYXJhbXMnOiAiLCAiLmpvaW4oWyciJXMiJyAlIF9wYXJh
bWV0ZXIucGFyYW1ldGVyX25hbWUgZm9yIF9wYXJhbWV0ZXIgaW4gX2V2ZW50LmV2ZW50X3BhcmFt
ZXRlcnNdKQorICAgICAgICAgICAgfQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCdJbnNwZWN0
b3JCYWNrZW5kLnJlZ2lzdGVyRXZlbnQoIiUoZG9tYWluKXMuJShldmVudE5hbWUpcyIsIFslKHBh
cmFtcylzXSk7JyAlIGV2ZW50X2FyZ3MpCisKKyAgICAgICAgIyBDb21tYW5kcworICAgICAgICBm
b3IgX2NvbW1hbmQgaW4gZG9tYWluLmNvbW1hbmRzOgorICAgICAgICAgICAgZGVmIGdlbmVyYXRl
X3BhcmFtZXRlcl9vYmplY3QocGFyYW1ldGVyKToKKyAgICAgICAgICAgICAgICBvcHRpb25hbF9z
dHJpbmcgPSAidHJ1ZSIgaWYgX3BhcmFtZXRlci5pc19vcHRpb25hbCBlbHNlICJmYWxzZSIKKyAg
ICAgICAgICAgICAgICBwYWlycyA9IFtdCisgICAgICAgICAgICAgICAgcGFpcnMuYXBwZW5kKCci
bmFtZSI6ICIlcyInICUgX3BhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkKKyAgICAgICAgICAgICAg
ICBwYWlycy5hcHBlbmQoJyJ0eXBlIjogIiVzIicgJSBHZW5lcmF0b3IuanNfbmFtZV9mb3JfcGFy
YW1ldGVyX3R5cGUoX3BhcmFtZXRlci50eXBlKSkKKyAgICAgICAgICAgICAgICBwYWlycy5hcHBl
bmQoJyJvcHRpb25hbCI6ICVzJyAlIG9wdGlvbmFsX3N0cmluZykKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gInslc30iICUgIiwgIi5qb2luKHBhaXJzKQorCisgICAgICAgICAgICBjb21tYW5kX2Fy
Z3MgPSB7CisgICAgICAgICAgICAgICAgJ2RvbWFpbic6IGRvbWFpbi5kb21haW5fbmFtZSwKKyAg
ICAgICAgICAgICAgICAnY29tbWFuZE5hbWUnOiBfY29tbWFuZC5jb21tYW5kX25hbWUsCisgICAg
ICAgICAgICAgICAgJ2NhbGxQYXJhbXMnOiAiLCAiLmpvaW4oW2dlbmVyYXRlX3BhcmFtZXRlcl9v
YmplY3QoX3BhcmFtZXRlcikgZm9yIF9wYXJhbWV0ZXIgaW4gX2NvbW1hbmQuY2FsbF9wYXJhbWV0
ZXJzXSksCisgICAgICAgICAgICAgICAgJ3JldHVyblBhcmFtcyc6ICIsICIuam9pbihbJyIlcyIn
ICUgX3BhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSBmb3IgX3BhcmFtZXRlciBpbiBfY29tbWFuZC5y
ZXR1cm5fcGFyYW1ldGVyc10pLAorICAgICAgICAgICAgfQorICAgICAgICAgICAgbGluZXMuYXBw
ZW5kKCdJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiJShkb21haW4pcy4lKGNvbW1h
bmROYW1lKXMiLCBbJShjYWxsUGFyYW1zKXNdLCBbJShyZXR1cm5QYXJhbXMpc10pOycgJSBjb21t
YW5kX2FyZ3MpCisKKyAgICAgICAgcmV0dXJuICJcbiIuam9pbihsaW5lcykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRl
X2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVy
LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmYwZWZjYzVmOTg1YzUyNzdmNTI2ZGY2ZGNhYTRjNTdjNzlmZjlmY2UK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvY29kZWdlbi9nZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5CkBAIC0wLDAg
KzEsMTkwIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMgQ29weXJpZ2h0IChjKSAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChjKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorIyBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBvcy5w
YXRoCitpbXBvcnQgcmUKK2ltcG9ydCBzdHJpbmcKKworZnJvbSBnZW5lcmF0b3IgaW1wb3J0IEdl
bmVyYXRvciwgdWNmaXJzdAorZnJvbSBtb2RlbHMgaW1wb3J0IEVudW1UeXBlCitmcm9tIHN0cmlu
ZyBpbXBvcnQgVGVtcGxhdGUKK2Zyb20gZ2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgR2VuZXJh
dG9yVGVtcGxhdGVzIGFzIFRlbXBsYXRlcworCisjIFVzZSBhIGdsb2JhbCBsb2dnZXIsIHdoaWNo
IG5vcm1hbGx5IG9ubHkgbG9ncyBlcnJvcnMuCisjIEl0IGNhbiBiZSBjb25maWd1cmVkIHRvIGxv
ZyBkZWJ1ZyBtZXNzYWdlcyBmcm9tIHRoZSBDTEkuCitsb2cgPSBsb2dnaW5nLmdldExvZ2dlcign
Z2xvYmFsJykKKworCitjbGFzcyBCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvcihHZW5l
cmF0b3IpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpOgor
ICAgICAgICBzZWxmLl9tb2RlbCA9IG1vZGVsCisgICAgICAgIHNlbGYuX2lucHV0X2ZpbGVwYXRo
ID0gaW5wdXRfZmlsZXBhdGgKKworICAgIGRlZiBtb2RlbChzZWxmKToKKyAgICAgICAgcmV0dXJu
IHNlbGYuX21vZGVsCisKKyAgICBkZWYgb3V0cHV0X2ZpbGVuYW1lKHNlbGYpOgorICAgICAgICBy
ZXR1cm4gIkluc3BlY3RvciVzQmFja2VuZERpc3BhdGNoZXJzLmgiICUgc2VsZi5tb2RlbCgpLmZy
YW1ld29yay5zZXR0aW5nKCdwcmVmaXgnKQorCisgICAgZGVmIGdlbmVyYXRlX2xpY2Vuc2Uoc2Vs
Zik6CisgICAgICAgIHJldHVybiBUZW1wbGF0ZShUZW1wbGF0ZXMuQ29weXJpZ2h0QmxvY2spLnN1
YnN0aXR1dGUoTm9uZSwgaW5wdXRGaWxlbmFtZT1vcy5wYXRoLmJhc2VuYW1lKHNlbGYuX2lucHV0
X2ZpbGVwYXRoKSkKKworICAgIGRlZiBnZW5lcmF0ZV9vdXRwdXQoc2VsZik6CisgICAgICAgIGhl
YWRlcnMgPSBbCisgICAgICAgICAgICAnIkluc3BlY3RvciVzVHlwZUJ1aWxkZXJzLmgiJyAlIHNl
bGYubW9kZWwoKS5mcmFtZXdvcmsuc2V0dGluZygncHJlZml4JyksCisgICAgICAgICAgICAnPGlu
c3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPicsCisgICAgICAgICAgICAnPHd0
Zi9QYXNzUmVmUHRyLmg+JywKKyAgICAgICAgICAgICc8d3RmL3RleHQvV1RGU3RyaW5nLmg+J10K
KworICAgICAgICB0eXBlZGVmcyA9IFsoJ1N0cmluZycsICdFcnJvclN0cmluZycpXQorCisgICAg
ICAgIHNlY3Rpb25zID0gW10KKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVf
bGljZW5zZSgpKQorICAgICAgICBoZWFkZXJfYXJncyA9IHsKKyAgICAgICAgICAgICdoZWFkZXJH
dWFyZFN0cmluZyc6IHJlLnN1YignWy0uL10nLCAnXycsIHNlbGYub3V0cHV0X2ZpbGVuYW1lKCkp
LAorICAgICAgICAgICAgJ2luY2x1ZGVzJzogJ1xuJy5qb2luKFsnI2luY2x1ZGUgJyArIGhlYWRl
ciBmb3IgaGVhZGVyIGluIGhlYWRlcnNdKSwKKyAgICAgICAgICAgICd0eXBlZGVmcyc6ICdcbicu
am9pbihbJ3R5cGVkZWYgJXMgJXM7JyAlIHR5cGVkZWYgZm9yIHR5cGVkZWYgaW4gdHlwZWRlZnNd
KSwKKyAgICAgICAgICAgICdpbnB1dEZpbGVuYW1lJzogc2VsZi5faW5wdXRfZmlsZXBhdGgKKyAg
ICAgICAgfQorCisgICAgICAgIGRvbWFpbnMgPSBzZWxmLmRvbWFpbnNfdG9fZ2VuZXJhdGUoKQor
ICAgICAgICBkb21haW5zID0gZmlsdGVyKGxhbWJkYSBkb21haW46IGxlbihkb21haW4uY29tbWFu
ZHMpID4gMCwgZG9tYWlucykKKworICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoVGVt
cGxhdGVzLkNwcEhlYWRlclByZWx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykp
CisgICAgICAgIHNlY3Rpb25zLmV4dGVuZChtYXAoc2VsZi5fZ2VuZXJhdGVfaGFuZGxlcl9kZWNs
YXJhdGlvbnNfZm9yX2RvbWFpbiwgZG9tYWlucykpCisgICAgICAgIHNlY3Rpb25zLmV4dGVuZCht
YXAoc2VsZi5fZ2VuZXJhdGVfZGlzcGF0Y2hlcl9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbiwgZG9t
YWlucykpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMuQ3BwSGVh
ZGVyUG9zdGx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCisgICAgICAgIHJl
dHVybiAiXG5cbiIuam9pbihzZWN0aW9ucykKKworICAgICMgUHJpdmF0ZSBtZXRob2RzLgorCisg
ICAgZGVmIF9nZW5lcmF0ZV9oYW5kbGVyX2RlY2xhcmF0aW9uc19mb3JfZG9tYWluKHNlbGYsIGRv
bWFpbik6CisgICAgICAgIGNsYXNzQ29tcG9uZW50cyA9IFsnY2xhc3MnXQorICAgICAgICBleHBv
cnRNYWNybyA9IHNlbGYubW9kZWwoKS5mcmFtZXdvcmsuc2V0dGluZygnZXhwb3J0X21hY3JvJywg
Tm9uZSkKKyAgICAgICAgaWYgZXhwb3J0TWFjcm8gaXMgbm90IE5vbmU6CisgICAgICAgICAgICBj
bGFzc0NvbXBvbmVudHMuYXBwZW5kKGV4cG9ydE1hY3JvKQorCisgICAgICAgIHVzZWRfZW51bV9u
YW1lcyA9IHNldCgpCisKKyAgICAgICAgY29tbWFuZF9kZWNsYXJhdGlvbnMgPSBbXQorICAgICAg
ICBmb3IgY29tbWFuZCBpbiBkb21haW4uY29tbWFuZHM6CisgICAgICAgICAgICBjb21tYW5kX2Rl
Y2xhcmF0aW9ucy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfaGFuZGxlcl9kZWNsYXJhdGlvbl9mb3Jf
Y29tbWFuZChjb21tYW5kLCB1c2VkX2VudW1fbmFtZXMpKQorCisgICAgICAgIGhhbmRsZXJfYXJn
cyA9IHsKKyAgICAgICAgICAgICdjbGFzc0FuZEV4cG9ydE1hY3JvJzogIiAiLmpvaW4oY2xhc3ND
b21wb25lbnRzKSwKKyAgICAgICAgICAgICdkb21haW5OYW1lJzogZG9tYWluLmRvbWFpbl9uYW1l
LAorICAgICAgICAgICAgJ2NvbW1hbmREZWNsYXJhdGlvbnMnOiAiXG4iLmpvaW4oY29tbWFuZF9k
ZWNsYXJhdGlvbnMpCisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gR2VuZXJhdG9yLndyYXBf
d2l0aF9ndWFyZF9mb3JfZG9tYWluKGRvbWFpbiwgVGVtcGxhdGUoVGVtcGxhdGVzLkJhY2tlbmRE
aXNwYXRjaGVySGVhZGVyRG9tYWluSGFuZGxlckRlY2xhcmF0aW9uKS5zdWJzdGl0dXRlKE5vbmUs
ICoqaGFuZGxlcl9hcmdzKSkKKworICAgIGRlZiBfZ2VuZXJhdGVfYW5vbnltb3VzX2VudW1fZm9y
X3BhcmFtZXRlcihzZWxmLCBwYXJhbWV0ZXIsIGNvbW1hbmQpOgorICAgICAgICBlbnVtX2FyZ3Mg
PSB7CisgICAgICAgICAgICAncGFyYW1ldGVyTmFtZSc6IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFt
ZSwKKyAgICAgICAgICAgICdjb21tYW5kTmFtZSc6IGNvbW1hbmQuY29tbWFuZF9uYW1lCisgICAg
ICAgIH0KKworICAgICAgICBsaW5lcyA9IFtdCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIC8v
IE5hbWVkIGFmdGVyIHBhcmFtZXRlciBcJyUocGFyYW1ldGVyTmFtZSlzXCcgd2hpbGUgZ2VuZXJh
dGluZyBjb21tYW5kL2V2ZW50ICUoY29tbWFuZE5hbWUpcy4nICUgZW51bV9hcmdzKQorICAgICAg
ICBsaW5lcy5hcHBlbmQoJyAgICBlbnVtIGNsYXNzICVzIHsnICUgdWNmaXJzdChwYXJhbWV0ZXIu
cGFyYW1ldGVyX25hbWUpKQorICAgICAgICBmb3IgZW51bV92YWx1ZSBpbiBwYXJhbWV0ZXIudHlw
ZS5lbnVtX3ZhbHVlcygpOgorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgICVzID0g
JWQsJyAlIChHZW5lcmF0b3Iuc3R5bGl6ZWRfbmFtZV9mb3JfZW51bV92YWx1ZShlbnVtX3ZhbHVl
KSwgc2VsZi5lbmNvZGluZ19mb3JfZW51bV92YWx1ZShlbnVtX3ZhbHVlKSkpCisgICAgICAgIGxp
bmVzLmFwcGVuZCgnICAgIH07IC8vIGVudW0gY2xhc3MgJXMnICUgdWNmaXJzdChwYXJhbWV0ZXIu
cGFyYW1ldGVyX25hbWUpKQorICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQorCisgICAg
ZGVmIF9nZW5lcmF0ZV9oYW5kbGVyX2RlY2xhcmF0aW9uX2Zvcl9jb21tYW5kKHNlbGYsIGNvbW1h
bmQsIHVzZWRfZW51bV9uYW1lcyk6CisgICAgICAgIGlmIGNvbW1hbmQuaXNfYXN5bmM6CisgICAg
ICAgICAgICByZXR1cm4gc2VsZi5fZ2VuZXJhdGVfYXN5bmNfaGFuZGxlcl9kZWNsYXJhdGlvbl9m
b3JfY29tbWFuZChjb21tYW5kKQorCisgICAgICAgIGxpbmVzID0gW10KKyAgICAgICAgcGFyYW1l
dGVycyA9IFsnRXJyb3JTdHJpbmcqJ10KKyAgICAgICAgZm9yIF9wYXJhbWV0ZXIgaW4gY29tbWFu
ZC5jYWxsX3BhcmFtZXRlcnM6CisgICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZCgiJXMgaW5f
JXMiICUgKEdlbmVyYXRvci50eXBlX3N0cmluZ19mb3JfdW5jaGVja2VkX2Zvcm1hbF9pbl9wYXJh
bWV0ZXIoX3BhcmFtZXRlciksIF9wYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpKQorCisgICAgICAg
ICAgICBpZiBpc2luc3RhbmNlKF9wYXJhbWV0ZXIudHlwZSwgRW51bVR5cGUpIGFuZCBfcGFyYW1l
dGVyLnBhcmFtZXRlcl9uYW1lIG5vdCBpbiB1c2VkX2VudW1fbmFtZXM6CisgICAgICAgICAgICAg
ICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2Fub255bW91c19lbnVtX2Zvcl9wYXJhbWV0
ZXIoX3BhcmFtZXRlciwgY29tbWFuZCkpCisgICAgICAgICAgICAgICAgdXNlZF9lbnVtX25hbWVz
LmFkZChfcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKQorCisgICAgICAgIGZvciBfcGFyYW1ldGVy
IGluIGNvbW1hbmQucmV0dXJuX3BhcmFtZXRlcnM6CisgICAgICAgICAgICBwYXJhbWV0ZXJfbmFt
ZSA9ICdvdXRfJyArIF9wYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUKKyAgICAgICAgICAgIGlmIF9w
YXJhbWV0ZXIuaXNfb3B0aW9uYWw6CisgICAgICAgICAgICAgICAgcGFyYW1ldGVyX25hbWUgPSAn
b3B0XycgKyBwYXJhbWV0ZXJfbmFtZQorICAgICAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoIiVz
ICVzIiAlIChHZW5lcmF0b3IudHlwZV9zdHJpbmdfZm9yX2Zvcm1hbF9vdXRfcGFyYW1ldGVyKF9w
YXJhbWV0ZXIpLCBwYXJhbWV0ZXJfbmFtZSkpCisKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uo
X3BhcmFtZXRlci50eXBlLCBFbnVtVHlwZSkgYW5kIF9wYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUg
bm90IGluIHVzZWRfZW51bV9uYW1lczoKKyAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2Vs
Zi5fZ2VuZXJhdGVfYW5vbnltb3VzX2VudW1fZm9yX3BhcmFtZXRlcihfcGFyYW1ldGVyLCBjb21t
YW5kKSkKKyAgICAgICAgICAgICAgICB1c2VkX2VudW1fbmFtZXMuYWRkKF9wYXJhbWV0ZXIucGFy
YW1ldGVyX25hbWUpCisKKyAgICAgICAgY29tbWFuZF9hcmdzID0geworICAgICAgICAgICAgJ2Nv
bW1hbmROYW1lJzogY29tbWFuZC5jb21tYW5kX25hbWUsCisgICAgICAgICAgICAncGFyYW1ldGVy
cyc6ICIsICIuam9pbihwYXJhbWV0ZXJzKQorICAgICAgICB9CisgICAgICAgIGxpbmVzLmFwcGVu
ZCgnICAgIHZpcnR1YWwgdm9pZCAlKGNvbW1hbmROYW1lKXMoJShwYXJhbWV0ZXJzKXMpID0gMDsn
ICUgY29tbWFuZF9hcmdzKQorICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQorCisgICAg
ZGVmIF9nZW5lcmF0ZV9hc3luY19oYW5kbGVyX2RlY2xhcmF0aW9uX2Zvcl9jb21tYW5kKHNlbGYs
IGNvbW1hbmQpOgorICAgICAgICBjYWxsYmFja05hbWUgPSAiJXNDYWxsYmFjayIgJSB1Y2ZpcnN0
KGNvbW1hbmQuY29tbWFuZF9uYW1lKQorCisgICAgICAgIGluX3BhcmFtZXRlcnMgPSBbJ0Vycm9y
U3RyaW5nKiddCisgICAgICAgIGZvciBfcGFyYW1ldGVyIGluIGNvbW1hbmQuY2FsbF9wYXJhbWV0
ZXJzOgorICAgICAgICAgICAgaW5fcGFyYW1ldGVycy5hcHBlbmQoIiVzIGluXyVzIiAlIChHZW5l
cmF0b3IudHlwZV9zdHJpbmdfZm9yX3VuY2hlY2tlZF9mb3JtYWxfaW5fcGFyYW1ldGVyKF9wYXJh
bWV0ZXIpLCBfcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKSkKKyAgICAgICAgaW5fcGFyYW1ldGVy
cy5hcHBlbmQoIlBhc3NSZWZQdHI8JXM+IGNhbGxiYWNrIiAlIGNhbGxiYWNrTmFtZSkKKworICAg
ICAgICBvdXRfcGFyYW1ldGVycyA9IFtdCisgICAgICAgIGZvciBfcGFyYW1ldGVyIGluIGNvbW1h
bmQucmV0dXJuX3BhcmFtZXRlcnM6CisgICAgICAgICAgICBvdXRfcGFyYW1ldGVycy5hcHBlbmQo
IiVzICVzIiAlIChHZW5lcmF0b3IudHlwZV9zdHJpbmdfZm9yX2Zvcm1hbF9hc3luY19wYXJhbWV0
ZXIoX3BhcmFtZXRlciksIF9wYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpKQorCisgICAgICAgIGNv
bW1hbmRfYXJncyA9IHsKKyAgICAgICAgICAgICdjYWxsYmFja05hbWUnOiBjYWxsYmFja05hbWUs
CisgICAgICAgICAgICAnY29tbWFuZE5hbWUnOiBjb21tYW5kLmNvbW1hbmRfbmFtZSwKKyAgICAg
ICAgICAgICdpblBhcmFtZXRlcnMnOiAiLCAiLmpvaW4oaW5fcGFyYW1ldGVycyksCisgICAgICAg
ICAgICAnb3V0UGFyYW1ldGVycyc6ICIsICIuam9pbihvdXRfcGFyYW1ldGVycyksCisgICAgICAg
IH0KKworICAgICAgICByZXR1cm4gVGVtcGxhdGUoVGVtcGxhdGVzLkJhY2tlbmREaXNwYXRjaGVy
SGVhZGVyQXN5bmNDb21tYW5kRGVjbGFyYXRpb24pLnN1YnN0aXR1dGUoTm9uZSwgKipjb21tYW5k
X2FyZ3MpCisKKyAgICBkZWYgX2dlbmVyYXRlX2Rpc3BhdGNoZXJfZGVjbGFyYXRpb25zX2Zvcl9k
b21haW4oc2VsZiwgZG9tYWluKToKKyAgICAgICAgY2xhc3NDb21wb25lbnRzID0gWydjbGFzcydd
CisgICAgICAgIGV4cG9ydE1hY3JvID0gc2VsZi5tb2RlbCgpLmZyYW1ld29yay5zZXR0aW5nKCdl
eHBvcnRfbWFjcm8nLCBOb25lKQorICAgICAgICBpZiBleHBvcnRNYWNybyBpcyBub3QgTm9uZToK
KyAgICAgICAgICAgIGNsYXNzQ29tcG9uZW50cy5hcHBlbmQoZXhwb3J0TWFjcm8pCisKKyAgICAg
ICAgZGVjbGFyYXRpb25zID0gW10KKyAgICAgICAgaWYgbGVuKGRvbWFpbi5jb21tYW5kcykgPiAw
OgorICAgICAgICAgICAgZGVjbGFyYXRpb25zLmFwcGVuZCgncHJpdmF0ZTonKQorICAgICAgICBk
ZWNsYXJhdGlvbnMuZXh0ZW5kKG1hcChzZWxmLl9nZW5lcmF0ZV9kaXNwYXRjaGVyX2RlY2xhcmF0
aW9uX2Zvcl9jb21tYW5kLCBkb21haW4uY29tbWFuZHMpKQorCisgICAgICAgIGhhbmRsZXJfYXJn
cyA9IHsKKyAgICAgICAgICAgICdjbGFzc0FuZEV4cG9ydE1hY3JvJzogIiAiLmpvaW4oY2xhc3ND
b21wb25lbnRzKSwKKyAgICAgICAgICAgICdkb21haW5OYW1lJzogZG9tYWluLmRvbWFpbl9uYW1l
LAorICAgICAgICAgICAgJ2NvbW1hbmREZWNsYXJhdGlvbnMnOiAiXG4iLmpvaW4oZGVjbGFyYXRp
b25zKQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIEdlbmVyYXRvci53cmFwX3dpdGhfZ3Vh
cmRfZm9yX2RvbWFpbihkb21haW4sIFRlbXBsYXRlKFRlbXBsYXRlcy5CYWNrZW5kRGlzcGF0Y2hl
ckhlYWRlckRvbWFpbkRpc3BhdGNoZXJEZWNsYXJhdGlvbikuc3Vic3RpdHV0ZShOb25lLCAqKmhh
bmRsZXJfYXJncykpCisKKyAgICBkZWYgX2dlbmVyYXRlX2Rpc3BhdGNoZXJfZGVjbGFyYXRpb25f
Zm9yX2NvbW1hbmQoc2VsZiwgY29tbWFuZCk6CisgICAgICAgIHJldHVybiAiICAgIHZvaWQgJXMo
bG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsi
ICUgY29tbWFuZC5jb21tYW5kX25hbWUKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9p
bXBsZW1lbnRhdGlvbi5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9jb2RlZ2VuL2dlbmVyYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4xMzJjMGE1ZDdhYmZlNTljMmZmZTk0M2ZmMmE2ODI2M2FiNWY5MjNlCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2Nv
ZGVnZW4vZ2VuZXJhdGVfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5CkBAIC0w
LDAgKzEsMjc4IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMgQ29weXJpZ2h0IChjKSAyMDE0
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChjKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorIyBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBv
cy5wYXRoCitpbXBvcnQgcmUKK2ltcG9ydCBzdHJpbmcKKworZnJvbSBnZW5lcmF0b3IgaW1wb3J0
IEdlbmVyYXRvciwgdWNmaXJzdAorZnJvbSBzdHJpbmcgaW1wb3J0IFRlbXBsYXRlCitmcm9tIGdl
bmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IEdlbmVyYXRvclRlbXBsYXRlcyBhcyBUZW1wbGF0ZXMK
K2Zyb20gbW9kZWxzIGltcG9ydCBPYmplY3RUeXBlLCBBcnJheVR5cGUKKworIyBVc2UgYSBnbG9i
YWwgbG9nZ2VyLCB3aGljaCBub3JtYWxseSBvbmx5IGxvZ3MgZXJyb3JzLgorbG9nID0gbG9nZ2lu
Zy5nZXRMb2dnZXIoJ2dsb2JhbCcpCisKKworY2xhc3MgQmFja2VuZERpc3BhdGNoZXJJbXBsZW1l
bnRhdGlvbkdlbmVyYXRvcihHZW5lcmF0b3IpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtb2Rl
bCwgaW5wdXRfZmlsZXBhdGgpOgorICAgICAgICBzZWxmLl9tb2RlbCA9IG1vZGVsCisgICAgICAg
IHNlbGYuX2lucHV0X2ZpbGVwYXRoID0gaW5wdXRfZmlsZXBhdGgKKworICAgIGRlZiBtb2RlbChz
ZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX21vZGVsCisKKyAgICBkZWYgb3V0cHV0X2ZpbGVu
YW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gIkluc3BlY3RvciVzQmFja2VuZERpc3BhdGNoZXJz
LmNwcCIgJSBzZWxmLm1vZGVsKCkuZnJhbWV3b3JrLnNldHRpbmcoJ3ByZWZpeCcpCisKKyAgICBk
ZWYgZ2VuZXJhdGVfbGljZW5zZShzZWxmKToKKyAgICAgICAgcmV0dXJuIFRlbXBsYXRlKFRlbXBs
YXRlcy5Db3B5cmlnaHRCbG9jaykuc3Vic3RpdHV0ZShOb25lLCBpbnB1dEZpbGVuYW1lPW9zLnBh
dGguYmFzZW5hbWUoc2VsZi5faW5wdXRfZmlsZXBhdGgpKQorCisgICAgZGVmIGdlbmVyYXRlX291
dHB1dChzZWxmKToKKyAgICAgICAgc2Vjb25kYXJ5X2hlYWRlcnMgPSBbCisgICAgICAgICAgICAn
PGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4nLAorICAgICAgICAgICAgJzxp
bnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+JywKKyAgICAgICAgICAgICc8d3RmL3RleHQvQ1N0
cmluZy5oPiddCisKKyAgICAgICAgc2VjdGlvbnMgPSBbXQorICAgICAgICBzZWN0aW9ucy5hcHBl
bmQoc2VsZi5nZW5lcmF0ZV9saWNlbnNlKCkpCisgICAgICAgIGhlYWRlcl9hcmdzID0geworICAg
ICAgICAgICAgJ3ByaW1hcnlJbmNsdWRlJzogJyJJbnNwZWN0b3Ilc0JhY2tlbmREaXNwYXRjaGVy
cy5oIicgJSBzZWxmLm1vZGVsKCkuZnJhbWV3b3JrLnNldHRpbmcoJ3ByZWZpeCcpLAorICAgICAg
ICAgICAgJ3NlY29uZGFyeUluY2x1ZGVzJzogIlxuIi5qb2luKFsnI2luY2x1ZGUgJXMnICUgaGVh
ZGVyIGZvciBoZWFkZXIgaW4gc2Vjb25kYXJ5X2hlYWRlcnNdKSwKKyAgICAgICAgICAgICdpbnB1
dEZpbGVuYW1lJzogc2VsZi5faW5wdXRfZmlsZXBhdGgKKyAgICAgICAgfQorCisgICAgICAgIGRv
bWFpbnMgPSBzZWxmLmRvbWFpbnNfdG9fZ2VuZXJhdGUoKQorICAgICAgICBkb21haW5zID0gZmls
dGVyKGxhbWJkYSBkb21haW46IGxlbihkb21haW4uY29tbWFuZHMpID4gMCwgZG9tYWlucykKKwor
ICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVzLkNwcEltcGxlbWVudGF0
aW9uUHJlbHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkKKyAgICAgICAgc2Vj
dGlvbnMuYXBwZW5kKCJcbiIuam9pbihtYXAoc2VsZi5fZ2VuZXJhdGVfaGFuZGxlcl9jbGFzc19k
ZXN0cnVjdG9yX2Zvcl9kb21haW4sIGRvbWFpbnMpKSkKKyAgICAgICAgc2VjdGlvbnMuZXh0ZW5k
KG1hcChzZWxmLl9nZW5lcmF0ZV9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uc19mb3JfZG9tYWlu
LCBkb21haW5zKSkKKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKFRlbXBsYXRlcy5D
cHBJbXBsZW1lbnRhdGlvblBvc3RsdWRlKS5zdWJzdGl0dXRlKE5vbmUsICoqaGVhZGVyX2FyZ3Mp
KQorICAgICAgICByZXR1cm4gIlxuXG4iLmpvaW4oc2VjdGlvbnMpCisKKyAgICAjIFByaXZhdGUg
bWV0aG9kcy4KKworICAgIGRlZiBfZ2VuZXJhdGVfaGFuZGxlcl9jbGFzc19kZXN0cnVjdG9yX2Zv
cl9kb21haW4oc2VsZiwgZG9tYWluKToKKyAgICAgICAgZGVzdHJ1Y3Rvcl9hcmdzID0geworICAg
ICAgICAgICAgJ2RvbWFpbk5hbWUnOiBkb21haW4uZG9tYWluX25hbWUKKyAgICAgICAgfQorICAg
ICAgICBkZXN0cnVjdG9yICA9ICdJbnNwZWN0b3IlKGRvbWFpbk5hbWUpc0JhY2tlbmREaXNwYXRj
aGVySGFuZGxlcjo6fkluc3BlY3RvciUoZG9tYWluTmFtZSlzQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyKCkgeyB9JyAlIGRlc3RydWN0b3JfYXJncworICAgICAgICByZXR1cm4gR2VuZXJhdG9yLndy
YXBfd2l0aF9ndWFyZF9mb3JfZG9tYWluKGRvbWFpbiwgZGVzdHJ1Y3RvcikKKworICAgIGRlZiBf
Z2VuZXJhdGVfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbnNfZm9yX2RvbWFpbihzZWxmLCBkb21h
aW4pOgorICAgICAgICBpbXBsZW1lbnRhdGlvbnMgPSBbXQorCisgICAgICAgIGNvbnN0cnVjdG9y
X2FyZ3MgPSB7CisgICAgICAgICAgICAnZG9tYWluTmFtZSc6IGRvbWFpbi5kb21haW5fbmFtZSwK
KyAgICAgICAgfQorICAgICAgICBpbXBsZW1lbnRhdGlvbnMuYXBwZW5kKFRlbXBsYXRlKFRlbXBs
YXRlcy5CYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uRG9tYWluQ29uc3RydWN0b3IpLnN1
YnN0aXR1dGUoTm9uZSwgKipjb25zdHJ1Y3Rvcl9hcmdzKSkKKworICAgICAgICBpZiBsZW4oZG9t
YWluLmNvbW1hbmRzKSA8PSA1OgorICAgICAgICAgICAgaW1wbGVtZW50YXRpb25zLmFwcGVuZChz
ZWxmLl9nZW5lcmF0ZV9zbWFsbF9kaXNwYXRjaGVyX3N3aXRjaF9pbXBsZW1lbnRhdGlvbl9mb3Jf
ZG9tYWluKGRvbWFpbikpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpbXBsZW1lbnRhdGlv
bnMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2xhcmdlX2Rpc3BhdGNoZXJfc3dpdGNoX2ltcGxlbWVu
dGF0aW9uX2Zvcl9kb21haW4oZG9tYWluKSkKKworICAgICAgICBmb3IgX2NvbW1hbmQgaW4gZG9t
YWluLmNvbW1hbmRzOgorICAgICAgICAgICAgaWYgX2NvbW1hbmQuaXNfYXN5bmM6CisgICAgICAg
ICAgICAgICAgaW1wbGVtZW50YXRpb25zLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9hc3luY19kaXNw
YXRjaGVyX2NsYXNzX2Zvcl9kb21haW4oX2NvbW1hbmQsIGRvbWFpbikpCisgICAgICAgICAgICBp
bXBsZW1lbnRhdGlvbnMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2Rpc3BhdGNoZXJfaW1wbGVtZW50
YXRpb25fZm9yX2NvbW1hbmQoX2NvbW1hbmQsIGRvbWFpbikpCisKKyAgICAgICAgcmV0dXJuIEdl
bmVyYXRvci53cmFwX3dpdGhfZ3VhcmRfZm9yX2RvbWFpbihkb21haW4sICJcblxuIi5qb2luKGlt
cGxlbWVudGF0aW9ucykpCisKKyAgICBkZWYgX2dlbmVyYXRlX3NtYWxsX2Rpc3BhdGNoZXJfc3dp
dGNoX2ltcGxlbWVudGF0aW9uX2Zvcl9kb21haW4oc2VsZiwgZG9tYWluKToKKyAgICAgICAgY2Fz
ZXMgPSBbXQorICAgICAgICBjYXNlcy5hcHBlbmQoJyAgICBpZiAobWV0aG9kID09ICIlcyIpJyAl
IGRvbWFpbi5jb21tYW5kc1swXS5jb21tYW5kX25hbWUpCisgICAgICAgIGNhc2VzLmFwcGVuZCgn
ICAgICAgICAlcyhjYWxsSWQsICptZXNzYWdlLmdldCgpKTsnICUgZG9tYWluLmNvbW1hbmRzWzBd
LmNvbW1hbmRfbmFtZSkKKyAgICAgICAgZm9yIF9jb21tYW5kIGluIGRvbWFpbi5jb21tYW5kc1sx
Ol06CisgICAgICAgICAgICBjYXNlcy5hcHBlbmQoJyAgICBlbHNlIGlmIChtZXRob2QgPT0gIiVz
IiknICUgX2NvbW1hbmQuY29tbWFuZF9uYW1lKQorICAgICAgICAgICAgY2FzZXMuYXBwZW5kKCcg
ICAgICAgICVzKGNhbGxJZCwgKm1lc3NhZ2UuZ2V0KCkpOycgJSBfY29tbWFuZC5jb21tYW5kX25h
bWUpCisKKyAgICAgICAgc3dpdGNoX2FyZ3MgPSB7CisgICAgICAgICAgICAnZG9tYWluTmFtZSc6
IGRvbWFpbi5kb21haW5fbmFtZSwKKyAgICAgICAgICAgICdkaXNwYXRjaENhc2VzJzogIlxuIi5q
b2luKGNhc2VzKQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIFRlbXBsYXRlKFRlbXBsYXRl
cy5CYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uU21hbGxTd2l0Y2gpLnN1YnN0aXR1dGUo
Tm9uZSwgKipzd2l0Y2hfYXJncykKKworICAgIGRlZiBfZ2VuZXJhdGVfbGFyZ2VfZGlzcGF0Y2hl
cl9zd2l0Y2hfaW1wbGVtZW50YXRpb25fZm9yX2RvbWFpbihzZWxmLCBkb21haW4pOgorICAgICAg
ICBjYXNlcyA9IFtdCisgICAgICAgIGZvciBfY29tbWFuZCBpbiBkb21haW4uY29tbWFuZHM6Cisg
ICAgICAgICAgICBhcmdzID0geworICAgICAgICAgICAgICAgICdkb21haW5OYW1lJzogZG9tYWlu
LmRvbWFpbl9uYW1lLAorICAgICAgICAgICAgICAgICdjb21tYW5kTmFtZSc6IF9jb21tYW5kLmNv
bW1hbmRfbmFtZQorICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZXMuYXBwZW5kKCcgICAg
ICAgICAgICB7ICIlKGNvbW1hbmROYW1lKXMiLCAmSW5zcGVjdG9yJShkb21haW5OYW1lKXNCYWNr
ZW5kRGlzcGF0Y2hlcjo6JShjb21tYW5kTmFtZSlzIH0sJyAlIGFyZ3MpCisKKyAgICAgICAgc3dp
dGNoX2FyZ3MgPSB7CisgICAgICAgICAgICAnZG9tYWluTmFtZSc6IGRvbWFpbi5kb21haW5fbmFt
ZSwKKyAgICAgICAgICAgICdkaXNwYXRjaENhc2VzJzogIlxuIi5qb2luKGNhc2VzKQorICAgICAg
ICB9CisKKyAgICAgICAgcmV0dXJuIFRlbXBsYXRlKFRlbXBsYXRlcy5CYWNrZW5kRGlzcGF0Y2hl
ckltcGxlbWVudGF0aW9uTGFyZ2VTd2l0Y2gpLnN1YnN0aXR1dGUoTm9uZSwgKipzd2l0Y2hfYXJn
cykKKworICAgIGRlZiBfZ2VuZXJhdGVfYXN5bmNfZGlzcGF0Y2hlcl9jbGFzc19mb3JfZG9tYWlu
KHNlbGYsIGNvbW1hbmQsIGRvbWFpbik6CisgICAgICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdubWVu
dHMgPSBbXQorICAgICAgICBmb3JtYWxfcGFyYW1ldGVycyA9IFtdCisKKyAgICAgICAgZm9yIF9w
YXJhbWV0ZXIgaW4gY29tbWFuZC5yZXR1cm5fcGFyYW1ldGVyczoKKyAgICAgICAgICAgIHBhcmFt
X2FyZ3MgPSB7CisgICAgICAgICAgICAgICAgJ2ZyYW1ld29ya1ByZWZpeCc6IHNlbGYubW9kZWwo
KS5mcmFtZXdvcmsuc2V0dGluZygncHJlZml4JyksCisgICAgICAgICAgICAgICAgJ2tleWVkU2V0
TWV0aG9kJzogR2VuZXJhdG9yLmtleWVkX3NldF9tZXRob2RfZm9yX3R5cGUoX3BhcmFtZXRlci50
eXBlKSwKKyAgICAgICAgICAgICAgICAncGFyYW1ldGVyTmFtZSc6IF9wYXJhbWV0ZXIucGFyYW1l
dGVyX25hbWUsCisgICAgICAgICAgICAgICAgJ3BhcmFtZXRlclR5cGUnOiBHZW5lcmF0b3IudHlw
ZV9zdHJpbmdfZm9yX3N0YWNrX2luX3BhcmFtZXRlcihfcGFyYW1ldGVyKSwKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgZm9ybWFsX3BhcmFtZXRlcnMuYXBwZW5kKCclcyAlcycgJSAoR2Vu
ZXJhdG9yLnR5cGVfc3RyaW5nX2Zvcl9mb3JtYWxfYXN5bmNfcGFyYW1ldGVyKF9wYXJhbWV0ZXIp
LCBfcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKSkKKworICAgICAgICAgICAgaWYgX3BhcmFtZXRl
ci5pc19vcHRpb25hbDoKKyAgICAgICAgICAgICAgICBpZiBHZW5lcmF0b3Iuc2hvdWxkX3VzZV93
cmFwcGVyX2Zvcl9yZXR1cm5fdHlwZShfcGFyYW1ldGVyLnR5cGUpOgorICAgICAgICAgICAgICAg
ICAgICBvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgIGlmICglKHBhcmFtZXRl
ck5hbWUpcy5pc0Fzc2lnbmVkKCkpJyAlIHBhcmFtX2FyZ3MpCisgICAgICAgICAgICAgICAgICAg
IG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAgICAgIGpzb25NZXNzYWdlLT4l
KGtleWVkU2V0TWV0aG9kKXMoQVNDSUlMaXRlcmFsKCIlKHBhcmFtZXRlck5hbWUpcyIpLCAlKHBh
cmFtZXRlck5hbWUpcy5nZXRWYWx1ZSgpKTsnICUgcGFyYW1fYXJncykKKyAgICAgICAgICAgICAg
ICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRzLmFw
cGVuZCgnICAgIGlmICglKHBhcmFtZXRlck5hbWUpcyknICUgcGFyYW1fYXJncykKKyAgICAgICAg
ICAgICAgICAgICAgb3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICAgICAganNv
bk1lc3NhZ2UtPiUoa2V5ZWRTZXRNZXRob2QpcyhBU0NJSUxpdGVyYWwoIiUocGFyYW1ldGVyTmFt
ZSlzIiksICUocGFyYW1ldGVyTmFtZSlzKTsnICUgcGFyYW1fYXJncykKKyAgICAgICAgICAgIGVs
aWYgX3BhcmFtZXRlci50eXBlLmlzX2VudW0oKToKKyAgICAgICAgICAgICAgICBvdXRfcGFyYW1l
dGVyX2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgIGpzb25NZXNzYWdlLT4lKGtleWVkU2V0TWV0aG9k
KXMoQVNDSUlMaXRlcmFsKCIlKHBhcmFtZXRlck5hbWUpcyIpLCBJbnNwZWN0b3I6OlR5cGVCdWls
ZGVyOjpnZXQlKGZyYW1ld29ya1ByZWZpeClzRW51bUNvbnN0YW50VmFsdWUoJShwYXJhbWV0ZXJO
YW1lKXMpKTsnICUgcGFyYW1fYXJncykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAg
ICAgb3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICBqc29uTWVzc2FnZS0+JShr
ZXllZFNldE1ldGhvZClzKEFTQ0lJTGl0ZXJhbCgiJShwYXJhbWV0ZXJOYW1lKXMiKSwgJShwYXJh
bWV0ZXJOYW1lKXMpOycgJSBwYXJhbV9hcmdzKQorCisgICAgICAgIGFzeW5jX2FyZ3MgPSB7Cisg
ICAgICAgICAgICAnZG9tYWluTmFtZSc6IGRvbWFpbi5kb21haW5fbmFtZSwKKyAgICAgICAgICAg
ICdjYWxsYmFja05hbWUnOiB1Y2ZpcnN0KGNvbW1hbmQuY29tbWFuZF9uYW1lKSArICdDYWxsYmFj
aycsCisgICAgICAgICAgICAnZm9ybWFsUGFyYW1ldGVycyc6ICIsICIuam9pbihmb3JtYWxfcGFy
YW1ldGVycyksCisgICAgICAgICAgICAnb3V0UGFyYW1ldGVyQXNzaWdubWVudHMnOiAiXG4iLmpv
aW4ob3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cykKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
VGVtcGxhdGUoVGVtcGxhdGVzLkJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25Bc3luY0Nv
bW1hbmQpLnN1YnN0aXR1dGUoTm9uZSwgKiphc3luY19hcmdzKQorCisgICAgZGVmIF9nZW5lcmF0
ZV9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uX2Zvcl9jb21tYW5kKHNlbGYsIGNvbW1hbmQsIGRv
bWFpbik6CisgICAgICAgIGxpbmVzID0gW10KKyAgICAgICAgaW5fcGFyYW1ldGVyX2RlY2xhcmF0
aW9ucyA9IFtdCisgICAgICAgIG91dF9wYXJhbWV0ZXJfZGVjbGFyYXRpb25zID0gW10KKyAgICAg
ICAgb3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cyA9IFtdCisgICAgICAgIG1ldGhvZF9wYXJhbWV0
ZXJzID0gWycmZXJyb3InXQorCisgICAgICAgIGZvciBfcGFyYW1ldGVyIGluIGNvbW1hbmQuY2Fs
bF9wYXJhbWV0ZXJzOgorICAgICAgICAgICAgb3V0X3N1Y2Nlc3NfYXJndW1lbnQgPSAnbnVsbHB0
cicKKyAgICAgICAgICAgIGlmIF9wYXJhbWV0ZXIuaXNfb3B0aW9uYWw6CisgICAgICAgICAgICAg
ICAgb3V0X3N1Y2Nlc3NfYXJndW1lbnQgPSAnJiVzX3ZhbHVlRm91bmQnICUgX3BhcmFtZXRlci5w
YXJhbWV0ZXJfbmFtZQorICAgICAgICAgICAgICAgIGluX3BhcmFtZXRlcl9kZWNsYXJhdGlvbnMu
YXBwZW5kKCcgICAgYm9vbCAlc192YWx1ZUZvdW5kID0gZmFsc2U7JyAlIF9wYXJhbWV0ZXIucGFy
YW1ldGVyX25hbWUpCisKKyAgICAgICAgICAgIHBhcmFtX2FyZ3MgPSB7CisgICAgICAgICAgICAg
ICAgJ3BhcmFtZXRlclR5cGUnOiBHZW5lcmF0b3IudHlwZV9zdHJpbmdfZm9yX3N0YWNrX2luX3Bh
cmFtZXRlcihfcGFyYW1ldGVyKSwKKyAgICAgICAgICAgICAgICAncGFyYW1ldGVyTmFtZSc6IF9w
YXJhbWV0ZXIucGFyYW1ldGVyX25hbWUsCisgICAgICAgICAgICAgICAgJ2tleWVkR2V0TWV0aG9k
JzogR2VuZXJhdG9yLmtleWVkX2dldF9tZXRob2RfZm9yX3R5cGUoX3BhcmFtZXRlci50eXBlKSwK
KyAgICAgICAgICAgICAgICAnc3VjY2Vzc091dFBhcmFtJzogb3V0X3N1Y2Nlc3NfYXJndW1lbnQK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaW5fcGFyYW1ldGVyX2RlY2xhcmF0aW9ucy5h
cHBlbmQoJyAgICAlKHBhcmFtZXRlclR5cGUpcyBpbl8lKHBhcmFtZXRlck5hbWUpcyA9IEluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyOjolKGtleWVkR2V0TWV0aG9kKXMocGFyYW1zQ29udGFpbmVy
UHRyLCBBU0NJSUxpdGVyYWwoIiUocGFyYW1ldGVyTmFtZSlzIiksICUoc3VjY2Vzc091dFBhcmFt
KXMsIHByb3RvY29sRXJyb3JzUHRyKTsnICUgcGFyYW1fYXJncykKKworICAgICAgICAgICAgaWYg
X3BhcmFtZXRlci5pc19vcHRpb25hbDoKKyAgICAgICAgICAgICAgICBtZXRob2RfcGFyYW1ldGVy
cy5hcHBlbmQoJyUocGFyYW1ldGVyTmFtZSlzX3ZhbHVlRm91bmQgPyAmaW5fJShwYXJhbWV0ZXJO
YW1lKXMgOiBudWxscHRyJyAlIHBhcmFtX2FyZ3MpCisgICAgICAgICAgICBlbHNlOgorICAgICAg
ICAgICAgICAgIG1ldGhvZF9wYXJhbWV0ZXJzLmFwcGVuZCgnaW5fJyArIF9wYXJhbWV0ZXIucGFy
YW1ldGVyX25hbWUpCisKKyAgICAgICAgaWYgY29tbWFuZC5pc19hc3luYzoKKyAgICAgICAgICAg
IGFzeW5jX2FyZ3MgPSB7CisgICAgICAgICAgICAgICAgJ2RvbWFpbk5hbWUnOiBkb21haW4uZG9t
YWluX25hbWUsCisgICAgICAgICAgICAgICAgJ2NhbGxiYWNrTmFtZSc6IHVjZmlyc3QoY29tbWFu
ZC5jb21tYW5kX25hbWUpICsgJ0NhbGxiYWNrJworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgICAgICBjYWxsYmFjay0+ZGlz
YWJsZSgpOycpCisgICAgICAgICAgICBvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRzLmFwcGVuZCgn
ICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQs
IEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJv
cik7JykKKyAgICAgICAgICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAg
ICAgIHJldHVybjsnKQorICAgICAgICAgICAgbWV0aG9kX3BhcmFtZXRlcnMuYXBwZW5kKCdjYWxs
YmFjaycpCisKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZvciBfcGFyYW1ldGVyIGluIGNv
bW1hbmQucmV0dXJuX3BhcmFtZXRlcnM6CisgICAgICAgICAgICAgICAgcGFyYW1fYXJncyA9IHsK
KyAgICAgICAgICAgICAgICAgICAgJ3BhcmFtZXRlclR5cGUnOiBHZW5lcmF0b3IudHlwZV9zdHJp
bmdfZm9yX3N0YWNrX291dF9wYXJhbWV0ZXIoX3BhcmFtZXRlciksCisgICAgICAgICAgICAgICAg
ICAgICdwYXJhbWV0ZXJOYW1lJzogX3BhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwKKyAgICAgICAg
ICAgICAgICAgICAgJ2tleWVkU2V0TWV0aG9kJzogR2VuZXJhdG9yLmtleWVkX3NldF9tZXRob2Rf
Zm9yX3R5cGUoX3BhcmFtZXRlci50eXBlKSwKKyAgICAgICAgICAgICAgICAgICAgJ2ZyYW1ld29y
a1ByZWZpeCc6IHNlbGYubW9kZWwoKS5mcmFtZXdvcmsuc2V0dGluZygncHJlZml4JykKKyAgICAg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBvdXRfcGFyYW1ldGVyX2RlY2xhcmF0aW9u
cy5hcHBlbmQoJyAgICAlKHBhcmFtZXRlclR5cGUpcyBvdXRfJShwYXJhbWV0ZXJOYW1lKXM7JyAl
IHBhcmFtX2FyZ3MpCisgICAgICAgICAgICAgICAgaWYgX3BhcmFtZXRlci5pc19vcHRpb25hbDoK
KyAgICAgICAgICAgICAgICAgICAgaWYgR2VuZXJhdG9yLnNob3VsZF91c2Vfd3JhcHBlcl9mb3Jf
cmV0dXJuX3R5cGUoX3BhcmFtZXRlci50eXBlKToKKyAgICAgICAgICAgICAgICAgICAgICAgIG91
dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAgICAgIGlmIChvdXRfJShwYXJhbWV0
ZXJOYW1lKXMuaXNBc3NpZ25lZCgpKScgJSBwYXJhbV9hcmdzKQorICAgICAgICAgICAgICAgICAg
ICAgICAgb3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICAgICAgICAgIHJlc3Vs
dC0+JShrZXllZFNldE1ldGhvZClzKEFTQ0lJTGl0ZXJhbCgiJShwYXJhbWV0ZXJOYW1lKXMiKSwg
b3V0XyUocGFyYW1ldGVyTmFtZSlzLmdldFZhbHVlKCkpOycgJSBwYXJhbV9hcmdzKQorICAgICAg
ICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgb3V0X3BhcmFtZXRl
cl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICAgICAgaWYgKG91dF8lKHBhcmFtZXRlck5hbWUpcykn
ICUgcGFyYW1fYXJncykKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dF9wYXJhbWV0ZXJfYXNz
aWdubWVudHMuYXBwZW5kKCcgICAgICAgICAgICByZXN1bHQtPiUoa2V5ZWRTZXRNZXRob2QpcyhB
U0NJSUxpdGVyYWwoIiUocGFyYW1ldGVyTmFtZSlzIiksIG91dF8lKHBhcmFtZXRlck5hbWUpcyk7
JyAlIHBhcmFtX2FyZ3MpCisgICAgICAgICAgICAgICAgZWxpZiBfcGFyYW1ldGVyLnR5cGUuaXNf
ZW51bSgpOgorICAgICAgICAgICAgICAgICAgICBvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRzLmFw
cGVuZCgnICAgICAgICByZXN1bHQtPiUoa2V5ZWRTZXRNZXRob2QpcyhBU0NJSUxpdGVyYWwoIiUo
cGFyYW1ldGVyTmFtZSlzIiksIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OmdldCUoZnJhbWV3b3Jr
UHJlZml4KXNFbnVtQ29uc3RhbnRWYWx1ZShvdXRfJShwYXJhbWV0ZXJOYW1lKXMpKTsnICUgcGFy
YW1fYXJncykKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBvdXRf
cGFyYW1ldGVyX2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgICAgICByZXN1bHQtPiUoa2V5ZWRTZXRN
ZXRob2QpcyhBU0NJSUxpdGVyYWwoIiUocGFyYW1ldGVyTmFtZSlzIiksIG91dF8lKHBhcmFtZXRl
ck5hbWUpcyk7JyAlIHBhcmFtX2FyZ3MpCisKKyAgICAgICAgICAgICAgICBpZiBHZW5lcmF0b3Iu
c2hvdWxkX3Bhc3NfYnlfY29weV9mb3JfcmV0dXJuX3R5cGUoX3BhcmFtZXRlci50eXBlKToKKyAg
ICAgICAgICAgICAgICAgICAgbWV0aG9kX3BhcmFtZXRlcnMuYXBwZW5kKCdvdXRfJyArIF9wYXJh
bWV0ZXIucGFyYW1ldGVyX25hbWUpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAg
ICAgICAgICAgbWV0aG9kX3BhcmFtZXRlcnMuYXBwZW5kKCcmb3V0XycgKyBfcGFyYW1ldGVyLnBh
cmFtZXRlcl9uYW1lKQorCisgICAgICAgIGNvbW1hbmRfYXJncyA9IHsKKyAgICAgICAgICAgICdk
b21haW5OYW1lJzogZG9tYWluLmRvbWFpbl9uYW1lLAorICAgICAgICAgICAgJ2NhbGxiYWNrTmFt
ZSc6ICclc0NhbGxiYWNrJyAlIHVjZmlyc3QoY29tbWFuZC5jb21tYW5kX25hbWUpLAorICAgICAg
ICAgICAgJ2NvbW1hbmROYW1lJzogY29tbWFuZC5jb21tYW5kX25hbWUsCisgICAgICAgICAgICAn
aW5QYXJhbWV0ZXJEZWNsYXJhdGlvbnMnOiAiXG4iLmpvaW4oaW5fcGFyYW1ldGVyX2RlY2xhcmF0
aW9ucyksCisgICAgICAgICAgICAnaW52b2NhdGlvblBhcmFtZXRlcnMnOiAiLCAiLmpvaW4obWV0
aG9kX3BhcmFtZXRlcnMpCisgICAgICAgIH0KKworICAgICAgICBpZiBsZW4oY29tbWFuZC5jYWxs
X3BhcmFtZXRlcnMpID09IDA6CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ3ZvaWQgSW5zcGVj
dG9yJShkb21haW5OYW1lKXNCYWNrZW5kRGlzcGF0Y2hlcjo6JShjb21tYW5kTmFtZSlzKGxvbmcg
Y2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmKScgJSBjb21tYW5kX2FyZ3MpCisgICAgICAg
IGVsc2U6CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ3ZvaWQgSW5zcGVjdG9yJShkb21haW5O
YW1lKXNCYWNrZW5kRGlzcGF0Y2hlcjo6JShjb21tYW5kTmFtZSlzKGxvbmcgY2FsbElkLCBjb25z
dCBJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpJyAlIGNvbW1hbmRfYXJncykKKyAgICAgICAgbGlu
ZXMuYXBwZW5kKCd7JykKKworICAgICAgICBpZiBsZW4oY29tbWFuZC5jYWxsX3BhcmFtZXRlcnMp
ID4gMDoKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMuQmFja2Vu
ZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvblByZXBhcmVDb21tYW5kQXJndW1lbnRzKS5zdWJzdGl0
dXRlKE5vbmUsICoqY29tbWFuZF9hcmdzKSkKKworICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBF
cnJvclN0cmluZyBlcnJvcjsnKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOycpCisgICAg
ICAgIGlmIGNvbW1hbmQuaXNfYXN5bmM6CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBS
ZWZQdHI8SW5zcGVjdG9yJShkb21haW5OYW1lKXNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OiUo
Y2FsbGJhY2tOYW1lKXM+IGNhbGxiYWNrID0gYWRvcHRSZWYobmV3IEluc3BlY3RvciUoZG9tYWlu
TmFtZSlzQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjolKGNhbGxiYWNrTmFtZSlzKG1fYmFja2Vu
ZERpc3BhdGNoZXIsY2FsbElkKSk7JyAlIGNvbW1hbmRfYXJncykKKyAgICAgICAgaWYgbGVuKGNv
bW1hbmQucmV0dXJuX3BhcmFtZXRlcnMpID4gMDoKKyAgICAgICAgICAgIGxpbmVzLmV4dGVuZChv
dXRfcGFyYW1ldGVyX2RlY2xhcmF0aW9ucykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgbV9h
Z2VudC0+JShjb21tYW5kTmFtZSlzKCUoaW52b2NhdGlvblBhcmFtZXRlcnMpcyk7JyAlIGNvbW1h
bmRfYXJncykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcnKQorICAgICAgICBpZiBjb21tYW5kLmlz
X2FzeW5jOgorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgaWYgKGVycm9yLmxlbmd0aCgp
KSB7JykKKyAgICAgICAgICAgIGxpbmVzLmV4dGVuZChvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRz
KQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgfScpCisgICAgICAgIGVsaWYgbGVuKGNv
bW1hbmQucmV0dXJuX3BhcmFtZXRlcnMpID4gMToKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgn
ICAgIGlmICghZXJyb3IubGVuZ3RoKCkpIHsnKQorICAgICAgICAgICAgbGluZXMuZXh0ZW5kKG91
dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICB9
JykKKyAgICAgICAgZWxpZiBsZW4oY29tbWFuZC5yZXR1cm5fcGFyYW1ldGVycykgPT0gMToKKyAg
ICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGlmICghZXJyb3IubGVuZ3RoKCkpJykKKyAgICAg
ICAgICAgIGxpbmVzLmV4dGVuZChvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRzKQorICAgICAgICAg
ICAgbGluZXMuYXBwZW5kKCcnKQorCisgICAgICAgIGlmIG5vdCBjb21tYW5kLmlzX2FzeW5jOgor
ICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJl
c3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgZXJyb3IpOycpCisgICAgICAgIGxpbmVz
LmFwcGVuZCgnfScpCisgICAgICAgIHJldHVybiAiXG4iLmpvaW4obGluZXMpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0
ZV9mcm9udGVuZF9kaXNwYXRjaGVyX2hlYWRlci5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVh
ZGVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmI5NzFiOTM4MDUyYzM1YjBmMDc5MWMxNjA0OWVkZGIyYWQ1NjNm
OWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9mcm9udGVuZF9kaXNwYXRjaGVyX2hlYWRlci5weQpAQCAt
MCwwICsxLDEyOCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIENvcHlyaWdodCAoYykgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoYykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisjIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisj
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyMgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQg
b3MucGF0aAoraW1wb3J0IHJlCitpbXBvcnQgc3RyaW5nCisKK2Zyb20gbW9kZWxzIGltcG9ydCBF
bnVtVHlwZQorZnJvbSBnZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvciwgdWNmaXJzdAorZnJvbSBz
dHJpbmcgaW1wb3J0IFRlbXBsYXRlCitmcm9tIGdlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IEdl
bmVyYXRvclRlbXBsYXRlcyBhcyBUZW1wbGF0ZXMKKworIyBVc2UgYSBnbG9iYWwgbG9nZ2VyLCB3
aGljaCBub3JtYWxseSBvbmx5IGxvZ3MgZXJyb3JzLgorIyBJdCBjYW4gYmUgY29uZmlndXJlZCB0
byBsb2cgZGVidWcgbWVzc2FnZXMgZnJvbSB0aGUgQ0xJLgorbG9nID0gbG9nZ2luZy5nZXRMb2dn
ZXIoJ2dsb2JhbCcpCisKKworY2xhc3MgRnJvbnRlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9y
KEdlbmVyYXRvcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0
aCk6CisgICAgICAgIHNlbGYuX21vZGVsID0gbW9kZWwKKyAgICAgICAgc2VsZi5faW5wdXRfZmls
ZXBhdGggPSBpbnB1dF9maWxlcGF0aAorCisgICAgZGVmIG1vZGVsKHNlbGYpOgorICAgICAgICBy
ZXR1cm4gc2VsZi5fbW9kZWwKKworICAgIGRlZiBvdXRwdXRfZmlsZW5hbWUoc2VsZik6CisgICAg
ICAgIHJldHVybiAiSW5zcGVjdG9yJXNGcm9udGVuZERpc3BhdGNoZXJzLmgiICUgc2VsZi5tb2Rl
bCgpLmZyYW1ld29yay5zZXR0aW5nKCdwcmVmaXgnKQorCisgICAgZGVmIGdlbmVyYXRlX2xpY2Vu
c2Uoc2VsZik6CisgICAgICAgIHJldHVybiBUZW1wbGF0ZShUZW1wbGF0ZXMuQ29weXJpZ2h0Qmxv
Y2spLnN1YnN0aXR1dGUoTm9uZSwgaW5wdXRGaWxlbmFtZT1vcy5wYXRoLmJhc2VuYW1lKHNlbGYu
X2lucHV0X2ZpbGVwYXRoKSkKKworICAgIGRlZiBnZW5lcmF0ZV9vdXRwdXQoc2VsZik6CisgICAg
ICAgIGhlYWRlcnMgPSBbCisgICAgICAgICAgICAnIkluc3BlY3RvciVzVHlwZUJ1aWxkZXJzLmgi
JyAlIHNlbGYubW9kZWwoKS5mcmFtZXdvcmsuc2V0dGluZygncHJlZml4JyksCisgICAgICAgICAg
ICAnPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4nLAorICAgICAgICAgICAg
JzxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+JywKKyAgICAgICAgICAgICc8d3RmL1Bhc3NS
ZWZQdHIuaD4nLAorICAgICAgICAgICAgJzx3dGYvdGV4dC9XVEZTdHJpbmcuaD4nXQorCisgICAg
ICAgIHNlY3Rpb25zID0gW10KKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVf
bGljZW5zZSgpKQorICAgICAgICBoZWFkZXJfYXJncyA9IHsKKyAgICAgICAgICAgICdoZWFkZXJH
dWFyZFN0cmluZyc6IHJlLnN1YignWy0uL10nLCAnXycsIHNlbGYub3V0cHV0X2ZpbGVuYW1lKCkp
LAorICAgICAgICAgICAgJ2luY2x1ZGVzJzogJ1xuJy5qb2luKFsnI2luY2x1ZGUgJyArIGhlYWRl
ciBmb3IgaGVhZGVyIGluIGhlYWRlcnNdKSwKKyAgICAgICAgICAgICd0eXBlZGVmcyc6ICcnLAor
ICAgICAgICAgICAgJ2lucHV0RmlsZW5hbWUnOiBzZWxmLl9pbnB1dF9maWxlcGF0aAorICAgICAg
ICB9CisKKyAgICAgICAgZG9tYWlucyA9IHNlbGYuZG9tYWluc190b19nZW5lcmF0ZSgpCisgICAg
ICAgIGRvbWFpbnMgPSBmaWx0ZXIobGFtYmRhIGRvbWFpbjogbGVuKGRvbWFpbi5ldmVudHMpID4g
MCwgZG9tYWlucykKKworICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVz
LkNwcEhlYWRlclByZWx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCisgICAg
ICAgIHNlY3Rpb25zLmV4dGVuZChtYXAoc2VsZi5fZ2VuZXJhdGVfZGlzcGF0Y2hlcl9kZWNsYXJh
dGlvbnNfZm9yX2RvbWFpbiwgZG9tYWlucykpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1w
bGF0ZShUZW1wbGF0ZXMuQ3BwSGVhZGVyUG9zdGx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFk
ZXJfYXJncykpCisgICAgICAgIHJldHVybiAiXG5cbiIuam9pbihzZWN0aW9ucykKKworICAgICMg
UHJpdmF0ZSBtZXRob2RzLgorCisgICAgZGVmIF9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9mb3Jf
cGFyYW1ldGVyKHNlbGYsIHBhcmFtZXRlciwgZXZlbnQpOgorICAgICAgICBlbnVtX2FyZ3MgPSB7
CisgICAgICAgICAgICAncGFyYW1ldGVyTmFtZSc6IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwK
KyAgICAgICAgICAgICdldmVudE5hbWUnOiBldmVudC5ldmVudF9uYW1lCisgICAgICAgIH0KKwor
ICAgICAgICBsaW5lcyA9IFtdCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICAvLyBOYW1l
ZCBhZnRlciBwYXJhbWV0ZXIgXCclKHBhcmFtZXRlck5hbWUpc1wnIHdoaWxlIGdlbmVyYXRpbmcg
Y29tbWFuZC9ldmVudCAlKGV2ZW50TmFtZSlzLicgJSBlbnVtX2FyZ3MpCisgICAgICAgIGxpbmVz
LmFwcGVuZCgnICAgICAgICBlbnVtIGNsYXNzICVzIHsnICUgdWNmaXJzdChwYXJhbWV0ZXIucGFy
YW1ldGVyX25hbWUpKQorICAgICAgICBmb3IgZW51bV92YWx1ZSBpbiBwYXJhbWV0ZXIudHlwZS5l
bnVtX3ZhbHVlcygpOgorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgICAgICAlcyA9
ICVkLCcgJSAoR2VuZXJhdG9yLnN0eWxpemVkX25hbWVfZm9yX2VudW1fdmFsdWUoZW51bV92YWx1
ZSksIHNlbGYuZW5jb2RpbmdfZm9yX2VudW1fdmFsdWUoZW51bV92YWx1ZSkpKQorICAgICAgICBs
aW5lcy5hcHBlbmQoJyAgICAgICAgfTsgLy8gZW51bSBjbGFzcyAlcycgJSB1Y2ZpcnN0KHBhcmFt
ZXRlci5wYXJhbWV0ZXJfbmFtZSkpCisgICAgICAgIHJldHVybiAiXG4iLmpvaW4obGluZXMpCisK
KyAgICBkZWYgX2dlbmVyYXRlX2Rpc3BhdGNoZXJfZGVjbGFyYXRpb25zX2Zvcl9kb21haW4oc2Vs
ZiwgZG9tYWluKToKKyAgICAgICAgY2xhc3NDb21wb25lbnRzID0gWydjbGFzcyddCisgICAgICAg
IGV4cG9ydE1hY3JvID0gc2VsZi5tb2RlbCgpLmZyYW1ld29yay5zZXR0aW5nKCdleHBvcnRfbWFj
cm8nLCBOb25lKQorICAgICAgICBpZiBleHBvcnRNYWNybyBpcyBub3QgTm9uZToKKyAgICAgICAg
ICAgIGNsYXNzQ29tcG9uZW50cy5hcHBlbmQoZXhwb3J0TWFjcm8pCisKKyAgICAgICAgdXNlZF9l
bnVtX25hbWVzID0gc2V0KFtdKQorCisgICAgICAgIGV2ZW50X2RlY2xhcmF0aW9ucyA9IFtdCisg
ICAgICAgIGZvciBldmVudCBpbiBkb21haW4uZXZlbnRzOgorICAgICAgICAgICAgZXZlbnRfZGVj
bGFyYXRpb25zLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9kaXNwYXRjaGVyX2RlY2xhcmF0aW9uX2Zv
cl9ldmVudChldmVudCwgZG9tYWluLCB1c2VkX2VudW1fbmFtZXMpKQorCisgICAgICAgIGhhbmRs
ZXJfYXJncyA9IHsKKyAgICAgICAgICAgICdjbGFzc0FuZEV4cG9ydE1hY3JvJzogIiAiLmpvaW4o
Y2xhc3NDb21wb25lbnRzKSwKKyAgICAgICAgICAgICdkb21haW5OYW1lJzogZG9tYWluLmRvbWFp
bl9uYW1lLAorICAgICAgICAgICAgJ2V2ZW50RGVjbGFyYXRpb25zJzogIlxuIi5qb2luKGV2ZW50
X2RlY2xhcmF0aW9ucykKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBHZW5lcmF0b3Iud3Jh
cF93aXRoX2d1YXJkX2Zvcl9kb21haW4oZG9tYWluLCBUZW1wbGF0ZShUZW1wbGF0ZXMuRnJvbnRl
bmREaXNwYXRjaGVyRG9tYWluRGlzcGF0Y2hlckRlY2xhcmF0aW9uKS5zdWJzdGl0dXRlKE5vbmUs
ICoqaGFuZGxlcl9hcmdzKSkKKworICAgIGRlZiBfZ2VuZXJhdGVfZGlzcGF0Y2hlcl9kZWNsYXJh
dGlvbl9mb3JfZXZlbnQoc2VsZiwgZXZlbnQsIGRvbWFpbiwgdXNlZF9lbnVtX25hbWVzKToKKyAg
ICAgICAgZm9ybWFsX3BhcmFtZXRlcnMgPSBbXQorICAgICAgICBsaW5lcyA9IFtdCisgICAgICAg
IGZvciBfcGFyYW1ldGVyIGluIGV2ZW50LmV2ZW50X3BhcmFtZXRlcnM6CisgICAgICAgICAgICBm
b3JtYWxfcGFyYW1ldGVycy5hcHBlbmQoJyVzICVzJyAlIChHZW5lcmF0b3IudHlwZV9zdHJpbmdf
Zm9yX2NoZWNrZWRfZm9ybWFsX2luX3BhcmFtZXRlcihfcGFyYW1ldGVyKSwgX3BhcmFtZXRlci5w
YXJhbWV0ZXJfbmFtZSkpCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKF9wYXJhbWV0ZXIudHlw
ZSwgRW51bVR5cGUpIGFuZCBfcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lIG5vdCBpbiB1c2VkX2Vu
dW1fbmFtZXM6CisgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2Fu
b255bW91c19lbnVtX2Zvcl9wYXJhbWV0ZXIoX3BhcmFtZXRlciwgZXZlbnQpKQorICAgICAgICAg
ICAgICAgIHVzZWRfZW51bV9uYW1lcy5hZGQoX3BhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkKKwor
ICAgICAgICBsaW5lcy5hcHBlbmQoIiAgICB2b2lkICVzKCVzKTsiICUgKGV2ZW50LmV2ZW50X25h
bWUsICIsICIuam9pbihmb3JtYWxfcGFyYW1ldGVycykpKQorICAgICAgICByZXR1cm4gIlxuIi5q
b2luKGxpbmVzKQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0
aW9uLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4v
Z2VuZXJhdGVfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4wN2QzNDI1NWMxZGYxMGY3YjgwNTJmNDUwOGVjM2YxMmQzYWMxMTg3Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2Vu
ZXJhdGVfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQpAQCAtMCwwICsxLDEz
MSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIENvcHlyaWdodCAoYykgMjAxNCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoYykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisjIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyMgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorCisKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgb3MucGF0aAor
aW1wb3J0IHJlCitpbXBvcnQgc3RyaW5nCisKK2Zyb20gZ2VuZXJhdG9yIGltcG9ydCBHZW5lcmF0
b3IsIHVjZmlyc3QKK2Zyb20gc3RyaW5nIGltcG9ydCBUZW1wbGF0ZQorZnJvbSBnZW5lcmF0b3Jf
dGVtcGxhdGVzIGltcG9ydCBHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgVGVtcGxhdGVzCitmcm9tIG1v
ZGVscyBpbXBvcnQgT2JqZWN0VHlwZSwgQXJyYXlUeXBlCisKKyMgVXNlIGEgZ2xvYmFsIGxvZ2dl
ciwgd2hpY2ggbm9ybWFsbHkgb25seSBsb2dzIGVycm9ycy4KK2xvZyA9IGxvZ2dpbmcuZ2V0TG9n
Z2VyKCdnbG9iYWwnKQorCisKK2NsYXNzIEZyb250ZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9u
R2VuZXJhdG9yKEdlbmVyYXRvcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1
dF9maWxlcGF0aCk6CisgICAgICAgIHNlbGYuX21vZGVsID0gbW9kZWwKKyAgICAgICAgc2VsZi5f
aW5wdXRfZmlsZXBhdGggPSBpbnB1dF9maWxlcGF0aAorCisgICAgZGVmIG1vZGVsKHNlbGYpOgor
ICAgICAgICByZXR1cm4gc2VsZi5fbW9kZWwKKworICAgIGRlZiBvdXRwdXRfZmlsZW5hbWUoc2Vs
Zik6CisgICAgICAgIHJldHVybiAiSW5zcGVjdG9yJXNGcm9udGVuZERpc3BhdGNoZXJzLmNwcCIg
JSBzZWxmLm1vZGVsKCkuZnJhbWV3b3JrLnNldHRpbmcoJ3ByZWZpeCcpCisKKyAgICBkZWYgZ2Vu
ZXJhdGVfbGljZW5zZShzZWxmKToKKyAgICAgICAgcmV0dXJuIFRlbXBsYXRlKFRlbXBsYXRlcy5D
b3B5cmlnaHRCbG9jaykuc3Vic3RpdHV0ZShOb25lLCBpbnB1dEZpbGVuYW1lPW9zLnBhdGguYmFz
ZW5hbWUoc2VsZi5faW5wdXRfZmlsZXBhdGgpKQorCisgICAgZGVmIGdlbmVyYXRlX291dHB1dChz
ZWxmKToKKyAgICAgICAgc2Vjb25kYXJ5X2hlYWRlcnMgPSBbJzx3dGYvdGV4dC9DU3RyaW5nLmg+
J10KKworICAgICAgICBzZWN0aW9ucyA9IFtdCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxm
LmdlbmVyYXRlX2xpY2Vuc2UoKSkKKyAgICAgICAgaGVhZGVyX2FyZ3MgPSB7CisgICAgICAgICAg
ICAncHJpbWFyeUluY2x1ZGUnOiAnIkluc3BlY3RvciVzRnJvbnRlbmREaXNwYXRjaGVycy5oIicg
JSBzZWxmLm1vZGVsKCkuZnJhbWV3b3JrLnNldHRpbmcoJ3ByZWZpeCcpLAorICAgICAgICAgICAg
J3NlY29uZGFyeUluY2x1ZGVzJzogIlxuIi5qb2luKFsnI2luY2x1ZGUgJXMnICUgaGVhZGVyIGZv
ciBoZWFkZXIgaW4gc2Vjb25kYXJ5X2hlYWRlcnNdKSwKKyAgICAgICAgICAgICdpbnB1dEZpbGVu
YW1lJzogc2VsZi5faW5wdXRfZmlsZXBhdGgKKyAgICAgICAgfQorCisgICAgICAgIGRvbWFpbnMg
PSBzZWxmLmRvbWFpbnNfdG9fZ2VuZXJhdGUoKQorICAgICAgICBkb21haW5zID0gZmlsdGVyKGxh
bWJkYSBkb21haW46IGxlbihkb21haW4uZXZlbnRzKSA+IDAsIGRvbWFpbnMpCisKKyAgICAgICAg
c2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKFRlbXBsYXRlcy5DcHBJbXBsZW1lbnRhdGlvblByZWx1
ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCisgICAgICAgIHNlY3Rpb25zLmV4
dGVuZChtYXAoc2VsZi5fZ2VuZXJhdGVfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbnNfZm9yX2Rv
bWFpbiwgZG9tYWlucykpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0
ZXMuQ3BwSW1wbGVtZW50YXRpb25Qb3N0bHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9h
cmdzKSkKKyAgICAgICAgcmV0dXJuICJcblxuIi5qb2luKHNlY3Rpb25zKQorCisgICAgIyBQcml2
YXRlIG1ldGhvZHMuCisKKyAgICBkZWYgX2dlbmVyYXRlX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRp
b25zX2Zvcl9kb21haW4oc2VsZiwgZG9tYWluKToKKyAgICAgICAgaW1wbGVtZW50YXRpb25zID0g
W10KKyAgICAgICAgZm9yIF9ldmVudCBpbiBkb21haW4uZXZlbnRzOgorICAgICAgICAgICAgaW1w
bGVtZW50YXRpb25zLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9kaXNwYXRjaGVyX2ltcGxlbWVudGF0
aW9uX2Zvcl9ldmVudChfZXZlbnQsIGRvbWFpbikpCisKKyAgICAgICAgcmV0dXJuIEdlbmVyYXRv
ci53cmFwX3dpdGhfZ3VhcmRfZm9yX2RvbWFpbihkb21haW4sICJcblxuIi5qb2luKGltcGxlbWVu
dGF0aW9ucykpCisKKyAgICBkZWYgX2dlbmVyYXRlX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb25f
Zm9yX2V2ZW50KHNlbGYsIGV2ZW50LCBkb21haW4pOgorICAgICAgICBsaW5lcyA9IFtdCisgICAg
ICAgIHBhcmFtZXRlcl9hc3NpZ25tZW50cyA9IFtdCisgICAgICAgIGZvcm1hbF9wYXJhbWV0ZXJz
ID0gW10KKworICAgICAgICBmb3IgX3BhcmFtZXRlciBpbiBldmVudC5ldmVudF9wYXJhbWV0ZXJz
OgorCisgICAgICAgICAgICBwYXJhbWV0ZXJfdmFsdWUgPSBfcGFyYW1ldGVyLnBhcmFtZXRlcl9u
YW1lCisgICAgICAgICAgICBpZiBfcGFyYW1ldGVyLmlzX29wdGlvbmFsIGFuZCBub3QgR2VuZXJh
dG9yLnNob3VsZF9wYXNzX2J5X2NvcHlfZm9yX3JldHVybl90eXBlKF9wYXJhbWV0ZXIudHlwZSk6
CisgICAgICAgICAgICAgICAgcGFyYW1ldGVyX3ZhbHVlID0gJyonICsgcGFyYW1ldGVyX3ZhbHVl
CisgICAgICAgICAgICBpZiBfcGFyYW1ldGVyLnR5cGUuaXNfZW51bSgpOgorICAgICAgICAgICAg
ICAgIGZyYW1ld29ya19wcmVmaXggPSBzZWxmLm1vZGVsKCkuZnJhbWV3b3JrLnNldHRpbmcoJ3By
ZWZpeCcpCisgICAgICAgICAgICAgICAgcGFyYW1ldGVyX3ZhbHVlID0gJ0luc3BlY3Rvcjo6VHlw
ZUJ1aWxkZXI6OmdldCVzRW51bUNvbnN0YW50VmFsdWUoJXMpJyAlIChmcmFtZXdvcmtfcHJlZml4
LCBwYXJhbWV0ZXJfdmFsdWUpCisKKyAgICAgICAgICAgIHBhcmFtZXRlcl9hcmdzID0geworICAg
ICAgICAgICAgICAgICdwYXJhbWV0ZXJUeXBlJzogR2VuZXJhdG9yLnR5cGVfc3RyaW5nX2Zvcl9z
dGFja19vdXRfcGFyYW1ldGVyKF9wYXJhbWV0ZXIpLAorICAgICAgICAgICAgICAgICdwYXJhbWV0
ZXJOYW1lJzogX3BhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwKKyAgICAgICAgICAgICAgICAncGFy
YW1ldGVyVmFsdWUnOiBwYXJhbWV0ZXJfdmFsdWUsCisgICAgICAgICAgICAgICAgJ2tleWVkU2V0
TWV0aG9kJzogR2VuZXJhdG9yLmtleWVkX3NldF9tZXRob2RfZm9yX3R5cGUoX3BhcmFtZXRlci50
eXBlKSwKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgX3BhcmFtZXRlci5pc19vcHRp
b25hbDoKKyAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAg
aWYgKCUocGFyYW1ldGVyTmFtZSlzKScgJSBwYXJhbWV0ZXJfYXJncykKKyAgICAgICAgICAgICAg
ICBwYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAgICAgIHBhcmFtc09iamVjdC0+JShr
ZXllZFNldE1ldGhvZClzKEFTQ0lJTGl0ZXJhbCgiJShwYXJhbWV0ZXJOYW1lKXMiKSwgJShwYXJh
bWV0ZXJWYWx1ZSlzKTsnICUgcGFyYW1ldGVyX2FyZ3MpCisgICAgICAgICAgICBlbHNlOgorICAg
ICAgICAgICAgICAgIHBhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICBwYXJhbXNPYmpl
Y3QtPiUoa2V5ZWRTZXRNZXRob2QpcyhBU0NJSUxpdGVyYWwoIiUocGFyYW1ldGVyTmFtZSlzIiks
ICUocGFyYW1ldGVyVmFsdWUpcyk7JyAlIHBhcmFtZXRlcl9hcmdzKQorCisgICAgICAgICAgICBm
b3JtYWxfcGFyYW1ldGVycy5hcHBlbmQoJyVzICVzJyAlIChHZW5lcmF0b3IudHlwZV9zdHJpbmdf
Zm9yX2NoZWNrZWRfZm9ybWFsX2luX3BhcmFtZXRlcihfcGFyYW1ldGVyKSwgX3BhcmFtZXRlci5w
YXJhbWV0ZXJfbmFtZSkpCisKKyAgICAgICAgZXZlbnRfYXJncyA9IHsKKyAgICAgICAgICAgICdk
b21haW5OYW1lJzogZG9tYWluLmRvbWFpbl9uYW1lLAorICAgICAgICAgICAgJ2V2ZW50TmFtZSc6
IGV2ZW50LmV2ZW50X25hbWUsCisgICAgICAgICAgICAnZm9ybWFsUGFyYW1ldGVycyc6ICIsICIu
am9pbihmb3JtYWxfcGFyYW1ldGVycykKKyAgICAgICAgfQorCisgICAgICAgIGxpbmVzLmFwcGVu
ZCgndm9pZCBJbnNwZWN0b3IlKGRvbWFpbk5hbWUpc0Zyb250ZW5kRGlzcGF0Y2hlcjo6JShldmVu
dE5hbWUpcyglKGZvcm1hbFBhcmFtZXRlcnMpcyknICUgZXZlbnRfYXJncykKKyAgICAgICAgbGlu
ZXMuYXBwZW5kKCd7JykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4ganNvbk1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOycpCisgICAg
ICAgIGxpbmVzLmFwcGVuZCgnICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFs
KCJtZXRob2QiKSwgQVNDSUlMaXRlcmFsKCIlKGRvbWFpbk5hbWUpcy4lKGV2ZW50TmFtZSlzIikp
OycgJSBldmVudF9hcmdzKQorCisgICAgICAgIGlmIGxlbihwYXJhbWV0ZXJfYXNzaWdubWVudHMp
ID4gMDoKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IHBhcmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7JykKKyAgICAgICAg
ICAgIGxpbmVzLmV4dGVuZChwYXJhbWV0ZXJfYXNzaWdubWVudHMpCisgICAgICAgICAgICBsaW5l
cy5hcHBlbmQoJyAgICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicGFyYW1z
IiksIHBhcmFtc09iamVjdCk7JykKKworICAgICAgICBsaW5lcy5hcHBlbmQoJycpCisgICAgICAg
IGxpbmVzLmFwcGVuZCgnICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2Fn
ZVRvRnJvbnRlbmQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsnKQorICAgICAgICBsaW5l
cy5hcHBlbmQoJ30nKQorICAgICAgICByZXR1cm4gIlxuIi5qb2luKGxpbmVzKQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJh
dGVfdHlwZV9idWlsZGVyX2hlYWRlci5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX3R5cGVfYnVpbGRlcl9oZWFkZXIucHkKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uOTE5NGY3ZmVlM2ZlMWNlODY2NGU4Mjk3MWFlNWIxYWQwODA0Mzk1MQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2Vu
L2dlbmVyYXRlX3R5cGVfYnVpbGRlcl9oZWFkZXIucHkKQEAgLTAsMCArMSwzNTMgQEAKKyMhL3Vz
ci9iaW4vZW52IHB5dGhvbgorIyBDb3B5cmlnaHQgKGMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKGMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisj
IGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisjIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworIyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisjIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKworCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG9zLnBhdGgKK2ltcG9ydCByZQor
aW1wb3J0IHN0cmluZworCitmcm9tIGdlbmVyYXRvciBpbXBvcnQgR2VuZXJhdG9yLCB1Y2ZpcnN0
Citmcm9tIG1vZGVscyBpbXBvcnQgRW51bVR5cGUsIE9iamVjdFR5cGUsIFByaW1pdGl2ZVR5cGUs
IEFsaWFzZWRUeXBlLCBBcnJheVR5cGUsIEZyYW1ld29ya3MKK2Zyb20gc3RyaW5nIGltcG9ydCBU
ZW1wbGF0ZQorZnJvbSBnZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBHZW5lcmF0b3JUZW1wbGF0
ZXMgYXMgVGVtcGxhdGVzCisKKyMgVXNlIGEgZ2xvYmFsIGxvZ2dlciwgd2hpY2ggbm9ybWFsbHkg
b25seSBsb2dzIGVycm9ycy4KKyMgSXQgY2FuIGJlIGNvbmZpZ3VyZWQgdG8gbG9nIGRlYnVnIG1l
c3NhZ2VzIGZyb20gdGhlIENMSS4KK2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQor
CitjbGFzcyBUeXBlQnVpbGRlckhlYWRlckdlbmVyYXRvcihHZW5lcmF0b3IpOgorICAgIGRlZiBf
X2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpOgorICAgICAgICBzZWxmLl9tb2Rl
bCA9IG1vZGVsCisgICAgICAgIHNlbGYuX2lucHV0X2ZpbGVwYXRoID0gaW5wdXRfZmlsZXBhdGgK
KworICAgIGRlZiBtb2RlbChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX21vZGVsCisKKyAg
ICBkZWYgb3V0cHV0X2ZpbGVuYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gIkluc3BlY3RvciVz
VHlwZUJ1aWxkZXJzLmgiICUgc2VsZi5tb2RlbCgpLmZyYW1ld29yay5zZXR0aW5nKCdwcmVmaXgn
KQorCisgICAgZGVmIGdlbmVyYXRlX2xpY2Vuc2Uoc2VsZik6CisgICAgICAgIHJldHVybiBUZW1w
bGF0ZShUZW1wbGF0ZXMuQ29weXJpZ2h0QmxvY2spLnN1YnN0aXR1dGUoTm9uZSwgaW5wdXRGaWxl
bmFtZT1vcy5wYXRoLmJhc2VuYW1lKHNlbGYuX2lucHV0X2ZpbGVwYXRoKSkKKworICAgIGRlZiBn
ZW5lcmF0ZV9vdXRwdXQoc2VsZik6CisgICAgICAgIGRvbWFpbnMgPSBzZWxmLmRvbWFpbnNfdG9f
Z2VuZXJhdGUoKQorICAgICAgICBzZWxmLmNhbGN1bGF0ZV90eXBlc19yZXF1aXJpbmdfc2hhcGVf
YXNzZXJ0aW9ucyhkb21haW5zKQorCisgICAgICAgIGhlYWRlcnMgPSBzZXQoWworICAgICAgICAg
ICAgJzxpbnNwZWN0b3IvSW5zcGVjdG9yVHlwZUJ1aWxkZXIuaD4nLAorICAgICAgICAgICAgJzx3
dGYvQXNzZXJ0aW9ucy5oPicsCisgICAgICAgICAgICAnPHd0Zi9QYXNzUmVmUHRyLmg+JworICAg
ICAgICBdKQorCisgICAgICAgIGlmIHNlbGYubW9kZWwoKS5mcmFtZXdvcmsgaXMgbm90IEZyYW1l
d29ya3MuSmF2YVNjcmlwdENvcmU6CisgICAgICAgICAgICBoZWFkZXJzLmFkZCgnPGluc3BlY3Rv
ci9JbnNwZWN0b3JKU1R5cGVCdWlsZGVycy5oPicpCisKKyAgICAgICAgZXhwb3J0X21hY3JvID0g
c2VsZi5tb2RlbCgpLmZyYW1ld29yay5zZXR0aW5nKCdleHBvcnRfbWFjcm8nLCBOb25lKQorICAg
ICAgICBmcmFtZXdvcmtfcHJlZml4ID0gc2VsZi5tb2RlbCgpLmZyYW1ld29yay5zZXR0aW5nKCdw
cmVmaXgnKQorCisgICAgICAgIHNlY3Rpb25zID0gW10KKyAgICAgICAgc2VjdGlvbnMuYXBwZW5k
KHNlbGYuZ2VuZXJhdGVfbGljZW5zZSgpKQorICAgICAgICBoZWFkZXJfYXJncyA9IHsKKyAgICAg
ICAgICAgICdoZWFkZXJHdWFyZFN0cmluZyc6IHJlLnN1YignWy0uL10nLCAnXycsIHNlbGYub3V0
cHV0X2ZpbGVuYW1lKCkpLAorICAgICAgICAgICAgJ2luY2x1ZGVzJzogJ1xuJy5qb2luKFsnI2lu
Y2x1ZGUgJyArIGhlYWRlciBmb3IgaGVhZGVyIGluIHNvcnRlZChoZWFkZXJzKV0pLAorICAgICAg
ICAgICAgJ3R5cGVkZWZzJzogJycsCisgICAgICAgICAgICAnaW5wdXRGaWxlbmFtZSc6IHNlbGYu
X2lucHV0X2ZpbGVwYXRoCisgICAgICAgIH0KKworICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVt
cGxhdGUoVGVtcGxhdGVzLkNwcEhlYWRlclByZWx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFk
ZXJfYXJncykpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZCgnbmFtZXNwYWNlIFR5cGVCdWlsZGVy
IHsnKQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfZm9yd2FyZF9kZWNs
YXJhdGlvbnMoZG9tYWlucykpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLl9nZW5lcmF0
ZV90eXBlZGVmcyhkb21haW5zKSkKKyAgICAgICAgcmV0dXJuX3R5cGUgPSBbJ1N0cmluZyddCisg
ICAgICAgIGlmIGV4cG9ydF9tYWNybyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJldHVybl90
eXBlWzowXSA9IFtleHBvcnRfbWFjcm9dCisKKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKCclcyBn
ZXQlc0VudW1Db25zdGFudFZhbHVlKGludCBjb2RlKTsnICUgKCcgJy5qb2luKHJldHVybl90eXBl
KSwgZnJhbWV3b3JrX3ByZWZpeCkpCisKKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKCdcbicuam9p
bihbCisgICAgICAgICAgICAndGVtcGxhdGU8dHlwZW5hbWUgVD4gU3RyaW5nIGdldCVzRW51bUNv
bnN0YW50VmFsdWUoVCBlbnVtVmFsdWUpJyAlIGZyYW1ld29ya19wcmVmaXgsCisgICAgICAgICAg
ICAneycsCisgICAgICAgICAgICAnICAgIHJldHVybiBnZXQlc0VudW1Db25zdGFudFZhbHVlKHN0
YXRpY19jYXN0PGludD4oZW51bVZhbHVlKSk7JyAlIGZyYW1ld29ya19wcmVmaXgsCisgICAgICAg
ICAgICAnfSddKSkKKworICAgICAgICBidWlsZGVyX3NlY3Rpb25zID0gbWFwKHNlbGYuX2dlbmVy
YXRlX2J1aWxkZXJzX2Zvcl9kb21haW4sIGRvbWFpbnMpCisgICAgICAgIHNlY3Rpb25zLmV4dGVu
ZChmaWx0ZXIobGFtYmRhIHNlY3Rpb246IGxlbihzZWN0aW9uKSA+IDAsIGJ1aWxkZXJfc2VjdGlv
bnMpKQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfZm9yd2FyZF9kZWNs
YXJhdGlvbnNfZm9yX2JpbmRpbmdfdHJhaXRzKCkpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZCgn
fSAvLyBuYW1lc3BhY2UgVHlwZUJ1aWxkZXInKQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVt
cGxhdGUoVGVtcGxhdGVzLkNwcEhlYWRlclBvc3RsdWRlKS5zdWJzdGl0dXRlKE5vbmUsICoqaGVh
ZGVyX2FyZ3MpKQorICAgICAgICByZXR1cm4gIlxuXG4iLmpvaW4oc2VjdGlvbnMpCisKKyAgICAj
IFByaXZhdGUgbWV0aG9kcy4KKworICAgIGRlZiBfZ2VuZXJhdGVfZm9yd2FyZF9kZWNsYXJhdGlv
bnMoc2VsZiwgZG9tYWlucyk6CisgICAgICAgIHNlY3Rpb25zID0gW10KKworICAgICAgICBmb3Ig
ZG9tYWluIGluIGRvbWFpbnM6CisgICAgICAgICAgICBkZWNsYXJhdGlvbl90eXBlcyA9IFtkZWNs
LnR5cGUgZm9yIGRlY2wgaW4gZG9tYWluLnR5cGVfZGVjbGFyYXRpb25zXQorICAgICAgICAgICAg
b2JqZWN0X3R5cGVzID0gZmlsdGVyKGxhbWJkYSBfdHlwZTogaXNpbnN0YW5jZShfdHlwZSwgT2Jq
ZWN0VHlwZSksIGRlY2xhcmF0aW9uX3R5cGVzKQorICAgICAgICAgICAgZW51bV90eXBlcyA9IGZp
bHRlcihsYW1iZGEgX3R5cGU6IGlzaW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKSwgZGVjbGFyYXRp
b25fdHlwZXMpCisgICAgICAgICAgICBpZiBsZW4ob2JqZWN0X3R5cGVzKSArIGxlbihlbnVtX3R5
cGVzKSA9PSAwOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGRvbWFp
bl9saW5lcyA9IFtdCisgICAgICAgICAgICBkb21haW5fbGluZXMuYXBwZW5kKCduYW1lc3BhY2Ug
JXMgeycgJSBkb21haW4uZG9tYWluX25hbWUpCisKKyAgICAgICAgICAgIG9iamVjdF90eXBlX25h
bWVzID0gW190eXBlLnJhd19uYW1lKCkgZm9yIF90eXBlIGluIG9iamVjdF90eXBlc10KKyAgICAg
ICAgICAgIGVudW1fdHlwZV9uYW1lcyA9IFtfdHlwZS5yYXdfbmFtZSgpIGZvciBfdHlwZSBpbiBl
bnVtX3R5cGVzXQorCisgICAgICAgICAgICAjIEZvcndhcmQtZGVjbGFyZSBhbGwgY2xhc3NlcyBz
byB0aGUgdHlwZSBidWlsZGVycyB3b24ndCBicmVhayBpZiByZWFycmFuZ2VkLgorICAgICAgICAg
ICAgZG9tYWluX2xpbmVzLmV4dGVuZCgnY2xhc3MgJXM7JyAlIG5hbWUgZm9yIG5hbWUgaW4gc29y
dGVkKG9iamVjdF90eXBlX25hbWVzKSkKKyAgICAgICAgICAgIGRvbWFpbl9saW5lcy5leHRlbmQo
J2VudW0gY2xhc3MgJXM7JyAlIG5hbWUgZm9yIG5hbWUgaW4gc29ydGVkKGVudW1fdHlwZV9uYW1l
cykpCisgICAgICAgICAgICBkb21haW5fbGluZXMuYXBwZW5kKCd9IC8vICVzJyAlIGRvbWFpbi5k
b21haW5fbmFtZSkKKyAgICAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChHZW5lcmF0b3Iud3JhcF93
aXRoX2d1YXJkX2Zvcl9kb21haW4oZG9tYWluLCAnXG4nLmpvaW4oZG9tYWluX2xpbmVzKSkpCisK
KyAgICAgICAgaWYgbGVuKHNlY3Rpb25zKSA9PSAwOgorICAgICAgICAgICAgcmV0dXJuICcnCisg
ICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gIiIiLy8gRm9yd2FyZCBkZWNsYXJhdGlv
bnMuCislcworLy8gRW5kIG9mIGZvcndhcmQgZGVjbGFyYXRpb25zLgorIiIiICUgJ1xuXG4nLmpv
aW4oc2VjdGlvbnMpCisKKyAgICBkZWYgX2dlbmVyYXRlX3R5cGVkZWZzKHNlbGYsIGRvbWFpbnMp
OgorICAgICAgICBzZWN0aW9ucyA9IG1hcChzZWxmLl9nZW5lcmF0ZV90eXBlZGVmc19mb3JfZG9t
YWluLCBkb21haW5zKQorICAgICAgICBzZWN0aW9ucyA9IGZpbHRlcihsYW1iZGEgdGV4dDogbGVu
KHRleHQpID4gMCwgc2VjdGlvbnMpCisKKyAgICAgICAgaWYgbGVuKHNlY3Rpb25zKSA9PSAwOgor
ICAgICAgICAgICAgcmV0dXJuICcnCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4g
IiIiLy8gVHlwZWRlZnMuCislcworLy8gRW5kIG9mIHR5cGVkZWZzLiIiIiAlICdcblxuJy5qb2lu
KHNlY3Rpb25zKQorCisgICAgZGVmIF9nZW5lcmF0ZV90eXBlZGVmc19mb3JfZG9tYWluKHNlbGYs
IGRvbWFpbik6CisgICAgICAgIHByaW1pdGl2ZV9kZWNsYXJhdGlvbnMgPSBmaWx0ZXIobGFtYmRh
IGRlY2w6IGlzaW5zdGFuY2UoZGVjbC50eXBlLCBBbGlhc2VkVHlwZSksIGRvbWFpbi50eXBlX2Rl
Y2xhcmF0aW9ucykKKyAgICAgICAgaWYgbGVuKHByaW1pdGl2ZV9kZWNsYXJhdGlvbnMpID09IDA6
CisgICAgICAgICAgICByZXR1cm4gJycKKworICAgICAgICBzZWN0aW9ucyA9IFtdCisgICAgICAg
IGZvciBkZWNsYXJhdGlvbiBpbiBwcmltaXRpdmVfZGVjbGFyYXRpb25zOgorICAgICAgICAgICAg
cHJpbWl0aXZlX25hbWUgPSBHZW5lcmF0b3IuY3BwX25hbWVfZm9yX3ByaW1pdGl2ZV90eXBlKGRl
Y2xhcmF0aW9uLnR5cGUuYWxpYXNlZF90eXBlKQorICAgICAgICAgICAgdHlwZWRlZl9saW5lcyA9
IFtdCisgICAgICAgICAgICBpZiBsZW4oZGVjbGFyYXRpb24uZGVzY3JpcHRpb24pID4gMDoKKyAg
ICAgICAgICAgICAgICB0eXBlZGVmX2xpbmVzLmFwcGVuZCgnLyogJXMgKi8nICUgZGVjbGFyYXRp
b24uZGVzY3JpcHRpb24pCisgICAgICAgICAgICB0eXBlZGVmX2xpbmVzLmFwcGVuZCgndHlwZWRl
ZiAlcyAlczsnICUgKHByaW1pdGl2ZV9uYW1lLCBkZWNsYXJhdGlvbi50eXBlX25hbWUpKQorICAg
ICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKCdcbicuam9pbih0eXBlZGVmX2xpbmVzKSkKKworICAg
ICAgICBsaW5lcyA9IFtdCisgICAgICAgIGxpbmVzLmFwcGVuZCgnbmFtZXNwYWNlICVzIHsnICUg
ZG9tYWluLmRvbWFpbl9uYW1lKQorICAgICAgICBsaW5lcy5hcHBlbmQoJ1xuXG4nLmpvaW4oc2Vj
dGlvbnMpKQorICAgICAgICBsaW5lcy5hcHBlbmQoJ30gLy8gJXMnICUgZG9tYWluLmRvbWFpbl9u
YW1lKQorICAgICAgICByZXR1cm4gR2VuZXJhdG9yLndyYXBfd2l0aF9ndWFyZF9mb3JfZG9tYWlu
KGRvbWFpbiwgJ1xuJy5qb2luKGxpbmVzKSkKKworICAgIGRlZiBfZ2VuZXJhdGVfYnVpbGRlcnNf
Zm9yX2RvbWFpbihzZWxmLCBkb21haW4pOgorICAgICAgICBzZWN0aW9ucyA9IFtdCisKKyAgICAg
ICAgZm9yIHR5cGVfZGVjbGFyYXRpb24gaW4gZG9tYWluLnR5cGVfZGVjbGFyYXRpb25zOgorICAg
ICAgICAgICAgaWYgaXNpbnN0YW5jZSh0eXBlX2RlY2xhcmF0aW9uLnR5cGUsIEVudW1UeXBlKToK
KyAgICAgICAgICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfc3RydWN0X2Zv
cl9lbnVtX2RlY2xhcmF0aW9uKHR5cGVfZGVjbGFyYXRpb24pKQorICAgICAgICAgICAgZWxpZiBp
c2luc3RhbmNlKHR5cGVfZGVjbGFyYXRpb24udHlwZSwgT2JqZWN0VHlwZSk6CisgICAgICAgICAg
ICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2NsYXNzX2Zvcl9vYmplY3RfZGVj
bGFyYXRpb24odHlwZV9kZWNsYXJhdGlvbiwgZG9tYWluKSkKKworICAgICAgICBzZWN0aW9ucyA9
IGZpbHRlcihsYW1iZGEgc2VjdGlvbjogbGVuKHNlY3Rpb24pID4gMCwgc2VjdGlvbnMpCisgICAg
ICAgIGlmIGxlbihzZWN0aW9ucykgPT0gMDoKKyAgICAgICAgICAgIHJldHVybiAnJworCisgICAg
ICAgIGxpbmVzID0gW10KKyAgICAgICAgbGluZXMuYXBwZW5kKCduYW1lc3BhY2UgJXMgeycgJSBk
b21haW4uZG9tYWluX25hbWUpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnXG4nLmpvaW4oc2VjdGlv
bnMpKQorICAgICAgICBsaW5lcy5hcHBlbmQoJ30gLy8gJXMnICUgZG9tYWluLmRvbWFpbl9uYW1l
KQorICAgICAgICByZXR1cm4gR2VuZXJhdG9yLndyYXBfd2l0aF9ndWFyZF9mb3JfZG9tYWluKGRv
bWFpbiwgJ1xuJy5qb2luKGxpbmVzKSkKKworICAgIGRlZiBfZ2VuZXJhdGVfY2xhc3NfZm9yX29i
amVjdF9kZWNsYXJhdGlvbihzZWxmLCB0eXBlX2RlY2xhcmF0aW9uLCBkb21haW4pOgorICAgICAg
ICBpZiBsZW4odHlwZV9kZWNsYXJhdGlvbi50eXBlX21lbWJlcnMpID09IDA6CisgICAgICAgICAg
ICByZXR1cm4gJycKKworICAgICAgICBlbnVtX21lbWJlcnMgPSBmaWx0ZXIobGFtYmRhIG1lbWJl
cjogaXNpbnN0YW5jZShtZW1iZXIudHlwZSwgRW51bVR5cGUpIGFuZCBtZW1iZXIudHlwZS5pc19h
bm9ueW1vdXMsIHR5cGVfZGVjbGFyYXRpb24udHlwZV9tZW1iZXJzKQorICAgICAgICByZXF1aXJl
ZF9tZW1iZXJzID0gZmlsdGVyKGxhbWJkYSBtZW1iZXI6IG5vdCBtZW1iZXIuaXNfb3B0aW9uYWws
IHR5cGVfZGVjbGFyYXRpb24udHlwZV9tZW1iZXJzKQorICAgICAgICBvcHRpb25hbF9tZW1iZXJz
ID0gZmlsdGVyKGxhbWJkYSBtZW1iZXI6IG1lbWJlci5pc19vcHRpb25hbCwgdHlwZV9kZWNsYXJh
dGlvbi50eXBlX21lbWJlcnMpCisgICAgICAgIG9iamVjdF9uYW1lID0gdHlwZV9kZWNsYXJhdGlv
bi50eXBlX25hbWUKKworICAgICAgICBsaW5lcyA9IFtdCisgICAgICAgIGlmIGxlbih0eXBlX2Rl
Y2xhcmF0aW9uLmRlc2NyaXB0aW9uKSA+IDA6CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJy8q
ICVzICovJyAlIHR5cGVfZGVjbGFyYXRpb24uZGVzY3JpcHRpb24pCisgICAgICAgIGJhc2VfY2xh
c3MgPSAnSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QnCisgICAgICAgIGlmIG5vdCBHZW5lcmF0
b3IudHlwZV9oYXNfb3Blbl9maWVsZHModHlwZV9kZWNsYXJhdGlvbi50eXBlKToKKyAgICAgICAg
ICAgIGJhc2VfY2xhc3MgPSBiYXNlX2NsYXNzICsgJ0Jhc2UnCisgICAgICAgIGxpbmVzLmFwcGVu
ZCgnY2xhc3MgJXMgOiBwdWJsaWMgJXMgeycgJSAob2JqZWN0X25hbWUsIGJhc2VfY2xhc3MpKQor
ICAgICAgICBsaW5lcy5hcHBlbmQoJ3B1YmxpYzonKQorICAgICAgICBmb3IgZW51bV9tZW1iZXIg
aW4gZW51bV9tZW1iZXJzOgorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgLy8gTmFtZWQg
YWZ0ZXIgcHJvcGVydHkgbmFtZSBcJyVzXCcgd2hpbGUgZ2VuZXJhdGluZyAlcy4nICUgKGVudW1f
bWVtYmVyLm1lbWJlcl9uYW1lLCBvYmplY3RfbmFtZSkpCisgICAgICAgICAgICBsaW5lcy5hcHBl
bmQoc2VsZi5fZ2VuZXJhdGVfc3RydWN0X2Zvcl9hbm9ueW1vdXNfZW51bV9tZW1iZXIoZW51bV9t
ZW1iZXIpKQorICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYnVpbGRlcl9zdGF0
ZV9lbnVtKHR5cGVfZGVjbGFyYXRpb24pKQorCisgICAgICAgIGNvbnN0cnVjdG9yX2V4YW1wbGUg
PSBbXQorICAgICAgICBjb25zdHJ1Y3Rvcl9leGFtcGxlLmFwcGVuZCgnICAgICAqIFJlZlB0cjwl
cz4gcmVzdWx0ID0gJXM6OmNyZWF0ZSgpJyAlIChvYmplY3RfbmFtZSwgb2JqZWN0X25hbWUpKQor
ICAgICAgICBmb3IgbWVtYmVyIGluIHJlcXVpcmVkX21lbWJlcnM6CisgICAgICAgICAgICBjb25z
dHJ1Y3Rvcl9leGFtcGxlLmFwcGVuZCgnICAgICAqICAgICAuc2V0JXMoLi4uKScgJSB1Y2ZpcnN0
KG1lbWJlci5tZW1iZXJfbmFtZSkpCisKKyAgICAgICAgYnVpbGRlcl9hcmdzID0geworICAgICAg
ICAgICAgJ29iamVjdFR5cGUnOiBvYmplY3RfbmFtZSwKKyAgICAgICAgICAgICdjb25zdHJ1Y3Rv
ckV4YW1wbGUnOiAnXG4nLmpvaW4oY29uc3RydWN0b3JfZXhhbXBsZSkgKyAnOycsCisgICAgICAg
IH0KKworICAgICAgICBsaW5lcy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVzLlR5cGVCdWlsZGVy
RGVjbGFyYXRpb25QcmVsdWRlKS5zdWJzdGl0dXRlKE5vbmUsICoqYnVpbGRlcl9hcmdzKSkKKyAg
ICAgICAgZm9yIHR5cGVfbWVtYmVyIGluIHJlcXVpcmVkX21lbWJlcnM6CisgICAgICAgICAgICBs
aW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYnVpbGRlcl9zZXR0ZXJfZm9yX21lbWJlcih0eXBl
X21lbWJlciwgZG9tYWluKSkKKyAgICAgICAgbGluZXMuYXBwZW5kKFRlbXBsYXRlKFRlbXBsYXRl
cy5UeXBlQnVpbGRlckRlY2xhcmF0aW9uUG9zdGx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipidWls
ZGVyX2FyZ3MpKQorICAgICAgICBmb3IgbWVtYmVyIGluIG9wdGlvbmFsX21lbWJlcnM6CisgICAg
ICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfdW5jaGVja2VkX3NldHRlcl9mb3Jf
bWVtYmVyKG1lbWJlciwgZG9tYWluKSkKKworICAgICAgICBpZiBHZW5lcmF0b3IudHlwZV9oYXNf
b3Blbl9maWVsZHModHlwZV9kZWNsYXJhdGlvbi50eXBlKToKKyAgICAgICAgICAgIGxpbmVzLmFw
cGVuZCgnJykKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIC8vIFByb3BlcnR5IG5hbWVz
IGZvciB0eXBlIGdlbmVyYXRlZCBhcyBvcGVuLicpCisgICAgICAgICAgICBmb3IgdHlwZV9tZW1i
ZXIgaW4gdHlwZV9kZWNsYXJhdGlvbi50eXBlX21lbWJlcnM6CisgICAgICAgICAgICAgICAgbGlu
ZXMuYXBwZW5kKCcgICAgc3RhdGljIGNvbnN0IGNoYXIqICVzOycgJSB1Y2ZpcnN0KHR5cGVfbWVt
YmVyLm1lbWJlcl9uYW1lKSkKKworICAgICAgICBsaW5lcy5hcHBlbmQoJ307JykKKyAgICAgICAg
bGluZXMuYXBwZW5kKCcnKQorICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQorCisgICAg
ZGVmIF9nZW5lcmF0ZV9zdHJ1Y3RfZm9yX2VudW1fZGVjbGFyYXRpb24oc2VsZiwgZW51bV9kZWNs
YXJhdGlvbik6CisgICAgICAgIGxpbmVzID0gW10KKyAgICAgICAgbGluZXMuYXBwZW5kKCcvKiAl
cyAqLycgJSBlbnVtX2RlY2xhcmF0aW9uLmRlc2NyaXB0aW9uKQorICAgICAgICBsaW5lcy5leHRl
bmQoc2VsZi5fZ2VuZXJhdGVfc3RydWN0X2Zvcl9lbnVtX3R5cGUoZW51bV9kZWNsYXJhdGlvbi50
eXBlX25hbWUsIGVudW1fZGVjbGFyYXRpb24udHlwZSkpCisgICAgICAgIHJldHVybiAnXG4nLmpv
aW4obGluZXMpCisKKyAgICBkZWYgX2dlbmVyYXRlX3N0cnVjdF9mb3JfYW5vbnltb3VzX2VudW1f
bWVtYmVyKHNlbGYsIGVudW1fbWVtYmVyKToKKyAgICAgICAgZGVmIGFwcGx5X2luZGVudGF0aW9u
KGxpbmUpOgorICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCgnIycsICcvKicsICcqLycs
ICcvLycpKSBvciBsZW4obGluZSkgaXMgMDoKKyAgICAgICAgICAgICAgICByZXR1cm4gbGluZQor
ICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gJyAgICAnICsgbGluZQor
CisgICAgICAgIGluZGVudGVkX2xpbmVzID0gbWFwKGFwcGx5X2luZGVudGF0aW9uLCBzZWxmLl9n
ZW5lcmF0ZV9zdHJ1Y3RfZm9yX2VudW1fdHlwZShlbnVtX21lbWJlci5tZW1iZXJfbmFtZSwgZW51
bV9tZW1iZXIudHlwZSkpCisgICAgICAgIHJldHVybiAnXG4nLmpvaW4oaW5kZW50ZWRfbGluZXMp
CisKKyAgICBkZWYgX2dlbmVyYXRlX3N0cnVjdF9mb3JfZW51bV90eXBlKHNlbGYsIGVudW1fbmFt
ZSwgZW51bV90eXBlKToKKyAgICAgICAgbGluZXMgPSBbXQorICAgICAgICBlbnVtX25hbWUgPSB1
Y2ZpcnN0KGVudW1fbmFtZSkKKyAgICAgICAgbGluZXMuYXBwZW5kKCdlbnVtIGNsYXNzICVzIHsn
ICUgZW51bV9uYW1lKQorICAgICAgICBmb3IgZW51bV92YWx1ZSBpbiBlbnVtX3R5cGUuZW51bV92
YWx1ZXMoKToKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICVzID0gJXMsJyAlIChHZW5l
cmF0b3Iuc3R5bGl6ZWRfbmFtZV9mb3JfZW51bV92YWx1ZShlbnVtX3ZhbHVlKSwgc2VsZi5lbmNv
ZGluZ19mb3JfZW51bV92YWx1ZShlbnVtX3ZhbHVlKSkpCisgICAgICAgIGxpbmVzLmFwcGVuZCgn
fTsgLy8gZW51bSBjbGFzcyAlcycgJSBlbnVtX25hbWUpCisgICAgICAgIHJldHVybiBsaW5lcyAg
IyBUaGUgY2FsbGVyIG1heSB3YW50IHRvIGFkanVzdCBpbmRlbnRhdGlvbiwgc28gZG9uJ3Qgam9p
biB0aGVzZSBsaW5lcy4KKworICAgIGRlZiBfZ2VuZXJhdGVfYnVpbGRlcl9zdGF0ZV9lbnVtKHNl
bGYsIHR5cGVfZGVjbGFyYXRpb24pOgorICAgICAgICBsaW5lcyA9IFtdCisgICAgICAgIHJlcXVp
cmVkX21lbWJlcnMgPSBmaWx0ZXIobGFtYmRhIG1lbWJlcjogbm90IG1lbWJlci5pc19vcHRpb25h
bCwgdHlwZV9kZWNsYXJhdGlvbi50eXBlX21lbWJlcnMpCisgICAgICAgIGVudW1fdmFsdWVzID0g
W10KKworICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBlbnVtIHsnKQorICAgICAgICBsaW5lcy5h
cHBlbmQoJyAgICAgICAgTm9GaWVsZHNTZXQgPSAwLCcpCisgICAgICAgIGZvciBpIGluIHJhbmdl
KGxlbihyZXF1aXJlZF9tZW1iZXJzKSk6CisgICAgICAgICAgICBlbnVtX3ZhbHVlID0gIiVzU2V0
IiAlIHVjZmlyc3QocmVxdWlyZWRfbWVtYmVyc1tpXS5tZW1iZXJfbmFtZSkKKyAgICAgICAgICAg
IGVudW1fdmFsdWVzLmFwcGVuZChlbnVtX3ZhbHVlKQorICAgICAgICAgICAgbGluZXMuYXBwZW5k
KCcgICAgICAgICVzID0gMSA8PCAlZCwnICUgKGVudW1fdmFsdWUsIGkpKQorICAgICAgICBpZiBs
ZW4oZW51bV92YWx1ZXMpID4gMDoKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBB
bGxGaWVsZHNTZXQgPSAoJXMpJyAlICcgfCAnLmpvaW4oZW51bV92YWx1ZXMpKQorICAgICAgICBl
bHNlOgorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIEFsbEZpZWxkc1NldCA9IDAn
KQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICB9OycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgn
JykKKyAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKKworICAgIGRlZiBfZ2VuZXJhdGVf
YnVpbGRlcl9zZXR0ZXJfZm9yX21lbWJlcihzZWxmLCB0eXBlX21lbWJlciwgZG9tYWluKToKKyAg
ICAgICAgc2V0dGVyX2FyZ3MgPSB7CisgICAgICAgICAgICAnY2FtZWxOYW1lJzogdWNmaXJzdCh0
eXBlX21lbWJlci5tZW1iZXJfbmFtZSksCisgICAgICAgICAgICAnZnJhbWV3b3JrUHJlZml4Jzog
c2VsZi5tb2RlbCgpLmZyYW1ld29yay5zZXR0aW5nKCdwcmVmaXgnKSwKKyAgICAgICAgICAgICdr
ZXllZFNldCc6IEdlbmVyYXRvci5rZXllZF9zZXRfbWV0aG9kX2Zvcl90eXBlKHR5cGVfbWVtYmVy
LnR5cGUpLAorICAgICAgICAgICAgJ25hbWUnOiB0eXBlX21lbWJlci5tZW1iZXJfbmFtZSwKKyAg
ICAgICAgICAgICdwYXJhbWV0ZXJUeXBlJzogR2VuZXJhdG9yLnR5cGVfc3RyaW5nX2Zvcl90eXBl
X21lbWJlcih0eXBlX21lbWJlcikKKyAgICAgICAgfQorCisgICAgICAgIGxpbmVzID0gW10KKyAg
ICAgICAgbGluZXMuYXBwZW5kKCcnKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgQnVp
bGRlcjxTVEFURSB8ICUoY2FtZWxOYW1lKXNTZXQ+JiBzZXQlKGNhbWVsTmFtZSlzKCUocGFyYW1l
dGVyVHlwZSlzIHZhbHVlKScgJSBzZXR0ZXJfYXJncykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcg
ICAgICAgIHsnKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKCEoU1RBVEUgJiAlKGNhbWVsTmFtZSlzU2V0KSwgcHJvcGVydHlfJShuYW1lKXNfYWxyZWFk
eV9zZXQpOycgJSBzZXR0ZXJfYXJncykKKworICAgICAgICBpZiBpc2luc3RhbmNlKHR5cGVfbWVt
YmVyLnR5cGUsIEVudW1UeXBlKToKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICAg
ICAgbV9yZXN1bHQtPiUoa2V5ZWRTZXQpcyhBU0NJSUxpdGVyYWwoIiUobmFtZSlzIiksIEluc3Bl
Y3Rvcjo6VHlwZUJ1aWxkZXI6OmdldCUoZnJhbWV3b3JrUHJlZml4KXNFbnVtQ29uc3RhbnRWYWx1
ZShzdGF0aWNfY2FzdDxpbnQ+KHZhbHVlKSkpOycgJSBzZXR0ZXJfYXJncykKKyAgICAgICAgZWxz
ZToKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICAgICAgbV9yZXN1bHQtPiUoa2V5
ZWRTZXQpcyhBU0NJSUxpdGVyYWwoIiUobmFtZSlzIiksIHZhbHVlKTsnICUgc2V0dGVyX2FyZ3Mp
CisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTwlKGNh
bWVsTmFtZSlzU2V0PigpOycgJSBzZXR0ZXJfYXJncykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcg
ICAgICAgIH0nKQorICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQorCisgICAgZGVmIF9n
ZW5lcmF0ZV91bmNoZWNrZWRfc2V0dGVyX2Zvcl9tZW1iZXIoc2VsZiwgdHlwZV9tZW1iZXIsIGRv
bWFpbik6CisgICAgICAgIHNldHRlcl9hcmdzID0geworICAgICAgICAgICAgJ2NhbWVsTmFtZSc6
IHVjZmlyc3QodHlwZV9tZW1iZXIubWVtYmVyX25hbWUpLAorICAgICAgICAgICAgJ2ZyYW1ld29y
a1ByZWZpeCc6IHNlbGYubW9kZWwoKS5mcmFtZXdvcmsuc2V0dGluZygncHJlZml4JyksCisgICAg
ICAgICAgICAna2V5ZWRTZXQnOiBHZW5lcmF0b3Iua2V5ZWRfc2V0X21ldGhvZF9mb3JfdHlwZSh0
eXBlX21lbWJlci50eXBlKSwKKyAgICAgICAgICAgICduYW1lJzogdHlwZV9tZW1iZXIubWVtYmVy
X25hbWUsCisgICAgICAgICAgICAncGFyYW1ldGVyVHlwZSc6IEdlbmVyYXRvci50eXBlX3N0cmlu
Z19mb3JfdHlwZV9tZW1iZXIodHlwZV9tZW1iZXIpCisgICAgICAgIH0KKworICAgICAgICBsaW5l
cyA9IFtdCisgICAgICAgIGxpbmVzLmFwcGVuZCgnJykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcg
ICAgdm9pZCBzZXQlKGNhbWVsTmFtZSlzKCUocGFyYW1ldGVyVHlwZSlzIHZhbHVlKScgJSBzZXR0
ZXJfYXJncykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgeycpCisgICAgICAgIGlmIGlzaW5z
dGFuY2UodHlwZV9tZW1iZXIudHlwZSwgRW51bVR5cGUpOgorICAgICAgICAgICAgbGluZXMuYXBw
ZW5kKCcgICAgICAgIHRoaXMtPiUoa2V5ZWRTZXQpcyhBU0NJSUxpdGVyYWwoIiUobmFtZSlzIiks
IEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OmdldCUoZnJhbWV3b3JrUHJlZml4KXNFbnVtQ29uc3Rh
bnRWYWx1ZShzdGF0aWNfY2FzdDxpbnQ+KHZhbHVlKSkpOycgJSBzZXR0ZXJfYXJncykKKyAgICAg
ICAgZWxzZToKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICB0aGlzLT4lKGtleWVk
U2V0KXMoQVNDSUlMaXRlcmFsKCIlKG5hbWUpcyIpLCB2YWx1ZSk7JyAlIHNldHRlcl9hcmdzKQor
ICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICB9JykKKyAgICAgICAgaWYgdHlwZV9tZW1iZXIubWVt
YmVyX25hbWUgaW4gWyd2YWx1ZScsICdhcnJheScsICdzdHJpbmcnLCAnbnVtYmVyJywgJ2ludGVn
ZXInXToKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIHVzaW5nIEluc3BlY3Rvcjo6SW5z
cGVjdG9yT2JqZWN0QmFzZTo6c2V0JXM7JyAlIHVjZmlyc3QodHlwZV9tZW1iZXIubWVtYmVyX25h
bWUpKQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcnKQorICAgICAgICByZXR1cm4gJ1xuJy5q
b2luKGxpbmVzKQorCisgICAgZGVmIF9nZW5lcmF0ZV9mb3J3YXJkX2RlY2xhcmF0aW9uc19mb3Jf
YmluZGluZ190cmFpdHMoc2VsZik6CisgICAgICAgICMgQSBsaXN0IG9mIChidWlsZGVyX3R5cGUs
IG5lZWRzX3J1bnRpbWVfY2FzdCkKKyAgICAgICAgdHlwZV9hcmd1bWVudHMgPSBbXQorCisgICAg
ICAgIGZvciBkb21haW4gaW4gc2VsZi5kb21haW5zX3RvX2dlbmVyYXRlKCk6CisgICAgICAgICAg
ICBkZWNsYXJhdGlvbnNfdG9fZ2VuZXJhdGUgPSBmaWx0ZXIobGFtYmRhIGRlY2w6IHNlbGYudHlw
ZV9uZWVkc19zaGFwZV9hc3NlcnRpb25zKGRlY2wudHlwZSksIGRvbWFpbi50eXBlX2RlY2xhcmF0
aW9ucykKKworICAgICAgICAgICAgZm9yIHR5cGVfZGVjbGFyYXRpb24gaW4gZGVjbGFyYXRpb25z
X3RvX2dlbmVyYXRlOgorICAgICAgICAgICAgICAgIGZvciB0eXBlX21lbWJlciBpbiB0eXBlX2Rl
Y2xhcmF0aW9uLnR5cGVfbWVtYmVyczoKKyAgICAgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5j
ZSh0eXBlX21lbWJlci50eXBlLCBFbnVtVHlwZSk6CisgICAgICAgICAgICAgICAgICAgICAgICB0
eXBlX2FyZ3VtZW50cy5hcHBlbmQoKEdlbmVyYXRvci50eXBlX2J1aWxkZXJfc3RyaW5nX2Zvcl90
eXBlX21lbWJlcih0eXBlX21lbWJlciwgdHlwZV9kZWNsYXJhdGlvbiksIEZhbHNlKSkKKworICAg
ICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodHlwZV9kZWNsYXJhdGlvbi50eXBlLCBPYmplY3RU
eXBlKToKKyAgICAgICAgICAgICAgICAgICAgdHlwZV9hcmd1bWVudHMuYXBwZW5kKChHZW5lcmF0
b3IudHlwZV9idWlsZGVyX3N0cmluZ19mb3JfdHlwZSh0eXBlX2RlY2xhcmF0aW9uLnR5cGUpLCBH
ZW5lcmF0b3IudHlwZV9uZWVkc19ydW50aW1lX2Nhc3RzKHR5cGVfZGVjbGFyYXRpb24udHlwZSkp
KQorCisgICAgICAgIHN0cnVjdF9rZXl3b3JkcyA9IFsnc3RydWN0J10KKyAgICAgICAgZXhwb3J0
X21hY3JvID0gc2VsZi5tb2RlbCgpLmZyYW1ld29yay5zZXR0aW5nKCdleHBvcnRfbWFjcm8nLCBO
b25lKQorICAgICAgICBpZiBleHBvcnRfbWFjcm8gaXMgbm90IE5vbmU6CisgICAgICAgICAgICBz
dHJ1Y3Rfa2V5d29yZHMuYXBwZW5kKGV4cG9ydF9tYWNybykKKworICAgICAgICBsaW5lcyA9IFtd
CisgICAgICAgIGZvciBhcmd1bWVudCBpbiB0eXBlX2FyZ3VtZW50czoKKyAgICAgICAgICAgIGxp
bmVzLmFwcGVuZCgndGVtcGxhdGU8PiAlcyBCaW5kaW5nVHJhaXRzPCVzPiB7JyAlICgnICcuam9p
bihzdHJ1Y3Rfa2V5d29yZHMpLCBhcmd1bWVudFswXSkpCisgICAgICAgICAgICBpZiBhcmd1bWVu
dFsxXToKKyAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ3N0YXRpYyBQYXNzUmVmUHRyPCVz
PiBydW50aW1lQ2FzdChQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+IHZhbHVl
KTsnICUgYXJndW1lbnRbMF0pCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyNpZiAhQVNTRVJU
X0RJU0FCTEVEJykKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnc3RhdGljIHZvaWQgYXNzZXJ0
Q29ycmVjdFZhbHVlKEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUqKTsnKQorICAgICAgICAgICAg
bGluZXMuYXBwZW5kKCcjZW5kaWYgLy8gIUFTU0VSVF9ESVNBQkxFRCcpCisgICAgICAgICAgICBs
aW5lcy5hcHBlbmQoJ307JykKKyAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dl
bmVyYXRlX3R5cGVfYnVpbGRlcl9pbXBsZW1lbnRhdGlvbi5weSBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX3R5cGVfYnVpbGRlcl9pbXBs
ZW1lbnRhdGlvbi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mZDgwOGE5MjYxYmUzZjVhYTRlOWI5OTVmYzdmMTQ4
ZDllODQ2MTBjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfdHlwZV9idWlsZGVyX2ltcGxlbWVudGF0aW9u
LnB5CkBAIC0wLDAgKzEsMTk1IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMgQ29weXJpZ2h0
IChjKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChj
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMK
KyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMK
KyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyMgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKworaW1wb3J0IGxvZ2dpbmcK
K2ltcG9ydCBvcy5wYXRoCitpbXBvcnQgcmUKK2ltcG9ydCBzdHJpbmcKKworZnJvbSBnZW5lcmF0
b3IgaW1wb3J0IEdlbmVyYXRvciwgdWNmaXJzdAorZnJvbSBzdHJpbmcgaW1wb3J0IFRlbXBsYXRl
Citmcm9tIGdlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IEdlbmVyYXRvclRlbXBsYXRlcyBhcyBU
ZW1wbGF0ZXMKK2Zyb20gbW9kZWxzIGltcG9ydCBBbGlhc2VkVHlwZSwgQXJyYXlUeXBlLCBFbnVt
VHlwZSwgT2JqZWN0VHlwZQorCisjIFVzZSBhIGdsb2JhbCBsb2dnZXIsIHdoaWNoIG5vcm1hbGx5
IG9ubHkgbG9ncyBlcnJvcnMuCitsb2cgPSBsb2dnaW5nLmdldExvZ2dlcignZ2xvYmFsJykKKwor
CitjbGFzcyBUeXBlQnVpbGRlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKEdlbmVyYXRvcik6Cisg
ICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0aCk6CisgICAgICAgIHNl
bGYuX21vZGVsID0gbW9kZWwKKyAgICAgICAgc2VsZi5faW5wdXRfZmlsZXBhdGggPSBpbnB1dF9m
aWxlcGF0aAorCisgICAgZGVmIG1vZGVsKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fbW9k
ZWwKKworICAgIGRlZiBvdXRwdXRfZmlsZW5hbWUoc2VsZik6CisgICAgICAgIHJldHVybiAiSW5z
cGVjdG9yJXNUeXBlQnVpbGRlcnMuY3BwIiAlIHNlbGYubW9kZWwoKS5mcmFtZXdvcmsuc2V0dGlu
ZygncHJlZml4JykKKworICAgIGRlZiBnZW5lcmF0ZV9saWNlbnNlKHNlbGYpOgorICAgICAgICBy
ZXR1cm4gVGVtcGxhdGUoVGVtcGxhdGVzLkNvcHlyaWdodEJsb2NrKS5zdWJzdGl0dXRlKE5vbmUs
IGlucHV0RmlsZW5hbWU9b3MucGF0aC5iYXNlbmFtZShzZWxmLl9pbnB1dF9maWxlcGF0aCkpCisK
KyAgICBkZWYgZ2VuZXJhdGVfb3V0cHV0KHNlbGYpOgorICAgICAgICBkb21haW5zID0gc2VsZi5k
b21haW5zX3RvX2dlbmVyYXRlKCkKKyAgICAgICAgc2VsZi5jYWxjdWxhdGVfdHlwZXNfcmVxdWly
aW5nX3NoYXBlX2Fzc2VydGlvbnMoZG9tYWlucykKKworICAgICAgICBzZWNvbmRhcnlfaGVhZGVy
cyA9IFsnPHd0Zi90ZXh0L0NTdHJpbmcuaD4nXQorCisgICAgICAgIHNlY3Rpb25zID0gW10KKyAg
ICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfbGljZW5zZSgpKQorICAgICAgICBo
ZWFkZXJfYXJncyA9IHsKKyAgICAgICAgICAgICdwcmltYXJ5SW5jbHVkZSc6ICciSW5zcGVjdG9y
JXNUeXBlQnVpbGRlcnMuaCInICUgc2VsZi5tb2RlbCgpLmZyYW1ld29yay5zZXR0aW5nKCdwcmVm
aXgnKSwKKyAgICAgICAgICAgICdzZWNvbmRhcnlJbmNsdWRlcyc6ICJcbiIuam9pbihbJyNpbmNs
dWRlICVzJyAlIGhlYWRlciBmb3IgaGVhZGVyIGluIHNlY29uZGFyeV9oZWFkZXJzXSksCisgICAg
ICAgICAgICAnaW5wdXRGaWxlbmFtZSc6IHNlbGYuX2lucHV0X2ZpbGVwYXRoCisgICAgICAgIH0K
KworICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVzLkNwcEltcGxlbWVu
dGF0aW9uUHJlbHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkKKyAgICAgICAg
c2VjdGlvbnMuYXBwZW5kKCduYW1lc3BhY2UgVHlwZUJ1aWxkZXIgeycpCisgICAgICAgIHNlY3Rp
b25zLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9lbnVtX21hcHBpbmcoKSkKKyAgICAgICAgc2VjdGlv
bnMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX29wZW5fZmllbGRfbmFtZXMoKSkKKyAgICAgICAgYnVp
bGRlcl9zZWN0aW9ucyA9IG1hcChzZWxmLl9nZW5lcmF0ZV9idWlsZGVyc19mb3JfZG9tYWluLCBk
b21haW5zKQorICAgICAgICBzZWN0aW9ucy5leHRlbmQoZmlsdGVyKGxhbWJkYSBzZWN0aW9uOiBs
ZW4oc2VjdGlvbikgPiAwLCBidWlsZGVyX3NlY3Rpb25zKSkKKyAgICAgICAgc2VjdGlvbnMuYXBw
ZW5kKCd9IC8vIG5hbWVzcGFjZSBUeXBlQnVpbGRlcicpCisgICAgICAgIHNlY3Rpb25zLmFwcGVu
ZChUZW1wbGF0ZShUZW1wbGF0ZXMuQ3BwSW1wbGVtZW50YXRpb25Qb3N0bHVkZSkuc3Vic3RpdHV0
ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkKKworICAgICAgICByZXR1cm4gIlxuXG4iLmpvaW4oc2Vj
dGlvbnMpCisKKyAgICAjIFByaXZhdGUgbWV0aG9kcy4KKworICAgIGRlZiBfZ2VuZXJhdGVfZW51
bV9tYXBwaW5nKHNlbGYpOgorICAgICAgICBmcmFtZXdvcmtfcHJlZml4ID0gc2VsZi5tb2RlbCgp
LmZyYW1ld29yay5zZXR0aW5nKCdwcmVmaXgnKQorICAgICAgICBsaW5lcyA9IFtdCisKKyAgICAg
ICAgbGluZXMuYXBwZW5kKCdzdGF0aWMgY29uc3QgY2hhciogY29uc3QgZW51bV9jb25zdGFudF92
YWx1ZXNbXSA9IHsnKQorICAgICAgICBsaW5lcy5leHRlbmQoWycgICAgIiVzIiwnICUgZW51bV92
YWx1ZSBmb3IgZW51bV92YWx1ZSBpbiBzZWxmLmFzc2lnbmVkX2VudW1fdmFsdWVzKCldKQorICAg
ICAgICBsaW5lcy5hcHBlbmQoJ307JykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcnKQorICAgICAg
ICBsaW5lcy5hcHBlbmQoJ1N0cmluZyBnZXQlc0VudW1Db25zdGFudFZhbHVlKGludCBjb2RlKSB7
JyAlIGZyYW1ld29ya19wcmVmaXgpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIHJldHVybiBl
bnVtX2NvbnN0YW50X3ZhbHVlc1tjb2RlXTsnKQorICAgICAgICBsaW5lcy5hcHBlbmQoJ30nKQor
CisgICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCisKKyAgICBkZWYgX2dlbmVyYXRlX29w
ZW5fZmllbGRfbmFtZXMoc2VsZik6CisgICAgICAgIGxpbmVzID0gW10KKyAgICAgICAgZm9yIGRv
bWFpbiBpbiBzZWxmLmRvbWFpbnNfdG9fZ2VuZXJhdGUoKToKKyAgICAgICAgICAgIGZvciB0eXBl
X2RlY2xhcmF0aW9uIGluIGZpbHRlcihsYW1iZGEgZGVjbDogR2VuZXJhdG9yLnR5cGVfaGFzX29w
ZW5fZmllbGRzKGRlY2wudHlwZSksIGRvbWFpbi50eXBlX2RlY2xhcmF0aW9ucyk6CisgICAgICAg
ICAgICAgICAgZm9yIHR5cGVfbWVtYmVyIGluIHNvcnRlZCh0eXBlX2RlY2xhcmF0aW9uLnR5cGVf
bWVtYmVycywga2V5PWxhbWJkYSBtZW1iZXI6IG1lbWJlci5tZW1iZXJfbmFtZSk6CisgICAgICAg
ICAgICAgICAgICAgIGZpZWxkX25hbWUgPSAnOjonLmpvaW4oWydJbnNwZWN0b3InLCAnVHlwZUJ1
aWxkZXInLCBkb21haW4uZG9tYWluX25hbWUsIHVjZmlyc3QodHlwZV9kZWNsYXJhdGlvbi50eXBl
X25hbWUpLCB1Y2ZpcnN0KHR5cGVfbWVtYmVyLm1lbWJlcl9uYW1lKV0pCisgICAgICAgICAgICAg
ICAgICAgIGxpbmVzLmFwcGVuZCgnY29uc3QgY2hhciogJXMgPSAiJXMiOycgJSAoZmllbGRfbmFt
ZSwgdHlwZV9tZW1iZXIubWVtYmVyX25hbWUpKQorCisgICAgICAgIHJldHVybiAnXG4nLmpvaW4o
bGluZXMpCisKKyAgICBkZWYgX2dlbmVyYXRlX2J1aWxkZXJzX2Zvcl9kb21haW4oc2VsZiwgZG9t
YWluKToKKyAgICAgICAgc2VjdGlvbnMgPSBbXQorICAgICAgICBkZWNsYXJhdGlvbnNfdG9fZ2Vu
ZXJhdGUgPSBmaWx0ZXIobGFtYmRhIGRlY2w6IHNlbGYudHlwZV9uZWVkc19zaGFwZV9hc3NlcnRp
b25zKGRlY2wudHlwZSksIGRvbWFpbi50eXBlX2RlY2xhcmF0aW9ucykKKworICAgICAgICBmb3Ig
dHlwZV9kZWNsYXJhdGlvbiBpbiBkZWNsYXJhdGlvbnNfdG9fZ2VuZXJhdGU6CisgICAgICAgICAg
ICBmb3IgdHlwZV9tZW1iZXIgaW4gdHlwZV9kZWNsYXJhdGlvbi50eXBlX21lbWJlcnM6CisgICAg
ICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh0eXBlX21lbWJlci50eXBlLCBFbnVtVHlwZSk6Cisg
ICAgICAgICAgICAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9hc3NlcnRp
b25fZm9yX2VudW0odHlwZV9tZW1iZXIsIHR5cGVfZGVjbGFyYXRpb24pKQorCisgICAgICAgICAg
ICBpZiBpc2luc3RhbmNlKHR5cGVfZGVjbGFyYXRpb24udHlwZSwgT2JqZWN0VHlwZSk6CisgICAg
ICAgICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2Fzc2VydGlvbl9mb3Jf
b2JqZWN0X2RlY2xhcmF0aW9uKHR5cGVfZGVjbGFyYXRpb24pKQorICAgICAgICAgICAgICAgIGlm
IEdlbmVyYXRvci50eXBlX25lZWRzX3J1bnRpbWVfY2FzdHModHlwZV9kZWNsYXJhdGlvbi50eXBl
KToKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX3J1
bnRpbWVfY2FzdF9mb3Jfb2JqZWN0X2RlY2xhcmF0aW9uKHR5cGVfZGVjbGFyYXRpb24pKQorCisg
ICAgICAgIHJldHVybiAnXG5cbicuam9pbihzZWN0aW9ucykKKworICAgIGRlZiBfZ2VuZXJhdGVf
cnVudGltZV9jYXN0X2Zvcl9vYmplY3RfZGVjbGFyYXRpb24oc2VsZiwgb2JqZWN0X2RlY2xhcmF0
aW9uKToKKyAgICAgICAgYXJncyA9IHsKKyAgICAgICAgICAgICdvYmplY3RUeXBlJzogR2VuZXJh
dG9yLnR5cGVfYnVpbGRlcl9zdHJpbmdfZm9yX3R5cGUob2JqZWN0X2RlY2xhcmF0aW9uLnR5cGUp
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFRlbXBsYXRlKFRlbXBsYXRlcy5UeXBlQnVpbGRl
ck9iamVjdFJ1bnRpbWVDYXN0KS5zdWJzdGl0dXRlKE5vbmUsICoqYXJncykKKworICAgIGRlZiBf
Z2VuZXJhdGVfYXNzZXJ0aW9uX2Zvcl9vYmplY3RfZGVjbGFyYXRpb24oc2VsZiwgb2JqZWN0X2Rl
Y2xhcmF0aW9uKToKKyAgICAgICAgcmVxdWlyZWRfbWVtYmVycyA9IGZpbHRlcihsYW1iZGEgbWVt
YmVyOiBub3QgbWVtYmVyLmlzX29wdGlvbmFsLCBvYmplY3RfZGVjbGFyYXRpb24udHlwZV9tZW1i
ZXJzKQorICAgICAgICBvcHRpb25hbF9tZW1iZXJzID0gZmlsdGVyKGxhbWJkYSBtZW1iZXI6IG1l
bWJlci5pc19vcHRpb25hbCwgb2JqZWN0X2RlY2xhcmF0aW9uLnR5cGVfbWVtYmVycykKKyAgICAg
ICAgc2hvdWxkX2NvdW50X3Byb3BlcnRpZXMgPSBub3QgR2VuZXJhdG9yLnR5cGVfaGFzX29wZW5f
ZmllbGRzKG9iamVjdF9kZWNsYXJhdGlvbi50eXBlKQorICAgICAgICBsaW5lcyA9IFtdCisKKyAg
ICAgICAgbGluZXMuYXBwZW5kKCcjaWYgIUFTU0VSVF9ESVNBQkxFRCcpCisgICAgICAgIGxpbmVz
LmFwcGVuZCgndm9pZCBCaW5kaW5nVHJhaXRzPCVzPjo6YXNzZXJ0Q29ycmVjdFZhbHVlKEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yVmFsdWUqIHZhbHVlKScgJSAoR2VuZXJhdG9yLnR5cGVfYnVpbGRlcl9z
dHJpbmdfZm9yX3R5cGUob2JqZWN0X2RlY2xhcmF0aW9uLnR5cGUpKSkKKyAgICAgICAgbGluZXMu
YXBwZW5kKCIiInsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBvYmplY3Q7CisgICAgYm9v
bCBjYXN0UmVzID0gdmFsdWUtPmFzT2JqZWN0KCZvYmplY3QpOworICAgIEFTU0VSVF9VTlVTRUQo
Y2FzdFJlcywgY2FzdFJlcyk7IiIiKQorICAgICAgICBmb3IgdHlwZV9tZW1iZXIgaW4gcmVxdWly
ZWRfbWVtYmVyczoKKyAgICAgICAgICAgIGFyZ3MgPSB7CisgICAgICAgICAgICAgICAgJ21lbWJl
ck5hbWUnOiB0eXBlX21lbWJlci5tZW1iZXJfbmFtZSwKKyAgICAgICAgICAgICAgICAnYXNzZXJ0
TWV0aG9kJzogR2VuZXJhdG9yLmFzc2VydGlvbl9tZXRob2RfZm9yX3R5cGVfbWVtYmVyKHR5cGVf
bWVtYmVyLCBvYmplY3RfZGVjbGFyYXRpb24pCisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGxpbmVzLmFwcGVuZCgiIiIgICAgeworICAgICAgICBJbnNwZWN0b3JPYmplY3Q6Oml0ZXJhdG9y
ICUobWVtYmVyTmFtZSlzUG9zOworICAgICAgICAlKG1lbWJlck5hbWUpc1BvcyA9IG9iamVjdC0+
ZmluZCgiJShtZW1iZXJOYW1lKXMiKTsKKyAgICAgICAgQVNTRVJUKCUobWVtYmVyTmFtZSlzUG9z
ICE9IG9iamVjdC0+ZW5kKCkpOworICAgICAgICAlKGFzc2VydE1ldGhvZClzKCUobWVtYmVyTmFt
ZSlzUG9zLT52YWx1ZS5nZXQoKSk7CisgICAgfSIiIiAlIGFyZ3MpCisKKyAgICAgICAgaWYgc2hv
dWxkX2NvdW50X3Byb3BlcnRpZXM6CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJycpCisgICAg
ICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBpbnQgZm91bmRQcm9wZXJ0aWVzQ291bnQgPSAlczsn
ICUgbGVuKHJlcXVpcmVkX21lbWJlcnMpKQorCisgICAgICAgIGZvciB0eXBlX21lbWJlciBpbiBv
cHRpb25hbF9tZW1iZXJzOgorICAgICAgICAgICAgYXJncyA9IHsKKyAgICAgICAgICAgICAgICAn
bWVtYmVyTmFtZSc6IHR5cGVfbWVtYmVyLm1lbWJlcl9uYW1lLAorICAgICAgICAgICAgICAgICdh
c3NlcnRNZXRob2QnOiBHZW5lcmF0b3IuYXNzZXJ0aW9uX21ldGhvZF9mb3JfdHlwZV9tZW1iZXIo
dHlwZV9tZW1iZXIsIG9iamVjdF9kZWNsYXJhdGlvbikKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgbGluZXMuYXBwZW5kKCIiIiAgICB7CisgICAgICAgIEluc3BlY3Rvck9iamVjdDo6aXRl
cmF0b3IgJShtZW1iZXJOYW1lKXNQb3M7CisgICAgICAgICUobWVtYmVyTmFtZSlzUG9zID0gb2Jq
ZWN0LT5maW5kKCIlKG1lbWJlck5hbWUpcyIpOworICAgICAgICBpZiAoJShtZW1iZXJOYW1lKXNQ
b3MgIT0gb2JqZWN0LT5lbmQoKSkgeworICAgICAgICAgICAgJShhc3NlcnRNZXRob2QpcyglKG1l
bWJlck5hbWUpc1Bvcy0+dmFsdWUuZ2V0KCkpOyIiIiAlIGFyZ3MpCisKKyAgICAgICAgICAgIGlm
IHNob3VsZF9jb3VudF9wcm9wZXJ0aWVzOgorICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgn
ICAgICAgICAgICAgKytmb3VuZFByb3BlcnRpZXNDb3VudDsnKQorICAgICAgICAgICAgbGluZXMu
YXBwZW5kKCcgICAgICAgIH0nKQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgfScpCisK
KyAgICAgICAgaWYgc2hvdWxkX2NvdW50X3Byb3BlcnRpZXM6CisgICAgICAgICAgICBsaW5lcy5h
cHBlbmQoJyAgICBpZiAoZm91bmRQcm9wZXJ0aWVzQ291bnQgIT0gb2JqZWN0LT5zaXplKCkpJykK
KyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBGQVRBTCgiVW5leHBlY3RlZCBwcm9w
ZXJ0aWVzIGluIG9iamVjdDogJXNcXG4iLCBvYmplY3QtPnRvSlNPTlN0cmluZygpLmFzY2lpKCku
ZGF0YSgpKTsnKQorICAgICAgICBsaW5lcy5hcHBlbmQoJ30nKQorICAgICAgICBsaW5lcy5hcHBl
bmQoJyNlbmRpZiAvLyAhQVNTRVJUX0RJU0FCTEVEJykKKyAgICAgICAgcmV0dXJuICdcbicuam9p
bihsaW5lcykKKworICAgIGRlZiBfZ2VuZXJhdGVfYXNzZXJ0aW9uX2Zvcl9lbnVtKHNlbGYsIGVu
dW1fbWVtYmVyLCBvYmplY3RfZGVjbGFyYXRpb24pOgorICAgICAgICBsaW5lcyA9IFtdCisgICAg
ICAgIGxpbmVzLmFwcGVuZCgnI2lmICFBU1NFUlRfRElTQUJMRUQnKQorICAgICAgICBsaW5lcy5h
cHBlbmQoJ3ZvaWQgJXMoSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSogdmFsdWUpJyAlIEdlbmVy
YXRvci5hc3NlcnRpb25fbWV0aG9kX2Zvcl90eXBlX21lbWJlcihlbnVtX21lbWJlciwgb2JqZWN0
X2RlY2xhcmF0aW9uKSkKKyAgICAgICAgbGluZXMuYXBwZW5kKCd7JykKKyAgICAgICAgbGluZXMu
YXBwZW5kKCcgICAgV1RGOjpTdHJpbmcgczsnKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBi
b29sIGNhc3RfcmVzID0gdmFsdWUtPmFzU3RyaW5nKCZzKTsnKQorICAgICAgICBsaW5lcy5hcHBl
bmQoJyAgICBBU1NFUlQoY2FzdF9yZXMpOycpCisKKyAgICAgICAgYXNzZXJ0X2NvbmRpdGlvbiA9
ICcgfHwgJy5qb2luKFsncyA9PSAiJXMiJyAlIGVudW1fdmFsdWUgZm9yIGVudW1fdmFsdWUgaW4g
ZW51bV9tZW1iZXIudHlwZS5lbnVtX3ZhbHVlcygpXSkKKyAgICAgICAgbGluZXMuYXBwZW5kKCcg
ICAgQVNTRVJUKCVzKTsnICUgYXNzZXJ0X2NvbmRpdGlvbikKKyAgICAgICAgbGluZXMuYXBwZW5k
KCd9JykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcjZW5kaWYgLy8gIUFTU0VSVF9ESVNBQkxFRCcp
CisKKyAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRvci5weSBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRvci5w
eQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4wZmU2OGU3OGE4NWY1YzIyZWQ2YmM0MjJkZmY5ODkyMWRhMTRjMDBjCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2NvZGVnZW4vZ2VuZXJhdG9yLnB5CkBAIC0wLDAgKzEsNDk0IEBACisjIENvcHlyaWdodCAoYykg
MjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoYykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
IyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisjIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyMg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgbG9nZ2luZworaW1wb3J0
IHJlCisKK2Zyb20gbW9kZWxzIGltcG9ydCBQcmltaXRpdmVUeXBlLCBPYmplY3RUeXBlLCBBcnJh
eVR5cGUsIEVudW1UeXBlLCBBbGlhc2VkVHlwZQorCitsb2cgPSBsb2dnaW5nLmdldExvZ2dlcign
Z2xvYmFsJykKKworZGVmIHVjZmlyc3Qoc3RyKToKKyAgICByZXR1cm4gc3RyWzoxXS51cHBlcigp
ICsgc3RyWzE6XQorCitfUFJJTUlUSVZFX1RPX0NQUF9OQU1FX01BUCA9IHsKKyAgICAnYm9vbGVh
bic6ICdib29sJywKKyAgICAnaW50ZWdlcic6ICdpbnQnLAorICAgICdudW1iZXInOiAnZG91Ymxl
JywKKyAgICAnc3RyaW5nJzogJ1N0cmluZycsCisgICAgJ29iamVjdCc6ICdJbnNwZWN0b3I6Oklu
c3BlY3Rvck9iamVjdCcsCisgICAgJ2FueSc6ICdJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlJwor
fQorCisjIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBjb252ZXJ0ZWQgaW50byBhIHByb3BlcnR5IG9u
IHRoZSBkb21haW4gaW4gSlNPTi4KK19ET01BSU5fVE9fQ1BQX0dVQVJEX01BUCA9IHsKKyAgICAn
RGF0YWJhc2UnOiAiRU5BQkxFKFNRTF9EQVRBQkFTRSkiLAorICAgICdJbmRleGVkREInOiAiRU5B
QkxFKElOREVYRURfREFUQUJBU0UpIiwKKyAgICAnUmVwbGF5JzogIkVOQUJMRShXRUJfUkVQTEFZ
KSIsCit9CisKK19BTFdBWVNfVVBQRVJDQVNFRF9FTlVNX1ZBTFVFX1NVQlNUUklOR1MgPSBzZXQo
WydBUEknLCAnQ1NTJywgJ0RPTScsICdIVE1MJywgJ1hIUicsICdYTUwnXSkKKworIyBUaGVzZSBv
YmplY3RzIGFyZSBidWlsdCBtYW51YWxseSBieSBjcmVhdGluZyBhbmQgc2V0dGluZyBJbnNwZWN0
b3JWYWx1ZXMuCisjIEJlZm9yZSBzZW5kaW5nIHRoZXNlIG92ZXIgdGhlIHByb3RvY29sLCB0aGVp
ciBzaGFwZXMgYXJlIGNoZWNrZWQgYWdhaW5zdCB0aGUgc3BlY2lmaWNhdGlvbi4KKyMgU28sIGFu
eSB0eXBlcyByZWZlcmVuY2VkIGJ5IHRoZXNlIHR5cGVzIHJlcXVpcmUgZGVidWctb25seSBhc3Nl
cnRpb25zIHRoYXQgY2hlY2sgdmFsdWVzLgorIyBDYWxjdWxhdGluZyBuZWNlc3NhcnkgYXNzZXJ0
aW9ucyBpcyBhbm5veWluZywgYW5kIGFkZHMgYSBsb3Qgb2YgY29tcGxleGl0eSB0byB0aGUgZ2Vu
ZXJhdG9yLgorCisjIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBjb252ZXJ0ZWQgaW50byBhIHByb3Bl
cnR5IGluIEpTT04uCitfVFlQRVNfTkVFRElOR19SVU5USU1FX0NBU1RTID0gc2V0KFsKKyAgICAi
UnVudGltZS5SZW1vdGVPYmplY3QiLAorICAgICJSdW50aW1lLlByb3BlcnR5RGVzY3JpcHRvciIs
CisgICAgIlJ1bnRpbWUuSW50ZXJuYWxQcm9wZXJ0eURlc2NyaXB0b3IiLAorICAgICJEZWJ1Z2dl
ci5GdW5jdGlvbkRldGFpbHMiLAorICAgICJEZWJ1Z2dlci5DYWxsRnJhbWUiLAorICAgICJDYW52
YXMuVHJhY2VMb2ciLAorICAgICJDYW52YXMuUmVzb3VyY2VJbmZvIiwKKyAgICAiQ2FudmFzLlJl
c291cmNlU3RhdGUiLAorICAgICMgVGhpcyBzaG91bGQgYmUgYSB0ZW1wb3JhcnkgaGFjay4gVGlt
ZWxpbmVFdmVudCBzaG91bGQgYmUgY3JlYXRlZCB2aWEgZ2VuZXJhdGVkIEMrKyBBUEkuCisgICAg
IlRpbWVsaW5lLlRpbWVsaW5lRXZlbnQiLAorICAgICMgRm9yIHRlc3RpbmcgcHVycG9zZXMgb25s
eS4KKyAgICAiVGVzdC5UeXBlTmVlZGluZ0Nhc3QiCitdKQorCisjIEZJWE1FOiBUaGlzIHNob3Vs
ZCBiZSBjb252ZXJ0ZWQgaW50byBhIHByb3BlcnR5IGluIEpTT04uCitfVFlQRVNfV0lUSF9PUEVO
X0ZJRUxEUz0gc2V0KFsKKyAgICAiVGltZWxpbmUuVGltZWxpbmVFdmVudCIsCisgICAgIyBJbnNw
ZWN0b3JTdHlsZVNoZWV0IG5vdCBvbmx5IGNyZWF0ZXMgdGhpcyBwcm9wZXJ0eSBidXQgd2FudHMg
dG8gcmVhZCBpdCBhbmQgbW9kaWZ5IGl0LgorICAgICJDU1MuQ1NTUHJvcGVydHkiLAorICAgICMg
SW5zcGVjdG9yUmVzb3VyY2VBZ2VudCBuZWVkcyB0byB1cGRhdGUgbWltZS10eXBlLgorICAgICJO
ZXR3b3JrLlJlc3BvbnNlIiwKKyAgICAjIEZvciB0ZXN0aW5nIHB1cnBvc2VzIG9ubHkuCisgICAg
IlRlc3QuT3BlblBhcmFtZXRlckJ1bmRsZSIKK10pCisKK2NsYXNzIEdlbmVyYXRvcjoKKyAgICBk
ZWYgX19pbml0X18oc2VsZiwgbW9kZWwsIGlucHV0X2ZpbGVwYXRoKToKKyAgICAgICAgc2VsZi5f
bW9kZWwgPSBtb2RlbAorICAgICAgICBzZWxmLl9pbnB1dF9maWxlcGF0aCA9IGlucHV0X2ZpbGVw
YXRoCisKKyAgICBkZWYgbW9kZWwoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9tb2RlbAor
CisgICAgZGVmIGRvbWFpbnNfdG9fZ2VuZXJhdGUoc2VsZik6CisgICAgICAgIHJldHVybiBmaWx0
ZXIobGFtYmRhIGRvbWFpbjogbm90IGRvbWFpbi5pc19zdXBwbGVtZW50YWwsIHNlbGYubW9kZWwo
KS5kb21haW5zKQorCisgICAgIyBUaGVzZSB0d28gbWV0aG9kcyBhcmUgb3ZlcnJpZGRlbiBieSBz
dWJjbGFzc2VzLgorICAgIGRlZiBnZW5lcmF0ZV9vdXRwdXQoc2VsZik6CisgICAgICAgIHBhc3MK
KworICAgIGRlZiBvdXRwdXRfZmlsZW5hbWUoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGRl
ZiBlbmNvZGluZ19mb3JfZW51bV92YWx1ZShzZWxmLCBlbnVtX3ZhbHVlKToKKyAgICAgICAgaWYg
bm90IGhhc2F0dHIoc2VsZiwgIl9hc3NpZ25lZF9lbnVtX3ZhbHVlcyIpOgorICAgICAgICAgICAg
c2VsZi5fdHJhdmVyc2VfYW5kX2Fzc2lnbl9lbnVtX3ZhbHVlcygpCisKKyAgICAgICAgcmV0dXJu
IHNlbGYuX2VudW1fdmFsdWVfZW5jb2RpbmdzW2VudW1fdmFsdWVdCisKKyAgICBkZWYgYXNzaWdu
ZWRfZW51bV92YWx1ZXMoc2VsZik6CisgICAgICAgIGlmIG5vdCBoYXNhdHRyKHNlbGYsICJfYXNz
aWduZWRfZW51bV92YWx1ZXMiKToKKyAgICAgICAgICAgIHNlbGYuX3RyYXZlcnNlX2FuZF9hc3Np
Z25fZW51bV92YWx1ZXMoKQorCisgICAgICAgIHJldHVybiBzZWxmLl9hc3NpZ25lZF9lbnVtX3Zh
bHVlc1s6XSAgIyBTbGljZS4KKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgdHlwZV9uZWVk
c19ydW50aW1lX2Nhc3RzKF90eXBlKToKKyAgICAgICAgcmV0dXJuIF90eXBlLnF1YWxpZmllZF9u
YW1lKCkgaW4gX1RZUEVTX05FRURJTkdfUlVOVElNRV9DQVNUUworCisgICAgQHN0YXRpY21ldGhv
ZAorICAgIGRlZiB0eXBlX2hhc19vcGVuX2ZpZWxkcyhfdHlwZSk6CisgICAgICAgIHJldHVybiBf
dHlwZS5xdWFsaWZpZWRfbmFtZSgpIGluIF9UWVBFU19XSVRIX09QRU5fRklFTERTCisKKyAgICBk
ZWYgdHlwZV9uZWVkc19zaGFwZV9hc3NlcnRpb25zKHNlbGYsIF90eXBlKToKKyAgICAgICAgaWYg
bm90IGhhc2F0dHIoc2VsZiwgIl90eXBlc19uZWVkaW5nX3NoYXBlX2Fzc2VydGlvbnMiKToKKyAg
ICAgICAgICAgIHNlbGYuY2FsY3VsYXRlX3R5cGVzX3JlcXVpcmluZ19zaGFwZV9hc3NlcnRpb25z
KHNlbGYubW9kZWwoKS5kb21haW5zKQorCisgICAgICAgIHJldHVybiBfdHlwZSBpbiBzZWxmLl90
eXBlc19uZWVkaW5nX3NoYXBlX2Fzc2VydGlvbnMKKworICAgIGRlZiBhbGxfdHlwZXNfbmVlZGlu
Z19zaGFwZV9hc3NlcnRpb25zKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fdHlwZXNfbmVl
ZGluZ19zaGFwZV9hc3NlcnRpb25zCisKKyAgICAjIFRvIHJlc3RyaWN0IHRoZSBkb21haW5zIG92
ZXIgd2hpY2ggd2UgY29tcHV0ZSB0eXBlcyBuZWVkaW5nIGFzc2VydGlvbnMsIGNhbGwgdGhpcyBt
ZXRob2QKKyAgICAjIGJlZm9yZSBnZW5lcmF0aW5nIGFueSBvdXRwdXQgd2l0aCB0aGUgZGVzaXJl
ZCBkb21haW5zIHBhcmFtZXRlci4gVGhlIGNvbXB1dGVkCisgICAgIyBzZXQgb2YgdHlwZXMgd2ls
bCBub3QgYmUgYXV0b21hdGljYWxseSByZWdlbmVyYXRlZCBvbiBzdWJzZXF1ZW50IGNhbGxzIHRv
CisgICAgIyBHZW5lcmF0b3IudHlwZXNfbmVlZGluZ19zaGFwZV9hc3NlcnRpb25zKCkuCisgICAg
ZGVmIGNhbGN1bGF0ZV90eXBlc19yZXF1aXJpbmdfc2hhcGVfYXNzZXJ0aW9ucyhzZWxmLCBkb21h
aW5zKToKKyAgICAgICAgZG9tYWluX25hbWVzID0gbWFwKGxhbWJkYSBkb21haW46IGRvbWFpbi5k
b21haW5fbmFtZSwgZG9tYWlucykKKyAgICAgICAgbG9nLmRlYnVnKCI+IENhbGN1bGF0aW5nIHR5
cGVzIHRoYXQgbmVlZCBzaGFwZSBhc3NlcnRpb25zIChlbGlnaWJsZSBkb21haW5zOiAlcykiICUg
IiwgIi5qb2luKGRvbWFpbl9uYW1lcykpCisKKyAgICAgICAgIyBNdXRhdGVzIHRoZSBwYXNzZWQt
aW4gc2V0OyB0aGlzIHNpbXBsaWZpZXMgY2hlY2tzIHRvIHByZXZlbnQgaW5maW5pdGUgcmVjdXJz
aW9uLgorICAgICAgICBkZWYgZ2F0aGVyX3RyYW5zaXRpdmVseV9yZWZlcmVuY2VkX3R5cGVzKHR5
cGUsIGdhdGhlcmVkX3R5cGVzKToKKyAgICAgICAgICAgIGlmIHR5cGUgaW4gZ2F0aGVyZWRfdHlw
ZXM6CisgICAgICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uo
dHlwZSwgT2JqZWN0VHlwZSk6CisgICAgICAgICAgICAgICAgbG9nLmRlYnVnKCI+IEFkZGluZyB0
eXBlICVzIHRvIGxpc3Qgb2YgdHlwZXMgbmVlZGluZyBzaGFwZSBhc3NlcnRpb25zLiIgJSB0eXBl
LnF1YWxpZmllZF9uYW1lKCkpCisgICAgICAgICAgICAgICAgZ2F0aGVyZWRfdHlwZXMuYWRkKHR5
cGUpCisgICAgICAgICAgICAgICAgZm9yIHR5cGVfbWVtYmVyIGluIHR5cGUubWVtYmVyczoKKyAg
ICAgICAgICAgICAgICAgICAgZ2F0aGVyX3RyYW5zaXRpdmVseV9yZWZlcmVuY2VkX3R5cGVzKHR5
cGVfbWVtYmVyLnR5cGUsIGdhdGhlcmVkX3R5cGVzKQorICAgICAgICAgICAgZWxpZiBpc2luc3Rh
bmNlKHR5cGUsIEVudW1UeXBlKToKKyAgICAgICAgICAgICAgICBsb2cuZGVidWcoIj4gQWRkaW5n
IHR5cGUgJXMgdG8gbGlzdCBvZiB0eXBlcyBuZWVkaW5nIHNoYXBlIGFzc2VydGlvbnMuIiAlIHR5
cGUucXVhbGlmaWVkX25hbWUoKSkKKyAgICAgICAgICAgICAgICBnYXRoZXJlZF90eXBlcy5hZGQo
dHlwZSkKKyAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh0eXBlLCBBbGlhc2VkVHlwZSk6Cisg
ICAgICAgICAgICAgICAgZ2F0aGVyX3RyYW5zaXRpdmVseV9yZWZlcmVuY2VkX3R5cGVzKHR5cGUu
YWxpYXNlZF90eXBlLCBnYXRoZXJlZF90eXBlcykKKyAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5j
ZSh0eXBlLCBBcnJheVR5cGUpOgorICAgICAgICAgICAgICAgIGdhdGhlcl90cmFuc2l0aXZlbHlf
cmVmZXJlbmNlZF90eXBlcyh0eXBlLmVsZW1lbnRfdHlwZSwgZ2F0aGVyZWRfdHlwZXMpCisKKyAg
ICAgICAgZm91bmRfdHlwZXMgPSBzZXQoKQorICAgICAgICBmb3IgZG9tYWluIGluIGRvbWFpbnM6
CisgICAgICAgICAgICBmb3IgZGVjbGFyYXRpb24gaW4gZG9tYWluLnR5cGVfZGVjbGFyYXRpb25z
OgorICAgICAgICAgICAgICAgIGlmIGRlY2xhcmF0aW9uLnR5cGUucXVhbGlmaWVkX25hbWUoKSBp
biBfVFlQRVNfTkVFRElOR19SVU5USU1FX0NBU1RTOgorICAgICAgICAgICAgICAgICAgICBsb2cu
ZGVidWcoIj4gR2F0aGVyaW5nIHR5cGVzIHJlZmVyZW5jZWQgYnkgJXMgdG8gZ2VuZXJhdGUgc2hh
cGUgYXNzZXJ0aW9ucy4iICUgZGVjbGFyYXRpb24udHlwZS5xdWFsaWZpZWRfbmFtZSgpKQorICAg
ICAgICAgICAgICAgICAgICBnYXRoZXJfdHJhbnNpdGl2ZWx5X3JlZmVyZW5jZWRfdHlwZXMoZGVj
bGFyYXRpb24udHlwZSwgZm91bmRfdHlwZXMpCisKKyAgICAgICAgc2VsZi5fdHlwZXNfbmVlZGlu
Z19zaGFwZV9hc3NlcnRpb25zID0gZm91bmRfdHlwZXMKKworICAgICMgUHJpdmF0ZSBoZWxwZXIg
aW5zdGFuY2UgbWV0aG9kcy4KKyAgICBkZWYgX3RyYXZlcnNlX2FuZF9hc3NpZ25fZW51bV92YWx1
ZXMoc2VsZik6CisgICAgICAgIHNlbGYuX2VudW1fdmFsdWVfZW5jb2RpbmdzID0ge30KKyAgICAg
ICAgc2VsZi5fYXNzaWduZWRfZW51bV92YWx1ZXMgPSBbXQorICAgICAgICBhbGxfdHlwZXMgPSBb
XQorCisgICAgICAgIGRvbWFpbnMgPSBzZWxmLmRvbWFpbnNfdG9fZ2VuZXJhdGUoKQorCisgICAg
ICAgIGZvciBfZG9tYWluIGluIGRvbWFpbnM6CisgICAgICAgICAgICBmb3IgX3R5cGVfZGVjbGFy
YXRpb24gaW4gX2RvbWFpbi50eXBlX2RlY2xhcmF0aW9uczoKKyAgICAgICAgICAgICAgICBhbGxf
dHlwZXMuYXBwZW5kKF90eXBlX2RlY2xhcmF0aW9uLnR5cGUpCisgICAgICAgICAgICAgICAgZm9y
IF90eXBlX21lbWJlciBpbiBfdHlwZV9kZWNsYXJhdGlvbi50eXBlX21lbWJlcnM6CisgICAgICAg
ICAgICAgICAgICAgIGFsbF90eXBlcy5hcHBlbmQoX3R5cGVfbWVtYmVyLnR5cGUpCisKKyAgICAg
ICAgZm9yIF9kb21haW4gaW4gZG9tYWluczoKKyAgICAgICAgICAgIGZvciBfZXZlbnQgaW4gX2Rv
bWFpbi5ldmVudHM6CisgICAgICAgICAgICAgICAgYWxsX3R5cGVzLmV4dGVuZChbcGFyYW1ldGVy
LnR5cGUgZm9yIHBhcmFtZXRlciBpbiBfZXZlbnQuZXZlbnRfcGFyYW1ldGVyc10pCisKKyAgICAg
ICAgZm9yIF9kb21haW4gaW4gZG9tYWluczoKKyAgICAgICAgICAgIGZvciBfY29tbWFuZCBpbiBf
ZG9tYWluLmNvbW1hbmRzOgorICAgICAgICAgICAgICAgIGFsbF90eXBlcy5leHRlbmQoW3BhcmFt
ZXRlci50eXBlIGZvciBwYXJhbWV0ZXIgaW4gX2NvbW1hbmQuY2FsbF9wYXJhbWV0ZXJzXSkKKyAg
ICAgICAgICAgICAgICBhbGxfdHlwZXMuZXh0ZW5kKFtwYXJhbWV0ZXIudHlwZSBmb3IgcGFyYW1l
dGVyIGluIF9jb21tYW5kLnJldHVybl9wYXJhbWV0ZXJzXSkKKworICAgICAgICBmb3IgX3R5cGUg
aW4gYWxsX3R5cGVzOgorICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoX3R5cGUsIEVudW1U
eXBlKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgbWFwKHNlbGYuX2Fz
c2lnbl9lbmNvZGluZ19mb3JfZW51bV92YWx1ZSwgX3R5cGUuZW51bV92YWx1ZXMoKSkKKworICAg
IGRlZiBfYXNzaWduX2VuY29kaW5nX2Zvcl9lbnVtX3ZhbHVlKHNlbGYsIGVudW1fdmFsdWUpOgor
ICAgICAgICBpZiBlbnVtX3ZhbHVlIGluIHNlbGYuX2VudW1fdmFsdWVfZW5jb2RpbmdzOgorICAg
ICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgc2VsZi5fZW51bV92YWx1ZV9lbmNvZGluZ3NbZW51
bV92YWx1ZV0gPSBsZW4oc2VsZi5fYXNzaWduZWRfZW51bV92YWx1ZXMpCisgICAgICAgIHNlbGYu
X2Fzc2lnbmVkX2VudW1fdmFsdWVzLmFwcGVuZChlbnVtX3ZhbHVlKQorCisgICAgIyBNaXNjZWxs
YW5lb3VzIHRleHQgbWFuaXB1bGF0aW9uIHJvdXRpbmVzLgorICAgIEBzdGF0aWNtZXRob2QKKyAg
ICBkZWYgd3JhcF93aXRoX2d1YXJkX2Zvcl9kb21haW4oZG9tYWluLCB0ZXh0KToKKyAgICAgICAg
Z3VhcmQgPSBfRE9NQUlOX1RPX0NQUF9HVUFSRF9NQVAuZ2V0KGRvbWFpbi5kb21haW5fbmFtZSwg
Tm9uZSkKKyAgICAgICAgaWYgZ3VhcmQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBsaW5lcyA9
IFsKKyAgICAgICAgICAgICAgICAnI2lmICVzJyAlIGd1YXJkLAorICAgICAgICAgICAgICAgIHRl
eHQsCisgICAgICAgICAgICAgICAgJyNlbmRpZiAvLyAlcycgJSBndWFyZAorICAgICAgICAgICAg
ICAgIF0KKyAgICAgICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCisgICAgICAgIGVsc2U6
CisgICAgICAgICAgICByZXR1cm4gdGV4dAorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBz
dHlsaXplZF9uYW1lX2Zvcl9lbnVtX3ZhbHVlKGVudW1fdmFsdWUpOgorICAgICAgICAjIEVudW0g
dmFsdWVzIGNvdWxkIGJlIGludGVnZXIgbGl0ZXJhbHMsIHNvIGRvbid0IHRyeSB0byBjb252ZXJ0
IHRob3NlLgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShlbnVtX3ZhbHVlLCAodW5pY29kZSwg
c3RyKSk6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICByZWdleCA9ICcoXHcqKSglcyko
XHcqKScgJSAifCIuam9pbihfQUxXQVlTX1VQUEVSQ0FTRURfRU5VTV9WQUxVRV9TVUJTVFJJTkdT
KQorICAgICAgICBkZWYgcmVwbGFjZUNhbGxiYWNrKG1hdGNoKToKKyAgICAgICAgICAgIHJldHVy
biAiIi5qb2luKFttYXRjaC5ncm91cCgxKSwgbWF0Y2guZ3JvdXAoMikudXBwZXIoKSwgbWF0Y2gu
Z3JvdXAoMyldKQorCisgICAgICAgICMgU3BsaXQgb24gaHlwaGVuLCBpbnRyb2R1Y2UgY2FtZWxj
YXNlLCBhbmQgZm9yY2UgdXBwZXJjYXNpbmcgb2YgYWNyb255bXMuCisgICAgICAgIHN1YndvcmRz
ID0gbWFwKGxhbWJkYSB4OiB4WzBdLnVwcGVyKCkgKyB4WzE6XSwgZW51bV92YWx1ZS5zcGxpdCgn
LScpKQorICAgICAgICByZXR1cm4gcmUuc3ViKHJlZ2V4LCByZXBsYWNlQ2FsbGJhY2ssICIiLmpv
aW4oc3Vid29yZHMpLCBmbGFncz1yZS5JR05PUkVDQVNFKQorCisgICAgQHN0YXRpY21ldGhvZAor
ICAgIGRlZiBrZXllZF9nZXRfbWV0aG9kX2Zvcl90eXBlKHR5cGUpOgorICAgICAgICBpZiBpc2lu
c3RhbmNlKHR5cGUsIE9iamVjdFR5cGUpOgorICAgICAgICAgICAgcmV0dXJuICdnZXRPYmplY3Qn
CisgICAgICAgIGlmIGlzaW5zdGFuY2UodHlwZSwgQXJyYXlUeXBlKToKKyAgICAgICAgICAgIHJl
dHVybiAnZ2V0QXJyYXknCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh0eXBlLCBQcmltaXRpdmVU
eXBlKToKKyAgICAgICAgICAgIGlmIHR5cGUucmF3X25hbWUoKSBpcyAnaW50ZWdlcic6CisgICAg
ICAgICAgICAgICAgcmV0dXJuICdnZXRJbnQnCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAg
ICAgICAgIHJldHVybiAnZ2V0JyArIHVjZmlyc3QodHlwZS5yYXdfbmFtZSgpKQorICAgICAgICBl
bGlmIGlzaW5zdGFuY2UodHlwZSwgQWxpYXNlZFR5cGUpOgorICAgICAgICAgICAgcmV0dXJuIEdl
bmVyYXRvci5rZXllZF9nZXRfbWV0aG9kX2Zvcl90eXBlKHR5cGUuYWxpYXNlZF90eXBlKQorICAg
ICAgICBlbGlmIGlzaW5zdGFuY2UodHlwZSwgRW51bVR5cGUpOgorICAgICAgICAgICAgcmV0dXJu
IEdlbmVyYXRvci5rZXllZF9nZXRfbWV0aG9kX2Zvcl90eXBlKHR5cGUucHJpbWl0aXZlX3R5cGUp
CisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGtleWVkX3NldF9tZXRob2RfZm9yX3R5cGUo
dHlwZSk6CisgICAgICAgIGlmIGlzaW5zdGFuY2UodHlwZSwgT2JqZWN0VHlwZSkgb3IgaXNpbnN0
YW5jZSh0eXBlLCBBcnJheVR5cGUpOgorICAgICAgICAgICAgcmV0dXJuICdzZXRWYWx1ZScKKyAg
ICAgICAgZWxpZiBpc2luc3RhbmNlKHR5cGUsIFByaW1pdGl2ZVR5cGUpOgorICAgICAgICAgICAg
aWYgdHlwZS5yYXdfbmFtZSgpIGluIFsnaW50ZWdlcicsICdudW1iZXInXToKKyAgICAgICAgICAg
ICAgICByZXR1cm4gJ3NldE51bWJlcicKKyAgICAgICAgICAgIGVsaWYgdHlwZS5yYXdfbmFtZSgp
IGluIFsnYW55J106CisgICAgICAgICAgICAgICAgcmV0dXJuICdzZXRWYWx1ZScKKyAgICAgICAg
ICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuICdzZXQnICsgdWNmaXJzdCh0eXBlLnJh
d19uYW1lKCkpCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh0eXBlLCBBbGlhc2VkVHlwZSk6Cisg
ICAgICAgICAgICByZXR1cm4gR2VuZXJhdG9yLmtleWVkX3NldF9tZXRob2RfZm9yX3R5cGUodHlw
ZS5hbGlhc2VkX3R5cGUpCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh0eXBlLCBFbnVtVHlwZSk6
CisgICAgICAgICAgICByZXR1cm4gR2VuZXJhdG9yLmtleWVkX3NldF9tZXRob2RfZm9yX3R5cGUo
dHlwZS5wcmltaXRpdmVfdHlwZSkKKworICAgICMgR2VuZXJhdGUgdHlwZSByZXByZXNlbnRhdGlv
bnMgZm9yIHZhcmlvdXMgc2l0dWF0aW9ucy4KKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIHR5
cGVfYnVpbGRlcl9zdHJpbmdfZm9yX3R5cGUodHlwZSk6CisgICAgICAgIGlmIGlzaW5zdGFuY2Uo
dHlwZSwgT2JqZWN0VHlwZSkgYW5kIGxlbih0eXBlLm1lbWJlcnMpID09IDA6CisgICAgICAgICAg
ICByZXR1cm4gJ0luc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0JworICAgICAgICBpZiBpc2luc3Rh
bmNlKHR5cGUsIChPYmplY3RUeXBlLCBBbGlhc2VkVHlwZSwgRW51bVR5cGUpKToKKyAgICAgICAg
ICAgIHJldHVybiAnSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6JXM6OiVzJyAlICh0eXBlLnR5cGVf
ZG9tYWluKCkuZG9tYWluX25hbWUsIHR5cGUucmF3X25hbWUoKSkKKyAgICAgICAgZWxpZiBpc2lu
c3RhbmNlKHR5cGUsIEFycmF5VHlwZSk6CisgICAgICAgICAgICByZXR1cm4gJ0luc3BlY3Rvcjo6
VHlwZUJ1aWxkZXI6OkFycmF5PCVzPicgJSBHZW5lcmF0b3IudHlwZV9idWlsZGVyX3N0cmluZ19m
b3JfdHlwZSh0eXBlLmVsZW1lbnRfdHlwZSkKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKHR5cGUs
IFByaW1pdGl2ZVR5cGUpOgorICAgICAgICAgICAgcmV0dXJuIEdlbmVyYXRvci5jcHBfbmFtZV9m
b3JfcHJpbWl0aXZlX3R5cGUodHlwZSkKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgdHlw
ZV9idWlsZGVyX3N0cmluZ19mb3JfdHlwZV9tZW1iZXIodHlwZV9tZW1iZXIsIG9iamVjdF9kZWNs
YXJhdGlvbik6CisgICAgICAgIGlmIGlzaW5zdGFuY2UodHlwZV9tZW1iZXIudHlwZSwgRW51bVR5
cGUpIGFuZCB0eXBlX21lbWJlci50eXBlLmlzX2Fub255bW91czoKKyAgICAgICAgICAgIHJldHVy
biAnOjonLmpvaW4oW0dlbmVyYXRvci50eXBlX2J1aWxkZXJfc3RyaW5nX2Zvcl90eXBlKG9iamVj
dF9kZWNsYXJhdGlvbi50eXBlKSwgdWNmaXJzdCh0eXBlX21lbWJlci5tZW1iZXJfbmFtZSldKQor
ICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIEdlbmVyYXRvci50eXBlX2J1aWxkZXJf
c3RyaW5nX2Zvcl90eXBlKHR5cGVfbWVtYmVyLnR5cGUpCisKKyAgICBAc3RhdGljbWV0aG9kCisg
ICAgZGVmIHR5cGVfc3RyaW5nX2Zvcl91bmNoZWNrZWRfZm9ybWFsX2luX3BhcmFtZXRlcihwYXJh
bWV0ZXIpOgorICAgICAgICBfdHlwZSA9IHBhcmFtZXRlci50eXBlCisgICAgICAgIGlmIGlzaW5z
dGFuY2UoX3R5cGUsIEFsaWFzZWRUeXBlKToKKyAgICAgICAgICAgIF90eXBlID0gX3R5cGUuYWxp
YXNlZF90eXBlICAjIEZhbGwgdGhyb3VnaCB0byBwcmltaXRpdmUuCisKKyAgICAgICAgaWYgaXNp
bnN0YW5jZShfdHlwZSwgRW51bVR5cGUpOgorICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5wcmlt
aXRpdmVfdHlwZSAgIyBGYWxsIHRocm91Z2ggdG8gcHJpbWl0aXZlLgorCisgICAgICAgIHNpZ2ls
ID0gJyonIGlmIHBhcmFtZXRlci5pc19vcHRpb25hbCBlbHNlICcmJworICAgICAgICBpZiBpc2lu
c3RhbmNlKF90eXBlLCBPYmplY3RUeXBlKSBvciBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpIGlzICdv
YmplY3QnOgorICAgICAgICAgICAgcmV0dXJuICdjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNw
ZWN0b3JPYmplY3Q+JyArIHNpZ2lsCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShfdHlwZSwgQXJy
YXlUeXBlKToKKyAgICAgICAgICAgICByZXR1cm4gJ2NvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Oklu
c3BlY3RvckFycmF5PicgKyBzaWdpbAorICAgICAgICBlbGlmIGlzaW5zdGFuY2UoX3R5cGUsIFBy
aW1pdGl2ZVR5cGUpOgorICAgICAgICAgICAgY3BwX25hbWUgPSBHZW5lcmF0b3IuY3BwX25hbWVf
Zm9yX3ByaW1pdGl2ZV90eXBlKF90eXBlKQorICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29w
dGlvbmFsOgorICAgICAgICAgICAgICAgIHJldHVybiAnY29uc3QgJXMqJyAlIGNwcF9uYW1lCisg
ICAgICAgICAgICBlbGlmIF90eXBlLnJhd19uYW1lKCkgaW4gWydzdHJpbmcnXToKKyAgICAgICAg
ICAgICAgICByZXR1cm4gJ2NvbnN0ICVzJicgJSBjcHBfbmFtZQorICAgICAgICAgICAgZWxzZToK
KyAgICAgICAgICAgICAgICByZXR1cm4gY3BwX25hbWUKKworICAgICAgICByZXR1cm4gInVua25v
d25fdW5jaGVja2VkX2Zvcm1hbF9pbl9wYXJhbWV0ZXJfdHlwZSIKKworICAgIEBzdGF0aWNtZXRo
b2QKKyAgICBkZWYgdHlwZV9zdHJpbmdfZm9yX2NoZWNrZWRfZm9ybWFsX2luX3BhcmFtZXRlcihw
YXJhbWV0ZXIpOgorICAgICAgICByZXR1cm4gR2VuZXJhdG9yLnR5cGVfc3RyaW5nX2Zvcl90eXBl
X3dpdGhfbmFtZShwYXJhbWV0ZXIudHlwZSwgcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lLCBwYXJh
bWV0ZXIuaXNfb3B0aW9uYWwpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIHR5cGVfc3Ry
aW5nX2Zvcl90eXBlX21lbWJlcihtZW1iZXIpOgorICAgICAgICByZXR1cm4gR2VuZXJhdG9yLnR5
cGVfc3RyaW5nX2Zvcl90eXBlX3dpdGhfbmFtZShtZW1iZXIudHlwZSwgbWVtYmVyLm1lbWJlcl9u
YW1lLCBGYWxzZSkKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgdHlwZV9zdHJpbmdfZm9y
X3R5cGVfd2l0aF9uYW1lKF90eXBlLCB0eXBlX25hbWUsIGlzX29wdGlvbmFsKToKKyAgICAgICAg
aWYgaXNpbnN0YW5jZShfdHlwZSwgKEFycmF5VHlwZSwgT2JqZWN0VHlwZSkpOgorICAgICAgICAg
ICAgcmV0dXJuICdQYXNzUmVmUHRyPCVzPicgJSBHZW5lcmF0b3IudHlwZV9idWlsZGVyX3N0cmlu
Z19mb3JfdHlwZShfdHlwZSkKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKF90eXBlLCBBbGlhc2Vk
VHlwZSk6CisgICAgICAgICAgICBidWlsZGVyX3R5cGUgPSBHZW5lcmF0b3IudHlwZV9idWlsZGVy
X3N0cmluZ19mb3JfdHlwZShfdHlwZSkKKyAgICAgICAgICAgIGlmIGlzX29wdGlvbmFsOgorICAg
ICAgICAgICAgICAgIHJldHVybiAnY29uc3QgJXMqIGNvbnN0JyAlIGJ1aWxkZXJfdHlwZQorICAg
ICAgICAgICAgZWxpZiBfdHlwZS5hbGlhc2VkX3R5cGUucXVhbGlmaWVkX25hbWUoKSBpbiBbJ2lu
dGVnZXInLCAnbnVtYmVyJ106CisgICAgICAgICAgICAgICAgcmV0dXJuIEdlbmVyYXRvci5jcHBf
bmFtZV9mb3JfcHJpbWl0aXZlX3R5cGUoX3R5cGUuYWxpYXNlZF90eXBlKQorICAgICAgICAgICAg
ZWxpZiBfdHlwZS5hbGlhc2VkX3R5cGUucXVhbGlmaWVkX25hbWUoKSBpbiBbJ3N0cmluZyddOgor
ICAgICAgICAgICAgICAgIHJldHVybiAnY29uc3QgJXMmJyAlIGJ1aWxkZXJfdHlwZQorICAgICAg
ICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gYnVpbGRlcl90eXBlCisgICAgICAg
IGVsaWYgaXNpbnN0YW5jZShfdHlwZSwgUHJpbWl0aXZlVHlwZSk6CisgICAgICAgICAgICBjcHBf
bmFtZSA9IEdlbmVyYXRvci5jcHBfbmFtZV9mb3JfcHJpbWl0aXZlX3R5cGUoX3R5cGUpCisgICAg
ICAgICAgICBpZiBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpIGluIFsnb2JqZWN0J106CisgICAgICAg
ICAgICAgICAgcmV0dXJuICdQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PicK
KyAgICAgICAgICAgIGVsaWYgX3R5cGUucXVhbGlmaWVkX25hbWUoKSBpbiBbJ2FueSddOgorICAg
ICAgICAgICAgICAgIHJldHVybiAnUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVl
PicKKyAgICAgICAgICAgIGVsaWYgaXNfb3B0aW9uYWw6CisgICAgICAgICAgICAgICAgcmV0dXJu
ICdjb25zdCAlcyogY29uc3QnICUgY3BwX25hbWUKKyAgICAgICAgICAgIGVsaWYgX3R5cGUucXVh
bGlmaWVkX25hbWUoKSBpbiBbJ3N0cmluZyddOgorICAgICAgICAgICAgICAgIHJldHVybiAnY29u
c3QgJXMmJyAlIGNwcF9uYW1lCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJl
dHVybiBjcHBfbmFtZQorICAgICAgICBlbGlmIGlzaW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKToK
KyAgICAgICAgICAgIGlmIF90eXBlLmlzX2Fub255bW91czoKKyAgICAgICAgICAgICAgICBlbnVt
X3R5cGVfbmFtZSA9IHVjZmlyc3QodHlwZV9uYW1lKQorICAgICAgICAgICAgZWxzZToKKyAgICAg
ICAgICAgICAgICBlbnVtX3R5cGVfbmFtZSA9ICdJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjolczo6
JXMnICUgKF90eXBlLnR5cGVfZG9tYWluKCkuZG9tYWluX25hbWUsIF90eXBlLnJhd19uYW1lKCkp
CisKKyAgICAgICAgICAgIGlmIGlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAgIHJldHVybiAn
JXMqJyAlIGVudW1fdHlwZV9uYW1lCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAg
IHJldHVybiAnJXMnICUgZW51bV90eXBlX25hbWUKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBk
ZWYgdHlwZV9zdHJpbmdfZm9yX2Zvcm1hbF9vdXRfcGFyYW1ldGVyKHBhcmFtZXRlcik6CisgICAg
ICAgIF90eXBlID0gcGFyYW1ldGVyLnR5cGUKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwg
KE9iamVjdFR5cGUsIEFycmF5VHlwZSkpOgorICAgICAgICAgICAgcmV0dXJuICdSZWZQdHI8JXM+
JicgJSBHZW5lcmF0b3IudHlwZV9idWlsZGVyX3N0cmluZ19mb3JfdHlwZShfdHlwZSkKKyAgICAg
ICAgZWxpZiBpc2luc3RhbmNlKF90eXBlLCBBbGlhc2VkVHlwZSk6CisgICAgICAgICAgICBidWls
ZGVyX3R5cGUgPSBHZW5lcmF0b3IudHlwZV9idWlsZGVyX3N0cmluZ19mb3JfdHlwZShfdHlwZSkK
KyAgICAgICAgICAgIGlmIHBhcmFtZXRlci5pc19vcHRpb25hbDoKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gJ2NvbnN0ICVzKiBjb25zdCcgJSBidWlsZGVyX3R5cGUKKyAgICAgICAgICAgIGVsaWYg
X3R5cGUuYWxpYXNlZF90eXBlLnF1YWxpZmllZF9uYW1lKCkgaW4gWydpbnRlZ2VyJywgJ251bWJl
ciddOgorICAgICAgICAgICAgICAgIHJldHVybiBHZW5lcmF0b3IuY3BwX25hbWVfZm9yX3ByaW1p
dGl2ZV90eXBlKF90eXBlLmFsaWFzZWRfdHlwZSkgKyAnKicKKyAgICAgICAgICAgIGVsaWYgX3R5
cGUuYWxpYXNlZF90eXBlLnF1YWxpZmllZF9uYW1lKCkgaW4gWydzdHJpbmcnXToKKyAgICAgICAg
ICAgICAgICByZXR1cm4gJyVzKicgJSBidWlsZGVyX3R5cGUKKyAgICAgICAgICAgIGVsc2U6Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGJ1aWxkZXJfdHlwZQorICAgICAgICBlbGlmIGlzaW5zdGFu
Y2UoX3R5cGUsIFByaW1pdGl2ZVR5cGUpOgorICAgICAgICAgICAgY3BwX25hbWUgPSBHZW5lcmF0
b3IuY3BwX25hbWVfZm9yX3ByaW1pdGl2ZV90eXBlKF90eXBlKQorICAgICAgICAgICAgaWYgcGFy
YW1ldGVyLmlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAgIHJldHVybiAiSW5zcGVjdG9yOjpU
eXBlQnVpbGRlcjo6T3B0T3V0cHV0PCVzPioiICUgY3BwX25hbWUKKyAgICAgICAgICAgIGVsc2U6
CisgICAgICAgICAgICAgICAgcmV0dXJuICclcyonICUgY3BwX25hbWUKKyAgICAgICAgZWxpZiBp
c2luc3RhbmNlKF90eXBlLCBFbnVtVHlwZSk6CisgICAgICAgICAgICBpZiBfdHlwZS5pc19hbm9u
eW1vdXM6CisgICAgICAgICAgICAgICAgcmV0dXJuICdJbnNwZWN0b3Ilc0JhY2tlbmREaXNwYXRj
aGVySGFuZGxlcjo6JXMqJyAlIChfdHlwZS50eXBlX2RvbWFpbigpLmRvbWFpbl9uYW1lLCB1Y2Zp
cnN0KHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkpCisgICAgICAgICAgICBlbHNlOgorICAgICAg
ICAgICAgICAgIHJldHVybiAnSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6JXM6OiVzKicgJSAoX3R5
cGUudHlwZV9kb21haW4oKS5kb21haW5fbmFtZSwgX3R5cGUucmF3X25hbWUoKSkKKworICAgICAg
ICByZXR1cm4gInVua25vd25fZm9ybWFsX291dF9wYXJhbWV0ZXJfdHlwZSIKKworICAgICMgRklY
TUU6IHRoaXMgaXMgb25seSBzbGlnaHRseSBkaWZmZXJlbnQgZnJvbSBvdXQgcGFyYW1ldGVyczsg
dGhleSBjb3VsZCBiZSB1bmlmaWVkLgorICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgdHlwZV9z
dHJpbmdfZm9yX2Zvcm1hbF9hc3luY19wYXJhbWV0ZXIocGFyYW1ldGVyKToKKyAgICAgICAgX3R5
cGUgPSBwYXJhbWV0ZXIudHlwZQorICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBBbGlhc2Vk
VHlwZSk6CisgICAgICAgICAgICBfdHlwZSA9IF90eXBlLmFsaWFzZWRfdHlwZSAgIyBGYWxsIHRo
cm91Z2guCisKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgRW51bVR5cGUpOgorICAgICAg
ICAgICAgX3R5cGUgPSBfdHlwZS5wcmltaXRpdmVfdHlwZSAgIyBGYWxsIHRocm91Z2guCisKKyAg
ICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgKE9iamVjdFR5cGUsIEFycmF5VHlwZSkpOgorICAg
ICAgICAgICAgcmV0dXJuICdQYXNzUmVmUHRyPCVzPicgJSBHZW5lcmF0b3IudHlwZV9idWlsZGVy
X3N0cmluZ19mb3JfdHlwZShfdHlwZSkKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKF90eXBlLCBQ
cmltaXRpdmVUeXBlKToKKyAgICAgICAgICAgIGNwcF9uYW1lID0gR2VuZXJhdG9yLmNwcF9uYW1l
X2Zvcl9wcmltaXRpdmVfdHlwZShfdHlwZSkKKyAgICAgICAgICAgIGlmIHBhcmFtZXRlci5pc19v
cHRpb25hbDoKKyAgICAgICAgICAgICAgICByZXR1cm4gIkluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6
Ok9wdE91dHB1dDwlcz4qIiAlIGNwcF9uYW1lCisgICAgICAgICAgICBlbGlmIF90eXBlLnF1YWxp
ZmllZF9uYW1lKCkgaW4gWydpbnRlZ2VyJywgJ251bWJlciddOgorICAgICAgICAgICAgICAgIHJl
dHVybiBHZW5lcmF0b3IuY3BwX25hbWVfZm9yX3ByaW1pdGl2ZV90eXBlKF90eXBlKQorICAgICAg
ICAgICAgZWxpZiBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpIGluIFsnc3RyaW5nJ106CisgICAgICAg
ICAgICAgICAgcmV0dXJuICdjb25zdCAlcyYnICUgY3BwX25hbWUKKyAgICAgICAgICAgIGVsc2U6
CisgICAgICAgICAgICAgICAgcmV0dXJuIGNwcF9uYW1lCisKKyAgICAgICAgcmV0dXJuICJ1bmtu
b3duX2Zvcm1hbF9hc3luY19wYXJhbWV0ZXJfdHlwZSIKKworICAgICMgSW4tcGFyYW1ldGVycyBk
b24ndCB1c2UgYnVpbGRlciB0eXBlcywgYmVjYXVzZSB0aGV5IGNvdWxkIGJlIHBhc3NlZAorICAg
ICMgIm9wZW4gdHlwZXMiIHRoYXQgYXJlIG1hbnVhbGx5IGNvbnN0cnVjdGVkIG91dCBvZiBJbnNw
ZWN0b3JPYmplY3RzLgorCisgICAgIyBGSVhNRTogT25seSBwYXJhbWV0ZXJzIHRoYXQgYXJlIGFj
dHVhbGx5IG9wZW4gdHlwZXMgc2hvdWxkIG5lZWQgbm9uLWJ1aWxkZXIgcGFyYW1ldGVyIHR5cGVz
LgorICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgdHlwZV9zdHJpbmdfZm9yX3N0YWNrX2luX3Bh
cmFtZXRlcihwYXJhbWV0ZXIpOgorICAgICAgICBfdHlwZSA9IHBhcmFtZXRlci50eXBlCisgICAg
ICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEFsaWFzZWRUeXBlKToKKyAgICAgICAgICAgIF90eXBl
ID0gX3R5cGUuYWxpYXNlZF90eXBlICAjIEZhbGwgdGhyb3VnaC4KKworICAgICAgICBpZiBpc2lu
c3RhbmNlKF90eXBlLCBFbnVtVHlwZSk6CisgICAgICAgICAgICBfdHlwZSA9IF90eXBlLnByaW1p
dGl2ZV90eXBlICAjIEZhbGwgdGhyb3VnaC4KKworICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBl
LCBPYmplY3RUeXBlKToKKyAgICAgICAgICAgIHJldHVybiAiUmVmUHRyPEluc3BlY3Rvcjo6SW5z
cGVjdG9yT2JqZWN0PiIKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKF90eXBlLCBBcnJheVR5cGUp
OgorICAgICAgICAgICAgcmV0dXJuICJSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheT4i
CisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShfdHlwZSwgUHJpbWl0aXZlVHlwZSk6CisgICAgICAg
ICAgICBjcHBfbmFtZSA9IEdlbmVyYXRvci5jcHBfbmFtZV9mb3JfcHJpbWl0aXZlX3R5cGUoX3R5
cGUpCisgICAgICAgICAgICBpZiBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpIGluIFsnYW55JywgJ29i
amVjdCddOgorICAgICAgICAgICAgICAgIHJldHVybiAiUmVmUHRyPCVzPiIgJSBHZW5lcmF0b3Iu
Y3BwX25hbWVfZm9yX3ByaW1pdGl2ZV90eXBlKF90eXBlKQorICAgICAgICAgICAgZWxpZiBwYXJh
bWV0ZXIuaXNfb3B0aW9uYWwgYW5kIF90eXBlLnF1YWxpZmllZF9uYW1lKCkgbm90IGluIFsnYm9v
bGVhbicsICdzdHJpbmcnLCAnaW50ZWdlciddOgorICAgICAgICAgICAgICAgIHJldHVybiAiSW5z
cGVjdG9yOjpUeXBlQnVpbGRlcjo6T3B0T3V0cHV0PCVzPiIgJSBjcHBfbmFtZQorICAgICAgICAg
ICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gY3BwX25hbWUKKworICAgIEBzdGF0aWNt
ZXRob2QKKyAgICBkZWYgdHlwZV9zdHJpbmdfZm9yX3N0YWNrX291dF9wYXJhbWV0ZXIocGFyYW1l
dGVyKToKKyAgICAgICAgX3R5cGUgPSBwYXJhbWV0ZXIudHlwZQorICAgICAgICBpZiBpc2luc3Rh
bmNlKF90eXBlLCAoQXJyYXlUeXBlLCBPYmplY3RUeXBlKSk6CisgICAgICAgICAgICByZXR1cm4g
J1JlZlB0cjwlcz4nICUgR2VuZXJhdG9yLnR5cGVfYnVpbGRlcl9zdHJpbmdfZm9yX3R5cGUoX3R5
cGUpCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShfdHlwZSwgQWxpYXNlZFR5cGUpOgorICAgICAg
ICAgICAgcmV0dXJuICclcycgJSBHZW5lcmF0b3IudHlwZV9idWlsZGVyX3N0cmluZ19mb3JfdHlw
ZShfdHlwZSkKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKF90eXBlLCBQcmltaXRpdmVUeXBlKToK
KyAgICAgICAgICAgIGNwcF9uYW1lID0gR2VuZXJhdG9yLmNwcF9uYW1lX2Zvcl9wcmltaXRpdmVf
dHlwZShfdHlwZSkKKyAgICAgICAgICAgIGlmIHBhcmFtZXRlci5pc19vcHRpb25hbDoKKyAgICAg
ICAgICAgICAgICByZXR1cm4gIkluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6Ok9wdE91dHB1dDwlcz4i
ICUgY3BwX25hbWUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIGNw
cF9uYW1lCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShfdHlwZSwgRW51bVR5cGUpOgorICAgICAg
ICAgICAgaWYgX3R5cGUuaXNfYW5vbnltb3VzOgorICAgICAgICAgICAgICAgIHJldHVybiAnSW5z
cGVjdG9yJXNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OiVzJyAlIChfdHlwZS50eXBlX2RvbWFp
bigpLmRvbWFpbl9uYW1lLCB1Y2ZpcnN0KHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkpCisgICAg
ICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiAnSW5zcGVjdG9yOjpUeXBlQnVp
bGRlcjo6JXM6OiVzJyAlIChfdHlwZS50eXBlX2RvbWFpbigpLmRvbWFpbl9uYW1lLCBfdHlwZS5y
YXdfbmFtZSgpKQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBhc3NlcnRpb25fbWV0aG9k
X2Zvcl90eXBlX21lbWJlcih0eXBlX21lbWJlciwgb2JqZWN0X2RlY2xhcmF0aW9uKToKKworICAg
ICAgICBkZWYgYXNzZXJ0aW9uX21ldGhvZF9mb3JfdHlwZShfdHlwZSk6CisgICAgICAgICAgICBy
ZXR1cm4gJ0JpbmRpbmdUcmFpdHM8JXM+Ojphc3NlcnRDb3JyZWN0VmFsdWUnICUgR2VuZXJhdG9y
LnR5cGVfYnVpbGRlcl9zdHJpbmdfZm9yX3R5cGUoX3R5cGUpCisKKyAgICAgICAgaWYgaXNpbnN0
YW5jZSh0eXBlX21lbWJlci50eXBlLCBBbGlhc2VkVHlwZSk6CisgICAgICAgICAgICByZXR1cm4g
YXNzZXJ0aW9uX21ldGhvZF9mb3JfdHlwZSh0eXBlX21lbWJlci50eXBlLmFsaWFzZWRfdHlwZSkK
KyAgICAgICAgZWxpZiBpc2luc3RhbmNlKHR5cGVfbWVtYmVyLnR5cGUsIEVudW1UeXBlKSBhbmQg
dHlwZV9tZW1iZXIudHlwZS5pc19hbm9ueW1vdXM6CisgICAgICAgICAgICByZXR1cm4gJ0JpbmRp
bmdUcmFpdHM8JXM+Ojphc3NlcnRDb3JyZWN0VmFsdWUnICUgR2VuZXJhdG9yLnR5cGVfYnVpbGRl
cl9zdHJpbmdfZm9yX3R5cGVfbWVtYmVyKHR5cGVfbWVtYmVyLCBvYmplY3RfZGVjbGFyYXRpb24p
CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gYXNzZXJ0aW9uX21ldGhvZF9mb3Jf
dHlwZSh0eXBlX21lbWJlci50eXBlKQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBjcHBf
bmFtZV9mb3JfcHJpbWl0aXZlX3R5cGUodHlwZSk6CisgICAgICAgIHJldHVybiBfUFJJTUlUSVZF
X1RPX0NQUF9OQU1FX01BUC5nZXQodHlwZS5yYXdfbmFtZSgpKQorCisgICAgQHN0YXRpY21ldGhv
ZAorICAgIGRlZiBqc19uYW1lX2Zvcl9wYXJhbWV0ZXJfdHlwZSh0eXBlKToKKyAgICAgICAgaWYg
aXNpbnN0YW5jZSh0eXBlLCAoQXJyYXlUeXBlLCBPYmplY3RUeXBlKSk6CisgICAgICAgICAgICBy
ZXR1cm4gJ29iamVjdCcKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKHR5cGUsIEFsaWFzZWRUeXBl
KToKKyAgICAgICAgICAgIHJldHVybiBHZW5lcmF0b3IuanNfbmFtZV9mb3JfcGFyYW1ldGVyX3R5
cGUodHlwZS5hbGlhc2VkX3R5cGUpCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh0eXBlLCBFbnVt
VHlwZSk6CisgICAgICAgICAgIHJldHVybiBHZW5lcmF0b3IuanNfbmFtZV9mb3JfcGFyYW1ldGVy
X3R5cGUodHlwZS5wcmltaXRpdmVfdHlwZSkKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKHR5cGUs
IFByaW1pdGl2ZVR5cGUpOgorICAgICAgICAgICAgaWYgdHlwZS5xdWFsaWZpZWRfbmFtZSgpIGlu
IFsnb2JqZWN0JywgJ2FueSddOgorICAgICAgICAgICAgICAgIHJldHVybiAnb2JqZWN0JworICAg
ICAgICAgICAgZWxpZiB0eXBlLnF1YWxpZmllZF9uYW1lKCkgaW4gWydpbnRlZ2VyJywgJ251bWJl
ciddOgorICAgICAgICAgICAgICAgIHJldHVybiAnbnVtYmVyJworICAgICAgICAgICAgZWxzZToK
KyAgICAgICAgICAgICAgICByZXR1cm4gdHlwZS5xdWFsaWZpZWRfbmFtZSgpCisKKyAgICAjIERl
Y2lkZSB3aGV0aGVyIGNlcnRhaW4gaGVscGVycyBhcmUgbmVjZXNhcnkgaW4gYSBzaXR1YXRpb24u
CisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBzaG91bGRfdXNlX3dyYXBwZXJfZm9yX3JldHVy
bl90eXBlKHR5cGUpOgorICAgICAgICByZXR1cm4gbm90IGlzaW5zdGFuY2UodHlwZSwgKEFycmF5
VHlwZSwgT2JqZWN0VHlwZSkpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIHNob3VsZF9w
YXNzX2J5X2NvcHlfZm9yX3JldHVybl90eXBlKHR5cGUpOgorICAgICAgICByZXR1cm4gaXNpbnN0
YW5jZSh0eXBlLCAoQXJyYXlUeXBlLCBPYmplY3RUeXBlKSkgb3IgKGlzaW5zdGFuY2UodHlwZSwg
KFByaW1pdGl2ZVR5cGUpKSBhbmQgdHlwZS5xdWFsaWZpZWRfbmFtZSgpID09ICJvYmplY3QiKQor
CisKK2NsYXNzIER1bW15R2VuZXJhdG9yKEdlbmVyYXRvcik6CisgICAgcGFzcwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJh
dG9yX3RlbXBsYXRlcy5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9jb2RlZ2VuL2dlbmVyYXRvcl90ZW1wbGF0ZXMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjA2YmQ3NTNjNjRl
NmRkNTYyMTA3OGVlMDNiYWRmZjYzOGE5YjVlOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRvcl90ZW1wbGF0
ZXMucHkKQEAgLTAsMCArMSwyNjMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyBDb3B5cmln
aHQgKGMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQg
KGMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
IworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
IworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisjIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworIyBHZW5lcmF0b3IgdGVt
cGxhdGVzLCB3aGljaCBjYW4gYmUgZmlsbGVkIHdpdGggc3RyaW5nLlRlbXBsYXRlLgorIyBGb2xs
b3dpbmcgYXJlIGNsYXNzZXMgdGhhdCBmaWxsIHRoZSB0ZW1wbGF0ZXMgZnJvbSB0aGUgdHlwZWNo
ZWNrZWQgbW9kZWwuCisKKworY2xhc3MgR2VuZXJhdG9yVGVtcGxhdGVzOgorICAgIENvcHlyaWdo
dEJsb2NrID0gKAorICAgICIiIi8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gJHtpbnB1dEZpbGVuYW1lfQorLy8g
YnkgdGhlIHNjcmlwdDogSmF2YVNjcmlwdENvcmUvcmVwbGF5L3NjcmlwdHMvQ29kZUdlbmVyYXRv
ckluc3BlY3Rvci5weSIiIikKKworICAgIENwcEhlYWRlclByZWx1ZGUgPSAoCisgICAgIiIiI2lm
bmRlZiAke2hlYWRlckd1YXJkU3RyaW5nfQorI2RlZmluZSAke2hlYWRlckd1YXJkU3RyaW5nfQor
CisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworJHtpbmNsdWRlc30KKworbmFtZXNwYWNlIEluc3Bl
Y3RvciB7CisKKyR7dHlwZWRlZnN9IiIiKQorCisgICAgQ3BwSGVhZGVyUG9zdGx1ZGUgPSAoCisg
ICAgIiIifSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVD
VE9SKQorCisjZW5kaWYgLy8gIWRlZmluZWQoJHtoZWFkZXJHdWFyZFN0cmluZ30pIiIiKQorCisg
ICAgQ3BwSW1wbGVtZW50YXRpb25QcmVsdWRlID0gKAorICAgICIiIiNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICR7cHJpbWFyeUluY2x1ZGV9CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQor
Ciske3NlY29uZGFyeUluY2x1ZGVzfQorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsiIiIpCisKKyAg
ICBDcHBJbXBsZW1lbnRhdGlvblBvc3RsdWRlID0gKAorICAgICIiIn0gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKyIiIikKKworICAgIEJhY2tl
bmREaXNwYXRjaGVySGVhZGVyRG9tYWluSGFuZGxlckRlY2xhcmF0aW9uID0gKAorICAgICIiIiR7
Y2xhc3NBbmRFeHBvcnRNYWNyb30gSW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRj
aGVySGFuZGxlciB7CitwdWJsaWM6Ciske2NvbW1hbmREZWNsYXJhdGlvbnN9Citwcm90ZWN0ZWQ6
CisgICAgdmlydHVhbCB+SW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVySGFu
ZGxlcigpOworfTsiIiIpCisKKyAgICBCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckRvbWFpbkRpc3Bh
dGNoZXJEZWNsYXJhdGlvbiA9ICgKKyAgICAiIiIke2NsYXNzQW5kRXhwb3J0TWFjcm99IEluc3Bl
Y3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0
b3I6Okluc3BlY3RvclN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNo
ZXI+IGNyZWF0ZShJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiwgSW5zcGVj
dG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOworICAgIHZpcnR1YWwg
dm9pZCBkaXNwYXRjaChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IG1lc3NhZ2UpIG92ZXJyaWRlOworJHtjb21t
YW5kRGVjbGFyYXRpb25zfQorcHJpdmF0ZToKKyAgICBJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFj
a2VuZERpc3BhdGNoZXIoSW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciosIElu
c3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKKyAgICBJbnNw
ZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBtX2FnZW50OworfTsi
IiIpCisKKyAgICBCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckFzeW5jQ29tbWFuZERlY2xhcmF0aW9u
ID0gKAorICAgICIiIiAgICBjbGFzcyAke2NhbGxiYWNrTmFtZX0gOiBwdWJsaWMgSW5zcGVjdG9y
OjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlIHsKKyAgICBwdWJsaWM6
CisgICAgICAgICR7Y2FsbGJhY2tOYW1lfShQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXI+LCBpbnQgaWQpOworICAgICAgICB2b2lkIHNlbmRTdWNjZXNzKCR7
b3V0UGFyYW1ldGVyc30pOworICAgIH07CisgICAgdmlydHVhbCB2b2lkICR7Y29tbWFuZE5hbWV9
KCR7aW5QYXJhbWV0ZXJzfSkgPSAwOyIiIikKKworICAgIEJhY2tlbmREaXNwYXRjaGVySW1wbGVt
ZW50YXRpb25TbWFsbFN3aXRjaCA9ICgKKyAgICAiIiJ2b2lkIEluc3BlY3RvciR7ZG9tYWluTmFt
ZX1CYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYg
bWV0aG9kLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbWVzc2FnZSkKK3sKKyAgICBSZWY8
SW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsK
KworJHtkaXNwYXRjaENhc2VzfQorICAgIGVsc2UKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+cmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElkLCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
cjo6TWV0aG9kTm90Rm91bmQsIFN0cmluZygiJyIpICsgIiR7ZG9tYWluTmFtZX0iICsgJy4nICsg
bWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOworfSIiIikKKworICAgIEJhY2tlbmREaXNwYXRj
aGVySW1wbGVtZW50YXRpb25MYXJnZVN3aXRjaCA9ICgKKyIiInZvaWQgSW5zcGVjdG9yJHtkb21h
aW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIGNhbGxJZCwgY29uc3QgU3Ry
aW5nJiBtZXRob2QsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtZXNzYWdlKQoreworICAg
IFJlZjxJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRo
aXMpOworCisgICAgdHlwZWRlZiB2b2lkIChJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERp
c3BhdGNoZXI6OipDYWxsSGFuZGxlcikobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvcjo6SW5z
cGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsKKyAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBDYWxs
SGFuZGxlcj4gRGlzcGF0Y2hNYXA7CisgICAgREVQUkVDQVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FM
KERpc3BhdGNoTWFwLCBkaXNwYXRjaE1hcCwgKCkpOworICAgIGlmIChkaXNwYXRjaE1hcC5pc0Vt
cHR5KCkpIHsKKyAgICAgICAgc3RhdGljIGNvbnN0IHN0cnVjdCBNZXRob2RUYWJsZSB7CisgICAg
ICAgICAgICBjb25zdCBjaGFyKiBuYW1lOworICAgICAgICAgICAgQ2FsbEhhbmRsZXIgaGFuZGxl
cjsKKyAgICAgICAgfSBjb21tYW5kc1tdID0geworJHtkaXNwYXRjaENhc2VzfQorICAgICAgICB9
OworICAgICAgICBzaXplX3QgbGVuZ3RoID0gV1RGX0FSUkFZX0xFTkdUSChjb21tYW5kcyk7Cisg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCisgICAgICAgICAgICBk
aXNwYXRjaE1hcC5hZGQoY29tbWFuZHNbaV0ubmFtZSwgY29tbWFuZHNbaV0uaGFuZGxlcik7Cisg
ICAgfQorCisgICAgSGFzaE1hcDxTdHJpbmcsIENhbGxIYW5kbGVyPjo6aXRlcmF0b3IgaXQgPSBk
aXNwYXRjaE1hcC5maW5kKG1ldGhvZCk7CisgICAgaWYgKGl0ID09IGRpc3BhdGNoTWFwLmVuZCgp
KSB7CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoJmNh
bGxJZCwgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCBTdHJpbmco
IiciKSArICIke2RvbWFpbk5hbWV9IiArICcuJyArIG1ldGhvZCArICInIHdhcyBub3QgZm91bmQi
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgICgoKnRoaXMpLippdC0+dmFsdWUpKGNh
bGxJZCwgKm1lc3NhZ2UuZ2V0KCkpOworfSIiIikKKworICAgIEJhY2tlbmREaXNwYXRjaGVySW1w
bGVtZW50YXRpb25Eb21haW5Db25zdHJ1Y3RvciA9ICgKKyAgICAiIiJQYXNzUmVmUHRyPEluc3Bl
Y3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcj4gSW5zcGVjdG9yJHtkb21haW5OYW1l
fUJhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUoSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqIGJh
Y2tlbmREaXNwYXRjaGVyLCBJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyKiBhZ2VudCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEluc3BlY3RvciR7ZG9t
YWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlciwgYWdlbnQpKTsKK30K
KworSW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyOjpJbnNwZWN0b3Ike2Rv
bWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXIoSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqIGJh
Y2tlbmREaXNwYXRjaGVyLCBJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyKiBhZ2VudCkKKyAgICA6IEluc3BlY3RvclN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRj
aGVyKGJhY2tlbmREaXNwYXRjaGVyKQorICAgICwgbV9hZ2VudChhZ2VudCkKK3sKKyAgICBtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4oQVNDSUlMaXRlcmFs
KCIke2RvbWFpbk5hbWV9IiksIHRoaXMpOworfSIiIikKKworICAgIEJhY2tlbmREaXNwYXRjaGVy
SW1wbGVtZW50YXRpb25QcmVwYXJlQ29tbWFuZEFyZ3VtZW50cyA9ICgKKyIiIiAgICBSZWZQdHI8
SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgp
OworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IG1lc3NhZ2Uu
Z2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicGFyYW1zIikpOworICAgIEluc3BlY3Rvck9iamVjdCog
cGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOworICAgIEluc3BlY3Rv
ckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOworJHtpblBh
cmFtZXRlckRlY2xhcmF0aW9uc30KKyAgICBpZiAocHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7
CisgICAgICAgIFN0cmluZyBlcnJvck1lc3NhZ2UgPSBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1
bWVudHMgb2YgbWV0aG9kIFwnJXNcJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiJHtkb21haW5OYW1l
fS4ke2NvbW1hbmROYW1lfSIpOworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQ
cm90b2NvbEVycm9yKCZjYWxsSWQsIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpJbnZhbGlk
UGFyYW1zLCBlcnJvck1lc3NhZ2UsIHByb3RvY29sRXJyb3JzLnJlbGVhc2UoKSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisiIiIpCisKKyAgICBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0
aW9uQXN5bmNDb21tYW5kID0gKAorIiIiSW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNw
YXRjaGVySGFuZGxlcjo6JHtjYWxsYmFja05hbWV9Ojoke2NhbGxiYWNrTmFtZX0oUGFzc1JlZlB0
cjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4gYmFja2VuZERpc3BhdGNoZXIsIGludCBpZCkg
OiBJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2UoYmFj
a2VuZERpc3BhdGNoZXIsIGlkKSB7IH0KKwordm9pZCBJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyOjoke2NhbGxiYWNrTmFtZX06OnNlbmRTdWNjZXNzKCR7Zm9y
bWFsUGFyYW1ldGVyc30pCit7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4ganNvbk1lc3Nh
Z2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworJHtvdXRQYXJhbWV0ZXJBc3NpZ25tZW50
c30KKyAgICBzZW5kSWZBY3RpdmUoanNvbk1lc3NhZ2UsIEVycm9yU3RyaW5nKCkpOworfSIiIikK
KworICAgIEZyb250ZW5kRGlzcGF0Y2hlckRvbWFpbkRpc3BhdGNoZXJEZWNsYXJhdGlvbiA9ICgK
KyIiIiR7Y2xhc3NBbmRFeHBvcnRNYWNyb30gSW5zcGVjdG9yJHtkb21haW5OYW1lfUZyb250ZW5k
RGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgSW5zcGVjdG9yJHtkb21haW5OYW1lfUZyb250ZW5k
RGlzcGF0Y2hlcihJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hh
bm5lbCkgOiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbChpbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwpIHsgfQorJHtldmVudERlY2xhcmF0aW9uc30KK3ByaXZhdGU6CisgICAgSW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKK307IiIiKQorCisgICAg
VHlwZUJ1aWxkZXJEZWNsYXJhdGlvblByZWx1ZGUgPSAoCisiIiIgICAgdGVtcGxhdGU8aW50IFNU
QVRFPgorICAgIGNsYXNzIEJ1aWxkZXIgeworICAgIHByaXZhdGU6CisgICAgICAgIFJlZlB0cjxJ
bnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CisKKyAgICAgICAgdGVtcGxhdGU8
aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQ
Pio+KHRoaXMpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPC8qJHtv
YmplY3RUeXBlfSovSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IHB0cikKKyAgICAgICAgewor
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJf
Y3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsK
KyAgICAgICAgfQorICAgICAgICBmcmllbmQgY2xhc3MgJHtvYmplY3RUeXBlfTsKKyAgICBwdWJs
aWM6IiIiKQorCisgICAgVHlwZUJ1aWxkZXJEZWNsYXJhdGlvblBvc3RsdWRlID0gKAorIiIiCisg
ICAgICAgIG9wZXJhdG9yIFJlZlB0cjwke29iamVjdFR5cGV9PiYgKCkKKyAgICAgICAgeworICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNf
bm90X3JlYWR5KTsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZigke29iamVjdFR5
cGV9KSA9PSBzaXplb2YoSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QpLCBjYW5ub3RfY2FzdCk7
CisgICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPCR7b2JqZWN0VHlw
ZX0+Kj4oJm1fcmVzdWx0KTsKKyAgICAgICAgfQorCisgICAgICAgIFBhc3NSZWZQdHI8JHtvYmpl
Y3RUeXBlfT4gcmVsZWFzZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBSZWZQdHI8
JHtvYmplY3RUeXBlfT4oKnRoaXMpLnJlbGVhc2UoKTsKKyAgICAgICAgfQorICAgIH07CisKKyAg
ICAvKgorICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKKyR7Y29uc3RydWN0b3JFeGFtcGxl
fQorICAgICAqLworICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEluc3BlY3Rvcjo6SW5zcGVj
dG9yT2JqZWN0OjpjcmVhdGUoKSk7CisgICAgfQorICAgIHR5cGVkZWYgSW5zcGVjdG9yOjpUeXBl
QnVpbGRlcjo6U3RydWN0SXRlbVRyYWl0cyBJdGVtVHJhaXRzOyIiIikKKworICAgIFR5cGVCdWls
ZGVyT2JqZWN0UnVudGltZUNhc3QgPSAoCisiIiJQYXNzUmVmUHRyPCR7b2JqZWN0VHlwZX0+IEJp
bmRpbmdUcmFpdHM8JHtvYmplY3RUeXBlfT46OnJ1bnRpbWVDYXN0KFBhc3NSZWZQdHI8SW5zcGVj
dG9yOjpJbnNwZWN0b3JWYWx1ZT4gdmFsdWUpCit7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5z
cGVjdG9yT2JqZWN0PiBvYmplY3Q7CisgICAgYm9vbCBjYXN0UmVzID0gdmFsdWUtPmFzT2JqZWN0
KCZvYmplY3QpOworICAgIEFTU0VSVF9VTlVTRUQoY2FzdFJlcywgY2FzdFJlcyk7CisjaWYgIUFT
U0VSVF9ESVNBQkxFRAorICAgIEJpbmRpbmdUcmFpdHM8JHtvYmplY3RUeXBlfT46OmFzc2VydENv
cnJlY3RWYWx1ZShvYmplY3QuZ2V0KCkpOworI2VuZGlmICAvLyAhQVNTRVJUX0RJU0FCTEVECisg
ICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKCR7b2JqZWN0VHlwZX0pID09IHNpemVvZihJbnNwZWN0
b3I6Okluc3BlY3Rvck9iamVjdEJhc2UpLCB0eXBlX2Nhc3RfcHJvYmxlbSk7CisgICAgcmV0dXJu
IHN0YXRpY19jYXN0PCR7b2JqZWN0VHlwZX0qPihzdGF0aWNfY2FzdDxJbnNwZWN0b3I6Okluc3Bl
Y3Rvck9iamVjdEJhc2UqPihvYmplY3QuZ2V0KCkpKTsKK30KKyIiIgorKQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vbW9kZWxzLnB5
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vbW9kZWxz
LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjk4Mjg3ZWQ1MWNiMjQ2NjM3ODMzMmI0NzRmYTIyZWQ4ODlhYzEwNzkK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvY29kZWdlbi9tb2RlbHMucHkKQEAgLTAsMCArMSw1NzAgQEAKKyMhL3Vzci9iaW4vZW52IHB5
dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorIyBDb3B5cmlnaHQgKGMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6
CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
IyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisjIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KworaW1wb3J0IGxvZ2dpbmcKKworIyBVc2UgYSBnbG9iYWwgbG9nZ2VyLCB3aGljaCBub3JtYWxs
eSBvbmx5IGxvZ3MgZXJyb3JzLgorIyBJdCBjYW4gYmUgY29uZmlndXJlZCB0byBsb2cgZGVidWcg
bWVzc2FnZXMgZnJvbSB0aGUgQ0xJLgorbG9nZ2luZy5iYXNpY0NvbmZpZyhmb3JtYXQ9JyUobGV2
ZWxuYW1lKXM6ICUobWVzc2FnZSlzJywgbGV2ZWw9bG9nZ2luZy5FUlJPUikKK2xvZyA9IGxvZ2dp
bmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQorCisKK19GUkFNRVdPUktfQ09ORklHX01BUCA9IHsKKyAg
ICAiR2xvYmFsIjogeworICAgICAgICAicHJlZml4IjogIiIsCisgICAgfSwKKworICAgICJXVEYi
OiB7CisgICAgICAgICJwcmVmaXgiOiAiV1RGIiwKKyAgICB9LAorICAgICJKYXZhU2NyaXB0Q29y
ZSI6IHsKKyAgICAgICAgInByZWZpeCI6ICJKUyIsCisgICAgICAgICJleHBvcnRfbWFjcm8iOiAi
SlNfRVhQT1JUX1BSSVZBVEUiCisgICAgfSwKKyAgICAiV2ViQ29yZSI6IHsKKyAgICAgICAgInBy
ZWZpeCI6ICJXZWIiLAorICAgIH0sCisgICAgIyBVc2VkIGZvciBjb2RlIGdlbmVyYXRvciB0ZXN0
cy4KKyAgICAiVGVzdCI6IHsKKyAgICAgICAgInByZWZpeCI6ICJUZXN0IiwKKyAgICB9Cit9CisK
KworIyBGSVhNRTogVGhlc2Ugc2hvdWxkIGJlIGNvbnZlcnRlZCBpbnRvIEpTT04gcHJvcGVydGll
cywgb3IgcmVuYW1lZC4KK19UWVBFU19ORUVESU5HX1JFTkFNRV9XT1JLQVJPVU5EUyA9IHsKKyAg
ICAnUkdCQSc6ICdSZ2JhJywKKyAgICAjIEZvciB0ZXN0aW5nIG9ubHkuCisgICAgJ1VucGxlYXNh
bnROYW1lJzogJ0hhcHB5TmFtZScKK30KKworCitjbGFzcyBQYXJzZUV4Y2VwdGlvbihFeGNlcHRp
b24pOgorICAgIHBhc3MKKworCitjbGFzcyBUeXBlY2hlY2tFeGNlcHRpb24oRXhjZXB0aW9uKToK
KyAgICBwYXNzCisKKworY2xhc3MgRnJhbWV3b3JrOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBu
YW1lKToKKyAgICAgICAgc2VsZi5fc2V0dGluZ3MgPSBfRlJBTUVXT1JLX0NPTkZJR19NQVBbbmFt
ZV0KKyAgICAgICAgc2VsZi5uYW1lID0gbmFtZQorCisgICAgZGVmIHNldHRpbmcoc2VsZiwga2V5
LCBkZWZhdWx0PScnKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3NldHRpbmdzLmdldChrZXksIGRl
ZmF1bHQpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGZyb21TdHJpbmcoZnJhbWV3b3Jr
U3RyaW5nKToKKyAgICAgICAgaWYgZnJhbWV3b3JrU3RyaW5nID09ICJHbG9iYWwiOgorICAgICAg
ICAgICAgcmV0dXJuIEZyYW1ld29ya3MuR2xvYmFsCisKKyAgICAgICAgaWYgZnJhbWV3b3JrU3Ry
aW5nID09ICJXVEYiOgorICAgICAgICAgICAgcmV0dXJuIEZyYW1ld29ya3MuV1RGCisKKyAgICAg
ICAgaWYgZnJhbWV3b3JrU3RyaW5nID09ICJKYXZhU2NyaXB0Q29yZSI6CisgICAgICAgICAgICBy
ZXR1cm4gRnJhbWV3b3Jrcy5KYXZhU2NyaXB0Q29yZQorCisgICAgICAgIGlmIGZyYW1ld29ya1N0
cmluZyA9PSAiV2ViQ29yZSI6CisgICAgICAgICAgICByZXR1cm4gRnJhbWV3b3Jrcy5XZWJDb3Jl
CisKKyAgICAgICAgaWYgZnJhbWV3b3JrU3RyaW5nID09ICJUZXN0IjoKKyAgICAgICAgICAgIHJl
dHVybiBGcmFtZXdvcmtzLlRlc3QKKworICAgICAgICByYWlzZSBQYXJzZUV4Y2VwdGlvbigiVW5r
bm93biBmcmFtZXdvcms6ICVzIiAlIGZyYW1ld29ya1N0cmluZykKKworCitjbGFzcyBGcmFtZXdv
cmtzOgorICAgIEdsb2JhbCA9IEZyYW1ld29yaygiR2xvYmFsIikKKyAgICBXVEYgPSBGcmFtZXdv
cmsoIldURiIpCisgICAgSmF2YVNjcmlwdENvcmUgPSBGcmFtZXdvcmsoIkphdmFTY3JpcHRDb3Jl
IikKKyAgICBXZWJDb3JlID0gRnJhbWV3b3JrKCJXZWJDb3JlIikKKyAgICBUZXN0ID0gRnJhbWV3
b3JrKCJUZXN0IikKKworCitjbGFzcyBUeXBlUmVmZXJlbmNlOgorICAgIGRlZiBfX2luaXRfXyhz
ZWxmLCB0eXBlX2tpbmQsIHJlZmVyZW5jZWRfdHlwZV9uYW1lLCBlbnVtX3ZhbHVlcywgYXJyYXlf
aXRlbXMpOgorICAgICAgICBzZWxmLnR5cGVfa2luZCA9IHR5cGVfa2luZAorICAgICAgICBzZWxm
LnJlZmVyZW5jZWRfdHlwZV9uYW1lID0gX1RZUEVTX05FRURJTkdfUkVOQU1FX1dPUktBUk9VTkRT
LmdldChyZWZlcmVuY2VkX3R5cGVfbmFtZSwgcmVmZXJlbmNlZF90eXBlX25hbWUpCisgICAgICAg
IHNlbGYuZW51bV92YWx1ZXMgPSBlbnVtX3ZhbHVlcworICAgICAgICBpZiBhcnJheV9pdGVtcyBp
cyBOb25lOgorICAgICAgICAgICAgc2VsZi5hcnJheV90eXBlX3JlZiA9IE5vbmUKKyAgICAgICAg
ZWxzZToKKyAgICAgICAgICAgIHNlbGYuYXJyYXlfdHlwZV9yZWYgPSBUeXBlUmVmZXJlbmNlKGFy
cmF5X2l0ZW1zLmdldCgndHlwZScpLCBhcnJheV9pdGVtcy5nZXQoJyRyZWYnKSwgYXJyYXlfaXRl
bXMuZ2V0KCdlbnVtJywgW10pLCBhcnJheV9pdGVtcy5nZXQoJ2l0ZW1zJykpCisKKyAgICAgICAg
aWYgdHlwZV9raW5kIGlzIG5vdCBOb25lIGFuZCByZWZlcmVuY2VkX3R5cGVfbmFtZSBpcyBub3Qg
Tm9uZToKKyAgICAgICAgICAgIHJhaXNlIFBhcnNlRXhjZXB0aW9uKCJUeXBlIHJlZmVyZW5jZSBj
YW5ub3QgaGF2ZSBib3RoICd0eXBlJyBhbmQgJyRyZWYnIGtleXMuIikKKworICAgICAgICBpZiB0
eXBlX2tpbmQgPT0gImFycmF5IiBhbmQgYXJyYXlfaXRlbXMgaXMgTm9uZToKKyAgICAgICAgICAg
IHJhaXNlIFBhcnNlRXhjZXB0aW9uKCJUeXBlIHJlZmVyZW5jZSB3aXRoIHR5cGUgJ2FycmF5JyBt
dXN0IGhhdmUga2V5ICdpdGVtcycgdG8gZGVmaW5lIGFycmF5IGVsZW1lbnQgdHlwZS4iKQorCisg
ICAgZGVmIHJlZmVyZW5jZWRfbmFtZShzZWxmKToKKyAgICAgICAgaWYgc2VsZi5yZWZlcmVuY2Vk
X3R5cGVfbmFtZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnJlZmVyZW5j
ZWRfdHlwZV9uYW1lCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gc2VsZi50eXBl
X2tpbmQgICMgaW50ZWdlciwgc3RyaW5nLCBudW1iZXIsIGJvb2xlYW4sIGVudW0sIG9iamVjdCwg
YXJyYXkKKworCitjbGFzcyBUeXBlOgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAg
cGFzcworCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHJldHVybiBzZWxm
LnF1YWxpZmllZF9uYW1lKCkgPT0gb3RoZXIucXVhbGlmaWVkX25hbWUoKQorCisgICAgZGVmIF9f
aGFzaF9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5xdWFsaWZpZWRfbmFtZSgpLl9faGFz
aF9fKCkKKworICAgICMgVGhlc2UgbWV0aG9kcyBzaG91bGQgYmUgb3ZlcnJpZGRlbiBieSBzdWJj
bGFzc2VzLgorICAgIGRlZiBpc19lbnVtKHNlbGYpOgorICAgICAgICByZXR1cm4gRmFsc2UKKwor
ICAgIGRlZiB0eXBlX2RvbWFpbihzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIHJhd19u
YW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gX1RZUEVTX05FRURJTkdfUkVOQU1FX1dPUktBUk9V
TkRTLmdldChzZWxmLl9uYW1lLCBzZWxmLl9uYW1lKQorCisgICAgZGVmIHF1YWxpZmllZF9uYW1l
KHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICAjIFRoaXMgaXMgdXNlZCB0byByZXNvbHZlIG5l
c3RlZCB0eXBlcyBhZnRlciBpbnN0YW5jZXMgYXJlIGNyZWF0ZWQuCisgICAgZGVmIHJlc29sdmVf
dHlwZV9yZWZlcmVuY2VzKHNlbGYsIHByb3RvY29sKToKKyAgICAgICAgcGFzcworCisKK2NsYXNz
IFByaW1pdGl2ZVR5cGUoVHlwZSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUpOgorICAg
ICAgICBzZWxmLl9uYW1lID0gbmFtZQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAg
ICByZXR1cm4gJ1ByaW1pdGl2ZVR5cGVbJXNdJyAlIHNlbGYucXVhbGlmaWVkX25hbWUoKQorCisg
ICAgZGVmIHR5cGVfZG9tYWluKHNlbGYpOgorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVm
IHF1YWxpZmllZF9uYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5yYXdfbmFtZSgpCisK
KworY2xhc3MgQWxpYXNlZFR5cGUoVHlwZSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUs
IGRvbWFpbiwgYWxpYXNlZF90eXBlX3JlZik6CisgICAgICAgIHNlbGYuX25hbWUgPSBuYW1lCisg
ICAgICAgIHNlbGYuX2RvbWFpbiA9IGRvbWFpbgorICAgICAgICBzZWxmLl9hbGlhc2VkX3R5cGVf
cmVmID0gYWxpYXNlZF90eXBlX3JlZgorICAgICAgICBzZWxmLmFsaWFzZWRfdHlwZSA9IE5vbmUK
KworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgaWYgc2VsZi5hbGlhc2VkX3R5cGUg
aXMgbm90IE5vbmU6CisgICAgICAgICAgICByZXR1cm4gJ0FsaWFzZWRUeXBlWyVzIC0+ICVzXScg
JSAoc2VsZi5xdWFsaWZpZWRfbmFtZSgpLCBzZWxmLmFsaWFzZWRfdHlwZS5fX3JlcHJfXygpKQor
ICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuICdBbGlhc2VkVHlwZVslcyAtPiAodW5y
ZXNvbHZlZCldJyAlIHNlbGYucXVhbGlmaWVkX25hbWUoKQorCisgICAgZGVmIGlzX2VudW0oc2Vs
Zik6CisgICAgICAgIHJldHVybiBzZWxmLmFsaWFzZWRfdHlwZS5pc19lbnVtKCkKKworICAgIGRl
ZiB0eXBlX2RvbWFpbihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2RvbWFpbgorCisgICAg
ZGVmIHF1YWxpZmllZF9uYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gICIuIi5qb2luKFtzZWxm
LnR5cGVfZG9tYWluKCkuZG9tYWluX25hbWUsIHNlbGYucmF3X25hbWUoKV0pCisKKyAgICBkZWYg
cmVzb2x2ZV90eXBlX3JlZmVyZW5jZXMoc2VsZiwgcHJvdG9jb2wpOgorICAgICAgICBpZiBzZWxm
LmFsaWFzZWRfdHlwZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAg
IHNlbGYuYWxpYXNlZF90eXBlID0gcHJvdG9jb2wubG9va3VwX3R5cGVfcmVmZXJlbmNlKHNlbGYu
X2FsaWFzZWRfdHlwZV9yZWYsIHNlbGYudHlwZV9kb21haW4oKSkKKyAgICAgICAgbG9nLmRlYnVn
KCI8IFJlc29sdmVkIHR5cGUgcmVmZXJlbmNlIGZvciBhbGlhc2VkIHR5cGUgaW4gJXM6ICVzIiAl
IChzZWxmLnF1YWxpZmllZF9uYW1lKCksIHNlbGYuYWxpYXNlZF90eXBlLnF1YWxpZmllZF9uYW1l
KCkpKQorCisKK2NsYXNzIEVudW1UeXBlKFR5cGUpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBu
YW1lLCBkb21haW4sIHZhbHVlcywgcHJpbWl0aXZlX3R5cGVfcmVmLCBpc19hbm9ueW1vdXM9RmFs
c2UpOgorICAgICAgICBzZWxmLl9uYW1lID0gbmFtZQorICAgICAgICBzZWxmLl9kb21haW4gPSBk
b21haW4KKyAgICAgICAgc2VsZi5fdmFsdWVzID0gdmFsdWVzCisgICAgICAgIHNlbGYuX3ByaW1p
dGl2ZV90eXBlX3JlZiA9IHByaW1pdGl2ZV90eXBlX3JlZgorICAgICAgICBzZWxmLnByaW1pdGl2
ZV90eXBlID0gTm9uZQorICAgICAgICBzZWxmLmlzX2Fub255bW91cyA9IGlzX2Fub255bW91cwor
CisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gJ0VudW1UeXBlW3ZhbHVl
X3R5cGU9JXM7IHZhbHVlcz0lc10nICUgKHNlbGYucXVhbGlmaWVkX25hbWUoKSwgJywgJy5qb2lu
KG1hcChzdHIsIHNlbGYuZW51bV92YWx1ZXMoKSkpKQorCisgICAgZGVmIGlzX2VudW0oc2VsZik6
CisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgdHlwZV9kb21haW4oc2VsZik6CisgICAg
ICAgIHJldHVybiBzZWxmLl9kb21haW4KKworICAgIGRlZiBlbnVtX3ZhbHVlcyhzZWxmKToKKyAg
ICAgICAgcmV0dXJuIHNlbGYuX3ZhbHVlcworCisgICAgZGVmIHF1YWxpZmllZF9uYW1lKHNlbGYp
OgorICAgICAgICByZXR1cm4gICIuIi5qb2luKFtzZWxmLnR5cGVfZG9tYWluKCkuZG9tYWluX25h
bWUsIHNlbGYucmF3X25hbWUoKV0pCisKKyAgICBkZWYgcmVzb2x2ZV90eXBlX3JlZmVyZW5jZXMo
c2VsZiwgcHJvdG9jb2wpOgorICAgICAgICBpZiBzZWxmLnByaW1pdGl2ZV90eXBlIGlzIG5vdCBO
b25lOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgc2VsZi5wcmltaXRpdmVfdHlwZSA9
IHByb3RvY29sLmxvb2t1cF90eXBlX3JlZmVyZW5jZShzZWxmLl9wcmltaXRpdmVfdHlwZV9yZWYs
IERvbWFpbnMuR0xPQkFMKQorICAgICAgICBsb2cuZGVidWcoIjwgUmVzb2x2ZWQgdHlwZSByZWZl
cmVuY2UgZm9yIGVudW0gdHlwZSBpbiAlczogJXMiICUgKHNlbGYucXVhbGlmaWVkX25hbWUoKSwg
c2VsZi5wcmltaXRpdmVfdHlwZS5xdWFsaWZpZWRfbmFtZSgpKSkKKyAgICAgICAgbG9nLmRlYnVn
KCI8PCBlbnVtIHZhbHVlczogJXMiICUgc2VsZi5lbnVtX3ZhbHVlcygpKQorCisKK2NsYXNzIEFy
cmF5VHlwZShUeXBlKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZWxlbWVudF90eXBlX3JlZiwg
ZG9tYWluKToKKyAgICAgICAgc2VsZi5fZG9tYWluID0gZG9tYWluCisgICAgICAgIHNlbGYuX2Vs
ZW1lbnRfdHlwZV9yZWYgPSBlbGVtZW50X3R5cGVfcmVmCisgICAgICAgIHNlbGYuZWxlbWVudF90
eXBlID0gTm9uZQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICBpZiBzZWxmLmVs
ZW1lbnRfdHlwZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJldHVybiAnQXJyYXlUeXBlW2Vs
ZW1lbnRfdHlwZT0lc10nICUgc2VsZi5lbGVtZW50X3R5cGUuX19yZXByX18oKQorICAgICAgICBl
bHNlOgorICAgICAgICAgICAgcmV0dXJuICdBcnJheVR5cGVbZWxlbWVudF90eXBlPSh1bnJlc29s
dmVkKV0nCisKKyAgICBkZWYgdHlwZV9kb21haW4oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxm
Ll9kb21haW4KKworICAgIGRlZiBxdWFsaWZpZWRfbmFtZShzZWxmKToKKyAgICAgICAgcmV0dXJu
ICAiLiIuam9pbihbImFycmF5Iiwgc2VsZi5lbGVtZW50X3R5cGUucXVhbGlmaWVkX25hbWUoKV0p
CisKKyAgICBkZWYgcmVzb2x2ZV90eXBlX3JlZmVyZW5jZXMoc2VsZiwgcHJvdG9jb2wpOgorICAg
ICAgICBpZiBzZWxmLmVsZW1lbnRfdHlwZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJldHVy
bgorCisgICAgICAgIHNlbGYuZWxlbWVudF90eXBlID0gcHJvdG9jb2wubG9va3VwX3R5cGVfcmVm
ZXJlbmNlKHNlbGYuX2VsZW1lbnRfdHlwZV9yZWYsIHNlbGYudHlwZV9kb21haW4oKSkKKyAgICAg
ICAgbG9nLmRlYnVnKCI8IFJlc29sdmVkIHR5cGUgcmVmZXJlbmNlIGZvciBlbGVtZW50IHR5cGUg
aW4gJXM6ICVzIiAlIChzZWxmLnF1YWxpZmllZF9uYW1lKCksIHNlbGYuZWxlbWVudF90eXBlLnF1
YWxpZmllZF9uYW1lKCkpKQorCisKK2NsYXNzIE9iamVjdFR5cGUoVHlwZSk6CisgICAgZGVmIF9f
aW5pdF9fKHNlbGYsIG5hbWUsIGRvbWFpbiwgbWVtYmVycyk6CisgICAgICAgIHNlbGYuX25hbWUg
PSBuYW1lCisgICAgICAgIHNlbGYuX2RvbWFpbiA9IGRvbWFpbgorICAgICAgICBzZWxmLm1lbWJl
cnMgPSBtZW1iZXJzCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAn
T2JqZWN0VHlwZVslc10nICUgc2VsZi5xdWFsaWZpZWRfbmFtZSgpCisKKyAgICBkZWYgdHlwZV9k
b21haW4oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9kb21haW4KKworICAgIGRlZiBxdWFs
aWZpZWRfbmFtZShzZWxmKToKKyAgICAgICAgcmV0dXJuICAiLiIuam9pbihbc2VsZi50eXBlX2Rv
bWFpbigpLmRvbWFpbl9uYW1lLCBzZWxmLnJhd19uYW1lKCldKQorCisKK2RlZiBjaGVja19mb3Jf
cmVxdWlyZWRfcHJvcGVydGllcyhwcm9wcywgb2JqLCB3aGF0KToKKyAgICBmb3IgcHJvcCBpbiBw
cm9wczoKKyAgICAgICAgaWYgcHJvcCBub3QgaW4gb2JqOgorICAgICAgICAgICAgcmFpc2UgUGFy
c2VFeGNlcHRpb24oIldoZW4gcGFyc2luZyAlcywgcmVxdWlyZWQgcHJvcGVydHkgbWlzc2luZzog
JXMiICUgKHdoYXQsIHByb3ApKQorCisKK2NsYXNzIFByb3RvY29sOgorICAgIGRlZiBfX2luaXRf
XyhzZWxmLCBmcmFtZXdvcmtfbmFtZSk6CisgICAgICAgIHNlbGYuZG9tYWlucyA9IFtdCisgICAg
ICAgIHNlbGYudHlwZXNfYnlfbmFtZSA9IHt9CisgICAgICAgIHNlbGYuZnJhbWV3b3JrID0gRnJh
bWV3b3JrLmZyb21TdHJpbmcoZnJhbWV3b3JrX25hbWUpCisKKyAgICAgICAgc2VsZi5fZW51bV92
YWx1ZV9jb3VudCA9IDAKKyAgICAgICAgc2VsZi5fZW51bV92YWx1ZXMgPSB7fQorCisgICAgZGVm
IHBhcnNlX3NwZWNpZmljYXRpb24oc2VsZiwganNvbiwgaXNTdXBwbGVtZW50YWwpOgorICAgICAg
ICBsb2cuZGVidWcoInBhcnNlIHRvcGxldmVsIikKKworICAgICAgICBpZiBpc2luc3RhbmNlKGpz
b24sIGRpY3QpIGFuZCAnZG9tYWlucycgaW4ganNvbjoKKyAgICAgICAgICAgIGpzb24gPSBqc29u
Wydkb21haW5zJ10KKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoanNvbiwgbGlzdCk6CisgICAg
ICAgICAgICBqc29uID0gW2pzb25dCisKKyAgICAgICAgZm9yIGRvbWFpbiBpbiBqc29uOgorICAg
ICAgICAgICAgc2VsZi5wYXJzZV9kb21haW4oZG9tYWluLCBpc1N1cHBsZW1lbnRhbCkKKworICAg
IGRlZiBwYXJzZV9kb21haW4oc2VsZiwganNvbiwgaXNTdXBwbGVtZW50YWwpOgorICAgICAgICBj
aGVja19mb3JfcmVxdWlyZWRfcHJvcGVydGllcyhbJ2RvbWFpbiddLCBqc29uLCAiZG9tYWluIikK
KyAgICAgICAgbG9nLmRlYnVnKCJwYXJzZSBkb21haW4gIiArIGpzb25bJ2RvbWFpbiddKQorCisg
ICAgICAgIHR5cGVzID0gW10KKyAgICAgICAgY29tbWFuZHMgPSBbXQorICAgICAgICBldmVudHMg
PSBbXQorCisgICAgICAgIGlmICd0eXBlcycgaW4ganNvbjoKKyAgICAgICAgICAgIGlmIG5vdCBp
c2luc3RhbmNlKGpzb25bJ3R5cGVzJ10sIGxpc3QpOgorICAgICAgICAgICAgICAgIHJhaXNlIFBh
cnNlRXhjZXB0aW9uKCJNYWxmb3JtZWQgc3BlY2lmaWNhdGlvbjogdHlwZXMgaXMgbm90IGFuIGFy
cmF5IikKKyAgICAgICAgICAgIHR5cGVzLmV4dGVuZChbc2VsZi5wYXJzZV90eXBlX2RlY2xhcmF0
aW9uKF9kZWNsYXJhdGlvbikgZm9yIF9kZWNsYXJhdGlvbiBpbiBqc29uWyd0eXBlcyddXSkKKwor
ICAgICAgICBpZiAnY29tbWFuZHMnIGluIGpzb246CisgICAgICAgICAgICBpZiBub3QgaXNpbnN0
YW5jZShqc29uWydjb21tYW5kcyddLCBsaXN0KToKKyAgICAgICAgICAgICAgICByYWlzZSBQYXJz
ZUV4Y2VwdGlvbigiTWFsZm9ybWVkIHNwZWNpZmljYXRpb246IGNvbW1hbmRzIGlzIG5vdCBhbiBh
cnJheSIpCisgICAgICAgICAgICBjb21tYW5kcy5leHRlbmQoW3NlbGYucGFyc2VfY29tbWFuZChf
Y29tbWFuZCkgZm9yIF9jb21tYW5kIGluIGpzb25bJ2NvbW1hbmRzJ11dKQorCisgICAgICAgIGlm
ICdldmVudHMnIGluIGpzb246CisgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShqc29uWydl
dmVudHMnXSwgbGlzdCk6CisgICAgICAgICAgICAgICAgcmFpc2UgUGFyc2VFeGNlcHRpb24oIk1h
bGZvcm1lZCBzcGVjaWZpY2F0aW9uOiBldmVudHMgaXMgbm90IGFuIGFycmF5IikKKyAgICAgICAg
ICAgIGV2ZW50cy5leHRlbmQoW3NlbGYucGFyc2VfZXZlbnQoX2V2ZW50KSBmb3IgX2V2ZW50IGlu
IGpzb25bJ2V2ZW50cyddXSkKKworICAgICAgICBzZWxmLmRvbWFpbnMuYXBwZW5kKERvbWFpbihq
c29uWydkb21haW4nXSwganNvbi5nZXQoJ2Rlc2NyaXB0aW9uJywgIiIpLCBpc1N1cHBsZW1lbnRh
bCwgdHlwZXMsIGNvbW1hbmRzLCBldmVudHMpKQorCisgICAgZGVmIHBhcnNlX3R5cGVfZGVjbGFy
YXRpb24oc2VsZiwganNvbik6CisgICAgICAgIGNoZWNrX2Zvcl9yZXF1aXJlZF9wcm9wZXJ0aWVz
KFsnaWQnLCAndHlwZSddLCBqc29uLCAidHlwZSIpCisgICAgICAgIGxvZy5kZWJ1ZygicGFyc2Ug
dHlwZSAlcyIgJSBqc29uWydpZCddKQorCisgICAgICAgIHR5cGVfbWVtYmVycyA9IFtdCisKKyAg
ICAgICAgaWYgJ3Byb3BlcnRpZXMnIGluIGpzb246CisgICAgICAgICAgICBpZiBub3QgaXNpbnN0
YW5jZShqc29uWydwcm9wZXJ0aWVzJ10sIGxpc3QpOgorICAgICAgICAgICAgICAgIHJhaXNlIFBh
cnNlRXhjZXB0aW9uKCJNYWxmb3JtZWQgc3BlY2lmaWNhdGlvbjogcHJvcGVydGllcyBpcyBub3Qg
YW4gYXJyYXkiKQorICAgICAgICAgICAgdHlwZV9tZW1iZXJzLmV4dGVuZChbc2VsZi5wYXJzZV90
eXBlX21lbWJlcihfbWVtYmVyKSBmb3IgX21lbWJlciBpbiBqc29uWydwcm9wZXJ0aWVzJ11dKQor
CisgICAgICAgIHR5cGVfcmVmID0gVHlwZVJlZmVyZW5jZShqc29uWyd0eXBlJ10sIE5vbmUsIGpz
b24uZ2V0KCdlbnVtJywgW10pLCBqc29uLmdldCgnaXRlbXMnKSkKKyAgICAgICAgcmV0dXJuIFR5
cGVEZWNsYXJhdGlvbihqc29uWydpZCddLCB0eXBlX3JlZiwganNvbi5nZXQoImRlc2NyaXB0aW9u
IiwgIiIpLCB0eXBlX21lbWJlcnMpCisKKyAgICBkZWYgcGFyc2VfdHlwZV9tZW1iZXIoc2VsZiwg
anNvbik6CisgICAgICAgIGNoZWNrX2Zvcl9yZXF1aXJlZF9wcm9wZXJ0aWVzKFsnbmFtZSddLCBq
c29uLCAidHlwZSBtZW1iZXIiKQorICAgICAgICBsb2cuZGVidWcoInBhcnNlIHR5cGUgbWVtYmVy
ICVzIiAlIGpzb25bJ25hbWUnXSkKKworICAgICAgICB0eXBlX3JlZiA9IFR5cGVSZWZlcmVuY2Uo
anNvbi5nZXQoJ3R5cGUnKSwganNvbi5nZXQoJyRyZWYnKSwganNvbi5nZXQoJ2VudW0nLCBbXSks
IGpzb24uZ2V0KCdpdGVtcycpKQorICAgICAgICByZXR1cm4gVHlwZU1lbWJlcihqc29uWyduYW1l
J10sIHR5cGVfcmVmLCBqc29uLmdldCgnb3B0aW9uYWwnLCBGYWxzZSksIGpzb24uZ2V0KCdkZXNj
cmlwdGlvbicsICIiKSkKKworICAgIGRlZiBwYXJzZV9jb21tYW5kKHNlbGYsIGpzb24pOgorICAg
ICAgICBjaGVja19mb3JfcmVxdWlyZWRfcHJvcGVydGllcyhbJ25hbWUnXSwganNvbiwgImNvbW1h
bmQiKQorICAgICAgICBsb2cuZGVidWcoInBhcnNlIGNvbW1hbmQgJXMiICUganNvblsnbmFtZSdd
KQorCisgICAgICAgIGNhbGxfcGFyYW1ldGVycyA9IFtdCisgICAgICAgIHJldHVybl9wYXJhbWV0
ZXJzID0gW10KKworICAgICAgICBpZiAncGFyYW1ldGVycycgaW4ganNvbjoKKyAgICAgICAgICAg
IGlmIG5vdCBpc2luc3RhbmNlKGpzb25bJ3BhcmFtZXRlcnMnXSwgbGlzdCk6CisgICAgICAgICAg
ICAgICAgcmFpc2UgUGFyc2VFeGNlcHRpb24oIk1hbGZvcm1lZCBzcGVjaWZpY2F0aW9uOiBwYXJh
bWV0ZXJzIGlzIG5vdCBhbiBhcnJheSIpCisgICAgICAgICAgICBjYWxsX3BhcmFtZXRlcnMuZXh0
ZW5kKFtzZWxmLnBhcnNlX3BhcmFtZXRlcihfcGFyYW1ldGVyKSBmb3IgX3BhcmFtZXRlciBpbiBq
c29uWydwYXJhbWV0ZXJzJ11dKQorCisgICAgICAgIGlmICdyZXR1cm5zJyBpbiBqc29uOgorICAg
ICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoanNvblsncmV0dXJucyddLCBsaXN0KToKKyAgICAg
ICAgICAgICAgICByYWlzZSBQYXJzZUV4Y2VwdGlvbigiTWFsZm9ybWVkIHNwZWNpZmljYXRpb246
IHJldHVybnMgaXMgbm90IGFuIGFycmF5IikKKyAgICAgICAgICAgIHJldHVybl9wYXJhbWV0ZXJz
LmV4dGVuZChbc2VsZi5wYXJzZV9wYXJhbWV0ZXIoX3BhcmFtZXRlcikgZm9yIF9wYXJhbWV0ZXIg
aW4ganNvblsncmV0dXJucyddXSkKKworICAgICAgICByZXR1cm4gQ29tbWFuZChqc29uWyduYW1l
J10sIGNhbGxfcGFyYW1ldGVycywgcmV0dXJuX3BhcmFtZXRlcnMsIGpzb24uZ2V0KCdkZXNjcmlw
dGlvbicsICIiKSwganNvbi5nZXQoJ2FzeW5jJywgRmFsc2UpKQorCisgICAgZGVmIHBhcnNlX2V2
ZW50KHNlbGYsIGpzb24pOgorICAgICAgICBjaGVja19mb3JfcmVxdWlyZWRfcHJvcGVydGllcyhb
J25hbWUnXSwganNvbiwgImV2ZW50IikKKyAgICAgICAgbG9nLmRlYnVnKCJwYXJzZSBldmVudCAl
cyIgJSBqc29uWyduYW1lJ10pCisKKyAgICAgICAgZXZlbnRfcGFyYW1ldGVycyA9IFtdCisKKyAg
ICAgICAgaWYgJ3BhcmFtZXRlcnMnIGluIGpzb246CisgICAgICAgICAgICBpZiBub3QgaXNpbnN0
YW5jZShqc29uWydwYXJhbWV0ZXJzJ10sIGxpc3QpOgorICAgICAgICAgICAgICAgIHJhaXNlIFBh
cnNlRXhjZXB0aW9uKCJNYWxmb3JtZWQgc3BlY2lmaWNhdGlvbjogcGFyYW1ldGVycyBpcyBub3Qg
YW4gYXJyYXkiKQorICAgICAgICAgICAgZXZlbnRfcGFyYW1ldGVycy5leHRlbmQoW3NlbGYucGFy
c2VfcGFyYW1ldGVyKF9wYXJhbWV0ZXIpIGZvciBfcGFyYW1ldGVyIGluIGpzb25bJ3BhcmFtZXRl
cnMnXV0pCisKKyAgICAgICAgcmV0dXJuIEV2ZW50KGpzb25bJ25hbWUnXSwgZXZlbnRfcGFyYW1l
dGVycywganNvbi5nZXQoJ2Rlc2NyaXB0aW9uJywgIiIpKQorCisgICAgZGVmIHBhcnNlX3BhcmFt
ZXRlcihzZWxmLCBqc29uKToKKyAgICAgICAgY2hlY2tfZm9yX3JlcXVpcmVkX3Byb3BlcnRpZXMo
WyduYW1lJ10sIGpzb24sICJwYXJhbWV0ZXIiKQorICAgICAgICBsb2cuZGVidWcoInBhcnNlIHBh
cmFtZXRlciAlcyIgJSBqc29uWyduYW1lJ10pCisKKyAgICAgICAgdHlwZV9yZWYgPSBUeXBlUmVm
ZXJlbmNlKGpzb24uZ2V0KCd0eXBlJyksIGpzb24uZ2V0KCckcmVmJyksIGpzb24uZ2V0KCdlbnVt
JywgW10pLCBqc29uLmdldCgnaXRlbXMnKSkKKyAgICAgICAgcmV0dXJuIFBhcmFtZXRlcihqc29u
WyduYW1lJ10sIHR5cGVfcmVmLCBqc29uLmdldCgnb3B0aW9uYWwnLCBGYWxzZSksIGpzb24uZ2V0
KCdkZXNjcmlwdGlvbicsICIiKSkKKworICAgIGRlZiByZXNvbHZlX3R5cGVzKHNlbGYpOgorICAg
ICAgICBxdWFsaWZpZWRfZGVjbGFyZWRfdHlwZV9uYW1lcyA9IHNldChbJ2Jvb2xlYW4nLCAnc3Ry
aW5nJywgJ2ludGVnZXInLCAnbnVtYmVyJywgJ2VudW0nLCAnYXJyYXknLCAnb2JqZWN0JywgJ2Fu
eSddKQorCisgICAgICAgIHNlbGYudHlwZXNfYnlfbmFtZVsnc3RyaW5nJ10gPSBQcmltaXRpdmVU
eXBlKCdzdHJpbmcnKQorICAgICAgICBmb3IgX3ByaW1pdGl2ZV90eXBlIGluIFsnYm9vbGVhbics
ICdpbnRlZ2VyJywgJ251bWJlciddOgorICAgICAgICAgICAgc2VsZi50eXBlc19ieV9uYW1lW19w
cmltaXRpdmVfdHlwZV0gPSBQcmltaXRpdmVUeXBlKF9wcmltaXRpdmVfdHlwZSkKKyAgICAgICAg
Zm9yIF9vYmplY3RfdHlwZSBpbiBbJ2FueScsICdvYmplY3QnXToKKyAgICAgICAgICAgIHNlbGYu
dHlwZXNfYnlfbmFtZVtfb2JqZWN0X3R5cGVdID0gUHJpbWl0aXZlVHlwZShfb2JqZWN0X3R5cGUp
CisKKyAgICAgICAgIyBHYXRoZXIgcXVhbGlmaWVkIHR5cGUgbmFtZXMgZnJvbSB0eXBlIGRlY2xh
cmF0aW9ucyBpbiBlYWNoIGRvbWFpbi4KKyAgICAgICAgZm9yIF9kb21haW4gaW4gc2VsZi5kb21h
aW5zOgorICAgICAgICAgICAgZm9yIF9kZWNsYXJhdGlvbiBpbiBfZG9tYWluLnR5cGVfZGVjbGFy
YXRpb25zOgorICAgICAgICAgICAgICAgICMgQmFzaWMgc2FuaXR5IGNoZWNraW5nLgorICAgICAg
ICAgICAgICAgIGlmIF9kZWNsYXJhdGlvbi50eXBlX3JlZi5yZWZlcmVuY2VkX3R5cGVfbmFtZSBp
cyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgVHlwZWNoZWNrRXhjZXB0aW9u
KCJUeXBlIGRlY2xhcmF0aW9ucyBtdXN0IG5hbWUgYSBiYXNlIHR5cGUsIG5vdCBhIHR5cGUgcmVm
ZXJlbmNlLiIpCisKKyAgICAgICAgICAgICAgICAjIEZpbmQgZHVwbGljYXRlIHF1YWxpZmllZCB0
eXBlIG5hbWVzLgorICAgICAgICAgICAgICAgIHF1YWxpZmllZF90eXBlX25hbWUgPSAiLiIuam9p
bihbX2RvbWFpbi5kb21haW5fbmFtZSwgX2RlY2xhcmF0aW9uLnR5cGVfbmFtZV0pCisgICAgICAg
ICAgICAgICAgaWYgcXVhbGlmaWVkX3R5cGVfbmFtZSBpbiBxdWFsaWZpZWRfZGVjbGFyZWRfdHlw
ZV9uYW1lczoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgVHlwZWNoZWNrRXhjZXB0aW9uKCJE
dXBsaWNhdGUgdHlwZSBkZWNsYXJhdGlvbjogJXMiICUgcXVhbGlmaWVkX3R5cGVfbmFtZSkKKwor
ICAgICAgICAgICAgICAgIHF1YWxpZmllZF9kZWNsYXJlZF90eXBlX25hbWVzLmFkZChxdWFsaWZp
ZWRfdHlwZV9uYW1lKQorCisgICAgICAgICAgICAgICAgdHlwZV9pbnN0YW5jZSA9IE5vbmUKKwor
ICAgICAgICAgICAgICAgIGtpbmQgPSBfZGVjbGFyYXRpb24udHlwZV9yZWYudHlwZV9raW5kCisg
ICAgICAgICAgICAgICAgaWYgbGVuKF9kZWNsYXJhdGlvbi50eXBlX3JlZi5lbnVtX3ZhbHVlcykg
PiAwOgorICAgICAgICAgICAgICAgICAgICBwcmltaXRpdmVfdHlwZV9yZWYgPSBUeXBlUmVmZXJl
bmNlKF9kZWNsYXJhdGlvbi50eXBlX3JlZi50eXBlX2tpbmQsIE5vbmUsIFtdLCBOb25lKQorICAg
ICAgICAgICAgICAgICAgICB0eXBlX2luc3RhbmNlID0gRW51bVR5cGUoX2RlY2xhcmF0aW9uLnR5
cGVfbmFtZSwgX2RvbWFpbiwgX2RlY2xhcmF0aW9uLnR5cGVfcmVmLmVudW1fdmFsdWVzLCBwcmlt
aXRpdmVfdHlwZV9yZWYpCisgICAgICAgICAgICAgICAgZWxpZiBraW5kID09ICJhcnJheSI6Cisg
ICAgICAgICAgICAgICAgICAgIHR5cGVfaW5zdGFuY2UgPSBBcnJheVR5cGUoX2RlY2xhcmF0aW9u
LnR5cGVfcmVmLmFycmF5X3R5cGVfcmVmLCBfZG9tYWluKQorICAgICAgICAgICAgICAgIGVsaWYg
a2luZCA9PSAib2JqZWN0IjoKKyAgICAgICAgICAgICAgICAgICAgdHlwZV9pbnN0YW5jZSA9IE9i
amVjdFR5cGUoX2RlY2xhcmF0aW9uLnR5cGVfbmFtZSwgX2RvbWFpbiwgX2RlY2xhcmF0aW9uLnR5
cGVfbWVtYmVycykKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICB0
eXBlX2luc3RhbmNlID0gQWxpYXNlZFR5cGUoX2RlY2xhcmF0aW9uLnR5cGVfbmFtZSwgX2RvbWFp
biwgX2RlY2xhcmF0aW9uLnR5cGVfcmVmKQorCisgICAgICAgICAgICAgICAgbG9nLmRlYnVnKCI8
IENyZWF0ZWQgZnJlc2ggdHlwZSAlcyBmb3IgZGVjbGFyYXRpb24gJXMiICUgKHR5cGVfaW5zdGFu
Y2UuX19yZXByX18oKSwgcXVhbGlmaWVkX3R5cGVfbmFtZSkpCisgICAgICAgICAgICAgICAgc2Vs
Zi50eXBlc19ieV9uYW1lW3F1YWxpZmllZF90eXBlX25hbWVdID0gdHlwZV9pbnN0YW5jZQorCisg
ICAgICAgICMgUmVzb2x2ZSBhbGwgdHlwZSByZWZlcmVuY2VzIHJlY3Vyc2l2ZWx5LgorICAgICAg
ICBmb3IgX2RvbWFpbiBpbiBzZWxmLmRvbWFpbnM6CisgICAgICAgICAgICBfZG9tYWluLnJlc29s
dmVfdHlwZV9yZWZlcmVuY2VzKHNlbGYpCisKKyAgICBkZWYgbG9va3VwX3R5cGVfZm9yX2RlY2xh
cmF0aW9uKHNlbGYsIGRlY2xhcmF0aW9uLCBkb21haW4pOgorICAgICAgICAjIFRoaXMgd2lsbCBv
bmx5IG1hdGNoIGEgdHlwZSBkZWZpbmVkIGluIHRoZSBzYW1lIGRvbWFpbiwgd2hlcmUgcHJlZml4
ZXMgYXJlbid0IHJlcXVpcmVkLgorICAgICAgICBxdWFsaWZpZWRfbmFtZSA9ICIuIi5qb2luKFtk
b21haW4uZG9tYWluX25hbWUsIGRlY2xhcmF0aW9uLnR5cGVfbmFtZV0pCisgICAgICAgIGlmIHF1
YWxpZmllZF9uYW1lIGluIHNlbGYudHlwZXNfYnlfbmFtZToKKyAgICAgICAgICAgIGZvdW5kX3R5
cGUgPSBzZWxmLnR5cGVzX2J5X25hbWVbcXVhbGlmaWVkX25hbWVdCisgICAgICAgICAgICBmb3Vu
ZF90eXBlLnJlc29sdmVfdHlwZV9yZWZlcmVuY2VzKHNlbGYpCisgICAgICAgICAgICByZXR1cm4g
Zm91bmRfdHlwZQorCisgICAgICAgIHJhaXNlIFR5cGVjaGVja0V4Y2VwdGlvbigiTG9va3VwIGZh
aWxlZCBmb3IgdHlwZSBkZWNsYXJhdGlvbjogJXMgKHJlZmVyZW5jZWQgZnJvbSBkb21haW46ICVz
KSIgJSAoZGVjbGFyYXRpb24udHlwZV9uYW1lLCBkb21haW4uZG9tYWluX25hbWUpKQorCisgICAg
ZGVmIGxvb2t1cF90eXBlX3JlZmVyZW5jZShzZWxmLCB0eXBlX3JlZiwgZG9tYWluKToKKyAgICAg
ICAgIyBJZiByZWZlcmVuY2UgaXMgdG8gYW4gYW5vbnltb3VzIGFycmF5IHR5cGUsIGNyZWF0ZSBh
IGZyZXNoIGluc3RhbmNlLgorICAgICAgICBpZiB0eXBlX3JlZi50eXBlX2tpbmQgPT0gImFycmF5
IjoKKyAgICAgICAgICAgIHR5cGVfaW5zdGFuY2UgPSBBcnJheVR5cGUodHlwZV9yZWYuYXJyYXlf
dHlwZV9yZWYsIGRvbWFpbikKKyAgICAgICAgICAgIHR5cGVfaW5zdGFuY2UucmVzb2x2ZV90eXBl
X3JlZmVyZW5jZXMoc2VsZikKKyAgICAgICAgICAgIGxvZy5kZWJ1ZygiPCBDcmVhdGVkIGZyZXNo
IHR5cGUgaW5zdGFuY2UgZm9yIGFub255bW91cyBhcnJheSB0eXBlOiAlcyIgJSB0eXBlX2luc3Rh
bmNlLnF1YWxpZmllZF9uYW1lKCkpCisgICAgICAgICAgICByZXR1cm4gdHlwZV9pbnN0YW5jZQor
CisgICAgICAgICMgSWYgcmVmZXJlbmNlIGlzIHRvIGFuIGFub255bW91cyBlbnVtIHR5cGUsIGNy
ZWF0ZSBhIGZyZXNoIGluc3RhbmNlLgorICAgICAgICBpZiBsZW4odHlwZV9yZWYuZW51bV92YWx1
ZXMpID4gMDoKKyAgICAgICAgICAgICMgV2UgbmVlZCB0byBjcmVhdGUgYSB0eXBlIHJlZmVyZW5j
ZSB3aXRob3V0IGVudW0gdmFsdWVzIGFzIHRoZSBlbnVtJ3MgbmVzdGVkIHR5cGUuCisgICAgICAg
ICAgICBwcmltaXRpdmVfdHlwZV9yZWYgPSBUeXBlUmVmZXJlbmNlKHR5cGVfcmVmLnR5cGVfa2lu
ZCwgTm9uZSwgW10sIE5vbmUpCisgICAgICAgICAgICB0eXBlX2luc3RhbmNlID0gRW51bVR5cGUo
Iihhbm9ueW1vdXMpIiwgZG9tYWluLCB0eXBlX3JlZi5lbnVtX3ZhbHVlcywgcHJpbWl0aXZlX3R5
cGVfcmVmLCBUcnVlKQorICAgICAgICAgICAgdHlwZV9pbnN0YW5jZS5yZXNvbHZlX3R5cGVfcmVm
ZXJlbmNlcyhzZWxmKQorICAgICAgICAgICAgbG9nLmRlYnVnKCI8IENyZWF0ZWQgZnJlc2ggdHlw
ZSBpbnN0YW5jZSBmb3IgYW5vbnltb3VzIGVudW0gdHlwZTogJXMiICUgdHlwZV9pbnN0YW5jZS5x
dWFsaWZpZWRfbmFtZSgpKQorICAgICAgICAgICAgcmV0dXJuIHR5cGVfaW5zdGFuY2UKKworICAg
ICAgICAjIFRoaXMgd2lsbCBtYXRjaCB3aGVuIHJlZmVyZW5jaW5nIGEgdHlwZSBkZWZpbmVkIGlu
IHRoZSBzYW1lIGRvbWFpbiwgd2hlcmUgcHJlZml4ZXMgYXJlbid0IHJlcXVpcmVkLgorICAgICAg
ICBxdWFsaWZpZWRfbmFtZSA9ICIuIi5qb2luKFtkb21haW4uZG9tYWluX25hbWUsIHR5cGVfcmVm
LnJlZmVyZW5jZWRfbmFtZSgpXSkKKyAgICAgICAgaWYgcXVhbGlmaWVkX25hbWUgaW4gc2VsZi50
eXBlc19ieV9uYW1lOgorICAgICAgICAgICAgZm91bmRfdHlwZSA9IHNlbGYudHlwZXNfYnlfbmFt
ZVtxdWFsaWZpZWRfbmFtZV0KKyAgICAgICAgICAgIGZvdW5kX3R5cGUucmVzb2x2ZV90eXBlX3Jl
ZmVyZW5jZXMoc2VsZikKKyAgICAgICAgICAgIGxvZy5kZWJ1ZygiPCBMb29rdXAgc3VjY2VlZGVk
IGZvciB1bnF1YWxpZmllZCB0eXBlOiAlcyIgJSBmb3VuZF90eXBlLnF1YWxpZmllZF9uYW1lKCkp
CisgICAgICAgICAgICByZXR1cm4gZm91bmRfdHlwZQorCisgICAgICAgICMgVGhpcyB3aWxsIG1h
dGNoIHByaW1pdGl2ZSB0eXBlcyBhbmQgZnVsbHktcXVhbGlmaWVkIHR5cGVzIGZyb20gYSBkaWZm
ZXJlbnQgZG9tYWluLgorICAgICAgICBpZiB0eXBlX3JlZi5yZWZlcmVuY2VkX25hbWUoKSBpbiBz
ZWxmLnR5cGVzX2J5X25hbWU6CisgICAgICAgICAgICBmb3VuZF90eXBlID0gc2VsZi50eXBlc19i
eV9uYW1lW3R5cGVfcmVmLnJlZmVyZW5jZWRfbmFtZSgpXQorICAgICAgICAgICAgZm91bmRfdHlw
ZS5yZXNvbHZlX3R5cGVfcmVmZXJlbmNlcyhzZWxmKQorICAgICAgICAgICAgbG9nLmRlYnVnKCI8
IExvb2t1cCBzdWNjZWVkZWQgZm9yIHByaW1pdGl2ZSBvciBxdWFsaWZpZWQgdHlwZTogJXMiICUg
Zm91bmRfdHlwZS5xdWFsaWZpZWRfbmFtZSgpKQorICAgICAgICAgICAgcmV0dXJuIGZvdW5kX3R5
cGUKKworICAgICAgICByYWlzZSBUeXBlY2hlY2tFeGNlcHRpb24oIkxvb2t1cCBmYWlsZWQgZm9y
IHR5cGUgcmVmZXJlbmNlOiAlcyAocmVmZXJlbmNlZCBmcm9tIGRvbWFpbjogJXMpIiAlICh0eXBl
X3JlZi5yZWZlcmVuY2VkX25hbWUoKSwgZG9tYWluLmRvbWFpbl9uYW1lKSkKKworCitjbGFzcyBE
b21haW46CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGRvbWFpbl9uYW1lLCBkZXNjcmlwdGlvbiwg
aXNTdXBwbGVtZW50YWwsIHR5cGVfZGVjbGFyYXRpb25zLCBjb21tYW5kcywgZXZlbnRzKToKKyAg
ICAgICAgc2VsZi5kb21haW5fbmFtZSA9IGRvbWFpbl9uYW1lCisgICAgICAgIHNlbGYuZGVzY3Jp
cHRpb24gPSBkZXNjcmlwdGlvbgorICAgICAgICBzZWxmLmlzX3N1cHBsZW1lbnRhbCA9IGlzU3Vw
cGxlbWVudGFsCisgICAgICAgIHNlbGYudHlwZV9kZWNsYXJhdGlvbnMgPSB0eXBlX2RlY2xhcmF0
aW9ucworICAgICAgICBzZWxmLmNvbW1hbmRzID0gY29tbWFuZHMKKyAgICAgICAgc2VsZi5ldmVu
dHMgPSBldmVudHMKKworICAgIGRlZiByZXNvbHZlX3R5cGVfcmVmZXJlbmNlcyhzZWxmLCBwcm90
b2NvbCk6CisgICAgICAgIGxvZy5kZWJ1ZygiPiBSZXNvbHZpbmcgdHlwZSBkZWNsYXJhdGlvbnMg
Zm9yIGRvbWFpbjogJXMiICUgc2VsZi5kb21haW5fbmFtZSkKKyAgICAgICAgZm9yIF9kZWNsYXJh
dGlvbiBpbiBzZWxmLnR5cGVfZGVjbGFyYXRpb25zOgorICAgICAgICAgICAgX2RlY2xhcmF0aW9u
LnJlc29sdmVfdHlwZV9yZWZlcmVuY2VzKHByb3RvY29sLCBzZWxmKQorCisgICAgICAgIGxvZy5k
ZWJ1ZygiPiBSZXNvbHZpbmcgdHlwZXMgaW4gY29tbWFuZHMgZm9yIGRvbWFpbjogJXMiICUgc2Vs
Zi5kb21haW5fbmFtZSkKKyAgICAgICAgZm9yIF9jb21tYW5kIGluIHNlbGYuY29tbWFuZHM6Cisg
ICAgICAgICAgICBfY29tbWFuZC5yZXNvbHZlX3R5cGVfcmVmZXJlbmNlcyhwcm90b2NvbCwgc2Vs
ZikKKworICAgICAgICBsb2cuZGVidWcoIj4gUmVzb2x2aW5nIHR5cGVzIGluIGV2ZW50cyBmb3Ig
ZG9tYWluOiAlcyIgJSBzZWxmLmRvbWFpbl9uYW1lKQorICAgICAgICBmb3IgX2V2ZW50IGluIHNl
bGYuZXZlbnRzOgorICAgICAgICAgICAgX2V2ZW50LnJlc29sdmVfdHlwZV9yZWZlcmVuY2VzKHBy
b3RvY29sLCBzZWxmKQorCisKK2NsYXNzIERvbWFpbnM6CisgICAgR0xPQkFMID0gRG9tYWluKCIi
LCAiVGhlIGdsb2JhbCBkb21haW4sIGluIHdoaWNoIHByaW1pdGl2ZSB0eXBlcyBhcmUgaW1wbGlj
aXRseSBkZWNsYXJlZC4iLCBUcnVlLCBbXSwgW10sIFtdKQorCisKK2NsYXNzIFR5cGVEZWNsYXJh
dGlvbjoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdHlwZV9uYW1lLCB0eXBlX3JlZiwgZGVzY3Jp
cHRpb24sIHR5cGVfbWVtYmVycyk6CisgICAgICAgIHNlbGYudHlwZV9uYW1lID0gX1RZUEVTX05F
RURJTkdfUkVOQU1FX1dPUktBUk9VTkRTLmdldCh0eXBlX25hbWUsIHR5cGVfbmFtZSkKKyAgICAg
ICAgc2VsZi50eXBlX3JlZiA9IHR5cGVfcmVmCisgICAgICAgIHNlbGYuZGVzY3JpcHRpb24gPSBk
ZXNjcmlwdGlvbgorICAgICAgICBzZWxmLnR5cGVfbWVtYmVycyA9IHR5cGVfbWVtYmVycworCisg
ICAgZGVmIHJlc29sdmVfdHlwZV9yZWZlcmVuY2VzKHNlbGYsIHByb3RvY29sLCBkb21haW4pOgor
ICAgICAgICBsb2cuZGVidWcoIj4+IFJlc29sdmluZyB0eXBlIHJlZmVyZW5jZXMgZm9yIHR5cGUg
ZGVjbGFyYXRpb246ICVzIiAlIHNlbGYudHlwZV9uYW1lKQorICAgICAgICBzZWxmLnR5cGUgPSBw
cm90b2NvbC5sb29rdXBfdHlwZV9mb3JfZGVjbGFyYXRpb24oc2VsZiwgZG9tYWluKQorICAgICAg
ICBmb3IgX21lbWJlciBpbiBzZWxmLnR5cGVfbWVtYmVyczoKKyAgICAgICAgICAgIF9tZW1iZXIu
cmVzb2x2ZV90eXBlX3JlZmVyZW5jZXMocHJvdG9jb2wsIGRvbWFpbikKKworCitjbGFzcyBUeXBl
TWVtYmVyOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtZW1iZXJfbmFtZSwgdHlwZV9yZWYsIGlz
X29wdGlvbmFsLCBkZXNjcmlwdGlvbik6CisgICAgICAgIHNlbGYubWVtYmVyX25hbWUgPSBtZW1i
ZXJfbmFtZQorICAgICAgICBzZWxmLnR5cGVfcmVmID0gdHlwZV9yZWYKKyAgICAgICAgc2VsZi5p
c19vcHRpb25hbCA9IGlzX29wdGlvbmFsCisgICAgICAgIHNlbGYuZGVzY3JpcHRpb24gPSBkZXNj
cmlwdGlvbgorCisgICAgZGVmIHJlc29sdmVfdHlwZV9yZWZlcmVuY2VzKHNlbGYsIHByb3RvY29s
LCBkb21haW4pOgorICAgICAgICBsb2cuZGVidWcoIj4+PiBSZXNvbHZpbmcgdHlwZSByZWZlcmVu
Y2VzIGZvciB0eXBlIG1lbWJlcjogJXMiICUgc2VsZi5tZW1iZXJfbmFtZSkKKyAgICAgICAgc2Vs
Zi50eXBlID0gcHJvdG9jb2wubG9va3VwX3R5cGVfcmVmZXJlbmNlKHNlbGYudHlwZV9yZWYsIGRv
bWFpbikKKworCitjbGFzcyBQYXJhbWV0ZXI6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhcmFt
ZXRlcl9uYW1lLCB0eXBlX3JlZiwgaXNfb3B0aW9uYWwsIGRlc2NyaXB0aW9uKToKKyAgICAgICAg
c2VsZi5wYXJhbWV0ZXJfbmFtZSA9IHBhcmFtZXRlcl9uYW1lCisgICAgICAgIHNlbGYudHlwZV9y
ZWYgPSB0eXBlX3JlZgorICAgICAgICBzZWxmLmlzX29wdGlvbmFsID0gaXNfb3B0aW9uYWwKKyAg
ICAgICAgc2VsZi5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uCisKKyAgICBkZWYgcmVzb2x2ZV90
eXBlX3JlZmVyZW5jZXMoc2VsZiwgcHJvdG9jb2wsIGRvbWFpbik6CisgICAgICAgIGxvZy5kZWJ1
ZygiPj4+IFJlc29sdmluZyB0eXBlIHJlZmVyZW5jZXMgZm9yIHBhcmFtZXRlcjogJXMiICUgc2Vs
Zi5wYXJhbWV0ZXJfbmFtZSkKKyAgICAgICAgc2VsZi50eXBlID0gcHJvdG9jb2wubG9va3VwX3R5
cGVfcmVmZXJlbmNlKHNlbGYudHlwZV9yZWYsIGRvbWFpbikKKworCitjbGFzcyBDb21tYW5kOgor
ICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb21tYW5kX25hbWUsIGNhbGxfcGFyYW1ldGVycywgcmV0
dXJuX3BhcmFtZXRlcnMsIGRlc2NyaXB0aW9uLCBpc19hc3luYyk6CisgICAgICAgIHNlbGYuY29t
bWFuZF9uYW1lID0gY29tbWFuZF9uYW1lCisgICAgICAgIHNlbGYuY2FsbF9wYXJhbWV0ZXJzID0g
Y2FsbF9wYXJhbWV0ZXJzCisgICAgICAgIHNlbGYucmV0dXJuX3BhcmFtZXRlcnMgPSByZXR1cm5f
cGFyYW1ldGVycworICAgICAgICBzZWxmLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb24KKyAgICAg
ICAgc2VsZi5pc19hc3luYyA9IGlzX2FzeW5jCisKKyAgICBkZWYgcmVzb2x2ZV90eXBlX3JlZmVy
ZW5jZXMoc2VsZiwgcHJvdG9jb2wsIGRvbWFpbik6CisgICAgICAgIGxvZy5kZWJ1ZygiPj4gUmVz
b2x2aW5nIHR5cGUgcmVmZXJlbmNlcyBmb3IgY2FsbCBwYXJhbWV0ZXJzIGluIGNvbW1hbmQ6ICVz
IiAlIHNlbGYuY29tbWFuZF9uYW1lKQorICAgICAgICBmb3IgX3BhcmFtZXRlciBpbiBzZWxmLmNh
bGxfcGFyYW1ldGVyczoKKyAgICAgICAgICAgIF9wYXJhbWV0ZXIucmVzb2x2ZV90eXBlX3JlZmVy
ZW5jZXMocHJvdG9jb2wsIGRvbWFpbikKKworICAgICAgICBsb2cuZGVidWcoIj4+IFJlc29sdmlu
ZyB0eXBlIHJlZmVyZW5jZXMgZm9yIHJldHVybiBwYXJhbWV0ZXJzIGluIGNvbW1hbmQ6ICVzIiAl
IHNlbGYuY29tbWFuZF9uYW1lKQorICAgICAgICBmb3IgX3BhcmFtZXRlciBpbiBzZWxmLnJldHVy
bl9wYXJhbWV0ZXJzOgorICAgICAgICAgICAgX3BhcmFtZXRlci5yZXNvbHZlX3R5cGVfcmVmZXJl
bmNlcyhwcm90b2NvbCwgZG9tYWluKQorCisKK2NsYXNzIEV2ZW50OgorICAgIGRlZiBfX2luaXRf
XyhzZWxmLCBldmVudF9uYW1lLCBldmVudF9wYXJhbWV0ZXJzLCBkZXNjcmlwdGlvbik6CisgICAg
ICAgIHNlbGYuZXZlbnRfbmFtZSA9IGV2ZW50X25hbWUKKyAgICAgICAgc2VsZi5ldmVudF9wYXJh
bWV0ZXJzID0gZXZlbnRfcGFyYW1ldGVycworICAgICAgICBzZWxmLmRlc2NyaXB0aW9uID0gZGVz
Y3JpcHRpb24KKworICAgIGRlZiByZXNvbHZlX3R5cGVfcmVmZXJlbmNlcyhzZWxmLCBwcm90b2Nv
bCwgZG9tYWluKToKKyAgICAgICAgbG9nLmRlYnVnKCI+PiBSZXNvbHZpbmcgdHlwZSByZWZlcmVu
Y2VzIGZvciBwYXJhbWV0ZXJzIGluIGV2ZW50OiAlcyIgJSBzZWxmLmV2ZW50X25hbWUpCisgICAg
ICAgIGZvciBfcGFyYW1ldGVyIGluIHNlbGYuZXZlbnRfcGFyYW1ldGVyczoKKyAgICAgICAgICAg
IF9wYXJhbWV0ZXIucmVzb2x2ZV90eXBlX3JlZmVyZW5jZXMocHJvdG9jb2wsIGRvbWFpbikKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjc0MmFkZDVhZDdhNmEwZDRjNTY5Y2Y4YjYyZGY1YjM2NmViZTQzMTQKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CkBAIC0wLDAgKzEsMTg0IEBA
CisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE0IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChjKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
IyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisKKyMgVGhpcyBzY3JpcHQgZ2VuZXJhdGVzIEpTIGFuZCBDKysg
YmluZGluZ3MgZm9yIHRoZSBpbnNwZWN0b3IgcHJvdG9jb2wuCisjIEdlbmVyYXRvcnMgZm9yIGlu
ZGl2aWR1YWwgZmlsZXMgYXJlIGxvY2F0ZWQgaW4gdGhlIGNvZGVnZW4vIGRpcmVjdG9yeS4KKwor
aW1wb3J0IG9zLnBhdGgKK2ltcG9ydCByZQoraW1wb3J0IHN5cworaW1wb3J0IHN0cmluZworZnJv
bSBzdHJpbmcgaW1wb3J0IFRlbXBsYXRlCitpbXBvcnQgb3B0cGFyc2UKK2ltcG9ydCBsb2dnaW5n
CisKK3RyeToKKyAgICBpbXBvcnQganNvbgorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIGltcG9y
dCBzaW1wbGVqc29uIGFzIGpzb24KKwordHJ5OgorICAgIGZyb20gY29kZWdlbiBpbXBvcnQgKgor
CisjIFdoZW4gY29weWluZyBnZW5lcmF0b3IgZmlsZXMgdG8gSmF2YVNjcmlwdENvcmUncyBwcml2
YXRlIGhlYWRlcnMgb24gTWFjLAorIyB0aGUgY29kZWdlbi8gbW9kdWxlIGRpcmVjdG9yeSBpcyBm
bGF0dGVuZWQuIFNvLCBpbXBvcnQgZGlyZWN0bHkuCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAg
aW1wb3J0IG1vZGVscworICAgIGZyb20gbW9kZWxzIGltcG9ydCAqCisgICAgZnJvbSBnZW5lcmF0
b3IgaW1wb3J0ICoKKworICAgIGZyb20gZ2VuZXJhdGVfYmFja2VuZF9jb21tYW5kcyBpbXBvcnQg
KgorICAgIGZyb20gZ2VuZXJhdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlciBpbXBvcnQgKgor
ICAgIGZyb20gZ2VuZXJhdGVfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uIGltcG9y
dCAqCisgICAgZnJvbSBnZW5lcmF0ZV9mcm9udGVuZF9kaXNwYXRjaGVyX2hlYWRlciBpbXBvcnQg
KgorICAgIGZyb20gZ2VuZXJhdGVfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbiBp
bXBvcnQgKgorICAgIGZyb20gZ2VuZXJhdGVfdHlwZV9idWlsZGVyX2hlYWRlciBpbXBvcnQgKgor
ICAgIGZyb20gZ2VuZXJhdGVfdHlwZV9idWlsZGVyX2ltcGxlbWVudGF0aW9uIGltcG9ydCAqCisK
KyMgVXNlIGEgZ2xvYmFsIGxvZ2dlciwgd2hpY2ggbm9ybWFsbHkgb25seSBsb2dzIGVycm9ycy4K
KyMgSXQgY2FuIGJlIGNvbmZpZ3VyZWQgdG8gbG9nIGRlYnVnIG1lc3NhZ2VzIGZyb20gdGhlIENM
SS4KK2xvZ2dpbmcuYmFzaWNDb25maWcoZm9ybWF0PSclKGxldmVsbmFtZSlzOiAlKG1lc3NhZ2Up
cycsIGxldmVsPWxvZ2dpbmcuRVJST1IpCitsb2cgPSBsb2dnaW5nLmdldExvZ2dlcignZ2xvYmFs
JykKKworCisjIEEgd3JpdGVyIHRoYXQgb25seSB1cGRhdGVzIGZpbGUgaWYgaXQgYWN0dWFsbHkg
Y2hhbmdlZC4KK2NsYXNzIEluY3JlbWVudGFsRmlsZVdyaXRlcjoKKyAgICBkZWYgX19pbml0X18o
c2VsZiwgZmlsZXBhdGgsIGZvcmNlX291dHB1dCk6CisgICAgICAgIHNlbGYuX2ZpbGVwYXRoID0g
ZmlsZXBhdGgKKyAgICAgICAgc2VsZi5fb3V0cHV0ID0gIiIKKyAgICAgICAgc2VsZi5mb3JjZV9v
dXRwdXQgPSBmb3JjZV9vdXRwdXQKKworICAgIGRlZiB3cml0ZShzZWxmLCB0ZXh0KToKKyAgICAg
ICAgc2VsZi5fb3V0cHV0ICs9IHRleHQKKworICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAg
dGV4dF9jaGFuZ2VkID0gVHJ1ZQorICAgICAgICBzZWxmLl9vdXRwdXQgPSBzZWxmLl9vdXRwdXQu
cnN0cmlwKCkgKyAiXG4iCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmVhZF9maWxlID0g
b3BlbihzZWxmLl9maWxlcGF0aCwgInIiKQorICAgICAgICAgICAgb2xkX3RleHQgPSByZWFkX2Zp
bGUucmVhZCgpCisgICAgICAgICAgICByZWFkX2ZpbGUuY2xvc2UoKQorICAgICAgICAgICAgdGV4
dF9jaGFuZ2VkID0gb2xkX3RleHQgIT0gc2VsZi5fb3V0cHV0CisgICAgICAgIGV4Y2VwdDoKKyAg
ICAgICAgICAgICMgSWdub3JlLCBqdXN0IG92ZXJ3cml0ZSBieSBkZWZhdWx0CisgICAgICAgICAg
ICBwYXNzCisKKyAgICAgICAgaWYgdGV4dF9jaGFuZ2VkIG9yIHNlbGYuZm9yY2Vfb3V0cHV0Ogor
ICAgICAgICAgICAgb3V0X2ZpbGUgPSBvcGVuKHNlbGYuX2ZpbGVwYXRoLCAidyIpCisgICAgICAg
ICAgICBvdXRfZmlsZS53cml0ZShzZWxmLl9vdXRwdXQpCisgICAgICAgICAgICBvdXRfZmlsZS5j
bG9zZSgpCisKKworZGVmIGdlbmVyYXRlX2Zyb21fc3BlY2lmaWNhdGlvbihwcmltYXJ5X3NwZWNp
ZmljYXRpb25fZmlsZXBhdGg9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3VwcGxlbWVudGFsX3NwZWNpZmljYXRpb25fZmlsZXBhdGhzPVtdLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25jYXRlbmF0ZV9vdXRwdXQ9RmFsc2UsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG91dHB1dF9kaXJwYXRoPU5vbmUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZvcmNlX291dHB1dD1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZnJhbWV3b3JrX25hbWU9IiIpOgorCisgICAgZGVmIGxvYWRfc3BlY2lmaWNh
dGlvbihwcm90b2NvbCwgZmlsZXBhdGgsIGlzU3VwcGxlbWVudGFsPUZhbHNlKToKKyAgICAgICAg
dHJ5OgorICAgICAgICAgICAgd2l0aCBvcGVuKGZpbGVwYXRoLCAiciIpIGFzIGlucHV0X2ZpbGU6
CisgICAgICAgICAgICAgICAgcGFyc2VkX2pzb24gPSBqc29uLmxvYWQoaW5wdXRfZmlsZSkKKyAg
ICAgICAgICAgICAgICBwcm90b2NvbC5wYXJzZV9zcGVjaWZpY2F0aW9uKHBhcnNlZF9qc29uLCBp
c1N1cHBsZW1lbnRhbD1pc1N1cHBsZW1lbnRhbCkKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3Ig
YXMgZToKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiRXJyb3IgcGFyc2luZyB2YWxpZCBK
U09OIGluIGZpbGU6ICIgKyBmaWxlcGF0aCkKKworICAgIHByb3RvY29sID0gbW9kZWxzLlByb3Rv
Y29sKGZyYW1ld29ya19uYW1lKQorICAgIGZvciBzcGVjaWZpY2F0aW9uIGluIHN1cHBsZW1lbnRh
bF9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRoczoKKyAgICAgICAgbG9hZF9zcGVjaWZpY2F0aW9uKHBy
b3RvY29sLCBzcGVjaWZpY2F0aW9uLCBpc1N1cHBsZW1lbnRhbD1UcnVlKQorICAgIGxvYWRfc3Bl
Y2lmaWNhdGlvbihwcm90b2NvbCwgcHJpbWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRoLCBpc1N1
cHBsZW1lbnRhbD1GYWxzZSkKKworICAgIHByb3RvY29sLnJlc29sdmVfdHlwZXMoKQorCisgICAg
Z2VuZXJhdG9ycyA9IFtdCisgICAgZ2VuZXJhdG9ycy5hcHBlbmQoQmFja2VuZENvbW1hbmRzR2Vu
ZXJhdG9yKHByb3RvY29sLCBwcmltYXJ5X3NwZWNpZmljYXRpb25fZmlsZXBhdGgpKQorICAgIGdl
bmVyYXRvcnMuYXBwZW5kKEJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yKHByb3RvY29s
LCBwcmltYXJ5X3NwZWNpZmljYXRpb25fZmlsZXBhdGgpKQorICAgIGdlbmVyYXRvcnMuYXBwZW5k
KEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IocHJvdG9jb2wsIHByaW1h
cnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aCkpCisgICAgZ2VuZXJhdG9ycy5hcHBlbmQoRnJvbnRl
bmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yKHByb3RvY29sLCBwcmltYXJ5X3NwZWNpZmljYXRp
b25fZmlsZXBhdGgpKQorICAgIGdlbmVyYXRvcnMuYXBwZW5kKEZyb250ZW5kRGlzcGF0Y2hlcklt
cGxlbWVudGF0aW9uR2VuZXJhdG9yKHByb3RvY29sLCBwcmltYXJ5X3NwZWNpZmljYXRpb25fZmls
ZXBhdGgpKQorICAgIGdlbmVyYXRvcnMuYXBwZW5kKFR5cGVCdWlsZGVySGVhZGVyR2VuZXJhdG9y
KHByb3RvY29sLCBwcmltYXJ5X3NwZWNpZmljYXRpb25fZmlsZXBhdGgpKQorICAgIGdlbmVyYXRv
cnMuYXBwZW5kKFR5cGVCdWlsZGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IocHJvdG9jb2wsIHBy
aW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aCkpCisKKyAgICBzaW5nbGVfb3V0cHV0X2ZpbGVf
Y29udGVudHMgPSBbXQorCisgICAgZm9yIGdlbmVyYXRvciBpbiBnZW5lcmF0b3JzOgorICAgICAg
ICBvdXRwdXQgPSBnZW5lcmF0b3IuZ2VuZXJhdGVfb3V0cHV0KCkKKyAgICAgICAgaWYgY29uY2F0
ZW5hdGVfb3V0cHV0OgorICAgICAgICAgICAgc2luZ2xlX291dHB1dF9maWxlX2NvbnRlbnRzLmFw
cGVuZCgnIyMjIEJlZ2luIEZpbGU6ICVzJyAlIGdlbmVyYXRvci5vdXRwdXRfZmlsZW5hbWUoKSkK
KyAgICAgICAgICAgIHNpbmdsZV9vdXRwdXRfZmlsZV9jb250ZW50cy5hcHBlbmQob3V0cHV0KQor
ICAgICAgICAgICAgc2luZ2xlX291dHB1dF9maWxlX2NvbnRlbnRzLmFwcGVuZCgnIyMjIEVuZCBG
aWxlOiAlcycgJSBnZW5lcmF0b3Iub3V0cHV0X2ZpbGVuYW1lKCkpCisgICAgICAgICAgICBzaW5n
bGVfb3V0cHV0X2ZpbGVfY29udGVudHMuYXBwZW5kKCcnKQorICAgICAgICBlbHNlOgorICAgICAg
ICAgICAgb3V0cHV0X2ZpbGUgPSBJbmNyZW1lbnRhbEZpbGVXcml0ZXIob3MucGF0aC5qb2luKG91
dHB1dF9kaXJwYXRoLCBnZW5lcmF0b3Iub3V0cHV0X2ZpbGVuYW1lKCkpLCBmb3JjZV9vdXRwdXQp
CisgICAgICAgICAgICBvdXRwdXRfZmlsZS53cml0ZShvdXRwdXQpCisgICAgICAgICAgICBvdXRw
dXRfZmlsZS5jbG9zZSgpCisKKyAgICBpZiBjb25jYXRlbmF0ZV9vdXRwdXQ6CisgICAgICAgICAg
ICBmaWxlbmFtZSA9IG9zLnBhdGguam9pbihvcy5wYXRoLmJhc2VuYW1lKHByaW1hcnlfc3BlY2lm
aWNhdGlvbl9maWxlcGF0aCkgKyAnLXJlc3VsdCcpCisgICAgICAgICAgICBvdXRwdXRfZmlsZSA9
IEluY3JlbWVudGFsRmlsZVdyaXRlcihvcy5wYXRoLmpvaW4ob3V0cHV0X2RpcnBhdGgsIGZpbGVu
YW1lKSwgZm9yY2Vfb3V0cHV0KQorICAgICAgICAgICAgb3V0cHV0X2ZpbGUud3JpdGUoJ1xuJy5q
b2luKHNpbmdsZV9vdXRwdXRfZmlsZV9jb250ZW50cykpCisgICAgICAgICAgICBvdXRwdXRfZmls
ZS5jbG9zZSgpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBhbGxvd2VkX2Zy
YW1ld29ya19uYW1lcyA9IFsnV1RGJywgJ0phdmFTY3JpcHRDb3JlJywgJ1dlYkNvcmUnLCAnV2Vi
S2l0JywgJ1dlYktpdDInLCAnVGVzdCddCisgICAgY2xpX3BhcnNlciA9IG9wdHBhcnNlLk9wdGlv
blBhcnNlcih1c2FnZT0idXNhZ2U6ICVwcm9nIFtvcHRpb25zXSBQcmltYXJ5UHJvdG9jb2wuanNv
biBbU3VwcGxlbWVudGFsUHJvdG9jb2wuanNvbiAuLi5dIikKKyAgICBjbGlfcGFyc2VyLmFkZF9v
cHRpb24oIi1vIiwgIi0tb3V0cHV0RGlyIiwgaGVscD0iRGlyZWN0b3J5IHdoZXJlIGdlbmVyYXRl
ZCBmaWxlcyBzaG91bGQgYmUgd3JpdHRlbi4iKQorICAgIGNsaV9wYXJzZXIuYWRkX29wdGlvbigi
LS1mcmFtZXdvcmsiLCB0eXBlPSJjaG9pY2UiLCBjaG9pY2VzPWFsbG93ZWRfZnJhbWV3b3JrX25h
bWVzLCBoZWxwPSJUaGUgZnJhbWV3b3JrIHRoYXQgdGhlIHByaW1hcnkgc3BlY2lmaWNhdGlvbiBi
ZWxvbmdzIHRvLiIpCisgICAgY2xpX3BhcnNlci5hZGRfb3B0aW9uKCItLWZvcmNlIiwgYWN0aW9u
PSJzdG9yZV90cnVlIiwgaGVscD0iRm9yY2Ugb3V0cHV0IG9mIGdlbmVyYXRlZCBzY3JpcHRzLCBl
dmVuIGlmIG5vdGhpbmcgY2hhbmdlZC4iKQorICAgIGNsaV9wYXJzZXIuYWRkX29wdGlvbigiLXYi
LCAiLS1kZWJ1ZyIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGhlbHA9IkxvZyBleHRyYSBvdXRwdXQg
Zm9yIGRlYnVnZ2luZyB0aGUgZ2VuZXJhdG9yIGl0c2VsZi4iKQorICAgIGNsaV9wYXJzZXIuYWRk
X29wdGlvbigiLXQiLCAiLS10ZXN0IiwgYWN0aW9uPSJzdG9yZV90cnVlIiwgaGVscD0iRW5hYmxl
IHRlc3QgbW9kZS4gVXNlIHVuaXF1ZSBvdXRwdXQgZmlsZW5hbWVzIGNyZWF0ZWQgYnkgcHJlcGVu
ZGluZyB0aGUgaW5wdXQgZmlsZW5hbWUuIikKKworICAgIG9wdGlvbnMgPSBOb25lCisKKyAgICBh
cmdfb3B0aW9ucywgYXJnX3ZhbHVlcyA9IGNsaV9wYXJzZXIucGFyc2VfYXJncygpCisgICAgaWYg
KGxlbihhcmdfdmFsdWVzKSA8IDEpOgorICAgICAgICByYWlzZSBQYXJzZUV4Y2VwdGlvbigiQXQg
bGVhc3Qgb25lIHBsYWluIGFyZ3VtZW50IGV4cGVjdGVkIikKKworICAgIGlmIG5vdCBhcmdfb3B0
aW9ucy5vdXRwdXREaXI6CisgICAgICAgIHJhaXNlIFBhcnNlRXhjZXB0aW9uKCJNaXNzaW5nIG91
dHB1dCBkaXJlY3RvcnkiKQorCisgICAgaWYgYXJnX29wdGlvbnMuZGVidWc6CisgICAgICAgIGxv
Zy5zZXRMZXZlbChsb2dnaW5nLkRFQlVHKQorCisgICAgb3B0aW9ucyA9IHsKKyAgICAgICAgJ3By
aW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aCc6IGFyZ192YWx1ZXNbMF0sCisgICAgICAgICdz
dXBwbGVtZW50YWxfc3BlY2lmaWNhdGlvbl9maWxlcGF0aHMnOiBhcmdfdmFsdWVzWzE6XSwKKyAg
ICAgICAgJ291dHB1dF9kaXJwYXRoJzogYXJnX29wdGlvbnMub3V0cHV0RGlyLAorICAgICAgICAn
Y29uY2F0ZW5hdGVfb3V0cHV0JzogYXJnX29wdGlvbnMudGVzdCwKKyAgICAgICAgJ2ZyYW1ld29y
a19uYW1lJzogYXJnX29wdGlvbnMuZnJhbWV3b3JrLAorICAgICAgICAnZm9yY2Vfb3V0cHV0Jzog
YXJnX29wdGlvbnMuZm9yY2UKKyAgICB9CisKKyAgICB0cnk6CisgICAgICAgIGdlbmVyYXRlX2Zy
b21fc3BlY2lmaWNhdGlvbigqKm9wdGlvbnMpCisgICAgZXhjZXB0IChQYXJzZUV4Y2VwdGlvbiwg
VHlwZWNoZWNrRXhjZXB0aW9uKSBhcyBlOgorICAgICAgICBpZiBhcmdfb3B0aW9ucy50ZXN0Ogor
ICAgICAgICAgICAgbG9nLmVycm9yKGUubWVzc2FnZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAg
ICAgIHJhaXNlICAjIEZvcmNlIHRoZSBidWlsZCB0byBmYWlsLgpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2NvbW1hbmRzLXdpdGgtYXN5
bmMtYXR0cmlidXRlLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41
NjFiNWNlYWIxNGM3YWMzN2VlNTFhOWJkN2M5MjAzZmM1YmFiMTBiCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2NvbW1hbmRz
LXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24KQEAgLTAsMCArMSwxMDAgQEAKK3sKKyAgICAiZG9t
YWluIjogIkRhdGFiYXNlIiwKKyAgICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAg
ICJpZCI6ICJEYXRhYmFzZUlkIiwKKyAgICAgICAgICAgICJ0eXBlIjogImludGVnZXIiLAorICAg
ICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBpZGVudGlmaWVyIG9mIERhdGFiYXNlIG9i
amVjdC4iCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJQcmltYXJ5
Q29sb3JzIiwKKyAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCisgICAgICAgICAgICAiZW51
bSI6IFsicmVkIiwgImdyZWVuIiwgImJsdWUiXQorICAgICAgICB9LAorICAgICAgICB7CisgICAg
ICAgICAgICAiaWQiOiAiRXJyb3IiLAorICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKKyAg
ICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJEYXRhYmFzZSBlcnJvci4iLAorICAgICAgICAgICAg
InByb3BlcnRpZXMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJtZXNzYWdlIiwgInR5
cGUiOiAic3RyaW5nIiwgImRlc2NyaXB0aW9uIjogIkVycm9yIG1lc3NhZ2UuIiB9LAorICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAiY29kZSIsICJ0eXBlIjogImludGVnZXIiLCAiZGVzY3JpcHRp
b24iOiAiRXJyb3IgY29kZS4iIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0sCisg
ICAgImNvbW1hbmRzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJleGVjdXRl
U1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzIiwKKyAgICAgICAgICAgICJwYXJhbWV0ZXJzIjog
WworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZGF0YWJhc2VJZCIsICIkcmVmIjogIkRhdGFi
YXNlSWQiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJxdWVyeSIsICJ0eXBlIjogInN0
cmluZyIgfQorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICJyZXR1cm5zIjogWworICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJhcnJheSIsICJvcHRp
b25hbCI6IHRydWUsICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9IH0sCisgICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IHRy
dWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51
bWJlciIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInZh
bHVlcyIsICJ0eXBlIjogIm9iamVjdCIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJhbnkiLCAib3B0aW9uYWwiOiB0cnVl
IH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJkYXRhYmFzZUlkIiwgIiRyZWYiOiAiRGF0
YWJhc2VJZCIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjog
InNxbEVycm9yIiwgIiRyZWYiOiAiRXJyb3IiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJzY3JlZW5Db2xvciIsICIkcmVmIjogIlByaW1hcnlDb2xvcnMi
LCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwcmludENv
bG9yIiwgInR5cGUiOiAic3RyaW5nIiwgImVudW0iOiBbImN5YW4iLCAibWFnZW50YSIsICJ5ZWxs
b3ciLCAiYmxhY2siXSwgIm9wdGlvbmFsIjogdHJ1ZSB9CisgICAgICAgICAgICBdCisgICAgICAg
IH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImV4ZWN1dGVTUUxBc3luY09wdGlv
bmFsUmV0dXJuVmFsdWVzIiwKKyAgICAgICAgICAgICJhc3luYyI6IHRydWUsCisgICAgICAgICAg
ICAicGFyYW1ldGVycyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImRhdGFiYXNlSWQi
LCAiJHJlZiI6ICJEYXRhYmFzZUlkIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicXVl
cnkiLCAidHlwZSI6ICJzdHJpbmciIH0KKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICAicmV0
dXJucyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUi
OiAiYXJyYXkiLCAib3B0aW9uYWwiOiB0cnVlLCAiaXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIg
fSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibm90ZXMiLCAidHlwZSI6ICJzdHJpbmci
LCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0aW1lc3Rh
bXAiLCAidHlwZSI6ICJudW1iZXIiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJ2YWx1ZXMiLCAidHlwZSI6ICJvYmplY3QiLCAib3B0aW9uYWwiOiB0cnVl
IH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwYXlsb2FkIiwgInR5cGUiOiAiYW55Iiwg
Im9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZGF0YWJhc2VJ
ZCIsICIkcmVmIjogIkRhdGFiYXNlSWQiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJzcWxFcnJvciIsICIkcmVmIjogIkVycm9yIiwgIm9wdGlvbmFsIjog
dHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic2NyZWVuQ29sb3IiLCAiJHJlZiI6
ICJQcmltYXJ5Q29sb3JzIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAicHJpbnRDb2xvciIsICJ0eXBlIjogInN0cmluZyIsICJlbnVtIjogWyJjeWFuIiwg
Im1hZ2VudGEiLCAieWVsbG93IiwgImJsYWNrIl0sICJvcHRpb25hbCI6IHRydWUgfQorICAgICAg
ICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJleGVj
dXRlU1FMU3luYyIsCisgICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKKyAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogImRhdGFiYXNlSWQiLCAiJHJlZiI6ICJEYXRhYmFzZUlkIiB9LAorICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAicXVlcnkiLCAidHlwZSI6ICJzdHJpbmciIH0KKyAgICAgICAg
ICAgIF0sCisgICAgICAgICAgICAicmV0dXJucyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1l
IjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAiYXJyYXkiLCAiaXRlbXMiOiB7ICJ0eXBlIjogInN0
cmluZyIgfSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibm90ZXMiLCAidHlwZSI6ICJz
dHJpbmciIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0aW1lc3RhbXAiLCAidHlwZSI6
ICJudW1iZXIiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ2YWx1ZXMiLCAidHlwZSI6
ICJvYmplY3QiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwYXlsb2FkIiwgInR5cGUi
OiAiYW55IiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZGF0YWJhc2VJZCIsICIkcmVm
IjogIkRhdGFiYXNlSWQiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzcWxFcnJvciIs
ICIkcmVmIjogIkVycm9yIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic2NyZWVuQ29s
b3IiLCAiJHJlZiI6ICJQcmltYXJ5Q29sb3JzIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAicHJpbnRDb2xvciIsICJ0eXBlIjogInN0cmluZyIsICJlbnVtIjogWyJjeWFuIiwgIm1hZ2Vu
dGEiLCAieWVsbG93IiwgImJsYWNrIl0gfQorICAgICAgICAgICAgXQorICAgICAgICB9LAorICAg
ICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJleGVjdXRlU1FMQXN5bmMiLAorICAgICAgICAg
ICAgImFzeW5jIjogdHJ1ZSwKKyAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWworICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAiZGF0YWJhc2VJZCIsICIkcmVmIjogIkRhdGFiYXNlSWQiIH0sCisg
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJxdWVyeSIsICJ0eXBlIjogInN0cmluZyIgfQorICAg
ICAgICAgICAgXSwKKyAgICAgICAgICAgICJyZXR1cm5zIjogWworICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJhcnJheSIsICJpdGVtcyI6IHsgInR5cGUi
OiAic3RyaW5nIiB9IH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJub3RlcyIsICJ0eXBl
IjogInN0cmluZyIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRpbWVzdGFtcCIsICJ0
eXBlIjogIm51bWJlciIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInZhbHVlcyIsICJ0
eXBlIjogIm9iamVjdCIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBheWxvYWQiLCAi
dHlwZSI6ICJhbnkiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJkYXRhYmFzZUlkIiwg
IiRyZWYiOiAiRGF0YWJhc2VJZCIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNxbEVy
cm9yIiwgIiRyZWYiOiAiRXJyb3IiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzY3Jl
ZW5Db2xvciIsICIkcmVmIjogIlByaW1hcnlDb2xvcnMiIH0sCisgICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJwcmludENvbG9yIiwgInR5cGUiOiAic3RyaW5nIiwgImVudW0iOiBbImN5YW4iLCAi
bWFnZW50YSIsICJ5ZWxsb3ciLCAiYmxhY2siXSB9CisgICAgICAgICAgICBdCisgICAgICAgIH0K
KyAgICBdCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJz
Lmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvY29t
bWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24KbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMzg1NjFlNzM0NTc1NTdiOTUwY2FiY2NkYzJlOTlhOWEzYzE5MzQwYwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9jb21t
YW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgpAQCAtMCwwICsx
LDc2IEBACit7CisgICAgImRvbWFpbiI6ICJEYXRhYmFzZSIsCisgICAgInR5cGVzIjogWworICAg
ICAgICB7CisgICAgICAgICAgICAiaWQiOiAiRGF0YWJhc2VJZCIsCisgICAgICAgICAgICAidHlw
ZSI6ICJpbnRlZ2VyIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUgaWRlbnRp
ZmllciBvZiBEYXRhYmFzZSBvYmplY3QuIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAg
ICAgICAiaWQiOiAiUHJpbWFyeUNvbG9ycyIsCisgICAgICAgICAgICAidHlwZSI6ICJzdHJpbmci
LAorICAgICAgICAgICAgImVudW0iOiBbInJlZCIsICJncmVlbiIsICJibHVlIl0KKyAgICAgICAg
fSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIkVycm9yIiwKKyAgICAgICAgICAgICJ0
eXBlIjogIm9iamVjdCIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiRGF0YWJhc2UgZXJy
b3IuIiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWworICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAibWVzc2FnZSIsICJ0eXBlIjogInN0cmluZyIsICJkZXNjcmlwdGlvbiI6ICJFcnJvciBt
ZXNzYWdlLiIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvZGUiLCAidHlwZSI6ICJp
bnRlZ2VyIiwgImRlc2NyaXB0aW9uIjogIkVycm9yIGNvZGUuIiB9CisgICAgICAgICAgICBdCisg
ICAgICAgIH0KKyAgICBdLAorICAgICJjb21tYW5kcyI6IFsKKyAgICAgICAgeworICAgICAgICAg
ICAgIm5hbWUiOiAiZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyIsCisgICAgICAgICAgICAi
cGFyYW1ldGVycyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbHVtbk5hbWVzIiwg
InR5cGUiOiAiYXJyYXkiLCAib3B0aW9uYWwiOiB0cnVlLCAiaXRlbXMiOiB7ICJ0eXBlIjogInN0
cmluZyIgfSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibm90ZXMiLCAidHlwZSI6ICJz
dHJpbmciLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0
aW1lc3RhbXAiLCAidHlwZSI6ICJudW1iZXIiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJ2YWx1ZXMiLCAidHlwZSI6ICJvYmplY3QiLCAib3B0aW9uYWwi
OiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwYXlsb2FkIiwgInR5cGUiOiAi
YW55IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZGF0
YWJhc2VJZCIsICIkcmVmIjogIkRhdGFiYXNlSWQiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJzcWxFcnJvciIsICIkcmVmIjogIkVycm9yIiwgIm9wdGlv
bmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic2NyZWVuQ29sb3IiLCAi
JHJlZiI6ICJQcmltYXJ5Q29sb3JzIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAicHJpbnRDb2xvciIsICJ0eXBlIjogInN0cmluZyIsICJlbnVtIjogWyJj
eWFuIiwgIm1hZ2VudGEiLCAieWVsbG93IiwgImJsYWNrIl0sICJvcHRpb25hbCI6IHRydWUgfQor
ICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICJyZXR1cm5zIjogWworICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJhcnJheSIsICJvcHRpb25hbCI6IHRy
dWUsICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9IH0sCisgICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciIsICJv
cHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInZhbHVlcyIsICJ0
eXBlIjogIm9iamVjdCIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJu
YW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJhbnkiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJkYXRhYmFzZUlkIiwgIiRyZWYiOiAiRGF0YWJhc2VJZCIs
ICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNxbEVycm9y
IiwgIiRyZWYiOiAiRXJyb3IiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJzY3JlZW5Db2xvciIsICIkcmVmIjogIlByaW1hcnlDb2xvcnMiLCAib3B0aW9u
YWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwcmludENvbG9yIiwgInR5
cGUiOiAic3RyaW5nIiwgImVudW0iOiBbImN5YW4iLCAibWFnZW50YSIsICJ5ZWxsb3ciLCAiYmxh
Y2siXSwgIm9wdGlvbmFsIjogdHJ1ZSB9CisgICAgICAgICAgICBdCisgICAgICAgIH0sCisgICAg
ICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyIs
CisgICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjog
ImNvbHVtbk5hbWVzIiwgInR5cGUiOiAiYXJyYXkiLCAiaXRlbXMiOiB7ICJ0eXBlIjogInN0cmlu
ZyIgfSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibm90ZXMiLCAidHlwZSI6ICJzdHJp
bmciIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0aW1lc3RhbXAiLCAidHlwZSI6ICJu
dW1iZXIiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ2YWx1ZXMiLCAidHlwZSI6ICJv
YmplY3QiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwYXlsb2FkIiwgInR5cGUiOiAi
YW55IiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZGF0YWJhc2VJZCIsICIkcmVmIjog
IkRhdGFiYXNlSWQiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzcWxFcnJvciIsICIk
cmVmIjogIkVycm9yIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic2NyZWVuQ29sb3Ii
LCAiJHJlZiI6ICJQcmltYXJ5Q29sb3JzIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
cHJpbnRDb2xvciIsICJ0eXBlIjogInN0cmluZyIsICJlbnVtIjogWyJjeWFuIiwgIm1hZ2VudGEi
LCAieWVsbG93IiwgImJsYWNrIl0gfQorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICJyZXR1
cm5zIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6
ICJhcnJheSIsICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9IH0sCisgICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIgfSwKKyAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciIgfSwKKyAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogInZhbHVlcyIsICJ0eXBlIjogIm9iamVjdCIgfSwKKyAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJhbnkiIH0sCisgICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJkYXRhYmFzZUlkIiwgIiRyZWYiOiAiRGF0YWJhc2VJZCIgfSwKKyAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogInNxbEVycm9yIiwgIiRyZWYiOiAiRXJyb3IiIH0sCisgICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJzY3JlZW5Db2xvciIsICIkcmVmIjogIlByaW1hcnlDb2xv
cnMiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwcmludENvbG9yIiwgInR5cGUiOiAi
c3RyaW5nIiwgImVudW0iOiBbImN5YW4iLCAibWFnZW50YSIsICJ5ZWxsb3ciLCAiYmxhY2siXSB9
CisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZG9tYWlucy13aXRoLXZhcnlp
bmctY29tbWFuZC1zaXplcy5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2RvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbgpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4wMDRkN2M5MDI1ZTdlODAxOGRhZDcyODZlZGE5ODc4ZTU3Mzk5ZWVkCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2RvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbgpAQCAtMCwwICsxLDU1IEBA
CitbCit7CisgICAgImRvbWFpbiI6ICJOZXR3b3JrMSIsCisKKyAgICAiY29tbWFuZHMiOiBbCisg
ICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImxvYWRSZXNvdXJjZTEiLAorICAgICAgICAg
ICAgImRlc2NyaXB0aW9uIjogIkxvYWRzIGEgcmVzb3VyY2UgaW4gdGhlIGNvbnRleHQgb2YgYSBm
cmFtZSBvbiB0aGUgaW5zcGVjdGVkIHBhZ2Ugd2l0aG91dCBjcm9zcyBvcmlnaW4gY2hlY2tzLiIK
KyAgICAgICAgfQorICAgIF0KK30sCit7CisgICAgImRvbWFpbiI6ICJOZXR3b3JrMiIsCisgICAg
InR5cGVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiTG9hZGVySWQiLAorICAg
ICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJV
bmlxdWUgbG9hZGVyIGlkZW50aWZpZXIuIgorICAgICAgICB9CisgICAgXQorfSwKK3sKKyAgICAi
ZG9tYWluIjogIk5ldHdvcmszIiwKKyAgICAiY29tbWFuZHMiOiBbCisgICAgICAgIHsKKyAgICAg
ICAgICAgICJuYW1lIjogImxvYWRSZXNvdXJjZTEiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9u
IjogIkxvYWRzIGEgcmVzb3VyY2UgaW4gdGhlIGNvbnRleHQgb2YgYSBmcmFtZSBvbiB0aGUgaW5z
cGVjdGVkIHBhZ2Ugd2l0aG91dCBjcm9zcyBvcmlnaW4gY2hlY2tzLiIKKyAgICAgICAgfSwKKyAg
ICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAibG9hZFJlc291cmNlMiIsCisgICAgICAgICAg
ICAiZGVzY3JpcHRpb24iOiAiTG9hZHMgYSByZXNvdXJjZSBpbiB0aGUgY29udGV4dCBvZiBhIGZy
YW1lIG9uIHRoZSBpbnNwZWN0ZWQgcGFnZSB3aXRob3V0IGNyb3NzIG9yaWdpbiBjaGVja3MuIgor
ICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJsb2FkUmVzb3VyY2Uz
IiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJMb2FkcyBhIHJlc291cmNlIGluIHRoZSBj
b250ZXh0IG9mIGEgZnJhbWUgb24gdGhlIGluc3BlY3RlZCBwYWdlIHdpdGhvdXQgY3Jvc3Mgb3Jp
Z2luIGNoZWNrcy4iCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjog
ImxvYWRSZXNvdXJjZTQiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkxvYWRzIGEgcmVz
b3VyY2UgaW4gdGhlIGNvbnRleHQgb2YgYSBmcmFtZSBvbiB0aGUgaW5zcGVjdGVkIHBhZ2Ugd2l0
aG91dCBjcm9zcyBvcmlnaW4gY2hlY2tzLiIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAg
ICAgICAgIm5hbWUiOiAibG9hZFJlc291cmNlNSIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24i
OiAiTG9hZHMgYSByZXNvdXJjZSBpbiB0aGUgY29udGV4dCBvZiBhIGZyYW1lIG9uIHRoZSBpbnNw
ZWN0ZWQgcGFnZSB3aXRob3V0IGNyb3NzIG9yaWdpbiBjaGVja3MuIgorICAgICAgICB9LAorICAg
ICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJsb2FkUmVzb3VyY2U2IiwKKyAgICAgICAgICAg
ICJkZXNjcmlwdGlvbiI6ICJMb2FkcyBhIHJlc291cmNlIGluIHRoZSBjb250ZXh0IG9mIGEgZnJh
bWUgb24gdGhlIGluc3BlY3RlZCBwYWdlIHdpdGhvdXQgY3Jvc3Mgb3JpZ2luIGNoZWNrcy4iCisg
ICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImxvYWRSZXNvdXJjZTci
LAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkxvYWRzIGEgcmVzb3VyY2UgaW4gdGhlIGNv
bnRleHQgb2YgYSBmcmFtZSBvbiB0aGUgaW5zcGVjdGVkIHBhZ2Ugd2l0aG91dCBjcm9zcyBvcmln
aW4gY2hlY2tzLiIKKyAgICAgICAgfQorICAgIF0KK30KK10KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9ldmVudHMtd2l0aC1vcHRpb25h
bC1wYXJhbWV0ZXJzLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjVlZmM3Y2IzMTliMGIzNmZhOTVjNDcxNDAzMDUzNzc4NjI0YWZjMTMKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXZlbnRz
LXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uCkBAIC0wLDAgKzEsNTIgQEAKK3sKKyAgICAi
ZG9tYWluIjogIkRhdGFiYXNlIiwKKyAgICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAg
ICAgICJpZCI6ICJEYXRhYmFzZUlkIiwKKyAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCisg
ICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5pcXVlIGlkZW50aWZpZXIgb2YgRGF0YWJhc2Ug
b2JqZWN0LiIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIlByaW1h
cnlDb2xvcnMiLAorICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKKyAgICAgICAgICAgICJ2
YWx1ZXMiOiBbInJlZCIsICJncmVlbiIsICJibHVlIl0KKyAgICAgICAgfSwKKyAgICAgICAgewor
ICAgICAgICAgICAgImlkIjogIkVycm9yIiwKKyAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIs
CisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiRGF0YWJhc2UgZXJyb3IuIiwKKyAgICAgICAg
ICAgICJwcm9wZXJ0aWVzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibWVzc2FnZSIs
ICJ0eXBlIjogInN0cmluZyIsICJkZXNjcmlwdGlvbiI6ICJFcnJvciBtZXNzYWdlLiIgfSwKKyAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogImNvZGUiLCAidHlwZSI6ICJpbnRlZ2VyIiwgImRlc2Ny
aXB0aW9uIjogIkVycm9yIGNvZGUuIiB9CisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBd
LAorICAgICJldmVudHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImRpZEV4
ZWN1dGVPcHRpb25hbFBhcmFtZXRlcnMiLAorICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCisg
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogImFycmF5Iiwg
Im9wdGlvbmFsIjogdHJ1ZSwgIml0ZW1zIjogeyAidHlwZSI6ICJzdHJpbmciIH0gfSwKKyAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogIm5vdGVzIiwgInR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFs
IjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidGltZXN0YW1wIiwgInR5cGUi
OiAibnVtYmVyIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAidmFsdWVzIiwgInR5cGUiOiAib2JqZWN0IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAicGF5bG9hZCIsICJ0eXBlIjogImFueSIsICJvcHRpb25hbCI6
IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNxbEVycm9yIiwgIiRyZWYiOiAi
RXJyb3IiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJz
Y3JlZW5Db2xvciIsICIkcmVmIjogIlByaW1hcnlDb2xvcnMiLCAib3B0aW9uYWwiOiB0cnVlIH0s
CisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwcmludENvbG9yIiwgInR5cGUiOiAic3RyaW5n
IiwgInZhbHVlcyI6IFsiY3lhbiIsICJtYWdlbnRhIiwgInllbGxvdyIsICJibGFjayJdLCAib3B0
aW9uYWwiOiB0cnVlIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAg
ICAgICAgICAgIm5hbWUiOiAiZGlkRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzIiwKKyAgICAg
ICAgICAgICJwYXJhbWV0ZXJzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29sdW1u
TmFtZXMiLCAidHlwZSI6ICJhcnJheSIsICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9IH0s
CisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIgfSwK
KyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciIg
fSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInZhbHVlcyIsICJ0eXBlIjogIm9iamVjdCIg
fSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJhbnkiIH0s
CisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzcWxFcnJvciIsICIkcmVmIjogIkVycm9yIiB9
LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic2NyZWVuQ29sb3IiLCAiJHJlZiI6ICJQcmlt
YXJ5Q29sb3JzIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicHJpbnRDb2xvciIsICJ0
eXBlIjogInN0cmluZyIsICJ2YWx1ZXMiOiBbImN5YW4iLCAibWFnZW50YSIsICJ5ZWxsb3ciLCAi
YmxhY2siXSB9CisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdCit9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQv
Y29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1h
c3luYy1hdHRyaWJ1dGUuanNvbi1yZXN1bHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGJhYzkyYjhlYjAxMzJmYTdh
NTU5YzBkMWNjMTcxNzU2YzIxZjg1NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9jb21tYW5kcy13aXRoLWFz
eW5jLWF0dHJpYnV0ZS5qc29uLXJlc3VsdApAQCAtMCwwICsxLDcyNCBAQAorIyMjIEJlZ2luIEZp
bGU6IEluc3BlY3RvclRlc3RCYWNrZW5kQ29tbWFuZHMuanMKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29t
bWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogSmF2YVNj
cmlwdENvcmUvcmVwbGF5L3NjcmlwdHMvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQorCisvLyBE
YXRhYmFzZS4KK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEYXRhYmFzZURpc3BhdGNoZXIgPSBJ
bnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluRGlzcGF0Y2hlci5iaW5kKEluc3BlY3RvckJh
Y2tlbmQsICJEYXRhYmFzZSIpOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckVudW0oIkRhdGFi
YXNlLlByaW1hcnlDb2xvcnMiLCB7UmVkOiAicmVkIiwgR3JlZW46ICJncmVlbiIsIEJsdWU6ICJi
bHVlIn0pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIkRhdGFiYXNlLmV4ZWN1
dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMiLCBbeyJuYW1lIjogImRhdGFiYXNlSWQiLCAi
dHlwZSI6ICJudW1iZXIiLCAib3B0aW9uYWwiOiBmYWxzZX0sIHsibmFtZSI6ICJxdWVyeSIsICJ0
eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IGZhbHNlfV0sIFsiY29sdW1uTmFtZXMiLCAibm90
ZXMiLCAidGltZXN0YW1wIiwgInZhbHVlcyIsICJwYXlsb2FkIiwgImRhdGFiYXNlSWQiLCAic3Fs
RXJyb3IiLCAic2NyZWVuQ29sb3IiLCAicHJpbnRDb2xvciJdKTsKK0luc3BlY3RvckJhY2tlbmQu
cmVnaXN0ZXJDb21tYW5kKCJEYXRhYmFzZS5leGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZh
bHVlcyIsIFt7Im5hbWUiOiAiZGF0YWJhc2VJZCIsICJ0eXBlIjogIm51bWJlciIsICJvcHRpb25h
bCI6IGZhbHNlfSwgeyJuYW1lIjogInF1ZXJ5IiwgInR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFs
IjogZmFsc2V9XSwgWyJjb2x1bW5OYW1lcyIsICJub3RlcyIsICJ0aW1lc3RhbXAiLCAidmFsdWVz
IiwgInBheWxvYWQiLCAiZGF0YWJhc2VJZCIsICJzcWxFcnJvciIsICJzY3JlZW5Db2xvciIsICJw
cmludENvbG9yIl0pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIkRhdGFiYXNl
LmV4ZWN1dGVTUUxTeW5jIiwgW3sibmFtZSI6ICJkYXRhYmFzZUlkIiwgInR5cGUiOiAibnVtYmVy
IiwgIm9wdGlvbmFsIjogZmFsc2V9LCB7Im5hbWUiOiAicXVlcnkiLCAidHlwZSI6ICJzdHJpbmci
LCAib3B0aW9uYWwiOiBmYWxzZX1dLCBbImNvbHVtbk5hbWVzIiwgIm5vdGVzIiwgInRpbWVzdGFt
cCIsICJ2YWx1ZXMiLCAicGF5bG9hZCIsICJkYXRhYmFzZUlkIiwgInNxbEVycm9yIiwgInNjcmVl
bkNvbG9yIiwgInByaW50Q29sb3IiXSk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFu
ZCgiRGF0YWJhc2UuZXhlY3V0ZVNRTEFzeW5jIiwgW3sibmFtZSI6ICJkYXRhYmFzZUlkIiwgInR5
cGUiOiAibnVtYmVyIiwgIm9wdGlvbmFsIjogZmFsc2V9LCB7Im5hbWUiOiAicXVlcnkiLCAidHlw
ZSI6ICJzdHJpbmciLCAib3B0aW9uYWwiOiBmYWxzZX1dLCBbImNvbHVtbk5hbWVzIiwgIm5vdGVz
IiwgInRpbWVzdGFtcCIsICJ2YWx1ZXMiLCAicGF5bG9hZCIsICJkYXRhYmFzZUlkIiwgInNxbEVy
cm9yIiwgInNjcmVlbkNvbG9yIiwgInByaW50Q29sb3IiXSk7CisjIyMgRW5kIEZpbGU6IEluc3Bl
Y3RvclRlc3RCYWNrZW5kQ29tbWFuZHMuanMKKworIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRl
c3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLWFz
eW5jLWF0dHJpYnV0ZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBKYXZhU2NyaXB0Q29yZS9yZXBs
YXkvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5CisKKyNpZm5kZWYgSW5zcGVjdG9y
VGVzdEJhY2tlbmREaXNwYXRjaGVyc19oCisjZGVmaW5lIEluc3BlY3RvclRlc3RCYWNrZW5kRGlz
cGF0Y2hlcnNfaAorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUgIkluc3BlY3Rv
clRlc3RUeXBlQnVpbGRlcnMuaCIKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordHlwZWRlZiBT
dHJpbmcgRXJyb3JTdHJpbmc7CisKKyNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQorY2xhc3MgSW5z
cGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgeworcHVibGljOgorICAgIC8v
IE5hbWVkIGFmdGVyIHBhcmFtZXRlciAnc2NyZWVuQ29sb3InIHdoaWxlIGdlbmVyYXRpbmcgY29t
bWFuZC9ldmVudCBleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzLgorICAgIGVudW0g
Y2xhc3MgU2NyZWVuQ29sb3IgeworICAgICAgICBSZWQgPSAwLAorICAgICAgICBHcmVlbiA9IDEs
CisgICAgICAgIEJsdWUgPSAyLAorICAgIH07IC8vIGVudW0gY2xhc3MgU2NyZWVuQ29sb3IKKyAg
ICAvLyBOYW1lZCBhZnRlciBwYXJhbWV0ZXIgJ3ByaW50Q29sb3InIHdoaWxlIGdlbmVyYXRpbmcg
Y29tbWFuZC9ldmVudCBleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzLgorICAgIGVu
dW0gY2xhc3MgUHJpbnRDb2xvciB7CisgICAgICAgIEN5YW4gPSAzLAorICAgICAgICBNYWdlbnRh
ID0gNCwKKyAgICAgICAgWWVsbG93ID0gNSwKKyAgICAgICAgQmxhY2sgPSA2LAorICAgIH07IC8v
IGVudW0gY2xhc3MgUHJpbnRDb2xvcgorICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU1FMU3luY09w
dGlvbmFsUmV0dXJuVmFsdWVzKEVycm9yU3RyaW5nKiwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0
IFN0cmluZyYgaW5fcXVlcnksIFJlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheTxT
dHJpbmc+PiYgb3B0X291dF9jb2x1bW5OYW1lcywgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6T3B0
T3V0cHV0PFN0cmluZz4qIG9wdF9vdXRfbm90ZXMsIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6Ok9w
dE91dHB1dDxkb3VibGU+KiBvcHRfb3V0X3RpbWVzdGFtcCwgSW5zcGVjdG9yOjpUeXBlQnVpbGRl
cjo6T3B0T3V0cHV0PEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0Piogb3B0X291dF92YWx1ZXMs
IEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6Ok9wdE91dHB1dDxJbnNwZWN0b3I6Okluc3BlY3RvclZh
bHVlPiogb3B0X291dF9wYXlsb2FkLCBjb25zdCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpEYXRh
YmFzZTo6RGF0YWJhc2VJZCogY29uc3Qgb3B0X291dF9kYXRhYmFzZUlkLCBSZWZQdHI8SW5zcGVj
dG9yOjpUeXBlQnVpbGRlcjo6RGF0YWJhc2U6OkVycm9yPiYgb3B0X291dF9zcWxFcnJvciwgSW5z
cGVjdG9yOjpUeXBlQnVpbGRlcjo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMqIG9wdF9vdXRfc2Ny
ZWVuQ29sb3IsIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQcmlu
dENvbG9yKiBvcHRfb3V0X3ByaW50Q29sb3IpID0gMDsKKyAgICBjbGFzcyBFeGVjdXRlU1FMQXN5
bmNPcHRpb25hbFJldHVyblZhbHVlc0NhbGxiYWNrIDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZSB7CisgICAgcHVibGljOgorICAgICAg
ICBFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc0NhbGxiYWNrKFBhc3NSZWZQdHI8
SW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4sIGludCBpZCk7CisgICAgICAg
IHZvaWQgc2VuZFN1Y2Nlc3MoUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJh
eTxTdHJpbmc+PiBjb2x1bW5OYW1lcywgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6T3B0T3V0cHV0
PFN0cmluZz4qIG5vdGVzLCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8ZG91Ymxl
PiogdGltZXN0YW1wLCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8SW5zcGVjdG9y
OjpJbnNwZWN0b3JPYmplY3Q+KiB2YWx1ZXMsIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6Ok9wdE91
dHB1dDxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiogcGF5bG9hZCwgSW5zcGVjdG9yOjpUeXBl
QnVpbGRlcjo6T3B0T3V0cHV0PGludD4qIGRhdGFiYXNlSWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9y
OjpUeXBlQnVpbGRlcjo6RGF0YWJhc2U6OkVycm9yPiBzcWxFcnJvciwgSW5zcGVjdG9yOjpUeXBl
QnVpbGRlcjo6T3B0T3V0cHV0PFN0cmluZz4qIHNjcmVlbkNvbG9yLCBJbnNwZWN0b3I6OlR5cGVC
dWlsZGVyOjpPcHRPdXRwdXQ8U3RyaW5nPiogcHJpbnRDb2xvcik7CisgICAgfTsKKyAgICB2aXJ0
dWFsIHZvaWQgZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMoRXJyb3JTdHJpbmcq
LCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSwgUGFzc1JlZlB0cjxF
eGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc0NhbGxiYWNrPiBjYWxsYmFjaykgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU1FMU3luYyhFcnJvclN0cmluZyosIGludCBpbl9k
YXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5LCBSZWZQdHI8SW5zcGVjdG9yOjpUeXBl
QnVpbGRlcjo6QXJyYXk8U3RyaW5nPj4mIG91dF9jb2x1bW5OYW1lcywgU3RyaW5nKiBvdXRfbm90
ZXMsIGRvdWJsZSogb3V0X3RpbWVzdGFtcCwgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QqIG91
dF92YWx1ZXMsIEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUqIG91dF9wYXlsb2FkLCBpbnQqIG91
dF9kYXRhYmFzZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6RGF0YWJhc2U6OkVy
cm9yPiYgb3V0X3NxbEVycm9yLCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpEYXRhYmFzZTo6UHJp
bWFyeUNvbG9ycyogb3V0X3NjcmVlbkNvbG9yLCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVySGFuZGxlcjo6UHJpbnRDb2xvciogb3V0X3ByaW50Q29sb3IpID0gMDsKKyAgICBjbGFz
cyBFeGVjdXRlU1FMQXN5bmNDYWxsYmFjayA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2UgeworICAgIHB1YmxpYzoKKyAgICAgICAgRXhl
Y3V0ZVNRTEFzeW5jQ2FsbGJhY2soUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyPiwgaW50IGlkKTsKKyAgICAgICAgdm9pZCBzZW5kU3VjY2VzcyhQYXNzUmVm
UHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5PFN0cmluZz4+IGNvbHVtbk5hbWVzLCBj
b25zdCBTdHJpbmcmIG5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBJbnNwZWN0b3I6Okluc3BlY3Rv
ck9iamVjdCB2YWx1ZXMsIEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUgcGF5bG9hZCwgaW50IGRh
dGFiYXNlSWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6RGF0YWJhc2U6OkVy
cm9yPiBzcWxFcnJvciwgY29uc3QgU3RyaW5nJiBzY3JlZW5Db2xvciwgY29uc3QgU3RyaW5nJiBw
cmludENvbG9yKTsKKyAgICB9OworICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU1FMQXN5bmMoRXJy
b3JTdHJpbmcqLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSwgUGFz
c1JlZlB0cjxFeGVjdXRlU1FMQXN5bmNDYWxsYmFjaz4gY2FsbGJhY2spID0gMDsKK3Byb3RlY3Rl
ZDoKKyAgICB2aXJ0dWFsIH5JbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxl
cigpOworfTsKKyNlbmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQorCisjaWYgRU5BQkxFKFNR
TF9EQVRBQkFTRSkKK2NsYXNzIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIgZmlu
YWwgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0
Y2hlciB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yRGF0YWJhc2VC
YWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXIqLCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOworICAg
IHZpcnR1YWwgdm9pZCBkaXNwYXRjaChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBtZXRob2Qs
IFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IG1lc3NhZ2UpIG92ZXJyaWRl
OworcHJpdmF0ZToKKyAgICB2b2lkIGV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMo
bG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsK
KyAgICB2b2lkIGV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgY2FsbElk
LCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7CisgICAgdm9pZCBl
eGVjdXRlU1FMU3luYyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmpl
Y3QmIG1lc3NhZ2UpOworICAgIHZvaWQgZXhlY3V0ZVNRTEFzeW5jKGxvbmcgY2FsbElkLCBjb25z
dCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7Citwcml2YXRlOgorICAgIElu
c3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIoSW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlciosIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVy
Kik7CisgICAgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIG1fYWdl
bnQ7Cit9OworI2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0UpCisKK30gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKworI2VuZGlmIC8vICFk
ZWZpbmVkKEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnNfaCkKKyMjIyBFbmQgRmlsZTog
SW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNw
ZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5k
cy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBKYXZhU2NyaXB0
Q29yZS9yZXBsYXkvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5CisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgi
CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbC5oPgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMu
aD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3Ig
eworCisjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKK0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERp
c3BhdGNoZXJIYW5kbGVyOjp+SW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXIoKSB7IH0KKyNlbmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQorCisjaWYgRU5BQkxFKFNR
TF9EQVRBQkFTRSkKK1Bhc3NSZWZQdHI8SW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hl
cj4gSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKEluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlciwgSW5zcGVjdG9yRGF0YWJhc2VCYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcg
SW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlciwgYWdl
bnQpKTsKK30KKworSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6SW5zcGVjdG9y
RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcihJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciogYmFj
a2VuZERpc3BhdGNoZXIsIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVy
KiBhZ2VudCkKKyAgICA6IEluc3BlY3RvclN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyKGJh
Y2tlbmREaXNwYXRjaGVyKQorICAgICwgbV9hZ2VudChhZ2VudCkKK3sKKyAgICBtX2JhY2tlbmRE
aXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4oQVNDSUlMaXRlcmFsKCJEYXRh
YmFzZSIpLCB0aGlzKTsKK30KKwordm9pZCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRj
aGVyOjpkaXNwYXRjaChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBtZXNzYWdlKQoreworICAgIFJlZjxJbnNwZWN0b3JEYXRhYmFz
ZUJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKKworICAgIGlmIChtZXRob2QgPT0g
ImV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMiKQorICAgICAgICBleGVjdXRlU1FM
U3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGNhbGxJZCwgKm1lc3NhZ2UuZ2V0KCkpOworICAgIGVs
c2UgaWYgKG1ldGhvZCA9PSAiZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMiKQor
ICAgICAgICBleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhjYWxsSWQsICptZXNz
YWdlLmdldCgpKTsKKyAgICBlbHNlIGlmIChtZXRob2QgPT0gImV4ZWN1dGVTUUxTeW5jIikKKyAg
ICAgICAgZXhlY3V0ZVNRTFN5bmMoY2FsbElkLCAqbWVzc2FnZS5nZXQoKSk7CisgICAgZWxzZSBp
ZiAobWV0aG9kID09ICJleGVjdXRlU1FMQXN5bmMiKQorICAgICAgICBleGVjdXRlU1FMQXN5bmMo
Y2FsbElkLCAqbWVzc2FnZS5nZXQoKSk7CisgICAgZWxzZQorICAgICAgICBtX2JhY2tlbmREaXNw
YXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIEluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgU3RyaW5nKCInIikgKyAiRGF0YWJhc2UiICsgJy4nICsg
bWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOworfQorCit2b2lkIEluc3BlY3RvckRhdGFiYXNl
QmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9u
ZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSkKK3sKKyAgICBSZWZQdHI8
SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgp
OworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IG1lc3NhZ2Uu
Z2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicGFyYW1zIikpOworICAgIEluc3BlY3Rvck9iamVjdCog
cGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOworICAgIEluc3BlY3Rv
ckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOworICAgIGlu
dCBpbl9kYXRhYmFzZUlkID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldEludChwYXJh
bXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgiZGF0YWJhc2VJZCIpLCBudWxscHRyLCBwcm90
b2NvbEVycm9yc1B0cik7CisgICAgU3RyaW5nIGluX3F1ZXJ5ID0gSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXI6OmdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgicXVl
cnkiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnNQdHIpOworICAgIGlmIChwcm90b2NvbEVycm9y
cy0+bGVuZ3RoKCkpIHsKKyAgICAgICAgU3RyaW5nIGVycm9yTWVzc2FnZSA9IFN0cmluZzo6Zm9y
bWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAi
RGF0YWJhc2UuZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyIpOworICAgICAgICBt
X2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIEluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCBlcnJvck1lc3NhZ2UsIHByb3RvY29s
RXJyb3JzLnJlbGVhc2UoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBFcnJvclN0
cmluZyBlcnJvcjsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0
b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpB
cnJheTxTdHJpbmc+PiBvdXRfY29sdW1uTmFtZXM7CisgICAgSW5zcGVjdG9yOjpUeXBlQnVpbGRl
cjo6T3B0T3V0cHV0PFN0cmluZz4gb3V0X25vdGVzOworICAgIEluc3BlY3Rvcjo6VHlwZUJ1aWxk
ZXI6Ok9wdE91dHB1dDxkb3VibGU+IG91dF90aW1lc3RhbXA7CisgICAgSW5zcGVjdG9yOjpUeXBl
QnVpbGRlcjo6T3B0T3V0cHV0PEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBvdXRfdmFsdWVz
OworICAgIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6Ok9wdE91dHB1dDxJbnNwZWN0b3I6Okluc3Bl
Y3RvclZhbHVlPiBvdXRfcGF5bG9hZDsKKyAgICBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpEYXRh
YmFzZTo6RGF0YWJhc2VJZCBvdXRfZGF0YWJhc2VJZDsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpU
eXBlQnVpbGRlcjo6RGF0YWJhc2U6OkVycm9yPiBvdXRfc3FsRXJyb3I7CisgICAgSW5zcGVjdG9y
OjpUeXBlQnVpbGRlcjo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMgb3V0X3NjcmVlbkNvbG9yOwor
ICAgIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQcmludENvbG9y
IG91dF9wcmludENvbG9yOworICAgIG1fYWdlbnQtPmV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1
cm5WYWx1ZXMoJmVycm9yLCBpbl9kYXRhYmFzZUlkLCBpbl9xdWVyeSwgb3V0X2NvbHVtbk5hbWVz
LCAmb3V0X25vdGVzLCAmb3V0X3RpbWVzdGFtcCwgb3V0X3ZhbHVlcywgJm91dF9wYXlsb2FkLCAm
b3V0X2RhdGFiYXNlSWQsIG91dF9zcWxFcnJvciwgJm91dF9zY3JlZW5Db2xvciwgJm91dF9wcmlu
dENvbG9yKTsKKworICAgIGlmICghZXJyb3IubGVuZ3RoKCkpIHsKKyAgICAgICAgaWYgKG91dF9j
b2x1bW5OYW1lcykKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0VmFsdWUoQVNDSUlMaXRlcmFsKCJj
b2x1bW5OYW1lcyIpLCBvdXRfY29sdW1uTmFtZXMpOworICAgICAgICBpZiAob3V0X25vdGVzLmlz
QXNzaWduZWQoKSkKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgi
bm90ZXMiKSwgb3V0X25vdGVzLmdldFZhbHVlKCkpOworICAgICAgICBpZiAob3V0X3RpbWVzdGFt
cC5pc0Fzc2lnbmVkKCkpCisgICAgICAgICAgICByZXN1bHQtPnNldE51bWJlcihBU0NJSUxpdGVy
YWwoInRpbWVzdGFtcCIpLCBvdXRfdGltZXN0YW1wLmdldFZhbHVlKCkpOworICAgICAgICBpZiAo
b3V0X3ZhbHVlcy5pc0Fzc2lnbmVkKCkpCisgICAgICAgICAgICByZXN1bHQtPnNldE9iamVjdChB
U0NJSUxpdGVyYWwoInZhbHVlcyIpLCBvdXRfdmFsdWVzLmdldFZhbHVlKCkpOworICAgICAgICBp
ZiAob3V0X3BheWxvYWQuaXNBc3NpZ25lZCgpKQorICAgICAgICAgICAgcmVzdWx0LT5zZXRWYWx1
ZShBU0NJSUxpdGVyYWwoInBheWxvYWQiKSwgb3V0X3BheWxvYWQuZ2V0VmFsdWUoKSk7CisgICAg
ICAgIGlmIChvdXRfZGF0YWJhc2VJZC5pc0Fzc2lnbmVkKCkpCisgICAgICAgICAgICByZXN1bHQt
PnNldE51bWJlcihBU0NJSUxpdGVyYWwoImRhdGFiYXNlSWQiKSwgb3V0X2RhdGFiYXNlSWQuZ2V0
VmFsdWUoKSk7CisgICAgICAgIGlmIChvdXRfc3FsRXJyb3IpCisgICAgICAgICAgICByZXN1bHQt
PnNldFZhbHVlKEFTQ0lJTGl0ZXJhbCgic3FsRXJyb3IiKSwgb3V0X3NxbEVycm9yKTsKKyAgICAg
ICAgaWYgKG91dF9zY3JlZW5Db2xvci5pc0Fzc2lnbmVkKCkpCisgICAgICAgICAgICByZXN1bHQt
PnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInNjcmVlbkNvbG9yIiksIG91dF9zY3JlZW5Db2xvci5n
ZXRWYWx1ZSgpKTsKKyAgICAgICAgaWYgKG91dF9wcmludENvbG9yLmlzQXNzaWduZWQoKSkKKyAg
ICAgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgicHJpbnRDb2xvciIpLCBv
dXRfcHJpbnRDb2xvci5nZXRWYWx1ZSgpKTsKKyAgICB9CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgZXJyb3IpOworfQorCitJ
bnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5j
T3B0aW9uYWxSZXR1cm5WYWx1ZXNDYWxsYmFjazo6RXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1
cm5WYWx1ZXNDYWxsYmFjayhQYXNzUmVmUHRyPEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiBi
YWNrZW5kRGlzcGF0Y2hlciwgaW50IGlkKSA6IEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXI6OkNhbGxiYWNrQmFzZShiYWNrZW5kRGlzcGF0Y2hlciwgaWQpIHsgfQorCit2b2lk
IEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5
bmNPcHRpb25hbFJldHVyblZhbHVlc0NhbGxiYWNrOjpzZW5kU3VjY2VzcyhQYXNzUmVmUHRyPElu
c3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5PFN0cmluZz4+IGNvbHVtbk5hbWVzLCBJbnNwZWN0
b3I6OlR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8U3RyaW5nPiogbm90ZXMsIEluc3BlY3Rvcjo6VHlw
ZUJ1aWxkZXI6Ok9wdE91dHB1dDxkb3VibGU+KiB0aW1lc3RhbXAsIEluc3BlY3Rvcjo6VHlwZUJ1
aWxkZXI6Ok9wdE91dHB1dDxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4qIHZhbHVlcywgSW5z
cGVjdG9yOjpUeXBlQnVpbGRlcjo6T3B0T3V0cHV0PEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+
KiBwYXlsb2FkLCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8aW50PiogZGF0YWJh
c2VJZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpEYXRhYmFzZTo6RXJyb3I+
IHNxbEVycm9yLCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8U3RyaW5nPiogc2Ny
ZWVuQ29sb3IsIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6Ok9wdE91dHB1dDxTdHJpbmc+KiBwcmlu
dENvbG9yKQoreworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGpzb25NZXNzYWdlID0gSW5z
cGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBpZiAoY29sdW1uTmFtZXMpCisgICAgICAgIGpz
b25NZXNzYWdlLT5zZXRWYWx1ZShBU0NJSUxpdGVyYWwoImNvbHVtbk5hbWVzIiksIGNvbHVtbk5h
bWVzKTsKKyAgICBpZiAobm90ZXMuaXNBc3NpZ25lZCgpKQorICAgICAgICBqc29uTWVzc2FnZS0+
c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgibm90ZXMiKSwgbm90ZXMuZ2V0VmFsdWUoKSk7CisgICAg
aWYgKHRpbWVzdGFtcC5pc0Fzc2lnbmVkKCkpCisgICAgICAgIGpzb25NZXNzYWdlLT5zZXROdW1i
ZXIoQVNDSUlMaXRlcmFsKCJ0aW1lc3RhbXAiKSwgdGltZXN0YW1wLmdldFZhbHVlKCkpOworICAg
IGlmICh2YWx1ZXMuaXNBc3NpZ25lZCgpKQorICAgICAgICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0
KEFTQ0lJTGl0ZXJhbCgidmFsdWVzIiksIHZhbHVlcy5nZXRWYWx1ZSgpKTsKKyAgICBpZiAocGF5
bG9hZC5pc0Fzc2lnbmVkKCkpCisgICAgICAgIGpzb25NZXNzYWdlLT5zZXRWYWx1ZShBU0NJSUxp
dGVyYWwoInBheWxvYWQiKSwgcGF5bG9hZC5nZXRWYWx1ZSgpKTsKKyAgICBpZiAoZGF0YWJhc2VJ
ZC5pc0Fzc2lnbmVkKCkpCisgICAgICAgIGpzb25NZXNzYWdlLT5zZXROdW1iZXIoQVNDSUlMaXRl
cmFsKCJkYXRhYmFzZUlkIiksIGRhdGFiYXNlSWQuZ2V0VmFsdWUoKSk7CisgICAgaWYgKHNxbEVy
cm9yKQorICAgICAgICBqc29uTWVzc2FnZS0+c2V0VmFsdWUoQVNDSUlMaXRlcmFsKCJzcWxFcnJv
ciIpLCBzcWxFcnJvcik7CisgICAgaWYgKHNjcmVlbkNvbG9yLmlzQXNzaWduZWQoKSkKKyAgICAg
ICAganNvbk1lc3NhZ2UtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInNjcmVlbkNvbG9yIiksIHNj
cmVlbkNvbG9yLmdldFZhbHVlKCkpOworICAgIGlmIChwcmludENvbG9yLmlzQXNzaWduZWQoKSkK
KyAgICAgICAganNvbk1lc3NhZ2UtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInByaW50Q29sb3Ii
KSwgcHJpbnRDb2xvci5nZXRWYWx1ZSgpKTsKKyAgICBzZW5kSWZBY3RpdmUoanNvbk1lc3NhZ2Us
IEVycm9yU3RyaW5nKCkpOworfQorCit2b2lkIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3Bh
dGNoZXI6OmV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgY2FsbElkLCBj
b25zdCBJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpCit7CisgICAgUmVmUHRyPEluc3BlY3RvckFy
cmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKKyAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSBtZXNzYWdlLmdldE9iamVjdChB
U0NJSUxpdGVyYWwoInBhcmFtcyIpKTsKKyAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRh
aW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKKyAgICBJbnNwZWN0b3JBcnJheSogcHJv
dG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKKyAgICBpbnQgaW5fZGF0YWJh
c2VJZCA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRJbnQocGFyYW1zQ29udGFpbmVy
UHRyLCBBU0NJSUxpdGVyYWwoImRhdGFiYXNlSWQiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnNQ
dHIpOworICAgIFN0cmluZyBpbl9xdWVyeSA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpn
ZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoInF1ZXJ5IiksIG51bGxw
dHIsIHByb3RvY29sRXJyb3JzUHRyKTsKKyAgICBpZiAocHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgp
KSB7CisgICAgICAgIFN0cmluZyBlcnJvck1lc3NhZ2UgPSBTdHJpbmc6OmZvcm1hdCgiU29tZSBh
cmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkRhdGFiYXNlLmV4
ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzIik7CisgICAgICAgIG1fYmFja2VuZERp
c3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXI6OkludmFsaWRQYXJhbXMsIGVycm9yTWVzc2FnZSwgcHJvdG9jb2xFcnJvcnMucmVs
ZWFzZSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEVycm9yU3RyaW5nIGVycm9y
OworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6
Y3JlYXRlKCk7CisgICAgUmVmUHRyPEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc0NhbGxiYWNrPiBjYWxs
YmFjayA9IGFkb3B0UmVmKG5ldyBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFu
ZGxlcjo6RXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNDYWxsYmFjayhtX2JhY2tl
bmREaXNwYXRjaGVyLGNhbGxJZCkpOworICAgIG1fYWdlbnQtPmV4ZWN1dGVTUUxBc3luY09wdGlv
bmFsUmV0dXJuVmFsdWVzKCZlcnJvciwgaW5fZGF0YWJhc2VJZCwgaW5fcXVlcnksIGNhbGxiYWNr
KTsKKworICAgIGlmIChlcnJvci5sZW5ndGgoKSkgeworICAgICAgICBjYWxsYmFjay0+ZGlzYWJs
ZSgpOworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKCZj
YWxsSWQsIEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9y
LCBlcnJvcik7CisgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKK3ZvaWQgSW5zcGVjdG9yRGF0
YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTFN5bmMobG9uZyBjYWxsSWQsIGNvbnN0
IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSkKK3sKKyAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+
IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IG1lc3NhZ2UuZ2V0T2JqZWN0KEFTQ0lJ
TGl0ZXJhbCgicGFyYW1zIikpOworICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVy
UHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOworICAgIEluc3BlY3RvckFycmF5KiBwcm90b2Nv
bEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOworICAgIGludCBpbl9kYXRhYmFzZUlk
ID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldEludChwYXJhbXNDb250YWluZXJQdHIs
IEFTQ0lJTGl0ZXJhbCgiZGF0YWJhc2VJZCIpLCBudWxscHRyLCBwcm90b2NvbEVycm9yc1B0cik7
CisgICAgU3RyaW5nIGluX3F1ZXJ5ID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldFN0
cmluZyhwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgicXVlcnkiKSwgbnVsbHB0ciwg
cHJvdG9jb2xFcnJvcnNQdHIpOworICAgIGlmIChwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsK
KyAgICAgICAgU3RyaW5nIGVycm9yTWVzc2FnZSA9IFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3Vt
ZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiRGF0YWJhc2UuZXhlY3V0
ZVNRTFN5bmMiKTsKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xF
cnJvcigmY2FsbElkLCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFtcywg
ZXJyb3JNZXNzYWdlLCBwcm90b2NvbEVycm9ycy5yZWxlYXNlKCkpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgRXJyb3JTdHJpbmcgZXJyb3I7CisgICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8SW5z
cGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk8U3RyaW5nPj4gb3V0X2NvbHVtbk5hbWVzOworICAg
IFN0cmluZyBvdXRfbm90ZXM7CisgICAgZG91YmxlIG91dF90aW1lc3RhbXA7CisgICAgSW5zcGVj
dG9yOjpJbnNwZWN0b3JPYmplY3Qgb3V0X3ZhbHVlczsKKyAgICBJbnNwZWN0b3I6Okluc3BlY3Rv
clZhbHVlIG91dF9wYXlsb2FkOworICAgIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkRhdGFiYXNl
OjpEYXRhYmFzZUlkIG91dF9kYXRhYmFzZUlkOworICAgIFJlZlB0cjxJbnNwZWN0b3I6OlR5cGVC
dWlsZGVyOjpEYXRhYmFzZTo6RXJyb3I+IG91dF9zcWxFcnJvcjsKKyAgICBJbnNwZWN0b3I6OlR5
cGVCdWlsZGVyOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyBvdXRfc2NyZWVuQ29sb3I7CisgICAg
SW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3Igb3V0
X3ByaW50Q29sb3I7CisgICAgbV9hZ2VudC0+ZXhlY3V0ZVNRTFN5bmMoJmVycm9yLCBpbl9kYXRh
YmFzZUlkLCBpbl9xdWVyeSwgb3V0X2NvbHVtbk5hbWVzLCAmb3V0X25vdGVzLCAmb3V0X3RpbWVz
dGFtcCwgb3V0X3ZhbHVlcywgJm91dF9wYXlsb2FkLCAmb3V0X2RhdGFiYXNlSWQsIG91dF9zcWxF
cnJvciwgJm91dF9zY3JlZW5Db2xvciwgJm91dF9wcmludENvbG9yKTsKKworICAgIGlmICghZXJy
b3IubGVuZ3RoKCkpIHsKKyAgICAgICAgcmVzdWx0LT5zZXRWYWx1ZShBU0NJSUxpdGVyYWwoImNv
bHVtbk5hbWVzIiksIG91dF9jb2x1bW5OYW1lcyk7CisgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5n
KEFTQ0lJTGl0ZXJhbCgibm90ZXMiKSwgb3V0X25vdGVzKTsKKyAgICAgICAgcmVzdWx0LT5zZXRO
dW1iZXIoQVNDSUlMaXRlcmFsKCJ0aW1lc3RhbXAiKSwgb3V0X3RpbWVzdGFtcCk7CisgICAgICAg
IHJlc3VsdC0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgidmFsdWVzIiksIG91dF92YWx1ZXMpOwor
ICAgICAgICByZXN1bHQtPnNldFZhbHVlKEFTQ0lJTGl0ZXJhbCgicGF5bG9hZCIpLCBvdXRfcGF5
bG9hZCk7CisgICAgICAgIHJlc3VsdC0+c2V0TnVtYmVyKEFTQ0lJTGl0ZXJhbCgiZGF0YWJhc2VJ
ZCIpLCBvdXRfZGF0YWJhc2VJZCk7CisgICAgICAgIHJlc3VsdC0+c2V0VmFsdWUoQVNDSUlMaXRl
cmFsKCJzcWxFcnJvciIpLCBvdXRfc3FsRXJyb3IpOworICAgICAgICByZXN1bHQtPnNldFN0cmlu
ZyhBU0NJSUxpdGVyYWwoInNjcmVlbkNvbG9yIiksIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6Omdl
dFRlc3RFbnVtQ29uc3RhbnRWYWx1ZShvdXRfc2NyZWVuQ29sb3IpKTsKKyAgICAgICAgcmVzdWx0
LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJwcmludENvbG9yIiksIEluc3BlY3Rvcjo6VHlwZUJ1
aWxkZXI6OmdldFRlc3RFbnVtQ29uc3RhbnRWYWx1ZShvdXRfcHJpbnRDb2xvcikpOworICAgIH0K
KyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVs
ZWFzZSgpLCBlcnJvcik7Cit9CisKK0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNDYWxsYmFjazo6RXhlY3V0ZVNRTEFzeW5jQ2FsbGJhY2so
UGFzc1JlZlB0cjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4gYmFja2VuZERpc3BhdGNoZXIs
IGludCBpZCkgOiBJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpDYWxsYmFj
a0Jhc2UoYmFja2VuZERpc3BhdGNoZXIsIGlkKSB7IH0KKwordm9pZCBJbnNwZWN0b3JEYXRhYmFz
ZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jQ2FsbGJhY2s6OnNlbmRT
dWNjZXNzKFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk8U3RyaW5nPj4g
Y29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgbm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yT2JqZWN0IHZhbHVlcywgSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSBw
YXlsb2FkLCBpbnQgZGF0YWJhc2VJZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVy
OjpEYXRhYmFzZTo6RXJyb3I+IHNxbEVycm9yLCBjb25zdCBTdHJpbmcmIHNjcmVlbkNvbG9yLCBj
b25zdCBTdHJpbmcmIHByaW50Q29sb3IpCit7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
anNvbk1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIGpzb25NZXNzYWdl
LT5zZXRWYWx1ZShBU0NJSUxpdGVyYWwoImNvbHVtbk5hbWVzIiksIGNvbHVtbk5hbWVzKTsKKyAg
ICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgibm90ZXMiKSwgbm90ZXMpOwor
ICAgIGpzb25NZXNzYWdlLT5zZXROdW1iZXIoQVNDSUlMaXRlcmFsKCJ0aW1lc3RhbXAiKSwgdGlt
ZXN0YW1wKTsKKyAgICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgidmFsdWVz
IiksIHZhbHVlcyk7CisgICAganNvbk1lc3NhZ2UtPnNldFZhbHVlKEFTQ0lJTGl0ZXJhbCgicGF5
bG9hZCIpLCBwYXlsb2FkKTsKKyAgICBqc29uTWVzc2FnZS0+c2V0TnVtYmVyKEFTQ0lJTGl0ZXJh
bCgiZGF0YWJhc2VJZCIpLCBkYXRhYmFzZUlkKTsKKyAgICBqc29uTWVzc2FnZS0+c2V0VmFsdWUo
QVNDSUlMaXRlcmFsKCJzcWxFcnJvciIpLCBzcWxFcnJvcik7CisgICAganNvbk1lc3NhZ2UtPnNl
dFN0cmluZyhBU0NJSUxpdGVyYWwoInNjcmVlbkNvbG9yIiksIEluc3BlY3Rvcjo6VHlwZUJ1aWxk
ZXI6OmdldFRlc3RFbnVtQ29uc3RhbnRWYWx1ZShzY3JlZW5Db2xvcikpOworICAgIGpzb25NZXNz
YWdlLT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJwcmludENvbG9yIiksIEluc3BlY3Rvcjo6VHlw
ZUJ1aWxkZXI6OmdldFRlc3RFbnVtQ29uc3RhbnRWYWx1ZShwcmludENvbG9yKSk7CisgICAgc2Vu
ZElmQWN0aXZlKGpzb25NZXNzYWdlLCBFcnJvclN0cmluZygpKTsKK30KKwordm9pZCBJbnNwZWN0
b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FMQXN5bmMobG9uZyBjYWxsSWQs
IGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSkKK3sKKyAgICBSZWZQdHI8SW5zcGVjdG9y
QXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOworICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IG1lc3NhZ2UuZ2V0T2JqZWN0
KEFTQ0lJTGl0ZXJhbCgicGFyYW1zIikpOworICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29u
dGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOworICAgIEluc3BlY3RvckFycmF5KiBw
cm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOworICAgIGludCBpbl9kYXRh
YmFzZUlkID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldEludChwYXJhbXNDb250YWlu
ZXJQdHIsIEFTQ0lJTGl0ZXJhbCgiZGF0YWJhc2VJZCIpLCBudWxscHRyLCBwcm90b2NvbEVycm9y
c1B0cik7CisgICAgU3RyaW5nIGluX3F1ZXJ5ID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6
OmdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgicXVlcnkiKSwgbnVs
bHB0ciwgcHJvdG9jb2xFcnJvcnNQdHIpOworICAgIGlmIChwcm90b2NvbEVycm9ycy0+bGVuZ3Ro
KCkpIHsKKyAgICAgICAgU3RyaW5nIGVycm9yTWVzc2FnZSA9IFN0cmluZzo6Zm9ybWF0KCJTb21l
IGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiRGF0YWJhc2Uu
ZXhlY3V0ZVNRTEFzeW5jIik7CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFBy
b3RvY29sRXJyb3IoJmNhbGxJZCwgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkludmFsaWRQ
YXJhbXMsIGVycm9yTWVzc2FnZSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIEVycm9yU3RyaW5nIGVycm9yOworICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVm
UHRyPEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FM
QXN5bmNDYWxsYmFjaz4gY2FsbGJhY2sgPSBhZG9wdFJlZihuZXcgSW5zcGVjdG9yRGF0YWJhc2VC
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkV4ZWN1dGVTUUxBc3luY0NhbGxiYWNrKG1fYmFja2Vu
ZERpc3BhdGNoZXIsY2FsbElkKSk7CisgICAgbV9hZ2VudC0+ZXhlY3V0ZVNRTEFzeW5jKCZlcnJv
ciwgaW5fZGF0YWJhc2VJZCwgaW5fcXVlcnksIGNhbGxiYWNrKTsKKworICAgIGlmIChlcnJvci5s
ZW5ndGgoKSkgeworICAgICAgICBjYWxsYmFjay0+ZGlzYWJsZSgpOworICAgICAgICBtX2JhY2tl
bmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIEluc3BlY3Rvcjo6SW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CisgICAgICAgIHJl
dHVybjsKKyAgICB9Cit9CisjZW5kaWYgLy8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKKworfSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorCisjIyMg
RW5kIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdp
biBGaWxlOiBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIGNvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6
IEphdmFTY3JpcHRDb3JlL3JlcGxheS9zY3JpcHRzL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkK
KworI2lmbmRlZiBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVyc19oCisjZGVmaW5lIElu
c3BlY3RvclRlc3RGcm9udGVuZERpc3BhdGNoZXJzX2gKKworI2lmIEVOQUJMRShJTlNQRUNUT1Ip
CisKKyNpbmNsdWRlICJJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmgiCisjaW5jbHVkZSA8aW5z
cGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oPgorI2luY2x1ZGUgPGluc3BlY3Rvci9J
bnNwZWN0b3JWYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKK30g
Ly8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKwor
I2VuZGlmIC8vICFkZWZpbmVkKEluc3BlY3RvclRlc3RGcm9udGVuZERpc3BhdGNoZXJzX2gpCisj
IyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKworIyMjIEJl
Z2luIEZpbGU6IEluc3BlY3RvclRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBjb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uCisvLyBieSB0aGUgc2Ny
aXB0OiBKYXZhU2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySW5zcGVjdG9y
LnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JUZXN0RnJvbnRl
bmREaXNwYXRjaGVycy5oIgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUgPHd0
Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK30gLy8gbmFtZXNw
YWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKworIyMjIEVuZCBG
aWxlOiBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZp
bGU6IEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5k
cy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBKYXZhU2NyaXB0
Q29yZS9yZXBsYXkvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5CisKKyNpZm5kZWYg
SW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVyc19oCisjZGVmaW5lIEluc3BlY3RvclRlc3RUeXBlQnVp
bGRlcnNfaAorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUgPGluc3BlY3Rvci9J
bnNwZWN0b3JKU1R5cGVCdWlsZGVycy5oPgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JU
eXBlQnVpbGRlci5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3Rm
L1Bhc3NSZWZQdHIuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCituYW1lc3BhY2Ug
VHlwZUJ1aWxkZXIgeworCisvLyBGb3J3YXJkIGRlY2xhcmF0aW9ucy4KKyNpZiBFTkFCTEUoU1FM
X0RBVEFCQVNFKQorbmFtZXNwYWNlIERhdGFiYXNlIHsKK2NsYXNzIEVycm9yOworZW51bSBjbGFz
cyBQcmltYXJ5Q29sb3JzOworfSAvLyBEYXRhYmFzZQorI2VuZGlmIC8vIEVOQUJMRShTUUxfREFU
QUJBU0UpCisvLyBFbmQgb2YgZm9yd2FyZCBkZWNsYXJhdGlvbnMuCisKKworLy8gVHlwZWRlZnMu
CisjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKK25hbWVzcGFjZSBEYXRhYmFzZSB7CisvKiBVbmlx
dWUgaWRlbnRpZmllciBvZiBEYXRhYmFzZSBvYmplY3QuICovCit0eXBlZGVmIGludCBEYXRhYmFz
ZUlkOworfSAvLyBEYXRhYmFzZQorI2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0UpCisvLyBF
bmQgb2YgdHlwZWRlZnMuCisKK1N0cmluZyBnZXRUZXN0RW51bUNvbnN0YW50VmFsdWUoaW50IGNv
ZGUpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBTdHJpbmcgZ2V0VGVzdEVudW1Db25zdGFudFZh
bHVlKFQgZW51bVZhbHVlKQoreworICAgIHJldHVybiBnZXRUZXN0RW51bUNvbnN0YW50VmFsdWUo
c3RhdGljX2Nhc3Q8aW50PihlbnVtVmFsdWUpKTsKK30KKworI2lmIEVOQUJMRShTUUxfREFUQUJB
U0UpCituYW1lc3BhY2UgRGF0YWJhc2UgeworLyogICovCitlbnVtIGNsYXNzIFByaW1hcnlDb2xv
cnMgeworICAgIFJlZCA9IDAsCisgICAgR3JlZW4gPSAxLAorICAgIEJsdWUgPSAyLAorfTsgLy8g
ZW51bSBjbGFzcyBQcmltYXJ5Q29sb3JzCisvKiBEYXRhYmFzZSBlcnJvci4gKi8KK2NsYXNzIEVy
cm9yIDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0QmFzZSB7CitwdWJsaWM6Cisg
ICAgZW51bSB7CisgICAgICAgIE5vRmllbGRzU2V0ID0gMCwKKyAgICAgICAgTWVzc2FnZVNldCA9
IDEgPDwgMCwKKyAgICAgICAgQ29kZVNldCA9IDEgPDwgMSwKKyAgICAgICAgQWxsRmllbGRzU2V0
ID0gKE1lc3NhZ2VTZXQgfCBDb2RlU2V0KQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTxpbnQgU1RB
VEU+CisgICAgY2xhc3MgQnVpbGRlciB7CisgICAgcHJpdmF0ZToKKyAgICAgICAgUmVmUHRyPElu
c3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKKworICAgICAgICB0ZW1wbGF0ZTxp
bnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+
Kj4odGhpcyk7CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8LypFcnJv
ciovSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IHB0cikKKyAgICAgICAgeworICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9p
bl9ub25faW5pdF9zdGF0ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKKyAgICAgICAg
fQorICAgICAgICBmcmllbmQgY2xhc3MgRXJyb3I7CisgICAgcHVibGljOgorCisgICAgICAgIEJ1
aWxkZXI8U1RBVEUgfCBNZXNzYWdlU2V0PiYgc2V0TWVzc2FnZShjb25zdCBTdHJpbmcmIHZhbHVl
KQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTWVzc2Fn
ZVNldCksIHByb3BlcnR5X21lc3NhZ2VfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1
bHQtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoIm1lc3NhZ2UiKSwgdmFsdWUpOworICAgICAgICAg
ICAgcmV0dXJuIGNhc3RTdGF0ZTxNZXNzYWdlU2V0PigpOworICAgICAgICB9CisKKyAgICAgICAg
QnVpbGRlcjxTVEFURSB8IENvZGVTZXQ+JiBzZXRDb2RlKGludCB2YWx1ZSkKKyAgICAgICAgewor
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIENvZGVTZXQpLCBwcm9wZXJ0eV9j
b2RlX2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoQVNDSUlM
aXRlcmFsKCJjb2RlIiksIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q29k
ZVNldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIG9wZXJhdG9yIFJlZlB0cjxFcnJvcj4mICgp
CisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxk
c1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChz
aXplb2YoRXJyb3IpID09IHNpemVvZihJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCksIGNhbm5v
dF9jYXN0KTsKKyAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8RXJy
b3I+Kj4oJm1fcmVzdWx0KTsKKyAgICAgICAgfQorCisgICAgICAgIFBhc3NSZWZQdHI8RXJyb3I+
IHJlbGVhc2UoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gUmVmUHRyPEVycm9yPigq
dGhpcykucmVsZWFzZSgpOworICAgICAgICB9CisgICAgfTsKKworICAgIC8qCisgICAgICogU3lu
dGhldGljIGNvbnN0cnVjdG9yOgorICAgICAqIFJlZlB0cjxFcnJvcj4gcmVzdWx0ID0gRXJyb3I6
OmNyZWF0ZSgpCisgICAgICogICAgIC5zZXRNZXNzYWdlKC4uLikKKyAgICAgKiAgICAgLnNldENv
ZGUoLi4uKTsKKyAgICAgKi8KKyAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRl
KCkKKyAgICB7CisgICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihJbnNwZWN0b3I6
Okluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkpOworICAgIH0KKyAgICB0eXBlZGVmIEluc3BlY3Rv
cjo6VHlwZUJ1aWxkZXI6OlN0cnVjdEl0ZW1UcmFpdHMgSXRlbVRyYWl0czsKK307CisKK30gLy8g
RGF0YWJhc2UKKyNlbmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQorCisKKworfSAvLyBuYW1l
c3BhY2UgVHlwZUJ1aWxkZXIKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAv
LyBFTkFCTEUoSU5TUEVDVE9SKQorCisjZW5kaWYgLy8gIWRlZmluZWQoSW5zcGVjdG9yVGVzdFR5
cGVCdWlsZGVyc19oKQorIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmgK
KworIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuY3BwCisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24KKy8vIGJ5IHRoZSBz
Y3JpcHQ6IEphdmFTY3JpcHRDb3JlL3JlcGxheS9zY3JpcHRzL0NvZGVHZW5lcmF0b3JJbnNwZWN0
b3IucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkluc3BlY3RvclRlc3RUeXBl
QnVpbGRlcnMuaCIKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCituYW1lc3BhY2UgVHlwZUJ1
aWxkZXIgeworCitzdGF0aWMgY29uc3QgY2hhciogY29uc3QgZW51bV9jb25zdGFudF92YWx1ZXNb
XSA9IHsKKyAgICAicmVkIiwKKyAgICAiZ3JlZW4iLAorICAgICJibHVlIiwKKyAgICAiY3lhbiIs
CisgICAgIm1hZ2VudGEiLAorICAgICJ5ZWxsb3ciLAorICAgICJibGFjayIsCit9OworCitTdHJp
bmcgZ2V0VGVzdEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKSB7CisgICAgcmV0dXJuIGVudW1f
Y29uc3RhbnRfdmFsdWVzW2NvZGVdOworfQorCisKKworfSAvLyBuYW1lc3BhY2UgVHlwZUJ1aWxk
ZXIKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVD
VE9SKQorCisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuY3BwCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhw
ZWN0ZWQvY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24t
cmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4
cGVjdGVkL2NvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29u
LXJlc3VsdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4xOTllNzdjN2U2MGUzZDczYTAxNGJjZDhkYzM4YjNkZjk0YTRm
MmYyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2NvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4t
cGFyYW1ldGVycy5qc29uLXJlc3VsdApAQCAtMCwwICsxLDYzMSBAQAorIyMjIEJlZ2luIEZpbGU6
IEluc3BlY3RvclRlc3RCYWNrZW5kQ29tbWFuZHMuanMKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFu
ZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBz
Y3JpcHQ6IEphdmFTY3JpcHRDb3JlL3JlcGxheS9zY3JpcHRzL0NvZGVHZW5lcmF0b3JJbnNwZWN0
b3IucHkKKworLy8gRGF0YWJhc2UuCitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRW51bSgiRGF0
YWJhc2UuUHJpbWFyeUNvbG9ycyIsIHtSZWQ6ICJyZWQiLCBHcmVlbjogImdyZWVuIiwgQmx1ZTog
ImJsdWUifSk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiRGF0YWJhc2UuZXhl
Y3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyIsIFt7Im5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlw
ZSI6ICJvYmplY3QiLCAib3B0aW9uYWwiOiB0cnVlfSwgeyJuYW1lIjogIm5vdGVzIiwgInR5cGUi
OiAic3RyaW5nIiwgIm9wdGlvbmFsIjogdHJ1ZX0sIHsibmFtZSI6ICJ0aW1lc3RhbXAiLCAidHlw
ZSI6ICJudW1iZXIiLCAib3B0aW9uYWwiOiB0cnVlfSwgeyJuYW1lIjogInZhbHVlcyIsICJ0eXBl
IjogIm9iamVjdCIsICJvcHRpb25hbCI6IHRydWV9LCB7Im5hbWUiOiAicGF5bG9hZCIsICJ0eXBl
IjogIm9iamVjdCIsICJvcHRpb25hbCI6IHRydWV9LCB7Im5hbWUiOiAiZGF0YWJhc2VJZCIsICJ0
eXBlIjogIm51bWJlciIsICJvcHRpb25hbCI6IHRydWV9LCB7Im5hbWUiOiAic3FsRXJyb3IiLCAi
dHlwZSI6ICJvYmplY3QiLCAib3B0aW9uYWwiOiB0cnVlfSwgeyJuYW1lIjogInNjcmVlbkNvbG9y
IiwgInR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjogdHJ1ZX0sIHsibmFtZSI6ICJwcmludENv
bG9yIiwgInR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjogdHJ1ZX1dLCBbImNvbHVtbk5hbWVz
IiwgIm5vdGVzIiwgInRpbWVzdGFtcCIsICJ2YWx1ZXMiLCAicGF5bG9hZCIsICJkYXRhYmFzZUlk
IiwgInNxbEVycm9yIiwgInNjcmVlbkNvbG9yIiwgInByaW50Q29sb3IiXSk7CitJbnNwZWN0b3JC
YWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiRGF0YWJhc2UuZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0
ZXJzIiwgW3sibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogIm9iamVjdCIsICJvcHRpb25h
bCI6IGZhbHNlfSwgeyJuYW1lIjogIm5vdGVzIiwgInR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFs
IjogZmFsc2V9LCB7Im5hbWUiOiAidGltZXN0YW1wIiwgInR5cGUiOiAibnVtYmVyIiwgIm9wdGlv
bmFsIjogZmFsc2V9LCB7Im5hbWUiOiAidmFsdWVzIiwgInR5cGUiOiAib2JqZWN0IiwgIm9wdGlv
bmFsIjogZmFsc2V9LCB7Im5hbWUiOiAicGF5bG9hZCIsICJ0eXBlIjogIm9iamVjdCIsICJvcHRp
b25hbCI6IGZhbHNlfSwgeyJuYW1lIjogImRhdGFiYXNlSWQiLCAidHlwZSI6ICJudW1iZXIiLCAi
b3B0aW9uYWwiOiBmYWxzZX0sIHsibmFtZSI6ICJzcWxFcnJvciIsICJ0eXBlIjogIm9iamVjdCIs
ICJvcHRpb25hbCI6IGZhbHNlfSwgeyJuYW1lIjogInNjcmVlbkNvbG9yIiwgInR5cGUiOiAic3Ry
aW5nIiwgIm9wdGlvbmFsIjogZmFsc2V9LCB7Im5hbWUiOiAicHJpbnRDb2xvciIsICJ0eXBlIjog
InN0cmluZyIsICJvcHRpb25hbCI6IGZhbHNlfV0sIFsiY29sdW1uTmFtZXMiLCAibm90ZXMiLCAi
dGltZXN0YW1wIiwgInZhbHVlcyIsICJwYXlsb2FkIiwgImRhdGFiYXNlSWQiLCAic3FsRXJyb3Ii
LCAic2NyZWVuQ29sb3IiLCAicHJpbnRDb2xvciJdKTsKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9y
VGVzdEJhY2tlbmRDb21tYW5kcy5qcworCisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdEJh
Y2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtb3B0aW9u
YWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBKYXZhU2Ny
aXB0Q29yZS9yZXBsYXkvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5CisKKyNpZm5k
ZWYgSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVyc19oCisjZGVmaW5lIEluc3BlY3RvclRl
c3RCYWNrZW5kRGlzcGF0Y2hlcnNfaAorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1
ZGUgIkluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuaCIKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsK
KwordHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKKyNpZiBFTkFCTEUoU1FMX0RBVEFCQVNF
KQorY2xhc3MgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgeworcHVi
bGljOgorICAgIC8vIE5hbWVkIGFmdGVyIHBhcmFtZXRlciAnc2NyZWVuQ29sb3InIHdoaWxlIGdl
bmVyYXRpbmcgY29tbWFuZC9ldmVudCBleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzLgorICAg
IGVudW0gY2xhc3MgU2NyZWVuQ29sb3IgeworICAgICAgICBSZWQgPSAwLAorICAgICAgICBHcmVl
biA9IDEsCisgICAgICAgIEJsdWUgPSAyLAorICAgIH07IC8vIGVudW0gY2xhc3MgU2NyZWVuQ29s
b3IKKyAgICAvLyBOYW1lZCBhZnRlciBwYXJhbWV0ZXIgJ3ByaW50Q29sb3InIHdoaWxlIGdlbmVy
YXRpbmcgY29tbWFuZC9ldmVudCBleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzLgorICAgIGVu
dW0gY2xhc3MgUHJpbnRDb2xvciB7CisgICAgICAgIEN5YW4gPSAzLAorICAgICAgICBNYWdlbnRh
ID0gNCwKKyAgICAgICAgWWVsbG93ID0gNSwKKyAgICAgICAgQmxhY2sgPSA2LAorICAgIH07IC8v
IGVudW0gY2xhc3MgUHJpbnRDb2xvcgorICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlQWxsT3B0aW9u
YWxQYXJhbWV0ZXJzKEVycm9yU3RyaW5nKiwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVj
dG9yQXJyYXk+KiBpbl9jb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nKiBpbl9ub3RlcywgY29uc3Qg
ZG91YmxlKiBpbl90aW1lc3RhbXAsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9i
amVjdD4qIGluX3ZhbHVlcywgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSogaW5fcGF5
bG9hZCwgY29uc3QgaW50KiBpbl9kYXRhYmFzZUlkLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJ
bnNwZWN0b3JPYmplY3Q+KiBpbl9zcWxFcnJvciwgY29uc3QgU3RyaW5nKiBpbl9zY3JlZW5Db2xv
ciwgY29uc3QgU3RyaW5nKiBpbl9wcmludENvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVp
bGRlcjo6QXJyYXk8U3RyaW5nPj4mIG9wdF9vdXRfY29sdW1uTmFtZXMsIEluc3BlY3Rvcjo6VHlw
ZUJ1aWxkZXI6Ok9wdE91dHB1dDxTdHJpbmc+KiBvcHRfb3V0X25vdGVzLCBJbnNwZWN0b3I6OlR5
cGVCdWlsZGVyOjpPcHRPdXRwdXQ8ZG91YmxlPiogb3B0X291dF90aW1lc3RhbXAsIEluc3BlY3Rv
cjo6VHlwZUJ1aWxkZXI6Ok9wdE91dHB1dDxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4qIG9w
dF9vdXRfdmFsdWVzLCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8SW5zcGVjdG9y
OjpJbnNwZWN0b3JWYWx1ZT4qIG9wdF9vdXRfcGF5bG9hZCwgY29uc3QgSW5zcGVjdG9yOjpUeXBl
QnVpbGRlcjo6RGF0YWJhc2U6OkRhdGFiYXNlSWQqIGNvbnN0IG9wdF9vdXRfZGF0YWJhc2VJZCwg
UmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkRhdGFiYXNlOjpFcnJvcj4mIG9wdF9vdXRf
c3FsRXJyb3IsIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3Jz
KiBvcHRfb3V0X3NjcmVlbkNvbG9yLCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVy
SGFuZGxlcjo6UHJpbnRDb2xvciogb3B0X291dF9wcmludENvbG9yKSA9IDA7CisgICAgdmlydHVh
bCB2b2lkIGV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhFcnJvclN0cmluZyosIGNvbnN0IFJl
ZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5PiYgaW5fY29sdW1uTmFtZXMsIGNvbnN0IFN0
cmluZyYgaW5fbm90ZXMsIGRvdWJsZSBpbl90aW1lc3RhbXAsIGNvbnN0IFJlZlB0cjxJbnNwZWN0
b3I6Okluc3BlY3Rvck9iamVjdD4mIGluX3ZhbHVlcywgSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1
ZSBpbl9wYXlsb2FkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6
SW5zcGVjdG9yT2JqZWN0PiYgaW5fc3FsRXJyb3IsIGNvbnN0IFN0cmluZyYgaW5fc2NyZWVuQ29s
b3IsIGNvbnN0IFN0cmluZyYgaW5fcHJpbnRDb2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1
aWxkZXI6OkFycmF5PFN0cmluZz4+JiBvdXRfY29sdW1uTmFtZXMsIFN0cmluZyogb3V0X25vdGVz
LCBkb3VibGUqIG91dF90aW1lc3RhbXAsIEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0KiBvdXRf
dmFsdWVzLCBJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlKiBvdXRfcGF5bG9hZCwgaW50KiBvdXRf
ZGF0YWJhc2VJZCwgUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkRhdGFiYXNlOjpFcnJv
cj4mIG91dF9zcWxFcnJvciwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6RGF0YWJhc2U6OlByaW1h
cnlDb2xvcnMqIG91dF9zY3JlZW5Db2xvciwgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXI6OlByaW50Q29sb3IqIG91dF9wcmludENvbG9yKSA9IDA7Citwcm90ZWN0ZWQ6
CisgICAgdmlydHVhbCB+SW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIo
KTsKK307CisjZW5kaWYgLy8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKKworI2lmIEVOQUJMRShTUUxf
REFUQUJBU0UpCitjbGFzcyBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyIGZpbmFs
IDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNo
ZXIgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3RvckRhdGFiYXNlQmFj
a2VuZERpc3BhdGNoZXI+IGNyZWF0ZShJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyKiwgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKKyAgICB2
aXJ0dWFsIHZvaWQgZGlzcGF0Y2gobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBQ
YXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBtZXNzYWdlKSBvdmVycmlkZTsK
K3ByaXZhdGU6CisgICAgdm9pZCBleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgY2Fs
bElkLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7CisgICAgdm9p
ZCBleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rv
cjo6SW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsKK3ByaXZhdGU6CisgICAgSW5zcGVjdG9yRGF0
YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcihJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyKiwgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKKyAgICBJ
bnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogbV9hZ2VudDsKK307Cisj
ZW5kaWYgLy8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
CisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorCisjZW5kaWYgLy8gIWRlZmluZWQoSW5z
cGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVyc19oKQorIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JU
ZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RC
YWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtb3B0
aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBKYXZh
U2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5CisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNo
ZXJzLmgiCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSA8aW5zcGVjdG9yL0lu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oPgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JW
YWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNw
ZWN0b3IgeworCisjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKK0luc3BlY3RvckRhdGFiYXNlQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyOjp+SW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXIoKSB7IH0KKyNlbmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQorCisjaWYgRU5B
QkxFKFNRTF9EQVRBQkFTRSkKK1Bhc3NSZWZQdHI8SW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlz
cGF0Y2hlcj4gSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKEluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlciwgSW5zcGVjdG9yRGF0YWJh
c2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQoreworICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hl
ciwgYWdlbnQpKTsKK30KKworSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6SW5z
cGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcihJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
ciogYmFja2VuZERpc3BhdGNoZXIsIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyKiBhZ2VudCkKKyAgICA6IEluc3BlY3RvclN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRj
aGVyKGJhY2tlbmREaXNwYXRjaGVyKQorICAgICwgbV9hZ2VudChhZ2VudCkKK3sKKyAgICBtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4oQVNDSUlMaXRlcmFs
KCJEYXRhYmFzZSIpLCB0aGlzKTsKK30KKwordm9pZCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmRE
aXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFBh
c3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtZXNzYWdlKQoreworICAgIFJlZjxJbnNwZWN0b3JE
YXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKKworICAgIGlmIChtZXRo
b2QgPT0gImV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMiKQorICAgICAgICBleGVjdXRlQWxs
T3B0aW9uYWxQYXJhbWV0ZXJzKGNhbGxJZCwgKm1lc3NhZ2UuZ2V0KCkpOworICAgIGVsc2UgaWYg
KG1ldGhvZCA9PSAiZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzIikKKyAgICAgICAgZXhlY3V0
ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKGNhbGxJZCwgKm1lc3NhZ2UuZ2V0KCkpOworICAgIGVsc2UK
KyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElk
LCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsIFN0cmluZygiJyIp
ICsgIkRhdGFiYXNlIiArICcuJyArIG1ldGhvZCArICInIHdhcyBub3QgZm91bmQiKTsKK30KKwor
dm9pZCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlQWxsT3B0aW9u
YWxQYXJhbWV0ZXJzKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2Up
Cit7CisgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3Rv
ckFycmF5OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250
YWluZXIgPSBtZXNzYWdlLmdldE9iamVjdChBU0NJSUxpdGVyYWwoInBhcmFtcyIpKTsKKyAgICBJ
bnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQo
KTsKKyAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9y
cy5nZXQoKTsKKyAgICBib29sIGNvbHVtbk5hbWVzX3ZhbHVlRm91bmQgPSBmYWxzZTsKKyAgICBS
ZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheT4gaW5fY29sdW1uTmFtZXMgPSBJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0QXJyYXkocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxp
dGVyYWwoImNvbHVtbk5hbWVzIiksICZjb2x1bW5OYW1lc192YWx1ZUZvdW5kLCBwcm90b2NvbEVy
cm9yc1B0cik7CisgICAgYm9vbCBub3Rlc192YWx1ZUZvdW5kID0gZmFsc2U7CisgICAgU3RyaW5n
IGluX25vdGVzID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldFN0cmluZyhwYXJhbXND
b250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgibm90ZXMiKSwgJm5vdGVzX3ZhbHVlRm91bmQsIHBy
b3RvY29sRXJyb3JzUHRyKTsKKyAgICBib29sIHRpbWVzdGFtcF92YWx1ZUZvdW5kID0gZmFsc2U7
CisgICAgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6T3B0T3V0cHV0PGRvdWJsZT4gaW5fdGltZXN0
YW1wID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldE51bWJlcihwYXJhbXNDb250YWlu
ZXJQdHIsIEFTQ0lJTGl0ZXJhbCgidGltZXN0YW1wIiksICZ0aW1lc3RhbXBfdmFsdWVGb3VuZCwg
cHJvdG9jb2xFcnJvcnNQdHIpOworICAgIGJvb2wgdmFsdWVzX3ZhbHVlRm91bmQgPSBmYWxzZTsK
KyAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IGluX3ZhbHVlcyA9IEluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRPYmplY3QocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJ
SUxpdGVyYWwoInZhbHVlcyIpLCAmdmFsdWVzX3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRy
KTsKKyAgICBib29sIHBheWxvYWRfdmFsdWVGb3VuZCA9IGZhbHNlOworICAgIFJlZlB0cjxJbnNw
ZWN0b3I6Okluc3BlY3RvclZhbHVlPiBpbl9wYXlsb2FkID0gSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXI6OmdldEFueShwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgicGF5bG9hZCIp
LCAmcGF5bG9hZF92YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0cik7CisgICAgYm9vbCBkYXRh
YmFzZUlkX3ZhbHVlRm91bmQgPSBmYWxzZTsKKyAgICBpbnQgaW5fZGF0YWJhc2VJZCA9IEluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRJbnQocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxp
dGVyYWwoImRhdGFiYXNlSWQiKSwgJmRhdGFiYXNlSWRfdmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJv
cnNQdHIpOworICAgIGJvb2wgc3FsRXJyb3JfdmFsdWVGb3VuZCA9IGZhbHNlOworICAgIFJlZlB0
cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gaW5fc3FsRXJyb3IgPSBJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlcjo6Z2V0T2JqZWN0KHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFs
KCJzcWxFcnJvciIpLCAmc3FsRXJyb3JfdmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJvcnNQdHIpOwor
ICAgIGJvb2wgc2NyZWVuQ29sb3JfdmFsdWVGb3VuZCA9IGZhbHNlOworICAgIFN0cmluZyBpbl9z
Y3JlZW5Db2xvciA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRTdHJpbmcocGFyYW1z
Q29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoInNjcmVlbkNvbG9yIiksICZzY3JlZW5Db2xvcl92
YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0cik7CisgICAgYm9vbCBwcmludENvbG9yX3ZhbHVl
Rm91bmQgPSBmYWxzZTsKKyAgICBTdHJpbmcgaW5fcHJpbnRDb2xvciA9IEluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyOjpnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwo
InByaW50Q29sb3IiKSwgJnByaW50Q29sb3JfdmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJvcnNQdHIp
OworICAgIGlmIChwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKKyAgICAgICAgU3RyaW5nIGVy
cm9yTWVzc2FnZSA9IFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVz
JyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiRGF0YWJhc2UuZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1l
dGVycyIpOworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9y
KCZjYWxsSWQsIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCBlcnJv
ck1lc3NhZ2UsIHByb3RvY29sRXJyb3JzLnJlbGVhc2UoKSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBFcnJvclN0cmluZyBlcnJvcjsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxJbnNwZWN0
b3I6OlR5cGVCdWlsZGVyOjpBcnJheTxTdHJpbmc+PiBvdXRfY29sdW1uTmFtZXM7CisgICAgSW5z
cGVjdG9yOjpUeXBlQnVpbGRlcjo6T3B0T3V0cHV0PFN0cmluZz4gb3V0X25vdGVzOworICAgIElu
c3BlY3Rvcjo6VHlwZUJ1aWxkZXI6Ok9wdE91dHB1dDxkb3VibGU+IG91dF90aW1lc3RhbXA7Cisg
ICAgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6T3B0T3V0cHV0PEluc3BlY3Rvcjo6SW5zcGVjdG9y
T2JqZWN0PiBvdXRfdmFsdWVzOworICAgIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6Ok9wdE91dHB1
dDxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiBvdXRfcGF5bG9hZDsKKyAgICBJbnNwZWN0b3I6
OlR5cGVCdWlsZGVyOjpEYXRhYmFzZTo6RGF0YWJhc2VJZCBvdXRfZGF0YWJhc2VJZDsKKyAgICBS
ZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6RGF0YWJhc2U6OkVycm9yPiBvdXRfc3FsRXJy
b3I7CisgICAgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMg
b3V0X3NjcmVlbkNvbG9yOworICAgIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyOjpQcmludENvbG9yIG91dF9wcmludENvbG9yOworICAgIG1fYWdlbnQtPmV4ZWN1dGVB
bGxPcHRpb25hbFBhcmFtZXRlcnMoJmVycm9yLCBjb2x1bW5OYW1lc192YWx1ZUZvdW5kID8gJmlu
X2NvbHVtbk5hbWVzIDogbnVsbHB0ciwgbm90ZXNfdmFsdWVGb3VuZCA/ICZpbl9ub3RlcyA6IG51
bGxwdHIsIHRpbWVzdGFtcF92YWx1ZUZvdW5kID8gJmluX3RpbWVzdGFtcCA6IG51bGxwdHIsIHZh
bHVlc192YWx1ZUZvdW5kID8gJmluX3ZhbHVlcyA6IG51bGxwdHIsIHBheWxvYWRfdmFsdWVGb3Vu
ZCA/ICZpbl9wYXlsb2FkIDogbnVsbHB0ciwgZGF0YWJhc2VJZF92YWx1ZUZvdW5kID8gJmluX2Rh
dGFiYXNlSWQgOiBudWxscHRyLCBzcWxFcnJvcl92YWx1ZUZvdW5kID8gJmluX3NxbEVycm9yIDog
bnVsbHB0ciwgc2NyZWVuQ29sb3JfdmFsdWVGb3VuZCA/ICZpbl9zY3JlZW5Db2xvciA6IG51bGxw
dHIsIHByaW50Q29sb3JfdmFsdWVGb3VuZCA/ICZpbl9wcmludENvbG9yIDogbnVsbHB0ciwgb3V0
X2NvbHVtbk5hbWVzLCAmb3V0X25vdGVzLCAmb3V0X3RpbWVzdGFtcCwgb3V0X3ZhbHVlcywgJm91
dF9wYXlsb2FkLCAmb3V0X2RhdGFiYXNlSWQsIG91dF9zcWxFcnJvciwgJm91dF9zY3JlZW5Db2xv
ciwgJm91dF9wcmludENvbG9yKTsKKworICAgIGlmICghZXJyb3IubGVuZ3RoKCkpIHsKKyAgICAg
ICAgaWYgKG91dF9jb2x1bW5OYW1lcykKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0VmFsdWUoQVND
SUlMaXRlcmFsKCJjb2x1bW5OYW1lcyIpLCBvdXRfY29sdW1uTmFtZXMpOworICAgICAgICBpZiAo
b3V0X25vdGVzLmlzQXNzaWduZWQoKSkKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKEFT
Q0lJTGl0ZXJhbCgibm90ZXMiKSwgb3V0X25vdGVzLmdldFZhbHVlKCkpOworICAgICAgICBpZiAo
b3V0X3RpbWVzdGFtcC5pc0Fzc2lnbmVkKCkpCisgICAgICAgICAgICByZXN1bHQtPnNldE51bWJl
cihBU0NJSUxpdGVyYWwoInRpbWVzdGFtcCIpLCBvdXRfdGltZXN0YW1wLmdldFZhbHVlKCkpOwor
ICAgICAgICBpZiAob3V0X3ZhbHVlcy5pc0Fzc2lnbmVkKCkpCisgICAgICAgICAgICByZXN1bHQt
PnNldE9iamVjdChBU0NJSUxpdGVyYWwoInZhbHVlcyIpLCBvdXRfdmFsdWVzLmdldFZhbHVlKCkp
OworICAgICAgICBpZiAob3V0X3BheWxvYWQuaXNBc3NpZ25lZCgpKQorICAgICAgICAgICAgcmVz
dWx0LT5zZXRWYWx1ZShBU0NJSUxpdGVyYWwoInBheWxvYWQiKSwgb3V0X3BheWxvYWQuZ2V0VmFs
dWUoKSk7CisgICAgICAgIGlmIChvdXRfZGF0YWJhc2VJZC5pc0Fzc2lnbmVkKCkpCisgICAgICAg
ICAgICByZXN1bHQtPnNldE51bWJlcihBU0NJSUxpdGVyYWwoImRhdGFiYXNlSWQiKSwgb3V0X2Rh
dGFiYXNlSWQuZ2V0VmFsdWUoKSk7CisgICAgICAgIGlmIChvdXRfc3FsRXJyb3IpCisgICAgICAg
ICAgICByZXN1bHQtPnNldFZhbHVlKEFTQ0lJTGl0ZXJhbCgic3FsRXJyb3IiKSwgb3V0X3NxbEVy
cm9yKTsKKyAgICAgICAgaWYgKG91dF9zY3JlZW5Db2xvci5pc0Fzc2lnbmVkKCkpCisgICAgICAg
ICAgICByZXN1bHQtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInNjcmVlbkNvbG9yIiksIG91dF9z
Y3JlZW5Db2xvci5nZXRWYWx1ZSgpKTsKKyAgICAgICAgaWYgKG91dF9wcmludENvbG9yLmlzQXNz
aWduZWQoKSkKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgicHJp
bnRDb2xvciIpLCBvdXRfcHJpbnRDb2xvci5nZXRWYWx1ZSgpKTsKKyAgICB9CisgICAgbV9iYWNr
ZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgZXJy
b3IpOworfQorCit2b2lkIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1
dGVOb09wdGlvbmFsUGFyYW1ldGVycyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0
JiBtZXNzYWdlKQoreworICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMg
PSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
cGFyYW1zQ29udGFpbmVyID0gbWVzc2FnZS5nZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJwYXJhbXMi
KSk7CisgICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250
YWluZXIuZ2V0KCk7CisgICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJv
dG9jb2xFcnJvcnMuZ2V0KCk7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXk+
IGluX2NvbHVtbk5hbWVzID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldEFycmF5KHBh
cmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJjb2x1bW5OYW1lcyIpLCBudWxscHRyLCBw
cm90b2NvbEVycm9yc1B0cik7CisgICAgU3RyaW5nIGluX25vdGVzID0gSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXI6OmdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgi
bm90ZXMiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnNQdHIpOworICAgIGRvdWJsZSBpbl90aW1l
c3RhbXAgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0TnVtYmVyKHBhcmFtc0NvbnRh
aW5lclB0ciwgQVNDSUlMaXRlcmFsKCJ0aW1lc3RhbXAiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJv
cnNQdHIpOworICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gaW5fdmFsdWVz
ID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldE9iamVjdChwYXJhbXNDb250YWluZXJQ
dHIsIEFTQ0lJTGl0ZXJhbCgidmFsdWVzIiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzUHRyKTsK
KyAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4gaW5fcGF5bG9hZCA9IEluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRBbnkocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxp
dGVyYWwoInBheWxvYWQiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnNQdHIpOworICAgIGludCBp
bl9kYXRhYmFzZUlkID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldEludChwYXJhbXND
b250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgiZGF0YWJhc2VJZCIpLCBudWxscHRyLCBwcm90b2Nv
bEVycm9yc1B0cik7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBpbl9z
cWxFcnJvciA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRPYmplY3QocGFyYW1zQ29u
dGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoInNxbEVycm9yIiksIG51bGxwdHIsIHByb3RvY29sRXJy
b3JzUHRyKTsKKyAgICBTdHJpbmcgaW5fc2NyZWVuQ29sb3IgPSBJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlcjo6Z2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJzY3Jl
ZW5Db2xvciIpLCBudWxscHRyLCBwcm90b2NvbEVycm9yc1B0cik7CisgICAgU3RyaW5nIGluX3By
aW50Q29sb3IgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0U3RyaW5nKHBhcmFtc0Nv
bnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJwcmludENvbG9yIiksIG51bGxwdHIsIHByb3RvY29s
RXJyb3JzUHRyKTsKKyAgICBpZiAocHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CisgICAgICAg
IFN0cmluZyBlcnJvck1lc3NhZ2UgPSBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2Yg
bWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkRhdGFiYXNlLmV4ZWN1dGVOb09wdGlv
bmFsUGFyYW1ldGVycyIpOworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90
b2NvbEVycm9yKCZjYWxsSWQsIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFy
YW1zLCBlcnJvck1lc3NhZ2UsIHByb3RvY29sRXJyb3JzLnJlbGVhc2UoKSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBFcnJvclN0cmluZyBlcnJvcjsKKyAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZlB0
cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheTxTdHJpbmc+PiBvdXRfY29sdW1uTmFtZXM7
CisgICAgU3RyaW5nIG91dF9ub3RlczsKKyAgICBkb3VibGUgb3V0X3RpbWVzdGFtcDsKKyAgICBJ
bnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCBvdXRfdmFsdWVzOworICAgIEluc3BlY3Rvcjo6SW5z
cGVjdG9yVmFsdWUgb3V0X3BheWxvYWQ7CisgICAgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6RGF0
YWJhc2U6OkRhdGFiYXNlSWQgb3V0X2RhdGFiYXNlSWQ7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6
VHlwZUJ1aWxkZXI6OkRhdGFiYXNlOjpFcnJvcj4gb3V0X3NxbEVycm9yOworICAgIEluc3BlY3Rv
cjo6VHlwZUJ1aWxkZXI6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzIG91dF9zY3JlZW5Db2xvcjsK
KyAgICBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UHJpbnRDb2xv
ciBvdXRfcHJpbnRDb2xvcjsKKyAgICBtX2FnZW50LT5leGVjdXRlTm9PcHRpb25hbFBhcmFtZXRl
cnMoJmVycm9yLCBpbl9jb2x1bW5OYW1lcywgaW5fbm90ZXMsIGluX3RpbWVzdGFtcCwgaW5fdmFs
dWVzLCBpbl9wYXlsb2FkLCBpbl9kYXRhYmFzZUlkLCBpbl9zcWxFcnJvciwgaW5fc2NyZWVuQ29s
b3IsIGluX3ByaW50Q29sb3IsIG91dF9jb2x1bW5OYW1lcywgJm91dF9ub3RlcywgJm91dF90aW1l
c3RhbXAsIG91dF92YWx1ZXMsICZvdXRfcGF5bG9hZCwgJm91dF9kYXRhYmFzZUlkLCBvdXRfc3Fs
RXJyb3IsICZvdXRfc2NyZWVuQ29sb3IsICZvdXRfcHJpbnRDb2xvcik7CisKKyAgICBpZiAoIWVy
cm9yLmxlbmd0aCgpKSB7CisgICAgICAgIHJlc3VsdC0+c2V0VmFsdWUoQVNDSUlMaXRlcmFsKCJj
b2x1bW5OYW1lcyIpLCBvdXRfY29sdW1uTmFtZXMpOworICAgICAgICByZXN1bHQtPnNldFN0cmlu
ZyhBU0NJSUxpdGVyYWwoIm5vdGVzIiksIG91dF9ub3Rlcyk7CisgICAgICAgIHJlc3VsdC0+c2V0
TnVtYmVyKEFTQ0lJTGl0ZXJhbCgidGltZXN0YW1wIiksIG91dF90aW1lc3RhbXApOworICAgICAg
ICByZXN1bHQtPnNldE9iamVjdChBU0NJSUxpdGVyYWwoInZhbHVlcyIpLCBvdXRfdmFsdWVzKTsK
KyAgICAgICAgcmVzdWx0LT5zZXRWYWx1ZShBU0NJSUxpdGVyYWwoInBheWxvYWQiKSwgb3V0X3Bh
eWxvYWQpOworICAgICAgICByZXN1bHQtPnNldE51bWJlcihBU0NJSUxpdGVyYWwoImRhdGFiYXNl
SWQiKSwgb3V0X2RhdGFiYXNlSWQpOworICAgICAgICByZXN1bHQtPnNldFZhbHVlKEFTQ0lJTGl0
ZXJhbCgic3FsRXJyb3IiKSwgb3V0X3NxbEVycm9yKTsKKyAgICAgICAgcmVzdWx0LT5zZXRTdHJp
bmcoQVNDSUlMaXRlcmFsKCJzY3JlZW5Db2xvciIpLCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpn
ZXRUZXN0RW51bUNvbnN0YW50VmFsdWUob3V0X3NjcmVlbkNvbG9yKSk7CisgICAgICAgIHJlc3Vs
dC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgicHJpbnRDb2xvciIpLCBJbnNwZWN0b3I6OlR5cGVC
dWlsZGVyOjpnZXRUZXN0RW51bUNvbnN0YW50VmFsdWUob3V0X3ByaW50Q29sb3IpKTsKKyAgICB9
CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJl
bGVhc2UoKSwgZXJyb3IpOworfQorI2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0UpCisKK30g
Ly8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKwor
IyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorCisjIyMg
QmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNv
bgorLy8gYnkgdGhlIHNjcmlwdDogSmF2YVNjcmlwdENvcmUvcmVwbGF5L3NjcmlwdHMvQ29kZUdl
bmVyYXRvckluc3BlY3Rvci5weQorCisjaWZuZGVmIEluc3BlY3RvclRlc3RGcm9udGVuZERpc3Bh
dGNoZXJzX2gKKyNkZWZpbmUgSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnNfaAorCisj
aWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUgIkluc3BlY3RvclRlc3RUeXBlQnVpbGRl
cnMuaCIKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLmg+Cisj
aW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9QYXNz
UmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJ
bnNwZWN0b3IgeworCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBF
TkFCTEUoSU5TUEVDVE9SKQorCisjZW5kaWYgLy8gIWRlZmluZWQoSW5zcGVjdG9yVGVzdEZyb250
ZW5kRGlzcGF0Y2hlcnNfaCkKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlz
cGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0
Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1y
ZXR1cm4tcGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBKYXZhU2NyaXB0Q29yZS9y
ZXBsYXkvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5CisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgorCisj
aWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKwor
bmFtZXNwYWNlIEluc3BlY3RvciB7CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5k
aWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0RnJv
bnRlbmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RUeXBl
QnVpbGRlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwt
cmV0dXJuLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogSmF2YVNjcmlwdENvcmUv
cmVwbGF5L3NjcmlwdHMvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQorCisjaWZuZGVmIEluc3Bl
Y3RvclRlc3RUeXBlQnVpbGRlcnNfaAorI2RlZmluZSBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJz
X2gKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVj
dG9ySlNUeXBlQnVpbGRlcnMuaD4KKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVHlwZUJ1
aWxkZXIuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9QYXNz
UmVmUHRyLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworbmFtZXNwYWNlIFR5cGVC
dWlsZGVyIHsKKworLy8gRm9yd2FyZCBkZWNsYXJhdGlvbnMuCisjaWYgRU5BQkxFKFNRTF9EQVRB
QkFTRSkKK25hbWVzcGFjZSBEYXRhYmFzZSB7CitjbGFzcyBFcnJvcjsKK2VudW0gY2xhc3MgUHJp
bWFyeUNvbG9yczsKK30gLy8gRGF0YWJhc2UKKyNlbmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNF
KQorLy8gRW5kIG9mIGZvcndhcmQgZGVjbGFyYXRpb25zLgorCisKKy8vIFR5cGVkZWZzLgorI2lm
IEVOQUJMRShTUUxfREFUQUJBU0UpCituYW1lc3BhY2UgRGF0YWJhc2UgeworLyogVW5pcXVlIGlk
ZW50aWZpZXIgb2YgRGF0YWJhc2Ugb2JqZWN0LiAqLwordHlwZWRlZiBpbnQgRGF0YWJhc2VJZDsK
K30gLy8gRGF0YWJhc2UKKyNlbmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQorLy8gRW5kIG9m
IHR5cGVkZWZzLgorCitTdHJpbmcgZ2V0VGVzdEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKTsK
KwordGVtcGxhdGU8dHlwZW5hbWUgVD4gU3RyaW5nIGdldFRlc3RFbnVtQ29uc3RhbnRWYWx1ZShU
IGVudW1WYWx1ZSkKK3sKKyAgICByZXR1cm4gZ2V0VGVzdEVudW1Db25zdGFudFZhbHVlKHN0YXRp
Y19jYXN0PGludD4oZW51bVZhbHVlKSk7Cit9CisKKyNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQor
bmFtZXNwYWNlIERhdGFiYXNlIHsKKy8qICAqLworZW51bSBjbGFzcyBQcmltYXJ5Q29sb3JzIHsK
KyAgICBSZWQgPSAwLAorICAgIEdyZWVuID0gMSwKKyAgICBCbHVlID0gMiwKK307IC8vIGVudW0g
Y2xhc3MgUHJpbWFyeUNvbG9ycworLyogRGF0YWJhc2UgZXJyb3IuICovCitjbGFzcyBFcnJvciA6
IHB1YmxpYyBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdEJhc2UgeworcHVibGljOgorICAgIGVu
dW0geworICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCisgICAgICAgIE1lc3NhZ2VTZXQgPSAxIDw8
IDAsCisgICAgICAgIENvZGVTZXQgPSAxIDw8IDEsCisgICAgICAgIEFsbEZpZWxkc1NldCA9IChN
ZXNzYWdlU2V0IHwgQ29kZVNldCkKKyAgICB9OworCisgICAgdGVtcGxhdGU8aW50IFNUQVRFPgor
ICAgIGNsYXNzIEJ1aWxkZXIgeworICAgIHByaXZhdGU6CisgICAgICAgIFJlZlB0cjxJbnNwZWN0
b3I6Okluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CisKKyAgICAgICAgdGVtcGxhdGU8aW50IFNU
RVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRo
aXMpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPC8qRXJyb3IqL0lu
c3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBwdHIpCisgICAgICAgIHsKKyAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9u
X2luaXRfc3RhdGUpOworICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CisgICAgICAgIH0KKyAg
ICAgICAgZnJpZW5kIGNsYXNzIEVycm9yOworICAgIHB1YmxpYzoKKworICAgICAgICBCdWlsZGVy
PFNUQVRFIHwgTWVzc2FnZVNldD4mIHNldE1lc3NhZ2UoY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAg
ICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE1lc3NhZ2VTZXQp
LCBwcm9wZXJ0eV9tZXNzYWdlX2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5z
ZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJtZXNzYWdlIiksIHZhbHVlKTsKKyAgICAgICAgICAgIHJl
dHVybiBjYXN0U3RhdGU8TWVzc2FnZVNldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxk
ZXI8U1RBVEUgfCBDb2RlU2V0PiYgc2V0Q29kZShpbnQgdmFsdWUpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBDb2RlU2V0KSwgcHJvcGVydHlfY29kZV9h
bHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKEFTQ0lJTGl0ZXJh
bCgiY29kZSIpLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENvZGVTZXQ+
KCk7CisgICAgICAgIH0KKworICAgICAgICBvcGVyYXRvciBSZWZQdHI8RXJyb3I+JiAoKQorICAg
ICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQs
IHJlc3VsdF9pc19ub3RfcmVhZHkpOworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9m
KEVycm9yKSA9PSBzaXplb2YoSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QpLCBjYW5ub3RfY2Fz
dCk7CisgICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPEVycm9yPio+
KCZtX3Jlc3VsdCk7CisgICAgICAgIH0KKworICAgICAgICBQYXNzUmVmUHRyPEVycm9yPiByZWxl
YXNlKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxFcnJvcj4oKnRoaXMp
LnJlbGVhc2UoKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICAvKgorICAgICAqIFN5bnRoZXRp
YyBjb25zdHJ1Y3RvcjoKKyAgICAgKiBSZWZQdHI8RXJyb3I+IHJlc3VsdCA9IEVycm9yOjpjcmVh
dGUoKQorICAgICAqICAgICAuc2V0TWVzc2FnZSguLi4pCisgICAgICogICAgIC5zZXRDb2RlKC4u
Lik7CisgICAgICovCisgICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCisg
ICAgeworICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSW5zcGVjdG9yOjpJbnNw
ZWN0b3JPYmplY3Q6OmNyZWF0ZSgpKTsKKyAgICB9CisgICAgdHlwZWRlZiBJbnNwZWN0b3I6OlR5
cGVCdWlsZGVyOjpTdHJ1Y3RJdGVtVHJhaXRzIEl0ZW1UcmFpdHM7Cit9OworCit9IC8vIERhdGFi
YXNlCisjZW5kaWYgLy8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKKworCisKK30gLy8gbmFtZXNwYWNl
IFR5cGVCdWlsZGVyCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5B
QkxFKElOU1BFQ1RPUikKKworI2VuZGlmIC8vICFkZWZpbmVkKEluc3BlY3RvclRlc3RUeXBlQnVp
bGRlcnNfaCkKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5oCisKKyMj
IyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmNwcAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
Ky8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBjb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgor
Ly8gYnkgdGhlIHNjcmlwdDogSmF2YVNjcmlwdENvcmUvcmVwbGF5L3NjcmlwdHMvQ29kZUdlbmVy
YXRvckluc3BlY3Rvci5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW5zcGVj
dG9yVGVzdFR5cGVCdWlsZGVycy5oIgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK25hbWVz
cGFjZSBUeXBlQnVpbGRlciB7CisKK3N0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBlbnVtX2NvbnN0
YW50X3ZhbHVlc1tdID0geworICAgICJyZWQiLAorICAgICJncmVlbiIsCisgICAgImJsdWUiLAor
ICAgICJjeWFuIiwKKyAgICAibWFnZW50YSIsCisgICAgInllbGxvdyIsCisgICAgImJsYWNrIiwK
K307CisKK1N0cmluZyBnZXRUZXN0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpIHsKKyAgICBy
ZXR1cm4gZW51bV9jb25zdGFudF92YWx1ZXNbY29kZV07Cit9CisKKworCit9IC8vIG5hbWVzcGFj
ZSBUeXBlQnVpbGRlcgorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVO
QUJMRShJTlNQRUNUT1IpCisKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVy
cy5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9leHBlY3RlZC9kb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24t
cmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4
cGVjdGVkL2RvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbi1yZXN1bHQKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uY2Y2ZTAyMjNiNDlhZGE0MjdhNjQzMGU1NzFhNDcwODNhZGMxNDgzMgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9leHBlY3RlZC9kb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24tcmVzdWx0
CkBAIC0wLDAgKzEsNTUyIEBACisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdEJhY2tlbmRD
b21tYW5kcy5qcworLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5k
LXNpemVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IEphdmFTY3JpcHRDb3JlL3JlcGxheS9zY3Jp
cHRzL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKKworLy8gTmV0d29yazEuCitJbnNwZWN0b3JC
YWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiTmV0d29yazEubG9hZFJlc291cmNlMSIsIFtdLCBbXSk7
CisKKy8vIE5ldHdvcmszLgorSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIk5ldHdv
cmszLmxvYWRSZXNvdXJjZTEiLCBbXSwgW10pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNv
bW1hbmQoIk5ldHdvcmszLmxvYWRSZXNvdXJjZTIiLCBbXSwgW10pOworSW5zcGVjdG9yQmFja2Vu
ZC5yZWdpc3RlckNvbW1hbmQoIk5ldHdvcmszLmxvYWRSZXNvdXJjZTMiLCBbXSwgW10pOworSW5z
cGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIk5ldHdvcmszLmxvYWRSZXNvdXJjZTQiLCBb
XSwgW10pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIk5ldHdvcmszLmxvYWRS
ZXNvdXJjZTUiLCBbXSwgW10pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIk5l
dHdvcmszLmxvYWRSZXNvdXJjZTYiLCBbXSwgW10pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3Rl
ckNvbW1hbmQoIk5ldHdvcmszLmxvYWRSZXNvdXJjZTciLCBbXSwgW10pOworIyMjIEVuZCBGaWxl
OiBJbnNwZWN0b3JUZXN0QmFja2VuZENvbW1hbmRzLmpzCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNw
ZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13
aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBKYXZhU2Ny
aXB0Q29yZS9yZXBsYXkvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5CisKKyNpZm5k
ZWYgSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVyc19oCisjZGVmaW5lIEluc3BlY3RvclRl
c3RCYWNrZW5kRGlzcGF0Y2hlcnNfaAorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1
ZGUgIkluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuaCIKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsK
KwordHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKK2NsYXNzIEluc3BlY3Rvck5ldHdvcmsx
QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIHZvaWQgbG9h
ZFJlc291cmNlMShFcnJvclN0cmluZyopID0gMDsKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIH5J
bnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpOworfTsKKworY2xhc3Mg
SW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgeworcHVibGljOgorICAg
IHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UxKEVycm9yU3RyaW5nKikgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBsb2FkUmVzb3VyY2UyKEVycm9yU3RyaW5nKikgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCBsb2FkUmVzb3VyY2UzKEVycm9yU3RyaW5nKikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBsb2Fk
UmVzb3VyY2U0KEVycm9yU3RyaW5nKikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3Vy
Y2U1KEVycm9yU3RyaW5nKikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2U2KEVy
cm9yU3RyaW5nKikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2U3KEVycm9yU3Ry
aW5nKikgPSAwOworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgfkluc3BlY3Rvck5ldHdvcmszQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyKCk7Cit9OworCitjbGFzcyBJbnNwZWN0b3JOZXR3b3JrMUJh
Y2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yU3VwcGxl
bWVudGFsQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRy
PEluc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShJbnNwZWN0b3I6Oklu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiwgSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2gobG9uZyBjYWxsSWQsIGNv
bnN0IFN0cmluZyYgbWV0aG9kLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0
PiBtZXNzYWdlKSBvdmVycmlkZTsKK3ByaXZhdGU6CisgICAgdm9pZCBsb2FkUmVzb3VyY2UxKGxv
bmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7Citw
cml2YXRlOgorICAgIEluc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIoSW5zcGVjdG9y
OjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciosIEluc3BlY3Rvck5ldHdvcmsxQmFja2VuZERp
c3BhdGNoZXJIYW5kbGVyKik7CisgICAgSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXIqIG1fYWdlbnQ7Cit9OworCitjbGFzcyBJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmRE
aXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yU3VwcGxlbWVudGFs
QmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3Bl
Y3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShJbnNwZWN0b3I6Okluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyKiwgSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2gobG9uZyBjYWxsSWQsIGNvbnN0IFN0
cmluZyYgbWV0aG9kLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBtZXNz
YWdlKSBvdmVycmlkZTsKK3ByaXZhdGU6CisgICAgdm9pZCBsb2FkUmVzb3VyY2UxKGxvbmcgY2Fs
bElkLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7CisgICAgdm9p
ZCBsb2FkUmVzb3VyY2UyKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9i
amVjdCYgbWVzc2FnZSk7CisgICAgdm9pZCBsb2FkUmVzb3VyY2UzKGxvbmcgY2FsbElkLCBjb25z
dCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7CisgICAgdm9pZCBsb2FkUmVz
b3VyY2U0KGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCYgbWVz
c2FnZSk7CisgICAgdm9pZCBsb2FkUmVzb3VyY2U1KGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0
b3I6Okluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7CisgICAgdm9pZCBsb2FkUmVzb3VyY2U2KGxv
bmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7Cisg
ICAgdm9pZCBsb2FkUmVzb3VyY2U3KGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3I6Okluc3Bl
Y3Rvck9iamVjdCYgbWVzc2FnZSk7Citwcml2YXRlOgorICAgIEluc3BlY3Rvck5ldHdvcmszQmFj
a2VuZERpc3BhdGNoZXIoSW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciosIElu
c3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7CisgICAgSW5zcGVjdG9y
TmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIG1fYWdlbnQ7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyNlbmRp
ZiAvLyAhZGVmaW5lZChJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzX2gpCisjIyMgRW5k
IEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmls
ZTogSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
ZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCisvLyBieSB0aGUgc2NyaXB0
OiBKYXZhU2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JUZXN0QmFja2VuZERp
c3BhdGNoZXJzLmgiCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSA8aW5zcGVj
dG9yL0luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oPgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNw
ZWN0b3JWYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFj
ZSBJbnNwZWN0b3IgeworCitJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxl
cjo6fkluc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCkgeyB9CitJbnNw
ZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6fkluc3BlY3Rvck5ldHdvcmsz
QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCkgeyB9CisKK1Bhc3NSZWZQdHI8SW5zcGVjdG9yTmV0
d29yazFCYWNrZW5kRGlzcGF0Y2hlcj4gSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hl
cjo6Y3JlYXRlKEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlciwg
SW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQoreworICAg
IHJldHVybiBhZG9wdFJlZihuZXcgSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcihi
YWNrZW5kRGlzcGF0Y2hlciwgYWdlbnQpKTsKK30KKworSW5zcGVjdG9yTmV0d29yazFCYWNrZW5k
RGlzcGF0Y2hlcjo6SW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcihJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIsIEluc3BlY3Rvck5ldHdvcmsxQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKKyAgICA6IEluc3BlY3RvclN1cHBsZW1lbnRh
bEJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyKQorICAgICwgbV9hZ2VudChhZ2Vu
dCkKK3sKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21h
aW4oQVNDSUlMaXRlcmFsKCJOZXR3b3JrMSIpLCB0aGlzKTsKK30KKwordm9pZCBJbnNwZWN0b3JO
ZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIGNhbGxJZCwgY29uc3QgU3Ry
aW5nJiBtZXRob2QsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtZXNzYWdlKQoreworICAg
IFJlZjxJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsK
KworICAgIGlmIChtZXRob2QgPT0gImxvYWRSZXNvdXJjZTEiKQorICAgICAgICBsb2FkUmVzb3Vy
Y2UxKGNhbGxJZCwgKm1lc3NhZ2UuZ2V0KCkpOworICAgIGVsc2UKKyAgICAgICAgbV9iYWNrZW5k
RGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElkLCBJbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsIFN0cmluZygiJyIpICsgIk5ldHdvcmsxIiArICcu
JyArIG1ldGhvZCArICInIHdhcyBub3QgZm91bmQiKTsKK30KKwordm9pZCBJbnNwZWN0b3JOZXR3
b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UxKGxvbmcgY2FsbElkLCBjb25zdCBJ
bnNwZWN0b3JPYmplY3QmKQoreworICAgIEVycm9yU3RyaW5nIGVycm9yOworICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAg
bV9hZ2VudC0+bG9hZFJlc291cmNlMSgmZXJyb3IpOworCisgICAgbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgZXJyb3IpOworfQorCitQ
YXNzUmVmUHRyPEluc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI+IEluc3BlY3Rvck5l
dHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmNyZWF0ZShJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
ciogYmFja2VuZERpc3BhdGNoZXIsIEluc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyKiBhZ2VudCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEluc3BlY3Rvck5ldHdv
cmszQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIsIGFnZW50KSk7Cit9CisKK0lu
c3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6Okluc3BlY3Rvck5ldHdvcmszQmFja2Vu
ZERpc3BhdGNoZXIoSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVy
LCBJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCisgICAg
OiBJbnNwZWN0b3JTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hl
cikKKyAgICAsIG1fYWdlbnQoYWdlbnQpCit7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVn
aXN0ZXJEaXNwYXRjaGVyRm9yRG9tYWluKEFTQ0lJTGl0ZXJhbCgiTmV0d29yazMiKSwgdGhpcyk7
Cit9CisKK3ZvaWQgSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2go
bG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gbWVzc2FnZSkKK3sKKyAgICBSZWY8SW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0
Y2hlcj4gcHJvdGVjdCgqdGhpcyk7CisKKyAgICB0eXBlZGVmIHZvaWQgKEluc3BlY3Rvck5ldHdv
cmszQmFja2VuZERpc3BhdGNoZXI6OipDYWxsSGFuZGxlcikobG9uZyBjYWxsSWQsIGNvbnN0IElu
c3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsKKyAgICB0eXBlZGVmIEhhc2hNYXA8
U3RyaW5nLCBDYWxsSGFuZGxlcj4gRGlzcGF0Y2hNYXA7CisgICAgREVQUkVDQVRFRF9ERUZJTkVf
U1RBVElDX0xPQ0FMKERpc3BhdGNoTWFwLCBkaXNwYXRjaE1hcCwgKCkpOworICAgIGlmIChkaXNw
YXRjaE1hcC5pc0VtcHR5KCkpIHsKKyAgICAgICAgc3RhdGljIGNvbnN0IHN0cnVjdCBNZXRob2RU
YWJsZSB7CisgICAgICAgICAgICBjb25zdCBjaGFyKiBuYW1lOworICAgICAgICAgICAgQ2FsbEhh
bmRsZXIgaGFuZGxlcjsKKyAgICAgICAgfSBjb21tYW5kc1tdID0geworICAgICAgICAgICAgeyAi
bG9hZFJlc291cmNlMSIsICZJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2Fk
UmVzb3VyY2UxIH0sCisgICAgICAgICAgICB7ICJsb2FkUmVzb3VyY2UyIiwgJkluc3BlY3Rvck5l
dHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTIgfSwKKyAgICAgICAgICAgIHsg
ImxvYWRSZXNvdXJjZTMiLCAmSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9h
ZFJlc291cmNlMyB9LAorICAgICAgICAgICAgeyAibG9hZFJlc291cmNlNCIsICZJbnNwZWN0b3JO
ZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U0IH0sCisgICAgICAgICAgICB7
ICJsb2FkUmVzb3VyY2U1IiwgJkluc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6Omxv
YWRSZXNvdXJjZTUgfSwKKyAgICAgICAgICAgIHsgImxvYWRSZXNvdXJjZTYiLCAmSW5zcGVjdG9y
TmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNiB9LAorICAgICAgICAgICAg
eyAibG9hZFJlc291cmNlNyIsICZJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjps
b2FkUmVzb3VyY2U3IH0sCisgICAgICAgIH07CisgICAgICAgIHNpemVfdCBsZW5ndGggPSBXVEZf
QVJSQVlfTEVOR1RIKGNvbW1hbmRzKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBs
ZW5ndGg7ICsraSkKKyAgICAgICAgICAgIGRpc3BhdGNoTWFwLmFkZChjb21tYW5kc1tpXS5uYW1l
LCBjb21tYW5kc1tpXS5oYW5kbGVyKTsKKyAgICB9CisKKyAgICBIYXNoTWFwPFN0cmluZywgQ2Fs
bEhhbmRsZXI+OjppdGVyYXRvciBpdCA9IGRpc3BhdGNoTWFwLmZpbmQobWV0aG9kKTsKKyAgICBp
ZiAoaXQgPT0gZGlzcGF0Y2hNYXAuZW5kKCkpIHsKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+cmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElkLCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
cjo6TWV0aG9kTm90Rm91bmQsIFN0cmluZygiJyIpICsgIk5ldHdvcmszIiArICcuJyArIG1ldGhv
ZCArICInIHdhcyBub3QgZm91bmQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgICgo
KnRoaXMpLippdC0+dmFsdWUpKGNhbGxJZCwgKm1lc3NhZ2UuZ2V0KCkpOworfQorCit2b2lkIElu
c3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTEobG9uZyBjYWxs
SWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYpCit7CisgICAgRXJyb3JTdHJpbmcgZXJyb3I7Cisg
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsKKyAgICBtX2FnZW50LT5sb2FkUmVzb3VyY2UxKCZlcnJvcik7CisKKyAgICBtX2JhY2tl
bmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBlcnJv
cik7Cit9CisKK3ZvaWQgSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJl
c291cmNlMihsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JikKK3sKKyAgICBFcnJv
clN0cmluZyBlcnJvcjsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNw
ZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJjZTIoJmVycm9y
KTsKKworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3Vs
dC5yZWxlYXNlKCksIGVycm9yKTsKK30KKwordm9pZCBJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmRE
aXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UzKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmpl
Y3QmKQoreworICAgIEVycm9yU3RyaW5nIGVycm9yOworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgbV9hZ2VudC0+bG9h
ZFJlc291cmNlMygmZXJyb3IpOworCisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3Bv
bnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgZXJyb3IpOworfQorCit2b2lkIEluc3BlY3Rv
ck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTQobG9uZyBjYWxsSWQsIGNv
bnN0IEluc3BlY3Rvck9iamVjdCYpCit7CisgICAgRXJyb3JTdHJpbmcgZXJyb3I7CisgICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsK
KyAgICBtX2FnZW50LT5sb2FkUmVzb3VyY2U0KCZlcnJvcik7CisKKyAgICBtX2JhY2tlbmREaXNw
YXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBlcnJvcik7Cit9
CisKK3ZvaWQgSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNl
NShsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JikKK3sKKyAgICBFcnJvclN0cmlu
ZyBlcnJvcjsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JP
YmplY3Q6OmNyZWF0ZSgpOworICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJjZTUoJmVycm9yKTsKKwor
ICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxl
YXNlKCksIGVycm9yKTsKK30KKwordm9pZCBJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRj
aGVyOjpsb2FkUmVzb3VyY2U2KGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmKQor
eworICAgIEVycm9yU3RyaW5nIGVycm9yOworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJl
c3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgbV9hZ2VudC0+bG9hZFJlc291
cmNlNigmZXJyb3IpOworCisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNh
bGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgZXJyb3IpOworfQorCit2b2lkIEluc3BlY3Rvck5ldHdv
cmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTcobG9uZyBjYWxsSWQsIGNvbnN0IElu
c3BlY3Rvck9iamVjdCYpCit7CisgICAgRXJyb3JTdHJpbmcgZXJyb3I7CisgICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBt
X2FnZW50LT5sb2FkUmVzb3VyY2U3KCZlcnJvcik7CisKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVy
LT5zZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBlcnJvcik7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKwor
IyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorCisjIyMg
QmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBkb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24KKy8vIGJ5IHRo
ZSBzY3JpcHQ6IEphdmFTY3JpcHRDb3JlL3JlcGxheS9zY3JpcHRzL0NvZGVHZW5lcmF0b3JJbnNw
ZWN0b3IucHkKKworI2lmbmRlZiBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVyc19oCisj
ZGVmaW5lIEluc3BlY3RvclRlc3RGcm9udGVuZERpc3BhdGNoZXJzX2gKKworI2lmIEVOQUJMRShJ
TlNQRUNUT1IpCisKKyNpbmNsdWRlICJJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmgiCisjaW5j
bHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oPgorI2luY2x1ZGUgPGlu
c3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsK
KworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BF
Q1RPUikKKworI2VuZGlmIC8vICFkZWZpbmVkKEluc3BlY3RvclRlc3RGcm9udGVuZERpc3BhdGNo
ZXJzX2gpCisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgK
KworIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBkb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24K
Ky8vIGJ5IHRoZSBzY3JpcHQ6IEphdmFTY3JpcHRDb3JlL3JlcGxheS9zY3JpcHRzL0NvZGVHZW5l
cmF0b3JJbnNwZWN0b3IucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkluc3Bl
Y3RvclRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQor
CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsK
KworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9S
KQorCisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAor
CisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5oCisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIGRvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbgorLy8gYnkgdGhl
IHNjcmlwdDogSmF2YVNjcmlwdENvcmUvcmVwbGF5L3NjcmlwdHMvQ29kZUdlbmVyYXRvckluc3Bl
Y3Rvci5weQorCisjaWZuZGVmIEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnNfaAorI2RlZmluZSBJ
bnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzX2gKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNp
bmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9ySlNUeXBlQnVpbGRlcnMuaD4KKyNpbmNsdWRlIDxp
bnNwZWN0b3IvSW5zcGVjdG9yVHlwZUJ1aWxkZXIuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9u
cy5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3Ig
eworCisKKworbmFtZXNwYWNlIFR5cGVCdWlsZGVyIHsKKworCisKKy8vIFR5cGVkZWZzLgorbmFt
ZXNwYWNlIE5ldHdvcmsyIHsKKy8qIFVuaXF1ZSBsb2FkZXIgaWRlbnRpZmllci4gKi8KK3R5cGVk
ZWYgU3RyaW5nIExvYWRlcklkOworfSAvLyBOZXR3b3JrMgorLy8gRW5kIG9mIHR5cGVkZWZzLgor
CitTdHJpbmcgZ2V0VGVzdEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKTsKKwordGVtcGxhdGU8
dHlwZW5hbWUgVD4gU3RyaW5nIGdldFRlc3RFbnVtQ29uc3RhbnRWYWx1ZShUIGVudW1WYWx1ZSkK
K3sKKyAgICByZXR1cm4gZ2V0VGVzdEVudW1Db25zdGFudFZhbHVlKHN0YXRpY19jYXN0PGludD4o
ZW51bVZhbHVlKSk7Cit9CisKKworCit9IC8vIG5hbWVzcGFjZSBUeXBlQnVpbGRlcgorCit9IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyNl
bmRpZiAvLyAhZGVmaW5lZChJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzX2gpCisjIyMgRW5kIEZp
bGU6IEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogSW5zcGVj
dG9yVGVzdFR5cGVCdWlsZGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZh
cnlpbmctY29tbWFuZC1zaXplcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBKYXZhU2NyaXB0Q29y
ZS9yZXBsYXkvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5CisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmgiCisKKyNpZiBF
TkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1l
c3BhY2UgSW5zcGVjdG9yIHsKKworbmFtZXNwYWNlIFR5cGVCdWlsZGVyIHsKKworc3RhdGljIGNv
bnN0IGNoYXIqIGNvbnN0IGVudW1fY29uc3RhbnRfdmFsdWVzW10gPSB7Cit9OworCitTdHJpbmcg
Z2V0VGVzdEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKSB7CisgICAgcmV0dXJuIGVudW1fY29u
c3RhbnRfdmFsdWVzW2NvZGVdOworfQorCisKKworfSAvLyBuYW1lc3BhY2UgVHlwZUJ1aWxkZXIK
KworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9S
KQorCisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuY3BwCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0
ZWQvZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uLXJlc3VsdCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9ldmVudHMtd2l0
aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjcxNGFmOTU0YTg1
M2ZlOWI0ZGVkNzJkNjBkNzcwZjBmMjBmZDA0MzkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZXZlbnRzLXdp
dGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uLXJlc3VsdApAQCAtMCwwICsxLDQ5NyBAQAorIyMj
IEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kQ29tbWFuZHMuanMKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUgc2Ny
aXB0OiBKYXZhU2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySW5zcGVjdG9y
LnB5CisKKy8vIERhdGFiYXNlLgorSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRhdGFiYXNlRGlz
cGF0Y2hlciA9IEluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW5EaXNwYXRjaGVyLmJpbmQo
SW5zcGVjdG9yQmFja2VuZCwgIkRhdGFiYXNlIik7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVy
RXZlbnQoIkRhdGFiYXNlLmRpZEV4ZWN1dGVPcHRpb25hbFBhcmFtZXRlcnMiLCBbImNvbHVtbk5h
bWVzIiwgIm5vdGVzIiwgInRpbWVzdGFtcCIsICJ2YWx1ZXMiLCAicGF5bG9hZCIsICJzcWxFcnJv
ciIsICJzY3JlZW5Db2xvciIsICJwcmludENvbG9yIl0pOworSW5zcGVjdG9yQmFja2VuZC5yZWdp
c3RlckV2ZW50KCJEYXRhYmFzZS5kaWRFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMiLCBbImNv
bHVtbk5hbWVzIiwgIm5vdGVzIiwgInRpbWVzdGFtcCIsICJ2YWx1ZXMiLCAicGF5bG9hZCIsICJz
cWxFcnJvciIsICJzY3JlZW5Db2xvciIsICJwcmludENvbG9yIl0pOworIyMjIEVuZCBGaWxlOiBJ
bnNwZWN0b3JUZXN0QmFja2VuZENvbW1hbmRzLmpzCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0
b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnRzLXdpdGgt
b3B0aW9uYWwtcGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBKYXZhU2NyaXB0Q29y
ZS9yZXBsYXkvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5CisKKyNpZm5kZWYgSW5z
cGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVyc19oCisjZGVmaW5lIEluc3BlY3RvclRlc3RCYWNr
ZW5kRGlzcGF0Y2hlcnNfaAorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUgIklu
c3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuaCIKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordHlw
ZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisj
ZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKworI2VuZGlmIC8vICFkZWZpbmVkKEluc3BlY3Rv
clRlc3RCYWNrZW5kRGlzcGF0Y2hlcnNfaCkKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdEJh
Y2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0QmFja2Vu
ZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudHMtd2l0aC1vcHRpb25hbC1w
YXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IEphdmFTY3JpcHRDb3JlL3JlcGxheS9z
Y3JpcHRzL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2lmIEVOQUJM
RShJTlNQRUNUT1IpCisKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsLmg+CisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCit9IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyMj
IyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJl
Z2luIEZpbGU6IEluc3BlY3RvclRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUgc2Ny
aXB0OiBKYXZhU2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySW5zcGVjdG9y
LnB5CisKKyNpZm5kZWYgSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnNfaAorI2RlZmlu
ZSBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVyc19oCisKKyNpZiBFTkFCTEUoSU5TUEVD
VE9SKQorCisjaW5jbHVkZSAiSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5oIgorI2luY2x1ZGUg
PGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4KKyNpbmNsdWRlIDxpbnNwZWN0
b3IvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKwor
CisjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKK2NsYXNzIEluc3BlY3RvckRhdGFiYXNlRnJvbnRl
bmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICBJbnNwZWN0b3JEYXRhYmFzZUZyb250ZW5kRGlz
cGF0Y2hlcihJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5l
bCkgOiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbChpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwp
IHsgfQorICAgIHZvaWQgZGlkRXhlY3V0ZU9wdGlvbmFsUGFyYW1ldGVycyhQYXNzUmVmUHRyPElu
c3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5PFN0cmluZz4+IGNvbHVtbk5hbWVzLCBjb25zdCBT
dHJpbmcqIGNvbnN0IG5vdGVzLCBjb25zdCBkb3VibGUqIGNvbnN0IHRpbWVzdGFtcCwgUGFzc1Jl
ZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gdmFsdWVzLCBQYXNzUmVmUHRyPEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yVmFsdWU+IHBheWxvYWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpUeXBl
QnVpbGRlcjo6RGF0YWJhc2U6OkVycm9yPiBzcWxFcnJvciwgY29uc3QgSW5zcGVjdG9yOjpUeXBl
QnVpbGRlcjo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMqIGNvbnN0IHNjcmVlbkNvbG9yLCBjb25z
dCBTdHJpbmcqIGNvbnN0IHByaW50Q29sb3IpOworICAgIHZvaWQgZGlkRXhlY3V0ZU5vT3B0aW9u
YWxQYXJhbWV0ZXJzKFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk8U3Ry
aW5nPj4gY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgbm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAs
IFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IHZhbHVlcywgUGFzc1JlZlB0
cjxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiBwYXlsb2FkLCBQYXNzUmVmUHRyPEluc3BlY3Rv
cjo6VHlwZUJ1aWxkZXI6OkRhdGFiYXNlOjpFcnJvcj4gc3FsRXJyb3IsIGNvbnN0IEluc3BlY3Rv
cjo6VHlwZUJ1aWxkZXI6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzJiBzY3JlZW5Db2xvciwgY29u
c3QgU3RyaW5nJiBwcmludENvbG9yKTsKK3ByaXZhdGU6CisgICAgSW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsKiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKK307CisjZW5kaWYgLy8gRU5BQkxF
KFNRTF9EQVRBQkFTRSkKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBF
TkFCTEUoSU5TUEVDVE9SKQorCisjZW5kaWYgLy8gIWRlZmluZWQoSW5zcGVjdG9yVGVzdEZyb250
ZW5kRGlzcGF0Y2hlcnNfaCkKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlz
cGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0
Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRl
cnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogSmF2YVNjcmlwdENvcmUvcmVwbGF5L3NjcmlwdHMv
Q29kZUdlbmVyYXRvckluc3BlY3Rvci5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKKworI2lmIEVOQUJMRShJTlNQ
RUNUT1IpCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNw
ZWN0b3IgeworCisjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKK3ZvaWQgSW5zcGVjdG9yRGF0YWJh
c2VGcm9udGVuZERpc3BhdGNoZXI6OmRpZEV4ZWN1dGVPcHRpb25hbFBhcmFtZXRlcnMoUGFzc1Jl
ZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheTxTdHJpbmc+PiBjb2x1bW5OYW1lcywg
Y29uc3QgU3RyaW5nKiBjb25zdCBub3RlcywgY29uc3QgZG91YmxlKiBjb25zdCB0aW1lc3RhbXAs
IFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IHZhbHVlcywgUGFzc1JlZlB0
cjxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiBwYXlsb2FkLCBQYXNzUmVmUHRyPEluc3BlY3Rv
cjo6VHlwZUJ1aWxkZXI6OkRhdGFiYXNlOjpFcnJvcj4gc3FsRXJyb3IsIGNvbnN0IEluc3BlY3Rv
cjo6VHlwZUJ1aWxkZXI6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzKiBjb25zdCBzY3JlZW5Db2xv
ciwgY29uc3QgU3RyaW5nKiBjb25zdCBwcmludENvbG9yKQoreworICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IGpzb25NZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBq
c29uTWVzc2FnZS0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgibWV0aG9kIiksIEFTQ0lJTGl0ZXJh
bCgiRGF0YWJhc2UuZGlkRXhlY3V0ZU9wdGlvbmFsUGFyYW1ldGVycyIpKTsKKyAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgp
OworICAgIGlmIChjb2x1bW5OYW1lcykKKyAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRWYWx1ZShB
U0NJSUxpdGVyYWwoImNvbHVtbk5hbWVzIiksIGNvbHVtbk5hbWVzKTsKKyAgICBpZiAobm90ZXMp
CisgICAgICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgibm90ZXMiKSwg
Km5vdGVzKTsKKyAgICBpZiAodGltZXN0YW1wKQorICAgICAgICBwYXJhbXNPYmplY3QtPnNldE51
bWJlcihBU0NJSUxpdGVyYWwoInRpbWVzdGFtcCIpLCAqdGltZXN0YW1wKTsKKyAgICBpZiAodmFs
dWVzKQorICAgICAgICBwYXJhbXNPYmplY3QtPnNldE9iamVjdChBU0NJSUxpdGVyYWwoInZhbHVl
cyIpLCB2YWx1ZXMpOworICAgIGlmIChwYXlsb2FkKQorICAgICAgICBwYXJhbXNPYmplY3QtPnNl
dFZhbHVlKEFTQ0lJTGl0ZXJhbCgicGF5bG9hZCIpLCAqcGF5bG9hZCk7CisgICAgaWYgKHNxbEVy
cm9yKQorICAgICAgICBwYXJhbXNPYmplY3QtPnNldFZhbHVlKEFTQ0lJTGl0ZXJhbCgic3FsRXJy
b3IiKSwgc3FsRXJyb3IpOworICAgIGlmIChzY3JlZW5Db2xvcikKKyAgICAgICAgcGFyYW1zT2Jq
ZWN0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJzY3JlZW5Db2xvciIpLCAqc2NyZWVuQ29sb3Ip
OworICAgIGlmIChwcmludENvbG9yKQorICAgICAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZyhB
U0NJSUxpdGVyYWwoInByaW50Q29sb3IiKSwgKnByaW50Q29sb3IpOworICAgIGpzb25NZXNzYWdl
LT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJwYXJhbXMiKSwgcGFyYW1zT2JqZWN0KTsKKworICAg
IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQoanNvbk1l
c3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKK30KKwordm9pZCBJbnNwZWN0b3JEYXRhYmFzZUZyb250
ZW5kRGlzcGF0Y2hlcjo6ZGlkRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKFBhc3NSZWZQdHI8
SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk8U3RyaW5nPj4gY29sdW1uTmFtZXMsIGNvbnN0
IFN0cmluZyYgbm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJ
bnNwZWN0b3JPYmplY3Q+IHZhbHVlcywgUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvclZh
bHVlPiBwYXlsb2FkLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkRhdGFiYXNl
OjpFcnJvcj4gc3FsRXJyb3IsIGNvbnN0IEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkRhdGFiYXNl
OjpQcmltYXJ5Q29sb3JzJiBzY3JlZW5Db2xvciwgY29uc3QgU3RyaW5nJiBwcmludENvbG9yKQor
eworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGpzb25NZXNzYWdlID0gSW5zcGVjdG9yT2Jq
ZWN0OjpjcmVhdGUoKTsKKyAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgi
bWV0aG9kIiksIEFTQ0lJTGl0ZXJhbCgiRGF0YWJhc2UuZGlkRXhlY3V0ZU5vT3B0aW9uYWxQYXJh
bWV0ZXJzIikpOworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9IElu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgcGFyYW1zT2JqZWN0LT5zZXRWYWx1ZShBU0NJ
SUxpdGVyYWwoImNvbHVtbk5hbWVzIiksIGNvbHVtbk5hbWVzKTsKKyAgICBwYXJhbXNPYmplY3Qt
PnNldFN0cmluZyhBU0NJSUxpdGVyYWwoIm5vdGVzIiksIG5vdGVzKTsKKyAgICBwYXJhbXNPYmpl
Y3QtPnNldE51bWJlcihBU0NJSUxpdGVyYWwoInRpbWVzdGFtcCIpLCB0aW1lc3RhbXApOworICAg
IHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgidmFsdWVzIiksIHZhbHVlcyk7
CisgICAgcGFyYW1zT2JqZWN0LT5zZXRWYWx1ZShBU0NJSUxpdGVyYWwoInBheWxvYWQiKSwgcGF5
bG9hZCk7CisgICAgcGFyYW1zT2JqZWN0LT5zZXRWYWx1ZShBU0NJSUxpdGVyYWwoInNxbEVycm9y
IiksIHNxbEVycm9yKTsKKyAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwo
InNjcmVlbkNvbG9yIiksIHNjcmVlbkNvbG9yKTsKKyAgICBwYXJhbXNPYmplY3QtPnNldFN0cmlu
ZyhBU0NJSUxpdGVyYWwoInByaW50Q29sb3IiKSwgcHJpbnRDb2xvcik7CisgICAganNvbk1lc3Nh
Z2UtPnNldE9iamVjdChBU0NJSUxpdGVyYWwoInBhcmFtcyIpLCBwYXJhbXNPYmplY3QpOworCisg
ICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChqc29u
TWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOworfQorI2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJB
U0UpCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BF
Q1RPUikKKworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5j
cHAKKworIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuaAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRo
ZSBzY3JpcHQ6IEphdmFTY3JpcHRDb3JlL3JlcGxheS9zY3JpcHRzL0NvZGVHZW5lcmF0b3JJbnNw
ZWN0b3IucHkKKworI2lmbmRlZiBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzX2gKKyNkZWZpbmUg
SW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVyc19oCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisj
aW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckpTVHlwZUJ1aWxkZXJzLmg+CisjaW5jbHVkZSA8
aW5zcGVjdG9yL0luc3BlY3RvclR5cGVCdWlsZGVyLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlv
bnMuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9y
IHsKKworCisKK25hbWVzcGFjZSBUeXBlQnVpbGRlciB7CisKKy8vIEZvcndhcmQgZGVjbGFyYXRp
b25zLgorI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCituYW1lc3BhY2UgRGF0YWJhc2UgeworY2xh
c3MgRXJyb3I7Cit9IC8vIERhdGFiYXNlCisjZW5kaWYgLy8gRU5BQkxFKFNRTF9EQVRBQkFTRSkK
Ky8vIEVuZCBvZiBmb3J3YXJkIGRlY2xhcmF0aW9ucy4KKworCisvLyBUeXBlZGVmcy4KKyNpZiBF
TkFCTEUoU1FMX0RBVEFCQVNFKQorbmFtZXNwYWNlIERhdGFiYXNlIHsKKy8qIFVuaXF1ZSBpZGVu
dGlmaWVyIG9mIERhdGFiYXNlIG9iamVjdC4gKi8KK3R5cGVkZWYgU3RyaW5nIERhdGFiYXNlSWQ7
CisKK3R5cGVkZWYgU3RyaW5nIFByaW1hcnlDb2xvcnM7Cit9IC8vIERhdGFiYXNlCisjZW5kaWYg
Ly8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKKy8vIEVuZCBvZiB0eXBlZGVmcy4KKworU3RyaW5nIGdl
dFRlc3RFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
IFN0cmluZyBnZXRUZXN0RW51bUNvbnN0YW50VmFsdWUoVCBlbnVtVmFsdWUpCit7CisgICAgcmV0
dXJuIGdldFRlc3RFbnVtQ29uc3RhbnRWYWx1ZShzdGF0aWNfY2FzdDxpbnQ+KGVudW1WYWx1ZSkp
OworfQorCisjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKK25hbWVzcGFjZSBEYXRhYmFzZSB7Cisv
KiBEYXRhYmFzZSBlcnJvci4gKi8KK2NsYXNzIEVycm9yIDogcHVibGljIEluc3BlY3Rvcjo6SW5z
cGVjdG9yT2JqZWN0QmFzZSB7CitwdWJsaWM6CisgICAgZW51bSB7CisgICAgICAgIE5vRmllbGRz
U2V0ID0gMCwKKyAgICAgICAgTWVzc2FnZVNldCA9IDEgPDwgMCwKKyAgICAgICAgQ29kZVNldCA9
IDEgPDwgMSwKKyAgICAgICAgQWxsRmllbGRzU2V0ID0gKE1lc3NhZ2VTZXQgfCBDb2RlU2V0KQor
ICAgIH07CisKKyAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CisgICAgY2xhc3MgQnVpbGRlciB7Cisg
ICAgcHJpdmF0ZToKKyAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBt
X3Jlc3VsdDsKKworICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNU
RVA+JiBjYXN0U3RhdGUoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJw
cmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CisgICAgICAgIH0KKworICAg
ICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8LypFcnJvciovSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmpl
Y3Q+IHB0cikKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0g
Tm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CisgICAgICAg
ICAgICBtX3Jlc3VsdCA9IHB0cjsKKyAgICAgICAgfQorICAgICAgICBmcmllbmQgY2xhc3MgRXJy
b3I7CisgICAgcHVibGljOgorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBNZXNzYWdlU2V0PiYg
c2V0TWVzc2FnZShjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBD
T01QSUxFX0FTU0VSVCghKFNUQVRFICYgTWVzc2FnZVNldCksIHByb3BlcnR5X21lc3NhZ2VfYWxy
ZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwo
Im1lc3NhZ2UiKSwgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxNZXNzYWdl
U2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IENvZGVTZXQ+JiBz
ZXRDb2RlKGludCB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
IShTVEFURSAmIENvZGVTZXQpLCBwcm9wZXJ0eV9jb2RlX2FscmVhZHlfc2V0KTsKKyAgICAgICAg
ICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoQVNDSUlMaXRlcmFsKCJjb2RlIiksIHZhbHVlKTsKKyAg
ICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q29kZVNldD4oKTsKKyAgICAgICAgfQorCisgICAg
ICAgIG9wZXJhdG9yIFJlZlB0cjxFcnJvcj4mICgpCisgICAgICAgIHsKKyAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7
CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoRXJyb3IpID09IHNpemVvZihJbnNw
ZWN0b3I6Okluc3BlY3Rvck9iamVjdCksIGNhbm5vdF9jYXN0KTsKKyAgICAgICAgICAgIHJldHVy
biAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8RXJyb3I+Kj4oJm1fcmVzdWx0KTsKKyAgICAgICAg
fQorCisgICAgICAgIFBhc3NSZWZQdHI8RXJyb3I+IHJlbGVhc2UoKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gUmVmUHRyPEVycm9yPigqdGhpcykucmVsZWFzZSgpOworICAgICAgICB9
CisgICAgfTsKKworICAgIC8qCisgICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgorICAgICAq
IFJlZlB0cjxFcnJvcj4gcmVzdWx0ID0gRXJyb3I6OmNyZWF0ZSgpCisgICAgICogICAgIC5zZXRN
ZXNzYWdlKC4uLikKKyAgICAgKiAgICAgLnNldENvZGUoLi4uKTsKKyAgICAgKi8KKyAgICBzdGF0
aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBC
dWlsZGVyPE5vRmllbGRzU2V0PihJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkp
OworICAgIH0KKyAgICB0eXBlZGVmIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlN0cnVjdEl0ZW1U
cmFpdHMgSXRlbVRyYWl0czsKK307CisKK30gLy8gRGF0YWJhc2UKKyNlbmRpZiAvLyBFTkFCTEUo
U1FMX0RBVEFCQVNFKQorCisKKworfSAvLyBuYW1lc3BhY2UgVHlwZUJ1aWxkZXIKKworfSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorCisjZW5k
aWYgLy8gIWRlZmluZWQoSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVyc19oKQorIyMjIEVuZCBGaWxl
OiBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IEluc3BlY3Rv
clRlc3RUeXBlQnVpbGRlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlv
bmFsLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogSmF2YVNjcmlwdENvcmUvcmVw
bGF5L3NjcmlwdHMvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQorCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5oIgorCisjaWYgRU5BQkxF
KElOU1BFQ1RPUikKKworI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNl
IEluc3BlY3RvciB7CisKK25hbWVzcGFjZSBUeXBlQnVpbGRlciB7CisKK3N0YXRpYyBjb25zdCBj
aGFyKiBjb25zdCBlbnVtX2NvbnN0YW50X3ZhbHVlc1tdID0geworfTsKKworU3RyaW5nIGdldFRl
c3RFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSkgeworICAgIHJldHVybiBlbnVtX2NvbnN0YW50
X3ZhbHVlc1tjb2RlXTsKK30KKworCisKK30gLy8gbmFtZXNwYWNlIFR5cGVCdWlsZGVyCisKK30g
Ly8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKwor
IyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmNwcApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2Zh
aWwtb24tZHVwbGljYXRlLXR5cGUtZGVjbGFyYXRpb25zLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1kdXBs
aWNhdGUtdHlwZS1kZWNsYXJhdGlvbnMuanNvbi1lcnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40NDdjZGY4ZTI4
ZTg1NjYxMGEyNmY4MTU0OTQzZjM2Y2Y4YjdkMWY0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24t
ZHVwbGljYXRlLXR5cGUtZGVjbGFyYXRpb25zLmpzb24tZXJyb3IKQEAgLTAsMCArMSBAQAorRVJS
T1I6IER1cGxpY2F0ZSB0eXBlIGRlY2xhcmF0aW9uOiBSdW50aW1lLlJlbW90ZU9iamVjdElkCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
ZXhwZWN0ZWQvZmFpbC1vbi10eXBlLWRlY2xhcmF0aW9uLXVzaW5nLXR5cGUtcmVmZXJlbmNlLmpz
b24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
ZXhwZWN0ZWQvZmFpbC1vbi10eXBlLWRlY2xhcmF0aW9uLXVzaW5nLXR5cGUtcmVmZXJlbmNlLmpz
b24tZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNDJmNTc1M2E0Mzk2MTQ0ZWI1NjZjNWM1OTY4ZDA0OWFlYzYx
ODJkYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLXR5cGUtZGVjbGFyYXRpb24tdXNpbmctdHlw
ZS1yZWZlcmVuY2UuanNvbi1lcnJvcgpAQCAtMCwwICsxIEBACitFUlJPUjogVHlwZSByZWZlcmVu
Y2UgY2Fubm90IGhhdmUgYm90aCAndHlwZScgYW5kICckcmVmJyBrZXlzLgpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2Zh
aWwtb24tdHlwZS1kZWNsYXJhdGlvbi11c2luZy10eXBlLXJlZmVyZW5jZS5qc29uLXJlc3VsdCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9m
YWlsLW9uLXR5cGUtZGVjbGFyYXRpb24tdXNpbmctdHlwZS1yZWZlcmVuY2UuanNvbi1yZXN1bHQK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uM2VmNGI1M2RjMjllY2Y3MDZkNGQzMmY0OTUwZTliYTM4YmIwZjg5ZgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9leHBlY3RlZC9mYWlsLW9uLXR5cGUtZGVjbGFyYXRpb24tdXNpbmctdHlwZS1yZWZlcmVu
Y2UuanNvbi1yZXN1bHQKQEAgLTAsMCArMSwzNTEgQEAKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0
b3JUZXN0QmFja2VuZENvbW1hbmRzLmpzCisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGZhaWwtb24tdHlwZS1k
ZWNsYXJhdGlvbi11c2luZy10eXBlLXJlZmVyZW5jZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBK
YXZhU2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5Cisj
IyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kQ29tbWFuZHMuanMKKworIyMjIEJlZ2lu
IEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBmYWlsLW9uLXR5cGUtZGVjbGFyYXRpb24tdXNpbmctdHlwZS1yZWZlcmVuY2UuanNvbgorLy8g
YnkgdGhlIHNjcmlwdDogSmF2YVNjcmlwdENvcmUvcmVwbGF5L3NjcmlwdHMvQ29kZUdlbmVyYXRv
ckluc3BlY3Rvci5weQorCisjaWZuZGVmIEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnNf
aAorI2RlZmluZSBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzX2gKKworI2lmIEVOQUJM
RShJTlNQRUNUT1IpCisKKyNpbmNsdWRlICJJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmgiCisj
aW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVk
ZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKwor
bmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3R5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCit9
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisK
KyNlbmRpZiAvLyAhZGVmaW5lZChJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzX2gpCisj
IyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVn
aW4gRmlsZTogSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gZmFpbC1vbi10eXBlLWRlY2xhcmF0aW9uLXVzaW5nLXR5cGUtcmVmZXJlbmNlLmpzb24K
Ky8vIGJ5IHRoZSBzY3JpcHQ6IEphdmFTY3JpcHRDb3JlL3JlcGxheS9zY3JpcHRzL0NvZGVHZW5l
cmF0b3JJbnNwZWN0b3IucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkluc3Bl
Y3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisK
KyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLmg+CisjaW5jbHVk
ZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJp
bmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyMjIyBFbmQgRmlsZTogSW5z
cGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IEluc3Bl
Y3RvclRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZmFpbC1vbi10
eXBlLWRlY2xhcmF0aW9uLXVzaW5nLXR5cGUtcmVmZXJlbmNlLmpzb24KKy8vIGJ5IHRoZSBzY3Jp
cHQ6IEphdmFTY3JpcHRDb3JlL3JlcGxheS9zY3JpcHRzL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3Iu
cHkKKworI2lmbmRlZiBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVyc19oCisjZGVmaW5l
IEluc3BlY3RvclRlc3RGcm9udGVuZERpc3BhdGNoZXJzX2gKKworI2lmIEVOQUJMRShJTlNQRUNU
T1IpCisKKyNpbmNsdWRlICJJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmgiCisjaW5jbHVkZSA8
aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oPgorI2luY2x1ZGUgPGluc3BlY3Rv
ci9JbnNwZWN0b3JWYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisK
K30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikK
KworI2VuZGlmIC8vICFkZWZpbmVkKEluc3BlY3RvclRlc3RGcm9udGVuZERpc3BhdGNoZXJzX2gp
CisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKworIyMj
IEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBmYWlsLW9uLXR5cGUtZGVjbGFyYXRpb24tdXNpbmctdHlwZS1yZWZlcmVuY2Uu
anNvbgorLy8gYnkgdGhlIHNjcmlwdDogSmF2YVNjcmlwdENvcmUvcmVwbGF5L3NjcmlwdHMvQ29k
ZUdlbmVyYXRvckluc3BlY3Rvci5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
SW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKKworI2lmIEVOQUJMRShJTlNQRUNU
T1IpCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0
b3IgeworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQ
RUNUT1IpCisKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMu
Y3BwCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmgKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gZmFpbC1vbi10eXBlLWRlY2xhcmF0aW9uLXVzaW5nLXR5cGUtcmVmZXJlbmNl
Lmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IEphdmFTY3JpcHRDb3JlL3JlcGxheS9zY3JpcHRzL0Nv
ZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKKworI2lmbmRlZiBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxk
ZXJzX2gKKyNkZWZpbmUgSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVyc19oCisKKyNpZiBFTkFCTEUo
SU5TUEVDVE9SKQorCisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckpTVHlwZUJ1aWxkZXJz
Lmg+CisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclR5cGVCdWlsZGVyLmg+CisjaW5jbHVk
ZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorCituYW1l
c3BhY2UgSW5zcGVjdG9yIHsKKworCisKK25hbWVzcGFjZSBUeXBlQnVpbGRlciB7CisKKy8vIEZv
cndhcmQgZGVjbGFyYXRpb25zLgorbmFtZXNwYWNlIFJ1bnRpbWUgeworY2xhc3MgUmVtb3RlT2Jq
ZWN0SWQ7Cit9IC8vIFJ1bnRpbWUKKy8vIEVuZCBvZiBmb3J3YXJkIGRlY2xhcmF0aW9ucy4KKwor
CisKKworU3RyaW5nIGdldFRlc3RFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSk7CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+IFN0cmluZyBnZXRUZXN0RW51bUNvbnN0YW50VmFsdWUoVCBlbnVtVmFs
dWUpCit7CisgICAgcmV0dXJuIGdldFRlc3RFbnVtQ29uc3RhbnRWYWx1ZShzdGF0aWNfY2FzdDxp
bnQ+KGVudW1WYWx1ZSkpOworfQorCisKKworfSAvLyBuYW1lc3BhY2UgVHlwZUJ1aWxkZXIKKwor
fSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQor
CisjZW5kaWYgLy8gIWRlZmluZWQoSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVyc19oKQorIyMjIEVu
ZCBGaWxlOiBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IElu
c3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGZhaWwtb24tdHlw
ZS1kZWNsYXJhdGlvbi11c2luZy10eXBlLXJlZmVyZW5jZS5qc29uCisvLyBieSB0aGUgc2NyaXB0
OiBKYXZhU2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JUZXN0VHlwZUJ1aWxk
ZXJzLmgiCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworbmFtZXNwYWNlIFR5cGVCdWlsZGVy
IHsKKworc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGVudW1fY29uc3RhbnRfdmFsdWVzW10gPSB7
Cit9OworCitTdHJpbmcgZ2V0VGVzdEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKSB7CisgICAg
cmV0dXJuIGVudW1fY29uc3RhbnRfdmFsdWVzW2NvZGVdOworfQorCisKKworfSAvLyBuYW1lc3Bh
Y2UgVHlwZUJ1aWxkZXIKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBF
TkFCTEUoSU5TUEVDVE9SKQorCisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RUeXBlQnVpbGRl
cnMuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi11bmtub3duLXR5cGUtcmVmZXJlbmNlLWluLXR5cGUt
ZGVjbGFyYXRpb24uanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2UtaW4t
dHlwZS1kZWNsYXJhdGlvbi5qc29uLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQzYzc4MmQ4OWRiNTY1ZDcy
NGU3NTQwZTMyZWRjZmRiZDc5YTJmNzMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi11bmtub3du
LXR5cGUtcmVmZXJlbmNlLWluLXR5cGUtZGVjbGFyYXRpb24uanNvbi1lcnJvcgpAQCAtMCwwICsx
IEBACitFUlJPUjogTG9va3VwIGZhaWxlZCBmb3IgdHlwZSByZWZlcmVuY2U6IGRyYWdvbiAocmVm
ZXJlbmNlZCBmcm9tIGRvbWFpbjogUnVudGltZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLXVua25vd24t
dHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1tZW1iZXIuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLXVua25vd24t
dHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1tZW1iZXIuanNvbi1lcnJvcgpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mYWY2
NjcyY2JlZjA5NjMwZmQ5YmU4ZmZhZGFjZTEyYzU2MTFjY2E4Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2Zh
aWwtb24tdW5rbm93bi10eXBlLXJlZmVyZW5jZS1pbi10eXBlLW1lbWJlci5qc29uLWVycm9yCkBA
IC0wLDAgKzEgQEAKK0VSUk9SOiBMb29rdXAgZmFpbGVkIGZvciB0eXBlIHJlZmVyZW5jZTogQ29s
b3IgKHJlZmVyZW5jZWQgZnJvbSBkb21haW46IEZhbnRhc3kpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvc2FtZS10eXBl
LWlkLWRpZmZlcmVudC1kb21haW4uanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9zYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRv
bWFpbi5qc29uLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmIxMzA0ZjNkYmMxNzhkNTZmMjU1Y2IzYjdjOWYw
ODZmNzk5NTZhMDYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21h
aW4uanNvbi1lcnJvcgpAQCAtMCwwICsxIEBACitFUlJPUjogV2hlbiBwYXJzaW5nIGRvbWFpbiwg
cmVxdWlyZWQgcHJvcGVydHkgbWlzc2luZzogZG9tYWluCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvc2FtZS10eXBlLWlk
LWRpZmZlcmVudC1kb21haW4uanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21h
aW4uanNvbi1yZXN1bHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjUwYmE1NDhmN2ZlNzk2Nzg5NDU5NWRjZGVhM2Mz
ZGViZmU1ZTQ5ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9zYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFp
bi5qc29uLXJlc3VsdApAQCAtMCwwICsxLDM1NiBAQAorIyMjIEJlZ2luIEZpbGU6IEluc3BlY3Rv
clRlc3RCYWNrZW5kQ29tbWFuZHMuanMKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2FtZS10eXBlLWlkLWRp
ZmZlcmVudC1kb21haW4uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogSmF2YVNjcmlwdENvcmUvcmVw
bGF5L3NjcmlwdHMvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQorIyMjIEVuZCBGaWxlOiBJbnNw
ZWN0b3JUZXN0QmFja2VuZENvbW1hbmRzLmpzCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JU
ZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2FtZS10eXBlLWlkLWRp
ZmZlcmVudC1kb21haW4uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogSmF2YVNjcmlwdENvcmUvcmVw
bGF5L3NjcmlwdHMvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQorCisjaWZuZGVmIEluc3BlY3Rv
clRlc3RCYWNrZW5kRGlzcGF0Y2hlcnNfaAorI2RlZmluZSBJbnNwZWN0b3JUZXN0QmFja2VuZERp
c3BhdGNoZXJzX2gKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRlICJJbnNwZWN0
b3JUZXN0VHlwZUJ1aWxkZXJzLmgiCisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3R5cGVkZWYg
U3RyaW5nIEVycm9yU3RyaW5nOworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlm
IC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyNlbmRpZiAvLyAhZGVmaW5lZChJbnNwZWN0b3JUZXN0
QmFja2VuZERpc3BhdGNoZXJzX2gpCisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5k
RGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNw
YXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21h
aW4uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogSmF2YVNjcmlwdENvcmUvcmVwbGF5L3NjcmlwdHMv
Q29kZUdlbmVyYXRvckluc3BlY3Rvci5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaWYgRU5BQkxFKElOU1BF
Q1RPUikKKworI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4K
KyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKK30gLy8gbmFtZXNw
YWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKworIyMjIEVuZCBG
aWxlOiBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmls
ZTogSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBz
YW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBKYXZh
U2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5CisKKyNp
Zm5kZWYgSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnNfaAorI2RlZmluZSBJbnNwZWN0
b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVyc19oCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisj
aW5jbHVkZSAiSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5oIgorI2luY2x1ZGUgPGluc3BlY3Rv
ci9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4KKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVj
dG9yVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCit9IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyNlbmRp
ZiAvLyAhZGVmaW5lZChJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVyc19oKQorIyMjIEVu
ZCBGaWxlOiBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBG
aWxlOiBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisv
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbgorLy8gYnkgdGhlIHNjcmlwdDog
SmF2YVNjcmlwdENvcmUvcmVwbGF5L3NjcmlwdHMvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlz
cGF0Y2hlcnMuaCIKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit9IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyMjIyBFbmQgRmlsZTog
SW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBJ
bnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2FtZS10eXBlLWlk
LWRpZmZlcmVudC1kb21haW4uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogSmF2YVNjcmlwdENvcmUv
cmVwbGF5L3NjcmlwdHMvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQorCisjaWZuZGVmIEluc3Bl
Y3RvclRlc3RUeXBlQnVpbGRlcnNfaAorI2RlZmluZSBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJz
X2gKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVj
dG9ySlNUeXBlQnVpbGRlcnMuaD4KKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVHlwZUJ1
aWxkZXIuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9QYXNz
UmVmUHRyLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworbmFtZXNwYWNlIFR5cGVC
dWlsZGVyIHsKKworCisKKy8vIFR5cGVkZWZzLgorbmFtZXNwYWNlIFJ1bnRpbWUgeworLyogVW5p
cXVlIG9iamVjdCBpZGVudGlmaWVyLiAqLwordHlwZWRlZiBTdHJpbmcgUmVtb3RlT2JqZWN0SWQ7
Cit9IC8vIFJ1bnRpbWUKKworbmFtZXNwYWNlIFJ1bnRpbWUyIHsKKy8qIFVuaXF1ZSBvYmplY3Qg
aWRlbnRpZmllci4gKi8KK3R5cGVkZWYgU3RyaW5nIFJlbW90ZU9iamVjdElkOworfSAvLyBSdW50
aW1lMgorLy8gRW5kIG9mIHR5cGVkZWZzLgorCitTdHJpbmcgZ2V0VGVzdEVudW1Db25zdGFudFZh
bHVlKGludCBjb2RlKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gU3RyaW5nIGdldFRlc3RFbnVt
Q29uc3RhbnRWYWx1ZShUIGVudW1WYWx1ZSkKK3sKKyAgICByZXR1cm4gZ2V0VGVzdEVudW1Db25z
dGFudFZhbHVlKHN0YXRpY19jYXN0PGludD4oZW51bVZhbHVlKSk7Cit9CisKKworCit9IC8vIG5h
bWVzcGFjZSBUeXBlQnVpbGRlcgorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlm
IC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyNlbmRpZiAvLyAhZGVmaW5lZChJbnNwZWN0b3JUZXN0
VHlwZUJ1aWxkZXJzX2gpCisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMu
aAorCisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5jcHAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbgorLy8gYnkgdGhl
IHNjcmlwdDogSmF2YVNjcmlwdENvcmUvcmVwbGF5L3NjcmlwdHMvQ29kZUdlbmVyYXRvckluc3Bl
Y3Rvci5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yVGVzdFR5
cGVCdWlsZGVycy5oIgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUgPHd0Zi90
ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK25hbWVzcGFjZSBUeXBl
QnVpbGRlciB7CisKK3N0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBlbnVtX2NvbnN0YW50X3ZhbHVl
c1tdID0geworfTsKKworU3RyaW5nIGdldFRlc3RFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSkg
eworICAgIHJldHVybiBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb2RlXTsKK30KKworCisKK30gLy8g
bmFtZXNwYWNlIFR5cGVCdWlsZGVyCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5k
aWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0VHlw
ZUJ1aWxkZXJzLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRp
dmUtdHlwZS5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5
cGUuanNvbi1yZXN1bHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzRkMmE3MmNjZjE3NWQ2NTNlYjg3YWRhMzg4YWYy
MGQ3YTFjNDc1OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJp
bWl0aXZlLXR5cGUuanNvbi1yZXN1bHQKQEAgLTAsMCArMSwzNTEgQEAKKyMjIyBCZWdpbiBGaWxl
OiBJbnNwZWN0b3JUZXN0QmFja2VuZENvbW1hbmRzLmpzCisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUt
ZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0
OiBKYXZhU2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5
CisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kQ29tbWFuZHMuanMKKworIyMjIEJl
Z2luIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
Ky8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbgorLy8gYnkg
dGhlIHNjcmlwdDogSmF2YVNjcmlwdENvcmUvcmVwbGF5L3NjcmlwdHMvQ29kZUdlbmVyYXRvcklu
c3BlY3Rvci5weQorCisjaWZuZGVmIEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnNfaAor
I2RlZmluZSBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzX2gKKworI2lmIEVOQUJMRShJ
TlNQRUNUT1IpCisKKyNpbmNsdWRlICJJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmgiCisjaW5j
bHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8
d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFt
ZXNwYWNlIEluc3BlY3RvciB7CisKK3R5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCit9IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyNl
bmRpZiAvLyAhZGVmaW5lZChJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzX2gpCisjIyMg
RW5kIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4g
RmlsZTogSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisv
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24KKy8vIGJ5IHRo
ZSBzY3JpcHQ6IEphdmFTY3JpcHRDb3JlL3JlcGxheS9zY3JpcHRzL0NvZGVHZW5lcmF0b3JJbnNw
ZWN0b3IucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkluc3BlY3RvclRlc3RC
YWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRl
IDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLmg+CisjaW5jbHVkZSA8aW5zcGVj
dG9yL0luc3BlY3RvclZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKwor
bmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKwor
I2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVz
dEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RG
cm9udGVuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1h
bGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IEphdmFTY3JpcHRD
b3JlL3JlcGxheS9zY3JpcHRzL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKKworI2lmbmRlZiBJ
bnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVyc19oCisjZGVmaW5lIEluc3BlY3RvclRlc3RG
cm9udGVuZERpc3BhdGNoZXJzX2gKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRl
ICJJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmgiCisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbC5oPgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1
ZXMuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKK30gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKworI2VuZGlmIC8vICFk
ZWZpbmVkKEluc3BlY3RvclRlc3RGcm9udGVuZERpc3BhdGNoZXJzX2gpCisjIyMgRW5kIEZpbGU6
IEluc3BlY3RvclRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IElu
c3BlY3RvclRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBl
LWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlw
dDogSmF2YVNjcmlwdENvcmUvcmVwbGF5L3NjcmlwdHMvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5w
eQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yVGVzdEZyb250ZW5k
RGlzcGF0Y2hlcnMuaCIKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRlIDx3dGYv
dGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit9IC8vIG5hbWVzcGFj
ZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyMjIyBFbmQgRmls
ZTogSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxl
OiBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNs
YXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IEph
dmFTY3JpcHRDb3JlL3JlcGxheS9zY3JpcHRzL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKKwor
I2lmbmRlZiBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzX2gKKyNkZWZpbmUgSW5zcGVjdG9yVGVz
dFR5cGVCdWlsZGVyc19oCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSA8aW5z
cGVjdG9yL0luc3BlY3RvckpTVHlwZUJ1aWxkZXJzLmg+CisjaW5jbHVkZSA8aW5zcGVjdG9yL0lu
c3BlY3RvclR5cGVCdWlsZGVyLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNs
dWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKK25h
bWVzcGFjZSBUeXBlQnVpbGRlciB7CisKKworCisvLyBUeXBlZGVmcy4KK25hbWVzcGFjZSBSdW50
aW1lIHsKKy8qIFVuaXF1ZSBvYmplY3QgaWRlbnRpZmllci4gKi8KK3R5cGVkZWYgaW50IFJlbW90
ZU9iamVjdElkOworfSAvLyBSdW50aW1lCisvLyBFbmQgb2YgdHlwZWRlZnMuCisKK1N0cmluZyBn
ZXRUZXN0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBTdHJpbmcgZ2V0VGVzdEVudW1Db25zdGFudFZhbHVlKFQgZW51bVZhbHVlKQoreworICAgIHJl
dHVybiBnZXRUZXN0RW51bUNvbnN0YW50VmFsdWUoc3RhdGljX2Nhc3Q8aW50PihlbnVtVmFsdWUp
KTsKK30KKworCisKK30gLy8gbmFtZXNwYWNlIFR5cGVCdWlsZGVyCisKK30gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKworI2VuZGlmIC8vICFk
ZWZpbmVkKEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnNfaCkKKyMjIyBFbmQgRmlsZTogSW5zcGVj
dG9yVGVzdFR5cGVCdWlsZGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0VHlw
ZUJ1aWxkZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQt
cHJpbWl0aXZlLXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogSmF2YVNjcmlwdENvcmUvcmVw
bGF5L3NjcmlwdHMvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQorCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5oIgorCisjaWYgRU5BQkxF
KElOU1BFQ1RPUikKKworI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNl
IEluc3BlY3RvciB7CisKK25hbWVzcGFjZSBUeXBlQnVpbGRlciB7CisKK3N0YXRpYyBjb25zdCBj
aGFyKiBjb25zdCBlbnVtX2NvbnN0YW50X3ZhbHVlc1tdID0geworfTsKKworU3RyaW5nIGdldFRl
c3RFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSkgeworICAgIHJldHVybiBlbnVtX2NvbnN0YW50
X3ZhbHVlc1tjb2RlXTsKK30KKworCisKK30gLy8gbmFtZXNwYWNlIFR5cGVCdWlsZGVyCisKK30g
Ly8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKwor
IyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmNwcApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5
cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tYXJy
YXktdHlwZS5qc29uLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmIwMGI0NjJjMDlhMDRhMmY0NjkwMDJhOWMx
YThiYzcxY2QyODBhZjAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10
eXBlLmpzb24tZXJyb3IKQEAgLTAsMCArMSBAQAorRVJST1I6IExvb2t1cCBmYWlsZWQgZm9yIHR5
cGUgcmVmZXJlbmNlOiBlbnVtIChyZWZlcmVuY2VkIGZyb20gZG9tYWluOiBEZWJ1Z2dlcikKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9l
eHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbi1yZXN1bHQgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNs
YXJhdGlvbi1hcnJheS10eXBlLmpzb24tcmVzdWx0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFmZDQ1YWYzZmJmMWM2
ZGJjZTdmYzNlYWNmYjVjYjMxNzkwYWQzNTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJh
dGlvbi1hcnJheS10eXBlLmpzb24tcmVzdWx0CkBAIC0wLDAgKzEsMzc0IEBACisjIyMgQmVnaW4g
RmlsZTogSW5zcGVjdG9yVGVzdEJhY2tlbmRDb21tYW5kcy5qcworLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0
eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogSmF2YVNj
cmlwdENvcmUvcmVwbGF5L3NjcmlwdHMvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQorCisvLyBE
ZWJ1Z2dlci4KK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFbnVtKCJEZWJ1Z2dlci5SZWFzb24i
LCB7RGllZDogIkRpZWQiLCBGYWludGVkOiAiRmFpbnRlZCIsIEh1bmdyeTogIkh1bmdyeSJ9KTsK
KyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdEJhY2tlbmRDb21tYW5kcy5qcworCisjIyMgQmVn
aW4gRmlsZTogSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIHR5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBK
YXZhU2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5CisK
KyNpZm5kZWYgSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVyc19oCisjZGVmaW5lIEluc3Bl
Y3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnNfaAorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKwor
I2luY2x1ZGUgIkluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuaCIKKyNpbmNsdWRlIDxpbnNwZWN0
b3IvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0
ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVj
dG9yIHsKKwordHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKK30gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKworI2VuZGlmIC8vICFkZWZp
bmVkKEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnNfaCkKKyMjIyBFbmQgRmlsZTogSW5z
cGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0
b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xh
cmF0aW9uLWFycmF5LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogSmF2YVNjcmlwdENvcmUv
cmVwbGF5L3NjcmlwdHMvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQorCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisj
aWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwuaD4KKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwor
CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RP
UikKKworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAor
CisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbgorLy8gYnkgdGhl
IHNjcmlwdDogSmF2YVNjcmlwdENvcmUvcmVwbGF5L3NjcmlwdHMvQ29kZUdlbmVyYXRvckluc3Bl
Y3Rvci5weQorCisjaWZuZGVmIEluc3BlY3RvclRlc3RGcm9udGVuZERpc3BhdGNoZXJzX2gKKyNk
ZWZpbmUgSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnNfaAorCisjaWYgRU5BQkxFKElO
U1BFQ1RPUikKKworI2luY2x1ZGUgIkluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuaCIKKyNpbmNs
dWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLmg+CisjaW5jbHVkZSA8aW5z
cGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3Igewor
CisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVD
VE9SKQorCisjZW5kaWYgLy8gIWRlZmluZWQoSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hl
cnNfaCkKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAor
CisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uCisvLyBieSB0
aGUgc2NyaXB0OiBKYXZhU2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySW5z
cGVjdG9yLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JUZXN0
RnJvbnRlbmREaXNwYXRjaGVycy5oIgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK30gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKworIyMj
IEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJl
Z2luIEZpbGU6IEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuaAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0
eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogSmF2YVNj
cmlwdENvcmUvcmVwbGF5L3NjcmlwdHMvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQorCisjaWZu
ZGVmIEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnNfaAorI2RlZmluZSBJbnNwZWN0b3JUZXN0VHlw
ZUJ1aWxkZXJzX2gKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRlIDxpbnNwZWN0
b3IvSW5zcGVjdG9ySlNUeXBlQnVpbGRlcnMuaD4KKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVj
dG9yVHlwZUJ1aWxkZXIuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUg
PHd0Zi9QYXNzUmVmUHRyLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworbmFtZXNw
YWNlIFR5cGVCdWlsZGVyIHsKKworLy8gRm9yd2FyZCBkZWNsYXJhdGlvbnMuCituYW1lc3BhY2Ug
RGVidWdnZXIgeworZW51bSBjbGFzcyBSZWFzb247Cit9IC8vIERlYnVnZ2VyCisvLyBFbmQgb2Yg
Zm9yd2FyZCBkZWNsYXJhdGlvbnMuCisKKworLy8gVHlwZWRlZnMuCituYW1lc3BhY2UgRGVidWdn
ZXIgewordHlwZWRlZiBpbnQgQnJlYWtwb2ludElkOworfSAvLyBEZWJ1Z2dlcgorCituYW1lc3Bh
Y2UgUnVudGltZSB7Cit0eXBlZGVmIGludCBPYmplY3RJZDsKK30gLy8gUnVudGltZQorLy8gRW5k
IG9mIHR5cGVkZWZzLgorCitTdHJpbmcgZ2V0VGVzdEVudW1Db25zdGFudFZhbHVlKGludCBjb2Rl
KTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gU3RyaW5nIGdldFRlc3RFbnVtQ29uc3RhbnRWYWx1
ZShUIGVudW1WYWx1ZSkKK3sKKyAgICByZXR1cm4gZ2V0VGVzdEVudW1Db25zdGFudFZhbHVlKHN0
YXRpY19jYXN0PGludD4oZW51bVZhbHVlKSk7Cit9CisKK25hbWVzcGFjZSBEZWJ1Z2dlciB7Cisv
KiAgKi8KK2VudW0gY2xhc3MgUmVhc29uIHsKKyAgICBEaWVkID0gMCwKKyAgICBGYWludGVkID0g
MSwKKyAgICBIdW5ncnkgPSAyLAorfTsgLy8gZW51bSBjbGFzcyBSZWFzb24KK30gLy8gRGVidWdn
ZXIKKworCisKK30gLy8gbmFtZXNwYWNlIFR5cGVCdWlsZGVyCisKK30gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKworI2VuZGlmIC8vICFkZWZp
bmVkKEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnNfaCkKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9y
VGVzdFR5cGVCdWlsZGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0VHlwZUJ1
aWxkZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUu
anNvbgorLy8gYnkgdGhlIHNjcmlwdDogSmF2YVNjcmlwdENvcmUvcmVwbGF5L3NjcmlwdHMvQ29k
ZUdlbmVyYXRvckluc3BlY3Rvci5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
SW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5oIgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKwor
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisK
K25hbWVzcGFjZSBUeXBlQnVpbGRlciB7CisKK3N0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBlbnVt
X2NvbnN0YW50X3ZhbHVlc1tdID0geworICAgICJEaWVkIiwKKyAgICAiRmFpbnRlZCIsCisgICAg
Ikh1bmdyeSIsCit9OworCitTdHJpbmcgZ2V0VGVzdEVudW1Db25zdGFudFZhbHVlKGludCBjb2Rl
KSB7CisgICAgcmV0dXJuIGVudW1fY29uc3RhbnRfdmFsdWVzW2NvZGVdOworfQorCisKKworfSAv
LyBuYW1lc3BhY2UgVHlwZUJ1aWxkZXIKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNl
bmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorCisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RU
eXBlQnVpbGRlcnMuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNv
bi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
ZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbi1yZXN1bHQKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uOTdiN2RjNjczY2E5NzczNjYyZWQxN2JjMTY2YzlhYzMyZTdlYTYzZQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBl
Y3RlZC90eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uLXJlc3VsdApAQCAtMCwwICsxLDM5
MSBAQAorIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kQ29tbWFuZHMuanMKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgorLy8gYnkgdGhl
IHNjcmlwdDogSmF2YVNjcmlwdENvcmUvcmVwbGF5L3NjcmlwdHMvQ29kZUdlbmVyYXRvckluc3Bl
Y3Rvci5weQorCisvLyBSdW50aW1lLgorSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckVudW0oIlJ1
bnRpbWUuTHVja3lOdW1iZXJzIiwge05vbmU6ICIwIiwgTm9uZTogIjEiLCBOb25lOiAiMiJ9KTsK
K0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFbnVtKCJSdW50aW1lLkZhcm1BbmltYWxzIiwge1Bp
Z3M6ICJQaWdzIiwgQ293czogIkNvd3MiLCBDYXRzOiAiQ2F0cyIsIEhlbnM6ICJIZW5zIn0pOwor
SW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckVudW0oIlJ1bnRpbWUuVHdvTGVnZ2VkQW5pbWFscyIs
IHtEdWNrczogIkR1Y2tzIiwgSGVuczogIkhlbnMiLCBDcm93czogIkNyb3dzIiwgRmxhbWluZ29z
OiAiRmxhbWluZ29zIn0pOworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0QmFja2VuZENvbW1h
bmRzLmpzCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJz
LmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgorLy8g
YnkgdGhlIHNjcmlwdDogSmF2YVNjcmlwdENvcmUvcmVwbGF5L3NjcmlwdHMvQ29kZUdlbmVyYXRv
ckluc3BlY3Rvci5weQorCisjaWZuZGVmIEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnNf
aAorI2RlZmluZSBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzX2gKKworI2lmIEVOQUJM
RShJTlNQRUNUT1IpCisKKyNpbmNsdWRlICJJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmgiCisj
aW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVk
ZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKwor
bmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3R5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCit9
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisK
KyNlbmRpZiAvLyAhZGVmaW5lZChJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzX2gpCisj
IyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVn
aW4gRmlsZTogSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDog
SmF2YVNjcmlwdENvcmUvcmVwbGF5L3NjcmlwdHMvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNw
YXRjaGVycy5oIgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUgPGluc3BlY3Rv
ci9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4KKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVj
dG9yVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8g
RU5BQkxFKElOU1BFQ1RPUikKKworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0QmFja2VuZERp
c3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlz
cGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5q
c29uCisvLyBieSB0aGUgc2NyaXB0OiBKYXZhU2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0cy9Db2Rl
R2VuZXJhdG9ySW5zcGVjdG9yLnB5CisKKyNpZm5kZWYgSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlz
cGF0Y2hlcnNfaAorI2RlZmluZSBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVyc19oCisK
KyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSAiSW5zcGVjdG9yVGVzdFR5cGVCdWls
ZGVycy5oIgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4K
KyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL1Bh
c3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNl
IEluc3BlY3RvciB7CisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8v
IEVOQUJMRShJTlNQRUNUT1IpCisKKyNlbmRpZiAvLyAhZGVmaW5lZChJbnNwZWN0b3JUZXN0RnJv
bnRlbmREaXNwYXRjaGVyc19oKQorIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0RnJvbnRlbmRE
aXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNw
YXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUu
anNvbgorLy8gYnkgdGhlIHNjcmlwdDogSmF2YVNjcmlwdENvcmUvcmVwbGF5L3NjcmlwdHMvQ29k
ZUdlbmVyYXRvckluc3BlY3Rvci5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
SW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKKworI2lmIEVOQUJMRShJTlNQRUNU
T1IpCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0
b3IgeworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQ
RUNUT1IpCisKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMu
Y3BwCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmgKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgorLy8gYnkgdGhlIHNj
cmlwdDogSmF2YVNjcmlwdENvcmUvcmVwbGF5L3NjcmlwdHMvQ29kZUdlbmVyYXRvckluc3BlY3Rv
ci5weQorCisjaWZuZGVmIEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnNfaAorI2RlZmluZSBJbnNw
ZWN0b3JUZXN0VHlwZUJ1aWxkZXJzX2gKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNs
dWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9ySlNUeXBlQnVpbGRlcnMuaD4KKyNpbmNsdWRlIDxpbnNw
ZWN0b3IvSW5zcGVjdG9yVHlwZUJ1aWxkZXIuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5o
PgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3Igewor
CisKKworbmFtZXNwYWNlIFR5cGVCdWlsZGVyIHsKKworLy8gRm9yd2FyZCBkZWNsYXJhdGlvbnMu
CituYW1lc3BhY2UgUnVudGltZSB7CitlbnVtIGNsYXNzIEZhcm1BbmltYWxzOworZW51bSBjbGFz
cyBMdWNreU51bWJlcnM7CitlbnVtIGNsYXNzIFR3b0xlZ2dlZEFuaW1hbHM7Cit9IC8vIFJ1bnRp
bWUKKy8vIEVuZCBvZiBmb3J3YXJkIGRlY2xhcmF0aW9ucy4KKworCisKKworU3RyaW5nIGdldFRl
c3RFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IFN0
cmluZyBnZXRUZXN0RW51bUNvbnN0YW50VmFsdWUoVCBlbnVtVmFsdWUpCit7CisgICAgcmV0dXJu
IGdldFRlc3RFbnVtQ29uc3RhbnRWYWx1ZShzdGF0aWNfY2FzdDxpbnQ+KGVudW1WYWx1ZSkpOwor
fQorCituYW1lc3BhY2UgUnVudGltZSB7CisvKiAgKi8KK2VudW0gY2xhc3MgTHVja3lOdW1iZXJz
IHsKKyAgICBOb25lID0gMCwKKyAgICBOb25lID0gMSwKKyAgICBOb25lID0gMiwKK307IC8vIGVu
dW0gY2xhc3MgTHVja3lOdW1iZXJzCisvKiAgKi8KK2VudW0gY2xhc3MgRmFybUFuaW1hbHMgewor
ICAgIFBpZ3MgPSAzLAorICAgIENvd3MgPSA0LAorICAgIENhdHMgPSA1LAorICAgIEhlbnMgPSA2
LAorfTsgLy8gZW51bSBjbGFzcyBGYXJtQW5pbWFscworLyogICovCitlbnVtIGNsYXNzIFR3b0xl
Z2dlZEFuaW1hbHMgeworICAgIER1Y2tzID0gNywKKyAgICBIZW5zID0gNiwKKyAgICBDcm93cyA9
IDgsCisgICAgRmxhbWluZ29zID0gOSwKK307IC8vIGVudW0gY2xhc3MgVHdvTGVnZ2VkQW5pbWFs
cworfSAvLyBSdW50aW1lCisKKworCit9IC8vIG5hbWVzcGFjZSBUeXBlQnVpbGRlcgorCit9IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyNl
bmRpZiAvLyAhZGVmaW5lZChJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzX2gpCisjIyMgRW5kIEZp
bGU6IEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogSW5zcGVj
dG9yVGVzdFR5cGVCdWlsZGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlv
bi1lbnVtLXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogSmF2YVNjcmlwdENvcmUvcmVwbGF5
L3NjcmlwdHMvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQorCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5oIgorCisjaWYgRU5BQkxFKElO
U1BFQ1RPUikKKworI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIElu
c3BlY3RvciB7CisKK25hbWVzcGFjZSBUeXBlQnVpbGRlciB7CisKK3N0YXRpYyBjb25zdCBjaGFy
KiBjb25zdCBlbnVtX2NvbnN0YW50X3ZhbHVlc1tdID0geworICAgICIwIiwKKyAgICAiMSIsCisg
ICAgIjIiLAorICAgICJQaWdzIiwKKyAgICAiQ293cyIsCisgICAgIkNhdHMiLAorICAgICJIZW5z
IiwKKyAgICAiRHVja3MiLAorICAgICJDcm93cyIsCisgICAgIkZsYW1pbmdvcyIsCit9OworCitT
dHJpbmcgZ2V0VGVzdEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKSB7CisgICAgcmV0dXJuIGVu
dW1fY29uc3RhbnRfdmFsdWVzW2NvZGVdOworfQorCisKKworfSAvLyBuYW1lc3BhY2UgVHlwZUJ1
aWxkZXIKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5T
UEVDVE9SKQorCisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuY3BwCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
ZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uLXJlc3VsdCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRl
Y2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24tcmVzdWx0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQyNTU1NmRkOGQx
ZTY4OWFhZmYwYzU3OGYwMzM1N2MyNWQ4YTE3YzkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNs
YXJhdGlvbi1vYmplY3QtdHlwZS5qc29uLXJlc3VsdApAQCAtMCwwICsxLDg4NiBAQAorIyMjIEJl
Z2luIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kQ29tbWFuZHMuanMKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisv
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBK
YXZhU2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5CisK
Ky8vIFRlc3QuCitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiVGVzdC5hdHRlbXB0
Q3Vyc2UiLCBbeyJuYW1lIjogImN1cnNlIiwgInR5cGUiOiAib2JqZWN0IiwgIm9wdGlvbmFsIjog
ZmFsc2V9XSwgWyJjZW5zb3JlZEN1cnNlIl0pOworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0
QmFja2VuZENvbW1hbmRzLmpzCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0QmFja2Vu
ZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1vYmplY3Qt
dHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBKYXZhU2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0
cy9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5CisKKyNpZm5kZWYgSW5zcGVjdG9yVGVzdEJhY2tl
bmREaXNwYXRjaGVyc19oCisjZGVmaW5lIEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnNf
aAorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUgIkluc3BlY3RvclRlc3RUeXBl
QnVpbGRlcnMuaCIKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordHlwZWRlZiBTdHJpbmcgRXJy
b3JTdHJpbmc7CisKK2NsYXNzIEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIg
eworcHVibGljOgorICAgIHZpcnR1YWwgdm9pZCBhdHRlbXB0Q3Vyc2UoRXJyb3JTdHJpbmcqLCBj
b25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+JiBpbl9jdXJzZSwgSW5zcGVj
dG9yOjpUeXBlQnVpbGRlcjo6T3B0T3V0cHV0PFN0cmluZz4qIG9wdF9vdXRfY2Vuc29yZWRDdXJz
ZSkgPSAwOworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgfkluc3BlY3RvclRlc3RCYWNrZW5kRGlz
cGF0Y2hlckhhbmRsZXIoKTsKK307CisKK2NsYXNzIEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0
Y2hlciBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3BlY3RvclN1cHBsZW1lbnRhbEJhY2tl
bmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JU
ZXN0QmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyKiwgSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOworICAg
IHZpcnR1YWwgdm9pZCBkaXNwYXRjaChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBtZXRob2Qs
IFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IG1lc3NhZ2UpIG92ZXJyaWRl
OworcHJpdmF0ZToKKyAgICB2b2lkIGF0dGVtcHRDdXJzZShsb25nIGNhbGxJZCwgY29uc3QgSW5z
cGVjdG9yOjpJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpOworcHJpdmF0ZToKKyAgICBJbnNwZWN0
b3JUZXN0QmFja2VuZERpc3BhdGNoZXIoSW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlciosIEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKKyAgICBJbnNw
ZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBtX2FnZW50OworfTsKKworfSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorCisjZW5k
aWYgLy8gIWRlZmluZWQoSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVyc19oKQorIyMjIEVu
ZCBGaWxlOiBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZp
bGU6IEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IHR5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogSmF2
YVNjcmlwdENvcmUvcmVwbGF5L3NjcmlwdHMvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQorCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRj
aGVycy5oIgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUgPGluc3BlY3Rvci9J
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4KKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9y
VmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5z
cGVjdG9yIHsKKworSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6fkluc3Bl
Y3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKSB7IH0KKworUGFzc1JlZlB0cjxJbnNw
ZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXI+IEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hl
cjo6Y3JlYXRlKEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlciwg
SW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCit7CisgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERp
c3BhdGNoZXIsIGFnZW50KSk7Cit9CisKK0luc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcjo6
SW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVyKEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
KiBiYWNrZW5kRGlzcGF0Y2hlciwgSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVySGFuZGxl
ciogYWdlbnQpCisgICAgOiBJbnNwZWN0b3JTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlcihi
YWNrZW5kRGlzcGF0Y2hlcikKKyAgICAsIG1fYWdlbnQoYWdlbnQpCit7CisgICAgbV9iYWNrZW5k
RGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRjaGVyRm9yRG9tYWluKEFTQ0lJTGl0ZXJhbCgiVGVz
dCIpLCB0aGlzKTsKK30KKwordm9pZCBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXI6OmRp
c3BhdGNoKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUGFzc1JlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IG1lc3NhZ2UpCit7CisgICAgUmVmPEluc3BlY3RvclRlc3RCYWNrZW5kRGlz
cGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7CisKKyAgICBpZiAobWV0aG9kID09ICJhdHRlbXB0Q3Vy
c2UiKQorICAgICAgICBhdHRlbXB0Q3Vyc2UoY2FsbElkLCAqbWVzc2FnZS5nZXQoKSk7CisgICAg
ZWxzZQorICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKCZj
YWxsSWQsIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgU3RyaW5n
KCInIikgKyAiVGVzdCIgKyAnLicgKyBtZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7Cit9CisK
K3ZvaWQgSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVyOjphdHRlbXB0Q3Vyc2UobG9uZyBj
YWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSkKK3sKKyAgICBSZWZQdHI8SW5z
cGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwor
ICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IG1lc3NhZ2UuZ2V0
T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicGFyYW1zIikpOworICAgIEluc3BlY3Rvck9iamVjdCogcGFy
YW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOworICAgIEluc3BlY3RvckFy
cmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOworICAgIFJlZlB0
cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gaW5fY3Vyc2UgPSBJbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlcjo6Z2V0T2JqZWN0KHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJj
dXJzZSIpLCBudWxscHRyLCBwcm90b2NvbEVycm9yc1B0cik7CisgICAgaWYgKHByb3RvY29sRXJy
b3JzLT5sZW5ndGgoKSkgeworICAgICAgICBTdHJpbmcgZXJyb3JNZXNzYWdlID0gU3RyaW5nOjpm
b3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIs
ICJUZXN0LmF0dGVtcHRDdXJzZSIpOworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBv
cnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpJbnZh
bGlkUGFyYW1zLCBlcnJvck1lc3NhZ2UsIHByb3RvY29sRXJyb3JzLnJlbGVhc2UoKSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBFcnJvclN0cmluZyBlcnJvcjsKKyAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAg
IEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6Ok9wdE91dHB1dDxTdHJpbmc+IG91dF9jZW5zb3JlZEN1
cnNlOworICAgIG1fYWdlbnQtPmF0dGVtcHRDdXJzZSgmZXJyb3IsIGluX2N1cnNlLCAmb3V0X2Nl
bnNvcmVkQ3Vyc2UpOworCisgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKKyAgICAgICAgaWYgKG91
dF9jZW5zb3JlZEN1cnNlLmlzQXNzaWduZWQoKSkKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0U3Ry
aW5nKEFTQ0lJTGl0ZXJhbCgiY2Vuc29yZWRDdXJzZSIpLCBvdXRfY2Vuc29yZWRDdXJzZS5nZXRW
YWx1ZSgpKTsKKworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQs
IHJlc3VsdC5yZWxlYXNlKCksIGVycm9yKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
CisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorCisjIyMgRW5kIEZpbGU6IEluc3BlY3Rv
clRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JU
ZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRp
b24tb2JqZWN0LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogSmF2YVNjcmlwdENvcmUvcmVw
bGF5L3NjcmlwdHMvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQorCisjaWZuZGVmIEluc3BlY3Rv
clRlc3RGcm9udGVuZERpc3BhdGNoZXJzX2gKKyNkZWZpbmUgSW5zcGVjdG9yVGVzdEZyb250ZW5k
RGlzcGF0Y2hlcnNfaAorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUgIkluc3Bl
Y3RvclRlc3RUeXBlQnVpbGRlcnMuaCIKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsLmg+CisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPgor
I2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVj
dG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorCisjZW5kaWYgLy8gIWRlZmluZWQo
SW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnNfaCkKKyMjIyBFbmQgRmlsZTogSW5zcGVj
dG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9y
VGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFy
YXRpb24tb2JqZWN0LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogSmF2YVNjcmlwdENvcmUv
cmVwbGF5L3NjcmlwdHMvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQorCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKKwor
I2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisK
K25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2Vu
ZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdEZy
b250ZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0VHlw
ZUJ1aWxkZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlw
ZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBKYXZhU2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0cy9D
b2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5CisKKyNpZm5kZWYgSW5zcGVjdG9yVGVzdFR5cGVCdWls
ZGVyc19oCisjZGVmaW5lIEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnNfaAorCisjaWYgRU5BQkxF
KElOU1BFQ1RPUikKKworI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JKU1R5cGVCdWlsZGVy
cy5oPgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JUeXBlQnVpbGRlci5oPgorI2luY2x1
ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKworbmFt
ZXNwYWNlIEluc3BlY3RvciB7CisKKworCituYW1lc3BhY2UgVHlwZUJ1aWxkZXIgeworCisvLyBG
b3J3YXJkIGRlY2xhcmF0aW9ucy4KKyNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQorbmFtZXNwYWNl
IERhdGFiYXNlIHsKK2NsYXNzIER1bW15T2JqZWN0OworY2xhc3MgRXJyb3I7CitjbGFzcyBPYmpl
Y3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzOworY2xhc3MgT3B0aW9uYWxQYXJhbWV0ZXJCdW5k
bGU7CitjbGFzcyBQYXJhbWV0ZXJCdW5kbGU7Cit9IC8vIERhdGFiYXNlCisjZW5kaWYgLy8gRU5B
QkxFKFNRTF9EQVRBQkFTRSkKKworbmFtZXNwYWNlIFRlc3QgeworY2xhc3MgSGFwcHlOYW1lOwor
Y2xhc3MgUGFyYW1ldGVyQnVuZGxlOworfSAvLyBUZXN0CisvLyBFbmQgb2YgZm9yd2FyZCBkZWNs
YXJhdGlvbnMuCisKKworCisKK1N0cmluZyBnZXRUZXN0RW51bUNvbnN0YW50VmFsdWUoaW50IGNv
ZGUpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBTdHJpbmcgZ2V0VGVzdEVudW1Db25zdGFudFZh
bHVlKFQgZW51bVZhbHVlKQoreworICAgIHJldHVybiBnZXRUZXN0RW51bUNvbnN0YW50VmFsdWUo
c3RhdGljX2Nhc3Q8aW50PihlbnVtVmFsdWUpKTsKK30KKworI2lmIEVOQUJMRShTUUxfREFUQUJB
U0UpCituYW1lc3BhY2UgRGF0YWJhc2UgeworLyogRGF0YWJhc2UgZXJyb3IuICovCitjbGFzcyBF
cnJvciA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdEJhc2UgeworcHVibGljOgor
ICAgIGVudW0geworICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCisgICAgICAgIE1lc3NhZ2VTZXQg
PSAxIDw8IDAsCisgICAgICAgIENvZGVTZXQgPSAxIDw8IDEsCisgICAgICAgIEFsbEZpZWxkc1Nl
dCA9IChNZXNzYWdlU2V0IHwgQ29kZVNldCkKKyAgICB9OworCisgICAgdGVtcGxhdGU8aW50IFNU
QVRFPgorICAgIGNsYXNzIEJ1aWxkZXIgeworICAgIHByaXZhdGU6CisgICAgICAgIFJlZlB0cjxJ
bnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CisKKyAgICAgICAgdGVtcGxhdGU8
aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQ
Pio+KHRoaXMpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPC8qRXJy
b3IqL0luc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBwdHIpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRf
aW5fbm9uX2luaXRfc3RhdGUpOworICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CisgICAgICAg
IH0KKyAgICAgICAgZnJpZW5kIGNsYXNzIEVycm9yOworICAgIHB1YmxpYzoKKworICAgICAgICBC
dWlsZGVyPFNUQVRFIHwgTWVzc2FnZVNldD4mIHNldE1lc3NhZ2UoY29uc3QgU3RyaW5nJiB2YWx1
ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE1lc3Nh
Z2VTZXQpLCBwcm9wZXJ0eV9tZXNzYWdlX2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVz
dWx0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJtZXNzYWdlIiksIHZhbHVlKTsKKyAgICAgICAg
ICAgIHJldHVybiBjYXN0U3RhdGU8TWVzc2FnZVNldD4oKTsKKyAgICAgICAgfQorCisgICAgICAg
IEJ1aWxkZXI8U1RBVEUgfCBDb2RlU2V0PiYgc2V0Q29kZShpbnQgdmFsdWUpCisgICAgICAgIHsK
KyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBDb2RlU2V0KSwgcHJvcGVydHlf
Y29kZV9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKEFTQ0lJ
TGl0ZXJhbCgiY29kZSIpLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENv
ZGVTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBvcGVyYXRvciBSZWZQdHI8RXJyb3I+JiAo
KQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVs
ZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
c2l6ZW9mKEVycm9yKSA9PSBzaXplb2YoSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QpLCBjYW5u
b3RfY2FzdCk7CisgICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPEVy
cm9yPio+KCZtX3Jlc3VsdCk7CisgICAgICAgIH0KKworICAgICAgICBQYXNzUmVmUHRyPEVycm9y
PiByZWxlYXNlKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxFcnJvcj4o
KnRoaXMpLnJlbGVhc2UoKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICAvKgorICAgICAqIFN5
bnRoZXRpYyBjb25zdHJ1Y3RvcjoKKyAgICAgKiBSZWZQdHI8RXJyb3I+IHJlc3VsdCA9IEVycm9y
OjpjcmVhdGUoKQorICAgICAqICAgICAuc2V0TWVzc2FnZSguLi4pCisgICAgICogICAgIC5zZXRD
b2RlKC4uLik7CisgICAgICovCisgICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0
ZSgpCisgICAgeworICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSW5zcGVjdG9y
OjpJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpKTsKKyAgICB9CisgICAgdHlwZWRlZiBJbnNwZWN0
b3I6OlR5cGVCdWlsZGVyOjpTdHJ1Y3RJdGVtVHJhaXRzIEl0ZW1UcmFpdHM7Cit9OworCitjbGFz
cyBPcHRpb25hbFBhcmFtZXRlckJ1bmRsZSA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3BlY3Rvck9i
amVjdEJhc2UgeworcHVibGljOgorICAgIGVudW0geworICAgICAgICBOb0ZpZWxkc1NldCA9IDAs
CisgICAgICAgIEFsbEZpZWxkc1NldCA9IDAKKyAgICB9OworCisgICAgdGVtcGxhdGU8aW50IFNU
QVRFPgorICAgIGNsYXNzIEJ1aWxkZXIgeworICAgIHByaXZhdGU6CisgICAgICAgIFJlZlB0cjxJ
bnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CisKKyAgICAgICAgdGVtcGxhdGU8
aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQ
Pio+KHRoaXMpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPC8qT3B0
aW9uYWxQYXJhbWV0ZXJCdW5kbGUqL0luc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBwdHIpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0
LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOworICAgICAgICAgICAgbV9yZXN1
bHQgPSBwdHI7CisgICAgICAgIH0KKyAgICAgICAgZnJpZW5kIGNsYXNzIE9wdGlvbmFsUGFyYW1l
dGVyQnVuZGxlOworICAgIHB1YmxpYzoKKworICAgICAgICBvcGVyYXRvciBSZWZQdHI8T3B0aW9u
YWxQYXJhbWV0ZXJCdW5kbGU+JiAoKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FT
U0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOworICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKE9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlKSA9PSBz
aXplb2YoSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QpLCBjYW5ub3RfY2FzdCk7CisgICAgICAg
ICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPE9wdGlvbmFsUGFyYW1ldGVyQnVu
ZGxlPio+KCZtX3Jlc3VsdCk7CisgICAgICAgIH0KKworICAgICAgICBQYXNzUmVmUHRyPE9wdGlv
bmFsUGFyYW1ldGVyQnVuZGxlPiByZWxlYXNlKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIFJlZlB0cjxPcHRpb25hbFBhcmFtZXRlckJ1bmRsZT4oKnRoaXMpLnJlbGVhc2UoKTsKKyAg
ICAgICAgfQorICAgIH07CisKKyAgICAvKgorICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoK
KyAgICAgKiBSZWZQdHI8T3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU+IHJlc3VsdCA9IE9wdGlvbmFs
UGFyYW1ldGVyQnVuZGxlOjpjcmVhdGUoKTsKKyAgICAgKi8KKyAgICBzdGF0aWMgQnVpbGRlcjxO
b0ZpZWxkc1NldD4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmll
bGRzU2V0PihJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkpOworICAgIH0KKyAg
ICB0eXBlZGVmIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlN0cnVjdEl0ZW1UcmFpdHMgSXRlbVRy
YWl0czsKKworICAgIHZvaWQgc2V0Q29sdW1uTmFtZXMoUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlR5
cGVCdWlsZGVyOjpBcnJheTxTdHJpbmc+PiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHRoaXMtPnNl
dFZhbHVlKEFTQ0lJTGl0ZXJhbCgiY29sdW1uTmFtZXMiKSwgdmFsdWUpOworICAgIH0KKworICAg
IHZvaWQgc2V0Tm90ZXMoY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHRoaXMt
PnNldFN0cmluZyhBU0NJSUxpdGVyYWwoIm5vdGVzIiksIHZhbHVlKTsKKyAgICB9CisKKyAgICB2
b2lkIHNldFRpbWVzdGFtcChkb3VibGUgdmFsdWUpCisgICAgeworICAgICAgICB0aGlzLT5zZXRO
dW1iZXIoQVNDSUlMaXRlcmFsKCJ0aW1lc3RhbXAiKSwgdmFsdWUpOworICAgIH0KKworICAgIHZv
aWQgc2V0VmFsdWVzKFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IHZhbHVl
KQorICAgIHsKKyAgICAgICAgdGhpcy0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgidmFsdWVzIiks
IHZhbHVlKTsKKyAgICB9CisKKyAgICB2b2lkIHNldFBheWxvYWQoUGFzc1JlZlB0cjxJbnNwZWN0
b3I6Okluc3BlY3RvclZhbHVlPiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHRoaXMtPnNldFZhbHVl
KEFTQ0lJTGl0ZXJhbCgicGF5bG9hZCIpLCB2YWx1ZSk7CisgICAgfQorCisgICAgdm9pZCBzZXRF
cnJvcihQYXNzUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkRhdGFiYXNlOjpFcnJvcj4g
dmFsdWUpCisgICAgeworICAgICAgICB0aGlzLT5zZXRWYWx1ZShBU0NJSUxpdGVyYWwoImVycm9y
IiksIHZhbHVlKTsKKyAgICB9Cit9OworCitjbGFzcyBQYXJhbWV0ZXJCdW5kbGUgOiBwdWJsaWMg
SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3RCYXNlIHsKK3B1YmxpYzoKKyAgICBlbnVtIHsKKyAg
ICAgICAgTm9GaWVsZHNTZXQgPSAwLAorICAgICAgICBDb2x1bW5OYW1lc1NldCA9IDEgPDwgMCwK
KyAgICAgICAgTm90ZXNTZXQgPSAxIDw8IDEsCisgICAgICAgIFRpbWVzdGFtcFNldCA9IDEgPDwg
MiwKKyAgICAgICAgVmFsdWVzU2V0ID0gMSA8PCAzLAorICAgICAgICBQYXlsb2FkU2V0ID0gMSA8
PCA0LAorICAgICAgICBFcnJvclNldCA9IDEgPDwgNSwKKyAgICAgICAgQWxsRmllbGRzU2V0ID0g
KENvbHVtbk5hbWVzU2V0IHwgTm90ZXNTZXQgfCBUaW1lc3RhbXBTZXQgfCBWYWx1ZXNTZXQgfCBQ
YXlsb2FkU2V0IHwgRXJyb3JTZXQpCisgICAgfTsKKworICAgIHRlbXBsYXRlPGludCBTVEFURT4K
KyAgICBjbGFzcyBCdWlsZGVyIHsKKyAgICBwcml2YXRlOgorICAgICAgICBSZWZQdHI8SW5zcGVj
dG9yOjpJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OworCisgICAgICAgIHRlbXBsYXRlPGludCBT
VEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0
aGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjwvKlBhcmFtZXRl
ckJ1bmRsZSovSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IHB0cikKKyAgICAgICAgeworICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3Jl
YXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKKyAg
ICAgICAgfQorICAgICAgICBmcmllbmQgY2xhc3MgUGFyYW1ldGVyQnVuZGxlOworICAgIHB1Ymxp
YzoKKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQ29sdW1uTmFtZXNTZXQ+JiBzZXRDb2x1bW5O
YW1lcyhQYXNzUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5PFN0cmluZz4+IHZh
bHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQ29s
dW1uTmFtZXNTZXQpLCBwcm9wZXJ0eV9jb2x1bW5OYW1lc19hbHJlYWR5X3NldCk7CisgICAgICAg
ICAgICBtX3Jlc3VsdC0+c2V0VmFsdWUoQVNDSUlMaXRlcmFsKCJjb2x1bW5OYW1lcyIpLCB2YWx1
ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENvbHVtbk5hbWVzU2V0PigpOworICAg
ICAgICB9CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IE5vdGVzU2V0PiYgc2V0Tm90ZXMoY29u
c3QgU3RyaW5nJiB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
IShTVEFURSAmIE5vdGVzU2V0KSwgcHJvcGVydHlfbm90ZXNfYWxyZWFkeV9zZXQpOworICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoIm5vdGVzIiksIHZhbHVlKTsK
KyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Tm90ZXNTZXQ+KCk7CisgICAgICAgIH0KKwor
ICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVGltZXN0YW1wU2V0PiYgc2V0VGltZXN0YW1wKGRvdWJs
ZSB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAm
IFRpbWVzdGFtcFNldCksIHByb3BlcnR5X3RpbWVzdGFtcF9hbHJlYWR5X3NldCk7CisgICAgICAg
ICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKEFTQ0lJTGl0ZXJhbCgidGltZXN0YW1wIiksIHZhbHVl
KTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VGltZXN0YW1wU2V0PigpOworICAgICAg
ICB9CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IFZhbHVlc1NldD4mIHNldFZhbHVlcyhQYXNz
UmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKKyAgICAgICAgeworICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFZhbHVlc1NldCksIHByb3BlcnR5X3Zh
bHVlc19hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0KEFTQ0lJ
TGl0ZXJhbCgidmFsdWVzIiksIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8
VmFsdWVzU2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IFBheWxv
YWRTZXQ+JiBzZXRQYXlsb2FkKFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4g
dmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBQ
YXlsb2FkU2V0KSwgcHJvcGVydHlfcGF5bG9hZF9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBt
X3Jlc3VsdC0+c2V0VmFsdWUoQVNDSUlMaXRlcmFsKCJwYXlsb2FkIiksIHZhbHVlKTsKKyAgICAg
ICAgICAgIHJldHVybiBjYXN0U3RhdGU8UGF5bG9hZFNldD4oKTsKKyAgICAgICAgfQorCisgICAg
ICAgIEJ1aWxkZXI8U1RBVEUgfCBFcnJvclNldD4mIHNldEVycm9yKFBhc3NSZWZQdHI8SW5zcGVj
dG9yOjpUeXBlQnVpbGRlcjo6RGF0YWJhc2U6OkVycm9yPiB2YWx1ZSkKKyAgICAgICAgeworICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEVycm9yU2V0KSwgcHJvcGVydHlfZXJy
b3JfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldFZhbHVlKEFTQ0lJTGl0
ZXJhbCgiZXJyb3IiKSwgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxFcnJv
clNldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIG9wZXJhdG9yIFJlZlB0cjxQYXJhbWV0ZXJC
dW5kbGU+JiAoKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9
PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOworICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoc2l6ZW9mKFBhcmFtZXRlckJ1bmRsZSkgPT0gc2l6ZW9mKEluc3BlY3Rvcjo6SW5z
cGVjdG9yT2JqZWN0KSwgY2Fubm90X2Nhc3QpOworICAgICAgICAgICAgcmV0dXJuICpyZWludGVy
cHJldF9jYXN0PFJlZlB0cjxQYXJhbWV0ZXJCdW5kbGU+Kj4oJm1fcmVzdWx0KTsKKyAgICAgICAg
fQorCisgICAgICAgIFBhc3NSZWZQdHI8UGFyYW1ldGVyQnVuZGxlPiByZWxlYXNlKCkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxQYXJhbWV0ZXJCdW5kbGU+KCp0aGlzKS5y
ZWxlYXNlKCk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgLyoKKyAgICAgKiBTeW50aGV0aWMg
Y29uc3RydWN0b3I6CisgICAgICogUmVmUHRyPFBhcmFtZXRlckJ1bmRsZT4gcmVzdWx0ID0gUGFy
YW1ldGVyQnVuZGxlOjpjcmVhdGUoKQorICAgICAqICAgICAuc2V0Q29sdW1uTmFtZXMoLi4uKQor
ICAgICAqICAgICAuc2V0Tm90ZXMoLi4uKQorICAgICAqICAgICAuc2V0VGltZXN0YW1wKC4uLikK
KyAgICAgKiAgICAgLnNldFZhbHVlcyguLi4pCisgICAgICogICAgIC5zZXRQYXlsb2FkKC4uLikK
KyAgICAgKiAgICAgLnNldEVycm9yKC4uLik7CisgICAgICovCisgICAgc3RhdGljIEJ1aWxkZXI8
Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0Zp
ZWxkc1NldD4oSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpKTsKKyAgICB9Cisg
ICAgdHlwZWRlZiBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpTdHJ1Y3RJdGVtVHJhaXRzIEl0ZW1U
cmFpdHM7Cit9OworCisvKiBDb25mbGljdGVkIG5hbWVzIG1heSBjYXVzZSBnZW5lcmF0ZWQgZ2V0
dGVycy9zZXR0ZXJzIHRvIGNsYXNoIHdpdGggYnVpbHQtaW4gSW5zcGVjdG9yT2JqZWN0IG1ldGhv
ZHMuICovCitjbGFzcyBPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzIDogcHVibGljIElu
c3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0QmFzZSB7CitwdWJsaWM6CisgICAgZW51bSB7CisgICAg
ICAgIE5vRmllbGRzU2V0ID0gMCwKKyAgICAgICAgSW50ZWdlclNldCA9IDEgPDwgMCwKKyAgICAg
ICAgQXJyYXlTZXQgPSAxIDw8IDEsCisgICAgICAgIFN0cmluZ1NldCA9IDEgPDwgMiwKKyAgICAg
ICAgVmFsdWVTZXQgPSAxIDw8IDMsCisgICAgICAgIE9iamVjdFNldCA9IDEgPDwgNCwKKyAgICAg
ICAgQWxsRmllbGRzU2V0ID0gKEludGVnZXJTZXQgfCBBcnJheVNldCB8IFN0cmluZ1NldCB8IFZh
bHVlU2V0IHwgT2JqZWN0U2V0KQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+Cisg
ICAgY2xhc3MgQnVpbGRlciB7CisgICAgcHJpdmF0ZToKKyAgICAgICAgUmVmUHRyPEluc3BlY3Rv
cjo6SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKKworICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RF
UD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhp
cyk7CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8LypPYmplY3RXaXRo
UHJvcGVydHlOYW1lQ29uZmxpY3RzKi9JbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gcHRyKQor
ICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1Nl
dCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKKyAgICAgICAgICAgIG1fcmVz
dWx0ID0gcHRyOworICAgICAgICB9CisgICAgICAgIGZyaWVuZCBjbGFzcyBPYmplY3RXaXRoUHJv
cGVydHlOYW1lQ29uZmxpY3RzOworICAgIHB1YmxpYzoKKworICAgICAgICBCdWlsZGVyPFNUQVRF
IHwgSW50ZWdlclNldD4mIHNldEludGVnZXIoY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICAgICAg
eworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEludGVnZXJTZXQpLCBwcm9w
ZXJ0eV9pbnRlZ2VyX2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJp
bmcoQVNDSUlMaXRlcmFsKCJpbnRlZ2VyIiksIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBj
YXN0U3RhdGU8SW50ZWdlclNldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXI8U1RB
VEUgfCBBcnJheVNldD4mIHNldEFycmF5KGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgICAgIHsK
KyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBBcnJheVNldCksIHByb3BlcnR5
X2FycmF5X2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoQVND
SUlMaXRlcmFsKCJhcnJheSIpLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRl
PEFycmF5U2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IFN0cmlu
Z1NldD4mIHNldFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgICAgICB7CisgICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgU3RyaW5nU2V0KSwgcHJvcGVydHlfc3RyaW5n
X2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoQVNDSUlMaXRl
cmFsKCJzdHJpbmciKSwgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxTdHJp
bmdTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVmFsdWVTZXQ+
JiBzZXRWYWx1ZShjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBD
T01QSUxFX0FTU0VSVCghKFNUQVRFICYgVmFsdWVTZXQpLCBwcm9wZXJ0eV92YWx1ZV9hbHJlYWR5
X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgidmFs
dWUiKSwgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxWYWx1ZVNldD4oKTsK
KyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBPYmplY3RTZXQ+JiBzZXRPYmpl
Y3QoY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoIShTVEFURSAmIE9iamVjdFNldCksIHByb3BlcnR5X29iamVjdF9hbHJlYWR5X3NldCk7
CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgib2JqZWN0Iiks
IHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8T2JqZWN0U2V0PigpOworICAg
ICAgICB9CisKKyAgICAgICAgb3BlcmF0b3IgUmVmUHRyPE9iamVjdFdpdGhQcm9wZXJ0eU5hbWVD
b25mbGljdHM+JiAoKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFU
RSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOworICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoc2l6ZW9mKE9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHMpID09IHNp
emVvZihJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCksIGNhbm5vdF9jYXN0KTsKKyAgICAgICAg
ICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8T2JqZWN0V2l0aFByb3BlcnR5TmFt
ZUNvbmZsaWN0cz4qPigmbV9yZXN1bHQpOworICAgICAgICB9CisKKyAgICAgICAgUGFzc1JlZlB0
cjxPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzPiByZWxlYXNlKCkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3Rz
PigqdGhpcykucmVsZWFzZSgpOworICAgICAgICB9CisgICAgfTsKKworICAgIC8qCisgICAgICog
U3ludGhldGljIGNvbnN0cnVjdG9yOgorICAgICAqIFJlZlB0cjxPYmplY3RXaXRoUHJvcGVydHlO
YW1lQ29uZmxpY3RzPiByZXN1bHQgPSBPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzOjpj
cmVhdGUoKQorICAgICAqICAgICAuc2V0SW50ZWdlciguLi4pCisgICAgICogICAgIC5zZXRBcnJh
eSguLi4pCisgICAgICogICAgIC5zZXRTdHJpbmcoLi4uKQorICAgICAqICAgICAuc2V0VmFsdWUo
Li4uKQorICAgICAqICAgICAuc2V0T2JqZWN0KC4uLik7CisgICAgICovCisgICAgc3RhdGljIEJ1
aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gQnVpbGRl
cjxOb0ZpZWxkc1NldD4oSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpKTsKKyAg
ICB9CisgICAgdHlwZWRlZiBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpTdHJ1Y3RJdGVtVHJhaXRz
IEl0ZW1UcmFpdHM7Cit9OworCit9IC8vIERhdGFiYXNlCisjZW5kaWYgLy8gRU5BQkxFKFNRTF9E
QVRBQkFTRSkKKworbmFtZXNwYWNlIFRlc3QgeworY2xhc3MgUGFyYW1ldGVyQnVuZGxlIDogcHVi
bGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0QmFzZSB7CitwdWJsaWM6CisgICAgZW51bSB7
CisgICAgICAgIE5vRmllbGRzU2V0ID0gMCwKKyAgICAgICAgQ29sdW1uTmFtZXNTZXQgPSAxIDw8
IDAsCisgICAgICAgIE5vdGVzU2V0ID0gMSA8PCAxLAorICAgICAgICBUaW1lc3RhbXBTZXQgPSAx
IDw8IDIsCisgICAgICAgIFZhbHVlc1NldCA9IDEgPDwgMywKKyAgICAgICAgUGF5bG9hZFNldCA9
IDEgPDwgNCwKKyAgICAgICAgRXJyb3JTZXQgPSAxIDw8IDUsCisgICAgICAgIEFsbEZpZWxkc1Nl
dCA9IChDb2x1bW5OYW1lc1NldCB8IE5vdGVzU2V0IHwgVGltZXN0YW1wU2V0IHwgVmFsdWVzU2V0
IHwgUGF5bG9hZFNldCB8IEVycm9yU2V0KQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTxpbnQgU1RB
VEU+CisgICAgY2xhc3MgQnVpbGRlciB7CisgICAgcHJpdmF0ZToKKyAgICAgICAgUmVmUHRyPElu
c3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKKworICAgICAgICB0ZW1wbGF0ZTxp
bnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+
Kj4odGhpcyk7CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8LypQYXJh
bWV0ZXJCdW5kbGUqL0luc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBwdHIpCisgICAgICAgIHsK
KyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVy
X2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOworICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7
CisgICAgICAgIH0KKyAgICAgICAgZnJpZW5kIGNsYXNzIFBhcmFtZXRlckJ1bmRsZTsKKyAgICBw
dWJsaWM6CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IENvbHVtbk5hbWVzU2V0PiYgc2V0Q29s
dW1uTmFtZXMoUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheTxTdHJpbmc+
PiB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAm
IENvbHVtbk5hbWVzU2V0KSwgcHJvcGVydHlfY29sdW1uTmFtZXNfYWxyZWFkeV9zZXQpOworICAg
ICAgICAgICAgbV9yZXN1bHQtPnNldFZhbHVlKEFTQ0lJTGl0ZXJhbCgiY29sdW1uTmFtZXMiKSwg
dmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxDb2x1bW5OYW1lc1NldD4oKTsK
KyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBOb3Rlc1NldD4mIHNldE5vdGVz
KGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKCEoU1RBVEUgJiBOb3Rlc1NldCksIHByb3BlcnR5X25vdGVzX2FscmVhZHlfc2V0KTsKKyAg
ICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJub3RlcyIpLCB2YWx1
ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE5vdGVzU2V0PigpOworICAgICAgICB9
CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IFRpbWVzdGFtcFNldD4mIHNldFRpbWVzdGFtcChk
b3VibGUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RB
VEUgJiBUaW1lc3RhbXBTZXQpLCBwcm9wZXJ0eV90aW1lc3RhbXBfYWxyZWFkeV9zZXQpOworICAg
ICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcihBU0NJSUxpdGVyYWwoInRpbWVzdGFtcCIpLCB2
YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFRpbWVzdGFtcFNldD4oKTsKKyAg
ICAgICAgfQorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBWYWx1ZXNTZXQ+JiBzZXRWYWx1ZXMo
UGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gdmFsdWUpCisgICAgICAgIHsK
KyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBWYWx1ZXNTZXQpLCBwcm9wZXJ0
eV92YWx1ZXNfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldE9iamVjdChB
U0NJSUxpdGVyYWwoInZhbHVlcyIpLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0
YXRlPFZhbHVlc1NldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBQ
YXlsb2FkU2V0PiYgc2V0UGF5bG9hZChQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFs
dWU+IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRF
ICYgUGF5bG9hZFNldCksIHByb3BlcnR5X3BheWxvYWRfYWxyZWFkeV9zZXQpOworICAgICAgICAg
ICAgbV9yZXN1bHQtPnNldFZhbHVlKEFTQ0lJTGl0ZXJhbCgicGF5bG9hZCIpLCB2YWx1ZSk7Cisg
ICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFBheWxvYWRTZXQ+KCk7CisgICAgICAgIH0KKwor
ICAgICAgICBCdWlsZGVyPFNUQVRFIHwgRXJyb3JTZXQ+JiBzZXRFcnJvcihQYXNzUmVmUHRyPElu
c3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkRhdGFiYXNlOjpFcnJvcj4gdmFsdWUpCisgICAgICAgIHsK
KyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBFcnJvclNldCksIHByb3BlcnR5
X2Vycm9yX2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRWYWx1ZShBU0NJ
SUxpdGVyYWwoImVycm9yIiksIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8
RXJyb3JTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBvcGVyYXRvciBSZWZQdHI8UGFyYW1l
dGVyQnVuZGxlPiYgKCkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RB
VEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKKyAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKHNpemVvZihQYXJhbWV0ZXJCdW5kbGUpID09IHNpemVvZihJbnNwZWN0b3I6
Okluc3BlY3Rvck9iamVjdCksIGNhbm5vdF9jYXN0KTsKKyAgICAgICAgICAgIHJldHVybiAqcmVp
bnRlcnByZXRfY2FzdDxSZWZQdHI8UGFyYW1ldGVyQnVuZGxlPio+KCZtX3Jlc3VsdCk7CisgICAg
ICAgIH0KKworICAgICAgICBQYXNzUmVmUHRyPFBhcmFtZXRlckJ1bmRsZT4gcmVsZWFzZSgpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBSZWZQdHI8UGFyYW1ldGVyQnVuZGxlPigqdGhp
cykucmVsZWFzZSgpOworICAgICAgICB9CisgICAgfTsKKworICAgIC8qCisgICAgICogU3ludGhl
dGljIGNvbnN0cnVjdG9yOgorICAgICAqIFJlZlB0cjxQYXJhbWV0ZXJCdW5kbGU+IHJlc3VsdCA9
IFBhcmFtZXRlckJ1bmRsZTo6Y3JlYXRlKCkKKyAgICAgKiAgICAgLnNldENvbHVtbk5hbWVzKC4u
LikKKyAgICAgKiAgICAgLnNldE5vdGVzKC4uLikKKyAgICAgKiAgICAgLnNldFRpbWVzdGFtcCgu
Li4pCisgICAgICogICAgIC5zZXRWYWx1ZXMoLi4uKQorICAgICAqICAgICAuc2V0UGF5bG9hZCgu
Li4pCisgICAgICogICAgIC5zZXRFcnJvciguLi4pOworICAgICAqLworICAgIHN0YXRpYyBCdWls
ZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEJ1aWxkZXI8
Tm9GaWVsZHNTZXQ+KEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7CisgICAg
fQorICAgIHR5cGVkZWYgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6U3RydWN0SXRlbVRyYWl0cyBJ
dGVtVHJhaXRzOworfTsKKworfSAvLyBUZXN0CisKKworCit9IC8vIG5hbWVzcGFjZSBUeXBlQnVp
bGRlcgorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQ
RUNUT1IpCisKKyNlbmRpZiAvLyAhZGVmaW5lZChJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzX2gp
CisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuaAorCisjIyMgQmVnaW4g
RmlsZTogSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlw
ZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBKYXZhU2Ny
aXB0Q29yZS9yZXBsYXkvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5CisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmgiCisK
KyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgor
CituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworbmFtZXNwYWNlIFR5cGVCdWlsZGVyIHsKKworc3Rh
dGljIGNvbnN0IGNoYXIqIGNvbnN0IGVudW1fY29uc3RhbnRfdmFsdWVzW10gPSB7Cit9OworCitT
dHJpbmcgZ2V0VGVzdEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKSB7CisgICAgcmV0dXJuIGVu
dW1fY29uc3RhbnRfdmFsdWVzW2NvZGVdOworfQorCisKKworfSAvLyBuYW1lc3BhY2UgVHlwZUJ1
aWxkZXIKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5T
UEVDVE9SKQorCisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuY3BwCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
ZXhwZWN0ZWQvdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uLXJlc3VsdCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLXJl
cXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24tcmVzdWx0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjMwNmNmMjAyYjJj
YmExMjc3Yzg3N2QxZjY0MTM3NTI4MTdhMjNkOWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1yZXF1
aXJpbmctcnVudGltZS1jYXN0cy5qc29uLXJlc3VsdApAQCAtMCwwICsxLDcyMCBAQAorIyMjIEJl
Z2luIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kQ29tbWFuZHMuanMKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisv
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBK
YXZhU2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5CisK
Ky8vIFRlc3QuCitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRW51bSgiVGVzdC5VbmNhc3RlZEFu
aW1hbHMiLCB7UGlnczogIlBpZ3MiLCBDb3dzOiAiQ293cyIsIENhdHM6ICJDYXRzIiwgSGVuczog
IkhlbnMifSk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRW51bSgiVGVzdC5DYXN0ZWRBbmlt
YWxzIiwge0R1Y2tzOiAiRHVja3MiLCBIZW5zOiAiSGVucyIsIENyb3dzOiAiQ3Jvd3MiLCBGbGFt
aW5nb3M6ICJGbGFtaW5nb3MifSk7CisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5k
Q29tbWFuZHMuanMKKworIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0
Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpz
b24KKy8vIGJ5IHRoZSBzY3JpcHQ6IEphdmFTY3JpcHRDb3JlL3JlcGxheS9zY3JpcHRzL0NvZGVH
ZW5lcmF0b3JJbnNwZWN0b3IucHkKKworI2lmbmRlZiBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3Bh
dGNoZXJzX2gKKyNkZWZpbmUgSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVyc19oCisKKyNp
ZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSAiSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVy
cy5oIgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgor
I2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0eXBlZGVmIFN0cmluZyBFcnJvclN0cmlu
ZzsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVD
VE9SKQorCisjZW5kaWYgLy8gIWRlZmluZWQoSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVy
c19oKQorIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKwor
IyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIHR5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbgorLy8gYnkgdGhl
IHNjcmlwdDogSmF2YVNjcmlwdENvcmUvcmVwbGF5L3NjcmlwdHMvQ29kZUdlbmVyYXRvckluc3Bl
Y3Rvci5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yVGVzdEJh
Y2tlbmREaXNwYXRjaGVycy5oIgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUg
PGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4KKyNpbmNsdWRlIDxpbnNwZWN0
b3IvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCitu
YW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisj
ZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0
QmFja2VuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdEZy
b250ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50
aW1lLWNhc3RzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IEphdmFTY3JpcHRDb3JlL3JlcGxheS9z
Y3JpcHRzL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKKworI2lmbmRlZiBJbnNwZWN0b3JUZXN0
RnJvbnRlbmREaXNwYXRjaGVyc19oCisjZGVmaW5lIEluc3BlY3RvclRlc3RGcm9udGVuZERpc3Bh
dGNoZXJzX2gKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRlICJJbnNwZWN0b3JU
ZXN0VHlwZUJ1aWxkZXJzLmgiCisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5k
Q2hhbm5lbC5oPgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4KKyNpbmNs
dWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgor
CituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgor
CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKworI2VuZGlmIC8vICFkZWZpbmVkKEluc3Bl
Y3RvclRlc3RGcm9udGVuZERpc3BhdGNoZXJzX2gpCisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRl
c3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RG
cm9udGVuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1y
dW50aW1lLWNhc3RzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IEphdmFTY3JpcHRDb3JlL3JlcGxh
eS9zY3JpcHRzL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkluc3BlY3RvclRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCisKKyNpZiBF
TkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1l
c3BhY2UgSW5zcGVjdG9yIHsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAv
LyBFTkFCTEUoSU5TUEVDVE9SKQorCisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RGcm9udGVu
ZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdFR5cGVCdWls
ZGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNv
bgorLy8gYnkgdGhlIHNjcmlwdDogSmF2YVNjcmlwdENvcmUvcmVwbGF5L3NjcmlwdHMvQ29kZUdl
bmVyYXRvckluc3BlY3Rvci5weQorCisjaWZuZGVmIEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnNf
aAorI2RlZmluZSBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzX2gKKworI2lmIEVOQUJMRShJTlNQ
RUNUT1IpCisKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9ySlNUeXBlQnVpbGRlcnMuaD4K
KyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVHlwZUJ1aWxkZXIuaD4KKyNpbmNsdWRlIDx3
dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisKK25hbWVzcGFj
ZSBJbnNwZWN0b3IgeworCisKKworbmFtZXNwYWNlIFR5cGVCdWlsZGVyIHsKKworLy8gRm9yd2Fy
ZCBkZWNsYXJhdGlvbnMuCituYW1lc3BhY2UgVGVzdCB7CitjbGFzcyBSZWN1cnNpdmVPYmplY3Qx
OworY2xhc3MgUmVjdXJzaXZlT2JqZWN0MjsKK2NsYXNzIFR5cGVOZWVkaW5nQ2FzdDsKK2VudW0g
Y2xhc3MgQ2FzdGVkQW5pbWFsczsKK2VudW0gY2xhc3MgVW5jYXN0ZWRBbmltYWxzOworfSAvLyBU
ZXN0CisvLyBFbmQgb2YgZm9yd2FyZCBkZWNsYXJhdGlvbnMuCisKKworLy8gVHlwZWRlZnMuCitu
YW1lc3BhY2UgVGVzdCB7Cit0eXBlZGVmIGludCBDYXN0ZWRPYmplY3RJZDsKKwordHlwZWRlZiBp
bnQgVW5jYXN0ZWRPYmplY3RJZDsKK30gLy8gVGVzdAorLy8gRW5kIG9mIHR5cGVkZWZzLgorCitT
dHJpbmcgZ2V0VGVzdEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKTsKKwordGVtcGxhdGU8dHlw
ZW5hbWUgVD4gU3RyaW5nIGdldFRlc3RFbnVtQ29uc3RhbnRWYWx1ZShUIGVudW1WYWx1ZSkKK3sK
KyAgICByZXR1cm4gZ2V0VGVzdEVudW1Db25zdGFudFZhbHVlKHN0YXRpY19jYXN0PGludD4oZW51
bVZhbHVlKSk7Cit9CisKK25hbWVzcGFjZSBUZXN0IHsKKy8qIEEgZHVtbXkgdHlwZSB0aGF0IHJl
cXVpcmVzIHJ1bnRpbWUgY2FzdHMsIGFuZCBmb3JjZXMgbm9uLXByaW1pdGl2ZSByZWZlcmVuY2Vk
IHR5cGVzIHRvIGFsc28gZW1pdCBydW50aW1lIGNhc3QgaGVscGVycy4gKi8KK2NsYXNzIFR5cGVO
ZWVkaW5nQ2FzdCA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdEJhc2UgeworcHVi
bGljOgorICAgIGVudW0geworICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCisgICAgICAgIFN0cmlu
Z1NldCA9IDEgPDwgMCwKKyAgICAgICAgTnVtYmVyU2V0ID0gMSA8PCAxLAorICAgICAgICBBbmlt
YWxzU2V0ID0gMSA8PCAyLAorICAgICAgICBJZFNldCA9IDEgPDwgMywKKyAgICAgICAgVHJlZVNl
dCA9IDEgPDwgNCwKKyAgICAgICAgQWxsRmllbGRzU2V0ID0gKFN0cmluZ1NldCB8IE51bWJlclNl
dCB8IEFuaW1hbHNTZXQgfCBJZFNldCB8IFRyZWVTZXQpCisgICAgfTsKKworICAgIHRlbXBsYXRl
PGludCBTVEFURT4KKyAgICBjbGFzcyBCdWlsZGVyIHsKKyAgICBwcml2YXRlOgorICAgICAgICBS
ZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OworCisgICAgICAgIHRl
bXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRF
IHwgU1RFUD4qPih0aGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0
cjwvKlR5cGVOZWVkaW5nQ2FzdCovSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IHB0cikKKyAg
ICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQs
IGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CisgICAgICAgICAgICBtX3Jlc3Vs
dCA9IHB0cjsKKyAgICAgICAgfQorICAgICAgICBmcmllbmQgY2xhc3MgVHlwZU5lZWRpbmdDYXN0
OworICAgIHB1YmxpYzoKKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgU3RyaW5nU2V0PiYgc2V0
U3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKCEoU1RBVEUgJiBTdHJpbmdTZXQpLCBwcm9wZXJ0eV9zdHJpbmdfYWxyZWFkeV9z
ZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInN0cmlu
ZyIpLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFN0cmluZ1NldD4oKTsK
KyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBOdW1iZXJTZXQ+JiBzZXROdW1i
ZXIoaW50IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNU
QVRFICYgTnVtYmVyU2V0KSwgcHJvcGVydHlfbnVtYmVyX2FscmVhZHlfc2V0KTsKKyAgICAgICAg
ICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoQVNDSUlMaXRlcmFsKCJudW1iZXIiKSwgdmFsdWUpOwor
ICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxOdW1iZXJTZXQ+KCk7CisgICAgICAgIH0KKwor
ICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQW5pbWFsc1NldD4mIHNldEFuaW1hbHMoSW5zcGVjdG9y
OjpUeXBlQnVpbGRlcjo6VGVzdDo6Q2FzdGVkQW5pbWFscyB2YWx1ZSkKKyAgICAgICAgeworICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEFuaW1hbHNTZXQpLCBwcm9wZXJ0eV9h
bmltYWxzX2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoQVND
SUlMaXRlcmFsKCJhbmltYWxzIiksIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OmdldFRlc3RFbnVt
Q29uc3RhbnRWYWx1ZShzdGF0aWNfY2FzdDxpbnQ+KHZhbHVlKSkpOworICAgICAgICAgICAgcmV0
dXJuIGNhc3RTdGF0ZTxBbmltYWxzU2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRl
cjxTVEFURSB8IElkU2V0PiYgc2V0SWQoaW50IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgSWRTZXQpLCBwcm9wZXJ0eV9pZF9hbHJlYWR5X3Nl
dCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKEFTQ0lJTGl0ZXJhbCgiaWQiKSwg
dmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxJZFNldD4oKTsKKyAgICAgICAg
fQorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBUcmVlU2V0PiYgc2V0VHJlZShQYXNzUmVmUHRy
PEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDE+IHZhbHVlKQor
ICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVHJlZVNldCks
IHByb3BlcnR5X3RyZWVfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldFZh
bHVlKEFTQ0lJTGl0ZXJhbCgidHJlZSIpLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2Fz
dFN0YXRlPFRyZWVTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBvcGVyYXRvciBSZWZQdHI8
VHlwZU5lZWRpbmdDYXN0PiYgKCkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKKyAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihUeXBlTmVlZGluZ0Nhc3QpID09IHNpemVvZihJbnNw
ZWN0b3I6Okluc3BlY3Rvck9iamVjdCksIGNhbm5vdF9jYXN0KTsKKyAgICAgICAgICAgIHJldHVy
biAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8VHlwZU5lZWRpbmdDYXN0Pio+KCZtX3Jlc3VsdCk7
CisgICAgICAgIH0KKworICAgICAgICBQYXNzUmVmUHRyPFR5cGVOZWVkaW5nQ2FzdD4gcmVsZWFz
ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBSZWZQdHI8VHlwZU5lZWRpbmdDYXN0
PigqdGhpcykucmVsZWFzZSgpOworICAgICAgICB9CisgICAgfTsKKworICAgIC8qCisgICAgICog
U3ludGhldGljIGNvbnN0cnVjdG9yOgorICAgICAqIFJlZlB0cjxUeXBlTmVlZGluZ0Nhc3Q+IHJl
c3VsdCA9IFR5cGVOZWVkaW5nQ2FzdDo6Y3JlYXRlKCkKKyAgICAgKiAgICAgLnNldFN0cmluZygu
Li4pCisgICAgICogICAgIC5zZXROdW1iZXIoLi4uKQorICAgICAqICAgICAuc2V0QW5pbWFscygu
Li4pCisgICAgICogICAgIC5zZXRJZCguLi4pCisgICAgICogICAgIC5zZXRUcmVlKC4uLik7Cisg
ICAgICovCisgICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCisgICAgewor
ICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSW5zcGVjdG9yOjpJbnNwZWN0b3JP
YmplY3Q6OmNyZWF0ZSgpKTsKKyAgICB9CisgICAgdHlwZWRlZiBJbnNwZWN0b3I6OlR5cGVCdWls
ZGVyOjpTdHJ1Y3RJdGVtVHJhaXRzIEl0ZW1UcmFpdHM7Cit9OworCisvKiAgKi8KK2VudW0gY2xh
c3MgVW5jYXN0ZWRBbmltYWxzIHsKKyAgICBQaWdzID0gNCwKKyAgICBDb3dzID0gNSwKKyAgICBD
YXRzID0gNiwKKyAgICBIZW5zID0gMSwKK307IC8vIGVudW0gY2xhc3MgVW5jYXN0ZWRBbmltYWxz
CisvKiAgKi8KK2VudW0gY2xhc3MgQ2FzdGVkQW5pbWFscyB7CisgICAgRHVja3MgPSAwLAorICAg
IEhlbnMgPSAxLAorICAgIENyb3dzID0gMiwKKyAgICBGbGFtaW5nb3MgPSAzLAorfTsgLy8gZW51
bSBjbGFzcyBDYXN0ZWRBbmltYWxzCitjbGFzcyBSZWN1cnNpdmVPYmplY3QxIDogcHVibGljIElu
c3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0QmFzZSB7CitwdWJsaWM6CisgICAgZW51bSB7CisgICAg
ICAgIE5vRmllbGRzU2V0ID0gMCwKKyAgICAgICAgQWxsRmllbGRzU2V0ID0gMAorICAgIH07CisK
KyAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CisgICAgY2xhc3MgQnVpbGRlciB7CisgICAgcHJpdmF0
ZToKKyAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsK
KworICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0
U3RhdGUoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8
QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CisgICAgICAgIH0KKworICAgICAgICBCdWls
ZGVyKFBhc3NSZWZQdHI8LypSZWN1cnNpdmVPYmplY3QxKi9JbnNwZWN0b3I6Okluc3BlY3Rvck9i
amVjdD4gcHRyKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9
PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKKyAgICAg
ICAgICAgIG1fcmVzdWx0ID0gcHRyOworICAgICAgICB9CisgICAgICAgIGZyaWVuZCBjbGFzcyBS
ZWN1cnNpdmVPYmplY3QxOworICAgIHB1YmxpYzoKKworICAgICAgICBvcGVyYXRvciBSZWZQdHI8
UmVjdXJzaXZlT2JqZWN0MT4mICgpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CisgICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoUmVjdXJzaXZlT2JqZWN0MSkgPT0gc2l6ZW9mKElu
c3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0KSwgY2Fubm90X2Nhc3QpOworICAgICAgICAgICAgcmV0
dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxSZWN1cnNpdmVPYmplY3QxPio+KCZtX3Jlc3Vs
dCk7CisgICAgICAgIH0KKworICAgICAgICBQYXNzUmVmUHRyPFJlY3Vyc2l2ZU9iamVjdDE+IHJl
bGVhc2UoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gUmVmUHRyPFJlY3Vyc2l2ZU9i
amVjdDE+KCp0aGlzKS5yZWxlYXNlKCk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgLyoKKyAg
ICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CisgICAgICogUmVmUHRyPFJlY3Vyc2l2ZU9iamVj
dDE+IHJlc3VsdCA9IFJlY3Vyc2l2ZU9iamVjdDE6OmNyZWF0ZSgpOworICAgICAqLworICAgIHN0
YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUo
KSk7CisgICAgfQorICAgIHR5cGVkZWYgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6U3RydWN0SXRl
bVRyYWl0cyBJdGVtVHJhaXRzOworCisgICAgdm9pZCBzZXRPYmooUGFzc1JlZlB0cjxJbnNwZWN0
b3I6OlR5cGVCdWlsZGVyOjpUZXN0OjpSZWN1cnNpdmVPYmplY3QyPiB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIHRoaXMtPnNldFZhbHVlKEFTQ0lJTGl0ZXJhbCgib2JqIiksIHZhbHVlKTsKKyAgICB9
Cit9OworCitjbGFzcyBSZWN1cnNpdmVPYmplY3QyIDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVj
dG9yT2JqZWN0QmFzZSB7CitwdWJsaWM6CisgICAgZW51bSB7CisgICAgICAgIE5vRmllbGRzU2V0
ID0gMCwKKyAgICAgICAgQWxsRmllbGRzU2V0ID0gMAorICAgIH07CisKKyAgICB0ZW1wbGF0ZTxp
bnQgU1RBVEU+CisgICAgY2xhc3MgQnVpbGRlciB7CisgICAgcHJpdmF0ZToKKyAgICAgICAgUmVm
UHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKKworICAgICAgICB0ZW1w
bGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8
IFNURVA+Kj4odGhpcyk7CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8
LypSZWN1cnNpdmVPYmplY3QyKi9JbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gcHRyKQorICAg
ICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwg
YnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKKyAgICAgICAgICAgIG1fcmVzdWx0
ID0gcHRyOworICAgICAgICB9CisgICAgICAgIGZyaWVuZCBjbGFzcyBSZWN1cnNpdmVPYmplY3Qy
OworICAgIHB1YmxpYzoKKworICAgICAgICBvcGVyYXRvciBSZWZQdHI8UmVjdXJzaXZlT2JqZWN0
Mj4mICgpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFs
bEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CisgICAgICAgICAgICBDT01QSUxFX0FT
U0VSVChzaXplb2YoUmVjdXJzaXZlT2JqZWN0MikgPT0gc2l6ZW9mKEluc3BlY3Rvcjo6SW5zcGVj
dG9yT2JqZWN0KSwgY2Fubm90X2Nhc3QpOworICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJl
dF9jYXN0PFJlZlB0cjxSZWN1cnNpdmVPYmplY3QyPio+KCZtX3Jlc3VsdCk7CisgICAgICAgIH0K
KworICAgICAgICBQYXNzUmVmUHRyPFJlY3Vyc2l2ZU9iamVjdDI+IHJlbGVhc2UoKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gUmVmUHRyPFJlY3Vyc2l2ZU9iamVjdDI+KCp0aGlzKS5y
ZWxlYXNlKCk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgLyoKKyAgICAgKiBTeW50aGV0aWMg
Y29uc3RydWN0b3I6CisgICAgICogUmVmUHRyPFJlY3Vyc2l2ZU9iamVjdDI+IHJlc3VsdCA9IFJl
Y3Vyc2l2ZU9iamVjdDI6OmNyZWF0ZSgpOworICAgICAqLworICAgIHN0YXRpYyBCdWlsZGVyPE5v
RmllbGRzU2V0PiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVs
ZHNTZXQ+KEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7CisgICAgfQorICAg
IHR5cGVkZWYgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6U3RydWN0SXRlbVRyYWl0cyBJdGVtVHJh
aXRzOworCisgICAgdm9pZCBzZXRPYmooUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVy
OjpUZXN0OjpSZWN1cnNpdmVPYmplY3QxPiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHRoaXMtPnNl
dFZhbHVlKEFTQ0lJTGl0ZXJhbCgib2JqIiksIHZhbHVlKTsKKyAgICB9Cit9OworCit9IC8vIFRl
c3QKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlR5cGVCdWls
ZGVyOjpUZXN0OjpDYXN0ZWRBbmltYWxzPiB7CisjaWYgIUFTU0VSVF9ESVNBQkxFRAorc3RhdGlj
IHZvaWQgYXNzZXJ0Q29ycmVjdFZhbHVlKEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUqKTsKKyNl
bmRpZiAvLyAhQVNTRVJUX0RJU0FCTEVECit9OwordGVtcGxhdGU8PiBzdHJ1Y3QgQmluZGluZ1Ry
YWl0czxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3Q+IHsKK3N0
YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlRlc3Q6OlR5cGVOZWVkaW5n
Q2FzdD4gcnVudGltZUNhc3QoUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiB2
YWx1ZSk7CisjaWYgIUFTU0VSVF9ESVNBQkxFRAorc3RhdGljIHZvaWQgYXNzZXJ0Q29ycmVjdFZh
bHVlKEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUqKTsKKyNlbmRpZiAvLyAhQVNTRVJUX0RJU0FC
TEVECit9OwordGVtcGxhdGU8PiBzdHJ1Y3QgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlR5cGVC
dWlsZGVyOjpUZXN0OjpSZWN1cnNpdmVPYmplY3QxPiB7CisjaWYgIUFTU0VSVF9ESVNBQkxFRAor
c3RhdGljIHZvaWQgYXNzZXJ0Q29ycmVjdFZhbHVlKEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUq
KTsKKyNlbmRpZiAvLyAhQVNTRVJUX0RJU0FCTEVECit9OwordGVtcGxhdGU8PiBzdHJ1Y3QgQmlu
ZGluZ1RyYWl0czxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpUZXN0OjpSZWN1cnNpdmVPYmplY3Qy
PiB7CisjaWYgIUFTU0VSVF9ESVNBQkxFRAorc3RhdGljIHZvaWQgYXNzZXJ0Q29ycmVjdFZhbHVl
KEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUqKTsKKyNlbmRpZiAvLyAhQVNTRVJUX0RJU0FCTEVE
Cit9OworCit9IC8vIG5hbWVzcGFjZSBUeXBlQnVpbGRlcgorCit9IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyNlbmRpZiAvLyAhZGVmaW5l
ZChJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzX2gpCisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRl
c3RUeXBlQnVpbGRlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdFR5cGVCdWls
ZGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5q
c29uCisvLyBieSB0aGUgc2NyaXB0OiBKYXZhU2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0cy9Db2Rl
R2VuZXJhdG9ySW5zcGVjdG9yLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJ
bnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmgiCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisj
aW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwor
bmFtZXNwYWNlIFR5cGVCdWlsZGVyIHsKKworc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGVudW1f
Y29uc3RhbnRfdmFsdWVzW10gPSB7CisgICAgIkR1Y2tzIiwKKyAgICAiSGVucyIsCisgICAgIkNy
b3dzIiwKKyAgICAiRmxhbWluZ29zIiwKKyAgICAiUGlncyIsCisgICAgIkNvd3MiLAorICAgICJD
YXRzIiwKK307CisKK1N0cmluZyBnZXRUZXN0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpIHsK
KyAgICByZXR1cm4gZW51bV9jb25zdGFudF92YWx1ZXNbY29kZV07Cit9CisKKworCisjaWYgIUFT
U0VSVF9ESVNBQkxFRAordm9pZCBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6
OlRlc3Q6OkNhc3RlZEFuaW1hbHM+Ojphc3NlcnRDb3JyZWN0VmFsdWUoSW5zcGVjdG9yOjpJbnNw
ZWN0b3JWYWx1ZSogdmFsdWUpCit7CisgICAgV1RGOjpTdHJpbmcgczsKKyAgICBib29sIGNhc3Rf
cmVzID0gdmFsdWUtPmFzU3RyaW5nKCZzKTsKKyAgICBBU1NFUlQoY2FzdF9yZXMpOworICAgIEFT
U0VSVChzID09ICJEdWNrcyIgfHwgcyA9PSAiSGVucyIgfHwgcyA9PSAiQ3Jvd3MiIHx8IHMgPT0g
IkZsYW1pbmdvcyIpOworfQorI2VuZGlmIC8vICFBU1NFUlRfRElTQUJMRUQKKworI2lmICFBU1NF
UlRfRElTQUJMRUQKK3ZvaWQgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpU
ZXN0OjpUeXBlTmVlZGluZ0Nhc3Q+Ojphc3NlcnRDb3JyZWN0VmFsdWUoSW5zcGVjdG9yOjpJbnNw
ZWN0b3JWYWx1ZSogdmFsdWUpCit7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gb2JqZWN0
OworICAgIGJvb2wgY2FzdFJlcyA9IHZhbHVlLT5hc09iamVjdCgmb2JqZWN0KTsKKyAgICBBU1NF
UlRfVU5VU0VEKGNhc3RSZXMsIGNhc3RSZXMpOworICAgIHsKKyAgICAgICAgSW5zcGVjdG9yT2Jq
ZWN0OjppdGVyYXRvciBzdHJpbmdQb3M7CisgICAgICAgIHN0cmluZ1BvcyA9IG9iamVjdC0+Zmlu
ZCgic3RyaW5nIik7CisgICAgICAgIEFTU0VSVChzdHJpbmdQb3MgIT0gb2JqZWN0LT5lbmQoKSk7
CisgICAgICAgIEJpbmRpbmdUcmFpdHM8U3RyaW5nPjo6YXNzZXJ0Q29ycmVjdFZhbHVlKHN0cmlu
Z1Bvcy0+dmFsdWUuZ2V0KCkpOworICAgIH0KKyAgICB7CisgICAgICAgIEluc3BlY3Rvck9iamVj
dDo6aXRlcmF0b3IgbnVtYmVyUG9zOworICAgICAgICBudW1iZXJQb3MgPSBvYmplY3QtPmZpbmQo
Im51bWJlciIpOworICAgICAgICBBU1NFUlQobnVtYmVyUG9zICE9IG9iamVjdC0+ZW5kKCkpOwor
ICAgICAgICBCaW5kaW5nVHJhaXRzPGludD46OmFzc2VydENvcnJlY3RWYWx1ZShudW1iZXJQb3Mt
PnZhbHVlLmdldCgpKTsKKyAgICB9CisgICAgeworICAgICAgICBJbnNwZWN0b3JPYmplY3Q6Oml0
ZXJhdG9yIGFuaW1hbHNQb3M7CisgICAgICAgIGFuaW1hbHNQb3MgPSBvYmplY3QtPmZpbmQoImFu
aW1hbHMiKTsKKyAgICAgICAgQVNTRVJUKGFuaW1hbHNQb3MgIT0gb2JqZWN0LT5lbmQoKSk7Cisg
ICAgICAgIEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6VGVzdDo6Q2FzdGVk
QW5pbWFscz46OmFzc2VydENvcnJlY3RWYWx1ZShhbmltYWxzUG9zLT52YWx1ZS5nZXQoKSk7Cisg
ICAgfQorICAgIHsKKyAgICAgICAgSW5zcGVjdG9yT2JqZWN0OjppdGVyYXRvciBpZFBvczsKKyAg
ICAgICAgaWRQb3MgPSBvYmplY3QtPmZpbmQoImlkIik7CisgICAgICAgIEFTU0VSVChpZFBvcyAh
PSBvYmplY3QtPmVuZCgpKTsKKyAgICAgICAgQmluZGluZ1RyYWl0czxpbnQ+Ojphc3NlcnRDb3Jy
ZWN0VmFsdWUoaWRQb3MtPnZhbHVlLmdldCgpKTsKKyAgICB9CisgICAgeworICAgICAgICBJbnNw
ZWN0b3JPYmplY3Q6Oml0ZXJhdG9yIHRyZWVQb3M7CisgICAgICAgIHRyZWVQb3MgPSBvYmplY3Qt
PmZpbmQoInRyZWUiKTsKKyAgICAgICAgQVNTRVJUKHRyZWVQb3MgIT0gb2JqZWN0LT5lbmQoKSk7
CisgICAgICAgIEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6VGVzdDo6UmVj
dXJzaXZlT2JqZWN0MT46OmFzc2VydENvcnJlY3RWYWx1ZSh0cmVlUG9zLT52YWx1ZS5nZXQoKSk7
CisgICAgfQorCisgICAgaW50IGZvdW5kUHJvcGVydGllc0NvdW50ID0gNTsKKyAgICBpZiAoZm91
bmRQcm9wZXJ0aWVzQ291bnQgIT0gb2JqZWN0LT5zaXplKCkpCisgICAgICAgIEZBVEFMKCJVbmV4
cGVjdGVkIHByb3BlcnRpZXMgaW4gb2JqZWN0OiAlc1xuIiwgb2JqZWN0LT50b0pTT05TdHJpbmco
KS5hc2NpaSgpLmRhdGEoKSk7Cit9CisjZW5kaWYgLy8gIUFTU0VSVF9ESVNBQkxFRAorCitQYXNz
UmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdD4gQmlu
ZGluZ1RyYWl0czxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3Q+
OjpydW50aW1lQ2FzdChQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+IHZhbHVl
KQoreworICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gb2JqZWN0OworICAg
IGJvb2wgY2FzdFJlcyA9IHZhbHVlLT5hc09iamVjdCgmb2JqZWN0KTsKKyAgICBBU1NFUlRfVU5V
U0VEKGNhc3RSZXMsIGNhc3RSZXMpOworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICBCaW5kaW5n
VHJhaXRzPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdD46OmFz
c2VydENvcnJlY3RWYWx1ZShvYmplY3QuZ2V0KCkpOworI2VuZGlmICAvLyAhQVNTRVJUX0RJU0FC
TEVECisgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlRl
c3Q6OlR5cGVOZWVkaW5nQ2FzdCkgPT0gc2l6ZW9mKEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0
QmFzZSksIHR5cGVfY2FzdF9wcm9ibGVtKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SW5zcGVj
dG9yOjpUeXBlQnVpbGRlcjo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0Kj4oc3RhdGljX2Nhc3Q8SW5z
cGVjdG9yOjpJbnNwZWN0b3JPYmplY3RCYXNlKj4ob2JqZWN0LmdldCgpKSk7Cit9CisKKworI2lm
ICFBU1NFUlRfRElTQUJMRUQKK3ZvaWQgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlR5cGVCdWls
ZGVyOjpUZXN0OjpSZWN1cnNpdmVPYmplY3QxPjo6YXNzZXJ0Q29ycmVjdFZhbHVlKEluc3BlY3Rv
cjo6SW5zcGVjdG9yVmFsdWUqIHZhbHVlKQoreworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IG9iamVjdDsKKyAgICBib29sIGNhc3RSZXMgPSB2YWx1ZS0+YXNPYmplY3QoJm9iamVjdCk7Cisg
ICAgQVNTRVJUX1VOVVNFRChjYXN0UmVzLCBjYXN0UmVzKTsKKworICAgIGludCBmb3VuZFByb3Bl
cnRpZXNDb3VudCA9IDA7CisgICAgeworICAgICAgICBJbnNwZWN0b3JPYmplY3Q6Oml0ZXJhdG9y
IG9ialBvczsKKyAgICAgICAgb2JqUG9zID0gb2JqZWN0LT5maW5kKCJvYmoiKTsKKyAgICAgICAg
aWYgKG9ialBvcyAhPSBvYmplY3QtPmVuZCgpKSB7CisgICAgICAgICAgICBCaW5kaW5nVHJhaXRz
PEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDI+Ojphc3NlcnRD
b3JyZWN0VmFsdWUob2JqUG9zLT52YWx1ZS5nZXQoKSk7CisgICAgICAgICAgICArK2ZvdW5kUHJv
cGVydGllc0NvdW50OworICAgICAgICB9CisgICAgfQorICAgIGlmIChmb3VuZFByb3BlcnRpZXND
b3VudCAhPSBvYmplY3QtPnNpemUoKSkKKyAgICAgICAgRkFUQUwoIlVuZXhwZWN0ZWQgcHJvcGVy
dGllcyBpbiBvYmplY3Q6ICVzXG4iLCBvYmplY3QtPnRvSlNPTlN0cmluZygpLmFzY2lpKCkuZGF0
YSgpKTsKK30KKyNlbmRpZiAvLyAhQVNTRVJUX0RJU0FCTEVECisKKyNpZiAhQVNTRVJUX0RJU0FC
TEVECit2b2lkIEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6VGVzdDo6UmVj
dXJzaXZlT2JqZWN0Mj46OmFzc2VydENvcnJlY3RWYWx1ZShJbnNwZWN0b3I6Okluc3BlY3RvclZh
bHVlKiB2YWx1ZSkKK3sKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBvYmplY3Q7CisgICAg
Ym9vbCBjYXN0UmVzID0gdmFsdWUtPmFzT2JqZWN0KCZvYmplY3QpOworICAgIEFTU0VSVF9VTlVT
RUQoY2FzdFJlcywgY2FzdFJlcyk7CisKKyAgICBpbnQgZm91bmRQcm9wZXJ0aWVzQ291bnQgPSAw
OworICAgIHsKKyAgICAgICAgSW5zcGVjdG9yT2JqZWN0OjppdGVyYXRvciBvYmpQb3M7CisgICAg
ICAgIG9ialBvcyA9IG9iamVjdC0+ZmluZCgib2JqIik7CisgICAgICAgIGlmIChvYmpQb3MgIT0g
b2JqZWN0LT5lbmQoKSkgeworICAgICAgICAgICAgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlR5
cGVCdWlsZGVyOjpUZXN0OjpSZWN1cnNpdmVPYmplY3QxPjo6YXNzZXJ0Q29ycmVjdFZhbHVlKG9i
alBvcy0+dmFsdWUuZ2V0KCkpOworICAgICAgICAgICAgKytmb3VuZFByb3BlcnRpZXNDb3VudDsK
KyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoZm91bmRQcm9wZXJ0aWVzQ291bnQgIT0gb2JqZWN0
LT5zaXplKCkpCisgICAgICAgIEZBVEFMKCJVbmV4cGVjdGVkIHByb3BlcnRpZXMgaW4gb2JqZWN0
OiAlc1xuIiwgb2JqZWN0LT50b0pTT05TdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSk7Cit9CisjZW5k
aWYgLy8gIUFTU0VSVF9ESVNBQkxFRAorCit9IC8vIG5hbWVzcGFjZSBUeXBlQnVpbGRlcgorCit9
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisK
KyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5jcHAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWR1
cGxpY2F0ZS10eXBlLWRlY2xhcmF0aW9ucy5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tZHVwbGljYXRlLXR5cGUtZGVjbGFyYXRpb25z
Lmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNzAyZmM2YTMyNzBhNjQ2YTQ1MDQ0N2ZkYzA0MDEzOTk1YTk0MmJm
MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9mYWlsLW9uLWR1cGxpY2F0ZS10eXBlLWRlY2xhcmF0aW9ucy5qc29uCkBAIC0w
LDAgKzEsMTUgQEAKK3sKKyAgICAiZG9tYWluIjogIlJ1bnRpbWUiLAorICAgICJ0eXBlcyI6IFsK
KyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIlJlbW90ZU9iamVjdElkIiwKKyAgICAgICAg
ICAgICJ0eXBlIjogInN0cmluZyIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5pcXVl
IG9iamVjdCBpZGVudGlmaWVyLiIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAg
ImlkIjogIlJlbW90ZU9iamVjdElkIiwKKyAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCisg
ICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5pcXVlIG9iamVjdCBpZGVudGlmaWVyLiIKKyAg
ICAgICAgfQorICAgIF0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLXR5cGUtZGVjbGFyYXRpb24tdXNpbmctdHlwZS1y
ZWZlcmVuY2UuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9mYWlsLW9uLXR5cGUtZGVjbGFyYXRpb24tdXNpbmctdHlwZS1yZWZlcmVuY2UuanNvbgpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4xOWI3NTkwY2NjNmY2YmMzNDQzYTRhMjgzY2E2ZmNjZmRmMzI3NzM0Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2ZhaWwtb24tdHlwZS1kZWNsYXJhdGlvbi11c2luZy10eXBlLXJlZmVyZW5jZS5qc29uCkBA
IC0wLDAgKzEsMTMgQEAKK1sKK3sKKyAgICAiZG9tYWluIjogIlJ1bnRpbWUiLAorICAgICJ0eXBl
cyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIlJlbW90ZU9iamVjdElkIiwKKyAg
ICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCisgICAgICAgICAgICAiJHJlZiI6ICJTb21lVHlw
ZSIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5pcXVlIG9iamVjdCBpZGVudGlmaWVy
LiIKKyAgICAgICAgfQorICAgIF0KK30KK10KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVu
Y2UtaW4tdHlwZS1kZWNsYXJhdGlvbi5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVyZW5jZS1pbi10eXBl
LWRlY2xhcmF0aW9uLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDY4ODdhMjc0MTE5MDBhODBkNTBmMDAzZWFj
MzZjMTNhOTlmYWU1OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2UtaW4t
dHlwZS1kZWNsYXJhdGlvbi5qc29uCkBAIC0wLDAgKzEsMTIgQEAKK1sKK3sKKyAgICAiZG9tYWlu
IjogIlJ1bnRpbWUiLAorICAgICJ0eXBlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlk
IjogIlJlbW90ZU9iamVjdElkIiwKKyAgICAgICAgICAgICJ0eXBlIjogImRyYWdvbiIsCisgICAg
ICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5pcXVlIG9iamVjdCBpZGVudGlmaWVyLiIKKyAgICAg
ICAgfQorICAgIF0KK30KK10KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2UtaW4tdHlw
ZS1tZW1iZXIuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1tZW1iZXIuanNvbgpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5iODE3ZGI1MDQ0ZGMxZjI4NTU3MDA4YzFmMTc2MWYxYjA2OGY0Y2U2Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2ZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVyZW5jZS1pbi10eXBlLW1lbWJlci5qc29uCkBA
IC0wLDAgKzEsMTUgQEAKK1sKK3sKKyAgICAiZG9tYWluIjogIkZhbnRhc3kiLAorICAgICJ0eXBl
cyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIkRyYWdvbkVnZyIsCisgICAgICAg
ICAgICAidHlwZSI6ICJvYmplY3QiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkEgZHJh
Z29uIGVnZy4iLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCisgICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJjb2xvciIsICIkcmVmIjogIkNvbG9yIiB9CisgICAgICAgICAgICBdCisgICAg
ICAgIH0KKyAgICBdCit9CitdCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbiBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9zYW1lLXR5cGUt
aWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNiZjRkZmY1Y2NjMjlkMGU4YzFm
YTRiMmRkMzI4M2U3NzE2MzJjN2QKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21h
aW4uanNvbgpAQCAtMCwwICsxLDIyIEBACitbCit7CisgICAgImRvbWFpbiI6ICJSdW50aW1lIiwK
KyAgICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJSZW1vdGVPYmpl
Y3RJZCIsCisgICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAorICAgICAgICAgICAgImRlc2Ny
aXB0aW9uIjogIlVuaXF1ZSBvYmplY3QgaWRlbnRpZmllci4iCisgICAgICAgIH0KKyAgICBdCit9
LAoreworICAgICJkb21haW4iOiAiUnVudGltZTIiLAorICAgICJ0eXBlcyI6IFsKKyAgICAgICAg
eworICAgICAgICAgICAgImlkIjogIlJlbW90ZU9iamVjdElkIiwKKyAgICAgICAgICAgICJ0eXBl
IjogInN0cmluZyIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5pcXVlIG9iamVjdCBp
ZGVudGlmaWVyLiIKKyAgICAgICAgfQorICAgIF0KK30KK10KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy90eXBlLWRlY2xhcmF0aW9uLWFs
aWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy90eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUu
anNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5jYmM5ZDUzOTQ3OGRiNDk1Yzk2MDY3ZWNkNTRhOTViZTUyZjhkMDcw
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL3R5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uCkBA
IC0wLDAgKzEsMTAgQEAKK3sKKyAgICAiZG9tYWluIjogIlJ1bnRpbWUiLAorICAgICJ0eXBlcyI6
IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIlJlbW90ZU9iamVjdElkIiwKKyAgICAg
ICAgICAgICJ0eXBlIjogImludGVnZXIiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVu
aXF1ZSBvYmplY3QgaWRlbnRpZmllci4iCisgICAgICAgIH0KKyAgICBdCit9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvdHlwZS1kZWNs
YXJhdGlvbi1hcnJheS10eXBlLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24KbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uY2ZiMDhiZDk0MGI2NGZiNjYwMzk2NWNlMWIwNGQzZmM5NzQ5ZWE5MAotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy90eXBl
LWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbgpAQCAtMCwwICsxLDUwIEBACitbCit7CisgICAg
ImRvbWFpbiI6ICJEZWJ1Z2dlciIsCisgICAgInR5cGVzIjogWworICAgICAgICB7CisgICAgICAg
ICAgICAiaWQiOiAiQnJlYWtwb2ludElkIiwKKyAgICAgICAgICAgICJ0eXBlIjogImludGVnZXIi
CisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJSZWFzb24iLAorICAg
ICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKKyAgICAgICAgICAgICJlbnVtIjogWyJEaWVkIiwg
IkZhaW50ZWQiLCAiSHVuZ3J5Il0KKyAgICAgICAgfQorICAgIF0KK30sCit7CisgICAgImRvbWFp
biI6ICJSdW50aW1lIiwKKyAgICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJp
ZCI6ICJPYmplY3RJZCIsCisgICAgICAgICAgICAidHlwZSI6ICJpbnRlZ2VyIgorICAgICAgICB9
LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiTHVja3lOdW1iZXJzIiwKKyAgICAgICAg
ICAgICJ0eXBlIjogImFycmF5IiwKKyAgICAgICAgICAgICJpdGVtcyI6IHsgInR5cGUiOiAiaW50
ZWdlciIgfQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiQmFieU5h
bWVzIiwKKyAgICAgICAgICAgICJ0eXBlIjogImFycmF5IiwKKyAgICAgICAgICAgICJpdGVtcyI6
IHsgInR5cGUiOiAic3RyaW5nIiB9CisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAg
ICJpZCI6ICJOZXdPYmplY3RzIiwKKyAgICAgICAgICAgICJ0eXBlIjogImFycmF5IiwKKyAgICAg
ICAgICAgICJpdGVtcyI6IHsgIiRyZWYiOiAiT2JqZWN0SWQiIH0KKyAgICAgICAgfSwKKyAgICAg
ICAgeworICAgICAgICAgICAgImlkIjogIk9sZE9iamVjdHMiLAorICAgICAgICAgICAgInR5cGUi
OiAiYXJyYXkiLAorICAgICAgICAgICAgIml0ZW1zIjogeyAiJHJlZiI6ICJEZWJ1Z2dlci5CcmVh
a3BvaW50SWQiIH0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIlN0
b3BSZWFzb25zIiwKKyAgICAgICAgICAgICJ0eXBlIjogImFycmF5IiwKKyAgICAgICAgICAgICJp
dGVtcyI6IHsgIiRyZWYiOiAiRGVidWdnZXIuUmVhc29uIiB9CisgICAgICAgIH0KKyAgICBdCit9
CitdCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy90eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5q
c29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjA1ODU3ZmQwOGRiMDE3ODQwM2UwNTA2NDU1MmY5NDU2ZmU1OWI0MmUK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgpAQCAtMCwwICsxLDIwIEBA
Cit7CisgICAgImRvbWFpbiI6ICJSdW50aW1lIiwKKyAgICAidHlwZXMiOiBbCisgICAgICAgIHsK
KyAgICAgICAgICAgICJpZCI6ICJMdWNreU51bWJlcnMiLAorICAgICAgICAgICAgInR5cGUiOiAi
aW50ZWdlciIsCisgICAgICAgICAgICAiZW51bSI6IFswLCAxLCAyXQorICAgICAgICB9LAorICAg
ICAgICB7CisgICAgICAgICAgICAiaWQiOiAiRmFybUFuaW1hbHMiLAorICAgICAgICAgICAgInR5
cGUiOiAic3RyaW5nIiwKKyAgICAgICAgICAgICJlbnVtIjogWyJQaWdzIiwgIkNvd3MiLCAiQ2F0
cyIsICJIZW5zIl0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIlR3
b0xlZ2dlZEFuaW1hbHMiLAorICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKKyAgICAgICAg
ICAgICJlbnVtIjogWyJEdWNrcyIsICJIZW5zIiwgIkNyb3dzIiwgIkZsYW1pbmdvcyJdCisgICAg
ICAgIH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3R5cGUtZGVjbGFyYXRp
b24tb2JqZWN0LXR5cGUuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42ZjU3YWQyY2Y1Zjc4YmM2NTRkZjgxYTkz
ZGJiNTYwNjlkMTVhNDMxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3R5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNv
bgpAQCAtMCwwICsxLDk3IEBACitbCit7CisgICAgImRvbWFpbiI6ICJEYXRhYmFzZSIsCisgICAg
ImRlc2NyaXB0aW9uIjogIlRlc3QgdHlwZSBidWlsZGVyIGdlbmVyYXRpb24gb2YgdmFyaW91cyBv
YmplY3QgdHlwZXMuIiwKKyAgICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJp
ZCI6ICJFcnJvciIsCisgICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAorICAgICAgICAgICAg
ImRlc2NyaXB0aW9uIjogIkRhdGFiYXNlIGVycm9yLiIsCisgICAgICAgICAgICAicHJvcGVydGll
cyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm1lc3NhZ2UiLCAidHlwZSI6ICJzdHJp
bmciLCAiZGVzY3JpcHRpb24iOiAiRXJyb3IgbWVzc2FnZS4iIH0sCisgICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJjb2RlIiwgInR5cGUiOiAiaW50ZWdlciIsICJkZXNjcmlwdGlvbiI6ICJFcnJv
ciBjb2RlLiIgfQorICAgICAgICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAg
ICAgICAiaWQiOiAiT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGUiLAorICAgICAgICAgICAgInR5cGUi
OiAib2JqZWN0IiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWworICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJhcnJheSIsICJvcHRpb25hbCI6IHRy
dWUsICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9IH0sCisgICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciIsICJv
cHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInZhbHVlcyIsICJ0
eXBlIjogIm9iamVjdCIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJu
YW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJhbnkiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJlcnJvciIsICIkcmVmIjogIkVycm9yIiwgIm9wdGlvbmFs
IjogdHJ1ZSB9CisgICAgICAgICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAg
ICAgICJpZCI6ICJQYXJhbWV0ZXJCdW5kbGUiLAorICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0
IiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJhcnJheSIsICJpdGVtcyI6IHsgInR5cGUiOiAic3Ry
aW5nIiB9IH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0
cmluZyIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjog
Im51bWJlciIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInZhbHVlcyIsICJ0eXBlIjog
Im9iamVjdCIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBheWxvYWQiLCAidHlwZSI6
ICJhbnkiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJlcnJvciIsICIkcmVmIjogIkVy
cm9yIiB9CisgICAgICAgICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAg
ICJpZCI6ICJPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzIiwKKyAgICAgICAgICAgICJk
ZXNjcmlwdGlvbiI6ICJDb25mbGljdGVkIG5hbWVzIG1heSBjYXVzZSBnZW5lcmF0ZWQgZ2V0dGVy
cy9zZXR0ZXJzIHRvIGNsYXNoIHdpdGggYnVpbHQtaW4gSW5zcGVjdG9yT2JqZWN0IG1ldGhvZHMu
IiwKKyAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCisgICAgICAgICAgICAicHJvcGVydGll
cyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImludGVnZXIiLCAidHlwZSI6ICJzdHJp
bmciIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJhcnJheSIsICJ0eXBlIjogInN0cmlu
ZyIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInN0cmluZyIsICJ0eXBlIjogInN0cmlu
ZyIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInZhbHVlIiwgInR5cGUiOiAic3RyaW5n
IiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAib2JqZWN0IiwgInR5cGUiOiAic3RyaW5n
IiB9CisgICAgICAgICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJp
ZCI6ICJEdW1teU9iamVjdCIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiQW4gb3BlbiBv
YmplY3QgdGhhdCBkb2Vzbid0IGhhdmUgYW55IHByZWRlZmluZWQgZmllbGRzLiIsCisgICAgICAg
ICAgICAidHlwZSI6ICJvYmplY3QiCisgICAgICAgIH0KKyAgICBdCit9LAoreworICAgICJkb21h
aW4iOiAiVGVzdCIsCisgICAgImRlc2NyaXB0aW9uIjogIlRlc3QgdGhlIGdlbmVyYXRpb24gb2Yg
c3BlY2lhbCBiZWhhdmlvcnMgdGhhdCBvbmx5IGFwcGx5IHRvIHNwZWNpZmljIGNsYXNzZXMuIiwK
KyAgICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJVbnBsZWFzYW50
TmFtZSIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVGhpcyB0eXBlIHNob3VsZCBiZSBy
ZW5hbWVkIHRvIEhhcHB5TmFtZSIsCisgICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAorICAg
ICAgICAgICAgIm1lbWJlcnMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJub3RlcyIs
ICJ0eXBlIjogInN0cmluZyIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRpbWVzdGFt
cCIsICJ0eXBlIjogIm51bWJlciIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInZhbHVl
cyIsICJ0eXBlIjogIm9iamVjdCIgfQorICAgICAgICAgICAgXQorICAgICAgICB9LAorICAgICAg
ICB7CisgICAgICAgICAgICAiaWQiOiAiUGFyYW1ldGVyQnVuZGxlIiwKKyAgICAgICAgICAgICJ0
eXBlIjogIm9iamVjdCIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IFsKKyAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAiYXJyYXkiLCAiaXRlbXMiOiB7
ICJ0eXBlIjogInN0cmluZyIgfSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibm90ZXMi
LCAidHlwZSI6ICJzdHJpbmciIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0aW1lc3Rh
bXAiLCAidHlwZSI6ICJudW1iZXIiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ2YWx1
ZXMiLCAidHlwZSI6ICJvYmplY3QiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwYXls
b2FkIiwgInR5cGUiOiAiYW55IiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZXJyb3Ii
LCAiJHJlZiI6ICJEYXRhYmFzZS5FcnJvciIgfQorICAgICAgICAgICAgXQorICAgICAgICB9Cisg
ICAgXSwKKyAgICAiY29tbWFuZHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjog
ImF0dGVtcHRDdXJzZSIsCisgICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKKyAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogImN1cnNlIiwgIiRyZWYiOiAiVW5wbGVhc2FudE5hbWUiIH0KKyAgICAg
ICAgICAgIF0sCisgICAgICAgICAgICAicmV0dXJucyI6IFsKKyAgICAgICAgICAgICAgICB7ICJu
YW1lIjogImNlbnNvcmVkQ3Vyc2UiLCAidHlwZSI6ICJzdHJpbmciLCAib3B0aW9uYWwiOiB0cnVl
IH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0KK30KK10KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy90eXBlLXJlcXVpcmlu
Zy1ydW50aW1lLWNhc3RzLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjgzZDk0YmU4OTdkMjJjYzA1OGJiNjQ2ZmVjZDlhNDczMDM3YjZiOTIKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvdHlwZS1y
ZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uCkBAIC0wLDAgKzEsNTEgQEAKK1sKK3sKKyAgICAi
ZG9tYWluIjogIlRlc3QiLAorICAgICJ0eXBlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAg
ImlkIjogIlR5cGVOZWVkaW5nQ2FzdCIsCisgICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAor
ICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkEgZHVtbXkgdHlwZSB0aGF0IHJlcXVpcmVzIHJ1
bnRpbWUgY2FzdHMsIGFuZCBmb3JjZXMgbm9uLXByaW1pdGl2ZSByZWZlcmVuY2VkIHR5cGVzIHRv
IGFsc28gZW1pdCBydW50aW1lIGNhc3QgaGVscGVycy4iLAorICAgICAgICAgICAgInByb3BlcnRp
ZXMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzdHJpbmciLCAidHlwZSI6ICJzdHJp
bmciLCAiZGVzY3JpcHRpb24iOiAiU3RyaW5nIG1lbWJlci4iIH0sCisgICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJudW1iZXIiLCAidHlwZSI6ICJpbnRlZ2VyIiwgImRlc2NyaXB0aW9uIjogIk51
bWJlciBtZW1iZXIuIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiYW5pbWFscyIsICIk
cmVmIjogIkNhc3RlZEFuaW1hbHMiLCAiZGVzY3JpcHRpb24iOiAiRW51bSBtZW1iZXIuIiB9LAor
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiaWQiLCAiJHJlZiI6ICJDYXN0ZWRPYmplY3RJZCIs
ICJkZXNjcmlwdGlvbiI6ICJBbGlhc2VkIG1lbWJlci4iIH0sCisgICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJ0cmVlIiwgIiRyZWYiOiAiUmVjdXJzaXZlT2JqZWN0MSIsICJkZXNjcmlwdGlvbiI6
ICJSZWN1cnNpdmUgb2JqZWN0IG1lbWJlci4iIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwK
KyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIkNhc3RlZE9iamVjdElkIiwKKyAgICAgICAg
ICAgICJ0eXBlIjogImludGVnZXIiCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAg
ICJpZCI6ICJVbmNhc3RlZE9iamVjdElkIiwKKyAgICAgICAgICAgICJ0eXBlIjogImludGVnZXIi
CisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJVbmNhc3RlZEFuaW1h
bHMiLAorICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKKyAgICAgICAgICAgICJlbnVtIjog
WyJQaWdzIiwgIkNvd3MiLCAiQ2F0cyIsICJIZW5zIl0KKyAgICAgICAgfSwKKyAgICAgICAgewor
ICAgICAgICAgICAgImlkIjogIkNhc3RlZEFuaW1hbHMiLAorICAgICAgICAgICAgInR5cGUiOiAi
c3RyaW5nIiwKKyAgICAgICAgICAgICJlbnVtIjogWyJEdWNrcyIsICJIZW5zIiwgIkNyb3dzIiwg
IkZsYW1pbmdvcyJdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJS
ZWN1cnNpdmVPYmplY3QxIiwKKyAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCisgICAgICAg
ICAgICAicHJvcGVydGllcyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm9iaiIsICIk
cmVmIjogIlJlY3Vyc2l2ZU9iamVjdDIiLCAib3B0aW9uYWwiOiB0cnVlIH0KKyAgICAgICAgICAg
IF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIlJlY3Vyc2l2ZU9i
amVjdDIiLAorICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKKyAgICAgICAgICAgICJwcm9w
ZXJ0aWVzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAib2JqIiwgIiRyZWYiOiAiUmVj
dXJzaXZlT2JqZWN0MSIsICJvcHRpb25hbCI6IHRydWUgfQorICAgICAgICAgICAgXQorICAgICAg
ICB9CisgICAgXQorfQorXQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJj
ZXMubWFrZSBiL1NvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKaW5kZXggNmQ4YmJk
ZDkwNTNkNWFmY2U2MzcwMjBkNzM2ZmIzZDFjOGJjZmQ5OS4uMDlmZTgwMzBkYTkzYjkzMDQxOGVl
ZmZmYmE5ZjhmMzkxNTI3MDNhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvRGVyaXZlZFNv
dXJjZXMubWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCkBAIC0x
MTQ0LDggKzExNDQsMTggQEAgaWZlcSAoJChmaW5kc3RyaW5nIEVOQUJMRV9XRUJfUkVQTEFZLCQo
RkVBVFVSRV9ERUZJTkVTKSksIEVOQUJMRV9XRUJfUkVQTEFZKQogZW5kaWYKIAogSU5TUEVDVE9S
X0dFTkVSQVRPUl9TQ1JJUFRTID0gXAotCSQoSW5zcGVjdG9yU2NyaXB0cykvQ29kZUdlbmVyYXRv
ckluc3BlY3Rvci5weSBcCi0JJChJbnNwZWN0b3JTY3JpcHRzKS9Db2RlR2VuZXJhdG9ySW5zcGVj
dG9yU3RyaW5ncy5weSBcCisgICAgJChJbnNwZWN0b3JTY3JpcHRzKS9nZW5lcmF0ZV9iYWNrZW5k
X2NvbW1hbmRzLnB5IFwKKyAgICAkKEluc3BlY3RvclNjcmlwdHMpL2dlbmVyYXRlX2JhY2tlbmRf
ZGlzcGF0Y2hlcl9oZWFkZXIucHkgXAorICAgICQoSW5zcGVjdG9yU2NyaXB0cykvZ2VuZXJhdGVf
YmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5IFwKKyAgICAkKEluc3BlY3RvclNj
cmlwdHMpL2dlbmVyYXRlX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5IFwKKyAgICAkKElu
c3BlY3RvclNjcmlwdHMpL2dlbmVyYXRlX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRp
b24ucHkgXAorICAgICQoSW5zcGVjdG9yU2NyaXB0cykvZ2VuZXJhdGVfdHlwZV9idWlsZGVyX2hl
YWRlci5weSBcCisgICAgJChJbnNwZWN0b3JTY3JpcHRzKS9nZW5lcmF0ZV90eXBlX2J1aWxkZXJf
aW1wbGVtZW50YXRpb24ucHkgXAorICAgICQoSW5zcGVjdG9yU2NyaXB0cykvZ2VuZXJhdG9yX3Rl
bXBsYXRlcy5weSBcCisgICAgJChJbnNwZWN0b3JTY3JpcHRzKS9nZW5lcmF0b3IucHkgXAorICAg
ICQoSW5zcGVjdG9yU2NyaXB0cykvZ2VuZXJhdGUtY29tYmluZWQtaW5zcGVjdG9yLWpzb24ucHkg
XAorICAgICQoSW5zcGVjdG9yU2NyaXB0cykvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5IFwKKyAgICAkKEluc3BlY3RvclNjcmlwdHMpL21vZGVscy5weSBcCiAjCiAKIGFs
bCA6IEluc3BlY3RvcldlYi5qc29uCkBAIC0xMTYzLDcgKzExNzMsNyBAQCBJbnNwZWN0b3JXZWIu
anNvbiA6ICQoSW5zcGVjdG9yU2NyaXB0cykvZ2VuZXJhdGUtY29tYmluZWQtaW5zcGVjdG9yLWpz
b24ucHkgJChJTgogYWxsIDogSW5zcGVjdG9yV2ViRnJvbnRlbmREaXNwYXRjaGVycy5oCiAKIElu
c3BlY3RvcldlYkZyb250ZW5kRGlzcGF0Y2hlcnMuaCA6IEluc3BlY3RvcldlYi5qc29uICQoSW5z
cGVjdG9yU2NyaXB0cykvSW5zcGVjdG9ySlMuanNvbiAkKElOU1BFQ1RPUl9HRU5FUkFUT1JfU0NS
SVBUUykKLQkkKFBZVEhPTikgJChJbnNwZWN0b3JTY3JpcHRzKS9Db2RlR2VuZXJhdG9ySW5zcGVj
dG9yLnB5IC4vSW5zcGVjdG9yV2ViLmpzb24gJChJbnNwZWN0b3JTY3JpcHRzKS9JbnNwZWN0b3JK
Uy5qc29uIC0tb3V0cHV0X2hfZGlyIC4gLS1vdXRwdXRfY3BwX2RpciAuIC0tb3V0cHV0X2pzX2Rp
ciAuIC0tb3V0cHV0X3R5cGUgV2ViCisJJChQWVRIT04pICQoSW5zcGVjdG9yU2NyaXB0cykvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5IC0tZnJhbWV3b3JrIFdlYkNvcmUg
LS1vdXRwdXREaXIgLiAuL0luc3BlY3RvcldlYi5qc29uICQoSW5zcGVjdG9yU2NyaXB0cykvSW5z
cGVjdG9ySlMuanNvbgogCiBhbGwgOiBJbnNwZWN0b3JPdmVybGF5UGFnZS5oCiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db21tYW5kTGluZUFQSUhvc3QuY3BwIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvbW1hbmRMaW5lQVBJSG9zdC5jcHAKaW5kZXggMDI5MTA2
OTU3YzAzNGFhNTRjMzAyYmJhZjc5ZjM0N2Y1NDlhY2Y5NS4uNWFjZGJlNzk4NTlhNWEyMDYyNzk1
NWU5NWIwN2Y0NWM4ZGUxOTRkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0NvbW1hbmRMaW5lQVBJSG9zdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0Nv
bW1hbmRMaW5lQVBJSG9zdC5jcHAKQEAgLTk1LDcgKzk1LDcgQEAgdm9pZCBDb21tYW5kTGluZUFQ
SUhvc3Q6OmRpc2Nvbm5lY3QoKQogdm9pZCBDb21tYW5kTGluZUFQSUhvc3Q6Omluc3BlY3RJbXBs
KFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IG9iamVjdCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JW
YWx1ZT4gaGludHMpCiB7CiAgICAgaWYgKG1faW5zcGVjdG9yQWdlbnQpIHsKLSAgICAgICAgUmVm
UHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4gcmVtb3Rl
T2JqZWN0ID0gSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UnVudGltZTo6UmVtb3RlT2JqZWN0Ojpy
dW50aW1lQ2FzdChvYmplY3QpOworICAgICAgICBSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRl
cjo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiByZW1vdGVPYmplY3QgPSBCaW5kaW5nVHJhaXRzPElu
c3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD46OnJ1bnRpbWVDYXN0
KG9iamVjdCk7CiAgICAgICAgIG1faW5zcGVjdG9yQWdlbnQtPmluc3BlY3QocmVtb3RlT2JqZWN0
LCBoaW50cy0+YXNPYmplY3QoKSk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHAKaW5kZXggMDZlNTRmYjdhMDExYzBmNWZkMDcyOTEy
YTMyZjQzZjdkYzIyZThmYS4uZWY4NzhjZmE0MDliNmM0ZDQ4ZDMxODE3NzNjMjViNTIwOGVjNjMx
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3Bw
CkBAIC0xMDAwLDkgKzEwMDAsOSBAQCBJbnNwZWN0b3JTdHlsZVNoZWV0KiBJbnNwZWN0b3JDU1NB
Z2VudDo6YXNzZXJ0U3R5bGVTaGVldEZvcklkKEVycm9yU3RyaW5nKiBlcnJvcgogICAgIHJldHVy
biBpdC0+dmFsdWUuZ2V0KCk7CiB9CiAKLUluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNTUzo6U3R5
bGVTaGVldE9yaWdpbjo6RW51bSBJbnNwZWN0b3JDU1NBZ2VudDo6ZGV0ZWN0T3JpZ2luKENTU1N0
eWxlU2hlZXQqIHBhZ2VTdHlsZVNoZWV0LCBEb2N1bWVudCogb3duZXJEb2N1bWVudCkKK0luc3Bl
Y3Rvcjo6VHlwZUJ1aWxkZXI6OkNTUzo6U3R5bGVTaGVldE9yaWdpbiBJbnNwZWN0b3JDU1NBZ2Vu
dDo6ZGV0ZWN0T3JpZ2luKENTU1N0eWxlU2hlZXQqIHBhZ2VTdHlsZVNoZWV0LCBEb2N1bWVudCog
b3duZXJEb2N1bWVudCkKIHsKLSAgICBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDU1M6OlN0eWxl
U2hlZXRPcmlnaW46OkVudW0gb3JpZ2luID0gSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q1NTOjpT
dHlsZVNoZWV0T3JpZ2luOjpSZWd1bGFyOworICAgIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNT
Uzo6U3R5bGVTaGVldE9yaWdpbiBvcmlnaW4gPSBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDU1M6
OlN0eWxlU2hlZXRPcmlnaW46OlJlZ3VsYXI7CiAgICAgaWYgKHBhZ2VTdHlsZVNoZWV0ICYmICFw
YWdlU3R5bGVTaGVldC0+b3duZXJOb2RlKCkgJiYgcGFnZVN0eWxlU2hlZXQtPmhyZWYoKS5pc0Vt
cHR5KCkpCiAgICAgICAgIG9yaWdpbiA9IEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNTUzo6U3R5
bGVTaGVldE9yaWdpbjo6VXNlckFnZW50OwogICAgIGVsc2UgaWYgKHBhZ2VTdHlsZVNoZWV0ICYm
IHBhZ2VTdHlsZVNoZWV0LT5vd25lck5vZGUoKSAmJiBwYWdlU3R5bGVTaGVldC0+b3duZXJOb2Rl
KCktPm5vZGVOYW1lKCkgPT0gIiNkb2N1bWVudCIpCkBAIC0xMTA2LDcgKzExMDYsNyBAQCBQYXNz
UmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5PEluc3BlY3Rvcjo6VHlwZUJ1aWxk
ZXI6OkNTUzo6UmVnaW9uPj4gSQogICAgIFJlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpB
cnJheTxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDU1M6OlJlZ2lvbj4+IHJlZ2lvbnMgPSBJbnNw
ZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheTxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDU1M6OlJl
Z2lvbj46OmNyZWF0ZSgpOwogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlZ2lvbkxp
c3QtPmxlbmd0aCgpOyArK2kpIHsKLSAgICAgICAgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q1NT
OjpSZWdpb246OlJlZ2lvbk92ZXJzZXQ6OkVudW0gcmVnaW9uT3ZlcnNldDsKKyAgICAgICAgSW5z
cGVjdG9yOjpUeXBlQnVpbGRlcjo6Q1NTOjpSZWdpb246OlJlZ2lvbk92ZXJzZXQgcmVnaW9uT3Zl
cnNldDsKIAogICAgICAgICBzd2l0Y2ggKHRvRWxlbWVudChyZWdpb25MaXN0LT5pdGVtKGkpKS0+
cmVnaW9uT3ZlcnNldFN0YXRlKCkpIHsKICAgICAgICAgY2FzZSBSZWdpb25GaXQ6CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuaCBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5oCmluZGV4IDM2NTIzN2YwMzZh
NmNmNmJiZTFhNWY1MzM3NGI3NWNlNTI2MDc4ZjIuLjE3NTVkNzIwYzMxNWUyZWQ4YzFkYTYwNGYy
MDVmNmJiZGU5ZDAxNWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JDU1NBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JD
U1NBZ2VudC5oCkBAIC0xNDksNyArMTQ5LDcgQEAgcHJpdmF0ZToKICAgICBJbnNwZWN0b3JTdHls
ZVNoZWV0KiBiaW5kU3R5bGVTaGVldChDU1NTdHlsZVNoZWV0Kik7CiAgICAgSW5zcGVjdG9yU3R5
bGVTaGVldCogdmlhSW5zcGVjdG9yU3R5bGVTaGVldChEb2N1bWVudCosIGJvb2wgY3JlYXRlSWZB
YnNlbnQpOwogICAgIEluc3BlY3RvclN0eWxlU2hlZXQqIGFzc2VydFN0eWxlU2hlZXRGb3JJZChF
cnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYpOwotICAgIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6
OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6RW51bSBkZXRlY3RPcmlnaW4oQ1NTU3R5bGVTaGVldCog
cGFnZVN0eWxlU2hlZXQsIERvY3VtZW50KiBvd25lckRvY3VtZW50KTsKKyAgICBJbnNwZWN0b3I6
OlR5cGVCdWlsZGVyOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW4gZGV0ZWN0T3JpZ2luKENTU1N0eWxl
U2hlZXQqIHBhZ2VTdHlsZVNoZWV0LCBEb2N1bWVudCogb3duZXJEb2N1bWVudCk7CiAKICAgICBQ
YXNzUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTUnVsZT4gYnVpbGRPYmpl
Y3RGb3JSdWxlKFN0eWxlUnVsZSosIFN0eWxlUmVzb2x2ZXImKTsKICAgICBQYXNzUmVmUHRyPElu
c3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTUnVsZT4gYnVpbGRPYmplY3RGb3JSdWxlKENT
U1N0eWxlUnVsZSopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckRPTUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01B
Z2VudC5jcHAKaW5kZXggNjgxMWMyMDIyYTU2ZTMyZjk0NTMyZTJjZTBiOWY4NTJlYmQ4ODFjYy4u
MWU2YzA2NDQxZWFhZGNhZGYxOWQwZGVmYzBmZGVmMjc4MTIxYWZlZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCkBAIC0xNDQ0LDcgKzE0NDQs
NyBAQCBQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVz
PiBJbnNwZWN0b3JET01BZ2VudDo6YnVpbGRPYgogCiAgICAgTm9kZSogYWN0aXZlRGVzY2VuZGFu
dE5vZGUgPSBudWxscHRyOwogICAgIGJvb2wgYnVzeSA9IGZhbHNlOwotICAgIFR5cGVCdWlsZGVy
OjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpDaGVja2VkOjpFbnVtIGNoZWNrZWQgPSBU
eXBlQnVpbGRlcjo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6Q2hlY2tlZDo6RmFsc2U7
CisgICAgVHlwZUJ1aWxkZXI6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6OkNoZWNrZWQg
Y2hlY2tlZCA9IFR5cGVCdWlsZGVyOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpDaGVj
a2VkOjpGYWxzZTsKICAgICBSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk8aW50
Pj4gY2hpbGROb2RlSWRzOwogICAgIFJlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJh
eTxpbnQ+PiBjb250cm9sbGVkTm9kZUlkczsKICAgICBib29sIGV4aXN0cyA9IGZhbHNlOwpAQCAt
MTQ1NCwxMSArMTQ1NCwxMSBAQCBQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpET006OkFjY2Vzc2li
aWxpdHlQcm9wZXJ0aWVzPiBJbnNwZWN0b3JET01BZ2VudDo6YnVpbGRPYgogICAgIGJvb2wgZm9j
dXNlZCA9IGZhbHNlOwogICAgIGJvb2wgaWdub3JlZCA9IHRydWU7CiAgICAgYm9vbCBpZ25vcmVk
QnlEZWZhdWx0ID0gZmFsc2U7Ci0gICAgVHlwZUJ1aWxkZXI6OkRPTTo6QWNjZXNzaWJpbGl0eVBy
b3BlcnRpZXM6OkludmFsaWQ6OkVudW0gaW52YWxpZCA9IFR5cGVCdWlsZGVyOjpET006OkFjY2Vz
c2liaWxpdHlQcm9wZXJ0aWVzOjpJbnZhbGlkOjpGYWxzZTsKKyAgICBUeXBlQnVpbGRlcjo6RE9N
OjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6SW52YWxpZCBpbnZhbGlkID0gVHlwZUJ1aWxkZXI6
OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6OkludmFsaWQ6OkZhbHNlOwogICAgIGJvb2wg
aGlkZGVuID0gZmFsc2U7CiAgICAgU3RyaW5nIGxhYmVsOyAvLyBGSVhNRTogV2FpdGluZyBvbiBo
dHRwOi8vd2Via2l0Lm9yZy9iLzEyMTEzNAogICAgIGJvb2wgbGl2ZVJlZ2lvbkF0b21pYyA9IGZh
bHNlOwotICAgIFR5cGVCdWlsZGVyOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpMaXZl
UmVnaW9uU3RhdHVzOjpFbnVtIGxpdmVSZWdpb25TdGF0dXMgPSBUeXBlQnVpbGRlcjo6RE9NOjpB
Y2Nlc3NpYmlsaXR5UHJvcGVydGllczo6TGl2ZVJlZ2lvblN0YXR1czo6T2ZmOworICAgIFR5cGVC
dWlsZGVyOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpMaXZlUmVnaW9uU3RhdHVzIGxp
dmVSZWdpb25TdGF0dXMgPSBUeXBlQnVpbGRlcjo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGll
czo6TGl2ZVJlZ2lvblN0YXR1czo6T2ZmOwogICAgIE5vZGUqIG1vdXNlRXZlbnROb2RlID0gbnVs
bHB0cjsKICAgICBSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk8aW50Pj4gb3du
ZWROb2RlSWRzOwogICAgIE5vZGUqIHBhcmVudE5vZGUgPSBudWxscHRyOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcAppbmRleCA0NWJmMGVlZTg0
NmY3NzA5ZWQ0MmUyNzRmZDExN2Y5NjQ4MjQxOGRlLi4yOGJiOTE5N2Y3YzBmMDExYzA4YzllMTRm
OWZjYTA2ODYyYTg0YjE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yUGFnZUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yUGFnZUFnZW50LmNwcApAQCAtMjg3LDcgKzI4Nyw3IEBAIENhY2hlZFJlc291cmNlKiBJbnNw
ZWN0b3JQYWdlQWdlbnQ6OmNhY2hlZFJlc291cmNlKEZyYW1lKiBmcmFtZSwgY29uc3QgVVJMJiB1
cmwpCiAgICAgcmV0dXJuIGNhY2hlZFJlc291cmNlOwogfQogCi1JbnNwZWN0b3I6OlR5cGVCdWls
ZGVyOjpQYWdlOjpSZXNvdXJjZVR5cGU6OkVudW0gSW5zcGVjdG9yUGFnZUFnZW50OjpyZXNvdXJj
ZVR5cGVKc29uKEluc3BlY3RvclBhZ2VBZ2VudDo6UmVzb3VyY2VUeXBlIHJlc291cmNlVHlwZSkK
K0luc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlBhZ2U6OlJlc291cmNlVHlwZSBJbnNwZWN0b3JQYWdl
QWdlbnQ6OnJlc291cmNlVHlwZUpzb24oSW5zcGVjdG9yUGFnZUFnZW50OjpSZXNvdXJjZVR5cGUg
cmVzb3VyY2VUeXBlKQogewogICAgIHN3aXRjaCAocmVzb3VyY2VUeXBlKSB7CiAgICAgY2FzZSBE
b2N1bWVudFJlc291cmNlOgpAQCAtMzM1LDcgKzMzNSw3IEBAIEluc3BlY3RvclBhZ2VBZ2VudDo6
UmVzb3VyY2VUeXBlIEluc3BlY3RvclBhZ2VBZ2VudDo6Y2FjaGVkUmVzb3VyY2VUeXBlKGNvbnN0
IENhCiAgICAgcmV0dXJuIEluc3BlY3RvclBhZ2VBZ2VudDo6T3RoZXJSZXNvdXJjZTsKIH0KIAot
SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UGFnZTo6UmVzb3VyY2VUeXBlOjpFbnVtIEluc3BlY3Rv
clBhZ2VBZ2VudDo6Y2FjaGVkUmVzb3VyY2VUeXBlSnNvbihjb25zdCBDYWNoZWRSZXNvdXJjZSYg
Y2FjaGVkUmVzb3VyY2UpCitJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpQYWdlOjpSZXNvdXJjZVR5
cGUgSW5zcGVjdG9yUGFnZUFnZW50OjpjYWNoZWRSZXNvdXJjZVR5cGVKc29uKGNvbnN0IENhY2hl
ZFJlc291cmNlJiBjYWNoZWRSZXNvdXJjZSkKIHsKICAgICByZXR1cm4gcmVzb3VyY2VUeXBlSnNv
bihjYWNoZWRSZXNvdXJjZVR5cGUoY2FjaGVkUmVzb3VyY2UpKTsKIH0KQEAgLTcwNiw3ICs3MDYs
NyBAQCB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6c2V0Q29udGludW91c1BhaW50aW5nRW5hYmxl
ZChFcnJvclN0cmluZyosIGJvb2wgZW5hYmxlZAogICAgICAgICBtYWluRnJhbWUoKS0+dmlldygp
LT5pbnZhbGlkYXRlKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpnZXRTY3JpcHRF
eGVjdXRpb25TdGF0dXMoRXJyb3JTdHJpbmcqLCBJbnNwZWN0b3JQYWdlQmFja2VuZERpc3BhdGNo
ZXJIYW5kbGVyOjpSZXN1bHQ6OkVudW0qIHN0YXR1cykKK3ZvaWQgSW5zcGVjdG9yUGFnZUFnZW50
OjpnZXRTY3JpcHRFeGVjdXRpb25TdGF0dXMoRXJyb3JTdHJpbmcqLCBJbnNwZWN0b3JQYWdlQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyOjpSZXN1bHQqIHN0YXR1cykKIHsKICAgICBib29sIGRpc2Fi
bGVkQnlTY3JpcHRDb250cm9sbGVyID0gZmFsc2U7CiAgICAgYm9vbCBkaXNhYmxlZEluU2V0dGlu
Z3MgPSBmYWxzZTsKQEAgLTk2MywxMyArOTYzLDEzIEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpU
eXBlQnVpbGRlcjo6UGFnZTo6RnJhbWU+IEluc3BlY3RvclBhZ2VBZ2VudDo6YnVpbGRPYmplY3RG
CiBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlBhZ2U6OkZyYW1lUmVzb3VyY2VU
cmVlPiBJbnNwZWN0b3JQYWdlQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yRnJhbWVUcmVlKEZyYW1lKiBm
cmFtZSkKIHsKICAgICBSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UGFnZTo6RnJhbWU+
IGZyYW1lT2JqZWN0ID0gYnVpbGRPYmplY3RGb3JGcmFtZShmcmFtZSk7Ci0gICAgUmVmUHRyPElu
c3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5PEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlBhZ2U6
OkZyYW1lUmVzb3VyY2VUcmVlOjpSZXNvdXJjZXM+PiBzdWJyZXNvdXJjZXMgPSBJbnNwZWN0b3I6
OlR5cGVCdWlsZGVyOjpBcnJheTxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpQYWdlOjpGcmFtZVJl
c291cmNlVHJlZTo6UmVzb3VyY2VzPjo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6
VHlwZUJ1aWxkZXI6OkFycmF5PEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlBhZ2U6OkZyYW1lUmVz
b3VyY2U+PiBzdWJyZXNvdXJjZXMgPSBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheTxJbnNw
ZWN0b3I6OlR5cGVCdWlsZGVyOjpQYWdlOjpGcmFtZVJlc291cmNlPjo6Y3JlYXRlKCk7CiAgICAg
UmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlBhZ2U6OkZyYW1lUmVzb3VyY2VUcmVlPiBy
ZXN1bHQgPSBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpQYWdlOjpGcmFtZVJlc291cmNlVHJlZTo6
Y3JlYXRlKCkKICAgICAgICAgIC5zZXRGcmFtZShmcmFtZU9iamVjdCkKICAgICAgICAgIC5zZXRS
ZXNvdXJjZXMoc3VicmVzb3VyY2VzKTsKIAogICAgIGZvciAoYXV0byogY2FjaGVkUmVzb3VyY2Ug
OiBjYWNoZWRSZXNvdXJjZXNGb3JGcmFtZShmcmFtZSkpIHsKLSAgICAgICAgUmVmUHRyPEluc3Bl
Y3Rvcjo6VHlwZUJ1aWxkZXI6OlBhZ2U6OkZyYW1lUmVzb3VyY2VUcmVlOjpSZXNvdXJjZXM+IHJl
c291cmNlT2JqZWN0ID0gSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UGFnZTo6RnJhbWVSZXNvdXJj
ZVRyZWU6OlJlc291cmNlczo6Y3JlYXRlKCkKKyAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6VHlw
ZUJ1aWxkZXI6OlBhZ2U6OkZyYW1lUmVzb3VyY2U+IHJlc291cmNlT2JqZWN0ID0gSW5zcGVjdG9y
OjpUeXBlQnVpbGRlcjo6UGFnZTo6RnJhbWVSZXNvdXJjZTo6Y3JlYXRlKCkKICAgICAgICAgICAg
IC5zZXRVcmwoY2FjaGVkUmVzb3VyY2UtPnVybCgpKQogICAgICAgICAgICAgLnNldFR5cGUoY2Fj
aGVkUmVzb3VyY2VUeXBlSnNvbigqY2FjaGVkUmVzb3VyY2UpKQogICAgICAgICAgICAgLnNldE1p
bWVUeXBlKGNhY2hlZFJlc291cmNlLT5yZXNwb25zZSgpLm1pbWVUeXBlKCkpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5oIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5oCmluZGV4IGNhNGZmMmYwMDNj
ZWJhOTgxNjhkMDc3OTkzMzRjNWZiZDVjOWEzMTEuLjlmODdkMjI5ZDQzNjcwOTZmMjg2MDM4MWVm
MjNkM2IyMjUzMTk0YjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JQYWdlQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
UGFnZUFnZW50LmgKQEAgLTkwLDkgKzkwLDkgQEAgcHVibGljOgogCiAgICAgc3RhdGljIFBhc3NS
ZWZQdHI8U2hhcmVkQnVmZmVyPiByZXNvdXJjZURhdGEoRnJhbWUqLCBjb25zdCBVUkwmLCBTdHJp
bmcqIHRleHRFbmNvZGluZ05hbWUpOwogICAgIHN0YXRpYyBDYWNoZWRSZXNvdXJjZSogY2FjaGVk
UmVzb3VyY2UoRnJhbWUqLCBjb25zdCBVUkwmKTsKLSAgICBzdGF0aWMgSW5zcGVjdG9yOjpUeXBl
QnVpbGRlcjo6UGFnZTo6UmVzb3VyY2VUeXBlOjpFbnVtIHJlc291cmNlVHlwZUpzb24oUmVzb3Vy
Y2VUeXBlKTsKKyAgICBzdGF0aWMgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UGFnZTo6UmVzb3Vy
Y2VUeXBlIHJlc291cmNlVHlwZUpzb24oUmVzb3VyY2VUeXBlKTsKICAgICBzdGF0aWMgUmVzb3Vy
Y2VUeXBlIGNhY2hlZFJlc291cmNlVHlwZShjb25zdCBDYWNoZWRSZXNvdXJjZSYpOwotICAgIHN0
YXRpYyBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpQYWdlOjpSZXNvdXJjZVR5cGU6OkVudW0gY2Fj
aGVkUmVzb3VyY2VUeXBlSnNvbihjb25zdCBDYWNoZWRSZXNvdXJjZSYpOworICAgIHN0YXRpYyBJ
bnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpQYWdlOjpSZXNvdXJjZVR5cGUgY2FjaGVkUmVzb3VyY2VU
eXBlSnNvbihjb25zdCBDYWNoZWRSZXNvdXJjZSYpOwogCiAgICAgLy8gUGFnZSBBUEkgZm9yIElu
c3BlY3RvckZyb250ZW5kCiAgICAgdmlydHVhbCB2b2lkIGVuYWJsZShFcnJvclN0cmluZyopIG92
ZXJyaWRlOwpAQCAtMTE1LDcgKzExNSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0
U2hvd0ZQU0NvdW50ZXIoRXJyb3JTdHJpbmcqLCBib29sIHNob3cpIG92ZXJyaWRlOwogICAgIHZp
cnR1YWwgdm9pZCBjYW5Db250aW51b3VzbHlQYWludChFcnJvclN0cmluZyosIGJvb2wqKSBvdmVy
cmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGludW91c1BhaW50aW5nRW5hYmxlZChFcnJv
clN0cmluZyosIGJvb2wgZW5hYmxlZCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGdldFNj
cmlwdEV4ZWN1dGlvblN0YXR1cyhFcnJvclN0cmluZyosIEluc3BlY3Rvcjo6SW5zcGVjdG9yUGFn
ZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UmVzdWx0OjpFbnVtKikgb3ZlcnJpZGU7CisgICAg
dmlydHVhbCB2b2lkIGdldFNjcmlwdEV4ZWN1dGlvblN0YXR1cyhFcnJvclN0cmluZyosIEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yUGFnZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UmVzdWx0Kikgb3Zl
cnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHNldFNjcmlwdEV4ZWN1dGlvbkRpc2FibGVkKEVycm9y
U3RyaW5nKiwgYm9vbCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHNldFRvdWNoRW11bGF0
aW9uRW5hYmxlZChFcnJvclN0cmluZyosIGJvb2wpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9p
ZCBzZXRFbXVsYXRlZE1lZGlhKEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJikgb3ZlcnJpZGU7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2VB
Z2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2VBZ2Vu
dC5jcHAKaW5kZXggMDQ2ZmYwNTFjZDgwMTZhZjIzYTZjZWEyNWUzNGVkYzVlMTJjZDZiNy4uMTI0
MDBhY2FiMzc2NWQ4OTFlZTY2MTA1ZTdkMmQ3YTMzYzBlNTljMiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlQWdlbnQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZUFnZW50LmNwcApAQCAtMzE2LDcg
KzMxNiw3IEBAIHZvaWQgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6d2lsbFNlbmRSZXF1ZXN0KHVu
c2lnbmVkIGxvbmcgaWRlbnRpZmllciwgRG9jdW1lbnRMCiAgICAgICAgIHJlcXVlc3Quc2V0SFRU
UEhlYWRlckZpZWxkKCJDYWNoZS1Db250cm9sIiwgIm5vLWNhY2hlIik7CiAgICAgfQogCi0gICAg
SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UGFnZTo6UmVzb3VyY2VUeXBlOjpFbnVtIHJlc291cmNl
VHlwZSA9IEluc3BlY3RvclBhZ2VBZ2VudDo6cmVzb3VyY2VUeXBlSnNvbih0eXBlKTsKKyAgICBJ
bnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpQYWdlOjpSZXNvdXJjZVR5cGUgcmVzb3VyY2VUeXBlID0g
SW5zcGVjdG9yUGFnZUFnZW50OjpyZXNvdXJjZVR5cGVKc29uKHR5cGUpOwogCiAgICAgUmVmUHRy
PEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6Ok5ldHdvcms6OkluaXRpYXRvcj4gaW5pdGlhdG9yT2Jq
ZWN0ID0gYnVpbGRJbml0aWF0b3JPYmplY3QobG9hZGVyLT5mcmFtZSgpID8gbG9hZGVyLT5mcmFt
ZSgpLT5kb2N1bWVudCgpIDogbnVsbHB0cik7CiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnJl
cXVlc3RXaWxsQmVTZW50KHJlcXVlc3RJZCwgbV9wYWdlQWdlbnQtPmZyYW1lSWQobG9hZGVyLT5m
cmFtZSgpKSwgbV9wYWdlQWdlbnQtPmxvYWRlcklkKGxvYWRlciksIGxvYWRlci0+dXJsKCkuc3Ry
aW5nKCksIGJ1aWxkT2JqZWN0Rm9yUmVzb3VyY2VSZXF1ZXN0KHJlcXVlc3QpLCBjdXJyZW50VGlt
ZSgpLCBpbml0aWF0b3JPYmplY3QsIGJ1aWxkT2JqZWN0Rm9yUmVzb3VyY2VSZXNwb25zZShyZWRp
cmVjdFJlc3BvbnNlLCBsb2FkZXIpLCB0eXBlICE9IEluc3BlY3RvclBhZ2VBZ2VudDo6T3RoZXJS
ZXNvdXJjZSA/ICZyZXNvdXJjZVR5cGUgOiBudWxscHRyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcAppbmRleCA4OTYxOWI0YjQxYTllYWIx
ZWIxMTI3Mjg0YmUxNzk2MTllZmM1NjE4Li42OGQ0MWNhYjMzMjNiYjllZjhhZjU4NDFmNGMwOThk
N2M5OWEwMjdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
U3R5bGVTaGVldC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0
eWxlU2hlZXQuY3BwCkBAIC0xNjYsNyArMTY2LDcgQEAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVj
dG9yOjpUeXBlQnVpbGRlcjo6Q1NTOjpTb3VyY2VSYW5nZT4gYnVpbGRTb3VyY2VSYW5nZU9iamUK
IHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTTWVkaWE+
IGJ1aWxkTWVkaWFPYmplY3QoY29uc3QgTWVkaWFMaXN0KiBtZWRpYSwgTWVkaWFMaXN0U291cmNl
IG1lZGlhTGlzdFNvdXJjZSwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwpCiB7CiAgICAgLy8gTWFr
ZSBjZXJ0YWluIGNvbXBpbGVycyBoYXBweSBieSBpbml0aWFsaXppbmcgfHNvdXJjZXwgdXAtZnJv
bnQuCi0gICAgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q1NTOjpDU1NNZWRpYTo6U291cmNlOjpF
bnVtIHNvdXJjZSA9IEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTTWVkaWE6OlNvdXJj
ZTo6SW5saW5lU2hlZXQ7CisgICAgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q1NTOjpDU1NNZWRp
YTo6U291cmNlIHNvdXJjZSA9IEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTTWVkaWE6
OlNvdXJjZTo6SW5saW5lU2hlZXQ7CiAgICAgc3dpdGNoIChtZWRpYUxpc3RTb3VyY2UpIHsKICAg
ICBjYXNlIE1lZGlhTGlzdFNvdXJjZU1lZGlhUnVsZToKICAgICAgICAgc291cmNlID0gSW5zcGVj
dG9yOjpUeXBlQnVpbGRlcjo6Q1NTOjpDU1NNZWRpYTo6U291cmNlOjpNZWRpYVJ1bGU7CkBAIC01
MjgsNyArNTI4LDcgQEAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDU1M6OkNT
U1N0eWxlPiBJbnNwZWN0b3JTdHlsZTo6c3R5bGVXaXRoUHJvcGUKICAgICAgICAgY29uc3QgQ1NT
UHJvcGVydHlTb3VyY2VEYXRhJiBwcm9wZXJ0eUVudHJ5ID0gaXQtPnNvdXJjZURhdGE7CiAgICAg
ICAgIGNvbnN0IFN0cmluZyYgbmFtZSA9IHByb3BlcnR5RW50cnkubmFtZTsKIAotICAgICAgICBJ
bnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDU1M6OkNTU1Byb3BlcnR5OjpTdGF0dXM6OkVudW0gc3Rh
dHVzID0gaXQtPmRpc2FibGVkID8gSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q1NTOjpDU1NQcm9w
ZXJ0eTo6U3RhdHVzOjpEaXNhYmxlZCA6IEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNTUzo6Q1NT
UHJvcGVydHk6OlN0YXR1czo6QWN0aXZlOworICAgICAgICBlbnVtIGNsYXNzIEluc3BlY3Rvcjo6
VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTUHJvcGVydHk6OlN0YXR1cyBzdGF0dXMgPSBpdC0+ZGlzYWJs
ZWQgPyBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDU1M6OkNTU1Byb3BlcnR5OjpTdGF0dXM6OkRp
c2FibGVkIDogSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q1NTOjpDU1NQcm9wZXJ0eTo6U3RhdHVz
OjpBY3RpdmU7CiAKICAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNTUzo6
Q1NTUHJvcGVydHk+IHByb3BlcnR5ID0gSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q1NTOjpDU1NQ
cm9wZXJ0eTo6Y3JlYXRlKCkKICAgICAgICAgICAgIC5zZXROYW1lKG5hbWUpCkBAIC03NDksNyAr
NzQ5LDcgQEAgTmV3TGluZUFuZFdoaXRlc3BhY2UmIEluc3BlY3RvclN0eWxlOjpuZXdMaW5lQW5k
V2hpdGVzcGFjZURlbGltaXRlcnMoKSBjb25zdAogICAgIHJldHVybiBtX2Zvcm1hdDsKIH0KIAot
UGFzc1JlZlB0cjxJbnNwZWN0b3JTdHlsZVNoZWV0PiBJbnNwZWN0b3JTdHlsZVNoZWV0OjpjcmVh
dGUoSW5zcGVjdG9yUGFnZUFnZW50KiBwYWdlQWdlbnQsIGNvbnN0IFN0cmluZyYgaWQsIFBhc3NS
ZWZQdHI8Q1NTU3R5bGVTaGVldD4gcGFnZVN0eWxlU2hlZXQsIEluc3BlY3Rvcjo6VHlwZUJ1aWxk
ZXI6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6RW51bSBvcmlnaW4sIGNvbnN0IFN0cmluZyYgZG9j
dW1lbnRVUkwsIExpc3RlbmVyKiBsaXN0ZW5lcikKK1Bhc3NSZWZQdHI8SW5zcGVjdG9yU3R5bGVT
aGVldD4gSW5zcGVjdG9yU3R5bGVTaGVldDo6Y3JlYXRlKEluc3BlY3RvclBhZ2VBZ2VudCogcGFn
ZUFnZW50LCBjb25zdCBTdHJpbmcmIGlkLCBQYXNzUmVmUHRyPENTU1N0eWxlU2hlZXQ+IHBhZ2VT
dHlsZVNoZWV0LCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW4g
b3JpZ2luLCBjb25zdCBTdHJpbmcmIGRvY3VtZW50VVJMLCBMaXN0ZW5lciogbGlzdGVuZXIpCiB7
CiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnNwZWN0b3JTdHlsZVNoZWV0KHBhZ2VBZ2VudCwg
aWQsIHBhZ2VTdHlsZVNoZWV0LCBvcmlnaW4sIGRvY3VtZW50VVJMLCBsaXN0ZW5lcikpOwogfQpA
QCAtNzYyLDcgKzc2Miw3IEBAIFN0cmluZyBJbnNwZWN0b3JTdHlsZVNoZWV0OjpzdHlsZVNoZWV0
VVJMKENTU1N0eWxlU2hlZXQqIHBhZ2VTdHlsZVNoZWV0KQogICAgIHJldHVybiBlbXB0eVN0cmlu
ZygpOwogfQogCi1JbnNwZWN0b3JTdHlsZVNoZWV0OjpJbnNwZWN0b3JTdHlsZVNoZWV0KEluc3Bl
Y3RvclBhZ2VBZ2VudCogcGFnZUFnZW50LCBjb25zdCBTdHJpbmcmIGlkLCBQYXNzUmVmUHRyPENT
U1N0eWxlU2hlZXQ+IHBhZ2VTdHlsZVNoZWV0LCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDU1M6
OlN0eWxlU2hlZXRPcmlnaW46OkVudW0gb3JpZ2luLCBjb25zdCBTdHJpbmcmIGRvY3VtZW50VVJM
LCBMaXN0ZW5lciogbGlzdGVuZXIpCitJbnNwZWN0b3JTdHlsZVNoZWV0OjpJbnNwZWN0b3JTdHls
ZVNoZWV0KEluc3BlY3RvclBhZ2VBZ2VudCogcGFnZUFnZW50LCBjb25zdCBTdHJpbmcmIGlkLCBQ
YXNzUmVmUHRyPENTU1N0eWxlU2hlZXQ+IHBhZ2VTdHlsZVNoZWV0LCBJbnNwZWN0b3I6OlR5cGVC
dWlsZGVyOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW4gb3JpZ2luLCBjb25zdCBTdHJpbmcmIGRvY3Vt
ZW50VVJMLCBMaXN0ZW5lciogbGlzdGVuZXIpCiAgICAgOiBtX3BhZ2VBZ2VudChwYWdlQWdlbnQp
CiAgICAgLCBtX2lkKGlkKQogICAgICwgbV9wYWdlU3R5bGVTaGVldChwYWdlU3R5bGVTaGVldCkK
QEAgLTE0MjYsMTIgKzE0MjYsMTIgQEAgdm9pZCBJbnNwZWN0b3JTdHlsZVNoZWV0Ojpjb2xsZWN0
RmxhdFJ1bGVzKFBhc3NSZWZQdHI8Q1NTUnVsZUxpc3Q+IHJ1bGVMaXN0LCBDU1MKICAgICB9CiB9
CiAKLVBhc3NSZWZQdHI8SW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlPiBJbnNwZWN0
b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU6OmNyZWF0ZShJbnNwZWN0b3JQYWdlQWdlbnQqIHBh
Z2VBZ2VudCwgY29uc3QgU3RyaW5nJiBpZCwgUGFzc1JlZlB0cjxFbGVtZW50PiBlbGVtZW50LCBJ
bnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW46OkVudW0gb3JpZ2lu
LCBMaXN0ZW5lciogbGlzdGVuZXIpCitQYXNzUmVmUHRyPEluc3BlY3RvclN0eWxlU2hlZXRGb3JJ
bmxpbmVTdHlsZT4gSW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlOjpjcmVhdGUoSW5z
cGVjdG9yUGFnZUFnZW50KiBwYWdlQWdlbnQsIGNvbnN0IFN0cmluZyYgaWQsIFBhc3NSZWZQdHI8
RWxlbWVudD4gZWxlbWVudCwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q1NTOjpTdHlsZVNoZWV0
T3JpZ2luIG9yaWdpbiwgTGlzdGVuZXIqIGxpc3RlbmVyKQogewogICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgSW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlKHBhZ2VBZ2VudCwgaWQsIGVs
ZW1lbnQsIG9yaWdpbiwgbGlzdGVuZXIpKTsKIH0KIAotSW5zcGVjdG9yU3R5bGVTaGVldEZvcklu
bGluZVN0eWxlOjpJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGUoSW5zcGVjdG9yUGFn
ZUFnZW50KiBwYWdlQWdlbnQsIGNvbnN0IFN0cmluZyYgaWQsIFBhc3NSZWZQdHI8RWxlbWVudD4g
ZWxlbWVudCwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luOjpF
bnVtIG9yaWdpbiwgTGlzdGVuZXIqIGxpc3RlbmVyKQorSW5zcGVjdG9yU3R5bGVTaGVldEZvcklu
bGluZVN0eWxlOjpJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGUoSW5zcGVjdG9yUGFn
ZUFnZW50KiBwYWdlQWdlbnQsIGNvbnN0IFN0cmluZyYgaWQsIFBhc3NSZWZQdHI8RWxlbWVudD4g
ZWxlbWVudCwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luIG9y
aWdpbiwgTGlzdGVuZXIqIGxpc3RlbmVyKQogICAgIDogSW5zcGVjdG9yU3R5bGVTaGVldChwYWdl
QWdlbnQsIGlkLCBudWxscHRyLCBvcmlnaW4sICIiLCBsaXN0ZW5lcikKICAgICAsIG1fZWxlbWVu
dChlbGVtZW50KQogICAgICwgbV9ydWxlU291cmNlRGF0YShudWxscHRyKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuaCBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmgKaW5kZXggOGIxOTFmZTA4NDM5
YjVmOGU3N2EyNzU5NTk3ZTYzM2RhOTllMGY0Zi4uMGNhNWE1M2FlZTVjMzgzM2ZmOTg1YjliMTM1
Nzk0MzA5ODcyMDU2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvclN0eWxlU2hlZXQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
U3R5bGVTaGVldC5oCkBAIC0xODEsNyArMTgxLDcgQEAgcHVibGljOgogICAgIH07CiAKICAgICB0
eXBlZGVmIEhhc2hNYXA8Q1NTU3R5bGVEZWNsYXJhdGlvbiosIFJlZlB0cjxJbnNwZWN0b3JTdHls
ZT4+IEluc3BlY3RvclN0eWxlTWFwOwotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3RvclN0
eWxlU2hlZXQ+IGNyZWF0ZShJbnNwZWN0b3JQYWdlQWdlbnQqLCBjb25zdCBTdHJpbmcmIGlkLCBQ
YXNzUmVmUHRyPENTU1N0eWxlU2hlZXQ+IHBhZ2VTdHlsZVNoZWV0LCBJbnNwZWN0b3I6OlR5cGVC
dWlsZGVyOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW46OkVudW0sIGNvbnN0IFN0cmluZyYgZG9jdW1l
bnRVUkwsIExpc3RlbmVyKik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yU3R5bGVT
aGVldD4gY3JlYXRlKEluc3BlY3RvclBhZ2VBZ2VudCosIGNvbnN0IFN0cmluZyYgaWQsIFBhc3NS
ZWZQdHI8Q1NTU3R5bGVTaGVldD4gcGFnZVN0eWxlU2hlZXQsIEluc3BlY3Rvcjo6VHlwZUJ1aWxk
ZXI6OkNTUzo6U3R5bGVTaGVldE9yaWdpbiwgY29uc3QgU3RyaW5nJiBkb2N1bWVudFVSTCwgTGlz
dGVuZXIqKTsKICAgICBzdGF0aWMgU3RyaW5nIHN0eWxlU2hlZXRVUkwoQ1NTU3R5bGVTaGVldCog
cGFnZVN0eWxlU2hlZXQpOwogCiAgICAgdmlydHVhbCB+SW5zcGVjdG9yU3R5bGVTaGVldCgpOwpA
QCAtMjEyLDcgKzIxMiw3IEBAIHB1YmxpYzoKICAgICBJbnNwZWN0b3JDU1NJZCBzdHlsZUlkKENT
U1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKSBjb25zdCB7IHJldHVybiBydWxlT3JTdHlsZUlkKHN0
eWxlKTsgfQogCiBwcm90ZWN0ZWQ6Ci0gICAgSW5zcGVjdG9yU3R5bGVTaGVldChJbnNwZWN0b3JQ
YWdlQWdlbnQqLCBjb25zdCBTdHJpbmcmIGlkLCBQYXNzUmVmUHRyPENTU1N0eWxlU2hlZXQ+IHBh
Z2VTdHlsZVNoZWV0LCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDU1M6OlN0eWxlU2hlZXRPcmln
aW46OkVudW0sIGNvbnN0IFN0cmluZyYgZG9jdW1lbnRVUkwsIExpc3RlbmVyKik7CisgICAgSW5z
cGVjdG9yU3R5bGVTaGVldChJbnNwZWN0b3JQYWdlQWdlbnQqLCBjb25zdCBTdHJpbmcmIGlkLCBQ
YXNzUmVmUHRyPENTU1N0eWxlU2hlZXQ+IHBhZ2VTdHlsZVNoZWV0LCBJbnNwZWN0b3I6OlR5cGVC
dWlsZGVyOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW4sIGNvbnN0IFN0cmluZyYgZG9jdW1lbnRVUkws
IExpc3RlbmVyKik7CiAKICAgICBib29sIGNhbkJpbmQoKSBjb25zdCB7IHJldHVybiBtX29yaWdp
biAhPSBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW46OlVzZXJB
Z2VudCAmJiBtX29yaWdpbiAhPSBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDU1M6OlN0eWxlU2hl
ZXRPcmlnaW46OlVzZXI7IH0KICAgICBJbnNwZWN0b3JDU1NJZCBydWxlT3JTdHlsZUlkKENTU1N0
eWxlRGVjbGFyYXRpb24qIHN0eWxlKSBjb25zdDsKQEAgLTI0OCw3ICsyNDgsNyBAQCBwcml2YXRl
OgogICAgIEluc3BlY3RvclBhZ2VBZ2VudCogbV9wYWdlQWdlbnQ7CiAgICAgU3RyaW5nIG1faWQ7
CiAgICAgUmVmUHRyPENTU1N0eWxlU2hlZXQ+IG1fcGFnZVN0eWxlU2hlZXQ7Ci0gICAgSW5zcGVj
dG9yOjpUeXBlQnVpbGRlcjo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luOjpFbnVtIG1fb3JpZ2luOwor
ICAgIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNTUzo6U3R5bGVTaGVldE9yaWdpbiBtX29yaWdp
bjsKICAgICBTdHJpbmcgbV9kb2N1bWVudFVSTDsKICAgICBib29sIG1faXNSZXZhbGlkYXRpbmc7
CiAgICAgUGFyc2VkU3R5bGVTaGVldCogbV9wYXJzZWRTdHlsZVNoZWV0OwpAQCAtMjU5LDE0ICsy
NTksMTQgQEAgcHJpdmF0ZToKIAogY2xhc3MgSW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0
eWxlIDogcHVibGljIEluc3BlY3RvclN0eWxlU2hlZXQgewogcHVibGljOgotICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZT4gY3JlYXRlKEluc3Bl
Y3RvclBhZ2VBZ2VudCosIGNvbnN0IFN0cmluZyYgaWQsIFBhc3NSZWZQdHI8RWxlbWVudD4sIElu
c3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6RW51bSwgTGlzdGVu
ZXIqKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5l
U3R5bGU+IGNyZWF0ZShJbnNwZWN0b3JQYWdlQWdlbnQqLCBjb25zdCBTdHJpbmcmIGlkLCBQYXNz
UmVmUHRyPEVsZW1lbnQ+LCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDU1M6OlN0eWxlU2hlZXRP
cmlnaW4sIExpc3RlbmVyKik7CiAKICAgICB2b2lkIGRpZE1vZGlmeUVsZW1lbnRBdHRyaWJ1dGUo
KTsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0VGV4dChTdHJpbmcqIHJlc3VsdCkgY29uc3Qgb3ZlcnJp
ZGU7CiAgICAgdmlydHVhbCBDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZUZvcklkKGNvbnN0IElu
c3BlY3RvckNTU0lkJiBpZCkgY29uc3Qgb3ZlcnJpZGUgeyBBU1NFUlRfVU5VU0VEKGlkLCAhaWQu
b3JkaW5hbCgpKTsgcmV0dXJuIGlubGluZVN0eWxlKCk7IH0KIAogcHJvdGVjdGVkOgotICAgIElu
c3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZShJbnNwZWN0b3JQYWdlQWdlbnQqLCBjb25z
dCBTdHJpbmcmIGlkLCBQYXNzUmVmUHRyPEVsZW1lbnQ+LCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVy
OjpDU1M6OlN0eWxlU2hlZXRPcmlnaW46OkVudW0sIExpc3RlbmVyKik7CisgICAgSW5zcGVjdG9y
U3R5bGVTaGVldEZvcklubGluZVN0eWxlKEluc3BlY3RvclBhZ2VBZ2VudCosIGNvbnN0IFN0cmlu
ZyYgaWQsIFBhc3NSZWZQdHI8RWxlbWVudD4sIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNTUzo6
U3R5bGVTaGVldE9yaWdpbiwgTGlzdGVuZXIqKTsKIAogICAgIHZpcnR1YWwgRG9jdW1lbnQqIG93
bmVyRG9jdW1lbnQoKSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIFJlZlB0cjxDU1NSdWxl
U291cmNlRGF0YT4gcnVsZVNvdXJjZURhdGFGb3IoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUp
IGNvbnN0IG92ZXJyaWRlIHsgQVNTRVJUX1VOVVNFRChzdHlsZSwgc3R5bGUgPT0gaW5saW5lU3R5
bGUoKSk7IHJldHVybiBtX3J1bGVTb3VyY2VEYXRhOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5jcHAKaW5kZXggZGRkYzFjNjEzZDUw
YTNhNTcwMDYzYmQzZDM0OTA2MWYyZmM3MTUwNC4uZDM2YzNmY2UwNGQ1NTA4NzZjMTZmZjNkNzc0
NzVlNTYwZTAwYTYxMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvclRpbWVsaW5lQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JUaW1lbGluZUFnZW50LmNwcApAQCAtNDYzLDcgKzQ2Myw3IEBAIHZvaWQgSW5zcGVjdG9y
VGltZWxpbmVBZ2VudDo6YnJlYWtwb2ludEFjdGlvblByb2JlKEpTQzo6RXhlY1N0YXRlKiBleGVj
LCBjb25zdCBJCiAgICAgYXBwZW5kUmVjb3JkKFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRl
UHJvYmVTYW1wbGVEYXRhKGFjdGlvbiwgaGl0Q291bnQpLCBUaW1lbGluZVJlY29yZFR5cGU6OlBy
b2JlU2FtcGxlLCBmYWxzZSwgZnJhbWUpOwogfQogCi1zdGF0aWMgSW5zcGVjdG9yOjpUeXBlQnVp
bGRlcjo6VGltZWxpbmU6OkV2ZW50VHlwZTo6RW51bSB0b1Byb3RvY29sKFRpbWVsaW5lUmVjb3Jk
VHlwZSB0eXBlKQorc3RhdGljIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlRpbWVsaW5lOjpFdmVu
dFR5cGUgdG9Qcm90b2NvbChUaW1lbGluZVJlY29yZFR5cGUgdHlwZSkKIHsKICAgICBzd2l0Y2gg
KHR5cGUpIHsKICAgICBjYXNlIFRpbWVsaW5lUmVjb3JkVHlwZTo6RXZlbnREaXNwYXRjaDoKQEAg
LTU1Myw3ICs1NTMsNyBAQCB2b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OmFkZFJlY29yZFRv
VGltZWxpbmUoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBycAogewogICAgIHBycFJlY29y
ZC0+c2V0U3RyaW5nKCJ0eXBlIiwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Z2V0V2ViRW51bUNv
bnN0YW50VmFsdWUodG9Qcm90b2NvbCh0eXBlKSkpOwogCi0gICAgUmVmUHRyPEluc3BlY3Rvcjo6
VHlwZUJ1aWxkZXI6OlRpbWVsaW5lOjpUaW1lbGluZUV2ZW50PiByZWNvcmQgPSBJbnNwZWN0b3I6
OlR5cGVCdWlsZGVyOjpUaW1lbGluZTo6VGltZWxpbmVFdmVudDo6cnVudGltZUNhc3QocHJwUmVj
b3JkKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6VGltZWxpbmU6OlRpbWVs
aW5lRXZlbnQ+IHJlY29yZCA9IEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6
VGltZWxpbmU6OlRpbWVsaW5lRXZlbnQ+OjpydW50aW1lQ2FzdChwcnBSZWNvcmQpOwogCiAgICAg
aWYgKG1fcmVjb3JkU3RhY2suaXNFbXB0eSgpKQogICAgICAgICBzZW5kRXZlbnQocmVjb3JkLnJl
bGVhc2UoKSk7CkBAIC02MTMsNyArNjEzLDcgQEAgdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50
OjphcHBlbmRSZWNvcmQoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGRhdGEsIFRpbWUKIHZv
aWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6c2VuZEV2ZW50KFBhc3NSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBldmVudCkKIHsKICAgICAvLyBGSVhNRTogcnVudGltZUNhc3QgaXMgYSBoYWNrLiBX
ZSBkbyBpdCBiZWNhdXNlIHdlIGNhbid0IGJ1aWxkIFRpbWVsaW5lRXZlbnQgZGlyZWN0bHkgbm93
LgotICAgIFJlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpUaW1lbGluZTo6VGltZWxpbmVF
dmVudD4gcmVjb3JkQ2hlY2tlZCA9IEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlRpbWVsaW5lOjpU
aW1lbGluZUV2ZW50OjpydW50aW1lQ2FzdChldmVudCk7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6
VHlwZUJ1aWxkZXI6OlRpbWVsaW5lOjpUaW1lbGluZUV2ZW50PiByZWNvcmRDaGVja2VkID0gQmlu
ZGluZ1RyYWl0czxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpUaW1lbGluZTo6VGltZWxpbmVFdmVu
dD46OnJ1bnRpbWVDYXN0KGV2ZW50KTsKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+ZXZlbnRS
ZWNvcmRlZChyZWNvcmRDaGVja2VkLnJlbGVhc2UoKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9QYWdlLmpzb24gYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvcHJvdG9jb2wvUGFnZS5qc29uCmluZGV4IDNhZmRiYzBjZDNkMjdkNTE2NGQyNmU4
YmQzMmM0ZDc2ZmRmZGQyNzUuLjg4YTc2YzQ2ZjJiZWZjZGE0ZGIxYTQ1MDRmNzJmMmUyMmQ2NzE1
MDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9QYWdlLmpz
b24KKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL3Byb3RvY29sL1BhZ2UuanNvbgpAQCAt
MjksMjYgKzI5LDI1IEBACiAgICAgICAgICAgICBdCiAgICAgICAgIH0sCiAgICAgICAgIHsKKyAg
ICAgICAgICAgICJpZCI6ICJGcmFtZVJlc291cmNlIiwKKyAgICAgICAgICAgICJ0eXBlIjogIm9i
amVjdCIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IFsKKyAgICAgICAgICAgICAgICB7ICJu
YW1lIjogInVybCIsICJ0eXBlIjogInN0cmluZyIsICJkZXNjcmlwdGlvbiI6ICJSZXNvdXJjZSBV
UkwuIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidHlwZSIsICIkcmVmIjogIlJlc291
cmNlVHlwZSIsICJkZXNjcmlwdGlvbiI6ICJUeXBlIG9mIHRoaXMgcmVzb3VyY2UuIiB9LAorICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAibWltZVR5cGUiLCAidHlwZSI6ICJzdHJpbmciLCAiZGVz
Y3JpcHRpb24iOiAiUmVzb3VyY2UgbWltZVR5cGUgYXMgZGV0ZXJtaW5lZCBieSB0aGUgYnJvd3Nl
ci4iIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJmYWlsZWQiLCAidHlwZSI6ICJib29s
ZWFuIiwgIm9wdGlvbmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9uIjogIlRydWUgaWYgdGhlIHJlc291
cmNlIGZhaWxlZCB0byBsb2FkLiIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNhbmNl
bGVkIiwgInR5cGUiOiAiYm9vbGVhbiIsICJvcHRpb25hbCI6IHRydWUsICJkZXNjcmlwdGlvbiI6
ICJUcnVlIGlmIHRoZSByZXNvdXJjZSB3YXMgY2FuY2VsZWQgZHVyaW5nIGxvYWRpbmcuIiB9LAor
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic291cmNlTWFwVVJMIiwgInR5cGUiOiAic3RyaW5n
IiwgIm9wdGlvbmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9uIjogIlVSTCBvZiBzb3VyY2UgbWFwIGFz
c29jaWF0ZWQgd2l0aCB0aGlzIHJlc291cmNlIChpZiBhbnkpLiIgfQorICAgICAgICAgICAgXQor
ICAgICAgICB9LAorICAgICAgICB7CiAgICAgICAgICAgICAiaWQiOiAiRnJhbWVSZXNvdXJjZVRy
ZWUiLAogICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKICAgICAgICAgICAgICJkZXNjcmlw
dGlvbiI6ICJJbmZvcm1hdGlvbiBhYm91dCB0aGUgRnJhbWUgaGllcmFyY2h5IGFsb25nIHdpdGgg
dGhlaXIgY2FjaGVkIHJlc291cmNlcy4iLAogICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCiAg
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJmcmFtZSIsICIkcmVmIjogIkZyYW1lIiwgImRlc2Ny
aXB0aW9uIjogIkZyYW1lIGluZm9ybWF0aW9uIGZvciB0aGlzIHRyZWUgaXRlbS4iIH0sCiAgICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJjaGlsZEZyYW1lcyIsICJ0eXBlIjogImFycmF5IiwgIm9w
dGlvbmFsIjogdHJ1ZSwgIml0ZW1zIjogeyAiJHJlZiI6ICJGcmFtZVJlc291cmNlVHJlZSIgfSwg
ImRlc2NyaXB0aW9uIjogIkNoaWxkIGZyYW1lcy4iIH0sCi0gICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJyZXNvdXJjZXMiLCAidHlwZSI6ICJhcnJheSIsCi0gICAgICAgICAgICAgICAgICAgICJp
dGVtcyI6IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAicHJvcGVydGllcyI6IFsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogInVybCIsICJ0eXBlIjogInN0cmluZyIsICJkZXNjcmlwdGlvbiI6
ICJSZXNvdXJjZSBVUkwuIiB9LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAidHlwZSIsICIkcmVmIjogIlJlc291cmNlVHlwZSIsICJkZXNjcmlwdGlvbiI6ICJUeXBlIG9m
IHRoaXMgcmVzb3VyY2UuIiB9LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAibWltZVR5cGUiLCAidHlwZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRpb24iOiAiUmVzb3VyY2Ug
bWltZVR5cGUgYXMgZGV0ZXJtaW5lZCBieSB0aGUgYnJvd3Nlci4iIH0sCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJmYWlsZWQiLCAidHlwZSI6ICJib29sZWFuIiwgIm9w
dGlvbmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9uIjogIlRydWUgaWYgdGhlIHJlc291cmNlIGZhaWxl
ZCB0byBsb2FkLiIgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNh
bmNlbGVkIiwgInR5cGUiOiAiYm9vbGVhbiIsICJvcHRpb25hbCI6IHRydWUsICJkZXNjcmlwdGlv
biI6ICJUcnVlIGlmIHRoZSByZXNvdXJjZSB3YXMgY2FuY2VsZWQgZHVyaW5nIGxvYWRpbmcuIiB9
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic291cmNlTWFwVVJMIiwg
InR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9uIjogIlVSTCBv
ZiBzb3VyY2UgbWFwIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHJlc291cmNlIChpZiBhbnkpLiIgfQot
ICAgICAgICAgICAgICAgICAgICAgICAgXQotICAgICAgICAgICAgICAgICAgICB9LAotICAgICAg
ICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiSW5mb3JtYXRpb24gYWJvdXQgZnJhbWUgcmVz
b3VyY2VzLiIKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJy
ZXNvdXJjZXMiLCAidHlwZSI6ICJhcnJheSIsICJpdGVtcyI6IHsgIiRyZWYiOiAiRnJhbWVSZXNv
dXJjZSIgfSwgImRlc2NyaXB0aW9uIjogIkluZm9ybWF0aW9uIGFib3V0IGZyYW1lIHJlc291cmNl
cy4iIH0KICAgICAgICAgICAgIF0KICAgICAgICAgfSwKICAgICAgICAgewpkaWZmIC0tZ2l0IGEv
VG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IGNjZGUzNmE3N2I4MGE1ZTY5
ZmZmZTg4MjZhMzFkNzY1ODllMGVhMzguLmMxOWU4NDNmOWVmMGM4ODA2ZmRjOTg2ZTdjYjJlYjQ4
YzQwMDdmNjIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwyMiBAQAorMjAxNC0wNC0xNyAgQnJpYW4gSi4gQnVyZyAgPGJ1cmdAY3Mu
d2FzaGluZ3Rvbi5lZHU+CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogcmV3cml0ZSBDb2RlR2Vu
ZXJhdG9ySW5zcGVjdG9yIHRvIGJlIG1vZHVsYXIgYW5kIHRlc3RhYmxlCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzE1OTYKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNjcmlwdHMvcnVuLWluc3BlY3Rv
ci1nZW5lcmF0b3ItdGVzdHM6IEFkZGVkLgorICAgICAgICAobWFpbik6CisgICAgICAgICogU2Ny
aXB0cy93ZWJraXRweS9pbnNwZWN0b3IvX19pbml0X18ucHk6IEFkZGVkLgorICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvaW5zcGVjdG9yL21haW4ucHk6IEFkZGVkLgorICAgICAgICAoSW5zcGVj
dG9yR2VuZXJhdG9yVGVzdHMpOgorICAgICAgICAoSW5zcGVjdG9yR2VuZXJhdG9yVGVzdHMuX19p
bml0X18pOgorICAgICAgICAoSW5zcGVjdG9yR2VuZXJhdG9yVGVzdHMuZ2VuZXJhdGVfZnJvbV9q
c29uKToKKyAgICAgICAgKEluc3BlY3RvckdlbmVyYXRvclRlc3RzLndyaXRlX2Vycm9yX2ZpbGUp
OgorICAgICAgICAoSW5zcGVjdG9yR2VuZXJhdG9yVGVzdHMuZGV0ZWN0X2NoYW5nZXMpOgorICAg
ICAgICAoSW5zcGVjdG9yR2VuZXJhdG9yVGVzdHMucnVuX3Rlc3RzKToKKyAgICAgICAgKEluc3Bl
Y3RvckdlbmVyYXRvclRlc3RzLm1haW4pOgorCiAyMDE0LTA1LTIzICBNaWNoYWVsIFNhYm9mZiAg
PG1zYWJvZmZAYXBwbGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04ocjE2OTI2NSk6IHNoOiBs
aW5lIDA6IGNkOiAuLi8udm0KZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvcnVuLWluc3BlY3Rv
ci1nZW5lcmF0b3ItdGVzdHMgYi9Ub29scy9TY3JpcHRzL3J1bi1pbnNwZWN0b3ItZ2VuZXJhdG9y
LXRlc3RzCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmFhYWIxODAwYmNhNmY3ZThhMzQ5NmU1OTE4NDIxZWVhZTJkMzhk
ODIKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3J1bi1pbnNwZWN0b3ItZ2VuZXJh
dG9yLXRlc3RzCkBAIC0wLDAgKzEsNDIgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyBDb3B5
cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMg
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
IyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisjIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0IHN5cworZnJvbSB3ZWJraXRw
eS5jb21tb24uc3lzdGVtIGltcG9ydCBleGVjdXRpdmUKKworZGVmIG1haW4oYXJndik6CisgICAg
IiIiUnVucyByZXBsYXkgaW5wdXQgY29kZSBnZW5lcmF0b3Igb24gdGVzdCBzcGVjaWZpY2F0aW9u
IGZpbGVzIGFuZCBjb21wYXJlcworICAgIHRoZSByZXN1bHRzIHdpdGggcmVmZXJlbmNlIGZpbGVz
LgorCisgICAgT3B0aW9uczoKKyAgICAgICAtLXJlc2V0LXJlc3VsdHM6IE92ZXJ3cml0ZXMgdGhl
IHJlZmVyZW5jZSBmaWxlcyB3aXRoIHRoZSBnZW5lcmF0ZWQgcmVzdWx0cy4KKworICAgICIiIgor
ICAgIHJlc2V0X3Jlc3VsdHMgPSAiLS1yZXNldC1yZXN1bHRzIiBpbiBhcmd2CisKKyAgICBmcm9t
IHdlYmtpdHB5Lmluc3BlY3Rvci5tYWluIGltcG9ydCBJbnNwZWN0b3JHZW5lcmF0b3JUZXN0cwor
ICAgIHJldHVybiBJbnNwZWN0b3JHZW5lcmF0b3JUZXN0cyhyZXNldF9yZXN1bHRzLCBleGVjdXRp
dmUuRXhlY3V0aXZlKCkpLm1haW4oKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAg
IHN5cy5leGl0KG1haW4oc3lzLmFyZ3YpKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9pbnNwZWN0b3IvX19pbml0X18ucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2luc3Bl
Y3Rvci9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lZjY1YmVlNWJiNzdlOTZlYmM3Y2Q5YzQ3NjQw
NjkwZmJkYThhYzE5Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9p
bnNwZWN0b3IvX19pbml0X18ucHkKQEAgLTAsMCArMSBAQAorIyBSZXF1aXJlZCBmb3IgUHl0aG9u
IHRvIHNlYXJjaCB0aGlzIGRpcmVjdG9yeSBmb3IgbW9kdWxlIGZpbGVzCmRpZmYgLS1naXQgYS9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L2luc3BlY3Rvci9tYWluLnB5IGIvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9pbnNwZWN0b3IvbWFpbi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43NjlmMDQxMmZjNjMwMzZhY2Nh
NzRjZjc1OWM4NzRlNTdjYjFkZWFkCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9pbnNwZWN0b3IvbWFpbi5weQpAQCAtMCwwICsxLDEzNCBAQAorIyBDb3B5cmlnaHQg
KEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChD
KSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisj
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworIyBhcmUgbWV0OgorIworIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTICJBUworIyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKKyMgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBCisjIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBIT0xE
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgb3MKK2lt
cG9ydCBvcy5wYXRoCitpbXBvcnQgc2h1dGlsCitpbXBvcnQgc3lzCitpbXBvcnQgdGVtcGZpbGUK
K2Zyb20gd2Via2l0cHkuY29tbW9uLmNoZWNrb3V0LnNjbS5kZXRlY3Rpb24gaW1wb3J0IGRldGVj
dF9zY21fc3lzdGVtCitmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uZXhlY3V0aXZlIGltcG9y
dCBTY3JpcHRFcnJvcgorCisKK2NsYXNzIEluc3BlY3RvckdlbmVyYXRvclRlc3RzOgorCisgICAg
ZGVmIF9faW5pdF9fKHNlbGYsIHJlc2V0X3Jlc3VsdHMsIGV4ZWN1dGl2ZSk6CisgICAgICAgIHNl
bGYucmVzZXRfcmVzdWx0cyA9IHJlc2V0X3Jlc3VsdHMKKyAgICAgICAgc2VsZi5leGVjdXRpdmUg
PSBleGVjdXRpdmUKKworICAgIGRlZiBnZW5lcmF0ZV9mcm9tX2pzb24oc2VsZiwganNvbl9maWxl
LCBvdXRwdXRfZGlyZWN0b3J5KToKKyAgICAgICAgY21kID0gWydweXRob24nLAorICAgICAgICAg
ICAgICAgJ0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weScsCisgICAgICAgICAgICAgICAnLS1vdXRwdXREaXInLCBv
dXRwdXRfZGlyZWN0b3J5LAorICAgICAgICAgICAgICAgJy0tZm9yY2UnLAorICAgICAgICAgICAg
ICAgJy0tZnJhbWV3b3JrJywgJ1Rlc3QnLAorICAgICAgICAgICAgICAgJy0tdGVzdCcsCisgICAg
ICAgICAgICAgICBqc29uX2ZpbGVdCisKKyAgICAgICAgZXhpdF9jb2RlID0gMAorICAgICAgICB0
cnk6CisgICAgICAgICAgICBzdGRlcnJfb3V0cHV0ID0gc2VsZi5leGVjdXRpdmUucnVuX2NvbW1h
bmQoY21kKQorICAgICAgICAgICAgaWYgc3RkZXJyX291dHB1dDoKKyAgICAgICAgICAgICAgICBz
ZWxmLndyaXRlX2Vycm9yX2ZpbGUoanNvbl9maWxlLCBvdXRwdXRfZGlyZWN0b3J5LCBzdGRlcnJf
b3V0cHV0KQorICAgICAgICBleGNlcHQgU2NyaXB0RXJyb3IsIGU6CisgICAgICAgICAgICBwcmlu
dCBlLm91dHB1dAorICAgICAgICAgICAgZXhpdF9jb2RlID0gZS5leGl0X2NvZGUKKyAgICAgICAg
cmV0dXJuIGV4aXRfY29kZQorCisgICAgZGVmIHdyaXRlX2Vycm9yX2ZpbGUoc2VsZiwgaW5wdXRf
ZmlsZXBhdGgsIG91dHB1dF9kaXJlY3RvcnksIGVycm9yX291dHB1dCk6CisgICAgICAgIG91dHB1
dF9maWxlcGF0aCA9IG9zLnBhdGguam9pbihvdXRwdXRfZGlyZWN0b3J5LCBvcy5wYXRoLmJhc2Vu
YW1lKGlucHV0X2ZpbGVwYXRoKSArICctZXJyb3InKQorCisgICAgICAgIHdpdGggb3BlbihvdXRw
dXRfZmlsZXBhdGgsICJ3IikgYXMgb3V0cHV0X2ZpbGU6CisgICAgICAgICAgICBvdXRwdXRfZmls
ZS53cml0ZShlcnJvcl9vdXRwdXQpCisKKyAgICBkZWYgZGV0ZWN0X2NoYW5nZXMoc2VsZiwgd29y
a19kaXJlY3RvcnksIHJlZmVyZW5jZV9kaXJlY3RvcnkpOgorICAgICAgICBjaGFuZ2VzX2ZvdW5k
ID0gRmFsc2UKKyAgICAgICAgZm9yIG91dHB1dF9maWxlIGluIG9zLmxpc3RkaXIod29ya19kaXJl
Y3RvcnkpOgorICAgICAgICAgICAgY21kID0gWydkaWZmJywKKyAgICAgICAgICAgICAgICAgICAn
LXUnLAorICAgICAgICAgICAgICAgICAgICctTicsCisgICAgICAgICAgICAgICAgICAgb3MucGF0
aC5qb2luKHJlZmVyZW5jZV9kaXJlY3RvcnksIG91dHB1dF9maWxlKSwKKyAgICAgICAgICAgICAg
ICAgICBvcy5wYXRoLmpvaW4od29ya19kaXJlY3RvcnksIG91dHB1dF9maWxlKV0KKworICAgICAg
ICAgICAgZXhpdF9jb2RlID0gMAorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG91
dHB1dCA9IHNlbGYuZXhlY3V0aXZlLnJ1bl9jb21tYW5kKGNtZCkKKyAgICAgICAgICAgIGV4Y2Vw
dCBTY3JpcHRFcnJvciwgZToKKyAgICAgICAgICAgICAgICBvdXRwdXQgPSBlLm91dHB1dAorICAg
ICAgICAgICAgICAgIGV4aXRfY29kZSA9IGUuZXhpdF9jb2RlCisKKyAgICAgICAgICAgIGlmIGV4
aXRfY29kZSBvciBvdXRwdXQ6CisgICAgICAgICAgICAgICAgcHJpbnQgJ0ZBSUw6ICVzJyAlIG91
dHB1dF9maWxlCisgICAgICAgICAgICAgICAgcHJpbnQgb3V0cHV0CisgICAgICAgICAgICAgICAg
Y2hhbmdlc19mb3VuZCA9IFRydWUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAg
cHJpbnQgJ1BBU1M6ICVzJyAlIG91dHB1dF9maWxlCisgICAgICAgIHJldHVybiBjaGFuZ2VzX2Zv
dW5kCisKKyAgICBkZWYgcnVuX3Rlc3RzKHNlbGYsIGlucHV0X2RpcmVjdG9yeSwgcmVmZXJlbmNl
X2RpcmVjdG9yeSk6CisgICAgICAgIHdvcmtfZGlyZWN0b3J5ID0gcmVmZXJlbmNlX2RpcmVjdG9y
eQorCisgICAgICAgIHBhc3NlZCA9IFRydWUKKyAgICAgICAgZm9yIGlucHV0X2ZpbGUgaW4gb3Mu
bGlzdGRpcihpbnB1dF9kaXJlY3RvcnkpOgorICAgICAgICAgICAgKG5hbWUsIGV4dGVuc2lvbikg
PSBvcy5wYXRoLnNwbGl0ZXh0KGlucHV0X2ZpbGUpCisgICAgICAgICAgICBpZiBleHRlbnNpb24g
IT0gJy5qc29uJzoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgIyBHZW5l
cmF0ZSBvdXRwdXQgaW50byB0aGUgd29yayBkaXJlY3RvcnkgKGVpdGhlciB0aGUgZ2l2ZW4gb25l
IG9yIGEKKyAgICAgICAgICAgICMgdGVtcCBvbmUgaWYgbm90IHJlc2V0X3Jlc3VsdHMgaXMgcGVy
Zm9ybWVkKQorICAgICAgICAgICAgaWYgbm90IHNlbGYucmVzZXRfcmVzdWx0czoKKyAgICAgICAg
ICAgICAgICB3b3JrX2RpcmVjdG9yeSA9IHRlbXBmaWxlLm1rZHRlbXAoKQorCisgICAgICAgICAg
ICBpZiBzZWxmLmdlbmVyYXRlX2Zyb21fanNvbihvcy5wYXRoLmpvaW4oaW5wdXRfZGlyZWN0b3J5
LCBpbnB1dF9maWxlKSwgd29ya19kaXJlY3RvcnkpOgorICAgICAgICAgICAgICAgIHBhc3NlZCA9
IEZhbHNlCisKKyAgICAgICAgICAgIGlmIHNlbGYucmVzZXRfcmVzdWx0czoKKyAgICAgICAgICAg
ICAgICBwcmludCAiUmVzZXQgcmVzdWx0cyBmb3IgdGVzdDogJXMiICUgKGlucHV0X2ZpbGUpCisg
ICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgIyBEZXRlY3QgY2hhbmdlcwor
ICAgICAgICAgICAgaWYgc2VsZi5kZXRlY3RfY2hhbmdlcyh3b3JrX2RpcmVjdG9yeSwgcmVmZXJl
bmNlX2RpcmVjdG9yeSk6CisgICAgICAgICAgICAgICAgcGFzc2VkID0gRmFsc2UKKyAgICAgICAg
ICAgIHNodXRpbC5ybXRyZWUod29ya19kaXJlY3RvcnkpCisKKyAgICAgICAgcmV0dXJuIHBhc3Nl
ZAorCisgICAgZGVmIG1haW4oc2VsZik6CisgICAgICAgIGN1cnJlbnRfc2NtID0gZGV0ZWN0X3Nj
bV9zeXN0ZW0ob3MuY3VyZGlyKQorICAgICAgICBvcy5jaGRpcihvcy5wYXRoLmpvaW4oY3VycmVu
dF9zY20uY2hlY2tvdXRfcm9vdCwgJ1NvdXJjZScpKQorCisgICAgICAgIGFsbF90ZXN0c19wYXNz
ZWQgPSBUcnVlCisKKyAgICAgICAgaW5wdXRfZGlyZWN0b3J5ID0gb3MucGF0aC5qb2luKCdKYXZh
U2NyaXB0Q29yZScsICdpbnNwZWN0b3InLCAnc2NyaXB0cycsICd0ZXN0cycpCisgICAgICAgIHJl
ZmVyZW5jZV9kaXJlY3RvcnkgPSBvcy5wYXRoLmpvaW4oJ0phdmFTY3JpcHRDb3JlJywgJ2luc3Bl
Y3RvcicsICdzY3JpcHRzJywgJ3Rlc3RzJywgJ2V4cGVjdGVkJykKKyAgICAgICAgaWYgbm90IHNl
bGYucnVuX3Rlc3RzKGlucHV0X2RpcmVjdG9yeSwgcmVmZXJlbmNlX2RpcmVjdG9yeSk6CisgICAg
ICAgICAgICBhbGxfdGVzdHNfcGFzc2VkID0gRmFsc2UKKworICAgICAgICBwcmludCAnJworICAg
ICAgICBpZiBhbGxfdGVzdHNfcGFzc2VkOgorICAgICAgICAgICAgcHJpbnQgJ0FsbCB0ZXN0cyBQ
QVNTIScKKyAgICAgICAgICAgIHJldHVybiAwCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBw
cmludCAnU29tZSB0ZXN0cyBGQUlMISAoVG8gdXBkYXRlIHRoZSByZWZlcmVuY2UgZmlsZXMsIGV4
ZWN1dGUgInJ1bi1pbnNwZWN0b3ItZ2VuZXJhdG9yLXRlc3RzIC0tcmVzZXQtcmVzdWx0cyIpJwor
ICAgICAgICAgICAgcmV0dXJuIC0xCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>232025</attachid>
            <date>2014-05-24 13:02:27 -0700</date>
            <delta_ts>2014-05-25 15:08:55 -0700</delta_ts>
            <desc>changes to turn CMake/GCC happy</desc>
            <filename>bug-131596-20140524130203.patch</filename>
            <type>text/plain</type>
            <size>639460</size>
            <attacher name="Brian Burg">burg</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTY5Mjk3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBk
NDg4OGRiY2QzNGU3NWUwZTZlYjE1MTNjN2MwNDMxM2NjZmJiNTgyLi44MjY0MmQwOWNhNmFiZWNm
MjAyNzNiYzcyZmI3NTZmMDEyNDFmODNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNzUgQEAKKzIwMTQtMDQtMTcgIEJyaWFuIEouIEJ1cmcgIDxidXJnQGNzLndhc2hpbmd0
b24uZWR1PgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IHJld3JpdGUgQ29kZUdlbmVyYXRvcklu
c3BlY3RvciB0byBiZSBtb2R1bGFyIGFuZCB0ZXN0YWJsZQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMxNTk2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9Db2RlR2VuZXJh
dG9ySW5zcGVjdG9yMi5weTogQWRkZWQuCisgICAgICAgIChnZW5lcmF0ZV9mcm9tX3NwZWNpZmlj
YXRpb24pOgorICAgICAgICAoZ2VuZXJhdGVfZnJvbV9zcGVjaWZpY2F0aW9uLmxvYWRfc3BlY2lm
aWNhdGlvbik6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9fX2luaXRfXy5w
eTogQWRkZWQuCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9i
YWNrZW5kX2NvbW1hbmRzLnB5OiBBZGRlZC4KKyAgICAgICAgKG1ha2VfamF2YXNjcmlwdF9pZGVu
dGlmaWVyKToKKyAgICAgICAgKG1ha2VfamF2YXNjcmlwdF9pZGVudGlmaWVyLnJlcGxhY2VDYWxs
YmFjayk6CisgICAgICAgIChCYWNrZW5kQ29tbWFuZHNHZW5lcmF0b3IpOgorICAgICAgICAoQmFj
a2VuZENvbW1hbmRzR2VuZXJhdG9yLl9faW5pdF9fKToKKyAgICAgICAgKEJhY2tlbmRDb21tYW5k
c0dlbmVyYXRvci5tb2RlbCk6CisgICAgICAgIChCYWNrZW5kQ29tbWFuZHNHZW5lcmF0b3Iub3V0
cHV0X2ZpbGVuYW1lKToKKyAgICAgICAgKEJhY2tlbmRDb21tYW5kc0dlbmVyYXRvci53cml0ZV9v
dXRwdXRfZmlsZXMpOgorICAgICAgICAoQmFja2VuZENvbW1hbmRzR2VuZXJhdG9yLmdlbmVyYXRl
X2xpY2Vuc2UpOgorICAgICAgICAoQmFja2VuZENvbW1hbmRzR2VuZXJhdG9yLmdlbmVyYXRlX2Jh
Y2tlbmRfY29tbWFuZHMpOgorICAgICAgICAoQmFja2VuZENvbW1hbmRzR2VuZXJhdG9yLmdlbmVy
YXRlX2RvbWFpbik6CisgICAgICAgIChCYWNrZW5kQ29tbWFuZHNHZW5lcmF0b3IuZ2VuZXJhdGVf
ZG9tYWluLmdlbmVyYXRlX3BhcmFtZXRlcl9vYmplY3QpOgorICAgICAgICAqIGluc3BlY3Rvci9z
Y3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weTogQWRk
ZWQuCisgICAgICAgICh1Y2ZpcnN0KToKKyAgICAgICAgKEJhY2tlbmREaXNwYXRjaGVySGVhZGVy
R2VuZXJhdG9yKToKKyAgICAgICAgKEJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yLl9f
aW5pdF9fKToKKyAgICAgICAgKEJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yLm1vZGVs
KToKKyAgICAgICAgKEJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yLm91dHB1dF9maWxl
bmFtZSk6CisgICAgICAgIChCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvci53cml0ZV9v
dXRwdXRfZmlsZXMpOgorICAgICAgICAoQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3Iu
Z2VuZXJhdGVfbGljZW5zZSk6CisgICAgICAgIChCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVy
YXRvci5nZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXIpOgorICAgICAgICAoQmFja2VuZERpc3Bh
dGNoZXJIZWFkZXJHZW5lcmF0b3IuZ2VuZXJhdGVfYmFja2VuZF9kaXNwYXRjaGVyLnNob3VsZF9n
ZW5lcmF0ZV9kb21haW4pOgorICAgICAgICAoQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0
b3IuZ2VuZXJhdGVfZG9tYWluX2hhbmRsZXIpOgorICAgICAgICAoQmFja2VuZERpc3BhdGNoZXJI
ZWFkZXJHZW5lcmF0b3IuZ2VuZXJhdGVfaGFuZGxlcl9jb21tYW5kKToKKyAgICAgICAgKEJhY2tl
bmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yLmdlbmVyYXRlX2FzeW5jX2hhbmRsZXJfY29tbWFu
ZCk6CisgICAgICAgIChCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvci5nZW5lcmF0ZV9k
b21haW5fZGlzcGF0Y2hlcik6CisgICAgICAgIChCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVy
YXRvci5nZW5lcmF0ZV9kaXNwYXRjaGVyX2NvbW1hbmQpOgorICAgICAgICAqIGluc3BlY3Rvci9z
Y3JpcHRzL2NvZGVnZW4vZ2VuZXJhdG9yLnB5OiBBZGRlZC4KKyAgICAgICAgKEdlbmVyYXRvcik6
CisgICAgICAgIChHZW5lcmF0b3IuX19pbml0X18pOgorICAgICAgICAoR2VuZXJhdG9yLm1vZGVs
KToKKyAgICAgICAgKEdlbmVyYXRvci53cml0ZV9vdXRwdXRfZmlsZXMpOgorICAgICAgICAoR2Vu
ZXJhdG9yLmNwcF9ndWFyZF9mb3JfZG9tYWluKToKKyAgICAgICAgKER1bW15R2VuZXJhdG9yKToK
KyAgICAgICAgKEluY3JlbWVudGFsRmlsZVdyaXRlcik6CisgICAgICAgIChJbmNyZW1lbnRhbEZp
bGVXcml0ZXIuX19pbml0X18pOgorICAgICAgICAoSW5jcmVtZW50YWxGaWxlV3JpdGVyLndyaXRl
KToKKyAgICAgICAgKEluY3JlbWVudGFsRmlsZVdyaXRlci5jbG9zZSk6CisgICAgICAgICogaW5z
cGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0b3JfdGVtcGxhdGVzLnB5OiBBZGRlZC4KKyAg
ICAgICAgKEdlbmVyYXRvclRlbXBsYXRlcyk6CisgICAgICAgIChTdHJpbmcpOgorICAgICAgICAq
IGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vbW9kZWxzLnB5OiBBZGRlZC4KKyAgICAgICAgKFBh
cnNlRXhjZXB0aW9uKToKKyAgICAgICAgKFR5cGVjaGVja0V4Y2VwdGlvbik6CisgICAgICAgIChG
cmFtZXdvcmspOgorICAgICAgICAoRnJhbWV3b3JrLl9faW5pdF9fKToKKyAgICAgICAgKEZyYW1l
d29yay5zZXR0aW5nKToKKyAgICAgICAgKEZyYW1ld29yay5mcm9tU3RyaW5nKToKKyAgICAgICAg
KEZyYW1ld29ya3MpOgorICAgICAgICAoVHlwZU1vZGUpOgorICAgICAgICAoVHlwZU1vZGUuX19p
bml0X18pOgorICAgICAgICAoVHlwZU1vZGUuZnJvbVN0cmluZyk6CisgICAgICAgIChUeXBlTW9k
ZXMpOgorICAgICAgICAoVHlwZVJlZmVyZW5jZSk6CisgICAgICAgIChUeXBlUmVmZXJlbmNlLl9f
aW5pdF9fKToKKyAgICAgICAgKFR5cGVSZWZlcmVuY2UucmVmZXJlbmNlZF9uYW1lKToKKyAgICAg
ICAgKFR5cGUpOgorICAgICAgICAoVHlwZS5fX2luaXRfXyk6CisgICAgICAgIChUeXBlLl9fZXFf
Xyk6CisgICAgICAgIChUeXBlLl9faGFzaF9fKToKKyAgICAgICAgKFR5cGUuaXNfZW51bSk6Cisg
ICAgICAgIChUeXBlLnR5cGVfZG9tYWluKToKKyAgICAgICAgKFR5cGUudHlwZV9tb2RlKToKKyAg
ICAgICAgKFR5cGUucXVhbGlmaWVkX25hbWUpOgorICAgICAgICAoVHlwZS5yZXNvbHZlX3R5cGVf
cmVmZXJlbmNlcyk6CisgICAgICAgIChUeXBlLmluX3BhcmFtZXRlcl90eXBlKToKKyAgICAgICAg
KFR5cGUub3V0X3BhcmFtZXRlcl90eXBlKToKKyAgICAgICAgKFR5cGUudHlwZV9idWlsZGVyX3R5
cGUpOgorICAgICAgICAoT2JqZWN0VHlwZSk6CisgICAgICAgIChPYmplY3RUeXBlLl9faW5pdF9f
KToKKyAgICAgICAgKE9iamVjdFR5cGUudHlwZV9kb21haW4pOgorICAgICAgICAoT2JqZWN0VHlw
ZS50eXBlX21vZGUpOgorICAgICAgICAoT2JqZWN0VHlwZS5xdWFsaWZpZWRfbmFtZSk6CisgICAg
ICAgIChPYmplY3RUeXBlLnJlc29sdmVfdHlwZV9yZWZlcmVuY2VzKToKKyAgICAgICAgKE9iamVj
dFR5cGUuaW5fcGFyYW1ldGVyX3R5cGUpOgorICAgICAgICAoT2JqZWN0VHlwZS5vdXRfcGFyYW1l
dGVyX3R5cGUpOgorICAgICAgICAoT2JqZWN0VHlwZS50eXBlX2J1aWxkZXJfdHlwZSk6CisgICAg
ICAgIChQcmltaXRpdmVUeXBlKToKKyAgICAgICAgKFByaW1pdGl2ZVR5cGUuX19pbml0X18pOgor
ICAgICAgICAoUHJpbWl0aXZlVHlwZS50eXBlX2RvbWFpbik6CisgICAgICAgIChQcmltaXRpdmVU
eXBlLnR5cGVfbW9kZSk6CisgICAgICAgIChQcmltaXRpdmVUeXBlLnF1YWxpZmllZF9uYW1lKToK
KyAgICAgICAgKFByaW1pdGl2ZVR5cGUuaW5fcGFyYW1ldGVyX3R5cGUpOgorICAgICAgICAoUHJp
bWl0aXZlVHlwZS5vdXRfcGFyYW1ldGVyX3R5cGUpOgorICAgICAgICAoUHJpbWl0aXZlVHlwZS50
eXBlX2J1aWxkZXJfdHlwZSk6CisgICAgICAgIChQcmltaXRpdmVUeXBlLmNwcF9wcmltaXRpdmVf
bmFtZSk6CisgICAgICAgIChBbGlhc2VkVHlwZSk6CisgICAgICAgIChBbGlhc2VkVHlwZS5fX2lu
aXRfXyk6CisgICAgICAgIChBbGlhc2VkVHlwZS50eXBlX2RvbWFpbik6CisgICAgICAgIChBbGlh
c2VkVHlwZS50eXBlX21vZGUpOgorICAgICAgICAoQWxpYXNlZFR5cGUucXVhbGlmaWVkX25hbWUp
OgorICAgICAgICAoQWxpYXNlZFR5cGUucmVzb2x2ZV90eXBlX3JlZmVyZW5jZXMpOgorICAgICAg
ICAoQWxpYXNlZFR5cGUuaW5fcGFyYW1ldGVyX3R5cGUpOgorICAgICAgICAoQWxpYXNlZFR5cGUu
b3V0X3BhcmFtZXRlcl90eXBlKToKKyAgICAgICAgKEFsaWFzZWRUeXBlLnR5cGVfYnVpbGRlcl90
eXBlKToKKyAgICAgICAgKEVudW1UeXBlKToKKyAgICAgICAgKEVudW1UeXBlLl9faW5pdF9fKToK
KyAgICAgICAgKEVudW1UeXBlLmlzX2VudW0pOgorICAgICAgICAoRW51bVR5cGUudHlwZV9kb21h
aW4pOgorICAgICAgICAoRW51bVR5cGUudHlwZV9tb2RlKToKKyAgICAgICAgKEVudW1UeXBlLmVu
dW1fdmFsdWVzKToKKyAgICAgICAgKEVudW1UeXBlLnF1YWxpZmllZF9uYW1lKToKKyAgICAgICAg
KEVudW1UeXBlLnJlc29sdmVfdHlwZV9yZWZlcmVuY2VzKToKKyAgICAgICAgKEVudW1UeXBlLmlu
X3BhcmFtZXRlcl90eXBlKToKKyAgICAgICAgKEVudW1UeXBlLm91dF9wYXJhbWV0ZXJfdHlwZSk6
CisgICAgICAgIChFbnVtVHlwZS50eXBlX2J1aWxkZXJfdHlwZSk6CisgICAgICAgIChWZWN0b3JU
eXBlKToKKyAgICAgICAgKFZlY3RvclR5cGUuX19pbml0X18pOgorICAgICAgICAoVmVjdG9yVHlw
ZS50eXBlX2RvbWFpbik6CisgICAgICAgIChWZWN0b3JUeXBlLnR5cGVfbW9kZSk6CisgICAgICAg
IChWZWN0b3JUeXBlLnF1YWxpZmllZF9uYW1lKToKKyAgICAgICAgKFZlY3RvclR5cGUucmVzb2x2
ZV90eXBlX3JlZmVyZW5jZXMpOgorICAgICAgICAoVmVjdG9yVHlwZS5pbl9wYXJhbWV0ZXJfdHlw
ZSk6CisgICAgICAgIChWZWN0b3JUeXBlLm91dF9wYXJhbWV0ZXJfdHlwZSk6CisgICAgICAgIChW
ZWN0b3JUeXBlLnR5cGVfYnVpbGRlcl90eXBlKToKKyAgICAgICAgKGNoZWNrX2Zvcl9yZXF1aXJl
ZF9wcm9wZXJ0aWVzKToKKyAgICAgICAgKFByb3RvY29sKToKKyAgICAgICAgKFByb3RvY29sLl9f
aW5pdF9fKToKKyAgICAgICAgKFByb3RvY29sLnBhcnNlX3NwZWNpZmljYXRpb24pOgorICAgICAg
ICAoUHJvdG9jb2wucGFyc2VfZG9tYWluKToKKyAgICAgICAgKFByb3RvY29sLnBhcnNlX3R5cGVf
ZGVjbGFyYXRpb24pOgorICAgICAgICAoUHJvdG9jb2wucGFyc2VfdHlwZV9tZW1iZXIpOgorICAg
ICAgICAoUHJvdG9jb2wucGFyc2VfY29tbWFuZCk6CisgICAgICAgIChQcm90b2NvbC5wYXJzZV9l
dmVudCk6CisgICAgICAgIChQcm90b2NvbC5wYXJzZV9wYXJhbWV0ZXIpOgorICAgICAgICAoUHJv
dG9jb2wucmVzb2x2ZV90eXBlcyk6CisgICAgICAgIChQcm90b2NvbC5sb29rdXBfdHlwZV9mb3Jf
ZGVjbGFyYXRpb24pOgorICAgICAgICAoUHJvdG9jb2wubG9va3VwX3R5cGVfcmVmZXJlbmNlKToK
KyAgICAgICAgKERvbWFpbik6CisgICAgICAgIChEb21haW4uX19pbml0X18pOgorICAgICAgICAo
RG9tYWluLnJlc29sdmVfdHlwZV9yZWZlcmVuY2VzKToKKyAgICAgICAgKERvbWFpbnMpOgorICAg
ICAgICAoVHlwZURlY2xhcmF0aW9uKToKKyAgICAgICAgKFR5cGVEZWNsYXJhdGlvbi5fX2luaXRf
Xyk6CisgICAgICAgIChUeXBlRGVjbGFyYXRpb24ucmVzb2x2ZV90eXBlX3JlZmVyZW5jZXMpOgor
ICAgICAgICAoVHlwZU1lbWJlcik6CisgICAgICAgIChUeXBlTWVtYmVyLl9faW5pdF9fKToKKyAg
ICAgICAgKFR5cGVNZW1iZXIucmVzb2x2ZV90eXBlX3JlZmVyZW5jZXMpOgorICAgICAgICAoUGFy
YW1ldGVyKToKKyAgICAgICAgKFBhcmFtZXRlci5fX2luaXRfXyk6CisgICAgICAgIChQYXJhbWV0
ZXIucmVzb2x2ZV90eXBlX3JlZmVyZW5jZXMpOgorICAgICAgICAoQ29tbWFuZCk6CisgICAgICAg
IChDb21tYW5kLl9faW5pdF9fKToKKyAgICAgICAgKENvbW1hbmQucmVzb2x2ZV90eXBlX3JlZmVy
ZW5jZXMpOgorICAgICAgICAoRXZlbnQpOgorICAgICAgICAoRXZlbnQuX19pbml0X18pOgorICAg
ICAgICAoRXZlbnQucmVzb2x2ZV90eXBlX3JlZmVyZW5jZXMpOgorICAgICAgICAqIGluc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tZHVwbGljYXRlLXR5cGUtZGVjbGFyYXRp
b25zLmpzb24tZXJyb3I6IEFkZGVkLgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2V4cGVjdGVkL2ZhaWwtb24tdHlwZS1kZWNsYXJhdGlvbi11c2luZy10eXBlLXJlZmVyZW5jZS5q
c29uLWVycm9yOiBBZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBl
Y3RlZC9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1kZWNsYXJhdGlvbi5q
c29uLWVycm9yOiBBZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBl
Y3RlZC9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1tZW1iZXIuanNvbi1l
cnJvcjogQWRkZWQuCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQv
c2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbi1lcnJvcjogQWRkZWQuCisgICAgICAg
ICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1kdXBsaWNhdGUtdHlwZS1kZWNsYXJh
dGlvbnMuanNvbjogQWRkZWQuCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFp
bC1vbi10eXBlLWRlY2xhcmF0aW9uLXVzaW5nLXR5cGUtcmVmZXJlbmNlLmpzb246IEFkZGVkLgor
ICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tdW5rbm93bi10eXBlLXJl
ZmVyZW5jZS1pbi10eXBlLWRlY2xhcmF0aW9uLmpzb246IEFkZGVkLgorICAgICAgICAqIGluc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVyZW5jZS1pbi10eXBl
LW1lbWJlci5qc29uOiBBZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9z
YW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uOiBBZGRlZC4KKyAgICAgICAgKiBpbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy90eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5
cGUuanNvbjogQWRkZWQuCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvdHlwZS1k
ZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb246IEFkZGVkLgorICAgICAgICAqIGluc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL3R5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb246IEFkZGVkLgorCiAy
MDE0LTA1LTIzICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CiAKICAg
ICAgICAgUmVtb3ZlIG9wZXJhdGlvbkNhbGxHZXR0ZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxp
c3RzLnR4dAppbmRleCBjZGNlMWI4MTIyZDM1NjE4YjU4MDczMTY1ZjlkN2Y2OTllNDYxZmRjLi42
ZGZjZDJiNjFmN2I3YWFiOTRhZGUyYmFkOTI5Y2FhNDIwYzc5ODNlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL0NNYWtlTGlzdHMudHh0CkBAIC04MzgsNiArODM4LDIxIEBAIEFERF9TT1VSQ0VfREVQRU5E
RU5DSUVTKCR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9wYXJzZXIvTGV4ZXIuY3BwICR7REVS
SVZFRF9TCiAKIHNldChKYXZhU2NyaXB0Q29yZV9JTlNQRUNUT1JfU0NSSVBUU19ESVIgIiR7SkFW
QVNDUklQVENPUkVfRElSfS9pbnNwZWN0b3Ivc2NyaXB0cyIpCiAKK3NldChKYXZhU2NyaXB0Q29y
ZV9JTlNQRUNUT1JfUFJPVE9DT0xfU0NSSVBUUworICAgICR7SmF2YVNjcmlwdENvcmVfSU5TUEVD
VE9SX1NDUklQVFNfRElSfS9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
KyAgICAke0phdmFTY3JpcHRDb3JlX0lOU1BFQ1RPUl9TQ1JJUFRTX0RJUn0vY29kZWdlbi9nZW5l
cmF0ZV9iYWNrZW5kX2NvbW1hbmRzLnB5CisgICAgJHtKYXZhU2NyaXB0Q29yZV9JTlNQRUNUT1Jf
U0NSSVBUU19ESVJ9L2NvZGVnZW4vZ2VuZXJhdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5w
eQorICAgICR7SmF2YVNjcmlwdENvcmVfSU5TUEVDVE9SX1NDUklQVFNfRElSfS9jb2RlZ2VuL2dl
bmVyYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQorICAgICR7SmF2YVNj
cmlwdENvcmVfSU5TUEVDVE9SX1NDUklQVFNfRElSfS9jb2RlZ2VuL2dlbmVyYXRlX2Zyb250ZW5k
X2Rpc3BhdGNoZXJfaGVhZGVyLnB5CisgICAgJHtKYXZhU2NyaXB0Q29yZV9JTlNQRUNUT1JfU0NS
SVBUU19ESVJ9L2NvZGVnZW4vZ2VuZXJhdGVfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRh
dGlvbi5weQorICAgICR7SmF2YVNjcmlwdENvcmVfSU5TUEVDVE9SX1NDUklQVFNfRElSfS9jb2Rl
Z2VuL2dlbmVyYXRlX3R5cGVfYnVpbGRlcl9oZWFkZXIucHkKKyAgICAke0phdmFTY3JpcHRDb3Jl
X0lOU1BFQ1RPUl9TQ1JJUFRTX0RJUn0vY29kZWdlbi9nZW5lcmF0ZV90eXBlX2J1aWxkZXJfaW1w
bGVtZW50YXRpb24ucHkKKyAgICAke0phdmFTY3JpcHRDb3JlX0lOU1BFQ1RPUl9TQ1JJUFRTX0RJ
Un0vY29kZWdlbi9nZW5lcmF0b3IucHkKKyAgICAke0phdmFTY3JpcHRDb3JlX0lOU1BFQ1RPUl9T
Q1JJUFRTX0RJUn0vY29kZWdlbi9nZW5lcmF0b3JfdGVtcGxhdGVzLnB5CisgICAgJHtKYXZhU2Ny
aXB0Q29yZV9JTlNQRUNUT1JfU0NSSVBUU19ESVJ9L2NvZGVnZW4vX19pbml0X18ucHkKKyAgICAk
e0phdmFTY3JpcHRDb3JlX0lOU1BFQ1RPUl9TQ1JJUFRTX0RJUn0vY29kZWdlbi9tb2RlbHMucHkK
KykKKwogc2V0KEphdmFTY3JpcHRDb3JlX0lOU1BFQ1RPUl9ET01BSU5TCiAgICAgJHtKQVZBU0NS
SVBUQ09SRV9ESVJ9L2luc3BlY3Rvci9wcm90b2NvbC9Db25zb2xlLmpzb24KICAgICAke0pBVkFT
Q1JJUFRDT1JFX0RJUn0vaW5zcGVjdG9yL3Byb3RvY29sL0RlYnVnZ2VyLmpzb24KQEAgLTg2Miwx
MSArODc3LDEwIEBAIGFkZF9jdXN0b21fY29tbWFuZCgKICAgICAgICAgICAgJHtERVJJVkVEX1NP
VVJDRVNfSkFWQVNDUklQVENPUkVfRElSfS9JbnNwZWN0b3JKU0Zyb250ZW5kRGlzcGF0Y2hlcnMu
aAogICAgICAgICAgICAke0RFUklWRURfU09VUkNFU19KQVZBU0NSSVBUQ09SRV9ESVJ9L0luc3Bl
Y3RvckpTVHlwZUJ1aWxkZXJzLmNwcAogICAgICAgICAgICAke0RFUklWRURfU09VUkNFU19KQVZB
U0NSSVBUQ09SRV9ESVJ9L0luc3BlY3RvckpTVHlwZUJ1aWxkZXJzLmgKLSAgICAgICAgICAgJHtE
RVJJVkVEX1NPVVJDRVNfV0VCSU5TUEVDVE9SVUlfRElSfS9Vc2VySW50ZXJmYWNlL1Byb3RvY29s
L0luc3BlY3RvckpTQmFja2VuZENvbW1hbmRzLmpzCisgICAgICAgICAgICR7REVSSVZFRF9TT1VS
Q0VTX0pBVkFTQ1JJUFRDT1JFX0RJUn0vSW5zcGVjdG9ySlNCYWNrZW5kQ29tbWFuZHMuanMKICAg
ICBNQUlOX0RFUEVOREVOQ1kgJHtERVJJVkVEX1NPVVJDRVNfSkFWQVNDUklQVENPUkVfRElSfS9J
bnNwZWN0b3JKUy5qc29uCi0gICAgREVQRU5EUyAke0phdmFTY3JpcHRDb3JlX0lOU1BFQ1RPUl9T
Q1JJUFRTX0RJUn0vQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQotICAgICAgICAgICAgJHtKYXZh
U2NyaXB0Q29yZV9JTlNQRUNUT1JfU0NSSVBUU19ESVJ9L0NvZGVHZW5lcmF0b3JJbnNwZWN0b3JT
dHJpbmdzLnB5Ci0gICAgQ09NTUFORCAke1BZVEhPTl9FWEVDVVRBQkxFfSAke0phdmFTY3JpcHRD
b3JlX0lOU1BFQ1RPUl9TQ1JJUFRTX0RJUn0vQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weSAke0RF
UklWRURfU09VUkNFU19KQVZBU0NSSVBUQ09SRV9ESVJ9L0luc3BlY3RvckpTLmpzb24gLS1vdXRw
dXRfaF9kaXIgIiR7REVSSVZFRF9TT1VSQ0VTX0pBVkFTQ1JJUFRDT1JFX0RJUn0iIC0tb3V0cHV0
X2NwcF9kaXIgIiR7REVSSVZFRF9TT1VSQ0VTX0pBVkFTQ1JJUFRDT1JFX0RJUn0iIC0tb3V0cHV0
X2pzX2RpciAiJHtERVJJVkVEX1NPVVJDRVNfV0VCSU5TUEVDVE9SVUlfRElSfS9Vc2VySW50ZXJm
YWNlL1Byb3RvY29sIiAtLW91dHB1dF90eXBlIEphdmFTY3JpcHQgLS13cml0ZV9hbHdheXMgJiYg
bWtkaXIgLXAgJHtERVJJVkVEX1NPVVJDRVNfSkFWQVNDUklQVENPUkVfRElSfS9pbnNwZWN0b3Ig
JiYgY3AgJHtERVJJVkVEX1NPVVJDRVNfSkFWQVNDUklQVENPUkVfRElSfS9JbnNwZWN0b3JKU0Jh
Y2tlbmREaXNwYXRjaGVycy5oICR7REVSSVZFRF9TT1VSQ0VTX0pBVkFTQ1JJUFRDT1JFX0RJUn0v
SW5zcGVjdG9ySlNGcm9udGVuZERpc3BhdGNoZXJzLmggJHtERVJJVkVEX1NPVVJDRVNfSkFWQVND
UklQVENPUkVfRElSfS9JbnNwZWN0b3JKU1R5cGVCdWlsZGVycy5oICR7REVSSVZFRF9TT1VSQ0VT
X0pBVkFTQ1JJUFRDT1JFX0RJUn0vaW5zcGVjdG9yCisgICAgREVQRU5EUyAke0phdmFTY3JpcHRD
b3JlX0lOU1BFQ1RPUl9QUk9UT0NPTF9TQ0lSUFRTfQorICAgIENPTU1BTkQgJHtQWVRIT05fRVhF
Q1VUQUJMRX0gJHtKYXZhU2NyaXB0Q29yZV9JTlNQRUNUT1JfU0NSSVBUU19ESVJ9L2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weSAtLW91dHB1dERpciAiJHtERVJJVkVEX1NP
VVJDRVNfSkFWQVNDUklQVENPUkVfRElSfSIgLS1mcmFtZXdvcmsgSmF2YVNjcmlwdENvcmUgJHtE
RVJJVkVEX1NPVVJDRVNfSkFWQVNDUklQVENPUkVfRElSfS9JbnNwZWN0b3JKUy5qc29uICYmIG1r
ZGlyIC1wICR7REVSSVZFRF9TT1VSQ0VTX0pBVkFTQ1JJUFRDT1JFX0RJUn0vaW5zcGVjdG9yICYm
IGNwICR7REVSSVZFRF9TT1VSQ0VTX0pBVkFTQ1JJUFRDT1JFX0RJUn0vSW5zcGVjdG9ySlNCYWNr
ZW5kRGlzcGF0Y2hlcnMuaCAke0RFUklWRURfU09VUkNFU19KQVZBU0NSSVBUQ09SRV9ESVJ9L0lu
c3BlY3RvckpTRnJvbnRlbmREaXNwYXRjaGVycy5oICR7REVSSVZFRF9TT1VSQ0VTX0pBVkFTQ1JJ
UFRDT1JFX0RJUn0vSW5zcGVjdG9ySlNUeXBlQnVpbGRlcnMuaCAke0RFUklWRURfU09VUkNFU19K
QVZBU0NSSVBUQ09SRV9ESVJ9L2luc3BlY3RvciAmJiBta2RpciAtcCAke0RFUklWRURfU09VUkNF
U19XRUJJTlNQRUNUT1JVSV9ESVJ9L1VzZXJJbnRlcmZhY2UvUHJvdG9jb2wgJiYgY3AgJHtERVJJ
VkVEX1NPVVJDRVNfSkFWQVNDUklQVENPUkVfRElSfS9JbnNwZWN0b3JKU0JhY2tlbmRDb21tYW5k
cy5qcyAke0RFUklWRURfU09VUkNFU19XRUJJTlNQRUNUT1JVSV9ESVJ9L1VzZXJJbnRlcmZhY2Uv
UHJvdG9jb2wKICAgICBWRVJCQVRJTSkKIAogIyBKU0NCdWlsdGlucwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQppbmRleCA2MTBkYzEyYjBmZTE5NTViNDg2N2MwOTIx
YTA4ODAwODBkMDEzZTMzLi5kMGQ5NTEyZWE2ODU1ODRkYWI4ZWYyN2RkZDIyNWNhMmEzM2NmYjI5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQpAQCAtMTIyLDgg
KzEyMiwxOSBAQCBJTlNQRUNUT1JfRE9NQUlOUyA9IFwKICMKIAogSU5TUEVDVE9SX0dFTkVSQVRP
Ul9TQ1JJUFRTID0gXAotCSQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9zY3JpcHRzL0NvZGVH
ZW5lcmF0b3JJbnNwZWN0b3IucHkgXAotCSQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9zY3Jp
cHRzL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3JTdHJpbmdzLnB5IFwKKwkkKEphdmFTY3JpcHRDb3Jl
KS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL19faW5pdF9fLnB5IFwKKwkkKEphdmFTY3JpcHRD
b3JlKS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2JhY2tlbmRfY29tbWFuZHMu
cHkgXAorCSQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJh
dGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weSBcCisJJChKYXZhU2NyaXB0Q29yZSkvaW5z
cGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVt
ZW50YXRpb24ucHkgXAorCSQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVn
ZW4vZ2VuZXJhdGVfZnJvbnRlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkgXAorCSQoSmF2YVNjcmlw
dENvcmUpL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfZnJvbnRlbmRfZGlzcGF0
Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSBcCisJJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3Nj
cmlwdHMvY29kZWdlbi9nZW5lcmF0ZV90eXBlX2J1aWxkZXJfaGVhZGVyLnB5IFwKKwkkKEphdmFT
Y3JpcHRDb3JlKS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX3R5cGVfYnVpbGRl
cl9pbXBsZW1lbnRhdGlvbi5weSBcCisJJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3Njcmlw
dHMvY29kZWdlbi9nZW5lcmF0b3JfdGVtcGxhdGVzLnB5IFwKKwkkKEphdmFTY3JpcHRDb3JlKS9p
bnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRvci5weSBcCisJJChKYXZhU2NyaXB0Q29y
ZSkvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9tb2RlbHMucHkgXAorCSQoSmF2YVNjcmlwdENv
cmUpL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWNvbWJpbmVkLWluc3BlY3Rvci1qc29uLnB5
IFwKKwkkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkgXAogIwogCiBhbGwgOiBcCkBAIC0xNDQsNyArMTU1LDcg
QEAgSW5zcGVjdG9ySlMuanNvbiA6IGluc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWNvbWJpbmVk
LWluc3BlY3Rvci1qc29uLnB5ICQoSU5TUEUKIAogIyBJbnNwZWN0b3IgQmFja2VuZCBEaXNwYXRj
aGVycywgRnJvbnRlbmQgRGlzcGF0Y2hlcnMsIFR5cGUgQnVpbGRlcnMKIEluc3BlY3RvckpTRnJv
bnRlbmREaXNwYXRjaGVycy5oIDogSW5zcGVjdG9ySlMuanNvbiAkKElOU1BFQ1RPUl9HRU5FUkFU
T1JfU0NSSVBUUykKLQkkKFBZVEhPTikgJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3Njcmlw
dHMvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weSAuL0luc3BlY3RvckpTLmpzb24gLS1vdXRwdXRf
aF9kaXIgLiAtLW91dHB1dF9jcHBfZGlyIC4gLS1vdXRwdXRfanNfZGlyIC4gLS1vdXRwdXRfdHlw
ZSBKYXZhU2NyaXB0CisJJChQWVRIT04pICQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9zY3Jp
cHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weSAtLWZyYW1ld29yayBK
YXZhU2NyaXB0Q29yZSAtLW91dHB1dERpciAuIC4vSW5zcGVjdG9ySlMuanNvbgogCiBJbmplY3Rl
ZFNjcmlwdFNvdXJjZS5oIDogaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0U291cmNlLmpzICQoSmF2
YVNjcmlwdENvcmUpL2luc3BlY3Rvci9zY3JpcHRzL2pzbWluLnB5ICQoSmF2YVNjcmlwdENvcmUp
L2luc3BlY3Rvci9zY3JpcHRzL3h4ZC5wbAogCSQoUFlUSE9OKSAkKEphdmFTY3JpcHRDb3JlKS9p
bnNwZWN0b3Ivc2NyaXB0cy9qc21pbi5weSA8ICQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9J
bmplY3RlZFNjcmlwdFNvdXJjZS5qcyA+IC4vSW5qZWN0ZWRTY3JpcHRTb3VyY2UubWluLmpzCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGMzNTNhYTA2MTYwNTg4OWIzNWMwY2UxMTc0
MjMyZDE2N2U4OGE2MDIuLmMxZDMwYTA4ZTFlZTMxNDUwNDJhODQzMmYzMzAzZWUwOWE2ZDUxZDUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMjY4LDggKzEyNjgsNiBAQAogCQlB
NTMyNDM4QTE4NTY4MzM1MDAyRUQ2OTIgLyogSW5zcGVjdG9ySlNGcm9udGVuZERpc3BhdGNoZXJz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNTMyNDM4
NDE4NTY4MzE3MDAyRUQ2OTIgLyogSW5zcGVjdG9ySlNGcm9udGVuZERpc3BhdGNoZXJzLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTUzMjQzOEIx
ODU2ODMzNTAwMkVENjkyIC8qIEluc3BlY3RvckpTVHlwZUJ1aWxkZXJzLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1MzI0Mzg1MTg1NjgzMTcwMDJF
RDY5MiAvKiBJbnNwZWN0b3JKU1R5cGVCdWlsZGVycy5jcHAgKi87IH07CiAJCUE1MzI0MzhDMTg1
NjgzMzUwMDJFRDY5MiAvKiBJbnNwZWN0b3JKU1R5cGVCdWlsZGVycy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTUzMjQzODYxODU2ODMxNzAwMkVENjky
IC8qIEluc3BlY3RvckpTVHlwZUJ1aWxkZXJzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJQTUzMjQzOTIxODU2OTcwOTAwMkVENjkyIC8qIENvZGVH
ZW5lcmF0b3JJbnNwZWN0b3IucHkgaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBBNTMyNDM4RjE4NTY5NkU2MDAyRUQ2OTIgLyogQ29kZUdlbmVyYXRvckluc3Bl
Y3Rvci5weSAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owot
CQlBNTMyNDM5MzE4NTY5NzA5MDAyRUQ2OTIgLyogQ29kZUdlbmVyYXRvckluc3BlY3RvclN0cmlu
Z3MucHkgaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNTMy
NDM5MDE4NTY5NkU2MDAyRUQ2OTIgLyogQ29kZUdlbmVyYXRvckluc3BlY3RvclN0cmluZ3MucHkg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTUzMjQz
OTQxODU2OTcwOTAwMkVENjkyIC8qIGdlbmVyYXRlLWNvbWJpbmVkLWluc3BlY3Rvci1qc29uLnB5
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTUzMjQzOTEx
ODU2OTZFNjAwMkVENjkyIC8qIGdlbmVyYXRlLWNvbWJpbmVkLWluc3BlY3Rvci1qc29uLnB5ICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE1MzI0Mzk4
MTg1NkE0ODkwMDJFRDY5MiAvKiBJbnNwZWN0b3JKUy5qc29uIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTUzMjQzOTUxODU2QTQ3NTAwMkVENjkyIC8qIElu
c3BlY3RvckpTLmpzb24gKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJQTUzQ0UwODUxOEJDMUE1NjAwQkVERjc2IC8qIENvbnNvbGVQcm90b3R5cGUuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTUzQ0UwODEx
OEJDMUE1NjAwQkVERjc2IC8qIENvbnNvbGVQcm90b3R5cGUuY3BwICovOyB9OwpAQCAtMTY5OCw2
ICsxNjk2LDE3IEBACiAJCUMyRkNBRTEyMTdBOUMyNEUwMDM0QzczNSAvKiBCeXRlY29kZUxpdmVu
ZXNzQW5hbHlzaXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQzJGQ0FFMEUxN0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNp
cy5jcHAgKi87IH07CiAJCUMyRkNBRTEzMTdBOUMyNEUwMDM0QzczNSAvKiBCeXRlY29kZUxpdmVu
ZXNzQW5hbHlzaXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEMyRkNBRTBGMTdBOUMyNEUwMDM0QzczNSAvKiBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlDMkZF
MThBNDE2QkFFQzQwMDBBRjMwNjEgLyogU3RydWN0dXJlUmFyZURhdGEuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyRkUxOEEzMTZCQUVDNDAwMEFGMzA2
MSAvKiBTdHJ1Y3R1cmVSYXJlRGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCUM0NzAzQ0MwMTkyODQ0OTYwMDEzRkJFQSAvKiBnZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkgaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBDNDcwM0NCRjE5Mjg0NDk2MDAxM0ZCRUEgLyogZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCUM0NzAzQ0NFMTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5l
cmF0ZV9iYWNrZW5kX2NvbW1hbmRzLnB5IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQzQ3MDNDQzMxOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRlX2JhY2tl
bmRfY29tbWFuZHMucHkgKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKKwkJQzQ3MDNDQ0YxOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRlX2JhY2tlbmRfZGlz
cGF0Y2hlcl9oZWFkZXIucHkgaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBDNDcwM0NDNDE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJhdGVfYmFja2VuZF9kaXNw
YXRjaGVyX2hlYWRlci5weSAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OworCQlDNDcwM0NEMDE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJhdGVfYmFja2VuZF9k
aXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQzQ3MDNDQzUxOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRlX2Jh
Y2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlDNDcwM0NEMTE5Mjg0NENDMDAxM0ZCRUEgLyog
Z2VuZXJhdGVfZnJvbnRlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkgaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNDcwM0NDNjE5Mjg0NENDMDAxM0ZCRUEgLyog
Z2VuZXJhdGVfZnJvbnRlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkgKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQzQ3MDNDRDIxOTI4NDRDQzAwMTNGQkVB
IC8qIGdlbmVyYXRlX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkgaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNDcwM0NDNzE5Mjg0NEND
MDAxM0ZCRUEgLyogZ2VuZXJhdGVfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5w
eSAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlDNDcw
M0NEMzE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJhdGVfdHlwZV9idWlsZGVyX2hlYWRlci5weSBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM0NzAzQ0M4MTky
ODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0ZV90eXBlX2J1aWxkZXJfaGVhZGVyLnB5ICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUM0NzAzQ0Q0MTkyODQ0
Q0MwMDEzRkJFQSAvKiBnZW5lcmF0ZV90eXBlX2J1aWxkZXJfaW1wbGVtZW50YXRpb24ucHkgaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNDcwM0NDOTE5Mjg0
NENDMDAxM0ZCRUEgLyogZ2VuZXJhdGVfdHlwZV9idWlsZGVyX2ltcGxlbWVudGF0aW9uLnB5ICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUM0NzAzQ0Q1
MTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0b3JfdGVtcGxhdGVzLnB5IGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzQ3MDNDQ0ExOTI4NDRDQzAwMTNGQkVB
IC8qIGdlbmVyYXRvcl90ZW1wbGF0ZXMucHkgKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJQzQ3MDNDRDYxOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRv
ci5weSBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM0NzAz
Q0NCMTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0b3IucHkgKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQzQ3MDNDRDcxOTI4NDRDQzAwMTNGQkVBIC8q
IG1vZGVscy5weSBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEM0NzAzQ0NDMTkyODQ0Q0MwMDEzRkJFQSAvKiBtb2RlbHMucHkgKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTEyNEE4RjcwRTU1NTc3NTAwMzA5MUYx
IC8qIE9wYXF1ZUpTU3RyaW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBFMTI0QThGNTBFNTU1Nzc1MDAzMDkxRjEgLyogT3BhcXVlSlNTdHJpbmcuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFMTI0QThG
ODBFNTU1Nzc1MDAzMDkxRjEgLyogT3BhcXVlSlNTdHJpbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTEyNEE4RjYwRTU1NTc3NTAwMzA5MUYxIC8q
IE9wYXF1ZUpTU3RyaW5nLmNwcCAqLzsgfTsKIAkJRTE3ODYzNkQwRDlCRUVDMzAwRDc0RTc1IC8q
IEluaXRpYWxpemVUaHJlYWRpbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRTE3ODYzNkMwRDlCRUVDMzAwRDc0RTc1IC8qIEluaXRpYWxpemVUaHJl
YWRpbmcuY3BwICovOyB9OwpAQCAtMjg3MCw4ICsyODc5LDYgQEAKIAkJQTUzMjQzODUxODU2ODMx
NzAwMkVENjkyIC8qIEluc3BlY3RvckpTVHlwZUJ1aWxkZXJzLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEluc3BlY3RvckpTVHlwZUJ1aWxkZXJzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQTUzMjQzODYxODU2ODMxNzAwMkVENjkyIC8qIEluc3BlY3RvckpTVHlwZUJ1aWxkZXJz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEluc3BlY3RvckpTVHlwZUJ1aWxkZXJzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUE1MzI0MzhEMTg1Njk2Q0EwMDJFRDY5MiAvKiBwcm90b2NvbCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IGZvbGRlcjsg
cGF0aCA9IHByb3RvY29sOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBNTMyNDM4RjE4
NTY5NkU2MDAyRUQ2OTIgLyogQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRl
eHQuc2NyaXB0LnB5dGhvbjsgcGF0aCA9IENvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHk7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUE1MzI0MzkwMTg1Njk2RTYwMDJFRDY5MiAvKiBDb2Rl
R2VuZXJhdG9ySW5zcGVjdG9yU3RyaW5ncy5weSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuc2NyaXB0LnB5dGhv
bjsgcGF0aCA9IENvZGVHZW5lcmF0b3JJbnNwZWN0b3JTdHJpbmdzLnB5OyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlBNTMyNDM5MTE4NTY5NkU2MDAyRUQ2OTIgLyogZ2VuZXJhdGUtY29t
YmluZWQtaW5zcGVjdG9yLWpzb24ucHkgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnNjcmlwdC5weXRob247IHBh
dGggPSAiZ2VuZXJhdGUtY29tYmluZWQtaW5zcGVjdG9yLWpzb24ucHkiOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlBNTMyNDM5NTE4NTZBNDc1MDAyRUQ2OTIgLyogSW5zcGVjdG9ySlMu
anNvbiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHRleHQuanNvbjsgcGF0aCA9IEluc3BlY3RvckpTLmpzb247IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE1MzI0Mzk2MTg1NkE0NzUwMDJFRDY5MiAvKiBJbnNw
ZWN0b3JKU0JhY2tlbmRDb21tYW5kcy5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlw
dDsgcGF0aCA9IEluc3BlY3RvckpTQmFja2VuZENvbW1hbmRzLmpzOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtMzI5MCw2ICszMjk3LDE4IEBACiAJCUMyRkNBRTBFMTdBOUMyNEUwMDM0
QzczNSAvKiBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzJGQ0FFMEYxN0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2Rl
TGl2ZW5lc3NBbmFseXNpcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCeXRl
Y29kZUxpdmVuZXNzQW5hbHlzaXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzJG
RTE4QTMxNkJBRUM0MDAwQUYzMDYxIC8qIFN0cnVjdHVyZVJhcmVEYXRhLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0cnVjdHVyZVJhcmVEYXRhLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUM0NzAzQ0JGMTkyODQ0OTYwMDEzRkJFQSAvKiBnZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnNjcmlwdC5weXRob247
IHBhdGggPSAiZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ijsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzQ3MDNDQzIxOTI4NDRDQzAwMTNGQkVBIC8qIF9faW5p
dF9fLnB5ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gdGV4dC5zY3JpcHQucHl0aG9uOyBuYW1lID0gX19pbml0X18ucHk7
IHBhdGggPSBjb2RlZ2VuL19faW5pdF9fLnB5OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlDNDcwM0NDMzE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJhdGVfYmFja2VuZF9jb21tYW5kcy5w
eSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHRleHQuc2NyaXB0LnB5dGhvbjsgbmFtZSA9IGdlbmVyYXRlX2JhY2tlbmRf
Y29tbWFuZHMucHk7IHBhdGggPSBjb2RlZ2VuL2dlbmVyYXRlX2JhY2tlbmRfY29tbWFuZHMucHk7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUM0NzAzQ0M0MTkyODQ0Q0MwMDEzRkJFQSAv
KiBnZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5ICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5z
Y3JpcHQucHl0aG9uOyBuYW1lID0gZ2VuZXJhdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5w
eTsgcGF0aCA9IGNvZGVnZW4vZ2VuZXJhdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzQ3MDNDQzUxOTI4NDRDQzAwMTNGQkVBIC8q
IGdlbmVyYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHRleHQuc2NyaXB0LnB5dGhvbjsgbmFtZSA9IGdlbmVyYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9p
bXBsZW1lbnRhdGlvbi5weTsgcGF0aCA9IGNvZGVnZW4vZ2VuZXJhdGVfYmFja2VuZF9kaXNwYXRj
aGVyX2ltcGxlbWVudGF0aW9uLnB5OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDNDcw
M0NDNjE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJhdGVfZnJvbnRlbmRfZGlzcGF0Y2hlcl9oZWFk
ZXIucHkgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSB0ZXh0LnNjcmlwdC5weXRob247IG5hbWUgPSBnZW5lcmF0ZV9mcm9u
dGVuZF9kaXNwYXRjaGVyX2hlYWRlci5weTsgcGF0aCA9IGNvZGVnZW4vZ2VuZXJhdGVfZnJvbnRl
bmRfZGlzcGF0Y2hlcl9oZWFkZXIucHk7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUM0
NzAzQ0M3MTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0ZV9mcm9udGVuZF9kaXNwYXRjaGVyX2lt
cGxlbWVudGF0aW9uLnB5ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5zY3JpcHQucHl0aG9uOyBuYW1lID0gZ2Vu
ZXJhdGVfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weTsgcGF0aCA9IGNvZGVn
ZW4vZ2VuZXJhdGVfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzQ3MDNDQzgxOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVy
YXRlX3R5cGVfYnVpbGRlcl9oZWFkZXIucHkgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnNjcmlwdC5weXRob247
IG5hbWUgPSBnZW5lcmF0ZV90eXBlX2J1aWxkZXJfaGVhZGVyLnB5OyBwYXRoID0gY29kZWdlbi9n
ZW5lcmF0ZV90eXBlX2J1aWxkZXJfaGVhZGVyLnB5OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlDNDcwM0NDOTE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJhdGVfdHlwZV9idWlsZGVyX2lt
cGxlbWVudGF0aW9uLnB5ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5zY3JpcHQucHl0aG9uOyBuYW1lID0gZ2Vu
ZXJhdGVfdHlwZV9idWlsZGVyX2ltcGxlbWVudGF0aW9uLnB5OyBwYXRoID0gY29kZWdlbi9nZW5l
cmF0ZV90eXBlX2J1aWxkZXJfaW1wbGVtZW50YXRpb24ucHk7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUM0NzAzQ0NBMTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0b3JfdGVtcGxhdGVz
LnB5ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gdGV4dC5zY3JpcHQucHl0aG9uOyBuYW1lID0gZ2VuZXJhdG9yX3RlbXBs
YXRlcy5weTsgcGF0aCA9IGNvZGVnZW4vZ2VuZXJhdG9yX3RlbXBsYXRlcy5weTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzQ3MDNDQ0IxOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRv
ci5weSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHRleHQuc2NyaXB0LnB5dGhvbjsgbmFtZSA9IGdlbmVyYXRvci5weTsg
cGF0aCA9IGNvZGVnZW4vZ2VuZXJhdG9yLnB5OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlDNDcwM0NDQzE5Mjg0NENDMDAxM0ZCRUEgLyogbW9kZWxzLnB5ICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5z
Y3JpcHQucHl0aG9uOyBuYW1lID0gbW9kZWxzLnB5OyBwYXRoID0gY29kZWdlbi9tb2RlbHMucHk7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQyMTIwMjI4MEFENDMxMEMwMEVENzlCNiAv
KiBEYXRlQ29udmVyc2lvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gRGF0ZUNvbnZlcnNpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlEMjEy
MDIyOTBBRDQzMTBDMDBFRDc5QjYgLyogRGF0ZUNvbnZlcnNpb24uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IERhdGVDb252ZXJzaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUUxMjRBOEY1MEU1NTU3NzUwMDMwOTFGMSAvKiBPcGFxdWVKU1N0cmluZy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBPcGFxdWVKU1N0cmluZy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTA5MywxMCArNTExMiwxMCBAQAogCQlBNTMyNDM4RTE4
NTY5NkNFMDAyRUQ2OTIgLyogc2NyaXB0cyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJ
Y2hpbGRyZW4gPSAoCi0JCQkJQTUzMjQzOEYxODU2OTZFNjAwMkVENjkyIC8qIENvZGVHZW5lcmF0
b3JJbnNwZWN0b3IucHkgKi8sCi0JCQkJQTUzMjQzOTAxODU2OTZFNjAwMkVENjkyIC8qIENvZGVH
ZW5lcmF0b3JJbnNwZWN0b3JTdHJpbmdzLnB5ICovLAorCQkJCUM0NzAzQ0MxMTkyODQ0QTQwMDEz
RkJFQSAvKiBjb2RlZ2VuICovLAogCQkJCUE1ODQwRTI2MTg3Qzk4MDcwMDg0M0IxMCAvKiBjc3Nt
aW4ucHkgKi8sCiAJCQkJQTUzMjQzOTExODU2OTZFNjAwMkVENjkyIC8qIGdlbmVyYXRlLWNvbWJp
bmVkLWluc3BlY3Rvci1qc29uLnB5ICovLAorCQkJCUM0NzAzQ0JGMTkyODQ0OTYwMDEzRkJFQSAv
KiBnZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkgKi8sCiAJCQkJQTU4NDBF
MjgxODdDQTVCODAwODQzQjEwIC8qIGlubGluZS1hbmQtbWluaWZ5LXN0eWxlc2hlZXRzLWFuZC1z
Y3JpcHRzLnB5ICovLAogCQkJCUE1MTNFNUM0MTg1RjkyREMwMDdFOTVBRCAvKiBqc21pbi5weSAq
LywKIAkJCQlBNTEzRTVDNTE4NUY5MkYwMDA3RTk1QUQgLyogeHhkLnBsICovLApAQCAtNTIxNCw2
ICs1MjMzLDI0IEBACiAJCQlwYXRoID0gYnVpbHRpbnM7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91
cD4iOwogCQl9OworCQlDNDcwM0NDMTE5Mjg0NEE0MDAxM0ZCRUEgLyogY29kZWdlbiAqLyA9IHsK
KwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJQzQ3MDNDQzIxOTI4NDRD
QzAwMTNGQkVBIC8qIF9faW5pdF9fLnB5ICovLAorCQkJCUM0NzAzQ0MzMTkyODQ0Q0MwMDEzRkJF
QSAvKiBnZW5lcmF0ZV9iYWNrZW5kX2NvbW1hbmRzLnB5ICovLAorCQkJCUM0NzAzQ0M0MTkyODQ0
Q0MwMDEzRkJFQSAvKiBnZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5ICovLAor
CQkJCUM0NzAzQ0M1MTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNo
ZXJfaW1wbGVtZW50YXRpb24ucHkgKi8sCisJCQkJQzQ3MDNDQzYxOTI4NDRDQzAwMTNGQkVBIC8q
IGdlbmVyYXRlX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5ICovLAorCQkJCUM0NzAzQ0M3
MTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0ZV9mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVu
dGF0aW9uLnB5ICovLAorCQkJCUM0NzAzQ0M4MTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0ZV90
eXBlX2J1aWxkZXJfaGVhZGVyLnB5ICovLAorCQkJCUM0NzAzQ0M5MTkyODQ0Q0MwMDEzRkJFQSAv
KiBnZW5lcmF0ZV90eXBlX2J1aWxkZXJfaW1wbGVtZW50YXRpb24ucHkgKi8sCisJCQkJQzQ3MDND
Q0ExOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRvcl90ZW1wbGF0ZXMucHkgKi8sCisJCQkJQzQ3
MDNDQ0IxOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRvci5weSAqLywKKwkJCQlDNDcwM0NDQzE5
Mjg0NENDMDAxM0ZCRUEgLyogbW9kZWxzLnB5ICovLAorCQkJKTsKKwkJCW5hbWUgPSBjb2RlZ2Vu
OworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKIC8qIEVuZCBQQlhHcm91cCBzZWN0
aW9uICovCiAKIC8qIEJlZ2luIFBCWEhlYWRlcnNCdWlsZFBoYXNlIHNlY3Rpb24gKi8KQEAgLTU0
OTksNiArNTUzNiwxOSBAQAogCQkJCTJBQUJDREU3MThFRjI5NDIwMDAwMjA5NiAvKiBHQ0xvZ2dp
bmcuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFNTI0OEY5MTkxNDQyRDkwMEI3RkRFNCAvKiBWYXJp
YWJsZVdhdGNocG9pbnRTZXRJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMkRBNzc4MzE4
RTI1OTk5MDA2NkZDQjYgLyogSGVhcElubGluZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCUE1MzI0
Mzk0MTg1Njk3MDkwMDJFRDY5MiAvKiBnZW5lcmF0ZS1jb21iaW5lZC1pbnNwZWN0b3ItanNvbi5w
eSBpbiBIZWFkZXJzICovLAorCQkJCUE1ODQwRTI3MTg3Qzk4MUUwMDg0M0IxMCAvKiBjc3NtaW4u
cHkgaW4gSGVhZGVycyAqLywKKwkJCQlDNDcwM0NEMzE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJh
dGVfdHlwZV9idWlsZGVyX2hlYWRlci5weSBpbiBIZWFkZXJzICovLAorCQkJCUM0NzAzQ0QyMTky
ODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0ZV9mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0
aW9uLnB5IGluIEhlYWRlcnMgKi8sCisJCQkJQzQ3MDNDRDExOTI4NDRDQzAwMTNGQkVBIC8qIGdl
bmVyYXRlX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5IGluIEhlYWRlcnMgKi8sCisJCQkJ
QzQ3MDNDRDUxOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRvcl90ZW1wbGF0ZXMucHkgaW4gSGVh
ZGVycyAqLywKKwkJCQlDNDcwM0NENjE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJhdG9yLnB5IGlu
IEhlYWRlcnMgKi8sCisJCQkJQzQ3MDNDQ0YxOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRlX2Jh
Y2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkgaW4gSGVhZGVycyAqLywKKwkJCQlDNDcwM0NDMDE5
Mjg0NDk2MDAxM0ZCRUEgLyogZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
IGluIEhlYWRlcnMgKi8sCisJCQkJQzQ3MDNDRDAxOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRl
X2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSBpbiBIZWFkZXJzICovLAorCQkJ
CUM0NzAzQ0NFMTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0ZV9iYWNrZW5kX2NvbW1hbmRzLnB5
IGluIEhlYWRlcnMgKi8sCisJCQkJQzQ3MDNDRDQxOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRl
X3R5cGVfYnVpbGRlcl9pbXBsZW1lbnRhdGlvbi5weSBpbiBIZWFkZXJzICovLAorCQkJCUM0NzAz
Q0Q3MTkyODQ0Q0MwMDEzRkJFQSAvKiBtb2RlbHMucHkgaW4gSGVhZGVycyAqLywKIAkJCQkyQUFD
RTYzRDE4Q0E1QTAzMDBFRDAxOTEgLyogR0NBY3Rpdml0eUNhbGxiYWNrLmggaW4gSGVhZGVycyAq
LywKIAkJCQkyQTgzNjM4NjE4RDdEMEVFMDAwMEVCQ0MgLyogRWRlbkdDQWN0aXZpdHlDYWxsYmFj
ay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkE4MzYzOEExOEQ3RDBGRTAwMDBFQkNDIC8qIEZ1bGxH
Q0FjdGl2aXR5Q2FsbGJhY2suaCBpbiBIZWFkZXJzICovLApAQCAtNTU1Nyw4ICs1NjA3LDYgQEAK
IAkJCQkwRkQ4QTMxNDE3RDQzMjZDMDBDQTJDNDAgLyogQ29kZUJsb2NrU2V0LmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjk2RUJCMzE2Njc2RUY2MDA4QkFERTMgLyogQ29kZUJsb2NrV2l0aEpJVFR5
cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3N0YxODIyMTY0MDg4QjIwMDY0MEE0NyAvKiBDb2Rl
Q2FjaGUuaCBpbiBIZWFkZXJzICovLAotCQkJCUE1MzI0MzkyMTg1Njk3MDkwMDJFRDY5MiAvKiBD
b2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5IGluIEhlYWRlcnMgKi8sCi0JCQkJQTUzMjQzOTMxODU2
OTcwOTAwMkVENjkyIC8qIENvZGVHZW5lcmF0b3JJbnNwZWN0b3JTdHJpbmdzLnB5IGluIEhlYWRl
cnMgKi8sCiAJCQkJODZFMTE2QjEwRkU3NUFDODAwQjUxMkJDIC8qIENvZGVMb2NhdGlvbi5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEZCRDdFNjkxNDQ3OTk5NjAwNDgxMzE1IC8qIENvZGVPcmlnaW4u
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjFDMjdEMTRCRTcyN0EwMEFEQzY0QiAvKiBDb2RlU3Bl
Y2lhbGl6YXRpb25LaW5kLmggaW4gSGVhZGVycyAqLywKQEAgLTU1ODksNyArNTYzNyw2IEBACiAJ
CQkJQzIxOEQxNDAxNjU1Q0ZENTAwNjJCQjgxIC8qIENvcHlXb3JrTGlzdC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMkE2ODI5NUIxODc1RjgwNTAwQjZDM0UyIC8qIENvcHlXcml0ZUJhcnJpZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCTVERTZFNUIzMEUxNzI4RUMwMDE4MDQwNyAvKiBjcmVhdGVfaGFz
aF90YWJsZSBpbiBIZWFkZXJzICovLAotCQkJCUE1ODQwRTI3MTg3Qzk4MUUwMDg0M0IxMCAvKiBj
c3NtaW4ucHkgaW4gSGVhZGVycyAqLywKIAkJCQkwRjQyNkE0QjE0NjBDRDZFMDAxMzFGOEYgLyog
RGF0YUZvcm1hdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2REYxN0I2QjVBQjAwQTdBRTNG
IC8qIERhdGFWaWV3LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0QyMDM0QTBFMTcxMzVFMDAyQzdF
ODIgLyogRGF0ZUNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKQEAgLTU4MjYsNyArNTg3Myw2
IEBACiAJCQkJMEYyQjY2QUYxN0I2QjU0NTAwQTdBRTNGIC8qIEdDSW5jb21pbmdSZWZDb3VudGVk
U2V0SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzIyMzlEMUIxNjI2MkJERDAwNUFDNUZE
IC8qIEdDVGhyZWFkLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMjExMjJFMjE1REQ5QUIzMDA3OTBF
M0EgLyogR0NUaHJlYWRTaGFyZWREYXRhLmggaW4gSGVhZGVycyAqLywKLQkJCQlBNTMyNDM5NDE4
NTY5NzA5MDAyRUQ2OTIgLyogZ2VuZXJhdGUtY29tYmluZWQtaW5zcGVjdG9yLWpzb24ucHkgaW4g
SGVhZGVycyAqLywKIAkJCQkwRjJCNjZFMDE3QjZCNUFCMDBBN0FFM0YgLyogR2VuZXJpY1R5cGVk
QXJyYXlWaWV3LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjFGRTUxQzE5MjJBM0JDMDA2OTg3QzUg
LyogQWJvcnRSZWFzb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NkUxMTdCNkI1QUIwMEE3
QUUzRiAvKiBHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvQ29uc29sZU1lc3NhZ2Uu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9Db25zb2xlTWVzc2FnZS5jcHAK
aW5kZXggNDA3OTBiZjVkOWU1OTFiZTBlMzVmNjJhNDUxODc4YmNkNTcyYzdmNi4uMDIwM2JjMWE5
ZjczNmI0OGZjMjFlYzExYzhlM2I0OTUwOWQxMDk1OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9Db25zb2xlTWVzc2FnZS5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9Db25zb2xlTWVzc2FnZS5jcHAKQEAgLTEzMSw3ICsxMzEsNyBA
QCB2b2lkIENvbnNvbGVNZXNzYWdlOjphdXRvZ2VuZXJhdGVNZXRhZGF0YShKU0M6OkV4ZWNTdGF0
ZSogc3RhdGUpCiAgICAgfQogfQogCi1zdGF0aWMgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q29u
c29sZTo6Q29uc29sZU1lc3NhZ2U6OlNvdXJjZTo6RW51bSBtZXNzYWdlU291cmNlVmFsdWUoTWVz
c2FnZVNvdXJjZSBzb3VyY2UpCitzdGF0aWMgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q29uc29s
ZTo6Q29uc29sZU1lc3NhZ2U6OlNvdXJjZSBtZXNzYWdlU291cmNlVmFsdWUoTWVzc2FnZVNvdXJj
ZSBzb3VyY2UpCiB7CiAgICAgc3dpdGNoIChzb3VyY2UpIHsKICAgICBjYXNlIE1lc3NhZ2VTb3Vy
Y2U6OlhNTDogcmV0dXJuIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNvbnNvbGU6OkNvbnNvbGVN
ZXNzYWdlOjpTb3VyY2U6OlhNTDsKQEAgLTE0OCw3ICsxNDgsNyBAQCBzdGF0aWMgSW5zcGVjdG9y
OjpUeXBlQnVpbGRlcjo6Q29uc29sZTo6Q29uc29sZU1lc3NhZ2U6OlNvdXJjZTo6RW51bSBtZXNz
YWdlU291cgogICAgIHJldHVybiBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDb25zb2xlOjpDb25z
b2xlTWVzc2FnZTo6U291cmNlOjpPdGhlcjsKIH0KIAotc3RhdGljIEluc3BlY3Rvcjo6VHlwZUJ1
aWxkZXI6OkNvbnNvbGU6OkNvbnNvbGVNZXNzYWdlOjpUeXBlOjpFbnVtIG1lc3NhZ2VUeXBlVmFs
dWUoTWVzc2FnZVR5cGUgdHlwZSkKK3N0YXRpYyBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDb25z
b2xlOjpDb25zb2xlTWVzc2FnZTo6VHlwZSBtZXNzYWdlVHlwZVZhbHVlKE1lc3NhZ2VUeXBlIHR5
cGUpCiB7CiAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgY2FzZSBNZXNzYWdlVHlwZTo6TG9nOiBy
ZXR1cm4gSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q29uc29sZTo6Q29uc29sZU1lc3NhZ2U6OlR5
cGU6OkxvZzsKQEAgLTE2OCw3ICsxNjgsNyBAQCBzdGF0aWMgSW5zcGVjdG9yOjpUeXBlQnVpbGRl
cjo6Q29uc29sZTo6Q29uc29sZU1lc3NhZ2U6OlR5cGU6OkVudW0gbWVzc2FnZVR5cGVWYQogICAg
IHJldHVybiBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDb25zb2xlOjpDb25zb2xlTWVzc2FnZTo6
VHlwZTo6TG9nOwogfQogCi1zdGF0aWMgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q29uc29sZTo6
Q29uc29sZU1lc3NhZ2U6OkxldmVsOjpFbnVtIG1lc3NhZ2VMZXZlbFZhbHVlKE1lc3NhZ2VMZXZl
bCBsZXZlbCkKK3N0YXRpYyBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDb25zb2xlOjpDb25zb2xl
TWVzc2FnZTo6TGV2ZWwgbWVzc2FnZUxldmVsVmFsdWUoTWVzc2FnZUxldmVsIGxldmVsKQogewog
ICAgIHN3aXRjaCAobGV2ZWwpIHsKICAgICBjYXNlIE1lc3NhZ2VMZXZlbDo6TG9nOiByZXR1cm4g
SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q29uc29sZTo6Q29uc29sZU1lc3NhZ2U6OkxldmVsOjpM
b2c7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luamVjdGVk
U2NyaXB0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3Jp
cHQuY3BwCmluZGV4IDc4NWRhZDBhYzg4ZTRlNzBkOTg1ZjYwOTg4MDVlZGM0NWJhZjY4ZjEuLmU1
YTI2MjJkZGViMTQ1MmZlOTJiY2E0NmE4MDQ1OWI5OWJhZDQwOGEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHQuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHQuY3BwCkBAIC0xMDAsMTMg
KzEwMCwxMyBAQCB2b2lkIEluamVjdGVkU2NyaXB0OjpnZXRGdW5jdGlvbkRldGFpbHMoRXJyb3JT
dHJpbmcqIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmCiAKICAgICBSZWZQdHI8SW5zcGVjdG9y
VmFsdWU+IHJlc3VsdFZhbHVlOwogICAgIG1ha2VDYWxsKGZ1bmN0aW9uLCAmcmVzdWx0VmFsdWUp
OwotICAgIGlmICghcmVzdWx0VmFsdWUgfHwgcmVzdWx0VmFsdWUtPnR5cGUoKSAhPSBJbnNwZWN0
b3JWYWx1ZTo6VHlwZU9iamVjdCkgeworICAgIGlmICghcmVzdWx0VmFsdWUgfHwgcmVzdWx0VmFs
dWUtPnR5cGUoKSAhPSBJbnNwZWN0b3JWYWx1ZTo6VHlwZTo6T2JqZWN0KSB7CiAgICAgICAgIGlm
ICghcmVzdWx0VmFsdWUtPmFzU3RyaW5nKGVycm9yU3RyaW5nKSkKICAgICAgICAgICAgICplcnJv
clN0cmluZyA9IEFTQ0lJTGl0ZXJhbCgiSW50ZXJuYWwgZXJyb3IiKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgICpyZXN1bHQgPSBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpEZWJ1Z2dl
cjo6RnVuY3Rpb25EZXRhaWxzOjpydW50aW1lQ2FzdChyZXN1bHRWYWx1ZSk7CisgICAgKnJlc3Vs
dCA9IEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6RGVidWdnZXI6OkZ1bmN0
aW9uRGV0YWlscz46OnJ1bnRpbWVDYXN0KHJlc3VsdFZhbHVlKTsKIH0KIAogdm9pZCBJbmplY3Rl
ZFNjcmlwdDo6Z2V0UHJvcGVydGllcyhFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGNvbnN0IFN0
cmluZyYgb2JqZWN0SWQsIGJvb2wgb3duUHJvcGVydGllcywgUmVmUHRyPEFycmF5PEluc3BlY3Rv
cjo6VHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OlByb3BlcnR5RGVzY3JpcHRvcj4+KiBwcm9wZXJ0aWVz
KQpAQCAtMTE3LDEyICsxMTcsMTIgQEAgdm9pZCBJbmplY3RlZFNjcmlwdDo6Z2V0UHJvcGVydGll
cyhFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgb2JqZWMKIAogICAgIFJl
ZlB0cjxJbnNwZWN0b3JWYWx1ZT4gcmVzdWx0OwogICAgIG1ha2VDYWxsKGZ1bmN0aW9uLCAmcmVz
dWx0KTsKLSAgICBpZiAoIXJlc3VsdCB8fCByZXN1bHQtPnR5cGUoKSAhPSBJbnNwZWN0b3JWYWx1
ZTo6VHlwZUFycmF5KSB7CisgICAgaWYgKCFyZXN1bHQgfHwgcmVzdWx0LT50eXBlKCkgIT0gSW5z
cGVjdG9yVmFsdWU6OlR5cGU6OkFycmF5KSB7CiAgICAgICAgICplcnJvclN0cmluZyA9IEFTQ0lJ
TGl0ZXJhbCgiSW50ZXJuYWwgZXJyb3IiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
ICpwcm9wZXJ0aWVzID0gQXJyYXk8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UnVudGltZTo6UHJv
cGVydHlEZXNjcmlwdG9yPjo6cnVudGltZUNhc3QocmVzdWx0KTsKKyAgICAqcHJvcGVydGllcyA9
IEJpbmRpbmdUcmFpdHM8QXJyYXk8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UnVudGltZTo6UHJv
cGVydHlEZXNjcmlwdG9yPj46OnJ1bnRpbWVDYXN0KHJlc3VsdCk7CiB9CiAKIHZvaWQgSW5qZWN0
ZWRTY3JpcHQ6OmdldEludGVybmFsUHJvcGVydGllcyhFcnJvclN0cmluZyogZXJyb3JTdHJpbmcs
IGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsIFJlZlB0cjxBcnJheTxJbnNwZWN0b3I6OlR5cGVCdWls
ZGVyOjpSdW50aW1lOjpJbnRlcm5hbFByb3BlcnR5RGVzY3JpcHRvcj4+KiBwcm9wZXJ0aWVzKQpA
QCAtMTMyLDEyICsxMzIsMTIgQEAgdm9pZCBJbmplY3RlZFNjcmlwdDo6Z2V0SW50ZXJuYWxQcm9w
ZXJ0aWVzKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgY29uc3QgU3RyaW4KIAogICAgIFJlZlB0
cjxJbnNwZWN0b3JWYWx1ZT4gcmVzdWx0OwogICAgIG1ha2VDYWxsKGZ1bmN0aW9uLCAmcmVzdWx0
KTsKLSAgICBpZiAoIXJlc3VsdCB8fCByZXN1bHQtPnR5cGUoKSAhPSBJbnNwZWN0b3JWYWx1ZTo6
VHlwZUFycmF5KSB7CisgICAgaWYgKCFyZXN1bHQgfHwgcmVzdWx0LT50eXBlKCkgIT0gSW5zcGVj
dG9yVmFsdWU6OlR5cGU6OkFycmF5KSB7CiAgICAgICAgICplcnJvclN0cmluZyA9IEFTQ0lJTGl0
ZXJhbCgiSW50ZXJuYWwgZXJyb3IiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFJl
ZlB0cjxBcnJheTxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpSdW50aW1lOjpJbnRlcm5hbFByb3Bl
cnR5RGVzY3JpcHRvcj4+IGFycmF5ID0gQXJyYXk8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UnVu
dGltZTo6SW50ZXJuYWxQcm9wZXJ0eURlc2NyaXB0b3I+OjpydW50aW1lQ2FzdChyZXN1bHQpOwor
ICAgIGF1dG8gYXJyYXkgPSBCaW5kaW5nVHJhaXRzPEFycmF5PEluc3BlY3Rvcjo6VHlwZUJ1aWxk
ZXI6OlJ1bnRpbWU6OkludGVybmFsUHJvcGVydHlEZXNjcmlwdG9yPj46OnJ1bnRpbWVDYXN0KHJl
c3VsdCk7CiAgICAgaWYgKGFycmF5LT5sZW5ndGgoKSA+IDApCiAgICAgICAgICpwcm9wZXJ0aWVz
ID0gYXJyYXk7CiB9CkBAIC0xNTIsOCArMTUyLDggQEAgUGFzc1JlZlB0cjxBcnJheTxJbnNwZWN0
b3I6OlR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6Q2FsbEZyYW1lPj4gSW5qZWN0ZWRTY3JpcHQ6OncK
ICAgICBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSBjYWxsRnJhbWVzVmFsdWUgPSBjYWxsRnVuY3Rp
b25XaXRoRXZhbEVuYWJsZWQoZnVuY3Rpb24sIGhhZEV4Y2VwdGlvbik7CiAgICAgQVNTRVJUKCFo
YWRFeGNlcHRpb24pOwogICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gcmVzdWx0ID0gY2FsbEZy
YW1lc1ZhbHVlLnRvSW5zcGVjdG9yVmFsdWUoc2NyaXB0U3RhdGUoKSk7Ci0gICAgaWYgKHJlc3Vs
dC0+dHlwZSgpID09IEluc3BlY3RvclZhbHVlOjpUeXBlQXJyYXkpCi0gICAgICAgIHJldHVybiBB
cnJheTxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6Q2FsbEZyYW1lPjo6cnVudGlt
ZUNhc3QocmVzdWx0KTsKKyAgICBpZiAocmVzdWx0LT50eXBlKCkgPT0gSW5zcGVjdG9yVmFsdWU6
OlR5cGU6OkFycmF5KQorICAgICAgICByZXR1cm4gQmluZGluZ1RyYWl0czxBcnJheTxJbnNwZWN0
b3I6OlR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6Q2FsbEZyYW1lPj46OnJ1bnRpbWVDYXN0KHJlc3Vs
dCk7CiAKICAgICByZXR1cm4gQXJyYXk8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6RGVidWdnZXI6
OkNhbGxGcmFtZT46OmNyZWF0ZSgpOwogfQpAQCAtMTczLDcgKzE3Myw3IEBAIFBhc3NSZWZQdHI8
SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiBJbmplY3RlZFNj
cmlwdDo6d3JhcE9iCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gcmF3UmVzdWx0ID0gci50b0luc3BlY3RvclZhbHVlKHNjcmlwdFN0YXRlKCkp
LT5hc09iamVjdCgpOwotICAgIHJldHVybiBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpSdW50aW1l
OjpSZW1vdGVPYmplY3Q6OnJ1bnRpbWVDYXN0KHJhd1Jlc3VsdCk7CisgICAgcmV0dXJuIEJpbmRp
bmdUcmFpdHM8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UnVudGltZTo6UmVtb3RlT2JqZWN0Pjo6
cnVudGltZUNhc3QocmF3UmVzdWx0KTsKIH0KIAogUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlR5cGVC
dWlsZGVyOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+IEluamVjdGVkU2NyaXB0Ojp3cmFwVGFibGUo
Y29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIHRhYmxlLCBjb25zdCBEZXByZWNhdGVkOjpT
Y3JpcHRWYWx1ZSYgY29sdW1ucykgY29uc3QKQEAgLTE5Myw3ICsxOTMsNyBAQCBQYXNzUmVmUHRy
PEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4gSW5qZWN0ZWRT
Y3JpcHQ6OndyYXBUYQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IHJhd1Jlc3VsdCA9IHIudG9JbnNwZWN0b3JWYWx1ZShzY3JpcHRTdGF0ZSgp
KS0+YXNPYmplY3QoKTsKLSAgICByZXR1cm4gSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UnVudGlt
ZTo6UmVtb3RlT2JqZWN0OjpydW50aW1lQ2FzdChyYXdSZXN1bHQpOworICAgIHJldHVybiBCaW5k
aW5nVHJhaXRzPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD46
OnJ1bnRpbWVDYXN0KHJhd1Jlc3VsdCk7CiB9CiAKIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIElu
amVjdGVkU2NyaXB0OjpmaW5kT2JqZWN0QnlJZChjb25zdCBTdHJpbmcmIG9iamVjdElkKSBjb25z
dApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNj
cmlwdEJhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNj
cmlwdEJhc2UuY3BwCmluZGV4IGQ5NTYxZTFmNGE3ODZmOTY1NTBlMjJkYWEzNDIzN2VjOTNhZWNm
MWIuLmZlMTBkNmM0YmZiYWZiZjI4NmNjM2E4ZDM1YzljNThkZDU0MjRjMWIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRCYXNlLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0QmFzZS5j
cHAKQEAgLTEyOCw3ICsxMjgsNyBAQCB2b2lkIEluamVjdGVkU2NyaXB0QmFzZTo6bWFrZUV2YWxD
YWxsKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgRGVwcmVjYXRlZDo6U2NyaQogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgaWYgKHJlc3VsdC0+dHlwZSgpID09IEluc3BlY3RvclZhbHVl
OjpUeXBlU3RyaW5nKSB7CisgICAgaWYgKHJlc3VsdC0+dHlwZSgpID09IEluc3BlY3RvclZhbHVl
OjpUeXBlOjpTdHJpbmcpIHsKICAgICAgICAgcmVzdWx0LT5hc1N0cmluZyhlcnJvclN0cmluZyk7
CiAgICAgICAgIEFTU0VSVChlcnJvclN0cmluZy0+bGVuZ3RoKCkpOwogICAgICAgICByZXR1cm47
CkBAIC0xNDcsNyArMTQ3LDcgQEAgdm9pZCBJbmplY3RlZFNjcmlwdEJhc2U6Om1ha2VFdmFsQ2Fs
bChFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIERlcHJlY2F0ZWQ6OlNjcmkKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAotICAgICpvYmplY3RSZXN1bHQgPSBUeXBlQnVpbGRlcjo6UnVudGltZTo6
UmVtb3RlT2JqZWN0OjpydW50aW1lQ2FzdChyZXN1bHRPYmopOworICAgICpvYmplY3RSZXN1bHQg
PSBCaW5kaW5nVHJhaXRzPFR5cGVCdWlsZGVyOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+OjpydW50
aW1lQ2FzdChyZXN1bHRPYmopOwogICAgICp3YXNUaHJvd24gPSB3YXNUaHJvd25WYWw7CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3Jp
cHRNYW5hZ2VyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRT
Y3JpcHRNYW5hZ2VyLmNwcAppbmRleCBlZjBkOWEzNzQ3MzRkMjU2NGVjMGM4MWI2Mzg0ZDZjN2Qw
MzRlYTFkLi40NTE3M2ZjODM3YmFlMGUyMDY0MTdjMzU1MTExOTJlNTQ2NjM4Y2I5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0TWFuYWdl
ci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlw
dE1hbmFnZXIuY3BwCkBAIC05NSw3ICs5NSw3IEBAIGludCBJbmplY3RlZFNjcmlwdE1hbmFnZXI6
OmluamVjdGVkU2NyaXB0SWRGb3IoRXhlY1N0YXRlKiBzY3JpcHRTdGF0ZSkKIEluamVjdGVkU2Ny
aXB0IEluamVjdGVkU2NyaXB0TWFuYWdlcjo6aW5qZWN0ZWRTY3JpcHRGb3JPYmplY3RJZChjb25z
dCBTdHJpbmcmIG9iamVjdElkKQogewogICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gcGFyc2Vk
T2JqZWN0SWQgPSBJbnNwZWN0b3JWYWx1ZTo6cGFyc2VKU09OKG9iamVjdElkKTsKLSAgICBpZiAo
cGFyc2VkT2JqZWN0SWQgJiYgcGFyc2VkT2JqZWN0SWQtPnR5cGUoKSA9PSBJbnNwZWN0b3JWYWx1
ZTo6VHlwZU9iamVjdCkgeworICAgIGlmIChwYXJzZWRPYmplY3RJZCAmJiBwYXJzZWRPYmplY3RJ
ZC0+dHlwZSgpID09IEluc3BlY3RvclZhbHVlOjpUeXBlOjpPYmplY3QpIHsKICAgICAgICAgbG9u
ZyBpbmplY3RlZFNjcmlwdElkID0gMDsKICAgICAgICAgYm9vbCBzdWNjZXNzID0gcGFyc2VkT2Jq
ZWN0SWQtPmFzT2JqZWN0KCktPmdldE51bWJlcihBU0NJSUxpdGVyYWwoImluamVjdGVkU2NyaXB0
SWQiKSwgJmluamVjdGVkU2NyaXB0SWQpOwogICAgICAgICBpZiAoc3VjY2VzcykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVHlwZUJ1aWxkZXIu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVHlwZUJ1aWxkZXIu
aAppbmRleCA4ZWE3NmVjOTBjNjBlMDc3NjE3OTVjMWMxNDc5NTJkNDc4NjhmZTU4Li5iNjcwNzU4
Y2Q4YThkNjM0NzhkZWY0MGM3NWZjNjkwZTdmMTAwMWFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvclR5cGVCdWlsZGVyLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JUeXBlQnVpbGRlci5oCkBAIC02Myw1
NCArNjMsNiBAQCBwcml2YXRlOgogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKE9wdE91dHB1dCk7
CiB9OwogCi0KLS8vIEEgc21hbGwgdHJhbnNpZW50IHdyYXBwZXIgYXJvdW5kIGludCB0eXBlLCB0
aGF0IGNhbiBiZSB1c2VkIGFzIGEgZnVuY2l0b24gcGFyYW1ldGVyIHR5cGUKLS8vIGNsZXZlcmx5
IGRpc2FsbG93aW5nIEMrKyBpbXBsaWNpdCBjYXN0cyBmcm9tIGZsb2F0IG9yIGRvdWJsZS4KLWNs
YXNzIEV4YWN0bHlJbnQgewotcHVibGljOgotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAg
RXhhY3RseUludChUIHQpIDogbV92YWx1ZShjYXN0X3RvX2ludDxUPih0KSkgeyB9Ci0gICAgRXhh
Y3RseUludCgpIHsgfQotCi0gICAgb3BlcmF0b3IgaW50KCkgeyByZXR1cm4gbV92YWx1ZTsgfQot
Ci1wcml2YXRlOgotICAgIGludCBtX3ZhbHVlOwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4K
LSAgICBzdGF0aWMgaW50IGNhc3RfdG9faW50KFQpIHsgcmV0dXJuIFQ6OmRlZmF1bHRfY2FzZV9j
YXN0X2lzX25vdF9zdXBwb3J0ZWQoKTsgfQotfTsKLQotdGVtcGxhdGU8PgotaW5saW5lIGludCBF
eGFjdGx5SW50OjpjYXN0X3RvX2ludDxpbnQ+KGludCBpKSB7IHJldHVybiBpOyB9Ci0KLXRlbXBs
YXRlPD4KLWlubGluZSBpbnQgRXhhY3RseUludDo6Y2FzdF90b19pbnQ8dW5zaWduZWQgaW50Pih1
bnNpZ25lZCBpbnQgaSkgeyByZXR1cm4gaTsgfQotCi0jaWYgIUFTU0VSVF9ESVNBQkxFRAotY2xh
c3MgUnVudGltZUNhc3RIZWxwZXIgewotcHVibGljOgotICAgIHRlbXBsYXRlPEluc3BlY3RvclZh
bHVlOjpUeXBlIFRZUEU+Ci0gICAgc3RhdGljIHZvaWQgYXNzZXJ0VHlwZShJbnNwZWN0b3JWYWx1
ZSogdmFsdWUpCi0gICAgewotICAgICAgICBBU1NFUlQodmFsdWUtPnR5cGUoKSA9PSBUWVBFKTsK
LSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCBhc3NlcnRBbnkoSW5zcGVjdG9yVmFsdWUqKQotICAg
IHsKLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCBhc3NlcnRJbnQoSW5zcGVjdG9yVmFsdWUqIHZh
bHVlKQotICAgIHsKLSAgICAgICAgZG91YmxlIHY7Ci0gICAgICAgIGJvb2wgY2FzdFJlcyA9IHZh
bHVlLT5hc051bWJlcigmdik7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQoY2FzdFJlcywgY2FzdFJl
cyk7Ci0gICAgICAgIEFTU0VSVChzdGF0aWNfY2FzdDxkb3VibGU+KHN0YXRpY19jYXN0PGludD4o
dikpID09IHYpOwotICAgIH0KLX07Ci0jZW5kaWYKLQotCiAvLyBUaGlzIGNsYXNzIHByb3ZpZGVz
ICJUcmFpdHMiIHR5cGUgZm9yIHRoZSBpbnB1dCB0eXBlIFQuIEl0IGlzIHByb2dyYW1tZWQgdXNp
bmcgQysrIHRlbXBsYXRlIHNwZWNpYWxpemF0aW9uCiAvLyB0ZWNobmlxdWUuIEJ5IGRlZmF1bHQg
aXQgc2ltcGx5IHRha2VzICJJdGVtVHJhaXRzIiB0eXBlIGZyb20gVCwgYnV0IGl0IGRvZXNuJ3Qg
d29yayB3aXRoIHRoZSBiYXNlIHR5cGVzLgogdGVtcGxhdGU8dHlwZW5hbWUgVD4KQEAgLTE0NCwy
OSArOTYsNiBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEFy
cmF5PFQ+KCkpOwogICAgIH0KLQotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEFycmF5PFQ+PiBydW50
aW1lQ2FzdChQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiB2YWx1ZSkKLSAgICB7Ci0gICAgICAg
IFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJyYXk7Ci0gICAgICAgIGJvb2wgY2FzdFJlcyA9IHZh
bHVlLT5hc0FycmF5KCZhcnJheSk7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQoY2FzdFJlcywgY2Fz
dFJlcyk7Ci0jaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgICAgICBhc3NlcnRDb3JyZWN0VmFsdWUo
YXJyYXkuZ2V0KCkpOwotI2VuZGlmIC8vICFBU1NFUlRfRElTQUJMRUQKLSAgICAgICAgQ09NUElM
RV9BU1NFUlQoc2l6ZW9mKEFycmF5PFQ+KSA9PSBzaXplb2YoSW5zcGVjdG9yQXJyYXkpLCB0eXBl
X2Nhc3RfcHJvYmxlbSk7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxBcnJheTxUPio+KHN0
YXRpY19jYXN0PEluc3BlY3RvckFycmF5QmFzZSo+KGFycmF5LmdldCgpKSk7Ci0gICAgfQotCi0j
aWYgIUFTU0VSVF9ESVNBQkxFRAotICAgIHN0YXRpYyB2b2lkIGFzc2VydENvcnJlY3RWYWx1ZShJ
bnNwZWN0b3JWYWx1ZSogdmFsdWUpCi0gICAgewotICAgICAgICBSZWZQdHI8SW5zcGVjdG9yQXJy
YXk+IGFycmF5OwotICAgICAgICBib29sIGNhc3RSZXMgPSB2YWx1ZS0+YXNBcnJheSgmYXJyYXkp
OwotICAgICAgICBBU1NFUlRfVU5VU0VEKGNhc3RSZXMsIGNhc3RSZXMpOwotICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgYXJyYXktPmxlbmd0aCgpOyBpKyspCi0gICAgICAgICAgICBB
cnJheUl0ZW1IZWxwZXI8VD46OlRyYWl0czo6dGVtcGxhdGUgYXNzZXJ0Q29ycmVjdFZhbHVlPFQ+
KGFycmF5LT5nZXQoaSkuZ2V0KCkpOwotICAgIH0KLSNlbmRpZiAvLyAhQVNTRVJUX0RJU0FCTEVE
CiB9OwogCiBzdHJ1Y3QgU3RydWN0SXRlbVRyYWl0cyB7CkBAIC0xNzQsMTQgKzEwMyw2IEBAIHN0
cnVjdCBTdHJ1Y3RJdGVtVHJhaXRzIHsKICAgICB7CiAgICAgICAgIGFycmF5LT5wdXNoVmFsdWUo
dmFsdWUpOwogICAgIH0KLQotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgotICAgIHN0YXRpYyB2b2lkIGFzc2VydENvcnJlY3RWYWx1ZShJbnNwZWN0b3JWYWx1
ZSogdmFsdWUpCi0gICAgewotICAgICAgICBUOjphc3NlcnRDb3JyZWN0VmFsdWUodmFsdWUpOwot
ICAgIH0KLSNlbmRpZiAvLyAhQVNTRVJUX0RJU0FCTEVECiB9OwogCiB0ZW1wbGF0ZTw+CkBAIC0x
OTEsMTQgKzExMiw2IEBAIHN0cnVjdCBBcnJheUl0ZW1IZWxwZXI8U3RyaW5nPiB7CiAgICAgICAg
IHsKICAgICAgICAgICAgIGFycmF5LT5wdXNoU3RyaW5nKHZhbHVlKTsKICAgICAgICAgfQotCi0j
aWYgIUFTU0VSVF9ESVNBQkxFRAotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgICAg
ICBzdGF0aWMgdm9pZCBhc3NlcnRDb3JyZWN0VmFsdWUoSW5zcGVjdG9yVmFsdWUqIHZhbHVlKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBSdW50aW1lQ2FzdEhlbHBlcjo6YXNzZXJ0VHlwZTxJbnNw
ZWN0b3JWYWx1ZTo6VHlwZVN0cmluZz4odmFsdWUpOwotICAgICAgICB9Ci0jZW5kaWYgLy8gIUFT
U0VSVF9ESVNBQkxFRAogICAgIH07CiB9OwogCkBAIC0yMDksMTQgKzEyMiw2IEBAIHN0cnVjdCBB
cnJheUl0ZW1IZWxwZXI8aW50PiB7CiAgICAgICAgIHsKICAgICAgICAgICAgIGFycmF5LT5wdXNo
SW50KHZhbHVlKTsKICAgICAgICAgfQotCi0jaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgICAgICBzdGF0aWMgdm9pZCBhc3NlcnRDb3JyZWN0VmFs
dWUoSW5zcGVjdG9yVmFsdWUqIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBSdW50aW1l
Q2FzdEhlbHBlcjo6YXNzZXJ0SW50KHZhbHVlKTsKLSAgICAgICAgfQotI2VuZGlmIC8vICFBU1NF
UlRfRElTQUJMRUQKICAgICB9OwogfTsKIApAQCAtMjI3LDE0ICsxMzIsNiBAQCBzdHJ1Y3QgQXJy
YXlJdGVtSGVscGVyPGRvdWJsZT4gewogICAgICAgICB7CiAgICAgICAgICAgICBhcnJheS0+cHVz
aE51bWJlcih2YWx1ZSk7CiAgICAgICAgIH0KLQotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICAgICAgc3RhdGljIHZvaWQgYXNzZXJ0Q29ycmVj
dFZhbHVlKEluc3BlY3RvclZhbHVlKiB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgUnVu
dGltZUNhc3RIZWxwZXI6OmFzc2VydFR5cGU8SW5zcGVjdG9yVmFsdWU6OlR5cGVOdW1iZXI+KHZh
bHVlKTsKLSAgICAgICAgfQotI2VuZGlmIC8vICFBU1NFUlRfRElTQUJMRUQKICAgICB9OwogfTsK
IApAQCAtMjQ1LDE0ICsxNDIsNiBAQCBzdHJ1Y3QgQXJyYXlJdGVtSGVscGVyPGJvb2w+IHsKICAg
ICAgICAgewogICAgICAgICAgICAgYXJyYXktPnB1c2hCb29sZWFuKHZhbHVlKTsKICAgICAgICAg
fQotCi0jaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgot
ICAgICAgICBzdGF0aWMgdm9pZCBhc3NlcnRDb3JyZWN0VmFsdWUoSW5zcGVjdG9yVmFsdWUqIHZh
bHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBSdW50aW1lQ2FzdEhlbHBlcjo6YXNzZXJ0VHlw
ZTxJbnNwZWN0b3JWYWx1ZTo6VHlwZUJvb2xlYW4+KHZhbHVlKTsKLSAgICAgICAgfQotI2VuZGlm
IC8vICFBU1NFUlRfRElTQUJMRUQKICAgICB9OwogfTsKIApAQCAtMjYzLDE0ICsxNTIsNiBAQCBz
dHJ1Y3QgQXJyYXlJdGVtSGVscGVyPEluc3BlY3RvclZhbHVlPiB7CiAgICAgICAgIHsKICAgICAg
ICAgICAgIGFycmF5LT5wdXNoVmFsdWUodmFsdWUpOwogICAgICAgICB9Ci0KLSNpZiAhQVNTRVJU
X0RJU0FCTEVECi0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgICAgIHN0YXRpYyB2
b2lkIGFzc2VydENvcnJlY3RWYWx1ZShJbnNwZWN0b3JWYWx1ZSogdmFsdWUpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIFJ1bnRpbWVDYXN0SGVscGVyOjphc3NlcnRBbnkodmFsdWUpOwotICAgICAg
ICB9Ci0jZW5kaWYgLy8gIUFTU0VSVF9ESVNBQkxFRAogICAgIH07CiB9OwogCkBAIC0yODEsMTQg
KzE2Miw2IEBAIHN0cnVjdCBBcnJheUl0ZW1IZWxwZXI8SW5zcGVjdG9yT2JqZWN0PiB7CiAgICAg
ICAgIHsKICAgICAgICAgICAgIGFycmF5LT5wdXNoVmFsdWUodmFsdWUpOwogICAgICAgICB9Ci0K
LSNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAg
ICAgIHN0YXRpYyB2b2lkIGFzc2VydENvcnJlY3RWYWx1ZShJbnNwZWN0b3JWYWx1ZSogdmFsdWUp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIFJ1bnRpbWVDYXN0SGVscGVyOjphc3NlcnRUeXBlPElu
c3BlY3RvclZhbHVlOjpUeXBlT2JqZWN0Pih2YWx1ZSk7Ci0gICAgICAgIH0KLSNlbmRpZiAvLyAh
QVNTRVJUX0RJU0FCTEVECiAgICAgfTsKIH07CiAKQEAgLTI5OSwxNCArMTcyLDYgQEAgc3RydWN0
IEFycmF5SXRlbUhlbHBlcjxJbnNwZWN0b3JBcnJheT4gewogICAgICAgICB7CiAgICAgICAgICAg
ICBhcnJheS0+cHVzaEFycmF5KHZhbHVlKTsKICAgICAgICAgfQotCi0jaWYgIUFTU0VSVF9ESVNB
QkxFRAotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgICAgICBzdGF0aWMgdm9pZCBh
c3NlcnRDb3JyZWN0VmFsdWUoSW5zcGVjdG9yVmFsdWUqIHZhbHVlKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBSdW50aW1lQ2FzdEhlbHBlcjo6YXNzZXJ0VHlwZTxJbnNwZWN0b3JWYWx1ZTo6VHlw
ZUFycmF5Pih2YWx1ZSk7Ci0gICAgICAgIH0KLSNlbmRpZiAvLyAhQVNTRVJUX0RJU0FCTEVECiAg
ICAgfTsKIH07CiAKQEAgLTMxNywxOSArMTgyLDkyIEBAIHN0cnVjdCBBcnJheUl0ZW1IZWxwZXI8
VHlwZUJ1aWxkZXI6OkFycmF5PFQ+PiB7CiAgICAgICAgIHsKICAgICAgICAgICAgIGFycmF5LT5w
dXNoVmFsdWUodmFsdWUpOwogICAgICAgICB9CisgICAgfTsKK307CisKKy8vIEhlbHBlciBtZXRo
b2RzIGZvciBUeXBlQnVpbGRlciBhbmQgb3RoZXIgSW5zcGVjdG9yIHR5cGVzIGFyZSBwcm92aWRl
ZCBieQorLy8gc3BlY2lhbGl6YXRpb25zIG9mIEJpbmRpbmdUcmFpdHM8VD4uIFNvbWUgYXJlIGdl
bmVyYXRlZCBmb3IgcHJvdG9jb2wgdHlwZXMuCiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1
Y3QgQmluZGluZ1RyYWl0cyB7CisgICAgdHlwZWRlZiBUIEJpbmRpbmdUeXBlOworCisgICAgc3Rh
dGljIEluc3BlY3RvclZhbHVlOjpUeXBlIHR5cGVUYWcoKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0
cjxUPiBydW50aW1lQ2FzdChQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4pOwogI2lmICFBU1NF
UlRfRElTQUJMRUQKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgUz4KLSAgICAgICAgc3RhdGlj
IHZvaWQgYXNzZXJ0Q29ycmVjdFZhbHVlKEluc3BlY3RvclZhbHVlKiB2YWx1ZSkKLSAgICAgICAg
ewotICAgICAgICAgICAgUzo6YXNzZXJ0Q29ycmVjdFZhbHVlKHZhbHVlKTsKLSAgICAgICAgfQor
ICAgIHN0YXRpYyB2b2lkIGFzc2VydENvcnJlY3RWYWx1ZShJbnNwZWN0b3JWYWx1ZSogdmFsdWUp
OworI2VuZGlmIC8vICFBU1NFUlRfRElTQUJMRUQKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQs
IEluc3BlY3RvclZhbHVlOjpUeXBlIFRZUEU+CitzdHJ1Y3QgUHJpbWl0aXZlQmluZGluZ1RyYWl0
cyB7CisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgIHN0YXRpYyB2b2lkIGFzc2VydENvcnJlY3RW
YWx1ZShJbnNwZWN0b3JWYWx1ZSogdmFsdWUpCisgICAgeworICAgICAgICBBU1NFUlQodmFsdWUt
PnR5cGUoKSA9PSBUWVBFKTsKKyAgICB9CisgICAgI2VuZGlmIC8vICFBU1NFUlRfRElTQUJMRUQK
K307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgQmluZGluZ1RyYWl0czxUeXBlQnVp
bGRlcjo6QXJyYXk8VD4+IHsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxBcnJheTxUPj4gcnVudGlt
ZUNhc3QoUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gdmFsdWUpCisgICAgeworICAgICAgICBS
ZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFycmF5OworICAgICAgICBib29sIGNhc3RSZXMgPSB2YWx1
ZS0+YXNBcnJheSgmYXJyYXkpOworICAgICAgICBBU1NFUlRfVU5VU0VEKGNhc3RSZXMsIGNhc3RS
ZXMpOworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICAgICAgYXNzZXJ0Q29ycmVjdFZhbHVlKGFy
cmF5LmdldCgpKTsKKyNlbmRpZiAvLyAhQVNTRVJUX0RJU0FCTEVECisgICAgICAgIENPTVBJTEVf
QVNTRVJUKHNpemVvZihBcnJheTxUPikgPT0gc2l6ZW9mKEluc3BlY3RvckFycmF5KSwgdHlwZV9j
YXN0X3Byb2JsZW0pOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QXJyYXk8VD4qPihzdGF0
aWNfY2FzdDxJbnNwZWN0b3JBcnJheUJhc2UqPihhcnJheS5nZXQoKSkpOworICAgIH0KKworI2lm
ICFBU1NFUlRfRElTQUJMRUQKKyAgICBzdGF0aWMgdm9pZCBhc3NlcnRDb3JyZWN0VmFsdWUoSW5z
cGVjdG9yVmFsdWUqIHZhbHVlKQorICAgIHsKKyAgICAgICAgUmVmUHRyPEluc3BlY3RvckFycmF5
PiBhcnJheTsKKyAgICAgICAgYm9vbCBjYXN0UmVzID0gdmFsdWUtPmFzQXJyYXkoJmFycmF5KTsK
KyAgICAgICAgQVNTRVJUX1VOVVNFRChjYXN0UmVzLCBjYXN0UmVzKTsKKyAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGFycmF5LT5sZW5ndGgoKTsgaSsrKQorICAgICAgICAgICAgQmlu
ZGluZ1RyYWl0czxUPjo6YXNzZXJ0Q29ycmVjdFZhbHVlKGFycmF5LT5nZXQoaSkuZ2V0KCkpOwor
ICAgIH0KKyNlbmRpZiAvLyAhQVNTRVJUX0RJU0FCTEVECit9OworCit0ZW1wbGF0ZTw+CitzdHJ1
Y3QgQmluZGluZ1RyYWl0czxJbnNwZWN0b3JWYWx1ZT4geworI2lmICFBU1NFUlRfRElTQUJMRUQK
KyAgICBzdGF0aWMgdm9pZCBhc3NlcnRDb3JyZWN0VmFsdWUoSW5zcGVjdG9yVmFsdWUqKQorICAg
IHsKKyAgICB9CisjZW5kaWYgLy8gIUFTU0VSVF9ESVNBQkxFRAorfTsKKwordGVtcGxhdGU8PiBz
dHJ1Y3QgQmluZGluZ1RyYWl0czxJbnNwZWN0b3JBcnJheT4gOiBwdWJsaWMgUHJpbWl0aXZlQmlu
ZGluZ1RyYWl0czxJbnNwZWN0b3JBcnJheSwgSW5zcGVjdG9yVmFsdWU6OlR5cGU6OkFycmF5PiB7
IH07Cit0ZW1wbGF0ZTw+IHN0cnVjdCBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvck9iamVjdD4gOiBw
dWJsaWMgUHJpbWl0aXZlQmluZGluZ1RyYWl0czxJbnNwZWN0b3JPYmplY3QsIEluc3BlY3RvclZh
bHVlOjpUeXBlOjpPYmplY3Q+IHsgfTsKK3RlbXBsYXRlPD4gc3RydWN0IEJpbmRpbmdUcmFpdHM8
U3RyaW5nPiA6IHB1YmxpYyBQcmltaXRpdmVCaW5kaW5nVHJhaXRzPFN0cmluZywgSW5zcGVjdG9y
VmFsdWU6OlR5cGU6OlN0cmluZz4geyB9OwordGVtcGxhdGU8PiBzdHJ1Y3QgQmluZGluZ1RyYWl0
czxib29sPiA6IHB1YmxpYyBQcmltaXRpdmVCaW5kaW5nVHJhaXRzPGJvb2wsIEluc3BlY3RvclZh
bHVlOjpUeXBlOjpCb29sZWFuPiB7IH07Cit0ZW1wbGF0ZTw+IHN0cnVjdCBCaW5kaW5nVHJhaXRz
PGRvdWJsZT4gOiBwdWJsaWMgUHJpbWl0aXZlQmluZGluZ1RyYWl0czxkb3VibGUsIEluc3BlY3Rv
clZhbHVlOjpUeXBlOjpOdW1iZXI+IHsgfTsKKworLy8gRklYTUU6IEFkZCBhbiBJbnNwZWN0b3I6
OlR5cGUgdGFnIGZvciBpbnQgc28gd2UgY2FuIHJlbW92ZSB0aGlzIHNwZWNpYWwgY2FzZS4KK3Rl
bXBsYXRlPD4KK3N0cnVjdCBCaW5kaW5nVHJhaXRzPGludD4geworI2lmICFBU1NFUlRfRElTQUJM
RUQKKyAgICBzdGF0aWMgdm9pZCBhc3NlcnRDb3JyZWN0VmFsdWUoSW5zcGVjdG9yVmFsdWUqIHZh
bHVlKQorICAgIHsKKyAgICAgICAgZG91YmxlIHY7CisgICAgICAgIGJvb2wgY2FzdFJlcyA9IHZh
bHVlLT5hc051bWJlcigmdik7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoY2FzdFJlcywgY2FzdFJl
cyk7CisgICAgICAgIEFTU0VSVChzdGF0aWNfY2FzdDxkb3VibGU+KHN0YXRpY19jYXN0PGludD4o
dikpID09IHYpOworICAgIH0KICNlbmRpZiAvLyAhQVNTRVJUX0RJU0FCTEVECi0gICAgfTsKIH07
CiAKIH0gLy8gbmFtZXNwYWNlIFR5cGVCdWlsZGVyCiAKK3VzaW5nIFR5cGVCdWlsZGVyOjpCaW5k
aW5nVHJhaXRzOworCiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKIAogI2VuZGlmIC8vIEVOQUJM
RShJTlNQRUNUT1IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L0luc3BlY3RvclZhbHVlcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvclZhbHVlcy5jcHAKaW5kZXggMTkyZmI2YzlkOTA5MjRlNjE3YzVkMzJjNWQyZTNiYjlm
Y2NkM2UxYS4uZTJkMDM1ZGMwOWExYmJkODVmMTdhYTAxMDhlMjAxODYxNWY5YTJkNSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmNw
cApAQCAtNTc5LDEzICs1NzksMTMgQEAgU3RyaW5nIEluc3BlY3RvclZhbHVlOjp0b0pTT05TdHJp
bmcoKSBjb25zdAogCiB2b2lkIEluc3BlY3RvclZhbHVlOjp3cml0ZUpTT04oU3RyaW5nQnVpbGRl
ciogb3V0cHV0KSBjb25zdAogewotICAgIEFTU0VSVChtX3R5cGUgPT0gVHlwZU51bGwpOworICAg
IEFTU0VSVChtX3R5cGUgPT0gVHlwZTo6TnVsbCk7CiAgICAgb3V0cHV0LT5hcHBlbmQobnVsbFN0
cmluZywgNCk7CiB9CiAKIGJvb2wgSW5zcGVjdG9yQmFzaWNWYWx1ZTo6YXNCb29sZWFuKGJvb2wq
IG91dHB1dCkgY29uc3QKIHsKLSAgICBpZiAodHlwZSgpICE9IFR5cGVCb29sZWFuKQorICAgIGlm
ICh0eXBlKCkgIT0gVHlwZTo6Qm9vbGVhbikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICpv
dXRwdXQgPSBtX2Jvb2xWYWx1ZTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTU5Myw3ICs1OTMsNyBA
QCBib29sIEluc3BlY3RvckJhc2ljVmFsdWU6OmFzQm9vbGVhbihib29sKiBvdXRwdXQpIGNvbnN0
CiAKIGJvb2wgSW5zcGVjdG9yQmFzaWNWYWx1ZTo6YXNOdW1iZXIoZG91YmxlKiBvdXRwdXQpIGNv
bnN0CiB7Ci0gICAgaWYgKHR5cGUoKSAhPSBUeXBlTnVtYmVyKQorICAgIGlmICh0eXBlKCkgIT0g
VHlwZTo6TnVtYmVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgKm91dHB1dCA9IG1fZG91
YmxlVmFsdWU7CiAgICAgcmV0dXJuIHRydWU7CkBAIC02MDEsNyArNjAxLDcgQEAgYm9vbCBJbnNw
ZWN0b3JCYXNpY1ZhbHVlOjphc051bWJlcihkb3VibGUqIG91dHB1dCkgY29uc3QKIAogYm9vbCBJ
bnNwZWN0b3JCYXNpY1ZhbHVlOjphc051bWJlcihmbG9hdCogb3V0cHV0KSBjb25zdAogewotICAg
IGlmICh0eXBlKCkgIT0gVHlwZU51bWJlcikKKyAgICBpZiAodHlwZSgpICE9IFR5cGU6Ok51bWJl
cikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICpvdXRwdXQgPSBzdGF0aWNfY2FzdDxmbG9h
dD4obV9kb3VibGVWYWx1ZSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC02MDksNyArNjA5LDcgQEAg
Ym9vbCBJbnNwZWN0b3JCYXNpY1ZhbHVlOjphc051bWJlcihmbG9hdCogb3V0cHV0KSBjb25zdAog
CiBib29sIEluc3BlY3RvckJhc2ljVmFsdWU6OmFzTnVtYmVyKGludCogb3V0cHV0KSBjb25zdAog
ewotICAgIGlmICh0eXBlKCkgIT0gVHlwZU51bWJlcikKKyAgICBpZiAodHlwZSgpICE9IFR5cGU6
Ok51bWJlcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICpvdXRwdXQgPSBzdGF0aWNfY2Fz
dDxpbnQ+KG1fZG91YmxlVmFsdWUpOwogICAgIHJldHVybiB0cnVlOwpAQCAtNjE3LDcgKzYxNyw3
IEBAIGJvb2wgSW5zcGVjdG9yQmFzaWNWYWx1ZTo6YXNOdW1iZXIoaW50KiBvdXRwdXQpIGNvbnN0
CiAKIGJvb2wgSW5zcGVjdG9yQmFzaWNWYWx1ZTo6YXNOdW1iZXIodW5zaWduZWQqIG91dHB1dCkg
Y29uc3QKIHsKLSAgICBpZiAodHlwZSgpICE9IFR5cGVOdW1iZXIpCisgICAgaWYgKHR5cGUoKSAh
PSBUeXBlOjpOdW1iZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAqb3V0cHV0ID0gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KG1fZG91YmxlVmFsdWUpOwogICAgIHJldHVybiB0cnVlOwpAQCAt
NjI1LDcgKzYyNSw3IEBAIGJvb2wgSW5zcGVjdG9yQmFzaWNWYWx1ZTo6YXNOdW1iZXIodW5zaWdu
ZWQqIG91dHB1dCkgY29uc3QKIAogYm9vbCBJbnNwZWN0b3JCYXNpY1ZhbHVlOjphc051bWJlcihs
b25nKiBvdXRwdXQpIGNvbnN0CiB7Ci0gICAgaWYgKHR5cGUoKSAhPSBUeXBlTnVtYmVyKQorICAg
IGlmICh0eXBlKCkgIT0gVHlwZTo6TnVtYmVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
Km91dHB1dCA9IHN0YXRpY19jYXN0PGxvbmc+KG1fZG91YmxlVmFsdWUpOwogICAgIHJldHVybiB0
cnVlOwpAQCAtNjMzLDcgKzYzMyw3IEBAIGJvb2wgSW5zcGVjdG9yQmFzaWNWYWx1ZTo6YXNOdW1i
ZXIobG9uZyogb3V0cHV0KSBjb25zdAogCiBib29sIEluc3BlY3RvckJhc2ljVmFsdWU6OmFzTnVt
YmVyKGxvbmcgbG9uZyogb3V0cHV0KSBjb25zdAogewotICAgIGlmICh0eXBlKCkgIT0gVHlwZU51
bWJlcikKKyAgICBpZiAodHlwZSgpICE9IFR5cGU6Ok51bWJlcikKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICpvdXRwdXQgPSBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KG1fZG91YmxlVmFsdWUp
OwogICAgIHJldHVybiB0cnVlOwpAQCAtNjQxLDcgKzY0MSw3IEBAIGJvb2wgSW5zcGVjdG9yQmFz
aWNWYWx1ZTo6YXNOdW1iZXIobG9uZyBsb25nKiBvdXRwdXQpIGNvbnN0CiAKIGJvb2wgSW5zcGVj
dG9yQmFzaWNWYWx1ZTo6YXNOdW1iZXIodW5zaWduZWQgbG9uZyogb3V0cHV0KSBjb25zdAogewot
ICAgIGlmICh0eXBlKCkgIT0gVHlwZU51bWJlcikKKyAgICBpZiAodHlwZSgpICE9IFR5cGU6Ok51
bWJlcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICpvdXRwdXQgPSBzdGF0aWNfY2FzdDx1
bnNpZ25lZCBsb25nPihtX2RvdWJsZVZhbHVlKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTY0OSw3
ICs2NDksNyBAQCBib29sIEluc3BlY3RvckJhc2ljVmFsdWU6OmFzTnVtYmVyKHVuc2lnbmVkIGxv
bmcqIG91dHB1dCkgY29uc3QKIAogYm9vbCBJbnNwZWN0b3JCYXNpY1ZhbHVlOjphc051bWJlcih1
bnNpZ25lZCBsb25nIGxvbmcqIG91dHB1dCkgY29uc3QKIHsKLSAgICBpZiAodHlwZSgpICE9IFR5
cGVOdW1iZXIpCisgICAgaWYgKHR5cGUoKSAhPSBUeXBlOjpOdW1iZXIpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAqb3V0cHV0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPiht
X2RvdWJsZVZhbHVlKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTY1NywxMyArNjU3LDEzIEBAIGJv
b2wgSW5zcGVjdG9yQmFzaWNWYWx1ZTo6YXNOdW1iZXIodW5zaWduZWQgbG9uZyBsb25nKiBvdXRw
dXQpIGNvbnN0CiAKIHZvaWQgSW5zcGVjdG9yQmFzaWNWYWx1ZTo6d3JpdGVKU09OKFN0cmluZ0J1
aWxkZXIqIG91dHB1dCkgY29uc3QKIHsKLSAgICBBU1NFUlQodHlwZSgpID09IFR5cGVCb29sZWFu
IHx8IHR5cGUoKSA9PSBUeXBlTnVtYmVyKTsKLSAgICBpZiAodHlwZSgpID09IFR5cGVCb29sZWFu
KSB7CisgICAgQVNTRVJUKHR5cGUoKSA9PSBUeXBlOjpCb29sZWFuIHx8IHR5cGUoKSA9PSBUeXBl
OjpOdW1iZXIpOworICAgIGlmICh0eXBlKCkgPT0gVHlwZTo6Qm9vbGVhbikgewogICAgICAgICBp
ZiAobV9ib29sVmFsdWUpCiAgICAgICAgICAgICBvdXRwdXQtPmFwcGVuZCh0cnVlU3RyaW5nLCA0
KTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgb3V0cHV0LT5hcHBlbmQoZmFsc2VTdHJpbmcs
IDUpOwotICAgIH0gZWxzZSBpZiAodHlwZSgpID09IFR5cGVOdW1iZXIpIHsKKyAgICB9IGVsc2Ug
aWYgKHR5cGUoKSA9PSBUeXBlOjpOdW1iZXIpIHsKICAgICAgICAgTnVtYmVyVG9MU3RyaW5nQnVm
ZmVyIGJ1ZmZlcjsKICAgICAgICAgaWYgKCFzdGQ6OmlzZmluaXRlKG1fZG91YmxlVmFsdWUpKSB7
CiAgICAgICAgICAgICBvdXRwdXQtPmFwcGVuZChudWxsU3RyaW5nLCA0KTsKQEAgLTY5Myw3ICs2
OTMsNyBAQCBib29sIEluc3BlY3RvclN0cmluZzo6YXNTdHJpbmcoU3RyaW5nKiBvdXRwdXQpIGNv
bnN0CiAKIHZvaWQgSW5zcGVjdG9yU3RyaW5nOjp3cml0ZUpTT04oU3RyaW5nQnVpbGRlciogb3V0
cHV0KSBjb25zdAogewotICAgIEFTU0VSVCh0eXBlKCkgPT0gVHlwZVN0cmluZyk7CisgICAgQVNT
RVJUKHR5cGUoKSA9PSBUeXBlOjpTdHJpbmcpOwogICAgIGRvdWJsZVF1b3RlU3RyaW5nKG1fc3Ry
aW5nVmFsdWUsIG91dHB1dCk7CiB9CiAKQEAgLTc4Niw3ICs3ODYsNyBAQCB2b2lkIEluc3BlY3Rv
ck9iamVjdEJhc2U6OndyaXRlSlNPTihTdHJpbmdCdWlsZGVyKiBvdXRwdXQpIGNvbnN0CiB9CiAK
IEluc3BlY3Rvck9iamVjdEJhc2U6Okluc3BlY3Rvck9iamVjdEJhc2UoKQotICAgIDogSW5zcGVj
dG9yVmFsdWUoVHlwZU9iamVjdCkKKyAgICA6IEluc3BlY3RvclZhbHVlKFR5cGU6Ok9iamVjdCkK
ICAgICAsIG1fZGF0YSgpCiAgICAgLCBtX29yZGVyKCkKIHsKQEAgLTgyMSw3ICs4MjEsNyBAQCB2
b2lkIEluc3BlY3RvckFycmF5QmFzZTo6d3JpdGVKU09OKFN0cmluZ0J1aWxkZXIqIG91dHB1dCkg
Y29uc3QKIH0KIAogSW5zcGVjdG9yQXJyYXlCYXNlOjpJbnNwZWN0b3JBcnJheUJhc2UoKQotICAg
IDogSW5zcGVjdG9yVmFsdWUoVHlwZUFycmF5KQorICAgIDogSW5zcGVjdG9yVmFsdWUoVHlwZTo6
QXJyYXkpCiAgICAgLCBtX2RhdGEoKQogewogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmgKaW5kZXggM2I4NjE2NjRkYTMzNzlkZWI1Njg5
YmMwMDEzNGRlMjZlYmE2NzNkYS4uYWJkOWE3OTM1NjI5ODEzNDMwNTM2MGIzNzAwYWI5MzgzYWM3
YmQ1MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JWYWx1ZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
clZhbHVlcy5oCkBAIC00NywyMyArNDcsMjMgQEAgY2xhc3MgSlNfRVhQT1JUX1BSSVZBVEUgSW5z
cGVjdG9yVmFsdWUgOiBwdWJsaWMgUmVmQ291bnRlZDxJbnNwZWN0b3JWYWx1ZT4gewogcHVibGlj
OgogICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4RGVwdGggPSAxMDAwOwogCi0gICAgSW5zcGVjdG9y
VmFsdWUoKSA6IG1fdHlwZShUeXBlTnVsbCkgeyB9CisgICAgSW5zcGVjdG9yVmFsdWUoKSA6IG1f
dHlwZShUeXBlOjpOdWxsKSB7IH0KICAgICB2aXJ0dWFsIH5JbnNwZWN0b3JWYWx1ZSgpIHsgfQog
CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IG51bGwoKTsKIAotICAgIHR5
cGVkZWYgZW51bSB7Ci0gICAgICAgIFR5cGVOdWxsID0gMCwKLSAgICAgICAgVHlwZUJvb2xlYW4s
Ci0gICAgICAgIFR5cGVOdW1iZXIsCi0gICAgICAgIFR5cGVTdHJpbmcsCi0gICAgICAgIFR5cGVP
YmplY3QsCi0gICAgICAgIFR5cGVBcnJheQotICAgIH0gVHlwZTsKKyAgICBlbnVtIGNsYXNzIFR5
cGUgeworICAgICAgICBOdWxsID0gMCwKKyAgICAgICAgQm9vbGVhbiwKKyAgICAgICAgTnVtYmVy
LAorICAgICAgICBTdHJpbmcsCisgICAgICAgIE9iamVjdCwKKyAgICAgICAgQXJyYXkKKyAgICB9
OwogCiAgICAgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CiAKLSAgICBib29s
IGlzTnVsbCgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSA9PSBUeXBlTnVsbDsgfQorICAgIGJvb2wg
aXNOdWxsKCkgY29uc3QgeyByZXR1cm4gbV90eXBlID09IFR5cGU6Ok51bGw7IH0KIAogICAgIHZp
cnR1YWwgYm9vbCBhc0Jvb2xlYW4oYm9vbCogb3V0cHV0KSBjb25zdDsKICAgICB2aXJ0dWFsIGJv
b2wgYXNOdW1iZXIoZG91YmxlKiBvdXRwdXQpIGNvbnN0OwpAQCAtMTEzLDkgKzExMyw5IEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgd3JpdGVKU09OKFN0cmluZ0J1aWxkZXIqIG91dHB1dCkg
Y29uc3Qgb3ZlcnJpZGU7CiAKIHByaXZhdGU6Ci0gICAgZXhwbGljaXQgSW5zcGVjdG9yQmFzaWNW
YWx1ZShib29sIHZhbHVlKSA6IEluc3BlY3RvclZhbHVlKFR5cGVCb29sZWFuKSwgbV9ib29sVmFs
dWUodmFsdWUpIHsgfQotICAgIGV4cGxpY2l0IEluc3BlY3RvckJhc2ljVmFsdWUoaW50IHZhbHVl
KSA6IEluc3BlY3RvclZhbHVlKFR5cGVOdW1iZXIpLCBtX2RvdWJsZVZhbHVlKChkb3VibGUpdmFs
dWUpIHsgfQotICAgIGV4cGxpY2l0IEluc3BlY3RvckJhc2ljVmFsdWUoZG91YmxlIHZhbHVlKSA6
IEluc3BlY3RvclZhbHVlKFR5cGVOdW1iZXIpLCBtX2RvdWJsZVZhbHVlKHZhbHVlKSB7IH0KKyAg
ICBleHBsaWNpdCBJbnNwZWN0b3JCYXNpY1ZhbHVlKGJvb2wgdmFsdWUpIDogSW5zcGVjdG9yVmFs
dWUoVHlwZTo6Qm9vbGVhbiksIG1fYm9vbFZhbHVlKHZhbHVlKSB7IH0KKyAgICBleHBsaWNpdCBJ
bnNwZWN0b3JCYXNpY1ZhbHVlKGludCB2YWx1ZSkgOiBJbnNwZWN0b3JWYWx1ZShUeXBlOjpOdW1i
ZXIpLCBtX2RvdWJsZVZhbHVlKChkb3VibGUpdmFsdWUpIHsgfQorICAgIGV4cGxpY2l0IEluc3Bl
Y3RvckJhc2ljVmFsdWUoZG91YmxlIHZhbHVlKSA6IEluc3BlY3RvclZhbHVlKFR5cGU6Ok51bWJl
ciksIG1fZG91YmxlVmFsdWUodmFsdWUpIHsgfQogCiAgICAgdW5pb24gewogICAgICAgICBib29s
IG1fYm9vbFZhbHVlOwpAQCAtMTMzLDggKzEzMyw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZv
aWQgd3JpdGVKU09OKFN0cmluZ0J1aWxkZXIqIG91dHB1dCkgY29uc3Qgb3ZlcnJpZGU7CiAKIHBy
aXZhdGU6Ci0gICAgZXhwbGljaXQgSW5zcGVjdG9yU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUp
IDogSW5zcGVjdG9yVmFsdWUoVHlwZVN0cmluZyksIG1fc3RyaW5nVmFsdWUodmFsdWUpIHsgfQot
ICAgIGV4cGxpY2l0IEluc3BlY3RvclN0cmluZyhjb25zdCBjaGFyKiB2YWx1ZSkgOiBJbnNwZWN0
b3JWYWx1ZShUeXBlU3RyaW5nKSwgbV9zdHJpbmdWYWx1ZSh2YWx1ZSkgeyB9CisgICAgZXhwbGlj
aXQgSW5zcGVjdG9yU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpIDogSW5zcGVjdG9yVmFsdWUo
VHlwZTo6U3RyaW5nKSwgbV9zdHJpbmdWYWx1ZSh2YWx1ZSkgeyB9CisgICAgZXhwbGljaXQgSW5z
cGVjdG9yU3RyaW5nKGNvbnN0IGNoYXIqIHZhbHVlKSA6IEluc3BlY3RvclZhbHVlKFR5cGU6OlN0
cmluZyksIG1fc3RyaW5nVmFsdWUodmFsdWUpIHsgfQogCiAgICAgU3RyaW5nIG1fc3RyaW5nVmFs
dWU7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2Vu
dHMvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL2FnZW50cy9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcAppbmRleCAyMzEzMmZjMjBl
YWNkMWJlZTEwZDM0ZTczZjZjMDhhYjljYzgyYWY4Li42YTFmZWM3YWI5N2M3NmZmZmZhOGJhNTFk
YWZkYzdkOTU0ZGE5NDFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL2FnZW50cy9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcApAQCAt
NDI5LDcgKzQyOSw3IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6Z2V0RnVuY3Rpb25E
ZXRhaWxzKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgY29uc3QKICAgICBpbmplY3RlZFNjcmlw
dC5nZXRGdW5jdGlvbkRldGFpbHMoZXJyb3JTdHJpbmcsIGZ1bmN0aW9uSWQsICZkZXRhaWxzKTsK
IH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzY2hlZHVsZVBhdXNlT25OZXh0U3Rh
dGVtZW50KEluc3BlY3RvckRlYnVnZ2VyRnJvbnRlbmREaXNwYXRjaGVyOjpSZWFzb246OkVudW0g
YnJlYWtSZWFzb24sIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBkYXRhKQordm9pZCBJbnNw
ZWN0b3JEZWJ1Z2dlckFnZW50OjpzY2hlZHVsZVBhdXNlT25OZXh0U3RhdGVtZW50KEluc3BlY3Rv
ckRlYnVnZ2VyRnJvbnRlbmREaXNwYXRjaGVyOjpSZWFzb24gYnJlYWtSZWFzb24sIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBkYXRhKQogewogICAgIGlmIChtX2phdmFTY3JpcHRQYXVzZVNj
aGVkdWxlZCkKICAgICAgICAgcmV0dXJuOwpAQCAtNjc4LDcgKzY3OCw3IEBAIHZvaWQgSW5zcGVj
dG9yRGVidWdnZXJBZ2VudDo6ZGlkQ29udGludWUoKQogICAgIG1fZnJvbnRlbmREaXNwYXRjaGVy
LT5yZXN1bWVkKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6YnJlYWtQcm9n
cmFtKEluc3BlY3RvckRlYnVnZ2VyRnJvbnRlbmREaXNwYXRjaGVyOjpSZWFzb246OkVudW0gYnJl
YWtSZWFzb24sIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBkYXRhKQordm9pZCBJbnNwZWN0
b3JEZWJ1Z2dlckFnZW50OjpicmVha1Byb2dyYW0oSW5zcGVjdG9yRGVidWdnZXJGcm9udGVuZERp
c3BhdGNoZXI6OlJlYXNvbiBicmVha1JlYXNvbiwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IGRhdGEpCiB7CiAgICAgbV9icmVha1JlYXNvbiA9IGJyZWFrUmVhc29uOwogICAgIG1fYnJlYWtB
dXhEYXRhID0gZGF0YTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3IvYWdlbnRzL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuaAppbmRleCBlYjIyNzBh
OWNlMjQyODEzZjlkNGVlNTU5MDBmZjgzYTk5NmY0MDZiLi44NDdlNzhiNjBmNWRjY2Y5NjlmYjNk
MDExM2VkMjUyM2VhMDI3ZDNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL2FnZW50cy9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5oCkBAIC05
MSw5ICs5MSw5IEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIGhhbmRsZUNvbnNvbGVBc3NlcnQo
KTsKIAotICAgIHZvaWQgc2NoZWR1bGVQYXVzZU9uTmV4dFN0YXRlbWVudChJbnNwZWN0b3JEZWJ1
Z2dlckZyb250ZW5kRGlzcGF0Y2hlcjo6UmVhc29uOjpFbnVtIGJyZWFrUmVhc29uLCBQYXNzUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gZGF0YSk7CisgICAgdm9pZCBzY2hlZHVsZVBhdXNlT25OZXh0
U3RhdGVtZW50KEluc3BlY3RvckRlYnVnZ2VyRnJvbnRlbmREaXNwYXRjaGVyOjpSZWFzb24gYnJl
YWtSZWFzb24sIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBkYXRhKTsKICAgICB2b2lkIGNh
bmNlbFBhdXNlT25OZXh0U3RhdGVtZW50KCk7Ci0gICAgdm9pZCBicmVha1Byb2dyYW0oSW5zcGVj
dG9yRGVidWdnZXJGcm9udGVuZERpc3BhdGNoZXI6OlJlYXNvbjo6RW51bSBicmVha1JlYXNvbiwg
UGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGRhdGEpOworICAgIHZvaWQgYnJlYWtQcm9ncmFt
KEluc3BlY3RvckRlYnVnZ2VyRnJvbnRlbmREaXNwYXRjaGVyOjpSZWFzb24gYnJlYWtSZWFzb24s
IFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBkYXRhKTsKICAgICB2b2lkIHNjcmlwdEV4ZWN1
dGlvbkJsb2NrZWRCeUNTUChjb25zdCBTdHJpbmcmIGRpcmVjdGl2ZVRleHQpOwogCiAgICAgY2xh
c3MgTGlzdGVuZXIgewpAQCAtMTU5LDcgKzE1OSw3IEBAIHByaXZhdGU6CiAgICAgQnJlYWtwb2lu
dElkZW50aWZpZXJUb0RlYnVnU2VydmVyQnJlYWtwb2ludElEc01hcCBtX2JyZWFrcG9pbnRJZGVu
dGlmaWVyVG9EZWJ1Z1NlcnZlckJyZWFrcG9pbnRJRHM7CiAgICAgQnJlYWtwb2ludElkZW50aWZp
ZXJUb0JyZWFrcG9pbnRNYXAgbV9qYXZhU2NyaXB0QnJlYWtwb2ludHM7CiAgICAgSlNDOjpCcmVh
a3BvaW50SUQgbV9jb250aW51ZVRvTG9jYXRpb25CcmVha3BvaW50SUQ7Ci0gICAgSW5zcGVjdG9y
RGVidWdnZXJGcm9udGVuZERpc3BhdGNoZXI6OlJlYXNvbjo6RW51bSBtX2JyZWFrUmVhc29uOwor
ICAgIEluc3BlY3RvckRlYnVnZ2VyRnJvbnRlbmREaXNwYXRjaGVyOjpSZWFzb24gbV9icmVha1Jl
YXNvbjsKICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX2JyZWFrQXV4RGF0YTsKICAgICBi
b29sIG1fZW5hYmxlZDsKICAgICBib29sIG1famF2YVNjcmlwdFBhdXNlU2NoZWR1bGVkOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9y
UnVudGltZUFnZW50LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRz
L0luc3BlY3RvclJ1bnRpbWVBZ2VudC5jcHAKaW5kZXggZDhkNjlhMjU0MTcyMTFhZmI4NzZjMDBk
ZWI0ODg0MzVmY2QzOGUzYS4uYTkzMWI0M2QwY2UyZmM3NmNlYzhlYTFkYTM3ZTI5ZGU5ZTRlOGY4
MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5z
cGVjdG9yUnVudGltZUFnZW50LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL2FnZW50cy9JbnNwZWN0b3JSdW50aW1lQWdlbnQuY3BwCkBAIC04Miw3ICs4Miw3IEBAIHN0
YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OkVycm9yUmFu
Z2U+IGJ1aWxkRXJyb3JSYW5nZU9iCiAgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7CiB9CiAK
LXZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50OjpwYXJzZShFcnJvclN0cmluZyosIGNvbnN0IFN0
cmluZyYgZXhwcmVzc2lvbiwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UnVudGltZTo6U3ludGF4
RXJyb3JUeXBlOjpFbnVtKiByZXN1bHQsIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6Ok9wdE91dHB1
dDxTdHJpbmc+KiBtZXNzYWdlLCBSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UnVudGlt
ZTo6RXJyb3JSYW5nZT4mIHJhbmdlKQordm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OnBhcnNl
KEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBJbnNwZWN0b3I6OlR5cGVC
dWlsZGVyOjpSdW50aW1lOjpTeW50YXhFcnJvclR5cGUqIHJlc3VsdCwgSW5zcGVjdG9yOjpUeXBl
QnVpbGRlcjo6T3B0T3V0cHV0PFN0cmluZz4qIG1lc3NhZ2UsIFJlZlB0cjxJbnNwZWN0b3I6OlR5
cGVCdWlsZGVyOjpSdW50aW1lOjpFcnJvclJhbmdlPiYgcmFuZ2UpCiB7CiAgICAgVk0mIHZtID0g
Z2xvYmFsVk0oKTsKICAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JSdW50aW1lQWdlbnQu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclJ1bnRp
bWVBZ2VudC5oCmluZGV4IGQ2YzFlZWEyMDA0MWU3NjgxZWNhMTlmODc2MTc1YTc4MTJiMGFmMjQu
LjliMTk3MzlhMGMxOTdhYzAzNjYyOGM4Y2Y1YzFhMWVjNDI2NDJjNjkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclJ1bnRpbWVBZ2Vu
dC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rv
clJ1bnRpbWVBZ2VudC5oCkBAIC01OSw3ICs1OSw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwg
dm9pZCBlbmFibGUoRXJyb3JTdHJpbmcqKSBvdmVycmlkZSB7IG1fZW5hYmxlZCA9IHRydWU7IH0K
ICAgICB2aXJ0dWFsIHZvaWQgZGlzYWJsZShFcnJvclN0cmluZyopIG92ZXJyaWRlIHsgbV9lbmFi
bGVkID0gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIHZvaWQgcGFyc2UoRXJyb3JTdHJpbmcqLCBjb25z
dCBTdHJpbmcmIGV4cHJlc3Npb24sIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OlN5
bnRheEVycm9yVHlwZTo6RW51bSogcmVzdWx0LCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpPcHRP
dXRwdXQ8U3RyaW5nPiogbWVzc2FnZSwgUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlJ1
bnRpbWU6OkVycm9yUmFuZ2U+Jikgb3ZlcnJpZGUgZmluYWw7CisgICAgdmlydHVhbCB2b2lkIHBh
cnNlKEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBJbnNwZWN0b3I6OlR5
cGVCdWlsZGVyOjpSdW50aW1lOjpTeW50YXhFcnJvclR5cGUqIHJlc3VsdCwgSW5zcGVjdG9yOjpU
eXBlQnVpbGRlcjo6T3B0T3V0cHV0PFN0cmluZz4qIG1lc3NhZ2UsIFJlZlB0cjxJbnNwZWN0b3I6
OlR5cGVCdWlsZGVyOjpSdW50aW1lOjpFcnJvclJhbmdlPiYpIG92ZXJyaWRlIGZpbmFsOwogICAg
IHZpcnR1YWwgdm9pZCBldmFsdWF0ZShFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgZXhwcmVz
c2lvbiwgY29uc3QgU3RyaW5nKiBvYmplY3RHcm91cCwgY29uc3QgYm9vbCogaW5jbHVkZUNvbW1h
bmRMaW5lQVBJLCBjb25zdCBib29sKiBkb05vdFBhdXNlT25FeGNlcHRpb25zQW5kTXV0ZUNvbnNv
bGUsIGNvbnN0IGludCogZXhlY3V0aW9uQ29udGV4dElkLCBjb25zdCBib29sKiByZXR1cm5CeVZh
bHVlLCBjb25zdCBib29sKiBnZW5lcmF0ZVByZXZpZXcsIFJlZlB0cjxJbnNwZWN0b3I6OlR5cGVC
dWlsZGVyOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiByZXN1bHQsIEluc3BlY3Rvcjo6VHlwZUJ1
aWxkZXI6Ok9wdE91dHB1dDxib29sPiogd2FzVGhyb3duKSBvdmVycmlkZSBmaW5hbDsKICAgICB2
aXJ0dWFsIHZvaWQgY2FsbEZ1bmN0aW9uT24oRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIG9i
amVjdElkLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6
Okluc3BlY3RvckFycmF5Piogb3B0aW9uYWxBcmd1bWVudHMsIGNvbnN0IGJvb2wqIGRvTm90UGF1
c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29sZSwgY29uc3QgYm9vbCogcmV0dXJuQnlWYWx1ZSwg
Y29uc3QgYm9vbCogZ2VuZXJhdGVQcmV2aWV3LCBSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRl
cjo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0LCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVy
OjpPcHRPdXRwdXQ8Ym9vbD4qIHdhc1Rocm93bikgb3ZlcnJpZGUgZmluYWw7CiAgICAgdmlydHVh
bCB2b2lkIHJlbGVhc2VPYmplY3QoRXJyb3JTdHJpbmcqLCBjb25zdCBFcnJvclN0cmluZyYgb2Jq
ZWN0SWQpIG92ZXJyaWRlIGZpbmFsOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQpk
ZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggOTFmYThjOWMyZDdiOTQ5OWNiMDhkNWVmYTQy
YTkyMjQ5MjY1MzE4NC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvQ29kZUdlbmVyYXRv
ckluc3BlY3Rvci5weQorKysgL2Rldi9udWxsCkBAIC0xLDI2MTQgKzAsMCBAQAotIyEvdXNyL2Jp
bi9lbnYgcHl0aG9uCi0jIENvcHlyaWdodCAoYykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotIyBDb3B5cmlnaHQgKGMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0jIENvcHlyaWdodCAoYykgMjAxMyBBcHBsZSBJbmMuIEFsbCBSaWdo
dHMgUmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0jIG1ldDoKLSMK
LSMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0jIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSMgaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQot
IyBkaXN0cmlidXRpb24uCi0jICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKLSMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSMgdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSMKLSMgVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwot
IyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSMgT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
Ci0jIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0jIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotIyBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0jIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi1pbXBvcnQgb3MucGF0aAotaW1wb3J0
IHN5cwotaW1wb3J0IHN0cmluZwotaW1wb3J0IG9wdHBhcnNlCi1pbXBvcnQgcmUKLXRyeToKLSAg
ICBpbXBvcnQganNvbgotZXhjZXB0IEltcG9ydEVycm9yOgotICAgIGltcG9ydCBzaW1wbGVqc29u
IGFzIGpzb24KLQotaW1wb3J0IENvZGVHZW5lcmF0b3JJbnNwZWN0b3JTdHJpbmdzCi0KLQotRE9N
QUlOX0RFRklORV9OQU1FX01BUCA9IHsKLSAgICAiRGF0YWJhc2UiOiAiU1FMX0RBVEFCQVNFIiwK
LSAgICAiSW5kZXhlZERCIjogIklOREVYRURfREFUQUJBU0UiLAotICAgICJSZXBsYXkiOiAiV0VC
X1JFUExBWSIsCi19Ci0KLQotIyBNYW51YWxseS1maWxsZWQgbWFwIG9mIHR5cGUgbmFtZSByZXBs
YWNlbWVudHMuCi1UWVBFX05BTUVfRklYX01BUCA9IHsKLSAgICAiUkdCQSI6ICJSZ2JhIiwgICMg
UkdCQSBpcyByZXBvcnRlZCB0byBiZSBjb25mbGljdGluZyB3aXRoIGEgZGVmaW5lIG5hbWUgaW4g
V2luZG93cyBDRS4KLSAgICAiIjogIkVtcHR5IiwKLX0KLQotCi1UWVBFU19XSVRIX1JVTlRJTUVf
Q0FTVF9TRVQgPSBmcm96ZW5zZXQoWyJSdW50aW1lLlJlbW90ZU9iamVjdCIsICJSdW50aW1lLlBy
b3BlcnR5RGVzY3JpcHRvciIsICJSdW50aW1lLkludGVybmFsUHJvcGVydHlEZXNjcmlwdG9yIiwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkRlYnVnZ2VyLkZ1bmN0
aW9uRGV0YWlscyIsICJEZWJ1Z2dlci5DYWxsRnJhbWUiLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAiQ2FudmFzLlRyYWNlTG9nIiwgIkNhbnZhcy5SZXNvdXJjZUlu
Zm8iLCAiQ2FudmFzLlJlc291cmNlU3RhdGUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAjIFRoaXMgc2hvdWxkIGJlIGEgdGVtcG9yYXJ5IGhhY2suIFRpbWVsaW5l
RXZlbnQgc2hvdWxkIGJlIGNyZWF0ZWQgdmlhIGdlbmVyYXRlZCBDKysgQVBJLgotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGltZWxpbmUuVGltZWxpbmVFdmVudCJd
KQotCi1UWVBFU19XSVRIX09QRU5fRklFTERfTElTVF9TRVQgPSBmcm96ZW5zZXQoWyJUaW1lbGlu
ZS5UaW1lbGluZUV2ZW50IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIyBJbnNwZWN0b3JTdHlsZVNoZWV0IG5vdCBvbmx5IGNyZWF0ZXMgdGhpcyBwcm9wZXJ0
eSBidXQgd2FudHMgdG8gcmVhZCBpdCBhbmQgbW9kaWZ5IGl0LgotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAiQ1NTLkNTU1Byb3BlcnR5IiwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBJbnNwZWN0b3JSZXNvdXJjZUFnZW50
IG5lZWRzIHRvIHVwZGF0ZSBtaW1lLXR5cGUuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJOZXR3b3JrLlJlc3BvbnNlIl0pCi0KLUVYQUNUTFlfSU5UX1NVUFBP
UlRFRCA9IEZhbHNlCi0KLUlOU1BFQ1RPUl9UWVBFU19HRU5FUkFUT1JfQ09ORklHX01BUCA9IHsK
LSAgICAiSmF2YVNjcmlwdCI6IHsKLSAgICAgICAgInByZWZpeCI6ICJKUyIsCi0gICAgICAgICJ0
eXBlYnVpbGRlcl9kZXBlbmRlbmN5IjogIiIsCi0gICAgICAgICJleHBvcnRfbWFjcm8iOiAiSlNf
RVhQT1JUX1BSSVZBVEUiLAotICAgIH0sCi0gICAgIldlYiI6IHsKLSAgICAgICAgInByZWZpeCI6
ICJXZWIiLAotICAgICAgICAidHlwZWJ1aWxkZXJfZGVwZW5kZW5jeSI6ICIjaW5jbHVkZSA8aW5z
cGVjdG9yL0luc3BlY3RvckpTVHlwZUJ1aWxkZXJzLmg+IiwKLSAgICAgICAgImV4cG9ydF9tYWNy
byI6ICIiLAotICAgIH0sCi19Ci0KLWNtZGxpbmVfcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFy
c2VyKHVzYWdlPSJ1c2FnZTogJXByb2cgW29wdGlvbnNdIDxJbnNwZWN0b3IuanNvbj4iKQotY21k
bGluZV9wYXJzZXIuYWRkX29wdGlvbigiLS1vdXRwdXRfaF9kaXIiKQotY21kbGluZV9wYXJzZXIu
YWRkX29wdGlvbigiLS1vdXRwdXRfY3BwX2RpciIpCi1jbWRsaW5lX3BhcnNlci5hZGRfb3B0aW9u
KCItLW91dHB1dF9qc19kaXIiKQotY21kbGluZV9wYXJzZXIuYWRkX29wdGlvbigiLS1vdXRwdXRf
dHlwZSIpICAjIEphdmFTY3JpcHQsIFdlYgotY21kbGluZV9wYXJzZXIuYWRkX29wdGlvbigiLS13
cml0ZV9hbHdheXMiLCBhY3Rpb249InN0b3JlX3RydWUiKQotY21kbGluZV9wYXJzZXIuYWRkX29w
dGlvbigiLS1ub192ZXJpZmljYXRpb24iLCBhY3Rpb249InN0b3JlX3RydWUiKQotCi10cnk6Ci0g
ICAgYXJnX29wdGlvbnMsIGFyZ192YWx1ZXMgPSBjbWRsaW5lX3BhcnNlci5wYXJzZV9hcmdzKCkK
LSAgICBpZiAobGVuKGFyZ192YWx1ZXMpIDwgMSk6Ci0gICAgICAgIHJhaXNlIEV4Y2VwdGlvbigi
QXQgbGVhc3Qgb25lIHBsYWluIGFyZ3VtZW50IGV4cGVjdGVkIikKLQotICAgIGlucHV0X2pzb25f
ZmlsZW5hbWUgPSBhcmdfdmFsdWVzWzBdCi0gICAgZGVwZW5kZW5jeV9qc29uX2ZpbGVuYW1lcyA9
IGFyZ192YWx1ZXNbMTpdCi0KLSAgICBvdXRwdXRfaGVhZGVyX2Rpcm5hbWUgPSBhcmdfb3B0aW9u
cy5vdXRwdXRfaF9kaXIKLSAgICBvdXRwdXRfY3BwX2Rpcm5hbWUgPSBhcmdfb3B0aW9ucy5vdXRw
dXRfY3BwX2RpcgotICAgIG91dHB1dF9qc19kaXJuYW1lID0gYXJnX29wdGlvbnMub3V0cHV0X2pz
X2RpcgotICAgIG91dHB1dF90eXBlID0gYXJnX29wdGlvbnMub3V0cHV0X3R5cGUKLQotICAgIHdy
aXRlX2Fsd2F5cyA9IGFyZ19vcHRpb25zLndyaXRlX2Fsd2F5cwotICAgIHZlcmlmaWNhdGlvbiA9
IG5vdCBhcmdfb3B0aW9ucy5ub192ZXJpZmljYXRpb24KLSAgICBpZiBub3Qgb3V0cHV0X2hlYWRl
cl9kaXJuYW1lOgotICAgICAgICByYWlzZSBFeGNlcHRpb24oIk91dHB1dCAuaCBkaXJlY3Rvcnkg
bXVzdCBiZSBzcGVjaWZpZWQiKQotICAgIGlmIG5vdCBvdXRwdXRfY3BwX2Rpcm5hbWU6Ci0gICAg
ICAgIHJhaXNlIEV4Y2VwdGlvbigiT3V0cHV0IC5jcHAgZGlyZWN0b3J5IG11c3QgYmUgc3BlY2lm
aWVkIikKLSAgICBpZiBub3Qgb3V0cHV0X2pzX2Rpcm5hbWU6Ci0gICAgICAgIHJhaXNlIEV4Y2Vw
dGlvbigiT3V0cHV0IC5qcyBkaXJlY3RvcnkgbXVzdCBiZSBzcGVjaWZpZWQiKQotICAgIGlmIG91
dHB1dF90eXBlIG5vdCBpbiBJTlNQRUNUT1JfVFlQRVNfR0VORVJBVE9SX0NPTkZJR19NQVAua2V5
cygpOgotICAgICAgICByYWlzZSBFeGNlcHRpb24oIlVua25vd24gb3V0cHV0IHR5cGUuIEFsbG93
ZWQgdHlwZXMgYXJlOiAlcyIgJSBJTlNQRUNUT1JfVFlQRVNfR0VORVJBVE9SX0NPTkZJR19NQVAu
a2V5cygpKQotZXhjZXB0IEV4Y2VwdGlvbjoKLSAgICAjIFdvcmsgd2l0aCBweXRob24gMiBhbmQg
MyBodHRwOi8vZG9jcy5weXRob24ub3JnL3B5M2svaG93dG8vcHlwb3J0aW5nLmh0bWwKLSAgICBl
eGMgPSBzeXMuZXhjX2luZm8oKVsxXQotICAgIHN5cy5zdGRlcnIud3JpdGUoIkZhaWxlZCB0byBw
YXJzZSBjb21tYW5kLWxpbmUgYXJndW1lbnRzOiAlc1xuXG4iICUgZXhjKQotICAgIHN5cy5zdGRl
cnIud3JpdGUoIlVzYWdlOiA8c2NyaXB0PiBJbnNwZWN0b3IuanNvbiAtLW91dHB1dF9oX2RpciA8
b3V0cHV0X2hlYWRlcl9kaXI+IC0tb3V0cHV0X2NwcF9kaXIgPG91dHB1dF9jcHBfZGlyPiAtLW91
dHB1dF9qc19kaXIgPG91dHB1dF9qc19kaXI+IFstLXdyaXRlX2Fsd2F5c10gWy0tbm9fdmVyaWZp
Y2F0aW9uXVxuIikKLSAgICBleGl0KDEpCi0KLQotZGVmIGRhc2hfdG9fY2FtZWxjYXNlKHdvcmQp
OgotICAgIHJldHVybiAnJy5qb2luKHguY2FwaXRhbGl6ZSgpIG9yICctJyBmb3IgeCBpbiB3b3Jk
LnNwbGl0KCctJykpCi0KLQotZGVmIGZpeF9jYW1lbF9jYXNlKG5hbWUpOgotICAgIHJlZmluZWQg
PSByZS5zdWIocictKFx3KScsIGxhbWJkYSBwYXQ6IHBhdC5ncm91cCgxKS51cHBlcigpLCBuYW1l
KQotICAgIHJlZmluZWQgPSB0b190aXRsZV9jYXNlKHJlZmluZWQpCi0gICAgcmV0dXJuIHJlLnN1
YihyJyg/aSlIVE1MfFhNTHxXTUx8QVBJfEdDfFhIUnxET018Q1NTJywgbGFtYmRhIHBhdDogcGF0
Lmdyb3VwKDApLnVwcGVyKCksIHJlZmluZWQpCi0KLQotZGVmIHRvX3RpdGxlX2Nhc2UobmFtZSk6
Ci0gICAgcmV0dXJuIG5hbWVbOjFdLnVwcGVyKCkgKyBuYW1lWzE6XQotCi0KLWNsYXNzIENhcGl0
YWxpemVyOgotICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgbG93ZXJfY2FtZWxfY2FzZV90b191
cHBlcihzdHIpOgotICAgICAgICBpZiBsZW4oc3RyKSA+IDAgYW5kIHN0clswXS5pc2xvd2VyKCk6
Ci0gICAgICAgICAgICBzdHIgPSBzdHJbMF0udXBwZXIoKSArIHN0clsxOl0KLSAgICAgICAgcmV0
dXJuIHN0cgotCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiB1cHBlcl9jYW1lbF9jYXNlX3Rv
X2xvd2VyKHN0cik6Ci0gICAgICAgIHBvcyA9IDAKLSAgICAgICAgd2hpbGUgcG9zIDwgbGVuKHN0
cikgYW5kIHN0cltwb3NdLmlzdXBwZXIoKToKLSAgICAgICAgICAgIHBvcyArPSAxCi0gICAgICAg
IGlmIHBvcyA9PSAwOgotICAgICAgICAgICAgcmV0dXJuIHN0cgotICAgICAgICBpZiBwb3MgPT0g
MToKLSAgICAgICAgICAgIHJldHVybiBzdHJbMF0ubG93ZXIoKSArIHN0clsxOl0KLSAgICAgICAg
aWYgcG9zIDwgbGVuKHN0cik6Ci0gICAgICAgICAgICBwb3MgLT0gMQotICAgICAgICBwb3NzaWJs
ZV9hYmJyZXZpYXRpb24gPSBzdHJbMDpwb3NdCi0gICAgICAgIGlmIHBvc3NpYmxlX2FiYnJldmlh
dGlvbiBub3QgaW4gQ2FwaXRhbGl6ZXIuQUJCUkVWSUFUSU9OOgotICAgICAgICAgICAgcmFpc2Ug
RXhjZXB0aW9uKCJVbmtub3duIGFiYnJldmlhdGlvbiAlcyIgJSBwb3NzaWJsZV9hYmJyZXZpYXRp
b24pCi0gICAgICAgIHN0ciA9IHBvc3NpYmxlX2FiYnJldmlhdGlvbi5sb3dlcigpICsgc3RyW3Bv
czpdCi0gICAgICAgIHJldHVybiBzdHIKLQotICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgY2Ft
ZWxfY2FzZV90b19jYXBpdGFsaXplZF93aXRoX3VuZGVyc2NvcmVzKHN0cik6Ci0gICAgICAgIGlm
IGxlbihzdHIpID09IDA6Ci0gICAgICAgICAgICByZXR1cm4gc3RyCi0gICAgICAgIG91dHB1dCA9
IENhcGl0YWxpemVyLnNwbGl0X2NhbWVsX2Nhc2VfKHN0cikKLSAgICAgICAgcmV0dXJuICJfIi5q
b2luKG91dHB1dCkudXBwZXIoKQotCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBzcGxpdF9j
YW1lbF9jYXNlXyhzdHIpOgotICAgICAgICBvdXRwdXQgPSBbXQotICAgICAgICBwb3NfYmVpbmcg
PSAwCi0gICAgICAgIHBvcyA9IDEKLSAgICAgICAgaGFzX29uZWxldHRlciA9IEZhbHNlCi0gICAg
ICAgIHdoaWxlIHBvcyA8IGxlbihzdHIpOgotICAgICAgICAgICAgaWYgc3RyW3Bvc10uaXN1cHBl
cigpOgotICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoc3RyW3Bvc19iZWluZzpwb3NdLnVw
cGVyKCkpCi0gICAgICAgICAgICAgICAgaWYgcG9zIC0gcG9zX2JlaW5nID09IDE6Ci0gICAgICAg
ICAgICAgICAgICAgIGhhc19vbmVsZXR0ZXIgPSBUcnVlCi0gICAgICAgICAgICAgICAgcG9zX2Jl
aW5nID0gcG9zCi0gICAgICAgICAgICBwb3MgKz0gMQotICAgICAgICBvdXRwdXQuYXBwZW5kKHN0
cltwb3NfYmVpbmc6XSkKLSAgICAgICAgaWYgaGFzX29uZWxldHRlcjoKLSAgICAgICAgICAgIGFy
cmF5X3BvcyA9IDAKLSAgICAgICAgICAgIHdoaWxlIGFycmF5X3BvcyA8IGxlbihvdXRwdXQpIC0g
MToKLSAgICAgICAgICAgICAgICBpZiBsZW4ob3V0cHV0W2FycmF5X3Bvc10pID09IDE6Ci0gICAg
ICAgICAgICAgICAgICAgIGFycmF5X3Bvc19lbmQgPSBhcnJheV9wb3MgKyAxCi0gICAgICAgICAg
ICAgICAgICAgIHdoaWxlIGFycmF5X3Bvc19lbmQgPCBsZW4ob3V0cHV0KSBhbmQgbGVuKG91dHB1
dFthcnJheV9wb3NfZW5kXSkgPT0gMToKLSAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5X3Bv
c19lbmQgKz0gMQotICAgICAgICAgICAgICAgICAgICBpZiBhcnJheV9wb3NfZW5kIC0gYXJyYXlf
cG9zID4gMToKLSAgICAgICAgICAgICAgICAgICAgICAgIHBvc3NpYmxlX2FiYnJldmlhdGlvbiA9
ICIiLmpvaW4ob3V0cHV0W2FycmF5X3BvczphcnJheV9wb3NfZW5kXSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIHBvc3NpYmxlX2FiYnJldmlhdGlvbi51cHBlcigpIGluIENhcGl0YWxpemVy
LkFCQlJFVklBVElPTjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRbYXJyYXlf
cG9zOmFycmF5X3Bvc19lbmRdID0gW3Bvc3NpYmxlX2FiYnJldmlhdGlvbl0KLSAgICAgICAgICAg
ICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlfcG9z
ID0gYXJyYXlfcG9zX2VuZCAtIDEKLSAgICAgICAgICAgICAgICBhcnJheV9wb3MgKz0gMQotICAg
ICAgICByZXR1cm4gb3V0cHV0Ci0KLSAgICBBQkJSRVZJQVRJT04gPSBmcm96ZW5zZXQoWyJYSFIi
LCAiRE9NIiwgIkNTUyJdKQotCi1WQUxJREFUT1JfSUZERUZfTkFNRSA9ICIhQVNTRVJUX0RJU0FC
TEVEIgotCi0KLWNsYXNzIERvbWFpbk5hbWVGaXhlczoKLSAgICBAY2xhc3NtZXRob2QKLSAgICBk
ZWYgZ2V0X2ZpeGVkX2RhdGEoY2xzLCBkb21haW5fbmFtZSk6Ci0gICAgICAgIGZpZWxkX25hbWVf
cmVzID0gQ2FwaXRhbGl6ZXIudXBwZXJfY2FtZWxfY2FzZV90b19sb3dlcihkb21haW5fbmFtZSkg
KyAiQWdlbnQiCi0KLSAgICAgICAgY2xhc3MgUmVzKG9iamVjdCk6Ci0gICAgICAgICAgICBza2lw
X2pzX2JpbmQgPSBkb21haW5fbmFtZSBpbiBjbHMuc2tpcF9qc19iaW5kX2RvbWFpbnMKLQotICAg
ICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgZGVmIGdldF9ndWFyZCgpOgotICAg
ICAgICAgICAgICAgIGlmIGRvbWFpbl9uYW1lIGluIERPTUFJTl9ERUZJTkVfTkFNRV9NQVA6Ci0g
ICAgICAgICAgICAgICAgICAgIGRlZmluZV9uYW1lID0gRE9NQUlOX0RFRklORV9OQU1FX01BUFtk
b21haW5fbmFtZV0KLQotICAgICAgICAgICAgICAgICAgICBjbGFzcyBHdWFyZDoKLSAgICAgICAg
ICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgICAgIGRl
ZiBnZW5lcmF0ZV9vcGVuKG91dHB1dCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0
cHV0LmFwcGVuZCgiI2lmIEVOQUJMRSglcylcbiIgJSBkZWZpbmVfbmFtZSkKLQotICAgICAgICAg
ICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgICAgICAgICAgICAgZGVm
IGdlbmVyYXRlX2Nsb3NlKG91dHB1dCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0
cHV0LmFwcGVuZCgiI2VuZGlmIC8vIEVOQUJMRSglcylcbiIgJSBkZWZpbmVfbmFtZSkKLQotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gR3VhcmQKLQotICAgICAgICByZXR1cm4gUmVzCi0KLSAg
ICBza2lwX2pzX2JpbmRfZG9tYWlucyA9IHNldChbIkRPTURlYnVnZ2VyIl0pCi0KLQotY2xhc3Mg
UmF3VHlwZXMob2JqZWN0KToKLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIGdldChqc29uX3R5
cGUpOgotICAgICAgICBpZiBqc29uX3R5cGUgPT0gImJvb2xlYW4iOgotICAgICAgICAgICAgcmV0
dXJuIFJhd1R5cGVzLkJvb2wKLSAgICAgICAgZWxpZiBqc29uX3R5cGUgPT0gInN0cmluZyI6Ci0g
ICAgICAgICAgICByZXR1cm4gUmF3VHlwZXMuU3RyaW5nCi0gICAgICAgIGVsaWYganNvbl90eXBl
ID09ICJhcnJheSI6Ci0gICAgICAgICAgICByZXR1cm4gUmF3VHlwZXMuQXJyYXkKLSAgICAgICAg
ZWxpZiBqc29uX3R5cGUgPT0gIm9iamVjdCI6Ci0gICAgICAgICAgICByZXR1cm4gUmF3VHlwZXMu
T2JqZWN0Ci0gICAgICAgIGVsaWYganNvbl90eXBlID09ICJpbnRlZ2VyIjoKLSAgICAgICAgICAg
IHJldHVybiBSYXdUeXBlcy5JbnQKLSAgICAgICAgZWxpZiBqc29uX3R5cGUgPT0gIm51bWJlciI6
Ci0gICAgICAgICAgICByZXR1cm4gUmF3VHlwZXMuTnVtYmVyCi0gICAgICAgIGVsaWYganNvbl90
eXBlID09ICJhbnkiOgotICAgICAgICAgICAgcmV0dXJuIFJhd1R5cGVzLkFueQotICAgICAgICBl
bHNlOgotICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJVbmtub3duIHR5cGU6ICVzIiAlIGpz
b25fdHlwZSkKLQotICAgICMgRm9yIG91dHB1dCBwYXJhbWV0ZXIgYWxsIHZhbHVlcyBhcmUgcGFz
c2VkIGJ5IHBvaW50ZXIgZXhjZXB0IFJlZlB0ci1iYXNlZCB0eXBlcy4KLSAgICBjbGFzcyBPdXRw
dXRQYXNzTW9kZWw6Ci0gICAgICAgIGNsYXNzIEJ5UG9pbnRlcjoKLSAgICAgICAgICAgIEBzdGF0
aWNtZXRob2QKLSAgICAgICAgICAgIGRlZiBnZXRfYXJndW1lbnRfcHJlZml4KCk6Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuICImIgotCi0gICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAg
ICAgICBkZWYgZ2V0X3BhcmFtZXRlcl90eXBlX3N1ZmZpeCgpOgotICAgICAgICAgICAgICAgIHJl
dHVybiAiKiIKLQotICAgICAgICBjbGFzcyBCeVJlZmVyZW5jZToKLSAgICAgICAgICAgIEBzdGF0
aWNtZXRob2QKLSAgICAgICAgICAgIGRlZiBnZXRfYXJndW1lbnRfcHJlZml4KCk6Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuICIiCi0KLSAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAg
ICAgIGRlZiBnZXRfcGFyYW1ldGVyX3R5cGVfc3VmZml4KCk6Ci0gICAgICAgICAgICAgICAgcmV0
dXJuICImIgotCi0gICAgY2xhc3MgQmFzZVR5cGUob2JqZWN0KToKLSAgICAgICAgbmVlZF9pbnRl
cm5hbF9ydW50aW1lX2Nhc3RfID0gRmFsc2UKLQotICAgICAgICBAY2xhc3NtZXRob2QKLSAgICAg
ICAgZGVmIHJlcXVlc3RfcmF3X2ludGVybmFsX3J1bnRpbWVfY2FzdChjbHMpOgotICAgICAgICAg
ICAgaWYgbm90IGNscy5uZWVkX2ludGVybmFsX3J1bnRpbWVfY2FzdF86Ci0gICAgICAgICAgICAg
ICAgY2xzLm5lZWRfaW50ZXJuYWxfcnVudGltZV9jYXN0XyA9IFRydWUKLQotICAgICAgICBAY2xh
c3NtZXRob2QKLSAgICAgICAgZGVmIGdldF9yYXdfdmFsaWRhdG9yX2NhbGxfdGV4dChjbHMpOgot
ICAgICAgICAgICAgcmV0dXJuICJSdW50aW1lQ2FzdEhlbHBlcjo6YXNzZXJ0VHlwZTxJbnNwZWN0
b3I6Okluc3BlY3RvclZhbHVlOjpUeXBlJXM+IiAlIGNscy5nZXRfdmFsaWRhdGVfbWV0aG9kX3Bh
cmFtcygpLnRlbXBsYXRlX3R5cGUKLQotICAgIGNsYXNzIFN0cmluZyhCYXNlVHlwZSk6Ci0gICAg
ICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGdldF9nZXR0ZXJfbmFtZSgpOgotICAgICAg
ICAgICAgcmV0dXJuICJTdHJpbmciCi0KLSAgICAgICAgZ2V0X3NldHRlcl9uYW1lID0gZ2V0X2dl
dHRlcl9uYW1lCi0KLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBkZWYgZ2V0X2NfaW5p
dGlhbGl6ZXIoKToKLSAgICAgICAgICAgIHJldHVybiAiXCJcIiIKLQotICAgICAgICBAc3RhdGlj
bWV0aG9kCi0gICAgICAgIGRlZiBnZXRfanNfYmluZF90eXBlKCk6Ci0gICAgICAgICAgICByZXR1
cm4gInN0cmluZyIKLQotICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgIGRlZiBnZXRfdmFs
aWRhdGVfbWV0aG9kX3BhcmFtcygpOgotICAgICAgICAgICAgY2xhc3MgVmFsaWRhdGVNZXRob2RQ
YXJhbXM6Ci0gICAgICAgICAgICAgICAgdGVtcGxhdGVfdHlwZSA9ICJTdHJpbmciCi0gICAgICAg
ICAgICByZXR1cm4gVmFsaWRhdGVNZXRob2RQYXJhbXMKLQotICAgICAgICBAc3RhdGljbWV0aG9k
Ci0gICAgICAgIGRlZiBnZXRfb3V0cHV0X3Bhc3NfbW9kZWwoKToKLSAgICAgICAgICAgIHJldHVy
biBSYXdUeXBlcy5PdXRwdXRQYXNzTW9kZWwuQnlQb2ludGVyCi0KLSAgICAgICAgQHN0YXRpY21l
dGhvZAotICAgICAgICBkZWYgaXNfaGVhdnlfdmFsdWUoKToKLSAgICAgICAgICAgIHJldHVybiBU
cnVlCi0KLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBkZWYgZ2V0X2FycmF5X2l0ZW1f
cmF3X2NfdHlwZV90ZXh0KCk6Ci0gICAgICAgICAgICByZXR1cm4gIlN0cmluZyIKLQotICAgICAg
ICBAc3RhdGljbWV0aG9kCi0gICAgICAgIGRlZiBnZXRfcmF3X3R5cGVfbW9kZWwoKToKLSAgICAg
ICAgICAgIHJldHVybiBUeXBlTW9kZWwuU3RyaW5nCi0KLSAgICBjbGFzcyBJbnQoQmFzZVR5cGUp
OgotICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgIGRlZiBnZXRfZ2V0dGVyX25hbWUoKToK
LSAgICAgICAgICAgIHJldHVybiAiSW50IgotCi0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAg
ICAgZGVmIGdldF9zZXR0ZXJfbmFtZSgpOgotICAgICAgICAgICAgcmV0dXJuICJOdW1iZXIiCi0K
LSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBkZWYgZ2V0X2NfaW5pdGlhbGl6ZXIoKToK
LSAgICAgICAgICAgIHJldHVybiAiMCIKLQotICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAg
IGRlZiBnZXRfanNfYmluZF90eXBlKCk6Ci0gICAgICAgICAgICByZXR1cm4gIm51bWJlciIKLQot
ICAgICAgICBAY2xhc3NtZXRob2QKLSAgICAgICAgZGVmIGdldF9yYXdfdmFsaWRhdG9yX2NhbGxf
dGV4dChjbHMpOgotICAgICAgICAgICAgcmV0dXJuICJSdW50aW1lQ2FzdEhlbHBlcjo6YXNzZXJ0
SW50IgotCi0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGdldF9vdXRwdXRfcGFz
c19tb2RlbCgpOgotICAgICAgICAgICAgcmV0dXJuIFJhd1R5cGVzLk91dHB1dFBhc3NNb2RlbC5C
eVBvaW50ZXIKLQotICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgIGRlZiBpc19oZWF2eV92
YWx1ZSgpOgotICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0KLSAgICAgICAgQHN0YXRpY21ldGhv
ZAotICAgICAgICBkZWYgZ2V0X2FycmF5X2l0ZW1fcmF3X2NfdHlwZV90ZXh0KCk6Ci0gICAgICAg
ICAgICByZXR1cm4gImludCIKLQotICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgIGRlZiBn
ZXRfcmF3X3R5cGVfbW9kZWwoKToKLSAgICAgICAgICAgIHJldHVybiBUeXBlTW9kZWwuSW50Ci0K
LSAgICBjbGFzcyBOdW1iZXIoQmFzZVR5cGUpOgotICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAg
ICAgIGRlZiBnZXRfZ2V0dGVyX25hbWUoKToKLSAgICAgICAgICAgIHJldHVybiAiRG91YmxlIgot
Ci0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGdldF9zZXR0ZXJfbmFtZSgpOgot
ICAgICAgICAgICAgcmV0dXJuICJOdW1iZXIiCi0KLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAg
ICAgICBkZWYgZ2V0X2NfaW5pdGlhbGl6ZXIoKToKLSAgICAgICAgICAgIHJldHVybiAiMCIKLQot
ICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgIGRlZiBnZXRfanNfYmluZF90eXBlKCk6Ci0g
ICAgICAgICAgICByZXR1cm4gIm51bWJlciIKLQotICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAg
ICAgIGRlZiBnZXRfdmFsaWRhdGVfbWV0aG9kX3BhcmFtcygpOgotICAgICAgICAgICAgY2xhc3Mg
VmFsaWRhdGVNZXRob2RQYXJhbXM6Ci0gICAgICAgICAgICAgICAgdGVtcGxhdGVfdHlwZSA9ICJO
dW1iZXIiCi0gICAgICAgICAgICByZXR1cm4gVmFsaWRhdGVNZXRob2RQYXJhbXMKLQotICAgICAg
ICBAc3RhdGljbWV0aG9kCi0gICAgICAgIGRlZiBnZXRfb3V0cHV0X3Bhc3NfbW9kZWwoKToKLSAg
ICAgICAgICAgIHJldHVybiBSYXdUeXBlcy5PdXRwdXRQYXNzTW9kZWwuQnlQb2ludGVyCi0KLSAg
ICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBkZWYgaXNfaGVhdnlfdmFsdWUoKToKLSAgICAg
ICAgICAgIHJldHVybiBGYWxzZQotCi0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVm
IGdldF9hcnJheV9pdGVtX3Jhd19jX3R5cGVfdGV4dCgpOgotICAgICAgICAgICAgcmV0dXJuICJk
b3VibGUiCi0KLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBkZWYgZ2V0X3Jhd190eXBl
X21vZGVsKCk6Ci0gICAgICAgICAgICByZXR1cm4gVHlwZU1vZGVsLk51bWJlcgotCi0gICAgY2xh
c3MgQm9vbChCYXNlVHlwZSk6Ci0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGdl
dF9nZXR0ZXJfbmFtZSgpOgotICAgICAgICAgICAgcmV0dXJuICJCb29sZWFuIgotCi0gICAgICAg
IGdldF9zZXR0ZXJfbmFtZSA9IGdldF9nZXR0ZXJfbmFtZQotCi0gICAgICAgIEBzdGF0aWNtZXRo
b2QKLSAgICAgICAgZGVmIGdldF9jX2luaXRpYWxpemVyKCk6Ci0gICAgICAgICAgICByZXR1cm4g
ImZhbHNlIgotCi0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGdldF9qc19iaW5k
X3R5cGUoKToKLSAgICAgICAgICAgIHJldHVybiAiYm9vbGVhbiIKLQotICAgICAgICBAc3RhdGlj
bWV0aG9kCi0gICAgICAgIGRlZiBnZXRfdmFsaWRhdGVfbWV0aG9kX3BhcmFtcygpOgotICAgICAg
ICAgICAgY2xhc3MgVmFsaWRhdGVNZXRob2RQYXJhbXM6Ci0gICAgICAgICAgICAgICAgdGVtcGxh
dGVfdHlwZSA9ICJCb29sZWFuIgotICAgICAgICAgICAgcmV0dXJuIFZhbGlkYXRlTWV0aG9kUGFy
YW1zCi0KLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBkZWYgZ2V0X291dHB1dF9wYXNz
X21vZGVsKCk6Ci0gICAgICAgICAgICByZXR1cm4gUmF3VHlwZXMuT3V0cHV0UGFzc01vZGVsLkJ5
UG9pbnRlcgotCi0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGlzX2hlYXZ5X3Zh
bHVlKCk6Ci0gICAgICAgICAgICByZXR1cm4gRmFsc2UKLQotICAgICAgICBAc3RhdGljbWV0aG9k
Ci0gICAgICAgIGRlZiBnZXRfYXJyYXlfaXRlbV9yYXdfY190eXBlX3RleHQoKToKLSAgICAgICAg
ICAgIHJldHVybiAiYm9vbCIKLQotICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgIGRlZiBn
ZXRfcmF3X3R5cGVfbW9kZWwoKToKLSAgICAgICAgICAgIHJldHVybiBUeXBlTW9kZWwuQm9vbAot
Ci0gICAgY2xhc3MgT2JqZWN0KEJhc2VUeXBlKToKLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAg
ICAgICBkZWYgZ2V0X2dldHRlcl9uYW1lKCk6Ci0gICAgICAgICAgICByZXR1cm4gIk9iamVjdCIK
LQotICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgIGRlZiBnZXRfc2V0dGVyX25hbWUoKToK
LSAgICAgICAgICAgIHJldHVybiAiVmFsdWUiCi0KLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAg
ICAgICBkZWYgZ2V0X2NfaW5pdGlhbGl6ZXIoKToKLSAgICAgICAgICAgIHJldHVybiAiSW5zcGVj
dG9yT2JqZWN0OjpjcmVhdGUoKSIKLQotICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgIGRl
ZiBnZXRfanNfYmluZF90eXBlKCk6Ci0gICAgICAgICAgICByZXR1cm4gIm9iamVjdCIKLQotICAg
ICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgIGRlZiBnZXRfb3V0cHV0X2FyZ3VtZW50X3ByZWZp
eCgpOgotICAgICAgICAgICAgcmV0dXJuICIiCi0KLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAg
ICAgICBkZWYgZ2V0X3ZhbGlkYXRlX21ldGhvZF9wYXJhbXMoKToKLSAgICAgICAgICAgIGNsYXNz
IFZhbGlkYXRlTWV0aG9kUGFyYW1zOgotICAgICAgICAgICAgICAgIHRlbXBsYXRlX3R5cGUgPSAi
T2JqZWN0IgotICAgICAgICAgICAgcmV0dXJuIFZhbGlkYXRlTWV0aG9kUGFyYW1zCi0KLSAgICAg
ICAgQHN0YXRpY21ldGhvZAotICAgICAgICBkZWYgZ2V0X291dHB1dF9wYXNzX21vZGVsKCk6Ci0g
ICAgICAgICAgICByZXR1cm4gUmF3VHlwZXMuT3V0cHV0UGFzc01vZGVsLkJ5UmVmZXJlbmNlCi0K
LSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBkZWYgaXNfaGVhdnlfdmFsdWUoKToKLSAg
ICAgICAgICAgIHJldHVybiBUcnVlCi0KLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBk
ZWYgZ2V0X2FycmF5X2l0ZW1fcmF3X2NfdHlwZV90ZXh0KCk6Ci0gICAgICAgICAgICByZXR1cm4g
Ikluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0IgotCi0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAg
ICAgICAgZGVmIGdldF9yYXdfdHlwZV9tb2RlbCgpOgotICAgICAgICAgICAgcmV0dXJuIFR5cGVN
b2RlbC5PYmplY3QKLQotICAgIGNsYXNzIEFueShCYXNlVHlwZSk6Ci0gICAgICAgIEBzdGF0aWNt
ZXRob2QKLSAgICAgICAgZGVmIGdldF9nZXR0ZXJfbmFtZSgpOgotICAgICAgICAgICAgcmV0dXJu
ICJWYWx1ZSIKLQotICAgICAgICBnZXRfc2V0dGVyX25hbWUgPSBnZXRfZ2V0dGVyX25hbWUKLQot
ICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgIGRlZiBnZXRfY19pbml0aWFsaXplcigpOgot
ICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJVbnN1cHBvcnRlZCIpCi0KLSAgICAgICAgQHN0
YXRpY21ldGhvZAotICAgICAgICBkZWYgZ2V0X2pzX2JpbmRfdHlwZSgpOgotICAgICAgICAgICAg
cmFpc2UgRXhjZXB0aW9uKCJVbnN1cHBvcnRlZCIpCi0KLSAgICAgICAgQHN0YXRpY21ldGhvZAot
ICAgICAgICBkZWYgZ2V0X3Jhd192YWxpZGF0b3JfY2FsbF90ZXh0KCk6Ci0gICAgICAgICAgICBy
ZXR1cm4gIlJ1bnRpbWVDYXN0SGVscGVyOjphc3NlcnRBbnkiCi0KLSAgICAgICAgQHN0YXRpY21l
dGhvZAotICAgICAgICBkZWYgZ2V0X291dHB1dF9wYXNzX21vZGVsKCk6Ci0gICAgICAgICAgICBy
ZXR1cm4gUmF3VHlwZXMuT3V0cHV0UGFzc01vZGVsLkJ5UmVmZXJlbmNlCi0KLSAgICAgICAgQHN0
YXRpY21ldGhvZAotICAgICAgICBkZWYgaXNfaGVhdnlfdmFsdWUoKToKLSAgICAgICAgICAgIHJl
dHVybiBUcnVlCi0KLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBkZWYgZ2V0X2FycmF5
X2l0ZW1fcmF3X2NfdHlwZV90ZXh0KCk6Ci0gICAgICAgICAgICByZXR1cm4gIkluc3BlY3Rvcjo6
SW5zcGVjdG9yVmFsdWUiCi0KLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBkZWYgZ2V0
X3Jhd190eXBlX21vZGVsKCk6Ci0gICAgICAgICAgICByZXR1cm4gVHlwZU1vZGVsLkFueQotCi0g
ICAgY2xhc3MgQXJyYXkoQmFzZVR5cGUpOgotICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAg
IGRlZiBnZXRfZ2V0dGVyX25hbWUoKToKLSAgICAgICAgICAgIHJldHVybiAiQXJyYXkiCi0KLSAg
ICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBkZWYgZ2V0X3NldHRlcl9uYW1lKCk6Ci0gICAg
ICAgICAgICByZXR1cm4gIlZhbHVlIgotCi0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAg
ZGVmIGdldF9jX2luaXRpYWxpemVyKCk6Ci0gICAgICAgICAgICByZXR1cm4gIkluc3BlY3RvckFy
cmF5OjpjcmVhdGUoKSIKLQotICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgIGRlZiBnZXRf
anNfYmluZF90eXBlKCk6Ci0gICAgICAgICAgICByZXR1cm4gIm9iamVjdCIKLQotICAgICAgICBA
c3RhdGljbWV0aG9kCi0gICAgICAgIGRlZiBnZXRfb3V0cHV0X2FyZ3VtZW50X3ByZWZpeCgpOgot
ICAgICAgICAgICAgcmV0dXJuICIiCi0KLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBk
ZWYgZ2V0X3ZhbGlkYXRlX21ldGhvZF9wYXJhbXMoKToKLSAgICAgICAgICAgIGNsYXNzIFZhbGlk
YXRlTWV0aG9kUGFyYW1zOgotICAgICAgICAgICAgICAgIHRlbXBsYXRlX3R5cGUgPSAiQXJyYXki
Ci0gICAgICAgICAgICByZXR1cm4gVmFsaWRhdGVNZXRob2RQYXJhbXMKLQotICAgICAgICBAc3Rh
dGljbWV0aG9kCi0gICAgICAgIGRlZiBnZXRfb3V0cHV0X3Bhc3NfbW9kZWwoKToKLSAgICAgICAg
ICAgIHJldHVybiBSYXdUeXBlcy5PdXRwdXRQYXNzTW9kZWwuQnlSZWZlcmVuY2UKLQotICAgICAg
ICBAc3RhdGljbWV0aG9kCi0gICAgICAgIGRlZiBpc19oZWF2eV92YWx1ZSgpOgotICAgICAgICAg
ICAgcmV0dXJuIFRydWUKLQotICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgIGRlZiBnZXRf
YXJyYXlfaXRlbV9yYXdfY190eXBlX3RleHQoKToKLSAgICAgICAgICAgIHJldHVybiAiSW5zcGVj
dG9yOjpJbnNwZWN0b3JBcnJheSIKLQotICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgIGRl
ZiBnZXRfcmF3X3R5cGVfbW9kZWwoKToKLSAgICAgICAgICAgIHJldHVybiBUeXBlTW9kZWwuQXJy
YXkKLQotCi1kZWYgcmVwbGFjZV9yaWdodF9zaGlmdChpbnB1dF9zdHIpOgotICAgIHJldHVybiBp
bnB1dF9zdHIucmVwbGFjZSgiPj4iLCAiPiA+IikKLQotCi1jbGFzcyBDb21tYW5kUmV0dXJuUGFz
c01vZGVsOgotICAgIGNsYXNzIEJ5UmVmZXJlbmNlOgotICAgICAgICBkZWYgX19pbml0X18oc2Vs
ZiwgdmFyX3R5cGUsIHNldF9jb25kaXRpb24pOgotICAgICAgICAgICAgc2VsZi52YXJfdHlwZSA9
IHZhcl90eXBlCi0gICAgICAgICAgICBzZWxmLnNldF9jb25kaXRpb24gPSBzZXRfY29uZGl0aW9u
Ci0KLSAgICAgICAgZGVmIGdldF9yZXR1cm5fdmFyX3R5cGUoc2VsZik6Ci0gICAgICAgICAgICBy
ZXR1cm4gc2VsZi52YXJfdHlwZQotCi0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVm
IGdldF9vdXRwdXRfYXJndW1lbnRfcHJlZml4KCk6Ci0gICAgICAgICAgICByZXR1cm4gIiIKLQot
ICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgIGRlZiBnZXRfb3V0cHV0X3RvX3Jhd19leHBy
ZXNzaW9uKCk6Ci0gICAgICAgICAgICByZXR1cm4gIiVzIgotCi0gICAgICAgIGRlZiBnZXRfb3V0
cHV0X3BhcmFtZXRlcl90eXBlKHNlbGYpOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYudmFyX3R5
cGUgKyAiJiIKLQotICAgICAgICBkZWYgZ2V0X3NldF9yZXR1cm5fY29uZGl0aW9uKHNlbGYpOgot
ICAgICAgICAgICAgcmV0dXJuIHNlbGYuc2V0X2NvbmRpdGlvbgotCi0gICAgY2xhc3MgQnlQb2lu
dGVyOgotICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgdmFyX3R5cGUpOgotICAgICAgICAgICAg
c2VsZi52YXJfdHlwZSA9IHZhcl90eXBlCi0KLSAgICAgICAgZGVmIGdldF9yZXR1cm5fdmFyX3R5
cGUoc2VsZik6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi52YXJfdHlwZQotCi0gICAgICAgIEBz
dGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGdldF9vdXRwdXRfYXJndW1lbnRfcHJlZml4KCk6Ci0g
ICAgICAgICAgICByZXR1cm4gIiYiCi0KLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBk
ZWYgZ2V0X291dHB1dF90b19yYXdfZXhwcmVzc2lvbigpOgotICAgICAgICAgICAgcmV0dXJuICIl
cyIKLQotICAgICAgICBkZWYgZ2V0X291dHB1dF9wYXJhbWV0ZXJfdHlwZShzZWxmKToKLSAgICAg
ICAgICAgIHJldHVybiBzZWxmLnZhcl90eXBlICsgIioiCi0KLSAgICAgICAgQHN0YXRpY21ldGhv
ZAotICAgICAgICBkZWYgZ2V0X3NldF9yZXR1cm5fY29uZGl0aW9uKCk6Ci0gICAgICAgICAgICBy
ZXR1cm4gTm9uZQotCi0gICAgY2xhc3MgT3B0T3V0cHV0OgotICAgICAgICBkZWYgX19pbml0X18o
c2VsZiwgdmFyX3R5cGUpOgotICAgICAgICAgICAgc2VsZi52YXJfdHlwZSA9IHZhcl90eXBlCi0K
LSAgICAgICAgZGVmIGdldF9yZXR1cm5fdmFyX3R5cGUoc2VsZik6Ci0gICAgICAgICAgICByZXR1
cm4gIkluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6Ok9wdE91dHB1dDwlcz4iICUgc2VsZi52YXJfdHlw
ZQotCi0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGdldF9vdXRwdXRfYXJndW1l
bnRfcHJlZml4KCk6Ci0gICAgICAgICAgICByZXR1cm4gIiYiCi0KLSAgICAgICAgQHN0YXRpY21l
dGhvZAotICAgICAgICBkZWYgZ2V0X291dHB1dF90b19yYXdfZXhwcmVzc2lvbigpOgotICAgICAg
ICAgICAgcmV0dXJuICIlcy5nZXRWYWx1ZSgpIgotCi0gICAgICAgIGRlZiBnZXRfb3V0cHV0X3Bh
cmFtZXRlcl90eXBlKHNlbGYpOgotICAgICAgICAgICAgcmV0dXJuICJJbnNwZWN0b3I6OlR5cGVC
dWlsZGVyOjpPcHRPdXRwdXQ8JXM+KiIgJSBzZWxmLnZhcl90eXBlCi0KLSAgICAgICAgQHN0YXRp
Y21ldGhvZAotICAgICAgICBkZWYgZ2V0X3NldF9yZXR1cm5fY29uZGl0aW9uKCk6Ci0gICAgICAg
ICAgICByZXR1cm4gIiVzLmlzQXNzaWduZWQoKSIKLQotCi1jbGFzcyBUeXBlTW9kZWw6Ci0gICAg
Y2xhc3MgUmVmUHRyQmFzZWQob2JqZWN0KToKLSAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNs
YXNzX25hbWUpOgotICAgICAgICAgICAgc2VsZi5jbGFzc19uYW1lID0gY2xhc3NfbmFtZQotICAg
ICAgICAgICAgc2VsZi5vcHRpb25hbCA9IEZhbHNlCi0KLSAgICAgICAgZGVmIGdldF9vcHRpb25h
bChzZWxmKToKLSAgICAgICAgICAgIHJlc3VsdCA9IFR5cGVNb2RlbC5SZWZQdHJCYXNlZChzZWxm
LmNsYXNzX25hbWUpCi0gICAgICAgICAgICByZXN1bHQub3B0aW9uYWwgPSBUcnVlCi0gICAgICAg
ICAgICByZXR1cm4gcmVzdWx0Ci0KLSAgICAgICAgZGVmIGdldF9jb21tYW5kX3JldHVybl9wYXNz
X21vZGVsKHNlbGYpOgotICAgICAgICAgICAgaWYgc2VsZi5vcHRpb25hbDoKLSAgICAgICAgICAg
ICAgICBzZXRfY29uZGl0aW9uID0gIiVzIgotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAg
ICAgICBzZXRfY29uZGl0aW9uID0gTm9uZQotICAgICAgICAgICAgcmV0dXJuIENvbW1hbmRSZXR1
cm5QYXNzTW9kZWwuQnlSZWZlcmVuY2UocmVwbGFjZV9yaWdodF9zaGlmdCgiUmVmUHRyPCVzPiIg
JSBzZWxmLmNsYXNzX25hbWUpLCBzZXRfY29uZGl0aW9uKQotCi0gICAgICAgIGRlZiBnZXRfaW5w
dXRfcGFyYW1fdHlwZV90ZXh0KHNlbGYpOgotICAgICAgICAgICAgcmV0dXJuIHJlcGxhY2Vfcmln
aHRfc2hpZnQoIlBhc3NSZWZQdHI8JXM+IiAlIHNlbGYuY2xhc3NfbmFtZSkKLQotICAgICAgICBA
c3RhdGljbWV0aG9kCi0gICAgICAgIGRlZiBnZXRfZXZlbnRfc2V0dGVyX2V4cHJlc3Npb25fcGF0
dGVybigpOgotICAgICAgICAgICAgcmV0dXJuICIlcyIKLQotICAgIGNsYXNzIEVudW0ob2JqZWN0
KToKLSAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGJhc2VfdHlwZV9uYW1lKToKLSAgICAgICAg
ICAgIHNlbGYudHlwZV9uYW1lID0gYmFzZV90eXBlX25hbWUgKyAiOjpFbnVtIgotCi0gICAgICAg
IGRlZiBnZXRfb3B0aW9uYWwoYmFzZV9zZWxmKToKLSAgICAgICAgICAgIGNsYXNzIEVudW1PcHRp
b25hbDoKLSAgICAgICAgICAgICAgICBAY2xhc3NtZXRob2QKLSAgICAgICAgICAgICAgICBkZWYg
Z2V0X29wdGlvbmFsKGNscyk6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBjbHMKLQotICAg
ICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgICAgICBkZWYgZ2V0X2NvbW1h
bmRfcmV0dXJuX3Bhc3NfbW9kZWwoKToKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENvbW1h
bmRSZXR1cm5QYXNzTW9kZWwuT3B0T3V0cHV0KGJhc2Vfc2VsZi50eXBlX25hbWUpCi0KLSAgICAg
ICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICAgICAgZGVmIGdldF9pbnB1dF9w
YXJhbV90eXBlX3RleHQoKToKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJhc2Vfc2VsZi50
eXBlX25hbWUgKyAiKiIKLQotICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAg
ICAgICAgICBkZWYgZ2V0X2V2ZW50X3NldHRlcl9leHByZXNzaW9uX3BhdHRlcm4oKToKLSAgICAg
ICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJUT0RPIikKLSAgICAgICAgICAgIHJldHVy
biBFbnVtT3B0aW9uYWwKLQotICAgICAgICBkZWYgZ2V0X2NvbW1hbmRfcmV0dXJuX3Bhc3NfbW9k
ZWwoc2VsZik6Ci0gICAgICAgICAgICByZXR1cm4gQ29tbWFuZFJldHVyblBhc3NNb2RlbC5CeVBv
aW50ZXIoc2VsZi50eXBlX25hbWUpCi0KLSAgICAgICAgZGVmIGdldF9pbnB1dF9wYXJhbV90eXBl
X3RleHQoc2VsZik6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi50eXBlX25hbWUKLQotICAgICAg
ICBAc3RhdGljbWV0aG9kCi0gICAgICAgIGRlZiBnZXRfZXZlbnRfc2V0dGVyX2V4cHJlc3Npb25f
cGF0dGVybigpOgotICAgICAgICAgICAgcmV0dXJuICIlcyIKLQotICAgIGNsYXNzIFZhbHVlVHlw
ZShvYmplY3QpOgotICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgdHlwZV9uYW1lLCBpc19oZWF2
eSk6Ci0gICAgICAgICAgICBzZWxmLnR5cGVfbmFtZSA9IHR5cGVfbmFtZQotICAgICAgICAgICAg
c2VsZi5pc19oZWF2eSA9IGlzX2hlYXZ5Ci0KLSAgICAgICAgZGVmIGdldF9vcHRpb25hbChzZWxm
KToKLSAgICAgICAgICAgIHJldHVybiBzZWxmLlZhbHVlT3B0aW9uYWwoc2VsZikKLQotICAgICAg
ICBkZWYgZ2V0X2NvbW1hbmRfcmV0dXJuX3Bhc3NfbW9kZWwoc2VsZik6Ci0gICAgICAgICAgICBy
ZXR1cm4gQ29tbWFuZFJldHVyblBhc3NNb2RlbC5CeVBvaW50ZXIoc2VsZi50eXBlX25hbWUpCi0K
LSAgICAgICAgZGVmIGdldF9pbnB1dF9wYXJhbV90eXBlX3RleHQoc2VsZik6Ci0gICAgICAgICAg
ICBpZiBzZWxmLmlzX2hlYXZ5OgotICAgICAgICAgICAgICAgIHJldHVybiAiY29uc3QgJXMmIiAl
IHNlbGYudHlwZV9uYW1lCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJldHVy
biBzZWxmLnR5cGVfbmFtZQotCi0gICAgICAgIGRlZiBnZXRfb3B0X291dHB1dF90eXBlXyhzZWxm
KToKLSAgICAgICAgICAgIHJldHVybiBzZWxmLnR5cGVfbmFtZQotCi0gICAgICAgIEBzdGF0aWNt
ZXRob2QKLSAgICAgICAgZGVmIGdldF9ldmVudF9zZXR0ZXJfZXhwcmVzc2lvbl9wYXR0ZXJuKCk6
Ci0gICAgICAgICAgICByZXR1cm4gIiVzIgotCi0gICAgICAgIGNsYXNzIFZhbHVlT3B0aW9uYWw6
Ci0gICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgYmFzZSk6Ci0gICAgICAgICAgICAgICAg
c2VsZi5iYXNlID0gYmFzZQotCi0gICAgICAgICAgICBkZWYgZ2V0X29wdGlvbmFsKHNlbGYpOgot
ICAgICAgICAgICAgICAgIHJldHVybiBzZWxmCi0KLSAgICAgICAgICAgIGRlZiBnZXRfY29tbWFu
ZF9yZXR1cm5fcGFzc19tb2RlbChzZWxmKToKLSAgICAgICAgICAgICAgICByZXR1cm4gQ29tbWFu
ZFJldHVyblBhc3NNb2RlbC5PcHRPdXRwdXQoc2VsZi5iYXNlLmdldF9vcHRfb3V0cHV0X3R5cGVf
KCkpCi0KLSAgICAgICAgICAgIGRlZiBnZXRfaW5wdXRfcGFyYW1fdHlwZV90ZXh0KHNlbGYpOgot
ICAgICAgICAgICAgICAgIHJldHVybiAiY29uc3QgJXMqIGNvbnN0IiAlIHNlbGYuYmFzZS50eXBl
X25hbWUKLQotICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgZGVmIGdldF9l
dmVudF9zZXR0ZXJfZXhwcmVzc2lvbl9wYXR0ZXJuKCk6Ci0gICAgICAgICAgICAgICAgcmV0dXJu
ICIqJXMiCi0KLSAgICBjbGFzcyBFeGFjdGx5SW50KFZhbHVlVHlwZSk6Ci0gICAgICAgIGRlZiBf
X2luaXRfXyhzZWxmKToKLSAgICAgICAgICAgIFR5cGVNb2RlbC5WYWx1ZVR5cGUuX19pbml0X18o
c2VsZiwgImludCIsIEZhbHNlKQotCi0gICAgICAgIGRlZiBnZXRfaW5wdXRfcGFyYW1fdHlwZV90
ZXh0KHNlbGYpOgotICAgICAgICAgICAgcmV0dXJuICJJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpF
eGFjdGx5SW50IgotCi0gICAgICAgIGRlZiBnZXRfb3B0X291dHB1dF90eXBlXyhzZWxmKToKLSAg
ICAgICAgICAgIHJldHVybiAiSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6RXhhY3RseUludCIKLQot
ICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBpbml0X2NsYXNzKGNscyk6Ci0gICAgICAgIGNscy5C
b29sID0gY2xzLlZhbHVlVHlwZSgiYm9vbCIsIEZhbHNlKQotICAgICAgICBpZiBFWEFDVExZX0lO
VF9TVVBQT1JURUQ6Ci0gICAgICAgICAgICBjbHMuSW50ID0gY2xzLkV4YWN0bHlJbnQoKQotICAg
ICAgICBlbHNlOgotICAgICAgICAgICAgY2xzLkludCA9IGNscy5WYWx1ZVR5cGUoImludCIsIEZh
bHNlKQotICAgICAgICBjbHMuTnVtYmVyID0gY2xzLlZhbHVlVHlwZSgiZG91YmxlIiwgRmFsc2Up
Ci0gICAgICAgIGNscy5TdHJpbmcgPSBjbHMuVmFsdWVUeXBlKCJTdHJpbmciLCBUcnVlLCkKLSAg
ICAgICAgY2xzLk9iamVjdCA9IGNscy5SZWZQdHJCYXNlZCgiSW5zcGVjdG9yOjpJbnNwZWN0b3JP
YmplY3QiKQotICAgICAgICBjbHMuQXJyYXkgPSBjbHMuUmVmUHRyQmFzZWQoIkluc3BlY3Rvcjo6
SW5zcGVjdG9yQXJyYXkiKQotICAgICAgICBjbHMuQW55ID0gY2xzLlJlZlB0ckJhc2VkKCJJbnNw
ZWN0b3I6Okluc3BlY3RvclZhbHVlIikKLQotVHlwZU1vZGVsLmluaXRfY2xhc3MoKQotCi0KLSMg
Q29sbGVjdGlvbiBvZiBJbnNwZWN0b3JPYmplY3QgY2xhc3MgbWV0aG9kcyB0aGF0IGFyZSBsaWtl
bHkgdG8gYmUgb3ZlcmxvYWRlZCBpbiBnZW5lcmF0ZWQgY2xhc3MuCi0jIFdlIG11c3QgZXhwbGlj
aXRseSBpbXBvcnQgYWxsIG92ZXJsb2FkZWQgbWV0aG9kcyBvciB0aGV5IHdvbid0IGJlIGF2YWls
YWJsZSB0byB1c2VyLgotSU5TUEVDVE9SX09CSkVDVF9TRVRURVJfTkFNRVMgPSBmcm96ZW5zZXQo
WyJzZXRWYWx1ZSIsICJzZXRCb29sZWFuIiwgInNldE51bWJlciIsICJzZXRTdHJpbmciLCAic2V0
VmFsdWUiLCAic2V0T2JqZWN0IiwgInNldEFycmF5Il0pCi0KLQotZGVmIGZpeF90eXBlX25hbWUo
anNvbl9uYW1lKToKLSAgICBpZiBqc29uX25hbWUgaW4gVFlQRV9OQU1FX0ZJWF9NQVA6Ci0gICAg
ICAgIGZpeGVkID0gVFlQRV9OQU1FX0ZJWF9NQVBbanNvbl9uYW1lXQotCi0gICAgICAgIGNsYXNz
IFJlc3VsdChvYmplY3QpOgotICAgICAgICAgICAgY2xhc3NfbmFtZSA9IGZpeGVkCi0KLSAgICAg
ICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgIGRlZiBvdXRwdXRfY29tbWVudCh3cml0
ZXIpOgotICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCIvLyBUeXBlIG9yaWdpbmFsbHkg
d2FzIG5hbWVkICclcycuXG4iICUganNvbl9uYW1lKQotICAgIGVsc2U6Ci0KLSAgICAgICAgY2xh
c3MgUmVzdWx0KG9iamVjdCk6Ci0gICAgICAgICAgICBjbGFzc19uYW1lID0ganNvbl9uYW1lCi0K
LSAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgIGRlZiBvdXRwdXRfY29tbWVu
dCh3cml0ZXIpOgotICAgICAgICAgICAgICAgIHBhc3MKLQotICAgIHJldHVybiBSZXN1bHQKLQot
Ci1jbGFzcyBXcml0ZXI6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG91dHB1dCwgaW5kZW50KToK
LSAgICAgICAgc2VsZi5vdXRwdXQgPSBvdXRwdXQKLSAgICAgICAgc2VsZi5pbmRlbnQgPSBpbmRl
bnQKLQotICAgIGRlZiBuZXdsaW5lKHNlbGYsIHN0cik6Ci0gICAgICAgIGlmIChzZWxmLmluZGVu
dCk6Ci0gICAgICAgICAgICBzZWxmLm91dHB1dC5hcHBlbmQoc2VsZi5pbmRlbnQpCi0gICAgICAg
IHNlbGYub3V0cHV0LmFwcGVuZChzdHIpCi0KLSAgICBkZWYgYXBwZW5kKHNlbGYsIHN0cik6Ci0g
ICAgICAgIHNlbGYub3V0cHV0LmFwcGVuZChzdHIpCi0KLSAgICBkZWYgbmV3bGluZV9tdWx0aWxp
bmUoc2VsZiwgc3RyKToKLSAgICAgICAgcGFydHMgPSBzdHIuc3BsaXQoJ1xuJykKLSAgICAgICAg
c2VsZi5uZXdsaW5lKHBhcnRzWzBdKQotICAgICAgICBmb3IgcCBpbiBwYXJ0c1sxOl06Ci0gICAg
ICAgICAgICBzZWxmLm91dHB1dC5hcHBlbmQoJ1xuJykKLSAgICAgICAgICAgIGlmIHA6Ci0gICAg
ICAgICAgICAgICAgc2VsZi5uZXdsaW5lKHApCi0KLSAgICBkZWYgYXBwZW5kX211bHRpbGluZShz
ZWxmLCBzdHIpOgotICAgICAgICBwYXJ0cyA9IHN0ci5zcGxpdCgnXG4nKQotICAgICAgICBzZWxm
LmFwcGVuZChwYXJ0c1swXSkKLSAgICAgICAgZm9yIHAgaW4gcGFydHNbMTpdOgotICAgICAgICAg
ICAgc2VsZi5vdXRwdXQuYXBwZW5kKCdcbicpCi0gICAgICAgICAgICBpZiBwOgotICAgICAgICAg
ICAgICAgIHNlbGYubmV3bGluZShwKQotCi0gICAgZGVmIGdldF9pbmRlbnQoc2VsZik6Ci0gICAg
ICAgIHJldHVybiBzZWxmLmluZGVudAotCi0gICAgZGVmIGdldF9pbmRlbnRlZChzZWxmLCBhZGRp
dGlvbmFsX2luZGVudCk6Ci0gICAgICAgIHJldHVybiBXcml0ZXIoc2VsZi5vdXRwdXQsIHNlbGYu
aW5kZW50ICsgYWRkaXRpb25hbF9pbmRlbnQpCi0KLSAgICBkZWYgaW5zZXJ0X3dyaXRlcihzZWxm
LCBhZGRpdGlvbmFsX2luZGVudCk6Ci0gICAgICAgIG5ld19vdXRwdXQgPSBbXQotICAgICAgICBz
ZWxmLm91dHB1dC5hcHBlbmQobmV3X291dHB1dCkKLSAgICAgICAgcmV0dXJuIFdyaXRlcihuZXdf
b3V0cHV0LCBzZWxmLmluZGVudCArIGFkZGl0aW9uYWxfaW5kZW50KQotCi0KLWNsYXNzIEVudW1D
b25zdGFudHM6Ci0gICAgbWFwXyA9IHt9Ci0gICAgY29uc3RhbnRzXyA9IFtdCi0KLSAgICBAY2xh
c3NtZXRob2QKLSAgICBkZWYgYWRkX2NvbnN0YW50KGNscywgdmFsdWUpOgotICAgICAgICBpZiB2
YWx1ZSBpbiBjbHMubWFwXzoKLSAgICAgICAgICAgIHJldHVybiBjbHMubWFwX1t2YWx1ZV0KLSAg
ICAgICAgZWxzZToKLSAgICAgICAgICAgIHBvcyA9IGxlbihjbHMubWFwXykKLSAgICAgICAgICAg
IGNscy5tYXBfW3ZhbHVlXSA9IHBvcwotICAgICAgICAgICAgY2xzLmNvbnN0YW50c18uYXBwZW5k
KHZhbHVlKQotICAgICAgICAgICAgcmV0dXJuIHBvcwotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAg
ZGVmIGdldF9lbnVtX2NvbnN0YW50X2NvZGUoY2xzKToKLSAgICAgICAgb3V0cHV0ID0gW10KLSAg
ICAgICAgZm9yIGl0ZW0gaW4gY2xzLmNvbnN0YW50c186Ci0gICAgICAgICAgICBvdXRwdXQuYXBw
ZW5kKCIgICAgXCIiICsgaXRlbSArICJcIiIpCi0gICAgICAgIHJldHVybiAiLFxuIi5qb2luKG91
dHB1dCkgKyAiXG4iCi0KLQotIyBUeXBlYnVpbGRlciBjb2RlIGlzIGdlbmVyYXRlZCBpbiBzZXZl
cmFsIHBhc3NlczogZmlyc3QgdHlwZWRlZnMsIHRoZW4gb3RoZXIgY2xhc3Nlcy4KLSMgTWFudWFs
IHBhc3MgbWFuYWdlbWVudCBpcyBuZWVkZWQgYmVjYXVzZSB3ZSBjYW5ub3QgaGF2ZSBmb3J3YXJk
IGRlY2xhcmF0aW9ucyBmb3IgdHlwZWRlZnMuCi1jbGFzcyBUeXBlQnVpbGRlclBhc3M6Ci0gICAg
VFlQRURFRiA9ICJ0eXBlZGVmIgotICAgIE1BSU4gPSAibWFpbiIKLQotCi1jbGFzcyBUeXBlQmlu
ZGluZ3M6Ci0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBjcmVhdGVfbmFtZWRfdHlwZV9kZWNs
YXJhdGlvbihqc29uX3R5cGFibGUsIGNvbnRleHRfZG9tYWluX25hbWUsIHR5cGVfZGF0YSk6Ci0g
ICAgICAgIGpzb25fdHlwZSA9IHR5cGVfZGF0YS5nZXRfanNvbl90eXBlKCkKLQotICAgICAgICBj
bGFzcyBIZWxwZXI6Ci0gICAgICAgICAgICBpc19hZF9ob2MgPSBGYWxzZQotICAgICAgICAgICAg
ZnVsbF9uYW1lX3ByZWZpeF9mb3JfdXNlID0gIkluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OiIgKyBj
b250ZXh0X2RvbWFpbl9uYW1lICsgIjo6IgotICAgICAgICAgICAgZnVsbF9uYW1lX3ByZWZpeF9m
b3JfaW1wbCA9ICJJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjoiICsgY29udGV4dF9kb21haW5fbmFt
ZSArICI6OiIKLQotICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgZGVmIHdy
aXRlX2RvYyh3cml0ZXIpOgotICAgICAgICAgICAgICAgIGlmICJkZXNjcmlwdGlvbiIgaW4ganNv
bl90eXBlOgotICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3bGluZSgiLyogIikKLSAgICAg
ICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVuZChqc29uX3R5cGVbImRlc2NyaXB0aW9uIl0pCi0g
ICAgICAgICAgICAgICAgICAgIHdyaXRlci5hcHBlbmQoIiAqL1xuIikKLQotICAgICAgICAgICAg
QHN0YXRpY21ldGhvZAotICAgICAgICAgICAgZGVmIGFkZF90b19mb3J3YXJkX2xpc3RlbmVyKGZv
cndhcmRfbGlzdGVuZXIpOgotICAgICAgICAgICAgICAgIGZvcndhcmRfbGlzdGVuZXIuYWRkX3R5
cGVfZGF0YSh0eXBlX2RhdGEpCi0KLQotICAgICAgICBmaXhlZF90eXBlX25hbWUgPSBmaXhfdHlw
ZV9uYW1lKGpzb25fdHlwZVsiaWQiXSkKLSAgICAgICAgcmV0dXJuIFR5cGVCaW5kaW5ncy5jcmVh
dGVfdHlwZV9kZWNsYXJhdGlvbl8oanNvbl90eXBhYmxlLCBjb250ZXh0X2RvbWFpbl9uYW1lLCBm
aXhlZF90eXBlX25hbWUsIEhlbHBlcikKLQotICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgY3Jl
YXRlX2FkX2hvY190eXBlX2RlY2xhcmF0aW9uKGpzb25fdHlwYWJsZSwgY29udGV4dF9kb21haW5f
bmFtZSwgYWRfaG9jX3R5cGVfY29udGV4dCk6Ci0gICAgICAgIGNsYXNzIEhlbHBlcjoKLSAgICAg
ICAgICAgIGlzX2FkX2hvYyA9IFRydWUKLSAgICAgICAgICAgIGZ1bGxfbmFtZV9wcmVmaXhfZm9y
X3VzZSA9IGFkX2hvY190eXBlX2NvbnRleHQuY29udGFpbmVyX3JlbGF0aXZlX25hbWVfcHJlZml4
Ci0gICAgICAgICAgICBmdWxsX25hbWVfcHJlZml4X2Zvcl9pbXBsID0gYWRfaG9jX3R5cGVfY29u
dGV4dC5jb250YWluZXJfZnVsbF9uYW1lX3ByZWZpeAotCi0gICAgICAgICAgICBAc3RhdGljbWV0
aG9kCi0gICAgICAgICAgICBkZWYgd3JpdGVfZG9jKHdyaXRlcik6Ci0gICAgICAgICAgICAgICAg
cGFzcwotCi0gICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICBkZWYgYWRkX3Rv
X2ZvcndhcmRfbGlzdGVuZXIoZm9yd2FyZF9saXN0ZW5lcik6Ci0gICAgICAgICAgICAgICAgcGFz
cwotICAgICAgICBmaXhlZF90eXBlX25hbWUgPSBhZF9ob2NfdHlwZV9jb250ZXh0LmdldF90eXBl
X25hbWVfZml4KCkKLSAgICAgICAgcmV0dXJuIFR5cGVCaW5kaW5ncy5jcmVhdGVfdHlwZV9kZWNs
YXJhdGlvbl8oanNvbl90eXBhYmxlLCBjb250ZXh0X2RvbWFpbl9uYW1lLCBmaXhlZF90eXBlX25h
bWUsIEhlbHBlcikKLQotICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgY3JlYXRlX3R5cGVfZGVj
bGFyYXRpb25fKGpzb25fdHlwYWJsZSwgY29udGV4dF9kb21haW5fbmFtZSwgZml4ZWRfdHlwZV9u
YW1lLCBoZWxwZXIpOgotICAgICAgICBpZiBqc29uX3R5cGFibGVbInR5cGUiXSA9PSAic3RyaW5n
IjoKLSAgICAgICAgICAgIGlmICJlbnVtIiBpbiBqc29uX3R5cGFibGU6Ci0KLSAgICAgICAgICAg
ICAgICBjbGFzcyBFbnVtQmluZGluZzoKLSAgICAgICAgICAgICAgICAgICAgbmVlZF91c2VyX3J1
bnRpbWVfY2FzdF8gPSBGYWxzZQotICAgICAgICAgICAgICAgICAgICBuZWVkX2ludGVybmFsX3J1
bnRpbWVfY2FzdF8gPSBGYWxzZQotCi0gICAgICAgICAgICAgICAgICAgIEBjbGFzc21ldGhvZAot
ICAgICAgICAgICAgICAgICAgICBkZWYgcmVzb2x2ZV9pbm5lcihjbHMsIHJlc29sdmVfY29udGV4
dCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBwYXNzCi0KLSAgICAgICAgICAgICAgICAgICAg
QGNsYXNzbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgIGRlZiByZXF1ZXN0X3VzZXJfcnVudGlt
ZV9jYXN0KGNscywgcmVxdWVzdCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiByZXF1ZXN0
OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNscy5uZWVkX3VzZXJfcnVudGltZV9jYXN0
XyA9IFRydWUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LmFja25vd2xlZGdl
KCkKLQotICAgICAgICAgICAgICAgICAgICBAY2xhc3NtZXRob2QKLSAgICAgICAgICAgICAgICAg
ICAgZGVmIHJlcXVlc3RfaW50ZXJuYWxfcnVudGltZV9jYXN0KGNscyk6Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBjbHMubmVlZF9pbnRlcm5hbF9ydW50aW1lX2Nhc3RfID0gVHJ1ZQotCi0gICAg
ICAgICAgICAgICAgICAgIEBjbGFzc21ldGhvZAotICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0
X2NvZGVfZ2VuZXJhdG9yKGVudW1fYmluZGluZ19jbHMpOgotICAgICAgICAgICAgICAgICAgICAg
ICAgI0ZJWE1FOiBnZW5lcmF0ZSBhZC1ob2MgZW51bXMgdG9vIG9uY2Ugd2UgZmlndXJlIG91dCBo
b3cgdG8gYmV0dGVyIGltcGxlbWVudCB0aGVtIGluIEMrKy4KLSAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbW1lbnRfb3V0ID0gaGVscGVyLmlzX2FkX2hvYwotCi0gICAgICAgICAgICAgICAgICAg
ICAgICBjbGFzcyBDb2RlR2VuZXJhdG9yOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBz
dGF0aWNtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWYgZ2VuZXJhdGVfdHlw
ZV9idWlsZGVyKHdyaXRlciwgZ2VuZXJhdGVfY29udGV4dCk6Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGVudW0gPSBqc29uX3R5cGFibGVbImVudW0iXQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBoZWxwZXIud3JpdGVfZG9jKHdyaXRlcikKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZW51bV9uYW1lID0gZml4ZWRfdHlwZV9uYW1lLmNsYXNzX25hbWUK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZml4ZWRfdHlwZV9uYW1lLm91dHB1dF9j
b21tZW50KHdyaXRlcikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5l
d2xpbmUoInN0cnVjdCAiKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIu
YXBwZW5kKGVudW1fbmFtZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVy
LmFwcGVuZCgiIHtcbiIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5u
ZXdsaW5lKCIgICAgZW51bSBFbnVtIHtcbiIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGZvciBlbnVtX2l0ZW0gaW4gZW51bToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGVudW1fcG9zID0gRW51bUNvbnN0YW50cy5hZGRfY29uc3RhbnQoZW51bV9pdGVtKQot
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtX2NfbmFtZSA9IGZpeF9j
YW1lbF9jYXNlKGVudW1faXRlbSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmIGl0ZW1fY19uYW1lIGluIFRZUEVfTkFNRV9GSVhfTUFQOgotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGl0ZW1fY19uYW1lID0gVFlQRV9OQU1FX0ZJWF9NQVBbaXRl
bV9jX25hbWVdCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3
bGluZSgiICAgICAgICAiKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3Jp
dGVyLmFwcGVuZChpdGVtX2NfbmFtZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHdyaXRlci5hcHBlbmQoIiA9ICIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB3cml0ZXIuYXBwZW5kKCIlcyIgJSBlbnVtX3BvcykKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHdyaXRlci5hcHBlbmQoIixcbiIpCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCIgICAgfTtcbiIpCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIGVudW1fYmluZGluZ19jbHMubmVlZF91c2VyX3J1bnRpbWVfY2Fz
dF86Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24o
Ik5vdCB5ZXQgaW1wbGVtZW50ZWQiKQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmIGVudW1fYmluZGluZ19jbHMubmVlZF9pbnRlcm5hbF9ydW50aW1lX2Nhc3RfOgotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVuZCgiI2lmICVzXG4iICUg
VkFMSURBVE9SX0lGREVGX05BTUUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB3cml0ZXIubmV3bGluZSgiICAgIHN0YXRpYyB2b2lkIGFzc2VydENvcnJlY3RWYWx1ZShJbnNw
ZWN0b3I6Okluc3BlY3RvclZhbHVlKiB2YWx1ZSk7XG4iKQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVuZCgiI2VuZGlmICAvLyAlc1xuIiAlIFZBTElEQVRP
Ul9JRkRFRl9OQU1FKQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxp
ZGF0b3Jfd3JpdGVyID0gZ2VuZXJhdGVfY29udGV4dC52YWxpZGF0b3Jfd3JpdGVyCi0KLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbWFpbl9maXhlcyA9IERvbWFpbk5hbWVG
aXhlcy5nZXRfZml4ZWRfZGF0YShjb250ZXh0X2RvbWFpbl9uYW1lKQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZG9tYWluX2d1YXJkID0gZG9tYWluX2ZpeGVzLmdldF9ndWFy
ZCgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBkb21haW5fZ3VhcmQ6
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9tYWluX2d1YXJkLmdl
bmVyYXRlX29wZW4odmFsaWRhdG9yX3dyaXRlcikKLQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCJ2b2lkICVzJXM6OmFzc2VydENv
cnJlY3RWYWx1ZShJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlKiB2YWx1ZSlcbiIgJSAoaGVscGVy
LmZ1bGxfbmFtZV9wcmVmaXhfZm9yX2ltcGwsIGVudW1fbmFtZSkpCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIntcbiIpCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUo
IiAgICBXVEY6OlN0cmluZyBzO1xuIikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgiICAgIGJvb2wgY2FzdF9yZXMgPSB2YWx1ZS0+
YXNTdHJpbmcoJnMpO1xuIikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZh
bGlkYXRvcl93cml0ZXIubmV3bGluZSgiICAgIEFTU0VSVChjYXN0X3Jlcyk7XG4iKQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbGVuKGVudW0pID4gMDoKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25kaXRpb25fbGlzdCA9IFtdCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGVudW1faXRlbSBpbiBlbnVt
OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtX3BvcyA9
IEVudW1Db25zdGFudHMuYWRkX2NvbnN0YW50KGVudW1faXRlbSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uX2xpc3QuYXBwZW5kKCJzID09IFwi
JXNcIiIgJSBlbnVtX2l0ZW0pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCIgICAgQVNTRVJUKCVzKTtcbiIgJSAiIHx8ICIu
am9pbihjb25kaXRpb25fbGlzdCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIn1cbiIpCi0KLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIGRvbWFpbl9ndWFyZDoKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkb21haW5fZ3VhcmQuZ2VuZXJhdGVfY2xvc2UodmFsaWRhdG9yX3dy
aXRlcikKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dy
aXRlci5uZXdsaW5lKCJcblxuIikKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3
cml0ZXIubmV3bGluZSgifTsgLy8gc3RydWN0ICIpCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHdyaXRlci5hcHBlbmQoZW51bV9uYW1lKQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB3cml0ZXIuYXBwZW5kKCJcbiIpCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmIHJlZ2lzdGVy
X3VzZShmb3J3YXJkX2xpc3RlbmVyKToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cGFzcwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRlZiBnZXRfZ2VuZXJhdGVfcGFzc19pZCgpOgotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHlwZUJ1aWxkZXJQYXNzLk1BSU4KLQot
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENvZGVHZW5lcmF0b3IKLQotICAgICAgICAg
ICAgICAgICAgICBAY2xhc3NtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgZGVmIGdldF92YWxp
ZGF0b3JfY2FsbF90ZXh0KGNscyk6Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaGVs
cGVyLmZ1bGxfbmFtZV9wcmVmaXhfZm9yX3VzZSArIGZpeGVkX3R5cGVfbmFtZS5jbGFzc19uYW1l
ICsgIjo6YXNzZXJ0Q29ycmVjdFZhbHVlIgotCi0gICAgICAgICAgICAgICAgICAgIEBjbGFzc21l
dGhvZAotICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X2FycmF5X2l0ZW1fY190eXBlX3RleHQo
Y2xzKToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBoZWxwZXIuZnVsbF9uYW1lX3By
ZWZpeF9mb3JfdXNlICsgZml4ZWRfdHlwZV9uYW1lLmNsYXNzX25hbWUgKyAiOjpFbnVtIgotCi0g
ICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgZGVm
IGdldF9zZXR0ZXJfdmFsdWVfZXhwcmVzc2lvbl9wYXR0ZXJuKCk6Ci0gICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gIkluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OmdldCVzRW51bUNvbnN0YW50
VmFsdWUoJXMpIgotCi0gICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAg
ICAgICAgICAgICAgZGVmIHJlZHVjZV90b19yYXdfdHlwZSgpOgotICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIFJhd1R5cGVzLlN0cmluZwotCi0gICAgICAgICAgICAgICAgICAgIEBzdGF0
aWNtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgZGVmIGdldF90eXBlX21vZGVsKCk6Ci0gICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHlwZU1vZGVsLkVudW0oaGVscGVyLmZ1bGxfbmFt
ZV9wcmVmaXhfZm9yX3VzZSArIGZpeGVkX3R5cGVfbmFtZS5jbGFzc19uYW1lKQotCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIEVudW1CaW5kaW5nCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAg
ICAgICAgIGlmIGhlbHBlci5pc19hZF9ob2M6Ci0KLSAgICAgICAgICAgICAgICAgICAgY2xhc3Mg
UGxhaW5TdHJpbmc6Ci0gICAgICAgICAgICAgICAgICAgICAgICBAY2xhc3NtZXRob2QKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGRlZiByZXNvbHZlX2lubmVyKGNscywgcmVzb2x2ZV9jb250ZXh0
KToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCi0KLSAgICAgICAgICAgICAgICAg
ICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlZiByZXF1ZXN0
X3VzZXJfcnVudGltZV9jYXN0KHJlcXVlc3QpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJhaXNlIEV4Y2VwdGlvbigiVW5zdXBwb3J0ZWQiKQotCi0gICAgICAgICAgICAgICAgICAgICAg
ICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWYgcmVxdWVzdF9pbnRl
cm5hbF9ydW50aW1lX2Nhc3QoKToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCi0K
LSAgICAgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGRlZiBnZXRfY29kZV9nZW5lcmF0b3IoKToKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gTm9uZQotCi0gICAgICAgICAgICAgICAgICAgICAgICBAY2xhc3NtZXRob2QK
LSAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBnZXRfdmFsaWRhdG9yX2NhbGxfdGV4dChjbHMp
OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSYXdUeXBlcy5TdHJpbmcuZ2V0
X3Jhd192YWxpZGF0b3JfY2FsbF90ZXh0KCkKLQotICAgICAgICAgICAgICAgICAgICAgICAgQHN0
YXRpY21ldGhvZAotICAgICAgICAgICAgICAgICAgICAgICAgZGVmIHJlZHVjZV90b19yYXdfdHlw
ZSgpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSYXdUeXBlcy5TdHJpbmcK
LQotICAgICAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgICAg
ICAgICAgICAgZGVmIGdldF90eXBlX21vZGVsKCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIFR5cGVNb2RlbC5TdHJpbmcKLQotICAgICAgICAgICAgICAgICAgICAgICAgQHN0
YXRpY21ldGhvZAotICAgICAgICAgICAgICAgICAgICAgICAgZGVmIGdldF9zZXR0ZXJfdmFsdWVf
ZXhwcmVzc2lvbl9wYXR0ZXJuKCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IE5vbmUKLQotICAgICAgICAgICAgICAgICAgICAgICAgQGNsYXNzbWV0aG9kCi0gICAgICAgICAg
ICAgICAgICAgICAgICBkZWYgZ2V0X2FycmF5X2l0ZW1fY190eXBlX3RleHQoY2xzKToKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2xzLnJlZHVjZV90b19yYXdfdHlwZSgpLmdl
dF9hcnJheV9pdGVtX3Jhd19jX3R5cGVfdGV4dCgpCi0KLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIFBsYWluU3RyaW5nCi0KLSAgICAgICAgICAgICAgICBlbHNlOgotCi0gICAgICAgICAgICAg
ICAgICAgIGNsYXNzIFR5cGVkZWZTdHJpbmc6Ci0gICAgICAgICAgICAgICAgICAgICAgICBAY2xh
c3NtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlZiByZXNvbHZlX2lubmVyKGNscywg
cmVzb2x2ZV9jb250ZXh0KToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCi0KLSAg
ICAgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGRlZiByZXF1ZXN0X3VzZXJfcnVudGltZV9jYXN0KHJlcXVlc3QpOgotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiVW5zdXBwb3J0ZWQiKQotCi0gICAgICAg
ICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgICAgICBk
ZWYgcmVxdWVzdF9pbnRlcm5hbF9ydW50aW1lX2Nhc3QoKToKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBSYXdUeXBlcy5TdHJpbmcucmVxdWVzdF9yYXdfaW50ZXJuYWxfcnVudGltZV9jYXN0
KCkKLQotICAgICAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAg
ICAgICAgICAgICAgZGVmIGdldF9jb2RlX2dlbmVyYXRvcigpOgotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNsYXNzIENvZGVHZW5lcmF0b3I6Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVm
IGdlbmVyYXRlX3R5cGVfYnVpbGRlcih3cml0ZXIsIGdlbmVyYXRlX2NvbnRleHQpOgotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscGVyLndyaXRlX2RvYyh3cml0ZXIpCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXhlZF90eXBlX25hbWUub3V0cHV0
X2NvbW1lbnQod3JpdGVyKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3Jp
dGVyLm5ld2xpbmUoInR5cGVkZWYgU3RyaW5nICIpCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB3cml0ZXIuYXBwZW5kKGZpeGVkX3R5cGVfbmFtZS5jbGFzc19uYW1lKQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVuZCgiO1xuXG4iKQot
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZGVmIHJlZ2lzdGVyX3VzZShmb3J3YXJkX2xpc3RlbmVy
KToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKLQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGRlZiBnZXRfZ2VuZXJhdGVfcGFzc19pZCgpOgotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFR5cGVCdWlsZGVyUGFzcy5UWVBFREVGCi0KLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ29kZUdlbmVyYXRvcgotCi0gICAgICAg
ICAgICAgICAgICAgICAgICBAY2xhc3NtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgICAgIGRl
ZiBnZXRfdmFsaWRhdG9yX2NhbGxfdGV4dChjbHMpOgotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBSYXdUeXBlcy5TdHJpbmcuZ2V0X3Jhd192YWxpZGF0b3JfY2FsbF90ZXh0KCkK
LQotICAgICAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgICAg
ICAgICAgICAgZGVmIHJlZHVjZV90b19yYXdfdHlwZSgpOgotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBSYXdUeXBlcy5TdHJpbmcKLQotICAgICAgICAgICAgICAgICAgICAgICAg
QHN0YXRpY21ldGhvZAotICAgICAgICAgICAgICAgICAgICAgICAgZGVmIGdldF90eXBlX21vZGVs
KCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFR5cGVNb2RlbC5WYWx1ZVR5
cGUoIiVzJXMiICUgKGhlbHBlci5mdWxsX25hbWVfcHJlZml4X2Zvcl91c2UsIGZpeGVkX3R5cGVf
bmFtZS5jbGFzc19uYW1lKSwgVHJ1ZSkKLQotICAgICAgICAgICAgICAgICAgICAgICAgQHN0YXRp
Y21ldGhvZAotICAgICAgICAgICAgICAgICAgICAgICAgZGVmIGdldF9zZXR0ZXJfdmFsdWVfZXhw
cmVzc2lvbl9wYXR0ZXJuKCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5v
bmUKLQotICAgICAgICAgICAgICAgICAgICAgICAgQGNsYXNzbWV0aG9kCi0gICAgICAgICAgICAg
ICAgICAgICAgICBkZWYgZ2V0X2FycmF5X2l0ZW1fY190eXBlX3RleHQoY2xzKToKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gImNvbnN0ICVzJXMmIiAlIChoZWxwZXIuZnVsbF9u
YW1lX3ByZWZpeF9mb3JfdXNlLCBmaXhlZF90eXBlX25hbWUuY2xhc3NfbmFtZSkKLQotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gVHlwZWRlZlN0cmluZwotCi0gICAgICAgIGVsaWYganNvbl90
eXBhYmxlWyJ0eXBlIl0gPT0gImludGVnZXIiOgotICAgICAgICAgICAgICAgIGlmIGhlbHBlci5p
c19hZF9ob2M6Ci0KLSAgICAgICAgICAgICAgICAgICAgY2xhc3MgUGxhaW5JbnRlZ2VyOgotICAg
ICAgICAgICAgICAgICAgICAgICAgQGNsYXNzbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgICAg
ICBkZWYgcmVzb2x2ZV9pbm5lcihjbHMsIHJlc29sdmVfY29udGV4dCk6Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcGFzcwotCi0gICAgICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0
aG9kCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWYgcmVxdWVzdF91c2VyX3J1bnRpbWVfY2Fz
dChyZXF1ZXN0KToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24o
IlVuc3VwcG9ydGVkIikKLQotICAgICAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAot
ICAgICAgICAgICAgICAgICAgICAgICAgZGVmIHJlcXVlc3RfaW50ZXJuYWxfcnVudGltZV9jYXN0
KCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzcwotCi0gICAgICAgICAgICAgICAg
ICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X2Nv
ZGVfZ2VuZXJhdG9yKCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUK
LQotICAgICAgICAgICAgICAgICAgICAgICAgQGNsYXNzbWV0aG9kCi0gICAgICAgICAgICAgICAg
ICAgICAgICBkZWYgZ2V0X3ZhbGlkYXRvcl9jYWxsX3RleHQoY2xzKToKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gUmF3VHlwZXMuSW50LmdldF9yYXdfdmFsaWRhdG9yX2NhbGxf
dGV4dCgpCi0KLSAgICAgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGRlZiByZWR1Y2VfdG9fcmF3X3R5cGUoKToKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gUmF3VHlwZXMuSW50Ci0KLSAgICAgICAgICAgICAgICAgICAg
ICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBnZXRfdHlwZV9t
b2RlbCgpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBUeXBlTW9kZWwuSW50
Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGRlZiBnZXRfc2V0dGVyX3ZhbHVlX2V4cHJlc3Npb25fcGF0dGVybigpOgotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb25lCi0KLSAgICAgICAgICAgICAgICAg
ICAgICAgIEBjbGFzc21ldGhvZAotICAgICAgICAgICAgICAgICAgICAgICAgZGVmIGdldF9hcnJh
eV9pdGVtX2NfdHlwZV90ZXh0KGNscyk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGNscy5yZWR1Y2VfdG9fcmF3X3R5cGUoKS5nZXRfYXJyYXlfaXRlbV9yYXdfY190eXBlX3Rl
eHQoKQotCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBQbGFpbkludGVnZXIKLQotICAgICAg
ICAgICAgICAgIGVsc2U6Ci0KLSAgICAgICAgICAgICAgICAgICAgY2xhc3MgVHlwZWRlZkludGVn
ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICBAY2xhc3NtZXRob2QKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGRlZiByZXNvbHZlX2lubmVyKGNscywgcmVzb2x2ZV9jb250ZXh0KToKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwYXNzCi0KLSAgICAgICAgICAgICAgICAgICAgICAgIEBz
dGF0aWNtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlZiByZXF1ZXN0X3VzZXJfcnVu
dGltZV9jYXN0KHJlcXVlc3QpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEV4
Y2VwdGlvbigiVW5zdXBwb3J0ZWQiKQotCi0gICAgICAgICAgICAgICAgICAgICAgICBAc3RhdGlj
bWV0aG9kCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWYgcmVxdWVzdF9pbnRlcm5hbF9ydW50
aW1lX2Nhc3QoKToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBSYXdUeXBlcy5JbnQucmVx
dWVzdF9yYXdfaW50ZXJuYWxfcnVudGltZV9jYXN0KCkKLQotICAgICAgICAgICAgICAgICAgICAg
ICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgICAgICAgICAgICAgZGVmIGdldF9jb2RlX2dl
bmVyYXRvcigpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzIENvZGVHZW5lcmF0
b3I6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmIGdlbmVyYXRlX3R5cGVfYnVpbGRlcih3cml0
ZXIsIGdlbmVyYXRlX2NvbnRleHQpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaGVscGVyLndyaXRlX2RvYyh3cml0ZXIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBmaXhlZF90eXBlX25hbWUub3V0cHV0X2NvbW1lbnQod3JpdGVyKQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoInR5cGVkZWYgaW50ICIp
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuYXBwZW5kKGZpeGVk
X3R5cGVfbmFtZS5jbGFzc19uYW1lKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgd3JpdGVyLmFwcGVuZCgiO1xuXG4iKQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmIHJl
Z2lzdGVyX3VzZShmb3J3YXJkX2xpc3RlbmVyKToKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHBhc3MKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAc3RhdGlj
bWV0aG9kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBnZXRfZ2VuZXJhdGVf
cGFzc19pZCgpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFR5
cGVCdWlsZGVyUGFzcy5UWVBFREVGCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gQ29kZUdlbmVyYXRvcgotCi0gICAgICAgICAgICAgICAgICAgICAgICBAY2xhc3NtZXRob2QK
LSAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBnZXRfdmFsaWRhdG9yX2NhbGxfdGV4dChjbHMp
OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSYXdUeXBlcy5JbnQuZ2V0X3Jh
d192YWxpZGF0b3JfY2FsbF90ZXh0KCkKLQotICAgICAgICAgICAgICAgICAgICAgICAgQHN0YXRp
Y21ldGhvZAotICAgICAgICAgICAgICAgICAgICAgICAgZGVmIHJlZHVjZV90b19yYXdfdHlwZSgp
OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSYXdUeXBlcy5JbnQKLQotICAg
ICAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgICAgICAgICAg
ICAgZGVmIGdldF90eXBlX21vZGVsKCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIFR5cGVNb2RlbC5JbnQKLQotICAgICAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhv
ZAotICAgICAgICAgICAgICAgICAgICAgICAgZGVmIGdldF9zZXR0ZXJfdmFsdWVfZXhwcmVzc2lv
bl9wYXR0ZXJuKCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKLQot
ICAgICAgICAgICAgICAgICAgICAgICAgQGNsYXNzbWV0aG9kCi0gICAgICAgICAgICAgICAgICAg
ICAgICBkZWYgZ2V0X2FycmF5X2l0ZW1fY190eXBlX3RleHQoY2xzKToKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gaGVscGVyLmZ1bGxfbmFtZV9wcmVmaXhfZm9yX3VzZSArIGZp
eGVkX3R5cGVfbmFtZS5jbGFzc19uYW1lCi0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFR5
cGVkZWZJbnRlZ2VyCi0KLSAgICAgICAgZWxpZiBqc29uX3R5cGFibGVbInR5cGUiXSA9PSAib2Jq
ZWN0IjoKLSAgICAgICAgICAgIGlmICJwcm9wZXJ0aWVzIiBpbiBqc29uX3R5cGFibGU6Ci0KLSAg
ICAgICAgICAgICAgICBjbGFzcyBDbGFzc0JpbmRpbmc6Ci0gICAgICAgICAgICAgICAgICAgIHJl
c29sdmVfZGF0YV8gPSBOb25lCi0gICAgICAgICAgICAgICAgICAgIG5lZWRfdXNlcl9ydW50aW1l
X2Nhc3RfID0gRmFsc2UKLSAgICAgICAgICAgICAgICAgICAgbmVlZF9pbnRlcm5hbF9ydW50aW1l
X2Nhc3RfID0gRmFsc2UKLQotICAgICAgICAgICAgICAgICAgICBAY2xhc3NtZXRob2QKLSAgICAg
ICAgICAgICAgICAgICAgZGVmIHJlc29sdmVfaW5uZXIoY2xzLCByZXNvbHZlX2NvbnRleHQpOgot
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgY2xzLnJlc29sdmVfZGF0YV86Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuCi0KLSAgICAgICAgICAgICAgICAgICAgICAgIHByb3Bl
cnRpZXMgPSBqc29uX3R5cGFibGVbInByb3BlcnRpZXMiXQotICAgICAgICAgICAgICAgICAgICAg
ICAgbWFpbiA9IFtdCi0gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25hbCA9IFtdCi0KLSAg
ICAgICAgICAgICAgICAgICAgICAgIGFkX2hvY190eXBlX2xpc3QgPSBbXQotCi0gICAgICAgICAg
ICAgICAgICAgICAgICBmb3IgcHJvcCBpbiBwcm9wZXJ0aWVzOgotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHByb3BfbmFtZSA9IHByb3BbIm5hbWUiXQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGFkX2hvY190eXBlX2NvbnRleHQgPSBjbHMuQWRIb2NUeXBlQ29udGV4dEltcGwocHJv
cF9uYW1lLCBmaXhlZF90eXBlX25hbWUuY2xhc3NfbmFtZSwgcmVzb2x2ZV9jb250ZXh0LCBhZF9o
b2NfdHlwZV9saXN0LCBoZWxwZXIuZnVsbF9uYW1lX3ByZWZpeF9mb3JfaW1wbCkKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBiaW5kaW5nID0gcmVzb2x2ZV9wYXJhbV90eXBlKHByb3AsIGNv
bnRleHRfZG9tYWluX25hbWUsIGFkX2hvY190eXBlX2NvbnRleHQpCi0KLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb2RlX2dlbmVyYXRvciA9IGJpbmRpbmcuZ2V0X2NvZGVfZ2VuZXJhdG9y
KCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBjb2RlX2dlbmVyYXRvcjoKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZV9nZW5lcmF0b3IucmVnaXN0ZXJfdXNlKHJl
c29sdmVfY29udGV4dC5mb3J3YXJkX2xpc3RlbmVyKQotCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY2xhc3MgUHJvcGVydHlEYXRhOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwYXJhbV90eXBlX2JpbmRpbmcgPSBiaW5kaW5nCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHAgPSBwcm9wCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBwcm9wLmdl
dCgib3B0aW9uYWwiKToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWwu
YXBwZW5kKFByb3BlcnR5RGF0YSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWluLmFwcGVuZChQcm9wZXJ0eURhdGEp
Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzIFJlc29sdmVEYXRhOgotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1haW5fcHJvcGVydGllcyA9IG1haW4KLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBvcHRpb25hbF9wcm9wZXJ0aWVzID0gb3B0aW9uYWwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBhZF9ob2NfdHlwZXMgPSBhZF9ob2NfdHlwZV9saXN0Ci0KLSAgICAg
ICAgICAgICAgICAgICAgICAgIGNscy5yZXNvbHZlX2RhdGFfID0gUmVzb2x2ZURhdGEKLQotICAg
ICAgICAgICAgICAgICAgICAgICAgZm9yIGFkX2hvYyBpbiBhZF9ob2NfdHlwZV9saXN0OgotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGFkX2hvYy5yZXNvbHZlX2lubmVyKHJlc29sdmVfY29u
dGV4dCkKLQotICAgICAgICAgICAgICAgICAgICBAY2xhc3NtZXRob2QKLSAgICAgICAgICAgICAg
ICAgICAgZGVmIHJlcXVlc3RfdXNlcl9ydW50aW1lX2Nhc3QoY2xzLCByZXF1ZXN0KToKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIG5vdCByZXF1ZXN0OgotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybgotICAgICAgICAgICAgICAgICAgICAgICAgY2xzLm5lZWRfdXNlcl9ydW50
aW1lX2Nhc3RfID0gVHJ1ZQotICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5hY2tub3ds
ZWRnZSgpCi0gICAgICAgICAgICAgICAgICAgICAgICBjbHMucmVxdWVzdF9pbnRlcm5hbF9ydW50
aW1lX2Nhc3QoKQotCi0gICAgICAgICAgICAgICAgICAgIEBjbGFzc21ldGhvZAotICAgICAgICAg
ICAgICAgICAgICBkZWYgcmVxdWVzdF9pbnRlcm5hbF9ydW50aW1lX2Nhc3QoY2xzKToKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIGNscy5uZWVkX2ludGVybmFsX3J1bnRpbWVfY2FzdF86Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgICAgICAgICAgICAgICAg
ICBjbHMubmVlZF9pbnRlcm5hbF9ydW50aW1lX2Nhc3RfID0gVHJ1ZQotICAgICAgICAgICAgICAg
ICAgICAgICAgZm9yIHAgaW4gY2xzLnJlc29sdmVfZGF0YV8ubWFpbl9wcm9wZXJ0aWVzOgotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHAucGFyYW1fdHlwZV9iaW5kaW5nLnJlcXVlc3RfaW50
ZXJuYWxfcnVudGltZV9jYXN0KCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciBwIGluIGNs
cy5yZXNvbHZlX2RhdGFfLm9wdGlvbmFsX3Byb3BlcnRpZXM6Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcC5wYXJhbV90eXBlX2JpbmRpbmcucmVxdWVzdF9pbnRlcm5hbF9ydW50aW1lX2Nh
c3QoKQotCi0gICAgICAgICAgICAgICAgICAgIEBjbGFzc21ldGhvZAotICAgICAgICAgICAgICAg
ICAgICBkZWYgZ2V0X2NvZGVfZ2VuZXJhdG9yKGNsYXNzX2JpbmRpbmdfY2xzKToKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGNsYXNzIENvZGVHZW5lcmF0b3I6Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQGNsYXNzbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmIGdl
bmVyYXRlX3R5cGVfYnVpbGRlcihjbHMsIHdyaXRlciwgZ2VuZXJhdGVfY29udGV4dCk6Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmVfZGF0YSA9IGNsYXNzX2JpbmRpbmdf
Y2xzLnJlc29sdmVfZGF0YV8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscGVy
LndyaXRlX2RvYyh3cml0ZXIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNz
X25hbWUgPSBmaXhlZF90eXBlX25hbWUuY2xhc3NfbmFtZQotCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlzX29wZW5fdHlwZSA9IChjb250ZXh0X2RvbWFpbl9uYW1lICsgIi4iICsg
Y2xhc3NfbmFtZSkgaW4gVFlQRVNfV0lUSF9PUEVOX0ZJRUxEX0xJU1RfU0VUCi0KLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZml4ZWRfdHlwZV9uYW1lLm91dHB1dF9jb21tZW50KHdy
aXRlcikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoImNs
YXNzICIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5hcHBlbmQoY2xh
c3NfbmFtZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVuZCgi
IDogcHVibGljICIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGlzX29wZW5f
dHlwZToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5hcHBlbmQo
Ikluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0IikKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5h
cHBlbmQoIkluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0QmFzZSIpCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHdyaXRlci5hcHBlbmQoIiB7XG4iKQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB3cml0ZXIubmV3bGluZSgicHVibGljOlxuIikKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYWRfaG9jX3R5cGVfd3JpdGVyID0gd3JpdGVyLmluc2VydF93cml0
ZXIoIiAgICAiKQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBhZF9ob2Nf
dHlwZSBpbiByZXNvbHZlX2RhdGEuYWRfaG9jX3R5cGVzOgotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29kZV9nZW5lcmF0b3IgPSBhZF9ob2NfdHlwZS5nZXRfY29kZV9nZW5l
cmF0b3IoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgY29kZV9nZW5l
cmF0b3I6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZV9nZW5l
cmF0b3IuZ2VuZXJhdGVfdHlwZV9idWlsZGVyKGFkX2hvY190eXBlX3dyaXRlciwgZ2VuZXJhdGVf
Y29udGV4dCkKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3bGlu
ZV9tdWx0aWxpbmUoCi0iIiIgICAgZW51bSB7Ci0gICAgICAgIE5vRmllbGRzU2V0ID0gMCwKLSIi
IikKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV9lbnVtX2l0ZW1zID0g
W10KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbGVuKHJlc29sdmVfZGF0YS5t
YWluX3Byb3BlcnRpZXMpID4gMDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHBvcyA9IDAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBwcm9wX2Rh
dGEgaW4gcmVzb2x2ZV9kYXRhLm1haW5fcHJvcGVydGllczoKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpdGVtX25hbWUgPSBDYXBpdGFsaXplci5sb3dlcl9jYW1lbF9j
YXNlX3RvX3VwcGVyKHByb3BfZGF0YS5wWyJuYW1lIl0pICsgIlNldCIKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV9lbnVtX2l0ZW1zLmFwcGVuZChpdGVtX25h
bWUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xp
bmUoIiAgICAgICAgJXMgPSAxIDw8ICVzLFxuIiAlIChpdGVtX25hbWUsIHBvcykpCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zICs9IDEKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGFsbF9maWVsZHNfc2V0X3ZhbHVlID0gIigiICsgKCIgfCAi
LmpvaW4oc3RhdGVfZW51bV9pdGVtcykpICsgIikiCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxfZmll
bGRzX3NldF92YWx1ZSA9ICIwIgotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdy
aXRlci5uZXdsaW5lX211bHRpbGluZShDb2RlR2VuZXJhdG9ySW5zcGVjdG9yU3RyaW5ncy5jbGFz
c19iaW5kaW5nX2J1aWxkZXJfcGFydF8xCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAlIChhbGxfZmllbGRzX3NldF92YWx1ZSwgY2xhc3Nf
bmFtZSwgY2xhc3NfbmFtZSkpCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9z
ID0gMAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgcHJvcF9kYXRhIGluIHJl
c29sdmVfZGF0YS5tYWluX3Byb3BlcnRpZXM6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwcm9wX25hbWUgPSBwcm9wX2RhdGEucFsibmFtZSJdCi0KLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHBhcmFtX3R5cGVfYmluZGluZyA9IHByb3BfZGF0YS5wYXJh
bV90eXBlX2JpbmRpbmcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFt
X3Jhd190eXBlID0gcGFyYW1fdHlwZV9iaW5kaW5nLnJlZHVjZV90b19yYXdfdHlwZSgpCi0KLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lX211bHRpbGlu
ZShDb2RlR2VuZXJhdG9ySW5zcGVjdG9yU3RyaW5ncy5jbGFzc19iaW5kaW5nX2J1aWxkZXJfcGFy
dF8yCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAoc3RhdGVfZW51
bV9pdGVtc1twb3NdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IENhcGl0YWxpemVyLmxvd2VyX2NhbWVsX2Nhc2VfdG9fdXBwZXIocHJvcF9uYW1lKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbV90eXBlX2JpbmRpbmcu
Z2V0X3R5cGVfbW9kZWwoKS5nZXRfaW5wdXRfcGFyYW1fdHlwZV90ZXh0KCksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfZW51bV9pdGVtc1twb3NdLCBw
cm9wX25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFy
YW1fcmF3X3R5cGUuZ2V0X3NldHRlcl9uYW1lKCksIHByb3BfbmFtZSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXRfc2V0dGVyX3ZhbHVlX2V4cHJlc3Np
b24ocGFyYW1fdHlwZV9iaW5kaW5nLCAidmFsdWUiKSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdGF0ZV9lbnVtX2l0ZW1zW3Bvc10pKQotCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwb3MgKz0gMQotCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lX211bHRpbGluZShDb2RlR2VuZXJhdG9ySW5zcGVj
dG9yU3RyaW5ncy5jbGFzc19iaW5kaW5nX2J1aWxkZXJfcGFydF8zCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChjbGFzc19uYW1lLCBj
bGFzc19uYW1lLCBjbGFzc19uYW1lLCBjbGFzc19uYW1lLCBjbGFzc19uYW1lKSkKLQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3bGluZSgiICAgIC8qXG4iKQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3bGluZSgiICAgICAqIFN5bnRo
ZXRpYyBjb25zdHJ1Y3RvcjpcbiIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdy
aXRlci5uZXdsaW5lKCIgICAgICogUmVmUHRyPCVzPiByZXN1bHQgPSAlczo6Y3JlYXRlKCkiICUg
KGNsYXNzX25hbWUsIGNsYXNzX25hbWUpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmb3IgcHJvcF9kYXRhIGluIHJlc29sdmVfZGF0YS5tYWluX3Byb3BlcnRpZXM6Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuYXBwZW5kX211bHRpbGluZSgiXG4g
ICAgICogICAgIC5zZXQlcyguLi4pIiAlIENhcGl0YWxpemVyLmxvd2VyX2NhbWVsX2Nhc2VfdG9f
dXBwZXIocHJvcF9kYXRhLnBbIm5hbWUiXSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHdyaXRlci5hcHBlbmRfbXVsdGlsaW5lKCI7XG4gICAgICovXG4iKQotCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lX211bHRpbGluZShDb2RlR2VuZXJh
dG9ySW5zcGVjdG9yU3RyaW5ncy5jbGFzc19iaW5kaW5nX2J1aWxkZXJfcGFydF80KQotCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCIgICAgdHlwZWRlZiBJ
bnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpTdHJ1Y3RJdGVtVHJhaXRzIEl0ZW1UcmFpdHM7XG4iKQot
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBwcm9wX2RhdGEgaW4gcmVzb2x2
ZV9kYXRhLm9wdGlvbmFsX3Byb3BlcnRpZXM6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwcm9wX25hbWUgPSBwcm9wX2RhdGEucFsibmFtZSJdCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwYXJhbV90eXBlX2JpbmRpbmcgPSBwcm9wX2RhdGEucGFyYW1f
dHlwZV9iaW5kaW5nCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXR0ZXJf
bmFtZSA9ICJzZXQlcyIgJSBDYXBpdGFsaXplci5sb3dlcl9jYW1lbF9jYXNlX3RvX3VwcGVyKHBy
b3BfbmFtZSkKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLmFw
cGVuZF9tdWx0aWxpbmUoIlxuICAgIHZvaWQgJXMiICUgc2V0dGVyX25hbWUpCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuYXBwZW5kKCIoJXMgdmFsdWUpXG4iICUg
cGFyYW1fdHlwZV9iaW5kaW5nLmdldF90eXBlX21vZGVsKCkuZ2V0X2lucHV0X3BhcmFtX3R5cGVf
dGV4dCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xp
bmUoIiAgICB7XG4iKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVy
Lm5ld2xpbmUoIiAgICAgICAgdGhpcy0+c2V0JXMoQVNDSUlMaXRlcmFsKFwiJXNcIiksICVzKTtc
biIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChwYXJhbV90eXBl
X2JpbmRpbmcucmVkdWNlX3RvX3Jhd190eXBlKCkuZ2V0X3NldHRlcl9uYW1lKCksIHByb3BfZGF0
YS5wWyJuYW1lIl0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Zm9ybWF0X3NldHRlcl92YWx1ZV9leHByZXNzaW9uKHBhcmFtX3R5cGVfYmluZGluZywgInZhbHVl
IikpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUo
IiAgICB9XG4iKQotCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNl
dHRlcl9uYW1lIGluIElOU1BFQ1RPUl9PQkpFQ1RfU0VUVEVSX05BTUVTOgotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCIgICAgdXNpbmcgSW5z
cGVjdG9yOjpJbnNwZWN0b3JPYmplY3RCYXNlOjolcztcblxuIiAlIHNldHRlcl9uYW1lKQotCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGNsYXNzX2JpbmRpbmdfY2xzLm5lZWRf
dXNlcl9ydW50aW1lX2Nhc3RfOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
d3JpdGVyLm5ld2xpbmUoIiAgICBzdGF0aWMgUGFzc1JlZlB0cjwlcz4gcnVudGltZUNhc3QoUGFz
c1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiB2YWx1ZSlcbiIgJSBjbGFzc19uYW1l
KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIiAg
ICB7XG4iKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xp
bmUoIiAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBvYmplY3Q7XG4i
KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIiAg
ICAgICAgYm9vbCBjYXN0UmVzID0gdmFsdWUtPmFzT2JqZWN0KCZvYmplY3QpO1xuIikKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCIgICAgICAgIEFT
U0VSVF9VTlVTRUQoY2FzdFJlcywgY2FzdFJlcyk7XG4iKQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVuZCgiI2lmICVzXG4iICUgVkFMSURBVE9SX0lGREVG
X05BTUUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3bGlu
ZSgiICAgICAgICBhc3NlcnRDb3JyZWN0VmFsdWUob2JqZWN0LmdldCgpKTtcbiIpCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuYXBwZW5kKCIjZW5kaWYgIC8vICVz
XG4iICUgVkFMSURBVE9SX0lGREVGX05BTUUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB3cml0ZXIubmV3bGluZSgiICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoJXMp
ID09IHNpemVvZihJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdEJhc2UpLCB0eXBlX2Nhc3RfcHJv
YmxlbSk7XG4iICUgY2xhc3NfbmFtZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHdyaXRlci5uZXdsaW5lKCIgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDwlcyo+KHN0YXRp
Y19jYXN0PEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0QmFzZSo+KG9iamVjdC5nZXQoKSkpO1xu
IiAlIGNsYXNzX25hbWUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0
ZXIubmV3bGluZSgiICAgIH1cbiIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB3cml0ZXIuYXBwZW5kKCJcbiIpCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgY2xhc3NfYmluZGluZ19jbHMubmVlZF9pbnRlcm5hbF9ydW50aW1lX2Nhc3RfOgotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVuZCgiI2lmICVzXG4iICUg
VkFMSURBVE9SX0lGREVGX05BTUUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB3cml0ZXIubmV3bGluZSgiICAgIHN0YXRpYyAlcyB2b2lkIGFzc2VydENvcnJlY3RWYWx1ZShJ
bnNwZWN0b3I6Okluc3BlY3RvclZhbHVlKiB2YWx1ZSk7XG4iICUgSU5TUEVDVE9SX1RZUEVTX0dF
TkVSQVRPUl9DT05GSUdfTUFQW291dHB1dF90eXBlXVsiZXhwb3J0X21hY3JvIl0pCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuYXBwZW5kKCIjZW5kaWYgIC8vICVz
XG4iICUgVkFMSURBVE9SX0lGREVGX05BTUUpCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNsb3NlZF9maWVsZF9zZXQgPSAoY29udGV4dF9kb21haW5fbmFtZSArICIuIiAr
IGNsYXNzX25hbWUpIG5vdCBpbiBUWVBFU19XSVRIX09QRU5fRklFTERfTElTVF9TRVQKLQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlciA9IGdlbmVy
YXRlX2NvbnRleHQudmFsaWRhdG9yX3dyaXRlcgotCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkb21haW5fZml4ZXMgPSBEb21haW5OYW1lRml4ZXMuZ2V0X2ZpeGVkX2RhdGEo
Y29udGV4dF9kb21haW5fbmFtZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGRvbWFpbl9ndWFyZCA9IGRvbWFpbl9maXhlcy5nZXRfZ3VhcmQoKQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgZG9tYWluX2d1YXJkOgotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRvbWFpbl9ndWFyZC5nZW5lcmF0ZV9vcGVuKHZhbGlkYXRv
cl93cml0ZXIpCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRv
cl93cml0ZXIubmV3bGluZSgidm9pZCAlcyVzOjphc3NlcnRDb3JyZWN0VmFsdWUoSW5zcGVjdG9y
OjpJbnNwZWN0b3JWYWx1ZSogdmFsdWUpXG4iICUgKGhlbHBlci5mdWxsX25hbWVfcHJlZml4X2Zv
cl9pbXBsLCBjbGFzc19uYW1lKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgie1xuIikKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgiICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IG9iamVjdDtcbiIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIiAgICBib29sIGNhc3RSZXMgPSB2YWx1ZS0+YXNP
YmplY3QoJm9iamVjdCk7XG4iKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCIgICAgQVNTRVJUX1VOVVNFRChjYXN0UmVzLCBjYXN0
UmVzKTtcbiIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgcHJvcF9k
YXRhIGluIHJlc29sdmVfZGF0YS5tYWluX3Byb3BlcnRpZXM6Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCIgICAge1xuIikK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdF9uYW1lID0gIiVzUG9z
IiAlIHByb3BfZGF0YS5wWyJuYW1lIl0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIiAgICAgICAgSW5zcGVjdG9yT2JqZWN0
OjppdGVyYXRvciAlcztcbiIgJSBpdF9uYW1lKQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgiICAgICAgICAlcyA9IG9iamVj
dC0+ZmluZChcIiVzXCIpO1xuIiAlIChpdF9uYW1lLCBwcm9wX2RhdGEucFsibmFtZSJdKSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5l
d2xpbmUoIiAgICAgICAgQVNTRVJUKCVzICE9IG9iamVjdC0+ZW5kKCkpO1xuIiAlIGl0X25hbWUp
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRl
ci5uZXdsaW5lKCIgICAgICAgICVzKCVzLT52YWx1ZS5nZXQoKSk7XG4iICUgKHByb3BfZGF0YS5w
YXJhbV90eXBlX2JpbmRpbmcuZ2V0X3ZhbGlkYXRvcl9jYWxsX3RleHQoKSwgaXRfbmFtZSkpCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5u
ZXdsaW5lKCIgICAgfVxuIikKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgY2xvc2VkX2ZpZWxkX3NldDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIiAgICBpbnQgZm91bmRQcm9wZXJ0aWVzQ291
bnQgPSAlcztcbiIgJSBsZW4ocmVzb2x2ZV9kYXRhLm1haW5fcHJvcGVydGllcykpCi0KLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBwcm9wX2RhdGEgaW4gcmVzb2x2ZV9k
YXRhLm9wdGlvbmFsX3Byb3BlcnRpZXM6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCIgICAge1xuIikKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdF9uYW1lID0gIiVzUG9zIiAlIHByb3BfZGF0
YS5wWyJuYW1lIl0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxp
ZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIiAgICAgICAgSW5zcGVjdG9yT2JqZWN0OjppdGVyYXRvciAl
cztcbiIgJSBpdF9uYW1lKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgiICAgICAgICAlcyA9IG9iamVjdC0+ZmluZChcIiVz
XCIpO1xuIiAlIChpdF9uYW1lLCBwcm9wX2RhdGEucFsibmFtZSJdKSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIiAgICAg
ICAgaWYgKCVzICE9IG9iamVjdC0+ZW5kKCkpIHtcbiIgJSBpdF9uYW1lKQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgiICAg
ICAgICAgICAgJXMoJXMtPnZhbHVlLmdldCgpKTtcbiIgJSAocHJvcF9kYXRhLnBhcmFtX3R5cGVf
YmluZGluZy5nZXRfdmFsaWRhdG9yX2NhbGxfdGV4dCgpLCBpdF9uYW1lKSkKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBjbG9zZWRfZmllbGRfc2V0OgotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5l
d2xpbmUoIiAgICAgICAgICAgICsrZm91bmRQcm9wZXJ0aWVzQ291bnQ7XG4iKQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgi
ICAgICAgICB9XG4iKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZh
bGlkYXRvcl93cml0ZXIubmV3bGluZSgiICAgIH1cbiIpCi0KLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIGNsb3NlZF9maWVsZF9zZXQ6Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCIgICAgaWYgKGZv
dW5kUHJvcGVydGllc0NvdW50ICE9IG9iamVjdC0+c2l6ZSgpKVxuIikKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIiAgICAg
ICAgRkFUQUwoXCJVbmV4cGVjdGVkIHByb3BlcnRpZXMgaW4gb2JqZWN0OiAlc1xcblwiLCBvYmpl
Y3QtPnRvSlNPTlN0cmluZygpLmFzY2lpKCkuZGF0YSgpKTtcbiIpCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIn1cbiIpCi0KLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGRvbWFpbl9ndWFyZDoKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb21haW5fZ3VhcmQuZ2VuZXJhdGVf
Y2xvc2UodmFsaWRhdG9yX3dyaXRlcikKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCJcblxuIikKLQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiBpc19vcGVuX3R5cGU6Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjcHBfd3JpdGVyID0gZ2VuZXJhdGVfY29udGV4dC5jcHBfd3JpdGVyCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuYXBwZW5kKCJcbiIpCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3bGluZSgiICAgIC8v
IFByb3BlcnR5IG5hbWVzIGZvciB0eXBlIGdlbmVyYXRlZCBhcyBvcGVuLlxuIikKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBwcm9wX2RhdGEgaW4gcmVzb2x2ZV9kYXRh
Lm1haW5fcHJvcGVydGllcyArIHJlc29sdmVfZGF0YS5vcHRpb25hbF9wcm9wZXJ0aWVzOgotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BfbmFtZSA9IHByb3BfZGF0
YS5wWyJuYW1lIl0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9w
X2ZpZWxkX25hbWUgPSBDYXBpdGFsaXplci5sb3dlcl9jYW1lbF9jYXNlX3RvX3VwcGVyKHByb3Bf
bmFtZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3
bGluZSgiICAgIHN0YXRpYyBjb25zdCBjaGFyKiAlcztcbiIgJSAocHJvcF9maWVsZF9uYW1lKSkK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcHBfd3JpdGVyLm5ld2xp
bmUoImNvbnN0IGNoYXIqICVzJXM6OiVzID0gXCIlc1wiO1xuIiAlIChoZWxwZXIuZnVsbF9uYW1l
X3ByZWZpeF9mb3JfaW1wbCwgY2xhc3NfbmFtZSwgcHJvcF9maWVsZF9uYW1lLCBwcm9wX25hbWUp
KQotCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIn07
XG5cbiIpCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZGVmIGdlbmVyYXRlX2ZvcndhcmRfZGVjbGFyYXRpb24o
d3JpdGVyKToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NfbmFtZSA9IGZp
eGVkX3R5cGVfbmFtZS5jbGFzc19uYW1lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHdyaXRlci5uZXdsaW5lKCJjbGFzcyAiKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB3cml0ZXIuYXBwZW5kKGNsYXNzX25hbWUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHdyaXRlci5hcHBlbmQoIjtcbiIpCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBA
c3RhdGljbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmIHJlZ2lzdGVyX3Vz
ZShmb3J3YXJkX2xpc3RlbmVyKToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVs
cGVyLmFkZF90b19mb3J3YXJkX2xpc3RlbmVyKGZvcndhcmRfbGlzdGVuZXIpCi0KLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZGVmIGdldF9nZW5lcmF0ZV9wYXNzX2lkKCk6Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBUeXBlQnVpbGRlclBhc3MuTUFJTgotCi0gICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gQ29kZUdlbmVyYXRvcgotCi0gICAgICAgICAgICAgICAgICAgIEBzdGF0
aWNtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgZGVmIGdldF92YWxpZGF0b3JfY2FsbF90ZXh0
KCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaGVscGVyLmZ1bGxfbmFtZV9wcmVm
aXhfZm9yX3VzZSArIGZpeGVkX3R5cGVfbmFtZS5jbGFzc19uYW1lICsgIjo6YXNzZXJ0Q29ycmVj
dFZhbHVlIgotCi0gICAgICAgICAgICAgICAgICAgIEBjbGFzc21ldGhvZAotICAgICAgICAgICAg
ICAgICAgICBkZWYgZ2V0X2FycmF5X2l0ZW1fY190eXBlX3RleHQoY2xzKToKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBoZWxwZXIuZnVsbF9uYW1lX3ByZWZpeF9mb3JfdXNlICsgZml4
ZWRfdHlwZV9uYW1lLmNsYXNzX25hbWUKLQotICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0
aG9kCi0gICAgICAgICAgICAgICAgICAgIGRlZiBnZXRfc2V0dGVyX3ZhbHVlX2V4cHJlc3Npb25f
cGF0dGVybigpOgotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKLQotICAgICAg
ICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgIGRlZiByZWR1
Y2VfdG9fcmF3X3R5cGUoKToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSYXdUeXBl
cy5PYmplY3QKLQotICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAg
ICAgICAgICAgIGRlZiBnZXRfdHlwZV9tb2RlbCgpOgotICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIFR5cGVNb2RlbC5SZWZQdHJCYXNlZChoZWxwZXIuZnVsbF9uYW1lX3ByZWZpeF9mb3Jf
dXNlICsgZml4ZWRfdHlwZV9uYW1lLmNsYXNzX25hbWUpCi0KLSAgICAgICAgICAgICAgICAgICAg
Y2xhc3MgQWRIb2NUeXBlQ29udGV4dEltcGw6Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZWYg
X19pbml0X18oc2VsZiwgcHJvcGVydHlfbmFtZSwgY2xhc3NfbmFtZSwgcmVzb2x2ZV9jb250ZXh0
LCBhZF9ob2NfdHlwZV9saXN0LCBwYXJlbnRfZnVsbF9uYW1lX3ByZWZpeCk6Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2VsZi5wcm9wZXJ0eV9uYW1lID0gcHJvcGVydHlfbmFtZQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY2xhc3NfbmFtZSA9IGNsYXNzX25hbWUKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnJlc29sdmVfY29udGV4dCA9IHJlc29sdmVf
Y29udGV4dAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYWRfaG9jX3R5cGVfbGlz
dCA9IGFkX2hvY190eXBlX2xpc3QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNv
bnRhaW5lcl9mdWxsX25hbWVfcHJlZml4ID0gcGFyZW50X2Z1bGxfbmFtZV9wcmVmaXggKyBjbGFz
c19uYW1lICsgIjo6IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY29udGFpbmVy
X3JlbGF0aXZlX25hbWVfcHJlZml4ID0gIiIKLQotICAgICAgICAgICAgICAgICAgICAgICAgZGVm
IGdldF90eXBlX25hbWVfZml4KHNlbGYpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNs
YXNzIE5hbWVGaXg6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzX25hbWUg
PSBDYXBpdGFsaXplci5sb3dlcl9jYW1lbF9jYXNlX3RvX3VwcGVyKHNlbGYucHJvcGVydHlfbmFt
ZSkKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBvdXRwdXRfY29tbWVudCh3cml0ZXIpOgot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIi8vIE5h
bWVkIGFmdGVyIHByb3BlcnR5IG5hbWUgJyVzJyB3aGlsZSBnZW5lcmF0aW5nICVzLlxuIiAlIChz
ZWxmLnByb3BlcnR5X25hbWUsIHNlbGYuY2xhc3NfbmFtZSkpCi0KLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gTmFtZUZpeAotCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWYg
YWRkX3R5cGUoc2VsZiwgYmluZGluZyk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vs
Zi5hZF9ob2NfdHlwZV9saXN0LmFwcGVuZChiaW5kaW5nKQotCi0gICAgICAgICAgICAgICAgcmV0
dXJuIENsYXNzQmluZGluZwotICAgICAgICAgICAgZWxzZToKLQotICAgICAgICAgICAgICAgIGNs
YXNzIFBsYWluT2JqZWN0QmluZGluZzoKLSAgICAgICAgICAgICAgICAgICAgQGNsYXNzbWV0aG9k
Ci0gICAgICAgICAgICAgICAgICAgIGRlZiByZXNvbHZlX2lubmVyKGNscywgcmVzb2x2ZV9jb250
ZXh0KToKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKLQotICAgICAgICAgICAgICAgICAg
ICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgIGRlZiByZXF1ZXN0X3VzZXJfcnVu
dGltZV9jYXN0KHJlcXVlc3QpOgotICAgICAgICAgICAgICAgICAgICAgICAgcGFzcwotCi0gICAg
ICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgZGVmIHJl
cXVlc3RfaW50ZXJuYWxfcnVudGltZV9jYXN0KCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBS
YXdUeXBlcy5PYmplY3QucmVxdWVzdF9yYXdfaW50ZXJuYWxfcnVudGltZV9jYXN0KCkKLQotICAg
ICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgIGRlZiBn
ZXRfY29kZV9nZW5lcmF0b3IoKToKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKLQotICAg
ICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgIGRlZiBn
ZXRfdmFsaWRhdG9yX2NhbGxfdGV4dCgpOgotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
ICJSdW50aW1lQ2FzdEhlbHBlcjo6YXNzZXJ0VHlwZTxJbnNwZWN0b3JWYWx1ZTo6VHlwZU9iamVj
dD4iCi0KLSAgICAgICAgICAgICAgICAgICAgQGNsYXNzbWV0aG9kCi0gICAgICAgICAgICAgICAg
ICAgIGRlZiBnZXRfYXJyYXlfaXRlbV9jX3R5cGVfdGV4dChjbHMpOgotICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGNscy5yZWR1Y2VfdG9fcmF3X3R5cGUoKS5nZXRfYXJyYXlfaXRlbV9y
YXdfY190eXBlX3RleHQoKQotCi0gICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAg
ICAgICAgICAgICAgICAgICAgZGVmIGdldF9zZXR0ZXJfdmFsdWVfZXhwcmVzc2lvbl9wYXR0ZXJu
KCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQotCi0gICAgICAgICAgICAg
ICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgZGVmIHJlZHVjZV90b19y
YXdfdHlwZSgpOgotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJhd1R5cGVzLk9iamVj
dAotCi0gICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgICAgICAg
ICAgZGVmIGdldF90eXBlX21vZGVsKCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
VHlwZU1vZGVsLk9iamVjdAotCi0gICAgICAgICAgICAgICAgcmV0dXJuIFBsYWluT2JqZWN0Qmlu
ZGluZwotICAgICAgICBlbGlmIGpzb25fdHlwYWJsZVsidHlwZSJdID09ICJhcnJheSI6Ci0gICAg
ICAgICAgICBpZiAiaXRlbXMiIGluIGpzb25fdHlwYWJsZToKLQotICAgICAgICAgICAgICAgIGFk
X2hvY190eXBlcyA9IFtdCi0KLSAgICAgICAgICAgICAgICBjbGFzcyBBZEhvY1R5cGVDb250ZXh0
OgotICAgICAgICAgICAgICAgICAgICBjb250YWluZXJfZnVsbF9uYW1lX3ByZWZpeCA9ICI8bm90
IHlldCBkZWZpbmVkPiIKLSAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyX3JlbGF0aXZlX25h
bWVfcHJlZml4ID0gIiIKLQotICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAg
ICAgICAgICAgICAgICAgIGRlZiBnZXRfdHlwZV9uYW1lX2ZpeCgpOgotICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZpeGVkX3R5cGVfbmFtZQotCi0gICAgICAgICAgICAgICAgICAgIEBz
dGF0aWNtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgZGVmIGFkZF90eXBlKGJpbmRpbmcpOgot
ICAgICAgICAgICAgICAgICAgICAgICAgYWRfaG9jX3R5cGVzLmFwcGVuZChiaW5kaW5nKQotCi0g
ICAgICAgICAgICAgICAgaXRlbV9iaW5kaW5nID0gcmVzb2x2ZV9wYXJhbV90eXBlKGpzb25fdHlw
YWJsZVsiaXRlbXMiXSwgY29udGV4dF9kb21haW5fbmFtZSwgQWRIb2NUeXBlQ29udGV4dCkKLQot
ICAgICAgICAgICAgICAgIGNsYXNzIEFycmF5QmluZGluZzoKLSAgICAgICAgICAgICAgICAgICAg
cmVzb2x2ZV9kYXRhXyA9IE5vbmUKLSAgICAgICAgICAgICAgICAgICAgbmVlZF9pbnRlcm5hbF9y
dW50aW1lX2Nhc3RfID0gRmFsc2UKLQotICAgICAgICAgICAgICAgICAgICBAY2xhc3NtZXRob2QK
LSAgICAgICAgICAgICAgICAgICAgZGVmIHJlc29sdmVfaW5uZXIoY2xzLCByZXNvbHZlX2NvbnRl
eHQpOgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgY2xzLnJlc29sdmVfZGF0YV86Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuCi0KLSAgICAgICAgICAgICAgICAgICAgICAg
IGNsYXNzIFJlc29sdmVEYXRhOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1fdHlw
ZV9iaW5kaW5nID0gaXRlbV9iaW5kaW5nCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRf
aG9jX3R5cGVfbGlzdCA9IGFkX2hvY190eXBlcwotCi0gICAgICAgICAgICAgICAgICAgICAgICBj
bHMucmVzb2x2ZV9kYXRhXyA9IFJlc29sdmVEYXRhCi0KLSAgICAgICAgICAgICAgICAgICAgICAg
IGZvciB0IGluIGFkX2hvY190eXBlczoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0LnJl
c29sdmVfaW5uZXIocmVzb2x2ZV9jb250ZXh0KQotCi0gICAgICAgICAgICAgICAgICAgIEBjbGFz
c21ldGhvZAotICAgICAgICAgICAgICAgICAgICBkZWYgcmVxdWVzdF91c2VyX3J1bnRpbWVfY2Fz
dChjbHMsIHJlcXVlc3QpOgotICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9u
KCJOb3QgaW1wbGVtZW50ZWQgeWV0IikKLQotICAgICAgICAgICAgICAgICAgICBAY2xhc3NtZXRo
b2QKLSAgICAgICAgICAgICAgICAgICAgZGVmIHJlcXVlc3RfaW50ZXJuYWxfcnVudGltZV9jYXN0
KGNscyk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiBjbHMubmVlZF9pbnRlcm5hbF9ydW50
aW1lX2Nhc3RfOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybgotICAgICAgICAg
ICAgICAgICAgICAgICAgY2xzLm5lZWRfaW50ZXJuYWxfcnVudGltZV9jYXN0XyA9IFRydWUKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGNscy5yZXNvbHZlX2RhdGFfLml0ZW1fdHlwZV9iaW5kaW5n
LnJlcXVlc3RfaW50ZXJuYWxfcnVudGltZV9jYXN0KCkKLQotICAgICAgICAgICAgICAgICAgICBA
Y2xhc3NtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgZGVmIGdldF9jb2RlX2dlbmVyYXRvcihh
cnJheV9iaW5kaW5nX2Nscyk6Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzIENvZGVH
ZW5lcmF0b3I6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBnZW5lcmF0ZV90eXBlX2J1aWxkZXIod3JpdGVy
LCBnZW5lcmF0ZV9jb250ZXh0KToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRf
aG9jX3R5cGVfd3JpdGVyID0gd3JpdGVyCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmVzb2x2ZV9kYXRhID0gYXJyYXlfYmluZGluZ19jbHMucmVzb2x2ZV9kYXRhXwotCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBhZF9ob2NfdHlwZSBpbiByZXNvbHZlX2Rh
dGEuYWRfaG9jX3R5cGVfbGlzdDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvZGVfZ2VuZXJhdG9yID0gYWRfaG9jX3R5cGUuZ2V0X2NvZGVfZ2VuZXJhdG9yKCkKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGNvZGVfZ2VuZXJhdG9yOgotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVfZ2VuZXJhdG9yLmdlbmVyYXRl
X3R5cGVfYnVpbGRlcihhZF9ob2NfdHlwZV93cml0ZXIsIGdlbmVyYXRlX2NvbnRleHQpCi0KLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZGVmIGdlbmVyYXRlX2ZvcndhcmRfZGVjbGFyYXRpb24od3JpdGVyKToKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzcwotCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBy
ZWdpc3Rlcl91c2UoZm9yd2FyZF9saXN0ZW5lcik6Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGl0ZW1fY29kZV9nZW5lcmF0b3IgPSBpdGVtX2JpbmRpbmcuZ2V0X2NvZGVfZ2VuZXJh
dG9yKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgaXRlbV9jb2RlX2dlbmVy
YXRvcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1fY29kZV9nZW5l
cmF0b3IucmVnaXN0ZXJfdXNlKGZvcndhcmRfbGlzdGVuZXIpCi0KLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVm
IGdldF9nZW5lcmF0ZV9wYXNzX2lkKCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBUeXBlQnVpbGRlclBhc3MuTUFJTgotCi0gICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gQ29kZUdlbmVyYXRvcgotCi0gICAgICAgICAgICAgICAgICAgIEBjbGFzc21ldGhvZAot
ICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X3ZhbGlkYXRvcl9jYWxsX3RleHQoY2xzKToKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjbHMuZ2V0X2FycmF5X2l0ZW1fY190eXBlX3Rl
eHQoKSArICI6OmFzc2VydENvcnJlY3RWYWx1ZSIKLQotICAgICAgICAgICAgICAgICAgICBAY2xh
c3NtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgZGVmIGdldF9hcnJheV9pdGVtX2NfdHlwZV90
ZXh0KGNscyk6Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVwbGFjZV9yaWdodF9z
aGlmdCgiSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk8JXM+IiAlIGNscy5yZXNvbHZlX2Rh
dGFfLml0ZW1fdHlwZV9iaW5kaW5nLmdldF9hcnJheV9pdGVtX2NfdHlwZV90ZXh0KCkpCi0KLSAg
ICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgICAgICAgICBkZWYg
Z2V0X3NldHRlcl92YWx1ZV9leHByZXNzaW9uX3BhdHRlcm4oKToKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBOb25lCi0KLSAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAot
ICAgICAgICAgICAgICAgICAgICBkZWYgcmVkdWNlX3RvX3Jhd190eXBlKCk6Ci0gICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gUmF3VHlwZXMuQXJyYXkKLQotICAgICAgICAgICAgICAgICAg
ICBAY2xhc3NtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgZGVmIGdldF90eXBlX21vZGVsKGNs
cyk6Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHlwZU1vZGVsLlJlZlB0ckJhc2Vk
KGNscy5nZXRfYXJyYXlfaXRlbV9jX3R5cGVfdGV4dCgpKQotCi0gICAgICAgICAgICAgICAgcmV0
dXJuIEFycmF5QmluZGluZwotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAjIEZh
bGwtdGhyb3VnaCB0byByYXcgdHlwZS4KLSAgICAgICAgICAgICAgICBwYXNzCi0KLSAgICAgICAg
cmF3X3R5cGUgPSBSYXdUeXBlcy5nZXQoanNvbl90eXBhYmxlWyJ0eXBlIl0pCi0KLSAgICAgICAg
cmV0dXJuIFJhd1R5cGVCaW5kaW5nKHJhd190eXBlKQotCi0KLWNsYXNzIFJhd1R5cGVCaW5kaW5n
OgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCByYXdfdHlwZSk6Ci0gICAgICAgIHNlbGYucmF3X3R5
cGVfID0gcmF3X3R5cGUKLQotICAgIGRlZiByZXNvbHZlX2lubmVyKHNlbGYsIHJlc29sdmVfY29u
dGV4dCk6Ci0gICAgICAgIHBhc3MKLQotICAgIGRlZiByZXF1ZXN0X3VzZXJfcnVudGltZV9jYXN0
KHNlbGYsIHJlcXVlc3QpOgotICAgICAgICByYWlzZSBFeGNlcHRpb24oIlVuc3VwcG9ydGVkIikK
LQotICAgIGRlZiByZXF1ZXN0X2ludGVybmFsX3J1bnRpbWVfY2FzdChzZWxmKToKLSAgICAgICAg
c2VsZi5yYXdfdHlwZV8ucmVxdWVzdF9yYXdfaW50ZXJuYWxfcnVudGltZV9jYXN0KCkKLQotICAg
IGRlZiBnZXRfY29kZV9nZW5lcmF0b3Ioc2VsZik6Ci0gICAgICAgIHJldHVybiBOb25lCi0KLSAg
ICBkZWYgZ2V0X3ZhbGlkYXRvcl9jYWxsX3RleHQoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxm
LnJhd190eXBlXy5nZXRfcmF3X3ZhbGlkYXRvcl9jYWxsX3RleHQoKQotCi0gICAgZGVmIGdldF9h
cnJheV9pdGVtX2NfdHlwZV90ZXh0KHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5yYXdfdHlw
ZV8uZ2V0X2FycmF5X2l0ZW1fcmF3X2NfdHlwZV90ZXh0KCkKLQotICAgIGRlZiBnZXRfc2V0dGVy
X3ZhbHVlX2V4cHJlc3Npb25fcGF0dGVybihzZWxmKToKLSAgICAgICAgcmV0dXJuIE5vbmUKLQot
ICAgIGRlZiByZWR1Y2VfdG9fcmF3X3R5cGUoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLnJh
d190eXBlXwotCi0gICAgZGVmIGdldF90eXBlX21vZGVsKHNlbGYpOgotICAgICAgICByZXR1cm4g
c2VsZi5yYXdfdHlwZV8uZ2V0X3Jhd190eXBlX21vZGVsKCkKLQotCi1jbGFzcyBUeXBlRGF0YShv
YmplY3QpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBqc29uX3R5cGUsIGpzb25fZG9tYWluLCBk
b21haW5fZGF0YSk6Ci0gICAgICAgIHNlbGYuanNvbl90eXBlXyA9IGpzb25fdHlwZQotICAgICAg
ICBzZWxmLmpzb25fZG9tYWluXyA9IGpzb25fZG9tYWluCi0gICAgICAgIHNlbGYuZG9tYWluX2Rh
dGFfID0gZG9tYWluX2RhdGEKLQotICAgICAgICBpZiAidHlwZSIgbm90IGluIGpzb25fdHlwZToK
LSAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiVW5rbm93biB0eXBlIikKLQotICAgICAgICBq
c29uX3R5cGVfbmFtZSA9IGpzb25fdHlwZVsidHlwZSJdCi0gICAgICAgIHNlbGYucmF3X3R5cGVf
ID0gUmF3VHlwZXMuZ2V0KGpzb25fdHlwZV9uYW1lKQotICAgICAgICBzZWxmLmJpbmRpbmdfYmVp
bmdfcmVzb2x2ZWRfID0gRmFsc2UKLSAgICAgICAgc2VsZi5iaW5kaW5nXyA9IE5vbmUKLQotICAg
IGRlZiBnZXRfcmF3X3R5cGUoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLnJhd190eXBlXwot
Ci0gICAgZGVmIGdldF9iaW5kaW5nKHNlbGYpOgotICAgICAgICBpZiBub3Qgc2VsZi5iaW5kaW5n
XzoKLSAgICAgICAgICAgIGlmIHNlbGYuYmluZGluZ19iZWluZ19yZXNvbHZlZF86Ci0gICAgICAg
ICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJUeXBlICVzIGlzIGFscmVhZHkgYmVpbmcgcmVzb2x2
ZWQiICUgc2VsZi5qc29uX3R5cGVfWyJ0eXBlIl0pCi0gICAgICAgICAgICAjIFJlc29sdmUgb25s
eSBsYXppbHksIGJlY2F1c2UgcmVzb2x2aW5nIG9uZSBuYW1lZCB0eXBlIG1heSByZXF1aXJlIHJl
c29sdmluZyBzb21lIG90aGVyIG5hbWVkIHR5cGUuCi0gICAgICAgICAgICBzZWxmLmJpbmRpbmdf
YmVpbmdfcmVzb2x2ZWRfID0gVHJ1ZQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAg
IHNlbGYuYmluZGluZ18gPSBUeXBlQmluZGluZ3MuY3JlYXRlX25hbWVkX3R5cGVfZGVjbGFyYXRp
b24oc2VsZi5qc29uX3R5cGVfLCBzZWxmLmpzb25fZG9tYWluX1siZG9tYWluIl0sIHNlbGYpCi0g
ICAgICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgICAgIHNlbGYuYmluZGluZ19iZWluZ19y
ZXNvbHZlZF8gPSBGYWxzZQotCi0gICAgICAgIHJldHVybiBzZWxmLmJpbmRpbmdfCi0KLSAgICBk
ZWYgZ2V0X2pzb25fdHlwZShzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuanNvbl90eXBlXwot
Ci0gICAgZGVmIGdldF9uYW1lKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5qc29uX3R5cGVf
WyJpZCJdCi0KLSAgICBkZWYgZ2V0X2RvbWFpbl9uYW1lKHNlbGYpOgotICAgICAgICByZXR1cm4g
c2VsZi5qc29uX2RvbWFpbl9bImRvbWFpbiJdCi0KLQotY2xhc3MgRG9tYWluRGF0YToKLSAgICBk
ZWYgX19pbml0X18oc2VsZiwganNvbl9kb21haW4pOgotICAgICAgICBzZWxmLmpzb25fZG9tYWlu
ID0ganNvbl9kb21haW4KLSAgICAgICAgc2VsZi50eXBlc18gPSBbXQotCi0gICAgZGVmIGFkZF90
eXBlKHNlbGYsIHR5cGVfZGF0YSk6Ci0gICAgICAgIHNlbGYudHlwZXNfLmFwcGVuZCh0eXBlX2Rh
dGEpCi0KLSAgICBkZWYgbmFtZShzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuanNvbl9kb21h
aW5bImRvbWFpbiJdCi0KLSAgICBkZWYgdHlwZXMoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxm
LnR5cGVzXwotCi0KLWNsYXNzIFR5cGVNYXA6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGFwaSwg
ZGVwZW5kZW5jeV9hcGkpOgotICAgICAgICBzZWxmLm1hcF8gPSB7fQotICAgICAgICBzZWxmLmRv
bWFpbnNfID0gW10KLSAgICAgICAgc2VsZi5kb21haW5zX3RvX2dlbmVyYXRlXyA9IFtdCi0gICAg
ICAgIGZvciBqc29uX2RvbWFpbiBpbiBhcGlbImRvbWFpbnMiXToKLSAgICAgICAgICAgIHNlbGYu
YWRkX2RvbWFpbihqc29uX2RvbWFpbiwgVHJ1ZSkKLSAgICAgICAgZm9yIGpzb25fZG9tYWluIGlu
IGRlcGVuZGVuY3lfYXBpWyJkb21haW5zIl06Ci0gICAgICAgICAgICBzZWxmLmFkZF9kb21haW4o
anNvbl9kb21haW4sIEZhbHNlKQotCi0gICAgZGVmIGFkZF9kb21haW4oc2VsZiwganNvbl9kb21h
aW4sIHNob3VsZF9nZW5lcmF0ZSk6Ci0gICAgICAgIGRvbWFpbl9uYW1lID0ganNvbl9kb21haW5b
ImRvbWFpbiJdCi0KLSAgICAgICAgZG9tYWluX21hcCA9IHt9Ci0gICAgICAgIHNlbGYubWFwX1tk
b21haW5fbmFtZV0gPSBkb21haW5fbWFwCi0KLSAgICAgICAgZG9tYWluX2RhdGEgPSBEb21haW5E
YXRhKGpzb25fZG9tYWluKQotICAgICAgICBzZWxmLmRvbWFpbnNfLmFwcGVuZChkb21haW5fZGF0
YSkKLQotICAgICAgICBpZiBzaG91bGRfZ2VuZXJhdGU6Ci0gICAgICAgICAgICAjIEZJWE1FOiBU
aGUgb3JkZXIgb2YgdHlwZXMgc2hvdWxkIG5vdCBtYXR0ZXIuIFRoZSBnZW5lcmF0ZWQgY29kZSBz
aG91bGQgd29yayByZWdhcmRsZXNzIG9mIHRoZSBvcmRlciBvZiB0eXBlcy4KLSAgICAgICAgICAg
IGlmIGRvbWFpbl9uYW1lID09ICJQYWdlIjoKLSAgICAgICAgICAgICAgICBzZWxmLmRvbWFpbnNf
dG9fZ2VuZXJhdGVfLmluc2VydCgwLCBkb21haW5fZGF0YSkKLSAgICAgICAgICAgIGVsc2U6Ci0g
ICAgICAgICAgICAgICAgc2VsZi5kb21haW5zX3RvX2dlbmVyYXRlXy5hcHBlbmQoZG9tYWluX2Rh
dGEpCi0KLSAgICAgICAgaWYgInR5cGVzIiBpbiBqc29uX2RvbWFpbjoKLSAgICAgICAgICAgIGZv
ciBqc29uX3R5cGUgaW4ganNvbl9kb21haW5bInR5cGVzIl06Ci0gICAgICAgICAgICAgICAgdHlw
ZV9uYW1lID0ganNvbl90eXBlWyJpZCJdCi0gICAgICAgICAgICAgICAgdHlwZV9kYXRhID0gVHlw
ZURhdGEoanNvbl90eXBlLCBqc29uX2RvbWFpbiwgZG9tYWluX2RhdGEpCi0gICAgICAgICAgICAg
ICAgZG9tYWluX21hcFt0eXBlX25hbWVdID0gdHlwZV9kYXRhCi0gICAgICAgICAgICAgICAgZG9t
YWluX2RhdGEuYWRkX3R5cGUodHlwZV9kYXRhKQotCi0gICAgZGVmIGRvbWFpbnMoc2VsZik6Ci0g
ICAgICAgIHJldHVybiBzZWxmLmRvbWFpbnNfCi0KLSAgICBkZWYgZG9tYWluc190b19nZW5lcmF0
ZShzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuZG9tYWluc190b19nZW5lcmF0ZV8KLQotICAg
IGRlZiBnZXQoc2VsZiwgZG9tYWluX25hbWUsIHR5cGVfbmFtZSk6Ci0gICAgICAgIHJldHVybiBz
ZWxmLm1hcF9bZG9tYWluX25hbWVdW3R5cGVfbmFtZV0KLQotCi1kZWYgcmVzb2x2ZV9wYXJhbV90
eXBlKGpzb25fcGFyYW1ldGVyLCBzY29wZV9kb21haW5fbmFtZSwgYWRfaG9jX3R5cGVfY29udGV4
dCk6Ci0gICAgaWYgIiRyZWYiIGluIGpzb25fcGFyYW1ldGVyOgotICAgICAgICBqc29uX3JlZiA9
IGpzb25fcGFyYW1ldGVyWyIkcmVmIl0KLSAgICAgICAgdHlwZV9kYXRhID0gZ2V0X3JlZl9kYXRh
KGpzb25fcmVmLCBzY29wZV9kb21haW5fbmFtZSkKLSAgICAgICAgcmV0dXJuIHR5cGVfZGF0YS5n
ZXRfYmluZGluZygpCi0gICAgZWxpZiAidHlwZSIgaW4ganNvbl9wYXJhbWV0ZXI6Ci0gICAgICAg
IHJlc3VsdCA9IFR5cGVCaW5kaW5ncy5jcmVhdGVfYWRfaG9jX3R5cGVfZGVjbGFyYXRpb24oanNv
bl9wYXJhbWV0ZXIsIHNjb3BlX2RvbWFpbl9uYW1lLCBhZF9ob2NfdHlwZV9jb250ZXh0KQotICAg
ICAgICBhZF9ob2NfdHlwZV9jb250ZXh0LmFkZF90eXBlKHJlc3VsdCkKLSAgICAgICAgcmV0dXJu
IHJlc3VsdAotICAgIGVsc2U6Ci0gICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiVW5rbm93biB0eXBl
IikKLQotCi1kZWYgcmVzb2x2ZV9wYXJhbV9yYXdfdHlwZShqc29uX3BhcmFtZXRlciwgc2NvcGVf
ZG9tYWluX25hbWUpOgotICAgIGlmICIkcmVmIiBpbiBqc29uX3BhcmFtZXRlcjoKLSAgICAgICAg
anNvbl9yZWYgPSBqc29uX3BhcmFtZXRlclsiJHJlZiJdCi0gICAgICAgIHR5cGVfZGF0YSA9IGdl
dF9yZWZfZGF0YShqc29uX3JlZiwgc2NvcGVfZG9tYWluX25hbWUpCi0gICAgICAgIHJldHVybiB0
eXBlX2RhdGEuZ2V0X3Jhd190eXBlKCkKLSAgICBlbGlmICJ0eXBlIiBpbiBqc29uX3BhcmFtZXRl
cjoKLSAgICAgICAganNvbl90eXBlID0ganNvbl9wYXJhbWV0ZXJbInR5cGUiXQotICAgICAgICBy
ZXR1cm4gUmF3VHlwZXMuZ2V0KGpzb25fdHlwZSkKLSAgICBlbHNlOgotICAgICAgICByYWlzZSBF
eGNlcHRpb24oIlVua25vd24gdHlwZSIpCi0KLQotZGVmIGdldF9yZWZfZGF0YShqc29uX3JlZiwg
c2NvcGVfZG9tYWluX25hbWUpOgotICAgIGRvdF9wb3MgPSBqc29uX3JlZi5maW5kKCIuIikKLSAg
ICBpZiBkb3RfcG9zID09IC0xOgotICAgICAgICBkb21haW5fbmFtZSA9IHNjb3BlX2RvbWFpbl9u
YW1lCi0gICAgICAgIHR5cGVfbmFtZSA9IGpzb25fcmVmCi0gICAgZWxzZToKLSAgICAgICAgZG9t
YWluX25hbWUgPSBqc29uX3JlZls6ZG90X3Bvc10KLSAgICAgICAgdHlwZV9uYW1lID0ganNvbl9y
ZWZbZG90X3BvcyArIDE6XQotCi0gICAgcmV0dXJuIHR5cGVfbWFwLmdldChkb21haW5fbmFtZSwg
dHlwZV9uYW1lKQotCi0KLWlucHV0X2ZpbGUgPSBvcGVuKGlucHV0X2pzb25fZmlsZW5hbWUsICJy
IikKLWpzb25fc3RyaW5nID0gaW5wdXRfZmlsZS5yZWFkKCkKLWpzb25fYXBpID0ganNvbi5sb2Fk
cyhqc29uX3N0cmluZykKLWlucHV0X2ZpbGUuY2xvc2UoKQotaWYgbm90ICJkb21haW5zIiBpbiBq
c29uX2FwaToKLSAgICBqc29uX2FwaSA9IHsiZG9tYWlucyI6IFtqc29uX2FwaV19Ci0KLWRlcGVu
ZGVuY3lfYXBpID0geyJkb21haW5zIjogW119Ci1mb3IgZGVwZW5kZW5jeV9qc29uX2ZpbGVuYW1l
IGluIGRlcGVuZGVuY3lfanNvbl9maWxlbmFtZXM6Ci0gICAgZGVwZW5kZW5jeV9pbnB1dF9maWxl
ID0gb3BlbihkZXBlbmRlbmN5X2pzb25fZmlsZW5hbWUsICJyIikKLSAgICBkZXBlbmRlbmN5X2pz
b25fc3RyaW5nID0gZGVwZW5kZW5jeV9pbnB1dF9maWxlLnJlYWQoKQotICAgIGRlcGVuZGVuY3lf
anNvbl9hcGkgPSBqc29uLmxvYWRzKGRlcGVuZGVuY3lfanNvbl9zdHJpbmcpCi0gICAgZGVwZW5k
ZW5jeV9pbnB1dF9maWxlLmNsb3NlKCkKLSAgICBpZiBub3QgImRvbWFpbnMiIGluIGRlcGVuZGVu
Y3lfanNvbl9hcGk6Ci0gICAgICAgIGRlcGVuZGVuY3lfanNvbl9hcGkgPSB7ImRvbWFpbnMiOiBb
ZGVwZW5kZW5jeV9qc29uX2FwaV19Ci0gICAgZGVwZW5kZW5jeV9hcGlbImRvbWFpbnMiXSArPSBk
ZXBlbmRlbmN5X2pzb25fYXBpWyJkb21haW5zIl0KLQotCi1jbGFzcyBUZW1wbGF0ZXM6Ci0gICAg
ZGVmIGdldF90aGlzX3NjcmlwdF9wYXRoXyhhYnNvbHV0ZV9wYXRoKToKLSAgICAgICAgYWJzb2x1
dGVfcGF0aCA9IG9zLnBhdGguYWJzcGF0aChhYnNvbHV0ZV9wYXRoKQotICAgICAgICBjb21wb25l
bnRzID0gW10KLQotICAgICAgICBkZWYgZmlsbF9yZWN1cnNpdmUocGF0aF9wYXJ0LCBkZXB0aCk6
Ci0gICAgICAgICAgICBpZiBkZXB0aCA8PSAwIG9yIHBhdGhfcGFydCA9PSAnLyc6Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuCi0gICAgICAgICAgICBmaWxsX3JlY3Vyc2l2ZShvcy5wYXRoLmRpcm5h
bWUocGF0aF9wYXJ0KSwgZGVwdGggLSAxKQotICAgICAgICAgICAgY29tcG9uZW50cy5hcHBlbmQo
b3MucGF0aC5iYXNlbmFtZShwYXRoX3BhcnQpKQotCi0gICAgICAgICMgVHlwaWNhbCBwYXRoIGlz
IC9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQotICAg
ICAgICAjIExldCdzIHRha2UgNCBjb21wb25lbnRzIGZyb20gdGhlIHJlYWwgcGF0aCB0aGVuLgot
ICAgICAgICBmaWxsX3JlY3Vyc2l2ZShhYnNvbHV0ZV9wYXRoLCA0KQotCi0gICAgICAgIHJldHVy
biAiLyIuam9pbihjb21wb25lbnRzKQotCi0gICAgZmlsZV9oZWFkZXJfID0gKCIvLyBGaWxlIGlz
IGdlbmVyYXRlZCBieSAlc1xuXG4iICUgZ2V0X3RoaXNfc2NyaXB0X3BhdGhfKHN5cy5hcmd2WzBd
KSArCi0iIiIvLyBDb3B5cmlnaHQgKGMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2Vy
dmVkLgotLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KLSIiIikKLQotICAgIGZyb250ZW5kX2RvbWFpbl9jbGFzcyA9IHN0cmluZy5UZW1wbGF0
ZShDb2RlR2VuZXJhdG9ySW5zcGVjdG9yU3RyaW5ncy5mcm9udGVuZF9kb21haW5fY2xhc3MpCi0g
ICAgYmFja2VuZF9kaXNwYXRjaGVyX2NvbnN0cnVjdG9yID0gc3RyaW5nLlRlbXBsYXRlKENvZGVH
ZW5lcmF0b3JJbnNwZWN0b3JTdHJpbmdzLmJhY2tlbmRfZGlzcGF0Y2hlcl9jb25zdHJ1Y3RvcikK
LSAgICBiYWNrZW5kX2Rpc3BhdGNoZXJfZGlzcGF0Y2hfbWV0aG9kID0gc3RyaW5nLlRlbXBsYXRl
KENvZGVHZW5lcmF0b3JJbnNwZWN0b3JTdHJpbmdzLmJhY2tlbmRfZGlzcGF0Y2hlcl9kaXNwYXRj
aF9tZXRob2QpCi0gICAgYmFja2VuZF9kaXNwYXRjaGVyX2Rpc3BhdGNoX21ldGhvZF9zaW1wbGUg
PSBzdHJpbmcuVGVtcGxhdGUoQ29kZUdlbmVyYXRvckluc3BlY3RvclN0cmluZ3MuYmFja2VuZF9k
aXNwYXRjaGVyX2Rpc3BhdGNoX21ldGhvZF9zaW1wbGUpCi0gICAgYmFja2VuZF9tZXRob2QgPSBz
dHJpbmcuVGVtcGxhdGUoQ29kZUdlbmVyYXRvckluc3BlY3RvclN0cmluZ3MuYmFja2VuZF9tZXRo
b2QpCi0gICAgZnJvbnRlbmRfbWV0aG9kID0gc3RyaW5nLlRlbXBsYXRlKENvZGVHZW5lcmF0b3JJ
bnNwZWN0b3JTdHJpbmdzLmZyb250ZW5kX21ldGhvZCkKLSAgICBjYWxsYmFja19tZXRob2QgPSBz
dHJpbmcuVGVtcGxhdGUoQ29kZUdlbmVyYXRvckluc3BlY3RvclN0cmluZ3MuY2FsbGJhY2tfbWV0
aG9kKQotICAgIGZyb250ZW5kX2ggPSBzdHJpbmcuVGVtcGxhdGUoZmlsZV9oZWFkZXJfICsgQ29k
ZUdlbmVyYXRvckluc3BlY3RvclN0cmluZ3MuZnJvbnRlbmRfaCkKLSAgICBiYWNrZW5kX2ggPSBz
dHJpbmcuVGVtcGxhdGUoZmlsZV9oZWFkZXJfICsgQ29kZUdlbmVyYXRvckluc3BlY3RvclN0cmlu
Z3MuYmFja2VuZF9oKQotICAgIGJhY2tlbmRfY3BwID0gc3RyaW5nLlRlbXBsYXRlKGZpbGVfaGVh
ZGVyXyArIENvZGVHZW5lcmF0b3JJbnNwZWN0b3JTdHJpbmdzLmJhY2tlbmRfY3BwKQotICAgIGZy
b250ZW5kX2NwcCA9IHN0cmluZy5UZW1wbGF0ZShmaWxlX2hlYWRlcl8gKyBDb2RlR2VuZXJhdG9y
SW5zcGVjdG9yU3RyaW5ncy5mcm9udGVuZF9jcHApCi0gICAgdHlwZWJ1aWxkZXJfaCA9IHN0cmlu
Zy5UZW1wbGF0ZShmaWxlX2hlYWRlcl8gKyBDb2RlR2VuZXJhdG9ySW5zcGVjdG9yU3RyaW5ncy50
eXBlYnVpbGRlcl9oKQotICAgIHR5cGVidWlsZGVyX2NwcCA9IHN0cmluZy5UZW1wbGF0ZShmaWxl
X2hlYWRlcl8gKyBDb2RlR2VuZXJhdG9ySW5zcGVjdG9yU3RyaW5ncy50eXBlYnVpbGRlcl9jcHAp
Ci0gICAgYmFja2VuZF9qcyA9IHN0cmluZy5UZW1wbGF0ZShmaWxlX2hlYWRlcl8gKyBDb2RlR2Vu
ZXJhdG9ySW5zcGVjdG9yU3RyaW5ncy5iYWNrZW5kX2pzKQotICAgIHBhcmFtX2NvbnRhaW5lcl9h
Y2Nlc3NfY29kZSA9IENvZGVHZW5lcmF0b3JJbnNwZWN0b3JTdHJpbmdzLnBhcmFtX2NvbnRhaW5l
cl9hY2Nlc3NfY29kZQotCi0KLQotCi0KLXR5cGVfbWFwID0gVHlwZU1hcChqc29uX2FwaSwgZGVw
ZW5kZW5jeV9hcGkpCi0KLQotY2xhc3MgTmVlZFJ1bnRpbWVDYXN0UmVxdWVzdDoKLSAgICBkZWYg
X19pbml0X18oc2VsZik6Ci0gICAgICAgIHNlbGYuYWNrXyA9IE5vbmUKLQotICAgIGRlZiBhY2tu
b3dsZWRnZShzZWxmKToKLSAgICAgICAgc2VsZi5hY2tfID0gVHJ1ZQotCi0gICAgZGVmIGlzX2Fj
a25vd2xlZGdlZChzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuYWNrXwotCi0KLWRlZiByZXNv
bHZlX2FsbF90eXBlcygpOgotICAgIHJ1bnRpbWVfY2FzdF9nZW5lcmF0ZV9yZXF1ZXN0cyA9IHt9
Ci0gICAgZm9yIHR5cGVfbmFtZSBpbiBUWVBFU19XSVRIX1JVTlRJTUVfQ0FTVF9TRVQ6Ci0gICAg
ICAgIHJ1bnRpbWVfY2FzdF9nZW5lcmF0ZV9yZXF1ZXN0c1t0eXBlX25hbWVdID0gTmVlZFJ1bnRp
bWVDYXN0UmVxdWVzdCgpCi0KLSAgICBjbGFzcyBGb3J3YXJkTGlzdGVuZXI6Ci0gICAgICAgIHR5
cGVfZGF0YV9zZXQgPSBzZXQoKQotICAgICAgICBhbHJlYWR5X2RlY2xhcmVkX3NldCA9IHNldCgp
Ci0KLSAgICAgICAgQGNsYXNzbWV0aG9kCi0gICAgICAgIGRlZiBhZGRfdHlwZV9kYXRhKGNscywg
dHlwZV9kYXRhKToKLSAgICAgICAgICAgIGlmIHR5cGVfZGF0YSBub3QgaW4gY2xzLmFscmVhZHlf
ZGVjbGFyZWRfc2V0OgotICAgICAgICAgICAgICAgIGNscy50eXBlX2RhdGFfc2V0LmFkZCh0eXBl
X2RhdGEpCi0KLSAgICBjbGFzcyBSZXNvbHZlQ29udGV4dDoKLSAgICAgICAgZm9yd2FyZF9saXN0
ZW5lciA9IEZvcndhcmRMaXN0ZW5lcgotCi0gICAgZm9yIGRvbWFpbl9kYXRhIGluIHR5cGVfbWFw
LmRvbWFpbnMoKToKLSAgICAgICAgZm9yIHR5cGVfZGF0YSBpbiBkb21haW5fZGF0YS50eXBlcygp
OgotICAgICAgICAgICAgYmluZGluZyA9IHR5cGVfZGF0YS5nZXRfYmluZGluZygpCi0gICAgICAg
ICAgICBiaW5kaW5nLnJlc29sdmVfaW5uZXIoUmVzb2x2ZUNvbnRleHQpCi0gICAgICAgICAgICAj
IERvIG5vdCBnZW5lcmF0ZSBmb3J3YXJkcyBmb3IgdGhpcyB0eXBlIGFueSBsb25nZXIuCi0gICAg
ICAgICAgICBGb3J3YXJkTGlzdGVuZXIuYWxyZWFkeV9kZWNsYXJlZF9zZXQuYWRkKHR5cGVfZGF0
YSkKLQotICAgIGZvciBkb21haW5fZGF0YSBpbiB0eXBlX21hcC5kb21haW5zKCk6Ci0gICAgICAg
IGZvciB0eXBlX2RhdGEgaW4gZG9tYWluX2RhdGEudHlwZXMoKToKLSAgICAgICAgICAgIGZ1bGxf
dHlwZV9uYW1lID0gIiVzLiVzIiAlICh0eXBlX2RhdGEuZ2V0X2RvbWFpbl9uYW1lKCksIHR5cGVf
ZGF0YS5nZXRfbmFtZSgpKQotICAgICAgICAgICAgcmVxdWVzdCA9IHJ1bnRpbWVfY2FzdF9nZW5l
cmF0ZV9yZXF1ZXN0cy5wb3AoZnVsbF90eXBlX25hbWUsIE5vbmUpCi0gICAgICAgICAgICBiaW5k
aW5nID0gdHlwZV9kYXRhLmdldF9iaW5kaW5nKCkKLSAgICAgICAgICAgIGlmIHJlcXVlc3Q6Ci0g
ICAgICAgICAgICAgICAgYmluZGluZy5yZXF1ZXN0X3VzZXJfcnVudGltZV9jYXN0KHJlcXVlc3Qp
Ci0KLSAgICAgICAgICAgIGlmIHJlcXVlc3QgYW5kIG5vdCByZXF1ZXN0LmlzX2Fja25vd2xlZGdl
ZCgpOgotICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiRmFpbGVkIHRvIGdlbmVyYXRl
IHJ1bnRpbWVDYXN0IGluICIgKyBmdWxsX3R5cGVfbmFtZSkKLQotICAgICMgRklYTUU6IFRoaXMg
YXNzdW1lcyBhbGwgdGhlIGRvbWFpbnMgYXJlIHByb2Nlc3NlZCBhdCBvbmNlLiBDaGFuZ2UgdGhp
cyB2ZXJpZmljYXRpb24KLSAgICAjIHRvIG9ubHkgdmVyaWZ5IHJ1bnRpbWUgY2FzdHMgZm9yIHRo
ZSBkb21haW5zIGJlaW5nIGdlbmVyYXRlZC4KLSAgICAjIGlmIHZlcmlmaWNhdGlvbjoKLSAgICAj
ICAgICBmb3IgZnVsbF90eXBlX25hbWUgaW4gcnVudGltZV9jYXN0X2dlbmVyYXRlX3JlcXVlc3Rz
OgotICAgICMgICAgICAgICByYWlzZSBFeGNlcHRpb24oIkZhaWxlZCB0byBnZW5lcmF0ZSBydW50
aW1lQ2FzdC4gVHlwZSAiICsgZnVsbF90eXBlX25hbWUgKyAiIG5vdCBmb3VuZCIpCi0KLSAgICBy
ZXR1cm4gRm9yd2FyZExpc3RlbmVyCi0KLQotZ2xvYmFsX2ZvcndhcmRfbGlzdGVuZXIgPSByZXNv
bHZlX2FsbF90eXBlcygpCi0KLQotZGVmIGdldF9hbm5vdGF0ZWRfdHlwZV90ZXh0KHJhd190eXBl
LCBhbm5vdGF0ZWRfdHlwZSk6Ci0gICAgaWYgYW5ub3RhdGVkX3R5cGUgIT0gcmF3X3R5cGU6Ci0g
ICAgICAgIHJldHVybiAiLyolcyovICVzIiAlIChhbm5vdGF0ZWRfdHlwZSwgcmF3X3R5cGUpCi0g
ICAgZWxzZToKLSAgICAgICAgcmV0dXJuIHJhd190eXBlCi0KLQotZGVmIGZvcm1hdF9zZXR0ZXJf
dmFsdWVfZXhwcmVzc2lvbihwYXJhbV90eXBlX2JpbmRpbmcsIHZhbHVlX3JlZik6Ci0gICAgcGF0
dGVybiA9IHBhcmFtX3R5cGVfYmluZGluZy5nZXRfc2V0dGVyX3ZhbHVlX2V4cHJlc3Npb25fcGF0
dGVybigpCi0gICAgaWYgcGF0dGVybjoKLSAgICAgICAgcmV0dXJuIHBhdHRlcm4gJSAoSU5TUEVD
VE9SX1RZUEVTX0dFTkVSQVRPUl9DT05GSUdfTUFQW291dHB1dF90eXBlXVsicHJlZml4Il0sIHZh
bHVlX3JlZikKLSAgICBlbHNlOgotICAgICAgICByZXR1cm4gdmFsdWVfcmVmCi0KLQotY2xhc3Mg
R2VuZXJhdG9yOgotICAgIGZyb250ZW5kX2RvbWFpbl9jbGFzc19saW5lcyA9IFtdCi0KLSAgICBi
YWNrZW5kX21ldGhvZF9pbXBsZW1lbnRhdGlvbl9saXN0ID0gW10KLSAgICBmcm9udGVuZF9tZXRo
b2RfbGlzdCA9IFtdCi0gICAgYmFja2VuZF9qc19kb21haW5faW5pdGlhbGl6ZXJfbGlzdCA9IFtd
Ci0KLSAgICBiYWNrZW5kX2hhbmRsZXJfaW50ZXJmYWNlX2xpc3QgPSBbXQotICAgIGJhY2tlbmRf
aGFuZGxlcl9pbXBsZW1lbnRhdGlvbl9saXN0ID0gW10KLSAgICBiYWNrZW5kX2Rpc3BhdGNoZXJf
aW50ZXJmYWNlX2xpc3QgPSBbXQotICAgIHR5cGVfYnVpbGRlcl9mcmFnbWVudHMgPSBbXQotICAg
IHR5cGVfYnVpbGRlcl9mb3J3YXJkcyA9IFtdCi0gICAgdmFsaWRhdG9yX2ltcGxfbGlzdCA9IFtd
Ci0gICAgdHlwZV9idWlsZGVyX2ltcGxfbGlzdCA9IFtdCi0KLQotICAgIEBzdGF0aWNtZXRob2QK
LSAgICBkZWYgZ28oKToKLSAgICAgICAgR2VuZXJhdG9yLnByb2Nlc3NfdHlwZXModHlwZV9tYXAp
Ci0KLSAgICAgICAgZmlyc3RfY3ljbGVfZ3VhcmRhYmxlX2xpc3RfbGlzdCA9IFsKLSAgICAgICAg
ICAgIEdlbmVyYXRvci5iYWNrZW5kX21ldGhvZF9pbXBsZW1lbnRhdGlvbl9saXN0LAotICAgICAg
ICAgICAgR2VuZXJhdG9yLmJhY2tlbmRfaGFuZGxlcl9pbnRlcmZhY2VfbGlzdCwKLSAgICAgICAg
ICAgIEdlbmVyYXRvci5iYWNrZW5kX2hhbmRsZXJfaW1wbGVtZW50YXRpb25fbGlzdCwKLSAgICAg
ICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX2Rpc3BhdGNoZXJfaW50ZXJmYWNlX2xpc3RdCi0KLSAg
ICAgICAgZm9yIGpzb25fZG9tYWluIGluIGpzb25fYXBpWyJkb21haW5zIl06Ci0gICAgICAgICAg
ICBkb21haW5fbmFtZSA9IGpzb25fZG9tYWluWyJkb21haW4iXQotICAgICAgICAgICAgZG9tYWlu
X25hbWVfbG93ZXIgPSBkb21haW5fbmFtZS5sb3dlcigpCi0KLSAgICAgICAgICAgIGRvbWFpbl9m
aXhlcyA9IERvbWFpbk5hbWVGaXhlcy5nZXRfZml4ZWRfZGF0YShkb21haW5fbmFtZSkKLQotICAg
ICAgICAgICAgZG9tYWluX2d1YXJkID0gZG9tYWluX2ZpeGVzLmdldF9ndWFyZCgpCi0KLSAgICAg
ICAgICAgIGlmIGRvbWFpbl9ndWFyZDoKLSAgICAgICAgICAgICAgICBmb3IgbCBpbiBmaXJzdF9j
eWNsZV9ndWFyZGFibGVfbGlzdF9saXN0OgotICAgICAgICAgICAgICAgICAgICBkb21haW5fZ3Vh
cmQuZ2VuZXJhdGVfb3BlbihsKQotCi0gICAgICAgICAgICBmcm9udGVuZF9tZXRob2RfZGVjbGFy
YXRpb25fbGluZXMgPSBbXQotCi0gICAgICAgICAgICBpZiAoImNvbW1hbmRzIiBpbiBqc29uX2Rv
bWFpbiBvciAiZXZlbnRzIiBpbiBqc29uX2RvbWFpbik6Ci0gICAgICAgICAgICAgICAgR2VuZXJh
dG9yLmJhY2tlbmRfanNfZG9tYWluX2luaXRpYWxpemVyX2xpc3QuYXBwZW5kKCIvLyAlcy5cbiIg
JSBkb21haW5fbmFtZSkKLSAgICAgICAgICAgICAgICBpZiBub3QgZG9tYWluX2ZpeGVzLnNraXBf
anNfYmluZDoKLSAgICAgICAgICAgICAgICAgICAgR2VuZXJhdG9yLmJhY2tlbmRfanNfZG9tYWlu
X2luaXRpYWxpemVyX2xpc3QuYXBwZW5kKCJJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyJXNEaXNw
YXRjaGVyID0gSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbkRpc3BhdGNoZXIuYmluZChJ
bnNwZWN0b3JCYWNrZW5kLCBcIiVzXCIpO1xuIiAlIChkb21haW5fbmFtZSwgZG9tYWluX25hbWUp
KQotCi0gICAgICAgICAgICBpZiAidHlwZXMiIGluIGpzb25fZG9tYWluOgotICAgICAgICAgICAg
ICAgIGZvciBqc29uX3R5cGUgaW4ganNvbl9kb21haW5bInR5cGVzIl06Ci0gICAgICAgICAgICAg
ICAgICAgIGlmICJ0eXBlIiBpbiBqc29uX3R5cGUgYW5kIGpzb25fdHlwZVsidHlwZSJdID09ICJz
dHJpbmciIGFuZCAiZW51bSIgaW4ganNvbl90eXBlOgotICAgICAgICAgICAgICAgICAgICAgICAg
ZW51bV9uYW1lID0gIiVzLiVzIiAlIChkb21haW5fbmFtZSwganNvbl90eXBlWyJpZCJdKQotICAg
ICAgICAgICAgICAgICAgICAgICAgR2VuZXJhdG9yLnByb2Nlc3NfZW51bShqc29uX3R5cGUsIGVu
dW1fbmFtZSkKLSAgICAgICAgICAgICAgICAgICAgZWxpZiBqc29uX3R5cGVbInR5cGUiXSA9PSAi
b2JqZWN0IjoKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICJwcm9wZXJ0aWVzIiBpbiBqc29u
X3R5cGU6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGpzb25fcHJvcGVydHkgaW4g
anNvbl90eXBlWyJwcm9wZXJ0aWVzIl06Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmICJ0eXBlIiBpbiBqc29uX3Byb3BlcnR5IGFuZCBqc29uX3Byb3BlcnR5WyJ0eXBlIl0gPT0g
InN0cmluZyIgYW5kICJlbnVtIiBpbiBqc29uX3Byb3BlcnR5OgotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZW51bV9uYW1lID0gIiVzLiVzJXMiICUgKGRvbWFpbl9uYW1lLCBq
c29uX3R5cGVbImlkIl0sIHRvX3RpdGxlX2Nhc2UoanNvbl9wcm9wZXJ0eVsibmFtZSJdKSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdlbmVyYXRvci5wcm9jZXNzX2VudW0o
anNvbl9wcm9wZXJ0eSwgZW51bV9uYW1lKQotCi0gICAgICAgICAgICBpZiAiZXZlbnRzIiBpbiBq
c29uX2RvbWFpbjoKLSAgICAgICAgICAgICAgICBpZiBkb21haW5fZ3VhcmQ6Ci0gICAgICAgICAg
ICAgICAgICAgIGRvbWFpbl9ndWFyZC5nZW5lcmF0ZV9vcGVuKEdlbmVyYXRvci5mcm9udGVuZF9t
ZXRob2RfbGlzdCkKLSAgICAgICAgICAgICAgICAgICAgZG9tYWluX2d1YXJkLmdlbmVyYXRlX29w
ZW4oR2VuZXJhdG9yLmZyb250ZW5kX2RvbWFpbl9jbGFzc19saW5lcykKLQotICAgICAgICAgICAg
ICAgIGZvciBqc29uX2V2ZW50IGluIGpzb25fZG9tYWluWyJldmVudHMiXToKLSAgICAgICAgICAg
ICAgICAgICAgR2VuZXJhdG9yLnByb2Nlc3NfZXZlbnQoanNvbl9ldmVudCwgZG9tYWluX25hbWUs
IGZyb250ZW5kX21ldGhvZF9kZWNsYXJhdGlvbl9saW5lcykKLQotICAgICAgICAgICAgICAgIEdl
bmVyYXRvci5mcm9udGVuZF9kb21haW5fY2xhc3NfbGluZXMuYXBwZW5kKFRlbXBsYXRlcy5mcm9u
dGVuZF9kb21haW5fY2xhc3Muc3Vic3RpdHV0ZShOb25lLAotICAgICAgICAgICAgICAgICAgICBl
eHBvcnRNYWNybz1JTlNQRUNUT1JfVFlQRVNfR0VORVJBVE9SX0NPTkZJR19NQVBbb3V0cHV0X3R5
cGVdWyJleHBvcnRfbWFjcm8iXSwKLSAgICAgICAgICAgICAgICAgICAgZG9tYWluQ2xhc3NOYW1l
PSJJbnNwZWN0b3Ilc0Zyb250ZW5kRGlzcGF0Y2hlciIgJSBkb21haW5fbmFtZSwKLSAgICAgICAg
ICAgICAgICAgICAgZnJvbnRlbmREb21haW5NZXRob2REZWNsYXJhdGlvbnM9IiIuam9pbihmbGF0
dGVuX2xpc3QoZnJvbnRlbmRfbWV0aG9kX2RlY2xhcmF0aW9uX2xpbmVzKSkpKQotCi0gICAgICAg
ICAgICAgICAgaWYgZG9tYWluX2d1YXJkOgotICAgICAgICAgICAgICAgICAgICBkb21haW5fZ3Vh
cmQuZ2VuZXJhdGVfY2xvc2UoR2VuZXJhdG9yLmZyb250ZW5kX21ldGhvZF9saXN0KQotICAgICAg
ICAgICAgICAgICAgICBkb21haW5fZ3VhcmQuZ2VuZXJhdGVfY2xvc2UoR2VuZXJhdG9yLmZyb250
ZW5kX2RvbWFpbl9jbGFzc19saW5lcykKLQotICAgICAgICAgICAgZGlzcGF0Y2hlcl9uYW1lID0g
Ikluc3BlY3RvciIgKyBDYXBpdGFsaXplci5sb3dlcl9jYW1lbF9jYXNlX3RvX3VwcGVyKGRvbWFp
bl9uYW1lKSArICJCYWNrZW5kRGlzcGF0Y2hlciIKLSAgICAgICAgICAgIGFnZW50X2ludGVyZmFj
ZV9uYW1lID0gZGlzcGF0Y2hlcl9uYW1lICsgIkhhbmRsZXIiCi0KLSAgICAgICAgICAgIGlmICJj
b21tYW5kcyIgaW4ganNvbl9kb21haW46Ci0gICAgICAgICAgICAgICAgR2VuZXJhdG9yLmJhY2tl
bmRfZGlzcGF0Y2hlcl9pbnRlcmZhY2VfbGlzdC5hcHBlbmQoImNsYXNzICVzICVzIGZpbmFsIDog
cHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIg
e1xuIiAlIChJTlNQRUNUT1JfVFlQRVNfR0VORVJBVE9SX0NPTkZJR19NQVBbb3V0cHV0X3R5cGVd
WyJleHBvcnRfbWFjcm8iXSwgZGlzcGF0Y2hlcl9uYW1lKSkKLSAgICAgICAgICAgICAgICBHZW5l
cmF0b3IuYmFja2VuZF9kaXNwYXRjaGVyX2ludGVyZmFjZV9saXN0LmFwcGVuZCgicHVibGljOlxu
IikKLSAgICAgICAgICAgICAgICBHZW5lcmF0b3IuYmFja2VuZF9kaXNwYXRjaGVyX2ludGVyZmFj
ZV9saXN0LmFwcGVuZCgiICAgIHN0YXRpYyBQYXNzUmVmUHRyPCVzPiBjcmVhdGUoSW5zcGVjdG9y
OjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciosICVzKik7XG4iICUgKGRpc3BhdGNoZXJfbmFt
ZSwgYWdlbnRfaW50ZXJmYWNlX25hbWUpKQotICAgICAgICAgICAgICAgIEdlbmVyYXRvci5iYWNr
ZW5kX2Rpc3BhdGNoZXJfaW50ZXJmYWNlX2xpc3QuYXBwZW5kKCIgICAgdmlydHVhbCB2b2lkIGRp
c3BhdGNoKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUGFzc1JlZlB0cjxJbnNw
ZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gbWVzc2FnZSkgb3ZlcnJpZGU7XG4iKQotICAgICAgICAg
ICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX2Rpc3BhdGNoZXJfaW50ZXJmYWNlX2xpc3QuYXBwZW5k
KCJwcml2YXRlOlxuIikKLQotICAgICAgICAgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX2hhbmRs
ZXJfaW50ZXJmYWNlX2xpc3QuYXBwZW5kKCJjbGFzcyAlcyAlcyB7XG4iICUgKElOU1BFQ1RPUl9U
WVBFU19HRU5FUkFUT1JfQ09ORklHX01BUFtvdXRwdXRfdHlwZV1bImV4cG9ydF9tYWNybyJdLCBh
Z2VudF9pbnRlcmZhY2VfbmFtZSkpCi0gICAgICAgICAgICAgICAgR2VuZXJhdG9yLmJhY2tlbmRf
aGFuZGxlcl9pbnRlcmZhY2VfbGlzdC5hcHBlbmQoInB1YmxpYzpcbiIpCi0KLSAgICAgICAgICAg
ICAgICBiYWNrZW5kX21ldGhvZF9jb3VudCA9IGxlbihHZW5lcmF0b3IuYmFja2VuZF9tZXRob2Rf
aW1wbGVtZW50YXRpb25fbGlzdCkKLQotICAgICAgICAgICAgICAgIGRpc3BhdGNoZXJfaWZfY2hh
aW4gPSBbXQotICAgICAgICAgICAgICAgIGRpc3BhdGNoZXJfY29tbWFuZHNfbGlzdCA9IFtdCi0g
ICAgICAgICAgICAgICAgZm9yIGpzb25fY29tbWFuZCBpbiBqc29uX2RvbWFpblsiY29tbWFuZHMi
XToKLSAgICAgICAgICAgICAgICAgICAgR2VuZXJhdG9yLnByb2Nlc3NfY29tbWFuZChqc29uX2Nv
bW1hbmQsIGRvbWFpbl9uYW1lLCBhZ2VudF9pbnRlcmZhY2VfbmFtZSwgZGlzcGF0Y2hlcl9uYW1l
LCBkaXNwYXRjaGVyX2lmX2NoYWluLCBkaXNwYXRjaGVyX2NvbW1hbmRzX2xpc3QpCi0KLSAgICAg
ICAgICAgICAgICBHZW5lcmF0b3IuYmFja2VuZF9oYW5kbGVyX2ludGVyZmFjZV9saXN0LmFwcGVu
ZCgicHJvdGVjdGVkOlxuIikKLSAgICAgICAgICAgICAgICBHZW5lcmF0b3IuYmFja2VuZF9oYW5k
bGVyX2ludGVyZmFjZV9saXN0LmFwcGVuZCgiICAgIHZpcnR1YWwgfiVzKCk7XG4iICUgYWdlbnRf
aW50ZXJmYWNlX25hbWUpCi0gICAgICAgICAgICAgICAgR2VuZXJhdG9yLmJhY2tlbmRfaGFuZGxl
cl9pbnRlcmZhY2VfbGlzdC5hcHBlbmQoIn07XG5cbiIpCi0KLSAgICAgICAgICAgICAgICBHZW5l
cmF0b3IuYmFja2VuZF9oYW5kbGVyX2ltcGxlbWVudGF0aW9uX2xpc3QuYXBwZW5kKCIlczo6fiVz
KCkgeyB9XG4iICUgKGFnZW50X2ludGVyZmFjZV9uYW1lLCBhZ2VudF9pbnRlcmZhY2VfbmFtZSkp
Ci0KLSAgICAgICAgICAgICAgICBHZW5lcmF0b3IuYmFja2VuZF9kaXNwYXRjaGVyX2ludGVyZmFj
ZV9saXN0LmFwcGVuZCgicHJpdmF0ZTpcbiIpCi0gICAgICAgICAgICAgICAgR2VuZXJhdG9yLmJh
Y2tlbmRfZGlzcGF0Y2hlcl9pbnRlcmZhY2VfbGlzdC5hcHBlbmQoIiAgICAlcyhJbnNwZWN0b3I6
Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiwgJXMqKTtcbiIgJSAoZGlzcGF0Y2hlcl9uYW1l
LCBhZ2VudF9pbnRlcmZhY2VfbmFtZSkpCi0gICAgICAgICAgICAgICAgR2VuZXJhdG9yLmJhY2tl
bmRfZGlzcGF0Y2hlcl9pbnRlcmZhY2VfbGlzdC5hcHBlbmQoIiAgICAlcyogbV9hZ2VudDtcbiIg
JSBhZ2VudF9pbnRlcmZhY2VfbmFtZSkKLSAgICAgICAgICAgICAgICBHZW5lcmF0b3IuYmFja2Vu
ZF9kaXNwYXRjaGVyX2ludGVyZmFjZV9saXN0LmFwcGVuZCgifTtcblxuIikKLQotICAgICAgICAg
ICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX21ldGhvZF9pbXBsZW1lbnRhdGlvbl9saXN0Lmluc2Vy
dChiYWNrZW5kX21ldGhvZF9jb3VudCwgVGVtcGxhdGVzLmJhY2tlbmRfZGlzcGF0Y2hlcl9jb25z
dHJ1Y3Rvci5zdWJzdGl0dXRlKE5vbmUsCi0gICAgICAgICAgICAgICAgICAgIGRvbWFpbk5hbWU9
ZG9tYWluX25hbWUsCi0gICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoZXJOYW1lPWRpc3BhdGNo
ZXJfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgYWdlbnROYW1lPWFnZW50X2ludGVyZmFjZV9u
YW1lKSkKLQotICAgICAgICAgICAgICAgIGlmIGxlbihqc29uX2RvbWFpblsiY29tbWFuZHMiXSkg
PD0gNToKLSAgICAgICAgICAgICAgICAgICAgR2VuZXJhdG9yLmJhY2tlbmRfbWV0aG9kX2ltcGxl
bWVudGF0aW9uX2xpc3QuaW5zZXJ0KGJhY2tlbmRfbWV0aG9kX2NvdW50ICsgMSwgVGVtcGxhdGVz
LmJhY2tlbmRfZGlzcGF0Y2hlcl9kaXNwYXRjaF9tZXRob2Rfc2ltcGxlLnN1YnN0aXR1dGUoTm9u
ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGRvbWFpbk5hbWU9ZG9tYWluX25hbWUsCi0gICAg
ICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaGVyTmFtZT1kaXNwYXRjaGVyX25hbWUsCi0gICAg
ICAgICAgICAgICAgICAgICAgICBpZkNoYWluPSJcbiIuam9pbihkaXNwYXRjaGVyX2lmX2NoYWlu
KSkpCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgR2VuZXJhdG9y
LmJhY2tlbmRfbWV0aG9kX2ltcGxlbWVudGF0aW9uX2xpc3QuaW5zZXJ0KGJhY2tlbmRfbWV0aG9k
X2NvdW50ICsgMSwgVGVtcGxhdGVzLmJhY2tlbmRfZGlzcGF0Y2hlcl9kaXNwYXRjaF9tZXRob2Qu
c3Vic3RpdHV0ZShOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgZG9tYWluTmFtZT1kb21h
aW5fbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoZXJOYW1lPWRpc3BhdGNo
ZXJfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoZXJDb21tYW5kcz0iXG4i
LmpvaW4oZGlzcGF0Y2hlcl9jb21tYW5kc19saXN0KSkpCi0KLSAgICAgICAgICAgICAgICBpZiBk
b21haW5fZ3VhcmQ6Ci0gICAgICAgICAgICAgICAgICAgIGZvciBsIGluIHJldmVyc2VkKGZpcnN0
X2N5Y2xlX2d1YXJkYWJsZV9saXN0X2xpc3QpOgotICAgICAgICAgICAgICAgICAgICAgICAgZG9t
YWluX2d1YXJkLmdlbmVyYXRlX2Nsb3NlKGwpCi0gICAgICAgICAgICAgICAgR2VuZXJhdG9yLmJh
Y2tlbmRfanNfZG9tYWluX2luaXRpYWxpemVyX2xpc3QuYXBwZW5kKCJcbiIpCi0KLSAgICBAc3Rh
dGljbWV0aG9kCi0gICAgZGVmIHByb2Nlc3NfZW51bShqc29uX2VudW0sIGVudW1fbmFtZSk6Ci0g
ICAgICAgIGVudW1fbWVtYmVycyA9IFtdCi0gICAgICAgIGZvciBtZW1iZXIgaW4ganNvbl9lbnVt
WyJlbnVtIl06Ci0gICAgICAgICAgICBlbnVtX21lbWJlcnMuYXBwZW5kKCIlczogXCIlc1wiIiAl
IChmaXhfY2FtZWxfY2FzZShtZW1iZXIpLCBtZW1iZXIpKQotCi0gICAgICAgIEdlbmVyYXRvci5i
YWNrZW5kX2pzX2RvbWFpbl9pbml0aWFsaXplcl9saXN0LmFwcGVuZCgiSW5zcGVjdG9yQmFja2Vu
ZC5yZWdpc3RlckVudW0oXCIlc1wiLCB7JXN9KTtcbiIgJSAoCi0gICAgICAgICAgICBlbnVtX25h
bWUsICIsICIuam9pbihlbnVtX21lbWJlcnMpKSkKLQotICAgIEBzdGF0aWNtZXRob2QKLSAgICBk
ZWYgcHJvY2Vzc19ldmVudChqc29uX2V2ZW50LCBkb21haW5fbmFtZSwgZnJvbnRlbmRfbWV0aG9k
X2RlY2xhcmF0aW9uX2xpbmVzKToKLSAgICAgICAgZXZlbnRfbmFtZSA9IGpzb25fZXZlbnRbIm5h
bWUiXQotCi0gICAgICAgIGFkX2hvY190eXBlX291dHB1dCA9IFtdCi0gICAgICAgIGZyb250ZW5k
X21ldGhvZF9kZWNsYXJhdGlvbl9saW5lcy5hcHBlbmQoYWRfaG9jX3R5cGVfb3V0cHV0KQotICAg
ICAgICBhZF9ob2NfdHlwZV93cml0ZXIgPSBXcml0ZXIoYWRfaG9jX3R5cGVfb3V0cHV0LCAiICAg
ICAgICAiKQotCi0gICAgICAgIGRlY2xfcGFyYW1ldGVyX2xpc3QgPSBbXQotCi0gICAgICAgIGpz
b25fcGFyYW1ldGVycyA9IGpzb25fZXZlbnQuZ2V0KCJwYXJhbWV0ZXJzIikKLSAgICAgICAgR2Vu
ZXJhdG9yLmdlbmVyYXRlX3NlbmRfbWV0aG9kKGpzb25fcGFyYW1ldGVycywgZXZlbnRfbmFtZSwg
ZG9tYWluX25hbWUsIGFkX2hvY190eXBlX3dyaXRlciwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGRlY2xfcGFyYW1ldGVyX2xpc3QsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHZW5lcmF0b3IuRXZlbnRNZXRob2RTdHJ1Y3RUZW1wbGF0ZSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdlbmVyYXRvci5mcm9udGVu
ZF9tZXRob2RfbGlzdCwgVGVtcGxhdGVzLmZyb250ZW5kX21ldGhvZCwgeyJldmVudE5hbWUiOiBl
dmVudF9uYW1lfSkKLQotICAgICAgICBiYWNrZW5kX2pzX2V2ZW50X3BhcmFtX2xpc3QgPSBbXQot
ICAgICAgICBpZiBqc29uX3BhcmFtZXRlcnM6Ci0gICAgICAgICAgICBmb3IgcGFyYW1ldGVyIGlu
IGpzb25fcGFyYW1ldGVyczoKLSAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfbmFtZSA9IHBhcmFt
ZXRlclsibmFtZSJdCi0gICAgICAgICAgICAgICAgYmFja2VuZF9qc19ldmVudF9wYXJhbV9saXN0
LmFwcGVuZCgiXCIlc1wiIiAlIHBhcmFtZXRlcl9uYW1lKQotCi0gICAgICAgIGZyb250ZW5kX21l
dGhvZF9kZWNsYXJhdGlvbl9saW5lcy5hcHBlbmQoCi0gICAgICAgICAgICAiICAgIHZvaWQgJXMo
JXMpO1xuIiAlIChldmVudF9uYW1lLCAiLCAiLmpvaW4oZGVjbF9wYXJhbWV0ZXJfbGlzdCkpKQot
Ci0gICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX2pzX2RvbWFpbl9pbml0aWFsaXplcl9saXN0LmFw
cGVuZCgiSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckV2ZW50KFwiJXMuJXNcIiwgWyVzXSk7XG4i
ICUgKAotICAgICAgICAgICAgZG9tYWluX25hbWUsIGV2ZW50X25hbWUsICIsICIuam9pbihiYWNr
ZW5kX2pzX2V2ZW50X3BhcmFtX2xpc3QpKSkKLQotICAgIGNsYXNzIEV2ZW50TWV0aG9kU3RydWN0
VGVtcGxhdGU6Ci0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGFwcGVuZF9wcm9s
b2cobGluZV9saXN0KToKLSAgICAgICAgICAgIGxpbmVfbGlzdC5hcHBlbmQoIiAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgp
O1xuIikKLQotICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgIGRlZiBhcHBlbmRfZXBpbG9n
KGxpbmVfbGlzdCk6Ci0gICAgICAgICAgICBsaW5lX2xpc3QuYXBwZW5kKCIgICAganNvbk1lc3Nh
Z2UtPnNldE9iamVjdChBU0NJSUxpdGVyYWwoXCJwYXJhbXNcIiksIHBhcmFtc09iamVjdCk7XG4i
KQotCi0gICAgICAgIGNvbnRhaW5lcl9uYW1lID0gInBhcmFtc09iamVjdCIKLQotICAgIEBzdGF0
aWNtZXRob2QKLSAgICBkZWYgcHJvY2Vzc19jb21tYW5kKGpzb25fY29tbWFuZCwgZG9tYWluX25h
bWUsIGFnZW50X2ludGVyZmFjZV9uYW1lLCBkaXNwYXRjaGVyX25hbWUsIGRpc3BhdGNoZXJfaWZf
Y2hhaW4sIGRpc3BhdGNoZXJfY29tbWFuZHNfbGlzdCk6Ci0gICAgICAgIGpzb25fY29tbWFuZF9u
YW1lID0ganNvbl9jb21tYW5kWyJuYW1lIl0KLQotICAgICAgICBhZF9ob2NfdHlwZV9vdXRwdXQg
PSBbXQotICAgICAgICBHZW5lcmF0b3IuYmFja2VuZF9oYW5kbGVyX2ludGVyZmFjZV9saXN0LmFw
cGVuZChhZF9ob2NfdHlwZV9vdXRwdXQpCi0gICAgICAgIGFkX2hvY190eXBlX3dyaXRlciA9IFdy
aXRlcihhZF9ob2NfdHlwZV9vdXRwdXQsICIgICAgIikKLQotICAgICAgICBHZW5lcmF0b3IuYmFj
a2VuZF9kaXNwYXRjaGVyX2ludGVyZmFjZV9saXN0LmFwcGVuZCgiICAgIHZvaWQgJXMobG9uZyBj
YWxsSWQsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTtcbiIgJSBq
c29uX2NvbW1hbmRfbmFtZSkKLQotICAgICAgICBHZW5lcmF0b3IuYmFja2VuZF9oYW5kbGVyX2lu
dGVyZmFjZV9saXN0LmFwcGVuZCgiICAgIHZpcnR1YWwgdm9pZCAlcyhFcnJvclN0cmluZyoiICUg
anNvbl9jb21tYW5kX25hbWUpCi0KLSAgICAgICAgaWYgbm90IGRpc3BhdGNoZXJfaWZfY2hhaW46
Ci0gICAgICAgICAgICBkaXNwYXRjaGVyX2lmX2NoYWluLmFwcGVuZCgiICAgIGlmIChtZXRob2Qg
PT0gXCIlc1wiKSIgJSBqc29uX2NvbW1hbmRfbmFtZSkKLSAgICAgICAgZWxzZToKLSAgICAgICAg
ICAgIGRpc3BhdGNoZXJfaWZfY2hhaW4uYXBwZW5kKCIgICAgZWxzZSBpZiAobWV0aG9kID09IFwi
JXNcIikiICUganNvbl9jb21tYW5kX25hbWUpCi0gICAgICAgIGRpc3BhdGNoZXJfaWZfY2hhaW4u
YXBwZW5kKCIgICAgICAgICVzKGNhbGxJZCwgKm1lc3NhZ2UuZ2V0KCkpOyIgJSBqc29uX2NvbW1h
bmRfbmFtZSkKLSAgICAgICAgZGlzcGF0Y2hlcl9jb21tYW5kc19saXN0LmFwcGVuZCgiICAgICAg
ICAgICAgeyBcIiVzXCIsICYlczo6JXMgfSwiICUgKGpzb25fY29tbWFuZF9uYW1lLCBkaXNwYXRj
aGVyX25hbWUsIGpzb25fY29tbWFuZF9uYW1lKSkKLQotICAgICAgICBtZXRob2RfaW5fcGFyYW1z
X2hhbmRsaW5nID0gW10KLSAgICAgICAgbWV0aG9kX2Rpc3BhdGNoX2hhbmRsaW5nID0gW10KLSAg
ICAgICAgbWV0aG9kX291dF9wYXJhbXNfaGFuZGxpbmcgPSBbXQotICAgICAgICBtZXRob2RfZW5k
aW5nX2hhbmRsaW5nID0gW10KLSAgICAgICAgbWV0aG9kX3JlcXVlc3RfbWVzc2FnZV9wYXJhbV9u
YW1lID0gIiIKLSAgICAgICAgYWdlbnRfY2FsbF9wYXJhbV9saXN0ID0gW10KLSAgICAgICAganNf
cGFyYW1ldGVyc190ZXh0ID0gIiIKLSAgICAgICAgaWYgInBhcmFtZXRlcnMiIGluIGpzb25fY29t
bWFuZDoKLSAgICAgICAgICAgIGpzb25fcGFyYW1zID0ganNvbl9jb21tYW5kWyJwYXJhbWV0ZXJz
Il0KLSAgICAgICAgICAgIG1ldGhvZF9yZXF1ZXN0X21lc3NhZ2VfcGFyYW1fbmFtZSA9ICIgbWVz
c2FnZSIKLSAgICAgICAgICAgIG1ldGhvZF9pbl9wYXJhbXNfaGFuZGxpbmcuYXBwZW5kKCIgICAg
UmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5Ojpj
cmVhdGUoKTtcbiIpCi0gICAgICAgICAgICBtZXRob2RfaW5fcGFyYW1zX2hhbmRsaW5nLmFwcGVu
ZCgiICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IG1lc3NhZ2Uu
Z2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbChcInBhcmFtc1wiKSk7XG4iKQotICAgICAgICAgICAgbWV0
aG9kX2luX3BhcmFtc19oYW5kbGluZy5hcHBlbmQoIiAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFt
c0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTtcbiIpCi0gICAgICAgICAgICBt
ZXRob2RfaW5fcGFyYW1zX2hhbmRsaW5nLmFwcGVuZCgiICAgIEluc3BlY3RvckFycmF5KiBwcm90
b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpO1xuIikKLSAgICAgICAgICAgIGpz
X3BhcmFtX2xpc3QgPSBbXQotCi0gICAgICAgICAgICBmb3IganNvbl9wYXJhbWV0ZXIgaW4ganNv
bl9wYXJhbXM6Ci0gICAgICAgICAgICAgICAganNvbl9wYXJhbV9uYW1lID0ganNvbl9wYXJhbWV0
ZXJbIm5hbWUiXQotICAgICAgICAgICAgICAgIHBhcmFtX3Jhd190eXBlID0gcmVzb2x2ZV9wYXJh
bV9yYXdfdHlwZShqc29uX3BhcmFtZXRlciwgZG9tYWluX25hbWUpCi0KLSAgICAgICAgICAgICAg
ICBnZXR0ZXJfbmFtZSA9IHBhcmFtX3Jhd190eXBlLmdldF9nZXR0ZXJfbmFtZSgpCi0KLSAgICAg
ICAgICAgICAgICBvcHRpb25hbCA9IGpzb25fcGFyYW1ldGVyLmdldCgib3B0aW9uYWwiKQotCi0g
ICAgICAgICAgICAgICAgbm9uX29wdGlvbmFsX3R5cGVfbW9kZWwgPSBwYXJhbV9yYXdfdHlwZS5n
ZXRfcmF3X3R5cGVfbW9kZWwoKQotICAgICAgICAgICAgICAgIGlmIG9wdGlvbmFsOgotICAgICAg
ICAgICAgICAgICAgICB0eXBlX21vZGVsID0gbm9uX29wdGlvbmFsX3R5cGVfbW9kZWwuZ2V0X29w
dGlvbmFsKCkKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICB0eXBl
X21vZGVsID0gbm9uX29wdGlvbmFsX3R5cGVfbW9kZWwKLQotICAgICAgICAgICAgICAgIGlmIG9w
dGlvbmFsOgotICAgICAgICAgICAgICAgICAgICBjb2RlID0gKCIgICAgYm9vbCAlc192YWx1ZUZv
dW5kID0gZmFsc2U7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAlcyBpbl8l
cyA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXQlcyhwYXJhbXNDb250YWluZXJQdHIs
IEFTQ0lJTGl0ZXJhbChcIiVzXCIpLCAmJXNfdmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJvcnNQdHIp
O1xuIiAlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAoanNvbl9wYXJhbV9uYW1lLCBub25f
b3B0aW9uYWxfdHlwZV9tb2RlbC5nZXRfY29tbWFuZF9yZXR1cm5fcGFzc19tb2RlbCgpLmdldF9y
ZXR1cm5fdmFyX3R5cGUoKSwganNvbl9wYXJhbV9uYW1lLCBnZXR0ZXJfbmFtZSwganNvbl9wYXJh
bV9uYW1lLCBqc29uX3BhcmFtX25hbWUpKQotICAgICAgICAgICAgICAgICAgICBwYXJhbSA9ICIs
ICVzX3ZhbHVlRm91bmQgPyAmaW5fJXMgOiBudWxscHRyIiAlIChqc29uX3BhcmFtX25hbWUsIGpz
b25fcGFyYW1fbmFtZSkKLSAgICAgICAgICAgICAgICAgICAgIyBGSVhNRTogcGFzcyBvcHRpb25h
bCByZWZwdHItdmFsdWVzIGFzIFBhc3NSZWZQdHIKLSAgICAgICAgICAgICAgICAgICAgZm9ybWFs
X3BhcmFtX3R5cGVfcGF0dGVybiA9ICJjb25zdCAlcyoiCi0gICAgICAgICAgICAgICAgZWxzZToK
LSAgICAgICAgICAgICAgICAgICAgY29kZSA9ICgiICAgICVzIGluXyVzID0gSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXI6OmdldCVzKHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKFwi
JXNcIiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzUHRyKTtcbiIgJQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIChub25fb3B0aW9uYWxfdHlwZV9tb2RlbC5nZXRfY29tbWFuZF9yZXR1cm5f
cGFzc19tb2RlbCgpLmdldF9yZXR1cm5fdmFyX3R5cGUoKSwganNvbl9wYXJhbV9uYW1lLCBnZXR0
ZXJfbmFtZSwganNvbl9wYXJhbV9uYW1lKSkKLSAgICAgICAgICAgICAgICAgICAgcGFyYW0gPSAi
LCBpbl8lcyIgJSBqc29uX3BhcmFtX25hbWUKLSAgICAgICAgICAgICAgICAgICAgIyBGSVhNRTog
cGFzcyBub3Qtb3B0aW9uYWwgcmVmcHRyLXZhbHVlcyBhcyBOb25OdWxsUGFzc1JlZlB0cgotICAg
ICAgICAgICAgICAgICAgICBpZiBwYXJhbV9yYXdfdHlwZS5pc19oZWF2eV92YWx1ZSgpOgotICAg
ICAgICAgICAgICAgICAgICAgICAgZm9ybWFsX3BhcmFtX3R5cGVfcGF0dGVybiA9ICJjb25zdCAl
cyYiCi0gICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICBm
b3JtYWxfcGFyYW1fdHlwZV9wYXR0ZXJuID0gIiVzIgotCi0gICAgICAgICAgICAgICAgbWV0aG9k
X2luX3BhcmFtc19oYW5kbGluZy5hcHBlbmQoY29kZSkKLSAgICAgICAgICAgICAgICBhZ2VudF9j
YWxsX3BhcmFtX2xpc3QuYXBwZW5kKHBhcmFtKQotICAgICAgICAgICAgICAgIEdlbmVyYXRvci5i
YWNrZW5kX2hhbmRsZXJfaW50ZXJmYWNlX2xpc3QuYXBwZW5kKCIsICVzIGluXyVzIiAlIChmb3Jt
YWxfcGFyYW1fdHlwZV9wYXR0ZXJuICUgbm9uX29wdGlvbmFsX3R5cGVfbW9kZWwuZ2V0X2NvbW1h
bmRfcmV0dXJuX3Bhc3NfbW9kZWwoKS5nZXRfcmV0dXJuX3Zhcl90eXBlKCksIGpzb25fcGFyYW1f
bmFtZSkpCi0KLSAgICAgICAgICAgICAgICBqc19iaW5kX3R5cGUgPSBwYXJhbV9yYXdfdHlwZS5n
ZXRfanNfYmluZF90eXBlKCkKLSAgICAgICAgICAgICAgICBqc19wYXJhbV90ZXh0ID0gIntcIm5h
bWVcIjogXCIlc1wiLCBcInR5cGVcIjogXCIlc1wiLCBcIm9wdGlvbmFsXCI6ICVzfSIgJSAoCi0g
ICAgICAgICAgICAgICAgICAgIGpzb25fcGFyYW1fbmFtZSwKLSAgICAgICAgICAgICAgICAgICAg
anNfYmluZF90eXBlLAotICAgICAgICAgICAgICAgICAgICAoInRydWUiIGlmICgib3B0aW9uYWwi
IGluIGpzb25fcGFyYW1ldGVyIGFuZCBqc29uX3BhcmFtZXRlclsib3B0aW9uYWwiXSkgZWxzZSAi
ZmFsc2UiKSkKLQotICAgICAgICAgICAgICAgIGpzX3BhcmFtX2xpc3QuYXBwZW5kKGpzX3BhcmFt
X3RleHQpCi0KLSAgICAgICAgICAgIG1ldGhvZF9pbl9wYXJhbXNfaGFuZGxpbmcuYXBwZW5kKCIg
ICAgaWYgKHByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkge1xuIikKLSAgICAgICAgICAgIG1ldGhv
ZF9pbl9wYXJhbXNfaGFuZGxpbmcuYXBwZW5kKCIgICAgICAgIFN0cmluZyBlcnJvck1lc3NhZ2Ug
PSBTdHJpbmc6OmZvcm1hdChcIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJSVzJyBjYW4ndCBi
ZSBwcm9jZXNzZWRcIiwgXCIlcy4lc1wiKTtcbiIgJSAoZG9tYWluX25hbWUsIGpzb25fY29tbWFu
ZF9uYW1lKSkKLSAgICAgICAgICAgIG1ldGhvZF9pbl9wYXJhbXNfaGFuZGxpbmcuYXBwZW5kKCIg
ICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwg
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkludmFsaWRQYXJhbXMsIGVycm9yTWVzc2FnZSwg
cHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpKTtcbiIpCi0gICAgICAgICAgICBtZXRob2RfaW5fcGFy
YW1zX2hhbmRsaW5nLmFwcGVuZCgiICAgICAgICByZXR1cm47XG4iKQotICAgICAgICAgICAgbWV0
aG9kX2luX3BhcmFtc19oYW5kbGluZy5hcHBlbmQoIiAgICB9XG4iKQotICAgICAgICAgICAgbWV0
aG9kX2luX3BhcmFtc19oYW5kbGluZy5hcHBlbmQoIlxuIikKLQotICAgICAgICAgICAganNfcGFy
YW1ldGVyc190ZXh0ID0gIiwgIi5qb2luKGpzX3BhcmFtX2xpc3QpCi0KLSAgICAgICAgbWV0aG9k
X2Rpc3BhdGNoX2hhbmRsaW5nLmFwcGVuZCgiICAgIEVycm9yU3RyaW5nIGVycm9yO1xuIikKLSAg
ICAgICAgbWV0aG9kX2Rpc3BhdGNoX2hhbmRsaW5nLmFwcGVuZCgiICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7XG4iKQotCi0gICAg
ICAgIGlmIGpzb25fY29tbWFuZC5nZXQoImFzeW5jIikgPT0gVHJ1ZToKLSAgICAgICAgICAgIGNh
bGxiYWNrX25hbWUgPSBDYXBpdGFsaXplci5sb3dlcl9jYW1lbF9jYXNlX3RvX3VwcGVyKGpzb25f
Y29tbWFuZF9uYW1lKSArICJDYWxsYmFjayIKLQotICAgICAgICAgICAgY2FsbGJhY2tfb3V0cHV0
ID0gW10KLSAgICAgICAgICAgIGNhbGxiYWNrX3dyaXRlciA9IFdyaXRlcihjYWxsYmFja19vdXRw
dXQsIGFkX2hvY190eXBlX3dyaXRlci5nZXRfaW5kZW50KCkpCi0KLSAgICAgICAgICAgIGRlY2xf
cGFyYW1ldGVyX2xpc3QgPSBbXQotICAgICAgICAgICAgR2VuZXJhdG9yLmdlbmVyYXRlX3NlbmRf
bWV0aG9kKGpzb25fY29tbWFuZC5nZXQoInJldHVybnMiKSwganNvbl9jb21tYW5kX25hbWUsIGRv
bWFpbl9uYW1lLCBhZF9ob2NfdHlwZV93cml0ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZGVjbF9wYXJhbWV0ZXJfbGlzdCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHZW5lcmF0b3IuQ2FsbGJhY2tNZXRob2RTdHJ1Y3RU
ZW1wbGF0ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHZW5l
cmF0b3IuYmFja2VuZF9tZXRob2RfaW1wbGVtZW50YXRpb25fbGlzdCwgVGVtcGxhdGVzLmNhbGxi
YWNrX21ldGhvZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7
ImNhbGxiYWNrTmFtZSI6IGNhbGxiYWNrX25hbWUsICJoYW5kbGVyTmFtZSI6IGFnZW50X2ludGVy
ZmFjZV9uYW1lfSkKLQotICAgICAgICAgICAgY2FsbGJhY2tfd3JpdGVyLm5ld2xpbmUoImNsYXNz
ICIgKyBjYWxsYmFja19uYW1lICsgIiA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2Uge1xuIikKLSAgICAgICAgICAgIGNhbGxiYWNrX3dy
aXRlci5uZXdsaW5lKCJwdWJsaWM6XG4iKQotICAgICAgICAgICAgY2FsbGJhY2tfd3JpdGVyLm5l
d2xpbmUoIiAgICAiICsgY2FsbGJhY2tfbmFtZSArICIoUGFzc1JlZlB0cjxJbnNwZWN0b3I6Oklu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiwgaW50IGlkKTtcbiIpCi0gICAgICAgICAgICBjYWxs
YmFja193cml0ZXIubmV3bGluZSgiICAgIHZvaWQgc2VuZFN1Y2Nlc3MoIiArICIsICIuam9pbihk
ZWNsX3BhcmFtZXRlcl9saXN0KSArICIpO1xuIikKLSAgICAgICAgICAgIGNhbGxiYWNrX3dyaXRl
ci5uZXdsaW5lKCJ9O1xuIikKLQotICAgICAgICAgICAgYWRfaG9jX3R5cGVfb3V0cHV0LmFwcGVu
ZChjYWxsYmFja19vdXRwdXQpCi0KLSAgICAgICAgICAgIG1ldGhvZF9kaXNwYXRjaF9oYW5kbGlu
Zy5hcHBlbmQoIiAgICBSZWZQdHI8JXM6OiVzPiBjYWxsYmFjayA9IGFkb3B0UmVmKG5ldyAlczo6
JXMobV9iYWNrZW5kRGlzcGF0Y2hlcixjYWxsSWQpKTtcbiIgJSAoYWdlbnRfaW50ZXJmYWNlX25h
bWUsIGNhbGxiYWNrX25hbWUsIGFnZW50X2ludGVyZmFjZV9uYW1lLCBjYWxsYmFja19uYW1lKSkK
LSAgICAgICAgICAgIG1ldGhvZF9lbmRpbmdfaGFuZGxpbmcuYXBwZW5kKCIgICAgaWYgKGVycm9y
Lmxlbmd0aCgpKSB7XG4iKQotICAgICAgICAgICAgbWV0aG9kX2VuZGluZ19oYW5kbGluZy5hcHBl
bmQoIiAgICAgICAgY2FsbGJhY2stPmRpc2FibGUoKTtcbiIpCi0gICAgICAgICAgICBtZXRob2Rf
ZW5kaW5nX2hhbmRsaW5nLmFwcGVuZCgiICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBv
cnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7XG4iKQotICAgICAgICAgICAgbWV0aG9kX2VuZGlu
Z19oYW5kbGluZy5hcHBlbmQoIiAgICAgICAgcmV0dXJuO1xuIikKLSAgICAgICAgICAgIG1ldGhv
ZF9lbmRpbmdfaGFuZGxpbmcuYXBwZW5kKCIgICAgfSIpCi0KLSAgICAgICAgICAgIGFnZW50X2Nh
bGxfcGFyYW1fbGlzdC5hcHBlbmQoIiwgY2FsbGJhY2siKQotICAgICAgICAgICAgR2VuZXJhdG9y
LmJhY2tlbmRfaGFuZGxlcl9pbnRlcmZhY2VfbGlzdC5hcHBlbmQoIiwgUGFzc1JlZlB0cjwlcz4g
Y2FsbGJhY2siICUgY2FsbGJhY2tfbmFtZSkKLSAgICAgICAgZWxpZiAicmV0dXJucyIgaW4ganNv
bl9jb21tYW5kOgotICAgICAgICAgICAgaGFzX211bHRpcGxlX3JldHVybnMgPSBsZW4oanNvbl9j
b21tYW5kWyJyZXR1cm5zIl0pID4gMQotICAgICAgICAgICAgaWYgaGFzX211bHRpcGxlX3JldHVy
bnM6Ci0gICAgICAgICAgICAgICAgbWV0aG9kX291dF9wYXJhbXNfaGFuZGxpbmcuYXBwZW5kKCIg
ICAgaWYgKCFlcnJvci5sZW5ndGgoKSkge1xuIikKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAg
ICAgICAgICAgbWV0aG9kX291dF9wYXJhbXNfaGFuZGxpbmcuYXBwZW5kKCIgICAgaWYgKCFlcnJv
ci5sZW5ndGgoKSlcbiIpCi0KLSAgICAgICAgICAgIGZvciBqc29uX3JldHVybiBpbiBqc29uX2Nv
bW1hbmRbInJldHVybnMiXToKLQotICAgICAgICAgICAgICAgIGpzb25fcmV0dXJuX25hbWUgPSBq
c29uX3JldHVyblsibmFtZSJdCi0KLSAgICAgICAgICAgICAgICBvcHRpb25hbCA9IGJvb2woanNv
bl9yZXR1cm4uZ2V0KCJvcHRpb25hbCIpKQotCi0gICAgICAgICAgICAgICAgcmV0dXJuX3R5cGVf
YmluZGluZyA9IEdlbmVyYXRvci5yZXNvbHZlX3R5cGVfYW5kX2dlbmVyYXRlX2FkX2hvYyhqc29u
X3JldHVybiwganNvbl9jb21tYW5kX25hbWUsIGRvbWFpbl9uYW1lLCBhZF9ob2NfdHlwZV93cml0
ZXIsIGFnZW50X2ludGVyZmFjZV9uYW1lICsgIjo6IikKLQotICAgICAgICAgICAgICAgIHJhd190
eXBlID0gcmV0dXJuX3R5cGVfYmluZGluZy5yZWR1Y2VfdG9fcmF3X3R5cGUoKQotICAgICAgICAg
ICAgICAgIHNldHRlcl90eXBlID0gcmF3X3R5cGUuZ2V0X3NldHRlcl9uYW1lKCkKLSAgICAgICAg
ICAgICAgICBpbml0aWFsaXplciA9IHJhd190eXBlLmdldF9jX2luaXRpYWxpemVyKCkKLQotICAg
ICAgICAgICAgICAgIHR5cGVfbW9kZWwgPSByZXR1cm5fdHlwZV9iaW5kaW5nLmdldF90eXBlX21v
ZGVsKCkKLSAgICAgICAgICAgICAgICBpZiBvcHRpb25hbDoKLSAgICAgICAgICAgICAgICAgICAg
dHlwZV9tb2RlbCA9IHR5cGVfbW9kZWwuZ2V0X29wdGlvbmFsKCkKLQotICAgICAgICAgICAgICAg
IGNvZGUgPSAiICAgICVzIG91dF8lcztcbiIgJSAodHlwZV9tb2RlbC5nZXRfY29tbWFuZF9yZXR1
cm5fcGFzc19tb2RlbCgpLmdldF9yZXR1cm5fdmFyX3R5cGUoKSwganNvbl9yZXR1cm5fbmFtZSkK
LSAgICAgICAgICAgICAgICBwYXJhbSA9ICIsICVzb3V0XyVzIiAlICh0eXBlX21vZGVsLmdldF9j
b21tYW5kX3JldHVybl9wYXNzX21vZGVsKCkuZ2V0X291dHB1dF9hcmd1bWVudF9wcmVmaXgoKSwg
anNvbl9yZXR1cm5fbmFtZSkKLSAgICAgICAgICAgICAgICB2YXJfbmFtZSA9ICJvdXRfJXMiICUg
anNvbl9yZXR1cm5fbmFtZQotICAgICAgICAgICAgICAgIHNldHRlcl9hcmd1bWVudCA9IHR5cGVf
bW9kZWwuZ2V0X2NvbW1hbmRfcmV0dXJuX3Bhc3NfbW9kZWwoKS5nZXRfb3V0cHV0X3RvX3Jhd19l
eHByZXNzaW9uKCkgJSB2YXJfbmFtZQotICAgICAgICAgICAgICAgIGlmIHJldHVybl90eXBlX2Jp
bmRpbmcuZ2V0X3NldHRlcl92YWx1ZV9leHByZXNzaW9uX3BhdHRlcm4oKToKLSAgICAgICAgICAg
ICAgICAgICAgc2V0dGVyX2FyZ3VtZW50ID0gcmV0dXJuX3R5cGVfYmluZGluZy5nZXRfc2V0dGVy
X3ZhbHVlX2V4cHJlc3Npb25fcGF0dGVybigpICUgKElOU1BFQ1RPUl9UWVBFU19HRU5FUkFUT1Jf
Q09ORklHX01BUFtvdXRwdXRfdHlwZV1bInByZWZpeCJdLCBzZXR0ZXJfYXJndW1lbnQpCi0KLSAg
ICAgICAgICAgICAgICBjb29rID0gIiAgICAgICAgcmVzdWx0LT5zZXQlcyhBU0NJSUxpdGVyYWwo
XCIlc1wiKSwgJXMpO1xuIiAlIChzZXR0ZXJfdHlwZSwganNvbl9yZXR1cm5fbmFtZSwgc2V0dGVy
X2FyZ3VtZW50KQotCi0gICAgICAgICAgICAgICAgc2V0X2NvbmRpdGlvbl9wYXR0ZXJuID0gdHlw
ZV9tb2RlbC5nZXRfY29tbWFuZF9yZXR1cm5fcGFzc19tb2RlbCgpLmdldF9zZXRfcmV0dXJuX2Nv
bmRpdGlvbigpCi0gICAgICAgICAgICAgICAgaWYgc2V0X2NvbmRpdGlvbl9wYXR0ZXJuOgotICAg
ICAgICAgICAgICAgICAgICBjb29rID0gKCIgICAgICAgIGlmICglcylcbiAgICAiICUgKHNldF9j
b25kaXRpb25fcGF0dGVybiAlIHZhcl9uYW1lKSkgKyBjb29rCi0gICAgICAgICAgICAgICAgYW5u
b3RhdGVkX3R5cGUgPSB0eXBlX21vZGVsLmdldF9jb21tYW5kX3JldHVybl9wYXNzX21vZGVsKCku
Z2V0X291dHB1dF9wYXJhbWV0ZXJfdHlwZSgpCi0KLSAgICAgICAgICAgICAgICBwYXJhbV9uYW1l
ID0gIm91dF8lcyIgJSBqc29uX3JldHVybl9uYW1lCi0gICAgICAgICAgICAgICAgaWYgb3B0aW9u
YWw6Ci0gICAgICAgICAgICAgICAgICAgIHBhcmFtX25hbWUgPSAib3B0XyIgKyBwYXJhbV9uYW1l
Ci0KLSAgICAgICAgICAgICAgICBHZW5lcmF0b3IuYmFja2VuZF9oYW5kbGVyX2ludGVyZmFjZV9s
aXN0LmFwcGVuZCgiLCAlcyAlcyIgJSAoYW5ub3RhdGVkX3R5cGUsIHBhcmFtX25hbWUpKQotICAg
ICAgICAgICAgICAgIG1ldGhvZF9vdXRfcGFyYW1zX2hhbmRsaW5nLmFwcGVuZChjb29rKQotICAg
ICAgICAgICAgICAgIG1ldGhvZF9kaXNwYXRjaF9oYW5kbGluZy5hcHBlbmQoY29kZSkKLQotICAg
ICAgICAgICAgICAgIGFnZW50X2NhbGxfcGFyYW1fbGlzdC5hcHBlbmQocGFyYW0pCi0KLSAgICAg
ICAgICAgIGlmIGhhc19tdWx0aXBsZV9yZXR1cm5zOgotICAgICAgICAgICAgICAgIG1ldGhvZF9v
dXRfcGFyYW1zX2hhbmRsaW5nLmFwcGVuZCgiICAgIH1cbiIpCi0gICAgICAgICAgICBtZXRob2Rf
b3V0X3BhcmFtc19oYW5kbGluZy5hcHBlbmQoIlxuIikKLQotICAgICAgICBtZXRob2RfZGlzcGF0
Y2hfaGFuZGxpbmcuYXBwZW5kKCIgICAgbV9hZ2VudC0+JXMoJmVycm9yJXMpO1xuIiAlIChqc29u
X2NvbW1hbmRfbmFtZSwgIiIuam9pbihhZ2VudF9jYWxsX3BhcmFtX2xpc3QpKSkKLSAgICAgICAg
bWV0aG9kX2Rpc3BhdGNoX2hhbmRsaW5nLmFwcGVuZCgiXG4iKQotCi0gICAgICAgIGlmIG5vdCBt
ZXRob2RfZW5kaW5nX2hhbmRsaW5nOgotICAgICAgICAgICAgbWV0aG9kX2VuZGluZ19oYW5kbGlu
Zy5hcHBlbmQoIiAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElkLCBy
ZXN1bHQucmVsZWFzZSgpLCBlcnJvcik7IikKLQotICAgICAgICBiYWNrZW5kX2pzX3JlcGx5X3Bh
cmFtX2xpc3QgPSBbXQotICAgICAgICBpZiAicmV0dXJucyIgaW4ganNvbl9jb21tYW5kOgotICAg
ICAgICAgICAgZm9yIGpzb25fcmV0dXJuIGluIGpzb25fY29tbWFuZFsicmV0dXJucyJdOgotICAg
ICAgICAgICAgICAgIGpzb25fcmV0dXJuX25hbWUgPSBqc29uX3JldHVyblsibmFtZSJdCi0gICAg
ICAgICAgICAgICAgYmFja2VuZF9qc19yZXBseV9wYXJhbV9saXN0LmFwcGVuZCgiXCIlc1wiIiAl
IGpzb25fcmV0dXJuX25hbWUpCi0KLSAgICAgICAganNfcmVwbHlfbGlzdCA9ICJbJXNdIiAlICIs
ICIuam9pbihiYWNrZW5kX2pzX3JlcGx5X3BhcmFtX2xpc3QpCi0KLSAgICAgICAgR2VuZXJhdG9y
LmJhY2tlbmRfbWV0aG9kX2ltcGxlbWVudGF0aW9uX2xpc3QuYXBwZW5kKFRlbXBsYXRlcy5iYWNr
ZW5kX21ldGhvZC5zdWJzdGl0dXRlKE5vbmUsCi0gICAgICAgICAgICBkaXNwYXRjaGVyTmFtZT1k
aXNwYXRjaGVyX25hbWUsCi0gICAgICAgICAgICBtZXRob2ROYW1lPWpzb25fY29tbWFuZF9uYW1l
LAotICAgICAgICAgICAgcmVxdWVzdE1lc3NhZ2VPYmplY3Q9bWV0aG9kX3JlcXVlc3RfbWVzc2Fn
ZV9wYXJhbV9uYW1lLAotICAgICAgICAgICAgbWV0aG9kSW5QYXJhbWV0ZXJzSGFuZGxpbmc9IiIu
am9pbihtZXRob2RfaW5fcGFyYW1zX2hhbmRsaW5nKSwKLSAgICAgICAgICAgIG1ldGhvZERpc3Bh
dGNoSGFuZGxpbmc9IiIuam9pbihtZXRob2RfZGlzcGF0Y2hfaGFuZGxpbmcpLAotICAgICAgICAg
ICAgbWV0aG9kT3V0UGFyYW1ldGVyc0hhbmRsaW5nPSIiLmpvaW4obWV0aG9kX291dF9wYXJhbXNf
aGFuZGxpbmcpLAotICAgICAgICAgICAgbWV0aG9kRW5kaW5nSGFuZGxpbmc9IiIuam9pbihtZXRo
b2RfZW5kaW5nX2hhbmRsaW5nKSkpCi0KLSAgICAgICAgR2VuZXJhdG9yLmJhY2tlbmRfanNfZG9t
YWluX2luaXRpYWxpemVyX2xpc3QuYXBwZW5kKCJJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29t
bWFuZChcIiVzLiVzXCIsIFslc10sICVzKTtcbiIgJSAoZG9tYWluX25hbWUsIGpzb25fY29tbWFu
ZF9uYW1lLCBqc19wYXJhbWV0ZXJzX3RleHQsIGpzX3JlcGx5X2xpc3QpKQotICAgICAgICBHZW5l
cmF0b3IuYmFja2VuZF9oYW5kbGVyX2ludGVyZmFjZV9saXN0LmFwcGVuZCgiKSA9IDA7XG4iKQot
Ci0gICAgY2xhc3MgQ2FsbGJhY2tNZXRob2RTdHJ1Y3RUZW1wbGF0ZToKLSAgICAgICAgQHN0YXRp
Y21ldGhvZAotICAgICAgICBkZWYgYXBwZW5kX3Byb2xvZyhsaW5lX2xpc3QpOgotICAgICAgICAg
ICAgcGFzcwotCi0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGFwcGVuZF9lcGls
b2cobGluZV9saXN0KToKLSAgICAgICAgICAgIHBhc3MKLQotICAgICAgICBjb250YWluZXJfbmFt
ZSA9ICJqc29uTWVzc2FnZSIKLQotICAgICMgR2VuZXJhdGVzIGNvbW1vbiBjb2RlIGZvciBldmVu
dCBzZW5kaW5nIGFuZCBjYWxsYmFjayByZXNwb25zZSBkYXRhIHNlbmRpbmcuCi0gICAgQHN0YXRp
Y21ldGhvZAotICAgIGRlZiBnZW5lcmF0ZV9zZW5kX21ldGhvZChwYXJhbWV0ZXJzLCBldmVudF9u
YW1lLCBkb21haW5fbmFtZSwgYWRfaG9jX3R5cGVfd3JpdGVyLCBkZWNsX3BhcmFtZXRlcl9saXN0
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Rfc3RydWN0X3RlbXBsYXRlLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0b3JfbWV0aG9kX2xpc3QsIG1ldGhv
ZF90ZW1wbGF0ZSwgdGVtcGxhdGVfcGFyYW1zKToKLSAgICAgICAgbWV0aG9kX2xpbmVfbGlzdCA9
IFtdCi0gICAgICAgIGlmIHBhcmFtZXRlcnM6Ci0gICAgICAgICAgICBtZXRob2Rfc3RydWN0X3Rl
bXBsYXRlLmFwcGVuZF9wcm9sb2cobWV0aG9kX2xpbmVfbGlzdCkKLSAgICAgICAgICAgIGZvciBq
c29uX3BhcmFtZXRlciBpbiBwYXJhbWV0ZXJzOgotICAgICAgICAgICAgICAgIHBhcmFtZXRlcl9u
YW1lID0ganNvbl9wYXJhbWV0ZXJbIm5hbWUiXQotCi0gICAgICAgICAgICAgICAgcGFyYW1fdHlw
ZV9iaW5kaW5nID0gR2VuZXJhdG9yLnJlc29sdmVfdHlwZV9hbmRfZ2VuZXJhdGVfYWRfaG9jKGpz
b25fcGFyYW1ldGVyLCBldmVudF9uYW1lLCBkb21haW5fbmFtZSwgYWRfaG9jX3R5cGVfd3JpdGVy
LCAiIikKLQotICAgICAgICAgICAgICAgIHJhd190eXBlID0gcGFyYW1fdHlwZV9iaW5kaW5nLnJl
ZHVjZV90b19yYXdfdHlwZSgpCi0gICAgICAgICAgICAgICAgcmF3X3R5cGVfYmluZGluZyA9IFJh
d1R5cGVCaW5kaW5nKHJhd190eXBlKQotCi0gICAgICAgICAgICAgICAgb3B0aW9uYWwgPSBib29s
KGpzb25fcGFyYW1ldGVyLmdldCgib3B0aW9uYWwiKSkKLQotICAgICAgICAgICAgICAgIHNldHRl
cl90eXBlID0gcmF3X3R5cGUuZ2V0X3NldHRlcl9uYW1lKCkKLQotICAgICAgICAgICAgICAgIHR5
cGVfbW9kZWwgPSBwYXJhbV90eXBlX2JpbmRpbmcuZ2V0X3R5cGVfbW9kZWwoKQotICAgICAgICAg
ICAgICAgIHJhd190eXBlX21vZGVsID0gcmF3X3R5cGVfYmluZGluZy5nZXRfdHlwZV9tb2RlbCgp
Ci0gICAgICAgICAgICAgICAgaWYgb3B0aW9uYWw6Ci0gICAgICAgICAgICAgICAgICAgIHR5cGVf
bW9kZWwgPSB0eXBlX21vZGVsLmdldF9vcHRpb25hbCgpCi0gICAgICAgICAgICAgICAgICAgIHJh
d190eXBlX21vZGVsID0gcmF3X3R5cGVfbW9kZWwuZ2V0X29wdGlvbmFsKCkKLQotICAgICAgICAg
ICAgICAgIGFubm90YXRlZF90eXBlID0gdHlwZV9tb2RlbC5nZXRfaW5wdXRfcGFyYW1fdHlwZV90
ZXh0KCkKLSAgICAgICAgICAgICAgICBtb2RlX3R5cGVfYmluZGluZyA9IHBhcmFtX3R5cGVfYmlu
ZGluZwotCi0gICAgICAgICAgICAgICAgZGVjbF9wYXJhbWV0ZXJfbGlzdC5hcHBlbmQoIiVzICVz
IiAlIChhbm5vdGF0ZWRfdHlwZSwgcGFyYW1ldGVyX25hbWUpKQotCi0gICAgICAgICAgICAgICAg
c2V0dGVyX2FyZ3VtZW50ID0gcmF3X3R5cGVfbW9kZWwuZ2V0X2V2ZW50X3NldHRlcl9leHByZXNz
aW9uX3BhdHRlcm4oKSAlIHBhcmFtZXRlcl9uYW1lCi0gICAgICAgICAgICAgICAgaWYgbW9kZV90
eXBlX2JpbmRpbmcuZ2V0X3NldHRlcl92YWx1ZV9leHByZXNzaW9uX3BhdHRlcm4oKToKLSAgICAg
ICAgICAgICAgICAgICAgc2V0dGVyX2FyZ3VtZW50ID0gbW9kZV90eXBlX2JpbmRpbmcuZ2V0X3Nl
dHRlcl92YWx1ZV9leHByZXNzaW9uX3BhdHRlcm4oKSAlIChJTlNQRUNUT1JfVFlQRVNfR0VORVJB
VE9SX0NPTkZJR19NQVBbb3V0cHV0X3R5cGVdWyJwcmVmaXgiXSwgc2V0dGVyX2FyZ3VtZW50KQot
Ci0gICAgICAgICAgICAgICAgc2V0dGVyX2NvZGUgPSAiICAgICVzLT5zZXQlcyhBU0NJSUxpdGVy
YWwoXCIlc1wiKSwgJXMpO1xuIiAlIChtZXRob2Rfc3RydWN0X3RlbXBsYXRlLmNvbnRhaW5lcl9u
YW1lLCBzZXR0ZXJfdHlwZSwgcGFyYW1ldGVyX25hbWUsIHNldHRlcl9hcmd1bWVudCkKLSAgICAg
ICAgICAgICAgICBpZiBvcHRpb25hbDoKLSAgICAgICAgICAgICAgICAgICAgc2V0dGVyX2NvZGUg
PSAoIiAgICBpZiAoJXMpXG4gICAgIiAlIHBhcmFtZXRlcl9uYW1lKSArIHNldHRlcl9jb2RlCi0g
ICAgICAgICAgICAgICAgbWV0aG9kX2xpbmVfbGlzdC5hcHBlbmQoc2V0dGVyX2NvZGUpCi0KLSAg
ICAgICAgICAgIG1ldGhvZF9zdHJ1Y3RfdGVtcGxhdGUuYXBwZW5kX2VwaWxvZyhtZXRob2RfbGlu
ZV9saXN0KQotCi0gICAgICAgIGdlbmVyYXRvcl9tZXRob2RfbGlzdC5hcHBlbmQobWV0aG9kX3Rl
bXBsYXRlLnN1YnN0aXR1dGUoTm9uZSwKLSAgICAgICAgICAgIGRvbWFpbk5hbWU9ZG9tYWluX25h
bWUsCi0gICAgICAgICAgICBwYXJhbWV0ZXJzPSIsICIuam9pbihkZWNsX3BhcmFtZXRlcl9saXN0
KSwKLSAgICAgICAgICAgIGNvZGU9IiIuam9pbihtZXRob2RfbGluZV9saXN0KSwgKip0ZW1wbGF0
ZV9wYXJhbXMpKQotCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiByZXNvbHZlX3R5cGVfYW5k
X2dlbmVyYXRlX2FkX2hvYyhqc29uX3BhcmFtLCBtZXRob2RfbmFtZSwgZG9tYWluX25hbWUsIGFk
X2hvY190eXBlX3dyaXRlciwgY29udGFpbmVyX3JlbGF0aXZlX25hbWVfcHJlZml4X3BhcmFtKToK
LSAgICAgICAgcGFyYW1fbmFtZSA9IGpzb25fcGFyYW1bIm5hbWUiXQotICAgICAgICBhZF9ob2Nf
dHlwZV9saXN0ID0gW10KLQotICAgICAgICBjbGFzcyBBZEhvY1R5cGVDb250ZXh0OgotICAgICAg
ICAgICAgY29udGFpbmVyX2Z1bGxfbmFtZV9wcmVmaXggPSAiPG5vdCB5ZXQgZGVmaW5lZD4iCi0g
ICAgICAgICAgICBjb250YWluZXJfcmVsYXRpdmVfbmFtZV9wcmVmaXggPSBjb250YWluZXJfcmVs
YXRpdmVfbmFtZV9wcmVmaXhfcGFyYW0KLQotICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAg
ICAgICAgICAgZGVmIGdldF90eXBlX25hbWVfZml4KCk6Ci0gICAgICAgICAgICAgICAgY2xhc3Mg
TmFtZUZpeDoKLSAgICAgICAgICAgICAgICAgICAgY2xhc3NfbmFtZSA9IENhcGl0YWxpemVyLmxv
d2VyX2NhbWVsX2Nhc2VfdG9fdXBwZXIocGFyYW1fbmFtZSkKLQotICAgICAgICAgICAgICAgICAg
ICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgIGRlZiBvdXRwdXRfY29tbWVudCh3
cml0ZXIpOgotICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIi8vIE5hbWVk
IGFmdGVyIHBhcmFtZXRlciAnJXMnIHdoaWxlIGdlbmVyYXRpbmcgY29tbWFuZC9ldmVudCAlcy5c
biIgJSAocGFyYW1fbmFtZSwgbWV0aG9kX25hbWUpKQotCi0gICAgICAgICAgICAgICAgcmV0dXJu
IE5hbWVGaXgKLQotICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgZGVmIGFk
ZF90eXBlKGJpbmRpbmcpOgotICAgICAgICAgICAgICAgIGFkX2hvY190eXBlX2xpc3QuYXBwZW5k
KGJpbmRpbmcpCi0KLSAgICAgICAgdHlwZV9iaW5kaW5nID0gcmVzb2x2ZV9wYXJhbV90eXBlKGpz
b25fcGFyYW0sIGRvbWFpbl9uYW1lLCBBZEhvY1R5cGVDb250ZXh0KQotCi0gICAgICAgIGNsYXNz
IEludGVyZmFjZUZvcndhcmRMaXN0ZW5lcjoKLSAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAg
ICAgICAgICAgIGRlZiBhZGRfdHlwZV9kYXRhKHR5cGVfZGF0YSk6Ci0gICAgICAgICAgICAgICAg
cGFzcwotCi0gICAgICAgIGNsYXNzIEludGVyZmFjZVJlc29sdmVDb250ZXh0OgotICAgICAgICAg
ICAgZm9yd2FyZF9saXN0ZW5lciA9IEludGVyZmFjZUZvcndhcmRMaXN0ZW5lcgotCi0gICAgICAg
IGZvciB0eXBlIGluIGFkX2hvY190eXBlX2xpc3Q6Ci0gICAgICAgICAgICB0eXBlLnJlc29sdmVf
aW5uZXIoSW50ZXJmYWNlUmVzb2x2ZUNvbnRleHQpCi0KLSAgICAgICAgY2xhc3MgSW50ZXJmYWNl
R2VuZXJhdGVDb250ZXh0OgotICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlciA9ICJub3Qgc3Vw
cG9ydGVkIGluIEludGVyZmFjZUdlbmVyYXRlQ29udGV4dCIKLSAgICAgICAgICAgIGNwcF93cml0
ZXIgPSB2YWxpZGF0b3Jfd3JpdGVyCi0KLSAgICAgICAgZm9yIHR5cGUgaW4gYWRfaG9jX3R5cGVf
bGlzdDoKLSAgICAgICAgICAgIGdlbmVyYXRvciA9IHR5cGUuZ2V0X2NvZGVfZ2VuZXJhdG9yKCkK
LSAgICAgICAgICAgIGlmIGdlbmVyYXRvcjoKLSAgICAgICAgICAgICAgICBnZW5lcmF0b3IuZ2Vu
ZXJhdGVfdHlwZV9idWlsZGVyKGFkX2hvY190eXBlX3dyaXRlciwgSW50ZXJmYWNlR2VuZXJhdGVD
b250ZXh0KQotCi0gICAgICAgIHJldHVybiB0eXBlX2JpbmRpbmcKLQotICAgIEBzdGF0aWNtZXRo
b2QKLSAgICBkZWYgcHJvY2Vzc190eXBlcyh0eXBlX21hcCk6Ci0gICAgICAgIG91dHB1dCA9IEdl
bmVyYXRvci50eXBlX2J1aWxkZXJfZnJhZ21lbnRzCi0KLSAgICAgICAgY2xhc3MgR2VuZXJhdGVD
b250ZXh0OgotICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlciA9IFdyaXRlcihHZW5lcmF0b3Iu
dmFsaWRhdG9yX2ltcGxfbGlzdCwgIiIpCi0gICAgICAgICAgICBjcHBfd3JpdGVyID0gV3JpdGVy
KEdlbmVyYXRvci50eXBlX2J1aWxkZXJfaW1wbF9saXN0LCAiIikKLQotICAgICAgICBkZWYgZ2Vu
ZXJhdGVfYWxsX2RvbWFpbnNfY29kZShvdXQsIHR5cGVfZGF0YV9jYWxsYmFjayk6Ci0gICAgICAg
ICAgICB3cml0ZXIgPSBXcml0ZXIob3V0LCAiIikKLSAgICAgICAgICAgIGZvciBkb21haW5fZGF0
YSBpbiB0eXBlX21hcC5kb21haW5zX3RvX2dlbmVyYXRlKCk6Ci0gICAgICAgICAgICAgICAgZG9t
YWluX2ZpeGVzID0gRG9tYWluTmFtZUZpeGVzLmdldF9maXhlZF9kYXRhKGRvbWFpbl9kYXRhLm5h
bWUoKSkKLSAgICAgICAgICAgICAgICBkb21haW5fZ3VhcmQgPSBkb21haW5fZml4ZXMuZ2V0X2d1
YXJkKCkKLQotICAgICAgICAgICAgICAgIG5hbWVzcGFjZV9kZWNsYXJlZCA9IFtdCi0KLSAgICAg
ICAgICAgICAgICBkZWYgbmFtZXNwYWNlX2xhenlfZ2VuZXJhdG9yKCk6Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIG5vdCBuYW1lc3BhY2VfZGVjbGFyZWQ6Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBpZiBkb21haW5fZ3VhcmQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9tYWluX2d1
YXJkLmdlbmVyYXRlX29wZW4ob3V0KQotICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5l
d2xpbmUoIm5hbWVzcGFjZSAiKQotICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVu
ZChkb21haW5fZGF0YS5uYW1lKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuYXBw
ZW5kKCIge1xuIikKLSAgICAgICAgICAgICAgICAgICAgICAgICMgV2hhdCBpcyBhIGJldHRlciB3
YXkgdG8gY2hhbmdlIHZhbHVlIGZyb20gb3V0ZXIgc2NvcGU/Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBuYW1lc3BhY2VfZGVjbGFyZWQuYXBwZW5kKFRydWUpCi0gICAgICAgICAgICAgICAgICAg
IHJldHVybiB3cml0ZXIKLQotICAgICAgICAgICAgICAgIGZvciB0eXBlX2RhdGEgaW4gZG9tYWlu
X2RhdGEudHlwZXMoKToKLSAgICAgICAgICAgICAgICAgICAgdHlwZV9kYXRhX2NhbGxiYWNrKHR5
cGVfZGF0YSwgbmFtZXNwYWNlX2xhenlfZ2VuZXJhdG9yKQotCi0gICAgICAgICAgICAgICAgaWYg
bmFtZXNwYWNlX2RlY2xhcmVkOgotICAgICAgICAgICAgICAgICAgICB3cml0ZXIuYXBwZW5kKCJ9
IC8vICIpCi0gICAgICAgICAgICAgICAgICAgIHdyaXRlci5hcHBlbmQoZG9tYWluX2RhdGEubmFt
ZSgpKQotICAgICAgICAgICAgICAgICAgICB3cml0ZXIuYXBwZW5kKCJcblxuIikKLQotICAgICAg
ICAgICAgICAgICAgICBpZiBkb21haW5fZ3VhcmQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBk
b21haW5fZ3VhcmQuZ2VuZXJhdGVfY2xvc2Uob3V0KQotCi0gICAgICAgIGRlZiBjcmVhdGVfdHlw
ZV9idWlsZGVyX2NhbGxlcihnZW5lcmF0ZV9wYXNzX2lkKToKLSAgICAgICAgICAgIGRlZiBjYWxs
X3R5cGVfYnVpbGRlcih0eXBlX2RhdGEsIHdyaXRlcl9nZXR0ZXIpOgotICAgICAgICAgICAgICAg
IGNvZGVfZ2VuZXJhdG9yID0gdHlwZV9kYXRhLmdldF9iaW5kaW5nKCkuZ2V0X2NvZGVfZ2VuZXJh
dG9yKCkKLSAgICAgICAgICAgICAgICBpZiBjb2RlX2dlbmVyYXRvciBhbmQgZ2VuZXJhdGVfcGFz
c19pZCA9PSBjb2RlX2dlbmVyYXRvci5nZXRfZ2VuZXJhdGVfcGFzc19pZCgpOgotICAgICAgICAg
ICAgICAgICAgICB3cml0ZXIgPSB3cml0ZXJfZ2V0dGVyKCkKLQotICAgICAgICAgICAgICAgICAg
ICBjb2RlX2dlbmVyYXRvci5nZW5lcmF0ZV90eXBlX2J1aWxkZXIod3JpdGVyLCBHZW5lcmF0ZUNv
bnRleHQpCi0gICAgICAgICAgICByZXR1cm4gY2FsbF90eXBlX2J1aWxkZXIKLQotICAgICAgICBn
ZW5lcmF0ZV9hbGxfZG9tYWluc19jb2RlKG91dHB1dCwgY3JlYXRlX3R5cGVfYnVpbGRlcl9jYWxs
ZXIoVHlwZUJ1aWxkZXJQYXNzLk1BSU4pKQotCi0gICAgICAgIEdlbmVyYXRvci50eXBlX2J1aWxk
ZXJfZm9yd2FyZHMuYXBwZW5kKCIvLyBGb3J3YXJkIGRlY2xhcmF0aW9ucy5cbiIpCi0KLSAgICAg
ICAgZGVmIGdlbmVyYXRlX2ZvcndhcmRfY2FsbGJhY2sodHlwZV9kYXRhLCB3cml0ZXJfZ2V0dGVy
KToKLSAgICAgICAgICAgIGlmIHR5cGVfZGF0YSBpbiBnbG9iYWxfZm9yd2FyZF9saXN0ZW5lci50
eXBlX2RhdGFfc2V0OgotICAgICAgICAgICAgICAgIGJpbmRpbmcgPSB0eXBlX2RhdGEuZ2V0X2Jp
bmRpbmcoKQotICAgICAgICAgICAgICAgIGJpbmRpbmcuZ2V0X2NvZGVfZ2VuZXJhdG9yKCkuZ2Vu
ZXJhdGVfZm9yd2FyZF9kZWNsYXJhdGlvbih3cml0ZXJfZ2V0dGVyKCkpCi0gICAgICAgIGdlbmVy
YXRlX2FsbF9kb21haW5zX2NvZGUoR2VuZXJhdG9yLnR5cGVfYnVpbGRlcl9mb3J3YXJkcywgZ2Vu
ZXJhdGVfZm9yd2FyZF9jYWxsYmFjaykKLQotICAgICAgICBHZW5lcmF0b3IudHlwZV9idWlsZGVy
X2ZvcndhcmRzLmFwcGVuZCgiLy8gRW5kIG9mIGZvcndhcmQgZGVjbGFyYXRpb25zLlxuXG4iKQot
Ci0gICAgICAgIEdlbmVyYXRvci50eXBlX2J1aWxkZXJfZm9yd2FyZHMuYXBwZW5kKCIvLyBUeXBl
ZGVmcy5cbiIpCi0KLSAgICAgICAgZ2VuZXJhdGVfYWxsX2RvbWFpbnNfY29kZShHZW5lcmF0b3Iu
dHlwZV9idWlsZGVyX2ZvcndhcmRzLCBjcmVhdGVfdHlwZV9idWlsZGVyX2NhbGxlcihUeXBlQnVp
bGRlclBhc3MuVFlQRURFRikpCi0KLSAgICAgICAgR2VuZXJhdG9yLnR5cGVfYnVpbGRlcl9mb3J3
YXJkcy5hcHBlbmQoIi8vIEVuZCBvZiB0eXBlZGVmcy5cblxuIikKLQotCi1kZWYgZmxhdHRlbl9s
aXN0KGlucHV0KToKLSAgICByZXMgPSBbXQotCi0gICAgZGVmIGZpbGxfcmVjdXJzaXZlKGwpOgot
ICAgICAgICBmb3IgaXRlbSBpbiBsOgotICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShpdGVtLCBs
aXN0KToKLSAgICAgICAgICAgICAgICBmaWxsX3JlY3Vyc2l2ZShpdGVtKQotICAgICAgICAgICAg
ZWxzZToKLSAgICAgICAgICAgICAgICByZXMuYXBwZW5kKGl0ZW0pCi0gICAgZmlsbF9yZWN1cnNp
dmUoaW5wdXQpCi0gICAgcmV0dXJuIHJlcwotCi0KLSMgQSB3cml0ZXIgdGhhdCBvbmx5IHVwZGF0
ZXMgZmlsZSBpZiBpdCBhY3R1YWxseSBjaGFuZ2VkIHRvIGJldHRlciBzdXBwb3J0IGluY3JlbWVu
dGFsIGJ1aWxkLgotY2xhc3MgU21hcnRPdXRwdXQ6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGZp
bGVfbmFtZSk6Ci0gICAgICAgIHNlbGYuZmlsZV9uYW1lXyA9IGZpbGVfbmFtZQotICAgICAgICBz
ZWxmLm91dHB1dF8gPSAiIgotCi0gICAgZGVmIHdyaXRlKHNlbGYsIHRleHQpOgotICAgICAgICBz
ZWxmLm91dHB1dF8gKz0gdGV4dAotCi0gICAgZGVmIGNsb3NlKHNlbGYpOgotICAgICAgICB0ZXh0
X2NoYW5nZWQgPSBUcnVlCi0gICAgICAgIHNlbGYub3V0cHV0XyA9IHNlbGYub3V0cHV0Xy5yc3Ry
aXAoKSArICJcbiIKLQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICByZWFkX2ZpbGUgPSBvcGVu
KHNlbGYuZmlsZV9uYW1lXywgInIiKQotICAgICAgICAgICAgb2xkX3RleHQgPSByZWFkX2ZpbGUu
cmVhZCgpCi0gICAgICAgICAgICByZWFkX2ZpbGUuY2xvc2UoKQotICAgICAgICAgICAgdGV4dF9j
aGFuZ2VkID0gb2xkX3RleHQgIT0gc2VsZi5vdXRwdXRfCi0gICAgICAgIGV4Y2VwdDoKLSAgICAg
ICAgICAgICMgSWdub3JlLCBqdXN0IG92ZXJ3cml0ZSBieSBkZWZhdWx0Ci0gICAgICAgICAgICBw
YXNzCi0KLSAgICAgICAgaWYgdGV4dF9jaGFuZ2VkIG9yIHdyaXRlX2Fsd2F5czoKLSAgICAgICAg
ICAgIG91dF9maWxlID0gb3BlbihzZWxmLmZpbGVfbmFtZV8sICJ3IikKLSAgICAgICAgICAgIG91
dF9maWxlLndyaXRlKHNlbGYub3V0cHV0XykKLSAgICAgICAgICAgIG91dF9maWxlLmNsb3NlKCkK
LQotCi1HZW5lcmF0b3IuZ28oKQotCi1vdXRwdXRfZmlsZV9uYW1lX3ByZWZpeCA9IElOU1BFQ1RP
Ul9UWVBFU19HRU5FUkFUT1JfQ09ORklHX01BUFtvdXRwdXRfdHlwZV1bInByZWZpeCJdCi0KLWJh
Y2tlbmRfaF9maWxlID0gU21hcnRPdXRwdXQob3V0cHV0X2hlYWRlcl9kaXJuYW1lICsgKCIvSW5z
cGVjdG9yJXNCYWNrZW5kRGlzcGF0Y2hlcnMuaCIgJSBvdXRwdXRfZmlsZV9uYW1lX3ByZWZpeCkp
Ci1iYWNrZW5kX2NwcF9maWxlID0gU21hcnRPdXRwdXQob3V0cHV0X2NwcF9kaXJuYW1lICsgKCIv
SW5zcGVjdG9yJXNCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwIiAlIG91dHB1dF9maWxlX25hbWVfcHJl
Zml4KSkKLQotZnJvbnRlbmRfaF9maWxlID0gU21hcnRPdXRwdXQob3V0cHV0X2hlYWRlcl9kaXJu
YW1lICsgKCIvSW5zcGVjdG9yJXNGcm9udGVuZERpc3BhdGNoZXJzLmgiICUgb3V0cHV0X2ZpbGVf
bmFtZV9wcmVmaXgpKQotZnJvbnRlbmRfY3BwX2ZpbGUgPSBTbWFydE91dHB1dChvdXRwdXRfY3Bw
X2Rpcm5hbWUgKyAoIi9JbnNwZWN0b3Ilc0Zyb250ZW5kRGlzcGF0Y2hlcnMuY3BwIiAlIG91dHB1
dF9maWxlX25hbWVfcHJlZml4KSkKLQotdHlwZWJ1aWxkZXJfaF9maWxlID0gU21hcnRPdXRwdXQo
b3V0cHV0X2hlYWRlcl9kaXJuYW1lICsgKCIvSW5zcGVjdG9yJXNUeXBlQnVpbGRlcnMuaCIgJSBv
dXRwdXRfZmlsZV9uYW1lX3ByZWZpeCkpCi10eXBlYnVpbGRlcl9jcHBfZmlsZSA9IFNtYXJ0T3V0
cHV0KG91dHB1dF9jcHBfZGlybmFtZSArICgiL0luc3BlY3RvciVzVHlwZUJ1aWxkZXJzLmNwcCIg
JSBvdXRwdXRfZmlsZV9uYW1lX3ByZWZpeCkpCi0KLWJhY2tlbmRfanNfZmlsZSA9IFNtYXJ0T3V0
cHV0KG91dHB1dF9qc19kaXJuYW1lICsgKCIvSW5zcGVjdG9yJXNCYWNrZW5kQ29tbWFuZHMuanMi
ICUgb3V0cHV0X2ZpbGVfbmFtZV9wcmVmaXgpKQotCi0KLWJhY2tlbmRfaF9maWxlLndyaXRlKFRl
bXBsYXRlcy5iYWNrZW5kX2guc3Vic3RpdHV0ZShOb25lLAotICAgIG91dHB1dEZpbGVOYW1lUHJl
Zml4PW91dHB1dF9maWxlX25hbWVfcHJlZml4LAotICAgIGhhbmRsZXJJbnRlcmZhY2VzPSIiLmpv
aW4oZmxhdHRlbl9saXN0KEdlbmVyYXRvci5iYWNrZW5kX2hhbmRsZXJfaW50ZXJmYWNlX2xpc3Qp
KSwKLSAgICBkaXNwYXRjaGVySW50ZXJmYWNlcz0iIi5qb2luKGZsYXR0ZW5fbGlzdChHZW5lcmF0
b3IuYmFja2VuZF9kaXNwYXRjaGVyX2ludGVyZmFjZV9saXN0KSkpKQotCi1iYWNrZW5kX2NwcF9m
aWxlLndyaXRlKFRlbXBsYXRlcy5iYWNrZW5kX2NwcC5zdWJzdGl0dXRlKE5vbmUsCi0gICAgb3V0
cHV0RmlsZU5hbWVQcmVmaXg9b3V0cHV0X2ZpbGVfbmFtZV9wcmVmaXgsCi0gICAgaGFuZGxlcklt
cGxlbWVudGF0aW9ucz0iIi5qb2luKGZsYXR0ZW5fbGlzdChHZW5lcmF0b3IuYmFja2VuZF9oYW5k
bGVyX2ltcGxlbWVudGF0aW9uX2xpc3QpKSwKLSAgICBtZXRob2RzPSJcbiIuam9pbihHZW5lcmF0
b3IuYmFja2VuZF9tZXRob2RfaW1wbGVtZW50YXRpb25fbGlzdCkpKQotCi1mcm9udGVuZF9oX2Zp
bGUud3JpdGUoVGVtcGxhdGVzLmZyb250ZW5kX2guc3Vic3RpdHV0ZShOb25lLAotICAgIG91dHB1
dEZpbGVOYW1lUHJlZml4PW91dHB1dF9maWxlX25hbWVfcHJlZml4LAotICAgIGRvbWFpbkNsYXNz
TGlzdD0iIi5qb2luKEdlbmVyYXRvci5mcm9udGVuZF9kb21haW5fY2xhc3NfbGluZXMpKSkKLQot
ZnJvbnRlbmRfY3BwX2ZpbGUud3JpdGUoVGVtcGxhdGVzLmZyb250ZW5kX2NwcC5zdWJzdGl0dXRl
KE5vbmUsCi0gICAgb3V0cHV0RmlsZU5hbWVQcmVmaXg9b3V0cHV0X2ZpbGVfbmFtZV9wcmVmaXgs
Ci0gICAgbWV0aG9kcz0iXG4iLmpvaW4oR2VuZXJhdG9yLmZyb250ZW5kX21ldGhvZF9saXN0KSkp
Ci0KLXR5cGVidWlsZGVyX2hfZmlsZS53cml0ZShUZW1wbGF0ZXMudHlwZWJ1aWxkZXJfaC5zdWJz
dGl0dXRlKE5vbmUsCi0gICAgb3V0cHV0RmlsZU5hbWVQcmVmaXg9b3V0cHV0X2ZpbGVfbmFtZV9w
cmVmaXgsCi0gICAgdHlwZUJ1aWxkZXJEZXBlbmRlbmNpZXM9SU5TUEVDVE9SX1RZUEVTX0dFTkVS
QVRPUl9DT05GSUdfTUFQW291dHB1dF90eXBlXVsidHlwZWJ1aWxkZXJfZGVwZW5kZW5jeSJdLAot
ICAgIGV4cG9ydE1hY3JvPUlOU1BFQ1RPUl9UWVBFU19HRU5FUkFUT1JfQ09ORklHX01BUFtvdXRw
dXRfdHlwZV1bImV4cG9ydF9tYWNybyJdLAotICAgIHR5cGVCdWlsZGVycz0iIi5qb2luKGZsYXR0
ZW5fbGlzdChHZW5lcmF0b3IudHlwZV9idWlsZGVyX2ZyYWdtZW50cykpLAotICAgIGZvcndhcmRz
PSIiLmpvaW4oR2VuZXJhdG9yLnR5cGVfYnVpbGRlcl9mb3J3YXJkcyksCi0gICAgdmFsaWRhdG9y
SWZkZWZOYW1lPVZBTElEQVRPUl9JRkRFRl9OQU1FKSkKLQotdHlwZWJ1aWxkZXJfY3BwX2ZpbGUu
d3JpdGUoVGVtcGxhdGVzLnR5cGVidWlsZGVyX2NwcC5zdWJzdGl0dXRlKE5vbmUsCi0gICAgb3V0
cHV0RmlsZU5hbWVQcmVmaXg9b3V0cHV0X2ZpbGVfbmFtZV9wcmVmaXgsCi0gICAgZW51bUNvbnN0
YW50VmFsdWVzPUVudW1Db25zdGFudHMuZ2V0X2VudW1fY29uc3RhbnRfY29kZSgpLAotICAgIGlt
cGxDb2RlPSIiLmpvaW4oZmxhdHRlbl9saXN0KEdlbmVyYXRvci50eXBlX2J1aWxkZXJfaW1wbF9s
aXN0KSksCi0gICAgdmFsaWRhdG9yQ29kZT0iIi5qb2luKGZsYXR0ZW5fbGlzdChHZW5lcmF0b3Iu
dmFsaWRhdG9yX2ltcGxfbGlzdCkpLAotICAgIHZhbGlkYXRvcklmZGVmTmFtZT1WQUxJREFUT1Jf
SUZERUZfTkFNRSkpCi0KLWJhY2tlbmRfanNfZmlsZS53cml0ZShUZW1wbGF0ZXMuYmFja2VuZF9q
cy5zdWJzdGl0dXRlKE5vbmUsCi0gICAgZG9tYWluSW5pdGlhbGl6ZXJzPSIiLmpvaW4oR2VuZXJh
dG9yLmJhY2tlbmRfanNfZG9tYWluX2luaXRpYWxpemVyX2xpc3QpKSkKLQotYmFja2VuZF9oX2Zp
bGUuY2xvc2UoKQotYmFja2VuZF9jcHBfZmlsZS5jbG9zZSgpCi0KLWZyb250ZW5kX2hfZmlsZS5j
bG9zZSgpCi1mcm9udGVuZF9jcHBfZmlsZS5jbG9zZSgpCi0KLXR5cGVidWlsZGVyX2hfZmlsZS5j
bG9zZSgpCi10eXBlYnVpbGRlcl9jcHBfZmlsZS5jbG9zZSgpCi0KLWJhY2tlbmRfanNfZmlsZS5j
bG9zZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvY29kZWdlbi9fX2luaXRfXy5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9jb2RlZ2VuL19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBiNzYxMThjZTVlZTI5Zjg0
Y2Q1NTBlOTg0MjE4MGE0ZWIzNDk3M2EKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9fX2luaXRfXy5weQpAQCAtMCwwICsx
LDEyIEBACisjIFJlcXVpcmVkIGZvciBQeXRob24gdG8gc2VhcmNoIHRoaXMgZGlyZWN0b3J5IGZv
ciBtb2R1bGUgZmlsZXMKKworZnJvbSBtb2RlbHMgaW1wb3J0ICoKK2Zyb20gZ2VuZXJhdG9yIGlt
cG9ydCAqCisKK2Zyb20gZ2VuZXJhdGVfYmFja2VuZF9jb21tYW5kcyBpbXBvcnQgKgorZnJvbSBn
ZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyIGltcG9ydCAqCitmcm9tIGdlbmVyYXRl
X2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbiBpbXBvcnQgKgorZnJvbSBnZW5lcmF0
ZV9mcm9udGVuZF9kaXNwYXRjaGVyX2hlYWRlciBpbXBvcnQgKgorZnJvbSBnZW5lcmF0ZV9mcm9u
dGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uIGltcG9ydCAqCitmcm9tIGdlbmVyYXRlX3R5
cGVfYnVpbGRlcl9oZWFkZXIgaW1wb3J0ICoKK2Zyb20gZ2VuZXJhdGVfdHlwZV9idWlsZGVyX2lt
cGxlbWVudGF0aW9uIGltcG9ydCAqCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9iYWNrZW5kX2NvbW1hbmRzLnB5IGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVf
YmFja2VuZF9jb21tYW5kcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43ZDJkNTcxNWY3NWU3MWNkMmNhNWQwNmIy
MmVhNGM0YTMzNGFiNDY0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfYmFja2VuZF9jb21tYW5kcy5weQpA
QCAtMCwwICsxLDEzMyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIENvcHlyaWdodCAoYykg
MjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoYykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
IyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisjIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyMg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisKK2ltcG9ydCBsb2dnaW5nCitpbXBv
cnQgb3MucGF0aAoraW1wb3J0IHN0cmluZworCitmcm9tIGdlbmVyYXRvciBpbXBvcnQgR2VuZXJh
dG9yLCB1Y2ZpcnN0Citmcm9tIHN0cmluZyBpbXBvcnQgVGVtcGxhdGUKK2Zyb20gZ2VuZXJhdG9y
X3RlbXBsYXRlcyBpbXBvcnQgR2VuZXJhdG9yVGVtcGxhdGVzIGFzIFRlbXBsYXRlcworZnJvbSBt
b2RlbHMgaW1wb3J0IEVudW1UeXBlCisKKyMgVXNlIGEgZ2xvYmFsIGxvZ2dlciwgd2hpY2ggbm9y
bWFsbHkgb25seSBsb2dzIGVycm9ycy4KKyMgSXQgY2FuIGJlIGNvbmZpZ3VyZWQgdG8gbG9nIGRl
YnVnIG1lc3NhZ2VzIGZyb20gdGhlIENMSS4KK2xvZ2dpbmcuYmFzaWNDb25maWcoZm9ybWF0PScl
KGxldmVsbmFtZSlzOiAlKG1lc3NhZ2UpcycsIGxldmVsPWxvZ2dpbmcuRVJST1IpCitsb2cgPSBs
b2dnaW5nLmdldExvZ2dlcignZ2xvYmFsJykKKworCitjbGFzcyBCYWNrZW5kQ29tbWFuZHNHZW5l
cmF0b3IoR2VuZXJhdG9yKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbW9kZWwsIGlucHV0X2Zp
bGVwYXRoKToKKyAgICAgICAgc2VsZi5fbW9kZWwgPSBtb2RlbAorICAgICAgICBzZWxmLl9pbnB1
dF9maWxlcGF0aCA9IGlucHV0X2ZpbGVwYXRoCisKKyAgICBkZWYgbW9kZWwoc2VsZik6CisgICAg
ICAgIHJldHVybiBzZWxmLl9tb2RlbAorCisgICAgZGVmIG91dHB1dF9maWxlbmFtZShzZWxmKToK
KyAgICAgICAgcmV0dXJuICJJbnNwZWN0b3Ilc0JhY2tlbmRDb21tYW5kcy5qcyIgJSBzZWxmLm1v
ZGVsKCkuZnJhbWV3b3JrLnNldHRpbmcoJ3ByZWZpeCcpCisKKyAgICBkZWYgZ2VuZXJhdGVfbGlj
ZW5zZShzZWxmKToKKyAgICAgICAgcmV0dXJuIFRlbXBsYXRlKFRlbXBsYXRlcy5Db3B5cmlnaHRC
bG9jaykuc3Vic3RpdHV0ZShOb25lLCBpbnB1dEZpbGVuYW1lPW9zLnBhdGguYmFzZW5hbWUoc2Vs
Zi5faW5wdXRfZmlsZXBhdGgpKQorCisgICAgZGVmIGdlbmVyYXRlX291dHB1dChzZWxmKToKKyAg
ICAgICAgZG9tYWluc190b19nZW5lcmF0ZSA9IFtdCisgICAgICAgIGZvciBfZG9tYWluIGluIHNl
bGYubW9kZWwoKS5kb21haW5zOgorICAgICAgICAgICAgZW51bV90eXBlcyA9IGZpbHRlcihsYW1i
ZGEgZGVjbGFyYXRpb246IGlzaW5zdGFuY2UoZGVjbGFyYXRpb24udHlwZSwgRW51bVR5cGUpLCBf
ZG9tYWluLnR5cGVfZGVjbGFyYXRpb25zKQorICAgICAgICAgICAgaWYgX2RvbWFpbi5pc19zdXBw
bGVtZW50YWw6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGVsaWYgbGVu
KF9kb21haW4uY29tbWFuZHMpID09IDAgYW5kIGxlbihfZG9tYWluLmV2ZW50cykgPT0gMCBhbmQg
bGVuKGVudW1fdHlwZXMpID09IDA6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAg
ICAgICAgZG9tYWluc190b19nZW5lcmF0ZS5hcHBlbmQoX2RvbWFpbikKKworICAgICAgICBzZWN0
aW9ucyA9IFtdCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLmdlbmVyYXRlX2xpY2Vuc2Uo
KSkKKyAgICAgICAgc2VjdGlvbnMuZXh0ZW5kKFtzZWxmLmdlbmVyYXRlX2RvbWFpbihkb21haW4p
IGZvciBkb21haW4gaW4gZG9tYWluc190b19nZW5lcmF0ZV0pCisgICAgICAgIHJldHVybiAiXG5c
biIuam9pbihzZWN0aW9ucykKKworICAgIGRlZiBnZW5lcmF0ZV9kb21haW4oc2VsZiwgZG9tYWlu
KToKKyAgICAgICAgbGluZXMgPSBbXQorICAgICAgICBhcmdzID0geworICAgICAgICAgICAgJ2Rv
bWFpbic6IGRvbWFpbi5kb21haW5fbmFtZQorICAgICAgICB9CisKKyAgICAgICAgIyBQcmVhbWJs
ZQorICAgICAgICBsaW5lcy5hcHBlbmQoJy8vICUoZG9tYWluKXMuJyAlIGFyZ3MpCisKKyAgICAg
ICAgaGFzX2FzeW5jX2NvbW1hbmRzID0gYW55KG1hcChsYW1iZGEgY29tbWFuZDogY29tbWFuZC5p
c19hc3luYywgZG9tYWluLmNvbW1hbmRzKSkKKyAgICAgICAgaWYgbGVuKGRvbWFpbi5ldmVudHMp
ID4gMCBvciBoYXNfYXN5bmNfY29tbWFuZHM6CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ0lu
c3BlY3RvckJhY2tlbmQucmVnaXN0ZXIlKGRvbWFpbilzRGlzcGF0Y2hlciA9IEluc3BlY3RvckJh
Y2tlbmQucmVnaXN0ZXJEb21haW5EaXNwYXRjaGVyLmJpbmQoSW5zcGVjdG9yQmFja2VuZCwgIiUo
ZG9tYWluKXMiKTsnICUgYXJncykKKworICAgICAgICAjIEVudW0gVHlwZSBEZWNsYXJhdGlvbnMK
KyAgICAgICAgZm9yIF9kZWNsYXJhdGlvbiBpbiBkb21haW4udHlwZV9kZWNsYXJhdGlvbnM6Cisg
ICAgICAgICAgICBpZiBfZGVjbGFyYXRpb24udHlwZS5pc19lbnVtKCk6CisgICAgICAgICAgICAg
ICAgZW51bV9hcmdzID0geworICAgICAgICAgICAgICAgICAgICAnZG9tYWluJzogZG9tYWluLmRv
bWFpbl9uYW1lLAorICAgICAgICAgICAgICAgICAgICAnZW51bU5hbWUnOiBfZGVjbGFyYXRpb24u
dHlwZV9uYW1lLAorICAgICAgICAgICAgICAgICAgICAnZW51bU1hcCc6ICIsICIuam9pbihbJyVz
OiAiJXMiJyAlIChHZW5lcmF0b3Iuc3R5bGl6ZWRfbmFtZV9mb3JfZW51bV92YWx1ZShlbnVtX3Zh
bHVlKSwgZW51bV92YWx1ZSkgZm9yIGVudW1fdmFsdWUgaW4gX2RlY2xhcmF0aW9uLnR5cGUuZW51
bV92YWx1ZXMoKV0pCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGxpbmVzLmFw
cGVuZCgnSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckVudW0oIiUoZG9tYWluKXMuJShlbnVtTmFt
ZSlzIiwgeyUoZW51bU1hcClzfSk7JyAlIGVudW1fYXJncykKKworICAgICAgICAgICAgZGVmIGlz
X2Fub255bW91c19lbnVtX21lbWJlcih0eXBlX21lbWJlcik6CisgICAgICAgICAgICAgICAgcmV0
dXJuIGlzaW5zdGFuY2UodHlwZV9tZW1iZXIudHlwZSwgRW51bVR5cGUpIGFuZCB0eXBlX21lbWJl
ci50eXBlLmlzX2Fub255bW91cworCisgICAgICAgICAgICBmb3IgX21lbWJlciBpbiBmaWx0ZXIo
aXNfYW5vbnltb3VzX2VudW1fbWVtYmVyLCBfZGVjbGFyYXRpb24udHlwZV9tZW1iZXJzKToKKyAg
ICAgICAgICAgICAgICBlbnVtX2FyZ3MgPSB7CisgICAgICAgICAgICAgICAgICAgICdkb21haW4n
OiBkb21haW4uZG9tYWluX25hbWUsCisgICAgICAgICAgICAgICAgICAgICdlbnVtTmFtZSc6ICcl
cyVzJyAlIChfZGVjbGFyYXRpb24udHlwZV9uYW1lLCB1Y2ZpcnN0KF9tZW1iZXIubWVtYmVyX25h
bWUpKSwKKyAgICAgICAgICAgICAgICAgICAgJ2VudW1NYXAnOiAiLCAiLmpvaW4oWyclczogIiVz
IicgJSAoR2VuZXJhdG9yLnN0eWxpemVkX25hbWVfZm9yX2VudW1fdmFsdWUoZW51bV92YWx1ZSks
IGVudW1fdmFsdWUpIGZvciBlbnVtX3ZhbHVlIGluIF9tZW1iZXIudHlwZS5lbnVtX3ZhbHVlcygp
XSkKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCdJbnNw
ZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRW51bSgiJShkb21haW4pcy4lKGVudW1OYW1lKXMiLCB7JShl
bnVtTWFwKXN9KTsnICUgZW51bV9hcmdzKQorCisgICAgICAgICMgRXZlbnRzCisgICAgICAgIGZv
ciBfZXZlbnQgaW4gZG9tYWluLmV2ZW50czoKKyAgICAgICAgICAgIGV2ZW50X2FyZ3MgPSB7Cisg
ICAgICAgICAgICAgICAgJ2RvbWFpbic6IGRvbWFpbi5kb21haW5fbmFtZSwKKyAgICAgICAgICAg
ICAgICAnZXZlbnROYW1lJzogX2V2ZW50LmV2ZW50X25hbWUsCisgICAgICAgICAgICAgICAgJ3Bh
cmFtcyc6ICIsICIuam9pbihbJyIlcyInICUgX3BhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSBmb3Ig
X3BhcmFtZXRlciBpbiBfZXZlbnQuZXZlbnRfcGFyYW1ldGVyc10pCisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFdmVudCgi
JShkb21haW4pcy4lKGV2ZW50TmFtZSlzIiwgWyUocGFyYW1zKXNdKTsnICUgZXZlbnRfYXJncykK
KworICAgICAgICAjIENvbW1hbmRzCisgICAgICAgIGZvciBfY29tbWFuZCBpbiBkb21haW4uY29t
bWFuZHM6CisgICAgICAgICAgICBkZWYgZ2VuZXJhdGVfcGFyYW1ldGVyX29iamVjdChwYXJhbWV0
ZXIpOgorICAgICAgICAgICAgICAgIG9wdGlvbmFsX3N0cmluZyA9ICJ0cnVlIiBpZiBfcGFyYW1l
dGVyLmlzX29wdGlvbmFsIGVsc2UgImZhbHNlIgorICAgICAgICAgICAgICAgIHBhaXJzID0gW10K
KyAgICAgICAgICAgICAgICBwYWlycy5hcHBlbmQoJyJuYW1lIjogIiVzIicgJSBfcGFyYW1ldGVy
LnBhcmFtZXRlcl9uYW1lKQorICAgICAgICAgICAgICAgIHBhaXJzLmFwcGVuZCgnInR5cGUiOiAi
JXMiJyAlIEdlbmVyYXRvci5qc19uYW1lX2Zvcl9wYXJhbWV0ZXJfdHlwZShfcGFyYW1ldGVyLnR5
cGUpKQorICAgICAgICAgICAgICAgIHBhaXJzLmFwcGVuZCgnIm9wdGlvbmFsIjogJXMnICUgb3B0
aW9uYWxfc3RyaW5nKQorICAgICAgICAgICAgICAgIHJldHVybiAieyVzfSIgJSAiLCAiLmpvaW4o
cGFpcnMpCisKKyAgICAgICAgICAgIGNvbW1hbmRfYXJncyA9IHsKKyAgICAgICAgICAgICAgICAn
ZG9tYWluJzogZG9tYWluLmRvbWFpbl9uYW1lLAorICAgICAgICAgICAgICAgICdjb21tYW5kTmFt
ZSc6IF9jb21tYW5kLmNvbW1hbmRfbmFtZSwKKyAgICAgICAgICAgICAgICAnY2FsbFBhcmFtcyc6
ICIsICIuam9pbihbZ2VuZXJhdGVfcGFyYW1ldGVyX29iamVjdChfcGFyYW1ldGVyKSBmb3IgX3Bh
cmFtZXRlciBpbiBfY29tbWFuZC5jYWxsX3BhcmFtZXRlcnNdKSwKKyAgICAgICAgICAgICAgICAn
cmV0dXJuUGFyYW1zJzogIiwgIi5qb2luKFsnIiVzIicgJSBfcGFyYW1ldGVyLnBhcmFtZXRlcl9u
YW1lIGZvciBfcGFyYW1ldGVyIGluIF9jb21tYW5kLnJldHVybl9wYXJhbWV0ZXJzXSksCisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ0luc3BlY3RvckJhY2tlbmQucmVn
aXN0ZXJDb21tYW5kKCIlKGRvbWFpbilzLiUoY29tbWFuZE5hbWUpcyIsIFslKGNhbGxQYXJhbXMp
c10sIFslKHJldHVyblBhcmFtcylzXSk7JyAlIGNvbW1hbmRfYXJncykKKworICAgICAgICByZXR1
cm4gIlxuIi5qb2luKGxpbmVzKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRl
ci5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dl
bmVyYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjBlZmNjNWY5
ODVjNTI3N2Y1MjZkZjZkY2FhNGM1N2M3OWZmOWZjZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2JhY2tl
bmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkKQEAgLTAsMCArMSwxOTAgQEAKKyMhL3Vzci9iaW4vZW52
IHB5dGhvbgorIyBDb3B5cmlnaHQgKGMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorIyBDb3B5cmlnaHQgKGMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6
CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
IyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisjIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KworCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG9zLnBhdGgKK2ltcG9ydCByZQoraW1wb3J0IHN0
cmluZworCitmcm9tIGdlbmVyYXRvciBpbXBvcnQgR2VuZXJhdG9yLCB1Y2ZpcnN0Citmcm9tIG1v
ZGVscyBpbXBvcnQgRW51bVR5cGUKK2Zyb20gc3RyaW5nIGltcG9ydCBUZW1wbGF0ZQorZnJvbSBn
ZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgVGVtcGxhdGVz
CisKKyMgVXNlIGEgZ2xvYmFsIGxvZ2dlciwgd2hpY2ggbm9ybWFsbHkgb25seSBsb2dzIGVycm9y
cy4KKyMgSXQgY2FuIGJlIGNvbmZpZ3VyZWQgdG8gbG9nIGRlYnVnIG1lc3NhZ2VzIGZyb20gdGhl
IENMSS4KK2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQorCisKK2NsYXNzIEJhY2tl
bmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yKEdlbmVyYXRvcik6CisgICAgZGVmIF9faW5pdF9f
KHNlbGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0aCk6CisgICAgICAgIHNlbGYuX21vZGVsID0gbW9k
ZWwKKyAgICAgICAgc2VsZi5faW5wdXRfZmlsZXBhdGggPSBpbnB1dF9maWxlcGF0aAorCisgICAg
ZGVmIG1vZGVsKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fbW9kZWwKKworICAgIGRlZiBv
dXRwdXRfZmlsZW5hbWUoc2VsZik6CisgICAgICAgIHJldHVybiAiSW5zcGVjdG9yJXNCYWNrZW5k
RGlzcGF0Y2hlcnMuaCIgJSBzZWxmLm1vZGVsKCkuZnJhbWV3b3JrLnNldHRpbmcoJ3ByZWZpeCcp
CisKKyAgICBkZWYgZ2VuZXJhdGVfbGljZW5zZShzZWxmKToKKyAgICAgICAgcmV0dXJuIFRlbXBs
YXRlKFRlbXBsYXRlcy5Db3B5cmlnaHRCbG9jaykuc3Vic3RpdHV0ZShOb25lLCBpbnB1dEZpbGVu
YW1lPW9zLnBhdGguYmFzZW5hbWUoc2VsZi5faW5wdXRfZmlsZXBhdGgpKQorCisgICAgZGVmIGdl
bmVyYXRlX291dHB1dChzZWxmKToKKyAgICAgICAgaGVhZGVycyA9IFsKKyAgICAgICAgICAgICci
SW5zcGVjdG9yJXNUeXBlQnVpbGRlcnMuaCInICUgc2VsZi5tb2RlbCgpLmZyYW1ld29yay5zZXR0
aW5nKCdwcmVmaXgnKSwKKyAgICAgICAgICAgICc8aW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyLmg+JywKKyAgICAgICAgICAgICc8d3RmL1Bhc3NSZWZQdHIuaD4nLAorICAgICAg
ICAgICAgJzx3dGYvdGV4dC9XVEZTdHJpbmcuaD4nXQorCisgICAgICAgIHR5cGVkZWZzID0gWygn
U3RyaW5nJywgJ0Vycm9yU3RyaW5nJyldCisKKyAgICAgICAgc2VjdGlvbnMgPSBbXQorICAgICAg
ICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5nZW5lcmF0ZV9saWNlbnNlKCkpCisgICAgICAgIGhlYWRl
cl9hcmdzID0geworICAgICAgICAgICAgJ2hlYWRlckd1YXJkU3RyaW5nJzogcmUuc3ViKCdbLS4v
XScsICdfJywgc2VsZi5vdXRwdXRfZmlsZW5hbWUoKSksCisgICAgICAgICAgICAnaW5jbHVkZXMn
OiAnXG4nLmpvaW4oWycjaW5jbHVkZSAnICsgaGVhZGVyIGZvciBoZWFkZXIgaW4gaGVhZGVyc10p
LAorICAgICAgICAgICAgJ3R5cGVkZWZzJzogJ1xuJy5qb2luKFsndHlwZWRlZiAlcyAlczsnICUg
dHlwZWRlZiBmb3IgdHlwZWRlZiBpbiB0eXBlZGVmc10pLAorICAgICAgICAgICAgJ2lucHV0Rmls
ZW5hbWUnOiBzZWxmLl9pbnB1dF9maWxlcGF0aAorICAgICAgICB9CisKKyAgICAgICAgZG9tYWlu
cyA9IHNlbGYuZG9tYWluc190b19nZW5lcmF0ZSgpCisgICAgICAgIGRvbWFpbnMgPSBmaWx0ZXIo
bGFtYmRhIGRvbWFpbjogbGVuKGRvbWFpbi5jb21tYW5kcykgPiAwLCBkb21haW5zKQorCisgICAg
ICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMuQ3BwSGVhZGVyUHJlbHVkZSku
c3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkKKyAgICAgICAgc2VjdGlvbnMuZXh0ZW5k
KG1hcChzZWxmLl9nZW5lcmF0ZV9oYW5kbGVyX2RlY2xhcmF0aW9uc19mb3JfZG9tYWluLCBkb21h
aW5zKSkKKyAgICAgICAgc2VjdGlvbnMuZXh0ZW5kKG1hcChzZWxmLl9nZW5lcmF0ZV9kaXNwYXRj
aGVyX2RlY2xhcmF0aW9uc19mb3JfZG9tYWluLCBkb21haW5zKSkKKyAgICAgICAgc2VjdGlvbnMu
YXBwZW5kKFRlbXBsYXRlKFRlbXBsYXRlcy5DcHBIZWFkZXJQb3N0bHVkZSkuc3Vic3RpdHV0ZShO
b25lLCAqKmhlYWRlcl9hcmdzKSkKKyAgICAgICAgcmV0dXJuICJcblxuIi5qb2luKHNlY3Rpb25z
KQorCisgICAgIyBQcml2YXRlIG1ldGhvZHMuCisKKyAgICBkZWYgX2dlbmVyYXRlX2hhbmRsZXJf
ZGVjbGFyYXRpb25zX2Zvcl9kb21haW4oc2VsZiwgZG9tYWluKToKKyAgICAgICAgY2xhc3NDb21w
b25lbnRzID0gWydjbGFzcyddCisgICAgICAgIGV4cG9ydE1hY3JvID0gc2VsZi5tb2RlbCgpLmZy
YW1ld29yay5zZXR0aW5nKCdleHBvcnRfbWFjcm8nLCBOb25lKQorICAgICAgICBpZiBleHBvcnRN
YWNybyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGNsYXNzQ29tcG9uZW50cy5hcHBlbmQoZXhw
b3J0TWFjcm8pCisKKyAgICAgICAgdXNlZF9lbnVtX25hbWVzID0gc2V0KCkKKworICAgICAgICBj
b21tYW5kX2RlY2xhcmF0aW9ucyA9IFtdCisgICAgICAgIGZvciBjb21tYW5kIGluIGRvbWFpbi5j
b21tYW5kczoKKyAgICAgICAgICAgIGNvbW1hbmRfZGVjbGFyYXRpb25zLmFwcGVuZChzZWxmLl9n
ZW5lcmF0ZV9oYW5kbGVyX2RlY2xhcmF0aW9uX2Zvcl9jb21tYW5kKGNvbW1hbmQsIHVzZWRfZW51
bV9uYW1lcykpCisKKyAgICAgICAgaGFuZGxlcl9hcmdzID0geworICAgICAgICAgICAgJ2NsYXNz
QW5kRXhwb3J0TWFjcm8nOiAiICIuam9pbihjbGFzc0NvbXBvbmVudHMpLAorICAgICAgICAgICAg
J2RvbWFpbk5hbWUnOiBkb21haW4uZG9tYWluX25hbWUsCisgICAgICAgICAgICAnY29tbWFuZERl
Y2xhcmF0aW9ucyc6ICJcbiIuam9pbihjb21tYW5kX2RlY2xhcmF0aW9ucykKKyAgICAgICAgfQor
CisgICAgICAgIHJldHVybiBHZW5lcmF0b3Iud3JhcF93aXRoX2d1YXJkX2Zvcl9kb21haW4oZG9t
YWluLCBUZW1wbGF0ZShUZW1wbGF0ZXMuQmFja2VuZERpc3BhdGNoZXJIZWFkZXJEb21haW5IYW5k
bGVyRGVjbGFyYXRpb24pLnN1YnN0aXR1dGUoTm9uZSwgKipoYW5kbGVyX2FyZ3MpKQorCisgICAg
ZGVmIF9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9mb3JfcGFyYW1ldGVyKHNlbGYsIHBhcmFtZXRl
ciwgY29tbWFuZCk6CisgICAgICAgIGVudW1fYXJncyA9IHsKKyAgICAgICAgICAgICdwYXJhbWV0
ZXJOYW1lJzogcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lLAorICAgICAgICAgICAgJ2NvbW1hbmRO
YW1lJzogY29tbWFuZC5jb21tYW5kX25hbWUKKyAgICAgICAgfQorCisgICAgICAgIGxpbmVzID0g
W10KKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgLy8gTmFtZWQgYWZ0ZXIgcGFyYW1ldGVyIFwn
JShwYXJhbWV0ZXJOYW1lKXNcJyB3aGlsZSBnZW5lcmF0aW5nIGNvbW1hbmQvZXZlbnQgJShjb21t
YW5kTmFtZSlzLicgJSBlbnVtX2FyZ3MpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGVudW0g
Y2xhc3MgJXMgeycgJSB1Y2ZpcnN0KHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkpCisgICAgICAg
IGZvciBlbnVtX3ZhbHVlIGluIHBhcmFtZXRlci50eXBlLmVudW1fdmFsdWVzKCk6CisgICAgICAg
ICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgJXMgPSAlZCwnICUgKEdlbmVyYXRvci5zdHlsaXpl
ZF9uYW1lX2Zvcl9lbnVtX3ZhbHVlKGVudW1fdmFsdWUpLCBzZWxmLmVuY29kaW5nX2Zvcl9lbnVt
X3ZhbHVlKGVudW1fdmFsdWUpKSkKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgfTsgLy8gZW51
bSBjbGFzcyAlcycgJSB1Y2ZpcnN0KHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkpCisgICAgICAg
IHJldHVybiAnXG4nLmpvaW4obGluZXMpCisKKyAgICBkZWYgX2dlbmVyYXRlX2hhbmRsZXJfZGVj
bGFyYXRpb25fZm9yX2NvbW1hbmQoc2VsZiwgY29tbWFuZCwgdXNlZF9lbnVtX25hbWVzKToKKyAg
ICAgICAgaWYgY29tbWFuZC5pc19hc3luYzoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9nZW5l
cmF0ZV9hc3luY19oYW5kbGVyX2RlY2xhcmF0aW9uX2Zvcl9jb21tYW5kKGNvbW1hbmQpCisKKyAg
ICAgICAgbGluZXMgPSBbXQorICAgICAgICBwYXJhbWV0ZXJzID0gWydFcnJvclN0cmluZyonXQor
ICAgICAgICBmb3IgX3BhcmFtZXRlciBpbiBjb21tYW5kLmNhbGxfcGFyYW1ldGVyczoKKyAgICAg
ICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKCIlcyBpbl8lcyIgJSAoR2VuZXJhdG9yLnR5cGVfc3Ry
aW5nX2Zvcl91bmNoZWNrZWRfZm9ybWFsX2luX3BhcmFtZXRlcihfcGFyYW1ldGVyKSwgX3BhcmFt
ZXRlci5wYXJhbWV0ZXJfbmFtZSkpCisKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoX3BhcmFt
ZXRlci50eXBlLCBFbnVtVHlwZSkgYW5kIF9wYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUgbm90IGlu
IHVzZWRfZW51bV9uYW1lczoKKyAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2Vu
ZXJhdGVfYW5vbnltb3VzX2VudW1fZm9yX3BhcmFtZXRlcihfcGFyYW1ldGVyLCBjb21tYW5kKSkK
KyAgICAgICAgICAgICAgICB1c2VkX2VudW1fbmFtZXMuYWRkKF9wYXJhbWV0ZXIucGFyYW1ldGVy
X25hbWUpCisKKyAgICAgICAgZm9yIF9wYXJhbWV0ZXIgaW4gY29tbWFuZC5yZXR1cm5fcGFyYW1l
dGVyczoKKyAgICAgICAgICAgIHBhcmFtZXRlcl9uYW1lID0gJ291dF8nICsgX3BhcmFtZXRlci5w
YXJhbWV0ZXJfbmFtZQorICAgICAgICAgICAgaWYgX3BhcmFtZXRlci5pc19vcHRpb25hbDoKKyAg
ICAgICAgICAgICAgICBwYXJhbWV0ZXJfbmFtZSA9ICdvcHRfJyArIHBhcmFtZXRlcl9uYW1lCisg
ICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZCgiJXMgJXMiICUgKEdlbmVyYXRvci50eXBlX3N0
cmluZ19mb3JfZm9ybWFsX291dF9wYXJhbWV0ZXIoX3BhcmFtZXRlciksIHBhcmFtZXRlcl9uYW1l
KSkKKworICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShfcGFyYW1ldGVyLnR5cGUsIEVudW1UeXBl
KSBhbmQgX3BhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSBub3QgaW4gdXNlZF9lbnVtX25hbWVzOgor
ICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51
bV9mb3JfcGFyYW1ldGVyKF9wYXJhbWV0ZXIsIGNvbW1hbmQpKQorICAgICAgICAgICAgICAgIHVz
ZWRfZW51bV9uYW1lcy5hZGQoX3BhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkKKworICAgICAgICBj
b21tYW5kX2FyZ3MgPSB7CisgICAgICAgICAgICAnY29tbWFuZE5hbWUnOiBjb21tYW5kLmNvbW1h
bmRfbmFtZSwKKyAgICAgICAgICAgICdwYXJhbWV0ZXJzJzogIiwgIi5qb2luKHBhcmFtZXRlcnMp
CisgICAgICAgIH0KKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgdmlydHVhbCB2b2lkICUoY29t
bWFuZE5hbWUpcyglKHBhcmFtZXRlcnMpcykgPSAwOycgJSBjb21tYW5kX2FyZ3MpCisgICAgICAg
IHJldHVybiAnXG4nLmpvaW4obGluZXMpCisKKyAgICBkZWYgX2dlbmVyYXRlX2FzeW5jX2hhbmRs
ZXJfZGVjbGFyYXRpb25fZm9yX2NvbW1hbmQoc2VsZiwgY29tbWFuZCk6CisgICAgICAgIGNhbGxi
YWNrTmFtZSA9ICIlc0NhbGxiYWNrIiAlIHVjZmlyc3QoY29tbWFuZC5jb21tYW5kX25hbWUpCisK
KyAgICAgICAgaW5fcGFyYW1ldGVycyA9IFsnRXJyb3JTdHJpbmcqJ10KKyAgICAgICAgZm9yIF9w
YXJhbWV0ZXIgaW4gY29tbWFuZC5jYWxsX3BhcmFtZXRlcnM6CisgICAgICAgICAgICBpbl9wYXJh
bWV0ZXJzLmFwcGVuZCgiJXMgaW5fJXMiICUgKEdlbmVyYXRvci50eXBlX3N0cmluZ19mb3JfdW5j
aGVja2VkX2Zvcm1hbF9pbl9wYXJhbWV0ZXIoX3BhcmFtZXRlciksIF9wYXJhbWV0ZXIucGFyYW1l
dGVyX25hbWUpKQorICAgICAgICBpbl9wYXJhbWV0ZXJzLmFwcGVuZCgiUGFzc1JlZlB0cjwlcz4g
Y2FsbGJhY2siICUgY2FsbGJhY2tOYW1lKQorCisgICAgICAgIG91dF9wYXJhbWV0ZXJzID0gW10K
KyAgICAgICAgZm9yIF9wYXJhbWV0ZXIgaW4gY29tbWFuZC5yZXR1cm5fcGFyYW1ldGVyczoKKyAg
ICAgICAgICAgIG91dF9wYXJhbWV0ZXJzLmFwcGVuZCgiJXMgJXMiICUgKEdlbmVyYXRvci50eXBl
X3N0cmluZ19mb3JfZm9ybWFsX2FzeW5jX3BhcmFtZXRlcihfcGFyYW1ldGVyKSwgX3BhcmFtZXRl
ci5wYXJhbWV0ZXJfbmFtZSkpCisKKyAgICAgICAgY29tbWFuZF9hcmdzID0geworICAgICAgICAg
ICAgJ2NhbGxiYWNrTmFtZSc6IGNhbGxiYWNrTmFtZSwKKyAgICAgICAgICAgICdjb21tYW5kTmFt
ZSc6IGNvbW1hbmQuY29tbWFuZF9uYW1lLAorICAgICAgICAgICAgJ2luUGFyYW1ldGVycyc6ICIs
ICIuam9pbihpbl9wYXJhbWV0ZXJzKSwKKyAgICAgICAgICAgICdvdXRQYXJhbWV0ZXJzJzogIiwg
Ii5qb2luKG91dF9wYXJhbWV0ZXJzKSwKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBUZW1w
bGF0ZShUZW1wbGF0ZXMuQmFja2VuZERpc3BhdGNoZXJIZWFkZXJBc3luY0NvbW1hbmREZWNsYXJh
dGlvbikuc3Vic3RpdHV0ZShOb25lLCAqKmNvbW1hbmRfYXJncykKKworICAgIGRlZiBfZ2VuZXJh
dGVfZGlzcGF0Y2hlcl9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbihzZWxmLCBkb21haW4pOgorICAg
ICAgICBjbGFzc0NvbXBvbmVudHMgPSBbJ2NsYXNzJ10KKyAgICAgICAgZXhwb3J0TWFjcm8gPSBz
ZWxmLm1vZGVsKCkuZnJhbWV3b3JrLnNldHRpbmcoJ2V4cG9ydF9tYWNybycsIE5vbmUpCisgICAg
ICAgIGlmIGV4cG9ydE1hY3JvIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgY2xhc3NDb21wb25l
bnRzLmFwcGVuZChleHBvcnRNYWNybykKKworICAgICAgICBkZWNsYXJhdGlvbnMgPSBbXQorICAg
ICAgICBpZiBsZW4oZG9tYWluLmNvbW1hbmRzKSA+IDA6CisgICAgICAgICAgICBkZWNsYXJhdGlv
bnMuYXBwZW5kKCdwcml2YXRlOicpCisgICAgICAgIGRlY2xhcmF0aW9ucy5leHRlbmQobWFwKHNl
bGYuX2dlbmVyYXRlX2Rpc3BhdGNoZXJfZGVjbGFyYXRpb25fZm9yX2NvbW1hbmQsIGRvbWFpbi5j
b21tYW5kcykpCisKKyAgICAgICAgaGFuZGxlcl9hcmdzID0geworICAgICAgICAgICAgJ2NsYXNz
QW5kRXhwb3J0TWFjcm8nOiAiICIuam9pbihjbGFzc0NvbXBvbmVudHMpLAorICAgICAgICAgICAg
J2RvbWFpbk5hbWUnOiBkb21haW4uZG9tYWluX25hbWUsCisgICAgICAgICAgICAnY29tbWFuZERl
Y2xhcmF0aW9ucyc6ICJcbiIuam9pbihkZWNsYXJhdGlvbnMpCisgICAgICAgIH0KKworICAgICAg
ICByZXR1cm4gR2VuZXJhdG9yLndyYXBfd2l0aF9ndWFyZF9mb3JfZG9tYWluKGRvbWFpbiwgVGVt
cGxhdGUoVGVtcGxhdGVzLkJhY2tlbmREaXNwYXRjaGVySGVhZGVyRG9tYWluRGlzcGF0Y2hlckRl
Y2xhcmF0aW9uKS5zdWJzdGl0dXRlKE5vbmUsICoqaGFuZGxlcl9hcmdzKSkKKworICAgIGRlZiBf
Z2VuZXJhdGVfZGlzcGF0Y2hlcl9kZWNsYXJhdGlvbl9mb3JfY29tbWFuZChzZWxmLCBjb21tYW5k
KToKKyAgICAgICAgcmV0dXJuICIgICAgdm9pZCAlcyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVj
dG9yOjpJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpOyIgJSBjb21tYW5kLmNvbW1hbmRfbmFtZQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVn
ZW4vZ2VuZXJhdGVfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5IGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfYmFja2Vu
ZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjEzMmMwYTVkN2FiZmU1
OWMyZmZlOTQzZmYyYTY4MjYzYWI1ZjkyM2UKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9iYWNrZW5kX2Rp
c3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkKQEAgLTAsMCArMSwyNzggQEAKKyMhL3Vzci9iaW4v
ZW52IHB5dGhvbgorIyBDb3B5cmlnaHQgKGMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorIyBDb3B5cmlnaHQgKGMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBt
ZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
IyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisjIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKworCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG9zLnBhdGgKK2ltcG9ydCByZQoraW1wb3J0
IHN0cmluZworCitmcm9tIGdlbmVyYXRvciBpbXBvcnQgR2VuZXJhdG9yLCB1Y2ZpcnN0Citmcm9t
IHN0cmluZyBpbXBvcnQgVGVtcGxhdGUKK2Zyb20gZ2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQg
R2VuZXJhdG9yVGVtcGxhdGVzIGFzIFRlbXBsYXRlcworZnJvbSBtb2RlbHMgaW1wb3J0IE9iamVj
dFR5cGUsIEFycmF5VHlwZQorCisjIFVzZSBhIGdsb2JhbCBsb2dnZXIsIHdoaWNoIG5vcm1hbGx5
IG9ubHkgbG9ncyBlcnJvcnMuCitsb2cgPSBsb2dnaW5nLmdldExvZ2dlcignZ2xvYmFsJykKKwor
CitjbGFzcyBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKEdlbmVyYXRv
cik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0aCk6CisgICAg
ICAgIHNlbGYuX21vZGVsID0gbW9kZWwKKyAgICAgICAgc2VsZi5faW5wdXRfZmlsZXBhdGggPSBp
bnB1dF9maWxlcGF0aAorCisgICAgZGVmIG1vZGVsKHNlbGYpOgorICAgICAgICByZXR1cm4gc2Vs
Zi5fbW9kZWwKKworICAgIGRlZiBvdXRwdXRfZmlsZW5hbWUoc2VsZik6CisgICAgICAgIHJldHVy
biAiSW5zcGVjdG9yJXNCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwIiAlIHNlbGYubW9kZWwoKS5mcmFt
ZXdvcmsuc2V0dGluZygncHJlZml4JykKKworICAgIGRlZiBnZW5lcmF0ZV9saWNlbnNlKHNlbGYp
OgorICAgICAgICByZXR1cm4gVGVtcGxhdGUoVGVtcGxhdGVzLkNvcHlyaWdodEJsb2NrKS5zdWJz
dGl0dXRlKE5vbmUsIGlucHV0RmlsZW5hbWU9b3MucGF0aC5iYXNlbmFtZShzZWxmLl9pbnB1dF9m
aWxlcGF0aCkpCisKKyAgICBkZWYgZ2VuZXJhdGVfb3V0cHV0KHNlbGYpOgorICAgICAgICBzZWNv
bmRhcnlfaGVhZGVycyA9IFsKKyAgICAgICAgICAgICc8aW5zcGVjdG9yL0luc3BlY3RvckZyb250
ZW5kQ2hhbm5lbC5oPicsCisgICAgICAgICAgICAnPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMu
aD4nLAorICAgICAgICAgICAgJzx3dGYvdGV4dC9DU3RyaW5nLmg+J10KKworICAgICAgICBzZWN0
aW9ucyA9IFtdCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLmdlbmVyYXRlX2xpY2Vuc2Uo
KSkKKyAgICAgICAgaGVhZGVyX2FyZ3MgPSB7CisgICAgICAgICAgICAncHJpbWFyeUluY2x1ZGUn
OiAnIkluc3BlY3RvciVzQmFja2VuZERpc3BhdGNoZXJzLmgiJyAlIHNlbGYubW9kZWwoKS5mcmFt
ZXdvcmsuc2V0dGluZygncHJlZml4JyksCisgICAgICAgICAgICAnc2Vjb25kYXJ5SW5jbHVkZXMn
OiAiXG4iLmpvaW4oWycjaW5jbHVkZSAlcycgJSBoZWFkZXIgZm9yIGhlYWRlciBpbiBzZWNvbmRh
cnlfaGVhZGVyc10pLAorICAgICAgICAgICAgJ2lucHV0RmlsZW5hbWUnOiBzZWxmLl9pbnB1dF9m
aWxlcGF0aAorICAgICAgICB9CisKKyAgICAgICAgZG9tYWlucyA9IHNlbGYuZG9tYWluc190b19n
ZW5lcmF0ZSgpCisgICAgICAgIGRvbWFpbnMgPSBmaWx0ZXIobGFtYmRhIGRvbWFpbjogbGVuKGRv
bWFpbi5jb21tYW5kcykgPiAwLCBkb21haW5zKQorCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChU
ZW1wbGF0ZShUZW1wbGF0ZXMuQ3BwSW1wbGVtZW50YXRpb25QcmVsdWRlKS5zdWJzdGl0dXRlKE5v
bmUsICoqaGVhZGVyX2FyZ3MpKQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoIlxuIi5qb2luKG1h
cChzZWxmLl9nZW5lcmF0ZV9oYW5kbGVyX2NsYXNzX2Rlc3RydWN0b3JfZm9yX2RvbWFpbiwgZG9t
YWlucykpKQorICAgICAgICBzZWN0aW9ucy5leHRlbmQobWFwKHNlbGYuX2dlbmVyYXRlX2Rpc3Bh
dGNoZXJfaW1wbGVtZW50YXRpb25zX2Zvcl9kb21haW4sIGRvbWFpbnMpKQorICAgICAgICBzZWN0
aW9ucy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVzLkNwcEltcGxlbWVudGF0aW9uUG9zdGx1ZGUp
LnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCisgICAgICAgIHJldHVybiAiXG5cbiIu
am9pbihzZWN0aW9ucykKKworICAgICMgUHJpdmF0ZSBtZXRob2RzLgorCisgICAgZGVmIF9nZW5l
cmF0ZV9oYW5kbGVyX2NsYXNzX2Rlc3RydWN0b3JfZm9yX2RvbWFpbihzZWxmLCBkb21haW4pOgor
ICAgICAgICBkZXN0cnVjdG9yX2FyZ3MgPSB7CisgICAgICAgICAgICAnZG9tYWluTmFtZSc6IGRv
bWFpbi5kb21haW5fbmFtZQorICAgICAgICB9CisgICAgICAgIGRlc3RydWN0b3IgID0gJ0luc3Bl
Y3RvciUoZG9tYWluTmFtZSlzQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjp+SW5zcGVjdG9yJShk
b21haW5OYW1lKXNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKSB7IH0nICUgZGVzdHJ1Y3Rvcl9h
cmdzCisgICAgICAgIHJldHVybiBHZW5lcmF0b3Iud3JhcF93aXRoX2d1YXJkX2Zvcl9kb21haW4o
ZG9tYWluLCBkZXN0cnVjdG9yKQorCisgICAgZGVmIF9nZW5lcmF0ZV9kaXNwYXRjaGVyX2ltcGxl
bWVudGF0aW9uc19mb3JfZG9tYWluKHNlbGYsIGRvbWFpbik6CisgICAgICAgIGltcGxlbWVudGF0
aW9ucyA9IFtdCisKKyAgICAgICAgY29uc3RydWN0b3JfYXJncyA9IHsKKyAgICAgICAgICAgICdk
b21haW5OYW1lJzogZG9tYWluLmRvbWFpbl9uYW1lLAorICAgICAgICB9CisgICAgICAgIGltcGxl
bWVudGF0aW9ucy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVzLkJhY2tlbmREaXNwYXRjaGVySW1w
bGVtZW50YXRpb25Eb21haW5Db25zdHJ1Y3Rvcikuc3Vic3RpdHV0ZShOb25lLCAqKmNvbnN0cnVj
dG9yX2FyZ3MpKQorCisgICAgICAgIGlmIGxlbihkb21haW4uY29tbWFuZHMpIDw9IDU6CisgICAg
ICAgICAgICBpbXBsZW1lbnRhdGlvbnMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX3NtYWxsX2Rpc3Bh
dGNoZXJfc3dpdGNoX2ltcGxlbWVudGF0aW9uX2Zvcl9kb21haW4oZG9tYWluKSkKKyAgICAgICAg
ZWxzZToKKyAgICAgICAgICAgIGltcGxlbWVudGF0aW9ucy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVf
bGFyZ2VfZGlzcGF0Y2hlcl9zd2l0Y2hfaW1wbGVtZW50YXRpb25fZm9yX2RvbWFpbihkb21haW4p
KQorCisgICAgICAgIGZvciBfY29tbWFuZCBpbiBkb21haW4uY29tbWFuZHM6CisgICAgICAgICAg
ICBpZiBfY29tbWFuZC5pc19hc3luYzoKKyAgICAgICAgICAgICAgICBpbXBsZW1lbnRhdGlvbnMu
YXBwZW5kKHNlbGYuX2dlbmVyYXRlX2FzeW5jX2Rpc3BhdGNoZXJfY2xhc3NfZm9yX2RvbWFpbihf
Y29tbWFuZCwgZG9tYWluKSkKKyAgICAgICAgICAgIGltcGxlbWVudGF0aW9ucy5hcHBlbmQoc2Vs
Zi5fZ2VuZXJhdGVfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbl9mb3JfY29tbWFuZChfY29tbWFu
ZCwgZG9tYWluKSkKKworICAgICAgICByZXR1cm4gR2VuZXJhdG9yLndyYXBfd2l0aF9ndWFyZF9m
b3JfZG9tYWluKGRvbWFpbiwgIlxuXG4iLmpvaW4oaW1wbGVtZW50YXRpb25zKSkKKworICAgIGRl
ZiBfZ2VuZXJhdGVfc21hbGxfZGlzcGF0Y2hlcl9zd2l0Y2hfaW1wbGVtZW50YXRpb25fZm9yX2Rv
bWFpbihzZWxmLCBkb21haW4pOgorICAgICAgICBjYXNlcyA9IFtdCisgICAgICAgIGNhc2VzLmFw
cGVuZCgnICAgIGlmIChtZXRob2QgPT0gIiVzIiknICUgZG9tYWluLmNvbW1hbmRzWzBdLmNvbW1h
bmRfbmFtZSkKKyAgICAgICAgY2FzZXMuYXBwZW5kKCcgICAgICAgICVzKGNhbGxJZCwgKm1lc3Nh
Z2UuZ2V0KCkpOycgJSBkb21haW4uY29tbWFuZHNbMF0uY29tbWFuZF9uYW1lKQorICAgICAgICBm
b3IgX2NvbW1hbmQgaW4gZG9tYWluLmNvbW1hbmRzWzE6XToKKyAgICAgICAgICAgIGNhc2VzLmFw
cGVuZCgnICAgIGVsc2UgaWYgKG1ldGhvZCA9PSAiJXMiKScgJSBfY29tbWFuZC5jb21tYW5kX25h
bWUpCisgICAgICAgICAgICBjYXNlcy5hcHBlbmQoJyAgICAgICAgJXMoY2FsbElkLCAqbWVzc2Fn
ZS5nZXQoKSk7JyAlIF9jb21tYW5kLmNvbW1hbmRfbmFtZSkKKworICAgICAgICBzd2l0Y2hfYXJn
cyA9IHsKKyAgICAgICAgICAgICdkb21haW5OYW1lJzogZG9tYWluLmRvbWFpbl9uYW1lLAorICAg
ICAgICAgICAgJ2Rpc3BhdGNoQ2FzZXMnOiAiXG4iLmpvaW4oY2FzZXMpCisgICAgICAgIH0KKwor
ICAgICAgICByZXR1cm4gVGVtcGxhdGUoVGVtcGxhdGVzLkJhY2tlbmREaXNwYXRjaGVySW1wbGVt
ZW50YXRpb25TbWFsbFN3aXRjaCkuc3Vic3RpdHV0ZShOb25lLCAqKnN3aXRjaF9hcmdzKQorCisg
ICAgZGVmIF9nZW5lcmF0ZV9sYXJnZV9kaXNwYXRjaGVyX3N3aXRjaF9pbXBsZW1lbnRhdGlvbl9m
b3JfZG9tYWluKHNlbGYsIGRvbWFpbik6CisgICAgICAgIGNhc2VzID0gW10KKyAgICAgICAgZm9y
IF9jb21tYW5kIGluIGRvbWFpbi5jb21tYW5kczoKKyAgICAgICAgICAgIGFyZ3MgPSB7CisgICAg
ICAgICAgICAgICAgJ2RvbWFpbk5hbWUnOiBkb21haW4uZG9tYWluX25hbWUsCisgICAgICAgICAg
ICAgICAgJ2NvbW1hbmROYW1lJzogX2NvbW1hbmQuY29tbWFuZF9uYW1lCisgICAgICAgICAgICB9
CisgICAgICAgICAgICBjYXNlcy5hcHBlbmQoJyAgICAgICAgICAgIHsgIiUoY29tbWFuZE5hbWUp
cyIsICZJbnNwZWN0b3IlKGRvbWFpbk5hbWUpc0JhY2tlbmREaXNwYXRjaGVyOjolKGNvbW1hbmRO
YW1lKXMgfSwnICUgYXJncykKKworICAgICAgICBzd2l0Y2hfYXJncyA9IHsKKyAgICAgICAgICAg
ICdkb21haW5OYW1lJzogZG9tYWluLmRvbWFpbl9uYW1lLAorICAgICAgICAgICAgJ2Rpc3BhdGNo
Q2FzZXMnOiAiXG4iLmpvaW4oY2FzZXMpCisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gVGVt
cGxhdGUoVGVtcGxhdGVzLkJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25MYXJnZVN3aXRj
aCkuc3Vic3RpdHV0ZShOb25lLCAqKnN3aXRjaF9hcmdzKQorCisgICAgZGVmIF9nZW5lcmF0ZV9h
c3luY19kaXNwYXRjaGVyX2NsYXNzX2Zvcl9kb21haW4oc2VsZiwgY29tbWFuZCwgZG9tYWluKToK
KyAgICAgICAgb3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cyA9IFtdCisgICAgICAgIGZvcm1hbF9w
YXJhbWV0ZXJzID0gW10KKworICAgICAgICBmb3IgX3BhcmFtZXRlciBpbiBjb21tYW5kLnJldHVy
bl9wYXJhbWV0ZXJzOgorICAgICAgICAgICAgcGFyYW1fYXJncyA9IHsKKyAgICAgICAgICAgICAg
ICAnZnJhbWV3b3JrUHJlZml4Jzogc2VsZi5tb2RlbCgpLmZyYW1ld29yay5zZXR0aW5nKCdwcmVm
aXgnKSwKKyAgICAgICAgICAgICAgICAna2V5ZWRTZXRNZXRob2QnOiBHZW5lcmF0b3Iua2V5ZWRf
c2V0X21ldGhvZF9mb3JfdHlwZShfcGFyYW1ldGVyLnR5cGUpLAorICAgICAgICAgICAgICAgICdw
YXJhbWV0ZXJOYW1lJzogX3BhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwKKyAgICAgICAgICAgICAg
ICAncGFyYW1ldGVyVHlwZSc6IEdlbmVyYXRvci50eXBlX3N0cmluZ19mb3Jfc3RhY2tfaW5fcGFy
YW1ldGVyKF9wYXJhbWV0ZXIpLAorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3JtYWxf
cGFyYW1ldGVycy5hcHBlbmQoJyVzICVzJyAlIChHZW5lcmF0b3IudHlwZV9zdHJpbmdfZm9yX2Zv
cm1hbF9hc3luY19wYXJhbWV0ZXIoX3BhcmFtZXRlciksIF9wYXJhbWV0ZXIucGFyYW1ldGVyX25h
bWUpKQorCisgICAgICAgICAgICBpZiBfcGFyYW1ldGVyLmlzX29wdGlvbmFsOgorICAgICAgICAg
ICAgICAgIGlmIEdlbmVyYXRvci5zaG91bGRfdXNlX3dyYXBwZXJfZm9yX3JldHVybl90eXBlKF9w
YXJhbWV0ZXIudHlwZSk6CisgICAgICAgICAgICAgICAgICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdu
bWVudHMuYXBwZW5kKCcgICAgaWYgKCUocGFyYW1ldGVyTmFtZSlzLmlzQXNzaWduZWQoKSknICUg
cGFyYW1fYXJncykKKyAgICAgICAgICAgICAgICAgICAgb3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50
cy5hcHBlbmQoJyAgICAgICAganNvbk1lc3NhZ2UtPiUoa2V5ZWRTZXRNZXRob2QpcyhBU0NJSUxp
dGVyYWwoIiUocGFyYW1ldGVyTmFtZSlzIiksICUocGFyYW1ldGVyTmFtZSlzLmdldFZhbHVlKCkp
OycgJSBwYXJhbV9hcmdzKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAg
ICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAgaWYgKCUocGFyYW1ldGVy
TmFtZSlzKScgJSBwYXJhbV9hcmdzKQorICAgICAgICAgICAgICAgICAgICBvdXRfcGFyYW1ldGVy
X2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgICAgICBqc29uTWVzc2FnZS0+JShrZXllZFNldE1ldGhv
ZClzKEFTQ0lJTGl0ZXJhbCgiJShwYXJhbWV0ZXJOYW1lKXMiKSwgJShwYXJhbWV0ZXJOYW1lKXMp
OycgJSBwYXJhbV9hcmdzKQorICAgICAgICAgICAgZWxpZiBfcGFyYW1ldGVyLnR5cGUuaXNfZW51
bSgpOgorICAgICAgICAgICAgICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcg
ICAganNvbk1lc3NhZ2UtPiUoa2V5ZWRTZXRNZXRob2QpcyhBU0NJSUxpdGVyYWwoIiUocGFyYW1l
dGVyTmFtZSlzIiksIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OmdldCUoZnJhbWV3b3JrUHJlZml4
KXNFbnVtQ29uc3RhbnRWYWx1ZSglKHBhcmFtZXRlck5hbWUpcykpOycgJSBwYXJhbV9hcmdzKQor
ICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBvdXRfcGFyYW1ldGVyX2Fzc2lnbm1l
bnRzLmFwcGVuZCgnICAgIGpzb25NZXNzYWdlLT4lKGtleWVkU2V0TWV0aG9kKXMoQVNDSUlMaXRl
cmFsKCIlKHBhcmFtZXRlck5hbWUpcyIpLCAlKHBhcmFtZXRlck5hbWUpcyk7JyAlIHBhcmFtX2Fy
Z3MpCisKKyAgICAgICAgYXN5bmNfYXJncyA9IHsKKyAgICAgICAgICAgICdkb21haW5OYW1lJzog
ZG9tYWluLmRvbWFpbl9uYW1lLAorICAgICAgICAgICAgJ2NhbGxiYWNrTmFtZSc6IHVjZmlyc3Qo
Y29tbWFuZC5jb21tYW5kX25hbWUpICsgJ0NhbGxiYWNrJywKKyAgICAgICAgICAgICdmb3JtYWxQ
YXJhbWV0ZXJzJzogIiwgIi5qb2luKGZvcm1hbF9wYXJhbWV0ZXJzKSwKKyAgICAgICAgICAgICdv
dXRQYXJhbWV0ZXJBc3NpZ25tZW50cyc6ICJcbiIuam9pbihvdXRfcGFyYW1ldGVyX2Fzc2lnbm1l
bnRzKQorICAgICAgICB9CisgICAgICAgIHJldHVybiBUZW1wbGF0ZShUZW1wbGF0ZXMuQmFja2Vu
ZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkFzeW5jQ29tbWFuZCkuc3Vic3RpdHV0ZShOb25lLCAq
KmFzeW5jX2FyZ3MpCisKKyAgICBkZWYgX2dlbmVyYXRlX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRp
b25fZm9yX2NvbW1hbmQoc2VsZiwgY29tbWFuZCwgZG9tYWluKToKKyAgICAgICAgbGluZXMgPSBb
XQorICAgICAgICBpbl9wYXJhbWV0ZXJfZGVjbGFyYXRpb25zID0gW10KKyAgICAgICAgb3V0X3Bh
cmFtZXRlcl9kZWNsYXJhdGlvbnMgPSBbXQorICAgICAgICBvdXRfcGFyYW1ldGVyX2Fzc2lnbm1l
bnRzID0gW10KKyAgICAgICAgbWV0aG9kX3BhcmFtZXRlcnMgPSBbJyZlcnJvciddCisKKyAgICAg
ICAgZm9yIF9wYXJhbWV0ZXIgaW4gY29tbWFuZC5jYWxsX3BhcmFtZXRlcnM6CisgICAgICAgICAg
ICBvdXRfc3VjY2Vzc19hcmd1bWVudCA9ICdudWxscHRyJworICAgICAgICAgICAgaWYgX3BhcmFt
ZXRlci5pc19vcHRpb25hbDoKKyAgICAgICAgICAgICAgICBvdXRfc3VjY2Vzc19hcmd1bWVudCA9
ICcmJXNfdmFsdWVGb3VuZCcgJSBfcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lCisgICAgICAgICAg
ICAgICAgaW5fcGFyYW1ldGVyX2RlY2xhcmF0aW9ucy5hcHBlbmQoJyAgICBib29sICVzX3ZhbHVl
Rm91bmQgPSBmYWxzZTsnICUgX3BhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkKKworICAgICAgICAg
ICAgcGFyYW1fYXJncyA9IHsKKyAgICAgICAgICAgICAgICAncGFyYW1ldGVyVHlwZSc6IEdlbmVy
YXRvci50eXBlX3N0cmluZ19mb3Jfc3RhY2tfaW5fcGFyYW1ldGVyKF9wYXJhbWV0ZXIpLAorICAg
ICAgICAgICAgICAgICdwYXJhbWV0ZXJOYW1lJzogX3BhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwK
KyAgICAgICAgICAgICAgICAna2V5ZWRHZXRNZXRob2QnOiBHZW5lcmF0b3Iua2V5ZWRfZ2V0X21l
dGhvZF9mb3JfdHlwZShfcGFyYW1ldGVyLnR5cGUpLAorICAgICAgICAgICAgICAgICdzdWNjZXNz
T3V0UGFyYW0nOiBvdXRfc3VjY2Vzc19hcmd1bWVudAorICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBpbl9wYXJhbWV0ZXJfZGVjbGFyYXRpb25zLmFwcGVuZCgnICAgICUocGFyYW1ldGVyVHlw
ZSlzIGluXyUocGFyYW1ldGVyTmFtZSlzID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OiUo
a2V5ZWRHZXRNZXRob2QpcyhwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgiJShwYXJh
bWV0ZXJOYW1lKXMiKSwgJShzdWNjZXNzT3V0UGFyYW0pcywgcHJvdG9jb2xFcnJvcnNQdHIpOycg
JSBwYXJhbV9hcmdzKQorCisgICAgICAgICAgICBpZiBfcGFyYW1ldGVyLmlzX29wdGlvbmFsOgor
ICAgICAgICAgICAgICAgIG1ldGhvZF9wYXJhbWV0ZXJzLmFwcGVuZCgnJShwYXJhbWV0ZXJOYW1l
KXNfdmFsdWVGb3VuZCA/ICZpbl8lKHBhcmFtZXRlck5hbWUpcyA6IG51bGxwdHInICUgcGFyYW1f
YXJncykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbWV0aG9kX3BhcmFtZXRl
cnMuYXBwZW5kKCdpbl8nICsgX3BhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkKKworICAgICAgICBp
ZiBjb21tYW5kLmlzX2FzeW5jOgorICAgICAgICAgICAgYXN5bmNfYXJncyA9IHsKKyAgICAgICAg
ICAgICAgICAnZG9tYWluTmFtZSc6IGRvbWFpbi5kb21haW5fbmFtZSwKKyAgICAgICAgICAgICAg
ICAnY2FsbGJhY2tOYW1lJzogdWNmaXJzdChjb21tYW5kLmNvbW1hbmRfbmFtZSkgKyAnQ2FsbGJh
Y2snCisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdubWVu
dHMuYXBwZW5kKCcgICAgICAgIGNhbGxiYWNrLT5kaXNhYmxlKCk7JykKKyAgICAgICAgICAgIG91
dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAgICAgIG1fYmFja2VuZERpc3BhdGNo
ZXItPnJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgSW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsnKQorICAgICAgICAgICAgb3V0X3Bh
cmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICAgICAgcmV0dXJuOycpCisgICAgICAgICAg
ICBtZXRob2RfcGFyYW1ldGVycy5hcHBlbmQoJ2NhbGxiYWNrJykKKworICAgICAgICBlbHNlOgor
ICAgICAgICAgICAgZm9yIF9wYXJhbWV0ZXIgaW4gY29tbWFuZC5yZXR1cm5fcGFyYW1ldGVyczoK
KyAgICAgICAgICAgICAgICBwYXJhbV9hcmdzID0geworICAgICAgICAgICAgICAgICAgICAncGFy
YW1ldGVyVHlwZSc6IEdlbmVyYXRvci50eXBlX3N0cmluZ19mb3Jfc3RhY2tfb3V0X3BhcmFtZXRl
cihfcGFyYW1ldGVyKSwKKyAgICAgICAgICAgICAgICAgICAgJ3BhcmFtZXRlck5hbWUnOiBfcGFy
YW1ldGVyLnBhcmFtZXRlcl9uYW1lLAorICAgICAgICAgICAgICAgICAgICAna2V5ZWRTZXRNZXRo
b2QnOiBHZW5lcmF0b3Iua2V5ZWRfc2V0X21ldGhvZF9mb3JfdHlwZShfcGFyYW1ldGVyLnR5cGUp
LAorICAgICAgICAgICAgICAgICAgICAnZnJhbWV3b3JrUHJlZml4Jzogc2VsZi5tb2RlbCgpLmZy
YW1ld29yay5zZXR0aW5nKCdwcmVmaXgnKQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgIG91dF9wYXJhbWV0ZXJfZGVjbGFyYXRpb25zLmFwcGVuZCgnICAgICUocGFyYW1ldGVy
VHlwZSlzIG91dF8lKHBhcmFtZXRlck5hbWUpczsnICUgcGFyYW1fYXJncykKKyAgICAgICAgICAg
ICAgICBpZiBfcGFyYW1ldGVyLmlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAgICAgICBpZiBH
ZW5lcmF0b3Iuc2hvdWxkX3VzZV93cmFwcGVyX2Zvcl9yZXR1cm5fdHlwZShfcGFyYW1ldGVyLnR5
cGUpOgorICAgICAgICAgICAgICAgICAgICAgICAgb3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cy5h
cHBlbmQoJyAgICAgICAgaWYgKG91dF8lKHBhcmFtZXRlck5hbWUpcy5pc0Fzc2lnbmVkKCkpJyAl
IHBhcmFtX2FyZ3MpCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRfcGFyYW1ldGVyX2Fzc2ln
bm1lbnRzLmFwcGVuZCgnICAgICAgICAgICAgcmVzdWx0LT4lKGtleWVkU2V0TWV0aG9kKXMoQVND
SUlMaXRlcmFsKCIlKHBhcmFtZXRlck5hbWUpcyIpLCBvdXRfJShwYXJhbWV0ZXJOYW1lKXMuZ2V0
VmFsdWUoKSk7JyAlIHBhcmFtX2FyZ3MpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAg
ICAgICAgICAgICAgICAgICAgICBvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAg
ICAgICBpZiAob3V0XyUocGFyYW1ldGVyTmFtZSlzKScgJSBwYXJhbV9hcmdzKQorICAgICAgICAg
ICAgICAgICAgICAgICAgb3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICAgICAg
ICAgIHJlc3VsdC0+JShrZXllZFNldE1ldGhvZClzKEFTQ0lJTGl0ZXJhbCgiJShwYXJhbWV0ZXJO
YW1lKXMiKSwgb3V0XyUocGFyYW1ldGVyTmFtZSlzKTsnICUgcGFyYW1fYXJncykKKyAgICAgICAg
ICAgICAgICBlbGlmIF9wYXJhbWV0ZXIudHlwZS5pc19lbnVtKCk6CisgICAgICAgICAgICAgICAg
ICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAgICAgIHJlc3VsdC0+JShr
ZXllZFNldE1ldGhvZClzKEFTQ0lJTGl0ZXJhbCgiJShwYXJhbWV0ZXJOYW1lKXMiKSwgSW5zcGVj
dG9yOjpUeXBlQnVpbGRlcjo6Z2V0JShmcmFtZXdvcmtQcmVmaXgpc0VudW1Db25zdGFudFZhbHVl
KG91dF8lKHBhcmFtZXRlck5hbWUpcykpOycgJSBwYXJhbV9hcmdzKQorICAgICAgICAgICAgICAg
IGVsc2U6CisgICAgICAgICAgICAgICAgICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBw
ZW5kKCcgICAgICAgIHJlc3VsdC0+JShrZXllZFNldE1ldGhvZClzKEFTQ0lJTGl0ZXJhbCgiJShw
YXJhbWV0ZXJOYW1lKXMiKSwgb3V0XyUocGFyYW1ldGVyTmFtZSlzKTsnICUgcGFyYW1fYXJncykK
KworICAgICAgICAgICAgICAgIGlmIEdlbmVyYXRvci5zaG91bGRfcGFzc19ieV9jb3B5X2Zvcl9y
ZXR1cm5fdHlwZShfcGFyYW1ldGVyLnR5cGUpOgorICAgICAgICAgICAgICAgICAgICBtZXRob2Rf
cGFyYW1ldGVycy5hcHBlbmQoJ291dF8nICsgX3BhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkKKyAg
ICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBtZXRob2RfcGFyYW1ldGVy
cy5hcHBlbmQoJyZvdXRfJyArIF9wYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpCisKKyAgICAgICAg
Y29tbWFuZF9hcmdzID0geworICAgICAgICAgICAgJ2RvbWFpbk5hbWUnOiBkb21haW4uZG9tYWlu
X25hbWUsCisgICAgICAgICAgICAnY2FsbGJhY2tOYW1lJzogJyVzQ2FsbGJhY2snICUgdWNmaXJz
dChjb21tYW5kLmNvbW1hbmRfbmFtZSksCisgICAgICAgICAgICAnY29tbWFuZE5hbWUnOiBjb21t
YW5kLmNvbW1hbmRfbmFtZSwKKyAgICAgICAgICAgICdpblBhcmFtZXRlckRlY2xhcmF0aW9ucyc6
ICJcbiIuam9pbihpbl9wYXJhbWV0ZXJfZGVjbGFyYXRpb25zKSwKKyAgICAgICAgICAgICdpbnZv
Y2F0aW9uUGFyYW1ldGVycyc6ICIsICIuam9pbihtZXRob2RfcGFyYW1ldGVycykKKyAgICAgICAg
fQorCisgICAgICAgIGlmIGxlbihjb21tYW5kLmNhbGxfcGFyYW1ldGVycykgPT0gMDoKKyAgICAg
ICAgICAgIGxpbmVzLmFwcGVuZCgndm9pZCBJbnNwZWN0b3IlKGRvbWFpbk5hbWUpc0JhY2tlbmRE
aXNwYXRjaGVyOjolKGNvbW1hbmROYW1lKXMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9i
amVjdCYpJyAlIGNvbW1hbmRfYXJncykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxpbmVz
LmFwcGVuZCgndm9pZCBJbnNwZWN0b3IlKGRvbWFpbk5hbWUpc0JhY2tlbmREaXNwYXRjaGVyOjol
KGNvbW1hbmROYW1lKXMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2Fn
ZSknICUgY29tbWFuZF9hcmdzKQorICAgICAgICBsaW5lcy5hcHBlbmQoJ3snKQorCisgICAgICAg
IGlmIGxlbihjb21tYW5kLmNhbGxfcGFyYW1ldGVycykgPiAwOgorICAgICAgICAgICAgbGluZXMu
YXBwZW5kKFRlbXBsYXRlKFRlbXBsYXRlcy5CYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9u
UHJlcGFyZUNvbW1hbmRBcmd1bWVudHMpLnN1YnN0aXR1dGUoTm9uZSwgKipjb21tYW5kX2FyZ3Mp
KQorCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIEVycm9yU3RyaW5nIGVycm9yOycpCisgICAg
ICAgIGxpbmVzLmFwcGVuZCgnICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IElu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7JykKKyAgICAgICAgaWYgY29tbWFuZC5pc19hc3luYzoK
KyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIFJlZlB0cjxJbnNwZWN0b3IlKGRvbWFpbk5h
bWUpc0JhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6JShjYWxsYmFja05hbWUpcz4gY2FsbGJhY2sg
PSBhZG9wdFJlZihuZXcgSW5zcGVjdG9yJShkb21haW5OYW1lKXNCYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXI6OiUoY2FsbGJhY2tOYW1lKXMobV9iYWNrZW5kRGlzcGF0Y2hlcixjYWxsSWQpKTsnICUg
Y29tbWFuZF9hcmdzKQorICAgICAgICBpZiBsZW4oY29tbWFuZC5yZXR1cm5fcGFyYW1ldGVycykg
PiAwOgorICAgICAgICAgICAgbGluZXMuZXh0ZW5kKG91dF9wYXJhbWV0ZXJfZGVjbGFyYXRpb25z
KQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBtX2FnZW50LT4lKGNvbW1hbmROYW1lKXMoJShp
bnZvY2F0aW9uUGFyYW1ldGVycylzKTsnICUgY29tbWFuZF9hcmdzKQorICAgICAgICBsaW5lcy5h
cHBlbmQoJycpCisgICAgICAgIGlmIGNvbW1hbmQuaXNfYXN5bmM6CisgICAgICAgICAgICBsaW5l
cy5hcHBlbmQoJyAgICBpZiAoZXJyb3IubGVuZ3RoKCkpIHsnKQorICAgICAgICAgICAgbGluZXMu
ZXh0ZW5kKG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMpCisgICAgICAgICAgICBsaW5lcy5hcHBl
bmQoJyAgICB9JykKKyAgICAgICAgZWxpZiBsZW4oY29tbWFuZC5yZXR1cm5fcGFyYW1ldGVycykg
PiAxOgorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkg
eycpCisgICAgICAgICAgICBsaW5lcy5leHRlbmQob3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cykK
KyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIH0nKQorICAgICAgICBlbGlmIGxlbihjb21t
YW5kLnJldHVybl9wYXJhbWV0ZXJzKSA9PSAxOgorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcg
ICAgaWYgKCFlcnJvci5sZW5ndGgoKSknKQorICAgICAgICAgICAgbGluZXMuZXh0ZW5kKG91dF9w
YXJhbWV0ZXJfYXNzaWdubWVudHMpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJycpCisKKyAg
ICAgICAgaWYgbm90IGNvbW1hbmQuaXNfYXN5bmM6CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQo
JyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVs
ZWFzZSgpLCBlcnJvcik7JykKKyAgICAgICAgbGluZXMuYXBwZW5kKCd9JykKKyAgICAgICAgcmV0
dXJuICJcbiIuam9pbihsaW5lcykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVh
ZGVyLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4v
Z2VuZXJhdGVfZnJvbnRlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjk3MWI5
MzgwNTJjMzViMGYwNzkxYzE2MDQ5ZWRkYjJhZDU2M2Y5YgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2Zy
b250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5CkBAIC0wLDAgKzEsMTI4IEBACisjIS91c3IvYmlu
L2VudiBweXRob24KKyMgQ29weXJpZ2h0IChjKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChjKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUg
bWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworIyBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisKKworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBvcy5wYXRoCitpbXBvcnQgcmUKK2ltcG9y
dCBzdHJpbmcKKworZnJvbSBtb2RlbHMgaW1wb3J0IEVudW1UeXBlCitmcm9tIGdlbmVyYXRvciBp
bXBvcnQgR2VuZXJhdG9yLCB1Y2ZpcnN0Citmcm9tIHN0cmluZyBpbXBvcnQgVGVtcGxhdGUKK2Zy
b20gZ2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgR2VuZXJhdG9yVGVtcGxhdGVzIGFzIFRlbXBs
YXRlcworCisjIFVzZSBhIGdsb2JhbCBsb2dnZXIsIHdoaWNoIG5vcm1hbGx5IG9ubHkgbG9ncyBl
cnJvcnMuCisjIEl0IGNhbiBiZSBjb25maWd1cmVkIHRvIGxvZyBkZWJ1ZyBtZXNzYWdlcyBmcm9t
IHRoZSBDTEkuCitsb2cgPSBsb2dnaW5nLmdldExvZ2dlcignZ2xvYmFsJykKKworCitjbGFzcyBG
cm9udGVuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IoR2VuZXJhdG9yKToKKyAgICBkZWYgX19p
bml0X18oc2VsZiwgbW9kZWwsIGlucHV0X2ZpbGVwYXRoKToKKyAgICAgICAgc2VsZi5fbW9kZWwg
PSBtb2RlbAorICAgICAgICBzZWxmLl9pbnB1dF9maWxlcGF0aCA9IGlucHV0X2ZpbGVwYXRoCisK
KyAgICBkZWYgbW9kZWwoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9tb2RlbAorCisgICAg
ZGVmIG91dHB1dF9maWxlbmFtZShzZWxmKToKKyAgICAgICAgcmV0dXJuICJJbnNwZWN0b3Ilc0Zy
b250ZW5kRGlzcGF0Y2hlcnMuaCIgJSBzZWxmLm1vZGVsKCkuZnJhbWV3b3JrLnNldHRpbmcoJ3By
ZWZpeCcpCisKKyAgICBkZWYgZ2VuZXJhdGVfbGljZW5zZShzZWxmKToKKyAgICAgICAgcmV0dXJu
IFRlbXBsYXRlKFRlbXBsYXRlcy5Db3B5cmlnaHRCbG9jaykuc3Vic3RpdHV0ZShOb25lLCBpbnB1
dEZpbGVuYW1lPW9zLnBhdGguYmFzZW5hbWUoc2VsZi5faW5wdXRfZmlsZXBhdGgpKQorCisgICAg
ZGVmIGdlbmVyYXRlX291dHB1dChzZWxmKToKKyAgICAgICAgaGVhZGVycyA9IFsKKyAgICAgICAg
ICAgICciSW5zcGVjdG9yJXNUeXBlQnVpbGRlcnMuaCInICUgc2VsZi5tb2RlbCgpLmZyYW1ld29y
ay5zZXR0aW5nKCdwcmVmaXgnKSwKKyAgICAgICAgICAgICc8aW5zcGVjdG9yL0luc3BlY3RvckZy
b250ZW5kQ2hhbm5lbC5oPicsCisgICAgICAgICAgICAnPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1
ZXMuaD4nLAorICAgICAgICAgICAgJzx3dGYvUGFzc1JlZlB0ci5oPicsCisgICAgICAgICAgICAn
PHd0Zi90ZXh0L1dURlN0cmluZy5oPiddCisKKyAgICAgICAgc2VjdGlvbnMgPSBbXQorICAgICAg
ICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5nZW5lcmF0ZV9saWNlbnNlKCkpCisgICAgICAgIGhlYWRl
cl9hcmdzID0geworICAgICAgICAgICAgJ2hlYWRlckd1YXJkU3RyaW5nJzogcmUuc3ViKCdbLS4v
XScsICdfJywgc2VsZi5vdXRwdXRfZmlsZW5hbWUoKSksCisgICAgICAgICAgICAnaW5jbHVkZXMn
OiAnXG4nLmpvaW4oWycjaW5jbHVkZSAnICsgaGVhZGVyIGZvciBoZWFkZXIgaW4gaGVhZGVyc10p
LAorICAgICAgICAgICAgJ3R5cGVkZWZzJzogJycsCisgICAgICAgICAgICAnaW5wdXRGaWxlbmFt
ZSc6IHNlbGYuX2lucHV0X2ZpbGVwYXRoCisgICAgICAgIH0KKworICAgICAgICBkb21haW5zID0g
c2VsZi5kb21haW5zX3RvX2dlbmVyYXRlKCkKKyAgICAgICAgZG9tYWlucyA9IGZpbHRlcihsYW1i
ZGEgZG9tYWluOiBsZW4oZG9tYWluLmV2ZW50cykgPiAwLCBkb21haW5zKQorCisgICAgICAgIHNl
Y3Rpb25zLmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMuQ3BwSGVhZGVyUHJlbHVkZSkuc3Vic3Rp
dHV0ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkKKyAgICAgICAgc2VjdGlvbnMuZXh0ZW5kKG1hcChz
ZWxmLl9nZW5lcmF0ZV9kaXNwYXRjaGVyX2RlY2xhcmF0aW9uc19mb3JfZG9tYWluLCBkb21haW5z
KSkKKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKFRlbXBsYXRlcy5DcHBIZWFkZXJQ
b3N0bHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkKKyAgICAgICAgcmV0dXJu
ICJcblxuIi5qb2luKHNlY3Rpb25zKQorCisgICAgIyBQcml2YXRlIG1ldGhvZHMuCisKKyAgICBk
ZWYgX2dlbmVyYXRlX2Fub255bW91c19lbnVtX2Zvcl9wYXJhbWV0ZXIoc2VsZiwgcGFyYW1ldGVy
LCBldmVudCk6CisgICAgICAgIGVudW1fYXJncyA9IHsKKyAgICAgICAgICAgICdwYXJhbWV0ZXJO
YW1lJzogcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lLAorICAgICAgICAgICAgJ2V2ZW50TmFtZSc6
IGV2ZW50LmV2ZW50X25hbWUKKyAgICAgICAgfQorCisgICAgICAgIGxpbmVzID0gW10KKyAgICAg
ICAgbGluZXMuYXBwZW5kKCcgICAgICAgIC8vIE5hbWVkIGFmdGVyIHBhcmFtZXRlciBcJyUocGFy
YW1ldGVyTmFtZSlzXCcgd2hpbGUgZ2VuZXJhdGluZyBjb21tYW5kL2V2ZW50ICUoZXZlbnROYW1l
KXMuJyAlIGVudW1fYXJncykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIGVudW0gY2xh
c3MgJXMgeycgJSB1Y2ZpcnN0KHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkpCisgICAgICAgIGZv
ciBlbnVtX3ZhbHVlIGluIHBhcmFtZXRlci50eXBlLmVudW1fdmFsdWVzKCk6CisgICAgICAgICAg
ICBsaW5lcy5hcHBlbmQoJyAgICAgICAgICAgICVzID0gJWQsJyAlIChHZW5lcmF0b3Iuc3R5bGl6
ZWRfbmFtZV9mb3JfZW51bV92YWx1ZShlbnVtX3ZhbHVlKSwgc2VsZi5lbmNvZGluZ19mb3JfZW51
bV92YWx1ZShlbnVtX3ZhbHVlKSkpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICB9OyAv
LyBlbnVtIGNsYXNzICVzJyAlIHVjZmlyc3QocGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKSkKKyAg
ICAgICAgcmV0dXJuICJcbiIuam9pbihsaW5lcykKKworICAgIGRlZiBfZ2VuZXJhdGVfZGlzcGF0
Y2hlcl9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbihzZWxmLCBkb21haW4pOgorICAgICAgICBjbGFz
c0NvbXBvbmVudHMgPSBbJ2NsYXNzJ10KKyAgICAgICAgZXhwb3J0TWFjcm8gPSBzZWxmLm1vZGVs
KCkuZnJhbWV3b3JrLnNldHRpbmcoJ2V4cG9ydF9tYWNybycsIE5vbmUpCisgICAgICAgIGlmIGV4
cG9ydE1hY3JvIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgY2xhc3NDb21wb25lbnRzLmFwcGVu
ZChleHBvcnRNYWNybykKKworICAgICAgICB1c2VkX2VudW1fbmFtZXMgPSBzZXQoW10pCisKKyAg
ICAgICAgZXZlbnRfZGVjbGFyYXRpb25zID0gW10KKyAgICAgICAgZm9yIGV2ZW50IGluIGRvbWFp
bi5ldmVudHM6CisgICAgICAgICAgICBldmVudF9kZWNsYXJhdGlvbnMuYXBwZW5kKHNlbGYuX2dl
bmVyYXRlX2Rpc3BhdGNoZXJfZGVjbGFyYXRpb25fZm9yX2V2ZW50KGV2ZW50LCBkb21haW4sIHVz
ZWRfZW51bV9uYW1lcykpCisKKyAgICAgICAgaGFuZGxlcl9hcmdzID0geworICAgICAgICAgICAg
J2NsYXNzQW5kRXhwb3J0TWFjcm8nOiAiICIuam9pbihjbGFzc0NvbXBvbmVudHMpLAorICAgICAg
ICAgICAgJ2RvbWFpbk5hbWUnOiBkb21haW4uZG9tYWluX25hbWUsCisgICAgICAgICAgICAnZXZl
bnREZWNsYXJhdGlvbnMnOiAiXG4iLmpvaW4oZXZlbnRfZGVjbGFyYXRpb25zKQorICAgICAgICB9
CisKKyAgICAgICAgcmV0dXJuIEdlbmVyYXRvci53cmFwX3dpdGhfZ3VhcmRfZm9yX2RvbWFpbihk
b21haW4sIFRlbXBsYXRlKFRlbXBsYXRlcy5Gcm9udGVuZERpc3BhdGNoZXJEb21haW5EaXNwYXRj
aGVyRGVjbGFyYXRpb24pLnN1YnN0aXR1dGUoTm9uZSwgKipoYW5kbGVyX2FyZ3MpKQorCisgICAg
ZGVmIF9nZW5lcmF0ZV9kaXNwYXRjaGVyX2RlY2xhcmF0aW9uX2Zvcl9ldmVudChzZWxmLCBldmVu
dCwgZG9tYWluLCB1c2VkX2VudW1fbmFtZXMpOgorICAgICAgICBmb3JtYWxfcGFyYW1ldGVycyA9
IFtdCisgICAgICAgIGxpbmVzID0gW10KKyAgICAgICAgZm9yIF9wYXJhbWV0ZXIgaW4gZXZlbnQu
ZXZlbnRfcGFyYW1ldGVyczoKKyAgICAgICAgICAgIGZvcm1hbF9wYXJhbWV0ZXJzLmFwcGVuZCgn
JXMgJXMnICUgKEdlbmVyYXRvci50eXBlX3N0cmluZ19mb3JfY2hlY2tlZF9mb3JtYWxfaW5fcGFy
YW1ldGVyKF9wYXJhbWV0ZXIpLCBfcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKSkKKyAgICAgICAg
ICAgIGlmIGlzaW5zdGFuY2UoX3BhcmFtZXRlci50eXBlLCBFbnVtVHlwZSkgYW5kIF9wYXJhbWV0
ZXIucGFyYW1ldGVyX25hbWUgbm90IGluIHVzZWRfZW51bV9uYW1lczoKKyAgICAgICAgICAgICAg
ICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYW5vbnltb3VzX2VudW1fZm9yX3BhcmFtZXRl
cihfcGFyYW1ldGVyLCBldmVudCkpCisgICAgICAgICAgICAgICAgdXNlZF9lbnVtX25hbWVzLmFk
ZChfcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKQorCisgICAgICAgIGxpbmVzLmFwcGVuZCgiICAg
IHZvaWQgJXMoJXMpOyIgJSAoZXZlbnQuZXZlbnRfbmFtZSwgIiwgIi5qb2luKGZvcm1hbF9wYXJh
bWV0ZXJzKSkpCisgICAgICAgIHJldHVybiAiXG4iLmpvaW4obGluZXMpCisKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRl
X2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9mcm9udGVuZF9kaXNwYXRj
aGVyX2ltcGxlbWVudGF0aW9uLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA3ZDM0MjU1YzFkZjEwZjdiODA1MmY0
NTA4ZWMzZjEyZDNhYzExODcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9mcm9udGVuZF9kaXNwYXRjaGVy
X2ltcGxlbWVudGF0aW9uLnB5CkBAIC0wLDAgKzEsMTMxIEBACisjIS91c3IvYmluL2VudiBweXRo
b24KKyMgQ29weXJpZ2h0IChjKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyMgQ29weXJpZ2h0IChjKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyMgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKwor
aW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBvcy5wYXRoCitpbXBvcnQgcmUKK2ltcG9ydCBzdHJpbmcK
KworZnJvbSBnZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvciwgdWNmaXJzdAorZnJvbSBzdHJpbmcg
aW1wb3J0IFRlbXBsYXRlCitmcm9tIGdlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IEdlbmVyYXRv
clRlbXBsYXRlcyBhcyBUZW1wbGF0ZXMKK2Zyb20gbW9kZWxzIGltcG9ydCBPYmplY3RUeXBlLCBB
cnJheVR5cGUKKworIyBVc2UgYSBnbG9iYWwgbG9nZ2VyLCB3aGljaCBub3JtYWxseSBvbmx5IGxv
Z3MgZXJyb3JzLgorbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2JhbCcpCisKKworY2xhc3Mg
RnJvbnRlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IoR2VuZXJhdG9yKToKKyAg
ICBkZWYgX19pbml0X18oc2VsZiwgbW9kZWwsIGlucHV0X2ZpbGVwYXRoKToKKyAgICAgICAgc2Vs
Zi5fbW9kZWwgPSBtb2RlbAorICAgICAgICBzZWxmLl9pbnB1dF9maWxlcGF0aCA9IGlucHV0X2Zp
bGVwYXRoCisKKyAgICBkZWYgbW9kZWwoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9tb2Rl
bAorCisgICAgZGVmIG91dHB1dF9maWxlbmFtZShzZWxmKToKKyAgICAgICAgcmV0dXJuICJJbnNw
ZWN0b3Ilc0Zyb250ZW5kRGlzcGF0Y2hlcnMuY3BwIiAlIHNlbGYubW9kZWwoKS5mcmFtZXdvcmsu
c2V0dGluZygncHJlZml4JykKKworICAgIGRlZiBnZW5lcmF0ZV9saWNlbnNlKHNlbGYpOgorICAg
ICAgICByZXR1cm4gVGVtcGxhdGUoVGVtcGxhdGVzLkNvcHlyaWdodEJsb2NrKS5zdWJzdGl0dXRl
KE5vbmUsIGlucHV0RmlsZW5hbWU9b3MucGF0aC5iYXNlbmFtZShzZWxmLl9pbnB1dF9maWxlcGF0
aCkpCisKKyAgICBkZWYgZ2VuZXJhdGVfb3V0cHV0KHNlbGYpOgorICAgICAgICBzZWNvbmRhcnlf
aGVhZGVycyA9IFsnPHd0Zi90ZXh0L0NTdHJpbmcuaD4nXQorCisgICAgICAgIHNlY3Rpb25zID0g
W10KKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfbGljZW5zZSgpKQorICAg
ICAgICBoZWFkZXJfYXJncyA9IHsKKyAgICAgICAgICAgICdwcmltYXJ5SW5jbHVkZSc6ICciSW5z
cGVjdG9yJXNGcm9udGVuZERpc3BhdGNoZXJzLmgiJyAlIHNlbGYubW9kZWwoKS5mcmFtZXdvcmsu
c2V0dGluZygncHJlZml4JyksCisgICAgICAgICAgICAnc2Vjb25kYXJ5SW5jbHVkZXMnOiAiXG4i
LmpvaW4oWycjaW5jbHVkZSAlcycgJSBoZWFkZXIgZm9yIGhlYWRlciBpbiBzZWNvbmRhcnlfaGVh
ZGVyc10pLAorICAgICAgICAgICAgJ2lucHV0RmlsZW5hbWUnOiBzZWxmLl9pbnB1dF9maWxlcGF0
aAorICAgICAgICB9CisKKyAgICAgICAgZG9tYWlucyA9IHNlbGYuZG9tYWluc190b19nZW5lcmF0
ZSgpCisgICAgICAgIGRvbWFpbnMgPSBmaWx0ZXIobGFtYmRhIGRvbWFpbjogbGVuKGRvbWFpbi5l
dmVudHMpID4gMCwgZG9tYWlucykKKworICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUo
VGVtcGxhdGVzLkNwcEltcGxlbWVudGF0aW9uUHJlbHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhl
YWRlcl9hcmdzKSkKKyAgICAgICAgc2VjdGlvbnMuZXh0ZW5kKG1hcChzZWxmLl9nZW5lcmF0ZV9k
aXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uc19mb3JfZG9tYWluLCBkb21haW5zKSkKKyAgICAgICAg
c2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKFRlbXBsYXRlcy5DcHBJbXBsZW1lbnRhdGlvblBvc3Rs
dWRlKS5zdWJzdGl0dXRlKE5vbmUsICoqaGVhZGVyX2FyZ3MpKQorICAgICAgICByZXR1cm4gIlxu
XG4iLmpvaW4oc2VjdGlvbnMpCisKKyAgICAjIFByaXZhdGUgbWV0aG9kcy4KKworICAgIGRlZiBf
Z2VuZXJhdGVfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbnNfZm9yX2RvbWFpbihzZWxmLCBkb21h
aW4pOgorICAgICAgICBpbXBsZW1lbnRhdGlvbnMgPSBbXQorICAgICAgICBmb3IgX2V2ZW50IGlu
IGRvbWFpbi5ldmVudHM6CisgICAgICAgICAgICBpbXBsZW1lbnRhdGlvbnMuYXBwZW5kKHNlbGYu
X2dlbmVyYXRlX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb25fZm9yX2V2ZW50KF9ldmVudCwgZG9t
YWluKSkKKworICAgICAgICByZXR1cm4gR2VuZXJhdG9yLndyYXBfd2l0aF9ndWFyZF9mb3JfZG9t
YWluKGRvbWFpbiwgIlxuXG4iLmpvaW4oaW1wbGVtZW50YXRpb25zKSkKKworICAgIGRlZiBfZ2Vu
ZXJhdGVfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbl9mb3JfZXZlbnQoc2VsZiwgZXZlbnQsIGRv
bWFpbik6CisgICAgICAgIGxpbmVzID0gW10KKyAgICAgICAgcGFyYW1ldGVyX2Fzc2lnbm1lbnRz
ID0gW10KKyAgICAgICAgZm9ybWFsX3BhcmFtZXRlcnMgPSBbXQorCisgICAgICAgIGZvciBfcGFy
YW1ldGVyIGluIGV2ZW50LmV2ZW50X3BhcmFtZXRlcnM6CisKKyAgICAgICAgICAgIHBhcmFtZXRl
cl92YWx1ZSA9IF9wYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUKKyAgICAgICAgICAgIGlmIF9wYXJh
bWV0ZXIuaXNfb3B0aW9uYWwgYW5kIG5vdCBHZW5lcmF0b3Iuc2hvdWxkX3Bhc3NfYnlfY29weV9m
b3JfcmV0dXJuX3R5cGUoX3BhcmFtZXRlci50eXBlKToKKyAgICAgICAgICAgICAgICBwYXJhbWV0
ZXJfdmFsdWUgPSAnKicgKyBwYXJhbWV0ZXJfdmFsdWUKKyAgICAgICAgICAgIGlmIF9wYXJhbWV0
ZXIudHlwZS5pc19lbnVtKCk6CisgICAgICAgICAgICAgICAgZnJhbWV3b3JrX3ByZWZpeCA9IHNl
bGYubW9kZWwoKS5mcmFtZXdvcmsuc2V0dGluZygncHJlZml4JykKKyAgICAgICAgICAgICAgICBw
YXJhbWV0ZXJfdmFsdWUgPSAnSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Z2V0JXNFbnVtQ29uc3Rh
bnRWYWx1ZSglcyknICUgKGZyYW1ld29ya19wcmVmaXgsIHBhcmFtZXRlcl92YWx1ZSkKKworICAg
ICAgICAgICAgcGFyYW1ldGVyX2FyZ3MgPSB7CisgICAgICAgICAgICAgICAgJ3BhcmFtZXRlclR5
cGUnOiBHZW5lcmF0b3IudHlwZV9zdHJpbmdfZm9yX3N0YWNrX291dF9wYXJhbWV0ZXIoX3BhcmFt
ZXRlciksCisgICAgICAgICAgICAgICAgJ3BhcmFtZXRlck5hbWUnOiBfcGFyYW1ldGVyLnBhcmFt
ZXRlcl9uYW1lLAorICAgICAgICAgICAgICAgICdwYXJhbWV0ZXJWYWx1ZSc6IHBhcmFtZXRlcl92
YWx1ZSwKKyAgICAgICAgICAgICAgICAna2V5ZWRTZXRNZXRob2QnOiBHZW5lcmF0b3Iua2V5ZWRf
c2V0X21ldGhvZF9mb3JfdHlwZShfcGFyYW1ldGVyLnR5cGUpLAorICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBpZiBfcGFyYW1ldGVyLmlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAgIHBh
cmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICBpZiAoJShwYXJhbWV0ZXJOYW1lKXMpJyAl
IHBhcmFtZXRlcl9hcmdzKQorICAgICAgICAgICAgICAgIHBhcmFtZXRlcl9hc3NpZ25tZW50cy5h
cHBlbmQoJyAgICAgICAgcGFyYW1zT2JqZWN0LT4lKGtleWVkU2V0TWV0aG9kKXMoQVNDSUlMaXRl
cmFsKCIlKHBhcmFtZXRlck5hbWUpcyIpLCAlKHBhcmFtZXRlclZhbHVlKXMpOycgJSBwYXJhbWV0
ZXJfYXJncykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcGFyYW1ldGVyX2Fz
c2lnbm1lbnRzLmFwcGVuZCgnICAgIHBhcmFtc09iamVjdC0+JShrZXllZFNldE1ldGhvZClzKEFT
Q0lJTGl0ZXJhbCgiJShwYXJhbWV0ZXJOYW1lKXMiKSwgJShwYXJhbWV0ZXJWYWx1ZSlzKTsnICUg
cGFyYW1ldGVyX2FyZ3MpCisKKyAgICAgICAgICAgIGZvcm1hbF9wYXJhbWV0ZXJzLmFwcGVuZCgn
JXMgJXMnICUgKEdlbmVyYXRvci50eXBlX3N0cmluZ19mb3JfY2hlY2tlZF9mb3JtYWxfaW5fcGFy
YW1ldGVyKF9wYXJhbWV0ZXIpLCBfcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKSkKKworICAgICAg
ICBldmVudF9hcmdzID0geworICAgICAgICAgICAgJ2RvbWFpbk5hbWUnOiBkb21haW4uZG9tYWlu
X25hbWUsCisgICAgICAgICAgICAnZXZlbnROYW1lJzogZXZlbnQuZXZlbnRfbmFtZSwKKyAgICAg
ICAgICAgICdmb3JtYWxQYXJhbWV0ZXJzJzogIiwgIi5qb2luKGZvcm1hbF9wYXJhbWV0ZXJzKQor
ICAgICAgICB9CisKKyAgICAgICAgbGluZXMuYXBwZW5kKCd2b2lkIEluc3BlY3RvciUoZG9tYWlu
TmFtZSlzRnJvbnRlbmREaXNwYXRjaGVyOjolKGV2ZW50TmFtZSlzKCUoZm9ybWFsUGFyYW1ldGVy
cylzKScgJSBldmVudF9hcmdzKQorICAgICAgICBsaW5lcy5hcHBlbmQoJ3snKQorICAgICAgICBs
aW5lcy5hcHBlbmQoJyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBqc29uTWVzc2FnZSA9IElu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7JykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAganNv
bk1lc3NhZ2UtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoIm1ldGhvZCIpLCBBU0NJSUxpdGVyYWwo
IiUoZG9tYWluTmFtZSlzLiUoZXZlbnROYW1lKXMiKSk7JyAlIGV2ZW50X2FyZ3MpCisKKyAgICAg
ICAgaWYgbGVuKHBhcmFtZXRlcl9hc3NpZ25tZW50cykgPiAwOgorICAgICAgICAgICAgbGluZXMu
YXBwZW5kKCcgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSW5zcGVj
dG9yT2JqZWN0OjpjcmVhdGUoKTsnKQorICAgICAgICAgICAgbGluZXMuZXh0ZW5kKHBhcmFtZXRl
cl9hc3NpZ25tZW50cykKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGpzb25NZXNzYWdl
LT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJwYXJhbXMiKSwgcGFyYW1zT2JqZWN0KTsnKQorCisg
ICAgICAgIGxpbmVzLmFwcGVuZCgnJykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgbV9pbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChqc29uTWVzc2FnZS0+
dG9KU09OU3RyaW5nKCkpOycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnfScpCisgICAgICAgIHJl
dHVybiAiXG4iLmpvaW4obGluZXMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV90eXBlX2J1aWxkZXJfaGVhZGVyLnB5
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJh
dGVfdHlwZV9idWlsZGVyX2hlYWRlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zZThkOTU4Yzg1MDA3MzU2MDk5
NGRlOGYyMzUyOGVmYWYxZmU1M2MxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfdHlwZV9idWlsZGVyX2hl
YWRlci5weQpAQCAtMCwwICsxLDM1NyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIENvcHly
aWdodCAoYykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdo
dCAoYykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisjIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisKK2ltcG9ydCBsb2dn
aW5nCitpbXBvcnQgb3MucGF0aAoraW1wb3J0IHJlCitpbXBvcnQgc3RyaW5nCisKK2Zyb20gZ2Vu
ZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IsIHVjZmlyc3QKK2Zyb20gbW9kZWxzIGltcG9ydCBFbnVt
VHlwZSwgT2JqZWN0VHlwZSwgUHJpbWl0aXZlVHlwZSwgQWxpYXNlZFR5cGUsIEFycmF5VHlwZSwg
RnJhbWV3b3JrcworZnJvbSBzdHJpbmcgaW1wb3J0IFRlbXBsYXRlCitmcm9tIGdlbmVyYXRvcl90
ZW1wbGF0ZXMgaW1wb3J0IEdlbmVyYXRvclRlbXBsYXRlcyBhcyBUZW1wbGF0ZXMKKworIyBVc2Ug
YSBnbG9iYWwgbG9nZ2VyLCB3aGljaCBub3JtYWxseSBvbmx5IGxvZ3MgZXJyb3JzLgorIyBJdCBj
YW4gYmUgY29uZmlndXJlZCB0byBsb2cgZGVidWcgbWVzc2FnZXMgZnJvbSB0aGUgQ0xJLgorbG9n
ID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2JhbCcpCisKK2NsYXNzIFR5cGVCdWlsZGVySGVhZGVy
R2VuZXJhdG9yKEdlbmVyYXRvcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1
dF9maWxlcGF0aCk6CisgICAgICAgIHNlbGYuX21vZGVsID0gbW9kZWwKKyAgICAgICAgc2VsZi5f
aW5wdXRfZmlsZXBhdGggPSBpbnB1dF9maWxlcGF0aAorCisgICAgZGVmIG1vZGVsKHNlbGYpOgor
ICAgICAgICByZXR1cm4gc2VsZi5fbW9kZWwKKworICAgIGRlZiBvdXRwdXRfZmlsZW5hbWUoc2Vs
Zik6CisgICAgICAgIHJldHVybiAiSW5zcGVjdG9yJXNUeXBlQnVpbGRlcnMuaCIgJSBzZWxmLm1v
ZGVsKCkuZnJhbWV3b3JrLnNldHRpbmcoJ3ByZWZpeCcpCisKKyAgICBkZWYgZ2VuZXJhdGVfbGlj
ZW5zZShzZWxmKToKKyAgICAgICAgcmV0dXJuIFRlbXBsYXRlKFRlbXBsYXRlcy5Db3B5cmlnaHRC
bG9jaykuc3Vic3RpdHV0ZShOb25lLCBpbnB1dEZpbGVuYW1lPW9zLnBhdGguYmFzZW5hbWUoc2Vs
Zi5faW5wdXRfZmlsZXBhdGgpKQorCisgICAgZGVmIGdlbmVyYXRlX291dHB1dChzZWxmKToKKyAg
ICAgICAgZG9tYWlucyA9IHNlbGYuZG9tYWluc190b19nZW5lcmF0ZSgpCisgICAgICAgIHNlbGYu
Y2FsY3VsYXRlX3R5cGVzX3JlcXVpcmluZ19zaGFwZV9hc3NlcnRpb25zKGRvbWFpbnMpCisKKyAg
ICAgICAgaGVhZGVycyA9IHNldChbCisgICAgICAgICAgICAnPGluc3BlY3Rvci9JbnNwZWN0b3JU
eXBlQnVpbGRlci5oPicsCisgICAgICAgICAgICAnPHd0Zi9Bc3NlcnRpb25zLmg+JywKKyAgICAg
ICAgICAgICc8d3RmL1Bhc3NSZWZQdHIuaD4nCisgICAgICAgIF0pCisKKyAgICAgICAgaWYgc2Vs
Zi5tb2RlbCgpLmZyYW1ld29yayBpcyBub3QgRnJhbWV3b3Jrcy5KYXZhU2NyaXB0Q29yZToKKyAg
ICAgICAgICAgIGhlYWRlcnMuYWRkKCc8aW5zcGVjdG9yL0luc3BlY3RvckpTVHlwZUJ1aWxkZXJz
Lmg+JykKKworICAgICAgICBleHBvcnRfbWFjcm8gPSBzZWxmLm1vZGVsKCkuZnJhbWV3b3JrLnNl
dHRpbmcoJ2V4cG9ydF9tYWNybycsIE5vbmUpCisgICAgICAgIGZyYW1ld29ya19wcmVmaXggPSBz
ZWxmLm1vZGVsKCkuZnJhbWV3b3JrLnNldHRpbmcoJ3ByZWZpeCcpCisKKyAgICAgICAgc2VjdGlv
bnMgPSBbXQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5nZW5lcmF0ZV9saWNlbnNlKCkp
CisgICAgICAgIGhlYWRlcl9hcmdzID0geworICAgICAgICAgICAgJ2hlYWRlckd1YXJkU3RyaW5n
JzogcmUuc3ViKCdbLS4vXScsICdfJywgc2VsZi5vdXRwdXRfZmlsZW5hbWUoKSksCisgICAgICAg
ICAgICAnaW5jbHVkZXMnOiAnXG4nLmpvaW4oWycjaW5jbHVkZSAnICsgaGVhZGVyIGZvciBoZWFk
ZXIgaW4gc29ydGVkKGhlYWRlcnMpXSksCisgICAgICAgICAgICAndHlwZWRlZnMnOiAnJywKKyAg
ICAgICAgICAgICdpbnB1dEZpbGVuYW1lJzogc2VsZi5faW5wdXRfZmlsZXBhdGgKKyAgICAgICAg
fQorCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMuQ3BwSGVhZGVy
UHJlbHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkKKyAgICAgICAgc2VjdGlv
bnMuYXBwZW5kKCduYW1lc3BhY2UgVHlwZUJ1aWxkZXIgeycpCisgICAgICAgIHNlY3Rpb25zLmFw
cGVuZChzZWxmLl9nZW5lcmF0ZV9mb3J3YXJkX2RlY2xhcmF0aW9ucyhkb21haW5zKSkKKyAgICAg
ICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX3R5cGVkZWZzKGRvbWFpbnMpKQorICAg
ICAgICByZXR1cm5fdHlwZSA9IFsnU3RyaW5nJ10KKyAgICAgICAgaWYgZXhwb3J0X21hY3JvIGlz
IG5vdCBOb25lOgorICAgICAgICAgICAgcmV0dXJuX3R5cGVbOjBdID0gW2V4cG9ydF9tYWNyb10K
KworICAgICAgICBzZWN0aW9ucy5hcHBlbmQoJyVzIGdldCVzRW51bUNvbnN0YW50VmFsdWUoaW50
IGNvZGUpOycgJSAoJyAnLmpvaW4ocmV0dXJuX3R5cGUpLCBmcmFtZXdvcmtfcHJlZml4KSkKKwor
ICAgICAgICBzZWN0aW9ucy5hcHBlbmQoJ1xuJy5qb2luKFsKKyAgICAgICAgICAgICd0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiAlcyBnZXQlc0VudW1Db25zdGFudFZhbHVlKFQgZW51bVZhbHVlKScgJSAo
JyAnLmpvaW4ocmV0dXJuX3R5cGUpLCBmcmFtZXdvcmtfcHJlZml4KSwKKyAgICAgICAgICAgICd7
JywKKyAgICAgICAgICAgICcgICAgcmV0dXJuIGdldCVzRW51bUNvbnN0YW50VmFsdWUoc3RhdGlj
X2Nhc3Q8aW50PihlbnVtVmFsdWUpKTsnICUgZnJhbWV3b3JrX3ByZWZpeCwKKyAgICAgICAgICAg
ICd9J10pKQorCisgICAgICAgIGJ1aWxkZXJfc2VjdGlvbnMgPSBtYXAoc2VsZi5fZ2VuZXJhdGVf
YnVpbGRlcnNfZm9yX2RvbWFpbiwgZG9tYWlucykKKyAgICAgICAgc2VjdGlvbnMuZXh0ZW5kKGZp
bHRlcihsYW1iZGEgc2VjdGlvbjogbGVuKHNlY3Rpb24pID4gMCwgYnVpbGRlcl9zZWN0aW9ucykp
CisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9mb3J3YXJkX2RlY2xhcmF0
aW9uc19mb3JfYmluZGluZ190cmFpdHMoKSkKKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKCd9IC8v
IG5hbWVzcGFjZSBUeXBlQnVpbGRlcicpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0
ZShUZW1wbGF0ZXMuQ3BwSGVhZGVyUG9zdGx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJf
YXJncykpCisgICAgICAgIHJldHVybiAiXG5cbiIuam9pbihzZWN0aW9ucykKKworICAgICMgUHJp
dmF0ZSBtZXRob2RzLgorCisgICAgIyBGSVhNRTogbW92ZSBidWlsZGVycyBvdXQgb2YgY2xhc3Nl
cywgdW5jb21tZW50IGZvcndhcmQgZGVjbGFyYXRpb24KKworICAgIGRlZiBfZ2VuZXJhdGVfZm9y
d2FyZF9kZWNsYXJhdGlvbnMoc2VsZiwgZG9tYWlucyk6CisgICAgICAgIHNlY3Rpb25zID0gW10K
KworICAgICAgICBmb3IgZG9tYWluIGluIGRvbWFpbnM6CisgICAgICAgICAgICBkZWNsYXJhdGlv
bl90eXBlcyA9IFtkZWNsLnR5cGUgZm9yIGRlY2wgaW4gZG9tYWluLnR5cGVfZGVjbGFyYXRpb25z
XQorICAgICAgICAgICAgb2JqZWN0X3R5cGVzID0gZmlsdGVyKGxhbWJkYSBfdHlwZTogaXNpbnN0
YW5jZShfdHlwZSwgT2JqZWN0VHlwZSksIGRlY2xhcmF0aW9uX3R5cGVzKQorICAgICAgICAgICAg
ZW51bV90eXBlcyA9IGZpbHRlcihsYW1iZGEgX3R5cGU6IGlzaW5zdGFuY2UoX3R5cGUsIEVudW1U
eXBlKSwgZGVjbGFyYXRpb25fdHlwZXMpCisgICAgICAgICAgICBpZiBsZW4ob2JqZWN0X3R5cGVz
KSArIGxlbihlbnVtX3R5cGVzKSA9PSAwOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAg
ICAgICAgICAgIGRvbWFpbl9saW5lcyA9IFtdCisgICAgICAgICAgICBkb21haW5fbGluZXMuYXBw
ZW5kKCduYW1lc3BhY2UgJXMgeycgJSBkb21haW4uZG9tYWluX25hbWUpCisKKyAgICAgICAgICAg
IG9iamVjdF90eXBlX25hbWVzID0gW190eXBlLnJhd19uYW1lKCkgZm9yIF90eXBlIGluIG9iamVj
dF90eXBlc10KKyAgICAgICAgICAgIGVudW1fdHlwZV9uYW1lcyA9IFtfdHlwZS5yYXdfbmFtZSgp
IGZvciBfdHlwZSBpbiBlbnVtX3R5cGVzXQorCisgICAgICAgICAgICAjIEZvcndhcmQtZGVjbGFy
ZSBhbGwgY2xhc3NlcyBzbyB0aGUgdHlwZSBidWlsZGVycyB3b24ndCBicmVhayBpZiByZWFycmFu
Z2VkLgorICAgICAgICAgICAgZG9tYWluX2xpbmVzLmV4dGVuZCgnY2xhc3MgJXM7JyAlIG5hbWUg
Zm9yIG5hbWUgaW4gc29ydGVkKG9iamVjdF90eXBlX25hbWVzKSkKKyAgICAgICAgICAgIGRvbWFp
bl9saW5lcy5leHRlbmQoJ2VudW0gY2xhc3MgJXM7JyAlIG5hbWUgZm9yIG5hbWUgaW4gc29ydGVk
KGVudW1fdHlwZV9uYW1lcykpCisgICAgICAgICAgICBkb21haW5fbGluZXMuYXBwZW5kKCd9IC8v
ICVzJyAlIGRvbWFpbi5kb21haW5fbmFtZSkKKyAgICAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChH
ZW5lcmF0b3Iud3JhcF93aXRoX2d1YXJkX2Zvcl9kb21haW4oZG9tYWluLCAnXG4nLmpvaW4oZG9t
YWluX2xpbmVzKSkpCisKKyAgICAgICAgaWYgbGVuKHNlY3Rpb25zKSA9PSAwOgorICAgICAgICAg
ICAgcmV0dXJuICcnCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gIiIiLy8gRm9y
d2FyZCBkZWNsYXJhdGlvbnMuCislcworLy8gRW5kIG9mIGZvcndhcmQgZGVjbGFyYXRpb25zLgor
IiIiICUgJ1xuXG4nLmpvaW4oc2VjdGlvbnMpCisKKyAgICBkZWYgX2dlbmVyYXRlX3R5cGVkZWZz
KHNlbGYsIGRvbWFpbnMpOgorICAgICAgICBzZWN0aW9ucyA9IG1hcChzZWxmLl9nZW5lcmF0ZV90
eXBlZGVmc19mb3JfZG9tYWluLCBkb21haW5zKQorICAgICAgICBzZWN0aW9ucyA9IGZpbHRlcihs
YW1iZGEgdGV4dDogbGVuKHRleHQpID4gMCwgc2VjdGlvbnMpCisKKyAgICAgICAgaWYgbGVuKHNl
Y3Rpb25zKSA9PSAwOgorICAgICAgICAgICAgcmV0dXJuICcnCisgICAgICAgIGVsc2U6CisgICAg
ICAgICAgICByZXR1cm4gIiIiLy8gVHlwZWRlZnMuCislcworLy8gRW5kIG9mIHR5cGVkZWZzLiIi
IiAlICdcblxuJy5qb2luKHNlY3Rpb25zKQorCisgICAgZGVmIF9nZW5lcmF0ZV90eXBlZGVmc19m
b3JfZG9tYWluKHNlbGYsIGRvbWFpbik6CisgICAgICAgIHByaW1pdGl2ZV9kZWNsYXJhdGlvbnMg
PSBmaWx0ZXIobGFtYmRhIGRlY2w6IGlzaW5zdGFuY2UoZGVjbC50eXBlLCBBbGlhc2VkVHlwZSks
IGRvbWFpbi50eXBlX2RlY2xhcmF0aW9ucykKKyAgICAgICAgaWYgbGVuKHByaW1pdGl2ZV9kZWNs
YXJhdGlvbnMpID09IDA6CisgICAgICAgICAgICByZXR1cm4gJycKKworICAgICAgICBzZWN0aW9u
cyA9IFtdCisgICAgICAgIGZvciBkZWNsYXJhdGlvbiBpbiBwcmltaXRpdmVfZGVjbGFyYXRpb25z
OgorICAgICAgICAgICAgcHJpbWl0aXZlX25hbWUgPSBHZW5lcmF0b3IuY3BwX25hbWVfZm9yX3By
aW1pdGl2ZV90eXBlKGRlY2xhcmF0aW9uLnR5cGUuYWxpYXNlZF90eXBlKQorICAgICAgICAgICAg
dHlwZWRlZl9saW5lcyA9IFtdCisgICAgICAgICAgICBpZiBsZW4oZGVjbGFyYXRpb24uZGVzY3Jp
cHRpb24pID4gMDoKKyAgICAgICAgICAgICAgICB0eXBlZGVmX2xpbmVzLmFwcGVuZCgnLyogJXMg
Ki8nICUgZGVjbGFyYXRpb24uZGVzY3JpcHRpb24pCisgICAgICAgICAgICB0eXBlZGVmX2xpbmVz
LmFwcGVuZCgndHlwZWRlZiAlcyAlczsnICUgKHByaW1pdGl2ZV9uYW1lLCBkZWNsYXJhdGlvbi50
eXBlX25hbWUpKQorICAgICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKCdcbicuam9pbih0eXBlZGVm
X2xpbmVzKSkKKworICAgICAgICBsaW5lcyA9IFtdCisgICAgICAgIGxpbmVzLmFwcGVuZCgnbmFt
ZXNwYWNlICVzIHsnICUgZG9tYWluLmRvbWFpbl9uYW1lKQorICAgICAgICBsaW5lcy5hcHBlbmQo
J1xuXG4nLmpvaW4oc2VjdGlvbnMpKQorICAgICAgICBsaW5lcy5hcHBlbmQoJ30gLy8gJXMnICUg
ZG9tYWluLmRvbWFpbl9uYW1lKQorICAgICAgICByZXR1cm4gR2VuZXJhdG9yLndyYXBfd2l0aF9n
dWFyZF9mb3JfZG9tYWluKGRvbWFpbiwgJ1xuJy5qb2luKGxpbmVzKSkKKworICAgIGRlZiBfZ2Vu
ZXJhdGVfYnVpbGRlcnNfZm9yX2RvbWFpbihzZWxmLCBkb21haW4pOgorICAgICAgICBzZWN0aW9u
cyA9IFtdCisKKyAgICAgICAgZm9yIHR5cGVfZGVjbGFyYXRpb24gaW4gZG9tYWluLnR5cGVfZGVj
bGFyYXRpb25zOgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh0eXBlX2RlY2xhcmF0aW9uLnR5
cGUsIEVudW1UeXBlKToKKyAgICAgICAgICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5fZ2Vu
ZXJhdGVfc3RydWN0X2Zvcl9lbnVtX2RlY2xhcmF0aW9uKHR5cGVfZGVjbGFyYXRpb24pKQorICAg
ICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHR5cGVfZGVjbGFyYXRpb24udHlwZSwgT2JqZWN0VHlw
ZSk6CisgICAgICAgICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2NsYXNz
X2Zvcl9vYmplY3RfZGVjbGFyYXRpb24odHlwZV9kZWNsYXJhdGlvbiwgZG9tYWluKSkKKworICAg
ICAgICBzZWN0aW9ucyA9IGZpbHRlcihsYW1iZGEgc2VjdGlvbjogbGVuKHNlY3Rpb24pID4gMCwg
c2VjdGlvbnMpCisgICAgICAgIGlmIGxlbihzZWN0aW9ucykgPT0gMDoKKyAgICAgICAgICAgIHJl
dHVybiAnJworCisgICAgICAgIGxpbmVzID0gW10KKyAgICAgICAgbGluZXMuYXBwZW5kKCduYW1l
c3BhY2UgJXMgeycgJSBkb21haW4uZG9tYWluX25hbWUpCisgICAgICAgIGxpbmVzLmFwcGVuZCgn
XG4nLmpvaW4oc2VjdGlvbnMpKQorICAgICAgICBsaW5lcy5hcHBlbmQoJ30gLy8gJXMnICUgZG9t
YWluLmRvbWFpbl9uYW1lKQorICAgICAgICByZXR1cm4gR2VuZXJhdG9yLndyYXBfd2l0aF9ndWFy
ZF9mb3JfZG9tYWluKGRvbWFpbiwgJ1xuJy5qb2luKGxpbmVzKSkKKworICAgIGRlZiBfZ2VuZXJh
dGVfY2xhc3NfZm9yX29iamVjdF9kZWNsYXJhdGlvbihzZWxmLCB0eXBlX2RlY2xhcmF0aW9uLCBk
b21haW4pOgorICAgICAgICBpZiBsZW4odHlwZV9kZWNsYXJhdGlvbi50eXBlX21lbWJlcnMpID09
IDA6CisgICAgICAgICAgICByZXR1cm4gJycKKworICAgICAgICBlbnVtX21lbWJlcnMgPSBmaWx0
ZXIobGFtYmRhIG1lbWJlcjogaXNpbnN0YW5jZShtZW1iZXIudHlwZSwgRW51bVR5cGUpIGFuZCBt
ZW1iZXIudHlwZS5pc19hbm9ueW1vdXMsIHR5cGVfZGVjbGFyYXRpb24udHlwZV9tZW1iZXJzKQor
ICAgICAgICByZXF1aXJlZF9tZW1iZXJzID0gZmlsdGVyKGxhbWJkYSBtZW1iZXI6IG5vdCBtZW1i
ZXIuaXNfb3B0aW9uYWwsIHR5cGVfZGVjbGFyYXRpb24udHlwZV9tZW1iZXJzKQorICAgICAgICBv
cHRpb25hbF9tZW1iZXJzID0gZmlsdGVyKGxhbWJkYSBtZW1iZXI6IG1lbWJlci5pc19vcHRpb25h
bCwgdHlwZV9kZWNsYXJhdGlvbi50eXBlX21lbWJlcnMpCisgICAgICAgIG9iamVjdF9uYW1lID0g
dHlwZV9kZWNsYXJhdGlvbi50eXBlX25hbWUKKworICAgICAgICBsaW5lcyA9IFtdCisgICAgICAg
IGlmIGxlbih0eXBlX2RlY2xhcmF0aW9uLmRlc2NyaXB0aW9uKSA+IDA6CisgICAgICAgICAgICBs
aW5lcy5hcHBlbmQoJy8qICVzICovJyAlIHR5cGVfZGVjbGFyYXRpb24uZGVzY3JpcHRpb24pCisg
ICAgICAgIGJhc2VfY2xhc3MgPSAnSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QnCisgICAgICAg
IGlmIG5vdCBHZW5lcmF0b3IudHlwZV9oYXNfb3Blbl9maWVsZHModHlwZV9kZWNsYXJhdGlvbi50
eXBlKToKKyAgICAgICAgICAgIGJhc2VfY2xhc3MgPSBiYXNlX2NsYXNzICsgJ0Jhc2UnCisgICAg
ICAgIGxpbmVzLmFwcGVuZCgnY2xhc3MgJXMgOiBwdWJsaWMgJXMgeycgJSAob2JqZWN0X25hbWUs
IGJhc2VfY2xhc3MpKQorICAgICAgICBsaW5lcy5hcHBlbmQoJ3B1YmxpYzonKQorICAgICAgICBm
b3IgZW51bV9tZW1iZXIgaW4gZW51bV9tZW1iZXJzOgorICAgICAgICAgICAgbGluZXMuYXBwZW5k
KCcgICAgLy8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSBcJyVzXCcgd2hpbGUgZ2VuZXJhdGlu
ZyAlcy4nICUgKGVudW1fbWVtYmVyLm1lbWJlcl9uYW1lLCBvYmplY3RfbmFtZSkpCisgICAgICAg
ICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfc3RydWN0X2Zvcl9hbm9ueW1vdXNfZW51
bV9tZW1iZXIoZW51bV9tZW1iZXIpKQorICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJh
dGVfYnVpbGRlcl9zdGF0ZV9lbnVtKHR5cGVfZGVjbGFyYXRpb24pKQorCisgICAgICAgIGNvbnN0
cnVjdG9yX2V4YW1wbGUgPSBbXQorICAgICAgICBjb25zdHJ1Y3Rvcl9leGFtcGxlLmFwcGVuZCgn
ICAgICAqIFJlZlB0cjwlcz4gcmVzdWx0ID0gJXM6OmNyZWF0ZSgpJyAlIChvYmplY3RfbmFtZSwg
b2JqZWN0X25hbWUpKQorICAgICAgICBmb3IgbWVtYmVyIGluIHJlcXVpcmVkX21lbWJlcnM6Cisg
ICAgICAgICAgICBjb25zdHJ1Y3Rvcl9leGFtcGxlLmFwcGVuZCgnICAgICAqICAgICAuc2V0JXMo
Li4uKScgJSB1Y2ZpcnN0KG1lbWJlci5tZW1iZXJfbmFtZSkpCisKKyAgICAgICAgYnVpbGRlcl9h
cmdzID0geworICAgICAgICAgICAgJ29iamVjdFR5cGUnOiBvYmplY3RfbmFtZSwKKyAgICAgICAg
ICAgICdjb25zdHJ1Y3RvckV4YW1wbGUnOiAnXG4nLmpvaW4oY29uc3RydWN0b3JfZXhhbXBsZSkg
KyAnOycsCisgICAgICAgIH0KKworICAgICAgICBsaW5lcy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxh
dGVzLlR5cGVCdWlsZGVyRGVjbGFyYXRpb25QcmVsdWRlKS5zdWJzdGl0dXRlKE5vbmUsICoqYnVp
bGRlcl9hcmdzKSkKKyAgICAgICAgZm9yIHR5cGVfbWVtYmVyIGluIHJlcXVpcmVkX21lbWJlcnM6
CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYnVpbGRlcl9zZXR0ZXJf
Zm9yX21lbWJlcih0eXBlX21lbWJlciwgZG9tYWluKSkKKyAgICAgICAgbGluZXMuYXBwZW5kKFRl
bXBsYXRlKFRlbXBsYXRlcy5UeXBlQnVpbGRlckRlY2xhcmF0aW9uUG9zdGx1ZGUpLnN1YnN0aXR1
dGUoTm9uZSwgKipidWlsZGVyX2FyZ3MpKQorICAgICAgICBmb3IgbWVtYmVyIGluIG9wdGlvbmFs
X21lbWJlcnM6CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfdW5jaGVj
a2VkX3NldHRlcl9mb3JfbWVtYmVyKG1lbWJlciwgZG9tYWluKSkKKworICAgICAgICBpZiBHZW5l
cmF0b3IudHlwZV9oYXNfb3Blbl9maWVsZHModHlwZV9kZWNsYXJhdGlvbi50eXBlKToKKyAgICAg
ICAgICAgIGxpbmVzLmFwcGVuZCgnJykKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIC8v
IFByb3BlcnR5IG5hbWVzIGZvciB0eXBlIGdlbmVyYXRlZCBhcyBvcGVuLicpCisgICAgICAgICAg
ICBmb3IgdHlwZV9tZW1iZXIgaW4gdHlwZV9kZWNsYXJhdGlvbi50eXBlX21lbWJlcnM6CisgICAg
ICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgc3RhdGljIGNvbnN0IGNoYXIqICVzOycgJSB1
Y2ZpcnN0KHR5cGVfbWVtYmVyLm1lbWJlcl9uYW1lKSkKKworICAgICAgICBsaW5lcy5hcHBlbmQo
J307JykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcnKQorICAgICAgICByZXR1cm4gJ1xuJy5qb2lu
KGxpbmVzKQorCisgICAgZGVmIF9nZW5lcmF0ZV9zdHJ1Y3RfZm9yX2VudW1fZGVjbGFyYXRpb24o
c2VsZiwgZW51bV9kZWNsYXJhdGlvbik6CisgICAgICAgIGxpbmVzID0gW10KKyAgICAgICAgbGlu
ZXMuYXBwZW5kKCcvKiAlcyAqLycgJSBlbnVtX2RlY2xhcmF0aW9uLmRlc2NyaXB0aW9uKQorICAg
ICAgICBsaW5lcy5leHRlbmQoc2VsZi5fZ2VuZXJhdGVfc3RydWN0X2Zvcl9lbnVtX3R5cGUoZW51
bV9kZWNsYXJhdGlvbi50eXBlX25hbWUsIGVudW1fZGVjbGFyYXRpb24udHlwZSkpCisgICAgICAg
IHJldHVybiAnXG4nLmpvaW4obGluZXMpCisKKyAgICBkZWYgX2dlbmVyYXRlX3N0cnVjdF9mb3Jf
YW5vbnltb3VzX2VudW1fbWVtYmVyKHNlbGYsIGVudW1fbWVtYmVyKToKKyAgICAgICAgZGVmIGFw
cGx5X2luZGVudGF0aW9uKGxpbmUpOgorICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCgn
IycsICcvKicsICcqLycsICcvLycpKSBvciBsZW4obGluZSkgaXMgMDoKKyAgICAgICAgICAgICAg
ICByZXR1cm4gbGluZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4g
JyAgICAnICsgbGluZQorCisgICAgICAgIGluZGVudGVkX2xpbmVzID0gbWFwKGFwcGx5X2luZGVu
dGF0aW9uLCBzZWxmLl9nZW5lcmF0ZV9zdHJ1Y3RfZm9yX2VudW1fdHlwZShlbnVtX21lbWJlci5t
ZW1iZXJfbmFtZSwgZW51bV9tZW1iZXIudHlwZSkpCisgICAgICAgIHJldHVybiAnXG4nLmpvaW4o
aW5kZW50ZWRfbGluZXMpCisKKyAgICBkZWYgX2dlbmVyYXRlX3N0cnVjdF9mb3JfZW51bV90eXBl
KHNlbGYsIGVudW1fbmFtZSwgZW51bV90eXBlKToKKyAgICAgICAgbGluZXMgPSBbXQorICAgICAg
ICBlbnVtX25hbWUgPSB1Y2ZpcnN0KGVudW1fbmFtZSkKKyAgICAgICAgbGluZXMuYXBwZW5kKCdl
bnVtIGNsYXNzICVzIHsnICUgZW51bV9uYW1lKQorICAgICAgICBmb3IgZW51bV92YWx1ZSBpbiBl
bnVtX3R5cGUuZW51bV92YWx1ZXMoKToKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICVz
ID0gJXMsJyAlIChHZW5lcmF0b3Iuc3R5bGl6ZWRfbmFtZV9mb3JfZW51bV92YWx1ZShlbnVtX3Zh
bHVlKSwgc2VsZi5lbmNvZGluZ19mb3JfZW51bV92YWx1ZShlbnVtX3ZhbHVlKSkpCisgICAgICAg
IGxpbmVzLmFwcGVuZCgnfTsgLy8gZW51bSBjbGFzcyAlcycgJSBlbnVtX25hbWUpCisgICAgICAg
IHJldHVybiBsaW5lcyAgIyBUaGUgY2FsbGVyIG1heSB3YW50IHRvIGFkanVzdCBpbmRlbnRhdGlv
biwgc28gZG9uJ3Qgam9pbiB0aGVzZSBsaW5lcy4KKworICAgIGRlZiBfZ2VuZXJhdGVfYnVpbGRl
cl9zdGF0ZV9lbnVtKHNlbGYsIHR5cGVfZGVjbGFyYXRpb24pOgorICAgICAgICBsaW5lcyA9IFtd
CisgICAgICAgIHJlcXVpcmVkX21lbWJlcnMgPSBmaWx0ZXIobGFtYmRhIG1lbWJlcjogbm90IG1l
bWJlci5pc19vcHRpb25hbCwgdHlwZV9kZWNsYXJhdGlvbi50eXBlX21lbWJlcnMpCisgICAgICAg
IGVudW1fdmFsdWVzID0gW10KKworICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBlbnVtIHsnKQor
ICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgTm9GaWVsZHNTZXQgPSAwLCcpCisgICAgICAg
IGZvciBpIGluIHJhbmdlKGxlbihyZXF1aXJlZF9tZW1iZXJzKSk6CisgICAgICAgICAgICBlbnVt
X3ZhbHVlID0gIiVzU2V0IiAlIHVjZmlyc3QocmVxdWlyZWRfbWVtYmVyc1tpXS5tZW1iZXJfbmFt
ZSkKKyAgICAgICAgICAgIGVudW1fdmFsdWVzLmFwcGVuZChlbnVtX3ZhbHVlKQorICAgICAgICAg
ICAgbGluZXMuYXBwZW5kKCcgICAgICAgICVzID0gMSA8PCAlZCwnICUgKGVudW1fdmFsdWUsIGkp
KQorICAgICAgICBpZiBsZW4oZW51bV92YWx1ZXMpID4gMDoKKyAgICAgICAgICAgIGxpbmVzLmFw
cGVuZCgnICAgICAgICBBbGxGaWVsZHNTZXQgPSAoJXMpJyAlICcgfCAnLmpvaW4oZW51bV92YWx1
ZXMpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIEFs
bEZpZWxkc1NldCA9IDAnKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICB9OycpCisgICAgICAg
IGxpbmVzLmFwcGVuZCgnJykKKyAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKKworICAg
IGRlZiBfZ2VuZXJhdGVfYnVpbGRlcl9zZXR0ZXJfZm9yX21lbWJlcihzZWxmLCB0eXBlX21lbWJl
ciwgZG9tYWluKToKKyAgICAgICAgc2V0dGVyX2FyZ3MgPSB7CisgICAgICAgICAgICAnY2FtZWxO
YW1lJzogdWNmaXJzdCh0eXBlX21lbWJlci5tZW1iZXJfbmFtZSksCisgICAgICAgICAgICAnZnJh
bWV3b3JrUHJlZml4Jzogc2VsZi5tb2RlbCgpLmZyYW1ld29yay5zZXR0aW5nKCdwcmVmaXgnKSwK
KyAgICAgICAgICAgICdrZXllZFNldCc6IEdlbmVyYXRvci5rZXllZF9zZXRfbWV0aG9kX2Zvcl90
eXBlKHR5cGVfbWVtYmVyLnR5cGUpLAorICAgICAgICAgICAgJ25hbWUnOiB0eXBlX21lbWJlci5t
ZW1iZXJfbmFtZSwKKyAgICAgICAgICAgICdwYXJhbWV0ZXJUeXBlJzogR2VuZXJhdG9yLnR5cGVf
c3RyaW5nX2Zvcl90eXBlX21lbWJlcih0eXBlX21lbWJlcikKKyAgICAgICAgfQorCisgICAgICAg
IGxpbmVzID0gW10KKyAgICAgICAgbGluZXMuYXBwZW5kKCcnKQorICAgICAgICBsaW5lcy5hcHBl
bmQoJyAgICAgICAgQnVpbGRlcjxTVEFURSB8ICUoY2FtZWxOYW1lKXNTZXQ+JiBzZXQlKGNhbWVs
TmFtZSlzKCUocGFyYW1ldGVyVHlwZSlzIHZhbHVlKScgJSBzZXR0ZXJfYXJncykKKyAgICAgICAg
bGluZXMuYXBwZW5kKCcgICAgICAgIHsnKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiAlKGNhbWVsTmFtZSlzU2V0KSwgcHJvcGVydHlf
JShuYW1lKXNfYWxyZWFkeV9zZXQpOycgJSBzZXR0ZXJfYXJncykKKworICAgICAgICBpZiBpc2lu
c3RhbmNlKHR5cGVfbWVtYmVyLnR5cGUsIEVudW1UeXBlKToKKyAgICAgICAgICAgIGxpbmVzLmFw
cGVuZCgnICAgICAgICAgICAgbV9yZXN1bHQtPiUoa2V5ZWRTZXQpcyhBU0NJSUxpdGVyYWwoIiUo
bmFtZSlzIiksIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OmdldCUoZnJhbWV3b3JrUHJlZml4KXNF
bnVtQ29uc3RhbnRWYWx1ZShzdGF0aWNfY2FzdDxpbnQ+KHZhbHVlKSkpOycgJSBzZXR0ZXJfYXJn
cykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICAgICAg
bV9yZXN1bHQtPiUoa2V5ZWRTZXQpcyhBU0NJSUxpdGVyYWwoIiUobmFtZSlzIiksIHZhbHVlKTsn
ICUgc2V0dGVyX2FyZ3MpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICAgICAgcmV0dXJu
IGNhc3RTdGF0ZTwlKGNhbWVsTmFtZSlzU2V0PigpOycgJSBzZXR0ZXJfYXJncykKKyAgICAgICAg
bGluZXMuYXBwZW5kKCcgICAgICAgIH0nKQorICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVz
KQorCisgICAgZGVmIF9nZW5lcmF0ZV91bmNoZWNrZWRfc2V0dGVyX2Zvcl9tZW1iZXIoc2VsZiwg
dHlwZV9tZW1iZXIsIGRvbWFpbik6CisgICAgICAgIHNldHRlcl9hcmdzID0geworICAgICAgICAg
ICAgJ2NhbWVsTmFtZSc6IHVjZmlyc3QodHlwZV9tZW1iZXIubWVtYmVyX25hbWUpLAorICAgICAg
ICAgICAgJ2ZyYW1ld29ya1ByZWZpeCc6IHNlbGYubW9kZWwoKS5mcmFtZXdvcmsuc2V0dGluZygn
cHJlZml4JyksCisgICAgICAgICAgICAna2V5ZWRTZXQnOiBHZW5lcmF0b3Iua2V5ZWRfc2V0X21l
dGhvZF9mb3JfdHlwZSh0eXBlX21lbWJlci50eXBlKSwKKyAgICAgICAgICAgICduYW1lJzogdHlw
ZV9tZW1iZXIubWVtYmVyX25hbWUsCisgICAgICAgICAgICAncGFyYW1ldGVyVHlwZSc6IEdlbmVy
YXRvci50eXBlX3N0cmluZ19mb3JfdHlwZV9tZW1iZXIodHlwZV9tZW1iZXIpCisgICAgICAgIH0K
KworICAgICAgICBsaW5lcyA9IFtdCisgICAgICAgIGxpbmVzLmFwcGVuZCgnJykKKyAgICAgICAg
bGluZXMuYXBwZW5kKCcgICAgdm9pZCBzZXQlKGNhbWVsTmFtZSlzKCUocGFyYW1ldGVyVHlwZSlz
IHZhbHVlKScgJSBzZXR0ZXJfYXJncykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgeycpCisg
ICAgICAgIGlmIGlzaW5zdGFuY2UodHlwZV9tZW1iZXIudHlwZSwgRW51bVR5cGUpOgorICAgICAg
ICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIHRoaXMtPiUoa2V5ZWRTZXQpcyhBU0NJSUxpdGVy
YWwoIiUobmFtZSlzIiksIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OmdldCUoZnJhbWV3b3JrUHJl
Zml4KXNFbnVtQ29uc3RhbnRWYWx1ZShzdGF0aWNfY2FzdDxpbnQ+KHZhbHVlKSkpOycgJSBzZXR0
ZXJfYXJncykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAg
ICB0aGlzLT4lKGtleWVkU2V0KXMoQVNDSUlMaXRlcmFsKCIlKG5hbWUpcyIpLCB2YWx1ZSk7JyAl
IHNldHRlcl9hcmdzKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICB9JykKKyAgICAgICAgaWYg
dHlwZV9tZW1iZXIubWVtYmVyX25hbWUgaW4gWyd2YWx1ZScsICdhcnJheScsICdzdHJpbmcnLCAn
bnVtYmVyJywgJ2ludGVnZXInXToKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIHVzaW5n
IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0QmFzZTo6c2V0JXM7JyAlIHVjZmlyc3QodHlwZV9t
ZW1iZXIubWVtYmVyX25hbWUpKQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcnKQorICAgICAg
ICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQorCisgICAgZGVmIF9nZW5lcmF0ZV9mb3J3YXJkX2Rl
Y2xhcmF0aW9uc19mb3JfYmluZGluZ190cmFpdHMoc2VsZik6CisgICAgICAgICMgQSBsaXN0IG9m
IChidWlsZGVyX3R5cGUsIG5lZWRzX3J1bnRpbWVfY2FzdCkKKyAgICAgICAgdHlwZV9hcmd1bWVu
dHMgPSBbXQorCisgICAgICAgIGZvciBkb21haW4gaW4gc2VsZi5kb21haW5zX3RvX2dlbmVyYXRl
KCk6CisgICAgICAgICAgICBkZWNsYXJhdGlvbnNfdG9fZ2VuZXJhdGUgPSBmaWx0ZXIobGFtYmRh
IGRlY2w6IHNlbGYudHlwZV9uZWVkc19zaGFwZV9hc3NlcnRpb25zKGRlY2wudHlwZSksIGRvbWFp
bi50eXBlX2RlY2xhcmF0aW9ucykKKworICAgICAgICAgICAgZm9yIHR5cGVfZGVjbGFyYXRpb24g
aW4gZGVjbGFyYXRpb25zX3RvX2dlbmVyYXRlOgorICAgICAgICAgICAgICAgIGZvciB0eXBlX21l
bWJlciBpbiB0eXBlX2RlY2xhcmF0aW9uLnR5cGVfbWVtYmVyczoKKyAgICAgICAgICAgICAgICAg
ICAgaWYgaXNpbnN0YW5jZSh0eXBlX21lbWJlci50eXBlLCBFbnVtVHlwZSk6CisgICAgICAgICAg
ICAgICAgICAgICAgICB0eXBlX2FyZ3VtZW50cy5hcHBlbmQoKEdlbmVyYXRvci50eXBlX2J1aWxk
ZXJfc3RyaW5nX2Zvcl90eXBlX21lbWJlcih0eXBlX21lbWJlciwgdHlwZV9kZWNsYXJhdGlvbiks
IEZhbHNlKSkKKworICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodHlwZV9kZWNsYXJhdGlv
bi50eXBlLCBPYmplY3RUeXBlKToKKyAgICAgICAgICAgICAgICAgICAgdHlwZV9hcmd1bWVudHMu
YXBwZW5kKChHZW5lcmF0b3IudHlwZV9idWlsZGVyX3N0cmluZ19mb3JfdHlwZSh0eXBlX2RlY2xh
cmF0aW9uLnR5cGUpLCBHZW5lcmF0b3IudHlwZV9uZWVkc19ydW50aW1lX2Nhc3RzKHR5cGVfZGVj
bGFyYXRpb24udHlwZSkpKQorCisgICAgICAgIHN0cnVjdF9rZXl3b3JkcyA9IFsnc3RydWN0J10K
KyAgICAgICAgZnVuY3Rpb25fa2V5d29yZHMgPSBbJ3N0YXRpYyB2b2lkJ10KKyAgICAgICAgZXhw
b3J0X21hY3JvID0gc2VsZi5tb2RlbCgpLmZyYW1ld29yay5zZXR0aW5nKCdleHBvcnRfbWFjcm8n
LCBOb25lKQorICAgICAgICBpZiBleHBvcnRfbWFjcm8gaXMgbm90IE5vbmU6CisgICAgICAgICAg
ICBzdHJ1Y3Rfa2V5d29yZHMuYXBwZW5kKGV4cG9ydF9tYWNybykKKyAgICAgICAgICAgIGZ1bmN0
aW9uX2tleXdvcmRzWzE6MV0gPSBbZXhwb3J0X21hY3JvXQorCisgICAgICAgIGxpbmVzID0gW10K
KyAgICAgICAgZm9yIGFyZ3VtZW50IGluIHR5cGVfYXJndW1lbnRzOgorICAgICAgICAgICAgbGlu
ZXMuYXBwZW5kKCd0ZW1wbGF0ZTw+ICVzIEJpbmRpbmdUcmFpdHM8JXM+IHsnICUgKCcgJy5qb2lu
KHN0cnVjdF9rZXl3b3JkcyksIGFyZ3VtZW50WzBdKSkKKyAgICAgICAgICAgIGlmIGFyZ3VtZW50
WzFdOgorICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnc3RhdGljIFBhc3NSZWZQdHI8JXM+
IHJ1bnRpbWVDYXN0KFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4gdmFsdWUp
OycgJSBhcmd1bWVudFswXSkKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnI2lmICFBU1NFUlRf
RElTQUJMRUQnKQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCclcyBhc3NlcnRDb3JyZWN0VmFs
dWUoSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSopOycgJSAnICcuam9pbihmdW5jdGlvbl9rZXl3
b3JkcykpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyNlbmRpZiAvLyAhQVNTRVJUX0RJU0FC
TEVEJykKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnfTsnKQorICAgICAgICByZXR1cm4gJ1xu
Jy5qb2luKGxpbmVzKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfdHlwZV9idWlsZGVyX2ltcGxlbWVudGF0aW9uLnB5
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJh
dGVfdHlwZV9idWlsZGVyX2ltcGxlbWVudGF0aW9uLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZkODA4YTkyNjFi
ZTNmNWFhNGU5Yjk5NWZjN2YxNDhkOWU4NDYxMGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV90eXBlX2J1
aWxkZXJfaW1wbGVtZW50YXRpb24ucHkKQEAgLTAsMCArMSwxOTUgQEAKKyMhL3Vzci9iaW4vZW52
IHB5dGhvbgorIyBDb3B5cmlnaHQgKGMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorIyBDb3B5cmlnaHQgKGMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6
CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
IyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisjIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KworCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG9zLnBhdGgKK2ltcG9ydCByZQoraW1wb3J0IHN0
cmluZworCitmcm9tIGdlbmVyYXRvciBpbXBvcnQgR2VuZXJhdG9yLCB1Y2ZpcnN0Citmcm9tIHN0
cmluZyBpbXBvcnQgVGVtcGxhdGUKK2Zyb20gZ2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgR2Vu
ZXJhdG9yVGVtcGxhdGVzIGFzIFRlbXBsYXRlcworZnJvbSBtb2RlbHMgaW1wb3J0IEFsaWFzZWRU
eXBlLCBBcnJheVR5cGUsIEVudW1UeXBlLCBPYmplY3RUeXBlCisKKyMgVXNlIGEgZ2xvYmFsIGxv
Z2dlciwgd2hpY2ggbm9ybWFsbHkgb25seSBsb2dzIGVycm9ycy4KK2xvZyA9IGxvZ2dpbmcuZ2V0
TG9nZ2VyKCdnbG9iYWwnKQorCisKK2NsYXNzIFR5cGVCdWlsZGVySW1wbGVtZW50YXRpb25HZW5l
cmF0b3IoR2VuZXJhdG9yKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbW9kZWwsIGlucHV0X2Zp
bGVwYXRoKToKKyAgICAgICAgc2VsZi5fbW9kZWwgPSBtb2RlbAorICAgICAgICBzZWxmLl9pbnB1
dF9maWxlcGF0aCA9IGlucHV0X2ZpbGVwYXRoCisKKyAgICBkZWYgbW9kZWwoc2VsZik6CisgICAg
ICAgIHJldHVybiBzZWxmLl9tb2RlbAorCisgICAgZGVmIG91dHB1dF9maWxlbmFtZShzZWxmKToK
KyAgICAgICAgcmV0dXJuICJJbnNwZWN0b3Ilc1R5cGVCdWlsZGVycy5jcHAiICUgc2VsZi5tb2Rl
bCgpLmZyYW1ld29yay5zZXR0aW5nKCdwcmVmaXgnKQorCisgICAgZGVmIGdlbmVyYXRlX2xpY2Vu
c2Uoc2VsZik6CisgICAgICAgIHJldHVybiBUZW1wbGF0ZShUZW1wbGF0ZXMuQ29weXJpZ2h0Qmxv
Y2spLnN1YnN0aXR1dGUoTm9uZSwgaW5wdXRGaWxlbmFtZT1vcy5wYXRoLmJhc2VuYW1lKHNlbGYu
X2lucHV0X2ZpbGVwYXRoKSkKKworICAgIGRlZiBnZW5lcmF0ZV9vdXRwdXQoc2VsZik6CisgICAg
ICAgIGRvbWFpbnMgPSBzZWxmLmRvbWFpbnNfdG9fZ2VuZXJhdGUoKQorICAgICAgICBzZWxmLmNh
bGN1bGF0ZV90eXBlc19yZXF1aXJpbmdfc2hhcGVfYXNzZXJ0aW9ucyhkb21haW5zKQorCisgICAg
ICAgIHNlY29uZGFyeV9oZWFkZXJzID0gWyc8d3RmL3RleHQvQ1N0cmluZy5oPiddCisKKyAgICAg
ICAgc2VjdGlvbnMgPSBbXQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5nZW5lcmF0ZV9s
aWNlbnNlKCkpCisgICAgICAgIGhlYWRlcl9hcmdzID0geworICAgICAgICAgICAgJ3ByaW1hcnlJ
bmNsdWRlJzogJyJJbnNwZWN0b3Ilc1R5cGVCdWlsZGVycy5oIicgJSBzZWxmLm1vZGVsKCkuZnJh
bWV3b3JrLnNldHRpbmcoJ3ByZWZpeCcpLAorICAgICAgICAgICAgJ3NlY29uZGFyeUluY2x1ZGVz
JzogIlxuIi5qb2luKFsnI2luY2x1ZGUgJXMnICUgaGVhZGVyIGZvciBoZWFkZXIgaW4gc2Vjb25k
YXJ5X2hlYWRlcnNdKSwKKyAgICAgICAgICAgICdpbnB1dEZpbGVuYW1lJzogc2VsZi5faW5wdXRf
ZmlsZXBhdGgKKyAgICAgICAgfQorCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShU
ZW1wbGF0ZXMuQ3BwSW1wbGVtZW50YXRpb25QcmVsdWRlKS5zdWJzdGl0dXRlKE5vbmUsICoqaGVh
ZGVyX2FyZ3MpKQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoJ25hbWVzcGFjZSBUeXBlQnVpbGRl
ciB7JykKKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2VudW1fbWFwcGlu
ZygpKQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfb3Blbl9maWVsZF9u
YW1lcygpKQorICAgICAgICBidWlsZGVyX3NlY3Rpb25zID0gbWFwKHNlbGYuX2dlbmVyYXRlX2J1
aWxkZXJzX2Zvcl9kb21haW4sIGRvbWFpbnMpCisgICAgICAgIHNlY3Rpb25zLmV4dGVuZChmaWx0
ZXIobGFtYmRhIHNlY3Rpb246IGxlbihzZWN0aW9uKSA+IDAsIGJ1aWxkZXJfc2VjdGlvbnMpKQor
ICAgICAgICBzZWN0aW9ucy5hcHBlbmQoJ30gLy8gbmFtZXNwYWNlIFR5cGVCdWlsZGVyJykKKyAg
ICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKFRlbXBsYXRlcy5DcHBJbXBsZW1lbnRhdGlv
blBvc3RsdWRlKS5zdWJzdGl0dXRlKE5vbmUsICoqaGVhZGVyX2FyZ3MpKQorCisgICAgICAgIHJl
dHVybiAiXG5cbiIuam9pbihzZWN0aW9ucykKKworICAgICMgUHJpdmF0ZSBtZXRob2RzLgorCisg
ICAgZGVmIF9nZW5lcmF0ZV9lbnVtX21hcHBpbmcoc2VsZik6CisgICAgICAgIGZyYW1ld29ya19w
cmVmaXggPSBzZWxmLm1vZGVsKCkuZnJhbWV3b3JrLnNldHRpbmcoJ3ByZWZpeCcpCisgICAgICAg
IGxpbmVzID0gW10KKworICAgICAgICBsaW5lcy5hcHBlbmQoJ3N0YXRpYyBjb25zdCBjaGFyKiBj
b25zdCBlbnVtX2NvbnN0YW50X3ZhbHVlc1tdID0geycpCisgICAgICAgIGxpbmVzLmV4dGVuZChb
JyAgICAiJXMiLCcgJSBlbnVtX3ZhbHVlIGZvciBlbnVtX3ZhbHVlIGluIHNlbGYuYXNzaWduZWRf
ZW51bV92YWx1ZXMoKV0pCisgICAgICAgIGxpbmVzLmFwcGVuZCgnfTsnKQorICAgICAgICBsaW5l
cy5hcHBlbmQoJycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnU3RyaW5nIGdldCVzRW51bUNvbnN0
YW50VmFsdWUoaW50IGNvZGUpIHsnICUgZnJhbWV3b3JrX3ByZWZpeCkKKyAgICAgICAgbGluZXMu
YXBwZW5kKCcgICAgcmV0dXJuIGVudW1fY29uc3RhbnRfdmFsdWVzW2NvZGVdOycpCisgICAgICAg
IGxpbmVzLmFwcGVuZCgnfScpCisKKyAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKKwor
ICAgIGRlZiBfZ2VuZXJhdGVfb3Blbl9maWVsZF9uYW1lcyhzZWxmKToKKyAgICAgICAgbGluZXMg
PSBbXQorICAgICAgICBmb3IgZG9tYWluIGluIHNlbGYuZG9tYWluc190b19nZW5lcmF0ZSgpOgor
ICAgICAgICAgICAgZm9yIHR5cGVfZGVjbGFyYXRpb24gaW4gZmlsdGVyKGxhbWJkYSBkZWNsOiBH
ZW5lcmF0b3IudHlwZV9oYXNfb3Blbl9maWVsZHMoZGVjbC50eXBlKSwgZG9tYWluLnR5cGVfZGVj
bGFyYXRpb25zKToKKyAgICAgICAgICAgICAgICBmb3IgdHlwZV9tZW1iZXIgaW4gc29ydGVkKHR5
cGVfZGVjbGFyYXRpb24udHlwZV9tZW1iZXJzLCBrZXk9bGFtYmRhIG1lbWJlcjogbWVtYmVyLm1l
bWJlcl9uYW1lKToKKyAgICAgICAgICAgICAgICAgICAgZmllbGRfbmFtZSA9ICc6Oicuam9pbihb
J0luc3BlY3RvcicsICdUeXBlQnVpbGRlcicsIGRvbWFpbi5kb21haW5fbmFtZSwgdWNmaXJzdCh0
eXBlX2RlY2xhcmF0aW9uLnR5cGVfbmFtZSksIHVjZmlyc3QodHlwZV9tZW1iZXIubWVtYmVyX25h
bWUpXSkKKyAgICAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCdjb25zdCBjaGFyKiAlcyA9
ICIlcyI7JyAlIChmaWVsZF9uYW1lLCB0eXBlX21lbWJlci5tZW1iZXJfbmFtZSkpCisKKyAgICAg
ICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKKworICAgIGRlZiBfZ2VuZXJhdGVfYnVpbGRlcnNf
Zm9yX2RvbWFpbihzZWxmLCBkb21haW4pOgorICAgICAgICBzZWN0aW9ucyA9IFtdCisgICAgICAg
IGRlY2xhcmF0aW9uc190b19nZW5lcmF0ZSA9IGZpbHRlcihsYW1iZGEgZGVjbDogc2VsZi50eXBl
X25lZWRzX3NoYXBlX2Fzc2VydGlvbnMoZGVjbC50eXBlKSwgZG9tYWluLnR5cGVfZGVjbGFyYXRp
b25zKQorCisgICAgICAgIGZvciB0eXBlX2RlY2xhcmF0aW9uIGluIGRlY2xhcmF0aW9uc190b19n
ZW5lcmF0ZToKKyAgICAgICAgICAgIGZvciB0eXBlX21lbWJlciBpbiB0eXBlX2RlY2xhcmF0aW9u
LnR5cGVfbWVtYmVyczoKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHR5cGVfbWVtYmVy
LnR5cGUsIEVudW1UeXBlKToKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNl
bGYuX2dlbmVyYXRlX2Fzc2VydGlvbl9mb3JfZW51bSh0eXBlX21lbWJlciwgdHlwZV9kZWNsYXJh
dGlvbikpCisKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodHlwZV9kZWNsYXJhdGlvbi50eXBl
LCBPYmplY3RUeXBlKToKKyAgICAgICAgICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5fZ2Vu
ZXJhdGVfYXNzZXJ0aW9uX2Zvcl9vYmplY3RfZGVjbGFyYXRpb24odHlwZV9kZWNsYXJhdGlvbikp
CisgICAgICAgICAgICAgICAgaWYgR2VuZXJhdG9yLnR5cGVfbmVlZHNfcnVudGltZV9jYXN0cyh0
eXBlX2RlY2xhcmF0aW9uLnR5cGUpOgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9ucy5hcHBl
bmQoc2VsZi5fZ2VuZXJhdGVfcnVudGltZV9jYXN0X2Zvcl9vYmplY3RfZGVjbGFyYXRpb24odHlw
ZV9kZWNsYXJhdGlvbikpCisKKyAgICAgICAgcmV0dXJuICdcblxuJy5qb2luKHNlY3Rpb25zKQor
CisgICAgZGVmIF9nZW5lcmF0ZV9ydW50aW1lX2Nhc3RfZm9yX29iamVjdF9kZWNsYXJhdGlvbihz
ZWxmLCBvYmplY3RfZGVjbGFyYXRpb24pOgorICAgICAgICBhcmdzID0geworICAgICAgICAgICAg
J29iamVjdFR5cGUnOiBHZW5lcmF0b3IudHlwZV9idWlsZGVyX3N0cmluZ19mb3JfdHlwZShvYmpl
Y3RfZGVjbGFyYXRpb24udHlwZSkKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gVGVtcGxhdGUo
VGVtcGxhdGVzLlR5cGVCdWlsZGVyT2JqZWN0UnVudGltZUNhc3QpLnN1YnN0aXR1dGUoTm9uZSwg
KiphcmdzKQorCisgICAgZGVmIF9nZW5lcmF0ZV9hc3NlcnRpb25fZm9yX29iamVjdF9kZWNsYXJh
dGlvbihzZWxmLCBvYmplY3RfZGVjbGFyYXRpb24pOgorICAgICAgICByZXF1aXJlZF9tZW1iZXJz
ID0gZmlsdGVyKGxhbWJkYSBtZW1iZXI6IG5vdCBtZW1iZXIuaXNfb3B0aW9uYWwsIG9iamVjdF9k
ZWNsYXJhdGlvbi50eXBlX21lbWJlcnMpCisgICAgICAgIG9wdGlvbmFsX21lbWJlcnMgPSBmaWx0
ZXIobGFtYmRhIG1lbWJlcjogbWVtYmVyLmlzX29wdGlvbmFsLCBvYmplY3RfZGVjbGFyYXRpb24u
dHlwZV9tZW1iZXJzKQorICAgICAgICBzaG91bGRfY291bnRfcHJvcGVydGllcyA9IG5vdCBHZW5l
cmF0b3IudHlwZV9oYXNfb3Blbl9maWVsZHMob2JqZWN0X2RlY2xhcmF0aW9uLnR5cGUpCisgICAg
ICAgIGxpbmVzID0gW10KKworICAgICAgICBsaW5lcy5hcHBlbmQoJyNpZiAhQVNTRVJUX0RJU0FC
TEVEJykKKyAgICAgICAgbGluZXMuYXBwZW5kKCd2b2lkIEJpbmRpbmdUcmFpdHM8JXM+Ojphc3Nl
cnRDb3JyZWN0VmFsdWUoSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSogdmFsdWUpJyAlIChHZW5l
cmF0b3IudHlwZV9idWlsZGVyX3N0cmluZ19mb3JfdHlwZShvYmplY3RfZGVjbGFyYXRpb24udHlw
ZSkpKQorICAgICAgICBsaW5lcy5hcHBlbmQoIiIieworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IG9iamVjdDsKKyAgICBib29sIGNhc3RSZXMgPSB2YWx1ZS0+YXNPYmplY3QoJm9iamVjdCk7
CisgICAgQVNTRVJUX1VOVVNFRChjYXN0UmVzLCBjYXN0UmVzKTsiIiIpCisgICAgICAgIGZvciB0
eXBlX21lbWJlciBpbiByZXF1aXJlZF9tZW1iZXJzOgorICAgICAgICAgICAgYXJncyA9IHsKKyAg
ICAgICAgICAgICAgICAnbWVtYmVyTmFtZSc6IHR5cGVfbWVtYmVyLm1lbWJlcl9uYW1lLAorICAg
ICAgICAgICAgICAgICdhc3NlcnRNZXRob2QnOiBHZW5lcmF0b3IuYXNzZXJ0aW9uX21ldGhvZF9m
b3JfdHlwZV9tZW1iZXIodHlwZV9tZW1iZXIsIG9iamVjdF9kZWNsYXJhdGlvbikKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgbGluZXMuYXBwZW5kKCIiIiAgICB7CisgICAgICAgIEluc3Bl
Y3Rvck9iamVjdDo6aXRlcmF0b3IgJShtZW1iZXJOYW1lKXNQb3M7CisgICAgICAgICUobWVtYmVy
TmFtZSlzUG9zID0gb2JqZWN0LT5maW5kKCIlKG1lbWJlck5hbWUpcyIpOworICAgICAgICBBU1NF
UlQoJShtZW1iZXJOYW1lKXNQb3MgIT0gb2JqZWN0LT5lbmQoKSk7CisgICAgICAgICUoYXNzZXJ0
TWV0aG9kKXMoJShtZW1iZXJOYW1lKXNQb3MtPnZhbHVlLmdldCgpKTsKKyAgICB9IiIiICUgYXJn
cykKKworICAgICAgICBpZiBzaG91bGRfY291bnRfcHJvcGVydGllczoKKyAgICAgICAgICAgIGxp
bmVzLmFwcGVuZCgnJykKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGludCBmb3VuZFBy
b3BlcnRpZXNDb3VudCA9ICVzOycgJSBsZW4ocmVxdWlyZWRfbWVtYmVycykpCisKKyAgICAgICAg
Zm9yIHR5cGVfbWVtYmVyIGluIG9wdGlvbmFsX21lbWJlcnM6CisgICAgICAgICAgICBhcmdzID0g
eworICAgICAgICAgICAgICAgICdtZW1iZXJOYW1lJzogdHlwZV9tZW1iZXIubWVtYmVyX25hbWUs
CisgICAgICAgICAgICAgICAgJ2Fzc2VydE1ldGhvZCc6IEdlbmVyYXRvci5hc3NlcnRpb25fbWV0
aG9kX2Zvcl90eXBlX21lbWJlcih0eXBlX21lbWJlciwgb2JqZWN0X2RlY2xhcmF0aW9uKQorICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoIiIiICAgIHsKKyAgICAgICAg
SW5zcGVjdG9yT2JqZWN0OjppdGVyYXRvciAlKG1lbWJlck5hbWUpc1BvczsKKyAgICAgICAgJSht
ZW1iZXJOYW1lKXNQb3MgPSBvYmplY3QtPmZpbmQoIiUobWVtYmVyTmFtZSlzIik7CisgICAgICAg
IGlmICglKG1lbWJlck5hbWUpc1BvcyAhPSBvYmplY3QtPmVuZCgpKSB7CisgICAgICAgICAgICAl
KGFzc2VydE1ldGhvZClzKCUobWVtYmVyTmFtZSlzUG9zLT52YWx1ZS5nZXQoKSk7IiIiICUgYXJn
cykKKworICAgICAgICAgICAgaWYgc2hvdWxkX2NvdW50X3Byb3BlcnRpZXM6CisgICAgICAgICAg
ICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgICAgICArK2ZvdW5kUHJvcGVydGllc0NvdW50Oycp
CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgfScpCisgICAgICAgICAgICBsaW5l
cy5hcHBlbmQoJyAgICB9JykKKworICAgICAgICBpZiBzaG91bGRfY291bnRfcHJvcGVydGllczoK
KyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGlmIChmb3VuZFByb3BlcnRpZXNDb3VudCAh
PSBvYmplY3QtPnNpemUoKSknKQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIEZB
VEFMKCJVbmV4cGVjdGVkIHByb3BlcnRpZXMgaW4gb2JqZWN0OiAlc1xcbiIsIG9iamVjdC0+dG9K
U09OU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnfScp
CisgICAgICAgIGxpbmVzLmFwcGVuZCgnI2VuZGlmIC8vICFBU1NFUlRfRElTQUJMRUQnKQorICAg
ICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQorCisgICAgZGVmIF9nZW5lcmF0ZV9hc3NlcnRp
b25fZm9yX2VudW0oc2VsZiwgZW51bV9tZW1iZXIsIG9iamVjdF9kZWNsYXJhdGlvbik6CisgICAg
ICAgIGxpbmVzID0gW10KKyAgICAgICAgbGluZXMuYXBwZW5kKCcjaWYgIUFTU0VSVF9ESVNBQkxF
RCcpCisgICAgICAgIGxpbmVzLmFwcGVuZCgndm9pZCAlcyhJbnNwZWN0b3I6Okluc3BlY3RvclZh
bHVlKiB2YWx1ZSknICUgR2VuZXJhdG9yLmFzc2VydGlvbl9tZXRob2RfZm9yX3R5cGVfbWVtYmVy
KGVudW1fbWVtYmVyLCBvYmplY3RfZGVjbGFyYXRpb24pKQorICAgICAgICBsaW5lcy5hcHBlbmQo
J3snKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBXVEY6OlN0cmluZyBzOycpCisgICAgICAg
IGxpbmVzLmFwcGVuZCgnICAgIGJvb2wgY2FzdF9yZXMgPSB2YWx1ZS0+YXNTdHJpbmcoJnMpOycp
CisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIEFTU0VSVChjYXN0X3Jlcyk7JykKKworICAgICAg
ICBhc3NlcnRfY29uZGl0aW9uID0gJyB8fCAnLmpvaW4oWydzID09ICIlcyInICUgZW51bV92YWx1
ZSBmb3IgZW51bV92YWx1ZSBpbiBlbnVtX21lbWJlci50eXBlLmVudW1fdmFsdWVzKCldKQorICAg
ICAgICBsaW5lcy5hcHBlbmQoJyAgICBBU1NFUlQoJXMpOycgJSBhc3NlcnRfY29uZGl0aW9uKQor
ICAgICAgICBsaW5lcy5hcHBlbmQoJ30nKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyNlbmRpZiAv
LyAhQVNTRVJUX0RJU0FCTEVEJykKKworICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVn
ZW4vZ2VuZXJhdG9yLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2NvZGVnZW4vZ2VuZXJhdG9yLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBmZTY4ZTc4YTg1ZjVjMjJlZDZiYzQy
MmRmZjk4OTIxZGExNGMwMGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0b3IucHkKQEAgLTAsMCArMSw0OTQg
QEAKKyMgQ29weXJpZ2h0IChjKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyMgQ29weXJpZ2h0IChjKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyMgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2lt
cG9ydCBsb2dnaW5nCitpbXBvcnQgcmUKKworZnJvbSBtb2RlbHMgaW1wb3J0IFByaW1pdGl2ZVR5
cGUsIE9iamVjdFR5cGUsIEFycmF5VHlwZSwgRW51bVR5cGUsIEFsaWFzZWRUeXBlCisKK2xvZyA9
IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQorCitkZWYgdWNmaXJzdChzdHIpOgorICAgIHJl
dHVybiBzdHJbOjFdLnVwcGVyKCkgKyBzdHJbMTpdCisKK19QUklNSVRJVkVfVE9fQ1BQX05BTUVf
TUFQID0geworICAgICdib29sZWFuJzogJ2Jvb2wnLAorICAgICdpbnRlZ2VyJzogJ2ludCcsCisg
ICAgJ251bWJlcic6ICdkb3VibGUnLAorICAgICdzdHJpbmcnOiAnU3RyaW5nJywKKyAgICAnb2Jq
ZWN0JzogJ0luc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0JywKKyAgICAnYW55JzogJ0luc3BlY3Rv
cjo6SW5zcGVjdG9yVmFsdWUnCit9CisKKyMgRklYTUU6IFRoaXMgc2hvdWxkIGJlIGNvbnZlcnRl
ZCBpbnRvIGEgcHJvcGVydHkgb24gdGhlIGRvbWFpbiBpbiBKU09OLgorX0RPTUFJTl9UT19DUFBf
R1VBUkRfTUFQID0geworICAgICdEYXRhYmFzZSc6ICJFTkFCTEUoU1FMX0RBVEFCQVNFKSIsCisg
ICAgJ0luZGV4ZWREQic6ICJFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkiLAorICAgICdSZXBsYXkn
OiAiRU5BQkxFKFdFQl9SRVBMQVkpIiwKK30KKworX0FMV0FZU19VUFBFUkNBU0VEX0VOVU1fVkFM
VUVfU1VCU1RSSU5HUyA9IHNldChbJ0FQSScsICdDU1MnLCAnRE9NJywgJ0hUTUwnLCAnWEhSJywg
J1hNTCddKQorCisjIFRoZXNlIG9iamVjdHMgYXJlIGJ1aWx0IG1hbnVhbGx5IGJ5IGNyZWF0aW5n
IGFuZCBzZXR0aW5nIEluc3BlY3RvclZhbHVlcy4KKyMgQmVmb3JlIHNlbmRpbmcgdGhlc2Ugb3Zl
ciB0aGUgcHJvdG9jb2wsIHRoZWlyIHNoYXBlcyBhcmUgY2hlY2tlZCBhZ2FpbnN0IHRoZSBzcGVj
aWZpY2F0aW9uLgorIyBTbywgYW55IHR5cGVzIHJlZmVyZW5jZWQgYnkgdGhlc2UgdHlwZXMgcmVx
dWlyZSBkZWJ1Zy1vbmx5IGFzc2VydGlvbnMgdGhhdCBjaGVjayB2YWx1ZXMuCisjIENhbGN1bGF0
aW5nIG5lY2Vzc2FyeSBhc3NlcnRpb25zIGlzIGFubm95aW5nLCBhbmQgYWRkcyBhIGxvdCBvZiBj
b21wbGV4aXR5IHRvIHRoZSBnZW5lcmF0b3IuCisKKyMgRklYTUU6IFRoaXMgc2hvdWxkIGJlIGNv
bnZlcnRlZCBpbnRvIGEgcHJvcGVydHkgaW4gSlNPTi4KK19UWVBFU19ORUVESU5HX1JVTlRJTUVf
Q0FTVFMgPSBzZXQoWworICAgICJSdW50aW1lLlJlbW90ZU9iamVjdCIsCisgICAgIlJ1bnRpbWUu
UHJvcGVydHlEZXNjcmlwdG9yIiwKKyAgICAiUnVudGltZS5JbnRlcm5hbFByb3BlcnR5RGVzY3Jp
cHRvciIsCisgICAgIkRlYnVnZ2VyLkZ1bmN0aW9uRGV0YWlscyIsCisgICAgIkRlYnVnZ2VyLkNh
bGxGcmFtZSIsCisgICAgIkNhbnZhcy5UcmFjZUxvZyIsCisgICAgIkNhbnZhcy5SZXNvdXJjZUlu
Zm8iLAorICAgICJDYW52YXMuUmVzb3VyY2VTdGF0ZSIsCisgICAgIyBUaGlzIHNob3VsZCBiZSBh
IHRlbXBvcmFyeSBoYWNrLiBUaW1lbGluZUV2ZW50IHNob3VsZCBiZSBjcmVhdGVkIHZpYSBnZW5l
cmF0ZWQgQysrIEFQSS4KKyAgICAiVGltZWxpbmUuVGltZWxpbmVFdmVudCIsCisgICAgIyBGb3Ig
dGVzdGluZyBwdXJwb3NlcyBvbmx5LgorICAgICJUZXN0LlR5cGVOZWVkaW5nQ2FzdCIKK10pCisK
KyMgRklYTUU6IFRoaXMgc2hvdWxkIGJlIGNvbnZlcnRlZCBpbnRvIGEgcHJvcGVydHkgaW4gSlNP
Ti4KK19UWVBFU19XSVRIX09QRU5fRklFTERTPSBzZXQoWworICAgICJUaW1lbGluZS5UaW1lbGlu
ZUV2ZW50IiwKKyAgICAjIEluc3BlY3RvclN0eWxlU2hlZXQgbm90IG9ubHkgY3JlYXRlcyB0aGlz
IHByb3BlcnR5IGJ1dCB3YW50cyB0byByZWFkIGl0IGFuZCBtb2RpZnkgaXQuCisgICAgIkNTUy5D
U1NQcm9wZXJ0eSIsCisgICAgIyBJbnNwZWN0b3JSZXNvdXJjZUFnZW50IG5lZWRzIHRvIHVwZGF0
ZSBtaW1lLXR5cGUuCisgICAgIk5ldHdvcmsuUmVzcG9uc2UiLAorICAgICMgRm9yIHRlc3Rpbmcg
cHVycG9zZXMgb25seS4KKyAgICAiVGVzdC5PcGVuUGFyYW1ldGVyQnVuZGxlIgorXSkKKworY2xh
c3MgR2VuZXJhdG9yOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBh
dGgpOgorICAgICAgICBzZWxmLl9tb2RlbCA9IG1vZGVsCisgICAgICAgIHNlbGYuX2lucHV0X2Zp
bGVwYXRoID0gaW5wdXRfZmlsZXBhdGgKKworICAgIGRlZiBtb2RlbChzZWxmKToKKyAgICAgICAg
cmV0dXJuIHNlbGYuX21vZGVsCisKKyAgICBkZWYgZG9tYWluc190b19nZW5lcmF0ZShzZWxmKToK
KyAgICAgICAgcmV0dXJuIGZpbHRlcihsYW1iZGEgZG9tYWluOiBub3QgZG9tYWluLmlzX3N1cHBs
ZW1lbnRhbCwgc2VsZi5tb2RlbCgpLmRvbWFpbnMpCisKKyAgICAjIFRoZXNlIHR3byBtZXRob2Rz
IGFyZSBvdmVycmlkZGVuIGJ5IHN1YmNsYXNzZXMuCisgICAgZGVmIGdlbmVyYXRlX291dHB1dChz
ZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIG91dHB1dF9maWxlbmFtZShzZWxmKToKKyAg
ICAgICAgcGFzcworCisgICAgZGVmIGVuY29kaW5nX2Zvcl9lbnVtX3ZhbHVlKHNlbGYsIGVudW1f
dmFsdWUpOgorICAgICAgICBpZiBub3QgaGFzYXR0cihzZWxmLCAiX2Fzc2lnbmVkX2VudW1fdmFs
dWVzIik6CisgICAgICAgICAgICBzZWxmLl90cmF2ZXJzZV9hbmRfYXNzaWduX2VudW1fdmFsdWVz
KCkKKworICAgICAgICByZXR1cm4gc2VsZi5fZW51bV92YWx1ZV9lbmNvZGluZ3NbZW51bV92YWx1
ZV0KKworICAgIGRlZiBhc3NpZ25lZF9lbnVtX3ZhbHVlcyhzZWxmKToKKyAgICAgICAgaWYgbm90
IGhhc2F0dHIoc2VsZiwgIl9hc3NpZ25lZF9lbnVtX3ZhbHVlcyIpOgorICAgICAgICAgICAgc2Vs
Zi5fdHJhdmVyc2VfYW5kX2Fzc2lnbl9lbnVtX3ZhbHVlcygpCisKKyAgICAgICAgcmV0dXJuIHNl
bGYuX2Fzc2lnbmVkX2VudW1fdmFsdWVzWzpdICAjIFNsaWNlLgorCisgICAgQHN0YXRpY21ldGhv
ZAorICAgIGRlZiB0eXBlX25lZWRzX3J1bnRpbWVfY2FzdHMoX3R5cGUpOgorICAgICAgICByZXR1
cm4gX3R5cGUucXVhbGlmaWVkX25hbWUoKSBpbiBfVFlQRVNfTkVFRElOR19SVU5USU1FX0NBU1RT
CisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIHR5cGVfaGFzX29wZW5fZmllbGRzKF90eXBl
KToKKyAgICAgICAgcmV0dXJuIF90eXBlLnF1YWxpZmllZF9uYW1lKCkgaW4gX1RZUEVTX1dJVEhf
T1BFTl9GSUVMRFMKKworICAgIGRlZiB0eXBlX25lZWRzX3NoYXBlX2Fzc2VydGlvbnMoc2VsZiwg
X3R5cGUpOgorICAgICAgICBpZiBub3QgaGFzYXR0cihzZWxmLCAiX3R5cGVzX25lZWRpbmdfc2hh
cGVfYXNzZXJ0aW9ucyIpOgorICAgICAgICAgICAgc2VsZi5jYWxjdWxhdGVfdHlwZXNfcmVxdWly
aW5nX3NoYXBlX2Fzc2VydGlvbnMoc2VsZi5tb2RlbCgpLmRvbWFpbnMpCisKKyAgICAgICAgcmV0
dXJuIF90eXBlIGluIHNlbGYuX3R5cGVzX25lZWRpbmdfc2hhcGVfYXNzZXJ0aW9ucworCisgICAg
ZGVmIGFsbF90eXBlc19uZWVkaW5nX3NoYXBlX2Fzc2VydGlvbnMoc2VsZik6CisgICAgICAgIHJl
dHVybiBzZWxmLl90eXBlc19uZWVkaW5nX3NoYXBlX2Fzc2VydGlvbnMKKworICAgICMgVG8gcmVz
dHJpY3QgdGhlIGRvbWFpbnMgb3ZlciB3aGljaCB3ZSBjb21wdXRlIHR5cGVzIG5lZWRpbmcgYXNz
ZXJ0aW9ucywgY2FsbCB0aGlzIG1ldGhvZAorICAgICMgYmVmb3JlIGdlbmVyYXRpbmcgYW55IG91
dHB1dCB3aXRoIHRoZSBkZXNpcmVkIGRvbWFpbnMgcGFyYW1ldGVyLiBUaGUgY29tcHV0ZWQKKyAg
ICAjIHNldCBvZiB0eXBlcyB3aWxsIG5vdCBiZSBhdXRvbWF0aWNhbGx5IHJlZ2VuZXJhdGVkIG9u
IHN1YnNlcXVlbnQgY2FsbHMgdG8KKyAgICAjIEdlbmVyYXRvci50eXBlc19uZWVkaW5nX3NoYXBl
X2Fzc2VydGlvbnMoKS4KKyAgICBkZWYgY2FsY3VsYXRlX3R5cGVzX3JlcXVpcmluZ19zaGFwZV9h
c3NlcnRpb25zKHNlbGYsIGRvbWFpbnMpOgorICAgICAgICBkb21haW5fbmFtZXMgPSBtYXAobGFt
YmRhIGRvbWFpbjogZG9tYWluLmRvbWFpbl9uYW1lLCBkb21haW5zKQorICAgICAgICBsb2cuZGVi
dWcoIj4gQ2FsY3VsYXRpbmcgdHlwZXMgdGhhdCBuZWVkIHNoYXBlIGFzc2VydGlvbnMgKGVsaWdp
YmxlIGRvbWFpbnM6ICVzKSIgJSAiLCAiLmpvaW4oZG9tYWluX25hbWVzKSkKKworICAgICAgICAj
IE11dGF0ZXMgdGhlIHBhc3NlZC1pbiBzZXQ7IHRoaXMgc2ltcGxpZmllcyBjaGVja3MgdG8gcHJl
dmVudCBpbmZpbml0ZSByZWN1cnNpb24uCisgICAgICAgIGRlZiBnYXRoZXJfdHJhbnNpdGl2ZWx5
X3JlZmVyZW5jZWRfdHlwZXModHlwZSwgZ2F0aGVyZWRfdHlwZXMpOgorICAgICAgICAgICAgaWYg
dHlwZSBpbiBnYXRoZXJlZF90eXBlczoKKyAgICAgICAgICAgICAgICByZXR1cm4KKworICAgICAg
ICAgICAgaWYgaXNpbnN0YW5jZSh0eXBlLCBPYmplY3RUeXBlKToKKyAgICAgICAgICAgICAgICBs
b2cuZGVidWcoIj4gQWRkaW5nIHR5cGUgJXMgdG8gbGlzdCBvZiB0eXBlcyBuZWVkaW5nIHNoYXBl
IGFzc2VydGlvbnMuIiAlIHR5cGUucXVhbGlmaWVkX25hbWUoKSkKKyAgICAgICAgICAgICAgICBn
YXRoZXJlZF90eXBlcy5hZGQodHlwZSkKKyAgICAgICAgICAgICAgICBmb3IgdHlwZV9tZW1iZXIg
aW4gdHlwZS5tZW1iZXJzOgorICAgICAgICAgICAgICAgICAgICBnYXRoZXJfdHJhbnNpdGl2ZWx5
X3JlZmVyZW5jZWRfdHlwZXModHlwZV9tZW1iZXIudHlwZSwgZ2F0aGVyZWRfdHlwZXMpCisgICAg
ICAgICAgICBlbGlmIGlzaW5zdGFuY2UodHlwZSwgRW51bVR5cGUpOgorICAgICAgICAgICAgICAg
IGxvZy5kZWJ1ZygiPiBBZGRpbmcgdHlwZSAlcyB0byBsaXN0IG9mIHR5cGVzIG5lZWRpbmcgc2hh
cGUgYXNzZXJ0aW9ucy4iICUgdHlwZS5xdWFsaWZpZWRfbmFtZSgpKQorICAgICAgICAgICAgICAg
IGdhdGhlcmVkX3R5cGVzLmFkZCh0eXBlKQorICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHR5
cGUsIEFsaWFzZWRUeXBlKToKKyAgICAgICAgICAgICAgICBnYXRoZXJfdHJhbnNpdGl2ZWx5X3Jl
ZmVyZW5jZWRfdHlwZXModHlwZS5hbGlhc2VkX3R5cGUsIGdhdGhlcmVkX3R5cGVzKQorICAgICAg
ICAgICAgZWxpZiBpc2luc3RhbmNlKHR5cGUsIEFycmF5VHlwZSk6CisgICAgICAgICAgICAgICAg
Z2F0aGVyX3RyYW5zaXRpdmVseV9yZWZlcmVuY2VkX3R5cGVzKHR5cGUuZWxlbWVudF90eXBlLCBn
YXRoZXJlZF90eXBlcykKKworICAgICAgICBmb3VuZF90eXBlcyA9IHNldCgpCisgICAgICAgIGZv
ciBkb21haW4gaW4gZG9tYWluczoKKyAgICAgICAgICAgIGZvciBkZWNsYXJhdGlvbiBpbiBkb21h
aW4udHlwZV9kZWNsYXJhdGlvbnM6CisgICAgICAgICAgICAgICAgaWYgZGVjbGFyYXRpb24udHlw
ZS5xdWFsaWZpZWRfbmFtZSgpIGluIF9UWVBFU19ORUVESU5HX1JVTlRJTUVfQ0FTVFM6CisgICAg
ICAgICAgICAgICAgICAgIGxvZy5kZWJ1ZygiPiBHYXRoZXJpbmcgdHlwZXMgcmVmZXJlbmNlZCBi
eSAlcyB0byBnZW5lcmF0ZSBzaGFwZSBhc3NlcnRpb25zLiIgJSBkZWNsYXJhdGlvbi50eXBlLnF1
YWxpZmllZF9uYW1lKCkpCisgICAgICAgICAgICAgICAgICAgIGdhdGhlcl90cmFuc2l0aXZlbHlf
cmVmZXJlbmNlZF90eXBlcyhkZWNsYXJhdGlvbi50eXBlLCBmb3VuZF90eXBlcykKKworICAgICAg
ICBzZWxmLl90eXBlc19uZWVkaW5nX3NoYXBlX2Fzc2VydGlvbnMgPSBmb3VuZF90eXBlcworCisg
ICAgIyBQcml2YXRlIGhlbHBlciBpbnN0YW5jZSBtZXRob2RzLgorICAgIGRlZiBfdHJhdmVyc2Vf
YW5kX2Fzc2lnbl9lbnVtX3ZhbHVlcyhzZWxmKToKKyAgICAgICAgc2VsZi5fZW51bV92YWx1ZV9l
bmNvZGluZ3MgPSB7fQorICAgICAgICBzZWxmLl9hc3NpZ25lZF9lbnVtX3ZhbHVlcyA9IFtdCisg
ICAgICAgIGFsbF90eXBlcyA9IFtdCisKKyAgICAgICAgZG9tYWlucyA9IHNlbGYuZG9tYWluc190
b19nZW5lcmF0ZSgpCisKKyAgICAgICAgZm9yIF9kb21haW4gaW4gZG9tYWluczoKKyAgICAgICAg
ICAgIGZvciBfdHlwZV9kZWNsYXJhdGlvbiBpbiBfZG9tYWluLnR5cGVfZGVjbGFyYXRpb25zOgor
ICAgICAgICAgICAgICAgIGFsbF90eXBlcy5hcHBlbmQoX3R5cGVfZGVjbGFyYXRpb24udHlwZSkK
KyAgICAgICAgICAgICAgICBmb3IgX3R5cGVfbWVtYmVyIGluIF90eXBlX2RlY2xhcmF0aW9uLnR5
cGVfbWVtYmVyczoKKyAgICAgICAgICAgICAgICAgICAgYWxsX3R5cGVzLmFwcGVuZChfdHlwZV9t
ZW1iZXIudHlwZSkKKworICAgICAgICBmb3IgX2RvbWFpbiBpbiBkb21haW5zOgorICAgICAgICAg
ICAgZm9yIF9ldmVudCBpbiBfZG9tYWluLmV2ZW50czoKKyAgICAgICAgICAgICAgICBhbGxfdHlw
ZXMuZXh0ZW5kKFtwYXJhbWV0ZXIudHlwZSBmb3IgcGFyYW1ldGVyIGluIF9ldmVudC5ldmVudF9w
YXJhbWV0ZXJzXSkKKworICAgICAgICBmb3IgX2RvbWFpbiBpbiBkb21haW5zOgorICAgICAgICAg
ICAgZm9yIF9jb21tYW5kIGluIF9kb21haW4uY29tbWFuZHM6CisgICAgICAgICAgICAgICAgYWxs
X3R5cGVzLmV4dGVuZChbcGFyYW1ldGVyLnR5cGUgZm9yIHBhcmFtZXRlciBpbiBfY29tbWFuZC5j
YWxsX3BhcmFtZXRlcnNdKQorICAgICAgICAgICAgICAgIGFsbF90eXBlcy5leHRlbmQoW3BhcmFt
ZXRlci50eXBlIGZvciBwYXJhbWV0ZXIgaW4gX2NvbW1hbmQucmV0dXJuX3BhcmFtZXRlcnNdKQor
CisgICAgICAgIGZvciBfdHlwZSBpbiBhbGxfdHlwZXM6CisgICAgICAgICAgICBpZiBub3QgaXNp
bnN0YW5jZShfdHlwZSwgRW51bVR5cGUpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAg
ICAgICAgICBtYXAoc2VsZi5fYXNzaWduX2VuY29kaW5nX2Zvcl9lbnVtX3ZhbHVlLCBfdHlwZS5l
bnVtX3ZhbHVlcygpKQorCisgICAgZGVmIF9hc3NpZ25fZW5jb2RpbmdfZm9yX2VudW1fdmFsdWUo
c2VsZiwgZW51bV92YWx1ZSk6CisgICAgICAgIGlmIGVudW1fdmFsdWUgaW4gc2VsZi5fZW51bV92
YWx1ZV9lbmNvZGluZ3M6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBzZWxmLl9lbnVt
X3ZhbHVlX2VuY29kaW5nc1tlbnVtX3ZhbHVlXSA9IGxlbihzZWxmLl9hc3NpZ25lZF9lbnVtX3Zh
bHVlcykKKyAgICAgICAgc2VsZi5fYXNzaWduZWRfZW51bV92YWx1ZXMuYXBwZW5kKGVudW1fdmFs
dWUpCisKKyAgICAjIE1pc2NlbGxhbmVvdXMgdGV4dCBtYW5pcHVsYXRpb24gcm91dGluZXMuCisg
ICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiB3cmFwX3dpdGhfZ3VhcmRfZm9yX2RvbWFpbihkb21h
aW4sIHRleHQpOgorICAgICAgICBndWFyZCA9IF9ET01BSU5fVE9fQ1BQX0dVQVJEX01BUC5nZXQo
ZG9tYWluLmRvbWFpbl9uYW1lLCBOb25lKQorICAgICAgICBpZiBndWFyZCBpcyBub3QgTm9uZToK
KyAgICAgICAgICAgIGxpbmVzID0gWworICAgICAgICAgICAgICAgICcjaWYgJXMnICUgZ3VhcmQs
CisgICAgICAgICAgICAgICAgdGV4dCwKKyAgICAgICAgICAgICAgICAnI2VuZGlmIC8vICVzJyAl
IGd1YXJkCisgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgcmV0dXJuICdcbicuam9pbihs
aW5lcykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiB0ZXh0CisKKyAgICBAc3Rh
dGljbWV0aG9kCisgICAgZGVmIHN0eWxpemVkX25hbWVfZm9yX2VudW1fdmFsdWUoZW51bV92YWx1
ZSk6CisgICAgICAgICMgRW51bSB2YWx1ZXMgY291bGQgYmUgaW50ZWdlciBsaXRlcmFscywgc28g
ZG9uJ3QgdHJ5IHRvIGNvbnZlcnQgdGhvc2UuCisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGVu
dW1fdmFsdWUsICh1bmljb2RlLCBzdHIpKToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAg
IHJlZ2V4ID0gJyhcdyopKCVzKShcdyopJyAlICJ8Ii5qb2luKF9BTFdBWVNfVVBQRVJDQVNFRF9F
TlVNX1ZBTFVFX1NVQlNUUklOR1MpCisgICAgICAgIGRlZiByZXBsYWNlQ2FsbGJhY2sobWF0Y2gp
OgorICAgICAgICAgICAgcmV0dXJuICIiLmpvaW4oW21hdGNoLmdyb3VwKDEpLCBtYXRjaC5ncm91
cCgyKS51cHBlcigpLCBtYXRjaC5ncm91cCgzKV0pCisKKyAgICAgICAgIyBTcGxpdCBvbiBoeXBo
ZW4sIGludHJvZHVjZSBjYW1lbGNhc2UsIGFuZCBmb3JjZSB1cHBlcmNhc2luZyBvZiBhY3Jvbnlt
cy4KKyAgICAgICAgc3Vid29yZHMgPSBtYXAobGFtYmRhIHg6IHhbMF0udXBwZXIoKSArIHhbMTpd
LCBlbnVtX3ZhbHVlLnNwbGl0KCctJykpCisgICAgICAgIHJldHVybiByZS5zdWIocmVnZXgsIHJl
cGxhY2VDYWxsYmFjaywgIiIuam9pbihzdWJ3b3JkcyksIGZsYWdzPXJlLklHTk9SRUNBU0UpCisK
KyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGtleWVkX2dldF9tZXRob2RfZm9yX3R5cGUodHlw
ZSk6CisgICAgICAgIGlmIGlzaW5zdGFuY2UodHlwZSwgT2JqZWN0VHlwZSk6CisgICAgICAgICAg
ICByZXR1cm4gJ2dldE9iamVjdCcKKyAgICAgICAgaWYgaXNpbnN0YW5jZSh0eXBlLCBBcnJheVR5
cGUpOgorICAgICAgICAgICAgcmV0dXJuICdnZXRBcnJheScKKyAgICAgICAgZWxpZiBpc2luc3Rh
bmNlKHR5cGUsIFByaW1pdGl2ZVR5cGUpOgorICAgICAgICAgICAgaWYgdHlwZS5yYXdfbmFtZSgp
IGlzICdpbnRlZ2VyJzoKKyAgICAgICAgICAgICAgICByZXR1cm4gJ2dldEludCcKKyAgICAgICAg
ICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuICdnZXQnICsgdWNmaXJzdCh0eXBlLnJh
d19uYW1lKCkpCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh0eXBlLCBBbGlhc2VkVHlwZSk6Cisg
ICAgICAgICAgICByZXR1cm4gR2VuZXJhdG9yLmtleWVkX2dldF9tZXRob2RfZm9yX3R5cGUodHlw
ZS5hbGlhc2VkX3R5cGUpCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh0eXBlLCBFbnVtVHlwZSk6
CisgICAgICAgICAgICByZXR1cm4gR2VuZXJhdG9yLmtleWVkX2dldF9tZXRob2RfZm9yX3R5cGUo
dHlwZS5wcmltaXRpdmVfdHlwZSkKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYga2V5ZWRf
c2V0X21ldGhvZF9mb3JfdHlwZSh0eXBlKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZSh0eXBlLCBP
YmplY3RUeXBlKSBvciBpc2luc3RhbmNlKHR5cGUsIEFycmF5VHlwZSk6CisgICAgICAgICAgICBy
ZXR1cm4gJ3NldFZhbHVlJworICAgICAgICBlbGlmIGlzaW5zdGFuY2UodHlwZSwgUHJpbWl0aXZl
VHlwZSk6CisgICAgICAgICAgICBpZiB0eXBlLnJhd19uYW1lKCkgaW4gWydpbnRlZ2VyJywgJ251
bWJlciddOgorICAgICAgICAgICAgICAgIHJldHVybiAnc2V0TnVtYmVyJworICAgICAgICAgICAg
ZWxpZiB0eXBlLnJhd19uYW1lKCkgaW4gWydhbnknXToKKyAgICAgICAgICAgICAgICByZXR1cm4g
J3NldFZhbHVlJworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gJ3Nl
dCcgKyB1Y2ZpcnN0KHR5cGUucmF3X25hbWUoKSkKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKHR5
cGUsIEFsaWFzZWRUeXBlKToKKyAgICAgICAgICAgIHJldHVybiBHZW5lcmF0b3Iua2V5ZWRfc2V0
X21ldGhvZF9mb3JfdHlwZSh0eXBlLmFsaWFzZWRfdHlwZSkKKyAgICAgICAgZWxpZiBpc2luc3Rh
bmNlKHR5cGUsIEVudW1UeXBlKToKKyAgICAgICAgICAgIHJldHVybiBHZW5lcmF0b3Iua2V5ZWRf
c2V0X21ldGhvZF9mb3JfdHlwZSh0eXBlLnByaW1pdGl2ZV90eXBlKQorCisgICAgIyBHZW5lcmF0
ZSB0eXBlIHJlcHJlc2VudGF0aW9ucyBmb3IgdmFyaW91cyBzaXR1YXRpb25zLgorICAgIEBzdGF0
aWNtZXRob2QKKyAgICBkZWYgdHlwZV9idWlsZGVyX3N0cmluZ19mb3JfdHlwZSh0eXBlKToKKyAg
ICAgICAgaWYgaXNpbnN0YW5jZSh0eXBlLCBPYmplY3RUeXBlKSBhbmQgbGVuKHR5cGUubWVtYmVy
cykgPT0gMDoKKyAgICAgICAgICAgIHJldHVybiAnSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Qn
CisgICAgICAgIGlmIGlzaW5zdGFuY2UodHlwZSwgKE9iamVjdFR5cGUsIEFsaWFzZWRUeXBlLCBF
bnVtVHlwZSkpOgorICAgICAgICAgICAgcmV0dXJuICdJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjol
czo6JXMnICUgKHR5cGUudHlwZV9kb21haW4oKS5kb21haW5fbmFtZSwgdHlwZS5yYXdfbmFtZSgp
KQorICAgICAgICBlbGlmIGlzaW5zdGFuY2UodHlwZSwgQXJyYXlUeXBlKToKKyAgICAgICAgICAg
IHJldHVybiAnSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk8JXM+JyAlIEdlbmVyYXRvci50
eXBlX2J1aWxkZXJfc3RyaW5nX2Zvcl90eXBlKHR5cGUuZWxlbWVudF90eXBlKQorICAgICAgICBl
bGlmIGlzaW5zdGFuY2UodHlwZSwgUHJpbWl0aXZlVHlwZSk6CisgICAgICAgICAgICByZXR1cm4g
R2VuZXJhdG9yLmNwcF9uYW1lX2Zvcl9wcmltaXRpdmVfdHlwZSh0eXBlKQorCisgICAgQHN0YXRp
Y21ldGhvZAorICAgIGRlZiB0eXBlX2J1aWxkZXJfc3RyaW5nX2Zvcl90eXBlX21lbWJlcih0eXBl
X21lbWJlciwgb2JqZWN0X2RlY2xhcmF0aW9uKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZSh0eXBl
X21lbWJlci50eXBlLCBFbnVtVHlwZSkgYW5kIHR5cGVfbWVtYmVyLnR5cGUuaXNfYW5vbnltb3Vz
OgorICAgICAgICAgICAgcmV0dXJuICc6Oicuam9pbihbR2VuZXJhdG9yLnR5cGVfYnVpbGRlcl9z
dHJpbmdfZm9yX3R5cGUob2JqZWN0X2RlY2xhcmF0aW9uLnR5cGUpLCB1Y2ZpcnN0KHR5cGVfbWVt
YmVyLm1lbWJlcl9uYW1lKV0pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gR2Vu
ZXJhdG9yLnR5cGVfYnVpbGRlcl9zdHJpbmdfZm9yX3R5cGUodHlwZV9tZW1iZXIudHlwZSkKKwor
ICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgdHlwZV9zdHJpbmdfZm9yX3VuY2hlY2tlZF9mb3Jt
YWxfaW5fcGFyYW1ldGVyKHBhcmFtZXRlcik6CisgICAgICAgIF90eXBlID0gcGFyYW1ldGVyLnR5
cGUKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgQWxpYXNlZFR5cGUpOgorICAgICAgICAg
ICAgX3R5cGUgPSBfdHlwZS5hbGlhc2VkX3R5cGUgICMgRmFsbCB0aHJvdWdoIHRvIHByaW1pdGl2
ZS4KKworICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBFbnVtVHlwZSk6CisgICAgICAgICAg
ICBfdHlwZSA9IF90eXBlLnByaW1pdGl2ZV90eXBlICAjIEZhbGwgdGhyb3VnaCB0byBwcmltaXRp
dmUuCisKKyAgICAgICAgc2lnaWwgPSAnKicgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsIGVsc2Ug
JyYnCisgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIE9iamVjdFR5cGUpIG9yIF90eXBlLnF1
YWxpZmllZF9uYW1lKCkgaXMgJ29iamVjdCc6CisgICAgICAgICAgICByZXR1cm4gJ2NvbnN0IFJl
ZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4nICsgc2lnaWwKKyAgICAgICAgZWxpZiBp
c2luc3RhbmNlKF90eXBlLCBBcnJheVR5cGUpOgorICAgICAgICAgICAgIHJldHVybiAnY29uc3Qg
UmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXk+JyArIHNpZ2lsCisgICAgICAgIGVsaWYg
aXNpbnN0YW5jZShfdHlwZSwgUHJpbWl0aXZlVHlwZSk6CisgICAgICAgICAgICBjcHBfbmFtZSA9
IEdlbmVyYXRvci5jcHBfbmFtZV9mb3JfcHJpbWl0aXZlX3R5cGUoX3R5cGUpCisgICAgICAgICAg
ICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6CisgICAgICAgICAgICAgICAgcmV0dXJuICdjb25z
dCAlcyonICUgY3BwX25hbWUKKyAgICAgICAgICAgIGVsaWYgX3R5cGUucmF3X25hbWUoKSBpbiBb
J3N0cmluZyddOgorICAgICAgICAgICAgICAgIHJldHVybiAnY29uc3QgJXMmJyAlIGNwcF9uYW1l
CisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBjcHBfbmFtZQorCisg
ICAgICAgIHJldHVybiAidW5rbm93bl91bmNoZWNrZWRfZm9ybWFsX2luX3BhcmFtZXRlcl90eXBl
IgorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiB0eXBlX3N0cmluZ19mb3JfY2hlY2tlZF9m
b3JtYWxfaW5fcGFyYW1ldGVyKHBhcmFtZXRlcik6CisgICAgICAgIHJldHVybiBHZW5lcmF0b3Iu
dHlwZV9zdHJpbmdfZm9yX3R5cGVfd2l0aF9uYW1lKHBhcmFtZXRlci50eXBlLCBwYXJhbWV0ZXIu
cGFyYW1ldGVyX25hbWUsIHBhcmFtZXRlci5pc19vcHRpb25hbCkKKworICAgIEBzdGF0aWNtZXRo
b2QKKyAgICBkZWYgdHlwZV9zdHJpbmdfZm9yX3R5cGVfbWVtYmVyKG1lbWJlcik6CisgICAgICAg
IHJldHVybiBHZW5lcmF0b3IudHlwZV9zdHJpbmdfZm9yX3R5cGVfd2l0aF9uYW1lKG1lbWJlci50
eXBlLCBtZW1iZXIubWVtYmVyX25hbWUsIEZhbHNlKQorCisgICAgQHN0YXRpY21ldGhvZAorICAg
IGRlZiB0eXBlX3N0cmluZ19mb3JfdHlwZV93aXRoX25hbWUoX3R5cGUsIHR5cGVfbmFtZSwgaXNf
b3B0aW9uYWwpOgorICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCAoQXJyYXlUeXBlLCBPYmpl
Y3RUeXBlKSk6CisgICAgICAgICAgICByZXR1cm4gJ1Bhc3NSZWZQdHI8JXM+JyAlIEdlbmVyYXRv
ci50eXBlX2J1aWxkZXJfc3RyaW5nX2Zvcl90eXBlKF90eXBlKQorICAgICAgICBlbGlmIGlzaW5z
dGFuY2UoX3R5cGUsIEFsaWFzZWRUeXBlKToKKyAgICAgICAgICAgIGJ1aWxkZXJfdHlwZSA9IEdl
bmVyYXRvci50eXBlX2J1aWxkZXJfc3RyaW5nX2Zvcl90eXBlKF90eXBlKQorICAgICAgICAgICAg
aWYgaXNfb3B0aW9uYWw6CisgICAgICAgICAgICAgICAgcmV0dXJuICdjb25zdCAlcyogY29uc3Qn
ICUgYnVpbGRlcl90eXBlCisgICAgICAgICAgICBlbGlmIF90eXBlLmFsaWFzZWRfdHlwZS5xdWFs
aWZpZWRfbmFtZSgpIGluIFsnaW50ZWdlcicsICdudW1iZXInXToKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gR2VuZXJhdG9yLmNwcF9uYW1lX2Zvcl9wcmltaXRpdmVfdHlwZShfdHlwZS5hbGlhc2Vk
X3R5cGUpCisgICAgICAgICAgICBlbGlmIF90eXBlLmFsaWFzZWRfdHlwZS5xdWFsaWZpZWRfbmFt
ZSgpIGluIFsnc3RyaW5nJ106CisgICAgICAgICAgICAgICAgcmV0dXJuICdjb25zdCAlcyYnICUg
YnVpbGRlcl90eXBlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBi
dWlsZGVyX3R5cGUKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKF90eXBlLCBQcmltaXRpdmVUeXBl
KToKKyAgICAgICAgICAgIGNwcF9uYW1lID0gR2VuZXJhdG9yLmNwcF9uYW1lX2Zvcl9wcmltaXRp
dmVfdHlwZShfdHlwZSkKKyAgICAgICAgICAgIGlmIF90eXBlLnF1YWxpZmllZF9uYW1lKCkgaW4g
WydvYmplY3QnXToKKyAgICAgICAgICAgICAgICByZXR1cm4gJ1Bhc3NSZWZQdHI8SW5zcGVjdG9y
OjpJbnNwZWN0b3JPYmplY3Q+JworICAgICAgICAgICAgZWxpZiBfdHlwZS5xdWFsaWZpZWRfbmFt
ZSgpIGluIFsnYW55J106CisgICAgICAgICAgICAgICAgcmV0dXJuICdQYXNzUmVmUHRyPEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yVmFsdWU+JworICAgICAgICAgICAgZWxpZiBpc19vcHRpb25hbDoKKyAg
ICAgICAgICAgICAgICByZXR1cm4gJ2NvbnN0ICVzKiBjb25zdCcgJSBjcHBfbmFtZQorICAgICAg
ICAgICAgZWxpZiBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpIGluIFsnc3RyaW5nJ106CisgICAgICAg
ICAgICAgICAgcmV0dXJuICdjb25zdCAlcyYnICUgY3BwX25hbWUKKyAgICAgICAgICAgIGVsc2U6
CisgICAgICAgICAgICAgICAgcmV0dXJuIGNwcF9uYW1lCisgICAgICAgIGVsaWYgaXNpbnN0YW5j
ZShfdHlwZSwgRW51bVR5cGUpOgorICAgICAgICAgICAgaWYgX3R5cGUuaXNfYW5vbnltb3VzOgor
ICAgICAgICAgICAgICAgIGVudW1fdHlwZV9uYW1lID0gdWNmaXJzdCh0eXBlX25hbWUpCisgICAg
ICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGVudW1fdHlwZV9uYW1lID0gJ0luc3BlY3Rv
cjo6VHlwZUJ1aWxkZXI6OiVzOjolcycgJSAoX3R5cGUudHlwZV9kb21haW4oKS5kb21haW5fbmFt
ZSwgX3R5cGUucmF3X25hbWUoKSkKKworICAgICAgICAgICAgaWYgaXNfb3B0aW9uYWw6CisgICAg
ICAgICAgICAgICAgcmV0dXJuICclcyonICUgZW51bV90eXBlX25hbWUKKyAgICAgICAgICAgIGVs
c2U6CisgICAgICAgICAgICAgICAgcmV0dXJuICclcycgJSBlbnVtX3R5cGVfbmFtZQorCisgICAg
QHN0YXRpY21ldGhvZAorICAgIGRlZiB0eXBlX3N0cmluZ19mb3JfZm9ybWFsX291dF9wYXJhbWV0
ZXIocGFyYW1ldGVyKToKKyAgICAgICAgX3R5cGUgPSBwYXJhbWV0ZXIudHlwZQorICAgICAgICBp
ZiBpc2luc3RhbmNlKF90eXBlLCAoT2JqZWN0VHlwZSwgQXJyYXlUeXBlKSk6CisgICAgICAgICAg
ICByZXR1cm4gJ1JlZlB0cjwlcz4mJyAlIEdlbmVyYXRvci50eXBlX2J1aWxkZXJfc3RyaW5nX2Zv
cl90eXBlKF90eXBlKQorICAgICAgICBlbGlmIGlzaW5zdGFuY2UoX3R5cGUsIEFsaWFzZWRUeXBl
KToKKyAgICAgICAgICAgIGJ1aWxkZXJfdHlwZSA9IEdlbmVyYXRvci50eXBlX2J1aWxkZXJfc3Ry
aW5nX2Zvcl90eXBlKF90eXBlKQorICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFs
OgorICAgICAgICAgICAgICAgIHJldHVybiAnY29uc3QgJXMqIGNvbnN0JyAlIGJ1aWxkZXJfdHlw
ZQorICAgICAgICAgICAgZWxpZiBfdHlwZS5hbGlhc2VkX3R5cGUucXVhbGlmaWVkX25hbWUoKSBp
biBbJ2ludGVnZXInLCAnbnVtYmVyJ106CisgICAgICAgICAgICAgICAgcmV0dXJuIEdlbmVyYXRv
ci5jcHBfbmFtZV9mb3JfcHJpbWl0aXZlX3R5cGUoX3R5cGUuYWxpYXNlZF90eXBlKSArICcqJwor
ICAgICAgICAgICAgZWxpZiBfdHlwZS5hbGlhc2VkX3R5cGUucXVhbGlmaWVkX25hbWUoKSBpbiBb
J3N0cmluZyddOgorICAgICAgICAgICAgICAgIHJldHVybiAnJXMqJyAlIGJ1aWxkZXJfdHlwZQor
ICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gYnVpbGRlcl90eXBlCisg
ICAgICAgIGVsaWYgaXNpbnN0YW5jZShfdHlwZSwgUHJpbWl0aXZlVHlwZSk6CisgICAgICAgICAg
ICBjcHBfbmFtZSA9IEdlbmVyYXRvci5jcHBfbmFtZV9mb3JfcHJpbWl0aXZlX3R5cGUoX3R5cGUp
CisgICAgICAgICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6CisgICAgICAgICAgICAgICAg
cmV0dXJuICJJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8JXM+KiIgJSBjcHBfbmFt
ZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gJyVzKicgJSBjcHBf
bmFtZQorICAgICAgICBlbGlmIGlzaW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKToKKyAgICAgICAg
ICAgIGlmIF90eXBlLmlzX2Fub255bW91czoKKyAgICAgICAgICAgICAgICByZXR1cm4gJ0luc3Bl
Y3RvciVzQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjolcyonICUgKF90eXBlLnR5cGVfZG9tYWlu
KCkuZG9tYWluX25hbWUsIHVjZmlyc3QocGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKSkKKyAgICAg
ICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuICdJbnNwZWN0b3I6OlR5cGVCdWls
ZGVyOjolczo6JXMqJyAlIChfdHlwZS50eXBlX2RvbWFpbigpLmRvbWFpbl9uYW1lLCBfdHlwZS5y
YXdfbmFtZSgpKQorCisgICAgICAgIHJldHVybiAidW5rbm93bl9mb3JtYWxfb3V0X3BhcmFtZXRl
cl90eXBlIgorCisgICAgIyBGSVhNRTogdGhpcyBpcyBvbmx5IHNsaWdodGx5IGRpZmZlcmVudCBm
cm9tIG91dCBwYXJhbWV0ZXJzOyB0aGV5IGNvdWxkIGJlIHVuaWZpZWQuCisgICAgQHN0YXRpY21l
dGhvZAorICAgIGRlZiB0eXBlX3N0cmluZ19mb3JfZm9ybWFsX2FzeW5jX3BhcmFtZXRlcihwYXJh
bWV0ZXIpOgorICAgICAgICBfdHlwZSA9IHBhcmFtZXRlci50eXBlCisgICAgICAgIGlmIGlzaW5z
dGFuY2UoX3R5cGUsIEFsaWFzZWRUeXBlKToKKyAgICAgICAgICAgIF90eXBlID0gX3R5cGUuYWxp
YXNlZF90eXBlICAjIEZhbGwgdGhyb3VnaC4KKworICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBl
LCBFbnVtVHlwZSk6CisgICAgICAgICAgICBfdHlwZSA9IF90eXBlLnByaW1pdGl2ZV90eXBlICAj
IEZhbGwgdGhyb3VnaC4KKworICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCAoT2JqZWN0VHlw
ZSwgQXJyYXlUeXBlKSk6CisgICAgICAgICAgICByZXR1cm4gJ1Bhc3NSZWZQdHI8JXM+JyAlIEdl
bmVyYXRvci50eXBlX2J1aWxkZXJfc3RyaW5nX2Zvcl90eXBlKF90eXBlKQorICAgICAgICBlbGlm
IGlzaW5zdGFuY2UoX3R5cGUsIFByaW1pdGl2ZVR5cGUpOgorICAgICAgICAgICAgY3BwX25hbWUg
PSBHZW5lcmF0b3IuY3BwX25hbWVfZm9yX3ByaW1pdGl2ZV90eXBlKF90eXBlKQorICAgICAgICAg
ICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAgIHJldHVybiAiSW5z
cGVjdG9yOjpUeXBlQnVpbGRlcjo6T3B0T3V0cHV0PCVzPioiICUgY3BwX25hbWUKKyAgICAgICAg
ICAgIGVsaWYgX3R5cGUucXVhbGlmaWVkX25hbWUoKSBpbiBbJ2ludGVnZXInLCAnbnVtYmVyJ106
CisgICAgICAgICAgICAgICAgcmV0dXJuIEdlbmVyYXRvci5jcHBfbmFtZV9mb3JfcHJpbWl0aXZl
X3R5cGUoX3R5cGUpCisgICAgICAgICAgICBlbGlmIF90eXBlLnF1YWxpZmllZF9uYW1lKCkgaW4g
WydzdHJpbmcnXToKKyAgICAgICAgICAgICAgICByZXR1cm4gJ2NvbnN0ICVzJicgJSBjcHBfbmFt
ZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gY3BwX25hbWUKKwor
ICAgICAgICByZXR1cm4gInVua25vd25fZm9ybWFsX2FzeW5jX3BhcmFtZXRlcl90eXBlIgorCisg
ICAgIyBJbi1wYXJhbWV0ZXJzIGRvbid0IHVzZSBidWlsZGVyIHR5cGVzLCBiZWNhdXNlIHRoZXkg
Y291bGQgYmUgcGFzc2VkCisgICAgIyAib3BlbiB0eXBlcyIgdGhhdCBhcmUgbWFudWFsbHkgY29u
c3RydWN0ZWQgb3V0IG9mIEluc3BlY3Rvck9iamVjdHMuCisKKyAgICAjIEZJWE1FOiBPbmx5IHBh
cmFtZXRlcnMgdGhhdCBhcmUgYWN0dWFsbHkgb3BlbiB0eXBlcyBzaG91bGQgbmVlZCBub24tYnVp
bGRlciBwYXJhbWV0ZXIgdHlwZXMuCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiB0eXBlX3N0
cmluZ19mb3Jfc3RhY2tfaW5fcGFyYW1ldGVyKHBhcmFtZXRlcik6CisgICAgICAgIF90eXBlID0g
cGFyYW1ldGVyLnR5cGUKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgQWxpYXNlZFR5cGUp
OgorICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5hbGlhc2VkX3R5cGUgICMgRmFsbCB0aHJvdWdo
LgorCisgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKToKKyAgICAgICAgICAg
IF90eXBlID0gX3R5cGUucHJpbWl0aXZlX3R5cGUgICMgRmFsbCB0aHJvdWdoLgorCisgICAgICAg
IGlmIGlzaW5zdGFuY2UoX3R5cGUsIE9iamVjdFR5cGUpOgorICAgICAgICAgICAgcmV0dXJuICJS
ZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IgorICAgICAgICBlbGlmIGlzaW5zdGFu
Y2UoX3R5cGUsIEFycmF5VHlwZSk6CisgICAgICAgICAgICByZXR1cm4gIlJlZlB0cjxJbnNwZWN0
b3I6Okluc3BlY3RvckFycmF5PiIKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKF90eXBlLCBQcmlt
aXRpdmVUeXBlKToKKyAgICAgICAgICAgIGNwcF9uYW1lID0gR2VuZXJhdG9yLmNwcF9uYW1lX2Zv
cl9wcmltaXRpdmVfdHlwZShfdHlwZSkKKyAgICAgICAgICAgIGlmIF90eXBlLnF1YWxpZmllZF9u
YW1lKCkgaW4gWydhbnknLCAnb2JqZWN0J106CisgICAgICAgICAgICAgICAgcmV0dXJuICJSZWZQ
dHI8JXM+IiAlIEdlbmVyYXRvci5jcHBfbmFtZV9mb3JfcHJpbWl0aXZlX3R5cGUoX3R5cGUpCisg
ICAgICAgICAgICBlbGlmIHBhcmFtZXRlci5pc19vcHRpb25hbCBhbmQgX3R5cGUucXVhbGlmaWVk
X25hbWUoKSBub3QgaW4gWydib29sZWFuJywgJ3N0cmluZycsICdpbnRlZ2VyJ106CisgICAgICAg
ICAgICAgICAgcmV0dXJuICJJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8JXM+IiAl
IGNwcF9uYW1lCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBjcHBf
bmFtZQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiB0eXBlX3N0cmluZ19mb3Jfc3RhY2tf
b3V0X3BhcmFtZXRlcihwYXJhbWV0ZXIpOgorICAgICAgICBfdHlwZSA9IHBhcmFtZXRlci50eXBl
CisgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIChBcnJheVR5cGUsIE9iamVjdFR5cGUpKToK
KyAgICAgICAgICAgIHJldHVybiAnUmVmUHRyPCVzPicgJSBHZW5lcmF0b3IudHlwZV9idWlsZGVy
X3N0cmluZ19mb3JfdHlwZShfdHlwZSkKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKF90eXBlLCBB
bGlhc2VkVHlwZSk6CisgICAgICAgICAgICByZXR1cm4gJyVzJyAlIEdlbmVyYXRvci50eXBlX2J1
aWxkZXJfc3RyaW5nX2Zvcl90eXBlKF90eXBlKQorICAgICAgICBlbGlmIGlzaW5zdGFuY2UoX3R5
cGUsIFByaW1pdGl2ZVR5cGUpOgorICAgICAgICAgICAgY3BwX25hbWUgPSBHZW5lcmF0b3IuY3Bw
X25hbWVfZm9yX3ByaW1pdGl2ZV90eXBlKF90eXBlKQorICAgICAgICAgICAgaWYgcGFyYW1ldGVy
LmlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAgIHJldHVybiAiSW5zcGVjdG9yOjpUeXBlQnVp
bGRlcjo6T3B0T3V0cHV0PCVzPiIgJSBjcHBfbmFtZQorICAgICAgICAgICAgZWxzZToKKyAgICAg
ICAgICAgICAgICByZXR1cm4gY3BwX25hbWUKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKF90eXBl
LCBFbnVtVHlwZSk6CisgICAgICAgICAgICBpZiBfdHlwZS5pc19hbm9ueW1vdXM6CisgICAgICAg
ICAgICAgICAgcmV0dXJuICdJbnNwZWN0b3Ilc0JhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6JXMn
ICUgKF90eXBlLnR5cGVfZG9tYWluKCkuZG9tYWluX25hbWUsIHVjZmlyc3QocGFyYW1ldGVyLnBh
cmFtZXRlcl9uYW1lKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJu
ICdJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjolczo6JXMnICUgKF90eXBlLnR5cGVfZG9tYWluKCku
ZG9tYWluX25hbWUsIF90eXBlLnJhd19uYW1lKCkpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAg
ZGVmIGFzc2VydGlvbl9tZXRob2RfZm9yX3R5cGVfbWVtYmVyKHR5cGVfbWVtYmVyLCBvYmplY3Rf
ZGVjbGFyYXRpb24pOgorCisgICAgICAgIGRlZiBhc3NlcnRpb25fbWV0aG9kX2Zvcl90eXBlKF90
eXBlKToKKyAgICAgICAgICAgIHJldHVybiAnQmluZGluZ1RyYWl0czwlcz46OmFzc2VydENvcnJl
Y3RWYWx1ZScgJSBHZW5lcmF0b3IudHlwZV9idWlsZGVyX3N0cmluZ19mb3JfdHlwZShfdHlwZSkK
KworICAgICAgICBpZiBpc2luc3RhbmNlKHR5cGVfbWVtYmVyLnR5cGUsIEFsaWFzZWRUeXBlKToK
KyAgICAgICAgICAgIHJldHVybiBhc3NlcnRpb25fbWV0aG9kX2Zvcl90eXBlKHR5cGVfbWVtYmVy
LnR5cGUuYWxpYXNlZF90eXBlKQorICAgICAgICBlbGlmIGlzaW5zdGFuY2UodHlwZV9tZW1iZXIu
dHlwZSwgRW51bVR5cGUpIGFuZCB0eXBlX21lbWJlci50eXBlLmlzX2Fub255bW91czoKKyAgICAg
ICAgICAgIHJldHVybiAnQmluZGluZ1RyYWl0czwlcz46OmFzc2VydENvcnJlY3RWYWx1ZScgJSBH
ZW5lcmF0b3IudHlwZV9idWlsZGVyX3N0cmluZ19mb3JfdHlwZV9tZW1iZXIodHlwZV9tZW1iZXIs
IG9iamVjdF9kZWNsYXJhdGlvbikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBh
c3NlcnRpb25fbWV0aG9kX2Zvcl90eXBlKHR5cGVfbWVtYmVyLnR5cGUpCisKKyAgICBAc3RhdGlj
bWV0aG9kCisgICAgZGVmIGNwcF9uYW1lX2Zvcl9wcmltaXRpdmVfdHlwZSh0eXBlKToKKyAgICAg
ICAgcmV0dXJuIF9QUklNSVRJVkVfVE9fQ1BQX05BTUVfTUFQLmdldCh0eXBlLnJhd19uYW1lKCkp
CisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGpzX25hbWVfZm9yX3BhcmFtZXRlcl90eXBl
KHR5cGUpOgorICAgICAgICBpZiBpc2luc3RhbmNlKHR5cGUsIChBcnJheVR5cGUsIE9iamVjdFR5
cGUpKToKKyAgICAgICAgICAgIHJldHVybiAnb2JqZWN0JworICAgICAgICBlbGlmIGlzaW5zdGFu
Y2UodHlwZSwgQWxpYXNlZFR5cGUpOgorICAgICAgICAgICAgcmV0dXJuIEdlbmVyYXRvci5qc19u
YW1lX2Zvcl9wYXJhbWV0ZXJfdHlwZSh0eXBlLmFsaWFzZWRfdHlwZSkKKyAgICAgICAgZWxpZiBp
c2luc3RhbmNlKHR5cGUsIEVudW1UeXBlKToKKyAgICAgICAgICAgcmV0dXJuIEdlbmVyYXRvci5q
c19uYW1lX2Zvcl9wYXJhbWV0ZXJfdHlwZSh0eXBlLnByaW1pdGl2ZV90eXBlKQorICAgICAgICBl
bGlmIGlzaW5zdGFuY2UodHlwZSwgUHJpbWl0aXZlVHlwZSk6CisgICAgICAgICAgICBpZiB0eXBl
LnF1YWxpZmllZF9uYW1lKCkgaW4gWydvYmplY3QnLCAnYW55J106CisgICAgICAgICAgICAgICAg
cmV0dXJuICdvYmplY3QnCisgICAgICAgICAgICBlbGlmIHR5cGUucXVhbGlmaWVkX25hbWUoKSBp
biBbJ2ludGVnZXInLCAnbnVtYmVyJ106CisgICAgICAgICAgICAgICAgcmV0dXJuICdudW1iZXIn
CisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiB0eXBlLnF1YWxpZmll
ZF9uYW1lKCkKKworICAgICMgRGVjaWRlIHdoZXRoZXIgY2VydGFpbiBoZWxwZXJzIGFyZSBuZWNl
c2FyeSBpbiBhIHNpdHVhdGlvbi4KKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIHNob3VsZF91
c2Vfd3JhcHBlcl9mb3JfcmV0dXJuX3R5cGUodHlwZSk6CisgICAgICAgIHJldHVybiBub3QgaXNp
bnN0YW5jZSh0eXBlLCAoQXJyYXlUeXBlLCBPYmplY3RUeXBlKSkKKworICAgIEBzdGF0aWNtZXRo
b2QKKyAgICBkZWYgc2hvdWxkX3Bhc3NfYnlfY29weV9mb3JfcmV0dXJuX3R5cGUodHlwZSk6Cisg
ICAgICAgIHJldHVybiBpc2luc3RhbmNlKHR5cGUsIChBcnJheVR5cGUsIE9iamVjdFR5cGUpKSBv
ciAoaXNpbnN0YW5jZSh0eXBlLCAoUHJpbWl0aXZlVHlwZSkpIGFuZCB0eXBlLnF1YWxpZmllZF9u
YW1lKCkgPT0gIm9iamVjdCIpCisKKworY2xhc3MgRHVtbXlHZW5lcmF0b3IoR2VuZXJhdG9yKToK
KyAgICBwYXNzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvY29kZWdlbi9nZW5lcmF0b3JfdGVtcGxhdGVzLnB5IGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdG9yX3RlbXBsYXRlcy5weQpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi42MDZiZDc1M2M2NGU2ZGQ1NjIxMDc4ZWUwM2JhZGZmNjM4YTliNWU4Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVn
ZW4vZ2VuZXJhdG9yX3RlbXBsYXRlcy5weQpAQCAtMCwwICsxLDI2MyBAQAorIyEvdXNyL2Jpbi9l
bnYgcHl0aG9uCisjIENvcHlyaWdodCAoYykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisjIENvcHlyaWdodCAoYykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1l
dDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyMgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisj
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisjIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorCisjIEdlbmVyYXRvciB0ZW1wbGF0ZXMsIHdoaWNoIGNhbiBiZSBmaWxsZWQgd2l0aCBzdHJp
bmcuVGVtcGxhdGUuCisjIEZvbGxvd2luZyBhcmUgY2xhc3NlcyB0aGF0IGZpbGwgdGhlIHRlbXBs
YXRlcyBmcm9tIHRoZSB0eXBlY2hlY2tlZCBtb2RlbC4KKworCitjbGFzcyBHZW5lcmF0b3JUZW1w
bGF0ZXM6CisgICAgQ29weXJpZ2h0QmxvY2sgPSAoCisgICAgIiIiLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSAk
e2lucHV0RmlsZW5hbWV9CisvLyBieSB0aGUgc2NyaXB0OiBKYXZhU2NyaXB0Q29yZS9yZXBsYXkv
c2NyaXB0cy9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5IiIiKQorCisgICAgQ3BwSGVhZGVyUHJl
bHVkZSA9ICgKKyAgICAiIiIjaWZuZGVmICR7aGVhZGVyR3VhcmRTdHJpbmd9CisjZGVmaW5lICR7
aGVhZGVyR3VhcmRTdHJpbmd9CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCiske2luY2x1ZGVz
fQorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworJHt0eXBlZGVmc30iIiIpCisKKyAgICBDcHBI
ZWFkZXJQb3N0bHVkZSA9ICgKKyAgICAiIiJ9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2Vu
ZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyNlbmRpZiAvLyAhZGVmaW5lZCgke2hlYWRlckd1
YXJkU3RyaW5nfSkiIiIpCisKKyAgICBDcHBJbXBsZW1lbnRhdGlvblByZWx1ZGUgPSAoCisgICAg
IiIiI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgJHtwcmltYXJ5SW5jbHVkZX0KKworI2lm
IEVOQUJMRShJTlNQRUNUT1IpCisKKyR7c2Vjb25kYXJ5SW5jbHVkZXN9CisKK25hbWVzcGFjZSBJ
bnNwZWN0b3IgeyIiIikKKworICAgIENwcEltcGxlbWVudGF0aW9uUG9zdGx1ZGUgPSAoCisgICAg
IiIifSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9S
KQorIiIiKQorCisgICAgQmFja2VuZERpc3BhdGNoZXJIZWFkZXJEb21haW5IYW5kbGVyRGVjbGFy
YXRpb24gPSAoCisgICAgIiIiJHtjbGFzc0FuZEV4cG9ydE1hY3JvfSBJbnNwZWN0b3Ike2RvbWFp
bk5hbWV9QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKK3B1YmxpYzoKKyR7Y29tbWFuZERlY2xh
cmF0aW9uc30KK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIH5JbnNwZWN0b3Ike2RvbWFpbk5hbWV9
QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCk7Cit9OyIiIikKKworICAgIEJhY2tlbmREaXNwYXRj
aGVySGVhZGVyRG9tYWluRGlzcGF0Y2hlckRlY2xhcmF0aW9uID0gKAorICAgICIiIiR7Y2xhc3NB
bmRFeHBvcnRNYWNyb30gSW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyIGZp
bmFsIDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yU3VwcGxlbWVudGFsQmFja2VuZERpc3Bh
dGNoZXIgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3RvciR7ZG9tYWlu
TmFtZX1CYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXIqLCBJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyKik7CisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoKGxvbmcgY2FsbElkLCBjb25zdCBTdHJp
bmcmIG1ldGhvZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gbWVzc2Fn
ZSkgb3ZlcnJpZGU7Ciske2NvbW1hbmREZWNsYXJhdGlvbnN9Citwcml2YXRlOgorICAgIEluc3Bl
Y3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcihJbnNwZWN0b3I6Okluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyKiwgSW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVy
SGFuZGxlciopOworICAgIEluc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXIqIG1fYWdlbnQ7Cit9OyIiIikKKworICAgIEJhY2tlbmREaXNwYXRjaGVySGVhZGVyQXN5
bmNDb21tYW5kRGVjbGFyYXRpb24gPSAoCisgICAgIiIiICAgIGNsYXNzICR7Y2FsbGJhY2tOYW1l
fSA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpDYWxsYmFj
a0Jhc2UgeworICAgIHB1YmxpYzoKKyAgICAgICAgJHtjYWxsYmFja05hbWV9KFBhc3NSZWZQdHI8
SW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4sIGludCBpZCk7CisgICAgICAg
IHZvaWQgc2VuZFN1Y2Nlc3MoJHtvdXRQYXJhbWV0ZXJzfSk7CisgICAgfTsKKyAgICB2aXJ0dWFs
IHZvaWQgJHtjb21tYW5kTmFtZX0oJHtpblBhcmFtZXRlcnN9KSA9IDA7IiIiKQorCisgICAgQmFj
a2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvblNtYWxsU3dpdGNoID0gKAorICAgICIiInZvaWQg
SW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIGNh
bGxJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBt
ZXNzYWdlKQoreworICAgIFJlZjxJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNo
ZXI+IHByb3RlY3QoKnRoaXMpOworCiske2Rpc3BhdGNoQ2FzZXN9CisgICAgZWxzZQorICAgICAg
ICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIEluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgU3RyaW5nKCInIikgKyAiJHtk
b21haW5OYW1lfSIgKyAnLicgKyBtZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7Cit9IiIiKQor
CisgICAgQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkxhcmdlU3dpdGNoID0gKAorIiIi
dm9pZCBJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxv
bmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IG1lc3NhZ2UpCit7CisgICAgUmVmPEluc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlz
cGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7CisKKyAgICB0eXBlZGVmIHZvaWQgKEluc3BlY3RvciR7
ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcjo6KkNhbGxIYW5kbGVyKShsb25nIGNhbGxJZCwg
Y29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpOworICAgIHR5cGVkZWYg
SGFzaE1hcDxTdHJpbmcsIENhbGxIYW5kbGVyPiBEaXNwYXRjaE1hcDsKKyAgICBERVBSRUNBVEVE
X0RFRklORV9TVEFUSUNfTE9DQUwoRGlzcGF0Y2hNYXAsIGRpc3BhdGNoTWFwLCAoKSk7CisgICAg
aWYgKGRpc3BhdGNoTWFwLmlzRW1wdHkoKSkgeworICAgICAgICBzdGF0aWMgY29uc3Qgc3RydWN0
IE1ldGhvZFRhYmxlIHsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIqIG5hbWU7CisgICAgICAgICAg
ICBDYWxsSGFuZGxlciBoYW5kbGVyOworICAgICAgICB9IGNvbW1hbmRzW10gPSB7Ciske2Rpc3Bh
dGNoQ2FzZXN9CisgICAgICAgIH07CisgICAgICAgIHNpemVfdCBsZW5ndGggPSBXVEZfQVJSQVlf
TEVOR1RIKGNvbW1hbmRzKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7
ICsraSkKKyAgICAgICAgICAgIGRpc3BhdGNoTWFwLmFkZChjb21tYW5kc1tpXS5uYW1lLCBjb21t
YW5kc1tpXS5oYW5kbGVyKTsKKyAgICB9CisKKyAgICBIYXNoTWFwPFN0cmluZywgQ2FsbEhhbmRs
ZXI+OjppdGVyYXRvciBpdCA9IGRpc3BhdGNoTWFwLmZpbmQobWV0aG9kKTsKKyAgICBpZiAoaXQg
PT0gZGlzcGF0Y2hNYXAuZW5kKCkpIHsKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVw
b3J0UHJvdG9jb2xFcnJvcigmY2FsbElkLCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0
aG9kTm90Rm91bmQsIFN0cmluZygiJyIpICsgIiR7ZG9tYWluTmFtZX0iICsgJy4nICsgbWV0aG9k
ICsgIicgd2FzIG5vdCBmb3VuZCIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgKCgq
dGhpcykuKml0LT52YWx1ZSkoY2FsbElkLCAqbWVzc2FnZS5nZXQoKSk7Cit9IiIiKQorCisgICAg
QmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkRvbWFpbkNvbnN0cnVjdG9yID0gKAorICAg
ICIiIlBhc3NSZWZQdHI8SW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyPiBJ
bnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXI6OmNyZWF0ZShJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIsIEluc3BlY3RvciR7ZG9tYWluTmFt
ZX1CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQoreworICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgSW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNw
YXRjaGVyLCBhZ2VudCkpOworfQorCitJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3Bh
dGNoZXI6Okluc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcihJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIsIEluc3BlY3RvciR7ZG9tYWluTmFt
ZX1CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQorICAgIDogSW5zcGVjdG9yU3VwcGxl
bWVudGFsQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIpCisgICAgLCBtX2FnZW50
KGFnZW50KQoreworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZv
ckRvbWFpbihBU0NJSUxpdGVyYWwoIiR7ZG9tYWluTmFtZX0iKSwgdGhpcyk7Cit9IiIiKQorCisg
ICAgQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvblByZXBhcmVDb21tYW5kQXJndW1lbnRz
ID0gKAorIiIiICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNw
ZWN0b3JBcnJheTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1z
Q29udGFpbmVyID0gbWVzc2FnZS5nZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJwYXJhbXMiKSk7Cisg
ICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIu
Z2V0KCk7CisgICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xF
cnJvcnMuZ2V0KCk7Ciske2luUGFyYW1ldGVyRGVjbGFyYXRpb25zfQorICAgIGlmIChwcm90b2Nv
bEVycm9ycy0+bGVuZ3RoKCkpIHsKKyAgICAgICAgU3RyaW5nIGVycm9yTWVzc2FnZSA9IFN0cmlu
Zzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgXCclc1wnIGNhbid0IGJlIHByb2Nl
c3NlZCIsICIke2RvbWFpbk5hbWV9LiR7Y29tbWFuZE5hbWV9Iik7CisgICAgICAgIG1fYmFja2Vu
ZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXI6OkludmFsaWRQYXJhbXMsIGVycm9yTWVzc2FnZSwgcHJvdG9jb2xFcnJvcnMu
cmVsZWFzZSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyIiIikKKworICAgIEJhY2tlbmRE
aXNwYXRjaGVySW1wbGVtZW50YXRpb25Bc3luY0NvbW1hbmQgPSAoCisiIiJJbnNwZWN0b3Ike2Rv
bWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjoke2NhbGxiYWNrTmFtZX06OiR7Y2Fs
bGJhY2tOYW1lfShQYXNzUmVmUHRyPEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiBiYWNrZW5k
RGlzcGF0Y2hlciwgaW50IGlkKSA6IEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXI6OkNhbGxiYWNrQmFzZShiYWNrZW5kRGlzcGF0Y2hlciwgaWQpIHsgfQorCit2b2lkIEluc3Bl
Y3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OiR7Y2FsbGJhY2tOYW1l
fTo6c2VuZFN1Y2Nlc3MoJHtmb3JtYWxQYXJhbWV0ZXJzfSkKK3sKKyAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBqc29uTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ciske291
dFBhcmFtZXRlckFzc2lnbm1lbnRzfQorICAgIHNlbmRJZkFjdGl2ZShqc29uTWVzc2FnZSwgRXJy
b3JTdHJpbmcoKSk7Cit9IiIiKQorCisgICAgRnJvbnRlbmREaXNwYXRjaGVyRG9tYWluRGlzcGF0
Y2hlckRlY2xhcmF0aW9uID0gKAorIiIiJHtjbGFzc0FuZEV4cG9ydE1hY3JvfSBJbnNwZWN0b3Ik
e2RvbWFpbk5hbWV9RnJvbnRlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICBJbnNwZWN0b3Ik
e2RvbWFpbk5hbWV9RnJvbnRlbmREaXNwYXRjaGVyKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCog
aW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSA6IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKGlu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyB9Ciske2V2ZW50RGVjbGFyYXRpb25zfQorcHJpdmF0
ZToKKyAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsOworfTsiIiIpCisKKyAgICBUeXBlQnVpbGRlckRlY2xhcmF0aW9uUHJlbHVkZSA9ICgKKyIi
IiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CisgICAgY2xhc3MgQnVpbGRlciB7CisgICAgcHJpdmF0
ZToKKyAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsK
KworICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0
U3RhdGUoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8
QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CisgICAgICAgIH0KKworICAgICAgICBCdWls
ZGVyKFBhc3NSZWZQdHI8Lyoke29iamVjdFR5cGV9Ki9JbnNwZWN0b3I6Okluc3BlY3Rvck9iamVj
dD4gcHRyKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBO
b0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKKyAgICAgICAg
ICAgIG1fcmVzdWx0ID0gcHRyOworICAgICAgICB9CisgICAgICAgIGZyaWVuZCBjbGFzcyAke29i
amVjdFR5cGV9OworICAgIHB1YmxpYzoiIiIpCisKKyAgICBUeXBlQnVpbGRlckRlY2xhcmF0aW9u
UG9zdGx1ZGUgPSAoCisiIiIKKyAgICAgICAgb3BlcmF0b3IgUmVmUHRyPCR7b2JqZWN0VHlwZX0+
JiAoKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxG
aWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOworICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoc2l6ZW9mKCR7b2JqZWN0VHlwZX0pID09IHNpemVvZihJbnNwZWN0b3I6Okluc3BlY3Rvck9i
amVjdCksIGNhbm5vdF9jYXN0KTsKKyAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2Fz
dDxSZWZQdHI8JHtvYmplY3RUeXBlfT4qPigmbV9yZXN1bHQpOworICAgICAgICB9CisKKyAgICAg
ICAgUGFzc1JlZlB0cjwke29iamVjdFR5cGV9PiByZWxlYXNlKCkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIFJlZlB0cjwke29iamVjdFR5cGV9PigqdGhpcykucmVsZWFzZSgpOworICAg
ICAgICB9CisgICAgfTsKKworICAgIC8qCisgICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgor
JHtjb25zdHJ1Y3RvckV4YW1wbGV9CisgICAgICovCisgICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVs
ZHNTZXQ+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1Nl
dD4oSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpKTsKKyAgICB9CisgICAgdHlw
ZWRlZiBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpTdHJ1Y3RJdGVtVHJhaXRzIEl0ZW1UcmFpdHM7
IiIiKQorCisgICAgVHlwZUJ1aWxkZXJPYmplY3RSdW50aW1lQ2FzdCA9ICgKKyIiIlBhc3NSZWZQ
dHI8JHtvYmplY3RUeXBlfT4gQmluZGluZ1RyYWl0czwke29iamVjdFR5cGV9Pjo6cnVudGltZUNh
c3QoUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiB2YWx1ZSkKK3sKKyAgICBS
ZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IG9iamVjdDsKKyAgICBib29sIGNhc3RS
ZXMgPSB2YWx1ZS0+YXNPYmplY3QoJm9iamVjdCk7CisgICAgQVNTRVJUX1VOVVNFRChjYXN0UmVz
LCBjYXN0UmVzKTsKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgQmluZGluZ1RyYWl0czwke29i
amVjdFR5cGV9Pjo6YXNzZXJ0Q29ycmVjdFZhbHVlKG9iamVjdC5nZXQoKSk7CisjZW5kaWYgIC8v
ICFBU1NFUlRfRElTQUJMRUQKKyAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoJHtvYmplY3RUeXBl
fSkgPT0gc2l6ZW9mKEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0QmFzZSksIHR5cGVfY2FzdF9w
cm9ibGVtKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8JHtvYmplY3RUeXBlfSo+KHN0YXRpY19j
YXN0PEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0QmFzZSo+KG9iamVjdC5nZXQoKSkpOworfQor
IiIiCispCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvY29kZWdlbi9tb2RlbHMucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvY29kZWdlbi9tb2RlbHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTgyODdlZDUxY2IyNDY2Mzc4MzMy
YjQ3NGZhMjJlZDg4OWFjMTA3OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL21vZGVscy5weQpAQCAtMCwwICsxLDU3MCBA
QAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoYykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisjIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyMgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgbG9nZ2luZworCisjIFVzZSBhIGdsb2JhbCBs
b2dnZXIsIHdoaWNoIG5vcm1hbGx5IG9ubHkgbG9ncyBlcnJvcnMuCisjIEl0IGNhbiBiZSBjb25m
aWd1cmVkIHRvIGxvZyBkZWJ1ZyBtZXNzYWdlcyBmcm9tIHRoZSBDTEkuCitsb2dnaW5nLmJhc2lj
Q29uZmlnKGZvcm1hdD0nJShsZXZlbG5hbWUpczogJShtZXNzYWdlKXMnLCBsZXZlbD1sb2dnaW5n
LkVSUk9SKQorbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2JhbCcpCisKKworX0ZSQU1FV09S
S19DT05GSUdfTUFQID0geworICAgICJHbG9iYWwiOiB7CisgICAgICAgICJwcmVmaXgiOiAiIiwK
KyAgICB9LAorCisgICAgIldURiI6IHsKKyAgICAgICAgInByZWZpeCI6ICJXVEYiLAorICAgIH0s
CisgICAgIkphdmFTY3JpcHRDb3JlIjogeworICAgICAgICAicHJlZml4IjogIkpTIiwKKyAgICAg
ICAgImV4cG9ydF9tYWNybyI6ICJKU19FWFBPUlRfUFJJVkFURSIKKyAgICB9LAorICAgICJXZWJD
b3JlIjogeworICAgICAgICAicHJlZml4IjogIldlYiIsCisgICAgfSwKKyAgICAjIFVzZWQgZm9y
IGNvZGUgZ2VuZXJhdG9yIHRlc3RzLgorICAgICJUZXN0IjogeworICAgICAgICAicHJlZml4Ijog
IlRlc3QiLAorICAgIH0KK30KKworCisjIEZJWE1FOiBUaGVzZSBzaG91bGQgYmUgY29udmVydGVk
IGludG8gSlNPTiBwcm9wZXJ0aWVzLCBvciByZW5hbWVkLgorX1RZUEVTX05FRURJTkdfUkVOQU1F
X1dPUktBUk9VTkRTID0geworICAgICdSR0JBJzogJ1JnYmEnLAorICAgICMgRm9yIHRlc3Rpbmcg
b25seS4KKyAgICAnVW5wbGVhc2FudE5hbWUnOiAnSGFwcHlOYW1lJworfQorCisKK2NsYXNzIFBh
cnNlRXhjZXB0aW9uKEV4Y2VwdGlvbik6CisgICAgcGFzcworCisKK2NsYXNzIFR5cGVjaGVja0V4
Y2VwdGlvbihFeGNlcHRpb24pOgorICAgIHBhc3MKKworCitjbGFzcyBGcmFtZXdvcms6CisgICAg
ZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUpOgorICAgICAgICBzZWxmLl9zZXR0aW5ncyA9IF9GUkFN
RVdPUktfQ09ORklHX01BUFtuYW1lXQorICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCisKKyAgICBk
ZWYgc2V0dGluZyhzZWxmLCBrZXksIGRlZmF1bHQ9JycpOgorICAgICAgICByZXR1cm4gc2VsZi5f
c2V0dGluZ3MuZ2V0KGtleSwgZGVmYXVsdCkKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYg
ZnJvbVN0cmluZyhmcmFtZXdvcmtTdHJpbmcpOgorICAgICAgICBpZiBmcmFtZXdvcmtTdHJpbmcg
PT0gIkdsb2JhbCI6CisgICAgICAgICAgICByZXR1cm4gRnJhbWV3b3Jrcy5HbG9iYWwKKworICAg
ICAgICBpZiBmcmFtZXdvcmtTdHJpbmcgPT0gIldURiI6CisgICAgICAgICAgICByZXR1cm4gRnJh
bWV3b3Jrcy5XVEYKKworICAgICAgICBpZiBmcmFtZXdvcmtTdHJpbmcgPT0gIkphdmFTY3JpcHRD
b3JlIjoKKyAgICAgICAgICAgIHJldHVybiBGcmFtZXdvcmtzLkphdmFTY3JpcHRDb3JlCisKKyAg
ICAgICAgaWYgZnJhbWV3b3JrU3RyaW5nID09ICJXZWJDb3JlIjoKKyAgICAgICAgICAgIHJldHVy
biBGcmFtZXdvcmtzLldlYkNvcmUKKworICAgICAgICBpZiBmcmFtZXdvcmtTdHJpbmcgPT0gIlRl
c3QiOgorICAgICAgICAgICAgcmV0dXJuIEZyYW1ld29ya3MuVGVzdAorCisgICAgICAgIHJhaXNl
IFBhcnNlRXhjZXB0aW9uKCJVbmtub3duIGZyYW1ld29yazogJXMiICUgZnJhbWV3b3JrU3RyaW5n
KQorCisKK2NsYXNzIEZyYW1ld29ya3M6CisgICAgR2xvYmFsID0gRnJhbWV3b3JrKCJHbG9iYWwi
KQorICAgIFdURiA9IEZyYW1ld29yaygiV1RGIikKKyAgICBKYXZhU2NyaXB0Q29yZSA9IEZyYW1l
d29yaygiSmF2YVNjcmlwdENvcmUiKQorICAgIFdlYkNvcmUgPSBGcmFtZXdvcmsoIldlYkNvcmUi
KQorICAgIFRlc3QgPSBGcmFtZXdvcmsoIlRlc3QiKQorCisKK2NsYXNzIFR5cGVSZWZlcmVuY2U6
CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHR5cGVfa2luZCwgcmVmZXJlbmNlZF90eXBlX25hbWUs
IGVudW1fdmFsdWVzLCBhcnJheV9pdGVtcyk6CisgICAgICAgIHNlbGYudHlwZV9raW5kID0gdHlw
ZV9raW5kCisgICAgICAgIHNlbGYucmVmZXJlbmNlZF90eXBlX25hbWUgPSBfVFlQRVNfTkVFRElO
R19SRU5BTUVfV09SS0FST1VORFMuZ2V0KHJlZmVyZW5jZWRfdHlwZV9uYW1lLCByZWZlcmVuY2Vk
X3R5cGVfbmFtZSkKKyAgICAgICAgc2VsZi5lbnVtX3ZhbHVlcyA9IGVudW1fdmFsdWVzCisgICAg
ICAgIGlmIGFycmF5X2l0ZW1zIGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLmFycmF5X3R5cGVf
cmVmID0gTm9uZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hcnJheV90eXBlX3Jl
ZiA9IFR5cGVSZWZlcmVuY2UoYXJyYXlfaXRlbXMuZ2V0KCd0eXBlJyksIGFycmF5X2l0ZW1zLmdl
dCgnJHJlZicpLCBhcnJheV9pdGVtcy5nZXQoJ2VudW0nLCBbXSksIGFycmF5X2l0ZW1zLmdldCgn
aXRlbXMnKSkKKworICAgICAgICBpZiB0eXBlX2tpbmQgaXMgbm90IE5vbmUgYW5kIHJlZmVyZW5j
ZWRfdHlwZV9uYW1lIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmFpc2UgUGFyc2VFeGNlcHRp
b24oIlR5cGUgcmVmZXJlbmNlIGNhbm5vdCBoYXZlIGJvdGggJ3R5cGUnIGFuZCAnJHJlZicga2V5
cy4iKQorCisgICAgICAgIGlmIHR5cGVfa2luZCA9PSAiYXJyYXkiIGFuZCBhcnJheV9pdGVtcyBp
cyBOb25lOgorICAgICAgICAgICAgcmFpc2UgUGFyc2VFeGNlcHRpb24oIlR5cGUgcmVmZXJlbmNl
IHdpdGggdHlwZSAnYXJyYXknIG11c3QgaGF2ZSBrZXkgJ2l0ZW1zJyB0byBkZWZpbmUgYXJyYXkg
ZWxlbWVudCB0eXBlLiIpCisKKyAgICBkZWYgcmVmZXJlbmNlZF9uYW1lKHNlbGYpOgorICAgICAg
ICBpZiBzZWxmLnJlZmVyZW5jZWRfdHlwZV9uYW1lIGlzIG5vdCBOb25lOgorICAgICAgICAgICAg
cmV0dXJuIHNlbGYucmVmZXJlbmNlZF90eXBlX25hbWUKKyAgICAgICAgZWxzZToKKyAgICAgICAg
ICAgIHJldHVybiBzZWxmLnR5cGVfa2luZCAgIyBpbnRlZ2VyLCBzdHJpbmcsIG51bWJlciwgYm9v
bGVhbiwgZW51bSwgb2JqZWN0LCBhcnJheQorCisKK2NsYXNzIFR5cGU6CisgICAgZGVmIF9faW5p
dF9fKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToK
KyAgICAgICAgcmV0dXJuIHNlbGYucXVhbGlmaWVkX25hbWUoKSA9PSBvdGhlci5xdWFsaWZpZWRf
bmFtZSgpCisKKyAgICBkZWYgX19oYXNoX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnF1
YWxpZmllZF9uYW1lKCkuX19oYXNoX18oKQorCisgICAgIyBUaGVzZSBtZXRob2RzIHNob3VsZCBi
ZSBvdmVycmlkZGVuIGJ5IHN1YmNsYXNzZXMuCisgICAgZGVmIGlzX2VudW0oc2VsZik6CisgICAg
ICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIHR5cGVfZG9tYWluKHNlbGYpOgorICAgICAgICBw
YXNzCisKKyAgICBkZWYgcmF3X25hbWUoc2VsZik6CisgICAgICAgIHJldHVybiBfVFlQRVNfTkVF
RElOR19SRU5BTUVfV09SS0FST1VORFMuZ2V0KHNlbGYuX25hbWUsIHNlbGYuX25hbWUpCisKKyAg
ICBkZWYgcXVhbGlmaWVkX25hbWUoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgICMgVGhpcyBp
cyB1c2VkIHRvIHJlc29sdmUgbmVzdGVkIHR5cGVzIGFmdGVyIGluc3RhbmNlcyBhcmUgY3JlYXRl
ZC4KKyAgICBkZWYgcmVzb2x2ZV90eXBlX3JlZmVyZW5jZXMoc2VsZiwgcHJvdG9jb2wpOgorICAg
ICAgICBwYXNzCisKKworY2xhc3MgUHJpbWl0aXZlVHlwZShUeXBlKToKKyAgICBkZWYgX19pbml0
X18oc2VsZiwgbmFtZSk6CisgICAgICAgIHNlbGYuX25hbWUgPSBuYW1lCisKKyAgICBkZWYgX19y
ZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAnUHJpbWl0aXZlVHlwZVslc10nICUgc2VsZi5x
dWFsaWZpZWRfbmFtZSgpCisKKyAgICBkZWYgdHlwZV9kb21haW4oc2VsZik6CisgICAgICAgIHJl
dHVybiBOb25lCisKKyAgICBkZWYgcXVhbGlmaWVkX25hbWUoc2VsZik6CisgICAgICAgIHJldHVy
biBzZWxmLnJhd19uYW1lKCkKKworCitjbGFzcyBBbGlhc2VkVHlwZShUeXBlKToKKyAgICBkZWYg
X19pbml0X18oc2VsZiwgbmFtZSwgZG9tYWluLCBhbGlhc2VkX3R5cGVfcmVmKToKKyAgICAgICAg
c2VsZi5fbmFtZSA9IG5hbWUKKyAgICAgICAgc2VsZi5fZG9tYWluID0gZG9tYWluCisgICAgICAg
IHNlbGYuX2FsaWFzZWRfdHlwZV9yZWYgPSBhbGlhc2VkX3R5cGVfcmVmCisgICAgICAgIHNlbGYu
YWxpYXNlZF90eXBlID0gTm9uZQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICBp
ZiBzZWxmLmFsaWFzZWRfdHlwZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJldHVybiAnQWxp
YXNlZFR5cGVbJXMgLT4gJXNdJyAlIChzZWxmLnF1YWxpZmllZF9uYW1lKCksIHNlbGYuYWxpYXNl
ZF90eXBlLl9fcmVwcl9fKCkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gJ0Fs
aWFzZWRUeXBlWyVzIC0+ICh1bnJlc29sdmVkKV0nICUgc2VsZi5xdWFsaWZpZWRfbmFtZSgpCisK
KyAgICBkZWYgaXNfZW51bShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuYWxpYXNlZF90eXBl
LmlzX2VudW0oKQorCisgICAgZGVmIHR5cGVfZG9tYWluKHNlbGYpOgorICAgICAgICByZXR1cm4g
c2VsZi5fZG9tYWluCisKKyAgICBkZWYgcXVhbGlmaWVkX25hbWUoc2VsZik6CisgICAgICAgIHJl
dHVybiAgIi4iLmpvaW4oW3NlbGYudHlwZV9kb21haW4oKS5kb21haW5fbmFtZSwgc2VsZi5yYXdf
bmFtZSgpXSkKKworICAgIGRlZiByZXNvbHZlX3R5cGVfcmVmZXJlbmNlcyhzZWxmLCBwcm90b2Nv
bCk6CisgICAgICAgIGlmIHNlbGYuYWxpYXNlZF90eXBlIGlzIG5vdCBOb25lOgorICAgICAgICAg
ICAgcmV0dXJuCisKKyAgICAgICAgc2VsZi5hbGlhc2VkX3R5cGUgPSBwcm90b2NvbC5sb29rdXBf
dHlwZV9yZWZlcmVuY2Uoc2VsZi5fYWxpYXNlZF90eXBlX3JlZiwgc2VsZi50eXBlX2RvbWFpbigp
KQorICAgICAgICBsb2cuZGVidWcoIjwgUmVzb2x2ZWQgdHlwZSByZWZlcmVuY2UgZm9yIGFsaWFz
ZWQgdHlwZSBpbiAlczogJXMiICUgKHNlbGYucXVhbGlmaWVkX25hbWUoKSwgc2VsZi5hbGlhc2Vk
X3R5cGUucXVhbGlmaWVkX25hbWUoKSkpCisKKworY2xhc3MgRW51bVR5cGUoVHlwZSk6CisgICAg
ZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsIGRvbWFpbiwgdmFsdWVzLCBwcmltaXRpdmVfdHlwZV9y
ZWYsIGlzX2Fub255bW91cz1GYWxzZSk6CisgICAgICAgIHNlbGYuX25hbWUgPSBuYW1lCisgICAg
ICAgIHNlbGYuX2RvbWFpbiA9IGRvbWFpbgorICAgICAgICBzZWxmLl92YWx1ZXMgPSB2YWx1ZXMK
KyAgICAgICAgc2VsZi5fcHJpbWl0aXZlX3R5cGVfcmVmID0gcHJpbWl0aXZlX3R5cGVfcmVmCisg
ICAgICAgIHNlbGYucHJpbWl0aXZlX3R5cGUgPSBOb25lCisgICAgICAgIHNlbGYuaXNfYW5vbnlt
b3VzID0gaXNfYW5vbnltb3VzCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJl
dHVybiAnRW51bVR5cGVbdmFsdWVfdHlwZT0lczsgdmFsdWVzPSVzXScgJSAoc2VsZi5xdWFsaWZp
ZWRfbmFtZSgpLCAnLCAnLmpvaW4obWFwKHN0ciwgc2VsZi5lbnVtX3ZhbHVlcygpKSkpCisKKyAg
ICBkZWYgaXNfZW51bShzZWxmKToKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiB0eXBl
X2RvbWFpbihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2RvbWFpbgorCisgICAgZGVmIGVu
dW1fdmFsdWVzKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fdmFsdWVzCisKKyAgICBkZWYg
cXVhbGlmaWVkX25hbWUoc2VsZik6CisgICAgICAgIHJldHVybiAgIi4iLmpvaW4oW3NlbGYudHlw
ZV9kb21haW4oKS5kb21haW5fbmFtZSwgc2VsZi5yYXdfbmFtZSgpXSkKKworICAgIGRlZiByZXNv
bHZlX3R5cGVfcmVmZXJlbmNlcyhzZWxmLCBwcm90b2NvbCk6CisgICAgICAgIGlmIHNlbGYucHJp
bWl0aXZlX3R5cGUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBz
ZWxmLnByaW1pdGl2ZV90eXBlID0gcHJvdG9jb2wubG9va3VwX3R5cGVfcmVmZXJlbmNlKHNlbGYu
X3ByaW1pdGl2ZV90eXBlX3JlZiwgRG9tYWlucy5HTE9CQUwpCisgICAgICAgIGxvZy5kZWJ1Zygi
PCBSZXNvbHZlZCB0eXBlIHJlZmVyZW5jZSBmb3IgZW51bSB0eXBlIGluICVzOiAlcyIgJSAoc2Vs
Zi5xdWFsaWZpZWRfbmFtZSgpLCBzZWxmLnByaW1pdGl2ZV90eXBlLnF1YWxpZmllZF9uYW1lKCkp
KQorICAgICAgICBsb2cuZGVidWcoIjw8IGVudW0gdmFsdWVzOiAlcyIgJSBzZWxmLmVudW1fdmFs
dWVzKCkpCisKKworY2xhc3MgQXJyYXlUeXBlKFR5cGUpOgorICAgIGRlZiBfX2luaXRfXyhzZWxm
LCBlbGVtZW50X3R5cGVfcmVmLCBkb21haW4pOgorICAgICAgICBzZWxmLl9kb21haW4gPSBkb21h
aW4KKyAgICAgICAgc2VsZi5fZWxlbWVudF90eXBlX3JlZiA9IGVsZW1lbnRfdHlwZV9yZWYKKyAg
ICAgICAgc2VsZi5lbGVtZW50X3R5cGUgPSBOb25lCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6
CisgICAgICAgIGlmIHNlbGYuZWxlbWVudF90eXBlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAg
cmV0dXJuICdBcnJheVR5cGVbZWxlbWVudF90eXBlPSVzXScgJSBzZWxmLmVsZW1lbnRfdHlwZS5f
X3JlcHJfXygpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gJ0FycmF5VHlwZVtl
bGVtZW50X3R5cGU9KHVucmVzb2x2ZWQpXScKKworICAgIGRlZiB0eXBlX2RvbWFpbihzZWxmKToK
KyAgICAgICAgcmV0dXJuIHNlbGYuX2RvbWFpbgorCisgICAgZGVmIHF1YWxpZmllZF9uYW1lKHNl
bGYpOgorICAgICAgICByZXR1cm4gICIuIi5qb2luKFsiYXJyYXkiLCBzZWxmLmVsZW1lbnRfdHlw
ZS5xdWFsaWZpZWRfbmFtZSgpXSkKKworICAgIGRlZiByZXNvbHZlX3R5cGVfcmVmZXJlbmNlcyhz
ZWxmLCBwcm90b2NvbCk6CisgICAgICAgIGlmIHNlbGYuZWxlbWVudF90eXBlIGlzIG5vdCBOb25l
OgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgc2VsZi5lbGVtZW50X3R5cGUgPSBwcm90
b2NvbC5sb29rdXBfdHlwZV9yZWZlcmVuY2Uoc2VsZi5fZWxlbWVudF90eXBlX3JlZiwgc2VsZi50
eXBlX2RvbWFpbigpKQorICAgICAgICBsb2cuZGVidWcoIjwgUmVzb2x2ZWQgdHlwZSByZWZlcmVu
Y2UgZm9yIGVsZW1lbnQgdHlwZSBpbiAlczogJXMiICUgKHNlbGYucXVhbGlmaWVkX25hbWUoKSwg
c2VsZi5lbGVtZW50X3R5cGUucXVhbGlmaWVkX25hbWUoKSkpCisKKworY2xhc3MgT2JqZWN0VHlw
ZShUeXBlKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwgZG9tYWluLCBtZW1iZXJzKToK
KyAgICAgICAgc2VsZi5fbmFtZSA9IG5hbWUKKyAgICAgICAgc2VsZi5fZG9tYWluID0gZG9tYWlu
CisgICAgICAgIHNlbGYubWVtYmVycyA9IG1lbWJlcnMKKworICAgIGRlZiBfX3JlcHJfXyhzZWxm
KToKKyAgICAgICAgcmV0dXJuICdPYmplY3RUeXBlWyVzXScgJSBzZWxmLnF1YWxpZmllZF9uYW1l
KCkKKworICAgIGRlZiB0eXBlX2RvbWFpbihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2Rv
bWFpbgorCisgICAgZGVmIHF1YWxpZmllZF9uYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gICIu
Ii5qb2luKFtzZWxmLnR5cGVfZG9tYWluKCkuZG9tYWluX25hbWUsIHNlbGYucmF3X25hbWUoKV0p
CisKKworZGVmIGNoZWNrX2Zvcl9yZXF1aXJlZF9wcm9wZXJ0aWVzKHByb3BzLCBvYmosIHdoYXQp
OgorICAgIGZvciBwcm9wIGluIHByb3BzOgorICAgICAgICBpZiBwcm9wIG5vdCBpbiBvYmo6Cisg
ICAgICAgICAgICByYWlzZSBQYXJzZUV4Y2VwdGlvbigiV2hlbiBwYXJzaW5nICVzLCByZXF1aXJl
ZCBwcm9wZXJ0eSBtaXNzaW5nOiAlcyIgJSAod2hhdCwgcHJvcCkpCisKKworY2xhc3MgUHJvdG9j
b2w6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZyYW1ld29ya19uYW1lKToKKyAgICAgICAgc2Vs
Zi5kb21haW5zID0gW10KKyAgICAgICAgc2VsZi50eXBlc19ieV9uYW1lID0ge30KKyAgICAgICAg
c2VsZi5mcmFtZXdvcmsgPSBGcmFtZXdvcmsuZnJvbVN0cmluZyhmcmFtZXdvcmtfbmFtZSkKKwor
ICAgICAgICBzZWxmLl9lbnVtX3ZhbHVlX2NvdW50ID0gMAorICAgICAgICBzZWxmLl9lbnVtX3Zh
bHVlcyA9IHt9CisKKyAgICBkZWYgcGFyc2Vfc3BlY2lmaWNhdGlvbihzZWxmLCBqc29uLCBpc1N1
cHBsZW1lbnRhbCk6CisgICAgICAgIGxvZy5kZWJ1ZygicGFyc2UgdG9wbGV2ZWwiKQorCisgICAg
ICAgIGlmIGlzaW5zdGFuY2UoanNvbiwgZGljdCkgYW5kICdkb21haW5zJyBpbiBqc29uOgorICAg
ICAgICAgICAganNvbiA9IGpzb25bJ2RvbWFpbnMnXQorICAgICAgICBpZiBub3QgaXNpbnN0YW5j
ZShqc29uLCBsaXN0KToKKyAgICAgICAgICAgIGpzb24gPSBbanNvbl0KKworICAgICAgICBmb3Ig
ZG9tYWluIGluIGpzb246CisgICAgICAgICAgICBzZWxmLnBhcnNlX2RvbWFpbihkb21haW4sIGlz
U3VwcGxlbWVudGFsKQorCisgICAgZGVmIHBhcnNlX2RvbWFpbihzZWxmLCBqc29uLCBpc1N1cHBs
ZW1lbnRhbCk6CisgICAgICAgIGNoZWNrX2Zvcl9yZXF1aXJlZF9wcm9wZXJ0aWVzKFsnZG9tYWlu
J10sIGpzb24sICJkb21haW4iKQorICAgICAgICBsb2cuZGVidWcoInBhcnNlIGRvbWFpbiAiICsg
anNvblsnZG9tYWluJ10pCisKKyAgICAgICAgdHlwZXMgPSBbXQorICAgICAgICBjb21tYW5kcyA9
IFtdCisgICAgICAgIGV2ZW50cyA9IFtdCisKKyAgICAgICAgaWYgJ3R5cGVzJyBpbiBqc29uOgor
ICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoanNvblsndHlwZXMnXSwgbGlzdCk6CisgICAg
ICAgICAgICAgICAgcmFpc2UgUGFyc2VFeGNlcHRpb24oIk1hbGZvcm1lZCBzcGVjaWZpY2F0aW9u
OiB0eXBlcyBpcyBub3QgYW4gYXJyYXkiKQorICAgICAgICAgICAgdHlwZXMuZXh0ZW5kKFtzZWxm
LnBhcnNlX3R5cGVfZGVjbGFyYXRpb24oX2RlY2xhcmF0aW9uKSBmb3IgX2RlY2xhcmF0aW9uIGlu
IGpzb25bJ3R5cGVzJ11dKQorCisgICAgICAgIGlmICdjb21tYW5kcycgaW4ganNvbjoKKyAgICAg
ICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGpzb25bJ2NvbW1hbmRzJ10sIGxpc3QpOgorICAgICAg
ICAgICAgICAgIHJhaXNlIFBhcnNlRXhjZXB0aW9uKCJNYWxmb3JtZWQgc3BlY2lmaWNhdGlvbjog
Y29tbWFuZHMgaXMgbm90IGFuIGFycmF5IikKKyAgICAgICAgICAgIGNvbW1hbmRzLmV4dGVuZChb
c2VsZi5wYXJzZV9jb21tYW5kKF9jb21tYW5kKSBmb3IgX2NvbW1hbmQgaW4ganNvblsnY29tbWFu
ZHMnXV0pCisKKyAgICAgICAgaWYgJ2V2ZW50cycgaW4ganNvbjoKKyAgICAgICAgICAgIGlmIG5v
dCBpc2luc3RhbmNlKGpzb25bJ2V2ZW50cyddLCBsaXN0KToKKyAgICAgICAgICAgICAgICByYWlz
ZSBQYXJzZUV4Y2VwdGlvbigiTWFsZm9ybWVkIHNwZWNpZmljYXRpb246IGV2ZW50cyBpcyBub3Qg
YW4gYXJyYXkiKQorICAgICAgICAgICAgZXZlbnRzLmV4dGVuZChbc2VsZi5wYXJzZV9ldmVudChf
ZXZlbnQpIGZvciBfZXZlbnQgaW4ganNvblsnZXZlbnRzJ11dKQorCisgICAgICAgIHNlbGYuZG9t
YWlucy5hcHBlbmQoRG9tYWluKGpzb25bJ2RvbWFpbiddLCBqc29uLmdldCgnZGVzY3JpcHRpb24n
LCAiIiksIGlzU3VwcGxlbWVudGFsLCB0eXBlcywgY29tbWFuZHMsIGV2ZW50cykpCisKKyAgICBk
ZWYgcGFyc2VfdHlwZV9kZWNsYXJhdGlvbihzZWxmLCBqc29uKToKKyAgICAgICAgY2hlY2tfZm9y
X3JlcXVpcmVkX3Byb3BlcnRpZXMoWydpZCcsICd0eXBlJ10sIGpzb24sICJ0eXBlIikKKyAgICAg
ICAgbG9nLmRlYnVnKCJwYXJzZSB0eXBlICVzIiAlIGpzb25bJ2lkJ10pCisKKyAgICAgICAgdHlw
ZV9tZW1iZXJzID0gW10KKworICAgICAgICBpZiAncHJvcGVydGllcycgaW4ganNvbjoKKyAgICAg
ICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGpzb25bJ3Byb3BlcnRpZXMnXSwgbGlzdCk6CisgICAg
ICAgICAgICAgICAgcmFpc2UgUGFyc2VFeGNlcHRpb24oIk1hbGZvcm1lZCBzcGVjaWZpY2F0aW9u
OiBwcm9wZXJ0aWVzIGlzIG5vdCBhbiBhcnJheSIpCisgICAgICAgICAgICB0eXBlX21lbWJlcnMu
ZXh0ZW5kKFtzZWxmLnBhcnNlX3R5cGVfbWVtYmVyKF9tZW1iZXIpIGZvciBfbWVtYmVyIGluIGpz
b25bJ3Byb3BlcnRpZXMnXV0pCisKKyAgICAgICAgdHlwZV9yZWYgPSBUeXBlUmVmZXJlbmNlKGpz
b25bJ3R5cGUnXSwgTm9uZSwganNvbi5nZXQoJ2VudW0nLCBbXSksIGpzb24uZ2V0KCdpdGVtcycp
KQorICAgICAgICByZXR1cm4gVHlwZURlY2xhcmF0aW9uKGpzb25bJ2lkJ10sIHR5cGVfcmVmLCBq
c29uLmdldCgiZGVzY3JpcHRpb24iLCAiIiksIHR5cGVfbWVtYmVycykKKworICAgIGRlZiBwYXJz
ZV90eXBlX21lbWJlcihzZWxmLCBqc29uKToKKyAgICAgICAgY2hlY2tfZm9yX3JlcXVpcmVkX3By
b3BlcnRpZXMoWyduYW1lJ10sIGpzb24sICJ0eXBlIG1lbWJlciIpCisgICAgICAgIGxvZy5kZWJ1
ZygicGFyc2UgdHlwZSBtZW1iZXIgJXMiICUganNvblsnbmFtZSddKQorCisgICAgICAgIHR5cGVf
cmVmID0gVHlwZVJlZmVyZW5jZShqc29uLmdldCgndHlwZScpLCBqc29uLmdldCgnJHJlZicpLCBq
c29uLmdldCgnZW51bScsIFtdKSwganNvbi5nZXQoJ2l0ZW1zJykpCisgICAgICAgIHJldHVybiBU
eXBlTWVtYmVyKGpzb25bJ25hbWUnXSwgdHlwZV9yZWYsIGpzb24uZ2V0KCdvcHRpb25hbCcsIEZh
bHNlKSwganNvbi5nZXQoJ2Rlc2NyaXB0aW9uJywgIiIpKQorCisgICAgZGVmIHBhcnNlX2NvbW1h
bmQoc2VsZiwganNvbik6CisgICAgICAgIGNoZWNrX2Zvcl9yZXF1aXJlZF9wcm9wZXJ0aWVzKFsn
bmFtZSddLCBqc29uLCAiY29tbWFuZCIpCisgICAgICAgIGxvZy5kZWJ1ZygicGFyc2UgY29tbWFu
ZCAlcyIgJSBqc29uWyduYW1lJ10pCisKKyAgICAgICAgY2FsbF9wYXJhbWV0ZXJzID0gW10KKyAg
ICAgICAgcmV0dXJuX3BhcmFtZXRlcnMgPSBbXQorCisgICAgICAgIGlmICdwYXJhbWV0ZXJzJyBp
biBqc29uOgorICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoanNvblsncGFyYW1ldGVycydd
LCBsaXN0KToKKyAgICAgICAgICAgICAgICByYWlzZSBQYXJzZUV4Y2VwdGlvbigiTWFsZm9ybWVk
IHNwZWNpZmljYXRpb246IHBhcmFtZXRlcnMgaXMgbm90IGFuIGFycmF5IikKKyAgICAgICAgICAg
IGNhbGxfcGFyYW1ldGVycy5leHRlbmQoW3NlbGYucGFyc2VfcGFyYW1ldGVyKF9wYXJhbWV0ZXIp
IGZvciBfcGFyYW1ldGVyIGluIGpzb25bJ3BhcmFtZXRlcnMnXV0pCisKKyAgICAgICAgaWYgJ3Jl
dHVybnMnIGluIGpzb246CisgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShqc29uWydyZXR1
cm5zJ10sIGxpc3QpOgorICAgICAgICAgICAgICAgIHJhaXNlIFBhcnNlRXhjZXB0aW9uKCJNYWxm
b3JtZWQgc3BlY2lmaWNhdGlvbjogcmV0dXJucyBpcyBub3QgYW4gYXJyYXkiKQorICAgICAgICAg
ICAgcmV0dXJuX3BhcmFtZXRlcnMuZXh0ZW5kKFtzZWxmLnBhcnNlX3BhcmFtZXRlcihfcGFyYW1l
dGVyKSBmb3IgX3BhcmFtZXRlciBpbiBqc29uWydyZXR1cm5zJ11dKQorCisgICAgICAgIHJldHVy
biBDb21tYW5kKGpzb25bJ25hbWUnXSwgY2FsbF9wYXJhbWV0ZXJzLCByZXR1cm5fcGFyYW1ldGVy
cywganNvbi5nZXQoJ2Rlc2NyaXB0aW9uJywgIiIpLCBqc29uLmdldCgnYXN5bmMnLCBGYWxzZSkp
CisKKyAgICBkZWYgcGFyc2VfZXZlbnQoc2VsZiwganNvbik6CisgICAgICAgIGNoZWNrX2Zvcl9y
ZXF1aXJlZF9wcm9wZXJ0aWVzKFsnbmFtZSddLCBqc29uLCAiZXZlbnQiKQorICAgICAgICBsb2cu
ZGVidWcoInBhcnNlIGV2ZW50ICVzIiAlIGpzb25bJ25hbWUnXSkKKworICAgICAgICBldmVudF9w
YXJhbWV0ZXJzID0gW10KKworICAgICAgICBpZiAncGFyYW1ldGVycycgaW4ganNvbjoKKyAgICAg
ICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGpzb25bJ3BhcmFtZXRlcnMnXSwgbGlzdCk6CisgICAg
ICAgICAgICAgICAgcmFpc2UgUGFyc2VFeGNlcHRpb24oIk1hbGZvcm1lZCBzcGVjaWZpY2F0aW9u
OiBwYXJhbWV0ZXJzIGlzIG5vdCBhbiBhcnJheSIpCisgICAgICAgICAgICBldmVudF9wYXJhbWV0
ZXJzLmV4dGVuZChbc2VsZi5wYXJzZV9wYXJhbWV0ZXIoX3BhcmFtZXRlcikgZm9yIF9wYXJhbWV0
ZXIgaW4ganNvblsncGFyYW1ldGVycyddXSkKKworICAgICAgICByZXR1cm4gRXZlbnQoanNvblsn
bmFtZSddLCBldmVudF9wYXJhbWV0ZXJzLCBqc29uLmdldCgnZGVzY3JpcHRpb24nLCAiIikpCisK
KyAgICBkZWYgcGFyc2VfcGFyYW1ldGVyKHNlbGYsIGpzb24pOgorICAgICAgICBjaGVja19mb3Jf
cmVxdWlyZWRfcHJvcGVydGllcyhbJ25hbWUnXSwganNvbiwgInBhcmFtZXRlciIpCisgICAgICAg
IGxvZy5kZWJ1ZygicGFyc2UgcGFyYW1ldGVyICVzIiAlIGpzb25bJ25hbWUnXSkKKworICAgICAg
ICB0eXBlX3JlZiA9IFR5cGVSZWZlcmVuY2UoanNvbi5nZXQoJ3R5cGUnKSwganNvbi5nZXQoJyRy
ZWYnKSwganNvbi5nZXQoJ2VudW0nLCBbXSksIGpzb24uZ2V0KCdpdGVtcycpKQorICAgICAgICBy
ZXR1cm4gUGFyYW1ldGVyKGpzb25bJ25hbWUnXSwgdHlwZV9yZWYsIGpzb24uZ2V0KCdvcHRpb25h
bCcsIEZhbHNlKSwganNvbi5nZXQoJ2Rlc2NyaXB0aW9uJywgIiIpKQorCisgICAgZGVmIHJlc29s
dmVfdHlwZXMoc2VsZik6CisgICAgICAgIHF1YWxpZmllZF9kZWNsYXJlZF90eXBlX25hbWVzID0g
c2V0KFsnYm9vbGVhbicsICdzdHJpbmcnLCAnaW50ZWdlcicsICdudW1iZXInLCAnZW51bScsICdh
cnJheScsICdvYmplY3QnLCAnYW55J10pCisKKyAgICAgICAgc2VsZi50eXBlc19ieV9uYW1lWydz
dHJpbmcnXSA9IFByaW1pdGl2ZVR5cGUoJ3N0cmluZycpCisgICAgICAgIGZvciBfcHJpbWl0aXZl
X3R5cGUgaW4gWydib29sZWFuJywgJ2ludGVnZXInLCAnbnVtYmVyJ106CisgICAgICAgICAgICBz
ZWxmLnR5cGVzX2J5X25hbWVbX3ByaW1pdGl2ZV90eXBlXSA9IFByaW1pdGl2ZVR5cGUoX3ByaW1p
dGl2ZV90eXBlKQorICAgICAgICBmb3IgX29iamVjdF90eXBlIGluIFsnYW55JywgJ29iamVjdCdd
OgorICAgICAgICAgICAgc2VsZi50eXBlc19ieV9uYW1lW19vYmplY3RfdHlwZV0gPSBQcmltaXRp
dmVUeXBlKF9vYmplY3RfdHlwZSkKKworICAgICAgICAjIEdhdGhlciBxdWFsaWZpZWQgdHlwZSBu
YW1lcyBmcm9tIHR5cGUgZGVjbGFyYXRpb25zIGluIGVhY2ggZG9tYWluLgorICAgICAgICBmb3Ig
X2RvbWFpbiBpbiBzZWxmLmRvbWFpbnM6CisgICAgICAgICAgICBmb3IgX2RlY2xhcmF0aW9uIGlu
IF9kb21haW4udHlwZV9kZWNsYXJhdGlvbnM6CisgICAgICAgICAgICAgICAgIyBCYXNpYyBzYW5p
dHkgY2hlY2tpbmcuCisgICAgICAgICAgICAgICAgaWYgX2RlY2xhcmF0aW9uLnR5cGVfcmVmLnJl
ZmVyZW5jZWRfdHlwZV9uYW1lIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICByYWlz
ZSBUeXBlY2hlY2tFeGNlcHRpb24oIlR5cGUgZGVjbGFyYXRpb25zIG11c3QgbmFtZSBhIGJhc2Ug
dHlwZSwgbm90IGEgdHlwZSByZWZlcmVuY2UuIikKKworICAgICAgICAgICAgICAgICMgRmluZCBk
dXBsaWNhdGUgcXVhbGlmaWVkIHR5cGUgbmFtZXMuCisgICAgICAgICAgICAgICAgcXVhbGlmaWVk
X3R5cGVfbmFtZSA9ICIuIi5qb2luKFtfZG9tYWluLmRvbWFpbl9uYW1lLCBfZGVjbGFyYXRpb24u
dHlwZV9uYW1lXSkKKyAgICAgICAgICAgICAgICBpZiBxdWFsaWZpZWRfdHlwZV9uYW1lIGluIHF1
YWxpZmllZF9kZWNsYXJlZF90eXBlX25hbWVzOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBU
eXBlY2hlY2tFeGNlcHRpb24oIkR1cGxpY2F0ZSB0eXBlIGRlY2xhcmF0aW9uOiAlcyIgJSBxdWFs
aWZpZWRfdHlwZV9uYW1lKQorCisgICAgICAgICAgICAgICAgcXVhbGlmaWVkX2RlY2xhcmVkX3R5
cGVfbmFtZXMuYWRkKHF1YWxpZmllZF90eXBlX25hbWUpCisKKyAgICAgICAgICAgICAgICB0eXBl
X2luc3RhbmNlID0gTm9uZQorCisgICAgICAgICAgICAgICAga2luZCA9IF9kZWNsYXJhdGlvbi50
eXBlX3JlZi50eXBlX2tpbmQKKyAgICAgICAgICAgICAgICBpZiBsZW4oX2RlY2xhcmF0aW9uLnR5
cGVfcmVmLmVudW1fdmFsdWVzKSA+IDA6CisgICAgICAgICAgICAgICAgICAgIHByaW1pdGl2ZV90
eXBlX3JlZiA9IFR5cGVSZWZlcmVuY2UoX2RlY2xhcmF0aW9uLnR5cGVfcmVmLnR5cGVfa2luZCwg
Tm9uZSwgW10sIE5vbmUpCisgICAgICAgICAgICAgICAgICAgIHR5cGVfaW5zdGFuY2UgPSBFbnVt
VHlwZShfZGVjbGFyYXRpb24udHlwZV9uYW1lLCBfZG9tYWluLCBfZGVjbGFyYXRpb24udHlwZV9y
ZWYuZW51bV92YWx1ZXMsIHByaW1pdGl2ZV90eXBlX3JlZikKKyAgICAgICAgICAgICAgICBlbGlm
IGtpbmQgPT0gImFycmF5IjoKKyAgICAgICAgICAgICAgICAgICAgdHlwZV9pbnN0YW5jZSA9IEFy
cmF5VHlwZShfZGVjbGFyYXRpb24udHlwZV9yZWYuYXJyYXlfdHlwZV9yZWYsIF9kb21haW4pCisg
ICAgICAgICAgICAgICAgZWxpZiBraW5kID09ICJvYmplY3QiOgorICAgICAgICAgICAgICAgICAg
ICB0eXBlX2luc3RhbmNlID0gT2JqZWN0VHlwZShfZGVjbGFyYXRpb24udHlwZV9uYW1lLCBfZG9t
YWluLCBfZGVjbGFyYXRpb24udHlwZV9tZW1iZXJzKQorICAgICAgICAgICAgICAgIGVsc2U6Cisg
ICAgICAgICAgICAgICAgICAgIHR5cGVfaW5zdGFuY2UgPSBBbGlhc2VkVHlwZShfZGVjbGFyYXRp
b24udHlwZV9uYW1lLCBfZG9tYWluLCBfZGVjbGFyYXRpb24udHlwZV9yZWYpCisKKyAgICAgICAg
ICAgICAgICBsb2cuZGVidWcoIjwgQ3JlYXRlZCBmcmVzaCB0eXBlICVzIGZvciBkZWNsYXJhdGlv
biAlcyIgJSAodHlwZV9pbnN0YW5jZS5fX3JlcHJfXygpLCBxdWFsaWZpZWRfdHlwZV9uYW1lKSkK
KyAgICAgICAgICAgICAgICBzZWxmLnR5cGVzX2J5X25hbWVbcXVhbGlmaWVkX3R5cGVfbmFtZV0g
PSB0eXBlX2luc3RhbmNlCisKKyAgICAgICAgIyBSZXNvbHZlIGFsbCB0eXBlIHJlZmVyZW5jZXMg
cmVjdXJzaXZlbHkuCisgICAgICAgIGZvciBfZG9tYWluIGluIHNlbGYuZG9tYWluczoKKyAgICAg
ICAgICAgIF9kb21haW4ucmVzb2x2ZV90eXBlX3JlZmVyZW5jZXMoc2VsZikKKworICAgIGRlZiBs
b29rdXBfdHlwZV9mb3JfZGVjbGFyYXRpb24oc2VsZiwgZGVjbGFyYXRpb24sIGRvbWFpbik6Cisg
ICAgICAgICMgVGhpcyB3aWxsIG9ubHkgbWF0Y2ggYSB0eXBlIGRlZmluZWQgaW4gdGhlIHNhbWUg
ZG9tYWluLCB3aGVyZSBwcmVmaXhlcyBhcmVuJ3QgcmVxdWlyZWQuCisgICAgICAgIHF1YWxpZmll
ZF9uYW1lID0gIi4iLmpvaW4oW2RvbWFpbi5kb21haW5fbmFtZSwgZGVjbGFyYXRpb24udHlwZV9u
YW1lXSkKKyAgICAgICAgaWYgcXVhbGlmaWVkX25hbWUgaW4gc2VsZi50eXBlc19ieV9uYW1lOgor
ICAgICAgICAgICAgZm91bmRfdHlwZSA9IHNlbGYudHlwZXNfYnlfbmFtZVtxdWFsaWZpZWRfbmFt
ZV0KKyAgICAgICAgICAgIGZvdW5kX3R5cGUucmVzb2x2ZV90eXBlX3JlZmVyZW5jZXMoc2VsZikK
KyAgICAgICAgICAgIHJldHVybiBmb3VuZF90eXBlCisKKyAgICAgICAgcmFpc2UgVHlwZWNoZWNr
RXhjZXB0aW9uKCJMb29rdXAgZmFpbGVkIGZvciB0eXBlIGRlY2xhcmF0aW9uOiAlcyAocmVmZXJl
bmNlZCBmcm9tIGRvbWFpbjogJXMpIiAlIChkZWNsYXJhdGlvbi50eXBlX25hbWUsIGRvbWFpbi5k
b21haW5fbmFtZSkpCisKKyAgICBkZWYgbG9va3VwX3R5cGVfcmVmZXJlbmNlKHNlbGYsIHR5cGVf
cmVmLCBkb21haW4pOgorICAgICAgICAjIElmIHJlZmVyZW5jZSBpcyB0byBhbiBhbm9ueW1vdXMg
YXJyYXkgdHlwZSwgY3JlYXRlIGEgZnJlc2ggaW5zdGFuY2UuCisgICAgICAgIGlmIHR5cGVfcmVm
LnR5cGVfa2luZCA9PSAiYXJyYXkiOgorICAgICAgICAgICAgdHlwZV9pbnN0YW5jZSA9IEFycmF5
VHlwZSh0eXBlX3JlZi5hcnJheV90eXBlX3JlZiwgZG9tYWluKQorICAgICAgICAgICAgdHlwZV9p
bnN0YW5jZS5yZXNvbHZlX3R5cGVfcmVmZXJlbmNlcyhzZWxmKQorICAgICAgICAgICAgbG9nLmRl
YnVnKCI8IENyZWF0ZWQgZnJlc2ggdHlwZSBpbnN0YW5jZSBmb3IgYW5vbnltb3VzIGFycmF5IHR5
cGU6ICVzIiAlIHR5cGVfaW5zdGFuY2UucXVhbGlmaWVkX25hbWUoKSkKKyAgICAgICAgICAgIHJl
dHVybiB0eXBlX2luc3RhbmNlCisKKyAgICAgICAgIyBJZiByZWZlcmVuY2UgaXMgdG8gYW4gYW5v
bnltb3VzIGVudW0gdHlwZSwgY3JlYXRlIGEgZnJlc2ggaW5zdGFuY2UuCisgICAgICAgIGlmIGxl
bih0eXBlX3JlZi5lbnVtX3ZhbHVlcykgPiAwOgorICAgICAgICAgICAgIyBXZSBuZWVkIHRvIGNy
ZWF0ZSBhIHR5cGUgcmVmZXJlbmNlIHdpdGhvdXQgZW51bSB2YWx1ZXMgYXMgdGhlIGVudW0ncyBu
ZXN0ZWQgdHlwZS4KKyAgICAgICAgICAgIHByaW1pdGl2ZV90eXBlX3JlZiA9IFR5cGVSZWZlcmVu
Y2UodHlwZV9yZWYudHlwZV9raW5kLCBOb25lLCBbXSwgTm9uZSkKKyAgICAgICAgICAgIHR5cGVf
aW5zdGFuY2UgPSBFbnVtVHlwZSgiKGFub255bW91cykiLCBkb21haW4sIHR5cGVfcmVmLmVudW1f
dmFsdWVzLCBwcmltaXRpdmVfdHlwZV9yZWYsIFRydWUpCisgICAgICAgICAgICB0eXBlX2luc3Rh
bmNlLnJlc29sdmVfdHlwZV9yZWZlcmVuY2VzKHNlbGYpCisgICAgICAgICAgICBsb2cuZGVidWco
IjwgQ3JlYXRlZCBmcmVzaCB0eXBlIGluc3RhbmNlIGZvciBhbm9ueW1vdXMgZW51bSB0eXBlOiAl
cyIgJSB0eXBlX2luc3RhbmNlLnF1YWxpZmllZF9uYW1lKCkpCisgICAgICAgICAgICByZXR1cm4g
dHlwZV9pbnN0YW5jZQorCisgICAgICAgICMgVGhpcyB3aWxsIG1hdGNoIHdoZW4gcmVmZXJlbmNp
bmcgYSB0eXBlIGRlZmluZWQgaW4gdGhlIHNhbWUgZG9tYWluLCB3aGVyZSBwcmVmaXhlcyBhcmVu
J3QgcmVxdWlyZWQuCisgICAgICAgIHF1YWxpZmllZF9uYW1lID0gIi4iLmpvaW4oW2RvbWFpbi5k
b21haW5fbmFtZSwgdHlwZV9yZWYucmVmZXJlbmNlZF9uYW1lKCldKQorICAgICAgICBpZiBxdWFs
aWZpZWRfbmFtZSBpbiBzZWxmLnR5cGVzX2J5X25hbWU6CisgICAgICAgICAgICBmb3VuZF90eXBl
ID0gc2VsZi50eXBlc19ieV9uYW1lW3F1YWxpZmllZF9uYW1lXQorICAgICAgICAgICAgZm91bmRf
dHlwZS5yZXNvbHZlX3R5cGVfcmVmZXJlbmNlcyhzZWxmKQorICAgICAgICAgICAgbG9nLmRlYnVn
KCI8IExvb2t1cCBzdWNjZWVkZWQgZm9yIHVucXVhbGlmaWVkIHR5cGU6ICVzIiAlIGZvdW5kX3R5
cGUucXVhbGlmaWVkX25hbWUoKSkKKyAgICAgICAgICAgIHJldHVybiBmb3VuZF90eXBlCisKKyAg
ICAgICAgIyBUaGlzIHdpbGwgbWF0Y2ggcHJpbWl0aXZlIHR5cGVzIGFuZCBmdWxseS1xdWFsaWZp
ZWQgdHlwZXMgZnJvbSBhIGRpZmZlcmVudCBkb21haW4uCisgICAgICAgIGlmIHR5cGVfcmVmLnJl
ZmVyZW5jZWRfbmFtZSgpIGluIHNlbGYudHlwZXNfYnlfbmFtZToKKyAgICAgICAgICAgIGZvdW5k
X3R5cGUgPSBzZWxmLnR5cGVzX2J5X25hbWVbdHlwZV9yZWYucmVmZXJlbmNlZF9uYW1lKCldCisg
ICAgICAgICAgICBmb3VuZF90eXBlLnJlc29sdmVfdHlwZV9yZWZlcmVuY2VzKHNlbGYpCisgICAg
ICAgICAgICBsb2cuZGVidWcoIjwgTG9va3VwIHN1Y2NlZWRlZCBmb3IgcHJpbWl0aXZlIG9yIHF1
YWxpZmllZCB0eXBlOiAlcyIgJSBmb3VuZF90eXBlLnF1YWxpZmllZF9uYW1lKCkpCisgICAgICAg
ICAgICByZXR1cm4gZm91bmRfdHlwZQorCisgICAgICAgIHJhaXNlIFR5cGVjaGVja0V4Y2VwdGlv
bigiTG9va3VwIGZhaWxlZCBmb3IgdHlwZSByZWZlcmVuY2U6ICVzIChyZWZlcmVuY2VkIGZyb20g
ZG9tYWluOiAlcykiICUgKHR5cGVfcmVmLnJlZmVyZW5jZWRfbmFtZSgpLCBkb21haW4uZG9tYWlu
X25hbWUpKQorCisKK2NsYXNzIERvbWFpbjoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZG9tYWlu
X25hbWUsIGRlc2NyaXB0aW9uLCBpc1N1cHBsZW1lbnRhbCwgdHlwZV9kZWNsYXJhdGlvbnMsIGNv
bW1hbmRzLCBldmVudHMpOgorICAgICAgICBzZWxmLmRvbWFpbl9uYW1lID0gZG9tYWluX25hbWUK
KyAgICAgICAgc2VsZi5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uCisgICAgICAgIHNlbGYuaXNf
c3VwcGxlbWVudGFsID0gaXNTdXBwbGVtZW50YWwKKyAgICAgICAgc2VsZi50eXBlX2RlY2xhcmF0
aW9ucyA9IHR5cGVfZGVjbGFyYXRpb25zCisgICAgICAgIHNlbGYuY29tbWFuZHMgPSBjb21tYW5k
cworICAgICAgICBzZWxmLmV2ZW50cyA9IGV2ZW50cworCisgICAgZGVmIHJlc29sdmVfdHlwZV9y
ZWZlcmVuY2VzKHNlbGYsIHByb3RvY29sKToKKyAgICAgICAgbG9nLmRlYnVnKCI+IFJlc29sdmlu
ZyB0eXBlIGRlY2xhcmF0aW9ucyBmb3IgZG9tYWluOiAlcyIgJSBzZWxmLmRvbWFpbl9uYW1lKQor
ICAgICAgICBmb3IgX2RlY2xhcmF0aW9uIGluIHNlbGYudHlwZV9kZWNsYXJhdGlvbnM6CisgICAg
ICAgICAgICBfZGVjbGFyYXRpb24ucmVzb2x2ZV90eXBlX3JlZmVyZW5jZXMocHJvdG9jb2wsIHNl
bGYpCisKKyAgICAgICAgbG9nLmRlYnVnKCI+IFJlc29sdmluZyB0eXBlcyBpbiBjb21tYW5kcyBm
b3IgZG9tYWluOiAlcyIgJSBzZWxmLmRvbWFpbl9uYW1lKQorICAgICAgICBmb3IgX2NvbW1hbmQg
aW4gc2VsZi5jb21tYW5kczoKKyAgICAgICAgICAgIF9jb21tYW5kLnJlc29sdmVfdHlwZV9yZWZl
cmVuY2VzKHByb3RvY29sLCBzZWxmKQorCisgICAgICAgIGxvZy5kZWJ1ZygiPiBSZXNvbHZpbmcg
dHlwZXMgaW4gZXZlbnRzIGZvciBkb21haW46ICVzIiAlIHNlbGYuZG9tYWluX25hbWUpCisgICAg
ICAgIGZvciBfZXZlbnQgaW4gc2VsZi5ldmVudHM6CisgICAgICAgICAgICBfZXZlbnQucmVzb2x2
ZV90eXBlX3JlZmVyZW5jZXMocHJvdG9jb2wsIHNlbGYpCisKKworY2xhc3MgRG9tYWluczoKKyAg
ICBHTE9CQUwgPSBEb21haW4oIiIsICJUaGUgZ2xvYmFsIGRvbWFpbiwgaW4gd2hpY2ggcHJpbWl0
aXZlIHR5cGVzIGFyZSBpbXBsaWNpdGx5IGRlY2xhcmVkLiIsIFRydWUsIFtdLCBbXSwgW10pCisK
KworY2xhc3MgVHlwZURlY2xhcmF0aW9uOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0eXBlX25h
bWUsIHR5cGVfcmVmLCBkZXNjcmlwdGlvbiwgdHlwZV9tZW1iZXJzKToKKyAgICAgICAgc2VsZi50
eXBlX25hbWUgPSBfVFlQRVNfTkVFRElOR19SRU5BTUVfV09SS0FST1VORFMuZ2V0KHR5cGVfbmFt
ZSwgdHlwZV9uYW1lKQorICAgICAgICBzZWxmLnR5cGVfcmVmID0gdHlwZV9yZWYKKyAgICAgICAg
c2VsZi5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uCisgICAgICAgIHNlbGYudHlwZV9tZW1iZXJz
ID0gdHlwZV9tZW1iZXJzCisKKyAgICBkZWYgcmVzb2x2ZV90eXBlX3JlZmVyZW5jZXMoc2VsZiwg
cHJvdG9jb2wsIGRvbWFpbik6CisgICAgICAgIGxvZy5kZWJ1ZygiPj4gUmVzb2x2aW5nIHR5cGUg
cmVmZXJlbmNlcyBmb3IgdHlwZSBkZWNsYXJhdGlvbjogJXMiICUgc2VsZi50eXBlX25hbWUpCisg
ICAgICAgIHNlbGYudHlwZSA9IHByb3RvY29sLmxvb2t1cF90eXBlX2Zvcl9kZWNsYXJhdGlvbihz
ZWxmLCBkb21haW4pCisgICAgICAgIGZvciBfbWVtYmVyIGluIHNlbGYudHlwZV9tZW1iZXJzOgor
ICAgICAgICAgICAgX21lbWJlci5yZXNvbHZlX3R5cGVfcmVmZXJlbmNlcyhwcm90b2NvbCwgZG9t
YWluKQorCisKK2NsYXNzIFR5cGVNZW1iZXI6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1lbWJl
cl9uYW1lLCB0eXBlX3JlZiwgaXNfb3B0aW9uYWwsIGRlc2NyaXB0aW9uKToKKyAgICAgICAgc2Vs
Zi5tZW1iZXJfbmFtZSA9IG1lbWJlcl9uYW1lCisgICAgICAgIHNlbGYudHlwZV9yZWYgPSB0eXBl
X3JlZgorICAgICAgICBzZWxmLmlzX29wdGlvbmFsID0gaXNfb3B0aW9uYWwKKyAgICAgICAgc2Vs
Zi5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uCisKKyAgICBkZWYgcmVzb2x2ZV90eXBlX3JlZmVy
ZW5jZXMoc2VsZiwgcHJvdG9jb2wsIGRvbWFpbik6CisgICAgICAgIGxvZy5kZWJ1ZygiPj4+IFJl
c29sdmluZyB0eXBlIHJlZmVyZW5jZXMgZm9yIHR5cGUgbWVtYmVyOiAlcyIgJSBzZWxmLm1lbWJl
cl9uYW1lKQorICAgICAgICBzZWxmLnR5cGUgPSBwcm90b2NvbC5sb29rdXBfdHlwZV9yZWZlcmVu
Y2Uoc2VsZi50eXBlX3JlZiwgZG9tYWluKQorCisKK2NsYXNzIFBhcmFtZXRlcjoKKyAgICBkZWYg
X19pbml0X18oc2VsZiwgcGFyYW1ldGVyX25hbWUsIHR5cGVfcmVmLCBpc19vcHRpb25hbCwgZGVz
Y3JpcHRpb24pOgorICAgICAgICBzZWxmLnBhcmFtZXRlcl9uYW1lID0gcGFyYW1ldGVyX25hbWUK
KyAgICAgICAgc2VsZi50eXBlX3JlZiA9IHR5cGVfcmVmCisgICAgICAgIHNlbGYuaXNfb3B0aW9u
YWwgPSBpc19vcHRpb25hbAorICAgICAgICBzZWxmLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb24K
KworICAgIGRlZiByZXNvbHZlX3R5cGVfcmVmZXJlbmNlcyhzZWxmLCBwcm90b2NvbCwgZG9tYWlu
KToKKyAgICAgICAgbG9nLmRlYnVnKCI+Pj4gUmVzb2x2aW5nIHR5cGUgcmVmZXJlbmNlcyBmb3Ig
cGFyYW1ldGVyOiAlcyIgJSBzZWxmLnBhcmFtZXRlcl9uYW1lKQorICAgICAgICBzZWxmLnR5cGUg
PSBwcm90b2NvbC5sb29rdXBfdHlwZV9yZWZlcmVuY2Uoc2VsZi50eXBlX3JlZiwgZG9tYWluKQor
CisKK2NsYXNzIENvbW1hbmQ6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbW1hbmRfbmFtZSwg
Y2FsbF9wYXJhbWV0ZXJzLCByZXR1cm5fcGFyYW1ldGVycywgZGVzY3JpcHRpb24sIGlzX2FzeW5j
KToKKyAgICAgICAgc2VsZi5jb21tYW5kX25hbWUgPSBjb21tYW5kX25hbWUKKyAgICAgICAgc2Vs
Zi5jYWxsX3BhcmFtZXRlcnMgPSBjYWxsX3BhcmFtZXRlcnMKKyAgICAgICAgc2VsZi5yZXR1cm5f
cGFyYW1ldGVycyA9IHJldHVybl9wYXJhbWV0ZXJzCisgICAgICAgIHNlbGYuZGVzY3JpcHRpb24g
PSBkZXNjcmlwdGlvbgorICAgICAgICBzZWxmLmlzX2FzeW5jID0gaXNfYXN5bmMKKworICAgIGRl
ZiByZXNvbHZlX3R5cGVfcmVmZXJlbmNlcyhzZWxmLCBwcm90b2NvbCwgZG9tYWluKToKKyAgICAg
ICAgbG9nLmRlYnVnKCI+PiBSZXNvbHZpbmcgdHlwZSByZWZlcmVuY2VzIGZvciBjYWxsIHBhcmFt
ZXRlcnMgaW4gY29tbWFuZDogJXMiICUgc2VsZi5jb21tYW5kX25hbWUpCisgICAgICAgIGZvciBf
cGFyYW1ldGVyIGluIHNlbGYuY2FsbF9wYXJhbWV0ZXJzOgorICAgICAgICAgICAgX3BhcmFtZXRl
ci5yZXNvbHZlX3R5cGVfcmVmZXJlbmNlcyhwcm90b2NvbCwgZG9tYWluKQorCisgICAgICAgIGxv
Zy5kZWJ1ZygiPj4gUmVzb2x2aW5nIHR5cGUgcmVmZXJlbmNlcyBmb3IgcmV0dXJuIHBhcmFtZXRl
cnMgaW4gY29tbWFuZDogJXMiICUgc2VsZi5jb21tYW5kX25hbWUpCisgICAgICAgIGZvciBfcGFy
YW1ldGVyIGluIHNlbGYucmV0dXJuX3BhcmFtZXRlcnM6CisgICAgICAgICAgICBfcGFyYW1ldGVy
LnJlc29sdmVfdHlwZV9yZWZlcmVuY2VzKHByb3RvY29sLCBkb21haW4pCisKKworY2xhc3MgRXZl
bnQ6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGV2ZW50X25hbWUsIGV2ZW50X3BhcmFtZXRlcnMs
IGRlc2NyaXB0aW9uKToKKyAgICAgICAgc2VsZi5ldmVudF9uYW1lID0gZXZlbnRfbmFtZQorICAg
ICAgICBzZWxmLmV2ZW50X3BhcmFtZXRlcnMgPSBldmVudF9wYXJhbWV0ZXJzCisgICAgICAgIHNl
bGYuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbgorCisgICAgZGVmIHJlc29sdmVfdHlwZV9yZWZl
cmVuY2VzKHNlbGYsIHByb3RvY29sLCBkb21haW4pOgorICAgICAgICBsb2cuZGVidWcoIj4+IFJl
c29sdmluZyB0eXBlIHJlZmVyZW5jZXMgZm9yIHBhcmFtZXRlcnMgaW4gZXZlbnQ6ICVzIiAlIHNl
bGYuZXZlbnRfbmFtZSkKKyAgICAgICAgZm9yIF9wYXJhbWV0ZXIgaW4gc2VsZi5ldmVudF9wYXJh
bWV0ZXJzOgorICAgICAgICAgICAgX3BhcmFtZXRlci5yZXNvbHZlX3R5cGVfcmVmZXJlbmNlcyhw
cm90b2NvbCwgZG9tYWluKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weSBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzQyYWRkNWFkN2E2YTBkNGM1NjljZjhi
NjJkZjViMzY2ZWJlNDMxNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKQEAgLTAsMCArMSwxODQgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmln
aHQgKGMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQg
KGMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
IworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
IworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisjIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworIyBUaGlzIHNjcmlwdCBn
ZW5lcmF0ZXMgSlMgYW5kIEMrKyBiaW5kaW5ncyBmb3IgdGhlIGluc3BlY3RvciBwcm90b2NvbC4K
KyMgR2VuZXJhdG9ycyBmb3IgaW5kaXZpZHVhbCBmaWxlcyBhcmUgbG9jYXRlZCBpbiB0aGUgY29k
ZWdlbi8gZGlyZWN0b3J5LgorCitpbXBvcnQgb3MucGF0aAoraW1wb3J0IHJlCitpbXBvcnQgc3lz
CitpbXBvcnQgc3RyaW5nCitmcm9tIHN0cmluZyBpbXBvcnQgVGVtcGxhdGUKK2ltcG9ydCBvcHRw
YXJzZQoraW1wb3J0IGxvZ2dpbmcKKwordHJ5OgorICAgIGltcG9ydCBqc29uCitleGNlcHQgSW1w
b3J0RXJyb3I6CisgICAgaW1wb3J0IHNpbXBsZWpzb24gYXMganNvbgorCit0cnk6CisgICAgZnJv
bSBjb2RlZ2VuIGltcG9ydCAqCisKKyMgV2hlbiBjb3B5aW5nIGdlbmVyYXRvciBmaWxlcyB0byBK
YXZhU2NyaXB0Q29yZSdzIHByaXZhdGUgaGVhZGVycyBvbiBNYWMsCisjIHRoZSBjb2RlZ2VuLyBt
b2R1bGUgZGlyZWN0b3J5IGlzIGZsYXR0ZW5lZC4gU28sIGltcG9ydCBkaXJlY3RseS4KK2V4Y2Vw
dCBJbXBvcnRFcnJvcjoKKyAgICBpbXBvcnQgbW9kZWxzCisgICAgZnJvbSBtb2RlbHMgaW1wb3J0
ICoKKyAgICBmcm9tIGdlbmVyYXRvciBpbXBvcnQgKgorCisgICAgZnJvbSBnZW5lcmF0ZV9iYWNr
ZW5kX2NvbW1hbmRzIGltcG9ydCAqCisgICAgZnJvbSBnZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNo
ZXJfaGVhZGVyIGltcG9ydCAqCisgICAgZnJvbSBnZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJf
aW1wbGVtZW50YXRpb24gaW1wb3J0ICoKKyAgICBmcm9tIGdlbmVyYXRlX2Zyb250ZW5kX2Rpc3Bh
dGNoZXJfaGVhZGVyIGltcG9ydCAqCisgICAgZnJvbSBnZW5lcmF0ZV9mcm9udGVuZF9kaXNwYXRj
aGVyX2ltcGxlbWVudGF0aW9uIGltcG9ydCAqCisgICAgZnJvbSBnZW5lcmF0ZV90eXBlX2J1aWxk
ZXJfaGVhZGVyIGltcG9ydCAqCisgICAgZnJvbSBnZW5lcmF0ZV90eXBlX2J1aWxkZXJfaW1wbGVt
ZW50YXRpb24gaW1wb3J0ICoKKworIyBVc2UgYSBnbG9iYWwgbG9nZ2VyLCB3aGljaCBub3JtYWxs
eSBvbmx5IGxvZ3MgZXJyb3JzLgorIyBJdCBjYW4gYmUgY29uZmlndXJlZCB0byBsb2cgZGVidWcg
bWVzc2FnZXMgZnJvbSB0aGUgQ0xJLgorbG9nZ2luZy5iYXNpY0NvbmZpZyhmb3JtYXQ9JyUobGV2
ZWxuYW1lKXM6ICUobWVzc2FnZSlzJywgbGV2ZWw9bG9nZ2luZy5FUlJPUikKK2xvZyA9IGxvZ2dp
bmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQorCisKKyMgQSB3cml0ZXIgdGhhdCBvbmx5IHVwZGF0ZXMg
ZmlsZSBpZiBpdCBhY3R1YWxseSBjaGFuZ2VkLgorY2xhc3MgSW5jcmVtZW50YWxGaWxlV3JpdGVy
OgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlcGF0aCwgZm9yY2Vfb3V0cHV0KToKKyAgICAg
ICAgc2VsZi5fZmlsZXBhdGggPSBmaWxlcGF0aAorICAgICAgICBzZWxmLl9vdXRwdXQgPSAiIgor
ICAgICAgICBzZWxmLmZvcmNlX291dHB1dCA9IGZvcmNlX291dHB1dAorCisgICAgZGVmIHdyaXRl
KHNlbGYsIHRleHQpOgorICAgICAgICBzZWxmLl9vdXRwdXQgKz0gdGV4dAorCisgICAgZGVmIGNs
b3NlKHNlbGYpOgorICAgICAgICB0ZXh0X2NoYW5nZWQgPSBUcnVlCisgICAgICAgIHNlbGYuX291
dHB1dCA9IHNlbGYuX291dHB1dC5yc3RyaXAoKSArICJcbiIKKworICAgICAgICB0cnk6CisgICAg
ICAgICAgICByZWFkX2ZpbGUgPSBvcGVuKHNlbGYuX2ZpbGVwYXRoLCAiciIpCisgICAgICAgICAg
ICBvbGRfdGV4dCA9IHJlYWRfZmlsZS5yZWFkKCkKKyAgICAgICAgICAgIHJlYWRfZmlsZS5jbG9z
ZSgpCisgICAgICAgICAgICB0ZXh0X2NoYW5nZWQgPSBvbGRfdGV4dCAhPSBzZWxmLl9vdXRwdXQK
KyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgIyBJZ25vcmUsIGp1c3Qgb3ZlcndyaXRlIGJ5
IGRlZmF1bHQKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBpZiB0ZXh0X2NoYW5nZWQgb3Ig
c2VsZi5mb3JjZV9vdXRwdXQ6CisgICAgICAgICAgICBvdXRfZmlsZSA9IG9wZW4oc2VsZi5fZmls
ZXBhdGgsICJ3IikKKyAgICAgICAgICAgIG91dF9maWxlLndyaXRlKHNlbGYuX291dHB1dCkKKyAg
ICAgICAgICAgIG91dF9maWxlLmNsb3NlKCkKKworCitkZWYgZ2VuZXJhdGVfZnJvbV9zcGVjaWZp
Y2F0aW9uKHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aD1Ob25lLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdXBwbGVtZW50YWxfc3BlY2lmaWNhdGlvbl9maWxlcGF0aHM9
W10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmNhdGVuYXRlX291dHB1dD1G
YWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X2RpcnBhdGg9Tm9u
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yY2Vfb3V0cHV0PUZhbHNlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZXdvcmtfbmFtZT0iIik6CisKKyAg
ICBkZWYgbG9hZF9zcGVjaWZpY2F0aW9uKHByb3RvY29sLCBmaWxlcGF0aCwgaXNTdXBwbGVtZW50
YWw9RmFsc2UpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIG9wZW4oZmlsZXBhdGgs
ICJyIikgYXMgaW5wdXRfZmlsZToKKyAgICAgICAgICAgICAgICBwYXJzZWRfanNvbiA9IGpzb24u
bG9hZChpbnB1dF9maWxlKQorICAgICAgICAgICAgICAgIHByb3RvY29sLnBhcnNlX3NwZWNpZmlj
YXRpb24ocGFyc2VkX2pzb24sIGlzU3VwcGxlbWVudGFsPWlzU3VwcGxlbWVudGFsKQorICAgICAg
ICBleGNlcHQgVmFsdWVFcnJvciBhcyBlOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJF
cnJvciBwYXJzaW5nIHZhbGlkIEpTT04gaW4gZmlsZTogIiArIGZpbGVwYXRoKQorCisgICAgcHJv
dG9jb2wgPSBtb2RlbHMuUHJvdG9jb2woZnJhbWV3b3JrX25hbWUpCisgICAgZm9yIHNwZWNpZmlj
YXRpb24gaW4gc3VwcGxlbWVudGFsX3NwZWNpZmljYXRpb25fZmlsZXBhdGhzOgorICAgICAgICBs
b2FkX3NwZWNpZmljYXRpb24ocHJvdG9jb2wsIHNwZWNpZmljYXRpb24sIGlzU3VwcGxlbWVudGFs
PVRydWUpCisgICAgbG9hZF9zcGVjaWZpY2F0aW9uKHByb3RvY29sLCBwcmltYXJ5X3NwZWNpZmlj
YXRpb25fZmlsZXBhdGgsIGlzU3VwcGxlbWVudGFsPUZhbHNlKQorCisgICAgcHJvdG9jb2wucmVz
b2x2ZV90eXBlcygpCisKKyAgICBnZW5lcmF0b3JzID0gW10KKyAgICBnZW5lcmF0b3JzLmFwcGVu
ZChCYWNrZW5kQ29tbWFuZHNHZW5lcmF0b3IocHJvdG9jb2wsIHByaW1hcnlfc3BlY2lmaWNhdGlv
bl9maWxlcGF0aCkpCisgICAgZ2VuZXJhdG9ycy5hcHBlbmQoQmFja2VuZERpc3BhdGNoZXJIZWFk
ZXJHZW5lcmF0b3IocHJvdG9jb2wsIHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aCkpCisg
ICAgZ2VuZXJhdG9ycy5hcHBlbmQoQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVy
YXRvcihwcm90b2NvbCwgcHJpbWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRoKSkKKyAgICBnZW5l
cmF0b3JzLmFwcGVuZChGcm9udGVuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IocHJvdG9jb2ws
IHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aCkpCisgICAgZ2VuZXJhdG9ycy5hcHBlbmQo
RnJvbnRlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IocHJvdG9jb2wsIHByaW1h
cnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aCkpCisgICAgZ2VuZXJhdG9ycy5hcHBlbmQoVHlwZUJ1
aWxkZXJIZWFkZXJHZW5lcmF0b3IocHJvdG9jb2wsIHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxl
cGF0aCkpCisgICAgZ2VuZXJhdG9ycy5hcHBlbmQoVHlwZUJ1aWxkZXJJbXBsZW1lbnRhdGlvbkdl
bmVyYXRvcihwcm90b2NvbCwgcHJpbWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRoKSkKKworICAg
IHNpbmdsZV9vdXRwdXRfZmlsZV9jb250ZW50cyA9IFtdCisKKyAgICBmb3IgZ2VuZXJhdG9yIGlu
IGdlbmVyYXRvcnM6CisgICAgICAgIG91dHB1dCA9IGdlbmVyYXRvci5nZW5lcmF0ZV9vdXRwdXQo
KQorICAgICAgICBpZiBjb25jYXRlbmF0ZV9vdXRwdXQ6CisgICAgICAgICAgICBzaW5nbGVfb3V0
cHV0X2ZpbGVfY29udGVudHMuYXBwZW5kKCcjIyMgQmVnaW4gRmlsZTogJXMnICUgZ2VuZXJhdG9y
Lm91dHB1dF9maWxlbmFtZSgpKQorICAgICAgICAgICAgc2luZ2xlX291dHB1dF9maWxlX2NvbnRl
bnRzLmFwcGVuZChvdXRwdXQpCisgICAgICAgICAgICBzaW5nbGVfb3V0cHV0X2ZpbGVfY29udGVu
dHMuYXBwZW5kKCcjIyMgRW5kIEZpbGU6ICVzJyAlIGdlbmVyYXRvci5vdXRwdXRfZmlsZW5hbWUo
KSkKKyAgICAgICAgICAgIHNpbmdsZV9vdXRwdXRfZmlsZV9jb250ZW50cy5hcHBlbmQoJycpCisg
ICAgICAgIGVsc2U6CisgICAgICAgICAgICBvdXRwdXRfZmlsZSA9IEluY3JlbWVudGFsRmlsZVdy
aXRlcihvcy5wYXRoLmpvaW4ob3V0cHV0X2RpcnBhdGgsIGdlbmVyYXRvci5vdXRwdXRfZmlsZW5h
bWUoKSksIGZvcmNlX291dHB1dCkKKyAgICAgICAgICAgIG91dHB1dF9maWxlLndyaXRlKG91dHB1
dCkKKyAgICAgICAgICAgIG91dHB1dF9maWxlLmNsb3NlKCkKKworICAgIGlmIGNvbmNhdGVuYXRl
X291dHB1dDoKKyAgICAgICAgICAgIGZpbGVuYW1lID0gb3MucGF0aC5qb2luKG9zLnBhdGguYmFz
ZW5hbWUocHJpbWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRoKSArICctcmVzdWx0JykKKyAgICAg
ICAgICAgIG91dHB1dF9maWxlID0gSW5jcmVtZW50YWxGaWxlV3JpdGVyKG9zLnBhdGguam9pbihv
dXRwdXRfZGlycGF0aCwgZmlsZW5hbWUpLCBmb3JjZV9vdXRwdXQpCisgICAgICAgICAgICBvdXRw
dXRfZmlsZS53cml0ZSgnXG4nLmpvaW4oc2luZ2xlX291dHB1dF9maWxlX2NvbnRlbnRzKSkKKyAg
ICAgICAgICAgIG91dHB1dF9maWxlLmNsb3NlKCkKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWlu
X18nOgorICAgIGFsbG93ZWRfZnJhbWV3b3JrX25hbWVzID0gWydXVEYnLCAnSmF2YVNjcmlwdENv
cmUnLCAnV2ViQ29yZScsICdXZWJLaXQnLCAnV2ViS2l0MicsICdUZXN0J10KKyAgICBjbGlfcGFy
c2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKHVzYWdlPSJ1c2FnZTogJXByb2cgW29wdGlvbnNd
IFByaW1hcnlQcm90b2NvbC5qc29uIFtTdXBwbGVtZW50YWxQcm90b2NvbC5qc29uIC4uLl0iKQor
ICAgIGNsaV9wYXJzZXIuYWRkX29wdGlvbigiLW8iLCAiLS1vdXRwdXREaXIiLCBoZWxwPSJEaXJl
Y3Rvcnkgd2hlcmUgZ2VuZXJhdGVkIGZpbGVzIHNob3VsZCBiZSB3cml0dGVuLiIpCisgICAgY2xp
X3BhcnNlci5hZGRfb3B0aW9uKCItLWZyYW1ld29yayIsIHR5cGU9ImNob2ljZSIsIGNob2ljZXM9
YWxsb3dlZF9mcmFtZXdvcmtfbmFtZXMsIGhlbHA9IlRoZSBmcmFtZXdvcmsgdGhhdCB0aGUgcHJp
bWFyeSBzcGVjaWZpY2F0aW9uIGJlbG9uZ3MgdG8uIikKKyAgICBjbGlfcGFyc2VyLmFkZF9vcHRp
b24oIi0tZm9yY2UiLCBhY3Rpb249InN0b3JlX3RydWUiLCBoZWxwPSJGb3JjZSBvdXRwdXQgb2Yg
Z2VuZXJhdGVkIHNjcmlwdHMsIGV2ZW4gaWYgbm90aGluZyBjaGFuZ2VkLiIpCisgICAgY2xpX3Bh
cnNlci5hZGRfb3B0aW9uKCItdiIsICItLWRlYnVnIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwgaGVs
cD0iTG9nIGV4dHJhIG91dHB1dCBmb3IgZGVidWdnaW5nIHRoZSBnZW5lcmF0b3IgaXRzZWxmLiIp
CisgICAgY2xpX3BhcnNlci5hZGRfb3B0aW9uKCItdCIsICItLXRlc3QiLCBhY3Rpb249InN0b3Jl
X3RydWUiLCBoZWxwPSJFbmFibGUgdGVzdCBtb2RlLiBVc2UgdW5pcXVlIG91dHB1dCBmaWxlbmFt
ZXMgY3JlYXRlZCBieSBwcmVwZW5kaW5nIHRoZSBpbnB1dCBmaWxlbmFtZS4iKQorCisgICAgb3B0
aW9ucyA9IE5vbmUKKworICAgIGFyZ19vcHRpb25zLCBhcmdfdmFsdWVzID0gY2xpX3BhcnNlci5w
YXJzZV9hcmdzKCkKKyAgICBpZiAobGVuKGFyZ192YWx1ZXMpIDwgMSk6CisgICAgICAgIHJhaXNl
IFBhcnNlRXhjZXB0aW9uKCJBdCBsZWFzdCBvbmUgcGxhaW4gYXJndW1lbnQgZXhwZWN0ZWQiKQor
CisgICAgaWYgbm90IGFyZ19vcHRpb25zLm91dHB1dERpcjoKKyAgICAgICAgcmFpc2UgUGFyc2VF
eGNlcHRpb24oIk1pc3Npbmcgb3V0cHV0IGRpcmVjdG9yeSIpCisKKyAgICBpZiBhcmdfb3B0aW9u
cy5kZWJ1ZzoKKyAgICAgICAgbG9nLnNldExldmVsKGxvZ2dpbmcuREVCVUcpCisKKyAgICBvcHRp
b25zID0geworICAgICAgICAncHJpbWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRoJzogYXJnX3Zh
bHVlc1swXSwKKyAgICAgICAgJ3N1cHBsZW1lbnRhbF9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRocyc6
IGFyZ192YWx1ZXNbMTpdLAorICAgICAgICAnb3V0cHV0X2RpcnBhdGgnOiBhcmdfb3B0aW9ucy5v
dXRwdXREaXIsCisgICAgICAgICdjb25jYXRlbmF0ZV9vdXRwdXQnOiBhcmdfb3B0aW9ucy50ZXN0
LAorICAgICAgICAnZnJhbWV3b3JrX25hbWUnOiBhcmdfb3B0aW9ucy5mcmFtZXdvcmssCisgICAg
ICAgICdmb3JjZV9vdXRwdXQnOiBhcmdfb3B0aW9ucy5mb3JjZQorICAgIH0KKworICAgIHRyeToK
KyAgICAgICAgZ2VuZXJhdGVfZnJvbV9zcGVjaWZpY2F0aW9uKCoqb3B0aW9ucykKKyAgICBleGNl
cHQgKFBhcnNlRXhjZXB0aW9uLCBUeXBlY2hlY2tFeGNlcHRpb24pIGFzIGU6CisgICAgICAgIGlm
IGFyZ19vcHRpb25zLnRlc3Q6CisgICAgICAgICAgICBsb2cuZXJyb3IoZS5tZXNzYWdlKQorICAg
ICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgICMgRm9yY2UgdGhlIGJ1aWxkIHRvIGZhaWwu
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9jb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0
ZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjU2MWI1Y2VhYjE0YzdhYzM3ZWU1MWE5YmQ3YzkyMDNmYzViYWIx
MGIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgpAQCAtMCwwICsx
LDEwMCBAQAoreworICAgICJkb21haW4iOiAiRGF0YWJhc2UiLAorICAgICJ0eXBlcyI6IFsKKyAg
ICAgICAgeworICAgICAgICAgICAgImlkIjogIkRhdGFiYXNlSWQiLAorICAgICAgICAgICAgInR5
cGUiOiAiaW50ZWdlciIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5pcXVlIGlkZW50
aWZpZXIgb2YgRGF0YWJhc2Ugb2JqZWN0LiIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAg
ICAgICAgImlkIjogIlByaW1hcnlDb2xvcnMiLAorICAgICAgICAgICAgInR5cGUiOiAic3RyaW5n
IiwKKyAgICAgICAgICAgICJlbnVtIjogWyJyZWQiLCAiZ3JlZW4iLCAiYmx1ZSJdCisgICAgICAg
IH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJFcnJvciIsCisgICAgICAgICAgICAi
dHlwZSI6ICJvYmplY3QiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkRhdGFiYXNlIGVy
cm9yLiIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IFsKKyAgICAgICAgICAgICAgICB7ICJu
YW1lIjogIm1lc3NhZ2UiLCAidHlwZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRpb24iOiAiRXJyb3Ig
bWVzc2FnZS4iIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2RlIiwgInR5cGUiOiAi
aW50ZWdlciIsICJkZXNjcmlwdGlvbiI6ICJFcnJvciBjb2RlLiIgfQorICAgICAgICAgICAgXQor
ICAgICAgICB9CisgICAgXSwKKyAgICAiY29tbWFuZHMiOiBbCisgICAgICAgIHsKKyAgICAgICAg
ICAgICJuYW1lIjogImV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMiLAorICAgICAg
ICAgICAgInBhcmFtZXRlcnMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJkYXRhYmFz
ZUlkIiwgIiRyZWYiOiAiRGF0YWJhc2VJZCIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjog
InF1ZXJ5IiwgInR5cGUiOiAic3RyaW5nIiB9CisgICAgICAgICAgICBdLAorICAgICAgICAgICAg
InJldHVybnMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0
eXBlIjogImFycmF5IiwgIm9wdGlvbmFsIjogdHJ1ZSwgIml0ZW1zIjogeyAidHlwZSI6ICJzdHJp
bmciIH0gfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm5vdGVzIiwgInR5cGUiOiAic3Ry
aW5nIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidGlt
ZXN0YW1wIiwgInR5cGUiOiAibnVtYmVyIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAidmFsdWVzIiwgInR5cGUiOiAib2JqZWN0IiwgIm9wdGlvbmFsIjog
dHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicGF5bG9hZCIsICJ0eXBlIjogImFu
eSIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImRhdGFi
YXNlSWQiLCAiJHJlZiI6ICJEYXRhYmFzZUlkIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAic3FsRXJyb3IiLCAiJHJlZiI6ICJFcnJvciIsICJvcHRpb25h
bCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNjcmVlbkNvbG9yIiwgIiRy
ZWYiOiAiUHJpbWFyeUNvbG9ycyIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogInByaW50Q29sb3IiLCAidHlwZSI6ICJzdHJpbmciLCAiZW51bSI6IFsiY3lh
biIsICJtYWdlbnRhIiwgInllbGxvdyIsICJibGFjayJdLCAib3B0aW9uYWwiOiB0cnVlIH0KKyAg
ICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAi
ZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMiLAorICAgICAgICAgICAgImFzeW5j
IjogdHJ1ZSwKKyAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWworICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAiZGF0YWJhc2VJZCIsICIkcmVmIjogIkRhdGFiYXNlSWQiIH0sCisgICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJxdWVyeSIsICJ0eXBlIjogInN0cmluZyIgfQorICAgICAgICAgICAg
XSwKKyAgICAgICAgICAgICJyZXR1cm5zIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
Y29sdW1uTmFtZXMiLCAidHlwZSI6ICJhcnJheSIsICJvcHRpb25hbCI6IHRydWUsICJpdGVtcyI6
IHsgInR5cGUiOiAic3RyaW5nIiB9IH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJub3Rl
cyIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciIsICJvcHRpb25hbCI6IHRy
dWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInZhbHVlcyIsICJ0eXBlIjogIm9iamVj
dCIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBheWxv
YWQiLCAidHlwZSI6ICJhbnkiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJkYXRhYmFzZUlkIiwgIiRyZWYiOiAiRGF0YWJhc2VJZCIsICJvcHRpb25hbCI6
IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNxbEVycm9yIiwgIiRyZWYiOiAi
RXJyb3IiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJz
Y3JlZW5Db2xvciIsICIkcmVmIjogIlByaW1hcnlDb2xvcnMiLCAib3B0aW9uYWwiOiB0cnVlIH0s
CisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwcmludENvbG9yIiwgInR5cGUiOiAic3RyaW5n
IiwgImVudW0iOiBbImN5YW4iLCAibWFnZW50YSIsICJ5ZWxsb3ciLCAiYmxhY2siXSwgIm9wdGlv
bmFsIjogdHJ1ZSB9CisgICAgICAgICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAg
ICAgICAgICJuYW1lIjogImV4ZWN1dGVTUUxTeW5jIiwKKyAgICAgICAgICAgICJwYXJhbWV0ZXJz
IjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZGF0YWJhc2VJZCIsICIkcmVmIjogIkRh
dGFiYXNlSWQiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJxdWVyeSIsICJ0eXBlIjog
InN0cmluZyIgfQorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICJyZXR1cm5zIjogWworICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJhcnJheSIsICJp
dGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9IH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjog
InRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1l
IjogInZhbHVlcyIsICJ0eXBlIjogIm9iamVjdCIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1l
IjogInBheWxvYWQiLCAidHlwZSI6ICJhbnkiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJkYXRhYmFzZUlkIiwgIiRyZWYiOiAiRGF0YWJhc2VJZCIgfSwKKyAgICAgICAgICAgICAgICB7
ICJuYW1lIjogInNxbEVycm9yIiwgIiRyZWYiOiAiRXJyb3IiIH0sCisgICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJzY3JlZW5Db2xvciIsICIkcmVmIjogIlByaW1hcnlDb2xvcnMiIH0sCisgICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJwcmludENvbG9yIiwgInR5cGUiOiAic3RyaW5nIiwgImVu
dW0iOiBbImN5YW4iLCAibWFnZW50YSIsICJ5ZWxsb3ciLCAiYmxhY2siXSB9CisgICAgICAgICAg
ICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImV4ZWN1dGVT
UUxBc3luYyIsCisgICAgICAgICAgICAiYXN5bmMiOiB0cnVlLAorICAgICAgICAgICAgInBhcmFt
ZXRlcnMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJkYXRhYmFzZUlkIiwgIiRyZWYi
OiAiRGF0YWJhc2VJZCIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInF1ZXJ5IiwgInR5
cGUiOiAic3RyaW5nIiB9CisgICAgICAgICAgICBdLAorICAgICAgICAgICAgInJldHVybnMiOiBb
CisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogImFycmF5
IiwgIml0ZW1zIjogeyAidHlwZSI6ICJzdHJpbmciIH0gfSwKKyAgICAgICAgICAgICAgICB7ICJu
YW1lIjogIm5vdGVzIiwgInR5cGUiOiAic3RyaW5nIiB9LAorICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAidGltZXN0YW1wIiwgInR5cGUiOiAibnVtYmVyIiB9LAorICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAidmFsdWVzIiwgInR5cGUiOiAib2JqZWN0IiB9LAorICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAicGF5bG9hZCIsICJ0eXBlIjogImFueSIgfSwKKyAgICAgICAgICAgICAgICB7ICJu
YW1lIjogImRhdGFiYXNlSWQiLCAiJHJlZiI6ICJEYXRhYmFzZUlkIiB9LAorICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAic3FsRXJyb3IiLCAiJHJlZiI6ICJFcnJvciIgfSwKKyAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogInNjcmVlbkNvbG9yIiwgIiRyZWYiOiAiUHJpbWFyeUNvbG9ycyIgfSwK
KyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInByaW50Q29sb3IiLCAidHlwZSI6ICJzdHJpbmci
LCAiZW51bSI6IFsiY3lhbiIsICJtYWdlbnRhIiwgInllbGxvdyIsICJibGFjayJdIH0KKyAgICAg
ICAgICAgIF0KKyAgICAgICAgfQorICAgIF0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9jb21tYW5kcy13aXRoLW9wdGlvbmFsLWNh
bGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9jb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFt
ZXRlcnMuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zODU2MWU3MzQ1NzU1N2I5NTBjYWJjY2RjMmU5OWE5YTNj
MTkzNDBjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2NvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1l
dGVycy5qc29uCkBAIC0wLDAgKzEsNzYgQEAKK3sKKyAgICAiZG9tYWluIjogIkRhdGFiYXNlIiwK
KyAgICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJEYXRhYmFzZUlk
IiwKKyAgICAgICAgICAgICJ0eXBlIjogImludGVnZXIiLAorICAgICAgICAgICAgImRlc2NyaXB0
aW9uIjogIlVuaXF1ZSBpZGVudGlmaWVyIG9mIERhdGFiYXNlIG9iamVjdC4iCisgICAgICAgIH0s
CisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJQcmltYXJ5Q29sb3JzIiwKKyAgICAgICAg
ICAgICJ0eXBlIjogInN0cmluZyIsCisgICAgICAgICAgICAiZW51bSI6IFsicmVkIiwgImdyZWVu
IiwgImJsdWUiXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiRXJy
b3IiLAorICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKKyAgICAgICAgICAgICJkZXNjcmlw
dGlvbiI6ICJEYXRhYmFzZSBlcnJvci4iLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCisg
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJtZXNzYWdlIiwgInR5cGUiOiAic3RyaW5nIiwgImRl
c2NyaXB0aW9uIjogIkVycm9yIG1lc3NhZ2UuIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAiY29kZSIsICJ0eXBlIjogImludGVnZXIiLCAiZGVzY3JpcHRpb24iOiAiRXJyb3IgY29kZS4i
IH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0sCisgICAgImNvbW1hbmRzIjogWwor
ICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0
ZXJzIiwKKyAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWworICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJhcnJheSIsICJvcHRpb25hbCI6IHRydWUsICJp
dGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9IH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciIsICJvcHRpb25h
bCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInZhbHVlcyIsICJ0eXBlIjog
Im9iamVjdCIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjog
InBheWxvYWQiLCAidHlwZSI6ICJhbnkiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJkYXRhYmFzZUlkIiwgIiRyZWYiOiAiRGF0YWJhc2VJZCIsICJvcHRp
b25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNxbEVycm9yIiwgIiRy
ZWYiOiAiRXJyb3IiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJzY3JlZW5Db2xvciIsICIkcmVmIjogIlByaW1hcnlDb2xvcnMiLCAib3B0aW9uYWwiOiB0
cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwcmludENvbG9yIiwgInR5cGUiOiAi
c3RyaW5nIiwgImVudW0iOiBbImN5YW4iLCAibWFnZW50YSIsICJ5ZWxsb3ciLCAiYmxhY2siXSwg
Im9wdGlvbmFsIjogdHJ1ZSB9CisgICAgICAgICAgICBdLAorICAgICAgICAgICAgInJldHVybnMi
OiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogImFy
cmF5IiwgIm9wdGlvbmFsIjogdHJ1ZSwgIml0ZW1zIjogeyAidHlwZSI6ICJzdHJpbmciIH0gfSwK
KyAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm5vdGVzIiwgInR5cGUiOiAic3RyaW5nIiwgIm9w
dGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidGltZXN0YW1wIiwg
InR5cGUiOiAibnVtYmVyIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAidmFsdWVzIiwgInR5cGUiOiAib2JqZWN0IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAor
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicGF5bG9hZCIsICJ0eXBlIjogImFueSIsICJvcHRp
b25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImRhdGFiYXNlSWQiLCAi
JHJlZiI6ICJEYXRhYmFzZUlkIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAic3FsRXJyb3IiLCAiJHJlZiI6ICJFcnJvciIsICJvcHRpb25hbCI6IHRydWUg
fSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNjcmVlbkNvbG9yIiwgIiRyZWYiOiAiUHJp
bWFyeUNvbG9ycyIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1l
IjogInByaW50Q29sb3IiLCAidHlwZSI6ICJzdHJpbmciLCAiZW51bSI6IFsiY3lhbiIsICJtYWdl
bnRhIiwgInllbGxvdyIsICJibGFjayJdLCAib3B0aW9uYWwiOiB0cnVlIH0KKyAgICAgICAgICAg
IF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiZXhlY3V0ZU5v
T3B0aW9uYWxQYXJhbWV0ZXJzIiwKKyAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWworICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJhcnJheSIsICJpdGVt
cyI6IHsgInR5cGUiOiAic3RyaW5nIiB9IH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJu
b3RlcyIsICJ0eXBlIjogInN0cmluZyIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRp
bWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjog
InZhbHVlcyIsICJ0eXBlIjogIm9iamVjdCIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjog
InBheWxvYWQiLCAidHlwZSI6ICJhbnkiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJk
YXRhYmFzZUlkIiwgIiRyZWYiOiAiRGF0YWJhc2VJZCIgfSwKKyAgICAgICAgICAgICAgICB7ICJu
YW1lIjogInNxbEVycm9yIiwgIiRyZWYiOiAiRXJyb3IiIH0sCisgICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJzY3JlZW5Db2xvciIsICIkcmVmIjogIlByaW1hcnlDb2xvcnMiIH0sCisgICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJwcmludENvbG9yIiwgInR5cGUiOiAic3RyaW5nIiwgImVudW0i
OiBbImN5YW4iLCAibWFnZW50YSIsICJ5ZWxsb3ciLCAiYmxhY2siXSB9CisgICAgICAgICAgICBd
LAorICAgICAgICAgICAgInJldHVybnMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJj
b2x1bW5OYW1lcyIsICJ0eXBlIjogImFycmF5IiwgIml0ZW1zIjogeyAidHlwZSI6ICJzdHJpbmci
IH0gfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm5vdGVzIiwgInR5cGUiOiAic3RyaW5n
IiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidGltZXN0YW1wIiwgInR5cGUiOiAibnVt
YmVyIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidmFsdWVzIiwgInR5cGUiOiAib2Jq
ZWN0IiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicGF5bG9hZCIsICJ0eXBlIjogImFu
eSIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImRhdGFiYXNlSWQiLCAiJHJlZiI6ICJE
YXRhYmFzZUlkIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic3FsRXJyb3IiLCAiJHJl
ZiI6ICJFcnJvciIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNjcmVlbkNvbG9yIiwg
IiRyZWYiOiAiUHJpbWFyeUNvbG9ycyIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBy
aW50Q29sb3IiLCAidHlwZSI6ICJzdHJpbmciLCAiZW51bSI6IFsiY3lhbiIsICJtYWdlbnRhIiwg
InllbGxvdyIsICJibGFjayJdIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0KK30K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9kb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24gYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZG9tYWlucy13aXRoLXZhcnlpbmctY29t
bWFuZC1zaXplcy5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjAwNGQ3YzkwMjVlN2U4MDE4ZGFkNzI4NmVkYTk4
NzhlNTczOTllZWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5q
c29uCkBAIC0wLDAgKzEsNTUgQEAKK1sKK3sKKyAgICAiZG9tYWluIjogIk5ldHdvcmsxIiwKKwor
ICAgICJjb21tYW5kcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAibG9hZFJl
c291cmNlMSIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiTG9hZHMgYSByZXNvdXJjZSBp
biB0aGUgY29udGV4dCBvZiBhIGZyYW1lIG9uIHRoZSBpbnNwZWN0ZWQgcGFnZSB3aXRob3V0IGNy
b3NzIG9yaWdpbiBjaGVja3MuIgorICAgICAgICB9CisgICAgXQorfSwKK3sKKyAgICAiZG9tYWlu
IjogIk5ldHdvcmsyIiwKKyAgICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJp
ZCI6ICJMb2FkZXJJZCIsCisgICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAorICAgICAgICAg
ICAgImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBsb2FkZXIgaWRlbnRpZmllci4iCisgICAgICAgIH0K
KyAgICBdCit9LAoreworICAgICJkb21haW4iOiAiTmV0d29yazMiLAorICAgICJjb21tYW5kcyI6
IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAibG9hZFJlc291cmNlMSIsCisgICAg
ICAgICAgICAiZGVzY3JpcHRpb24iOiAiTG9hZHMgYSByZXNvdXJjZSBpbiB0aGUgY29udGV4dCBv
ZiBhIGZyYW1lIG9uIHRoZSBpbnNwZWN0ZWQgcGFnZSB3aXRob3V0IGNyb3NzIG9yaWdpbiBjaGVj
a3MuIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJsb2FkUmVz
b3VyY2UyIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJMb2FkcyBhIHJlc291cmNlIGlu
IHRoZSBjb250ZXh0IG9mIGEgZnJhbWUgb24gdGhlIGluc3BlY3RlZCBwYWdlIHdpdGhvdXQgY3Jv
c3Mgb3JpZ2luIGNoZWNrcy4iCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJu
YW1lIjogImxvYWRSZXNvdXJjZTMiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkxvYWRz
IGEgcmVzb3VyY2UgaW4gdGhlIGNvbnRleHQgb2YgYSBmcmFtZSBvbiB0aGUgaW5zcGVjdGVkIHBh
Z2Ugd2l0aG91dCBjcm9zcyBvcmlnaW4gY2hlY2tzLiIKKyAgICAgICAgfSwKKyAgICAgICAgewor
ICAgICAgICAgICAgIm5hbWUiOiAibG9hZFJlc291cmNlNCIsCisgICAgICAgICAgICAiZGVzY3Jp
cHRpb24iOiAiTG9hZHMgYSByZXNvdXJjZSBpbiB0aGUgY29udGV4dCBvZiBhIGZyYW1lIG9uIHRo
ZSBpbnNwZWN0ZWQgcGFnZSB3aXRob3V0IGNyb3NzIG9yaWdpbiBjaGVja3MuIgorICAgICAgICB9
LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJsb2FkUmVzb3VyY2U1IiwKKyAgICAg
ICAgICAgICJkZXNjcmlwdGlvbiI6ICJMb2FkcyBhIHJlc291cmNlIGluIHRoZSBjb250ZXh0IG9m
IGEgZnJhbWUgb24gdGhlIGluc3BlY3RlZCBwYWdlIHdpdGhvdXQgY3Jvc3Mgb3JpZ2luIGNoZWNr
cy4iCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImxvYWRSZXNv
dXJjZTYiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkxvYWRzIGEgcmVzb3VyY2UgaW4g
dGhlIGNvbnRleHQgb2YgYSBmcmFtZSBvbiB0aGUgaW5zcGVjdGVkIHBhZ2Ugd2l0aG91dCBjcm9z
cyBvcmlnaW4gY2hlY2tzLiIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5h
bWUiOiAibG9hZFJlc291cmNlNyIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiTG9hZHMg
YSByZXNvdXJjZSBpbiB0aGUgY29udGV4dCBvZiBhIGZyYW1lIG9uIHRoZSBpbnNwZWN0ZWQgcGFn
ZSB3aXRob3V0IGNyb3NzIG9yaWdpbiBjaGVja3MuIgorICAgICAgICB9CisgICAgXQorfQorXQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2V2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9ldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0
ZXJzLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNWVmYzdjYjMxOWIwYjM2ZmE5NWM0NzE0MDMwNTM3Nzg2MjRh
ZmMxMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9ldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24KQEAgLTAs
MCArMSw1MiBAQAoreworICAgICJkb21haW4iOiAiRGF0YWJhc2UiLAorICAgICJ0eXBlcyI6IFsK
KyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIkRhdGFiYXNlSWQiLAorICAgICAgICAgICAg
InR5cGUiOiAic3RyaW5nIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUgaWRl
bnRpZmllciBvZiBEYXRhYmFzZSBvYmplY3QuIgorICAgICAgICB9LAorICAgICAgICB7CisgICAg
ICAgICAgICAiaWQiOiAiUHJpbWFyeUNvbG9ycyIsCisgICAgICAgICAgICAidHlwZSI6ICJzdHJp
bmciLAorICAgICAgICAgICAgInZhbHVlcyI6IFsicmVkIiwgImdyZWVuIiwgImJsdWUiXQorICAg
ICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiRXJyb3IiLAorICAgICAgICAg
ICAgInR5cGUiOiAib2JqZWN0IiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJEYXRhYmFz
ZSBlcnJvci4iLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCisgICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJtZXNzYWdlIiwgInR5cGUiOiAic3RyaW5nIiwgImRlc2NyaXB0aW9uIjogIkVy
cm9yIG1lc3NhZ2UuIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29kZSIsICJ0eXBl
IjogImludGVnZXIiLCAiZGVzY3JpcHRpb24iOiAiRXJyb3IgY29kZS4iIH0KKyAgICAgICAgICAg
IF0KKyAgICAgICAgfQorICAgIF0sCisgICAgImV2ZW50cyI6IFsKKyAgICAgICAgeworICAgICAg
ICAgICAgIm5hbWUiOiAiZGlkRXhlY3V0ZU9wdGlvbmFsUGFyYW1ldGVycyIsCisgICAgICAgICAg
ICAicGFyYW1ldGVycyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbHVtbk5hbWVz
IiwgInR5cGUiOiAiYXJyYXkiLCAib3B0aW9uYWwiOiB0cnVlLCAiaXRlbXMiOiB7ICJ0eXBlIjog
InN0cmluZyIgfSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibm90ZXMiLCAidHlwZSI6
ICJzdHJpbmciLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJ0aW1lc3RhbXAiLCAidHlwZSI6ICJudW1iZXIiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJ2YWx1ZXMiLCAidHlwZSI6ICJvYmplY3QiLCAib3B0aW9u
YWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwYXlsb2FkIiwgInR5cGUi
OiAiYW55IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
c3FsRXJyb3IiLCAiJHJlZiI6ICJFcnJvciIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogInNjcmVlbkNvbG9yIiwgIiRyZWYiOiAiUHJpbWFyeUNvbG9ycyIs
ICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInByaW50Q29s
b3IiLCAidHlwZSI6ICJzdHJpbmciLCAidmFsdWVzIjogWyJjeWFuIiwgIm1hZ2VudGEiLCAieWVs
bG93IiwgImJsYWNrIl0sICJvcHRpb25hbCI6IHRydWUgfQorICAgICAgICAgICAgXQorICAgICAg
ICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJkaWRFeGVjdXRlTm9PcHRpb25h
bFBhcmFtZXRlcnMiLAorICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCisgICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogImFycmF5IiwgIml0ZW1zIjogeyAi
dHlwZSI6ICJzdHJpbmciIH0gfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm5vdGVzIiwg
InR5cGUiOiAic3RyaW5nIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidGltZXN0YW1w
IiwgInR5cGUiOiAibnVtYmVyIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidmFsdWVz
IiwgInR5cGUiOiAib2JqZWN0IiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicGF5bG9h
ZCIsICJ0eXBlIjogImFueSIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNxbEVycm9y
IiwgIiRyZWYiOiAiRXJyb3IiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzY3JlZW5D
b2xvciIsICIkcmVmIjogIlByaW1hcnlDb2xvcnMiIH0sCisgICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJwcmludENvbG9yIiwgInR5cGUiOiAic3RyaW5nIiwgInZhbHVlcyI6IFsiY3lhbiIsICJt
YWdlbnRhIiwgInllbGxvdyIsICJibGFjayJdIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQor
ICAgIF0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9leHBlY3RlZC9jb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uLXJl
c3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBl
Y3RlZC9jb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uLXJlc3VsdApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5kYmFjOTJiOGViMDEzMmZhN2E1NTljMGQxY2MxNzE3NTZjMjFmODU0Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVj
dGVkL2NvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24tcmVzdWx0CkBAIC0wLDAgKzEs
NzI0IEBACisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdEJhY2tlbmRDb21tYW5kcy5qcwor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uCisvLyBi
eSB0aGUgc2NyaXB0OiBKYXZhU2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0cy9Db2RlR2VuZXJhdG9y
SW5zcGVjdG9yLnB5CisKKy8vIERhdGFiYXNlLgorSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRh
dGFiYXNlRGlzcGF0Y2hlciA9IEluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW5EaXNwYXRj
aGVyLmJpbmQoSW5zcGVjdG9yQmFja2VuZCwgIkRhdGFiYXNlIik7CitJbnNwZWN0b3JCYWNrZW5k
LnJlZ2lzdGVyRW51bSgiRGF0YWJhc2UuUHJpbWFyeUNvbG9ycyIsIHtSZWQ6ICJyZWQiLCBHcmVl
bjogImdyZWVuIiwgQmx1ZTogImJsdWUifSk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29t
bWFuZCgiRGF0YWJhc2UuZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyIsIFt7Im5h
bWUiOiAiZGF0YWJhc2VJZCIsICJ0eXBlIjogIm51bWJlciIsICJvcHRpb25hbCI6IGZhbHNlfSwg
eyJuYW1lIjogInF1ZXJ5IiwgInR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjogZmFsc2V9XSwg
WyJjb2x1bW5OYW1lcyIsICJub3RlcyIsICJ0aW1lc3RhbXAiLCAidmFsdWVzIiwgInBheWxvYWQi
LCAiZGF0YWJhc2VJZCIsICJzcWxFcnJvciIsICJzY3JlZW5Db2xvciIsICJwcmludENvbG9yIl0p
OworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIkRhdGFiYXNlLmV4ZWN1dGVTUUxB
c3luY09wdGlvbmFsUmV0dXJuVmFsdWVzIiwgW3sibmFtZSI6ICJkYXRhYmFzZUlkIiwgInR5cGUi
OiAibnVtYmVyIiwgIm9wdGlvbmFsIjogZmFsc2V9LCB7Im5hbWUiOiAicXVlcnkiLCAidHlwZSI6
ICJzdHJpbmciLCAib3B0aW9uYWwiOiBmYWxzZX1dLCBbImNvbHVtbk5hbWVzIiwgIm5vdGVzIiwg
InRpbWVzdGFtcCIsICJ2YWx1ZXMiLCAicGF5bG9hZCIsICJkYXRhYmFzZUlkIiwgInNxbEVycm9y
IiwgInNjcmVlbkNvbG9yIiwgInByaW50Q29sb3IiXSk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lz
dGVyQ29tbWFuZCgiRGF0YWJhc2UuZXhlY3V0ZVNRTFN5bmMiLCBbeyJuYW1lIjogImRhdGFiYXNl
SWQiLCAidHlwZSI6ICJudW1iZXIiLCAib3B0aW9uYWwiOiBmYWxzZX0sIHsibmFtZSI6ICJxdWVy
eSIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IGZhbHNlfV0sIFsiY29sdW1uTmFtZXMi
LCAibm90ZXMiLCAidGltZXN0YW1wIiwgInZhbHVlcyIsICJwYXlsb2FkIiwgImRhdGFiYXNlSWQi
LCAic3FsRXJyb3IiLCAic2NyZWVuQ29sb3IiLCAicHJpbnRDb2xvciJdKTsKK0luc3BlY3RvckJh
Y2tlbmQucmVnaXN0ZXJDb21tYW5kKCJEYXRhYmFzZS5leGVjdXRlU1FMQXN5bmMiLCBbeyJuYW1l
IjogImRhdGFiYXNlSWQiLCAidHlwZSI6ICJudW1iZXIiLCAib3B0aW9uYWwiOiBmYWxzZX0sIHsi
bmFtZSI6ICJxdWVyeSIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IGZhbHNlfV0sIFsi
Y29sdW1uTmFtZXMiLCAibm90ZXMiLCAidGltZXN0YW1wIiwgInZhbHVlcyIsICJwYXlsb2FkIiwg
ImRhdGFiYXNlSWQiLCAic3FsRXJyb3IiLCAic2NyZWVuQ29sb3IiLCAicHJpbnRDb2xvciJdKTsK
KyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdEJhY2tlbmRDb21tYW5kcy5qcworCisjIyMgQmVn
aW4gRmlsZTogSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIGNvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6
IEphdmFTY3JpcHRDb3JlL3JlcGxheS9zY3JpcHRzL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkK
KworI2lmbmRlZiBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzX2gKKyNkZWZpbmUgSW5z
cGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVyc19oCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQor
CisjaW5jbHVkZSAiSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5oIgorI2luY2x1ZGUgPGluc3Bl
Y3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVm
UHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNw
ZWN0b3IgeworCit0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKworI2lmIEVOQUJMRShTUUxf
REFUQUJBU0UpCitjbGFzcyBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxl
ciB7CitwdWJsaWM6CisgICAgLy8gTmFtZWQgYWZ0ZXIgcGFyYW1ldGVyICdzY3JlZW5Db2xvcicg
d2hpbGUgZ2VuZXJhdGluZyBjb21tYW5kL2V2ZW50IGV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1
cm5WYWx1ZXMuCisgICAgZW51bSBjbGFzcyBTY3JlZW5Db2xvciB7CisgICAgICAgIFJlZCA9IDAs
CisgICAgICAgIEdyZWVuID0gMSwKKyAgICAgICAgQmx1ZSA9IDIsCisgICAgfTsgLy8gZW51bSBj
bGFzcyBTY3JlZW5Db2xvcgorICAgIC8vIE5hbWVkIGFmdGVyIHBhcmFtZXRlciAncHJpbnRDb2xv
cicgd2hpbGUgZ2VuZXJhdGluZyBjb21tYW5kL2V2ZW50IGV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxS
ZXR1cm5WYWx1ZXMuCisgICAgZW51bSBjbGFzcyBQcmludENvbG9yIHsKKyAgICAgICAgQ3lhbiA9
IDMsCisgICAgICAgIE1hZ2VudGEgPSA0LAorICAgICAgICBZZWxsb3cgPSA1LAorICAgICAgICBC
bGFjayA9IDYsCisgICAgfTsgLy8gZW51bSBjbGFzcyBQcmludENvbG9yCisgICAgdmlydHVhbCB2
b2lkIGV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMoRXJyb3JTdHJpbmcqLCBpbnQg
aW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSwgUmVmUHRyPEluc3BlY3Rvcjo6
VHlwZUJ1aWxkZXI6OkFycmF5PFN0cmluZz4+JiBvcHRfb3V0X2NvbHVtbk5hbWVzLCBJbnNwZWN0
b3I6OlR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8U3RyaW5nPiogb3B0X291dF9ub3RlcywgSW5zcGVj
dG9yOjpUeXBlQnVpbGRlcjo6T3B0T3V0cHV0PGRvdWJsZT4qIG9wdF9vdXRfdGltZXN0YW1wLCBJ
bnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmpl
Y3Q+KiBvcHRfb3V0X3ZhbHVlcywgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6T3B0T3V0cHV0PElu
c3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+KiBvcHRfb3V0X3BheWxvYWQsIGNvbnN0IEluc3BlY3Rv
cjo6VHlwZUJ1aWxkZXI6OkRhdGFiYXNlOjpEYXRhYmFzZUlkKiBjb25zdCBvcHRfb3V0X2RhdGFi
YXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpEYXRhYmFzZTo6RXJyb3I+JiBv
cHRfb3V0X3NxbEVycm9yLCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpEYXRhYmFzZTo6UHJpbWFy
eUNvbG9ycyogb3B0X291dF9zY3JlZW5Db2xvciwgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlz
cGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3IqIG9wdF9vdXRfcHJpbnRDb2xvcikgPSAwOworICAg
IGNsYXNzIEV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJhY2sgOiBwdWJs
aWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlIHsK
KyAgICBwdWJsaWM6CisgICAgICAgIEV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVz
Q2FsbGJhY2soUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
PiwgaW50IGlkKTsKKyAgICAgICAgdm9pZCBzZW5kU3VjY2VzcyhQYXNzUmVmUHRyPEluc3BlY3Rv
cjo6VHlwZUJ1aWxkZXI6OkFycmF5PFN0cmluZz4+IGNvbHVtbk5hbWVzLCBJbnNwZWN0b3I6OlR5
cGVCdWlsZGVyOjpPcHRPdXRwdXQ8U3RyaW5nPiogbm90ZXMsIEluc3BlY3Rvcjo6VHlwZUJ1aWxk
ZXI6Ok9wdE91dHB1dDxkb3VibGU+KiB0aW1lc3RhbXAsIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6
Ok9wdE91dHB1dDxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4qIHZhbHVlcywgSW5zcGVjdG9y
OjpUeXBlQnVpbGRlcjo6T3B0T3V0cHV0PEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+KiBwYXls
b2FkLCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8aW50PiogZGF0YWJhc2VJZCwg
UGFzc1JlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpEYXRhYmFzZTo6RXJyb3I+IHNxbEVy
cm9yLCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8U3RyaW5nPiogc2NyZWVuQ29s
b3IsIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6Ok9wdE91dHB1dDxTdHJpbmc+KiBwcmludENvbG9y
KTsKKyAgICB9OworICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVy
blZhbHVlcyhFcnJvclN0cmluZyosIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGlu
X3F1ZXJ5LCBQYXNzUmVmUHRyPEV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzQ2Fs
bGJhY2s+IGNhbGxiYWNrKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVTUUxTeW5jKEVy
cm9yU3RyaW5nKiwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnksIFJl
ZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheTxTdHJpbmc+PiYgb3V0X2NvbHVtbk5h
bWVzLCBTdHJpbmcqIG91dF9ub3RlcywgZG91YmxlKiBvdXRfdGltZXN0YW1wLCBJbnNwZWN0b3I6
Okluc3BlY3Rvck9iamVjdCogb3V0X3ZhbHVlcywgSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSog
b3V0X3BheWxvYWQsIGludCogb3V0X2RhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlR5cGVC
dWlsZGVyOjpEYXRhYmFzZTo6RXJyb3I+JiBvdXRfc3FsRXJyb3IsIEluc3BlY3Rvcjo6VHlwZUJ1
aWxkZXI6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzKiBvdXRfc2NyZWVuQ29sb3IsIEluc3BlY3Rv
ckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQcmludENvbG9yKiBvdXRfcHJpbnRD
b2xvcikgPSAwOworICAgIGNsYXNzIEV4ZWN1dGVTUUxBc3luY0NhbGxiYWNrIDogcHVibGljIElu
c3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZSB7CisgICAg
cHVibGljOgorICAgICAgICBFeGVjdXRlU1FMQXN5bmNDYWxsYmFjayhQYXNzUmVmUHRyPEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+LCBpbnQgaWQpOworICAgICAgICB2b2lk
IHNlbmRTdWNjZXNzKFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk8U3Ry
aW5nPj4gY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgbm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAs
IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0IHZhbHVlcywgSW5zcGVjdG9yOjpJbnNwZWN0b3JW
YWx1ZSBwYXlsb2FkLCBpbnQgZGF0YWJhc2VJZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlR5cGVC
dWlsZGVyOjpEYXRhYmFzZTo6RXJyb3I+IHNxbEVycm9yLCBjb25zdCBTdHJpbmcmIHNjcmVlbkNv
bG9yLCBjb25zdCBTdHJpbmcmIHByaW50Q29sb3IpOworICAgIH07CisgICAgdmlydHVhbCB2b2lk
IGV4ZWN1dGVTUUxBc3luYyhFcnJvclN0cmluZyosIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBT
dHJpbmcmIGluX3F1ZXJ5LCBQYXNzUmVmUHRyPEV4ZWN1dGVTUUxBc3luY0NhbGxiYWNrPiBjYWxs
YmFjaykgPSAwOworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgfkluc3BlY3RvckRhdGFiYXNlQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyKCk7Cit9OworI2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJB
U0UpCisKKyNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQorY2xhc3MgSW5zcGVjdG9yRGF0YWJhc2VC
YWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3BlY3RvclN1cHBs
ZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0
cjxJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUoSW5zcGVjdG9yOjpJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciosIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3Bh
dGNoZXJIYW5kbGVyKik7CisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoKGxvbmcgY2FsbElkLCBj
b25zdCBTdHJpbmcmIG1ldGhvZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVj
dD4gbWVzc2FnZSkgb3ZlcnJpZGU7Citwcml2YXRlOgorICAgIHZvaWQgZXhlY3V0ZVNRTFN5bmNP
cHRpb25hbFJldHVyblZhbHVlcyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0
b3JPYmplY3QmIG1lc3NhZ2UpOworICAgIHZvaWQgZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1
cm5WYWx1ZXMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0JiBt
ZXNzYWdlKTsKKyAgICB2b2lkIGV4ZWN1dGVTUUxTeW5jKGxvbmcgY2FsbElkLCBjb25zdCBJbnNw
ZWN0b3I6Okluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7CisgICAgdm9pZCBleGVjdXRlU1FMQXN5
bmMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdl
KTsKK3ByaXZhdGU6CisgICAgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcihJbnNw
ZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiwgSW5zcGVjdG9yRGF0YWJhc2VCYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKKyAgICBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVySGFuZGxlciogbV9hZ2VudDsKK307CisjZW5kaWYgLy8gRU5BQkxFKFNRTF9EQVRBQkFT
RSkKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVD
VE9SKQorCisjZW5kaWYgLy8gIWRlZmluZWQoSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVy
c19oKQorIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKwor
IyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24KKy8vIGJ5IHRo
ZSBzY3JpcHQ6IEphdmFTY3JpcHRDb3JlL3JlcGxheS9zY3JpcHRzL0NvZGVHZW5lcmF0b3JJbnNw
ZWN0b3IucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkluc3BlY3RvclRlc3RC
YWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRl
IDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLmg+CisjaW5jbHVkZSA8aW5zcGVj
dG9yL0luc3BlY3RvclZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKwor
bmFtZXNwYWNlIEluc3BlY3RvciB7CisKKyNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQorSW5zcGVj
dG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6On5JbnNwZWN0b3JEYXRhYmFzZUJh
Y2tlbmREaXNwYXRjaGVySGFuZGxlcigpIHsgfQorI2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJB
U0UpCisKKyNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQorUGFzc1JlZlB0cjxJbnNwZWN0b3JEYXRh
YmFzZUJhY2tlbmREaXNwYXRjaGVyPiBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVy
OjpjcmVhdGUoSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyLCBJ
bnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCit7CisgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKGJh
Y2tlbmREaXNwYXRjaGVyLCBhZ2VudCkpOworfQorCitJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmRE
aXNwYXRjaGVyOjpJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKEluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlciwgSW5zcGVjdG9yRGF0YWJhc2VCYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQorICAgIDogSW5zcGVjdG9yU3VwcGxlbWVudGFs
QmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIpCisgICAgLCBtX2FnZW50KGFnZW50
KQoreworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFp
bihBU0NJSUxpdGVyYWwoIkRhdGFiYXNlIiksIHRoaXMpOworfQorCit2b2lkIEluc3BlY3RvckRh
dGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgY2FsbElkLCBjb25zdCBTdHJp
bmcmIG1ldGhvZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1lc3NhZ2UpCit7CisgICAg
UmVmPEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOwor
CisgICAgaWYgKG1ldGhvZCA9PSAiZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyIp
CisgICAgICAgIGV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMoY2FsbElkLCAqbWVz
c2FnZS5nZXQoKSk7CisgICAgZWxzZSBpZiAobWV0aG9kID09ICJleGVjdXRlU1FMQXN5bmNPcHRp
b25hbFJldHVyblZhbHVlcyIpCisgICAgICAgIGV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJu
VmFsdWVzKGNhbGxJZCwgKm1lc3NhZ2UuZ2V0KCkpOworICAgIGVsc2UgaWYgKG1ldGhvZCA9PSAi
ZXhlY3V0ZVNRTFN5bmMiKQorICAgICAgICBleGVjdXRlU1FMU3luYyhjYWxsSWQsICptZXNzYWdl
LmdldCgpKTsKKyAgICBlbHNlIGlmIChtZXRob2QgPT0gImV4ZWN1dGVTUUxBc3luYyIpCisgICAg
ICAgIGV4ZWN1dGVTUUxBc3luYyhjYWxsSWQsICptZXNzYWdlLmdldCgpKTsKKyAgICBlbHNlCisg
ICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwg
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCBTdHJpbmcoIiciKSAr
ICJEYXRhYmFzZSIgKyAnLicgKyBtZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7Cit9CisKK3Zv
aWQgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTFN5bmNPcHRp
b25hbFJldHVyblZhbHVlcyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNz
YWdlKQoreworICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNw
ZWN0b3JBcnJheTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1z
Q29udGFpbmVyID0gbWVzc2FnZS5nZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJwYXJhbXMiKSk7Cisg
ICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIu
Z2V0KCk7CisgICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xF
cnJvcnMuZ2V0KCk7CisgICAgaW50IGluX2RhdGFiYXNlSWQgPSBJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlcjo6Z2V0SW50KHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJkYXRhYmFz
ZUlkIiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzUHRyKTsKKyAgICBTdHJpbmcgaW5fcXVlcnkg
PSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0
ciwgQVNDSUlMaXRlcmFsKCJxdWVyeSIpLCBudWxscHRyLCBwcm90b2NvbEVycm9yc1B0cik7Cisg
ICAgaWYgKHByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgeworICAgICAgICBTdHJpbmcgZXJyb3JN
ZXNzYWdlID0gU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNh
bid0IGJlIHByb2Nlc3NlZCIsICJEYXRhYmFzZS5leGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJu
VmFsdWVzIik7CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJy
b3IoJmNhbGxJZCwgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkludmFsaWRQYXJhbXMsIGVy
cm9yTWVzc2FnZSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIEVycm9yU3RyaW5nIGVycm9yOworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPEluc3Bl
Y3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5PFN0cmluZz4+IG91dF9jb2x1bW5OYW1lczsKKyAgICBJ
bnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8U3RyaW5nPiBvdXRfbm90ZXM7CisgICAg
SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6T3B0T3V0cHV0PGRvdWJsZT4gb3V0X3RpbWVzdGFtcDsK
KyAgICBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8SW5zcGVjdG9yOjpJbnNwZWN0
b3JPYmplY3Q+IG91dF92YWx1ZXM7CisgICAgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6T3B0T3V0
cHV0PEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+IG91dF9wYXlsb2FkOworICAgIEluc3BlY3Rv
cjo6VHlwZUJ1aWxkZXI6OkRhdGFiYXNlOjpEYXRhYmFzZUlkIG91dF9kYXRhYmFzZUlkOworICAg
IFJlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpEYXRhYmFzZTo6RXJyb3I+IG91dF9zcWxF
cnJvcjsKKyAgICBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9y
cyBvdXRfc2NyZWVuQ29sb3I7CisgICAgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXI6OlByaW50Q29sb3Igb3V0X3ByaW50Q29sb3I7CisgICAgbV9hZ2VudC0+ZXhlY3V0
ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcygmZXJyb3IsIGluX2RhdGFiYXNlSWQsIGluX3F1
ZXJ5LCBvdXRfY29sdW1uTmFtZXMsICZvdXRfbm90ZXMsICZvdXRfdGltZXN0YW1wLCBvdXRfdmFs
dWVzLCAmb3V0X3BheWxvYWQsICZvdXRfZGF0YWJhc2VJZCwgb3V0X3NxbEVycm9yLCAmb3V0X3Nj
cmVlbkNvbG9yLCAmb3V0X3ByaW50Q29sb3IpOworCisgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkg
eworICAgICAgICBpZiAob3V0X2NvbHVtbk5hbWVzKQorICAgICAgICAgICAgcmVzdWx0LT5zZXRW
YWx1ZShBU0NJSUxpdGVyYWwoImNvbHVtbk5hbWVzIiksIG91dF9jb2x1bW5OYW1lcyk7CisgICAg
ICAgIGlmIChvdXRfbm90ZXMuaXNBc3NpZ25lZCgpKQorICAgICAgICAgICAgcmVzdWx0LT5zZXRT
dHJpbmcoQVNDSUlMaXRlcmFsKCJub3RlcyIpLCBvdXRfbm90ZXMuZ2V0VmFsdWUoKSk7CisgICAg
ICAgIGlmIChvdXRfdGltZXN0YW1wLmlzQXNzaWduZWQoKSkKKyAgICAgICAgICAgIHJlc3VsdC0+
c2V0TnVtYmVyKEFTQ0lJTGl0ZXJhbCgidGltZXN0YW1wIiksIG91dF90aW1lc3RhbXAuZ2V0VmFs
dWUoKSk7CisgICAgICAgIGlmIChvdXRfdmFsdWVzLmlzQXNzaWduZWQoKSkKKyAgICAgICAgICAg
IHJlc3VsdC0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgidmFsdWVzIiksIG91dF92YWx1ZXMuZ2V0
VmFsdWUoKSk7CisgICAgICAgIGlmIChvdXRfcGF5bG9hZC5pc0Fzc2lnbmVkKCkpCisgICAgICAg
ICAgICByZXN1bHQtPnNldFZhbHVlKEFTQ0lJTGl0ZXJhbCgicGF5bG9hZCIpLCBvdXRfcGF5bG9h
ZC5nZXRWYWx1ZSgpKTsKKyAgICAgICAgaWYgKG91dF9kYXRhYmFzZUlkLmlzQXNzaWduZWQoKSkK
KyAgICAgICAgICAgIHJlc3VsdC0+c2V0TnVtYmVyKEFTQ0lJTGl0ZXJhbCgiZGF0YWJhc2VJZCIp
LCBvdXRfZGF0YWJhc2VJZC5nZXRWYWx1ZSgpKTsKKyAgICAgICAgaWYgKG91dF9zcWxFcnJvcikK
KyAgICAgICAgICAgIHJlc3VsdC0+c2V0VmFsdWUoQVNDSUlMaXRlcmFsKCJzcWxFcnJvciIpLCBv
dXRfc3FsRXJyb3IpOworICAgICAgICBpZiAob3V0X3NjcmVlbkNvbG9yLmlzQXNzaWduZWQoKSkK
KyAgICAgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgic2NyZWVuQ29sb3Ii
KSwgb3V0X3NjcmVlbkNvbG9yLmdldFZhbHVlKCkpOworICAgICAgICBpZiAob3V0X3ByaW50Q29s
b3IuaXNBc3NpZ25lZCgpKQorICAgICAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoQVNDSUlMaXRl
cmFsKCJwcmludENvbG9yIiksIG91dF9wcmludENvbG9yLmdldFZhbHVlKCkpOworICAgIH0KKyAg
ICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFz
ZSgpLCBlcnJvcik7Cit9CisKK0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyOjpFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc0NhbGxiYWNrOjpFeGVjdXRl
U1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc0NhbGxiYWNrKFBhc3NSZWZQdHI8SW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXI+IGJhY2tlbmREaXNwYXRjaGVyLCBpbnQgaWQpIDogSW5zcGVjdG9y
OjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlKGJhY2tlbmREaXNwYXRj
aGVyLCBpZCkgeyB9CisKK3ZvaWQgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXI6OkV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJhY2s6OnNlbmRT
dWNjZXNzKFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk8U3RyaW5nPj4g
Y29sdW1uTmFtZXMsIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6Ok9wdE91dHB1dDxTdHJpbmc+KiBu
b3RlcywgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6T3B0T3V0cHV0PGRvdWJsZT4qIHRpbWVzdGFt
cCwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6T3B0T3V0cHV0PEluc3BlY3Rvcjo6SW5zcGVjdG9y
T2JqZWN0PiogdmFsdWVzLCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8SW5zcGVj
dG9yOjpJbnNwZWN0b3JWYWx1ZT4qIHBheWxvYWQsIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6Ok9w
dE91dHB1dDxpbnQ+KiBkYXRhYmFzZUlkLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxk
ZXI6OkRhdGFiYXNlOjpFcnJvcj4gc3FsRXJyb3IsIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6Ok9w
dE91dHB1dDxTdHJpbmc+KiBzY3JlZW5Db2xvciwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6T3B0
T3V0cHV0PFN0cmluZz4qIHByaW50Q29sb3IpCit7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4ganNvbk1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIGlmIChjb2x1
bW5OYW1lcykKKyAgICAgICAganNvbk1lc3NhZ2UtPnNldFZhbHVlKEFTQ0lJTGl0ZXJhbCgiY29s
dW1uTmFtZXMiKSwgY29sdW1uTmFtZXMpOworICAgIGlmIChub3Rlcy5pc0Fzc2lnbmVkKCkpCisg
ICAgICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJub3RlcyIpLCBub3Rl
cy5nZXRWYWx1ZSgpKTsKKyAgICBpZiAodGltZXN0YW1wLmlzQXNzaWduZWQoKSkKKyAgICAgICAg
anNvbk1lc3NhZ2UtPnNldE51bWJlcihBU0NJSUxpdGVyYWwoInRpbWVzdGFtcCIpLCB0aW1lc3Rh
bXAuZ2V0VmFsdWUoKSk7CisgICAgaWYgKHZhbHVlcy5pc0Fzc2lnbmVkKCkpCisgICAgICAgIGpz
b25NZXNzYWdlLT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJ2YWx1ZXMiKSwgdmFsdWVzLmdldFZh
bHVlKCkpOworICAgIGlmIChwYXlsb2FkLmlzQXNzaWduZWQoKSkKKyAgICAgICAganNvbk1lc3Nh
Z2UtPnNldFZhbHVlKEFTQ0lJTGl0ZXJhbCgicGF5bG9hZCIpLCBwYXlsb2FkLmdldFZhbHVlKCkp
OworICAgIGlmIChkYXRhYmFzZUlkLmlzQXNzaWduZWQoKSkKKyAgICAgICAganNvbk1lc3NhZ2Ut
PnNldE51bWJlcihBU0NJSUxpdGVyYWwoImRhdGFiYXNlSWQiKSwgZGF0YWJhc2VJZC5nZXRWYWx1
ZSgpKTsKKyAgICBpZiAoc3FsRXJyb3IpCisgICAgICAgIGpzb25NZXNzYWdlLT5zZXRWYWx1ZShB
U0NJSUxpdGVyYWwoInNxbEVycm9yIiksIHNxbEVycm9yKTsKKyAgICBpZiAoc2NyZWVuQ29sb3Iu
aXNBc3NpZ25lZCgpKQorICAgICAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJh
bCgic2NyZWVuQ29sb3IiKSwgc2NyZWVuQ29sb3IuZ2V0VmFsdWUoKSk7CisgICAgaWYgKHByaW50
Q29sb3IuaXNBc3NpZ25lZCgpKQorICAgICAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKEFTQ0lJ
TGl0ZXJhbCgicHJpbnRDb2xvciIpLCBwcmludENvbG9yLmdldFZhbHVlKCkpOworICAgIHNlbmRJ
ZkFjdGl2ZShqc29uTWVzc2FnZSwgRXJyb3JTdHJpbmcoKSk7Cit9CisKK3ZvaWQgSW5zcGVjdG9y
RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5W
YWx1ZXMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSkKK3sKKyAg
ICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6
OmNyZWF0ZSgpOworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9
IG1lc3NhZ2UuZ2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicGFyYW1zIikpOworICAgIEluc3BlY3Rv
ck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOworICAg
IEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgp
OworICAgIGludCBpbl9kYXRhYmFzZUlkID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6Omdl
dEludChwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgiZGF0YWJhc2VJZCIpLCBudWxs
cHRyLCBwcm90b2NvbEVycm9yc1B0cik7CisgICAgU3RyaW5nIGluX3F1ZXJ5ID0gSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXI6OmdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0
ZXJhbCgicXVlcnkiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnNQdHIpOworICAgIGlmIChwcm90
b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKKyAgICAgICAgU3RyaW5nIGVycm9yTWVzc2FnZSA9IFN0
cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9j
ZXNzZWQiLCAiRGF0YWJhc2UuZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMiKTsK
KyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElk
LCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFtcywgZXJyb3JNZXNzYWdl
LCBwcm90b2NvbEVycm9ycy5yZWxlYXNlKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgRXJyb3JTdHJpbmcgZXJyb3I7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0
ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yRGF0YWJh
c2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJu
VmFsdWVzQ2FsbGJhY2s+IGNhbGxiYWNrID0gYWRvcHRSZWYobmV3IEluc3BlY3RvckRhdGFiYXNl
QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZh
bHVlc0NhbGxiYWNrKG1fYmFja2VuZERpc3BhdGNoZXIsY2FsbElkKSk7CisgICAgbV9hZ2VudC0+
ZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMoJmVycm9yLCBpbl9kYXRhYmFzZUlk
LCBpbl9xdWVyeSwgY2FsbGJhY2spOworCisgICAgaWYgKGVycm9yLmxlbmd0aCgpKSB7CisgICAg
ICAgIGNhbGxiYWNrLT5kaXNhYmxlKCk7CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJl
cG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgSW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KK30K
Kwordm9pZCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FMU3lu
Yyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKQoreworICAgIFJl
ZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3Jl
YXRlKCk7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gbWVz
c2FnZS5nZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJwYXJhbXMiKSk7CisgICAgSW5zcGVjdG9yT2Jq
ZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CisgICAgSW5z
cGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7Cisg
ICAgaW50IGluX2RhdGFiYXNlSWQgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0SW50
KHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJkYXRhYmFzZUlkIiksIG51bGxwdHIs
IHByb3RvY29sRXJyb3JzUHRyKTsKKyAgICBTdHJpbmcgaW5fcXVlcnkgPSBJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlcjo6Z2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFs
KCJxdWVyeSIpLCBudWxscHRyLCBwcm90b2NvbEVycm9yc1B0cik7CisgICAgaWYgKHByb3RvY29s
RXJyb3JzLT5sZW5ndGgoKSkgeworICAgICAgICBTdHJpbmcgZXJyb3JNZXNzYWdlID0gU3RyaW5n
Ojpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3Nl
ZCIsICJEYXRhYmFzZS5leGVjdXRlU1FMU3luYyIpOworICAgICAgICBtX2JhY2tlbmREaXNwYXRj
aGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIEluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyOjpJbnZhbGlkUGFyYW1zLCBlcnJvck1lc3NhZ2UsIHByb3RvY29sRXJyb3JzLnJlbGVhc2Uo
KSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBFcnJvclN0cmluZyBlcnJvcjsKKyAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0
ZSgpOworICAgIFJlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheTxTdHJpbmc+PiBv
dXRfY29sdW1uTmFtZXM7CisgICAgU3RyaW5nIG91dF9ub3RlczsKKyAgICBkb3VibGUgb3V0X3Rp
bWVzdGFtcDsKKyAgICBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCBvdXRfdmFsdWVzOworICAg
IEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUgb3V0X3BheWxvYWQ7CisgICAgSW5zcGVjdG9yOjpU
eXBlQnVpbGRlcjo6RGF0YWJhc2U6OkRhdGFiYXNlSWQgb3V0X2RhdGFiYXNlSWQ7CisgICAgUmVm
UHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkRhdGFiYXNlOjpFcnJvcj4gb3V0X3NxbEVycm9y
OworICAgIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzIG91
dF9zY3JlZW5Db2xvcjsKKyAgICBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFu
ZGxlcjo6UHJpbnRDb2xvciBvdXRfcHJpbnRDb2xvcjsKKyAgICBtX2FnZW50LT5leGVjdXRlU1FM
U3luYygmZXJyb3IsIGluX2RhdGFiYXNlSWQsIGluX3F1ZXJ5LCBvdXRfY29sdW1uTmFtZXMsICZv
dXRfbm90ZXMsICZvdXRfdGltZXN0YW1wLCBvdXRfdmFsdWVzLCAmb3V0X3BheWxvYWQsICZvdXRf
ZGF0YWJhc2VJZCwgb3V0X3NxbEVycm9yLCAmb3V0X3NjcmVlbkNvbG9yLCAmb3V0X3ByaW50Q29s
b3IpOworCisgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkgeworICAgICAgICByZXN1bHQtPnNldFZh
bHVlKEFTQ0lJTGl0ZXJhbCgiY29sdW1uTmFtZXMiKSwgb3V0X2NvbHVtbk5hbWVzKTsKKyAgICAg
ICAgcmVzdWx0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJub3RlcyIpLCBvdXRfbm90ZXMpOwor
ICAgICAgICByZXN1bHQtPnNldE51bWJlcihBU0NJSUxpdGVyYWwoInRpbWVzdGFtcCIpLCBvdXRf
dGltZXN0YW1wKTsKKyAgICAgICAgcmVzdWx0LT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJ2YWx1
ZXMiKSwgb3V0X3ZhbHVlcyk7CisgICAgICAgIHJlc3VsdC0+c2V0VmFsdWUoQVNDSUlMaXRlcmFs
KCJwYXlsb2FkIiksIG91dF9wYXlsb2FkKTsKKyAgICAgICAgcmVzdWx0LT5zZXROdW1iZXIoQVND
SUlMaXRlcmFsKCJkYXRhYmFzZUlkIiksIG91dF9kYXRhYmFzZUlkKTsKKyAgICAgICAgcmVzdWx0
LT5zZXRWYWx1ZShBU0NJSUxpdGVyYWwoInNxbEVycm9yIiksIG91dF9zcWxFcnJvcik7CisgICAg
ICAgIHJlc3VsdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgic2NyZWVuQ29sb3IiKSwgSW5zcGVj
dG9yOjpUeXBlQnVpbGRlcjo6Z2V0VGVzdEVudW1Db25zdGFudFZhbHVlKG91dF9zY3JlZW5Db2xv
cikpOworICAgICAgICByZXN1bHQtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInByaW50Q29sb3Ii
KSwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Z2V0VGVzdEVudW1Db25zdGFudFZhbHVlKG91dF9w
cmludENvbG9yKSk7CisgICAgfQorICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25z
ZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIGVycm9yKTsKK30KKworSW5zcGVjdG9yRGF0YWJh
c2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkV4ZWN1dGVTUUxBc3luY0NhbGxiYWNrOjpFeGVj
dXRlU1FMQXN5bmNDYWxsYmFjayhQYXNzUmVmUHRyPEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
PiBiYWNrZW5kRGlzcGF0Y2hlciwgaW50IGlkKSA6IEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZShiYWNrZW5kRGlzcGF0Y2hlciwgaWQpIHsgfQorCit2
b2lkIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FM
QXN5bmNDYWxsYmFjazo6c2VuZFN1Y2Nlc3MoUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWls
ZGVyOjpBcnJheTxTdHJpbmc+PiBjb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBub3RlcywgZG91
YmxlIHRpbWVzdGFtcCwgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QgdmFsdWVzLCBJbnNwZWN0
b3I6Okluc3BlY3RvclZhbHVlIHBheWxvYWQsIGludCBkYXRhYmFzZUlkLCBQYXNzUmVmUHRyPElu
c3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkRhdGFiYXNlOjpFcnJvcj4gc3FsRXJyb3IsIGNvbnN0IFN0
cmluZyYgc2NyZWVuQ29sb3IsIGNvbnN0IFN0cmluZyYgcHJpbnRDb2xvcikKK3sKKyAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBqc29uTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCk7CisgICAganNvbk1lc3NhZ2UtPnNldFZhbHVlKEFTQ0lJTGl0ZXJhbCgiY29sdW1uTmFtZXMi
KSwgY29sdW1uTmFtZXMpOworICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFs
KCJub3RlcyIpLCBub3Rlcyk7CisgICAganNvbk1lc3NhZ2UtPnNldE51bWJlcihBU0NJSUxpdGVy
YWwoInRpbWVzdGFtcCIpLCB0aW1lc3RhbXApOworICAgIGpzb25NZXNzYWdlLT5zZXRPYmplY3Qo
QVNDSUlMaXRlcmFsKCJ2YWx1ZXMiKSwgdmFsdWVzKTsKKyAgICBqc29uTWVzc2FnZS0+c2V0VmFs
dWUoQVNDSUlMaXRlcmFsKCJwYXlsb2FkIiksIHBheWxvYWQpOworICAgIGpzb25NZXNzYWdlLT5z
ZXROdW1iZXIoQVNDSUlMaXRlcmFsKCJkYXRhYmFzZUlkIiksIGRhdGFiYXNlSWQpOworICAgIGpz
b25NZXNzYWdlLT5zZXRWYWx1ZShBU0NJSUxpdGVyYWwoInNxbEVycm9yIiksIHNxbEVycm9yKTsK
KyAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgic2NyZWVuQ29sb3IiKSwg
SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Z2V0VGVzdEVudW1Db25zdGFudFZhbHVlKHNjcmVlbkNv
bG9yKSk7CisgICAganNvbk1lc3NhZ2UtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInByaW50Q29s
b3IiKSwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Z2V0VGVzdEVudW1Db25zdGFudFZhbHVlKHBy
aW50Q29sb3IpKTsKKyAgICBzZW5kSWZBY3RpdmUoanNvbk1lc3NhZ2UsIEVycm9yU3RyaW5nKCkp
OworfQorCit2b2lkIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVT
UUxBc3luYyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKQorewor
ICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJh
eTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVy
ID0gbWVzc2FnZS5nZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJwYXJhbXMiKSk7CisgICAgSW5zcGVj
dG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7Cisg
ICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0
KCk7CisgICAgaW50IGluX2RhdGFiYXNlSWQgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6
Z2V0SW50KHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJkYXRhYmFzZUlkIiksIG51
bGxwdHIsIHByb3RvY29sRXJyb3JzUHRyKTsKKyAgICBTdHJpbmcgaW5fcXVlcnkgPSBJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlM
aXRlcmFsKCJxdWVyeSIpLCBudWxscHRyLCBwcm90b2NvbEVycm9yc1B0cik7CisgICAgaWYgKHBy
b3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgeworICAgICAgICBTdHJpbmcgZXJyb3JNZXNzYWdlID0g
U3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHBy
b2Nlc3NlZCIsICJEYXRhYmFzZS5leGVjdXRlU1FMQXN5bmMiKTsKKyAgICAgICAgbV9iYWNrZW5k
RGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElkLCBJbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFtcywgZXJyb3JNZXNzYWdlLCBwcm90b2NvbEVycm9ycy5y
ZWxlYXNlKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgRXJyb3JTdHJpbmcgZXJy
b3I7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0
OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXI6OkV4ZWN1dGVTUUxBc3luY0NhbGxiYWNrPiBjYWxsYmFjayA9IGFkb3B0UmVmKG5l
dyBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFz
eW5jQ2FsbGJhY2sobV9iYWNrZW5kRGlzcGF0Y2hlcixjYWxsSWQpKTsKKyAgICBtX2FnZW50LT5l
eGVjdXRlU1FMQXN5bmMoJmVycm9yLCBpbl9kYXRhYmFzZUlkLCBpbl9xdWVyeSwgY2FsbGJhY2sp
OworCisgICAgaWYgKGVycm9yLmxlbmd0aCgpKSB7CisgICAgICAgIGNhbGxiYWNrLT5kaXNhYmxl
KCk7CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoJmNh
bGxJZCwgSW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3Is
IGVycm9yKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KK30KKyNlbmRpZiAvLyBFTkFCTEUoU1FM
X0RBVEFCQVNFKQorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJM
RShJTlNQRUNUT1IpCisKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRj
aGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RGcm9udGVuZERpc3BhdGNo
ZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNv
bgorLy8gYnkgdGhlIHNjcmlwdDogSmF2YVNjcmlwdENvcmUvcmVwbGF5L3NjcmlwdHMvQ29kZUdl
bmVyYXRvckluc3BlY3Rvci5weQorCisjaWZuZGVmIEluc3BlY3RvclRlc3RGcm9udGVuZERpc3Bh
dGNoZXJzX2gKKyNkZWZpbmUgSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnNfaAorCisj
aWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUgIkluc3BlY3RvclRlc3RUeXBlQnVpbGRl
cnMuaCIKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLmg+Cisj
aW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9QYXNz
UmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJ
bnNwZWN0b3IgeworCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBF
TkFCTEUoSU5TUEVDVE9SKQorCisjZW5kaWYgLy8gIWRlZmluZWQoSW5zcGVjdG9yVGVzdEZyb250
ZW5kRGlzcGF0Y2hlcnNfaCkKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlz
cGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0
Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRl
Lmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IEphdmFTY3JpcHRDb3JlL3JlcGxheS9zY3JpcHRzL0Nv
ZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
Ikluc3BlY3RvclRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCisKKyNpZiBFTkFCTEUoSU5TUEVD
VE9SKQorCisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVj
dG9yIHsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5T
UEVDVE9SKQorCisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RGcm9udGVuZERpc3BhdGNoZXJz
LmNwcAorCisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5oCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24KKy8vIGJ5IHRo
ZSBzY3JpcHQ6IEphdmFTY3JpcHRDb3JlL3JlcGxheS9zY3JpcHRzL0NvZGVHZW5lcmF0b3JJbnNw
ZWN0b3IucHkKKworI2lmbmRlZiBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzX2gKKyNkZWZpbmUg
SW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVyc19oCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisj
aW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckpTVHlwZUJ1aWxkZXJzLmg+CisjaW5jbHVkZSA8
aW5zcGVjdG9yL0luc3BlY3RvclR5cGVCdWlsZGVyLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlv
bnMuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9y
IHsKKworCisKK25hbWVzcGFjZSBUeXBlQnVpbGRlciB7CisKKy8vIEZvcndhcmQgZGVjbGFyYXRp
b25zLgorI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCituYW1lc3BhY2UgRGF0YWJhc2UgeworY2xh
c3MgRXJyb3I7CitlbnVtIGNsYXNzIFByaW1hcnlDb2xvcnM7Cit9IC8vIERhdGFiYXNlCisjZW5k
aWYgLy8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKKy8vIEVuZCBvZiBmb3J3YXJkIGRlY2xhcmF0aW9u
cy4KKworCisvLyBUeXBlZGVmcy4KKyNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQorbmFtZXNwYWNl
IERhdGFiYXNlIHsKKy8qIFVuaXF1ZSBpZGVudGlmaWVyIG9mIERhdGFiYXNlIG9iamVjdC4gKi8K
K3R5cGVkZWYgaW50IERhdGFiYXNlSWQ7Cit9IC8vIERhdGFiYXNlCisjZW5kaWYgLy8gRU5BQkxF
KFNRTF9EQVRBQkFTRSkKKy8vIEVuZCBvZiB0eXBlZGVmcy4KKworU3RyaW5nIGdldFRlc3RFbnVt
Q29uc3RhbnRWYWx1ZShpbnQgY29kZSk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IFN0cmluZyBn
ZXRUZXN0RW51bUNvbnN0YW50VmFsdWUoVCBlbnVtVmFsdWUpCit7CisgICAgcmV0dXJuIGdldFRl
c3RFbnVtQ29uc3RhbnRWYWx1ZShzdGF0aWNfY2FzdDxpbnQ+KGVudW1WYWx1ZSkpOworfQorCisj
aWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKK25hbWVzcGFjZSBEYXRhYmFzZSB7CisvKiAgKi8KK2Vu
dW0gY2xhc3MgUHJpbWFyeUNvbG9ycyB7CisgICAgUmVkID0gMCwKKyAgICBHcmVlbiA9IDEsCisg
ICAgQmx1ZSA9IDIsCit9OyAvLyBlbnVtIGNsYXNzIFByaW1hcnlDb2xvcnMKKy8qIERhdGFiYXNl
IGVycm9yLiAqLworY2xhc3MgRXJyb3IgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmpl
Y3RCYXNlIHsKK3B1YmxpYzoKKyAgICBlbnVtIHsKKyAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAor
ICAgICAgICBNZXNzYWdlU2V0ID0gMSA8PCAwLAorICAgICAgICBDb2RlU2V0ID0gMSA8PCAxLAor
ICAgICAgICBBbGxGaWVsZHNTZXQgPSAoTWVzc2FnZVNldCB8IENvZGVTZXQpCisgICAgfTsKKwor
ICAgIHRlbXBsYXRlPGludCBTVEFURT4KKyAgICBjbGFzcyBCdWlsZGVyIHsKKyAgICBwcml2YXRl
OgorICAgICAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0Owor
CisgICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RT
dGF0ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxC
dWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxk
ZXIoUGFzc1JlZlB0cjwvKkVycm9yKi9JbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gcHRyKQor
ICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1Nl
dCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKKyAgICAgICAgICAgIG1fcmVz
dWx0ID0gcHRyOworICAgICAgICB9CisgICAgICAgIGZyaWVuZCBjbGFzcyBFcnJvcjsKKyAgICBw
dWJsaWM6CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IE1lc3NhZ2VTZXQ+JiBzZXRNZXNzYWdl
KGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKCEoU1RBVEUgJiBNZXNzYWdlU2V0KSwgcHJvcGVydHlfbWVzc2FnZV9hbHJlYWR5X3NldCk7
CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgibWVzc2FnZSIp
LCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE1lc3NhZ2VTZXQ+KCk7Cisg
ICAgICAgIH0KKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQ29kZVNldD4mIHNldENvZGUoaW50
IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYg
Q29kZVNldCksIHByb3BlcnR5X2NvZGVfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1
bHQtPnNldE51bWJlcihBU0NJSUxpdGVyYWwoImNvZGUiKSwgdmFsdWUpOworICAgICAgICAgICAg
cmV0dXJuIGNhc3RTdGF0ZTxDb2RlU2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgb3BlcmF0
b3IgUmVmUHRyPEVycm9yPiYgKCkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKKyAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihFcnJvcikgPT0gc2l6ZW9mKEluc3BlY3Rvcjo6SW5z
cGVjdG9yT2JqZWN0KSwgY2Fubm90X2Nhc3QpOworICAgICAgICAgICAgcmV0dXJuICpyZWludGVy
cHJldF9jYXN0PFJlZlB0cjxFcnJvcj4qPigmbV9yZXN1bHQpOworICAgICAgICB9CisKKyAgICAg
ICAgUGFzc1JlZlB0cjxFcnJvcj4gcmVsZWFzZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBSZWZQdHI8RXJyb3I+KCp0aGlzKS5yZWxlYXNlKCk7CisgICAgICAgIH0KKyAgICB9Owor
CisgICAgLyoKKyAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CisgICAgICogUmVmUHRyPEVy
cm9yPiByZXN1bHQgPSBFcnJvcjo6Y3JlYXRlKCkKKyAgICAgKiAgICAgLnNldE1lc3NhZ2UoLi4u
KQorICAgICAqICAgICAuc2V0Q29kZSguLi4pOworICAgICAqLworICAgIHN0YXRpYyBCdWlsZGVy
PE5vRmllbGRzU2V0PiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9G
aWVsZHNTZXQ+KEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7CisgICAgfQor
ICAgIHR5cGVkZWYgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6U3RydWN0SXRlbVRyYWl0cyBJdGVt
VHJhaXRzOworfTsKKworfSAvLyBEYXRhYmFzZQorI2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJB
U0UpCisKKworCit9IC8vIG5hbWVzcGFjZSBUeXBlQnVpbGRlcgorCit9IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyNlbmRpZiAvLyAhZGVm
aW5lZChJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzX2gpCisjIyMgRW5kIEZpbGU6IEluc3BlY3Rv
clRlc3RUeXBlQnVpbGRlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdFR5cGVC
dWlsZGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1
dGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogSmF2YVNjcmlwdENvcmUvcmVwbGF5L3NjcmlwdHMv
Q29kZUdlbmVyYXRvckluc3BlY3Rvci5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5oIgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikK
KworI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7
CisKK25hbWVzcGFjZSBUeXBlQnVpbGRlciB7CisKK3N0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBl
bnVtX2NvbnN0YW50X3ZhbHVlc1tdID0geworICAgICJyZWQiLAorICAgICJncmVlbiIsCisgICAg
ImJsdWUiLAorICAgICJjeWFuIiwKKyAgICAibWFnZW50YSIsCisgICAgInllbGxvdyIsCisgICAg
ImJsYWNrIiwKK307CisKK1N0cmluZyBnZXRUZXN0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUp
IHsKKyAgICByZXR1cm4gZW51bV9jb25zdGFudF92YWx1ZXNbY29kZV07Cit9CisKKworCit9IC8v
IG5hbWVzcGFjZSBUeXBlQnVpbGRlcgorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2Vu
ZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdFR5
cGVCdWlsZGVycy5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9jb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0
dXJuLXBhcmFtZXRlcnMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJl
dHVybi1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE5OWU3N2M3ZTYwZTNkNzNh
MDE0YmNkOGRjMzhiM2RmOTRhNGYyZjIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1v
cHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0CkBAIC0wLDAgKzEsNjMx
IEBACisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdEJhY2tlbmRDb21tYW5kcy5qcworLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRl
cnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogSmF2YVNjcmlwdENvcmUvcmVwbGF5L3NjcmlwdHMv
Q29kZUdlbmVyYXRvckluc3BlY3Rvci5weQorCisvLyBEYXRhYmFzZS4KK0luc3BlY3RvckJhY2tl
bmQucmVnaXN0ZXJFbnVtKCJEYXRhYmFzZS5QcmltYXJ5Q29sb3JzIiwge1JlZDogInJlZCIsIEdy
ZWVuOiAiZ3JlZW4iLCBCbHVlOiAiYmx1ZSJ9KTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJD
b21tYW5kKCJEYXRhYmFzZS5leGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzIiwgW3sibmFtZSI6
ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogIm9iamVjdCIsICJvcHRpb25hbCI6IHRydWV9LCB7Im5h
bWUiOiAibm90ZXMiLCAidHlwZSI6ICJzdHJpbmciLCAib3B0aW9uYWwiOiB0cnVlfSwgeyJuYW1l
IjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciIsICJvcHRpb25hbCI6IHRydWV9LCB7Im5h
bWUiOiAidmFsdWVzIiwgInR5cGUiOiAib2JqZWN0IiwgIm9wdGlvbmFsIjogdHJ1ZX0sIHsibmFt
ZSI6ICJwYXlsb2FkIiwgInR5cGUiOiAib2JqZWN0IiwgIm9wdGlvbmFsIjogdHJ1ZX0sIHsibmFt
ZSI6ICJkYXRhYmFzZUlkIiwgInR5cGUiOiAibnVtYmVyIiwgIm9wdGlvbmFsIjogdHJ1ZX0sIHsi
bmFtZSI6ICJzcWxFcnJvciIsICJ0eXBlIjogIm9iamVjdCIsICJvcHRpb25hbCI6IHRydWV9LCB7
Im5hbWUiOiAic2NyZWVuQ29sb3IiLCAidHlwZSI6ICJzdHJpbmciLCAib3B0aW9uYWwiOiB0cnVl
fSwgeyJuYW1lIjogInByaW50Q29sb3IiLCAidHlwZSI6ICJzdHJpbmciLCAib3B0aW9uYWwiOiB0
cnVlfV0sIFsiY29sdW1uTmFtZXMiLCAibm90ZXMiLCAidGltZXN0YW1wIiwgInZhbHVlcyIsICJw
YXlsb2FkIiwgImRhdGFiYXNlSWQiLCAic3FsRXJyb3IiLCAic2NyZWVuQ29sb3IiLCAicHJpbnRD
b2xvciJdKTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJEYXRhYmFzZS5leGVj
dXRlTm9PcHRpb25hbFBhcmFtZXRlcnMiLCBbeyJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUi
OiAib2JqZWN0IiwgIm9wdGlvbmFsIjogZmFsc2V9LCB7Im5hbWUiOiAibm90ZXMiLCAidHlwZSI6
ICJzdHJpbmciLCAib3B0aW9uYWwiOiBmYWxzZX0sIHsibmFtZSI6ICJ0aW1lc3RhbXAiLCAidHlw
ZSI6ICJudW1iZXIiLCAib3B0aW9uYWwiOiBmYWxzZX0sIHsibmFtZSI6ICJ2YWx1ZXMiLCAidHlw
ZSI6ICJvYmplY3QiLCAib3B0aW9uYWwiOiBmYWxzZX0sIHsibmFtZSI6ICJwYXlsb2FkIiwgInR5
cGUiOiAib2JqZWN0IiwgIm9wdGlvbmFsIjogZmFsc2V9LCB7Im5hbWUiOiAiZGF0YWJhc2VJZCIs
ICJ0eXBlIjogIm51bWJlciIsICJvcHRpb25hbCI6IGZhbHNlfSwgeyJuYW1lIjogInNxbEVycm9y
IiwgInR5cGUiOiAib2JqZWN0IiwgIm9wdGlvbmFsIjogZmFsc2V9LCB7Im5hbWUiOiAic2NyZWVu
Q29sb3IiLCAidHlwZSI6ICJzdHJpbmciLCAib3B0aW9uYWwiOiBmYWxzZX0sIHsibmFtZSI6ICJw
cmludENvbG9yIiwgInR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjogZmFsc2V9XSwgWyJjb2x1
bW5OYW1lcyIsICJub3RlcyIsICJ0aW1lc3RhbXAiLCAidmFsdWVzIiwgInBheWxvYWQiLCAiZGF0
YWJhc2VJZCIsICJzcWxFcnJvciIsICJzY3JlZW5Db2xvciIsICJwcmludENvbG9yIl0pOworIyMj
IEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0QmFja2VuZENvbW1hbmRzLmpzCisKKyMjIyBCZWdpbiBG
aWxlOiBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
Y29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5
IHRoZSBzY3JpcHQ6IEphdmFTY3JpcHRDb3JlL3JlcGxheS9zY3JpcHRzL0NvZGVHZW5lcmF0b3JJ
bnNwZWN0b3IucHkKKworI2lmbmRlZiBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzX2gK
KyNkZWZpbmUgSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVyc19oCisKKyNpZiBFTkFCTEUo
SU5TUEVDVE9SKQorCisjaW5jbHVkZSAiSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5oIgorI2lu
Y2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUg
PHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25h
bWVzcGFjZSBJbnNwZWN0b3IgeworCit0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKworI2lm
IEVOQUJMRShTUUxfREFUQUJBU0UpCitjbGFzcyBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVySGFuZGxlciB7CitwdWJsaWM6CisgICAgLy8gTmFtZWQgYWZ0ZXIgcGFyYW1ldGVyICdz
Y3JlZW5Db2xvcicgd2hpbGUgZ2VuZXJhdGluZyBjb21tYW5kL2V2ZW50IGV4ZWN1dGVBbGxPcHRp
b25hbFBhcmFtZXRlcnMuCisgICAgZW51bSBjbGFzcyBTY3JlZW5Db2xvciB7CisgICAgICAgIFJl
ZCA9IDAsCisgICAgICAgIEdyZWVuID0gMSwKKyAgICAgICAgQmx1ZSA9IDIsCisgICAgfTsgLy8g
ZW51bSBjbGFzcyBTY3JlZW5Db2xvcgorICAgIC8vIE5hbWVkIGFmdGVyIHBhcmFtZXRlciAncHJp
bnRDb2xvcicgd2hpbGUgZ2VuZXJhdGluZyBjb21tYW5kL2V2ZW50IGV4ZWN1dGVBbGxPcHRpb25h
bFBhcmFtZXRlcnMuCisgICAgZW51bSBjbGFzcyBQcmludENvbG9yIHsKKyAgICAgICAgQ3lhbiA9
IDMsCisgICAgICAgIE1hZ2VudGEgPSA0LAorICAgICAgICBZZWxsb3cgPSA1LAorICAgICAgICBC
bGFjayA9IDYsCisgICAgfTsgLy8gZW51bSBjbGFzcyBQcmludENvbG9yCisgICAgdmlydHVhbCB2
b2lkIGV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMoRXJyb3JTdHJpbmcqLCBjb25zdCBSZWZQ
dHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheT4qIGluX2NvbHVtbk5hbWVzLCBjb25zdCBTdHJp
bmcqIGluX25vdGVzLCBjb25zdCBkb3VibGUqIGluX3RpbWVzdGFtcCwgY29uc3QgUmVmUHRyPElu
c3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiogaW5fdmFsdWVzLCBjb25zdCBJbnNwZWN0b3I6Oklu
c3BlY3RvclZhbHVlKiBpbl9wYXlsb2FkLCBjb25zdCBpbnQqIGluX2RhdGFiYXNlSWQsIGNvbnN0
IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4qIGluX3NxbEVycm9yLCBjb25zdCBT
dHJpbmcqIGluX3NjcmVlbkNvbG9yLCBjb25zdCBTdHJpbmcqIGluX3ByaW50Q29sb3IsIFJlZlB0
cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheTxTdHJpbmc+PiYgb3B0X291dF9jb2x1bW5O
YW1lcywgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6T3B0T3V0cHV0PFN0cmluZz4qIG9wdF9vdXRf
bm90ZXMsIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6Ok9wdE91dHB1dDxkb3VibGU+KiBvcHRfb3V0
X3RpbWVzdGFtcCwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6T3B0T3V0cHV0PEluc3BlY3Rvcjo6
SW5zcGVjdG9yT2JqZWN0Piogb3B0X291dF92YWx1ZXMsIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6
Ok9wdE91dHB1dDxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiogb3B0X291dF9wYXlsb2FkLCBj
b25zdCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpEYXRhYmFzZTo6RGF0YWJhc2VJZCogY29uc3Qg
b3B0X291dF9kYXRhYmFzZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6RGF0YWJh
c2U6OkVycm9yPiYgb3B0X291dF9zcWxFcnJvciwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6RGF0
YWJhc2U6OlByaW1hcnlDb2xvcnMqIG9wdF9vdXRfc2NyZWVuQ29sb3IsIEluc3BlY3RvckRhdGFi
YXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQcmludENvbG9yKiBvcHRfb3V0X3ByaW50Q29s
b3IpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKEVy
cm9yU3RyaW5nKiwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXk+JiBpbl9j
b2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBpbl9ub3RlcywgZG91YmxlIGluX3RpbWVzdGFtcCwg
Y29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYgaW5fdmFsdWVzLCBJbnNw
ZWN0b3I6Okluc3BlY3RvclZhbHVlIGluX3BheWxvYWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25z
dCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+JiBpbl9zcWxFcnJvciwgY29uc3Qg
U3RyaW5nJiBpbl9zY3JlZW5Db2xvciwgY29uc3QgU3RyaW5nJiBpbl9wcmludENvbG9yLCBSZWZQ
dHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk8U3RyaW5nPj4mIG91dF9jb2x1bW5OYW1l
cywgU3RyaW5nKiBvdXRfbm90ZXMsIGRvdWJsZSogb3V0X3RpbWVzdGFtcCwgSW5zcGVjdG9yOjpJ
bnNwZWN0b3JPYmplY3QqIG91dF92YWx1ZXMsIEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUqIG91
dF9wYXlsb2FkLCBpbnQqIG91dF9kYXRhYmFzZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVp
bGRlcjo6RGF0YWJhc2U6OkVycm9yPiYgb3V0X3NxbEVycm9yLCBJbnNwZWN0b3I6OlR5cGVCdWls
ZGVyOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyogb3V0X3NjcmVlbkNvbG9yLCBJbnNwZWN0b3JE
YXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UHJpbnRDb2xvciogb3V0X3ByaW50Q29s
b3IpID0gMDsKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIH5JbnNwZWN0b3JEYXRhYmFzZUJhY2tl
bmREaXNwYXRjaGVySGFuZGxlcigpOworfTsKKyNlbmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNF
KQorCisjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKK2NsYXNzIEluc3BlY3RvckRhdGFiYXNlQmFj
a2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JTdXBwbGVt
ZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8
SW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEluc3BlY3Rvcjo6SW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXIqLCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRj
aGVySGFuZGxlciopOworICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaChsb25nIGNhbGxJZCwgY29u
c3QgU3RyaW5nJiBtZXRob2QsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+
IG1lc3NhZ2UpIG92ZXJyaWRlOworcHJpdmF0ZToKKyAgICB2b2lkIGV4ZWN1dGVBbGxPcHRpb25h
bFBhcmFtZXRlcnMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0
JiBtZXNzYWdlKTsKKyAgICB2b2lkIGV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhsb25nIGNh
bGxJZCwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpOworcHJpdmF0
ZToKKyAgICBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKEluc3BlY3Rvcjo6SW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXIqLCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRj
aGVySGFuZGxlciopOworICAgIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyKiBtX2FnZW50OworfTsKKyNlbmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQorCit9IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyNl
bmRpZiAvLyAhZGVmaW5lZChJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzX2gpCisjIyMg
RW5kIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4g
RmlsZTogSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisv
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24KKy8v
IGJ5IHRoZSBzY3JpcHQ6IEphdmFTY3JpcHRDb3JlL3JlcGxheS9zY3JpcHRzL0NvZGVHZW5lcmF0
b3JJbnNwZWN0b3IucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkluc3BlY3Rv
clRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNp
bmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLmg+CisjaW5jbHVkZSA8
aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcu
aD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKyNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQor
SW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6On5JbnNwZWN0b3JEYXRh
YmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpIHsgfQorI2VuZGlmIC8vIEVOQUJMRShTUUxf
REFUQUJBU0UpCisKKyNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQorUGFzc1JlZlB0cjxJbnNwZWN0
b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyPiBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVyOjpjcmVhdGUoSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRj
aGVyLCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCit7
CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRj
aGVyKGJhY2tlbmREaXNwYXRjaGVyLCBhZ2VudCkpOworfQorCitJbnNwZWN0b3JEYXRhYmFzZUJh
Y2tlbmREaXNwYXRjaGVyOjpJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKEluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlciwgSW5zcGVjdG9yRGF0YWJh
c2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQorICAgIDogSW5zcGVjdG9yU3VwcGxl
bWVudGFsQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIpCisgICAgLCBtX2FnZW50
KGFnZW50KQoreworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZv
ckRvbWFpbihBU0NJSUxpdGVyYWwoIkRhdGFiYXNlIiksIHRoaXMpOworfQorCit2b2lkIEluc3Bl
Y3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgY2FsbElkLCBjb25z
dCBTdHJpbmcmIG1ldGhvZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1lc3NhZ2UpCit7
CisgICAgUmVmPEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRo
aXMpOworCisgICAgaWYgKG1ldGhvZCA9PSAiZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyIp
CisgICAgICAgIGV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMoY2FsbElkLCAqbWVzc2FnZS5n
ZXQoKSk7CisgICAgZWxzZSBpZiAobWV0aG9kID09ICJleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRl
cnMiKQorICAgICAgICBleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMoY2FsbElkLCAqbWVzc2Fn
ZS5nZXQoKSk7CisgICAgZWxzZQorICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQ
cm90b2NvbEVycm9yKCZjYWxsSWQsIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2RO
b3RGb3VuZCwgU3RyaW5nKCInIikgKyAiRGF0YWJhc2UiICsgJy4nICsgbWV0aG9kICsgIicgd2Fz
IG5vdCBmb3VuZCIpOworfQorCit2b2lkIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNo
ZXI6OmV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3Bl
Y3Rvck9iamVjdCYgbWVzc2FnZSkKK3sKKyAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3Rv
Y29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IG1lc3NhZ2UuZ2V0T2JqZWN0KEFTQ0lJTGl0ZXJh
bCgicGFyYW1zIikpOworICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0g
cGFyYW1zQ29udGFpbmVyLmdldCgpOworICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9y
c1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOworICAgIGJvb2wgY29sdW1uTmFtZXNfdmFsdWVG
b3VuZCA9IGZhbHNlOworICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5PiBpbl9j
b2x1bW5OYW1lcyA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRBcnJheShwYXJhbXND
b250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgiY29sdW1uTmFtZXMiKSwgJmNvbHVtbk5hbWVzX3Zh
bHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRyKTsKKyAgICBib29sIG5vdGVzX3ZhbHVlRm91bmQg
PSBmYWxzZTsKKyAgICBTdHJpbmcgaW5fbm90ZXMgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
cjo6Z2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJub3RlcyIpLCAm
bm90ZXNfdmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJvcnNQdHIpOworICAgIGJvb2wgdGltZXN0YW1w
X3ZhbHVlRm91bmQgPSBmYWxzZTsKKyAgICBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpPcHRPdXRw
dXQ8ZG91YmxlPiBpbl90aW1lc3RhbXAgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0
TnVtYmVyKHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJ0aW1lc3RhbXAiKSwgJnRp
bWVzdGFtcF92YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0cik7CisgICAgYm9vbCB2YWx1ZXNf
dmFsdWVGb3VuZCA9IGZhbHNlOworICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVj
dD4gaW5fdmFsdWVzID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldE9iamVjdChwYXJh
bXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgidmFsdWVzIiksICZ2YWx1ZXNfdmFsdWVGb3Vu
ZCwgcHJvdG9jb2xFcnJvcnNQdHIpOworICAgIGJvb2wgcGF5bG9hZF92YWx1ZUZvdW5kID0gZmFs
c2U7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+IGluX3BheWxvYWQgPSBJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0QW55KHBhcmFtc0NvbnRhaW5lclB0ciwgQVND
SUlMaXRlcmFsKCJwYXlsb2FkIiksICZwYXlsb2FkX3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3Jz
UHRyKTsKKyAgICBib29sIGRhdGFiYXNlSWRfdmFsdWVGb3VuZCA9IGZhbHNlOworICAgIGludCBp
bl9kYXRhYmFzZUlkID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldEludChwYXJhbXND
b250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgiZGF0YWJhc2VJZCIpLCAmZGF0YWJhc2VJZF92YWx1
ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0cik7CisgICAgYm9vbCBzcWxFcnJvcl92YWx1ZUZvdW5k
ID0gZmFsc2U7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBpbl9zcWxF
cnJvciA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRPYmplY3QocGFyYW1zQ29udGFp
bmVyUHRyLCBBU0NJSUxpdGVyYWwoInNxbEVycm9yIiksICZzcWxFcnJvcl92YWx1ZUZvdW5kLCBw
cm90b2NvbEVycm9yc1B0cik7CisgICAgYm9vbCBzY3JlZW5Db2xvcl92YWx1ZUZvdW5kID0gZmFs
c2U7CisgICAgU3RyaW5nIGluX3NjcmVlbkNvbG9yID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXI6OmdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgic2NyZWVuQ29s
b3IiKSwgJnNjcmVlbkNvbG9yX3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRyKTsKKyAgICBi
b29sIHByaW50Q29sb3JfdmFsdWVGb3VuZCA9IGZhbHNlOworICAgIFN0cmluZyBpbl9wcmludENv
bG9yID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldFN0cmluZyhwYXJhbXNDb250YWlu
ZXJQdHIsIEFTQ0lJTGl0ZXJhbCgicHJpbnRDb2xvciIpLCAmcHJpbnRDb2xvcl92YWx1ZUZvdW5k
LCBwcm90b2NvbEVycm9yc1B0cik7CisgICAgaWYgKHByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkg
eworICAgICAgICBTdHJpbmcgZXJyb3JNZXNzYWdlID0gU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJn
dW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJEYXRhYmFzZS5leGVj
dXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzIik7CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXIt
PnJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6
OkludmFsaWRQYXJhbXMsIGVycm9yTWVzc2FnZSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEVycm9yU3RyaW5nIGVycm9yOworICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7
CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5PFN0cmluZz4+IG91dF9j
b2x1bW5OYW1lczsKKyAgICBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8U3RyaW5n
PiBvdXRfbm90ZXM7CisgICAgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6T3B0T3V0cHV0PGRvdWJs
ZT4gb3V0X3RpbWVzdGFtcDsKKyAgICBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8
SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IG91dF92YWx1ZXM7CisgICAgSW5zcGVjdG9yOjpU
eXBlQnVpbGRlcjo6T3B0T3V0cHV0PEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+IG91dF9wYXls
b2FkOworICAgIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkRhdGFiYXNlOjpEYXRhYmFzZUlkIG91
dF9kYXRhYmFzZUlkOworICAgIFJlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpEYXRhYmFz
ZTo6RXJyb3I+IG91dF9zcWxFcnJvcjsKKyAgICBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpEYXRh
YmFzZTo6UHJpbWFyeUNvbG9ycyBvdXRfc2NyZWVuQ29sb3I7CisgICAgSW5zcGVjdG9yRGF0YWJh
c2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3Igb3V0X3ByaW50Q29sb3I7Cisg
ICAgbV9hZ2VudC0+ZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycygmZXJyb3IsIGNvbHVtbk5h
bWVzX3ZhbHVlRm91bmQgPyAmaW5fY29sdW1uTmFtZXMgOiBudWxscHRyLCBub3Rlc192YWx1ZUZv
dW5kID8gJmluX25vdGVzIDogbnVsbHB0ciwgdGltZXN0YW1wX3ZhbHVlRm91bmQgPyAmaW5fdGlt
ZXN0YW1wIDogbnVsbHB0ciwgdmFsdWVzX3ZhbHVlRm91bmQgPyAmaW5fdmFsdWVzIDogbnVsbHB0
ciwgcGF5bG9hZF92YWx1ZUZvdW5kID8gJmluX3BheWxvYWQgOiBudWxscHRyLCBkYXRhYmFzZUlk
X3ZhbHVlRm91bmQgPyAmaW5fZGF0YWJhc2VJZCA6IG51bGxwdHIsIHNxbEVycm9yX3ZhbHVlRm91
bmQgPyAmaW5fc3FsRXJyb3IgOiBudWxscHRyLCBzY3JlZW5Db2xvcl92YWx1ZUZvdW5kID8gJmlu
X3NjcmVlbkNvbG9yIDogbnVsbHB0ciwgcHJpbnRDb2xvcl92YWx1ZUZvdW5kID8gJmluX3ByaW50
Q29sb3IgOiBudWxscHRyLCBvdXRfY29sdW1uTmFtZXMsICZvdXRfbm90ZXMsICZvdXRfdGltZXN0
YW1wLCBvdXRfdmFsdWVzLCAmb3V0X3BheWxvYWQsICZvdXRfZGF0YWJhc2VJZCwgb3V0X3NxbEVy
cm9yLCAmb3V0X3NjcmVlbkNvbG9yLCAmb3V0X3ByaW50Q29sb3IpOworCisgICAgaWYgKCFlcnJv
ci5sZW5ndGgoKSkgeworICAgICAgICBpZiAob3V0X2NvbHVtbk5hbWVzKQorICAgICAgICAgICAg
cmVzdWx0LT5zZXRWYWx1ZShBU0NJSUxpdGVyYWwoImNvbHVtbk5hbWVzIiksIG91dF9jb2x1bW5O
YW1lcyk7CisgICAgICAgIGlmIChvdXRfbm90ZXMuaXNBc3NpZ25lZCgpKQorICAgICAgICAgICAg
cmVzdWx0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJub3RlcyIpLCBvdXRfbm90ZXMuZ2V0VmFs
dWUoKSk7CisgICAgICAgIGlmIChvdXRfdGltZXN0YW1wLmlzQXNzaWduZWQoKSkKKyAgICAgICAg
ICAgIHJlc3VsdC0+c2V0TnVtYmVyKEFTQ0lJTGl0ZXJhbCgidGltZXN0YW1wIiksIG91dF90aW1l
c3RhbXAuZ2V0VmFsdWUoKSk7CisgICAgICAgIGlmIChvdXRfdmFsdWVzLmlzQXNzaWduZWQoKSkK
KyAgICAgICAgICAgIHJlc3VsdC0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgidmFsdWVzIiksIG91
dF92YWx1ZXMuZ2V0VmFsdWUoKSk7CisgICAgICAgIGlmIChvdXRfcGF5bG9hZC5pc0Fzc2lnbmVk
KCkpCisgICAgICAgICAgICByZXN1bHQtPnNldFZhbHVlKEFTQ0lJTGl0ZXJhbCgicGF5bG9hZCIp
LCBvdXRfcGF5bG9hZC5nZXRWYWx1ZSgpKTsKKyAgICAgICAgaWYgKG91dF9kYXRhYmFzZUlkLmlz
QXNzaWduZWQoKSkKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0TnVtYmVyKEFTQ0lJTGl0ZXJhbCgi
ZGF0YWJhc2VJZCIpLCBvdXRfZGF0YWJhc2VJZC5nZXRWYWx1ZSgpKTsKKyAgICAgICAgaWYgKG91
dF9zcWxFcnJvcikKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0VmFsdWUoQVNDSUlMaXRlcmFsKCJz
cWxFcnJvciIpLCBvdXRfc3FsRXJyb3IpOworICAgICAgICBpZiAob3V0X3NjcmVlbkNvbG9yLmlz
QXNzaWduZWQoKSkKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgi
c2NyZWVuQ29sb3IiKSwgb3V0X3NjcmVlbkNvbG9yLmdldFZhbHVlKCkpOworICAgICAgICBpZiAo
b3V0X3ByaW50Q29sb3IuaXNBc3NpZ25lZCgpKQorICAgICAgICAgICAgcmVzdWx0LT5zZXRTdHJp
bmcoQVNDSUlMaXRlcmFsKCJwcmludENvbG9yIiksIG91dF9wcmludENvbG9yLmdldFZhbHVlKCkp
OworICAgIH0KKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElkLCBy
ZXN1bHQucmVsZWFzZSgpLCBlcnJvcik7Cit9CisKK3ZvaWQgSW5zcGVjdG9yRGF0YWJhc2VCYWNr
ZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgY2FsbElkLCBj
b25zdCBJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpCit7CisgICAgUmVmUHRyPEluc3BlY3RvckFy
cmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKKyAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSBtZXNzYWdlLmdldE9iamVjdChB
U0NJSUxpdGVyYWwoInBhcmFtcyIpKTsKKyAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRh
aW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKKyAgICBJbnNwZWN0b3JBcnJheSogcHJv
dG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKKyAgICBSZWZQdHI8SW5zcGVj
dG9yOjpJbnNwZWN0b3JBcnJheT4gaW5fY29sdW1uTmFtZXMgPSBJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlcjo6Z2V0QXJyYXkocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoImNvbHVt
bk5hbWVzIiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzUHRyKTsKKyAgICBTdHJpbmcgaW5fbm90
ZXMgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5l
clB0ciwgQVNDSUlMaXRlcmFsKCJub3RlcyIpLCBudWxscHRyLCBwcm90b2NvbEVycm9yc1B0cik7
CisgICAgZG91YmxlIGluX3RpbWVzdGFtcCA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpn
ZXROdW1iZXIocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoInRpbWVzdGFtcCIpLCBu
dWxscHRyLCBwcm90b2NvbEVycm9yc1B0cik7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVj
dG9yT2JqZWN0PiBpbl92YWx1ZXMgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0T2Jq
ZWN0KHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJ2YWx1ZXMiKSwgbnVsbHB0ciwg
cHJvdG9jb2xFcnJvcnNQdHIpOworICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVl
PiBpbl9wYXlsb2FkID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldEFueShwYXJhbXND
b250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgicGF5bG9hZCIpLCBudWxscHRyLCBwcm90b2NvbEVy
cm9yc1B0cik7CisgICAgaW50IGluX2RhdGFiYXNlSWQgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlcjo6Z2V0SW50KHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJkYXRhYmFzZUlk
IiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzUHRyKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpJ
bnNwZWN0b3JPYmplY3Q+IGluX3NxbEVycm9yID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6
OmdldE9iamVjdChwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgic3FsRXJyb3IiKSwg
bnVsbHB0ciwgcHJvdG9jb2xFcnJvcnNQdHIpOworICAgIFN0cmluZyBpbl9zY3JlZW5Db2xvciA9
IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRy
LCBBU0NJSUxpdGVyYWwoInNjcmVlbkNvbG9yIiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzUHRy
KTsKKyAgICBTdHJpbmcgaW5fcHJpbnRDb2xvciA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
OjpnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoInByaW50Q29sb3Ii
KSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnNQdHIpOworICAgIGlmIChwcm90b2NvbEVycm9ycy0+
bGVuZ3RoKCkpIHsKKyAgICAgICAgU3RyaW5nIGVycm9yTWVzc2FnZSA9IFN0cmluZzo6Zm9ybWF0
KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiRGF0
YWJhc2UuZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzIik7CisgICAgICAgIG1fYmFja2VuZERp
c3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXI6OkludmFsaWRQYXJhbXMsIGVycm9yTWVzc2FnZSwgcHJvdG9jb2xFcnJvcnMucmVs
ZWFzZSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEVycm9yU3RyaW5nIGVycm9y
OworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6
Y3JlYXRlKCk7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5PFN0cmlu
Zz4+IG91dF9jb2x1bW5OYW1lczsKKyAgICBTdHJpbmcgb3V0X25vdGVzOworICAgIGRvdWJsZSBv
dXRfdGltZXN0YW1wOworICAgIEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0IG91dF92YWx1ZXM7
CisgICAgSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSBvdXRfcGF5bG9hZDsKKyAgICBJbnNwZWN0
b3I6OlR5cGVCdWlsZGVyOjpEYXRhYmFzZTo6RGF0YWJhc2VJZCBvdXRfZGF0YWJhc2VJZDsKKyAg
ICBSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6RGF0YWJhc2U6OkVycm9yPiBvdXRfc3Fs
RXJyb3I7CisgICAgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6RGF0YWJhc2U6OlByaW1hcnlDb2xv
cnMgb3V0X3NjcmVlbkNvbG9yOworICAgIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNo
ZXJIYW5kbGVyOjpQcmludENvbG9yIG91dF9wcmludENvbG9yOworICAgIG1fYWdlbnQtPmV4ZWN1
dGVOb09wdGlvbmFsUGFyYW1ldGVycygmZXJyb3IsIGluX2NvbHVtbk5hbWVzLCBpbl9ub3Rlcywg
aW5fdGltZXN0YW1wLCBpbl92YWx1ZXMsIGluX3BheWxvYWQsIGluX2RhdGFiYXNlSWQsIGluX3Nx
bEVycm9yLCBpbl9zY3JlZW5Db2xvciwgaW5fcHJpbnRDb2xvciwgb3V0X2NvbHVtbk5hbWVzLCAm
b3V0X25vdGVzLCAmb3V0X3RpbWVzdGFtcCwgb3V0X3ZhbHVlcywgJm91dF9wYXlsb2FkLCAmb3V0
X2RhdGFiYXNlSWQsIG91dF9zcWxFcnJvciwgJm91dF9zY3JlZW5Db2xvciwgJm91dF9wcmludENv
bG9yKTsKKworICAgIGlmICghZXJyb3IubGVuZ3RoKCkpIHsKKyAgICAgICAgcmVzdWx0LT5zZXRW
YWx1ZShBU0NJSUxpdGVyYWwoImNvbHVtbk5hbWVzIiksIG91dF9jb2x1bW5OYW1lcyk7CisgICAg
ICAgIHJlc3VsdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgibm90ZXMiKSwgb3V0X25vdGVzKTsK
KyAgICAgICAgcmVzdWx0LT5zZXROdW1iZXIoQVNDSUlMaXRlcmFsKCJ0aW1lc3RhbXAiKSwgb3V0
X3RpbWVzdGFtcCk7CisgICAgICAgIHJlc3VsdC0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgidmFs
dWVzIiksIG91dF92YWx1ZXMpOworICAgICAgICByZXN1bHQtPnNldFZhbHVlKEFTQ0lJTGl0ZXJh
bCgicGF5bG9hZCIpLCBvdXRfcGF5bG9hZCk7CisgICAgICAgIHJlc3VsdC0+c2V0TnVtYmVyKEFT
Q0lJTGl0ZXJhbCgiZGF0YWJhc2VJZCIpLCBvdXRfZGF0YWJhc2VJZCk7CisgICAgICAgIHJlc3Vs
dC0+c2V0VmFsdWUoQVNDSUlMaXRlcmFsKCJzcWxFcnJvciIpLCBvdXRfc3FsRXJyb3IpOworICAg
ICAgICByZXN1bHQtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInNjcmVlbkNvbG9yIiksIEluc3Bl
Y3Rvcjo6VHlwZUJ1aWxkZXI6OmdldFRlc3RFbnVtQ29uc3RhbnRWYWx1ZShvdXRfc2NyZWVuQ29s
b3IpKTsKKyAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJwcmludENvbG9y
IiksIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OmdldFRlc3RFbnVtQ29uc3RhbnRWYWx1ZShvdXRf
cHJpbnRDb2xvcikpOworICAgIH0KKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9u
c2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBlcnJvcik7Cit9CisjZW5kaWYgLy8gRU5BQkxF
KFNRTF9EQVRBQkFTRSkKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBF
TkFCTEUoSU5TUEVDVE9SKQorCisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kRGlz
cGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNw
YXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1y
ZXR1cm4tcGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBKYXZhU2NyaXB0Q29yZS9y
ZXBsYXkvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5CisKKyNpZm5kZWYgSW5zcGVj
dG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnNfaAorI2RlZmluZSBJbnNwZWN0b3JUZXN0RnJvbnRl
bmREaXNwYXRjaGVyc19oCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSAiSW5z
cGVjdG9yVGVzdFR5cGVCdWlsZGVycy5oIgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwuaD4KKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+
CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyNlbmRpZiAvLyAhZGVmaW5l
ZChJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVyc19oKQorIyMjIEVuZCBGaWxlOiBJbnNw
ZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0
b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMt
d2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3Jp
cHQ6IEphdmFTY3JpcHRDb3JlL3JlcGxheS9zY3JpcHRzL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3Iu
cHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkluc3BlY3RvclRlc3RGcm9udGVu
ZERpc3BhdGNoZXJzLmgiCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSA8d3Rm
L3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworfSAvLyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorCisjIyMgRW5kIEZp
bGU6IEluc3BlY3RvclRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmls
ZTogSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRz
LXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUgc2Ny
aXB0OiBKYXZhU2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySW5zcGVjdG9y
LnB5CisKKyNpZm5kZWYgSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVyc19oCisjZGVmaW5lIEluc3Bl
Y3RvclRlc3RUeXBlQnVpbGRlcnNfaAorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1
ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JKU1R5cGVCdWlsZGVycy5oPgorI2luY2x1ZGUgPGluc3Bl
Y3Rvci9JbnNwZWN0b3JUeXBlQnVpbGRlci5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+
CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisK
KworCituYW1lc3BhY2UgVHlwZUJ1aWxkZXIgeworCisvLyBGb3J3YXJkIGRlY2xhcmF0aW9ucy4K
KyNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQorbmFtZXNwYWNlIERhdGFiYXNlIHsKK2NsYXNzIEVy
cm9yOworZW51bSBjbGFzcyBQcmltYXJ5Q29sb3JzOworfSAvLyBEYXRhYmFzZQorI2VuZGlmIC8v
IEVOQUJMRShTUUxfREFUQUJBU0UpCisvLyBFbmQgb2YgZm9yd2FyZCBkZWNsYXJhdGlvbnMuCisK
KworLy8gVHlwZWRlZnMuCisjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKK25hbWVzcGFjZSBEYXRh
YmFzZSB7CisvKiBVbmlxdWUgaWRlbnRpZmllciBvZiBEYXRhYmFzZSBvYmplY3QuICovCit0eXBl
ZGVmIGludCBEYXRhYmFzZUlkOworfSAvLyBEYXRhYmFzZQorI2VuZGlmIC8vIEVOQUJMRShTUUxf
REFUQUJBU0UpCisvLyBFbmQgb2YgdHlwZWRlZnMuCisKK1N0cmluZyBnZXRUZXN0RW51bUNvbnN0
YW50VmFsdWUoaW50IGNvZGUpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBTdHJpbmcgZ2V0VGVz
dEVudW1Db25zdGFudFZhbHVlKFQgZW51bVZhbHVlKQoreworICAgIHJldHVybiBnZXRUZXN0RW51
bUNvbnN0YW50VmFsdWUoc3RhdGljX2Nhc3Q8aW50PihlbnVtVmFsdWUpKTsKK30KKworI2lmIEVO
QUJMRShTUUxfREFUQUJBU0UpCituYW1lc3BhY2UgRGF0YWJhc2UgeworLyogICovCitlbnVtIGNs
YXNzIFByaW1hcnlDb2xvcnMgeworICAgIFJlZCA9IDAsCisgICAgR3JlZW4gPSAxLAorICAgIEJs
dWUgPSAyLAorfTsgLy8gZW51bSBjbGFzcyBQcmltYXJ5Q29sb3JzCisvKiBEYXRhYmFzZSBlcnJv
ci4gKi8KK2NsYXNzIEVycm9yIDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0QmFz
ZSB7CitwdWJsaWM6CisgICAgZW51bSB7CisgICAgICAgIE5vRmllbGRzU2V0ID0gMCwKKyAgICAg
ICAgTWVzc2FnZVNldCA9IDEgPDwgMCwKKyAgICAgICAgQ29kZVNldCA9IDEgPDwgMSwKKyAgICAg
ICAgQWxsRmllbGRzU2V0ID0gKE1lc3NhZ2VTZXQgfCBDb2RlU2V0KQorICAgIH07CisKKyAgICB0
ZW1wbGF0ZTxpbnQgU1RBVEU+CisgICAgY2xhc3MgQnVpbGRlciB7CisgICAgcHJpdmF0ZToKKyAg
ICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKKworICAg
ICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUo
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRl
cjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyKFBh
c3NSZWZQdHI8LypFcnJvciovSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IHB0cikKKyAgICAg
ICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1
aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdCA9
IHB0cjsKKyAgICAgICAgfQorICAgICAgICBmcmllbmQgY2xhc3MgRXJyb3I7CisgICAgcHVibGlj
OgorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBNZXNzYWdlU2V0PiYgc2V0TWVzc2FnZShjb25z
dCBTdHJpbmcmIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCgh
KFNUQVRFICYgTWVzc2FnZVNldCksIHByb3BlcnR5X21lc3NhZ2VfYWxyZWFkeV9zZXQpOworICAg
ICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoIm1lc3NhZ2UiKSwgdmFs
dWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxNZXNzYWdlU2V0PigpOworICAgICAg
ICB9CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IENvZGVTZXQ+JiBzZXRDb2RlKGludCB2YWx1
ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIENvZGVT
ZXQpLCBwcm9wZXJ0eV9jb2RlX2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5z
ZXROdW1iZXIoQVNDSUlMaXRlcmFsKCJjb2RlIiksIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVy
biBjYXN0U3RhdGU8Q29kZVNldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIG9wZXJhdG9yIFJl
ZlB0cjxFcnJvcj4mICgpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNU
QVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CisgICAgICAgICAgICBD
T01QSUxFX0FTU0VSVChzaXplb2YoRXJyb3IpID09IHNpemVvZihJbnNwZWN0b3I6Okluc3BlY3Rv
ck9iamVjdCksIGNhbm5vdF9jYXN0KTsKKyAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRf
Y2FzdDxSZWZQdHI8RXJyb3I+Kj4oJm1fcmVzdWx0KTsKKyAgICAgICAgfQorCisgICAgICAgIFBh
c3NSZWZQdHI8RXJyb3I+IHJlbGVhc2UoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
UmVmUHRyPEVycm9yPigqdGhpcykucmVsZWFzZSgpOworICAgICAgICB9CisgICAgfTsKKworICAg
IC8qCisgICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgorICAgICAqIFJlZlB0cjxFcnJvcj4g
cmVzdWx0ID0gRXJyb3I6OmNyZWF0ZSgpCisgICAgICogICAgIC5zZXRNZXNzYWdlKC4uLikKKyAg
ICAgKiAgICAgLnNldENvZGUoLi4uKTsKKyAgICAgKi8KKyAgICBzdGF0aWMgQnVpbGRlcjxOb0Zp
ZWxkc1NldD4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRz
U2V0PihJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkpOworICAgIH0KKyAgICB0
eXBlZGVmIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlN0cnVjdEl0ZW1UcmFpdHMgSXRlbVRyYWl0
czsKK307CisKK30gLy8gRGF0YWJhc2UKKyNlbmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQor
CisKKworfSAvLyBuYW1lc3BhY2UgVHlwZUJ1aWxkZXIKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVj
dG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorCisjZW5kaWYgLy8gIWRlZmluZWQo
SW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVyc19oKQorIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0
VHlwZUJ1aWxkZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RUeXBlQnVpbGRl
cnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1
cm4tcGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBKYXZhU2NyaXB0Q29yZS9yZXBs
YXkvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5CisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmgiCisKKyNpZiBFTkFCTEUo
SU5TUEVDVE9SKQorCisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKKworbmFtZXNwYWNlIFR5cGVCdWlsZGVyIHsKKworc3RhdGljIGNvbnN0IGNo
YXIqIGNvbnN0IGVudW1fY29uc3RhbnRfdmFsdWVzW10gPSB7CisgICAgInJlZCIsCisgICAgImdy
ZWVuIiwKKyAgICAiYmx1ZSIsCisgICAgImN5YW4iLAorICAgICJtYWdlbnRhIiwKKyAgICAieWVs
bG93IiwKKyAgICAiYmxhY2siLAorfTsKKworU3RyaW5nIGdldFRlc3RFbnVtQ29uc3RhbnRWYWx1
ZShpbnQgY29kZSkgeworICAgIHJldHVybiBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb2RlXTsKK30K
KworCisKK30gLy8gbmFtZXNwYWNlIFR5cGVCdWlsZGVyCisKK30gLy8gbmFtZXNwYWNlIEluc3Bl
Y3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKworIyMjIEVuZCBGaWxlOiBJbnNw
ZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2RvbWFpbnMtd2l0aC12YXJ5aW5n
LWNvbW1hbmQtc2l6ZXMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1z
aXplcy5qc29uLXJlc3VsdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jZjZlMDIyM2I0OWFkYTQyN2E2NDMwZTU3MWE0
NzA4M2FkYzE0ODMyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2RvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1h
bmQtc2l6ZXMuanNvbi1yZXN1bHQKQEAgLTAsMCArMSw1NTIgQEAKKyMjIyBCZWdpbiBGaWxlOiBJ
bnNwZWN0b3JUZXN0QmFja2VuZENvbW1hbmRzLmpzCisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbnMt
d2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogSmF2YVNj
cmlwdENvcmUvcmVwbGF5L3NjcmlwdHMvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQorCisvLyBO
ZXR3b3JrMS4KK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJOZXR3b3JrMS5sb2Fk
UmVzb3VyY2UxIiwgW10sIFtdKTsKKworLy8gTmV0d29yazMuCitJbnNwZWN0b3JCYWNrZW5kLnJl
Z2lzdGVyQ29tbWFuZCgiTmV0d29yazMubG9hZFJlc291cmNlMSIsIFtdLCBbXSk7CitJbnNwZWN0
b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiTmV0d29yazMubG9hZFJlc291cmNlMiIsIFtdLCBb
XSk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiTmV0d29yazMubG9hZFJlc291
cmNlMyIsIFtdLCBbXSk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiTmV0d29y
azMubG9hZFJlc291cmNlNCIsIFtdLCBbXSk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29t
bWFuZCgiTmV0d29yazMubG9hZFJlc291cmNlNSIsIFtdLCBbXSk7CitJbnNwZWN0b3JCYWNrZW5k
LnJlZ2lzdGVyQ29tbWFuZCgiTmV0d29yazMubG9hZFJlc291cmNlNiIsIFtdLCBbXSk7CitJbnNw
ZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiTmV0d29yazMubG9hZFJlc291cmNlNyIsIFtd
LCBbXSk7CisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kQ29tbWFuZHMuanMKKwor
IyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBkb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24KKy8vIGJ5
IHRoZSBzY3JpcHQ6IEphdmFTY3JpcHRDb3JlL3JlcGxheS9zY3JpcHRzL0NvZGVHZW5lcmF0b3JJ
bnNwZWN0b3IucHkKKworI2lmbmRlZiBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzX2gK
KyNkZWZpbmUgSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVyc19oCisKKyNpZiBFTkFCTEUo
SU5TUEVDVE9SKQorCisjaW5jbHVkZSAiSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5oIgorI2lu
Y2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUg
PHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25h
bWVzcGFjZSBJbnNwZWN0b3IgeworCit0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKworY2xh
c3MgSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgeworcHVibGljOgor
ICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UxKEVycm9yU3RyaW5nKikgPSAwOworcHJvdGVj
dGVkOgorICAgIHZpcnR1YWwgfkluc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyKCk7Cit9OworCitjbGFzcyBJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVySGFu
ZGxlciB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTEoRXJyb3JTdHJp
bmcqKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTIoRXJyb3JTdHJpbmcqKSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTMoRXJyb3JTdHJpbmcqKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTQoRXJyb3JTdHJpbmcqKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIGxvYWRSZXNvdXJjZTUoRXJyb3JTdHJpbmcqKSA9IDA7CisgICAgdmlydHVhbCB2
b2lkIGxvYWRSZXNvdXJjZTYoRXJyb3JTdHJpbmcqKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGxv
YWRSZXNvdXJjZTcoRXJyb3JTdHJpbmcqKSA9IDA7Citwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB+
SW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKTsKK307CisKK2NsYXNz
IEluc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgSW5zcGVj
dG9yOjpJbnNwZWN0b3JTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6Cisg
ICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcj4g
Y3JlYXRlKEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqLCBJbnNwZWN0b3JO
ZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOworICAgIHZpcnR1YWwgdm9pZCBkaXNw
YXRjaChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFBhc3NSZWZQdHI8SW5zcGVj
dG9yOjpJbnNwZWN0b3JPYmplY3Q+IG1lc3NhZ2UpIG92ZXJyaWRlOworcHJpdmF0ZToKKyAgICB2
b2lkIGxvYWRSZXNvdXJjZTEobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9y
T2JqZWN0JiBtZXNzYWdlKTsKK3ByaXZhdGU6CisgICAgSW5zcGVjdG9yTmV0d29yazFCYWNrZW5k
RGlzcGF0Y2hlcihJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiwgSW5zcGVj
dG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKKyAgICBJbnNwZWN0b3JOZXR3
b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogbV9hZ2VudDsKK307CisKK2NsYXNzIEluc3Bl
Y3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yOjpJ
bnNwZWN0b3JTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRl
KEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqLCBJbnNwZWN0b3JOZXR3b3Jr
M0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOworICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaChs
b25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJ
bnNwZWN0b3JPYmplY3Q+IG1lc3NhZ2UpIG92ZXJyaWRlOworcHJpdmF0ZToKKyAgICB2b2lkIGxv
YWRSZXNvdXJjZTEobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0
JiBtZXNzYWdlKTsKKyAgICB2b2lkIGxvYWRSZXNvdXJjZTIobG9uZyBjYWxsSWQsIGNvbnN0IElu
c3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsKKyAgICB2b2lkIGxvYWRSZXNvdXJj
ZTMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdl
KTsKKyAgICB2b2lkIGxvYWRSZXNvdXJjZTQobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvcjo6
SW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsKKyAgICB2b2lkIGxvYWRSZXNvdXJjZTUobG9uZyBj
YWxsSWQsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsKKyAgICB2
b2lkIGxvYWRSZXNvdXJjZTYobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9y
T2JqZWN0JiBtZXNzYWdlKTsKKyAgICB2b2lkIGxvYWRSZXNvdXJjZTcobG9uZyBjYWxsSWQsIGNv
bnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsKK3ByaXZhdGU6CisgICAg
SW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcihJbnNwZWN0b3I6Okluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyKiwgSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXIqKTsKKyAgICBJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciogbV9h
Z2VudDsKK307CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxF
KElOU1BFQ1RPUikKKworI2VuZGlmIC8vICFkZWZpbmVkKEluc3BlY3RvclRlc3RCYWNrZW5kRGlz
cGF0Y2hlcnNfaCkKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVy
cy5oCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNw
cAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpz
b24KKy8vIGJ5IHRoZSBzY3JpcHQ6IEphdmFTY3JpcHRDb3JlL3JlcGxheS9zY3JpcHRzL0NvZGVH
ZW5lcmF0b3JJbnNwZWN0b3IucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIklu
c3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2lmIEVOQUJMRShJTlNQRUNUT1Ip
CisKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLmg+CisjaW5j
bHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK0luc3BlY3Rvck5ldHdvcmsxQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyOjp+SW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXIoKSB7IH0KK0luc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXJIYW5kbGVy
Ojp+SW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKSB7IH0KKworUGFz
c1JlZlB0cjxJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyPiBJbnNwZWN0b3JOZXR3
b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUoSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIq
IGJhY2tlbmREaXNwYXRjaGVyLCBJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFu
ZGxlciogYWdlbnQpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnNwZWN0b3JOZXR3b3Jr
MUJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyLCBhZ2VudCkpOworfQorCitJbnNw
ZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmRE
aXNwYXRjaGVyKEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlciwg
SW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQorICAgIDog
SW5zcGVjdG9yU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIp
CisgICAgLCBtX2FnZW50KGFnZW50KQoreworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lz
dGVyRGlzcGF0Y2hlckZvckRvbWFpbihBU0NJSUxpdGVyYWwoIk5ldHdvcmsxIiksIHRoaXMpOwor
fQorCit2b2lkIEluc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxv
bmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IG1lc3NhZ2UpCit7CisgICAgUmVmPEluc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNo
ZXI+IHByb3RlY3QoKnRoaXMpOworCisgICAgaWYgKG1ldGhvZCA9PSAibG9hZFJlc291cmNlMSIp
CisgICAgICAgIGxvYWRSZXNvdXJjZTEoY2FsbElkLCAqbWVzc2FnZS5nZXQoKSk7CisgICAgZWxz
ZQorICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKCZjYWxs
SWQsIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgU3RyaW5nKCIn
IikgKyAiTmV0d29yazEiICsgJy4nICsgbWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOworfQor
Cit2b2lkIEluc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTEo
bG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYpCit7CisgICAgRXJyb3JTdHJpbmcg
ZXJyb3I7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2Jq
ZWN0OjpjcmVhdGUoKTsKKyAgICBtX2FnZW50LT5sb2FkUmVzb3VyY2UxKCZlcnJvcik7CisKKyAg
ICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFz
ZSgpLCBlcnJvcik7Cit9CisKK1Bhc3NSZWZQdHI8SW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlz
cGF0Y2hlcj4gSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKEluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlciwgSW5zcGVjdG9yTmV0d29y
azNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQoreworICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hl
ciwgYWdlbnQpKTsKK30KKworSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6SW5z
cGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcihJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
ciogYmFja2VuZERpc3BhdGNoZXIsIEluc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyKiBhZ2VudCkKKyAgICA6IEluc3BlY3RvclN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRj
aGVyKGJhY2tlbmREaXNwYXRjaGVyKQorICAgICwgbV9hZ2VudChhZ2VudCkKK3sKKyAgICBtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4oQVNDSUlMaXRlcmFs
KCJOZXR3b3JrMyIpLCB0aGlzKTsKK30KKwordm9pZCBJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmRE
aXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFBh
c3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtZXNzYWdlKQoreworICAgIFJlZjxJbnNwZWN0b3JO
ZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKKworICAgIHR5cGVkZWYg
dm9pZCAoSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6KkNhbGxIYW5kbGVyKShs
b25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpOwor
ICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIENhbGxIYW5kbGVyPiBEaXNwYXRjaE1hcDsKKyAg
ICBERVBSRUNBVEVEX0RFRklORV9TVEFUSUNfTE9DQUwoRGlzcGF0Y2hNYXAsIGRpc3BhdGNoTWFw
LCAoKSk7CisgICAgaWYgKGRpc3BhdGNoTWFwLmlzRW1wdHkoKSkgeworICAgICAgICBzdGF0aWMg
Y29uc3Qgc3RydWN0IE1ldGhvZFRhYmxlIHsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIqIG5hbWU7
CisgICAgICAgICAgICBDYWxsSGFuZGxlciBoYW5kbGVyOworICAgICAgICB9IGNvbW1hbmRzW10g
PSB7CisgICAgICAgICAgICB7ICJsb2FkUmVzb3VyY2UxIiwgJkluc3BlY3Rvck5ldHdvcmszQmFj
a2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTEgfSwKKyAgICAgICAgICAgIHsgImxvYWRSZXNv
dXJjZTIiLCAmSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNl
MiB9LAorICAgICAgICAgICAgeyAibG9hZFJlc291cmNlMyIsICZJbnNwZWN0b3JOZXR3b3JrM0Jh
Y2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UzIH0sCisgICAgICAgICAgICB7ICJsb2FkUmVz
b3VyY2U0IiwgJkluc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJj
ZTQgfSwKKyAgICAgICAgICAgIHsgImxvYWRSZXNvdXJjZTUiLCAmSW5zcGVjdG9yTmV0d29yazNC
YWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNSB9LAorICAgICAgICAgICAgeyAibG9hZFJl
c291cmNlNiIsICZJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3Vy
Y2U2IH0sCisgICAgICAgICAgICB7ICJsb2FkUmVzb3VyY2U3IiwgJkluc3BlY3Rvck5ldHdvcmsz
QmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTcgfSwKKyAgICAgICAgfTsKKyAgICAgICAg
c2l6ZV90IGxlbmd0aCA9IFdURl9BUlJBWV9MRU5HVEgoY29tbWFuZHMpOworICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQorICAgICAgICAgICAgZGlzcGF0Y2hNYXAu
YWRkKGNvbW1hbmRzW2ldLm5hbWUsIGNvbW1hbmRzW2ldLmhhbmRsZXIpOworICAgIH0KKworICAg
IEhhc2hNYXA8U3RyaW5nLCBDYWxsSGFuZGxlcj46Oml0ZXJhdG9yIGl0ID0gZGlzcGF0Y2hNYXAu
ZmluZChtZXRob2QpOworICAgIGlmIChpdCA9PSBkaXNwYXRjaE1hcC5lbmQoKSkgeworICAgICAg
ICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIEluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgU3RyaW5nKCInIikgKyAiTmV0
d29yazMiICsgJy4nICsgbWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgKCgqdGhpcykuKml0LT52YWx1ZSkoY2FsbElkLCAqbWVzc2FnZS5n
ZXQoKSk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9h
ZFJlc291cmNlMShsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JikKK3sKKyAgICBF
cnJvclN0cmluZyBlcnJvcjsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJ
bnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJjZTEoJmVy
cm9yKTsKKworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIHJl
c3VsdC5yZWxlYXNlKCksIGVycm9yKTsKK30KKwordm9pZCBJbnNwZWN0b3JOZXR3b3JrM0JhY2tl
bmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UyKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JP
YmplY3QmKQoreworICAgIEVycm9yU3RyaW5nIGVycm9yOworICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgbV9hZ2VudC0+
bG9hZFJlc291cmNlMigmZXJyb3IpOworCisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJl
c3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgZXJyb3IpOworfQorCit2b2lkIEluc3Bl
Y3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTMobG9uZyBjYWxsSWQs
IGNvbnN0IEluc3BlY3Rvck9iamVjdCYpCit7CisgICAgRXJyb3JTdHJpbmcgZXJyb3I7CisgICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUo
KTsKKyAgICBtX2FnZW50LT5sb2FkUmVzb3VyY2UzKCZlcnJvcik7CisKKyAgICBtX2JhY2tlbmRE
aXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBlcnJvcik7
Cit9CisKK3ZvaWQgSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291
cmNlNChsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JikKK3sKKyAgICBFcnJvclN0
cmluZyBlcnJvcjsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0
b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJjZTQoJmVycm9yKTsK
KworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5y
ZWxlYXNlKCksIGVycm9yKTsKK30KKwordm9pZCBJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNw
YXRjaGVyOjpsb2FkUmVzb3VyY2U1KGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3Qm
KQoreworICAgIEVycm9yU3RyaW5nIGVycm9yOworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgbV9hZ2VudC0+bG9hZFJl
c291cmNlNSgmZXJyb3IpOworCisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNl
KGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgZXJyb3IpOworfQorCit2b2lkIEluc3BlY3Rvck5l
dHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTYobG9uZyBjYWxsSWQsIGNvbnN0
IEluc3BlY3Rvck9iamVjdCYpCit7CisgICAgRXJyb3JTdHJpbmcgZXJyb3I7CisgICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAg
ICBtX2FnZW50LT5sb2FkUmVzb3VyY2U2KCZlcnJvcik7CisKKyAgICBtX2JhY2tlbmREaXNwYXRj
aGVyLT5zZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBlcnJvcik7Cit9CisK
K3ZvaWQgSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNyhs
b25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JikKK3sKKyAgICBFcnJvclN0cmluZyBl
cnJvcjsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmpl
Y3Q6OmNyZWF0ZSgpOworICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJjZTcoJmVycm9yKTsKKworICAg
IG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNl
KCksIGVycm9yKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBF
TkFCTEUoSU5TUEVDVE9SKQorCisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kRGlz
cGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNw
YXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQt
c2l6ZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogSmF2YVNjcmlwdENvcmUvcmVwbGF5L3Njcmlw
dHMvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQorCisjaWZuZGVmIEluc3BlY3RvclRlc3RGcm9u
dGVuZERpc3BhdGNoZXJzX2gKKyNkZWZpbmUgSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hl
cnNfaAorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUgIkluc3BlY3RvclRlc3RU
eXBlQnVpbGRlcnMuaCIKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsLmg+CisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPgorI2luY2x1ZGUg
PHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25h
bWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNl
bmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorCisjZW5kaWYgLy8gIWRlZmluZWQoSW5zcGVjdG9y
VGVzdEZyb250ZW5kRGlzcGF0Y2hlcnNfaCkKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdEZy
b250ZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdEZyb250
ZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbnMtd2l0aC12YXJ5aW5n
LWNvbW1hbmQtc2l6ZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogSmF2YVNjcmlwdENvcmUvcmVw
bGF5L3NjcmlwdHMvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQorCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKKworI2lm
IEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25h
bWVzcGFjZSBJbnNwZWN0b3IgeworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlm
IC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdEZyb250
ZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0VHlwZUJ1
aWxkZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1z
aXplcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBKYXZhU2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0
cy9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5CisKKyNpZm5kZWYgSW5zcGVjdG9yVGVzdFR5cGVC
dWlsZGVyc19oCisjZGVmaW5lIEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnNfaAorCisjaWYgRU5B
QkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JKU1R5cGVCdWls
ZGVycy5oPgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JUeXBlQnVpbGRlci5oPgorI2lu
Y2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKwor
bmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCituYW1lc3BhY2UgVHlwZUJ1aWxkZXIgeworCisK
KworLy8gVHlwZWRlZnMuCituYW1lc3BhY2UgTmV0d29yazIgeworLyogVW5pcXVlIGxvYWRlciBp
ZGVudGlmaWVyLiAqLwordHlwZWRlZiBTdHJpbmcgTG9hZGVySWQ7Cit9IC8vIE5ldHdvcmsyCisv
LyBFbmQgb2YgdHlwZWRlZnMuCisKK1N0cmluZyBnZXRUZXN0RW51bUNvbnN0YW50VmFsdWUoaW50
IGNvZGUpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBTdHJpbmcgZ2V0VGVzdEVudW1Db25zdGFu
dFZhbHVlKFQgZW51bVZhbHVlKQoreworICAgIHJldHVybiBnZXRUZXN0RW51bUNvbnN0YW50VmFs
dWUoc3RhdGljX2Nhc3Q8aW50PihlbnVtVmFsdWUpKTsKK30KKworCisKK30gLy8gbmFtZXNwYWNl
IFR5cGVCdWlsZGVyCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5B
QkxFKElOU1BFQ1RPUikKKworI2VuZGlmIC8vICFkZWZpbmVkKEluc3BlY3RvclRlc3RUeXBlQnVp
bGRlcnNfaCkKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5oCisKKyMj
IyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmNwcAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
Ky8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBkb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24KKy8vIGJ5IHRoZSBz
Y3JpcHQ6IEphdmFTY3JpcHRDb3JlL3JlcGxheS9zY3JpcHRzL0NvZGVHZW5lcmF0b3JJbnNwZWN0
b3IucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkluc3BlY3RvclRlc3RUeXBl
QnVpbGRlcnMuaCIKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCituYW1lc3BhY2UgVHlwZUJ1
aWxkZXIgeworCitzdGF0aWMgY29uc3QgY2hhciogY29uc3QgZW51bV9jb25zdGFudF92YWx1ZXNb
XSA9IHsKK307CisKK1N0cmluZyBnZXRUZXN0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpIHsK
KyAgICByZXR1cm4gZW51bV9jb25zdGFudF92YWx1ZXNbY29kZV07Cit9CisKKworCit9IC8vIG5h
bWVzcGFjZSBUeXBlQnVpbGRlcgorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlm
IC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdFR5cGVC
dWlsZGVycy5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9leHBlY3RlZC9ldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpz
b24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2V4cGVjdGVkL2V2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbi1yZXN1bHQKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNzE0YWY5NTRhODUzZmU5YjRkZWQ3MmQ2MGQ3NzBmMGYyMGZkMDQzOQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9leHBlY3RlZC9ldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0CkBA
IC0wLDAgKzEsNDk3IEBACisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdEJhY2tlbmRDb21t
YW5kcy5qcworLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJz
Lmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IEphdmFTY3JpcHRDb3JlL3JlcGxheS9zY3JpcHRzL0Nv
ZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKKworLy8gRGF0YWJhc2UuCitJbnNwZWN0b3JCYWNrZW5k
LnJlZ2lzdGVyRGF0YWJhc2VEaXNwYXRjaGVyID0gSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRv
bWFpbkRpc3BhdGNoZXIuYmluZChJbnNwZWN0b3JCYWNrZW5kLCAiRGF0YWJhc2UiKTsKK0luc3Bl
Y3RvckJhY2tlbmQucmVnaXN0ZXJFdmVudCgiRGF0YWJhc2UuZGlkRXhlY3V0ZU9wdGlvbmFsUGFy
YW1ldGVycyIsIFsiY29sdW1uTmFtZXMiLCAibm90ZXMiLCAidGltZXN0YW1wIiwgInZhbHVlcyIs
ICJwYXlsb2FkIiwgInNxbEVycm9yIiwgInNjcmVlbkNvbG9yIiwgInByaW50Q29sb3IiXSk7CitJ
bnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRXZlbnQoIkRhdGFiYXNlLmRpZEV4ZWN1dGVOb09wdGlv
bmFsUGFyYW1ldGVycyIsIFsiY29sdW1uTmFtZXMiLCAibm90ZXMiLCAidGltZXN0YW1wIiwgInZh
bHVlcyIsICJwYXlsb2FkIiwgInNxbEVycm9yIiwgInNjcmVlbkNvbG9yIiwgInByaW50Q29sb3Ii
XSk7CisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kQ29tbWFuZHMuanMKKworIyMj
IEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBz
Y3JpcHQ6IEphdmFTY3JpcHRDb3JlL3JlcGxheS9zY3JpcHRzL0NvZGVHZW5lcmF0b3JJbnNwZWN0
b3IucHkKKworI2lmbmRlZiBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzX2gKKyNkZWZp
bmUgSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVyc19oCisKKyNpZiBFTkFCTEUoSU5TUEVD
VE9SKQorCisjaW5jbHVkZSAiSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5oIgorI2luY2x1ZGUg
PGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHd0Zi9Q
YXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFj
ZSBJbnNwZWN0b3IgeworCit0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKworfSAvLyBuYW1l
c3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorCisjZW5kaWYg
Ly8gIWRlZmluZWQoSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVyc19oKQorIyMjIEVuZCBG
aWxlOiBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6
IEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2
ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogSmF2
YVNjcmlwdENvcmUvcmVwbGF5L3NjcmlwdHMvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQorCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRj
aGVycy5oIgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUgPGluc3BlY3Rvci9J
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4KKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9y
VmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5z
cGVjdG9yIHsKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5B
QkxFKElOU1BFQ1RPUikKKworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3Bh
dGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0
Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJz
Lmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IEphdmFTY3JpcHRDb3JlL3JlcGxheS9zY3JpcHRzL0Nv
ZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKKworI2lmbmRlZiBJbnNwZWN0b3JUZXN0RnJvbnRlbmRE
aXNwYXRjaGVyc19oCisjZGVmaW5lIEluc3BlY3RvclRlc3RGcm9udGVuZERpc3BhdGNoZXJzX2gK
KworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRlICJJbnNwZWN0b3JUZXN0VHlwZUJ1
aWxkZXJzLmgiCisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5o
PgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYv
UGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKKworCisKKyNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQorY2xhc3MgSW5z
cGVjdG9yRGF0YWJhc2VGcm9udGVuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIEluc3BlY3Rv
ckRhdGFiYXNlRnJvbnRlbmREaXNwYXRjaGVyKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsKSA6IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKGluc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbCkgeyB9CisgICAgdm9pZCBkaWRFeGVjdXRlT3B0aW9uYWxQYXJh
bWV0ZXJzKFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk8U3RyaW5nPj4g
Y29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyogY29uc3Qgbm90ZXMsIGNvbnN0IGRvdWJsZSogY29u
c3QgdGltZXN0YW1wLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiB2YWx1
ZXMsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4gcGF5bG9hZCwgUGFzc1Jl
ZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpEYXRhYmFzZTo6RXJyb3I+IHNxbEVycm9yLCBj
b25zdCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyogY29u
c3Qgc2NyZWVuQ29sb3IsIGNvbnN0IFN0cmluZyogY29uc3QgcHJpbnRDb2xvcik7CisgICAgdm9p
ZCBkaWRFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMoUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlR5
cGVCdWlsZGVyOjpBcnJheTxTdHJpbmc+PiBjb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBub3Rl
cywgZG91YmxlIHRpbWVzdGFtcCwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVj
dD4gdmFsdWVzLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+IHBheWxvYWQs
IFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6RGF0YWJhc2U6OkVycm9yPiBzcWxF
cnJvciwgY29uc3QgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6RGF0YWJhc2U6OlByaW1hcnlDb2xv
cnMmIHNjcmVlbkNvbG9yLCBjb25zdCBTdHJpbmcmIHByaW50Q29sb3IpOworcHJpdmF0ZToKKyAg
ICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOwor
fTsKKyNlbmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQorCit9IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyNlbmRpZiAvLyAhZGVmaW5l
ZChJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVyc19oKQorIyMjIEVuZCBGaWxlOiBJbnNw
ZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0
b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnRzLXdp
dGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBKYXZhU2NyaXB0
Q29yZS9yZXBsYXkvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5CisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5o
IgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcu
aD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKyNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQor
dm9pZCBJbnNwZWN0b3JEYXRhYmFzZUZyb250ZW5kRGlzcGF0Y2hlcjo6ZGlkRXhlY3V0ZU9wdGlv
bmFsUGFyYW1ldGVycyhQYXNzUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5PFN0
cmluZz4+IGNvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcqIGNvbnN0IG5vdGVzLCBjb25zdCBkb3Vi
bGUqIGNvbnN0IHRpbWVzdGFtcCwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVj
dD4gdmFsdWVzLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+IHBheWxvYWQs
IFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6RGF0YWJhc2U6OkVycm9yPiBzcWxF
cnJvciwgY29uc3QgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6RGF0YWJhc2U6OlByaW1hcnlDb2xv
cnMqIGNvbnN0IHNjcmVlbkNvbG9yLCBjb25zdCBTdHJpbmcqIGNvbnN0IHByaW50Q29sb3IpCit7
CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4ganNvbk1lc3NhZ2UgPSBJbnNwZWN0b3JPYmpl
Y3Q6OmNyZWF0ZSgpOworICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJt
ZXRob2QiKSwgQVNDSUlMaXRlcmFsKCJEYXRhYmFzZS5kaWRFeGVjdXRlT3B0aW9uYWxQYXJhbWV0
ZXJzIikpOworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3Bl
Y3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgaWYgKGNvbHVtbk5hbWVzKQorICAgICAgICBwYXJh
bXNPYmplY3QtPnNldFZhbHVlKEFTQ0lJTGl0ZXJhbCgiY29sdW1uTmFtZXMiKSwgY29sdW1uTmFt
ZXMpOworICAgIGlmIChub3RlcykKKyAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoQVND
SUlMaXRlcmFsKCJub3RlcyIpLCAqbm90ZXMpOworICAgIGlmICh0aW1lc3RhbXApCisgICAgICAg
IHBhcmFtc09iamVjdC0+c2V0TnVtYmVyKEFTQ0lJTGl0ZXJhbCgidGltZXN0YW1wIiksICp0aW1l
c3RhbXApOworICAgIGlmICh2YWx1ZXMpCisgICAgICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0
KEFTQ0lJTGl0ZXJhbCgidmFsdWVzIiksIHZhbHVlcyk7CisgICAgaWYgKHBheWxvYWQpCisgICAg
ICAgIHBhcmFtc09iamVjdC0+c2V0VmFsdWUoQVNDSUlMaXRlcmFsKCJwYXlsb2FkIiksICpwYXls
b2FkKTsKKyAgICBpZiAoc3FsRXJyb3IpCisgICAgICAgIHBhcmFtc09iamVjdC0+c2V0VmFsdWUo
QVNDSUlMaXRlcmFsKCJzcWxFcnJvciIpLCBzcWxFcnJvcik7CisgICAgaWYgKHNjcmVlbkNvbG9y
KQorICAgICAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInNjcmVlbkNv
bG9yIiksICpzY3JlZW5Db2xvcik7CisgICAgaWYgKHByaW50Q29sb3IpCisgICAgICAgIHBhcmFt
c09iamVjdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgicHJpbnRDb2xvciIpLCAqcHJpbnRDb2xv
cik7CisgICAganNvbk1lc3NhZ2UtPnNldE9iamVjdChBU0NJSUxpdGVyYWwoInBhcmFtcyIpLCBw
YXJhbXNPYmplY3QpOworCisgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNz
YWdlVG9Gcm9udGVuZChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOworfQorCit2b2lkIElu
c3BlY3RvckRhdGFiYXNlRnJvbnRlbmREaXNwYXRjaGVyOjpkaWRFeGVjdXRlTm9PcHRpb25hbFBh
cmFtZXRlcnMoUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheTxTdHJpbmc+
PiBjb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgUGFz
c1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gdmFsdWVzLCBQYXNzUmVmUHRyPElu
c3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+IHBheWxvYWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpU
eXBlQnVpbGRlcjo6RGF0YWJhc2U6OkVycm9yPiBzcWxFcnJvciwgY29uc3QgSW5zcGVjdG9yOjpU
eXBlQnVpbGRlcjo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMmIHNjcmVlbkNvbG9yLCBjb25zdCBT
dHJpbmcmIHByaW50Q29sb3IpCit7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4ganNvbk1l
c3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIGpzb25NZXNzYWdlLT5zZXRT
dHJpbmcoQVNDSUlMaXRlcmFsKCJtZXRob2QiKSwgQVNDSUlMaXRlcmFsKCJEYXRhYmFzZS5kaWRF
eGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMiKSk7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gcGFyYW1zT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBwYXJhbXNP
YmplY3QtPnNldFZhbHVlKEFTQ0lJTGl0ZXJhbCgiY29sdW1uTmFtZXMiKSwgY29sdW1uTmFtZXMp
OworICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgibm90ZXMiKSwgbm90
ZXMpOworICAgIHBhcmFtc09iamVjdC0+c2V0TnVtYmVyKEFTQ0lJTGl0ZXJhbCgidGltZXN0YW1w
IiksIHRpbWVzdGFtcCk7CisgICAgcGFyYW1zT2JqZWN0LT5zZXRPYmplY3QoQVNDSUlMaXRlcmFs
KCJ2YWx1ZXMiKSwgdmFsdWVzKTsKKyAgICBwYXJhbXNPYmplY3QtPnNldFZhbHVlKEFTQ0lJTGl0
ZXJhbCgicGF5bG9hZCIpLCBwYXlsb2FkKTsKKyAgICBwYXJhbXNPYmplY3QtPnNldFZhbHVlKEFT
Q0lJTGl0ZXJhbCgic3FsRXJyb3IiKSwgc3FsRXJyb3IpOworICAgIHBhcmFtc09iamVjdC0+c2V0
U3RyaW5nKEFTQ0lJTGl0ZXJhbCgic2NyZWVuQ29sb3IiKSwgc2NyZWVuQ29sb3IpOworICAgIHBh
cmFtc09iamVjdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgicHJpbnRDb2xvciIpLCBwcmludENv
bG9yKTsKKyAgICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicGFyYW1zIiks
IHBhcmFtc09iamVjdCk7CisKKyAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1l
c3NhZ2VUb0Zyb250ZW5kKGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cit9CisjZW5kaWYg
Ly8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNl
bmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorCisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RG
cm9udGVuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdFR5
cGVCdWlsZGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFt
ZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogSmF2YVNjcmlwdENvcmUvcmVwbGF5L3Njcmlw
dHMvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQorCisjaWZuZGVmIEluc3BlY3RvclRlc3RUeXBl
QnVpbGRlcnNfaAorI2RlZmluZSBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzX2gKKworI2lmIEVO
QUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9ySlNUeXBlQnVp
bGRlcnMuaD4KKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVHlwZUJ1aWxkZXIuaD4KKyNp
bmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisK
K25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworbmFtZXNwYWNlIFR5cGVCdWlsZGVyIHsKKwor
Ly8gRm9yd2FyZCBkZWNsYXJhdGlvbnMuCisjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKK25hbWVz
cGFjZSBEYXRhYmFzZSB7CitjbGFzcyBFcnJvcjsKK30gLy8gRGF0YWJhc2UKKyNlbmRpZiAvLyBF
TkFCTEUoU1FMX0RBVEFCQVNFKQorLy8gRW5kIG9mIGZvcndhcmQgZGVjbGFyYXRpb25zLgorCisK
Ky8vIFR5cGVkZWZzLgorI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCituYW1lc3BhY2UgRGF0YWJh
c2UgeworLyogVW5pcXVlIGlkZW50aWZpZXIgb2YgRGF0YWJhc2Ugb2JqZWN0LiAqLwordHlwZWRl
ZiBTdHJpbmcgRGF0YWJhc2VJZDsKKwordHlwZWRlZiBTdHJpbmcgUHJpbWFyeUNvbG9yczsKK30g
Ly8gRGF0YWJhc2UKKyNlbmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQorLy8gRW5kIG9mIHR5
cGVkZWZzLgorCitTdHJpbmcgZ2V0VGVzdEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKTsKKwor
dGVtcGxhdGU8dHlwZW5hbWUgVD4gU3RyaW5nIGdldFRlc3RFbnVtQ29uc3RhbnRWYWx1ZShUIGVu
dW1WYWx1ZSkKK3sKKyAgICByZXR1cm4gZ2V0VGVzdEVudW1Db25zdGFudFZhbHVlKHN0YXRpY19j
YXN0PGludD4oZW51bVZhbHVlKSk7Cit9CisKKyNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQorbmFt
ZXNwYWNlIERhdGFiYXNlIHsKKy8qIERhdGFiYXNlIGVycm9yLiAqLworY2xhc3MgRXJyb3IgOiBw
dWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3RCYXNlIHsKK3B1YmxpYzoKKyAgICBlbnVt
IHsKKyAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAorICAgICAgICBNZXNzYWdlU2V0ID0gMSA8PCAw
LAorICAgICAgICBDb2RlU2V0ID0gMSA8PCAxLAorICAgICAgICBBbGxGaWVsZHNTZXQgPSAoTWVz
c2FnZVNldCB8IENvZGVTZXQpCisgICAgfTsKKworICAgIHRlbXBsYXRlPGludCBTVEFURT4KKyAg
ICBjbGFzcyBCdWlsZGVyIHsKKyAgICBwcml2YXRlOgorICAgICAgICBSZWZQdHI8SW5zcGVjdG9y
OjpJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OworCisgICAgICAgIHRlbXBsYXRlPGludCBTVEVQ
PiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlz
KTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjwvKkVycm9yKi9JbnNw
ZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gcHRyKQorICAgICAgICB7CisgICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9p
bml0X3N0YXRlKTsKKyAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOworICAgICAgICB9CisgICAg
ICAgIGZyaWVuZCBjbGFzcyBFcnJvcjsKKyAgICBwdWJsaWM6CisKKyAgICAgICAgQnVpbGRlcjxT
VEFURSB8IE1lc3NhZ2VTZXQ+JiBzZXRNZXNzYWdlKGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBNZXNzYWdlU2V0KSwg
cHJvcGVydHlfbWVzc2FnZV9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0
U3RyaW5nKEFTQ0lJTGl0ZXJhbCgibWVzc2FnZSIpLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1
cm4gY2FzdFN0YXRlPE1lc3NhZ2VTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVy
PFNUQVRFIHwgQ29kZVNldD4mIHNldENvZGUoaW50IHZhbHVlKQorICAgICAgICB7CisgICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQ29kZVNldCksIHByb3BlcnR5X2NvZGVfYWxy
ZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcihBU0NJSUxpdGVyYWwo
ImNvZGUiKSwgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxDb2RlU2V0Pigp
OworICAgICAgICB9CisKKyAgICAgICAgb3BlcmF0b3IgUmVmUHRyPEVycm9yPiYgKCkKKyAgICAg
ICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCBy
ZXN1bHRfaXNfbm90X3JlYWR5KTsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihF
cnJvcikgPT0gc2l6ZW9mKEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0KSwgY2Fubm90X2Nhc3Qp
OworICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxFcnJvcj4qPigm
bV9yZXN1bHQpOworICAgICAgICB9CisKKyAgICAgICAgUGFzc1JlZlB0cjxFcnJvcj4gcmVsZWFz
ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBSZWZQdHI8RXJyb3I+KCp0aGlzKS5y
ZWxlYXNlKCk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgLyoKKyAgICAgKiBTeW50aGV0aWMg
Y29uc3RydWN0b3I6CisgICAgICogUmVmUHRyPEVycm9yPiByZXN1bHQgPSBFcnJvcjo6Y3JlYXRl
KCkKKyAgICAgKiAgICAgLnNldE1lc3NhZ2UoLi4uKQorICAgICAqICAgICAuc2V0Q29kZSguLi4p
OworICAgICAqLworICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEluc3BlY3Rvcjo6SW5zcGVj
dG9yT2JqZWN0OjpjcmVhdGUoKSk7CisgICAgfQorICAgIHR5cGVkZWYgSW5zcGVjdG9yOjpUeXBl
QnVpbGRlcjo6U3RydWN0SXRlbVRyYWl0cyBJdGVtVHJhaXRzOworfTsKKworfSAvLyBEYXRhYmFz
ZQorI2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0UpCisKKworCit9IC8vIG5hbWVzcGFjZSBU
eXBlQnVpbGRlcgorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJM
RShJTlNQRUNUT1IpCisKKyNlbmRpZiAvLyAhZGVmaW5lZChJbnNwZWN0b3JUZXN0VHlwZUJ1aWxk
ZXJzX2gpCisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuaAorCisjIyMg
QmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5jcHAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisv
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0
OiBKYXZhU2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JUZXN0VHlwZUJ1aWxk
ZXJzLmgiCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworbmFtZXNwYWNlIFR5cGVCdWlsZGVy
IHsKKworc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGVudW1fY29uc3RhbnRfdmFsdWVzW10gPSB7
Cit9OworCitTdHJpbmcgZ2V0VGVzdEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKSB7CisgICAg
cmV0dXJuIGVudW1fY29uc3RhbnRfdmFsdWVzW2NvZGVdOworfQorCisKKworfSAvLyBuYW1lc3Bh
Y2UgVHlwZUJ1aWxkZXIKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBF
TkFCTEUoSU5TUEVDVE9SKQorCisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RUeXBlQnVpbGRl
cnMuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1kdXBsaWNhdGUtdHlwZS1kZWNsYXJhdGlvbnMuanNv
bi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9l
eHBlY3RlZC9mYWlsLW9uLWR1cGxpY2F0ZS10eXBlLWRlY2xhcmF0aW9ucy5qc29uLWVycm9yCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjQ0N2NkZjhlMjhlODU2NjEwYTI2ZjgxNTQ5NDNmMzZjZjhiN2QxZjQKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZXhwZWN0ZWQvZmFpbC1vbi1kdXBsaWNhdGUtdHlwZS1kZWNsYXJhdGlvbnMuanNvbi1lcnJv
cgpAQCAtMCwwICsxIEBACitFUlJPUjogRHVwbGljYXRlIHR5cGUgZGVjbGFyYXRpb246IFJ1bnRp
bWUuUmVtb3RlT2JqZWN0SWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLXR5cGUtZGVjbGFyYXRpb24tdXNp
bmctdHlwZS1yZWZlcmVuY2UuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLXR5cGUtZGVjbGFyYXRpb24tdXNp
bmctdHlwZS1yZWZlcmVuY2UuanNvbi1lcnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40MmY1NzUzYTQzOTYxNDRl
YjU2NmM1YzU5NjhkMDQ5YWVjNjE4MmRiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tdHlwZS1k
ZWNsYXJhdGlvbi11c2luZy10eXBlLXJlZmVyZW5jZS5qc29uLWVycm9yCkBAIC0wLDAgKzEgQEAK
K0VSUk9SOiBUeXBlIHJlZmVyZW5jZSBjYW5ub3QgaGF2ZSBib3RoICd0eXBlJyBhbmQgJyRyZWYn
IGtleXMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi10eXBlLWRlY2xhcmF0aW9uLXVzaW5nLXR5cGUtcmVm
ZXJlbmNlLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tdHlwZS1kZWNsYXJhdGlvbi11c2luZy10eXBlLXJl
ZmVyZW5jZS5qc29uLXJlc3VsdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zZWY0YjUzZGMyOWVjZjcwNmQ0ZDMyZjQ5
NTBlOWJhMzhiYjBmODlmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tdHlwZS1kZWNsYXJhdGlv
bi11c2luZy10eXBlLXJlZmVyZW5jZS5qc29uLXJlc3VsdApAQCAtMCwwICsxLDM1MSBAQAorIyMj
IEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kQ29tbWFuZHMuanMKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gZmFpbC1vbi10eXBlLWRlY2xhcmF0aW9uLXVzaW5nLXR5cGUtcmVmZXJlbmNlLmpzb24K
Ky8vIGJ5IHRoZSBzY3JpcHQ6IEphdmFTY3JpcHRDb3JlL3JlcGxheS9zY3JpcHRzL0NvZGVHZW5l
cmF0b3JJbnNwZWN0b3IucHkKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdEJhY2tlbmRDb21t
YW5kcy5qcworCisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVy
cy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGZhaWwtb24tdHlwZS1kZWNsYXJhdGlvbi11c2luZy10eXBl
LXJlZmVyZW5jZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBKYXZhU2NyaXB0Q29yZS9yZXBsYXkv
c2NyaXB0cy9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5CisKKyNpZm5kZWYgSW5zcGVjdG9yVGVz
dEJhY2tlbmREaXNwYXRjaGVyc19oCisjZGVmaW5lIEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0
Y2hlcnNfaAorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUgIkluc3BlY3RvclRl
c3RUeXBlQnVpbGRlcnMuaCIKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordHlwZWRlZiBTdHJp
bmcgRXJyb3JTdHJpbmc7CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8g
RU5BQkxFKElOU1BFQ1RPUikKKworI2VuZGlmIC8vICFkZWZpbmVkKEluc3BlY3RvclRlc3RCYWNr
ZW5kRGlzcGF0Y2hlcnNfaCkKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNw
YXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNo
ZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBmYWlsLW9uLXR5cGUtZGVjbGFyYXRpb24tdXNpbmct
dHlwZS1yZWZlcmVuY2UuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogSmF2YVNjcmlwdENvcmUvcmVw
bGF5L3NjcmlwdHMvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQorCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaWYg
RU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwuaD4KKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW5j
bHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisK
K30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikK
KworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorCisj
IyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBmYWlsLW9uLXR5cGUtZGVjbGFyYXRpb24tdXNpbmctdHlwZS1yZWZlcmVuY2Uu
anNvbgorLy8gYnkgdGhlIHNjcmlwdDogSmF2YVNjcmlwdENvcmUvcmVwbGF5L3NjcmlwdHMvQ29k
ZUdlbmVyYXRvckluc3BlY3Rvci5weQorCisjaWZuZGVmIEluc3BlY3RvclRlc3RGcm9udGVuZERp
c3BhdGNoZXJzX2gKKyNkZWZpbmUgSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnNfaAor
CisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUgIkluc3BlY3RvclRlc3RUeXBlQnVp
bGRlcnMuaCIKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLmg+
CisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9Q
YXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFj
ZSBJbnNwZWN0b3IgeworCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAv
LyBFTkFCTEUoSU5TUEVDVE9SKQorCisjZW5kaWYgLy8gIWRlZmluZWQoSW5zcGVjdG9yVGVzdEZy
b250ZW5kRGlzcGF0Y2hlcnNfaCkKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdEZyb250ZW5k
RGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlz
cGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGZhaWwtb24tdHlwZS1kZWNsYXJhdGlvbi11
c2luZy10eXBlLXJlZmVyZW5jZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBKYXZhU2NyaXB0Q29y
ZS9yZXBsYXkvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5CisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgor
CisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
KworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisj
ZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0
RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RU
eXBlQnVpbGRlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBmYWlsLW9uLXR5cGUtZGVjbGFyYXRpb24t
dXNpbmctdHlwZS1yZWZlcmVuY2UuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogSmF2YVNjcmlwdENv
cmUvcmVwbGF5L3NjcmlwdHMvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQorCisjaWZuZGVmIElu
c3BlY3RvclRlc3RUeXBlQnVpbGRlcnNfaAorI2RlZmluZSBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxk
ZXJzX2gKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5z
cGVjdG9ySlNUeXBlQnVpbGRlcnMuaD4KKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVHlw
ZUJ1aWxkZXIuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9Q
YXNzUmVmUHRyLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworbmFtZXNwYWNlIFR5
cGVCdWlsZGVyIHsKKworLy8gRm9yd2FyZCBkZWNsYXJhdGlvbnMuCituYW1lc3BhY2UgUnVudGlt
ZSB7CitjbGFzcyBSZW1vdGVPYmplY3RJZDsKK30gLy8gUnVudGltZQorLy8gRW5kIG9mIGZvcndh
cmQgZGVjbGFyYXRpb25zLgorCisKKworCitTdHJpbmcgZ2V0VGVzdEVudW1Db25zdGFudFZhbHVl
KGludCBjb2RlKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gU3RyaW5nIGdldFRlc3RFbnVtQ29u
c3RhbnRWYWx1ZShUIGVudW1WYWx1ZSkKK3sKKyAgICByZXR1cm4gZ2V0VGVzdEVudW1Db25zdGFu
dFZhbHVlKHN0YXRpY19jYXN0PGludD4oZW51bVZhbHVlKSk7Cit9CisKKworCit9IC8vIG5hbWVz
cGFjZSBUeXBlQnVpbGRlcgorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8v
IEVOQUJMRShJTlNQRUNUT1IpCisKKyNlbmRpZiAvLyAhZGVmaW5lZChJbnNwZWN0b3JUZXN0VHlw
ZUJ1aWxkZXJzX2gpCisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuaAor
CisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5jcHAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gZmFpbC1vbi10eXBlLWRlY2xhcmF0aW9uLXVzaW5nLXR5cGUtcmVmZXJlbmNlLmpz
b24KKy8vIGJ5IHRoZSBzY3JpcHQ6IEphdmFTY3JpcHRDb3JlL3JlcGxheS9zY3JpcHRzL0NvZGVH
ZW5lcmF0b3JJbnNwZWN0b3IucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIklu
c3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuaCIKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitu
YW1lc3BhY2UgVHlwZUJ1aWxkZXIgeworCitzdGF0aWMgY29uc3QgY2hhciogY29uc3QgZW51bV9j
b25zdGFudF92YWx1ZXNbXSA9IHsKK307CisKK1N0cmluZyBnZXRUZXN0RW51bUNvbnN0YW50VmFs
dWUoaW50IGNvZGUpIHsKKyAgICByZXR1cm4gZW51bV9jb25zdGFudF92YWx1ZXNbY29kZV07Cit9
CisKKworCit9IC8vIG5hbWVzcGFjZSBUeXBlQnVpbGRlcgorCit9IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyMjIyBFbmQgRmlsZTogSW5z
cGVjdG9yVGVzdFR5cGVCdWlsZGVycy5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLXVua25vd24tdHlw
ZS1yZWZlcmVuY2UtaW4tdHlwZS1kZWNsYXJhdGlvbi5qc29uLWVycm9yIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tdW5rbm93
bi10eXBlLXJlZmVyZW5jZS1pbi10eXBlLWRlY2xhcmF0aW9uLmpzb24tZXJyb3IKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uZDNjNzgyZDg5ZGI1NjVkNzI0ZTc1NDBlMzJlZGNmZGJkNzlhMmY3MwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBl
Y3RlZC9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1kZWNsYXJhdGlvbi5q
c29uLWVycm9yCkBAIC0wLDAgKzEgQEAKK0VSUk9SOiBMb29rdXAgZmFpbGVkIGZvciB0eXBlIHJl
ZmVyZW5jZTogZHJhZ29uIChyZWZlcmVuY2VkIGZyb20gZG9tYWluOiBSdW50aW1lKQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVj
dGVkL2ZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVyZW5jZS1pbi10eXBlLW1lbWJlci5qc29uLWVy
cm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVj
dGVkL2ZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVyZW5jZS1pbi10eXBlLW1lbWJlci5qc29uLWVy
cm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmZhZjY2NzJjYmVmMDk2MzBmZDliZThmZmFkYWNlMTJjNTYxMWNjYTgK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi11bmtub3duLXR5cGUtcmVmZXJlbmNlLWluLXR5cGUt
bWVtYmVyLmpzb24tZXJyb3IKQEAgLTAsMCArMSBAQAorRVJST1I6IExvb2t1cCBmYWlsZWQgZm9y
IHR5cGUgcmVmZXJlbmNlOiBDb2xvciAocmVmZXJlbmNlZCBmcm9tIGRvbWFpbjogRmFudGFzeSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9leHBlY3RlZC9zYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uLWVycm9yIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3NhbWUt
dHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24tZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjEzMDRmM2Ri
YzE3OGQ1NmYyNTVjYjNiN2M5ZjA4NmY3OTk1NmEwNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9zYW1lLXR5
cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uLWVycm9yCkBAIC0wLDAgKzEgQEAKK0VSUk9SOiBX
aGVuIHBhcnNpbmcgZG9tYWluLCByZXF1aXJlZCBwcm9wZXJ0eSBtaXNzaW5nOiBkb21haW4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9l
eHBlY3RlZC9zYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uLXJlc3VsdCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9zYW1lLXR5
cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uLXJlc3VsdApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yNTBiYTU0OGY3
ZmU3OTY3ODk0NTk1ZGNkZWEzYzNkZWJmZTVlNDlmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3NhbWUtdHlw
ZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24tcmVzdWx0CkBAIC0wLDAgKzEsMzU2IEBACisjIyMg
QmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdEJhY2tlbmRDb21tYW5kcy5qcworLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
Ky8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCisvLyBieSB0aGUgc2NyaXB0
OiBKYXZhU2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5
CisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kQ29tbWFuZHMuanMKKworIyMjIEJl
Z2luIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
Ky8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCisvLyBieSB0aGUgc2NyaXB0
OiBKYXZhU2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5
CisKKyNpZm5kZWYgSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVyc19oCisjZGVmaW5lIElu
c3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnNfaAorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikK
KworI2luY2x1ZGUgIkluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuaCIKKyNpbmNsdWRlIDxpbnNw
ZWN0b3IvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1Jl
ZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5z
cGVjdG9yIHsKKwordHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKK30gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKworI2VuZGlmIC8vICFk
ZWZpbmVkKEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnNfaCkKKyMjIyBFbmQgRmlsZTog
SW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNw
ZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5
cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBKYXZhU2NyaXB0
Q29yZS9yZXBsYXkvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5CisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgi
CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbC5oPgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMu
aD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3Ig
eworCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5T
UEVDVE9SKQorCisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMu
Y3BwCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5o
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIHNhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24KKy8v
IGJ5IHRoZSBzY3JpcHQ6IEphdmFTY3JpcHRDb3JlL3JlcGxheS9zY3JpcHRzL0NvZGVHZW5lcmF0
b3JJbnNwZWN0b3IucHkKKworI2lmbmRlZiBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVy
c19oCisjZGVmaW5lIEluc3BlY3RvclRlc3RGcm9udGVuZERpc3BhdGNoZXJzX2gKKworI2lmIEVO
QUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRlICJJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmgi
CisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oPgorI2luY2x1
ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0
ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVj
dG9yIHsKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxF
KElOU1BFQ1RPUikKKworI2VuZGlmIC8vICFkZWZpbmVkKEluc3BlY3RvclRlc3RGcm9udGVuZERp
c3BhdGNoZXJzX2gpCisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RGcm9udGVuZERpc3BhdGNo
ZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RGcm9udGVuZERpc3BhdGNoZXJz
LmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29u
CisvLyBieSB0aGUgc2NyaXB0OiBKYXZhU2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0cy9Db2RlR2Vu
ZXJhdG9ySW5zcGVjdG9yLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnNw
ZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikK
KworI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7
CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RP
UikKKworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAK
KworIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuaAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCisvLyBieSB0aGUgc2Ny
aXB0OiBKYXZhU2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySW5zcGVjdG9y
LnB5CisKKyNpZm5kZWYgSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVyc19oCisjZGVmaW5lIEluc3Bl
Y3RvclRlc3RUeXBlQnVpbGRlcnNfaAorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1
ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JKU1R5cGVCdWlsZGVycy5oPgorI2luY2x1ZGUgPGluc3Bl
Y3Rvci9JbnNwZWN0b3JUeXBlQnVpbGRlci5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+
CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisK
KworCituYW1lc3BhY2UgVHlwZUJ1aWxkZXIgeworCisKKworLy8gVHlwZWRlZnMuCituYW1lc3Bh
Y2UgUnVudGltZSB7CisvKiBVbmlxdWUgb2JqZWN0IGlkZW50aWZpZXIuICovCit0eXBlZGVmIFN0
cmluZyBSZW1vdGVPYmplY3RJZDsKK30gLy8gUnVudGltZQorCituYW1lc3BhY2UgUnVudGltZTIg
eworLyogVW5pcXVlIG9iamVjdCBpZGVudGlmaWVyLiAqLwordHlwZWRlZiBTdHJpbmcgUmVtb3Rl
T2JqZWN0SWQ7Cit9IC8vIFJ1bnRpbWUyCisvLyBFbmQgb2YgdHlwZWRlZnMuCisKK1N0cmluZyBn
ZXRUZXN0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBTdHJpbmcgZ2V0VGVzdEVudW1Db25zdGFudFZhbHVlKFQgZW51bVZhbHVlKQoreworICAgIHJl
dHVybiBnZXRUZXN0RW51bUNvbnN0YW50VmFsdWUoc3RhdGljX2Nhc3Q8aW50PihlbnVtVmFsdWUp
KTsKK30KKworCisKK30gLy8gbmFtZXNwYWNlIFR5cGVCdWlsZGVyCisKK30gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKworI2VuZGlmIC8vICFk
ZWZpbmVkKEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnNfaCkKKyMjIyBFbmQgRmlsZTogSW5zcGVj
dG9yVGVzdFR5cGVCdWlsZGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0VHlw
ZUJ1aWxkZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRv
bWFpbi5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBKYXZhU2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0
cy9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmgiCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9S
KQorCisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9y
IHsKKworbmFtZXNwYWNlIFR5cGVCdWlsZGVyIHsKKworc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0
IGVudW1fY29uc3RhbnRfdmFsdWVzW10gPSB7Cit9OworCitTdHJpbmcgZ2V0VGVzdEVudW1Db25z
dGFudFZhbHVlKGludCBjb2RlKSB7CisgICAgcmV0dXJuIGVudW1fY29uc3RhbnRfdmFsdWVzW2Nv
ZGVdOworfQorCisKKworfSAvLyBuYW1lc3BhY2UgVHlwZUJ1aWxkZXIKKworfSAvLyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorCisjIyMgRW5kIEZp
bGU6IEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJh
dGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24t
YWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uLXJlc3VsdApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jNGQyYTcyY2Nm
MTc1ZDY1M2ViODdhZGEzODhhZjIwZDdhMWM0NzU5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVj
bGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uLXJlc3VsdApAQCAtMCwwICsxLDM1
MSBAQAorIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kQ29tbWFuZHMuanMKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpz
b24KKy8vIGJ5IHRoZSBzY3JpcHQ6IEphdmFTY3JpcHRDb3JlL3JlcGxheS9zY3JpcHRzL0NvZGVH
ZW5lcmF0b3JJbnNwZWN0b3IucHkKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdEJhY2tlbmRD
b21tYW5kcy5qcworCisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRj
aGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRp
dmUtdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBKYXZhU2NyaXB0Q29yZS9yZXBsYXkvc2Ny
aXB0cy9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5CisKKyNpZm5kZWYgSW5zcGVjdG9yVGVzdEJh
Y2tlbmREaXNwYXRjaGVyc19oCisjZGVmaW5lIEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hl
cnNfaAorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUgIkluc3BlY3RvclRlc3RU
eXBlQnVpbGRlcnMuaCIKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordHlwZWRlZiBTdHJpbmcg
RXJyb3JTdHJpbmc7CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5B
QkxFKElOU1BFQ1RPUikKKworI2VuZGlmIC8vICFkZWZpbmVkKEluc3BlY3RvclRlc3RCYWNrZW5k
RGlzcGF0Y2hlcnNfaCkKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRj
aGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJz
LmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZl
LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogSmF2YVNjcmlwdENvcmUvcmVwbGF5L3Njcmlw
dHMvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaWYgRU5BQkxFKElO
U1BFQ1RPUikKKworI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwu
aD4KKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW5jbHVkZSA8d3Rm
L3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKK30gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKworIyMjIEVu
ZCBGaWxlOiBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4g
RmlsZTogSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSB0eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbgorLy8gYnkgdGhl
IHNjcmlwdDogSmF2YVNjcmlwdENvcmUvcmVwbGF5L3NjcmlwdHMvQ29kZUdlbmVyYXRvckluc3Bl
Y3Rvci5weQorCisjaWZuZGVmIEluc3BlY3RvclRlc3RGcm9udGVuZERpc3BhdGNoZXJzX2gKKyNk
ZWZpbmUgSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnNfaAorCisjaWYgRU5BQkxFKElO
U1BFQ1RPUikKKworI2luY2x1ZGUgIkluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuaCIKKyNpbmNs
dWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLmg+CisjaW5jbHVkZSA8aW5z
cGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3Igewor
CisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVD
VE9SKQorCisjZW5kaWYgLy8gIWRlZmluZWQoSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hl
cnNfaCkKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAor
CisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5q
c29uCisvLyBieSB0aGUgc2NyaXB0OiBKYXZhU2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0cy9Db2Rl
R2VuZXJhdG9ySW5zcGVjdG9yLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJ
bnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgorCisjaWYgRU5BQkxFKElOU1BFQ1RP
UikKKworI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3Rv
ciB7CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BF
Q1RPUikKKworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5j
cHAKKworIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuaAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbgor
Ly8gYnkgdGhlIHNjcmlwdDogSmF2YVNjcmlwdENvcmUvcmVwbGF5L3NjcmlwdHMvQ29kZUdlbmVy
YXRvckluc3BlY3Rvci5weQorCisjaWZuZGVmIEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnNfaAor
I2RlZmluZSBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzX2gKKworI2lmIEVOQUJMRShJTlNQRUNU
T1IpCisKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9ySlNUeXBlQnVpbGRlcnMuaD4KKyNp
bmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVHlwZUJ1aWxkZXIuaD4KKyNpbmNsdWRlIDx3dGYv
QXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisKK25hbWVzcGFjZSBJ
bnNwZWN0b3IgeworCisKKworbmFtZXNwYWNlIFR5cGVCdWlsZGVyIHsKKworCisKKy8vIFR5cGVk
ZWZzLgorbmFtZXNwYWNlIFJ1bnRpbWUgeworLyogVW5pcXVlIG9iamVjdCBpZGVudGlmaWVyLiAq
LwordHlwZWRlZiBpbnQgUmVtb3RlT2JqZWN0SWQ7Cit9IC8vIFJ1bnRpbWUKKy8vIEVuZCBvZiB0
eXBlZGVmcy4KKworU3RyaW5nIGdldFRlc3RFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSk7CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFQ+IFN0cmluZyBnZXRUZXN0RW51bUNvbnN0YW50VmFsdWUoVCBl
bnVtVmFsdWUpCit7CisgICAgcmV0dXJuIGdldFRlc3RFbnVtQ29uc3RhbnRWYWx1ZShzdGF0aWNf
Y2FzdDxpbnQ+KGVudW1WYWx1ZSkpOworfQorCisKKworfSAvLyBuYW1lc3BhY2UgVHlwZUJ1aWxk
ZXIKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVD
VE9SKQorCisjZW5kaWYgLy8gIWRlZmluZWQoSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVyc19oKQor
IyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmgKKworIyMjIEJlZ2luIEZp
bGU6IEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUt
ZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0
OiBKYXZhU2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JUZXN0VHlwZUJ1aWxk
ZXJzLmgiCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworbmFtZXNwYWNlIFR5cGVCdWlsZGVy
IHsKKworc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGVudW1fY29uc3RhbnRfdmFsdWVzW10gPSB7
Cit9OworCitTdHJpbmcgZ2V0VGVzdEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKSB7CisgICAg
cmV0dXJuIGVudW1fY29uc3RhbnRfdmFsdWVzW2NvZGVdOworfQorCisKKworfSAvLyBuYW1lc3Bh
Y2UgVHlwZUJ1aWxkZXIKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBF
TkFCTEUoSU5TUEVDVE9SKQorCisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RUeXBlQnVpbGRl
cnMuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24tZXJyb3Ig
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQv
dHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24tZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjAwYjQ2
MmMwOWEwNGEyZjQ2OTAwMmE5YzFhOGJjNzFjZDI4MGFmMAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBl
LWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbi1lcnJvcgpAQCAtMCwwICsxIEBACitFUlJPUjog
TG9va3VwIGZhaWxlZCBmb3IgdHlwZSByZWZlcmVuY2U6IGVudW0gKHJlZmVyZW5jZWQgZnJvbSBk
b21haW46IERlYnVnZ2VyKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5q
c29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbi1yZXN1bHQKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uMWZkNDVhZjNmYmYxYzZkYmNlN2ZjM2VhY2ZiNWNiMzE3OTBhZDM1NwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9l
eHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbi1yZXN1bHQKQEAgLTAsMCAr
MSwzNzQgQEAKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0QmFja2VuZENvbW1hbmRzLmpz
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uCisvLyBi
eSB0aGUgc2NyaXB0OiBKYXZhU2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0cy9Db2RlR2VuZXJhdG9y
SW5zcGVjdG9yLnB5CisKKy8vIERlYnVnZ2VyLgorSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckVu
dW0oIkRlYnVnZ2VyLlJlYXNvbiIsIHtEaWVkOiAiRGllZCIsIEZhaW50ZWQ6ICJGYWludGVkIiwg
SHVuZ3J5OiAiSHVuZ3J5In0pOworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0QmFja2VuZENv
bW1hbmRzLmpzCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNo
ZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24K
Ky8vIGJ5IHRoZSBzY3JpcHQ6IEphdmFTY3JpcHRDb3JlL3JlcGxheS9zY3JpcHRzL0NvZGVHZW5l
cmF0b3JJbnNwZWN0b3IucHkKKworI2lmbmRlZiBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNo
ZXJzX2gKKyNkZWZpbmUgSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVyc19oCisKKyNpZiBF
TkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSAiSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5o
IgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2lu
Y2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsK
KworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9S
KQorCisjZW5kaWYgLy8gIWRlZmluZWQoSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVyc19o
KQorIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMj
IEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uCisvLyBieSB0aGUgc2Ny
aXB0OiBKYXZhU2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySW5zcGVjdG9y
LnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JUZXN0QmFja2Vu
ZERpc3BhdGNoZXJzLmgiCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSA8aW5z
cGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oPgorI2luY2x1ZGUgPGluc3BlY3Rvci9J
bnNwZWN0b3JWYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVz
cGFjZSBJbnNwZWN0b3IgeworCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRp
ZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorCisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RCYWNr
ZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0RnJvbnRl
bmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYXJyYXkt
dHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBKYXZhU2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0
cy9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5CisKKyNpZm5kZWYgSW5zcGVjdG9yVGVzdEZyb250
ZW5kRGlzcGF0Y2hlcnNfaAorI2RlZmluZSBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVy
c19oCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSAiSW5zcGVjdG9yVGVzdFR5
cGVCdWlsZGVycy5oIgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwuaD4KKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW5jbHVkZSA8
d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFt
ZXNwYWNlIEluc3BlY3RvciB7CisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2Vu
ZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyNlbmRpZiAvLyAhZGVmaW5lZChJbnNwZWN0b3JU
ZXN0RnJvbnRlbmREaXNwYXRjaGVyc19oKQorIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0RnJv
bnRlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0RnJvbnRl
bmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hcnJh
eS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IEphdmFTY3JpcHRDb3JlL3JlcGxheS9zY3Jp
cHRzL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkluc3BlY3RvclRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCisKKyNpZiBFTkFCTEUo
SU5TUEVDVE9SKQorCisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFC
TEUoSU5TUEVDVE9SKQorCisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RGcm9udGVuZERpc3Bh
dGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5o
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uCisvLyBi
eSB0aGUgc2NyaXB0OiBKYXZhU2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0cy9Db2RlR2VuZXJhdG9y
SW5zcGVjdG9yLnB5CisKKyNpZm5kZWYgSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVyc19oCisjZGVm
aW5lIEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnNfaAorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikK
KworI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JKU1R5cGVCdWlsZGVycy5oPgorI2luY2x1
ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JUeXBlQnVpbGRlci5oPgorI2luY2x1ZGUgPHd0Zi9Bc3Nl
cnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKworbmFtZXNwYWNlIEluc3Bl
Y3RvciB7CisKKworCituYW1lc3BhY2UgVHlwZUJ1aWxkZXIgeworCisvLyBGb3J3YXJkIGRlY2xh
cmF0aW9ucy4KK25hbWVzcGFjZSBEZWJ1Z2dlciB7CitlbnVtIGNsYXNzIFJlYXNvbjsKK30gLy8g
RGVidWdnZXIKKy8vIEVuZCBvZiBmb3J3YXJkIGRlY2xhcmF0aW9ucy4KKworCisvLyBUeXBlZGVm
cy4KK25hbWVzcGFjZSBEZWJ1Z2dlciB7Cit0eXBlZGVmIGludCBCcmVha3BvaW50SWQ7Cit9IC8v
IERlYnVnZ2VyCisKK25hbWVzcGFjZSBSdW50aW1lIHsKK3R5cGVkZWYgaW50IE9iamVjdElkOwor
fSAvLyBSdW50aW1lCisvLyBFbmQgb2YgdHlwZWRlZnMuCisKK1N0cmluZyBnZXRUZXN0RW51bUNv
bnN0YW50VmFsdWUoaW50IGNvZGUpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBTdHJpbmcgZ2V0
VGVzdEVudW1Db25zdGFudFZhbHVlKFQgZW51bVZhbHVlKQoreworICAgIHJldHVybiBnZXRUZXN0
RW51bUNvbnN0YW50VmFsdWUoc3RhdGljX2Nhc3Q8aW50PihlbnVtVmFsdWUpKTsKK30KKworbmFt
ZXNwYWNlIERlYnVnZ2VyIHsKKy8qICAqLworZW51bSBjbGFzcyBSZWFzb24geworICAgIERpZWQg
PSAwLAorICAgIEZhaW50ZWQgPSAxLAorICAgIEh1bmdyeSA9IDIsCit9OyAvLyBlbnVtIGNsYXNz
IFJlYXNvbgorfSAvLyBEZWJ1Z2dlcgorCisKKworfSAvLyBuYW1lc3BhY2UgVHlwZUJ1aWxkZXIK
KworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9S
KQorCisjZW5kaWYgLy8gIWRlZmluZWQoSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVyc19oKQorIyMj
IEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6
IEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVj
bGFyYXRpb24tYXJyYXktdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBKYXZhU2NyaXB0Q29y
ZS9yZXBsYXkvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5CisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmgiCisKKyNpZiBF
TkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1l
c3BhY2UgSW5zcGVjdG9yIHsKKworbmFtZXNwYWNlIFR5cGVCdWlsZGVyIHsKKworc3RhdGljIGNv
bnN0IGNoYXIqIGNvbnN0IGVudW1fY29uc3RhbnRfdmFsdWVzW10gPSB7CisgICAgIkRpZWQiLAor
ICAgICJGYWludGVkIiwKKyAgICAiSHVuZ3J5IiwKK307CisKK1N0cmluZyBnZXRUZXN0RW51bUNv
bnN0YW50VmFsdWUoaW50IGNvZGUpIHsKKyAgICByZXR1cm4gZW51bV9jb25zdGFudF92YWx1ZXNb
Y29kZV07Cit9CisKKworCit9IC8vIG5hbWVzcGFjZSBUeXBlQnVpbGRlcgorCit9IC8vIG5hbWVz
cGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyMjIyBFbmQg
RmlsZTogSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xh
cmF0aW9uLWVudW0tdHlwZS5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5q
c29uLXJlc3VsdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45N2I3ZGM2NzNjYTk3NzM2NjJlZDE3YmMxNjZjOWFjMzJl
N2VhNjNlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24t
cmVzdWx0CkBAIC0wLDAgKzEsMzkxIEBACisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdEJh
Y2tlbmRDb21tYW5kcy5qcworLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVudW0t
dHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBKYXZhU2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0
cy9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5CisKKy8vIFJ1bnRpbWUuCitJbnNwZWN0b3JCYWNr
ZW5kLnJlZ2lzdGVyRW51bSgiUnVudGltZS5MdWNreU51bWJlcnMiLCB7Tm9uZTogIjAiLCBOb25l
OiAiMSIsIE5vbmU6ICIyIn0pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckVudW0oIlJ1bnRp
bWUuRmFybUFuaW1hbHMiLCB7UGlnczogIlBpZ3MiLCBDb3dzOiAiQ293cyIsIENhdHM6ICJDYXRz
IiwgSGVuczogIkhlbnMifSk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRW51bSgiUnVudGlt
ZS5Ud29MZWdnZWRBbmltYWxzIiwge0R1Y2tzOiAiRHVja3MiLCBIZW5zOiAiSGVucyIsIENyb3dz
OiAiQ3Jvd3MiLCBGbGFtaW5nb3M6ICJGbGFtaW5nb3MifSk7CisjIyMgRW5kIEZpbGU6IEluc3Bl
Y3RvclRlc3RCYWNrZW5kQ29tbWFuZHMuanMKKworIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRl
c3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9u
LWVudW0tdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBKYXZhU2NyaXB0Q29yZS9yZXBsYXkv
c2NyaXB0cy9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5CisKKyNpZm5kZWYgSW5zcGVjdG9yVGVz
dEJhY2tlbmREaXNwYXRjaGVyc19oCisjZGVmaW5lIEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0
Y2hlcnNfaAorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUgIkluc3BlY3RvclRl
c3RUeXBlQnVpbGRlcnMuaCIKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordHlwZWRlZiBTdHJp
bmcgRXJyb3JTdHJpbmc7CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8g
RU5BQkxFKElOU1BFQ1RPUikKKworI2VuZGlmIC8vICFkZWZpbmVkKEluc3BlY3RvclRlc3RCYWNr
ZW5kRGlzcGF0Y2hlcnNfaCkKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNw
YXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNo
ZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29u
CisvLyBieSB0aGUgc2NyaXB0OiBKYXZhU2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0cy9Db2RlR2Vu
ZXJhdG9ySW5zcGVjdG9yLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnNw
ZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQor
CisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oPgorI2luY2x1
ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3Ry
aW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorCisjIyMgRW5kIEZpbGU6IElu
c3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNw
ZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVj
bGFyYXRpb24tZW51bS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IEphdmFTY3JpcHRDb3Jl
L3JlcGxheS9zY3JpcHRzL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKKworI2lmbmRlZiBJbnNw
ZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVyc19oCisjZGVmaW5lIEluc3BlY3RvclRlc3RGcm9u
dGVuZERpc3BhdGNoZXJzX2gKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRlICJJ
bnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmgiCisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbC5oPgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMu
aD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKK30gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKworI2VuZGlmIC8vICFkZWZp
bmVkKEluc3BlY3RvclRlc3RGcm9udGVuZERpc3BhdGNoZXJzX2gpCisjIyMgRW5kIEZpbGU6IElu
c3BlY3RvclRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IEluc3Bl
Y3RvclRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRl
Y2xhcmF0aW9uLWVudW0tdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBKYXZhU2NyaXB0Q29y
ZS9yZXBsYXkvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5CisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgor
CisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
KworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisj
ZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0
RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RU
eXBlQnVpbGRlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlw
ZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBKYXZhU2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0cy9D
b2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5CisKKyNpZm5kZWYgSW5zcGVjdG9yVGVzdFR5cGVCdWls
ZGVyc19oCisjZGVmaW5lIEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnNfaAorCisjaWYgRU5BQkxF
KElOU1BFQ1RPUikKKworI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JKU1R5cGVCdWlsZGVy
cy5oPgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JUeXBlQnVpbGRlci5oPgorI2luY2x1
ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKworbmFt
ZXNwYWNlIEluc3BlY3RvciB7CisKKworCituYW1lc3BhY2UgVHlwZUJ1aWxkZXIgeworCisvLyBG
b3J3YXJkIGRlY2xhcmF0aW9ucy4KK25hbWVzcGFjZSBSdW50aW1lIHsKK2VudW0gY2xhc3MgRmFy
bUFuaW1hbHM7CitlbnVtIGNsYXNzIEx1Y2t5TnVtYmVyczsKK2VudW0gY2xhc3MgVHdvTGVnZ2Vk
QW5pbWFsczsKK30gLy8gUnVudGltZQorLy8gRW5kIG9mIGZvcndhcmQgZGVjbGFyYXRpb25zLgor
CisKKworCitTdHJpbmcgZ2V0VGVzdEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKTsKKwordGVt
cGxhdGU8dHlwZW5hbWUgVD4gU3RyaW5nIGdldFRlc3RFbnVtQ29uc3RhbnRWYWx1ZShUIGVudW1W
YWx1ZSkKK3sKKyAgICByZXR1cm4gZ2V0VGVzdEVudW1Db25zdGFudFZhbHVlKHN0YXRpY19jYXN0
PGludD4oZW51bVZhbHVlKSk7Cit9CisKK25hbWVzcGFjZSBSdW50aW1lIHsKKy8qICAqLworZW51
bSBjbGFzcyBMdWNreU51bWJlcnMgeworICAgIE5vbmUgPSAwLAorICAgIE5vbmUgPSAxLAorICAg
IE5vbmUgPSAyLAorfTsgLy8gZW51bSBjbGFzcyBMdWNreU51bWJlcnMKKy8qICAqLworZW51bSBj
bGFzcyBGYXJtQW5pbWFscyB7CisgICAgUGlncyA9IDMsCisgICAgQ293cyA9IDQsCisgICAgQ2F0
cyA9IDUsCisgICAgSGVucyA9IDYsCit9OyAvLyBlbnVtIGNsYXNzIEZhcm1BbmltYWxzCisvKiAg
Ki8KK2VudW0gY2xhc3MgVHdvTGVnZ2VkQW5pbWFscyB7CisgICAgRHVja3MgPSA3LAorICAgIEhl
bnMgPSA2LAorICAgIENyb3dzID0gOCwKKyAgICBGbGFtaW5nb3MgPSA5LAorfTsgLy8gZW51bSBj
bGFzcyBUd29MZWdnZWRBbmltYWxzCit9IC8vIFJ1bnRpbWUKKworCisKK30gLy8gbmFtZXNwYWNl
IFR5cGVCdWlsZGVyCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5B
QkxFKElOU1BFQ1RPUikKKworI2VuZGlmIC8vICFkZWZpbmVkKEluc3BlY3RvclRlc3RUeXBlQnVp
bGRlcnNfaCkKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5oCisKKyMj
IyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmNwcAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
Ky8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBK
YXZhU2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5CisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJz
LmgiCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworbmFtZXNwYWNlIFR5cGVCdWlsZGVyIHsK
Kworc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGVudW1fY29uc3RhbnRfdmFsdWVzW10gPSB7Cisg
ICAgIjAiLAorICAgICIxIiwKKyAgICAiMiIsCisgICAgIlBpZ3MiLAorICAgICJDb3dzIiwKKyAg
ICAiQ2F0cyIsCisgICAgIkhlbnMiLAorICAgICJEdWNrcyIsCisgICAgIkNyb3dzIiwKKyAgICAi
RmxhbWluZ29zIiwKK307CisKK1N0cmluZyBnZXRUZXN0RW51bUNvbnN0YW50VmFsdWUoaW50IGNv
ZGUpIHsKKyAgICByZXR1cm4gZW51bV9jb25zdGFudF92YWx1ZXNbY29kZV07Cit9CisKKworCit9
IC8vIG5hbWVzcGFjZSBUeXBlQnVpbGRlcgorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKwor
I2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVz
dFR5cGVCdWlsZGVycy5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBl
Lmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbi1yZXN1bHQKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uZDI1NTU2ZGQ4ZDFlNjg5YWFmZjBjNTc4ZjAzMzU3YzI1ZDhhMTdjOQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24tcmVzdWx0CkBAIC0w
LDAgKzEsODg2IEBACisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdEJhY2tlbmRDb21tYW5k
cy5qcworLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24K
Ky8vIGJ5IHRoZSBzY3JpcHQ6IEphdmFTY3JpcHRDb3JlL3JlcGxheS9zY3JpcHRzL0NvZGVHZW5l
cmF0b3JJbnNwZWN0b3IucHkKKworLy8gVGVzdC4KK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJD
b21tYW5kKCJUZXN0LmF0dGVtcHRDdXJzZSIsIFt7Im5hbWUiOiAiY3Vyc2UiLCAidHlwZSI6ICJv
YmplY3QiLCAib3B0aW9uYWwiOiBmYWxzZX1dLCBbImNlbnNvcmVkQ3Vyc2UiXSk7CisjIyMgRW5k
IEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kQ29tbWFuZHMuanMKKworIyMjIEJlZ2luIEZpbGU6
IEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBl
LWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IEphdmFTY3Jp
cHRDb3JlL3JlcGxheS9zY3JpcHRzL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKKworI2lmbmRl
ZiBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzX2gKKyNkZWZpbmUgSW5zcGVjdG9yVGVz
dEJhY2tlbmREaXNwYXRjaGVyc19oCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVk
ZSAiSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5oIgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3Igewor
Cit0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKworY2xhc3MgSW5zcGVjdG9yVGVzdEJhY2tl
bmREaXNwYXRjaGVySGFuZGxlciB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIGF0dGVtcHRD
dXJzZShFcnJvclN0cmluZyosIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVj
dD4mIGluX2N1cnNlLCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8U3RyaW5nPiog
b3B0X291dF9jZW5zb3JlZEN1cnNlKSA9IDA7Citwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB+SW5z
cGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpOworfTsKKworY2xhc3MgSW5zcGVj
dG9yVGVzdEJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVj
dG9yU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEluc3BlY3Rv
cjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqLCBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3Bh
dGNoZXJIYW5kbGVyKik7CisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoKGxvbmcgY2FsbElkLCBj
b25zdCBTdHJpbmcmIG1ldGhvZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVj
dD4gbWVzc2FnZSkgb3ZlcnJpZGU7Citwcml2YXRlOgorICAgIHZvaWQgYXR0ZW1wdEN1cnNlKGxv
bmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7Citw
cml2YXRlOgorICAgIEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcihJbnNwZWN0b3I6Oklu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiwgSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVy
SGFuZGxlciopOworICAgIEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIG1f
YWdlbnQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJM
RShJTlNQRUNUT1IpCisKKyNlbmRpZiAvLyAhZGVmaW5lZChJbnNwZWN0b3JUZXN0QmFja2VuZERp
c3BhdGNoZXJzX2gpCisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hl
cnMuaAorCisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVycy5j
cHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCisv
LyBieSB0aGUgc2NyaXB0OiBKYXZhU2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0cy9Db2RlR2VuZXJh
dG9ySW5zcGVjdG9yLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnNwZWN0
b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisj
aW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oPgorI2luY2x1ZGUg
PGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5n
Lmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitJbnNwZWN0b3JUZXN0QmFja2VuZERpc3Bh
dGNoZXJIYW5kbGVyOjp+SW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpIHsg
fQorCitQYXNzUmVmUHRyPEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcj4gSW5zcGVjdG9y
VGVzdEJhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUoSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIq
IGJhY2tlbmREaXNwYXRjaGVyLCBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJIYW5kbGVy
KiBhZ2VudCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEluc3BlY3RvclRlc3RCYWNrZW5k
RGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlciwgYWdlbnQpKTsKK30KKworSW5zcGVjdG9yVGVz
dEJhY2tlbmREaXNwYXRjaGVyOjpJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXIoSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyLCBJbnNwZWN0b3JUZXN0QmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKKyAgICA6IEluc3BlY3RvclN1cHBsZW1lbnRh
bEJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyKQorICAgICwgbV9hZ2VudChhZ2Vu
dCkKK3sKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21h
aW4oQVNDSUlMaXRlcmFsKCJUZXN0IiksIHRoaXMpOworfQorCit2b2lkIEluc3BlY3RvclRlc3RC
YWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgbWV0
aG9kLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbWVzc2FnZSkKK3sKKyAgICBSZWY8SW5z
cGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKKworICAgIGlmICht
ZXRob2QgPT0gImF0dGVtcHRDdXJzZSIpCisgICAgICAgIGF0dGVtcHRDdXJzZShjYWxsSWQsICpt
ZXNzYWdlLmdldCgpKTsKKyAgICBlbHNlCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJl
cG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6Ok1l
dGhvZE5vdEZvdW5kLCBTdHJpbmcoIiciKSArICJUZXN0IiArICcuJyArIG1ldGhvZCArICInIHdh
cyBub3QgZm91bmQiKTsKK30KKwordm9pZCBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXI6
OmF0dGVtcHRDdXJzZShsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdl
KQoreworICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0
b3JBcnJheTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29u
dGFpbmVyID0gbWVzc2FnZS5nZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJwYXJhbXMiKSk7CisgICAg
SW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0
KCk7CisgICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJv
cnMuZ2V0KCk7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBpbl9jdXJz
ZSA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRPYmplY3QocGFyYW1zQ29udGFpbmVy
UHRyLCBBU0NJSUxpdGVyYWwoImN1cnNlIiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzUHRyKTsK
KyAgICBpZiAocHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CisgICAgICAgIFN0cmluZyBlcnJv
ck1lc3NhZ2UgPSBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycg
Y2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIlRlc3QuYXR0ZW1wdEN1cnNlIik7CisgICAgICAgIG1fYmFj
a2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXI6OkludmFsaWRQYXJhbXMsIGVycm9yTWVzc2FnZSwgcHJvdG9jb2xFcnJv
cnMucmVsZWFzZSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEVycm9yU3RyaW5n
IGVycm9yOworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCk7CisgICAgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6T3B0T3V0cHV0PFN0
cmluZz4gb3V0X2NlbnNvcmVkQ3Vyc2U7CisgICAgbV9hZ2VudC0+YXR0ZW1wdEN1cnNlKCZlcnJv
ciwgaW5fY3Vyc2UsICZvdXRfY2Vuc29yZWRDdXJzZSk7CisKKyAgICBpZiAoIWVycm9yLmxlbmd0
aCgpKQorICAgICAgICBpZiAob3V0X2NlbnNvcmVkQ3Vyc2UuaXNBc3NpZ25lZCgpKQorICAgICAg
ICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJjZW5zb3JlZEN1cnNlIiksIG91
dF9jZW5zb3JlZEN1cnNlLmdldFZhbHVlKCkpOworCisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+
c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgZXJyb3IpOworfQorCit9IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyMj
IyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJl
Z2luIEZpbGU6IEluc3BlY3RvclRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0
OiBKYXZhU2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5
CisKKyNpZm5kZWYgSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnNfaAorI2RlZmluZSBJ
bnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVyc19oCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9S
KQorCisjaW5jbHVkZSAiSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5oIgorI2luY2x1ZGUgPGlu
c3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4KKyNpbmNsdWRlIDxpbnNwZWN0b3Iv
SW5zcGVjdG9yVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCit9
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisK
KyNlbmRpZiAvLyAhZGVmaW5lZChJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVyc19oKQor
IyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisKKyMjIyBC
ZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCisvLyBieSB0aGUgc2Ny
aXB0OiBKYXZhU2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySW5zcGVjdG9y
LnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JUZXN0RnJvbnRl
bmREaXNwYXRjaGVycy5oIgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUgPHd0
Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK30gLy8gbmFtZXNw
YWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKworIyMjIEVuZCBG
aWxlOiBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZp
bGU6IEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRl
Y2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IEphdmFTY3JpcHRD
b3JlL3JlcGxheS9zY3JpcHRzL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKKworI2lmbmRlZiBJ
bnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzX2gKKyNkZWZpbmUgSW5zcGVjdG9yVGVzdFR5cGVCdWls
ZGVyc19oCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSA8aW5zcGVjdG9yL0lu
c3BlY3RvckpTVHlwZUJ1aWxkZXJzLmg+CisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclR5
cGVCdWlsZGVyLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYv
UGFzc1JlZlB0ci5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKK25hbWVzcGFjZSBU
eXBlQnVpbGRlciB7CisKKy8vIEZvcndhcmQgZGVjbGFyYXRpb25zLgorI2lmIEVOQUJMRShTUUxf
REFUQUJBU0UpCituYW1lc3BhY2UgRGF0YWJhc2UgeworY2xhc3MgRHVtbXlPYmplY3Q7CitjbGFz
cyBFcnJvcjsKK2NsYXNzIE9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHM7CitjbGFzcyBP
cHRpb25hbFBhcmFtZXRlckJ1bmRsZTsKK2NsYXNzIFBhcmFtZXRlckJ1bmRsZTsKK30gLy8gRGF0
YWJhc2UKKyNlbmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQorCituYW1lc3BhY2UgVGVzdCB7
CitjbGFzcyBIYXBweU5hbWU7CitjbGFzcyBQYXJhbWV0ZXJCdW5kbGU7Cit9IC8vIFRlc3QKKy8v
IEVuZCBvZiBmb3J3YXJkIGRlY2xhcmF0aW9ucy4KKworCisKKworU3RyaW5nIGdldFRlc3RFbnVt
Q29uc3RhbnRWYWx1ZShpbnQgY29kZSk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IFN0cmluZyBn
ZXRUZXN0RW51bUNvbnN0YW50VmFsdWUoVCBlbnVtVmFsdWUpCit7CisgICAgcmV0dXJuIGdldFRl
c3RFbnVtQ29uc3RhbnRWYWx1ZShzdGF0aWNfY2FzdDxpbnQ+KGVudW1WYWx1ZSkpOworfQorCisj
aWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKK25hbWVzcGFjZSBEYXRhYmFzZSB7CisvKiBEYXRhYmFz
ZSBlcnJvci4gKi8KK2NsYXNzIEVycm9yIDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yT2Jq
ZWN0QmFzZSB7CitwdWJsaWM6CisgICAgZW51bSB7CisgICAgICAgIE5vRmllbGRzU2V0ID0gMCwK
KyAgICAgICAgTWVzc2FnZVNldCA9IDEgPDwgMCwKKyAgICAgICAgQ29kZVNldCA9IDEgPDwgMSwK
KyAgICAgICAgQWxsRmllbGRzU2V0ID0gKE1lc3NhZ2VTZXQgfCBDb2RlU2V0KQorICAgIH07CisK
KyAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CisgICAgY2xhc3MgQnVpbGRlciB7CisgICAgcHJpdmF0
ZToKKyAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsK
KworICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0
U3RhdGUoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8
QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CisgICAgICAgIH0KKworICAgICAgICBCdWls
ZGVyKFBhc3NSZWZQdHI8LypFcnJvciovSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IHB0cikK
KyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNT
ZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CisgICAgICAgICAgICBtX3Jl
c3VsdCA9IHB0cjsKKyAgICAgICAgfQorICAgICAgICBmcmllbmQgY2xhc3MgRXJyb3I7CisgICAg
cHVibGljOgorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBNZXNzYWdlU2V0PiYgc2V0TWVzc2Fn
ZShjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FT
U0VSVCghKFNUQVRFICYgTWVzc2FnZVNldCksIHByb3BlcnR5X21lc3NhZ2VfYWxyZWFkeV9zZXQp
OworICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoIm1lc3NhZ2Ui
KSwgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxNZXNzYWdlU2V0PigpOwor
ICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IENvZGVTZXQ+JiBzZXRDb2RlKGlu
dCB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAm
IENvZGVTZXQpLCBwcm9wZXJ0eV9jb2RlX2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVz
dWx0LT5zZXROdW1iZXIoQVNDSUlMaXRlcmFsKCJjb2RlIiksIHZhbHVlKTsKKyAgICAgICAgICAg
IHJldHVybiBjYXN0U3RhdGU8Q29kZVNldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIG9wZXJh
dG9yIFJlZlB0cjxFcnJvcj4mICgpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CisgICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoRXJyb3IpID09IHNpemVvZihJbnNwZWN0b3I6Oklu
c3BlY3Rvck9iamVjdCksIGNhbm5vdF9jYXN0KTsKKyAgICAgICAgICAgIHJldHVybiAqcmVpbnRl
cnByZXRfY2FzdDxSZWZQdHI8RXJyb3I+Kj4oJm1fcmVzdWx0KTsKKyAgICAgICAgfQorCisgICAg
ICAgIFBhc3NSZWZQdHI8RXJyb3I+IHJlbGVhc2UoKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gUmVmUHRyPEVycm9yPigqdGhpcykucmVsZWFzZSgpOworICAgICAgICB9CisgICAgfTsK
KworICAgIC8qCisgICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgorICAgICAqIFJlZlB0cjxF
cnJvcj4gcmVzdWx0ID0gRXJyb3I6OmNyZWF0ZSgpCisgICAgICogICAgIC5zZXRNZXNzYWdlKC4u
LikKKyAgICAgKiAgICAgLnNldENvZGUoLi4uKTsKKyAgICAgKi8KKyAgICBzdGF0aWMgQnVpbGRl
cjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBCdWlsZGVyPE5v
RmllbGRzU2V0PihJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkpOworICAgIH0K
KyAgICB0eXBlZGVmIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlN0cnVjdEl0ZW1UcmFpdHMgSXRl
bVRyYWl0czsKK307CisKK2NsYXNzIE9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlIDogcHVibGljIElu
c3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0QmFzZSB7CitwdWJsaWM6CisgICAgZW51bSB7CisgICAg
ICAgIE5vRmllbGRzU2V0ID0gMCwKKyAgICAgICAgQWxsRmllbGRzU2V0ID0gMAorICAgIH07CisK
KyAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CisgICAgY2xhc3MgQnVpbGRlciB7CisgICAgcHJpdmF0
ZToKKyAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsK
KworICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0
U3RhdGUoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8
QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CisgICAgICAgIH0KKworICAgICAgICBCdWls
ZGVyKFBhc3NSZWZQdHI8LypPcHRpb25hbFBhcmFtZXRlckJ1bmRsZSovSW5zcGVjdG9yOjpJbnNw
ZWN0b3JPYmplY3Q+IHB0cikKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
U1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7
CisgICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKKyAgICAgICAgfQorICAgICAgICBmcmllbmQg
Y2xhc3MgT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU7CisgICAgcHVibGljOgorCisgICAgICAgIG9w
ZXJhdG9yIFJlZlB0cjxPcHRpb25hbFBhcmFtZXRlckJ1bmRsZT4mICgpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lz
X25vdF9yZWFkeSk7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoT3B0aW9uYWxQ
YXJhbWV0ZXJCdW5kbGUpID09IHNpemVvZihJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCksIGNh
bm5vdF9jYXN0KTsKKyAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8
T3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU+Kj4oJm1fcmVzdWx0KTsKKyAgICAgICAgfQorCisgICAg
ICAgIFBhc3NSZWZQdHI8T3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU+IHJlbGVhc2UoKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gUmVmUHRyPE9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlPigq
dGhpcykucmVsZWFzZSgpOworICAgICAgICB9CisgICAgfTsKKworICAgIC8qCisgICAgICogU3lu
dGhldGljIGNvbnN0cnVjdG9yOgorICAgICAqIFJlZlB0cjxPcHRpb25hbFBhcmFtZXRlckJ1bmRs
ZT4gcmVzdWx0ID0gT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU6OmNyZWF0ZSgpOworICAgICAqLwor
ICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0Ojpj
cmVhdGUoKSk7CisgICAgfQorICAgIHR5cGVkZWYgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6U3Ry
dWN0SXRlbVRyYWl0cyBJdGVtVHJhaXRzOworCisgICAgdm9pZCBzZXRDb2x1bW5OYW1lcyhQYXNz
UmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5PFN0cmluZz4+IHZhbHVlKQorICAg
IHsKKyAgICAgICAgdGhpcy0+c2V0VmFsdWUoQVNDSUlMaXRlcmFsKCJjb2x1bW5OYW1lcyIpLCB2
YWx1ZSk7CisgICAgfQorCisgICAgdm9pZCBzZXROb3Rlcyhjb25zdCBTdHJpbmcmIHZhbHVlKQor
ICAgIHsKKyAgICAgICAgdGhpcy0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgibm90ZXMiKSwgdmFs
dWUpOworICAgIH0KKworICAgIHZvaWQgc2V0VGltZXN0YW1wKGRvdWJsZSB2YWx1ZSkKKyAgICB7
CisgICAgICAgIHRoaXMtPnNldE51bWJlcihBU0NJSUxpdGVyYWwoInRpbWVzdGFtcCIpLCB2YWx1
ZSk7CisgICAgfQorCisgICAgdm9pZCBzZXRWYWx1ZXMoUGFzc1JlZlB0cjxJbnNwZWN0b3I6Oklu
c3BlY3Rvck9iamVjdD4gdmFsdWUpCisgICAgeworICAgICAgICB0aGlzLT5zZXRPYmplY3QoQVND
SUlMaXRlcmFsKCJ2YWx1ZXMiKSwgdmFsdWUpOworICAgIH0KKworICAgIHZvaWQgc2V0UGF5bG9h
ZChQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+IHZhbHVlKQorICAgIHsKKyAg
ICAgICAgdGhpcy0+c2V0VmFsdWUoQVNDSUlMaXRlcmFsKCJwYXlsb2FkIiksIHZhbHVlKTsKKyAg
ICB9CisKKyAgICB2b2lkIHNldEVycm9yKFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRl
cjo6RGF0YWJhc2U6OkVycm9yPiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHRoaXMtPnNldFZhbHVl
KEFTQ0lJTGl0ZXJhbCgiZXJyb3IiKSwgdmFsdWUpOworICAgIH0KK307CisKK2NsYXNzIFBhcmFt
ZXRlckJ1bmRsZSA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdEJhc2UgeworcHVi
bGljOgorICAgIGVudW0geworICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCisgICAgICAgIENvbHVt
bk5hbWVzU2V0ID0gMSA8PCAwLAorICAgICAgICBOb3Rlc1NldCA9IDEgPDwgMSwKKyAgICAgICAg
VGltZXN0YW1wU2V0ID0gMSA8PCAyLAorICAgICAgICBWYWx1ZXNTZXQgPSAxIDw8IDMsCisgICAg
ICAgIFBheWxvYWRTZXQgPSAxIDw8IDQsCisgICAgICAgIEVycm9yU2V0ID0gMSA8PCA1LAorICAg
ICAgICBBbGxGaWVsZHNTZXQgPSAoQ29sdW1uTmFtZXNTZXQgfCBOb3Rlc1NldCB8IFRpbWVzdGFt
cFNldCB8IFZhbHVlc1NldCB8IFBheWxvYWRTZXQgfCBFcnJvclNldCkKKyAgICB9OworCisgICAg
dGVtcGxhdGU8aW50IFNUQVRFPgorICAgIGNsYXNzIEJ1aWxkZXIgeworICAgIHByaXZhdGU6Cisg
ICAgICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CisKKyAg
ICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRl
KCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxk
ZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcihQ
YXNzUmVmUHRyPC8qUGFyYW1ldGVyQnVuZGxlKi9JbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4g
cHRyKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0Zp
ZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKKyAgICAgICAgICAg
IG1fcmVzdWx0ID0gcHRyOworICAgICAgICB9CisgICAgICAgIGZyaWVuZCBjbGFzcyBQYXJhbWV0
ZXJCdW5kbGU7CisgICAgcHVibGljOgorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDb2x1bW5O
YW1lc1NldD4mIHNldENvbHVtbk5hbWVzKFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRl
cjo6QXJyYXk8U3RyaW5nPj4gdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKCEoU1RBVEUgJiBDb2x1bW5OYW1lc1NldCksIHByb3BlcnR5X2NvbHVtbk5hbWVzX2Fs
cmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRWYWx1ZShBU0NJSUxpdGVyYWwo
ImNvbHVtbk5hbWVzIiksIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q29s
dW1uTmFtZXNTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTm90
ZXNTZXQ+JiBzZXROb3Rlcyhjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgICAgICB7CisgICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTm90ZXNTZXQpLCBwcm9wZXJ0eV9ub3Rlc19h
bHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJh
bCgibm90ZXMiKSwgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxOb3Rlc1Nl
dD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBUaW1lc3RhbXBTZXQ+
JiBzZXRUaW1lc3RhbXAoZG91YmxlIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVCghKFNUQVRFICYgVGltZXN0YW1wU2V0KSwgcHJvcGVydHlfdGltZXN0YW1wX2Fs
cmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoQVNDSUlMaXRlcmFs
KCJ0aW1lc3RhbXAiKSwgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxUaW1l
c3RhbXBTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVmFsdWVz
U2V0PiYgc2V0VmFsdWVzKFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IHZh
bHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVmFs
dWVzU2V0KSwgcHJvcGVydHlfdmFsdWVzX2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVz
dWx0LT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJ2YWx1ZXMiKSwgdmFsdWUpOworICAgICAgICAg
ICAgcmV0dXJuIGNhc3RTdGF0ZTxWYWx1ZXNTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBC
dWlsZGVyPFNUQVRFIHwgUGF5bG9hZFNldD4mIHNldFBheWxvYWQoUGFzc1JlZlB0cjxJbnNwZWN0
b3I6Okluc3BlY3RvclZhbHVlPiB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoIShTVEFURSAmIFBheWxvYWRTZXQpLCBwcm9wZXJ0eV9wYXlsb2FkX2FscmVhZHlf
c2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRWYWx1ZShBU0NJSUxpdGVyYWwoInBheWxv
YWQiKSwgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxQYXlsb2FkU2V0Pigp
OworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IEVycm9yU2V0PiYgc2V0RXJy
b3IoUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpEYXRhYmFzZTo6RXJyb3I+IHZh
bHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgRXJy
b3JTZXQpLCBwcm9wZXJ0eV9lcnJvcl9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3Vs
dC0+c2V0VmFsdWUoQVNDSUlMaXRlcmFsKCJlcnJvciIpLCB2YWx1ZSk7CisgICAgICAgICAgICBy
ZXR1cm4gY2FzdFN0YXRlPEVycm9yU2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgb3BlcmF0
b3IgUmVmUHRyPFBhcmFtZXRlckJ1bmRsZT4mICgpCisgICAgICAgIHsKKyAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7
CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoUGFyYW1ldGVyQnVuZGxlKSA9PSBz
aXplb2YoSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QpLCBjYW5ub3RfY2FzdCk7CisgICAgICAg
ICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPFBhcmFtZXRlckJ1bmRsZT4qPigm
bV9yZXN1bHQpOworICAgICAgICB9CisKKyAgICAgICAgUGFzc1JlZlB0cjxQYXJhbWV0ZXJCdW5k
bGU+IHJlbGVhc2UoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gUmVmUHRyPFBhcmFt
ZXRlckJ1bmRsZT4oKnRoaXMpLnJlbGVhc2UoKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICAv
KgorICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKKyAgICAgKiBSZWZQdHI8UGFyYW1ldGVy
QnVuZGxlPiByZXN1bHQgPSBQYXJhbWV0ZXJCdW5kbGU6OmNyZWF0ZSgpCisgICAgICogICAgIC5z
ZXRDb2x1bW5OYW1lcyguLi4pCisgICAgICogICAgIC5zZXROb3RlcyguLi4pCisgICAgICogICAg
IC5zZXRUaW1lc3RhbXAoLi4uKQorICAgICAqICAgICAuc2V0VmFsdWVzKC4uLikKKyAgICAgKiAg
ICAgLnNldFBheWxvYWQoLi4uKQorICAgICAqICAgICAuc2V0RXJyb3IoLi4uKTsKKyAgICAgKi8K
KyAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKKyAgICB7CisgICAgICAg
IHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdDo6
Y3JlYXRlKCkpOworICAgIH0KKyAgICB0eXBlZGVmIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlN0
cnVjdEl0ZW1UcmFpdHMgSXRlbVRyYWl0czsKK307CisKKy8qIENvbmZsaWN0ZWQgbmFtZXMgbWF5
IGNhdXNlIGdlbmVyYXRlZCBnZXR0ZXJzL3NldHRlcnMgdG8gY2xhc2ggd2l0aCBidWlsdC1pbiBJ
bnNwZWN0b3JPYmplY3QgbWV0aG9kcy4gKi8KK2NsYXNzIE9iamVjdFdpdGhQcm9wZXJ0eU5hbWVD
b25mbGljdHMgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3RCYXNlIHsKK3B1Ymxp
YzoKKyAgICBlbnVtIHsKKyAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAorICAgICAgICBJbnRlZ2Vy
U2V0ID0gMSA8PCAwLAorICAgICAgICBBcnJheVNldCA9IDEgPDwgMSwKKyAgICAgICAgU3RyaW5n
U2V0ID0gMSA8PCAyLAorICAgICAgICBWYWx1ZVNldCA9IDEgPDwgMywKKyAgICAgICAgT2JqZWN0
U2V0ID0gMSA8PCA0LAorICAgICAgICBBbGxGaWVsZHNTZXQgPSAoSW50ZWdlclNldCB8IEFycmF5
U2V0IHwgU3RyaW5nU2V0IHwgVmFsdWVTZXQgfCBPYmplY3RTZXQpCisgICAgfTsKKworICAgIHRl
bXBsYXRlPGludCBTVEFURT4KKyAgICBjbGFzcyBCdWlsZGVyIHsKKyAgICBwcml2YXRlOgorICAg
ICAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OworCisgICAg
ICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVy
PFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXIoUGFz
c1JlZlB0cjwvKk9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHMqL0luc3BlY3Rvcjo6SW5z
cGVjdG9yT2JqZWN0PiBwdHIpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUp
OworICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CisgICAgICAgIH0KKyAgICAgICAgZnJpZW5k
IGNsYXNzIE9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHM7CisgICAgcHVibGljOgorCisg
ICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBJbnRlZ2VyU2V0PiYgc2V0SW50ZWdlcihjb25zdCBTdHJp
bmcmIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRF
ICYgSW50ZWdlclNldCksIHByb3BlcnR5X2ludGVnZXJfYWxyZWFkeV9zZXQpOworICAgICAgICAg
ICAgbV9yZXN1bHQtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoImludGVnZXIiKSwgdmFsdWUpOwor
ICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxJbnRlZ2VyU2V0PigpOworICAgICAgICB9CisK
KyAgICAgICAgQnVpbGRlcjxTVEFURSB8IEFycmF5U2V0PiYgc2V0QXJyYXkoY29uc3QgU3RyaW5n
JiB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAm
IEFycmF5U2V0KSwgcHJvcGVydHlfYXJyYXlfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9y
ZXN1bHQtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoImFycmF5IiksIHZhbHVlKTsKKyAgICAgICAg
ICAgIHJldHVybiBjYXN0U3RhdGU8QXJyYXlTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBC
dWlsZGVyPFNUQVRFIHwgU3RyaW5nU2V0PiYgc2V0U3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUp
CisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTdHJpbmdT
ZXQpLCBwcm9wZXJ0eV9zdHJpbmdfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQt
PnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInN0cmluZyIpLCB2YWx1ZSk7CisgICAgICAgICAgICBy
ZXR1cm4gY2FzdFN0YXRlPFN0cmluZ1NldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxk
ZXI8U1RBVEUgfCBWYWx1ZVNldD4mIHNldFZhbHVlKGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBWYWx1ZVNldCksIHBy
b3BlcnR5X3ZhbHVlX2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJp
bmcoQVNDSUlMaXRlcmFsKCJ2YWx1ZSIpLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2Fz
dFN0YXRlPFZhbHVlU2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8
IE9iamVjdFNldD4mIHNldE9iamVjdChjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgICAgICB7Cisg
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgT2JqZWN0U2V0KSwgcHJvcGVydHlf
b2JqZWN0X2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoQVND
SUlMaXRlcmFsKCJvYmplY3QiKSwgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0
ZTxPYmplY3RTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBvcGVyYXRvciBSZWZQdHI8T2Jq
ZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0cz4mICgpCisgICAgICAgIHsKKyAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFk
eSk7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoT2JqZWN0V2l0aFByb3BlcnR5
TmFtZUNvbmZsaWN0cykgPT0gc2l6ZW9mKEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0KSwgY2Fu
bm90X2Nhc3QpOworICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxP
YmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzPio+KCZtX3Jlc3VsdCk7CisgICAgICAgIH0K
KworICAgICAgICBQYXNzUmVmUHRyPE9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHM+IHJl
bGVhc2UoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gUmVmUHRyPE9iamVjdFdpdGhQ
cm9wZXJ0eU5hbWVDb25mbGljdHM+KCp0aGlzKS5yZWxlYXNlKCk7CisgICAgICAgIH0KKyAgICB9
OworCisgICAgLyoKKyAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CisgICAgICogUmVmUHRy
PE9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHM+IHJlc3VsdCA9IE9iamVjdFdpdGhQcm9w
ZXJ0eU5hbWVDb25mbGljdHM6OmNyZWF0ZSgpCisgICAgICogICAgIC5zZXRJbnRlZ2VyKC4uLikK
KyAgICAgKiAgICAgLnNldEFycmF5KC4uLikKKyAgICAgKiAgICAgLnNldFN0cmluZyguLi4pCisg
ICAgICogICAgIC5zZXRWYWx1ZSguLi4pCisgICAgICogICAgIC5zZXRPYmplY3QoLi4uKTsKKyAg
ICAgKi8KKyAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihJbnNwZWN0b3I6Okluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCkpOworICAgIH0KKyAgICB0eXBlZGVmIEluc3BlY3Rvcjo6VHlwZUJ1aWxk
ZXI6OlN0cnVjdEl0ZW1UcmFpdHMgSXRlbVRyYWl0czsKK307CisKK30gLy8gRGF0YWJhc2UKKyNl
bmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQorCituYW1lc3BhY2UgVGVzdCB7CitjbGFzcyBQ
YXJhbWV0ZXJCdW5kbGUgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3RCYXNlIHsK
K3B1YmxpYzoKKyAgICBlbnVtIHsKKyAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAorICAgICAgICBD
b2x1bW5OYW1lc1NldCA9IDEgPDwgMCwKKyAgICAgICAgTm90ZXNTZXQgPSAxIDw8IDEsCisgICAg
ICAgIFRpbWVzdGFtcFNldCA9IDEgPDwgMiwKKyAgICAgICAgVmFsdWVzU2V0ID0gMSA8PCAzLAor
ICAgICAgICBQYXlsb2FkU2V0ID0gMSA8PCA0LAorICAgICAgICBFcnJvclNldCA9IDEgPDwgNSwK
KyAgICAgICAgQWxsRmllbGRzU2V0ID0gKENvbHVtbk5hbWVzU2V0IHwgTm90ZXNTZXQgfCBUaW1l
c3RhbXBTZXQgfCBWYWx1ZXNTZXQgfCBQYXlsb2FkU2V0IHwgRXJyb3JTZXQpCisgICAgfTsKKwor
ICAgIHRlbXBsYXRlPGludCBTVEFURT4KKyAgICBjbGFzcyBCdWlsZGVyIHsKKyAgICBwcml2YXRl
OgorICAgICAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0Owor
CisgICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RT
dGF0ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxC
dWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxk
ZXIoUGFzc1JlZlB0cjwvKlBhcmFtZXRlckJ1bmRsZSovSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmpl
Y3Q+IHB0cikKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0g
Tm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CisgICAgICAg
ICAgICBtX3Jlc3VsdCA9IHB0cjsKKyAgICAgICAgfQorICAgICAgICBmcmllbmQgY2xhc3MgUGFy
YW1ldGVyQnVuZGxlOworICAgIHB1YmxpYzoKKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQ29s
dW1uTmFtZXNTZXQ+JiBzZXRDb2x1bW5OYW1lcyhQYXNzUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1
aWxkZXI6OkFycmF5PFN0cmluZz4+IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVCghKFNUQVRFICYgQ29sdW1uTmFtZXNTZXQpLCBwcm9wZXJ0eV9jb2x1bW5OYW1l
c19hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0VmFsdWUoQVNDSUlMaXRl
cmFsKCJjb2x1bW5OYW1lcyIpLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRl
PENvbHVtbk5hbWVzU2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8
IE5vdGVzU2V0PiYgc2V0Tm90ZXMoY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICAgICAgeworICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE5vdGVzU2V0KSwgcHJvcGVydHlfbm90
ZXNfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZyhBU0NJSUxp
dGVyYWwoIm5vdGVzIiksIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Tm90
ZXNTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVGltZXN0YW1w
U2V0PiYgc2V0VGltZXN0YW1wKGRvdWJsZSB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoIShTVEFURSAmIFRpbWVzdGFtcFNldCksIHByb3BlcnR5X3RpbWVzdGFt
cF9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKEFTQ0lJTGl0
ZXJhbCgidGltZXN0YW1wIiksIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8
VGltZXN0YW1wU2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IFZh
bHVlc1NldD4mIHNldFZhbHVlcyhQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0
PiB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAm
IFZhbHVlc1NldCksIHByb3BlcnR5X3ZhbHVlc19hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBt
X3Jlc3VsdC0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgidmFsdWVzIiksIHZhbHVlKTsKKyAgICAg
ICAgICAgIHJldHVybiBjYXN0U3RhdGU8VmFsdWVzU2V0PigpOworICAgICAgICB9CisKKyAgICAg
ICAgQnVpbGRlcjxTVEFURSB8IFBheWxvYWRTZXQ+JiBzZXRQYXlsb2FkKFBhc3NSZWZQdHI8SW5z
cGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4gdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBQYXlsb2FkU2V0KSwgcHJvcGVydHlfcGF5bG9hZF9hbHJl
YWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0VmFsdWUoQVNDSUlMaXRlcmFsKCJw
YXlsb2FkIiksIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8UGF5bG9hZFNl
dD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBFcnJvclNldD4mIHNl
dEVycm9yKFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6RGF0YWJhc2U6OkVycm9y
PiB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAm
IEVycm9yU2V0KSwgcHJvcGVydHlfZXJyb3JfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9y
ZXN1bHQtPnNldFZhbHVlKEFTQ0lJTGl0ZXJhbCgiZXJyb3IiKSwgdmFsdWUpOworICAgICAgICAg
ICAgcmV0dXJuIGNhc3RTdGF0ZTxFcnJvclNldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIG9w
ZXJhdG9yIFJlZlB0cjxQYXJhbWV0ZXJCdW5kbGU+JiAoKQorICAgICAgICB7CisgICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVh
ZHkpOworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKFBhcmFtZXRlckJ1bmRsZSkg
PT0gc2l6ZW9mKEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0KSwgY2Fubm90X2Nhc3QpOworICAg
ICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxQYXJhbWV0ZXJCdW5kbGU+
Kj4oJm1fcmVzdWx0KTsKKyAgICAgICAgfQorCisgICAgICAgIFBhc3NSZWZQdHI8UGFyYW1ldGVy
QnVuZGxlPiByZWxlYXNlKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxQ
YXJhbWV0ZXJCdW5kbGU+KCp0aGlzKS5yZWxlYXNlKCk7CisgICAgICAgIH0KKyAgICB9OworCisg
ICAgLyoKKyAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CisgICAgICogUmVmUHRyPFBhcmFt
ZXRlckJ1bmRsZT4gcmVzdWx0ID0gUGFyYW1ldGVyQnVuZGxlOjpjcmVhdGUoKQorICAgICAqICAg
ICAuc2V0Q29sdW1uTmFtZXMoLi4uKQorICAgICAqICAgICAuc2V0Tm90ZXMoLi4uKQorICAgICAq
ICAgICAuc2V0VGltZXN0YW1wKC4uLikKKyAgICAgKiAgICAgLnNldFZhbHVlcyguLi4pCisgICAg
ICogICAgIC5zZXRQYXlsb2FkKC4uLikKKyAgICAgKiAgICAgLnNldEVycm9yKC4uLik7CisgICAg
ICovCisgICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCisgICAgeworICAg
ICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmpl
Y3Q6OmNyZWF0ZSgpKTsKKyAgICB9CisgICAgdHlwZWRlZiBJbnNwZWN0b3I6OlR5cGVCdWlsZGVy
OjpTdHJ1Y3RJdGVtVHJhaXRzIEl0ZW1UcmFpdHM7Cit9OworCit9IC8vIFRlc3QKKworCisKK30g
Ly8gbmFtZXNwYWNlIFR5cGVCdWlsZGVyCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisj
ZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKworI2VuZGlmIC8vICFkZWZpbmVkKEluc3BlY3Rv
clRlc3RUeXBlQnVpbGRlcnNfaCkKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdFR5cGVCdWls
ZGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmNwcAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24KKy8vIGJ5
IHRoZSBzY3JpcHQ6IEphdmFTY3JpcHRDb3JlL3JlcGxheS9zY3JpcHRzL0NvZGVHZW5lcmF0b3JJ
bnNwZWN0b3IucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkluc3BlY3RvclRl
c3RUeXBlQnVpbGRlcnMuaCIKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRlIDx3
dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCituYW1lc3BhY2Ug
VHlwZUJ1aWxkZXIgeworCitzdGF0aWMgY29uc3QgY2hhciogY29uc3QgZW51bV9jb25zdGFudF92
YWx1ZXNbXSA9IHsKK307CisKK1N0cmluZyBnZXRUZXN0RW51bUNvbnN0YW50VmFsdWUoaW50IGNv
ZGUpIHsKKyAgICByZXR1cm4gZW51bV9jb25zdGFudF92YWx1ZXNbY29kZV07Cit9CisKKworCit9
IC8vIG5hbWVzcGFjZSBUeXBlQnVpbGRlcgorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKwor
I2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVz
dFR5cGVCdWlsZGVycy5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3Rz
Lmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2V4cGVjdGVkL3R5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbi1yZXN1bHQKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uMzA2Y2YyMDJiMmNiYTEyNzdjODc3ZDFmNjQxMzc1MjgxN2EyM2Q5YwotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9leHBlY3RlZC90eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24tcmVzdWx0CkBAIC0w
LDAgKzEsNzIwIEBACisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdEJhY2tlbmRDb21tYW5k
cy5qcworLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24K
Ky8vIGJ5IHRoZSBzY3JpcHQ6IEphdmFTY3JpcHRDb3JlL3JlcGxheS9zY3JpcHRzL0NvZGVHZW5l
cmF0b3JJbnNwZWN0b3IucHkKKworLy8gVGVzdC4KK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJF
bnVtKCJUZXN0LlVuY2FzdGVkQW5pbWFscyIsIHtQaWdzOiAiUGlncyIsIENvd3M6ICJDb3dzIiwg
Q2F0czogIkNhdHMiLCBIZW5zOiAiSGVucyJ9KTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJF
bnVtKCJUZXN0LkNhc3RlZEFuaW1hbHMiLCB7RHVja3M6ICJEdWNrcyIsIEhlbnM6ICJIZW5zIiwg
Q3Jvd3M6ICJDcm93cyIsIEZsYW1pbmdvczogIkZsYW1pbmdvcyJ9KTsKKyMjIyBFbmQgRmlsZTog
SW5zcGVjdG9yVGVzdEJhY2tlbmRDb21tYW5kcy5qcworCisjIyMgQmVnaW4gRmlsZTogSW5zcGVj
dG9yVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtcmVxdWly
aW5nLXJ1bnRpbWUtY2FzdHMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogSmF2YVNjcmlwdENvcmUv
cmVwbGF5L3NjcmlwdHMvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQorCisjaWZuZGVmIEluc3Bl
Y3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnNfaAorI2RlZmluZSBJbnNwZWN0b3JUZXN0QmFja2Vu
ZERpc3BhdGNoZXJzX2gKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRlICJJbnNw
ZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmgiCisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3R5cGVk
ZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2Vu
ZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyNlbmRpZiAvLyAhZGVmaW5lZChJbnNwZWN0b3JU
ZXN0QmFja2VuZERpc3BhdGNoZXJzX2gpCisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RCYWNr
ZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdEJhY2tlbmRE
aXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1yZXF1aXJpbmctcnVudGltZS1j
YXN0cy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBKYXZhU2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0
cy9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCisKKyNpZiBFTkFCTEUoSU5T
UEVDVE9SKQorCisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5o
PgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYv
dGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworfSAvLyBuYW1l
c3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorCisjIyMgRW5k
IEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBG
aWxlOiBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IHR5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogSmF2
YVNjcmlwdENvcmUvcmVwbGF5L3NjcmlwdHMvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQorCisj
aWZuZGVmIEluc3BlY3RvclRlc3RGcm9udGVuZERpc3BhdGNoZXJzX2gKKyNkZWZpbmUgSW5zcGVj
dG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnNfaAorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKwor
I2luY2x1ZGUgIkluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuaCIKKyNpbmNsdWRlIDxpbnNwZWN0
b3IvSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLmg+CisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3Bl
Y3RvclZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworfSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorCisjZW5k
aWYgLy8gIWRlZmluZWQoSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnNfaCkKKyMjIyBF
bmQgRmlsZTogSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4g
RmlsZTogSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIHR5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDog
SmF2YVNjcmlwdENvcmUvcmVwbGF5L3NjcmlwdHMvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlz
cGF0Y2hlcnMuaCIKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit9IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyMjIyBFbmQgRmlsZTog
SW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBJ
bnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1yZXF1aXJp
bmctcnVudGltZS1jYXN0cy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBKYXZhU2NyaXB0Q29yZS9y
ZXBsYXkvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5CisKKyNpZm5kZWYgSW5zcGVj
dG9yVGVzdFR5cGVCdWlsZGVyc19oCisjZGVmaW5lIEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnNf
aAorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0
b3JKU1R5cGVCdWlsZGVycy5oPgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JUeXBlQnVp
bGRlci5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NS
ZWZQdHIuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCituYW1lc3BhY2UgVHlwZUJ1
aWxkZXIgeworCisvLyBGb3J3YXJkIGRlY2xhcmF0aW9ucy4KK25hbWVzcGFjZSBUZXN0IHsKK2Ns
YXNzIFJlY3Vyc2l2ZU9iamVjdDE7CitjbGFzcyBSZWN1cnNpdmVPYmplY3QyOworY2xhc3MgVHlw
ZU5lZWRpbmdDYXN0OworZW51bSBjbGFzcyBDYXN0ZWRBbmltYWxzOworZW51bSBjbGFzcyBVbmNh
c3RlZEFuaW1hbHM7Cit9IC8vIFRlc3QKKy8vIEVuZCBvZiBmb3J3YXJkIGRlY2xhcmF0aW9ucy4K
KworCisvLyBUeXBlZGVmcy4KK25hbWVzcGFjZSBUZXN0IHsKK3R5cGVkZWYgaW50IENhc3RlZE9i
amVjdElkOworCit0eXBlZGVmIGludCBVbmNhc3RlZE9iamVjdElkOworfSAvLyBUZXN0CisvLyBF
bmQgb2YgdHlwZWRlZnMuCisKK1N0cmluZyBnZXRUZXN0RW51bUNvbnN0YW50VmFsdWUoaW50IGNv
ZGUpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBTdHJpbmcgZ2V0VGVzdEVudW1Db25zdGFudFZh
bHVlKFQgZW51bVZhbHVlKQoreworICAgIHJldHVybiBnZXRUZXN0RW51bUNvbnN0YW50VmFsdWUo
c3RhdGljX2Nhc3Q8aW50PihlbnVtVmFsdWUpKTsKK30KKworbmFtZXNwYWNlIFRlc3QgeworLyog
QSBkdW1teSB0eXBlIHRoYXQgcmVxdWlyZXMgcnVudGltZSBjYXN0cywgYW5kIGZvcmNlcyBub24t
cHJpbWl0aXZlIHJlZmVyZW5jZWQgdHlwZXMgdG8gYWxzbyBlbWl0IHJ1bnRpbWUgY2FzdCBoZWxw
ZXJzLiAqLworY2xhc3MgVHlwZU5lZWRpbmdDYXN0IDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVj
dG9yT2JqZWN0QmFzZSB7CitwdWJsaWM6CisgICAgZW51bSB7CisgICAgICAgIE5vRmllbGRzU2V0
ID0gMCwKKyAgICAgICAgU3RyaW5nU2V0ID0gMSA8PCAwLAorICAgICAgICBOdW1iZXJTZXQgPSAx
IDw8IDEsCisgICAgICAgIEFuaW1hbHNTZXQgPSAxIDw8IDIsCisgICAgICAgIElkU2V0ID0gMSA8
PCAzLAorICAgICAgICBUcmVlU2V0ID0gMSA8PCA0LAorICAgICAgICBBbGxGaWVsZHNTZXQgPSAo
U3RyaW5nU2V0IHwgTnVtYmVyU2V0IHwgQW5pbWFsc1NldCB8IElkU2V0IHwgVHJlZVNldCkKKyAg
ICB9OworCisgICAgdGVtcGxhdGU8aW50IFNUQVRFPgorICAgIGNsYXNzIEJ1aWxkZXIgeworICAg
IHByaXZhdGU6CisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gbV9y
ZXN1bHQ7CisKKyAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQ
PiYgY2FzdFN0YXRlKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJl
dF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOworICAgICAgICB9CisKKyAgICAg
ICAgQnVpbGRlcihQYXNzUmVmUHRyPC8qVHlwZU5lZWRpbmdDYXN0Ki9JbnNwZWN0b3I6Okluc3Bl
Y3Rvck9iamVjdD4gcHRyKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChT
VEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsK
KyAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOworICAgICAgICB9CisgICAgICAgIGZyaWVuZCBj
bGFzcyBUeXBlTmVlZGluZ0Nhc3Q7CisgICAgcHVibGljOgorCisgICAgICAgIEJ1aWxkZXI8U1RB
VEUgfCBTdHJpbmdTZXQ+JiBzZXRTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICAgICAg
eworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFN0cmluZ1NldCksIHByb3Bl
cnR5X3N0cmluZ19hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5n
KEFTQ0lJTGl0ZXJhbCgic3RyaW5nIiksIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0
U3RhdGU8U3RyaW5nU2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8
IE51bWJlclNldD4mIHNldE51bWJlcihpbnQgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBOdW1iZXJTZXQpLCBwcm9wZXJ0eV9udW1iZXJfYWxy
ZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcihBU0NJSUxpdGVyYWwo
Im51bWJlciIpLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE51bWJlclNl
dD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBBbmltYWxzU2V0PiYg
c2V0QW5pbWFscyhJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpUZXN0OjpDYXN0ZWRBbmltYWxzIHZh
bHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQW5p
bWFsc1NldCksIHByb3BlcnR5X2FuaW1hbHNfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9y
ZXN1bHQtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoImFuaW1hbHMiKSwgSW5zcGVjdG9yOjpUeXBl
QnVpbGRlcjo6Z2V0VGVzdEVudW1Db25zdGFudFZhbHVlKHN0YXRpY19jYXN0PGludD4odmFsdWUp
KSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEFuaW1hbHNTZXQ+KCk7CisgICAgICAg
IH0KKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgSWRTZXQ+JiBzZXRJZChpbnQgdmFsdWUpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBJZFNldCksIHBy
b3BlcnR5X2lkX2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIo
QVNDSUlMaXRlcmFsKCJpZCIpLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRl
PElkU2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IFRyZWVTZXQ+
JiBzZXRUcmVlKFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6VGVzdDo6UmVjdXJz
aXZlT2JqZWN0MT4gdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KCEoU1RBVEUgJiBUcmVlU2V0KSwgcHJvcGVydHlfdHJlZV9hbHJlYWR5X3NldCk7CisgICAgICAg
ICAgICBtX3Jlc3VsdC0+c2V0VmFsdWUoQVNDSUlMaXRlcmFsKCJ0cmVlIiksIHZhbHVlKTsKKyAg
ICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VHJlZVNldD4oKTsKKyAgICAgICAgfQorCisgICAg
ICAgIG9wZXJhdG9yIFJlZlB0cjxUeXBlTmVlZGluZ0Nhc3Q+JiAoKQorICAgICAgICB7CisgICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19u
b3RfcmVhZHkpOworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKFR5cGVOZWVkaW5n
Q2FzdCkgPT0gc2l6ZW9mKEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0KSwgY2Fubm90X2Nhc3Qp
OworICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxUeXBlTmVlZGlu
Z0Nhc3Q+Kj4oJm1fcmVzdWx0KTsKKyAgICAgICAgfQorCisgICAgICAgIFBhc3NSZWZQdHI8VHlw
ZU5lZWRpbmdDYXN0PiByZWxlYXNlKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIFJl
ZlB0cjxUeXBlTmVlZGluZ0Nhc3Q+KCp0aGlzKS5yZWxlYXNlKCk7CisgICAgICAgIH0KKyAgICB9
OworCisgICAgLyoKKyAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CisgICAgICogUmVmUHRy
PFR5cGVOZWVkaW5nQ2FzdD4gcmVzdWx0ID0gVHlwZU5lZWRpbmdDYXN0OjpjcmVhdGUoKQorICAg
ICAqICAgICAuc2V0U3RyaW5nKC4uLikKKyAgICAgKiAgICAgLnNldE51bWJlciguLi4pCisgICAg
ICogICAgIC5zZXRBbmltYWxzKC4uLikKKyAgICAgKiAgICAgLnNldElkKC4uLikKKyAgICAgKiAg
ICAgLnNldFRyZWUoLi4uKTsKKyAgICAgKi8KKyAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1Nl
dD4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihJ
bnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkpOworICAgIH0KKyAgICB0eXBlZGVm
IEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlN0cnVjdEl0ZW1UcmFpdHMgSXRlbVRyYWl0czsKK307
CisKKy8qICAqLworZW51bSBjbGFzcyBVbmNhc3RlZEFuaW1hbHMgeworICAgIFBpZ3MgPSA0LAor
ICAgIENvd3MgPSA1LAorICAgIENhdHMgPSA2LAorICAgIEhlbnMgPSAxLAorfTsgLy8gZW51bSBj
bGFzcyBVbmNhc3RlZEFuaW1hbHMKKy8qICAqLworZW51bSBjbGFzcyBDYXN0ZWRBbmltYWxzIHsK
KyAgICBEdWNrcyA9IDAsCisgICAgSGVucyA9IDEsCisgICAgQ3Jvd3MgPSAyLAorICAgIEZsYW1p
bmdvcyA9IDMsCit9OyAvLyBlbnVtIGNsYXNzIENhc3RlZEFuaW1hbHMKK2NsYXNzIFJlY3Vyc2l2
ZU9iamVjdDEgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3RCYXNlIHsKK3B1Ymxp
YzoKKyAgICBlbnVtIHsKKyAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAorICAgICAgICBBbGxGaWVs
ZHNTZXQgPSAwCisgICAgfTsKKworICAgIHRlbXBsYXRlPGludCBTVEFURT4KKyAgICBjbGFzcyBC
dWlsZGVyIHsKKyAgICBwcml2YXRlOgorICAgICAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0
b3JPYmplY3Q+IG1fcmVzdWx0OworCisgICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVy
PFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKKyAgICAg
ICAgfQorCisgICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjwvKlJlY3Vyc2l2ZU9iamVjdDEqL0lu
c3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBwdHIpCisgICAgICAgIHsKKyAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9u
X2luaXRfc3RhdGUpOworICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CisgICAgICAgIH0KKyAg
ICAgICAgZnJpZW5kIGNsYXNzIFJlY3Vyc2l2ZU9iamVjdDE7CisgICAgcHVibGljOgorCisgICAg
ICAgIG9wZXJhdG9yIFJlZlB0cjxSZWN1cnNpdmVPYmplY3QxPiYgKCkKKyAgICAgICAgeworICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNf
bm90X3JlYWR5KTsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihSZWN1cnNpdmVP
YmplY3QxKSA9PSBzaXplb2YoSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QpLCBjYW5ub3RfY2Fz
dCk7CisgICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPFJlY3Vyc2l2
ZU9iamVjdDE+Kj4oJm1fcmVzdWx0KTsKKyAgICAgICAgfQorCisgICAgICAgIFBhc3NSZWZQdHI8
UmVjdXJzaXZlT2JqZWN0MT4gcmVsZWFzZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBSZWZQdHI8UmVjdXJzaXZlT2JqZWN0MT4oKnRoaXMpLnJlbGVhc2UoKTsKKyAgICAgICAgfQor
ICAgIH07CisKKyAgICAvKgorICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKKyAgICAgKiBS
ZWZQdHI8UmVjdXJzaXZlT2JqZWN0MT4gcmVzdWx0ID0gUmVjdXJzaXZlT2JqZWN0MTo6Y3JlYXRl
KCk7CisgICAgICovCisgICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCisg
ICAgeworICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSW5zcGVjdG9yOjpJbnNw
ZWN0b3JPYmplY3Q6OmNyZWF0ZSgpKTsKKyAgICB9CisgICAgdHlwZWRlZiBJbnNwZWN0b3I6OlR5
cGVCdWlsZGVyOjpTdHJ1Y3RJdGVtVHJhaXRzIEl0ZW1UcmFpdHM7CisKKyAgICB2b2lkIHNldE9i
aihQYXNzUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVj
dDI+IHZhbHVlKQorICAgIHsKKyAgICAgICAgdGhpcy0+c2V0VmFsdWUoQVNDSUlMaXRlcmFsKCJv
YmoiKSwgdmFsdWUpOworICAgIH0KK307CisKK2NsYXNzIFJlY3Vyc2l2ZU9iamVjdDIgOiBwdWJs
aWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3RCYXNlIHsKK3B1YmxpYzoKKyAgICBlbnVtIHsK
KyAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAorICAgICAgICBBbGxGaWVsZHNTZXQgPSAwCisgICAg
fTsKKworICAgIHRlbXBsYXRlPGludCBTVEFURT4KKyAgICBjbGFzcyBCdWlsZGVyIHsKKyAgICBw
cml2YXRlOgorICAgICAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IG1fcmVz
dWx0OworCisgICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4m
IGNhc3RTdGF0ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRf
Y2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKKyAgICAgICAgfQorCisgICAgICAg
IEJ1aWxkZXIoUGFzc1JlZlB0cjwvKlJlY3Vyc2l2ZU9iamVjdDIqL0luc3BlY3Rvcjo6SW5zcGVj
dG9yT2JqZWN0PiBwdHIpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNU
QVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwor
ICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CisgICAgICAgIH0KKyAgICAgICAgZnJpZW5kIGNs
YXNzIFJlY3Vyc2l2ZU9iamVjdDI7CisgICAgcHVibGljOgorCisgICAgICAgIG9wZXJhdG9yIFJl
ZlB0cjxSZWN1cnNpdmVPYmplY3QyPiYgKCkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKKyAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihSZWN1cnNpdmVPYmplY3QyKSA9PSBzaXpl
b2YoSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QpLCBjYW5ub3RfY2FzdCk7CisgICAgICAgICAg
ICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPFJlY3Vyc2l2ZU9iamVjdDI+Kj4oJm1f
cmVzdWx0KTsKKyAgICAgICAgfQorCisgICAgICAgIFBhc3NSZWZQdHI8UmVjdXJzaXZlT2JqZWN0
Mj4gcmVsZWFzZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBSZWZQdHI8UmVjdXJz
aXZlT2JqZWN0Mj4oKnRoaXMpLnJlbGVhc2UoKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICAv
KgorICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKKyAgICAgKiBSZWZQdHI8UmVjdXJzaXZl
T2JqZWN0Mj4gcmVzdWx0ID0gUmVjdXJzaXZlT2JqZWN0Mjo6Y3JlYXRlKCk7CisgICAgICovCisg
ICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCisgICAgeworICAgICAgICBy
ZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q6OmNy
ZWF0ZSgpKTsKKyAgICB9CisgICAgdHlwZWRlZiBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpTdHJ1
Y3RJdGVtVHJhaXRzIEl0ZW1UcmFpdHM7CisKKyAgICB2b2lkIHNldE9iaihQYXNzUmVmUHRyPElu
c3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDE+IHZhbHVlKQorICAg
IHsKKyAgICAgICAgdGhpcy0+c2V0VmFsdWUoQVNDSUlMaXRlcmFsKCJvYmoiKSwgdmFsdWUpOwor
ICAgIH0KK307CisKK30gLy8gVGVzdAorCit0ZW1wbGF0ZTw+IHN0cnVjdCBCaW5kaW5nVHJhaXRz
PEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlRlc3Q6OkNhc3RlZEFuaW1hbHM+IHsKKyNpZiAhQVNT
RVJUX0RJU0FCTEVECitzdGF0aWMgdm9pZCBhc3NlcnRDb3JyZWN0VmFsdWUoSW5zcGVjdG9yOjpJ
bnNwZWN0b3JWYWx1ZSopOworI2VuZGlmIC8vICFBU1NFUlRfRElTQUJMRUQKK307Cit0ZW1wbGF0
ZTw+IHN0cnVjdCBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlRlc3Q6OlR5
cGVOZWVkaW5nQ2FzdD4geworc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRl
cjo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0PiBydW50aW1lQ2FzdChQYXNzUmVmUHRyPEluc3BlY3Rv
cjo6SW5zcGVjdG9yVmFsdWU+IHZhbHVlKTsKKyNpZiAhQVNTRVJUX0RJU0FCTEVECitzdGF0aWMg
dm9pZCBhc3NlcnRDb3JyZWN0VmFsdWUoSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSopOworI2Vu
ZGlmIC8vICFBU1NFUlRfRElTQUJMRUQKK307Cit0ZW1wbGF0ZTw+IHN0cnVjdCBCaW5kaW5nVHJh
aXRzPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDE+IHsKKyNp
ZiAhQVNTRVJUX0RJU0FCTEVECitzdGF0aWMgdm9pZCBhc3NlcnRDb3JyZWN0VmFsdWUoSW5zcGVj
dG9yOjpJbnNwZWN0b3JWYWx1ZSopOworI2VuZGlmIC8vICFBU1NFUlRfRElTQUJMRUQKK307Cit0
ZW1wbGF0ZTw+IHN0cnVjdCBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlRl
c3Q6OlJlY3Vyc2l2ZU9iamVjdDI+IHsKKyNpZiAhQVNTRVJUX0RJU0FCTEVECitzdGF0aWMgdm9p
ZCBhc3NlcnRDb3JyZWN0VmFsdWUoSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSopOworI2VuZGlm
IC8vICFBU1NFUlRfRElTQUJMRUQKK307CisKK30gLy8gbmFtZXNwYWNlIFR5cGVCdWlsZGVyCisK
K30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikK
KworI2VuZGlmIC8vICFkZWZpbmVkKEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnNfaCkKKyMjIyBF
bmQgRmlsZTogSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBJ
bnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVp
cmluZy1ydW50aW1lLWNhc3RzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IEphdmFTY3JpcHRDb3Jl
L3JlcGxheS9zY3JpcHRzL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuaCIKKworI2lmIEVO
QUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVz
cGFjZSBJbnNwZWN0b3IgeworCituYW1lc3BhY2UgVHlwZUJ1aWxkZXIgeworCitzdGF0aWMgY29u
c3QgY2hhciogY29uc3QgZW51bV9jb25zdGFudF92YWx1ZXNbXSA9IHsKKyAgICAiRHVja3MiLAor
ICAgICJIZW5zIiwKKyAgICAiQ3Jvd3MiLAorICAgICJGbGFtaW5nb3MiLAorICAgICJQaWdzIiwK
KyAgICAiQ293cyIsCisgICAgIkNhdHMiLAorfTsKKworU3RyaW5nIGdldFRlc3RFbnVtQ29uc3Rh
bnRWYWx1ZShpbnQgY29kZSkgeworICAgIHJldHVybiBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb2Rl
XTsKK30KKworCisKKyNpZiAhQVNTRVJUX0RJU0FCTEVECit2b2lkIEJpbmRpbmdUcmFpdHM8SW5z
cGVjdG9yOjpUeXBlQnVpbGRlcjo6VGVzdDo6Q2FzdGVkQW5pbWFscz46OmFzc2VydENvcnJlY3RW
YWx1ZShJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlKiB2YWx1ZSkKK3sKKyAgICBXVEY6OlN0cmlu
ZyBzOworICAgIGJvb2wgY2FzdF9yZXMgPSB2YWx1ZS0+YXNTdHJpbmcoJnMpOworICAgIEFTU0VS
VChjYXN0X3Jlcyk7CisgICAgQVNTRVJUKHMgPT0gIkR1Y2tzIiB8fCBzID09ICJIZW5zIiB8fCBz
ID09ICJDcm93cyIgfHwgcyA9PSAiRmxhbWluZ29zIik7Cit9CisjZW5kaWYgLy8gIUFTU0VSVF9E
SVNBQkxFRAorCisjaWYgIUFTU0VSVF9ESVNBQkxFRAordm9pZCBCaW5kaW5nVHJhaXRzPEluc3Bl
Y3Rvcjo6VHlwZUJ1aWxkZXI6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdD46OmFzc2VydENvcnJlY3RW
YWx1ZShJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlKiB2YWx1ZSkKK3sKKyAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBvYmplY3Q7CisgICAgYm9vbCBjYXN0UmVzID0gdmFsdWUtPmFzT2JqZWN0
KCZvYmplY3QpOworICAgIEFTU0VSVF9VTlVTRUQoY2FzdFJlcywgY2FzdFJlcyk7CisgICAgewor
ICAgICAgICBJbnNwZWN0b3JPYmplY3Q6Oml0ZXJhdG9yIHN0cmluZ1BvczsKKyAgICAgICAgc3Ry
aW5nUG9zID0gb2JqZWN0LT5maW5kKCJzdHJpbmciKTsKKyAgICAgICAgQVNTRVJUKHN0cmluZ1Bv
cyAhPSBvYmplY3QtPmVuZCgpKTsKKyAgICAgICAgQmluZGluZ1RyYWl0czxTdHJpbmc+Ojphc3Nl
cnRDb3JyZWN0VmFsdWUoc3RyaW5nUG9zLT52YWx1ZS5nZXQoKSk7CisgICAgfQorICAgIHsKKyAg
ICAgICAgSW5zcGVjdG9yT2JqZWN0OjppdGVyYXRvciBudW1iZXJQb3M7CisgICAgICAgIG51bWJl
clBvcyA9IG9iamVjdC0+ZmluZCgibnVtYmVyIik7CisgICAgICAgIEFTU0VSVChudW1iZXJQb3Mg
IT0gb2JqZWN0LT5lbmQoKSk7CisgICAgICAgIEJpbmRpbmdUcmFpdHM8aW50Pjo6YXNzZXJ0Q29y
cmVjdFZhbHVlKG51bWJlclBvcy0+dmFsdWUuZ2V0KCkpOworICAgIH0KKyAgICB7CisgICAgICAg
IEluc3BlY3Rvck9iamVjdDo6aXRlcmF0b3IgYW5pbWFsc1BvczsKKyAgICAgICAgYW5pbWFsc1Bv
cyA9IG9iamVjdC0+ZmluZCgiYW5pbWFscyIpOworICAgICAgICBBU1NFUlQoYW5pbWFsc1BvcyAh
PSBvYmplY3QtPmVuZCgpKTsKKyAgICAgICAgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlR5cGVC
dWlsZGVyOjpUZXN0OjpDYXN0ZWRBbmltYWxzPjo6YXNzZXJ0Q29ycmVjdFZhbHVlKGFuaW1hbHNQ
b3MtPnZhbHVlLmdldCgpKTsKKyAgICB9CisgICAgeworICAgICAgICBJbnNwZWN0b3JPYmplY3Q6
Oml0ZXJhdG9yIGlkUG9zOworICAgICAgICBpZFBvcyA9IG9iamVjdC0+ZmluZCgiaWQiKTsKKyAg
ICAgICAgQVNTRVJUKGlkUG9zICE9IG9iamVjdC0+ZW5kKCkpOworICAgICAgICBCaW5kaW5nVHJh
aXRzPGludD46OmFzc2VydENvcnJlY3RWYWx1ZShpZFBvcy0+dmFsdWUuZ2V0KCkpOworICAgIH0K
KyAgICB7CisgICAgICAgIEluc3BlY3Rvck9iamVjdDo6aXRlcmF0b3IgdHJlZVBvczsKKyAgICAg
ICAgdHJlZVBvcyA9IG9iamVjdC0+ZmluZCgidHJlZSIpOworICAgICAgICBBU1NFUlQodHJlZVBv
cyAhPSBvYmplY3QtPmVuZCgpKTsKKyAgICAgICAgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlR5
cGVCdWlsZGVyOjpUZXN0OjpSZWN1cnNpdmVPYmplY3QxPjo6YXNzZXJ0Q29ycmVjdFZhbHVlKHRy
ZWVQb3MtPnZhbHVlLmdldCgpKTsKKyAgICB9CisKKyAgICBpbnQgZm91bmRQcm9wZXJ0aWVzQ291
bnQgPSA1OworICAgIGlmIChmb3VuZFByb3BlcnRpZXNDb3VudCAhPSBvYmplY3QtPnNpemUoKSkK
KyAgICAgICAgRkFUQUwoIlVuZXhwZWN0ZWQgcHJvcGVydGllcyBpbiBvYmplY3Q6ICVzXG4iLCBv
YmplY3QtPnRvSlNPTlN0cmluZygpLmFzY2lpKCkuZGF0YSgpKTsKK30KKyNlbmRpZiAvLyAhQVNT
RVJUX0RJU0FCTEVECisKK1Bhc3NSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6VGVzdDo6
VHlwZU5lZWRpbmdDYXN0PiBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlRl
c3Q6OlR5cGVOZWVkaW5nQ2FzdD46OnJ1bnRpbWVDYXN0KFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJ
bnNwZWN0b3JWYWx1ZT4gdmFsdWUpCit7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9y
T2JqZWN0PiBvYmplY3Q7CisgICAgYm9vbCBjYXN0UmVzID0gdmFsdWUtPmFzT2JqZWN0KCZvYmpl
Y3QpOworICAgIEFTU0VSVF9VTlVTRUQoY2FzdFJlcywgY2FzdFJlcyk7CisjaWYgIUFTU0VSVF9E
SVNBQkxFRAorICAgIEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6VGVzdDo6
VHlwZU5lZWRpbmdDYXN0Pjo6YXNzZXJ0Q29ycmVjdFZhbHVlKG9iamVjdC5nZXQoKSk7CisjZW5k
aWYgIC8vICFBU1NFUlRfRElTQUJMRUQKKyAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoSW5zcGVj
dG9yOjpUeXBlQnVpbGRlcjo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0KSA9PSBzaXplb2YoSW5zcGVj
dG9yOjpJbnNwZWN0b3JPYmplY3RCYXNlKSwgdHlwZV9jYXN0X3Byb2JsZW0pOworICAgIHJldHVy
biBzdGF0aWNfY2FzdDxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpUZXN0OjpUeXBlTmVlZGluZ0Nh
c3QqPihzdGF0aWNfY2FzdDxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdEJhc2UqPihvYmplY3Qu
Z2V0KCkpKTsKK30KKworCisjaWYgIUFTU0VSVF9ESVNBQkxFRAordm9pZCBCaW5kaW5nVHJhaXRz
PEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDE+Ojphc3NlcnRD
b3JyZWN0VmFsdWUoSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSogdmFsdWUpCit7CisgICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gb2JqZWN0OworICAgIGJvb2wgY2FzdFJlcyA9IHZhbHVlLT5h
c09iamVjdCgmb2JqZWN0KTsKKyAgICBBU1NFUlRfVU5VU0VEKGNhc3RSZXMsIGNhc3RSZXMpOwor
CisgICAgaW50IGZvdW5kUHJvcGVydGllc0NvdW50ID0gMDsKKyAgICB7CisgICAgICAgIEluc3Bl
Y3Rvck9iamVjdDo6aXRlcmF0b3Igb2JqUG9zOworICAgICAgICBvYmpQb3MgPSBvYmplY3QtPmZp
bmQoIm9iaiIpOworICAgICAgICBpZiAob2JqUG9zICE9IG9iamVjdC0+ZW5kKCkpIHsKKyAgICAg
ICAgICAgIEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6VGVzdDo6UmVjdXJz
aXZlT2JqZWN0Mj46OmFzc2VydENvcnJlY3RWYWx1ZShvYmpQb3MtPnZhbHVlLmdldCgpKTsKKyAg
ICAgICAgICAgICsrZm91bmRQcm9wZXJ0aWVzQ291bnQ7CisgICAgICAgIH0KKyAgICB9CisgICAg
aWYgKGZvdW5kUHJvcGVydGllc0NvdW50ICE9IG9iamVjdC0+c2l6ZSgpKQorICAgICAgICBGQVRB
TCgiVW5leHBlY3RlZCBwcm9wZXJ0aWVzIGluIG9iamVjdDogJXNcbiIsIG9iamVjdC0+dG9KU09O
U3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOworfQorI2VuZGlmIC8vICFBU1NFUlRfRElTQUJMRUQK
KworI2lmICFBU1NFUlRfRElTQUJMRUQKK3ZvaWQgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlR5
cGVCdWlsZGVyOjpUZXN0OjpSZWN1cnNpdmVPYmplY3QyPjo6YXNzZXJ0Q29ycmVjdFZhbHVlKElu
c3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUqIHZhbHVlKQoreworICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IG9iamVjdDsKKyAgICBib29sIGNhc3RSZXMgPSB2YWx1ZS0+YXNPYmplY3QoJm9iamVj
dCk7CisgICAgQVNTRVJUX1VOVVNFRChjYXN0UmVzLCBjYXN0UmVzKTsKKworICAgIGludCBmb3Vu
ZFByb3BlcnRpZXNDb3VudCA9IDA7CisgICAgeworICAgICAgICBJbnNwZWN0b3JPYmplY3Q6Oml0
ZXJhdG9yIG9ialBvczsKKyAgICAgICAgb2JqUG9zID0gb2JqZWN0LT5maW5kKCJvYmoiKTsKKyAg
ICAgICAgaWYgKG9ialBvcyAhPSBvYmplY3QtPmVuZCgpKSB7CisgICAgICAgICAgICBCaW5kaW5n
VHJhaXRzPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDE+Ojph
c3NlcnRDb3JyZWN0VmFsdWUob2JqUG9zLT52YWx1ZS5nZXQoKSk7CisgICAgICAgICAgICArK2Zv
dW5kUHJvcGVydGllc0NvdW50OworICAgICAgICB9CisgICAgfQorICAgIGlmIChmb3VuZFByb3Bl
cnRpZXNDb3VudCAhPSBvYmplY3QtPnNpemUoKSkKKyAgICAgICAgRkFUQUwoIlVuZXhwZWN0ZWQg
cHJvcGVydGllcyBpbiBvYmplY3Q6ICVzXG4iLCBvYmplY3QtPnRvSlNPTlN0cmluZygpLmFzY2lp
KCkuZGF0YSgpKTsKK30KKyNlbmRpZiAvLyAhQVNTRVJUX0RJU0FCTEVECisKK30gLy8gbmFtZXNw
YWNlIFR5cGVCdWlsZGVyCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8g
RU5BQkxFKElOU1BFQ1RPUikKKworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxk
ZXJzLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2ZhaWwtb24tZHVwbGljYXRlLXR5cGUtZGVjbGFyYXRpb25zLmpzb24gYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1kdXBsaWNh
dGUtdHlwZS1kZWNsYXJhdGlvbnMuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43MDJmYzZhMzI3MGE2NDZhNDUw
NDQ3ZmRjMDQwMTM5OTVhOTQyYmYwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tZHVwbGljYXRlLXR5cGUtZGVj
bGFyYXRpb25zLmpzb24KQEAgLTAsMCArMSwxNSBAQAoreworICAgICJkb21haW4iOiAiUnVudGlt
ZSIsCisgICAgInR5cGVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiUmVtb3Rl
T2JqZWN0SWQiLAorICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKKyAgICAgICAgICAgICJk
ZXNjcmlwdGlvbiI6ICJVbmlxdWUgb2JqZWN0IGlkZW50aWZpZXIuIgorICAgICAgICB9LAorICAg
ICAgICB7CisgICAgICAgICAgICAiaWQiOiAiUmVtb3RlT2JqZWN0SWQiLAorICAgICAgICAgICAg
InR5cGUiOiAic3RyaW5nIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUgb2Jq
ZWN0IGlkZW50aWZpZXIuIgorICAgICAgICB9CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tdHlwZS1kZWNs
YXJhdGlvbi11c2luZy10eXBlLXJlZmVyZW5jZS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tdHlwZS1kZWNsYXJhdGlvbi11c2luZy10
eXBlLXJlZmVyZW5jZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE5Yjc1OTBjY2M2ZjZiYzM0NDNhNGEyODNj
YTZmY2NmZGYzMjc3MzQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi10eXBlLWRlY2xhcmF0aW9uLXVzaW5nLXR5
cGUtcmVmZXJlbmNlLmpzb24KQEAgLTAsMCArMSwxMyBAQAorWworeworICAgICJkb21haW4iOiAi
UnVudGltZSIsCisgICAgInR5cGVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAi
UmVtb3RlT2JqZWN0SWQiLAorICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKKyAgICAgICAg
ICAgICIkcmVmIjogIlNvbWVUeXBlIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmlx
dWUgb2JqZWN0IGlkZW50aWZpZXIuIgorICAgICAgICB9CisgICAgXQorfQorXQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24t
dW5rbm93bi10eXBlLXJlZmVyZW5jZS1pbi10eXBlLWRlY2xhcmF0aW9uLmpzb24gYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi11bmtub3duLXR5
cGUtcmVmZXJlbmNlLWluLXR5cGUtZGVjbGFyYXRpb24uanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kNjg4N2Ey
NzQxMTkwMGE4MGQ1MGYwMDNlYWMzNmMxM2E5OWZhZTU4Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tdW5rbm93
bi10eXBlLXJlZmVyZW5jZS1pbi10eXBlLWRlY2xhcmF0aW9uLmpzb24KQEAgLTAsMCArMSwxMiBA
QAorWworeworICAgICJkb21haW4iOiAiUnVudGltZSIsCisgICAgInR5cGVzIjogWworICAgICAg
ICB7CisgICAgICAgICAgICAiaWQiOiAiUmVtb3RlT2JqZWN0SWQiLAorICAgICAgICAgICAgInR5
cGUiOiAiZHJhZ29uIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUgb2JqZWN0
IGlkZW50aWZpZXIuIgorICAgICAgICB9CisgICAgXQorfQorXQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tdW5rbm93bi10
eXBlLXJlZmVyZW5jZS1pbi10eXBlLW1lbWJlci5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVyZW5jZS1p
bi10eXBlLW1lbWJlci5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI4MTdkYjUwNDRkYzFmMjg1NTcwMDhjMWYx
NzYxZjFiMDY4ZjRjZTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi11bmtub3duLXR5cGUtcmVmZXJlbmNlLWlu
LXR5cGUtbWVtYmVyLmpzb24KQEAgLTAsMCArMSwxNSBAQAorWworeworICAgICJkb21haW4iOiAi
RmFudGFzeSIsCisgICAgInR5cGVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAi
RHJhZ29uRWdnIiwKKyAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCisgICAgICAgICAgICAi
ZGVzY3JpcHRpb24iOiAiQSBkcmFnb24gZWdnLiIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6
IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbG9yIiwgIiRyZWYiOiAiQ29sb3IiIH0K
KyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0KK30KK10KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9zYW1lLXR5cGUtaWQtZGlm
ZmVyZW50LWRvbWFpbi5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL3NhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24KbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
M2JmNGRmZjVjY2MyOWQwZThjMWZhNGIyZGQzMjgzZTc3MTYzMmM3ZAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9zYW1lLXR5
cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCkBAIC0wLDAgKzEsMjIgQEAKK1sKK3sKKyAgICAi
ZG9tYWluIjogIlJ1bnRpbWUiLAorICAgICJ0eXBlcyI6IFsKKyAgICAgICAgeworICAgICAgICAg
ICAgImlkIjogIlJlbW90ZU9iamVjdElkIiwKKyAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIs
CisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5pcXVlIG9iamVjdCBpZGVudGlmaWVyLiIK
KyAgICAgICAgfQorICAgIF0KK30sCit7CisgICAgImRvbWFpbiI6ICJSdW50aW1lMiIsCisgICAg
InR5cGVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiUmVtb3RlT2JqZWN0SWQi
LAorICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlv
biI6ICJVbmlxdWUgb2JqZWN0IGlkZW50aWZpZXIuIgorICAgICAgICB9CisgICAgXQorfQorXQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L3R5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3R5cGUtZGVjbGFyYXRpb24tYWxp
YXNlZC1wcmltaXRpdmUtdHlwZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNiYzlkNTM5NDc4ZGI0OTVjOTYw
NjdlY2Q1NGE5NWJlNTJmOGQwNzAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXBy
aW1pdGl2ZS10eXBlLmpzb24KQEAgLTAsMCArMSwxMCBAQAoreworICAgICJkb21haW4iOiAiUnVu
dGltZSIsCisgICAgInR5cGVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiUmVt
b3RlT2JqZWN0SWQiLAorICAgICAgICAgICAgInR5cGUiOiAiaW50ZWdlciIsCisgICAgICAgICAg
ICAiZGVzY3JpcHRpb24iOiAiVW5pcXVlIG9iamVjdCBpZGVudGlmaWVyLiIKKyAgICAgICAgfQor
ICAgIF0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy90eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbiBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy90eXBlLWRlY2xhcmF0aW9uLWFycmF5
LXR5cGUuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jZmIwOGJkOTQwYjY0ZmI2NjAzOTY1Y2UxYjA0ZDNmYzk3
NDllYTkwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL3R5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uCkBAIC0wLDAg
KzEsNTAgQEAKK1sKK3sKKyAgICAiZG9tYWluIjogIkRlYnVnZ2VyIiwKKyAgICAidHlwZXMiOiBb
CisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJCcmVha3BvaW50SWQiLAorICAgICAgICAg
ICAgInR5cGUiOiAiaW50ZWdlciIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAg
ImlkIjogIlJlYXNvbiIsCisgICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAorICAgICAgICAg
ICAgImVudW0iOiBbIkRpZWQiLCAiRmFpbnRlZCIsICJIdW5ncnkiXQorICAgICAgICB9CisgICAg
XQorfSwKK3sKKyAgICAiZG9tYWluIjogIlJ1bnRpbWUiLAorICAgICJ0eXBlcyI6IFsKKyAgICAg
ICAgeworICAgICAgICAgICAgImlkIjogIk9iamVjdElkIiwKKyAgICAgICAgICAgICJ0eXBlIjog
ImludGVnZXIiCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJMdWNr
eU51bWJlcnMiLAorICAgICAgICAgICAgInR5cGUiOiAiYXJyYXkiLAorICAgICAgICAgICAgIml0
ZW1zIjogeyAidHlwZSI6ICJpbnRlZ2VyIiB9CisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAg
ICAgICAgICJpZCI6ICJCYWJ5TmFtZXMiLAorICAgICAgICAgICAgInR5cGUiOiAiYXJyYXkiLAor
ICAgICAgICAgICAgIml0ZW1zIjogeyAidHlwZSI6ICJzdHJpbmciIH0KKyAgICAgICAgfSwKKyAg
ICAgICAgeworICAgICAgICAgICAgImlkIjogIk5ld09iamVjdHMiLAorICAgICAgICAgICAgInR5
cGUiOiAiYXJyYXkiLAorICAgICAgICAgICAgIml0ZW1zIjogeyAiJHJlZiI6ICJPYmplY3RJZCIg
fQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiT2xkT2JqZWN0cyIs
CisgICAgICAgICAgICAidHlwZSI6ICJhcnJheSIsCisgICAgICAgICAgICAiaXRlbXMiOiB7ICIk
cmVmIjogIkRlYnVnZ2VyLkJyZWFrcG9pbnRJZCIgfQorICAgICAgICB9LAorICAgICAgICB7Cisg
ICAgICAgICAgICAiaWQiOiAiU3RvcFJlYXNvbnMiLAorICAgICAgICAgICAgInR5cGUiOiAiYXJy
YXkiLAorICAgICAgICAgICAgIml0ZW1zIjogeyAiJHJlZiI6ICJEZWJ1Z2dlci5SZWFzb24iIH0K
KyAgICAgICAgfQorICAgIF0KK30KK10KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy90eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29u
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3R5cGUtZGVj
bGFyYXRpb24tZW51bS10eXBlLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDU4NTdmZDA4ZGIwMTc4NDAzZTA1
MDY0NTUyZjk0NTZmZTU5YjQyZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy90eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5q
c29uCkBAIC0wLDAgKzEsMjAgQEAKK3sKKyAgICAiZG9tYWluIjogIlJ1bnRpbWUiLAorICAgICJ0
eXBlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIkx1Y2t5TnVtYmVycyIsCisg
ICAgICAgICAgICAidHlwZSI6ICJpbnRlZ2VyIiwKKyAgICAgICAgICAgICJlbnVtIjogWzAsIDEs
IDJdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJGYXJtQW5pbWFs
cyIsCisgICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAorICAgICAgICAgICAgImVudW0iOiBb
IlBpZ3MiLCAiQ293cyIsICJDYXRzIiwgIkhlbnMiXQorICAgICAgICB9LAorICAgICAgICB7Cisg
ICAgICAgICAgICAiaWQiOiAiVHdvTGVnZ2VkQW5pbWFscyIsCisgICAgICAgICAgICAidHlwZSI6
ICJzdHJpbmciLAorICAgICAgICAgICAgImVudW0iOiBbIkR1Y2tzIiwgIkhlbnMiLCAiQ3Jvd3Mi
LCAiRmxhbWluZ29zIl0KKyAgICAgICAgfQorICAgIF0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy90eXBlLWRlY2xhcmF0aW9uLW9i
amVjdC10eXBlLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZmNTdh
ZDJjZjVmNzhiYzY1NGRmODFhOTNkYmI1NjA2OWQxNWE0MzEKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvdHlwZS1kZWNsYXJh
dGlvbi1vYmplY3QtdHlwZS5qc29uCkBAIC0wLDAgKzEsOTcgQEAKK1sKK3sKKyAgICAiZG9tYWlu
IjogIkRhdGFiYXNlIiwKKyAgICAiZGVzY3JpcHRpb24iOiAiVGVzdCB0eXBlIGJ1aWxkZXIgZ2Vu
ZXJhdGlvbiBvZiB2YXJpb3VzIG9iamVjdCB0eXBlcy4iLAorICAgICJ0eXBlcyI6IFsKKyAgICAg
ICAgeworICAgICAgICAgICAgImlkIjogIkVycm9yIiwKKyAgICAgICAgICAgICJ0eXBlIjogIm9i
amVjdCIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiRGF0YWJhc2UgZXJyb3IuIiwKKyAg
ICAgICAgICAgICJwcm9wZXJ0aWVzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibWVz
c2FnZSIsICJ0eXBlIjogInN0cmluZyIsICJkZXNjcmlwdGlvbiI6ICJFcnJvciBtZXNzYWdlLiIg
fSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvZGUiLCAidHlwZSI6ICJpbnRlZ2VyIiwg
ImRlc2NyaXB0aW9uIjogIkVycm9yIGNvZGUuIiB9CisgICAgICAgICAgICBdCisgICAgICAgIH0s
CisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJPcHRpb25hbFBhcmFtZXRlckJ1bmRsZSIs
CisgICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAorICAgICAgICAgICAgInByb3BlcnRpZXMi
OiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogImFy
cmF5IiwgIm9wdGlvbmFsIjogdHJ1ZSwgIml0ZW1zIjogeyAidHlwZSI6ICJzdHJpbmciIH0gfSwK
KyAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm5vdGVzIiwgInR5cGUiOiAic3RyaW5nIiwgIm9w
dGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidGltZXN0YW1wIiwg
InR5cGUiOiAibnVtYmVyIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAidmFsdWVzIiwgInR5cGUiOiAib2JqZWN0IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAor
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicGF5bG9hZCIsICJ0eXBlIjogImFueSIsICJvcHRp
b25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImVycm9yIiwgIiRyZWYi
OiAiRXJyb3IiLCAib3B0aW9uYWwiOiB0cnVlIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwK
KyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIlBhcmFtZXRlckJ1bmRsZSIsCisgICAgICAg
ICAgICAidHlwZSI6ICJvYmplY3QiLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCisgICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogImFycmF5IiwgIml0
ZW1zIjogeyAidHlwZSI6ICJzdHJpbmciIH0gfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjog
Im5vdGVzIiwgInR5cGUiOiAic3RyaW5nIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
dGltZXN0YW1wIiwgInR5cGUiOiAibnVtYmVyIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAidmFsdWVzIiwgInR5cGUiOiAib2JqZWN0IiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAicGF5bG9hZCIsICJ0eXBlIjogImFueSIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjog
ImVycm9yIiwgIiRyZWYiOiAiRXJyb3IiIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAg
ICAgICAgeworICAgICAgICAgICAgImlkIjogIk9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGlj
dHMiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkNvbmZsaWN0ZWQgbmFtZXMgbWF5IGNh
dXNlIGdlbmVyYXRlZCBnZXR0ZXJzL3NldHRlcnMgdG8gY2xhc2ggd2l0aCBidWlsdC1pbiBJbnNw
ZWN0b3JPYmplY3QgbWV0aG9kcy4iLAorICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKKyAg
ICAgICAgICAgICJwcm9wZXJ0aWVzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiaW50
ZWdlciIsICJ0eXBlIjogInN0cmluZyIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImFy
cmF5IiwgInR5cGUiOiAic3RyaW5nIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic3Ry
aW5nIiwgInR5cGUiOiAic3RyaW5nIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidmFs
dWUiLCAidHlwZSI6ICJzdHJpbmciIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJvYmpl
Y3QiLCAidHlwZSI6ICJzdHJpbmciIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAg
ICAgeworICAgICAgICAgICAgImlkIjogIkR1bW15T2JqZWN0IiwKKyAgICAgICAgICAgICJkZXNj
cmlwdGlvbiI6ICJBbiBvcGVuIG9iamVjdCB0aGF0IGRvZXNuJ3QgaGF2ZSBhbnkgcHJlZGVmaW5l
ZCBmaWVsZHMuIiwKKyAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIKKyAgICAgICAgfQorICAg
IF0KK30sCit7CisgICAgImRvbWFpbiI6ICJUZXN0IiwKKyAgICAiZGVzY3JpcHRpb24iOiAiVGVz
dCB0aGUgZ2VuZXJhdGlvbiBvZiBzcGVjaWFsIGJlaGF2aW9ycyB0aGF0IG9ubHkgYXBwbHkgdG8g
c3BlY2lmaWMgY2xhc3Nlcy4iLAorICAgICJ0eXBlcyI6IFsKKyAgICAgICAgeworICAgICAgICAg
ICAgImlkIjogIlVucGxlYXNhbnROYW1lIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJU
aGlzIHR5cGUgc2hvdWxkIGJlIHJlbmFtZWQgdG8gSGFwcHlOYW1lIiwKKyAgICAgICAgICAgICJ0
eXBlIjogIm9iamVjdCIsCisgICAgICAgICAgICAibWVtYmVycyI6IFsKKyAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogIm5vdGVzIiwgInR5cGUiOiAic3RyaW5nIiB9LAorICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAidGltZXN0YW1wIiwgInR5cGUiOiAibnVtYmVyIiB9LAorICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAidmFsdWVzIiwgInR5cGUiOiAib2JqZWN0IiB9CisgICAgICAgICAgICBd
CisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJQYXJhbWV0ZXJCdW5k
bGUiLAorICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKKyAgICAgICAgICAgICJwcm9wZXJ0
aWVzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6
ICJhcnJheSIsICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9IH0sCisgICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIgfSwKKyAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciIgfSwKKyAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogInZhbHVlcyIsICJ0eXBlIjogIm9iamVjdCIgfSwKKyAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJhbnkiIH0sCisgICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJlcnJvciIsICIkcmVmIjogIkRhdGFiYXNlLkVycm9yIiB9CisgICAgICAg
ICAgICBdCisgICAgICAgIH0KKyAgICBdLAorICAgICJjb21tYW5kcyI6IFsKKyAgICAgICAgewor
ICAgICAgICAgICAgIm5hbWUiOiAiYXR0ZW1wdEN1cnNlIiwKKyAgICAgICAgICAgICJwYXJhbWV0
ZXJzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY3Vyc2UiLCAiJHJlZiI6ICJVbnBs
ZWFzYW50TmFtZSIgfQorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICJyZXR1cm5zIjogWwor
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY2Vuc29yZWRDdXJzZSIsICJ0eXBlIjogInN0cmlu
ZyIsICJvcHRpb25hbCI6IHRydWUgfQorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXQor
fQorXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL3R5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbiBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy90eXBlLXJlcXVpcmluZy1ydW50aW1lLWNh
c3RzLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uODNkOTRiZTg5N2QyMmNjMDU4YmI2NDZmZWNkOWE0NzMwMzdi
NmI5MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy90eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KQEAgLTAsMCAr
MSw1MSBAQAorWworeworICAgICJkb21haW4iOiAiVGVzdCIsCisgICAgInR5cGVzIjogWworICAg
ICAgICB7CisgICAgICAgICAgICAiaWQiOiAiVHlwZU5lZWRpbmdDYXN0IiwKKyAgICAgICAgICAg
ICJ0eXBlIjogIm9iamVjdCIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiQSBkdW1teSB0
eXBlIHRoYXQgcmVxdWlyZXMgcnVudGltZSBjYXN0cywgYW5kIGZvcmNlcyBub24tcHJpbWl0aXZl
IHJlZmVyZW5jZWQgdHlwZXMgdG8gYWxzbyBlbWl0IHJ1bnRpbWUgY2FzdCBoZWxwZXJzLiIsCisg
ICAgICAgICAgICAicHJvcGVydGllcyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInN0
cmluZyIsICJ0eXBlIjogInN0cmluZyIsICJkZXNjcmlwdGlvbiI6ICJTdHJpbmcgbWVtYmVyLiIg
fSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm51bWJlciIsICJ0eXBlIjogImludGVnZXIi
LCAiZGVzY3JpcHRpb24iOiAiTnVtYmVyIG1lbWJlci4iIH0sCisgICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJhbmltYWxzIiwgIiRyZWYiOiAiQ2FzdGVkQW5pbWFscyIsICJkZXNjcmlwdGlvbiI6
ICJFbnVtIG1lbWJlci4iIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJpZCIsICIkcmVm
IjogIkNhc3RlZE9iamVjdElkIiwgImRlc2NyaXB0aW9uIjogIkFsaWFzZWQgbWVtYmVyLiIgfSwK
KyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRyZWUiLCAiJHJlZiI6ICJSZWN1cnNpdmVPYmpl
Y3QxIiwgImRlc2NyaXB0aW9uIjogIlJlY3Vyc2l2ZSBvYmplY3QgbWVtYmVyLiIgfQorICAgICAg
ICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiQ2FzdGVk
T2JqZWN0SWQiLAorICAgICAgICAgICAgInR5cGUiOiAiaW50ZWdlciIKKyAgICAgICAgfSwKKyAg
ICAgICAgeworICAgICAgICAgICAgImlkIjogIlVuY2FzdGVkT2JqZWN0SWQiLAorICAgICAgICAg
ICAgInR5cGUiOiAiaW50ZWdlciIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAg
ImlkIjogIlVuY2FzdGVkQW5pbWFscyIsCisgICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAor
ICAgICAgICAgICAgImVudW0iOiBbIlBpZ3MiLCAiQ293cyIsICJDYXRzIiwgIkhlbnMiXQorICAg
ICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiQ2FzdGVkQW5pbWFscyIsCisg
ICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAorICAgICAgICAgICAgImVudW0iOiBbIkR1Y2tz
IiwgIkhlbnMiLCAiQ3Jvd3MiLCAiRmxhbWluZ29zIl0KKyAgICAgICAgfSwKKyAgICAgICAgewor
ICAgICAgICAgICAgImlkIjogIlJlY3Vyc2l2ZU9iamVjdDEiLAorICAgICAgICAgICAgInR5cGUi
OiAib2JqZWN0IiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWworICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAib2JqIiwgIiRyZWYiOiAiUmVjdXJzaXZlT2JqZWN0MiIsICJvcHRpb25hbCI6
IHRydWUgfQorICAgICAgICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAg
ICAiaWQiOiAiUmVjdXJzaXZlT2JqZWN0MiIsCisgICAgICAgICAgICAidHlwZSI6ICJvYmplY3Qi
LAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJvYmoiLCAiJHJlZiI6ICJSZWN1cnNpdmVPYmplY3QxIiwgIm9wdGlvbmFsIjogdHJ1ZSB9Cisg
ICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdCit9CitdCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0Cmlu
ZGV4IDY0N2NlNTliNDQ5NDQ2MzAzNmUwOGE0ZGI2NGNmOTdhMWZlODZjMjguLjFkMWMyZTBlMGIz
MDc5NDViNDA0MzkzMmIyNGRjMGVlMWY1ODg1YmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC03
NTIsNiArNzUyLDIxIEBAIHNldChXZWJDb3JlX0lETF9GSUxFUwogCiBzZXQoV2ViQ29yZV9JTlNQ
RUNUT1JfU0NSSVBUU19ESVIgIiR7SkFWQVNDUklQVENPUkVfRElSfS9pbnNwZWN0b3Ivc2NyaXB0
cyIpCiAKK3NldChXZWJDb3JlX0lOU1BFQ1RPUl9QUk9UT0NPTF9TQ1JJUFRTCisgICAgJHtXZWJD
b3JlX0lOU1BFQ1RPUl9TQ1JJUFRTX0RJUn0vZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5CisgICAgJHtXZWJDb3JlX0lOU1BFQ1RPUl9TQ1JJUFRTX0RJUn0vY29kZWdlbi9n
ZW5lcmF0ZV9iYWNrZW5kX2NvbW1hbmRzLnB5CisgICAgJHtXZWJDb3JlX0lOU1BFQ1RPUl9TQ1JJ
UFRTX0RJUn0vY29kZWdlbi9nZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5Cisg
ICAgJHtXZWJDb3JlX0lOU1BFQ1RPUl9TQ1JJUFRTX0RJUn0vY29kZWdlbi9nZW5lcmF0ZV9iYWNr
ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkKKyAgICAke1dlYkNvcmVfSU5TUEVDVE9S
X1NDUklQVFNfRElSfS9jb2RlZ2VuL2dlbmVyYXRlX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVy
LnB5CisgICAgJHtXZWJDb3JlX0lOU1BFQ1RPUl9TQ1JJUFRTX0RJUn0vY29kZWdlbi9nZW5lcmF0
ZV9mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5CisgICAgJHtXZWJDb3JlX0lO
U1BFQ1RPUl9TQ1JJUFRTX0RJUn0vY29kZWdlbi9nZW5lcmF0ZV90eXBlX2J1aWxkZXJfaGVhZGVy
LnB5CisgICAgJHtXZWJDb3JlX0lOU1BFQ1RPUl9TQ1JJUFRTX0RJUn0vY29kZWdlbi9nZW5lcmF0
ZV90eXBlX2J1aWxkZXJfaW1wbGVtZW50YXRpb24ucHkKKyAgICAke1dlYkNvcmVfSU5TUEVDVE9S
X1NDUklQVFNfRElSfS9jb2RlZ2VuL2dlbmVyYXRvci5weQorICAgICR7V2ViQ29yZV9JTlNQRUNU
T1JfU0NSSVBUU19ESVJ9L2NvZGVnZW4vZ2VuZXJhdG9yX3RlbXBsYXRlcy5weQorICAgICR7V2Vi
Q29yZV9JTlNQRUNUT1JfU0NSSVBUU19ESVJ9L2NvZGVnZW4vX19pbml0X18ucHkKKyAgICAke1dl
YkNvcmVfSU5TUEVDVE9SX1NDUklQVFNfRElSfS9jb2RlZ2VuL21vZGVscy5weQorKQorCiBzZXQo
V2ViQ29yZV9JTlNQRUNUT1JfRE9NQUlOUwogICAgICR7V0VCQ09SRV9ESVJ9L2luc3BlY3Rvci9w
cm90b2NvbC9BcHBsaWNhdGlvbkNhY2hlLmpzb24KICAgICAke1dFQkNPUkVfRElSfS9pbnNwZWN0
b3IvcHJvdG9jb2wvQ1NTLmpzb24KQEAgLTMxOTUsNyArMzIxMCw3IEBAIGFkZF9jdXN0b21fY29t
bWFuZCgKICAgICBDT01NQU5EICR7UFlUSE9OX0VYRUNVVEFCTEV9ICR7V2ViQ29yZV9JTlNQRUNU
T1JfU0NSSVBUU19ESVJ9L2dlbmVyYXRlLWNvbWJpbmVkLWluc3BlY3Rvci1qc29uLnB5ICR7V2Vi
Q29yZV9JTlNQRUNUT1JfRE9NQUlOU30gPiAke0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0v
SW5zcGVjdG9yV2ViLmpzb24KICAgICBWRVJCQVRJTSkKIAotIyBBbGwgV2ViIEluc3BlY3RvciBn
ZW5lcmF0ZWQgZmlsZXMgYXJlIGNyZWF0ZWQgd2l0aCB0aGlzIG9uZSBjYWxsIHRvIENvZGVHZW5l
cmF0b3JJbnNwZWN0b3IucG0KKyMgQWxsIFdlYiBJbnNwZWN0b3IgZ2VuZXJhdGVkIGZpbGVzIGFy
ZSBjcmVhdGVkIHdpdGggdGhpcyBvbmUgY2FsbCB0byBnZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKIGFkZF9jdXN0b21fY29tbWFuZCgKICAgICBPVVRQVVQgJHtERVJJVkVE
X1NPVVJDRVNfV0VCQ09SRV9ESVJ9L0luc3BlY3RvcldlYkJhY2tlbmREaXNwYXRjaGVycy5jcHAK
ICAgICAgICAgICAgJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L0luc3BlY3RvcldlYkJh
Y2tlbmREaXNwYXRjaGVycy5oCkBAIC0zMjAzLDEzICszMjE4LDExIEBAIGFkZF9jdXN0b21fY29t
bWFuZCgKICAgICAgICAgICAgJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L0luc3BlY3Rv
cldlYkZyb250ZW5kRGlzcGF0Y2hlcnMuaAogICAgICAgICAgICAke0RFUklWRURfU09VUkNFU19X
RUJDT1JFX0RJUn0vSW5zcGVjdG9yV2ViVHlwZUJ1aWxkZXJzLmNwcAogICAgICAgICAgICAke0RF
UklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0vSW5zcGVjdG9yV2ViVHlwZUJ1aWxkZXJzLmgKLSAg
ICAgICAgICAgJHtERVJJVkVEX1NPVVJDRVNfV0VCSU5TUEVDVE9SVUlfRElSfS9Vc2VySW50ZXJm
YWNlL1Byb3RvY29sL0luc3BlY3RvcldlYkJhY2tlbmRDb21tYW5kcy5qcworICAgICAgICAgICAk
e0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0vSW5zcGVjdG9yV2ViQmFja2VuZENvbW1hbmRz
LmpzCiAgICAgTUFJTl9ERVBFTkRFTkNZICR7REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfS9J
bnNwZWN0b3JXZWIuanNvbgotICAgIERFUEVORFMgJHtXZWJDb3JlX0lOU1BFQ1RPUl9TQ1JJUFRT
X0RJUn0vQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQotICAgICAgICAgICAgJHtXZWJDb3JlX0lO
U1BFQ1RPUl9TQ1JJUFRTX0RJUn0vQ29kZUdlbmVyYXRvckluc3BlY3RvclN0cmluZ3MucHkKKyAg
ICBERVBFTkRTICR7V2ViQ29yZV9JTlNQRUNUT1JfUFJPVE9DT0xfU0NJUlBUU30KICAgICAgICAg
ICAgICR7REVSSVZFRF9TT1VSQ0VTX0pBVkFTQ1JJUFRDT1JFX0RJUn0vSW5zcGVjdG9ySlMuanNv
bgotICAgICAgICAgICAgJHtERVJJVkVEX1NPVVJDRVNfSkFWQVNDUklQVENPUkVfRElSfS9JbnNw
ZWN0b3JKU1R5cGVCdWlsZGVycy5oCi0gICAgQ09NTUFORCAke1BZVEhPTl9FWEVDVVRBQkxFfSAk
e1dlYkNvcmVfSU5TUEVDVE9SX1NDUklQVFNfRElSfS9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5
ICR7REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfS9JbnNwZWN0b3JXZWIuanNvbiAke0RFUklW
RURfU09VUkNFU19KQVZBU0NSSVBUQ09SRV9ESVJ9L0luc3BlY3RvckpTLmpzb24gLS1vdXRwdXRf
aF9kaXIgIiR7REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfSIgLS1vdXRwdXRfY3BwX2RpciAi
JHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9IiAtLW91dHB1dF9qc19kaXIgIiR7REVSSVZF
RF9TT1VSQ0VTX1dFQklOU1BFQ1RPUlVJX0RJUn0vVXNlckludGVyZmFjZS9Qcm90b2NvbCIgLS1v
dXRwdXRfdHlwZSBXZWIgLS13cml0ZV9hbHdheXMKKyAgICBDT01NQU5EICR7UFlUSE9OX0VYRUNV
VEFCTEV9ICR7V2ViQ29yZV9JTlNQRUNUT1JfU0NSSVBUU19ESVJ9L2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weSAtLW91dHB1dERpciAiJHtERVJJVkVEX1NPVVJDRVNfV0VC
Q09SRV9ESVJ9IiAtLWZyYW1ld29yayBXZWJDb3JlICR7REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVf
RElSfS9JbnNwZWN0b3JXZWIuanNvbiAke0RFUklWRURfU09VUkNFU19KQVZBU0NSSVBUQ09SRV9E
SVJ9L0luc3BlY3RvckpTLmpzb24gJiYgY3AgJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9
L0luc3BlY3RvcldlYkJhY2tlbmRDb21tYW5kcy5qcyAke0RFUklWRURfU09VUkNFU19XRUJJTlNQ
RUNUT1JVSV9ESVJ9L1VzZXJJbnRlcmZhY2UvUHJvdG9jb2wKICAgICBWRVJCQVRJTSkKIAogbGlz
dChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9EZXJp
dmVkU291cmNlcy5tYWtlIGIvU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQppbmRl
eCA2ZDhiYmRkOTA1M2Q1YWZjZTYzNzAyMGQ3MzZmYjNkMWM4YmNmZDk5Li4wOWZlODAzMGRhOTNi
OTMwNDE4ZWVmZmZiYTlmOGYzOTE1MjcwM2FlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9E
ZXJpdmVkU291cmNlcy5tYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1h
a2UKQEAgLTExNDQsOCArMTE0NCwxOCBAQCBpZmVxICgkKGZpbmRzdHJpbmcgRU5BQkxFX1dFQl9S
RVBMQVksJChGRUFUVVJFX0RFRklORVMpKSwgRU5BQkxFX1dFQl9SRVBMQVkpCiBlbmRpZgogCiBJ
TlNQRUNUT1JfR0VORVJBVE9SX1NDUklQVFMgPSBcCi0JJChJbnNwZWN0b3JTY3JpcHRzKS9Db2Rl
R2VuZXJhdG9ySW5zcGVjdG9yLnB5IFwKLQkkKEluc3BlY3RvclNjcmlwdHMpL0NvZGVHZW5lcmF0
b3JJbnNwZWN0b3JTdHJpbmdzLnB5IFwKKyAgICAkKEluc3BlY3RvclNjcmlwdHMpL2dlbmVyYXRl
X2JhY2tlbmRfY29tbWFuZHMucHkgXAorICAgICQoSW5zcGVjdG9yU2NyaXB0cykvZ2VuZXJhdGVf
YmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weSBcCisgICAgJChJbnNwZWN0b3JTY3JpcHRzKS9n
ZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkgXAorICAgICQoSW5z
cGVjdG9yU2NyaXB0cykvZ2VuZXJhdGVfZnJvbnRlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkgXAor
ICAgICQoSW5zcGVjdG9yU2NyaXB0cykvZ2VuZXJhdGVfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBs
ZW1lbnRhdGlvbi5weSBcCisgICAgJChJbnNwZWN0b3JTY3JpcHRzKS9nZW5lcmF0ZV90eXBlX2J1
aWxkZXJfaGVhZGVyLnB5IFwKKyAgICAkKEluc3BlY3RvclNjcmlwdHMpL2dlbmVyYXRlX3R5cGVf
YnVpbGRlcl9pbXBsZW1lbnRhdGlvbi5weSBcCisgICAgJChJbnNwZWN0b3JTY3JpcHRzKS9nZW5l
cmF0b3JfdGVtcGxhdGVzLnB5IFwKKyAgICAkKEluc3BlY3RvclNjcmlwdHMpL2dlbmVyYXRvci5w
eSBcCisgICAgJChJbnNwZWN0b3JTY3JpcHRzKS9nZW5lcmF0ZS1jb21iaW5lZC1pbnNwZWN0b3It
anNvbi5weSBcCisgICAgJChJbnNwZWN0b3JTY3JpcHRzKS9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkgXAorICAgICQoSW5zcGVjdG9yU2NyaXB0cykvbW9kZWxzLnB5IFwK
ICMKIAogYWxsIDogSW5zcGVjdG9yV2ViLmpzb24KQEAgLTExNjMsNyArMTE3Myw3IEBAIEluc3Bl
Y3RvcldlYi5qc29uIDogJChJbnNwZWN0b3JTY3JpcHRzKS9nZW5lcmF0ZS1jb21iaW5lZC1pbnNw
ZWN0b3ItanNvbi5weSAkKElOCiBhbGwgOiBJbnNwZWN0b3JXZWJGcm9udGVuZERpc3BhdGNoZXJz
LmgKIAogSW5zcGVjdG9yV2ViRnJvbnRlbmREaXNwYXRjaGVycy5oIDogSW5zcGVjdG9yV2ViLmpz
b24gJChJbnNwZWN0b3JTY3JpcHRzKS9JbnNwZWN0b3JKUy5qc29uICQoSU5TUEVDVE9SX0dFTkVS
QVRPUl9TQ1JJUFRTKQotCSQoUFlUSE9OKSAkKEluc3BlY3RvclNjcmlwdHMpL0NvZGVHZW5lcmF0
b3JJbnNwZWN0b3IucHkgLi9JbnNwZWN0b3JXZWIuanNvbiAkKEluc3BlY3RvclNjcmlwdHMpL0lu
c3BlY3RvckpTLmpzb24gLS1vdXRwdXRfaF9kaXIgLiAtLW91dHB1dF9jcHBfZGlyIC4gLS1vdXRw
dXRfanNfZGlyIC4gLS1vdXRwdXRfdHlwZSBXZWIKKwkkKFBZVEhPTikgJChJbnNwZWN0b3JTY3Jp
cHRzKS9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkgLS1mcmFtZXdvcmsg
V2ViQ29yZSAtLW91dHB1dERpciAuIC4vSW5zcGVjdG9yV2ViLmpzb24gJChJbnNwZWN0b3JTY3Jp
cHRzKS9JbnNwZWN0b3JKUy5qc29uCiAKIGFsbCA6IEluc3BlY3Rvck92ZXJsYXlQYWdlLmgKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvbW1hbmRMaW5lQVBJSG9zdC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29tbWFuZExpbmVBUElIb3N0LmNwcAppbmRl
eCAwMjkxMDY5NTdjMDM0YWE1NGMzMDJiYmFmNzlmMzQ3ZjU0OWFjZjk1Li41YWNkYmU3OTg1OWE1
YTIwNjI3OTU1ZTk1YjA3ZjQ1YzhkZTE5NGQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvQ29tbWFuZExpbmVBUElIb3N0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvQ29tbWFuZExpbmVBUElIb3N0LmNwcApAQCAtOTUsNyArOTUsNyBAQCB2b2lkIENvbW1h
bmRMaW5lQVBJSG9zdDo6ZGlzY29ubmVjdCgpCiB2b2lkIENvbW1hbmRMaW5lQVBJSG9zdDo6aW5z
cGVjdEltcGwoUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gb2JqZWN0LCBQYXNzUmVmUHRyPElu
c3BlY3RvclZhbHVlPiBoaW50cykKIHsKICAgICBpZiAobV9pbnNwZWN0b3JBZ2VudCkgewotICAg
ICAgICBSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UnVudGltZTo6UmVtb3RlT2JqZWN0
PiByZW1vdGVPYmplY3QgPSBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpSdW50aW1lOjpSZW1vdGVP
YmplY3Q6OnJ1bnRpbWVDYXN0KG9iamVjdCk7CisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3I6OlR5
cGVCdWlsZGVyOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+IHJlbW90ZU9iamVjdCA9IEJpbmRpbmdU
cmFpdHM8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UnVudGltZTo6UmVtb3RlT2JqZWN0Pjo6cnVu
dGltZUNhc3Qob2JqZWN0KTsKICAgICAgICAgbV9pbnNwZWN0b3JBZ2VudC0+aW5zcGVjdChyZW1v
dGVPYmplY3QsIGhpbnRzLT5hc09iamVjdCgpKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNwcAppbmRleCAwNmU1NGZiN2EwMTFjMGY1
ZmQwNzI5MTJhMzJmNDNmN2RjMjJlOGZhLi5lZjg3OGNmYTQwOWI2YzRkNDhkMzE4MTc3M2MyNWI1
MjA4ZWM2MzFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
Q1NTQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NB
Z2VudC5jcHAKQEAgLTEwMDAsOSArMTAwMCw5IEBAIEluc3BlY3RvclN0eWxlU2hlZXQqIEluc3Bl
Y3RvckNTU0FnZW50Ojphc3NlcnRTdHlsZVNoZWV0Rm9ySWQoRXJyb3JTdHJpbmcqIGVycm9yCiAg
ICAgcmV0dXJuIGl0LT52YWx1ZS5nZXQoKTsKIH0KIAotSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6
Q1NTOjpTdHlsZVNoZWV0T3JpZ2luOjpFbnVtIEluc3BlY3RvckNTU0FnZW50OjpkZXRlY3RPcmln
aW4oQ1NTU3R5bGVTaGVldCogcGFnZVN0eWxlU2hlZXQsIERvY3VtZW50KiBvd25lckRvY3VtZW50
KQorSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luIEluc3BlY3Rv
ckNTU0FnZW50OjpkZXRlY3RPcmlnaW4oQ1NTU3R5bGVTaGVldCogcGFnZVN0eWxlU2hlZXQsIERv
Y3VtZW50KiBvd25lckRvY3VtZW50KQogewotICAgIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNT
Uzo6U3R5bGVTaGVldE9yaWdpbjo6RW51bSBvcmlnaW4gPSBJbnNwZWN0b3I6OlR5cGVCdWlsZGVy
OjpDU1M6OlN0eWxlU2hlZXRPcmlnaW46OlJlZ3VsYXI7CisgICAgSW5zcGVjdG9yOjpUeXBlQnVp
bGRlcjo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luIG9yaWdpbiA9IEluc3BlY3Rvcjo6VHlwZUJ1aWxk
ZXI6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6UmVndWxhcjsKICAgICBpZiAocGFnZVN0eWxlU2hl
ZXQgJiYgIXBhZ2VTdHlsZVNoZWV0LT5vd25lck5vZGUoKSAmJiBwYWdlU3R5bGVTaGVldC0+aHJl
ZigpLmlzRW1wdHkoKSkKICAgICAgICAgb3JpZ2luID0gSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6
Q1NTOjpTdHlsZVNoZWV0T3JpZ2luOjpVc2VyQWdlbnQ7CiAgICAgZWxzZSBpZiAocGFnZVN0eWxl
U2hlZXQgJiYgcGFnZVN0eWxlU2hlZXQtPm93bmVyTm9kZSgpICYmIHBhZ2VTdHlsZVNoZWV0LT5v
d25lck5vZGUoKS0+bm9kZU5hbWUoKSA9PSAiI2RvY3VtZW50IikKQEAgLTExMDYsNyArMTEwNiw3
IEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk8SW5zcGVjdG9yOjpU
eXBlQnVpbGRlcjo6Q1NTOjpSZWdpb24+PiBJCiAgICAgUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1
aWxkZXI6OkFycmF5PEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNTUzo6UmVnaW9uPj4gcmVnaW9u
cyA9IEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5PEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6
OkNTUzo6UmVnaW9uPjo6Y3JlYXRlKCk7CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
cmVnaW9uTGlzdC0+bGVuZ3RoKCk7ICsraSkgewotICAgICAgICBJbnNwZWN0b3I6OlR5cGVCdWls
ZGVyOjpDU1M6OlJlZ2lvbjo6UmVnaW9uT3ZlcnNldDo6RW51bSByZWdpb25PdmVyc2V0OworICAg
ICAgICBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDU1M6OlJlZ2lvbjo6UmVnaW9uT3ZlcnNldCBy
ZWdpb25PdmVyc2V0OwogCiAgICAgICAgIHN3aXRjaCAodG9FbGVtZW50KHJlZ2lvbkxpc3QtPml0
ZW0oaSkpLT5yZWdpb25PdmVyc2V0U3RhdGUoKSkgewogICAgICAgICBjYXNlIFJlZ2lvbkZpdDoK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5o
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmgKaW5kZXggMzY1
MjM3ZjAzNmE2Y2Y2YmJlMWE1ZjUzMzc0Yjc1Y2U1MjYwNzhmMi4uMTc1NWQ3MjBjMzE1ZTJlZDhj
MWRhNjA0ZjIwNWY2YmJkZTlkMDE1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckNTU0FnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckNTU0FnZW50LmgKQEAgLTE0OSw3ICsxNDksNyBAQCBwcml2YXRlOgogICAgIEluc3Bl
Y3RvclN0eWxlU2hlZXQqIGJpbmRTdHlsZVNoZWV0KENTU1N0eWxlU2hlZXQqKTsKICAgICBJbnNw
ZWN0b3JTdHlsZVNoZWV0KiB2aWFJbnNwZWN0b3JTdHlsZVNoZWV0KERvY3VtZW50KiwgYm9vbCBj
cmVhdGVJZkFic2VudCk7CiAgICAgSW5zcGVjdG9yU3R5bGVTaGVldCogYXNzZXJ0U3R5bGVTaGVl
dEZvcklkKEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJik7Ci0gICAgSW5zcGVjdG9yOjpUeXBl
QnVpbGRlcjo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luOjpFbnVtIGRldGVjdE9yaWdpbihDU1NTdHls
ZVNoZWV0KiBwYWdlU3R5bGVTaGVldCwgRG9jdW1lbnQqIG93bmVyRG9jdW1lbnQpOworICAgIElu
c3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNTUzo6U3R5bGVTaGVldE9yaWdpbiBkZXRlY3RPcmlnaW4o
Q1NTU3R5bGVTaGVldCogcGFnZVN0eWxlU2hlZXQsIERvY3VtZW50KiBvd25lckRvY3VtZW50KTsK
IAogICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q1NTOjpDU1NSdWxlPiBi
dWlsZE9iamVjdEZvclJ1bGUoU3R5bGVSdWxlKiwgU3R5bGVSZXNvbHZlciYpOwogICAgIFBhc3NS
ZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q1NTOjpDU1NSdWxlPiBidWlsZE9iamVjdEZv
clJ1bGUoQ1NTU3R5bGVSdWxlKik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckRPTUFnZW50LmNwcAppbmRleCA2ODExYzIwMjJhNTZlMzJmOTQ1MzJlMmNlMGI5Zjg1MmVi
ZDg4MWNjLi4xZTZjMDY0NDFlYWFkY2FkZjE5ZDBkZWZjMGZkZWYyNzgxMjFhZmVkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAKQEAgLTE0NDQs
NyArMTQ0NCw3IEBAIFBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkRPTTo6QWNjZXNzaWJpbGl0eVBy
b3BlcnRpZXM+IEluc3BlY3RvckRPTUFnZW50OjpidWlsZE9iCiAKICAgICBOb2RlKiBhY3RpdmVE
ZXNjZW5kYW50Tm9kZSA9IG51bGxwdHI7CiAgICAgYm9vbCBidXN5ID0gZmFsc2U7Ci0gICAgVHlw
ZUJ1aWxkZXI6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6OkNoZWNrZWQ6OkVudW0gY2hl
Y2tlZCA9IFR5cGVCdWlsZGVyOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpDaGVja2Vk
OjpGYWxzZTsKKyAgICBUeXBlQnVpbGRlcjo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6
Q2hlY2tlZCBjaGVja2VkID0gVHlwZUJ1aWxkZXI6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRp
ZXM6OkNoZWNrZWQ6OkZhbHNlOwogICAgIFJlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpB
cnJheTxpbnQ+PiBjaGlsZE5vZGVJZHM7CiAgICAgUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxk
ZXI6OkFycmF5PGludD4+IGNvbnRyb2xsZWROb2RlSWRzOwogICAgIGJvb2wgZXhpc3RzID0gZmFs
c2U7CkBAIC0xNDU0LDExICsxNDU0LDExIEBAIFBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkRPTTo6
QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM+IEluc3BlY3RvckRPTUFnZW50OjpidWlsZE9iCiAgICAg
Ym9vbCBmb2N1c2VkID0gZmFsc2U7CiAgICAgYm9vbCBpZ25vcmVkID0gdHJ1ZTsKICAgICBib29s
IGlnbm9yZWRCeURlZmF1bHQgPSBmYWxzZTsKLSAgICBUeXBlQnVpbGRlcjo6RE9NOjpBY2Nlc3Np
YmlsaXR5UHJvcGVydGllczo6SW52YWxpZDo6RW51bSBpbnZhbGlkID0gVHlwZUJ1aWxkZXI6OkRP
TTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6OkludmFsaWQ6OkZhbHNlOworICAgIFR5cGVCdWls
ZGVyOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpJbnZhbGlkIGludmFsaWQgPSBUeXBl
QnVpbGRlcjo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6SW52YWxpZDo6RmFsc2U7CiAg
ICAgYm9vbCBoaWRkZW4gPSBmYWxzZTsKICAgICBTdHJpbmcgbGFiZWw7IC8vIEZJWE1FOiBXYWl0
aW5nIG9uIGh0dHA6Ly93ZWJraXQub3JnL2IvMTIxMTM0CiAgICAgYm9vbCBsaXZlUmVnaW9uQXRv
bWljID0gZmFsc2U7Ci0gICAgVHlwZUJ1aWxkZXI6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRp
ZXM6OkxpdmVSZWdpb25TdGF0dXM6OkVudW0gbGl2ZVJlZ2lvblN0YXR1cyA9IFR5cGVCdWlsZGVy
OjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpMaXZlUmVnaW9uU3RhdHVzOjpPZmY7Cisg
ICAgVHlwZUJ1aWxkZXI6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6OkxpdmVSZWdpb25T
dGF0dXMgbGl2ZVJlZ2lvblN0YXR1cyA9IFR5cGVCdWlsZGVyOjpET006OkFjY2Vzc2liaWxpdHlQ
cm9wZXJ0aWVzOjpMaXZlUmVnaW9uU3RhdHVzOjpPZmY7CiAgICAgTm9kZSogbW91c2VFdmVudE5v
ZGUgPSBudWxscHRyOwogICAgIFJlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheTxp
bnQ+PiBvd25lZE5vZGVJZHM7CiAgICAgTm9kZSogcGFyZW50Tm9kZSA9IG51bGxwdHI7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCmluZGV4IDQ1
YmYwZWVlODQ2Zjc3MDllZDQyZTI3NGZkMTE3Zjk2NDgyNDE4ZGUuLjI4YmI5MTk3ZjdjMGYwMTFj
MDhjOWUxNGY5ZmNhMDY4NjJhODRiMTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCkBAIC0yODcsNyArMjg3LDcgQEAgQ2FjaGVkUmVzb3Vy
Y2UqIEluc3BlY3RvclBhZ2VBZ2VudDo6Y2FjaGVkUmVzb3VyY2UoRnJhbWUqIGZyYW1lLCBjb25z
dCBVUkwmIHVybCkKICAgICByZXR1cm4gY2FjaGVkUmVzb3VyY2U7CiB9CiAKLUluc3BlY3Rvcjo6
VHlwZUJ1aWxkZXI6OlBhZ2U6OlJlc291cmNlVHlwZTo6RW51bSBJbnNwZWN0b3JQYWdlQWdlbnQ6
OnJlc291cmNlVHlwZUpzb24oSW5zcGVjdG9yUGFnZUFnZW50OjpSZXNvdXJjZVR5cGUgcmVzb3Vy
Y2VUeXBlKQorSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UGFnZTo6UmVzb3VyY2VUeXBlIEluc3Bl
Y3RvclBhZ2VBZ2VudDo6cmVzb3VyY2VUeXBlSnNvbihJbnNwZWN0b3JQYWdlQWdlbnQ6OlJlc291
cmNlVHlwZSByZXNvdXJjZVR5cGUpCiB7CiAgICAgc3dpdGNoIChyZXNvdXJjZVR5cGUpIHsKICAg
ICBjYXNlIERvY3VtZW50UmVzb3VyY2U6CkBAIC0zMzUsNyArMzM1LDcgQEAgSW5zcGVjdG9yUGFn
ZUFnZW50OjpSZXNvdXJjZVR5cGUgSW5zcGVjdG9yUGFnZUFnZW50OjpjYWNoZWRSZXNvdXJjZVR5
cGUoY29uc3QgQ2EKICAgICByZXR1cm4gSW5zcGVjdG9yUGFnZUFnZW50OjpPdGhlclJlc291cmNl
OwogfQogCi1JbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpQYWdlOjpSZXNvdXJjZVR5cGU6OkVudW0g
SW5zcGVjdG9yUGFnZUFnZW50OjpjYWNoZWRSZXNvdXJjZVR5cGVKc29uKGNvbnN0IENhY2hlZFJl
c291cmNlJiBjYWNoZWRSZXNvdXJjZSkKK0luc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlBhZ2U6OlJl
c291cmNlVHlwZSBJbnNwZWN0b3JQYWdlQWdlbnQ6OmNhY2hlZFJlc291cmNlVHlwZUpzb24oY29u
c3QgQ2FjaGVkUmVzb3VyY2UmIGNhY2hlZFJlc291cmNlKQogewogICAgIHJldHVybiByZXNvdXJj
ZVR5cGVKc29uKGNhY2hlZFJlc291cmNlVHlwZShjYWNoZWRSZXNvdXJjZSkpOwogfQpAQCAtNzA2
LDcgKzcwNiw3IEBAIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpzZXRDb250aW51b3VzUGFpbnRp
bmdFbmFibGVkKEVycm9yU3RyaW5nKiwgYm9vbCBlbmFibGVkCiAgICAgICAgIG1haW5GcmFtZSgp
LT52aWV3KCktPmludmFsaWRhdGUoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6Omdl
dFNjcmlwdEV4ZWN1dGlvblN0YXR1cyhFcnJvclN0cmluZyosIEluc3BlY3RvclBhZ2VCYWNrZW5k
RGlzcGF0Y2hlckhhbmRsZXI6OlJlc3VsdDo6RW51bSogc3RhdHVzKQordm9pZCBJbnNwZWN0b3JQ
YWdlQWdlbnQ6OmdldFNjcmlwdEV4ZWN1dGlvblN0YXR1cyhFcnJvclN0cmluZyosIEluc3BlY3Rv
clBhZ2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlJlc3VsdCogc3RhdHVzKQogewogICAgIGJv
b2wgZGlzYWJsZWRCeVNjcmlwdENvbnRyb2xsZXIgPSBmYWxzZTsKICAgICBib29sIGRpc2FibGVk
SW5TZXR0aW5ncyA9IGZhbHNlOwpAQCAtOTYzLDEzICs5NjMsMTMgQEAgUGFzc1JlZlB0cjxJbnNw
ZWN0b3I6OlR5cGVCdWlsZGVyOjpQYWdlOjpGcmFtZT4gSW5zcGVjdG9yUGFnZUFnZW50OjpidWls
ZE9iamVjdEYKIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UGFnZTo6RnJhbWVS
ZXNvdXJjZVRyZWU+IEluc3BlY3RvclBhZ2VBZ2VudDo6YnVpbGRPYmplY3RGb3JGcmFtZVRyZWUo
RnJhbWUqIGZyYW1lKQogewogICAgIFJlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpQYWdl
OjpGcmFtZT4gZnJhbWVPYmplY3QgPSBidWlsZE9iamVjdEZvckZyYW1lKGZyYW1lKTsKLSAgICBS
ZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk8SW5zcGVjdG9yOjpUeXBlQnVpbGRl
cjo6UGFnZTo6RnJhbWVSZXNvdXJjZVRyZWU6OlJlc291cmNlcz4+IHN1YnJlc291cmNlcyA9IElu
c3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5PEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlBhZ2U6
OkZyYW1lUmVzb3VyY2VUcmVlOjpSZXNvdXJjZXM+OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8SW5z
cGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UGFnZTo6
RnJhbWVSZXNvdXJjZT4+IHN1YnJlc291cmNlcyA9IEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFy
cmF5PEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlBhZ2U6OkZyYW1lUmVzb3VyY2U+OjpjcmVhdGUo
KTsKICAgICBSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UGFnZTo6RnJhbWVSZXNvdXJj
ZVRyZWU+IHJlc3VsdCA9IEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlBhZ2U6OkZyYW1lUmVzb3Vy
Y2VUcmVlOjpjcmVhdGUoKQogICAgICAgICAgLnNldEZyYW1lKGZyYW1lT2JqZWN0KQogICAgICAg
ICAgLnNldFJlc291cmNlcyhzdWJyZXNvdXJjZXMpOwogCiAgICAgZm9yIChhdXRvKiBjYWNoZWRS
ZXNvdXJjZSA6IGNhY2hlZFJlc291cmNlc0ZvckZyYW1lKGZyYW1lKSkgewotICAgICAgICBSZWZQ
dHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UGFnZTo6RnJhbWVSZXNvdXJjZVRyZWU6OlJlc291
cmNlcz4gcmVzb3VyY2VPYmplY3QgPSBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpQYWdlOjpGcmFt
ZVJlc291cmNlVHJlZTo6UmVzb3VyY2VzOjpjcmVhdGUoKQorICAgICAgICBSZWZQdHI8SW5zcGVj
dG9yOjpUeXBlQnVpbGRlcjo6UGFnZTo6RnJhbWVSZXNvdXJjZT4gcmVzb3VyY2VPYmplY3QgPSBJ
bnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpQYWdlOjpGcmFtZVJlc291cmNlOjpjcmVhdGUoKQogICAg
ICAgICAgICAgLnNldFVybChjYWNoZWRSZXNvdXJjZS0+dXJsKCkpCiAgICAgICAgICAgICAuc2V0
VHlwZShjYWNoZWRSZXNvdXJjZVR5cGVKc29uKCpjYWNoZWRSZXNvdXJjZSkpCiAgICAgICAgICAg
ICAuc2V0TWltZVR5cGUoY2FjaGVkUmVzb3VyY2UtPnJlc3BvbnNlKCkubWltZVR5cGUoKSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmgKaW5kZXggY2E0
ZmYyZjAwM2NlYmE5ODE2OGQwNzc5OTMzNGM1ZmJkNWM5YTMxMS4uOWY4N2QyMjlkNDM2NzA5NmYy
ODYwMzgxZWYyM2QzYjIyNTMxOTRiNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvclBhZ2VBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JQYWdlQWdlbnQuaApAQCAtOTAsOSArOTAsOSBAQCBwdWJsaWM6CiAKICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IHJlc291cmNlRGF0YShGcmFtZSosIGNvbnN0IFVS
TCYsIFN0cmluZyogdGV4dEVuY29kaW5nTmFtZSk7CiAgICAgc3RhdGljIENhY2hlZFJlc291cmNl
KiBjYWNoZWRSZXNvdXJjZShGcmFtZSosIGNvbnN0IFVSTCYpOwotICAgIHN0YXRpYyBJbnNwZWN0
b3I6OlR5cGVCdWlsZGVyOjpQYWdlOjpSZXNvdXJjZVR5cGU6OkVudW0gcmVzb3VyY2VUeXBlSnNv
bihSZXNvdXJjZVR5cGUpOworICAgIHN0YXRpYyBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpQYWdl
OjpSZXNvdXJjZVR5cGUgcmVzb3VyY2VUeXBlSnNvbihSZXNvdXJjZVR5cGUpOwogICAgIHN0YXRp
YyBSZXNvdXJjZVR5cGUgY2FjaGVkUmVzb3VyY2VUeXBlKGNvbnN0IENhY2hlZFJlc291cmNlJik7
Ci0gICAgc3RhdGljIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlBhZ2U6OlJlc291cmNlVHlwZTo6
RW51bSBjYWNoZWRSZXNvdXJjZVR5cGVKc29uKGNvbnN0IENhY2hlZFJlc291cmNlJik7CisgICAg
c3RhdGljIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlBhZ2U6OlJlc291cmNlVHlwZSBjYWNoZWRS
ZXNvdXJjZVR5cGVKc29uKGNvbnN0IENhY2hlZFJlc291cmNlJik7CiAKICAgICAvLyBQYWdlIEFQ
SSBmb3IgSW5zcGVjdG9yRnJvbnRlbmQKICAgICB2aXJ0dWFsIHZvaWQgZW5hYmxlKEVycm9yU3Ry
aW5nKikgb3ZlcnJpZGU7CkBAIC0xMTUsNyArMTE1LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
dm9pZCBzZXRTaG93RlBTQ291bnRlcihFcnJvclN0cmluZyosIGJvb2wgc2hvdykgb3ZlcnJpZGU7
CiAgICAgdmlydHVhbCB2b2lkIGNhbkNvbnRpbnVvdXNseVBhaW50KEVycm9yU3RyaW5nKiwgYm9v
bCopIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBzZXRDb250aW51b3VzUGFpbnRpbmdFbmFi
bGVkKEVycm9yU3RyaW5nKiwgYm9vbCBlbmFibGVkKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZv
aWQgZ2V0U2NyaXB0RXhlY3V0aW9uU3RhdHVzKEVycm9yU3RyaW5nKiwgSW5zcGVjdG9yOjpJbnNw
ZWN0b3JQYWdlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpSZXN1bHQ6OkVudW0qKSBvdmVycmlk
ZTsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0U2NyaXB0RXhlY3V0aW9uU3RhdHVzKEVycm9yU3RyaW5n
KiwgSW5zcGVjdG9yOjpJbnNwZWN0b3JQYWdlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpSZXN1
bHQqKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0U2NyaXB0RXhlY3V0aW9uRGlzYWJs
ZWQoRXJyb3JTdHJpbmcqLCBib29sKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0VG91
Y2hFbXVsYXRpb25FbmFibGVkKEVycm9yU3RyaW5nKiwgYm9vbCkgb3ZlcnJpZGU7CiAgICAgdmly
dHVhbCB2b2lkIHNldEVtdWxhdGVkTWVkaWEoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmKSBv
dmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JS
ZXNvdXJjZUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXNv
dXJjZUFnZW50LmNwcAppbmRleCAwNDZmZjA1MWNkODAxNmFmMjNhNmNlYTI1ZTM0ZWRjNWUxMmNk
NmI3Li4xMjQwMGFjYWIzNzY1ZDg5MWVlNjYxMDVlN2QyZDdhMzNjMGU1OWMyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlQWdlbnQuY3BwCkBA
IC0zMTYsNyArMzE2LDcgQEAgdm9pZCBJbnNwZWN0b3JSZXNvdXJjZUFnZW50Ojp3aWxsU2VuZFJl
cXVlc3QodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBEb2N1bWVudEwKICAgICAgICAgcmVxdWVz
dC5zZXRIVFRQSGVhZGVyRmllbGQoIkNhY2hlLUNvbnRyb2wiLCAibm8tY2FjaGUiKTsKICAgICB9
CiAKLSAgICBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpQYWdlOjpSZXNvdXJjZVR5cGU6OkVudW0g
cmVzb3VyY2VUeXBlID0gSW5zcGVjdG9yUGFnZUFnZW50OjpyZXNvdXJjZVR5cGVKc29uKHR5cGUp
OworICAgIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlBhZ2U6OlJlc291cmNlVHlwZSByZXNvdXJj
ZVR5cGUgPSBJbnNwZWN0b3JQYWdlQWdlbnQ6OnJlc291cmNlVHlwZUpzb24odHlwZSk7CiAKICAg
ICBSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6TmV0d29yazo6SW5pdGlhdG9yPiBpbml0
aWF0b3JPYmplY3QgPSBidWlsZEluaXRpYXRvck9iamVjdChsb2FkZXItPmZyYW1lKCkgPyBsb2Fk
ZXItPmZyYW1lKCktPmRvY3VtZW50KCkgOiBudWxscHRyKTsKICAgICBtX2Zyb250ZW5kRGlzcGF0
Y2hlci0+cmVxdWVzdFdpbGxCZVNlbnQocmVxdWVzdElkLCBtX3BhZ2VBZ2VudC0+ZnJhbWVJZChs
b2FkZXItPmZyYW1lKCkpLCBtX3BhZ2VBZ2VudC0+bG9hZGVySWQobG9hZGVyKSwgbG9hZGVyLT51
cmwoKS5zdHJpbmcoKSwgYnVpbGRPYmplY3RGb3JSZXNvdXJjZVJlcXVlc3QocmVxdWVzdCksIGN1
cnJlbnRUaW1lKCksIGluaXRpYXRvck9iamVjdCwgYnVpbGRPYmplY3RGb3JSZXNvdXJjZVJlc3Bv
bnNlKHJlZGlyZWN0UmVzcG9uc2UsIGxvYWRlciksIHR5cGUgIT0gSW5zcGVjdG9yUGFnZUFnZW50
OjpPdGhlclJlc291cmNlID8gJnJlc291cmNlVHlwZSA6IG51bGxwdHIpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwCmluZGV4IDg5NjE5YjRi
NDFhOWVhYjFlYjExMjcyODRiZTE3OTYxOWVmYzU2MTguLjhhY2UzZjlmMWY5NWJhY2YwY2MzN2Yz
NzA2ODk4MzUzZmRmZWQyNDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JTdHlsZVNoZWV0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yU3R5bGVTaGVldC5jcHAKQEAgLTE2Niw3ICsxNjYsNyBAQCBzdGF0aWMgUGFzc1JlZlB0
cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDU1M6OlNvdXJjZVJhbmdlPiBidWlsZFNvdXJjZVJh
bmdlT2JqZQogc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q1NTOjpD
U1NNZWRpYT4gYnVpbGRNZWRpYU9iamVjdChjb25zdCBNZWRpYUxpc3QqIG1lZGlhLCBNZWRpYUxp
c3RTb3VyY2UgbWVkaWFMaXN0U291cmNlLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCkKIHsKICAg
ICAvLyBNYWtlIGNlcnRhaW4gY29tcGlsZXJzIGhhcHB5IGJ5IGluaXRpYWxpemluZyB8c291cmNl
fCB1cC1mcm9udC4KLSAgICBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDU1M6OkNTU01lZGlhOjpT
b3VyY2U6OkVudW0gc291cmNlID0gSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q1NTOjpDU1NNZWRp
YTo6U291cmNlOjpJbmxpbmVTaGVldDsKKyAgICBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDU1M6
OkNTU01lZGlhOjpTb3VyY2Ugc291cmNlID0gSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q1NTOjpD
U1NNZWRpYTo6U291cmNlOjpJbmxpbmVTaGVldDsKICAgICBzd2l0Y2ggKG1lZGlhTGlzdFNvdXJj
ZSkgewogICAgIGNhc2UgTWVkaWFMaXN0U291cmNlTWVkaWFSdWxlOgogICAgICAgICBzb3VyY2Ug
PSBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDU1M6OkNTU01lZGlhOjpTb3VyY2U6Ok1lZGlhUnVs
ZTsKQEAgLTUyOCw3ICs1MjgsNyBAQCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6
OkNTUzo6Q1NTU3R5bGU+IEluc3BlY3RvclN0eWxlOjpzdHlsZVdpdGhQcm9wZQogICAgICAgICBj
b25zdCBDU1NQcm9wZXJ0eVNvdXJjZURhdGEmIHByb3BlcnR5RW50cnkgPSBpdC0+c291cmNlRGF0
YTsKICAgICAgICAgY29uc3QgU3RyaW5nJiBuYW1lID0gcHJvcGVydHlFbnRyeS5uYW1lOwogCi0g
ICAgICAgIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTUHJvcGVydHk6OlN0YXR1czo6
RW51bSBzdGF0dXMgPSBpdC0+ZGlzYWJsZWQgPyBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDU1M6
OkNTU1Byb3BlcnR5OjpTdGF0dXM6OkRpc2FibGVkIDogSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6
Q1NTOjpDU1NQcm9wZXJ0eTo6U3RhdHVzOjpBY3RpdmU7CisgICAgICAgIGVudW0gVHlwZUJ1aWxk
ZXI6OkNTUzo6Q1NTUHJvcGVydHlTdGF0dXMgc3RhdHVzID0gKGl0LT5kaXNhYmxlZCkgPyBJbnNw
ZWN0b3I6OlR5cGVCdWlsZGVyOjpDU1M6OkNTU1Byb3BlcnR5U3RhdHVzOjpEaXNhYmxlZCA6IElu
c3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTUHJvcGVydHlTdGF0dXM6OkFjdGl2ZTsKIAog
ICAgICAgICBSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q1NTOjpDU1NQcm9wZXJ0eT4g
cHJvcGVydHkgPSBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDU1M6OkNTU1Byb3BlcnR5OjpjcmVh
dGUoKQogICAgICAgICAgICAgLnNldE5hbWUobmFtZSkKQEAgLTU3MSw5ICs1NzEsOSBAQCBQYXNz
UmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTU3R5bGU+IEluc3BlY3RvclN0
eWxlOjpzdHlsZVdpdGhQcm9wZQogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Y2Nlc3NT
dGF0dXMgJiYgcHJldmlvdXNTdGF0dXMgIT0gImluYWN0aXZlIikgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChwcm9wZXJ0eUVudHJ5LmltcG9ydGFudCB8fCAhc3VjY2Vzc1ByaW9y
aXR5KSAvLyBQcmlvcml0eSBub3Qgc2V0ID09ICJub3QgaW1wb3J0YW50Ii4KICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2hvdWxkSW5hY3RpdmF0ZSA9IHRydWU7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoc3RhdHVzID09IEluc3BlY3Rvcjo6VHlwZUJ1aWxk
ZXI6OkNTUzo6Q1NTUHJvcGVydHk6OlN0YXR1czo6QWN0aXZlKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZWxzZSBpZiAoc3RhdHVzID09IEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNT
Uzo6Q1NTUHJvcGVydHlTdGF0dXM6OkFjdGl2ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBJbmFjdGl2YXRlIGEgbm9uLWltcG9ydGFudCBwcm9wZXJ0eSBmb2xsb3dpbmcg
dGhlIHNhbWUtbmFtZWQgaW1wb3J0YW50IHByb3BlcnR5LgotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdGF0dXMgPSBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDU1M6OkNTU1Byb3Bl
cnR5OjpTdGF0dXM6OkluYWN0aXZlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dGF0dXMgPSBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDU1M6OkNTU1Byb3BlcnR5U3RhdHVzOjpJ
bmFjdGl2ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CkBAIC01ODYsNyArNTg2LDcg
QEAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDU1M6OkNTU1N0eWxlPiBJbnNw
ZWN0b3JTdHlsZTo6c3R5bGVXaXRoUHJvcGUKICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlO
YW1lVG9QcmV2aW91c0FjdGl2ZVByb3BlcnR5LnNldChjYW5vbmljYWxQcm9wZXJ0eU5hbWUsIHBy
b3BlcnR5KTsKIAogICAgICAgICAgICAgICAgIGlmIChzaG91bGRJbmFjdGl2YXRlKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGFjdGl2ZUl0LT52YWx1ZS0+c2V0U3RhdHVzKEluc3BlY3Rvcjo6VHlw
ZUJ1aWxkZXI6OkNTUzo6Q1NTUHJvcGVydHk6OlN0YXR1czo6SW5hY3RpdmUpOworICAgICAgICAg
ICAgICAgICAgICBhY3RpdmVJdC0+dmFsdWUtPnNldFN0YXR1cyhJbnNwZWN0b3I6OlR5cGVCdWls
ZGVyOjpDU1M6OkNTU1Byb3BlcnR5U3RhdHVzOjpJbmFjdGl2ZSk7CiAgICAgICAgICAgICAgICAg
ICAgIHByb3BlcnR5TmFtZVRvUHJldmlvdXNBY3RpdmVQcm9wZXJ0eS5zZXQoY2Fub25pY2FsUHJv
cGVydHlOYW1lLCBwcm9wZXJ0eSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBl
bHNlIHsKQEAgLTU5NCw3ICs1OTQsNyBAQCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxk
ZXI6OkNTUzo6Q1NTU3R5bGU+IEluc3BlY3RvclN0eWxlOjpzdHlsZVdpdGhQcm9wZQogICAgICAg
ICAgICAgICAgIC8vIERlZmF1bHQgImltcGxpY2l0IiA9PSBmYWxzZS4KICAgICAgICAgICAgICAg
ICBpZiAoaW1wbGljaXQpCiAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5LT5zZXRJbXBsaWNp
dCh0cnVlKTsKLSAgICAgICAgICAgICAgICBzdGF0dXMgPSBJbnNwZWN0b3I6OlR5cGVCdWlsZGVy
OjpDU1M6OkNTU1Byb3BlcnR5OjpTdGF0dXM6OlN0eWxlOworICAgICAgICAgICAgICAgIHN0YXR1
cyA9IEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTUHJvcGVydHlTdGF0dXM6OlN0eWxl
OwogCiAgICAgICAgICAgICAgICAgU3RyaW5nIHNob3J0aGFuZCA9IG1fc3R5bGUtPmdldFByb3Bl
cnR5U2hvcnRoYW5kKG5hbWUpOwogICAgICAgICAgICAgICAgIGlmICghc2hvcnRoYW5kLmlzRW1w
dHkoKSkgewpAQCAtNjEwLDcgKzYxMCw3IEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVp
bGRlcjo6Q1NTOjpDU1NTdHlsZT4gSW5zcGVjdG9yU3R5bGU6OnN0eWxlV2l0aFByb3BlCiAgICAg
ICAgIH0KIAogICAgICAgICAvLyBEZWZhdWx0ICJzdGF0dXMiID09ICJzdHlsZSIuCi0gICAgICAg
IGlmIChzdGF0dXMgIT0gSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q1NTOjpDU1NQcm9wZXJ0eTo6
U3RhdHVzOjpTdHlsZSkKKyAgICAgICAgaWYgKHN0YXR1cyAhPSBJbnNwZWN0b3I6OlR5cGVCdWls
ZGVyOjpDU1M6OkNTU1Byb3BlcnR5U3RhdHVzOjpTdHlsZSkKICAgICAgICAgICAgIHByb3BlcnR5
LT5zZXRTdGF0dXMoc3RhdHVzKTsKICAgICB9CiAKQEAgLTc0OSw3ICs3NDksNyBAQCBOZXdMaW5l
QW5kV2hpdGVzcGFjZSYgSW5zcGVjdG9yU3R5bGU6Om5ld0xpbmVBbmRXaGl0ZXNwYWNlRGVsaW1p
dGVycygpIGNvbnN0CiAgICAgcmV0dXJuIG1fZm9ybWF0OwogfQogCi1QYXNzUmVmUHRyPEluc3Bl
Y3RvclN0eWxlU2hlZXQ+IEluc3BlY3RvclN0eWxlU2hlZXQ6OmNyZWF0ZShJbnNwZWN0b3JQYWdl
QWdlbnQqIHBhZ2VBZ2VudCwgY29uc3QgU3RyaW5nJiBpZCwgUGFzc1JlZlB0cjxDU1NTdHlsZVNo
ZWV0PiBwYWdlU3R5bGVTaGVldCwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q1NTOjpTdHlsZVNo
ZWV0T3JpZ2luOjpFbnVtIG9yaWdpbiwgY29uc3QgU3RyaW5nJiBkb2N1bWVudFVSTCwgTGlzdGVu
ZXIqIGxpc3RlbmVyKQorUGFzc1JlZlB0cjxJbnNwZWN0b3JTdHlsZVNoZWV0PiBJbnNwZWN0b3JT
dHlsZVNoZWV0OjpjcmVhdGUoSW5zcGVjdG9yUGFnZUFnZW50KiBwYWdlQWdlbnQsIGNvbnN0IFN0
cmluZyYgaWQsIFBhc3NSZWZQdHI8Q1NTU3R5bGVTaGVldD4gcGFnZVN0eWxlU2hlZXQsIEluc3Bl
Y3Rvcjo6VHlwZUJ1aWxkZXI6OkNTUzo6U3R5bGVTaGVldE9yaWdpbiBvcmlnaW4sIGNvbnN0IFN0
cmluZyYgZG9jdW1lbnRVUkwsIExpc3RlbmVyKiBsaXN0ZW5lcikKIHsKICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IEluc3BlY3RvclN0eWxlU2hlZXQocGFnZUFnZW50LCBpZCwgcGFnZVN0eWxlU2hl
ZXQsIG9yaWdpbiwgZG9jdW1lbnRVUkwsIGxpc3RlbmVyKSk7CiB9CkBAIC03NjIsNyArNzYyLDcg
QEAgU3RyaW5nIEluc3BlY3RvclN0eWxlU2hlZXQ6OnN0eWxlU2hlZXRVUkwoQ1NTU3R5bGVTaGVl
dCogcGFnZVN0eWxlU2hlZXQpCiAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CiB9CiAKLUluc3Bl
Y3RvclN0eWxlU2hlZXQ6Okluc3BlY3RvclN0eWxlU2hlZXQoSW5zcGVjdG9yUGFnZUFnZW50KiBw
YWdlQWdlbnQsIGNvbnN0IFN0cmluZyYgaWQsIFBhc3NSZWZQdHI8Q1NTU3R5bGVTaGVldD4gcGFn
ZVN0eWxlU2hlZXQsIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNTUzo6U3R5bGVTaGVldE9yaWdp
bjo6RW51bSBvcmlnaW4sIGNvbnN0IFN0cmluZyYgZG9jdW1lbnRVUkwsIExpc3RlbmVyKiBsaXN0
ZW5lcikKK0luc3BlY3RvclN0eWxlU2hlZXQ6Okluc3BlY3RvclN0eWxlU2hlZXQoSW5zcGVjdG9y
UGFnZUFnZW50KiBwYWdlQWdlbnQsIGNvbnN0IFN0cmluZyYgaWQsIFBhc3NSZWZQdHI8Q1NTU3R5
bGVTaGVldD4gcGFnZVN0eWxlU2hlZXQsIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNTUzo6U3R5
bGVTaGVldE9yaWdpbiBvcmlnaW4sIGNvbnN0IFN0cmluZyYgZG9jdW1lbnRVUkwsIExpc3RlbmVy
KiBsaXN0ZW5lcikKICAgICA6IG1fcGFnZUFnZW50KHBhZ2VBZ2VudCkKICAgICAsIG1faWQoaWQp
CiAgICAgLCBtX3BhZ2VTdHlsZVNoZWV0KHBhZ2VTdHlsZVNoZWV0KQpAQCAtMTQyNiwxMiArMTQy
NiwxMiBAQCB2b2lkIEluc3BlY3RvclN0eWxlU2hlZXQ6OmNvbGxlY3RGbGF0UnVsZXMoUGFzc1Jl
ZlB0cjxDU1NSdWxlTGlzdD4gcnVsZUxpc3QsIENTUwogICAgIH0KIH0KIAotUGFzc1JlZlB0cjxJ
bnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU+IEluc3BlY3RvclN0eWxlU2hlZXRGb3JJ
bmxpbmVTdHlsZTo6Y3JlYXRlKEluc3BlY3RvclBhZ2VBZ2VudCogcGFnZUFnZW50LCBjb25zdCBT
dHJpbmcmIGlkLCBQYXNzUmVmUHRyPEVsZW1lbnQ+IGVsZW1lbnQsIEluc3BlY3Rvcjo6VHlwZUJ1
aWxkZXI6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6RW51bSBvcmlnaW4sIExpc3RlbmVyKiBsaXN0
ZW5lcikKK1Bhc3NSZWZQdHI8SW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlPiBJbnNw
ZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU6OmNyZWF0ZShJbnNwZWN0b3JQYWdlQWdlbnQq
IHBhZ2VBZ2VudCwgY29uc3QgU3RyaW5nJiBpZCwgUGFzc1JlZlB0cjxFbGVtZW50PiBlbGVtZW50
LCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW4gb3JpZ2luLCBM
aXN0ZW5lciogbGlzdGVuZXIpCiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnNwZWN0b3JT
dHlsZVNoZWV0Rm9ySW5saW5lU3R5bGUocGFnZUFnZW50LCBpZCwgZWxlbWVudCwgb3JpZ2luLCBs
aXN0ZW5lcikpOwogfQogCi1JbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU6Okluc3Bl
Y3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZShJbnNwZWN0b3JQYWdlQWdlbnQqIHBhZ2VBZ2Vu
dCwgY29uc3QgU3RyaW5nJiBpZCwgUGFzc1JlZlB0cjxFbGVtZW50PiBlbGVtZW50LCBJbnNwZWN0
b3I6OlR5cGVCdWlsZGVyOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW46OkVudW0gb3JpZ2luLCBMaXN0
ZW5lciogbGlzdGVuZXIpCitJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU6Okluc3Bl
Y3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZShJbnNwZWN0b3JQYWdlQWdlbnQqIHBhZ2VBZ2Vu
dCwgY29uc3QgU3RyaW5nJiBpZCwgUGFzc1JlZlB0cjxFbGVtZW50PiBlbGVtZW50LCBJbnNwZWN0
b3I6OlR5cGVCdWlsZGVyOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW4gb3JpZ2luLCBMaXN0ZW5lciog
bGlzdGVuZXIpCiAgICAgOiBJbnNwZWN0b3JTdHlsZVNoZWV0KHBhZ2VBZ2VudCwgaWQsIG51bGxw
dHIsIG9yaWdpbiwgIiIsIGxpc3RlbmVyKQogICAgICwgbV9lbGVtZW50KGVsZW1lbnQpCiAgICAg
LCBtX3J1bGVTb3VyY2VEYXRhKG51bGxwdHIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvclN0eWxlU2hlZXQuaAppbmRleCA4YjE5MWZlMDg0MzliNWY4ZTc3YTI3NTk1OTdl
NjMzZGE5OWUwZjRmLi4wY2E1YTUzYWVlNWMzODMzZmY5ODViOWIxMzU3OTQzMDk4NzIwNTZlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmgKQEAg
LTE4MSw3ICsxODEsNyBAQCBwdWJsaWM6CiAgICAgfTsKIAogICAgIHR5cGVkZWYgSGFzaE1hcDxD
U1NTdHlsZURlY2xhcmF0aW9uKiwgUmVmUHRyPEluc3BlY3RvclN0eWxlPj4gSW5zcGVjdG9yU3R5
bGVNYXA7Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yU3R5bGVTaGVldD4gY3JlYXRl
KEluc3BlY3RvclBhZ2VBZ2VudCosIGNvbnN0IFN0cmluZyYgaWQsIFBhc3NSZWZQdHI8Q1NTU3R5
bGVTaGVldD4gcGFnZVN0eWxlU2hlZXQsIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNTUzo6U3R5
bGVTaGVldE9yaWdpbjo6RW51bSwgY29uc3QgU3RyaW5nJiBkb2N1bWVudFVSTCwgTGlzdGVuZXIq
KTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JTdHlsZVNoZWV0PiBjcmVhdGUoSW5z
cGVjdG9yUGFnZUFnZW50KiwgY29uc3QgU3RyaW5nJiBpZCwgUGFzc1JlZlB0cjxDU1NTdHlsZVNo
ZWV0PiBwYWdlU3R5bGVTaGVldCwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q1NTOjpTdHlsZVNo
ZWV0T3JpZ2luLCBjb25zdCBTdHJpbmcmIGRvY3VtZW50VVJMLCBMaXN0ZW5lciopOwogICAgIHN0
YXRpYyBTdHJpbmcgc3R5bGVTaGVldFVSTChDU1NTdHlsZVNoZWV0KiBwYWdlU3R5bGVTaGVldCk7
CiAKICAgICB2aXJ0dWFsIH5JbnNwZWN0b3JTdHlsZVNoZWV0KCk7CkBAIC0yMTIsNyArMjEyLDcg
QEAgcHVibGljOgogICAgIEluc3BlY3RvckNTU0lkIHN0eWxlSWQoQ1NTU3R5bGVEZWNsYXJhdGlv
biogc3R5bGUpIGNvbnN0IHsgcmV0dXJuIHJ1bGVPclN0eWxlSWQoc3R5bGUpOyB9CiAKIHByb3Rl
Y3RlZDoKLSAgICBJbnNwZWN0b3JTdHlsZVNoZWV0KEluc3BlY3RvclBhZ2VBZ2VudCosIGNvbnN0
IFN0cmluZyYgaWQsIFBhc3NSZWZQdHI8Q1NTU3R5bGVTaGVldD4gcGFnZVN0eWxlU2hlZXQsIElu
c3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6RW51bSwgY29uc3Qg
U3RyaW5nJiBkb2N1bWVudFVSTCwgTGlzdGVuZXIqKTsKKyAgICBJbnNwZWN0b3JTdHlsZVNoZWV0
KEluc3BlY3RvclBhZ2VBZ2VudCosIGNvbnN0IFN0cmluZyYgaWQsIFBhc3NSZWZQdHI8Q1NTU3R5
bGVTaGVldD4gcGFnZVN0eWxlU2hlZXQsIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNTUzo6U3R5
bGVTaGVldE9yaWdpbiwgY29uc3QgU3RyaW5nJiBkb2N1bWVudFVSTCwgTGlzdGVuZXIqKTsKIAog
ICAgIGJvb2wgY2FuQmluZCgpIGNvbnN0IHsgcmV0dXJuIG1fb3JpZ2luICE9IEluc3BlY3Rvcjo6
VHlwZUJ1aWxkZXI6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6VXNlckFnZW50ICYmIG1fb3JpZ2lu
ICE9IEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6VXNlcjsg
fQogICAgIEluc3BlY3RvckNTU0lkIHJ1bGVPclN0eWxlSWQoQ1NTU3R5bGVEZWNsYXJhdGlvbiog
c3R5bGUpIGNvbnN0OwpAQCAtMjQ4LDcgKzI0OCw3IEBAIHByaXZhdGU6CiAgICAgSW5zcGVjdG9y
UGFnZUFnZW50KiBtX3BhZ2VBZ2VudDsKICAgICBTdHJpbmcgbV9pZDsKICAgICBSZWZQdHI8Q1NT
U3R5bGVTaGVldD4gbV9wYWdlU3R5bGVTaGVldDsKLSAgICBJbnNwZWN0b3I6OlR5cGVCdWlsZGVy
OjpDU1M6OlN0eWxlU2hlZXRPcmlnaW46OkVudW0gbV9vcmlnaW47CisgICAgSW5zcGVjdG9yOjpU
eXBlQnVpbGRlcjo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luIG1fb3JpZ2luOwogICAgIFN0cmluZyBt
X2RvY3VtZW50VVJMOwogICAgIGJvb2wgbV9pc1JldmFsaWRhdGluZzsKICAgICBQYXJzZWRTdHls
ZVNoZWV0KiBtX3BhcnNlZFN0eWxlU2hlZXQ7CkBAIC0yNTksMTQgKzI1OSwxNCBAQCBwcml2YXRl
OgogCiBjbGFzcyBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGUgOiBwdWJsaWMgSW5z
cGVjdG9yU3R5bGVTaGVldCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVj
dG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlPiBjcmVhdGUoSW5zcGVjdG9yUGFnZUFnZW50Kiwg
Y29uc3QgU3RyaW5nJiBpZCwgUGFzc1JlZlB0cjxFbGVtZW50PiwgSW5zcGVjdG9yOjpUeXBlQnVp
bGRlcjo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luOjpFbnVtLCBMaXN0ZW5lciopOworICAgIHN0YXRp
YyBQYXNzUmVmUHRyPEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZT4gY3JlYXRlKElu
c3BlY3RvclBhZ2VBZ2VudCosIGNvbnN0IFN0cmluZyYgaWQsIFBhc3NSZWZQdHI8RWxlbWVudD4s
IEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNTUzo6U3R5bGVTaGVldE9yaWdpbiwgTGlzdGVuZXIq
KTsKIAogICAgIHZvaWQgZGlkTW9kaWZ5RWxlbWVudEF0dHJpYnV0ZSgpOwogICAgIHZpcnR1YWwg
Ym9vbCBnZXRUZXh0KFN0cmluZyogcmVzdWx0KSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFs
IENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlRm9ySWQoY29uc3QgSW5zcGVjdG9yQ1NTSWQmIGlk
KSBjb25zdCBvdmVycmlkZSB7IEFTU0VSVF9VTlVTRUQoaWQsICFpZC5vcmRpbmFsKCkpOyByZXR1
cm4gaW5saW5lU3R5bGUoKTsgfQogCiBwcm90ZWN0ZWQ6Ci0gICAgSW5zcGVjdG9yU3R5bGVTaGVl
dEZvcklubGluZVN0eWxlKEluc3BlY3RvclBhZ2VBZ2VudCosIGNvbnN0IFN0cmluZyYgaWQsIFBh
c3NSZWZQdHI8RWxlbWVudD4sIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNTUzo6U3R5bGVTaGVl
dE9yaWdpbjo6RW51bSwgTGlzdGVuZXIqKTsKKyAgICBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5s
aW5lU3R5bGUoSW5zcGVjdG9yUGFnZUFnZW50KiwgY29uc3QgU3RyaW5nJiBpZCwgUGFzc1JlZlB0
cjxFbGVtZW50PiwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2lu
LCBMaXN0ZW5lciopOwogCiAgICAgdmlydHVhbCBEb2N1bWVudCogb3duZXJEb2N1bWVudCgpIGNv
bnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgUmVmUHRyPENTU1J1bGVTb3VyY2VEYXRhPiBydWxl
U291cmNlRGF0YUZvcihDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSkgY29uc3Qgb3ZlcnJpZGUg
eyBBU1NFUlRfVU5VU0VEKHN0eWxlLCBzdHlsZSA9PSBpbmxpbmVTdHlsZSgpKTsgcmV0dXJuIG1f
cnVsZVNvdXJjZURhdGE7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JUaW1lbGluZUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JUaW1lbGluZUFnZW50LmNwcAppbmRleCBkZGRjMWM2MTNkNTBhM2E1NzAwNjNiZDNkMzQ5
MDYxZjJmYzcxNTA0Li5kMzZjM2ZjZTA0ZDU1MDg3NmMxNmZmM2Q3NzQ3NWU1NjBlMDBhNjExIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVGltZWxpbmVBZ2Vu
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclRpbWVsaW5lQWdl
bnQuY3BwCkBAIC00NjMsNyArNDYzLDcgQEAgdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50Ojpi
cmVha3BvaW50QWN0aW9uUHJvYmUoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEkKICAgICBh
cHBlbmRSZWNvcmQoVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVQcm9iZVNhbXBsZURhdGEo
YWN0aW9uLCBoaXRDb3VudCksIFRpbWVsaW5lUmVjb3JkVHlwZTo6UHJvYmVTYW1wbGUsIGZhbHNl
LCBmcmFtZSk7CiB9CiAKLXN0YXRpYyBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpUaW1lbGluZTo6
RXZlbnRUeXBlOjpFbnVtIHRvUHJvdG9jb2woVGltZWxpbmVSZWNvcmRUeXBlIHR5cGUpCitzdGF0
aWMgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6VGltZWxpbmU6OkV2ZW50VHlwZSB0b1Byb3RvY29s
KFRpbWVsaW5lUmVjb3JkVHlwZSB0eXBlKQogewogICAgIHN3aXRjaCAodHlwZSkgewogICAgIGNh
c2UgVGltZWxpbmVSZWNvcmRUeXBlOjpFdmVudERpc3BhdGNoOgpAQCAtNTUzLDcgKzU1Myw3IEBA
IHZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6YWRkUmVjb3JkVG9UaW1lbGluZShQYXNzUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gcHJwCiB7CiAgICAgcHJwUmVjb3JkLT5zZXRTdHJpbmcoInR5
cGUiLCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpnZXRXZWJFbnVtQ29uc3RhbnRWYWx1ZSh0b1By
b3RvY29sKHR5cGUpKSk7CiAKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6VGlt
ZWxpbmU6OlRpbWVsaW5lRXZlbnQ+IHJlY29yZCA9IEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlRp
bWVsaW5lOjpUaW1lbGluZUV2ZW50OjpydW50aW1lQ2FzdChwcnBSZWNvcmQpOworICAgIFJlZlB0
cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpUaW1lbGluZTo6VGltZWxpbmVFdmVudD4gcmVjb3Jk
ID0gQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpUaW1lbGluZTo6VGltZWxp
bmVFdmVudD46OnJ1bnRpbWVDYXN0KHBycFJlY29yZCk7CiAKICAgICBpZiAobV9yZWNvcmRTdGFj
ay5pc0VtcHR5KCkpCiAgICAgICAgIHNlbmRFdmVudChyZWNvcmQucmVsZWFzZSgpKTsKQEAgLTYx
Myw3ICs2MTMsNyBAQCB2b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OmFwcGVuZFJlY29yZChQ
YXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZGF0YSwgVGltZQogdm9pZCBJbnNwZWN0b3JUaW1l
bGluZUFnZW50OjpzZW5kRXZlbnQoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGV2ZW50KQog
ewogICAgIC8vIEZJWE1FOiBydW50aW1lQ2FzdCBpcyBhIGhhY2suIFdlIGRvIGl0IGJlY2F1c2Ug
d2UgY2FuJ3QgYnVpbGQgVGltZWxpbmVFdmVudCBkaXJlY3RseSBub3cuCi0gICAgUmVmUHRyPElu
c3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlRpbWVsaW5lOjpUaW1lbGluZUV2ZW50PiByZWNvcmRDaGVj
a2VkID0gSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6VGltZWxpbmU6OlRpbWVsaW5lRXZlbnQ6OnJ1
bnRpbWVDYXN0KGV2ZW50KTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6VGlt
ZWxpbmU6OlRpbWVsaW5lRXZlbnQ+IHJlY29yZENoZWNrZWQgPSBCaW5kaW5nVHJhaXRzPEluc3Bl
Y3Rvcjo6VHlwZUJ1aWxkZXI6OlRpbWVsaW5lOjpUaW1lbGluZUV2ZW50Pjo6cnVudGltZUNhc3Qo
ZXZlbnQpOwogICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5ldmVudFJlY29yZGVkKHJlY29yZENo
ZWNrZWQucmVsZWFzZSgpKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL3Byb3RvY29sL0NTUy5qc29uIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL3Byb3RvY29s
L0NTUy5qc29uCmluZGV4IGNhOTBjZjc0MWJmNmMxYjg5MzY4N2FmZTFmNjBlMDRlNDAyZGM4NGMu
LjljNWIyNzU0NWViOWJjYTc4YWQ5ZTJlM2VjYWY2MDI0OWNiZmM2MDEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9DU1MuanNvbgorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvQ1NTLmpzb24KQEAgLTE2Myw2ICsxNjMsMTIgQEAKICAg
ICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJDU1Mgc3R5bGUgcmVwcmVzZW50YXRpb24uIgogICAg
ICAgICB9LAogICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiQ1NTUHJvcGVydHlTdGF0dXMi
LAorCSAgICAidHlwZSI6ICJzdHJpbmciLAorICAgICAgICAgICAgImVudW0iOiBbImFjdGl2ZSIs
ICJpbmFjdGl2ZSIsICJkaXNhYmxlZCIsICJzdHlsZSJdLAorICAgICAgICAgICAgImRlc2NyaXB0
aW9uIjogIlRoZSBwcm9wZXJ0eSBzdGF0dXM6IFwiYWN0aXZlXCIgaWYgdGhlIHByb3BlcnR5IGlz
IGVmZmVjdGl2ZSBpbiB0aGUgc3R5bGUsIFwiaW5hY3RpdmVcIiBpZiB0aGUgcHJvcGVydHkgaXMg
b3ZlcnJpZGRlbiBieSBhIHNhbWUtbmFtZWQgcHJvcGVydHkgaW4gdGhpcyBzdHlsZSBsYXRlciBv
biwgXCJkaXNhYmxlZFwiIGlmIHRoZSBwcm9wZXJ0eSBpcyBkaXNhYmxlZCBieSB0aGUgdXNlciwg
XCJzdHlsZVwiIChpbXBsaWVkIGlmIGFic2VudCkgaWYgdGhlIHByb3BlcnR5IGlzIHJlcG9ydGVk
IGJ5IHRoZSBicm93c2VyIHJhdGhlciB0aGFuIGJ5IHRoZSBDU1Mgc291cmNlIHBhcnNlci4iCisg
ICAgICAgIH0sCisgICAgICAgIHsKICAgICAgICAgICAgICJpZCI6ICJDU1NQcm9wZXJ0eSIsCiAg
ICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAogICAgICAgICAgICAgInByb3BlcnRpZXMiOiBb
CkBAIC0xNzIsNyArMTc4LDcgQEAKICAgICAgICAgICAgICAgICB7ICJuYW1lIjogImltcGxpY2l0
IiwgInR5cGUiOiAiYm9vbGVhbiIsICJvcHRpb25hbCI6IHRydWUsICJkZXNjcmlwdGlvbiI6ICJX
aGV0aGVyIHRoZSBwcm9wZXJ0eSBpcyBpbXBsaWNpdCAoaW1wbGllcyA8Y29kZT5mYWxzZTwvY29k
ZT4gaWYgYWJzZW50KS4iIH0sCiAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0ZXh0IiwgInR5
cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9uIjogIlRoZSBmdWxs
IHByb3BlcnR5IHRleHQgYXMgc3BlY2lmaWVkIGluIHRoZSBzdHlsZS4iIH0sCiAgICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJwYXJzZWRPayIsICJ0eXBlIjogImJvb2xlYW4iLCAib3B0aW9uYWwi
OiB0cnVlLCAiZGVzY3JpcHRpb24iOiAiV2hldGhlciB0aGUgcHJvcGVydHkgaXMgdW5kZXJzdG9v
ZCBieSB0aGUgYnJvd3NlciAoaW1wbGllcyA8Y29kZT50cnVlPC9jb2RlPiBpZiBhYnNlbnQpLiIg
fSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInN0YXR1cyIsICJ0eXBlIjogInN0cmluZyIs
ICJlbnVtIjogWyJhY3RpdmUiLCAiaW5hY3RpdmUiLCAiZGlzYWJsZWQiLCAic3R5bGUiXSwgIm9w
dGlvbmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9uIjogIlRoZSBwcm9wZXJ0eSBzdGF0dXM6IFwiYWN0
aXZlXCIgaWYgdGhlIHByb3BlcnR5IGlzIGVmZmVjdGl2ZSBpbiB0aGUgc3R5bGUsIFwiaW5hY3Rp
dmVcIiBpZiB0aGUgcHJvcGVydHkgaXMgb3ZlcnJpZGRlbiBieSBhIHNhbWUtbmFtZWQgcHJvcGVy
dHkgaW4gdGhpcyBzdHlsZSBsYXRlciBvbiwgXCJkaXNhYmxlZFwiIGlmIHRoZSBwcm9wZXJ0eSBp
cyBkaXNhYmxlZCBieSB0aGUgdXNlciwgXCJzdHlsZVwiIChpbXBsaWVkIGlmIGFic2VudCkgaWYg
dGhlIHByb3BlcnR5IGlzIHJlcG9ydGVkIGJ5IHRoZSBicm93c2VyIHJhdGhlciB0aGFuIGJ5IHRo
ZSBDU1Mgc291cmNlIHBhcnNlci4iIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzdGF0
dXMiLCAiJHJlZiI6ICJDU1NQcm9wZXJ0eVN0YXR1cyIsICJvcHRpb25hbCI6IHRydWUsICJkZXNj
cmlwdGlvbiI6ICJXaGV0aGVyIHRoZSBwcm9wZXJ0eSBpcyBhY3RpdmUgb3IgZGlzYWJsZWQuIiB9
LAogICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicmFuZ2UiLCAiJHJlZiI6ICJTb3VyY2VSYW5n
ZSIsICJvcHRpb25hbCI6IHRydWUsICJkZXNjcmlwdGlvbiI6ICJUaGUgZW50aXJlIHByb3BlcnR5
IHJhbmdlIGluIHRoZSBlbmNsb3Npbmcgc3R5bGUgZGVjbGFyYXRpb24gKGlmIGF2YWlsYWJsZSku
IiB9CiAgICAgICAgICAgICBdLAogICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkNTUyBzdHls
ZSBlZmZlY3RpdmUgdmlzdWFsIGRpbWVuc2lvbnMgYW5kIHNvdXJjZSBvZmZzZXRzLiIKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9QYWdlLmpzb24gYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvUGFnZS5qc29uCmluZGV4IDNhZmRiYzBjZDNk
MjdkNTE2NGQyNmU4YmQzMmM0ZDc2ZmRmZGQyNzUuLjg4YTc2YzQ2ZjJiZWZjZGE0ZGIxYTQ1MDRm
NzJmMmUyMmQ2NzE1MDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9wcm90
b2NvbC9QYWdlLmpzb24KKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL3Byb3RvY29sL1Bh
Z2UuanNvbgpAQCAtMjksMjYgKzI5LDI1IEBACiAgICAgICAgICAgICBdCiAgICAgICAgIH0sCiAg
ICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJGcmFtZVJlc291cmNlIiwKKyAgICAgICAgICAg
ICJ0eXBlIjogIm9iamVjdCIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IFsKKyAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogInVybCIsICJ0eXBlIjogInN0cmluZyIsICJkZXNjcmlwdGlvbiI6
ICJSZXNvdXJjZSBVUkwuIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidHlwZSIsICIk
cmVmIjogIlJlc291cmNlVHlwZSIsICJkZXNjcmlwdGlvbiI6ICJUeXBlIG9mIHRoaXMgcmVzb3Vy
Y2UuIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibWltZVR5cGUiLCAidHlwZSI6ICJz
dHJpbmciLCAiZGVzY3JpcHRpb24iOiAiUmVzb3VyY2UgbWltZVR5cGUgYXMgZGV0ZXJtaW5lZCBi
eSB0aGUgYnJvd3Nlci4iIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJmYWlsZWQiLCAi
dHlwZSI6ICJib29sZWFuIiwgIm9wdGlvbmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9uIjogIlRydWUg
aWYgdGhlIHJlc291cmNlIGZhaWxlZCB0byBsb2FkLiIgfSwKKyAgICAgICAgICAgICAgICB7ICJu
YW1lIjogImNhbmNlbGVkIiwgInR5cGUiOiAiYm9vbGVhbiIsICJvcHRpb25hbCI6IHRydWUsICJk
ZXNjcmlwdGlvbiI6ICJUcnVlIGlmIHRoZSByZXNvdXJjZSB3YXMgY2FuY2VsZWQgZHVyaW5nIGxv
YWRpbmcuIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic291cmNlTWFwVVJMIiwgInR5
cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9uIjogIlVSTCBvZiBz
b3VyY2UgbWFwIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHJlc291cmNlIChpZiBhbnkpLiIgfQorICAg
ICAgICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7CiAgICAgICAgICAgICAiaWQiOiAiRnJh
bWVSZXNvdXJjZVRyZWUiLAogICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKICAgICAgICAg
ICAgICJkZXNjcmlwdGlvbiI6ICJJbmZvcm1hdGlvbiBhYm91dCB0aGUgRnJhbWUgaGllcmFyY2h5
IGFsb25nIHdpdGggdGhlaXIgY2FjaGVkIHJlc291cmNlcy4iLAogICAgICAgICAgICAgInByb3Bl
cnRpZXMiOiBbCiAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJmcmFtZSIsICIkcmVmIjogIkZy
YW1lIiwgImRlc2NyaXB0aW9uIjogIkZyYW1lIGluZm9ybWF0aW9uIGZvciB0aGlzIHRyZWUgaXRl
bS4iIH0sCiAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjaGlsZEZyYW1lcyIsICJ0eXBlIjog
ImFycmF5IiwgIm9wdGlvbmFsIjogdHJ1ZSwgIml0ZW1zIjogeyAiJHJlZiI6ICJGcmFtZVJlc291
cmNlVHJlZSIgfSwgImRlc2NyaXB0aW9uIjogIkNoaWxkIGZyYW1lcy4iIH0sCi0gICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJyZXNvdXJjZXMiLCAidHlwZSI6ICJhcnJheSIsCi0gICAgICAgICAg
ICAgICAgICAgICJpdGVtcyI6IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIjogIm9i
amVjdCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAicHJvcGVydGllcyI6IFsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInVybCIsICJ0eXBlIjogInN0cmluZyIsICJk
ZXNjcmlwdGlvbiI6ICJSZXNvdXJjZSBVUkwuIiB9LAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAidHlwZSIsICIkcmVmIjogIlJlc291cmNlVHlwZSIsICJkZXNjcmlwdGlv
biI6ICJUeXBlIG9mIHRoaXMgcmVzb3VyY2UuIiB9LAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAibWltZVR5cGUiLCAidHlwZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRpb24i
OiAiUmVzb3VyY2UgbWltZVR5cGUgYXMgZGV0ZXJtaW5lZCBieSB0aGUgYnJvd3Nlci4iIH0sCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJmYWlsZWQiLCAidHlwZSI6ICJi
b29sZWFuIiwgIm9wdGlvbmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9uIjogIlRydWUgaWYgdGhlIHJl
c291cmNlIGZhaWxlZCB0byBsb2FkLiIgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7
ICJuYW1lIjogImNhbmNlbGVkIiwgInR5cGUiOiAiYm9vbGVhbiIsICJvcHRpb25hbCI6IHRydWUs
ICJkZXNjcmlwdGlvbiI6ICJUcnVlIGlmIHRoZSByZXNvdXJjZSB3YXMgY2FuY2VsZWQgZHVyaW5n
IGxvYWRpbmcuIiB9LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic291
cmNlTWFwVVJMIiwgInR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjogdHJ1ZSwgImRlc2NyaXB0
aW9uIjogIlVSTCBvZiBzb3VyY2UgbWFwIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHJlc291cmNlIChp
ZiBhbnkpLiIgfQotICAgICAgICAgICAgICAgICAgICAgICAgXQotICAgICAgICAgICAgICAgICAg
ICB9LAotICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiSW5mb3JtYXRpb24gYWJv
dXQgZnJhbWUgcmVzb3VyY2VzLiIKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJyZXNvdXJjZXMiLCAidHlwZSI6ICJhcnJheSIsICJpdGVtcyI6IHsgIiRyZWYi
OiAiRnJhbWVSZXNvdXJjZSIgfSwgImRlc2NyaXB0aW9uIjogIkluZm9ybWF0aW9uIGFib3V0IGZy
YW1lIHJlc291cmNlcy4iIH0KICAgICAgICAgICAgIF0KICAgICAgICAgfSwKICAgICAgICAgewpk
aWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IGNjZGUz
NmE3N2I4MGE1ZTY5ZmZmZTg4MjZhMzFkNzY1ODllMGVhMzguLmMxOWU4NDNmOWVmMGM4ODA2ZmRj
OTg2ZTdjYjJlYjQ4YzQwMDdmNjIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9U
b29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMiBAQAorMjAxNC0wNC0xNyAgQnJpYW4gSi4gQnVy
ZyAgPGJ1cmdAY3Mud2FzaGluZ3Rvbi5lZHU+CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogcmV3
cml0ZSBDb2RlR2VuZXJhdG9ySW5zcGVjdG9yIHRvIGJlIG1vZHVsYXIgYW5kIHRlc3RhYmxlCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzE1OTYKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNjcmlwdHMv
cnVuLWluc3BlY3Rvci1nZW5lcmF0b3ItdGVzdHM6IEFkZGVkLgorICAgICAgICAobWFpbik6Cisg
ICAgICAgICogU2NyaXB0cy93ZWJraXRweS9pbnNwZWN0b3IvX19pbml0X18ucHk6IEFkZGVkLgor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvaW5zcGVjdG9yL21haW4ucHk6IEFkZGVkLgorICAg
ICAgICAoSW5zcGVjdG9yR2VuZXJhdG9yVGVzdHMpOgorICAgICAgICAoSW5zcGVjdG9yR2VuZXJh
dG9yVGVzdHMuX19pbml0X18pOgorICAgICAgICAoSW5zcGVjdG9yR2VuZXJhdG9yVGVzdHMuZ2Vu
ZXJhdGVfZnJvbV9qc29uKToKKyAgICAgICAgKEluc3BlY3RvckdlbmVyYXRvclRlc3RzLndyaXRl
X2Vycm9yX2ZpbGUpOgorICAgICAgICAoSW5zcGVjdG9yR2VuZXJhdG9yVGVzdHMuZGV0ZWN0X2No
YW5nZXMpOgorICAgICAgICAoSW5zcGVjdG9yR2VuZXJhdG9yVGVzdHMucnVuX3Rlc3RzKToKKyAg
ICAgICAgKEluc3BlY3RvckdlbmVyYXRvclRlc3RzLm1haW4pOgorCiAyMDE0LTA1LTIzICBNaWNo
YWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04ocjE2
OTI2NSk6IHNoOiBsaW5lIDA6IGNkOiAuLi8udm0KZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMv
cnVuLWluc3BlY3Rvci1nZW5lcmF0b3ItdGVzdHMgYi9Ub29scy9TY3JpcHRzL3J1bi1pbnNwZWN0
b3ItZ2VuZXJhdG9yLXRlc3RzCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFhYWIxODAwYmNhNmY3ZThhMzQ5NmU1OTE4
NDIxZWVhZTJkMzhkODIKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3J1bi1pbnNw
ZWN0b3ItZ2VuZXJhdG9yLXRlc3RzCkBAIC0wLDAgKzEsNDIgQEAKKyMhL3Vzci9iaW4vZW52IHB5
dGhvbgorIyBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisj
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisj
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisjIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0IHN5cwor
ZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtIGltcG9ydCBleGVjdXRpdmUKKworZGVmIG1haW4o
YXJndik6CisgICAgIiIiUnVucyByZXBsYXkgaW5wdXQgY29kZSBnZW5lcmF0b3Igb24gdGVzdCBz
cGVjaWZpY2F0aW9uIGZpbGVzIGFuZCBjb21wYXJlcworICAgIHRoZSByZXN1bHRzIHdpdGggcmVm
ZXJlbmNlIGZpbGVzLgorCisgICAgT3B0aW9uczoKKyAgICAgICAtLXJlc2V0LXJlc3VsdHM6IE92
ZXJ3cml0ZXMgdGhlIHJlZmVyZW5jZSBmaWxlcyB3aXRoIHRoZSBnZW5lcmF0ZWQgcmVzdWx0cy4K
KworICAgICIiIgorICAgIHJlc2V0X3Jlc3VsdHMgPSAiLS1yZXNldC1yZXN1bHRzIiBpbiBhcmd2
CisKKyAgICBmcm9tIHdlYmtpdHB5Lmluc3BlY3Rvci5tYWluIGltcG9ydCBJbnNwZWN0b3JHZW5l
cmF0b3JUZXN0cworICAgIHJldHVybiBJbnNwZWN0b3JHZW5lcmF0b3JUZXN0cyhyZXNldF9yZXN1
bHRzLCBleGVjdXRpdmUuRXhlY3V0aXZlKCkpLm1haW4oKQorCitpZiBfX25hbWVfXyA9PSAnX19t
YWluX18nOgorICAgIHN5cy5leGl0KG1haW4oc3lzLmFyZ3YpKQpkaWZmIC0tZ2l0IGEvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9pbnNwZWN0b3IvX19pbml0X18ucHkgYi9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L2luc3BlY3Rvci9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lZjY1YmVlNWJiNzdlOTZl
YmM3Y2Q5YzQ3NjQwNjkwZmJkYThhYzE5Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9pbnNwZWN0b3IvX19pbml0X18ucHkKQEAgLTAsMCArMSBAQAorIyBSZXF1aXJl
ZCBmb3IgUHl0aG9uIHRvIHNlYXJjaCB0aGlzIGRpcmVjdG9yeSBmb3IgbW9kdWxlIGZpbGVzCmRp
ZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2luc3BlY3Rvci9tYWluLnB5IGIvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9pbnNwZWN0b3IvbWFpbi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43NjlmMDQx
MmZjNjMwMzZhY2NhNzRjZjc1OWM4NzRlNTdjYjFkZWFkCi0tLSAvZGV2L251bGwKKysrIGIvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9pbnNwZWN0b3IvbWFpbi5weQpAQCAtMCwwICsxLDEzNCBAQAor
IyBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMg
Q29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMg
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIworIyAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTICJBUworIyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKKyMgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBCisjIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorIyBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitp
bXBvcnQgb3MKK2ltcG9ydCBvcy5wYXRoCitpbXBvcnQgc2h1dGlsCitpbXBvcnQgc3lzCitpbXBv
cnQgdGVtcGZpbGUKK2Zyb20gd2Via2l0cHkuY29tbW9uLmNoZWNrb3V0LnNjbS5kZXRlY3Rpb24g
aW1wb3J0IGRldGVjdF9zY21fc3lzdGVtCitmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uZXhl
Y3V0aXZlIGltcG9ydCBTY3JpcHRFcnJvcgorCisKK2NsYXNzIEluc3BlY3RvckdlbmVyYXRvclRl
c3RzOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJlc2V0X3Jlc3VsdHMsIGV4ZWN1dGl2ZSk6
CisgICAgICAgIHNlbGYucmVzZXRfcmVzdWx0cyA9IHJlc2V0X3Jlc3VsdHMKKyAgICAgICAgc2Vs
Zi5leGVjdXRpdmUgPSBleGVjdXRpdmUKKworICAgIGRlZiBnZW5lcmF0ZV9mcm9tX2pzb24oc2Vs
ZiwganNvbl9maWxlLCBvdXRwdXRfZGlyZWN0b3J5KToKKyAgICAgICAgY21kID0gWydweXRob24n
LAorICAgICAgICAgICAgICAgJ0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weScsCisgICAgICAgICAgICAgICAnLS1v
dXRwdXREaXInLCBvdXRwdXRfZGlyZWN0b3J5LAorICAgICAgICAgICAgICAgJy0tZm9yY2UnLAor
ICAgICAgICAgICAgICAgJy0tZnJhbWV3b3JrJywgJ1Rlc3QnLAorICAgICAgICAgICAgICAgJy0t
dGVzdCcsCisgICAgICAgICAgICAgICBqc29uX2ZpbGVdCisKKyAgICAgICAgZXhpdF9jb2RlID0g
MAorICAgICAgICB0cnk6CisgICAgICAgICAgICBzdGRlcnJfb3V0cHV0ID0gc2VsZi5leGVjdXRp
dmUucnVuX2NvbW1hbmQoY21kKQorICAgICAgICAgICAgaWYgc3RkZXJyX291dHB1dDoKKyAgICAg
ICAgICAgICAgICBzZWxmLndyaXRlX2Vycm9yX2ZpbGUoanNvbl9maWxlLCBvdXRwdXRfZGlyZWN0
b3J5LCBzdGRlcnJfb3V0cHV0KQorICAgICAgICBleGNlcHQgU2NyaXB0RXJyb3IsIGU6CisgICAg
ICAgICAgICBwcmludCBlLm91dHB1dAorICAgICAgICAgICAgZXhpdF9jb2RlID0gZS5leGl0X2Nv
ZGUKKyAgICAgICAgcmV0dXJuIGV4aXRfY29kZQorCisgICAgZGVmIHdyaXRlX2Vycm9yX2ZpbGUo
c2VsZiwgaW5wdXRfZmlsZXBhdGgsIG91dHB1dF9kaXJlY3RvcnksIGVycm9yX291dHB1dCk6Cisg
ICAgICAgIG91dHB1dF9maWxlcGF0aCA9IG9zLnBhdGguam9pbihvdXRwdXRfZGlyZWN0b3J5LCBv
cy5wYXRoLmJhc2VuYW1lKGlucHV0X2ZpbGVwYXRoKSArICctZXJyb3InKQorCisgICAgICAgIHdp
dGggb3BlbihvdXRwdXRfZmlsZXBhdGgsICJ3IikgYXMgb3V0cHV0X2ZpbGU6CisgICAgICAgICAg
ICBvdXRwdXRfZmlsZS53cml0ZShlcnJvcl9vdXRwdXQpCisKKyAgICBkZWYgZGV0ZWN0X2NoYW5n
ZXMoc2VsZiwgd29ya19kaXJlY3RvcnksIHJlZmVyZW5jZV9kaXJlY3RvcnkpOgorICAgICAgICBj
aGFuZ2VzX2ZvdW5kID0gRmFsc2UKKyAgICAgICAgZm9yIG91dHB1dF9maWxlIGluIG9zLmxpc3Rk
aXIod29ya19kaXJlY3RvcnkpOgorICAgICAgICAgICAgY21kID0gWydkaWZmJywKKyAgICAgICAg
ICAgICAgICAgICAnLXUnLAorICAgICAgICAgICAgICAgICAgICctTicsCisgICAgICAgICAgICAg
ICAgICAgb3MucGF0aC5qb2luKHJlZmVyZW5jZV9kaXJlY3RvcnksIG91dHB1dF9maWxlKSwKKyAg
ICAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4od29ya19kaXJlY3RvcnksIG91dHB1dF9maWxl
KV0KKworICAgICAgICAgICAgZXhpdF9jb2RlID0gMAorICAgICAgICAgICAgdHJ5OgorICAgICAg
ICAgICAgICAgIG91dHB1dCA9IHNlbGYuZXhlY3V0aXZlLnJ1bl9jb21tYW5kKGNtZCkKKyAgICAg
ICAgICAgIGV4Y2VwdCBTY3JpcHRFcnJvciwgZToKKyAgICAgICAgICAgICAgICBvdXRwdXQgPSBl
Lm91dHB1dAorICAgICAgICAgICAgICAgIGV4aXRfY29kZSA9IGUuZXhpdF9jb2RlCisKKyAgICAg
ICAgICAgIGlmIGV4aXRfY29kZSBvciBvdXRwdXQ6CisgICAgICAgICAgICAgICAgcHJpbnQgJ0ZB
SUw6ICVzJyAlIG91dHB1dF9maWxlCisgICAgICAgICAgICAgICAgcHJpbnQgb3V0cHV0CisgICAg
ICAgICAgICAgICAgY2hhbmdlc19mb3VuZCA9IFRydWUKKyAgICAgICAgICAgIGVsc2U6CisgICAg
ICAgICAgICAgICAgcHJpbnQgJ1BBU1M6ICVzJyAlIG91dHB1dF9maWxlCisgICAgICAgIHJldHVy
biBjaGFuZ2VzX2ZvdW5kCisKKyAgICBkZWYgcnVuX3Rlc3RzKHNlbGYsIGlucHV0X2RpcmVjdG9y
eSwgcmVmZXJlbmNlX2RpcmVjdG9yeSk6CisgICAgICAgIHdvcmtfZGlyZWN0b3J5ID0gcmVmZXJl
bmNlX2RpcmVjdG9yeQorCisgICAgICAgIHBhc3NlZCA9IFRydWUKKyAgICAgICAgZm9yIGlucHV0
X2ZpbGUgaW4gb3MubGlzdGRpcihpbnB1dF9kaXJlY3RvcnkpOgorICAgICAgICAgICAgKG5hbWUs
IGV4dGVuc2lvbikgPSBvcy5wYXRoLnNwbGl0ZXh0KGlucHV0X2ZpbGUpCisgICAgICAgICAgICBp
ZiBleHRlbnNpb24gIT0gJy5qc29uJzoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAg
ICAgICAgIyBHZW5lcmF0ZSBvdXRwdXQgaW50byB0aGUgd29yayBkaXJlY3RvcnkgKGVpdGhlciB0
aGUgZ2l2ZW4gb25lIG9yIGEKKyAgICAgICAgICAgICMgdGVtcCBvbmUgaWYgbm90IHJlc2V0X3Jl
c3VsdHMgaXMgcGVyZm9ybWVkKQorICAgICAgICAgICAgaWYgbm90IHNlbGYucmVzZXRfcmVzdWx0
czoKKyAgICAgICAgICAgICAgICB3b3JrX2RpcmVjdG9yeSA9IHRlbXBmaWxlLm1rZHRlbXAoKQor
CisgICAgICAgICAgICBpZiBzZWxmLmdlbmVyYXRlX2Zyb21fanNvbihvcy5wYXRoLmpvaW4oaW5w
dXRfZGlyZWN0b3J5LCBpbnB1dF9maWxlKSwgd29ya19kaXJlY3RvcnkpOgorICAgICAgICAgICAg
ICAgIHBhc3NlZCA9IEZhbHNlCisKKyAgICAgICAgICAgIGlmIHNlbGYucmVzZXRfcmVzdWx0czoK
KyAgICAgICAgICAgICAgICBwcmludCAiUmVzZXQgcmVzdWx0cyBmb3IgdGVzdDogJXMiICUgKGlu
cHV0X2ZpbGUpCisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgIyBEZXRl
Y3QgY2hhbmdlcworICAgICAgICAgICAgaWYgc2VsZi5kZXRlY3RfY2hhbmdlcyh3b3JrX2RpcmVj
dG9yeSwgcmVmZXJlbmNlX2RpcmVjdG9yeSk6CisgICAgICAgICAgICAgICAgcGFzc2VkID0gRmFs
c2UKKyAgICAgICAgICAgIHNodXRpbC5ybXRyZWUod29ya19kaXJlY3RvcnkpCisKKyAgICAgICAg
cmV0dXJuIHBhc3NlZAorCisgICAgZGVmIG1haW4oc2VsZik6CisgICAgICAgIGN1cnJlbnRfc2Nt
ID0gZGV0ZWN0X3NjbV9zeXN0ZW0ob3MuY3VyZGlyKQorICAgICAgICBvcy5jaGRpcihvcy5wYXRo
LmpvaW4oY3VycmVudF9zY20uY2hlY2tvdXRfcm9vdCwgJ1NvdXJjZScpKQorCisgICAgICAgIGFs
bF90ZXN0c19wYXNzZWQgPSBUcnVlCisKKyAgICAgICAgaW5wdXRfZGlyZWN0b3J5ID0gb3MucGF0
aC5qb2luKCdKYXZhU2NyaXB0Q29yZScsICdpbnNwZWN0b3InLCAnc2NyaXB0cycsICd0ZXN0cycp
CisgICAgICAgIHJlZmVyZW5jZV9kaXJlY3RvcnkgPSBvcy5wYXRoLmpvaW4oJ0phdmFTY3JpcHRD
b3JlJywgJ2luc3BlY3RvcicsICdzY3JpcHRzJywgJ3Rlc3RzJywgJ2V4cGVjdGVkJykKKyAgICAg
ICAgaWYgbm90IHNlbGYucnVuX3Rlc3RzKGlucHV0X2RpcmVjdG9yeSwgcmVmZXJlbmNlX2RpcmVj
dG9yeSk6CisgICAgICAgICAgICBhbGxfdGVzdHNfcGFzc2VkID0gRmFsc2UKKworICAgICAgICBw
cmludCAnJworICAgICAgICBpZiBhbGxfdGVzdHNfcGFzc2VkOgorICAgICAgICAgICAgcHJpbnQg
J0FsbCB0ZXN0cyBQQVNTIScKKyAgICAgICAgICAgIHJldHVybiAwCisgICAgICAgIGVsc2U6Cisg
ICAgICAgICAgICBwcmludCAnU29tZSB0ZXN0cyBGQUlMISAoVG8gdXBkYXRlIHRoZSByZWZlcmVu
Y2UgZmlsZXMsIGV4ZWN1dGUgInJ1bi1pbnNwZWN0b3ItZ2VuZXJhdG9yLXRlc3RzIC0tcmVzZXQt
cmVzdWx0cyIpJworICAgICAgICAgICAgcmV0dXJuIC0xCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>232043</attachid>
            <date>2014-05-25 15:09:02 -0700</date>
            <delta_ts>2014-08-11 11:33:38 -0700</delta_ts>
            <desc>PFR v1</desc>
            <filename>bug-131596-20140525150833.patch</filename>
            <type>text/plain</type>
            <size>669884</size>
            <attacher name="Brian Burg">burg</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTY5MzEwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBk
NDg4OGRiY2QzNGU3NWUwZTZlYjE1MTNjN2MwNDMxM2NjZmJiNTgyLi43MzM0MmQwYzQ3MTNkNDA4
ZDlkZWIzNjEyNTgwYTYyMmY0NzkxNzAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzNjAgQEAKKzIwMTQtMDUtMjUgIEJyaWFuIEouIEJ1cmcgIDxidXJnQGNzLndhc2hpbmd0
b24uZWR1PgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IHJld3JpdGUgQ29kZUdlbmVyYXRvcklu
c3BlY3RvciB0byBiZSBtb2R1bGFyIGFuZCB0ZXN0YWJsZQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMxNTk2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVwbGFjZSBDb2RlR2VuZXJhdG9ySW5zcGVjdG9y
LnB5IHdpdGggZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5LgorICAgICAg
ICBUaGUgbmV3IGdlbmVyYXRvciBkZWNvdXBsZXMgcGFyc2luZyBhbmQgdHlwZWNoZWNraW5nIGEg
bW9kZWwgb2YgdGhlIHByb3RvY29sIGZyb20KKyAgICAgICAgY29kZSBnZW5lcmF0aW9uLiBFYWNo
IGdlbmVyYXRlZCBmaWxlIGlzIGNyZWF0ZWQgYnkgYSBkaWZmZXJlbnQgc3ViY2xhc3Mgb2YgR2Vu
ZXJhdG9yLgorICAgICAgICBIZWxwZXIgbWV0aG9kcyB0byBjb21wdXRlIHZhcmlvdXMgdHlwZSBz
aWduYXR1cmVzIGFyZSBzaGFyZWQgYW1vbmcgZ2VuZXJhdG9ycy4KKworICAgICAgICBUaGlzIHBh
dGNoIGludHJvZHVjZXMgYSB0ZXN0IGhhcm5lc3MgYW5kIGEgdGVzdCBzdWl0ZSB0aGF0IGNvdmVy
cyBhbGwgZnVuY3Rpb25hbGl0eS4KKworICAgICAgICBBc2lkZSBmcm9tIGhvb2tpbmcgdXAgdGhl
IG5ldyBpbnNwZWN0b3IgYmluZGluZ3MgZ2VuZXJhdG9yIHRvIHRoZSBidWlsZCBzeXN0ZW0sCisg
ICAgICAgIHRoZXJlIGFyZSBhIGZldyBjb21pbmdsZWQgY2hhbmdlcyB0aGF0IHdvdWxkIGJlIHBh
aW5mdWwgdG8gc3BsaXQgZnJvbSB0aGUgbWFpbgorICAgICAgICBwYXRjaDoKKworICAgICAgICBD
b252ZXJ0IHByb3RvY29sIGVudW1lcmF0aW9uIHR5cGVzIGZyb20gc3RydWN0LW5hbWVzcGFjZWQg
ZW51bXMgdG8gQysrIHNjb3BlZCBlbnVtcy4KKworICAgICAgICBNb3ZlIGFsbCBydW50aW1lQ2Fz
dCgpLCBhc3NlcnRDb3JyZWN0VmFsdWUoKSwgYW5kIFJ1bnRpbWVDYXN0SGVscGVyIG1ldGhvZHMg
dG8gc3RhdGljCisgICAgICAgIG1ldGhvZHMgb2YgQmluZGluZ1RyYWl0cyBzcGVjaWFsaXphdGlv
bnMuCisKKyAgICAgICAgVG9nZXRoZXIsIHRoZXNlIGNoYW5nZXMgcmVkdWNlIGR1cGxpY2F0aW9u
IGFuZCBtYWtlIGl0IHBvc3NpYmxlIHRvIGZvcndhcmQtZGVjbGFyZQorICAgICAgICBhbGwgcHJv
dG9jb2wgZW51bSBhbmQgb2JqZWN0IHR5cGVzLCByZWR1Y2luZyB3ZWlyZCBvcmRlcmluZyBkZXBl
bmRlbmNpZXMgYmV0d2VlbiBkb21haW5zLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6Cisg
ICAgICAgICogRGVyaXZlZFNvdXJjZXMubWFrZToKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52
Y3hwcm9qL2NvcHktZmlsZXMuY21kOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogaW5zcGVjdG9yL0NvbnNvbGVNZXNzYWdlLmNw
cDogQ29udmVydCB0byBzY29wZWQgZW51bXMuCisgICAgICAgIChJbnNwZWN0b3I6Om1lc3NhZ2VT
b3VyY2VWYWx1ZSk6CisgICAgICAgIChJbnNwZWN0b3I6Om1lc3NhZ2VUeXBlVmFsdWUpOgorICAg
ICAgICAoSW5zcGVjdG9yOjptZXNzYWdlTGV2ZWxWYWx1ZSk6CisgICAgICAgICogaW5zcGVjdG9y
L0luamVjdGVkU2NyaXB0LmNwcDogQ29udmVydCB0byBzY29wZWQgZW51bXMgYW5kIEJpbmRpbmdU
cmFpdHMuCisgICAgICAgIChJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0OjpnZXRGdW5jdGlvbkRl
dGFpbHMpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdDo6Z2V0UHJvcGVydGll
cyk6CisgICAgICAgIChJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0OjpnZXRJbnRlcm5hbFByb3Bl
cnRpZXMpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdDo6d3JhcENhbGxGcmFt
ZXMpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdDo6d3JhcE9iamVjdCk6Cisg
ICAgICAgIChJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0Ojp3cmFwVGFibGUpOgorICAgICAgICAq
IGluc3BlY3Rvci9JbmplY3RlZFNjcmlwdEJhc2UuY3BwOiBDb252ZXJ0IEluc3BlY3RvclZhbHVl
OjpUeXBlIHRvIGEgc2NvcGVkIGVudW0uCisgICAgICAgIChJbnNwZWN0b3I6OkluamVjdGVkU2Ny
aXB0QmFzZTo6bWFrZUV2YWxDYWxsKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5qZWN0ZWRTY3Jp
cHRNYW5hZ2VyLmNwcDoKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHRNYW5hZ2Vy
OjppbmplY3RlZFNjcmlwdEZvck9iamVjdElkKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVj
dG9yVHlwZUJ1aWxkZXIuaDoKKyAgICAgICAgKEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5
OjpjcmVhdGUpOgorICAgICAgICAoSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6U3RydWN0SXRlbVRy
YWl0czo6cHVzaFJlZlB0cik6CisgICAgICAgIChJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJh
eUl0ZW1IZWxwZXI8U3RyaW5nPjo6VHJhaXRzOjpwdXNoUmF3KToKKyAgICAgICAgKEluc3BlY3Rv
cjo6VHlwZUJ1aWxkZXI6OkFycmF5SXRlbUhlbHBlcjxpbnQ+OjpUcmFpdHM6OnB1c2hSYXcpOgor
ICAgICAgICAoSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXlJdGVtSGVscGVyPGRvdWJsZT46
OlRyYWl0czo6cHVzaFJhdyk6CisgICAgICAgIChJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJh
eUl0ZW1IZWxwZXI8Ym9vbD46OlRyYWl0czo6cHVzaFJhdyk6CisgICAgICAgIChJbnNwZWN0b3I6
OlR5cGVCdWlsZGVyOjpBcnJheUl0ZW1IZWxwZXI8SW5zcGVjdG9yVmFsdWU+OjpUcmFpdHM6OnB1
c2hSZWZQdHIpOgorICAgICAgICAoSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXlJdGVtSGVs
cGVyPEluc3BlY3Rvck9iamVjdD46OlRyYWl0czo6cHVzaFJlZlB0cik6CisgICAgICAgIChJbnNw
ZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheUl0ZW1IZWxwZXI8SW5zcGVjdG9yQXJyYXk+OjpUcmFp
dHM6OnB1c2hSZWZQdHIpOgorICAgICAgICAoSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UHJpbWl0
aXZlQmluZGluZ1RyYWl0czo6YXNzZXJ0Q29ycmVjdFZhbHVlKToKKyAgICAgICAgKEluc3BlY3Rv
cjo6VHlwZUJ1aWxkZXI6OkJpbmRpbmdUcmFpdHM8VHlwZUJ1aWxkZXI6OkFycmF5PFQ+Pjo6cnVu
dGltZUNhc3QpOgorICAgICAgICAoSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QmluZGluZ1RyYWl0
czxUeXBlQnVpbGRlcjo6QXJyYXk8VD4+Ojphc3NlcnRDb3JyZWN0VmFsdWUpOgorICAgICAgICAo
SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QmluZGluZ1RyYWl0czxJbnNwZWN0b3JWYWx1ZT46OmFz
c2VydENvcnJlY3RWYWx1ZSk6CisgICAgICAgIChJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpCaW5k
aW5nVHJhaXRzPGludD46OmFzc2VydENvcnJlY3RWYWx1ZSk6CisgICAgICAgIChJbnNwZWN0b3I6
OlR5cGVCdWlsZGVyOjpFeGFjdGx5SW50OjpFeGFjdGx5SW50KTogRGVsZXRlZC4gSXQgd2FzIG5v
dCB1c2VkLgorICAgICAgICAoSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6RXhhY3RseUludDo6b3Bl
cmF0b3IgaW50KTogRGVsZXRlZC4KKyAgICAgICAgKEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkV4
YWN0bHlJbnQ6OmNhc3RfdG9faW50KTogRGVsZXRlZC4KKyAgICAgICAgKEluc3BlY3Rvcjo6VHlw
ZUJ1aWxkZXI6OkV4YWN0bHlJbnQ6OmNhc3RfdG9faW50PGludD4pOiBEZWxldGVkLgorICAgICAg
ICAoSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6aW50Pik6IERlbGV0ZWQuCisgICAgICAgIChJbnNw
ZWN0b3I6OlR5cGVCdWlsZGVyOjpSdW50aW1lQ2FzdEhlbHBlcjo6YXNzZXJ0VHlwZSk6IERlbGV0
ZWQuCisgICAgICAgIChJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpSdW50aW1lQ2FzdEhlbHBlcjo6
YXNzZXJ0QW55KTogRGVsZXRlZC4KKyAgICAgICAgKEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlJ1
bnRpbWVDYXN0SGVscGVyOjphc3NlcnRJbnQpOiBEZWxldGVkLgorICAgICAgICAoSW5zcGVjdG9y
OjpUeXBlQnVpbGRlcjo6QXJyYXk6OnJ1bnRpbWVDYXN0KTogRGVsZXRlZC4KKyAgICAgICAgKElu
c3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5Ojphc3NlcnRDb3JyZWN0VmFsdWUpOiBEZWxldGVk
LgorICAgICAgICAoSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6U3RydWN0SXRlbVRyYWl0czo6YXNz
ZXJ0Q29ycmVjdFZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAgKEluc3BlY3Rvcjo6VHlwZUJ1aWxk
ZXI6OkFycmF5SXRlbUhlbHBlcjxTdHJpbmc+OjpUcmFpdHM6OmFzc2VydENvcnJlY3RWYWx1ZSk6
IERlbGV0ZWQuCisgICAgICAgIChJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheUl0ZW1IZWxw
ZXI8aW50Pjo6VHJhaXRzOjphc3NlcnRDb3JyZWN0VmFsdWUpOiBEZWxldGVkLgorICAgICAgICAo
SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXlJdGVtSGVscGVyPGRvdWJsZT46OlRyYWl0czo6
YXNzZXJ0Q29ycmVjdFZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAgKEluc3BlY3Rvcjo6VHlwZUJ1
aWxkZXI6OkFycmF5SXRlbUhlbHBlcjxib29sPjo6VHJhaXRzOjphc3NlcnRDb3JyZWN0VmFsdWUp
OiBEZWxldGVkLgorICAgICAgICAoSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXlJdGVtSGVs
cGVyPEluc3BlY3RvclZhbHVlPjo6VHJhaXRzOjphc3NlcnRDb3JyZWN0VmFsdWUpOiBEZWxldGVk
LgorICAgICAgICAoSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXlJdGVtSGVscGVyPEluc3Bl
Y3Rvck9iamVjdD46OlRyYWl0czo6YXNzZXJ0Q29ycmVjdFZhbHVlKTogRGVsZXRlZC4KKyAgICAg
ICAgKEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5SXRlbUhlbHBlcjxJbnNwZWN0b3JBcnJh
eT46OlRyYWl0czo6YXNzZXJ0Q29ycmVjdFZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAgKEluc3Bl
Y3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5SXRlbUhlbHBlcjxUeXBlQnVpbGRlcjo6QXJyYXk8VD4+
OjpUcmFpdHM6OmFzc2VydENvcnJlY3RWYWx1ZSk6IERlbGV0ZWQuCisKKyAgICAgICAgKiBpbnNw
ZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmNwcDogQ29udmVydCBJbnNwZWN0b3JWYWx1ZTo6VHlwZSB0
byBhIHNjb3BlZCBlbnVtLgorICAgICAgICAoSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZTo6d3Jp
dGVKU09OKToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFzaWNWYWx1ZTo6YXNCb29s
ZWFuKToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFzaWNWYWx1ZTo6YXNOdW1iZXIp
OgorICAgICAgICAoSW5zcGVjdG9yOjpJbnNwZWN0b3JCYXNpY1ZhbHVlOjp3cml0ZUpTT04pOgor
ICAgICAgICAoSW5zcGVjdG9yOjpJbnNwZWN0b3JTdHJpbmc6OndyaXRlSlNPTik6CisgICAgICAg
IChJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdEJhc2U6Okluc3BlY3Rvck9iamVjdEJhc2UpOgor
ICAgICAgICAoSW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheUJhc2U6Okluc3BlY3RvckFycmF5QmFz
ZSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oOgorCisgICAgICAgICog
aW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcDogQ29udmVydCB0byBz
Y29wZWQgZW51bXMuCisgICAgICAgIChJbnNwZWN0b3I6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6
OnNjaGVkdWxlUGF1c2VPbk5leHRTdGF0ZW1lbnQpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbnNw
ZWN0b3JEZWJ1Z2dlckFnZW50OjpicmVha1Byb2dyYW0pOgorICAgICAgICAqIGluc3BlY3Rvci9h
Z2VudHMvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2Vu
dHMvSW5zcGVjdG9yUnVudGltZUFnZW50LmNwcDoKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5zcGVj
dG9yUnVudGltZUFnZW50OjpwYXJzZSk6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNw
ZWN0b3JSdW50aW1lQWdlbnQuaDoKKworICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL0NvZGVH
ZW5lcmF0b3JJbnNwZWN0b3IucHk6IFJlbW92ZWQuCisgICAgICAgICogaW5zcGVjdG9yL3Njcmlw
dHMvY29kZWdlbi9fX2luaXRfXy5weTogQWRkZWQuCisgICAgICAgICogaW5zcGVjdG9yL3Njcmlw
dHMvY29kZWdlbi9nZW5lcmF0ZV9iYWNrZW5kX2NvbW1hbmRzLnB5OiBBZGRlZC4KKyAgICAgICAg
KEJhY2tlbmRDb21tYW5kc0dlbmVyYXRvcik6CisgICAgICAgIChCYWNrZW5kQ29tbWFuZHNHZW5l
cmF0b3IuX19pbml0X18pOgorICAgICAgICAoQmFja2VuZENvbW1hbmRzR2VuZXJhdG9yLm1vZGVs
KToKKyAgICAgICAgKEJhY2tlbmRDb21tYW5kc0dlbmVyYXRvci5vdXRwdXRfZmlsZW5hbWUpOgor
ICAgICAgICAoQmFja2VuZENvbW1hbmRzR2VuZXJhdG9yLmdlbmVyYXRlX2xpY2Vuc2UpOgorICAg
ICAgICAoQmFja2VuZENvbW1hbmRzR2VuZXJhdG9yLmdlbmVyYXRlX291dHB1dCk6CisgICAgICAg
IChCYWNrZW5kQ29tbWFuZHNHZW5lcmF0b3IuZ2VuZXJhdGVfZG9tYWluKToKKyAgICAgICAgKEJh
Y2tlbmRDb21tYW5kc0dlbmVyYXRvci5nZW5lcmF0ZV9kb21haW4uaXNfYW5vbnltb3VzX2VudW1f
bWVtYmVyKToKKyAgICAgICAgKEJhY2tlbmRDb21tYW5kc0dlbmVyYXRvci5nZW5lcmF0ZV9kb21h
aW4uZ2VuZXJhdGVfcGFyYW1ldGVyX29iamVjdCk6CisgICAgICAgICogaW5zcGVjdG9yL3Njcmlw
dHMvY29kZWdlbi9nZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5OiBBZGRlZC4K
KyAgICAgICAgKEJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yKToKKyAgICAgICAgKEJh
Y2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yLl9faW5pdF9fKToKKyAgICAgICAgKEJhY2tl
bmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yLm1vZGVsKToKKyAgICAgICAgKEJhY2tlbmREaXNw
YXRjaGVySGVhZGVyR2VuZXJhdG9yLm91dHB1dF9maWxlbmFtZSk6CisgICAgICAgIChCYWNrZW5k
RGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvci5nZW5lcmF0ZV9saWNlbnNlKToKKyAgICAgICAgKEJh
Y2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yLmdlbmVyYXRlX291dHB1dCk6CisgICAgICAg
IChCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvci5nZW5lcmF0ZV9vdXRwdXQuZm9yKToK
KyAgICAgICAgKEJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yLl9nZW5lcmF0ZV9oYW5k
bGVyX2RlY2xhcmF0aW9uc19mb3JfZG9tYWluKToKKyAgICAgICAgKEJhY2tlbmREaXNwYXRjaGVy
SGVhZGVyR2VuZXJhdG9yLl9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9mb3JfcGFyYW1ldGVyKToK
KyAgICAgICAgKEJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yLl9nZW5lcmF0ZV9oYW5k
bGVyX2RlY2xhcmF0aW9uX2Zvcl9jb21tYW5kKToKKyAgICAgICAgKEJhY2tlbmREaXNwYXRjaGVy
SGVhZGVyR2VuZXJhdG9yLl9nZW5lcmF0ZV9hc3luY19oYW5kbGVyX2RlY2xhcmF0aW9uX2Zvcl9j
b21tYW5kKToKKyAgICAgICAgKEJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yLl9nZW5l
cmF0ZV9kaXNwYXRjaGVyX2RlY2xhcmF0aW9uc19mb3JfZG9tYWluKToKKyAgICAgICAgKEJhY2tl
bmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yLl9nZW5lcmF0ZV9kaXNwYXRjaGVyX2RlY2xhcmF0
aW9uX2Zvcl9jb21tYW5kKToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dl
bmVyYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weTogQWRkZWQuCisgICAg
ICAgIChCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKToKKyAgICAgICAg
KEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX19pbml0X18pOgorICAg
ICAgICAoQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5tb2RlbCk6Cisg
ICAgICAgIChCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLm91dHB1dF9m
aWxlbmFtZSk6CisgICAgICAgIChCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJh
dG9yLmdlbmVyYXRlX2xpY2Vuc2UpOgorICAgICAgICAoQmFja2VuZERpc3BhdGNoZXJJbXBsZW1l
bnRhdGlvbkdlbmVyYXRvci5nZW5lcmF0ZV9vdXRwdXQpOgorICAgICAgICAoQmFja2VuZERpc3Bh
dGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfaGFuZGxlcl9jbGFzc19kZXN0
cnVjdG9yX2Zvcl9kb21haW4pOgorICAgICAgICAoQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRh
dGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbnNfZm9yX2Rv
bWFpbik6CisgICAgICAgIChCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9y
Ll9nZW5lcmF0ZV9zbWFsbF9kaXNwYXRjaGVyX3N3aXRjaF9pbXBsZW1lbnRhdGlvbl9mb3JfZG9t
YWluKToKKyAgICAgICAgKEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3Iu
X2dlbmVyYXRlX2xhcmdlX2Rpc3BhdGNoZXJfc3dpdGNoX2ltcGxlbWVudGF0aW9uX2Zvcl9kb21h
aW4pOgorICAgICAgICAoQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5f
Z2VuZXJhdGVfYXN5bmNfZGlzcGF0Y2hlcl9jbGFzc19mb3JfZG9tYWluKToKKyAgICAgICAgKEJh
Y2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX2Rpc3BhdGNo
ZXJfaW1wbGVtZW50YXRpb25fZm9yX2NvbW1hbmQpOgorICAgICAgICAqIGluc3BlY3Rvci9zY3Jp
cHRzL2NvZGVnZW4vZ2VuZXJhdGVfZnJvbnRlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHk6IEFkZGVk
LgorICAgICAgICAoRnJvbnRlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yKToKKyAgICAgICAg
KEZyb250ZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvci5fX2luaXRfXyk6CisgICAgICAgIChG
cm9udGVuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IubW9kZWwpOgorICAgICAgICAoRnJvbnRl
bmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yLm91dHB1dF9maWxlbmFtZSk6CisgICAgICAgIChG
cm9udGVuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IuZ2VuZXJhdGVfbGljZW5zZSk6CisgICAg
ICAgIChGcm9udGVuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IuZ2VuZXJhdGVfb3V0cHV0KToK
KyAgICAgICAgKEZyb250ZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvci5fZ2VuZXJhdGVfYW5v
bnltb3VzX2VudW1fZm9yX3BhcmFtZXRlcik6CisgICAgICAgIChGcm9udGVuZERpc3BhdGNoZXJI
ZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRlX2Rpc3BhdGNoZXJfZGVjbGFyYXRpb25zX2Zvcl9kb21h
aW4pOgorICAgICAgICAoRnJvbnRlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yLl9nZW5lcmF0
ZV9kaXNwYXRjaGVyX2RlY2xhcmF0aW9uX2Zvcl9ldmVudCk6CisgICAgICAgICogaW5zcGVjdG9y
L3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0
aW9uLnB5OiBBZGRlZC4KKyAgICAgICAgKEZyb250ZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9u
R2VuZXJhdG9yKToKKyAgICAgICAgKEZyb250ZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2Vu
ZXJhdG9yLl9faW5pdF9fKToKKyAgICAgICAgKEZyb250ZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0
aW9uR2VuZXJhdG9yLm1vZGVsKToKKyAgICAgICAgKEZyb250ZW5kRGlzcGF0Y2hlckltcGxlbWVu
dGF0aW9uR2VuZXJhdG9yLm91dHB1dF9maWxlbmFtZSk6CisgICAgICAgIChGcm9udGVuZERpc3Bh
dGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5nZW5lcmF0ZV9saWNlbnNlKToKKyAgICAgICAg
KEZyb250ZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLmdlbmVyYXRlX291dHB1
dCk6CisgICAgICAgIChGcm9udGVuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5f
Z2VuZXJhdGVfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbnNfZm9yX2RvbWFpbik6CisgICAgICAg
IChGcm9udGVuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfZGlz
cGF0Y2hlcl9pbXBsZW1lbnRhdGlvbl9mb3JfZXZlbnQpOgorICAgICAgICAqIGluc3BlY3Rvci9z
Y3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfdHlwZV9idWlsZGVyX2hlYWRlci5weTogQWRkZWQuCisg
ICAgICAgIChUeXBlQnVpbGRlckhlYWRlckdlbmVyYXRvcik6CisgICAgICAgIChUeXBlQnVpbGRl
ckhlYWRlckdlbmVyYXRvci5fX2luaXRfXyk6CisgICAgICAgIChUeXBlQnVpbGRlckhlYWRlckdl
bmVyYXRvci5tb2RlbCk6CisgICAgICAgIChUeXBlQnVpbGRlckhlYWRlckdlbmVyYXRvci5vdXRw
dXRfZmlsZW5hbWUpOgorICAgICAgICAoVHlwZUJ1aWxkZXJIZWFkZXJHZW5lcmF0b3IuZ2VuZXJh
dGVfbGljZW5zZSk6CisgICAgICAgIChUeXBlQnVpbGRlckhlYWRlckdlbmVyYXRvci5nZW5lcmF0
ZV9vdXRwdXQpOgorICAgICAgICAoVHlwZUJ1aWxkZXJIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRl
X2ZvcndhcmRfZGVjbGFyYXRpb25zKToKKyAgICAgICAgKF9nZW5lcmF0ZV90eXBlZGVmcyk6Cisg
ICAgICAgIChfZ2VuZXJhdGVfdHlwZWRlZnNfZm9yX2RvbWFpbik6CisgICAgICAgIChfZ2VuZXJh
dGVfYnVpbGRlcnNfZm9yX2RvbWFpbik6CisgICAgICAgIChfZ2VuZXJhdGVfY2xhc3NfZm9yX29i
amVjdF9kZWNsYXJhdGlvbik6CisgICAgICAgIChfZ2VuZXJhdGVfc3RydWN0X2Zvcl9lbnVtX2Rl
Y2xhcmF0aW9uKToKKyAgICAgICAgKF9nZW5lcmF0ZV9zdHJ1Y3RfZm9yX2Fub255bW91c19lbnVt
X21lbWJlcik6CisgICAgICAgIChfZ2VuZXJhdGVfc3RydWN0X2Zvcl9hbm9ueW1vdXNfZW51bV9t
ZW1iZXIuYXBwbHlfaW5kZW50YXRpb24pOgorICAgICAgICAoX2dlbmVyYXRlX3N0cnVjdF9mb3Jf
ZW51bV90eXBlKToKKyAgICAgICAgKF9nZW5lcmF0ZV9idWlsZGVyX3N0YXRlX2VudW0pOgorICAg
ICAgICAoX2dlbmVyYXRlX2J1aWxkZXJfc2V0dGVyX2Zvcl9tZW1iZXIpOgorICAgICAgICAoX2dl
bmVyYXRlX3VuY2hlY2tlZF9zZXR0ZXJfZm9yX21lbWJlcik6CisgICAgICAgIChfZ2VuZXJhdGVf
Zm9yd2FyZF9kZWNsYXJhdGlvbnNfZm9yX2JpbmRpbmdfdHJhaXRzKToKKyAgICAgICAgKiBpbnNw
ZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX3R5cGVfYnVpbGRlcl9pbXBsZW1lbnRhdGlv
bi5weTogQWRkZWQuCisgICAgICAgIChUeXBlQnVpbGRlckltcGxlbWVudGF0aW9uR2VuZXJhdG9y
KToKKyAgICAgICAgKFR5cGVCdWlsZGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX19pbml0X18p
OgorICAgICAgICAoVHlwZUJ1aWxkZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5tb2RlbCk6Cisg
ICAgICAgIChUeXBlQnVpbGRlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLm91dHB1dF9maWxlbmFt
ZSk6CisgICAgICAgIChUeXBlQnVpbGRlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLmdlbmVyYXRl
X2xpY2Vuc2UpOgorICAgICAgICAoVHlwZUJ1aWxkZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5n
ZW5lcmF0ZV9vdXRwdXQpOgorICAgICAgICAoVHlwZUJ1aWxkZXJJbXBsZW1lbnRhdGlvbkdlbmVy
YXRvci5fZ2VuZXJhdGVfZW51bV9tYXBwaW5nKToKKyAgICAgICAgKFR5cGVCdWlsZGVySW1wbGVt
ZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX29wZW5fZmllbGRfbmFtZXMpOgorICAgICAgICAo
VHlwZUJ1aWxkZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfYnVpbGRlcnNfZm9y
X2RvbWFpbik6CisgICAgICAgIChUeXBlQnVpbGRlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9n
ZW5lcmF0ZV9ydW50aW1lX2Nhc3RfZm9yX29iamVjdF9kZWNsYXJhdGlvbik6CisgICAgICAgIChU
eXBlQnVpbGRlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9hc3NlcnRpb25fZm9y
X29iamVjdF9kZWNsYXJhdGlvbik6CisgICAgICAgIChUeXBlQnVpbGRlckltcGxlbWVudGF0aW9u
R2VuZXJhdG9yLl9nZW5lcmF0ZV9hc3NlcnRpb25fZm9yX2VudW0pOgorICAgICAgICAqIGluc3Bl
Y3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdG9yLnB5OiBBZGRlZC4KKyAgICAgICAgKHVjZmly
c3QpOgorICAgICAgICAoR2VuZXJhdG9yKToKKyAgICAgICAgKEdlbmVyYXRvci5fX2luaXRfXyk6
CisgICAgICAgIChHZW5lcmF0b3IubW9kZWwpOgorICAgICAgICAoR2VuZXJhdG9yLmRvbWFpbnNf
dG9fZ2VuZXJhdGUpOgorICAgICAgICAoR2VuZXJhdG9yLmdlbmVyYXRlX291dHB1dCk6CisgICAg
ICAgIChHZW5lcmF0b3Iub3V0cHV0X2ZpbGVuYW1lKToKKyAgICAgICAgKEdlbmVyYXRvci5lbmNv
ZGluZ19mb3JfZW51bV92YWx1ZSk6CisgICAgICAgIChHZW5lcmF0b3IuYXNzaWduZWRfZW51bV92
YWx1ZXMpOgorICAgICAgICAoR2VuZXJhdG9yLnR5cGVfbmVlZHNfcnVudGltZV9jYXN0cyk6Cisg
ICAgICAgIChHZW5lcmF0b3IudHlwZV9oYXNfb3Blbl9maWVsZHMpOgorICAgICAgICAoR2VuZXJh
dG9yLnR5cGVfbmVlZHNfc2hhcGVfYXNzZXJ0aW9ucyk6CisgICAgICAgIChHZW5lcmF0b3IuYWxs
X3R5cGVzX25lZWRpbmdfc2hhcGVfYXNzZXJ0aW9ucyk6CisgICAgICAgIChHZW5lcmF0b3IuY2Fs
Y3VsYXRlX3R5cGVzX3JlcXVpcmluZ19zaGFwZV9hc3NlcnRpb25zKToKKyAgICAgICAgKEdlbmVy
YXRvci5jYWxjdWxhdGVfdHlwZXNfcmVxdWlyaW5nX3NoYXBlX2Fzc2VydGlvbnMuZ2F0aGVyX3Ry
YW5zaXRpdmVseV9yZWZlcmVuY2VkX3R5cGVzKToKKyAgICAgICAgKEdlbmVyYXRvci5fdHJhdmVy
c2VfYW5kX2Fzc2lnbl9lbnVtX3ZhbHVlcyk6CisgICAgICAgIChHZW5lcmF0b3IuX2Fzc2lnbl9l
bmNvZGluZ19mb3JfZW51bV92YWx1ZSk6CisgICAgICAgIChHZW5lcmF0b3Iud3JhcF93aXRoX2d1
YXJkX2Zvcl9kb21haW4pOgorICAgICAgICAoR2VuZXJhdG9yLnN0eWxpemVkX25hbWVfZm9yX2Vu
dW1fdmFsdWUpOgorICAgICAgICAoR2VuZXJhdG9yLnN0eWxpemVkX25hbWVfZm9yX2VudW1fdmFs
dWUucmVwbGFjZUNhbGxiYWNrKToKKyAgICAgICAgKEdlbmVyYXRvci5rZXllZF9nZXRfbWV0aG9k
X2Zvcl90eXBlKToKKyAgICAgICAgKEdlbmVyYXRvci5rZXllZF9zZXRfbWV0aG9kX2Zvcl90eXBl
KToKKyAgICAgICAgKEdlbmVyYXRvci50eXBlX2J1aWxkZXJfc3RyaW5nX2Zvcl90eXBlKToKKyAg
ICAgICAgKEdlbmVyYXRvci50eXBlX2J1aWxkZXJfc3RyaW5nX2Zvcl90eXBlX21lbWJlcik6Cisg
ICAgICAgIChHZW5lcmF0b3IudHlwZV9zdHJpbmdfZm9yX3VuY2hlY2tlZF9mb3JtYWxfaW5fcGFy
YW1ldGVyKToKKyAgICAgICAgKEdlbmVyYXRvci50eXBlX3N0cmluZ19mb3JfY2hlY2tlZF9mb3Jt
YWxfaW5fcGFyYW1ldGVyKToKKyAgICAgICAgKEdlbmVyYXRvci50eXBlX3N0cmluZ19mb3JfdHlw
ZV9tZW1iZXIpOgorICAgICAgICAoR2VuZXJhdG9yLnR5cGVfc3RyaW5nX2Zvcl90eXBlX3dpdGhf
bmFtZSk6CisgICAgICAgIChHZW5lcmF0b3IudHlwZV9zdHJpbmdfZm9yX2Zvcm1hbF9vdXRfcGFy
YW1ldGVyKToKKyAgICAgICAgKEdlbmVyYXRvci50eXBlX3N0cmluZ19mb3JfZm9ybWFsX2FzeW5j
X3BhcmFtZXRlcik6CisgICAgICAgIChHZW5lcmF0b3IudHlwZV9zdHJpbmdfZm9yX3N0YWNrX2lu
X3BhcmFtZXRlcik6CisgICAgICAgIChHZW5lcmF0b3IudHlwZV9zdHJpbmdfZm9yX3N0YWNrX291
dF9wYXJhbWV0ZXIpOgorICAgICAgICAoR2VuZXJhdG9yLmFzc2VydGlvbl9tZXRob2RfZm9yX3R5
cGVfbWVtYmVyKToKKyAgICAgICAgKEdlbmVyYXRvci5hc3NlcnRpb25fbWV0aG9kX2Zvcl90eXBl
X21lbWJlci5hc3NlcnRpb25fbWV0aG9kX2Zvcl90eXBlKToKKyAgICAgICAgKEdlbmVyYXRvci5j
cHBfbmFtZV9mb3JfcHJpbWl0aXZlX3R5cGUpOgorICAgICAgICAoR2VuZXJhdG9yLmpzX25hbWVf
Zm9yX3BhcmFtZXRlcl90eXBlKToKKyAgICAgICAgKEdlbmVyYXRvci5zaG91bGRfdXNlX3dyYXBw
ZXJfZm9yX3JldHVybl90eXBlKToKKyAgICAgICAgKEdlbmVyYXRvci5zaG91bGRfcGFzc19ieV9j
b3B5X2Zvcl9yZXR1cm5fdHlwZSk6CisgICAgICAgIChEdW1teUdlbmVyYXRvcik6CisgICAgICAg
ICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0b3JfdGVtcGxhdGVzLnB5OiBBZGRl
ZC4KKyAgICAgICAgKEdlbmVyYXRvclRlbXBsYXRlcyk6CisgICAgICAgICh2b2lkKToKKyAgICAg
ICAgKEhhc2hNYXApOgorICAgICAgICAoQnVpbGRlcik6CisgICAgICAgIChJbnNwZWN0b3IpOgor
ICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vbW9kZWxzLnB5OiBBZGRlZC4KKyAg
ICAgICAgKFBhcnNlRXhjZXB0aW9uKToKKyAgICAgICAgKFR5cGVjaGVja0V4Y2VwdGlvbik6Cisg
ICAgICAgIChGcmFtZXdvcmspOgorICAgICAgICAoRnJhbWV3b3JrLl9faW5pdF9fKToKKyAgICAg
ICAgKEZyYW1ld29yay5zZXR0aW5nKToKKyAgICAgICAgKEZyYW1ld29yay5mcm9tU3RyaW5nKToK
KyAgICAgICAgKEZyYW1ld29ya3MpOgorICAgICAgICAoVHlwZVJlZmVyZW5jZSk6CisgICAgICAg
IChUeXBlUmVmZXJlbmNlLl9faW5pdF9fKToKKyAgICAgICAgKFR5cGVSZWZlcmVuY2UucmVmZXJl
bmNlZF9uYW1lKToKKyAgICAgICAgKFR5cGUpOgorICAgICAgICAoVHlwZS5fX2luaXRfXyk6Cisg
ICAgICAgIChUeXBlLl9fZXFfXyk6CisgICAgICAgIChUeXBlLl9faGFzaF9fKToKKyAgICAgICAg
KFR5cGUuaXNfZW51bSk6CisgICAgICAgIChUeXBlLnR5cGVfZG9tYWluKToKKyAgICAgICAgKFR5
cGUucmF3X25hbWUpOgorICAgICAgICAoVHlwZS5xdWFsaWZpZWRfbmFtZSk6CisgICAgICAgIChU
eXBlLnJlc29sdmVfdHlwZV9yZWZlcmVuY2VzKToKKyAgICAgICAgKFByaW1pdGl2ZVR5cGUpOgor
ICAgICAgICAoUHJpbWl0aXZlVHlwZS5fX2luaXRfXyk6CisgICAgICAgIChQcmltaXRpdmVUeXBl
Ll9fcmVwcl9fKToKKyAgICAgICAgKFByaW1pdGl2ZVR5cGUudHlwZV9kb21haW4pOgorICAgICAg
ICAoUHJpbWl0aXZlVHlwZS5xdWFsaWZpZWRfbmFtZSk6CisgICAgICAgIChBbGlhc2VkVHlwZSk6
CisgICAgICAgIChBbGlhc2VkVHlwZS5fX2luaXRfXyk6CisgICAgICAgIChBbGlhc2VkVHlwZS5f
X3JlcHJfXyk6CisgICAgICAgIChBbGlhc2VkVHlwZS5pc19lbnVtKToKKyAgICAgICAgKEFsaWFz
ZWRUeXBlLnR5cGVfZG9tYWluKToKKyAgICAgICAgKEFsaWFzZWRUeXBlLnF1YWxpZmllZF9uYW1l
KToKKyAgICAgICAgKEFsaWFzZWRUeXBlLnJlc29sdmVfdHlwZV9yZWZlcmVuY2VzKToKKyAgICAg
ICAgKEVudW1UeXBlKToKKyAgICAgICAgKEVudW1UeXBlLl9faW5pdF9fKToKKyAgICAgICAgKEVu
dW1UeXBlLl9fcmVwcl9fKToKKyAgICAgICAgKEVudW1UeXBlLmlzX2VudW0pOgorICAgICAgICAo
RW51bVR5cGUudHlwZV9kb21haW4pOgorICAgICAgICAoRW51bVR5cGUuZW51bV92YWx1ZXMpOgor
ICAgICAgICAoRW51bVR5cGUucXVhbGlmaWVkX25hbWUpOgorICAgICAgICAoRW51bVR5cGUucmVz
b2x2ZV90eXBlX3JlZmVyZW5jZXMpOgorICAgICAgICAoQXJyYXlUeXBlKToKKyAgICAgICAgKEFy
cmF5VHlwZS5fX2luaXRfXyk6CisgICAgICAgIChBcnJheVR5cGUuX19yZXByX18pOgorICAgICAg
ICAoQXJyYXlUeXBlLnR5cGVfZG9tYWluKToKKyAgICAgICAgKEFycmF5VHlwZS5xdWFsaWZpZWRf
bmFtZSk6CisgICAgICAgIChBcnJheVR5cGUucmVzb2x2ZV90eXBlX3JlZmVyZW5jZXMpOgorICAg
ICAgICAoT2JqZWN0VHlwZSk6CisgICAgICAgIChPYmplY3RUeXBlLl9faW5pdF9fKToKKyAgICAg
ICAgKE9iamVjdFR5cGUuX19yZXByX18pOgorICAgICAgICAoT2JqZWN0VHlwZS50eXBlX2RvbWFp
bik6CisgICAgICAgIChPYmplY3RUeXBlLnF1YWxpZmllZF9uYW1lKToKKyAgICAgICAgKGNoZWNr
X2Zvcl9yZXF1aXJlZF9wcm9wZXJ0aWVzKToKKyAgICAgICAgKFByb3RvY29sKToKKyAgICAgICAg
KFByb3RvY29sLl9faW5pdF9fKToKKyAgICAgICAgKFByb3RvY29sLnBhcnNlX3NwZWNpZmljYXRp
b24pOgorICAgICAgICAoUHJvdG9jb2wucGFyc2VfZG9tYWluKToKKyAgICAgICAgKFByb3RvY29s
LnBhcnNlX3R5cGVfZGVjbGFyYXRpb24pOgorICAgICAgICAoUHJvdG9jb2wucGFyc2VfdHlwZV9t
ZW1iZXIpOgorICAgICAgICAoUHJvdG9jb2wucGFyc2VfY29tbWFuZCk6CisgICAgICAgIChQcm90
b2NvbC5wYXJzZV9ldmVudCk6CisgICAgICAgIChQcm90b2NvbC5wYXJzZV9wYXJhbWV0ZXIpOgor
ICAgICAgICAoUHJvdG9jb2wucmVzb2x2ZV90eXBlcyk6CisgICAgICAgIChQcm90b2NvbC5sb29r
dXBfdHlwZV9mb3JfZGVjbGFyYXRpb24pOgorICAgICAgICAoUHJvdG9jb2wubG9va3VwX3R5cGVf
cmVmZXJlbmNlKToKKyAgICAgICAgKERvbWFpbik6CisgICAgICAgIChEb21haW4uX19pbml0X18p
OgorICAgICAgICAoRG9tYWluLnJlc29sdmVfdHlwZV9yZWZlcmVuY2VzKToKKyAgICAgICAgKERv
bWFpbnMpOgorICAgICAgICAoVHlwZURlY2xhcmF0aW9uKToKKyAgICAgICAgKFR5cGVEZWNsYXJh
dGlvbi5fX2luaXRfXyk6CisgICAgICAgIChUeXBlRGVjbGFyYXRpb24ucmVzb2x2ZV90eXBlX3Jl
ZmVyZW5jZXMpOgorICAgICAgICAoVHlwZU1lbWJlcik6CisgICAgICAgIChUeXBlTWVtYmVyLl9f
aW5pdF9fKToKKyAgICAgICAgKFR5cGVNZW1iZXIucmVzb2x2ZV90eXBlX3JlZmVyZW5jZXMpOgor
ICAgICAgICAoUGFyYW1ldGVyKToKKyAgICAgICAgKFBhcmFtZXRlci5fX2luaXRfXyk6CisgICAg
ICAgIChQYXJhbWV0ZXIucmVzb2x2ZV90eXBlX3JlZmVyZW5jZXMpOgorICAgICAgICAoQ29tbWFu
ZCk6CisgICAgICAgIChDb21tYW5kLl9faW5pdF9fKToKKyAgICAgICAgKENvbW1hbmQucmVzb2x2
ZV90eXBlX3JlZmVyZW5jZXMpOgorICAgICAgICAoRXZlbnQpOgorICAgICAgICAoRXZlbnQuX19p
bml0X18pOgorICAgICAgICAoRXZlbnQucmVzb2x2ZV90eXBlX3JlZmVyZW5jZXMpOgorICAgICAg
ICAqIGluc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weTogQWRkZWQuCisgICAgICAgIChJbmNyZW1lbnRhbEZpbGVXcml0ZXIpOgorICAgICAgICAo
SW5jcmVtZW50YWxGaWxlV3JpdGVyLl9faW5pdF9fKToKKyAgICAgICAgKEluY3JlbWVudGFsRmls
ZVdyaXRlci53cml0ZSk6CisgICAgICAgIChJbmNyZW1lbnRhbEZpbGVXcml0ZXIuY2xvc2UpOgor
ICAgICAgICAoZ2VuZXJhdGVfZnJvbV9zcGVjaWZpY2F0aW9uKToKKyAgICAgICAgKGdlbmVyYXRl
X2Zyb21fc3BlY2lmaWNhdGlvbi5sb2FkX3NwZWNpZmljYXRpb24pOgorICAgICAgICAqIGluc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2NvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb246IEFk
ZGVkLgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2NvbW1hbmRzLXdpdGgtb3B0
aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uOiBBZGRlZC4KKyAgICAgICAgKiBpbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9kb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpz
b246IEFkZGVkLgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V2ZW50cy13aXRo
LW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbjogQWRkZWQuCisgICAgICAgICogaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbi1y
ZXN1bHQ6IEFkZGVkLgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVk
L2NvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uLXJlc3Vs
dDogQWRkZWQuCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZG9t
YWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uLXJlc3VsdDogQWRkZWQuCisgICAg
ICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZXZlbnRzLXdpdGgtb3B0aW9u
YWwtcGFyYW1ldGVycy5qc29uLXJlc3VsdDogQWRkZWQuCisgICAgICAgICogaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1kdXBsaWNhdGUtdHlwZS1kZWNsYXJhdGlvbnMu
anNvbi1lcnJvcjogQWRkZWQuCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhw
ZWN0ZWQvZmFpbC1vbi10eXBlLWRlY2xhcmF0aW9uLXVzaW5nLXR5cGUtcmVmZXJlbmNlLmpzb24t
ZXJyb3I6IEFkZGVkLgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVk
L2ZhaWwtb24tdHlwZS1kZWNsYXJhdGlvbi11c2luZy10eXBlLXJlZmVyZW5jZS5qc29uLXJlc3Vs
dDogQWRkZWQuCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFp
bC1vbi11bmtub3duLXR5cGUtcmVmZXJlbmNlLWluLXR5cGUtZGVjbGFyYXRpb24uanNvbi1lcnJv
cjogQWRkZWQuCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFp
bC1vbi11bmtub3duLXR5cGUtcmVmZXJlbmNlLWluLXR5cGUtbWVtYmVyLmpzb24tZXJyb3I6IEFk
ZGVkLgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3NhbWUtdHlw
ZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24tZXJyb3I6IEFkZGVkLgorICAgICAgICAqIGluc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3NhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWlu
Lmpzb24tcmVzdWx0OiBBZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9l
eHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbi1yZXN1
bHQ6IEFkZGVkLgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5
cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uLWVycm9yOiBBZGRlZC4KKyAgICAgICAgKiBp
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5
cGUuanNvbi1yZXN1bHQ6IEFkZGVkLgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24tcmVzdWx0OiBBZGRlZC4K
KyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0
aW9uLW9iamVjdC10eXBlLmpzb24tcmVzdWx0OiBBZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24t
cmVzdWx0OiBBZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9u
LWR1cGxpY2F0ZS10eXBlLWRlY2xhcmF0aW9ucy5qc29uOiBBZGRlZC4KKyAgICAgICAgKiBpbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLXR5cGUtZGVjbGFyYXRpb24tdXNpbmctdHlwZS1y
ZWZlcmVuY2UuanNvbjogQWRkZWQuCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
ZmFpbC1vbi11bmtub3duLXR5cGUtcmVmZXJlbmNlLWluLXR5cGUtZGVjbGFyYXRpb24uanNvbjog
QWRkZWQuCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi11bmtub3du
LXR5cGUtcmVmZXJlbmNlLWluLXR5cGUtbWVtYmVyLmpzb246IEFkZGVkLgorICAgICAgICAqIGlu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3NhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb246
IEFkZGVkLgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3R5cGUtZGVjbGFyYXRp
b24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uOiBBZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy90eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbjogQWRkZWQu
CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvdHlwZS1kZWNsYXJhdGlvbi1lbnVt
LXR5cGUuanNvbjogQWRkZWQuCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvdHlw
ZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uOiBBZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy90eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb246IEFkZGVk
LgorCiAyMDE0LTA1LTIzICBNYXJrIEhhaG5lbmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+
CiAKICAgICAgICAgUmVtb3ZlIG9wZXJhdGlvbkNhbGxHZXR0ZXIKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA0NjJm
ZmJjNDBlMjYyZjI2ODc3OGI1MWQ4MDY0M2Y1OWE5YjNkNDAxLi5lZTRmZjZjNjkyMzI2ZWEwMjA3
NmI3NDg5NTM3MTg4ODlkMmJjOWNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjcgQEAKKzIwMTQt
MDUtMjUgIEJyaWFuIEouIEJ1cmcgIDxidXJnQGNzLndhc2hpbmd0b24uZWR1PgorCisgICAgICAg
IFdlYiBJbnNwZWN0b3I6IHJld3JpdGUgQ29kZUdlbmVyYXRvckluc3BlY3RvciB0byBiZSBtb2R1
bGFyIGFuZCB0ZXN0YWJsZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTMxNTk2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgQXNpZGUgZnJvbSBob29raW5nIHVwIHRoZSBuZXcgaW5zcGVjdG9yIGJpbmRpbmdz
IGdlbmVyYXRvciB0byB0aGUgYnVpbGQgc3lzdGVtLAorICAgICAgICB0aGVyZSBhcmUgYSBmZXcg
Y29taW5nbGVkIGNoYW5nZXMgdGhhdCB3b3VsZCBiZSBwYWluZnVsIHRvIHNwbGl0IGZyb20gdGhl
IG1haW4KKyAgICAgICAgcGF0Y2guIFRvZ2V0aGVyLCB0aGVzZSBjaGFuZ2VzIG1ha2UgaXQgcG9z
c2libGUgdG8gZm9yd2FyZC1kZWNsYXJlIGFsbCBwcm90b2NvbAorICAgICAgICBlbnVtZXJhdGlv
bnMgYXMgc2NvcGVkIGVudW1zLCByZWR1Y2luZyB3ZWlyZCBvcmRlcmluZyBkZXBlbmRlbmNpZXMg
YmV0d2VlbiBkb21haW5zLgorCisgICAgICAgIEFsbCBydW50aW1lQ2FzdCgpIG1ldGhvZHMgYXJl
IG5vdyBzdGF0aWMgbWV0aG9kcyBvZiBCaW5kaW5nVHJhaXRzIHNwZWNpYWxpemF0aW9ucywKKyAg
ICAgICAgcmF0aGVyIHRoYW4gYXMgc3RhdGljIG1ldGhvZHMgb2YgdGhlIHR5cGUgYnVpbGRlciBj
bGFzc2VzLgorCisgICAgICAgIEFsbCBwcm90b2NvbCBlbnVtZXJhdGlvbiB0eXBlcyBhcmUgc2Nv
cGVkIGVudW1zIHJhdGhlciB0aGFuIHN0cnVjdC1uYW1lc3BhY2VkIGVudW1zLgorCisgICAgICAg
IFJlbW92ZSBzb21lIGltcGxpY2l0IHByb3RvY29sIHR5cGUgYW5kIGVudW1lcmF0aW9uIGRlZmlu
aXRpb25zIGJlY2F1c2UgdGhleSB0cmlnZ2VyCisgICAgICAgIGNvbXBpbGVyIGJ1Z3Mgb3IgaW50
cm9kdWNlIHVubmVjZXNzYXJ5IGNvbXBsZXhpdHkgaW4gdGhlIGJpbmRpbmdzIGdlbmVyYXRvci4K
KworICAgICAgICBObyBuZXcgdGVzdHMsIG5vIGJlaGF2aW9yIGNoYW5nZWQuCisKKyAgICAgICAg
KiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy5tYWtlOiBVcGRhdGUg
c2NyaXB0IGRlcGVuZGVuY2llcyBhbmQgdGhlIGJpbmRpbmdzIGdlbmVyYXRvciBzY3JpcHQgbmFt
ZS4KKworICAgICAgICAqIGluc3BlY3Rvci9Db21tYW5kTGluZUFQSUhvc3QuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q29tbWFuZExpbmVBUElIb3N0OjppbnNwZWN0SW1wbCk6IENvbnZlcnQgdG8g
QmluZGluZ1RyYWl0cy4KKworICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6ZGV0ZWN0T3JpZ2luKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50OjpidWlsZEFycmF5Rm9yUmVnaW9u
cyk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50Lmg6CisgICAgICAgICog
aW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckRPTUFnZW50OjpidWlsZE9iamVjdEZvckFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzKToKKyAg
ICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvclBhZ2VBZ2VudDo6cmVzb3VyY2VUeXBlSnNvbik6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JQYWdlQWdlbnQ6OmNhY2hlZFJlc291cmNlVHlwZUpzb24pOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yUGFnZUFnZW50OjpnZXRTY3JpcHRFeGVjdXRpb25TdGF0dXMp
OiBDb252ZXJ0IHRvIHNjb3BlZCBlbnVtcy4KKworICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
UGFnZUFnZW50OjpidWlsZE9iamVjdEZvckZyYW1lVHJlZSk6IEV4dHJhY3QgRnJhbWVSZXNvdXJj
ZVRyZWU6OlJlc291cmNlcworICAgICAgICBpbnRvIGl0cyBvd24gZXhwbGljaXRseS1kZWZpbmVk
IG9iamVjdCB0eXBlLiBUaGUgbmV3IGdlbmVyYXRvciBkb2VzIG5vdCBzdXBwb3J0IGltcGxpY2l0
bHkKKyAgICAgICAgZGVmaW5pbmcgb2JqZWN0IHR5cGVzIGFzIGVsZW1lbnRzIG9mIGFycmF5cy4K
KyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50Lmg6CisKKyAgICAgICAgKiBp
bnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JSZXNvdXJjZUFnZW50Ojp3aWxsU2VuZFJlcXVlc3QpOgorICAgICAgICAqIGluc3Bl
Y3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcDogQ29udmVydCB0byBzY29wZWQgZW51bXMuIEV4
dHJhY3QgQ1NTUHJvcGVydHk6OlN0YXR1cworICAgICAgICBiZWNhdXNlIHNjb3BlZCBlbnVtcyBk
ZWZpbmVkIGluIGEgY2xhc3Mgc2NvcGUgdHJpZ2dlciBjb21waWxlciBidWdzIGluIEdDQyA0Ljgu
CisgICAgICAgIChXZWJDb3JlOjpidWlsZE1lZGlhT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvclN0eWxlOjpzdHlsZVdpdGhQcm9wZXJ0aWVzKTogV29yayBhcm91bmQgY29tcGls
ZXIgZGlzYWdyZWVtZW50cy4KKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0eWxlU2hlZXQ6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZVNoZWV0OjpJbnNwZWN0
b3JTdHlsZVNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0eWxlU2hlZXRGb3JJ
bmxpbmVTdHlsZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0eWxlU2hl
ZXRGb3JJbmxpbmVTdHlsZTo6SW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlKToKKyAg
ICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5oOgorCisgICAgICAgICogaW5z
cGVjdG9yL0luc3BlY3RvclRpbWVsaW5lQWdlbnQuY3BwOiBDb252ZXJ0IHRvIHNjb3BlZCBlbnVt
cyBhbmQgQmluZGluZ1RyYWl0cy4KKyAgICAgICAgKFdlYkNvcmU6OnRvUHJvdG9jb2wpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6YWRkUmVjb3JkVG9UaW1lbGlu
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpzZW5kRXZlbnQp
OgorCisgICAgICAgICogaW5zcGVjdG9yL3Byb3RvY29sL0NTUy5qc29uOiBFeHRyYWN0IENTU1By
b3BlcnR5OjpTdGF0dXMuCisgICAgICAgICogaW5zcGVjdG9yL3Byb3RvY29sL1BhZ2UuanNvbjog
RXh0cmFjdCBGcmFtZVJlc291cmNlVHJlZTo6UmVzb3VyY2VzLgorCiAyMDE0LTA1LTI0ICBDaHJp
cyBGbGVpemFjaCAgPGNmbGVpemFjaEBhcHBsZS5jb20+CiAKICAgICAgICAgQVg6IGZpeCBjb29y
ZGluYXRlIG1hcHBpbmcgZm9yIGlPUyBhY2Nlc3NpYmlsaXR5CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViSW5zcGVjdG9yVUkvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxv
ZwppbmRleCAxM2UyYzYyYWIwNDcwZTIyMGM0ZmZhMDIzMDBlODhlMzU2ZGM2YTFlLi5hYzdlZWUx
M2IwNTM0NDVlOTU3ODgwNTAwYzZmMjFlYzIzY2UzNjU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwxNSBAQAorMjAxNC0wNS0yNSAgQnJpYW4gSi4gQnVyZyAgPGJ1cmdAY3Mu
d2FzaGluZ3Rvbi5lZHU+CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogcmV3cml0ZSBDb2RlR2Vu
ZXJhdG9ySW5zcGVjdG9yIHRvIGJlIG1vZHVsYXIgYW5kIHRlc3RhYmxlCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzE1OTYKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBbHNvIGFwcGx5IHR5cGUgZXh0cmFj
dGlvbiByZWZhY3RvcmluZ3MgdG8gb2xkIHByb3RvY29sIHZlcnNpb25zIGZvciBjb25zaXN0ZW5j
eS4KKworICAgICAgICAqIFZlcnNpb25zL0luc3BlY3Rvci1pT1MtNi4wLmpzb246CisgICAgICAg
ICogVmVyc2lvbnMvSW5zcGVjdG9yLWlPUy03LjAuanNvbjoKKwogMjAxNC0wNS0xOSAgSm9ubyBX
ZWxscyAgPGpvbm93ZWxsc0BhcHBsZS5jb20+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogSW5z
cGVjdCBFbGVtZW50IHNvbWV0aW1lcyBkb2VzIG5vdCBzZWxlY3QgdGhlIHJpZ2h0IERPTSBOb2Rl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggY2RjZTFiODEyMmQzNTYxOGI1
ODA3MzE2NWY5ZDdmNjk5ZTQ2MWZkYy4uNmRmY2QyYjYxZjdiN2FhYjk0YWRlMmJhZDkyOWNhYTQy
MGM3OTgzZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dApAQCAtODM4LDYgKzgz
OCwyMSBAQCBBRERfU09VUkNFX0RFUEVOREVOQ0lFUygke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJ
Un0vcGFyc2VyL0xleGVyLmNwcCAke0RFUklWRURfUwogCiBzZXQoSmF2YVNjcmlwdENvcmVfSU5T
UEVDVE9SX1NDUklQVFNfRElSICIke0pBVkFTQ1JJUFRDT1JFX0RJUn0vaW5zcGVjdG9yL3Njcmlw
dHMiKQogCitzZXQoSmF2YVNjcmlwdENvcmVfSU5TUEVDVE9SX1BST1RPQ09MX1NDUklQVFMKKyAg
ICAke0phdmFTY3JpcHRDb3JlX0lOU1BFQ1RPUl9TQ1JJUFRTX0RJUn0vZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisgICAgJHtKYXZhU2NyaXB0Q29yZV9JTlNQRUNUT1Jf
U0NSSVBUU19ESVJ9L2NvZGVnZW4vZ2VuZXJhdGVfYmFja2VuZF9jb21tYW5kcy5weQorICAgICR7
SmF2YVNjcmlwdENvcmVfSU5TUEVDVE9SX1NDUklQVFNfRElSfS9jb2RlZ2VuL2dlbmVyYXRlX2Jh
Y2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkKKyAgICAke0phdmFTY3JpcHRDb3JlX0lOU1BFQ1RP
Ul9TQ1JJUFRTX0RJUn0vY29kZWdlbi9nZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVt
ZW50YXRpb24ucHkKKyAgICAke0phdmFTY3JpcHRDb3JlX0lOU1BFQ1RPUl9TQ1JJUFRTX0RJUn0v
Y29kZWdlbi9nZW5lcmF0ZV9mcm9udGVuZF9kaXNwYXRjaGVyX2hlYWRlci5weQorICAgICR7SmF2
YVNjcmlwdENvcmVfSU5TUEVDVE9SX1NDUklQVFNfRElSfS9jb2RlZ2VuL2dlbmVyYXRlX2Zyb250
ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkKKyAgICAke0phdmFTY3JpcHRDb3JlX0lO
U1BFQ1RPUl9TQ1JJUFRTX0RJUn0vY29kZWdlbi9nZW5lcmF0ZV90eXBlX2J1aWxkZXJfaGVhZGVy
LnB5CisgICAgJHtKYXZhU2NyaXB0Q29yZV9JTlNQRUNUT1JfU0NSSVBUU19ESVJ9L2NvZGVnZW4v
Z2VuZXJhdGVfdHlwZV9idWlsZGVyX2ltcGxlbWVudGF0aW9uLnB5CisgICAgJHtKYXZhU2NyaXB0
Q29yZV9JTlNQRUNUT1JfU0NSSVBUU19ESVJ9L2NvZGVnZW4vZ2VuZXJhdG9yLnB5CisgICAgJHtK
YXZhU2NyaXB0Q29yZV9JTlNQRUNUT1JfU0NSSVBUU19ESVJ9L2NvZGVnZW4vZ2VuZXJhdG9yX3Rl
bXBsYXRlcy5weQorICAgICR7SmF2YVNjcmlwdENvcmVfSU5TUEVDVE9SX1NDUklQVFNfRElSfS9j
b2RlZ2VuL19faW5pdF9fLnB5CisgICAgJHtKYXZhU2NyaXB0Q29yZV9JTlNQRUNUT1JfU0NSSVBU
U19ESVJ9L2NvZGVnZW4vbW9kZWxzLnB5CispCisKIHNldChKYXZhU2NyaXB0Q29yZV9JTlNQRUNU
T1JfRE9NQUlOUwogICAgICR7SkFWQVNDUklQVENPUkVfRElSfS9pbnNwZWN0b3IvcHJvdG9jb2wv
Q29uc29sZS5qc29uCiAgICAgJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L2luc3BlY3Rvci9wcm90b2Nv
bC9EZWJ1Z2dlci5qc29uCkBAIC04NjIsMTEgKzg3NywxMCBAQCBhZGRfY3VzdG9tX2NvbW1hbmQo
CiAgICAgICAgICAgICR7REVSSVZFRF9TT1VSQ0VTX0pBVkFTQ1JJUFRDT1JFX0RJUn0vSW5zcGVj
dG9ySlNGcm9udGVuZERpc3BhdGNoZXJzLmgKICAgICAgICAgICAgJHtERVJJVkVEX1NPVVJDRVNf
SkFWQVNDUklQVENPUkVfRElSfS9JbnNwZWN0b3JKU1R5cGVCdWlsZGVycy5jcHAKICAgICAgICAg
ICAgJHtERVJJVkVEX1NPVVJDRVNfSkFWQVNDUklQVENPUkVfRElSfS9JbnNwZWN0b3JKU1R5cGVC
dWlsZGVycy5oCi0gICAgICAgICAgICR7REVSSVZFRF9TT1VSQ0VTX1dFQklOU1BFQ1RPUlVJX0RJ
Un0vVXNlckludGVyZmFjZS9Qcm90b2NvbC9JbnNwZWN0b3JKU0JhY2tlbmRDb21tYW5kcy5qcwor
ICAgICAgICAgICAke0RFUklWRURfU09VUkNFU19KQVZBU0NSSVBUQ09SRV9ESVJ9L0luc3BlY3Rv
ckpTQmFja2VuZENvbW1hbmRzLmpzCiAgICAgTUFJTl9ERVBFTkRFTkNZICR7REVSSVZFRF9TT1VS
Q0VTX0pBVkFTQ1JJUFRDT1JFX0RJUn0vSW5zcGVjdG9ySlMuanNvbgotICAgIERFUEVORFMgJHtK
YXZhU2NyaXB0Q29yZV9JTlNQRUNUT1JfU0NSSVBUU19ESVJ9L0NvZGVHZW5lcmF0b3JJbnNwZWN0
b3IucHkKLSAgICAgICAgICAgICR7SmF2YVNjcmlwdENvcmVfSU5TUEVDVE9SX1NDUklQVFNfRElS
fS9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yU3RyaW5ncy5weQotICAgIENPTU1BTkQgJHtQWVRIT05f
RVhFQ1VUQUJMRX0gJHtKYXZhU2NyaXB0Q29yZV9JTlNQRUNUT1JfU0NSSVBUU19ESVJ9L0NvZGVH
ZW5lcmF0b3JJbnNwZWN0b3IucHkgJHtERVJJVkVEX1NPVVJDRVNfSkFWQVNDUklQVENPUkVfRElS
fS9JbnNwZWN0b3JKUy5qc29uIC0tb3V0cHV0X2hfZGlyICIke0RFUklWRURfU09VUkNFU19KQVZB
U0NSSVBUQ09SRV9ESVJ9IiAtLW91dHB1dF9jcHBfZGlyICIke0RFUklWRURfU09VUkNFU19KQVZB
U0NSSVBUQ09SRV9ESVJ9IiAtLW91dHB1dF9qc19kaXIgIiR7REVSSVZFRF9TT1VSQ0VTX1dFQklO
U1BFQ1RPUlVJX0RJUn0vVXNlckludGVyZmFjZS9Qcm90b2NvbCIgLS1vdXRwdXRfdHlwZSBKYXZh
U2NyaXB0IC0td3JpdGVfYWx3YXlzICYmIG1rZGlyIC1wICR7REVSSVZFRF9TT1VSQ0VTX0pBVkFT
Q1JJUFRDT1JFX0RJUn0vaW5zcGVjdG9yICYmIGNwICR7REVSSVZFRF9TT1VSQ0VTX0pBVkFTQ1JJ
UFRDT1JFX0RJUn0vSW5zcGVjdG9ySlNCYWNrZW5kRGlzcGF0Y2hlcnMuaCAke0RFUklWRURfU09V
UkNFU19KQVZBU0NSSVBUQ09SRV9ESVJ9L0luc3BlY3RvckpTRnJvbnRlbmREaXNwYXRjaGVycy5o
ICR7REVSSVZFRF9TT1VSQ0VTX0pBVkFTQ1JJUFRDT1JFX0RJUn0vSW5zcGVjdG9ySlNUeXBlQnVp
bGRlcnMuaCAke0RFUklWRURfU09VUkNFU19KQVZBU0NSSVBUQ09SRV9ESVJ9L2luc3BlY3Rvcgor
ICAgIERFUEVORFMgJHtKYXZhU2NyaXB0Q29yZV9JTlNQRUNUT1JfUFJPVE9DT0xfU0NJUlBUU30K
KyAgICBDT01NQU5EICR7UFlUSE9OX0VYRUNVVEFCTEV9ICR7SmF2YVNjcmlwdENvcmVfSU5TUEVD
VE9SX1NDUklQVFNfRElSfS9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkg
LS1vdXRwdXREaXIgIiR7REVSSVZFRF9TT1VSQ0VTX0pBVkFTQ1JJUFRDT1JFX0RJUn0iIC0tZnJh
bWV3b3JrIEphdmFTY3JpcHRDb3JlICR7REVSSVZFRF9TT1VSQ0VTX0pBVkFTQ1JJUFRDT1JFX0RJ
Un0vSW5zcGVjdG9ySlMuanNvbiAmJiBta2RpciAtcCAke0RFUklWRURfU09VUkNFU19KQVZBU0NS
SVBUQ09SRV9ESVJ9L2luc3BlY3RvciAmJiBjcCAke0RFUklWRURfU09VUkNFU19KQVZBU0NSSVBU
Q09SRV9ESVJ9L0luc3BlY3RvckpTQmFja2VuZERpc3BhdGNoZXJzLmggJHtERVJJVkVEX1NPVVJD
RVNfSkFWQVNDUklQVENPUkVfRElSfS9JbnNwZWN0b3JKU0Zyb250ZW5kRGlzcGF0Y2hlcnMuaCAk
e0RFUklWRURfU09VUkNFU19KQVZBU0NSSVBUQ09SRV9ESVJ9L0luc3BlY3RvckpTVHlwZUJ1aWxk
ZXJzLmggJHtERVJJVkVEX1NPVVJDRVNfSkFWQVNDUklQVENPUkVfRElSfS9pbnNwZWN0b3IgJiYg
bWtkaXIgLXAgJHtERVJJVkVEX1NPVVJDRVNfV0VCSU5TUEVDVE9SVUlfRElSfS9Vc2VySW50ZXJm
YWNlL1Byb3RvY29sICYmIGNwICR7REVSSVZFRF9TT1VSQ0VTX0pBVkFTQ1JJUFRDT1JFX0RJUn0v
SW5zcGVjdG9ySlNCYWNrZW5kQ29tbWFuZHMuanMgJHtERVJJVkVEX1NPVVJDRVNfV0VCSU5TUEVD
VE9SVUlfRElSfS9Vc2VySW50ZXJmYWNlL1Byb3RvY29sCiAgICAgVkVSQkFUSU0pCiAKICMgSlND
QnVpbHRpbnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNl
cy5tYWtlIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKaW5kZXgg
NjEwZGMxMmIwZmUxOTU1YjQ4NjdjMDkyMWEwODgwMDgwZDAxM2UzMy4uZDBkOTUxMmVhNjg1NTg0
ZGFiOGVmMjdkZGQyMjVjYTJhMzNjZmIyOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2
ZWRTb3VyY2VzLm1ha2UKQEAgLTEyMiw4ICsxMjIsMTkgQEAgSU5TUEVDVE9SX0RPTUFJTlMgPSBc
CiAjCiAKIElOU1BFQ1RPUl9HRU5FUkFUT1JfU0NSSVBUUyA9IFwKLQkkKEphdmFTY3JpcHRDb3Jl
KS9pbnNwZWN0b3Ivc2NyaXB0cy9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5IFwKLQkkKEphdmFT
Y3JpcHRDb3JlKS9pbnNwZWN0b3Ivc2NyaXB0cy9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yU3RyaW5n
cy5weSBcCisJJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9fX2lu
aXRfXy5weSBcCisJJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9n
ZW5lcmF0ZV9iYWNrZW5kX2NvbW1hbmRzLnB5IFwKKwkkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0
b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkg
XAorCSQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVf
YmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5IFwKKwkkKEphdmFTY3JpcHRDb3Jl
KS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2Zyb250ZW5kX2Rpc3BhdGNoZXJf
aGVhZGVyLnB5IFwKKwkkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2Vu
L2dlbmVyYXRlX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkgXAorCSQoSmF2
YVNjcmlwdENvcmUpL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfdHlwZV9idWls
ZGVyX2hlYWRlci5weSBcCisJJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3NjcmlwdHMvY29k
ZWdlbi9nZW5lcmF0ZV90eXBlX2J1aWxkZXJfaW1wbGVtZW50YXRpb24ucHkgXAorCSQoSmF2YVNj
cmlwdENvcmUpL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdG9yX3RlbXBsYXRlcy5w
eSBcCisJJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0
b3IucHkgXAorCSQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vbW9k
ZWxzLnB5IFwKKwkkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1j
b21iaW5lZC1pbnNwZWN0b3ItanNvbi5weSBcCisJJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5IFwKICMKIAog
YWxsIDogXApAQCAtMTQ0LDcgKzE1NSw3IEBAIEluc3BlY3RvckpTLmpzb24gOiBpbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1jb21iaW5lZC1pbnNwZWN0b3ItanNvbi5weSAkKElOU1BFCiAKICMg
SW5zcGVjdG9yIEJhY2tlbmQgRGlzcGF0Y2hlcnMsIEZyb250ZW5kIERpc3BhdGNoZXJzLCBUeXBl
IEJ1aWxkZXJzCiBJbnNwZWN0b3JKU0Zyb250ZW5kRGlzcGF0Y2hlcnMuaCA6IEluc3BlY3RvckpT
Lmpzb24gJChJTlNQRUNUT1JfR0VORVJBVE9SX1NDUklQVFMpCi0JJChQWVRIT04pICQoSmF2YVNj
cmlwdENvcmUpL2luc3BlY3Rvci9zY3JpcHRzL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkgLi9J
bnNwZWN0b3JKUy5qc29uIC0tb3V0cHV0X2hfZGlyIC4gLS1vdXRwdXRfY3BwX2RpciAuIC0tb3V0
cHV0X2pzX2RpciAuIC0tb3V0cHV0X3R5cGUgSmF2YVNjcmlwdAorCSQoUFlUSE9OKSAkKEphdmFT
Y3JpcHRDb3JlKS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkgLS1mcmFtZXdvcmsgSmF2YVNjcmlwdENvcmUgLS1vdXRwdXREaXIgLiAuL0lu
c3BlY3RvckpTLmpzb24KIAogSW5qZWN0ZWRTY3JpcHRTb3VyY2UuaCA6IGluc3BlY3Rvci9Jbmpl
Y3RlZFNjcmlwdFNvdXJjZS5qcyAkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3Ivc2NyaXB0cy9q
c21pbi5weSAkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3Ivc2NyaXB0cy94eGQucGwKIAkkKFBZ
VEhPTikgJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3NjcmlwdHMvanNtaW4ucHkgPCAkKEph
dmFTY3JpcHRDb3JlKS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRTb3VyY2UuanMgPiAuL0luamVj
dGVkU2NyaXB0U291cmNlLm1pbi5qcwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnZjeHByb2ovY29weS1maWxlcy5jbWQgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9jb3B5LWZpbGVzLmNtZAppbmRleCA1MzVlMjdi
M2ExOWUwNjc2ZTExNGQ2NTQwMjBkYzZjYmRjYTQyMzU2Li5hOTgwY2UxODY4NjliMTJhYTEzMTc4
NTEyZmVkMzU1MGQ1YTZmNGFkIDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUudmN4cHJvai9jb3B5LWZpbGVzLmNtZAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9jb3B5LWZpbGVzLmNtZApAQCAtNjQsNiArNjQs
NyBAQCBmb3IgJSVkIGluICgKIGVjaG8gQ29weWluZyBJbnNwZWN0b3Igc2NyaXB0cyBhcyBpZiB0
aGV5IHdlcmUgcHJpdmF0ZSBoZWFkZXJzLi4uDQogZm9yICUlZCBpbiAoDQogICAgIGluc3BlY3Rv
clxzY3JpcHRzDQorCWluc3BlY3RvclxzY3JpcHRzXGNvZGVnZW4NCiApIGRvICgNCiAgICAgeGNv
cHkgL3kgL2QgLi5cJSVkXCogIiVQcml2YXRlSGVhZGVyc0RpcmVjdG9yeSUiID5OVUwNCiApDQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBjMzUzYWEwNjE2MDU4ODliMzVjMGNlMTE3
NDIzMmQxNjdlODhhNjAyLi4wMGViYTViNjNmNzJlY2VmM2MxMGEzNWJkMGJlODk5NjA3NTVlYTM4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTI2OCw4ICsxMjY4LDYgQEAKIAkJ
QTUzMjQzOEExODU2ODMzNTAwMkVENjkyIC8qIEluc3BlY3RvckpTRnJvbnRlbmREaXNwYXRjaGVy
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTUzMjQz
ODQxODU2ODMxNzAwMkVENjkyIC8qIEluc3BlY3RvckpTRnJvbnRlbmREaXNwYXRjaGVycy5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE1MzI0MzhC
MTg1NjgzMzUwMDJFRDY5MiAvKiBJbnNwZWN0b3JKU1R5cGVCdWlsZGVycy5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNTMyNDM4NTE4NTY4MzE3MDAy
RUQ2OTIgLyogSW5zcGVjdG9ySlNUeXBlQnVpbGRlcnMuY3BwICovOyB9OwogCQlBNTMyNDM4QzE4
NTY4MzM1MDAyRUQ2OTIgLyogSW5zcGVjdG9ySlNUeXBlQnVpbGRlcnMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1MzI0Mzg2MTg1NjgzMTcwMDJFRDY5
MiAvKiBJbnNwZWN0b3JKU1R5cGVCdWlsZGVycy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUE1MzI0MzkyMTg1Njk3MDkwMDJFRDY5MiAvKiBDb2Rl
R2VuZXJhdG9ySW5zcGVjdG9yLnB5IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTUzMjQzOEYxODU2OTZFNjAwMkVENjkyIC8qIENvZGVHZW5lcmF0b3JJbnNw
ZWN0b3IucHkgKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
LQkJQTUzMjQzOTMxODU2OTcwOTAwMkVENjkyIC8qIENvZGVHZW5lcmF0b3JJbnNwZWN0b3JTdHJp
bmdzLnB5IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTUz
MjQzOTAxODU2OTZFNjAwMkVENjkyIC8qIENvZGVHZW5lcmF0b3JJbnNwZWN0b3JTdHJpbmdzLnB5
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE1MzI0
Mzk0MTg1Njk3MDkwMDJFRDY5MiAvKiBnZW5lcmF0ZS1jb21iaW5lZC1pbnNwZWN0b3ItanNvbi5w
eSBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1MzI0Mzkx
MTg1Njk2RTYwMDJFRDY5MiAvKiBnZW5lcmF0ZS1jb21iaW5lZC1pbnNwZWN0b3ItanNvbi5weSAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBNTMyNDM5
ODE4NTZBNDg5MDAyRUQ2OTIgLyogSW5zcGVjdG9ySlMuanNvbiBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1MzI0Mzk1MTg1NkE0NzUwMDJFRDY5MiAvKiBJ
bnNwZWN0b3JKUy5qc29uICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCUE1M0NFMDg1MThCQzFBNTYwMEJFREY3NiAvKiBDb25zb2xlUHJvdG90eXBlLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1M0NFMDgx
MThCQzFBNTYwMEJFREY3NiAvKiBDb25zb2xlUHJvdG90eXBlLmNwcCAqLzsgfTsKQEAgLTE2OTgs
NiArMTY5NiwxNyBAQAogCQlDMkZDQUUxMjE3QTlDMjRFMDAzNEM3MzUgLyogQnl0ZWNvZGVMaXZl
bmVzc0FuYWx5c2lzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEMyRkNBRTBFMTdBOUMyNEUwMDM0QzczNSAvKiBCeXRlY29kZUxpdmVuZXNzQW5hbHlz
aXMuY3BwICovOyB9OwogCQlDMkZDQUUxMzE3QTlDMjRFMDAzNEM3MzUgLyogQnl0ZWNvZGVMaXZl
bmVzc0FuYWx5c2lzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBDMkZDQUUwRjE3QTlDMjRFMDAzNEM3MzUgLyogQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lz
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQzJG
RTE4QTQxNkJBRUM0MDAwQUYzMDYxIC8qIFN0cnVjdHVyZVJhcmVEYXRhLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMkZFMThBMzE2QkFFQzQwMDBBRjMw
NjEgLyogU3RydWN0dXJlUmFyZURhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQlDNDcwM0NDMDE5Mjg0NDk2MDAxM0ZCRUEgLyogZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQzQ3MDNDQkYxOTI4NDQ5NjAwMTNGQkVBIC8qIGdlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weSAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQlDNDcwM0NDRTE5Mjg0NENDMDAxM0ZCRUEgLyogZ2Vu
ZXJhdGVfYmFja2VuZF9jb21tYW5kcy5weSBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEM0NzAzQ0MzMTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0ZV9iYWNr
ZW5kX2NvbW1hbmRzLnB5ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCUM0NzAzQ0NGMTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0ZV9iYWNrZW5kX2Rp
c3BhdGNoZXJfaGVhZGVyLnB5IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQzQ3MDNDQzQxOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRlX2JhY2tlbmRfZGlz
cGF0Y2hlcl9oZWFkZXIucHkgKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJQzQ3MDNDRDAxOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRlX2JhY2tlbmRf
ZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEM0NzAzQ0M1MTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0ZV9i
YWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkgKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQzQ3MDNDRDExOTI4NDRDQzAwMTNGQkVBIC8q
IGdlbmVyYXRlX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5IGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzQ3MDNDQzYxOTI4NDRDQzAwMTNGQkVBIC8q
IGdlbmVyYXRlX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5ICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUM0NzAzQ0QyMTkyODQ0Q0MwMDEzRkJF
QSAvKiBnZW5lcmF0ZV9mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5IGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzQ3MDNDQzcxOTI4NDRD
QzAwMTNGQkVBIC8qIGdlbmVyYXRlX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24u
cHkgKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQzQ3
MDNDRDMxOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRlX3R5cGVfYnVpbGRlcl9oZWFkZXIucHkg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNDcwM0NDODE5
Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJhdGVfdHlwZV9idWlsZGVyX2hlYWRlci5weSAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlDNDcwM0NENDE5Mjg0
NENDMDAxM0ZCRUEgLyogZ2VuZXJhdGVfdHlwZV9idWlsZGVyX2ltcGxlbWVudGF0aW9uLnB5IGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzQ3MDNDQzkxOTI4
NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRlX3R5cGVfYnVpbGRlcl9pbXBsZW1lbnRhdGlvbi5weSAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlDNDcwM0NE
NTE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJhdG9yX3RlbXBsYXRlcy5weSBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM0NzAzQ0NBMTkyODQ0Q0MwMDEzRkJF
QSAvKiBnZW5lcmF0b3JfdGVtcGxhdGVzLnB5ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CisJCUM0NzAzQ0Q2MTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0
b3IucHkgaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNDcw
M0NDQjE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJhdG9yLnB5ICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUM0NzAzQ0Q3MTkyODQ0Q0MwMDEzRkJFQSAv
KiBtb2RlbHMucHkgaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBDNDcwM0NDQzE5Mjg0NENDMDAxM0ZCRUEgLyogbW9kZWxzLnB5ICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUUxMjRBOEY3MEU1NTU3NzUwMDMwOTFG
MSAvKiBPcGFxdWVKU1N0cmluZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRTEyNEE4RjUwRTU1NTc3NTAwMzA5MUYxIC8qIE9wYXF1ZUpTU3RyaW5nLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTEyNEE4
RjgwRTU1NTc3NTAwMzA5MUYxIC8qIE9wYXF1ZUpTU3RyaW5nLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxMjRBOEY2MEU1NTU3NzUwMDMwOTFGMSAv
KiBPcGFxdWVKU1N0cmluZy5jcHAgKi87IH07CiAJCUUxNzg2MzZEMEQ5QkVFQzMwMEQ3NEU3NSAv
KiBJbml0aWFsaXplVGhyZWFkaW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEUxNzg2MzZDMEQ5QkVFQzMwMEQ3NEU3NSAvKiBJbml0aWFsaXplVGhy
ZWFkaW5nLmNwcCAqLzsgfTsKQEAgLTI4NzAsOCArMjg3OSw2IEBACiAJCUE1MzI0Mzg1MTg1Njgz
MTcwMDJFRDY5MiAvKiBJbnNwZWN0b3JKU1R5cGVCdWlsZGVycy5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBJbnNwZWN0b3JKU1R5cGVCdWlsZGVycy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUE1MzI0Mzg2MTg1NjgzMTcwMDJFRDY5MiAvKiBJbnNwZWN0b3JKU1R5cGVCdWlsZGVy
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBJbnNwZWN0b3JKU1R5cGVCdWlsZGVycy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlBNTMyNDM4RDE4NTY5NkNBMDAyRUQ2OTIgLyogcHJvdG9jb2wg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBmb2xkZXI7
IHBhdGggPSBwcm90b2NvbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTUzMjQzOEYx
ODU2OTZFNjAwMkVENjkyIC8qIENvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0
ZXh0LnNjcmlwdC5weXRob247IHBhdGggPSBDb2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5OyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBNTMyNDM5MDE4NTY5NkU2MDAyRUQ2OTIgLyogQ29k
ZUdlbmVyYXRvckluc3BlY3RvclN0cmluZ3MucHkgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnNjcmlwdC5weXRo
b247IHBhdGggPSBDb2RlR2VuZXJhdG9ySW5zcGVjdG9yU3RyaW5ncy5weTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQTUzMjQzOTExODU2OTZFNjAwMkVENjkyIC8qIGdlbmVyYXRlLWNv
bWJpbmVkLWluc3BlY3Rvci1qc29uLnB5ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5zY3JpcHQucHl0aG9uOyBw
YXRoID0gImdlbmVyYXRlLWNvbWJpbmVkLWluc3BlY3Rvci1qc29uLnB5Ijsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQTUzMjQzOTUxODU2QTQ3NTAwMkVENjkyIC8qIEluc3BlY3RvckpT
Lmpzb24gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSB0ZXh0Lmpzb247IHBhdGggPSBJbnNwZWN0b3JKUy5qc29uOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNTMyNDM5NjE4NTZBNDc1MDAyRUQ2OTIgLyogSW5z
cGVjdG9ySlNCYWNrZW5kQ29tbWFuZHMuanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3Jp
cHQ7IHBhdGggPSBJbnNwZWN0b3JKU0JhY2tlbmRDb21tYW5kcy5qczsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTMyOTAsNiArMzI5NywxOCBAQAogCQlDMkZDQUUwRTE3QTlDMjRFMDAz
NEM3MzUgLyogQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyRkNBRTBGMTdBOUMyNEUwMDM0QzczNSAvKiBCeXRlY29k
ZUxpdmVuZXNzQW5hbHlzaXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQnl0
ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMy
RkUxOEEzMTZCQUVDNDAwMEFGMzA2MSAvKiBTdHJ1Y3R1cmVSYXJlRGF0YS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTdHJ1Y3R1cmVSYXJlRGF0YS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlDNDcwM0NCRjE5Mjg0NDk2MDAxM0ZCRUEgLyogZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5zY3JpcHQucHl0aG9u
OyBwYXRoID0gImdlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weSI7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUM0NzAzQ0MyMTkyODQ0Q0MwMDEzRkJFQSAvKiBfX2lu
aXRfXy5weSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHRleHQuc2NyaXB0LnB5dGhvbjsgbmFtZSA9IF9faW5pdF9fLnB5
OyBwYXRoID0gY29kZWdlbi9fX2luaXRfXy5weTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQzQ3MDNDQzMxOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRlX2JhY2tlbmRfY29tbWFuZHMu
cHkgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSB0ZXh0LnNjcmlwdC5weXRob247IG5hbWUgPSBnZW5lcmF0ZV9iYWNrZW5k
X2NvbW1hbmRzLnB5OyBwYXRoID0gY29kZWdlbi9nZW5lcmF0ZV9iYWNrZW5kX2NvbW1hbmRzLnB5
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDNDcwM0NDNDE5Mjg0NENDMDAxM0ZCRUEg
LyogZ2VuZXJhdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQu
c2NyaXB0LnB5dGhvbjsgbmFtZSA9IGdlbmVyYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIu
cHk7IHBhdGggPSBjb2RlZ2VuL2dlbmVyYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHk7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUM0NzAzQ0M1MTkyODQ0Q0MwMDEzRkJFQSAv
KiBnZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSB0ZXh0LnNjcmlwdC5weXRob247IG5hbWUgPSBnZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJf
aW1wbGVtZW50YXRpb24ucHk7IHBhdGggPSBjb2RlZ2VuL2dlbmVyYXRlX2JhY2tlbmRfZGlzcGF0
Y2hlcl9pbXBsZW1lbnRhdGlvbi5weTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzQ3
MDNDQzYxOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRlX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVh
ZGVyLnB5ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gdGV4dC5zY3JpcHQucHl0aG9uOyBuYW1lID0gZ2VuZXJhdGVfZnJv
bnRlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHk7IHBhdGggPSBjb2RlZ2VuL2dlbmVyYXRlX2Zyb250
ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlD
NDcwM0NDNzE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJhdGVfZnJvbnRlbmRfZGlzcGF0Y2hlcl9p
bXBsZW1lbnRhdGlvbi5weSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuc2NyaXB0LnB5dGhvbjsgbmFtZSA9IGdl
bmVyYXRlX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHk7IHBhdGggPSBjb2Rl
Z2VuL2dlbmVyYXRlX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHk7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUM0NzAzQ0M4MTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5l
cmF0ZV90eXBlX2J1aWxkZXJfaGVhZGVyLnB5ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5zY3JpcHQucHl0aG9u
OyBuYW1lID0gZ2VuZXJhdGVfdHlwZV9idWlsZGVyX2hlYWRlci5weTsgcGF0aCA9IGNvZGVnZW4v
Z2VuZXJhdGVfdHlwZV9idWlsZGVyX2hlYWRlci5weTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQzQ3MDNDQzkxOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRlX3R5cGVfYnVpbGRlcl9p
bXBsZW1lbnRhdGlvbi5weSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuc2NyaXB0LnB5dGhvbjsgbmFtZSA9IGdl
bmVyYXRlX3R5cGVfYnVpbGRlcl9pbXBsZW1lbnRhdGlvbi5weTsgcGF0aCA9IGNvZGVnZW4vZ2Vu
ZXJhdGVfdHlwZV9idWlsZGVyX2ltcGxlbWVudGF0aW9uLnB5OyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlDNDcwM0NDQTE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJhdG9yX3RlbXBsYXRl
cy5weSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHRleHQuc2NyaXB0LnB5dGhvbjsgbmFtZSA9IGdlbmVyYXRvcl90ZW1w
bGF0ZXMucHk7IHBhdGggPSBjb2RlZ2VuL2dlbmVyYXRvcl90ZW1wbGF0ZXMucHk7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUM0NzAzQ0NCMTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0
b3IucHkgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSB0ZXh0LnNjcmlwdC5weXRob247IG5hbWUgPSBnZW5lcmF0b3IucHk7
IHBhdGggPSBjb2RlZ2VuL2dlbmVyYXRvci5weTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQzQ3MDNDQ0MxOTI4NDRDQzAwMTNGQkVBIC8qIG1vZGVscy5weSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQu
c2NyaXB0LnB5dGhvbjsgbmFtZSA9IG1vZGVscy5weTsgcGF0aCA9IGNvZGVnZW4vbW9kZWxzLnB5
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlEMjEyMDIyODBBRDQzMTBDMDBFRDc5QjYg
LyogRGF0ZUNvbnZlcnNpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IERhdGVDb252ZXJzaW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDIx
MjAyMjkwQUQ0MzEwQzAwRUQ3OUI2IC8qIERhdGVDb252ZXJzaW9uLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBEYXRlQ29udmVyc2lvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlFMTI0QThGNTBFNTU1Nzc1MDAzMDkxRjEgLyogT3BhcXVlSlNTdHJpbmcuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT3BhcXVlSlNTdHJpbmcuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTUwOTMsMTAgKzUxMTIsMTAgQEAKIAkJQTUzMjQzOEUx
ODU2OTZDRTAwMkVENjkyIC8qIHNjcmlwdHMgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJ
CWNoaWxkcmVuID0gKAotCQkJCUE1MzI0MzhGMTg1Njk2RTYwMDJFRDY5MiAvKiBDb2RlR2VuZXJh
dG9ySW5zcGVjdG9yLnB5ICovLAotCQkJCUE1MzI0MzkwMTg1Njk2RTYwMDJFRDY5MiAvKiBDb2Rl
R2VuZXJhdG9ySW5zcGVjdG9yU3RyaW5ncy5weSAqLywKKwkJCQlDNDcwM0NDMTE5Mjg0NEE0MDAx
M0ZCRUEgLyogY29kZWdlbiAqLywKIAkJCQlBNTg0MEUyNjE4N0M5ODA3MDA4NDNCMTAgLyogY3Nz
bWluLnB5ICovLAogCQkJCUE1MzI0MzkxMTg1Njk2RTYwMDJFRDY5MiAvKiBnZW5lcmF0ZS1jb21i
aW5lZC1pbnNwZWN0b3ItanNvbi5weSAqLywKKwkJCQlDNDcwM0NCRjE5Mjg0NDk2MDAxM0ZCRUEg
LyogZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5ICovLAogCQkJCUE1ODQw
RTI4MTg3Q0E1QjgwMDg0M0IxMCAvKiBpbmxpbmUtYW5kLW1pbmlmeS1zdHlsZXNoZWV0cy1hbmQt
c2NyaXB0cy5weSAqLywKIAkJCQlBNTEzRTVDNDE4NUY5MkRDMDA3RTk1QUQgLyoganNtaW4ucHkg
Ki8sCiAJCQkJQTUxM0U1QzUxODVGOTJGMDAwN0U5NUFEIC8qIHh4ZC5wbCAqLywKQEAgLTUyMTQs
NiArNTIzMyw0MiBAQAogCQkJcGF0aCA9IGJ1aWx0aW5zOwogCQkJc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsKIAkJfTsKKwkJQzQ3MDNDQzExOTI4NDRBNDAwMTNGQkVBIC8qIGNvZGVnZW4gKi8gPSB7
CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCUM0NzAzQ0MyMTkyODQ0
Q0MwMDEzRkJFQSAvKiBfX2luaXRfXy5weSAqLywKKwkJCQlDNDcwM0NDMzE5Mjg0NENDMDAxM0ZC
RUEgLyogZ2VuZXJhdGVfYmFja2VuZF9jb21tYW5kcy5weSAqLywKKwkJCQlDNDcwM0NDNDE5Mjg0
NENDMDAxM0ZCRUEgLyogZ2VuZXJhdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weSAqLywK
KwkJCQlDNDcwM0NDNTE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJhdGVfYmFja2VuZF9kaXNwYXRj
aGVyX2ltcGxlbWVudGF0aW9uLnB5ICovLAorCQkJCUM0NzAzQ0M2MTkyODQ0Q0MwMDEzRkJFQSAv
KiBnZW5lcmF0ZV9mcm9udGVuZF9kaXNwYXRjaGVyX2hlYWRlci5weSAqLywKKwkJCQlDNDcwM0ND
NzE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJhdGVfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1l
bnRhdGlvbi5weSAqLywKKwkJCQlDNDcwM0NDODE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJhdGVf
dHlwZV9idWlsZGVyX2hlYWRlci5weSAqLywKKwkJCQlDNDcwM0NDOTE5Mjg0NENDMDAxM0ZCRUEg
LyogZ2VuZXJhdGVfdHlwZV9idWlsZGVyX2ltcGxlbWVudGF0aW9uLnB5ICovLAorCQkJCUM0NzAz
Q0NBMTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0b3JfdGVtcGxhdGVzLnB5ICovLAorCQkJCUM0
NzAzQ0NCMTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0b3IucHkgKi8sCisJCQkJQzQ3MDNDQ0Mx
OTI4NDRDQzAwMTNGQkVBIC8qIG1vZGVscy5weSAqLywKKwkJCSk7CisJCQluYW1lID0gY29kZWdl
bjsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CisJCUM0NzAzQ0MxMTkyODQ0QTQw
MDEzRkJFQSAvKiBjb2RlZ2VuICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJl
biA9ICgKKwkJCQlDNDcwM0NDMjE5Mjg0NENDMDAxM0ZCRUEgLyogX19pbml0X18ucHkgKi8sCisJ
CQkJQzQ3MDNDQzMxOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRlX2JhY2tlbmRfY29tbWFuZHMu
cHkgKi8sCisJCQkJQzQ3MDNDQzQxOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRlX2JhY2tlbmRf
ZGlzcGF0Y2hlcl9oZWFkZXIucHkgKi8sCisJCQkJQzQ3MDNDQzUxOTI4NDRDQzAwMTNGQkVBIC8q
IGdlbmVyYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSAqLywKKwkJCQlD
NDcwM0NDNjE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJhdGVfZnJvbnRlbmRfZGlzcGF0Y2hlcl9o
ZWFkZXIucHkgKi8sCisJCQkJQzQ3MDNDQzcxOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRlX2Zy
b250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkgKi8sCisJCQkJQzQ3MDNDQzgxOTI4
NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRlX3R5cGVfYnVpbGRlcl9oZWFkZXIucHkgKi8sCisJCQkJ
QzQ3MDNDQzkxOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRlX3R5cGVfYnVpbGRlcl9pbXBsZW1l
bnRhdGlvbi5weSAqLywKKwkJCQlDNDcwM0NDQTE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJhdG9y
X3RlbXBsYXRlcy5weSAqLywKKwkJCQlDNDcwM0NDQjE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJh
dG9yLnB5ICovLAorCQkJCUM0NzAzQ0NDMTkyODQ0Q0MwMDEzRkJFQSAvKiBtb2RlbHMucHkgKi8s
CisJCQkpOworCQkJbmFtZSA9IGNvZGVnZW47CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwor
CQl9OwogLyogRW5kIFBCWEdyb3VwIHNlY3Rpb24gKi8KIAogLyogQmVnaW4gUEJYSGVhZGVyc0J1
aWxkUGhhc2Ugc2VjdGlvbiAqLwpAQCAtNTQ5OSw2ICs1NTU0LDE5IEBACiAJCQkJMkFBQkNERTcx
OEVGMjk0MjAwMDAyMDk2IC8qIEdDTG9nZ2luZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkU1MjQ4
RjkxOTE0NDJEOTAwQjdGREU0IC8qIFZhcmlhYmxlV2F0Y2hwb2ludFNldElubGluZXMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUMyREE3NzgzMThFMjU5OTkwMDY2RkNCNiAvKiBIZWFwSW5saW5lcy5o
IGluIEhlYWRlcnMgKi8sCisJCQkJQTUzMjQzOTQxODU2OTcwOTAwMkVENjkyIC8qIGdlbmVyYXRl
LWNvbWJpbmVkLWluc3BlY3Rvci1qc29uLnB5IGluIEhlYWRlcnMgKi8sCisJCQkJQTU4NDBFMjcx
ODdDOTgxRTAwODQzQjEwIC8qIGNzc21pbi5weSBpbiBIZWFkZXJzICovLAorCQkJCUM0NzAzQ0Qz
MTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0ZV90eXBlX2J1aWxkZXJfaGVhZGVyLnB5IGluIEhl
YWRlcnMgKi8sCisJCQkJQzQ3MDNDRDIxOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRlX2Zyb250
ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkgaW4gSGVhZGVycyAqLywKKwkJCQlDNDcw
M0NEMTE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJhdGVfZnJvbnRlbmRfZGlzcGF0Y2hlcl9oZWFk
ZXIucHkgaW4gSGVhZGVycyAqLywKKwkJCQlDNDcwM0NENTE5Mjg0NENDMDAxM0ZCRUEgLyogZ2Vu
ZXJhdG9yX3RlbXBsYXRlcy5weSBpbiBIZWFkZXJzICovLAorCQkJCUM0NzAzQ0Q2MTkyODQ0Q0Mw
MDEzRkJFQSAvKiBnZW5lcmF0b3IucHkgaW4gSGVhZGVycyAqLywKKwkJCQlDNDcwM0NDRjE5Mjg0
NENDMDAxM0ZCRUEgLyogZ2VuZXJhdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weSBpbiBI
ZWFkZXJzICovLAorCQkJCUM0NzAzQ0MwMTkyODQ0OTYwMDEzRkJFQSAvKiBnZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkgaW4gSGVhZGVycyAqLywKKwkJCQlDNDcwM0NEMDE5
Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJhdGVfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0
aW9uLnB5IGluIEhlYWRlcnMgKi8sCisJCQkJQzQ3MDNDQ0UxOTI4NDRDQzAwMTNGQkVBIC8qIGdl
bmVyYXRlX2JhY2tlbmRfY29tbWFuZHMucHkgaW4gSGVhZGVycyAqLywKKwkJCQlDNDcwM0NENDE5
Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJhdGVfdHlwZV9idWlsZGVyX2ltcGxlbWVudGF0aW9uLnB5
IGluIEhlYWRlcnMgKi8sCisJCQkJQzQ3MDNDRDcxOTI4NDRDQzAwMTNGQkVBIC8qIG1vZGVscy5w
eSBpbiBIZWFkZXJzICovLAogCQkJCTJBQUNFNjNEMThDQTVBMDMwMEVEMDE5MSAvKiBHQ0FjdGl2
aXR5Q2FsbGJhY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTJBODM2Mzg2MThEN0QwRUUwMDAwRUJD
QyAvKiBFZGVuR0NBY3Rpdml0eUNhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQkyQTgzNjM4
QTE4RDdEMEZFMDAwMEVCQ0MgLyogRnVsbEdDQWN0aXZpdHlDYWxsYmFjay5oIGluIEhlYWRlcnMg
Ki8sCkBAIC01NTU3LDggKzU2MjUsNiBAQAogCQkJCTBGRDhBMzE0MTdENDMyNkMwMENBMkM0MCAv
KiBDb2RlQmxvY2tTZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOTZFQkIzMTY2NzZFRjYwMDhC
QURFMyAvKiBDb2RlQmxvY2tXaXRoSklUVHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc3RjE4
MjIxNjQwODhCMjAwNjQwQTQ3IC8qIENvZGVDYWNoZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQTUz
MjQzOTIxODU2OTcwOTAwMkVENjkyIC8qIENvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkgaW4gSGVh
ZGVycyAqLywKLQkJCQlBNTMyNDM5MzE4NTY5NzA5MDAyRUQ2OTIgLyogQ29kZUdlbmVyYXRvcklu
c3BlY3RvclN0cmluZ3MucHkgaW4gSGVhZGVycyAqLywKIAkJCQk4NkUxMTZCMTBGRTc1QUM4MDBC
NTEyQkMgLyogQ29kZUxvY2F0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkJEN0U2OTE0NDc5
OTk2MDA0ODEzMTUgLyogQ29kZU9yaWdpbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyMUMyN0Qx
NEJFNzI3QTAwQURDNjRCIC8qIENvZGVTcGVjaWFsaXphdGlvbktpbmQuaCBpbiBIZWFkZXJzICov
LApAQCAtNTU4OSw3ICs1NjU1LDYgQEAKIAkJCQlDMjE4RDE0MDE2NTVDRkQ1MDA2MkJCODEgLyog
Q29weVdvcmtMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQkyQTY4Mjk1QjE4NzVGODA1MDBCNkMz
RTIgLyogQ29weVdyaXRlQmFycmllci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNURFNkU1QjMwRTE3
MjhFQzAwMTgwNDA3IC8qIGNyZWF0ZV9oYXNoX3RhYmxlIGluIEhlYWRlcnMgKi8sCi0JCQkJQTU4
NDBFMjcxODdDOTgxRTAwODQzQjEwIC8qIGNzc21pbi5weSBpbiBIZWFkZXJzICovLAogCQkJCTBG
NDI2QTRCMTQ2MENENkUwMDEzMUY4RiAvKiBEYXRhRm9ybWF0LmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjJCNjZERjE3QjZCNUFCMDBBN0FFM0YgLyogRGF0YVZpZXcuaCBpbiBIZWFkZXJzICovLAog
CQkJCUJDRDIwMzRBMEUxNzEzNUUwMDJDN0U4MiAvKiBEYXRlQ29uc3RydWN0b3IuaCBpbiBIZWFk
ZXJzICovLApAQCAtNTgyNiw3ICs1ODkxLDYgQEAKIAkJCQkwRjJCNjZBRjE3QjZCNTQ1MDBBN0FF
M0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlDMjIzOUQxQjE2MjYyQkREMDA1QUM1RkQgLyogR0NUaHJlYWQuaCBpbiBIZWFkZXJzICovLAog
CQkJCUMyMTEyMkUyMTVERDlBQjMwMDc5MEUzQSAvKiBHQ1RocmVhZFNoYXJlZERhdGEuaCBpbiBI
ZWFkZXJzICovLAotCQkJCUE1MzI0Mzk0MTg1Njk3MDkwMDJFRDY5MiAvKiBnZW5lcmF0ZS1jb21i
aW5lZC1pbnNwZWN0b3ItanNvbi5weSBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NkUwMTdCNkI1
QUIwMEE3QUUzRiAvKiBHZW5lcmljVHlwZWRBcnJheVZpZXcuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGMUZFNTFDMTkyMkEzQkMwMDY5ODdDNSAvKiBBYm9ydFJlYXNvbi5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEYyQjY2RTExN0I2QjVBQjAwQTdBRTNGIC8qIEdlbmVyaWNUeXBlZEFycmF5Vmlld0lu
bGluZXMuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9Db25zb2xlTWVzc2FnZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL0NvbnNvbGVNZXNzYWdlLmNwcAppbmRleCA0MDc5MGJmNWQ5ZTU5MWJlMGUzNWY2MmE0
NTE4NzhiY2Q1NzJjN2Y2Li4wMjAzYmMxYTlmNzM2YjQ4ZmMyMWVjMTFjOGUzYjQ5NTA5ZDEwOTU5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0NvbnNvbGVNZXNz
YWdlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0NvbnNvbGVNZXNz
YWdlLmNwcApAQCAtMTMxLDcgKzEzMSw3IEBAIHZvaWQgQ29uc29sZU1lc3NhZ2U6OmF1dG9nZW5l
cmF0ZU1ldGFkYXRhKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSkKICAgICB9CiB9CiAKLXN0YXRpYyBJ
bnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDb25zb2xlOjpDb25zb2xlTWVzc2FnZTo6U291cmNlOjpF
bnVtIG1lc3NhZ2VTb3VyY2VWYWx1ZShNZXNzYWdlU291cmNlIHNvdXJjZSkKK3N0YXRpYyBJbnNw
ZWN0b3I6OlR5cGVCdWlsZGVyOjpDb25zb2xlOjpDb25zb2xlTWVzc2FnZTo6U291cmNlIG1lc3Nh
Z2VTb3VyY2VWYWx1ZShNZXNzYWdlU291cmNlIHNvdXJjZSkKIHsKICAgICBzd2l0Y2ggKHNvdXJj
ZSkgewogICAgIGNhc2UgTWVzc2FnZVNvdXJjZTo6WE1MOiByZXR1cm4gSW5zcGVjdG9yOjpUeXBl
QnVpbGRlcjo6Q29uc29sZTo6Q29uc29sZU1lc3NhZ2U6OlNvdXJjZTo6WE1MOwpAQCAtMTQ4LDcg
KzE0OCw3IEBAIHN0YXRpYyBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDb25zb2xlOjpDb25zb2xl
TWVzc2FnZTo6U291cmNlOjpFbnVtIG1lc3NhZ2VTb3VyCiAgICAgcmV0dXJuIEluc3BlY3Rvcjo6
VHlwZUJ1aWxkZXI6OkNvbnNvbGU6OkNvbnNvbGVNZXNzYWdlOjpTb3VyY2U6Ok90aGVyOwogfQog
Ci1zdGF0aWMgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q29uc29sZTo6Q29uc29sZU1lc3NhZ2U6
OlR5cGU6OkVudW0gbWVzc2FnZVR5cGVWYWx1ZShNZXNzYWdlVHlwZSB0eXBlKQorc3RhdGljIElu
c3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNvbnNvbGU6OkNvbnNvbGVNZXNzYWdlOjpUeXBlIG1lc3Nh
Z2VUeXBlVmFsdWUoTWVzc2FnZVR5cGUgdHlwZSkKIHsKICAgICBzd2l0Y2ggKHR5cGUpIHsKICAg
ICBjYXNlIE1lc3NhZ2VUeXBlOjpMb2c6IHJldHVybiBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpD
b25zb2xlOjpDb25zb2xlTWVzc2FnZTo6VHlwZTo6TG9nOwpAQCAtMTY4LDcgKzE2OCw3IEBAIHN0
YXRpYyBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDb25zb2xlOjpDb25zb2xlTWVzc2FnZTo6VHlw
ZTo6RW51bSBtZXNzYWdlVHlwZVZhCiAgICAgcmV0dXJuIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6
OkNvbnNvbGU6OkNvbnNvbGVNZXNzYWdlOjpUeXBlOjpMb2c7CiB9CiAKLXN0YXRpYyBJbnNwZWN0
b3I6OlR5cGVCdWlsZGVyOjpDb25zb2xlOjpDb25zb2xlTWVzc2FnZTo6TGV2ZWw6OkVudW0gbWVz
c2FnZUxldmVsVmFsdWUoTWVzc2FnZUxldmVsIGxldmVsKQorc3RhdGljIEluc3BlY3Rvcjo6VHlw
ZUJ1aWxkZXI6OkNvbnNvbGU6OkNvbnNvbGVNZXNzYWdlOjpMZXZlbCBtZXNzYWdlTGV2ZWxWYWx1
ZShNZXNzYWdlTGV2ZWwgbGV2ZWwpCiB7CiAgICAgc3dpdGNoIChsZXZlbCkgewogICAgIGNhc2Ug
TWVzc2FnZUxldmVsOjpMb2c6IHJldHVybiBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDb25zb2xl
OjpDb25zb2xlTWVzc2FnZTo6TGV2ZWw6OkxvZzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdC5jcHAKaW5kZXggNzg1ZGFkMGFjODhlNGU3MGQ5
ODVmNjA5ODgwNWVkYzQ1YmFmNjhmMS4uZTVhMjYyMmRkZWIxNDUyZmU5MmJjYTQ2YTgwNDU5Yjk5
YmFkNDA4YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9Jbmpl
Y3RlZFNjcmlwdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9Jbmpl
Y3RlZFNjcmlwdC5jcHAKQEAgLTEwMCwxMyArMTAwLDEzIEBAIHZvaWQgSW5qZWN0ZWRTY3JpcHQ6
OmdldEZ1bmN0aW9uRGV0YWlscyhFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmlu
ZyYKIAogICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gcmVzdWx0VmFsdWU7CiAgICAgbWFrZUNh
bGwoZnVuY3Rpb24sICZyZXN1bHRWYWx1ZSk7Ci0gICAgaWYgKCFyZXN1bHRWYWx1ZSB8fCByZXN1
bHRWYWx1ZS0+dHlwZSgpICE9IEluc3BlY3RvclZhbHVlOjpUeXBlT2JqZWN0KSB7CisgICAgaWYg
KCFyZXN1bHRWYWx1ZSB8fCByZXN1bHRWYWx1ZS0+dHlwZSgpICE9IEluc3BlY3RvclZhbHVlOjpU
eXBlOjpPYmplY3QpIHsKICAgICAgICAgaWYgKCFyZXN1bHRWYWx1ZS0+YXNTdHJpbmcoZXJyb3JT
dHJpbmcpKQogICAgICAgICAgICAgKmVycm9yU3RyaW5nID0gQVNDSUlMaXRlcmFsKCJJbnRlcm5h
bCBlcnJvciIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgKnJlc3VsdCA9IEluc3Bl
Y3Rvcjo6VHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpGdW5jdGlvbkRldGFpbHM6OnJ1bnRpbWVDYXN0
KHJlc3VsdFZhbHVlKTsKKyAgICAqcmVzdWx0ID0gQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlR5
cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6RnVuY3Rpb25EZXRhaWxzPjo6cnVudGltZUNhc3QocmVzdWx0
VmFsdWUpOwogfQogCiB2b2lkIEluamVjdGVkU2NyaXB0OjpnZXRQcm9wZXJ0aWVzKEVycm9yU3Ry
aW5nKiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwgYm9vbCBvd25Qcm9wZXJ0
aWVzLCBSZWZQdHI8QXJyYXk8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UnVudGltZTo6UHJvcGVy
dHlEZXNjcmlwdG9yPj4qIHByb3BlcnRpZXMpCkBAIC0xMTcsMTIgKzExNywxMiBAQCB2b2lkIElu
amVjdGVkU2NyaXB0OjpnZXRQcm9wZXJ0aWVzKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgY29u
c3QgU3RyaW5nJiBvYmplYwogCiAgICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiByZXN1bHQ7CiAg
ICAgbWFrZUNhbGwoZnVuY3Rpb24sICZyZXN1bHQpOwotICAgIGlmICghcmVzdWx0IHx8IHJlc3Vs
dC0+dHlwZSgpICE9IEluc3BlY3RvclZhbHVlOjpUeXBlQXJyYXkpIHsKKyAgICBpZiAoIXJlc3Vs
dCB8fCByZXN1bHQtPnR5cGUoKSAhPSBJbnNwZWN0b3JWYWx1ZTo6VHlwZTo6QXJyYXkpIHsKICAg
ICAgICAgKmVycm9yU3RyaW5nID0gQVNDSUlMaXRlcmFsKCJJbnRlcm5hbCBlcnJvciIpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgKnByb3BlcnRpZXMgPSBBcnJheTxJbnNwZWN0b3I6
OlR5cGVCdWlsZGVyOjpSdW50aW1lOjpQcm9wZXJ0eURlc2NyaXB0b3I+OjpydW50aW1lQ2FzdChy
ZXN1bHQpOworICAgICpwcm9wZXJ0aWVzID0gQmluZGluZ1RyYWl0czxBcnJheTxJbnNwZWN0b3I6
OlR5cGVCdWlsZGVyOjpSdW50aW1lOjpQcm9wZXJ0eURlc2NyaXB0b3I+Pjo6cnVudGltZUNhc3Qo
cmVzdWx0KTsKIH0KIAogdm9pZCBJbmplY3RlZFNjcmlwdDo6Z2V0SW50ZXJuYWxQcm9wZXJ0aWVz
KEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwgUmVmUHRy
PEFycmF5PEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OkludGVybmFsUHJvcGVydHlE
ZXNjcmlwdG9yPj4qIHByb3BlcnRpZXMpCkBAIC0xMzIsMTIgKzEzMiwxMiBAQCB2b2lkIEluamVj
dGVkU2NyaXB0OjpnZXRJbnRlcm5hbFByb3BlcnRpZXMoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5n
LCBjb25zdCBTdHJpbgogCiAgICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiByZXN1bHQ7CiAgICAg
bWFrZUNhbGwoZnVuY3Rpb24sICZyZXN1bHQpOwotICAgIGlmICghcmVzdWx0IHx8IHJlc3VsdC0+
dHlwZSgpICE9IEluc3BlY3RvclZhbHVlOjpUeXBlQXJyYXkpIHsKKyAgICBpZiAoIXJlc3VsdCB8
fCByZXN1bHQtPnR5cGUoKSAhPSBJbnNwZWN0b3JWYWx1ZTo6VHlwZTo6QXJyYXkpIHsKICAgICAg
ICAgKmVycm9yU3RyaW5nID0gQVNDSUlMaXRlcmFsKCJJbnRlcm5hbCBlcnJvciIpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgUmVmUHRyPEFycmF5PEluc3BlY3Rvcjo6VHlwZUJ1aWxk
ZXI6OlJ1bnRpbWU6OkludGVybmFsUHJvcGVydHlEZXNjcmlwdG9yPj4gYXJyYXkgPSBBcnJheTxJ
bnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpSdW50aW1lOjpJbnRlcm5hbFByb3BlcnR5RGVzY3JpcHRv
cj46OnJ1bnRpbWVDYXN0KHJlc3VsdCk7CisgICAgYXV0byBhcnJheSA9IEJpbmRpbmdUcmFpdHM8
QXJyYXk8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UnVudGltZTo6SW50ZXJuYWxQcm9wZXJ0eURl
c2NyaXB0b3I+Pjo6cnVudGltZUNhc3QocmVzdWx0KTsKICAgICBpZiAoYXJyYXktPmxlbmd0aCgp
ID4gMCkKICAgICAgICAgKnByb3BlcnRpZXMgPSBhcnJheTsKIH0KQEAgLTE1Miw4ICsxNTIsOCBA
QCBQYXNzUmVmUHRyPEFycmF5PEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpDYWxs
RnJhbWU+PiBJbmplY3RlZFNjcmlwdDo6dwogICAgIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIGNh
bGxGcmFtZXNWYWx1ZSA9IGNhbGxGdW5jdGlvbldpdGhFdmFsRW5hYmxlZChmdW5jdGlvbiwgaGFk
RXhjZXB0aW9uKTsKICAgICBBU1NFUlQoIWhhZEV4Y2VwdGlvbik7CiAgICAgUmVmUHRyPEluc3Bl
Y3RvclZhbHVlPiByZXN1bHQgPSBjYWxsRnJhbWVzVmFsdWUudG9JbnNwZWN0b3JWYWx1ZShzY3Jp
cHRTdGF0ZSgpKTsKLSAgICBpZiAocmVzdWx0LT50eXBlKCkgPT0gSW5zcGVjdG9yVmFsdWU6OlR5
cGVBcnJheSkKLSAgICAgICAgcmV0dXJuIEFycmF5PEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkRl
YnVnZ2VyOjpDYWxsRnJhbWU+OjpydW50aW1lQ2FzdChyZXN1bHQpOworICAgIGlmIChyZXN1bHQt
PnR5cGUoKSA9PSBJbnNwZWN0b3JWYWx1ZTo6VHlwZTo6QXJyYXkpCisgICAgICAgIHJldHVybiBC
aW5kaW5nVHJhaXRzPEFycmF5PEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpDYWxs
RnJhbWU+Pjo6cnVudGltZUNhc3QocmVzdWx0KTsKIAogICAgIHJldHVybiBBcnJheTxJbnNwZWN0
b3I6OlR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6Q2FsbEZyYW1lPjo6Y3JlYXRlKCk7CiB9CkBAIC0x
NzMsNyArMTczLDcgQEAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpSdW50aW1l
OjpSZW1vdGVPYmplY3Q+IEluamVjdGVkU2NyaXB0Ojp3cmFwT2IKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAKICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByYXdSZXN1bHQgPSByLnRvSW5z
cGVjdG9yVmFsdWUoc2NyaXB0U3RhdGUoKSktPmFzT2JqZWN0KCk7Ci0gICAgcmV0dXJuIEluc3Bl
Y3Rvcjo6VHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdDo6cnVudGltZUNhc3QocmF3
UmVzdWx0KTsKKyAgICByZXR1cm4gQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlR5cGVCdWlsZGVy
OjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+OjpydW50aW1lQ2FzdChyYXdSZXN1bHQpOwogfQogCiBQ
YXNzUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4g
SW5qZWN0ZWRTY3JpcHQ6OndyYXBUYWJsZShjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYg
dGFibGUsIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBjb2x1bW5zKSBjb25zdApAQCAt
MTkzLDcgKzE5Myw3IEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UnVudGlt
ZTo6UmVtb3RlT2JqZWN0PiBJbmplY3RlZFNjcmlwdDo6d3JhcFRhCiAgICAgICAgIHJldHVybiBu
dWxscHRyOwogCiAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmF3UmVzdWx0ID0gci50b0lu
c3BlY3RvclZhbHVlKHNjcmlwdFN0YXRlKCkpLT5hc09iamVjdCgpOwotICAgIHJldHVybiBJbnNw
ZWN0b3I6OlR5cGVCdWlsZGVyOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q6OnJ1bnRpbWVDYXN0KHJh
d1Jlc3VsdCk7CisgICAgcmV0dXJuIEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpUeXBlQnVpbGRl
cjo6UnVudGltZTo6UmVtb3RlT2JqZWN0Pjo6cnVudGltZUNhc3QocmF3UmVzdWx0KTsKIH0KIAog
RGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUgSW5qZWN0ZWRTY3JpcHQ6OmZpbmRPYmplY3RCeUlkKGNv
bnN0IFN0cmluZyYgb2JqZWN0SWQpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0QmFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0QmFzZS5jcHAKaW5kZXggZDk1NjFlMWY0YTc4
NmY5NjU1MGUyMmRhYTM0MjM3ZWM5M2FlY2YxYi4uZmUxMGQ2YzRiZmJhZmJmMjg2Y2MzYThkMzVj
OWM1OGRkNTQyNGMxYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9JbmplY3RlZFNjcmlwdEJhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3IvSW5qZWN0ZWRTY3JpcHRCYXNlLmNwcApAQCAtMTI4LDcgKzEyOCw3IEBAIHZvaWQgSW5q
ZWN0ZWRTY3JpcHRCYXNlOjptYWtlRXZhbENhbGwoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBE
ZXByZWNhdGVkOjpTY3JpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAocmVzdWx0
LT50eXBlKCkgPT0gSW5zcGVjdG9yVmFsdWU6OlR5cGVTdHJpbmcpIHsKKyAgICBpZiAocmVzdWx0
LT50eXBlKCkgPT0gSW5zcGVjdG9yVmFsdWU6OlR5cGU6OlN0cmluZykgewogICAgICAgICByZXN1
bHQtPmFzU3RyaW5nKGVycm9yU3RyaW5nKTsKICAgICAgICAgQVNTRVJUKGVycm9yU3RyaW5nLT5s
ZW5ndGgoKSk7CiAgICAgICAgIHJldHVybjsKQEAgLTE0Nyw3ICsxNDcsNyBAQCB2b2lkIEluamVj
dGVkU2NyaXB0QmFzZTo6bWFrZUV2YWxDYWxsKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgRGVw
cmVjYXRlZDo6U2NyaQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgKm9iamVjdFJlc3Vs
dCA9IFR5cGVCdWlsZGVyOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q6OnJ1bnRpbWVDYXN0KHJlc3Vs
dE9iaik7CisgICAgKm9iamVjdFJlc3VsdCA9IEJpbmRpbmdUcmFpdHM8VHlwZUJ1aWxkZXI6OlJ1
bnRpbWU6OlJlbW90ZU9iamVjdD46OnJ1bnRpbWVDYXN0KHJlc3VsdE9iaik7CiAgICAgKndhc1Ro
cm93biA9IHdhc1Rocm93blZhbDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdE1hbmFnZXIuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdE1hbmFnZXIuY3BwCmluZGV4IGVmMGQ5YTM3
NDczNGQyNTY0ZWMwYzgxYjYzODRkNmM3ZDAzNGVhMWQuLjQ1MTczZmM4MzdiYWUwZTIwNjQxN2Mz
NTUxMTE5MmU1NDY2MzhjYjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3IvSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0TWFuYWdlci5jcHAKQEAgLTk1LDcgKzk1LDcgQEAg
aW50IEluamVjdGVkU2NyaXB0TWFuYWdlcjo6aW5qZWN0ZWRTY3JpcHRJZEZvcihFeGVjU3RhdGUq
IHNjcmlwdFN0YXRlKQogSW5qZWN0ZWRTY3JpcHQgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOjppbmpl
Y3RlZFNjcmlwdEZvck9iamVjdElkKGNvbnN0IFN0cmluZyYgb2JqZWN0SWQpCiB7CiAgICAgUmVm
UHRyPEluc3BlY3RvclZhbHVlPiBwYXJzZWRPYmplY3RJZCA9IEluc3BlY3RvclZhbHVlOjpwYXJz
ZUpTT04ob2JqZWN0SWQpOwotICAgIGlmIChwYXJzZWRPYmplY3RJZCAmJiBwYXJzZWRPYmplY3RJ
ZC0+dHlwZSgpID09IEluc3BlY3RvclZhbHVlOjpUeXBlT2JqZWN0KSB7CisgICAgaWYgKHBhcnNl
ZE9iamVjdElkICYmIHBhcnNlZE9iamVjdElkLT50eXBlKCkgPT0gSW5zcGVjdG9yVmFsdWU6OlR5
cGU6Ok9iamVjdCkgewogICAgICAgICBsb25nIGluamVjdGVkU2NyaXB0SWQgPSAwOwogICAgICAg
ICBib29sIHN1Y2Nlc3MgPSBwYXJzZWRPYmplY3RJZC0+YXNPYmplY3QoKS0+Z2V0TnVtYmVyKEFT
Q0lJTGl0ZXJhbCgiaW5qZWN0ZWRTY3JpcHRJZCIpLCAmaW5qZWN0ZWRTY3JpcHRJZCk7CiAgICAg
ICAgIGlmIChzdWNjZXNzKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JUeXBlQnVpbGRlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JUeXBlQnVpbGRlci5oCmluZGV4IDhlYTc2ZWM5MGM2MGUwNzc2MTc5NWMx
YzE0Nzk1MmQ0Nzg2OGZlNTguLjg0N2UwOTUyYmFjM2Y2MmQzZGM2NTQ0OTUxODQ1ODIyNzhkMTZj
ZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
VHlwZUJ1aWxkZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvclR5cGVCdWlsZGVyLmgKQEAgLTYzLDU0ICs2Myw2IEBAIHByaXZhdGU6CiAgICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoT3B0T3V0cHV0KTsKIH07CiAKLQotLy8gQSBzbWFsbCB0cmFuc2llbnQg
d3JhcHBlciBhcm91bmQgaW50IHR5cGUsIHRoYXQgY2FuIGJlIHVzZWQgYXMgYSBmdW5jaXRvbiBw
YXJhbWV0ZXIgdHlwZQotLy8gY2xldmVybHkgZGlzYWxsb3dpbmcgQysrIGltcGxpY2l0IGNhc3Rz
IGZyb20gZmxvYXQgb3IgZG91YmxlLgotY2xhc3MgRXhhY3RseUludCB7Ci1wdWJsaWM6Ci0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBFeGFjdGx5SW50KFQgdCkgOiBtX3ZhbHVlKGNhc3Rf
dG9faW50PFQ+KHQpKSB7IH0KLSAgICBFeGFjdGx5SW50KCkgeyB9Ci0KLSAgICBvcGVyYXRvciBp
bnQoKSB7IHJldHVybiBtX3ZhbHVlOyB9Ci0KLXByaXZhdGU6Ci0gICAgaW50IG1fdmFsdWU7Ci0K
LSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIHN0YXRpYyBpbnQgY2FzdF90b19pbnQoVCkg
eyByZXR1cm4gVDo6ZGVmYXVsdF9jYXNlX2Nhc3RfaXNfbm90X3N1cHBvcnRlZCgpOyB9Ci19Owot
Ci10ZW1wbGF0ZTw+Ci1pbmxpbmUgaW50IEV4YWN0bHlJbnQ6OmNhc3RfdG9faW50PGludD4oaW50
IGkpIHsgcmV0dXJuIGk7IH0KLQotdGVtcGxhdGU8PgotaW5saW5lIGludCBFeGFjdGx5SW50Ojpj
YXN0X3RvX2ludDx1bnNpZ25lZCBpbnQ+KHVuc2lnbmVkIGludCBpKSB7IHJldHVybiBpOyB9Ci0K
LSNpZiAhQVNTRVJUX0RJU0FCTEVECi1jbGFzcyBSdW50aW1lQ2FzdEhlbHBlciB7Ci1wdWJsaWM6
Ci0gICAgdGVtcGxhdGU8SW5zcGVjdG9yVmFsdWU6OlR5cGUgVFlQRT4KLSAgICBzdGF0aWMgdm9p
ZCBhc3NlcnRUeXBlKEluc3BlY3RvclZhbHVlKiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIEFTU0VS
VCh2YWx1ZS0+dHlwZSgpID09IFRZUEUpOwotICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIGFzc2Vy
dEFueShJbnNwZWN0b3JWYWx1ZSopCi0gICAgewotICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIGFz
c2VydEludChJbnNwZWN0b3JWYWx1ZSogdmFsdWUpCi0gICAgewotICAgICAgICBkb3VibGUgdjsK
LSAgICAgICAgYm9vbCBjYXN0UmVzID0gdmFsdWUtPmFzTnVtYmVyKCZ2KTsKLSAgICAgICAgQVNT
RVJUX1VOVVNFRChjYXN0UmVzLCBjYXN0UmVzKTsKLSAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0
PGRvdWJsZT4oc3RhdGljX2Nhc3Q8aW50Pih2KSkgPT0gdik7Ci0gICAgfQotfTsKLSNlbmRpZgot
Ci0KIC8vIFRoaXMgY2xhc3MgcHJvdmlkZXMgIlRyYWl0cyIgdHlwZSBmb3IgdGhlIGlucHV0IHR5
cGUgVC4gSXQgaXMgcHJvZ3JhbW1lZCB1c2luZyBDKysgdGVtcGxhdGUgc3BlY2lhbGl6YXRpb24K
IC8vIHRlY2huaXF1ZS4gQnkgZGVmYXVsdCBpdCBzaW1wbHkgdGFrZXMgIkl0ZW1UcmFpdHMiIHR5
cGUgZnJvbSBULCBidXQgaXQgZG9lc24ndCB3b3JrIHdpdGggdGhlIGJhc2UgdHlwZXMuCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPgpAQCAtMTQ0LDI5ICs5Niw2IEBAIHB1YmxpYzoKICAgICB7CiAgICAg
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgQXJyYXk8VD4oKSk7CiAgICAgfQotCi0gICAgc3RhdGlj
IFBhc3NSZWZQdHI8QXJyYXk8VD4+IHJ1bnRpbWVDYXN0KFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFs
dWU+IHZhbHVlKQotICAgIHsKLSAgICAgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBhcnJheTsK
LSAgICAgICAgYm9vbCBjYXN0UmVzID0gdmFsdWUtPmFzQXJyYXkoJmFycmF5KTsKLSAgICAgICAg
QVNTRVJUX1VOVVNFRChjYXN0UmVzLCBjYXN0UmVzKTsKLSNpZiAhQVNTRVJUX0RJU0FCTEVECi0g
ICAgICAgIGFzc2VydENvcnJlY3RWYWx1ZShhcnJheS5nZXQoKSk7Ci0jZW5kaWYgLy8gIUFTU0VS
VF9ESVNBQkxFRAotICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoQXJyYXk8VD4pID09IHNp
emVvZihJbnNwZWN0b3JBcnJheSksIHR5cGVfY2FzdF9wcm9ibGVtKTsKLSAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PEFycmF5PFQ+Kj4oc3RhdGljX2Nhc3Q8SW5zcGVjdG9yQXJyYXlCYXNlKj4o
YXJyYXkuZ2V0KCkpKTsKLSAgICB9Ci0KLSNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgc3RhdGlj
IHZvaWQgYXNzZXJ0Q29ycmVjdFZhbHVlKEluc3BlY3RvclZhbHVlKiB2YWx1ZSkKLSAgICB7Ci0g
ICAgICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJyYXk7Ci0gICAgICAgIGJvb2wgY2FzdFJl
cyA9IHZhbHVlLT5hc0FycmF5KCZhcnJheSk7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQoY2FzdFJl
cywgY2FzdFJlcyk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhcnJheS0+bGVu
Z3RoKCk7IGkrKykKLSAgICAgICAgICAgIEFycmF5SXRlbUhlbHBlcjxUPjo6VHJhaXRzOjp0ZW1w
bGF0ZSBhc3NlcnRDb3JyZWN0VmFsdWU8VD4oYXJyYXktPmdldChpKS5nZXQoKSk7Ci0gICAgfQot
I2VuZGlmIC8vICFBU1NFUlRfRElTQUJMRUQKIH07CiAKIHN0cnVjdCBTdHJ1Y3RJdGVtVHJhaXRz
IHsKQEAgLTE3NCwxNCArMTAzLDYgQEAgc3RydWN0IFN0cnVjdEl0ZW1UcmFpdHMgewogICAgIHsK
ICAgICAgICAgYXJyYXktPnB1c2hWYWx1ZSh2YWx1ZSk7CiAgICAgfQotCi0jaWYgIUFTU0VSVF9E
SVNBQkxFRAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgc3RhdGljIHZvaWQgYXNzZXJ0
Q29ycmVjdFZhbHVlKEluc3BlY3RvclZhbHVlKiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIFQ6OmFz
c2VydENvcnJlY3RWYWx1ZSh2YWx1ZSk7Ci0gICAgfQotI2VuZGlmIC8vICFBU1NFUlRfRElTQUJM
RUQKIH07CiAKIHRlbXBsYXRlPD4KQEAgLTE5MSwxNCArMTEyLDYgQEAgc3RydWN0IEFycmF5SXRl
bUhlbHBlcjxTdHJpbmc+IHsKICAgICAgICAgewogICAgICAgICAgICAgYXJyYXktPnB1c2hTdHJp
bmcodmFsdWUpOwogICAgICAgICB9Ci0KLSNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgICAgIHN0YXRpYyB2b2lkIGFzc2VydENvcnJlY3RWYWx1
ZShJbnNwZWN0b3JWYWx1ZSogdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFJ1bnRpbWVD
YXN0SGVscGVyOjphc3NlcnRUeXBlPEluc3BlY3RvclZhbHVlOjpUeXBlU3RyaW5nPih2YWx1ZSk7
Ci0gICAgICAgIH0KLSNlbmRpZiAvLyAhQVNTRVJUX0RJU0FCTEVECiAgICAgfTsKIH07CiAKQEAg
LTIwOSwxNCArMTIyLDYgQEAgc3RydWN0IEFycmF5SXRlbUhlbHBlcjxpbnQ+IHsKICAgICAgICAg
ewogICAgICAgICAgICAgYXJyYXktPnB1c2hJbnQodmFsdWUpOwogICAgICAgICB9Ci0KLSNpZiAh
QVNTRVJUX0RJU0FCTEVECi0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgICAgIHN0
YXRpYyB2b2lkIGFzc2VydENvcnJlY3RWYWx1ZShJbnNwZWN0b3JWYWx1ZSogdmFsdWUpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIFJ1bnRpbWVDYXN0SGVscGVyOjphc3NlcnRJbnQodmFsdWUpOwot
ICAgICAgICB9Ci0jZW5kaWYgLy8gIUFTU0VSVF9ESVNBQkxFRAogICAgIH07CiB9OwogCkBAIC0y
MjcsMTQgKzEzMiw2IEBAIHN0cnVjdCBBcnJheUl0ZW1IZWxwZXI8ZG91YmxlPiB7CiAgICAgICAg
IHsKICAgICAgICAgICAgIGFycmF5LT5wdXNoTnVtYmVyKHZhbHVlKTsKICAgICAgICAgfQotCi0j
aWYgIUFTU0VSVF9ESVNBQkxFRAotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgICAg
ICBzdGF0aWMgdm9pZCBhc3NlcnRDb3JyZWN0VmFsdWUoSW5zcGVjdG9yVmFsdWUqIHZhbHVlKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBSdW50aW1lQ2FzdEhlbHBlcjo6YXNzZXJ0VHlwZTxJbnNw
ZWN0b3JWYWx1ZTo6VHlwZU51bWJlcj4odmFsdWUpOwotICAgICAgICB9Ci0jZW5kaWYgLy8gIUFT
U0VSVF9ESVNBQkxFRAogICAgIH07CiB9OwogCkBAIC0yNDUsMTQgKzE0Miw2IEBAIHN0cnVjdCBB
cnJheUl0ZW1IZWxwZXI8Ym9vbD4gewogICAgICAgICB7CiAgICAgICAgICAgICBhcnJheS0+cHVz
aEJvb2xlYW4odmFsdWUpOwogICAgICAgICB9Ci0KLSNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAg
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgICAgIHN0YXRpYyB2b2lkIGFzc2VydENvcnJl
Y3RWYWx1ZShJbnNwZWN0b3JWYWx1ZSogdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFJ1
bnRpbWVDYXN0SGVscGVyOjphc3NlcnRUeXBlPEluc3BlY3RvclZhbHVlOjpUeXBlQm9vbGVhbj4o
dmFsdWUpOwotICAgICAgICB9Ci0jZW5kaWYgLy8gIUFTU0VSVF9ESVNBQkxFRAogICAgIH07CiB9
OwogCkBAIC0yNjMsMTQgKzE1Miw2IEBAIHN0cnVjdCBBcnJheUl0ZW1IZWxwZXI8SW5zcGVjdG9y
VmFsdWU+IHsKICAgICAgICAgewogICAgICAgICAgICAgYXJyYXktPnB1c2hWYWx1ZSh2YWx1ZSk7
CiAgICAgICAgIH0KLQotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVD4KLSAgICAgICAgc3RhdGljIHZvaWQgYXNzZXJ0Q29ycmVjdFZhbHVlKEluc3BlY3Rv
clZhbHVlKiB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgUnVudGltZUNhc3RIZWxwZXI6
OmFzc2VydEFueSh2YWx1ZSk7Ci0gICAgICAgIH0KLSNlbmRpZiAvLyAhQVNTRVJUX0RJU0FCTEVE
CiAgICAgfTsKIH07CiAKQEAgLTI4MSwxNCArMTYyLDYgQEAgc3RydWN0IEFycmF5SXRlbUhlbHBl
cjxJbnNwZWN0b3JPYmplY3Q+IHsKICAgICAgICAgewogICAgICAgICAgICAgYXJyYXktPnB1c2hW
YWx1ZSh2YWx1ZSk7CiAgICAgICAgIH0KLQotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICAgICAgc3RhdGljIHZvaWQgYXNzZXJ0Q29ycmVjdFZh
bHVlKEluc3BlY3RvclZhbHVlKiB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgUnVudGlt
ZUNhc3RIZWxwZXI6OmFzc2VydFR5cGU8SW5zcGVjdG9yVmFsdWU6OlR5cGVPYmplY3Q+KHZhbHVl
KTsKLSAgICAgICAgfQotI2VuZGlmIC8vICFBU1NFUlRfRElTQUJMRUQKICAgICB9OwogfTsKIApA
QCAtMjk5LDE0ICsxNzIsNiBAQCBzdHJ1Y3QgQXJyYXlJdGVtSGVscGVyPEluc3BlY3RvckFycmF5
PiB7CiAgICAgICAgIHsKICAgICAgICAgICAgIGFycmF5LT5wdXNoQXJyYXkodmFsdWUpOwogICAg
ICAgICB9Ci0KLSNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+Ci0gICAgICAgIHN0YXRpYyB2b2lkIGFzc2VydENvcnJlY3RWYWx1ZShJbnNwZWN0b3JWYWx1
ZSogdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFJ1bnRpbWVDYXN0SGVscGVyOjphc3Nl
cnRUeXBlPEluc3BlY3RvclZhbHVlOjpUeXBlQXJyYXk+KHZhbHVlKTsKLSAgICAgICAgfQotI2Vu
ZGlmIC8vICFBU1NFUlRfRElTQUJMRUQKICAgICB9OwogfTsKIApAQCAtMzE3LDE5ICsxODIsOTIg
QEAgc3RydWN0IEFycmF5SXRlbUhlbHBlcjxUeXBlQnVpbGRlcjo6QXJyYXk8VD4+IHsKICAgICAg
ICAgewogICAgICAgICAgICAgYXJyYXktPnB1c2hWYWx1ZSh2YWx1ZSk7CiAgICAgICAgIH0KKyAg
ICB9OworfTsKIAorLy8gSGVscGVyIG1ldGhvZHMgZm9yIFR5cGVCdWlsZGVyIGFuZCBvdGhlciBJ
bnNwZWN0b3IgdHlwZXMgYXJlIHByb3ZpZGVkIGJ5CisvLyBzcGVjaWFsaXphdGlvbnMgb2YgQmlu
ZGluZ1RyYWl0czxUPi4gU29tZSBhcmUgZ2VuZXJhdGVkIGZvciBwcm90b2NvbCB0eXBlcy4KKwor
dGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0cnVjdCBCaW5kaW5nVHJhaXRzIHsKKyAgICB0eXBlZGVm
IFQgQmluZGluZ1R5cGU7CisKKyAgICBzdGF0aWMgSW5zcGVjdG9yVmFsdWU6OlR5cGUgdHlwZVRh
ZygpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFQ+IHJ1bnRpbWVDYXN0KFBhc3NSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0Pik7CiAjaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBTPgotICAgICAgICBzdGF0aWMgdm9pZCBhc3NlcnRDb3JyZWN0VmFsdWUoSW5zcGVj
dG9yVmFsdWUqIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBTOjphc3NlcnRDb3JyZWN0
VmFsdWUodmFsdWUpOwotICAgICAgICB9CisgICAgc3RhdGljIHZvaWQgYXNzZXJ0Q29ycmVjdFZh
bHVlKEluc3BlY3RvclZhbHVlKik7CisjZW5kaWYgLy8gIUFTU0VSVF9ESVNBQkxFRAorfTsKKwor
dGVtcGxhdGU8dHlwZW5hbWUgVCwgSW5zcGVjdG9yVmFsdWU6OlR5cGUgVFlQRT4KK3N0cnVjdCBQ
cmltaXRpdmVCaW5kaW5nVHJhaXRzIHsKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgc3RhdGlj
IHZvaWQgYXNzZXJ0Q29ycmVjdFZhbHVlKEluc3BlY3RvclZhbHVlKiB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIEFTU0VSVCh2YWx1ZS0+dHlwZSgpID09IFRZUEUpOworICAgIH0KKyNlbmRpZiAvLyAh
QVNTRVJUX0RJU0FCTEVECit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3RydWN0IEJpbmRp
bmdUcmFpdHM8VHlwZUJ1aWxkZXI6OkFycmF5PFQ+PiB7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8
QXJyYXk8VD4+IHJ1bnRpbWVDYXN0KFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHZhbHVlKQor
ICAgIHsKKyAgICAgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBhcnJheTsKKyAgICAgICAgYm9v
bCBjYXN0UmVzID0gdmFsdWUtPmFzQXJyYXkoJmFycmF5KTsKKyAgICAgICAgQVNTRVJUX1VOVVNF
RChjYXN0UmVzLCBjYXN0UmVzKTsKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgICAgIGFzc2Vy
dENvcnJlY3RWYWx1ZShhcnJheS5nZXQoKSk7CisjZW5kaWYgLy8gIUFTU0VSVF9ESVNBQkxFRAor
ICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoQXJyYXk8VD4pID09IHNpemVvZihJbnNwZWN0
b3JBcnJheSksIHR5cGVfY2FzdF9wcm9ibGVtKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PEFycmF5PFQ+Kj4oc3RhdGljX2Nhc3Q8SW5zcGVjdG9yQXJyYXlCYXNlKj4oYXJyYXkuZ2V0KCkp
KTsKKyAgICB9CisKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgc3RhdGljIHZvaWQgYXNzZXJ0
Q29ycmVjdFZhbHVlKEluc3BlY3RvclZhbHVlKiB2YWx1ZSkKKyAgICB7CisgICAgICAgIFJlZlB0
cjxJbnNwZWN0b3JBcnJheT4gYXJyYXk7CisgICAgICAgIGJvb2wgY2FzdFJlcyA9IHZhbHVlLT5h
c0FycmF5KCZhcnJheSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoY2FzdFJlcywgY2FzdFJlcyk7
CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhcnJheS0+bGVuZ3RoKCk7IGkrKykK
KyAgICAgICAgICAgIEJpbmRpbmdUcmFpdHM8VD46OmFzc2VydENvcnJlY3RWYWx1ZShhcnJheS0+
Z2V0KGkpLmdldCgpKTsKKyAgICB9CisjZW5kaWYgLy8gIUFTU0VSVF9ESVNBQkxFRAorfTsKKwor
dGVtcGxhdGU8Pgorc3RydWN0IEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yVmFsdWU+IHsKKyNpZiAh
QVNTRVJUX0RJU0FCTEVECisgICAgc3RhdGljIHZvaWQgYXNzZXJ0Q29ycmVjdFZhbHVlKEluc3Bl
Y3RvclZhbHVlKikKKyAgICB7CisgICAgfQorI2VuZGlmIC8vICFBU1NFUlRfRElTQUJMRUQKK307
CisKK3RlbXBsYXRlPD4gc3RydWN0IEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yQXJyYXk+IDogcHVi
bGljIFByaW1pdGl2ZUJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yQXJyYXksIEluc3BlY3RvclZhbHVl
OjpUeXBlOjpBcnJheT4geyB9OwordGVtcGxhdGU8PiBzdHJ1Y3QgQmluZGluZ1RyYWl0czxJbnNw
ZWN0b3JPYmplY3Q+IDogcHVibGljIFByaW1pdGl2ZUJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yT2Jq
ZWN0LCBJbnNwZWN0b3JWYWx1ZTo6VHlwZTo6T2JqZWN0PiB7IH07Cit0ZW1wbGF0ZTw+IHN0cnVj
dCBCaW5kaW5nVHJhaXRzPFN0cmluZz4gOiBwdWJsaWMgUHJpbWl0aXZlQmluZGluZ1RyYWl0czxT
dHJpbmcsIEluc3BlY3RvclZhbHVlOjpUeXBlOjpTdHJpbmc+IHsgfTsKK3RlbXBsYXRlPD4gc3Ry
dWN0IEJpbmRpbmdUcmFpdHM8Ym9vbD4gOiBwdWJsaWMgUHJpbWl0aXZlQmluZGluZ1RyYWl0czxi
b29sLCBJbnNwZWN0b3JWYWx1ZTo6VHlwZTo6Qm9vbGVhbj4geyB9OwordGVtcGxhdGU8PiBzdHJ1
Y3QgQmluZGluZ1RyYWl0czxkb3VibGU+IDogcHVibGljIFByaW1pdGl2ZUJpbmRpbmdUcmFpdHM8
ZG91YmxlLCBJbnNwZWN0b3JWYWx1ZTo6VHlwZTo6TnVtYmVyPiB7IH07CisKKy8vIEZJWE1FOiBB
ZGQgYW4gSW5zcGVjdG9yOjpUeXBlIHRhZyBmb3IgaW50IHNvIHdlIGNhbiByZW1vdmUgdGhpcyBz
cGVjaWFsIGNhc2UuCit0ZW1wbGF0ZTw+CitzdHJ1Y3QgQmluZGluZ1RyYWl0czxpbnQ+IHsKKyNp
ZiAhQVNTRVJUX0RJU0FCTEVECisgICAgc3RhdGljIHZvaWQgYXNzZXJ0Q29ycmVjdFZhbHVlKElu
c3BlY3RvclZhbHVlKiB2YWx1ZSkKKyAgICB7CisgICAgICAgIGRvdWJsZSB2OworICAgICAgICBi
b29sIGNhc3RSZXMgPSB2YWx1ZS0+YXNOdW1iZXIoJnYpOworICAgICAgICBBU1NFUlRfVU5VU0VE
KGNhc3RSZXMsIGNhc3RSZXMpOworICAgICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8ZG91YmxlPihz
dGF0aWNfY2FzdDxpbnQ+KHYpKSA9PSB2KTsKKyAgICB9CiAjZW5kaWYgLy8gIUFTU0VSVF9ESVNB
QkxFRAotICAgIH07CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBUeXBlQnVpbGRlcgogCit1c2luZyBU
eXBlQnVpbGRlcjo6QmluZGluZ1RyYWl0czsKKwogfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCiAK
ICNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuY3BwCmluZGV4IDE5MmZiNmM5ZDkwOTI0ZTYx
N2M1ZDMyYzVkMmUzYmI5ZmNjZDNlMWEuLmUyZDAzNWRjMDlhMWJiZDg1ZjE3YWEwMTA4ZTIwMTg2
MTVmOWEyZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yVmFsdWVzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvclZhbHVlcy5jcHAKQEAgLTU3OSwxMyArNTc5LDEzIEBAIFN0cmluZyBJbnNwZWN0b3JW
YWx1ZTo6dG9KU09OU3RyaW5nKCkgY29uc3QKIAogdm9pZCBJbnNwZWN0b3JWYWx1ZTo6d3JpdGVK
U09OKFN0cmluZ0J1aWxkZXIqIG91dHB1dCkgY29uc3QKIHsKLSAgICBBU1NFUlQobV90eXBlID09
IFR5cGVOdWxsKTsKKyAgICBBU1NFUlQobV90eXBlID09IFR5cGU6Ok51bGwpOwogICAgIG91dHB1
dC0+YXBwZW5kKG51bGxTdHJpbmcsIDQpOwogfQogCiBib29sIEluc3BlY3RvckJhc2ljVmFsdWU6
OmFzQm9vbGVhbihib29sKiBvdXRwdXQpIGNvbnN0CiB7Ci0gICAgaWYgKHR5cGUoKSAhPSBUeXBl
Qm9vbGVhbikKKyAgICBpZiAodHlwZSgpICE9IFR5cGU6OkJvb2xlYW4pCiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAqb3V0cHV0ID0gbV9ib29sVmFsdWU7CiAgICAgcmV0dXJuIHRydWU7CkBA
IC01OTMsNyArNTkzLDcgQEAgYm9vbCBJbnNwZWN0b3JCYXNpY1ZhbHVlOjphc0Jvb2xlYW4oYm9v
bCogb3V0cHV0KSBjb25zdAogCiBib29sIEluc3BlY3RvckJhc2ljVmFsdWU6OmFzTnVtYmVyKGRv
dWJsZSogb3V0cHV0KSBjb25zdAogewotICAgIGlmICh0eXBlKCkgIT0gVHlwZU51bWJlcikKKyAg
ICBpZiAodHlwZSgpICE9IFR5cGU6Ok51bWJlcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICpvdXRwdXQgPSBtX2RvdWJsZVZhbHVlOwogICAgIHJldHVybiB0cnVlOwpAQCAtNjAxLDcgKzYw
MSw3IEBAIGJvb2wgSW5zcGVjdG9yQmFzaWNWYWx1ZTo6YXNOdW1iZXIoZG91YmxlKiBvdXRwdXQp
IGNvbnN0CiAKIGJvb2wgSW5zcGVjdG9yQmFzaWNWYWx1ZTo6YXNOdW1iZXIoZmxvYXQqIG91dHB1
dCkgY29uc3QKIHsKLSAgICBpZiAodHlwZSgpICE9IFR5cGVOdW1iZXIpCisgICAgaWYgKHR5cGUo
KSAhPSBUeXBlOjpOdW1iZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAqb3V0cHV0ID0g
c3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fZG91YmxlVmFsdWUpOwogICAgIHJldHVybiB0cnVlOwpAQCAt
NjA5LDcgKzYwOSw3IEBAIGJvb2wgSW5zcGVjdG9yQmFzaWNWYWx1ZTo6YXNOdW1iZXIoZmxvYXQq
IG91dHB1dCkgY29uc3QKIAogYm9vbCBJbnNwZWN0b3JCYXNpY1ZhbHVlOjphc051bWJlcihpbnQq
IG91dHB1dCkgY29uc3QKIHsKLSAgICBpZiAodHlwZSgpICE9IFR5cGVOdW1iZXIpCisgICAgaWYg
KHR5cGUoKSAhPSBUeXBlOjpOdW1iZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAqb3V0
cHV0ID0gc3RhdGljX2Nhc3Q8aW50PihtX2RvdWJsZVZhbHVlKTsKICAgICByZXR1cm4gdHJ1ZTsK
QEAgLTYxNyw3ICs2MTcsNyBAQCBib29sIEluc3BlY3RvckJhc2ljVmFsdWU6OmFzTnVtYmVyKGlu
dCogb3V0cHV0KSBjb25zdAogCiBib29sIEluc3BlY3RvckJhc2ljVmFsdWU6OmFzTnVtYmVyKHVu
c2lnbmVkKiBvdXRwdXQpIGNvbnN0CiB7Ci0gICAgaWYgKHR5cGUoKSAhPSBUeXBlTnVtYmVyKQor
ICAgIGlmICh0eXBlKCkgIT0gVHlwZTo6TnVtYmVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgKm91dHB1dCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2RvdWJsZVZhbHVlKTsKICAgICBy
ZXR1cm4gdHJ1ZTsKQEAgLTYyNSw3ICs2MjUsNyBAQCBib29sIEluc3BlY3RvckJhc2ljVmFsdWU6
OmFzTnVtYmVyKHVuc2lnbmVkKiBvdXRwdXQpIGNvbnN0CiAKIGJvb2wgSW5zcGVjdG9yQmFzaWNW
YWx1ZTo6YXNOdW1iZXIobG9uZyogb3V0cHV0KSBjb25zdAogewotICAgIGlmICh0eXBlKCkgIT0g
VHlwZU51bWJlcikKKyAgICBpZiAodHlwZSgpICE9IFR5cGU6Ok51bWJlcikKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICpvdXRwdXQgPSBzdGF0aWNfY2FzdDxsb25nPihtX2RvdWJsZVZhbHVl
KTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTYzMyw3ICs2MzMsNyBAQCBib29sIEluc3BlY3RvckJh
c2ljVmFsdWU6OmFzTnVtYmVyKGxvbmcqIG91dHB1dCkgY29uc3QKIAogYm9vbCBJbnNwZWN0b3JC
YXNpY1ZhbHVlOjphc051bWJlcihsb25nIGxvbmcqIG91dHB1dCkgY29uc3QKIHsKLSAgICBpZiAo
dHlwZSgpICE9IFR5cGVOdW1iZXIpCisgICAgaWYgKHR5cGUoKSAhPSBUeXBlOjpOdW1iZXIpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAqb3V0cHV0ID0gc3RhdGljX2Nhc3Q8bG9uZyBsb25n
PihtX2RvdWJsZVZhbHVlKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTY0MSw3ICs2NDEsNyBAQCBi
b29sIEluc3BlY3RvckJhc2ljVmFsdWU6OmFzTnVtYmVyKGxvbmcgbG9uZyogb3V0cHV0KSBjb25z
dAogCiBib29sIEluc3BlY3RvckJhc2ljVmFsdWU6OmFzTnVtYmVyKHVuc2lnbmVkIGxvbmcqIG91
dHB1dCkgY29uc3QKIHsKLSAgICBpZiAodHlwZSgpICE9IFR5cGVOdW1iZXIpCisgICAgaWYgKHR5
cGUoKSAhPSBUeXBlOjpOdW1iZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAqb3V0cHV0
ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4obV9kb3VibGVWYWx1ZSk7CiAgICAgcmV0dXJu
IHRydWU7CkBAIC02NDksNyArNjQ5LDcgQEAgYm9vbCBJbnNwZWN0b3JCYXNpY1ZhbHVlOjphc051
bWJlcih1bnNpZ25lZCBsb25nKiBvdXRwdXQpIGNvbnN0CiAKIGJvb2wgSW5zcGVjdG9yQmFzaWNW
YWx1ZTo6YXNOdW1iZXIodW5zaWduZWQgbG9uZyBsb25nKiBvdXRwdXQpIGNvbnN0CiB7Ci0gICAg
aWYgKHR5cGUoKSAhPSBUeXBlTnVtYmVyKQorICAgIGlmICh0eXBlKCkgIT0gVHlwZTo6TnVtYmVy
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgKm91dHB1dCA9IHN0YXRpY19jYXN0PHVuc2ln
bmVkIGxvbmcgbG9uZz4obV9kb3VibGVWYWx1ZSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC02NTcs
MTMgKzY1NywxMyBAQCBib29sIEluc3BlY3RvckJhc2ljVmFsdWU6OmFzTnVtYmVyKHVuc2lnbmVk
IGxvbmcgbG9uZyogb3V0cHV0KSBjb25zdAogCiB2b2lkIEluc3BlY3RvckJhc2ljVmFsdWU6Ondy
aXRlSlNPTihTdHJpbmdCdWlsZGVyKiBvdXRwdXQpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKHR5cGUo
KSA9PSBUeXBlQm9vbGVhbiB8fCB0eXBlKCkgPT0gVHlwZU51bWJlcik7Ci0gICAgaWYgKHR5cGUo
KSA9PSBUeXBlQm9vbGVhbikgeworICAgIEFTU0VSVCh0eXBlKCkgPT0gVHlwZTo6Qm9vbGVhbiB8
fCB0eXBlKCkgPT0gVHlwZTo6TnVtYmVyKTsKKyAgICBpZiAodHlwZSgpID09IFR5cGU6OkJvb2xl
YW4pIHsKICAgICAgICAgaWYgKG1fYm9vbFZhbHVlKQogICAgICAgICAgICAgb3V0cHV0LT5hcHBl
bmQodHJ1ZVN0cmluZywgNCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG91dHB1dC0+YXBw
ZW5kKGZhbHNlU3RyaW5nLCA1KTsKLSAgICB9IGVsc2UgaWYgKHR5cGUoKSA9PSBUeXBlTnVtYmVy
KSB7CisgICAgfSBlbHNlIGlmICh0eXBlKCkgPT0gVHlwZTo6TnVtYmVyKSB7CiAgICAgICAgIE51
bWJlclRvTFN0cmluZ0J1ZmZlciBidWZmZXI7CiAgICAgICAgIGlmICghc3RkOjppc2Zpbml0ZSht
X2RvdWJsZVZhbHVlKSkgewogICAgICAgICAgICAgb3V0cHV0LT5hcHBlbmQobnVsbFN0cmluZywg
NCk7CkBAIC02OTMsNyArNjkzLDcgQEAgYm9vbCBJbnNwZWN0b3JTdHJpbmc6OmFzU3RyaW5nKFN0
cmluZyogb3V0cHV0KSBjb25zdAogCiB2b2lkIEluc3BlY3RvclN0cmluZzo6d3JpdGVKU09OKFN0
cmluZ0J1aWxkZXIqIG91dHB1dCkgY29uc3QKIHsKLSAgICBBU1NFUlQodHlwZSgpID09IFR5cGVT
dHJpbmcpOworICAgIEFTU0VSVCh0eXBlKCkgPT0gVHlwZTo6U3RyaW5nKTsKICAgICBkb3VibGVR
dW90ZVN0cmluZyhtX3N0cmluZ1ZhbHVlLCBvdXRwdXQpOwogfQogCkBAIC03ODYsNyArNzg2LDcg
QEAgdm9pZCBJbnNwZWN0b3JPYmplY3RCYXNlOjp3cml0ZUpTT04oU3RyaW5nQnVpbGRlciogb3V0
cHV0KSBjb25zdAogfQogCiBJbnNwZWN0b3JPYmplY3RCYXNlOjpJbnNwZWN0b3JPYmplY3RCYXNl
KCkKLSAgICA6IEluc3BlY3RvclZhbHVlKFR5cGVPYmplY3QpCisgICAgOiBJbnNwZWN0b3JWYWx1
ZShUeXBlOjpPYmplY3QpCiAgICAgLCBtX2RhdGEoKQogICAgICwgbV9vcmRlcigpCiB7CkBAIC04
MjEsNyArODIxLDcgQEAgdm9pZCBJbnNwZWN0b3JBcnJheUJhc2U6OndyaXRlSlNPTihTdHJpbmdC
dWlsZGVyKiBvdXRwdXQpIGNvbnN0CiB9CiAKIEluc3BlY3RvckFycmF5QmFzZTo6SW5zcGVjdG9y
QXJyYXlCYXNlKCkKLSAgICA6IEluc3BlY3RvclZhbHVlKFR5cGVBcnJheSkKKyAgICA6IEluc3Bl
Y3RvclZhbHVlKFR5cGU6OkFycmF5KQogICAgICwgbV9kYXRhKCkKIHsKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oCmluZGV4IDNiODYx
NjY0ZGEzMzc5ZGViNTY4OWJjMDAxMzRkZTI2ZWJhNjczZGEuLmIyYjU1Y2MzMjY3N2QzOGRjNTJh
Y2I5ZmUyZTI0MjVjNjE5ODBmYmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaApAQCAtNDcsMjMgKzQ3LDI0IEBAIGNsYXNzIEpTX0VY
UE9SVF9QUklWQVRFIEluc3BlY3RvclZhbHVlIDogcHVibGljIFJlZkNvdW50ZWQ8SW5zcGVjdG9y
VmFsdWU+IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3QgaW50IG1heERlcHRoID0gMTAwMDsK
IAotICAgIEluc3BlY3RvclZhbHVlKCkgOiBtX3R5cGUoVHlwZU51bGwpIHsgfQorICAgIEluc3Bl
Y3RvclZhbHVlKCkKKyAgICAgICAgOiBtX3R5cGUoVHlwZTo6TnVsbCkgeyB9CiAgICAgdmlydHVh
bCB+SW5zcGVjdG9yVmFsdWUoKSB7IH0KIAogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rv
clZhbHVlPiBudWxsKCk7CiAKLSAgICB0eXBlZGVmIGVudW0gewotICAgICAgICBUeXBlTnVsbCA9
IDAsCi0gICAgICAgIFR5cGVCb29sZWFuLAotICAgICAgICBUeXBlTnVtYmVyLAotICAgICAgICBU
eXBlU3RyaW5nLAotICAgICAgICBUeXBlT2JqZWN0LAotICAgICAgICBUeXBlQXJyYXkKLSAgICB9
IFR5cGU7CisgICAgZW51bSBjbGFzcyBUeXBlIHsKKyAgICAgICAgTnVsbCA9IDAsCisgICAgICAg
IEJvb2xlYW4sCisgICAgICAgIE51bWJlciwKKyAgICAgICAgU3RyaW5nLAorICAgICAgICBPYmpl
Y3QsCisgICAgICAgIEFycmF5CisgICAgfTsKIAogICAgIFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0
dXJuIG1fdHlwZTsgfQogCi0gICAgYm9vbCBpc051bGwoKSBjb25zdCB7IHJldHVybiBtX3R5cGUg
PT0gVHlwZU51bGw7IH0KKyAgICBib29sIGlzTnVsbCgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSA9
PSBUeXBlOjpOdWxsOyB9CiAKICAgICB2aXJ0dWFsIGJvb2wgYXNCb29sZWFuKGJvb2wqIG91dHB1
dCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGFzTnVtYmVyKGRvdWJsZSogb3V0cHV0KSBjb25z
dDsKQEAgLTExMyw5ICsxMTQsMTcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCB3cml0ZUpT
T04oU3RyaW5nQnVpbGRlciogb3V0cHV0KSBjb25zdCBvdmVycmlkZTsKIAogcHJpdmF0ZToKLSAg
ICBleHBsaWNpdCBJbnNwZWN0b3JCYXNpY1ZhbHVlKGJvb2wgdmFsdWUpIDogSW5zcGVjdG9yVmFs
dWUoVHlwZUJvb2xlYW4pLCBtX2Jvb2xWYWx1ZSh2YWx1ZSkgeyB9Ci0gICAgZXhwbGljaXQgSW5z
cGVjdG9yQmFzaWNWYWx1ZShpbnQgdmFsdWUpIDogSW5zcGVjdG9yVmFsdWUoVHlwZU51bWJlciks
IG1fZG91YmxlVmFsdWUoKGRvdWJsZSl2YWx1ZSkgeyB9Ci0gICAgZXhwbGljaXQgSW5zcGVjdG9y
QmFzaWNWYWx1ZShkb3VibGUgdmFsdWUpIDogSW5zcGVjdG9yVmFsdWUoVHlwZU51bWJlciksIG1f
ZG91YmxlVmFsdWUodmFsdWUpIHsgfQorICAgIGV4cGxpY2l0IEluc3BlY3RvckJhc2ljVmFsdWUo
Ym9vbCB2YWx1ZSkKKyAgICAgICAgOiBJbnNwZWN0b3JWYWx1ZShUeXBlOjpCb29sZWFuKQorICAg
ICAgICAsIG1fYm9vbFZhbHVlKHZhbHVlKSB7IH0KKworICAgIGV4cGxpY2l0IEluc3BlY3RvckJh
c2ljVmFsdWUoaW50IHZhbHVlKQorICAgICAgICA6IEluc3BlY3RvclZhbHVlKFR5cGU6Ok51bWJl
cikKKyAgICAgICAgLCBtX2RvdWJsZVZhbHVlKChkb3VibGUpdmFsdWUpIHsgfQorCisgICAgZXhw
bGljaXQgSW5zcGVjdG9yQmFzaWNWYWx1ZShkb3VibGUgdmFsdWUpCisgICAgICAgIDogSW5zcGVj
dG9yVmFsdWUoVHlwZTo6TnVtYmVyKQorICAgICAgICAsIG1fZG91YmxlVmFsdWUodmFsdWUpIHsg
fQogCiAgICAgdW5pb24gewogICAgICAgICBib29sIG1fYm9vbFZhbHVlOwpAQCAtMTMzLDggKzE0
MiwxMyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHdyaXRlSlNPTihTdHJpbmdCdWlsZGVy
KiBvdXRwdXQpIGNvbnN0IG92ZXJyaWRlOwogCiBwcml2YXRlOgotICAgIGV4cGxpY2l0IEluc3Bl
Y3RvclN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKSA6IEluc3BlY3RvclZhbHVlKFR5cGVTdHJp
bmcpLCBtX3N0cmluZ1ZhbHVlKHZhbHVlKSB7IH0KLSAgICBleHBsaWNpdCBJbnNwZWN0b3JTdHJp
bmcoY29uc3QgY2hhciogdmFsdWUpIDogSW5zcGVjdG9yVmFsdWUoVHlwZVN0cmluZyksIG1fc3Ry
aW5nVmFsdWUodmFsdWUpIHsgfQorICAgIGV4cGxpY2l0IEluc3BlY3RvclN0cmluZyhjb25zdCBT
dHJpbmcmIHZhbHVlKQorICAgICAgICA6IEluc3BlY3RvclZhbHVlKFR5cGU6OlN0cmluZykKKyAg
ICAgICAgLCBtX3N0cmluZ1ZhbHVlKHZhbHVlKSB7IH0KKworICAgIGV4cGxpY2l0IEluc3BlY3Rv
clN0cmluZyhjb25zdCBjaGFyKiB2YWx1ZSkKKyAgICAgICAgOiBJbnNwZWN0b3JWYWx1ZShUeXBl
OjpTdHJpbmcpCisgICAgICAgICwgbV9zdHJpbmdWYWx1ZSh2YWx1ZSkgeyB9CiAKICAgICBTdHJp
bmcgbV9zdHJpbmdWYWx1ZTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwCmlu
ZGV4IDIzMTMyZmMyMGVhY2QxYmVlMTBkMzRlNzNmNmMwOGFiOWNjODJhZjguLjZhMWZlYzdhYjk3
Yzc2ZmZmZmE4YmE1MWRhZmRjN2Q5NTRkYTk0MWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRlYnVnZ2Vy
QWdlbnQuY3BwCkBAIC00MjksNyArNDI5LDcgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50
OjpnZXRGdW5jdGlvbkRldGFpbHMoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBjb25zdAogICAg
IGluamVjdGVkU2NyaXB0LmdldEZ1bmN0aW9uRGV0YWlscyhlcnJvclN0cmluZywgZnVuY3Rpb25J
ZCwgJmRldGFpbHMpOwogfQogCi12b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNjaGVkdWxl
UGF1c2VPbk5leHRTdGF0ZW1lbnQoSW5zcGVjdG9yRGVidWdnZXJGcm9udGVuZERpc3BhdGNoZXI6
OlJlYXNvbjo6RW51bSBicmVha1JlYXNvbiwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGRh
dGEpCit2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNjaGVkdWxlUGF1c2VPbk5leHRTdGF0
ZW1lbnQoSW5zcGVjdG9yRGVidWdnZXJGcm9udGVuZERpc3BhdGNoZXI6OlJlYXNvbiBicmVha1Jl
YXNvbiwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGRhdGEpCiB7CiAgICAgaWYgKG1famF2
YVNjcmlwdFBhdXNlU2NoZWR1bGVkKQogICAgICAgICByZXR1cm47CkBAIC02NzgsNyArNjc4LDcg
QEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkaWRDb250aW51ZSgpCiAgICAgbV9mcm9u
dGVuZERpc3BhdGNoZXItPnJlc3VtZWQoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFn
ZW50OjpicmVha1Byb2dyYW0oSW5zcGVjdG9yRGVidWdnZXJGcm9udGVuZERpc3BhdGNoZXI6OlJl
YXNvbjo6RW51bSBicmVha1JlYXNvbiwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGRhdGEp
Cit2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmJyZWFrUHJvZ3JhbShJbnNwZWN0b3JEZWJ1
Z2dlckZyb250ZW5kRGlzcGF0Y2hlcjo6UmVhc29uIGJyZWFrUmVhc29uLCBQYXNzUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gZGF0YSkKIHsKICAgICBtX2JyZWFrUmVhc29uID0gYnJlYWtSZWFzb247
CiAgICAgbV9icmVha0F1eERhdGEgPSBkYXRhOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5o
CmluZGV4IGViMjI3MGE5Y2UyNDI4MTNmOWQ0ZWU1NTkwMGZmODNhOTk2ZjQwNmIuLjg0N2U3OGI2
MGY1ZGNjZjk2OWZiM2QwMTEzZWQyNTIzZWEwMjdkM2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JEZWJ1Z2dl
ckFnZW50LmgKQEAgLTkxLDkgKzkxLDkgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgaGFuZGxl
Q29uc29sZUFzc2VydCgpOwogCi0gICAgdm9pZCBzY2hlZHVsZVBhdXNlT25OZXh0U3RhdGVtZW50
KEluc3BlY3RvckRlYnVnZ2VyRnJvbnRlbmREaXNwYXRjaGVyOjpSZWFzb246OkVudW0gYnJlYWtS
ZWFzb24sIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBkYXRhKTsKKyAgICB2b2lkIHNjaGVk
dWxlUGF1c2VPbk5leHRTdGF0ZW1lbnQoSW5zcGVjdG9yRGVidWdnZXJGcm9udGVuZERpc3BhdGNo
ZXI6OlJlYXNvbiBicmVha1JlYXNvbiwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGRhdGEp
OwogICAgIHZvaWQgY2FuY2VsUGF1c2VPbk5leHRTdGF0ZW1lbnQoKTsKLSAgICB2b2lkIGJyZWFr
UHJvZ3JhbShJbnNwZWN0b3JEZWJ1Z2dlckZyb250ZW5kRGlzcGF0Y2hlcjo6UmVhc29uOjpFbnVt
IGJyZWFrUmVhc29uLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZGF0YSk7CisgICAgdm9p
ZCBicmVha1Byb2dyYW0oSW5zcGVjdG9yRGVidWdnZXJGcm9udGVuZERpc3BhdGNoZXI6OlJlYXNv
biBicmVha1JlYXNvbiwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGRhdGEpOwogICAgIHZv
aWQgc2NyaXB0RXhlY3V0aW9uQmxvY2tlZEJ5Q1NQKGNvbnN0IFN0cmluZyYgZGlyZWN0aXZlVGV4
dCk7CiAKICAgICBjbGFzcyBMaXN0ZW5lciB7CkBAIC0xNTksNyArMTU5LDcgQEAgcHJpdmF0ZToK
ICAgICBCcmVha3BvaW50SWRlbnRpZmllclRvRGVidWdTZXJ2ZXJCcmVha3BvaW50SURzTWFwIG1f
YnJlYWtwb2ludElkZW50aWZpZXJUb0RlYnVnU2VydmVyQnJlYWtwb2ludElEczsKICAgICBCcmVh
a3BvaW50SWRlbnRpZmllclRvQnJlYWtwb2ludE1hcCBtX2phdmFTY3JpcHRCcmVha3BvaW50czsK
ICAgICBKU0M6OkJyZWFrcG9pbnRJRCBtX2NvbnRpbnVlVG9Mb2NhdGlvbkJyZWFrcG9pbnRJRDsK
LSAgICBJbnNwZWN0b3JEZWJ1Z2dlckZyb250ZW5kRGlzcGF0Y2hlcjo6UmVhc29uOjpFbnVtIG1f
YnJlYWtSZWFzb247CisgICAgSW5zcGVjdG9yRGVidWdnZXJGcm9udGVuZERpc3BhdGNoZXI6OlJl
YXNvbiBtX2JyZWFrUmVhc29uOwogICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fYnJlYWtB
dXhEYXRhOwogICAgIGJvb2wgbV9lbmFibGVkOwogICAgIGJvb2wgbV9qYXZhU2NyaXB0UGF1c2VT
Y2hlZHVsZWQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2Fn
ZW50cy9JbnNwZWN0b3JSdW50aW1lQWdlbnQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUnVudGltZUFnZW50LmNwcAppbmRleCBkOGQ2OWEyNTQx
NzIxMWFmYjg3NmMwMGRlYjQ4ODQzNWZjZDM4ZTNhLi5hOTMxYjQzZDBjZTJmYzc2Y2VjOGVhMWRh
MzdlMjlkZTllNGU4ZjgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL2FnZW50cy9JbnNwZWN0b3JSdW50aW1lQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclJ1bnRpbWVBZ2VudC5jcHAKQEAgLTgy
LDcgKzgyLDcgQEAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UnVu
dGltZTo6RXJyb3JSYW5nZT4gYnVpbGRFcnJvclJhbmdlT2IKICAgICByZXR1cm4gcmVzdWx0LnJl
bGVhc2UoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OnBhcnNlKEVycm9yU3Ry
aW5nKiwgY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpS
dW50aW1lOjpTeW50YXhFcnJvclR5cGU6OkVudW0qIHJlc3VsdCwgSW5zcGVjdG9yOjpUeXBlQnVp
bGRlcjo6T3B0T3V0cHV0PFN0cmluZz4qIG1lc3NhZ2UsIFJlZlB0cjxJbnNwZWN0b3I6OlR5cGVC
dWlsZGVyOjpSdW50aW1lOjpFcnJvclJhbmdlPiYgcmFuZ2UpCit2b2lkIEluc3BlY3RvclJ1bnRp
bWVBZ2VudDo6cGFyc2UoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIElu
c3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OlN5bnRheEVycm9yVHlwZSogcmVzdWx0LCBJ
bnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8U3RyaW5nPiogbWVzc2FnZSwgUmVmUHRy
PEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OkVycm9yUmFuZ2U+JiByYW5nZSkKIHsK
ICAgICBWTSYgdm0gPSBnbG9iYWxWTSgpOwogICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rv
clJ1bnRpbWVBZ2VudC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9yUnVudGltZUFnZW50LmgKaW5kZXggZDZjMWVlYTIwMDQxZTc2ODFlY2ExOWY4NzYx
NzVhNzgxMmIwYWYyNC4uOWIxOTczOWEwYzE5N2FjMDM2NjI4YzhjZjVjMWExZWM0MjY0MmM2OSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVj
dG9yUnVudGltZUFnZW50LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9h
Z2VudHMvSW5zcGVjdG9yUnVudGltZUFnZW50LmgKQEAgLTU5LDcgKzU5LDcgQEAgcHVibGljOgog
CiAgICAgdmlydHVhbCB2b2lkIGVuYWJsZShFcnJvclN0cmluZyopIG92ZXJyaWRlIHsgbV9lbmFi
bGVkID0gdHJ1ZTsgfQogICAgIHZpcnR1YWwgdm9pZCBkaXNhYmxlKEVycm9yU3RyaW5nKikgb3Zl
cnJpZGUgeyBtX2VuYWJsZWQgPSBmYWxzZTsgfQotICAgIHZpcnR1YWwgdm9pZCBwYXJzZShFcnJv
clN0cmluZyosIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgSW5zcGVjdG9yOjpUeXBlQnVpbGRl
cjo6UnVudGltZTo6U3ludGF4RXJyb3JUeXBlOjpFbnVtKiByZXN1bHQsIEluc3BlY3Rvcjo6VHlw
ZUJ1aWxkZXI6Ok9wdE91dHB1dDxTdHJpbmc+KiBtZXNzYWdlLCBSZWZQdHI8SW5zcGVjdG9yOjpU
eXBlQnVpbGRlcjo6UnVudGltZTo6RXJyb3JSYW5nZT4mKSBvdmVycmlkZSBmaW5hbDsKKyAgICB2
aXJ0dWFsIHZvaWQgcGFyc2UoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24s
IEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OlN5bnRheEVycm9yVHlwZSogcmVzdWx0
LCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8U3RyaW5nPiogbWVzc2FnZSwgUmVm
UHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OkVycm9yUmFuZ2U+Jikgb3ZlcnJp
ZGUgZmluYWw7CiAgICAgdmlydHVhbCB2b2lkIGV2YWx1YXRlKEVycm9yU3RyaW5nKiwgY29uc3Qg
U3RyaW5nJiBleHByZXNzaW9uLCBjb25zdCBTdHJpbmcqIG9iamVjdEdyb3VwLCBjb25zdCBib29s
KiBpbmNsdWRlQ29tbWFuZExpbmVBUEksIGNvbnN0IGJvb2wqIGRvTm90UGF1c2VPbkV4Y2VwdGlv
bnNBbmRNdXRlQ29uc29sZSwgY29uc3QgaW50KiBleGVjdXRpb25Db250ZXh0SWQsIGNvbnN0IGJv
b2wqIHJldHVybkJ5VmFsdWUsIGNvbnN0IGJvb2wqIGdlbmVyYXRlUHJldmlldywgUmVmUHRyPElu
c3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3VsdCwgSW5z
cGVjdG9yOjpUeXBlQnVpbGRlcjo6T3B0T3V0cHV0PGJvb2w+KiB3YXNUaHJvd24pIG92ZXJyaWRl
IGZpbmFsOwogICAgIHZpcnR1YWwgdm9pZCBjYWxsRnVuY3Rpb25PbihFcnJvclN0cmluZyosIGNv
bnN0IFN0cmluZyYgb2JqZWN0SWQsIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgY29uc3QgUmVm
UHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXk+KiBvcHRpb25hbEFyZ3VtZW50cywgY29uc3Qg
Ym9vbCogZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xlLCBjb25zdCBib29sKiBy
ZXR1cm5CeVZhbHVlLCBjb25zdCBib29sKiBnZW5lcmF0ZVByZXZpZXcsIFJlZlB0cjxJbnNwZWN0
b3I6OlR5cGVCdWlsZGVyOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiByZXN1bHQsIEluc3BlY3Rv
cjo6VHlwZUJ1aWxkZXI6Ok9wdE91dHB1dDxib29sPiogd2FzVGhyb3duKSBvdmVycmlkZSBmaW5h
bDsKICAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZU9iamVjdChFcnJvclN0cmluZyosIGNvbnN0IEVy
cm9yU3RyaW5nJiBvYmplY3RJZCkgb3ZlcnJpZGUgZmluYWw7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5w
eSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9Db2RlR2VuZXJhdG9y
SW5zcGVjdG9yLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA5MWZhOGM5YzJkN2I5
NDk5Y2IwOGQ1ZWZhNDJhOTIyNDkyNjUzMTg0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMjYxNCArMCww
IEBACi0jIS91c3IvYmluL2VudiBweXRob24KLSMgQ29weXJpZ2h0IChjKSAyMDExIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIENvcHlyaWdodCAoYykgMjAxMiBJbnRlbCBDb3Jw
b3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgQ29weXJpZ2h0IChjKSAyMDEzIEFwcGxl
IEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKLSMgbWV0OgotIwotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSMgY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgotIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCi0jIGRpc3RyaWJ1dGlvbi4KLSMgICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotIyBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotIyB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotIwot
IyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCi0jICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotIyBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAot
IyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKLSMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSMgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
Ci0jIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLWltcG9ydCBv
cy5wYXRoCi1pbXBvcnQgc3lzCi1pbXBvcnQgc3RyaW5nCi1pbXBvcnQgb3B0cGFyc2UKLWltcG9y
dCByZQotdHJ5OgotICAgIGltcG9ydCBqc29uCi1leGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgaW1w
b3J0IHNpbXBsZWpzb24gYXMganNvbgotCi1pbXBvcnQgQ29kZUdlbmVyYXRvckluc3BlY3RvclN0
cmluZ3MKLQotCi1ET01BSU5fREVGSU5FX05BTUVfTUFQID0gewotICAgICJEYXRhYmFzZSI6ICJT
UUxfREFUQUJBU0UiLAotICAgICJJbmRleGVkREIiOiAiSU5ERVhFRF9EQVRBQkFTRSIsCi0gICAg
IlJlcGxheSI6ICJXRUJfUkVQTEFZIiwKLX0KLQotCi0jIE1hbnVhbGx5LWZpbGxlZCBtYXAgb2Yg
dHlwZSBuYW1lIHJlcGxhY2VtZW50cy4KLVRZUEVfTkFNRV9GSVhfTUFQID0gewotICAgICJSR0JB
IjogIlJnYmEiLCAgIyBSR0JBIGlzIHJlcG9ydGVkIHRvIGJlIGNvbmZsaWN0aW5nIHdpdGggYSBk
ZWZpbmUgbmFtZSBpbiBXaW5kb3dzIENFLgotICAgICIiOiAiRW1wdHkiLAotfQotCi0KLVRZUEVT
X1dJVEhfUlVOVElNRV9DQVNUX1NFVCA9IGZyb3plbnNldChbIlJ1bnRpbWUuUmVtb3RlT2JqZWN0
IiwgIlJ1bnRpbWUuUHJvcGVydHlEZXNjcmlwdG9yIiwgIlJ1bnRpbWUuSW50ZXJuYWxQcm9wZXJ0
eURlc2NyaXB0b3IiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
RGVidWdnZXIuRnVuY3Rpb25EZXRhaWxzIiwgIkRlYnVnZ2VyLkNhbGxGcmFtZSIsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDYW52YXMuVHJhY2VMb2ciLCAiQ2Fu
dmFzLlJlc291cmNlSW5mbyIsICJDYW52YXMuUmVzb3VyY2VTdGF0ZSIsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgVGhpcyBzaG91bGQgYmUgYSB0ZW1wb3Jhcnkg
aGFjay4gVGltZWxpbmVFdmVudCBzaG91bGQgYmUgY3JlYXRlZCB2aWEgZ2VuZXJhdGVkIEMrKyBB
UEkuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUaW1lbGluZS5U
aW1lbGluZUV2ZW50Il0pCi0KLVRZUEVTX1dJVEhfT1BFTl9GSUVMRF9MSVNUX1NFVCA9IGZyb3pl
bnNldChbIlRpbWVsaW5lLlRpbWVsaW5lRXZlbnQiLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAjIEluc3BlY3RvclN0eWxlU2hlZXQgbm90IG9ubHkgY3JlYXRl
cyB0aGlzIHByb3BlcnR5IGJ1dCB3YW50cyB0byByZWFkIGl0IGFuZCBtb2RpZnkgaXQuCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDU1MuQ1NTUHJvcGVydHki
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEluc3BlY3Rv
clJlc291cmNlQWdlbnQgbmVlZHMgdG8gdXBkYXRlIG1pbWUtdHlwZS4KLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5ldHdvcmsuUmVzcG9uc2UiXSkKLQotRVhB
Q1RMWV9JTlRfU1VQUE9SVEVEID0gRmFsc2UKLQotSU5TUEVDVE9SX1RZUEVTX0dFTkVSQVRPUl9D
T05GSUdfTUFQID0gewotICAgICJKYXZhU2NyaXB0IjogewotICAgICAgICAicHJlZml4IjogIkpT
IiwKLSAgICAgICAgInR5cGVidWlsZGVyX2RlcGVuZGVuY3kiOiAiIiwKLSAgICAgICAgImV4cG9y
dF9tYWNybyI6ICJKU19FWFBPUlRfUFJJVkFURSIsCi0gICAgfSwKLSAgICAiV2ViIjogewotICAg
ICAgICAicHJlZml4IjogIldlYiIsCi0gICAgICAgICJ0eXBlYnVpbGRlcl9kZXBlbmRlbmN5Ijog
IiNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9ySlNUeXBlQnVpbGRlcnMuaD4iLAotICAgICAg
ICAiZXhwb3J0X21hY3JvIjogIiIsCi0gICAgfSwKLX0KLQotY21kbGluZV9wYXJzZXIgPSBvcHRw
YXJzZS5PcHRpb25QYXJzZXIodXNhZ2U9InVzYWdlOiAlcHJvZyBbb3B0aW9uc10gPEluc3BlY3Rv
ci5qc29uPiIpCi1jbWRsaW5lX3BhcnNlci5hZGRfb3B0aW9uKCItLW91dHB1dF9oX2RpciIpCi1j
bWRsaW5lX3BhcnNlci5hZGRfb3B0aW9uKCItLW91dHB1dF9jcHBfZGlyIikKLWNtZGxpbmVfcGFy
c2VyLmFkZF9vcHRpb24oIi0tb3V0cHV0X2pzX2RpciIpCi1jbWRsaW5lX3BhcnNlci5hZGRfb3B0
aW9uKCItLW91dHB1dF90eXBlIikgICMgSmF2YVNjcmlwdCwgV2ViCi1jbWRsaW5lX3BhcnNlci5h
ZGRfb3B0aW9uKCItLXdyaXRlX2Fsd2F5cyIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIpCi1jbWRsaW5l
X3BhcnNlci5hZGRfb3B0aW9uKCItLW5vX3ZlcmlmaWNhdGlvbiIsIGFjdGlvbj0ic3RvcmVfdHJ1
ZSIpCi0KLXRyeToKLSAgICBhcmdfb3B0aW9ucywgYXJnX3ZhbHVlcyA9IGNtZGxpbmVfcGFyc2Vy
LnBhcnNlX2FyZ3MoKQotICAgIGlmIChsZW4oYXJnX3ZhbHVlcykgPCAxKToKLSAgICAgICAgcmFp
c2UgRXhjZXB0aW9uKCJBdCBsZWFzdCBvbmUgcGxhaW4gYXJndW1lbnQgZXhwZWN0ZWQiKQotCi0g
ICAgaW5wdXRfanNvbl9maWxlbmFtZSA9IGFyZ192YWx1ZXNbMF0KLSAgICBkZXBlbmRlbmN5X2pz
b25fZmlsZW5hbWVzID0gYXJnX3ZhbHVlc1sxOl0KLQotICAgIG91dHB1dF9oZWFkZXJfZGlybmFt
ZSA9IGFyZ19vcHRpb25zLm91dHB1dF9oX2RpcgotICAgIG91dHB1dF9jcHBfZGlybmFtZSA9IGFy
Z19vcHRpb25zLm91dHB1dF9jcHBfZGlyCi0gICAgb3V0cHV0X2pzX2Rpcm5hbWUgPSBhcmdfb3B0
aW9ucy5vdXRwdXRfanNfZGlyCi0gICAgb3V0cHV0X3R5cGUgPSBhcmdfb3B0aW9ucy5vdXRwdXRf
dHlwZQotCi0gICAgd3JpdGVfYWx3YXlzID0gYXJnX29wdGlvbnMud3JpdGVfYWx3YXlzCi0gICAg
dmVyaWZpY2F0aW9uID0gbm90IGFyZ19vcHRpb25zLm5vX3ZlcmlmaWNhdGlvbgotICAgIGlmIG5v
dCBvdXRwdXRfaGVhZGVyX2Rpcm5hbWU6Ci0gICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiT3V0cHV0
IC5oIGRpcmVjdG9yeSBtdXN0IGJlIHNwZWNpZmllZCIpCi0gICAgaWYgbm90IG91dHB1dF9jcHBf
ZGlybmFtZToKLSAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJPdXRwdXQgLmNwcCBkaXJlY3Rvcnkg
bXVzdCBiZSBzcGVjaWZpZWQiKQotICAgIGlmIG5vdCBvdXRwdXRfanNfZGlybmFtZToKLSAgICAg
ICAgcmFpc2UgRXhjZXB0aW9uKCJPdXRwdXQgLmpzIGRpcmVjdG9yeSBtdXN0IGJlIHNwZWNpZmll
ZCIpCi0gICAgaWYgb3V0cHV0X3R5cGUgbm90IGluIElOU1BFQ1RPUl9UWVBFU19HRU5FUkFUT1Jf
Q09ORklHX01BUC5rZXlzKCk6Ci0gICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiVW5rbm93biBvdXRw
dXQgdHlwZS4gQWxsb3dlZCB0eXBlcyBhcmU6ICVzIiAlIElOU1BFQ1RPUl9UWVBFU19HRU5FUkFU
T1JfQ09ORklHX01BUC5rZXlzKCkpCi1leGNlcHQgRXhjZXB0aW9uOgotICAgICMgV29yayB3aXRo
IHB5dGhvbiAyIGFuZCAzIGh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvcHkzay9ob3d0by9weXBvcnRp
bmcuaHRtbAotICAgIGV4YyA9IHN5cy5leGNfaW5mbygpWzFdCi0gICAgc3lzLnN0ZGVyci53cml0
ZSgiRmFpbGVkIHRvIHBhcnNlIGNvbW1hbmQtbGluZSBhcmd1bWVudHM6ICVzXG5cbiIgJSBleGMp
Ci0gICAgc3lzLnN0ZGVyci53cml0ZSgiVXNhZ2U6IDxzY3JpcHQ+IEluc3BlY3Rvci5qc29uIC0t
b3V0cHV0X2hfZGlyIDxvdXRwdXRfaGVhZGVyX2Rpcj4gLS1vdXRwdXRfY3BwX2RpciA8b3V0cHV0
X2NwcF9kaXI+IC0tb3V0cHV0X2pzX2RpciA8b3V0cHV0X2pzX2Rpcj4gWy0td3JpdGVfYWx3YXlz
XSBbLS1ub192ZXJpZmljYXRpb25dXG4iKQotICAgIGV4aXQoMSkKLQotCi1kZWYgZGFzaF90b19j
YW1lbGNhc2Uod29yZCk6Ci0gICAgcmV0dXJuICcnLmpvaW4oeC5jYXBpdGFsaXplKCkgb3IgJy0n
IGZvciB4IGluIHdvcmQuc3BsaXQoJy0nKSkKLQotCi1kZWYgZml4X2NhbWVsX2Nhc2UobmFtZSk6
Ci0gICAgcmVmaW5lZCA9IHJlLnN1YihyJy0oXHcpJywgbGFtYmRhIHBhdDogcGF0Lmdyb3VwKDEp
LnVwcGVyKCksIG5hbWUpCi0gICAgcmVmaW5lZCA9IHRvX3RpdGxlX2Nhc2UocmVmaW5lZCkKLSAg
ICByZXR1cm4gcmUuc3ViKHInKD9pKUhUTUx8WE1MfFdNTHxBUEl8R0N8WEhSfERPTXxDU1MnLCBs
YW1iZGEgcGF0OiBwYXQuZ3JvdXAoMCkudXBwZXIoKSwgcmVmaW5lZCkKLQotCi1kZWYgdG9fdGl0
bGVfY2FzZShuYW1lKToKLSAgICByZXR1cm4gbmFtZVs6MV0udXBwZXIoKSArIG5hbWVbMTpdCi0K
LQotY2xhc3MgQ2FwaXRhbGl6ZXI6Ci0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBsb3dlcl9j
YW1lbF9jYXNlX3RvX3VwcGVyKHN0cik6Ci0gICAgICAgIGlmIGxlbihzdHIpID4gMCBhbmQgc3Ry
WzBdLmlzbG93ZXIoKToKLSAgICAgICAgICAgIHN0ciA9IHN0clswXS51cHBlcigpICsgc3RyWzE6
XQotICAgICAgICByZXR1cm4gc3RyCi0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIHVwcGVy
X2NhbWVsX2Nhc2VfdG9fbG93ZXIoc3RyKToKLSAgICAgICAgcG9zID0gMAotICAgICAgICB3aGls
ZSBwb3MgPCBsZW4oc3RyKSBhbmQgc3RyW3Bvc10uaXN1cHBlcigpOgotICAgICAgICAgICAgcG9z
ICs9IDEKLSAgICAgICAgaWYgcG9zID09IDA6Ci0gICAgICAgICAgICByZXR1cm4gc3RyCi0gICAg
ICAgIGlmIHBvcyA9PSAxOgotICAgICAgICAgICAgcmV0dXJuIHN0clswXS5sb3dlcigpICsgc3Ry
WzE6XQotICAgICAgICBpZiBwb3MgPCBsZW4oc3RyKToKLSAgICAgICAgICAgIHBvcyAtPSAxCi0g
ICAgICAgIHBvc3NpYmxlX2FiYnJldmlhdGlvbiA9IHN0clswOnBvc10KLSAgICAgICAgaWYgcG9z
c2libGVfYWJicmV2aWF0aW9uIG5vdCBpbiBDYXBpdGFsaXplci5BQkJSRVZJQVRJT046Ci0gICAg
ICAgICAgICByYWlzZSBFeGNlcHRpb24oIlVua25vd24gYWJicmV2aWF0aW9uICVzIiAlIHBvc3Np
YmxlX2FiYnJldmlhdGlvbikKLSAgICAgICAgc3RyID0gcG9zc2libGVfYWJicmV2aWF0aW9uLmxv
d2VyKCkgKyBzdHJbcG9zOl0KLSAgICAgICAgcmV0dXJuIHN0cgotCi0gICAgQHN0YXRpY21ldGhv
ZAotICAgIGRlZiBjYW1lbF9jYXNlX3RvX2NhcGl0YWxpemVkX3dpdGhfdW5kZXJzY29yZXMoc3Ry
KToKLSAgICAgICAgaWYgbGVuKHN0cikgPT0gMDoKLSAgICAgICAgICAgIHJldHVybiBzdHIKLSAg
ICAgICAgb3V0cHV0ID0gQ2FwaXRhbGl6ZXIuc3BsaXRfY2FtZWxfY2FzZV8oc3RyKQotICAgICAg
ICByZXR1cm4gIl8iLmpvaW4ob3V0cHV0KS51cHBlcigpCi0KLSAgICBAc3RhdGljbWV0aG9kCi0g
ICAgZGVmIHNwbGl0X2NhbWVsX2Nhc2VfKHN0cik6Ci0gICAgICAgIG91dHB1dCA9IFtdCi0gICAg
ICAgIHBvc19iZWluZyA9IDAKLSAgICAgICAgcG9zID0gMQotICAgICAgICBoYXNfb25lbGV0dGVy
ID0gRmFsc2UKLSAgICAgICAgd2hpbGUgcG9zIDwgbGVuKHN0cik6Ci0gICAgICAgICAgICBpZiBz
dHJbcG9zXS5pc3VwcGVyKCk6Ci0gICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZChzdHJbcG9z
X2JlaW5nOnBvc10udXBwZXIoKSkKLSAgICAgICAgICAgICAgICBpZiBwb3MgLSBwb3NfYmVpbmcg
PT0gMToKLSAgICAgICAgICAgICAgICAgICAgaGFzX29uZWxldHRlciA9IFRydWUKLSAgICAgICAg
ICAgICAgICBwb3NfYmVpbmcgPSBwb3MKLSAgICAgICAgICAgIHBvcyArPSAxCi0gICAgICAgIG91
dHB1dC5hcHBlbmQoc3RyW3Bvc19iZWluZzpdKQotICAgICAgICBpZiBoYXNfb25lbGV0dGVyOgot
ICAgICAgICAgICAgYXJyYXlfcG9zID0gMAotICAgICAgICAgICAgd2hpbGUgYXJyYXlfcG9zIDwg
bGVuKG91dHB1dCkgLSAxOgotICAgICAgICAgICAgICAgIGlmIGxlbihvdXRwdXRbYXJyYXlfcG9z
XSkgPT0gMToKLSAgICAgICAgICAgICAgICAgICAgYXJyYXlfcG9zX2VuZCA9IGFycmF5X3BvcyAr
IDEKLSAgICAgICAgICAgICAgICAgICAgd2hpbGUgYXJyYXlfcG9zX2VuZCA8IGxlbihvdXRwdXQp
IGFuZCBsZW4ob3V0cHV0W2FycmF5X3Bvc19lbmRdKSA9PSAxOgotICAgICAgICAgICAgICAgICAg
ICAgICAgYXJyYXlfcG9zX2VuZCArPSAxCi0gICAgICAgICAgICAgICAgICAgIGlmIGFycmF5X3Bv
c19lbmQgLSBhcnJheV9wb3MgPiAxOgotICAgICAgICAgICAgICAgICAgICAgICAgcG9zc2libGVf
YWJicmV2aWF0aW9uID0gIiIuam9pbihvdXRwdXRbYXJyYXlfcG9zOmFycmF5X3Bvc19lbmRdKQot
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgcG9zc2libGVfYWJicmV2aWF0aW9uLnVwcGVyKCkg
aW4gQ2FwaXRhbGl6ZXIuQUJCUkVWSUFUSU9OOgotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG91dHB1dFthcnJheV9wb3M6YXJyYXlfcG9zX2VuZF0gPSBbcG9zc2libGVfYWJicmV2aWF0aW9u
XQotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBhcnJheV9wb3MgPSBhcnJheV9wb3NfZW5kIC0gMQotICAgICAgICAgICAgICAgIGFycmF5
X3BvcyArPSAxCi0gICAgICAgIHJldHVybiBvdXRwdXQKLQotICAgIEFCQlJFVklBVElPTiA9IGZy
b3plbnNldChbIlhIUiIsICJET00iLCAiQ1NTIl0pCi0KLVZBTElEQVRPUl9JRkRFRl9OQU1FID0g
IiFBU1NFUlRfRElTQUJMRUQiCi0KLQotY2xhc3MgRG9tYWluTmFtZUZpeGVzOgotICAgIEBjbGFz
c21ldGhvZAotICAgIGRlZiBnZXRfZml4ZWRfZGF0YShjbHMsIGRvbWFpbl9uYW1lKToKLSAgICAg
ICAgZmllbGRfbmFtZV9yZXMgPSBDYXBpdGFsaXplci51cHBlcl9jYW1lbF9jYXNlX3RvX2xvd2Vy
KGRvbWFpbl9uYW1lKSArICJBZ2VudCIKLQotICAgICAgICBjbGFzcyBSZXMob2JqZWN0KToKLSAg
ICAgICAgICAgIHNraXBfanNfYmluZCA9IGRvbWFpbl9uYW1lIGluIGNscy5za2lwX2pzX2JpbmRf
ZG9tYWlucwotCi0gICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICBkZWYgZ2V0
X2d1YXJkKCk6Ci0gICAgICAgICAgICAgICAgaWYgZG9tYWluX25hbWUgaW4gRE9NQUlOX0RFRklO
RV9OQU1FX01BUDoKLSAgICAgICAgICAgICAgICAgICAgZGVmaW5lX25hbWUgPSBET01BSU5fREVG
SU5FX05BTUVfTUFQW2RvbWFpbl9uYW1lXQotCi0gICAgICAgICAgICAgICAgICAgIGNsYXNzIEd1
YXJkOgotICAgICAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAg
ICAgICAgICAgICAgZGVmIGdlbmVyYXRlX29wZW4ob3V0cHV0KToKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCIjaWYgRU5BQkxFKCVzKVxuIiAlIGRlZmluZV9uYW1l
KQotCi0gICAgICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICAg
ICAgICAgICAgICBkZWYgZ2VuZXJhdGVfY2xvc2Uob3V0cHV0KToKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCIjZW5kaWYgLy8gRU5BQkxFKCVzKVxuIiAlIGRlZmlu
ZV9uYW1lKQotCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBHdWFyZAotCi0gICAgICAgIHJl
dHVybiBSZXMKLQotICAgIHNraXBfanNfYmluZF9kb21haW5zID0gc2V0KFsiRE9NRGVidWdnZXIi
XSkKLQotCi1jbGFzcyBSYXdUeXBlcyhvYmplY3QpOgotICAgIEBzdGF0aWNtZXRob2QKLSAgICBk
ZWYgZ2V0KGpzb25fdHlwZSk6Ci0gICAgICAgIGlmIGpzb25fdHlwZSA9PSAiYm9vbGVhbiI6Ci0g
ICAgICAgICAgICByZXR1cm4gUmF3VHlwZXMuQm9vbAotICAgICAgICBlbGlmIGpzb25fdHlwZSA9
PSAic3RyaW5nIjoKLSAgICAgICAgICAgIHJldHVybiBSYXdUeXBlcy5TdHJpbmcKLSAgICAgICAg
ZWxpZiBqc29uX3R5cGUgPT0gImFycmF5IjoKLSAgICAgICAgICAgIHJldHVybiBSYXdUeXBlcy5B
cnJheQotICAgICAgICBlbGlmIGpzb25fdHlwZSA9PSAib2JqZWN0IjoKLSAgICAgICAgICAgIHJl
dHVybiBSYXdUeXBlcy5PYmplY3QKLSAgICAgICAgZWxpZiBqc29uX3R5cGUgPT0gImludGVnZXIi
OgotICAgICAgICAgICAgcmV0dXJuIFJhd1R5cGVzLkludAotICAgICAgICBlbGlmIGpzb25fdHlw
ZSA9PSAibnVtYmVyIjoKLSAgICAgICAgICAgIHJldHVybiBSYXdUeXBlcy5OdW1iZXIKLSAgICAg
ICAgZWxpZiBqc29uX3R5cGUgPT0gImFueSI6Ci0gICAgICAgICAgICByZXR1cm4gUmF3VHlwZXMu
QW55Ci0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIlVua25vd24g
dHlwZTogJXMiICUganNvbl90eXBlKQotCi0gICAgIyBGb3Igb3V0cHV0IHBhcmFtZXRlciBhbGwg
dmFsdWVzIGFyZSBwYXNzZWQgYnkgcG9pbnRlciBleGNlcHQgUmVmUHRyLWJhc2VkIHR5cGVzLgot
ICAgIGNsYXNzIE91dHB1dFBhc3NNb2RlbDoKLSAgICAgICAgY2xhc3MgQnlQb2ludGVyOgotICAg
ICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgZGVmIGdldF9hcmd1bWVudF9wcmVm
aXgoKToKLSAgICAgICAgICAgICAgICByZXR1cm4gIiYiCi0KLSAgICAgICAgICAgIEBzdGF0aWNt
ZXRob2QKLSAgICAgICAgICAgIGRlZiBnZXRfcGFyYW1ldGVyX3R5cGVfc3VmZml4KCk6Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuICIqIgotCi0gICAgICAgIGNsYXNzIEJ5UmVmZXJlbmNlOgotICAg
ICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgZGVmIGdldF9hcmd1bWVudF9wcmVm
aXgoKToKLSAgICAgICAgICAgICAgICByZXR1cm4gIiIKLQotICAgICAgICAgICAgQHN0YXRpY21l
dGhvZAotICAgICAgICAgICAgZGVmIGdldF9wYXJhbWV0ZXJfdHlwZV9zdWZmaXgoKToKLSAgICAg
ICAgICAgICAgICByZXR1cm4gIiYiCi0KLSAgICBjbGFzcyBCYXNlVHlwZShvYmplY3QpOgotICAg
ICAgICBuZWVkX2ludGVybmFsX3J1bnRpbWVfY2FzdF8gPSBGYWxzZQotCi0gICAgICAgIEBjbGFz
c21ldGhvZAotICAgICAgICBkZWYgcmVxdWVzdF9yYXdfaW50ZXJuYWxfcnVudGltZV9jYXN0KGNs
cyk6Ci0gICAgICAgICAgICBpZiBub3QgY2xzLm5lZWRfaW50ZXJuYWxfcnVudGltZV9jYXN0XzoK
LSAgICAgICAgICAgICAgICBjbHMubmVlZF9pbnRlcm5hbF9ydW50aW1lX2Nhc3RfID0gVHJ1ZQot
Ci0gICAgICAgIEBjbGFzc21ldGhvZAotICAgICAgICBkZWYgZ2V0X3Jhd192YWxpZGF0b3JfY2Fs
bF90ZXh0KGNscyk6Ci0gICAgICAgICAgICByZXR1cm4gIlJ1bnRpbWVDYXN0SGVscGVyOjphc3Nl
cnRUeXBlPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU6OlR5cGUlcz4iICUgY2xzLmdldF92YWxp
ZGF0ZV9tZXRob2RfcGFyYW1zKCkudGVtcGxhdGVfdHlwZQotCi0gICAgY2xhc3MgU3RyaW5nKEJh
c2VUeXBlKToKLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBkZWYgZ2V0X2dldHRlcl9u
YW1lKCk6Ci0gICAgICAgICAgICByZXR1cm4gIlN0cmluZyIKLQotICAgICAgICBnZXRfc2V0dGVy
X25hbWUgPSBnZXRfZ2V0dGVyX25hbWUKLQotICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAg
IGRlZiBnZXRfY19pbml0aWFsaXplcigpOgotICAgICAgICAgICAgcmV0dXJuICJcIlwiIgotCi0g
ICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGdldF9qc19iaW5kX3R5cGUoKToKLSAg
ICAgICAgICAgIHJldHVybiAic3RyaW5nIgotCi0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAg
ICAgZGVmIGdldF92YWxpZGF0ZV9tZXRob2RfcGFyYW1zKCk6Ci0gICAgICAgICAgICBjbGFzcyBW
YWxpZGF0ZU1ldGhvZFBhcmFtczoKLSAgICAgICAgICAgICAgICB0ZW1wbGF0ZV90eXBlID0gIlN0
cmluZyIKLSAgICAgICAgICAgIHJldHVybiBWYWxpZGF0ZU1ldGhvZFBhcmFtcwotCi0gICAgICAg
IEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGdldF9vdXRwdXRfcGFzc19tb2RlbCgpOgotICAg
ICAgICAgICAgcmV0dXJuIFJhd1R5cGVzLk91dHB1dFBhc3NNb2RlbC5CeVBvaW50ZXIKLQotICAg
ICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgIGRlZiBpc19oZWF2eV92YWx1ZSgpOgotICAgICAg
ICAgICAgcmV0dXJuIFRydWUKLQotICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgIGRlZiBn
ZXRfYXJyYXlfaXRlbV9yYXdfY190eXBlX3RleHQoKToKLSAgICAgICAgICAgIHJldHVybiAiU3Ry
aW5nIgotCi0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGdldF9yYXdfdHlwZV9t
b2RlbCgpOgotICAgICAgICAgICAgcmV0dXJuIFR5cGVNb2RlbC5TdHJpbmcKLQotICAgIGNsYXNz
IEludChCYXNlVHlwZSk6Ci0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGdldF9n
ZXR0ZXJfbmFtZSgpOgotICAgICAgICAgICAgcmV0dXJuICJJbnQiCi0KLSAgICAgICAgQHN0YXRp
Y21ldGhvZAotICAgICAgICBkZWYgZ2V0X3NldHRlcl9uYW1lKCk6Ci0gICAgICAgICAgICByZXR1
cm4gIk51bWJlciIKLQotICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgIGRlZiBnZXRfY19p
bml0aWFsaXplcigpOgotICAgICAgICAgICAgcmV0dXJuICIwIgotCi0gICAgICAgIEBzdGF0aWNt
ZXRob2QKLSAgICAgICAgZGVmIGdldF9qc19iaW5kX3R5cGUoKToKLSAgICAgICAgICAgIHJldHVy
biAibnVtYmVyIgotCi0gICAgICAgIEBjbGFzc21ldGhvZAotICAgICAgICBkZWYgZ2V0X3Jhd192
YWxpZGF0b3JfY2FsbF90ZXh0KGNscyk6Ci0gICAgICAgICAgICByZXR1cm4gIlJ1bnRpbWVDYXN0
SGVscGVyOjphc3NlcnRJbnQiCi0KLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBkZWYg
Z2V0X291dHB1dF9wYXNzX21vZGVsKCk6Ci0gICAgICAgICAgICByZXR1cm4gUmF3VHlwZXMuT3V0
cHV0UGFzc01vZGVsLkJ5UG9pbnRlcgotCi0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAg
ZGVmIGlzX2hlYXZ5X3ZhbHVlKCk6Ci0gICAgICAgICAgICByZXR1cm4gRmFsc2UKLQotICAgICAg
ICBAc3RhdGljbWV0aG9kCi0gICAgICAgIGRlZiBnZXRfYXJyYXlfaXRlbV9yYXdfY190eXBlX3Rl
eHQoKToKLSAgICAgICAgICAgIHJldHVybiAiaW50IgotCi0gICAgICAgIEBzdGF0aWNtZXRob2QK
LSAgICAgICAgZGVmIGdldF9yYXdfdHlwZV9tb2RlbCgpOgotICAgICAgICAgICAgcmV0dXJuIFR5
cGVNb2RlbC5JbnQKLQotICAgIGNsYXNzIE51bWJlcihCYXNlVHlwZSk6Ci0gICAgICAgIEBzdGF0
aWNtZXRob2QKLSAgICAgICAgZGVmIGdldF9nZXR0ZXJfbmFtZSgpOgotICAgICAgICAgICAgcmV0
dXJuICJEb3VibGUiCi0KLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBkZWYgZ2V0X3Nl
dHRlcl9uYW1lKCk6Ci0gICAgICAgICAgICByZXR1cm4gIk51bWJlciIKLQotICAgICAgICBAc3Rh
dGljbWV0aG9kCi0gICAgICAgIGRlZiBnZXRfY19pbml0aWFsaXplcigpOgotICAgICAgICAgICAg
cmV0dXJuICIwIgotCi0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGdldF9qc19i
aW5kX3R5cGUoKToKLSAgICAgICAgICAgIHJldHVybiAibnVtYmVyIgotCi0gICAgICAgIEBzdGF0
aWNtZXRob2QKLSAgICAgICAgZGVmIGdldF92YWxpZGF0ZV9tZXRob2RfcGFyYW1zKCk6Ci0gICAg
ICAgICAgICBjbGFzcyBWYWxpZGF0ZU1ldGhvZFBhcmFtczoKLSAgICAgICAgICAgICAgICB0ZW1w
bGF0ZV90eXBlID0gIk51bWJlciIKLSAgICAgICAgICAgIHJldHVybiBWYWxpZGF0ZU1ldGhvZFBh
cmFtcwotCi0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGdldF9vdXRwdXRfcGFz
c19tb2RlbCgpOgotICAgICAgICAgICAgcmV0dXJuIFJhd1R5cGVzLk91dHB1dFBhc3NNb2RlbC5C
eVBvaW50ZXIKLQotICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgIGRlZiBpc19oZWF2eV92
YWx1ZSgpOgotICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0KLSAgICAgICAgQHN0YXRpY21ldGhv
ZAotICAgICAgICBkZWYgZ2V0X2FycmF5X2l0ZW1fcmF3X2NfdHlwZV90ZXh0KCk6Ci0gICAgICAg
ICAgICByZXR1cm4gImRvdWJsZSIKLQotICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgIGRl
ZiBnZXRfcmF3X3R5cGVfbW9kZWwoKToKLSAgICAgICAgICAgIHJldHVybiBUeXBlTW9kZWwuTnVt
YmVyCi0KLSAgICBjbGFzcyBCb29sKEJhc2VUeXBlKToKLSAgICAgICAgQHN0YXRpY21ldGhvZAot
ICAgICAgICBkZWYgZ2V0X2dldHRlcl9uYW1lKCk6Ci0gICAgICAgICAgICByZXR1cm4gIkJvb2xl
YW4iCi0KLSAgICAgICAgZ2V0X3NldHRlcl9uYW1lID0gZ2V0X2dldHRlcl9uYW1lCi0KLSAgICAg
ICAgQHN0YXRpY21ldGhvZAotICAgICAgICBkZWYgZ2V0X2NfaW5pdGlhbGl6ZXIoKToKLSAgICAg
ICAgICAgIHJldHVybiAiZmFsc2UiCi0KLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBk
ZWYgZ2V0X2pzX2JpbmRfdHlwZSgpOgotICAgICAgICAgICAgcmV0dXJuICJib29sZWFuIgotCi0g
ICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGdldF92YWxpZGF0ZV9tZXRob2RfcGFy
YW1zKCk6Ci0gICAgICAgICAgICBjbGFzcyBWYWxpZGF0ZU1ldGhvZFBhcmFtczoKLSAgICAgICAg
ICAgICAgICB0ZW1wbGF0ZV90eXBlID0gIkJvb2xlYW4iCi0gICAgICAgICAgICByZXR1cm4gVmFs
aWRhdGVNZXRob2RQYXJhbXMKLQotICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgIGRlZiBn
ZXRfb3V0cHV0X3Bhc3NfbW9kZWwoKToKLSAgICAgICAgICAgIHJldHVybiBSYXdUeXBlcy5PdXRw
dXRQYXNzTW9kZWwuQnlQb2ludGVyCi0KLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBk
ZWYgaXNfaGVhdnlfdmFsdWUoKToKLSAgICAgICAgICAgIHJldHVybiBGYWxzZQotCi0gICAgICAg
IEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGdldF9hcnJheV9pdGVtX3Jhd19jX3R5cGVfdGV4
dCgpOgotICAgICAgICAgICAgcmV0dXJuICJib29sIgotCi0gICAgICAgIEBzdGF0aWNtZXRob2QK
LSAgICAgICAgZGVmIGdldF9yYXdfdHlwZV9tb2RlbCgpOgotICAgICAgICAgICAgcmV0dXJuIFR5
cGVNb2RlbC5Cb29sCi0KLSAgICBjbGFzcyBPYmplY3QoQmFzZVR5cGUpOgotICAgICAgICBAc3Rh
dGljbWV0aG9kCi0gICAgICAgIGRlZiBnZXRfZ2V0dGVyX25hbWUoKToKLSAgICAgICAgICAgIHJl
dHVybiAiT2JqZWN0IgotCi0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGdldF9z
ZXR0ZXJfbmFtZSgpOgotICAgICAgICAgICAgcmV0dXJuICJWYWx1ZSIKLQotICAgICAgICBAc3Rh
dGljbWV0aG9kCi0gICAgICAgIGRlZiBnZXRfY19pbml0aWFsaXplcigpOgotICAgICAgICAgICAg
cmV0dXJuICJJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpIgotCi0gICAgICAgIEBzdGF0aWNtZXRo
b2QKLSAgICAgICAgZGVmIGdldF9qc19iaW5kX3R5cGUoKToKLSAgICAgICAgICAgIHJldHVybiAi
b2JqZWN0IgotCi0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGdldF9vdXRwdXRf
YXJndW1lbnRfcHJlZml4KCk6Ci0gICAgICAgICAgICByZXR1cm4gIiIKLQotICAgICAgICBAc3Rh
dGljbWV0aG9kCi0gICAgICAgIGRlZiBnZXRfdmFsaWRhdGVfbWV0aG9kX3BhcmFtcygpOgotICAg
ICAgICAgICAgY2xhc3MgVmFsaWRhdGVNZXRob2RQYXJhbXM6Ci0gICAgICAgICAgICAgICAgdGVt
cGxhdGVfdHlwZSA9ICJPYmplY3QiCi0gICAgICAgICAgICByZXR1cm4gVmFsaWRhdGVNZXRob2RQ
YXJhbXMKLQotICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgIGRlZiBnZXRfb3V0cHV0X3Bh
c3NfbW9kZWwoKToKLSAgICAgICAgICAgIHJldHVybiBSYXdUeXBlcy5PdXRwdXRQYXNzTW9kZWwu
QnlSZWZlcmVuY2UKLQotICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgIGRlZiBpc19oZWF2
eV92YWx1ZSgpOgotICAgICAgICAgICAgcmV0dXJuIFRydWUKLQotICAgICAgICBAc3RhdGljbWV0
aG9kCi0gICAgICAgIGRlZiBnZXRfYXJyYXlfaXRlbV9yYXdfY190eXBlX3RleHQoKToKLSAgICAg
ICAgICAgIHJldHVybiAiSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QiCi0KLSAgICAgICAgQHN0
YXRpY21ldGhvZAotICAgICAgICBkZWYgZ2V0X3Jhd190eXBlX21vZGVsKCk6Ci0gICAgICAgICAg
ICByZXR1cm4gVHlwZU1vZGVsLk9iamVjdAotCi0gICAgY2xhc3MgQW55KEJhc2VUeXBlKToKLSAg
ICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBkZWYgZ2V0X2dldHRlcl9uYW1lKCk6Ci0gICAg
ICAgICAgICByZXR1cm4gIlZhbHVlIgotCi0gICAgICAgIGdldF9zZXR0ZXJfbmFtZSA9IGdldF9n
ZXR0ZXJfbmFtZQotCi0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGdldF9jX2lu
aXRpYWxpemVyKCk6Ci0gICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIlVuc3VwcG9ydGVkIikK
LQotICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgIGRlZiBnZXRfanNfYmluZF90eXBlKCk6
Ci0gICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIlVuc3VwcG9ydGVkIikKLQotICAgICAgICBA
c3RhdGljbWV0aG9kCi0gICAgICAgIGRlZiBnZXRfcmF3X3ZhbGlkYXRvcl9jYWxsX3RleHQoKToK
LSAgICAgICAgICAgIHJldHVybiAiUnVudGltZUNhc3RIZWxwZXI6OmFzc2VydEFueSIKLQotICAg
ICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgIGRlZiBnZXRfb3V0cHV0X3Bhc3NfbW9kZWwoKToK
LSAgICAgICAgICAgIHJldHVybiBSYXdUeXBlcy5PdXRwdXRQYXNzTW9kZWwuQnlSZWZlcmVuY2UK
LQotICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgIGRlZiBpc19oZWF2eV92YWx1ZSgpOgot
ICAgICAgICAgICAgcmV0dXJuIFRydWUKLQotICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAg
IGRlZiBnZXRfYXJyYXlfaXRlbV9yYXdfY190eXBlX3RleHQoKToKLSAgICAgICAgICAgIHJldHVy
biAiSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSIKLQotICAgICAgICBAc3RhdGljbWV0aG9kCi0g
ICAgICAgIGRlZiBnZXRfcmF3X3R5cGVfbW9kZWwoKToKLSAgICAgICAgICAgIHJldHVybiBUeXBl
TW9kZWwuQW55Ci0KLSAgICBjbGFzcyBBcnJheShCYXNlVHlwZSk6Ci0gICAgICAgIEBzdGF0aWNt
ZXRob2QKLSAgICAgICAgZGVmIGdldF9nZXR0ZXJfbmFtZSgpOgotICAgICAgICAgICAgcmV0dXJu
ICJBcnJheSIKLQotICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgIGRlZiBnZXRfc2V0dGVy
X25hbWUoKToKLSAgICAgICAgICAgIHJldHVybiAiVmFsdWUiCi0KLSAgICAgICAgQHN0YXRpY21l
dGhvZAotICAgICAgICBkZWYgZ2V0X2NfaW5pdGlhbGl6ZXIoKToKLSAgICAgICAgICAgIHJldHVy
biAiSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpIgotCi0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAg
ICAgICAgZGVmIGdldF9qc19iaW5kX3R5cGUoKToKLSAgICAgICAgICAgIHJldHVybiAib2JqZWN0
IgotCi0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGdldF9vdXRwdXRfYXJndW1l
bnRfcHJlZml4KCk6Ci0gICAgICAgICAgICByZXR1cm4gIiIKLQotICAgICAgICBAc3RhdGljbWV0
aG9kCi0gICAgICAgIGRlZiBnZXRfdmFsaWRhdGVfbWV0aG9kX3BhcmFtcygpOgotICAgICAgICAg
ICAgY2xhc3MgVmFsaWRhdGVNZXRob2RQYXJhbXM6Ci0gICAgICAgICAgICAgICAgdGVtcGxhdGVf
dHlwZSA9ICJBcnJheSIKLSAgICAgICAgICAgIHJldHVybiBWYWxpZGF0ZU1ldGhvZFBhcmFtcwot
Ci0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGdldF9vdXRwdXRfcGFzc19tb2Rl
bCgpOgotICAgICAgICAgICAgcmV0dXJuIFJhd1R5cGVzLk91dHB1dFBhc3NNb2RlbC5CeVJlZmVy
ZW5jZQotCi0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGlzX2hlYXZ5X3ZhbHVl
KCk6Ci0gICAgICAgICAgICByZXR1cm4gVHJ1ZQotCi0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAg
ICAgICAgZGVmIGdldF9hcnJheV9pdGVtX3Jhd19jX3R5cGVfdGV4dCgpOgotICAgICAgICAgICAg
cmV0dXJuICJJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5IgotCi0gICAgICAgIEBzdGF0aWNtZXRo
b2QKLSAgICAgICAgZGVmIGdldF9yYXdfdHlwZV9tb2RlbCgpOgotICAgICAgICAgICAgcmV0dXJu
IFR5cGVNb2RlbC5BcnJheQotCi0KLWRlZiByZXBsYWNlX3JpZ2h0X3NoaWZ0KGlucHV0X3N0cik6
Ci0gICAgcmV0dXJuIGlucHV0X3N0ci5yZXBsYWNlKCI+PiIsICI+ID4iKQotCi0KLWNsYXNzIENv
bW1hbmRSZXR1cm5QYXNzTW9kZWw6Ci0gICAgY2xhc3MgQnlSZWZlcmVuY2U6Ci0gICAgICAgIGRl
ZiBfX2luaXRfXyhzZWxmLCB2YXJfdHlwZSwgc2V0X2NvbmRpdGlvbik6Ci0gICAgICAgICAgICBz
ZWxmLnZhcl90eXBlID0gdmFyX3R5cGUKLSAgICAgICAgICAgIHNlbGYuc2V0X2NvbmRpdGlvbiA9
IHNldF9jb25kaXRpb24KLQotICAgICAgICBkZWYgZ2V0X3JldHVybl92YXJfdHlwZShzZWxmKToK
LSAgICAgICAgICAgIHJldHVybiBzZWxmLnZhcl90eXBlCi0KLSAgICAgICAgQHN0YXRpY21ldGhv
ZAotICAgICAgICBkZWYgZ2V0X291dHB1dF9hcmd1bWVudF9wcmVmaXgoKToKLSAgICAgICAgICAg
IHJldHVybiAiIgotCi0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGdldF9vdXRw
dXRfdG9fcmF3X2V4cHJlc3Npb24oKToKLSAgICAgICAgICAgIHJldHVybiAiJXMiCi0KLSAgICAg
ICAgZGVmIGdldF9vdXRwdXRfcGFyYW1ldGVyX3R5cGUoc2VsZik6Ci0gICAgICAgICAgICByZXR1
cm4gc2VsZi52YXJfdHlwZSArICImIgotCi0gICAgICAgIGRlZiBnZXRfc2V0X3JldHVybl9jb25k
aXRpb24oc2VsZik6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5zZXRfY29uZGl0aW9uCi0KLSAg
ICBjbGFzcyBCeVBvaW50ZXI6Ci0gICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2YXJfdHlwZSk6
Ci0gICAgICAgICAgICBzZWxmLnZhcl90eXBlID0gdmFyX3R5cGUKLQotICAgICAgICBkZWYgZ2V0
X3JldHVybl92YXJfdHlwZShzZWxmKToKLSAgICAgICAgICAgIHJldHVybiBzZWxmLnZhcl90eXBl
Ci0KLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBkZWYgZ2V0X291dHB1dF9hcmd1bWVu
dF9wcmVmaXgoKToKLSAgICAgICAgICAgIHJldHVybiAiJiIKLQotICAgICAgICBAc3RhdGljbWV0
aG9kCi0gICAgICAgIGRlZiBnZXRfb3V0cHV0X3RvX3Jhd19leHByZXNzaW9uKCk6Ci0gICAgICAg
ICAgICByZXR1cm4gIiVzIgotCi0gICAgICAgIGRlZiBnZXRfb3V0cHV0X3BhcmFtZXRlcl90eXBl
KHNlbGYpOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYudmFyX3R5cGUgKyAiKiIKLQotICAgICAg
ICBAc3RhdGljbWV0aG9kCi0gICAgICAgIGRlZiBnZXRfc2V0X3JldHVybl9jb25kaXRpb24oKToK
LSAgICAgICAgICAgIHJldHVybiBOb25lCi0KLSAgICBjbGFzcyBPcHRPdXRwdXQ6Ci0gICAgICAg
IGRlZiBfX2luaXRfXyhzZWxmLCB2YXJfdHlwZSk6Ci0gICAgICAgICAgICBzZWxmLnZhcl90eXBl
ID0gdmFyX3R5cGUKLQotICAgICAgICBkZWYgZ2V0X3JldHVybl92YXJfdHlwZShzZWxmKToKLSAg
ICAgICAgICAgIHJldHVybiAiSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6T3B0T3V0cHV0PCVzPiIg
JSBzZWxmLnZhcl90eXBlCi0KLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBkZWYgZ2V0
X291dHB1dF9hcmd1bWVudF9wcmVmaXgoKToKLSAgICAgICAgICAgIHJldHVybiAiJiIKLQotICAg
ICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgIGRlZiBnZXRfb3V0cHV0X3RvX3Jhd19leHByZXNz
aW9uKCk6Ci0gICAgICAgICAgICByZXR1cm4gIiVzLmdldFZhbHVlKCkiCi0KLSAgICAgICAgZGVm
IGdldF9vdXRwdXRfcGFyYW1ldGVyX3R5cGUoc2VsZik6Ci0gICAgICAgICAgICByZXR1cm4gIklu
c3BlY3Rvcjo6VHlwZUJ1aWxkZXI6Ok9wdE91dHB1dDwlcz4qIiAlIHNlbGYudmFyX3R5cGUKLQot
ICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgIGRlZiBnZXRfc2V0X3JldHVybl9jb25kaXRp
b24oKToKLSAgICAgICAgICAgIHJldHVybiAiJXMuaXNBc3NpZ25lZCgpIgotCi0KLWNsYXNzIFR5
cGVNb2RlbDoKLSAgICBjbGFzcyBSZWZQdHJCYXNlZChvYmplY3QpOgotICAgICAgICBkZWYgX19p
bml0X18oc2VsZiwgY2xhc3NfbmFtZSk6Ci0gICAgICAgICAgICBzZWxmLmNsYXNzX25hbWUgPSBj
bGFzc19uYW1lCi0gICAgICAgICAgICBzZWxmLm9wdGlvbmFsID0gRmFsc2UKLQotICAgICAgICBk
ZWYgZ2V0X29wdGlvbmFsKHNlbGYpOgotICAgICAgICAgICAgcmVzdWx0ID0gVHlwZU1vZGVsLlJl
ZlB0ckJhc2VkKHNlbGYuY2xhc3NfbmFtZSkKLSAgICAgICAgICAgIHJlc3VsdC5vcHRpb25hbCA9
IFRydWUKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQKLQotICAgICAgICBkZWYgZ2V0X2NvbW1h
bmRfcmV0dXJuX3Bhc3NfbW9kZWwoc2VsZik6Ci0gICAgICAgICAgICBpZiBzZWxmLm9wdGlvbmFs
OgotICAgICAgICAgICAgICAgIHNldF9jb25kaXRpb24gPSAiJXMiCi0gICAgICAgICAgICBlbHNl
OgotICAgICAgICAgICAgICAgIHNldF9jb25kaXRpb24gPSBOb25lCi0gICAgICAgICAgICByZXR1
cm4gQ29tbWFuZFJldHVyblBhc3NNb2RlbC5CeVJlZmVyZW5jZShyZXBsYWNlX3JpZ2h0X3NoaWZ0
KCJSZWZQdHI8JXM+IiAlIHNlbGYuY2xhc3NfbmFtZSksIHNldF9jb25kaXRpb24pCi0KLSAgICAg
ICAgZGVmIGdldF9pbnB1dF9wYXJhbV90eXBlX3RleHQoc2VsZik6Ci0gICAgICAgICAgICByZXR1
cm4gcmVwbGFjZV9yaWdodF9zaGlmdCgiUGFzc1JlZlB0cjwlcz4iICUgc2VsZi5jbGFzc19uYW1l
KQotCi0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGdldF9ldmVudF9zZXR0ZXJf
ZXhwcmVzc2lvbl9wYXR0ZXJuKCk6Ci0gICAgICAgICAgICByZXR1cm4gIiVzIgotCi0gICAgY2xh
c3MgRW51bShvYmplY3QpOgotICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgYmFzZV90eXBlX25h
bWUpOgotICAgICAgICAgICAgc2VsZi50eXBlX25hbWUgPSBiYXNlX3R5cGVfbmFtZSArICI6OkVu
dW0iCi0KLSAgICAgICAgZGVmIGdldF9vcHRpb25hbChiYXNlX3NlbGYpOgotICAgICAgICAgICAg
Y2xhc3MgRW51bU9wdGlvbmFsOgotICAgICAgICAgICAgICAgIEBjbGFzc21ldGhvZAotICAgICAg
ICAgICAgICAgIGRlZiBnZXRfb3B0aW9uYWwoY2xzKToKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGNscwotCi0gICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgICAg
IGRlZiBnZXRfY29tbWFuZF9yZXR1cm5fcGFzc19tb2RlbCgpOgotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gQ29tbWFuZFJldHVyblBhc3NNb2RlbC5PcHRPdXRwdXQoYmFzZV9zZWxmLnR5cGVf
bmFtZSkKLQotICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgICAgICBk
ZWYgZ2V0X2lucHV0X3BhcmFtX3R5cGVfdGV4dCgpOgotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gYmFzZV9zZWxmLnR5cGVfbmFtZSArICIqIgotCi0gICAgICAgICAgICAgICAgQHN0YXRpY21l
dGhvZAotICAgICAgICAgICAgICAgIGRlZiBnZXRfZXZlbnRfc2V0dGVyX2V4cHJlc3Npb25fcGF0
dGVybigpOgotICAgICAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIlRPRE8iKQotICAg
ICAgICAgICAgcmV0dXJuIEVudW1PcHRpb25hbAotCi0gICAgICAgIGRlZiBnZXRfY29tbWFuZF9y
ZXR1cm5fcGFzc19tb2RlbChzZWxmKToKLSAgICAgICAgICAgIHJldHVybiBDb21tYW5kUmV0dXJu
UGFzc01vZGVsLkJ5UG9pbnRlcihzZWxmLnR5cGVfbmFtZSkKLQotICAgICAgICBkZWYgZ2V0X2lu
cHV0X3BhcmFtX3R5cGVfdGV4dChzZWxmKToKLSAgICAgICAgICAgIHJldHVybiBzZWxmLnR5cGVf
bmFtZQotCi0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGdldF9ldmVudF9zZXR0
ZXJfZXhwcmVzc2lvbl9wYXR0ZXJuKCk6Ci0gICAgICAgICAgICByZXR1cm4gIiVzIgotCi0gICAg
Y2xhc3MgVmFsdWVUeXBlKG9iamVjdCk6Ci0gICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0eXBl
X25hbWUsIGlzX2hlYXZ5KToKLSAgICAgICAgICAgIHNlbGYudHlwZV9uYW1lID0gdHlwZV9uYW1l
Ci0gICAgICAgICAgICBzZWxmLmlzX2hlYXZ5ID0gaXNfaGVhdnkKLQotICAgICAgICBkZWYgZ2V0
X29wdGlvbmFsKHNlbGYpOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuVmFsdWVPcHRpb25hbChz
ZWxmKQotCi0gICAgICAgIGRlZiBnZXRfY29tbWFuZF9yZXR1cm5fcGFzc19tb2RlbChzZWxmKToK
LSAgICAgICAgICAgIHJldHVybiBDb21tYW5kUmV0dXJuUGFzc01vZGVsLkJ5UG9pbnRlcihzZWxm
LnR5cGVfbmFtZSkKLQotICAgICAgICBkZWYgZ2V0X2lucHV0X3BhcmFtX3R5cGVfdGV4dChzZWxm
KToKLSAgICAgICAgICAgIGlmIHNlbGYuaXNfaGVhdnk6Ci0gICAgICAgICAgICAgICAgcmV0dXJu
ICJjb25zdCAlcyYiICUgc2VsZi50eXBlX25hbWUKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIHNlbGYudHlwZV9uYW1lCi0KLSAgICAgICAgZGVmIGdldF9vcHRfb3V0
cHV0X3R5cGVfKHNlbGYpOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYudHlwZV9uYW1lCi0KLSAg
ICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBkZWYgZ2V0X2V2ZW50X3NldHRlcl9leHByZXNz
aW9uX3BhdHRlcm4oKToKLSAgICAgICAgICAgIHJldHVybiAiJXMiCi0KLSAgICAgICAgY2xhc3Mg
VmFsdWVPcHRpb25hbDoKLSAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBiYXNlKToKLSAg
ICAgICAgICAgICAgICBzZWxmLmJhc2UgPSBiYXNlCi0KLSAgICAgICAgICAgIGRlZiBnZXRfb3B0
aW9uYWwoc2VsZik6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYKLQotICAgICAgICAgICAg
ZGVmIGdldF9jb21tYW5kX3JldHVybl9wYXNzX21vZGVsKHNlbGYpOgotICAgICAgICAgICAgICAg
IHJldHVybiBDb21tYW5kUmV0dXJuUGFzc01vZGVsLk9wdE91dHB1dChzZWxmLmJhc2UuZ2V0X29w
dF9vdXRwdXRfdHlwZV8oKSkKLQotICAgICAgICAgICAgZGVmIGdldF9pbnB1dF9wYXJhbV90eXBl
X3RleHQoc2VsZik6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJjb25zdCAlcyogY29uc3QiICUg
c2VsZi5iYXNlLnR5cGVfbmFtZQotCi0gICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAg
ICAgICBkZWYgZ2V0X2V2ZW50X3NldHRlcl9leHByZXNzaW9uX3BhdHRlcm4oKToKLSAgICAgICAg
ICAgICAgICByZXR1cm4gIiolcyIKLQotICAgIGNsYXNzIEV4YWN0bHlJbnQoVmFsdWVUeXBlKToK
LSAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgotICAgICAgICAgICAgVHlwZU1vZGVsLlZhbHVl
VHlwZS5fX2luaXRfXyhzZWxmLCAiaW50IiwgRmFsc2UpCi0KLSAgICAgICAgZGVmIGdldF9pbnB1
dF9wYXJhbV90eXBlX3RleHQoc2VsZik6Ci0gICAgICAgICAgICByZXR1cm4gIkluc3BlY3Rvcjo6
VHlwZUJ1aWxkZXI6OkV4YWN0bHlJbnQiCi0KLSAgICAgICAgZGVmIGdldF9vcHRfb3V0cHV0X3R5
cGVfKHNlbGYpOgotICAgICAgICAgICAgcmV0dXJuICJJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpF
eGFjdGx5SW50IgotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIGluaXRfY2xhc3MoY2xzKToK
LSAgICAgICAgY2xzLkJvb2wgPSBjbHMuVmFsdWVUeXBlKCJib29sIiwgRmFsc2UpCi0gICAgICAg
IGlmIEVYQUNUTFlfSU5UX1NVUFBPUlRFRDoKLSAgICAgICAgICAgIGNscy5JbnQgPSBjbHMuRXhh
Y3RseUludCgpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBjbHMuSW50ID0gY2xzLlZhbHVl
VHlwZSgiaW50IiwgRmFsc2UpCi0gICAgICAgIGNscy5OdW1iZXIgPSBjbHMuVmFsdWVUeXBlKCJk
b3VibGUiLCBGYWxzZSkKLSAgICAgICAgY2xzLlN0cmluZyA9IGNscy5WYWx1ZVR5cGUoIlN0cmlu
ZyIsIFRydWUsKQotICAgICAgICBjbHMuT2JqZWN0ID0gY2xzLlJlZlB0ckJhc2VkKCJJbnNwZWN0
b3I6Okluc3BlY3Rvck9iamVjdCIpCi0gICAgICAgIGNscy5BcnJheSA9IGNscy5SZWZQdHJCYXNl
ZCgiSW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheSIpCi0gICAgICAgIGNscy5BbnkgPSBjbHMuUmVm
UHRyQmFzZWQoIkluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUiKQotCi1UeXBlTW9kZWwuaW5pdF9j
bGFzcygpCi0KLQotIyBDb2xsZWN0aW9uIG9mIEluc3BlY3Rvck9iamVjdCBjbGFzcyBtZXRob2Rz
IHRoYXQgYXJlIGxpa2VseSB0byBiZSBvdmVybG9hZGVkIGluIGdlbmVyYXRlZCBjbGFzcy4KLSMg
V2UgbXVzdCBleHBsaWNpdGx5IGltcG9ydCBhbGwgb3ZlcmxvYWRlZCBtZXRob2RzIG9yIHRoZXkg
d29uJ3QgYmUgYXZhaWxhYmxlIHRvIHVzZXIuCi1JTlNQRUNUT1JfT0JKRUNUX1NFVFRFUl9OQU1F
UyA9IGZyb3plbnNldChbInNldFZhbHVlIiwgInNldEJvb2xlYW4iLCAic2V0TnVtYmVyIiwgInNl
dFN0cmluZyIsICJzZXRWYWx1ZSIsICJzZXRPYmplY3QiLCAic2V0QXJyYXkiXSkKLQotCi1kZWYg
Zml4X3R5cGVfbmFtZShqc29uX25hbWUpOgotICAgIGlmIGpzb25fbmFtZSBpbiBUWVBFX05BTUVf
RklYX01BUDoKLSAgICAgICAgZml4ZWQgPSBUWVBFX05BTUVfRklYX01BUFtqc29uX25hbWVdCi0K
LSAgICAgICAgY2xhc3MgUmVzdWx0KG9iamVjdCk6Ci0gICAgICAgICAgICBjbGFzc19uYW1lID0g
Zml4ZWQKLQotICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgZGVmIG91dHB1
dF9jb21tZW50KHdyaXRlcik6Ci0gICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIi8vIFR5
cGUgb3JpZ2luYWxseSB3YXMgbmFtZWQgJyVzJy5cbiIgJSBqc29uX25hbWUpCi0gICAgZWxzZToK
LQotICAgICAgICBjbGFzcyBSZXN1bHQob2JqZWN0KToKLSAgICAgICAgICAgIGNsYXNzX25hbWUg
PSBqc29uX25hbWUKLQotICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgZGVm
IG91dHB1dF9jb21tZW50KHdyaXRlcik6Ci0gICAgICAgICAgICAgICAgcGFzcwotCi0gICAgcmV0
dXJuIFJlc3VsdAotCi0KLWNsYXNzIFdyaXRlcjoKLSAgICBkZWYgX19pbml0X18oc2VsZiwgb3V0
cHV0LCBpbmRlbnQpOgotICAgICAgICBzZWxmLm91dHB1dCA9IG91dHB1dAotICAgICAgICBzZWxm
LmluZGVudCA9IGluZGVudAotCi0gICAgZGVmIG5ld2xpbmUoc2VsZiwgc3RyKToKLSAgICAgICAg
aWYgKHNlbGYuaW5kZW50KToKLSAgICAgICAgICAgIHNlbGYub3V0cHV0LmFwcGVuZChzZWxmLmlu
ZGVudCkKLSAgICAgICAgc2VsZi5vdXRwdXQuYXBwZW5kKHN0cikKLQotICAgIGRlZiBhcHBlbmQo
c2VsZiwgc3RyKToKLSAgICAgICAgc2VsZi5vdXRwdXQuYXBwZW5kKHN0cikKLQotICAgIGRlZiBu
ZXdsaW5lX211bHRpbGluZShzZWxmLCBzdHIpOgotICAgICAgICBwYXJ0cyA9IHN0ci5zcGxpdCgn
XG4nKQotICAgICAgICBzZWxmLm5ld2xpbmUocGFydHNbMF0pCi0gICAgICAgIGZvciBwIGluIHBh
cnRzWzE6XToKLSAgICAgICAgICAgIHNlbGYub3V0cHV0LmFwcGVuZCgnXG4nKQotICAgICAgICAg
ICAgaWYgcDoKLSAgICAgICAgICAgICAgICBzZWxmLm5ld2xpbmUocCkKLQotICAgIGRlZiBhcHBl
bmRfbXVsdGlsaW5lKHNlbGYsIHN0cik6Ci0gICAgICAgIHBhcnRzID0gc3RyLnNwbGl0KCdcbicp
Ci0gICAgICAgIHNlbGYuYXBwZW5kKHBhcnRzWzBdKQotICAgICAgICBmb3IgcCBpbiBwYXJ0c1sx
Ol06Ci0gICAgICAgICAgICBzZWxmLm91dHB1dC5hcHBlbmQoJ1xuJykKLSAgICAgICAgICAgIGlm
IHA6Ci0gICAgICAgICAgICAgICAgc2VsZi5uZXdsaW5lKHApCi0KLSAgICBkZWYgZ2V0X2luZGVu
dChzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuaW5kZW50Ci0KLSAgICBkZWYgZ2V0X2luZGVu
dGVkKHNlbGYsIGFkZGl0aW9uYWxfaW5kZW50KToKLSAgICAgICAgcmV0dXJuIFdyaXRlcihzZWxm
Lm91dHB1dCwgc2VsZi5pbmRlbnQgKyBhZGRpdGlvbmFsX2luZGVudCkKLQotICAgIGRlZiBpbnNl
cnRfd3JpdGVyKHNlbGYsIGFkZGl0aW9uYWxfaW5kZW50KToKLSAgICAgICAgbmV3X291dHB1dCA9
IFtdCi0gICAgICAgIHNlbGYub3V0cHV0LmFwcGVuZChuZXdfb3V0cHV0KQotICAgICAgICByZXR1
cm4gV3JpdGVyKG5ld19vdXRwdXQsIHNlbGYuaW5kZW50ICsgYWRkaXRpb25hbF9pbmRlbnQpCi0K
LQotY2xhc3MgRW51bUNvbnN0YW50czoKLSAgICBtYXBfID0ge30KLSAgICBjb25zdGFudHNfID0g
W10KLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBhZGRfY29uc3RhbnQoY2xzLCB2YWx1ZSk6
Ci0gICAgICAgIGlmIHZhbHVlIGluIGNscy5tYXBfOgotICAgICAgICAgICAgcmV0dXJuIGNscy5t
YXBfW3ZhbHVlXQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcG9zID0gbGVuKGNscy5tYXBf
KQotICAgICAgICAgICAgY2xzLm1hcF9bdmFsdWVdID0gcG9zCi0gICAgICAgICAgICBjbHMuY29u
c3RhbnRzXy5hcHBlbmQodmFsdWUpCi0gICAgICAgICAgICByZXR1cm4gcG9zCi0KLSAgICBAY2xh
c3NtZXRob2QKLSAgICBkZWYgZ2V0X2VudW1fY29uc3RhbnRfY29kZShjbHMpOgotICAgICAgICBv
dXRwdXQgPSBbXQotICAgICAgICBmb3IgaXRlbSBpbiBjbHMuY29uc3RhbnRzXzoKLSAgICAgICAg
ICAgIG91dHB1dC5hcHBlbmQoIiAgICBcIiIgKyBpdGVtICsgIlwiIikKLSAgICAgICAgcmV0dXJu
ICIsXG4iLmpvaW4ob3V0cHV0KSArICJcbiIKLQotCi0jIFR5cGVidWlsZGVyIGNvZGUgaXMgZ2Vu
ZXJhdGVkIGluIHNldmVyYWwgcGFzc2VzOiBmaXJzdCB0eXBlZGVmcywgdGhlbiBvdGhlciBjbGFz
c2VzLgotIyBNYW51YWwgcGFzcyBtYW5hZ2VtZW50IGlzIG5lZWRlZCBiZWNhdXNlIHdlIGNhbm5v
dCBoYXZlIGZvcndhcmQgZGVjbGFyYXRpb25zIGZvciB0eXBlZGVmcy4KLWNsYXNzIFR5cGVCdWls
ZGVyUGFzczoKLSAgICBUWVBFREVGID0gInR5cGVkZWYiCi0gICAgTUFJTiA9ICJtYWluIgotCi0K
LWNsYXNzIFR5cGVCaW5kaW5nczoKLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIGNyZWF0ZV9u
YW1lZF90eXBlX2RlY2xhcmF0aW9uKGpzb25fdHlwYWJsZSwgY29udGV4dF9kb21haW5fbmFtZSwg
dHlwZV9kYXRhKToKLSAgICAgICAganNvbl90eXBlID0gdHlwZV9kYXRhLmdldF9qc29uX3R5cGUo
KQotCi0gICAgICAgIGNsYXNzIEhlbHBlcjoKLSAgICAgICAgICAgIGlzX2FkX2hvYyA9IEZhbHNl
Ci0gICAgICAgICAgICBmdWxsX25hbWVfcHJlZml4X2Zvcl91c2UgPSAiSW5zcGVjdG9yOjpUeXBl
QnVpbGRlcjo6IiArIGNvbnRleHRfZG9tYWluX25hbWUgKyAiOjoiCi0gICAgICAgICAgICBmdWxs
X25hbWVfcHJlZml4X2Zvcl9pbXBsID0gIkluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OiIgKyBjb250
ZXh0X2RvbWFpbl9uYW1lICsgIjo6IgotCi0gICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAg
ICAgICAgICBkZWYgd3JpdGVfZG9jKHdyaXRlcik6Ci0gICAgICAgICAgICAgICAgaWYgImRlc2Ny
aXB0aW9uIiBpbiBqc29uX3R5cGU6Ci0gICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5l
KCIvKiAiKQotICAgICAgICAgICAgICAgICAgICB3cml0ZXIuYXBwZW5kKGpzb25fdHlwZVsiZGVz
Y3JpcHRpb24iXSkKLSAgICAgICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVuZCgiICovXG4iKQot
Ci0gICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICBkZWYgYWRkX3RvX2Zvcndh
cmRfbGlzdGVuZXIoZm9yd2FyZF9saXN0ZW5lcik6Ci0gICAgICAgICAgICAgICAgZm9yd2FyZF9s
aXN0ZW5lci5hZGRfdHlwZV9kYXRhKHR5cGVfZGF0YSkKLQotCi0gICAgICAgIGZpeGVkX3R5cGVf
bmFtZSA9IGZpeF90eXBlX25hbWUoanNvbl90eXBlWyJpZCJdKQotICAgICAgICByZXR1cm4gVHlw
ZUJpbmRpbmdzLmNyZWF0ZV90eXBlX2RlY2xhcmF0aW9uXyhqc29uX3R5cGFibGUsIGNvbnRleHRf
ZG9tYWluX25hbWUsIGZpeGVkX3R5cGVfbmFtZSwgSGVscGVyKQotCi0gICAgQHN0YXRpY21ldGhv
ZAotICAgIGRlZiBjcmVhdGVfYWRfaG9jX3R5cGVfZGVjbGFyYXRpb24oanNvbl90eXBhYmxlLCBj
b250ZXh0X2RvbWFpbl9uYW1lLCBhZF9ob2NfdHlwZV9jb250ZXh0KToKLSAgICAgICAgY2xhc3Mg
SGVscGVyOgotICAgICAgICAgICAgaXNfYWRfaG9jID0gVHJ1ZQotICAgICAgICAgICAgZnVsbF9u
YW1lX3ByZWZpeF9mb3JfdXNlID0gYWRfaG9jX3R5cGVfY29udGV4dC5jb250YWluZXJfcmVsYXRp
dmVfbmFtZV9wcmVmaXgKLSAgICAgICAgICAgIGZ1bGxfbmFtZV9wcmVmaXhfZm9yX2ltcGwgPSBh
ZF9ob2NfdHlwZV9jb250ZXh0LmNvbnRhaW5lcl9mdWxsX25hbWVfcHJlZml4Ci0KLSAgICAgICAg
ICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgIGRlZiB3cml0ZV9kb2Mod3JpdGVyKToKLSAg
ICAgICAgICAgICAgICBwYXNzCi0KLSAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAg
ICAgIGRlZiBhZGRfdG9fZm9yd2FyZF9saXN0ZW5lcihmb3J3YXJkX2xpc3RlbmVyKToKLSAgICAg
ICAgICAgICAgICBwYXNzCi0gICAgICAgIGZpeGVkX3R5cGVfbmFtZSA9IGFkX2hvY190eXBlX2Nv
bnRleHQuZ2V0X3R5cGVfbmFtZV9maXgoKQotICAgICAgICByZXR1cm4gVHlwZUJpbmRpbmdzLmNy
ZWF0ZV90eXBlX2RlY2xhcmF0aW9uXyhqc29uX3R5cGFibGUsIGNvbnRleHRfZG9tYWluX25hbWUs
IGZpeGVkX3R5cGVfbmFtZSwgSGVscGVyKQotCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBj
cmVhdGVfdHlwZV9kZWNsYXJhdGlvbl8oanNvbl90eXBhYmxlLCBjb250ZXh0X2RvbWFpbl9uYW1l
LCBmaXhlZF90eXBlX25hbWUsIGhlbHBlcik6Ci0gICAgICAgIGlmIGpzb25fdHlwYWJsZVsidHlw
ZSJdID09ICJzdHJpbmciOgotICAgICAgICAgICAgaWYgImVudW0iIGluIGpzb25fdHlwYWJsZToK
LQotICAgICAgICAgICAgICAgIGNsYXNzIEVudW1CaW5kaW5nOgotICAgICAgICAgICAgICAgICAg
ICBuZWVkX3VzZXJfcnVudGltZV9jYXN0XyA9IEZhbHNlCi0gICAgICAgICAgICAgICAgICAgIG5l
ZWRfaW50ZXJuYWxfcnVudGltZV9jYXN0XyA9IEZhbHNlCi0KLSAgICAgICAgICAgICAgICAgICAg
QGNsYXNzbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgIGRlZiByZXNvbHZlX2lubmVyKGNscywg
cmVzb2x2ZV9jb250ZXh0KToKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKLQotICAgICAg
ICAgICAgICAgICAgICBAY2xhc3NtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgZGVmIHJlcXVl
c3RfdXNlcl9ydW50aW1lX2Nhc3QoY2xzLCByZXF1ZXN0KToKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIHJlcXVlc3Q6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xzLm5lZWRfdXNl
cl9ydW50aW1lX2Nhc3RfID0gVHJ1ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVl
c3QuYWNrbm93bGVkZ2UoKQotCi0gICAgICAgICAgICAgICAgICAgIEBjbGFzc21ldGhvZAotICAg
ICAgICAgICAgICAgICAgICBkZWYgcmVxdWVzdF9pbnRlcm5hbF9ydW50aW1lX2Nhc3QoY2xzKToK
LSAgICAgICAgICAgICAgICAgICAgICAgIGNscy5uZWVkX2ludGVybmFsX3J1bnRpbWVfY2FzdF8g
PSBUcnVlCi0KLSAgICAgICAgICAgICAgICAgICAgQGNsYXNzbWV0aG9kCi0gICAgICAgICAgICAg
ICAgICAgIGRlZiBnZXRfY29kZV9nZW5lcmF0b3IoZW51bV9iaW5kaW5nX2Nscyk6Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAjRklYTUU6IGdlbmVyYXRlIGFkLWhvYyBlbnVtcyB0b28gb25jZSB3
ZSBmaWd1cmUgb3V0IGhvdyB0byBiZXR0ZXIgaW1wbGVtZW50IHRoZW0gaW4gQysrLgotICAgICAg
ICAgICAgICAgICAgICAgICAgY29tbWVudF9vdXQgPSBoZWxwZXIuaXNfYWRfaG9jCi0KLSAgICAg
ICAgICAgICAgICAgICAgICAgIGNsYXNzIENvZGVHZW5lcmF0b3I6Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRl
ZiBnZW5lcmF0ZV90eXBlX2J1aWxkZXIod3JpdGVyLCBnZW5lcmF0ZV9jb250ZXh0KToKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSA9IGpzb25fdHlwYWJsZVsiZW51bSJdCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHBlci53cml0ZV9kb2Mod3JpdGVyKQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtX25hbWUgPSBmaXhlZF90eXBlX25h
bWUuY2xhc3NfbmFtZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXhlZF90eXBl
X25hbWUub3V0cHV0X2NvbW1lbnQod3JpdGVyKQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB3cml0ZXIubmV3bGluZSgic3RydWN0ICIpCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHdyaXRlci5hcHBlbmQoZW51bV9uYW1lKQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB3cml0ZXIuYXBwZW5kKCIge1xuIikKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgd3JpdGVyLm5ld2xpbmUoIiAgICBlbnVtIEVudW0ge1xuIikKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZm9yIGVudW1faXRlbSBpbiBlbnVtOgotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZW51bV9wb3MgPSBFbnVtQ29uc3RhbnRzLmFkZF9jb25zdGFu
dChlbnVtX2l0ZW0pCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1f
Y19uYW1lID0gZml4X2NhbWVsX2Nhc2UoZW51bV9pdGVtKQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgaXRlbV9jX25hbWUgaW4gVFlQRV9OQU1FX0ZJWF9NQVA6Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbV9jX25hbWUgPSBUWVBFX05B
TUVfRklYX01BUFtpdGVtX2NfbmFtZV0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHdyaXRlci5uZXdsaW5lKCIgICAgICAgICIpCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB3cml0ZXIuYXBwZW5kKGl0ZW1fY19uYW1lKQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVuZCgiID0gIikKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHdyaXRlci5hcHBlbmQoIiVzIiAlIGVudW1fcG9zKQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVuZCgiLFxuIikKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIiAgICB9O1xuIikKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgZW51bV9iaW5kaW5nX2Nscy5uZWVkX3Vz
ZXJfcnVudGltZV9jYXN0XzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJh
aXNlIEV4Y2VwdGlvbigiTm90IHlldCBpbXBsZW1lbnRlZCIpCi0KLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgZW51bV9iaW5kaW5nX2Nscy5uZWVkX2ludGVybmFsX3J1bnRpbWVf
Y2FzdF86Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuYXBwZW5k
KCIjaWYgJXNcbiIgJSBWQUxJREFUT1JfSUZERUZfTkFNRSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCIgICAgc3RhdGljIHZvaWQgYXNzZXJ0Q29y
cmVjdFZhbHVlKEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUqIHZhbHVlKTtcbiIpCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuYXBwZW5kKCIjZW5kaWYgIC8vICVz
XG4iICUgVkFMSURBVE9SX0lGREVGX05BTUUpCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIgPSBnZW5lcmF0ZV9jb250ZXh0LnZhbGlkYXRvcl93
cml0ZXIKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9tYWluX2ZpeGVz
ID0gRG9tYWluTmFtZUZpeGVzLmdldF9maXhlZF9kYXRhKGNvbnRleHRfZG9tYWluX25hbWUpCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb21haW5fZ3VhcmQgPSBkb21haW5f
Zml4ZXMuZ2V0X2d1YXJkKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
IGRvbWFpbl9ndWFyZDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
b21haW5fZ3VhcmQuZ2VuZXJhdGVfb3Blbih2YWxpZGF0b3Jfd3JpdGVyKQotCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoInZvaWQg
JXMlczo6YXNzZXJ0Q29ycmVjdFZhbHVlKEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUqIHZhbHVl
KVxuIiAlIChoZWxwZXIuZnVsbF9uYW1lX3ByZWZpeF9mb3JfaW1wbCwgZW51bV9uYW1lKSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGlu
ZSgie1xuIikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93
cml0ZXIubmV3bGluZSgiICAgIFdURjo6U3RyaW5nIHM7XG4iKQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCIgICAgYm9vbCBjYXN0
X3JlcyA9IHZhbHVlLT5hc1N0cmluZygmcyk7XG4iKQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCIgICAgQVNTRVJUKGNhc3RfcmVz
KTtcbiIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBsZW4oZW51bSkg
PiAwOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvbl9s
aXN0ID0gW10KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgZW51
bV9pdGVtIGluIGVudW06Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGVudW1fcG9zID0gRW51bUNvbnN0YW50cy5hZGRfY29uc3RhbnQoZW51bV9pdGVtKQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25kaXRpb25fbGlzdC5h
cHBlbmQoInMgPT0gXCIlc1wiIiAlIGVudW1faXRlbSkKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIiAgICBBU1NFUlQoJXMp
O1xuIiAlICIgfHwgIi5qb2luKGNvbmRpdGlvbl9saXN0KSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgifVxuIikKLQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgZG9tYWluX2d1YXJkOgotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbWFpbl9ndWFyZC5nZW5lcmF0ZV9jbG9z
ZSh2YWxpZGF0b3Jfd3JpdGVyKQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIlxuXG4iKQotCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCJ9OyAvLyBzdHJ1Y3QgIikKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVuZChlbnVtX25hbWUpCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5hcHBlbmQoIlxuIikKLQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkZWYgcmVnaXN0ZXJfdXNlKGZvcndhcmRfbGlzdGVuZXIpOgotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwYXNzCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBAc3RhdGlj
bWV0aG9kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmIGdldF9nZW5lcmF0ZV9wYXNz
X2lkKCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBUeXBlQnVpbGRl
clBhc3MuTUFJTgotCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ29kZUdlbmVyYXRv
cgotCi0gICAgICAgICAgICAgICAgICAgIEBjbGFzc21ldGhvZAotICAgICAgICAgICAgICAgICAg
ICBkZWYgZ2V0X3ZhbGlkYXRvcl9jYWxsX3RleHQoY2xzKToKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBoZWxwZXIuZnVsbF9uYW1lX3ByZWZpeF9mb3JfdXNlICsgZml4ZWRfdHlwZV9u
YW1lLmNsYXNzX25hbWUgKyAiOjphc3NlcnRDb3JyZWN0VmFsdWUiCi0KLSAgICAgICAgICAgICAg
ICAgICAgQGNsYXNzbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgIGRlZiBnZXRfYXJyYXlfaXRl
bV9jX3R5cGVfdGV4dChjbHMpOgotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhlbHBl
ci5mdWxsX25hbWVfcHJlZml4X2Zvcl91c2UgKyBmaXhlZF90eXBlX25hbWUuY2xhc3NfbmFtZSAr
ICI6OkVudW0iCi0KLSAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAg
ICAgICAgICAgICBkZWYgZ2V0X3NldHRlcl92YWx1ZV9leHByZXNzaW9uX3BhdHRlcm4oKToKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAiSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Z2V0
JXNFbnVtQ29uc3RhbnRWYWx1ZSglcykiCi0KLSAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21l
dGhvZAotICAgICAgICAgICAgICAgICAgICBkZWYgcmVkdWNlX3RvX3Jhd190eXBlKCk6Ci0gICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmF3VHlwZXMuU3RyaW5nCi0KLSAgICAgICAgICAg
ICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X3R5cGVf
bW9kZWwoKToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBUeXBlTW9kZWwuRW51bSho
ZWxwZXIuZnVsbF9uYW1lX3ByZWZpeF9mb3JfdXNlICsgZml4ZWRfdHlwZV9uYW1lLmNsYXNzX25h
bWUpCi0KLSAgICAgICAgICAgICAgICByZXR1cm4gRW51bUJpbmRpbmcKLSAgICAgICAgICAgIGVs
c2U6Ci0gICAgICAgICAgICAgICAgaWYgaGVscGVyLmlzX2FkX2hvYzoKLQotICAgICAgICAgICAg
ICAgICAgICBjbGFzcyBQbGFpblN0cmluZzoKLSAgICAgICAgICAgICAgICAgICAgICAgIEBjbGFz
c21ldGhvZAotICAgICAgICAgICAgICAgICAgICAgICAgZGVmIHJlc29sdmVfaW5uZXIoY2xzLCBy
ZXNvbHZlX2NvbnRleHQpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKLQotICAg
ICAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgICAgICAgICAg
ICAgZGVmIHJlcXVlc3RfdXNlcl9ydW50aW1lX2Nhc3QocmVxdWVzdCk6Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJVbnN1cHBvcnRlZCIpCi0KLSAgICAgICAg
ICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgICAgIGRl
ZiByZXF1ZXN0X2ludGVybmFsX3J1bnRpbWVfY2FzdCgpOgotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHBhc3MKLQotICAgICAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAg
ICAgICAgICAgICAgICAgICAgICAgZGVmIGdldF9jb2RlX2dlbmVyYXRvcigpOgotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBOb25lCi0KLSAgICAgICAgICAgICAgICAgICAgICAg
IEBjbGFzc21ldGhvZAotICAgICAgICAgICAgICAgICAgICAgICAgZGVmIGdldF92YWxpZGF0b3Jf
Y2FsbF90ZXh0KGNscyk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJhd1R5
cGVzLlN0cmluZy5nZXRfcmF3X3ZhbGlkYXRvcl9jYWxsX3RleHQoKQotCi0gICAgICAgICAgICAg
ICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWYgcmVk
dWNlX3RvX3Jhd190eXBlKCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJh
d1R5cGVzLlN0cmluZwotCi0gICAgICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0g
ICAgICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X3R5cGVfbW9kZWwoKToKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gVHlwZU1vZGVsLlN0cmluZwotCi0gICAgICAgICAgICAg
ICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0
X3NldHRlcl92YWx1ZV9leHByZXNzaW9uX3BhdHRlcm4oKToKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gTm9uZQotCi0gICAgICAgICAgICAgICAgICAgICAgICBAY2xhc3NtZXRo
b2QKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBnZXRfYXJyYXlfaXRlbV9jX3R5cGVfdGV4
dChjbHMpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjbHMucmVkdWNlX3Rv
X3Jhd190eXBlKCkuZ2V0X2FycmF5X2l0ZW1fcmF3X2NfdHlwZV90ZXh0KCkKLQotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gUGxhaW5TdHJpbmcKLQotICAgICAgICAgICAgICAgIGVsc2U6Ci0K
LSAgICAgICAgICAgICAgICAgICAgY2xhc3MgVHlwZWRlZlN0cmluZzoKLSAgICAgICAgICAgICAg
ICAgICAgICAgIEBjbGFzc21ldGhvZAotICAgICAgICAgICAgICAgICAgICAgICAgZGVmIHJlc29s
dmVfaW5uZXIoY2xzLCByZXNvbHZlX2NvbnRleHQpOgotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHBhc3MKLQotICAgICAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAg
ICAgICAgICAgICAgICAgICAgZGVmIHJlcXVlc3RfdXNlcl9ydW50aW1lX2Nhc3QocmVxdWVzdCk6
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJVbnN1cHBvcnRl
ZCIpCi0KLSAgICAgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGRlZiByZXF1ZXN0X2ludGVybmFsX3J1bnRpbWVfY2FzdCgpOgotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFJhd1R5cGVzLlN0cmluZy5yZXF1ZXN0X3Jhd19pbnRlcm5h
bF9ydW50aW1lX2Nhc3QoKQotCi0gICAgICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9k
Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X2NvZGVfZ2VuZXJhdG9yKCk6Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3MgQ29kZUdlbmVyYXRvcjoKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkZWYgZ2VuZXJhdGVfdHlwZV9idWlsZGVyKHdyaXRlciwgZ2VuZXJhdGVfY29u
dGV4dCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwZXIud3JpdGVf
ZG9jKHdyaXRlcikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpeGVkX3R5
cGVfbmFtZS5vdXRwdXRfY29tbWVudCh3cml0ZXIpCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB3cml0ZXIubmV3bGluZSgidHlwZWRlZiBTdHJpbmcgIikKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5hcHBlbmQoZml4ZWRfdHlwZV9uYW1lLmNs
YXNzX25hbWUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuYXBw
ZW5kKCI7XG5cbiIpCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21l
dGhvZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWYgcmVnaXN0ZXJfdXNlKGZv
cndhcmRfbGlzdGVuZXIpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFz
cwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmIGdldF9nZW5lcmF0ZV9wYXNzX2lkKCk6Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHlwZUJ1aWxkZXJQYXNz
LlRZUEVERUYKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBDb2RlR2VuZXJh
dG9yCi0KLSAgICAgICAgICAgICAgICAgICAgICAgIEBjbGFzc21ldGhvZAotICAgICAgICAgICAg
ICAgICAgICAgICAgZGVmIGdldF92YWxpZGF0b3JfY2FsbF90ZXh0KGNscyk6Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIFJhd1R5cGVzLlN0cmluZy5nZXRfcmF3X3ZhbGlkYXRv
cl9jYWxsX3RleHQoKQotCi0gICAgICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0g
ICAgICAgICAgICAgICAgICAgICAgICBkZWYgcmVkdWNlX3RvX3Jhd190eXBlKCk6Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJhd1R5cGVzLlN0cmluZwotCi0gICAgICAgICAg
ICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWYg
Z2V0X3R5cGVfbW9kZWwoKToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHlw
ZU1vZGVsLlZhbHVlVHlwZSgiJXMlcyIgJSAoaGVscGVyLmZ1bGxfbmFtZV9wcmVmaXhfZm9yX3Vz
ZSwgZml4ZWRfdHlwZV9uYW1lLmNsYXNzX25hbWUpLCBUcnVlKQotCi0gICAgICAgICAgICAgICAg
ICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X3Nl
dHRlcl92YWx1ZV9leHByZXNzaW9uX3BhdHRlcm4oKToKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gTm9uZQotCi0gICAgICAgICAgICAgICAgICAgICAgICBAY2xhc3NtZXRob2QK
LSAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBnZXRfYXJyYXlfaXRlbV9jX3R5cGVfdGV4dChj
bHMpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAiY29uc3QgJXMlcyYiICUg
KGhlbHBlci5mdWxsX25hbWVfcHJlZml4X2Zvcl91c2UsIGZpeGVkX3R5cGVfbmFtZS5jbGFzc19u
YW1lKQotCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBUeXBlZGVmU3RyaW5nCi0KLSAgICAg
ICAgZWxpZiBqc29uX3R5cGFibGVbInR5cGUiXSA9PSAiaW50ZWdlciI6Ci0gICAgICAgICAgICAg
ICAgaWYgaGVscGVyLmlzX2FkX2hvYzoKLQotICAgICAgICAgICAgICAgICAgICBjbGFzcyBQbGFp
bkludGVnZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICBAY2xhc3NtZXRob2QKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGRlZiByZXNvbHZlX2lubmVyKGNscywgcmVzb2x2ZV9jb250ZXh0KToK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCi0KLSAgICAgICAgICAgICAgICAgICAg
ICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlZiByZXF1ZXN0X3Vz
ZXJfcnVudGltZV9jYXN0KHJlcXVlc3QpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJh
aXNlIEV4Y2VwdGlvbigiVW5zdXBwb3J0ZWQiKQotCi0gICAgICAgICAgICAgICAgICAgICAgICBA
c3RhdGljbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWYgcmVxdWVzdF9pbnRlcm5h
bF9ydW50aW1lX2Nhc3QoKToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCi0KLSAg
ICAgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGRlZiBnZXRfY29kZV9nZW5lcmF0b3IoKToKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gTm9uZQotCi0gICAgICAgICAgICAgICAgICAgICAgICBAY2xhc3NtZXRob2QKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGRlZiBnZXRfdmFsaWRhdG9yX2NhbGxfdGV4dChjbHMpOgot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSYXdUeXBlcy5JbnQuZ2V0X3Jhd192
YWxpZGF0b3JfY2FsbF90ZXh0KCkKLQotICAgICAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21l
dGhvZAotICAgICAgICAgICAgICAgICAgICAgICAgZGVmIHJlZHVjZV90b19yYXdfdHlwZSgpOgot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSYXdUeXBlcy5JbnQKLQotICAgICAg
ICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgICAgICAgICAgICAg
ZGVmIGdldF90eXBlX21vZGVsKCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IFR5cGVNb2RlbC5JbnQKLQotICAgICAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAot
ICAgICAgICAgICAgICAgICAgICAgICAgZGVmIGdldF9zZXR0ZXJfdmFsdWVfZXhwcmVzc2lvbl9w
YXR0ZXJuKCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKLQotICAg
ICAgICAgICAgICAgICAgICAgICAgQGNsYXNzbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgICAg
ICBkZWYgZ2V0X2FycmF5X2l0ZW1fY190eXBlX3RleHQoY2xzKToKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gY2xzLnJlZHVjZV90b19yYXdfdHlwZSgpLmdldF9hcnJheV9pdGVt
X3Jhd19jX3R5cGVfdGV4dCgpCi0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFBsYWluSW50
ZWdlcgotCi0gICAgICAgICAgICAgICAgZWxzZToKLQotICAgICAgICAgICAgICAgICAgICBjbGFz
cyBUeXBlZGVmSW50ZWdlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgIEBjbGFzc21ldGhvZAot
ICAgICAgICAgICAgICAgICAgICAgICAgZGVmIHJlc29sdmVfaW5uZXIoY2xzLCByZXNvbHZlX2Nv
bnRleHQpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKLQotICAgICAgICAgICAg
ICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgICAgICAgICAgICAgZGVmIHJl
cXVlc3RfdXNlcl9ydW50aW1lX2Nhc3QocmVxdWVzdCk6Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmFpc2UgRXhjZXB0aW9uKCJVbnN1cHBvcnRlZCIpCi0KLSAgICAgICAgICAgICAgICAg
ICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlZiByZXF1ZXN0
X2ludGVybmFsX3J1bnRpbWVfY2FzdCgpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJh
d1R5cGVzLkludC5yZXF1ZXN0X3Jhd19pbnRlcm5hbF9ydW50aW1lX2Nhc3QoKQotCi0gICAgICAg
ICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgICAgICBk
ZWYgZ2V0X2NvZGVfZ2VuZXJhdG9yKCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xh
c3MgQ29kZUdlbmVyYXRvcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQHN0YXRp
Y21ldGhvZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWYgZ2VuZXJhdGVfdHlw
ZV9idWlsZGVyKHdyaXRlciwgZ2VuZXJhdGVfY29udGV4dCk6Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBoZWxwZXIud3JpdGVfZG9jKHdyaXRlcikKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZpeGVkX3R5cGVfbmFtZS5vdXRwdXRfY29tbWVudCh3cml0
ZXIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3bGluZSgi
dHlwZWRlZiBpbnQgIikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRl
ci5hcHBlbmQoZml4ZWRfdHlwZV9uYW1lLmNsYXNzX25hbWUpCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB3cml0ZXIuYXBwZW5kKCI7XG5cbiIpCi0KLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkZWYgcmVnaXN0ZXJfdXNlKGZvcndhcmRfbGlzdGVuZXIpOgotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcGFzcwotCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVm
IGdldF9nZW5lcmF0ZV9wYXNzX2lkKCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gVHlwZUJ1aWxkZXJQYXNzLlRZUEVERUYKLQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBDb2RlR2VuZXJhdG9yCi0KLSAgICAgICAgICAgICAgICAgICAgICAg
IEBjbGFzc21ldGhvZAotICAgICAgICAgICAgICAgICAgICAgICAgZGVmIGdldF92YWxpZGF0b3Jf
Y2FsbF90ZXh0KGNscyk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJhd1R5
cGVzLkludC5nZXRfcmF3X3ZhbGlkYXRvcl9jYWxsX3RleHQoKQotCi0gICAgICAgICAgICAgICAg
ICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWYgcmVkdWNl
X3RvX3Jhd190eXBlKCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJhd1R5
cGVzLkludAotCi0gICAgICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAg
ICAgICAgICAgICAgICAgICBkZWYgZ2V0X3R5cGVfbW9kZWwoKToKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gVHlwZU1vZGVsLkludAotCi0gICAgICAgICAgICAgICAgICAgICAg
ICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X3NldHRlcl92
YWx1ZV9leHByZXNzaW9uX3BhdHRlcm4oKToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gTm9uZQotCi0gICAgICAgICAgICAgICAgICAgICAgICBAY2xhc3NtZXRob2QKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGRlZiBnZXRfYXJyYXlfaXRlbV9jX3R5cGVfdGV4dChjbHMpOgot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBoZWxwZXIuZnVsbF9uYW1lX3ByZWZp
eF9mb3JfdXNlICsgZml4ZWRfdHlwZV9uYW1lLmNsYXNzX25hbWUKLQotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gVHlwZWRlZkludGVnZXIKLQotICAgICAgICBlbGlmIGpzb25fdHlwYWJsZVsi
dHlwZSJdID09ICJvYmplY3QiOgotICAgICAgICAgICAgaWYgInByb3BlcnRpZXMiIGluIGpzb25f
dHlwYWJsZToKLQotICAgICAgICAgICAgICAgIGNsYXNzIENsYXNzQmluZGluZzoKLSAgICAgICAg
ICAgICAgICAgICAgcmVzb2x2ZV9kYXRhXyA9IE5vbmUKLSAgICAgICAgICAgICAgICAgICAgbmVl
ZF91c2VyX3J1bnRpbWVfY2FzdF8gPSBGYWxzZQotICAgICAgICAgICAgICAgICAgICBuZWVkX2lu
dGVybmFsX3J1bnRpbWVfY2FzdF8gPSBGYWxzZQotCi0gICAgICAgICAgICAgICAgICAgIEBjbGFz
c21ldGhvZAotICAgICAgICAgICAgICAgICAgICBkZWYgcmVzb2x2ZV9pbm5lcihjbHMsIHJlc29s
dmVfY29udGV4dCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiBjbHMucmVzb2x2ZV9kYXRh
XzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4KLQotICAgICAgICAgICAgICAg
ICAgICAgICAgcHJvcGVydGllcyA9IGpzb25fdHlwYWJsZVsicHJvcGVydGllcyJdCi0gICAgICAg
ICAgICAgICAgICAgICAgICBtYWluID0gW10KLSAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlv
bmFsID0gW10KLQotICAgICAgICAgICAgICAgICAgICAgICAgYWRfaG9jX3R5cGVfbGlzdCA9IFtd
Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciBwcm9wIGluIHByb3BlcnRpZXM6Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcHJvcF9uYW1lID0gcHJvcFsibmFtZSJdCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYWRfaG9jX3R5cGVfY29udGV4dCA9IGNscy5BZEhvY1R5cGVD
b250ZXh0SW1wbChwcm9wX25hbWUsIGZpeGVkX3R5cGVfbmFtZS5jbGFzc19uYW1lLCByZXNvbHZl
X2NvbnRleHQsIGFkX2hvY190eXBlX2xpc3QsIGhlbHBlci5mdWxsX25hbWVfcHJlZml4X2Zvcl9p
bXBsKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpbmRpbmcgPSByZXNvbHZlX3BhcmFt
X3R5cGUocHJvcCwgY29udGV4dF9kb21haW5fbmFtZSwgYWRfaG9jX3R5cGVfY29udGV4dCkKLQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVfZ2VuZXJhdG9yID0gYmluZGluZy5nZXRf
Y29kZV9nZW5lcmF0b3IoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGNvZGVfZ2Vu
ZXJhdG9yOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlX2dlbmVyYXRvci5y
ZWdpc3Rlcl91c2UocmVzb2x2ZV9jb250ZXh0LmZvcndhcmRfbGlzdGVuZXIpCi0KLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjbGFzcyBQcm9wZXJ0eURhdGE6Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHBhcmFtX3R5cGVfYmluZGluZyA9IGJpbmRpbmcKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcCA9IHByb3AKLQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIHByb3AuZ2V0KCJvcHRpb25hbCIpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBvcHRpb25hbC5hcHBlbmQoUHJvcGVydHlEYXRhKQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1haW4uYXBwZW5k
KFByb3BlcnR5RGF0YSkKLQotICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3MgUmVzb2x2ZURh
dGE6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbl9wcm9wZXJ0aWVzID0gbWFpbgot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbmFsX3Byb3BlcnRpZXMgPSBvcHRpb25h
bAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkX2hvY190eXBlcyA9IGFkX2hvY190eXBl
X2xpc3QKLQotICAgICAgICAgICAgICAgICAgICAgICAgY2xzLnJlc29sdmVfZGF0YV8gPSBSZXNv
bHZlRGF0YQotCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgYWRfaG9jIGluIGFkX2hvY190
eXBlX2xpc3Q6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRfaG9jLnJlc29sdmVfaW5u
ZXIocmVzb2x2ZV9jb250ZXh0KQotCi0gICAgICAgICAgICAgICAgICAgIEBjbGFzc21ldGhvZAot
ICAgICAgICAgICAgICAgICAgICBkZWYgcmVxdWVzdF91c2VyX3J1bnRpbWVfY2FzdChjbHMsIHJl
cXVlc3QpOgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IHJlcXVlc3Q6Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgICAgICAgICAgICAgICAgICBjbHMu
bmVlZF91c2VyX3J1bnRpbWVfY2FzdF8gPSBUcnVlCi0gICAgICAgICAgICAgICAgICAgICAgICBy
ZXF1ZXN0LmFja25vd2xlZGdlKCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNscy5yZXF1ZXN0
X2ludGVybmFsX3J1bnRpbWVfY2FzdCgpCi0KLSAgICAgICAgICAgICAgICAgICAgQGNsYXNzbWV0
aG9kCi0gICAgICAgICAgICAgICAgICAgIGRlZiByZXF1ZXN0X2ludGVybmFsX3J1bnRpbWVfY2Fz
dChjbHMpOgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgY2xzLm5lZWRfaW50ZXJuYWxfcnVu
dGltZV9jYXN0XzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4KLSAgICAgICAg
ICAgICAgICAgICAgICAgIGNscy5uZWVkX2ludGVybmFsX3J1bnRpbWVfY2FzdF8gPSBUcnVlCi0g
ICAgICAgICAgICAgICAgICAgICAgICBmb3IgcCBpbiBjbHMucmVzb2x2ZV9kYXRhXy5tYWluX3By
b3BlcnRpZXM6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcC5wYXJhbV90eXBlX2JpbmRp
bmcucmVxdWVzdF9pbnRlcm5hbF9ydW50aW1lX2Nhc3QoKQotICAgICAgICAgICAgICAgICAgICAg
ICAgZm9yIHAgaW4gY2xzLnJlc29sdmVfZGF0YV8ub3B0aW9uYWxfcHJvcGVydGllczoKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwLnBhcmFtX3R5cGVfYmluZGluZy5yZXF1ZXN0X2ludGVy
bmFsX3J1bnRpbWVfY2FzdCgpCi0KLSAgICAgICAgICAgICAgICAgICAgQGNsYXNzbWV0aG9kCi0g
ICAgICAgICAgICAgICAgICAgIGRlZiBnZXRfY29kZV9nZW5lcmF0b3IoY2xhc3NfYmluZGluZ19j
bHMpOgotICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3MgQ29kZUdlbmVyYXRvcjoKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBAY2xhc3NtZXRob2QKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkZWYgZ2VuZXJhdGVfdHlwZV9idWlsZGVyKGNscywgd3JpdGVyLCBnZW5lcmF0ZV9j
b250ZXh0KToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZV9kYXRhID0g
Y2xhc3NfYmluZGluZ19jbHMucmVzb2x2ZV9kYXRhXwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBoZWxwZXIud3JpdGVfZG9jKHdyaXRlcikKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY2xhc3NfbmFtZSA9IGZpeGVkX3R5cGVfbmFtZS5jbGFzc19uYW1lCi0KLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNfb3Blbl90eXBlID0gKGNvbnRleHRfZG9tYWlu
X25hbWUgKyAiLiIgKyBjbGFzc19uYW1lKSBpbiBUWVBFU19XSVRIX09QRU5fRklFTERfTElTVF9T
RVQKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXhlZF90eXBlX25hbWUub3V0
cHV0X2NvbW1lbnQod3JpdGVyKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0
ZXIubmV3bGluZSgiY2xhc3MgIikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3Jp
dGVyLmFwcGVuZChjbGFzc19uYW1lKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3
cml0ZXIuYXBwZW5kKCIgOiBwdWJsaWMgIikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgaXNfb3Blbl90eXBlOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
d3JpdGVyLmFwcGVuZCgiSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QiKQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgd3JpdGVyLmFwcGVuZCgiSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3RCYXNlIikKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVuZCgiIHtcbiIpCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCJwdWJsaWM6XG4iKQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZF9ob2NfdHlwZV93cml0ZXIgPSB3cml0
ZXIuaW5zZXJ0X3dyaXRlcigiICAgICIpCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZm9yIGFkX2hvY190eXBlIGluIHJlc29sdmVfZGF0YS5hZF9ob2NfdHlwZXM6Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlX2dlbmVyYXRvciA9IGFkX2hvY190eXBl
LmdldF9jb2RlX2dlbmVyYXRvcigpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiBjb2RlX2dlbmVyYXRvcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb2RlX2dlbmVyYXRvci5nZW5lcmF0ZV90eXBlX2J1aWxkZXIoYWRfaG9jX3R5cGVfd3Jp
dGVyLCBnZW5lcmF0ZV9jb250ZXh0KQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHdyaXRlci5uZXdsaW5lX211bHRpbGluZSgKLSIiIiAgICBlbnVtIHsKLSAgICAgICAgTm9GaWVs
ZHNTZXQgPSAwLAotIiIiKQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRl
X2VudW1faXRlbXMgPSBbXQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBsZW4o
cmVzb2x2ZV9kYXRhLm1haW5fcHJvcGVydGllcykgPiAwOgotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcG9zID0gMAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZm9yIHByb3BfZGF0YSBpbiByZXNvbHZlX2RhdGEubWFpbl9wcm9wZXJ0aWVzOgotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1fbmFtZSA9IENhcGl0YWxpemVy
Lmxvd2VyX2NhbWVsX2Nhc2VfdG9fdXBwZXIocHJvcF9kYXRhLnBbIm5hbWUiXSkgKyAiU2V0Igot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX2VudW1faXRlbXMu
YXBwZW5kKGl0ZW1fbmFtZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB3cml0ZXIubmV3bGluZSgiICAgICAgICAlcyA9IDEgPDwgJXMsXG4iICUgKGl0ZW1fbmFtZSwg
cG9zKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3MgKz0gMQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsX2ZpZWxkc19zZXRfdmFsdWUg
PSAiKCIgKyAoIiB8ICIuam9pbihzdGF0ZV9lbnVtX2l0ZW1zKSkgKyAiKSIKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGFsbF9maWVsZHNfc2V0X3ZhbHVlID0gIjAiCi0KLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmVfbXVsdGlsaW5lKENvZGVHZW5lcmF0b3JJbnNwZWN0
b3JTdHJpbmdzLmNsYXNzX2JpbmRpbmdfYnVpbGRlcl9wYXJ0XzEKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKGFsbF9maWVsZHNfc2V0
X3ZhbHVlLCBjbGFzc19uYW1lLCBjbGFzc19uYW1lKSkKLQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwb3MgPSAwCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBw
cm9wX2RhdGEgaW4gcmVzb2x2ZV9kYXRhLm1haW5fcHJvcGVydGllczoKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHByb3BfbmFtZSA9IHByb3BfZGF0YS5wWyJuYW1lIl0KLQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1fdHlwZV9iaW5kaW5nID0g
cHJvcF9kYXRhLnBhcmFtX3R5cGVfYmluZGluZwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcGFyYW1fcmF3X3R5cGUgPSBwYXJhbV90eXBlX2JpbmRpbmcucmVkdWNlX3RvX3Jh
d190eXBlKCkKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5l
d2xpbmVfbXVsdGlsaW5lKENvZGVHZW5lcmF0b3JJbnNwZWN0b3JTdHJpbmdzLmNsYXNzX2JpbmRp
bmdfYnVpbGRlcl9wYXJ0XzIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAlIChzdGF0ZV9lbnVtX2l0ZW1zW3Bvc10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQ2FwaXRhbGl6ZXIubG93ZXJfY2FtZWxfY2FzZV90b191cHBlcihwcm9w
X25hbWUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFt
X3R5cGVfYmluZGluZy5nZXRfdHlwZV9tb2RlbCgpLmdldF9pbnB1dF9wYXJhbV90eXBlX3RleHQo
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV9lbnVt
X2l0ZW1zW3Bvc10sIHByb3BfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwYXJhbV9yYXdfdHlwZS5nZXRfc2V0dGVyX25hbWUoKSwgcHJvcF9uYW1lLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdF9zZXR0ZXJf
dmFsdWVfZXhwcmVzc2lvbihwYXJhbV90eXBlX2JpbmRpbmcsICJ2YWx1ZSIpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX2VudW1faXRlbXNbcG9zXSkp
Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcyArPSAxCi0KLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmVfbXVsdGlsaW5lKENvZGVH
ZW5lcmF0b3JJbnNwZWN0b3JTdHJpbmdzLmNsYXNzX2JpbmRpbmdfYnVpbGRlcl9wYXJ0XzMKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUg
KGNsYXNzX25hbWUsIGNsYXNzX25hbWUsIGNsYXNzX25hbWUsIGNsYXNzX25hbWUsIGNsYXNzX25h
bWUpKQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCIg
ICAgLypcbiIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5l
KCIgICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOlxuIikKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIiAgICAgKiBSZWZQdHI8JXM+IHJlc3VsdCA9ICVz
OjpjcmVhdGUoKSIgJSAoY2xhc3NfbmFtZSwgY2xhc3NfbmFtZSkpCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZvciBwcm9wX2RhdGEgaW4gcmVzb2x2ZV9kYXRhLm1haW5fcHJvcGVy
dGllczoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5hcHBlbmRf
bXVsdGlsaW5lKCJcbiAgICAgKiAgICAgLnNldCVzKC4uLikiICUgQ2FwaXRhbGl6ZXIubG93ZXJf
Y2FtZWxfY2FzZV90b191cHBlcihwcm9wX2RhdGEucFsibmFtZSJdKSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVuZF9tdWx0aWxpbmUoIjtcbiAgICAgKi9cbiIp
Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmVfbXVsdGls
aW5lKENvZGVHZW5lcmF0b3JJbnNwZWN0b3JTdHJpbmdzLmNsYXNzX2JpbmRpbmdfYnVpbGRlcl9w
YXJ0XzQpCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUo
IiAgICB0eXBlZGVmIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlN0cnVjdEl0ZW1UcmFpdHMgSXRl
bVRyYWl0cztcbiIpCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHByb3Bf
ZGF0YSBpbiByZXNvbHZlX2RhdGEub3B0aW9uYWxfcHJvcGVydGllczoKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHByb3BfbmFtZSA9IHByb3BfZGF0YS5wWyJuYW1lIl0KLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtX3R5cGVfYmluZGluZyA9IHBy
b3BfZGF0YS5wYXJhbV90eXBlX2JpbmRpbmcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNldHRlcl9uYW1lID0gInNldCVzIiAlIENhcGl0YWxpemVyLmxvd2VyX2NhbWVsX2Nh
c2VfdG9fdXBwZXIocHJvcF9uYW1lKQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB3cml0ZXIuYXBwZW5kX211bHRpbGluZSgiXG4gICAgdm9pZCAlcyIgJSBzZXR0ZXJfbmFt
ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5hcHBlbmQoIigl
cyB2YWx1ZSlcbiIgJSBwYXJhbV90eXBlX2JpbmRpbmcuZ2V0X3R5cGVfbW9kZWwoKS5nZXRfaW5w
dXRfcGFyYW1fdHlwZV90ZXh0KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB3cml0ZXIubmV3bGluZSgiICAgIHtcbiIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB3cml0ZXIubmV3bGluZSgiICAgICAgICB0aGlzLT5zZXQlcyhBU0NJSUxpdGVyYWwo
XCIlc1wiKSwgJXMpO1xuIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICUgKHBhcmFtX3R5cGVfYmluZGluZy5yZWR1Y2VfdG9fcmF3X3R5cGUoKS5nZXRfc2V0dGVyX25h
bWUoKSwgcHJvcF9kYXRhLnBbIm5hbWUiXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmb3JtYXRfc2V0dGVyX3ZhbHVlX2V4cHJlc3Npb24ocGFyYW1fdHlwZV9i
aW5kaW5nLCAidmFsdWUiKSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3
cml0ZXIubmV3bGluZSgiICAgIH1cbiIpCi0KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgc2V0dGVyX25hbWUgaW4gSU5TUEVDVE9SX09CSkVDVF9TRVRURVJfTkFNRVM6
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUo
IiAgICB1c2luZyBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdEJhc2U6OiVzO1xuXG4iICUgc2V0
dGVyX25hbWUpCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgY2xhc3NfYmlu
ZGluZ19jbHMubmVlZF91c2VyX3J1bnRpbWVfY2FzdF86Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB3cml0ZXIubmV3bGluZSgiICAgIHN0YXRpYyBQYXNzUmVmUHRyPCVzPiBy
dW50aW1lQ2FzdChQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+IHZhbHVlKVxu
IiAlIGNsYXNzX25hbWUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0
ZXIubmV3bGluZSgiICAgIHtcbiIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB3cml0ZXIubmV3bGluZSgiICAgICAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmpl
Y3Q+IG9iamVjdDtcbiIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0
ZXIubmV3bGluZSgiICAgICAgICBib29sIGNhc3RSZXMgPSB2YWx1ZS0+YXNPYmplY3QoJm9iamVj
dCk7XG4iKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xp
bmUoIiAgICAgICAgQVNTRVJUX1VOVVNFRChjYXN0UmVzLCBjYXN0UmVzKTtcbiIpCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuYXBwZW5kKCIjaWYgJXNcbiIgJSBW
QUxJREFUT1JfSUZERUZfTkFNRSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHdyaXRlci5uZXdsaW5lKCIgICAgICAgIGFzc2VydENvcnJlY3RWYWx1ZShvYmplY3QuZ2V0KCkp
O1xuIikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5hcHBlbmQo
IiNlbmRpZiAgLy8gJXNcbiIgJSBWQUxJREFUT1JfSUZERUZfTkFNRSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCIgICAgICAgIENPTVBJTEVfQVNT
RVJUKHNpemVvZiglcykgPT0gc2l6ZW9mKEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0QmFzZSks
IHR5cGVfY2FzdF9wcm9ibGVtKTtcbiIgJSBjbGFzc19uYW1lKQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIiAgICAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PCVzKj4oc3RhdGljX2Nhc3Q8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3RCYXNlKj4ob2Jq
ZWN0LmdldCgpKSk7XG4iICUgY2xhc3NfbmFtZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCIgICAgfVxuIikKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHdyaXRlci5hcHBlbmQoIlxuIikKLQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiBjbGFzc19iaW5kaW5nX2Nscy5uZWVkX2ludGVybmFsX3J1bnRpbWVf
Y2FzdF86Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuYXBwZW5k
KCIjaWYgJXNcbiIgJSBWQUxJREFUT1JfSUZERUZfTkFNRSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCIgICAgc3RhdGljICVzIHZvaWQgYXNzZXJ0
Q29ycmVjdFZhbHVlKEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUqIHZhbHVlKTtcbiIgJSBJTlNQ
RUNUT1JfVFlQRVNfR0VORVJBVE9SX0NPTkZJR19NQVBbb3V0cHV0X3R5cGVdWyJleHBvcnRfbWFj
cm8iXSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5hcHBlbmQo
IiNlbmRpZiAgLy8gJXNcbiIgJSBWQUxJREFUT1JfSUZERUZfTkFNRSkKLQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY2xvc2VkX2ZpZWxkX3NldCA9IChjb250ZXh0X2RvbWFp
bl9uYW1lICsgIi4iICsgY2xhc3NfbmFtZSkgbm90IGluIFRZUEVTX1dJVEhfT1BFTl9GSUVMRF9M
SVNUX1NFVAotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jf
d3JpdGVyID0gZ2VuZXJhdGVfY29udGV4dC52YWxpZGF0b3Jfd3JpdGVyCi0KLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGRvbWFpbl9maXhlcyA9IERvbWFpbk5hbWVGaXhlcy5n
ZXRfZml4ZWRfZGF0YShjb250ZXh0X2RvbWFpbl9uYW1lKQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZG9tYWluX2d1YXJkID0gZG9tYWluX2ZpeGVzLmdldF9ndWFyZCgpCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBkb21haW5fZ3VhcmQ6Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9tYWluX2d1YXJkLmdlbmVyYXRl
X29wZW4odmFsaWRhdG9yX3dyaXRlcikKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCJ2b2lkICVzJXM6OmFzc2VydENvcnJlY3RW
YWx1ZShJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlKiB2YWx1ZSlcbiIgJSAoaGVscGVyLmZ1bGxf
bmFtZV9wcmVmaXhfZm9yX2ltcGwsIGNsYXNzX25hbWUpKQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCJ7XG4iKQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCIgICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gb2JqZWN0O1xuIikKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgiICAgIGJvb2wgY2FzdFJl
cyA9IHZhbHVlLT5hc09iamVjdCgmb2JqZWN0KTtcbiIpCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIiAgICBBU1NFUlRfVU5VU0VE
KGNhc3RSZXMsIGNhc3RSZXMpO1xuIikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGZvciBwcm9wX2RhdGEgaW4gcmVzb2x2ZV9kYXRhLm1haW5fcHJvcGVydGllczoKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xp
bmUoIiAgICB7XG4iKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0
X25hbWUgPSAiJXNQb3MiICUgcHJvcF9kYXRhLnBbIm5hbWUiXQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgiICAgICAgICBJ
bnNwZWN0b3JPYmplY3Q6Oml0ZXJhdG9yICVzO1xuIiAlIGl0X25hbWUpCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCIgICAg
ICAgICVzID0gb2JqZWN0LT5maW5kKFwiJXNcIik7XG4iICUgKGl0X25hbWUsIHByb3BfZGF0YS5w
WyJuYW1lIl0pKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlk
YXRvcl93cml0ZXIubmV3bGluZSgiICAgICAgICBBU1NFUlQoJXMgIT0gb2JqZWN0LT5lbmQoKSk7
XG4iICUgaXRfbmFtZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIiAgICAgICAgJXMoJXMtPnZhbHVlLmdldCgpKTtcbiIg
JSAocHJvcF9kYXRhLnBhcmFtX3R5cGVfYmluZGluZy5nZXRfdmFsaWRhdG9yX2NhbGxfdGV4dCgp
LCBpdF9uYW1lKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxp
ZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIiAgICB9XG4iKQotCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiBjbG9zZWRfZmllbGRfc2V0OgotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgiICAgIGludCBmb3Vu
ZFByb3BlcnRpZXNDb3VudCA9ICVzO1xuIiAlIGxlbihyZXNvbHZlX2RhdGEubWFpbl9wcm9wZXJ0
aWVzKSkKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHByb3BfZGF0
YSBpbiByZXNvbHZlX2RhdGEub3B0aW9uYWxfcHJvcGVydGllczoKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIiAgICB7XG4i
KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0X25hbWUgPSAiJXNQ
b3MiICUgcHJvcF9kYXRhLnBbIm5hbWUiXQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgiICAgICAgICBJbnNwZWN0b3JPYmpl
Y3Q6Oml0ZXJhdG9yICVzO1xuIiAlIGl0X25hbWUpCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCIgICAgICAgICVzID0gb2Jq
ZWN0LT5maW5kKFwiJXNcIik7XG4iICUgKGl0X25hbWUsIHByb3BfZGF0YS5wWyJuYW1lIl0pKQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIu
bmV3bGluZSgiICAgICAgICBpZiAoJXMgIT0gb2JqZWN0LT5lbmQoKSkge1xuIiAlIGl0X25hbWUp
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRl
ci5uZXdsaW5lKCIgICAgICAgICAgICAlcyglcy0+dmFsdWUuZ2V0KCkpO1xuIiAlIChwcm9wX2Rh
dGEucGFyYW1fdHlwZV9iaW5kaW5nLmdldF92YWxpZGF0b3JfY2FsbF90ZXh0KCksIGl0X25hbWUp
KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGNsb3NlZF9maWVs
ZF9zZXQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlk
YXRvcl93cml0ZXIubmV3bGluZSgiICAgICAgICAgICAgKytmb3VuZFByb3BlcnRpZXNDb3VudDtc
biIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dy
aXRlci5uZXdsaW5lKCIgICAgICAgIH1cbiIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCIgICAgfVxuIikKLQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgY2xvc2VkX2ZpZWxkX3NldDoKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xp
bmUoIiAgICBpZiAoZm91bmRQcm9wZXJ0aWVzQ291bnQgIT0gb2JqZWN0LT5zaXplKCkpXG4iKQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIu
bmV3bGluZSgiICAgICAgICBGQVRBTChcIlVuZXhwZWN0ZWQgcHJvcGVydGllcyBpbiBvYmplY3Q6
ICVzXFxuXCIsIG9iamVjdC0+dG9KU09OU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpO1xuIikKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGlu
ZSgifVxuIikKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgZG9tYWlu
X2d1YXJkOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbWFpbl9n
dWFyZC5nZW5lcmF0ZV9jbG9zZSh2YWxpZGF0b3Jfd3JpdGVyKQotCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIlxuXG4iKQotCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGlzX29wZW5fdHlwZToKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNwcF93cml0ZXIgPSBnZW5lcmF0ZV9jb250ZXh0
LmNwcF93cml0ZXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5h
cHBlbmQoIlxuIikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5u
ZXdsaW5lKCIgICAgLy8gUHJvcGVydHkgbmFtZXMgZm9yIHR5cGUgZ2VuZXJhdGVkIGFzIG9wZW4u
XG4iKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHByb3BfZGF0YSBp
biByZXNvbHZlX2RhdGEubWFpbl9wcm9wZXJ0aWVzICsgcmVzb2x2ZV9kYXRhLm9wdGlvbmFsX3By
b3BlcnRpZXM6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcF9u
YW1lID0gcHJvcF9kYXRhLnBbIm5hbWUiXQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHByb3BfZmllbGRfbmFtZSA9IENhcGl0YWxpemVyLmxvd2VyX2NhbWVsX2Nhc2Vf
dG9fdXBwZXIocHJvcF9uYW1lKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHdyaXRlci5uZXdsaW5lKCIgICAgc3RhdGljIGNvbnN0IGNoYXIqICVzO1xuIiAlIChwcm9w
X2ZpZWxkX25hbWUpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNw
cF93cml0ZXIubmV3bGluZSgiY29uc3QgY2hhciogJXMlczo6JXMgPSBcIiVzXCI7XG4iICUgKGhl
bHBlci5mdWxsX25hbWVfcHJlZml4X2Zvcl9pbXBsLCBjbGFzc19uYW1lLCBwcm9wX2ZpZWxkX25h
bWUsIHByb3BfbmFtZSkpCi0KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0
ZXIubmV3bGluZSgifTtcblxuIikKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBzdGF0
aWNtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWYgZ2VuZXJhdGVfZm9yd2Fy
ZF9kZWNsYXJhdGlvbih3cml0ZXIpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
bGFzc19uYW1lID0gZml4ZWRfdHlwZV9uYW1lLmNsYXNzX25hbWUKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoImNsYXNzICIpCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHdyaXRlci5hcHBlbmQoY2xhc3NfbmFtZSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVuZCgiO1xuIikKLQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
ZWYgcmVnaXN0ZXJfdXNlKGZvcndhcmRfbGlzdGVuZXIpOgotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBoZWxwZXIuYWRkX3RvX2ZvcndhcmRfbGlzdGVuZXIoZm9yd2FyZF9saXN0ZW5l
cikKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X2dlbmVyYXRlX3Bhc3NfaWQoKToKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFR5cGVCdWlsZGVyUGFzcy5NQUlOCi0KLSAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBDb2RlR2VuZXJhdG9yCi0KLSAgICAgICAgICAg
ICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X3ZhbGlk
YXRvcl9jYWxsX3RleHQoKToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBoZWxwZXIu
ZnVsbF9uYW1lX3ByZWZpeF9mb3JfdXNlICsgZml4ZWRfdHlwZV9uYW1lLmNsYXNzX25hbWUgKyAi
Ojphc3NlcnRDb3JyZWN0VmFsdWUiCi0KLSAgICAgICAgICAgICAgICAgICAgQGNsYXNzbWV0aG9k
Ci0gICAgICAgICAgICAgICAgICAgIGRlZiBnZXRfYXJyYXlfaXRlbV9jX3R5cGVfdGV4dChjbHMp
OgotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhlbHBlci5mdWxsX25hbWVfcHJlZml4
X2Zvcl91c2UgKyBmaXhlZF90eXBlX25hbWUuY2xhc3NfbmFtZQotCi0gICAgICAgICAgICAgICAg
ICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgZGVmIGdldF9zZXR0ZXJfdmFs
dWVfZXhwcmVzc2lvbl9wYXR0ZXJuKCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
Tm9uZQotCi0gICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgICAg
ICAgICAgZGVmIHJlZHVjZV90b19yYXdfdHlwZSgpOgotICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIFJhd1R5cGVzLk9iamVjdAotCi0gICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRo
b2QKLSAgICAgICAgICAgICAgICAgICAgZGVmIGdldF90eXBlX21vZGVsKCk6Ci0gICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gVHlwZU1vZGVsLlJlZlB0ckJhc2VkKGhlbHBlci5mdWxsX25h
bWVfcHJlZml4X2Zvcl91c2UgKyBmaXhlZF90eXBlX25hbWUuY2xhc3NfbmFtZSkKLQotICAgICAg
ICAgICAgICAgICAgICBjbGFzcyBBZEhvY1R5cGVDb250ZXh0SW1wbDoKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwcm9wZXJ0eV9uYW1lLCBjbGFzc19uYW1lLCBy
ZXNvbHZlX2NvbnRleHQsIGFkX2hvY190eXBlX2xpc3QsIHBhcmVudF9mdWxsX25hbWVfcHJlZml4
KToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnByb3BlcnR5X25hbWUgPSBwcm9w
ZXJ0eV9uYW1lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jbGFzc19uYW1lID0g
Y2xhc3NfbmFtZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucmVzb2x2ZV9jb250
ZXh0ID0gcmVzb2x2ZV9jb250ZXh0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5h
ZF9ob2NfdHlwZV9saXN0ID0gYWRfaG9jX3R5cGVfbGlzdAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNlbGYuY29udGFpbmVyX2Z1bGxfbmFtZV9wcmVmaXggPSBwYXJlbnRfZnVsbF9uYW1l
X3ByZWZpeCArIGNsYXNzX25hbWUgKyAiOjoiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2VsZi5jb250YWluZXJfcmVsYXRpdmVfbmFtZV9wcmVmaXggPSAiIgotCi0gICAgICAgICAgICAg
ICAgICAgICAgICBkZWYgZ2V0X3R5cGVfbmFtZV9maXgoc2VsZik6Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY2xhc3MgTmFtZUZpeDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY2xhc3NfbmFtZSA9IENhcGl0YWxpemVyLmxvd2VyX2NhbWVsX2Nhc2VfdG9fdXBwZXIoc2Vs
Zi5wcm9wZXJ0eV9uYW1lKQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBzdGF0
aWNtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmIG91dHB1dF9jb21t
ZW50KHdyaXRlcik6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIu
bmV3bGluZSgiLy8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAnJXMnIHdoaWxlIGdlbmVyYXRp
bmcgJXMuXG4iICUgKHNlbGYucHJvcGVydHlfbmFtZSwgc2VsZi5jbGFzc19uYW1lKSkKLQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOYW1lRml4Ci0KLSAgICAgICAgICAgICAg
ICAgICAgICAgIGRlZiBhZGRfdHlwZShzZWxmLCBiaW5kaW5nKToKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzZWxmLmFkX2hvY190eXBlX2xpc3QuYXBwZW5kKGJpbmRpbmcpCi0KLSAgICAg
ICAgICAgICAgICByZXR1cm4gQ2xhc3NCaW5kaW5nCi0gICAgICAgICAgICBlbHNlOgotCi0gICAg
ICAgICAgICAgICAgY2xhc3MgUGxhaW5PYmplY3RCaW5kaW5nOgotICAgICAgICAgICAgICAgICAg
ICBAY2xhc3NtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgZGVmIHJlc29sdmVfaW5uZXIoY2xz
LCByZXNvbHZlX2NvbnRleHQpOgotICAgICAgICAgICAgICAgICAgICAgICAgcGFzcwotCi0gICAg
ICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgZGVmIHJl
cXVlc3RfdXNlcl9ydW50aW1lX2Nhc3QocmVxdWVzdCk6Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBwYXNzCi0KLSAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAg
ICAgICAgICBkZWYgcmVxdWVzdF9pbnRlcm5hbF9ydW50aW1lX2Nhc3QoKToKLSAgICAgICAgICAg
ICAgICAgICAgICAgIFJhd1R5cGVzLk9iamVjdC5yZXF1ZXN0X3Jhd19pbnRlcm5hbF9ydW50aW1l
X2Nhc3QoKQotCi0gICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAg
ICAgICAgICAgZGVmIGdldF9jb2RlX2dlbmVyYXRvcigpOgotICAgICAgICAgICAgICAgICAgICAg
ICAgcGFzcwotCi0gICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAg
ICAgICAgICAgZGVmIGdldF92YWxpZGF0b3JfY2FsbF90ZXh0KCk6Ci0gICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gIlJ1bnRpbWVDYXN0SGVscGVyOjphc3NlcnRUeXBlPEluc3BlY3RvclZh
bHVlOjpUeXBlT2JqZWN0PiIKLQotICAgICAgICAgICAgICAgICAgICBAY2xhc3NtZXRob2QKLSAg
ICAgICAgICAgICAgICAgICAgZGVmIGdldF9hcnJheV9pdGVtX2NfdHlwZV90ZXh0KGNscyk6Ci0g
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2xzLnJlZHVjZV90b19yYXdfdHlwZSgpLmdl
dF9hcnJheV9pdGVtX3Jhd19jX3R5cGVfdGV4dCgpCi0KLSAgICAgICAgICAgICAgICAgICAgQHN0
YXRpY21ldGhvZAotICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X3NldHRlcl92YWx1ZV9leHBy
ZXNzaW9uX3BhdHRlcm4oKToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb25lCi0K
LSAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgICAgICAgICBk
ZWYgcmVkdWNlX3RvX3Jhd190eXBlKCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
UmF3VHlwZXMuT2JqZWN0Ci0KLSAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAg
ICAgICAgICAgICAgICAgICBkZWYgZ2V0X3R5cGVfbW9kZWwoKToKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBUeXBlTW9kZWwuT2JqZWN0Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4g
UGxhaW5PYmplY3RCaW5kaW5nCi0gICAgICAgIGVsaWYganNvbl90eXBhYmxlWyJ0eXBlIl0gPT0g
ImFycmF5IjoKLSAgICAgICAgICAgIGlmICJpdGVtcyIgaW4ganNvbl90eXBhYmxlOgotCi0gICAg
ICAgICAgICAgICAgYWRfaG9jX3R5cGVzID0gW10KLQotICAgICAgICAgICAgICAgIGNsYXNzIEFk
SG9jVHlwZUNvbnRleHQ6Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcl9mdWxsX25hbWVf
cHJlZml4ID0gIjxub3QgeWV0IGRlZmluZWQ+IgotICAgICAgICAgICAgICAgICAgICBjb250YWlu
ZXJfcmVsYXRpdmVfbmFtZV9wcmVmaXggPSAiIgotCi0gICAgICAgICAgICAgICAgICAgIEBzdGF0
aWNtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgZGVmIGdldF90eXBlX25hbWVfZml4KCk6Ci0g
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZml4ZWRfdHlwZV9uYW1lCi0KLSAgICAgICAg
ICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgICAgICAgICBkZWYgYWRkX3R5
cGUoYmluZGluZyk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBhZF9ob2NfdHlwZXMuYXBwZW5k
KGJpbmRpbmcpCi0KLSAgICAgICAgICAgICAgICBpdGVtX2JpbmRpbmcgPSByZXNvbHZlX3BhcmFt
X3R5cGUoanNvbl90eXBhYmxlWyJpdGVtcyJdLCBjb250ZXh0X2RvbWFpbl9uYW1lLCBBZEhvY1R5
cGVDb250ZXh0KQotCi0gICAgICAgICAgICAgICAgY2xhc3MgQXJyYXlCaW5kaW5nOgotICAgICAg
ICAgICAgICAgICAgICByZXNvbHZlX2RhdGFfID0gTm9uZQotICAgICAgICAgICAgICAgICAgICBu
ZWVkX2ludGVybmFsX3J1bnRpbWVfY2FzdF8gPSBGYWxzZQotCi0gICAgICAgICAgICAgICAgICAg
IEBjbGFzc21ldGhvZAotICAgICAgICAgICAgICAgICAgICBkZWYgcmVzb2x2ZV9pbm5lcihjbHMs
IHJlc29sdmVfY29udGV4dCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiBjbHMucmVzb2x2
ZV9kYXRhXzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4KLQotICAgICAgICAg
ICAgICAgICAgICAgICAgY2xhc3MgUmVzb2x2ZURhdGE6Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaXRlbV90eXBlX2JpbmRpbmcgPSBpdGVtX2JpbmRpbmcKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBhZF9ob2NfdHlwZV9saXN0ID0gYWRfaG9jX3R5cGVzCi0KLSAgICAgICAgICAg
ICAgICAgICAgICAgIGNscy5yZXNvbHZlX2RhdGFfID0gUmVzb2x2ZURhdGEKLQotICAgICAgICAg
ICAgICAgICAgICAgICAgZm9yIHQgaW4gYWRfaG9jX3R5cGVzOgotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHQucmVzb2x2ZV9pbm5lcihyZXNvbHZlX2NvbnRleHQpCi0KLSAgICAgICAgICAg
ICAgICAgICAgQGNsYXNzbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgIGRlZiByZXF1ZXN0X3Vz
ZXJfcnVudGltZV9jYXN0KGNscywgcmVxdWVzdCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBy
YWlzZSBFeGNlcHRpb24oIk5vdCBpbXBsZW1lbnRlZCB5ZXQiKQotCi0gICAgICAgICAgICAgICAg
ICAgIEBjbGFzc21ldGhvZAotICAgICAgICAgICAgICAgICAgICBkZWYgcmVxdWVzdF9pbnRlcm5h
bF9ydW50aW1lX2Nhc3QoY2xzKToKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIGNscy5uZWVk
X2ludGVybmFsX3J1bnRpbWVfY2FzdF86Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuCi0gICAgICAgICAgICAgICAgICAgICAgICBjbHMubmVlZF9pbnRlcm5hbF9ydW50aW1lX2Nh
c3RfID0gVHJ1ZQotICAgICAgICAgICAgICAgICAgICAgICAgY2xzLnJlc29sdmVfZGF0YV8uaXRl
bV90eXBlX2JpbmRpbmcucmVxdWVzdF9pbnRlcm5hbF9ydW50aW1lX2Nhc3QoKQotCi0gICAgICAg
ICAgICAgICAgICAgIEBjbGFzc21ldGhvZAotICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X2Nv
ZGVfZ2VuZXJhdG9yKGFycmF5X2JpbmRpbmdfY2xzKToKLQotICAgICAgICAgICAgICAgICAgICAg
ICAgY2xhc3MgQ29kZUdlbmVyYXRvcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBAc3Rh
dGljbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmIGdlbmVyYXRlX3R5cGVf
YnVpbGRlcih3cml0ZXIsIGdlbmVyYXRlX2NvbnRleHQpOgotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBhZF9ob2NfdHlwZV93cml0ZXIgPSB3cml0ZXIKLQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXNvbHZlX2RhdGEgPSBhcnJheV9iaW5kaW5nX2Nscy5yZXNvbHZl
X2RhdGFfCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGFkX2hvY190eXBl
IGluIHJlc29sdmVfZGF0YS5hZF9ob2NfdHlwZV9saXN0OgotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29kZV9nZW5lcmF0b3IgPSBhZF9ob2NfdHlwZS5nZXRfY29kZV9nZW5l
cmF0b3IoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgY29kZV9nZW5l
cmF0b3I6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZV9nZW5l
cmF0b3IuZ2VuZXJhdGVfdHlwZV9idWlsZGVyKGFkX2hvY190eXBlX3dyaXRlciwgZ2VuZXJhdGVf
Y29udGV4dCkKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBkZWYgZ2VuZXJhdGVfZm9yd2FyZF9kZWNsYXJhdGlv
bih3cml0ZXIpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCi0KLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZGVmIHJlZ2lzdGVyX3VzZShmb3J3YXJkX2xpc3RlbmVyKToKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaXRlbV9jb2RlX2dlbmVyYXRvciA9IGl0ZW1fYmluZGluZy5n
ZXRfY29kZV9nZW5lcmF0b3IoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBp
dGVtX2NvZGVfZ2VuZXJhdG9yOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aXRlbV9jb2RlX2dlbmVyYXRvci5yZWdpc3Rlcl91c2UoZm9yd2FyZF9saXN0ZW5lcikKLQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkZWYgZ2V0X2dlbmVyYXRlX3Bhc3NfaWQoKToKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIFR5cGVCdWlsZGVyUGFzcy5NQUlOCi0KLSAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBDb2RlR2VuZXJhdG9yCi0KLSAgICAgICAgICAgICAgICAgICAg
QGNsYXNzbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgIGRlZiBnZXRfdmFsaWRhdG9yX2NhbGxf
dGV4dChjbHMpOgotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNscy5nZXRfYXJyYXlf
aXRlbV9jX3R5cGVfdGV4dCgpICsgIjo6YXNzZXJ0Q29ycmVjdFZhbHVlIgotCi0gICAgICAgICAg
ICAgICAgICAgIEBjbGFzc21ldGhvZAotICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X2FycmF5
X2l0ZW1fY190eXBlX3RleHQoY2xzKToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBy
ZXBsYWNlX3JpZ2h0X3NoaWZ0KCJJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheTwlcz4iICUg
Y2xzLnJlc29sdmVfZGF0YV8uaXRlbV90eXBlX2JpbmRpbmcuZ2V0X2FycmF5X2l0ZW1fY190eXBl
X3RleHQoKSkKLQotICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAg
ICAgICAgICAgIGRlZiBnZXRfc2V0dGVyX3ZhbHVlX2V4cHJlc3Npb25fcGF0dGVybigpOgotICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKLQotICAgICAgICAgICAgICAgICAgICBA
c3RhdGljbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgIGRlZiByZWR1Y2VfdG9fcmF3X3R5cGUo
KToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSYXdUeXBlcy5BcnJheQotCi0gICAg
ICAgICAgICAgICAgICAgIEBjbGFzc21ldGhvZAotICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0
X3R5cGVfbW9kZWwoY2xzKToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBUeXBlTW9k
ZWwuUmVmUHRyQmFzZWQoY2xzLmdldF9hcnJheV9pdGVtX2NfdHlwZV90ZXh0KCkpCi0KLSAgICAg
ICAgICAgICAgICByZXR1cm4gQXJyYXlCaW5kaW5nCi0gICAgICAgICAgICBlbHNlOgotICAgICAg
ICAgICAgICAgICMgRmFsbC10aHJvdWdoIHRvIHJhdyB0eXBlLgotICAgICAgICAgICAgICAgIHBh
c3MKLQotICAgICAgICByYXdfdHlwZSA9IFJhd1R5cGVzLmdldChqc29uX3R5cGFibGVbInR5cGUi
XSkKLQotICAgICAgICByZXR1cm4gUmF3VHlwZUJpbmRpbmcocmF3X3R5cGUpCi0KLQotY2xhc3Mg
UmF3VHlwZUJpbmRpbmc6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHJhd190eXBlKToKLSAgICAg
ICAgc2VsZi5yYXdfdHlwZV8gPSByYXdfdHlwZQotCi0gICAgZGVmIHJlc29sdmVfaW5uZXIoc2Vs
ZiwgcmVzb2x2ZV9jb250ZXh0KToKLSAgICAgICAgcGFzcwotCi0gICAgZGVmIHJlcXVlc3RfdXNl
cl9ydW50aW1lX2Nhc3Qoc2VsZiwgcmVxdWVzdCk6Ci0gICAgICAgIHJhaXNlIEV4Y2VwdGlvbigi
VW5zdXBwb3J0ZWQiKQotCi0gICAgZGVmIHJlcXVlc3RfaW50ZXJuYWxfcnVudGltZV9jYXN0KHNl
bGYpOgotICAgICAgICBzZWxmLnJhd190eXBlXy5yZXF1ZXN0X3Jhd19pbnRlcm5hbF9ydW50aW1l
X2Nhc3QoKQotCi0gICAgZGVmIGdldF9jb2RlX2dlbmVyYXRvcihzZWxmKToKLSAgICAgICAgcmV0
dXJuIE5vbmUKLQotICAgIGRlZiBnZXRfdmFsaWRhdG9yX2NhbGxfdGV4dChzZWxmKToKLSAgICAg
ICAgcmV0dXJuIHNlbGYucmF3X3R5cGVfLmdldF9yYXdfdmFsaWRhdG9yX2NhbGxfdGV4dCgpCi0K
LSAgICBkZWYgZ2V0X2FycmF5X2l0ZW1fY190eXBlX3RleHQoc2VsZik6Ci0gICAgICAgIHJldHVy
biBzZWxmLnJhd190eXBlXy5nZXRfYXJyYXlfaXRlbV9yYXdfY190eXBlX3RleHQoKQotCi0gICAg
ZGVmIGdldF9zZXR0ZXJfdmFsdWVfZXhwcmVzc2lvbl9wYXR0ZXJuKHNlbGYpOgotICAgICAgICBy
ZXR1cm4gTm9uZQotCi0gICAgZGVmIHJlZHVjZV90b19yYXdfdHlwZShzZWxmKToKLSAgICAgICAg
cmV0dXJuIHNlbGYucmF3X3R5cGVfCi0KLSAgICBkZWYgZ2V0X3R5cGVfbW9kZWwoc2VsZik6Ci0g
ICAgICAgIHJldHVybiBzZWxmLnJhd190eXBlXy5nZXRfcmF3X3R5cGVfbW9kZWwoKQotCi0KLWNs
YXNzIFR5cGVEYXRhKG9iamVjdCk6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGpzb25fdHlwZSwg
anNvbl9kb21haW4sIGRvbWFpbl9kYXRhKToKLSAgICAgICAgc2VsZi5qc29uX3R5cGVfID0ganNv
bl90eXBlCi0gICAgICAgIHNlbGYuanNvbl9kb21haW5fID0ganNvbl9kb21haW4KLSAgICAgICAg
c2VsZi5kb21haW5fZGF0YV8gPSBkb21haW5fZGF0YQotCi0gICAgICAgIGlmICJ0eXBlIiBub3Qg
aW4ganNvbl90eXBlOgotICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJVbmtub3duIHR5cGUi
KQotCi0gICAgICAgIGpzb25fdHlwZV9uYW1lID0ganNvbl90eXBlWyJ0eXBlIl0KLSAgICAgICAg
c2VsZi5yYXdfdHlwZV8gPSBSYXdUeXBlcy5nZXQoanNvbl90eXBlX25hbWUpCi0gICAgICAgIHNl
bGYuYmluZGluZ19iZWluZ19yZXNvbHZlZF8gPSBGYWxzZQotICAgICAgICBzZWxmLmJpbmRpbmdf
ID0gTm9uZQotCi0gICAgZGVmIGdldF9yYXdfdHlwZShzZWxmKToKLSAgICAgICAgcmV0dXJuIHNl
bGYucmF3X3R5cGVfCi0KLSAgICBkZWYgZ2V0X2JpbmRpbmcoc2VsZik6Ci0gICAgICAgIGlmIG5v
dCBzZWxmLmJpbmRpbmdfOgotICAgICAgICAgICAgaWYgc2VsZi5iaW5kaW5nX2JlaW5nX3Jlc29s
dmVkXzoKLSAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIlR5cGUgJXMgaXMgYWxyZWFk
eSBiZWluZyByZXNvbHZlZCIgJSBzZWxmLmpzb25fdHlwZV9bInR5cGUiXSkKLSAgICAgICAgICAg
ICMgUmVzb2x2ZSBvbmx5IGxhemlseSwgYmVjYXVzZSByZXNvbHZpbmcgb25lIG5hbWVkIHR5cGUg
bWF5IHJlcXVpcmUgcmVzb2x2aW5nIHNvbWUgb3RoZXIgbmFtZWQgdHlwZS4KLSAgICAgICAgICAg
IHNlbGYuYmluZGluZ19iZWluZ19yZXNvbHZlZF8gPSBUcnVlCi0gICAgICAgICAgICB0cnk6Ci0g
ICAgICAgICAgICAgICAgc2VsZi5iaW5kaW5nXyA9IFR5cGVCaW5kaW5ncy5jcmVhdGVfbmFtZWRf
dHlwZV9kZWNsYXJhdGlvbihzZWxmLmpzb25fdHlwZV8sIHNlbGYuanNvbl9kb21haW5fWyJkb21h
aW4iXSwgc2VsZikKLSAgICAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgc2VsZi5i
aW5kaW5nX2JlaW5nX3Jlc29sdmVkXyA9IEZhbHNlCi0KLSAgICAgICAgcmV0dXJuIHNlbGYuYmlu
ZGluZ18KLQotICAgIGRlZiBnZXRfanNvbl90eXBlKHNlbGYpOgotICAgICAgICByZXR1cm4gc2Vs
Zi5qc29uX3R5cGVfCi0KLSAgICBkZWYgZ2V0X25hbWUoc2VsZik6Ci0gICAgICAgIHJldHVybiBz
ZWxmLmpzb25fdHlwZV9bImlkIl0KLQotICAgIGRlZiBnZXRfZG9tYWluX25hbWUoc2VsZik6Ci0g
ICAgICAgIHJldHVybiBzZWxmLmpzb25fZG9tYWluX1siZG9tYWluIl0KLQotCi1jbGFzcyBEb21h
aW5EYXRhOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBqc29uX2RvbWFpbik6Ci0gICAgICAgIHNl
bGYuanNvbl9kb21haW4gPSBqc29uX2RvbWFpbgotICAgICAgICBzZWxmLnR5cGVzXyA9IFtdCi0K
LSAgICBkZWYgYWRkX3R5cGUoc2VsZiwgdHlwZV9kYXRhKToKLSAgICAgICAgc2VsZi50eXBlc18u
YXBwZW5kKHR5cGVfZGF0YSkKLQotICAgIGRlZiBuYW1lKHNlbGYpOgotICAgICAgICByZXR1cm4g
c2VsZi5qc29uX2RvbWFpblsiZG9tYWluIl0KLQotICAgIGRlZiB0eXBlcyhzZWxmKToKLSAgICAg
ICAgcmV0dXJuIHNlbGYudHlwZXNfCi0KLQotY2xhc3MgVHlwZU1hcDoKLSAgICBkZWYgX19pbml0
X18oc2VsZiwgYXBpLCBkZXBlbmRlbmN5X2FwaSk6Ci0gICAgICAgIHNlbGYubWFwXyA9IHt9Ci0g
ICAgICAgIHNlbGYuZG9tYWluc18gPSBbXQotICAgICAgICBzZWxmLmRvbWFpbnNfdG9fZ2VuZXJh
dGVfID0gW10KLSAgICAgICAgZm9yIGpzb25fZG9tYWluIGluIGFwaVsiZG9tYWlucyJdOgotICAg
ICAgICAgICAgc2VsZi5hZGRfZG9tYWluKGpzb25fZG9tYWluLCBUcnVlKQotICAgICAgICBmb3Ig
anNvbl9kb21haW4gaW4gZGVwZW5kZW5jeV9hcGlbImRvbWFpbnMiXToKLSAgICAgICAgICAgIHNl
bGYuYWRkX2RvbWFpbihqc29uX2RvbWFpbiwgRmFsc2UpCi0KLSAgICBkZWYgYWRkX2RvbWFpbihz
ZWxmLCBqc29uX2RvbWFpbiwgc2hvdWxkX2dlbmVyYXRlKToKLSAgICAgICAgZG9tYWluX25hbWUg
PSBqc29uX2RvbWFpblsiZG9tYWluIl0KLQotICAgICAgICBkb21haW5fbWFwID0ge30KLSAgICAg
ICAgc2VsZi5tYXBfW2RvbWFpbl9uYW1lXSA9IGRvbWFpbl9tYXAKLQotICAgICAgICBkb21haW5f
ZGF0YSA9IERvbWFpbkRhdGEoanNvbl9kb21haW4pCi0gICAgICAgIHNlbGYuZG9tYWluc18uYXBw
ZW5kKGRvbWFpbl9kYXRhKQotCi0gICAgICAgIGlmIHNob3VsZF9nZW5lcmF0ZToKLSAgICAgICAg
ICAgICMgRklYTUU6IFRoZSBvcmRlciBvZiB0eXBlcyBzaG91bGQgbm90IG1hdHRlci4gVGhlIGdl
bmVyYXRlZCBjb2RlIHNob3VsZCB3b3JrIHJlZ2FyZGxlc3Mgb2YgdGhlIG9yZGVyIG9mIHR5cGVz
LgotICAgICAgICAgICAgaWYgZG9tYWluX25hbWUgPT0gIlBhZ2UiOgotICAgICAgICAgICAgICAg
IHNlbGYuZG9tYWluc190b19nZW5lcmF0ZV8uaW5zZXJ0KDAsIGRvbWFpbl9kYXRhKQotICAgICAg
ICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzZWxmLmRvbWFpbnNfdG9fZ2VuZXJhdGVfLmFw
cGVuZChkb21haW5fZGF0YSkKLQotICAgICAgICBpZiAidHlwZXMiIGluIGpzb25fZG9tYWluOgot
ICAgICAgICAgICAgZm9yIGpzb25fdHlwZSBpbiBqc29uX2RvbWFpblsidHlwZXMiXToKLSAgICAg
ICAgICAgICAgICB0eXBlX25hbWUgPSBqc29uX3R5cGVbImlkIl0KLSAgICAgICAgICAgICAgICB0
eXBlX2RhdGEgPSBUeXBlRGF0YShqc29uX3R5cGUsIGpzb25fZG9tYWluLCBkb21haW5fZGF0YSkK
LSAgICAgICAgICAgICAgICBkb21haW5fbWFwW3R5cGVfbmFtZV0gPSB0eXBlX2RhdGEKLSAgICAg
ICAgICAgICAgICBkb21haW5fZGF0YS5hZGRfdHlwZSh0eXBlX2RhdGEpCi0KLSAgICBkZWYgZG9t
YWlucyhzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuZG9tYWluc18KLQotICAgIGRlZiBkb21h
aW5zX3RvX2dlbmVyYXRlKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5kb21haW5zX3RvX2dl
bmVyYXRlXwotCi0gICAgZGVmIGdldChzZWxmLCBkb21haW5fbmFtZSwgdHlwZV9uYW1lKToKLSAg
ICAgICAgcmV0dXJuIHNlbGYubWFwX1tkb21haW5fbmFtZV1bdHlwZV9uYW1lXQotCi0KLWRlZiBy
ZXNvbHZlX3BhcmFtX3R5cGUoanNvbl9wYXJhbWV0ZXIsIHNjb3BlX2RvbWFpbl9uYW1lLCBhZF9o
b2NfdHlwZV9jb250ZXh0KToKLSAgICBpZiAiJHJlZiIgaW4ganNvbl9wYXJhbWV0ZXI6Ci0gICAg
ICAgIGpzb25fcmVmID0ganNvbl9wYXJhbWV0ZXJbIiRyZWYiXQotICAgICAgICB0eXBlX2RhdGEg
PSBnZXRfcmVmX2RhdGEoanNvbl9yZWYsIHNjb3BlX2RvbWFpbl9uYW1lKQotICAgICAgICByZXR1
cm4gdHlwZV9kYXRhLmdldF9iaW5kaW5nKCkKLSAgICBlbGlmICJ0eXBlIiBpbiBqc29uX3BhcmFt
ZXRlcjoKLSAgICAgICAgcmVzdWx0ID0gVHlwZUJpbmRpbmdzLmNyZWF0ZV9hZF9ob2NfdHlwZV9k
ZWNsYXJhdGlvbihqc29uX3BhcmFtZXRlciwgc2NvcGVfZG9tYWluX25hbWUsIGFkX2hvY190eXBl
X2NvbnRleHQpCi0gICAgICAgIGFkX2hvY190eXBlX2NvbnRleHQuYWRkX3R5cGUocmVzdWx0KQot
ICAgICAgICByZXR1cm4gcmVzdWx0Ci0gICAgZWxzZToKLSAgICAgICAgcmFpc2UgRXhjZXB0aW9u
KCJVbmtub3duIHR5cGUiKQotCi0KLWRlZiByZXNvbHZlX3BhcmFtX3Jhd190eXBlKGpzb25fcGFy
YW1ldGVyLCBzY29wZV9kb21haW5fbmFtZSk6Ci0gICAgaWYgIiRyZWYiIGluIGpzb25fcGFyYW1l
dGVyOgotICAgICAgICBqc29uX3JlZiA9IGpzb25fcGFyYW1ldGVyWyIkcmVmIl0KLSAgICAgICAg
dHlwZV9kYXRhID0gZ2V0X3JlZl9kYXRhKGpzb25fcmVmLCBzY29wZV9kb21haW5fbmFtZSkKLSAg
ICAgICAgcmV0dXJuIHR5cGVfZGF0YS5nZXRfcmF3X3R5cGUoKQotICAgIGVsaWYgInR5cGUiIGlu
IGpzb25fcGFyYW1ldGVyOgotICAgICAgICBqc29uX3R5cGUgPSBqc29uX3BhcmFtZXRlclsidHlw
ZSJdCi0gICAgICAgIHJldHVybiBSYXdUeXBlcy5nZXQoanNvbl90eXBlKQotICAgIGVsc2U6Ci0g
ICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiVW5rbm93biB0eXBlIikKLQotCi1kZWYgZ2V0X3JlZl9k
YXRhKGpzb25fcmVmLCBzY29wZV9kb21haW5fbmFtZSk6Ci0gICAgZG90X3BvcyA9IGpzb25fcmVm
LmZpbmQoIi4iKQotICAgIGlmIGRvdF9wb3MgPT0gLTE6Ci0gICAgICAgIGRvbWFpbl9uYW1lID0g
c2NvcGVfZG9tYWluX25hbWUKLSAgICAgICAgdHlwZV9uYW1lID0ganNvbl9yZWYKLSAgICBlbHNl
OgotICAgICAgICBkb21haW5fbmFtZSA9IGpzb25fcmVmWzpkb3RfcG9zXQotICAgICAgICB0eXBl
X25hbWUgPSBqc29uX3JlZltkb3RfcG9zICsgMTpdCi0KLSAgICByZXR1cm4gdHlwZV9tYXAuZ2V0
KGRvbWFpbl9uYW1lLCB0eXBlX25hbWUpCi0KLQotaW5wdXRfZmlsZSA9IG9wZW4oaW5wdXRfanNv
bl9maWxlbmFtZSwgInIiKQotanNvbl9zdHJpbmcgPSBpbnB1dF9maWxlLnJlYWQoKQotanNvbl9h
cGkgPSBqc29uLmxvYWRzKGpzb25fc3RyaW5nKQotaW5wdXRfZmlsZS5jbG9zZSgpCi1pZiBub3Qg
ImRvbWFpbnMiIGluIGpzb25fYXBpOgotICAgIGpzb25fYXBpID0geyJkb21haW5zIjogW2pzb25f
YXBpXX0KLQotZGVwZW5kZW5jeV9hcGkgPSB7ImRvbWFpbnMiOiBbXX0KLWZvciBkZXBlbmRlbmN5
X2pzb25fZmlsZW5hbWUgaW4gZGVwZW5kZW5jeV9qc29uX2ZpbGVuYW1lczoKLSAgICBkZXBlbmRl
bmN5X2lucHV0X2ZpbGUgPSBvcGVuKGRlcGVuZGVuY3lfanNvbl9maWxlbmFtZSwgInIiKQotICAg
IGRlcGVuZGVuY3lfanNvbl9zdHJpbmcgPSBkZXBlbmRlbmN5X2lucHV0X2ZpbGUucmVhZCgpCi0g
ICAgZGVwZW5kZW5jeV9qc29uX2FwaSA9IGpzb24ubG9hZHMoZGVwZW5kZW5jeV9qc29uX3N0cmlu
ZykKLSAgICBkZXBlbmRlbmN5X2lucHV0X2ZpbGUuY2xvc2UoKQotICAgIGlmIG5vdCAiZG9tYWlu
cyIgaW4gZGVwZW5kZW5jeV9qc29uX2FwaToKLSAgICAgICAgZGVwZW5kZW5jeV9qc29uX2FwaSA9
IHsiZG9tYWlucyI6IFtkZXBlbmRlbmN5X2pzb25fYXBpXX0KLSAgICBkZXBlbmRlbmN5X2FwaVsi
ZG9tYWlucyJdICs9IGRlcGVuZGVuY3lfanNvbl9hcGlbImRvbWFpbnMiXQotCi0KLWNsYXNzIFRl
bXBsYXRlczoKLSAgICBkZWYgZ2V0X3RoaXNfc2NyaXB0X3BhdGhfKGFic29sdXRlX3BhdGgpOgot
ICAgICAgICBhYnNvbHV0ZV9wYXRoID0gb3MucGF0aC5hYnNwYXRoKGFic29sdXRlX3BhdGgpCi0g
ICAgICAgIGNvbXBvbmVudHMgPSBbXQotCi0gICAgICAgIGRlZiBmaWxsX3JlY3Vyc2l2ZShwYXRo
X3BhcnQsIGRlcHRoKToKLSAgICAgICAgICAgIGlmIGRlcHRoIDw9IDAgb3IgcGF0aF9wYXJ0ID09
ICcvJzoKLSAgICAgICAgICAgICAgICByZXR1cm4KLSAgICAgICAgICAgIGZpbGxfcmVjdXJzaXZl
KG9zLnBhdGguZGlybmFtZShwYXRoX3BhcnQpLCBkZXB0aCAtIDEpCi0gICAgICAgICAgICBjb21w
b25lbnRzLmFwcGVuZChvcy5wYXRoLmJhc2VuYW1lKHBhdGhfcGFydCkpCi0KLSAgICAgICAgIyBU
eXBpY2FsIHBhdGggaXMgL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5z
cGVjdG9yLnB5Ci0gICAgICAgICMgTGV0J3MgdGFrZSA0IGNvbXBvbmVudHMgZnJvbSB0aGUgcmVh
bCBwYXRoIHRoZW4uCi0gICAgICAgIGZpbGxfcmVjdXJzaXZlKGFic29sdXRlX3BhdGgsIDQpCi0K
LSAgICAgICAgcmV0dXJuICIvIi5qb2luKGNvbXBvbmVudHMpCi0KLSAgICBmaWxlX2hlYWRlcl8g
PSAoIi8vIEZpbGUgaXMgZ2VuZXJhdGVkIGJ5ICVzXG5cbiIgJSBnZXRfdGhpc19zY3JpcHRfcGF0
aF8oc3lzLmFyZ3ZbMF0pICsKLSIiIi8vIENvcHlyaWdodCAoYykgMjAxMyBBcHBsZSBJbmMuIEFs
bCBSaWdodHMgUmVzZXJ2ZWQuCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIENocm9taXVtIEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgotIiIiKQotCi0gICAgZnJvbnRlbmRfZG9tYWluX2NsYXNzID0g
c3RyaW5nLlRlbXBsYXRlKENvZGVHZW5lcmF0b3JJbnNwZWN0b3JTdHJpbmdzLmZyb250ZW5kX2Rv
bWFpbl9jbGFzcykKLSAgICBiYWNrZW5kX2Rpc3BhdGNoZXJfY29uc3RydWN0b3IgPSBzdHJpbmcu
VGVtcGxhdGUoQ29kZUdlbmVyYXRvckluc3BlY3RvclN0cmluZ3MuYmFja2VuZF9kaXNwYXRjaGVy
X2NvbnN0cnVjdG9yKQotICAgIGJhY2tlbmRfZGlzcGF0Y2hlcl9kaXNwYXRjaF9tZXRob2QgPSBz
dHJpbmcuVGVtcGxhdGUoQ29kZUdlbmVyYXRvckluc3BlY3RvclN0cmluZ3MuYmFja2VuZF9kaXNw
YXRjaGVyX2Rpc3BhdGNoX21ldGhvZCkKLSAgICBiYWNrZW5kX2Rpc3BhdGNoZXJfZGlzcGF0Y2hf
bWV0aG9kX3NpbXBsZSA9IHN0cmluZy5UZW1wbGF0ZShDb2RlR2VuZXJhdG9ySW5zcGVjdG9yU3Ry
aW5ncy5iYWNrZW5kX2Rpc3BhdGNoZXJfZGlzcGF0Y2hfbWV0aG9kX3NpbXBsZSkKLSAgICBiYWNr
ZW5kX21ldGhvZCA9IHN0cmluZy5UZW1wbGF0ZShDb2RlR2VuZXJhdG9ySW5zcGVjdG9yU3RyaW5n
cy5iYWNrZW5kX21ldGhvZCkKLSAgICBmcm9udGVuZF9tZXRob2QgPSBzdHJpbmcuVGVtcGxhdGUo
Q29kZUdlbmVyYXRvckluc3BlY3RvclN0cmluZ3MuZnJvbnRlbmRfbWV0aG9kKQotICAgIGNhbGxi
YWNrX21ldGhvZCA9IHN0cmluZy5UZW1wbGF0ZShDb2RlR2VuZXJhdG9ySW5zcGVjdG9yU3RyaW5n
cy5jYWxsYmFja19tZXRob2QpCi0gICAgZnJvbnRlbmRfaCA9IHN0cmluZy5UZW1wbGF0ZShmaWxl
X2hlYWRlcl8gKyBDb2RlR2VuZXJhdG9ySW5zcGVjdG9yU3RyaW5ncy5mcm9udGVuZF9oKQotICAg
IGJhY2tlbmRfaCA9IHN0cmluZy5UZW1wbGF0ZShmaWxlX2hlYWRlcl8gKyBDb2RlR2VuZXJhdG9y
SW5zcGVjdG9yU3RyaW5ncy5iYWNrZW5kX2gpCi0gICAgYmFja2VuZF9jcHAgPSBzdHJpbmcuVGVt
cGxhdGUoZmlsZV9oZWFkZXJfICsgQ29kZUdlbmVyYXRvckluc3BlY3RvclN0cmluZ3MuYmFja2Vu
ZF9jcHApCi0gICAgZnJvbnRlbmRfY3BwID0gc3RyaW5nLlRlbXBsYXRlKGZpbGVfaGVhZGVyXyAr
IENvZGVHZW5lcmF0b3JJbnNwZWN0b3JTdHJpbmdzLmZyb250ZW5kX2NwcCkKLSAgICB0eXBlYnVp
bGRlcl9oID0gc3RyaW5nLlRlbXBsYXRlKGZpbGVfaGVhZGVyXyArIENvZGVHZW5lcmF0b3JJbnNw
ZWN0b3JTdHJpbmdzLnR5cGVidWlsZGVyX2gpCi0gICAgdHlwZWJ1aWxkZXJfY3BwID0gc3RyaW5n
LlRlbXBsYXRlKGZpbGVfaGVhZGVyXyArIENvZGVHZW5lcmF0b3JJbnNwZWN0b3JTdHJpbmdzLnR5
cGVidWlsZGVyX2NwcCkKLSAgICBiYWNrZW5kX2pzID0gc3RyaW5nLlRlbXBsYXRlKGZpbGVfaGVh
ZGVyXyArIENvZGVHZW5lcmF0b3JJbnNwZWN0b3JTdHJpbmdzLmJhY2tlbmRfanMpCi0gICAgcGFy
YW1fY29udGFpbmVyX2FjY2Vzc19jb2RlID0gQ29kZUdlbmVyYXRvckluc3BlY3RvclN0cmluZ3Mu
cGFyYW1fY29udGFpbmVyX2FjY2Vzc19jb2RlCi0KLQotCi0KLQotdHlwZV9tYXAgPSBUeXBlTWFw
KGpzb25fYXBpLCBkZXBlbmRlbmN5X2FwaSkKLQotCi1jbGFzcyBOZWVkUnVudGltZUNhc3RSZXF1
ZXN0OgotICAgIGRlZiBfX2luaXRfXyhzZWxmKToKLSAgICAgICAgc2VsZi5hY2tfID0gTm9uZQot
Ci0gICAgZGVmIGFja25vd2xlZGdlKHNlbGYpOgotICAgICAgICBzZWxmLmFja18gPSBUcnVlCi0K
LSAgICBkZWYgaXNfYWNrbm93bGVkZ2VkKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5hY2tf
Ci0KLQotZGVmIHJlc29sdmVfYWxsX3R5cGVzKCk6Ci0gICAgcnVudGltZV9jYXN0X2dlbmVyYXRl
X3JlcXVlc3RzID0ge30KLSAgICBmb3IgdHlwZV9uYW1lIGluIFRZUEVTX1dJVEhfUlVOVElNRV9D
QVNUX1NFVDoKLSAgICAgICAgcnVudGltZV9jYXN0X2dlbmVyYXRlX3JlcXVlc3RzW3R5cGVfbmFt
ZV0gPSBOZWVkUnVudGltZUNhc3RSZXF1ZXN0KCkKLQotICAgIGNsYXNzIEZvcndhcmRMaXN0ZW5l
cjoKLSAgICAgICAgdHlwZV9kYXRhX3NldCA9IHNldCgpCi0gICAgICAgIGFscmVhZHlfZGVjbGFy
ZWRfc2V0ID0gc2V0KCkKLQotICAgICAgICBAY2xhc3NtZXRob2QKLSAgICAgICAgZGVmIGFkZF90
eXBlX2RhdGEoY2xzLCB0eXBlX2RhdGEpOgotICAgICAgICAgICAgaWYgdHlwZV9kYXRhIG5vdCBp
biBjbHMuYWxyZWFkeV9kZWNsYXJlZF9zZXQ6Ci0gICAgICAgICAgICAgICAgY2xzLnR5cGVfZGF0
YV9zZXQuYWRkKHR5cGVfZGF0YSkKLQotICAgIGNsYXNzIFJlc29sdmVDb250ZXh0OgotICAgICAg
ICBmb3J3YXJkX2xpc3RlbmVyID0gRm9yd2FyZExpc3RlbmVyCi0KLSAgICBmb3IgZG9tYWluX2Rh
dGEgaW4gdHlwZV9tYXAuZG9tYWlucygpOgotICAgICAgICBmb3IgdHlwZV9kYXRhIGluIGRvbWFp
bl9kYXRhLnR5cGVzKCk6Ci0gICAgICAgICAgICBiaW5kaW5nID0gdHlwZV9kYXRhLmdldF9iaW5k
aW5nKCkKLSAgICAgICAgICAgIGJpbmRpbmcucmVzb2x2ZV9pbm5lcihSZXNvbHZlQ29udGV4dCkK
LSAgICAgICAgICAgICMgRG8gbm90IGdlbmVyYXRlIGZvcndhcmRzIGZvciB0aGlzIHR5cGUgYW55
IGxvbmdlci4KLSAgICAgICAgICAgIEZvcndhcmRMaXN0ZW5lci5hbHJlYWR5X2RlY2xhcmVkX3Nl
dC5hZGQodHlwZV9kYXRhKQotCi0gICAgZm9yIGRvbWFpbl9kYXRhIGluIHR5cGVfbWFwLmRvbWFp
bnMoKToKLSAgICAgICAgZm9yIHR5cGVfZGF0YSBpbiBkb21haW5fZGF0YS50eXBlcygpOgotICAg
ICAgICAgICAgZnVsbF90eXBlX25hbWUgPSAiJXMuJXMiICUgKHR5cGVfZGF0YS5nZXRfZG9tYWlu
X25hbWUoKSwgdHlwZV9kYXRhLmdldF9uYW1lKCkpCi0gICAgICAgICAgICByZXF1ZXN0ID0gcnVu
dGltZV9jYXN0X2dlbmVyYXRlX3JlcXVlc3RzLnBvcChmdWxsX3R5cGVfbmFtZSwgTm9uZSkKLSAg
ICAgICAgICAgIGJpbmRpbmcgPSB0eXBlX2RhdGEuZ2V0X2JpbmRpbmcoKQotICAgICAgICAgICAg
aWYgcmVxdWVzdDoKLSAgICAgICAgICAgICAgICBiaW5kaW5nLnJlcXVlc3RfdXNlcl9ydW50aW1l
X2Nhc3QocmVxdWVzdCkKLQotICAgICAgICAgICAgaWYgcmVxdWVzdCBhbmQgbm90IHJlcXVlc3Qu
aXNfYWNrbm93bGVkZ2VkKCk6Ci0gICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJGYWls
ZWQgdG8gZ2VuZXJhdGUgcnVudGltZUNhc3QgaW4gIiArIGZ1bGxfdHlwZV9uYW1lKQotCi0gICAg
IyBGSVhNRTogVGhpcyBhc3N1bWVzIGFsbCB0aGUgZG9tYWlucyBhcmUgcHJvY2Vzc2VkIGF0IG9u
Y2UuIENoYW5nZSB0aGlzIHZlcmlmaWNhdGlvbgotICAgICMgdG8gb25seSB2ZXJpZnkgcnVudGlt
ZSBjYXN0cyBmb3IgdGhlIGRvbWFpbnMgYmVpbmcgZ2VuZXJhdGVkLgotICAgICMgaWYgdmVyaWZp
Y2F0aW9uOgotICAgICMgICAgIGZvciBmdWxsX3R5cGVfbmFtZSBpbiBydW50aW1lX2Nhc3RfZ2Vu
ZXJhdGVfcmVxdWVzdHM6Ci0gICAgIyAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiRmFpbGVkIHRv
IGdlbmVyYXRlIHJ1bnRpbWVDYXN0LiBUeXBlICIgKyBmdWxsX3R5cGVfbmFtZSArICIgbm90IGZv
dW5kIikKLQotICAgIHJldHVybiBGb3J3YXJkTGlzdGVuZXIKLQotCi1nbG9iYWxfZm9yd2FyZF9s
aXN0ZW5lciA9IHJlc29sdmVfYWxsX3R5cGVzKCkKLQotCi1kZWYgZ2V0X2Fubm90YXRlZF90eXBl
X3RleHQocmF3X3R5cGUsIGFubm90YXRlZF90eXBlKToKLSAgICBpZiBhbm5vdGF0ZWRfdHlwZSAh
PSByYXdfdHlwZToKLSAgICAgICAgcmV0dXJuICIvKiVzKi8gJXMiICUgKGFubm90YXRlZF90eXBl
LCByYXdfdHlwZSkKLSAgICBlbHNlOgotICAgICAgICByZXR1cm4gcmF3X3R5cGUKLQotCi1kZWYg
Zm9ybWF0X3NldHRlcl92YWx1ZV9leHByZXNzaW9uKHBhcmFtX3R5cGVfYmluZGluZywgdmFsdWVf
cmVmKToKLSAgICBwYXR0ZXJuID0gcGFyYW1fdHlwZV9iaW5kaW5nLmdldF9zZXR0ZXJfdmFsdWVf
ZXhwcmVzc2lvbl9wYXR0ZXJuKCkKLSAgICBpZiBwYXR0ZXJuOgotICAgICAgICByZXR1cm4gcGF0
dGVybiAlIChJTlNQRUNUT1JfVFlQRVNfR0VORVJBVE9SX0NPTkZJR19NQVBbb3V0cHV0X3R5cGVd
WyJwcmVmaXgiXSwgdmFsdWVfcmVmKQotICAgIGVsc2U6Ci0gICAgICAgIHJldHVybiB2YWx1ZV9y
ZWYKLQotCi1jbGFzcyBHZW5lcmF0b3I6Ci0gICAgZnJvbnRlbmRfZG9tYWluX2NsYXNzX2xpbmVz
ID0gW10KLQotICAgIGJhY2tlbmRfbWV0aG9kX2ltcGxlbWVudGF0aW9uX2xpc3QgPSBbXQotICAg
IGZyb250ZW5kX21ldGhvZF9saXN0ID0gW10KLSAgICBiYWNrZW5kX2pzX2RvbWFpbl9pbml0aWFs
aXplcl9saXN0ID0gW10KLQotICAgIGJhY2tlbmRfaGFuZGxlcl9pbnRlcmZhY2VfbGlzdCA9IFtd
Ci0gICAgYmFja2VuZF9oYW5kbGVyX2ltcGxlbWVudGF0aW9uX2xpc3QgPSBbXQotICAgIGJhY2tl
bmRfZGlzcGF0Y2hlcl9pbnRlcmZhY2VfbGlzdCA9IFtdCi0gICAgdHlwZV9idWlsZGVyX2ZyYWdt
ZW50cyA9IFtdCi0gICAgdHlwZV9idWlsZGVyX2ZvcndhcmRzID0gW10KLSAgICB2YWxpZGF0b3Jf
aW1wbF9saXN0ID0gW10KLSAgICB0eXBlX2J1aWxkZXJfaW1wbF9saXN0ID0gW10KLQotCi0gICAg
QHN0YXRpY21ldGhvZAotICAgIGRlZiBnbygpOgotICAgICAgICBHZW5lcmF0b3IucHJvY2Vzc190
eXBlcyh0eXBlX21hcCkKLQotICAgICAgICBmaXJzdF9jeWNsZV9ndWFyZGFibGVfbGlzdF9saXN0
ID0gWwotICAgICAgICAgICAgR2VuZXJhdG9yLmJhY2tlbmRfbWV0aG9kX2ltcGxlbWVudGF0aW9u
X2xpc3QsCi0gICAgICAgICAgICBHZW5lcmF0b3IuYmFja2VuZF9oYW5kbGVyX2ludGVyZmFjZV9s
aXN0LAotICAgICAgICAgICAgR2VuZXJhdG9yLmJhY2tlbmRfaGFuZGxlcl9pbXBsZW1lbnRhdGlv
bl9saXN0LAotICAgICAgICAgICAgR2VuZXJhdG9yLmJhY2tlbmRfZGlzcGF0Y2hlcl9pbnRlcmZh
Y2VfbGlzdF0KLQotICAgICAgICBmb3IganNvbl9kb21haW4gaW4ganNvbl9hcGlbImRvbWFpbnMi
XToKLSAgICAgICAgICAgIGRvbWFpbl9uYW1lID0ganNvbl9kb21haW5bImRvbWFpbiJdCi0gICAg
ICAgICAgICBkb21haW5fbmFtZV9sb3dlciA9IGRvbWFpbl9uYW1lLmxvd2VyKCkKLQotICAgICAg
ICAgICAgZG9tYWluX2ZpeGVzID0gRG9tYWluTmFtZUZpeGVzLmdldF9maXhlZF9kYXRhKGRvbWFp
bl9uYW1lKQotCi0gICAgICAgICAgICBkb21haW5fZ3VhcmQgPSBkb21haW5fZml4ZXMuZ2V0X2d1
YXJkKCkKLQotICAgICAgICAgICAgaWYgZG9tYWluX2d1YXJkOgotICAgICAgICAgICAgICAgIGZv
ciBsIGluIGZpcnN0X2N5Y2xlX2d1YXJkYWJsZV9saXN0X2xpc3Q6Ci0gICAgICAgICAgICAgICAg
ICAgIGRvbWFpbl9ndWFyZC5nZW5lcmF0ZV9vcGVuKGwpCi0KLSAgICAgICAgICAgIGZyb250ZW5k
X21ldGhvZF9kZWNsYXJhdGlvbl9saW5lcyA9IFtdCi0KLSAgICAgICAgICAgIGlmICgiY29tbWFu
ZHMiIGluIGpzb25fZG9tYWluIG9yICJldmVudHMiIGluIGpzb25fZG9tYWluKToKLSAgICAgICAg
ICAgICAgICBHZW5lcmF0b3IuYmFja2VuZF9qc19kb21haW5faW5pdGlhbGl6ZXJfbGlzdC5hcHBl
bmQoIi8vICVzLlxuIiAlIGRvbWFpbl9uYW1lKQotICAgICAgICAgICAgICAgIGlmIG5vdCBkb21h
aW5fZml4ZXMuc2tpcF9qc19iaW5kOgotICAgICAgICAgICAgICAgICAgICBHZW5lcmF0b3IuYmFj
a2VuZF9qc19kb21haW5faW5pdGlhbGl6ZXJfbGlzdC5hcHBlbmQoIkluc3BlY3RvckJhY2tlbmQu
cmVnaXN0ZXIlc0Rpc3BhdGNoZXIgPSBJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluRGlz
cGF0Y2hlci5iaW5kKEluc3BlY3RvckJhY2tlbmQsIFwiJXNcIik7XG4iICUgKGRvbWFpbl9uYW1l
LCBkb21haW5fbmFtZSkpCi0KLSAgICAgICAgICAgIGlmICJ0eXBlcyIgaW4ganNvbl9kb21haW46
Ci0gICAgICAgICAgICAgICAgZm9yIGpzb25fdHlwZSBpbiBqc29uX2RvbWFpblsidHlwZXMiXToK
LSAgICAgICAgICAgICAgICAgICAgaWYgInR5cGUiIGluIGpzb25fdHlwZSBhbmQganNvbl90eXBl
WyJ0eXBlIl0gPT0gInN0cmluZyIgYW5kICJlbnVtIiBpbiBqc29uX3R5cGU6Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBlbnVtX25hbWUgPSAiJXMuJXMiICUgKGRvbWFpbl9uYW1lLCBqc29uX3R5
cGVbImlkIl0pCi0gICAgICAgICAgICAgICAgICAgICAgICBHZW5lcmF0b3IucHJvY2Vzc19lbnVt
KGpzb25fdHlwZSwgZW51bV9uYW1lKQotICAgICAgICAgICAgICAgICAgICBlbGlmIGpzb25fdHlw
ZVsidHlwZSJdID09ICJvYmplY3QiOgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgInByb3Bl
cnRpZXMiIGluIGpzb25fdHlwZToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IganNv
bl9wcm9wZXJ0eSBpbiBqc29uX3R5cGVbInByb3BlcnRpZXMiXToKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgInR5cGUiIGluIGpzb25fcHJvcGVydHkgYW5kIGpzb25fcHJvcGVy
dHlbInR5cGUiXSA9PSAic3RyaW5nIiBhbmQgImVudW0iIGluIGpzb25fcHJvcGVydHk6Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtX25hbWUgPSAiJXMuJXMlcyIgJSAo
ZG9tYWluX25hbWUsIGpzb25fdHlwZVsiaWQiXSwgdG9fdGl0bGVfY2FzZShqc29uX3Byb3BlcnR5
WyJuYW1lIl0pKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2VuZXJhdG9y
LnByb2Nlc3NfZW51bShqc29uX3Byb3BlcnR5LCBlbnVtX25hbWUpCi0KLSAgICAgICAgICAgIGlm
ICJldmVudHMiIGluIGpzb25fZG9tYWluOgotICAgICAgICAgICAgICAgIGlmIGRvbWFpbl9ndWFy
ZDoKLSAgICAgICAgICAgICAgICAgICAgZG9tYWluX2d1YXJkLmdlbmVyYXRlX29wZW4oR2VuZXJh
dG9yLmZyb250ZW5kX21ldGhvZF9saXN0KQotICAgICAgICAgICAgICAgICAgICBkb21haW5fZ3Vh
cmQuZ2VuZXJhdGVfb3BlbihHZW5lcmF0b3IuZnJvbnRlbmRfZG9tYWluX2NsYXNzX2xpbmVzKQot
Ci0gICAgICAgICAgICAgICAgZm9yIGpzb25fZXZlbnQgaW4ganNvbl9kb21haW5bImV2ZW50cyJd
OgotICAgICAgICAgICAgICAgICAgICBHZW5lcmF0b3IucHJvY2Vzc19ldmVudChqc29uX2V2ZW50
LCBkb21haW5fbmFtZSwgZnJvbnRlbmRfbWV0aG9kX2RlY2xhcmF0aW9uX2xpbmVzKQotCi0gICAg
ICAgICAgICAgICAgR2VuZXJhdG9yLmZyb250ZW5kX2RvbWFpbl9jbGFzc19saW5lcy5hcHBlbmQo
VGVtcGxhdGVzLmZyb250ZW5kX2RvbWFpbl9jbGFzcy5zdWJzdGl0dXRlKE5vbmUsCi0gICAgICAg
ICAgICAgICAgICAgIGV4cG9ydE1hY3JvPUlOU1BFQ1RPUl9UWVBFU19HRU5FUkFUT1JfQ09ORklH
X01BUFtvdXRwdXRfdHlwZV1bImV4cG9ydF9tYWNybyJdLAotICAgICAgICAgICAgICAgICAgICBk
b21haW5DbGFzc05hbWU9Ikluc3BlY3RvciVzRnJvbnRlbmREaXNwYXRjaGVyIiAlIGRvbWFpbl9u
YW1lLAotICAgICAgICAgICAgICAgICAgICBmcm9udGVuZERvbWFpbk1ldGhvZERlY2xhcmF0aW9u
cz0iIi5qb2luKGZsYXR0ZW5fbGlzdChmcm9udGVuZF9tZXRob2RfZGVjbGFyYXRpb25fbGluZXMp
KSkpCi0KLSAgICAgICAgICAgICAgICBpZiBkb21haW5fZ3VhcmQ6Ci0gICAgICAgICAgICAgICAg
ICAgIGRvbWFpbl9ndWFyZC5nZW5lcmF0ZV9jbG9zZShHZW5lcmF0b3IuZnJvbnRlbmRfbWV0aG9k
X2xpc3QpCi0gICAgICAgICAgICAgICAgICAgIGRvbWFpbl9ndWFyZC5nZW5lcmF0ZV9jbG9zZShH
ZW5lcmF0b3IuZnJvbnRlbmRfZG9tYWluX2NsYXNzX2xpbmVzKQotCi0gICAgICAgICAgICBkaXNw
YXRjaGVyX25hbWUgPSAiSW5zcGVjdG9yIiArIENhcGl0YWxpemVyLmxvd2VyX2NhbWVsX2Nhc2Vf
dG9fdXBwZXIoZG9tYWluX25hbWUpICsgIkJhY2tlbmREaXNwYXRjaGVyIgotICAgICAgICAgICAg
YWdlbnRfaW50ZXJmYWNlX25hbWUgPSBkaXNwYXRjaGVyX25hbWUgKyAiSGFuZGxlciIKLQotICAg
ICAgICAgICAgaWYgImNvbW1hbmRzIiBpbiBqc29uX2RvbWFpbjoKLSAgICAgICAgICAgICAgICBH
ZW5lcmF0b3IuYmFja2VuZF9kaXNwYXRjaGVyX2ludGVyZmFjZV9saXN0LmFwcGVuZCgiY2xhc3Mg
JXMgJXMgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JTdXBwbGVtZW50YWxCYWNr
ZW5kRGlzcGF0Y2hlciB7XG4iICUgKElOU1BFQ1RPUl9UWVBFU19HRU5FUkFUT1JfQ09ORklHX01B
UFtvdXRwdXRfdHlwZV1bImV4cG9ydF9tYWNybyJdLCBkaXNwYXRjaGVyX25hbWUpKQotICAgICAg
ICAgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX2Rpc3BhdGNoZXJfaW50ZXJmYWNlX2xpc3QuYXBw
ZW5kKCJwdWJsaWM6XG4iKQotICAgICAgICAgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX2Rpc3Bh
dGNoZXJfaW50ZXJmYWNlX2xpc3QuYXBwZW5kKCIgICAgc3RhdGljIFBhc3NSZWZQdHI8JXM+IGNy
ZWF0ZShJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiwgJXMqKTtcbiIgJSAo
ZGlzcGF0Y2hlcl9uYW1lLCBhZ2VudF9pbnRlcmZhY2VfbmFtZSkpCi0gICAgICAgICAgICAgICAg
R2VuZXJhdG9yLmJhY2tlbmRfZGlzcGF0Y2hlcl9pbnRlcmZhY2VfbGlzdC5hcHBlbmQoIiAgICB2
aXJ0dWFsIHZvaWQgZGlzcGF0Y2gobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBQ
YXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBtZXNzYWdlKSBvdmVycmlkZTtc
biIpCi0gICAgICAgICAgICAgICAgR2VuZXJhdG9yLmJhY2tlbmRfZGlzcGF0Y2hlcl9pbnRlcmZh
Y2VfbGlzdC5hcHBlbmQoInByaXZhdGU6XG4iKQotCi0gICAgICAgICAgICAgICAgR2VuZXJhdG9y
LmJhY2tlbmRfaGFuZGxlcl9pbnRlcmZhY2VfbGlzdC5hcHBlbmQoImNsYXNzICVzICVzIHtcbiIg
JSAoSU5TUEVDVE9SX1RZUEVTX0dFTkVSQVRPUl9DT05GSUdfTUFQW291dHB1dF90eXBlXVsiZXhw
b3J0X21hY3JvIl0sIGFnZW50X2ludGVyZmFjZV9uYW1lKSkKLSAgICAgICAgICAgICAgICBHZW5l
cmF0b3IuYmFja2VuZF9oYW5kbGVyX2ludGVyZmFjZV9saXN0LmFwcGVuZCgicHVibGljOlxuIikK
LQotICAgICAgICAgICAgICAgIGJhY2tlbmRfbWV0aG9kX2NvdW50ID0gbGVuKEdlbmVyYXRvci5i
YWNrZW5kX21ldGhvZF9pbXBsZW1lbnRhdGlvbl9saXN0KQotCi0gICAgICAgICAgICAgICAgZGlz
cGF0Y2hlcl9pZl9jaGFpbiA9IFtdCi0gICAgICAgICAgICAgICAgZGlzcGF0Y2hlcl9jb21tYW5k
c19saXN0ID0gW10KLSAgICAgICAgICAgICAgICBmb3IganNvbl9jb21tYW5kIGluIGpzb25fZG9t
YWluWyJjb21tYW5kcyJdOgotICAgICAgICAgICAgICAgICAgICBHZW5lcmF0b3IucHJvY2Vzc19j
b21tYW5kKGpzb25fY29tbWFuZCwgZG9tYWluX25hbWUsIGFnZW50X2ludGVyZmFjZV9uYW1lLCBk
aXNwYXRjaGVyX25hbWUsIGRpc3BhdGNoZXJfaWZfY2hhaW4sIGRpc3BhdGNoZXJfY29tbWFuZHNf
bGlzdCkKLQotICAgICAgICAgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX2hhbmRsZXJfaW50ZXJm
YWNlX2xpc3QuYXBwZW5kKCJwcm90ZWN0ZWQ6XG4iKQotICAgICAgICAgICAgICAgIEdlbmVyYXRv
ci5iYWNrZW5kX2hhbmRsZXJfaW50ZXJmYWNlX2xpc3QuYXBwZW5kKCIgICAgdmlydHVhbCB+JXMo
KTtcbiIgJSBhZ2VudF9pbnRlcmZhY2VfbmFtZSkKLSAgICAgICAgICAgICAgICBHZW5lcmF0b3Iu
YmFja2VuZF9oYW5kbGVyX2ludGVyZmFjZV9saXN0LmFwcGVuZCgifTtcblxuIikKLQotICAgICAg
ICAgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX2hhbmRsZXJfaW1wbGVtZW50YXRpb25fbGlzdC5h
cHBlbmQoIiVzOjp+JXMoKSB7IH1cbiIgJSAoYWdlbnRfaW50ZXJmYWNlX25hbWUsIGFnZW50X2lu
dGVyZmFjZV9uYW1lKSkKLQotICAgICAgICAgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX2Rpc3Bh
dGNoZXJfaW50ZXJmYWNlX2xpc3QuYXBwZW5kKCJwcml2YXRlOlxuIikKLSAgICAgICAgICAgICAg
ICBHZW5lcmF0b3IuYmFja2VuZF9kaXNwYXRjaGVyX2ludGVyZmFjZV9saXN0LmFwcGVuZCgiICAg
ICVzKEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqLCAlcyopO1xuIiAlIChk
aXNwYXRjaGVyX25hbWUsIGFnZW50X2ludGVyZmFjZV9uYW1lKSkKLSAgICAgICAgICAgICAgICBH
ZW5lcmF0b3IuYmFja2VuZF9kaXNwYXRjaGVyX2ludGVyZmFjZV9saXN0LmFwcGVuZCgiICAgICVz
KiBtX2FnZW50O1xuIiAlIGFnZW50X2ludGVyZmFjZV9uYW1lKQotICAgICAgICAgICAgICAgIEdl
bmVyYXRvci5iYWNrZW5kX2Rpc3BhdGNoZXJfaW50ZXJmYWNlX2xpc3QuYXBwZW5kKCJ9O1xuXG4i
KQotCi0gICAgICAgICAgICAgICAgR2VuZXJhdG9yLmJhY2tlbmRfbWV0aG9kX2ltcGxlbWVudGF0
aW9uX2xpc3QuaW5zZXJ0KGJhY2tlbmRfbWV0aG9kX2NvdW50LCBUZW1wbGF0ZXMuYmFja2VuZF9k
aXNwYXRjaGVyX2NvbnN0cnVjdG9yLnN1YnN0aXR1dGUoTm9uZSwKLSAgICAgICAgICAgICAgICAg
ICAgZG9tYWluTmFtZT1kb21haW5fbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hl
ck5hbWU9ZGlzcGF0Y2hlcl9uYW1lLAotICAgICAgICAgICAgICAgICAgICBhZ2VudE5hbWU9YWdl
bnRfaW50ZXJmYWNlX25hbWUpKQotCi0gICAgICAgICAgICAgICAgaWYgbGVuKGpzb25fZG9tYWlu
WyJjb21tYW5kcyJdKSA8PSA1OgotICAgICAgICAgICAgICAgICAgICBHZW5lcmF0b3IuYmFja2Vu
ZF9tZXRob2RfaW1wbGVtZW50YXRpb25fbGlzdC5pbnNlcnQoYmFja2VuZF9tZXRob2RfY291bnQg
KyAxLCBUZW1wbGF0ZXMuYmFja2VuZF9kaXNwYXRjaGVyX2Rpc3BhdGNoX21ldGhvZF9zaW1wbGUu
c3Vic3RpdHV0ZShOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgZG9tYWluTmFtZT1kb21h
aW5fbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoZXJOYW1lPWRpc3BhdGNo
ZXJfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmQ2hhaW49IlxuIi5qb2luKGRpc3Bh
dGNoZXJfaWZfY2hhaW4pKSkKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAg
ICAgICBHZW5lcmF0b3IuYmFja2VuZF9tZXRob2RfaW1wbGVtZW50YXRpb25fbGlzdC5pbnNlcnQo
YmFja2VuZF9tZXRob2RfY291bnQgKyAxLCBUZW1wbGF0ZXMuYmFja2VuZF9kaXNwYXRjaGVyX2Rp
c3BhdGNoX21ldGhvZC5zdWJzdGl0dXRlKE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICBk
b21haW5OYW1lPWRvbWFpbl9uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hl
ck5hbWU9ZGlzcGF0Y2hlcl9uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hl
ckNvbW1hbmRzPSJcbiIuam9pbihkaXNwYXRjaGVyX2NvbW1hbmRzX2xpc3QpKSkKLQotICAgICAg
ICAgICAgICAgIGlmIGRvbWFpbl9ndWFyZDoKLSAgICAgICAgICAgICAgICAgICAgZm9yIGwgaW4g
cmV2ZXJzZWQoZmlyc3RfY3ljbGVfZ3VhcmRhYmxlX2xpc3RfbGlzdCk6Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBkb21haW5fZ3VhcmQuZ2VuZXJhdGVfY2xvc2UobCkKLSAgICAgICAgICAgICAg
ICBHZW5lcmF0b3IuYmFja2VuZF9qc19kb21haW5faW5pdGlhbGl6ZXJfbGlzdC5hcHBlbmQoIlxu
IikKLQotICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgcHJvY2Vzc19lbnVtKGpzb25fZW51bSwg
ZW51bV9uYW1lKToKLSAgICAgICAgZW51bV9tZW1iZXJzID0gW10KLSAgICAgICAgZm9yIG1lbWJl
ciBpbiBqc29uX2VudW1bImVudW0iXToKLSAgICAgICAgICAgIGVudW1fbWVtYmVycy5hcHBlbmQo
IiVzOiBcIiVzXCIiICUgKGZpeF9jYW1lbF9jYXNlKG1lbWJlciksIG1lbWJlcikpCi0KLSAgICAg
ICAgR2VuZXJhdG9yLmJhY2tlbmRfanNfZG9tYWluX2luaXRpYWxpemVyX2xpc3QuYXBwZW5kKCJJ
bnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRW51bShcIiVzXCIsIHslc30pO1xuIiAlICgKLSAgICAg
ICAgICAgIGVudW1fbmFtZSwgIiwgIi5qb2luKGVudW1fbWVtYmVycykpKQotCi0gICAgQHN0YXRp
Y21ldGhvZAotICAgIGRlZiBwcm9jZXNzX2V2ZW50KGpzb25fZXZlbnQsIGRvbWFpbl9uYW1lLCBm
cm9udGVuZF9tZXRob2RfZGVjbGFyYXRpb25fbGluZXMpOgotICAgICAgICBldmVudF9uYW1lID0g
anNvbl9ldmVudFsibmFtZSJdCi0KLSAgICAgICAgYWRfaG9jX3R5cGVfb3V0cHV0ID0gW10KLSAg
ICAgICAgZnJvbnRlbmRfbWV0aG9kX2RlY2xhcmF0aW9uX2xpbmVzLmFwcGVuZChhZF9ob2NfdHlw
ZV9vdXRwdXQpCi0gICAgICAgIGFkX2hvY190eXBlX3dyaXRlciA9IFdyaXRlcihhZF9ob2NfdHlw
ZV9vdXRwdXQsICIgICAgICAgICIpCi0KLSAgICAgICAgZGVjbF9wYXJhbWV0ZXJfbGlzdCA9IFtd
Ci0KLSAgICAgICAganNvbl9wYXJhbWV0ZXJzID0ganNvbl9ldmVudC5nZXQoInBhcmFtZXRlcnMi
KQotICAgICAgICBHZW5lcmF0b3IuZ2VuZXJhdGVfc2VuZF9tZXRob2QoanNvbl9wYXJhbWV0ZXJz
LCBldmVudF9uYW1lLCBkb21haW5fbmFtZSwgYWRfaG9jX3R5cGVfd3JpdGVyLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjbF9wYXJhbWV0ZXJfbGlzdCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdlbmVyYXRvci5FdmVudE1ldGhvZFN0
cnVjdFRlbXBsYXRlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2Vu
ZXJhdG9yLmZyb250ZW5kX21ldGhvZF9saXN0LCBUZW1wbGF0ZXMuZnJvbnRlbmRfbWV0aG9kLCB7
ImV2ZW50TmFtZSI6IGV2ZW50X25hbWV9KQotCi0gICAgICAgIGJhY2tlbmRfanNfZXZlbnRfcGFy
YW1fbGlzdCA9IFtdCi0gICAgICAgIGlmIGpzb25fcGFyYW1ldGVyczoKLSAgICAgICAgICAgIGZv
ciBwYXJhbWV0ZXIgaW4ganNvbl9wYXJhbWV0ZXJzOgotICAgICAgICAgICAgICAgIHBhcmFtZXRl
cl9uYW1lID0gcGFyYW1ldGVyWyJuYW1lIl0KLSAgICAgICAgICAgICAgICBiYWNrZW5kX2pzX2V2
ZW50X3BhcmFtX2xpc3QuYXBwZW5kKCJcIiVzXCIiICUgcGFyYW1ldGVyX25hbWUpCi0KLSAgICAg
ICAgZnJvbnRlbmRfbWV0aG9kX2RlY2xhcmF0aW9uX2xpbmVzLmFwcGVuZCgKLSAgICAgICAgICAg
ICIgICAgdm9pZCAlcyglcyk7XG4iICUgKGV2ZW50X25hbWUsICIsICIuam9pbihkZWNsX3BhcmFt
ZXRlcl9saXN0KSkpCi0KLSAgICAgICAgR2VuZXJhdG9yLmJhY2tlbmRfanNfZG9tYWluX2luaXRp
YWxpemVyX2xpc3QuYXBwZW5kKCJJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRXZlbnQoXCIlcy4l
c1wiLCBbJXNdKTtcbiIgJSAoCi0gICAgICAgICAgICBkb21haW5fbmFtZSwgZXZlbnRfbmFtZSwg
IiwgIi5qb2luKGJhY2tlbmRfanNfZXZlbnRfcGFyYW1fbGlzdCkpKQotCi0gICAgY2xhc3MgRXZl
bnRNZXRob2RTdHJ1Y3RUZW1wbGF0ZToKLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBk
ZWYgYXBwZW5kX3Byb2xvZyhsaW5lX2xpc3QpOgotICAgICAgICAgICAgbGluZV9saXN0LmFwcGVu
ZCgiICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCk7XG4iKQotCi0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVm
IGFwcGVuZF9lcGlsb2cobGluZV9saXN0KToKLSAgICAgICAgICAgIGxpbmVfbGlzdC5hcHBlbmQo
IiAgICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbChcInBhcmFtc1wiKSwgcGFy
YW1zT2JqZWN0KTtcbiIpCi0KLSAgICAgICAgY29udGFpbmVyX25hbWUgPSAicGFyYW1zT2JqZWN0
IgotCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBwcm9jZXNzX2NvbW1hbmQoanNvbl9jb21t
YW5kLCBkb21haW5fbmFtZSwgYWdlbnRfaW50ZXJmYWNlX25hbWUsIGRpc3BhdGNoZXJfbmFtZSwg
ZGlzcGF0Y2hlcl9pZl9jaGFpbiwgZGlzcGF0Y2hlcl9jb21tYW5kc19saXN0KToKLSAgICAgICAg
anNvbl9jb21tYW5kX25hbWUgPSBqc29uX2NvbW1hbmRbIm5hbWUiXQotCi0gICAgICAgIGFkX2hv
Y190eXBlX291dHB1dCA9IFtdCi0gICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX2hhbmRsZXJfaW50
ZXJmYWNlX2xpc3QuYXBwZW5kKGFkX2hvY190eXBlX291dHB1dCkKLSAgICAgICAgYWRfaG9jX3R5
cGVfd3JpdGVyID0gV3JpdGVyKGFkX2hvY190eXBlX291dHB1dCwgIiAgICAiKQotCi0gICAgICAg
IEdlbmVyYXRvci5iYWNrZW5kX2Rpc3BhdGNoZXJfaW50ZXJmYWNlX2xpc3QuYXBwZW5kKCIgICAg
dm9pZCAlcyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QmIG1l
c3NhZ2UpO1xuIiAlIGpzb25fY29tbWFuZF9uYW1lKQotCi0gICAgICAgIEdlbmVyYXRvci5iYWNr
ZW5kX2hhbmRsZXJfaW50ZXJmYWNlX2xpc3QuYXBwZW5kKCIgICAgdmlydHVhbCB2b2lkICVzKEVy
cm9yU3RyaW5nKiIgJSBqc29uX2NvbW1hbmRfbmFtZSkKLQotICAgICAgICBpZiBub3QgZGlzcGF0
Y2hlcl9pZl9jaGFpbjoKLSAgICAgICAgICAgIGRpc3BhdGNoZXJfaWZfY2hhaW4uYXBwZW5kKCIg
ICAgaWYgKG1ldGhvZCA9PSBcIiVzXCIpIiAlIGpzb25fY29tbWFuZF9uYW1lKQotICAgICAgICBl
bHNlOgotICAgICAgICAgICAgZGlzcGF0Y2hlcl9pZl9jaGFpbi5hcHBlbmQoIiAgICBlbHNlIGlm
IChtZXRob2QgPT0gXCIlc1wiKSIgJSBqc29uX2NvbW1hbmRfbmFtZSkKLSAgICAgICAgZGlzcGF0
Y2hlcl9pZl9jaGFpbi5hcHBlbmQoIiAgICAgICAgJXMoY2FsbElkLCAqbWVzc2FnZS5nZXQoKSk7
IiAlIGpzb25fY29tbWFuZF9uYW1lKQotICAgICAgICBkaXNwYXRjaGVyX2NvbW1hbmRzX2xpc3Qu
YXBwZW5kKCIgICAgICAgICAgICB7IFwiJXNcIiwgJiVzOjolcyB9LCIgJSAoanNvbl9jb21tYW5k
X25hbWUsIGRpc3BhdGNoZXJfbmFtZSwganNvbl9jb21tYW5kX25hbWUpKQotCi0gICAgICAgIG1l
dGhvZF9pbl9wYXJhbXNfaGFuZGxpbmcgPSBbXQotICAgICAgICBtZXRob2RfZGlzcGF0Y2hfaGFu
ZGxpbmcgPSBbXQotICAgICAgICBtZXRob2Rfb3V0X3BhcmFtc19oYW5kbGluZyA9IFtdCi0gICAg
ICAgIG1ldGhvZF9lbmRpbmdfaGFuZGxpbmcgPSBbXQotICAgICAgICBtZXRob2RfcmVxdWVzdF9t
ZXNzYWdlX3BhcmFtX25hbWUgPSAiIgotICAgICAgICBhZ2VudF9jYWxsX3BhcmFtX2xpc3QgPSBb
XQotICAgICAgICBqc19wYXJhbWV0ZXJzX3RleHQgPSAiIgotICAgICAgICBpZiAicGFyYW1ldGVy
cyIgaW4ganNvbl9jb21tYW5kOgotICAgICAgICAgICAganNvbl9wYXJhbXMgPSBqc29uX2NvbW1h
bmRbInBhcmFtZXRlcnMiXQotICAgICAgICAgICAgbWV0aG9kX3JlcXVlc3RfbWVzc2FnZV9wYXJh
bV9uYW1lID0gIiBtZXNzYWdlIgotICAgICAgICAgICAgbWV0aG9kX2luX3BhcmFtc19oYW5kbGlu
Zy5hcHBlbmQoIiAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5z
cGVjdG9yQXJyYXk6OmNyZWF0ZSgpO1xuIikKLSAgICAgICAgICAgIG1ldGhvZF9pbl9wYXJhbXNf
aGFuZGxpbmcuYXBwZW5kKCIgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFp
bmVyID0gbWVzc2FnZS5nZXRPYmplY3QoQVNDSUlMaXRlcmFsKFwicGFyYW1zXCIpKTtcbiIpCi0g
ICAgICAgICAgICBtZXRob2RfaW5fcGFyYW1zX2hhbmRsaW5nLmFwcGVuZCgiICAgIEluc3BlY3Rv
ck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpO1xuIikK
LSAgICAgICAgICAgIG1ldGhvZF9pbl9wYXJhbXNfaGFuZGxpbmcuYXBwZW5kKCIgICAgSW5zcGVj
dG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7XG4iKQot
ICAgICAgICAgICAganNfcGFyYW1fbGlzdCA9IFtdCi0KLSAgICAgICAgICAgIGZvciBqc29uX3Bh
cmFtZXRlciBpbiBqc29uX3BhcmFtczoKLSAgICAgICAgICAgICAgICBqc29uX3BhcmFtX25hbWUg
PSBqc29uX3BhcmFtZXRlclsibmFtZSJdCi0gICAgICAgICAgICAgICAgcGFyYW1fcmF3X3R5cGUg
PSByZXNvbHZlX3BhcmFtX3Jhd190eXBlKGpzb25fcGFyYW1ldGVyLCBkb21haW5fbmFtZSkKLQot
ICAgICAgICAgICAgICAgIGdldHRlcl9uYW1lID0gcGFyYW1fcmF3X3R5cGUuZ2V0X2dldHRlcl9u
YW1lKCkKLQotICAgICAgICAgICAgICAgIG9wdGlvbmFsID0ganNvbl9wYXJhbWV0ZXIuZ2V0KCJv
cHRpb25hbCIpCi0KLSAgICAgICAgICAgICAgICBub25fb3B0aW9uYWxfdHlwZV9tb2RlbCA9IHBh
cmFtX3Jhd190eXBlLmdldF9yYXdfdHlwZV9tb2RlbCgpCi0gICAgICAgICAgICAgICAgaWYgb3B0
aW9uYWw6Ci0gICAgICAgICAgICAgICAgICAgIHR5cGVfbW9kZWwgPSBub25fb3B0aW9uYWxfdHlw
ZV9tb2RlbC5nZXRfb3B0aW9uYWwoKQotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAg
ICAgICAgICAgIHR5cGVfbW9kZWwgPSBub25fb3B0aW9uYWxfdHlwZV9tb2RlbAotCi0gICAgICAg
ICAgICAgICAgaWYgb3B0aW9uYWw6Ci0gICAgICAgICAgICAgICAgICAgIGNvZGUgPSAoIiAgICBi
b29sICVzX3ZhbHVlRm91bmQgPSBmYWxzZTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiICAgICVzIGluXyVzID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldCVzKHBhcmFt
c0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKFwiJXNcIiksICYlc192YWx1ZUZvdW5kLCBwcm90
b2NvbEVycm9yc1B0cik7XG4iICUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIChqc29uX3Bh
cmFtX25hbWUsIG5vbl9vcHRpb25hbF90eXBlX21vZGVsLmdldF9jb21tYW5kX3JldHVybl9wYXNz
X21vZGVsKCkuZ2V0X3JldHVybl92YXJfdHlwZSgpLCBqc29uX3BhcmFtX25hbWUsIGdldHRlcl9u
YW1lLCBqc29uX3BhcmFtX25hbWUsIGpzb25fcGFyYW1fbmFtZSkpCi0gICAgICAgICAgICAgICAg
ICAgIHBhcmFtID0gIiwgJXNfdmFsdWVGb3VuZCA/ICZpbl8lcyA6IG51bGxwdHIiICUgKGpzb25f
cGFyYW1fbmFtZSwganNvbl9wYXJhbV9uYW1lKQotICAgICAgICAgICAgICAgICAgICAjIEZJWE1F
OiBwYXNzIG9wdGlvbmFsIHJlZnB0ci12YWx1ZXMgYXMgUGFzc1JlZlB0cgotICAgICAgICAgICAg
ICAgICAgICBmb3JtYWxfcGFyYW1fdHlwZV9wYXR0ZXJuID0gImNvbnN0ICVzKiIKLSAgICAgICAg
ICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBjb2RlID0gKCIgICAgJXMgaW5fJXMg
PSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0JXMocGFyYW1zQ29udGFpbmVyUHRyLCBB
U0NJSUxpdGVyYWwoXCIlc1wiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnNQdHIpO1xuIiAlCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5vbl9vcHRpb25hbF90eXBlX21vZGVsLmdldF9j
b21tYW5kX3JldHVybl9wYXNzX21vZGVsKCkuZ2V0X3JldHVybl92YXJfdHlwZSgpLCBqc29uX3Bh
cmFtX25hbWUsIGdldHRlcl9uYW1lLCBqc29uX3BhcmFtX25hbWUpKQotICAgICAgICAgICAgICAg
ICAgICBwYXJhbSA9ICIsIGluXyVzIiAlIGpzb25fcGFyYW1fbmFtZQotICAgICAgICAgICAgICAg
ICAgICAjIEZJWE1FOiBwYXNzIG5vdC1vcHRpb25hbCByZWZwdHItdmFsdWVzIGFzIE5vbk51bGxQ
YXNzUmVmUHRyCi0gICAgICAgICAgICAgICAgICAgIGlmIHBhcmFtX3Jhd190eXBlLmlzX2hlYXZ5
X3ZhbHVlKCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3JtYWxfcGFyYW1fdHlwZV9wYXR0
ZXJuID0gImNvbnN0ICVzJiIKLSAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGZvcm1hbF9wYXJhbV90eXBlX3BhdHRlcm4gPSAiJXMiCi0KLSAgICAgICAg
ICAgICAgICBtZXRob2RfaW5fcGFyYW1zX2hhbmRsaW5nLmFwcGVuZChjb2RlKQotICAgICAgICAg
ICAgICAgIGFnZW50X2NhbGxfcGFyYW1fbGlzdC5hcHBlbmQocGFyYW0pCi0gICAgICAgICAgICAg
ICAgR2VuZXJhdG9yLmJhY2tlbmRfaGFuZGxlcl9pbnRlcmZhY2VfbGlzdC5hcHBlbmQoIiwgJXMg
aW5fJXMiICUgKGZvcm1hbF9wYXJhbV90eXBlX3BhdHRlcm4gJSBub25fb3B0aW9uYWxfdHlwZV9t
b2RlbC5nZXRfY29tbWFuZF9yZXR1cm5fcGFzc19tb2RlbCgpLmdldF9yZXR1cm5fdmFyX3R5cGUo
KSwganNvbl9wYXJhbV9uYW1lKSkKLQotICAgICAgICAgICAgICAgIGpzX2JpbmRfdHlwZSA9IHBh
cmFtX3Jhd190eXBlLmdldF9qc19iaW5kX3R5cGUoKQotICAgICAgICAgICAgICAgIGpzX3BhcmFt
X3RleHQgPSAie1wibmFtZVwiOiBcIiVzXCIsIFwidHlwZVwiOiBcIiVzXCIsIFwib3B0aW9uYWxc
IjogJXN9IiAlICgKLSAgICAgICAgICAgICAgICAgICAganNvbl9wYXJhbV9uYW1lLAotICAgICAg
ICAgICAgICAgICAgICBqc19iaW5kX3R5cGUsCi0gICAgICAgICAgICAgICAgICAgICgidHJ1ZSIg
aWYgKCJvcHRpb25hbCIgaW4ganNvbl9wYXJhbWV0ZXIgYW5kIGpzb25fcGFyYW1ldGVyWyJvcHRp
b25hbCJdKSBlbHNlICJmYWxzZSIpKQotCi0gICAgICAgICAgICAgICAganNfcGFyYW1fbGlzdC5h
cHBlbmQoanNfcGFyYW1fdGV4dCkKLQotICAgICAgICAgICAgbWV0aG9kX2luX3BhcmFtc19oYW5k
bGluZy5hcHBlbmQoIiAgICBpZiAocHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7XG4iKQotICAg
ICAgICAgICAgbWV0aG9kX2luX3BhcmFtc19oYW5kbGluZy5hcHBlbmQoIiAgICAgICAgU3RyaW5n
IGVycm9yTWVzc2FnZSA9IFN0cmluZzo6Zm9ybWF0KFwiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9k
ICclJXMnIGNhbid0IGJlIHByb2Nlc3NlZFwiLCBcIiVzLiVzXCIpO1xuIiAlIChkb21haW5fbmFt
ZSwganNvbl9jb21tYW5kX25hbWUpKQotICAgICAgICAgICAgbWV0aG9kX2luX3BhcmFtc19oYW5k
bGluZy5hcHBlbmQoIiAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xF
cnJvcigmY2FsbElkLCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFtcywg
ZXJyb3JNZXNzYWdlLCBwcm90b2NvbEVycm9ycy5yZWxlYXNlKCkpO1xuIikKLSAgICAgICAgICAg
IG1ldGhvZF9pbl9wYXJhbXNfaGFuZGxpbmcuYXBwZW5kKCIgICAgICAgIHJldHVybjtcbiIpCi0g
ICAgICAgICAgICBtZXRob2RfaW5fcGFyYW1zX2hhbmRsaW5nLmFwcGVuZCgiICAgIH1cbiIpCi0g
ICAgICAgICAgICBtZXRob2RfaW5fcGFyYW1zX2hhbmRsaW5nLmFwcGVuZCgiXG4iKQotCi0gICAg
ICAgICAgICBqc19wYXJhbWV0ZXJzX3RleHQgPSAiLCAiLmpvaW4oanNfcGFyYW1fbGlzdCkKLQot
ICAgICAgICBtZXRob2RfZGlzcGF0Y2hfaGFuZGxpbmcuYXBwZW5kKCIgICAgRXJyb3JTdHJpbmcg
ZXJyb3I7XG4iKQotICAgICAgICBtZXRob2RfZGlzcGF0Y2hfaGFuZGxpbmcuYXBwZW5kKCIgICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUo
KTtcbiIpCi0KLSAgICAgICAgaWYganNvbl9jb21tYW5kLmdldCgiYXN5bmMiKSA9PSBUcnVlOgot
ICAgICAgICAgICAgY2FsbGJhY2tfbmFtZSA9IENhcGl0YWxpemVyLmxvd2VyX2NhbWVsX2Nhc2Vf
dG9fdXBwZXIoanNvbl9jb21tYW5kX25hbWUpICsgIkNhbGxiYWNrIgotCi0gICAgICAgICAgICBj
YWxsYmFja19vdXRwdXQgPSBbXQotICAgICAgICAgICAgY2FsbGJhY2tfd3JpdGVyID0gV3JpdGVy
KGNhbGxiYWNrX291dHB1dCwgYWRfaG9jX3R5cGVfd3JpdGVyLmdldF9pbmRlbnQoKSkKLQotICAg
ICAgICAgICAgZGVjbF9wYXJhbWV0ZXJfbGlzdCA9IFtdCi0gICAgICAgICAgICBHZW5lcmF0b3Iu
Z2VuZXJhdGVfc2VuZF9tZXRob2QoanNvbl9jb21tYW5kLmdldCgicmV0dXJucyIpLCBqc29uX2Nv
bW1hbmRfbmFtZSwgZG9tYWluX25hbWUsIGFkX2hvY190eXBlX3dyaXRlciwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNsX3BhcmFtZXRlcl9saXN0LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdlbmVyYXRvci5DYWxsYmFj
a01ldGhvZFN0cnVjdFRlbXBsYXRlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX21ldGhvZF9pbXBsZW1lbnRhdGlvbl9saXN0LCBU
ZW1wbGF0ZXMuY2FsbGJhY2tfbWV0aG9kLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHsiY2FsbGJhY2tOYW1lIjogY2FsbGJhY2tfbmFtZSwgImhhbmRsZXJOYW1l
IjogYWdlbnRfaW50ZXJmYWNlX25hbWV9KQotCi0gICAgICAgICAgICBjYWxsYmFja193cml0ZXIu
bmV3bGluZSgiY2xhc3MgIiArIGNhbGxiYWNrX25hbWUgKyAiIDogcHVibGljIEluc3BlY3Rvcjo6
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZSB7XG4iKQotICAgICAgICAg
ICAgY2FsbGJhY2tfd3JpdGVyLm5ld2xpbmUoInB1YmxpYzpcbiIpCi0gICAgICAgICAgICBjYWxs
YmFja193cml0ZXIubmV3bGluZSgiICAgICIgKyBjYWxsYmFja19uYW1lICsgIihQYXNzUmVmUHRy
PEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+LCBpbnQgaWQpO1xuIikKLSAg
ICAgICAgICAgIGNhbGxiYWNrX3dyaXRlci5uZXdsaW5lKCIgICAgdm9pZCBzZW5kU3VjY2Vzcygi
ICsgIiwgIi5qb2luKGRlY2xfcGFyYW1ldGVyX2xpc3QpICsgIik7XG4iKQotICAgICAgICAgICAg
Y2FsbGJhY2tfd3JpdGVyLm5ld2xpbmUoIn07XG4iKQotCi0gICAgICAgICAgICBhZF9ob2NfdHlw
ZV9vdXRwdXQuYXBwZW5kKGNhbGxiYWNrX291dHB1dCkKLQotICAgICAgICAgICAgbWV0aG9kX2Rp
c3BhdGNoX2hhbmRsaW5nLmFwcGVuZCgiICAgIFJlZlB0cjwlczo6JXM+IGNhbGxiYWNrID0gYWRv
cHRSZWYobmV3ICVzOjolcyhtX2JhY2tlbmREaXNwYXRjaGVyLGNhbGxJZCkpO1xuIiAlIChhZ2Vu
dF9pbnRlcmZhY2VfbmFtZSwgY2FsbGJhY2tfbmFtZSwgYWdlbnRfaW50ZXJmYWNlX25hbWUsIGNh
bGxiYWNrX25hbWUpKQotICAgICAgICAgICAgbWV0aG9kX2VuZGluZ19oYW5kbGluZy5hcHBlbmQo
IiAgICBpZiAoZXJyb3IubGVuZ3RoKCkpIHtcbiIpCi0gICAgICAgICAgICBtZXRob2RfZW5kaW5n
X2hhbmRsaW5nLmFwcGVuZCgiICAgICAgICBjYWxsYmFjay0+ZGlzYWJsZSgpO1xuIikKLSAgICAg
ICAgICAgIG1ldGhvZF9lbmRpbmdfaGFuZGxpbmcuYXBwZW5kKCIgICAgICAgIG1fYmFja2VuZERp
c3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgSW5zcGVjdG9yOjpJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTtcbiIpCi0gICAgICAgICAg
ICBtZXRob2RfZW5kaW5nX2hhbmRsaW5nLmFwcGVuZCgiICAgICAgICByZXR1cm47XG4iKQotICAg
ICAgICAgICAgbWV0aG9kX2VuZGluZ19oYW5kbGluZy5hcHBlbmQoIiAgICB9IikKLQotICAgICAg
ICAgICAgYWdlbnRfY2FsbF9wYXJhbV9saXN0LmFwcGVuZCgiLCBjYWxsYmFjayIpCi0gICAgICAg
ICAgICBHZW5lcmF0b3IuYmFja2VuZF9oYW5kbGVyX2ludGVyZmFjZV9saXN0LmFwcGVuZCgiLCBQ
YXNzUmVmUHRyPCVzPiBjYWxsYmFjayIgJSBjYWxsYmFja19uYW1lKQotICAgICAgICBlbGlmICJy
ZXR1cm5zIiBpbiBqc29uX2NvbW1hbmQ6Ci0gICAgICAgICAgICBoYXNfbXVsdGlwbGVfcmV0dXJu
cyA9IGxlbihqc29uX2NvbW1hbmRbInJldHVybnMiXSkgPiAxCi0gICAgICAgICAgICBpZiBoYXNf
bXVsdGlwbGVfcmV0dXJuczoKLSAgICAgICAgICAgICAgICBtZXRob2Rfb3V0X3BhcmFtc19oYW5k
bGluZy5hcHBlbmQoIiAgICBpZiAoIWVycm9yLmxlbmd0aCgpKSB7XG4iKQotICAgICAgICAgICAg
ZWxzZToKLSAgICAgICAgICAgICAgICBtZXRob2Rfb3V0X3BhcmFtc19oYW5kbGluZy5hcHBlbmQo
IiAgICBpZiAoIWVycm9yLmxlbmd0aCgpKVxuIikKLQotICAgICAgICAgICAgZm9yIGpzb25fcmV0
dXJuIGluIGpzb25fY29tbWFuZFsicmV0dXJucyJdOgotCi0gICAgICAgICAgICAgICAganNvbl9y
ZXR1cm5fbmFtZSA9IGpzb25fcmV0dXJuWyJuYW1lIl0KLQotICAgICAgICAgICAgICAgIG9wdGlv
bmFsID0gYm9vbChqc29uX3JldHVybi5nZXQoIm9wdGlvbmFsIikpCi0KLSAgICAgICAgICAgICAg
ICByZXR1cm5fdHlwZV9iaW5kaW5nID0gR2VuZXJhdG9yLnJlc29sdmVfdHlwZV9hbmRfZ2VuZXJh
dGVfYWRfaG9jKGpzb25fcmV0dXJuLCBqc29uX2NvbW1hbmRfbmFtZSwgZG9tYWluX25hbWUsIGFk
X2hvY190eXBlX3dyaXRlciwgYWdlbnRfaW50ZXJmYWNlX25hbWUgKyAiOjoiKQotCi0gICAgICAg
ICAgICAgICAgcmF3X3R5cGUgPSByZXR1cm5fdHlwZV9iaW5kaW5nLnJlZHVjZV90b19yYXdfdHlw
ZSgpCi0gICAgICAgICAgICAgICAgc2V0dGVyX3R5cGUgPSByYXdfdHlwZS5nZXRfc2V0dGVyX25h
bWUoKQotICAgICAgICAgICAgICAgIGluaXRpYWxpemVyID0gcmF3X3R5cGUuZ2V0X2NfaW5pdGlh
bGl6ZXIoKQotCi0gICAgICAgICAgICAgICAgdHlwZV9tb2RlbCA9IHJldHVybl90eXBlX2JpbmRp
bmcuZ2V0X3R5cGVfbW9kZWwoKQotICAgICAgICAgICAgICAgIGlmIG9wdGlvbmFsOgotICAgICAg
ICAgICAgICAgICAgICB0eXBlX21vZGVsID0gdHlwZV9tb2RlbC5nZXRfb3B0aW9uYWwoKQotCi0g
ICAgICAgICAgICAgICAgY29kZSA9ICIgICAgJXMgb3V0XyVzO1xuIiAlICh0eXBlX21vZGVsLmdl
dF9jb21tYW5kX3JldHVybl9wYXNzX21vZGVsKCkuZ2V0X3JldHVybl92YXJfdHlwZSgpLCBqc29u
X3JldHVybl9uYW1lKQotICAgICAgICAgICAgICAgIHBhcmFtID0gIiwgJXNvdXRfJXMiICUgKHR5
cGVfbW9kZWwuZ2V0X2NvbW1hbmRfcmV0dXJuX3Bhc3NfbW9kZWwoKS5nZXRfb3V0cHV0X2FyZ3Vt
ZW50X3ByZWZpeCgpLCBqc29uX3JldHVybl9uYW1lKQotICAgICAgICAgICAgICAgIHZhcl9uYW1l
ID0gIm91dF8lcyIgJSBqc29uX3JldHVybl9uYW1lCi0gICAgICAgICAgICAgICAgc2V0dGVyX2Fy
Z3VtZW50ID0gdHlwZV9tb2RlbC5nZXRfY29tbWFuZF9yZXR1cm5fcGFzc19tb2RlbCgpLmdldF9v
dXRwdXRfdG9fcmF3X2V4cHJlc3Npb24oKSAlIHZhcl9uYW1lCi0gICAgICAgICAgICAgICAgaWYg
cmV0dXJuX3R5cGVfYmluZGluZy5nZXRfc2V0dGVyX3ZhbHVlX2V4cHJlc3Npb25fcGF0dGVybigp
OgotICAgICAgICAgICAgICAgICAgICBzZXR0ZXJfYXJndW1lbnQgPSByZXR1cm5fdHlwZV9iaW5k
aW5nLmdldF9zZXR0ZXJfdmFsdWVfZXhwcmVzc2lvbl9wYXR0ZXJuKCkgJSAoSU5TUEVDVE9SX1RZ
UEVTX0dFTkVSQVRPUl9DT05GSUdfTUFQW291dHB1dF90eXBlXVsicHJlZml4Il0sIHNldHRlcl9h
cmd1bWVudCkKLQotICAgICAgICAgICAgICAgIGNvb2sgPSAiICAgICAgICByZXN1bHQtPnNldCVz
KEFTQ0lJTGl0ZXJhbChcIiVzXCIpLCAlcyk7XG4iICUgKHNldHRlcl90eXBlLCBqc29uX3JldHVy
bl9uYW1lLCBzZXR0ZXJfYXJndW1lbnQpCi0KLSAgICAgICAgICAgICAgICBzZXRfY29uZGl0aW9u
X3BhdHRlcm4gPSB0eXBlX21vZGVsLmdldF9jb21tYW5kX3JldHVybl9wYXNzX21vZGVsKCkuZ2V0
X3NldF9yZXR1cm5fY29uZGl0aW9uKCkKLSAgICAgICAgICAgICAgICBpZiBzZXRfY29uZGl0aW9u
X3BhdHRlcm46Ci0gICAgICAgICAgICAgICAgICAgIGNvb2sgPSAoIiAgICAgICAgaWYgKCVzKVxu
ICAgICIgJSAoc2V0X2NvbmRpdGlvbl9wYXR0ZXJuICUgdmFyX25hbWUpKSArIGNvb2sKLSAgICAg
ICAgICAgICAgICBhbm5vdGF0ZWRfdHlwZSA9IHR5cGVfbW9kZWwuZ2V0X2NvbW1hbmRfcmV0dXJu
X3Bhc3NfbW9kZWwoKS5nZXRfb3V0cHV0X3BhcmFtZXRlcl90eXBlKCkKLQotICAgICAgICAgICAg
ICAgIHBhcmFtX25hbWUgPSAib3V0XyVzIiAlIGpzb25fcmV0dXJuX25hbWUKLSAgICAgICAgICAg
ICAgICBpZiBvcHRpb25hbDoKLSAgICAgICAgICAgICAgICAgICAgcGFyYW1fbmFtZSA9ICJvcHRf
IiArIHBhcmFtX25hbWUKLQotICAgICAgICAgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX2hhbmRs
ZXJfaW50ZXJmYWNlX2xpc3QuYXBwZW5kKCIsICVzICVzIiAlIChhbm5vdGF0ZWRfdHlwZSwgcGFy
YW1fbmFtZSkpCi0gICAgICAgICAgICAgICAgbWV0aG9kX291dF9wYXJhbXNfaGFuZGxpbmcuYXBw
ZW5kKGNvb2spCi0gICAgICAgICAgICAgICAgbWV0aG9kX2Rpc3BhdGNoX2hhbmRsaW5nLmFwcGVu
ZChjb2RlKQotCi0gICAgICAgICAgICAgICAgYWdlbnRfY2FsbF9wYXJhbV9saXN0LmFwcGVuZChw
YXJhbSkKLQotICAgICAgICAgICAgaWYgaGFzX211bHRpcGxlX3JldHVybnM6Ci0gICAgICAgICAg
ICAgICAgbWV0aG9kX291dF9wYXJhbXNfaGFuZGxpbmcuYXBwZW5kKCIgICAgfVxuIikKLSAgICAg
ICAgICAgIG1ldGhvZF9vdXRfcGFyYW1zX2hhbmRsaW5nLmFwcGVuZCgiXG4iKQotCi0gICAgICAg
IG1ldGhvZF9kaXNwYXRjaF9oYW5kbGluZy5hcHBlbmQoIiAgICBtX2FnZW50LT4lcygmZXJyb3Il
cyk7XG4iICUgKGpzb25fY29tbWFuZF9uYW1lLCAiIi5qb2luKGFnZW50X2NhbGxfcGFyYW1fbGlz
dCkpKQotICAgICAgICBtZXRob2RfZGlzcGF0Y2hfaGFuZGxpbmcuYXBwZW5kKCJcbiIpCi0KLSAg
ICAgICAgaWYgbm90IG1ldGhvZF9lbmRpbmdfaGFuZGxpbmc6Ci0gICAgICAgICAgICBtZXRob2Rf
ZW5kaW5nX2hhbmRsaW5nLmFwcGVuZCgiICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNw
b25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIGVycm9yKTsiKQotCi0gICAgICAgIGJhY2tl
bmRfanNfcmVwbHlfcGFyYW1fbGlzdCA9IFtdCi0gICAgICAgIGlmICJyZXR1cm5zIiBpbiBqc29u
X2NvbW1hbmQ6Ci0gICAgICAgICAgICBmb3IganNvbl9yZXR1cm4gaW4ganNvbl9jb21tYW5kWyJy
ZXR1cm5zIl06Ci0gICAgICAgICAgICAgICAganNvbl9yZXR1cm5fbmFtZSA9IGpzb25fcmV0dXJu
WyJuYW1lIl0KLSAgICAgICAgICAgICAgICBiYWNrZW5kX2pzX3JlcGx5X3BhcmFtX2xpc3QuYXBw
ZW5kKCJcIiVzXCIiICUganNvbl9yZXR1cm5fbmFtZSkKLQotICAgICAgICBqc19yZXBseV9saXN0
ID0gIlslc10iICUgIiwgIi5qb2luKGJhY2tlbmRfanNfcmVwbHlfcGFyYW1fbGlzdCkKLQotICAg
ICAgICBHZW5lcmF0b3IuYmFja2VuZF9tZXRob2RfaW1wbGVtZW50YXRpb25fbGlzdC5hcHBlbmQo
VGVtcGxhdGVzLmJhY2tlbmRfbWV0aG9kLnN1YnN0aXR1dGUoTm9uZSwKLSAgICAgICAgICAgIGRp
c3BhdGNoZXJOYW1lPWRpc3BhdGNoZXJfbmFtZSwKLSAgICAgICAgICAgIG1ldGhvZE5hbWU9anNv
bl9jb21tYW5kX25hbWUsCi0gICAgICAgICAgICByZXF1ZXN0TWVzc2FnZU9iamVjdD1tZXRob2Rf
cmVxdWVzdF9tZXNzYWdlX3BhcmFtX25hbWUsCi0gICAgICAgICAgICBtZXRob2RJblBhcmFtZXRl
cnNIYW5kbGluZz0iIi5qb2luKG1ldGhvZF9pbl9wYXJhbXNfaGFuZGxpbmcpLAotICAgICAgICAg
ICAgbWV0aG9kRGlzcGF0Y2hIYW5kbGluZz0iIi5qb2luKG1ldGhvZF9kaXNwYXRjaF9oYW5kbGlu
ZyksCi0gICAgICAgICAgICBtZXRob2RPdXRQYXJhbWV0ZXJzSGFuZGxpbmc9IiIuam9pbihtZXRo
b2Rfb3V0X3BhcmFtc19oYW5kbGluZyksCi0gICAgICAgICAgICBtZXRob2RFbmRpbmdIYW5kbGlu
Zz0iIi5qb2luKG1ldGhvZF9lbmRpbmdfaGFuZGxpbmcpKSkKLQotICAgICAgICBHZW5lcmF0b3Iu
YmFja2VuZF9qc19kb21haW5faW5pdGlhbGl6ZXJfbGlzdC5hcHBlbmQoIkluc3BlY3RvckJhY2tl
bmQucmVnaXN0ZXJDb21tYW5kKFwiJXMuJXNcIiwgWyVzXSwgJXMpO1xuIiAlIChkb21haW5fbmFt
ZSwganNvbl9jb21tYW5kX25hbWUsIGpzX3BhcmFtZXRlcnNfdGV4dCwganNfcmVwbHlfbGlzdCkp
Ci0gICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX2hhbmRsZXJfaW50ZXJmYWNlX2xpc3QuYXBwZW5k
KCIpID0gMDtcbiIpCi0KLSAgICBjbGFzcyBDYWxsYmFja01ldGhvZFN0cnVjdFRlbXBsYXRlOgot
ICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgIGRlZiBhcHBlbmRfcHJvbG9nKGxpbmVfbGlz
dCk6Ci0gICAgICAgICAgICBwYXNzCi0KLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBk
ZWYgYXBwZW5kX2VwaWxvZyhsaW5lX2xpc3QpOgotICAgICAgICAgICAgcGFzcwotCi0gICAgICAg
IGNvbnRhaW5lcl9uYW1lID0gImpzb25NZXNzYWdlIgotCi0gICAgIyBHZW5lcmF0ZXMgY29tbW9u
IGNvZGUgZm9yIGV2ZW50IHNlbmRpbmcgYW5kIGNhbGxiYWNrIHJlc3BvbnNlIGRhdGEgc2VuZGlu
Zy4KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIGdlbmVyYXRlX3NlbmRfbWV0aG9kKHBhcmFt
ZXRlcnMsIGV2ZW50X25hbWUsIGRvbWFpbl9uYW1lLCBhZF9ob2NfdHlwZV93cml0ZXIsIGRlY2xf
cGFyYW1ldGVyX2xpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZF9zdHJ1
Y3RfdGVtcGxhdGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRvcl9tZXRo
b2RfbGlzdCwgbWV0aG9kX3RlbXBsYXRlLCB0ZW1wbGF0ZV9wYXJhbXMpOgotICAgICAgICBtZXRo
b2RfbGluZV9saXN0ID0gW10KLSAgICAgICAgaWYgcGFyYW1ldGVyczoKLSAgICAgICAgICAgIG1l
dGhvZF9zdHJ1Y3RfdGVtcGxhdGUuYXBwZW5kX3Byb2xvZyhtZXRob2RfbGluZV9saXN0KQotICAg
ICAgICAgICAgZm9yIGpzb25fcGFyYW1ldGVyIGluIHBhcmFtZXRlcnM6Ci0gICAgICAgICAgICAg
ICAgcGFyYW1ldGVyX25hbWUgPSBqc29uX3BhcmFtZXRlclsibmFtZSJdCi0KLSAgICAgICAgICAg
ICAgICBwYXJhbV90eXBlX2JpbmRpbmcgPSBHZW5lcmF0b3IucmVzb2x2ZV90eXBlX2FuZF9nZW5l
cmF0ZV9hZF9ob2MoanNvbl9wYXJhbWV0ZXIsIGV2ZW50X25hbWUsIGRvbWFpbl9uYW1lLCBhZF9o
b2NfdHlwZV93cml0ZXIsICIiKQotCi0gICAgICAgICAgICAgICAgcmF3X3R5cGUgPSBwYXJhbV90
eXBlX2JpbmRpbmcucmVkdWNlX3RvX3Jhd190eXBlKCkKLSAgICAgICAgICAgICAgICByYXdfdHlw
ZV9iaW5kaW5nID0gUmF3VHlwZUJpbmRpbmcocmF3X3R5cGUpCi0KLSAgICAgICAgICAgICAgICBv
cHRpb25hbCA9IGJvb2woanNvbl9wYXJhbWV0ZXIuZ2V0KCJvcHRpb25hbCIpKQotCi0gICAgICAg
ICAgICAgICAgc2V0dGVyX3R5cGUgPSByYXdfdHlwZS5nZXRfc2V0dGVyX25hbWUoKQotCi0gICAg
ICAgICAgICAgICAgdHlwZV9tb2RlbCA9IHBhcmFtX3R5cGVfYmluZGluZy5nZXRfdHlwZV9tb2Rl
bCgpCi0gICAgICAgICAgICAgICAgcmF3X3R5cGVfbW9kZWwgPSByYXdfdHlwZV9iaW5kaW5nLmdl
dF90eXBlX21vZGVsKCkKLSAgICAgICAgICAgICAgICBpZiBvcHRpb25hbDoKLSAgICAgICAgICAg
ICAgICAgICAgdHlwZV9tb2RlbCA9IHR5cGVfbW9kZWwuZ2V0X29wdGlvbmFsKCkKLSAgICAgICAg
ICAgICAgICAgICAgcmF3X3R5cGVfbW9kZWwgPSByYXdfdHlwZV9tb2RlbC5nZXRfb3B0aW9uYWwo
KQotCi0gICAgICAgICAgICAgICAgYW5ub3RhdGVkX3R5cGUgPSB0eXBlX21vZGVsLmdldF9pbnB1
dF9wYXJhbV90eXBlX3RleHQoKQotICAgICAgICAgICAgICAgIG1vZGVfdHlwZV9iaW5kaW5nID0g
cGFyYW1fdHlwZV9iaW5kaW5nCi0KLSAgICAgICAgICAgICAgICBkZWNsX3BhcmFtZXRlcl9saXN0
LmFwcGVuZCgiJXMgJXMiICUgKGFubm90YXRlZF90eXBlLCBwYXJhbWV0ZXJfbmFtZSkpCi0KLSAg
ICAgICAgICAgICAgICBzZXR0ZXJfYXJndW1lbnQgPSByYXdfdHlwZV9tb2RlbC5nZXRfZXZlbnRf
c2V0dGVyX2V4cHJlc3Npb25fcGF0dGVybigpICUgcGFyYW1ldGVyX25hbWUKLSAgICAgICAgICAg
ICAgICBpZiBtb2RlX3R5cGVfYmluZGluZy5nZXRfc2V0dGVyX3ZhbHVlX2V4cHJlc3Npb25fcGF0
dGVybigpOgotICAgICAgICAgICAgICAgICAgICBzZXR0ZXJfYXJndW1lbnQgPSBtb2RlX3R5cGVf
YmluZGluZy5nZXRfc2V0dGVyX3ZhbHVlX2V4cHJlc3Npb25fcGF0dGVybigpICUgKElOU1BFQ1RP
Ul9UWVBFU19HRU5FUkFUT1JfQ09ORklHX01BUFtvdXRwdXRfdHlwZV1bInByZWZpeCJdLCBzZXR0
ZXJfYXJndW1lbnQpCi0KLSAgICAgICAgICAgICAgICBzZXR0ZXJfY29kZSA9ICIgICAgJXMtPnNl
dCVzKEFTQ0lJTGl0ZXJhbChcIiVzXCIpLCAlcyk7XG4iICUgKG1ldGhvZF9zdHJ1Y3RfdGVtcGxh
dGUuY29udGFpbmVyX25hbWUsIHNldHRlcl90eXBlLCBwYXJhbWV0ZXJfbmFtZSwgc2V0dGVyX2Fy
Z3VtZW50KQotICAgICAgICAgICAgICAgIGlmIG9wdGlvbmFsOgotICAgICAgICAgICAgICAgICAg
ICBzZXR0ZXJfY29kZSA9ICgiICAgIGlmICglcylcbiAgICAiICUgcGFyYW1ldGVyX25hbWUpICsg
c2V0dGVyX2NvZGUKLSAgICAgICAgICAgICAgICBtZXRob2RfbGluZV9saXN0LmFwcGVuZChzZXR0
ZXJfY29kZSkKLQotICAgICAgICAgICAgbWV0aG9kX3N0cnVjdF90ZW1wbGF0ZS5hcHBlbmRfZXBp
bG9nKG1ldGhvZF9saW5lX2xpc3QpCi0KLSAgICAgICAgZ2VuZXJhdG9yX21ldGhvZF9saXN0LmFw
cGVuZChtZXRob2RfdGVtcGxhdGUuc3Vic3RpdHV0ZShOb25lLAotICAgICAgICAgICAgZG9tYWlu
TmFtZT1kb21haW5fbmFtZSwKLSAgICAgICAgICAgIHBhcmFtZXRlcnM9IiwgIi5qb2luKGRlY2xf
cGFyYW1ldGVyX2xpc3QpLAotICAgICAgICAgICAgY29kZT0iIi5qb2luKG1ldGhvZF9saW5lX2xp
c3QpLCAqKnRlbXBsYXRlX3BhcmFtcykpCi0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIHJl
c29sdmVfdHlwZV9hbmRfZ2VuZXJhdGVfYWRfaG9jKGpzb25fcGFyYW0sIG1ldGhvZF9uYW1lLCBk
b21haW5fbmFtZSwgYWRfaG9jX3R5cGVfd3JpdGVyLCBjb250YWluZXJfcmVsYXRpdmVfbmFtZV9w
cmVmaXhfcGFyYW0pOgotICAgICAgICBwYXJhbV9uYW1lID0ganNvbl9wYXJhbVsibmFtZSJdCi0g
ICAgICAgIGFkX2hvY190eXBlX2xpc3QgPSBbXQotCi0gICAgICAgIGNsYXNzIEFkSG9jVHlwZUNv
bnRleHQ6Ci0gICAgICAgICAgICBjb250YWluZXJfZnVsbF9uYW1lX3ByZWZpeCA9ICI8bm90IHll
dCBkZWZpbmVkPiIKLSAgICAgICAgICAgIGNvbnRhaW5lcl9yZWxhdGl2ZV9uYW1lX3ByZWZpeCA9
IGNvbnRhaW5lcl9yZWxhdGl2ZV9uYW1lX3ByZWZpeF9wYXJhbQotCi0gICAgICAgICAgICBAc3Rh
dGljbWV0aG9kCi0gICAgICAgICAgICBkZWYgZ2V0X3R5cGVfbmFtZV9maXgoKToKLSAgICAgICAg
ICAgICAgICBjbGFzcyBOYW1lRml4OgotICAgICAgICAgICAgICAgICAgICBjbGFzc19uYW1lID0g
Q2FwaXRhbGl6ZXIubG93ZXJfY2FtZWxfY2FzZV90b191cHBlcihwYXJhbV9uYW1lKQotCi0gICAg
ICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgZGVmIG91
dHB1dF9jb21tZW50KHdyaXRlcik6Ci0gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3
bGluZSgiLy8gTmFtZWQgYWZ0ZXIgcGFyYW1ldGVyICclcycgd2hpbGUgZ2VuZXJhdGluZyBjb21t
YW5kL2V2ZW50ICVzLlxuIiAlIChwYXJhbV9uYW1lLCBtZXRob2RfbmFtZSkpCi0KLSAgICAgICAg
ICAgICAgICByZXR1cm4gTmFtZUZpeAotCi0gICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAg
ICAgICAgICBkZWYgYWRkX3R5cGUoYmluZGluZyk6Ci0gICAgICAgICAgICAgICAgYWRfaG9jX3R5
cGVfbGlzdC5hcHBlbmQoYmluZGluZykKLQotICAgICAgICB0eXBlX2JpbmRpbmcgPSByZXNvbHZl
X3BhcmFtX3R5cGUoanNvbl9wYXJhbSwgZG9tYWluX25hbWUsIEFkSG9jVHlwZUNvbnRleHQpCi0K
LSAgICAgICAgY2xhc3MgSW50ZXJmYWNlRm9yd2FyZExpc3RlbmVyOgotICAgICAgICAgICAgQHN0
YXRpY21ldGhvZAotICAgICAgICAgICAgZGVmIGFkZF90eXBlX2RhdGEodHlwZV9kYXRhKToKLSAg
ICAgICAgICAgICAgICBwYXNzCi0KLSAgICAgICAgY2xhc3MgSW50ZXJmYWNlUmVzb2x2ZUNvbnRl
eHQ6Ci0gICAgICAgICAgICBmb3J3YXJkX2xpc3RlbmVyID0gSW50ZXJmYWNlRm9yd2FyZExpc3Rl
bmVyCi0KLSAgICAgICAgZm9yIHR5cGUgaW4gYWRfaG9jX3R5cGVfbGlzdDoKLSAgICAgICAgICAg
IHR5cGUucmVzb2x2ZV9pbm5lcihJbnRlcmZhY2VSZXNvbHZlQ29udGV4dCkKLQotICAgICAgICBj
bGFzcyBJbnRlcmZhY2VHZW5lcmF0ZUNvbnRleHQ6Ci0gICAgICAgICAgICB2YWxpZGF0b3Jfd3Jp
dGVyID0gIm5vdCBzdXBwb3J0ZWQgaW4gSW50ZXJmYWNlR2VuZXJhdGVDb250ZXh0IgotICAgICAg
ICAgICAgY3BwX3dyaXRlciA9IHZhbGlkYXRvcl93cml0ZXIKLQotICAgICAgICBmb3IgdHlwZSBp
biBhZF9ob2NfdHlwZV9saXN0OgotICAgICAgICAgICAgZ2VuZXJhdG9yID0gdHlwZS5nZXRfY29k
ZV9nZW5lcmF0b3IoKQotICAgICAgICAgICAgaWYgZ2VuZXJhdG9yOgotICAgICAgICAgICAgICAg
IGdlbmVyYXRvci5nZW5lcmF0ZV90eXBlX2J1aWxkZXIoYWRfaG9jX3R5cGVfd3JpdGVyLCBJbnRl
cmZhY2VHZW5lcmF0ZUNvbnRleHQpCi0KLSAgICAgICAgcmV0dXJuIHR5cGVfYmluZGluZwotCi0g
ICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBwcm9jZXNzX3R5cGVzKHR5cGVfbWFwKToKLSAgICAg
ICAgb3V0cHV0ID0gR2VuZXJhdG9yLnR5cGVfYnVpbGRlcl9mcmFnbWVudHMKLQotICAgICAgICBj
bGFzcyBHZW5lcmF0ZUNvbnRleHQ6Ci0gICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyID0gV3Jp
dGVyKEdlbmVyYXRvci52YWxpZGF0b3JfaW1wbF9saXN0LCAiIikKLSAgICAgICAgICAgIGNwcF93
cml0ZXIgPSBXcml0ZXIoR2VuZXJhdG9yLnR5cGVfYnVpbGRlcl9pbXBsX2xpc3QsICIiKQotCi0g
ICAgICAgIGRlZiBnZW5lcmF0ZV9hbGxfZG9tYWluc19jb2RlKG91dCwgdHlwZV9kYXRhX2NhbGxi
YWNrKToKLSAgICAgICAgICAgIHdyaXRlciA9IFdyaXRlcihvdXQsICIiKQotICAgICAgICAgICAg
Zm9yIGRvbWFpbl9kYXRhIGluIHR5cGVfbWFwLmRvbWFpbnNfdG9fZ2VuZXJhdGUoKToKLSAgICAg
ICAgICAgICAgICBkb21haW5fZml4ZXMgPSBEb21haW5OYW1lRml4ZXMuZ2V0X2ZpeGVkX2RhdGEo
ZG9tYWluX2RhdGEubmFtZSgpKQotICAgICAgICAgICAgICAgIGRvbWFpbl9ndWFyZCA9IGRvbWFp
bl9maXhlcy5nZXRfZ3VhcmQoKQotCi0gICAgICAgICAgICAgICAgbmFtZXNwYWNlX2RlY2xhcmVk
ID0gW10KLQotICAgICAgICAgICAgICAgIGRlZiBuYW1lc3BhY2VfbGF6eV9nZW5lcmF0b3IoKToK
LSAgICAgICAgICAgICAgICAgICAgaWYgbm90IG5hbWVzcGFjZV9kZWNsYXJlZDoKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIGRvbWFpbl9ndWFyZDoKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkb21haW5fZ3VhcmQuZ2VuZXJhdGVfb3BlbihvdXQpCi0gICAgICAgICAgICAgICAgICAg
ICAgICB3cml0ZXIubmV3bGluZSgibmFtZXNwYWNlICIpCi0gICAgICAgICAgICAgICAgICAgICAg
ICB3cml0ZXIuYXBwZW5kKGRvbWFpbl9kYXRhLm5hbWUoKSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHdyaXRlci5hcHBlbmQoIiB7XG4iKQotICAgICAgICAgICAgICAgICAgICAgICAgIyBXaGF0
IGlzIGEgYmV0dGVyIHdheSB0byBjaGFuZ2UgdmFsdWUgZnJvbSBvdXRlciBzY29wZT8KLSAgICAg
ICAgICAgICAgICAgICAgICAgIG5hbWVzcGFjZV9kZWNsYXJlZC5hcHBlbmQoVHJ1ZSkKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHdyaXRlcgotCi0gICAgICAgICAgICAgICAgZm9yIHR5cGVf
ZGF0YSBpbiBkb21haW5fZGF0YS50eXBlcygpOgotICAgICAgICAgICAgICAgICAgICB0eXBlX2Rh
dGFfY2FsbGJhY2sodHlwZV9kYXRhLCBuYW1lc3BhY2VfbGF6eV9nZW5lcmF0b3IpCi0KLSAgICAg
ICAgICAgICAgICBpZiBuYW1lc3BhY2VfZGVjbGFyZWQ6Ci0gICAgICAgICAgICAgICAgICAgIHdy
aXRlci5hcHBlbmQoIn0gLy8gIikKLSAgICAgICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVuZChk
b21haW5fZGF0YS5uYW1lKCkpCi0gICAgICAgICAgICAgICAgICAgIHdyaXRlci5hcHBlbmQoIlxu
XG4iKQotCi0gICAgICAgICAgICAgICAgICAgIGlmIGRvbWFpbl9ndWFyZDoKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGRvbWFpbl9ndWFyZC5nZW5lcmF0ZV9jbG9zZShvdXQpCi0KLSAgICAgICAg
ZGVmIGNyZWF0ZV90eXBlX2J1aWxkZXJfY2FsbGVyKGdlbmVyYXRlX3Bhc3NfaWQpOgotICAgICAg
ICAgICAgZGVmIGNhbGxfdHlwZV9idWlsZGVyKHR5cGVfZGF0YSwgd3JpdGVyX2dldHRlcik6Ci0g
ICAgICAgICAgICAgICAgY29kZV9nZW5lcmF0b3IgPSB0eXBlX2RhdGEuZ2V0X2JpbmRpbmcoKS5n
ZXRfY29kZV9nZW5lcmF0b3IoKQotICAgICAgICAgICAgICAgIGlmIGNvZGVfZ2VuZXJhdG9yIGFu
ZCBnZW5lcmF0ZV9wYXNzX2lkID09IGNvZGVfZ2VuZXJhdG9yLmdldF9nZW5lcmF0ZV9wYXNzX2lk
KCk6Ci0gICAgICAgICAgICAgICAgICAgIHdyaXRlciA9IHdyaXRlcl9nZXR0ZXIoKQotCi0gICAg
ICAgICAgICAgICAgICAgIGNvZGVfZ2VuZXJhdG9yLmdlbmVyYXRlX3R5cGVfYnVpbGRlcih3cml0
ZXIsIEdlbmVyYXRlQ29udGV4dCkKLSAgICAgICAgICAgIHJldHVybiBjYWxsX3R5cGVfYnVpbGRl
cgotCi0gICAgICAgIGdlbmVyYXRlX2FsbF9kb21haW5zX2NvZGUob3V0cHV0LCBjcmVhdGVfdHlw
ZV9idWlsZGVyX2NhbGxlcihUeXBlQnVpbGRlclBhc3MuTUFJTikpCi0KLSAgICAgICAgR2VuZXJh
dG9yLnR5cGVfYnVpbGRlcl9mb3J3YXJkcy5hcHBlbmQoIi8vIEZvcndhcmQgZGVjbGFyYXRpb25z
LlxuIikKLQotICAgICAgICBkZWYgZ2VuZXJhdGVfZm9yd2FyZF9jYWxsYmFjayh0eXBlX2RhdGEs
IHdyaXRlcl9nZXR0ZXIpOgotICAgICAgICAgICAgaWYgdHlwZV9kYXRhIGluIGdsb2JhbF9mb3J3
YXJkX2xpc3RlbmVyLnR5cGVfZGF0YV9zZXQ6Ci0gICAgICAgICAgICAgICAgYmluZGluZyA9IHR5
cGVfZGF0YS5nZXRfYmluZGluZygpCi0gICAgICAgICAgICAgICAgYmluZGluZy5nZXRfY29kZV9n
ZW5lcmF0b3IoKS5nZW5lcmF0ZV9mb3J3YXJkX2RlY2xhcmF0aW9uKHdyaXRlcl9nZXR0ZXIoKSkK
LSAgICAgICAgZ2VuZXJhdGVfYWxsX2RvbWFpbnNfY29kZShHZW5lcmF0b3IudHlwZV9idWlsZGVy
X2ZvcndhcmRzLCBnZW5lcmF0ZV9mb3J3YXJkX2NhbGxiYWNrKQotCi0gICAgICAgIEdlbmVyYXRv
ci50eXBlX2J1aWxkZXJfZm9yd2FyZHMuYXBwZW5kKCIvLyBFbmQgb2YgZm9yd2FyZCBkZWNsYXJh
dGlvbnMuXG5cbiIpCi0KLSAgICAgICAgR2VuZXJhdG9yLnR5cGVfYnVpbGRlcl9mb3J3YXJkcy5h
cHBlbmQoIi8vIFR5cGVkZWZzLlxuIikKLQotICAgICAgICBnZW5lcmF0ZV9hbGxfZG9tYWluc19j
b2RlKEdlbmVyYXRvci50eXBlX2J1aWxkZXJfZm9yd2FyZHMsIGNyZWF0ZV90eXBlX2J1aWxkZXJf
Y2FsbGVyKFR5cGVCdWlsZGVyUGFzcy5UWVBFREVGKSkKLQotICAgICAgICBHZW5lcmF0b3IudHlw
ZV9idWlsZGVyX2ZvcndhcmRzLmFwcGVuZCgiLy8gRW5kIG9mIHR5cGVkZWZzLlxuXG4iKQotCi0K
LWRlZiBmbGF0dGVuX2xpc3QoaW5wdXQpOgotICAgIHJlcyA9IFtdCi0KLSAgICBkZWYgZmlsbF9y
ZWN1cnNpdmUobCk6Ci0gICAgICAgIGZvciBpdGVtIGluIGw6Ci0gICAgICAgICAgICBpZiBpc2lu
c3RhbmNlKGl0ZW0sIGxpc3QpOgotICAgICAgICAgICAgICAgIGZpbGxfcmVjdXJzaXZlKGl0ZW0p
Ci0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJlcy5hcHBlbmQoaXRlbSkKLSAg
ICBmaWxsX3JlY3Vyc2l2ZShpbnB1dCkKLSAgICByZXR1cm4gcmVzCi0KLQotIyBBIHdyaXRlciB0
aGF0IG9ubHkgdXBkYXRlcyBmaWxlIGlmIGl0IGFjdHVhbGx5IGNoYW5nZWQgdG8gYmV0dGVyIHN1
cHBvcnQgaW5jcmVtZW50YWwgYnVpbGQuCi1jbGFzcyBTbWFydE91dHB1dDoKLSAgICBkZWYgX19p
bml0X18oc2VsZiwgZmlsZV9uYW1lKToKLSAgICAgICAgc2VsZi5maWxlX25hbWVfID0gZmlsZV9u
YW1lCi0gICAgICAgIHNlbGYub3V0cHV0XyA9ICIiCi0KLSAgICBkZWYgd3JpdGUoc2VsZiwgdGV4
dCk6Ci0gICAgICAgIHNlbGYub3V0cHV0XyArPSB0ZXh0Ci0KLSAgICBkZWYgY2xvc2Uoc2VsZik6
Ci0gICAgICAgIHRleHRfY2hhbmdlZCA9IFRydWUKLSAgICAgICAgc2VsZi5vdXRwdXRfID0gc2Vs
Zi5vdXRwdXRfLnJzdHJpcCgpICsgIlxuIgotCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHJl
YWRfZmlsZSA9IG9wZW4oc2VsZi5maWxlX25hbWVfLCAiciIpCi0gICAgICAgICAgICBvbGRfdGV4
dCA9IHJlYWRfZmlsZS5yZWFkKCkKLSAgICAgICAgICAgIHJlYWRfZmlsZS5jbG9zZSgpCi0gICAg
ICAgICAgICB0ZXh0X2NoYW5nZWQgPSBvbGRfdGV4dCAhPSBzZWxmLm91dHB1dF8KLSAgICAgICAg
ZXhjZXB0OgotICAgICAgICAgICAgIyBJZ25vcmUsIGp1c3Qgb3ZlcndyaXRlIGJ5IGRlZmF1bHQK
LSAgICAgICAgICAgIHBhc3MKLQotICAgICAgICBpZiB0ZXh0X2NoYW5nZWQgb3Igd3JpdGVfYWx3
YXlzOgotICAgICAgICAgICAgb3V0X2ZpbGUgPSBvcGVuKHNlbGYuZmlsZV9uYW1lXywgInciKQot
ICAgICAgICAgICAgb3V0X2ZpbGUud3JpdGUoc2VsZi5vdXRwdXRfKQotICAgICAgICAgICAgb3V0
X2ZpbGUuY2xvc2UoKQotCi0KLUdlbmVyYXRvci5nbygpCi0KLW91dHB1dF9maWxlX25hbWVfcHJl
Zml4ID0gSU5TUEVDVE9SX1RZUEVTX0dFTkVSQVRPUl9DT05GSUdfTUFQW291dHB1dF90eXBlXVsi
cHJlZml4Il0KLQotYmFja2VuZF9oX2ZpbGUgPSBTbWFydE91dHB1dChvdXRwdXRfaGVhZGVyX2Rp
cm5hbWUgKyAoIi9JbnNwZWN0b3Ilc0JhY2tlbmREaXNwYXRjaGVycy5oIiAlIG91dHB1dF9maWxl
X25hbWVfcHJlZml4KSkKLWJhY2tlbmRfY3BwX2ZpbGUgPSBTbWFydE91dHB1dChvdXRwdXRfY3Bw
X2Rpcm5hbWUgKyAoIi9JbnNwZWN0b3Ilc0JhY2tlbmREaXNwYXRjaGVycy5jcHAiICUgb3V0cHV0
X2ZpbGVfbmFtZV9wcmVmaXgpKQotCi1mcm9udGVuZF9oX2ZpbGUgPSBTbWFydE91dHB1dChvdXRw
dXRfaGVhZGVyX2Rpcm5hbWUgKyAoIi9JbnNwZWN0b3Ilc0Zyb250ZW5kRGlzcGF0Y2hlcnMuaCIg
JSBvdXRwdXRfZmlsZV9uYW1lX3ByZWZpeCkpCi1mcm9udGVuZF9jcHBfZmlsZSA9IFNtYXJ0T3V0
cHV0KG91dHB1dF9jcHBfZGlybmFtZSArICgiL0luc3BlY3RvciVzRnJvbnRlbmREaXNwYXRjaGVy
cy5jcHAiICUgb3V0cHV0X2ZpbGVfbmFtZV9wcmVmaXgpKQotCi10eXBlYnVpbGRlcl9oX2ZpbGUg
PSBTbWFydE91dHB1dChvdXRwdXRfaGVhZGVyX2Rpcm5hbWUgKyAoIi9JbnNwZWN0b3Ilc1R5cGVC
dWlsZGVycy5oIiAlIG91dHB1dF9maWxlX25hbWVfcHJlZml4KSkKLXR5cGVidWlsZGVyX2NwcF9m
aWxlID0gU21hcnRPdXRwdXQob3V0cHV0X2NwcF9kaXJuYW1lICsgKCIvSW5zcGVjdG9yJXNUeXBl
QnVpbGRlcnMuY3BwIiAlIG91dHB1dF9maWxlX25hbWVfcHJlZml4KSkKLQotYmFja2VuZF9qc19m
aWxlID0gU21hcnRPdXRwdXQob3V0cHV0X2pzX2Rpcm5hbWUgKyAoIi9JbnNwZWN0b3Ilc0JhY2tl
bmRDb21tYW5kcy5qcyIgJSBvdXRwdXRfZmlsZV9uYW1lX3ByZWZpeCkpCi0KLQotYmFja2VuZF9o
X2ZpbGUud3JpdGUoVGVtcGxhdGVzLmJhY2tlbmRfaC5zdWJzdGl0dXRlKE5vbmUsCi0gICAgb3V0
cHV0RmlsZU5hbWVQcmVmaXg9b3V0cHV0X2ZpbGVfbmFtZV9wcmVmaXgsCi0gICAgaGFuZGxlcklu
dGVyZmFjZXM9IiIuam9pbihmbGF0dGVuX2xpc3QoR2VuZXJhdG9yLmJhY2tlbmRfaGFuZGxlcl9p
bnRlcmZhY2VfbGlzdCkpLAotICAgIGRpc3BhdGNoZXJJbnRlcmZhY2VzPSIiLmpvaW4oZmxhdHRl
bl9saXN0KEdlbmVyYXRvci5iYWNrZW5kX2Rpc3BhdGNoZXJfaW50ZXJmYWNlX2xpc3QpKSkpCi0K
LWJhY2tlbmRfY3BwX2ZpbGUud3JpdGUoVGVtcGxhdGVzLmJhY2tlbmRfY3BwLnN1YnN0aXR1dGUo
Tm9uZSwKLSAgICBvdXRwdXRGaWxlTmFtZVByZWZpeD1vdXRwdXRfZmlsZV9uYW1lX3ByZWZpeCwK
LSAgICBoYW5kbGVySW1wbGVtZW50YXRpb25zPSIiLmpvaW4oZmxhdHRlbl9saXN0KEdlbmVyYXRv
ci5iYWNrZW5kX2hhbmRsZXJfaW1wbGVtZW50YXRpb25fbGlzdCkpLAotICAgIG1ldGhvZHM9Ilxu
Ii5qb2luKEdlbmVyYXRvci5iYWNrZW5kX21ldGhvZF9pbXBsZW1lbnRhdGlvbl9saXN0KSkpCi0K
LWZyb250ZW5kX2hfZmlsZS53cml0ZShUZW1wbGF0ZXMuZnJvbnRlbmRfaC5zdWJzdGl0dXRlKE5v
bmUsCi0gICAgb3V0cHV0RmlsZU5hbWVQcmVmaXg9b3V0cHV0X2ZpbGVfbmFtZV9wcmVmaXgsCi0g
ICAgZG9tYWluQ2xhc3NMaXN0PSIiLmpvaW4oR2VuZXJhdG9yLmZyb250ZW5kX2RvbWFpbl9jbGFz
c19saW5lcykpKQotCi1mcm9udGVuZF9jcHBfZmlsZS53cml0ZShUZW1wbGF0ZXMuZnJvbnRlbmRf
Y3BwLnN1YnN0aXR1dGUoTm9uZSwKLSAgICBvdXRwdXRGaWxlTmFtZVByZWZpeD1vdXRwdXRfZmls
ZV9uYW1lX3ByZWZpeCwKLSAgICBtZXRob2RzPSJcbiIuam9pbihHZW5lcmF0b3IuZnJvbnRlbmRf
bWV0aG9kX2xpc3QpKSkKLQotdHlwZWJ1aWxkZXJfaF9maWxlLndyaXRlKFRlbXBsYXRlcy50eXBl
YnVpbGRlcl9oLnN1YnN0aXR1dGUoTm9uZSwKLSAgICBvdXRwdXRGaWxlTmFtZVByZWZpeD1vdXRw
dXRfZmlsZV9uYW1lX3ByZWZpeCwKLSAgICB0eXBlQnVpbGRlckRlcGVuZGVuY2llcz1JTlNQRUNU
T1JfVFlQRVNfR0VORVJBVE9SX0NPTkZJR19NQVBbb3V0cHV0X3R5cGVdWyJ0eXBlYnVpbGRlcl9k
ZXBlbmRlbmN5Il0sCi0gICAgZXhwb3J0TWFjcm89SU5TUEVDVE9SX1RZUEVTX0dFTkVSQVRPUl9D
T05GSUdfTUFQW291dHB1dF90eXBlXVsiZXhwb3J0X21hY3JvIl0sCi0gICAgdHlwZUJ1aWxkZXJz
PSIiLmpvaW4oZmxhdHRlbl9saXN0KEdlbmVyYXRvci50eXBlX2J1aWxkZXJfZnJhZ21lbnRzKSks
Ci0gICAgZm9yd2FyZHM9IiIuam9pbihHZW5lcmF0b3IudHlwZV9idWlsZGVyX2ZvcndhcmRzKSwK
LSAgICB2YWxpZGF0b3JJZmRlZk5hbWU9VkFMSURBVE9SX0lGREVGX05BTUUpKQotCi10eXBlYnVp
bGRlcl9jcHBfZmlsZS53cml0ZShUZW1wbGF0ZXMudHlwZWJ1aWxkZXJfY3BwLnN1YnN0aXR1dGUo
Tm9uZSwKLSAgICBvdXRwdXRGaWxlTmFtZVByZWZpeD1vdXRwdXRfZmlsZV9uYW1lX3ByZWZpeCwK
LSAgICBlbnVtQ29uc3RhbnRWYWx1ZXM9RW51bUNvbnN0YW50cy5nZXRfZW51bV9jb25zdGFudF9j
b2RlKCksCi0gICAgaW1wbENvZGU9IiIuam9pbihmbGF0dGVuX2xpc3QoR2VuZXJhdG9yLnR5cGVf
YnVpbGRlcl9pbXBsX2xpc3QpKSwKLSAgICB2YWxpZGF0b3JDb2RlPSIiLmpvaW4oZmxhdHRlbl9s
aXN0KEdlbmVyYXRvci52YWxpZGF0b3JfaW1wbF9saXN0KSksCi0gICAgdmFsaWRhdG9ySWZkZWZO
YW1lPVZBTElEQVRPUl9JRkRFRl9OQU1FKSkKLQotYmFja2VuZF9qc19maWxlLndyaXRlKFRlbXBs
YXRlcy5iYWNrZW5kX2pzLnN1YnN0aXR1dGUoTm9uZSwKLSAgICBkb21haW5Jbml0aWFsaXplcnM9
IiIuam9pbihHZW5lcmF0b3IuYmFja2VuZF9qc19kb21haW5faW5pdGlhbGl6ZXJfbGlzdCkpKQot
Ci1iYWNrZW5kX2hfZmlsZS5jbG9zZSgpCi1iYWNrZW5kX2NwcF9maWxlLmNsb3NlKCkKLQotZnJv
bnRlbmRfaF9maWxlLmNsb3NlKCkKLWZyb250ZW5kX2NwcF9maWxlLmNsb3NlKCkKLQotdHlwZWJ1
aWxkZXJfaF9maWxlLmNsb3NlKCkKLXR5cGVidWlsZGVyX2NwcF9maWxlLmNsb3NlKCkKLQotYmFj
a2VuZF9qc19maWxlLmNsb3NlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL19faW5pdF9fLnB5IGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGI3
NjExOGNlNWVlMjlmODRjZDU1MGU5ODQyMTgwYTRlYjM0OTczYQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL19faW5pdF9f
LnB5CkBAIC0wLDAgKzEsMTIgQEAKKyMgUmVxdWlyZWQgZm9yIFB5dGhvbiB0byBzZWFyY2ggdGhp
cyBkaXJlY3RvcnkgZm9yIG1vZHVsZSBmaWxlcworCitmcm9tIG1vZGVscyBpbXBvcnQgKgorZnJv
bSBnZW5lcmF0b3IgaW1wb3J0ICoKKworZnJvbSBnZW5lcmF0ZV9iYWNrZW5kX2NvbW1hbmRzIGlt
cG9ydCAqCitmcm9tIGdlbmVyYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIgaW1wb3J0ICoK
K2Zyb20gZ2VuZXJhdGVfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uIGltcG9ydCAq
Citmcm9tIGdlbmVyYXRlX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyIGltcG9ydCAqCitmcm9t
IGdlbmVyYXRlX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24gaW1wb3J0ICoKK2Zy
b20gZ2VuZXJhdGVfdHlwZV9idWlsZGVyX2hlYWRlciBpbXBvcnQgKgorZnJvbSBnZW5lcmF0ZV90
eXBlX2J1aWxkZXJfaW1wbGVtZW50YXRpb24gaW1wb3J0ICoKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2JhY2tlbmRf
Y29tbWFuZHMucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29k
ZWdlbi9nZW5lcmF0ZV9iYWNrZW5kX2NvbW1hbmRzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI1M2EzMmFiM2Fi
ODE3NTNiYWIwNTUwNmQyZTEyYzFkNzg4MWMxYzIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9iYWNrZW5k
X2NvbW1hbmRzLnB5CkBAIC0wLDAgKzEsMTM0IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMg
Q29weXJpZ2h0IChjKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29w
eXJpZ2h0IChjKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyMgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKworaW1wb3J0
IGxvZ2dpbmcKK2ltcG9ydCBvcy5wYXRoCitpbXBvcnQgc3RyaW5nCisKK2Zyb20gZ2VuZXJhdG9y
IGltcG9ydCBHZW5lcmF0b3IsIHVjZmlyc3QKK2Zyb20gc3RyaW5nIGltcG9ydCBUZW1wbGF0ZQor
ZnJvbSBnZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgVGVt
cGxhdGVzCitmcm9tIG1vZGVscyBpbXBvcnQgRW51bVR5cGUKKworIyBVc2UgYSBnbG9iYWwgbG9n
Z2VyLCB3aGljaCBub3JtYWxseSBvbmx5IGxvZ3MgZXJyb3JzLgorIyBJdCBjYW4gYmUgY29uZmln
dXJlZCB0byBsb2cgZGVidWcgbWVzc2FnZXMgZnJvbSB0aGUgQ0xJLgorbG9nZ2luZy5iYXNpY0Nv
bmZpZyhmb3JtYXQ9JyUobGV2ZWxuYW1lKXM6ICUobWVzc2FnZSlzJywgbGV2ZWw9bG9nZ2luZy5F
UlJPUikKK2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQorCisKK2NsYXNzIEJhY2tl
bmRDb21tYW5kc0dlbmVyYXRvcihHZW5lcmF0b3IpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBt
b2RlbCwgaW5wdXRfZmlsZXBhdGgpOgorICAgICAgICBzZWxmLl9tb2RlbCA9IG1vZGVsCisgICAg
ICAgIHNlbGYuX2lucHV0X2ZpbGVwYXRoID0gaW5wdXRfZmlsZXBhdGgKKworICAgIGRlZiBtb2Rl
bChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX21vZGVsCisKKyAgICBkZWYgb3V0cHV0X2Zp
bGVuYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gIkluc3BlY3RvciVzQmFja2VuZENvbW1hbmRz
LmpzIiAlIHNlbGYubW9kZWwoKS5mcmFtZXdvcmsuc2V0dGluZygncHJlZml4JykKKworICAgIGRl
ZiBnZW5lcmF0ZV9saWNlbnNlKHNlbGYpOgorICAgICAgICByZXR1cm4gVGVtcGxhdGUoVGVtcGxh
dGVzLkNvcHlyaWdodEJsb2NrKS5zdWJzdGl0dXRlKE5vbmUsIGlucHV0RmlsZW5hbWU9b3MucGF0
aC5iYXNlbmFtZShzZWxmLl9pbnB1dF9maWxlcGF0aCkpCisKKyAgICBkZWYgZ2VuZXJhdGVfb3V0
cHV0KHNlbGYpOgorICAgICAgICBkb21haW5zX3RvX2dlbmVyYXRlID0gW10KKyAgICAgICAgZm9y
IF9kb21haW4gaW4gc2VsZi5tb2RlbCgpLmRvbWFpbnM6CisgICAgICAgICAgICBlbnVtX3R5cGVz
ID0gZmlsdGVyKGxhbWJkYSBkZWNsYXJhdGlvbjogaXNpbnN0YW5jZShkZWNsYXJhdGlvbi50eXBl
LCBFbnVtVHlwZSksIF9kb21haW4udHlwZV9kZWNsYXJhdGlvbnMpCisgICAgICAgICAgICBpZiBf
ZG9tYWluLmlzX3N1cHBsZW1lbnRhbDoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAg
ICAgICAgZWxpZiBsZW4oX2RvbWFpbi5jb21tYW5kcykgPT0gMCBhbmQgbGVuKF9kb21haW4uZXZl
bnRzKSA9PSAwIGFuZCBsZW4oZW51bV90eXBlcykgPT0gMDoKKyAgICAgICAgICAgICAgICBjb250
aW51ZQorCisgICAgICAgICAgICBkb21haW5zX3RvX2dlbmVyYXRlLmFwcGVuZChfZG9tYWluKQor
CisgICAgICAgIHNlY3Rpb25zID0gW10KKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2Vu
ZXJhdGVfbGljZW5zZSgpKQorICAgICAgICBzZWN0aW9ucy5leHRlbmQoW3NlbGYuZ2VuZXJhdGVf
ZG9tYWluKGRvbWFpbikgZm9yIGRvbWFpbiBpbiBkb21haW5zX3RvX2dlbmVyYXRlXSkKKyAgICAg
ICAgcmV0dXJuICJcblxuIi5qb2luKHNlY3Rpb25zKQorCisgICAgZGVmIGdlbmVyYXRlX2RvbWFp
bihzZWxmLCBkb21haW4pOgorICAgICAgICBsaW5lcyA9IFtdCisgICAgICAgIGFyZ3MgPSB7Cisg
ICAgICAgICAgICAnZG9tYWluJzogZG9tYWluLmRvbWFpbl9uYW1lCisgICAgICAgIH0KKworICAg
ICAgICAjIFByZWFtYmxlCisgICAgICAgIGxpbmVzLmFwcGVuZCgnLy8gJShkb21haW4pcy4nICUg
YXJncykKKworICAgICAgICBoYXNfYXN5bmNfY29tbWFuZHMgPSBhbnkobWFwKGxhbWJkYSBjb21t
YW5kOiBjb21tYW5kLmlzX2FzeW5jLCBkb21haW4uY29tbWFuZHMpKQorICAgICAgICBpZiBsZW4o
ZG9tYWluLmV2ZW50cykgPiAwIG9yIGhhc19hc3luY19jb21tYW5kczoKKyAgICAgICAgICAgIGxp
bmVzLmFwcGVuZCgnSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlciUoZG9tYWluKXNEaXNwYXRjaGVy
ID0gSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbkRpc3BhdGNoZXIuYmluZChJbnNwZWN0
b3JCYWNrZW5kLCAiJShkb21haW4pcyIpOycgJSBhcmdzKQorCisgICAgICAgICMgRW51bSBUeXBl
IERlY2xhcmF0aW9ucworICAgICAgICBmb3IgX2RlY2xhcmF0aW9uIGluIGRvbWFpbi50eXBlX2Rl
Y2xhcmF0aW9uczoKKyAgICAgICAgICAgIGlmIF9kZWNsYXJhdGlvbi50eXBlLmlzX2VudW0oKToK
KyAgICAgICAgICAgICAgICBlbnVtX2FyZ3MgPSB7CisgICAgICAgICAgICAgICAgICAgICdkb21h
aW4nOiBkb21haW4uZG9tYWluX25hbWUsCisgICAgICAgICAgICAgICAgICAgICdlbnVtTmFtZSc6
IF9kZWNsYXJhdGlvbi50eXBlX25hbWUsCisgICAgICAgICAgICAgICAgICAgICdlbnVtTWFwJzog
IiwgIi5qb2luKFsnJXM6ICIlcyInICUgKEdlbmVyYXRvci5zdHlsaXplZF9uYW1lX2Zvcl9lbnVt
X3ZhbHVlKGVudW1fdmFsdWUpLCBlbnVtX3ZhbHVlKSBmb3IgZW51bV92YWx1ZSBpbiBfZGVjbGFy
YXRpb24udHlwZS5lbnVtX3ZhbHVlcygpXSkKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgbGluZXMuYXBwZW5kKCdJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRW51bSgiJShkb21h
aW4pcy4lKGVudW1OYW1lKXMiLCB7JShlbnVtTWFwKXN9KTsnICUgZW51bV9hcmdzKQorCisgICAg
ICAgICAgICBkZWYgaXNfYW5vbnltb3VzX2VudW1fbWVtYmVyKHR5cGVfbWVtYmVyKToKKyAgICAg
ICAgICAgICAgICByZXR1cm4gaXNpbnN0YW5jZSh0eXBlX21lbWJlci50eXBlLCBFbnVtVHlwZSkg
YW5kIHR5cGVfbWVtYmVyLnR5cGUuaXNfYW5vbnltb3VzCisKKyAgICAgICAgICAgIGZvciBfbWVt
YmVyIGluIGZpbHRlcihpc19hbm9ueW1vdXNfZW51bV9tZW1iZXIsIF9kZWNsYXJhdGlvbi50eXBl
X21lbWJlcnMpOgorICAgICAgICAgICAgICAgIGVudW1fYXJncyA9IHsKKyAgICAgICAgICAgICAg
ICAgICAgJ2RvbWFpbic6IGRvbWFpbi5kb21haW5fbmFtZSwKKyAgICAgICAgICAgICAgICAgICAg
J2VudW1OYW1lJzogJyVzJXMnICUgKF9kZWNsYXJhdGlvbi50eXBlX25hbWUsIHVjZmlyc3QoX21l
bWJlci5tZW1iZXJfbmFtZSkpLAorICAgICAgICAgICAgICAgICAgICAnZW51bU1hcCc6ICIsICIu
am9pbihbJyVzOiAiJXMiJyAlIChHZW5lcmF0b3Iuc3R5bGl6ZWRfbmFtZV9mb3JfZW51bV92YWx1
ZShlbnVtX3ZhbHVlKSwgZW51bV92YWx1ZSkgZm9yIGVudW1fdmFsdWUgaW4gX21lbWJlci50eXBl
LmVudW1fdmFsdWVzKCldKQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBsaW5l
cy5hcHBlbmQoJ0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFbnVtKCIlKGRvbWFpbilzLiUoZW51
bU5hbWUpcyIsIHslKGVudW1NYXApc30pOycgJSBlbnVtX2FyZ3MpCisKKyAgICAgICAgIyBFdmVu
dHMKKyAgICAgICAgZm9yIF9ldmVudCBpbiBkb21haW4uZXZlbnRzOgorICAgICAgICAgICAgZXZl
bnRfYXJncyA9IHsKKyAgICAgICAgICAgICAgICAnZG9tYWluJzogZG9tYWluLmRvbWFpbl9uYW1l
LAorICAgICAgICAgICAgICAgICdldmVudE5hbWUnOiBfZXZlbnQuZXZlbnRfbmFtZSwKKyAgICAg
ICAgICAgICAgICAncGFyYW1zJzogIiwgIi5qb2luKFsnIiVzIicgJSBfcGFyYW1ldGVyLnBhcmFt
ZXRlcl9uYW1lIGZvciBfcGFyYW1ldGVyIGluIF9ldmVudC5ldmVudF9wYXJhbWV0ZXJzXSkKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnSW5zcGVjdG9yQmFja2VuZC5y
ZWdpc3RlckV2ZW50KCIlKGRvbWFpbilzLiUoZXZlbnROYW1lKXMiLCBbJShwYXJhbXMpc10pOycg
JSBldmVudF9hcmdzKQorCisgICAgICAgICMgQ29tbWFuZHMKKyAgICAgICAgZm9yIF9jb21tYW5k
IGluIGRvbWFpbi5jb21tYW5kczoKKworICAgICAgICAgICAgZGVmIGdlbmVyYXRlX3BhcmFtZXRl
cl9vYmplY3QocGFyYW1ldGVyKToKKyAgICAgICAgICAgICAgICBvcHRpb25hbF9zdHJpbmcgPSAi
dHJ1ZSIgaWYgX3BhcmFtZXRlci5pc19vcHRpb25hbCBlbHNlICJmYWxzZSIKKyAgICAgICAgICAg
ICAgICBwYWlycyA9IFtdCisgICAgICAgICAgICAgICAgcGFpcnMuYXBwZW5kKCcibmFtZSI6ICIl
cyInICUgX3BhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkKKyAgICAgICAgICAgICAgICBwYWlycy5h
cHBlbmQoJyJ0eXBlIjogIiVzIicgJSBHZW5lcmF0b3IuanNfbmFtZV9mb3JfcGFyYW1ldGVyX3R5
cGUoX3BhcmFtZXRlci50eXBlKSkKKyAgICAgICAgICAgICAgICBwYWlycy5hcHBlbmQoJyJvcHRp
b25hbCI6ICVzJyAlIG9wdGlvbmFsX3N0cmluZykKKyAgICAgICAgICAgICAgICByZXR1cm4gInsl
c30iICUgIiwgIi5qb2luKHBhaXJzKQorCisgICAgICAgICAgICBjb21tYW5kX2FyZ3MgPSB7Cisg
ICAgICAgICAgICAgICAgJ2RvbWFpbic6IGRvbWFpbi5kb21haW5fbmFtZSwKKyAgICAgICAgICAg
ICAgICAnY29tbWFuZE5hbWUnOiBfY29tbWFuZC5jb21tYW5kX25hbWUsCisgICAgICAgICAgICAg
ICAgJ2NhbGxQYXJhbXMnOiAiLCAiLmpvaW4oW2dlbmVyYXRlX3BhcmFtZXRlcl9vYmplY3QoX3Bh
cmFtZXRlcikgZm9yIF9wYXJhbWV0ZXIgaW4gX2NvbW1hbmQuY2FsbF9wYXJhbWV0ZXJzXSksCisg
ICAgICAgICAgICAgICAgJ3JldHVyblBhcmFtcyc6ICIsICIuam9pbihbJyIlcyInICUgX3BhcmFt
ZXRlci5wYXJhbWV0ZXJfbmFtZSBmb3IgX3BhcmFtZXRlciBpbiBfY29tbWFuZC5yZXR1cm5fcGFy
YW1ldGVyc10pLAorICAgICAgICAgICAgfQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCdJbnNw
ZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiJShkb21haW4pcy4lKGNvbW1hbmROYW1lKXMi
LCBbJShjYWxsUGFyYW1zKXNdLCBbJShyZXR1cm5QYXJhbXMpc10pOycgJSBjb21tYW5kX2FyZ3Mp
CisKKyAgICAgICAgcmV0dXJuICJcbiIuam9pbihsaW5lcykKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2JhY2tlbmRf
ZGlzcGF0Y2hlcl9oZWFkZXIucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5Cm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmYwZWZjYzVmOTg1YzUyNzdmNTI2ZGY2ZGNhYTRjNTdjNzlmZjlmY2UKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdl
bi9nZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5CkBAIC0wLDAgKzEsMTkwIEBA
CisjIS91c3IvYmluL2VudiBweXRob24KKyMgQ29weXJpZ2h0IChjKSAyMDE0IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChjKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisj
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworIyBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisKKworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBvcy5wYXRoCitpbXBv
cnQgcmUKK2ltcG9ydCBzdHJpbmcKKworZnJvbSBnZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvciwg
dWNmaXJzdAorZnJvbSBtb2RlbHMgaW1wb3J0IEVudW1UeXBlCitmcm9tIHN0cmluZyBpbXBvcnQg
VGVtcGxhdGUKK2Zyb20gZ2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgR2VuZXJhdG9yVGVtcGxh
dGVzIGFzIFRlbXBsYXRlcworCisjIFVzZSBhIGdsb2JhbCBsb2dnZXIsIHdoaWNoIG5vcm1hbGx5
IG9ubHkgbG9ncyBlcnJvcnMuCisjIEl0IGNhbiBiZSBjb25maWd1cmVkIHRvIGxvZyBkZWJ1ZyBt
ZXNzYWdlcyBmcm9tIHRoZSBDTEkuCitsb2cgPSBsb2dnaW5nLmdldExvZ2dlcignZ2xvYmFsJykK
KworCitjbGFzcyBCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvcihHZW5lcmF0b3IpOgor
ICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpOgorICAgICAgICBz
ZWxmLl9tb2RlbCA9IG1vZGVsCisgICAgICAgIHNlbGYuX2lucHV0X2ZpbGVwYXRoID0gaW5wdXRf
ZmlsZXBhdGgKKworICAgIGRlZiBtb2RlbChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX21v
ZGVsCisKKyAgICBkZWYgb3V0cHV0X2ZpbGVuYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gIklu
c3BlY3RvciVzQmFja2VuZERpc3BhdGNoZXJzLmgiICUgc2VsZi5tb2RlbCgpLmZyYW1ld29yay5z
ZXR0aW5nKCdwcmVmaXgnKQorCisgICAgZGVmIGdlbmVyYXRlX2xpY2Vuc2Uoc2VsZik6CisgICAg
ICAgIHJldHVybiBUZW1wbGF0ZShUZW1wbGF0ZXMuQ29weXJpZ2h0QmxvY2spLnN1YnN0aXR1dGUo
Tm9uZSwgaW5wdXRGaWxlbmFtZT1vcy5wYXRoLmJhc2VuYW1lKHNlbGYuX2lucHV0X2ZpbGVwYXRo
KSkKKworICAgIGRlZiBnZW5lcmF0ZV9vdXRwdXQoc2VsZik6CisgICAgICAgIGhlYWRlcnMgPSBb
CisgICAgICAgICAgICAnIkluc3BlY3RvciVzVHlwZUJ1aWxkZXJzLmgiJyAlIHNlbGYubW9kZWwo
KS5mcmFtZXdvcmsuc2V0dGluZygncHJlZml4JyksCisgICAgICAgICAgICAnPGluc3BlY3Rvci9J
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPicsCisgICAgICAgICAgICAnPHd0Zi9QYXNzUmVm
UHRyLmg+JywKKyAgICAgICAgICAgICc8d3RmL3RleHQvV1RGU3RyaW5nLmg+J10KKworICAgICAg
ICB0eXBlZGVmcyA9IFsoJ1N0cmluZycsICdFcnJvclN0cmluZycpXQorCisgICAgICAgIHNlY3Rp
b25zID0gW10KKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfbGljZW5zZSgp
KQorICAgICAgICBoZWFkZXJfYXJncyA9IHsKKyAgICAgICAgICAgICdoZWFkZXJHdWFyZFN0cmlu
Zyc6IHJlLnN1YignWy0uL10nLCAnXycsIHNlbGYub3V0cHV0X2ZpbGVuYW1lKCkpLAorICAgICAg
ICAgICAgJ2luY2x1ZGVzJzogJ1xuJy5qb2luKFsnI2luY2x1ZGUgJyArIGhlYWRlciBmb3IgaGVh
ZGVyIGluIGhlYWRlcnNdKSwKKyAgICAgICAgICAgICd0eXBlZGVmcyc6ICdcbicuam9pbihbJ3R5
cGVkZWYgJXMgJXM7JyAlIHR5cGVkZWYgZm9yIHR5cGVkZWYgaW4gdHlwZWRlZnNdKSwKKyAgICAg
ICAgICAgICdpbnB1dEZpbGVuYW1lJzogc2VsZi5faW5wdXRfZmlsZXBhdGgKKyAgICAgICAgfQor
CisgICAgICAgIGRvbWFpbnMgPSBzZWxmLmRvbWFpbnNfdG9fZ2VuZXJhdGUoKQorICAgICAgICBk
b21haW5zID0gZmlsdGVyKGxhbWJkYSBkb21haW46IGxlbihkb21haW4uY29tbWFuZHMpID4gMCwg
ZG9tYWlucykKKworICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVzLkNw
cEhlYWRlclByZWx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCisgICAgICAg
IHNlY3Rpb25zLmV4dGVuZChtYXAoc2VsZi5fZ2VuZXJhdGVfaGFuZGxlcl9kZWNsYXJhdGlvbnNf
Zm9yX2RvbWFpbiwgZG9tYWlucykpCisgICAgICAgIHNlY3Rpb25zLmV4dGVuZChtYXAoc2VsZi5f
Z2VuZXJhdGVfZGlzcGF0Y2hlcl9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbiwgZG9tYWlucykpCisg
ICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMuQ3BwSGVhZGVyUG9zdGx1
ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCisgICAgICAgIHJldHVybiAiXG5c
biIuam9pbihzZWN0aW9ucykKKworICAgICMgUHJpdmF0ZSBtZXRob2RzLgorCisgICAgZGVmIF9n
ZW5lcmF0ZV9oYW5kbGVyX2RlY2xhcmF0aW9uc19mb3JfZG9tYWluKHNlbGYsIGRvbWFpbik6Cisg
ICAgICAgIGNsYXNzQ29tcG9uZW50cyA9IFsnY2xhc3MnXQorICAgICAgICBleHBvcnRNYWNybyA9
IHNlbGYubW9kZWwoKS5mcmFtZXdvcmsuc2V0dGluZygnZXhwb3J0X21hY3JvJywgTm9uZSkKKyAg
ICAgICAgaWYgZXhwb3J0TWFjcm8gaXMgbm90IE5vbmU6CisgICAgICAgICAgICBjbGFzc0NvbXBv
bmVudHMuYXBwZW5kKGV4cG9ydE1hY3JvKQorCisgICAgICAgIHVzZWRfZW51bV9uYW1lcyA9IHNl
dCgpCisKKyAgICAgICAgY29tbWFuZF9kZWNsYXJhdGlvbnMgPSBbXQorICAgICAgICBmb3IgY29t
bWFuZCBpbiBkb21haW4uY29tbWFuZHM6CisgICAgICAgICAgICBjb21tYW5kX2RlY2xhcmF0aW9u
cy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfaGFuZGxlcl9kZWNsYXJhdGlvbl9mb3JfY29tbWFuZChj
b21tYW5kLCB1c2VkX2VudW1fbmFtZXMpKQorCisgICAgICAgIGhhbmRsZXJfYXJncyA9IHsKKyAg
ICAgICAgICAgICdjbGFzc0FuZEV4cG9ydE1hY3JvJzogIiAiLmpvaW4oY2xhc3NDb21wb25lbnRz
KSwKKyAgICAgICAgICAgICdkb21haW5OYW1lJzogZG9tYWluLmRvbWFpbl9uYW1lLAorICAgICAg
ICAgICAgJ2NvbW1hbmREZWNsYXJhdGlvbnMnOiAiXG4iLmpvaW4oY29tbWFuZF9kZWNsYXJhdGlv
bnMpCisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gR2VuZXJhdG9yLndyYXBfd2l0aF9ndWFy
ZF9mb3JfZG9tYWluKGRvbWFpbiwgVGVtcGxhdGUoVGVtcGxhdGVzLkJhY2tlbmREaXNwYXRjaGVy
SGVhZGVyRG9tYWluSGFuZGxlckRlY2xhcmF0aW9uKS5zdWJzdGl0dXRlKE5vbmUsICoqaGFuZGxl
cl9hcmdzKSkKKworICAgIGRlZiBfZ2VuZXJhdGVfYW5vbnltb3VzX2VudW1fZm9yX3BhcmFtZXRl
cihzZWxmLCBwYXJhbWV0ZXIsIGNvbW1hbmQpOgorICAgICAgICBlbnVtX2FyZ3MgPSB7CisgICAg
ICAgICAgICAncGFyYW1ldGVyTmFtZSc6IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwKKyAgICAg
ICAgICAgICdjb21tYW5kTmFtZSc6IGNvbW1hbmQuY29tbWFuZF9uYW1lCisgICAgICAgIH0KKwor
ICAgICAgICBsaW5lcyA9IFtdCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIC8vIE5hbWVkIGFm
dGVyIHBhcmFtZXRlciBcJyUocGFyYW1ldGVyTmFtZSlzXCcgd2hpbGUgZ2VuZXJhdGluZyBjb21t
YW5kL2V2ZW50ICUoY29tbWFuZE5hbWUpcy4nICUgZW51bV9hcmdzKQorICAgICAgICBsaW5lcy5h
cHBlbmQoJyAgICBlbnVtIGNsYXNzICVzIHsnICUgdWNmaXJzdChwYXJhbWV0ZXIucGFyYW1ldGVy
X25hbWUpKQorICAgICAgICBmb3IgZW51bV92YWx1ZSBpbiBwYXJhbWV0ZXIudHlwZS5lbnVtX3Zh
bHVlcygpOgorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgICVzID0gJWQsJyAlIChH
ZW5lcmF0b3Iuc3R5bGl6ZWRfbmFtZV9mb3JfZW51bV92YWx1ZShlbnVtX3ZhbHVlKSwgc2VsZi5l
bmNvZGluZ19mb3JfZW51bV92YWx1ZShlbnVtX3ZhbHVlKSkpCisgICAgICAgIGxpbmVzLmFwcGVu
ZCgnICAgIH07IC8vIGVudW0gY2xhc3MgJXMnICUgdWNmaXJzdChwYXJhbWV0ZXIucGFyYW1ldGVy
X25hbWUpKQorICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQorCisgICAgZGVmIF9nZW5l
cmF0ZV9oYW5kbGVyX2RlY2xhcmF0aW9uX2Zvcl9jb21tYW5kKHNlbGYsIGNvbW1hbmQsIHVzZWRf
ZW51bV9uYW1lcyk6CisgICAgICAgIGlmIGNvbW1hbmQuaXNfYXN5bmM6CisgICAgICAgICAgICBy
ZXR1cm4gc2VsZi5fZ2VuZXJhdGVfYXN5bmNfaGFuZGxlcl9kZWNsYXJhdGlvbl9mb3JfY29tbWFu
ZChjb21tYW5kKQorCisgICAgICAgIGxpbmVzID0gW10KKyAgICAgICAgcGFyYW1ldGVycyA9IFsn
RXJyb3JTdHJpbmcqJ10KKyAgICAgICAgZm9yIF9wYXJhbWV0ZXIgaW4gY29tbWFuZC5jYWxsX3Bh
cmFtZXRlcnM6CisgICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZCgiJXMgaW5fJXMiICUgKEdl
bmVyYXRvci50eXBlX3N0cmluZ19mb3JfdW5jaGVja2VkX2Zvcm1hbF9pbl9wYXJhbWV0ZXIoX3Bh
cmFtZXRlciksIF9wYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpKQorCisgICAgICAgICAgICBpZiBp
c2luc3RhbmNlKF9wYXJhbWV0ZXIudHlwZSwgRW51bVR5cGUpIGFuZCBfcGFyYW1ldGVyLnBhcmFt
ZXRlcl9uYW1lIG5vdCBpbiB1c2VkX2VudW1fbmFtZXM6CisgICAgICAgICAgICAgICAgbGluZXMu
YXBwZW5kKHNlbGYuX2dlbmVyYXRlX2Fub255bW91c19lbnVtX2Zvcl9wYXJhbWV0ZXIoX3BhcmFt
ZXRlciwgY29tbWFuZCkpCisgICAgICAgICAgICAgICAgdXNlZF9lbnVtX25hbWVzLmFkZChfcGFy
YW1ldGVyLnBhcmFtZXRlcl9uYW1lKQorCisgICAgICAgIGZvciBfcGFyYW1ldGVyIGluIGNvbW1h
bmQucmV0dXJuX3BhcmFtZXRlcnM6CisgICAgICAgICAgICBwYXJhbWV0ZXJfbmFtZSA9ICdvdXRf
JyArIF9wYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUKKyAgICAgICAgICAgIGlmIF9wYXJhbWV0ZXIu
aXNfb3B0aW9uYWw6CisgICAgICAgICAgICAgICAgcGFyYW1ldGVyX25hbWUgPSAnb3B0XycgKyBw
YXJhbWV0ZXJfbmFtZQorICAgICAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoIiVzICVzIiAlIChH
ZW5lcmF0b3IudHlwZV9zdHJpbmdfZm9yX2Zvcm1hbF9vdXRfcGFyYW1ldGVyKF9wYXJhbWV0ZXIp
LCBwYXJhbWV0ZXJfbmFtZSkpCisKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoX3BhcmFtZXRl
ci50eXBlLCBFbnVtVHlwZSkgYW5kIF9wYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUgbm90IGluIHVz
ZWRfZW51bV9uYW1lczoKKyAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJh
dGVfYW5vbnltb3VzX2VudW1fZm9yX3BhcmFtZXRlcihfcGFyYW1ldGVyLCBjb21tYW5kKSkKKyAg
ICAgICAgICAgICAgICB1c2VkX2VudW1fbmFtZXMuYWRkKF9wYXJhbWV0ZXIucGFyYW1ldGVyX25h
bWUpCisKKyAgICAgICAgY29tbWFuZF9hcmdzID0geworICAgICAgICAgICAgJ2NvbW1hbmROYW1l
JzogY29tbWFuZC5jb21tYW5kX25hbWUsCisgICAgICAgICAgICAncGFyYW1ldGVycyc6ICIsICIu
am9pbihwYXJhbWV0ZXJzKQorICAgICAgICB9CisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIHZp
cnR1YWwgdm9pZCAlKGNvbW1hbmROYW1lKXMoJShwYXJhbWV0ZXJzKXMpID0gMDsnICUgY29tbWFu
ZF9hcmdzKQorICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQorCisgICAgZGVmIF9nZW5l
cmF0ZV9hc3luY19oYW5kbGVyX2RlY2xhcmF0aW9uX2Zvcl9jb21tYW5kKHNlbGYsIGNvbW1hbmQp
OgorICAgICAgICBjYWxsYmFja05hbWUgPSAiJXNDYWxsYmFjayIgJSB1Y2ZpcnN0KGNvbW1hbmQu
Y29tbWFuZF9uYW1lKQorCisgICAgICAgIGluX3BhcmFtZXRlcnMgPSBbJ0Vycm9yU3RyaW5nKidd
CisgICAgICAgIGZvciBfcGFyYW1ldGVyIGluIGNvbW1hbmQuY2FsbF9wYXJhbWV0ZXJzOgorICAg
ICAgICAgICAgaW5fcGFyYW1ldGVycy5hcHBlbmQoIiVzIGluXyVzIiAlIChHZW5lcmF0b3IudHlw
ZV9zdHJpbmdfZm9yX3VuY2hlY2tlZF9mb3JtYWxfaW5fcGFyYW1ldGVyKF9wYXJhbWV0ZXIpLCBf
cGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKSkKKyAgICAgICAgaW5fcGFyYW1ldGVycy5hcHBlbmQo
IlBhc3NSZWZQdHI8JXM+IGNhbGxiYWNrIiAlIGNhbGxiYWNrTmFtZSkKKworICAgICAgICBvdXRf
cGFyYW1ldGVycyA9IFtdCisgICAgICAgIGZvciBfcGFyYW1ldGVyIGluIGNvbW1hbmQucmV0dXJu
X3BhcmFtZXRlcnM6CisgICAgICAgICAgICBvdXRfcGFyYW1ldGVycy5hcHBlbmQoIiVzICVzIiAl
IChHZW5lcmF0b3IudHlwZV9zdHJpbmdfZm9yX2Zvcm1hbF9hc3luY19wYXJhbWV0ZXIoX3BhcmFt
ZXRlciksIF9wYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpKQorCisgICAgICAgIGNvbW1hbmRfYXJn
cyA9IHsKKyAgICAgICAgICAgICdjYWxsYmFja05hbWUnOiBjYWxsYmFja05hbWUsCisgICAgICAg
ICAgICAnY29tbWFuZE5hbWUnOiBjb21tYW5kLmNvbW1hbmRfbmFtZSwKKyAgICAgICAgICAgICdp
blBhcmFtZXRlcnMnOiAiLCAiLmpvaW4oaW5fcGFyYW1ldGVycyksCisgICAgICAgICAgICAnb3V0
UGFyYW1ldGVycyc6ICIsICIuam9pbihvdXRfcGFyYW1ldGVycyksCisgICAgICAgIH0KKworICAg
ICAgICByZXR1cm4gVGVtcGxhdGUoVGVtcGxhdGVzLkJhY2tlbmREaXNwYXRjaGVySGVhZGVyQXN5
bmNDb21tYW5kRGVjbGFyYXRpb24pLnN1YnN0aXR1dGUoTm9uZSwgKipjb21tYW5kX2FyZ3MpCisK
KyAgICBkZWYgX2dlbmVyYXRlX2Rpc3BhdGNoZXJfZGVjbGFyYXRpb25zX2Zvcl9kb21haW4oc2Vs
ZiwgZG9tYWluKToKKyAgICAgICAgY2xhc3NDb21wb25lbnRzID0gWydjbGFzcyddCisgICAgICAg
IGV4cG9ydE1hY3JvID0gc2VsZi5tb2RlbCgpLmZyYW1ld29yay5zZXR0aW5nKCdleHBvcnRfbWFj
cm8nLCBOb25lKQorICAgICAgICBpZiBleHBvcnRNYWNybyBpcyBub3QgTm9uZToKKyAgICAgICAg
ICAgIGNsYXNzQ29tcG9uZW50cy5hcHBlbmQoZXhwb3J0TWFjcm8pCisKKyAgICAgICAgZGVjbGFy
YXRpb25zID0gW10KKyAgICAgICAgaWYgbGVuKGRvbWFpbi5jb21tYW5kcykgPiAwOgorICAgICAg
ICAgICAgZGVjbGFyYXRpb25zLmFwcGVuZCgncHJpdmF0ZTonKQorICAgICAgICBkZWNsYXJhdGlv
bnMuZXh0ZW5kKG1hcChzZWxmLl9nZW5lcmF0ZV9kaXNwYXRjaGVyX2RlY2xhcmF0aW9uX2Zvcl9j
b21tYW5kLCBkb21haW4uY29tbWFuZHMpKQorCisgICAgICAgIGhhbmRsZXJfYXJncyA9IHsKKyAg
ICAgICAgICAgICdjbGFzc0FuZEV4cG9ydE1hY3JvJzogIiAiLmpvaW4oY2xhc3NDb21wb25lbnRz
KSwKKyAgICAgICAgICAgICdkb21haW5OYW1lJzogZG9tYWluLmRvbWFpbl9uYW1lLAorICAgICAg
ICAgICAgJ2NvbW1hbmREZWNsYXJhdGlvbnMnOiAiXG4iLmpvaW4oZGVjbGFyYXRpb25zKQorICAg
ICAgICB9CisKKyAgICAgICAgcmV0dXJuIEdlbmVyYXRvci53cmFwX3dpdGhfZ3VhcmRfZm9yX2Rv
bWFpbihkb21haW4sIFRlbXBsYXRlKFRlbXBsYXRlcy5CYWNrZW5kRGlzcGF0Y2hlckhlYWRlckRv
bWFpbkRpc3BhdGNoZXJEZWNsYXJhdGlvbikuc3Vic3RpdHV0ZShOb25lLCAqKmhhbmRsZXJfYXJn
cykpCisKKyAgICBkZWYgX2dlbmVyYXRlX2Rpc3BhdGNoZXJfZGVjbGFyYXRpb25fZm9yX2NvbW1h
bmQoc2VsZiwgY29tbWFuZCk6CisgICAgICAgIHJldHVybiAiICAgIHZvaWQgJXMobG9uZyBjYWxs
SWQsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsiICUgY29tbWFu
ZC5jb21tYW5kX25hbWUKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRh
dGlvbi5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2Vu
L2dlbmVyYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li43YjFiNDFhNTU1ZTc2NzcxZjljZGViZmI0NWFiOTczNzQ0MGFhMzM0Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2Vu
ZXJhdGVfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5CkBAIC0wLDAgKzEsMjc4
IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMgQ29weXJpZ2h0IChjKSAyMDE0IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChjKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
IyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisKKworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBvcy5wYXRoCitp
bXBvcnQgcmUKK2ltcG9ydCBzdHJpbmcKKworZnJvbSBnZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRv
ciwgdWNmaXJzdAorZnJvbSBzdHJpbmcgaW1wb3J0IFRlbXBsYXRlCitmcm9tIGdlbmVyYXRvcl90
ZW1wbGF0ZXMgaW1wb3J0IEdlbmVyYXRvclRlbXBsYXRlcyBhcyBUZW1wbGF0ZXMKK2Zyb20gbW9k
ZWxzIGltcG9ydCBPYmplY3RUeXBlLCBBcnJheVR5cGUKKworIyBVc2UgYSBnbG9iYWwgbG9nZ2Vy
LCB3aGljaCBub3JtYWxseSBvbmx5IGxvZ3MgZXJyb3JzLgorbG9nID0gbG9nZ2luZy5nZXRMb2dn
ZXIoJ2dsb2JhbCcpCisKKworY2xhc3MgQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdl
bmVyYXRvcihHZW5lcmF0b3IpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRf
ZmlsZXBhdGgpOgorICAgICAgICBzZWxmLl9tb2RlbCA9IG1vZGVsCisgICAgICAgIHNlbGYuX2lu
cHV0X2ZpbGVwYXRoID0gaW5wdXRfZmlsZXBhdGgKKworICAgIGRlZiBtb2RlbChzZWxmKToKKyAg
ICAgICAgcmV0dXJuIHNlbGYuX21vZGVsCisKKyAgICBkZWYgb3V0cHV0X2ZpbGVuYW1lKHNlbGYp
OgorICAgICAgICByZXR1cm4gIkluc3BlY3RvciVzQmFja2VuZERpc3BhdGNoZXJzLmNwcCIgJSBz
ZWxmLm1vZGVsKCkuZnJhbWV3b3JrLnNldHRpbmcoJ3ByZWZpeCcpCisKKyAgICBkZWYgZ2VuZXJh
dGVfbGljZW5zZShzZWxmKToKKyAgICAgICAgcmV0dXJuIFRlbXBsYXRlKFRlbXBsYXRlcy5Db3B5
cmlnaHRCbG9jaykuc3Vic3RpdHV0ZShOb25lLCBpbnB1dEZpbGVuYW1lPW9zLnBhdGguYmFzZW5h
bWUoc2VsZi5faW5wdXRfZmlsZXBhdGgpKQorCisgICAgZGVmIGdlbmVyYXRlX291dHB1dChzZWxm
KToKKyAgICAgICAgc2Vjb25kYXJ5X2hlYWRlcnMgPSBbCisgICAgICAgICAgICAnPGluc3BlY3Rv
ci9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4nLAorICAgICAgICAgICAgJzxpbnNwZWN0b3Iv
SW5zcGVjdG9yVmFsdWVzLmg+JywKKyAgICAgICAgICAgICc8d3RmL3RleHQvQ1N0cmluZy5oPidd
CisKKyAgICAgICAgc2VjdGlvbnMgPSBbXQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5n
ZW5lcmF0ZV9saWNlbnNlKCkpCisgICAgICAgIGhlYWRlcl9hcmdzID0geworICAgICAgICAgICAg
J3ByaW1hcnlJbmNsdWRlJzogJyJJbnNwZWN0b3Ilc0JhY2tlbmREaXNwYXRjaGVycy5oIicgJSBz
ZWxmLm1vZGVsKCkuZnJhbWV3b3JrLnNldHRpbmcoJ3ByZWZpeCcpLAorICAgICAgICAgICAgJ3Nl
Y29uZGFyeUluY2x1ZGVzJzogIlxuIi5qb2luKFsnI2luY2x1ZGUgJXMnICUgaGVhZGVyIGZvciBo
ZWFkZXIgaW4gc2Vjb25kYXJ5X2hlYWRlcnNdKSwKKyAgICAgICAgICAgICdpbnB1dEZpbGVuYW1l
Jzogc2VsZi5faW5wdXRfZmlsZXBhdGgKKyAgICAgICAgfQorCisgICAgICAgIGRvbWFpbnMgPSBz
ZWxmLmRvbWFpbnNfdG9fZ2VuZXJhdGUoKQorICAgICAgICBkb21haW5zID0gZmlsdGVyKGxhbWJk
YSBkb21haW46IGxlbihkb21haW4uY29tbWFuZHMpID4gMCwgZG9tYWlucykKKworICAgICAgICBz
ZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVzLkNwcEltcGxlbWVudGF0aW9uUHJlbHVk
ZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkKKyAgICAgICAgc2VjdGlvbnMuYXBw
ZW5kKCJcbiIuam9pbihtYXAoc2VsZi5fZ2VuZXJhdGVfaGFuZGxlcl9jbGFzc19kZXN0cnVjdG9y
X2Zvcl9kb21haW4sIGRvbWFpbnMpKSkKKyAgICAgICAgc2VjdGlvbnMuZXh0ZW5kKG1hcChzZWxm
Ll9nZW5lcmF0ZV9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uc19mb3JfZG9tYWluLCBkb21haW5z
KSkKKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKFRlbXBsYXRlcy5DcHBJbXBsZW1l
bnRhdGlvblBvc3RsdWRlKS5zdWJzdGl0dXRlKE5vbmUsICoqaGVhZGVyX2FyZ3MpKQorICAgICAg
ICByZXR1cm4gIlxuXG4iLmpvaW4oc2VjdGlvbnMpCisKKyAgICAjIFByaXZhdGUgbWV0aG9kcy4K
KworICAgIGRlZiBfZ2VuZXJhdGVfaGFuZGxlcl9jbGFzc19kZXN0cnVjdG9yX2Zvcl9kb21haW4o
c2VsZiwgZG9tYWluKToKKyAgICAgICAgZGVzdHJ1Y3Rvcl9hcmdzID0geworICAgICAgICAgICAg
J2RvbWFpbk5hbWUnOiBkb21haW4uZG9tYWluX25hbWUKKyAgICAgICAgfQorICAgICAgICBkZXN0
cnVjdG9yID0gJ0luc3BlY3RvciUoZG9tYWluTmFtZSlzQmFja2VuZERpc3BhdGNoZXJIYW5kbGVy
Ojp+SW5zcGVjdG9yJShkb21haW5OYW1lKXNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKSB7IH0n
ICUgZGVzdHJ1Y3Rvcl9hcmdzCisgICAgICAgIHJldHVybiBHZW5lcmF0b3Iud3JhcF93aXRoX2d1
YXJkX2Zvcl9kb21haW4oZG9tYWluLCBkZXN0cnVjdG9yKQorCisgICAgZGVmIF9nZW5lcmF0ZV9k
aXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uc19mb3JfZG9tYWluKHNlbGYsIGRvbWFpbik6CisgICAg
ICAgIGltcGxlbWVudGF0aW9ucyA9IFtdCisKKyAgICAgICAgY29uc3RydWN0b3JfYXJncyA9IHsK
KyAgICAgICAgICAgICdkb21haW5OYW1lJzogZG9tYWluLmRvbWFpbl9uYW1lLAorICAgICAgICB9
CisgICAgICAgIGltcGxlbWVudGF0aW9ucy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVzLkJhY2tl
bmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25Eb21haW5Db25zdHJ1Y3Rvcikuc3Vic3RpdHV0ZShO
b25lLCAqKmNvbnN0cnVjdG9yX2FyZ3MpKQorCisgICAgICAgIGlmIGxlbihkb21haW4uY29tbWFu
ZHMpIDw9IDU6CisgICAgICAgICAgICBpbXBsZW1lbnRhdGlvbnMuYXBwZW5kKHNlbGYuX2dlbmVy
YXRlX3NtYWxsX2Rpc3BhdGNoZXJfc3dpdGNoX2ltcGxlbWVudGF0aW9uX2Zvcl9kb21haW4oZG9t
YWluKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGltcGxlbWVudGF0aW9ucy5hcHBlbmQo
c2VsZi5fZ2VuZXJhdGVfbGFyZ2VfZGlzcGF0Y2hlcl9zd2l0Y2hfaW1wbGVtZW50YXRpb25fZm9y
X2RvbWFpbihkb21haW4pKQorCisgICAgICAgIGZvciBfY29tbWFuZCBpbiBkb21haW4uY29tbWFu
ZHM6CisgICAgICAgICAgICBpZiBfY29tbWFuZC5pc19hc3luYzoKKyAgICAgICAgICAgICAgICBp
bXBsZW1lbnRhdGlvbnMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2FzeW5jX2Rpc3BhdGNoZXJfY2xh
c3NfZm9yX2RvbWFpbihfY29tbWFuZCwgZG9tYWluKSkKKyAgICAgICAgICAgIGltcGxlbWVudGF0
aW9ucy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbl9mb3Jf
Y29tbWFuZChfY29tbWFuZCwgZG9tYWluKSkKKworICAgICAgICByZXR1cm4gR2VuZXJhdG9yLndy
YXBfd2l0aF9ndWFyZF9mb3JfZG9tYWluKGRvbWFpbiwgIlxuXG4iLmpvaW4oaW1wbGVtZW50YXRp
b25zKSkKKworICAgIGRlZiBfZ2VuZXJhdGVfc21hbGxfZGlzcGF0Y2hlcl9zd2l0Y2hfaW1wbGVt
ZW50YXRpb25fZm9yX2RvbWFpbihzZWxmLCBkb21haW4pOgorICAgICAgICBjYXNlcyA9IFtdCisg
ICAgICAgIGNhc2VzLmFwcGVuZCgnICAgIGlmIChtZXRob2QgPT0gIiVzIiknICUgZG9tYWluLmNv
bW1hbmRzWzBdLmNvbW1hbmRfbmFtZSkKKyAgICAgICAgY2FzZXMuYXBwZW5kKCcgICAgICAgICVz
KGNhbGxJZCwgKm1lc3NhZ2UuZ2V0KCkpOycgJSBkb21haW4uY29tbWFuZHNbMF0uY29tbWFuZF9u
YW1lKQorICAgICAgICBmb3IgX2NvbW1hbmQgaW4gZG9tYWluLmNvbW1hbmRzWzE6XToKKyAgICAg
ICAgICAgIGNhc2VzLmFwcGVuZCgnICAgIGVsc2UgaWYgKG1ldGhvZCA9PSAiJXMiKScgJSBfY29t
bWFuZC5jb21tYW5kX25hbWUpCisgICAgICAgICAgICBjYXNlcy5hcHBlbmQoJyAgICAgICAgJXMo
Y2FsbElkLCAqbWVzc2FnZS5nZXQoKSk7JyAlIF9jb21tYW5kLmNvbW1hbmRfbmFtZSkKKworICAg
ICAgICBzd2l0Y2hfYXJncyA9IHsKKyAgICAgICAgICAgICdkb21haW5OYW1lJzogZG9tYWluLmRv
bWFpbl9uYW1lLAorICAgICAgICAgICAgJ2Rpc3BhdGNoQ2FzZXMnOiAiXG4iLmpvaW4oY2FzZXMp
CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gVGVtcGxhdGUoVGVtcGxhdGVzLkJhY2tlbmRE
aXNwYXRjaGVySW1wbGVtZW50YXRpb25TbWFsbFN3aXRjaCkuc3Vic3RpdHV0ZShOb25lLCAqKnN3
aXRjaF9hcmdzKQorCisgICAgZGVmIF9nZW5lcmF0ZV9sYXJnZV9kaXNwYXRjaGVyX3N3aXRjaF9p
bXBsZW1lbnRhdGlvbl9mb3JfZG9tYWluKHNlbGYsIGRvbWFpbik6CisgICAgICAgIGNhc2VzID0g
W10KKyAgICAgICAgZm9yIF9jb21tYW5kIGluIGRvbWFpbi5jb21tYW5kczoKKyAgICAgICAgICAg
IGFyZ3MgPSB7CisgICAgICAgICAgICAgICAgJ2RvbWFpbk5hbWUnOiBkb21haW4uZG9tYWluX25h
bWUsCisgICAgICAgICAgICAgICAgJ2NvbW1hbmROYW1lJzogX2NvbW1hbmQuY29tbWFuZF9uYW1l
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlcy5hcHBlbmQoJyAgICAgICAgICAgIHsg
IiUoY29tbWFuZE5hbWUpcyIsICZJbnNwZWN0b3IlKGRvbWFpbk5hbWUpc0JhY2tlbmREaXNwYXRj
aGVyOjolKGNvbW1hbmROYW1lKXMgfSwnICUgYXJncykKKworICAgICAgICBzd2l0Y2hfYXJncyA9
IHsKKyAgICAgICAgICAgICdkb21haW5OYW1lJzogZG9tYWluLmRvbWFpbl9uYW1lLAorICAgICAg
ICAgICAgJ2Rpc3BhdGNoQ2FzZXMnOiAiXG4iLmpvaW4oY2FzZXMpCisgICAgICAgIH0KKworICAg
ICAgICByZXR1cm4gVGVtcGxhdGUoVGVtcGxhdGVzLkJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50
YXRpb25MYXJnZVN3aXRjaCkuc3Vic3RpdHV0ZShOb25lLCAqKnN3aXRjaF9hcmdzKQorCisgICAg
ZGVmIF9nZW5lcmF0ZV9hc3luY19kaXNwYXRjaGVyX2NsYXNzX2Zvcl9kb21haW4oc2VsZiwgY29t
bWFuZCwgZG9tYWluKToKKyAgICAgICAgb3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cyA9IFtdCisg
ICAgICAgIGZvcm1hbF9wYXJhbWV0ZXJzID0gW10KKworICAgICAgICBmb3IgX3BhcmFtZXRlciBp
biBjb21tYW5kLnJldHVybl9wYXJhbWV0ZXJzOgorICAgICAgICAgICAgcGFyYW1fYXJncyA9IHsK
KyAgICAgICAgICAgICAgICAnZnJhbWV3b3JrUHJlZml4Jzogc2VsZi5tb2RlbCgpLmZyYW1ld29y
ay5zZXR0aW5nKCdwcmVmaXgnKSwKKyAgICAgICAgICAgICAgICAna2V5ZWRTZXRNZXRob2QnOiBH
ZW5lcmF0b3Iua2V5ZWRfc2V0X21ldGhvZF9mb3JfdHlwZShfcGFyYW1ldGVyLnR5cGUpLAorICAg
ICAgICAgICAgICAgICdwYXJhbWV0ZXJOYW1lJzogX3BhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwK
KyAgICAgICAgICAgICAgICAncGFyYW1ldGVyVHlwZSc6IEdlbmVyYXRvci50eXBlX3N0cmluZ19m
b3Jfc3RhY2tfaW5fcGFyYW1ldGVyKF9wYXJhbWV0ZXIpLAorICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBmb3JtYWxfcGFyYW1ldGVycy5hcHBlbmQoJyVzICVzJyAlIChHZW5lcmF0b3IudHlw
ZV9zdHJpbmdfZm9yX2Zvcm1hbF9hc3luY19wYXJhbWV0ZXIoX3BhcmFtZXRlciksIF9wYXJhbWV0
ZXIucGFyYW1ldGVyX25hbWUpKQorCisgICAgICAgICAgICBpZiBfcGFyYW1ldGVyLmlzX29wdGlv
bmFsOgorICAgICAgICAgICAgICAgIGlmIEdlbmVyYXRvci5zaG91bGRfdXNlX3dyYXBwZXJfZm9y
X3JldHVybl90eXBlKF9wYXJhbWV0ZXIudHlwZSk6CisgICAgICAgICAgICAgICAgICAgIG91dF9w
YXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAgaWYgKCUocGFyYW1ldGVyTmFtZSlzLmlz
QXNzaWduZWQoKSknICUgcGFyYW1fYXJncykKKyAgICAgICAgICAgICAgICAgICAgb3V0X3BhcmFt
ZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICAgICAganNvbk1lc3NhZ2UtPiUoa2V5ZWRTZXRN
ZXRob2QpcyhBU0NJSUxpdGVyYWwoIiUocGFyYW1ldGVyTmFtZSlzIiksICUocGFyYW1ldGVyTmFt
ZSlzLmdldFZhbHVlKCkpOycgJSBwYXJhbV9hcmdzKQorICAgICAgICAgICAgICAgIGVsc2U6Cisg
ICAgICAgICAgICAgICAgICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAg
aWYgKCUocGFyYW1ldGVyTmFtZSlzKScgJSBwYXJhbV9hcmdzKQorICAgICAgICAgICAgICAgICAg
ICBvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgICAgICBqc29uTWVzc2FnZS0+
JShrZXllZFNldE1ldGhvZClzKEFTQ0lJTGl0ZXJhbCgiJShwYXJhbWV0ZXJOYW1lKXMiKSwgJShw
YXJhbWV0ZXJOYW1lKXMpOycgJSBwYXJhbV9hcmdzKQorICAgICAgICAgICAgZWxpZiBfcGFyYW1l
dGVyLnR5cGUuaXNfZW51bSgpOgorICAgICAgICAgICAgICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdu
bWVudHMuYXBwZW5kKCcgICAganNvbk1lc3NhZ2UtPiUoa2V5ZWRTZXRNZXRob2QpcyhBU0NJSUxp
dGVyYWwoIiUocGFyYW1ldGVyTmFtZSlzIiksIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OmdldCUo
ZnJhbWV3b3JrUHJlZml4KXNFbnVtQ29uc3RhbnRWYWx1ZSglKHBhcmFtZXRlck5hbWUpcykpOycg
JSBwYXJhbV9hcmdzKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBvdXRfcGFy
YW1ldGVyX2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgIGpzb25NZXNzYWdlLT4lKGtleWVkU2V0TWV0
aG9kKXMoQVNDSUlMaXRlcmFsKCIlKHBhcmFtZXRlck5hbWUpcyIpLCAlKHBhcmFtZXRlck5hbWUp
cyk7JyAlIHBhcmFtX2FyZ3MpCisKKyAgICAgICAgYXN5bmNfYXJncyA9IHsKKyAgICAgICAgICAg
ICdkb21haW5OYW1lJzogZG9tYWluLmRvbWFpbl9uYW1lLAorICAgICAgICAgICAgJ2NhbGxiYWNr
TmFtZSc6IHVjZmlyc3QoY29tbWFuZC5jb21tYW5kX25hbWUpICsgJ0NhbGxiYWNrJywKKyAgICAg
ICAgICAgICdmb3JtYWxQYXJhbWV0ZXJzJzogIiwgIi5qb2luKGZvcm1hbF9wYXJhbWV0ZXJzKSwK
KyAgICAgICAgICAgICdvdXRQYXJhbWV0ZXJBc3NpZ25tZW50cyc6ICJcbiIuam9pbihvdXRfcGFy
YW1ldGVyX2Fzc2lnbm1lbnRzKQorICAgICAgICB9CisgICAgICAgIHJldHVybiBUZW1wbGF0ZShU
ZW1wbGF0ZXMuQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkFzeW5jQ29tbWFuZCkuc3Vi
c3RpdHV0ZShOb25lLCAqKmFzeW5jX2FyZ3MpCisKKyAgICBkZWYgX2dlbmVyYXRlX2Rpc3BhdGNo
ZXJfaW1wbGVtZW50YXRpb25fZm9yX2NvbW1hbmQoc2VsZiwgY29tbWFuZCwgZG9tYWluKToKKyAg
ICAgICAgbGluZXMgPSBbXQorICAgICAgICBpbl9wYXJhbWV0ZXJfZGVjbGFyYXRpb25zID0gW10K
KyAgICAgICAgb3V0X3BhcmFtZXRlcl9kZWNsYXJhdGlvbnMgPSBbXQorICAgICAgICBvdXRfcGFy
YW1ldGVyX2Fzc2lnbm1lbnRzID0gW10KKyAgICAgICAgbWV0aG9kX3BhcmFtZXRlcnMgPSBbJyZl
cnJvciddCisKKyAgICAgICAgZm9yIF9wYXJhbWV0ZXIgaW4gY29tbWFuZC5jYWxsX3BhcmFtZXRl
cnM6CisgICAgICAgICAgICBvdXRfc3VjY2Vzc19hcmd1bWVudCA9ICdudWxscHRyJworICAgICAg
ICAgICAgaWYgX3BhcmFtZXRlci5pc19vcHRpb25hbDoKKyAgICAgICAgICAgICAgICBvdXRfc3Vj
Y2Vzc19hcmd1bWVudCA9ICcmJXNfdmFsdWVGb3VuZCcgJSBfcGFyYW1ldGVyLnBhcmFtZXRlcl9u
YW1lCisgICAgICAgICAgICAgICAgaW5fcGFyYW1ldGVyX2RlY2xhcmF0aW9ucy5hcHBlbmQoJyAg
ICBib29sICVzX3ZhbHVlRm91bmQgPSBmYWxzZTsnICUgX3BhcmFtZXRlci5wYXJhbWV0ZXJfbmFt
ZSkKKworICAgICAgICAgICAgcGFyYW1fYXJncyA9IHsKKyAgICAgICAgICAgICAgICAncGFyYW1l
dGVyVHlwZSc6IEdlbmVyYXRvci50eXBlX3N0cmluZ19mb3Jfc3RhY2tfaW5fcGFyYW1ldGVyKF9w
YXJhbWV0ZXIpLAorICAgICAgICAgICAgICAgICdwYXJhbWV0ZXJOYW1lJzogX3BhcmFtZXRlci5w
YXJhbWV0ZXJfbmFtZSwKKyAgICAgICAgICAgICAgICAna2V5ZWRHZXRNZXRob2QnOiBHZW5lcmF0
b3Iua2V5ZWRfZ2V0X21ldGhvZF9mb3JfdHlwZShfcGFyYW1ldGVyLnR5cGUpLAorICAgICAgICAg
ICAgICAgICdzdWNjZXNzT3V0UGFyYW0nOiBvdXRfc3VjY2Vzc19hcmd1bWVudAorICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBpbl9wYXJhbWV0ZXJfZGVjbGFyYXRpb25zLmFwcGVuZCgnICAg
ICUocGFyYW1ldGVyVHlwZSlzIGluXyUocGFyYW1ldGVyTmFtZSlzID0gSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXI6OiUoa2V5ZWRHZXRNZXRob2QpcyhwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJ
TGl0ZXJhbCgiJShwYXJhbWV0ZXJOYW1lKXMiKSwgJShzdWNjZXNzT3V0UGFyYW0pcywgcHJvdG9j
b2xFcnJvcnNQdHIpOycgJSBwYXJhbV9hcmdzKQorCisgICAgICAgICAgICBpZiBfcGFyYW1ldGVy
LmlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAgIG1ldGhvZF9wYXJhbWV0ZXJzLmFwcGVuZCgn
JShwYXJhbWV0ZXJOYW1lKXNfdmFsdWVGb3VuZCA/ICZpbl8lKHBhcmFtZXRlck5hbWUpcyA6IG51
bGxwdHInICUgcGFyYW1fYXJncykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAg
bWV0aG9kX3BhcmFtZXRlcnMuYXBwZW5kKCdpbl8nICsgX3BhcmFtZXRlci5wYXJhbWV0ZXJfbmFt
ZSkKKworICAgICAgICBpZiBjb21tYW5kLmlzX2FzeW5jOgorICAgICAgICAgICAgYXN5bmNfYXJn
cyA9IHsKKyAgICAgICAgICAgICAgICAnZG9tYWluTmFtZSc6IGRvbWFpbi5kb21haW5fbmFtZSwK
KyAgICAgICAgICAgICAgICAnY2FsbGJhY2tOYW1lJzogdWNmaXJzdChjb21tYW5kLmNvbW1hbmRf
bmFtZSkgKyAnQ2FsbGJhY2snCisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG91dF9wYXJh
bWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAgICAgIGNhbGxiYWNrLT5kaXNhYmxlKCk7JykK
KyAgICAgICAgICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAgICAgIG1f
YmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgSW5zcGVjdG9y
OjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsnKQorICAg
ICAgICAgICAgb3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICAgICAgcmV0dXJu
OycpCisgICAgICAgICAgICBtZXRob2RfcGFyYW1ldGVycy5hcHBlbmQoJ2NhbGxiYWNrJykKKwor
ICAgICAgICBlbHNlOgorICAgICAgICAgICAgZm9yIF9wYXJhbWV0ZXIgaW4gY29tbWFuZC5yZXR1
cm5fcGFyYW1ldGVyczoKKyAgICAgICAgICAgICAgICBwYXJhbV9hcmdzID0geworICAgICAgICAg
ICAgICAgICAgICAncGFyYW1ldGVyVHlwZSc6IEdlbmVyYXRvci50eXBlX3N0cmluZ19mb3Jfc3Rh
Y2tfb3V0X3BhcmFtZXRlcihfcGFyYW1ldGVyKSwKKyAgICAgICAgICAgICAgICAgICAgJ3BhcmFt
ZXRlck5hbWUnOiBfcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lLAorICAgICAgICAgICAgICAgICAg
ICAna2V5ZWRTZXRNZXRob2QnOiBHZW5lcmF0b3Iua2V5ZWRfc2V0X21ldGhvZF9mb3JfdHlwZShf
cGFyYW1ldGVyLnR5cGUpLAorICAgICAgICAgICAgICAgICAgICAnZnJhbWV3b3JrUHJlZml4Jzog
c2VsZi5tb2RlbCgpLmZyYW1ld29yay5zZXR0aW5nKCdwcmVmaXgnKQorICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgIG91dF9wYXJhbWV0ZXJfZGVjbGFyYXRpb25zLmFwcGVuZCgn
ICAgICUocGFyYW1ldGVyVHlwZSlzIG91dF8lKHBhcmFtZXRlck5hbWUpczsnICUgcGFyYW1fYXJn
cykKKyAgICAgICAgICAgICAgICBpZiBfcGFyYW1ldGVyLmlzX29wdGlvbmFsOgorICAgICAgICAg
ICAgICAgICAgICBpZiBHZW5lcmF0b3Iuc2hvdWxkX3VzZV93cmFwcGVyX2Zvcl9yZXR1cm5fdHlw
ZShfcGFyYW1ldGVyLnR5cGUpOgorICAgICAgICAgICAgICAgICAgICAgICAgb3V0X3BhcmFtZXRl
cl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICAgICAgaWYgKG91dF8lKHBhcmFtZXRlck5hbWUpcy5p
c0Fzc2lnbmVkKCkpJyAlIHBhcmFtX2FyZ3MpCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRf
cGFyYW1ldGVyX2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgICAgICAgICAgcmVzdWx0LT4lKGtleWVk
U2V0TWV0aG9kKXMoQVNDSUlMaXRlcmFsKCIlKHBhcmFtZXRlck5hbWUpcyIpLCBvdXRfJShwYXJh
bWV0ZXJOYW1lKXMuZ2V0VmFsdWUoKSk7JyAlIHBhcmFtX2FyZ3MpCisgICAgICAgICAgICAgICAg
ICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBvdXRfcGFyYW1ldGVyX2Fzc2lnbm1l
bnRzLmFwcGVuZCgnICAgICAgICBpZiAob3V0XyUocGFyYW1ldGVyTmFtZSlzKScgJSBwYXJhbV9h
cmdzKQorICAgICAgICAgICAgICAgICAgICAgICAgb3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cy5h
cHBlbmQoJyAgICAgICAgICAgIHJlc3VsdC0+JShrZXllZFNldE1ldGhvZClzKEFTQ0lJTGl0ZXJh
bCgiJShwYXJhbWV0ZXJOYW1lKXMiKSwgb3V0XyUocGFyYW1ldGVyTmFtZSlzKTsnICUgcGFyYW1f
YXJncykKKyAgICAgICAgICAgICAgICBlbGlmIF9wYXJhbWV0ZXIudHlwZS5pc19lbnVtKCk6Cisg
ICAgICAgICAgICAgICAgICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAg
ICAgIHJlc3VsdC0+JShrZXllZFNldE1ldGhvZClzKEFTQ0lJTGl0ZXJhbCgiJShwYXJhbWV0ZXJO
YW1lKXMiKSwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Z2V0JShmcmFtZXdvcmtQcmVmaXgpc0Vu
dW1Db25zdGFudFZhbHVlKG91dF8lKHBhcmFtZXRlck5hbWUpcykpOycgJSBwYXJhbV9hcmdzKQor
ICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIG91dF9wYXJhbWV0ZXJf
YXNzaWdubWVudHMuYXBwZW5kKCcgICAgICAgIHJlc3VsdC0+JShrZXllZFNldE1ldGhvZClzKEFT
Q0lJTGl0ZXJhbCgiJShwYXJhbWV0ZXJOYW1lKXMiKSwgb3V0XyUocGFyYW1ldGVyTmFtZSlzKTsn
ICUgcGFyYW1fYXJncykKKworICAgICAgICAgICAgICAgIGlmIEdlbmVyYXRvci5zaG91bGRfcGFz
c19ieV9jb3B5X2Zvcl9yZXR1cm5fdHlwZShfcGFyYW1ldGVyLnR5cGUpOgorICAgICAgICAgICAg
ICAgICAgICBtZXRob2RfcGFyYW1ldGVycy5hcHBlbmQoJ291dF8nICsgX3BhcmFtZXRlci5wYXJh
bWV0ZXJfbmFtZSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBt
ZXRob2RfcGFyYW1ldGVycy5hcHBlbmQoJyZvdXRfJyArIF9wYXJhbWV0ZXIucGFyYW1ldGVyX25h
bWUpCisKKyAgICAgICAgY29tbWFuZF9hcmdzID0geworICAgICAgICAgICAgJ2RvbWFpbk5hbWUn
OiBkb21haW4uZG9tYWluX25hbWUsCisgICAgICAgICAgICAnY2FsbGJhY2tOYW1lJzogJyVzQ2Fs
bGJhY2snICUgdWNmaXJzdChjb21tYW5kLmNvbW1hbmRfbmFtZSksCisgICAgICAgICAgICAnY29t
bWFuZE5hbWUnOiBjb21tYW5kLmNvbW1hbmRfbmFtZSwKKyAgICAgICAgICAgICdpblBhcmFtZXRl
ckRlY2xhcmF0aW9ucyc6ICJcbiIuam9pbihpbl9wYXJhbWV0ZXJfZGVjbGFyYXRpb25zKSwKKyAg
ICAgICAgICAgICdpbnZvY2F0aW9uUGFyYW1ldGVycyc6ICIsICIuam9pbihtZXRob2RfcGFyYW1l
dGVycykKKyAgICAgICAgfQorCisgICAgICAgIGlmIGxlbihjb21tYW5kLmNhbGxfcGFyYW1ldGVy
cykgPT0gMDoKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgndm9pZCBJbnNwZWN0b3IlKGRvbWFp
bk5hbWUpc0JhY2tlbmREaXNwYXRjaGVyOjolKGNvbW1hbmROYW1lKXMobG9uZyBjYWxsSWQsIGNv
bnN0IEluc3BlY3Rvck9iamVjdCYpJyAlIGNvbW1hbmRfYXJncykKKyAgICAgICAgZWxzZToKKyAg
ICAgICAgICAgIGxpbmVzLmFwcGVuZCgndm9pZCBJbnNwZWN0b3IlKGRvbWFpbk5hbWUpc0JhY2tl
bmREaXNwYXRjaGVyOjolKGNvbW1hbmROYW1lKXMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rv
ck9iamVjdCYgbWVzc2FnZSknICUgY29tbWFuZF9hcmdzKQorICAgICAgICBsaW5lcy5hcHBlbmQo
J3snKQorCisgICAgICAgIGlmIGxlbihjb21tYW5kLmNhbGxfcGFyYW1ldGVycykgPiAwOgorICAg
ICAgICAgICAgbGluZXMuYXBwZW5kKFRlbXBsYXRlKFRlbXBsYXRlcy5CYWNrZW5kRGlzcGF0Y2hl
ckltcGxlbWVudGF0aW9uUHJlcGFyZUNvbW1hbmRBcmd1bWVudHMpLnN1YnN0aXR1dGUoTm9uZSwg
Kipjb21tYW5kX2FyZ3MpKQorCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIEVycm9yU3RyaW5n
IGVycm9yOycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7JykKKyAgICAgICAgaWYgY29t
bWFuZC5pc19hc3luYzoKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIFJlZlB0cjxJbnNw
ZWN0b3IlKGRvbWFpbk5hbWUpc0JhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6JShjYWxsYmFja05h
bWUpcz4gY2FsbGJhY2sgPSBhZG9wdFJlZihuZXcgSW5zcGVjdG9yJShkb21haW5OYW1lKXNCYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXI6OiUoY2FsbGJhY2tOYW1lKXMobV9iYWNrZW5kRGlzcGF0Y2hl
cixjYWxsSWQpKTsnICUgY29tbWFuZF9hcmdzKQorICAgICAgICBpZiBsZW4oY29tbWFuZC5yZXR1
cm5fcGFyYW1ldGVycykgPiAwOgorICAgICAgICAgICAgbGluZXMuZXh0ZW5kKG91dF9wYXJhbWV0
ZXJfZGVjbGFyYXRpb25zKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBtX2FnZW50LT4lKGNv
bW1hbmROYW1lKXMoJShpbnZvY2F0aW9uUGFyYW1ldGVycylzKTsnICUgY29tbWFuZF9hcmdzKQor
ICAgICAgICBsaW5lcy5hcHBlbmQoJycpCisgICAgICAgIGlmIGNvbW1hbmQuaXNfYXN5bmM6Cisg
ICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBpZiAoZXJyb3IubGVuZ3RoKCkpIHsnKQorICAg
ICAgICAgICAgbGluZXMuZXh0ZW5kKG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMpCisgICAgICAg
ICAgICBsaW5lcy5hcHBlbmQoJyAgICB9JykKKyAgICAgICAgZWxpZiBsZW4oY29tbWFuZC5yZXR1
cm5fcGFyYW1ldGVycykgPiAxOgorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgaWYgKCFl
cnJvci5sZW5ndGgoKSkgeycpCisgICAgICAgICAgICBsaW5lcy5leHRlbmQob3V0X3BhcmFtZXRl
cl9hc3NpZ25tZW50cykKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIH0nKQorICAgICAg
ICBlbGlmIGxlbihjb21tYW5kLnJldHVybl9wYXJhbWV0ZXJzKSA9PSAxOgorICAgICAgICAgICAg
bGluZXMuYXBwZW5kKCcgICAgaWYgKCFlcnJvci5sZW5ndGgoKSknKQorICAgICAgICAgICAgbGlu
ZXMuZXh0ZW5kKG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMpCisgICAgICAgICAgICBsaW5lcy5h
cHBlbmQoJycpCisKKyAgICAgICAgaWYgbm90IGNvbW1hbmQuaXNfYXN5bmM6CisgICAgICAgICAg
ICBsaW5lcy5hcHBlbmQoJyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2Fs
bElkLCByZXN1bHQucmVsZWFzZSgpLCBlcnJvcik7JykKKyAgICAgICAgbGluZXMuYXBwZW5kKCd9
JykKKyAgICAgICAgcmV0dXJuICJcbiIuam9pbihsaW5lcykKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2Zyb250ZW5k
X2Rpc3BhdGNoZXJfaGVhZGVyLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfZnJvbnRlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uZTQ3OTk2YmI3MGUwYTY2YjEzMTQ5MWI0NmI0Y2ZiZjFhNGZkNTQ4YgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2Rl
Z2VuL2dlbmVyYXRlX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5CkBAIC0wLDAgKzEsMTI3
IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMgQ29weXJpZ2h0IChjKSAyMDE0IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChjKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
IyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisKKworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBvcy5wYXRoCitp
bXBvcnQgcmUKK2ltcG9ydCBzdHJpbmcKKworZnJvbSBtb2RlbHMgaW1wb3J0IEVudW1UeXBlCitm
cm9tIGdlbmVyYXRvciBpbXBvcnQgR2VuZXJhdG9yLCB1Y2ZpcnN0Citmcm9tIHN0cmluZyBpbXBv
cnQgVGVtcGxhdGUKK2Zyb20gZ2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgR2VuZXJhdG9yVGVt
cGxhdGVzIGFzIFRlbXBsYXRlcworCisjIFVzZSBhIGdsb2JhbCBsb2dnZXIsIHdoaWNoIG5vcm1h
bGx5IG9ubHkgbG9ncyBlcnJvcnMuCisjIEl0IGNhbiBiZSBjb25maWd1cmVkIHRvIGxvZyBkZWJ1
ZyBtZXNzYWdlcyBmcm9tIHRoZSBDTEkuCitsb2cgPSBsb2dnaW5nLmdldExvZ2dlcignZ2xvYmFs
JykKKworCitjbGFzcyBGcm9udGVuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IoR2VuZXJhdG9y
KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbW9kZWwsIGlucHV0X2ZpbGVwYXRoKToKKyAgICAg
ICAgc2VsZi5fbW9kZWwgPSBtb2RlbAorICAgICAgICBzZWxmLl9pbnB1dF9maWxlcGF0aCA9IGlu
cHV0X2ZpbGVwYXRoCisKKyAgICBkZWYgbW9kZWwoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxm
Ll9tb2RlbAorCisgICAgZGVmIG91dHB1dF9maWxlbmFtZShzZWxmKToKKyAgICAgICAgcmV0dXJu
ICJJbnNwZWN0b3Ilc0Zyb250ZW5kRGlzcGF0Y2hlcnMuaCIgJSBzZWxmLm1vZGVsKCkuZnJhbWV3
b3JrLnNldHRpbmcoJ3ByZWZpeCcpCisKKyAgICBkZWYgZ2VuZXJhdGVfbGljZW5zZShzZWxmKToK
KyAgICAgICAgcmV0dXJuIFRlbXBsYXRlKFRlbXBsYXRlcy5Db3B5cmlnaHRCbG9jaykuc3Vic3Rp
dHV0ZShOb25lLCBpbnB1dEZpbGVuYW1lPW9zLnBhdGguYmFzZW5hbWUoc2VsZi5faW5wdXRfZmls
ZXBhdGgpKQorCisgICAgZGVmIGdlbmVyYXRlX291dHB1dChzZWxmKToKKyAgICAgICAgaGVhZGVy
cyA9IFsKKyAgICAgICAgICAgICciSW5zcGVjdG9yJXNUeXBlQnVpbGRlcnMuaCInICUgc2VsZi5t
b2RlbCgpLmZyYW1ld29yay5zZXR0aW5nKCdwcmVmaXgnKSwKKyAgICAgICAgICAgICc8aW5zcGVj
dG9yL0luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oPicsCisgICAgICAgICAgICAnPGluc3BlY3Rv
ci9JbnNwZWN0b3JWYWx1ZXMuaD4nLAorICAgICAgICAgICAgJzx3dGYvUGFzc1JlZlB0ci5oPics
CisgICAgICAgICAgICAnPHd0Zi90ZXh0L1dURlN0cmluZy5oPiddCisKKyAgICAgICAgc2VjdGlv
bnMgPSBbXQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5nZW5lcmF0ZV9saWNlbnNlKCkp
CisgICAgICAgIGhlYWRlcl9hcmdzID0geworICAgICAgICAgICAgJ2hlYWRlckd1YXJkU3RyaW5n
JzogcmUuc3ViKCdbLS4vXScsICdfJywgc2VsZi5vdXRwdXRfZmlsZW5hbWUoKSksCisgICAgICAg
ICAgICAnaW5jbHVkZXMnOiAnXG4nLmpvaW4oWycjaW5jbHVkZSAnICsgaGVhZGVyIGZvciBoZWFk
ZXIgaW4gaGVhZGVyc10pLAorICAgICAgICAgICAgJ3R5cGVkZWZzJzogJycsCisgICAgICAgICAg
ICAnaW5wdXRGaWxlbmFtZSc6IHNlbGYuX2lucHV0X2ZpbGVwYXRoCisgICAgICAgIH0KKworICAg
ICAgICBkb21haW5zID0gc2VsZi5kb21haW5zX3RvX2dlbmVyYXRlKCkKKyAgICAgICAgZG9tYWlu
cyA9IGZpbHRlcihsYW1iZGEgZG9tYWluOiBsZW4oZG9tYWluLmV2ZW50cykgPiAwLCBkb21haW5z
KQorCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMuQ3BwSGVhZGVy
UHJlbHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkKKyAgICAgICAgc2VjdGlv
bnMuZXh0ZW5kKG1hcChzZWxmLl9nZW5lcmF0ZV9kaXNwYXRjaGVyX2RlY2xhcmF0aW9uc19mb3Jf
ZG9tYWluLCBkb21haW5zKSkKKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKFRlbXBs
YXRlcy5DcHBIZWFkZXJQb3N0bHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkK
KyAgICAgICAgcmV0dXJuICJcblxuIi5qb2luKHNlY3Rpb25zKQorCisgICAgIyBQcml2YXRlIG1l
dGhvZHMuCisKKyAgICBkZWYgX2dlbmVyYXRlX2Fub255bW91c19lbnVtX2Zvcl9wYXJhbWV0ZXIo
c2VsZiwgcGFyYW1ldGVyLCBldmVudCk6CisgICAgICAgIGVudW1fYXJncyA9IHsKKyAgICAgICAg
ICAgICdwYXJhbWV0ZXJOYW1lJzogcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lLAorICAgICAgICAg
ICAgJ2V2ZW50TmFtZSc6IGV2ZW50LmV2ZW50X25hbWUKKyAgICAgICAgfQorCisgICAgICAgIGxp
bmVzID0gW10KKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIC8vIE5hbWVkIGFmdGVyIHBh
cmFtZXRlciBcJyUocGFyYW1ldGVyTmFtZSlzXCcgd2hpbGUgZ2VuZXJhdGluZyBjb21tYW5kL2V2
ZW50ICUoZXZlbnROYW1lKXMuJyAlIGVudW1fYXJncykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcg
ICAgICAgIGVudW0gY2xhc3MgJXMgeycgJSB1Y2ZpcnN0KHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFt
ZSkpCisgICAgICAgIGZvciBlbnVtX3ZhbHVlIGluIHBhcmFtZXRlci50eXBlLmVudW1fdmFsdWVz
KCk6CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgICAgICVzID0gJWQsJyAlIChH
ZW5lcmF0b3Iuc3R5bGl6ZWRfbmFtZV9mb3JfZW51bV92YWx1ZShlbnVtX3ZhbHVlKSwgc2VsZi5l
bmNvZGluZ19mb3JfZW51bV92YWx1ZShlbnVtX3ZhbHVlKSkpCisgICAgICAgIGxpbmVzLmFwcGVu
ZCgnICAgICAgICB9OyAvLyBlbnVtIGNsYXNzICVzJyAlIHVjZmlyc3QocGFyYW1ldGVyLnBhcmFt
ZXRlcl9uYW1lKSkKKyAgICAgICAgcmV0dXJuICJcbiIuam9pbihsaW5lcykKKworICAgIGRlZiBf
Z2VuZXJhdGVfZGlzcGF0Y2hlcl9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbihzZWxmLCBkb21haW4p
OgorICAgICAgICBjbGFzc0NvbXBvbmVudHMgPSBbJ2NsYXNzJ10KKyAgICAgICAgZXhwb3J0TWFj
cm8gPSBzZWxmLm1vZGVsKCkuZnJhbWV3b3JrLnNldHRpbmcoJ2V4cG9ydF9tYWNybycsIE5vbmUp
CisgICAgICAgIGlmIGV4cG9ydE1hY3JvIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgY2xhc3ND
b21wb25lbnRzLmFwcGVuZChleHBvcnRNYWNybykKKworICAgICAgICB1c2VkX2VudW1fbmFtZXMg
PSBzZXQoW10pCisKKyAgICAgICAgZXZlbnRfZGVjbGFyYXRpb25zID0gW10KKyAgICAgICAgZm9y
IGV2ZW50IGluIGRvbWFpbi5ldmVudHM6CisgICAgICAgICAgICBldmVudF9kZWNsYXJhdGlvbnMu
YXBwZW5kKHNlbGYuX2dlbmVyYXRlX2Rpc3BhdGNoZXJfZGVjbGFyYXRpb25fZm9yX2V2ZW50KGV2
ZW50LCBkb21haW4sIHVzZWRfZW51bV9uYW1lcykpCisKKyAgICAgICAgaGFuZGxlcl9hcmdzID0g
eworICAgICAgICAgICAgJ2NsYXNzQW5kRXhwb3J0TWFjcm8nOiAiICIuam9pbihjbGFzc0NvbXBv
bmVudHMpLAorICAgICAgICAgICAgJ2RvbWFpbk5hbWUnOiBkb21haW4uZG9tYWluX25hbWUsCisg
ICAgICAgICAgICAnZXZlbnREZWNsYXJhdGlvbnMnOiAiXG4iLmpvaW4oZXZlbnRfZGVjbGFyYXRp
b25zKQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIEdlbmVyYXRvci53cmFwX3dpdGhfZ3Vh
cmRfZm9yX2RvbWFpbihkb21haW4sIFRlbXBsYXRlKFRlbXBsYXRlcy5Gcm9udGVuZERpc3BhdGNo
ZXJEb21haW5EaXNwYXRjaGVyRGVjbGFyYXRpb24pLnN1YnN0aXR1dGUoTm9uZSwgKipoYW5kbGVy
X2FyZ3MpKQorCisgICAgZGVmIF9nZW5lcmF0ZV9kaXNwYXRjaGVyX2RlY2xhcmF0aW9uX2Zvcl9l
dmVudChzZWxmLCBldmVudCwgZG9tYWluLCB1c2VkX2VudW1fbmFtZXMpOgorICAgICAgICBmb3Jt
YWxfcGFyYW1ldGVycyA9IFtdCisgICAgICAgIGxpbmVzID0gW10KKyAgICAgICAgZm9yIF9wYXJh
bWV0ZXIgaW4gZXZlbnQuZXZlbnRfcGFyYW1ldGVyczoKKyAgICAgICAgICAgIGZvcm1hbF9wYXJh
bWV0ZXJzLmFwcGVuZCgnJXMgJXMnICUgKEdlbmVyYXRvci50eXBlX3N0cmluZ19mb3JfY2hlY2tl
ZF9mb3JtYWxfaW5fcGFyYW1ldGVyKF9wYXJhbWV0ZXIpLCBfcGFyYW1ldGVyLnBhcmFtZXRlcl9u
YW1lKSkKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoX3BhcmFtZXRlci50eXBlLCBFbnVtVHlw
ZSkgYW5kIF9wYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUgbm90IGluIHVzZWRfZW51bV9uYW1lczoK
KyAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYW5vbnltb3VzX2Vu
dW1fZm9yX3BhcmFtZXRlcihfcGFyYW1ldGVyLCBldmVudCkpCisgICAgICAgICAgICAgICAgdXNl
ZF9lbnVtX25hbWVzLmFkZChfcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKQorCisgICAgICAgIGxp
bmVzLmFwcGVuZCgiICAgIHZvaWQgJXMoJXMpOyIgJSAoZXZlbnQuZXZlbnRfbmFtZSwgIiwgIi5q
b2luKGZvcm1hbF9wYXJhbWV0ZXJzKSkpCisgICAgICAgIHJldHVybiAiXG4iLmpvaW4obGluZXMp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29k
ZWdlbi9nZW5lcmF0ZV9mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5IGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfZnJv
bnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wN2QzNDI1NWMx
ZGYxMGY3YjgwNTJmNDUwOGVjM2YxMmQzYWMxMTg3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfZnJvbnRl
bmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQpAQCAtMCwwICsxLDEzMSBAQAorIyEvdXNy
L2Jpbi9lbnYgcHl0aG9uCisjIENvcHlyaWdodCAoYykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoYykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMg
YXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyMgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisjIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorCisKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgb3MucGF0aAoraW1wb3J0IHJlCitp
bXBvcnQgc3RyaW5nCisKK2Zyb20gZ2VuZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IsIHVjZmlyc3QK
K2Zyb20gc3RyaW5nIGltcG9ydCBUZW1wbGF0ZQorZnJvbSBnZW5lcmF0b3JfdGVtcGxhdGVzIGlt
cG9ydCBHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgVGVtcGxhdGVzCitmcm9tIG1vZGVscyBpbXBvcnQg
T2JqZWN0VHlwZSwgQXJyYXlUeXBlCisKKyMgVXNlIGEgZ2xvYmFsIGxvZ2dlciwgd2hpY2ggbm9y
bWFsbHkgb25seSBsb2dzIGVycm9ycy4KK2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwn
KQorCisKK2NsYXNzIEZyb250ZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKEdl
bmVyYXRvcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0aCk6
CisgICAgICAgIHNlbGYuX21vZGVsID0gbW9kZWwKKyAgICAgICAgc2VsZi5faW5wdXRfZmlsZXBh
dGggPSBpbnB1dF9maWxlcGF0aAorCisgICAgZGVmIG1vZGVsKHNlbGYpOgorICAgICAgICByZXR1
cm4gc2VsZi5fbW9kZWwKKworICAgIGRlZiBvdXRwdXRfZmlsZW5hbWUoc2VsZik6CisgICAgICAg
IHJldHVybiAiSW5zcGVjdG9yJXNGcm9udGVuZERpc3BhdGNoZXJzLmNwcCIgJSBzZWxmLm1vZGVs
KCkuZnJhbWV3b3JrLnNldHRpbmcoJ3ByZWZpeCcpCisKKyAgICBkZWYgZ2VuZXJhdGVfbGljZW5z
ZShzZWxmKToKKyAgICAgICAgcmV0dXJuIFRlbXBsYXRlKFRlbXBsYXRlcy5Db3B5cmlnaHRCbG9j
aykuc3Vic3RpdHV0ZShOb25lLCBpbnB1dEZpbGVuYW1lPW9zLnBhdGguYmFzZW5hbWUoc2VsZi5f
aW5wdXRfZmlsZXBhdGgpKQorCisgICAgZGVmIGdlbmVyYXRlX291dHB1dChzZWxmKToKKyAgICAg
ICAgc2Vjb25kYXJ5X2hlYWRlcnMgPSBbJzx3dGYvdGV4dC9DU3RyaW5nLmg+J10KKworICAgICAg
ICBzZWN0aW9ucyA9IFtdCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLmdlbmVyYXRlX2xp
Y2Vuc2UoKSkKKyAgICAgICAgaGVhZGVyX2FyZ3MgPSB7CisgICAgICAgICAgICAncHJpbWFyeUlu
Y2x1ZGUnOiAnIkluc3BlY3RvciVzRnJvbnRlbmREaXNwYXRjaGVycy5oIicgJSBzZWxmLm1vZGVs
KCkuZnJhbWV3b3JrLnNldHRpbmcoJ3ByZWZpeCcpLAorICAgICAgICAgICAgJ3NlY29uZGFyeUlu
Y2x1ZGVzJzogIlxuIi5qb2luKFsnI2luY2x1ZGUgJXMnICUgaGVhZGVyIGZvciBoZWFkZXIgaW4g
c2Vjb25kYXJ5X2hlYWRlcnNdKSwKKyAgICAgICAgICAgICdpbnB1dEZpbGVuYW1lJzogc2VsZi5f
aW5wdXRfZmlsZXBhdGgKKyAgICAgICAgfQorCisgICAgICAgIGRvbWFpbnMgPSBzZWxmLmRvbWFp
bnNfdG9fZ2VuZXJhdGUoKQorICAgICAgICBkb21haW5zID0gZmlsdGVyKGxhbWJkYSBkb21haW46
IGxlbihkb21haW4uZXZlbnRzKSA+IDAsIGRvbWFpbnMpCisKKyAgICAgICAgc2VjdGlvbnMuYXBw
ZW5kKFRlbXBsYXRlKFRlbXBsYXRlcy5DcHBJbXBsZW1lbnRhdGlvblByZWx1ZGUpLnN1YnN0aXR1
dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCisgICAgICAgIHNlY3Rpb25zLmV4dGVuZChtYXAoc2Vs
Zi5fZ2VuZXJhdGVfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbnNfZm9yX2RvbWFpbiwgZG9tYWlu
cykpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMuQ3BwSW1wbGVt
ZW50YXRpb25Qb3N0bHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkKKyAgICAg
ICAgcmV0dXJuICJcblxuIi5qb2luKHNlY3Rpb25zKQorCisgICAgIyBQcml2YXRlIG1ldGhvZHMu
CisKKyAgICBkZWYgX2dlbmVyYXRlX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb25zX2Zvcl9kb21h
aW4oc2VsZiwgZG9tYWluKToKKyAgICAgICAgaW1wbGVtZW50YXRpb25zID0gW10KKyAgICAgICAg
Zm9yIF9ldmVudCBpbiBkb21haW4uZXZlbnRzOgorICAgICAgICAgICAgaW1wbGVtZW50YXRpb25z
LmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uX2Zvcl9ldmVu
dChfZXZlbnQsIGRvbWFpbikpCisKKyAgICAgICAgcmV0dXJuIEdlbmVyYXRvci53cmFwX3dpdGhf
Z3VhcmRfZm9yX2RvbWFpbihkb21haW4sICJcblxuIi5qb2luKGltcGxlbWVudGF0aW9ucykpCisK
KyAgICBkZWYgX2dlbmVyYXRlX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb25fZm9yX2V2ZW50KHNl
bGYsIGV2ZW50LCBkb21haW4pOgorICAgICAgICBsaW5lcyA9IFtdCisgICAgICAgIHBhcmFtZXRl
cl9hc3NpZ25tZW50cyA9IFtdCisgICAgICAgIGZvcm1hbF9wYXJhbWV0ZXJzID0gW10KKworICAg
ICAgICBmb3IgX3BhcmFtZXRlciBpbiBldmVudC5ldmVudF9wYXJhbWV0ZXJzOgorCisgICAgICAg
ICAgICBwYXJhbWV0ZXJfdmFsdWUgPSBfcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lCisgICAgICAg
ICAgICBpZiBfcGFyYW1ldGVyLmlzX29wdGlvbmFsIGFuZCBub3QgR2VuZXJhdG9yLnNob3VsZF9w
YXNzX2J5X2NvcHlfZm9yX3JldHVybl90eXBlKF9wYXJhbWV0ZXIudHlwZSk6CisgICAgICAgICAg
ICAgICAgcGFyYW1ldGVyX3ZhbHVlID0gJyonICsgcGFyYW1ldGVyX3ZhbHVlCisgICAgICAgICAg
ICBpZiBfcGFyYW1ldGVyLnR5cGUuaXNfZW51bSgpOgorICAgICAgICAgICAgICAgIGZyYW1ld29y
a19wcmVmaXggPSBzZWxmLm1vZGVsKCkuZnJhbWV3b3JrLnNldHRpbmcoJ3ByZWZpeCcpCisgICAg
ICAgICAgICAgICAgcGFyYW1ldGVyX3ZhbHVlID0gJ0luc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6Omdl
dCVzRW51bUNvbnN0YW50VmFsdWUoJXMpJyAlIChmcmFtZXdvcmtfcHJlZml4LCBwYXJhbWV0ZXJf
dmFsdWUpCisKKyAgICAgICAgICAgIHBhcmFtZXRlcl9hcmdzID0geworICAgICAgICAgICAgICAg
ICdwYXJhbWV0ZXJUeXBlJzogR2VuZXJhdG9yLnR5cGVfc3RyaW5nX2Zvcl9zdGFja19vdXRfcGFy
YW1ldGVyKF9wYXJhbWV0ZXIpLAorICAgICAgICAgICAgICAgICdwYXJhbWV0ZXJOYW1lJzogX3Bh
cmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwKKyAgICAgICAgICAgICAgICAncGFyYW1ldGVyVmFsdWUn
OiBwYXJhbWV0ZXJfdmFsdWUsCisgICAgICAgICAgICAgICAgJ2tleWVkU2V0TWV0aG9kJzogR2Vu
ZXJhdG9yLmtleWVkX3NldF9tZXRob2RfZm9yX3R5cGUoX3BhcmFtZXRlci50eXBlKSwKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgaWYgX3BhcmFtZXRlci5pc19vcHRpb25hbDoKKyAgICAg
ICAgICAgICAgICBwYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAgaWYgKCUocGFyYW1l
dGVyTmFtZSlzKScgJSBwYXJhbWV0ZXJfYXJncykKKyAgICAgICAgICAgICAgICBwYXJhbWV0ZXJf
YXNzaWdubWVudHMuYXBwZW5kKCcgICAgICAgIHBhcmFtc09iamVjdC0+JShrZXllZFNldE1ldGhv
ZClzKEFTQ0lJTGl0ZXJhbCgiJShwYXJhbWV0ZXJOYW1lKXMiKSwgJShwYXJhbWV0ZXJWYWx1ZSlz
KTsnICUgcGFyYW1ldGVyX2FyZ3MpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAg
IHBhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICBwYXJhbXNPYmplY3QtPiUoa2V5ZWRT
ZXRNZXRob2QpcyhBU0NJSUxpdGVyYWwoIiUocGFyYW1ldGVyTmFtZSlzIiksICUocGFyYW1ldGVy
VmFsdWUpcyk7JyAlIHBhcmFtZXRlcl9hcmdzKQorCisgICAgICAgICAgICBmb3JtYWxfcGFyYW1l
dGVycy5hcHBlbmQoJyVzICVzJyAlIChHZW5lcmF0b3IudHlwZV9zdHJpbmdfZm9yX2NoZWNrZWRf
Zm9ybWFsX2luX3BhcmFtZXRlcihfcGFyYW1ldGVyKSwgX3BhcmFtZXRlci5wYXJhbWV0ZXJfbmFt
ZSkpCisKKyAgICAgICAgZXZlbnRfYXJncyA9IHsKKyAgICAgICAgICAgICdkb21haW5OYW1lJzog
ZG9tYWluLmRvbWFpbl9uYW1lLAorICAgICAgICAgICAgJ2V2ZW50TmFtZSc6IGV2ZW50LmV2ZW50
X25hbWUsCisgICAgICAgICAgICAnZm9ybWFsUGFyYW1ldGVycyc6ICIsICIuam9pbihmb3JtYWxf
cGFyYW1ldGVycykKKyAgICAgICAgfQorCisgICAgICAgIGxpbmVzLmFwcGVuZCgndm9pZCBJbnNw
ZWN0b3IlKGRvbWFpbk5hbWUpc0Zyb250ZW5kRGlzcGF0Y2hlcjo6JShldmVudE5hbWUpcyglKGZv
cm1hbFBhcmFtZXRlcnMpcyknICUgZXZlbnRfYXJncykKKyAgICAgICAgbGluZXMuYXBwZW5kKCd7
JykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4ganNv
bk1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOycpCisgICAgICAgIGxpbmVzLmFw
cGVuZCgnICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJtZXRob2QiKSwg
QVNDSUlMaXRlcmFsKCIlKGRvbWFpbk5hbWUpcy4lKGV2ZW50TmFtZSlzIikpOycgJSBldmVudF9h
cmdzKQorCisgICAgICAgIGlmIGxlbihwYXJhbWV0ZXJfYXNzaWdubWVudHMpID4gMDoKKyAgICAg
ICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09i
amVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7JykKKyAgICAgICAgICAgIGxpbmVzLmV4
dGVuZChwYXJhbWV0ZXJfYXNzaWdubWVudHMpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAg
ICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicGFyYW1zIiksIHBhcmFtc09i
amVjdCk7JykKKworICAgICAgICBsaW5lcy5hcHBlbmQoJycpCisgICAgICAgIGxpbmVzLmFwcGVu
ZCgnICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQo
anNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsnKQorICAgICAgICBsaW5lcy5hcHBlbmQoJ30n
KQorICAgICAgICByZXR1cm4gIlxuIi5qb2luKGxpbmVzKQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfdHlwZV9idWls
ZGVyX2hlYWRlci5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9j
b2RlZ2VuL2dlbmVyYXRlX3R5cGVfYnVpbGRlcl9oZWFkZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTQ5NDEx
OGU3YzVjYTI2ZGJhOTIyMDNiYjIyNzEzYTY4M2RjZGVkOAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX3R5
cGVfYnVpbGRlcl9oZWFkZXIucHkKQEAgLTAsMCArMSwzNTggQEAKKyMhL3Vzci9iaW4vZW52IHB5
dGhvbgorIyBDb3B5cmlnaHQgKGMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorIyBDb3B5cmlnaHQgKGMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6Cisj
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisjIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKwor
CitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG9zLnBhdGgKK2ltcG9ydCByZQoraW1wb3J0IHN0cmlu
ZworCitmcm9tIGdlbmVyYXRvciBpbXBvcnQgR2VuZXJhdG9yLCB1Y2ZpcnN0Citmcm9tIG1vZGVs
cyBpbXBvcnQgRW51bVR5cGUsIE9iamVjdFR5cGUsIFByaW1pdGl2ZVR5cGUsIEFsaWFzZWRUeXBl
LCBBcnJheVR5cGUsIEZyYW1ld29ya3MKK2Zyb20gc3RyaW5nIGltcG9ydCBUZW1wbGF0ZQorZnJv
bSBnZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgVGVtcGxh
dGVzCisKKyMgVXNlIGEgZ2xvYmFsIGxvZ2dlciwgd2hpY2ggbm9ybWFsbHkgb25seSBsb2dzIGVy
cm9ycy4KKyMgSXQgY2FuIGJlIGNvbmZpZ3VyZWQgdG8gbG9nIGRlYnVnIG1lc3NhZ2VzIGZyb20g
dGhlIENMSS4KK2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQorCisKK2NsYXNzIFR5
cGVCdWlsZGVySGVhZGVyR2VuZXJhdG9yKEdlbmVyYXRvcik6CisgICAgZGVmIF9faW5pdF9fKHNl
bGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0aCk6CisgICAgICAgIHNlbGYuX21vZGVsID0gbW9kZWwK
KyAgICAgICAgc2VsZi5faW5wdXRfZmlsZXBhdGggPSBpbnB1dF9maWxlcGF0aAorCisgICAgZGVm
IG1vZGVsKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fbW9kZWwKKworICAgIGRlZiBvdXRw
dXRfZmlsZW5hbWUoc2VsZik6CisgICAgICAgIHJldHVybiAiSW5zcGVjdG9yJXNUeXBlQnVpbGRl
cnMuaCIgJSBzZWxmLm1vZGVsKCkuZnJhbWV3b3JrLnNldHRpbmcoJ3ByZWZpeCcpCisKKyAgICBk
ZWYgZ2VuZXJhdGVfbGljZW5zZShzZWxmKToKKyAgICAgICAgcmV0dXJuIFRlbXBsYXRlKFRlbXBs
YXRlcy5Db3B5cmlnaHRCbG9jaykuc3Vic3RpdHV0ZShOb25lLCBpbnB1dEZpbGVuYW1lPW9zLnBh
dGguYmFzZW5hbWUoc2VsZi5faW5wdXRfZmlsZXBhdGgpKQorCisgICAgZGVmIGdlbmVyYXRlX291
dHB1dChzZWxmKToKKyAgICAgICAgZG9tYWlucyA9IHNlbGYuZG9tYWluc190b19nZW5lcmF0ZSgp
CisgICAgICAgIHNlbGYuY2FsY3VsYXRlX3R5cGVzX3JlcXVpcmluZ19zaGFwZV9hc3NlcnRpb25z
KGRvbWFpbnMpCisKKyAgICAgICAgaGVhZGVycyA9IHNldChbCisgICAgICAgICAgICAnPGluc3Bl
Y3Rvci9JbnNwZWN0b3JUeXBlQnVpbGRlci5oPicsCisgICAgICAgICAgICAnPHd0Zi9Bc3NlcnRp
b25zLmg+JywKKyAgICAgICAgICAgICc8d3RmL1Bhc3NSZWZQdHIuaD4nCisgICAgICAgIF0pCisK
KyAgICAgICAgaWYgc2VsZi5tb2RlbCgpLmZyYW1ld29yayBpcyBub3QgRnJhbWV3b3Jrcy5KYXZh
U2NyaXB0Q29yZToKKyAgICAgICAgICAgIGhlYWRlcnMuYWRkKCc8aW5zcGVjdG9yL0luc3BlY3Rv
ckpTVHlwZUJ1aWxkZXJzLmg+JykKKworICAgICAgICBleHBvcnRfbWFjcm8gPSBzZWxmLm1vZGVs
KCkuZnJhbWV3b3JrLnNldHRpbmcoJ2V4cG9ydF9tYWNybycsIE5vbmUpCisgICAgICAgIGZyYW1l
d29ya19wcmVmaXggPSBzZWxmLm1vZGVsKCkuZnJhbWV3b3JrLnNldHRpbmcoJ3ByZWZpeCcpCisK
KyAgICAgICAgc2VjdGlvbnMgPSBbXQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5nZW5l
cmF0ZV9saWNlbnNlKCkpCisgICAgICAgIGhlYWRlcl9hcmdzID0geworICAgICAgICAgICAgJ2hl
YWRlckd1YXJkU3RyaW5nJzogcmUuc3ViKCdbLS4vXScsICdfJywgc2VsZi5vdXRwdXRfZmlsZW5h
bWUoKSksCisgICAgICAgICAgICAnaW5jbHVkZXMnOiAnXG4nLmpvaW4oWycjaW5jbHVkZSAnICsg
aGVhZGVyIGZvciBoZWFkZXIgaW4gc29ydGVkKGhlYWRlcnMpXSksCisgICAgICAgICAgICAndHlw
ZWRlZnMnOiAnJywKKyAgICAgICAgICAgICdpbnB1dEZpbGVuYW1lJzogc2VsZi5faW5wdXRfZmls
ZXBhdGgKKyAgICAgICAgfQorCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShUZW1w
bGF0ZXMuQ3BwSGVhZGVyUHJlbHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkK
KyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKCduYW1lc3BhY2UgVHlwZUJ1aWxkZXIgeycpCisgICAg
ICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9mb3J3YXJkX2RlY2xhcmF0aW9ucyhk
b21haW5zKSkKKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX3R5cGVkZWZz
KGRvbWFpbnMpKQorICAgICAgICByZXR1cm5fdHlwZSA9IFsnU3RyaW5nJ10KKyAgICAgICAgaWYg
ZXhwb3J0X21hY3JvIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmV0dXJuX3R5cGVbOjBdID0g
W2V4cG9ydF9tYWNyb10KKworICAgICAgICBzZWN0aW9ucy5hcHBlbmQoJyVzIGdldCVzRW51bUNv
bnN0YW50VmFsdWUoaW50IGNvZGUpOycgJSAoJyAnLmpvaW4ocmV0dXJuX3R5cGUpLCBmcmFtZXdv
cmtfcHJlZml4KSkKKworICAgICAgICBzZWN0aW9ucy5hcHBlbmQoJ1xuJy5qb2luKFsKKyAgICAg
ICAgICAgICd0ZW1wbGF0ZTx0eXBlbmFtZSBUPiAlcyBnZXQlc0VudW1Db25zdGFudFZhbHVlKFQg
ZW51bVZhbHVlKScgJSAoJyAnLmpvaW4ocmV0dXJuX3R5cGUpLCBmcmFtZXdvcmtfcHJlZml4KSwK
KyAgICAgICAgICAgICd7JywKKyAgICAgICAgICAgICcgICAgcmV0dXJuIGdldCVzRW51bUNvbnN0
YW50VmFsdWUoc3RhdGljX2Nhc3Q8aW50PihlbnVtVmFsdWUpKTsnICUgZnJhbWV3b3JrX3ByZWZp
eCwKKyAgICAgICAgICAgICd9J10pKQorCisgICAgICAgIGJ1aWxkZXJfc2VjdGlvbnMgPSBtYXAo
c2VsZi5fZ2VuZXJhdGVfYnVpbGRlcnNfZm9yX2RvbWFpbiwgZG9tYWlucykKKyAgICAgICAgc2Vj
dGlvbnMuZXh0ZW5kKGZpbHRlcihsYW1iZGEgc2VjdGlvbjogbGVuKHNlY3Rpb24pID4gMCwgYnVp
bGRlcl9zZWN0aW9ucykpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9m
b3J3YXJkX2RlY2xhcmF0aW9uc19mb3JfYmluZGluZ190cmFpdHMoKSkKKyAgICAgICAgc2VjdGlv
bnMuYXBwZW5kKCd9IC8vIG5hbWVzcGFjZSBUeXBlQnVpbGRlcicpCisgICAgICAgIHNlY3Rpb25z
LmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMuQ3BwSGVhZGVyUG9zdGx1ZGUpLnN1YnN0aXR1dGUo
Tm9uZSwgKipoZWFkZXJfYXJncykpCisgICAgICAgIHJldHVybiAiXG5cbiIuam9pbihzZWN0aW9u
cykKKworICAgICMgUHJpdmF0ZSBtZXRob2RzLgorCisgICAgIyBGSVhNRTogbW92ZSBidWlsZGVy
cyBvdXQgb2YgY2xhc3NlcywgdW5jb21tZW50IGZvcndhcmQgZGVjbGFyYXRpb24KKworICAgIGRl
ZiBfZ2VuZXJhdGVfZm9yd2FyZF9kZWNsYXJhdGlvbnMoc2VsZiwgZG9tYWlucyk6CisgICAgICAg
IHNlY3Rpb25zID0gW10KKworICAgICAgICBmb3IgZG9tYWluIGluIGRvbWFpbnM6CisgICAgICAg
ICAgICBkZWNsYXJhdGlvbl90eXBlcyA9IFtkZWNsLnR5cGUgZm9yIGRlY2wgaW4gZG9tYWluLnR5
cGVfZGVjbGFyYXRpb25zXQorICAgICAgICAgICAgb2JqZWN0X3R5cGVzID0gZmlsdGVyKGxhbWJk
YSBfdHlwZTogaXNpbnN0YW5jZShfdHlwZSwgT2JqZWN0VHlwZSksIGRlY2xhcmF0aW9uX3R5cGVz
KQorICAgICAgICAgICAgZW51bV90eXBlcyA9IGZpbHRlcihsYW1iZGEgX3R5cGU6IGlzaW5zdGFu
Y2UoX3R5cGUsIEVudW1UeXBlKSwgZGVjbGFyYXRpb25fdHlwZXMpCisgICAgICAgICAgICBpZiBs
ZW4ob2JqZWN0X3R5cGVzKSArIGxlbihlbnVtX3R5cGVzKSA9PSAwOgorICAgICAgICAgICAgICAg
IGNvbnRpbnVlCisKKyAgICAgICAgICAgIGRvbWFpbl9saW5lcyA9IFtdCisgICAgICAgICAgICBk
b21haW5fbGluZXMuYXBwZW5kKCduYW1lc3BhY2UgJXMgeycgJSBkb21haW4uZG9tYWluX25hbWUp
CisKKyAgICAgICAgICAgIG9iamVjdF90eXBlX25hbWVzID0gW190eXBlLnJhd19uYW1lKCkgZm9y
IF90eXBlIGluIG9iamVjdF90eXBlc10KKyAgICAgICAgICAgIGVudW1fdHlwZV9uYW1lcyA9IFtf
dHlwZS5yYXdfbmFtZSgpIGZvciBfdHlwZSBpbiBlbnVtX3R5cGVzXQorCisgICAgICAgICAgICAj
IEZvcndhcmQtZGVjbGFyZSBhbGwgY2xhc3NlcyBzbyB0aGUgdHlwZSBidWlsZGVycyB3b24ndCBi
cmVhayBpZiByZWFycmFuZ2VkLgorICAgICAgICAgICAgZG9tYWluX2xpbmVzLmV4dGVuZCgnY2xh
c3MgJXM7JyAlIG5hbWUgZm9yIG5hbWUgaW4gc29ydGVkKG9iamVjdF90eXBlX25hbWVzKSkKKyAg
ICAgICAgICAgIGRvbWFpbl9saW5lcy5leHRlbmQoJ2VudW0gY2xhc3MgJXM7JyAlIG5hbWUgZm9y
IG5hbWUgaW4gc29ydGVkKGVudW1fdHlwZV9uYW1lcykpCisgICAgICAgICAgICBkb21haW5fbGlu
ZXMuYXBwZW5kKCd9IC8vICVzJyAlIGRvbWFpbi5kb21haW5fbmFtZSkKKyAgICAgICAgICAgIHNl
Y3Rpb25zLmFwcGVuZChHZW5lcmF0b3Iud3JhcF93aXRoX2d1YXJkX2Zvcl9kb21haW4oZG9tYWlu
LCAnXG4nLmpvaW4oZG9tYWluX2xpbmVzKSkpCisKKyAgICAgICAgaWYgbGVuKHNlY3Rpb25zKSA9
PSAwOgorICAgICAgICAgICAgcmV0dXJuICcnCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBy
ZXR1cm4gIiIiLy8gRm9yd2FyZCBkZWNsYXJhdGlvbnMuCislcworLy8gRW5kIG9mIGZvcndhcmQg
ZGVjbGFyYXRpb25zLgorIiIiICUgJ1xuXG4nLmpvaW4oc2VjdGlvbnMpCisKKyAgICBkZWYgX2dl
bmVyYXRlX3R5cGVkZWZzKHNlbGYsIGRvbWFpbnMpOgorICAgICAgICBzZWN0aW9ucyA9IG1hcChz
ZWxmLl9nZW5lcmF0ZV90eXBlZGVmc19mb3JfZG9tYWluLCBkb21haW5zKQorICAgICAgICBzZWN0
aW9ucyA9IGZpbHRlcihsYW1iZGEgdGV4dDogbGVuKHRleHQpID4gMCwgc2VjdGlvbnMpCisKKyAg
ICAgICAgaWYgbGVuKHNlY3Rpb25zKSA9PSAwOgorICAgICAgICAgICAgcmV0dXJuICcnCisgICAg
ICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gIiIiLy8gVHlwZWRlZnMuCislcworLy8gRW5k
IG9mIHR5cGVkZWZzLiIiIiAlICdcblxuJy5qb2luKHNlY3Rpb25zKQorCisgICAgZGVmIF9nZW5l
cmF0ZV90eXBlZGVmc19mb3JfZG9tYWluKHNlbGYsIGRvbWFpbik6CisgICAgICAgIHByaW1pdGl2
ZV9kZWNsYXJhdGlvbnMgPSBmaWx0ZXIobGFtYmRhIGRlY2w6IGlzaW5zdGFuY2UoZGVjbC50eXBl
LCBBbGlhc2VkVHlwZSksIGRvbWFpbi50eXBlX2RlY2xhcmF0aW9ucykKKyAgICAgICAgaWYgbGVu
KHByaW1pdGl2ZV9kZWNsYXJhdGlvbnMpID09IDA6CisgICAgICAgICAgICByZXR1cm4gJycKKwor
ICAgICAgICBzZWN0aW9ucyA9IFtdCisgICAgICAgIGZvciBkZWNsYXJhdGlvbiBpbiBwcmltaXRp
dmVfZGVjbGFyYXRpb25zOgorICAgICAgICAgICAgcHJpbWl0aXZlX25hbWUgPSBHZW5lcmF0b3Iu
Y3BwX25hbWVfZm9yX3ByaW1pdGl2ZV90eXBlKGRlY2xhcmF0aW9uLnR5cGUuYWxpYXNlZF90eXBl
KQorICAgICAgICAgICAgdHlwZWRlZl9saW5lcyA9IFtdCisgICAgICAgICAgICBpZiBsZW4oZGVj
bGFyYXRpb24uZGVzY3JpcHRpb24pID4gMDoKKyAgICAgICAgICAgICAgICB0eXBlZGVmX2xpbmVz
LmFwcGVuZCgnLyogJXMgKi8nICUgZGVjbGFyYXRpb24uZGVzY3JpcHRpb24pCisgICAgICAgICAg
ICB0eXBlZGVmX2xpbmVzLmFwcGVuZCgndHlwZWRlZiAlcyAlczsnICUgKHByaW1pdGl2ZV9uYW1l
LCBkZWNsYXJhdGlvbi50eXBlX25hbWUpKQorICAgICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKCdc
bicuam9pbih0eXBlZGVmX2xpbmVzKSkKKworICAgICAgICBsaW5lcyA9IFtdCisgICAgICAgIGxp
bmVzLmFwcGVuZCgnbmFtZXNwYWNlICVzIHsnICUgZG9tYWluLmRvbWFpbl9uYW1lKQorICAgICAg
ICBsaW5lcy5hcHBlbmQoJ1xuXG4nLmpvaW4oc2VjdGlvbnMpKQorICAgICAgICBsaW5lcy5hcHBl
bmQoJ30gLy8gJXMnICUgZG9tYWluLmRvbWFpbl9uYW1lKQorICAgICAgICByZXR1cm4gR2VuZXJh
dG9yLndyYXBfd2l0aF9ndWFyZF9mb3JfZG9tYWluKGRvbWFpbiwgJ1xuJy5qb2luKGxpbmVzKSkK
KworICAgIGRlZiBfZ2VuZXJhdGVfYnVpbGRlcnNfZm9yX2RvbWFpbihzZWxmLCBkb21haW4pOgor
ICAgICAgICBzZWN0aW9ucyA9IFtdCisKKyAgICAgICAgZm9yIHR5cGVfZGVjbGFyYXRpb24gaW4g
ZG9tYWluLnR5cGVfZGVjbGFyYXRpb25zOgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh0eXBl
X2RlY2xhcmF0aW9uLnR5cGUsIEVudW1UeXBlKToKKyAgICAgICAgICAgICAgICBzZWN0aW9ucy5h
cHBlbmQoc2VsZi5fZ2VuZXJhdGVfc3RydWN0X2Zvcl9lbnVtX2RlY2xhcmF0aW9uKHR5cGVfZGVj
bGFyYXRpb24pKQorICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHR5cGVfZGVjbGFyYXRpb24u
dHlwZSwgT2JqZWN0VHlwZSk6CisgICAgICAgICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYu
X2dlbmVyYXRlX2NsYXNzX2Zvcl9vYmplY3RfZGVjbGFyYXRpb24odHlwZV9kZWNsYXJhdGlvbiwg
ZG9tYWluKSkKKworICAgICAgICBzZWN0aW9ucyA9IGZpbHRlcihsYW1iZGEgc2VjdGlvbjogbGVu
KHNlY3Rpb24pID4gMCwgc2VjdGlvbnMpCisgICAgICAgIGlmIGxlbihzZWN0aW9ucykgPT0gMDoK
KyAgICAgICAgICAgIHJldHVybiAnJworCisgICAgICAgIGxpbmVzID0gW10KKyAgICAgICAgbGlu
ZXMuYXBwZW5kKCduYW1lc3BhY2UgJXMgeycgJSBkb21haW4uZG9tYWluX25hbWUpCisgICAgICAg
IGxpbmVzLmFwcGVuZCgnXG4nLmpvaW4oc2VjdGlvbnMpKQorICAgICAgICBsaW5lcy5hcHBlbmQo
J30gLy8gJXMnICUgZG9tYWluLmRvbWFpbl9uYW1lKQorICAgICAgICByZXR1cm4gR2VuZXJhdG9y
LndyYXBfd2l0aF9ndWFyZF9mb3JfZG9tYWluKGRvbWFpbiwgJ1xuJy5qb2luKGxpbmVzKSkKKwor
ICAgIGRlZiBfZ2VuZXJhdGVfY2xhc3NfZm9yX29iamVjdF9kZWNsYXJhdGlvbihzZWxmLCB0eXBl
X2RlY2xhcmF0aW9uLCBkb21haW4pOgorICAgICAgICBpZiBsZW4odHlwZV9kZWNsYXJhdGlvbi50
eXBlX21lbWJlcnMpID09IDA6CisgICAgICAgICAgICByZXR1cm4gJycKKworICAgICAgICBlbnVt
X21lbWJlcnMgPSBmaWx0ZXIobGFtYmRhIG1lbWJlcjogaXNpbnN0YW5jZShtZW1iZXIudHlwZSwg
RW51bVR5cGUpIGFuZCBtZW1iZXIudHlwZS5pc19hbm9ueW1vdXMsIHR5cGVfZGVjbGFyYXRpb24u
dHlwZV9tZW1iZXJzKQorICAgICAgICByZXF1aXJlZF9tZW1iZXJzID0gZmlsdGVyKGxhbWJkYSBt
ZW1iZXI6IG5vdCBtZW1iZXIuaXNfb3B0aW9uYWwsIHR5cGVfZGVjbGFyYXRpb24udHlwZV9tZW1i
ZXJzKQorICAgICAgICBvcHRpb25hbF9tZW1iZXJzID0gZmlsdGVyKGxhbWJkYSBtZW1iZXI6IG1l
bWJlci5pc19vcHRpb25hbCwgdHlwZV9kZWNsYXJhdGlvbi50eXBlX21lbWJlcnMpCisgICAgICAg
IG9iamVjdF9uYW1lID0gdHlwZV9kZWNsYXJhdGlvbi50eXBlX25hbWUKKworICAgICAgICBsaW5l
cyA9IFtdCisgICAgICAgIGlmIGxlbih0eXBlX2RlY2xhcmF0aW9uLmRlc2NyaXB0aW9uKSA+IDA6
CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJy8qICVzICovJyAlIHR5cGVfZGVjbGFyYXRpb24u
ZGVzY3JpcHRpb24pCisgICAgICAgIGJhc2VfY2xhc3MgPSAnSW5zcGVjdG9yOjpJbnNwZWN0b3JP
YmplY3QnCisgICAgICAgIGlmIG5vdCBHZW5lcmF0b3IudHlwZV9oYXNfb3Blbl9maWVsZHModHlw
ZV9kZWNsYXJhdGlvbi50eXBlKToKKyAgICAgICAgICAgIGJhc2VfY2xhc3MgPSBiYXNlX2NsYXNz
ICsgJ0Jhc2UnCisgICAgICAgIGxpbmVzLmFwcGVuZCgnY2xhc3MgJXMgOiBwdWJsaWMgJXMgeycg
JSAob2JqZWN0X25hbWUsIGJhc2VfY2xhc3MpKQorICAgICAgICBsaW5lcy5hcHBlbmQoJ3B1Ymxp
YzonKQorICAgICAgICBmb3IgZW51bV9tZW1iZXIgaW4gZW51bV9tZW1iZXJzOgorICAgICAgICAg
ICAgbGluZXMuYXBwZW5kKCcgICAgLy8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSBcJyVzXCcg
d2hpbGUgZ2VuZXJhdGluZyAlcy4nICUgKGVudW1fbWVtYmVyLm1lbWJlcl9uYW1lLCBvYmplY3Rf
bmFtZSkpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfc3RydWN0X2Zv
cl9hbm9ueW1vdXNfZW51bV9tZW1iZXIoZW51bV9tZW1iZXIpKQorICAgICAgICBsaW5lcy5hcHBl
bmQoc2VsZi5fZ2VuZXJhdGVfYnVpbGRlcl9zdGF0ZV9lbnVtKHR5cGVfZGVjbGFyYXRpb24pKQor
CisgICAgICAgIGNvbnN0cnVjdG9yX2V4YW1wbGUgPSBbXQorICAgICAgICBjb25zdHJ1Y3Rvcl9l
eGFtcGxlLmFwcGVuZCgnICAgICAqIFJlZlB0cjwlcz4gcmVzdWx0ID0gJXM6OmNyZWF0ZSgpJyAl
IChvYmplY3RfbmFtZSwgb2JqZWN0X25hbWUpKQorICAgICAgICBmb3IgbWVtYmVyIGluIHJlcXVp
cmVkX21lbWJlcnM6CisgICAgICAgICAgICBjb25zdHJ1Y3Rvcl9leGFtcGxlLmFwcGVuZCgnICAg
ICAqICAgICAuc2V0JXMoLi4uKScgJSB1Y2ZpcnN0KG1lbWJlci5tZW1iZXJfbmFtZSkpCisKKyAg
ICAgICAgYnVpbGRlcl9hcmdzID0geworICAgICAgICAgICAgJ29iamVjdFR5cGUnOiBvYmplY3Rf
bmFtZSwKKyAgICAgICAgICAgICdjb25zdHJ1Y3RvckV4YW1wbGUnOiAnXG4nLmpvaW4oY29uc3Ry
dWN0b3JfZXhhbXBsZSkgKyAnOycsCisgICAgICAgIH0KKworICAgICAgICBsaW5lcy5hcHBlbmQo
VGVtcGxhdGUoVGVtcGxhdGVzLlR5cGVCdWlsZGVyRGVjbGFyYXRpb25QcmVsdWRlKS5zdWJzdGl0
dXRlKE5vbmUsICoqYnVpbGRlcl9hcmdzKSkKKyAgICAgICAgZm9yIHR5cGVfbWVtYmVyIGluIHJl
cXVpcmVkX21lbWJlcnM6CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVf
YnVpbGRlcl9zZXR0ZXJfZm9yX21lbWJlcih0eXBlX21lbWJlciwgZG9tYWluKSkKKyAgICAgICAg
bGluZXMuYXBwZW5kKFRlbXBsYXRlKFRlbXBsYXRlcy5UeXBlQnVpbGRlckRlY2xhcmF0aW9uUG9z
dGx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipidWlsZGVyX2FyZ3MpKQorICAgICAgICBmb3IgbWVt
YmVyIGluIG9wdGlvbmFsX21lbWJlcnM6CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5f
Z2VuZXJhdGVfdW5jaGVja2VkX3NldHRlcl9mb3JfbWVtYmVyKG1lbWJlciwgZG9tYWluKSkKKwor
ICAgICAgICBpZiBHZW5lcmF0b3IudHlwZV9oYXNfb3Blbl9maWVsZHModHlwZV9kZWNsYXJhdGlv
bi50eXBlKToKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnJykKKyAgICAgICAgICAgIGxpbmVz
LmFwcGVuZCgnICAgIC8vIFByb3BlcnR5IG5hbWVzIGZvciB0eXBlIGdlbmVyYXRlZCBhcyBvcGVu
LicpCisgICAgICAgICAgICBmb3IgdHlwZV9tZW1iZXIgaW4gdHlwZV9kZWNsYXJhdGlvbi50eXBl
X21lbWJlcnM6CisgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgc3RhdGljIGNvbnN0
IGNoYXIqICVzOycgJSB1Y2ZpcnN0KHR5cGVfbWVtYmVyLm1lbWJlcl9uYW1lKSkKKworICAgICAg
ICBsaW5lcy5hcHBlbmQoJ307JykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcnKQorICAgICAgICBy
ZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQorCisgICAgZGVmIF9nZW5lcmF0ZV9zdHJ1Y3RfZm9yX2Vu
dW1fZGVjbGFyYXRpb24oc2VsZiwgZW51bV9kZWNsYXJhdGlvbik6CisgICAgICAgIGxpbmVzID0g
W10KKyAgICAgICAgbGluZXMuYXBwZW5kKCcvKiAlcyAqLycgJSBlbnVtX2RlY2xhcmF0aW9uLmRl
c2NyaXB0aW9uKQorICAgICAgICBsaW5lcy5leHRlbmQoc2VsZi5fZ2VuZXJhdGVfc3RydWN0X2Zv
cl9lbnVtX3R5cGUoZW51bV9kZWNsYXJhdGlvbi50eXBlX25hbWUsIGVudW1fZGVjbGFyYXRpb24u
dHlwZSkpCisgICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCisKKyAgICBkZWYgX2dlbmVy
YXRlX3N0cnVjdF9mb3JfYW5vbnltb3VzX2VudW1fbWVtYmVyKHNlbGYsIGVudW1fbWVtYmVyKToK
KyAgICAgICAgZGVmIGFwcGx5X2luZGVudGF0aW9uKGxpbmUpOgorICAgICAgICAgICAgaWYgbGlu
ZS5zdGFydHN3aXRoKCgnIycsICcvKicsICcqLycsICcvLycpKSBvciBsZW4obGluZSkgaXMgMDoK
KyAgICAgICAgICAgICAgICByZXR1cm4gbGluZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAg
ICAgICAgICByZXR1cm4gJyAgICAnICsgbGluZQorCisgICAgICAgIGluZGVudGVkX2xpbmVzID0g
bWFwKGFwcGx5X2luZGVudGF0aW9uLCBzZWxmLl9nZW5lcmF0ZV9zdHJ1Y3RfZm9yX2VudW1fdHlw
ZShlbnVtX21lbWJlci5tZW1iZXJfbmFtZSwgZW51bV9tZW1iZXIudHlwZSkpCisgICAgICAgIHJl
dHVybiAnXG4nLmpvaW4oaW5kZW50ZWRfbGluZXMpCisKKyAgICBkZWYgX2dlbmVyYXRlX3N0cnVj
dF9mb3JfZW51bV90eXBlKHNlbGYsIGVudW1fbmFtZSwgZW51bV90eXBlKToKKyAgICAgICAgbGlu
ZXMgPSBbXQorICAgICAgICBlbnVtX25hbWUgPSB1Y2ZpcnN0KGVudW1fbmFtZSkKKyAgICAgICAg
bGluZXMuYXBwZW5kKCdlbnVtIGNsYXNzICVzIHsnICUgZW51bV9uYW1lKQorICAgICAgICBmb3Ig
ZW51bV92YWx1ZSBpbiBlbnVtX3R5cGUuZW51bV92YWx1ZXMoKToKKyAgICAgICAgICAgIGxpbmVz
LmFwcGVuZCgnICAgICVzID0gJXMsJyAlIChHZW5lcmF0b3Iuc3R5bGl6ZWRfbmFtZV9mb3JfZW51
bV92YWx1ZShlbnVtX3ZhbHVlKSwgc2VsZi5lbmNvZGluZ19mb3JfZW51bV92YWx1ZShlbnVtX3Zh
bHVlKSkpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnfTsgLy8gZW51bSBjbGFzcyAlcycgJSBlbnVt
X25hbWUpCisgICAgICAgIHJldHVybiBsaW5lcyAgIyBUaGUgY2FsbGVyIG1heSB3YW50IHRvIGFk
anVzdCBpbmRlbnRhdGlvbiwgc28gZG9uJ3Qgam9pbiB0aGVzZSBsaW5lcy4KKworICAgIGRlZiBf
Z2VuZXJhdGVfYnVpbGRlcl9zdGF0ZV9lbnVtKHNlbGYsIHR5cGVfZGVjbGFyYXRpb24pOgorICAg
ICAgICBsaW5lcyA9IFtdCisgICAgICAgIHJlcXVpcmVkX21lbWJlcnMgPSBmaWx0ZXIobGFtYmRh
IG1lbWJlcjogbm90IG1lbWJlci5pc19vcHRpb25hbCwgdHlwZV9kZWNsYXJhdGlvbi50eXBlX21l
bWJlcnMpCisgICAgICAgIGVudW1fdmFsdWVzID0gW10KKworICAgICAgICBsaW5lcy5hcHBlbmQo
JyAgICBlbnVtIHsnKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgTm9GaWVsZHNTZXQg
PSAwLCcpCisgICAgICAgIGZvciBpIGluIHJhbmdlKGxlbihyZXF1aXJlZF9tZW1iZXJzKSk6Cisg
ICAgICAgICAgICBlbnVtX3ZhbHVlID0gIiVzU2V0IiAlIHVjZmlyc3QocmVxdWlyZWRfbWVtYmVy
c1tpXS5tZW1iZXJfbmFtZSkKKyAgICAgICAgICAgIGVudW1fdmFsdWVzLmFwcGVuZChlbnVtX3Zh
bHVlKQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgICVzID0gMSA8PCAlZCwnICUg
KGVudW1fdmFsdWUsIGkpKQorICAgICAgICBpZiBsZW4oZW51bV92YWx1ZXMpID4gMDoKKyAgICAg
ICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBBbGxGaWVsZHNTZXQgPSAoJXMpJyAlICcgfCAn
LmpvaW4oZW51bV92YWx1ZXMpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbGluZXMuYXBw
ZW5kKCcgICAgICAgIEFsbEZpZWxkc1NldCA9IDAnKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAg
ICB9OycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnJykKKyAgICAgICAgcmV0dXJuICdcbicuam9p
bihsaW5lcykKKworICAgIGRlZiBfZ2VuZXJhdGVfYnVpbGRlcl9zZXR0ZXJfZm9yX21lbWJlcihz
ZWxmLCB0eXBlX21lbWJlciwgZG9tYWluKToKKyAgICAgICAgc2V0dGVyX2FyZ3MgPSB7CisgICAg
ICAgICAgICAnY2FtZWxOYW1lJzogdWNmaXJzdCh0eXBlX21lbWJlci5tZW1iZXJfbmFtZSksCisg
ICAgICAgICAgICAnZnJhbWV3b3JrUHJlZml4Jzogc2VsZi5tb2RlbCgpLmZyYW1ld29yay5zZXR0
aW5nKCdwcmVmaXgnKSwKKyAgICAgICAgICAgICdrZXllZFNldCc6IEdlbmVyYXRvci5rZXllZF9z
ZXRfbWV0aG9kX2Zvcl90eXBlKHR5cGVfbWVtYmVyLnR5cGUpLAorICAgICAgICAgICAgJ25hbWUn
OiB0eXBlX21lbWJlci5tZW1iZXJfbmFtZSwKKyAgICAgICAgICAgICdwYXJhbWV0ZXJUeXBlJzog
R2VuZXJhdG9yLnR5cGVfc3RyaW5nX2Zvcl90eXBlX21lbWJlcih0eXBlX21lbWJlcikKKyAgICAg
ICAgfQorCisgICAgICAgIGxpbmVzID0gW10KKyAgICAgICAgbGluZXMuYXBwZW5kKCcnKQorICAg
ICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgQnVpbGRlcjxTVEFURSB8ICUoY2FtZWxOYW1lKXNT
ZXQ+JiBzZXQlKGNhbWVsTmFtZSlzKCUocGFyYW1ldGVyVHlwZSlzIHZhbHVlKScgJSBzZXR0ZXJf
YXJncykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIHsnKQorICAgICAgICBsaW5lcy5h
cHBlbmQoJyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiAlKGNhbWVsTmFtZSlz
U2V0KSwgcHJvcGVydHlfJShuYW1lKXNfYWxyZWFkeV9zZXQpOycgJSBzZXR0ZXJfYXJncykKKwor
ICAgICAgICBpZiBpc2luc3RhbmNlKHR5cGVfbWVtYmVyLnR5cGUsIEVudW1UeXBlKToKKyAgICAg
ICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICAgICAgbV9yZXN1bHQtPiUoa2V5ZWRTZXQpcyhB
U0NJSUxpdGVyYWwoIiUobmFtZSlzIiksIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OmdldCUoZnJh
bWV3b3JrUHJlZml4KXNFbnVtQ29uc3RhbnRWYWx1ZShzdGF0aWNfY2FzdDxpbnQ+KHZhbHVlKSkp
OycgJSBzZXR0ZXJfYXJncykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxpbmVzLmFwcGVu
ZCgnICAgICAgICAgICAgbV9yZXN1bHQtPiUoa2V5ZWRTZXQpcyhBU0NJSUxpdGVyYWwoIiUobmFt
ZSlzIiksIHZhbHVlKTsnICUgc2V0dGVyX2FyZ3MpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAg
ICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTwlKGNhbWVsTmFtZSlzU2V0PigpOycgJSBzZXR0ZXJf
YXJncykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIH0nKQorICAgICAgICByZXR1cm4g
J1xuJy5qb2luKGxpbmVzKQorCisgICAgZGVmIF9nZW5lcmF0ZV91bmNoZWNrZWRfc2V0dGVyX2Zv
cl9tZW1iZXIoc2VsZiwgdHlwZV9tZW1iZXIsIGRvbWFpbik6CisgICAgICAgIHNldHRlcl9hcmdz
ID0geworICAgICAgICAgICAgJ2NhbWVsTmFtZSc6IHVjZmlyc3QodHlwZV9tZW1iZXIubWVtYmVy
X25hbWUpLAorICAgICAgICAgICAgJ2ZyYW1ld29ya1ByZWZpeCc6IHNlbGYubW9kZWwoKS5mcmFt
ZXdvcmsuc2V0dGluZygncHJlZml4JyksCisgICAgICAgICAgICAna2V5ZWRTZXQnOiBHZW5lcmF0
b3Iua2V5ZWRfc2V0X21ldGhvZF9mb3JfdHlwZSh0eXBlX21lbWJlci50eXBlKSwKKyAgICAgICAg
ICAgICduYW1lJzogdHlwZV9tZW1iZXIubWVtYmVyX25hbWUsCisgICAgICAgICAgICAncGFyYW1l
dGVyVHlwZSc6IEdlbmVyYXRvci50eXBlX3N0cmluZ19mb3JfdHlwZV9tZW1iZXIodHlwZV9tZW1i
ZXIpCisgICAgICAgIH0KKworICAgICAgICBsaW5lcyA9IFtdCisgICAgICAgIGxpbmVzLmFwcGVu
ZCgnJykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgdm9pZCBzZXQlKGNhbWVsTmFtZSlzKCUo
cGFyYW1ldGVyVHlwZSlzIHZhbHVlKScgJSBzZXR0ZXJfYXJncykKKyAgICAgICAgbGluZXMuYXBw
ZW5kKCcgICAgeycpCisgICAgICAgIGlmIGlzaW5zdGFuY2UodHlwZV9tZW1iZXIudHlwZSwgRW51
bVR5cGUpOgorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIHRoaXMtPiUoa2V5ZWRT
ZXQpcyhBU0NJSUxpdGVyYWwoIiUobmFtZSlzIiksIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6Omdl
dCUoZnJhbWV3b3JrUHJlZml4KXNFbnVtQ29uc3RhbnRWYWx1ZShzdGF0aWNfY2FzdDxpbnQ+KHZh
bHVlKSkpOycgJSBzZXR0ZXJfYXJncykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxpbmVz
LmFwcGVuZCgnICAgICAgICB0aGlzLT4lKGtleWVkU2V0KXMoQVNDSUlMaXRlcmFsKCIlKG5hbWUp
cyIpLCB2YWx1ZSk7JyAlIHNldHRlcl9hcmdzKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICB9
JykKKyAgICAgICAgaWYgdHlwZV9tZW1iZXIubWVtYmVyX25hbWUgaW4gWyd2YWx1ZScsICdhcnJh
eScsICdzdHJpbmcnLCAnbnVtYmVyJywgJ2ludGVnZXInXToKKyAgICAgICAgICAgIGxpbmVzLmFw
cGVuZCgnICAgIHVzaW5nIEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0QmFzZTo6c2V0JXM7JyAl
IHVjZmlyc3QodHlwZV9tZW1iZXIubWVtYmVyX25hbWUpKQorICAgICAgICAgICAgbGluZXMuYXBw
ZW5kKCcnKQorICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQorCisgICAgZGVmIF9nZW5l
cmF0ZV9mb3J3YXJkX2RlY2xhcmF0aW9uc19mb3JfYmluZGluZ190cmFpdHMoc2VsZik6CisgICAg
ICAgICMgQSBsaXN0IG9mIChidWlsZGVyX3R5cGUsIG5lZWRzX3J1bnRpbWVfY2FzdCkKKyAgICAg
ICAgdHlwZV9hcmd1bWVudHMgPSBbXQorCisgICAgICAgIGZvciBkb21haW4gaW4gc2VsZi5kb21h
aW5zX3RvX2dlbmVyYXRlKCk6CisgICAgICAgICAgICBkZWNsYXJhdGlvbnNfdG9fZ2VuZXJhdGUg
PSBmaWx0ZXIobGFtYmRhIGRlY2w6IHNlbGYudHlwZV9uZWVkc19zaGFwZV9hc3NlcnRpb25zKGRl
Y2wudHlwZSksIGRvbWFpbi50eXBlX2RlY2xhcmF0aW9ucykKKworICAgICAgICAgICAgZm9yIHR5
cGVfZGVjbGFyYXRpb24gaW4gZGVjbGFyYXRpb25zX3RvX2dlbmVyYXRlOgorICAgICAgICAgICAg
ICAgIGZvciB0eXBlX21lbWJlciBpbiB0eXBlX2RlY2xhcmF0aW9uLnR5cGVfbWVtYmVyczoKKyAg
ICAgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh0eXBlX21lbWJlci50eXBlLCBFbnVtVHlw
ZSk6CisgICAgICAgICAgICAgICAgICAgICAgICB0eXBlX2FyZ3VtZW50cy5hcHBlbmQoKEdlbmVy
YXRvci50eXBlX2J1aWxkZXJfc3RyaW5nX2Zvcl90eXBlX21lbWJlcih0eXBlX21lbWJlciwgdHlw
ZV9kZWNsYXJhdGlvbiksIEZhbHNlKSkKKworICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uo
dHlwZV9kZWNsYXJhdGlvbi50eXBlLCBPYmplY3RUeXBlKToKKyAgICAgICAgICAgICAgICAgICAg
dHlwZV9hcmd1bWVudHMuYXBwZW5kKChHZW5lcmF0b3IudHlwZV9idWlsZGVyX3N0cmluZ19mb3Jf
dHlwZSh0eXBlX2RlY2xhcmF0aW9uLnR5cGUpLCBHZW5lcmF0b3IudHlwZV9uZWVkc19ydW50aW1l
X2Nhc3RzKHR5cGVfZGVjbGFyYXRpb24udHlwZSkpKQorCisgICAgICAgIHN0cnVjdF9rZXl3b3Jk
cyA9IFsnc3RydWN0J10KKyAgICAgICAgZnVuY3Rpb25fa2V5d29yZHMgPSBbJ3N0YXRpYyB2b2lk
J10KKyAgICAgICAgZXhwb3J0X21hY3JvID0gc2VsZi5tb2RlbCgpLmZyYW1ld29yay5zZXR0aW5n
KCdleHBvcnRfbWFjcm8nLCBOb25lKQorICAgICAgICBpZiBleHBvcnRfbWFjcm8gaXMgbm90IE5v
bmU6CisgICAgICAgICAgICBzdHJ1Y3Rfa2V5d29yZHMuYXBwZW5kKGV4cG9ydF9tYWNybykKKyAg
ICAgICAgICAgIGZ1bmN0aW9uX2tleXdvcmRzWzE6MV0gPSBbZXhwb3J0X21hY3JvXQorCisgICAg
ICAgIGxpbmVzID0gW10KKyAgICAgICAgZm9yIGFyZ3VtZW50IGluIHR5cGVfYXJndW1lbnRzOgor
ICAgICAgICAgICAgbGluZXMuYXBwZW5kKCd0ZW1wbGF0ZTw+ICVzIEJpbmRpbmdUcmFpdHM8JXM+
IHsnICUgKCcgJy5qb2luKHN0cnVjdF9rZXl3b3JkcyksIGFyZ3VtZW50WzBdKSkKKyAgICAgICAg
ICAgIGlmIGFyZ3VtZW50WzFdOgorICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnc3RhdGlj
IFBhc3NSZWZQdHI8JXM+IHJ1bnRpbWVDYXN0KFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0
b3JWYWx1ZT4gdmFsdWUpOycgJSBhcmd1bWVudFswXSkKKyAgICAgICAgICAgIGxpbmVzLmFwcGVu
ZCgnI2lmICFBU1NFUlRfRElTQUJMRUQnKQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCclcyBh
c3NlcnRDb3JyZWN0VmFsdWUoSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSopOycgJSAnICcuam9p
bihmdW5jdGlvbl9rZXl3b3JkcykpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyNlbmRpZiAv
LyAhQVNTRVJUX0RJU0FCTEVEJykKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnfTsnKQorICAg
ICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfdHlwZV9idWlsZGVyX2lt
cGxlbWVudGF0aW9uLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2NvZGVnZW4vZ2VuZXJhdGVfdHlwZV9idWlsZGVyX2ltcGxlbWVudGF0aW9uLnB5Cm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmQ2N2NkNGMyYWNiMGEzMGFmZjNlNmIwMzBjNmExNWE2ZWRjOGFlMDEKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9n
ZW5lcmF0ZV90eXBlX2J1aWxkZXJfaW1wbGVtZW50YXRpb24ucHkKQEAgLTAsMCArMSwxOTUgQEAK
KyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyBDb3B5cmlnaHQgKGMpIDIwMTQgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKGMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisjIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworIyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisjIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKworCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG9zLnBhdGgKK2ltcG9y
dCByZQoraW1wb3J0IHN0cmluZworCitmcm9tIGdlbmVyYXRvciBpbXBvcnQgR2VuZXJhdG9yLCB1
Y2ZpcnN0Citmcm9tIHN0cmluZyBpbXBvcnQgVGVtcGxhdGUKK2Zyb20gZ2VuZXJhdG9yX3RlbXBs
YXRlcyBpbXBvcnQgR2VuZXJhdG9yVGVtcGxhdGVzIGFzIFRlbXBsYXRlcworZnJvbSBtb2RlbHMg
aW1wb3J0IEFsaWFzZWRUeXBlLCBBcnJheVR5cGUsIEVudW1UeXBlLCBPYmplY3RUeXBlCisKKyMg
VXNlIGEgZ2xvYmFsIGxvZ2dlciwgd2hpY2ggbm9ybWFsbHkgb25seSBsb2dzIGVycm9ycy4KK2xv
ZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQorCisKK2NsYXNzIFR5cGVCdWlsZGVySW1w
bGVtZW50YXRpb25HZW5lcmF0b3IoR2VuZXJhdG9yKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwg
bW9kZWwsIGlucHV0X2ZpbGVwYXRoKToKKyAgICAgICAgc2VsZi5fbW9kZWwgPSBtb2RlbAorICAg
ICAgICBzZWxmLl9pbnB1dF9maWxlcGF0aCA9IGlucHV0X2ZpbGVwYXRoCisKKyAgICBkZWYgbW9k
ZWwoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9tb2RlbAorCisgICAgZGVmIG91dHB1dF9m
aWxlbmFtZShzZWxmKToKKyAgICAgICAgcmV0dXJuICJJbnNwZWN0b3Ilc1R5cGVCdWlsZGVycy5j
cHAiICUgc2VsZi5tb2RlbCgpLmZyYW1ld29yay5zZXR0aW5nKCdwcmVmaXgnKQorCisgICAgZGVm
IGdlbmVyYXRlX2xpY2Vuc2Uoc2VsZik6CisgICAgICAgIHJldHVybiBUZW1wbGF0ZShUZW1wbGF0
ZXMuQ29weXJpZ2h0QmxvY2spLnN1YnN0aXR1dGUoTm9uZSwgaW5wdXRGaWxlbmFtZT1vcy5wYXRo
LmJhc2VuYW1lKHNlbGYuX2lucHV0X2ZpbGVwYXRoKSkKKworICAgIGRlZiBnZW5lcmF0ZV9vdXRw
dXQoc2VsZik6CisgICAgICAgIGRvbWFpbnMgPSBHZW5lcmF0b3IuZG9tYWluc190b19nZW5lcmF0
ZSgpCisgICAgICAgIHNlbGYuY2FsY3VsYXRlX3R5cGVzX3JlcXVpcmluZ19zaGFwZV9hc3NlcnRp
b25zKGRvbWFpbnMpCisKKyAgICAgICAgc2Vjb25kYXJ5X2hlYWRlcnMgPSBbJzx3dGYvdGV4dC9D
U3RyaW5nLmg+J10KKworICAgICAgICBzZWN0aW9ucyA9IFtdCisgICAgICAgIHNlY3Rpb25zLmFw
cGVuZChzZWxmLmdlbmVyYXRlX2xpY2Vuc2UoKSkKKyAgICAgICAgaGVhZGVyX2FyZ3MgPSB7Cisg
ICAgICAgICAgICAncHJpbWFyeUluY2x1ZGUnOiAnIkluc3BlY3RvciVzVHlwZUJ1aWxkZXJzLmgi
JyAlIHNlbGYubW9kZWwoKS5mcmFtZXdvcmsuc2V0dGluZygncHJlZml4JyksCisgICAgICAgICAg
ICAnc2Vjb25kYXJ5SW5jbHVkZXMnOiAiXG4iLmpvaW4oWycjaW5jbHVkZSAlcycgJSBoZWFkZXIg
Zm9yIGhlYWRlciBpbiBzZWNvbmRhcnlfaGVhZGVyc10pLAorICAgICAgICAgICAgJ2lucHV0Rmls
ZW5hbWUnOiBzZWxmLl9pbnB1dF9maWxlcGF0aAorICAgICAgICB9CisKKyAgICAgICAgc2VjdGlv
bnMuYXBwZW5kKFRlbXBsYXRlKFRlbXBsYXRlcy5DcHBJbXBsZW1lbnRhdGlvblByZWx1ZGUpLnN1
YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZCgn
bmFtZXNwYWNlIFR5cGVCdWlsZGVyIHsnKQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5f
Z2VuZXJhdGVfZW51bV9tYXBwaW5nKCkpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLl9n
ZW5lcmF0ZV9vcGVuX2ZpZWxkX25hbWVzKCkpCisgICAgICAgIGJ1aWxkZXJfc2VjdGlvbnMgPSBt
YXAoc2VsZi5fZ2VuZXJhdGVfYnVpbGRlcnNfZm9yX2RvbWFpbiwgZG9tYWlucykKKyAgICAgICAg
c2VjdGlvbnMuZXh0ZW5kKGZpbHRlcihsYW1iZGEgc2VjdGlvbjogbGVuKHNlY3Rpb24pID4gMCwg
YnVpbGRlcl9zZWN0aW9ucykpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZCgnfSAvLyBuYW1lc3Bh
Y2UgVHlwZUJ1aWxkZXInKQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxh
dGVzLkNwcEltcGxlbWVudGF0aW9uUG9zdGx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJf
YXJncykpCisKKyAgICAgICAgcmV0dXJuICJcblxuIi5qb2luKHNlY3Rpb25zKQorCisgICAgIyBQ
cml2YXRlIG1ldGhvZHMuCisKKyAgICBkZWYgX2dlbmVyYXRlX2VudW1fbWFwcGluZyhzZWxmKToK
KyAgICAgICAgZnJhbWV3b3JrX3ByZWZpeCA9IHNlbGYubW9kZWwoKS5mcmFtZXdvcmsuc2V0dGlu
ZygncHJlZml4JykKKyAgICAgICAgbGluZXMgPSBbXQorCisgICAgICAgIGxpbmVzLmFwcGVuZCgn
c3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGVudW1fY29uc3RhbnRfdmFsdWVzW10gPSB7JykKKyAg
ICAgICAgbGluZXMuZXh0ZW5kKFsnICAgICIlcyIsJyAlIGVudW1fdmFsdWUgZm9yIGVudW1fdmFs
dWUgaW4gc2VsZi5hc3NpZ25lZF9lbnVtX3ZhbHVlcygpXSkKKyAgICAgICAgbGluZXMuYXBwZW5k
KCd9OycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnJykKKyAgICAgICAgbGluZXMuYXBwZW5kKCdT
dHJpbmcgZ2V0JXNFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSkgeycgJSBmcmFtZXdvcmtfcHJl
Zml4KQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICByZXR1cm4gZW51bV9jb25zdGFudF92YWx1
ZXNbY29kZV07JykKKyAgICAgICAgbGluZXMuYXBwZW5kKCd9JykKKworICAgICAgICByZXR1cm4g
J1xuJy5qb2luKGxpbmVzKQorCisgICAgZGVmIF9nZW5lcmF0ZV9vcGVuX2ZpZWxkX25hbWVzKHNl
bGYpOgorICAgICAgICBsaW5lcyA9IFtdCisgICAgICAgIGZvciBkb21haW4gaW4gc2VsZi5kb21h
aW5zX3RvX2dlbmVyYXRlKCk6CisgICAgICAgICAgICBmb3IgdHlwZV9kZWNsYXJhdGlvbiBpbiBm
aWx0ZXIobGFtYmRhIGRlY2w6IEdlbmVyYXRvci50eXBlX2hhc19vcGVuX2ZpZWxkcyhkZWNsLnR5
cGUpLCBkb21haW4udHlwZV9kZWNsYXJhdGlvbnMpOgorICAgICAgICAgICAgICAgIGZvciB0eXBl
X21lbWJlciBpbiBzb3J0ZWQodHlwZV9kZWNsYXJhdGlvbi50eXBlX21lbWJlcnMsIGtleT1sYW1i
ZGEgbWVtYmVyOiBtZW1iZXIubWVtYmVyX25hbWUpOgorICAgICAgICAgICAgICAgICAgICBmaWVs
ZF9uYW1lID0gJzo6Jy5qb2luKFsnSW5zcGVjdG9yJywgJ1R5cGVCdWlsZGVyJywgZG9tYWluLmRv
bWFpbl9uYW1lLCB1Y2ZpcnN0KHR5cGVfZGVjbGFyYXRpb24udHlwZV9uYW1lKSwgdWNmaXJzdCh0
eXBlX21lbWJlci5tZW1iZXJfbmFtZSldKQorICAgICAgICAgICAgICAgICAgICBsaW5lcy5hcHBl
bmQoJ2NvbnN0IGNoYXIqICVzID0gIiVzIjsnICUgKGZpZWxkX25hbWUsIHR5cGVfbWVtYmVyLm1l
bWJlcl9uYW1lKSkKKworICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQorCisgICAgZGVm
IF9nZW5lcmF0ZV9idWlsZGVyc19mb3JfZG9tYWluKHNlbGYsIGRvbWFpbik6CisgICAgICAgIHNl
Y3Rpb25zID0gW10KKyAgICAgICAgZGVjbGFyYXRpb25zX3RvX2dlbmVyYXRlID0gZmlsdGVyKGxh
bWJkYSBkZWNsOiBzZWxmLnR5cGVfbmVlZHNfc2hhcGVfYXNzZXJ0aW9ucyhkZWNsLnR5cGUpLCBk
b21haW4udHlwZV9kZWNsYXJhdGlvbnMpCisKKyAgICAgICAgZm9yIHR5cGVfZGVjbGFyYXRpb24g
aW4gZGVjbGFyYXRpb25zX3RvX2dlbmVyYXRlOgorICAgICAgICAgICAgZm9yIHR5cGVfbWVtYmVy
IGluIHR5cGVfZGVjbGFyYXRpb24udHlwZV9tZW1iZXJzOgorICAgICAgICAgICAgICAgIGlmIGlz
aW5zdGFuY2UodHlwZV9tZW1iZXIudHlwZSwgRW51bVR5cGUpOgorICAgICAgICAgICAgICAgICAg
ICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYXNzZXJ0aW9uX2Zvcl9lbnVtKHR5cGVf
bWVtYmVyLCB0eXBlX2RlY2xhcmF0aW9uKSkKKworICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh0
eXBlX2RlY2xhcmF0aW9uLnR5cGUsIE9iamVjdFR5cGUpOgorICAgICAgICAgICAgICAgIHNlY3Rp
b25zLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9hc3NlcnRpb25fZm9yX29iamVjdF9kZWNsYXJhdGlv
bih0eXBlX2RlY2xhcmF0aW9uKSkKKyAgICAgICAgICAgICAgICBpZiBHZW5lcmF0b3IudHlwZV9u
ZWVkc19ydW50aW1lX2Nhc3RzKHR5cGVfZGVjbGFyYXRpb24udHlwZSk6CisgICAgICAgICAgICAg
ICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9ydW50aW1lX2Nhc3RfZm9yX29i
amVjdF9kZWNsYXJhdGlvbih0eXBlX2RlY2xhcmF0aW9uKSkKKworICAgICAgICByZXR1cm4gJ1xu
XG4nLmpvaW4oc2VjdGlvbnMpCisKKyAgICBkZWYgX2dlbmVyYXRlX3J1bnRpbWVfY2FzdF9mb3Jf
b2JqZWN0X2RlY2xhcmF0aW9uKHNlbGYsIG9iamVjdF9kZWNsYXJhdGlvbik6CisgICAgICAgIGFy
Z3MgPSB7CisgICAgICAgICAgICAnb2JqZWN0VHlwZSc6IEdlbmVyYXRvci50eXBlX2J1aWxkZXJf
c3RyaW5nX2Zvcl90eXBlKG9iamVjdF9kZWNsYXJhdGlvbi50eXBlKQorICAgICAgICB9CisgICAg
ICAgIHJldHVybiBUZW1wbGF0ZShUZW1wbGF0ZXMuVHlwZUJ1aWxkZXJPYmplY3RSdW50aW1lQ2Fz
dCkuc3Vic3RpdHV0ZShOb25lLCAqKmFyZ3MpCisKKyAgICBkZWYgX2dlbmVyYXRlX2Fzc2VydGlv
bl9mb3Jfb2JqZWN0X2RlY2xhcmF0aW9uKHNlbGYsIG9iamVjdF9kZWNsYXJhdGlvbik6CisgICAg
ICAgIHJlcXVpcmVkX21lbWJlcnMgPSBmaWx0ZXIobGFtYmRhIG1lbWJlcjogbm90IG1lbWJlci5p
c19vcHRpb25hbCwgb2JqZWN0X2RlY2xhcmF0aW9uLnR5cGVfbWVtYmVycykKKyAgICAgICAgb3B0
aW9uYWxfbWVtYmVycyA9IGZpbHRlcihsYW1iZGEgbWVtYmVyOiBtZW1iZXIuaXNfb3B0aW9uYWws
IG9iamVjdF9kZWNsYXJhdGlvbi50eXBlX21lbWJlcnMpCisgICAgICAgIHNob3VsZF9jb3VudF9w
cm9wZXJ0aWVzID0gbm90IEdlbmVyYXRvci50eXBlX2hhc19vcGVuX2ZpZWxkcyhvYmplY3RfZGVj
bGFyYXRpb24udHlwZSkKKyAgICAgICAgbGluZXMgPSBbXQorCisgICAgICAgIGxpbmVzLmFwcGVu
ZCgnI2lmICFBU1NFUlRfRElTQUJMRUQnKQorICAgICAgICBsaW5lcy5hcHBlbmQoJ3ZvaWQgQmlu
ZGluZ1RyYWl0czwlcz46OmFzc2VydENvcnJlY3RWYWx1ZShJbnNwZWN0b3I6Okluc3BlY3RvclZh
bHVlKiB2YWx1ZSknICUgKEdlbmVyYXRvci50eXBlX2J1aWxkZXJfc3RyaW5nX2Zvcl90eXBlKG9i
amVjdF9kZWNsYXJhdGlvbi50eXBlKSkpCisgICAgICAgIGxpbmVzLmFwcGVuZCgiIiJ7CisgICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gb2JqZWN0OworICAgIGJvb2wgY2FzdFJlcyA9IHZhbHVl
LT5hc09iamVjdCgmb2JqZWN0KTsKKyAgICBBU1NFUlRfVU5VU0VEKGNhc3RSZXMsIGNhc3RSZXMp
OyIiIikKKyAgICAgICAgZm9yIHR5cGVfbWVtYmVyIGluIHJlcXVpcmVkX21lbWJlcnM6CisgICAg
ICAgICAgICBhcmdzID0geworICAgICAgICAgICAgICAgICdtZW1iZXJOYW1lJzogdHlwZV9tZW1i
ZXIubWVtYmVyX25hbWUsCisgICAgICAgICAgICAgICAgJ2Fzc2VydE1ldGhvZCc6IEdlbmVyYXRv
ci5hc3NlcnRpb25fbWV0aG9kX2Zvcl90eXBlX21lbWJlcih0eXBlX21lbWJlciwgb2JqZWN0X2Rl
Y2xhcmF0aW9uKQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoIiIi
ICAgIHsKKyAgICAgICAgSW5zcGVjdG9yT2JqZWN0OjppdGVyYXRvciAlKG1lbWJlck5hbWUpc1Bv
czsKKyAgICAgICAgJShtZW1iZXJOYW1lKXNQb3MgPSBvYmplY3QtPmZpbmQoIiUobWVtYmVyTmFt
ZSlzIik7CisgICAgICAgIEFTU0VSVCglKG1lbWJlck5hbWUpc1BvcyAhPSBvYmplY3QtPmVuZCgp
KTsKKyAgICAgICAgJShhc3NlcnRNZXRob2QpcyglKG1lbWJlck5hbWUpc1Bvcy0+dmFsdWUuZ2V0
KCkpOworICAgIH0iIiIgJSBhcmdzKQorCisgICAgICAgIGlmIHNob3VsZF9jb3VudF9wcm9wZXJ0
aWVzOgorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcnKQorICAgICAgICAgICAgbGluZXMuYXBw
ZW5kKCcgICAgaW50IGZvdW5kUHJvcGVydGllc0NvdW50ID0gJXM7JyAlIGxlbihyZXF1aXJlZF9t
ZW1iZXJzKSkKKworICAgICAgICBmb3IgdHlwZV9tZW1iZXIgaW4gb3B0aW9uYWxfbWVtYmVyczoK
KyAgICAgICAgICAgIGFyZ3MgPSB7CisgICAgICAgICAgICAgICAgJ21lbWJlck5hbWUnOiB0eXBl
X21lbWJlci5tZW1iZXJfbmFtZSwKKyAgICAgICAgICAgICAgICAnYXNzZXJ0TWV0aG9kJzogR2Vu
ZXJhdG9yLmFzc2VydGlvbl9tZXRob2RfZm9yX3R5cGVfbWVtYmVyKHR5cGVfbWVtYmVyLCBvYmpl
Y3RfZGVjbGFyYXRpb24pCisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGxpbmVzLmFwcGVu
ZCgiIiIgICAgeworICAgICAgICBJbnNwZWN0b3JPYmplY3Q6Oml0ZXJhdG9yICUobWVtYmVyTmFt
ZSlzUG9zOworICAgICAgICAlKG1lbWJlck5hbWUpc1BvcyA9IG9iamVjdC0+ZmluZCgiJShtZW1i
ZXJOYW1lKXMiKTsKKyAgICAgICAgaWYgKCUobWVtYmVyTmFtZSlzUG9zICE9IG9iamVjdC0+ZW5k
KCkpIHsKKyAgICAgICAgICAgICUoYXNzZXJ0TWV0aG9kKXMoJShtZW1iZXJOYW1lKXNQb3MtPnZh
bHVlLmdldCgpKTsiIiIgJSBhcmdzKQorCisgICAgICAgICAgICBpZiBzaG91bGRfY291bnRfcHJv
cGVydGllczoKKyAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgICAgICsrZm91
bmRQcm9wZXJ0aWVzQ291bnQ7JykKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICB9
JykKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIH0nKQorCisgICAgICAgIGlmIHNob3Vs
ZF9jb3VudF9wcm9wZXJ0aWVzOgorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgaWYgKGZv
dW5kUHJvcGVydGllc0NvdW50ICE9IG9iamVjdC0+c2l6ZSgpKScpCisgICAgICAgICAgICBsaW5l
cy5hcHBlbmQoJyAgICAgICAgRkFUQUwoIlVuZXhwZWN0ZWQgcHJvcGVydGllcyBpbiBvYmplY3Q6
ICVzXFxuIiwgb2JqZWN0LT50b0pTT05TdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSk7JykKKyAgICAg
ICAgbGluZXMuYXBwZW5kKCd9JykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcjZW5kaWYgLy8gIUFT
U0VSVF9ESVNBQkxFRCcpCisgICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCisKKyAgICBk
ZWYgX2dlbmVyYXRlX2Fzc2VydGlvbl9mb3JfZW51bShzZWxmLCBlbnVtX21lbWJlciwgb2JqZWN0
X2RlY2xhcmF0aW9uKToKKyAgICAgICAgbGluZXMgPSBbXQorICAgICAgICBsaW5lcy5hcHBlbmQo
JyNpZiAhQVNTRVJUX0RJU0FCTEVEJykKKyAgICAgICAgbGluZXMuYXBwZW5kKCd2b2lkICVzKElu
c3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUqIHZhbHVlKScgJSBHZW5lcmF0b3IuYXNzZXJ0aW9uX21l
dGhvZF9mb3JfdHlwZV9tZW1iZXIoZW51bV9tZW1iZXIsIG9iamVjdF9kZWNsYXJhdGlvbikpCisg
ICAgICAgIGxpbmVzLmFwcGVuZCgneycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIFdURjo6
U3RyaW5nIHM7JykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgYm9vbCBjYXN0X3JlcyA9IHZh
bHVlLT5hc1N0cmluZygmcyk7JykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgQVNTRVJUKGNh
c3RfcmVzKTsnKQorCisgICAgICAgIGFzc2VydF9jb25kaXRpb24gPSAnIHx8ICcuam9pbihbJ3Mg
PT0gIiVzIicgJSBlbnVtX3ZhbHVlIGZvciBlbnVtX3ZhbHVlIGluIGVudW1fbWVtYmVyLnR5cGUu
ZW51bV92YWx1ZXMoKV0pCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIEFTU0VSVCglcyk7JyAl
IGFzc2VydF9jb25kaXRpb24pCisgICAgICAgIGxpbmVzLmFwcGVuZCgnfScpCisgICAgICAgIGxp
bmVzLmFwcGVuZCgnI2VuZGlmIC8vICFBU1NFUlRfRElTQUJMRUQnKQorCisgICAgICAgIHJldHVy
biAnXG4nLmpvaW4obGluZXMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0b3IucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0b3IucHkKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGIy
M2E3OTJjNzQ2MWU0Y2NmMzJhNWM3YzdiNzRkNmM1ZDBlMzY5MwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRv
ci5weQpAQCAtMCwwICsxLDQ5NyBAQAorIyBDb3B5cmlnaHQgKGMpIDIwMTQgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKGMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisjIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworIyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisjIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCByZQorCitmcm9tIG1vZGVs
cyBpbXBvcnQgUHJpbWl0aXZlVHlwZSwgT2JqZWN0VHlwZSwgQXJyYXlUeXBlLCBFbnVtVHlwZSwg
QWxpYXNlZFR5cGUKKworbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2JhbCcpCisKKworZGVm
IHVjZmlyc3Qoc3RyKToKKyAgICByZXR1cm4gc3RyWzoxXS51cHBlcigpICsgc3RyWzE6XQorCitf
UFJJTUlUSVZFX1RPX0NQUF9OQU1FX01BUCA9IHsKKyAgICAnYm9vbGVhbic6ICdib29sJywKKyAg
ICAnaW50ZWdlcic6ICdpbnQnLAorICAgICdudW1iZXInOiAnZG91YmxlJywKKyAgICAnc3RyaW5n
JzogJ1N0cmluZycsCisgICAgJ29iamVjdCc6ICdJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCcs
CisgICAgJ2FueSc6ICdJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlJworfQorCisjIEZJWE1FOiBU
aGlzIHNob3VsZCBiZSBjb252ZXJ0ZWQgaW50byBhIHByb3BlcnR5IG9uIHRoZSBkb21haW4gaW4g
SlNPTi4KK19ET01BSU5fVE9fQ1BQX0dVQVJEX01BUCA9IHsKKyAgICAnRGF0YWJhc2UnOiAiRU5B
QkxFKFNRTF9EQVRBQkFTRSkiLAorICAgICdJbmRleGVkREInOiAiRU5BQkxFKElOREVYRURfREFU
QUJBU0UpIiwKKyAgICAnUmVwbGF5JzogIkVOQUJMRShXRUJfUkVQTEFZKSIsCit9CisKK19BTFdB
WVNfVVBQRVJDQVNFRF9FTlVNX1ZBTFVFX1NVQlNUUklOR1MgPSBzZXQoWydBUEknLCAnQ1NTJywg
J0RPTScsICdIVE1MJywgJ1hIUicsICdYTUwnXSkKKworIyBUaGVzZSBvYmplY3RzIGFyZSBidWls
dCBtYW51YWxseSBieSBjcmVhdGluZyBhbmQgc2V0dGluZyBJbnNwZWN0b3JWYWx1ZXMuCisjIEJl
Zm9yZSBzZW5kaW5nIHRoZXNlIG92ZXIgdGhlIHByb3RvY29sLCB0aGVpciBzaGFwZXMgYXJlIGNo
ZWNrZWQgYWdhaW5zdCB0aGUgc3BlY2lmaWNhdGlvbi4KKyMgU28sIGFueSB0eXBlcyByZWZlcmVu
Y2VkIGJ5IHRoZXNlIHR5cGVzIHJlcXVpcmUgZGVidWctb25seSBhc3NlcnRpb25zIHRoYXQgY2hl
Y2sgdmFsdWVzLgorIyBDYWxjdWxhdGluZyBuZWNlc3NhcnkgYXNzZXJ0aW9ucyBpcyBhbm5veWlu
ZywgYW5kIGFkZHMgYSBsb3Qgb2YgY29tcGxleGl0eSB0byB0aGUgZ2VuZXJhdG9yLgorCisjIEZJ
WE1FOiBUaGlzIHNob3VsZCBiZSBjb252ZXJ0ZWQgaW50byBhIHByb3BlcnR5IGluIEpTT04uCitf
VFlQRVNfTkVFRElOR19SVU5USU1FX0NBU1RTID0gc2V0KFsKKyAgICAiUnVudGltZS5SZW1vdGVP
YmplY3QiLAorICAgICJSdW50aW1lLlByb3BlcnR5RGVzY3JpcHRvciIsCisgICAgIlJ1bnRpbWUu
SW50ZXJuYWxQcm9wZXJ0eURlc2NyaXB0b3IiLAorICAgICJEZWJ1Z2dlci5GdW5jdGlvbkRldGFp
bHMiLAorICAgICJEZWJ1Z2dlci5DYWxsRnJhbWUiLAorICAgICJDYW52YXMuVHJhY2VMb2ciLAor
ICAgICJDYW52YXMuUmVzb3VyY2VJbmZvIiwKKyAgICAiQ2FudmFzLlJlc291cmNlU3RhdGUiLAor
ICAgICMgVGhpcyBzaG91bGQgYmUgYSB0ZW1wb3JhcnkgaGFjay4gVGltZWxpbmVFdmVudCBzaG91
bGQgYmUgY3JlYXRlZCB2aWEgZ2VuZXJhdGVkIEMrKyBBUEkuCisgICAgIlRpbWVsaW5lLlRpbWVs
aW5lRXZlbnQiLAorICAgICMgRm9yIHRlc3RpbmcgcHVycG9zZXMgb25seS4KKyAgICAiVGVzdC5U
eXBlTmVlZGluZ0Nhc3QiCitdKQorCisjIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBjb252ZXJ0ZWQg
aW50byBhIHByb3BlcnR5IGluIEpTT04uCitfVFlQRVNfV0lUSF9PUEVOX0ZJRUxEUyA9IHNldChb
CisgICAgIlRpbWVsaW5lLlRpbWVsaW5lRXZlbnQiLAorICAgICMgSW5zcGVjdG9yU3R5bGVTaGVl
dCBub3Qgb25seSBjcmVhdGVzIHRoaXMgcHJvcGVydHkgYnV0IHdhbnRzIHRvIHJlYWQgaXQgYW5k
IG1vZGlmeSBpdC4KKyAgICAiQ1NTLkNTU1Byb3BlcnR5IiwKKyAgICAjIEluc3BlY3RvclJlc291
cmNlQWdlbnQgbmVlZHMgdG8gdXBkYXRlIG1pbWUtdHlwZS4KKyAgICAiTmV0d29yay5SZXNwb25z
ZSIsCisgICAgIyBGb3IgdGVzdGluZyBwdXJwb3NlcyBvbmx5LgorICAgICJUZXN0Lk9wZW5QYXJh
bWV0ZXJCdW5kbGUiCitdKQorCisKK2NsYXNzIEdlbmVyYXRvcjoKKyAgICBkZWYgX19pbml0X18o
c2VsZiwgbW9kZWwsIGlucHV0X2ZpbGVwYXRoKToKKyAgICAgICAgc2VsZi5fbW9kZWwgPSBtb2Rl
bAorICAgICAgICBzZWxmLl9pbnB1dF9maWxlcGF0aCA9IGlucHV0X2ZpbGVwYXRoCisKKyAgICBk
ZWYgbW9kZWwoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9tb2RlbAorCisgICAgZGVmIGRv
bWFpbnNfdG9fZ2VuZXJhdGUoc2VsZik6CisgICAgICAgIHJldHVybiBmaWx0ZXIobGFtYmRhIGRv
bWFpbjogbm90IGRvbWFpbi5pc19zdXBwbGVtZW50YWwsIHNlbGYubW9kZWwoKS5kb21haW5zKQor
CisgICAgIyBUaGVzZSB0d28gbWV0aG9kcyBhcmUgb3ZlcnJpZGRlbiBieSBzdWJjbGFzc2VzLgor
ICAgIGRlZiBnZW5lcmF0ZV9vdXRwdXQoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBv
dXRwdXRfZmlsZW5hbWUoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBlbmNvZGluZ19m
b3JfZW51bV92YWx1ZShzZWxmLCBlbnVtX3ZhbHVlKToKKyAgICAgICAgaWYgbm90IGhhc2F0dHIo
c2VsZiwgIl9hc3NpZ25lZF9lbnVtX3ZhbHVlcyIpOgorICAgICAgICAgICAgc2VsZi5fdHJhdmVy
c2VfYW5kX2Fzc2lnbl9lbnVtX3ZhbHVlcygpCisKKyAgICAgICAgcmV0dXJuIHNlbGYuX2VudW1f
dmFsdWVfZW5jb2RpbmdzW2VudW1fdmFsdWVdCisKKyAgICBkZWYgYXNzaWduZWRfZW51bV92YWx1
ZXMoc2VsZik6CisgICAgICAgIGlmIG5vdCBoYXNhdHRyKHNlbGYsICJfYXNzaWduZWRfZW51bV92
YWx1ZXMiKToKKyAgICAgICAgICAgIHNlbGYuX3RyYXZlcnNlX2FuZF9hc3NpZ25fZW51bV92YWx1
ZXMoKQorCisgICAgICAgIHJldHVybiBzZWxmLl9hc3NpZ25lZF9lbnVtX3ZhbHVlc1s6XSAgIyBT
bGljZS4KKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgdHlwZV9uZWVkc19ydW50aW1lX2Nh
c3RzKF90eXBlKToKKyAgICAgICAgcmV0dXJuIF90eXBlLnF1YWxpZmllZF9uYW1lKCkgaW4gX1RZ
UEVTX05FRURJTkdfUlVOVElNRV9DQVNUUworCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiB0
eXBlX2hhc19vcGVuX2ZpZWxkcyhfdHlwZSk6CisgICAgICAgIHJldHVybiBfdHlwZS5xdWFsaWZp
ZWRfbmFtZSgpIGluIF9UWVBFU19XSVRIX09QRU5fRklFTERTCisKKyAgICBkZWYgdHlwZV9uZWVk
c19zaGFwZV9hc3NlcnRpb25zKHNlbGYsIF90eXBlKToKKyAgICAgICAgaWYgbm90IGhhc2F0dHIo
c2VsZiwgIl90eXBlc19uZWVkaW5nX3NoYXBlX2Fzc2VydGlvbnMiKToKKyAgICAgICAgICAgIHNl
bGYuY2FsY3VsYXRlX3R5cGVzX3JlcXVpcmluZ19zaGFwZV9hc3NlcnRpb25zKHNlbGYubW9kZWwo
KS5kb21haW5zKQorCisgICAgICAgIHJldHVybiBfdHlwZSBpbiBzZWxmLl90eXBlc19uZWVkaW5n
X3NoYXBlX2Fzc2VydGlvbnMKKworICAgIGRlZiBhbGxfdHlwZXNfbmVlZGluZ19zaGFwZV9hc3Nl
cnRpb25zKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fdHlwZXNfbmVlZGluZ19zaGFwZV9h
c3NlcnRpb25zCisKKyAgICAjIFRvIHJlc3RyaWN0IHRoZSBkb21haW5zIG92ZXIgd2hpY2ggd2Ug
Y29tcHV0ZSB0eXBlcyBuZWVkaW5nIGFzc2VydGlvbnMsIGNhbGwgdGhpcyBtZXRob2QKKyAgICAj
IGJlZm9yZSBnZW5lcmF0aW5nIGFueSBvdXRwdXQgd2l0aCB0aGUgZGVzaXJlZCBkb21haW5zIHBh
cmFtZXRlci4gVGhlIGNvbXB1dGVkCisgICAgIyBzZXQgb2YgdHlwZXMgd2lsbCBub3QgYmUgYXV0
b21hdGljYWxseSByZWdlbmVyYXRlZCBvbiBzdWJzZXF1ZW50IGNhbGxzIHRvCisgICAgIyBHZW5l
cmF0b3IudHlwZXNfbmVlZGluZ19zaGFwZV9hc3NlcnRpb25zKCkuCisgICAgZGVmIGNhbGN1bGF0
ZV90eXBlc19yZXF1aXJpbmdfc2hhcGVfYXNzZXJ0aW9ucyhzZWxmLCBkb21haW5zKToKKyAgICAg
ICAgZG9tYWluX25hbWVzID0gbWFwKGxhbWJkYSBkb21haW46IGRvbWFpbi5kb21haW5fbmFtZSwg
ZG9tYWlucykKKyAgICAgICAgbG9nLmRlYnVnKCI+IENhbGN1bGF0aW5nIHR5cGVzIHRoYXQgbmVl
ZCBzaGFwZSBhc3NlcnRpb25zIChlbGlnaWJsZSBkb21haW5zOiAlcykiICUgIiwgIi5qb2luKGRv
bWFpbl9uYW1lcykpCisKKyAgICAgICAgIyBNdXRhdGVzIHRoZSBwYXNzZWQtaW4gc2V0OyB0aGlz
IHNpbXBsaWZpZXMgY2hlY2tzIHRvIHByZXZlbnQgaW5maW5pdGUgcmVjdXJzaW9uLgorICAgICAg
ICBkZWYgZ2F0aGVyX3RyYW5zaXRpdmVseV9yZWZlcmVuY2VkX3R5cGVzKHR5cGUsIGdhdGhlcmVk
X3R5cGVzKToKKyAgICAgICAgICAgIGlmIHR5cGUgaW4gZ2F0aGVyZWRfdHlwZXM6CisgICAgICAg
ICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodHlwZSwgT2JqZWN0
VHlwZSk6CisgICAgICAgICAgICAgICAgbG9nLmRlYnVnKCI+IEFkZGluZyB0eXBlICVzIHRvIGxp
c3Qgb2YgdHlwZXMgbmVlZGluZyBzaGFwZSBhc3NlcnRpb25zLiIgJSB0eXBlLnF1YWxpZmllZF9u
YW1lKCkpCisgICAgICAgICAgICAgICAgZ2F0aGVyZWRfdHlwZXMuYWRkKHR5cGUpCisgICAgICAg
ICAgICAgICAgZm9yIHR5cGVfbWVtYmVyIGluIHR5cGUubWVtYmVyczoKKyAgICAgICAgICAgICAg
ICAgICAgZ2F0aGVyX3RyYW5zaXRpdmVseV9yZWZlcmVuY2VkX3R5cGVzKHR5cGVfbWVtYmVyLnR5
cGUsIGdhdGhlcmVkX3R5cGVzKQorICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHR5cGUsIEVu
dW1UeXBlKToKKyAgICAgICAgICAgICAgICBsb2cuZGVidWcoIj4gQWRkaW5nIHR5cGUgJXMgdG8g
bGlzdCBvZiB0eXBlcyBuZWVkaW5nIHNoYXBlIGFzc2VydGlvbnMuIiAlIHR5cGUucXVhbGlmaWVk
X25hbWUoKSkKKyAgICAgICAgICAgICAgICBnYXRoZXJlZF90eXBlcy5hZGQodHlwZSkKKyAgICAg
ICAgICAgIGVsaWYgaXNpbnN0YW5jZSh0eXBlLCBBbGlhc2VkVHlwZSk6CisgICAgICAgICAgICAg
ICAgZ2F0aGVyX3RyYW5zaXRpdmVseV9yZWZlcmVuY2VkX3R5cGVzKHR5cGUuYWxpYXNlZF90eXBl
LCBnYXRoZXJlZF90eXBlcykKKyAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh0eXBlLCBBcnJh
eVR5cGUpOgorICAgICAgICAgICAgICAgIGdhdGhlcl90cmFuc2l0aXZlbHlfcmVmZXJlbmNlZF90
eXBlcyh0eXBlLmVsZW1lbnRfdHlwZSwgZ2F0aGVyZWRfdHlwZXMpCisKKyAgICAgICAgZm91bmRf
dHlwZXMgPSBzZXQoKQorICAgICAgICBmb3IgZG9tYWluIGluIGRvbWFpbnM6CisgICAgICAgICAg
ICBmb3IgZGVjbGFyYXRpb24gaW4gZG9tYWluLnR5cGVfZGVjbGFyYXRpb25zOgorICAgICAgICAg
ICAgICAgIGlmIGRlY2xhcmF0aW9uLnR5cGUucXVhbGlmaWVkX25hbWUoKSBpbiBfVFlQRVNfTkVF
RElOR19SVU5USU1FX0NBU1RTOgorICAgICAgICAgICAgICAgICAgICBsb2cuZGVidWcoIj4gR2F0
aGVyaW5nIHR5cGVzIHJlZmVyZW5jZWQgYnkgJXMgdG8gZ2VuZXJhdGUgc2hhcGUgYXNzZXJ0aW9u
cy4iICUgZGVjbGFyYXRpb24udHlwZS5xdWFsaWZpZWRfbmFtZSgpKQorICAgICAgICAgICAgICAg
ICAgICBnYXRoZXJfdHJhbnNpdGl2ZWx5X3JlZmVyZW5jZWRfdHlwZXMoZGVjbGFyYXRpb24udHlw
ZSwgZm91bmRfdHlwZXMpCisKKyAgICAgICAgc2VsZi5fdHlwZXNfbmVlZGluZ19zaGFwZV9hc3Nl
cnRpb25zID0gZm91bmRfdHlwZXMKKworICAgICMgUHJpdmF0ZSBoZWxwZXIgaW5zdGFuY2UgbWV0
aG9kcy4KKyAgICBkZWYgX3RyYXZlcnNlX2FuZF9hc3NpZ25fZW51bV92YWx1ZXMoc2VsZik6Cisg
ICAgICAgIHNlbGYuX2VudW1fdmFsdWVfZW5jb2RpbmdzID0ge30KKyAgICAgICAgc2VsZi5fYXNz
aWduZWRfZW51bV92YWx1ZXMgPSBbXQorICAgICAgICBhbGxfdHlwZXMgPSBbXQorCisgICAgICAg
IGRvbWFpbnMgPSBzZWxmLmRvbWFpbnNfdG9fZ2VuZXJhdGUoKQorCisgICAgICAgIGZvciBfZG9t
YWluIGluIGRvbWFpbnM6CisgICAgICAgICAgICBmb3IgX3R5cGVfZGVjbGFyYXRpb24gaW4gX2Rv
bWFpbi50eXBlX2RlY2xhcmF0aW9uczoKKyAgICAgICAgICAgICAgICBhbGxfdHlwZXMuYXBwZW5k
KF90eXBlX2RlY2xhcmF0aW9uLnR5cGUpCisgICAgICAgICAgICAgICAgZm9yIF90eXBlX21lbWJl
ciBpbiBfdHlwZV9kZWNsYXJhdGlvbi50eXBlX21lbWJlcnM6CisgICAgICAgICAgICAgICAgICAg
IGFsbF90eXBlcy5hcHBlbmQoX3R5cGVfbWVtYmVyLnR5cGUpCisKKyAgICAgICAgZm9yIF9kb21h
aW4gaW4gZG9tYWluczoKKyAgICAgICAgICAgIGZvciBfZXZlbnQgaW4gX2RvbWFpbi5ldmVudHM6
CisgICAgICAgICAgICAgICAgYWxsX3R5cGVzLmV4dGVuZChbcGFyYW1ldGVyLnR5cGUgZm9yIHBh
cmFtZXRlciBpbiBfZXZlbnQuZXZlbnRfcGFyYW1ldGVyc10pCisKKyAgICAgICAgZm9yIF9kb21h
aW4gaW4gZG9tYWluczoKKyAgICAgICAgICAgIGZvciBfY29tbWFuZCBpbiBfZG9tYWluLmNvbW1h
bmRzOgorICAgICAgICAgICAgICAgIGFsbF90eXBlcy5leHRlbmQoW3BhcmFtZXRlci50eXBlIGZv
ciBwYXJhbWV0ZXIgaW4gX2NvbW1hbmQuY2FsbF9wYXJhbWV0ZXJzXSkKKyAgICAgICAgICAgICAg
ICBhbGxfdHlwZXMuZXh0ZW5kKFtwYXJhbWV0ZXIudHlwZSBmb3IgcGFyYW1ldGVyIGluIF9jb21t
YW5kLnJldHVybl9wYXJhbWV0ZXJzXSkKKworICAgICAgICBmb3IgX3R5cGUgaW4gYWxsX3R5cGVz
OgorICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKToKKyAgICAg
ICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgbWFwKHNlbGYuX2Fzc2lnbl9lbmNvZGlu
Z19mb3JfZW51bV92YWx1ZSwgX3R5cGUuZW51bV92YWx1ZXMoKSkKKworICAgIGRlZiBfYXNzaWdu
X2VuY29kaW5nX2Zvcl9lbnVtX3ZhbHVlKHNlbGYsIGVudW1fdmFsdWUpOgorICAgICAgICBpZiBl
bnVtX3ZhbHVlIGluIHNlbGYuX2VudW1fdmFsdWVfZW5jb2RpbmdzOgorICAgICAgICAgICAgcmV0
dXJuCisKKyAgICAgICAgc2VsZi5fZW51bV92YWx1ZV9lbmNvZGluZ3NbZW51bV92YWx1ZV0gPSBs
ZW4oc2VsZi5fYXNzaWduZWRfZW51bV92YWx1ZXMpCisgICAgICAgIHNlbGYuX2Fzc2lnbmVkX2Vu
dW1fdmFsdWVzLmFwcGVuZChlbnVtX3ZhbHVlKQorCisgICAgIyBNaXNjZWxsYW5lb3VzIHRleHQg
bWFuaXB1bGF0aW9uIHJvdXRpbmVzLgorICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgd3JhcF93
aXRoX2d1YXJkX2Zvcl9kb21haW4oZG9tYWluLCB0ZXh0KToKKyAgICAgICAgZ3VhcmQgPSBfRE9N
QUlOX1RPX0NQUF9HVUFSRF9NQVAuZ2V0KGRvbWFpbi5kb21haW5fbmFtZSwgTm9uZSkKKyAgICAg
ICAgaWYgZ3VhcmQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBsaW5lcyA9IFsKKyAgICAgICAg
ICAgICAgICAnI2lmICVzJyAlIGd1YXJkLAorICAgICAgICAgICAgICAgIHRleHQsCisgICAgICAg
ICAgICAgICAgJyNlbmRpZiAvLyAlcycgJSBndWFyZAorICAgICAgICAgICAgICAgIF0KKyAgICAg
ICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCisgICAgICAgIGVsc2U6CisgICAgICAgICAg
ICByZXR1cm4gdGV4dAorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBzdHlsaXplZF9uYW1l
X2Zvcl9lbnVtX3ZhbHVlKGVudW1fdmFsdWUpOgorICAgICAgICAjIEVudW0gdmFsdWVzIGNvdWxk
IGJlIGludGVnZXIgbGl0ZXJhbHMsIHNvIGRvbid0IHRyeSB0byBjb252ZXJ0IHRob3NlLgorICAg
ICAgICBpZiBub3QgaXNpbnN0YW5jZShlbnVtX3ZhbHVlLCAodW5pY29kZSwgc3RyKSk6CisgICAg
ICAgICAgICByZXR1cm4KKworICAgICAgICByZWdleCA9ICcoXHcqKSglcykoXHcqKScgJSAifCIu
am9pbihfQUxXQVlTX1VQUEVSQ0FTRURfRU5VTV9WQUxVRV9TVUJTVFJJTkdTKQorCisgICAgICAg
IGRlZiByZXBsYWNlQ2FsbGJhY2sobWF0Y2gpOgorICAgICAgICAgICAgcmV0dXJuICIiLmpvaW4o
W21hdGNoLmdyb3VwKDEpLCBtYXRjaC5ncm91cCgyKS51cHBlcigpLCBtYXRjaC5ncm91cCgzKV0p
CisKKyAgICAgICAgIyBTcGxpdCBvbiBoeXBoZW4sIGludHJvZHVjZSBjYW1lbGNhc2UsIGFuZCBm
b3JjZSB1cHBlcmNhc2luZyBvZiBhY3Jvbnltcy4KKyAgICAgICAgc3Vid29yZHMgPSBtYXAobGFt
YmRhIHg6IHhbMF0udXBwZXIoKSArIHhbMTpdLCBlbnVtX3ZhbHVlLnNwbGl0KCctJykpCisgICAg
ICAgIHJldHVybiByZS5zdWIocmVnZXgsIHJlcGxhY2VDYWxsYmFjaywgIiIuam9pbihzdWJ3b3Jk
cyksIGZsYWdzPXJlLklHTk9SRUNBU0UpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGtl
eWVkX2dldF9tZXRob2RfZm9yX3R5cGUodHlwZSk6CisgICAgICAgIGlmIGlzaW5zdGFuY2UodHlw
ZSwgT2JqZWN0VHlwZSk6CisgICAgICAgICAgICByZXR1cm4gJ2dldE9iamVjdCcKKyAgICAgICAg
aWYgaXNpbnN0YW5jZSh0eXBlLCBBcnJheVR5cGUpOgorICAgICAgICAgICAgcmV0dXJuICdnZXRB
cnJheScKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKHR5cGUsIFByaW1pdGl2ZVR5cGUpOgorICAg
ICAgICAgICAgaWYgdHlwZS5yYXdfbmFtZSgpIGlzICdpbnRlZ2VyJzoKKyAgICAgICAgICAgICAg
ICByZXR1cm4gJ2dldEludCcKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0
dXJuICdnZXQnICsgdWNmaXJzdCh0eXBlLnJhd19uYW1lKCkpCisgICAgICAgIGVsaWYgaXNpbnN0
YW5jZSh0eXBlLCBBbGlhc2VkVHlwZSk6CisgICAgICAgICAgICByZXR1cm4gR2VuZXJhdG9yLmtl
eWVkX2dldF9tZXRob2RfZm9yX3R5cGUodHlwZS5hbGlhc2VkX3R5cGUpCisgICAgICAgIGVsaWYg
aXNpbnN0YW5jZSh0eXBlLCBFbnVtVHlwZSk6CisgICAgICAgICAgICByZXR1cm4gR2VuZXJhdG9y
LmtleWVkX2dldF9tZXRob2RfZm9yX3R5cGUodHlwZS5wcmltaXRpdmVfdHlwZSkKKworICAgIEBz
dGF0aWNtZXRob2QKKyAgICBkZWYga2V5ZWRfc2V0X21ldGhvZF9mb3JfdHlwZSh0eXBlKToKKyAg
ICAgICAgaWYgaXNpbnN0YW5jZSh0eXBlLCBPYmplY3RUeXBlKSBvciBpc2luc3RhbmNlKHR5cGUs
IEFycmF5VHlwZSk6CisgICAgICAgICAgICByZXR1cm4gJ3NldFZhbHVlJworICAgICAgICBlbGlm
IGlzaW5zdGFuY2UodHlwZSwgUHJpbWl0aXZlVHlwZSk6CisgICAgICAgICAgICBpZiB0eXBlLnJh
d19uYW1lKCkgaW4gWydpbnRlZ2VyJywgJ251bWJlciddOgorICAgICAgICAgICAgICAgIHJldHVy
biAnc2V0TnVtYmVyJworICAgICAgICAgICAgZWxpZiB0eXBlLnJhd19uYW1lKCkgaW4gWydhbnkn
XToKKyAgICAgICAgICAgICAgICByZXR1cm4gJ3NldFZhbHVlJworICAgICAgICAgICAgZWxzZToK
KyAgICAgICAgICAgICAgICByZXR1cm4gJ3NldCcgKyB1Y2ZpcnN0KHR5cGUucmF3X25hbWUoKSkK
KyAgICAgICAgZWxpZiBpc2luc3RhbmNlKHR5cGUsIEFsaWFzZWRUeXBlKToKKyAgICAgICAgICAg
IHJldHVybiBHZW5lcmF0b3Iua2V5ZWRfc2V0X21ldGhvZF9mb3JfdHlwZSh0eXBlLmFsaWFzZWRf
dHlwZSkKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKHR5cGUsIEVudW1UeXBlKToKKyAgICAgICAg
ICAgIHJldHVybiBHZW5lcmF0b3Iua2V5ZWRfc2V0X21ldGhvZF9mb3JfdHlwZSh0eXBlLnByaW1p
dGl2ZV90eXBlKQorCisgICAgIyBHZW5lcmF0ZSB0eXBlIHJlcHJlc2VudGF0aW9ucyBmb3IgdmFy
aW91cyBzaXR1YXRpb25zLgorICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgdHlwZV9idWlsZGVy
X3N0cmluZ19mb3JfdHlwZSh0eXBlKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZSh0eXBlLCBPYmpl
Y3RUeXBlKSBhbmQgbGVuKHR5cGUubWVtYmVycykgPT0gMDoKKyAgICAgICAgICAgIHJldHVybiAn
SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QnCisgICAgICAgIGlmIGlzaW5zdGFuY2UodHlwZSwg
KE9iamVjdFR5cGUsIEFsaWFzZWRUeXBlLCBFbnVtVHlwZSkpOgorICAgICAgICAgICAgcmV0dXJu
ICdJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjolczo6JXMnICUgKHR5cGUudHlwZV9kb21haW4oKS5k
b21haW5fbmFtZSwgdHlwZS5yYXdfbmFtZSgpKQorICAgICAgICBlbGlmIGlzaW5zdGFuY2UodHlw
ZSwgQXJyYXlUeXBlKToKKyAgICAgICAgICAgIHJldHVybiAnSW5zcGVjdG9yOjpUeXBlQnVpbGRl
cjo6QXJyYXk8JXM+JyAlIEdlbmVyYXRvci50eXBlX2J1aWxkZXJfc3RyaW5nX2Zvcl90eXBlKHR5
cGUuZWxlbWVudF90eXBlKQorICAgICAgICBlbGlmIGlzaW5zdGFuY2UodHlwZSwgUHJpbWl0aXZl
VHlwZSk6CisgICAgICAgICAgICByZXR1cm4gR2VuZXJhdG9yLmNwcF9uYW1lX2Zvcl9wcmltaXRp
dmVfdHlwZSh0eXBlKQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiB0eXBlX2J1aWxkZXJf
c3RyaW5nX2Zvcl90eXBlX21lbWJlcih0eXBlX21lbWJlciwgb2JqZWN0X2RlY2xhcmF0aW9uKToK
KyAgICAgICAgaWYgaXNpbnN0YW5jZSh0eXBlX21lbWJlci50eXBlLCBFbnVtVHlwZSkgYW5kIHR5
cGVfbWVtYmVyLnR5cGUuaXNfYW5vbnltb3VzOgorICAgICAgICAgICAgcmV0dXJuICc6Oicuam9p
bihbR2VuZXJhdG9yLnR5cGVfYnVpbGRlcl9zdHJpbmdfZm9yX3R5cGUob2JqZWN0X2RlY2xhcmF0
aW9uLnR5cGUpLCB1Y2ZpcnN0KHR5cGVfbWVtYmVyLm1lbWJlcl9uYW1lKV0pCisgICAgICAgIGVs
c2U6CisgICAgICAgICAgICByZXR1cm4gR2VuZXJhdG9yLnR5cGVfYnVpbGRlcl9zdHJpbmdfZm9y
X3R5cGUodHlwZV9tZW1iZXIudHlwZSkKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgdHlw
ZV9zdHJpbmdfZm9yX3VuY2hlY2tlZF9mb3JtYWxfaW5fcGFyYW1ldGVyKHBhcmFtZXRlcik6Cisg
ICAgICAgIF90eXBlID0gcGFyYW1ldGVyLnR5cGUKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlw
ZSwgQWxpYXNlZFR5cGUpOgorICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5hbGlhc2VkX3R5cGUg
ICMgRmFsbCB0aHJvdWdoIHRvIHByaW1pdGl2ZS4KKworICAgICAgICBpZiBpc2luc3RhbmNlKF90
eXBlLCBFbnVtVHlwZSk6CisgICAgICAgICAgICBfdHlwZSA9IF90eXBlLnByaW1pdGl2ZV90eXBl
ICAjIEZhbGwgdGhyb3VnaCB0byBwcmltaXRpdmUuCisKKyAgICAgICAgc2lnaWwgPSAnKicgaWYg
cGFyYW1ldGVyLmlzX29wdGlvbmFsIGVsc2UgJyYnCisgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5
cGUsIE9iamVjdFR5cGUpIG9yIF90eXBlLnF1YWxpZmllZF9uYW1lKCkgaXMgJ29iamVjdCc6Cisg
ICAgICAgICAgICByZXR1cm4gJ2NvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVj
dD4nICsgc2lnaWwKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKF90eXBlLCBBcnJheVR5cGUpOgor
ICAgICAgICAgICAgcmV0dXJuICdjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJh
eT4nICsgc2lnaWwKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKF90eXBlLCBQcmltaXRpdmVUeXBl
KToKKyAgICAgICAgICAgIGNwcF9uYW1lID0gR2VuZXJhdG9yLmNwcF9uYW1lX2Zvcl9wcmltaXRp
dmVfdHlwZShfdHlwZSkKKyAgICAgICAgICAgIGlmIHBhcmFtZXRlci5pc19vcHRpb25hbDoKKyAg
ICAgICAgICAgICAgICByZXR1cm4gJ2NvbnN0ICVzKicgJSBjcHBfbmFtZQorICAgICAgICAgICAg
ZWxpZiBfdHlwZS5yYXdfbmFtZSgpIGluIFsnc3RyaW5nJ106CisgICAgICAgICAgICAgICAgcmV0
dXJuICdjb25zdCAlcyYnICUgY3BwX25hbWUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGNwcF9uYW1lCisKKyAgICAgICAgcmV0dXJuICJ1bmtub3duX3VuY2hlY2tl
ZF9mb3JtYWxfaW5fcGFyYW1ldGVyX3R5cGUiCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVm
IHR5cGVfc3RyaW5nX2Zvcl9jaGVja2VkX2Zvcm1hbF9pbl9wYXJhbWV0ZXIocGFyYW1ldGVyKToK
KyAgICAgICAgcmV0dXJuIEdlbmVyYXRvci50eXBlX3N0cmluZ19mb3JfdHlwZV93aXRoX25hbWUo
cGFyYW1ldGVyLnR5cGUsIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwgcGFyYW1ldGVyLmlzX29w
dGlvbmFsKQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiB0eXBlX3N0cmluZ19mb3JfdHlw
ZV9tZW1iZXIobWVtYmVyKToKKyAgICAgICAgcmV0dXJuIEdlbmVyYXRvci50eXBlX3N0cmluZ19m
b3JfdHlwZV93aXRoX25hbWUobWVtYmVyLnR5cGUsIG1lbWJlci5tZW1iZXJfbmFtZSwgRmFsc2Up
CisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIHR5cGVfc3RyaW5nX2Zvcl90eXBlX3dpdGhf
bmFtZShfdHlwZSwgdHlwZV9uYW1lLCBpc19vcHRpb25hbCk6CisgICAgICAgIGlmIGlzaW5zdGFu
Y2UoX3R5cGUsIChBcnJheVR5cGUsIE9iamVjdFR5cGUpKToKKyAgICAgICAgICAgIHJldHVybiAn
UGFzc1JlZlB0cjwlcz4nICUgR2VuZXJhdG9yLnR5cGVfYnVpbGRlcl9zdHJpbmdfZm9yX3R5cGUo
X3R5cGUpCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShfdHlwZSwgQWxpYXNlZFR5cGUpOgorICAg
ICAgICAgICAgYnVpbGRlcl90eXBlID0gR2VuZXJhdG9yLnR5cGVfYnVpbGRlcl9zdHJpbmdfZm9y
X3R5cGUoX3R5cGUpCisgICAgICAgICAgICBpZiBpc19vcHRpb25hbDoKKyAgICAgICAgICAgICAg
ICByZXR1cm4gJ2NvbnN0ICVzKiBjb25zdCcgJSBidWlsZGVyX3R5cGUKKyAgICAgICAgICAgIGVs
aWYgX3R5cGUuYWxpYXNlZF90eXBlLnF1YWxpZmllZF9uYW1lKCkgaW4gWydpbnRlZ2VyJywgJ251
bWJlciddOgorICAgICAgICAgICAgICAgIHJldHVybiBHZW5lcmF0b3IuY3BwX25hbWVfZm9yX3By
aW1pdGl2ZV90eXBlKF90eXBlLmFsaWFzZWRfdHlwZSkKKyAgICAgICAgICAgIGVsaWYgX3R5cGUu
YWxpYXNlZF90eXBlLnF1YWxpZmllZF9uYW1lKCkgaW4gWydzdHJpbmcnXToKKyAgICAgICAgICAg
ICAgICByZXR1cm4gJ2NvbnN0ICVzJicgJSBidWlsZGVyX3R5cGUKKyAgICAgICAgICAgIGVsc2U6
CisgICAgICAgICAgICAgICAgcmV0dXJuIGJ1aWxkZXJfdHlwZQorICAgICAgICBlbGlmIGlzaW5z
dGFuY2UoX3R5cGUsIFByaW1pdGl2ZVR5cGUpOgorICAgICAgICAgICAgY3BwX25hbWUgPSBHZW5l
cmF0b3IuY3BwX25hbWVfZm9yX3ByaW1pdGl2ZV90eXBlKF90eXBlKQorICAgICAgICAgICAgaWYg
X3R5cGUucXVhbGlmaWVkX25hbWUoKSBpbiBbJ29iamVjdCddOgorICAgICAgICAgICAgICAgIHJl
dHVybiAnUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4nCisgICAgICAgICAg
ICBlbGlmIF90eXBlLnF1YWxpZmllZF9uYW1lKCkgaW4gWydhbnknXToKKyAgICAgICAgICAgICAg
ICByZXR1cm4gJ1Bhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4nCisgICAgICAg
ICAgICBlbGlmIGlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAgIHJldHVybiAnY29uc3QgJXMq
IGNvbnN0JyAlIGNwcF9uYW1lCisgICAgICAgICAgICBlbGlmIF90eXBlLnF1YWxpZmllZF9uYW1l
KCkgaW4gWydzdHJpbmcnXToKKyAgICAgICAgICAgICAgICByZXR1cm4gJ2NvbnN0ICVzJicgJSBj
cHBfbmFtZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gY3BwX25h
bWUKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKF90eXBlLCBFbnVtVHlwZSk6CisgICAgICAgICAg
ICBpZiBfdHlwZS5pc19hbm9ueW1vdXM6CisgICAgICAgICAgICAgICAgZW51bV90eXBlX25hbWUg
PSB1Y2ZpcnN0KHR5cGVfbmFtZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAg
ZW51bV90eXBlX25hbWUgPSAnSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6JXM6OiVzJyAlIChfdHlw
ZS50eXBlX2RvbWFpbigpLmRvbWFpbl9uYW1lLCBfdHlwZS5yYXdfbmFtZSgpKQorCisgICAgICAg
ICAgICBpZiBpc19vcHRpb25hbDoKKyAgICAgICAgICAgICAgICByZXR1cm4gJyVzKicgJSBlbnVt
X3R5cGVfbmFtZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gJyVz
JyAlIGVudW1fdHlwZV9uYW1lCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIHR5cGVfc3Ry
aW5nX2Zvcl9mb3JtYWxfb3V0X3BhcmFtZXRlcihwYXJhbWV0ZXIpOgorICAgICAgICBfdHlwZSA9
IHBhcmFtZXRlci50eXBlCisgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIChPYmplY3RUeXBl
LCBBcnJheVR5cGUpKToKKyAgICAgICAgICAgIHJldHVybiAnUmVmUHRyPCVzPiYnICUgR2VuZXJh
dG9yLnR5cGVfYnVpbGRlcl9zdHJpbmdfZm9yX3R5cGUoX3R5cGUpCisgICAgICAgIGVsaWYgaXNp
bnN0YW5jZShfdHlwZSwgQWxpYXNlZFR5cGUpOgorICAgICAgICAgICAgYnVpbGRlcl90eXBlID0g
R2VuZXJhdG9yLnR5cGVfYnVpbGRlcl9zdHJpbmdfZm9yX3R5cGUoX3R5cGUpCisgICAgICAgICAg
ICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6CisgICAgICAgICAgICAgICAgcmV0dXJuICdjb25z
dCAlcyogY29uc3QnICUgYnVpbGRlcl90eXBlCisgICAgICAgICAgICBlbGlmIF90eXBlLmFsaWFz
ZWRfdHlwZS5xdWFsaWZpZWRfbmFtZSgpIGluIFsnaW50ZWdlcicsICdudW1iZXInXToKKyAgICAg
ICAgICAgICAgICByZXR1cm4gR2VuZXJhdG9yLmNwcF9uYW1lX2Zvcl9wcmltaXRpdmVfdHlwZShf
dHlwZS5hbGlhc2VkX3R5cGUpICsgJyonCisgICAgICAgICAgICBlbGlmIF90eXBlLmFsaWFzZWRf
dHlwZS5xdWFsaWZpZWRfbmFtZSgpIGluIFsnc3RyaW5nJ106CisgICAgICAgICAgICAgICAgcmV0
dXJuICclcyonICUgYnVpbGRlcl90eXBlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAg
ICAgIHJldHVybiBidWlsZGVyX3R5cGUKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKF90eXBlLCBQ
cmltaXRpdmVUeXBlKToKKyAgICAgICAgICAgIGNwcF9uYW1lID0gR2VuZXJhdG9yLmNwcF9uYW1l
X2Zvcl9wcmltaXRpdmVfdHlwZShfdHlwZSkKKyAgICAgICAgICAgIGlmIHBhcmFtZXRlci5pc19v
cHRpb25hbDoKKyAgICAgICAgICAgICAgICByZXR1cm4gIkluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6
Ok9wdE91dHB1dDwlcz4qIiAlIGNwcF9uYW1lCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAg
ICAgICAgIHJldHVybiAnJXMqJyAlIGNwcF9uYW1lCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShf
dHlwZSwgRW51bVR5cGUpOgorICAgICAgICAgICAgaWYgX3R5cGUuaXNfYW5vbnltb3VzOgorICAg
ICAgICAgICAgICAgIHJldHVybiAnSW5zcGVjdG9yJXNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6
OiVzKicgJSAoX3R5cGUudHlwZV9kb21haW4oKS5kb21haW5fbmFtZSwgdWNmaXJzdChwYXJhbWV0
ZXIucGFyYW1ldGVyX25hbWUpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gJ0luc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OiVzOjolcyonICUgKF90eXBlLnR5cGVfZG9t
YWluKCkuZG9tYWluX25hbWUsIF90eXBlLnJhd19uYW1lKCkpCisKKyAgICAgICAgcmV0dXJuICJ1
bmtub3duX2Zvcm1hbF9vdXRfcGFyYW1ldGVyX3R5cGUiCisKKyAgICAjIEZJWE1FOiB0aGlzIGlz
IG9ubHkgc2xpZ2h0bHkgZGlmZmVyZW50IGZyb20gb3V0IHBhcmFtZXRlcnM7IHRoZXkgY291bGQg
YmUgdW5pZmllZC4KKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIHR5cGVfc3RyaW5nX2Zvcl9m
b3JtYWxfYXN5bmNfcGFyYW1ldGVyKHBhcmFtZXRlcik6CisgICAgICAgIF90eXBlID0gcGFyYW1l
dGVyLnR5cGUKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgQWxpYXNlZFR5cGUpOgorICAg
ICAgICAgICAgX3R5cGUgPSBfdHlwZS5hbGlhc2VkX3R5cGUgICMgRmFsbCB0aHJvdWdoLgorCisg
ICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKToKKyAgICAgICAgICAgIF90eXBl
ID0gX3R5cGUucHJpbWl0aXZlX3R5cGUgICMgRmFsbCB0aHJvdWdoLgorCisgICAgICAgIGlmIGlz
aW5zdGFuY2UoX3R5cGUsIChPYmplY3RUeXBlLCBBcnJheVR5cGUpKToKKyAgICAgICAgICAgIHJl
dHVybiAnUGFzc1JlZlB0cjwlcz4nICUgR2VuZXJhdG9yLnR5cGVfYnVpbGRlcl9zdHJpbmdfZm9y
X3R5cGUoX3R5cGUpCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShfdHlwZSwgUHJpbWl0aXZlVHlw
ZSk6CisgICAgICAgICAgICBjcHBfbmFtZSA9IEdlbmVyYXRvci5jcHBfbmFtZV9mb3JfcHJpbWl0
aXZlX3R5cGUoX3R5cGUpCisgICAgICAgICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6Cisg
ICAgICAgICAgICAgICAgcmV0dXJuICJJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8
JXM+KiIgJSBjcHBfbmFtZQorICAgICAgICAgICAgZWxpZiBfdHlwZS5xdWFsaWZpZWRfbmFtZSgp
IGluIFsnaW50ZWdlcicsICdudW1iZXInXToKKyAgICAgICAgICAgICAgICByZXR1cm4gR2VuZXJh
dG9yLmNwcF9uYW1lX2Zvcl9wcmltaXRpdmVfdHlwZShfdHlwZSkKKyAgICAgICAgICAgIGVsaWYg
X3R5cGUucXVhbGlmaWVkX25hbWUoKSBpbiBbJ3N0cmluZyddOgorICAgICAgICAgICAgICAgIHJl
dHVybiAnY29uc3QgJXMmJyAlIGNwcF9uYW1lCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAg
ICAgICAgIHJldHVybiBjcHBfbmFtZQorCisgICAgICAgIHJldHVybiAidW5rbm93bl9mb3JtYWxf
YXN5bmNfcGFyYW1ldGVyX3R5cGUiCisKKyAgICAjIEluLXBhcmFtZXRlcnMgZG9uJ3QgdXNlIGJ1
aWxkZXIgdHlwZXMsIGJlY2F1c2UgdGhleSBjb3VsZCBiZSBwYXNzZWQKKyAgICAjICJvcGVuIHR5
cGVzIiB0aGF0IGFyZSBtYW51YWxseSBjb25zdHJ1Y3RlZCBvdXQgb2YgSW5zcGVjdG9yT2JqZWN0
cy4KKworICAgICMgRklYTUU6IE9ubHkgcGFyYW1ldGVycyB0aGF0IGFyZSBhY3R1YWxseSBvcGVu
IHR5cGVzIHNob3VsZCBuZWVkIG5vbi1idWlsZGVyIHBhcmFtZXRlciB0eXBlcy4KKyAgICBAc3Rh
dGljbWV0aG9kCisgICAgZGVmIHR5cGVfc3RyaW5nX2Zvcl9zdGFja19pbl9wYXJhbWV0ZXIocGFy
YW1ldGVyKToKKyAgICAgICAgX3R5cGUgPSBwYXJhbWV0ZXIudHlwZQorICAgICAgICBpZiBpc2lu
c3RhbmNlKF90eXBlLCBBbGlhc2VkVHlwZSk6CisgICAgICAgICAgICBfdHlwZSA9IF90eXBlLmFs
aWFzZWRfdHlwZSAgIyBGYWxsIHRocm91Z2guCisKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlw
ZSwgRW51bVR5cGUpOgorICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5wcmltaXRpdmVfdHlwZSAg
IyBGYWxsIHRocm91Z2guCisKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgT2JqZWN0VHlw
ZSk6CisgICAgICAgICAgICByZXR1cm4gIlJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVj
dD4iCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShfdHlwZSwgQXJyYXlUeXBlKToKKyAgICAgICAg
ICAgIHJldHVybiAiUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXk+IgorICAgICAgICBl
bGlmIGlzaW5zdGFuY2UoX3R5cGUsIFByaW1pdGl2ZVR5cGUpOgorICAgICAgICAgICAgY3BwX25h
bWUgPSBHZW5lcmF0b3IuY3BwX25hbWVfZm9yX3ByaW1pdGl2ZV90eXBlKF90eXBlKQorICAgICAg
ICAgICAgaWYgX3R5cGUucXVhbGlmaWVkX25hbWUoKSBpbiBbJ2FueScsICdvYmplY3QnXToKKyAg
ICAgICAgICAgICAgICByZXR1cm4gIlJlZlB0cjwlcz4iICUgR2VuZXJhdG9yLmNwcF9uYW1lX2Zv
cl9wcmltaXRpdmVfdHlwZShfdHlwZSkKKyAgICAgICAgICAgIGVsaWYgcGFyYW1ldGVyLmlzX29w
dGlvbmFsIGFuZCBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpIG5vdCBpbiBbJ2Jvb2xlYW4nLCAnc3Ry
aW5nJywgJ2ludGVnZXInXToKKyAgICAgICAgICAgICAgICByZXR1cm4gIkluc3BlY3Rvcjo6VHlw
ZUJ1aWxkZXI6Ok9wdE91dHB1dDwlcz4iICUgY3BwX25hbWUKKyAgICAgICAgICAgIGVsc2U6Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGNwcF9uYW1lCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAg
ZGVmIHR5cGVfc3RyaW5nX2Zvcl9zdGFja19vdXRfcGFyYW1ldGVyKHBhcmFtZXRlcik6CisgICAg
ICAgIF90eXBlID0gcGFyYW1ldGVyLnR5cGUKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwg
KEFycmF5VHlwZSwgT2JqZWN0VHlwZSkpOgorICAgICAgICAgICAgcmV0dXJuICdSZWZQdHI8JXM+
JyAlIEdlbmVyYXRvci50eXBlX2J1aWxkZXJfc3RyaW5nX2Zvcl90eXBlKF90eXBlKQorICAgICAg
ICBlbGlmIGlzaW5zdGFuY2UoX3R5cGUsIEFsaWFzZWRUeXBlKToKKyAgICAgICAgICAgIHJldHVy
biAnJXMnICUgR2VuZXJhdG9yLnR5cGVfYnVpbGRlcl9zdHJpbmdfZm9yX3R5cGUoX3R5cGUpCisg
ICAgICAgIGVsaWYgaXNpbnN0YW5jZShfdHlwZSwgUHJpbWl0aXZlVHlwZSk6CisgICAgICAgICAg
ICBjcHBfbmFtZSA9IEdlbmVyYXRvci5jcHBfbmFtZV9mb3JfcHJpbWl0aXZlX3R5cGUoX3R5cGUp
CisgICAgICAgICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6CisgICAgICAgICAgICAgICAg
cmV0dXJuICJJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8JXM+IiAlIGNwcF9uYW1l
CisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBjcHBfbmFtZQorICAg
ICAgICBlbGlmIGlzaW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKToKKyAgICAgICAgICAgIGlmIF90
eXBlLmlzX2Fub255bW91czoKKyAgICAgICAgICAgICAgICByZXR1cm4gJ0luc3BlY3RvciVzQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyOjolcycgJSAoX3R5cGUudHlwZV9kb21haW4oKS5kb21haW5f
bmFtZSwgdWNmaXJzdChwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpKQorICAgICAgICAgICAgZWxz
ZToKKyAgICAgICAgICAgICAgICByZXR1cm4gJ0luc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OiVzOjol
cycgJSAoX3R5cGUudHlwZV9kb21haW4oKS5kb21haW5fbmFtZSwgX3R5cGUucmF3X25hbWUoKSkK
KworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgYXNzZXJ0aW9uX21ldGhvZF9mb3JfdHlwZV9t
ZW1iZXIodHlwZV9tZW1iZXIsIG9iamVjdF9kZWNsYXJhdGlvbik6CisKKyAgICAgICAgZGVmIGFz
c2VydGlvbl9tZXRob2RfZm9yX3R5cGUoX3R5cGUpOgorICAgICAgICAgICAgcmV0dXJuICdCaW5k
aW5nVHJhaXRzPCVzPjo6YXNzZXJ0Q29ycmVjdFZhbHVlJyAlIEdlbmVyYXRvci50eXBlX2J1aWxk
ZXJfc3RyaW5nX2Zvcl90eXBlKF90eXBlKQorCisgICAgICAgIGlmIGlzaW5zdGFuY2UodHlwZV9t
ZW1iZXIudHlwZSwgQWxpYXNlZFR5cGUpOgorICAgICAgICAgICAgcmV0dXJuIGFzc2VydGlvbl9t
ZXRob2RfZm9yX3R5cGUodHlwZV9tZW1iZXIudHlwZS5hbGlhc2VkX3R5cGUpCisgICAgICAgIGVs
aWYgaXNpbnN0YW5jZSh0eXBlX21lbWJlci50eXBlLCBFbnVtVHlwZSkgYW5kIHR5cGVfbWVtYmVy
LnR5cGUuaXNfYW5vbnltb3VzOgorICAgICAgICAgICAgcmV0dXJuICdCaW5kaW5nVHJhaXRzPCVz
Pjo6YXNzZXJ0Q29ycmVjdFZhbHVlJyAlIEdlbmVyYXRvci50eXBlX2J1aWxkZXJfc3RyaW5nX2Zv
cl90eXBlX21lbWJlcih0eXBlX21lbWJlciwgb2JqZWN0X2RlY2xhcmF0aW9uKQorICAgICAgICBl
bHNlOgorICAgICAgICAgICAgcmV0dXJuIGFzc2VydGlvbl9tZXRob2RfZm9yX3R5cGUodHlwZV9t
ZW1iZXIudHlwZSkKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgY3BwX25hbWVfZm9yX3By
aW1pdGl2ZV90eXBlKHR5cGUpOgorICAgICAgICByZXR1cm4gX1BSSU1JVElWRV9UT19DUFBfTkFN
RV9NQVAuZ2V0KHR5cGUucmF3X25hbWUoKSkKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYg
anNfbmFtZV9mb3JfcGFyYW1ldGVyX3R5cGUodHlwZSk6CisgICAgICAgIGlmIGlzaW5zdGFuY2Uo
dHlwZSwgKEFycmF5VHlwZSwgT2JqZWN0VHlwZSkpOgorICAgICAgICAgICAgcmV0dXJuICdvYmpl
Y3QnCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh0eXBlLCBBbGlhc2VkVHlwZSk6CisgICAgICAg
ICAgICByZXR1cm4gR2VuZXJhdG9yLmpzX25hbWVfZm9yX3BhcmFtZXRlcl90eXBlKHR5cGUuYWxp
YXNlZF90eXBlKQorICAgICAgICBlbGlmIGlzaW5zdGFuY2UodHlwZSwgRW51bVR5cGUpOgorICAg
ICAgICAgICAgcmV0dXJuIEdlbmVyYXRvci5qc19uYW1lX2Zvcl9wYXJhbWV0ZXJfdHlwZSh0eXBl
LnByaW1pdGl2ZV90eXBlKQorICAgICAgICBlbGlmIGlzaW5zdGFuY2UodHlwZSwgUHJpbWl0aXZl
VHlwZSk6CisgICAgICAgICAgICBpZiB0eXBlLnF1YWxpZmllZF9uYW1lKCkgaW4gWydvYmplY3Qn
LCAnYW55J106CisgICAgICAgICAgICAgICAgcmV0dXJuICdvYmplY3QnCisgICAgICAgICAgICBl
bGlmIHR5cGUucXVhbGlmaWVkX25hbWUoKSBpbiBbJ2ludGVnZXInLCAnbnVtYmVyJ106CisgICAg
ICAgICAgICAgICAgcmV0dXJuICdudW1iZXInCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAg
ICAgICAgIHJldHVybiB0eXBlLnF1YWxpZmllZF9uYW1lKCkKKworICAgICMgRGVjaWRlIHdoZXRo
ZXIgY2VydGFpbiBoZWxwZXJzIGFyZSBuZWNlc2FyeSBpbiBhIHNpdHVhdGlvbi4KKyAgICBAc3Rh
dGljbWV0aG9kCisgICAgZGVmIHNob3VsZF91c2Vfd3JhcHBlcl9mb3JfcmV0dXJuX3R5cGUodHlw
ZSk6CisgICAgICAgIHJldHVybiBub3QgaXNpbnN0YW5jZSh0eXBlLCAoQXJyYXlUeXBlLCBPYmpl
Y3RUeXBlKSkKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgc2hvdWxkX3Bhc3NfYnlfY29w
eV9mb3JfcmV0dXJuX3R5cGUodHlwZSk6CisgICAgICAgIHJldHVybiBpc2luc3RhbmNlKHR5cGUs
IChBcnJheVR5cGUsIE9iamVjdFR5cGUpKSBvciAoaXNpbnN0YW5jZSh0eXBlLCAoUHJpbWl0aXZl
VHlwZSkpIGFuZCB0eXBlLnF1YWxpZmllZF9uYW1lKCkgPT0gIm9iamVjdCIpCisKKworY2xhc3Mg
RHVtbXlHZW5lcmF0b3IoR2VuZXJhdG9yKToKKyAgICBwYXNzCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0b3JfdGVtcGxh
dGVzLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4v
Z2VuZXJhdG9yX3RlbXBsYXRlcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42MDZiZDc1M2M2NGU2ZGQ1NjIxMDc4
ZWUwM2JhZGZmNjM4YTliNWU4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdG9yX3RlbXBsYXRlcy5weQpAQCAt
MCwwICsxLDI2MyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIENvcHlyaWdodCAoYykgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoYykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisjIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisj
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyMgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisjIEdlbmVyYXRvciB0ZW1wbGF0ZXMsIHdo
aWNoIGNhbiBiZSBmaWxsZWQgd2l0aCBzdHJpbmcuVGVtcGxhdGUuCisjIEZvbGxvd2luZyBhcmUg
Y2xhc3NlcyB0aGF0IGZpbGwgdGhlIHRlbXBsYXRlcyBmcm9tIHRoZSB0eXBlY2hlY2tlZCBtb2Rl
bC4KKworCitjbGFzcyBHZW5lcmF0b3JUZW1wbGF0ZXM6CisgICAgQ29weXJpZ2h0QmxvY2sgPSAo
CisgICAgIiIiLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSAke2lucHV0RmlsZW5hbWV9CisvLyBieSB0aGUgc2Ny
aXB0OiBKYXZhU2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySW5zcGVjdG9y
LnB5IiIiKQorCisgICAgQ3BwSGVhZGVyUHJlbHVkZSA9ICgKKyAgICAiIiIjaWZuZGVmICR7aGVh
ZGVyR3VhcmRTdHJpbmd9CisjZGVmaW5lICR7aGVhZGVyR3VhcmRTdHJpbmd9CisKKyNpZiBFTkFC
TEUoSU5TUEVDVE9SKQorCiske2luY2x1ZGVzfQorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwor
JHt0eXBlZGVmc30iIiIpCisKKyAgICBDcHBIZWFkZXJQb3N0bHVkZSA9ICgKKyAgICAiIiJ9IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyNl
bmRpZiAvLyAhZGVmaW5lZCgke2hlYWRlckd1YXJkU3RyaW5nfSkiIiIpCisKKyAgICBDcHBJbXBs
ZW1lbnRhdGlvblByZWx1ZGUgPSAoCisgICAgIiIiI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgJHtwcmltYXJ5SW5jbHVkZX0KKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyR7c2Vjb25k
YXJ5SW5jbHVkZXN9CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeyIiIikKKworICAgIENwcEltcGxl
bWVudGF0aW9uUG9zdGx1ZGUgPSAoCisgICAgIiIifSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisK
KyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorIiIiKQorCisgICAgQmFja2VuZERpc3BhdGNo
ZXJIZWFkZXJEb21haW5IYW5kbGVyRGVjbGFyYXRpb24gPSAoCisgICAgIiIiJHtjbGFzc0FuZEV4
cG9ydE1hY3JvfSBJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXJIYW5kbGVy
IHsKK3B1YmxpYzoKKyR7Y29tbWFuZERlY2xhcmF0aW9uc30KK3Byb3RlY3RlZDoKKyAgICB2aXJ0
dWFsIH5JbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCk7Cit9
OyIiIikKKworICAgIEJhY2tlbmREaXNwYXRjaGVySGVhZGVyRG9tYWluRGlzcGF0Y2hlckRlY2xh
cmF0aW9uID0gKAorICAgICIiIiR7Y2xhc3NBbmRFeHBvcnRNYWNyb30gSW5zcGVjdG9yJHtkb21h
aW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVj
dG9yU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPEluc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRl
KEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqLCBJbnNwZWN0b3Ike2RvbWFp
bk5hbWV9QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7CisgICAgdmlydHVhbCB2b2lkIGRpc3Bh
dGNoKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUGFzc1JlZlB0cjxJbnNwZWN0
b3I6Okluc3BlY3Rvck9iamVjdD4gbWVzc2FnZSkgb3ZlcnJpZGU7Ciske2NvbW1hbmREZWNsYXJh
dGlvbnN9Citwcml2YXRlOgorICAgIEluc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0
Y2hlcihJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiwgSW5zcGVjdG9yJHtk
b21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOworICAgIEluc3BlY3RvciR7ZG9t
YWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIG1fYWdlbnQ7Cit9OyIiIikKKworICAg
IEJhY2tlbmREaXNwYXRjaGVySGVhZGVyQXN5bmNDb21tYW5kRGVjbGFyYXRpb24gPSAoCisgICAg
IiIiICAgIGNsYXNzICR7Y2FsbGJhY2tOYW1lfSA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2UgeworICAgIHB1YmxpYzoKKyAgICAgICAg
JHtjYWxsYmFja05hbWV9KFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlcj4sIGludCBpZCk7CisgICAgICAgIHZvaWQgc2VuZFN1Y2Nlc3MoJHtvdXRQYXJhbWV0
ZXJzfSk7CisgICAgfTsKKyAgICB2aXJ0dWFsIHZvaWQgJHtjb21tYW5kTmFtZX0oJHtpblBhcmFt
ZXRlcnN9KSA9IDA7IiIiKQorCisgICAgQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvblNt
YWxsU3dpdGNoID0gKAorICAgICIiInZvaWQgSW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmRE
aXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFBh
c3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtZXNzYWdlKQoreworICAgIFJlZjxJbnNwZWN0b3Ik
e2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOworCiske2Rpc3Bh
dGNoQ2FzZXN9CisgICAgZWxzZQorICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQ
cm90b2NvbEVycm9yKCZjYWxsSWQsIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2RO
b3RGb3VuZCwgU3RyaW5nKCInIikgKyAiJHtkb21haW5OYW1lfSIgKyAnLicgKyBtZXRob2QgKyAi
JyB3YXMgbm90IGZvdW5kIik7Cit9IiIiKQorCisgICAgQmFja2VuZERpc3BhdGNoZXJJbXBsZW1l
bnRhdGlvbkxhcmdlU3dpdGNoID0gKAorIiIidm9pZCBJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFj
a2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIG1ldGhv
ZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1lc3NhZ2UpCit7CisgICAgUmVmPEluc3Bl
Y3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7CisKKyAg
ICB0eXBlZGVmIHZvaWQgKEluc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcjo6
KkNhbGxIYW5kbGVyKShsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmpl
Y3QmIG1lc3NhZ2UpOworICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIENhbGxIYW5kbGVyPiBE
aXNwYXRjaE1hcDsKKyAgICBERVBSRUNBVEVEX0RFRklORV9TVEFUSUNfTE9DQUwoRGlzcGF0Y2hN
YXAsIGRpc3BhdGNoTWFwLCAoKSk7CisgICAgaWYgKGRpc3BhdGNoTWFwLmlzRW1wdHkoKSkgewor
ICAgICAgICBzdGF0aWMgY29uc3Qgc3RydWN0IE1ldGhvZFRhYmxlIHsKKyAgICAgICAgICAgIGNv
bnN0IGNoYXIqIG5hbWU7CisgICAgICAgICAgICBDYWxsSGFuZGxlciBoYW5kbGVyOworICAgICAg
ICB9IGNvbW1hbmRzW10gPSB7Ciske2Rpc3BhdGNoQ2FzZXN9CisgICAgICAgIH07CisgICAgICAg
IHNpemVfdCBsZW5ndGggPSBXVEZfQVJSQVlfTEVOR1RIKGNvbW1hbmRzKTsKKyAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkKKyAgICAgICAgICAgIGRpc3BhdGNoTWFw
LmFkZChjb21tYW5kc1tpXS5uYW1lLCBjb21tYW5kc1tpXS5oYW5kbGVyKTsKKyAgICB9CisKKyAg
ICBIYXNoTWFwPFN0cmluZywgQ2FsbEhhbmRsZXI+OjppdGVyYXRvciBpdCA9IGRpc3BhdGNoTWFw
LmZpbmQobWV0aG9kKTsKKyAgICBpZiAoaXQgPT0gZGlzcGF0Y2hNYXAuZW5kKCkpIHsKKyAgICAg
ICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElkLCBJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsIFN0cmluZygiJyIpICsgIiR7
ZG9tYWluTmFtZX0iICsgJy4nICsgbWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgKCgqdGhpcykuKml0LT52YWx1ZSkoY2FsbElkLCAqbWVz
c2FnZS5nZXQoKSk7Cit9IiIiKQorCisgICAgQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlv
bkRvbWFpbkNvbnN0cnVjdG9yID0gKAorICAgICIiIlBhc3NSZWZQdHI8SW5zcGVjdG9yJHtkb21h
aW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyPiBJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERp
c3BhdGNoZXI6OmNyZWF0ZShJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3Bh
dGNoZXIsIEluc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFn
ZW50KQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW5zcGVjdG9yJHtkb21haW5OYW1lfUJh
Y2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyLCBhZ2VudCkpOworfQorCitJbnNwZWN0
b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXI6Okluc3BlY3RvciR7ZG9tYWluTmFtZX1C
YWNrZW5kRGlzcGF0Y2hlcihJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3Bh
dGNoZXIsIEluc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFn
ZW50KQorICAgIDogSW5zcGVjdG9yU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIoYmFja2Vu
ZERpc3BhdGNoZXIpCisgICAgLCBtX2FnZW50KGFnZW50KQoreworICAgIG1fYmFja2VuZERpc3Bh
dGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbihBU0NJSUxpdGVyYWwoIiR7ZG9tYWlu
TmFtZX0iKSwgdGhpcyk7Cit9IiIiKQorCisgICAgQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRh
dGlvblByZXBhcmVDb21tYW5kQXJndW1lbnRzID0gKAorIiIiICAgIFJlZlB0cjxJbnNwZWN0b3JB
cnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CisgICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gbWVzc2FnZS5nZXRPYmplY3Qo
QVNDSUlMaXRlcmFsKCJwYXJhbXMiKSk7CisgICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250
YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CisgICAgSW5zcGVjdG9yQXJyYXkqIHBy
b3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7Ciske2luUGFyYW1ldGVyRGVj
bGFyYXRpb25zfQorICAgIGlmIChwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKKyAgICAgICAg
U3RyaW5nIGVycm9yTWVzc2FnZSA9IFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBt
ZXRob2QgXCclc1wnIGNhbid0IGJlIHByb2Nlc3NlZCIsICIke2RvbWFpbk5hbWV9LiR7Y29tbWFu
ZE5hbWV9Iik7CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJy
b3IoJmNhbGxJZCwgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkludmFsaWRQYXJhbXMsIGVy
cm9yTWVzc2FnZSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyIiIikKKworICAgIEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25Bc3luY0Nv
bW1hbmQgPSAoCisiIiJJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyOjoke2NhbGxiYWNrTmFtZX06OiR7Y2FsbGJhY2tOYW1lfShQYXNzUmVmUHRyPEluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyPiBiYWNrZW5kRGlzcGF0Y2hlciwgaW50IGlkKSA6IEluc3BlY3Rv
cjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZShiYWNrZW5kRGlzcGF0
Y2hlciwgaWQpIHsgfQorCit2b2lkIEluc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXI6OiR7Y2FsbGJhY2tOYW1lfTo6c2VuZFN1Y2Nlc3MoJHtmb3JtYWxQYXJhbWV0
ZXJzfSkKK3sKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBqc29uTWVzc2FnZSA9IEluc3Bl
Y3Rvck9iamVjdDo6Y3JlYXRlKCk7Ciske291dFBhcmFtZXRlckFzc2lnbm1lbnRzfQorICAgIHNl
bmRJZkFjdGl2ZShqc29uTWVzc2FnZSwgRXJyb3JTdHJpbmcoKSk7Cit9IiIiKQorCisgICAgRnJv
bnRlbmREaXNwYXRjaGVyRG9tYWluRGlzcGF0Y2hlckRlY2xhcmF0aW9uID0gKAorIiIiJHtjbGFz
c0FuZEV4cG9ydE1hY3JvfSBJbnNwZWN0b3Ike2RvbWFpbk5hbWV9RnJvbnRlbmREaXNwYXRjaGVy
IHsKK3B1YmxpYzoKKyAgICBJbnNwZWN0b3Ike2RvbWFpbk5hbWV9RnJvbnRlbmREaXNwYXRjaGVy
KEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSA6IG1f
aW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyB9Cisk
e2V2ZW50RGVjbGFyYXRpb25zfQorcHJpdmF0ZToKKyAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwqIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOworfTsiIiIpCisKKyAgICBUeXBlQnVpbGRl
ckRlY2xhcmF0aW9uUHJlbHVkZSA9ICgKKyIiIiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CisgICAg
Y2xhc3MgQnVpbGRlciB7CisgICAgcHJpdmF0ZToKKyAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6
SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKKworICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4g
QnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7
CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8Lyoke29iamVjdFR5cGV9
Ki9JbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gcHRyKQorICAgICAgICB7CisgICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2lu
X25vbl9pbml0X3N0YXRlKTsKKyAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOworICAgICAgICB9
CisgICAgICAgIGZyaWVuZCBjbGFzcyAke29iamVjdFR5cGV9OworICAgIHB1YmxpYzoiIiIpCisK
KyAgICBUeXBlQnVpbGRlckRlY2xhcmF0aW9uUG9zdGx1ZGUgPSAoCisiIiIKKyAgICAgICAgb3Bl
cmF0b3IgUmVmUHRyPCR7b2JqZWN0VHlwZX0+JiAoKQorICAgICAgICB7CisgICAgICAgICAgICBD
T01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkp
OworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKCR7b2JqZWN0VHlwZX0pID09IHNp
emVvZihJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCksIGNhbm5vdF9jYXN0KTsKKyAgICAgICAg
ICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8JHtvYmplY3RUeXBlfT4qPigmbV9y
ZXN1bHQpOworICAgICAgICB9CisKKyAgICAgICAgUGFzc1JlZlB0cjwke29iamVjdFR5cGV9PiBy
ZWxlYXNlKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjwke29iamVjdFR5
cGV9PigqdGhpcykucmVsZWFzZSgpOworICAgICAgICB9CisgICAgfTsKKworICAgIC8qCisgICAg
ICogU3ludGhldGljIGNvbnN0cnVjdG9yOgorJHtjb25zdHJ1Y3RvckV4YW1wbGV9CisgICAgICov
CisgICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCisgICAgeworICAgICAg
ICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q6
OmNyZWF0ZSgpKTsKKyAgICB9CisgICAgdHlwZWRlZiBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpT
dHJ1Y3RJdGVtVHJhaXRzIEl0ZW1UcmFpdHM7IiIiKQorCisgICAgVHlwZUJ1aWxkZXJPYmplY3RS
dW50aW1lQ2FzdCA9ICgKKyIiIlBhc3NSZWZQdHI8JHtvYmplY3RUeXBlfT4gQmluZGluZ1RyYWl0
czwke29iamVjdFR5cGV9Pjo6cnVudGltZUNhc3QoUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3Bl
Y3RvclZhbHVlPiB2YWx1ZSkKK3sKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmpl
Y3Q+IG9iamVjdDsKKyAgICBib29sIGNhc3RSZXMgPSB2YWx1ZS0+YXNPYmplY3QoJm9iamVjdCk7
CisgICAgQVNTRVJUX1VOVVNFRChjYXN0UmVzLCBjYXN0UmVzKTsKKyNpZiAhQVNTRVJUX0RJU0FC
TEVECisgICAgQmluZGluZ1RyYWl0czwke29iamVjdFR5cGV9Pjo6YXNzZXJ0Q29ycmVjdFZhbHVl
KG9iamVjdC5nZXQoKSk7CisjZW5kaWYgIC8vICFBU1NFUlRfRElTQUJMRUQKKyAgICBDT01QSUxF
X0FTU0VSVChzaXplb2YoJHtvYmplY3RUeXBlfSkgPT0gc2l6ZW9mKEluc3BlY3Rvcjo6SW5zcGVj
dG9yT2JqZWN0QmFzZSksIHR5cGVfY2FzdF9wcm9ibGVtKTsKKyAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8JHtvYmplY3RUeXBlfSo+KHN0YXRpY19jYXN0PEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0
QmFzZSo+KG9iamVjdC5nZXQoKSkpOworfQorIiIiCispCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9tb2RlbHMucHkgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9tb2RlbHMucHkKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uOTgyODdlZDUxY2IyNDY2Mzc4MzMyYjQ3NGZhMjJlZDg4OWFjMTA3OQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2Vu
L21vZGVscy5weQpAQCAtMCwwICsxLDU3MCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisj
IENvcHlyaWdodCAoYykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENv
cHlyaWdodCAoYykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisjIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQg
bG9nZ2luZworCisjIFVzZSBhIGdsb2JhbCBsb2dnZXIsIHdoaWNoIG5vcm1hbGx5IG9ubHkgbG9n
cyBlcnJvcnMuCisjIEl0IGNhbiBiZSBjb25maWd1cmVkIHRvIGxvZyBkZWJ1ZyBtZXNzYWdlcyBm
cm9tIHRoZSBDTEkuCitsb2dnaW5nLmJhc2ljQ29uZmlnKGZvcm1hdD0nJShsZXZlbG5hbWUpczog
JShtZXNzYWdlKXMnLCBsZXZlbD1sb2dnaW5nLkVSUk9SKQorbG9nID0gbG9nZ2luZy5nZXRMb2dn
ZXIoJ2dsb2JhbCcpCisKKworX0ZSQU1FV09SS19DT05GSUdfTUFQID0geworICAgICJHbG9iYWwi
OiB7CisgICAgICAgICJwcmVmaXgiOiAiIiwKKyAgICB9LAorCisgICAgIldURiI6IHsKKyAgICAg
ICAgInByZWZpeCI6ICJXVEYiLAorICAgIH0sCisgICAgIkphdmFTY3JpcHRDb3JlIjogeworICAg
ICAgICAicHJlZml4IjogIkpTIiwKKyAgICAgICAgImV4cG9ydF9tYWNybyI6ICJKU19FWFBPUlRf
UFJJVkFURSIKKyAgICB9LAorICAgICJXZWJDb3JlIjogeworICAgICAgICAicHJlZml4IjogIldl
YiIsCisgICAgfSwKKyAgICAjIFVzZWQgZm9yIGNvZGUgZ2VuZXJhdG9yIHRlc3RzLgorICAgICJU
ZXN0IjogeworICAgICAgICAicHJlZml4IjogIlRlc3QiLAorICAgIH0KK30KKworCisjIEZJWE1F
OiBUaGVzZSBzaG91bGQgYmUgY29udmVydGVkIGludG8gSlNPTiBwcm9wZXJ0aWVzLCBvciByZW5h
bWVkLgorX1RZUEVTX05FRURJTkdfUkVOQU1FX1dPUktBUk9VTkRTID0geworICAgICdSR0JBJzog
J1JnYmEnLAorICAgICMgRm9yIHRlc3Rpbmcgb25seS4KKyAgICAnVW5wbGVhc2FudE5hbWUnOiAn
SGFwcHlOYW1lJworfQorCisKK2NsYXNzIFBhcnNlRXhjZXB0aW9uKEV4Y2VwdGlvbik6CisgICAg
cGFzcworCisKK2NsYXNzIFR5cGVjaGVja0V4Y2VwdGlvbihFeGNlcHRpb24pOgorICAgIHBhc3MK
KworCitjbGFzcyBGcmFtZXdvcms6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUpOgorICAg
ICAgICBzZWxmLl9zZXR0aW5ncyA9IF9GUkFNRVdPUktfQ09ORklHX01BUFtuYW1lXQorICAgICAg
ICBzZWxmLm5hbWUgPSBuYW1lCisKKyAgICBkZWYgc2V0dGluZyhzZWxmLCBrZXksIGRlZmF1bHQ9
JycpOgorICAgICAgICByZXR1cm4gc2VsZi5fc2V0dGluZ3MuZ2V0KGtleSwgZGVmYXVsdCkKKwor
ICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgZnJvbVN0cmluZyhmcmFtZXdvcmtTdHJpbmcpOgor
ICAgICAgICBpZiBmcmFtZXdvcmtTdHJpbmcgPT0gIkdsb2JhbCI6CisgICAgICAgICAgICByZXR1
cm4gRnJhbWV3b3Jrcy5HbG9iYWwKKworICAgICAgICBpZiBmcmFtZXdvcmtTdHJpbmcgPT0gIldU
RiI6CisgICAgICAgICAgICByZXR1cm4gRnJhbWV3b3Jrcy5XVEYKKworICAgICAgICBpZiBmcmFt
ZXdvcmtTdHJpbmcgPT0gIkphdmFTY3JpcHRDb3JlIjoKKyAgICAgICAgICAgIHJldHVybiBGcmFt
ZXdvcmtzLkphdmFTY3JpcHRDb3JlCisKKyAgICAgICAgaWYgZnJhbWV3b3JrU3RyaW5nID09ICJX
ZWJDb3JlIjoKKyAgICAgICAgICAgIHJldHVybiBGcmFtZXdvcmtzLldlYkNvcmUKKworICAgICAg
ICBpZiBmcmFtZXdvcmtTdHJpbmcgPT0gIlRlc3QiOgorICAgICAgICAgICAgcmV0dXJuIEZyYW1l
d29ya3MuVGVzdAorCisgICAgICAgIHJhaXNlIFBhcnNlRXhjZXB0aW9uKCJVbmtub3duIGZyYW1l
d29yazogJXMiICUgZnJhbWV3b3JrU3RyaW5nKQorCisKK2NsYXNzIEZyYW1ld29ya3M6CisgICAg
R2xvYmFsID0gRnJhbWV3b3JrKCJHbG9iYWwiKQorICAgIFdURiA9IEZyYW1ld29yaygiV1RGIikK
KyAgICBKYXZhU2NyaXB0Q29yZSA9IEZyYW1ld29yaygiSmF2YVNjcmlwdENvcmUiKQorICAgIFdl
YkNvcmUgPSBGcmFtZXdvcmsoIldlYkNvcmUiKQorICAgIFRlc3QgPSBGcmFtZXdvcmsoIlRlc3Qi
KQorCisKK2NsYXNzIFR5cGVSZWZlcmVuY2U6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHR5cGVf
a2luZCwgcmVmZXJlbmNlZF90eXBlX25hbWUsIGVudW1fdmFsdWVzLCBhcnJheV9pdGVtcyk6Cisg
ICAgICAgIHNlbGYudHlwZV9raW5kID0gdHlwZV9raW5kCisgICAgICAgIHNlbGYucmVmZXJlbmNl
ZF90eXBlX25hbWUgPSBfVFlQRVNfTkVFRElOR19SRU5BTUVfV09SS0FST1VORFMuZ2V0KHJlZmVy
ZW5jZWRfdHlwZV9uYW1lLCByZWZlcmVuY2VkX3R5cGVfbmFtZSkKKyAgICAgICAgc2VsZi5lbnVt
X3ZhbHVlcyA9IGVudW1fdmFsdWVzCisgICAgICAgIGlmIGFycmF5X2l0ZW1zIGlzIE5vbmU6Cisg
ICAgICAgICAgICBzZWxmLmFycmF5X3R5cGVfcmVmID0gTm9uZQorICAgICAgICBlbHNlOgorICAg
ICAgICAgICAgc2VsZi5hcnJheV90eXBlX3JlZiA9IFR5cGVSZWZlcmVuY2UoYXJyYXlfaXRlbXMu
Z2V0KCd0eXBlJyksIGFycmF5X2l0ZW1zLmdldCgnJHJlZicpLCBhcnJheV9pdGVtcy5nZXQoJ2Vu
dW0nLCBbXSksIGFycmF5X2l0ZW1zLmdldCgnaXRlbXMnKSkKKworICAgICAgICBpZiB0eXBlX2tp
bmQgaXMgbm90IE5vbmUgYW5kIHJlZmVyZW5jZWRfdHlwZV9uYW1lIGlzIG5vdCBOb25lOgorICAg
ICAgICAgICAgcmFpc2UgUGFyc2VFeGNlcHRpb24oIlR5cGUgcmVmZXJlbmNlIGNhbm5vdCBoYXZl
IGJvdGggJ3R5cGUnIGFuZCAnJHJlZicga2V5cy4iKQorCisgICAgICAgIGlmIHR5cGVfa2luZCA9
PSAiYXJyYXkiIGFuZCBhcnJheV9pdGVtcyBpcyBOb25lOgorICAgICAgICAgICAgcmFpc2UgUGFy
c2VFeGNlcHRpb24oIlR5cGUgcmVmZXJlbmNlIHdpdGggdHlwZSAnYXJyYXknIG11c3QgaGF2ZSBr
ZXkgJ2l0ZW1zJyB0byBkZWZpbmUgYXJyYXkgZWxlbWVudCB0eXBlLiIpCisKKyAgICBkZWYgcmVm
ZXJlbmNlZF9uYW1lKHNlbGYpOgorICAgICAgICBpZiBzZWxmLnJlZmVyZW5jZWRfdHlwZV9uYW1l
IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYucmVmZXJlbmNlZF90eXBlX25h
bWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnR5cGVfa2luZCAgIyBp
bnRlZ2VyLCBzdHJpbmcsIG51bWJlciwgYm9vbGVhbiwgZW51bSwgb2JqZWN0LCBhcnJheQorCisK
K2NsYXNzIFR5cGU6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAg
ICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuIHNlbGYucXVhbGlmaWVk
X25hbWUoKSA9PSBvdGhlci5xdWFsaWZpZWRfbmFtZSgpCisKKyAgICBkZWYgX19oYXNoX18oc2Vs
Zik6CisgICAgICAgIHJldHVybiBzZWxmLnF1YWxpZmllZF9uYW1lKCkuX19oYXNoX18oKQorCisg
ICAgIyBUaGVzZSBtZXRob2RzIHNob3VsZCBiZSBvdmVycmlkZGVuIGJ5IHN1YmNsYXNzZXMuCisg
ICAgZGVmIGlzX2VudW0oc2VsZik6CisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIHR5
cGVfZG9tYWluKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgcmF3X25hbWUoc2VsZik6
CisgICAgICAgIHJldHVybiBfVFlQRVNfTkVFRElOR19SRU5BTUVfV09SS0FST1VORFMuZ2V0KHNl
bGYuX25hbWUsIHNlbGYuX25hbWUpCisKKyAgICBkZWYgcXVhbGlmaWVkX25hbWUoc2VsZik6Cisg
ICAgICAgIHBhc3MKKworICAgICMgVGhpcyBpcyB1c2VkIHRvIHJlc29sdmUgbmVzdGVkIHR5cGVz
IGFmdGVyIGluc3RhbmNlcyBhcmUgY3JlYXRlZC4KKyAgICBkZWYgcmVzb2x2ZV90eXBlX3JlZmVy
ZW5jZXMoc2VsZiwgcHJvdG9jb2wpOgorICAgICAgICBwYXNzCisKKworY2xhc3MgUHJpbWl0aXZl
VHlwZShUeXBlKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSk6CisgICAgICAgIHNlbGYu
X25hbWUgPSBuYW1lCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAn
UHJpbWl0aXZlVHlwZVslc10nICUgc2VsZi5xdWFsaWZpZWRfbmFtZSgpCisKKyAgICBkZWYgdHlw
ZV9kb21haW4oc2VsZik6CisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgcXVhbGlmaWVk
X25hbWUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnJhd19uYW1lKCkKKworCitjbGFzcyBB
bGlhc2VkVHlwZShUeXBlKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwgZG9tYWluLCBh
bGlhc2VkX3R5cGVfcmVmKToKKyAgICAgICAgc2VsZi5fbmFtZSA9IG5hbWUKKyAgICAgICAgc2Vs
Zi5fZG9tYWluID0gZG9tYWluCisgICAgICAgIHNlbGYuX2FsaWFzZWRfdHlwZV9yZWYgPSBhbGlh
c2VkX3R5cGVfcmVmCisgICAgICAgIHNlbGYuYWxpYXNlZF90eXBlID0gTm9uZQorCisgICAgZGVm
IF9fcmVwcl9fKHNlbGYpOgorICAgICAgICBpZiBzZWxmLmFsaWFzZWRfdHlwZSBpcyBub3QgTm9u
ZToKKyAgICAgICAgICAgIHJldHVybiAnQWxpYXNlZFR5cGVbJXMgLT4gJXNdJyAlIChzZWxmLnF1
YWxpZmllZF9uYW1lKCksIHNlbGYuYWxpYXNlZF90eXBlLl9fcmVwcl9fKCkpCisgICAgICAgIGVs
c2U6CisgICAgICAgICAgICByZXR1cm4gJ0FsaWFzZWRUeXBlWyVzIC0+ICh1bnJlc29sdmVkKV0n
ICUgc2VsZi5xdWFsaWZpZWRfbmFtZSgpCisKKyAgICBkZWYgaXNfZW51bShzZWxmKToKKyAgICAg
ICAgcmV0dXJuIHNlbGYuYWxpYXNlZF90eXBlLmlzX2VudW0oKQorCisgICAgZGVmIHR5cGVfZG9t
YWluKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fZG9tYWluCisKKyAgICBkZWYgcXVhbGlm
aWVkX25hbWUoc2VsZik6CisgICAgICAgIHJldHVybiAgIi4iLmpvaW4oW3NlbGYudHlwZV9kb21h
aW4oKS5kb21haW5fbmFtZSwgc2VsZi5yYXdfbmFtZSgpXSkKKworICAgIGRlZiByZXNvbHZlX3R5
cGVfcmVmZXJlbmNlcyhzZWxmLCBwcm90b2NvbCk6CisgICAgICAgIGlmIHNlbGYuYWxpYXNlZF90
eXBlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgc2VsZi5hbGlh
c2VkX3R5cGUgPSBwcm90b2NvbC5sb29rdXBfdHlwZV9yZWZlcmVuY2Uoc2VsZi5fYWxpYXNlZF90
eXBlX3JlZiwgc2VsZi50eXBlX2RvbWFpbigpKQorICAgICAgICBsb2cuZGVidWcoIjwgUmVzb2x2
ZWQgdHlwZSByZWZlcmVuY2UgZm9yIGFsaWFzZWQgdHlwZSBpbiAlczogJXMiICUgKHNlbGYucXVh
bGlmaWVkX25hbWUoKSwgc2VsZi5hbGlhc2VkX3R5cGUucXVhbGlmaWVkX25hbWUoKSkpCisKKwor
Y2xhc3MgRW51bVR5cGUoVHlwZSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsIGRvbWFp
biwgdmFsdWVzLCBwcmltaXRpdmVfdHlwZV9yZWYsIGlzX2Fub255bW91cz1GYWxzZSk6CisgICAg
ICAgIHNlbGYuX25hbWUgPSBuYW1lCisgICAgICAgIHNlbGYuX2RvbWFpbiA9IGRvbWFpbgorICAg
ICAgICBzZWxmLl92YWx1ZXMgPSB2YWx1ZXMKKyAgICAgICAgc2VsZi5fcHJpbWl0aXZlX3R5cGVf
cmVmID0gcHJpbWl0aXZlX3R5cGVfcmVmCisgICAgICAgIHNlbGYucHJpbWl0aXZlX3R5cGUgPSBO
b25lCisgICAgICAgIHNlbGYuaXNfYW5vbnltb3VzID0gaXNfYW5vbnltb3VzCisKKyAgICBkZWYg
X19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAnRW51bVR5cGVbdmFsdWVfdHlwZT0lczsg
dmFsdWVzPSVzXScgJSAoc2VsZi5xdWFsaWZpZWRfbmFtZSgpLCAnLCAnLmpvaW4obWFwKHN0ciwg
c2VsZi5lbnVtX3ZhbHVlcygpKSkpCisKKyAgICBkZWYgaXNfZW51bShzZWxmKToKKyAgICAgICAg
cmV0dXJuIFRydWUKKworICAgIGRlZiB0eXBlX2RvbWFpbihzZWxmKToKKyAgICAgICAgcmV0dXJu
IHNlbGYuX2RvbWFpbgorCisgICAgZGVmIGVudW1fdmFsdWVzKHNlbGYpOgorICAgICAgICByZXR1
cm4gc2VsZi5fdmFsdWVzCisKKyAgICBkZWYgcXVhbGlmaWVkX25hbWUoc2VsZik6CisgICAgICAg
IHJldHVybiAgIi4iLmpvaW4oW3NlbGYudHlwZV9kb21haW4oKS5kb21haW5fbmFtZSwgc2VsZi5y
YXdfbmFtZSgpXSkKKworICAgIGRlZiByZXNvbHZlX3R5cGVfcmVmZXJlbmNlcyhzZWxmLCBwcm90
b2NvbCk6CisgICAgICAgIGlmIHNlbGYucHJpbWl0aXZlX3R5cGUgaXMgbm90IE5vbmU6CisgICAg
ICAgICAgICByZXR1cm4KKworICAgICAgICBzZWxmLnByaW1pdGl2ZV90eXBlID0gcHJvdG9jb2wu
bG9va3VwX3R5cGVfcmVmZXJlbmNlKHNlbGYuX3ByaW1pdGl2ZV90eXBlX3JlZiwgRG9tYWlucy5H
TE9CQUwpCisgICAgICAgIGxvZy5kZWJ1ZygiPCBSZXNvbHZlZCB0eXBlIHJlZmVyZW5jZSBmb3Ig
ZW51bSB0eXBlIGluICVzOiAlcyIgJSAoc2VsZi5xdWFsaWZpZWRfbmFtZSgpLCBzZWxmLnByaW1p
dGl2ZV90eXBlLnF1YWxpZmllZF9uYW1lKCkpKQorICAgICAgICBsb2cuZGVidWcoIjw8IGVudW0g
dmFsdWVzOiAlcyIgJSBzZWxmLmVudW1fdmFsdWVzKCkpCisKKworY2xhc3MgQXJyYXlUeXBlKFR5
cGUpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBlbGVtZW50X3R5cGVfcmVmLCBkb21haW4pOgor
ICAgICAgICBzZWxmLl9kb21haW4gPSBkb21haW4KKyAgICAgICAgc2VsZi5fZWxlbWVudF90eXBl
X3JlZiA9IGVsZW1lbnRfdHlwZV9yZWYKKyAgICAgICAgc2VsZi5lbGVtZW50X3R5cGUgPSBOb25l
CisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIGlmIHNlbGYuZWxlbWVudF90eXBl
IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmV0dXJuICdBcnJheVR5cGVbZWxlbWVudF90eXBl
PSVzXScgJSBzZWxmLmVsZW1lbnRfdHlwZS5fX3JlcHJfXygpCisgICAgICAgIGVsc2U6CisgICAg
ICAgICAgICByZXR1cm4gJ0FycmF5VHlwZVtlbGVtZW50X3R5cGU9KHVucmVzb2x2ZWQpXScKKwor
ICAgIGRlZiB0eXBlX2RvbWFpbihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2RvbWFpbgor
CisgICAgZGVmIHF1YWxpZmllZF9uYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gICIuIi5qb2lu
KFsiYXJyYXkiLCBzZWxmLmVsZW1lbnRfdHlwZS5xdWFsaWZpZWRfbmFtZSgpXSkKKworICAgIGRl
ZiByZXNvbHZlX3R5cGVfcmVmZXJlbmNlcyhzZWxmLCBwcm90b2NvbCk6CisgICAgICAgIGlmIHNl
bGYuZWxlbWVudF90eXBlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAg
ICAgc2VsZi5lbGVtZW50X3R5cGUgPSBwcm90b2NvbC5sb29rdXBfdHlwZV9yZWZlcmVuY2Uoc2Vs
Zi5fZWxlbWVudF90eXBlX3JlZiwgc2VsZi50eXBlX2RvbWFpbigpKQorICAgICAgICBsb2cuZGVi
dWcoIjwgUmVzb2x2ZWQgdHlwZSByZWZlcmVuY2UgZm9yIGVsZW1lbnQgdHlwZSBpbiAlczogJXMi
ICUgKHNlbGYucXVhbGlmaWVkX25hbWUoKSwgc2VsZi5lbGVtZW50X3R5cGUucXVhbGlmaWVkX25h
bWUoKSkpCisKKworY2xhc3MgT2JqZWN0VHlwZShUeXBlKToKKyAgICBkZWYgX19pbml0X18oc2Vs
ZiwgbmFtZSwgZG9tYWluLCBtZW1iZXJzKToKKyAgICAgICAgc2VsZi5fbmFtZSA9IG5hbWUKKyAg
ICAgICAgc2VsZi5fZG9tYWluID0gZG9tYWluCisgICAgICAgIHNlbGYubWVtYmVycyA9IG1lbWJl
cnMKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICdPYmplY3RUeXBl
WyVzXScgJSBzZWxmLnF1YWxpZmllZF9uYW1lKCkKKworICAgIGRlZiB0eXBlX2RvbWFpbihzZWxm
KToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2RvbWFpbgorCisgICAgZGVmIHF1YWxpZmllZF9uYW1l
KHNlbGYpOgorICAgICAgICByZXR1cm4gICIuIi5qb2luKFtzZWxmLnR5cGVfZG9tYWluKCkuZG9t
YWluX25hbWUsIHNlbGYucmF3X25hbWUoKV0pCisKKworZGVmIGNoZWNrX2Zvcl9yZXF1aXJlZF9w
cm9wZXJ0aWVzKHByb3BzLCBvYmosIHdoYXQpOgorICAgIGZvciBwcm9wIGluIHByb3BzOgorICAg
ICAgICBpZiBwcm9wIG5vdCBpbiBvYmo6CisgICAgICAgICAgICByYWlzZSBQYXJzZUV4Y2VwdGlv
bigiV2hlbiBwYXJzaW5nICVzLCByZXF1aXJlZCBwcm9wZXJ0eSBtaXNzaW5nOiAlcyIgJSAod2hh
dCwgcHJvcCkpCisKKworY2xhc3MgUHJvdG9jb2w6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZy
YW1ld29ya19uYW1lKToKKyAgICAgICAgc2VsZi5kb21haW5zID0gW10KKyAgICAgICAgc2VsZi50
eXBlc19ieV9uYW1lID0ge30KKyAgICAgICAgc2VsZi5mcmFtZXdvcmsgPSBGcmFtZXdvcmsuZnJv
bVN0cmluZyhmcmFtZXdvcmtfbmFtZSkKKworICAgICAgICBzZWxmLl9lbnVtX3ZhbHVlX2NvdW50
ID0gMAorICAgICAgICBzZWxmLl9lbnVtX3ZhbHVlcyA9IHt9CisKKyAgICBkZWYgcGFyc2Vfc3Bl
Y2lmaWNhdGlvbihzZWxmLCBqc29uLCBpc1N1cHBsZW1lbnRhbCk6CisgICAgICAgIGxvZy5kZWJ1
ZygicGFyc2UgdG9wbGV2ZWwiKQorCisgICAgICAgIGlmIGlzaW5zdGFuY2UoanNvbiwgZGljdCkg
YW5kICdkb21haW5zJyBpbiBqc29uOgorICAgICAgICAgICAganNvbiA9IGpzb25bJ2RvbWFpbnMn
XQorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShqc29uLCBsaXN0KToKKyAgICAgICAgICAgIGpz
b24gPSBbanNvbl0KKworICAgICAgICBmb3IgZG9tYWluIGluIGpzb246CisgICAgICAgICAgICBz
ZWxmLnBhcnNlX2RvbWFpbihkb21haW4sIGlzU3VwcGxlbWVudGFsKQorCisgICAgZGVmIHBhcnNl
X2RvbWFpbihzZWxmLCBqc29uLCBpc1N1cHBsZW1lbnRhbCk6CisgICAgICAgIGNoZWNrX2Zvcl9y
ZXF1aXJlZF9wcm9wZXJ0aWVzKFsnZG9tYWluJ10sIGpzb24sICJkb21haW4iKQorICAgICAgICBs
b2cuZGVidWcoInBhcnNlIGRvbWFpbiAiICsganNvblsnZG9tYWluJ10pCisKKyAgICAgICAgdHlw
ZXMgPSBbXQorICAgICAgICBjb21tYW5kcyA9IFtdCisgICAgICAgIGV2ZW50cyA9IFtdCisKKyAg
ICAgICAgaWYgJ3R5cGVzJyBpbiBqc29uOgorICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uo
anNvblsndHlwZXMnXSwgbGlzdCk6CisgICAgICAgICAgICAgICAgcmFpc2UgUGFyc2VFeGNlcHRp
b24oIk1hbGZvcm1lZCBzcGVjaWZpY2F0aW9uOiB0eXBlcyBpcyBub3QgYW4gYXJyYXkiKQorICAg
ICAgICAgICAgdHlwZXMuZXh0ZW5kKFtzZWxmLnBhcnNlX3R5cGVfZGVjbGFyYXRpb24oX2RlY2xh
cmF0aW9uKSBmb3IgX2RlY2xhcmF0aW9uIGluIGpzb25bJ3R5cGVzJ11dKQorCisgICAgICAgIGlm
ICdjb21tYW5kcycgaW4ganNvbjoKKyAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGpzb25b
J2NvbW1hbmRzJ10sIGxpc3QpOgorICAgICAgICAgICAgICAgIHJhaXNlIFBhcnNlRXhjZXB0aW9u
KCJNYWxmb3JtZWQgc3BlY2lmaWNhdGlvbjogY29tbWFuZHMgaXMgbm90IGFuIGFycmF5IikKKyAg
ICAgICAgICAgIGNvbW1hbmRzLmV4dGVuZChbc2VsZi5wYXJzZV9jb21tYW5kKF9jb21tYW5kKSBm
b3IgX2NvbW1hbmQgaW4ganNvblsnY29tbWFuZHMnXV0pCisKKyAgICAgICAgaWYgJ2V2ZW50cycg
aW4ganNvbjoKKyAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGpzb25bJ2V2ZW50cyddLCBs
aXN0KToKKyAgICAgICAgICAgICAgICByYWlzZSBQYXJzZUV4Y2VwdGlvbigiTWFsZm9ybWVkIHNw
ZWNpZmljYXRpb246IGV2ZW50cyBpcyBub3QgYW4gYXJyYXkiKQorICAgICAgICAgICAgZXZlbnRz
LmV4dGVuZChbc2VsZi5wYXJzZV9ldmVudChfZXZlbnQpIGZvciBfZXZlbnQgaW4ganNvblsnZXZl
bnRzJ11dKQorCisgICAgICAgIHNlbGYuZG9tYWlucy5hcHBlbmQoRG9tYWluKGpzb25bJ2RvbWFp
biddLCBqc29uLmdldCgnZGVzY3JpcHRpb24nLCAiIiksIGlzU3VwcGxlbWVudGFsLCB0eXBlcywg
Y29tbWFuZHMsIGV2ZW50cykpCisKKyAgICBkZWYgcGFyc2VfdHlwZV9kZWNsYXJhdGlvbihzZWxm
LCBqc29uKToKKyAgICAgICAgY2hlY2tfZm9yX3JlcXVpcmVkX3Byb3BlcnRpZXMoWydpZCcsICd0
eXBlJ10sIGpzb24sICJ0eXBlIikKKyAgICAgICAgbG9nLmRlYnVnKCJwYXJzZSB0eXBlICVzIiAl
IGpzb25bJ2lkJ10pCisKKyAgICAgICAgdHlwZV9tZW1iZXJzID0gW10KKworICAgICAgICBpZiAn
cHJvcGVydGllcycgaW4ganNvbjoKKyAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGpzb25b
J3Byb3BlcnRpZXMnXSwgbGlzdCk6CisgICAgICAgICAgICAgICAgcmFpc2UgUGFyc2VFeGNlcHRp
b24oIk1hbGZvcm1lZCBzcGVjaWZpY2F0aW9uOiBwcm9wZXJ0aWVzIGlzIG5vdCBhbiBhcnJheSIp
CisgICAgICAgICAgICB0eXBlX21lbWJlcnMuZXh0ZW5kKFtzZWxmLnBhcnNlX3R5cGVfbWVtYmVy
KF9tZW1iZXIpIGZvciBfbWVtYmVyIGluIGpzb25bJ3Byb3BlcnRpZXMnXV0pCisKKyAgICAgICAg
dHlwZV9yZWYgPSBUeXBlUmVmZXJlbmNlKGpzb25bJ3R5cGUnXSwgTm9uZSwganNvbi5nZXQoJ2Vu
dW0nLCBbXSksIGpzb24uZ2V0KCdpdGVtcycpKQorICAgICAgICByZXR1cm4gVHlwZURlY2xhcmF0
aW9uKGpzb25bJ2lkJ10sIHR5cGVfcmVmLCBqc29uLmdldCgiZGVzY3JpcHRpb24iLCAiIiksIHR5
cGVfbWVtYmVycykKKworICAgIGRlZiBwYXJzZV90eXBlX21lbWJlcihzZWxmLCBqc29uKToKKyAg
ICAgICAgY2hlY2tfZm9yX3JlcXVpcmVkX3Byb3BlcnRpZXMoWyduYW1lJ10sIGpzb24sICJ0eXBl
IG1lbWJlciIpCisgICAgICAgIGxvZy5kZWJ1ZygicGFyc2UgdHlwZSBtZW1iZXIgJXMiICUganNv
blsnbmFtZSddKQorCisgICAgICAgIHR5cGVfcmVmID0gVHlwZVJlZmVyZW5jZShqc29uLmdldCgn
dHlwZScpLCBqc29uLmdldCgnJHJlZicpLCBqc29uLmdldCgnZW51bScsIFtdKSwganNvbi5nZXQo
J2l0ZW1zJykpCisgICAgICAgIHJldHVybiBUeXBlTWVtYmVyKGpzb25bJ25hbWUnXSwgdHlwZV9y
ZWYsIGpzb24uZ2V0KCdvcHRpb25hbCcsIEZhbHNlKSwganNvbi5nZXQoJ2Rlc2NyaXB0aW9uJywg
IiIpKQorCisgICAgZGVmIHBhcnNlX2NvbW1hbmQoc2VsZiwganNvbik6CisgICAgICAgIGNoZWNr
X2Zvcl9yZXF1aXJlZF9wcm9wZXJ0aWVzKFsnbmFtZSddLCBqc29uLCAiY29tbWFuZCIpCisgICAg
ICAgIGxvZy5kZWJ1ZygicGFyc2UgY29tbWFuZCAlcyIgJSBqc29uWyduYW1lJ10pCisKKyAgICAg
ICAgY2FsbF9wYXJhbWV0ZXJzID0gW10KKyAgICAgICAgcmV0dXJuX3BhcmFtZXRlcnMgPSBbXQor
CisgICAgICAgIGlmICdwYXJhbWV0ZXJzJyBpbiBqc29uOgorICAgICAgICAgICAgaWYgbm90IGlz
aW5zdGFuY2UoanNvblsncGFyYW1ldGVycyddLCBsaXN0KToKKyAgICAgICAgICAgICAgICByYWlz
ZSBQYXJzZUV4Y2VwdGlvbigiTWFsZm9ybWVkIHNwZWNpZmljYXRpb246IHBhcmFtZXRlcnMgaXMg
bm90IGFuIGFycmF5IikKKyAgICAgICAgICAgIGNhbGxfcGFyYW1ldGVycy5leHRlbmQoW3NlbGYu
cGFyc2VfcGFyYW1ldGVyKF9wYXJhbWV0ZXIpIGZvciBfcGFyYW1ldGVyIGluIGpzb25bJ3BhcmFt
ZXRlcnMnXV0pCisKKyAgICAgICAgaWYgJ3JldHVybnMnIGluIGpzb246CisgICAgICAgICAgICBp
ZiBub3QgaXNpbnN0YW5jZShqc29uWydyZXR1cm5zJ10sIGxpc3QpOgorICAgICAgICAgICAgICAg
IHJhaXNlIFBhcnNlRXhjZXB0aW9uKCJNYWxmb3JtZWQgc3BlY2lmaWNhdGlvbjogcmV0dXJucyBp
cyBub3QgYW4gYXJyYXkiKQorICAgICAgICAgICAgcmV0dXJuX3BhcmFtZXRlcnMuZXh0ZW5kKFtz
ZWxmLnBhcnNlX3BhcmFtZXRlcihfcGFyYW1ldGVyKSBmb3IgX3BhcmFtZXRlciBpbiBqc29uWydy
ZXR1cm5zJ11dKQorCisgICAgICAgIHJldHVybiBDb21tYW5kKGpzb25bJ25hbWUnXSwgY2FsbF9w
YXJhbWV0ZXJzLCByZXR1cm5fcGFyYW1ldGVycywganNvbi5nZXQoJ2Rlc2NyaXB0aW9uJywgIiIp
LCBqc29uLmdldCgnYXN5bmMnLCBGYWxzZSkpCisKKyAgICBkZWYgcGFyc2VfZXZlbnQoc2VsZiwg
anNvbik6CisgICAgICAgIGNoZWNrX2Zvcl9yZXF1aXJlZF9wcm9wZXJ0aWVzKFsnbmFtZSddLCBq
c29uLCAiZXZlbnQiKQorICAgICAgICBsb2cuZGVidWcoInBhcnNlIGV2ZW50ICVzIiAlIGpzb25b
J25hbWUnXSkKKworICAgICAgICBldmVudF9wYXJhbWV0ZXJzID0gW10KKworICAgICAgICBpZiAn
cGFyYW1ldGVycycgaW4ganNvbjoKKyAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGpzb25b
J3BhcmFtZXRlcnMnXSwgbGlzdCk6CisgICAgICAgICAgICAgICAgcmFpc2UgUGFyc2VFeGNlcHRp
b24oIk1hbGZvcm1lZCBzcGVjaWZpY2F0aW9uOiBwYXJhbWV0ZXJzIGlzIG5vdCBhbiBhcnJheSIp
CisgICAgICAgICAgICBldmVudF9wYXJhbWV0ZXJzLmV4dGVuZChbc2VsZi5wYXJzZV9wYXJhbWV0
ZXIoX3BhcmFtZXRlcikgZm9yIF9wYXJhbWV0ZXIgaW4ganNvblsncGFyYW1ldGVycyddXSkKKwor
ICAgICAgICByZXR1cm4gRXZlbnQoanNvblsnbmFtZSddLCBldmVudF9wYXJhbWV0ZXJzLCBqc29u
LmdldCgnZGVzY3JpcHRpb24nLCAiIikpCisKKyAgICBkZWYgcGFyc2VfcGFyYW1ldGVyKHNlbGYs
IGpzb24pOgorICAgICAgICBjaGVja19mb3JfcmVxdWlyZWRfcHJvcGVydGllcyhbJ25hbWUnXSwg
anNvbiwgInBhcmFtZXRlciIpCisgICAgICAgIGxvZy5kZWJ1ZygicGFyc2UgcGFyYW1ldGVyICVz
IiAlIGpzb25bJ25hbWUnXSkKKworICAgICAgICB0eXBlX3JlZiA9IFR5cGVSZWZlcmVuY2UoanNv
bi5nZXQoJ3R5cGUnKSwganNvbi5nZXQoJyRyZWYnKSwganNvbi5nZXQoJ2VudW0nLCBbXSksIGpz
b24uZ2V0KCdpdGVtcycpKQorICAgICAgICByZXR1cm4gUGFyYW1ldGVyKGpzb25bJ25hbWUnXSwg
dHlwZV9yZWYsIGpzb24uZ2V0KCdvcHRpb25hbCcsIEZhbHNlKSwganNvbi5nZXQoJ2Rlc2NyaXB0
aW9uJywgIiIpKQorCisgICAgZGVmIHJlc29sdmVfdHlwZXMoc2VsZik6CisgICAgICAgIHF1YWxp
ZmllZF9kZWNsYXJlZF90eXBlX25hbWVzID0gc2V0KFsnYm9vbGVhbicsICdzdHJpbmcnLCAnaW50
ZWdlcicsICdudW1iZXInLCAnZW51bScsICdhcnJheScsICdvYmplY3QnLCAnYW55J10pCisKKyAg
ICAgICAgc2VsZi50eXBlc19ieV9uYW1lWydzdHJpbmcnXSA9IFByaW1pdGl2ZVR5cGUoJ3N0cmlu
ZycpCisgICAgICAgIGZvciBfcHJpbWl0aXZlX3R5cGUgaW4gWydib29sZWFuJywgJ2ludGVnZXIn
LCAnbnVtYmVyJ106CisgICAgICAgICAgICBzZWxmLnR5cGVzX2J5X25hbWVbX3ByaW1pdGl2ZV90
eXBlXSA9IFByaW1pdGl2ZVR5cGUoX3ByaW1pdGl2ZV90eXBlKQorICAgICAgICBmb3IgX29iamVj
dF90eXBlIGluIFsnYW55JywgJ29iamVjdCddOgorICAgICAgICAgICAgc2VsZi50eXBlc19ieV9u
YW1lW19vYmplY3RfdHlwZV0gPSBQcmltaXRpdmVUeXBlKF9vYmplY3RfdHlwZSkKKworICAgICAg
ICAjIEdhdGhlciBxdWFsaWZpZWQgdHlwZSBuYW1lcyBmcm9tIHR5cGUgZGVjbGFyYXRpb25zIGlu
IGVhY2ggZG9tYWluLgorICAgICAgICBmb3IgX2RvbWFpbiBpbiBzZWxmLmRvbWFpbnM6CisgICAg
ICAgICAgICBmb3IgX2RlY2xhcmF0aW9uIGluIF9kb21haW4udHlwZV9kZWNsYXJhdGlvbnM6Cisg
ICAgICAgICAgICAgICAgIyBCYXNpYyBzYW5pdHkgY2hlY2tpbmcuCisgICAgICAgICAgICAgICAg
aWYgX2RlY2xhcmF0aW9uLnR5cGVfcmVmLnJlZmVyZW5jZWRfdHlwZV9uYW1lIGlzIG5vdCBOb25l
OgorICAgICAgICAgICAgICAgICAgICByYWlzZSBUeXBlY2hlY2tFeGNlcHRpb24oIlR5cGUgZGVj
bGFyYXRpb25zIG11c3QgbmFtZSBhIGJhc2UgdHlwZSwgbm90IGEgdHlwZSByZWZlcmVuY2UuIikK
KworICAgICAgICAgICAgICAgICMgRmluZCBkdXBsaWNhdGUgcXVhbGlmaWVkIHR5cGUgbmFtZXMu
CisgICAgICAgICAgICAgICAgcXVhbGlmaWVkX3R5cGVfbmFtZSA9ICIuIi5qb2luKFtfZG9tYWlu
LmRvbWFpbl9uYW1lLCBfZGVjbGFyYXRpb24udHlwZV9uYW1lXSkKKyAgICAgICAgICAgICAgICBp
ZiBxdWFsaWZpZWRfdHlwZV9uYW1lIGluIHF1YWxpZmllZF9kZWNsYXJlZF90eXBlX25hbWVzOgor
ICAgICAgICAgICAgICAgICAgICByYWlzZSBUeXBlY2hlY2tFeGNlcHRpb24oIkR1cGxpY2F0ZSB0
eXBlIGRlY2xhcmF0aW9uOiAlcyIgJSBxdWFsaWZpZWRfdHlwZV9uYW1lKQorCisgICAgICAgICAg
ICAgICAgcXVhbGlmaWVkX2RlY2xhcmVkX3R5cGVfbmFtZXMuYWRkKHF1YWxpZmllZF90eXBlX25h
bWUpCisKKyAgICAgICAgICAgICAgICB0eXBlX2luc3RhbmNlID0gTm9uZQorCisgICAgICAgICAg
ICAgICAga2luZCA9IF9kZWNsYXJhdGlvbi50eXBlX3JlZi50eXBlX2tpbmQKKyAgICAgICAgICAg
ICAgICBpZiBsZW4oX2RlY2xhcmF0aW9uLnR5cGVfcmVmLmVudW1fdmFsdWVzKSA+IDA6CisgICAg
ICAgICAgICAgICAgICAgIHByaW1pdGl2ZV90eXBlX3JlZiA9IFR5cGVSZWZlcmVuY2UoX2RlY2xh
cmF0aW9uLnR5cGVfcmVmLnR5cGVfa2luZCwgTm9uZSwgW10sIE5vbmUpCisgICAgICAgICAgICAg
ICAgICAgIHR5cGVfaW5zdGFuY2UgPSBFbnVtVHlwZShfZGVjbGFyYXRpb24udHlwZV9uYW1lLCBf
ZG9tYWluLCBfZGVjbGFyYXRpb24udHlwZV9yZWYuZW51bV92YWx1ZXMsIHByaW1pdGl2ZV90eXBl
X3JlZikKKyAgICAgICAgICAgICAgICBlbGlmIGtpbmQgPT0gImFycmF5IjoKKyAgICAgICAgICAg
ICAgICAgICAgdHlwZV9pbnN0YW5jZSA9IEFycmF5VHlwZShfZGVjbGFyYXRpb24udHlwZV9yZWYu
YXJyYXlfdHlwZV9yZWYsIF9kb21haW4pCisgICAgICAgICAgICAgICAgZWxpZiBraW5kID09ICJv
YmplY3QiOgorICAgICAgICAgICAgICAgICAgICB0eXBlX2luc3RhbmNlID0gT2JqZWN0VHlwZShf
ZGVjbGFyYXRpb24udHlwZV9uYW1lLCBfZG9tYWluLCBfZGVjbGFyYXRpb24udHlwZV9tZW1iZXJz
KQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHR5cGVfaW5zdGFu
Y2UgPSBBbGlhc2VkVHlwZShfZGVjbGFyYXRpb24udHlwZV9uYW1lLCBfZG9tYWluLCBfZGVjbGFy
YXRpb24udHlwZV9yZWYpCisKKyAgICAgICAgICAgICAgICBsb2cuZGVidWcoIjwgQ3JlYXRlZCBm
cmVzaCB0eXBlICVzIGZvciBkZWNsYXJhdGlvbiAlcyIgJSAodHlwZV9pbnN0YW5jZS5fX3JlcHJf
XygpLCBxdWFsaWZpZWRfdHlwZV9uYW1lKSkKKyAgICAgICAgICAgICAgICBzZWxmLnR5cGVzX2J5
X25hbWVbcXVhbGlmaWVkX3R5cGVfbmFtZV0gPSB0eXBlX2luc3RhbmNlCisKKyAgICAgICAgIyBS
ZXNvbHZlIGFsbCB0eXBlIHJlZmVyZW5jZXMgcmVjdXJzaXZlbHkuCisgICAgICAgIGZvciBfZG9t
YWluIGluIHNlbGYuZG9tYWluczoKKyAgICAgICAgICAgIF9kb21haW4ucmVzb2x2ZV90eXBlX3Jl
ZmVyZW5jZXMoc2VsZikKKworICAgIGRlZiBsb29rdXBfdHlwZV9mb3JfZGVjbGFyYXRpb24oc2Vs
ZiwgZGVjbGFyYXRpb24sIGRvbWFpbik6CisgICAgICAgICMgVGhpcyB3aWxsIG9ubHkgbWF0Y2gg
YSB0eXBlIGRlZmluZWQgaW4gdGhlIHNhbWUgZG9tYWluLCB3aGVyZSBwcmVmaXhlcyBhcmVuJ3Qg
cmVxdWlyZWQuCisgICAgICAgIHF1YWxpZmllZF9uYW1lID0gIi4iLmpvaW4oW2RvbWFpbi5kb21h
aW5fbmFtZSwgZGVjbGFyYXRpb24udHlwZV9uYW1lXSkKKyAgICAgICAgaWYgcXVhbGlmaWVkX25h
bWUgaW4gc2VsZi50eXBlc19ieV9uYW1lOgorICAgICAgICAgICAgZm91bmRfdHlwZSA9IHNlbGYu
dHlwZXNfYnlfbmFtZVtxdWFsaWZpZWRfbmFtZV0KKyAgICAgICAgICAgIGZvdW5kX3R5cGUucmVz
b2x2ZV90eXBlX3JlZmVyZW5jZXMoc2VsZikKKyAgICAgICAgICAgIHJldHVybiBmb3VuZF90eXBl
CisKKyAgICAgICAgcmFpc2UgVHlwZWNoZWNrRXhjZXB0aW9uKCJMb29rdXAgZmFpbGVkIGZvciB0
eXBlIGRlY2xhcmF0aW9uOiAlcyAocmVmZXJlbmNlZCBmcm9tIGRvbWFpbjogJXMpIiAlIChkZWNs
YXJhdGlvbi50eXBlX25hbWUsIGRvbWFpbi5kb21haW5fbmFtZSkpCisKKyAgICBkZWYgbG9va3Vw
X3R5cGVfcmVmZXJlbmNlKHNlbGYsIHR5cGVfcmVmLCBkb21haW4pOgorICAgICAgICAjIElmIHJl
ZmVyZW5jZSBpcyB0byBhbiBhbm9ueW1vdXMgYXJyYXkgdHlwZSwgY3JlYXRlIGEgZnJlc2ggaW5z
dGFuY2UuCisgICAgICAgIGlmIHR5cGVfcmVmLnR5cGVfa2luZCA9PSAiYXJyYXkiOgorICAgICAg
ICAgICAgdHlwZV9pbnN0YW5jZSA9IEFycmF5VHlwZSh0eXBlX3JlZi5hcnJheV90eXBlX3JlZiwg
ZG9tYWluKQorICAgICAgICAgICAgdHlwZV9pbnN0YW5jZS5yZXNvbHZlX3R5cGVfcmVmZXJlbmNl
cyhzZWxmKQorICAgICAgICAgICAgbG9nLmRlYnVnKCI8IENyZWF0ZWQgZnJlc2ggdHlwZSBpbnN0
YW5jZSBmb3IgYW5vbnltb3VzIGFycmF5IHR5cGU6ICVzIiAlIHR5cGVfaW5zdGFuY2UucXVhbGlm
aWVkX25hbWUoKSkKKyAgICAgICAgICAgIHJldHVybiB0eXBlX2luc3RhbmNlCisKKyAgICAgICAg
IyBJZiByZWZlcmVuY2UgaXMgdG8gYW4gYW5vbnltb3VzIGVudW0gdHlwZSwgY3JlYXRlIGEgZnJl
c2ggaW5zdGFuY2UuCisgICAgICAgIGlmIGxlbih0eXBlX3JlZi5lbnVtX3ZhbHVlcykgPiAwOgor
ICAgICAgICAgICAgIyBXZSBuZWVkIHRvIGNyZWF0ZSBhIHR5cGUgcmVmZXJlbmNlIHdpdGhvdXQg
ZW51bSB2YWx1ZXMgYXMgdGhlIGVudW0ncyBuZXN0ZWQgdHlwZS4KKyAgICAgICAgICAgIHByaW1p
dGl2ZV90eXBlX3JlZiA9IFR5cGVSZWZlcmVuY2UodHlwZV9yZWYudHlwZV9raW5kLCBOb25lLCBb
XSwgTm9uZSkKKyAgICAgICAgICAgIHR5cGVfaW5zdGFuY2UgPSBFbnVtVHlwZSgiKGFub255bW91
cykiLCBkb21haW4sIHR5cGVfcmVmLmVudW1fdmFsdWVzLCBwcmltaXRpdmVfdHlwZV9yZWYsIFRy
dWUpCisgICAgICAgICAgICB0eXBlX2luc3RhbmNlLnJlc29sdmVfdHlwZV9yZWZlcmVuY2VzKHNl
bGYpCisgICAgICAgICAgICBsb2cuZGVidWcoIjwgQ3JlYXRlZCBmcmVzaCB0eXBlIGluc3RhbmNl
IGZvciBhbm9ueW1vdXMgZW51bSB0eXBlOiAlcyIgJSB0eXBlX2luc3RhbmNlLnF1YWxpZmllZF9u
YW1lKCkpCisgICAgICAgICAgICByZXR1cm4gdHlwZV9pbnN0YW5jZQorCisgICAgICAgICMgVGhp
cyB3aWxsIG1hdGNoIHdoZW4gcmVmZXJlbmNpbmcgYSB0eXBlIGRlZmluZWQgaW4gdGhlIHNhbWUg
ZG9tYWluLCB3aGVyZSBwcmVmaXhlcyBhcmVuJ3QgcmVxdWlyZWQuCisgICAgICAgIHF1YWxpZmll
ZF9uYW1lID0gIi4iLmpvaW4oW2RvbWFpbi5kb21haW5fbmFtZSwgdHlwZV9yZWYucmVmZXJlbmNl
ZF9uYW1lKCldKQorICAgICAgICBpZiBxdWFsaWZpZWRfbmFtZSBpbiBzZWxmLnR5cGVzX2J5X25h
bWU6CisgICAgICAgICAgICBmb3VuZF90eXBlID0gc2VsZi50eXBlc19ieV9uYW1lW3F1YWxpZmll
ZF9uYW1lXQorICAgICAgICAgICAgZm91bmRfdHlwZS5yZXNvbHZlX3R5cGVfcmVmZXJlbmNlcyhz
ZWxmKQorICAgICAgICAgICAgbG9nLmRlYnVnKCI8IExvb2t1cCBzdWNjZWVkZWQgZm9yIHVucXVh
bGlmaWVkIHR5cGU6ICVzIiAlIGZvdW5kX3R5cGUucXVhbGlmaWVkX25hbWUoKSkKKyAgICAgICAg
ICAgIHJldHVybiBmb3VuZF90eXBlCisKKyAgICAgICAgIyBUaGlzIHdpbGwgbWF0Y2ggcHJpbWl0
aXZlIHR5cGVzIGFuZCBmdWxseS1xdWFsaWZpZWQgdHlwZXMgZnJvbSBhIGRpZmZlcmVudCBkb21h
aW4uCisgICAgICAgIGlmIHR5cGVfcmVmLnJlZmVyZW5jZWRfbmFtZSgpIGluIHNlbGYudHlwZXNf
YnlfbmFtZToKKyAgICAgICAgICAgIGZvdW5kX3R5cGUgPSBzZWxmLnR5cGVzX2J5X25hbWVbdHlw
ZV9yZWYucmVmZXJlbmNlZF9uYW1lKCldCisgICAgICAgICAgICBmb3VuZF90eXBlLnJlc29sdmVf
dHlwZV9yZWZlcmVuY2VzKHNlbGYpCisgICAgICAgICAgICBsb2cuZGVidWcoIjwgTG9va3VwIHN1
Y2NlZWRlZCBmb3IgcHJpbWl0aXZlIG9yIHF1YWxpZmllZCB0eXBlOiAlcyIgJSBmb3VuZF90eXBl
LnF1YWxpZmllZF9uYW1lKCkpCisgICAgICAgICAgICByZXR1cm4gZm91bmRfdHlwZQorCisgICAg
ICAgIHJhaXNlIFR5cGVjaGVja0V4Y2VwdGlvbigiTG9va3VwIGZhaWxlZCBmb3IgdHlwZSByZWZl
cmVuY2U6ICVzIChyZWZlcmVuY2VkIGZyb20gZG9tYWluOiAlcykiICUgKHR5cGVfcmVmLnJlZmVy
ZW5jZWRfbmFtZSgpLCBkb21haW4uZG9tYWluX25hbWUpKQorCisKK2NsYXNzIERvbWFpbjoKKyAg
ICBkZWYgX19pbml0X18oc2VsZiwgZG9tYWluX25hbWUsIGRlc2NyaXB0aW9uLCBpc1N1cHBsZW1l
bnRhbCwgdHlwZV9kZWNsYXJhdGlvbnMsIGNvbW1hbmRzLCBldmVudHMpOgorICAgICAgICBzZWxm
LmRvbWFpbl9uYW1lID0gZG9tYWluX25hbWUKKyAgICAgICAgc2VsZi5kZXNjcmlwdGlvbiA9IGRl
c2NyaXB0aW9uCisgICAgICAgIHNlbGYuaXNfc3VwcGxlbWVudGFsID0gaXNTdXBwbGVtZW50YWwK
KyAgICAgICAgc2VsZi50eXBlX2RlY2xhcmF0aW9ucyA9IHR5cGVfZGVjbGFyYXRpb25zCisgICAg
ICAgIHNlbGYuY29tbWFuZHMgPSBjb21tYW5kcworICAgICAgICBzZWxmLmV2ZW50cyA9IGV2ZW50
cworCisgICAgZGVmIHJlc29sdmVfdHlwZV9yZWZlcmVuY2VzKHNlbGYsIHByb3RvY29sKToKKyAg
ICAgICAgbG9nLmRlYnVnKCI+IFJlc29sdmluZyB0eXBlIGRlY2xhcmF0aW9ucyBmb3IgZG9tYWlu
OiAlcyIgJSBzZWxmLmRvbWFpbl9uYW1lKQorICAgICAgICBmb3IgX2RlY2xhcmF0aW9uIGluIHNl
bGYudHlwZV9kZWNsYXJhdGlvbnM6CisgICAgICAgICAgICBfZGVjbGFyYXRpb24ucmVzb2x2ZV90
eXBlX3JlZmVyZW5jZXMocHJvdG9jb2wsIHNlbGYpCisKKyAgICAgICAgbG9nLmRlYnVnKCI+IFJl
c29sdmluZyB0eXBlcyBpbiBjb21tYW5kcyBmb3IgZG9tYWluOiAlcyIgJSBzZWxmLmRvbWFpbl9u
YW1lKQorICAgICAgICBmb3IgX2NvbW1hbmQgaW4gc2VsZi5jb21tYW5kczoKKyAgICAgICAgICAg
IF9jb21tYW5kLnJlc29sdmVfdHlwZV9yZWZlcmVuY2VzKHByb3RvY29sLCBzZWxmKQorCisgICAg
ICAgIGxvZy5kZWJ1ZygiPiBSZXNvbHZpbmcgdHlwZXMgaW4gZXZlbnRzIGZvciBkb21haW46ICVz
IiAlIHNlbGYuZG9tYWluX25hbWUpCisgICAgICAgIGZvciBfZXZlbnQgaW4gc2VsZi5ldmVudHM6
CisgICAgICAgICAgICBfZXZlbnQucmVzb2x2ZV90eXBlX3JlZmVyZW5jZXMocHJvdG9jb2wsIHNl
bGYpCisKKworY2xhc3MgRG9tYWluczoKKyAgICBHTE9CQUwgPSBEb21haW4oIiIsICJUaGUgZ2xv
YmFsIGRvbWFpbiwgaW4gd2hpY2ggcHJpbWl0aXZlIHR5cGVzIGFyZSBpbXBsaWNpdGx5IGRlY2xh
cmVkLiIsIFRydWUsIFtdLCBbXSwgW10pCisKKworY2xhc3MgVHlwZURlY2xhcmF0aW9uOgorICAg
IGRlZiBfX2luaXRfXyhzZWxmLCB0eXBlX25hbWUsIHR5cGVfcmVmLCBkZXNjcmlwdGlvbiwgdHlw
ZV9tZW1iZXJzKToKKyAgICAgICAgc2VsZi50eXBlX25hbWUgPSBfVFlQRVNfTkVFRElOR19SRU5B
TUVfV09SS0FST1VORFMuZ2V0KHR5cGVfbmFtZSwgdHlwZV9uYW1lKQorICAgICAgICBzZWxmLnR5
cGVfcmVmID0gdHlwZV9yZWYKKyAgICAgICAgc2VsZi5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9u
CisgICAgICAgIHNlbGYudHlwZV9tZW1iZXJzID0gdHlwZV9tZW1iZXJzCisKKyAgICBkZWYgcmVz
b2x2ZV90eXBlX3JlZmVyZW5jZXMoc2VsZiwgcHJvdG9jb2wsIGRvbWFpbik6CisgICAgICAgIGxv
Zy5kZWJ1ZygiPj4gUmVzb2x2aW5nIHR5cGUgcmVmZXJlbmNlcyBmb3IgdHlwZSBkZWNsYXJhdGlv
bjogJXMiICUgc2VsZi50eXBlX25hbWUpCisgICAgICAgIHNlbGYudHlwZSA9IHByb3RvY29sLmxv
b2t1cF90eXBlX2Zvcl9kZWNsYXJhdGlvbihzZWxmLCBkb21haW4pCisgICAgICAgIGZvciBfbWVt
YmVyIGluIHNlbGYudHlwZV9tZW1iZXJzOgorICAgICAgICAgICAgX21lbWJlci5yZXNvbHZlX3R5
cGVfcmVmZXJlbmNlcyhwcm90b2NvbCwgZG9tYWluKQorCisKK2NsYXNzIFR5cGVNZW1iZXI6Cisg
ICAgZGVmIF9faW5pdF9fKHNlbGYsIG1lbWJlcl9uYW1lLCB0eXBlX3JlZiwgaXNfb3B0aW9uYWws
IGRlc2NyaXB0aW9uKToKKyAgICAgICAgc2VsZi5tZW1iZXJfbmFtZSA9IG1lbWJlcl9uYW1lCisg
ICAgICAgIHNlbGYudHlwZV9yZWYgPSB0eXBlX3JlZgorICAgICAgICBzZWxmLmlzX29wdGlvbmFs
ID0gaXNfb3B0aW9uYWwKKyAgICAgICAgc2VsZi5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uCisK
KyAgICBkZWYgcmVzb2x2ZV90eXBlX3JlZmVyZW5jZXMoc2VsZiwgcHJvdG9jb2wsIGRvbWFpbik6
CisgICAgICAgIGxvZy5kZWJ1ZygiPj4+IFJlc29sdmluZyB0eXBlIHJlZmVyZW5jZXMgZm9yIHR5
cGUgbWVtYmVyOiAlcyIgJSBzZWxmLm1lbWJlcl9uYW1lKQorICAgICAgICBzZWxmLnR5cGUgPSBw
cm90b2NvbC5sb29rdXBfdHlwZV9yZWZlcmVuY2Uoc2VsZi50eXBlX3JlZiwgZG9tYWluKQorCisK
K2NsYXNzIFBhcmFtZXRlcjoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcGFyYW1ldGVyX25hbWUs
IHR5cGVfcmVmLCBpc19vcHRpb25hbCwgZGVzY3JpcHRpb24pOgorICAgICAgICBzZWxmLnBhcmFt
ZXRlcl9uYW1lID0gcGFyYW1ldGVyX25hbWUKKyAgICAgICAgc2VsZi50eXBlX3JlZiA9IHR5cGVf
cmVmCisgICAgICAgIHNlbGYuaXNfb3B0aW9uYWwgPSBpc19vcHRpb25hbAorICAgICAgICBzZWxm
LmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb24KKworICAgIGRlZiByZXNvbHZlX3R5cGVfcmVmZXJl
bmNlcyhzZWxmLCBwcm90b2NvbCwgZG9tYWluKToKKyAgICAgICAgbG9nLmRlYnVnKCI+Pj4gUmVz
b2x2aW5nIHR5cGUgcmVmZXJlbmNlcyBmb3IgcGFyYW1ldGVyOiAlcyIgJSBzZWxmLnBhcmFtZXRl
cl9uYW1lKQorICAgICAgICBzZWxmLnR5cGUgPSBwcm90b2NvbC5sb29rdXBfdHlwZV9yZWZlcmVu
Y2Uoc2VsZi50eXBlX3JlZiwgZG9tYWluKQorCisKK2NsYXNzIENvbW1hbmQ6CisgICAgZGVmIF9f
aW5pdF9fKHNlbGYsIGNvbW1hbmRfbmFtZSwgY2FsbF9wYXJhbWV0ZXJzLCByZXR1cm5fcGFyYW1l
dGVycywgZGVzY3JpcHRpb24sIGlzX2FzeW5jKToKKyAgICAgICAgc2VsZi5jb21tYW5kX25hbWUg
PSBjb21tYW5kX25hbWUKKyAgICAgICAgc2VsZi5jYWxsX3BhcmFtZXRlcnMgPSBjYWxsX3BhcmFt
ZXRlcnMKKyAgICAgICAgc2VsZi5yZXR1cm5fcGFyYW1ldGVycyA9IHJldHVybl9wYXJhbWV0ZXJz
CisgICAgICAgIHNlbGYuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbgorICAgICAgICBzZWxmLmlz
X2FzeW5jID0gaXNfYXN5bmMKKworICAgIGRlZiByZXNvbHZlX3R5cGVfcmVmZXJlbmNlcyhzZWxm
LCBwcm90b2NvbCwgZG9tYWluKToKKyAgICAgICAgbG9nLmRlYnVnKCI+PiBSZXNvbHZpbmcgdHlw
ZSByZWZlcmVuY2VzIGZvciBjYWxsIHBhcmFtZXRlcnMgaW4gY29tbWFuZDogJXMiICUgc2VsZi5j
b21tYW5kX25hbWUpCisgICAgICAgIGZvciBfcGFyYW1ldGVyIGluIHNlbGYuY2FsbF9wYXJhbWV0
ZXJzOgorICAgICAgICAgICAgX3BhcmFtZXRlci5yZXNvbHZlX3R5cGVfcmVmZXJlbmNlcyhwcm90
b2NvbCwgZG9tYWluKQorCisgICAgICAgIGxvZy5kZWJ1ZygiPj4gUmVzb2x2aW5nIHR5cGUgcmVm
ZXJlbmNlcyBmb3IgcmV0dXJuIHBhcmFtZXRlcnMgaW4gY29tbWFuZDogJXMiICUgc2VsZi5jb21t
YW5kX25hbWUpCisgICAgICAgIGZvciBfcGFyYW1ldGVyIGluIHNlbGYucmV0dXJuX3BhcmFtZXRl
cnM6CisgICAgICAgICAgICBfcGFyYW1ldGVyLnJlc29sdmVfdHlwZV9yZWZlcmVuY2VzKHByb3Rv
Y29sLCBkb21haW4pCisKKworY2xhc3MgRXZlbnQ6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGV2
ZW50X25hbWUsIGV2ZW50X3BhcmFtZXRlcnMsIGRlc2NyaXB0aW9uKToKKyAgICAgICAgc2VsZi5l
dmVudF9uYW1lID0gZXZlbnRfbmFtZQorICAgICAgICBzZWxmLmV2ZW50X3BhcmFtZXRlcnMgPSBl
dmVudF9wYXJhbWV0ZXJzCisgICAgICAgIHNlbGYuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbgor
CisgICAgZGVmIHJlc29sdmVfdHlwZV9yZWZlcmVuY2VzKHNlbGYsIHByb3RvY29sLCBkb21haW4p
OgorICAgICAgICBsb2cuZGVidWcoIj4+IFJlc29sdmluZyB0eXBlIHJlZmVyZW5jZXMgZm9yIHBh
cmFtZXRlcnMgaW4gZXZlbnQ6ICVzIiAlIHNlbGYuZXZlbnRfbmFtZSkKKyAgICAgICAgZm9yIF9w
YXJhbWV0ZXIgaW4gc2VsZi5ldmVudF9wYXJhbWV0ZXJzOgorICAgICAgICAgICAgX3BhcmFtZXRl
ci5yZXNvbHZlX3R5cGVfcmVmZXJlbmNlcyhwcm90b2NvbCwgZG9tYWluKQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKbmV3IGZpbGUg
bW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNzQyYWRkNWFkN2E2YTBkNGM1NjljZjhiNjJkZjViMzY2ZWJlNDMxNAotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKQEAgLTAsMCArMSwxODQgQEAKKyMhL3Vzci9i
aW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKGMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisj
IGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisjIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworIyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisjIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKworIyBUaGlzIHNjcmlwdCBnZW5lcmF0ZXMgSlMgYW5kIEMrKyBiaW5kaW5ncyBm
b3IgdGhlIGluc3BlY3RvciBwcm90b2NvbC4KKyMgR2VuZXJhdG9ycyBmb3IgaW5kaXZpZHVhbCBm
aWxlcyBhcmUgbG9jYXRlZCBpbiB0aGUgY29kZWdlbi8gZGlyZWN0b3J5LgorCitpbXBvcnQgb3Mu
cGF0aAoraW1wb3J0IHJlCitpbXBvcnQgc3lzCitpbXBvcnQgc3RyaW5nCitmcm9tIHN0cmluZyBp
bXBvcnQgVGVtcGxhdGUKK2ltcG9ydCBvcHRwYXJzZQoraW1wb3J0IGxvZ2dpbmcKKwordHJ5Ogor
ICAgIGltcG9ydCBqc29uCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgaW1wb3J0IHNpbXBsZWpz
b24gYXMganNvbgorCit0cnk6CisgICAgZnJvbSBjb2RlZ2VuIGltcG9ydCAqCisKKyMgV2hlbiBj
b3B5aW5nIGdlbmVyYXRvciBmaWxlcyB0byBKYXZhU2NyaXB0Q29yZSdzIHByaXZhdGUgaGVhZGVy
cyBvbiBNYWMsCisjIHRoZSBjb2RlZ2VuLyBtb2R1bGUgZGlyZWN0b3J5IGlzIGZsYXR0ZW5lZC4g
U28sIGltcG9ydCBkaXJlY3RseS4KK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBpbXBvcnQgbW9k
ZWxzCisgICAgZnJvbSBtb2RlbHMgaW1wb3J0ICoKKyAgICBmcm9tIGdlbmVyYXRvciBpbXBvcnQg
KgorCisgICAgZnJvbSBnZW5lcmF0ZV9iYWNrZW5kX2NvbW1hbmRzIGltcG9ydCAqCisgICAgZnJv
bSBnZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyIGltcG9ydCAqCisgICAgZnJvbSBn
ZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24gaW1wb3J0ICoKKyAgICBm
cm9tIGdlbmVyYXRlX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyIGltcG9ydCAqCisgICAgZnJv
bSBnZW5lcmF0ZV9mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uIGltcG9ydCAqCisg
ICAgZnJvbSBnZW5lcmF0ZV90eXBlX2J1aWxkZXJfaGVhZGVyIGltcG9ydCAqCisgICAgZnJvbSBn
ZW5lcmF0ZV90eXBlX2J1aWxkZXJfaW1wbGVtZW50YXRpb24gaW1wb3J0ICoKKworIyBVc2UgYSBn
bG9iYWwgbG9nZ2VyLCB3aGljaCBub3JtYWxseSBvbmx5IGxvZ3MgZXJyb3JzLgorIyBJdCBjYW4g
YmUgY29uZmlndXJlZCB0byBsb2cgZGVidWcgbWVzc2FnZXMgZnJvbSB0aGUgQ0xJLgorbG9nZ2lu
Zy5iYXNpY0NvbmZpZyhmb3JtYXQ9JyUobGV2ZWxuYW1lKXM6ICUobWVzc2FnZSlzJywgbGV2ZWw9
bG9nZ2luZy5FUlJPUikKK2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQorCisKKyMg
QSB3cml0ZXIgdGhhdCBvbmx5IHVwZGF0ZXMgZmlsZSBpZiBpdCBhY3R1YWxseSBjaGFuZ2VkLgor
Y2xhc3MgSW5jcmVtZW50YWxGaWxlV3JpdGVyOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxl
cGF0aCwgZm9yY2Vfb3V0cHV0KToKKyAgICAgICAgc2VsZi5fZmlsZXBhdGggPSBmaWxlcGF0aAor
ICAgICAgICBzZWxmLl9vdXRwdXQgPSAiIgorICAgICAgICBzZWxmLmZvcmNlX291dHB1dCA9IGZv
cmNlX291dHB1dAorCisgICAgZGVmIHdyaXRlKHNlbGYsIHRleHQpOgorICAgICAgICBzZWxmLl9v
dXRwdXQgKz0gdGV4dAorCisgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICB0ZXh0X2NoYW5n
ZWQgPSBUcnVlCisgICAgICAgIHNlbGYuX291dHB1dCA9IHNlbGYuX291dHB1dC5yc3RyaXAoKSAr
ICJcbiIKKworICAgICAgICB0cnk6CisgICAgICAgICAgICByZWFkX2ZpbGUgPSBvcGVuKHNlbGYu
X2ZpbGVwYXRoLCAiciIpCisgICAgICAgICAgICBvbGRfdGV4dCA9IHJlYWRfZmlsZS5yZWFkKCkK
KyAgICAgICAgICAgIHJlYWRfZmlsZS5jbG9zZSgpCisgICAgICAgICAgICB0ZXh0X2NoYW5nZWQg
PSBvbGRfdGV4dCAhPSBzZWxmLl9vdXRwdXQKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAg
IyBJZ25vcmUsIGp1c3Qgb3ZlcndyaXRlIGJ5IGRlZmF1bHQKKyAgICAgICAgICAgIHBhc3MKKwor
ICAgICAgICBpZiB0ZXh0X2NoYW5nZWQgb3Igc2VsZi5mb3JjZV9vdXRwdXQ6CisgICAgICAgICAg
ICBvdXRfZmlsZSA9IG9wZW4oc2VsZi5fZmlsZXBhdGgsICJ3IikKKyAgICAgICAgICAgIG91dF9m
aWxlLndyaXRlKHNlbGYuX291dHB1dCkKKyAgICAgICAgICAgIG91dF9maWxlLmNsb3NlKCkKKwor
CitkZWYgZ2VuZXJhdGVfZnJvbV9zcGVjaWZpY2F0aW9uKHByaW1hcnlfc3BlY2lmaWNhdGlvbl9m
aWxlcGF0aD1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdXBwbGVtZW50
YWxfc3BlY2lmaWNhdGlvbl9maWxlcGF0aHM9W10sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbmNhdGVuYXRlX291dHB1dD1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgb3V0cHV0X2RpcnBhdGg9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZm9yY2Vfb3V0cHV0PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmcmFtZXdvcmtfbmFtZT0iIik6CisKKyAgICBkZWYgbG9hZF9zcGVjaWZpY2F0aW9uKHByb3Rv
Y29sLCBmaWxlcGF0aCwgaXNTdXBwbGVtZW50YWw9RmFsc2UpOgorICAgICAgICB0cnk6CisgICAg
ICAgICAgICB3aXRoIG9wZW4oZmlsZXBhdGgsICJyIikgYXMgaW5wdXRfZmlsZToKKyAgICAgICAg
ICAgICAgICBwYXJzZWRfanNvbiA9IGpzb24ubG9hZChpbnB1dF9maWxlKQorICAgICAgICAgICAg
ICAgIHByb3RvY29sLnBhcnNlX3NwZWNpZmljYXRpb24ocGFyc2VkX2pzb24sIGlzU3VwcGxlbWVu
dGFsPWlzU3VwcGxlbWVudGFsKQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvciBhcyBlOgorICAg
ICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJFcnJvciBwYXJzaW5nIHZhbGlkIEpTT04gaW4gZmls
ZTogIiArIGZpbGVwYXRoKQorCisgICAgcHJvdG9jb2wgPSBtb2RlbHMuUHJvdG9jb2woZnJhbWV3
b3JrX25hbWUpCisgICAgZm9yIHNwZWNpZmljYXRpb24gaW4gc3VwcGxlbWVudGFsX3NwZWNpZmlj
YXRpb25fZmlsZXBhdGhzOgorICAgICAgICBsb2FkX3NwZWNpZmljYXRpb24ocHJvdG9jb2wsIHNw
ZWNpZmljYXRpb24sIGlzU3VwcGxlbWVudGFsPVRydWUpCisgICAgbG9hZF9zcGVjaWZpY2F0aW9u
KHByb3RvY29sLCBwcmltYXJ5X3NwZWNpZmljYXRpb25fZmlsZXBhdGgsIGlzU3VwcGxlbWVudGFs
PUZhbHNlKQorCisgICAgcHJvdG9jb2wucmVzb2x2ZV90eXBlcygpCisKKyAgICBnZW5lcmF0b3Jz
ID0gW10KKyAgICBnZW5lcmF0b3JzLmFwcGVuZChCYWNrZW5kQ29tbWFuZHNHZW5lcmF0b3IocHJv
dG9jb2wsIHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aCkpCisgICAgZ2VuZXJhdG9ycy5h
cHBlbmQoQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IocHJvdG9jb2wsIHByaW1hcnlf
c3BlY2lmaWNhdGlvbl9maWxlcGF0aCkpCisgICAgZ2VuZXJhdG9ycy5hcHBlbmQoQmFja2VuZERp
c3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihwcm90b2NvbCwgcHJpbWFyeV9zcGVjaWZp
Y2F0aW9uX2ZpbGVwYXRoKSkKKyAgICBnZW5lcmF0b3JzLmFwcGVuZChGcm9udGVuZERpc3BhdGNo
ZXJIZWFkZXJHZW5lcmF0b3IocHJvdG9jb2wsIHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0
aCkpCisgICAgZ2VuZXJhdG9ycy5hcHBlbmQoRnJvbnRlbmREaXNwYXRjaGVySW1wbGVtZW50YXRp
b25HZW5lcmF0b3IocHJvdG9jb2wsIHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aCkpCisg
ICAgZ2VuZXJhdG9ycy5hcHBlbmQoVHlwZUJ1aWxkZXJIZWFkZXJHZW5lcmF0b3IocHJvdG9jb2ws
IHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aCkpCisgICAgZ2VuZXJhdG9ycy5hcHBlbmQo
VHlwZUJ1aWxkZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihwcm90b2NvbCwgcHJpbWFyeV9zcGVj
aWZpY2F0aW9uX2ZpbGVwYXRoKSkKKworICAgIHNpbmdsZV9vdXRwdXRfZmlsZV9jb250ZW50cyA9
IFtdCisKKyAgICBmb3IgZ2VuZXJhdG9yIGluIGdlbmVyYXRvcnM6CisgICAgICAgIG91dHB1dCA9
IGdlbmVyYXRvci5nZW5lcmF0ZV9vdXRwdXQoKQorICAgICAgICBpZiBjb25jYXRlbmF0ZV9vdXRw
dXQ6CisgICAgICAgICAgICBzaW5nbGVfb3V0cHV0X2ZpbGVfY29udGVudHMuYXBwZW5kKCcjIyMg
QmVnaW4gRmlsZTogJXMnICUgZ2VuZXJhdG9yLm91dHB1dF9maWxlbmFtZSgpKQorICAgICAgICAg
ICAgc2luZ2xlX291dHB1dF9maWxlX2NvbnRlbnRzLmFwcGVuZChvdXRwdXQpCisgICAgICAgICAg
ICBzaW5nbGVfb3V0cHV0X2ZpbGVfY29udGVudHMuYXBwZW5kKCcjIyMgRW5kIEZpbGU6ICVzJyAl
IGdlbmVyYXRvci5vdXRwdXRfZmlsZW5hbWUoKSkKKyAgICAgICAgICAgIHNpbmdsZV9vdXRwdXRf
ZmlsZV9jb250ZW50cy5hcHBlbmQoJycpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBvdXRw
dXRfZmlsZSA9IEluY3JlbWVudGFsRmlsZVdyaXRlcihvcy5wYXRoLmpvaW4ob3V0cHV0X2RpcnBh
dGgsIGdlbmVyYXRvci5vdXRwdXRfZmlsZW5hbWUoKSksIGZvcmNlX291dHB1dCkKKyAgICAgICAg
ICAgIG91dHB1dF9maWxlLndyaXRlKG91dHB1dCkKKyAgICAgICAgICAgIG91dHB1dF9maWxlLmNs
b3NlKCkKKworICAgIGlmIGNvbmNhdGVuYXRlX291dHB1dDoKKyAgICAgICAgICAgIGZpbGVuYW1l
ID0gb3MucGF0aC5qb2luKG9zLnBhdGguYmFzZW5hbWUocHJpbWFyeV9zcGVjaWZpY2F0aW9uX2Zp
bGVwYXRoKSArICctcmVzdWx0JykKKyAgICAgICAgICAgIG91dHB1dF9maWxlID0gSW5jcmVtZW50
YWxGaWxlV3JpdGVyKG9zLnBhdGguam9pbihvdXRwdXRfZGlycGF0aCwgZmlsZW5hbWUpLCBmb3Jj
ZV9vdXRwdXQpCisgICAgICAgICAgICBvdXRwdXRfZmlsZS53cml0ZSgnXG4nLmpvaW4oc2luZ2xl
X291dHB1dF9maWxlX2NvbnRlbnRzKSkKKyAgICAgICAgICAgIG91dHB1dF9maWxlLmNsb3NlKCkK
KworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIGFsbG93ZWRfZnJhbWV3b3JrX25h
bWVzID0gWydXVEYnLCAnSmF2YVNjcmlwdENvcmUnLCAnV2ViQ29yZScsICdXZWJLaXQnLCAnV2Vi
S2l0MicsICdUZXN0J10KKyAgICBjbGlfcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKHVz
YWdlPSJ1c2FnZTogJXByb2cgW29wdGlvbnNdIFByaW1hcnlQcm90b2NvbC5qc29uIFtTdXBwbGVt
ZW50YWxQcm90b2NvbC5qc29uIC4uLl0iKQorICAgIGNsaV9wYXJzZXIuYWRkX29wdGlvbigiLW8i
LCAiLS1vdXRwdXREaXIiLCBoZWxwPSJEaXJlY3Rvcnkgd2hlcmUgZ2VuZXJhdGVkIGZpbGVzIHNo
b3VsZCBiZSB3cml0dGVuLiIpCisgICAgY2xpX3BhcnNlci5hZGRfb3B0aW9uKCItLWZyYW1ld29y
ayIsIHR5cGU9ImNob2ljZSIsIGNob2ljZXM9YWxsb3dlZF9mcmFtZXdvcmtfbmFtZXMsIGhlbHA9
IlRoZSBmcmFtZXdvcmsgdGhhdCB0aGUgcHJpbWFyeSBzcGVjaWZpY2F0aW9uIGJlbG9uZ3MgdG8u
IikKKyAgICBjbGlfcGFyc2VyLmFkZF9vcHRpb24oIi0tZm9yY2UiLCBhY3Rpb249InN0b3JlX3Ry
dWUiLCBoZWxwPSJGb3JjZSBvdXRwdXQgb2YgZ2VuZXJhdGVkIHNjcmlwdHMsIGV2ZW4gaWYgbm90
aGluZyBjaGFuZ2VkLiIpCisgICAgY2xpX3BhcnNlci5hZGRfb3B0aW9uKCItdiIsICItLWRlYnVn
IiwgYWN0aW9uPSJzdG9yZV90cnVlIiwgaGVscD0iTG9nIGV4dHJhIG91dHB1dCBmb3IgZGVidWdn
aW5nIHRoZSBnZW5lcmF0b3IgaXRzZWxmLiIpCisgICAgY2xpX3BhcnNlci5hZGRfb3B0aW9uKCIt
dCIsICItLXRlc3QiLCBhY3Rpb249InN0b3JlX3RydWUiLCBoZWxwPSJFbmFibGUgdGVzdCBtb2Rl
LiBVc2UgdW5pcXVlIG91dHB1dCBmaWxlbmFtZXMgY3JlYXRlZCBieSBwcmVwZW5kaW5nIHRoZSBp
bnB1dCBmaWxlbmFtZS4iKQorCisgICAgb3B0aW9ucyA9IE5vbmUKKworICAgIGFyZ19vcHRpb25z
LCBhcmdfdmFsdWVzID0gY2xpX3BhcnNlci5wYXJzZV9hcmdzKCkKKyAgICBpZiAobGVuKGFyZ192
YWx1ZXMpIDwgMSk6CisgICAgICAgIHJhaXNlIFBhcnNlRXhjZXB0aW9uKCJBdCBsZWFzdCBvbmUg
cGxhaW4gYXJndW1lbnQgZXhwZWN0ZWQiKQorCisgICAgaWYgbm90IGFyZ19vcHRpb25zLm91dHB1
dERpcjoKKyAgICAgICAgcmFpc2UgUGFyc2VFeGNlcHRpb24oIk1pc3Npbmcgb3V0cHV0IGRpcmVj
dG9yeSIpCisKKyAgICBpZiBhcmdfb3B0aW9ucy5kZWJ1ZzoKKyAgICAgICAgbG9nLnNldExldmVs
KGxvZ2dpbmcuREVCVUcpCisKKyAgICBvcHRpb25zID0geworICAgICAgICAncHJpbWFyeV9zcGVj
aWZpY2F0aW9uX2ZpbGVwYXRoJzogYXJnX3ZhbHVlc1swXSwKKyAgICAgICAgJ3N1cHBsZW1lbnRh
bF9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRocyc6IGFyZ192YWx1ZXNbMTpdLAorICAgICAgICAnb3V0
cHV0X2RpcnBhdGgnOiBhcmdfb3B0aW9ucy5vdXRwdXREaXIsCisgICAgICAgICdjb25jYXRlbmF0
ZV9vdXRwdXQnOiBhcmdfb3B0aW9ucy50ZXN0LAorICAgICAgICAnZnJhbWV3b3JrX25hbWUnOiBh
cmdfb3B0aW9ucy5mcmFtZXdvcmssCisgICAgICAgICdmb3JjZV9vdXRwdXQnOiBhcmdfb3B0aW9u
cy5mb3JjZQorICAgIH0KKworICAgIHRyeToKKyAgICAgICAgZ2VuZXJhdGVfZnJvbV9zcGVjaWZp
Y2F0aW9uKCoqb3B0aW9ucykKKyAgICBleGNlcHQgKFBhcnNlRXhjZXB0aW9uLCBUeXBlY2hlY2tF
eGNlcHRpb24pIGFzIGU6CisgICAgICAgIGlmIGFyZ19vcHRpb25zLnRlc3Q6CisgICAgICAgICAg
ICBsb2cuZXJyb3IoZS5tZXNzYWdlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2Ug
ICMgRm9yY2UgdGhlIGJ1aWxkIHRvIGZhaWwuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1
dGUuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9j
b21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU2MWI1Y2VhYjE0
YzdhYzM3ZWU1MWE5YmQ3YzkyMDNmYzViYWIxMGIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvY29tbWFuZHMtd2l0aC1hc3lu
Yy1hdHRyaWJ1dGUuanNvbgpAQCAtMCwwICsxLDEwMCBAQAoreworICAgICJkb21haW4iOiAiRGF0
YWJhc2UiLAorICAgICJ0eXBlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIkRh
dGFiYXNlSWQiLAorICAgICAgICAgICAgInR5cGUiOiAiaW50ZWdlciIsCisgICAgICAgICAgICAi
ZGVzY3JpcHRpb24iOiAiVW5pcXVlIGlkZW50aWZpZXIgb2YgRGF0YWJhc2Ugb2JqZWN0LiIKKyAg
ICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIlByaW1hcnlDb2xvcnMiLAor
ICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKKyAgICAgICAgICAgICJlbnVtIjogWyJyZWQi
LCAiZ3JlZW4iLCAiYmx1ZSJdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJp
ZCI6ICJFcnJvciIsCisgICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAorICAgICAgICAgICAg
ImRlc2NyaXB0aW9uIjogIkRhdGFiYXNlIGVycm9yLiIsCisgICAgICAgICAgICAicHJvcGVydGll
cyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm1lc3NhZ2UiLCAidHlwZSI6ICJzdHJp
bmciLCAiZGVzY3JpcHRpb24iOiAiRXJyb3IgbWVzc2FnZS4iIH0sCisgICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJjb2RlIiwgInR5cGUiOiAiaW50ZWdlciIsICJkZXNjcmlwdGlvbiI6ICJFcnJv
ciBjb2RlLiIgfQorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXSwKKyAgICAiY29tbWFu
ZHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImV4ZWN1dGVTUUxTeW5jT3B0
aW9uYWxSZXR1cm5WYWx1ZXMiLAorICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCisgICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJkYXRhYmFzZUlkIiwgIiRyZWYiOiAiRGF0YWJhc2VJZCIgfSwK
KyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInF1ZXJ5IiwgInR5cGUiOiAic3RyaW5nIiB9Cisg
ICAgICAgICAgICBdLAorICAgICAgICAgICAgInJldHVybnMiOiBbCisgICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogImFycmF5IiwgIm9wdGlvbmFsIjogdHJ1
ZSwgIml0ZW1zIjogeyAidHlwZSI6ICJzdHJpbmciIH0gfSwKKyAgICAgICAgICAgICAgICB7ICJu
YW1lIjogIm5vdGVzIiwgInR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAidGltZXN0YW1wIiwgInR5cGUiOiAibnVtYmVyIiwgIm9w
dGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidmFsdWVzIiwgInR5
cGUiOiAib2JqZWN0IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAicGF5bG9hZCIsICJ0eXBlIjogImFueSIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogImRhdGFiYXNlSWQiLCAiJHJlZiI6ICJEYXRhYmFzZUlkIiwg
Im9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic3FsRXJyb3Ii
LCAiJHJlZiI6ICJFcnJvciIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7
ICJuYW1lIjogInNjcmVlbkNvbG9yIiwgIiRyZWYiOiAiUHJpbWFyeUNvbG9ycyIsICJvcHRpb25h
bCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInByaW50Q29sb3IiLCAidHlw
ZSI6ICJzdHJpbmciLCAiZW51bSI6IFsiY3lhbiIsICJtYWdlbnRhIiwgInllbGxvdyIsICJibGFj
ayJdLCAib3B0aW9uYWwiOiB0cnVlIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAg
ICAgeworICAgICAgICAgICAgIm5hbWUiOiAiZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5W
YWx1ZXMiLAorICAgICAgICAgICAgImFzeW5jIjogdHJ1ZSwKKyAgICAgICAgICAgICJwYXJhbWV0
ZXJzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZGF0YWJhc2VJZCIsICIkcmVmIjog
IkRhdGFiYXNlSWQiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJxdWVyeSIsICJ0eXBl
IjogInN0cmluZyIgfQorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICJyZXR1cm5zIjogWwor
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJhcnJheSIs
ICJvcHRpb25hbCI6IHRydWUsICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9IH0sCisgICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25h
bCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBl
IjogIm51bWJlciIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1l
IjogInZhbHVlcyIsICJ0eXBlIjogIm9iamVjdCIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJhbnkiLCAib3B0aW9uYWwi
OiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJkYXRhYmFzZUlkIiwgIiRyZWYi
OiAiRGF0YWJhc2VJZCIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJu
YW1lIjogInNxbEVycm9yIiwgIiRyZWYiOiAiRXJyb3IiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisg
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzY3JlZW5Db2xvciIsICIkcmVmIjogIlByaW1hcnlD
b2xvcnMiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJw
cmludENvbG9yIiwgInR5cGUiOiAic3RyaW5nIiwgImVudW0iOiBbImN5YW4iLCAibWFnZW50YSIs
ICJ5ZWxsb3ciLCAiYmxhY2siXSwgIm9wdGlvbmFsIjogdHJ1ZSB9CisgICAgICAgICAgICBdCisg
ICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImV4ZWN1dGVTUUxTeW5j
IiwKKyAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAiZGF0YWJhc2VJZCIsICIkcmVmIjogIkRhdGFiYXNlSWQiIH0sCisgICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJxdWVyeSIsICJ0eXBlIjogInN0cmluZyIgfQorICAgICAgICAgICAgXSwKKyAg
ICAgICAgICAgICJyZXR1cm5zIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29sdW1u
TmFtZXMiLCAidHlwZSI6ICJhcnJheSIsICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9IH0s
CisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIgfSwK
KyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciIg
fSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInZhbHVlcyIsICJ0eXBlIjogIm9iamVjdCIg
fSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJhbnkiIH0s
CisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJkYXRhYmFzZUlkIiwgIiRyZWYiOiAiRGF0YWJh
c2VJZCIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNxbEVycm9yIiwgIiRyZWYiOiAi
RXJyb3IiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzY3JlZW5Db2xvciIsICIkcmVm
IjogIlByaW1hcnlDb2xvcnMiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwcmludENv
bG9yIiwgInR5cGUiOiAic3RyaW5nIiwgImVudW0iOiBbImN5YW4iLCAibWFnZW50YSIsICJ5ZWxs
b3ciLCAiYmxhY2siXSB9CisgICAgICAgICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAg
ICAgICAgICAgICJuYW1lIjogImV4ZWN1dGVTUUxBc3luYyIsCisgICAgICAgICAgICAiYXN5bmMi
OiB0cnVlLAorICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCisgICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJkYXRhYmFzZUlkIiwgIiRyZWYiOiAiRGF0YWJhc2VJZCIgfSwKKyAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogInF1ZXJ5IiwgInR5cGUiOiAic3RyaW5nIiB9CisgICAgICAgICAgICBd
LAorICAgICAgICAgICAgInJldHVybnMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJj
b2x1bW5OYW1lcyIsICJ0eXBlIjogImFycmF5IiwgIml0ZW1zIjogeyAidHlwZSI6ICJzdHJpbmci
IH0gfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm5vdGVzIiwgInR5cGUiOiAic3RyaW5n
IiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidGltZXN0YW1wIiwgInR5cGUiOiAibnVt
YmVyIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidmFsdWVzIiwgInR5cGUiOiAib2Jq
ZWN0IiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicGF5bG9hZCIsICJ0eXBlIjogImFu
eSIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImRhdGFiYXNlSWQiLCAiJHJlZiI6ICJE
YXRhYmFzZUlkIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic3FsRXJyb3IiLCAiJHJl
ZiI6ICJFcnJvciIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNjcmVlbkNvbG9yIiwg
IiRyZWYiOiAiUHJpbWFyeUNvbG9ycyIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBy
aW50Q29sb3IiLCAidHlwZSI6ICJzdHJpbmciLCAiZW51bSI6IFsiY3lhbiIsICJtYWdlbnRhIiwg
InllbGxvdyIsICJibGFjayJdIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0KK30K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9jb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbiBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9jb21tYW5kcy13aXRo
LW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zODU2MWU3
MzQ1NzU1N2I5NTBjYWJjY2RjMmU5OWE5YTNjMTkzNDBjCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2NvbW1hbmRzLXdpdGgt
b3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uCkBAIC0wLDAgKzEsNzYgQEAKK3sK
KyAgICAiZG9tYWluIjogIkRhdGFiYXNlIiwKKyAgICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAg
ICAgICAgICAgICJpZCI6ICJEYXRhYmFzZUlkIiwKKyAgICAgICAgICAgICJ0eXBlIjogImludGVn
ZXIiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBpZGVudGlmaWVyIG9mIERh
dGFiYXNlIG9iamVjdC4iCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6
ICJQcmltYXJ5Q29sb3JzIiwKKyAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCisgICAgICAg
ICAgICAiZW51bSI6IFsicmVkIiwgImdyZWVuIiwgImJsdWUiXQorICAgICAgICB9LAorICAgICAg
ICB7CisgICAgICAgICAgICAiaWQiOiAiRXJyb3IiLAorICAgICAgICAgICAgInR5cGUiOiAib2Jq
ZWN0IiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJEYXRhYmFzZSBlcnJvci4iLAorICAg
ICAgICAgICAgInByb3BlcnRpZXMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJtZXNz
YWdlIiwgInR5cGUiOiAic3RyaW5nIiwgImRlc2NyaXB0aW9uIjogIkVycm9yIG1lc3NhZ2UuIiB9
LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29kZSIsICJ0eXBlIjogImludGVnZXIiLCAi
ZGVzY3JpcHRpb24iOiAiRXJyb3IgY29kZS4iIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQor
ICAgIF0sCisgICAgImNvbW1hbmRzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6
ICJleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzIiwKKyAgICAgICAgICAgICJwYXJhbWV0ZXJz
IjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJh
cnJheSIsICJvcHRpb25hbCI6IHRydWUsICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9IH0s
CisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIsICJv
cHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRpbWVzdGFtcCIs
ICJ0eXBlIjogIm51bWJlciIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7
ICJuYW1lIjogInZhbHVlcyIsICJ0eXBlIjogIm9iamVjdCIsICJvcHRpb25hbCI6IHRydWUgfSwK
KyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJhbnkiLCAib3B0
aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJkYXRhYmFzZUlkIiwg
IiRyZWYiOiAiRGF0YWJhc2VJZCIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogInNxbEVycm9yIiwgIiRyZWYiOiAiRXJyb3IiLCAib3B0aW9uYWwiOiB0cnVl
IH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzY3JlZW5Db2xvciIsICIkcmVmIjogIlBy
aW1hcnlDb2xvcnMiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJwcmludENvbG9yIiwgInR5cGUiOiAic3RyaW5nIiwgImVudW0iOiBbImN5YW4iLCAibWFn
ZW50YSIsICJ5ZWxsb3ciLCAiYmxhY2siXSwgIm9wdGlvbmFsIjogdHJ1ZSB9CisgICAgICAgICAg
ICBdLAorICAgICAgICAgICAgInJldHVybnMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogImFycmF5IiwgIm9wdGlvbmFsIjogdHJ1ZSwgIml0ZW1z
IjogeyAidHlwZSI6ICJzdHJpbmciIH0gfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm5v
dGVzIiwgInR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAidGltZXN0YW1wIiwgInR5cGUiOiAibnVtYmVyIiwgIm9wdGlvbmFsIjog
dHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidmFsdWVzIiwgInR5cGUiOiAib2Jq
ZWN0IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicGF5
bG9hZCIsICJ0eXBlIjogImFueSIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogImRhdGFiYXNlSWQiLCAiJHJlZiI6ICJEYXRhYmFzZUlkIiwgIm9wdGlvbmFs
IjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic3FsRXJyb3IiLCAiJHJlZiI6
ICJFcnJvciIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjog
InNjcmVlbkNvbG9yIiwgIiRyZWYiOiAiUHJpbWFyeUNvbG9ycyIsICJvcHRpb25hbCI6IHRydWUg
fSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInByaW50Q29sb3IiLCAidHlwZSI6ICJzdHJp
bmciLCAiZW51bSI6IFsiY3lhbiIsICJtYWdlbnRhIiwgInllbGxvdyIsICJibGFjayJdLCAib3B0
aW9uYWwiOiB0cnVlIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAg
ICAgICAgICAgIm5hbWUiOiAiZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzIiwKKyAgICAgICAg
ICAgICJwYXJhbWV0ZXJzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29sdW1uTmFt
ZXMiLCAidHlwZSI6ICJhcnJheSIsICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9IH0sCisg
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIgfSwKKyAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciIgfSwK
KyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInZhbHVlcyIsICJ0eXBlIjogIm9iamVjdCIgfSwK
KyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJhbnkiIH0sCisg
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJkYXRhYmFzZUlkIiwgIiRyZWYiOiAiRGF0YWJhc2VJ
ZCIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNxbEVycm9yIiwgIiRyZWYiOiAiRXJy
b3IiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzY3JlZW5Db2xvciIsICIkcmVmIjog
IlByaW1hcnlDb2xvcnMiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwcmludENvbG9y
IiwgInR5cGUiOiAic3RyaW5nIiwgImVudW0iOiBbImN5YW4iLCAibWFnZW50YSIsICJ5ZWxsb3ci
LCAiYmxhY2siXSB9CisgICAgICAgICAgICBdLAorICAgICAgICAgICAgInJldHVybnMiOiBbCisg
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogImFycmF5Iiwg
Iml0ZW1zIjogeyAidHlwZSI6ICJzdHJpbmciIH0gfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1l
IjogIm5vdGVzIiwgInR5cGUiOiAic3RyaW5nIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAidGltZXN0YW1wIiwgInR5cGUiOiAibnVtYmVyIiB9LAorICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAidmFsdWVzIiwgInR5cGUiOiAib2JqZWN0IiB9LAorICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAicGF5bG9hZCIsICJ0eXBlIjogImFueSIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1l
IjogImRhdGFiYXNlSWQiLCAiJHJlZiI6ICJEYXRhYmFzZUlkIiB9LAorICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAic3FsRXJyb3IiLCAiJHJlZiI6ICJFcnJvciIgfSwKKyAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogInNjcmVlbkNvbG9yIiwgIiRyZWYiOiAiUHJpbWFyeUNvbG9ycyIgfSwKKyAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogInByaW50Q29sb3IiLCAidHlwZSI6ICJzdHJpbmciLCAi
ZW51bSI6IFsiY3lhbiIsICJtYWdlbnRhIiwgInllbGxvdyIsICJibGFjayJdIH0KKyAgICAgICAg
ICAgIF0KKyAgICAgICAgfQorICAgIF0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9kb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5k
LXNpemVzLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjAw
NGQ3YzkwMjVlN2U4MDE4ZGFkNzI4NmVkYTk4NzhlNTczOTllZWQKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZG9tYWlucy13
aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCkBAIC0wLDAgKzEsNTUgQEAKK1sKK3sKKyAg
ICAiZG9tYWluIjogIk5ldHdvcmsxIiwKKworICAgICJjb21tYW5kcyI6IFsKKyAgICAgICAgewor
ICAgICAgICAgICAgIm5hbWUiOiAibG9hZFJlc291cmNlMSIsCisgICAgICAgICAgICAiZGVzY3Jp
cHRpb24iOiAiTG9hZHMgYSByZXNvdXJjZSBpbiB0aGUgY29udGV4dCBvZiBhIGZyYW1lIG9uIHRo
ZSBpbnNwZWN0ZWQgcGFnZSB3aXRob3V0IGNyb3NzIG9yaWdpbiBjaGVja3MuIgorICAgICAgICB9
CisgICAgXQorfSwKK3sKKyAgICAiZG9tYWluIjogIk5ldHdvcmsyIiwKKyAgICAidHlwZXMiOiBb
CisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJMb2FkZXJJZCIsCisgICAgICAgICAgICAi
dHlwZSI6ICJzdHJpbmciLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBsb2Fk
ZXIgaWRlbnRpZmllci4iCisgICAgICAgIH0KKyAgICBdCit9LAoreworICAgICJkb21haW4iOiAi
TmV0d29yazMiLAorICAgICJjb21tYW5kcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5h
bWUiOiAibG9hZFJlc291cmNlMSIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiTG9hZHMg
YSByZXNvdXJjZSBpbiB0aGUgY29udGV4dCBvZiBhIGZyYW1lIG9uIHRoZSBpbnNwZWN0ZWQgcGFn
ZSB3aXRob3V0IGNyb3NzIG9yaWdpbiBjaGVja3MuIgorICAgICAgICB9LAorICAgICAgICB7Cisg
ICAgICAgICAgICAibmFtZSI6ICJsb2FkUmVzb3VyY2UyIiwKKyAgICAgICAgICAgICJkZXNjcmlw
dGlvbiI6ICJMb2FkcyBhIHJlc291cmNlIGluIHRoZSBjb250ZXh0IG9mIGEgZnJhbWUgb24gdGhl
IGluc3BlY3RlZCBwYWdlIHdpdGhvdXQgY3Jvc3Mgb3JpZ2luIGNoZWNrcy4iCisgICAgICAgIH0s
CisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImxvYWRSZXNvdXJjZTMiLAorICAgICAg
ICAgICAgImRlc2NyaXB0aW9uIjogIkxvYWRzIGEgcmVzb3VyY2UgaW4gdGhlIGNvbnRleHQgb2Yg
YSBmcmFtZSBvbiB0aGUgaW5zcGVjdGVkIHBhZ2Ugd2l0aG91dCBjcm9zcyBvcmlnaW4gY2hlY2tz
LiIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAibG9hZFJlc291
cmNlNCIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiTG9hZHMgYSByZXNvdXJjZSBpbiB0
aGUgY29udGV4dCBvZiBhIGZyYW1lIG9uIHRoZSBpbnNwZWN0ZWQgcGFnZSB3aXRob3V0IGNyb3Nz
IG9yaWdpbiBjaGVja3MuIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFt
ZSI6ICJsb2FkUmVzb3VyY2U1IiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJMb2FkcyBh
IHJlc291cmNlIGluIHRoZSBjb250ZXh0IG9mIGEgZnJhbWUgb24gdGhlIGluc3BlY3RlZCBwYWdl
IHdpdGhvdXQgY3Jvc3Mgb3JpZ2luIGNoZWNrcy4iCisgICAgICAgIH0sCisgICAgICAgIHsKKyAg
ICAgICAgICAgICJuYW1lIjogImxvYWRSZXNvdXJjZTYiLAorICAgICAgICAgICAgImRlc2NyaXB0
aW9uIjogIkxvYWRzIGEgcmVzb3VyY2UgaW4gdGhlIGNvbnRleHQgb2YgYSBmcmFtZSBvbiB0aGUg
aW5zcGVjdGVkIHBhZ2Ugd2l0aG91dCBjcm9zcyBvcmlnaW4gY2hlY2tzLiIKKyAgICAgICAgfSwK
KyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAibG9hZFJlc291cmNlNyIsCisgICAgICAg
ICAgICAiZGVzY3JpcHRpb24iOiAiTG9hZHMgYSByZXNvdXJjZSBpbiB0aGUgY29udGV4dCBvZiBh
IGZyYW1lIG9uIHRoZSBpbnNwZWN0ZWQgcGFnZSB3aXRob3V0IGNyb3NzIG9yaWdpbiBjaGVja3Mu
IgorICAgICAgICB9CisgICAgXQorfQorXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRl
cnMuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9l
dmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWVmYzdjYjMx
OWIwYjM2ZmE5NWM0NzE0MDMwNTM3Nzg2MjRhZmMxMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9ldmVudHMtd2l0aC1vcHRp
b25hbC1wYXJhbWV0ZXJzLmpzb24KQEAgLTAsMCArMSw1MiBAQAoreworICAgICJkb21haW4iOiAi
RGF0YWJhc2UiLAorICAgICJ0eXBlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjog
IkRhdGFiYXNlSWQiLAorICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKKyAgICAgICAgICAg
ICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUgaWRlbnRpZmllciBvZiBEYXRhYmFzZSBvYmplY3QuIgor
ICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiUHJpbWFyeUNvbG9ycyIs
CisgICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAorICAgICAgICAgICAgInZhbHVlcyI6IFsi
cmVkIiwgImdyZWVuIiwgImJsdWUiXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAg
ICAiaWQiOiAiRXJyb3IiLAorICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKKyAgICAgICAg
ICAgICJkZXNjcmlwdGlvbiI6ICJEYXRhYmFzZSBlcnJvci4iLAorICAgICAgICAgICAgInByb3Bl
cnRpZXMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJtZXNzYWdlIiwgInR5cGUiOiAi
c3RyaW5nIiwgImRlc2NyaXB0aW9uIjogIkVycm9yIG1lc3NhZ2UuIiB9LAorICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAiY29kZSIsICJ0eXBlIjogImludGVnZXIiLCAiZGVzY3JpcHRpb24iOiAi
RXJyb3IgY29kZS4iIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0sCisgICAgImV2
ZW50cyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiZGlkRXhlY3V0ZU9wdGlv
bmFsUGFyYW1ldGVycyIsCisgICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKKyAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAiYXJyYXkiLCAib3B0aW9uYWwi
OiB0cnVlLCAiaXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSB9LAorICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAibm90ZXMiLCAidHlwZSI6ICJzdHJpbmciLCAib3B0aW9uYWwiOiB0cnVlIH0s
CisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0aW1lc3RhbXAiLCAidHlwZSI6ICJudW1iZXIi
LCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ2YWx1ZXMi
LCAidHlwZSI6ICJvYmplY3QiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJwYXlsb2FkIiwgInR5cGUiOiAiYW55IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAor
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic3FsRXJyb3IiLCAiJHJlZiI6ICJFcnJvciIsICJv
cHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNjcmVlbkNvbG9y
IiwgIiRyZWYiOiAiUHJpbWFyeUNvbG9ycyIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogInByaW50Q29sb3IiLCAidHlwZSI6ICJzdHJpbmciLCAidmFsdWVz
IjogWyJjeWFuIiwgIm1hZ2VudGEiLCAieWVsbG93IiwgImJsYWNrIl0sICJvcHRpb25hbCI6IHRy
dWUgfQorICAgICAgICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAi
bmFtZSI6ICJkaWRFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMiLAorICAgICAgICAgICAgInBh
cmFtZXRlcnMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0
eXBlIjogImFycmF5IiwgIml0ZW1zIjogeyAidHlwZSI6ICJzdHJpbmciIH0gfSwKKyAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogIm5vdGVzIiwgInR5cGUiOiAic3RyaW5nIiB9LAorICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAidGltZXN0YW1wIiwgInR5cGUiOiAibnVtYmVyIiB9LAorICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAidmFsdWVzIiwgInR5cGUiOiAib2JqZWN0IiB9LAorICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAicGF5bG9hZCIsICJ0eXBlIjogImFueSIgfSwKKyAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogInNxbEVycm9yIiwgIiRyZWYiOiAiRXJyb3IiIH0sCisgICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJzY3JlZW5Db2xvciIsICIkcmVmIjogIlByaW1hcnlDb2xvcnMi
IH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwcmludENvbG9yIiwgInR5cGUiOiAic3Ry
aW5nIiwgInZhbHVlcyI6IFsiY3lhbiIsICJtYWdlbnRhIiwgInllbGxvdyIsICJibGFjayJdIH0K
KyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9jb21tYW5kcy13
aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9jb21tYW5kcy13aXRoLWFzeW5jLWF0dHJp
YnV0ZS5qc29uLXJlc3VsdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kYmFjOTJiOGViMDEzMmZhN2E1NTljMGQxY2Mx
NzE3NTZjMjFmODU0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2NvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmli
dXRlLmpzb24tcmVzdWx0CkBAIC0wLDAgKzEsNzI0IEBACisjIyMgQmVnaW4gRmlsZTogSW5zcGVj
dG9yVGVzdEJhY2tlbmRDb21tYW5kcy5qcworLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRo
LWFzeW5jLWF0dHJpYnV0ZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBKYXZhU2NyaXB0Q29yZS9y
ZXBsYXkvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5CisKKy8vIERhdGFiYXNlLgor
SW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRhdGFiYXNlRGlzcGF0Y2hlciA9IEluc3BlY3RvckJh
Y2tlbmQucmVnaXN0ZXJEb21haW5EaXNwYXRjaGVyLmJpbmQoSW5zcGVjdG9yQmFja2VuZCwgIkRh
dGFiYXNlIik7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRW51bSgiRGF0YWJhc2UuUHJpbWFy
eUNvbG9ycyIsIHtSZWQ6ICJyZWQiLCBHcmVlbjogImdyZWVuIiwgQmx1ZTogImJsdWUifSk7CitJ
bnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiRGF0YWJhc2UuZXhlY3V0ZVNRTFN5bmNP
cHRpb25hbFJldHVyblZhbHVlcyIsIFt7Im5hbWUiOiAiZGF0YWJhc2VJZCIsICJ0eXBlIjogIm51
bWJlciIsICJvcHRpb25hbCI6IGZhbHNlfSwgeyJuYW1lIjogInF1ZXJ5IiwgInR5cGUiOiAic3Ry
aW5nIiwgIm9wdGlvbmFsIjogZmFsc2V9XSwgWyJjb2x1bW5OYW1lcyIsICJub3RlcyIsICJ0aW1l
c3RhbXAiLCAidmFsdWVzIiwgInBheWxvYWQiLCAiZGF0YWJhc2VJZCIsICJzcWxFcnJvciIsICJz
Y3JlZW5Db2xvciIsICJwcmludENvbG9yIl0pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNv
bW1hbmQoIkRhdGFiYXNlLmV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzIiwgW3si
bmFtZSI6ICJkYXRhYmFzZUlkIiwgInR5cGUiOiAibnVtYmVyIiwgIm9wdGlvbmFsIjogZmFsc2V9
LCB7Im5hbWUiOiAicXVlcnkiLCAidHlwZSI6ICJzdHJpbmciLCAib3B0aW9uYWwiOiBmYWxzZX1d
LCBbImNvbHVtbk5hbWVzIiwgIm5vdGVzIiwgInRpbWVzdGFtcCIsICJ2YWx1ZXMiLCAicGF5bG9h
ZCIsICJkYXRhYmFzZUlkIiwgInNxbEVycm9yIiwgInNjcmVlbkNvbG9yIiwgInByaW50Q29sb3Ii
XSk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiRGF0YWJhc2UuZXhlY3V0ZVNR
TFN5bmMiLCBbeyJuYW1lIjogImRhdGFiYXNlSWQiLCAidHlwZSI6ICJudW1iZXIiLCAib3B0aW9u
YWwiOiBmYWxzZX0sIHsibmFtZSI6ICJxdWVyeSIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25h
bCI6IGZhbHNlfV0sIFsiY29sdW1uTmFtZXMiLCAibm90ZXMiLCAidGltZXN0YW1wIiwgInZhbHVl
cyIsICJwYXlsb2FkIiwgImRhdGFiYXNlSWQiLCAic3FsRXJyb3IiLCAic2NyZWVuQ29sb3IiLCAi
cHJpbnRDb2xvciJdKTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJEYXRhYmFz
ZS5leGVjdXRlU1FMQXN5bmMiLCBbeyJuYW1lIjogImRhdGFiYXNlSWQiLCAidHlwZSI6ICJudW1i
ZXIiLCAib3B0aW9uYWwiOiBmYWxzZX0sIHsibmFtZSI6ICJxdWVyeSIsICJ0eXBlIjogInN0cmlu
ZyIsICJvcHRpb25hbCI6IGZhbHNlfV0sIFsiY29sdW1uTmFtZXMiLCAibm90ZXMiLCAidGltZXN0
YW1wIiwgInZhbHVlcyIsICJwYXlsb2FkIiwgImRhdGFiYXNlSWQiLCAic3FsRXJyb3IiLCAic2Ny
ZWVuQ29sb3IiLCAicHJpbnRDb2xvciJdKTsKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdEJh
Y2tlbmRDb21tYW5kcy5qcworCisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdEJhY2tlbmRE
aXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmli
dXRlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IEphdmFTY3JpcHRDb3JlL3JlcGxheS9zY3JpcHRz
L0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKKworI2lmbmRlZiBJbnNwZWN0b3JUZXN0QmFja2Vu
ZERpc3BhdGNoZXJzX2gKKyNkZWZpbmUgSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVyc19o
CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSAiSW5zcGVjdG9yVGVzdFR5cGVC
dWlsZGVycy5oIgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0eXBlZGVmIFN0cmluZyBFcnJv
clN0cmluZzsKKworI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCitjbGFzcyBJbnNwZWN0b3JEYXRh
YmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7CitwdWJsaWM6CisgICAgLy8gTmFtZWQgYWZ0
ZXIgcGFyYW1ldGVyICdzY3JlZW5Db2xvcicgd2hpbGUgZ2VuZXJhdGluZyBjb21tYW5kL2V2ZW50
IGV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMuCisgICAgZW51bSBjbGFzcyBTY3Jl
ZW5Db2xvciB7CisgICAgICAgIFJlZCA9IDAsCisgICAgICAgIEdyZWVuID0gMSwKKyAgICAgICAg
Qmx1ZSA9IDIsCisgICAgfTsgLy8gZW51bSBjbGFzcyBTY3JlZW5Db2xvcgorICAgIC8vIE5hbWVk
IGFmdGVyIHBhcmFtZXRlciAncHJpbnRDb2xvcicgd2hpbGUgZ2VuZXJhdGluZyBjb21tYW5kL2V2
ZW50IGV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMuCisgICAgZW51bSBjbGFzcyBQ
cmludENvbG9yIHsKKyAgICAgICAgQ3lhbiA9IDMsCisgICAgICAgIE1hZ2VudGEgPSA0LAorICAg
ICAgICBZZWxsb3cgPSA1LAorICAgICAgICBCbGFjayA9IDYsCisgICAgfTsgLy8gZW51bSBjbGFz
cyBQcmludENvbG9yCisgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1
cm5WYWx1ZXMoRXJyb3JTdHJpbmcqLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBp
bl9xdWVyeSwgUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5PFN0cmluZz4+JiBv
cHRfb3V0X2NvbHVtbk5hbWVzLCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8U3Ry
aW5nPiogb3B0X291dF9ub3RlcywgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6T3B0T3V0cHV0PGRv
dWJsZT4qIG9wdF9vdXRfdGltZXN0YW1wLCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpPcHRPdXRw
dXQ8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+KiBvcHRfb3V0X3ZhbHVlcywgSW5zcGVjdG9y
OjpUeXBlQnVpbGRlcjo6T3B0T3V0cHV0PEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+KiBvcHRf
b3V0X3BheWxvYWQsIGNvbnN0IEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkRhdGFiYXNlOjpEYXRh
YmFzZUlkKiBjb25zdCBvcHRfb3V0X2RhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlR5cGVC
dWlsZGVyOjpEYXRhYmFzZTo6RXJyb3I+JiBvcHRfb3V0X3NxbEVycm9yLCBJbnNwZWN0b3I6OlR5
cGVCdWlsZGVyOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyogb3B0X291dF9zY3JlZW5Db2xvciwg
SW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3IqIG9w
dF9vdXRfcHJpbnRDb2xvcikgPSAwOworICAgIGNsYXNzIEV4ZWN1dGVTUUxBc3luY09wdGlvbmFs
UmV0dXJuVmFsdWVzQ2FsbGJhY2sgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIEV4ZWN1dGVT
UUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJhY2soUGFzc1JlZlB0cjxJbnNwZWN0b3I6
Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiwgaW50IGlkKTsKKyAgICAgICAgdm9pZCBzZW5k
U3VjY2VzcyhQYXNzUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5PFN0cmluZz4+
IGNvbHVtbk5hbWVzLCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8U3RyaW5nPiog
bm90ZXMsIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6Ok9wdE91dHB1dDxkb3VibGU+KiB0aW1lc3Rh
bXAsIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6Ok9wdE91dHB1dDxJbnNwZWN0b3I6Okluc3BlY3Rv
ck9iamVjdD4qIHZhbHVlcywgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6T3B0T3V0cHV0PEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yVmFsdWU+KiBwYXlsb2FkLCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpP
cHRPdXRwdXQ8aW50PiogZGF0YWJhc2VJZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWls
ZGVyOjpEYXRhYmFzZTo6RXJyb3I+IHNxbEVycm9yLCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpP
cHRPdXRwdXQ8U3RyaW5nPiogc2NyZWVuQ29sb3IsIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6Ok9w
dE91dHB1dDxTdHJpbmc+KiBwcmludENvbG9yKTsKKyAgICB9OworICAgIHZpcnR1YWwgdm9pZCBl
eGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhFcnJvclN0cmluZyosIGludCBpbl9k
YXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5LCBQYXNzUmVmUHRyPEV4ZWN1dGVTUUxB
c3luY09wdGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJhY2s+IGNhbGxiYWNrKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIGV4ZWN1dGVTUUxTeW5jKEVycm9yU3RyaW5nKiwgaW50IGluX2RhdGFiYXNlSWQs
IGNvbnN0IFN0cmluZyYgaW5fcXVlcnksIFJlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpB
cnJheTxTdHJpbmc+PiYgb3V0X2NvbHVtbk5hbWVzLCBTdHJpbmcqIG91dF9ub3RlcywgZG91Ymxl
KiBvdXRfdGltZXN0YW1wLCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCogb3V0X3ZhbHVlcywg
SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSogb3V0X3BheWxvYWQsIGludCogb3V0X2RhdGFiYXNl
SWQsIFJlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpEYXRhYmFzZTo6RXJyb3I+JiBvdXRf
c3FsRXJyb3IsIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3Jz
KiBvdXRfc2NyZWVuQ29sb3IsIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyOjpQcmludENvbG9yKiBvdXRfcHJpbnRDb2xvcikgPSAwOworICAgIGNsYXNzIEV4ZWN1dGVT
UUxBc3luY0NhbGxiYWNrIDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXI6OkNhbGxiYWNrQmFzZSB7CisgICAgcHVibGljOgorICAgICAgICBFeGVjdXRlU1FMQXN5
bmNDYWxsYmFjayhQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXI+LCBpbnQgaWQpOworICAgICAgICB2b2lkIHNlbmRTdWNjZXNzKFBhc3NSZWZQdHI8SW5zcGVj
dG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk8U3RyaW5nPj4gY29sdW1uTmFtZXMsIGNvbnN0IFN0cmlu
ZyYgbm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0IHZh
bHVlcywgSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSBwYXlsb2FkLCBpbnQgZGF0YWJhc2VJZCwg
UGFzc1JlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpEYXRhYmFzZTo6RXJyb3I+IHNxbEVy
cm9yLCBjb25zdCBTdHJpbmcmIHNjcmVlbkNvbG9yLCBjb25zdCBTdHJpbmcmIHByaW50Q29sb3Ip
OworICAgIH07CisgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVTUUxBc3luYyhFcnJvclN0cmluZyos
IGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5LCBQYXNzUmVmUHRyPEV4
ZWN1dGVTUUxBc3luY0NhbGxiYWNrPiBjYWxsYmFjaykgPSAwOworcHJvdGVjdGVkOgorICAgIHZp
cnR1YWwgfkluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCk7Cit9Owor
I2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0UpCisKKyNpZiBFTkFCTEUoU1FMX0RBVEFCQVNF
KQorY2xhc3MgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1Ymxp
YyBJbnNwZWN0b3I6Okluc3BlY3RvclN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVyPiBjcmVhdGUoSW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciosIElu
c3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7CisgICAgdmlydHVhbCB2
b2lkIGRpc3BhdGNoKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUGFzc1JlZlB0
cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gbWVzc2FnZSkgb3ZlcnJpZGU7Citwcml2YXRl
OgorICAgIHZvaWQgZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIGNhbGxJ
ZCwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpOworICAgIHZvaWQg
ZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyBjYWxsSWQsIGNvbnN0IElu
c3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsKKyAgICB2b2lkIGV4ZWN1dGVTUUxT
eW5jKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCYgbWVzc2Fn
ZSk7CisgICAgdm9pZCBleGVjdXRlU1FMQXN5bmMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rv
cjo6SW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsKK3ByaXZhdGU6CisgICAgSW5zcGVjdG9yRGF0
YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcihJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyKiwgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKKyAgICBJ
bnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogbV9hZ2VudDsKK307Cisj
ZW5kaWYgLy8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
CisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorCisjZW5kaWYgLy8gIWRlZmluZWQoSW5z
cGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVyc19oKQorIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JU
ZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RC
YWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtYXN5
bmMtYXR0cmlidXRlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IEphdmFTY3JpcHRDb3JlL3JlcGxh
eS9zY3JpcHRzL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2lmIEVO
QUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsLmg+CisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKyNpZiBF
TkFCTEUoU1FMX0RBVEFCQVNFKQorSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXI6On5JbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpIHsgfQor
I2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0UpCisKKyNpZiBFTkFCTEUoU1FMX0RBVEFCQVNF
KQorUGFzc1JlZlB0cjxJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyPiBJbnNwZWN0
b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUoSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyLCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRj
aGVySGFuZGxlciogYWdlbnQpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnNwZWN0b3JE
YXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyLCBhZ2VudCkpOworfQor
CitJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpJbnNwZWN0b3JEYXRhYmFzZUJh
Y2tlbmREaXNwYXRjaGVyKEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0
Y2hlciwgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQor
ICAgIDogSW5zcGVjdG9yU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3Bh
dGNoZXIpCisgICAgLCBtX2FnZW50KGFnZW50KQoreworICAgIG1fYmFja2VuZERpc3BhdGNoZXIt
PnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbihBU0NJSUxpdGVyYWwoIkRhdGFiYXNlIiksIHRo
aXMpOworfQorCit2b2lkIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmRpc3Bh
dGNoKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUGFzc1JlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IG1lc3NhZ2UpCit7CisgICAgUmVmPEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERp
c3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOworCisgICAgaWYgKG1ldGhvZCA9PSAiZXhlY3V0ZVNR
TFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyIpCisgICAgICAgIGV4ZWN1dGVTUUxTeW5jT3B0aW9u
YWxSZXR1cm5WYWx1ZXMoY2FsbElkLCAqbWVzc2FnZS5nZXQoKSk7CisgICAgZWxzZSBpZiAobWV0
aG9kID09ICJleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyIpCisgICAgICAgIGV4
ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGNhbGxJZCwgKm1lc3NhZ2UuZ2V0KCkp
OworICAgIGVsc2UgaWYgKG1ldGhvZCA9PSAiZXhlY3V0ZVNRTFN5bmMiKQorICAgICAgICBleGVj
dXRlU1FMU3luYyhjYWxsSWQsICptZXNzYWdlLmdldCgpKTsKKyAgICBlbHNlIGlmIChtZXRob2Qg
PT0gImV4ZWN1dGVTUUxBc3luYyIpCisgICAgICAgIGV4ZWN1dGVTUUxBc3luYyhjYWxsSWQsICpt
ZXNzYWdlLmdldCgpKTsKKyAgICBlbHNlCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJl
cG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6Ok1l
dGhvZE5vdEZvdW5kLCBTdHJpbmcoIiciKSArICJEYXRhYmFzZSIgKyAnLicgKyBtZXRob2QgKyAi
JyB3YXMgbm90IGZvdW5kIik7Cit9CisKK3ZvaWQgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlz
cGF0Y2hlcjo6ZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIGNhbGxJZCwg
Y29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKQoreworICAgIFJlZlB0cjxJbnNwZWN0b3JB
cnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CisgICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gbWVzc2FnZS5nZXRPYmplY3Qo
QVNDSUlMaXRlcmFsKCJwYXJhbXMiKSk7CisgICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250
YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CisgICAgSW5zcGVjdG9yQXJyYXkqIHBy
b3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CisgICAgaW50IGluX2RhdGFi
YXNlSWQgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0SW50KHBhcmFtc0NvbnRhaW5l
clB0ciwgQVNDSUlMaXRlcmFsKCJkYXRhYmFzZUlkIiksIG51bGxwdHIsIHByb3RvY29sRXJyb3Jz
UHRyKTsKKyAgICBTdHJpbmcgaW5fcXVlcnkgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6
Z2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJxdWVyeSIpLCBudWxs
cHRyLCBwcm90b2NvbEVycm9yc1B0cik7CisgICAgaWYgKHByb3RvY29sRXJyb3JzLT5sZW5ndGgo
KSkgeworICAgICAgICBTdHJpbmcgZXJyb3JNZXNzYWdlID0gU3RyaW5nOjpmb3JtYXQoIlNvbWUg
YXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJEYXRhYmFzZS5l
eGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzIik7CisgICAgICAgIG1fYmFja2VuZERp
c3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXI6OkludmFsaWRQYXJhbXMsIGVycm9yTWVzc2FnZSwgcHJvdG9jb2xFcnJvcnMucmVs
ZWFzZSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEVycm9yU3RyaW5nIGVycm9y
OworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6
Y3JlYXRlKCk7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5PFN0cmlu
Zz4+IG91dF9jb2x1bW5OYW1lczsKKyAgICBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpPcHRPdXRw
dXQ8U3RyaW5nPiBvdXRfbm90ZXM7CisgICAgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6T3B0T3V0
cHV0PGRvdWJsZT4gb3V0X3RpbWVzdGFtcDsKKyAgICBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpP
cHRPdXRwdXQ8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IG91dF92YWx1ZXM7CisgICAgSW5z
cGVjdG9yOjpUeXBlQnVpbGRlcjo6T3B0T3V0cHV0PEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+
IG91dF9wYXlsb2FkOworICAgIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkRhdGFiYXNlOjpEYXRh
YmFzZUlkIG91dF9kYXRhYmFzZUlkOworICAgIFJlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVy
OjpEYXRhYmFzZTo6RXJyb3I+IG91dF9zcWxFcnJvcjsKKyAgICBJbnNwZWN0b3I6OlR5cGVCdWls
ZGVyOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyBvdXRfc2NyZWVuQ29sb3I7CisgICAgSW5zcGVj
dG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3Igb3V0X3ByaW50
Q29sb3I7CisgICAgbV9hZ2VudC0+ZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcygm
ZXJyb3IsIGluX2RhdGFiYXNlSWQsIGluX3F1ZXJ5LCBvdXRfY29sdW1uTmFtZXMsICZvdXRfbm90
ZXMsICZvdXRfdGltZXN0YW1wLCBvdXRfdmFsdWVzLCAmb3V0X3BheWxvYWQsICZvdXRfZGF0YWJh
c2VJZCwgb3V0X3NxbEVycm9yLCAmb3V0X3NjcmVlbkNvbG9yLCAmb3V0X3ByaW50Q29sb3IpOwor
CisgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkgeworICAgICAgICBpZiAob3V0X2NvbHVtbk5hbWVz
KQorICAgICAgICAgICAgcmVzdWx0LT5zZXRWYWx1ZShBU0NJSUxpdGVyYWwoImNvbHVtbk5hbWVz
IiksIG91dF9jb2x1bW5OYW1lcyk7CisgICAgICAgIGlmIChvdXRfbm90ZXMuaXNBc3NpZ25lZCgp
KQorICAgICAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJub3RlcyIpLCBv
dXRfbm90ZXMuZ2V0VmFsdWUoKSk7CisgICAgICAgIGlmIChvdXRfdGltZXN0YW1wLmlzQXNzaWdu
ZWQoKSkKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0TnVtYmVyKEFTQ0lJTGl0ZXJhbCgidGltZXN0
YW1wIiksIG91dF90aW1lc3RhbXAuZ2V0VmFsdWUoKSk7CisgICAgICAgIGlmIChvdXRfdmFsdWVz
LmlzQXNzaWduZWQoKSkKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJh
bCgidmFsdWVzIiksIG91dF92YWx1ZXMuZ2V0VmFsdWUoKSk7CisgICAgICAgIGlmIChvdXRfcGF5
bG9hZC5pc0Fzc2lnbmVkKCkpCisgICAgICAgICAgICByZXN1bHQtPnNldFZhbHVlKEFTQ0lJTGl0
ZXJhbCgicGF5bG9hZCIpLCBvdXRfcGF5bG9hZC5nZXRWYWx1ZSgpKTsKKyAgICAgICAgaWYgKG91
dF9kYXRhYmFzZUlkLmlzQXNzaWduZWQoKSkKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0TnVtYmVy
KEFTQ0lJTGl0ZXJhbCgiZGF0YWJhc2VJZCIpLCBvdXRfZGF0YWJhc2VJZC5nZXRWYWx1ZSgpKTsK
KyAgICAgICAgaWYgKG91dF9zcWxFcnJvcikKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0VmFsdWUo
QVNDSUlMaXRlcmFsKCJzcWxFcnJvciIpLCBvdXRfc3FsRXJyb3IpOworICAgICAgICBpZiAob3V0
X3NjcmVlbkNvbG9yLmlzQXNzaWduZWQoKSkKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5n
KEFTQ0lJTGl0ZXJhbCgic2NyZWVuQ29sb3IiKSwgb3V0X3NjcmVlbkNvbG9yLmdldFZhbHVlKCkp
OworICAgICAgICBpZiAob3V0X3ByaW50Q29sb3IuaXNBc3NpZ25lZCgpKQorICAgICAgICAgICAg
cmVzdWx0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJwcmludENvbG9yIiksIG91dF9wcmludENv
bG9yLmdldFZhbHVlKCkpOworICAgIH0KKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVz
cG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBlcnJvcik7Cit9CisKK0luc3BlY3RvckRh
dGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJl
dHVyblZhbHVlc0NhbGxiYWNrOjpFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc0Nh
bGxiYWNrKFBhc3NSZWZQdHI8SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+IGJhY2tlbmREaXNw
YXRjaGVyLCBpbnQgaWQpIDogSW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6
Q2FsbGJhY2tCYXNlKGJhY2tlbmREaXNwYXRjaGVyLCBpZCkgeyB9CisKK3ZvaWQgSW5zcGVjdG9y
RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkV4ZWN1dGVTUUxBc3luY09wdGlvbmFs
UmV0dXJuVmFsdWVzQ2FsbGJhY2s6OnNlbmRTdWNjZXNzKFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpU
eXBlQnVpbGRlcjo6QXJyYXk8U3RyaW5nPj4gY29sdW1uTmFtZXMsIEluc3BlY3Rvcjo6VHlwZUJ1
aWxkZXI6Ok9wdE91dHB1dDxTdHJpbmc+KiBub3RlcywgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6
T3B0T3V0cHV0PGRvdWJsZT4qIHRpbWVzdGFtcCwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6T3B0
T3V0cHV0PEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiogdmFsdWVzLCBJbnNwZWN0b3I6OlR5
cGVCdWlsZGVyOjpPcHRPdXRwdXQ8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4qIHBheWxvYWQs
IEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6Ok9wdE91dHB1dDxpbnQ+KiBkYXRhYmFzZUlkLCBQYXNz
UmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkRhdGFiYXNlOjpFcnJvcj4gc3FsRXJyb3Is
IEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6Ok9wdE91dHB1dDxTdHJpbmc+KiBzY3JlZW5Db2xvciwg
SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6T3B0T3V0cHV0PFN0cmluZz4qIHByaW50Q29sb3IpCit7
CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4ganNvbk1lc3NhZ2UgPSBJbnNwZWN0b3JPYmpl
Y3Q6OmNyZWF0ZSgpOworICAgIGlmIChjb2x1bW5OYW1lcykKKyAgICAgICAganNvbk1lc3NhZ2Ut
PnNldFZhbHVlKEFTQ0lJTGl0ZXJhbCgiY29sdW1uTmFtZXMiKSwgY29sdW1uTmFtZXMpOworICAg
IGlmIChub3Rlcy5pc0Fzc2lnbmVkKCkpCisgICAgICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmco
QVNDSUlMaXRlcmFsKCJub3RlcyIpLCBub3Rlcy5nZXRWYWx1ZSgpKTsKKyAgICBpZiAodGltZXN0
YW1wLmlzQXNzaWduZWQoKSkKKyAgICAgICAganNvbk1lc3NhZ2UtPnNldE51bWJlcihBU0NJSUxp
dGVyYWwoInRpbWVzdGFtcCIpLCB0aW1lc3RhbXAuZ2V0VmFsdWUoKSk7CisgICAgaWYgKHZhbHVl
cy5pc0Fzc2lnbmVkKCkpCisgICAgICAgIGpzb25NZXNzYWdlLT5zZXRPYmplY3QoQVNDSUlMaXRl
cmFsKCJ2YWx1ZXMiKSwgdmFsdWVzLmdldFZhbHVlKCkpOworICAgIGlmIChwYXlsb2FkLmlzQXNz
aWduZWQoKSkKKyAgICAgICAganNvbk1lc3NhZ2UtPnNldFZhbHVlKEFTQ0lJTGl0ZXJhbCgicGF5
bG9hZCIpLCBwYXlsb2FkLmdldFZhbHVlKCkpOworICAgIGlmIChkYXRhYmFzZUlkLmlzQXNzaWdu
ZWQoKSkKKyAgICAgICAganNvbk1lc3NhZ2UtPnNldE51bWJlcihBU0NJSUxpdGVyYWwoImRhdGFi
YXNlSWQiKSwgZGF0YWJhc2VJZC5nZXRWYWx1ZSgpKTsKKyAgICBpZiAoc3FsRXJyb3IpCisgICAg
ICAgIGpzb25NZXNzYWdlLT5zZXRWYWx1ZShBU0NJSUxpdGVyYWwoInNxbEVycm9yIiksIHNxbEVy
cm9yKTsKKyAgICBpZiAoc2NyZWVuQ29sb3IuaXNBc3NpZ25lZCgpKQorICAgICAgICBqc29uTWVz
c2FnZS0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgic2NyZWVuQ29sb3IiKSwgc2NyZWVuQ29sb3Iu
Z2V0VmFsdWUoKSk7CisgICAgaWYgKHByaW50Q29sb3IuaXNBc3NpZ25lZCgpKQorICAgICAgICBq
c29uTWVzc2FnZS0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgicHJpbnRDb2xvciIpLCBwcmludENv
bG9yLmdldFZhbHVlKCkpOworICAgIHNlbmRJZkFjdGl2ZShqc29uTWVzc2FnZSwgRXJyb3JTdHJp
bmcoKSk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhl
Y3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3Bl
Y3Rvck9iamVjdCYgbWVzc2FnZSkKK3sKKyAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3Rv
Y29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IG1lc3NhZ2UuZ2V0T2JqZWN0KEFTQ0lJTGl0ZXJh
bCgicGFyYW1zIikpOworICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0g
cGFyYW1zQ29udGFpbmVyLmdldCgpOworICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9y
c1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOworICAgIGludCBpbl9kYXRhYmFzZUlkID0gSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldEludChwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJ
TGl0ZXJhbCgiZGF0YWJhc2VJZCIpLCBudWxscHRyLCBwcm90b2NvbEVycm9yc1B0cik7CisgICAg
U3RyaW5nIGluX3F1ZXJ5ID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldFN0cmluZyhw
YXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgicXVlcnkiKSwgbnVsbHB0ciwgcHJvdG9j
b2xFcnJvcnNQdHIpOworICAgIGlmIChwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKKyAgICAg
ICAgU3RyaW5nIGVycm9yTWVzc2FnZSA9IFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBv
ZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiRGF0YWJhc2UuZXhlY3V0ZVNRTEFz
eW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMiKTsKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+
cmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElkLCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6
SW52YWxpZFBhcmFtcywgZXJyb3JNZXNzYWdlLCBwcm90b2NvbEVycm9ycy5yZWxlYXNlKCkpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgRXJyb3JTdHJpbmcgZXJyb3I7CisgICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsK
KyAgICBSZWZQdHI8SW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkV4
ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJhY2s+IGNhbGxiYWNrID0gYWRv
cHRSZWYobmV3IEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVj
dXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc0NhbGxiYWNrKG1fYmFja2VuZERpc3BhdGNo
ZXIsY2FsbElkKSk7CisgICAgbV9hZ2VudC0+ZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5W
YWx1ZXMoJmVycm9yLCBpbl9kYXRhYmFzZUlkLCBpbl9xdWVyeSwgY2FsbGJhY2spOworCisgICAg
aWYgKGVycm9yLmxlbmd0aCgpKSB7CisgICAgICAgIGNhbGxiYWNrLT5kaXNhYmxlKCk7CisgICAg
ICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgSW5z
cGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KK30KKwordm9pZCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tl
bmREaXNwYXRjaGVyOjpleGVjdXRlU1FMU3luYyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9y
T2JqZWN0JiBtZXNzYWdlKQoreworICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xF
cnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gcGFyYW1zQ29udGFpbmVyID0gbWVzc2FnZS5nZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJw
YXJhbXMiKSk7CisgICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJh
bXNDb250YWluZXIuZ2V0KCk7CisgICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRy
ID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CisgICAgaW50IGluX2RhdGFiYXNlSWQgPSBJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0SW50KHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRl
cmFsKCJkYXRhYmFzZUlkIiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzUHRyKTsKKyAgICBTdHJp
bmcgaW5fcXVlcnkgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0U3RyaW5nKHBhcmFt
c0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJxdWVyeSIpLCBudWxscHRyLCBwcm90b2NvbEVy
cm9yc1B0cik7CisgICAgaWYgKHByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgeworICAgICAgICBT
dHJpbmcgZXJyb3JNZXNzYWdlID0gU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1l
dGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJEYXRhYmFzZS5leGVjdXRlU1FMU3luYyIp
OworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKCZjYWxs
SWQsIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCBlcnJvck1lc3Nh
Z2UsIHByb3RvY29sRXJyb3JzLnJlbGVhc2UoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBFcnJvclN0cmluZyBlcnJvcjsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1
bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxJbnNwZWN0b3I6OlR5
cGVCdWlsZGVyOjpBcnJheTxTdHJpbmc+PiBvdXRfY29sdW1uTmFtZXM7CisgICAgU3RyaW5nIG91
dF9ub3RlczsKKyAgICBkb3VibGUgb3V0X3RpbWVzdGFtcDsKKyAgICBJbnNwZWN0b3I6Okluc3Bl
Y3Rvck9iamVjdCBvdXRfdmFsdWVzOworICAgIEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUgb3V0
X3BheWxvYWQ7CisgICAgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6RGF0YWJhc2U6OkRhdGFiYXNl
SWQgb3V0X2RhdGFiYXNlSWQ7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkRh
dGFiYXNlOjpFcnJvcj4gb3V0X3NxbEVycm9yOworICAgIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6
OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzIG91dF9zY3JlZW5Db2xvcjsKKyAgICBJbnNwZWN0b3JE
YXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UHJpbnRDb2xvciBvdXRfcHJpbnRDb2xv
cjsKKyAgICBtX2FnZW50LT5leGVjdXRlU1FMU3luYygmZXJyb3IsIGluX2RhdGFiYXNlSWQsIGlu
X3F1ZXJ5LCBvdXRfY29sdW1uTmFtZXMsICZvdXRfbm90ZXMsICZvdXRfdGltZXN0YW1wLCBvdXRf
dmFsdWVzLCAmb3V0X3BheWxvYWQsICZvdXRfZGF0YWJhc2VJZCwgb3V0X3NxbEVycm9yLCAmb3V0
X3NjcmVlbkNvbG9yLCAmb3V0X3ByaW50Q29sb3IpOworCisgICAgaWYgKCFlcnJvci5sZW5ndGgo
KSkgeworICAgICAgICByZXN1bHQtPnNldFZhbHVlKEFTQ0lJTGl0ZXJhbCgiY29sdW1uTmFtZXMi
KSwgb3V0X2NvbHVtbk5hbWVzKTsKKyAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoQVNDSUlMaXRl
cmFsKCJub3RlcyIpLCBvdXRfbm90ZXMpOworICAgICAgICByZXN1bHQtPnNldE51bWJlcihBU0NJ
SUxpdGVyYWwoInRpbWVzdGFtcCIpLCBvdXRfdGltZXN0YW1wKTsKKyAgICAgICAgcmVzdWx0LT5z
ZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJ2YWx1ZXMiKSwgb3V0X3ZhbHVlcyk7CisgICAgICAgIHJl
c3VsdC0+c2V0VmFsdWUoQVNDSUlMaXRlcmFsKCJwYXlsb2FkIiksIG91dF9wYXlsb2FkKTsKKyAg
ICAgICAgcmVzdWx0LT5zZXROdW1iZXIoQVNDSUlMaXRlcmFsKCJkYXRhYmFzZUlkIiksIG91dF9k
YXRhYmFzZUlkKTsKKyAgICAgICAgcmVzdWx0LT5zZXRWYWx1ZShBU0NJSUxpdGVyYWwoInNxbEVy
cm9yIiksIG91dF9zcWxFcnJvcik7CisgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKEFTQ0lJTGl0
ZXJhbCgic2NyZWVuQ29sb3IiKSwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Z2V0VGVzdEVudW1D
b25zdGFudFZhbHVlKG91dF9zY3JlZW5Db2xvcikpOworICAgICAgICByZXN1bHQtPnNldFN0cmlu
ZyhBU0NJSUxpdGVyYWwoInByaW50Q29sb3IiKSwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Z2V0
VGVzdEVudW1Db25zdGFudFZhbHVlKG91dF9wcmludENvbG9yKSk7CisgICAgfQorICAgIG1fYmFj
a2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIGVy
cm9yKTsKK30KKworSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkV4
ZWN1dGVTUUxBc3luY0NhbGxiYWNrOjpFeGVjdXRlU1FMQXN5bmNDYWxsYmFjayhQYXNzUmVmUHRy
PEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiBiYWNrZW5kRGlzcGF0Y2hlciwgaW50IGlkKSA6
IEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZShiYWNr
ZW5kRGlzcGF0Y2hlciwgaWQpIHsgfQorCit2b2lkIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERp
c3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNDYWxsYmFjazo6c2VuZFN1Y2Nlc3MoUGFz
c1JlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheTxTdHJpbmc+PiBjb2x1bW5OYW1l
cywgY29uc3QgU3RyaW5nJiBub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgSW5zcGVjdG9yOjpJbnNw
ZWN0b3JPYmplY3QgdmFsdWVzLCBJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlIHBheWxvYWQsIGlu
dCBkYXRhYmFzZUlkLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkRhdGFiYXNl
OjpFcnJvcj4gc3FsRXJyb3IsIGNvbnN0IFN0cmluZyYgc2NyZWVuQ29sb3IsIGNvbnN0IFN0cmlu
ZyYgcHJpbnRDb2xvcikKK3sKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBqc29uTWVzc2Fn
ZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAganNvbk1lc3NhZ2UtPnNldFZhbHVl
KEFTQ0lJTGl0ZXJhbCgiY29sdW1uTmFtZXMiKSwgY29sdW1uTmFtZXMpOworICAgIGpzb25NZXNz
YWdlLT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJub3RlcyIpLCBub3Rlcyk7CisgICAganNvbk1l
c3NhZ2UtPnNldE51bWJlcihBU0NJSUxpdGVyYWwoInRpbWVzdGFtcCIpLCB0aW1lc3RhbXApOwor
ICAgIGpzb25NZXNzYWdlLT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJ2YWx1ZXMiKSwgdmFsdWVz
KTsKKyAgICBqc29uTWVzc2FnZS0+c2V0VmFsdWUoQVNDSUlMaXRlcmFsKCJwYXlsb2FkIiksIHBh
eWxvYWQpOworICAgIGpzb25NZXNzYWdlLT5zZXROdW1iZXIoQVNDSUlMaXRlcmFsKCJkYXRhYmFz
ZUlkIiksIGRhdGFiYXNlSWQpOworICAgIGpzb25NZXNzYWdlLT5zZXRWYWx1ZShBU0NJSUxpdGVy
YWwoInNxbEVycm9yIiksIHNxbEVycm9yKTsKKyAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKEFT
Q0lJTGl0ZXJhbCgic2NyZWVuQ29sb3IiKSwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Z2V0VGVz
dEVudW1Db25zdGFudFZhbHVlKHNjcmVlbkNvbG9yKSk7CisgICAganNvbk1lc3NhZ2UtPnNldFN0
cmluZyhBU0NJSUxpdGVyYWwoInByaW50Q29sb3IiKSwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6
Z2V0VGVzdEVudW1Db25zdGFudFZhbHVlKHByaW50Q29sb3IpKTsKKyAgICBzZW5kSWZBY3RpdmUo
anNvbk1lc3NhZ2UsIEVycm9yU3RyaW5nKCkpOworfQorCit2b2lkIEluc3BlY3RvckRhdGFiYXNl
QmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxBc3luYyhsb25nIGNhbGxJZCwgY29uc3QgSW5z
cGVjdG9yT2JqZWN0JiBtZXNzYWdlKQoreworICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJv
dG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gbWVzc2FnZS5nZXRPYmplY3QoQVNDSUlMaXRl
cmFsKCJwYXJhbXMiKSk7CisgICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIg
PSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CisgICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJy
b3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CisgICAgaW50IGluX2RhdGFiYXNlSWQgPSBJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0SW50KHBhcmFtc0NvbnRhaW5lclB0ciwgQVND
SUlMaXRlcmFsKCJkYXRhYmFzZUlkIiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzUHRyKTsKKyAg
ICBTdHJpbmcgaW5fcXVlcnkgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0U3RyaW5n
KHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJxdWVyeSIpLCBudWxscHRyLCBwcm90
b2NvbEVycm9yc1B0cik7CisgICAgaWYgKHByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgeworICAg
ICAgICBTdHJpbmcgZXJyb3JNZXNzYWdlID0gU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRz
IG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJEYXRhYmFzZS5leGVjdXRlU1FM
QXN5bmMiKTsKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJv
cigmY2FsbElkLCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFtcywgZXJy
b3JNZXNzYWdlLCBwcm90b2NvbEVycm9ycy5yZWxlYXNlKCkpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgRXJyb3JTdHJpbmcgZXJyb3I7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8SW5zcGVj
dG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkV4ZWN1dGVTUUxBc3luY0NhbGxi
YWNrPiBjYWxsYmFjayA9IGFkb3B0UmVmKG5ldyBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jQ2FsbGJhY2sobV9iYWNrZW5kRGlzcGF0Y2hl
cixjYWxsSWQpKTsKKyAgICBtX2FnZW50LT5leGVjdXRlU1FMQXN5bmMoJmVycm9yLCBpbl9kYXRh
YmFzZUlkLCBpbl9xdWVyeSwgY2FsbGJhY2spOworCisgICAgaWYgKGVycm9yLmxlbmd0aCgpKSB7
CisgICAgICAgIGNhbGxiYWNrLT5kaXNhYmxlKCk7CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNo
ZXItPnJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgSW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KK30KKyNlbmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQorCit9IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyMjIyBFbmQgRmlsZTog
SW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IElu
c3BlY3RvclRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFu
ZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogSmF2YVNjcmlw
dENvcmUvcmVwbGF5L3NjcmlwdHMvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQorCisjaWZuZGVm
IEluc3BlY3RvclRlc3RGcm9udGVuZERpc3BhdGNoZXJzX2gKKyNkZWZpbmUgSW5zcGVjdG9yVGVz
dEZyb250ZW5kRGlzcGF0Y2hlcnNfaAorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1
ZGUgIkluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuaCIKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsLmg+CisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclZh
bHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworfSAvLyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorCisjZW5kaWYgLy8g
IWRlZmluZWQoSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnNfaCkKKyMjIyBFbmQgRmls
ZTogSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTog
SW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNv
bW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IEphdmFT
Y3JpcHRDb3JlL3JlcGxheS9zY3JpcHRzL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkluc3BlY3RvclRlc3RGcm9udGVuZERpc3BhdGNo
ZXJzLmgiCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVj
dG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorCisjIyMgRW5kIEZpbGU6IEluc3Bl
Y3RvclRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogSW5zcGVj
dG9yVGVzdFR5cGVCdWlsZGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtYXN5
bmMtYXR0cmlidXRlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IEphdmFTY3JpcHRDb3JlL3JlcGxh
eS9zY3JpcHRzL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKKworI2lmbmRlZiBJbnNwZWN0b3JU
ZXN0VHlwZUJ1aWxkZXJzX2gKKyNkZWZpbmUgSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVyc19oCisK
KyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckpT
VHlwZUJ1aWxkZXJzLmg+CisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclR5cGVCdWlsZGVy
Lmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0
ci5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKK25hbWVzcGFjZSBUeXBlQnVpbGRl
ciB7CisKKy8vIEZvcndhcmQgZGVjbGFyYXRpb25zLgorI2lmIEVOQUJMRShTUUxfREFUQUJBU0Up
CituYW1lc3BhY2UgRGF0YWJhc2UgeworY2xhc3MgRXJyb3I7CitlbnVtIGNsYXNzIFByaW1hcnlD
b2xvcnM7Cit9IC8vIERhdGFiYXNlCisjZW5kaWYgLy8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKKy8v
IEVuZCBvZiBmb3J3YXJkIGRlY2xhcmF0aW9ucy4KKworCisvLyBUeXBlZGVmcy4KKyNpZiBFTkFC
TEUoU1FMX0RBVEFCQVNFKQorbmFtZXNwYWNlIERhdGFiYXNlIHsKKy8qIFVuaXF1ZSBpZGVudGlm
aWVyIG9mIERhdGFiYXNlIG9iamVjdC4gKi8KK3R5cGVkZWYgaW50IERhdGFiYXNlSWQ7Cit9IC8v
IERhdGFiYXNlCisjZW5kaWYgLy8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKKy8vIEVuZCBvZiB0eXBl
ZGVmcy4KKworU3RyaW5nIGdldFRlc3RFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSk7CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+IFN0cmluZyBnZXRUZXN0RW51bUNvbnN0YW50VmFsdWUoVCBlbnVt
VmFsdWUpCit7CisgICAgcmV0dXJuIGdldFRlc3RFbnVtQ29uc3RhbnRWYWx1ZShzdGF0aWNfY2Fz
dDxpbnQ+KGVudW1WYWx1ZSkpOworfQorCisjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKK25hbWVz
cGFjZSBEYXRhYmFzZSB7CisvKiAgKi8KK2VudW0gY2xhc3MgUHJpbWFyeUNvbG9ycyB7CisgICAg
UmVkID0gMCwKKyAgICBHcmVlbiA9IDEsCisgICAgQmx1ZSA9IDIsCit9OyAvLyBlbnVtIGNsYXNz
IFByaW1hcnlDb2xvcnMKKy8qIERhdGFiYXNlIGVycm9yLiAqLworY2xhc3MgRXJyb3IgOiBwdWJs
aWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3RCYXNlIHsKK3B1YmxpYzoKKyAgICBlbnVtIHsK
KyAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAorICAgICAgICBNZXNzYWdlU2V0ID0gMSA8PCAwLAor
ICAgICAgICBDb2RlU2V0ID0gMSA8PCAxLAorICAgICAgICBBbGxGaWVsZHNTZXQgPSAoTWVzc2Fn
ZVNldCB8IENvZGVTZXQpCisgICAgfTsKKworICAgIHRlbXBsYXRlPGludCBTVEFURT4KKyAgICBj
bGFzcyBCdWlsZGVyIHsKKyAgICBwcml2YXRlOgorICAgICAgICBSZWZQdHI8SW5zcGVjdG9yOjpJ
bnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OworCisgICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBC
dWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsK
KyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjwvKkVycm9yKi9JbnNwZWN0
b3I6Okluc3BlY3Rvck9iamVjdD4gcHRyKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxF
X0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0
X3N0YXRlKTsKKyAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOworICAgICAgICB9CisgICAgICAg
IGZyaWVuZCBjbGFzcyBFcnJvcjsKKyAgICBwdWJsaWM6CisKKyAgICAgICAgQnVpbGRlcjxTVEFU
RSB8IE1lc3NhZ2VTZXQ+JiBzZXRNZXNzYWdlKGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgICAg
IHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBNZXNzYWdlU2V0KSwgcHJv
cGVydHlfbWVzc2FnZV9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3Ry
aW5nKEFTQ0lJTGl0ZXJhbCgibWVzc2FnZSIpLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4g
Y2FzdFN0YXRlPE1lc3NhZ2VTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyPFNU
QVRFIHwgQ29kZVNldD4mIHNldENvZGUoaW50IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQ29kZVNldCksIHByb3BlcnR5X2NvZGVfYWxyZWFk
eV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcihBU0NJSUxpdGVyYWwoImNv
ZGUiKSwgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxDb2RlU2V0PigpOwor
ICAgICAgICB9CisKKyAgICAgICAgb3BlcmF0b3IgUmVmUHRyPEVycm9yPiYgKCkKKyAgICAgICAg
eworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1
bHRfaXNfbm90X3JlYWR5KTsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihFcnJv
cikgPT0gc2l6ZW9mKEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0KSwgY2Fubm90X2Nhc3QpOwor
ICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxFcnJvcj4qPigmbV9y
ZXN1bHQpOworICAgICAgICB9CisKKyAgICAgICAgUGFzc1JlZlB0cjxFcnJvcj4gcmVsZWFzZSgp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBSZWZQdHI8RXJyb3I+KCp0aGlzKS5yZWxl
YXNlKCk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgLyoKKyAgICAgKiBTeW50aGV0aWMgY29u
c3RydWN0b3I6CisgICAgICogUmVmUHRyPEVycm9yPiByZXN1bHQgPSBFcnJvcjo6Y3JlYXRlKCkK
KyAgICAgKiAgICAgLnNldE1lc3NhZ2UoLi4uKQorICAgICAqICAgICAuc2V0Q29kZSguLi4pOwor
ICAgICAqLworICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEluc3BlY3Rvcjo6SW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKSk7CisgICAgfQorICAgIHR5cGVkZWYgSW5zcGVjdG9yOjpUeXBlQnVp
bGRlcjo6U3RydWN0SXRlbVRyYWl0cyBJdGVtVHJhaXRzOworfTsKKworfSAvLyBEYXRhYmFzZQor
I2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0UpCisKKworCit9IC8vIG5hbWVzcGFjZSBUeXBl
QnVpbGRlcgorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJ
TlNQRUNUT1IpCisKKyNlbmRpZiAvLyAhZGVmaW5lZChJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJz
X2gpCisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuaAorCisjIyMgQmVn
aW4gRmlsZTogSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
Y29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogSmF2
YVNjcmlwdENvcmUvcmVwbGF5L3NjcmlwdHMvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQorCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5o
IgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcu
aD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK25hbWVzcGFjZSBUeXBlQnVpbGRlciB7CisK
K3N0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBlbnVtX2NvbnN0YW50X3ZhbHVlc1tdID0geworICAg
ICJyZWQiLAorICAgICJncmVlbiIsCisgICAgImJsdWUiLAorICAgICJjeWFuIiwKKyAgICAibWFn
ZW50YSIsCisgICAgInllbGxvdyIsCisgICAgImJsYWNrIiwKK307CisKK1N0cmluZyBnZXRUZXN0
RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpIHsKKyAgICByZXR1cm4gZW51bV9jb25zdGFudF92
YWx1ZXNbY29kZV07Cit9CisKKworCit9IC8vIG5hbWVzcGFjZSBUeXBlQnVpbGRlcgorCit9IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyMj
IyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5jcHAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9jb21t
YW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbi1yZXN1bHQgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvY29t
bWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0Cm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjE5OWU3N2M3ZTYwZTNkNzNhMDE0YmNkOGRjMzhiM2RmOTRhNGYyZjIKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJz
Lmpzb24tcmVzdWx0CkBAIC0wLDAgKzEsNjMxIEBACisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9y
VGVzdEJhY2tlbmRDb21tYW5kcy5qcworLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9w
dGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogSmF2
YVNjcmlwdENvcmUvcmVwbGF5L3NjcmlwdHMvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQorCisv
LyBEYXRhYmFzZS4KK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFbnVtKCJEYXRhYmFzZS5Qcmlt
YXJ5Q29sb3JzIiwge1JlZDogInJlZCIsIEdyZWVuOiAiZ3JlZW4iLCBCbHVlOiAiYmx1ZSJ9KTsK
K0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJEYXRhYmFzZS5leGVjdXRlQWxsT3B0
aW9uYWxQYXJhbWV0ZXJzIiwgW3sibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogIm9iamVj
dCIsICJvcHRpb25hbCI6IHRydWV9LCB7Im5hbWUiOiAibm90ZXMiLCAidHlwZSI6ICJzdHJpbmci
LCAib3B0aW9uYWwiOiB0cnVlfSwgeyJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJl
ciIsICJvcHRpb25hbCI6IHRydWV9LCB7Im5hbWUiOiAidmFsdWVzIiwgInR5cGUiOiAib2JqZWN0
IiwgIm9wdGlvbmFsIjogdHJ1ZX0sIHsibmFtZSI6ICJwYXlsb2FkIiwgInR5cGUiOiAib2JqZWN0
IiwgIm9wdGlvbmFsIjogdHJ1ZX0sIHsibmFtZSI6ICJkYXRhYmFzZUlkIiwgInR5cGUiOiAibnVt
YmVyIiwgIm9wdGlvbmFsIjogdHJ1ZX0sIHsibmFtZSI6ICJzcWxFcnJvciIsICJ0eXBlIjogIm9i
amVjdCIsICJvcHRpb25hbCI6IHRydWV9LCB7Im5hbWUiOiAic2NyZWVuQ29sb3IiLCAidHlwZSI6
ICJzdHJpbmciLCAib3B0aW9uYWwiOiB0cnVlfSwgeyJuYW1lIjogInByaW50Q29sb3IiLCAidHlw
ZSI6ICJzdHJpbmciLCAib3B0aW9uYWwiOiB0cnVlfV0sIFsiY29sdW1uTmFtZXMiLCAibm90ZXMi
LCAidGltZXN0YW1wIiwgInZhbHVlcyIsICJwYXlsb2FkIiwgImRhdGFiYXNlSWQiLCAic3FsRXJy
b3IiLCAic2NyZWVuQ29sb3IiLCAicHJpbnRDb2xvciJdKTsKK0luc3BlY3RvckJhY2tlbmQucmVn
aXN0ZXJDb21tYW5kKCJEYXRhYmFzZS5leGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMiLCBbeyJu
YW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAib2JqZWN0IiwgIm9wdGlvbmFsIjogZmFsc2V9
LCB7Im5hbWUiOiAibm90ZXMiLCAidHlwZSI6ICJzdHJpbmciLCAib3B0aW9uYWwiOiBmYWxzZX0s
IHsibmFtZSI6ICJ0aW1lc3RhbXAiLCAidHlwZSI6ICJudW1iZXIiLCAib3B0aW9uYWwiOiBmYWxz
ZX0sIHsibmFtZSI6ICJ2YWx1ZXMiLCAidHlwZSI6ICJvYmplY3QiLCAib3B0aW9uYWwiOiBmYWxz
ZX0sIHsibmFtZSI6ICJwYXlsb2FkIiwgInR5cGUiOiAib2JqZWN0IiwgIm9wdGlvbmFsIjogZmFs
c2V9LCB7Im5hbWUiOiAiZGF0YWJhc2VJZCIsICJ0eXBlIjogIm51bWJlciIsICJvcHRpb25hbCI6
IGZhbHNlfSwgeyJuYW1lIjogInNxbEVycm9yIiwgInR5cGUiOiAib2JqZWN0IiwgIm9wdGlvbmFs
IjogZmFsc2V9LCB7Im5hbWUiOiAic2NyZWVuQ29sb3IiLCAidHlwZSI6ICJzdHJpbmciLCAib3B0
aW9uYWwiOiBmYWxzZX0sIHsibmFtZSI6ICJwcmludENvbG9yIiwgInR5cGUiOiAic3RyaW5nIiwg
Im9wdGlvbmFsIjogZmFsc2V9XSwgWyJjb2x1bW5OYW1lcyIsICJub3RlcyIsICJ0aW1lc3RhbXAi
LCAidmFsdWVzIiwgInBheWxvYWQiLCAiZGF0YWJhc2VJZCIsICJzcWxFcnJvciIsICJzY3JlZW5D
b2xvciIsICJwcmludENvbG9yIl0pOworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0QmFja2Vu
ZENvbW1hbmRzLmpzCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3Bh
dGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJl
dHVybi1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IEphdmFTY3JpcHRDb3JlL3Jl
cGxheS9zY3JpcHRzL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKKworI2lmbmRlZiBJbnNwZWN0
b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzX2gKKyNkZWZpbmUgSW5zcGVjdG9yVGVzdEJhY2tlbmRE
aXNwYXRjaGVyc19oCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSAiSW5zcGVj
dG9yVGVzdFR5cGVCdWlsZGVycy5oIgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0eXBlZGVm
IFN0cmluZyBFcnJvclN0cmluZzsKKworI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCitjbGFzcyBJ
bnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7CitwdWJsaWM6CisgICAg
Ly8gTmFtZWQgYWZ0ZXIgcGFyYW1ldGVyICdzY3JlZW5Db2xvcicgd2hpbGUgZ2VuZXJhdGluZyBj
b21tYW5kL2V2ZW50IGV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMuCisgICAgZW51bSBjbGFz
cyBTY3JlZW5Db2xvciB7CisgICAgICAgIFJlZCA9IDAsCisgICAgICAgIEdyZWVuID0gMSwKKyAg
ICAgICAgQmx1ZSA9IDIsCisgICAgfTsgLy8gZW51bSBjbGFzcyBTY3JlZW5Db2xvcgorICAgIC8v
IE5hbWVkIGFmdGVyIHBhcmFtZXRlciAncHJpbnRDb2xvcicgd2hpbGUgZ2VuZXJhdGluZyBjb21t
YW5kL2V2ZW50IGV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMuCisgICAgZW51bSBjbGFzcyBQ
cmludENvbG9yIHsKKyAgICAgICAgQ3lhbiA9IDMsCisgICAgICAgIE1hZ2VudGEgPSA0LAorICAg
ICAgICBZZWxsb3cgPSA1LAorICAgICAgICBCbGFjayA9IDYsCisgICAgfTsgLy8gZW51bSBjbGFz
cyBQcmludENvbG9yCisgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRl
cnMoRXJyb3JTdHJpbmcqLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheT4q
IGluX2NvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcqIGluX25vdGVzLCBjb25zdCBkb3VibGUqIGlu
X3RpbWVzdGFtcCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiogaW5f
dmFsdWVzLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlKiBpbl9wYXlsb2FkLCBjb25z
dCBpbnQqIGluX2RhdGFiYXNlSWQsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9i
amVjdD4qIGluX3NxbEVycm9yLCBjb25zdCBTdHJpbmcqIGluX3NjcmVlbkNvbG9yLCBjb25zdCBT
dHJpbmcqIGluX3ByaW50Q29sb3IsIFJlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJh
eTxTdHJpbmc+PiYgb3B0X291dF9jb2x1bW5OYW1lcywgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6
T3B0T3V0cHV0PFN0cmluZz4qIG9wdF9vdXRfbm90ZXMsIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6
Ok9wdE91dHB1dDxkb3VibGU+KiBvcHRfb3V0X3RpbWVzdGFtcCwgSW5zcGVjdG9yOjpUeXBlQnVp
bGRlcjo6T3B0T3V0cHV0PEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0Piogb3B0X291dF92YWx1
ZXMsIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6Ok9wdE91dHB1dDxJbnNwZWN0b3I6Okluc3BlY3Rv
clZhbHVlPiogb3B0X291dF9wYXlsb2FkLCBjb25zdCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpE
YXRhYmFzZTo6RGF0YWJhc2VJZCogY29uc3Qgb3B0X291dF9kYXRhYmFzZUlkLCBSZWZQdHI8SW5z
cGVjdG9yOjpUeXBlQnVpbGRlcjo6RGF0YWJhc2U6OkVycm9yPiYgb3B0X291dF9zcWxFcnJvciwg
SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMqIG9wdF9vdXRf
c2NyZWVuQ29sb3IsIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQ
cmludENvbG9yKiBvcHRfb3V0X3ByaW50Q29sb3IpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZXhl
Y3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKEVycm9yU3RyaW5nKiwgY29uc3QgUmVmUHRyPEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yQXJyYXk+JiBpbl9jb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBpbl9u
b3RlcywgZG91YmxlIGluX3RpbWVzdGFtcCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVj
dG9yT2JqZWN0PiYgaW5fdmFsdWVzLCBJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlIGluX3BheWxv
YWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JP
YmplY3Q+JiBpbl9zcWxFcnJvciwgY29uc3QgU3RyaW5nJiBpbl9zY3JlZW5Db2xvciwgY29uc3Qg
U3RyaW5nJiBpbl9wcmludENvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJy
YXk8U3RyaW5nPj4mIG91dF9jb2x1bW5OYW1lcywgU3RyaW5nKiBvdXRfbm90ZXMsIGRvdWJsZSog
b3V0X3RpbWVzdGFtcCwgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QqIG91dF92YWx1ZXMsIElu
c3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUqIG91dF9wYXlsb2FkLCBpbnQqIG91dF9kYXRhYmFzZUlk
LCBSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6RGF0YWJhc2U6OkVycm9yPiYgb3V0X3Nx
bEVycm9yLCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyog
b3V0X3NjcmVlbkNvbG9yLCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxl
cjo6UHJpbnRDb2xvciogb3V0X3ByaW50Q29sb3IpID0gMDsKK3Byb3RlY3RlZDoKKyAgICB2aXJ0
dWFsIH5JbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpOworfTsKKyNl
bmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQorCisjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkK
K2NsYXNzIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMg
SW5zcGVjdG9yOjpJbnNwZWN0b3JTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJs
aWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0
Y2hlcj4gY3JlYXRlKEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqLCBJbnNw
ZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOworICAgIHZpcnR1YWwgdm9p
ZCBkaXNwYXRjaChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFBhc3NSZWZQdHI8
SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IG1lc3NhZ2UpIG92ZXJyaWRlOworcHJpdmF0ZToK
KyAgICB2b2lkIGV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMobG9uZyBjYWxsSWQsIGNvbnN0
IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsKKyAgICB2b2lkIGV4ZWN1dGVO
b09wdGlvbmFsUGFyYW1ldGVycyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0
b3JPYmplY3QmIG1lc3NhZ2UpOworcHJpdmF0ZToKKyAgICBJbnNwZWN0b3JEYXRhYmFzZUJhY2tl
bmREaXNwYXRjaGVyKEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqLCBJbnNw
ZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOworICAgIEluc3BlY3RvckRh
dGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBtX2FnZW50OworfTsKKyNlbmRpZiAvLyBF
TkFCTEUoU1FMX0RBVEFCQVNFKQorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlm
IC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyNlbmRpZiAvLyAhZGVmaW5lZChJbnNwZWN0b3JUZXN0
QmFja2VuZERpc3BhdGNoZXJzX2gpCisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5k
RGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNw
YXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxs
LXJldHVybi1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IEphdmFTY3JpcHRDb3Jl
L3JlcGxheS9zY3JpcHRzL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKwor
I2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsLmg+CisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisK
KyNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQorSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXI6On5JbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigp
IHsgfQorI2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0UpCisKKyNpZiBFTkFCTEUoU1FMX0RB
VEFCQVNFKQorUGFzc1JlZlB0cjxJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyPiBJ
bnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUoSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyLCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmRE
aXNwYXRjaGVySGFuZGxlciogYWdlbnQpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnNw
ZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyLCBhZ2VudCkp
OworfQorCitJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpJbnNwZWN0b3JEYXRh
YmFzZUJhY2tlbmREaXNwYXRjaGVyKEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5k
RGlzcGF0Y2hlciwgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFn
ZW50KQorICAgIDogSW5zcGVjdG9yU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIoYmFja2Vu
ZERpc3BhdGNoZXIpCisgICAgLCBtX2FnZW50KGFnZW50KQoreworICAgIG1fYmFja2VuZERpc3Bh
dGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbihBU0NJSUxpdGVyYWwoIkRhdGFiYXNl
IiksIHRoaXMpOworfQorCit2b2lkIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6
OmRpc3BhdGNoKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUGFzc1JlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IG1lc3NhZ2UpCit7CisgICAgUmVmPEluc3BlY3RvckRhdGFiYXNlQmFj
a2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOworCisgICAgaWYgKG1ldGhvZCA9PSAiZXhl
Y3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyIpCisgICAgICAgIGV4ZWN1dGVBbGxPcHRpb25hbFBh
cmFtZXRlcnMoY2FsbElkLCAqbWVzc2FnZS5nZXQoKSk7CisgICAgZWxzZSBpZiAobWV0aG9kID09
ICJleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMiKQorICAgICAgICBleGVjdXRlTm9PcHRpb25h
bFBhcmFtZXRlcnMoY2FsbElkLCAqbWVzc2FnZS5nZXQoKSk7CisgICAgZWxzZQorICAgICAgICBt
X2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIEluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgU3RyaW5nKCInIikgKyAiRGF0YWJh
c2UiICsgJy4nICsgbWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOworfQorCit2b2lkIEluc3Bl
Y3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRl
cnMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSkKK3sKKyAgICBS
ZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNy
ZWF0ZSgpOworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IG1l
c3NhZ2UuZ2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicGFyYW1zIikpOworICAgIEluc3BlY3Rvck9i
amVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOworICAgIElu
c3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwor
ICAgIGJvb2wgY29sdW1uTmFtZXNfdmFsdWVGb3VuZCA9IGZhbHNlOworICAgIFJlZlB0cjxJbnNw
ZWN0b3I6Okluc3BlY3RvckFycmF5PiBpbl9jb2x1bW5OYW1lcyA9IEluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyOjpnZXRBcnJheShwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgiY29s
dW1uTmFtZXMiKSwgJmNvbHVtbk5hbWVzX3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRyKTsK
KyAgICBib29sIG5vdGVzX3ZhbHVlRm91bmQgPSBmYWxzZTsKKyAgICBTdHJpbmcgaW5fbm90ZXMg
PSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0
ciwgQVNDSUlMaXRlcmFsKCJub3RlcyIpLCAmbm90ZXNfdmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJv
cnNQdHIpOworICAgIGJvb2wgdGltZXN0YW1wX3ZhbHVlRm91bmQgPSBmYWxzZTsKKyAgICBJbnNw
ZWN0b3I6OlR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8ZG91YmxlPiBpbl90aW1lc3RhbXAgPSBJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0TnVtYmVyKHBhcmFtc0NvbnRhaW5lclB0ciwgQVND
SUlMaXRlcmFsKCJ0aW1lc3RhbXAiKSwgJnRpbWVzdGFtcF92YWx1ZUZvdW5kLCBwcm90b2NvbEVy
cm9yc1B0cik7CisgICAgYm9vbCB2YWx1ZXNfdmFsdWVGb3VuZCA9IGZhbHNlOworICAgIFJlZlB0
cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gaW5fdmFsdWVzID0gSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXI6OmdldE9iamVjdChwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgi
dmFsdWVzIiksICZ2YWx1ZXNfdmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJvcnNQdHIpOworICAgIGJv
b2wgcGF5bG9hZF92YWx1ZUZvdW5kID0gZmFsc2U7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5z
cGVjdG9yVmFsdWU+IGluX3BheWxvYWQgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0
QW55KHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJwYXlsb2FkIiksICZwYXlsb2Fk
X3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRyKTsKKyAgICBib29sIGRhdGFiYXNlSWRfdmFs
dWVGb3VuZCA9IGZhbHNlOworICAgIGludCBpbl9kYXRhYmFzZUlkID0gSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXI6OmdldEludChwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgiZGF0
YWJhc2VJZCIpLCAmZGF0YWJhc2VJZF92YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0cik7Cisg
ICAgYm9vbCBzcWxFcnJvcl92YWx1ZUZvdW5kID0gZmFsc2U7CisgICAgUmVmUHRyPEluc3BlY3Rv
cjo6SW5zcGVjdG9yT2JqZWN0PiBpbl9zcWxFcnJvciA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyOjpnZXRPYmplY3QocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoInNxbEVycm9y
IiksICZzcWxFcnJvcl92YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0cik7CisgICAgYm9vbCBz
Y3JlZW5Db2xvcl92YWx1ZUZvdW5kID0gZmFsc2U7CisgICAgU3RyaW5nIGluX3NjcmVlbkNvbG9y
ID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldFN0cmluZyhwYXJhbXNDb250YWluZXJQ
dHIsIEFTQ0lJTGl0ZXJhbCgic2NyZWVuQ29sb3IiKSwgJnNjcmVlbkNvbG9yX3ZhbHVlRm91bmQs
IHByb3RvY29sRXJyb3JzUHRyKTsKKyAgICBib29sIHByaW50Q29sb3JfdmFsdWVGb3VuZCA9IGZh
bHNlOworICAgIFN0cmluZyBpbl9wcmludENvbG9yID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXI6OmdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgicHJpbnRDb2xv
ciIpLCAmcHJpbnRDb2xvcl92YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0cik7CisgICAgaWYg
KHByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgeworICAgICAgICBTdHJpbmcgZXJyb3JNZXNzYWdl
ID0gU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJl
IHByb2Nlc3NlZCIsICJEYXRhYmFzZS5leGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzIik7Cisg
ICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwg
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkludmFsaWRQYXJhbXMsIGVycm9yTWVzc2FnZSwg
cHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IEVycm9yU3RyaW5nIGVycm9yOworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9
IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1
aWxkZXI6OkFycmF5PFN0cmluZz4+IG91dF9jb2x1bW5OYW1lczsKKyAgICBJbnNwZWN0b3I6OlR5
cGVCdWlsZGVyOjpPcHRPdXRwdXQ8U3RyaW5nPiBvdXRfbm90ZXM7CisgICAgSW5zcGVjdG9yOjpU
eXBlQnVpbGRlcjo6T3B0T3V0cHV0PGRvdWJsZT4gb3V0X3RpbWVzdGFtcDsKKyAgICBJbnNwZWN0
b3I6OlR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IG91
dF92YWx1ZXM7CisgICAgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6T3B0T3V0cHV0PEluc3BlY3Rv
cjo6SW5zcGVjdG9yVmFsdWU+IG91dF9wYXlsb2FkOworICAgIEluc3BlY3Rvcjo6VHlwZUJ1aWxk
ZXI6OkRhdGFiYXNlOjpEYXRhYmFzZUlkIG91dF9kYXRhYmFzZUlkOworICAgIFJlZlB0cjxJbnNw
ZWN0b3I6OlR5cGVCdWlsZGVyOjpEYXRhYmFzZTo6RXJyb3I+IG91dF9zcWxFcnJvcjsKKyAgICBJ
bnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyBvdXRfc2NyZWVu
Q29sb3I7CisgICAgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlBy
aW50Q29sb3Igb3V0X3ByaW50Q29sb3I7CisgICAgbV9hZ2VudC0+ZXhlY3V0ZUFsbE9wdGlvbmFs
UGFyYW1ldGVycygmZXJyb3IsIGNvbHVtbk5hbWVzX3ZhbHVlRm91bmQgPyAmaW5fY29sdW1uTmFt
ZXMgOiBudWxscHRyLCBub3Rlc192YWx1ZUZvdW5kID8gJmluX25vdGVzIDogbnVsbHB0ciwgdGlt
ZXN0YW1wX3ZhbHVlRm91bmQgPyAmaW5fdGltZXN0YW1wIDogbnVsbHB0ciwgdmFsdWVzX3ZhbHVl
Rm91bmQgPyAmaW5fdmFsdWVzIDogbnVsbHB0ciwgcGF5bG9hZF92YWx1ZUZvdW5kID8gJmluX3Bh
eWxvYWQgOiBudWxscHRyLCBkYXRhYmFzZUlkX3ZhbHVlRm91bmQgPyAmaW5fZGF0YWJhc2VJZCA6
IG51bGxwdHIsIHNxbEVycm9yX3ZhbHVlRm91bmQgPyAmaW5fc3FsRXJyb3IgOiBudWxscHRyLCBz
Y3JlZW5Db2xvcl92YWx1ZUZvdW5kID8gJmluX3NjcmVlbkNvbG9yIDogbnVsbHB0ciwgcHJpbnRD
b2xvcl92YWx1ZUZvdW5kID8gJmluX3ByaW50Q29sb3IgOiBudWxscHRyLCBvdXRfY29sdW1uTmFt
ZXMsICZvdXRfbm90ZXMsICZvdXRfdGltZXN0YW1wLCBvdXRfdmFsdWVzLCAmb3V0X3BheWxvYWQs
ICZvdXRfZGF0YWJhc2VJZCwgb3V0X3NxbEVycm9yLCAmb3V0X3NjcmVlbkNvbG9yLCAmb3V0X3By
aW50Q29sb3IpOworCisgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkgeworICAgICAgICBpZiAob3V0
X2NvbHVtbk5hbWVzKQorICAgICAgICAgICAgcmVzdWx0LT5zZXRWYWx1ZShBU0NJSUxpdGVyYWwo
ImNvbHVtbk5hbWVzIiksIG91dF9jb2x1bW5OYW1lcyk7CisgICAgICAgIGlmIChvdXRfbm90ZXMu
aXNBc3NpZ25lZCgpKQorICAgICAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFs
KCJub3RlcyIpLCBvdXRfbm90ZXMuZ2V0VmFsdWUoKSk7CisgICAgICAgIGlmIChvdXRfdGltZXN0
YW1wLmlzQXNzaWduZWQoKSkKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0TnVtYmVyKEFTQ0lJTGl0
ZXJhbCgidGltZXN0YW1wIiksIG91dF90aW1lc3RhbXAuZ2V0VmFsdWUoKSk7CisgICAgICAgIGlm
IChvdXRfdmFsdWVzLmlzQXNzaWduZWQoKSkKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0T2JqZWN0
KEFTQ0lJTGl0ZXJhbCgidmFsdWVzIiksIG91dF92YWx1ZXMuZ2V0VmFsdWUoKSk7CisgICAgICAg
IGlmIChvdXRfcGF5bG9hZC5pc0Fzc2lnbmVkKCkpCisgICAgICAgICAgICByZXN1bHQtPnNldFZh
bHVlKEFTQ0lJTGl0ZXJhbCgicGF5bG9hZCIpLCBvdXRfcGF5bG9hZC5nZXRWYWx1ZSgpKTsKKyAg
ICAgICAgaWYgKG91dF9kYXRhYmFzZUlkLmlzQXNzaWduZWQoKSkKKyAgICAgICAgICAgIHJlc3Vs
dC0+c2V0TnVtYmVyKEFTQ0lJTGl0ZXJhbCgiZGF0YWJhc2VJZCIpLCBvdXRfZGF0YWJhc2VJZC5n
ZXRWYWx1ZSgpKTsKKyAgICAgICAgaWYgKG91dF9zcWxFcnJvcikKKyAgICAgICAgICAgIHJlc3Vs
dC0+c2V0VmFsdWUoQVNDSUlMaXRlcmFsKCJzcWxFcnJvciIpLCBvdXRfc3FsRXJyb3IpOworICAg
ICAgICBpZiAob3V0X3NjcmVlbkNvbG9yLmlzQXNzaWduZWQoKSkKKyAgICAgICAgICAgIHJlc3Vs
dC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgic2NyZWVuQ29sb3IiKSwgb3V0X3NjcmVlbkNvbG9y
LmdldFZhbHVlKCkpOworICAgICAgICBpZiAob3V0X3ByaW50Q29sb3IuaXNBc3NpZ25lZCgpKQor
ICAgICAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJwcmludENvbG9yIiks
IG91dF9wcmludENvbG9yLmdldFZhbHVlKCkpOworICAgIH0KKyAgICBtX2JhY2tlbmREaXNwYXRj
aGVyLT5zZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBlcnJvcik7Cit9CisK
K3ZvaWQgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZU5vT3B0aW9u
YWxQYXJhbWV0ZXJzKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2Up
Cit7CisgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3Rv
ckFycmF5OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250
YWluZXIgPSBtZXNzYWdlLmdldE9iamVjdChBU0NJSUxpdGVyYWwoInBhcmFtcyIpKTsKKyAgICBJ
bnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQo
KTsKKyAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9y
cy5nZXQoKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheT4gaW5fY29sdW1u
TmFtZXMgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0QXJyYXkocGFyYW1zQ29udGFp
bmVyUHRyLCBBU0NJSUxpdGVyYWwoImNvbHVtbk5hbWVzIiksIG51bGxwdHIsIHByb3RvY29sRXJy
b3JzUHRyKTsKKyAgICBTdHJpbmcgaW5fbm90ZXMgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
cjo6Z2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJub3RlcyIpLCBu
dWxscHRyLCBwcm90b2NvbEVycm9yc1B0cik7CisgICAgZG91YmxlIGluX3RpbWVzdGFtcCA9IElu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXROdW1iZXIocGFyYW1zQ29udGFpbmVyUHRyLCBB
U0NJSUxpdGVyYWwoInRpbWVzdGFtcCIpLCBudWxscHRyLCBwcm90b2NvbEVycm9yc1B0cik7Cisg
ICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBpbl92YWx1ZXMgPSBJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0T2JqZWN0KHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlM
aXRlcmFsKCJ2YWx1ZXMiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnNQdHIpOworICAgIFJlZlB0
cjxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiBpbl9wYXlsb2FkID0gSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXI6OmdldEFueShwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgicGF5
bG9hZCIpLCBudWxscHRyLCBwcm90b2NvbEVycm9yc1B0cik7CisgICAgaW50IGluX2RhdGFiYXNl
SWQgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0SW50KHBhcmFtc0NvbnRhaW5lclB0
ciwgQVNDSUlMaXRlcmFsKCJkYXRhYmFzZUlkIiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzUHRy
KTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IGluX3NxbEVycm9yID0g
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldE9iamVjdChwYXJhbXNDb250YWluZXJQdHIs
IEFTQ0lJTGl0ZXJhbCgic3FsRXJyb3IiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnNQdHIpOwor
ICAgIFN0cmluZyBpbl9zY3JlZW5Db2xvciA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpn
ZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoInNjcmVlbkNvbG9yIiks
IG51bGxwdHIsIHByb3RvY29sRXJyb3JzUHRyKTsKKyAgICBTdHJpbmcgaW5fcHJpbnRDb2xvciA9
IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRy
LCBBU0NJSUxpdGVyYWwoInByaW50Q29sb3IiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnNQdHIp
OworICAgIGlmIChwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKKyAgICAgICAgU3RyaW5nIGVy
cm9yTWVzc2FnZSA9IFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVz
JyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiRGF0YWJhc2UuZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0
ZXJzIik7CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3Io
JmNhbGxJZCwgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkludmFsaWRQYXJhbXMsIGVycm9y
TWVzc2FnZSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIEVycm9yU3RyaW5nIGVycm9yOworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPEluc3BlY3Rv
cjo6VHlwZUJ1aWxkZXI6OkFycmF5PFN0cmluZz4+IG91dF9jb2x1bW5OYW1lczsKKyAgICBTdHJp
bmcgb3V0X25vdGVzOworICAgIGRvdWJsZSBvdXRfdGltZXN0YW1wOworICAgIEluc3BlY3Rvcjo6
SW5zcGVjdG9yT2JqZWN0IG91dF92YWx1ZXM7CisgICAgSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1
ZSBvdXRfcGF5bG9hZDsKKyAgICBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpEYXRhYmFzZTo6RGF0
YWJhc2VJZCBvdXRfZGF0YWJhc2VJZDsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRl
cjo6RGF0YWJhc2U6OkVycm9yPiBvdXRfc3FsRXJyb3I7CisgICAgSW5zcGVjdG9yOjpUeXBlQnVp
bGRlcjo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMgb3V0X3NjcmVlbkNvbG9yOworICAgIEluc3Bl
Y3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQcmludENvbG9yIG91dF9wcmlu
dENvbG9yOworICAgIG1fYWdlbnQtPmV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycygmZXJyb3Is
IGluX2NvbHVtbk5hbWVzLCBpbl9ub3RlcywgaW5fdGltZXN0YW1wLCBpbl92YWx1ZXMsIGluX3Bh
eWxvYWQsIGluX2RhdGFiYXNlSWQsIGluX3NxbEVycm9yLCBpbl9zY3JlZW5Db2xvciwgaW5fcHJp
bnRDb2xvciwgb3V0X2NvbHVtbk5hbWVzLCAmb3V0X25vdGVzLCAmb3V0X3RpbWVzdGFtcCwgb3V0
X3ZhbHVlcywgJm91dF9wYXlsb2FkLCAmb3V0X2RhdGFiYXNlSWQsIG91dF9zcWxFcnJvciwgJm91
dF9zY3JlZW5Db2xvciwgJm91dF9wcmludENvbG9yKTsKKworICAgIGlmICghZXJyb3IubGVuZ3Ro
KCkpIHsKKyAgICAgICAgcmVzdWx0LT5zZXRWYWx1ZShBU0NJSUxpdGVyYWwoImNvbHVtbk5hbWVz
IiksIG91dF9jb2x1bW5OYW1lcyk7CisgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKEFTQ0lJTGl0
ZXJhbCgibm90ZXMiKSwgb3V0X25vdGVzKTsKKyAgICAgICAgcmVzdWx0LT5zZXROdW1iZXIoQVND
SUlMaXRlcmFsKCJ0aW1lc3RhbXAiKSwgb3V0X3RpbWVzdGFtcCk7CisgICAgICAgIHJlc3VsdC0+
c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgidmFsdWVzIiksIG91dF92YWx1ZXMpOworICAgICAgICBy
ZXN1bHQtPnNldFZhbHVlKEFTQ0lJTGl0ZXJhbCgicGF5bG9hZCIpLCBvdXRfcGF5bG9hZCk7Cisg
ICAgICAgIHJlc3VsdC0+c2V0TnVtYmVyKEFTQ0lJTGl0ZXJhbCgiZGF0YWJhc2VJZCIpLCBvdXRf
ZGF0YWJhc2VJZCk7CisgICAgICAgIHJlc3VsdC0+c2V0VmFsdWUoQVNDSUlMaXRlcmFsKCJzcWxF
cnJvciIpLCBvdXRfc3FsRXJyb3IpOworICAgICAgICByZXN1bHQtPnNldFN0cmluZyhBU0NJSUxp
dGVyYWwoInNjcmVlbkNvbG9yIiksIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OmdldFRlc3RFbnVt
Q29uc3RhbnRWYWx1ZShvdXRfc2NyZWVuQ29sb3IpKTsKKyAgICAgICAgcmVzdWx0LT5zZXRTdHJp
bmcoQVNDSUlMaXRlcmFsKCJwcmludENvbG9yIiksIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6Omdl
dFRlc3RFbnVtQ29uc3RhbnRWYWx1ZShvdXRfcHJpbnRDb2xvcikpOworICAgIH0KKyAgICBtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBl
cnJvcik7Cit9CisjZW5kaWYgLy8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKKworfSAvLyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorCisjIyMgRW5kIEZp
bGU6IEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxl
OiBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNv
bW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uCisvLyBieSB0
aGUgc2NyaXB0OiBKYXZhU2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySW5z
cGVjdG9yLnB5CisKKyNpZm5kZWYgSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnNfaAor
I2RlZmluZSBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVyc19oCisKKyNpZiBFTkFCTEUo
SU5TUEVDVE9SKQorCisjaW5jbHVkZSAiSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5oIgorI2lu
Y2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4KKyNpbmNsdWRlIDxp
bnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7
CisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQ
RUNUT1IpCisKKyNlbmRpZiAvLyAhZGVmaW5lZChJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRj
aGVyc19oKQorIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5o
CisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJh
bWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IEphdmFTY3JpcHRDb3JlL3JlcGxheS9zY3Jp
cHRzL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkluc3BlY3RvclRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCisKKyNpZiBFTkFCTEUo
SU5TUEVDVE9SKQorCisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFC
TEUoSU5TUEVDVE9SKQorCisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RGcm9udGVuZERpc3Bh
dGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5o
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFy
YW1ldGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBKYXZhU2NyaXB0Q29yZS9yZXBsYXkvc2Ny
aXB0cy9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5CisKKyNpZm5kZWYgSW5zcGVjdG9yVGVzdFR5
cGVCdWlsZGVyc19oCisjZGVmaW5lIEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnNfaAorCisjaWYg
RU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JKU1R5cGVC
dWlsZGVycy5oPgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JUeXBlQnVpbGRlci5oPgor
I2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4K
KworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCituYW1lc3BhY2UgVHlwZUJ1aWxkZXIgewor
CisvLyBGb3J3YXJkIGRlY2xhcmF0aW9ucy4KKyNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQorbmFt
ZXNwYWNlIERhdGFiYXNlIHsKK2NsYXNzIEVycm9yOworZW51bSBjbGFzcyBQcmltYXJ5Q29sb3Jz
OworfSAvLyBEYXRhYmFzZQorI2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0UpCisvLyBFbmQg
b2YgZm9yd2FyZCBkZWNsYXJhdGlvbnMuCisKKworLy8gVHlwZWRlZnMuCisjaWYgRU5BQkxFKFNR
TF9EQVRBQkFTRSkKK25hbWVzcGFjZSBEYXRhYmFzZSB7CisvKiBVbmlxdWUgaWRlbnRpZmllciBv
ZiBEYXRhYmFzZSBvYmplY3QuICovCit0eXBlZGVmIGludCBEYXRhYmFzZUlkOworfSAvLyBEYXRh
YmFzZQorI2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0UpCisvLyBFbmQgb2YgdHlwZWRlZnMu
CisKK1N0cmluZyBnZXRUZXN0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpOworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBTdHJpbmcgZ2V0VGVzdEVudW1Db25zdGFudFZhbHVlKFQgZW51bVZhbHVl
KQoreworICAgIHJldHVybiBnZXRUZXN0RW51bUNvbnN0YW50VmFsdWUoc3RhdGljX2Nhc3Q8aW50
PihlbnVtVmFsdWUpKTsKK30KKworI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCituYW1lc3BhY2Ug
RGF0YWJhc2UgeworLyogICovCitlbnVtIGNsYXNzIFByaW1hcnlDb2xvcnMgeworICAgIFJlZCA9
IDAsCisgICAgR3JlZW4gPSAxLAorICAgIEJsdWUgPSAyLAorfTsgLy8gZW51bSBjbGFzcyBQcmlt
YXJ5Q29sb3JzCisvKiBEYXRhYmFzZSBlcnJvci4gKi8KK2NsYXNzIEVycm9yIDogcHVibGljIElu
c3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0QmFzZSB7CitwdWJsaWM6CisgICAgZW51bSB7CisgICAg
ICAgIE5vRmllbGRzU2V0ID0gMCwKKyAgICAgICAgTWVzc2FnZVNldCA9IDEgPDwgMCwKKyAgICAg
ICAgQ29kZVNldCA9IDEgPDwgMSwKKyAgICAgICAgQWxsRmllbGRzU2V0ID0gKE1lc3NhZ2VTZXQg
fCBDb2RlU2V0KQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CisgICAgY2xhc3Mg
QnVpbGRlciB7CisgICAgcHJpdmF0ZToKKyAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVj
dG9yT2JqZWN0PiBtX3Jlc3VsdDsKKworICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRl
cjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CisgICAg
ICAgIH0KKworICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8LypFcnJvciovSW5zcGVjdG9yOjpJ
bnNwZWN0b3JPYmplY3Q+IHB0cikKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0
ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKKyAgICAgICAgfQorICAgICAgICBmcmll
bmQgY2xhc3MgRXJyb3I7CisgICAgcHVibGljOgorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBN
ZXNzYWdlU2V0PiYgc2V0TWVzc2FnZShjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgICAgICB7Cisg
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTWVzc2FnZVNldCksIHByb3BlcnR5
X21lc3NhZ2VfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZyhB
U0NJSUxpdGVyYWwoIm1lc3NhZ2UiKSwgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RT
dGF0ZTxNZXNzYWdlU2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8
IENvZGVTZXQ+JiBzZXRDb2RlKGludCB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoIShTVEFURSAmIENvZGVTZXQpLCBwcm9wZXJ0eV9jb2RlX2FscmVhZHlfc2V0
KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoQVNDSUlMaXRlcmFsKCJjb2RlIiks
IHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q29kZVNldD4oKTsKKyAgICAg
ICAgfQorCisgICAgICAgIG9wZXJhdG9yIFJlZlB0cjxFcnJvcj4mICgpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lz
X25vdF9yZWFkeSk7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoRXJyb3IpID09
IHNpemVvZihJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCksIGNhbm5vdF9jYXN0KTsKKyAgICAg
ICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8RXJyb3I+Kj4oJm1fcmVzdWx0
KTsKKyAgICAgICAgfQorCisgICAgICAgIFBhc3NSZWZQdHI8RXJyb3I+IHJlbGVhc2UoKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gUmVmUHRyPEVycm9yPigqdGhpcykucmVsZWFzZSgp
OworICAgICAgICB9CisgICAgfTsKKworICAgIC8qCisgICAgICogU3ludGhldGljIGNvbnN0cnVj
dG9yOgorICAgICAqIFJlZlB0cjxFcnJvcj4gcmVzdWx0ID0gRXJyb3I6OmNyZWF0ZSgpCisgICAg
ICogICAgIC5zZXRNZXNzYWdlKC4uLikKKyAgICAgKiAgICAgLnNldENvZGUoLi4uKTsKKyAgICAg
Ki8KKyAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVj
dDo6Y3JlYXRlKCkpOworICAgIH0KKyAgICB0eXBlZGVmIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6
OlN0cnVjdEl0ZW1UcmFpdHMgSXRlbVRyYWl0czsKK307CisKK30gLy8gRGF0YWJhc2UKKyNlbmRp
ZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQorCisKKworfSAvLyBuYW1lc3BhY2UgVHlwZUJ1aWxk
ZXIKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVD
VE9SKQorCisjZW5kaWYgLy8gIWRlZmluZWQoSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVyc19oKQor
IyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmgKKworIyMjIEJlZ2luIEZp
bGU6IEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1h
bmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUg
c2NyaXB0OiBKYXZhU2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySW5zcGVj
dG9yLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JUZXN0VHlw
ZUJ1aWxkZXJzLmgiCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSA8d3RmL3Rl
eHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworbmFtZXNwYWNlIFR5cGVC
dWlsZGVyIHsKKworc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGVudW1fY29uc3RhbnRfdmFsdWVz
W10gPSB7CisgICAgInJlZCIsCisgICAgImdyZWVuIiwKKyAgICAiYmx1ZSIsCisgICAgImN5YW4i
LAorICAgICJtYWdlbnRhIiwKKyAgICAieWVsbG93IiwKKyAgICAiYmxhY2siLAorfTsKKworU3Ry
aW5nIGdldFRlc3RFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSkgeworICAgIHJldHVybiBlbnVt
X2NvbnN0YW50X3ZhbHVlc1tjb2RlXTsKK30KKworCisKK30gLy8gbmFtZXNwYWNlIFR5cGVCdWls
ZGVyCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BF
Q1RPUikKKworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmNwcApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4
cGVjdGVkL2RvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbi1yZXN1bHQgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZG9t
YWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uLXJlc3VsdApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5j
ZjZlMDIyM2I0OWFkYTQyN2E2NDMwZTU3MWE0NzA4M2FkYzE0ODMyCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVk
L2RvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbi1yZXN1bHQKQEAgLTAsMCAr
MSw1NTIgQEAKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0QmFja2VuZENvbW1hbmRzLmpz
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNv
bgorLy8gYnkgdGhlIHNjcmlwdDogSmF2YVNjcmlwdENvcmUvcmVwbGF5L3NjcmlwdHMvQ29kZUdl
bmVyYXRvckluc3BlY3Rvci5weQorCisvLyBOZXR3b3JrMS4KK0luc3BlY3RvckJhY2tlbmQucmVn
aXN0ZXJDb21tYW5kKCJOZXR3b3JrMS5sb2FkUmVzb3VyY2UxIiwgW10sIFtdKTsKKworLy8gTmV0
d29yazMuCitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiTmV0d29yazMubG9hZFJl
c291cmNlMSIsIFtdLCBbXSk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiTmV0
d29yazMubG9hZFJlc291cmNlMiIsIFtdLCBbXSk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVy
Q29tbWFuZCgiTmV0d29yazMubG9hZFJlc291cmNlMyIsIFtdLCBbXSk7CitJbnNwZWN0b3JCYWNr
ZW5kLnJlZ2lzdGVyQ29tbWFuZCgiTmV0d29yazMubG9hZFJlc291cmNlNCIsIFtdLCBbXSk7CitJ
bnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiTmV0d29yazMubG9hZFJlc291cmNlNSIs
IFtdLCBbXSk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiTmV0d29yazMubG9h
ZFJlc291cmNlNiIsIFtdLCBbXSk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgi
TmV0d29yazMubG9hZFJlc291cmNlNyIsIFtdLCBbXSk7CisjIyMgRW5kIEZpbGU6IEluc3BlY3Rv
clRlc3RCYWNrZW5kQ29tbWFuZHMuanMKKworIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RC
YWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW5zLXdpdGgtdmFyeWlu
Zy1jb21tYW5kLXNpemVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IEphdmFTY3JpcHRDb3JlL3Jl
cGxheS9zY3JpcHRzL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKKworI2lmbmRlZiBJbnNwZWN0
b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzX2gKKyNkZWZpbmUgSW5zcGVjdG9yVGVzdEJhY2tlbmRE
aXNwYXRjaGVyc19oCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSAiSW5zcGVj
dG9yVGVzdFR5cGVCdWlsZGVycy5oIgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0eXBlZGVm
IFN0cmluZyBFcnJvclN0cmluZzsKKworY2xhc3MgSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlz
cGF0Y2hlckhhbmRsZXIgeworcHVibGljOgorICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2Ux
KEVycm9yU3RyaW5nKikgPSAwOworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgfkluc3BlY3Rvck5l
dHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCk7Cit9OworCitjbGFzcyBJbnNwZWN0b3JO
ZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2
b2lkIGxvYWRSZXNvdXJjZTEoRXJyb3JTdHJpbmcqKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGxv
YWRSZXNvdXJjZTIoRXJyb3JTdHJpbmcqKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGxvYWRSZXNv
dXJjZTMoRXJyb3JTdHJpbmcqKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTQo
RXJyb3JTdHJpbmcqKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTUoRXJyb3JT
dHJpbmcqKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTYoRXJyb3JTdHJpbmcq
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTcoRXJyb3JTdHJpbmcqKSA9IDA7
Citwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB+SW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXIoKTsKK307CisKK2NsYXNzIEluc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3Bh
dGNoZXIgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JTdXBwbGVtZW50YWxCYWNr
ZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9y
TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXIqLCBJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxl
ciopOworICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5n
JiBtZXRob2QsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IG1lc3NhZ2Up
IG92ZXJyaWRlOworcHJpdmF0ZToKKyAgICB2b2lkIGxvYWRSZXNvdXJjZTEobG9uZyBjYWxsSWQs
IGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsKK3ByaXZhdGU6Cisg
ICAgSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcihJbnNwZWN0b3I6Okluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyKiwgSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXIqKTsKKyAgICBJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciog
bV9hZ2VudDsKK307CisKK2NsYXNzIEluc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXIg
ZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JTdXBwbGVtZW50YWxCYWNrZW5kRGlz
cGF0Y2hlciB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yTmV0d29y
azNCYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXIqLCBJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwor
ICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBtZXRo
b2QsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IG1lc3NhZ2UpIG92ZXJy
aWRlOworcHJpdmF0ZToKKyAgICB2b2lkIGxvYWRSZXNvdXJjZTEobG9uZyBjYWxsSWQsIGNvbnN0
IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsKKyAgICB2b2lkIGxvYWRSZXNv
dXJjZTIobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0JiBtZXNz
YWdlKTsKKyAgICB2b2lkIGxvYWRSZXNvdXJjZTMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rv
cjo6SW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsKKyAgICB2b2lkIGxvYWRSZXNvdXJjZTQobG9u
ZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsKKyAg
ICB2b2lkIGxvYWRSZXNvdXJjZTUobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVj
dG9yT2JqZWN0JiBtZXNzYWdlKTsKKyAgICB2b2lkIGxvYWRSZXNvdXJjZTYobG9uZyBjYWxsSWQs
IGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsKKyAgICB2b2lkIGxv
YWRSZXNvdXJjZTcobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0
JiBtZXNzYWdlKTsKK3ByaXZhdGU6CisgICAgSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0
Y2hlcihJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiwgSW5zcGVjdG9yTmV0
d29yazNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKKyAgICBJbnNwZWN0b3JOZXR3b3JrM0Jh
Y2tlbmREaXNwYXRjaGVySGFuZGxlciogbV9hZ2VudDsKK307CisKK30gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKworI2VuZGlmIC8vICFkZWZp
bmVkKEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnNfaCkKKyMjIyBFbmQgRmlsZTogSW5z
cGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0
b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW5zLXdp
dGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IEphdmFTY3Jp
cHRDb3JlL3JlcGxheS9zY3JpcHRzL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMu
aCIKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsLmg+CisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVl
cy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3Rv
ciB7CisKK0luc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjp+SW5zcGVj
dG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKSB7IH0KK0luc3BlY3Rvck5ldHdv
cmszQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjp+SW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlz
cGF0Y2hlckhhbmRsZXIoKSB7IH0KKworUGFzc1JlZlB0cjxJbnNwZWN0b3JOZXR3b3JrMUJhY2tl
bmREaXNwYXRjaGVyPiBJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUo
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyLCBJbnNwZWN0b3JO
ZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCit7CisgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNw
YXRjaGVyLCBhZ2VudCkpOworfQorCitJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVy
OjpJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyKEluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlciwgSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXIqIGFnZW50KQorICAgIDogSW5zcGVjdG9yU3VwcGxlbWVudGFsQmFja2VuZERp
c3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIpCisgICAgLCBtX2FnZW50KGFnZW50KQoreworICAg
IG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbihBU0NJSUxp
dGVyYWwoIk5ldHdvcmsxIiksIHRoaXMpOworfQorCit2b2lkIEluc3BlY3Rvck5ldHdvcmsxQmFj
a2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIG1ldGhv
ZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1lc3NhZ2UpCit7CisgICAgUmVmPEluc3Bl
Y3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOworCisgICAgaWYg
KG1ldGhvZCA9PSAibG9hZFJlc291cmNlMSIpCisgICAgICAgIGxvYWRSZXNvdXJjZTEoY2FsbElk
LCAqbWVzc2FnZS5nZXQoKSk7CisgICAgZWxzZQorICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVy
LT5yZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
OjpNZXRob2ROb3RGb3VuZCwgU3RyaW5nKCInIikgKyAiTmV0d29yazEiICsgJy4nICsgbWV0aG9k
ICsgIicgd2FzIG5vdCBmb3VuZCIpOworfQorCit2b2lkIEluc3BlY3Rvck5ldHdvcmsxQmFja2Vu
ZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTEobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9i
amVjdCYpCit7CisgICAgRXJyb3JTdHJpbmcgZXJyb3I7CisgICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBtX2FnZW50LT5s
b2FkUmVzb3VyY2UxKCZlcnJvcik7CisKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVz
cG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBlcnJvcik7Cit9CisKK1Bhc3NSZWZQdHI8
SW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcj4gSW5zcGVjdG9yTmV0d29yazNCYWNr
ZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5k
RGlzcGF0Y2hlciwgSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFn
ZW50KQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW5zcGVjdG9yTmV0d29yazNCYWNrZW5k
RGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlciwgYWdlbnQpKTsKK30KKworSW5zcGVjdG9yTmV0
d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6SW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hl
cihJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIsIEluc3BlY3Rv
ck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKKyAgICA6IEluc3BlY3Rv
clN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyKQorICAgICwg
bV9hZ2VudChhZ2VudCkKK3sKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3Bh
dGNoZXJGb3JEb21haW4oQVNDSUlMaXRlcmFsKCJOZXR3b3JrMyIpLCB0aGlzKTsKK30KKwordm9p
ZCBJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIGNhbGxJ
ZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtZXNz
YWdlKQoreworICAgIFJlZjxJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyPiBwcm90
ZWN0KCp0aGlzKTsKKworICAgIHR5cGVkZWYgdm9pZCAoSW5zcGVjdG9yTmV0d29yazNCYWNrZW5k
RGlzcGF0Y2hlcjo6KkNhbGxIYW5kbGVyKShsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yOjpJ
bnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpOworICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIENh
bGxIYW5kbGVyPiBEaXNwYXRjaE1hcDsKKyAgICBERVBSRUNBVEVEX0RFRklORV9TVEFUSUNfTE9D
QUwoRGlzcGF0Y2hNYXAsIGRpc3BhdGNoTWFwLCAoKSk7CisgICAgaWYgKGRpc3BhdGNoTWFwLmlz
RW1wdHkoKSkgeworICAgICAgICBzdGF0aWMgY29uc3Qgc3RydWN0IE1ldGhvZFRhYmxlIHsKKyAg
ICAgICAgICAgIGNvbnN0IGNoYXIqIG5hbWU7CisgICAgICAgICAgICBDYWxsSGFuZGxlciBoYW5k
bGVyOworICAgICAgICB9IGNvbW1hbmRzW10gPSB7CisgICAgICAgICAgICB7ICJsb2FkUmVzb3Vy
Y2UxIiwgJkluc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTEg
fSwKKyAgICAgICAgICAgIHsgImxvYWRSZXNvdXJjZTIiLCAmSW5zcGVjdG9yTmV0d29yazNCYWNr
ZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMiB9LAorICAgICAgICAgICAgeyAibG9hZFJlc291
cmNlMyIsICZJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2Uz
IH0sCisgICAgICAgICAgICB7ICJsb2FkUmVzb3VyY2U0IiwgJkluc3BlY3Rvck5ldHdvcmszQmFj
a2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTQgfSwKKyAgICAgICAgICAgIHsgImxvYWRSZXNv
dXJjZTUiLCAmSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNl
NSB9LAorICAgICAgICAgICAgeyAibG9hZFJlc291cmNlNiIsICZJbnNwZWN0b3JOZXR3b3JrM0Jh
Y2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U2IH0sCisgICAgICAgICAgICB7ICJsb2FkUmVz
b3VyY2U3IiwgJkluc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJj
ZTcgfSwKKyAgICAgICAgfTsKKyAgICAgICAgc2l6ZV90IGxlbmd0aCA9IFdURl9BUlJBWV9MRU5H
VEgoY29tbWFuZHMpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytp
KQorICAgICAgICAgICAgZGlzcGF0Y2hNYXAuYWRkKGNvbW1hbmRzW2ldLm5hbWUsIGNvbW1hbmRz
W2ldLmhhbmRsZXIpOworICAgIH0KKworICAgIEhhc2hNYXA8U3RyaW5nLCBDYWxsSGFuZGxlcj46
Oml0ZXJhdG9yIGl0ID0gZGlzcGF0Y2hNYXAuZmluZChtZXRob2QpOworICAgIGlmIChpdCA9PSBk
aXNwYXRjaE1hcC5lbmQoKSkgeworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQ
cm90b2NvbEVycm9yKCZjYWxsSWQsIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2RO
b3RGb3VuZCwgU3RyaW5nKCInIikgKyAiTmV0d29yazMiICsgJy4nICsgbWV0aG9kICsgIicgd2Fz
IG5vdCBmb3VuZCIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgKCgqdGhpcykuKml0
LT52YWx1ZSkoY2FsbElkLCAqbWVzc2FnZS5nZXQoKSk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yTmV0
d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMShsb25nIGNhbGxJZCwgY29uc3Qg
SW5zcGVjdG9yT2JqZWN0JikKK3sKKyAgICBFcnJvclN0cmluZyBlcnJvcjsKKyAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAg
IG1fYWdlbnQtPmxvYWRSZXNvdXJjZTEoJmVycm9yKTsKKworICAgIG1fYmFja2VuZERpc3BhdGNo
ZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIGVycm9yKTsKK30KKwor
dm9pZCBJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UyKGxv
bmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmKQoreworICAgIEVycm9yU3RyaW5nIGVy
cm9yOworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVj
dDo6Y3JlYXRlKCk7CisgICAgbV9hZ2VudC0+bG9hZFJlc291cmNlMigmZXJyb3IpOworCisgICAg
bV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2Uo
KSwgZXJyb3IpOworfQorCit2b2lkIEluc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6
OmxvYWRSZXNvdXJjZTMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYpCit7Cisg
ICAgRXJyb3JTdHJpbmcgZXJyb3I7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0
ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBtX2FnZW50LT5sb2FkUmVzb3VyY2Uz
KCZlcnJvcik7CisKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElk
LCByZXN1bHQucmVsZWFzZSgpLCBlcnJvcik7Cit9CisKK3ZvaWQgSW5zcGVjdG9yTmV0d29yazNC
YWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNChsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVj
dG9yT2JqZWN0JikKK3sKKyAgICBFcnJvclN0cmluZyBlcnJvcjsKKyAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIG1fYWdl
bnQtPmxvYWRSZXNvdXJjZTQoJmVycm9yKTsKKworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNl
bmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIGVycm9yKTsKK30KKwordm9pZCBJ
bnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U1KGxvbmcgY2Fs
bElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmKQoreworICAgIEVycm9yU3RyaW5nIGVycm9yOwor
ICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3Jl
YXRlKCk7CisgICAgbV9hZ2VudC0+bG9hZFJlc291cmNlNSgmZXJyb3IpOworCisgICAgbV9iYWNr
ZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgZXJy
b3IpOworfQorCit2b2lkIEluc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRS
ZXNvdXJjZTYobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYpCit7CisgICAgRXJy
b3JTdHJpbmcgZXJyb3I7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5z
cGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBtX2FnZW50LT5sb2FkUmVzb3VyY2U2KCZlcnJv
cik7CisKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1
bHQucmVsZWFzZSgpLCBlcnJvcik7Cit9CisKK3ZvaWQgSW5zcGVjdG9yTmV0d29yazNCYWNrZW5k
RGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2Jq
ZWN0JikKK3sKKyAgICBFcnJvclN0cmluZyBlcnJvcjsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIG1fYWdlbnQtPmxv
YWRSZXNvdXJjZTcoJmVycm9yKTsKKworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNw
b25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIGVycm9yKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorCisjIyMgRW5kIEZp
bGU6IEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxl
OiBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRv
bWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDog
SmF2YVNjcmlwdENvcmUvcmVwbGF5L3NjcmlwdHMvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQor
CisjaWZuZGVmIEluc3BlY3RvclRlc3RGcm9udGVuZERpc3BhdGNoZXJzX2gKKyNkZWZpbmUgSW5z
cGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnNfaAorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikK
KworI2luY2x1ZGUgIkluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuaCIKKyNpbmNsdWRlIDxpbnNw
ZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLmg+CisjaW5jbHVkZSA8aW5zcGVjdG9yL0lu
c3BlY3RvclZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworfSAv
LyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorCisj
ZW5kaWYgLy8gIWRlZmluZWQoSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnNfaCkKKyMj
IyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVn
aW4gRmlsZTogSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIGRvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbgorLy8gYnkgdGhl
IHNjcmlwdDogSmF2YVNjcmlwdENvcmUvcmVwbGF5L3NjcmlwdHMvQ29kZUdlbmVyYXRvckluc3Bl
Y3Rvci5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yVGVzdEZy
b250ZW5kRGlzcGF0Y2hlcnMuaCIKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit9IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyMjIyBF
bmQgRmlsZTogSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdp
biBGaWxlOiBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9t
YWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBK
YXZhU2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5CisK
KyNpZm5kZWYgSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVyc19oCisjZGVmaW5lIEluc3BlY3RvclRl
c3RUeXBlQnVpbGRlcnNfaAorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUgPGlu
c3BlY3Rvci9JbnNwZWN0b3JKU1R5cGVCdWlsZGVycy5oPgorI2luY2x1ZGUgPGluc3BlY3Rvci9J
bnNwZWN0b3JUeXBlQnVpbGRlci5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5j
bHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCitu
YW1lc3BhY2UgVHlwZUJ1aWxkZXIgeworCisKKworLy8gVHlwZWRlZnMuCituYW1lc3BhY2UgTmV0
d29yazIgeworLyogVW5pcXVlIGxvYWRlciBpZGVudGlmaWVyLiAqLwordHlwZWRlZiBTdHJpbmcg
TG9hZGVySWQ7Cit9IC8vIE5ldHdvcmsyCisvLyBFbmQgb2YgdHlwZWRlZnMuCisKK1N0cmluZyBn
ZXRUZXN0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBTdHJpbmcgZ2V0VGVzdEVudW1Db25zdGFudFZhbHVlKFQgZW51bVZhbHVlKQoreworICAgIHJl
dHVybiBnZXRUZXN0RW51bUNvbnN0YW50VmFsdWUoc3RhdGljX2Nhc3Q8aW50PihlbnVtVmFsdWUp
KTsKK30KKworCisKK30gLy8gbmFtZXNwYWNlIFR5cGVCdWlsZGVyCisKK30gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKworI2VuZGlmIC8vICFk
ZWZpbmVkKEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnNfaCkKKyMjIyBFbmQgRmlsZTogSW5zcGVj
dG9yVGVzdFR5cGVCdWlsZGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0VHlw
ZUJ1aWxkZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW5zLXdpdGgtdmFyeWluZy1jb21t
YW5kLXNpemVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IEphdmFTY3JpcHRDb3JlL3JlcGxheS9z
Y3JpcHRzL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuaCIKKworI2lmIEVOQUJMRShJTlNQ
RUNUT1IpCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNw
ZWN0b3IgeworCituYW1lc3BhY2UgVHlwZUJ1aWxkZXIgeworCitzdGF0aWMgY29uc3QgY2hhciog
Y29uc3QgZW51bV9jb25zdGFudF92YWx1ZXNbXSA9IHsKK307CisKK1N0cmluZyBnZXRUZXN0RW51
bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpIHsKKyAgICByZXR1cm4gZW51bV9jb25zdGFudF92YWx1
ZXNbY29kZV07Cit9CisKKworCit9IC8vIG5hbWVzcGFjZSBUeXBlQnVpbGRlcgorCit9IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyMjIyBF
bmQgRmlsZTogSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5jcHAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9ldmVudHMt
d2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2V2ZW50cy13aXRoLW9wdGlvbmFs
LXBhcmFtZXRlcnMuanNvbi1yZXN1bHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzE0YWY5NTRhODUzZmU5YjRkZWQ3
MmQ2MGQ3NzBmMGYyMGZkMDQzOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9ldmVudHMtd2l0aC1vcHRpb25h
bC1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0CkBAIC0wLDAgKzEsNDk3IEBACisjIyMgQmVnaW4gRmls
ZTogSW5zcGVjdG9yVGVzdEJhY2tlbmRDb21tYW5kcy5qcworLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVu
dHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IEphdmFT
Y3JpcHRDb3JlL3JlcGxheS9zY3JpcHRzL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKKworLy8g
RGF0YWJhc2UuCitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRGF0YWJhc2VEaXNwYXRjaGVyID0g
SW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbkRpc3BhdGNoZXIuYmluZChJbnNwZWN0b3JC
YWNrZW5kLCAiRGF0YWJhc2UiKTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFdmVudCgiRGF0
YWJhc2UuZGlkRXhlY3V0ZU9wdGlvbmFsUGFyYW1ldGVycyIsIFsiY29sdW1uTmFtZXMiLCAibm90
ZXMiLCAidGltZXN0YW1wIiwgInZhbHVlcyIsICJwYXlsb2FkIiwgInNxbEVycm9yIiwgInNjcmVl
bkNvbG9yIiwgInByaW50Q29sb3IiXSk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRXZlbnQo
IkRhdGFiYXNlLmRpZEV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyIsIFsiY29sdW1uTmFtZXMi
LCAibm90ZXMiLCAidGltZXN0YW1wIiwgInZhbHVlcyIsICJwYXlsb2FkIiwgInNxbEVycm9yIiwg
InNjcmVlbkNvbG9yIiwgInByaW50Q29sb3IiXSk7CisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRl
c3RCYWNrZW5kQ29tbWFuZHMuanMKKworIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RCYWNr
ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudHMtd2l0aC1vcHRpb25hbC1w
YXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IEphdmFTY3JpcHRDb3JlL3JlcGxheS9z
Y3JpcHRzL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKKworI2lmbmRlZiBJbnNwZWN0b3JUZXN0
QmFja2VuZERpc3BhdGNoZXJzX2gKKyNkZWZpbmUgSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRj
aGVyc19oCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSAiSW5zcGVjdG9yVGVz
dFR5cGVCdWlsZGVycy5oIgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0eXBlZGVmIFN0cmlu
ZyBFcnJvclN0cmluZzsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBF
TkFCTEUoSU5TUEVDVE9SKQorCisjZW5kaWYgLy8gIWRlZmluZWQoSW5zcGVjdG9yVGVzdEJhY2tl
bmREaXNwYXRjaGVyc19oKQorIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3Bh
dGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hl
cnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMu
anNvbgorLy8gYnkgdGhlIHNjcmlwdDogSmF2YVNjcmlwdENvcmUvcmVwbGF5L3NjcmlwdHMvQ29k
ZUdlbmVyYXRvckluc3BlY3Rvci5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
SW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaWYgRU5BQkxFKElOU1BFQ1RP
UikKKworI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4KKyNp
bmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKK30gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKworIyMjIEVuZCBGaWxl
OiBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTog
SW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVu
dHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IEphdmFT
Y3JpcHRDb3JlL3JlcGxheS9zY3JpcHRzL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKKworI2lm
bmRlZiBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVyc19oCisjZGVmaW5lIEluc3BlY3Rv
clRlc3RGcm9udGVuZERpc3BhdGNoZXJzX2gKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNp
bmNsdWRlICJJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmgiCisjaW5jbHVkZSA8aW5zcGVjdG9y
L0luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oPgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0
b3JWYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKKyNpZiBFTkFC
TEUoU1FMX0RBVEFCQVNFKQorY2xhc3MgSW5zcGVjdG9yRGF0YWJhc2VGcm9udGVuZERpc3BhdGNo
ZXIgeworcHVibGljOgorICAgIEluc3BlY3RvckRhdGFiYXNlRnJvbnRlbmREaXNwYXRjaGVyKElu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSA6IG1faW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyB9CisgICAg
dm9pZCBkaWRFeGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJzKFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpU
eXBlQnVpbGRlcjo6QXJyYXk8U3RyaW5nPj4gY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyogY29u
c3Qgbm90ZXMsIGNvbnN0IGRvdWJsZSogY29uc3QgdGltZXN0YW1wLCBQYXNzUmVmUHRyPEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZXMsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNw
ZWN0b3JWYWx1ZT4gcGF5bG9hZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpE
YXRhYmFzZTo6RXJyb3I+IHNxbEVycm9yLCBjb25zdCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpE
YXRhYmFzZTo6UHJpbWFyeUNvbG9ycyogY29uc3Qgc2NyZWVuQ29sb3IsIGNvbnN0IFN0cmluZyog
Y29uc3QgcHJpbnRDb2xvcik7CisgICAgdm9pZCBkaWRFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRl
cnMoUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheTxTdHJpbmc+PiBjb2x1
bW5OYW1lcywgY29uc3QgU3RyaW5nJiBub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgUGFzc1JlZlB0
cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gdmFsdWVzLCBQYXNzUmVmUHRyPEluc3BlY3Rv
cjo6SW5zcGVjdG9yVmFsdWU+IHBheWxvYWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVp
bGRlcjo6RGF0YWJhc2U6OkVycm9yPiBzcWxFcnJvciwgY29uc3QgSW5zcGVjdG9yOjpUeXBlQnVp
bGRlcjo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMmIHNjcmVlbkNvbG9yLCBjb25zdCBTdHJpbmcm
IHByaW50Q29sb3IpOworcHJpdmF0ZToKKyAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIG1f
aW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOworfTsKKyNlbmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFC
QVNFKQorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQ
RUNUT1IpCisKKyNlbmRpZiAvLyAhZGVmaW5lZChJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRj
aGVyc19oKQorIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5o
CisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uCisv
LyBieSB0aGUgc2NyaXB0OiBKYXZhU2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0cy9Db2RlR2VuZXJh
dG9ySW5zcGVjdG9yLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnNwZWN0
b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKwor
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisK
KyNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQordm9pZCBJbnNwZWN0b3JEYXRhYmFzZUZyb250ZW5k
RGlzcGF0Y2hlcjo6ZGlkRXhlY3V0ZU9wdGlvbmFsUGFyYW1ldGVycyhQYXNzUmVmUHRyPEluc3Bl
Y3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5PFN0cmluZz4+IGNvbHVtbk5hbWVzLCBjb25zdCBTdHJp
bmcqIGNvbnN0IG5vdGVzLCBjb25zdCBkb3VibGUqIGNvbnN0IHRpbWVzdGFtcCwgUGFzc1JlZlB0
cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gdmFsdWVzLCBQYXNzUmVmUHRyPEluc3BlY3Rv
cjo6SW5zcGVjdG9yVmFsdWU+IHBheWxvYWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVp
bGRlcjo6RGF0YWJhc2U6OkVycm9yPiBzcWxFcnJvciwgY29uc3QgSW5zcGVjdG9yOjpUeXBlQnVp
bGRlcjo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMqIGNvbnN0IHNjcmVlbkNvbG9yLCBjb25zdCBT
dHJpbmcqIGNvbnN0IHByaW50Q29sb3IpCit7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
anNvbk1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIGpzb25NZXNzYWdl
LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJtZXRob2QiKSwgQVNDSUlMaXRlcmFsKCJEYXRhYmFz
ZS5kaWRFeGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJzIikpOworICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgaWYg
KGNvbHVtbk5hbWVzKQorICAgICAgICBwYXJhbXNPYmplY3QtPnNldFZhbHVlKEFTQ0lJTGl0ZXJh
bCgiY29sdW1uTmFtZXMiKSwgY29sdW1uTmFtZXMpOworICAgIGlmIChub3RlcykKKyAgICAgICAg
cGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJub3RlcyIpLCAqbm90ZXMpOwor
ICAgIGlmICh0aW1lc3RhbXApCisgICAgICAgIHBhcmFtc09iamVjdC0+c2V0TnVtYmVyKEFTQ0lJ
TGl0ZXJhbCgidGltZXN0YW1wIiksICp0aW1lc3RhbXApOworICAgIGlmICh2YWx1ZXMpCisgICAg
ICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgidmFsdWVzIiksIHZhbHVl
cyk7CisgICAgaWYgKHBheWxvYWQpCisgICAgICAgIHBhcmFtc09iamVjdC0+c2V0VmFsdWUoQVND
SUlMaXRlcmFsKCJwYXlsb2FkIiksICpwYXlsb2FkKTsKKyAgICBpZiAoc3FsRXJyb3IpCisgICAg
ICAgIHBhcmFtc09iamVjdC0+c2V0VmFsdWUoQVNDSUlMaXRlcmFsKCJzcWxFcnJvciIpLCBzcWxF
cnJvcik7CisgICAgaWYgKHNjcmVlbkNvbG9yKQorICAgICAgICBwYXJhbXNPYmplY3QtPnNldFN0
cmluZyhBU0NJSUxpdGVyYWwoInNjcmVlbkNvbG9yIiksICpzY3JlZW5Db2xvcik7CisgICAgaWYg
KHByaW50Q29sb3IpCisgICAgICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJh
bCgicHJpbnRDb2xvciIpLCAqcHJpbnRDb2xvcik7CisgICAganNvbk1lc3NhZ2UtPnNldE9iamVj
dChBU0NJSUxpdGVyYWwoInBhcmFtcyIpLCBwYXJhbXNPYmplY3QpOworCisgICAgbV9pbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChqc29uTWVzc2FnZS0+dG9K
U09OU3RyaW5nKCkpOworfQorCit2b2lkIEluc3BlY3RvckRhdGFiYXNlRnJvbnRlbmREaXNwYXRj
aGVyOjpkaWRFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMoUGFzc1JlZlB0cjxJbnNwZWN0b3I6
OlR5cGVCdWlsZGVyOjpBcnJheTxTdHJpbmc+PiBjb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBu
b3RlcywgZG91YmxlIHRpbWVzdGFtcCwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9i
amVjdD4gdmFsdWVzLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+IHBheWxv
YWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6RGF0YWJhc2U6OkVycm9yPiBz
cWxFcnJvciwgY29uc3QgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6RGF0YWJhc2U6OlByaW1hcnlD
b2xvcnMmIHNjcmVlbkNvbG9yLCBjb25zdCBTdHJpbmcmIHByaW50Q29sb3IpCit7CisgICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4ganNvbk1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0
ZSgpOworICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJtZXRob2QiKSwg
QVNDSUlMaXRlcmFsKCJEYXRhYmFzZS5kaWRFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMiKSk7
CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSW5zcGVjdG9yT2Jq
ZWN0OjpjcmVhdGUoKTsKKyAgICBwYXJhbXNPYmplY3QtPnNldFZhbHVlKEFTQ0lJTGl0ZXJhbCgi
Y29sdW1uTmFtZXMiKSwgY29sdW1uTmFtZXMpOworICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5n
KEFTQ0lJTGl0ZXJhbCgibm90ZXMiKSwgbm90ZXMpOworICAgIHBhcmFtc09iamVjdC0+c2V0TnVt
YmVyKEFTQ0lJTGl0ZXJhbCgidGltZXN0YW1wIiksIHRpbWVzdGFtcCk7CisgICAgcGFyYW1zT2Jq
ZWN0LT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJ2YWx1ZXMiKSwgdmFsdWVzKTsKKyAgICBwYXJh
bXNPYmplY3QtPnNldFZhbHVlKEFTQ0lJTGl0ZXJhbCgicGF5bG9hZCIpLCBwYXlsb2FkKTsKKyAg
ICBwYXJhbXNPYmplY3QtPnNldFZhbHVlKEFTQ0lJTGl0ZXJhbCgic3FsRXJyb3IiKSwgc3FsRXJy
b3IpOworICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgic2NyZWVuQ29s
b3IiKSwgc2NyZWVuQ29sb3IpOworICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKEFTQ0lJTGl0
ZXJhbCgicHJpbnRDb2xvciIpLCBwcmludENvbG9yKTsKKyAgICBqc29uTWVzc2FnZS0+c2V0T2Jq
ZWN0KEFTQ0lJTGl0ZXJhbCgicGFyYW1zIiksIHBhcmFtc09iamVjdCk7CisKKyAgICBtX2luc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGpzb25NZXNzYWdlLT50
b0pTT05TdHJpbmcoKSk7Cit9CisjZW5kaWYgLy8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKKworfSAv
LyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorCisj
IyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAorCisjIyMg
QmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5oCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDog
SmF2YVNjcmlwdENvcmUvcmVwbGF5L3NjcmlwdHMvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQor
CisjaWZuZGVmIEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnNfaAorI2RlZmluZSBJbnNwZWN0b3JU
ZXN0VHlwZUJ1aWxkZXJzX2gKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRlIDxp
bnNwZWN0b3IvSW5zcGVjdG9ySlNUeXBlQnVpbGRlcnMuaD4KKyNpbmNsdWRlIDxpbnNwZWN0b3Iv
SW5zcGVjdG9yVHlwZUJ1aWxkZXIuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2lu
Y2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKwor
bmFtZXNwYWNlIFR5cGVCdWlsZGVyIHsKKworLy8gRm9yd2FyZCBkZWNsYXJhdGlvbnMuCisjaWYg
RU5BQkxFKFNRTF9EQVRBQkFTRSkKK25hbWVzcGFjZSBEYXRhYmFzZSB7CitjbGFzcyBFcnJvcjsK
K30gLy8gRGF0YWJhc2UKKyNlbmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQorLy8gRW5kIG9m
IGZvcndhcmQgZGVjbGFyYXRpb25zLgorCisKKy8vIFR5cGVkZWZzLgorI2lmIEVOQUJMRShTUUxf
REFUQUJBU0UpCituYW1lc3BhY2UgRGF0YWJhc2UgeworLyogVW5pcXVlIGlkZW50aWZpZXIgb2Yg
RGF0YWJhc2Ugb2JqZWN0LiAqLwordHlwZWRlZiBTdHJpbmcgRGF0YWJhc2VJZDsKKwordHlwZWRl
ZiBTdHJpbmcgUHJpbWFyeUNvbG9yczsKK30gLy8gRGF0YWJhc2UKKyNlbmRpZiAvLyBFTkFCTEUo
U1FMX0RBVEFCQVNFKQorLy8gRW5kIG9mIHR5cGVkZWZzLgorCitTdHJpbmcgZ2V0VGVzdEVudW1D
b25zdGFudFZhbHVlKGludCBjb2RlKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gU3RyaW5nIGdl
dFRlc3RFbnVtQ29uc3RhbnRWYWx1ZShUIGVudW1WYWx1ZSkKK3sKKyAgICByZXR1cm4gZ2V0VGVz
dEVudW1Db25zdGFudFZhbHVlKHN0YXRpY19jYXN0PGludD4oZW51bVZhbHVlKSk7Cit9CisKKyNp
ZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQorbmFtZXNwYWNlIERhdGFiYXNlIHsKKy8qIERhdGFiYXNl
IGVycm9yLiAqLworY2xhc3MgRXJyb3IgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmpl
Y3RCYXNlIHsKK3B1YmxpYzoKKyAgICBlbnVtIHsKKyAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAor
ICAgICAgICBNZXNzYWdlU2V0ID0gMSA8PCAwLAorICAgICAgICBDb2RlU2V0ID0gMSA8PCAxLAor
ICAgICAgICBBbGxGaWVsZHNTZXQgPSAoTWVzc2FnZVNldCB8IENvZGVTZXQpCisgICAgfTsKKwor
ICAgIHRlbXBsYXRlPGludCBTVEFURT4KKyAgICBjbGFzcyBCdWlsZGVyIHsKKyAgICBwcml2YXRl
OgorICAgICAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0Owor
CisgICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RT
dGF0ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxC
dWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxk
ZXIoUGFzc1JlZlB0cjwvKkVycm9yKi9JbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gcHRyKQor
ICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1Nl
dCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKKyAgICAgICAgICAgIG1fcmVz
dWx0ID0gcHRyOworICAgICAgICB9CisgICAgICAgIGZyaWVuZCBjbGFzcyBFcnJvcjsKKyAgICBw
dWJsaWM6CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IE1lc3NhZ2VTZXQ+JiBzZXRNZXNzYWdl
KGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKCEoU1RBVEUgJiBNZXNzYWdlU2V0KSwgcHJvcGVydHlfbWVzc2FnZV9hbHJlYWR5X3NldCk7
CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgibWVzc2FnZSIp
LCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE1lc3NhZ2VTZXQ+KCk7Cisg
ICAgICAgIH0KKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQ29kZVNldD4mIHNldENvZGUoaW50
IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYg
Q29kZVNldCksIHByb3BlcnR5X2NvZGVfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1
bHQtPnNldE51bWJlcihBU0NJSUxpdGVyYWwoImNvZGUiKSwgdmFsdWUpOworICAgICAgICAgICAg
cmV0dXJuIGNhc3RTdGF0ZTxDb2RlU2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgb3BlcmF0
b3IgUmVmUHRyPEVycm9yPiYgKCkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKKyAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihFcnJvcikgPT0gc2l6ZW9mKEluc3BlY3Rvcjo6SW5z
cGVjdG9yT2JqZWN0KSwgY2Fubm90X2Nhc3QpOworICAgICAgICAgICAgcmV0dXJuICpyZWludGVy
cHJldF9jYXN0PFJlZlB0cjxFcnJvcj4qPigmbV9yZXN1bHQpOworICAgICAgICB9CisKKyAgICAg
ICAgUGFzc1JlZlB0cjxFcnJvcj4gcmVsZWFzZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBSZWZQdHI8RXJyb3I+KCp0aGlzKS5yZWxlYXNlKCk7CisgICAgICAgIH0KKyAgICB9Owor
CisgICAgLyoKKyAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CisgICAgICogUmVmUHRyPEVy
cm9yPiByZXN1bHQgPSBFcnJvcjo6Y3JlYXRlKCkKKyAgICAgKiAgICAgLnNldE1lc3NhZ2UoLi4u
KQorICAgICAqICAgICAuc2V0Q29kZSguLi4pOworICAgICAqLworICAgIHN0YXRpYyBCdWlsZGVy
PE5vRmllbGRzU2V0PiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9G
aWVsZHNTZXQ+KEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7CisgICAgfQor
ICAgIHR5cGVkZWYgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6U3RydWN0SXRlbVRyYWl0cyBJdGVt
VHJhaXRzOworfTsKKworfSAvLyBEYXRhYmFzZQorI2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJB
U0UpCisKKworCit9IC8vIG5hbWVzcGFjZSBUeXBlQnVpbGRlcgorCit9IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyNlbmRpZiAvLyAhZGVm
aW5lZChJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzX2gpCisjIyMgRW5kIEZpbGU6IEluc3BlY3Rv
clRlc3RUeXBlQnVpbGRlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdFR5cGVC
dWlsZGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1l
dGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBKYXZhU2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0
cy9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmgiCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9S
KQorCisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9y
IHsKKworbmFtZXNwYWNlIFR5cGVCdWlsZGVyIHsKKworc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0
IGVudW1fY29uc3RhbnRfdmFsdWVzW10gPSB7Cit9OworCitTdHJpbmcgZ2V0VGVzdEVudW1Db25z
dGFudFZhbHVlKGludCBjb2RlKSB7CisgICAgcmV0dXJuIGVudW1fY29uc3RhbnRfdmFsdWVzW2Nv
ZGVdOworfQorCisKKworfSAvLyBuYW1lc3BhY2UgVHlwZUJ1aWxkZXIKKworfSAvLyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorCisjIyMgRW5kIEZp
bGU6IEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1kdXBs
aWNhdGUtdHlwZS1kZWNsYXJhdGlvbnMuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWR1cGxpY2F0ZS10eXBl
LWRlY2xhcmF0aW9ucy5qc29uLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ0N2NkZjhlMjhlODU2NjEwYTI2
ZjgxNTQ5NDNmMzZjZjhiN2QxZjQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1kdXBsaWNhdGUt
dHlwZS1kZWNsYXJhdGlvbnMuanNvbi1lcnJvcgpAQCAtMCwwICsxIEBACitFUlJPUjogRHVwbGlj
YXRlIHR5cGUgZGVjbGFyYXRpb246IFJ1bnRpbWUuUmVtb3RlT2JqZWN0SWQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9m
YWlsLW9uLXR5cGUtZGVjbGFyYXRpb24tdXNpbmctdHlwZS1yZWZlcmVuY2UuanNvbi1lcnJvciBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9m
YWlsLW9uLXR5cGUtZGVjbGFyYXRpb24tdXNpbmctdHlwZS1yZWZlcmVuY2UuanNvbi1lcnJvcgpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi40MmY1NzUzYTQzOTYxNDRlYjU2NmM1YzU5NjhkMDQ5YWVjNjE4MmRiCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2V4cGVjdGVkL2ZhaWwtb24tdHlwZS1kZWNsYXJhdGlvbi11c2luZy10eXBlLXJlZmVyZW5j
ZS5qc29uLWVycm9yCkBAIC0wLDAgKzEgQEAKK0VSUk9SOiBUeXBlIHJlZmVyZW5jZSBjYW5ub3Qg
aGF2ZSBib3RoICd0eXBlJyBhbmQgJyRyZWYnIGtleXMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi10eXBl
LWRlY2xhcmF0aW9uLXVzaW5nLXR5cGUtcmVmZXJlbmNlLmpzb24tcmVzdWx0IGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tdHlw
ZS1kZWNsYXJhdGlvbi11c2luZy10eXBlLXJlZmVyZW5jZS5qc29uLXJlc3VsdApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4zZWY0YjUzZGMyOWVjZjcwNmQ0ZDMyZjQ5NTBlOWJhMzhiYjBmODlmCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVj
dGVkL2ZhaWwtb24tdHlwZS1kZWNsYXJhdGlvbi11c2luZy10eXBlLXJlZmVyZW5jZS5qc29uLXJl
c3VsdApAQCAtMCwwICsxLDM1MSBAQAorIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RCYWNr
ZW5kQ29tbWFuZHMuanMKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZmFpbC1vbi10eXBlLWRlY2xhcmF0aW9u
LXVzaW5nLXR5cGUtcmVmZXJlbmNlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IEphdmFTY3JpcHRD
b3JlL3JlcGxheS9zY3JpcHRzL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKKyMjIyBFbmQgRmls
ZTogSW5zcGVjdG9yVGVzdEJhY2tlbmRDb21tYW5kcy5qcworCisjIyMgQmVnaW4gRmlsZTogSW5z
cGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGZhaWwtb24t
dHlwZS1kZWNsYXJhdGlvbi11c2luZy10eXBlLXJlZmVyZW5jZS5qc29uCisvLyBieSB0aGUgc2Ny
aXB0OiBKYXZhU2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySW5zcGVjdG9y
LnB5CisKKyNpZm5kZWYgSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVyc19oCisjZGVmaW5l
IEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnNfaAorCisjaWYgRU5BQkxFKElOU1BFQ1RP
UikKKworI2luY2x1ZGUgIkluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuaCIKKyNpbmNsdWRlIDxp
bnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx3dGYvUGFz
c1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKKwordHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKK30gLy8gbmFtZXNw
YWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKworI2VuZGlmIC8v
ICFkZWZpbmVkKEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnNfaCkKKyMjIyBFbmQgRmls
ZTogSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBJ
bnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBmYWls
LW9uLXR5cGUtZGVjbGFyYXRpb24tdXNpbmctdHlwZS1yZWZlcmVuY2UuanNvbgorLy8gYnkgdGhl
IHNjcmlwdDogSmF2YVNjcmlwdENvcmUvcmVwbGF5L3NjcmlwdHMvQ29kZUdlbmVyYXRvckluc3Bl
Y3Rvci5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yVGVzdEJh
Y2tlbmREaXNwYXRjaGVycy5oIgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUg
PGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4KKyNpbmNsdWRlIDxpbnNwZWN0
b3IvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCitu
YW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisj
ZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0
QmFja2VuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdEZy
b250ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBmYWlsLW9uLXR5cGUtZGVjbGFy
YXRpb24tdXNpbmctdHlwZS1yZWZlcmVuY2UuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogSmF2YVNj
cmlwdENvcmUvcmVwbGF5L3NjcmlwdHMvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQorCisjaWZu
ZGVmIEluc3BlY3RvclRlc3RGcm9udGVuZERpc3BhdGNoZXJzX2gKKyNkZWZpbmUgSW5zcGVjdG9y
VGVzdEZyb250ZW5kRGlzcGF0Y2hlcnNfaAorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2lu
Y2x1ZGUgIkluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuaCIKKyNpbmNsdWRlIDxpbnNwZWN0b3Iv
SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLmg+CisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3Rv
clZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworfSAvLyBuYW1l
c3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorCisjZW5kaWYg
Ly8gIWRlZmluZWQoSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnNfaCkKKyMjIyBFbmQg
RmlsZTogSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmls
ZTogSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IGZhaWwtb24tdHlwZS1kZWNsYXJhdGlvbi11c2luZy10eXBlLXJlZmVyZW5jZS5qc29uCisvLyBi
eSB0aGUgc2NyaXB0OiBKYXZhU2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0cy9Db2RlR2VuZXJhdG9y
SW5zcGVjdG9yLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JU
ZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK30g
Ly8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKwor
IyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKworIyMj
IEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuaAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBmYWlsLW9uLXR5cGUtZGVjbGFyYXRpb24tdXNpbmctdHlwZS1yZWZlcmVuY2UuanNvbgorLy8g
YnkgdGhlIHNjcmlwdDogSmF2YVNjcmlwdENvcmUvcmVwbGF5L3NjcmlwdHMvQ29kZUdlbmVyYXRv
ckluc3BlY3Rvci5weQorCisjaWZuZGVmIEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnNfaAorI2Rl
ZmluZSBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzX2gKKworI2lmIEVOQUJMRShJTlNQRUNUT1Ip
CisKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9ySlNUeXBlQnVpbGRlcnMuaD4KKyNpbmNs
dWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVHlwZUJ1aWxkZXIuaD4KKyNpbmNsdWRlIDx3dGYvQXNz
ZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisKK25hbWVzcGFjZSBJbnNw
ZWN0b3IgeworCisKKworbmFtZXNwYWNlIFR5cGVCdWlsZGVyIHsKKworLy8gRm9yd2FyZCBkZWNs
YXJhdGlvbnMuCituYW1lc3BhY2UgUnVudGltZSB7CitjbGFzcyBSZW1vdGVPYmplY3RJZDsKK30g
Ly8gUnVudGltZQorLy8gRW5kIG9mIGZvcndhcmQgZGVjbGFyYXRpb25zLgorCisKKworCitTdHJp
bmcgZ2V0VGVzdEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKTsKKwordGVtcGxhdGU8dHlwZW5h
bWUgVD4gU3RyaW5nIGdldFRlc3RFbnVtQ29uc3RhbnRWYWx1ZShUIGVudW1WYWx1ZSkKK3sKKyAg
ICByZXR1cm4gZ2V0VGVzdEVudW1Db25zdGFudFZhbHVlKHN0YXRpY19jYXN0PGludD4oZW51bVZh
bHVlKSk7Cit9CisKKworCit9IC8vIG5hbWVzcGFjZSBUeXBlQnVpbGRlcgorCit9IC8vIG5hbWVz
cGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyNlbmRpZiAv
LyAhZGVmaW5lZChJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzX2gpCisjIyMgRW5kIEZpbGU6IElu
c3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVz
dFR5cGVCdWlsZGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZmFpbC1vbi10eXBlLWRlY2xhcmF0
aW9uLXVzaW5nLXR5cGUtcmVmZXJlbmNlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IEphdmFTY3Jp
cHRDb3JlL3JlcGxheS9zY3JpcHRzL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuaCIKKwor
I2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisK
K25hbWVzcGFjZSBJbnNwZWN0b3IgeworCituYW1lc3BhY2UgVHlwZUJ1aWxkZXIgeworCitzdGF0
aWMgY29uc3QgY2hhciogY29uc3QgZW51bV9jb25zdGFudF92YWx1ZXNbXSA9IHsKK307CisKK1N0
cmluZyBnZXRUZXN0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpIHsKKyAgICByZXR1cm4gZW51
bV9jb25zdGFudF92YWx1ZXNbY29kZV07Cit9CisKKworCit9IC8vIG5hbWVzcGFjZSBUeXBlQnVp
bGRlcgorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQ
RUNUT1IpCisKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5jcHAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9l
eHBlY3RlZC9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1kZWNsYXJhdGlv
bi5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2V4cGVjdGVkL2ZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVyZW5jZS1pbi10eXBlLWRlY2xh
cmF0aW9uLmpzb24tZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDNjNzgyZDg5ZGI1NjVkNzI0ZTc1NDBlMzJl
ZGNmZGJkNzlhMmY3MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZl
cmVuY2UtaW4tdHlwZS1kZWNsYXJhdGlvbi5qc29uLWVycm9yCkBAIC0wLDAgKzEgQEAKK0VSUk9S
OiBMb29rdXAgZmFpbGVkIGZvciB0eXBlIHJlZmVyZW5jZTogZHJhZ29uIChyZWZlcmVuY2VkIGZy
b20gZG9tYWluOiBSdW50aW1lKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVy
ZW5jZS1pbi10eXBlLW1lbWJlci5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVy
ZW5jZS1pbi10eXBlLW1lbWJlci5qc29uLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZhZjY2NzJjYmVmMDk2
MzBmZDliZThmZmFkYWNlMTJjNTYxMWNjYTgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi11bmtu
b3duLXR5cGUtcmVmZXJlbmNlLWluLXR5cGUtbWVtYmVyLmpzb24tZXJyb3IKQEAgLTAsMCArMSBA
QAorRVJST1I6IExvb2t1cCBmYWlsZWQgZm9yIHR5cGUgcmVmZXJlbmNlOiBDb2xvciAocmVmZXJl
bmNlZCBmcm9tIGRvbWFpbjogRmFudGFzeSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9zYW1lLXR5cGUtaWQtZGlmZmVy
ZW50LWRvbWFpbi5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3NhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24t
ZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uYjEzMDRmM2RiYzE3OGQ1NmYyNTVjYjNiN2M5ZjA4NmY3OTk1NmEw
NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9leHBlY3RlZC9zYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uLWVy
cm9yCkBAIC0wLDAgKzEgQEAKK0VSUk9SOiBXaGVuIHBhcnNpbmcgZG9tYWluLCByZXF1aXJlZCBw
cm9wZXJ0eSBtaXNzaW5nOiBkb21haW4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9zYW1lLXR5cGUtaWQtZGlmZmVyZW50
LWRvbWFpbi5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9leHBlY3RlZC9zYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uLXJl
c3VsdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4yNTBiYTU0OGY3ZmU3OTY3ODk0NTk1ZGNkZWEzYzNkZWJmZTVlNDlm
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2V4cGVjdGVkL3NhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24tcmVz
dWx0CkBAIC0wLDAgKzEsMzU2IEBACisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdEJhY2tl
bmRDb21tYW5kcy5qcworLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRv
bWFpbi5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBKYXZhU2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0
cy9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5CisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RC
YWNrZW5kQ29tbWFuZHMuanMKKworIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5k
RGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRv
bWFpbi5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBKYXZhU2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0
cy9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5CisKKyNpZm5kZWYgSW5zcGVjdG9yVGVzdEJhY2tl
bmREaXNwYXRjaGVyc19oCisjZGVmaW5lIEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnNf
aAorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUgIkluc3BlY3RvclRlc3RUeXBl
QnVpbGRlcnMuaCIKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordHlwZWRlZiBTdHJpbmcgRXJy
b3JTdHJpbmc7CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxF
KElOU1BFQ1RPUikKKworI2VuZGlmIC8vICFkZWZpbmVkKEluc3BlY3RvclRlc3RCYWNrZW5kRGlz
cGF0Y2hlcnNfaCkKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVy
cy5oCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNw
cAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCisv
LyBieSB0aGUgc2NyaXB0OiBKYXZhU2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0cy9Db2RlR2VuZXJh
dG9ySW5zcGVjdG9yLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnNwZWN0
b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisj
aW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oPgorI2luY2x1ZGUg
PGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5n
Lmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVj
dG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorCisjIyMgRW5kIEZpbGU6IEluc3Bl
Y3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0
b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNhbWUtdHlwZS1p
ZC1kaWZmZXJlbnQtZG9tYWluLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IEphdmFTY3JpcHRDb3Jl
L3JlcGxheS9zY3JpcHRzL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKKworI2lmbmRlZiBJbnNw
ZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVyc19oCisjZGVmaW5lIEluc3BlY3RvclRlc3RGcm9u
dGVuZERpc3BhdGNoZXJzX2gKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRlICJJ
bnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmgiCisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbC5oPgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMu
aD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKK30gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKworI2VuZGlmIC8vICFkZWZp
bmVkKEluc3BlY3RvclRlc3RGcm9udGVuZERpc3BhdGNoZXJzX2gpCisjIyMgRW5kIEZpbGU6IElu
c3BlY3RvclRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IEluc3Bl
Y3RvclRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5
cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBKYXZhU2NyaXB0
Q29yZS9yZXBsYXkvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5CisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5o
IgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcu
aD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgor
CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JU
ZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRl
c3RUeXBlQnVpbGRlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50
LWRvbWFpbi5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBKYXZhU2NyaXB0Q29yZS9yZXBsYXkvc2Ny
aXB0cy9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5CisKKyNpZm5kZWYgSW5zcGVjdG9yVGVzdFR5
cGVCdWlsZGVyc19oCisjZGVmaW5lIEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnNfaAorCisjaWYg
RU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JKU1R5cGVC
dWlsZGVycy5oPgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JUeXBlQnVpbGRlci5oPgor
I2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4K
KworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCituYW1lc3BhY2UgVHlwZUJ1aWxkZXIgewor
CisKKworLy8gVHlwZWRlZnMuCituYW1lc3BhY2UgUnVudGltZSB7CisvKiBVbmlxdWUgb2JqZWN0
IGlkZW50aWZpZXIuICovCit0eXBlZGVmIFN0cmluZyBSZW1vdGVPYmplY3RJZDsKK30gLy8gUnVu
dGltZQorCituYW1lc3BhY2UgUnVudGltZTIgeworLyogVW5pcXVlIG9iamVjdCBpZGVudGlmaWVy
LiAqLwordHlwZWRlZiBTdHJpbmcgUmVtb3RlT2JqZWN0SWQ7Cit9IC8vIFJ1bnRpbWUyCisvLyBF
bmQgb2YgdHlwZWRlZnMuCisKK1N0cmluZyBnZXRUZXN0RW51bUNvbnN0YW50VmFsdWUoaW50IGNv
ZGUpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBTdHJpbmcgZ2V0VGVzdEVudW1Db25zdGFudFZh
bHVlKFQgZW51bVZhbHVlKQoreworICAgIHJldHVybiBnZXRUZXN0RW51bUNvbnN0YW50VmFsdWUo
c3RhdGljX2Nhc3Q8aW50PihlbnVtVmFsdWUpKTsKK30KKworCisKK30gLy8gbmFtZXNwYWNlIFR5
cGVCdWlsZGVyCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxF
KElOU1BFQ1RPUikKKworI2VuZGlmIC8vICFkZWZpbmVkKEluc3BlY3RvclRlc3RUeXBlQnVpbGRl
cnNfaCkKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5oCisKKyMjIyBC
ZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmNwcAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBK
YXZhU2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5CisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJz
LmgiCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworbmFtZXNwYWNlIFR5cGVCdWlsZGVyIHsK
Kworc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGVudW1fY29uc3RhbnRfdmFsdWVzW10gPSB7Cit9
OworCitTdHJpbmcgZ2V0VGVzdEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKSB7CisgICAgcmV0
dXJuIGVudW1fY29uc3RhbnRfdmFsdWVzW2NvZGVdOworfQorCisKKworfSAvLyBuYW1lc3BhY2Ug
VHlwZUJ1aWxkZXIKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFC
TEUoSU5TUEVDVE9SKQorCisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMu
Y3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpz
b24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uLXJl
c3VsdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5jNGQyYTcyY2NmMTc1ZDY1M2ViODdhZGEzODhhZjIwZDdhMWM0NzU5
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlw
ZS5qc29uLXJlc3VsdApAQCAtMCwwICsxLDM1MSBAQAorIyMjIEJlZ2luIEZpbGU6IEluc3BlY3Rv
clRlc3RCYWNrZW5kQ29tbWFuZHMuanMKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlv
bi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IEphdmFTY3Jp
cHRDb3JlL3JlcGxheS9zY3JpcHRzL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKKyMjIyBFbmQg
RmlsZTogSW5zcGVjdG9yVGVzdEJhY2tlbmRDb21tYW5kcy5qcworCisjIyMgQmVnaW4gRmlsZTog
SW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUt
ZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0
OiBKYXZhU2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5
CisKKyNpZm5kZWYgSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVyc19oCisjZGVmaW5lIElu
c3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnNfaAorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikK
KworI2luY2x1ZGUgIkluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuaCIKKyNpbmNsdWRlIDxpbnNw
ZWN0b3IvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1Jl
ZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5z
cGVjdG9yIHsKKwordHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKK30gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKworI2VuZGlmIC8vICFk
ZWZpbmVkKEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnNfaCkKKyMjIyBFbmQgRmlsZTog
SW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNw
ZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRl
Y2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDog
SmF2YVNjcmlwdENvcmUvcmVwbGF5L3NjcmlwdHMvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNw
YXRjaGVycy5oIgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUgPGluc3BlY3Rv
ci9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4KKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVj
dG9yVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8g
RU5BQkxFKElOU1BFQ1RPUikKKworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0QmFja2VuZERp
c3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlz
cGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJp
bWl0aXZlLXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogSmF2YVNjcmlwdENvcmUvcmVwbGF5
L3NjcmlwdHMvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQorCisjaWZuZGVmIEluc3BlY3RvclRl
c3RGcm9udGVuZERpc3BhdGNoZXJzX2gKKyNkZWZpbmUgSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlz
cGF0Y2hlcnNfaAorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUgIkluc3BlY3Rv
clRlc3RUeXBlQnVpbGRlcnMuaCIKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsLmg+CisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPgorI2lu
Y2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
CisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorCisjZW5kaWYgLy8gIWRlZmluZWQoSW5z
cGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnNfaCkKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9y
VGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVz
dEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRp
b24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBKYXZhU2Ny
aXB0Q29yZS9yZXBsYXkvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5CisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVy
cy5oIgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJp
bmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rv
cgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKworIyMjIEVuZCBGaWxlOiBJbnNwZWN0
b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IEluc3BlY3Rv
clRlc3RUeXBlQnVpbGRlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFs
aWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogSmF2YVNjcmlwdENv
cmUvcmVwbGF5L3NjcmlwdHMvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQorCisjaWZuZGVmIElu
c3BlY3RvclRlc3RUeXBlQnVpbGRlcnNfaAorI2RlZmluZSBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxk
ZXJzX2gKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5z
cGVjdG9ySlNUeXBlQnVpbGRlcnMuaD4KKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVHlw
ZUJ1aWxkZXIuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9Q
YXNzUmVmUHRyLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworbmFtZXNwYWNlIFR5
cGVCdWlsZGVyIHsKKworCisKKy8vIFR5cGVkZWZzLgorbmFtZXNwYWNlIFJ1bnRpbWUgeworLyog
VW5pcXVlIG9iamVjdCBpZGVudGlmaWVyLiAqLwordHlwZWRlZiBpbnQgUmVtb3RlT2JqZWN0SWQ7
Cit9IC8vIFJ1bnRpbWUKKy8vIEVuZCBvZiB0eXBlZGVmcy4KKworU3RyaW5nIGdldFRlc3RFbnVt
Q29uc3RhbnRWYWx1ZShpbnQgY29kZSk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IFN0cmluZyBn
ZXRUZXN0RW51bUNvbnN0YW50VmFsdWUoVCBlbnVtVmFsdWUpCit7CisgICAgcmV0dXJuIGdldFRl
c3RFbnVtQ29uc3RhbnRWYWx1ZShzdGF0aWNfY2FzdDxpbnQ+KGVudW1WYWx1ZSkpOworfQorCisK
KworfSAvLyBuYW1lc3BhY2UgVHlwZUJ1aWxkZXIKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
CisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorCisjZW5kaWYgLy8gIWRlZmluZWQoSW5z
cGVjdG9yVGVzdFR5cGVCdWlsZGVyc19oKQorIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0VHlw
ZUJ1aWxkZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMu
Y3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUt
dHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBKYXZhU2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0
cy9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmgiCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9S
KQorCisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9y
IHsKKworbmFtZXNwYWNlIFR5cGVCdWlsZGVyIHsKKworc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0
IGVudW1fY29uc3RhbnRfdmFsdWVzW10gPSB7Cit9OworCitTdHJpbmcgZ2V0VGVzdEVudW1Db25z
dGFudFZhbHVlKGludCBjb2RlKSB7CisgICAgcmV0dXJuIGVudW1fY29uc3RhbnRfdmFsdWVzW2Nv
ZGVdOworfQorCisKKworfSAvLyBuYW1lc3BhY2UgVHlwZUJ1aWxkZXIKKworfSAvLyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorCisjIyMgRW5kIEZp
bGU6IEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJh
dGlvbi1hcnJheS10eXBlLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpz
b24tZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uYjAwYjQ2MmMwOWEwNGEyZjQ2OTAwMmE5YzFhOGJjNzFjZDI4
MGFmMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbi1l
cnJvcgpAQCAtMCwwICsxIEBACitFUlJPUjogTG9va3VwIGZhaWxlZCBmb3IgdHlwZSByZWZlcmVu
Y2U6IGVudW0gKHJlZmVyZW5jZWQgZnJvbSBkb21haW46IERlYnVnZ2VyKQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5
cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWFy
cmF5LXR5cGUuanNvbi1yZXN1bHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWZkNDVhZjNmYmYxYzZkYmNlN2ZjM2Vh
Y2ZiNWNiMzE3OTBhZDM1NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWFycmF5
LXR5cGUuanNvbi1yZXN1bHQKQEAgLTAsMCArMSwzNzQgQEAKKyMjIyBCZWdpbiBGaWxlOiBJbnNw
ZWN0b3JUZXN0QmFja2VuZENvbW1hbmRzLmpzCisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFy
YXRpb24tYXJyYXktdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBKYXZhU2NyaXB0Q29yZS9y
ZXBsYXkvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5CisKKy8vIERlYnVnZ2VyLgor
SW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckVudW0oIkRlYnVnZ2VyLlJlYXNvbiIsIHtEaWVkOiAi
RGllZCIsIEZhaW50ZWQ6ICJGYWludGVkIiwgSHVuZ3J5OiAiSHVuZ3J5In0pOworIyMjIEVuZCBG
aWxlOiBJbnNwZWN0b3JUZXN0QmFja2VuZENvbW1hbmRzLmpzCisKKyMjIyBCZWdpbiBGaWxlOiBJ
bnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1k
ZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IEphdmFTY3JpcHRD
b3JlL3JlcGxheS9zY3JpcHRzL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKKworI2lmbmRlZiBJ
bnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzX2gKKyNkZWZpbmUgSW5zcGVjdG9yVGVzdEJh
Y2tlbmREaXNwYXRjaGVyc19oCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSAi
SW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5oIgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0
eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisK
KyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorCisjZW5kaWYgLy8gIWRlZmluZWQoSW5zcGVj
dG9yVGVzdEJhY2tlbmREaXNwYXRjaGVyc19oKQorIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0
QmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RCYWNr
ZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYXJy
YXktdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBKYXZhU2NyaXB0Q29yZS9yZXBsYXkvc2Ny
aXB0cy9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCisKKyNpZiBFTkFCTEUo
SU5TUEVDVE9SKQorCisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2hhbm5l
bC5oPgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworfSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorCisjIyMg
RW5kIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdp
biBGaWxlOiBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIHR5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBK
YXZhU2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5CisK
KyNpZm5kZWYgSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnNfaAorI2RlZmluZSBJbnNw
ZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVyc19oCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQor
CisjaW5jbHVkZSAiSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5oIgorI2luY2x1ZGUgPGluc3Bl
Y3Rvci9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4KKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5z
cGVjdG9yVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCit9IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyNl
bmRpZiAvLyAhZGVmaW5lZChJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVyc19oKQorIyMj
IEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdp
biBGaWxlOiBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6
IEphdmFTY3JpcHRDb3JlL3JlcGxheS9zY3JpcHRzL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkK
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkluc3BlY3RvclRlc3RGcm9udGVuZERp
c3BhdGNoZXJzLmgiCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSA8d3RmL3Rl
eHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorCisjIyMgRW5kIEZpbGU6
IEluc3BlY3RvclRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTog
SW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFy
YXRpb24tYXJyYXktdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBKYXZhU2NyaXB0Q29yZS9y
ZXBsYXkvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5CisKKyNpZm5kZWYgSW5zcGVj
dG9yVGVzdFR5cGVCdWlsZGVyc19oCisjZGVmaW5lIEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnNf
aAorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0
b3JKU1R5cGVCdWlsZGVycy5oPgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JUeXBlQnVp
bGRlci5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NS
ZWZQdHIuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCituYW1lc3BhY2UgVHlwZUJ1
aWxkZXIgeworCisvLyBGb3J3YXJkIGRlY2xhcmF0aW9ucy4KK25hbWVzcGFjZSBEZWJ1Z2dlciB7
CitlbnVtIGNsYXNzIFJlYXNvbjsKK30gLy8gRGVidWdnZXIKKy8vIEVuZCBvZiBmb3J3YXJkIGRl
Y2xhcmF0aW9ucy4KKworCisvLyBUeXBlZGVmcy4KK25hbWVzcGFjZSBEZWJ1Z2dlciB7Cit0eXBl
ZGVmIGludCBCcmVha3BvaW50SWQ7Cit9IC8vIERlYnVnZ2VyCisKK25hbWVzcGFjZSBSdW50aW1l
IHsKK3R5cGVkZWYgaW50IE9iamVjdElkOworfSAvLyBSdW50aW1lCisvLyBFbmQgb2YgdHlwZWRl
ZnMuCisKK1N0cmluZyBnZXRUZXN0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpOworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBTdHJpbmcgZ2V0VGVzdEVudW1Db25zdGFudFZhbHVlKFQgZW51bVZh
bHVlKQoreworICAgIHJldHVybiBnZXRUZXN0RW51bUNvbnN0YW50VmFsdWUoc3RhdGljX2Nhc3Q8
aW50PihlbnVtVmFsdWUpKTsKK30KKworbmFtZXNwYWNlIERlYnVnZ2VyIHsKKy8qICAqLworZW51
bSBjbGFzcyBSZWFzb24geworICAgIERpZWQgPSAwLAorICAgIEZhaW50ZWQgPSAxLAorICAgIEh1
bmdyeSA9IDIsCit9OyAvLyBlbnVtIGNsYXNzIFJlYXNvbgorfSAvLyBEZWJ1Z2dlcgorCisKKwor
fSAvLyBuYW1lc3BhY2UgVHlwZUJ1aWxkZXIKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisK
KyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorCisjZW5kaWYgLy8gIWRlZmluZWQoSW5zcGVj
dG9yVGVzdFR5cGVCdWlsZGVyc19oKQorIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0VHlwZUJ1
aWxkZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuY3Bw
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uCisvLyBi
eSB0aGUgc2NyaXB0OiBKYXZhU2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0cy9Db2RlR2VuZXJhdG9y
SW5zcGVjdG9yLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JU
ZXN0VHlwZUJ1aWxkZXJzLmgiCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSA8
d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworbmFtZXNwYWNl
IFR5cGVCdWlsZGVyIHsKKworc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGVudW1fY29uc3RhbnRf
dmFsdWVzW10gPSB7CisgICAgIkRpZWQiLAorICAgICJGYWludGVkIiwKKyAgICAiSHVuZ3J5IiwK
K307CisKK1N0cmluZyBnZXRUZXN0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpIHsKKyAgICBy
ZXR1cm4gZW51bV9jb25zdGFudF92YWx1ZXNbY29kZV07Cit9CisKKworCit9IC8vIG5hbWVzcGFj
ZSBUeXBlQnVpbGRlcgorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVO
QUJMRShJTlNQRUNUT1IpCisKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVy
cy5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uLXJlc3VsdCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90
eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uLXJlc3VsdApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45N2I3ZGM2
NzNjYTk3NzM2NjJlZDE3YmMxNjZjOWFjMzJlN2VhNjNlCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUt
ZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24tcmVzdWx0CkBAIC0wLDAgKzEsMzkxIEBACisjIyMg
QmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdEJhY2tlbmRDb21tYW5kcy5qcworLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
Ky8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBK
YXZhU2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5CisK
Ky8vIFJ1bnRpbWUuCitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRW51bSgiUnVudGltZS5MdWNr
eU51bWJlcnMiLCB7Tm9uZTogIjAiLCBOb25lOiAiMSIsIE5vbmU6ICIyIn0pOworSW5zcGVjdG9y
QmFja2VuZC5yZWdpc3RlckVudW0oIlJ1bnRpbWUuRmFybUFuaW1hbHMiLCB7UGlnczogIlBpZ3Mi
LCBDb3dzOiAiQ293cyIsIENhdHM6ICJDYXRzIiwgSGVuczogIkhlbnMifSk7CitJbnNwZWN0b3JC
YWNrZW5kLnJlZ2lzdGVyRW51bSgiUnVudGltZS5Ud29MZWdnZWRBbmltYWxzIiwge0R1Y2tzOiAi
RHVja3MiLCBIZW5zOiAiSGVucyIsIENyb3dzOiAiQ3Jvd3MiLCBGbGFtaW5nb3M6ICJGbGFtaW5n
b3MifSk7CisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kQ29tbWFuZHMuanMKKwor
IyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uCisvLyBieSB0aGUgc2Ny
aXB0OiBKYXZhU2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySW5zcGVjdG9y
LnB5CisKKyNpZm5kZWYgSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVyc19oCisjZGVmaW5l
IEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnNfaAorCisjaWYgRU5BQkxFKElOU1BFQ1RP
UikKKworI2luY2x1ZGUgIkluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuaCIKKyNpbmNsdWRlIDxp
bnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx3dGYvUGFz
c1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKKwordHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKK30gLy8gbmFtZXNw
YWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKworI2VuZGlmIC8v
ICFkZWZpbmVkKEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnNfaCkKKyMjIyBFbmQgRmls
ZTogSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBJ
bnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBl
LWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBKYXZhU2NyaXB0
Q29yZS9yZXBsYXkvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5CisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgi
CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbC5oPgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMu
aD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3Ig
eworCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5T
UEVDVE9SKQorCisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMu
Y3BwCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5o
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24KKy8vIGJ5
IHRoZSBzY3JpcHQ6IEphdmFTY3JpcHRDb3JlL3JlcGxheS9zY3JpcHRzL0NvZGVHZW5lcmF0b3JJ
bnNwZWN0b3IucHkKKworI2lmbmRlZiBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVyc19o
CisjZGVmaW5lIEluc3BlY3RvclRlc3RGcm9udGVuZERpc3BhdGNoZXJzX2gKKworI2lmIEVOQUJM
RShJTlNQRUNUT1IpCisKKyNpbmNsdWRlICJJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmgiCisj
aW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oPgorI2luY2x1ZGUg
PGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5o
PgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9y
IHsKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElO
U1BFQ1RPUikKKworI2VuZGlmIC8vICFkZWZpbmVkKEluc3BlY3RvclRlc3RGcm9udGVuZERpc3Bh
dGNoZXJzX2gpCisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RGcm9udGVuZERpc3BhdGNoZXJz
LmgKKworIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNw
cAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uCisvLyBi
eSB0aGUgc2NyaXB0OiBKYXZhU2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0cy9Db2RlR2VuZXJhdG9y
SW5zcGVjdG9yLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JU
ZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK30g
Ly8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKwor
IyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKworIyMj
IEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuaAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSB0eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBKYXZh
U2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5CisKKyNp
Zm5kZWYgSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVyc19oCisjZGVmaW5lIEluc3BlY3RvclRlc3RU
eXBlQnVpbGRlcnNfaAorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUgPGluc3Bl
Y3Rvci9JbnNwZWN0b3JKU1R5cGVCdWlsZGVycy5oPgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNw
ZWN0b3JUeXBlQnVpbGRlci5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVk
ZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCituYW1l
c3BhY2UgVHlwZUJ1aWxkZXIgeworCisvLyBGb3J3YXJkIGRlY2xhcmF0aW9ucy4KK25hbWVzcGFj
ZSBSdW50aW1lIHsKK2VudW0gY2xhc3MgRmFybUFuaW1hbHM7CitlbnVtIGNsYXNzIEx1Y2t5TnVt
YmVyczsKK2VudW0gY2xhc3MgVHdvTGVnZ2VkQW5pbWFsczsKK30gLy8gUnVudGltZQorLy8gRW5k
IG9mIGZvcndhcmQgZGVjbGFyYXRpb25zLgorCisKKworCitTdHJpbmcgZ2V0VGVzdEVudW1Db25z
dGFudFZhbHVlKGludCBjb2RlKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gU3RyaW5nIGdldFRl
c3RFbnVtQ29uc3RhbnRWYWx1ZShUIGVudW1WYWx1ZSkKK3sKKyAgICByZXR1cm4gZ2V0VGVzdEVu
dW1Db25zdGFudFZhbHVlKHN0YXRpY19jYXN0PGludD4oZW51bVZhbHVlKSk7Cit9CisKK25hbWVz
cGFjZSBSdW50aW1lIHsKKy8qICAqLworZW51bSBjbGFzcyBMdWNreU51bWJlcnMgeworICAgIE5v
bmUgPSAwLAorICAgIE5vbmUgPSAxLAorICAgIE5vbmUgPSAyLAorfTsgLy8gZW51bSBjbGFzcyBM
dWNreU51bWJlcnMKKy8qICAqLworZW51bSBjbGFzcyBGYXJtQW5pbWFscyB7CisgICAgUGlncyA9
IDMsCisgICAgQ293cyA9IDQsCisgICAgQ2F0cyA9IDUsCisgICAgSGVucyA9IDYsCit9OyAvLyBl
bnVtIGNsYXNzIEZhcm1BbmltYWxzCisvKiAgKi8KK2VudW0gY2xhc3MgVHdvTGVnZ2VkQW5pbWFs
cyB7CisgICAgRHVja3MgPSA3LAorICAgIEhlbnMgPSA2LAorICAgIENyb3dzID0gOCwKKyAgICBG
bGFtaW5nb3MgPSA5LAorfTsgLy8gZW51bSBjbGFzcyBUd29MZWdnZWRBbmltYWxzCit9IC8vIFJ1
bnRpbWUKKworCisKK30gLy8gbmFtZXNwYWNlIFR5cGVCdWlsZGVyCisKK30gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKworI2VuZGlmIC8vICFk
ZWZpbmVkKEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnNfaCkKKyMjIyBFbmQgRmlsZTogSW5zcGVj
dG9yVGVzdFR5cGVCdWlsZGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0VHlw
ZUJ1aWxkZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlw
ZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBKYXZhU2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0cy9D
b2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmgiCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQor
CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsK
KworbmFtZXNwYWNlIFR5cGVCdWlsZGVyIHsKKworc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGVu
dW1fY29uc3RhbnRfdmFsdWVzW10gPSB7CisgICAgIjAiLAorICAgICIxIiwKKyAgICAiMiIsCisg
ICAgIlBpZ3MiLAorICAgICJDb3dzIiwKKyAgICAiQ2F0cyIsCisgICAgIkhlbnMiLAorICAgICJE
dWNrcyIsCisgICAgIkNyb3dzIiwKKyAgICAiRmxhbWluZ29zIiwKK307CisKK1N0cmluZyBnZXRU
ZXN0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpIHsKKyAgICByZXR1cm4gZW51bV9jb25zdGFu
dF92YWx1ZXNbY29kZV07Cit9CisKKworCit9IC8vIG5hbWVzcGFjZSBUeXBlQnVpbGRlcgorCit9
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisK
KyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5jcHAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90
eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24t
b2JqZWN0LXR5cGUuanNvbi1yZXN1bHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDI1NTU2ZGQ4ZDFlNjg5YWFmZjBj
NTc4ZjAzMzU3YzI1ZDhhMTdjOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLW9i
amVjdC10eXBlLmpzb24tcmVzdWx0CkBAIC0wLDAgKzEsODg2IEBACisjIyMgQmVnaW4gRmlsZTog
SW5zcGVjdG9yVGVzdEJhY2tlbmRDb21tYW5kcy5qcworLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRl
Y2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IEphdmFTY3JpcHRD
b3JlL3JlcGxheS9zY3JpcHRzL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKKworLy8gVGVzdC4K
K0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJUZXN0LmF0dGVtcHRDdXJzZSIsIFt7
Im5hbWUiOiAiY3Vyc2UiLCAidHlwZSI6ICJvYmplY3QiLCAib3B0aW9uYWwiOiBmYWxzZX1dLCBb
ImNlbnNvcmVkQ3Vyc2UiXSk7CisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kQ29t
bWFuZHMuanMKKworIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hl
cnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24K
Ky8vIGJ5IHRoZSBzY3JpcHQ6IEphdmFTY3JpcHRDb3JlL3JlcGxheS9zY3JpcHRzL0NvZGVHZW5l
cmF0b3JJbnNwZWN0b3IucHkKKworI2lmbmRlZiBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNo
ZXJzX2gKKyNkZWZpbmUgSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVyc19oCisKKyNpZiBF
TkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSAiSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5o
IgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2lu
Y2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsK
KworY2xhc3MgSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7CitwdWJsaWM6
CisgICAgdmlydHVhbCB2b2lkIGF0dGVtcHRDdXJzZShFcnJvclN0cmluZyosIGNvbnN0IFJlZlB0
cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4mIGluX2N1cnNlLCBJbnNwZWN0b3I6OlR5cGVC
dWlsZGVyOjpPcHRPdXRwdXQ8U3RyaW5nPiogb3B0X291dF9jZW5zb3JlZEN1cnNlKSA9IDA7Citw
cm90ZWN0ZWQ6CisgICAgdmlydHVhbCB+SW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVySGFu
ZGxlcigpOworfTsKKworY2xhc3MgSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVyIGZpbmFs
IDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNo
ZXIgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3RvclRlc3RCYWNrZW5k
RGlzcGF0Y2hlcj4gY3JlYXRlKEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIq
LCBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7CisgICAgdmlydHVhbCB2
b2lkIGRpc3BhdGNoKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUGFzc1JlZlB0
cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gbWVzc2FnZSkgb3ZlcnJpZGU7Citwcml2YXRl
OgorICAgIHZvaWQgYXR0ZW1wdEN1cnNlKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3I6Oklu
c3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7Citwcml2YXRlOgorICAgIEluc3BlY3RvclRlc3RCYWNr
ZW5kRGlzcGF0Y2hlcihJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiwgSW5z
cGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOworICAgIEluc3BlY3RvclRlc3RC
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIG1fYWdlbnQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyNlbmRpZiAvLyAhZGVm
aW5lZChJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzX2gpCisjIyMgRW5kIEZpbGU6IElu
c3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogSW5zcGVj
dG9yVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNs
YXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBKYXZhU2NyaXB0Q29y
ZS9yZXBsYXkvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5CisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCisK
KyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckZy
b250ZW5kQ2hhbm5lbC5oPgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3Igewor
CitJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjp+SW5zcGVjdG9yVGVzdEJh
Y2tlbmREaXNwYXRjaGVySGFuZGxlcigpIHsgfQorCitQYXNzUmVmUHRyPEluc3BlY3RvclRlc3RC
YWNrZW5kRGlzcGF0Y2hlcj4gSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUo
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyLCBJbnNwZWN0b3JU
ZXN0QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKK3sKKyAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlciwg
YWdlbnQpKTsKK30KKworSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVyOjpJbnNwZWN0b3JU
ZXN0QmFja2VuZERpc3BhdGNoZXIoSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmRE
aXNwYXRjaGVyLCBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkK
KyAgICA6IEluc3BlY3RvclN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNw
YXRjaGVyKQorICAgICwgbV9hZ2VudChhZ2VudCkKK3sKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVy
LT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4oQVNDSUlMaXRlcmFsKCJUZXN0IiksIHRoaXMp
OworfQorCit2b2lkIEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9u
ZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gbWVzc2FnZSkKK3sKKyAgICBSZWY8SW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVyPiBw
cm90ZWN0KCp0aGlzKTsKKworICAgIGlmIChtZXRob2QgPT0gImF0dGVtcHRDdXJzZSIpCisgICAg
ICAgIGF0dGVtcHRDdXJzZShjYWxsSWQsICptZXNzYWdlLmdldCgpKTsKKyAgICBlbHNlCisgICAg
ICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCBTdHJpbmcoIiciKSArICJU
ZXN0IiArICcuJyArIG1ldGhvZCArICInIHdhcyBub3QgZm91bmQiKTsKK30KKwordm9pZCBJbnNw
ZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXI6OmF0dGVtcHRDdXJzZShsb25nIGNhbGxJZCwgY29u
c3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKQoreworICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJh
eT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CisgICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gbWVzc2FnZS5nZXRPYmplY3QoQVND
SUlMaXRlcmFsKCJwYXJhbXMiKSk7CisgICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWlu
ZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CisgICAgSW5zcGVjdG9yQXJyYXkqIHByb3Rv
Y29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CisgICAgUmVmUHRyPEluc3BlY3Rv
cjo6SW5zcGVjdG9yT2JqZWN0PiBpbl9jdXJzZSA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
OjpnZXRPYmplY3QocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoImN1cnNlIiksIG51
bGxwdHIsIHByb3RvY29sRXJyb3JzUHRyKTsKKyAgICBpZiAocHJvdG9jb2xFcnJvcnMtPmxlbmd0
aCgpKSB7CisgICAgICAgIFN0cmluZyBlcnJvck1lc3NhZ2UgPSBTdHJpbmc6OmZvcm1hdCgiU29t
ZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIlRlc3QuYXR0
ZW1wdEN1cnNlIik7CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29s
RXJyb3IoJmNhbGxJZCwgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkludmFsaWRQYXJhbXMs
IGVycm9yTWVzc2FnZSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIEVycm9yU3RyaW5nIGVycm9yOworICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgSW5zcGVjdG9y
OjpUeXBlQnVpbGRlcjo6T3B0T3V0cHV0PFN0cmluZz4gb3V0X2NlbnNvcmVkQ3Vyc2U7CisgICAg
bV9hZ2VudC0+YXR0ZW1wdEN1cnNlKCZlcnJvciwgaW5fY3Vyc2UsICZvdXRfY2Vuc29yZWRDdXJz
ZSk7CisKKyAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQorICAgICAgICBpZiAob3V0X2NlbnNvcmVk
Q3Vyc2UuaXNBc3NpZ25lZCgpKQorICAgICAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoQVNDSUlM
aXRlcmFsKCJjZW5zb3JlZEN1cnNlIiksIG91dF9jZW5zb3JlZEN1cnNlLmdldFZhbHVlKCkpOwor
CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJl
bGVhc2UoKSwgZXJyb3IpOworfQorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlm
IC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdEJhY2tl
bmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RGcm9udGVu
ZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1vYmplY3Qt
dHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBKYXZhU2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0
cy9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5CisKKyNpZm5kZWYgSW5zcGVjdG9yVGVzdEZyb250
ZW5kRGlzcGF0Y2hlcnNfaAorI2RlZmluZSBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVy
c19oCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSAiSW5zcGVjdG9yVGVzdFR5
cGVCdWlsZGVycy5oIgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwuaD4KKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW5jbHVkZSA8
d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFt
ZXNwYWNlIEluc3BlY3RvciB7CisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2Vu
ZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyNlbmRpZiAvLyAhZGVmaW5lZChJbnNwZWN0b3JU
ZXN0RnJvbnRlbmREaXNwYXRjaGVyc19oKQorIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0RnJv
bnRlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0RnJvbnRl
bmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1vYmpl
Y3QtdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBKYXZhU2NyaXB0Q29yZS9yZXBsYXkvc2Ny
aXB0cy9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgorCisjaWYgRU5BQkxF
KElOU1BFQ1RPUikKKworI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNl
IEluc3BlY3RvciB7CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5B
QkxFKElOU1BFQ1RPUikKKworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNw
YXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMu
aAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24KKy8v
IGJ5IHRoZSBzY3JpcHQ6IEphdmFTY3JpcHRDb3JlL3JlcGxheS9zY3JpcHRzL0NvZGVHZW5lcmF0
b3JJbnNwZWN0b3IucHkKKworI2lmbmRlZiBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzX2gKKyNk
ZWZpbmUgSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVyc19oCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9S
KQorCisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckpTVHlwZUJ1aWxkZXJzLmg+CisjaW5j
bHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclR5cGVCdWlsZGVyLmg+CisjaW5jbHVkZSA8d3RmL0Fz
c2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorCituYW1lc3BhY2UgSW5z
cGVjdG9yIHsKKworCisKK25hbWVzcGFjZSBUeXBlQnVpbGRlciB7CisKKy8vIEZvcndhcmQgZGVj
bGFyYXRpb25zLgorI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCituYW1lc3BhY2UgRGF0YWJhc2Ug
eworY2xhc3MgRHVtbXlPYmplY3Q7CitjbGFzcyBFcnJvcjsKK2NsYXNzIE9iamVjdFdpdGhQcm9w
ZXJ0eU5hbWVDb25mbGljdHM7CitjbGFzcyBPcHRpb25hbFBhcmFtZXRlckJ1bmRsZTsKK2NsYXNz
IFBhcmFtZXRlckJ1bmRsZTsKK30gLy8gRGF0YWJhc2UKKyNlbmRpZiAvLyBFTkFCTEUoU1FMX0RB
VEFCQVNFKQorCituYW1lc3BhY2UgVGVzdCB7CitjbGFzcyBIYXBweU5hbWU7CitjbGFzcyBQYXJh
bWV0ZXJCdW5kbGU7Cit9IC8vIFRlc3QKKy8vIEVuZCBvZiBmb3J3YXJkIGRlY2xhcmF0aW9ucy4K
KworCisKKworU3RyaW5nIGdldFRlc3RFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSk7CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+IFN0cmluZyBnZXRUZXN0RW51bUNvbnN0YW50VmFsdWUoVCBlbnVt
VmFsdWUpCit7CisgICAgcmV0dXJuIGdldFRlc3RFbnVtQ29uc3RhbnRWYWx1ZShzdGF0aWNfY2Fz
dDxpbnQ+KGVudW1WYWx1ZSkpOworfQorCisjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKK25hbWVz
cGFjZSBEYXRhYmFzZSB7CisvKiBEYXRhYmFzZSBlcnJvci4gKi8KK2NsYXNzIEVycm9yIDogcHVi
bGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0QmFzZSB7CitwdWJsaWM6CisgICAgZW51bSB7
CisgICAgICAgIE5vRmllbGRzU2V0ID0gMCwKKyAgICAgICAgTWVzc2FnZVNldCA9IDEgPDwgMCwK
KyAgICAgICAgQ29kZVNldCA9IDEgPDwgMSwKKyAgICAgICAgQWxsRmllbGRzU2V0ID0gKE1lc3Nh
Z2VTZXQgfCBDb2RlU2V0KQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CisgICAg
Y2xhc3MgQnVpbGRlciB7CisgICAgcHJpdmF0ZToKKyAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6
SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKKworICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4g
QnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7
CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8LypFcnJvciovSW5zcGVj
dG9yOjpJbnNwZWN0b3JPYmplY3Q+IHB0cikKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5p
dF9zdGF0ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKKyAgICAgICAgfQorICAgICAg
ICBmcmllbmQgY2xhc3MgRXJyb3I7CisgICAgcHVibGljOgorCisgICAgICAgIEJ1aWxkZXI8U1RB
VEUgfCBNZXNzYWdlU2V0PiYgc2V0TWVzc2FnZShjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgICAg
ICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTWVzc2FnZVNldCksIHBy
b3BlcnR5X21lc3NhZ2VfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0
cmluZyhBU0NJSUxpdGVyYWwoIm1lc3NhZ2UiKSwgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJu
IGNhc3RTdGF0ZTxNZXNzYWdlU2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcjxT
VEFURSB8IENvZGVTZXQ+JiBzZXRDb2RlKGludCB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIENvZGVTZXQpLCBwcm9wZXJ0eV9jb2RlX2FscmVh
ZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoQVNDSUlMaXRlcmFsKCJj
b2RlIiksIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q29kZVNldD4oKTsK
KyAgICAgICAgfQorCisgICAgICAgIG9wZXJhdG9yIFJlZlB0cjxFcnJvcj4mICgpCisgICAgICAg
IHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVz
dWx0X2lzX25vdF9yZWFkeSk7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoRXJy
b3IpID09IHNpemVvZihJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCksIGNhbm5vdF9jYXN0KTsK
KyAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8RXJyb3I+Kj4oJm1f
cmVzdWx0KTsKKyAgICAgICAgfQorCisgICAgICAgIFBhc3NSZWZQdHI8RXJyb3I+IHJlbGVhc2Uo
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gUmVmUHRyPEVycm9yPigqdGhpcykucmVs
ZWFzZSgpOworICAgICAgICB9CisgICAgfTsKKworICAgIC8qCisgICAgICogU3ludGhldGljIGNv
bnN0cnVjdG9yOgorICAgICAqIFJlZlB0cjxFcnJvcj4gcmVzdWx0ID0gRXJyb3I6OmNyZWF0ZSgp
CisgICAgICogICAgIC5zZXRNZXNzYWdlKC4uLikKKyAgICAgKiAgICAgLnNldENvZGUoLi4uKTsK
KyAgICAgKi8KKyAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKKyAgICB7
CisgICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihJbnNwZWN0b3I6Okluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCkpOworICAgIH0KKyAgICB0eXBlZGVmIEluc3BlY3Rvcjo6VHlwZUJ1
aWxkZXI6OlN0cnVjdEl0ZW1UcmFpdHMgSXRlbVRyYWl0czsKK307CisKK2NsYXNzIE9wdGlvbmFs
UGFyYW1ldGVyQnVuZGxlIDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0QmFzZSB7
CitwdWJsaWM6CisgICAgZW51bSB7CisgICAgICAgIE5vRmllbGRzU2V0ID0gMCwKKyAgICAgICAg
QWxsRmllbGRzU2V0ID0gMAorICAgIH07CisKKyAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CisgICAg
Y2xhc3MgQnVpbGRlciB7CisgICAgcHJpdmF0ZToKKyAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6
SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKKworICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4g
QnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7
CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8LypPcHRpb25hbFBhcmFt
ZXRlckJ1bmRsZSovSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IHB0cikKKyAgICAgICAgewor
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJf
Y3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsK
KyAgICAgICAgfQorICAgICAgICBmcmllbmQgY2xhc3MgT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU7
CisgICAgcHVibGljOgorCisgICAgICAgIG9wZXJhdG9yIFJlZlB0cjxPcHRpb25hbFBhcmFtZXRl
ckJ1bmRsZT4mICgpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRF
ID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CisgICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVChzaXplb2YoT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGUpID09IHNpemVvZihJbnNw
ZWN0b3I6Okluc3BlY3Rvck9iamVjdCksIGNhbm5vdF9jYXN0KTsKKyAgICAgICAgICAgIHJldHVy
biAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8T3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU+Kj4oJm1f
cmVzdWx0KTsKKyAgICAgICAgfQorCisgICAgICAgIFBhc3NSZWZQdHI8T3B0aW9uYWxQYXJhbWV0
ZXJCdW5kbGU+IHJlbGVhc2UoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gUmVmUHRy
PE9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlPigqdGhpcykucmVsZWFzZSgpOworICAgICAgICB9Cisg
ICAgfTsKKworICAgIC8qCisgICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgorICAgICAqIFJl
ZlB0cjxPcHRpb25hbFBhcmFtZXRlckJ1bmRsZT4gcmVzdWx0ID0gT3B0aW9uYWxQYXJhbWV0ZXJC
dW5kbGU6OmNyZWF0ZSgpOworICAgICAqLworICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0
PiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KElu
c3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7CisgICAgfQorICAgIHR5cGVkZWYg
SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6U3RydWN0SXRlbVRyYWl0cyBJdGVtVHJhaXRzOworCisg
ICAgdm9pZCBzZXRDb2x1bW5OYW1lcyhQYXNzUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6
OkFycmF5PFN0cmluZz4+IHZhbHVlKQorICAgIHsKKyAgICAgICAgdGhpcy0+c2V0VmFsdWUoQVND
SUlMaXRlcmFsKCJjb2x1bW5OYW1lcyIpLCB2YWx1ZSk7CisgICAgfQorCisgICAgdm9pZCBzZXRO
b3Rlcyhjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgIHsKKyAgICAgICAgdGhpcy0+c2V0U3RyaW5n
KEFTQ0lJTGl0ZXJhbCgibm90ZXMiKSwgdmFsdWUpOworICAgIH0KKworICAgIHZvaWQgc2V0VGlt
ZXN0YW1wKGRvdWJsZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHRoaXMtPnNldE51bWJlcihBU0NJ
SUxpdGVyYWwoInRpbWVzdGFtcCIpLCB2YWx1ZSk7CisgICAgfQorCisgICAgdm9pZCBzZXRWYWx1
ZXMoUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gdmFsdWUpCisgICAgewor
ICAgICAgICB0aGlzLT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJ2YWx1ZXMiKSwgdmFsdWUpOwor
ICAgIH0KKworICAgIHZvaWQgc2V0UGF5bG9hZChQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVj
dG9yVmFsdWU+IHZhbHVlKQorICAgIHsKKyAgICAgICAgdGhpcy0+c2V0VmFsdWUoQVNDSUlMaXRl
cmFsKCJwYXlsb2FkIiksIHZhbHVlKTsKKyAgICB9CisKKyAgICB2b2lkIHNldEVycm9yKFBhc3NS
ZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6RGF0YWJhc2U6OkVycm9yPiB2YWx1ZSkKKyAg
ICB7CisgICAgICAgIHRoaXMtPnNldFZhbHVlKEFTQ0lJTGl0ZXJhbCgiZXJyb3IiKSwgdmFsdWUp
OworICAgIH0KK307CisKK2NsYXNzIFBhcmFtZXRlckJ1bmRsZSA6IHB1YmxpYyBJbnNwZWN0b3I6
Okluc3BlY3Rvck9iamVjdEJhc2UgeworcHVibGljOgorICAgIGVudW0geworICAgICAgICBOb0Zp
ZWxkc1NldCA9IDAsCisgICAgICAgIENvbHVtbk5hbWVzU2V0ID0gMSA8PCAwLAorICAgICAgICBO
b3Rlc1NldCA9IDEgPDwgMSwKKyAgICAgICAgVGltZXN0YW1wU2V0ID0gMSA8PCAyLAorICAgICAg
ICBWYWx1ZXNTZXQgPSAxIDw8IDMsCisgICAgICAgIFBheWxvYWRTZXQgPSAxIDw8IDQsCisgICAg
ICAgIEVycm9yU2V0ID0gMSA8PCA1LAorICAgICAgICBBbGxGaWVsZHNTZXQgPSAoQ29sdW1uTmFt
ZXNTZXQgfCBOb3Rlc1NldCB8IFRpbWVzdGFtcFNldCB8IFZhbHVlc1NldCB8IFBheWxvYWRTZXQg
fCBFcnJvclNldCkKKyAgICB9OworCisgICAgdGVtcGxhdGU8aW50IFNUQVRFPgorICAgIGNsYXNz
IEJ1aWxkZXIgeworICAgIHByaXZhdGU6CisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3Bl
Y3Rvck9iamVjdD4gbV9yZXN1bHQ7CisKKyAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxk
ZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOworICAg
ICAgICB9CisKKyAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPC8qUGFyYW1ldGVyQnVuZGxlKi9J
bnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gcHRyKQorICAgICAgICB7CisgICAgICAgICAgICBD
T01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25v
bl9pbml0X3N0YXRlKTsKKyAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOworICAgICAgICB9Cisg
ICAgICAgIGZyaWVuZCBjbGFzcyBQYXJhbWV0ZXJCdW5kbGU7CisgICAgcHVibGljOgorCisgICAg
ICAgIEJ1aWxkZXI8U1RBVEUgfCBDb2x1bW5OYW1lc1NldD4mIHNldENvbHVtbk5hbWVzKFBhc3NS
ZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk8U3RyaW5nPj4gdmFsdWUpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBDb2x1bW5OYW1lc1Nl
dCksIHByb3BlcnR5X2NvbHVtbk5hbWVzX2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVz
dWx0LT5zZXRWYWx1ZShBU0NJSUxpdGVyYWwoImNvbHVtbk5hbWVzIiksIHZhbHVlKTsKKyAgICAg
ICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q29sdW1uTmFtZXNTZXQ+KCk7CisgICAgICAgIH0KKwor
ICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTm90ZXNTZXQ+JiBzZXROb3Rlcyhjb25zdCBTdHJpbmcm
IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYg
Tm90ZXNTZXQpLCBwcm9wZXJ0eV9ub3Rlc19hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jl
c3VsdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgibm90ZXMiKSwgdmFsdWUpOworICAgICAgICAg
ICAgcmV0dXJuIGNhc3RTdGF0ZTxOb3Rlc1NldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1
aWxkZXI8U1RBVEUgfCBUaW1lc3RhbXBTZXQ+JiBzZXRUaW1lc3RhbXAoZG91YmxlIHZhbHVlKQor
ICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVGltZXN0YW1w
U2V0KSwgcHJvcGVydHlfdGltZXN0YW1wX2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVz
dWx0LT5zZXROdW1iZXIoQVNDSUlMaXRlcmFsKCJ0aW1lc3RhbXAiKSwgdmFsdWUpOworICAgICAg
ICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxUaW1lc3RhbXBTZXQ+KCk7CisgICAgICAgIH0KKworICAg
ICAgICBCdWlsZGVyPFNUQVRFIHwgVmFsdWVzU2V0PiYgc2V0VmFsdWVzKFBhc3NSZWZQdHI8SW5z
cGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBD
T01QSUxFX0FTU0VSVCghKFNUQVRFICYgVmFsdWVzU2V0KSwgcHJvcGVydHlfdmFsdWVzX2FscmVh
ZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJ2
YWx1ZXMiKSwgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxWYWx1ZXNTZXQ+
KCk7CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgUGF5bG9hZFNldD4mIHNl
dFBheWxvYWQoUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiB2YWx1ZSkKKyAg
ICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFBheWxvYWRTZXQp
LCBwcm9wZXJ0eV9wYXlsb2FkX2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5z
ZXRWYWx1ZShBU0NJSUxpdGVyYWwoInBheWxvYWQiKSwgdmFsdWUpOworICAgICAgICAgICAgcmV0
dXJuIGNhc3RTdGF0ZTxQYXlsb2FkU2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRl
cjxTVEFURSB8IEVycm9yU2V0PiYgc2V0RXJyb3IoUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlR5cGVC
dWlsZGVyOjpEYXRhYmFzZTo6RXJyb3I+IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBD
T01QSUxFX0FTU0VSVCghKFNUQVRFICYgRXJyb3JTZXQpLCBwcm9wZXJ0eV9lcnJvcl9hbHJlYWR5
X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0VmFsdWUoQVNDSUlMaXRlcmFsKCJlcnJv
ciIpLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEVycm9yU2V0PigpOwor
ICAgICAgICB9CisKKyAgICAgICAgb3BlcmF0b3IgUmVmUHRyPFBhcmFtZXRlckJ1bmRsZT4mICgp
CisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxk
c1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChz
aXplb2YoUGFyYW1ldGVyQnVuZGxlKSA9PSBzaXplb2YoSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmpl
Y3QpLCBjYW5ub3RfY2FzdCk7CisgICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8
UmVmUHRyPFBhcmFtZXRlckJ1bmRsZT4qPigmbV9yZXN1bHQpOworICAgICAgICB9CisKKyAgICAg
ICAgUGFzc1JlZlB0cjxQYXJhbWV0ZXJCdW5kbGU+IHJlbGVhc2UoKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gUmVmUHRyPFBhcmFtZXRlckJ1bmRsZT4oKnRoaXMpLnJlbGVhc2UoKTsK
KyAgICAgICAgfQorICAgIH07CisKKyAgICAvKgorICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3Rv
cjoKKyAgICAgKiBSZWZQdHI8UGFyYW1ldGVyQnVuZGxlPiByZXN1bHQgPSBQYXJhbWV0ZXJCdW5k
bGU6OmNyZWF0ZSgpCisgICAgICogICAgIC5zZXRDb2x1bW5OYW1lcyguLi4pCisgICAgICogICAg
IC5zZXROb3RlcyguLi4pCisgICAgICogICAgIC5zZXRUaW1lc3RhbXAoLi4uKQorICAgICAqICAg
ICAuc2V0VmFsdWVzKC4uLikKKyAgICAgKiAgICAgLnNldFBheWxvYWQoLi4uKQorICAgICAqICAg
ICAuc2V0RXJyb3IoLi4uKTsKKyAgICAgKi8KKyAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1Nl
dD4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihJ
bnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkpOworICAgIH0KKyAgICB0eXBlZGVm
IEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlN0cnVjdEl0ZW1UcmFpdHMgSXRlbVRyYWl0czsKK307
CisKKy8qIENvbmZsaWN0ZWQgbmFtZXMgbWF5IGNhdXNlIGdlbmVyYXRlZCBnZXR0ZXJzL3NldHRl
cnMgdG8gY2xhc2ggd2l0aCBidWlsdC1pbiBJbnNwZWN0b3JPYmplY3QgbWV0aG9kcy4gKi8KK2Ns
YXNzIE9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHMgOiBwdWJsaWMgSW5zcGVjdG9yOjpJ
bnNwZWN0b3JPYmplY3RCYXNlIHsKK3B1YmxpYzoKKyAgICBlbnVtIHsKKyAgICAgICAgTm9GaWVs
ZHNTZXQgPSAwLAorICAgICAgICBJbnRlZ2VyU2V0ID0gMSA8PCAwLAorICAgICAgICBBcnJheVNl
dCA9IDEgPDwgMSwKKyAgICAgICAgU3RyaW5nU2V0ID0gMSA8PCAyLAorICAgICAgICBWYWx1ZVNl
dCA9IDEgPDwgMywKKyAgICAgICAgT2JqZWN0U2V0ID0gMSA8PCA0LAorICAgICAgICBBbGxGaWVs
ZHNTZXQgPSAoSW50ZWdlclNldCB8IEFycmF5U2V0IHwgU3RyaW5nU2V0IHwgVmFsdWVTZXQgfCBP
YmplY3RTZXQpCisgICAgfTsKKworICAgIHRlbXBsYXRlPGludCBTVEFURT4KKyAgICBjbGFzcyBC
dWlsZGVyIHsKKyAgICBwcml2YXRlOgorICAgICAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0
b3JPYmplY3Q+IG1fcmVzdWx0OworCisgICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVy
PFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKKyAgICAg
ICAgfQorCisgICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjwvKk9iamVjdFdpdGhQcm9wZXJ0eU5h
bWVDb25mbGljdHMqL0luc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBwdHIpCisgICAgICAgIHsK
KyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVy
X2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOworICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7
CisgICAgICAgIH0KKyAgICAgICAgZnJpZW5kIGNsYXNzIE9iamVjdFdpdGhQcm9wZXJ0eU5hbWVD
b25mbGljdHM7CisgICAgcHVibGljOgorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBJbnRlZ2Vy
U2V0PiYgc2V0SW50ZWdlcihjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgICAgICB7CisgICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgSW50ZWdlclNldCksIHByb3BlcnR5X2ludGVn
ZXJfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZyhBU0NJSUxp
dGVyYWwoImludGVnZXIiKSwgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxJ
bnRlZ2VyU2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IEFycmF5
U2V0PiYgc2V0QXJyYXkoY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEFycmF5U2V0KSwgcHJvcGVydHlfYXJyYXlfYWxy
ZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwo
ImFycmF5IiksIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8QXJyYXlTZXQ+
KCk7CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgU3RyaW5nU2V0PiYgc2V0
U3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKCEoU1RBVEUgJiBTdHJpbmdTZXQpLCBwcm9wZXJ0eV9zdHJpbmdfYWxyZWFkeV9z
ZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInN0cmlu
ZyIpLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFN0cmluZ1NldD4oKTsK
KyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBWYWx1ZVNldD4mIHNldFZhbHVl
KGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKCEoU1RBVEUgJiBWYWx1ZVNldCksIHByb3BlcnR5X3ZhbHVlX2FscmVhZHlfc2V0KTsKKyAg
ICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJ2YWx1ZSIpLCB2YWx1
ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFZhbHVlU2V0PigpOworICAgICAgICB9
CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IE9iamVjdFNldD4mIHNldE9iamVjdChjb25zdCBT
dHJpbmcmIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNU
QVRFICYgT2JqZWN0U2V0KSwgcHJvcGVydHlfb2JqZWN0X2FscmVhZHlfc2V0KTsKKyAgICAgICAg
ICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJvYmplY3QiKSwgdmFsdWUpOwor
ICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxPYmplY3RTZXQ+KCk7CisgICAgICAgIH0KKwor
ICAgICAgICBvcGVyYXRvciBSZWZQdHI8T2JqZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0cz4m
ICgpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZp
ZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VS
VChzaXplb2YoT2JqZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0cykgPT0gc2l6ZW9mKEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yT2JqZWN0KSwgY2Fubm90X2Nhc3QpOworICAgICAgICAgICAgcmV0dXJu
ICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3Rz
Pio+KCZtX3Jlc3VsdCk7CisgICAgICAgIH0KKworICAgICAgICBQYXNzUmVmUHRyPE9iamVjdFdp
dGhQcm9wZXJ0eU5hbWVDb25mbGljdHM+IHJlbGVhc2UoKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gUmVmUHRyPE9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHM+KCp0aGlzKS5y
ZWxlYXNlKCk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgLyoKKyAgICAgKiBTeW50aGV0aWMg
Y29uc3RydWN0b3I6CisgICAgICogUmVmUHRyPE9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGlj
dHM+IHJlc3VsdCA9IE9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHM6OmNyZWF0ZSgpCisg
ICAgICogICAgIC5zZXRJbnRlZ2VyKC4uLikKKyAgICAgKiAgICAgLnNldEFycmF5KC4uLikKKyAg
ICAgKiAgICAgLnNldFN0cmluZyguLi4pCisgICAgICogICAgIC5zZXRWYWx1ZSguLi4pCisgICAg
ICogICAgIC5zZXRPYmplY3QoLi4uKTsKKyAgICAgKi8KKyAgICBzdGF0aWMgQnVpbGRlcjxOb0Zp
ZWxkc1NldD4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRz
U2V0PihJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkpOworICAgIH0KKyAgICB0
eXBlZGVmIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlN0cnVjdEl0ZW1UcmFpdHMgSXRlbVRyYWl0
czsKK307CisKK30gLy8gRGF0YWJhc2UKKyNlbmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQor
CituYW1lc3BhY2UgVGVzdCB7CitjbGFzcyBQYXJhbWV0ZXJCdW5kbGUgOiBwdWJsaWMgSW5zcGVj
dG9yOjpJbnNwZWN0b3JPYmplY3RCYXNlIHsKK3B1YmxpYzoKKyAgICBlbnVtIHsKKyAgICAgICAg
Tm9GaWVsZHNTZXQgPSAwLAorICAgICAgICBDb2x1bW5OYW1lc1NldCA9IDEgPDwgMCwKKyAgICAg
ICAgTm90ZXNTZXQgPSAxIDw8IDEsCisgICAgICAgIFRpbWVzdGFtcFNldCA9IDEgPDwgMiwKKyAg
ICAgICAgVmFsdWVzU2V0ID0gMSA8PCAzLAorICAgICAgICBQYXlsb2FkU2V0ID0gMSA8PCA0LAor
ICAgICAgICBFcnJvclNldCA9IDEgPDwgNSwKKyAgICAgICAgQWxsRmllbGRzU2V0ID0gKENvbHVt
bk5hbWVzU2V0IHwgTm90ZXNTZXQgfCBUaW1lc3RhbXBTZXQgfCBWYWx1ZXNTZXQgfCBQYXlsb2Fk
U2V0IHwgRXJyb3JTZXQpCisgICAgfTsKKworICAgIHRlbXBsYXRlPGludCBTVEFURT4KKyAgICBj
bGFzcyBCdWlsZGVyIHsKKyAgICBwcml2YXRlOgorICAgICAgICBSZWZQdHI8SW5zcGVjdG9yOjpJ
bnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OworCisgICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBC
dWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsK
KyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjwvKlBhcmFtZXRlckJ1bmRs
ZSovSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IHB0cikKKyAgICAgICAgeworICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9p
bl9ub25faW5pdF9zdGF0ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKKyAgICAgICAg
fQorICAgICAgICBmcmllbmQgY2xhc3MgUGFyYW1ldGVyQnVuZGxlOworICAgIHB1YmxpYzoKKwor
ICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQ29sdW1uTmFtZXNTZXQ+JiBzZXRDb2x1bW5OYW1lcyhQ
YXNzUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5PFN0cmluZz4+IHZhbHVlKQor
ICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQ29sdW1uTmFt
ZXNTZXQpLCBwcm9wZXJ0eV9jb2x1bW5OYW1lc19hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBt
X3Jlc3VsdC0+c2V0VmFsdWUoQVNDSUlMaXRlcmFsKCJjb2x1bW5OYW1lcyIpLCB2YWx1ZSk7Cisg
ICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENvbHVtbk5hbWVzU2V0PigpOworICAgICAgICB9
CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IE5vdGVzU2V0PiYgc2V0Tm90ZXMoY29uc3QgU3Ry
aW5nJiB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFU
RSAmIE5vdGVzU2V0KSwgcHJvcGVydHlfbm90ZXNfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAg
bV9yZXN1bHQtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoIm5vdGVzIiksIHZhbHVlKTsKKyAgICAg
ICAgICAgIHJldHVybiBjYXN0U3RhdGU8Tm90ZXNTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAg
ICBCdWlsZGVyPFNUQVRFIHwgVGltZXN0YW1wU2V0PiYgc2V0VGltZXN0YW1wKGRvdWJsZSB2YWx1
ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFRpbWVz
dGFtcFNldCksIHByb3BlcnR5X3RpbWVzdGFtcF9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBt
X3Jlc3VsdC0+c2V0TnVtYmVyKEFTQ0lJTGl0ZXJhbCgidGltZXN0YW1wIiksIHZhbHVlKTsKKyAg
ICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VGltZXN0YW1wU2V0PigpOworICAgICAgICB9CisK
KyAgICAgICAgQnVpbGRlcjxTVEFURSB8IFZhbHVlc1NldD4mIHNldFZhbHVlcyhQYXNzUmVmUHRy
PEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFZhbHVlc1NldCksIHByb3BlcnR5X3ZhbHVlc19h
bHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJh
bCgidmFsdWVzIiksIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VmFsdWVz
U2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IFBheWxvYWRTZXQ+
JiBzZXRQYXlsb2FkKFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4gdmFsdWUp
CisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBQYXlsb2Fk
U2V0KSwgcHJvcGVydHlfcGF5bG9hZF9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3Vs
dC0+c2V0VmFsdWUoQVNDSUlMaXRlcmFsKCJwYXlsb2FkIiksIHZhbHVlKTsKKyAgICAgICAgICAg
IHJldHVybiBjYXN0U3RhdGU8UGF5bG9hZFNldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1
aWxkZXI8U1RBVEUgfCBFcnJvclNldD4mIHNldEVycm9yKFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpU
eXBlQnVpbGRlcjo6RGF0YWJhc2U6OkVycm9yPiB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEVycm9yU2V0KSwgcHJvcGVydHlfZXJyb3JfYWxy
ZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldFZhbHVlKEFTQ0lJTGl0ZXJhbCgi
ZXJyb3IiKSwgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxFcnJvclNldD4o
KTsKKyAgICAgICAgfQorCisgICAgICAgIG9wZXJhdG9yIFJlZlB0cjxQYXJhbWV0ZXJCdW5kbGU+
JiAoKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxG
aWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOworICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoc2l6ZW9mKFBhcmFtZXRlckJ1bmRsZSkgPT0gc2l6ZW9mKEluc3BlY3Rvcjo6SW5zcGVjdG9y
T2JqZWN0KSwgY2Fubm90X2Nhc3QpOworICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9j
YXN0PFJlZlB0cjxQYXJhbWV0ZXJCdW5kbGU+Kj4oJm1fcmVzdWx0KTsKKyAgICAgICAgfQorCisg
ICAgICAgIFBhc3NSZWZQdHI8UGFyYW1ldGVyQnVuZGxlPiByZWxlYXNlKCkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxQYXJhbWV0ZXJCdW5kbGU+KCp0aGlzKS5yZWxlYXNl
KCk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgLyoKKyAgICAgKiBTeW50aGV0aWMgY29uc3Ry
dWN0b3I6CisgICAgICogUmVmUHRyPFBhcmFtZXRlckJ1bmRsZT4gcmVzdWx0ID0gUGFyYW1ldGVy
QnVuZGxlOjpjcmVhdGUoKQorICAgICAqICAgICAuc2V0Q29sdW1uTmFtZXMoLi4uKQorICAgICAq
ICAgICAuc2V0Tm90ZXMoLi4uKQorICAgICAqICAgICAuc2V0VGltZXN0YW1wKC4uLikKKyAgICAg
KiAgICAgLnNldFZhbHVlcyguLi4pCisgICAgICogICAgIC5zZXRQYXlsb2FkKC4uLikKKyAgICAg
KiAgICAgLnNldEVycm9yKC4uLik7CisgICAgICovCisgICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVs
ZHNTZXQ+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1Nl
dD4oSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpKTsKKyAgICB9CisgICAgdHlw
ZWRlZiBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpTdHJ1Y3RJdGVtVHJhaXRzIEl0ZW1UcmFpdHM7
Cit9OworCit9IC8vIFRlc3QKKworCisKK30gLy8gbmFtZXNwYWNlIFR5cGVCdWlsZGVyCisKK30g
Ly8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKwor
I2VuZGlmIC8vICFkZWZpbmVkKEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnNfaCkKKyMjIyBFbmQg
RmlsZTogSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNw
ZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0
aW9uLW9iamVjdC10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IEphdmFTY3JpcHRDb3JlL3Jl
cGxheS9zY3JpcHRzL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuaCIKKworI2lmIEVOQUJM
RShJTlNQRUNUT1IpCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFj
ZSBJbnNwZWN0b3IgeworCituYW1lc3BhY2UgVHlwZUJ1aWxkZXIgeworCitzdGF0aWMgY29uc3Qg
Y2hhciogY29uc3QgZW51bV9jb25zdGFudF92YWx1ZXNbXSA9IHsKK307CisKK1N0cmluZyBnZXRU
ZXN0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpIHsKKyAgICByZXR1cm4gZW51bV9jb25zdGFu
dF92YWx1ZXNbY29kZV07Cit9CisKKworCit9IC8vIG5hbWVzcGFjZSBUeXBlQnVpbGRlcgorCit9
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisK
KyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5jcHAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90
eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtcmVxdWlyaW5nLXJ1
bnRpbWUtY2FzdHMuanNvbi1yZXN1bHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzA2Y2YyMDJiMmNiYTEyNzdjODc3
ZDFmNjQxMzc1MjgxN2EyM2Q5YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLXJlcXVpcmluZy1ydW50
aW1lLWNhc3RzLmpzb24tcmVzdWx0CkBAIC0wLDAgKzEsNzIwIEBACisjIyMgQmVnaW4gRmlsZTog
SW5zcGVjdG9yVGVzdEJhY2tlbmRDb21tYW5kcy5qcworLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJl
cXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IEphdmFTY3JpcHRD
b3JlL3JlcGxheS9zY3JpcHRzL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKKworLy8gVGVzdC4K
K0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFbnVtKCJUZXN0LlVuY2FzdGVkQW5pbWFscyIsIHtQ
aWdzOiAiUGlncyIsIENvd3M6ICJDb3dzIiwgQ2F0czogIkNhdHMiLCBIZW5zOiAiSGVucyJ9KTsK
K0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFbnVtKCJUZXN0LkNhc3RlZEFuaW1hbHMiLCB7RHVj
a3M6ICJEdWNrcyIsIEhlbnM6ICJIZW5zIiwgQ3Jvd3M6ICJDcm93cyIsIEZsYW1pbmdvczogIkZs
YW1pbmdvcyJ9KTsKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdEJhY2tlbmRDb21tYW5kcy5q
cworCisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIHR5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbgorLy8gYnkg
dGhlIHNjcmlwdDogSmF2YVNjcmlwdENvcmUvcmVwbGF5L3NjcmlwdHMvQ29kZUdlbmVyYXRvcklu
c3BlY3Rvci5weQorCisjaWZuZGVmIEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnNfaAor
I2RlZmluZSBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzX2gKKworI2lmIEVOQUJMRShJ
TlNQRUNUT1IpCisKKyNpbmNsdWRlICJJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmgiCisjaW5j
bHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8
d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFt
ZXNwYWNlIEluc3BlY3RvciB7CisKK3R5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCit9IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyNl
bmRpZiAvLyAhZGVmaW5lZChJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzX2gpCisjIyMg
RW5kIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4g
RmlsZTogSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisv
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBK
YXZhU2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5CisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JUZXN0QmFja2VuZERpc3Bh
dGNoZXJzLmgiCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSA8aW5zcGVjdG9y
L0luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oPgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0
b3JWYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJ
bnNwZWN0b3IgeworCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBF
TkFCTEUoSU5TUEVDVE9SKQorCisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kRGlz
cGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNw
YXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMu
anNvbgorLy8gYnkgdGhlIHNjcmlwdDogSmF2YVNjcmlwdENvcmUvcmVwbGF5L3NjcmlwdHMvQ29k
ZUdlbmVyYXRvckluc3BlY3Rvci5weQorCisjaWZuZGVmIEluc3BlY3RvclRlc3RGcm9udGVuZERp
c3BhdGNoZXJzX2gKKyNkZWZpbmUgSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnNfaAor
CisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUgIkluc3BlY3RvclRlc3RUeXBlQnVp
bGRlcnMuaCIKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLmg+
CisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9Q
YXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFj
ZSBJbnNwZWN0b3IgeworCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAv
LyBFTkFCTEUoSU5TUEVDVE9SKQorCisjZW5kaWYgLy8gIWRlZmluZWQoSW5zcGVjdG9yVGVzdEZy
b250ZW5kRGlzcGF0Y2hlcnNfaCkKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdEZyb250ZW5k
RGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlz
cGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2Fz
dHMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogSmF2YVNjcmlwdENvcmUvcmVwbGF5L3NjcmlwdHMv
Q29kZUdlbmVyYXRvckluc3BlY3Rvci5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKKworI2lmIEVOQUJMRShJTlNQ
RUNUT1IpCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNw
ZWN0b3IgeworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJ
TlNQRUNUT1IpCisKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hl
cnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmgKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uCisvLyBieSB0
aGUgc2NyaXB0OiBKYXZhU2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySW5z
cGVjdG9yLnB5CisKKyNpZm5kZWYgSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVyc19oCisjZGVmaW5l
IEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnNfaAorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKwor
I2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JKU1R5cGVCdWlsZGVycy5oPgorI2luY2x1ZGUg
PGluc3BlY3Rvci9JbnNwZWN0b3JUeXBlQnVpbGRlci5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRp
b25zLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKworbmFtZXNwYWNlIEluc3BlY3Rv
ciB7CisKKworCituYW1lc3BhY2UgVHlwZUJ1aWxkZXIgeworCisvLyBGb3J3YXJkIGRlY2xhcmF0
aW9ucy4KK25hbWVzcGFjZSBUZXN0IHsKK2NsYXNzIFJlY3Vyc2l2ZU9iamVjdDE7CitjbGFzcyBS
ZWN1cnNpdmVPYmplY3QyOworY2xhc3MgVHlwZU5lZWRpbmdDYXN0OworZW51bSBjbGFzcyBDYXN0
ZWRBbmltYWxzOworZW51bSBjbGFzcyBVbmNhc3RlZEFuaW1hbHM7Cit9IC8vIFRlc3QKKy8vIEVu
ZCBvZiBmb3J3YXJkIGRlY2xhcmF0aW9ucy4KKworCisvLyBUeXBlZGVmcy4KK25hbWVzcGFjZSBU
ZXN0IHsKK3R5cGVkZWYgaW50IENhc3RlZE9iamVjdElkOworCit0eXBlZGVmIGludCBVbmNhc3Rl
ZE9iamVjdElkOworfSAvLyBUZXN0CisvLyBFbmQgb2YgdHlwZWRlZnMuCisKK1N0cmluZyBnZXRU
ZXN0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBT
dHJpbmcgZ2V0VGVzdEVudW1Db25zdGFudFZhbHVlKFQgZW51bVZhbHVlKQoreworICAgIHJldHVy
biBnZXRUZXN0RW51bUNvbnN0YW50VmFsdWUoc3RhdGljX2Nhc3Q8aW50PihlbnVtVmFsdWUpKTsK
K30KKworbmFtZXNwYWNlIFRlc3QgeworLyogQSBkdW1teSB0eXBlIHRoYXQgcmVxdWlyZXMgcnVu
dGltZSBjYXN0cywgYW5kIGZvcmNlcyBub24tcHJpbWl0aXZlIHJlZmVyZW5jZWQgdHlwZXMgdG8g
YWxzbyBlbWl0IHJ1bnRpbWUgY2FzdCBoZWxwZXJzLiAqLworY2xhc3MgVHlwZU5lZWRpbmdDYXN0
IDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0QmFzZSB7CitwdWJsaWM6CisgICAg
ZW51bSB7CisgICAgICAgIE5vRmllbGRzU2V0ID0gMCwKKyAgICAgICAgU3RyaW5nU2V0ID0gMSA8
PCAwLAorICAgICAgICBOdW1iZXJTZXQgPSAxIDw8IDEsCisgICAgICAgIEFuaW1hbHNTZXQgPSAx
IDw8IDIsCisgICAgICAgIElkU2V0ID0gMSA8PCAzLAorICAgICAgICBUcmVlU2V0ID0gMSA8PCA0
LAorICAgICAgICBBbGxGaWVsZHNTZXQgPSAoU3RyaW5nU2V0IHwgTnVtYmVyU2V0IHwgQW5pbWFs
c1NldCB8IElkU2V0IHwgVHJlZVNldCkKKyAgICB9OworCisgICAgdGVtcGxhdGU8aW50IFNUQVRF
PgorICAgIGNsYXNzIEJ1aWxkZXIgeworICAgIHByaXZhdGU6CisgICAgICAgIFJlZlB0cjxJbnNw
ZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CisKKyAgICAgICAgdGVtcGxhdGU8aW50
IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+
KHRoaXMpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPC8qVHlwZU5l
ZWRpbmdDYXN0Ki9JbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gcHRyKQorICAgICAgICB7Cisg
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9j
cmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKKyAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwor
ICAgICAgICB9CisgICAgICAgIGZyaWVuZCBjbGFzcyBUeXBlTmVlZGluZ0Nhc3Q7CisgICAgcHVi
bGljOgorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBTdHJpbmdTZXQ+JiBzZXRTdHJpbmcoY29u
c3QgU3RyaW5nJiB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
IShTVEFURSAmIFN0cmluZ1NldCksIHByb3BlcnR5X3N0cmluZ19hbHJlYWR5X3NldCk7CisgICAg
ICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgic3RyaW5nIiksIHZhbHVl
KTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8U3RyaW5nU2V0PigpOworICAgICAgICB9
CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IE51bWJlclNldD4mIHNldE51bWJlcihpbnQgdmFs
dWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBOdW1i
ZXJTZXQpLCBwcm9wZXJ0eV9udW1iZXJfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1
bHQtPnNldE51bWJlcihBU0NJSUxpdGVyYWwoIm51bWJlciIpLCB2YWx1ZSk7CisgICAgICAgICAg
ICByZXR1cm4gY2FzdFN0YXRlPE51bWJlclNldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1
aWxkZXI8U1RBVEUgfCBBbmltYWxzU2V0PiYgc2V0QW5pbWFscyhJbnNwZWN0b3I6OlR5cGVCdWls
ZGVyOjpUZXN0OjpDYXN0ZWRBbmltYWxzIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBD
T01QSUxFX0FTU0VSVCghKFNUQVRFICYgQW5pbWFsc1NldCksIHByb3BlcnR5X2FuaW1hbHNfYWxy
ZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwo
ImFuaW1hbHMiKSwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Z2V0VGVzdEVudW1Db25zdGFudFZh
bHVlKHN0YXRpY19jYXN0PGludD4odmFsdWUpKSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0
YXRlPEFuaW1hbHNTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwg
SWRTZXQ+JiBzZXRJZChpbnQgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKCEoU1RBVEUgJiBJZFNldCksIHByb3BlcnR5X2lkX2FscmVhZHlfc2V0KTsKKyAgICAg
ICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoQVNDSUlMaXRlcmFsKCJpZCIpLCB2YWx1ZSk7Cisg
ICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPElkU2V0PigpOworICAgICAgICB9CisKKyAgICAg
ICAgQnVpbGRlcjxTVEFURSB8IFRyZWVTZXQ+JiBzZXRUcmVlKFBhc3NSZWZQdHI8SW5zcGVjdG9y
OjpUeXBlQnVpbGRlcjo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0MT4gdmFsdWUpCisgICAgICAgIHsK
KyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBUcmVlU2V0KSwgcHJvcGVydHlf
dHJlZV9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0VmFsdWUoQVNDSUlM
aXRlcmFsKCJ0cmVlIiksIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VHJl
ZVNldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIG9wZXJhdG9yIFJlZlB0cjxUeXBlTmVlZGlu
Z0Nhc3Q+JiAoKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9
PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOworICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoc2l6ZW9mKFR5cGVOZWVkaW5nQ2FzdCkgPT0gc2l6ZW9mKEluc3BlY3Rvcjo6SW5z
cGVjdG9yT2JqZWN0KSwgY2Fubm90X2Nhc3QpOworICAgICAgICAgICAgcmV0dXJuICpyZWludGVy
cHJldF9jYXN0PFJlZlB0cjxUeXBlTmVlZGluZ0Nhc3Q+Kj4oJm1fcmVzdWx0KTsKKyAgICAgICAg
fQorCisgICAgICAgIFBhc3NSZWZQdHI8VHlwZU5lZWRpbmdDYXN0PiByZWxlYXNlKCkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxUeXBlTmVlZGluZ0Nhc3Q+KCp0aGlzKS5y
ZWxlYXNlKCk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgLyoKKyAgICAgKiBTeW50aGV0aWMg
Y29uc3RydWN0b3I6CisgICAgICogUmVmUHRyPFR5cGVOZWVkaW5nQ2FzdD4gcmVzdWx0ID0gVHlw
ZU5lZWRpbmdDYXN0OjpjcmVhdGUoKQorICAgICAqICAgICAuc2V0U3RyaW5nKC4uLikKKyAgICAg
KiAgICAgLnNldE51bWJlciguLi4pCisgICAgICogICAgIC5zZXRBbmltYWxzKC4uLikKKyAgICAg
KiAgICAgLnNldElkKC4uLikKKyAgICAgKiAgICAgLnNldFRyZWUoLi4uKTsKKyAgICAgKi8KKyAg
ICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdDo6Y3Jl
YXRlKCkpOworICAgIH0KKyAgICB0eXBlZGVmIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlN0cnVj
dEl0ZW1UcmFpdHMgSXRlbVRyYWl0czsKK307CisKKy8qICAqLworZW51bSBjbGFzcyBVbmNhc3Rl
ZEFuaW1hbHMgeworICAgIFBpZ3MgPSA0LAorICAgIENvd3MgPSA1LAorICAgIENhdHMgPSA2LAor
ICAgIEhlbnMgPSAxLAorfTsgLy8gZW51bSBjbGFzcyBVbmNhc3RlZEFuaW1hbHMKKy8qICAqLwor
ZW51bSBjbGFzcyBDYXN0ZWRBbmltYWxzIHsKKyAgICBEdWNrcyA9IDAsCisgICAgSGVucyA9IDEs
CisgICAgQ3Jvd3MgPSAyLAorICAgIEZsYW1pbmdvcyA9IDMsCit9OyAvLyBlbnVtIGNsYXNzIENh
c3RlZEFuaW1hbHMKK2NsYXNzIFJlY3Vyc2l2ZU9iamVjdDEgOiBwdWJsaWMgSW5zcGVjdG9yOjpJ
bnNwZWN0b3JPYmplY3RCYXNlIHsKK3B1YmxpYzoKKyAgICBlbnVtIHsKKyAgICAgICAgTm9GaWVs
ZHNTZXQgPSAwLAorICAgICAgICBBbGxGaWVsZHNTZXQgPSAwCisgICAgfTsKKworICAgIHRlbXBs
YXRlPGludCBTVEFURT4KKyAgICBjbGFzcyBCdWlsZGVyIHsKKyAgICBwcml2YXRlOgorICAgICAg
ICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OworCisgICAgICAg
IHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNU
QVRFIHwgU1RFUD4qPih0aGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXIoUGFzc1Jl
ZlB0cjwvKlJlY3Vyc2l2ZU9iamVjdDEqL0luc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBwdHIp
CisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRz
U2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOworICAgICAgICAgICAgbV9y
ZXN1bHQgPSBwdHI7CisgICAgICAgIH0KKyAgICAgICAgZnJpZW5kIGNsYXNzIFJlY3Vyc2l2ZU9i
amVjdDE7CisgICAgcHVibGljOgorCisgICAgICAgIG9wZXJhdG9yIFJlZlB0cjxSZWN1cnNpdmVP
YmplY3QxPiYgKCkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUg
PT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKKyAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKHNpemVvZihSZWN1cnNpdmVPYmplY3QxKSA9PSBzaXplb2YoSW5zcGVjdG9yOjpJ
bnNwZWN0b3JPYmplY3QpLCBjYW5ub3RfY2FzdCk7CisgICAgICAgICAgICByZXR1cm4gKnJlaW50
ZXJwcmV0X2Nhc3Q8UmVmUHRyPFJlY3Vyc2l2ZU9iamVjdDE+Kj4oJm1fcmVzdWx0KTsKKyAgICAg
ICAgfQorCisgICAgICAgIFBhc3NSZWZQdHI8UmVjdXJzaXZlT2JqZWN0MT4gcmVsZWFzZSgpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBSZWZQdHI8UmVjdXJzaXZlT2JqZWN0MT4oKnRo
aXMpLnJlbGVhc2UoKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICAvKgorICAgICAqIFN5bnRo
ZXRpYyBjb25zdHJ1Y3RvcjoKKyAgICAgKiBSZWZQdHI8UmVjdXJzaXZlT2JqZWN0MT4gcmVzdWx0
ID0gUmVjdXJzaXZlT2JqZWN0MTo6Y3JlYXRlKCk7CisgICAgICovCisgICAgc3RhdGljIEJ1aWxk
ZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gQnVpbGRlcjxO
b0ZpZWxkc1NldD4oSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpKTsKKyAgICB9
CisgICAgdHlwZWRlZiBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpTdHJ1Y3RJdGVtVHJhaXRzIEl0
ZW1UcmFpdHM7CisKKyAgICB2b2lkIHNldE9iaihQYXNzUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1
aWxkZXI6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDI+IHZhbHVlKQorICAgIHsKKyAgICAgICAgdGhp
cy0+c2V0VmFsdWUoQVNDSUlMaXRlcmFsKCJvYmoiKSwgdmFsdWUpOworICAgIH0KK307CisKK2Ns
YXNzIFJlY3Vyc2l2ZU9iamVjdDIgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3RC
YXNlIHsKK3B1YmxpYzoKKyAgICBlbnVtIHsKKyAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAorICAg
ICAgICBBbGxGaWVsZHNTZXQgPSAwCisgICAgfTsKKworICAgIHRlbXBsYXRlPGludCBTVEFURT4K
KyAgICBjbGFzcyBCdWlsZGVyIHsKKyAgICBwcml2YXRlOgorICAgICAgICBSZWZQdHI8SW5zcGVj
dG9yOjpJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OworCisgICAgICAgIHRlbXBsYXRlPGludCBT
VEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0
aGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjwvKlJlY3Vyc2l2
ZU9iamVjdDIqL0luc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBwdHIpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2Ny
ZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOworICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7Cisg
ICAgICAgIH0KKyAgICAgICAgZnJpZW5kIGNsYXNzIFJlY3Vyc2l2ZU9iamVjdDI7CisgICAgcHVi
bGljOgorCisgICAgICAgIG9wZXJhdG9yIFJlZlB0cjxSZWN1cnNpdmVPYmplY3QyPiYgKCkKKyAg
ICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0
LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVv
ZihSZWN1cnNpdmVPYmplY3QyKSA9PSBzaXplb2YoSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Qp
LCBjYW5ub3RfY2FzdCk7CisgICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVm
UHRyPFJlY3Vyc2l2ZU9iamVjdDI+Kj4oJm1fcmVzdWx0KTsKKyAgICAgICAgfQorCisgICAgICAg
IFBhc3NSZWZQdHI8UmVjdXJzaXZlT2JqZWN0Mj4gcmVsZWFzZSgpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBSZWZQdHI8UmVjdXJzaXZlT2JqZWN0Mj4oKnRoaXMpLnJlbGVhc2UoKTsK
KyAgICAgICAgfQorICAgIH07CisKKyAgICAvKgorICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3Rv
cjoKKyAgICAgKiBSZWZQdHI8UmVjdXJzaXZlT2JqZWN0Mj4gcmVzdWx0ID0gUmVjdXJzaXZlT2Jq
ZWN0Mjo6Y3JlYXRlKCk7CisgICAgICovCisgICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+
IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSW5z
cGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpKTsKKyAgICB9CisgICAgdHlwZWRlZiBJ
bnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpTdHJ1Y3RJdGVtVHJhaXRzIEl0ZW1UcmFpdHM7CisKKyAg
ICB2b2lkIHNldE9iaihQYXNzUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlRlc3Q6OlJl
Y3Vyc2l2ZU9iamVjdDE+IHZhbHVlKQorICAgIHsKKyAgICAgICAgdGhpcy0+c2V0VmFsdWUoQVND
SUlMaXRlcmFsKCJvYmoiKSwgdmFsdWUpOworICAgIH0KK307CisKK30gLy8gVGVzdAorCit0ZW1w
bGF0ZTw+IHN0cnVjdCBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlRlc3Q6
OkNhc3RlZEFuaW1hbHM+IHsKKyNpZiAhQVNTRVJUX0RJU0FCTEVECitzdGF0aWMgdm9pZCBhc3Nl
cnRDb3JyZWN0VmFsdWUoSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSopOworI2VuZGlmIC8vICFB
U1NFUlRfRElTQUJMRUQKK307Cit0ZW1wbGF0ZTw+IHN0cnVjdCBCaW5kaW5nVHJhaXRzPEluc3Bl
Y3Rvcjo6VHlwZUJ1aWxkZXI6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdD4geworc3RhdGljIFBhc3NS
ZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0PiBydW50
aW1lQ2FzdChQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+IHZhbHVlKTsKKyNp
ZiAhQVNTRVJUX0RJU0FCTEVECitzdGF0aWMgdm9pZCBhc3NlcnRDb3JyZWN0VmFsdWUoSW5zcGVj
dG9yOjpJbnNwZWN0b3JWYWx1ZSopOworI2VuZGlmIC8vICFBU1NFUlRfRElTQUJMRUQKK307Cit0
ZW1wbGF0ZTw+IHN0cnVjdCBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlRl
c3Q6OlJlY3Vyc2l2ZU9iamVjdDE+IHsKKyNpZiAhQVNTRVJUX0RJU0FCTEVECitzdGF0aWMgdm9p
ZCBhc3NlcnRDb3JyZWN0VmFsdWUoSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSopOworI2VuZGlm
IC8vICFBU1NFUlRfRElTQUJMRUQKK307Cit0ZW1wbGF0ZTw+IHN0cnVjdCBCaW5kaW5nVHJhaXRz
PEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDI+IHsKKyNpZiAh
QVNTRVJUX0RJU0FCTEVECitzdGF0aWMgdm9pZCBhc3NlcnRDb3JyZWN0VmFsdWUoSW5zcGVjdG9y
OjpJbnNwZWN0b3JWYWx1ZSopOworI2VuZGlmIC8vICFBU1NFUlRfRElTQUJMRUQKK307CisKK30g
Ly8gbmFtZXNwYWNlIFR5cGVCdWlsZGVyCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisj
ZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKworI2VuZGlmIC8vICFkZWZpbmVkKEluc3BlY3Rv
clRlc3RUeXBlQnVpbGRlcnNfaCkKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdFR5cGVCdWls
ZGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmNwcAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KKy8vIGJ5
IHRoZSBzY3JpcHQ6IEphdmFTY3JpcHRDb3JlL3JlcGxheS9zY3JpcHRzL0NvZGVHZW5lcmF0b3JJ
bnNwZWN0b3IucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkluc3BlY3RvclRl
c3RUeXBlQnVpbGRlcnMuaCIKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRlIDx3
dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCituYW1lc3BhY2Ug
VHlwZUJ1aWxkZXIgeworCitzdGF0aWMgY29uc3QgY2hhciogY29uc3QgZW51bV9jb25zdGFudF92
YWx1ZXNbXSA9IHsKKyAgICAiRHVja3MiLAorICAgICJIZW5zIiwKKyAgICAiQ3Jvd3MiLAorICAg
ICJGbGFtaW5nb3MiLAorICAgICJQaWdzIiwKKyAgICAiQ293cyIsCisgICAgIkNhdHMiLAorfTsK
KworU3RyaW5nIGdldFRlc3RFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSkgeworICAgIHJldHVy
biBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb2RlXTsKK30KKworCisKKyNpZiAhQVNTRVJUX0RJU0FC
TEVECit2b2lkIEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6VGVzdDo6Q2Fz
dGVkQW5pbWFscz46OmFzc2VydENvcnJlY3RWYWx1ZShJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVl
KiB2YWx1ZSkKK3sKKyAgICBXVEY6OlN0cmluZyBzOworICAgIGJvb2wgY2FzdF9yZXMgPSB2YWx1
ZS0+YXNTdHJpbmcoJnMpOworICAgIEFTU0VSVChjYXN0X3Jlcyk7CisgICAgQVNTRVJUKHMgPT0g
IkR1Y2tzIiB8fCBzID09ICJIZW5zIiB8fCBzID09ICJDcm93cyIgfHwgcyA9PSAiRmxhbWluZ29z
Iik7Cit9CisjZW5kaWYgLy8gIUFTU0VSVF9ESVNBQkxFRAorCisjaWYgIUFTU0VSVF9ESVNBQkxF
RAordm9pZCBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlRlc3Q6OlR5cGVO
ZWVkaW5nQ2FzdD46OmFzc2VydENvcnJlY3RWYWx1ZShJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVl
KiB2YWx1ZSkKK3sKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBvYmplY3Q7CisgICAgYm9v
bCBjYXN0UmVzID0gdmFsdWUtPmFzT2JqZWN0KCZvYmplY3QpOworICAgIEFTU0VSVF9VTlVTRUQo
Y2FzdFJlcywgY2FzdFJlcyk7CisgICAgeworICAgICAgICBJbnNwZWN0b3JPYmplY3Q6Oml0ZXJh
dG9yIHN0cmluZ1BvczsKKyAgICAgICAgc3RyaW5nUG9zID0gb2JqZWN0LT5maW5kKCJzdHJpbmci
KTsKKyAgICAgICAgQVNTRVJUKHN0cmluZ1BvcyAhPSBvYmplY3QtPmVuZCgpKTsKKyAgICAgICAg
QmluZGluZ1RyYWl0czxTdHJpbmc+Ojphc3NlcnRDb3JyZWN0VmFsdWUoc3RyaW5nUG9zLT52YWx1
ZS5nZXQoKSk7CisgICAgfQorICAgIHsKKyAgICAgICAgSW5zcGVjdG9yT2JqZWN0OjppdGVyYXRv
ciBudW1iZXJQb3M7CisgICAgICAgIG51bWJlclBvcyA9IG9iamVjdC0+ZmluZCgibnVtYmVyIik7
CisgICAgICAgIEFTU0VSVChudW1iZXJQb3MgIT0gb2JqZWN0LT5lbmQoKSk7CisgICAgICAgIEJp
bmRpbmdUcmFpdHM8aW50Pjo6YXNzZXJ0Q29ycmVjdFZhbHVlKG51bWJlclBvcy0+dmFsdWUuZ2V0
KCkpOworICAgIH0KKyAgICB7CisgICAgICAgIEluc3BlY3Rvck9iamVjdDo6aXRlcmF0b3IgYW5p
bWFsc1BvczsKKyAgICAgICAgYW5pbWFsc1BvcyA9IG9iamVjdC0+ZmluZCgiYW5pbWFscyIpOwor
ICAgICAgICBBU1NFUlQoYW5pbWFsc1BvcyAhPSBvYmplY3QtPmVuZCgpKTsKKyAgICAgICAgQmlu
ZGluZ1RyYWl0czxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpUZXN0OjpDYXN0ZWRBbmltYWxzPjo6
YXNzZXJ0Q29ycmVjdFZhbHVlKGFuaW1hbHNQb3MtPnZhbHVlLmdldCgpKTsKKyAgICB9CisgICAg
eworICAgICAgICBJbnNwZWN0b3JPYmplY3Q6Oml0ZXJhdG9yIGlkUG9zOworICAgICAgICBpZFBv
cyA9IG9iamVjdC0+ZmluZCgiaWQiKTsKKyAgICAgICAgQVNTRVJUKGlkUG9zICE9IG9iamVjdC0+
ZW5kKCkpOworICAgICAgICBCaW5kaW5nVHJhaXRzPGludD46OmFzc2VydENvcnJlY3RWYWx1ZShp
ZFBvcy0+dmFsdWUuZ2V0KCkpOworICAgIH0KKyAgICB7CisgICAgICAgIEluc3BlY3Rvck9iamVj
dDo6aXRlcmF0b3IgdHJlZVBvczsKKyAgICAgICAgdHJlZVBvcyA9IG9iamVjdC0+ZmluZCgidHJl
ZSIpOworICAgICAgICBBU1NFUlQodHJlZVBvcyAhPSBvYmplY3QtPmVuZCgpKTsKKyAgICAgICAg
QmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpUZXN0OjpSZWN1cnNpdmVPYmpl
Y3QxPjo6YXNzZXJ0Q29ycmVjdFZhbHVlKHRyZWVQb3MtPnZhbHVlLmdldCgpKTsKKyAgICB9CisK
KyAgICBpbnQgZm91bmRQcm9wZXJ0aWVzQ291bnQgPSA1OworICAgIGlmIChmb3VuZFByb3BlcnRp
ZXNDb3VudCAhPSBvYmplY3QtPnNpemUoKSkKKyAgICAgICAgRkFUQUwoIlVuZXhwZWN0ZWQgcHJv
cGVydGllcyBpbiBvYmplY3Q6ICVzXG4iLCBvYmplY3QtPnRvSlNPTlN0cmluZygpLmFzY2lpKCku
ZGF0YSgpKTsKK30KKyNlbmRpZiAvLyAhQVNTRVJUX0RJU0FCTEVECisKK1Bhc3NSZWZQdHI8SW5z
cGVjdG9yOjpUeXBlQnVpbGRlcjo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0PiBCaW5kaW5nVHJhaXRz
PEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdD46OnJ1bnRpbWVD
YXN0KFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4gdmFsdWUpCit7CisgICAg
UmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBvYmplY3Q7CisgICAgYm9vbCBjYXN0
UmVzID0gdmFsdWUtPmFzT2JqZWN0KCZvYmplY3QpOworICAgIEFTU0VSVF9VTlVTRUQoY2FzdFJl
cywgY2FzdFJlcyk7CisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgIEJpbmRpbmdUcmFpdHM8SW5z
cGVjdG9yOjpUeXBlQnVpbGRlcjo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0Pjo6YXNzZXJ0Q29ycmVj
dFZhbHVlKG9iamVjdC5nZXQoKSk7CisjZW5kaWYgIC8vICFBU1NFUlRfRElTQUJMRUQKKyAgICBD
T01QSUxFX0FTU0VSVChzaXplb2YoSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6VGVzdDo6VHlwZU5l
ZWRpbmdDYXN0KSA9PSBzaXplb2YoSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3RCYXNlKSwgdHlw
ZV9jYXN0X3Byb2JsZW0pOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxJbnNwZWN0b3I6OlR5cGVC
dWlsZGVyOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3QqPihzdGF0aWNfY2FzdDxJbnNwZWN0b3I6Oklu
c3BlY3Rvck9iamVjdEJhc2UqPihvYmplY3QuZ2V0KCkpKTsKK30KKworCisjaWYgIUFTU0VSVF9E
SVNBQkxFRAordm9pZCBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlRlc3Q6
OlJlY3Vyc2l2ZU9iamVjdDE+Ojphc3NlcnRDb3JyZWN0VmFsdWUoSW5zcGVjdG9yOjpJbnNwZWN0
b3JWYWx1ZSogdmFsdWUpCit7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gb2JqZWN0Owor
ICAgIGJvb2wgY2FzdFJlcyA9IHZhbHVlLT5hc09iamVjdCgmb2JqZWN0KTsKKyAgICBBU1NFUlRf
VU5VU0VEKGNhc3RSZXMsIGNhc3RSZXMpOworCisgICAgaW50IGZvdW5kUHJvcGVydGllc0NvdW50
ID0gMDsKKyAgICB7CisgICAgICAgIEluc3BlY3Rvck9iamVjdDo6aXRlcmF0b3Igb2JqUG9zOwor
ICAgICAgICBvYmpQb3MgPSBvYmplY3QtPmZpbmQoIm9iaiIpOworICAgICAgICBpZiAob2JqUG9z
ICE9IG9iamVjdC0+ZW5kKCkpIHsKKyAgICAgICAgICAgIEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9y
OjpUeXBlQnVpbGRlcjo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0Mj46OmFzc2VydENvcnJlY3RWYWx1
ZShvYmpQb3MtPnZhbHVlLmdldCgpKTsKKyAgICAgICAgICAgICsrZm91bmRQcm9wZXJ0aWVzQ291
bnQ7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKGZvdW5kUHJvcGVydGllc0NvdW50ICE9IG9i
amVjdC0+c2l6ZSgpKQorICAgICAgICBGQVRBTCgiVW5leHBlY3RlZCBwcm9wZXJ0aWVzIGluIG9i
amVjdDogJXNcbiIsIG9iamVjdC0+dG9KU09OU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOworfQor
I2VuZGlmIC8vICFBU1NFUlRfRElTQUJMRUQKKworI2lmICFBU1NFUlRfRElTQUJMRUQKK3ZvaWQg
QmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpUZXN0OjpSZWN1cnNpdmVPYmpl
Y3QyPjo6YXNzZXJ0Q29ycmVjdFZhbHVlKEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUqIHZhbHVl
KQoreworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG9iamVjdDsKKyAgICBib29sIGNhc3RS
ZXMgPSB2YWx1ZS0+YXNPYmplY3QoJm9iamVjdCk7CisgICAgQVNTRVJUX1VOVVNFRChjYXN0UmVz
LCBjYXN0UmVzKTsKKworICAgIGludCBmb3VuZFByb3BlcnRpZXNDb3VudCA9IDA7CisgICAgewor
ICAgICAgICBJbnNwZWN0b3JPYmplY3Q6Oml0ZXJhdG9yIG9ialBvczsKKyAgICAgICAgb2JqUG9z
ID0gb2JqZWN0LT5maW5kKCJvYmoiKTsKKyAgICAgICAgaWYgKG9ialBvcyAhPSBvYmplY3QtPmVu
ZCgpKSB7CisgICAgICAgICAgICBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6
OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDE+Ojphc3NlcnRDb3JyZWN0VmFsdWUob2JqUG9zLT52YWx1
ZS5nZXQoKSk7CisgICAgICAgICAgICArK2ZvdW5kUHJvcGVydGllc0NvdW50OworICAgICAgICB9
CisgICAgfQorICAgIGlmIChmb3VuZFByb3BlcnRpZXNDb3VudCAhPSBvYmplY3QtPnNpemUoKSkK
KyAgICAgICAgRkFUQUwoIlVuZXhwZWN0ZWQgcHJvcGVydGllcyBpbiBvYmplY3Q6ICVzXG4iLCBv
YmplY3QtPnRvSlNPTlN0cmluZygpLmFzY2lpKCkuZGF0YSgpKTsKK30KKyNlbmRpZiAvLyAhQVNT
RVJUX0RJU0FCTEVECisKK30gLy8gbmFtZXNwYWNlIFR5cGVCdWlsZGVyCisKK30gLy8gbmFtZXNw
YWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKworIyMjIEVuZCBG
aWxlOiBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tZHVwbGljYXRlLXR5
cGUtZGVjbGFyYXRpb25zLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZmFpbC1vbi1kdXBsaWNhdGUtdHlwZS1kZWNsYXJhdGlvbnMuanNvbgpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi43MDJmYzZhMzI3MGE2NDZhNDUwNDQ3ZmRjMDQwMTM5OTVhOTQyYmYwCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2ZhaWwtb24tZHVwbGljYXRlLXR5cGUtZGVjbGFyYXRpb25zLmpzb24KQEAgLTAsMCArMSwxNSBA
QAoreworICAgICJkb21haW4iOiAiUnVudGltZSIsCisgICAgInR5cGVzIjogWworICAgICAgICB7
CisgICAgICAgICAgICAiaWQiOiAiUmVtb3RlT2JqZWN0SWQiLAorICAgICAgICAgICAgInR5cGUi
OiAic3RyaW5nIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUgb2JqZWN0IGlk
ZW50aWZpZXIuIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiUmVt
b3RlT2JqZWN0SWQiLAorICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKKyAgICAgICAgICAg
ICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUgb2JqZWN0IGlkZW50aWZpZXIuIgorICAgICAgICB9Cisg
ICAgXQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2ZhaWwtb24tdHlwZS1kZWNsYXJhdGlvbi11c2luZy10eXBlLXJlZmVyZW5jZS5q
c29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwt
b24tdHlwZS1kZWNsYXJhdGlvbi11c2luZy10eXBlLXJlZmVyZW5jZS5qc29uCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjE5Yjc1OTBjY2M2ZjZiYzM0NDNhNGEyODNjYTZmY2NmZGYzMjc3MzQKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1v
bi10eXBlLWRlY2xhcmF0aW9uLXVzaW5nLXR5cGUtcmVmZXJlbmNlLmpzb24KQEAgLTAsMCArMSwx
MyBAQAorWworeworICAgICJkb21haW4iOiAiUnVudGltZSIsCisgICAgInR5cGVzIjogWworICAg
ICAgICB7CisgICAgICAgICAgICAiaWQiOiAiUmVtb3RlT2JqZWN0SWQiLAorICAgICAgICAgICAg
InR5cGUiOiAib2JqZWN0IiwKKyAgICAgICAgICAgICIkcmVmIjogIlNvbWVUeXBlIiwKKyAgICAg
ICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUgb2JqZWN0IGlkZW50aWZpZXIuIgorICAgICAg
ICB9CisgICAgXQorfQorXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVyZW5jZS1pbi10eXBl
LWRlY2xhcmF0aW9uLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZmFpbC1vbi11bmtub3duLXR5cGUtcmVmZXJlbmNlLWluLXR5cGUtZGVjbGFyYXRp
b24uanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5kNjg4N2EyNzQxMTkwMGE4MGQ1MGYwMDNlYWMzNmMxM2E5OWZh
ZTU4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2ZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVyZW5jZS1pbi10eXBlLWRlY2xh
cmF0aW9uLmpzb24KQEAgLTAsMCArMSwxMiBAQAorWworeworICAgICJkb21haW4iOiAiUnVudGlt
ZSIsCisgICAgInR5cGVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiUmVtb3Rl
T2JqZWN0SWQiLAorICAgICAgICAgICAgInR5cGUiOiAiZHJhZ29uIiwKKyAgICAgICAgICAgICJk
ZXNjcmlwdGlvbiI6ICJVbmlxdWUgb2JqZWN0IGlkZW50aWZpZXIuIgorICAgICAgICB9CisgICAg
XQorfQorXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2ZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVyZW5jZS1pbi10eXBlLW1lbWJlci5q
c29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwt
b24tdW5rbm93bi10eXBlLXJlZmVyZW5jZS1pbi10eXBlLW1lbWJlci5qc29uCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmI4MTdkYjUwNDRkYzFmMjg1NTcwMDhjMWYxNzYxZjFiMDY4ZjRjZTYKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1v
bi11bmtub3duLXR5cGUtcmVmZXJlbmNlLWluLXR5cGUtbWVtYmVyLmpzb24KQEAgLTAsMCArMSwx
NSBAQAorWworeworICAgICJkb21haW4iOiAiRmFudGFzeSIsCisgICAgInR5cGVzIjogWworICAg
ICAgICB7CisgICAgICAgICAgICAiaWQiOiAiRHJhZ29uRWdnIiwKKyAgICAgICAgICAgICJ0eXBl
IjogIm9iamVjdCIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiQSBkcmFnb24gZWdnLiIs
CisgICAgICAgICAgICAicHJvcGVydGllcyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjog
ImNvbG9yIiwgIiRyZWYiOiAiQ29sb3IiIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAg
IF0KK30KK10KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9zYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3NhbWUtdHlwZS1pZC1kaWZmZXJl
bnQtZG9tYWluLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2JmNGRmZjVjY2MyOWQwZThjMWZhNGIyZGQzMjgz
ZTc3MTYzMmM3ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9zYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCkBA
IC0wLDAgKzEsMjIgQEAKK1sKK3sKKyAgICAiZG9tYWluIjogIlJ1bnRpbWUiLAorICAgICJ0eXBl
cyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIlJlbW90ZU9iamVjdElkIiwKKyAg
ICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAi
VW5pcXVlIG9iamVjdCBpZGVudGlmaWVyLiIKKyAgICAgICAgfQorICAgIF0KK30sCit7CisgICAg
ImRvbWFpbiI6ICJSdW50aW1lMiIsCisgICAgInR5cGVzIjogWworICAgICAgICB7CisgICAgICAg
ICAgICAiaWQiOiAiUmVtb3RlT2JqZWN0SWQiLAorICAgICAgICAgICAgInR5cGUiOiAic3RyaW5n
IiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUgb2JqZWN0IGlkZW50aWZpZXIu
IgorICAgICAgICB9CisgICAgXQorfQorXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3R5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmlt
aXRpdmUtdHlwZS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL3R5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmNiYzlkNTM5NDc4ZGI0OTVjOTYwNjdlY2Q1NGE5NWJlNTJmOGQwNzAKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
dHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24KQEAgLTAsMCArMSwx
MCBAQAoreworICAgICJkb21haW4iOiAiUnVudGltZSIsCisgICAgInR5cGVzIjogWworICAgICAg
ICB7CisgICAgICAgICAgICAiaWQiOiAiUmVtb3RlT2JqZWN0SWQiLAorICAgICAgICAgICAgInR5
cGUiOiAiaW50ZWdlciIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5pcXVlIG9iamVj
dCBpZGVudGlmaWVyLiIKKyAgICAgICAgfQorICAgIF0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy90eXBlLWRlY2xhcmF0aW9uLWFy
cmF5LXR5cGUuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy90eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jZmIwOGJk
OTQwYjY0ZmI2NjAzOTY1Y2UxYjA0ZDNmYzk3NDllYTkwCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3R5cGUtZGVjbGFyYXRp
b24tYXJyYXktdHlwZS5qc29uCkBAIC0wLDAgKzEsNTAgQEAKK1sKK3sKKyAgICAiZG9tYWluIjog
IkRlYnVnZ2VyIiwKKyAgICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6
ICJCcmVha3BvaW50SWQiLAorICAgICAgICAgICAgInR5cGUiOiAiaW50ZWdlciIKKyAgICAgICAg
fSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIlJlYXNvbiIsCisgICAgICAgICAgICAi
dHlwZSI6ICJzdHJpbmciLAorICAgICAgICAgICAgImVudW0iOiBbIkRpZWQiLCAiRmFpbnRlZCIs
ICJIdW5ncnkiXQorICAgICAgICB9CisgICAgXQorfSwKK3sKKyAgICAiZG9tYWluIjogIlJ1bnRp
bWUiLAorICAgICJ0eXBlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIk9iamVj
dElkIiwKKyAgICAgICAgICAgICJ0eXBlIjogImludGVnZXIiCisgICAgICAgIH0sCisgICAgICAg
IHsKKyAgICAgICAgICAgICJpZCI6ICJMdWNreU51bWJlcnMiLAorICAgICAgICAgICAgInR5cGUi
OiAiYXJyYXkiLAorICAgICAgICAgICAgIml0ZW1zIjogeyAidHlwZSI6ICJpbnRlZ2VyIiB9Cisg
ICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJCYWJ5TmFtZXMiLAorICAg
ICAgICAgICAgInR5cGUiOiAiYXJyYXkiLAorICAgICAgICAgICAgIml0ZW1zIjogeyAidHlwZSI6
ICJzdHJpbmciIH0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIk5l
d09iamVjdHMiLAorICAgICAgICAgICAgInR5cGUiOiAiYXJyYXkiLAorICAgICAgICAgICAgIml0
ZW1zIjogeyAiJHJlZiI6ICJPYmplY3RJZCIgfQorICAgICAgICB9LAorICAgICAgICB7CisgICAg
ICAgICAgICAiaWQiOiAiT2xkT2JqZWN0cyIsCisgICAgICAgICAgICAidHlwZSI6ICJhcnJheSIs
CisgICAgICAgICAgICAiaXRlbXMiOiB7ICIkcmVmIjogIkRlYnVnZ2VyLkJyZWFrcG9pbnRJZCIg
fQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiU3RvcFJlYXNvbnMi
LAorICAgICAgICAgICAgInR5cGUiOiAiYXJyYXkiLAorICAgICAgICAgICAgIml0ZW1zIjogeyAi
JHJlZiI6ICJEZWJ1Z2dlci5SZWFzb24iIH0KKyAgICAgICAgfQorICAgIF0KK30KK10KZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy90eXBl
LWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL3R5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24KbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uMDU4NTdmZDA4ZGIwMTc4NDAzZTA1MDY0NTUyZjk0NTZmZTU5YjQyZQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy90
eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uCkBAIC0wLDAgKzEsMjAgQEAKK3sKKyAgICAi
ZG9tYWluIjogIlJ1bnRpbWUiLAorICAgICJ0eXBlcyI6IFsKKyAgICAgICAgeworICAgICAgICAg
ICAgImlkIjogIkx1Y2t5TnVtYmVycyIsCisgICAgICAgICAgICAidHlwZSI6ICJpbnRlZ2VyIiwK
KyAgICAgICAgICAgICJlbnVtIjogWzAsIDEsIDJdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAg
ICAgICAgICAgICJpZCI6ICJGYXJtQW5pbWFscyIsCisgICAgICAgICAgICAidHlwZSI6ICJzdHJp
bmciLAorICAgICAgICAgICAgImVudW0iOiBbIlBpZ3MiLCAiQ293cyIsICJDYXRzIiwgIkhlbnMi
XQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiVHdvTGVnZ2VkQW5p
bWFscyIsCisgICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAorICAgICAgICAgICAgImVudW0i
OiBbIkR1Y2tzIiwgIkhlbnMiLCAiQ3Jvd3MiLCAiRmxhbWluZ29zIl0KKyAgICAgICAgfQorICAg
IF0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy90eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24gYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvdHlwZS1kZWNsYXJhdGlvbi1vYmplY3Qt
dHlwZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZmNTdhZDJjZjVmNzhiYzY1NGRmODFhOTNkYmI1NjA2OWQx
NWE0MzEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCkBAIC0wLDAg
KzEsOTcgQEAKK1sKK3sKKyAgICAiZG9tYWluIjogIkRhdGFiYXNlIiwKKyAgICAiZGVzY3JpcHRp
b24iOiAiVGVzdCB0eXBlIGJ1aWxkZXIgZ2VuZXJhdGlvbiBvZiB2YXJpb3VzIG9iamVjdCB0eXBl
cy4iLAorICAgICJ0eXBlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIkVycm9y
IiwKKyAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCisgICAgICAgICAgICAiZGVzY3JpcHRp
b24iOiAiRGF0YWJhc2UgZXJyb3IuIiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWworICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAibWVzc2FnZSIsICJ0eXBlIjogInN0cmluZyIsICJkZXNj
cmlwdGlvbiI6ICJFcnJvciBtZXNzYWdlLiIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjog
ImNvZGUiLCAidHlwZSI6ICJpbnRlZ2VyIiwgImRlc2NyaXB0aW9uIjogIkVycm9yIGNvZGUuIiB9
CisgICAgICAgICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6
ICJPcHRpb25hbFBhcmFtZXRlckJ1bmRsZSIsCisgICAgICAgICAgICAidHlwZSI6ICJvYmplY3Qi
LAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogImFycmF5IiwgIm9wdGlvbmFsIjogdHJ1ZSwgIml0ZW1z
IjogeyAidHlwZSI6ICJzdHJpbmciIH0gfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm5v
dGVzIiwgInR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAidGltZXN0YW1wIiwgInR5cGUiOiAibnVtYmVyIiwgIm9wdGlvbmFsIjog
dHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidmFsdWVzIiwgInR5cGUiOiAib2Jq
ZWN0IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicGF5
bG9hZCIsICJ0eXBlIjogImFueSIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogImVycm9yIiwgIiRyZWYiOiAiRXJyb3IiLCAib3B0aW9uYWwiOiB0cnVlIH0K
KyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjog
IlBhcmFtZXRlckJ1bmRsZSIsCisgICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAorICAgICAg
ICAgICAgInByb3BlcnRpZXMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2x1bW5O
YW1lcyIsICJ0eXBlIjogImFycmF5IiwgIml0ZW1zIjogeyAidHlwZSI6ICJzdHJpbmciIH0gfSwK
KyAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm5vdGVzIiwgInR5cGUiOiAic3RyaW5nIiB9LAor
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidGltZXN0YW1wIiwgInR5cGUiOiAibnVtYmVyIiB9
LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidmFsdWVzIiwgInR5cGUiOiAib2JqZWN0IiB9
LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicGF5bG9hZCIsICJ0eXBlIjogImFueSIgfSwK
KyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImVycm9yIiwgIiRyZWYiOiAiRXJyb3IiIH0KKyAg
ICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIk9i
amVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHMiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9u
IjogIkNvbmZsaWN0ZWQgbmFtZXMgbWF5IGNhdXNlIGdlbmVyYXRlZCBnZXR0ZXJzL3NldHRlcnMg
dG8gY2xhc2ggd2l0aCBidWlsdC1pbiBJbnNwZWN0b3JPYmplY3QgbWV0aG9kcy4iLAorICAgICAg
ICAgICAgInR5cGUiOiAib2JqZWN0IiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWworICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAiaW50ZWdlciIsICJ0eXBlIjogInN0cmluZyIgfSwKKyAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogImFycmF5IiwgInR5cGUiOiAic3RyaW5nIiB9LAorICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAic3RyaW5nIiwgInR5cGUiOiAic3RyaW5nIiB9LAorICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAidmFsdWUiLCAidHlwZSI6ICJzdHJpbmciIH0sCisgICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJvYmplY3QiLCAidHlwZSI6ICJzdHJpbmciIH0KKyAgICAg
ICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIkR1bW15
T2JqZWN0IiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJBbiBvcGVuIG9iamVjdCB0aGF0
IGRvZXNuJ3QgaGF2ZSBhbnkgcHJlZGVmaW5lZCBmaWVsZHMuIiwKKyAgICAgICAgICAgICJ0eXBl
IjogIm9iamVjdCIKKyAgICAgICAgfQorICAgIF0KK30sCit7CisgICAgImRvbWFpbiI6ICJUZXN0
IiwKKyAgICAiZGVzY3JpcHRpb24iOiAiVGVzdCB0aGUgZ2VuZXJhdGlvbiBvZiBzcGVjaWFsIGJl
aGF2aW9ycyB0aGF0IG9ubHkgYXBwbHkgdG8gc3BlY2lmaWMgY2xhc3Nlcy4iLAorICAgICJ0eXBl
cyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIlVucGxlYXNhbnROYW1lIiwKKyAg
ICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJUaGlzIHR5cGUgc2hvdWxkIGJlIHJlbmFtZWQgdG8g
SGFwcHlOYW1lIiwKKyAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCisgICAgICAgICAgICAi
bWVtYmVycyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm5vdGVzIiwgInR5cGUiOiAi
c3RyaW5nIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidGltZXN0YW1wIiwgInR5cGUi
OiAibnVtYmVyIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidmFsdWVzIiwgInR5cGUi
OiAib2JqZWN0IiB9CisgICAgICAgICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAg
ICAgICAgICJpZCI6ICJQYXJhbWV0ZXJCdW5kbGUiLAorICAgICAgICAgICAgInR5cGUiOiAib2Jq
ZWN0IiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWworICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJhcnJheSIsICJpdGVtcyI6IHsgInR5cGUiOiAi
c3RyaW5nIiB9IH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJub3RlcyIsICJ0eXBlIjog
InN0cmluZyIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBl
IjogIm51bWJlciIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInZhbHVlcyIsICJ0eXBl
IjogIm9iamVjdCIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBheWxvYWQiLCAidHlw
ZSI6ICJhbnkiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJlcnJvciIsICIkcmVmIjog
IkRhdGFiYXNlLkVycm9yIiB9CisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdLAorICAg
ICJjb21tYW5kcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiYXR0ZW1wdEN1
cnNlIiwKKyAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWworICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAiY3Vyc2UiLCAiJHJlZiI6ICJVbnBsZWFzYW50TmFtZSIgfQorICAgICAgICAgICAgXSwK
KyAgICAgICAgICAgICJyZXR1cm5zIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY2Vu
c29yZWRDdXJzZSIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IHRydWUgfQorICAgICAg
ICAgICAgXQorICAgICAgICB9CisgICAgXQorfQorXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3R5cGUtcmVxdWlyaW5nLXJ1bnRpbWUt
Y2FzdHMuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy90eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODNkOTRiZTg5
N2QyMmNjMDU4YmI2NDZmZWNkOWE0NzMwMzdiNmI5MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy90eXBlLXJlcXVpcmluZy1y
dW50aW1lLWNhc3RzLmpzb24KQEAgLTAsMCArMSw1MSBAQAorWworeworICAgICJkb21haW4iOiAi
VGVzdCIsCisgICAgInR5cGVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiVHlw
ZU5lZWRpbmdDYXN0IiwKKyAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCisgICAgICAgICAg
ICAiZGVzY3JpcHRpb24iOiAiQSBkdW1teSB0eXBlIHRoYXQgcmVxdWlyZXMgcnVudGltZSBjYXN0
cywgYW5kIGZvcmNlcyBub24tcHJpbWl0aXZlIHJlZmVyZW5jZWQgdHlwZXMgdG8gYWxzbyBlbWl0
IHJ1bnRpbWUgY2FzdCBoZWxwZXJzLiIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IFsKKyAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogInN0cmluZyIsICJ0eXBlIjogInN0cmluZyIsICJkZXNj
cmlwdGlvbiI6ICJTdHJpbmcgbWVtYmVyLiIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjog
Im51bWJlciIsICJ0eXBlIjogImludGVnZXIiLCAiZGVzY3JpcHRpb24iOiAiTnVtYmVyIG1lbWJl
ci4iIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJhbmltYWxzIiwgIiRyZWYiOiAiQ2Fz
dGVkQW5pbWFscyIsICJkZXNjcmlwdGlvbiI6ICJFbnVtIG1lbWJlci4iIH0sCisgICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJpZCIsICIkcmVmIjogIkNhc3RlZE9iamVjdElkIiwgImRlc2NyaXB0
aW9uIjogIkFsaWFzZWQgbWVtYmVyLiIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRy
ZWUiLCAiJHJlZiI6ICJSZWN1cnNpdmVPYmplY3QxIiwgImRlc2NyaXB0aW9uIjogIlJlY3Vyc2l2
ZSBvYmplY3QgbWVtYmVyLiIgfQorICAgICAgICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7
CisgICAgICAgICAgICAiaWQiOiAiQ2FzdGVkT2JqZWN0SWQiLAorICAgICAgICAgICAgInR5cGUi
OiAiaW50ZWdlciIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIlVu
Y2FzdGVkT2JqZWN0SWQiLAorICAgICAgICAgICAgInR5cGUiOiAiaW50ZWdlciIKKyAgICAgICAg
fSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIlVuY2FzdGVkQW5pbWFscyIsCisgICAg
ICAgICAgICAidHlwZSI6ICJzdHJpbmciLAorICAgICAgICAgICAgImVudW0iOiBbIlBpZ3MiLCAi
Q293cyIsICJDYXRzIiwgIkhlbnMiXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAg
ICAiaWQiOiAiQ2FzdGVkQW5pbWFscyIsCisgICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAor
ICAgICAgICAgICAgImVudW0iOiBbIkR1Y2tzIiwgIkhlbnMiLCAiQ3Jvd3MiLCAiRmxhbWluZ29z
Il0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIlJlY3Vyc2l2ZU9i
amVjdDEiLAorICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKKyAgICAgICAgICAgICJwcm9w
ZXJ0aWVzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAib2JqIiwgIiRyZWYiOiAiUmVj
dXJzaXZlT2JqZWN0MiIsICJvcHRpb25hbCI6IHRydWUgfQorICAgICAgICAgICAgXQorICAgICAg
ICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiUmVjdXJzaXZlT2JqZWN0MiIsCisg
ICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiBb
CisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJvYmoiLCAiJHJlZiI6ICJSZWN1cnNpdmVPYmpl
Y3QxIiwgIm9wdGlvbmFsIjogdHJ1ZSB9CisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBd
Cit9CitdCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJj
ZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IDY0N2NlNTliNDQ5NDQ2MzAzNmUwOGE0ZGI2
NGNmOTdhMWZlODZjMjguLjFkMWMyZTBlMGIzMDc5NDViNDA0MzkzMmIyNGRjMGVlMWY1ODg1YmUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9X
ZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC03NTIsNiArNzUyLDIxIEBAIHNldChXZWJDb3JlX0lE
TF9GSUxFUwogCiBzZXQoV2ViQ29yZV9JTlNQRUNUT1JfU0NSSVBUU19ESVIgIiR7SkFWQVNDUklQ
VENPUkVfRElSfS9pbnNwZWN0b3Ivc2NyaXB0cyIpCiAKK3NldChXZWJDb3JlX0lOU1BFQ1RPUl9Q
Uk9UT0NPTF9TQ1JJUFRTCisgICAgJHtXZWJDb3JlX0lOU1BFQ1RPUl9TQ1JJUFRTX0RJUn0vZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisgICAgJHtXZWJDb3JlX0lOU1BF
Q1RPUl9TQ1JJUFRTX0RJUn0vY29kZWdlbi9nZW5lcmF0ZV9iYWNrZW5kX2NvbW1hbmRzLnB5Cisg
ICAgJHtXZWJDb3JlX0lOU1BFQ1RPUl9TQ1JJUFRTX0RJUn0vY29kZWdlbi9nZW5lcmF0ZV9iYWNr
ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5CisgICAgJHtXZWJDb3JlX0lOU1BFQ1RPUl9TQ1JJUFRT
X0RJUn0vY29kZWdlbi9nZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24u
cHkKKyAgICAke1dlYkNvcmVfSU5TUEVDVE9SX1NDUklQVFNfRElSfS9jb2RlZ2VuL2dlbmVyYXRl
X2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5CisgICAgJHtXZWJDb3JlX0lOU1BFQ1RPUl9T
Q1JJUFRTX0RJUn0vY29kZWdlbi9nZW5lcmF0ZV9mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVu
dGF0aW9uLnB5CisgICAgJHtXZWJDb3JlX0lOU1BFQ1RPUl9TQ1JJUFRTX0RJUn0vY29kZWdlbi9n
ZW5lcmF0ZV90eXBlX2J1aWxkZXJfaGVhZGVyLnB5CisgICAgJHtXZWJDb3JlX0lOU1BFQ1RPUl9T
Q1JJUFRTX0RJUn0vY29kZWdlbi9nZW5lcmF0ZV90eXBlX2J1aWxkZXJfaW1wbGVtZW50YXRpb24u
cHkKKyAgICAke1dlYkNvcmVfSU5TUEVDVE9SX1NDUklQVFNfRElSfS9jb2RlZ2VuL2dlbmVyYXRv
ci5weQorICAgICR7V2ViQ29yZV9JTlNQRUNUT1JfU0NSSVBUU19ESVJ9L2NvZGVnZW4vZ2VuZXJh
dG9yX3RlbXBsYXRlcy5weQorICAgICR7V2ViQ29yZV9JTlNQRUNUT1JfU0NSSVBUU19ESVJ9L2Nv
ZGVnZW4vX19pbml0X18ucHkKKyAgICAke1dlYkNvcmVfSU5TUEVDVE9SX1NDUklQVFNfRElSfS9j
b2RlZ2VuL21vZGVscy5weQorKQorCiBzZXQoV2ViQ29yZV9JTlNQRUNUT1JfRE9NQUlOUwogICAg
ICR7V0VCQ09SRV9ESVJ9L2luc3BlY3Rvci9wcm90b2NvbC9BcHBsaWNhdGlvbkNhY2hlLmpzb24K
ICAgICAke1dFQkNPUkVfRElSfS9pbnNwZWN0b3IvcHJvdG9jb2wvQ1NTLmpzb24KQEAgLTMxOTUs
NyArMzIxMCw3IEBAIGFkZF9jdXN0b21fY29tbWFuZCgKICAgICBDT01NQU5EICR7UFlUSE9OX0VY
RUNVVEFCTEV9ICR7V2ViQ29yZV9JTlNQRUNUT1JfU0NSSVBUU19ESVJ9L2dlbmVyYXRlLWNvbWJp
bmVkLWluc3BlY3Rvci1qc29uLnB5ICR7V2ViQ29yZV9JTlNQRUNUT1JfRE9NQUlOU30gPiAke0RF
UklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0vSW5zcGVjdG9yV2ViLmpzb24KICAgICBWRVJCQVRJ
TSkKIAotIyBBbGwgV2ViIEluc3BlY3RvciBnZW5lcmF0ZWQgZmlsZXMgYXJlIGNyZWF0ZWQgd2l0
aCB0aGlzIG9uZSBjYWxsIHRvIENvZGVHZW5lcmF0b3JJbnNwZWN0b3IucG0KKyMgQWxsIFdlYiBJ
bnNwZWN0b3IgZ2VuZXJhdGVkIGZpbGVzIGFyZSBjcmVhdGVkIHdpdGggdGhpcyBvbmUgY2FsbCB0
byBnZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKIGFkZF9jdXN0b21fY29t
bWFuZCgKICAgICBPVVRQVVQgJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L0luc3BlY3Rv
cldlYkJhY2tlbmREaXNwYXRjaGVycy5jcHAKICAgICAgICAgICAgJHtERVJJVkVEX1NPVVJDRVNf
V0VCQ09SRV9ESVJ9L0luc3BlY3RvcldlYkJhY2tlbmREaXNwYXRjaGVycy5oCkBAIC0zMjAzLDEz
ICszMjE4LDExIEBAIGFkZF9jdXN0b21fY29tbWFuZCgKICAgICAgICAgICAgJHtERVJJVkVEX1NP
VVJDRVNfV0VCQ09SRV9ESVJ9L0luc3BlY3RvcldlYkZyb250ZW5kRGlzcGF0Y2hlcnMuaAogICAg
ICAgICAgICAke0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0vSW5zcGVjdG9yV2ViVHlwZUJ1
aWxkZXJzLmNwcAogICAgICAgICAgICAke0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0vSW5z
cGVjdG9yV2ViVHlwZUJ1aWxkZXJzLmgKLSAgICAgICAgICAgJHtERVJJVkVEX1NPVVJDRVNfV0VC
SU5TUEVDVE9SVUlfRElSfS9Vc2VySW50ZXJmYWNlL1Byb3RvY29sL0luc3BlY3RvcldlYkJhY2tl
bmRDb21tYW5kcy5qcworICAgICAgICAgICAke0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0v
SW5zcGVjdG9yV2ViQmFja2VuZENvbW1hbmRzLmpzCiAgICAgTUFJTl9ERVBFTkRFTkNZICR7REVS
SVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfS9JbnNwZWN0b3JXZWIuanNvbgotICAgIERFUEVORFMg
JHtXZWJDb3JlX0lOU1BFQ1RPUl9TQ1JJUFRTX0RJUn0vQ29kZUdlbmVyYXRvckluc3BlY3Rvci5w
eQotICAgICAgICAgICAgJHtXZWJDb3JlX0lOU1BFQ1RPUl9TQ1JJUFRTX0RJUn0vQ29kZUdlbmVy
YXRvckluc3BlY3RvclN0cmluZ3MucHkKKyAgICBERVBFTkRTICR7V2ViQ29yZV9JTlNQRUNUT1Jf
UFJPVE9DT0xfU0NJUlBUU30KICAgICAgICAgICAgICR7REVSSVZFRF9TT1VSQ0VTX0pBVkFTQ1JJ
UFRDT1JFX0RJUn0vSW5zcGVjdG9ySlMuanNvbgotICAgICAgICAgICAgJHtERVJJVkVEX1NPVVJD
RVNfSkFWQVNDUklQVENPUkVfRElSfS9JbnNwZWN0b3JKU1R5cGVCdWlsZGVycy5oCi0gICAgQ09N
TUFORCAke1BZVEhPTl9FWEVDVVRBQkxFfSAke1dlYkNvcmVfSU5TUEVDVE9SX1NDUklQVFNfRElS
fS9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5ICR7REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElS
fS9JbnNwZWN0b3JXZWIuanNvbiAke0RFUklWRURfU09VUkNFU19KQVZBU0NSSVBUQ09SRV9ESVJ9
L0luc3BlY3RvckpTLmpzb24gLS1vdXRwdXRfaF9kaXIgIiR7REVSSVZFRF9TT1VSQ0VTX1dFQkNP
UkVfRElSfSIgLS1vdXRwdXRfY3BwX2RpciAiJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9
IiAtLW91dHB1dF9qc19kaXIgIiR7REVSSVZFRF9TT1VSQ0VTX1dFQklOU1BFQ1RPUlVJX0RJUn0v
VXNlckludGVyZmFjZS9Qcm90b2NvbCIgLS1vdXRwdXRfdHlwZSBXZWIgLS13cml0ZV9hbHdheXMK
KyAgICBDT01NQU5EICR7UFlUSE9OX0VYRUNVVEFCTEV9ICR7V2ViQ29yZV9JTlNQRUNUT1JfU0NS
SVBUU19ESVJ9L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weSAtLW91dHB1
dERpciAiJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9IiAtLWZyYW1ld29yayBXZWJDb3Jl
ICR7REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfS9JbnNwZWN0b3JXZWIuanNvbiAke0RFUklW
RURfU09VUkNFU19KQVZBU0NSSVBUQ09SRV9ESVJ9L0luc3BlY3RvckpTLmpzb24gJiYgY3AgJHtE
RVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L0luc3BlY3RvcldlYkJhY2tlbmRDb21tYW5kcy5q
cyAke0RFUklWRURfU09VUkNFU19XRUJJTlNQRUNUT1JVSV9ESVJ9L1VzZXJJbnRlcmZhY2UvUHJv
dG9jb2wKICAgICBWRVJCQVRJTSkKIAogbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlIGIvU291cmNlL1dlYkNv
cmUvRGVyaXZlZFNvdXJjZXMubWFrZQppbmRleCA2ZDhiYmRkOTA1M2Q1YWZjZTYzNzAyMGQ3MzZm
YjNkMWM4YmNmZDk5Li4wOWZlODAzMGRhOTNiOTMwNDE4ZWVmZmZiYTlmOGYzOTE1MjcwM2FlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKQEAgLTExNDQsOCArMTE0NCwxOCBAQCBpZmVx
ICgkKGZpbmRzdHJpbmcgRU5BQkxFX1dFQl9SRVBMQVksJChGRUFUVVJFX0RFRklORVMpKSwgRU5B
QkxFX1dFQl9SRVBMQVkpCiBlbmRpZgogCiBJTlNQRUNUT1JfR0VORVJBVE9SX1NDUklQVFMgPSBc
Ci0JJChJbnNwZWN0b3JTY3JpcHRzKS9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5IFwKLQkkKElu
c3BlY3RvclNjcmlwdHMpL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3JTdHJpbmdzLnB5IFwKKyAgICAk
KEluc3BlY3RvclNjcmlwdHMpL2dlbmVyYXRlX2JhY2tlbmRfY29tbWFuZHMucHkgXAorICAgICQo
SW5zcGVjdG9yU2NyaXB0cykvZ2VuZXJhdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weSBc
CisgICAgJChJbnNwZWN0b3JTY3JpcHRzKS9nZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaW1w
bGVtZW50YXRpb24ucHkgXAorICAgICQoSW5zcGVjdG9yU2NyaXB0cykvZ2VuZXJhdGVfZnJvbnRl
bmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkgXAorICAgICQoSW5zcGVjdG9yU2NyaXB0cykvZ2VuZXJh
dGVfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSBcCisgICAgJChJbnNwZWN0
b3JTY3JpcHRzKS9nZW5lcmF0ZV90eXBlX2J1aWxkZXJfaGVhZGVyLnB5IFwKKyAgICAkKEluc3Bl
Y3RvclNjcmlwdHMpL2dlbmVyYXRlX3R5cGVfYnVpbGRlcl9pbXBsZW1lbnRhdGlvbi5weSBcCisg
ICAgJChJbnNwZWN0b3JTY3JpcHRzKS9nZW5lcmF0b3JfdGVtcGxhdGVzLnB5IFwKKyAgICAkKElu
c3BlY3RvclNjcmlwdHMpL2dlbmVyYXRvci5weSBcCisgICAgJChJbnNwZWN0b3JTY3JpcHRzKS9n
ZW5lcmF0ZS1jb21iaW5lZC1pbnNwZWN0b3ItanNvbi5weSBcCisgICAgJChJbnNwZWN0b3JTY3Jp
cHRzKS9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkgXAorICAgICQoSW5z
cGVjdG9yU2NyaXB0cykvbW9kZWxzLnB5IFwKICMKIAogYWxsIDogSW5zcGVjdG9yV2ViLmpzb24K
QEAgLTExNjMsNyArMTE3Myw3IEBAIEluc3BlY3RvcldlYi5qc29uIDogJChJbnNwZWN0b3JTY3Jp
cHRzKS9nZW5lcmF0ZS1jb21iaW5lZC1pbnNwZWN0b3ItanNvbi5weSAkKElOCiBhbGwgOiBJbnNw
ZWN0b3JXZWJGcm9udGVuZERpc3BhdGNoZXJzLmgKIAogSW5zcGVjdG9yV2ViRnJvbnRlbmREaXNw
YXRjaGVycy5oIDogSW5zcGVjdG9yV2ViLmpzb24gJChJbnNwZWN0b3JTY3JpcHRzKS9JbnNwZWN0
b3JKUy5qc29uICQoSU5TUEVDVE9SX0dFTkVSQVRPUl9TQ1JJUFRTKQotCSQoUFlUSE9OKSAkKElu
c3BlY3RvclNjcmlwdHMpL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkgLi9JbnNwZWN0b3JXZWIu
anNvbiAkKEluc3BlY3RvclNjcmlwdHMpL0luc3BlY3RvckpTLmpzb24gLS1vdXRwdXRfaF9kaXIg
LiAtLW91dHB1dF9jcHBfZGlyIC4gLS1vdXRwdXRfanNfZGlyIC4gLS1vdXRwdXRfdHlwZSBXZWIK
KwkkKFBZVEhPTikgJChJbnNwZWN0b3JTY3JpcHRzKS9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkgLS1mcmFtZXdvcmsgV2ViQ29yZSAtLW91dHB1dERpciAuIC4vSW5zcGVj
dG9yV2ViLmpzb24gJChJbnNwZWN0b3JTY3JpcHRzKS9JbnNwZWN0b3JKUy5qc29uCiAKIGFsbCA6
IEluc3BlY3Rvck92ZXJsYXlQYWdlLmgKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0NvbW1hbmRMaW5lQVBJSG9zdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
Q29tbWFuZExpbmVBUElIb3N0LmNwcAppbmRleCAwMjkxMDY5NTdjMDM0YWE1NGMzMDJiYmFmNzlm
MzQ3ZjU0OWFjZjk1Li41YWNkYmU3OTg1OWE1YTIwNjI3OTU1ZTk1YjA3ZjQ1YzhkZTE5NGQ5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29tbWFuZExpbmVBUElIb3N0LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29tbWFuZExpbmVBUElIb3N0LmNwcApA
QCAtOTUsNyArOTUsNyBAQCB2b2lkIENvbW1hbmRMaW5lQVBJSG9zdDo6ZGlzY29ubmVjdCgpCiB2
b2lkIENvbW1hbmRMaW5lQVBJSG9zdDo6aW5zcGVjdEltcGwoUGFzc1JlZlB0cjxJbnNwZWN0b3JW
YWx1ZT4gb2JqZWN0LCBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiBoaW50cykKIHsKICAgICBp
ZiAobV9pbnNwZWN0b3JBZ2VudCkgewotICAgICAgICBSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVp
bGRlcjo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiByZW1vdGVPYmplY3QgPSBJbnNwZWN0b3I6OlR5
cGVCdWlsZGVyOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q6OnJ1bnRpbWVDYXN0KG9iamVjdCk7Cisg
ICAgICAgIFJlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpSdW50aW1lOjpSZW1vdGVPYmpl
Y3Q+IHJlbW90ZU9iamVjdCA9IEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6
UnVudGltZTo6UmVtb3RlT2JqZWN0Pjo6cnVudGltZUNhc3Qob2JqZWN0KTsKICAgICAgICAgbV9p
bnNwZWN0b3JBZ2VudC0+aW5zcGVjdChyZW1vdGVPYmplY3QsIGhpbnRzLT5hc09iamVjdCgpKTsK
ICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
Q1NTQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50
LmNwcAppbmRleCAwNmU1NGZiN2EwMTFjMGY1ZmQwNzI5MTJhMzJmNDNmN2RjMjJlOGZhLi5lZjg3
OGNmYTQwOWI2YzRkNDhkMzE4MTc3M2MyNWI1MjA4ZWM2MzFlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHAKQEAgLTEwMDAsOSArMTAwMCw5IEBA
IEluc3BlY3RvclN0eWxlU2hlZXQqIEluc3BlY3RvckNTU0FnZW50Ojphc3NlcnRTdHlsZVNoZWV0
Rm9ySWQoRXJyb3JTdHJpbmcqIGVycm9yCiAgICAgcmV0dXJuIGl0LT52YWx1ZS5nZXQoKTsKIH0K
IAotSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luOjpFbnVtIElu
c3BlY3RvckNTU0FnZW50OjpkZXRlY3RPcmlnaW4oQ1NTU3R5bGVTaGVldCogcGFnZVN0eWxlU2hl
ZXQsIERvY3VtZW50KiBvd25lckRvY3VtZW50KQorSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q1NT
OjpTdHlsZVNoZWV0T3JpZ2luIEluc3BlY3RvckNTU0FnZW50OjpkZXRlY3RPcmlnaW4oQ1NTU3R5
bGVTaGVldCogcGFnZVN0eWxlU2hlZXQsIERvY3VtZW50KiBvd25lckRvY3VtZW50KQogewotICAg
IEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6RW51bSBvcmln
aW4gPSBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW46OlJlZ3Vs
YXI7CisgICAgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luIG9y
aWdpbiA9IEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6UmVn
dWxhcjsKICAgICBpZiAocGFnZVN0eWxlU2hlZXQgJiYgIXBhZ2VTdHlsZVNoZWV0LT5vd25lck5v
ZGUoKSAmJiBwYWdlU3R5bGVTaGVldC0+aHJlZigpLmlzRW1wdHkoKSkKICAgICAgICAgb3JpZ2lu
ID0gSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luOjpVc2VyQWdl
bnQ7CiAgICAgZWxzZSBpZiAocGFnZVN0eWxlU2hlZXQgJiYgcGFnZVN0eWxlU2hlZXQtPm93bmVy
Tm9kZSgpICYmIHBhZ2VTdHlsZVNoZWV0LT5vd25lck5vZGUoKS0+bm9kZU5hbWUoKSA9PSAiI2Rv
Y3VtZW50IikKQEAgLTExMDYsNyArMTEwNiw3IEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpUeXBl
QnVpbGRlcjo6QXJyYXk8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q1NTOjpSZWdpb24+PiBJCiAg
ICAgUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5PEluc3BlY3Rvcjo6VHlwZUJ1
aWxkZXI6OkNTUzo6UmVnaW9uPj4gcmVnaW9ucyA9IEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFy
cmF5PEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNTUzo6UmVnaW9uPjo6Y3JlYXRlKCk7CiAKICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVnaW9uTGlzdC0+bGVuZ3RoKCk7ICsraSkgewot
ICAgICAgICBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDU1M6OlJlZ2lvbjo6UmVnaW9uT3ZlcnNl
dDo6RW51bSByZWdpb25PdmVyc2V0OworICAgICAgICBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpD
U1M6OlJlZ2lvbjo6UmVnaW9uT3ZlcnNldCByZWdpb25PdmVyc2V0OwogCiAgICAgICAgIHN3aXRj
aCAodG9FbGVtZW50KHJlZ2lvbkxpc3QtPml0ZW0oaSkpLT5yZWdpb25PdmVyc2V0U3RhdGUoKSkg
ewogICAgICAgICBjYXNlIFJlZ2lvbkZpdDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckNTU0FnZW50LmgKaW5kZXggMzY1MjM3ZjAzNmE2Y2Y2YmJlMWE1ZjUzMzc0Yjc1Y2U1
MjYwNzhmMi4uMTc1NWQ3MjBjMzE1ZTJlZDhjMWRhNjA0ZjIwNWY2YmJkZTlkMDE1ZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmgKQEAgLTE0OSw3ICsx
NDksNyBAQCBwcml2YXRlOgogICAgIEluc3BlY3RvclN0eWxlU2hlZXQqIGJpbmRTdHlsZVNoZWV0
KENTU1N0eWxlU2hlZXQqKTsKICAgICBJbnNwZWN0b3JTdHlsZVNoZWV0KiB2aWFJbnNwZWN0b3JT
dHlsZVNoZWV0KERvY3VtZW50KiwgYm9vbCBjcmVhdGVJZkFic2VudCk7CiAgICAgSW5zcGVjdG9y
U3R5bGVTaGVldCogYXNzZXJ0U3R5bGVTaGVldEZvcklkKEVycm9yU3RyaW5nKiwgY29uc3QgU3Ry
aW5nJik7Ci0gICAgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2lu
OjpFbnVtIGRldGVjdE9yaWdpbihDU1NTdHlsZVNoZWV0KiBwYWdlU3R5bGVTaGVldCwgRG9jdW1l
bnQqIG93bmVyRG9jdW1lbnQpOworICAgIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNTUzo6U3R5
bGVTaGVldE9yaWdpbiBkZXRlY3RPcmlnaW4oQ1NTU3R5bGVTaGVldCogcGFnZVN0eWxlU2hlZXQs
IERvY3VtZW50KiBvd25lckRvY3VtZW50KTsKIAogICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpU
eXBlQnVpbGRlcjo6Q1NTOjpDU1NSdWxlPiBidWlsZE9iamVjdEZvclJ1bGUoU3R5bGVSdWxlKiwg
U3R5bGVSZXNvbHZlciYpOwogICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6
Q1NTOjpDU1NSdWxlPiBidWlsZE9iamVjdEZvclJ1bGUoQ1NTU3R5bGVSdWxlKik7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcAppbmRleCA2ODExYzIw
MjJhNTZlMzJmOTQ1MzJlMmNlMGI5Zjg1MmViZDg4MWNjLi4xZTZjMDY0NDFlYWFkY2FkZjE5ZDBk
ZWZjMGZkZWYyNzgxMjFhZmVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yRE9NQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JET01BZ2VudC5jcHAKQEAgLTE0NDQsNyArMTQ0NCw3IEBAIFBhc3NSZWZQdHI8VHlwZUJ1
aWxkZXI6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM+IEluc3BlY3RvckRPTUFnZW50Ojpi
dWlsZE9iCiAKICAgICBOb2RlKiBhY3RpdmVEZXNjZW5kYW50Tm9kZSA9IG51bGxwdHI7CiAgICAg
Ym9vbCBidXN5ID0gZmFsc2U7Ci0gICAgVHlwZUJ1aWxkZXI6OkRPTTo6QWNjZXNzaWJpbGl0eVBy
b3BlcnRpZXM6OkNoZWNrZWQ6OkVudW0gY2hlY2tlZCA9IFR5cGVCdWlsZGVyOjpET006OkFjY2Vz
c2liaWxpdHlQcm9wZXJ0aWVzOjpDaGVja2VkOjpGYWxzZTsKKyAgICBUeXBlQnVpbGRlcjo6RE9N
OjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6Q2hlY2tlZCBjaGVja2VkID0gVHlwZUJ1aWxkZXI6
OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6OkNoZWNrZWQ6OkZhbHNlOwogICAgIFJlZlB0
cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheTxpbnQ+PiBjaGlsZE5vZGVJZHM7CiAgICAg
UmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5PGludD4+IGNvbnRyb2xsZWROb2Rl
SWRzOwogICAgIGJvb2wgZXhpc3RzID0gZmFsc2U7CkBAIC0xNDU0LDExICsxNDU0LDExIEBAIFBh
c3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM+IEluc3Bl
Y3RvckRPTUFnZW50OjpidWlsZE9iCiAgICAgYm9vbCBmb2N1c2VkID0gZmFsc2U7CiAgICAgYm9v
bCBpZ25vcmVkID0gdHJ1ZTsKICAgICBib29sIGlnbm9yZWRCeURlZmF1bHQgPSBmYWxzZTsKLSAg
ICBUeXBlQnVpbGRlcjo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6SW52YWxpZDo6RW51
bSBpbnZhbGlkID0gVHlwZUJ1aWxkZXI6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6Oklu
dmFsaWQ6OkZhbHNlOworICAgIFR5cGVCdWlsZGVyOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0
aWVzOjpJbnZhbGlkIGludmFsaWQgPSBUeXBlQnVpbGRlcjo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJv
cGVydGllczo6SW52YWxpZDo6RmFsc2U7CiAgICAgYm9vbCBoaWRkZW4gPSBmYWxzZTsKICAgICBT
dHJpbmcgbGFiZWw7IC8vIEZJWE1FOiBXYWl0aW5nIG9uIGh0dHA6Ly93ZWJraXQub3JnL2IvMTIx
MTM0CiAgICAgYm9vbCBsaXZlUmVnaW9uQXRvbWljID0gZmFsc2U7Ci0gICAgVHlwZUJ1aWxkZXI6
OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6OkxpdmVSZWdpb25TdGF0dXM6OkVudW0gbGl2
ZVJlZ2lvblN0YXR1cyA9IFR5cGVCdWlsZGVyOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVz
OjpMaXZlUmVnaW9uU3RhdHVzOjpPZmY7CisgICAgVHlwZUJ1aWxkZXI6OkRPTTo6QWNjZXNzaWJp
bGl0eVByb3BlcnRpZXM6OkxpdmVSZWdpb25TdGF0dXMgbGl2ZVJlZ2lvblN0YXR1cyA9IFR5cGVC
dWlsZGVyOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpMaXZlUmVnaW9uU3RhdHVzOjpP
ZmY7CiAgICAgTm9kZSogbW91c2VFdmVudE5vZGUgPSBudWxscHRyOwogICAgIFJlZlB0cjxJbnNw
ZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheTxpbnQ+PiBvd25lZE5vZGVJZHM7CiAgICAgTm9kZSog
cGFyZW50Tm9kZSA9IG51bGxwdHI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JQYWdlQWdlbnQuY3BwCmluZGV4IDQ1YmYwZWVlODQ2Zjc3MDllZDQyZTI3NGZkMTE3Zjk2
NDgyNDE4ZGUuLjI4YmI5MTk3ZjdjMGYwMTFjMDhjOWUxNGY5ZmNhMDY4NjJhODRiMTcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCkBAIC0y
ODcsNyArMjg3LDcgQEAgQ2FjaGVkUmVzb3VyY2UqIEluc3BlY3RvclBhZ2VBZ2VudDo6Y2FjaGVk
UmVzb3VyY2UoRnJhbWUqIGZyYW1lLCBjb25zdCBVUkwmIHVybCkKICAgICByZXR1cm4gY2FjaGVk
UmVzb3VyY2U7CiB9CiAKLUluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlBhZ2U6OlJlc291cmNlVHlw
ZTo6RW51bSBJbnNwZWN0b3JQYWdlQWdlbnQ6OnJlc291cmNlVHlwZUpzb24oSW5zcGVjdG9yUGFn
ZUFnZW50OjpSZXNvdXJjZVR5cGUgcmVzb3VyY2VUeXBlKQorSW5zcGVjdG9yOjpUeXBlQnVpbGRl
cjo6UGFnZTo6UmVzb3VyY2VUeXBlIEluc3BlY3RvclBhZ2VBZ2VudDo6cmVzb3VyY2VUeXBlSnNv
bihJbnNwZWN0b3JQYWdlQWdlbnQ6OlJlc291cmNlVHlwZSByZXNvdXJjZVR5cGUpCiB7CiAgICAg
c3dpdGNoIChyZXNvdXJjZVR5cGUpIHsKICAgICBjYXNlIERvY3VtZW50UmVzb3VyY2U6CkBAIC0z
MzUsNyArMzM1LDcgQEAgSW5zcGVjdG9yUGFnZUFnZW50OjpSZXNvdXJjZVR5cGUgSW5zcGVjdG9y
UGFnZUFnZW50OjpjYWNoZWRSZXNvdXJjZVR5cGUoY29uc3QgQ2EKICAgICByZXR1cm4gSW5zcGVj
dG9yUGFnZUFnZW50OjpPdGhlclJlc291cmNlOwogfQogCi1JbnNwZWN0b3I6OlR5cGVCdWlsZGVy
OjpQYWdlOjpSZXNvdXJjZVR5cGU6OkVudW0gSW5zcGVjdG9yUGFnZUFnZW50OjpjYWNoZWRSZXNv
dXJjZVR5cGVKc29uKGNvbnN0IENhY2hlZFJlc291cmNlJiBjYWNoZWRSZXNvdXJjZSkKK0luc3Bl
Y3Rvcjo6VHlwZUJ1aWxkZXI6OlBhZ2U6OlJlc291cmNlVHlwZSBJbnNwZWN0b3JQYWdlQWdlbnQ6
OmNhY2hlZFJlc291cmNlVHlwZUpzb24oY29uc3QgQ2FjaGVkUmVzb3VyY2UmIGNhY2hlZFJlc291
cmNlKQogewogICAgIHJldHVybiByZXNvdXJjZVR5cGVKc29uKGNhY2hlZFJlc291cmNlVHlwZShj
YWNoZWRSZXNvdXJjZSkpOwogfQpAQCAtNzA2LDcgKzcwNiw3IEBAIHZvaWQgSW5zcGVjdG9yUGFn
ZUFnZW50OjpzZXRDb250aW51b3VzUGFpbnRpbmdFbmFibGVkKEVycm9yU3RyaW5nKiwgYm9vbCBl
bmFibGVkCiAgICAgICAgIG1haW5GcmFtZSgpLT52aWV3KCktPmludmFsaWRhdGUoKTsKIH0KIAot
dm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmdldFNjcmlwdEV4ZWN1dGlvblN0YXR1cyhFcnJvclN0
cmluZyosIEluc3BlY3RvclBhZ2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlJlc3VsdDo6RW51
bSogc3RhdHVzKQordm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmdldFNjcmlwdEV4ZWN1dGlvblN0
YXR1cyhFcnJvclN0cmluZyosIEluc3BlY3RvclBhZ2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6
OlJlc3VsdCogc3RhdHVzKQogewogICAgIGJvb2wgZGlzYWJsZWRCeVNjcmlwdENvbnRyb2xsZXIg
PSBmYWxzZTsKICAgICBib29sIGRpc2FibGVkSW5TZXR0aW5ncyA9IGZhbHNlOwpAQCAtOTYzLDEz
ICs5NjMsMTMgQEAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpQYWdlOjpGcmFt
ZT4gSW5zcGVjdG9yUGFnZUFnZW50OjpidWlsZE9iamVjdEYKIFBhc3NSZWZQdHI8SW5zcGVjdG9y
OjpUeXBlQnVpbGRlcjo6UGFnZTo6RnJhbWVSZXNvdXJjZVRyZWU+IEluc3BlY3RvclBhZ2VBZ2Vu
dDo6YnVpbGRPYmplY3RGb3JGcmFtZVRyZWUoRnJhbWUqIGZyYW1lKQogewogICAgIFJlZlB0cjxJ
bnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpQYWdlOjpGcmFtZT4gZnJhbWVPYmplY3QgPSBidWlsZE9i
amVjdEZvckZyYW1lKGZyYW1lKTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6
QXJyYXk8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UGFnZTo6RnJhbWVSZXNvdXJjZVRyZWU6OlJl
c291cmNlcz4+IHN1YnJlc291cmNlcyA9IEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5PElu
c3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlBhZ2U6OkZyYW1lUmVzb3VyY2VUcmVlOjpSZXNvdXJjZXM+
OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk8SW5z
cGVjdG9yOjpUeXBlQnVpbGRlcjo6UGFnZTo6RnJhbWVSZXNvdXJjZT4+IHN1YnJlc291cmNlcyA9
IEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5PEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlBh
Z2U6OkZyYW1lUmVzb3VyY2U+OjpjcmVhdGUoKTsKICAgICBSZWZQdHI8SW5zcGVjdG9yOjpUeXBl
QnVpbGRlcjo6UGFnZTo6RnJhbWVSZXNvdXJjZVRyZWU+IHJlc3VsdCA9IEluc3BlY3Rvcjo6VHlw
ZUJ1aWxkZXI6OlBhZ2U6OkZyYW1lUmVzb3VyY2VUcmVlOjpjcmVhdGUoKQogICAgICAgICAgLnNl
dEZyYW1lKGZyYW1lT2JqZWN0KQogICAgICAgICAgLnNldFJlc291cmNlcyhzdWJyZXNvdXJjZXMp
OwogCiAgICAgZm9yIChhdXRvKiBjYWNoZWRSZXNvdXJjZSA6IGNhY2hlZFJlc291cmNlc0ZvckZy
YW1lKGZyYW1lKSkgewotICAgICAgICBSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UGFn
ZTo6RnJhbWVSZXNvdXJjZVRyZWU6OlJlc291cmNlcz4gcmVzb3VyY2VPYmplY3QgPSBJbnNwZWN0
b3I6OlR5cGVCdWlsZGVyOjpQYWdlOjpGcmFtZVJlc291cmNlVHJlZTo6UmVzb3VyY2VzOjpjcmVh
dGUoKQorICAgICAgICBSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UGFnZTo6RnJhbWVS
ZXNvdXJjZT4gcmVzb3VyY2VPYmplY3QgPSBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpQYWdlOjpG
cmFtZVJlc291cmNlOjpjcmVhdGUoKQogICAgICAgICAgICAgLnNldFVybChjYWNoZWRSZXNvdXJj
ZS0+dXJsKCkpCiAgICAgICAgICAgICAuc2V0VHlwZShjYWNoZWRSZXNvdXJjZVR5cGVKc29uKCpj
YWNoZWRSZXNvdXJjZSkpCiAgICAgICAgICAgICAuc2V0TWltZVR5cGUoY2FjaGVkUmVzb3VyY2Ut
PnJlc3BvbnNlKCkubWltZVR5cGUoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yUGFnZUFnZW50LmgKaW5kZXggY2E0ZmYyZjAwM2NlYmE5ODE2OGQwNzc5OTMzNGM1ZmJk
NWM5YTMxMS4uOWY4N2QyMjlkNDM2NzA5NmYyODYwMzgxZWYyM2QzYjIyNTMxOTRiNCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuaApAQCAtOTAsOSAr
OTAsOSBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IHJl
c291cmNlRGF0YShGcmFtZSosIGNvbnN0IFVSTCYsIFN0cmluZyogdGV4dEVuY29kaW5nTmFtZSk7
CiAgICAgc3RhdGljIENhY2hlZFJlc291cmNlKiBjYWNoZWRSZXNvdXJjZShGcmFtZSosIGNvbnN0
IFVSTCYpOwotICAgIHN0YXRpYyBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpQYWdlOjpSZXNvdXJj
ZVR5cGU6OkVudW0gcmVzb3VyY2VUeXBlSnNvbihSZXNvdXJjZVR5cGUpOworICAgIHN0YXRpYyBJ
bnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpQYWdlOjpSZXNvdXJjZVR5cGUgcmVzb3VyY2VUeXBlSnNv
bihSZXNvdXJjZVR5cGUpOwogICAgIHN0YXRpYyBSZXNvdXJjZVR5cGUgY2FjaGVkUmVzb3VyY2VU
eXBlKGNvbnN0IENhY2hlZFJlc291cmNlJik7Ci0gICAgc3RhdGljIEluc3BlY3Rvcjo6VHlwZUJ1
aWxkZXI6OlBhZ2U6OlJlc291cmNlVHlwZTo6RW51bSBjYWNoZWRSZXNvdXJjZVR5cGVKc29uKGNv
bnN0IENhY2hlZFJlc291cmNlJik7CisgICAgc3RhdGljIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6
OlBhZ2U6OlJlc291cmNlVHlwZSBjYWNoZWRSZXNvdXJjZVR5cGVKc29uKGNvbnN0IENhY2hlZFJl
c291cmNlJik7CiAKICAgICAvLyBQYWdlIEFQSSBmb3IgSW5zcGVjdG9yRnJvbnRlbmQKICAgICB2
aXJ0dWFsIHZvaWQgZW5hYmxlKEVycm9yU3RyaW5nKikgb3ZlcnJpZGU7CkBAIC0xMTUsNyArMTE1
LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzZXRTaG93RlBTQ291bnRlcihFcnJvclN0
cmluZyosIGJvb2wgc2hvdykgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGNhbkNvbnRpbnVv
dXNseVBhaW50KEVycm9yU3RyaW5nKiwgYm9vbCopIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9p
ZCBzZXRDb250aW51b3VzUGFpbnRpbmdFbmFibGVkKEVycm9yU3RyaW5nKiwgYm9vbCBlbmFibGVk
KSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZ2V0U2NyaXB0RXhlY3V0aW9uU3RhdHVzKEVy
cm9yU3RyaW5nKiwgSW5zcGVjdG9yOjpJbnNwZWN0b3JQYWdlQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyOjpSZXN1bHQ6OkVudW0qKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0U2NyaXB0
RXhlY3V0aW9uU3RhdHVzKEVycm9yU3RyaW5nKiwgSW5zcGVjdG9yOjpJbnNwZWN0b3JQYWdlQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyOjpSZXN1bHQqKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZv
aWQgc2V0U2NyaXB0RXhlY3V0aW9uRGlzYWJsZWQoRXJyb3JTdHJpbmcqLCBib29sKSBvdmVycmlk
ZTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0VG91Y2hFbXVsYXRpb25FbmFibGVkKEVycm9yU3RyaW5n
KiwgYm9vbCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHNldEVtdWxhdGVkTWVkaWEoRXJy
b3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmKSBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZUFnZW50LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZUFnZW50LmNwcAppbmRleCAwNDZmZjA1MWNk
ODAxNmFmMjNhNmNlYTI1ZTM0ZWRjNWUxMmNkNmI3Li4xMjQwMGFjYWIzNzY1ZDg5MWVlNjYxMDVl
N2QyZDdhMzNjMGU1OWMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yUmVzb3VyY2VBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvclJlc291cmNlQWdlbnQuY3BwCkBAIC0zMTYsNyArMzE2LDcgQEAgdm9pZCBJbnNwZWN0
b3JSZXNvdXJjZUFnZW50Ojp3aWxsU2VuZFJlcXVlc3QodW5zaWduZWQgbG9uZyBpZGVudGlmaWVy
LCBEb2N1bWVudEwKICAgICAgICAgcmVxdWVzdC5zZXRIVFRQSGVhZGVyRmllbGQoIkNhY2hlLUNv
bnRyb2wiLCAibm8tY2FjaGUiKTsKICAgICB9CiAKLSAgICBJbnNwZWN0b3I6OlR5cGVCdWlsZGVy
OjpQYWdlOjpSZXNvdXJjZVR5cGU6OkVudW0gcmVzb3VyY2VUeXBlID0gSW5zcGVjdG9yUGFnZUFn
ZW50OjpyZXNvdXJjZVR5cGVKc29uKHR5cGUpOworICAgIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6
OlBhZ2U6OlJlc291cmNlVHlwZSByZXNvdXJjZVR5cGUgPSBJbnNwZWN0b3JQYWdlQWdlbnQ6OnJl
c291cmNlVHlwZUpzb24odHlwZSk7CiAKICAgICBSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRl
cjo6TmV0d29yazo6SW5pdGlhdG9yPiBpbml0aWF0b3JPYmplY3QgPSBidWlsZEluaXRpYXRvck9i
amVjdChsb2FkZXItPmZyYW1lKCkgPyBsb2FkZXItPmZyYW1lKCktPmRvY3VtZW50KCkgOiBudWxs
cHRyKTsKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+cmVxdWVzdFdpbGxCZVNlbnQocmVxdWVz
dElkLCBtX3BhZ2VBZ2VudC0+ZnJhbWVJZChsb2FkZXItPmZyYW1lKCkpLCBtX3BhZ2VBZ2VudC0+
bG9hZGVySWQobG9hZGVyKSwgbG9hZGVyLT51cmwoKS5zdHJpbmcoKSwgYnVpbGRPYmplY3RGb3JS
ZXNvdXJjZVJlcXVlc3QocmVxdWVzdCksIGN1cnJlbnRUaW1lKCksIGluaXRpYXRvck9iamVjdCwg
YnVpbGRPYmplY3RGb3JSZXNvdXJjZVJlc3BvbnNlKHJlZGlyZWN0UmVzcG9uc2UsIGxvYWRlciks
IHR5cGUgIT0gSW5zcGVjdG9yUGFnZUFnZW50OjpPdGhlclJlc291cmNlID8gJnJlc291cmNlVHlw
ZSA6IG51bGxwdHIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvclN0eWxlU2hlZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0
eWxlU2hlZXQuY3BwCmluZGV4IDg5NjE5YjRiNDFhOWVhYjFlYjExMjcyODRiZTE3OTYxOWVmYzU2
MTguLjRjN2ZkYWNkOGNiYmJiMjlkNjIxYzExZjg4NWI0NjdmOTJjODk5YzAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHAKQEAgLTE2Niw3
ICsxNjYsNyBAQCBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDU1M6
OlNvdXJjZVJhbmdlPiBidWlsZFNvdXJjZVJhbmdlT2JqZQogc3RhdGljIFBhc3NSZWZQdHI8SW5z
cGVjdG9yOjpUeXBlQnVpbGRlcjo6Q1NTOjpDU1NNZWRpYT4gYnVpbGRNZWRpYU9iamVjdChjb25z
dCBNZWRpYUxpc3QqIG1lZGlhLCBNZWRpYUxpc3RTb3VyY2UgbWVkaWFMaXN0U291cmNlLCBjb25z
dCBTdHJpbmcmIHNvdXJjZVVSTCkKIHsKICAgICAvLyBNYWtlIGNlcnRhaW4gY29tcGlsZXJzIGhh
cHB5IGJ5IGluaXRpYWxpemluZyB8c291cmNlfCB1cC1mcm9udC4KLSAgICBJbnNwZWN0b3I6OlR5
cGVCdWlsZGVyOjpDU1M6OkNTU01lZGlhOjpTb3VyY2U6OkVudW0gc291cmNlID0gSW5zcGVjdG9y
OjpUeXBlQnVpbGRlcjo6Q1NTOjpDU1NNZWRpYTo6U291cmNlOjpJbmxpbmVTaGVldDsKKyAgICBJ
bnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDU1M6OkNTU01lZGlhOjpTb3VyY2Ugc291cmNlID0gSW5z
cGVjdG9yOjpUeXBlQnVpbGRlcjo6Q1NTOjpDU1NNZWRpYTo6U291cmNlOjpJbmxpbmVTaGVldDsK
ICAgICBzd2l0Y2ggKG1lZGlhTGlzdFNvdXJjZSkgewogICAgIGNhc2UgTWVkaWFMaXN0U291cmNl
TWVkaWFSdWxlOgogICAgICAgICBzb3VyY2UgPSBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDU1M6
OkNTU01lZGlhOjpTb3VyY2U6Ok1lZGlhUnVsZTsKQEAgLTUyOCw3ICs1MjgsMTMgQEAgUGFzc1Jl
ZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDU1M6OkNTU1N0eWxlPiBJbnNwZWN0b3JTdHls
ZTo6c3R5bGVXaXRoUHJvcGUKICAgICAgICAgY29uc3QgQ1NTUHJvcGVydHlTb3VyY2VEYXRhJiBw
cm9wZXJ0eUVudHJ5ID0gaXQtPnNvdXJjZURhdGE7CiAgICAgICAgIGNvbnN0IFN0cmluZyYgbmFt
ZSA9IHByb3BlcnR5RW50cnkubmFtZTsKIAotICAgICAgICBJbnNwZWN0b3I6OlR5cGVCdWlsZGVy
OjpDU1M6OkNTU1Byb3BlcnR5OjpTdGF0dXM6OkVudW0gc3RhdHVzID0gaXQtPmRpc2FibGVkID8g
SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q1NTOjpDU1NQcm9wZXJ0eTo6U3RhdHVzOjpEaXNhYmxl
ZCA6IEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTUHJvcGVydHk6OlN0YXR1czo6QWN0
aXZlOworICAgICAgICAvLyBWaXN1YWwgU3R1ZGlvIGRpc2FncmVlcyB3aXRoIG90aGVyIGNvbXBp
bGVycyBhcyB0byB3aGV0aGVyICdjbGFzcycgaXMgbmVlZGVkIGhlcmUuCisjaWYgQ09NUElMRVIo
TVNWQykKKyAgICAgICAgZW51bSBjbGFzcyBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDU1M6OkNT
U1Byb3BlcnR5U3RhdHVzIHN0YXR1czsKKyNlbHNlCisgICAgICAgIGVudW0gSW5zcGVjdG9yOjpU
eXBlQnVpbGRlcjo6Q1NTOjpDU1NQcm9wZXJ0eVN0YXR1cyBzdGF0dXM7CisjZW5kaWYKKyAgICAg
ICAgc3RhdHVzID0gaXQtPmRpc2FibGVkID8gSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q1NTOjpD
U1NQcm9wZXJ0eVN0YXR1czo6RGlzYWJsZWQgOiBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDU1M6
OkNTU1Byb3BlcnR5U3RhdHVzOjpBY3RpdmU7CiAKICAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6
VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTUHJvcGVydHk+IHByb3BlcnR5ID0gSW5zcGVjdG9yOjpUeXBl
QnVpbGRlcjo6Q1NTOjpDU1NQcm9wZXJ0eTo6Y3JlYXRlKCkKICAgICAgICAgICAgIC5zZXROYW1l
KG5hbWUpCkBAIC01NzEsOSArNTc3LDkgQEAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWls
ZGVyOjpDU1M6OkNTU1N0eWxlPiBJbnNwZWN0b3JTdHlsZTo6c3R5bGVXaXRoUHJvcGUKICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChzdWNjZXNzU3RhdHVzICYmIHByZXZpb3VzU3RhdHVzICE9
ICJpbmFjdGl2ZSIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydHlF
bnRyeS5pbXBvcnRhbnQgfHwgIXN1Y2Nlc3NQcmlvcml0eSkgLy8gUHJpb3JpdHkgbm90IHNldCA9
PSAibm90IGltcG9ydGFudCIuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3Vs
ZEluYWN0aXZhdGUgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYg
KHN0YXR1cyA9PSBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDU1M6OkNTU1Byb3BlcnR5OjpTdGF0
dXM6OkFjdGl2ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN0YXR1
cyA9PSBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDU1M6OkNTU1Byb3BlcnR5U3RhdHVzOjpBY3Rp
dmUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSW5hY3RpdmF0ZSBhIG5v
bi1pbXBvcnRhbnQgcHJvcGVydHkgZm9sbG93aW5nIHRoZSBzYW1lLW5hbWVkIGltcG9ydGFudCBw
cm9wZXJ0eS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gSW5zcGVj
dG9yOjpUeXBlQnVpbGRlcjo6Q1NTOjpDU1NQcm9wZXJ0eTo6U3RhdHVzOjpJbmFjdGl2ZTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gSW5zcGVjdG9yOjpUeXBlQnVp
bGRlcjo6Q1NTOjpDU1NQcm9wZXJ0eVN0YXR1czo6SW5hY3RpdmU7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UgewpAQCAtNTg2LDcgKzU5Miw3IEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpU
eXBlQnVpbGRlcjo6Q1NTOjpDU1NTdHlsZT4gSW5zcGVjdG9yU3R5bGU6OnN0eWxlV2l0aFByb3Bl
CiAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZVRvUHJldmlvdXNBY3RpdmVQcm9wZXJ0
eS5zZXQoY2Fub25pY2FsUHJvcGVydHlOYW1lLCBwcm9wZXJ0eSk7CiAKICAgICAgICAgICAgICAg
ICBpZiAoc2hvdWxkSW5hY3RpdmF0ZSkgewotICAgICAgICAgICAgICAgICAgICBhY3RpdmVJdC0+
dmFsdWUtPnNldFN0YXR1cyhJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDU1M6OkNTU1Byb3BlcnR5
OjpTdGF0dXM6OkluYWN0aXZlKTsKKyAgICAgICAgICAgICAgICAgICAgYWN0aXZlSXQtPnZhbHVl
LT5zZXRTdGF0dXMoSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q1NTOjpDU1NQcm9wZXJ0eVN0YXR1
czo6SW5hY3RpdmUpOwogICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWVUb1ByZXZpb3Vz
QWN0aXZlUHJvcGVydHkuc2V0KGNhbm9uaWNhbFByb3BlcnR5TmFtZSwgcHJvcGVydHkpOwogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSB7CkBAIC01OTQsNyArNjAwLDcgQEAg
UGFzc1JlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDU1M6OkNTU1N0eWxlPiBJbnNwZWN0
b3JTdHlsZTo6c3R5bGVXaXRoUHJvcGUKICAgICAgICAgICAgICAgICAvLyBEZWZhdWx0ICJpbXBs
aWNpdCIgPT0gZmFsc2UuCiAgICAgICAgICAgICAgICAgaWYgKGltcGxpY2l0KQogICAgICAgICAg
ICAgICAgICAgICBwcm9wZXJ0eS0+c2V0SW1wbGljaXQodHJ1ZSk7Ci0gICAgICAgICAgICAgICAg
c3RhdHVzID0gSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q1NTOjpDU1NQcm9wZXJ0eTo6U3RhdHVz
OjpTdHlsZTsKKyAgICAgICAgICAgICAgICBzdGF0dXMgPSBJbnNwZWN0b3I6OlR5cGVCdWlsZGVy
OjpDU1M6OkNTU1Byb3BlcnR5U3RhdHVzOjpTdHlsZTsKIAogICAgICAgICAgICAgICAgIFN0cmlu
ZyBzaG9ydGhhbmQgPSBtX3N0eWxlLT5nZXRQcm9wZXJ0eVNob3J0aGFuZChuYW1lKTsKICAgICAg
ICAgICAgICAgICBpZiAoIXNob3J0aGFuZC5pc0VtcHR5KCkpIHsKQEAgLTYxMCw3ICs2MTYsNyBA
QCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTU3R5bGU+IEluc3Bl
Y3RvclN0eWxlOjpzdHlsZVdpdGhQcm9wZQogICAgICAgICB9CiAKICAgICAgICAgLy8gRGVmYXVs
dCAic3RhdHVzIiA9PSAic3R5bGUiLgotICAgICAgICBpZiAoc3RhdHVzICE9IEluc3BlY3Rvcjo6
VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTUHJvcGVydHk6OlN0YXR1czo6U3R5bGUpCisgICAgICAgIGlm
IChzdGF0dXMgIT0gSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q1NTOjpDU1NQcm9wZXJ0eVN0YXR1
czo6U3R5bGUpCiAgICAgICAgICAgICBwcm9wZXJ0eS0+c2V0U3RhdHVzKHN0YXR1cyk7CiAgICAg
fQogCkBAIC03NDksNyArNzU1LDcgQEAgTmV3TGluZUFuZFdoaXRlc3BhY2UmIEluc3BlY3RvclN0
eWxlOjpuZXdMaW5lQW5kV2hpdGVzcGFjZURlbGltaXRlcnMoKSBjb25zdAogICAgIHJldHVybiBt
X2Zvcm1hdDsKIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3JTdHlsZVNoZWV0PiBJbnNwZWN0b3JT
dHlsZVNoZWV0OjpjcmVhdGUoSW5zcGVjdG9yUGFnZUFnZW50KiBwYWdlQWdlbnQsIGNvbnN0IFN0
cmluZyYgaWQsIFBhc3NSZWZQdHI8Q1NTU3R5bGVTaGVldD4gcGFnZVN0eWxlU2hlZXQsIEluc3Bl
Y3Rvcjo6VHlwZUJ1aWxkZXI6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6RW51bSBvcmlnaW4sIGNv
bnN0IFN0cmluZyYgZG9jdW1lbnRVUkwsIExpc3RlbmVyKiBsaXN0ZW5lcikKK1Bhc3NSZWZQdHI8
SW5zcGVjdG9yU3R5bGVTaGVldD4gSW5zcGVjdG9yU3R5bGVTaGVldDo6Y3JlYXRlKEluc3BlY3Rv
clBhZ2VBZ2VudCogcGFnZUFnZW50LCBjb25zdCBTdHJpbmcmIGlkLCBQYXNzUmVmUHRyPENTU1N0
eWxlU2hlZXQ+IHBhZ2VTdHlsZVNoZWV0LCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDU1M6OlN0
eWxlU2hlZXRPcmlnaW4gb3JpZ2luLCBjb25zdCBTdHJpbmcmIGRvY3VtZW50VVJMLCBMaXN0ZW5l
ciogbGlzdGVuZXIpCiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnNwZWN0b3JTdHlsZVNo
ZWV0KHBhZ2VBZ2VudCwgaWQsIHBhZ2VTdHlsZVNoZWV0LCBvcmlnaW4sIGRvY3VtZW50VVJMLCBs
aXN0ZW5lcikpOwogfQpAQCAtNzYyLDcgKzc2OCw3IEBAIFN0cmluZyBJbnNwZWN0b3JTdHlsZVNo
ZWV0OjpzdHlsZVNoZWV0VVJMKENTU1N0eWxlU2hlZXQqIHBhZ2VTdHlsZVNoZWV0KQogICAgIHJl
dHVybiBlbXB0eVN0cmluZygpOwogfQogCi1JbnNwZWN0b3JTdHlsZVNoZWV0OjpJbnNwZWN0b3JT
dHlsZVNoZWV0KEluc3BlY3RvclBhZ2VBZ2VudCogcGFnZUFnZW50LCBjb25zdCBTdHJpbmcmIGlk
LCBQYXNzUmVmUHRyPENTU1N0eWxlU2hlZXQ+IHBhZ2VTdHlsZVNoZWV0LCBJbnNwZWN0b3I6OlR5
cGVCdWlsZGVyOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW46OkVudW0gb3JpZ2luLCBjb25zdCBTdHJp
bmcmIGRvY3VtZW50VVJMLCBMaXN0ZW5lciogbGlzdGVuZXIpCitJbnNwZWN0b3JTdHlsZVNoZWV0
OjpJbnNwZWN0b3JTdHlsZVNoZWV0KEluc3BlY3RvclBhZ2VBZ2VudCogcGFnZUFnZW50LCBjb25z
dCBTdHJpbmcmIGlkLCBQYXNzUmVmUHRyPENTU1N0eWxlU2hlZXQ+IHBhZ2VTdHlsZVNoZWV0LCBJ
bnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW4gb3JpZ2luLCBjb25z
dCBTdHJpbmcmIGRvY3VtZW50VVJMLCBMaXN0ZW5lciogbGlzdGVuZXIpCiAgICAgOiBtX3BhZ2VB
Z2VudChwYWdlQWdlbnQpCiAgICAgLCBtX2lkKGlkKQogICAgICwgbV9wYWdlU3R5bGVTaGVldChw
YWdlU3R5bGVTaGVldCkKQEAgLTE0MjYsMTIgKzE0MzIsMTIgQEAgdm9pZCBJbnNwZWN0b3JTdHls
ZVNoZWV0Ojpjb2xsZWN0RmxhdFJ1bGVzKFBhc3NSZWZQdHI8Q1NTUnVsZUxpc3Q+IHJ1bGVMaXN0
LCBDU1MKICAgICB9CiB9CiAKLVBhc3NSZWZQdHI8SW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGlu
ZVN0eWxlPiBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU6OmNyZWF0ZShJbnNwZWN0
b3JQYWdlQWdlbnQqIHBhZ2VBZ2VudCwgY29uc3QgU3RyaW5nJiBpZCwgUGFzc1JlZlB0cjxFbGVt
ZW50PiBlbGVtZW50LCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDU1M6OlN0eWxlU2hlZXRPcmln
aW46OkVudW0gb3JpZ2luLCBMaXN0ZW5lciogbGlzdGVuZXIpCitQYXNzUmVmUHRyPEluc3BlY3Rv
clN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZT4gSW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0
eWxlOjpjcmVhdGUoSW5zcGVjdG9yUGFnZUFnZW50KiBwYWdlQWdlbnQsIGNvbnN0IFN0cmluZyYg
aWQsIFBhc3NSZWZQdHI8RWxlbWVudD4gZWxlbWVudCwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6
Q1NTOjpTdHlsZVNoZWV0T3JpZ2luIG9yaWdpbiwgTGlzdGVuZXIqIGxpc3RlbmVyKQogewogICAg
IHJldHVybiBhZG9wdFJlZihuZXcgSW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlKHBh
Z2VBZ2VudCwgaWQsIGVsZW1lbnQsIG9yaWdpbiwgbGlzdGVuZXIpKTsKIH0KIAotSW5zcGVjdG9y
U3R5bGVTaGVldEZvcklubGluZVN0eWxlOjpJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5
bGUoSW5zcGVjdG9yUGFnZUFnZW50KiBwYWdlQWdlbnQsIGNvbnN0IFN0cmluZyYgaWQsIFBhc3NS
ZWZQdHI8RWxlbWVudD4gZWxlbWVudCwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q1NTOjpTdHls
ZVNoZWV0T3JpZ2luOjpFbnVtIG9yaWdpbiwgTGlzdGVuZXIqIGxpc3RlbmVyKQorSW5zcGVjdG9y
U3R5bGVTaGVldEZvcklubGluZVN0eWxlOjpJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5
bGUoSW5zcGVjdG9yUGFnZUFnZW50KiBwYWdlQWdlbnQsIGNvbnN0IFN0cmluZyYgaWQsIFBhc3NS
ZWZQdHI8RWxlbWVudD4gZWxlbWVudCwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q1NTOjpTdHls
ZVNoZWV0T3JpZ2luIG9yaWdpbiwgTGlzdGVuZXIqIGxpc3RlbmVyKQogICAgIDogSW5zcGVjdG9y
U3R5bGVTaGVldChwYWdlQWdlbnQsIGlkLCBudWxscHRyLCBvcmlnaW4sICIiLCBsaXN0ZW5lcikK
ICAgICAsIG1fZWxlbWVudChlbGVtZW50KQogICAgICwgbV9ydWxlU291cmNlRGF0YShudWxscHRy
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hl
ZXQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmgKaW5k
ZXggOGIxOTFmZTA4NDM5YjVmOGU3N2EyNzU5NTk3ZTYzM2RhOTllMGY0Zi4uMGNhNWE1M2FlZTVj
MzgzM2ZmOTg1YjliMTM1Nzk0MzA5ODcyMDU2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5oCkBAIC0xODEsNyArMTgxLDcgQEAgcHVibGljOgog
ICAgIH07CiAKICAgICB0eXBlZGVmIEhhc2hNYXA8Q1NTU3R5bGVEZWNsYXJhdGlvbiosIFJlZlB0
cjxJbnNwZWN0b3JTdHlsZT4+IEluc3BlY3RvclN0eWxlTWFwOwotICAgIHN0YXRpYyBQYXNzUmVm
UHRyPEluc3BlY3RvclN0eWxlU2hlZXQ+IGNyZWF0ZShJbnNwZWN0b3JQYWdlQWdlbnQqLCBjb25z
dCBTdHJpbmcmIGlkLCBQYXNzUmVmUHRyPENTU1N0eWxlU2hlZXQ+IHBhZ2VTdHlsZVNoZWV0LCBJ
bnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW46OkVudW0sIGNvbnN0
IFN0cmluZyYgZG9jdW1lbnRVUkwsIExpc3RlbmVyKik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8
SW5zcGVjdG9yU3R5bGVTaGVldD4gY3JlYXRlKEluc3BlY3RvclBhZ2VBZ2VudCosIGNvbnN0IFN0
cmluZyYgaWQsIFBhc3NSZWZQdHI8Q1NTU3R5bGVTaGVldD4gcGFnZVN0eWxlU2hlZXQsIEluc3Bl
Y3Rvcjo6VHlwZUJ1aWxkZXI6OkNTUzo6U3R5bGVTaGVldE9yaWdpbiwgY29uc3QgU3RyaW5nJiBk
b2N1bWVudFVSTCwgTGlzdGVuZXIqKTsKICAgICBzdGF0aWMgU3RyaW5nIHN0eWxlU2hlZXRVUkwo
Q1NTU3R5bGVTaGVldCogcGFnZVN0eWxlU2hlZXQpOwogCiAgICAgdmlydHVhbCB+SW5zcGVjdG9y
U3R5bGVTaGVldCgpOwpAQCAtMjEyLDcgKzIxMiw3IEBAIHB1YmxpYzoKICAgICBJbnNwZWN0b3JD
U1NJZCBzdHlsZUlkKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKSBjb25zdCB7IHJldHVybiBy
dWxlT3JTdHlsZUlkKHN0eWxlKTsgfQogCiBwcm90ZWN0ZWQ6Ci0gICAgSW5zcGVjdG9yU3R5bGVT
aGVldChJbnNwZWN0b3JQYWdlQWdlbnQqLCBjb25zdCBTdHJpbmcmIGlkLCBQYXNzUmVmUHRyPENT
U1N0eWxlU2hlZXQ+IHBhZ2VTdHlsZVNoZWV0LCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDU1M6
OlN0eWxlU2hlZXRPcmlnaW46OkVudW0sIGNvbnN0IFN0cmluZyYgZG9jdW1lbnRVUkwsIExpc3Rl
bmVyKik7CisgICAgSW5zcGVjdG9yU3R5bGVTaGVldChJbnNwZWN0b3JQYWdlQWdlbnQqLCBjb25z
dCBTdHJpbmcmIGlkLCBQYXNzUmVmUHRyPENTU1N0eWxlU2hlZXQ+IHBhZ2VTdHlsZVNoZWV0LCBJ
bnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW4sIGNvbnN0IFN0cmlu
ZyYgZG9jdW1lbnRVUkwsIExpc3RlbmVyKik7CiAKICAgICBib29sIGNhbkJpbmQoKSBjb25zdCB7
IHJldHVybiBtX29yaWdpbiAhPSBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDU1M6OlN0eWxlU2hl
ZXRPcmlnaW46OlVzZXJBZ2VudCAmJiBtX29yaWdpbiAhPSBJbnNwZWN0b3I6OlR5cGVCdWlsZGVy
OjpDU1M6OlN0eWxlU2hlZXRPcmlnaW46OlVzZXI7IH0KICAgICBJbnNwZWN0b3JDU1NJZCBydWxl
T3JTdHlsZUlkKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKSBjb25zdDsKQEAgLTI0OCw3ICsy
NDgsNyBAQCBwcml2YXRlOgogICAgIEluc3BlY3RvclBhZ2VBZ2VudCogbV9wYWdlQWdlbnQ7CiAg
ICAgU3RyaW5nIG1faWQ7CiAgICAgUmVmUHRyPENTU1N0eWxlU2hlZXQ+IG1fcGFnZVN0eWxlU2hl
ZXQ7Ci0gICAgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luOjpF
bnVtIG1fb3JpZ2luOworICAgIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNTUzo6U3R5bGVTaGVl
dE9yaWdpbiBtX29yaWdpbjsKICAgICBTdHJpbmcgbV9kb2N1bWVudFVSTDsKICAgICBib29sIG1f
aXNSZXZhbGlkYXRpbmc7CiAgICAgUGFyc2VkU3R5bGVTaGVldCogbV9wYXJzZWRTdHlsZVNoZWV0
OwpAQCAtMjU5LDE0ICsyNTksMTQgQEAgcHJpdmF0ZToKIAogY2xhc3MgSW5zcGVjdG9yU3R5bGVT
aGVldEZvcklubGluZVN0eWxlIDogcHVibGljIEluc3BlY3RvclN0eWxlU2hlZXQgewogcHVibGlj
OgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHls
ZT4gY3JlYXRlKEluc3BlY3RvclBhZ2VBZ2VudCosIGNvbnN0IFN0cmluZyYgaWQsIFBhc3NSZWZQ
dHI8RWxlbWVudD4sIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNTUzo6U3R5bGVTaGVldE9yaWdp
bjo6RW51bSwgTGlzdGVuZXIqKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JTdHls
ZVNoZWV0Rm9ySW5saW5lU3R5bGU+IGNyZWF0ZShJbnNwZWN0b3JQYWdlQWdlbnQqLCBjb25zdCBT
dHJpbmcmIGlkLCBQYXNzUmVmUHRyPEVsZW1lbnQ+LCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpD
U1M6OlN0eWxlU2hlZXRPcmlnaW4sIExpc3RlbmVyKik7CiAKICAgICB2b2lkIGRpZE1vZGlmeUVs
ZW1lbnRBdHRyaWJ1dGUoKTsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0VGV4dChTdHJpbmcqIHJlc3Vs
dCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHls
ZUZvcklkKGNvbnN0IEluc3BlY3RvckNTU0lkJiBpZCkgY29uc3Qgb3ZlcnJpZGUgeyBBU1NFUlRf
VU5VU0VEKGlkLCAhaWQub3JkaW5hbCgpKTsgcmV0dXJuIGlubGluZVN0eWxlKCk7IH0KIAogcHJv
dGVjdGVkOgotICAgIEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZShJbnNwZWN0b3JQ
YWdlQWdlbnQqLCBjb25zdCBTdHJpbmcmIGlkLCBQYXNzUmVmUHRyPEVsZW1lbnQ+LCBJbnNwZWN0
b3I6OlR5cGVCdWlsZGVyOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW46OkVudW0sIExpc3RlbmVyKik7
CisgICAgSW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlKEluc3BlY3RvclBhZ2VBZ2Vu
dCosIGNvbnN0IFN0cmluZyYgaWQsIFBhc3NSZWZQdHI8RWxlbWVudD4sIEluc3BlY3Rvcjo6VHlw
ZUJ1aWxkZXI6OkNTUzo6U3R5bGVTaGVldE9yaWdpbiwgTGlzdGVuZXIqKTsKIAogICAgIHZpcnR1
YWwgRG9jdW1lbnQqIG93bmVyRG9jdW1lbnQoKSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFs
IFJlZlB0cjxDU1NSdWxlU291cmNlRGF0YT4gcnVsZVNvdXJjZURhdGFGb3IoQ1NTU3R5bGVEZWNs
YXJhdGlvbiogc3R5bGUpIGNvbnN0IG92ZXJyaWRlIHsgQVNTRVJUX1VOVVNFRChzdHlsZSwgc3R5
bGUgPT0gaW5saW5lU3R5bGUoKSk7IHJldHVybiBtX3J1bGVTb3VyY2VEYXRhOyB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5jcHAKaW5k
ZXggZGRkYzFjNjEzZDUwYTNhNTcwMDYzYmQzZDM0OTA2MWYyZmM3MTUwNC4uZDM2YzNmY2UwNGQ1
NTA4NzZjMTZmZjNkNzc0NzVlNTYwZTAwYTYxMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvclRpbWVsaW5lQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JUaW1lbGluZUFnZW50LmNwcApAQCAtNDYzLDcgKzQ2Myw3IEBA
IHZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6YnJlYWtwb2ludEFjdGlvblByb2JlKEpTQzo6
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBJCiAgICAgYXBwZW5kUmVjb3JkKFRpbWVsaW5lUmVjb3Jk
RmFjdG9yeTo6Y3JlYXRlUHJvYmVTYW1wbGVEYXRhKGFjdGlvbiwgaGl0Q291bnQpLCBUaW1lbGlu
ZVJlY29yZFR5cGU6OlByb2JlU2FtcGxlLCBmYWxzZSwgZnJhbWUpOwogfQogCi1zdGF0aWMgSW5z
cGVjdG9yOjpUeXBlQnVpbGRlcjo6VGltZWxpbmU6OkV2ZW50VHlwZTo6RW51bSB0b1Byb3RvY29s
KFRpbWVsaW5lUmVjb3JkVHlwZSB0eXBlKQorc3RhdGljIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6
OlRpbWVsaW5lOjpFdmVudFR5cGUgdG9Qcm90b2NvbChUaW1lbGluZVJlY29yZFR5cGUgdHlwZSkK
IHsKICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICBjYXNlIFRpbWVsaW5lUmVjb3JkVHlwZTo6RXZl
bnREaXNwYXRjaDoKQEAgLTU1Myw3ICs1NTMsNyBAQCB2b2lkIEluc3BlY3RvclRpbWVsaW5lQWdl
bnQ6OmFkZFJlY29yZFRvVGltZWxpbmUoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBycAog
ewogICAgIHBycFJlY29yZC0+c2V0U3RyaW5nKCJ0eXBlIiwgSW5zcGVjdG9yOjpUeXBlQnVpbGRl
cjo6Z2V0V2ViRW51bUNvbnN0YW50VmFsdWUodG9Qcm90b2NvbCh0eXBlKSkpOwogCi0gICAgUmVm
UHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlRpbWVsaW5lOjpUaW1lbGluZUV2ZW50PiByZWNv
cmQgPSBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpUaW1lbGluZTo6VGltZWxpbmVFdmVudDo6cnVu
dGltZUNhc3QocHJwUmVjb3JkKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6
VGltZWxpbmU6OlRpbWVsaW5lRXZlbnQ+IHJlY29yZCA9IEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9y
OjpUeXBlQnVpbGRlcjo6VGltZWxpbmU6OlRpbWVsaW5lRXZlbnQ+OjpydW50aW1lQ2FzdChwcnBS
ZWNvcmQpOwogCiAgICAgaWYgKG1fcmVjb3JkU3RhY2suaXNFbXB0eSgpKQogICAgICAgICBzZW5k
RXZlbnQocmVjb3JkLnJlbGVhc2UoKSk7CkBAIC02MTMsNyArNjEzLDcgQEAgdm9pZCBJbnNwZWN0
b3JUaW1lbGluZUFnZW50OjphcHBlbmRSZWNvcmQoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IGRhdGEsIFRpbWUKIHZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6c2VuZEV2ZW50KFBhc3NS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBldmVudCkKIHsKICAgICAvLyBGSVhNRTogcnVudGltZUNh
c3QgaXMgYSBoYWNrLiBXZSBkbyBpdCBiZWNhdXNlIHdlIGNhbid0IGJ1aWxkIFRpbWVsaW5lRXZl
bnQgZGlyZWN0bHkgbm93LgotICAgIFJlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpUaW1l
bGluZTo6VGltZWxpbmVFdmVudD4gcmVjb3JkQ2hlY2tlZCA9IEluc3BlY3Rvcjo6VHlwZUJ1aWxk
ZXI6OlRpbWVsaW5lOjpUaW1lbGluZUV2ZW50OjpydW50aW1lQ2FzdChldmVudCk7CisgICAgUmVm
UHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlRpbWVsaW5lOjpUaW1lbGluZUV2ZW50PiByZWNv
cmRDaGVja2VkID0gQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpUaW1lbGlu
ZTo6VGltZWxpbmVFdmVudD46OnJ1bnRpbWVDYXN0KGV2ZW50KTsKICAgICBtX2Zyb250ZW5kRGlz
cGF0Y2hlci0+ZXZlbnRSZWNvcmRlZChyZWNvcmRDaGVja2VkLnJlbGVhc2UoKSk7CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9DU1MuanNvbiBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9DU1MuanNvbgppbmRleCBjYTkwY2Y3NDFi
ZjZjMWI4OTM2ODdhZmUxZjYwZTA0ZTQwMmRjODRjLi45YzViMjc1NDVlYjliY2E3OGFkOWUyZTNl
Y2FmNjAyNDljYmZjNjAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvcHJv
dG9jb2wvQ1NTLmpzb24KKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL3Byb3RvY29sL0NT
Uy5qc29uCkBAIC0xNjMsNiArMTYzLDEyIEBACiAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAi
Q1NTIHN0eWxlIHJlcHJlc2VudGF0aW9uLiIKICAgICAgICAgfSwKICAgICAgICAgeworICAgICAg
ICAgICAgImlkIjogIkNTU1Byb3BlcnR5U3RhdHVzIiwKKwkgICAgInR5cGUiOiAic3RyaW5nIiwK
KyAgICAgICAgICAgICJlbnVtIjogWyJhY3RpdmUiLCAiaW5hY3RpdmUiLCAiZGlzYWJsZWQiLCAi
c3R5bGUiXSwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJUaGUgcHJvcGVydHkgc3RhdHVz
OiBcImFjdGl2ZVwiIGlmIHRoZSBwcm9wZXJ0eSBpcyBlZmZlY3RpdmUgaW4gdGhlIHN0eWxlLCBc
ImluYWN0aXZlXCIgaWYgdGhlIHByb3BlcnR5IGlzIG92ZXJyaWRkZW4gYnkgYSBzYW1lLW5hbWVk
IHByb3BlcnR5IGluIHRoaXMgc3R5bGUgbGF0ZXIgb24sIFwiZGlzYWJsZWRcIiBpZiB0aGUgcHJv
cGVydHkgaXMgZGlzYWJsZWQgYnkgdGhlIHVzZXIsIFwic3R5bGVcIiAoaW1wbGllZCBpZiBhYnNl
bnQpIGlmIHRoZSBwcm9wZXJ0eSBpcyByZXBvcnRlZCBieSB0aGUgYnJvd3NlciByYXRoZXIgdGhh
biBieSB0aGUgQ1NTIHNvdXJjZSBwYXJzZXIuIgorICAgICAgICB9LAorICAgICAgICB7CiAgICAg
ICAgICAgICAiaWQiOiAiQ1NTUHJvcGVydHkiLAogICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0
IiwKICAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWwpAQCAtMTcyLDcgKzE3OCw3IEBACiAgICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJpbXBsaWNpdCIsICJ0eXBlIjogImJvb2xlYW4iLCAib3B0
aW9uYWwiOiB0cnVlLCAiZGVzY3JpcHRpb24iOiAiV2hldGhlciB0aGUgcHJvcGVydHkgaXMgaW1w
bGljaXQgKGltcGxpZXMgPGNvZGU+ZmFsc2U8L2NvZGU+IGlmIGFic2VudCkuIiB9LAogICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAidGV4dCIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6
IHRydWUsICJkZXNjcmlwdGlvbiI6ICJUaGUgZnVsbCBwcm9wZXJ0eSB0ZXh0IGFzIHNwZWNpZmll
ZCBpbiB0aGUgc3R5bGUuIiB9LAogICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicGFyc2VkT2si
LCAidHlwZSI6ICJib29sZWFuIiwgIm9wdGlvbmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9uIjogIldo
ZXRoZXIgdGhlIHByb3BlcnR5IGlzIHVuZGVyc3Rvb2QgYnkgdGhlIGJyb3dzZXIgKGltcGxpZXMg
PGNvZGU+dHJ1ZTwvY29kZT4gaWYgYWJzZW50KS4iIH0sCi0gICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJzdGF0dXMiLCAidHlwZSI6ICJzdHJpbmciLCAiZW51bSI6IFsiYWN0aXZlIiwgImluYWN0
aXZlIiwgImRpc2FibGVkIiwgInN0eWxlIl0sICJvcHRpb25hbCI6IHRydWUsICJkZXNjcmlwdGlv
biI6ICJUaGUgcHJvcGVydHkgc3RhdHVzOiBcImFjdGl2ZVwiIGlmIHRoZSBwcm9wZXJ0eSBpcyBl
ZmZlY3RpdmUgaW4gdGhlIHN0eWxlLCBcImluYWN0aXZlXCIgaWYgdGhlIHByb3BlcnR5IGlzIG92
ZXJyaWRkZW4gYnkgYSBzYW1lLW5hbWVkIHByb3BlcnR5IGluIHRoaXMgc3R5bGUgbGF0ZXIgb24s
IFwiZGlzYWJsZWRcIiBpZiB0aGUgcHJvcGVydHkgaXMgZGlzYWJsZWQgYnkgdGhlIHVzZXIsIFwi
c3R5bGVcIiAoaW1wbGllZCBpZiBhYnNlbnQpIGlmIHRoZSBwcm9wZXJ0eSBpcyByZXBvcnRlZCBi
eSB0aGUgYnJvd3NlciByYXRoZXIgdGhhbiBieSB0aGUgQ1NTIHNvdXJjZSBwYXJzZXIuIiB9LAor
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic3RhdHVzIiwgIiRyZWYiOiAiQ1NTUHJvcGVydHlT
dGF0dXMiLCAib3B0aW9uYWwiOiB0cnVlLCAiZGVzY3JpcHRpb24iOiAiV2hldGhlciB0aGUgcHJv
cGVydHkgaXMgYWN0aXZlIG9yIGRpc2FibGVkLiIgfSwKICAgICAgICAgICAgICAgICB7ICJuYW1l
IjogInJhbmdlIiwgIiRyZWYiOiAiU291cmNlUmFuZ2UiLCAib3B0aW9uYWwiOiB0cnVlLCAiZGVz
Y3JpcHRpb24iOiAiVGhlIGVudGlyZSBwcm9wZXJ0eSByYW5nZSBpbiB0aGUgZW5jbG9zaW5nIHN0
eWxlIGRlY2xhcmF0aW9uIChpZiBhdmFpbGFibGUpLiIgfQogICAgICAgICAgICAgXSwKICAgICAg
ICAgICAgICJkZXNjcmlwdGlvbiI6ICJDU1Mgc3R5bGUgZWZmZWN0aXZlIHZpc3VhbCBkaW1lbnNp
b25zIGFuZCBzb3VyY2Ugb2Zmc2V0cy4iCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvcHJvdG9jb2wvUGFnZS5qc29uIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL3Byb3Rv
Y29sL1BhZ2UuanNvbgppbmRleCAzYWZkYmMwY2QzZDI3ZDUxNjRkMjZlOGJkMzJjNGQ3NmZkZmRk
Mjc1Li44OGE3NmM0NmYyYmVmY2RhNGRiMWE0NTA0ZjcyZjJlMjJkNjcxNTAwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvUGFnZS5qc29uCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9QYWdlLmpzb24KQEAgLTI5LDI2ICsyOSwyNSBA
QAogICAgICAgICAgICAgXQogICAgICAgICB9LAogICAgICAgICB7CisgICAgICAgICAgICAiaWQi
OiAiRnJhbWVSZXNvdXJjZSIsCisgICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAorICAgICAg
ICAgICAgInByb3BlcnRpZXMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ1cmwiLCAi
dHlwZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRpb24iOiAiUmVzb3VyY2UgVVJMLiIgfSwKKyAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogInR5cGUiLCAiJHJlZiI6ICJSZXNvdXJjZVR5cGUiLCAiZGVz
Y3JpcHRpb24iOiAiVHlwZSBvZiB0aGlzIHJlc291cmNlLiIgfSwKKyAgICAgICAgICAgICAgICB7
ICJuYW1lIjogIm1pbWVUeXBlIiwgInR5cGUiOiAic3RyaW5nIiwgImRlc2NyaXB0aW9uIjogIlJl
c291cmNlIG1pbWVUeXBlIGFzIGRldGVybWluZWQgYnkgdGhlIGJyb3dzZXIuIiB9LAorICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAiZmFpbGVkIiwgInR5cGUiOiAiYm9vbGVhbiIsICJvcHRpb25h
bCI6IHRydWUsICJkZXNjcmlwdGlvbiI6ICJUcnVlIGlmIHRoZSByZXNvdXJjZSBmYWlsZWQgdG8g
bG9hZC4iIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjYW5jZWxlZCIsICJ0eXBlIjog
ImJvb2xlYW4iLCAib3B0aW9uYWwiOiB0cnVlLCAiZGVzY3JpcHRpb24iOiAiVHJ1ZSBpZiB0aGUg
cmVzb3VyY2Ugd2FzIGNhbmNlbGVkIGR1cmluZyBsb2FkaW5nLiIgfSwKKyAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogInNvdXJjZU1hcFVSTCIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6
IHRydWUsICJkZXNjcmlwdGlvbiI6ICJVUkwgb2Ygc291cmNlIG1hcCBhc3NvY2lhdGVkIHdpdGgg
dGhpcyByZXNvdXJjZSAoaWYgYW55KS4iIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAg
ICAgICAgewogICAgICAgICAgICAgImlkIjogIkZyYW1lUmVzb3VyY2VUcmVlIiwKICAgICAgICAg
ICAgICJ0eXBlIjogIm9iamVjdCIsCiAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiSW5mb3Jt
YXRpb24gYWJvdXQgdGhlIEZyYW1lIGhpZXJhcmNoeSBhbG9uZyB3aXRoIHRoZWlyIGNhY2hlZCBy
ZXNvdXJjZXMuIiwKICAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWwogICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAiZnJhbWUiLCAiJHJlZiI6ICJGcmFtZSIsICJkZXNjcmlwdGlvbiI6ICJGcmFt
ZSBpbmZvcm1hdGlvbiBmb3IgdGhpcyB0cmVlIGl0ZW0uIiB9LAogICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAiY2hpbGRGcmFtZXMiLCAidHlwZSI6ICJhcnJheSIsICJvcHRpb25hbCI6IHRydWUs
ICJpdGVtcyI6IHsgIiRyZWYiOiAiRnJhbWVSZXNvdXJjZVRyZWUiIH0sICJkZXNjcmlwdGlvbiI6
ICJDaGlsZCBmcmFtZXMuIiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicmVzb3VyY2Vz
IiwgInR5cGUiOiAiYXJyYXkiLAotICAgICAgICAgICAgICAgICAgICAiaXRlbXMiOiB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAotICAgICAgICAgICAgICAgICAg
ICAgICAgInByb3BlcnRpZXMiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJ1cmwiLCAidHlwZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRpb24iOiAiUmVzb3VyY2UgVVJM
LiIgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInR5cGUiLCAiJHJl
ZiI6ICJSZXNvdXJjZVR5cGUiLCAiZGVzY3JpcHRpb24iOiAiVHlwZSBvZiB0aGlzIHJlc291cmNl
LiIgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm1pbWVUeXBlIiwg
InR5cGUiOiAic3RyaW5nIiwgImRlc2NyaXB0aW9uIjogIlJlc291cmNlIG1pbWVUeXBlIGFzIGRl
dGVybWluZWQgYnkgdGhlIGJyb3dzZXIuIiB9LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAiZmFpbGVkIiwgInR5cGUiOiAiYm9vbGVhbiIsICJvcHRpb25hbCI6IHRydWUs
ICJkZXNjcmlwdGlvbiI6ICJUcnVlIGlmIHRoZSByZXNvdXJjZSBmYWlsZWQgdG8gbG9hZC4iIH0s
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjYW5jZWxlZCIsICJ0eXBl
IjogImJvb2xlYW4iLCAib3B0aW9uYWwiOiB0cnVlLCAiZGVzY3JpcHRpb24iOiAiVHJ1ZSBpZiB0
aGUgcmVzb3VyY2Ugd2FzIGNhbmNlbGVkIGR1cmluZyBsb2FkaW5nLiIgfSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNvdXJjZU1hcFVSTCIsICJ0eXBlIjogInN0cmlu
ZyIsICJvcHRpb25hbCI6IHRydWUsICJkZXNjcmlwdGlvbiI6ICJVUkwgb2Ygc291cmNlIG1hcCBh
c3NvY2lhdGVkIHdpdGggdGhpcyByZXNvdXJjZSAoaWYgYW55KS4iIH0KLSAgICAgICAgICAgICAg
ICAgICAgICAgIF0KLSAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAg
ImRlc2NyaXB0aW9uIjogIkluZm9ybWF0aW9uIGFib3V0IGZyYW1lIHJlc291cmNlcy4iCi0gICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicmVzb3VyY2VzIiwgInR5
cGUiOiAiYXJyYXkiLCAiaXRlbXMiOiB7ICIkcmVmIjogIkZyYW1lUmVzb3VyY2UiIH0sICJkZXNj
cmlwdGlvbiI6ICJJbmZvcm1hdGlvbiBhYm91dCBmcmFtZSByZXNvdXJjZXMuIiB9CiAgICAgICAg
ICAgICBdCiAgICAgICAgIH0sCiAgICAgICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNw
ZWN0b3JVSS9WZXJzaW9ucy9JbnNwZWN0b3ItaU9TLTYuMC5qc29uIGIvU291cmNlL1dlYkluc3Bl
Y3RvclVJL1ZlcnNpb25zL0luc3BlY3Rvci1pT1MtNi4wLmpzb24KaW5kZXggMTQ4Mzc4MWJhNTBi
MTgxMWQ3ZDZjYWZjZDUwYTQxMTRhOWFjOWQwNS4uMzUwMjQ1ZmY4YjY5ZjA4NTJmNDAxMDFhZDFk
N2Y4NTkzMTEwYzdiMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1ZlcnNpb25z
L0luc3BlY3Rvci1pT1MtNi4wLmpzb24KKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1ZlcnNp
b25zL0luc3BlY3Rvci1pT1MtNi4wLmpzb24KQEAgLTY4LDI1ICs2OCwyNCBAQAogICAgICAgICAg
ICAgICAgIF0KICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ImlkIjogIkZyYW1lUmVzb3VyY2UiLAorICAgICAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIs
CisgICAgICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCisgICAgICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAidXJsIiwgInR5cGUiOiAic3RyaW5nIiwgImRlc2NyaXB0aW9uIjogIlJlc291cmNl
IFVSTC4iIH0sCisgICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidHlwZSIsICIkcmVmIjog
IlJlc291cmNlVHlwZSIsICJkZXNjcmlwdGlvbiI6ICJUeXBlIG9mIHRoaXMgcmVzb3VyY2UuIiB9
LAorICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm1pbWVUeXBlIiwgInR5cGUiOiAic3Ry
aW5nIiwgImRlc2NyaXB0aW9uIjogIlJlc291cmNlIG1pbWVUeXBlIGFzIGRldGVybWluZWQgYnkg
dGhlIGJyb3dzZXIuIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogImZhaWxlZCIs
ICJ0eXBlIjogImJvb2xlYW4iLCAib3B0aW9uYWwiOiB0cnVlLCAiZGVzY3JpcHRpb24iOiAiVHJ1
ZSBpZiB0aGUgcmVzb3VyY2UgZmFpbGVkIHRvIGxvYWQuIiB9LAorICAgICAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogImNhbmNlbGVkIiwgInR5cGUiOiAiYm9vbGVhbiIsICJvcHRpb25hbCI6IHRy
dWUsICJkZXNjcmlwdGlvbiI6ICJUcnVlIGlmIHRoZSByZXNvdXJjZSB3YXMgY2FuY2VsZWQgZHVy
aW5nIGxvYWRpbmcuIiB9CisgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgfSwKKyAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICAiaWQiOiAiRnJhbWVSZXNvdXJjZVRyZWUiLAogICAg
ICAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCiAgICAgICAgICAgICAgICAgImRlc2NyaXB0
aW9uIjogIkluZm9ybWF0aW9uIGFib3V0IHRoZSBGcmFtZSBoaWVyYXJjaHkgYWxvbmcgd2l0aCB0
aGVpciBjYWNoZWQgcmVzb3VyY2VzLiIsCiAgICAgICAgICAgICAgICAgInByb3BlcnRpZXMiOiBb
CiAgICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZnJhbWUiLCAiJHJlZiI6ICJGcmFtZSIs
ICJkZXNjcmlwdGlvbiI6ICJGcmFtZSBpbmZvcm1hdGlvbiBmb3IgdGhpcyB0cmVlIGl0ZW0uIiB9
LAogICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNoaWxkRnJhbWVzIiwgInR5cGUiOiAi
YXJyYXkiLCAib3B0aW9uYWwiOiB0cnVlLCAiaXRlbXMiOiB7ICIkcmVmIjogIkZyYW1lUmVzb3Vy
Y2VUcmVlIiB9LCAiZGVzY3JpcHRpb24iOiAiQ2hpbGQgZnJhbWVzLiIgfSwKLSAgICAgICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJyZXNvdXJjZXMiLCAidHlwZSI6ICJhcnJheSIsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAiaXRlbXMiOiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
InR5cGUiOiAib2JqZWN0IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHJvcGVydGll
cyI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ1cmwiLCAi
dHlwZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRpb24iOiAiUmVzb3VyY2UgVVJMLiIgfSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0eXBlIiwgIiRyZWYiOiAiUmVz
b3VyY2VUeXBlIiwgImRlc2NyaXB0aW9uIjogIlR5cGUgb2YgdGhpcyByZXNvdXJjZS4iIH0sCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibWltZVR5cGUiLCAidHlw
ZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRpb24iOiAiUmVzb3VyY2UgbWltZVR5cGUgYXMgZGV0ZXJt
aW5lZCBieSB0aGUgYnJvd3Nlci4iIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAiZmFpbGVkIiwgInR5cGUiOiAiYm9vbGVhbiIsICJvcHRpb25hbCI6IHRydWUs
ICJkZXNjcmlwdGlvbiI6ICJUcnVlIGlmIHRoZSByZXNvdXJjZSBmYWlsZWQgdG8gbG9hZC4iIH0s
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY2FuY2VsZWQiLCAi
dHlwZSI6ICJib29sZWFuIiwgIm9wdGlvbmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9uIjogIlRydWUg
aWYgdGhlIHJlc291cmNlIHdhcyBjYW5jZWxlZCBkdXJpbmcgbG9hZGluZy4iIH0KLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBdCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAg
ICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkluZm9ybWF0aW9uIGFib3V0IGZyYW1l
IHJlc291cmNlcy4iCi0gICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJyZXNvdXJjZXMiLCAidHlwZSI6ICJhcnJheSIsICJpdGVtcyI6IHsgIiRyZWYi
OiAiRnJhbWVSZXNvdXJjZSIgfSwgImRlc2NyaXB0aW9uIjogIkluZm9ybWF0aW9uIGFib3V0IGZy
YW1lIHJlc291cmNlcy4iIH0KICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICB9LAogICAg
ICAgICAgICAgewpAQCAtMTU4Nyw3ICsxNTg2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJuYW1lIiwgInR5cGUiOiAic3RyaW5nIiwgImRlc2NyaXB0aW9uIjogIkNvbXB1dGVk
IHN0eWxlIHByb3BlcnR5IG5hbWUuIiB9LAogICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjog
InZhbHVlIiwgInR5cGUiOiAic3RyaW5nIiwgImRlc2NyaXB0aW9uIjogIkNvbXB1dGVkIHN0eWxl
IHByb3BlcnR5IHZhbHVlLiIgfQogICAgICAgICAgICAgICAgIF0KLSAgICAgICAgICAgIH0sICAg
ICAgICAgICAgCisgICAgICAgICAgICB9LAogICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
ICJpZCI6ICJDU1NTdHlsZSIsCiAgICAgICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKQEAg
LTE2MDMsNiArMTYwMiwxMiBAQAogICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJDU1Mg
c3R5bGUgcmVwcmVzZW50YXRpb24uIgogICAgICAgICAgICAgfSwKICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAiaWQiOiAiQ1NTUHJvcGVydHlTdGF0dXMiLAorICAgICAgICAgICAgICAg
ICJ0eXBlIjogInN0cmluZyIsCisgICAgICAgICAgICAgICAgImVudW0iOiBbImFjdGl2ZSIsICJp
bmFjdGl2ZSIsICJkaXNhYmxlZCIsICJzdHlsZSJdLAorICAgICAgICAgICAgICAgICJkZXNjcmlw
dGlvbiI6ICJUaGUgcHJvcGVydHkgc3RhdHVzOiBcImFjdGl2ZVwiIChpbXBsaWVkIGlmIGFic2Vu
dCkgaWYgdGhlIHByb3BlcnR5IGlzIGVmZmVjdGl2ZSBpbiB0aGUgc3R5bGUsIFwiaW5hY3RpdmVc
IiBpZiB0aGUgcHJvcGVydHkgaXMgb3ZlcnJpZGRlbiBieSBhIHNhbWUtbmFtZWQgcHJvcGVydHkg
aW4gdGhpcyBzdHlsZSBsYXRlciBvbiwgXCJkaXNhYmxlZFwiIGlmIHRoZSBwcm9wZXJ0eSBpcyBk
aXNhYmxlZCBieSB0aGUgdXNlciwgXCJzdHlsZVwiIGlmIHRoZSBwcm9wZXJ0eSBpcyByZXBvcnRl
ZCBieSB0aGUgYnJvd3NlciByYXRoZXIgdGhhbiBieSB0aGUgQ1NTIHNvdXJjZSBwYXJzZXIuIgor
ICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAiaWQiOiAiQ1NT
UHJvcGVydHkiLAogICAgICAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCiAgICAgICAgICAg
ICAgICAgInByb3BlcnRpZXMiOiBbCkBAIC0xNjEyLDcgKzE2MTcsNyBAQAogICAgICAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogImltcGxpY2l0IiwgInR5cGUiOiAiYm9vbGVhbiIsICJvcHRpb25h
bCI6IHRydWUsICJkZXNjcmlwdGlvbiI6ICJXaGV0aGVyIHRoZSBwcm9wZXJ0eSBpcyBpbXBsaWNp
dCAoaW1wbGllcyA8Y29kZT5mYWxzZTwvY29kZT4gaWYgYWJzZW50KS4iIH0sCiAgICAgICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAidGV4dCIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6
IHRydWUsICJkZXNjcmlwdGlvbiI6ICJUaGUgZnVsbCBwcm9wZXJ0eSB0ZXh0IGFzIHNwZWNpZmll
ZCBpbiB0aGUgc3R5bGUuIiB9LAogICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBhcnNl
ZE9rIiwgInR5cGUiOiAiYm9vbGVhbiIsICJvcHRpb25hbCI6IHRydWUsICJkZXNjcmlwdGlvbiI6
ICJXaGV0aGVyIHRoZSBwcm9wZXJ0eSBpcyB1bmRlcnN0b29kIGJ5IHRoZSBicm93c2VyIChpbXBs
aWVzIDxjb2RlPnRydWU8L2NvZGU+IGlmIGFic2VudCkuIiB9LAotICAgICAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogInN0YXR1cyIsICJ0eXBlIjogInN0cmluZyIsICJlbnVtIjogWyJhY3RpdmUi
LCAiaW5hY3RpdmUiLCAiZGlzYWJsZWQiLCAic3R5bGUiXSwgIm9wdGlvbmFsIjogdHJ1ZSwgImRl
c2NyaXB0aW9uIjogIlRoZSBwcm9wZXJ0eSBzdGF0dXM6IFwiYWN0aXZlXCIgKGltcGxpZWQgaWYg
YWJzZW50KSBpZiB0aGUgcHJvcGVydHkgaXMgZWZmZWN0aXZlIGluIHRoZSBzdHlsZSwgXCJpbmFj
dGl2ZVwiIGlmIHRoZSBwcm9wZXJ0eSBpcyBvdmVycmlkZGVuIGJ5IGEgc2FtZS1uYW1lZCBwcm9w
ZXJ0eSBpbiB0aGlzIHN0eWxlIGxhdGVyIG9uLCBcImRpc2FibGVkXCIgaWYgdGhlIHByb3BlcnR5
IGlzIGRpc2FibGVkIGJ5IHRoZSB1c2VyLCBcInN0eWxlXCIgaWYgdGhlIHByb3BlcnR5IGlzIHJl
cG9ydGVkIGJ5IHRoZSBicm93c2VyIHJhdGhlciB0aGFuIGJ5IHRoZSBDU1Mgc291cmNlIHBhcnNl
ci4iIH0sCisgICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic3RhdHVzIiwgIiRyZWYiOiAi
Q1NTUHJvcGVydHlTdGF0dXMiLCAib3B0aW9uYWwiOiB0cnVlLCAiZGVzY3JpcHRpb24iOiAiV2hl
dGhlciB0aGUgcHJvcGVydHkgaXMgYWN0aXZlIG9yIGRpc2FibGVkLiIgfSwKICAgICAgICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJzaG9ydGhhbmROYW1lIiwgInR5cGUiOiAic3RyaW5nIiwgIm9w
dGlvbmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9uIjogIlRoZSByZWxhdGVkIHNob3J0aGFuZCBwcm9w
ZXJ0eSBuYW1lIChhYnNlbnQgaWYgdGhpcyBwcm9wZXJ0eSBpcyBub3QgYSBsb25naGFuZCkuIiB9
LAogICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInJhbmdlIiwgIiRyZWYiOiAiU291cmNl
UmFuZ2UiLCAib3B0aW9uYWwiOiB0cnVlLCAiZGVzY3JpcHRpb24iOiAiVGhlIGVudGlyZSBwcm9w
ZXJ0eSByYW5nZSBpbiB0aGUgZW5jbG9zaW5nIHN0eWxlIGRlY2xhcmF0aW9uIChpZiBhdmFpbGFi
bGUpLiIgfQogICAgICAgICAgICAgICAgIF0sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvVmVyc2lvbnMvSW5zcGVjdG9yLWlPUy03LjAuanNvbiBiL1NvdXJjZS9XZWJJbnNwZWN0
b3JVSS9WZXJzaW9ucy9JbnNwZWN0b3ItaU9TLTcuMC5qc29uCmluZGV4IGQwNTMyMDliNjI5Mzk4
ZDZjMDg5NzMyY2MyZGJiYWVlMjE3OWM1YzAuLjY4YWUxYjUwNzE3NWQyNDFmNmQ5NjcwM2EyYWI0
YWU1YmFkYzhkZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9WZXJzaW9ucy9J
bnNwZWN0b3ItaU9TLTcuMC5qc29uCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9WZXJzaW9u
cy9JbnNwZWN0b3ItaU9TLTcuMC5qc29uCkBAIC02NSwyNiArNjUsMjUgQEAKICAgICAgICAgICAg
ICAgICBdCiAgICAgICAgICAgICB9LAogICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJp
ZCI6ICJGcmFtZVJlc291cmNlIiwKKyAgICAgICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAor
ICAgICAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWworICAgICAgICAgICAgICAgICAgICB7ICJu
YW1lIjogInVybCIsICJ0eXBlIjogInN0cmluZyIsICJkZXNjcmlwdGlvbiI6ICJSZXNvdXJjZSBV
UkwuIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInR5cGUiLCAiJHJlZiI6ICJS
ZXNvdXJjZVR5cGUiLCAiZGVzY3JpcHRpb24iOiAiVHlwZSBvZiB0aGlzIHJlc291cmNlLiIgfSwK
KyAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJtaW1lVHlwZSIsICJ0eXBlIjogInN0cmlu
ZyIsICJkZXNjcmlwdGlvbiI6ICJSZXNvdXJjZSBtaW1lVHlwZSBhcyBkZXRlcm1pbmVkIGJ5IHRo
ZSBicm93c2VyLiIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJmYWlsZWQiLCAi
dHlwZSI6ICJib29sZWFuIiwgIm9wdGlvbmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9uIjogIlRydWUg
aWYgdGhlIHJlc291cmNlIGZhaWxlZCB0byBsb2FkLiIgfSwKKyAgICAgICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJjYW5jZWxlZCIsICJ0eXBlIjogImJvb2xlYW4iLCAib3B0aW9uYWwiOiB0cnVl
LCAiZGVzY3JpcHRpb24iOiAiVHJ1ZSBpZiB0aGUgcmVzb3VyY2Ugd2FzIGNhbmNlbGVkIGR1cmlu
ZyBsb2FkaW5nLiIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzb3VyY2VNYXBV
UkwiLCAidHlwZSI6ICJzdHJpbmciLCAib3B0aW9uYWwiOiB0cnVlLCAiZGVzY3JpcHRpb24iOiAi
VVJMIG9mIHNvdXJjZSBtYXAgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcmVzb3VyY2UgKGlmIGFueSku
IiB9CisgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICAiaWQiOiAiRnJhbWVSZXNvdXJjZVRyZWUiLAogICAgICAgICAgICAgICAg
ICJ0eXBlIjogIm9iamVjdCIsCiAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkluZm9y
bWF0aW9uIGFib3V0IHRoZSBGcmFtZSBoaWVyYXJjaHkgYWxvbmcgd2l0aCB0aGVpciBjYWNoZWQg
cmVzb3VyY2VzLiIsCiAgICAgICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCiAgICAgICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAiZnJhbWUiLCAiJHJlZiI6ICJGcmFtZSIsICJkZXNjcmlwdGlv
biI6ICJGcmFtZSBpbmZvcm1hdGlvbiBmb3IgdGhpcyB0cmVlIGl0ZW0uIiB9LAogICAgICAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogImNoaWxkRnJhbWVzIiwgInR5cGUiOiAiYXJyYXkiLCAib3B0
aW9uYWwiOiB0cnVlLCAiaXRlbXMiOiB7ICIkcmVmIjogIkZyYW1lUmVzb3VyY2VUcmVlIiB9LCAi
ZGVzY3JpcHRpb24iOiAiQ2hpbGQgZnJhbWVzLiIgfSwKLSAgICAgICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJyZXNvdXJjZXMiLCAidHlwZSI6ICJhcnJheSIsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAiaXRlbXMiOiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAib2Jq
ZWN0IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHJvcGVydGllcyI6IFsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ1cmwiLCAidHlwZSI6ICJzdHJp
bmciLCAiZGVzY3JpcHRpb24iOiAiUmVzb3VyY2UgVVJMLiIgfSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0eXBlIiwgIiRyZWYiOiAiUmVzb3VyY2VUeXBlIiwg
ImRlc2NyaXB0aW9uIjogIlR5cGUgb2YgdGhpcyByZXNvdXJjZS4iIH0sCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibWltZVR5cGUiLCAidHlwZSI6ICJzdHJpbmci
LCAiZGVzY3JpcHRpb24iOiAiUmVzb3VyY2UgbWltZVR5cGUgYXMgZGV0ZXJtaW5lZCBieSB0aGUg
YnJvd3Nlci4iIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
ZmFpbGVkIiwgInR5cGUiOiAiYm9vbGVhbiIsICJvcHRpb25hbCI6IHRydWUsICJkZXNjcmlwdGlv
biI6ICJUcnVlIGlmIHRoZSByZXNvdXJjZSBmYWlsZWQgdG8gbG9hZC4iIH0sCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY2FuY2VsZWQiLCAidHlwZSI6ICJib29s
ZWFuIiwgIm9wdGlvbmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9uIjogIlRydWUgaWYgdGhlIHJlc291
cmNlIHdhcyBjYW5jZWxlZCBkdXJpbmcgbG9hZGluZy4iIH0sCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAic291cmNlTWFwVVJMIiwgInR5cGUiOiAic3RyaW5nIiwg
Im9wdGlvbmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9uIjogIlVSTCBvZiBzb3VyY2UgbWFwIGFzc29j
aWF0ZWQgd2l0aCB0aGlzIHJlc291cmNlIChpZiBhbnkpLiIgfQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAg
ICAgICAgICAiZGVzY3JpcHRpb24iOiAiSW5mb3JtYXRpb24gYWJvdXQgZnJhbWUgcmVzb3VyY2Vz
LiIKLSAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjog
InJlc291cmNlcyIsICJ0eXBlIjogImFycmF5IiwgIml0ZW1zIjogeyAiJHJlZiI6ICJGcmFtZVJl
c291cmNlIiB9LCAiZGVzY3JpcHRpb24iOiAiSW5mb3JtYXRpb24gYWJvdXQgZnJhbWUgcmVzb3Vy
Y2VzLiIgfQogICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICB7
CkBAIC0xOTE3LDYgKzE5MTYsMTIgQEAKICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAi
Q1NTIHN0eWxlIHJlcHJlc2VudGF0aW9uLiIKICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgImlkIjogIkNTU1Byb3BlcnR5U3RhdHVzIiwKKyAgICAgICAgICAg
ICAgICAidHlwZSI6ICJzdHJpbmciLAorICAgICAgICAgICAgICAgICJlbnVtIjogWyJhY3RpdmUi
LCAiaW5hY3RpdmUiLCAiZGlzYWJsZWQiLCAic3R5bGUiXSwKKyAgICAgICAgICAgICAgICAiZGVz
Y3JpcHRpb24iOiAiVGhlIHByb3BlcnR5IHN0YXR1czogXCJhY3RpdmVcIiAoaW1wbGllZCBpZiBh
YnNlbnQpIGlmIHRoZSBwcm9wZXJ0eSBpcyBlZmZlY3RpdmUgaW4gdGhlIHN0eWxlLCBcImluYWN0
aXZlXCIgaWYgdGhlIHByb3BlcnR5IGlzIG92ZXJyaWRkZW4gYnkgYSBzYW1lLW5hbWVkIHByb3Bl
cnR5IGluIHRoaXMgc3R5bGUgbGF0ZXIgb24sIFwiZGlzYWJsZWRcIiBpZiB0aGUgcHJvcGVydHkg
aXMgZGlzYWJsZWQgYnkgdGhlIHVzZXIsIFwic3R5bGVcIiBpZiB0aGUgcHJvcGVydHkgaXMgcmVw
b3J0ZWQgYnkgdGhlIGJyb3dzZXIgcmF0aGVyIHRoYW4gYnkgdGhlIENTUyBzb3VyY2UgcGFyc2Vy
LiIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgImlkIjog
IkNTU1Byb3BlcnR5IiwKICAgICAgICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAogICAgICAg
ICAgICAgICAgICJwcm9wZXJ0aWVzIjogWwpAQCAtMTkyNiw3ICsxOTMxLDcgQEAKICAgICAgICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJpbXBsaWNpdCIsICJ0eXBlIjogImJvb2xlYW4iLCAib3B0
aW9uYWwiOiB0cnVlLCAiZGVzY3JpcHRpb24iOiAiV2hldGhlciB0aGUgcHJvcGVydHkgaXMgaW1w
bGljaXQgKGltcGxpZXMgPGNvZGU+ZmFsc2U8L2NvZGU+IGlmIGFic2VudCkuIiB9LAogICAgICAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogInRleHQiLCAidHlwZSI6ICJzdHJpbmciLCAib3B0aW9u
YWwiOiB0cnVlLCAiZGVzY3JpcHRpb24iOiAiVGhlIGZ1bGwgcHJvcGVydHkgdGV4dCBhcyBzcGVj
aWZpZWQgaW4gdGhlIHN0eWxlLiIgfSwKICAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJw
YXJzZWRPayIsICJ0eXBlIjogImJvb2xlYW4iLCAib3B0aW9uYWwiOiB0cnVlLCAiZGVzY3JpcHRp
b24iOiAiV2hldGhlciB0aGUgcHJvcGVydHkgaXMgdW5kZXJzdG9vZCBieSB0aGUgYnJvd3NlciAo
aW1wbGllcyA8Y29kZT50cnVlPC9jb2RlPiBpZiBhYnNlbnQpLiIgfSwKLSAgICAgICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJzdGF0dXMiLCAidHlwZSI6ICJzdHJpbmciLCAiZW51bSI6IFsiYWN0
aXZlIiwgImluYWN0aXZlIiwgImRpc2FibGVkIiwgInN0eWxlIl0sICJvcHRpb25hbCI6IHRydWUs
ICJkZXNjcmlwdGlvbiI6ICJUaGUgcHJvcGVydHkgc3RhdHVzOiBcImFjdGl2ZVwiIGlmIHRoZSBw
cm9wZXJ0eSBpcyBlZmZlY3RpdmUgaW4gdGhlIHN0eWxlLCBcImluYWN0aXZlXCIgaWYgdGhlIHBy
b3BlcnR5IGlzIG92ZXJyaWRkZW4gYnkgYSBzYW1lLW5hbWVkIHByb3BlcnR5IGluIHRoaXMgc3R5
bGUgbGF0ZXIgb24sIFwiZGlzYWJsZWRcIiBpZiB0aGUgcHJvcGVydHkgaXMgZGlzYWJsZWQgYnkg
dGhlIHVzZXIsIFwic3R5bGVcIiAoaW1wbGllZCBpZiBhYnNlbnQpIGlmIHRoZSBwcm9wZXJ0eSBp
cyByZXBvcnRlZCBieSB0aGUgYnJvd3NlciByYXRoZXIgdGhhbiBieSB0aGUgQ1NTIHNvdXJjZSBw
YXJzZXIuIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInN0YXR1cyIsICIkcmVm
IjogIkNTU1Byb3BlcnR5U3RhdHVzIiwgIm9wdGlvbmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9uIjog
IldoZXRoZXIgdGhlIHByb3BlcnR5IGlzIGFjdGl2ZSBvciBkaXNhYmxlZC4iIH0sCiAgICAgICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAicmFuZ2UiLCAiJHJlZiI6ICJTb3VyY2VSYW5nZSIsICJv
cHRpb25hbCI6IHRydWUsICJkZXNjcmlwdGlvbiI6ICJUaGUgZW50aXJlIHByb3BlcnR5IHJhbmdl
IGluIHRoZSBlbmNsb3Npbmcgc3R5bGUgZGVjbGFyYXRpb24gKGlmIGF2YWlsYWJsZSkuIiB9CiAg
ICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiQ1NTIHN0
eWxlIGVmZmVjdGl2ZSB2aXN1YWwgZGltZW5zaW9ucyBhbmQgc291cmNlIG9mZnNldHMuIgpkaWZm
IC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IGNjZGUzNmE3
N2I4MGE1ZTY5ZmZmZTg4MjZhMzFkNzY1ODllMGVhMzguLmRjZmMyYjc4MzhhYzk3MTcxNDY5Njlm
OWE5YmNkZDQ1Nzc2NjkzYzMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29s
cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNSBAQAorMjAxNC0wNS0yNSAgQnJpYW4gSi4gQnVyZyAg
PGJ1cmdAY3Mud2FzaGluZ3Rvbi5lZHU+CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogcmV3cml0
ZSBDb2RlR2VuZXJhdG9ySW5zcGVjdG9yIHRvIGJlIG1vZHVsYXIgYW5kIHRlc3RhYmxlCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzE1OTYKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgYSB3cmFwcGVy
IHNjcmlwdCBmb3IgcnVubmluZyBpbnNwZWN0b3IgYmluZGluZ3MgZ2VuZXJhdG9yIHRlc3RzLgor
ICAgICAgICBJdCBpcyBhZGFwdGVkIGZyb20gdGhlIERPTSBiaW5kaW5ncyBhbmQgcmVwbGF5IGdl
bmVyYXRvciB0ZXN0IHNjcmlwdHMuCisKKyAgICAgICAgKiBTY3JpcHRzL3J1bi1pbnNwZWN0b3It
Z2VuZXJhdG9yLXRlc3RzOiBBZGRlZC4KKyAgICAgICAgKG1haW4pOgorICAgICAgICAqIFNjcmlw
dHMvd2Via2l0cHkvaW5zcGVjdG9yL19faW5pdF9fLnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3Jp
cHRzL3dlYmtpdHB5L2luc3BlY3Rvci9tYWluLnB5OiBBZGRlZC4KKyAgICAgICAgKEluc3BlY3Rv
ckdlbmVyYXRvclRlc3RzKToKKyAgICAgICAgKEluc3BlY3RvckdlbmVyYXRvclRlc3RzLl9faW5p
dF9fKToKKyAgICAgICAgKEluc3BlY3RvckdlbmVyYXRvclRlc3RzLmdlbmVyYXRlX2Zyb21fanNv
bik6CisgICAgICAgIChJbnNwZWN0b3JHZW5lcmF0b3JUZXN0cy53cml0ZV9lcnJvcl9maWxlKToK
KyAgICAgICAgKEluc3BlY3RvckdlbmVyYXRvclRlc3RzLmRldGVjdF9jaGFuZ2VzKToKKyAgICAg
ICAgKEluc3BlY3RvckdlbmVyYXRvclRlc3RzLnJ1bl90ZXN0cyk6CisgICAgICAgIChJbnNwZWN0
b3JHZW5lcmF0b3JUZXN0cy5tYWluKToKKwogMjAxNC0wNS0yMyAgTWljaGFlbCBTYWJvZmYgIDxt
c2Fib2ZmQGFwcGxlLmNvbT4KIAogICAgICAgICBSRUdSRVNTSU9OKHIxNjkyNjUpOiBzaDogbGlu
ZSAwOiBjZDogLi4vLnZtCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3J1bi1pbnNwZWN0b3It
Z2VuZXJhdG9yLXRlc3RzIGIvVG9vbHMvU2NyaXB0cy9ydW4taW5zcGVjdG9yLWdlbmVyYXRvci10
ZXN0cwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5hYWFiMTgwMGJjYTZmN2U4YTM0OTZlNTkxODQyMWVlYWUyZDM4ZDgy
Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy9ydW4taW5zcGVjdG9yLWdlbmVyYXRv
ci10ZXN0cwpAQCAtMCwwICsxLDQyIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMgQ29weXJp
Z2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorIyBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCBzeXMKK2Zyb20gd2Via2l0cHku
Y29tbW9uLnN5c3RlbSBpbXBvcnQgZXhlY3V0aXZlCisKK2RlZiBtYWluKGFyZ3YpOgorICAgICIi
IlJ1bnMgcmVwbGF5IGlucHV0IGNvZGUgZ2VuZXJhdG9yIG9uIHRlc3Qgc3BlY2lmaWNhdGlvbiBm
aWxlcyBhbmQgY29tcGFyZXMKKyAgICB0aGUgcmVzdWx0cyB3aXRoIHJlZmVyZW5jZSBmaWxlcy4K
KworICAgIE9wdGlvbnM6CisgICAgICAgLS1yZXNldC1yZXN1bHRzOiBPdmVyd3JpdGVzIHRoZSBy
ZWZlcmVuY2UgZmlsZXMgd2l0aCB0aGUgZ2VuZXJhdGVkIHJlc3VsdHMuCisKKyAgICAiIiIKKyAg
ICByZXNldF9yZXN1bHRzID0gIi0tcmVzZXQtcmVzdWx0cyIgaW4gYXJndgorCisgICAgZnJvbSB3
ZWJraXRweS5pbnNwZWN0b3IubWFpbiBpbXBvcnQgSW5zcGVjdG9yR2VuZXJhdG9yVGVzdHMKKyAg
ICByZXR1cm4gSW5zcGVjdG9yR2VuZXJhdG9yVGVzdHMocmVzZXRfcmVzdWx0cywgZXhlY3V0aXZl
LkV4ZWN1dGl2ZSgpKS5tYWluKCkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBz
eXMuZXhpdChtYWluKHN5cy5hcmd2KSkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cHkvaW5zcGVjdG9yL19faW5pdF9fLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9pbnNwZWN0
b3IvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWY2NWJlZTViYjc3ZTk2ZWJjN2NkOWM0NzY0MDY5
MGZiZGE4YWMxOQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvaW5z
cGVjdG9yL19faW5pdF9fLnB5CkBAIC0wLDAgKzEgQEAKKyMgUmVxdWlyZWQgZm9yIFB5dGhvbiB0
byBzZWFyY2ggdGhpcyBkaXJlY3RvcnkgZm9yIG1vZHVsZSBmaWxlcwpkaWZmIC0tZ2l0IGEvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9pbnNwZWN0b3IvbWFpbi5weSBiL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvaW5zcGVjdG9yL21haW4ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzY5ZjA0MTJmYzYzMDM2YWNjYTc0
Y2Y3NTljODc0ZTU3Y2IxZGVhZAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvaW5zcGVjdG9yL21haW4ucHkKQEAgLTAsMCArMSwxMzQgQEAKKyMgQ29weXJpZ2h0IChD
KSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoQykg
MjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUyAiQVMKKyMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVECisjIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQQorIyBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgSE9MREVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0IG9zCitpbXBv
cnQgb3MucGF0aAoraW1wb3J0IHNodXRpbAoraW1wb3J0IHN5cworaW1wb3J0IHRlbXBmaWxlCitm
cm9tIHdlYmtpdHB5LmNvbW1vbi5jaGVja291dC5zY20uZGV0ZWN0aW9uIGltcG9ydCBkZXRlY3Rf
c2NtX3N5c3RlbQorZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmV4ZWN1dGl2ZSBpbXBvcnQg
U2NyaXB0RXJyb3IKKworCitjbGFzcyBJbnNwZWN0b3JHZW5lcmF0b3JUZXN0czoKKworICAgIGRl
ZiBfX2luaXRfXyhzZWxmLCByZXNldF9yZXN1bHRzLCBleGVjdXRpdmUpOgorICAgICAgICBzZWxm
LnJlc2V0X3Jlc3VsdHMgPSByZXNldF9yZXN1bHRzCisgICAgICAgIHNlbGYuZXhlY3V0aXZlID0g
ZXhlY3V0aXZlCisKKyAgICBkZWYgZ2VuZXJhdGVfZnJvbV9qc29uKHNlbGYsIGpzb25fZmlsZSwg
b3V0cHV0X2RpcmVjdG9yeSk6CisgICAgICAgIGNtZCA9IFsncHl0aG9uJywKKyAgICAgICAgICAg
ICAgICdKYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHknLAorICAgICAgICAgICAgICAgJy0tb3V0cHV0RGlyJywgb3V0
cHV0X2RpcmVjdG9yeSwKKyAgICAgICAgICAgICAgICctLWZvcmNlJywKKyAgICAgICAgICAgICAg
ICctLWZyYW1ld29yaycsICdUZXN0JywKKyAgICAgICAgICAgICAgICctLXRlc3QnLAorICAgICAg
ICAgICAgICAganNvbl9maWxlXQorCisgICAgICAgIGV4aXRfY29kZSA9IDAKKyAgICAgICAgdHJ5
OgorICAgICAgICAgICAgc3RkZXJyX291dHB1dCA9IHNlbGYuZXhlY3V0aXZlLnJ1bl9jb21tYW5k
KGNtZCkKKyAgICAgICAgICAgIGlmIHN0ZGVycl9vdXRwdXQ6CisgICAgICAgICAgICAgICAgc2Vs
Zi53cml0ZV9lcnJvcl9maWxlKGpzb25fZmlsZSwgb3V0cHV0X2RpcmVjdG9yeSwgc3RkZXJyX291
dHB1dCkKKyAgICAgICAgZXhjZXB0IFNjcmlwdEVycm9yLCBlOgorICAgICAgICAgICAgcHJpbnQg
ZS5vdXRwdXQKKyAgICAgICAgICAgIGV4aXRfY29kZSA9IGUuZXhpdF9jb2RlCisgICAgICAgIHJl
dHVybiBleGl0X2NvZGUKKworICAgIGRlZiB3cml0ZV9lcnJvcl9maWxlKHNlbGYsIGlucHV0X2Zp
bGVwYXRoLCBvdXRwdXRfZGlyZWN0b3J5LCBlcnJvcl9vdXRwdXQpOgorICAgICAgICBvdXRwdXRf
ZmlsZXBhdGggPSBvcy5wYXRoLmpvaW4ob3V0cHV0X2RpcmVjdG9yeSwgb3MucGF0aC5iYXNlbmFt
ZShpbnB1dF9maWxlcGF0aCkgKyAnLWVycm9yJykKKworICAgICAgICB3aXRoIG9wZW4ob3V0cHV0
X2ZpbGVwYXRoLCAidyIpIGFzIG91dHB1dF9maWxlOgorICAgICAgICAgICAgb3V0cHV0X2ZpbGUu
d3JpdGUoZXJyb3Jfb3V0cHV0KQorCisgICAgZGVmIGRldGVjdF9jaGFuZ2VzKHNlbGYsIHdvcmtf
ZGlyZWN0b3J5LCByZWZlcmVuY2VfZGlyZWN0b3J5KToKKyAgICAgICAgY2hhbmdlc19mb3VuZCA9
IEZhbHNlCisgICAgICAgIGZvciBvdXRwdXRfZmlsZSBpbiBvcy5saXN0ZGlyKHdvcmtfZGlyZWN0
b3J5KToKKyAgICAgICAgICAgIGNtZCA9IFsnZGlmZicsCisgICAgICAgICAgICAgICAgICAgJy11
JywKKyAgICAgICAgICAgICAgICAgICAnLU4nLAorICAgICAgICAgICAgICAgICAgIG9zLnBhdGgu
am9pbihyZWZlcmVuY2VfZGlyZWN0b3J5LCBvdXRwdXRfZmlsZSksCisgICAgICAgICAgICAgICAg
ICAgb3MucGF0aC5qb2luKHdvcmtfZGlyZWN0b3J5LCBvdXRwdXRfZmlsZSldCisKKyAgICAgICAg
ICAgIGV4aXRfY29kZSA9IDAKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBvdXRw
dXQgPSBzZWxmLmV4ZWN1dGl2ZS5ydW5fY29tbWFuZChjbWQpCisgICAgICAgICAgICBleGNlcHQg
U2NyaXB0RXJyb3IsIGU6CisgICAgICAgICAgICAgICAgb3V0cHV0ID0gZS5vdXRwdXQKKyAgICAg
ICAgICAgICAgICBleGl0X2NvZGUgPSBlLmV4aXRfY29kZQorCisgICAgICAgICAgICBpZiBleGl0
X2NvZGUgb3Igb3V0cHV0OgorICAgICAgICAgICAgICAgIHByaW50ICdGQUlMOiAlcycgJSBvdXRw
dXRfZmlsZQorICAgICAgICAgICAgICAgIHByaW50IG91dHB1dAorICAgICAgICAgICAgICAgIGNo
YW5nZXNfZm91bmQgPSBUcnVlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHBy
aW50ICdQQVNTOiAlcycgJSBvdXRwdXRfZmlsZQorICAgICAgICByZXR1cm4gY2hhbmdlc19mb3Vu
ZAorCisgICAgZGVmIHJ1bl90ZXN0cyhzZWxmLCBpbnB1dF9kaXJlY3RvcnksIHJlZmVyZW5jZV9k
aXJlY3RvcnkpOgorICAgICAgICB3b3JrX2RpcmVjdG9yeSA9IHJlZmVyZW5jZV9kaXJlY3RvcnkK
KworICAgICAgICBwYXNzZWQgPSBUcnVlCisgICAgICAgIGZvciBpbnB1dF9maWxlIGluIG9zLmxp
c3RkaXIoaW5wdXRfZGlyZWN0b3J5KToKKyAgICAgICAgICAgIChuYW1lLCBleHRlbnNpb24pID0g
b3MucGF0aC5zcGxpdGV4dChpbnB1dF9maWxlKQorICAgICAgICAgICAgaWYgZXh0ZW5zaW9uICE9
ICcuanNvbic6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICMgR2VuZXJh
dGUgb3V0cHV0IGludG8gdGhlIHdvcmsgZGlyZWN0b3J5IChlaXRoZXIgdGhlIGdpdmVuIG9uZSBv
ciBhCisgICAgICAgICAgICAjIHRlbXAgb25lIGlmIG5vdCByZXNldF9yZXN1bHRzIGlzIHBlcmZv
cm1lZCkKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLnJlc2V0X3Jlc3VsdHM6CisgICAgICAgICAg
ICAgICAgd29ya19kaXJlY3RvcnkgPSB0ZW1wZmlsZS5ta2R0ZW1wKCkKKworICAgICAgICAgICAg
aWYgc2VsZi5nZW5lcmF0ZV9mcm9tX2pzb24ob3MucGF0aC5qb2luKGlucHV0X2RpcmVjdG9yeSwg
aW5wdXRfZmlsZSksIHdvcmtfZGlyZWN0b3J5KToKKyAgICAgICAgICAgICAgICBwYXNzZWQgPSBG
YWxzZQorCisgICAgICAgICAgICBpZiBzZWxmLnJlc2V0X3Jlc3VsdHM6CisgICAgICAgICAgICAg
ICAgcHJpbnQgIlJlc2V0IHJlc3VsdHMgZm9yIHRlc3Q6ICVzIiAlIChpbnB1dF9maWxlKQorICAg
ICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICMgRGV0ZWN0IGNoYW5nZXMKKyAg
ICAgICAgICAgIGlmIHNlbGYuZGV0ZWN0X2NoYW5nZXMod29ya19kaXJlY3RvcnksIHJlZmVyZW5j
ZV9kaXJlY3RvcnkpOgorICAgICAgICAgICAgICAgIHBhc3NlZCA9IEZhbHNlCisgICAgICAgICAg
ICBzaHV0aWwucm10cmVlKHdvcmtfZGlyZWN0b3J5KQorCisgICAgICAgIHJldHVybiBwYXNzZWQK
KworICAgIGRlZiBtYWluKHNlbGYpOgorICAgICAgICBjdXJyZW50X3NjbSA9IGRldGVjdF9zY21f
c3lzdGVtKG9zLmN1cmRpcikKKyAgICAgICAgb3MuY2hkaXIob3MucGF0aC5qb2luKGN1cnJlbnRf
c2NtLmNoZWNrb3V0X3Jvb3QsICdTb3VyY2UnKSkKKworICAgICAgICBhbGxfdGVzdHNfcGFzc2Vk
ID0gVHJ1ZQorCisgICAgICAgIGlucHV0X2RpcmVjdG9yeSA9IG9zLnBhdGguam9pbignSmF2YVNj
cmlwdENvcmUnLCAnaW5zcGVjdG9yJywgJ3NjcmlwdHMnLCAndGVzdHMnKQorICAgICAgICByZWZl
cmVuY2VfZGlyZWN0b3J5ID0gb3MucGF0aC5qb2luKCdKYXZhU2NyaXB0Q29yZScsICdpbnNwZWN0
b3InLCAnc2NyaXB0cycsICd0ZXN0cycsICdleHBlY3RlZCcpCisgICAgICAgIGlmIG5vdCBzZWxm
LnJ1bl90ZXN0cyhpbnB1dF9kaXJlY3RvcnksIHJlZmVyZW5jZV9kaXJlY3RvcnkpOgorICAgICAg
ICAgICAgYWxsX3Rlc3RzX3Bhc3NlZCA9IEZhbHNlCisKKyAgICAgICAgcHJpbnQgJycKKyAgICAg
ICAgaWYgYWxsX3Rlc3RzX3Bhc3NlZDoKKyAgICAgICAgICAgIHByaW50ICdBbGwgdGVzdHMgUEFT
UyEnCisgICAgICAgICAgICByZXR1cm4gMAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJp
bnQgJ1NvbWUgdGVzdHMgRkFJTCEgKFRvIHVwZGF0ZSB0aGUgcmVmZXJlbmNlIGZpbGVzLCBleGVj
dXRlICJydW4taW5zcGVjdG9yLWdlbmVyYXRvci10ZXN0cyAtLXJlc2V0LXJlc3VsdHMiKScKKyAg
ICAgICAgICAgIHJldHVybiAtMQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>236385</attachid>
            <date>2014-08-11 11:33:43 -0700</date>
            <delta_ts>2014-08-14 12:49:55 -0700</delta_ts>
            <desc>PFR v2</desc>
            <filename>bug-131596-20140811113327.patch</filename>
            <type>text/plain</type>
            <size>686942</size>
            <attacher name="Brian Burg">burg</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTcyMzk0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBm
ZGI2NjAzOTUxN2IyMDUzYzRkMGJmOTYzZTVmMTdjMzdhYzgzZDc2Li5hNjYxZWJhOGM1NTY2ZGJm
ZmJhMDRkZjk3NjU1ZmI3OTAxNGYzNGFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzODQgQEAKKzIwMTQtMDgtMDkgIEJyaWFuIEouIEJ1cmcgIDxidXJnQGNzLndhc2hpbmd0
b24uZWR1PgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IHJld3JpdGUgQ29kZUdlbmVyYXRvcklu
c3BlY3RvciB0byBiZSBtb2R1bGFyIGFuZCB0ZXN0YWJsZQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMxNTk2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVwbGFjZSBDb2RlR2VuZXJhdG9ySW5zcGVjdG9y
LnB5IHdpdGggZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5LgorICAgICAg
ICBUaGUgbmV3IGdlbmVyYXRvciBkZWNvdXBsZXMgcGFyc2luZyBhbmQgdHlwZWNoZWNraW5nIGEg
bW9kZWwgb2YgdGhlIHByb3RvY29sIGZyb20KKyAgICAgICAgY29kZSBnZW5lcmF0aW9uLiBFYWNo
IGdlbmVyYXRlZCBmaWxlIGlzIGNyZWF0ZWQgYnkgYSBkaWZmZXJlbnQgc3ViY2xhc3Mgb2YgR2Vu
ZXJhdG9yLgorICAgICAgICBIZWxwZXIgbWV0aG9kcyB0byBjb21wdXRlIHZhcmlvdXMgdHlwZSBz
aWduYXR1cmVzIGFyZSBzaGFyZWQgYW1vbmcgZ2VuZXJhdG9ycy4KKworICAgICAgICBUaGlzIHBh
dGNoIGludHJvZHVjZXMgYSB0ZXN0IGhhcm5lc3MgYW5kIGEgdGVzdCBzdWl0ZSB0aGF0IGNvdmVy
cyBhbGwgZnVuY3Rpb25hbGl0eS4KKworICAgICAgICBBc2lkZSBmcm9tIGhvb2tpbmcgdXAgdGhl
IG5ldyBpbnNwZWN0b3IgYmluZGluZ3MgZ2VuZXJhdG9yIHRvIHRoZSBidWlsZCBzeXN0ZW0sCisg
ICAgICAgIHRoZXJlIGFyZSBhIGZldyBjb21pbmdsZWQgY2hhbmdlcyB0aGF0IHdvdWxkIGJlIHBh
aW5mdWwgdG8gc3BsaXQgZnJvbSB0aGUgbWFpbgorICAgICAgICBwYXRjaDoKKworICAgICAgICBD
b252ZXJ0IHByb3RvY29sIGVudW1lcmF0aW9uIHR5cGVzIGZyb20gc3RydWN0LW5hbWVzcGFjZWQg
ZW51bXMgdG8gQysrIHNjb3BlZCBlbnVtcy4KKworICAgICAgICBNb3ZlIGFsbCBydW50aW1lQ2Fz
dCgpLCBhc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZSgpLCBhbmQgUnVudGltZUNhc3RIZWxwZXIg
bWV0aG9kcyB0byBzdGF0aWMKKyAgICAgICAgbWV0aG9kcyBvZiBCaW5kaW5nVHJhaXRzIHNwZWNp
YWxpemF0aW9ucy4KKworICAgICAgICBUb2dldGhlciwgdGhlc2UgY2hhbmdlcyByZWR1Y2UgZHVw
bGljYXRpb24gYW5kIG1ha2UgaXQgcG9zc2libGUgdG8gZm9yd2FyZC1kZWNsYXJlCisgICAgICAg
IGFsbCBwcm90b2NvbCBlbnVtIGFuZCBvYmplY3QgdHlwZXMsIHJlZHVjaW5nIHdlaXJkIG9yZGVy
aW5nIGRlcGVuZGVuY2llcyBiZXR3ZWVuIGRvbWFpbnMuCisKKyAgICAgICAgKiBDTWFrZUxpc3Rz
LnR4dDoKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy5tYWtlOgorICAgICAgICAqIEphdmFTY3Jp
cHRDb3JlLnZjeHByb2ovY29weS1maWxlcy5jbWQ6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBpbnNwZWN0b3IvQ29uc29sZU1l
c3NhZ2UuY3BwOiBDb252ZXJ0IHRvIHNjb3BlZCBlbnVtcy4KKyAgICAgICAgKEluc3BlY3Rvcjo6
bWVzc2FnZVNvdXJjZVZhbHVlKToKKyAgICAgICAgKEluc3BlY3Rvcjo6bWVzc2FnZVR5cGVWYWx1
ZSk6CisgICAgICAgIChJbnNwZWN0b3I6Om1lc3NhZ2VMZXZlbFZhbHVlKToKKyAgICAgICAgKiBp
bnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHQuY3BwOiBDb252ZXJ0IHRvIHNjb3BlZCBlbnVtcyBhbmQg
QmluZGluZ1RyYWl0cy4KKyAgICAgICAgKEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHQ6OmdldEZ1
bmN0aW9uRGV0YWlscyk6CisgICAgICAgIChJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0OjpnZXRQ
cm9wZXJ0aWVzKToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHQ6OmdldEludGVy
bmFsUHJvcGVydGllcyk6CisgICAgICAgIChJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0Ojp3cmFw
Q2FsbEZyYW1lcyk6CisgICAgICAgIChJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0Ojp3cmFwT2Jq
ZWN0KToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHQ6OndyYXBUYWJsZSk6Cisg
ICAgICAgICogaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0QmFzZS5jcHA6IENvbnZlcnQgSW5zcGVj
dG9yVmFsdWU6OlR5cGUgdG8gYSBzY29wZWQgZW51bS4KKyAgICAgICAgKEluc3BlY3Rvcjo6SW5q
ZWN0ZWRTY3JpcHRCYXNlOjptYWtlRXZhbENhbGwpOgorICAgICAgICAqIGluc3BlY3Rvci9Jbmpl
Y3RlZFNjcmlwdE1hbmFnZXIuY3BwOgorICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlw
dE1hbmFnZXI6OmluamVjdGVkU2NyaXB0Rm9yT2JqZWN0SWQpOgorICAgICAgICAqIGluc3BlY3Rv
ci9JbnNwZWN0b3JUeXBlQnVpbGRlci5oOgorICAgICAgICAoSW5zcGVjdG9yOjpUeXBlQnVpbGRl
cjo6QXJyYXk6OmNyZWF0ZSk6CisgICAgICAgIChJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpTdHJ1
Y3RJdGVtVHJhaXRzOjpwdXNoUmVmUHRyKToKKyAgICAgICAgKEluc3BlY3Rvcjo6VHlwZUJ1aWxk
ZXI6OkFycmF5SXRlbUhlbHBlcjxTdHJpbmc+OjpUcmFpdHM6OnB1c2hSYXcpOgorICAgICAgICAo
SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXlJdGVtSGVscGVyPGludD46OlRyYWl0czo6cHVz
aFJhdyk6CisgICAgICAgIChJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheUl0ZW1IZWxwZXI8
ZG91YmxlPjo6VHJhaXRzOjpwdXNoUmF3KToKKyAgICAgICAgKEluc3BlY3Rvcjo6VHlwZUJ1aWxk
ZXI6OkFycmF5SXRlbUhlbHBlcjxib29sPjo6VHJhaXRzOjpwdXNoUmF3KToKKyAgICAgICAgKElu
c3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5SXRlbUhlbHBlcjxJbnNwZWN0b3JWYWx1ZT46OlRy
YWl0czo6cHVzaFJlZlB0cik6CisgICAgICAgIChJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJh
eUl0ZW1IZWxwZXI8SW5zcGVjdG9yT2JqZWN0Pjo6VHJhaXRzOjpwdXNoUmVmUHRyKToKKyAgICAg
ICAgKEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5SXRlbUhlbHBlcjxJbnNwZWN0b3JBcnJh
eT46OlRyYWl0czo6cHVzaFJlZlB0cik6CisgICAgICAgIChJbnNwZWN0b3I6OlR5cGVCdWlsZGVy
OjpQcmltaXRpdmVCaW5kaW5nVHJhaXRzOjphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZSk6Cisg
ICAgICAgIChJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpCaW5kaW5nVHJhaXRzPFR5cGVCdWlsZGVy
OjpBcnJheTxUPj46OnJ1bnRpbWVDYXN0KToKKyAgICAgICAgKEluc3BlY3Rvcjo6VHlwZUJ1aWxk
ZXI6OkJpbmRpbmdUcmFpdHM8VHlwZUJ1aWxkZXI6OkFycmF5PFQ+Pjo6YXNzZXJ0VmFsdWVIYXNF
eHBlY3RlZFR5cGUpOgorICAgICAgICAoSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QmluZGluZ1Ry
YWl0czxJbnNwZWN0b3JWYWx1ZT46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKToKKyAgICAg
ICAgKEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkJpbmRpbmdUcmFpdHM8aW50Pjo6YXNzZXJ0VmFs
dWVIYXNFeHBlY3RlZFR5cGUpOgorICAgICAgICAoSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6RXhh
Y3RseUludDo6RXhhY3RseUludCk6IERlbGV0ZWQuIEl0IHdhcyBub3QgdXNlZC4KKyAgICAgICAg
KEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkV4YWN0bHlJbnQ6Om9wZXJhdG9yIGludCk6IERlbGV0
ZWQuCisgICAgICAgIChJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpFeGFjdGx5SW50OjpjYXN0X3Rv
X2ludCk6IERlbGV0ZWQuCisgICAgICAgIChJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpFeGFjdGx5
SW50OjpjYXN0X3RvX2ludDxpbnQ+KTogRGVsZXRlZC4KKyAgICAgICAgKEluc3BlY3Rvcjo6VHlw
ZUJ1aWxkZXI6OmludD4pOiBEZWxldGVkLgorICAgICAgICAoSW5zcGVjdG9yOjpUeXBlQnVpbGRl
cjo6UnVudGltZUNhc3RIZWxwZXI6OmFzc2VydFR5cGUpOiBEZWxldGVkLgorICAgICAgICAoSW5z
cGVjdG9yOjpUeXBlQnVpbGRlcjo6UnVudGltZUNhc3RIZWxwZXI6OmFzc2VydEFueSk6IERlbGV0
ZWQuCisgICAgICAgIChJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpSdW50aW1lQ2FzdEhlbHBlcjo6
YXNzZXJ0SW50KTogRGVsZXRlZC4KKyAgICAgICAgKEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFy
cmF5OjpydW50aW1lQ2FzdCk6IERlbGV0ZWQuCisgICAgICAgIChJbnNwZWN0b3I6OlR5cGVCdWls
ZGVyOjpBcnJheTo6YXNzZXJ0Q29ycmVjdFZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAgKEluc3Bl
Y3Rvcjo6VHlwZUJ1aWxkZXI6OlN0cnVjdEl0ZW1UcmFpdHM6OmFzc2VydENvcnJlY3RWYWx1ZSk6
IERlbGV0ZWQuCisgICAgICAgIChJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheUl0ZW1IZWxw
ZXI8U3RyaW5nPjo6VHJhaXRzOjphc3NlcnRDb3JyZWN0VmFsdWUpOiBEZWxldGVkLgorICAgICAg
ICAoSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXlJdGVtSGVscGVyPGludD46OlRyYWl0czo6
YXNzZXJ0Q29ycmVjdFZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAgKEluc3BlY3Rvcjo6VHlwZUJ1
aWxkZXI6OkFycmF5SXRlbUhlbHBlcjxkb3VibGU+OjpUcmFpdHM6OmFzc2VydENvcnJlY3RWYWx1
ZSk6IERlbGV0ZWQuCisgICAgICAgIChJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheUl0ZW1I
ZWxwZXI8Ym9vbD46OlRyYWl0czo6YXNzZXJ0Q29ycmVjdFZhbHVlKTogRGVsZXRlZC4KKyAgICAg
ICAgKEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5SXRlbUhlbHBlcjxJbnNwZWN0b3JWYWx1
ZT46OlRyYWl0czo6YXNzZXJ0Q29ycmVjdFZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAgKEluc3Bl
Y3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5SXRlbUhlbHBlcjxJbnNwZWN0b3JPYmplY3Q+OjpUcmFp
dHM6OmFzc2VydENvcnJlY3RWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgIChJbnNwZWN0b3I6OlR5
cGVCdWlsZGVyOjpBcnJheUl0ZW1IZWxwZXI8SW5zcGVjdG9yQXJyYXk+OjpUcmFpdHM6OmFzc2Vy
dENvcnJlY3RWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgIChJbnNwZWN0b3I6OlR5cGVCdWlsZGVy
OjpBcnJheUl0ZW1IZWxwZXI8VHlwZUJ1aWxkZXI6OkFycmF5PFQ+Pjo6VHJhaXRzOjphc3NlcnRD
b3JyZWN0VmFsdWUpOiBEZWxldGVkLgorCisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclZh
bHVlcy5jcHA6IENvbnZlcnQgSW5zcGVjdG9yVmFsdWU6OlR5cGUgdG8gYSBzY29wZWQgZW51bS4K
KyAgICAgICAgKEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU6OndyaXRlSlNPTik6CisgICAgICAg
IChJbnNwZWN0b3I6Okluc3BlY3RvckJhc2ljVmFsdWU6OmFzQm9vbGVhbik6CisgICAgICAgIChJ
bnNwZWN0b3I6Okluc3BlY3RvckJhc2ljVmFsdWU6OmFzTnVtYmVyKToKKyAgICAgICAgKEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yQmFzaWNWYWx1ZTo6d3JpdGVKU09OKToKKyAgICAgICAgKEluc3BlY3Rv
cjo6SW5zcGVjdG9yU3RyaW5nOjp3cml0ZUpTT04pOgorICAgICAgICAoSW5zcGVjdG9yOjpJbnNw
ZWN0b3JPYmplY3RCYXNlOjpJbnNwZWN0b3JPYmplY3RCYXNlKToKKyAgICAgICAgKEluc3BlY3Rv
cjo6SW5zcGVjdG9yQXJyYXlCYXNlOjpJbnNwZWN0b3JBcnJheUJhc2UpOgorICAgICAgICAqIGlu
c3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaDoKKworICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHA6IENvbnZlcnQgdG8gc2NvcGVkIGVudW1zLgorICAg
ICAgICAoSW5zcGVjdG9yOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzY2hlZHVsZVBhdXNlT25O
ZXh0U3RhdGVtZW50KToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5zcGVjdG9yRGVidWdnZXJBZ2Vu
dDo6YnJlYWtQcm9ncmFtKToKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRl
YnVnZ2VyQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclJ1bnRp
bWVBZ2VudC5jcHA6CisgICAgICAgIChJbnNwZWN0b3I6Okluc3BlY3RvclJ1bnRpbWVBZ2VudDo6
cGFyc2UpOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUnVudGltZUFnZW50
Lmg6CisKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9Db2RlR2VuZXJhdG9ySW5zcGVjdG9y
LnB5OiBSZW1vdmVkLgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vX19pbml0
X18ucHk6IEFkZGVkLgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJh
dGVfYmFja2VuZF9jb21tYW5kcy5weTogQWRkZWQuCisgICAgICAgIChCYWNrZW5kQ29tbWFuZHNH
ZW5lcmF0b3IpOgorICAgICAgICAoQmFja2VuZENvbW1hbmRzR2VuZXJhdG9yLl9faW5pdF9fKToK
KyAgICAgICAgKEJhY2tlbmRDb21tYW5kc0dlbmVyYXRvci5tb2RlbCk6CisgICAgICAgIChCYWNr
ZW5kQ29tbWFuZHNHZW5lcmF0b3Iub3V0cHV0X2ZpbGVuYW1lKToKKyAgICAgICAgKEJhY2tlbmRD
b21tYW5kc0dlbmVyYXRvci5nZW5lcmF0ZV9saWNlbnNlKToKKyAgICAgICAgKEJhY2tlbmRDb21t
YW5kc0dlbmVyYXRvci5nZW5lcmF0ZV9vdXRwdXQpOgorICAgICAgICAoQmFja2VuZENvbW1hbmRz
R2VuZXJhdG9yLmdlbmVyYXRlX2RvbWFpbik6CisgICAgICAgIChCYWNrZW5kQ29tbWFuZHNHZW5l
cmF0b3IuZ2VuZXJhdGVfZG9tYWluLmlzX2Fub255bW91c19lbnVtX21lbWJlcik6CisgICAgICAg
IChCYWNrZW5kQ29tbWFuZHNHZW5lcmF0b3IuZ2VuZXJhdGVfZG9tYWluLmdlbmVyYXRlX3BhcmFt
ZXRlcl9vYmplY3QpOgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJh
dGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weTogQWRkZWQuCisgICAgICAgIChCYWNrZW5k
RGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvcik6CisgICAgICAgIChCYWNrZW5kRGlzcGF0Y2hlckhl
YWRlckdlbmVyYXRvci5fX2luaXRfXyk6CisgICAgICAgIChCYWNrZW5kRGlzcGF0Y2hlckhlYWRl
ckdlbmVyYXRvci5tb2RlbCk6CisgICAgICAgIChCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVy
YXRvci5vdXRwdXRfZmlsZW5hbWUpOgorICAgICAgICAoQmFja2VuZERpc3BhdGNoZXJIZWFkZXJH
ZW5lcmF0b3IuZ2VuZXJhdGVfbGljZW5zZSk6CisgICAgICAgIChCYWNrZW5kRGlzcGF0Y2hlckhl
YWRlckdlbmVyYXRvci5nZW5lcmF0ZV9vdXRwdXQpOgorICAgICAgICAoQmFja2VuZERpc3BhdGNo
ZXJIZWFkZXJHZW5lcmF0b3IuZ2VuZXJhdGVfb3V0cHV0LmZvcik6CisgICAgICAgIChCYWNrZW5k
RGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvci5fZ2VuZXJhdGVfaGFuZGxlcl9kZWNsYXJhdGlvbnNf
Zm9yX2RvbWFpbik6CisgICAgICAgIChCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvci5f
Z2VuZXJhdGVfYW5vbnltb3VzX2VudW1fZm9yX3BhcmFtZXRlcik6CisgICAgICAgIChCYWNrZW5k
RGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvci5fZ2VuZXJhdGVfaGFuZGxlcl9kZWNsYXJhdGlvbl9m
b3JfY29tbWFuZCk6CisgICAgICAgIChCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvci5f
Z2VuZXJhdGVfYXN5bmNfaGFuZGxlcl9kZWNsYXJhdGlvbl9mb3JfY29tbWFuZCk6CisgICAgICAg
IChCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvci5fZ2VuZXJhdGVfZGlzcGF0Y2hlcl9k
ZWNsYXJhdGlvbnNfZm9yX2RvbWFpbik6CisgICAgICAgIChCYWNrZW5kRGlzcGF0Y2hlckhlYWRl
ckdlbmVyYXRvci5fZ2VuZXJhdGVfZGlzcGF0Y2hlcl9kZWNsYXJhdGlvbl9mb3JfY29tbWFuZCk6
CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9iYWNrZW5kX2Rp
c3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHk6IEFkZGVkLgorICAgICAgICAoQmFja2VuZERpc3Bh
dGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcik6CisgICAgICAgIChCYWNrZW5kRGlzcGF0Y2hl
ckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9faW5pdF9fKToKKyAgICAgICAgKEJhY2tlbmREaXNw
YXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IubW9kZWwpOgorICAgICAgICAoQmFja2VuZERp
c3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5vdXRwdXRfZmlsZW5hbWUpOgorICAgICAg
ICAoQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5nZW5lcmF0ZV9saWNl
bnNlKToKKyAgICAgICAgKEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3Iu
Z2VuZXJhdGVfb3V0cHV0KToKKyAgICAgICAgKEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRp
b25HZW5lcmF0b3IuX2dlbmVyYXRlX2hhbmRsZXJfY2xhc3NfZGVzdHJ1Y3Rvcl9mb3JfZG9tYWlu
KToKKyAgICAgICAgKEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dl
bmVyYXRlX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb25zX2Zvcl9kb21haW4pOgorICAgICAgICAo
QmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfc21hbGxf
ZGlzcGF0Y2hlcl9zd2l0Y2hfaW1wbGVtZW50YXRpb25fZm9yX2RvbWFpbik6CisgICAgICAgIChC
YWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9sYXJnZV9k
aXNwYXRjaGVyX3N3aXRjaF9pbXBsZW1lbnRhdGlvbl9mb3JfZG9tYWluKToKKyAgICAgICAgKEJh
Y2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX2FzeW5jX2Rp
c3BhdGNoZXJfY2xhc3NfZm9yX2RvbWFpbik6CisgICAgICAgIChCYWNrZW5kRGlzcGF0Y2hlcklt
cGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9u
X2Zvcl9jb21tYW5kKToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVy
YXRlX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5OiBBZGRlZC4KKyAgICAgICAgKEZyb250
ZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvcik6CisgICAgICAgIChGcm9udGVuZERpc3BhdGNo
ZXJIZWFkZXJHZW5lcmF0b3IuX19pbml0X18pOgorICAgICAgICAoRnJvbnRlbmREaXNwYXRjaGVy
SGVhZGVyR2VuZXJhdG9yLm1vZGVsKToKKyAgICAgICAgKEZyb250ZW5kRGlzcGF0Y2hlckhlYWRl
ckdlbmVyYXRvci5vdXRwdXRfZmlsZW5hbWUpOgorICAgICAgICAoRnJvbnRlbmREaXNwYXRjaGVy
SGVhZGVyR2VuZXJhdG9yLmdlbmVyYXRlX2xpY2Vuc2UpOgorICAgICAgICAoRnJvbnRlbmREaXNw
YXRjaGVySGVhZGVyR2VuZXJhdG9yLmdlbmVyYXRlX291dHB1dCk6CisgICAgICAgIChGcm9udGVu
ZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRlX2Fub255bW91c19lbnVtX2Zvcl9w
YXJhbWV0ZXIpOgorICAgICAgICAoRnJvbnRlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yLl9n
ZW5lcmF0ZV9kaXNwYXRjaGVyX2RlY2xhcmF0aW9uc19mb3JfZG9tYWluKToKKyAgICAgICAgKEZy
b250ZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvci5fZ2VuZXJhdGVfZGlzcGF0Y2hlcl9kZWNs
YXJhdGlvbl9mb3JfZXZlbnQpOgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4v
Z2VuZXJhdGVfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weTogQWRkZWQuCisg
ICAgICAgIChGcm9udGVuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcik6CisgICAg
ICAgIChGcm9udGVuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fX2luaXRfXyk6
CisgICAgICAgIChGcm9udGVuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5tb2Rl
bCk6CisgICAgICAgIChGcm9udGVuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5v
dXRwdXRfZmlsZW5hbWUpOgorICAgICAgICAoRnJvbnRlbmREaXNwYXRjaGVySW1wbGVtZW50YXRp
b25HZW5lcmF0b3IuZ2VuZXJhdGVfbGljZW5zZSk6CisgICAgICAgIChGcm9udGVuZERpc3BhdGNo
ZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5nZW5lcmF0ZV9vdXRwdXQpOgorICAgICAgICAoRnJv
bnRlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX2Rpc3BhdGNo
ZXJfaW1wbGVtZW50YXRpb25zX2Zvcl9kb21haW4pOgorICAgICAgICAoRnJvbnRlbmREaXNwYXRj
aGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX2Rpc3BhdGNoZXJfaW1wbGVtZW50
YXRpb25fZm9yX2V2ZW50KToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dl
bmVyYXRlX3R5cGVfYnVpbGRlcl9oZWFkZXIucHk6IEFkZGVkLgorICAgICAgICAoVHlwZUJ1aWxk
ZXJIZWFkZXJHZW5lcmF0b3IpOgorICAgICAgICAoVHlwZUJ1aWxkZXJIZWFkZXJHZW5lcmF0b3Iu
X19pbml0X18pOgorICAgICAgICAoVHlwZUJ1aWxkZXJIZWFkZXJHZW5lcmF0b3IubW9kZWwpOgor
ICAgICAgICAoVHlwZUJ1aWxkZXJIZWFkZXJHZW5lcmF0b3Iub3V0cHV0X2ZpbGVuYW1lKToKKyAg
ICAgICAgKFR5cGVCdWlsZGVySGVhZGVyR2VuZXJhdG9yLmdlbmVyYXRlX2xpY2Vuc2UpOgorICAg
ICAgICAoVHlwZUJ1aWxkZXJIZWFkZXJHZW5lcmF0b3IuZ2VuZXJhdGVfb3V0cHV0KToKKyAgICAg
ICAgKFR5cGVCdWlsZGVySGVhZGVyR2VuZXJhdG9yLl9nZW5lcmF0ZV9mb3J3YXJkX2RlY2xhcmF0
aW9ucyk6CisgICAgICAgIChfZ2VuZXJhdGVfdHlwZWRlZnMpOgorICAgICAgICAoX2dlbmVyYXRl
X3R5cGVkZWZzX2Zvcl9kb21haW4pOgorICAgICAgICAoX2dlbmVyYXRlX2J1aWxkZXJzX2Zvcl9k
b21haW4pOgorICAgICAgICAoX2dlbmVyYXRlX2NsYXNzX2Zvcl9vYmplY3RfZGVjbGFyYXRpb24p
OgorICAgICAgICAoX2dlbmVyYXRlX3N0cnVjdF9mb3JfZW51bV9kZWNsYXJhdGlvbik6CisgICAg
ICAgIChfZ2VuZXJhdGVfc3RydWN0X2Zvcl9hbm9ueW1vdXNfZW51bV9tZW1iZXIpOgorICAgICAg
ICAoX2dlbmVyYXRlX3N0cnVjdF9mb3JfYW5vbnltb3VzX2VudW1fbWVtYmVyLmFwcGx5X2luZGVu
dGF0aW9uKToKKyAgICAgICAgKF9nZW5lcmF0ZV9zdHJ1Y3RfZm9yX2VudW1fdHlwZSk6CisgICAg
ICAgIChfZ2VuZXJhdGVfYnVpbGRlcl9zdGF0ZV9lbnVtKToKKyAgICAgICAgKF9nZW5lcmF0ZV9i
dWlsZGVyX3NldHRlcl9mb3JfbWVtYmVyKToKKyAgICAgICAgKF9nZW5lcmF0ZV91bmNoZWNrZWRf
c2V0dGVyX2Zvcl9tZW1iZXIpOgorICAgICAgICAoX2dlbmVyYXRlX2ZvcndhcmRfZGVjbGFyYXRp
b25zX2Zvcl9iaW5kaW5nX3RyYWl0cyk6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29k
ZWdlbi9nZW5lcmF0ZV90eXBlX2J1aWxkZXJfaW1wbGVtZW50YXRpb24ucHk6IEFkZGVkLgorICAg
ICAgICAoVHlwZUJ1aWxkZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcik6CisgICAgICAgIChUeXBl
QnVpbGRlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9faW5pdF9fKToKKyAgICAgICAgKFR5cGVC
dWlsZGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IubW9kZWwpOgorICAgICAgICAoVHlwZUJ1aWxk
ZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5vdXRwdXRfZmlsZW5hbWUpOgorICAgICAgICAoVHlw
ZUJ1aWxkZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5nZW5lcmF0ZV9saWNlbnNlKToKKyAgICAg
ICAgKFR5cGVCdWlsZGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IuZ2VuZXJhdGVfb3V0cHV0KToK
KyAgICAgICAgKFR5cGVCdWlsZGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX2Vu
dW1fbWFwcGluZyk6CisgICAgICAgIChUeXBlQnVpbGRlckltcGxlbWVudGF0aW9uR2VuZXJhdG9y
Ll9nZW5lcmF0ZV9vcGVuX2ZpZWxkX25hbWVzKToKKyAgICAgICAgKFR5cGVCdWlsZGVySW1wbGVt
ZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX2J1aWxkZXJzX2Zvcl9kb21haW4pOgorICAgICAg
ICAoVHlwZUJ1aWxkZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfcnVudGltZV9j
YXN0X2Zvcl9vYmplY3RfZGVjbGFyYXRpb24pOgorICAgICAgICAoVHlwZUJ1aWxkZXJJbXBsZW1l
bnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfYXNzZXJ0aW9uX2Zvcl9vYmplY3RfZGVjbGFyYXRp
b24pOgorICAgICAgICAoVHlwZUJ1aWxkZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJh
dGVfYXNzZXJ0aW9uX2Zvcl9lbnVtKToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2Rl
Z2VuL2dlbmVyYXRvci5weTogQWRkZWQuCisgICAgICAgICh1Y2ZpcnN0KToKKyAgICAgICAgKEdl
bmVyYXRvcik6CisgICAgICAgIChHZW5lcmF0b3IuX19pbml0X18pOgorICAgICAgICAoR2VuZXJh
dG9yLm1vZGVsKToKKyAgICAgICAgKEdlbmVyYXRvci5nZW5lcmF0ZV9saWNlbnNlKToKKyAgICAg
ICAgKEdlbmVyYXRvci5kb21haW5zX3RvX2dlbmVyYXRlKToKKyAgICAgICAgKEdlbmVyYXRvci5n
ZW5lcmF0ZV9vdXRwdXQpOgorICAgICAgICAoR2VuZXJhdG9yLm91dHB1dF9maWxlbmFtZSk6Cisg
ICAgICAgIChHZW5lcmF0b3IuZW5jb2RpbmdfZm9yX2VudW1fdmFsdWUpOgorICAgICAgICAoR2Vu
ZXJhdG9yLmFzc2lnbmVkX2VudW1fdmFsdWVzKToKKyAgICAgICAgKEdlbmVyYXRvci50eXBlX25l
ZWRzX3J1bnRpbWVfY2FzdHMpOgorICAgICAgICAoR2VuZXJhdG9yLnR5cGVfaGFzX29wZW5fZmll
bGRzKToKKyAgICAgICAgKEdlbmVyYXRvci50eXBlX25lZWRzX3NoYXBlX2Fzc2VydGlvbnMpOgor
ICAgICAgICAoR2VuZXJhdG9yLmNhbGN1bGF0ZV90eXBlc19yZXF1aXJpbmdfc2hhcGVfYXNzZXJ0
aW9ucyk6CisgICAgICAgIChHZW5lcmF0b3IuY2FsY3VsYXRlX3R5cGVzX3JlcXVpcmluZ19zaGFw
ZV9hc3NlcnRpb25zLmdhdGhlcl90cmFuc2l0aXZlbHlfcmVmZXJlbmNlZF90eXBlcyk6CisgICAg
ICAgIChHZW5lcmF0b3IuX3RyYXZlcnNlX2FuZF9hc3NpZ25fZW51bV92YWx1ZXMpOgorICAgICAg
ICAoR2VuZXJhdG9yLl9hc3NpZ25fZW5jb2RpbmdfZm9yX2VudW1fdmFsdWUpOgorICAgICAgICAo
R2VuZXJhdG9yLndyYXBfd2l0aF9ndWFyZF9mb3JfZG9tYWluKToKKyAgICAgICAgKEdlbmVyYXRv
ci5zdHlsaXplZF9uYW1lX2Zvcl9lbnVtX3ZhbHVlKToKKyAgICAgICAgKEdlbmVyYXRvci5zdHls
aXplZF9uYW1lX2Zvcl9lbnVtX3ZhbHVlLnJlcGxhY2VDYWxsYmFjayk6CisgICAgICAgIChHZW5l
cmF0b3Iua2V5ZWRfZ2V0X21ldGhvZF9mb3JfdHlwZSk6CisgICAgICAgIChHZW5lcmF0b3Iua2V5
ZWRfc2V0X21ldGhvZF9mb3JfdHlwZSk6CisgICAgICAgIChHZW5lcmF0b3IudHlwZV9idWlsZGVy
X3N0cmluZ19mb3JfdHlwZSk6CisgICAgICAgIChHZW5lcmF0b3IudHlwZV9idWlsZGVyX3N0cmlu
Z19mb3JfdHlwZV9tZW1iZXIpOgorICAgICAgICAoR2VuZXJhdG9yLnR5cGVfc3RyaW5nX2Zvcl91
bmNoZWNrZWRfZm9ybWFsX2luX3BhcmFtZXRlcik6CisgICAgICAgIChHZW5lcmF0b3IudHlwZV9z
dHJpbmdfZm9yX2NoZWNrZWRfZm9ybWFsX2V2ZW50X3BhcmFtZXRlcik6CisgICAgICAgIChHZW5l
cmF0b3IudHlwZV9zdHJpbmdfZm9yX3R5cGVfbWVtYmVyKToKKyAgICAgICAgKEdlbmVyYXRvci50
eXBlX3N0cmluZ19mb3JfdHlwZV93aXRoX25hbWUpOgorICAgICAgICAoR2VuZXJhdG9yLnR5cGVf
c3RyaW5nX2Zvcl9mb3JtYWxfb3V0X3BhcmFtZXRlcik6CisgICAgICAgIChHZW5lcmF0b3IudHlw
ZV9zdHJpbmdfZm9yX2Zvcm1hbF9hc3luY19wYXJhbWV0ZXIpOgorICAgICAgICAoR2VuZXJhdG9y
LnR5cGVfc3RyaW5nX2Zvcl9zdGFja19pbl9wYXJhbWV0ZXIpOgorICAgICAgICAoR2VuZXJhdG9y
LnR5cGVfc3RyaW5nX2Zvcl9zdGFja19vdXRfcGFyYW1ldGVyKToKKyAgICAgICAgKEdlbmVyYXRv
ci5hc3NlcnRpb25fbWV0aG9kX2Zvcl90eXBlX21lbWJlcik6CisgICAgICAgIChHZW5lcmF0b3Iu
YXNzZXJ0aW9uX21ldGhvZF9mb3JfdHlwZV9tZW1iZXIuYXNzZXJ0aW9uX21ldGhvZF9mb3JfdHlw
ZSk6CisgICAgICAgIChHZW5lcmF0b3IuY3BwX25hbWVfZm9yX3ByaW1pdGl2ZV90eXBlKToKKyAg
ICAgICAgKEdlbmVyYXRvci5qc19uYW1lX2Zvcl9wYXJhbWV0ZXJfdHlwZSk6CisgICAgICAgIChH
ZW5lcmF0b3Iuc2hvdWxkX3VzZV93cmFwcGVyX2Zvcl9yZXR1cm5fdHlwZSk6CisgICAgICAgIChH
ZW5lcmF0b3Iuc2hvdWxkX3Bhc3NfYnlfY29weV9mb3JfcmV0dXJuX3R5cGUpOgorICAgICAgICAq
IGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdG9yX3RlbXBsYXRlcy5weTogQWRkZWQu
CisgICAgICAgIChHZW5lcmF0b3JUZW1wbGF0ZXMpOgorICAgICAgICAodm9pZCk6CisgICAgICAg
IChIYXNoTWFwKToKKyAgICAgICAgKEJ1aWxkZXIpOgorICAgICAgICAoSW5zcGVjdG9yKToKKyAg
ICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL21vZGVscy5weTogQWRkZWQuCisgICAg
ICAgICh1Y2ZpcnN0KToKKyAgICAgICAgKFBhcnNlRXhjZXB0aW9uKToKKyAgICAgICAgKFR5cGVj
aGVja0V4Y2VwdGlvbik6CisgICAgICAgIChGcmFtZXdvcmspOgorICAgICAgICAoRnJhbWV3b3Jr
Ll9faW5pdF9fKToKKyAgICAgICAgKEZyYW1ld29yay5zZXR0aW5nKToKKyAgICAgICAgKEZyYW1l
d29yay5mcm9tU3RyaW5nKToKKyAgICAgICAgKEZyYW1ld29ya3MpOgorICAgICAgICAoVHlwZVJl
ZmVyZW5jZSk6CisgICAgICAgIChUeXBlUmVmZXJlbmNlLl9faW5pdF9fKToKKyAgICAgICAgKFR5
cGVSZWZlcmVuY2UucmVmZXJlbmNlZF9uYW1lKToKKyAgICAgICAgKFR5cGUpOgorICAgICAgICAo
VHlwZS5fX2luaXRfXyk6CisgICAgICAgIChUeXBlLl9fZXFfXyk6CisgICAgICAgIChUeXBlLl9f
aGFzaF9fKToKKyAgICAgICAgKFR5cGUucmF3X25hbWUpOgorICAgICAgICAoVHlwZS5pc19lbnVt
KToKKyAgICAgICAgKFR5cGUudHlwZV9kb21haW4pOgorICAgICAgICAoVHlwZS5xdWFsaWZpZWRf
bmFtZSk6CisgICAgICAgIChUeXBlLnJlc29sdmVfdHlwZV9yZWZlcmVuY2VzKToKKyAgICAgICAg
KFByaW1pdGl2ZVR5cGUpOgorICAgICAgICAoUHJpbWl0aXZlVHlwZS5fX2luaXRfXyk6CisgICAg
ICAgIChQcmltaXRpdmVUeXBlLl9fcmVwcl9fKToKKyAgICAgICAgKFByaW1pdGl2ZVR5cGUudHlw
ZV9kb21haW4pOgorICAgICAgICAoUHJpbWl0aXZlVHlwZS5xdWFsaWZpZWRfbmFtZSk6CisgICAg
ICAgIChBbGlhc2VkVHlwZSk6CisgICAgICAgIChBbGlhc2VkVHlwZS5fX2luaXRfXyk6CisgICAg
ICAgIChBbGlhc2VkVHlwZS5fX3JlcHJfXyk6CisgICAgICAgIChBbGlhc2VkVHlwZS5pc19lbnVt
KToKKyAgICAgICAgKEFsaWFzZWRUeXBlLnR5cGVfZG9tYWluKToKKyAgICAgICAgKEFsaWFzZWRU
eXBlLnF1YWxpZmllZF9uYW1lKToKKyAgICAgICAgKEFsaWFzZWRUeXBlLnJlc29sdmVfdHlwZV9y
ZWZlcmVuY2VzKToKKyAgICAgICAgKEVudW1UeXBlKToKKyAgICAgICAgKEVudW1UeXBlLl9faW5p
dF9fKToKKyAgICAgICAgKEVudW1UeXBlLl9fcmVwcl9fKToKKyAgICAgICAgKEVudW1UeXBlLmlz
X2VudW0pOgorICAgICAgICAoRW51bVR5cGUudHlwZV9kb21haW4pOgorICAgICAgICAoRW51bVR5
cGUuZW51bV92YWx1ZXMpOgorICAgICAgICAoRW51bVR5cGUucXVhbGlmaWVkX25hbWUpOgorICAg
ICAgICAoRW51bVR5cGUucmVzb2x2ZV90eXBlX3JlZmVyZW5jZXMpOgorICAgICAgICAoQXJyYXlU
eXBlKToKKyAgICAgICAgKEFycmF5VHlwZS5fX2luaXRfXyk6CisgICAgICAgIChBcnJheVR5cGUu
X19yZXByX18pOgorICAgICAgICAoQXJyYXlUeXBlLnR5cGVfZG9tYWluKToKKyAgICAgICAgKEFy
cmF5VHlwZS5xdWFsaWZpZWRfbmFtZSk6CisgICAgICAgIChBcnJheVR5cGUucmVzb2x2ZV90eXBl
X3JlZmVyZW5jZXMpOgorICAgICAgICAoT2JqZWN0VHlwZSk6CisgICAgICAgIChPYmplY3RUeXBl
Ll9faW5pdF9fKToKKyAgICAgICAgKE9iamVjdFR5cGUuX19yZXByX18pOgorICAgICAgICAoT2Jq
ZWN0VHlwZS50eXBlX2RvbWFpbik6CisgICAgICAgIChPYmplY3RUeXBlLnF1YWxpZmllZF9uYW1l
KToKKyAgICAgICAgKGNoZWNrX2Zvcl9yZXF1aXJlZF9wcm9wZXJ0aWVzKToKKyAgICAgICAgKFBy
b3RvY29sKToKKyAgICAgICAgKFByb3RvY29sLl9faW5pdF9fKToKKyAgICAgICAgKFByb3RvY29s
LnBhcnNlX3NwZWNpZmljYXRpb24pOgorICAgICAgICAoUHJvdG9jb2wucGFyc2VfZG9tYWluKToK
KyAgICAgICAgKFByb3RvY29sLnBhcnNlX3R5cGVfZGVjbGFyYXRpb24pOgorICAgICAgICAoUHJv
dG9jb2wucGFyc2VfdHlwZV9tZW1iZXIpOgorICAgICAgICAoUHJvdG9jb2wucGFyc2VfY29tbWFu
ZCk6CisgICAgICAgIChQcm90b2NvbC5wYXJzZV9ldmVudCk6CisgICAgICAgIChQcm90b2NvbC5w
YXJzZV9jYWxsX29yX3JldHVybl9wYXJhbWV0ZXIpOgorICAgICAgICAoUHJvdG9jb2wucmVzb2x2
ZV90eXBlcyk6CisgICAgICAgIChQcm90b2NvbC5sb29rdXBfdHlwZV9mb3JfZGVjbGFyYXRpb24p
OgorICAgICAgICAoUHJvdG9jb2wubG9va3VwX3R5cGVfcmVmZXJlbmNlKToKKyAgICAgICAgKERv
bWFpbik6CisgICAgICAgIChEb21haW4uX19pbml0X18pOgorICAgICAgICAoRG9tYWluLnJlc29s
dmVfdHlwZV9yZWZlcmVuY2VzKToKKyAgICAgICAgKERvbWFpbnMpOgorICAgICAgICAoVHlwZURl
Y2xhcmF0aW9uKToKKyAgICAgICAgKFR5cGVEZWNsYXJhdGlvbi5fX2luaXRfXyk6CisgICAgICAg
IChUeXBlRGVjbGFyYXRpb24ucmVzb2x2ZV90eXBlX3JlZmVyZW5jZXMpOgorICAgICAgICAoVHlw
ZU1lbWJlcik6CisgICAgICAgIChUeXBlTWVtYmVyLl9faW5pdF9fKToKKyAgICAgICAgKFR5cGVN
ZW1iZXIucmVzb2x2ZV90eXBlX3JlZmVyZW5jZXMpOgorICAgICAgICAoUGFyYW1ldGVyKToKKyAg
ICAgICAgKFBhcmFtZXRlci5fX2luaXRfXyk6CisgICAgICAgIChQYXJhbWV0ZXIucmVzb2x2ZV90
eXBlX3JlZmVyZW5jZXMpOgorICAgICAgICAoQ29tbWFuZCk6CisgICAgICAgIChDb21tYW5kLl9f
aW5pdF9fKToKKyAgICAgICAgKENvbW1hbmQucmVzb2x2ZV90eXBlX3JlZmVyZW5jZXMpOgorICAg
ICAgICAoRXZlbnQpOgorICAgICAgICAoRXZlbnQuX19pbml0X18pOgorICAgICAgICAoRXZlbnQu
cmVzb2x2ZV90eXBlX3JlZmVyZW5jZXMpOgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weTogQWRkZWQuCisgICAgICAgIChJ
bmNyZW1lbnRhbEZpbGVXcml0ZXIpOgorICAgICAgICAoSW5jcmVtZW50YWxGaWxlV3JpdGVyLl9f
aW5pdF9fKToKKyAgICAgICAgKEluY3JlbWVudGFsRmlsZVdyaXRlci53cml0ZSk6CisgICAgICAg
IChJbmNyZW1lbnRhbEZpbGVXcml0ZXIuY2xvc2UpOgorICAgICAgICAoZ2VuZXJhdGVfZnJvbV9z
cGVjaWZpY2F0aW9uKToKKyAgICAgICAgKGdlbmVyYXRlX2Zyb21fc3BlY2lmaWNhdGlvbi5sb2Fk
X3NwZWNpZmljYXRpb24pOgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2NvbW1h
bmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb246IEFkZGVkLgorICAgICAgICAqIGluc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2NvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1l
dGVycy5qc29uOiBBZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9kb21h
aW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb246IEFkZGVkLgorICAgICAgICAqIGlu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNv
bjogQWRkZWQuCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvY29t
bWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbi1yZXN1bHQ6IEFkZGVkLgorICAgICAgICAq
IGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2NvbW1hbmRzLXdpdGgtb3B0aW9uYWwt
Y2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uLXJlc3VsdDogQWRkZWQuCisgICAgICAgICogaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFu
ZC1zaXplcy5qc29uLXJlc3VsdDogQWRkZWQuCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZXhwZWN0ZWQvZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uLXJlc3Vs
dDogQWRkZWQuCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1kdXBs
aWNhdGUtdHlwZS1kZWNsYXJhdGlvbnMuanNvbi1lcnJvcjogQWRkZWQuCisgICAgICAgICogaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1lbnVtLXdpdGgtbm8tdmFsdWVzLmpzb24tZXJy
b3I6IEFkZGVkLgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tdHlw
ZS1kZWNsYXJhdGlvbi11c2luZy10eXBlLXJlZmVyZW5jZS5qc29uLWVycm9yOiBBZGRlZC4KKyAg
ICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLXR5cGUtd2l0aC1sb3dlcmNh
c2UtbmFtZS5qc29uLWVycm9yOiBBZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1kZWNsYXJhdGlvbi5q
c29uLWVycm9yOiBBZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWls
LW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1tZW1iZXIuanNvbi1lcnJvcjogQWRk
ZWQuCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvc2FtZS10eXBl
LWlkLWRpZmZlcmVudC1kb21haW4uanNvbi1yZXN1bHQ6IEFkZGVkLgorICAgICAgICAqIGluc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmlt
aXRpdmUtdHlwZS5qc29uLXJlc3VsdDogQWRkZWQuCisgICAgICAgICogaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24tcmVzdWx0
OiBBZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBl
LWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uLXJlc3VsdDogQWRkZWQuCisgICAgICAgICogaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlw
ZS5qc29uLXJlc3VsdDogQWRkZWQuCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
ZXhwZWN0ZWQvdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uLXJlc3VsdDogQWRkZWQu
CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1kdXBsaWNhdGUtdHlw
ZS1kZWNsYXJhdGlvbnMuanNvbjogQWRkZWQuCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZmFpbC1vbi1lbnVtLXdpdGgtbm8tdmFsdWVzLmpzb246IEFkZGVkLgorICAgICAgICAq
IGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tdHlwZS1kZWNsYXJhdGlvbi11c2luZy10
eXBlLXJlZmVyZW5jZS5qc29uOiBBZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9mYWlsLW9uLXR5cGUtd2l0aC1sb3dlcmNhc2UtbmFtZS5qc29uOiBBZGRlZC4KKyAgICAg
ICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVu
Y2UtaW4tdHlwZS1kZWNsYXJhdGlvbi5qc29uOiBBZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1tZW1i
ZXIuanNvbjogQWRkZWQuCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvc2FtZS10
eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbjogQWRkZWQuCisgICAgICAgICogaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpz
b246IEFkZGVkLgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3R5cGUtZGVjbGFy
YXRpb24tYXJyYXktdHlwZS5qc29uOiBBZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy90eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uOiBBZGRlZC4KKyAgICAgICAg
KiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy90eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpz
b246IEFkZGVkLgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3R5cGUtcmVxdWly
aW5nLXJ1bnRpbWUtY2FzdHMuanNvbjogQWRkZWQuCisKKzIwMTQtMDgtMTEgIEJyaWFuIEouIEJ1
cmcgIDxidXJnQGNzLndhc2hpbmd0b24uZWR1PgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IHVz
ZSB0eXBlIGJ1aWxkZXJzIHRvIGNvbnN0cnVjdCBoaWdoIGZpZGVsaXR5IHR5cGUgaW5mb3JtYXRp
b24gcGF5bG9hZHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEzNTgwMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIER1ZSB0byBzb21lIHR5cG9zIGluIHRoZSBwcm90b2NvbCBmaWxlLCB0aGUgY29kZSBoYWQg
d29ya2VkIHdpdGggcmF3IG9iamVjdHMKKyAgICAgICAgcmF0aGVyIHRoYW4gd2l0aCB0eXBlIGJ1
aWxkZXJzLiBDb252ZXJ0IHRvIHVzaW5nIGJ1aWxkZXJzLgorCisgICAgICAgICogaW5zcGVjdG9y
L2FnZW50cy9JbnNwZWN0b3JSdW50aW1lQWdlbnQuY3BwOgorICAgICAgICAoSW5zcGVjdG9yOjpJ
bnNwZWN0b3JSdW50aW1lQWdlbnQ6OmdldFJ1bnRpbWVUeXBlc0ZvclZhcmlhYmxlc0F0T2Zmc2V0
cyk6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JSdW50aW1lQWdlbnQuaDoK
KyAgICAgICAgKiBpbnNwZWN0b3IvcHJvdG9jb2wvUnVudGltZS5qc29uOiBGaXggJ2l0ZW0nIGZv
ciAnaXRlbXMnOyB0cnVlIGZvciAndHJ1ZScuCisgICAgICAgICogcnVudGltZS9IaWdoRmlkZWxp
dHlUeXBlUHJvZmlsZXIuY3BwOgorICAgICAgICAoSlNDOjpIaWdoRmlkZWxpdHlUeXBlUHJvZmls
ZXI6OmdldFR5cGVzRm9yVmFyaWFibGVBdE9mZnNldEZvckluc3BlY3Rvcik6CisgICAgICAgICog
cnVudGltZS9IaWdoRmlkZWxpdHlUeXBlUHJvZmlsZXIuaDoKKyAgICAgICAgKiBydW50aW1lL1R5
cGVTZXQuY3BwOgorICAgICAgICAoSlNDOjpUeXBlU2V0OjphbGxTdHJ1Y3R1cmVSZXByZXNlbnRh
dGlvbnMpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTaGFwZTo6c3RyaW5nUmVwcmVzZW50YXRp
b24pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTaGFwZTo6aW5zcGVjdG9yUmVwcmVzZW50YXRp
b24pOgorICAgICAgICAqIHJ1bnRpbWUvVHlwZVNldC5oOgorCiAyMDE0LTA4LTEwICBPbGl2ZXIg
SHVudCAgPG9saXZlckBhcHBsZS5jb20+CiAKICAgICAgICAgRGVzdHJ1Y3R1cmluZyBhc3NpZ25t
ZW50IGluIGEgdmFyIGRlY2xhcmF0aW9uIGxpc3QgaW5jb3JyZWN0bHkgY29uc3VtZXMgc3Vic2Vx
dWVudCB2YXJpYWJsZSBpbml0aWFsaXNlcnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBkMTgxM2VkZDM2YWI5ZTc5
NDk3NzgzMGFjMjI0ZWJhY2M0N2U2ODY2Li42YTE2MWMyZjhkNWM5NDBhNzg0MjgxNmRlNDg1NjJj
MjdjYjJiNjFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODggQEAKKzIwMTQtMDgtMDkgIEJyaWFu
IEouIEJ1cmcgIDxidXJnQGNzLndhc2hpbmd0b24uZWR1PgorCisgICAgICAgIFdlYiBJbnNwZWN0
b3I6IHJld3JpdGUgQ29kZUdlbmVyYXRvckluc3BlY3RvciB0byBiZSBtb2R1bGFyIGFuZCB0ZXN0
YWJsZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMx
NTk2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQXNp
ZGUgZnJvbSBob29raW5nIHVwIHRoZSBuZXcgaW5zcGVjdG9yIGJpbmRpbmdzIGdlbmVyYXRvciB0
byB0aGUgYnVpbGQgc3lzdGVtLAorICAgICAgICB0aGVyZSBhcmUgYSBmZXcgY29taW5nbGVkIGNo
YW5nZXMgdGhhdCB3b3VsZCBiZSBwYWluZnVsIHRvIHNwbGl0IGZyb20gdGhlIG1haW4KKyAgICAg
ICAgcGF0Y2guIFRvZ2V0aGVyLCB0aGVzZSBjaGFuZ2VzIG1ha2UgaXQgcG9zc2libGUgdG8gZm9y
d2FyZC1kZWNsYXJlIGFsbCBwcm90b2NvbAorICAgICAgICBlbnVtZXJhdGlvbnMgYXMgc2NvcGVk
IGVudW1zLCByZWR1Y2luZyB3ZWlyZCBvcmRlcmluZyBkZXBlbmRlbmNpZXMgYmV0d2VlbiBkb21h
aW5zLgorCisgICAgICAgIEFsbCBydW50aW1lQ2FzdCgpIG1ldGhvZHMgYXJlIG5vdyBzdGF0aWMg
bWV0aG9kcyBvZiBCaW5kaW5nVHJhaXRzIHNwZWNpYWxpemF0aW9ucywKKyAgICAgICAgcmF0aGVy
IHRoYW4gYXMgc3RhdGljIG1ldGhvZHMgb2YgdGhlIHR5cGUgYnVpbGRlciBjbGFzc2VzLgorCisg
ICAgICAgIEFsbCBwcm90b2NvbCBlbnVtZXJhdGlvbiB0eXBlcyBhcmUgc2NvcGVkIGVudW1zIHJh
dGhlciB0aGFuIHN0cnVjdC1uYW1lc3BhY2VkIGVudW1zLgorCisgICAgICAgIFJlbW92ZSBzb21l
IGltcGxpY2l0IHByb3RvY29sIHR5cGUgYW5kIGVudW1lcmF0aW9uIGRlZmluaXRpb25zIGJlY2F1
c2UgdGhleSB0cmlnZ2VyCisgICAgICAgIGNvbXBpbGVyIGJ1Z3Mgb3IgaW50cm9kdWNlIHVubmVj
ZXNzYXJ5IGNvbXBsZXhpdHkgaW4gdGhlIGJpbmRpbmdzIGdlbmVyYXRvci4KKworICAgICAgICBO
byBuZXcgdGVzdHMsIG5vIGJlaGF2aW9yIGNoYW5nZWQuCisKKyAgICAgICAgKiBDTWFrZUxpc3Rz
LnR4dDoKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy5tYWtlOiBVcGRhdGUgc2NyaXB0IGRlcGVu
ZGVuY2llcyBhbmQgdGhlIGJpbmRpbmdzIGdlbmVyYXRvciBzY3JpcHQgbmFtZS4KKworICAgICAg
ICAqIGluc3BlY3Rvci9Db21tYW5kTGluZUFQSUhvc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Q29tbWFuZExpbmVBUElIb3N0OjppbnNwZWN0SW1wbCk6IENvbnZlcnQgdG8gQmluZGluZ1RyYWl0
cy4KKworICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6ZGV0ZWN0T3JpZ2luKToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvckNTU0FnZW50OjpidWlsZEFycmF5Rm9yUmVnaW9ucyk6CisgICAgICAg
ICogaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL0lu
c3BlY3RvckRPTUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50
OjpidWlsZE9iamVjdEZvckFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzKToKKyAgICAgICAgKiBpbnNw
ZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
clBhZ2VBZ2VudDo6cmVzb3VyY2VUeXBlSnNvbik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JQYWdlQWdlbnQ6OmNhY2hlZFJlc291cmNlVHlwZUpzb24pOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yUGFnZUFnZW50OjpnZXRTY3JpcHRFeGVjdXRpb25TdGF0dXMpOiBDb252ZXJ0IHRv
IHNjb3BlZCBlbnVtcy4KKworICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUGFnZUFnZW50Ojpi
dWlsZE9iamVjdEZvckZyYW1lVHJlZSk6IEV4dHJhY3QgRnJhbWVSZXNvdXJjZVRyZWU6OlJlc291
cmNlcworICAgICAgICBpbnRvIGl0cyBvd24gZXhwbGljaXRseS1kZWZpbmVkIG9iamVjdCB0eXBl
LiBUaGUgbmV3IGdlbmVyYXRvciBkb2VzIG5vdCBzdXBwb3J0IGltcGxpY2l0bHkKKyAgICAgICAg
ZGVmaW5pbmcgb2JqZWN0IHR5cGVzIGFzIGVsZW1lbnRzIG9mIGFycmF5cy4KKyAgICAgICAgKiBp
bnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL0luc3Bl
Y3RvclJlcGxheUFnZW50LmNwcDogRGlzYW1iaWd1YXRlIGJldHdlZW4gaW50ZXJuYWwgYW5kIHBy
b3RvY29sIHR5cGVzLgorICAgICAgICAoV2ViQ29yZTo6YnVpbGRJbnNwZWN0b3JPYmplY3RGb3JT
ZXNzaW9uU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6YnVpbGRJbnNwZWN0b3JPYmplY3RGb3JT
ZWdtZW50U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUmVwbGF5QWdlbnQ6OnNl
c3Npb25TdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JSZXBsYXlBZ2VudDo6ZGlk
Q3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclJl
cGxheUFnZW50OjpmcmFtZU5hdmlnYXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JS
ZXBsYXlBZ2VudDo6ZnJhbWVEZXRhY2hlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JS
ZXBsYXlBZ2VudDo6d2lsbERpc3BhdGNoRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yUmVwbGF5QWdlbnQ6OnN0YXJ0Q2FwdHVyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvclJlcGxheUFnZW50OjpzdG9wQ2FwdHVyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvclJlcGxheUFnZW50OjpyZXBsYXlUb1Bvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvclJlcGxheUFnZW50OjpyZXBsYXlUb0NvbXBsZXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yUmVwbGF5QWdlbnQ6OnBhdXNlUGxheWJhY2spOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yUmVwbGF5QWdlbnQ6OmNhbmNlbFBsYXliYWNrKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvclJlcGxheUFnZW50Ojpzd2l0Y2hTZXNzaW9uKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvclJlcGxheUFnZW50OjppbnNlcnRTZXNzaW9uU2VnbWVudCk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JSZXBsYXlBZ2VudDo6cmVtb3ZlU2Vzc2lvblNlZ21lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUmVwbGF5QWdlbnQ6OmN1cnJlbnRSZXBsYXlTdGF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JSZXBsYXlBZ2VudDo6Z2V0QXZhaWxhYmxl
U2Vzc2lvbnMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUmVwbGF5QWdlbnQ6OmdldFNl
c3Npb25EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclJlcGxheUFnZW50OjpnZXRT
ZWdtZW50RGF0YSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclJlcGxheUFnZW50Lmg6
CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlQWdlbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6d2lsbFNlbmRSZXF1ZXN0KToKKyAg
ICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHA6IENvbnZlcnQgdG8gc2Nv
cGVkIGVudW1zLiBFeHRyYWN0IENTU1Byb3BlcnR5OjpTdGF0dXMKKyAgICAgICAgYmVjYXVzZSBz
Y29wZWQgZW51bXMgZGVmaW5lZCBpbiBhIGNsYXNzIHNjb3BlIHRyaWdnZXIgY29tcGlsZXIgYnVn
cyBpbiBHQ0MgNC44LgorICAgICAgICAoV2ViQ29yZTo6YnVpbGRNZWRpYU9iamVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZTo6c3R5bGVXaXRoUHJvcGVydGllcyk6IFdvcmsg
YXJvdW5kIGNvbXBpbGVyIGRpc2FncmVlbWVudHMuCisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JTdHlsZVNoZWV0OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGVT
aGVldDo6SW5zcGVjdG9yU3R5bGVTaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JT
dHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU6Okluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxp
bmVTdHlsZSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuaDoKKwor
ICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JUaW1lbGluZUFnZW50LmNwcDogQ29udmVydCB0
byBzY29wZWQgZW51bXMgYW5kIEJpbmRpbmdUcmFpdHMuCisgICAgICAgIChXZWJDb3JlOjp0b1By
b3RvY29sKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OmFkZFJl
Y29yZFRvVGltZWxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yVGltZWxpbmVBZ2Vu
dDo6c2VuZEV2ZW50KToKKworICAgICAgICAqIGluc3BlY3Rvci9wcm90b2NvbC9DU1MuanNvbjog
RXh0cmFjdCBDU1NQcm9wZXJ0eTo6U3RhdHVzLgorICAgICAgICAqIGluc3BlY3Rvci9wcm90b2Nv
bC9QYWdlLmpzb246IEV4dHJhY3QgRnJhbWVSZXNvdXJjZVRyZWU6OlJlc291cmNlcy4KKwogMjAx
NC0wOC0xMSAgQ29tbWl0IFF1ZXVlICA8Y29tbWl0LXF1ZXVlQHdlYmtpdC5vcmc+CiAKICAgICAg
ICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjE3MjM5My4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvQ2hhbmdlTG9n
CmluZGV4IGQyMmFkNTk5OWVhMTdmMzhiNWM2ZGY0MjU0OTNmYTg0MDZhMzdmMDcuLjdkZjAwYmZk
YjkyNDYyMDdkNmYyOGY5NTg0NWYxNjZhZThjOTljMDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJ
bnNwZWN0b3JVSS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDE1IEBACisyMDE0LTA4LTA5ICBCcmlhbiBKLiBCdXJnICA8YnVyZ0Bjcy53
YXNoaW5ndG9uLmVkdT4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiByZXdyaXRlIENvZGVHZW5l
cmF0b3JJbnNwZWN0b3IgdG8gYmUgbW9kdWxhciBhbmQgdGVzdGFibGUKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMTU5NgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFsc28gYXBwbHkgdHlwZSBleHRyYWN0
aW9uIHJlZmFjdG9yaW5ncyB0byBvbGQgcHJvdG9jb2wgdmVyc2lvbnMgZm9yIGNvbnNpc3RlbmN5
LgorCisgICAgICAgICogVmVyc2lvbnMvSW5zcGVjdG9yLWlPUy02LjAuanNvbjoKKyAgICAgICAg
KiBWZXJzaW9ucy9JbnNwZWN0b3ItaU9TLTcuMC5qc29uOgorCiAyMDE0LTA4LTEwICBUaW1vdGh5
IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBu
ZXcgZ2x5cGhzIGFyZSB2aXNpYmxlIG9uIE9TIFggMTAuOSBidWlsZHMKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9DTWFrZUxpc3RzLnR4dAppbmRleCA1NzFmMTM4MjZhY2VmZDRhNzc4Mzk2OWZkZjFkZjI5ZTdi
NTc3ZDAwLi42NzQ1MjFlMDAzOGU0NjdlNGEzMzE1N2M1MWJlOGNkMjVlZmJmYjhkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC04OTcsNiArODk3LDIxIEBAIEFERF9TT1VS
Q0VfREVQRU5ERU5DSUVTKCR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9wYXJzZXIvTGV4ZXIu
Y3BwICR7REVSSVZFRF9TCiAKIHNldChKYXZhU2NyaXB0Q29yZV9JTlNQRUNUT1JfU0NSSVBUU19E
SVIgIiR7SkFWQVNDUklQVENPUkVfRElSfS9pbnNwZWN0b3Ivc2NyaXB0cyIpCiAKK3NldChKYXZh
U2NyaXB0Q29yZV9JTlNQRUNUT1JfUFJPVE9DT0xfU0NSSVBUUworICAgICR7SmF2YVNjcmlwdENv
cmVfSU5TUEVDVE9SX1NDUklQVFNfRElSfS9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKKyAgICAke0phdmFTY3JpcHRDb3JlX0lOU1BFQ1RPUl9TQ1JJUFRTX0RJUn0vY29k
ZWdlbi9nZW5lcmF0ZV9iYWNrZW5kX2NvbW1hbmRzLnB5CisgICAgJHtKYXZhU2NyaXB0Q29yZV9J
TlNQRUNUT1JfU0NSSVBUU19ESVJ9L2NvZGVnZW4vZ2VuZXJhdGVfYmFja2VuZF9kaXNwYXRjaGVy
X2hlYWRlci5weQorICAgICR7SmF2YVNjcmlwdENvcmVfSU5TUEVDVE9SX1NDUklQVFNfRElSfS9j
b2RlZ2VuL2dlbmVyYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQorICAg
ICR7SmF2YVNjcmlwdENvcmVfSU5TUEVDVE9SX1NDUklQVFNfRElSfS9jb2RlZ2VuL2dlbmVyYXRl
X2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5CisgICAgJHtKYXZhU2NyaXB0Q29yZV9JTlNQ
RUNUT1JfU0NSSVBUU19ESVJ9L2NvZGVnZW4vZ2VuZXJhdGVfZnJvbnRlbmRfZGlzcGF0Y2hlcl9p
bXBsZW1lbnRhdGlvbi5weQorICAgICR7SmF2YVNjcmlwdENvcmVfSU5TUEVDVE9SX1NDUklQVFNf
RElSfS9jb2RlZ2VuL2dlbmVyYXRlX3R5cGVfYnVpbGRlcl9oZWFkZXIucHkKKyAgICAke0phdmFT
Y3JpcHRDb3JlX0lOU1BFQ1RPUl9TQ1JJUFRTX0RJUn0vY29kZWdlbi9nZW5lcmF0ZV90eXBlX2J1
aWxkZXJfaW1wbGVtZW50YXRpb24ucHkKKyAgICAke0phdmFTY3JpcHRDb3JlX0lOU1BFQ1RPUl9T
Q1JJUFRTX0RJUn0vY29kZWdlbi9nZW5lcmF0b3IucHkKKyAgICAke0phdmFTY3JpcHRDb3JlX0lO
U1BFQ1RPUl9TQ1JJUFRTX0RJUn0vY29kZWdlbi9nZW5lcmF0b3JfdGVtcGxhdGVzLnB5CisgICAg
JHtKYXZhU2NyaXB0Q29yZV9JTlNQRUNUT1JfU0NSSVBUU19ESVJ9L2NvZGVnZW4vX19pbml0X18u
cHkKKyAgICAke0phdmFTY3JpcHRDb3JlX0lOU1BFQ1RPUl9TQ1JJUFRTX0RJUn0vY29kZWdlbi9t
b2RlbHMucHkKKykKKwogc2V0KEphdmFTY3JpcHRDb3JlX0lOU1BFQ1RPUl9ET01BSU5TCiAgICAg
JHtKQVZBU0NSSVBUQ09SRV9ESVJ9L2luc3BlY3Rvci9wcm90b2NvbC9Db25zb2xlLmpzb24KICAg
ICAke0pBVkFTQ1JJUFRDT1JFX0RJUn0vaW5zcGVjdG9yL3Byb3RvY29sL0RlYnVnZ2VyLmpzb24K
QEAgLTkyNSw3ICs5NDAsNyBAQCBhZGRfY3VzdG9tX2NvbW1hbmQoCiAgICAgTUFJTl9ERVBFTkRF
TkNZICR7REVSSVZFRF9TT1VSQ0VTX0pBVkFTQ1JJUFRDT1JFX0RJUn0vSW5zcGVjdG9ySlMuanNv
bgogICAgIERFUEVORFMgJHtKYXZhU2NyaXB0Q29yZV9JTlNQRUNUT1JfU0NSSVBUU19ESVJ9L0Nv
ZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKICAgICAgICAgICAgICR7SmF2YVNjcmlwdENvcmVfSU5T
UEVDVE9SX1NDUklQVFNfRElSfS9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yU3RyaW5ncy5weQotICAg
IENPTU1BTkQgJHtQWVRIT05fRVhFQ1VUQUJMRX0gJHtKYXZhU2NyaXB0Q29yZV9JTlNQRUNUT1Jf
U0NSSVBUU19ESVJ9L0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkgJHtERVJJVkVEX1NPVVJDRVNf
SkFWQVNDUklQVENPUkVfRElSfS9JbnNwZWN0b3JKUy5qc29uIC0tb3V0cHV0X2hfZGlyICIke0RF
UklWRURfU09VUkNFU19KQVZBU0NSSVBUQ09SRV9ESVJ9L2luc3BlY3RvciIgLS1vdXRwdXRfY3Bw
X2RpciAiJHtERVJJVkVEX1NPVVJDRVNfSkFWQVNDUklQVENPUkVfRElSfS9pbnNwZWN0b3IiIC0t
b3V0cHV0X2pzX2RpciAiJHtERVJJVkVEX1NPVVJDRVNfV0VCSU5TUEVDVE9SVUlfRElSfS9Vc2Vy
SW50ZXJmYWNlL1Byb3RvY29sIiAtLW91dHB1dF90eXBlIEphdmFTY3JpcHQgLS13cml0ZV9hbHdh
eXMKKyAgICBDT01NQU5EICR7UFlUSE9OX0VYRUNVVEFCTEV9ICR7SmF2YVNjcmlwdENvcmVfSU5T
UEVDVE9SX1NDUklQVFNfRElSfS9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkgLS1vdXRwdXREaXIgIiR7REVSSVZFRF9TT1VSQ0VTX0pBVkFTQ1JJUFRDT1JFX0RJUn0iIC0t
ZnJhbWV3b3JrIEphdmFTY3JpcHRDb3JlICR7REVSSVZFRF9TT1VSQ0VTX0pBVkFTQ1JJUFRDT1JF
X0RJUn0vSW5zcGVjdG9ySlMuanNvbiAmJiBta2RpciAtcCAke0RFUklWRURfU09VUkNFU19KQVZB
U0NSSVBUQ09SRV9ESVJ9L2luc3BlY3RvciAmJiBjcCAke0RFUklWRURfU09VUkNFU19KQVZBU0NS
SVBUQ09SRV9ESVJ9L0luc3BlY3RvckpTQmFja2VuZERpc3BhdGNoZXJzLmggJHtERVJJVkVEX1NP
VVJDRVNfSkFWQVNDUklQVENPUkVfRElSfS9JbnNwZWN0b3JKU0Zyb250ZW5kRGlzcGF0Y2hlcnMu
aCAke0RFUklWRURfU09VUkNFU19KQVZBU0NSSVBUQ09SRV9ESVJ9L0luc3BlY3RvckpTVHlwZUJ1
aWxkZXJzLmggJHtERVJJVkVEX1NPVVJDRVNfSkFWQVNDUklQVENPUkVfRElSfS9pbnNwZWN0b3Ig
JiYgbWtkaXIgLXAgJHtERVJJVkVEX1NPVVJDRVNfV0VCSU5TUEVDVE9SVUlfRElSfS9Vc2VySW50
ZXJmYWNlL1Byb3RvY29sICYmIGNwICR7REVSSVZFRF9TT1VSQ0VTX0pBVkFTQ1JJUFRDT1JFX0RJ
Un0vSW5zcGVjdG9ySlNCYWNrZW5kQ29tbWFuZHMuanMgJHtERVJJVkVEX1NPVVJDRVNfV0VCSU5T
UEVDVE9SVUlfRElSfS9Vc2VySW50ZXJmYWNlL1Byb3RvY29sCiAgICAgVkVSQkFUSU0pCiBmaWxl
KE1BS0VfRElSRUNUT1JZICR7REVSSVZFRF9TT1VSQ0VTX0pBVkFTQ1JJUFRDT1JFX0RJUn0vaW5z
cGVjdG9yKQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJj
ZXMubWFrZSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlCmluZGV4
IGNjMzA3ZDdlNzQ3OWI5YmY5MGE4YTNlZmJmMTNjOTg3M2EzODgzYjguLmQzM2M5NTE4ZmMyOTI4
MWM0NGIwNzI4ZWExODRhNjYxYTg0Yzk2NGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJp
dmVkU291cmNlcy5tYWtlCkBAIC0xMjIsOCArMTIyLDE5IEBAIElOU1BFQ1RPUl9ET01BSU5TID0g
XAogIwogCiBJTlNQRUNUT1JfR0VORVJBVE9SX1NDUklQVFMgPSBcCi0JJChKYXZhU2NyaXB0Q29y
ZSkvaW5zcGVjdG9yL3NjcmlwdHMvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weSBcCi0JJChKYXZh
U2NyaXB0Q29yZSkvaW5zcGVjdG9yL3NjcmlwdHMvQ29kZUdlbmVyYXRvckluc3BlY3RvclN0cmlu
Z3MucHkgXAorCSQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vX19p
bml0X18ucHkgXAorCSQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4v
Z2VuZXJhdGVfYmFja2VuZF9jb21tYW5kcy5weSBcCisJJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVj
dG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5
IFwKKwkkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRl
X2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSBcCisJJChKYXZhU2NyaXB0Q29y
ZSkvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9mcm9udGVuZF9kaXNwYXRjaGVy
X2hlYWRlci5weSBcCisJJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdl
bi9nZW5lcmF0ZV9mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5IFwKKwkkKEph
dmFTY3JpcHRDb3JlKS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX3R5cGVfYnVp
bGRlcl9oZWFkZXIucHkgXAorCSQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9zY3JpcHRzL2Nv
ZGVnZW4vZ2VuZXJhdGVfdHlwZV9idWlsZGVyX2ltcGxlbWVudGF0aW9uLnB5IFwKKwkkKEphdmFT
Y3JpcHRDb3JlKS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRvcl90ZW1wbGF0ZXMu
cHkgXAorCSQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJh
dG9yLnB5IFwKKwkkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL21v
ZGVscy5weSBcCisJJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUt
Y29tYmluZWQtaW5zcGVjdG9yLWpzb24ucHkgXAorCSQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rv
ci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weSBcCiAjCiAK
IGFsbCA6IFwKQEAgLTE0NCw3ICsxNTUsNyBAQCBJbnNwZWN0b3JKUy5qc29uIDogaW5zcGVjdG9y
L3NjcmlwdHMvZ2VuZXJhdGUtY29tYmluZWQtaW5zcGVjdG9yLWpzb24ucHkgJChJTlNQRQogCiAj
IEluc3BlY3RvciBCYWNrZW5kIERpc3BhdGNoZXJzLCBGcm9udGVuZCBEaXNwYXRjaGVycywgVHlw
ZSBCdWlsZGVycwogSW5zcGVjdG9ySlNGcm9udGVuZERpc3BhdGNoZXJzLmggOiBJbnNwZWN0b3JK
Uy5qc29uICQoSU5TUEVDVE9SX0dFTkVSQVRPUl9TQ1JJUFRTKQotCSQoUFlUSE9OKSAkKEphdmFT
Y3JpcHRDb3JlKS9pbnNwZWN0b3Ivc2NyaXB0cy9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5IC4v
SW5zcGVjdG9ySlMuanNvbiAtLW91dHB1dF9oX2RpciAuIC0tb3V0cHV0X2NwcF9kaXIgLiAtLW91
dHB1dF9qc19kaXIgLiAtLW91dHB1dF90eXBlIEphdmFTY3JpcHQKKwkkKFBZVEhPTikgJChKYXZh
U2NyaXB0Q29yZSkvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5IC0tZnJhbWV3b3JrIEphdmFTY3JpcHRDb3JlIC0tb3V0cHV0RGlyIC4gLi9J
bnNwZWN0b3JKUy5qc29uCiAKIEluamVjdGVkU2NyaXB0U291cmNlLmggOiBpbnNwZWN0b3IvSW5q
ZWN0ZWRTY3JpcHRTb3VyY2UuanMgJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3NjcmlwdHMv
anNtaW4ucHkgJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3NjcmlwdHMveHhkLnBsCiAJZWNo
byAiLy8jIHNvdXJjZVVSTD1fX1dlYkluc3BlY3RvckluamVjdGVkU2NyaXB0X18iID4gLi9Jbmpl
Y3RlZFNjcmlwdFNvdXJjZS5taW4uanMKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL2NvcHktZmlsZXMuY21kIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovY29weS1maWxlcy5jbWQKaW5kZXggNTM1ZTI3
YjNhMTllMDY3NmUxMTRkNjU0MDIwZGM2Y2JkY2E0MjM1Ni4uYTk4MGNlMTg2ODY5YjEyYWExMzE3
ODUxMmZlZDM1NTBkNWE2ZjRhZCAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnZjeHByb2ovY29weS1maWxlcy5jbWQKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovY29weS1maWxlcy5jbWQKQEAgLTY0LDYgKzY0
LDcgQEAgZm9yICUlZCBpbiAoCiBlY2hvIENvcHlpbmcgSW5zcGVjdG9yIHNjcmlwdHMgYXMgaWYg
dGhleSB3ZXJlIHByaXZhdGUgaGVhZGVycy4uLg0KIGZvciAlJWQgaW4gKA0KICAgICBpbnNwZWN0
b3Jcc2NyaXB0cw0KKwlpbnNwZWN0b3Jcc2NyaXB0c1xjb2RlZ2VuDQogKSBkbyAoDQogICAgIHhj
b3B5IC95IC9kIC4uXCUlZFwqICIlUHJpdmF0ZUhlYWRlcnNEaXJlY3RvcnklIiA+TlVMDQogKQ0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZTg4ZjY5Y2YwY2ZkMGRkYzZmMGRlOGM5
NTA1MmU1YWUxNDFmZmQxZS4uMmUxNjIzM2U1N2JiMGY4NGYzNTJjZDJiZTFiZWYxM2Q2ODBhZmFk
MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTE2MzUsOCArMTYzNSw2IEBACiAJ
CUE1MzI0MzhBMTg1NjgzMzUwMDJFRDY5MiAvKiBJbnNwZWN0b3JKU0Zyb250ZW5kRGlzcGF0Y2hl
cnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1MzI0
Mzg0MTg1NjgzMTcwMDJFRDY5MiAvKiBJbnNwZWN0b3JKU0Zyb250ZW5kRGlzcGF0Y2hlcnMuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBNTMyNDM4
QjE4NTY4MzM1MDAyRUQ2OTIgLyogSW5zcGVjdG9ySlNUeXBlQnVpbGRlcnMuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTUzMjQzODUxODU2ODMxNzAw
MkVENjkyIC8qIEluc3BlY3RvckpTVHlwZUJ1aWxkZXJzLmNwcCAqLzsgfTsKIAkJQTUzMjQzOEMx
ODU2ODMzNTAwMkVENjkyIC8qIEluc3BlY3RvckpTVHlwZUJ1aWxkZXJzLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNTMyNDM4NjE4NTY4MzE3MDAyRUQ2
OTIgLyogSW5zcGVjdG9ySlNUeXBlQnVpbGRlcnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlBNTMyNDM5MjE4NTY5NzA5MDAyRUQ2OTIgLyogQ29k
ZUdlbmVyYXRvckluc3BlY3Rvci5weSBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEE1MzI0MzhGMTg1Njk2RTYwMDJFRDY5MiAvKiBDb2RlR2VuZXJhdG9ySW5z
cGVjdG9yLnB5ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
Ci0JCUE1MzI0MzkzMTg1Njk3MDkwMDJFRDY5MiAvKiBDb2RlR2VuZXJhdG9ySW5zcGVjdG9yU3Ry
aW5ncy5weSBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1
MzI0MzkwMTg1Njk2RTYwMDJFRDY5MiAvKiBDb2RlR2VuZXJhdG9ySW5zcGVjdG9yU3RyaW5ncy5w
eSAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBNTMy
NDM5NDE4NTY5NzA5MDAyRUQ2OTIgLyogZ2VuZXJhdGUtY29tYmluZWQtaW5zcGVjdG9yLWpzb24u
cHkgaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNTMyNDM5
MTE4NTY5NkU2MDAyRUQ2OTIgLyogZ2VuZXJhdGUtY29tYmluZWQtaW5zcGVjdG9yLWpzb24ucHkg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTUzMjQz
OTgxODU2QTQ4OTAwMkVENjkyIC8qIEluc3BlY3RvckpTLmpzb24gaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNTMyNDM5NTE4NTZBNDc1MDAyRUQ2OTIgLyog
SW5zcGVjdG9ySlMuanNvbiAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQlBNTNDRTA4NTE4QkMxQTU2MDBCRURGNzYgLyogQ29uc29sZVByb3RvdHlwZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNTNDRTA4
MTE4QkMxQTU2MDBCRURGNzYgLyogQ29uc29sZVByb3RvdHlwZS5jcHAgKi87IH07CkBAIC0yMDYy
LDYgKzIwNjAsMTcgQEAKIAkJQzJGQ0FFMTIxN0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2RlTGl2
ZW5lc3NBbmFseXNpcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBDMkZDQUUwRTE3QTlDMjRFMDAzNEM3MzUgLyogQnl0ZWNvZGVMaXZlbmVzc0FuYWx5
c2lzLmNwcCAqLzsgfTsKIAkJQzJGQ0FFMTMxN0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2RlTGl2
ZW5lc3NBbmFseXNpcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQzJGQ0FFMEYxN0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNp
cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUMy
RkUxOEE0MTZCQUVDNDAwMEFGMzA2MSAvKiBTdHJ1Y3R1cmVSYXJlRGF0YS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzJGRTE4QTMxNkJBRUM0MDAwQUYz
MDYxIC8qIFN0cnVjdHVyZVJhcmVEYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJQzQ3MDNDQzAxOTI4NDQ5NjAwMTNGQkVBIC8qIGdlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weSBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM0NzAzQ0JGMTkyODQ0OTYwMDEzRkJFQSAvKiBnZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkgKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQzQ3MDNDQ0UxOTI4NDRDQzAwMTNGQkVBIC8qIGdl
bmVyYXRlX2JhY2tlbmRfY29tbWFuZHMucHkgaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBDNDcwM0NDMzE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJhdGVfYmFj
a2VuZF9jb21tYW5kcy5weSAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OworCQlDNDcwM0NDRjE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJhdGVfYmFja2VuZF9k
aXNwYXRjaGVyX2hlYWRlci5weSBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEM0NzAzQ0M0MTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0ZV9iYWNrZW5kX2Rp
c3BhdGNoZXJfaGVhZGVyLnB5ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCUM0NzAzQ0QwMTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0ZV9iYWNrZW5k
X2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkgaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBDNDcwM0NDNTE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJhdGVf
YmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5ICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUM0NzAzQ0QxMTkyODQ0Q0MwMDEzRkJFQSAv
KiBnZW5lcmF0ZV9mcm9udGVuZF9kaXNwYXRjaGVyX2hlYWRlci5weSBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM0NzAzQ0M2MTkyODQ0Q0MwMDEzRkJFQSAv
KiBnZW5lcmF0ZV9mcm9udGVuZF9kaXNwYXRjaGVyX2hlYWRlci5weSAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlDNDcwM0NEMjE5Mjg0NENDMDAxM0ZC
RUEgLyogZ2VuZXJhdGVfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM0NzAzQ0M3MTkyODQ0
Q0MwMDEzRkJFQSAvKiBnZW5lcmF0ZV9mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9u
LnB5ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUM0
NzAzQ0QzMTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0ZV90eXBlX2J1aWxkZXJfaGVhZGVyLnB5
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzQ3MDNDQzgx
OTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRlX3R5cGVfYnVpbGRlcl9oZWFkZXIucHkgKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQzQ3MDNDRDQxOTI4
NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRlX3R5cGVfYnVpbGRlcl9pbXBsZW1lbnRhdGlvbi5weSBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM0NzAzQ0M5MTky
ODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0ZV90eXBlX2J1aWxkZXJfaW1wbGVtZW50YXRpb24ucHkg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQzQ3MDND
RDUxOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRvcl90ZW1wbGF0ZXMucHkgaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNDcwM0NDQTE5Mjg0NENDMDAxM0ZC
RUEgLyogZ2VuZXJhdG9yX3RlbXBsYXRlcy5weSAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OworCQlDNDcwM0NENjE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJh
dG9yLnB5IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzQ3
MDNDQ0IxOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRvci5weSAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlDNDcwM0NENzE5Mjg0NENDMDAxM0ZCRUEg
LyogbW9kZWxzLnB5IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQzQ3MDNDQ0MxOTI4NDRDQzAwMTNGQkVBIC8qIG1vZGVscy5weSAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFMTI0QThGNzBFNTU1Nzc1MDAzMDkx
RjEgLyogT3BhcXVlSlNTdHJpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEUxMjRBOEY1MEU1NTU3NzUwMDMwOTFGMSAvKiBPcGFxdWVKU1N0cmluZy5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUUxMjRB
OEY4MEU1NTU3NzUwMDMwOTFGMSAvKiBPcGFxdWVKU1N0cmluZy5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTI0QThGNjBFNTU1Nzc1MDAzMDkxRjEg
LyogT3BhcXVlSlNTdHJpbmcuY3BwICovOyB9OwogCQlFMThFM0E1OTBERjkyNzhDMDBEOTBCMzQg
LyogVk0uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RTE4RTNBNTcwREY5Mjc4QzAwRDkwQjM0IC8qIFZNLmNwcCAqLzsgfTsKQEAgLTMzMTIsOCArMzMy
MSw2IEBACiAJCUE1MzI0Mzg1MTg1NjgzMTcwMDJFRDY5MiAvKiBJbnNwZWN0b3JKU1R5cGVCdWls
ZGVycy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbnNwZWN0b3JKU1R5cGVCdWlsZGVycy5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE1MzI0Mzg2MTg1NjgzMTcwMDJFRDY5MiAv
KiBJbnNwZWN0b3JKU1R5cGVCdWlsZGVycy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnNwZWN0b3JKU1R5
cGVCdWlsZGVycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNTMyNDM4RDE4NTY5
NkNBMDAyRUQ2OTIgLyogcHJvdG9jb2wgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBmb2xkZXI7IHBhdGggPSBwcm90b2NvbDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJQTUzMjQzOEYxODU2OTZFNjAwMkVENjkyIC8qIENvZGVHZW5lcmF0b3JJ
bnNwZWN0b3IucHkgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnNjcmlwdC5weXRob247IHBhdGggPSBDb2RlR2Vu
ZXJhdG9ySW5zcGVjdG9yLnB5OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBNTMyNDM5
MDE4NTY5NkU2MDAyRUQ2OTIgLyogQ29kZUdlbmVyYXRvckluc3BlY3RvclN0cmluZ3MucHkgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSB0ZXh0LnNjcmlwdC5weXRob247IHBhdGggPSBDb2RlR2VuZXJhdG9ySW5zcGVjdG9y
U3RyaW5ncy5weTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTUzMjQzOTExODU2OTZF
NjAwMkVENjkyIC8qIGdlbmVyYXRlLWNvbWJpbmVkLWluc3BlY3Rvci1qc29uLnB5ICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gdGV4dC5zY3JpcHQucHl0aG9uOyBwYXRoID0gImdlbmVyYXRlLWNvbWJpbmVkLWluc3BlY3Rv
ci1qc29uLnB5Ijsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTUzMjQzOTUxODU2QTQ3
NTAwMkVENjkyIC8qIEluc3BlY3RvckpTLmpzb24gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lmpzb247IHBhdGgg
PSBJbnNwZWN0b3JKUy5qc29uOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNTMyNDM5
NjE4NTZBNDc1MDAyRUQ2OTIgLyogSW5zcGVjdG9ySlNCYWNrZW5kQ29tbWFuZHMuanMgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7IHBhdGggPSBJbnNwZWN0b3JKU0JhY2tlbmRDb21t
YW5kcy5qczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM3MjksNiArMzczNiwxOCBA
QAogCQlDMkZDQUUwRTE3QTlDMjRFMDAzNEM3MzUgLyogQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lz
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJ5dGVjb2RlTGl2ZW5l
c3NBbmFseXNpcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyRkNBRTBGMTdB
OUMyNEUwMDM0QzczNSAvKiBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyRkUxOEEzMTZCQUVDNDAwMEFGMzA2MSAvKiBTdHJ1Y3R1
cmVSYXJlRGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHJ1Y3R1cmVS
YXJlRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDNDcwM0NCRjE5Mjg0NDk2
MDAxM0ZCRUEgLyogZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5ICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gdGV4dC5zY3JpcHQucHl0aG9uOyBwYXRoID0gImdlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weSI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUM0NzAzQ0My
MTkyODQ0Q0MwMDEzRkJFQSAvKiBfX2luaXRfXy5weSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuc2NyaXB0LnB5
dGhvbjsgbmFtZSA9IF9faW5pdF9fLnB5OyBwYXRoID0gX19pbml0X18ucHk7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUM0NzAzQ0MzMTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0ZV9i
YWNrZW5kX2NvbW1hbmRzLnB5ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5zY3JpcHQucHl0aG9uOyBuYW1lID0g
Z2VuZXJhdGVfYmFja2VuZF9jb21tYW5kcy5weTsgcGF0aCA9IGdlbmVyYXRlX2JhY2tlbmRfY29t
bWFuZHMucHk7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUM0NzAzQ0M0MTkyODQ0Q0Mw
MDEzRkJFQSAvKiBnZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5ICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gdGV4dC5zY3JpcHQucHl0aG9uOyBuYW1lID0gZ2VuZXJhdGVfYmFja2VuZF9kaXNwYXRjaGVy
X2hlYWRlci5weTsgcGF0aCA9IGdlbmVyYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHk7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUM0NzAzQ0M1MTkyODQ0Q0MwMDEzRkJFQSAv
KiBnZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSB0ZXh0LnNjcmlwdC5weXRob247IG5hbWUgPSBnZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJf
aW1wbGVtZW50YXRpb24ucHk7IHBhdGggPSBnZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaW1w
bGVtZW50YXRpb24ucHk7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUM0NzAzQ0M2MTky
ODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0ZV9mcm9udGVuZF9kaXNwYXRjaGVyX2hlYWRlci5weSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHRleHQuc2NyaXB0LnB5dGhvbjsgbmFtZSA9IGdlbmVyYXRlX2Zyb250ZW5kX2Rp
c3BhdGNoZXJfaGVhZGVyLnB5OyBwYXRoID0gZ2VuZXJhdGVfZnJvbnRlbmRfZGlzcGF0Y2hlcl9o
ZWFkZXIucHk7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUM0NzAzQ0M3MTkyODQ0Q0Mw
MDEzRkJFQSAvKiBnZW5lcmF0ZV9mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gdGV4dC5zY3JpcHQucHl0aG9uOyBuYW1lID0gZ2VuZXJhdGVfZnJvbnRlbmRf
ZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weTsgcGF0aCA9IGdlbmVyYXRlX2Zyb250ZW5kX2Rp
c3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHk7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUM0NzAzQ0M4MTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0ZV90eXBlX2J1aWxkZXJfaGVhZGVy
LnB5ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gdGV4dC5zY3JpcHQucHl0aG9uOyBuYW1lID0gZ2VuZXJhdGVfdHlwZV9i
dWlsZGVyX2hlYWRlci5weTsgcGF0aCA9IGdlbmVyYXRlX3R5cGVfYnVpbGRlcl9oZWFkZXIucHk7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUM0NzAzQ0M5MTkyODQ0Q0MwMDEzRkJFQSAv
KiBnZW5lcmF0ZV90eXBlX2J1aWxkZXJfaW1wbGVtZW50YXRpb24ucHkgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0
LnNjcmlwdC5weXRob247IG5hbWUgPSBnZW5lcmF0ZV90eXBlX2J1aWxkZXJfaW1wbGVtZW50YXRp
b24ucHk7IHBhdGggPSBnZW5lcmF0ZV90eXBlX2J1aWxkZXJfaW1wbGVtZW50YXRpb24ucHk7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUM0NzAzQ0NBMTkyODQ0Q0MwMDEzRkJFQSAvKiBn
ZW5lcmF0b3JfdGVtcGxhdGVzLnB5ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5zY3JpcHQucHl0aG9uOyBuYW1l
ID0gZ2VuZXJhdG9yX3RlbXBsYXRlcy5weTsgcGF0aCA9IGdlbmVyYXRvcl90ZW1wbGF0ZXMucHk7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUM0NzAzQ0NCMTkyODQ0Q0MwMDEzRkJFQSAv
KiBnZW5lcmF0b3IucHkgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnNjcmlwdC5weXRob247IG5hbWUgPSBnZW5l
cmF0b3IucHk7IHBhdGggPSBnZW5lcmF0b3IucHk7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUM0NzAzQ0NDMTkyODQ0Q0MwMDEzRkJFQSAvKiBtb2RlbHMucHkgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0
LnNjcmlwdC5weXRob247IG5hbWUgPSBtb2RlbHMucHk7IHBhdGggPSBtb2RlbHMucHk7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQyMTIwMjI4MEFENDMxMEMwMEVENzlCNiAvKiBEYXRl
Q29udmVyc2lvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGF0
ZUNvbnZlcnNpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlEMjEyMDIyOTBB
RDQzMTBDMDBFRDc5QjYgLyogRGF0ZUNvbnZlcnNpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IERhdGVDb252ZXJzaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUUxMjRBOEY1MEU1NTU3NzUwMDMwOTFGMSAvKiBPcGFxdWVKU1N0cmluZy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBPcGFxdWVKU1N0cmluZy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtNTU4MCwxMCArNTU5OSwxMCBAQAogCQlBNTMyNDM4RTE4NTY5NkNF
MDAyRUQ2OTIgLyogc2NyaXB0cyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRy
ZW4gPSAoCi0JCQkJQTUzMjQzOEYxODU2OTZFNjAwMkVENjkyIC8qIENvZGVHZW5lcmF0b3JJbnNw
ZWN0b3IucHkgKi8sCi0JCQkJQTUzMjQzOTAxODU2OTZFNjAwMkVENjkyIC8qIENvZGVHZW5lcmF0
b3JJbnNwZWN0b3JTdHJpbmdzLnB5ICovLAorCQkJCUM0NzAzQ0MxMTkyODQ0QTQwMDEzRkJFQSAv
KiBjb2RlZ2VuICovLAogCQkJCUE1ODQwRTI2MTg3Qzk4MDcwMDg0M0IxMCAvKiBjc3NtaW4ucHkg
Ki8sCiAJCQkJQTUzMjQzOTExODU2OTZFNjAwMkVENjkyIC8qIGdlbmVyYXRlLWNvbWJpbmVkLWlu
c3BlY3Rvci1qc29uLnB5ICovLAorCQkJCUM0NzAzQ0JGMTkyODQ0OTYwMDEzRkJFQSAvKiBnZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkgKi8sCiAJCQkJQTU4NDBFMjgxODdD
QTVCODAwODQzQjEwIC8qIGlubGluZS1hbmQtbWluaWZ5LXN0eWxlc2hlZXRzLWFuZC1zY3JpcHRz
LnB5ICovLAogCQkJCUE1MTNFNUM0MTg1RjkyREMwMDdFOTVBRCAvKiBqc21pbi5weSAqLywKIAkJ
CQlBNTEzRTVDNTE4NUY5MkYwMDA3RTk1QUQgLyogeHhkLnBsICovLApAQCAtNTcwMSw2ICs1NzIw
LDI0IEBACiAJCQlwYXRoID0gYnVpbHRpbnM7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwog
CQl9OworCQlDNDcwM0NDMTE5Mjg0NEE0MDAxM0ZCRUEgLyogY29kZWdlbiAqLyA9IHsKKwkJCWlz
YSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJQzQ3MDNDQzIxOTI4NDRDQzAwMTNG
QkVBIC8qIF9faW5pdF9fLnB5ICovLAorCQkJCUM0NzAzQ0MzMTkyODQ0Q0MwMDEzRkJFQSAvKiBn
ZW5lcmF0ZV9iYWNrZW5kX2NvbW1hbmRzLnB5ICovLAorCQkJCUM0NzAzQ0M0MTkyODQ0Q0MwMDEz
RkJFQSAvKiBnZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5ICovLAorCQkJCUM0
NzAzQ0M1MTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaW1w
bGVtZW50YXRpb24ucHkgKi8sCisJCQkJQzQ3MDNDQzYxOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVy
YXRlX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5ICovLAorCQkJCUM0NzAzQ0M3MTkyODQ0
Q0MwMDEzRkJFQSAvKiBnZW5lcmF0ZV9mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9u
LnB5ICovLAorCQkJCUM0NzAzQ0M4MTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0ZV90eXBlX2J1
aWxkZXJfaGVhZGVyLnB5ICovLAorCQkJCUM0NzAzQ0M5MTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5l
cmF0ZV90eXBlX2J1aWxkZXJfaW1wbGVtZW50YXRpb24ucHkgKi8sCisJCQkJQzQ3MDNDQ0ExOTI4
NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRvcl90ZW1wbGF0ZXMucHkgKi8sCisJCQkJQzQ3MDNDQ0Ix
OTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRvci5weSAqLywKKwkJCQlDNDcwM0NDQzE5Mjg0NEND
MDAxM0ZCRUEgLyogbW9kZWxzLnB5ICovLAorCQkJKTsKKwkJCXBhdGggPSBjb2RlZ2VuOworCQkJ
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKIC8qIEVuZCBQQlhHcm91cCBzZWN0aW9uICov
CiAKIC8qIEJlZ2luIFBCWEhlYWRlcnNCdWlsZFBoYXNlIHNlY3Rpb24gKi8KQEAgLTU5ODksNiAr
NjAyNiwxOSBAQAogCQkJCTJBQUJDREU3MThFRjI5NDIwMDAwMjA5NiAvKiBHQ0xvZ2dpbmcuaCBp
biBIZWFkZXJzICovLAogCQkJCUZFNTI0OEY5MTkxNDQyRDkwMEI3RkRFNCAvKiBWYXJpYWJsZVdh
dGNocG9pbnRTZXRJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMkRBNzc4MzE4RTI1OTk5
MDA2NkZDQjYgLyogSGVhcElubGluZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCUE1MzI0Mzk0MTg1
Njk3MDkwMDJFRDY5MiAvKiBnZW5lcmF0ZS1jb21iaW5lZC1pbnNwZWN0b3ItanNvbi5weSBpbiBI
ZWFkZXJzICovLAorCQkJCUE1ODQwRTI3MTg3Qzk4MUUwMDg0M0IxMCAvKiBjc3NtaW4ucHkgaW4g
SGVhZGVycyAqLywKKwkJCQlDNDcwM0NEMzE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJhdGVfdHlw
ZV9idWlsZGVyX2hlYWRlci5weSBpbiBIZWFkZXJzICovLAorCQkJCUM0NzAzQ0QyMTkyODQ0Q0Mw
MDEzRkJFQSAvKiBnZW5lcmF0ZV9mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5
IGluIEhlYWRlcnMgKi8sCisJCQkJQzQ3MDNDRDExOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRl
X2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5IGluIEhlYWRlcnMgKi8sCisJCQkJQzQ3MDND
RDUxOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRvcl90ZW1wbGF0ZXMucHkgaW4gSGVhZGVycyAq
LywKKwkJCQlDNDcwM0NENjE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJhdG9yLnB5IGluIEhlYWRl
cnMgKi8sCisJCQkJQzQ3MDNDQ0YxOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRlX2JhY2tlbmRf
ZGlzcGF0Y2hlcl9oZWFkZXIucHkgaW4gSGVhZGVycyAqLywKKwkJCQlDNDcwM0NDMDE5Mjg0NDk2
MDAxM0ZCRUEgLyogZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5IGluIEhl
YWRlcnMgKi8sCisJCQkJQzQ3MDNDRDAxOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRlX2JhY2tl
bmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSBpbiBIZWFkZXJzICovLAorCQkJCUM0NzAz
Q0NFMTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0ZV9iYWNrZW5kX2NvbW1hbmRzLnB5IGluIEhl
YWRlcnMgKi8sCisJCQkJQzQ3MDNDRDQxOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRlX3R5cGVf
YnVpbGRlcl9pbXBsZW1lbnRhdGlvbi5weSBpbiBIZWFkZXJzICovLAorCQkJCUM0NzAzQ0Q3MTky
ODQ0Q0MwMDEzRkJFQSAvKiBtb2RlbHMucHkgaW4gSGVhZGVycyAqLywKIAkJCQkyQUFDRTYzRDE4
Q0E1QTAzMDBFRDAxOTEgLyogR0NBY3Rpdml0eUNhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkyQTgzNjM4NjE4RDdEMEVFMDAwMEVCQ0MgLyogRWRlbkdDQWN0aXZpdHlDYWxsYmFjay5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMkE4MzYzOEExOEQ3RDBGRTAwMDBFQkNDIC8qIEZ1bGxHQ0FjdGl2
aXR5Q2FsbGJhY2suaCBpbiBIZWFkZXJzICovLApAQCAtNjA0OCw4ICs2MDk4LDYgQEAKIAkJCQkw
RkQ4QTMxNDE3RDQzMjZDMDBDQTJDNDAgLyogQ29kZUJsb2NrU2V0LmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRjk2RUJCMzE2Njc2RUY2MDA4QkFERTMgLyogQ29kZUJsb2NrV2l0aEpJVFR5cGUuaCBp
biBIZWFkZXJzICovLAogCQkJCUE3N0YxODIyMTY0MDg4QjIwMDY0MEE0NyAvKiBDb2RlQ2FjaGUu
aCBpbiBIZWFkZXJzICovLAotCQkJCUE1MzI0MzkyMTg1Njk3MDkwMDJFRDY5MiAvKiBDb2RlR2Vu
ZXJhdG9ySW5zcGVjdG9yLnB5IGluIEhlYWRlcnMgKi8sCi0JCQkJQTUzMjQzOTMxODU2OTcwOTAw
MkVENjkyIC8qIENvZGVHZW5lcmF0b3JJbnNwZWN0b3JTdHJpbmdzLnB5IGluIEhlYWRlcnMgKi8s
CiAJCQkJODZFMTE2QjEwRkU3NUFDODAwQjUxMkJDIC8qIENvZGVMb2NhdGlvbi5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEZCRDdFNjkxNDQ3OTk5NjAwNDgxMzE1IC8qIENvZGVPcmlnaW4uaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGMjFDMjdEMTRCRTcyN0EwMEFEQzY0QiAvKiBDb2RlU3BlY2lhbGl6
YXRpb25LaW5kLmggaW4gSGVhZGVycyAqLywKQEAgLTYwODAsNyArNjEyOCw2IEBACiAJCQkJQzIx
OEQxNDAxNjU1Q0ZENTAwNjJCQjgxIC8qIENvcHlXb3JrTGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMkE2ODI5NUIxODc1RjgwNTAwQjZDM0UyIC8qIENvcHlXcml0ZUJhcnJpZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTVERTZFNUIzMEUxNzI4RUMwMDE4MDQwNyAvKiBjcmVhdGVfaGFzaF90YWJs
ZSBpbiBIZWFkZXJzICovLAotCQkJCUE1ODQwRTI3MTg3Qzk4MUUwMDg0M0IxMCAvKiBjc3NtaW4u
cHkgaW4gSGVhZGVycyAqLywKIAkJCQkwRjQyNkE0QjE0NjBDRDZFMDAxMzFGOEYgLyogRGF0YUZv
cm1hdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2REYxN0I2QjVBQjAwQTdBRTNGIC8qIERh
dGFWaWV3LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0QyMDM0QTBFMTcxMzVFMDAyQzdFODIgLyog
RGF0ZUNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKQEAgLTYzMjEsNyArNjM2OCw2IEBACiAJ
CQkJMEYyQjY2QUYxN0I2QjU0NTAwQTdBRTNGIC8qIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0SW5s
aW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzIyMzlEMUIxNjI2MkJERDAwNUFDNUZEIC8qIEdD
VGhyZWFkLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMjExMjJFMjE1REQ5QUIzMDA3OTBFM0EgLyog
R0NUaHJlYWRTaGFyZWREYXRhLmggaW4gSGVhZGVycyAqLywKLQkJCQlBNTMyNDM5NDE4NTY5NzA5
MDAyRUQ2OTIgLyogZ2VuZXJhdGUtY29tYmluZWQtaW5zcGVjdG9yLWpzb24ucHkgaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjJCNjZFMDE3QjZCNUFCMDBBN0FFM0YgLyogR2VuZXJpY1R5cGVkQXJyYXlW
aWV3LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjFGRTUxQzE5MjJBM0JDMDA2OTg3QzUgLyogQWJv
cnRSZWFzb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NkUxMTdCNkI1QUIwMEE3QUUzRiAv
KiBHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvQ29uc29sZU1lc3NhZ2UuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9Db25zb2xlTWVzc2FnZS5jcHAKaW5kZXgg
NDA3OTBiZjVkOWU1OTFiZTBlMzVmNjJhNDUxODc4YmNkNTcyYzdmNi4uMDIwM2JjMWE5ZjczNmI0
OGZjMjFlYzExYzhlM2I0OTUwOWQxMDk1OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9Db25zb2xlTWVzc2FnZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9Db25zb2xlTWVzc2FnZS5jcHAKQEAgLTEzMSw3ICsxMzEsNyBAQCB2b2lk
IENvbnNvbGVNZXNzYWdlOjphdXRvZ2VuZXJhdGVNZXRhZGF0YShKU0M6OkV4ZWNTdGF0ZSogc3Rh
dGUpCiAgICAgfQogfQogCi1zdGF0aWMgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q29uc29sZTo6
Q29uc29sZU1lc3NhZ2U6OlNvdXJjZTo6RW51bSBtZXNzYWdlU291cmNlVmFsdWUoTWVzc2FnZVNv
dXJjZSBzb3VyY2UpCitzdGF0aWMgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q29uc29sZTo6Q29u
c29sZU1lc3NhZ2U6OlNvdXJjZSBtZXNzYWdlU291cmNlVmFsdWUoTWVzc2FnZVNvdXJjZSBzb3Vy
Y2UpCiB7CiAgICAgc3dpdGNoIChzb3VyY2UpIHsKICAgICBjYXNlIE1lc3NhZ2VTb3VyY2U6OlhN
TDogcmV0dXJuIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNvbnNvbGU6OkNvbnNvbGVNZXNzYWdl
OjpTb3VyY2U6OlhNTDsKQEAgLTE0OCw3ICsxNDgsNyBAQCBzdGF0aWMgSW5zcGVjdG9yOjpUeXBl
QnVpbGRlcjo6Q29uc29sZTo6Q29uc29sZU1lc3NhZ2U6OlNvdXJjZTo6RW51bSBtZXNzYWdlU291
cgogICAgIHJldHVybiBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDb25zb2xlOjpDb25zb2xlTWVz
c2FnZTo6U291cmNlOjpPdGhlcjsKIH0KIAotc3RhdGljIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6
OkNvbnNvbGU6OkNvbnNvbGVNZXNzYWdlOjpUeXBlOjpFbnVtIG1lc3NhZ2VUeXBlVmFsdWUoTWVz
c2FnZVR5cGUgdHlwZSkKK3N0YXRpYyBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDb25zb2xlOjpD
b25zb2xlTWVzc2FnZTo6VHlwZSBtZXNzYWdlVHlwZVZhbHVlKE1lc3NhZ2VUeXBlIHR5cGUpCiB7
CiAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgY2FzZSBNZXNzYWdlVHlwZTo6TG9nOiByZXR1cm4g
SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q29uc29sZTo6Q29uc29sZU1lc3NhZ2U6OlR5cGU6Okxv
ZzsKQEAgLTE2OCw3ICsxNjgsNyBAQCBzdGF0aWMgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q29u
c29sZTo6Q29uc29sZU1lc3NhZ2U6OlR5cGU6OkVudW0gbWVzc2FnZVR5cGVWYQogICAgIHJldHVy
biBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDb25zb2xlOjpDb25zb2xlTWVzc2FnZTo6VHlwZTo6
TG9nOwogfQogCi1zdGF0aWMgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q29uc29sZTo6Q29uc29s
ZU1lc3NhZ2U6OkxldmVsOjpFbnVtIG1lc3NhZ2VMZXZlbFZhbHVlKE1lc3NhZ2VMZXZlbCBsZXZl
bCkKK3N0YXRpYyBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDb25zb2xlOjpDb25zb2xlTWVzc2Fn
ZTo6TGV2ZWwgbWVzc2FnZUxldmVsVmFsdWUoTWVzc2FnZUxldmVsIGxldmVsKQogewogICAgIHN3
aXRjaCAobGV2ZWwpIHsKICAgICBjYXNlIE1lc3NhZ2VMZXZlbDo6TG9nOiByZXR1cm4gSW5zcGVj
dG9yOjpUeXBlQnVpbGRlcjo6Q29uc29sZTo6Q29uc29sZU1lc3NhZ2U6OkxldmVsOjpMb2c7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHQuY3Bw
CmluZGV4IDc4NWRhZDBhYzg4ZTRlNzBkOTg1ZjYwOTg4MDVlZGM0NWJhZjY4ZjEuLmU1YTI2MjJk
ZGViMTQ1MmZlOTJiY2E0NmE4MDQ1OWI5OWJhZDQwOGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHQuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHQuY3BwCkBAIC0xMDAsMTMgKzEwMCwx
MyBAQCB2b2lkIEluamVjdGVkU2NyaXB0OjpnZXRGdW5jdGlvbkRldGFpbHMoRXJyb3JTdHJpbmcq
IGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmCiAKICAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+
IHJlc3VsdFZhbHVlOwogICAgIG1ha2VDYWxsKGZ1bmN0aW9uLCAmcmVzdWx0VmFsdWUpOwotICAg
IGlmICghcmVzdWx0VmFsdWUgfHwgcmVzdWx0VmFsdWUtPnR5cGUoKSAhPSBJbnNwZWN0b3JWYWx1
ZTo6VHlwZU9iamVjdCkgeworICAgIGlmICghcmVzdWx0VmFsdWUgfHwgcmVzdWx0VmFsdWUtPnR5
cGUoKSAhPSBJbnNwZWN0b3JWYWx1ZTo6VHlwZTo6T2JqZWN0KSB7CiAgICAgICAgIGlmICghcmVz
dWx0VmFsdWUtPmFzU3RyaW5nKGVycm9yU3RyaW5nKSkKICAgICAgICAgICAgICplcnJvclN0cmlu
ZyA9IEFTQ0lJTGl0ZXJhbCgiSW50ZXJuYWwgZXJyb3IiKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgICpyZXN1bHQgPSBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6RnVu
Y3Rpb25EZXRhaWxzOjpydW50aW1lQ2FzdChyZXN1bHRWYWx1ZSk7CisgICAgKnJlc3VsdCA9IEJp
bmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6RGVidWdnZXI6OkZ1bmN0aW9uRGV0
YWlscz46OnJ1bnRpbWVDYXN0KHJlc3VsdFZhbHVlKTsKIH0KIAogdm9pZCBJbmplY3RlZFNjcmlw
dDo6Z2V0UHJvcGVydGllcyhFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYg
b2JqZWN0SWQsIGJvb2wgb3duUHJvcGVydGllcywgUmVmUHRyPEFycmF5PEluc3BlY3Rvcjo6VHlw
ZUJ1aWxkZXI6OlJ1bnRpbWU6OlByb3BlcnR5RGVzY3JpcHRvcj4+KiBwcm9wZXJ0aWVzKQpAQCAt
MTE3LDEyICsxMTcsMTIgQEAgdm9pZCBJbmplY3RlZFNjcmlwdDo6Z2V0UHJvcGVydGllcyhFcnJv
clN0cmluZyogZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgb2JqZWMKIAogICAgIFJlZlB0cjxJ
bnNwZWN0b3JWYWx1ZT4gcmVzdWx0OwogICAgIG1ha2VDYWxsKGZ1bmN0aW9uLCAmcmVzdWx0KTsK
LSAgICBpZiAoIXJlc3VsdCB8fCByZXN1bHQtPnR5cGUoKSAhPSBJbnNwZWN0b3JWYWx1ZTo6VHlw
ZUFycmF5KSB7CisgICAgaWYgKCFyZXN1bHQgfHwgcmVzdWx0LT50eXBlKCkgIT0gSW5zcGVjdG9y
VmFsdWU6OlR5cGU6OkFycmF5KSB7CiAgICAgICAgICplcnJvclN0cmluZyA9IEFTQ0lJTGl0ZXJh
bCgiSW50ZXJuYWwgZXJyb3IiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgICpwcm9w
ZXJ0aWVzID0gQXJyYXk8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UnVudGltZTo6UHJvcGVydHlE
ZXNjcmlwdG9yPjo6cnVudGltZUNhc3QocmVzdWx0KTsKKyAgICAqcHJvcGVydGllcyA9IEJpbmRp
bmdUcmFpdHM8QXJyYXk8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UnVudGltZTo6UHJvcGVydHlE
ZXNjcmlwdG9yPj46OnJ1bnRpbWVDYXN0KHJlc3VsdCk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRTY3Jp
cHQ6OmdldEludGVybmFsUHJvcGVydGllcyhFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGNvbnN0
IFN0cmluZyYgb2JqZWN0SWQsIFJlZlB0cjxBcnJheTxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpS
dW50aW1lOjpJbnRlcm5hbFByb3BlcnR5RGVzY3JpcHRvcj4+KiBwcm9wZXJ0aWVzKQpAQCAtMTMy
LDEyICsxMzIsMTIgQEAgdm9pZCBJbmplY3RlZFNjcmlwdDo6Z2V0SW50ZXJuYWxQcm9wZXJ0aWVz
KEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgY29uc3QgU3RyaW4KIAogICAgIFJlZlB0cjxJbnNw
ZWN0b3JWYWx1ZT4gcmVzdWx0OwogICAgIG1ha2VDYWxsKGZ1bmN0aW9uLCAmcmVzdWx0KTsKLSAg
ICBpZiAoIXJlc3VsdCB8fCByZXN1bHQtPnR5cGUoKSAhPSBJbnNwZWN0b3JWYWx1ZTo6VHlwZUFy
cmF5KSB7CisgICAgaWYgKCFyZXN1bHQgfHwgcmVzdWx0LT50eXBlKCkgIT0gSW5zcGVjdG9yVmFs
dWU6OlR5cGU6OkFycmF5KSB7CiAgICAgICAgICplcnJvclN0cmluZyA9IEFTQ0lJTGl0ZXJhbCgi
SW50ZXJuYWwgZXJyb3IiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFJlZlB0cjxB
cnJheTxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpSdW50aW1lOjpJbnRlcm5hbFByb3BlcnR5RGVz
Y3JpcHRvcj4+IGFycmF5ID0gQXJyYXk8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UnVudGltZTo6
SW50ZXJuYWxQcm9wZXJ0eURlc2NyaXB0b3I+OjpydW50aW1lQ2FzdChyZXN1bHQpOworICAgIGF1
dG8gYXJyYXkgPSBCaW5kaW5nVHJhaXRzPEFycmF5PEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlJ1
bnRpbWU6OkludGVybmFsUHJvcGVydHlEZXNjcmlwdG9yPj46OnJ1bnRpbWVDYXN0KHJlc3VsdCk7
CiAgICAgaWYgKGFycmF5LT5sZW5ndGgoKSA+IDApCiAgICAgICAgICpwcm9wZXJ0aWVzID0gYXJy
YXk7CiB9CkBAIC0xNTIsOCArMTUyLDggQEAgUGFzc1JlZlB0cjxBcnJheTxJbnNwZWN0b3I6OlR5
cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6Q2FsbEZyYW1lPj4gSW5qZWN0ZWRTY3JpcHQ6OncKICAgICBE
ZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSBjYWxsRnJhbWVzVmFsdWUgPSBjYWxsRnVuY3Rpb25XaXRo
RXZhbEVuYWJsZWQoZnVuY3Rpb24sIGhhZEV4Y2VwdGlvbik7CiAgICAgQVNTRVJUKCFoYWRFeGNl
cHRpb24pOwogICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gcmVzdWx0ID0gY2FsbEZyYW1lc1Zh
bHVlLnRvSW5zcGVjdG9yVmFsdWUoc2NyaXB0U3RhdGUoKSk7Ci0gICAgaWYgKHJlc3VsdC0+dHlw
ZSgpID09IEluc3BlY3RvclZhbHVlOjpUeXBlQXJyYXkpCi0gICAgICAgIHJldHVybiBBcnJheTxJ
bnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6Q2FsbEZyYW1lPjo6cnVudGltZUNhc3Qo
cmVzdWx0KTsKKyAgICBpZiAocmVzdWx0LT50eXBlKCkgPT0gSW5zcGVjdG9yVmFsdWU6OlR5cGU6
OkFycmF5KQorICAgICAgICByZXR1cm4gQmluZGluZ1RyYWl0czxBcnJheTxJbnNwZWN0b3I6OlR5
cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6Q2FsbEZyYW1lPj46OnJ1bnRpbWVDYXN0KHJlc3VsdCk7CiAK
ICAgICByZXR1cm4gQXJyYXk8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6RGVidWdnZXI6OkNhbGxG
cmFtZT46OmNyZWF0ZSgpOwogfQpAQCAtMTczLDcgKzE3Myw3IEBAIFBhc3NSZWZQdHI8SW5zcGVj
dG9yOjpUeXBlQnVpbGRlcjo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiBJbmplY3RlZFNjcmlwdDo6
d3JhcE9iCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gcmF3UmVzdWx0ID0gci50b0luc3BlY3RvclZhbHVlKHNjcmlwdFN0YXRlKCkpLT5hc09i
amVjdCgpOwotICAgIHJldHVybiBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpSdW50aW1lOjpSZW1v
dGVPYmplY3Q6OnJ1bnRpbWVDYXN0KHJhd1Jlc3VsdCk7CisgICAgcmV0dXJuIEJpbmRpbmdUcmFp
dHM8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UnVudGltZTo6UmVtb3RlT2JqZWN0Pjo6cnVudGlt
ZUNhc3QocmF3UmVzdWx0KTsKIH0KIAogUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVy
OjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+IEluamVjdGVkU2NyaXB0Ojp3cmFwVGFibGUoY29uc3Qg
RGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIHRhYmxlLCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRW
YWx1ZSYgY29sdW1ucykgY29uc3QKQEAgLTE5Myw3ICsxOTMsNyBAQCBQYXNzUmVmUHRyPEluc3Bl
Y3Rvcjo6VHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4gSW5qZWN0ZWRTY3JpcHQ6
OndyYXBUYQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IHJhd1Jlc3VsdCA9IHIudG9JbnNwZWN0b3JWYWx1ZShzY3JpcHRTdGF0ZSgpKS0+YXNP
YmplY3QoKTsKLSAgICByZXR1cm4gSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UnVudGltZTo6UmVt
b3RlT2JqZWN0OjpydW50aW1lQ2FzdChyYXdSZXN1bHQpOworICAgIHJldHVybiBCaW5kaW5nVHJh
aXRzPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD46OnJ1bnRp
bWVDYXN0KHJhd1Jlc3VsdCk7CiB9CiAKIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIEluamVjdGVk
U2NyaXB0OjpmaW5kT2JqZWN0QnlJZChjb25zdCBTdHJpbmcmIG9iamVjdElkKSBjb25zdApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdEJh
c2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdEJh
c2UuY3BwCmluZGV4IGQ5NTYxZTFmNGE3ODZmOTY1NTBlMjJkYWEzNDIzN2VjOTNhZWNmMWIuLmZl
MTBkNmM0YmZiYWZiZjI4NmNjM2E4ZDM1YzljNThkZDU0MjRjMWIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRCYXNlLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0QmFzZS5jcHAKQEAg
LTEyOCw3ICsxMjgsNyBAQCB2b2lkIEluamVjdGVkU2NyaXB0QmFzZTo6bWFrZUV2YWxDYWxsKEVy
cm9yU3RyaW5nKiBlcnJvclN0cmluZywgRGVwcmVjYXRlZDo6U2NyaQogICAgICAgICByZXR1cm47
CiAgICAgfQogCi0gICAgaWYgKHJlc3VsdC0+dHlwZSgpID09IEluc3BlY3RvclZhbHVlOjpUeXBl
U3RyaW5nKSB7CisgICAgaWYgKHJlc3VsdC0+dHlwZSgpID09IEluc3BlY3RvclZhbHVlOjpUeXBl
OjpTdHJpbmcpIHsKICAgICAgICAgcmVzdWx0LT5hc1N0cmluZyhlcnJvclN0cmluZyk7CiAgICAg
ICAgIEFTU0VSVChlcnJvclN0cmluZy0+bGVuZ3RoKCkpOwogICAgICAgICByZXR1cm47CkBAIC0x
NDcsNyArMTQ3LDcgQEAgdm9pZCBJbmplY3RlZFNjcmlwdEJhc2U6Om1ha2VFdmFsQ2FsbChFcnJv
clN0cmluZyogZXJyb3JTdHJpbmcsIERlcHJlY2F0ZWQ6OlNjcmkKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgICpvYmplY3RSZXN1bHQgPSBUeXBlQnVpbGRlcjo6UnVudGltZTo6UmVtb3Rl
T2JqZWN0OjpydW50aW1lQ2FzdChyZXN1bHRPYmopOworICAgICpvYmplY3RSZXN1bHQgPSBCaW5k
aW5nVHJhaXRzPFR5cGVCdWlsZGVyOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+OjpydW50aW1lQ2Fz
dChyZXN1bHRPYmopOwogICAgICp3YXNUaHJvd24gPSB3YXNUaHJvd25WYWw7CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRNYW5h
Z2VyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRN
YW5hZ2VyLmNwcAppbmRleCBlZjBkOWEzNzQ3MzRkMjU2NGVjMGM4MWI2Mzg0ZDZjN2QwMzRlYTFk
Li40NTE3M2ZjODM3YmFlMGUyMDY0MTdjMzU1MTExOTJlNTQ2NjM4Y2I5IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0TWFuYWdlci5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdE1hbmFn
ZXIuY3BwCkBAIC05NSw3ICs5NSw3IEBAIGludCBJbmplY3RlZFNjcmlwdE1hbmFnZXI6OmluamVj
dGVkU2NyaXB0SWRGb3IoRXhlY1N0YXRlKiBzY3JpcHRTdGF0ZSkKIEluamVjdGVkU2NyaXB0IElu
amVjdGVkU2NyaXB0TWFuYWdlcjo6aW5qZWN0ZWRTY3JpcHRGb3JPYmplY3RJZChjb25zdCBTdHJp
bmcmIG9iamVjdElkKQogewogICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gcGFyc2VkT2JqZWN0
SWQgPSBJbnNwZWN0b3JWYWx1ZTo6cGFyc2VKU09OKG9iamVjdElkKTsKLSAgICBpZiAocGFyc2Vk
T2JqZWN0SWQgJiYgcGFyc2VkT2JqZWN0SWQtPnR5cGUoKSA9PSBJbnNwZWN0b3JWYWx1ZTo6VHlw
ZU9iamVjdCkgeworICAgIGlmIChwYXJzZWRPYmplY3RJZCAmJiBwYXJzZWRPYmplY3RJZC0+dHlw
ZSgpID09IEluc3BlY3RvclZhbHVlOjpUeXBlOjpPYmplY3QpIHsKICAgICAgICAgbG9uZyBpbmpl
Y3RlZFNjcmlwdElkID0gMDsKICAgICAgICAgYm9vbCBzdWNjZXNzID0gcGFyc2VkT2JqZWN0SWQt
PmFzT2JqZWN0KCktPmdldE51bWJlcihBU0NJSUxpdGVyYWwoImluamVjdGVkU2NyaXB0SWQiKSwg
JmluamVjdGVkU2NyaXB0SWQpOwogICAgICAgICBpZiAoc3VjY2VzcykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVHlwZUJ1aWxkZXIuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVHlwZUJ1aWxkZXIuaAppbmRl
eCA4ZWE3NmVjOTBjNjBlMDc3NjE3OTVjMWMxNDc5NTJkNDc4NjhmZTU4Li41MzlmNzgyMTIwMDNm
ZjU0MDFlY2I2MzlkZDVjM2UxMWFlMWFiYjkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL0luc3BlY3RvclR5cGVCdWlsZGVyLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JUeXBlQnVpbGRlci5oCkBAIC02Myw1NCArNjMs
NiBAQCBwcml2YXRlOgogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKE9wdE91dHB1dCk7CiB9Owog
Ci0KLS8vIEEgc21hbGwgdHJhbnNpZW50IHdyYXBwZXIgYXJvdW5kIGludCB0eXBlLCB0aGF0IGNh
biBiZSB1c2VkIGFzIGEgZnVuY2l0b24gcGFyYW1ldGVyIHR5cGUKLS8vIGNsZXZlcmx5IGRpc2Fs
bG93aW5nIEMrKyBpbXBsaWNpdCBjYXN0cyBmcm9tIGZsb2F0IG9yIGRvdWJsZS4KLWNsYXNzIEV4
YWN0bHlJbnQgewotcHVibGljOgotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgRXhhY3Rs
eUludChUIHQpIDogbV92YWx1ZShjYXN0X3RvX2ludDxUPih0KSkgeyB9Ci0gICAgRXhhY3RseUlu
dCgpIHsgfQotCi0gICAgb3BlcmF0b3IgaW50KCkgeyByZXR1cm4gbV92YWx1ZTsgfQotCi1wcml2
YXRlOgotICAgIGludCBtX3ZhbHVlOwotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBz
dGF0aWMgaW50IGNhc3RfdG9faW50KFQpIHsgcmV0dXJuIFQ6OmRlZmF1bHRfY2FzZV9jYXN0X2lz
X25vdF9zdXBwb3J0ZWQoKTsgfQotfTsKLQotdGVtcGxhdGU8PgotaW5saW5lIGludCBFeGFjdGx5
SW50OjpjYXN0X3RvX2ludDxpbnQ+KGludCBpKSB7IHJldHVybiBpOyB9Ci0KLXRlbXBsYXRlPD4K
LWlubGluZSBpbnQgRXhhY3RseUludDo6Y2FzdF90b19pbnQ8dW5zaWduZWQgaW50Pih1bnNpZ25l
ZCBpbnQgaSkgeyByZXR1cm4gaTsgfQotCi0jaWYgIUFTU0VSVF9ESVNBQkxFRAotY2xhc3MgUnVu
dGltZUNhc3RIZWxwZXIgewotcHVibGljOgotICAgIHRlbXBsYXRlPEluc3BlY3RvclZhbHVlOjpU
eXBlIFRZUEU+Ci0gICAgc3RhdGljIHZvaWQgYXNzZXJ0VHlwZShJbnNwZWN0b3JWYWx1ZSogdmFs
dWUpCi0gICAgewotICAgICAgICBBU1NFUlQodmFsdWUtPnR5cGUoKSA9PSBUWVBFKTsKLSAgICB9
Ci0KLSAgICBzdGF0aWMgdm9pZCBhc3NlcnRBbnkoSW5zcGVjdG9yVmFsdWUqKQotICAgIHsKLSAg
ICB9Ci0KLSAgICBzdGF0aWMgdm9pZCBhc3NlcnRJbnQoSW5zcGVjdG9yVmFsdWUqIHZhbHVlKQot
ICAgIHsKLSAgICAgICAgZG91YmxlIHY7Ci0gICAgICAgIGJvb2wgY2FzdFJlcyA9IHZhbHVlLT5h
c051bWJlcigmdik7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQoY2FzdFJlcywgY2FzdFJlcyk7Ci0g
ICAgICAgIEFTU0VSVChzdGF0aWNfY2FzdDxkb3VibGU+KHN0YXRpY19jYXN0PGludD4odikpID09
IHYpOwotICAgIH0KLX07Ci0jZW5kaWYKLQotCiAvLyBUaGlzIGNsYXNzIHByb3ZpZGVzICJUcmFp
dHMiIHR5cGUgZm9yIHRoZSBpbnB1dCB0eXBlIFQuIEl0IGlzIHByb2dyYW1tZWQgdXNpbmcgQysr
IHRlbXBsYXRlIHNwZWNpYWxpemF0aW9uCiAvLyB0ZWNobmlxdWUuIEJ5IGRlZmF1bHQgaXQgc2lt
cGx5IHRha2VzICJJdGVtVHJhaXRzIiB0eXBlIGZyb20gVCwgYnV0IGl0IGRvZXNuJ3Qgd29yayB3
aXRoIHRoZSBiYXNlIHR5cGVzLgogdGVtcGxhdGU8dHlwZW5hbWUgVD4KQEAgLTE0NCwyOSArOTYs
NiBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEFycmF5PFQ+
KCkpOwogICAgIH0KLQotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEFycmF5PFQ+PiBydW50aW1lQ2Fz
dChQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIFJlZlB0
cjxJbnNwZWN0b3JBcnJheT4gYXJyYXk7Ci0gICAgICAgIGJvb2wgY2FzdFJlcyA9IHZhbHVlLT5h
c0FycmF5KCZhcnJheSk7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQoY2FzdFJlcywgY2FzdFJlcyk7
Ci0jaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgICAgICBhc3NlcnRDb3JyZWN0VmFsdWUoYXJyYXku
Z2V0KCkpOwotI2VuZGlmIC8vICFBU1NFUlRfRElTQUJMRUQKLSAgICAgICAgQ09NUElMRV9BU1NF
UlQoc2l6ZW9mKEFycmF5PFQ+KSA9PSBzaXplb2YoSW5zcGVjdG9yQXJyYXkpLCB0eXBlX2Nhc3Rf
cHJvYmxlbSk7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxBcnJheTxUPio+KHN0YXRpY19j
YXN0PEluc3BlY3RvckFycmF5QmFzZSo+KGFycmF5LmdldCgpKSk7Ci0gICAgfQotCi0jaWYgIUFT
U0VSVF9ESVNBQkxFRAotICAgIHN0YXRpYyB2b2lkIGFzc2VydENvcnJlY3RWYWx1ZShJbnNwZWN0
b3JWYWx1ZSogdmFsdWUpCi0gICAgewotICAgICAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFy
cmF5OwotICAgICAgICBib29sIGNhc3RSZXMgPSB2YWx1ZS0+YXNBcnJheSgmYXJyYXkpOwotICAg
ICAgICBBU1NFUlRfVU5VU0VEKGNhc3RSZXMsIGNhc3RSZXMpOwotICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgYXJyYXktPmxlbmd0aCgpOyBpKyspCi0gICAgICAgICAgICBBcnJheUl0
ZW1IZWxwZXI8VD46OlRyYWl0czo6dGVtcGxhdGUgYXNzZXJ0Q29ycmVjdFZhbHVlPFQ+KGFycmF5
LT5nZXQoaSkuZ2V0KCkpOwotICAgIH0KLSNlbmRpZiAvLyAhQVNTRVJUX0RJU0FCTEVECiB9Owog
CiBzdHJ1Y3QgU3RydWN0SXRlbVRyYWl0cyB7CkBAIC0xNzQsMTQgKzEwMyw2IEBAIHN0cnVjdCBT
dHJ1Y3RJdGVtVHJhaXRzIHsKICAgICB7CiAgICAgICAgIGFycmF5LT5wdXNoVmFsdWUodmFsdWUp
OwogICAgIH0KLQotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgotICAgIHN0YXRpYyB2b2lkIGFzc2VydENvcnJlY3RWYWx1ZShJbnNwZWN0b3JWYWx1ZSogdmFs
dWUpCi0gICAgewotICAgICAgICBUOjphc3NlcnRDb3JyZWN0VmFsdWUodmFsdWUpOwotICAgIH0K
LSNlbmRpZiAvLyAhQVNTRVJUX0RJU0FCTEVECiB9OwogCiB0ZW1wbGF0ZTw+CkBAIC0xOTEsMTQg
KzExMiw2IEBAIHN0cnVjdCBBcnJheUl0ZW1IZWxwZXI8U3RyaW5nPiB7CiAgICAgICAgIHsKICAg
ICAgICAgICAgIGFycmF5LT5wdXNoU3RyaW5nKHZhbHVlKTsKICAgICAgICAgfQotCi0jaWYgIUFT
U0VSVF9ESVNBQkxFRAotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgICAgICBzdGF0
aWMgdm9pZCBhc3NlcnRDb3JyZWN0VmFsdWUoSW5zcGVjdG9yVmFsdWUqIHZhbHVlKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBSdW50aW1lQ2FzdEhlbHBlcjo6YXNzZXJ0VHlwZTxJbnNwZWN0b3JW
YWx1ZTo6VHlwZVN0cmluZz4odmFsdWUpOwotICAgICAgICB9Ci0jZW5kaWYgLy8gIUFTU0VSVF9E
SVNBQkxFRAogICAgIH07CiB9OwogCkBAIC0yMDksMTQgKzEyMiw2IEBAIHN0cnVjdCBBcnJheUl0
ZW1IZWxwZXI8aW50PiB7CiAgICAgICAgIHsKICAgICAgICAgICAgIGFycmF5LT5wdXNoSW50KHZh
bHVlKTsKICAgICAgICAgfQotCi0jaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgotICAgICAgICBzdGF0aWMgdm9pZCBhc3NlcnRDb3JyZWN0VmFsdWUoSW5z
cGVjdG9yVmFsdWUqIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBSdW50aW1lQ2FzdEhl
bHBlcjo6YXNzZXJ0SW50KHZhbHVlKTsKLSAgICAgICAgfQotI2VuZGlmIC8vICFBU1NFUlRfRElT
QUJMRUQKICAgICB9OwogfTsKIApAQCAtMjI3LDE0ICsxMzIsNiBAQCBzdHJ1Y3QgQXJyYXlJdGVt
SGVscGVyPGRvdWJsZT4gewogICAgICAgICB7CiAgICAgICAgICAgICBhcnJheS0+cHVzaE51bWJl
cih2YWx1ZSk7CiAgICAgICAgIH0KLQotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVD4KLSAgICAgICAgc3RhdGljIHZvaWQgYXNzZXJ0Q29ycmVjdFZhbHVl
KEluc3BlY3RvclZhbHVlKiB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgUnVudGltZUNh
c3RIZWxwZXI6OmFzc2VydFR5cGU8SW5zcGVjdG9yVmFsdWU6OlR5cGVOdW1iZXI+KHZhbHVlKTsK
LSAgICAgICAgfQotI2VuZGlmIC8vICFBU1NFUlRfRElTQUJMRUQKICAgICB9OwogfTsKIApAQCAt
MjQ1LDE0ICsxNDIsNiBAQCBzdHJ1Y3QgQXJyYXlJdGVtSGVscGVyPGJvb2w+IHsKICAgICAgICAg
ewogICAgICAgICAgICAgYXJyYXktPnB1c2hCb29sZWFuKHZhbHVlKTsKICAgICAgICAgfQotCi0j
aWYgIUFTU0VSVF9ESVNBQkxFRAotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgICAg
ICBzdGF0aWMgdm9pZCBhc3NlcnRDb3JyZWN0VmFsdWUoSW5zcGVjdG9yVmFsdWUqIHZhbHVlKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBSdW50aW1lQ2FzdEhlbHBlcjo6YXNzZXJ0VHlwZTxJbnNw
ZWN0b3JWYWx1ZTo6VHlwZUJvb2xlYW4+KHZhbHVlKTsKLSAgICAgICAgfQotI2VuZGlmIC8vICFB
U1NFUlRfRElTQUJMRUQKICAgICB9OwogfTsKIApAQCAtMjYzLDE0ICsxNTIsNiBAQCBzdHJ1Y3Qg
QXJyYXlJdGVtSGVscGVyPEluc3BlY3RvclZhbHVlPiB7CiAgICAgICAgIHsKICAgICAgICAgICAg
IGFycmF5LT5wdXNoVmFsdWUodmFsdWUpOwogICAgICAgICB9Ci0KLSNpZiAhQVNTRVJUX0RJU0FC
TEVECi0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgICAgIHN0YXRpYyB2b2lkIGFz
c2VydENvcnJlY3RWYWx1ZShJbnNwZWN0b3JWYWx1ZSogdmFsdWUpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIFJ1bnRpbWVDYXN0SGVscGVyOjphc3NlcnRBbnkodmFsdWUpOwotICAgICAgICB9Ci0j
ZW5kaWYgLy8gIUFTU0VSVF9ESVNBQkxFRAogICAgIH07CiB9OwogCkBAIC0yODEsMTQgKzE2Miw2
IEBAIHN0cnVjdCBBcnJheUl0ZW1IZWxwZXI8SW5zcGVjdG9yT2JqZWN0PiB7CiAgICAgICAgIHsK
ICAgICAgICAgICAgIGFycmF5LT5wdXNoVmFsdWUodmFsdWUpOwogICAgICAgICB9Ci0KLSNpZiAh
QVNTRVJUX0RJU0FCTEVECi0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgICAgIHN0
YXRpYyB2b2lkIGFzc2VydENvcnJlY3RWYWx1ZShJbnNwZWN0b3JWYWx1ZSogdmFsdWUpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIFJ1bnRpbWVDYXN0SGVscGVyOjphc3NlcnRUeXBlPEluc3BlY3Rv
clZhbHVlOjpUeXBlT2JqZWN0Pih2YWx1ZSk7Ci0gICAgICAgIH0KLSNlbmRpZiAvLyAhQVNTRVJU
X0RJU0FCTEVECiAgICAgfTsKIH07CiAKQEAgLTI5OSwxNCArMTcyLDYgQEAgc3RydWN0IEFycmF5
SXRlbUhlbHBlcjxJbnNwZWN0b3JBcnJheT4gewogICAgICAgICB7CiAgICAgICAgICAgICBhcnJh
eS0+cHVzaEFycmF5KHZhbHVlKTsKICAgICAgICAgfQotCi0jaWYgIUFTU0VSVF9ESVNBQkxFRAot
ICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgICAgICBzdGF0aWMgdm9pZCBhc3NlcnRD
b3JyZWN0VmFsdWUoSW5zcGVjdG9yVmFsdWUqIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBSdW50aW1lQ2FzdEhlbHBlcjo6YXNzZXJ0VHlwZTxJbnNwZWN0b3JWYWx1ZTo6VHlwZUFycmF5
Pih2YWx1ZSk7Ci0gICAgICAgIH0KLSNlbmRpZiAvLyAhQVNTRVJUX0RJU0FCTEVECiAgICAgfTsK
IH07CiAKQEAgLTMxNywxOSArMTgyLDkyIEBAIHN0cnVjdCBBcnJheUl0ZW1IZWxwZXI8VHlwZUJ1
aWxkZXI6OkFycmF5PFQ+PiB7CiAgICAgICAgIHsKICAgICAgICAgICAgIGFycmF5LT5wdXNoVmFs
dWUodmFsdWUpOwogICAgICAgICB9CisgICAgfTsKK307CisKKy8vIEhlbHBlciBtZXRob2RzIGZv
ciBUeXBlQnVpbGRlciBhbmQgb3RoZXIgSW5zcGVjdG9yIHR5cGVzIGFyZSBwcm92aWRlZCBieQor
Ly8gc3BlY2lhbGl6YXRpb25zIG9mIEJpbmRpbmdUcmFpdHM8VD4uIFNvbWUgYXJlIGdlbmVyYXRl
ZCBmb3IgcHJvdG9jb2wgdHlwZXMuCiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgQmlu
ZGluZ1RyYWl0cyB7CisgICAgdHlwZWRlZiBUIEJpbmRpbmdUeXBlOworCisgICAgc3RhdGljIElu
c3BlY3RvclZhbHVlOjpUeXBlIHR5cGVUYWcoKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxUPiBy
dW50aW1lQ2FzdChQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4pOwogI2lmICFBU1NFUlRfRElT
QUJMRUQKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgUz4KLSAgICAgICAgc3RhdGljIHZvaWQg
YXNzZXJ0Q29ycmVjdFZhbHVlKEluc3BlY3RvclZhbHVlKiB2YWx1ZSkKLSAgICAgICAgewotICAg
ICAgICAgICAgUzo6YXNzZXJ0Q29ycmVjdFZhbHVlKHZhbHVlKTsKLSAgICAgICAgfQorICAgIHN0
YXRpYyB2b2lkIGFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKEluc3BlY3RvclZhbHVlKik7Cisj
ZW5kaWYgLy8gIUFTU0VSVF9ESVNBQkxFRAorfTsKKwordGVtcGxhdGU8SW5zcGVjdG9yVmFsdWU6
OlR5cGUgVFlQRT4KK3N0cnVjdCBQcmltaXRpdmVCaW5kaW5nVHJhaXRzIHsKKyNpZiAhQVNTRVJU
X0RJU0FCTEVECisgICAgc3RhdGljIHZvaWQgYXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSW5z
cGVjdG9yVmFsdWUqIHZhbHVlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHZhbHVlLT50eXBlKCkg
PT0gVFlQRSk7CisgICAgfQorI2VuZGlmIC8vICFBU1NFUlRfRElTQUJMRUQKK307CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgQmluZGluZ1RyYWl0czxUeXBlQnVpbGRlcjo6QXJyYXk8
VD4+IHsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxBcnJheTxUPj4gcnVudGltZUNhc3QoUGFzc1Jl
ZlB0cjxJbnNwZWN0b3JWYWx1ZT4gdmFsdWUpCisgICAgeworICAgICAgICBSZWZQdHI8SW5zcGVj
dG9yQXJyYXk+IGFycmF5OworICAgICAgICBib29sIGNhc3RSZXMgPSB2YWx1ZS0+YXNBcnJheSgm
YXJyYXkpOworICAgICAgICBBU1NFUlRfVU5VU0VEKGNhc3RSZXMsIGNhc3RSZXMpOworI2lmICFB
U1NFUlRfRElTQUJMRUQKKyAgICAgICAgYXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoYXJyYXku
Z2V0KCkpOworI2VuZGlmIC8vICFBU1NFUlRfRElTQUJMRUQKKyAgICAgICAgQ09NUElMRV9BU1NF
UlQoc2l6ZW9mKEFycmF5PFQ+KSA9PSBzaXplb2YoSW5zcGVjdG9yQXJyYXkpLCB0eXBlX2Nhc3Rf
cHJvYmxlbSk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxBcnJheTxUPio+KHN0YXRpY19j
YXN0PEluc3BlY3RvckFycmF5QmFzZSo+KGFycmF5LmdldCgpKSk7CisgICAgfQorCisjaWYgIUFT
U0VSVF9ESVNBQkxFRAorICAgIHN0YXRpYyB2b2lkIGFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBl
KEluc3BlY3RvclZhbHVlKiB2YWx1ZSkKKyAgICB7CisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JB
cnJheT4gYXJyYXk7CisgICAgICAgIGJvb2wgY2FzdFJlcyA9IHZhbHVlLT5hc0FycmF5KCZhcnJh
eSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoY2FzdFJlcywgY2FzdFJlcyk7CisgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBhcnJheS0+bGVuZ3RoKCk7IGkrKykKKyAgICAgICAgICAg
IEJpbmRpbmdUcmFpdHM8VD46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKGFycmF5LT5nZXQo
aSkuZ2V0KCkpOworICAgIH0KKyNlbmRpZiAvLyAhQVNTRVJUX0RJU0FCTEVECit9OworCit0ZW1w
bGF0ZTw+CitzdHJ1Y3QgQmluZGluZ1RyYWl0czxJbnNwZWN0b3JWYWx1ZT4geworI2lmICFBU1NF
UlRfRElTQUJMRUQKKyAgICBzdGF0aWMgdm9pZCBhc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShJ
bnNwZWN0b3JWYWx1ZSopCisgICAgeworICAgIH0KKyNlbmRpZiAvLyAhQVNTRVJUX0RJU0FCTEVE
Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBCaW5kaW5nVHJhaXRzPEluc3BlY3RvckFycmF5PiA6
IHB1YmxpYyBQcmltaXRpdmVCaW5kaW5nVHJhaXRzPEluc3BlY3RvclZhbHVlOjpUeXBlOjpBcnJh
eT4geyB9OwordGVtcGxhdGU8PiBzdHJ1Y3QgQmluZGluZ1RyYWl0czxJbnNwZWN0b3JPYmplY3Q+
IDogcHVibGljIFByaW1pdGl2ZUJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yVmFsdWU6OlR5cGU6Ok9i
amVjdD4geyB9OwordGVtcGxhdGU8PiBzdHJ1Y3QgQmluZGluZ1RyYWl0czxTdHJpbmc+IDogcHVi
bGljIFByaW1pdGl2ZUJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yVmFsdWU6OlR5cGU6OlN0cmluZz4g
eyB9OwordGVtcGxhdGU8PiBzdHJ1Y3QgQmluZGluZ1RyYWl0czxib29sPiA6IHB1YmxpYyBQcmlt
aXRpdmVCaW5kaW5nVHJhaXRzPEluc3BlY3RvclZhbHVlOjpUeXBlOjpCb29sZWFuPiB7IH07Cit0
ZW1wbGF0ZTw+IHN0cnVjdCBCaW5kaW5nVHJhaXRzPGRvdWJsZT4gOiBwdWJsaWMgUHJpbWl0aXZl
QmluZGluZ1RyYWl0czxJbnNwZWN0b3JWYWx1ZTo6VHlwZTo6TnVtYmVyPiB7IH07CisKKy8vIEZJ
WE1FOiBBZGQgYW4gSW5zcGVjdG9yOjpUeXBlIHRhZyBmb3IgaW50IHNvIHdlIGNhbiByZW1vdmUg
dGhpcyBzcGVjaWFsIGNhc2UuCit0ZW1wbGF0ZTw+CitzdHJ1Y3QgQmluZGluZ1RyYWl0czxpbnQ+
IHsKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgc3RhdGljIHZvaWQgYXNzZXJ0VmFsdWVIYXNF
eHBlY3RlZFR5cGUoSW5zcGVjdG9yVmFsdWUqIHZhbHVlKQorICAgIHsKKyAgICAgICAgZG91Ymxl
IHY7CisgICAgICAgIGJvb2wgY2FzdFJlcyA9IHZhbHVlLT5hc051bWJlcigmdik7CisgICAgICAg
IEFTU0VSVF9VTlVTRUQoY2FzdFJlcywgY2FzdFJlcyk7CisgICAgICAgIEFTU0VSVChzdGF0aWNf
Y2FzdDxkb3VibGU+KHN0YXRpY19jYXN0PGludD4odikpID09IHYpOworICAgIH0KICNlbmRpZiAv
LyAhQVNTRVJUX0RJU0FCTEVECi0gICAgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFR5cGVCdWls
ZGVyCiAKK3VzaW5nIFR5cGVCdWlsZGVyOjpCaW5kaW5nVHJhaXRzOworCiB9IC8vIG5hbWVzcGFj
ZSBJbnNwZWN0b3IKIAogI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5jcHAKaW5kZXggMTky
ZmI2YzlkOTA5MjRlNjE3YzVkMzJjNWQyZTNiYjlmY2NkM2UxYS4uZTJkMDM1ZGMwOWExYmJkODVm
MTdhYTAxMDhlMjAxODYxNWY5YTJkNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmNwcApAQCAtNTc5LDEzICs1NzksMTMgQEAgU3Ry
aW5nIEluc3BlY3RvclZhbHVlOjp0b0pTT05TdHJpbmcoKSBjb25zdAogCiB2b2lkIEluc3BlY3Rv
clZhbHVlOjp3cml0ZUpTT04oU3RyaW5nQnVpbGRlciogb3V0cHV0KSBjb25zdAogewotICAgIEFT
U0VSVChtX3R5cGUgPT0gVHlwZU51bGwpOworICAgIEFTU0VSVChtX3R5cGUgPT0gVHlwZTo6TnVs
bCk7CiAgICAgb3V0cHV0LT5hcHBlbmQobnVsbFN0cmluZywgNCk7CiB9CiAKIGJvb2wgSW5zcGVj
dG9yQmFzaWNWYWx1ZTo6YXNCb29sZWFuKGJvb2wqIG91dHB1dCkgY29uc3QKIHsKLSAgICBpZiAo
dHlwZSgpICE9IFR5cGVCb29sZWFuKQorICAgIGlmICh0eXBlKCkgIT0gVHlwZTo6Qm9vbGVhbikK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICpvdXRwdXQgPSBtX2Jvb2xWYWx1ZTsKICAgICBy
ZXR1cm4gdHJ1ZTsKQEAgLTU5Myw3ICs1OTMsNyBAQCBib29sIEluc3BlY3RvckJhc2ljVmFsdWU6
OmFzQm9vbGVhbihib29sKiBvdXRwdXQpIGNvbnN0CiAKIGJvb2wgSW5zcGVjdG9yQmFzaWNWYWx1
ZTo6YXNOdW1iZXIoZG91YmxlKiBvdXRwdXQpIGNvbnN0CiB7Ci0gICAgaWYgKHR5cGUoKSAhPSBU
eXBlTnVtYmVyKQorICAgIGlmICh0eXBlKCkgIT0gVHlwZTo6TnVtYmVyKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgKm91dHB1dCA9IG1fZG91YmxlVmFsdWU7CiAgICAgcmV0dXJuIHRydWU7
CkBAIC02MDEsNyArNjAxLDcgQEAgYm9vbCBJbnNwZWN0b3JCYXNpY1ZhbHVlOjphc051bWJlcihk
b3VibGUqIG91dHB1dCkgY29uc3QKIAogYm9vbCBJbnNwZWN0b3JCYXNpY1ZhbHVlOjphc051bWJl
cihmbG9hdCogb3V0cHV0KSBjb25zdAogewotICAgIGlmICh0eXBlKCkgIT0gVHlwZU51bWJlcikK
KyAgICBpZiAodHlwZSgpICE9IFR5cGU6Ok51bWJlcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICpvdXRwdXQgPSBzdGF0aWNfY2FzdDxmbG9hdD4obV9kb3VibGVWYWx1ZSk7CiAgICAgcmV0
dXJuIHRydWU7CkBAIC02MDksNyArNjA5LDcgQEAgYm9vbCBJbnNwZWN0b3JCYXNpY1ZhbHVlOjph
c051bWJlcihmbG9hdCogb3V0cHV0KSBjb25zdAogCiBib29sIEluc3BlY3RvckJhc2ljVmFsdWU6
OmFzTnVtYmVyKGludCogb3V0cHV0KSBjb25zdAogewotICAgIGlmICh0eXBlKCkgIT0gVHlwZU51
bWJlcikKKyAgICBpZiAodHlwZSgpICE9IFR5cGU6Ok51bWJlcikKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICpvdXRwdXQgPSBzdGF0aWNfY2FzdDxpbnQ+KG1fZG91YmxlVmFsdWUpOwogICAg
IHJldHVybiB0cnVlOwpAQCAtNjE3LDcgKzYxNyw3IEBAIGJvb2wgSW5zcGVjdG9yQmFzaWNWYWx1
ZTo6YXNOdW1iZXIoaW50KiBvdXRwdXQpIGNvbnN0CiAKIGJvb2wgSW5zcGVjdG9yQmFzaWNWYWx1
ZTo6YXNOdW1iZXIodW5zaWduZWQqIG91dHB1dCkgY29uc3QKIHsKLSAgICBpZiAodHlwZSgpICE9
IFR5cGVOdW1iZXIpCisgICAgaWYgKHR5cGUoKSAhPSBUeXBlOjpOdW1iZXIpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAqb3V0cHV0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fZG91Ymxl
VmFsdWUpOwogICAgIHJldHVybiB0cnVlOwpAQCAtNjI1LDcgKzYyNSw3IEBAIGJvb2wgSW5zcGVj
dG9yQmFzaWNWYWx1ZTo6YXNOdW1iZXIodW5zaWduZWQqIG91dHB1dCkgY29uc3QKIAogYm9vbCBJ
bnNwZWN0b3JCYXNpY1ZhbHVlOjphc051bWJlcihsb25nKiBvdXRwdXQpIGNvbnN0CiB7Ci0gICAg
aWYgKHR5cGUoKSAhPSBUeXBlTnVtYmVyKQorICAgIGlmICh0eXBlKCkgIT0gVHlwZTo6TnVtYmVy
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgKm91dHB1dCA9IHN0YXRpY19jYXN0PGxvbmc+
KG1fZG91YmxlVmFsdWUpOwogICAgIHJldHVybiB0cnVlOwpAQCAtNjMzLDcgKzYzMyw3IEBAIGJv
b2wgSW5zcGVjdG9yQmFzaWNWYWx1ZTo6YXNOdW1iZXIobG9uZyogb3V0cHV0KSBjb25zdAogCiBi
b29sIEluc3BlY3RvckJhc2ljVmFsdWU6OmFzTnVtYmVyKGxvbmcgbG9uZyogb3V0cHV0KSBjb25z
dAogewotICAgIGlmICh0eXBlKCkgIT0gVHlwZU51bWJlcikKKyAgICBpZiAodHlwZSgpICE9IFR5
cGU6Ok51bWJlcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICpvdXRwdXQgPSBzdGF0aWNf
Y2FzdDxsb25nIGxvbmc+KG1fZG91YmxlVmFsdWUpOwogICAgIHJldHVybiB0cnVlOwpAQCAtNjQx
LDcgKzY0MSw3IEBAIGJvb2wgSW5zcGVjdG9yQmFzaWNWYWx1ZTo6YXNOdW1iZXIobG9uZyBsb25n
KiBvdXRwdXQpIGNvbnN0CiAKIGJvb2wgSW5zcGVjdG9yQmFzaWNWYWx1ZTo6YXNOdW1iZXIodW5z
aWduZWQgbG9uZyogb3V0cHV0KSBjb25zdAogewotICAgIGlmICh0eXBlKCkgIT0gVHlwZU51bWJl
cikKKyAgICBpZiAodHlwZSgpICE9IFR5cGU6Ok51bWJlcikKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICpvdXRwdXQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPihtX2RvdWJsZVZhbHVl
KTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTY0OSw3ICs2NDksNyBAQCBib29sIEluc3BlY3RvckJh
c2ljVmFsdWU6OmFzTnVtYmVyKHVuc2lnbmVkIGxvbmcqIG91dHB1dCkgY29uc3QKIAogYm9vbCBJ
bnNwZWN0b3JCYXNpY1ZhbHVlOjphc051bWJlcih1bnNpZ25lZCBsb25nIGxvbmcqIG91dHB1dCkg
Y29uc3QKIHsKLSAgICBpZiAodHlwZSgpICE9IFR5cGVOdW1iZXIpCisgICAgaWYgKHR5cGUoKSAh
PSBUeXBlOjpOdW1iZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAqb3V0cHV0ID0gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPihtX2RvdWJsZVZhbHVlKTsKICAgICByZXR1cm4g
dHJ1ZTsKQEAgLTY1NywxMyArNjU3LDEzIEBAIGJvb2wgSW5zcGVjdG9yQmFzaWNWYWx1ZTo6YXNO
dW1iZXIodW5zaWduZWQgbG9uZyBsb25nKiBvdXRwdXQpIGNvbnN0CiAKIHZvaWQgSW5zcGVjdG9y
QmFzaWNWYWx1ZTo6d3JpdGVKU09OKFN0cmluZ0J1aWxkZXIqIG91dHB1dCkgY29uc3QKIHsKLSAg
ICBBU1NFUlQodHlwZSgpID09IFR5cGVCb29sZWFuIHx8IHR5cGUoKSA9PSBUeXBlTnVtYmVyKTsK
LSAgICBpZiAodHlwZSgpID09IFR5cGVCb29sZWFuKSB7CisgICAgQVNTRVJUKHR5cGUoKSA9PSBU
eXBlOjpCb29sZWFuIHx8IHR5cGUoKSA9PSBUeXBlOjpOdW1iZXIpOworICAgIGlmICh0eXBlKCkg
PT0gVHlwZTo6Qm9vbGVhbikgewogICAgICAgICBpZiAobV9ib29sVmFsdWUpCiAgICAgICAgICAg
ICBvdXRwdXQtPmFwcGVuZCh0cnVlU3RyaW5nLCA0KTsKICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgb3V0cHV0LT5hcHBlbmQoZmFsc2VTdHJpbmcsIDUpOwotICAgIH0gZWxzZSBpZiAodHlwZSgp
ID09IFR5cGVOdW1iZXIpIHsKKyAgICB9IGVsc2UgaWYgKHR5cGUoKSA9PSBUeXBlOjpOdW1iZXIp
IHsKICAgICAgICAgTnVtYmVyVG9MU3RyaW5nQnVmZmVyIGJ1ZmZlcjsKICAgICAgICAgaWYgKCFz
dGQ6OmlzZmluaXRlKG1fZG91YmxlVmFsdWUpKSB7CiAgICAgICAgICAgICBvdXRwdXQtPmFwcGVu
ZChudWxsU3RyaW5nLCA0KTsKQEAgLTY5Myw3ICs2OTMsNyBAQCBib29sIEluc3BlY3RvclN0cmlu
Zzo6YXNTdHJpbmcoU3RyaW5nKiBvdXRwdXQpIGNvbnN0CiAKIHZvaWQgSW5zcGVjdG9yU3RyaW5n
Ojp3cml0ZUpTT04oU3RyaW5nQnVpbGRlciogb3V0cHV0KSBjb25zdAogewotICAgIEFTU0VSVCh0
eXBlKCkgPT0gVHlwZVN0cmluZyk7CisgICAgQVNTRVJUKHR5cGUoKSA9PSBUeXBlOjpTdHJpbmcp
OwogICAgIGRvdWJsZVF1b3RlU3RyaW5nKG1fc3RyaW5nVmFsdWUsIG91dHB1dCk7CiB9CiAKQEAg
LTc4Niw3ICs3ODYsNyBAQCB2b2lkIEluc3BlY3Rvck9iamVjdEJhc2U6OndyaXRlSlNPTihTdHJp
bmdCdWlsZGVyKiBvdXRwdXQpIGNvbnN0CiB9CiAKIEluc3BlY3Rvck9iamVjdEJhc2U6Okluc3Bl
Y3Rvck9iamVjdEJhc2UoKQotICAgIDogSW5zcGVjdG9yVmFsdWUoVHlwZU9iamVjdCkKKyAgICA6
IEluc3BlY3RvclZhbHVlKFR5cGU6Ok9iamVjdCkKICAgICAsIG1fZGF0YSgpCiAgICAgLCBtX29y
ZGVyKCkKIHsKQEAgLTgyMSw3ICs4MjEsNyBAQCB2b2lkIEluc3BlY3RvckFycmF5QmFzZTo6d3Jp
dGVKU09OKFN0cmluZ0J1aWxkZXIqIG91dHB1dCkgY29uc3QKIH0KIAogSW5zcGVjdG9yQXJyYXlC
YXNlOjpJbnNwZWN0b3JBcnJheUJhc2UoKQotICAgIDogSW5zcGVjdG9yVmFsdWUoVHlwZUFycmF5
KQorICAgIDogSW5zcGVjdG9yVmFsdWUoVHlwZTo6QXJyYXkpCiAgICAgLCBtX2RhdGEoKQogewog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JW
YWx1ZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVz
LmgKaW5kZXggM2I4NjE2NjRkYTMzNzlkZWI1Njg5YmMwMDEzNGRlMjZlYmE2NzNkYS4uOTcxODcx
MjMyZDlhZWE3M2JiOTdiYmRlODFlZWE2ZjU2N2E0N2Y0OCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oCkBAIC00NywyMyArNDcsMjQg
QEAgY2xhc3MgSlNfRVhQT1JUX1BSSVZBVEUgSW5zcGVjdG9yVmFsdWUgOiBwdWJsaWMgUmVmQ291
bnRlZDxJbnNwZWN0b3JWYWx1ZT4gewogcHVibGljOgogICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4
RGVwdGggPSAxMDAwOwogCi0gICAgSW5zcGVjdG9yVmFsdWUoKSA6IG1fdHlwZShUeXBlTnVsbCkg
eyB9CisgICAgSW5zcGVjdG9yVmFsdWUoKQorICAgICAgICA6IG1fdHlwZShUeXBlOjpOdWxsKSB7
IH0KICAgICB2aXJ0dWFsIH5JbnNwZWN0b3JWYWx1ZSgpIHsgfQogCiAgICAgc3RhdGljIFBhc3NS
ZWZQdHI8SW5zcGVjdG9yVmFsdWU+IG51bGwoKTsKIAotICAgIHR5cGVkZWYgZW51bSB7Ci0gICAg
ICAgIFR5cGVOdWxsID0gMCwKLSAgICAgICAgVHlwZUJvb2xlYW4sCi0gICAgICAgIFR5cGVOdW1i
ZXIsCi0gICAgICAgIFR5cGVTdHJpbmcsCi0gICAgICAgIFR5cGVPYmplY3QsCi0gICAgICAgIFR5
cGVBcnJheQotICAgIH0gVHlwZTsKKyAgICBlbnVtIGNsYXNzIFR5cGUgeworICAgICAgICBOdWxs
ID0gMCwKKyAgICAgICAgQm9vbGVhbiwKKyAgICAgICAgTnVtYmVyLAorICAgICAgICBTdHJpbmcs
CisgICAgICAgIE9iamVjdCwKKyAgICAgICAgQXJyYXkKKyAgICB9OwogCiAgICAgVHlwZSB0eXBl
KCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CiAKLSAgICBib29sIGlzTnVsbCgpIGNvbnN0IHsg
cmV0dXJuIG1fdHlwZSA9PSBUeXBlTnVsbDsgfQorICAgIGJvb2wgaXNOdWxsKCkgY29uc3QgeyBy
ZXR1cm4gbV90eXBlID09IFR5cGU6Ok51bGw7IH0KIAogICAgIHZpcnR1YWwgYm9vbCBhc0Jvb2xl
YW4oYm9vbCogb3V0cHV0KSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgYXNOdW1iZXIoZG91Ymxl
KiBvdXRwdXQpIGNvbnN0OwpAQCAtMTEzLDkgKzExNCwxNyBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCB2b2lkIHdyaXRlSlNPTihTdHJpbmdCdWlsZGVyKiBvdXRwdXQpIGNvbnN0IG92ZXJyaWRlOwog
CiBwcml2YXRlOgotICAgIGV4cGxpY2l0IEluc3BlY3RvckJhc2ljVmFsdWUoYm9vbCB2YWx1ZSkg
OiBJbnNwZWN0b3JWYWx1ZShUeXBlQm9vbGVhbiksIG1fYm9vbFZhbHVlKHZhbHVlKSB7IH0KLSAg
ICBleHBsaWNpdCBJbnNwZWN0b3JCYXNpY1ZhbHVlKGludCB2YWx1ZSkgOiBJbnNwZWN0b3JWYWx1
ZShUeXBlTnVtYmVyKSwgbV9kb3VibGVWYWx1ZSgoZG91YmxlKXZhbHVlKSB7IH0KLSAgICBleHBs
aWNpdCBJbnNwZWN0b3JCYXNpY1ZhbHVlKGRvdWJsZSB2YWx1ZSkgOiBJbnNwZWN0b3JWYWx1ZShU
eXBlTnVtYmVyKSwgbV9kb3VibGVWYWx1ZSh2YWx1ZSkgeyB9CisgICAgZXhwbGljaXQgSW5zcGVj
dG9yQmFzaWNWYWx1ZShib29sIHZhbHVlKQorICAgICAgICA6IEluc3BlY3RvclZhbHVlKFR5cGU6
OkJvb2xlYW4pCisgICAgICAgICwgbV9ib29sVmFsdWUodmFsdWUpIHsgfQorCisgICAgZXhwbGlj
aXQgSW5zcGVjdG9yQmFzaWNWYWx1ZShpbnQgdmFsdWUpCisgICAgICAgIDogSW5zcGVjdG9yVmFs
dWUoVHlwZTo6TnVtYmVyKQorICAgICAgICAsIG1fZG91YmxlVmFsdWUoc3RhdGljX2Nhc3Q8ZG91
YmxlPih2YWx1ZSkpIHsgfQorCisgICAgZXhwbGljaXQgSW5zcGVjdG9yQmFzaWNWYWx1ZShkb3Vi
bGUgdmFsdWUpCisgICAgICAgIDogSW5zcGVjdG9yVmFsdWUoVHlwZTo6TnVtYmVyKQorICAgICAg
ICAsIG1fZG91YmxlVmFsdWUodmFsdWUpIHsgfQogCiAgICAgdW5pb24gewogICAgICAgICBib29s
IG1fYm9vbFZhbHVlOwpAQCAtMTMzLDggKzE0MiwxMyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2
b2lkIHdyaXRlSlNPTihTdHJpbmdCdWlsZGVyKiBvdXRwdXQpIGNvbnN0IG92ZXJyaWRlOwogCiBw
cml2YXRlOgotICAgIGV4cGxpY2l0IEluc3BlY3RvclN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVl
KSA6IEluc3BlY3RvclZhbHVlKFR5cGVTdHJpbmcpLCBtX3N0cmluZ1ZhbHVlKHZhbHVlKSB7IH0K
LSAgICBleHBsaWNpdCBJbnNwZWN0b3JTdHJpbmcoY29uc3QgY2hhciogdmFsdWUpIDogSW5zcGVj
dG9yVmFsdWUoVHlwZVN0cmluZyksIG1fc3RyaW5nVmFsdWUodmFsdWUpIHsgfQorICAgIGV4cGxp
Y2l0IEluc3BlY3RvclN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgICAgICA6IEluc3Bl
Y3RvclZhbHVlKFR5cGU6OlN0cmluZykKKyAgICAgICAgLCBtX3N0cmluZ1ZhbHVlKHZhbHVlKSB7
IH0KKworICAgIGV4cGxpY2l0IEluc3BlY3RvclN0cmluZyhjb25zdCBjaGFyKiB2YWx1ZSkKKyAg
ICAgICAgOiBJbnNwZWN0b3JWYWx1ZShUeXBlOjpTdHJpbmcpCisgICAgICAgICwgbV9zdHJpbmdW
YWx1ZSh2YWx1ZSkgeyB9CiAKICAgICBTdHJpbmcgbV9zdHJpbmdWYWx1ZTsKIH07CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JEZWJ1
Z2dlckFnZW50LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0lu
c3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwCmluZGV4IDUwOTZhNmM5OWQyYTkxMjA0MzhjNjhmZGM4
ODc1OGY2Y2JmYWViOWYuLjVlMWI2NDY0NjNkZjU1MWU4MmQ0NTk1N2I1YWY3Yzk2MGZlYzI1ZWMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3Bl
Y3RvckRlYnVnZ2VyQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3IvYWdlbnRzL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwCkBAIC00MjksNyArNDI5LDcgQEAg
dm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpnZXRGdW5jdGlvbkRldGFpbHMoRXJyb3JTdHJp
bmcqIGVycm9yU3RyaW5nLCBjb25zdAogICAgIGluamVjdGVkU2NyaXB0LmdldEZ1bmN0aW9uRGV0
YWlscyhlcnJvclN0cmluZywgZnVuY3Rpb25JZCwgJmRldGFpbHMpOwogfQogCi12b2lkIEluc3Bl
Y3RvckRlYnVnZ2VyQWdlbnQ6OnNjaGVkdWxlUGF1c2VPbk5leHRTdGF0ZW1lbnQoSW5zcGVjdG9y
RGVidWdnZXJGcm9udGVuZERpc3BhdGNoZXI6OlJlYXNvbjo6RW51bSBicmVha1JlYXNvbiwgUGFz
c1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGRhdGEpCit2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdl
bnQ6OnNjaGVkdWxlUGF1c2VPbk5leHRTdGF0ZW1lbnQoSW5zcGVjdG9yRGVidWdnZXJGcm9udGVu
ZERpc3BhdGNoZXI6OlJlYXNvbiBicmVha1JlYXNvbiwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IGRhdGEpCiB7CiAgICAgaWYgKG1famF2YVNjcmlwdFBhdXNlU2NoZWR1bGVkKQogICAgICAg
ICByZXR1cm47CkBAIC02ODAsNyArNjgwLDcgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50
OjpkaWRDb250aW51ZSgpCiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnJlc3VtZWQoKTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpicmVha1Byb2dyYW0oSW5zcGVjdG9yRGVi
dWdnZXJGcm9udGVuZERpc3BhdGNoZXI6OlJlYXNvbjo6RW51bSBicmVha1JlYXNvbiwgUGFzc1Jl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGRhdGEpCit2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6
OmJyZWFrUHJvZ3JhbShJbnNwZWN0b3JEZWJ1Z2dlckZyb250ZW5kRGlzcGF0Y2hlcjo6UmVhc29u
IGJyZWFrUmVhc29uLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZGF0YSkKIHsKICAgICBt
X2JyZWFrUmVhc29uID0gYnJlYWtSZWFzb247CiAgICAgbV9icmVha0F1eERhdGEgPSBkYXRhOwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVj
dG9yRGVidWdnZXJBZ2VudC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2Vu
dHMvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5oCmluZGV4IGViMjI3MGE5Y2UyNDI4MTNmOWQ0ZWU1
NTkwMGZmODNhOTk2ZjQwNmIuLjg0N2U3OGI2MGY1ZGNjZjk2OWZiM2QwMTEzZWQyNTIzZWEwMjdk
M2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0lu
c3BlY3RvckRlYnVnZ2VyQWdlbnQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL2FnZW50cy9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmgKQEAgLTkxLDkgKzkxLDkgQEAgcHVi
bGljOgogICAgIAogICAgIHZvaWQgaGFuZGxlQ29uc29sZUFzc2VydCgpOwogCi0gICAgdm9pZCBz
Y2hlZHVsZVBhdXNlT25OZXh0U3RhdGVtZW50KEluc3BlY3RvckRlYnVnZ2VyRnJvbnRlbmREaXNw
YXRjaGVyOjpSZWFzb246OkVudW0gYnJlYWtSZWFzb24sIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBkYXRhKTsKKyAgICB2b2lkIHNjaGVkdWxlUGF1c2VPbk5leHRTdGF0ZW1lbnQoSW5zcGVj
dG9yRGVidWdnZXJGcm9udGVuZERpc3BhdGNoZXI6OlJlYXNvbiBicmVha1JlYXNvbiwgUGFzc1Jl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGRhdGEpOwogICAgIHZvaWQgY2FuY2VsUGF1c2VPbk5leHRT
dGF0ZW1lbnQoKTsKLSAgICB2b2lkIGJyZWFrUHJvZ3JhbShJbnNwZWN0b3JEZWJ1Z2dlckZyb250
ZW5kRGlzcGF0Y2hlcjo6UmVhc29uOjpFbnVtIGJyZWFrUmVhc29uLCBQYXNzUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gZGF0YSk7CisgICAgdm9pZCBicmVha1Byb2dyYW0oSW5zcGVjdG9yRGVidWdn
ZXJGcm9udGVuZERpc3BhdGNoZXI6OlJlYXNvbiBicmVha1JlYXNvbiwgUGFzc1JlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IGRhdGEpOwogICAgIHZvaWQgc2NyaXB0RXhlY3V0aW9uQmxvY2tlZEJ5Q1NQ
KGNvbnN0IFN0cmluZyYgZGlyZWN0aXZlVGV4dCk7CiAKICAgICBjbGFzcyBMaXN0ZW5lciB7CkBA
IC0xNTksNyArMTU5LDcgQEAgcHJpdmF0ZToKICAgICBCcmVha3BvaW50SWRlbnRpZmllclRvRGVi
dWdTZXJ2ZXJCcmVha3BvaW50SURzTWFwIG1fYnJlYWtwb2ludElkZW50aWZpZXJUb0RlYnVnU2Vy
dmVyQnJlYWtwb2ludElEczsKICAgICBCcmVha3BvaW50SWRlbnRpZmllclRvQnJlYWtwb2ludE1h
cCBtX2phdmFTY3JpcHRCcmVha3BvaW50czsKICAgICBKU0M6OkJyZWFrcG9pbnRJRCBtX2NvbnRp
bnVlVG9Mb2NhdGlvbkJyZWFrcG9pbnRJRDsKLSAgICBJbnNwZWN0b3JEZWJ1Z2dlckZyb250ZW5k
RGlzcGF0Y2hlcjo6UmVhc29uOjpFbnVtIG1fYnJlYWtSZWFzb247CisgICAgSW5zcGVjdG9yRGVi
dWdnZXJGcm9udGVuZERpc3BhdGNoZXI6OlJlYXNvbiBtX2JyZWFrUmVhc29uOwogICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IG1fYnJlYWtBdXhEYXRhOwogICAgIGJvb2wgbV9lbmFibGVkOwog
ICAgIGJvb2wgbV9qYXZhU2NyaXB0UGF1c2VTY2hlZHVsZWQ7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JSdW50aW1lQWdlbnQuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUnVudGlt
ZUFnZW50LmNwcAppbmRleCA5ZWZlZTE1YmRiODQxMWNjYmEzZmE5Mzk0OTZkNWViOTZkOWY0MjAz
Li45NDBiOGJkNTA2OWFiMDM3YjAzMzhjNmExZTMwYmZlMWQwZTQ2MDQ1IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JSdW50aW1lQWdl
bnQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3Bl
Y3RvclJ1bnRpbWVBZ2VudC5jcHAKQEAgLTg1LDcgKzg1LDcgQEAgc3RhdGljIFBhc3NSZWZQdHI8
SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UnVudGltZTo6RXJyb3JSYW5nZT4gYnVpbGRFcnJvclJh
bmdlT2IKICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JS
dW50aW1lQWdlbnQ6OnBhcnNlKEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBleHByZXNzaW9u
LCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpSdW50aW1lOjpTeW50YXhFcnJvclR5cGU6OkVudW0q
IHJlc3VsdCwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6T3B0T3V0cHV0PFN0cmluZz4qIG1lc3Nh
Z2UsIFJlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpSdW50aW1lOjpFcnJvclJhbmdlPiYg
cmFuZ2UpCit2b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6cGFyc2UoRXJyb3JTdHJpbmcqLCBj
b25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlJ1bnRpbWU6
OlN5bnRheEVycm9yVHlwZSogcmVzdWx0LCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpPcHRPdXRw
dXQ8U3RyaW5nPiogbWVzc2FnZSwgUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlJ1bnRp
bWU6OkVycm9yUmFuZ2U+JiByYW5nZSkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxWTSgpOwogICAg
IEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKQEAgLTE5NCwxOSArMTk0LDE5IEBAIHZvaWQgSW5zcGVj
dG9yUnVudGltZUFnZW50OjpydW4oRXJyb3JTdHJpbmcqKQogewogfQogCi12b2lkIEluc3BlY3Rv
clJ1bnRpbWVBZ2VudDo6Z2V0UnVudGltZVR5cGVzRm9yVmFyaWFibGVzQXRPZmZzZXRzKEVycm9y
U3RyaW5nKiBlcnJvclN0cmluZywgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJy
YXk+JiBpbl9sb2NhdGlvbnMsIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5PiYgb3V0
X3R5cGVzKQordm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmdldFJ1bnRpbWVUeXBlc0ZvclZh
cmlhYmxlc0F0T2Zmc2V0cyhFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGNvbnN0IFJlZlB0cjxJ
bnNwZWN0b3I6Okluc3BlY3RvckFycmF5PiYgbG9jYXRpb25zLCBSZWZQdHI8SW5zcGVjdG9yOjpU
eXBlQnVpbGRlcjo6QXJyYXk8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UnVudGltZTo6VHlwZURl
c2NyaXB0aW9uPj4mIHR5cGVEZXNjcmlwdGlvbnMpCiB7CiAgICAgc3RhdGljIGNvbnN0IGJvb2wg
dmVyYm9zZSA9IGZhbHNlOwogICAgIFZNJiB2bSA9IGdsb2JhbFZNKCk7Ci0gICAgb3V0X3R5cGVz
ID0gSW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CisgICAgdHlwZURlc2NyaXB0
aW9ucyA9IEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5PEluc3BlY3Rvcjo6VHlwZUJ1aWxk
ZXI6OlJ1bnRpbWU6OlR5cGVEZXNjcmlwdGlvbj46OmNyZWF0ZSgpOwogICAgIGlmICghdm0uaXNQ
cm9maWxpbmdUeXBlc1dpdGhIaWdoRmlkZWxpdHkoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
ZG91YmxlIHN0YXJ0ID0gY3VycmVudFRpbWVNUygpOwogICAgIHZtLmhpZ2hGaWRlbGl0eUxvZygp
LT5wcm9jZXNzSGlnaEZpZGVsaXR5TG9nKCJVc2VyIFF1ZXJ5Iik7CiAKLSAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGluX2xvY2F0aW9ucy0+bGVuZ3RoKCk7IGkrKykgewotICAgICAgICBSZWZQ
dHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4gdmFsdWUgPSBpbl9sb2NhdGlvbnMtPmdldChp
KTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxvY2F0aW9ucy0+bGVuZ3RoKCk7IGkrKykg
eworICAgICAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4gdmFsdWUgPSBsb2Nh
dGlvbnMtPmdldChpKTsKICAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbG9jYXRpb247
CiAgICAgICAgIGlmICghdmFsdWUtPmFzT2JqZWN0KCZsb2NhdGlvbikpIHsKICAgICAgICAgICAg
ICplcnJvclN0cmluZyA9IEFTQ0lJTGl0ZXJhbCgiQXJyYXkgb2YgVHlwZUxvY2F0aW9uIG9iamVj
dHMgaGFzIGFuIG9iamVjdCB0aGF0IGRvZXMgbm90IGhhdmUgdHlwZSBvZiBUeXBlTG9jYXRpb24u
Iik7CkBAIC0yMTksMTEgKzIxOSwxMSBAQCB2b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6Z2V0
UnVudGltZVR5cGVzRm9yVmFyaWFibGVzQXRPZmZzZXRzKEVycm9yU3RyaW5nKiBlcgogICAgICAg
ICBsb2NhdGlvbi0+Z2V0TnVtYmVyKEFTQ0lJTGl0ZXJhbCgidHlwZUluZm9ybWF0aW9uRGVzY3Jp
cHRvciIpLCAmZGVzY3JpcHRvcik7CiAgICAgICAgIGxvY2F0aW9uLT5nZXRTdHJpbmcoQVNDSUlM
aXRlcmFsKCJzb3VyY2VJRCIpLCAmc291cmNlSURBc1N0cmluZyk7CiAgICAgICAgIGxvY2F0aW9u
LT5nZXROdW1iZXIoQVNDSUlMaXRlcmFsKCJkaXZvdCIpLCAmZGl2b3QpOwotICAgICAgICAKLSAg
ICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiB0eXBlRGVzY3JpcHRpb24g
PSBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisKKyAgICAgICAgUmVmUHRy
PEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OlR5cGVEZXNjcmlwdGlvbj4gdHlwZURl
c2NyaXB0aW9uID0gSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UnVudGltZTo6VHlwZURlc2NyaXB0
aW9uOjpjcmVhdGUoKTsKICAgICAgICAgYm9vbCBva2F5OwogICAgICAgICB2bS5oaWdoRmlkZWxp
dHlUeXBlUHJvZmlsZXIoKS0+Z2V0VHlwZXNGb3JWYXJpYWJsZUF0T2Zmc2V0Rm9ySW5zcGVjdG9y
KHN0YXRpY19jYXN0PFR5cGVQcm9maWxlclNlYXJjaERlc2NyaXB0b3I+KGRlc2NyaXB0b3IpLCBk
aXZvdCwgc291cmNlSURBc1N0cmluZy50b0ludFB0clN0cmljdCgmb2theSksIHR5cGVEZXNjcmlw
dGlvbik7Ci0gICAgICAgIG91dF90eXBlcy0+cHVzaE9iamVjdCh0eXBlRGVzY3JpcHRpb24pOwor
ICAgICAgICB0eXBlRGVzY3JpcHRpb25zLT5hZGRJdGVtKHR5cGVEZXNjcmlwdGlvbik7CiAgICAg
fQogCiAgICAgZG91YmxlIGVuZCA9IGN1cnJlbnRUaW1lTVMoKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclJ1bnRpbWVBZ2VudC5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUnVudGlt
ZUFnZW50LmgKaW5kZXggNzZkMzM3MjFmOWFkYzZlYzA2YWY5MDI1ZDM0ODYzYzMwMzQ0M2ZkOS4u
NTJlNjNiYzg1Zjg1MWUwNjBhNjQ5MmY3NGQ3NTkzMzc3ZjZmZWFhNCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUnVudGltZUFnZW50
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9y
UnVudGltZUFnZW50LmgKQEAgLTU5LDE0ICs1OSwxNCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFs
IHZvaWQgZW5hYmxlKEVycm9yU3RyaW5nKikgb3ZlcnJpZGUgeyBtX2VuYWJsZWQgPSB0cnVlOyB9
CiAgICAgdmlydHVhbCB2b2lkIGRpc2FibGUoRXJyb3JTdHJpbmcqKSBvdmVycmlkZSB7IG1fZW5h
YmxlZCA9IGZhbHNlOyB9Ci0gICAgdmlydHVhbCB2b2lkIHBhcnNlKEVycm9yU3RyaW5nKiwgY29u
c3QgU3RyaW5nJiBleHByZXNzaW9uLCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpSdW50aW1lOjpT
eW50YXhFcnJvclR5cGU6OkVudW0qIHJlc3VsdCwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6T3B0
T3V0cHV0PFN0cmluZz4qIG1lc3NhZ2UsIFJlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpS
dW50aW1lOjpFcnJvclJhbmdlPiYpIG92ZXJyaWRlIGZpbmFsOworICAgIHZpcnR1YWwgdm9pZCBw
YXJzZShFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgSW5zcGVjdG9yOjpU
eXBlQnVpbGRlcjo6UnVudGltZTo6U3ludGF4RXJyb3JUeXBlKiByZXN1bHQsIEluc3BlY3Rvcjo6
VHlwZUJ1aWxkZXI6Ok9wdE91dHB1dDxTdHJpbmc+KiBtZXNzYWdlLCBSZWZQdHI8SW5zcGVjdG9y
OjpUeXBlQnVpbGRlcjo6UnVudGltZTo6RXJyb3JSYW5nZT4mKSBvdmVycmlkZSBmaW5hbDsKICAg
ICB2aXJ0dWFsIHZvaWQgZXZhbHVhdGUoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIGV4cHJl
c3Npb24sIGNvbnN0IFN0cmluZyogb2JqZWN0R3JvdXAsIGNvbnN0IGJvb2wqIGluY2x1ZGVDb21t
YW5kTGluZUFQSSwgY29uc3QgYm9vbCogZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25z
b2xlLCBjb25zdCBpbnQqIGV4ZWN1dGlvbkNvbnRleHRJZCwgY29uc3QgYm9vbCogcmV0dXJuQnlW
YWx1ZSwgY29uc3QgYm9vbCogZ2VuZXJhdGVQcmV2aWV3LCBSZWZQdHI8SW5zcGVjdG9yOjpUeXBl
QnVpbGRlcjo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0LCBJbnNwZWN0b3I6OlR5cGVC
dWlsZGVyOjpPcHRPdXRwdXQ8Ym9vbD4qIHdhc1Rocm93bikgb3ZlcnJpZGUgZmluYWw7CiAgICAg
dmlydHVhbCB2b2lkIGNhbGxGdW5jdGlvbk9uKEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBv
YmplY3RJZCwgY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9y
OjpJbnNwZWN0b3JBcnJheT4qIG9wdGlvbmFsQXJndW1lbnRzLCBjb25zdCBib29sKiBkb05vdFBh
dXNlT25FeGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUsIGNvbnN0IGJvb2wqIHJldHVybkJ5VmFsdWUs
IGNvbnN0IGJvb2wqIGdlbmVyYXRlUHJldmlldywgUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxk
ZXI6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3VsdCwgSW5zcGVjdG9yOjpUeXBlQnVpbGRl
cjo6T3B0T3V0cHV0PGJvb2w+KiB3YXNUaHJvd24pIG92ZXJyaWRlIGZpbmFsOwogICAgIHZpcnR1
YWwgdm9pZCByZWxlYXNlT2JqZWN0KEVycm9yU3RyaW5nKiwgY29uc3QgRXJyb3JTdHJpbmcmIG9i
amVjdElkKSBvdmVycmlkZSBmaW5hbDsKICAgICB2aXJ0dWFsIHZvaWQgZ2V0UHJvcGVydGllcyhF
cnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsIGNvbnN0IGJvb2wqIG93blByb3Bl
cnRpZXMsIFJlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheTxJbnNwZWN0b3I6OlR5
cGVCdWlsZGVyOjpSdW50aW1lOjpQcm9wZXJ0eURlc2NyaXB0b3I+PiYgcmVzdWx0LCBSZWZQdHI8
SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UnVu
dGltZTo6SW50ZXJuYWxQcm9wZXJ0eURlc2NyaXB0b3I+PiYgaW50ZXJuYWxQcm9wZXJ0aWVzKSBv
dmVycmlkZSBmaW5hbDsKICAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZU9iamVjdEdyb3VwKEVycm9y
U3RyaW5nKiwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCkgb3ZlcnJpZGUgZmluYWw7CiAgICAg
dmlydHVhbCB2b2lkIHJ1bihFcnJvclN0cmluZyopIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9p
ZCBnZXRSdW50aW1lVHlwZXNGb3JWYXJpYWJsZXNBdE9mZnNldHMoRXJyb3JTdHJpbmcqLCBjb25z
dCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheT4mIGluX2xvY2F0aW9ucywgUmVmUHRy
PEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXk+JiBvdXRfdHlwZXMpIG92ZXJyaWRlOworICAgIHZp
cnR1YWwgdm9pZCBnZXRSdW50aW1lVHlwZXNGb3JWYXJpYWJsZXNBdE9mZnNldHMoRXJyb3JTdHJp
bmcqLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheT4mIGxvY2F0aW9ucywg
UmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5PEluc3BlY3Rvcjo6VHlwZUJ1aWxk
ZXI6OlJ1bnRpbWU6OlR5cGVEZXNjcmlwdGlvbj4+Jikgb3ZlcnJpZGU7CiAgICAgCiAgICAgdm9p
ZCBzZXRTY3JpcHREZWJ1Z1NlcnZlcihTY3JpcHREZWJ1Z1NlcnZlciogc2NyaXB0RGVidWdTZXJ2
ZXIpIHsgbV9zY3JpcHREZWJ1Z1NlcnZlciA9IHNjcmlwdERlYnVnU2VydmVyOyB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvUnVudGltZS5q
c29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9SdW50aW1lLmpz
b24KaW5kZXggNjRkNzIzYjI1MWU0YmI4Y2FiODhhMTFjYWY0MTMzZTY4Mjc3YzQ2MC4uOGQ4YTNk
YTI4YmJjYTk3Y2UzMTcxNWUyNmQwZGQ4M2I2Mzk4ZWQ3NSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9SdW50aW1lLmpzb24KKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9SdW50aW1lLmpzb24KQEAgLTExNiw5
ICsxMTYsOSBAQAogICAgICAgICAgICAgImlkIjogIlN0cnVjdHVyZURlc2NyaXB0aW9uIiwKICAg
ICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCiAgICAgICAgICAgICAicHJvcGVydGllcyI6IFsK
LSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImZpZWxkcyIsICJ0eXBlIjogImFycmF5IiwgICJp
dGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9LCAiZGVzY3JpcHRpb24iOiAiQXJyYXkgb2Ygc3Ry
aW5ncywgd2hlcmUgdGhlIHN0cmluZ3MgcmVwcmVzZW50IG9iamVjdCBwcm9wZXJ0aWVzLiIgfSwK
LSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbnN0cnVjdG9yTmFtZSIsICJ0eXBlIjogInN0
cmluZyIsICJkZXNjcmlwdGlvbiI6ICJOYW1lIG9mIHRoZSBjb25zdHJ1Y3Rvci4iIH0sCi0gICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJwcm90b3R5cGVTdHJ1Y3R1cmUiLCAiJHJlZiI6ICJTdHJ1
Y3R1cmVEZXNjcmlwdGlvbiIsICJvcHRpb25hbCI6ICJ0cnVlIiwgImRlc2NyaXB0aW9uIjogIlBv
aW50ZXIgdG8gdGhlIFN0cnVjdHVyZVJlcHJlc2VudGF0aW9uIG9mIHRoZSBwcm90b3lwZSBpZiBv
bmUgZXhpc3RzLiIgfQorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZmllbGRzIiwgInR5cGUi
OiAiYXJyYXkiLCAgIml0ZW1zIjogeyAidHlwZSI6ICJzdHJpbmciIH0sICJvcHRpb25hbCI6IHRy
dWUsICJkZXNjcmlwdGlvbiI6ICJBcnJheSBvZiBzdHJpbmdzLCB3aGVyZSB0aGUgc3RyaW5ncyBy
ZXByZXNlbnQgb2JqZWN0IHByb3BlcnRpZXMuIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAiY29uc3RydWN0b3JOYW1lIiwgInR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjogdHJ1ZSwg
ImRlc2NyaXB0aW9uIjogIk5hbWUgb2YgdGhlIGNvbnN0cnVjdG9yLiIgfSwKKyAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogInByb3RvdHlwZVN0cnVjdHVyZSIsICIkcmVmIjogIlN0cnVjdHVyZURl
c2NyaXB0aW9uIiwgIm9wdGlvbmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9uIjogIlBvaW50ZXIgdG8g
dGhlIFN0cnVjdHVyZVJlcHJlc2VudGF0aW9uIG9mIHRoZSBwcm90b3lwZSBpZiBvbmUgZXhpc3Rz
LiIgfQogICAgICAgICAgICAgXQogICAgICAgICB9LAogICAgICAgICB7CkBAIC0xMjcsOCArMTI3
LDggQEAKICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJDb250YWluZXIgZm9yIHR5cGUgaW5m
b3JtYXRpb24gdGhhdCBoYXMgYmVlbiBnYXRoZXJlZC4iLAogICAgICAgICAgICAgInByb3BlcnRp
ZXMiOiBbCiAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJkaXNwbGF5VHlwZU5hbWUiLCAidHlw
ZSI6ICJzdHJpbmciLCAib3B0aW9uYWwiOiB0cnVlLCAiZGVzY3JpcHRpb24iOiAiV2hhdCB0aGUg
aW5zcGVjdG9yIHNob3VsZCBkaXNwbGF5IGFzIGEgc2ltcGxlIHR5cGUuIiB9LAotICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAibG9jYWxQcmltaXRpdmVUeXBlTmFtZXMiLCAidHlwZSI6ICJhcnJh
eSIsICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9LCAib3B0aW9uYWwiOiAidHJ1ZSIsICJk
ZXNjcmlwdGlvbiI6ICJBcnJheSBvZiB0eXBlIG5hbWVzIGZvciBwcmltdGl2ZSB0eXBlcyAoaW50
LCBzdHJpbmcsIGV0Yykgc2VlbiBhdCBhbiBpbnN0cnVjdGlvbiIgfSwKLSAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogImxvY2FsT2JqZWN0VHlwZU5hbWVzIiwgInR5cGUiOiAiYXJyYXkiLCAiaXRl
bXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSwgIm9wdGlvbmFsIjogInRydWUiLCAiZGVzY3JpcHRp
b24iOiAiQXJyYXkgb2YgdHlwZSBuYW1lcyBmb3IgYWxsIG9iamVjdCBzZWVuIGF0IGFuIGluc3Ry
dWN0aW9uIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibG9jYWxQcmltaXRpdmVUeXBl
TmFtZXMiLCAidHlwZSI6ICJhcnJheSIsICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9LCAi
b3B0aW9uYWwiOiB0cnVlLCAiZGVzY3JpcHRpb24iOiAiQXJyYXkgb2YgdHlwZSBuYW1lcyBmb3Ig
cHJpbXRpdmUgdHlwZXMgKGludCwgc3RyaW5nLCBldGMpIHNlZW4gYXQgYW4gaW5zdHJ1Y3Rpb24i
IH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJsb2NhbE9iamVjdFR5cGVOYW1lcyIsICJ0
eXBlIjogImFycmF5IiwgIml0ZW1zIjogeyAidHlwZSI6ICJzdHJpbmciIH0sICJvcHRpb25hbCI6
IHRydWUsICJkZXNjcmlwdGlvbiI6ICJBcnJheSBvZiB0eXBlIG5hbWVzIGZvciBhbGwgb2JqZWN0
IHNlZW4gYXQgYW4gaW5zdHJ1Y3Rpb24iIH0sCiAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJs
b2NhbFN0cnVjdHVyZXMiLCAidHlwZSI6ICJhcnJheSIsICJpdGVtcyI6IHsgIiRyZWYiOiAiU3Ry
dWN0dXJlRGVzY3JpcHRpb24iIH0sICJvcHRpb25hbCI6IHRydWUsICJkZXNjcmlwdGlvbiI6ICJB
cnJheSBvZiBkZXNjcmlwdGlvbnMgZm9yIGFsbCBzdHJ1Y3R1cmVzIHNlZW4gYXQgdGhpcyB0aGlz
IGluc3RydWN0aW9uLiIgfSwKICAgICAgICAgICAgICAgICB7ICJuYW1lIjogImdsb2JhbFByaW1p
dGl2ZVR5cGVOYW1lcyIsICJ0eXBlIjogImFycmF5IiwgIml0ZW1zIjogeyAidHlwZSI6ICJzdHJp
bmciIH0sICJvcHRpb25hbCI6IHRydWUsICJkZXNjcmlwdGlvbiI6ICJBcnJheSBvZiB0eXBlIG5h
bWVzIGZvciBhbGwgcHJpbWl0aXZlIHR5cGVzIHNlZW4gZ2xvYmFsbHkuIiB9LAogICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAiZ2xvYmFsT2JqZWN0VHlwZU5hbWVzIiwgInR5cGUiOiAiYXJyYXki
LCAiaXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSwgIm9wdGlvbmFsIjogdHJ1ZSwgImRlc2Ny
aXB0aW9uIjogIkFycmF5IG9mIHR5cGUgbmFtZXMgZm9yIGFsbCBwcmltaXRpdmUgdHlwZXMgc2Vl
biBnbG9iYWxseS4iIH0sCkBAIC0yMzYsNyArMjM2LDcgQEAKICAgICAgICAgICAgICAgICB7ICJu
YW1lIjogImxvY2F0aW9ucyIsICJ0eXBlIjogImFycmF5IiwgIml0ZW1zIjogeyAiJHJlZiI6ICJU
eXBlTG9jYXRpb24iIH0sICJkZXNjcmlwdGlvbiI6ICJBbiBhcnJheSBvZiB0eXBlIGxvY2F0aW9u
cyB3ZSdyZSByZXF1ZXN0aW5nIGluZm9ybWF0aW9uIGZvci4gUmVzdWx0cyBhcmUgZXhwZWN0ZWQg
aW4gdGhlIHNhbWUgb3JkZXIgdGhleSdyZSBzZW50IGluLiJ9CiAgICAgICAgICAgICBdLAogICAg
ICAgICAgICAgInJldHVybnMiOiBbCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0eXBlcyIs
ICJ0eXBlIjogImFycmF5IiwgIml0ZW0iOiB7ICIkcmVmIjogIlR5cGVEZXNjcmlwdGlvbiIsICJk
ZXNjcmlwdGlvbiI6ICJUeXBlcyBmb3IgcmVxdWVzdGVkIHZhcmlhYmxlLiIgfSB9CisgICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJ0eXBlcyIsICJ0eXBlIjogImFycmF5IiwgIml0ZW1zIjogeyAi
JHJlZiI6ICJUeXBlRGVzY3JpcHRpb24iLCAiZGVzY3JpcHRpb24iOiAiVHlwZXMgZm9yIHJlcXVl
c3RlZCB2YXJpYWJsZS4iIH0gfQogICAgICAgICAgICAgXSwKICAgICAgICAgICAgICJkZXNjcmlw
dGlvbiI6ICJSZXR1cm5zIGRldGFpbGVkIGluZm9ybXRhdGlvbiBvbiBnaXZlbiBmdW5jdGlvbi4i
CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNzU1CmluZGV4IDkxZmE4YzljMmQ3Yjk0OTljYjA4ZDVlZmE0MmE5MjI0OTI2NTMx
ODQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3Iu
cHkKKysrIC9kZXYvbnVsbApAQCAtMSwyNjE0ICswLDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhv
bgotIyBDb3B5cmlnaHQgKGMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSMgQ29weXJpZ2h0IChjKSAyMDEyIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotIyBDb3B5cmlnaHQgKGMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVk
LgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotIyBtZXQ6Ci0jCi0jICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0jIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQotIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0jIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSMgZGlzdHJpYnV0
aW9uLgotIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCi0jIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0jIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSMgIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
LSMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCi0jIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0jIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotIyBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
Ci0jIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAotIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSMgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotIyAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLQotaW1wb3J0IG9zLnBhdGgKLWltcG9ydCBzeXMKLWltcG9y
dCBzdHJpbmcKLWltcG9ydCBvcHRwYXJzZQotaW1wb3J0IHJlCi10cnk6Ci0gICAgaW1wb3J0IGpz
b24KLWV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICBpbXBvcnQgc2ltcGxlanNvbiBhcyBqc29uCi0K
LWltcG9ydCBDb2RlR2VuZXJhdG9ySW5zcGVjdG9yU3RyaW5ncwotCi0KLURPTUFJTl9ERUZJTkVf
TkFNRV9NQVAgPSB7Ci0gICAgIkRhdGFiYXNlIjogIlNRTF9EQVRBQkFTRSIsCi0gICAgIkluZGV4
ZWREQiI6ICJJTkRFWEVEX0RBVEFCQVNFIiwKLSAgICAiUmVwbGF5IjogIldFQl9SRVBMQVkiLAot
fQotCi0KLSMgTWFudWFsbHktZmlsbGVkIG1hcCBvZiB0eXBlIG5hbWUgcmVwbGFjZW1lbnRzLgot
VFlQRV9OQU1FX0ZJWF9NQVAgPSB7Ci0gICAgIlJHQkEiOiAiUmdiYSIsICAjIFJHQkEgaXMgcmVw
b3J0ZWQgdG8gYmUgY29uZmxpY3Rpbmcgd2l0aCBhIGRlZmluZSBuYW1lIGluIFdpbmRvd3MgQ0Uu
Ci0gICAgIiI6ICJFbXB0eSIsCi19Ci0KLQotVFlQRVNfV0lUSF9SVU5USU1FX0NBU1RfU0VUID0g
ZnJvemVuc2V0KFsiUnVudGltZS5SZW1vdGVPYmplY3QiLCAiUnVudGltZS5Qcm9wZXJ0eURlc2Ny
aXB0b3IiLCAiUnVudGltZS5JbnRlcm5hbFByb3BlcnR5RGVzY3JpcHRvciIsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJEZWJ1Z2dlci5GdW5jdGlvbkRldGFpbHMi
LCAiRGVidWdnZXIuQ2FsbEZyYW1lIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIkNhbnZhcy5UcmFjZUxvZyIsICJDYW52YXMuUmVzb3VyY2VJbmZvIiwgIkNhbnZh
cy5SZXNvdXJjZVN0YXRlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIyBUaGlzIHNob3VsZCBiZSBhIHRlbXBvcmFyeSBoYWNrLiBUaW1lbGluZUV2ZW50IHNob3Vs
ZCBiZSBjcmVhdGVkIHZpYSBnZW5lcmF0ZWQgQysrIEFQSS4KLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIlRpbWVsaW5lLlRpbWVsaW5lRXZlbnQiXSkKLQotVFlQRVNf
V0lUSF9PUEVOX0ZJRUxEX0xJU1RfU0VUID0gZnJvemVuc2V0KFsiVGltZWxpbmUuVGltZWxpbmVF
dmVudCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgSW5z
cGVjdG9yU3R5bGVTaGVldCBub3Qgb25seSBjcmVhdGVzIHRoaXMgcHJvcGVydHkgYnV0IHdhbnRz
IHRvIHJlYWQgaXQgYW5kIG1vZGlmeSBpdC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIkNTUy5DU1NQcm9wZXJ0eSIsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICMgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudCBuZWVkcyB0byB1
cGRhdGUgbWltZS10eXBlLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAiTmV0d29yay5SZXNwb25zZSJdKQotCi1FWEFDVExZX0lOVF9TVVBQT1JURUQgPSBGYWxz
ZQotCi1JTlNQRUNUT1JfVFlQRVNfR0VORVJBVE9SX0NPTkZJR19NQVAgPSB7Ci0gICAgIkphdmFT
Y3JpcHQiOiB7Ci0gICAgICAgICJwcmVmaXgiOiAiSlMiLAotICAgICAgICAidHlwZWJ1aWxkZXJf
ZGVwZW5kZW5jeSI6ICIiLAotICAgICAgICAiZXhwb3J0X21hY3JvIjogIkpTX0VYUE9SVF9QUklW
QVRFIiwKLSAgICB9LAotICAgICJXZWIiOiB7Ci0gICAgICAgICJwcmVmaXgiOiAiV2ViIiwKLSAg
ICAgICAgInR5cGVidWlsZGVyX2RlcGVuZGVuY3kiOiAiI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNw
ZWN0b3JKU1R5cGVCdWlsZGVycy5oPiIsCi0gICAgICAgICJleHBvcnRfbWFjcm8iOiAiIiwKLSAg
ICB9LAotfQotCi1jbWRsaW5lX3BhcnNlciA9IG9wdHBhcnNlLk9wdGlvblBhcnNlcih1c2FnZT0i
dXNhZ2U6ICVwcm9nIFtvcHRpb25zXSA8SW5zcGVjdG9yLmpzb24+IikKLWNtZGxpbmVfcGFyc2Vy
LmFkZF9vcHRpb24oIi0tb3V0cHV0X2hfZGlyIikKLWNtZGxpbmVfcGFyc2VyLmFkZF9vcHRpb24o
Ii0tb3V0cHV0X2NwcF9kaXIiKQotY21kbGluZV9wYXJzZXIuYWRkX29wdGlvbigiLS1vdXRwdXRf
anNfZGlyIikKLWNtZGxpbmVfcGFyc2VyLmFkZF9vcHRpb24oIi0tb3V0cHV0X3R5cGUiKSAgIyBK
YXZhU2NyaXB0LCBXZWIKLWNtZGxpbmVfcGFyc2VyLmFkZF9vcHRpb24oIi0td3JpdGVfYWx3YXlz
IiwgYWN0aW9uPSJzdG9yZV90cnVlIikKLWNtZGxpbmVfcGFyc2VyLmFkZF9vcHRpb24oIi0tbm9f
dmVyaWZpY2F0aW9uIiwgYWN0aW9uPSJzdG9yZV90cnVlIikKLQotdHJ5OgotICAgIGFyZ19vcHRp
b25zLCBhcmdfdmFsdWVzID0gY21kbGluZV9wYXJzZXIucGFyc2VfYXJncygpCi0gICAgaWYgKGxl
bihhcmdfdmFsdWVzKSA8IDEpOgotICAgICAgICByYWlzZSBFeGNlcHRpb24oIkF0IGxlYXN0IG9u
ZSBwbGFpbiBhcmd1bWVudCBleHBlY3RlZCIpCi0KLSAgICBpbnB1dF9qc29uX2ZpbGVuYW1lID0g
YXJnX3ZhbHVlc1swXQotICAgIGRlcGVuZGVuY3lfanNvbl9maWxlbmFtZXMgPSBhcmdfdmFsdWVz
WzE6XQotCi0gICAgb3V0cHV0X2hlYWRlcl9kaXJuYW1lID0gYXJnX29wdGlvbnMub3V0cHV0X2hf
ZGlyCi0gICAgb3V0cHV0X2NwcF9kaXJuYW1lID0gYXJnX29wdGlvbnMub3V0cHV0X2NwcF9kaXIK
LSAgICBvdXRwdXRfanNfZGlybmFtZSA9IGFyZ19vcHRpb25zLm91dHB1dF9qc19kaXIKLSAgICBv
dXRwdXRfdHlwZSA9IGFyZ19vcHRpb25zLm91dHB1dF90eXBlCi0KLSAgICB3cml0ZV9hbHdheXMg
PSBhcmdfb3B0aW9ucy53cml0ZV9hbHdheXMKLSAgICB2ZXJpZmljYXRpb24gPSBub3QgYXJnX29w
dGlvbnMubm9fdmVyaWZpY2F0aW9uCi0gICAgaWYgbm90IG91dHB1dF9oZWFkZXJfZGlybmFtZToK
LSAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJPdXRwdXQgLmggZGlyZWN0b3J5IG11c3QgYmUgc3Bl
Y2lmaWVkIikKLSAgICBpZiBub3Qgb3V0cHV0X2NwcF9kaXJuYW1lOgotICAgICAgICByYWlzZSBF
eGNlcHRpb24oIk91dHB1dCAuY3BwIGRpcmVjdG9yeSBtdXN0IGJlIHNwZWNpZmllZCIpCi0gICAg
aWYgbm90IG91dHB1dF9qc19kaXJuYW1lOgotICAgICAgICByYWlzZSBFeGNlcHRpb24oIk91dHB1
dCAuanMgZGlyZWN0b3J5IG11c3QgYmUgc3BlY2lmaWVkIikKLSAgICBpZiBvdXRwdXRfdHlwZSBu
b3QgaW4gSU5TUEVDVE9SX1RZUEVTX0dFTkVSQVRPUl9DT05GSUdfTUFQLmtleXMoKToKLSAgICAg
ICAgcmFpc2UgRXhjZXB0aW9uKCJVbmtub3duIG91dHB1dCB0eXBlLiBBbGxvd2VkIHR5cGVzIGFy
ZTogJXMiICUgSU5TUEVDVE9SX1RZUEVTX0dFTkVSQVRPUl9DT05GSUdfTUFQLmtleXMoKSkKLWV4
Y2VwdCBFeGNlcHRpb246Ci0gICAgIyBXb3JrIHdpdGggcHl0aG9uIDIgYW5kIDMgaHR0cDovL2Rv
Y3MucHl0aG9uLm9yZy9weTNrL2hvd3RvL3B5cG9ydGluZy5odG1sCi0gICAgZXhjID0gc3lzLmV4
Y19pbmZvKClbMV0KLSAgICBzeXMuc3RkZXJyLndyaXRlKCJGYWlsZWQgdG8gcGFyc2UgY29tbWFu
ZC1saW5lIGFyZ3VtZW50czogJXNcblxuIiAlIGV4YykKLSAgICBzeXMuc3RkZXJyLndyaXRlKCJV
c2FnZTogPHNjcmlwdD4gSW5zcGVjdG9yLmpzb24gLS1vdXRwdXRfaF9kaXIgPG91dHB1dF9oZWFk
ZXJfZGlyPiAtLW91dHB1dF9jcHBfZGlyIDxvdXRwdXRfY3BwX2Rpcj4gLS1vdXRwdXRfanNfZGly
IDxvdXRwdXRfanNfZGlyPiBbLS13cml0ZV9hbHdheXNdIFstLW5vX3ZlcmlmaWNhdGlvbl1cbiIp
Ci0gICAgZXhpdCgxKQotCi0KLWRlZiBkYXNoX3RvX2NhbWVsY2FzZSh3b3JkKToKLSAgICByZXR1
cm4gJycuam9pbih4LmNhcGl0YWxpemUoKSBvciAnLScgZm9yIHggaW4gd29yZC5zcGxpdCgnLScp
KQotCi0KLWRlZiBmaXhfY2FtZWxfY2FzZShuYW1lKToKLSAgICByZWZpbmVkID0gcmUuc3ViKHIn
LShcdyknLCBsYW1iZGEgcGF0OiBwYXQuZ3JvdXAoMSkudXBwZXIoKSwgbmFtZSkKLSAgICByZWZp
bmVkID0gdG9fdGl0bGVfY2FzZShyZWZpbmVkKQotICAgIHJldHVybiByZS5zdWIocicoP2kpSFRN
THxYTUx8V01MfEFQSXxHQ3xYSFJ8RE9NfENTUycsIGxhbWJkYSBwYXQ6IHBhdC5ncm91cCgwKS51
cHBlcigpLCByZWZpbmVkKQotCi0KLWRlZiB0b190aXRsZV9jYXNlKG5hbWUpOgotICAgIHJldHVy
biBuYW1lWzoxXS51cHBlcigpICsgbmFtZVsxOl0KLQotCi1jbGFzcyBDYXBpdGFsaXplcjoKLSAg
ICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIGxvd2VyX2NhbWVsX2Nhc2VfdG9fdXBwZXIoc3RyKToK
LSAgICAgICAgaWYgbGVuKHN0cikgPiAwIGFuZCBzdHJbMF0uaXNsb3dlcigpOgotICAgICAgICAg
ICAgc3RyID0gc3RyWzBdLnVwcGVyKCkgKyBzdHJbMTpdCi0gICAgICAgIHJldHVybiBzdHIKLQot
ICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgdXBwZXJfY2FtZWxfY2FzZV90b19sb3dlcihzdHIp
OgotICAgICAgICBwb3MgPSAwCi0gICAgICAgIHdoaWxlIHBvcyA8IGxlbihzdHIpIGFuZCBzdHJb
cG9zXS5pc3VwcGVyKCk6Ci0gICAgICAgICAgICBwb3MgKz0gMQotICAgICAgICBpZiBwb3MgPT0g
MDoKLSAgICAgICAgICAgIHJldHVybiBzdHIKLSAgICAgICAgaWYgcG9zID09IDE6Ci0gICAgICAg
ICAgICByZXR1cm4gc3RyWzBdLmxvd2VyKCkgKyBzdHJbMTpdCi0gICAgICAgIGlmIHBvcyA8IGxl
bihzdHIpOgotICAgICAgICAgICAgcG9zIC09IDEKLSAgICAgICAgcG9zc2libGVfYWJicmV2aWF0
aW9uID0gc3RyWzA6cG9zXQotICAgICAgICBpZiBwb3NzaWJsZV9hYmJyZXZpYXRpb24gbm90IGlu
IENhcGl0YWxpemVyLkFCQlJFVklBVElPTjoKLSAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigi
VW5rbm93biBhYmJyZXZpYXRpb24gJXMiICUgcG9zc2libGVfYWJicmV2aWF0aW9uKQotICAgICAg
ICBzdHIgPSBwb3NzaWJsZV9hYmJyZXZpYXRpb24ubG93ZXIoKSArIHN0cltwb3M6XQotICAgICAg
ICByZXR1cm4gc3RyCi0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIGNhbWVsX2Nhc2VfdG9f
Y2FwaXRhbGl6ZWRfd2l0aF91bmRlcnNjb3JlcyhzdHIpOgotICAgICAgICBpZiBsZW4oc3RyKSA9
PSAwOgotICAgICAgICAgICAgcmV0dXJuIHN0cgotICAgICAgICBvdXRwdXQgPSBDYXBpdGFsaXpl
ci5zcGxpdF9jYW1lbF9jYXNlXyhzdHIpCi0gICAgICAgIHJldHVybiAiXyIuam9pbihvdXRwdXQp
LnVwcGVyKCkKLQotICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgc3BsaXRfY2FtZWxfY2FzZV8o
c3RyKToKLSAgICAgICAgb3V0cHV0ID0gW10KLSAgICAgICAgcG9zX2JlaW5nID0gMAotICAgICAg
ICBwb3MgPSAxCi0gICAgICAgIGhhc19vbmVsZXR0ZXIgPSBGYWxzZQotICAgICAgICB3aGlsZSBw
b3MgPCBsZW4oc3RyKToKLSAgICAgICAgICAgIGlmIHN0cltwb3NdLmlzdXBwZXIoKToKLSAgICAg
ICAgICAgICAgICBvdXRwdXQuYXBwZW5kKHN0cltwb3NfYmVpbmc6cG9zXS51cHBlcigpKQotICAg
ICAgICAgICAgICAgIGlmIHBvcyAtIHBvc19iZWluZyA9PSAxOgotICAgICAgICAgICAgICAgICAg
ICBoYXNfb25lbGV0dGVyID0gVHJ1ZQotICAgICAgICAgICAgICAgIHBvc19iZWluZyA9IHBvcwot
ICAgICAgICAgICAgcG9zICs9IDEKLSAgICAgICAgb3V0cHV0LmFwcGVuZChzdHJbcG9zX2JlaW5n
Ol0pCi0gICAgICAgIGlmIGhhc19vbmVsZXR0ZXI6Ci0gICAgICAgICAgICBhcnJheV9wb3MgPSAw
Ci0gICAgICAgICAgICB3aGlsZSBhcnJheV9wb3MgPCBsZW4ob3V0cHV0KSAtIDE6Ci0gICAgICAg
ICAgICAgICAgaWYgbGVuKG91dHB1dFthcnJheV9wb3NdKSA9PSAxOgotICAgICAgICAgICAgICAg
ICAgICBhcnJheV9wb3NfZW5kID0gYXJyYXlfcG9zICsgMQotICAgICAgICAgICAgICAgICAgICB3
aGlsZSBhcnJheV9wb3NfZW5kIDwgbGVuKG91dHB1dCkgYW5kIGxlbihvdXRwdXRbYXJyYXlfcG9z
X2VuZF0pID09IDE6Ci0gICAgICAgICAgICAgICAgICAgICAgICBhcnJheV9wb3NfZW5kICs9IDEK
LSAgICAgICAgICAgICAgICAgICAgaWYgYXJyYXlfcG9zX2VuZCAtIGFycmF5X3BvcyA+IDE6Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBwb3NzaWJsZV9hYmJyZXZpYXRpb24gPSAiIi5qb2luKG91
dHB1dFthcnJheV9wb3M6YXJyYXlfcG9zX2VuZF0pCi0gICAgICAgICAgICAgICAgICAgICAgICBp
ZiBwb3NzaWJsZV9hYmJyZXZpYXRpb24udXBwZXIoKSBpbiBDYXBpdGFsaXplci5BQkJSRVZJQVRJ
T046Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0W2FycmF5X3BvczphcnJheV9w
b3NfZW5kXSA9IFtwb3NzaWJsZV9hYmJyZXZpYXRpb25dCi0gICAgICAgICAgICAgICAgICAgICAg
ICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5X3BvcyA9IGFycmF5X3Bv
c19lbmQgLSAxCi0gICAgICAgICAgICAgICAgYXJyYXlfcG9zICs9IDEKLSAgICAgICAgcmV0dXJu
IG91dHB1dAotCi0gICAgQUJCUkVWSUFUSU9OID0gZnJvemVuc2V0KFsiWEhSIiwgIkRPTSIsICJD
U1MiXSkKLQotVkFMSURBVE9SX0lGREVGX05BTUUgPSAiIUFTU0VSVF9ESVNBQkxFRCIKLQotCi1j
bGFzcyBEb21haW5OYW1lRml4ZXM6Ci0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIGdldF9maXhl
ZF9kYXRhKGNscywgZG9tYWluX25hbWUpOgotICAgICAgICBmaWVsZF9uYW1lX3JlcyA9IENhcGl0
YWxpemVyLnVwcGVyX2NhbWVsX2Nhc2VfdG9fbG93ZXIoZG9tYWluX25hbWUpICsgIkFnZW50Igot
Ci0gICAgICAgIGNsYXNzIFJlcyhvYmplY3QpOgotICAgICAgICAgICAgc2tpcF9qc19iaW5kID0g
ZG9tYWluX25hbWUgaW4gY2xzLnNraXBfanNfYmluZF9kb21haW5zCi0KLSAgICAgICAgICAgIEBz
dGF0aWNtZXRob2QKLSAgICAgICAgICAgIGRlZiBnZXRfZ3VhcmQoKToKLSAgICAgICAgICAgICAg
ICBpZiBkb21haW5fbmFtZSBpbiBET01BSU5fREVGSU5FX05BTUVfTUFQOgotICAgICAgICAgICAg
ICAgICAgICBkZWZpbmVfbmFtZSA9IERPTUFJTl9ERUZJTkVfTkFNRV9NQVBbZG9tYWluX25hbWVd
Ci0KLSAgICAgICAgICAgICAgICAgICAgY2xhc3MgR3VhcmQ6Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWYgZ2VuZXJhdGVf
b3BlbihvdXRwdXQpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQo
IiNpZiBFTkFCTEUoJXMpXG4iICUgZGVmaW5lX25hbWUpCi0KLSAgICAgICAgICAgICAgICAgICAg
ICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBnZW5lcmF0ZV9j
bG9zZShvdXRwdXQpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQo
IiNlbmRpZiAvLyBFTkFCTEUoJXMpXG4iICUgZGVmaW5lX25hbWUpCi0KLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIEd1YXJkCi0KLSAgICAgICAgcmV0dXJuIFJlcwotCi0gICAgc2tpcF9qc19i
aW5kX2RvbWFpbnMgPSBzZXQoWyJET01EZWJ1Z2dlciJdKQotCi0KLWNsYXNzIFJhd1R5cGVzKG9i
amVjdCk6Ci0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBnZXQoanNvbl90eXBlKToKLSAgICAg
ICAgaWYganNvbl90eXBlID09ICJib29sZWFuIjoKLSAgICAgICAgICAgIHJldHVybiBSYXdUeXBl
cy5Cb29sCi0gICAgICAgIGVsaWYganNvbl90eXBlID09ICJzdHJpbmciOgotICAgICAgICAgICAg
cmV0dXJuIFJhd1R5cGVzLlN0cmluZwotICAgICAgICBlbGlmIGpzb25fdHlwZSA9PSAiYXJyYXki
OgotICAgICAgICAgICAgcmV0dXJuIFJhd1R5cGVzLkFycmF5Ci0gICAgICAgIGVsaWYganNvbl90
eXBlID09ICJvYmplY3QiOgotICAgICAgICAgICAgcmV0dXJuIFJhd1R5cGVzLk9iamVjdAotICAg
ICAgICBlbGlmIGpzb25fdHlwZSA9PSAiaW50ZWdlciI6Ci0gICAgICAgICAgICByZXR1cm4gUmF3
VHlwZXMuSW50Ci0gICAgICAgIGVsaWYganNvbl90eXBlID09ICJudW1iZXIiOgotICAgICAgICAg
ICAgcmV0dXJuIFJhd1R5cGVzLk51bWJlcgotICAgICAgICBlbGlmIGpzb25fdHlwZSA9PSAiYW55
IjoKLSAgICAgICAgICAgIHJldHVybiBSYXdUeXBlcy5BbnkKLSAgICAgICAgZWxzZToKLSAgICAg
ICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiVW5rbm93biB0eXBlOiAlcyIgJSBqc29uX3R5cGUpCi0K
LSAgICAjIEZvciBvdXRwdXQgcGFyYW1ldGVyIGFsbCB2YWx1ZXMgYXJlIHBhc3NlZCBieSBwb2lu
dGVyIGV4Y2VwdCBSZWZQdHItYmFzZWQgdHlwZXMuCi0gICAgY2xhc3MgT3V0cHV0UGFzc01vZGVs
OgotICAgICAgICBjbGFzcyBCeVBvaW50ZXI6Ci0gICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0g
ICAgICAgICAgICBkZWYgZ2V0X2FyZ3VtZW50X3ByZWZpeCgpOgotICAgICAgICAgICAgICAgIHJl
dHVybiAiJiIKLQotICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgZGVmIGdl
dF9wYXJhbWV0ZXJfdHlwZV9zdWZmaXgoKToKLSAgICAgICAgICAgICAgICByZXR1cm4gIioiCi0K
LSAgICAgICAgY2xhc3MgQnlSZWZlcmVuY2U6Ci0gICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0g
ICAgICAgICAgICBkZWYgZ2V0X2FyZ3VtZW50X3ByZWZpeCgpOgotICAgICAgICAgICAgICAgIHJl
dHVybiAiIgotCi0gICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICBkZWYgZ2V0
X3BhcmFtZXRlcl90eXBlX3N1ZmZpeCgpOgotICAgICAgICAgICAgICAgIHJldHVybiAiJiIKLQot
ICAgIGNsYXNzIEJhc2VUeXBlKG9iamVjdCk6Ci0gICAgICAgIG5lZWRfaW50ZXJuYWxfcnVudGlt
ZV9jYXN0XyA9IEZhbHNlCi0KLSAgICAgICAgQGNsYXNzbWV0aG9kCi0gICAgICAgIGRlZiByZXF1
ZXN0X3Jhd19pbnRlcm5hbF9ydW50aW1lX2Nhc3QoY2xzKToKLSAgICAgICAgICAgIGlmIG5vdCBj
bHMubmVlZF9pbnRlcm5hbF9ydW50aW1lX2Nhc3RfOgotICAgICAgICAgICAgICAgIGNscy5uZWVk
X2ludGVybmFsX3J1bnRpbWVfY2FzdF8gPSBUcnVlCi0KLSAgICAgICAgQGNsYXNzbWV0aG9kCi0g
ICAgICAgIGRlZiBnZXRfcmF3X3ZhbGlkYXRvcl9jYWxsX3RleHQoY2xzKToKLSAgICAgICAgICAg
IHJldHVybiAiUnVudGltZUNhc3RIZWxwZXI6OmFzc2VydFR5cGU8SW5zcGVjdG9yOjpJbnNwZWN0
b3JWYWx1ZTo6VHlwZSVzPiIgJSBjbHMuZ2V0X3ZhbGlkYXRlX21ldGhvZF9wYXJhbXMoKS50ZW1w
bGF0ZV90eXBlCi0KLSAgICBjbGFzcyBTdHJpbmcoQmFzZVR5cGUpOgotICAgICAgICBAc3RhdGlj
bWV0aG9kCi0gICAgICAgIGRlZiBnZXRfZ2V0dGVyX25hbWUoKToKLSAgICAgICAgICAgIHJldHVy
biAiU3RyaW5nIgotCi0gICAgICAgIGdldF9zZXR0ZXJfbmFtZSA9IGdldF9nZXR0ZXJfbmFtZQot
Ci0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGdldF9jX2luaXRpYWxpemVyKCk6
Ci0gICAgICAgICAgICByZXR1cm4gIlwiXCIiCi0KLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAg
ICAgICBkZWYgZ2V0X2pzX2JpbmRfdHlwZSgpOgotICAgICAgICAgICAgcmV0dXJuICJzdHJpbmci
Ci0KLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBkZWYgZ2V0X3ZhbGlkYXRlX21ldGhv
ZF9wYXJhbXMoKToKLSAgICAgICAgICAgIGNsYXNzIFZhbGlkYXRlTWV0aG9kUGFyYW1zOgotICAg
ICAgICAgICAgICAgIHRlbXBsYXRlX3R5cGUgPSAiU3RyaW5nIgotICAgICAgICAgICAgcmV0dXJu
IFZhbGlkYXRlTWV0aG9kUGFyYW1zCi0KLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBk
ZWYgZ2V0X291dHB1dF9wYXNzX21vZGVsKCk6Ci0gICAgICAgICAgICByZXR1cm4gUmF3VHlwZXMu
T3V0cHV0UGFzc01vZGVsLkJ5UG9pbnRlcgotCi0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAg
ICAgZGVmIGlzX2hlYXZ5X3ZhbHVlKCk6Ci0gICAgICAgICAgICByZXR1cm4gVHJ1ZQotCi0gICAg
ICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGdldF9hcnJheV9pdGVtX3Jhd19jX3R5cGVf
dGV4dCgpOgotICAgICAgICAgICAgcmV0dXJuICJTdHJpbmciCi0KLSAgICAgICAgQHN0YXRpY21l
dGhvZAotICAgICAgICBkZWYgZ2V0X3Jhd190eXBlX21vZGVsKCk6Ci0gICAgICAgICAgICByZXR1
cm4gVHlwZU1vZGVsLlN0cmluZwotCi0gICAgY2xhc3MgSW50KEJhc2VUeXBlKToKLSAgICAgICAg
QHN0YXRpY21ldGhvZAotICAgICAgICBkZWYgZ2V0X2dldHRlcl9uYW1lKCk6Ci0gICAgICAgICAg
ICByZXR1cm4gIkludCIKLQotICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgIGRlZiBnZXRf
c2V0dGVyX25hbWUoKToKLSAgICAgICAgICAgIHJldHVybiAiTnVtYmVyIgotCi0gICAgICAgIEBz
dGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGdldF9jX2luaXRpYWxpemVyKCk6Ci0gICAgICAgICAg
ICByZXR1cm4gIjAiCi0KLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBkZWYgZ2V0X2pz
X2JpbmRfdHlwZSgpOgotICAgICAgICAgICAgcmV0dXJuICJudW1iZXIiCi0KLSAgICAgICAgQGNs
YXNzbWV0aG9kCi0gICAgICAgIGRlZiBnZXRfcmF3X3ZhbGlkYXRvcl9jYWxsX3RleHQoY2xzKToK
LSAgICAgICAgICAgIHJldHVybiAiUnVudGltZUNhc3RIZWxwZXI6OmFzc2VydEludCIKLQotICAg
ICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgIGRlZiBnZXRfb3V0cHV0X3Bhc3NfbW9kZWwoKToK
LSAgICAgICAgICAgIHJldHVybiBSYXdUeXBlcy5PdXRwdXRQYXNzTW9kZWwuQnlQb2ludGVyCi0K
LSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBkZWYgaXNfaGVhdnlfdmFsdWUoKToKLSAg
ICAgICAgICAgIHJldHVybiBGYWxzZQotCi0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAg
ZGVmIGdldF9hcnJheV9pdGVtX3Jhd19jX3R5cGVfdGV4dCgpOgotICAgICAgICAgICAgcmV0dXJu
ICJpbnQiCi0KLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBkZWYgZ2V0X3Jhd190eXBl
X21vZGVsKCk6Ci0gICAgICAgICAgICByZXR1cm4gVHlwZU1vZGVsLkludAotCi0gICAgY2xhc3Mg
TnVtYmVyKEJhc2VUeXBlKToKLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBkZWYgZ2V0
X2dldHRlcl9uYW1lKCk6Ci0gICAgICAgICAgICByZXR1cm4gIkRvdWJsZSIKLQotICAgICAgICBA
c3RhdGljbWV0aG9kCi0gICAgICAgIGRlZiBnZXRfc2V0dGVyX25hbWUoKToKLSAgICAgICAgICAg
IHJldHVybiAiTnVtYmVyIgotCi0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGdl
dF9jX2luaXRpYWxpemVyKCk6Ci0gICAgICAgICAgICByZXR1cm4gIjAiCi0KLSAgICAgICAgQHN0
YXRpY21ldGhvZAotICAgICAgICBkZWYgZ2V0X2pzX2JpbmRfdHlwZSgpOgotICAgICAgICAgICAg
cmV0dXJuICJudW1iZXIiCi0KLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBkZWYgZ2V0
X3ZhbGlkYXRlX21ldGhvZF9wYXJhbXMoKToKLSAgICAgICAgICAgIGNsYXNzIFZhbGlkYXRlTWV0
aG9kUGFyYW1zOgotICAgICAgICAgICAgICAgIHRlbXBsYXRlX3R5cGUgPSAiTnVtYmVyIgotICAg
ICAgICAgICAgcmV0dXJuIFZhbGlkYXRlTWV0aG9kUGFyYW1zCi0KLSAgICAgICAgQHN0YXRpY21l
dGhvZAotICAgICAgICBkZWYgZ2V0X291dHB1dF9wYXNzX21vZGVsKCk6Ci0gICAgICAgICAgICBy
ZXR1cm4gUmF3VHlwZXMuT3V0cHV0UGFzc01vZGVsLkJ5UG9pbnRlcgotCi0gICAgICAgIEBzdGF0
aWNtZXRob2QKLSAgICAgICAgZGVmIGlzX2hlYXZ5X3ZhbHVlKCk6Ci0gICAgICAgICAgICByZXR1
cm4gRmFsc2UKLQotICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgIGRlZiBnZXRfYXJyYXlf
aXRlbV9yYXdfY190eXBlX3RleHQoKToKLSAgICAgICAgICAgIHJldHVybiAiZG91YmxlIgotCi0g
ICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGdldF9yYXdfdHlwZV9tb2RlbCgpOgot
ICAgICAgICAgICAgcmV0dXJuIFR5cGVNb2RlbC5OdW1iZXIKLQotICAgIGNsYXNzIEJvb2woQmFz
ZVR5cGUpOgotICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgIGRlZiBnZXRfZ2V0dGVyX25h
bWUoKToKLSAgICAgICAgICAgIHJldHVybiAiQm9vbGVhbiIKLQotICAgICAgICBnZXRfc2V0dGVy
X25hbWUgPSBnZXRfZ2V0dGVyX25hbWUKLQotICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAg
IGRlZiBnZXRfY19pbml0aWFsaXplcigpOgotICAgICAgICAgICAgcmV0dXJuICJmYWxzZSIKLQot
ICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgIGRlZiBnZXRfanNfYmluZF90eXBlKCk6Ci0g
ICAgICAgICAgICByZXR1cm4gImJvb2xlYW4iCi0KLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAg
ICAgICBkZWYgZ2V0X3ZhbGlkYXRlX21ldGhvZF9wYXJhbXMoKToKLSAgICAgICAgICAgIGNsYXNz
IFZhbGlkYXRlTWV0aG9kUGFyYW1zOgotICAgICAgICAgICAgICAgIHRlbXBsYXRlX3R5cGUgPSAi
Qm9vbGVhbiIKLSAgICAgICAgICAgIHJldHVybiBWYWxpZGF0ZU1ldGhvZFBhcmFtcwotCi0gICAg
ICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGdldF9vdXRwdXRfcGFzc19tb2RlbCgpOgot
ICAgICAgICAgICAgcmV0dXJuIFJhd1R5cGVzLk91dHB1dFBhc3NNb2RlbC5CeVBvaW50ZXIKLQot
ICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgIGRlZiBpc19oZWF2eV92YWx1ZSgpOgotICAg
ICAgICAgICAgcmV0dXJuIEZhbHNlCi0KLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBk
ZWYgZ2V0X2FycmF5X2l0ZW1fcmF3X2NfdHlwZV90ZXh0KCk6Ci0gICAgICAgICAgICByZXR1cm4g
ImJvb2wiCi0KLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBkZWYgZ2V0X3Jhd190eXBl
X21vZGVsKCk6Ci0gICAgICAgICAgICByZXR1cm4gVHlwZU1vZGVsLkJvb2wKLQotICAgIGNsYXNz
IE9iamVjdChCYXNlVHlwZSk6Ci0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGdl
dF9nZXR0ZXJfbmFtZSgpOgotICAgICAgICAgICAgcmV0dXJuICJPYmplY3QiCi0KLSAgICAgICAg
QHN0YXRpY21ldGhvZAotICAgICAgICBkZWYgZ2V0X3NldHRlcl9uYW1lKCk6Ci0gICAgICAgICAg
ICByZXR1cm4gIlZhbHVlIgotCi0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGdl
dF9jX2luaXRpYWxpemVyKCk6Ci0gICAgICAgICAgICByZXR1cm4gIkluc3BlY3Rvck9iamVjdDo6
Y3JlYXRlKCkiCi0KLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBkZWYgZ2V0X2pzX2Jp
bmRfdHlwZSgpOgotICAgICAgICAgICAgcmV0dXJuICJvYmplY3QiCi0KLSAgICAgICAgQHN0YXRp
Y21ldGhvZAotICAgICAgICBkZWYgZ2V0X291dHB1dF9hcmd1bWVudF9wcmVmaXgoKToKLSAgICAg
ICAgICAgIHJldHVybiAiIgotCi0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGdl
dF92YWxpZGF0ZV9tZXRob2RfcGFyYW1zKCk6Ci0gICAgICAgICAgICBjbGFzcyBWYWxpZGF0ZU1l
dGhvZFBhcmFtczoKLSAgICAgICAgICAgICAgICB0ZW1wbGF0ZV90eXBlID0gIk9iamVjdCIKLSAg
ICAgICAgICAgIHJldHVybiBWYWxpZGF0ZU1ldGhvZFBhcmFtcwotCi0gICAgICAgIEBzdGF0aWNt
ZXRob2QKLSAgICAgICAgZGVmIGdldF9vdXRwdXRfcGFzc19tb2RlbCgpOgotICAgICAgICAgICAg
cmV0dXJuIFJhd1R5cGVzLk91dHB1dFBhc3NNb2RlbC5CeVJlZmVyZW5jZQotCi0gICAgICAgIEBz
dGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGlzX2hlYXZ5X3ZhbHVlKCk6Ci0gICAgICAgICAgICBy
ZXR1cm4gVHJ1ZQotCi0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGdldF9hcnJh
eV9pdGVtX3Jhd19jX3R5cGVfdGV4dCgpOgotICAgICAgICAgICAgcmV0dXJuICJJbnNwZWN0b3I6
Okluc3BlY3Rvck9iamVjdCIKLQotICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgIGRlZiBn
ZXRfcmF3X3R5cGVfbW9kZWwoKToKLSAgICAgICAgICAgIHJldHVybiBUeXBlTW9kZWwuT2JqZWN0
Ci0KLSAgICBjbGFzcyBBbnkoQmFzZVR5cGUpOgotICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAg
ICAgIGRlZiBnZXRfZ2V0dGVyX25hbWUoKToKLSAgICAgICAgICAgIHJldHVybiAiVmFsdWUiCi0K
LSAgICAgICAgZ2V0X3NldHRlcl9uYW1lID0gZ2V0X2dldHRlcl9uYW1lCi0KLSAgICAgICAgQHN0
YXRpY21ldGhvZAotICAgICAgICBkZWYgZ2V0X2NfaW5pdGlhbGl6ZXIoKToKLSAgICAgICAgICAg
IHJhaXNlIEV4Y2VwdGlvbigiVW5zdXBwb3J0ZWQiKQotCi0gICAgICAgIEBzdGF0aWNtZXRob2QK
LSAgICAgICAgZGVmIGdldF9qc19iaW5kX3R5cGUoKToKLSAgICAgICAgICAgIHJhaXNlIEV4Y2Vw
dGlvbigiVW5zdXBwb3J0ZWQiKQotCi0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVm
IGdldF9yYXdfdmFsaWRhdG9yX2NhbGxfdGV4dCgpOgotICAgICAgICAgICAgcmV0dXJuICJSdW50
aW1lQ2FzdEhlbHBlcjo6YXNzZXJ0QW55IgotCi0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAg
ICAgZGVmIGdldF9vdXRwdXRfcGFzc19tb2RlbCgpOgotICAgICAgICAgICAgcmV0dXJuIFJhd1R5
cGVzLk91dHB1dFBhc3NNb2RlbC5CeVJlZmVyZW5jZQotCi0gICAgICAgIEBzdGF0aWNtZXRob2QK
LSAgICAgICAgZGVmIGlzX2hlYXZ5X3ZhbHVlKCk6Ci0gICAgICAgICAgICByZXR1cm4gVHJ1ZQot
Ci0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGdldF9hcnJheV9pdGVtX3Jhd19j
X3R5cGVfdGV4dCgpOgotICAgICAgICAgICAgcmV0dXJuICJJbnNwZWN0b3I6Okluc3BlY3RvclZh
bHVlIgotCi0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGdldF9yYXdfdHlwZV9t
b2RlbCgpOgotICAgICAgICAgICAgcmV0dXJuIFR5cGVNb2RlbC5BbnkKLQotICAgIGNsYXNzIEFy
cmF5KEJhc2VUeXBlKToKLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBkZWYgZ2V0X2dl
dHRlcl9uYW1lKCk6Ci0gICAgICAgICAgICByZXR1cm4gIkFycmF5IgotCi0gICAgICAgIEBzdGF0
aWNtZXRob2QKLSAgICAgICAgZGVmIGdldF9zZXR0ZXJfbmFtZSgpOgotICAgICAgICAgICAgcmV0
dXJuICJWYWx1ZSIKLQotICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgIGRlZiBnZXRfY19p
bml0aWFsaXplcigpOgotICAgICAgICAgICAgcmV0dXJuICJJbnNwZWN0b3JBcnJheTo6Y3JlYXRl
KCkiCi0KLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBkZWYgZ2V0X2pzX2JpbmRfdHlw
ZSgpOgotICAgICAgICAgICAgcmV0dXJuICJvYmplY3QiCi0KLSAgICAgICAgQHN0YXRpY21ldGhv
ZAotICAgICAgICBkZWYgZ2V0X291dHB1dF9hcmd1bWVudF9wcmVmaXgoKToKLSAgICAgICAgICAg
IHJldHVybiAiIgotCi0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGdldF92YWxp
ZGF0ZV9tZXRob2RfcGFyYW1zKCk6Ci0gICAgICAgICAgICBjbGFzcyBWYWxpZGF0ZU1ldGhvZFBh
cmFtczoKLSAgICAgICAgICAgICAgICB0ZW1wbGF0ZV90eXBlID0gIkFycmF5IgotICAgICAgICAg
ICAgcmV0dXJuIFZhbGlkYXRlTWV0aG9kUGFyYW1zCi0KLSAgICAgICAgQHN0YXRpY21ldGhvZAot
ICAgICAgICBkZWYgZ2V0X291dHB1dF9wYXNzX21vZGVsKCk6Ci0gICAgICAgICAgICByZXR1cm4g
UmF3VHlwZXMuT3V0cHV0UGFzc01vZGVsLkJ5UmVmZXJlbmNlCi0KLSAgICAgICAgQHN0YXRpY21l
dGhvZAotICAgICAgICBkZWYgaXNfaGVhdnlfdmFsdWUoKToKLSAgICAgICAgICAgIHJldHVybiBU
cnVlCi0KLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBkZWYgZ2V0X2FycmF5X2l0ZW1f
cmF3X2NfdHlwZV90ZXh0KCk6Ci0gICAgICAgICAgICByZXR1cm4gIkluc3BlY3Rvcjo6SW5zcGVj
dG9yQXJyYXkiCi0KLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBkZWYgZ2V0X3Jhd190
eXBlX21vZGVsKCk6Ci0gICAgICAgICAgICByZXR1cm4gVHlwZU1vZGVsLkFycmF5Ci0KLQotZGVm
IHJlcGxhY2VfcmlnaHRfc2hpZnQoaW5wdXRfc3RyKToKLSAgICByZXR1cm4gaW5wdXRfc3RyLnJl
cGxhY2UoIj4+IiwgIj4gPiIpCi0KLQotY2xhc3MgQ29tbWFuZFJldHVyblBhc3NNb2RlbDoKLSAg
ICBjbGFzcyBCeVJlZmVyZW5jZToKLSAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZhcl90eXBl
LCBzZXRfY29uZGl0aW9uKToKLSAgICAgICAgICAgIHNlbGYudmFyX3R5cGUgPSB2YXJfdHlwZQot
ICAgICAgICAgICAgc2VsZi5zZXRfY29uZGl0aW9uID0gc2V0X2NvbmRpdGlvbgotCi0gICAgICAg
IGRlZiBnZXRfcmV0dXJuX3Zhcl90eXBlKHNlbGYpOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYu
dmFyX3R5cGUKLQotICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgIGRlZiBnZXRfb3V0cHV0
X2FyZ3VtZW50X3ByZWZpeCgpOgotICAgICAgICAgICAgcmV0dXJuICIiCi0KLSAgICAgICAgQHN0
YXRpY21ldGhvZAotICAgICAgICBkZWYgZ2V0X291dHB1dF90b19yYXdfZXhwcmVzc2lvbigpOgot
ICAgICAgICAgICAgcmV0dXJuICIlcyIKLQotICAgICAgICBkZWYgZ2V0X291dHB1dF9wYXJhbWV0
ZXJfdHlwZShzZWxmKToKLSAgICAgICAgICAgIHJldHVybiBzZWxmLnZhcl90eXBlICsgIiYiCi0K
LSAgICAgICAgZGVmIGdldF9zZXRfcmV0dXJuX2NvbmRpdGlvbihzZWxmKToKLSAgICAgICAgICAg
IHJldHVybiBzZWxmLnNldF9jb25kaXRpb24KLQotICAgIGNsYXNzIEJ5UG9pbnRlcjoKLSAgICAg
ICAgZGVmIF9faW5pdF9fKHNlbGYsIHZhcl90eXBlKToKLSAgICAgICAgICAgIHNlbGYudmFyX3R5
cGUgPSB2YXJfdHlwZQotCi0gICAgICAgIGRlZiBnZXRfcmV0dXJuX3Zhcl90eXBlKHNlbGYpOgot
ICAgICAgICAgICAgcmV0dXJuIHNlbGYudmFyX3R5cGUKLQotICAgICAgICBAc3RhdGljbWV0aG9k
Ci0gICAgICAgIGRlZiBnZXRfb3V0cHV0X2FyZ3VtZW50X3ByZWZpeCgpOgotICAgICAgICAgICAg
cmV0dXJuICImIgotCi0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGdldF9vdXRw
dXRfdG9fcmF3X2V4cHJlc3Npb24oKToKLSAgICAgICAgICAgIHJldHVybiAiJXMiCi0KLSAgICAg
ICAgZGVmIGdldF9vdXRwdXRfcGFyYW1ldGVyX3R5cGUoc2VsZik6Ci0gICAgICAgICAgICByZXR1
cm4gc2VsZi52YXJfdHlwZSArICIqIgotCi0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAg
ZGVmIGdldF9zZXRfcmV0dXJuX2NvbmRpdGlvbigpOgotICAgICAgICAgICAgcmV0dXJuIE5vbmUK
LQotICAgIGNsYXNzIE9wdE91dHB1dDoKLSAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZhcl90
eXBlKToKLSAgICAgICAgICAgIHNlbGYudmFyX3R5cGUgPSB2YXJfdHlwZQotCi0gICAgICAgIGRl
ZiBnZXRfcmV0dXJuX3Zhcl90eXBlKHNlbGYpOgotICAgICAgICAgICAgcmV0dXJuICJJbnNwZWN0
b3I6OlR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8JXM+IiAlIHNlbGYudmFyX3R5cGUKLQotICAgICAg
ICBAc3RhdGljbWV0aG9kCi0gICAgICAgIGRlZiBnZXRfb3V0cHV0X2FyZ3VtZW50X3ByZWZpeCgp
OgotICAgICAgICAgICAgcmV0dXJuICImIgotCi0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAg
ICAgZGVmIGdldF9vdXRwdXRfdG9fcmF3X2V4cHJlc3Npb24oKToKLSAgICAgICAgICAgIHJldHVy
biAiJXMuZ2V0VmFsdWUoKSIKLQotICAgICAgICBkZWYgZ2V0X291dHB1dF9wYXJhbWV0ZXJfdHlw
ZShzZWxmKToKLSAgICAgICAgICAgIHJldHVybiAiSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6T3B0
T3V0cHV0PCVzPioiICUgc2VsZi52YXJfdHlwZQotCi0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAg
ICAgICAgZGVmIGdldF9zZXRfcmV0dXJuX2NvbmRpdGlvbigpOgotICAgICAgICAgICAgcmV0dXJu
ICIlcy5pc0Fzc2lnbmVkKCkiCi0KLQotY2xhc3MgVHlwZU1vZGVsOgotICAgIGNsYXNzIFJlZlB0
ckJhc2VkKG9iamVjdCk6Ci0gICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjbGFzc19uYW1lKToK
LSAgICAgICAgICAgIHNlbGYuY2xhc3NfbmFtZSA9IGNsYXNzX25hbWUKLSAgICAgICAgICAgIHNl
bGYub3B0aW9uYWwgPSBGYWxzZQotCi0gICAgICAgIGRlZiBnZXRfb3B0aW9uYWwoc2VsZik6Ci0g
ICAgICAgICAgICByZXN1bHQgPSBUeXBlTW9kZWwuUmVmUHRyQmFzZWQoc2VsZi5jbGFzc19uYW1l
KQotICAgICAgICAgICAgcmVzdWx0Lm9wdGlvbmFsID0gVHJ1ZQotICAgICAgICAgICAgcmV0dXJu
IHJlc3VsdAotCi0gICAgICAgIGRlZiBnZXRfY29tbWFuZF9yZXR1cm5fcGFzc19tb2RlbChzZWxm
KToKLSAgICAgICAgICAgIGlmIHNlbGYub3B0aW9uYWw6Ci0gICAgICAgICAgICAgICAgc2V0X2Nv
bmRpdGlvbiA9ICIlcyIKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2V0X2Nv
bmRpdGlvbiA9IE5vbmUKLSAgICAgICAgICAgIHJldHVybiBDb21tYW5kUmV0dXJuUGFzc01vZGVs
LkJ5UmVmZXJlbmNlKHJlcGxhY2VfcmlnaHRfc2hpZnQoIlJlZlB0cjwlcz4iICUgc2VsZi5jbGFz
c19uYW1lKSwgc2V0X2NvbmRpdGlvbikKLQotICAgICAgICBkZWYgZ2V0X2lucHV0X3BhcmFtX3R5
cGVfdGV4dChzZWxmKToKLSAgICAgICAgICAgIHJldHVybiByZXBsYWNlX3JpZ2h0X3NoaWZ0KCJQ
YXNzUmVmUHRyPCVzPiIgJSBzZWxmLmNsYXNzX25hbWUpCi0KLSAgICAgICAgQHN0YXRpY21ldGhv
ZAotICAgICAgICBkZWYgZ2V0X2V2ZW50X3NldHRlcl9leHByZXNzaW9uX3BhdHRlcm4oKToKLSAg
ICAgICAgICAgIHJldHVybiAiJXMiCi0KLSAgICBjbGFzcyBFbnVtKG9iamVjdCk6Ci0gICAgICAg
IGRlZiBfX2luaXRfXyhzZWxmLCBiYXNlX3R5cGVfbmFtZSk6Ci0gICAgICAgICAgICBzZWxmLnR5
cGVfbmFtZSA9IGJhc2VfdHlwZV9uYW1lICsgIjo6RW51bSIKLQotICAgICAgICBkZWYgZ2V0X29w
dGlvbmFsKGJhc2Vfc2VsZik6Ci0gICAgICAgICAgICBjbGFzcyBFbnVtT3B0aW9uYWw6Ci0gICAg
ICAgICAgICAgICAgQGNsYXNzbWV0aG9kCi0gICAgICAgICAgICAgICAgZGVmIGdldF9vcHRpb25h
bChjbHMpOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2xzCi0KLSAgICAgICAgICAgICAg
ICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICAgICAgZGVmIGdldF9jb21tYW5kX3JldHVybl9w
YXNzX21vZGVsKCk6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBDb21tYW5kUmV0dXJuUGFz
c01vZGVsLk9wdE91dHB1dChiYXNlX3NlbGYudHlwZV9uYW1lKQotCi0gICAgICAgICAgICAgICAg
QHN0YXRpY21ldGhvZAotICAgICAgICAgICAgICAgIGRlZiBnZXRfaW5wdXRfcGFyYW1fdHlwZV90
ZXh0KCk6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBiYXNlX3NlbGYudHlwZV9uYW1lICsg
IioiCi0KLSAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICAgICAgZGVm
IGdldF9ldmVudF9zZXR0ZXJfZXhwcmVzc2lvbl9wYXR0ZXJuKCk6Ci0gICAgICAgICAgICAgICAg
ICAgIHJhaXNlIEV4Y2VwdGlvbigiVE9ETyIpCi0gICAgICAgICAgICByZXR1cm4gRW51bU9wdGlv
bmFsCi0KLSAgICAgICAgZGVmIGdldF9jb21tYW5kX3JldHVybl9wYXNzX21vZGVsKHNlbGYpOgot
ICAgICAgICAgICAgcmV0dXJuIENvbW1hbmRSZXR1cm5QYXNzTW9kZWwuQnlQb2ludGVyKHNlbGYu
dHlwZV9uYW1lKQotCi0gICAgICAgIGRlZiBnZXRfaW5wdXRfcGFyYW1fdHlwZV90ZXh0KHNlbGYp
OgotICAgICAgICAgICAgcmV0dXJuIHNlbGYudHlwZV9uYW1lCi0KLSAgICAgICAgQHN0YXRpY21l
dGhvZAotICAgICAgICBkZWYgZ2V0X2V2ZW50X3NldHRlcl9leHByZXNzaW9uX3BhdHRlcm4oKToK
LSAgICAgICAgICAgIHJldHVybiAiJXMiCi0KLSAgICBjbGFzcyBWYWx1ZVR5cGUob2JqZWN0KToK
LSAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHR5cGVfbmFtZSwgaXNfaGVhdnkpOgotICAgICAg
ICAgICAgc2VsZi50eXBlX25hbWUgPSB0eXBlX25hbWUKLSAgICAgICAgICAgIHNlbGYuaXNfaGVh
dnkgPSBpc19oZWF2eQotCi0gICAgICAgIGRlZiBnZXRfb3B0aW9uYWwoc2VsZik6Ci0gICAgICAg
ICAgICByZXR1cm4gc2VsZi5WYWx1ZU9wdGlvbmFsKHNlbGYpCi0KLSAgICAgICAgZGVmIGdldF9j
b21tYW5kX3JldHVybl9wYXNzX21vZGVsKHNlbGYpOgotICAgICAgICAgICAgcmV0dXJuIENvbW1h
bmRSZXR1cm5QYXNzTW9kZWwuQnlQb2ludGVyKHNlbGYudHlwZV9uYW1lKQotCi0gICAgICAgIGRl
ZiBnZXRfaW5wdXRfcGFyYW1fdHlwZV90ZXh0KHNlbGYpOgotICAgICAgICAgICAgaWYgc2VsZi5p
c19oZWF2eToKLSAgICAgICAgICAgICAgICByZXR1cm4gImNvbnN0ICVzJiIgJSBzZWxmLnR5cGVf
bmFtZQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi50eXBl
X25hbWUKLQotICAgICAgICBkZWYgZ2V0X29wdF9vdXRwdXRfdHlwZV8oc2VsZik6Ci0gICAgICAg
ICAgICByZXR1cm4gc2VsZi50eXBlX25hbWUKLQotICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAg
ICAgIGRlZiBnZXRfZXZlbnRfc2V0dGVyX2V4cHJlc3Npb25fcGF0dGVybigpOgotICAgICAgICAg
ICAgcmV0dXJuICIlcyIKLQotICAgICAgICBjbGFzcyBWYWx1ZU9wdGlvbmFsOgotICAgICAgICAg
ICAgZGVmIF9faW5pdF9fKHNlbGYsIGJhc2UpOgotICAgICAgICAgICAgICAgIHNlbGYuYmFzZSA9
IGJhc2UKLQotICAgICAgICAgICAgZGVmIGdldF9vcHRpb25hbChzZWxmKToKLSAgICAgICAgICAg
ICAgICByZXR1cm4gc2VsZgotCi0gICAgICAgICAgICBkZWYgZ2V0X2NvbW1hbmRfcmV0dXJuX3Bh
c3NfbW9kZWwoc2VsZik6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIENvbW1hbmRSZXR1cm5QYXNz
TW9kZWwuT3B0T3V0cHV0KHNlbGYuYmFzZS5nZXRfb3B0X291dHB1dF90eXBlXygpKQotCi0gICAg
ICAgICAgICBkZWYgZ2V0X2lucHV0X3BhcmFtX3R5cGVfdGV4dChzZWxmKToKLSAgICAgICAgICAg
ICAgICByZXR1cm4gImNvbnN0ICVzKiBjb25zdCIgJSBzZWxmLmJhc2UudHlwZV9uYW1lCi0KLSAg
ICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgIGRlZiBnZXRfZXZlbnRfc2V0dGVy
X2V4cHJlc3Npb25fcGF0dGVybigpOgotICAgICAgICAgICAgICAgIHJldHVybiAiKiVzIgotCi0g
ICAgY2xhc3MgRXhhY3RseUludChWYWx1ZVR5cGUpOgotICAgICAgICBkZWYgX19pbml0X18oc2Vs
Zik6Ci0gICAgICAgICAgICBUeXBlTW9kZWwuVmFsdWVUeXBlLl9faW5pdF9fKHNlbGYsICJpbnQi
LCBGYWxzZSkKLQotICAgICAgICBkZWYgZ2V0X2lucHV0X3BhcmFtX3R5cGVfdGV4dChzZWxmKToK
LSAgICAgICAgICAgIHJldHVybiAiSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6RXhhY3RseUludCIK
LQotICAgICAgICBkZWYgZ2V0X29wdF9vdXRwdXRfdHlwZV8oc2VsZik6Ci0gICAgICAgICAgICBy
ZXR1cm4gIkluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkV4YWN0bHlJbnQiCi0KLSAgICBAY2xhc3Nt
ZXRob2QKLSAgICBkZWYgaW5pdF9jbGFzcyhjbHMpOgotICAgICAgICBjbHMuQm9vbCA9IGNscy5W
YWx1ZVR5cGUoImJvb2wiLCBGYWxzZSkKLSAgICAgICAgaWYgRVhBQ1RMWV9JTlRfU1VQUE9SVEVE
OgotICAgICAgICAgICAgY2xzLkludCA9IGNscy5FeGFjdGx5SW50KCkKLSAgICAgICAgZWxzZToK
LSAgICAgICAgICAgIGNscy5JbnQgPSBjbHMuVmFsdWVUeXBlKCJpbnQiLCBGYWxzZSkKLSAgICAg
ICAgY2xzLk51bWJlciA9IGNscy5WYWx1ZVR5cGUoImRvdWJsZSIsIEZhbHNlKQotICAgICAgICBj
bHMuU3RyaW5nID0gY2xzLlZhbHVlVHlwZSgiU3RyaW5nIiwgVHJ1ZSwpCi0gICAgICAgIGNscy5P
YmplY3QgPSBjbHMuUmVmUHRyQmFzZWQoIkluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0IikKLSAg
ICAgICAgY2xzLkFycmF5ID0gY2xzLlJlZlB0ckJhc2VkKCJJbnNwZWN0b3I6Okluc3BlY3RvckFy
cmF5IikKLSAgICAgICAgY2xzLkFueSA9IGNscy5SZWZQdHJCYXNlZCgiSW5zcGVjdG9yOjpJbnNw
ZWN0b3JWYWx1ZSIpCi0KLVR5cGVNb2RlbC5pbml0X2NsYXNzKCkKLQotCi0jIENvbGxlY3Rpb24g
b2YgSW5zcGVjdG9yT2JqZWN0IGNsYXNzIG1ldGhvZHMgdGhhdCBhcmUgbGlrZWx5IHRvIGJlIG92
ZXJsb2FkZWQgaW4gZ2VuZXJhdGVkIGNsYXNzLgotIyBXZSBtdXN0IGV4cGxpY2l0bHkgaW1wb3J0
IGFsbCBvdmVybG9hZGVkIG1ldGhvZHMgb3IgdGhleSB3b24ndCBiZSBhdmFpbGFibGUgdG8gdXNl
ci4KLUlOU1BFQ1RPUl9PQkpFQ1RfU0VUVEVSX05BTUVTID0gZnJvemVuc2V0KFsic2V0VmFsdWUi
LCAic2V0Qm9vbGVhbiIsICJzZXROdW1iZXIiLCAic2V0U3RyaW5nIiwgInNldFZhbHVlIiwgInNl
dE9iamVjdCIsICJzZXRBcnJheSJdKQotCi0KLWRlZiBmaXhfdHlwZV9uYW1lKGpzb25fbmFtZSk6
Ci0gICAgaWYganNvbl9uYW1lIGluIFRZUEVfTkFNRV9GSVhfTUFQOgotICAgICAgICBmaXhlZCA9
IFRZUEVfTkFNRV9GSVhfTUFQW2pzb25fbmFtZV0KLQotICAgICAgICBjbGFzcyBSZXN1bHQob2Jq
ZWN0KToKLSAgICAgICAgICAgIGNsYXNzX25hbWUgPSBmaXhlZAotCi0gICAgICAgICAgICBAc3Rh
dGljbWV0aG9kCi0gICAgICAgICAgICBkZWYgb3V0cHV0X2NvbW1lbnQod3JpdGVyKToKLSAgICAg
ICAgICAgICAgICB3cml0ZXIubmV3bGluZSgiLy8gVHlwZSBvcmlnaW5hbGx5IHdhcyBuYW1lZCAn
JXMnLlxuIiAlIGpzb25fbmFtZSkKLSAgICBlbHNlOgotCi0gICAgICAgIGNsYXNzIFJlc3VsdChv
YmplY3QpOgotICAgICAgICAgICAgY2xhc3NfbmFtZSA9IGpzb25fbmFtZQotCi0gICAgICAgICAg
ICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICBkZWYgb3V0cHV0X2NvbW1lbnQod3JpdGVyKToK
LSAgICAgICAgICAgICAgICBwYXNzCi0KLSAgICByZXR1cm4gUmVzdWx0Ci0KLQotY2xhc3MgV3Jp
dGVyOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvdXRwdXQsIGluZGVudCk6Ci0gICAgICAgIHNl
bGYub3V0cHV0ID0gb3V0cHV0Ci0gICAgICAgIHNlbGYuaW5kZW50ID0gaW5kZW50Ci0KLSAgICBk
ZWYgbmV3bGluZShzZWxmLCBzdHIpOgotICAgICAgICBpZiAoc2VsZi5pbmRlbnQpOgotICAgICAg
ICAgICAgc2VsZi5vdXRwdXQuYXBwZW5kKHNlbGYuaW5kZW50KQotICAgICAgICBzZWxmLm91dHB1
dC5hcHBlbmQoc3RyKQotCi0gICAgZGVmIGFwcGVuZChzZWxmLCBzdHIpOgotICAgICAgICBzZWxm
Lm91dHB1dC5hcHBlbmQoc3RyKQotCi0gICAgZGVmIG5ld2xpbmVfbXVsdGlsaW5lKHNlbGYsIHN0
cik6Ci0gICAgICAgIHBhcnRzID0gc3RyLnNwbGl0KCdcbicpCi0gICAgICAgIHNlbGYubmV3bGlu
ZShwYXJ0c1swXSkKLSAgICAgICAgZm9yIHAgaW4gcGFydHNbMTpdOgotICAgICAgICAgICAgc2Vs
Zi5vdXRwdXQuYXBwZW5kKCdcbicpCi0gICAgICAgICAgICBpZiBwOgotICAgICAgICAgICAgICAg
IHNlbGYubmV3bGluZShwKQotCi0gICAgZGVmIGFwcGVuZF9tdWx0aWxpbmUoc2VsZiwgc3RyKToK
LSAgICAgICAgcGFydHMgPSBzdHIuc3BsaXQoJ1xuJykKLSAgICAgICAgc2VsZi5hcHBlbmQocGFy
dHNbMF0pCi0gICAgICAgIGZvciBwIGluIHBhcnRzWzE6XToKLSAgICAgICAgICAgIHNlbGYub3V0
cHV0LmFwcGVuZCgnXG4nKQotICAgICAgICAgICAgaWYgcDoKLSAgICAgICAgICAgICAgICBzZWxm
Lm5ld2xpbmUocCkKLQotICAgIGRlZiBnZXRfaW5kZW50KHNlbGYpOgotICAgICAgICByZXR1cm4g
c2VsZi5pbmRlbnQKLQotICAgIGRlZiBnZXRfaW5kZW50ZWQoc2VsZiwgYWRkaXRpb25hbF9pbmRl
bnQpOgotICAgICAgICByZXR1cm4gV3JpdGVyKHNlbGYub3V0cHV0LCBzZWxmLmluZGVudCArIGFk
ZGl0aW9uYWxfaW5kZW50KQotCi0gICAgZGVmIGluc2VydF93cml0ZXIoc2VsZiwgYWRkaXRpb25h
bF9pbmRlbnQpOgotICAgICAgICBuZXdfb3V0cHV0ID0gW10KLSAgICAgICAgc2VsZi5vdXRwdXQu
YXBwZW5kKG5ld19vdXRwdXQpCi0gICAgICAgIHJldHVybiBXcml0ZXIobmV3X291dHB1dCwgc2Vs
Zi5pbmRlbnQgKyBhZGRpdGlvbmFsX2luZGVudCkKLQotCi1jbGFzcyBFbnVtQ29uc3RhbnRzOgot
ICAgIG1hcF8gPSB7fQotICAgIGNvbnN0YW50c18gPSBbXQotCi0gICAgQGNsYXNzbWV0aG9kCi0g
ICAgZGVmIGFkZF9jb25zdGFudChjbHMsIHZhbHVlKToKLSAgICAgICAgaWYgdmFsdWUgaW4gY2xz
Lm1hcF86Ci0gICAgICAgICAgICByZXR1cm4gY2xzLm1hcF9bdmFsdWVdCi0gICAgICAgIGVsc2U6
Ci0gICAgICAgICAgICBwb3MgPSBsZW4oY2xzLm1hcF8pCi0gICAgICAgICAgICBjbHMubWFwX1t2
YWx1ZV0gPSBwb3MKLSAgICAgICAgICAgIGNscy5jb25zdGFudHNfLmFwcGVuZCh2YWx1ZSkKLSAg
ICAgICAgICAgIHJldHVybiBwb3MKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBnZXRfZW51
bV9jb25zdGFudF9jb2RlKGNscyk6Ci0gICAgICAgIG91dHB1dCA9IFtdCi0gICAgICAgIGZvciBp
dGVtIGluIGNscy5jb25zdGFudHNfOgotICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgiICAgIFwi
IiArIGl0ZW0gKyAiXCIiKQotICAgICAgICByZXR1cm4gIixcbiIuam9pbihvdXRwdXQpICsgIlxu
IgotCi0KLSMgVHlwZWJ1aWxkZXIgY29kZSBpcyBnZW5lcmF0ZWQgaW4gc2V2ZXJhbCBwYXNzZXM6
IGZpcnN0IHR5cGVkZWZzLCB0aGVuIG90aGVyIGNsYXNzZXMuCi0jIE1hbnVhbCBwYXNzIG1hbmFn
ZW1lbnQgaXMgbmVlZGVkIGJlY2F1c2Ugd2UgY2Fubm90IGhhdmUgZm9yd2FyZCBkZWNsYXJhdGlv
bnMgZm9yIHR5cGVkZWZzLgotY2xhc3MgVHlwZUJ1aWxkZXJQYXNzOgotICAgIFRZUEVERUYgPSAi
dHlwZWRlZiIKLSAgICBNQUlOID0gIm1haW4iCi0KLQotY2xhc3MgVHlwZUJpbmRpbmdzOgotICAg
IEBzdGF0aWNtZXRob2QKLSAgICBkZWYgY3JlYXRlX25hbWVkX3R5cGVfZGVjbGFyYXRpb24oanNv
bl90eXBhYmxlLCBjb250ZXh0X2RvbWFpbl9uYW1lLCB0eXBlX2RhdGEpOgotICAgICAgICBqc29u
X3R5cGUgPSB0eXBlX2RhdGEuZ2V0X2pzb25fdHlwZSgpCi0KLSAgICAgICAgY2xhc3MgSGVscGVy
OgotICAgICAgICAgICAgaXNfYWRfaG9jID0gRmFsc2UKLSAgICAgICAgICAgIGZ1bGxfbmFtZV9w
cmVmaXhfZm9yX3VzZSA9ICJJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjoiICsgY29udGV4dF9kb21h
aW5fbmFtZSArICI6OiIKLSAgICAgICAgICAgIGZ1bGxfbmFtZV9wcmVmaXhfZm9yX2ltcGwgPSAi
SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6IiArIGNvbnRleHRfZG9tYWluX25hbWUgKyAiOjoiCi0K
LSAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgIGRlZiB3cml0ZV9kb2Mod3Jp
dGVyKToKLSAgICAgICAgICAgICAgICBpZiAiZGVzY3JpcHRpb24iIGluIGpzb25fdHlwZToKLSAg
ICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIi8qICIpCi0gICAgICAgICAgICAgICAg
ICAgIHdyaXRlci5hcHBlbmQoanNvbl90eXBlWyJkZXNjcmlwdGlvbiJdKQotICAgICAgICAgICAg
ICAgICAgICB3cml0ZXIuYXBwZW5kKCIgKi9cbiIpCi0KLSAgICAgICAgICAgIEBzdGF0aWNtZXRo
b2QKLSAgICAgICAgICAgIGRlZiBhZGRfdG9fZm9yd2FyZF9saXN0ZW5lcihmb3J3YXJkX2xpc3Rl
bmVyKToKLSAgICAgICAgICAgICAgICBmb3J3YXJkX2xpc3RlbmVyLmFkZF90eXBlX2RhdGEodHlw
ZV9kYXRhKQotCi0KLSAgICAgICAgZml4ZWRfdHlwZV9uYW1lID0gZml4X3R5cGVfbmFtZShqc29u
X3R5cGVbImlkIl0pCi0gICAgICAgIHJldHVybiBUeXBlQmluZGluZ3MuY3JlYXRlX3R5cGVfZGVj
bGFyYXRpb25fKGpzb25fdHlwYWJsZSwgY29udGV4dF9kb21haW5fbmFtZSwgZml4ZWRfdHlwZV9u
YW1lLCBIZWxwZXIpCi0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIGNyZWF0ZV9hZF9ob2Nf
dHlwZV9kZWNsYXJhdGlvbihqc29uX3R5cGFibGUsIGNvbnRleHRfZG9tYWluX25hbWUsIGFkX2hv
Y190eXBlX2NvbnRleHQpOgotICAgICAgICBjbGFzcyBIZWxwZXI6Ci0gICAgICAgICAgICBpc19h
ZF9ob2MgPSBUcnVlCi0gICAgICAgICAgICBmdWxsX25hbWVfcHJlZml4X2Zvcl91c2UgPSBhZF9o
b2NfdHlwZV9jb250ZXh0LmNvbnRhaW5lcl9yZWxhdGl2ZV9uYW1lX3ByZWZpeAotICAgICAgICAg
ICAgZnVsbF9uYW1lX3ByZWZpeF9mb3JfaW1wbCA9IGFkX2hvY190eXBlX2NvbnRleHQuY29udGFp
bmVyX2Z1bGxfbmFtZV9wcmVmaXgKLQotICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAg
ICAgICAgZGVmIHdyaXRlX2RvYyh3cml0ZXIpOgotICAgICAgICAgICAgICAgIHBhc3MKLQotICAg
ICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgZGVmIGFkZF90b19mb3J3YXJkX2xp
c3RlbmVyKGZvcndhcmRfbGlzdGVuZXIpOgotICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAg
Zml4ZWRfdHlwZV9uYW1lID0gYWRfaG9jX3R5cGVfY29udGV4dC5nZXRfdHlwZV9uYW1lX2ZpeCgp
Ci0gICAgICAgIHJldHVybiBUeXBlQmluZGluZ3MuY3JlYXRlX3R5cGVfZGVjbGFyYXRpb25fKGpz
b25fdHlwYWJsZSwgY29udGV4dF9kb21haW5fbmFtZSwgZml4ZWRfdHlwZV9uYW1lLCBIZWxwZXIp
Ci0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIGNyZWF0ZV90eXBlX2RlY2xhcmF0aW9uXyhq
c29uX3R5cGFibGUsIGNvbnRleHRfZG9tYWluX25hbWUsIGZpeGVkX3R5cGVfbmFtZSwgaGVscGVy
KToKLSAgICAgICAgaWYganNvbl90eXBhYmxlWyJ0eXBlIl0gPT0gInN0cmluZyI6Ci0gICAgICAg
ICAgICBpZiAiZW51bSIgaW4ganNvbl90eXBhYmxlOgotCi0gICAgICAgICAgICAgICAgY2xhc3Mg
RW51bUJpbmRpbmc6Ci0gICAgICAgICAgICAgICAgICAgIG5lZWRfdXNlcl9ydW50aW1lX2Nhc3Rf
ID0gRmFsc2UKLSAgICAgICAgICAgICAgICAgICAgbmVlZF9pbnRlcm5hbF9ydW50aW1lX2Nhc3Rf
ID0gRmFsc2UKLQotICAgICAgICAgICAgICAgICAgICBAY2xhc3NtZXRob2QKLSAgICAgICAgICAg
ICAgICAgICAgZGVmIHJlc29sdmVfaW5uZXIoY2xzLCByZXNvbHZlX2NvbnRleHQpOgotICAgICAg
ICAgICAgICAgICAgICAgICAgcGFzcwotCi0gICAgICAgICAgICAgICAgICAgIEBjbGFzc21ldGhv
ZAotICAgICAgICAgICAgICAgICAgICBkZWYgcmVxdWVzdF91c2VyX3J1bnRpbWVfY2FzdChjbHMs
IHJlcXVlc3QpOgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgcmVxdWVzdDoKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjbHMubmVlZF91c2VyX3J1bnRpbWVfY2FzdF8gPSBUcnVlCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5hY2tub3dsZWRnZSgpCi0KLSAgICAg
ICAgICAgICAgICAgICAgQGNsYXNzbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgIGRlZiByZXF1
ZXN0X2ludGVybmFsX3J1bnRpbWVfY2FzdChjbHMpOgotICAgICAgICAgICAgICAgICAgICAgICAg
Y2xzLm5lZWRfaW50ZXJuYWxfcnVudGltZV9jYXN0XyA9IFRydWUKLQotICAgICAgICAgICAgICAg
ICAgICBAY2xhc3NtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgZGVmIGdldF9jb2RlX2dlbmVy
YXRvcihlbnVtX2JpbmRpbmdfY2xzKToKLSAgICAgICAgICAgICAgICAgICAgICAgICNGSVhNRTog
Z2VuZXJhdGUgYWQtaG9jIGVudW1zIHRvbyBvbmNlIHdlIGZpZ3VyZSBvdXQgaG93IHRvIGJldHRl
ciBpbXBsZW1lbnQgdGhlbSBpbiBDKysuCi0gICAgICAgICAgICAgICAgICAgICAgICBjb21tZW50
X291dCA9IGhlbHBlci5pc19hZF9ob2MKLQotICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3Mg
Q29kZUdlbmVyYXRvcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9k
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmIGdlbmVyYXRlX3R5cGVfYnVpbGRlcih3
cml0ZXIsIGdlbmVyYXRlX2NvbnRleHQpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBlbnVtID0ganNvbl90eXBhYmxlWyJlbnVtIl0KLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaGVscGVyLndyaXRlX2RvYyh3cml0ZXIpCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGVudW1fbmFtZSA9IGZpeGVkX3R5cGVfbmFtZS5jbGFzc19uYW1lCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZpeGVkX3R5cGVfbmFtZS5vdXRwdXRfY29tbWVudCh3cml0
ZXIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCJzdHJ1
Y3QgIikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVuZChlbnVt
X25hbWUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5hcHBlbmQoIiB7
XG4iKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3bGluZSgiICAg
IGVudW0gRW51bSB7XG4iKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgZW51
bV9pdGVtIGluIGVudW06Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVt
X3BvcyA9IEVudW1Db25zdGFudHMuYWRkX2NvbnN0YW50KGVudW1faXRlbSkKLQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbV9jX25hbWUgPSBmaXhfY2FtZWxfY2FzZShl
bnVtX2l0ZW0pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBpdGVtX2Nf
bmFtZSBpbiBUWVBFX05BTUVfRklYX01BUDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpdGVtX2NfbmFtZSA9IFRZUEVfTkFNRV9GSVhfTUFQW2l0ZW1fY19uYW1lXQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIiAgICAg
ICAgIikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5hcHBlbmQo
aXRlbV9jX25hbWUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIu
YXBwZW5kKCIgPSAiKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVy
LmFwcGVuZCgiJXMiICUgZW51bV9wb3MpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB3cml0ZXIuYXBwZW5kKCIsXG4iKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB3cml0ZXIubmV3bGluZSgiICAgIH07XG4iKQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiBlbnVtX2JpbmRpbmdfY2xzLm5lZWRfdXNlcl9ydW50aW1lX2Nhc3RfOgotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJOb3QgeWV0IGlt
cGxlbWVudGVkIikKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBlbnVtX2Jp
bmRpbmdfY2xzLm5lZWRfaW50ZXJuYWxfcnVudGltZV9jYXN0XzoKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHdyaXRlci5hcHBlbmQoIiNpZiAlc1xuIiAlIFZBTElEQVRPUl9J
RkRFRl9OQU1FKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5l
d2xpbmUoIiAgICBzdGF0aWMgdm9pZCBhc3NlcnRDb3JyZWN0VmFsdWUoSW5zcGVjdG9yOjpJbnNw
ZWN0b3JWYWx1ZSogdmFsdWUpO1xuIikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHdyaXRlci5hcHBlbmQoIiNlbmRpZiAgLy8gJXNcbiIgJSBWQUxJREFUT1JfSUZERUZfTkFN
RSkKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRl
ciA9IGdlbmVyYXRlX2NvbnRleHQudmFsaWRhdG9yX3dyaXRlcgotCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBkb21haW5fZml4ZXMgPSBEb21haW5OYW1lRml4ZXMuZ2V0X2Zp
eGVkX2RhdGEoY29udGV4dF9kb21haW5fbmFtZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRvbWFpbl9ndWFyZCA9IGRvbWFpbl9maXhlcy5nZXRfZ3VhcmQoKQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgZG9tYWluX2d1YXJkOgotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbWFpbl9ndWFyZC5nZW5lcmF0ZV9vcGVu
KHZhbGlkYXRvcl93cml0ZXIpCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgidm9pZCAlcyVzOjphc3NlcnRDb3JyZWN0VmFsdWUo
SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSogdmFsdWUpXG4iICUgKGhlbHBlci5mdWxsX25hbWVf
cHJlZml4X2Zvcl9pbXBsLCBlbnVtX25hbWUpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCJ7XG4iKQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCIgICAgV1RGOjpT
dHJpbmcgcztcbiIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0
b3Jfd3JpdGVyLm5ld2xpbmUoIiAgICBib29sIGNhc3RfcmVzID0gdmFsdWUtPmFzU3RyaW5nKCZz
KTtcbiIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3Jp
dGVyLm5ld2xpbmUoIiAgICBBU1NFUlQoY2FzdF9yZXMpO1xuIikKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIGxlbihlbnVtKSA+IDA6Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uX2xpc3QgPSBbXQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBlbnVtX2l0ZW0gaW4gZW51bToKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bV9wb3MgPSBFbnVtQ29uc3Rh
bnRzLmFkZF9jb25zdGFudChlbnVtX2l0ZW0pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbmRpdGlvbl9saXN0LmFwcGVuZCgicyA9PSBcIiVzXCIiICUgZW51
bV9pdGVtKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRv
cl93cml0ZXIubmV3bGluZSgiICAgIEFTU0VSVCglcyk7XG4iICUgIiB8fCAiLmpvaW4oY29uZGl0
aW9uX2xpc3QpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9y
X3dyaXRlci5uZXdsaW5lKCJ9XG4iKQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiBkb21haW5fZ3VhcmQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZG9tYWluX2d1YXJkLmdlbmVyYXRlX2Nsb3NlKHZhbGlkYXRvcl93cml0ZXIpCi0KLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGlu
ZSgiXG5cbiIpCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xp
bmUoIn07IC8vIHN0cnVjdCAiKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0
ZXIuYXBwZW5kKGVudW1fbmFtZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3Jp
dGVyLmFwcGVuZCgiXG4iKQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21l
dGhvZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZiByZWdpc3Rlcl91c2UoZm9yd2Fy
ZF9saXN0ZW5lcik6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKLQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkZWYgZ2V0X2dlbmVyYXRlX3Bhc3NfaWQoKToKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIFR5cGVCdWlsZGVyUGFzcy5NQUlOCi0KLSAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBDb2RlR2VuZXJhdG9yCi0KLSAgICAgICAgICAgICAgICAgICAg
QGNsYXNzbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgIGRlZiBnZXRfdmFsaWRhdG9yX2NhbGxf
dGV4dChjbHMpOgotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhlbHBlci5mdWxsX25h
bWVfcHJlZml4X2Zvcl91c2UgKyBmaXhlZF90eXBlX25hbWUuY2xhc3NfbmFtZSArICI6OmFzc2Vy
dENvcnJlY3RWYWx1ZSIKLQotICAgICAgICAgICAgICAgICAgICBAY2xhc3NtZXRob2QKLSAgICAg
ICAgICAgICAgICAgICAgZGVmIGdldF9hcnJheV9pdGVtX2NfdHlwZV90ZXh0KGNscyk6Ci0gICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gaGVscGVyLmZ1bGxfbmFtZV9wcmVmaXhfZm9yX3Vz
ZSArIGZpeGVkX3R5cGVfbmFtZS5jbGFzc19uYW1lICsgIjo6RW51bSIKLQotICAgICAgICAgICAg
ICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgIGRlZiBnZXRfc2V0dGVy
X3ZhbHVlX2V4cHJlc3Npb25fcGF0dGVybigpOgotICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuICJJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpnZXQlc0VudW1Db25zdGFudFZhbHVlKCVzKSIK
LQotICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICAgICAgICAg
IGRlZiByZWR1Y2VfdG9fcmF3X3R5cGUoKToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBSYXdUeXBlcy5TdHJpbmcKLQotICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0g
ICAgICAgICAgICAgICAgICAgIGRlZiBnZXRfdHlwZV9tb2RlbCgpOgotICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIFR5cGVNb2RlbC5FbnVtKGhlbHBlci5mdWxsX25hbWVfcHJlZml4X2Zv
cl91c2UgKyBmaXhlZF90eXBlX25hbWUuY2xhc3NfbmFtZSkKLQotICAgICAgICAgICAgICAgIHJl
dHVybiBFbnVtQmluZGluZwotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBpZiBo
ZWxwZXIuaXNfYWRfaG9jOgotCi0gICAgICAgICAgICAgICAgICAgIGNsYXNzIFBsYWluU3RyaW5n
OgotICAgICAgICAgICAgICAgICAgICAgICAgQGNsYXNzbWV0aG9kCi0gICAgICAgICAgICAgICAg
ICAgICAgICBkZWYgcmVzb2x2ZV9pbm5lcihjbHMsIHJlc29sdmVfY29udGV4dCk6Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcGFzcwotCi0gICAgICAgICAgICAgICAgICAgICAgICBAc3Rh
dGljbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWYgcmVxdWVzdF91c2VyX3J1bnRp
bWVfY2FzdChyZXF1ZXN0KToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBFeGNl
cHRpb24oIlVuc3VwcG9ydGVkIikKLQotICAgICAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21l
dGhvZAotICAgICAgICAgICAgICAgICAgICAgICAgZGVmIHJlcXVlc3RfaW50ZXJuYWxfcnVudGlt
ZV9jYXN0KCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzcwotCi0gICAgICAgICAg
ICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWYg
Z2V0X2NvZGVfZ2VuZXJhdG9yKCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IE5vbmUKLQotICAgICAgICAgICAgICAgICAgICAgICAgQGNsYXNzbWV0aG9kCi0gICAgICAgICAg
ICAgICAgICAgICAgICBkZWYgZ2V0X3ZhbGlkYXRvcl9jYWxsX3RleHQoY2xzKToKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmF3VHlwZXMuU3RyaW5nLmdldF9yYXdfdmFsaWRh
dG9yX2NhbGxfdGV4dCgpCi0KLSAgICAgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QK
LSAgICAgICAgICAgICAgICAgICAgICAgIGRlZiByZWR1Y2VfdG9fcmF3X3R5cGUoKToKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmF3VHlwZXMuU3RyaW5nCi0KLSAgICAgICAg
ICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgICAgIGRl
ZiBnZXRfdHlwZV9tb2RlbCgpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBU
eXBlTW9kZWwuU3RyaW5nCi0KLSAgICAgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QK
LSAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBnZXRfc2V0dGVyX3ZhbHVlX2V4cHJlc3Npb25f
cGF0dGVybigpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb25lCi0KLSAg
ICAgICAgICAgICAgICAgICAgICAgIEBjbGFzc21ldGhvZAotICAgICAgICAgICAgICAgICAgICAg
ICAgZGVmIGdldF9hcnJheV9pdGVtX2NfdHlwZV90ZXh0KGNscyk6Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGNscy5yZWR1Y2VfdG9fcmF3X3R5cGUoKS5nZXRfYXJyYXlfaXRl
bV9yYXdfY190eXBlX3RleHQoKQotCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBQbGFpblN0
cmluZwotCi0gICAgICAgICAgICAgICAgZWxzZToKLQotICAgICAgICAgICAgICAgICAgICBjbGFz
cyBUeXBlZGVmU3RyaW5nOgotICAgICAgICAgICAgICAgICAgICAgICAgQGNsYXNzbWV0aG9kCi0g
ICAgICAgICAgICAgICAgICAgICAgICBkZWYgcmVzb2x2ZV9pbm5lcihjbHMsIHJlc29sdmVfY29u
dGV4dCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzcwotCi0gICAgICAgICAgICAg
ICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWYgcmVx
dWVzdF91c2VyX3J1bnRpbWVfY2FzdChyZXF1ZXN0KToKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByYWlzZSBFeGNlcHRpb24oIlVuc3VwcG9ydGVkIikKLQotICAgICAgICAgICAgICAgICAg
ICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgICAgICAgICAgICAgZGVmIHJlcXVlc3Rf
aW50ZXJuYWxfcnVudGltZV9jYXN0KCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgUmF3
VHlwZXMuU3RyaW5nLnJlcXVlc3RfcmF3X2ludGVybmFsX3J1bnRpbWVfY2FzdCgpCi0KLSAgICAg
ICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgICAg
IGRlZiBnZXRfY29kZV9nZW5lcmF0b3IoKToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
bGFzcyBDb2RlR2VuZXJhdG9yOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAc3Rh
dGljbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBnZW5lcmF0ZV90
eXBlX2J1aWxkZXIod3JpdGVyLCBnZW5lcmF0ZV9jb250ZXh0KToKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGhlbHBlci53cml0ZV9kb2Mod3JpdGVyKQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZml4ZWRfdHlwZV9uYW1lLm91dHB1dF9jb21tZW50KHdy
aXRlcikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5l
KCJ0eXBlZGVmIFN0cmluZyAiKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
d3JpdGVyLmFwcGVuZChmaXhlZF90eXBlX25hbWUuY2xhc3NfbmFtZSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5hcHBlbmQoIjtcblxuIikKLQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGRlZiByZWdpc3Rlcl91c2UoZm9yd2FyZF9saXN0ZW5lcik6Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCi0KLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkZWYgZ2V0X2dlbmVyYXRlX3Bhc3NfaWQoKToKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBUeXBlQnVpbGRlclBhc3MuVFlQRURFRgotCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIENvZGVHZW5lcmF0b3IKLQotICAgICAgICAgICAgICAgICAg
ICAgICAgQGNsYXNzbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X3ZhbGlk
YXRvcl9jYWxsX3RleHQoY2xzKToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
UmF3VHlwZXMuU3RyaW5nLmdldF9yYXdfdmFsaWRhdG9yX2NhbGxfdGV4dCgpCi0KLSAgICAgICAg
ICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgICAgIGRl
ZiByZWR1Y2VfdG9fcmF3X3R5cGUoKToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gUmF3VHlwZXMuU3RyaW5nCi0KLSAgICAgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRo
b2QKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBnZXRfdHlwZV9tb2RlbCgpOgotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBUeXBlTW9kZWwuVmFsdWVUeXBlKCIlcyVzIiAl
IChoZWxwZXIuZnVsbF9uYW1lX3ByZWZpeF9mb3JfdXNlLCBmaXhlZF90eXBlX25hbWUuY2xhc3Nf
bmFtZSksIFRydWUpCi0KLSAgICAgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGRlZiBnZXRfc2V0dGVyX3ZhbHVlX2V4cHJlc3Npb25fcGF0
dGVybigpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb25lCi0KLSAgICAg
ICAgICAgICAgICAgICAgICAgIEBjbGFzc21ldGhvZAotICAgICAgICAgICAgICAgICAgICAgICAg
ZGVmIGdldF9hcnJheV9pdGVtX2NfdHlwZV90ZXh0KGNscyk6Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuICJjb25zdCAlcyVzJiIgJSAoaGVscGVyLmZ1bGxfbmFtZV9wcmVmaXhf
Zm9yX3VzZSwgZml4ZWRfdHlwZV9uYW1lLmNsYXNzX25hbWUpCi0KLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIFR5cGVkZWZTdHJpbmcKLQotICAgICAgICBlbGlmIGpzb25fdHlwYWJsZVsidHlw
ZSJdID09ICJpbnRlZ2VyIjoKLSAgICAgICAgICAgICAgICBpZiBoZWxwZXIuaXNfYWRfaG9jOgot
Ci0gICAgICAgICAgICAgICAgICAgIGNsYXNzIFBsYWluSW50ZWdlcjoKLSAgICAgICAgICAgICAg
ICAgICAgICAgIEBjbGFzc21ldGhvZAotICAgICAgICAgICAgICAgICAgICAgICAgZGVmIHJlc29s
dmVfaW5uZXIoY2xzLCByZXNvbHZlX2NvbnRleHQpOgotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHBhc3MKLQotICAgICAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAg
ICAgICAgICAgICAgICAgICAgZGVmIHJlcXVlc3RfdXNlcl9ydW50aW1lX2Nhc3QocmVxdWVzdCk6
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJVbnN1cHBvcnRl
ZCIpCi0KLSAgICAgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGRlZiByZXF1ZXN0X2ludGVybmFsX3J1bnRpbWVfY2FzdCgpOgotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHBhc3MKLQotICAgICAgICAgICAgICAgICAgICAgICAgQHN0
YXRpY21ldGhvZAotICAgICAgICAgICAgICAgICAgICAgICAgZGVmIGdldF9jb2RlX2dlbmVyYXRv
cigpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb25lCi0KLSAgICAgICAg
ICAgICAgICAgICAgICAgIEBjbGFzc21ldGhvZAotICAgICAgICAgICAgICAgICAgICAgICAgZGVm
IGdldF92YWxpZGF0b3JfY2FsbF90ZXh0KGNscyk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIFJhd1R5cGVzLkludC5nZXRfcmF3X3ZhbGlkYXRvcl9jYWxsX3RleHQoKQotCi0g
ICAgICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICAgICAgICAg
ICAgICBkZWYgcmVkdWNlX3RvX3Jhd190eXBlKCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIFJhd1R5cGVzLkludAotCi0gICAgICAgICAgICAgICAgICAgICAgICBAc3RhdGlj
bWV0aG9kCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X3R5cGVfbW9kZWwoKToKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHlwZU1vZGVsLkludAotCi0gICAgICAg
ICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgICAgICBk
ZWYgZ2V0X3NldHRlcl92YWx1ZV9leHByZXNzaW9uX3BhdHRlcm4oKToKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gTm9uZQotCi0gICAgICAgICAgICAgICAgICAgICAgICBAY2xh
c3NtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBnZXRfYXJyYXlfaXRlbV9jX3R5
cGVfdGV4dChjbHMpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjbHMucmVk
dWNlX3RvX3Jhd190eXBlKCkuZ2V0X2FycmF5X2l0ZW1fcmF3X2NfdHlwZV90ZXh0KCkKLQotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gUGxhaW5JbnRlZ2VyCi0KLSAgICAgICAgICAgICAgICBl
bHNlOgotCi0gICAgICAgICAgICAgICAgICAgIGNsYXNzIFR5cGVkZWZJbnRlZ2VyOgotICAgICAg
ICAgICAgICAgICAgICAgICAgQGNsYXNzbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgICAgICBk
ZWYgcmVzb2x2ZV9pbm5lcihjbHMsIHJlc29sdmVfY29udGV4dCk6Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcGFzcwotCi0gICAgICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9k
Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZWYgcmVxdWVzdF91c2VyX3J1bnRpbWVfY2FzdChy
ZXF1ZXN0KToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIlVu
c3VwcG9ydGVkIikKLQotICAgICAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAg
ICAgICAgICAgICAgICAgICAgICAgZGVmIHJlcXVlc3RfaW50ZXJuYWxfcnVudGltZV9jYXN0KCk6
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgUmF3VHlwZXMuSW50LnJlcXVlc3RfcmF3X2lu
dGVybmFsX3J1bnRpbWVfY2FzdCgpCi0KLSAgICAgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNt
ZXRob2QKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBnZXRfY29kZV9nZW5lcmF0b3IoKToK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcyBDb2RlR2VuZXJhdG9yOgotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGRlZiBnZW5lcmF0ZV90eXBlX2J1aWxkZXIod3JpdGVyLCBnZW5lcmF0
ZV9jb250ZXh0KToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHBlci53
cml0ZV9kb2Mod3JpdGVyKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZml4
ZWRfdHlwZV9uYW1lLm91dHB1dF9jb21tZW50KHdyaXRlcikKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCJ0eXBlZGVmIGludCAiKQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVuZChmaXhlZF90eXBlX25hbWUu
Y2xhc3NfbmFtZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5h
cHBlbmQoIjtcblxuIikKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAc3RhdGlj
bWV0aG9kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZiByZWdpc3Rlcl91c2Uo
Zm9yd2FyZF9saXN0ZW5lcik6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
YXNzCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X2dlbmVyYXRlX3Bhc3NfaWQoKToK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBUeXBlQnVpbGRlclBh
c3MuVFlQRURFRgotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENvZGVHZW5l
cmF0b3IKLQotICAgICAgICAgICAgICAgICAgICAgICAgQGNsYXNzbWV0aG9kCi0gICAgICAgICAg
ICAgICAgICAgICAgICBkZWYgZ2V0X3ZhbGlkYXRvcl9jYWxsX3RleHQoY2xzKToKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmF3VHlwZXMuSW50LmdldF9yYXdfdmFsaWRhdG9y
X2NhbGxfdGV4dCgpCi0KLSAgICAgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGRlZiByZWR1Y2VfdG9fcmF3X3R5cGUoKToKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmF3VHlwZXMuSW50Ci0KLSAgICAgICAgICAgICAg
ICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBnZXRf
dHlwZV9tb2RlbCgpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBUeXBlTW9k
ZWwuSW50Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGRlZiBnZXRfc2V0dGVyX3ZhbHVlX2V4cHJlc3Npb25fcGF0dGVybigp
OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb25lCi0KLSAgICAgICAgICAg
ICAgICAgICAgICAgIEBjbGFzc21ldGhvZAotICAgICAgICAgICAgICAgICAgICAgICAgZGVmIGdl
dF9hcnJheV9pdGVtX2NfdHlwZV90ZXh0KGNscyk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGhlbHBlci5mdWxsX25hbWVfcHJlZml4X2Zvcl91c2UgKyBmaXhlZF90eXBlX25h
bWUuY2xhc3NfbmFtZQotCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBUeXBlZGVmSW50ZWdl
cgotCi0gICAgICAgIGVsaWYganNvbl90eXBhYmxlWyJ0eXBlIl0gPT0gIm9iamVjdCI6Ci0gICAg
ICAgICAgICBpZiAicHJvcGVydGllcyIgaW4ganNvbl90eXBhYmxlOgotCi0gICAgICAgICAgICAg
ICAgY2xhc3MgQ2xhc3NCaW5kaW5nOgotICAgICAgICAgICAgICAgICAgICByZXNvbHZlX2RhdGFf
ID0gTm9uZQotICAgICAgICAgICAgICAgICAgICBuZWVkX3VzZXJfcnVudGltZV9jYXN0XyA9IEZh
bHNlCi0gICAgICAgICAgICAgICAgICAgIG5lZWRfaW50ZXJuYWxfcnVudGltZV9jYXN0XyA9IEZh
bHNlCi0KLSAgICAgICAgICAgICAgICAgICAgQGNsYXNzbWV0aG9kCi0gICAgICAgICAgICAgICAg
ICAgIGRlZiByZXNvbHZlX2lubmVyKGNscywgcmVzb2x2ZV9jb250ZXh0KToKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIGNscy5yZXNvbHZlX2RhdGFfOgotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybgotCi0gICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzID0ganNv
bl90eXBhYmxlWyJwcm9wZXJ0aWVzIl0KLSAgICAgICAgICAgICAgICAgICAgICAgIG1haW4gPSBb
XQotICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWwgPSBbXQotCi0gICAgICAgICAgICAg
ICAgICAgICAgICBhZF9ob2NfdHlwZV9saXN0ID0gW10KLQotICAgICAgICAgICAgICAgICAgICAg
ICAgZm9yIHByb3AgaW4gcHJvcGVydGllczoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
cm9wX25hbWUgPSBwcm9wWyJuYW1lIl0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZF9o
b2NfdHlwZV9jb250ZXh0ID0gY2xzLkFkSG9jVHlwZUNvbnRleHRJbXBsKHByb3BfbmFtZSwgZml4
ZWRfdHlwZV9uYW1lLmNsYXNzX25hbWUsIHJlc29sdmVfY29udGV4dCwgYWRfaG9jX3R5cGVfbGlz
dCwgaGVscGVyLmZ1bGxfbmFtZV9wcmVmaXhfZm9yX2ltcGwpCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYmluZGluZyA9IHJlc29sdmVfcGFyYW1fdHlwZShwcm9wLCBjb250ZXh0X2RvbWFp
bl9uYW1lLCBhZF9ob2NfdHlwZV9jb250ZXh0KQotCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29kZV9nZW5lcmF0b3IgPSBiaW5kaW5nLmdldF9jb2RlX2dlbmVyYXRvcigpCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgY29kZV9nZW5lcmF0b3I6Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvZGVfZ2VuZXJhdG9yLnJlZ2lzdGVyX3VzZShyZXNvbHZlX2NvbnRl
eHQuZm9yd2FyZF9saXN0ZW5lcikKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNz
IFByb3BlcnR5RGF0YToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1fdHlw
ZV9iaW5kaW5nID0gYmluZGluZwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwID0g
cHJvcAotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgcHJvcC5nZXQoIm9wdGlvbmFs
Iik6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbmFsLmFwcGVuZChQcm9w
ZXJ0eURhdGEpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbWFpbi5hcHBlbmQoUHJvcGVydHlEYXRhKQotCi0gICAgICAg
ICAgICAgICAgICAgICAgICBjbGFzcyBSZXNvbHZlRGF0YToKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtYWluX3Byb3BlcnRpZXMgPSBtYWluCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgb3B0aW9uYWxfcHJvcGVydGllcyA9IG9wdGlvbmFsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYWRfaG9jX3R5cGVzID0gYWRfaG9jX3R5cGVfbGlzdAotCi0gICAgICAgICAgICAgICAg
ICAgICAgICBjbHMucmVzb2x2ZV9kYXRhXyA9IFJlc29sdmVEYXRhCi0KLSAgICAgICAgICAgICAg
ICAgICAgICAgIGZvciBhZF9ob2MgaW4gYWRfaG9jX3R5cGVfbGlzdDoKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBhZF9ob2MucmVzb2x2ZV9pbm5lcihyZXNvbHZlX2NvbnRleHQpCi0KLSAg
ICAgICAgICAgICAgICAgICAgQGNsYXNzbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgIGRlZiBy
ZXF1ZXN0X3VzZXJfcnVudGltZV9jYXN0KGNscywgcmVxdWVzdCk6Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBpZiBub3QgcmVxdWVzdDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4KLSAgICAgICAgICAgICAgICAgICAgICAgIGNscy5uZWVkX3VzZXJfcnVudGltZV9jYXN0XyA9
IFRydWUKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QuYWNrbm93bGVkZ2UoKQotICAg
ICAgICAgICAgICAgICAgICAgICAgY2xzLnJlcXVlc3RfaW50ZXJuYWxfcnVudGltZV9jYXN0KCkK
LQotICAgICAgICAgICAgICAgICAgICBAY2xhc3NtZXRob2QKLSAgICAgICAgICAgICAgICAgICAg
ZGVmIHJlcXVlc3RfaW50ZXJuYWxfcnVudGltZV9jYXN0KGNscyk6Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBpZiBjbHMubmVlZF9pbnRlcm5hbF9ydW50aW1lX2Nhc3RfOgotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybgotICAgICAgICAgICAgICAgICAgICAgICAgY2xzLm5lZWRf
aW50ZXJuYWxfcnVudGltZV9jYXN0XyA9IFRydWUKLSAgICAgICAgICAgICAgICAgICAgICAgIGZv
ciBwIGluIGNscy5yZXNvbHZlX2RhdGFfLm1haW5fcHJvcGVydGllczoKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwLnBhcmFtX3R5cGVfYmluZGluZy5yZXF1ZXN0X2ludGVybmFsX3J1bnRp
bWVfY2FzdCgpCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgcCBpbiBjbHMucmVzb2x2ZV9k
YXRhXy5vcHRpb25hbF9wcm9wZXJ0aWVzOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAu
cGFyYW1fdHlwZV9iaW5kaW5nLnJlcXVlc3RfaW50ZXJuYWxfcnVudGltZV9jYXN0KCkKLQotICAg
ICAgICAgICAgICAgICAgICBAY2xhc3NtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgZGVmIGdl
dF9jb2RlX2dlbmVyYXRvcihjbGFzc19iaW5kaW5nX2Nscyk6Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBjbGFzcyBDb2RlR2VuZXJhdG9yOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBj
bGFzc21ldGhvZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBnZW5lcmF0ZV90eXBl
X2J1aWxkZXIoY2xzLCB3cml0ZXIsIGdlbmVyYXRlX2NvbnRleHQpOgotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXNvbHZlX2RhdGEgPSBjbGFzc19iaW5kaW5nX2Nscy5yZXNvbHZl
X2RhdGFfCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHBlci53cml0ZV9kb2Mo
d3JpdGVyKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc19uYW1lID0gZml4
ZWRfdHlwZV9uYW1lLmNsYXNzX25hbWUKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpc19vcGVuX3R5cGUgPSAoY29udGV4dF9kb21haW5fbmFtZSArICIuIiArIGNsYXNzX25hbWUp
IGluIFRZUEVTX1dJVEhfT1BFTl9GSUVMRF9MSVNUX1NFVAotCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGZpeGVkX3R5cGVfbmFtZS5vdXRwdXRfY29tbWVudCh3cml0ZXIpCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCJjbGFzcyAiKQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuYXBwZW5kKGNsYXNzX25hbWUpCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5hcHBlbmQoIiA6IHB1YmxpYyAi
KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBpc19vcGVuX3R5cGU6Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuYXBwZW5kKCJJbnNwZWN0b3I6
Okluc3BlY3Rvck9iamVjdCIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuYXBwZW5kKCJJbnNw
ZWN0b3I6Okluc3BlY3Rvck9iamVjdEJhc2UiKQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB3cml0ZXIuYXBwZW5kKCIge1xuIikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgd3JpdGVyLm5ld2xpbmUoInB1YmxpYzpcbiIpCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGFkX2hvY190eXBlX3dyaXRlciA9IHdyaXRlci5pbnNlcnRfd3JpdGVyKCIgICAgIikK
LQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgYWRfaG9jX3R5cGUgaW4gcmVz
b2x2ZV9kYXRhLmFkX2hvY190eXBlczoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvZGVfZ2VuZXJhdG9yID0gYWRfaG9jX3R5cGUuZ2V0X2NvZGVfZ2VuZXJhdG9yKCkKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGNvZGVfZ2VuZXJhdG9yOgotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVfZ2VuZXJhdG9yLmdlbmVy
YXRlX3R5cGVfYnVpbGRlcihhZF9ob2NfdHlwZV93cml0ZXIsIGdlbmVyYXRlX2NvbnRleHQpCi0K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmVfbXVsdGlsaW5l
KAotIiIiICAgIGVudW0gewotICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCi0iIiIpCi0KLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfZW51bV9pdGVtcyA9IFtdCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGxlbihyZXNvbHZlX2RhdGEubWFpbl9wcm9wZXJ0
aWVzKSA+IDA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3MgPSAwCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgcHJvcF9kYXRhIGluIHJlc29s
dmVfZGF0YS5tYWluX3Byb3BlcnRpZXM6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaXRlbV9uYW1lID0gQ2FwaXRhbGl6ZXIubG93ZXJfY2FtZWxfY2FzZV90b191cHBl
cihwcm9wX2RhdGEucFsibmFtZSJdKSArICJTZXQiCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3RhdGVfZW51bV9pdGVtcy5hcHBlbmQoaXRlbV9uYW1lKQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCIgICAgICAg
ICVzID0gMSA8PCAlcyxcbiIgJSAoaXRlbV9uYW1lLCBwb3MpKQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHBvcyArPSAxCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBhbGxfZmllbGRzX3NldF92YWx1ZSA9ICIoIiArICgiIHwgIi5qb2luKHN0YXRl
X2VudW1faXRlbXMpKSArICIpIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNl
OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsX2ZpZWxkc19zZXRfdmFs
dWUgPSAiMCIKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3bGlu
ZV9tdWx0aWxpbmUoQ29kZUdlbmVyYXRvckluc3BlY3RvclN0cmluZ3MuY2xhc3NfYmluZGluZ19i
dWlsZGVyX3BhcnRfMQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJSAoYWxsX2ZpZWxkc19zZXRfdmFsdWUsIGNsYXNzX25hbWUsIGNsYXNz
X25hbWUpKQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcyA9IDAKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHByb3BfZGF0YSBpbiByZXNvbHZlX2RhdGEu
bWFpbl9wcm9wZXJ0aWVzOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJv
cF9uYW1lID0gcHJvcF9kYXRhLnBbIm5hbWUiXQotCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwYXJhbV90eXBlX2JpbmRpbmcgPSBwcm9wX2RhdGEucGFyYW1fdHlwZV9iaW5k
aW5nCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbV9yYXdfdHlwZSA9
IHBhcmFtX3R5cGVfYmluZGluZy5yZWR1Y2VfdG9fcmF3X3R5cGUoKQotCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3bGluZV9tdWx0aWxpbmUoQ29kZUdlbmVy
YXRvckluc3BlY3RvclN0cmluZ3MuY2xhc3NfYmluZGluZ19idWlsZGVyX3BhcnRfMgotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKHN0YXRlX2VudW1faXRlbXNbcG9z
XSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDYXBpdGFsaXpl
ci5sb3dlcl9jYW1lbF9jYXNlX3RvX3VwcGVyKHByb3BfbmFtZSksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1fdHlwZV9iaW5kaW5nLmdldF90eXBlX21v
ZGVsKCkuZ2V0X2lucHV0X3BhcmFtX3R5cGVfdGV4dCgpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX2VudW1faXRlbXNbcG9zXSwgcHJvcF9uYW1lLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtX3Jhd190eXBl
LmdldF9zZXR0ZXJfbmFtZSgpLCBwcm9wX25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZm9ybWF0X3NldHRlcl92YWx1ZV9leHByZXNzaW9uKHBhcmFtX3R5
cGVfYmluZGluZywgInZhbHVlIiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3RhdGVfZW51bV9pdGVtc1twb3NdKSkKLQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcG9zICs9IDEKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB3cml0ZXIubmV3bGluZV9tdWx0aWxpbmUoQ29kZUdlbmVyYXRvckluc3BlY3RvclN0cmluZ3Mu
Y2xhc3NfYmluZGluZ19idWlsZGVyX3BhcnRfMwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAoY2xhc3NfbmFtZSwgY2xhc3NfbmFtZSwg
Y2xhc3NfbmFtZSwgY2xhc3NfbmFtZSwgY2xhc3NfbmFtZSkpCi0KLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIiAgICAvKlxuIikKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIiAgICAgKiBTeW50aGV0aWMgY29uc3Ry
dWN0b3I6XG4iKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3bGlu
ZSgiICAgICAqIFJlZlB0cjwlcz4gcmVzdWx0ID0gJXM6OmNyZWF0ZSgpIiAlIChjbGFzc19uYW1l
LCBjbGFzc19uYW1lKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHByb3Bf
ZGF0YSBpbiByZXNvbHZlX2RhdGEubWFpbl9wcm9wZXJ0aWVzOgotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVuZF9tdWx0aWxpbmUoIlxuICAgICAqICAgICAu
c2V0JXMoLi4uKSIgJSBDYXBpdGFsaXplci5sb3dlcl9jYW1lbF9jYXNlX3RvX3VwcGVyKHByb3Bf
ZGF0YS5wWyJuYW1lIl0pKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIu
YXBwZW5kX211bHRpbGluZSgiO1xuICAgICAqL1xuIikKLQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB3cml0ZXIubmV3bGluZV9tdWx0aWxpbmUoQ29kZUdlbmVyYXRvckluc3BlY3Rv
clN0cmluZ3MuY2xhc3NfYmluZGluZ19idWlsZGVyX3BhcnRfNCkKLQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB3cml0ZXIubmV3bGluZSgiICAgIHR5cGVkZWYgSW5zcGVjdG9yOjpU
eXBlQnVpbGRlcjo6U3RydWN0SXRlbVRyYWl0cyBJdGVtVHJhaXRzO1xuIikKLQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmb3IgcHJvcF9kYXRhIGluIHJlc29sdmVfZGF0YS5vcHRp
b25hbF9wcm9wZXJ0aWVzOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJv
cF9uYW1lID0gcHJvcF9kYXRhLnBbIm5hbWUiXQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcGFyYW1fdHlwZV9iaW5kaW5nID0gcHJvcF9kYXRhLnBhcmFtX3R5cGVfYmluZGlu
ZwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0dGVyX25hbWUgPSAic2V0
JXMiICUgQ2FwaXRhbGl6ZXIubG93ZXJfY2FtZWxfY2FzZV90b191cHBlcihwcm9wX25hbWUpCi0K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5hcHBlbmRfbXVsdGls
aW5lKCJcbiAgICB2b2lkICVzIiAlIHNldHRlcl9uYW1lKQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVuZCgiKCVzIHZhbHVlKVxuIiAlIHBhcmFtX3R5cGVf
YmluZGluZy5nZXRfdHlwZV9tb2RlbCgpLmdldF9pbnB1dF9wYXJhbV90eXBlX3RleHQoKSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCIgICAge1xu
IikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCIg
ICAgICAgIHRoaXMtPnNldCVzKEFTQ0lJTGl0ZXJhbChcIiVzXCIpLCAlcyk7XG4iCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAocGFyYW1fdHlwZV9iaW5kaW5nLnJl
ZHVjZV90b19yYXdfdHlwZSgpLmdldF9zZXR0ZXJfbmFtZSgpLCBwcm9wX2RhdGEucFsibmFtZSJd
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdF9zZXR0
ZXJfdmFsdWVfZXhwcmVzc2lvbihwYXJhbV90eXBlX2JpbmRpbmcsICJ2YWx1ZSIpKSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCIgICAgfVxuIikK
LQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBzZXR0ZXJfbmFtZSBp
biBJTlNQRUNUT1JfT0JKRUNUX1NFVFRFUl9OQU1FUzoKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB3cml0ZXIubmV3bGluZSgiICAgIHVzaW5nIEluc3BlY3Rvcjo6SW5z
cGVjdG9yT2JqZWN0QmFzZTo6JXM7XG5cbiIgJSBzZXR0ZXJfbmFtZSkKLQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiBjbGFzc19iaW5kaW5nX2Nscy5uZWVkX3VzZXJfcnVudGlt
ZV9jYXN0XzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXds
aW5lKCIgICAgc3RhdGljIFBhc3NSZWZQdHI8JXM+IHJ1bnRpbWVDYXN0KFBhc3NSZWZQdHI8SW5z
cGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4gdmFsdWUpXG4iICUgY2xhc3NfbmFtZSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCIgICAge1xuIikKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCIgICAgICAg
IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gb2JqZWN0O1xuIikKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCIgICAgICAgIGJvb2wg
Y2FzdFJlcyA9IHZhbHVlLT5hc09iamVjdCgmb2JqZWN0KTtcbiIpCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3bGluZSgiICAgICAgICBBU1NFUlRfVU5VU0VE
KGNhc3RSZXMsIGNhc3RSZXMpO1xuIikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHdyaXRlci5hcHBlbmQoIiNpZiAlc1xuIiAlIFZBTElEQVRPUl9JRkRFRl9OQU1FKQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIiAgICAgICAg
YXNzZXJ0Q29ycmVjdFZhbHVlKG9iamVjdC5nZXQoKSk7XG4iKQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVuZCgiI2VuZGlmICAvLyAlc1xuIiAlIFZBTElE
QVRPUl9JRkRFRl9OQU1FKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3Jp
dGVyLm5ld2xpbmUoIiAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKCVzKSA9PSBzaXplb2Yo
SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3RCYXNlKSwgdHlwZV9jYXN0X3Byb2JsZW0pO1xuIiAl
IGNsYXNzX25hbWUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIu
bmV3bGluZSgiICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8JXMqPihzdGF0aWNfY2FzdDxJbnNw
ZWN0b3I6Okluc3BlY3Rvck9iamVjdEJhc2UqPihvYmplY3QuZ2V0KCkpKTtcbiIgJSBjbGFzc19u
YW1lKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUo
IiAgICB9XG4iKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLmFw
cGVuZCgiXG4iKQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGNsYXNzX2Jp
bmRpbmdfY2xzLm5lZWRfaW50ZXJuYWxfcnVudGltZV9jYXN0XzoKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHdyaXRlci5hcHBlbmQoIiNpZiAlc1xuIiAlIFZBTElEQVRPUl9J
RkRFRl9OQU1FKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5l
d2xpbmUoIiAgICBzdGF0aWMgJXMgdm9pZCBhc3NlcnRDb3JyZWN0VmFsdWUoSW5zcGVjdG9yOjpJ
bnNwZWN0b3JWYWx1ZSogdmFsdWUpO1xuIiAlIElOU1BFQ1RPUl9UWVBFU19HRU5FUkFUT1JfQ09O
RklHX01BUFtvdXRwdXRfdHlwZV1bImV4cG9ydF9tYWNybyJdKQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVuZCgiI2VuZGlmICAvLyAlc1xuIiAlIFZBTElE
QVRPUl9JRkRFRl9OQU1FKQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
bG9zZWRfZmllbGRfc2V0ID0gKGNvbnRleHRfZG9tYWluX25hbWUgKyAiLiIgKyBjbGFzc19uYW1l
KSBub3QgaW4gVFlQRVNfV0lUSF9PUEVOX0ZJRUxEX0xJU1RfU0VUCi0KLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIgPSBnZW5lcmF0ZV9jb250ZXh0
LnZhbGlkYXRvcl93cml0ZXIKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZG9tYWluX2ZpeGVzID0gRG9tYWluTmFtZUZpeGVzLmdldF9maXhlZF9kYXRhKGNvbnRleHRfZG9t
YWluX25hbWUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb21haW5fZ3Vh
cmQgPSBkb21haW5fZml4ZXMuZ2V0X2d1YXJkKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIGRvbWFpbl9ndWFyZDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkb21haW5fZ3VhcmQuZ2VuZXJhdGVfb3Blbih2YWxpZGF0b3Jfd3JpdGVyKQot
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5l
d2xpbmUoInZvaWQgJXMlczo6YXNzZXJ0Q29ycmVjdFZhbHVlKEluc3BlY3Rvcjo6SW5zcGVjdG9y
VmFsdWUqIHZhbHVlKVxuIiAlIChoZWxwZXIuZnVsbF9uYW1lX3ByZWZpeF9mb3JfaW1wbCwgY2xh
c3NfbmFtZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jf
d3JpdGVyLm5ld2xpbmUoIntcbiIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBv
YmplY3Q7XG4iKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9y
X3dyaXRlci5uZXdsaW5lKCIgICAgYm9vbCBjYXN0UmVzID0gdmFsdWUtPmFzT2JqZWN0KCZvYmpl
Y3QpO1xuIikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93
cml0ZXIubmV3bGluZSgiICAgIEFTU0VSVF9VTlVTRUQoY2FzdFJlcywgY2FzdFJlcyk7XG4iKQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHByb3BfZGF0YSBpbiByZXNv
bHZlX2RhdGEubWFpbl9wcm9wZXJ0aWVzOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgiICAgIHtcbiIpCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRfbmFtZSA9ICIlc1BvcyIgJSBwcm9wX2Rh
dGEucFsibmFtZSJdCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFs
aWRhdG9yX3dyaXRlci5uZXdsaW5lKCIgICAgICAgIEluc3BlY3Rvck9iamVjdDo6aXRlcmF0b3Ig
JXM7XG4iICUgaXRfbmFtZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIiAgICAgICAgJXMgPSBvYmplY3QtPmZpbmQoXCIl
c1wiKTtcbiIgJSAoaXRfbmFtZSwgcHJvcF9kYXRhLnBbIm5hbWUiXSkpCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCIgICAg
ICAgIEFTU0VSVCglcyAhPSBvYmplY3QtPmVuZCgpKTtcbiIgJSBpdF9uYW1lKQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgi
ICAgICAgICAlcyglcy0+dmFsdWUuZ2V0KCkpO1xuIiAlIChwcm9wX2RhdGEucGFyYW1fdHlwZV9i
aW5kaW5nLmdldF92YWxpZGF0b3JfY2FsbF90ZXh0KCksIGl0X25hbWUpKQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgiICAg
IH1cbiIpCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGNsb3NlZF9m
aWVsZF9zZXQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRh
dG9yX3dyaXRlci5uZXdsaW5lKCIgICAgaW50IGZvdW5kUHJvcGVydGllc0NvdW50ID0gJXM7XG4i
ICUgbGVuKHJlc29sdmVfZGF0YS5tYWluX3Byb3BlcnRpZXMpKQotCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmb3IgcHJvcF9kYXRhIGluIHJlc29sdmVfZGF0YS5vcHRpb25h
bF9wcm9wZXJ0aWVzOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZh
bGlkYXRvcl93cml0ZXIubmV3bGluZSgiICAgIHtcbiIpCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaXRfbmFtZSA9ICIlc1BvcyIgJSBwcm9wX2RhdGEucFsibmFtZSJd
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRl
ci5uZXdsaW5lKCIgICAgICAgIEluc3BlY3Rvck9iamVjdDo6aXRlcmF0b3IgJXM7XG4iICUgaXRf
bmFtZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jf
d3JpdGVyLm5ld2xpbmUoIiAgICAgICAgJXMgPSBvYmplY3QtPmZpbmQoXCIlc1wiKTtcbiIgJSAo
aXRfbmFtZSwgcHJvcF9kYXRhLnBbIm5hbWUiXSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCIgICAgICAgIGlmICglcyAh
PSBvYmplY3QtPmVuZCgpKSB7XG4iICUgaXRfbmFtZSkKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIiAgICAgICAgICAgICVz
KCVzLT52YWx1ZS5nZXQoKSk7XG4iICUgKHByb3BfZGF0YS5wYXJhbV90eXBlX2JpbmRpbmcuZ2V0
X3ZhbGlkYXRvcl9jYWxsX3RleHQoKSwgaXRfbmFtZSkpCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgY2xvc2VkX2ZpZWxkX3NldDoKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCIgICAg
ICAgICAgICArK2ZvdW5kUHJvcGVydGllc0NvdW50O1xuIikKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIiAgICAgICAgfVxu
IikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3Jp
dGVyLm5ld2xpbmUoIiAgICB9XG4iKQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiBjbG9zZWRfZmllbGRfc2V0OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgiICAgIGlmIChmb3VuZFByb3BlcnRp
ZXNDb3VudCAhPSBvYmplY3QtPnNpemUoKSlcbiIpCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCIgICAgICAgIEZBVEFMKFwi
VW5leHBlY3RlZCBwcm9wZXJ0aWVzIGluIG9iamVjdDogJXNcXG5cIiwgb2JqZWN0LT50b0pTT05T
dHJpbmcoKS5hc2NpaSgpLmRhdGEoKSk7XG4iKQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCJ9XG4iKQotCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiBkb21haW5fZ3VhcmQ6Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZG9tYWluX2d1YXJkLmdlbmVyYXRlX2Nsb3NlKHZhbGlk
YXRvcl93cml0ZXIpCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlk
YXRvcl93cml0ZXIubmV3bGluZSgiXG5cbiIpCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgaXNfb3Blbl90eXBlOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY3BwX3dyaXRlciA9IGdlbmVyYXRlX2NvbnRleHQuY3BwX3dyaXRlcgotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVuZCgiXG4iKQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIiAgICAvLyBQcm9wZXJ0eSBu
YW1lcyBmb3IgdHlwZSBnZW5lcmF0ZWQgYXMgb3Blbi5cbiIpCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBmb3IgcHJvcF9kYXRhIGluIHJlc29sdmVfZGF0YS5tYWluX3Byb3Bl
cnRpZXMgKyByZXNvbHZlX2RhdGEub3B0aW9uYWxfcHJvcGVydGllczoKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wX25hbWUgPSBwcm9wX2RhdGEucFsibmFtZSJd
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcF9maWVsZF9uYW1l
ID0gQ2FwaXRhbGl6ZXIubG93ZXJfY2FtZWxfY2FzZV90b191cHBlcihwcm9wX25hbWUpCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIiAgICBz
dGF0aWMgY29uc3QgY2hhciogJXM7XG4iICUgKHByb3BfZmllbGRfbmFtZSkpCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3BwX3dyaXRlci5uZXdsaW5lKCJjb25zdCBj
aGFyKiAlcyVzOjolcyA9IFwiJXNcIjtcbiIgJSAoaGVscGVyLmZ1bGxfbmFtZV9wcmVmaXhfZm9y
X2ltcGwsIGNsYXNzX25hbWUsIHByb3BfZmllbGRfbmFtZSwgcHJvcF9uYW1lKSkKLQotCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCJ9O1xuXG4iKQotCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGRlZiBnZW5lcmF0ZV9mb3J3YXJkX2RlY2xhcmF0aW9uKHdyaXRlcik6Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzX25hbWUgPSBmaXhlZF90eXBlX25h
bWUuY2xhc3NfbmFtZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3
bGluZSgiY2xhc3MgIikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLmFw
cGVuZChjbGFzc19uYW1lKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIu
YXBwZW5kKCI7XG4iKQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhv
ZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZiByZWdpc3Rlcl91c2UoZm9yd2FyZF9s
aXN0ZW5lcik6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHBlci5hZGRfdG9f
Zm9yd2FyZF9saXN0ZW5lcihmb3J3YXJkX2xpc3RlbmVyKQotCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBn
ZXRfZ2VuZXJhdGVfcGFzc19pZCgpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gVHlwZUJ1aWxkZXJQYXNzLk1BSU4KLQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIENvZGVHZW5lcmF0b3IKLQotICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0g
ICAgICAgICAgICAgICAgICAgIGRlZiBnZXRfdmFsaWRhdG9yX2NhbGxfdGV4dCgpOgotICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGhlbHBlci5mdWxsX25hbWVfcHJlZml4X2Zvcl91c2Ug
KyBmaXhlZF90eXBlX25hbWUuY2xhc3NfbmFtZSArICI6OmFzc2VydENvcnJlY3RWYWx1ZSIKLQot
ICAgICAgICAgICAgICAgICAgICBAY2xhc3NtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgZGVm
IGdldF9hcnJheV9pdGVtX2NfdHlwZV90ZXh0KGNscyk6Ci0gICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gaGVscGVyLmZ1bGxfbmFtZV9wcmVmaXhfZm9yX3VzZSArIGZpeGVkX3R5cGVfbmFt
ZS5jbGFzc19uYW1lCi0KLSAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAg
ICAgICAgICAgICAgICBkZWYgZ2V0X3NldHRlcl92YWx1ZV9leHByZXNzaW9uX3BhdHRlcm4oKToK
LSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb25lCi0KLSAgICAgICAgICAgICAgICAg
ICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgICAgICAgICBkZWYgcmVkdWNlX3RvX3Jhd190
eXBlKCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmF3VHlwZXMuT2JqZWN0Ci0K
LSAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgICAgICAgICBk
ZWYgZ2V0X3R5cGVfbW9kZWwoKToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBUeXBl
TW9kZWwuUmVmUHRyQmFzZWQoaGVscGVyLmZ1bGxfbmFtZV9wcmVmaXhfZm9yX3VzZSArIGZpeGVk
X3R5cGVfbmFtZS5jbGFzc19uYW1lKQotCi0gICAgICAgICAgICAgICAgICAgIGNsYXNzIEFkSG9j
VHlwZUNvbnRleHRJbXBsOgotICAgICAgICAgICAgICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNl
bGYsIHByb3BlcnR5X25hbWUsIGNsYXNzX25hbWUsIHJlc29sdmVfY29udGV4dCwgYWRfaG9jX3R5
cGVfbGlzdCwgcGFyZW50X2Z1bGxfbmFtZV9wcmVmaXgpOgotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNlbGYucHJvcGVydHlfbmFtZSA9IHByb3BlcnR5X25hbWUKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzZWxmLmNsYXNzX25hbWUgPSBjbGFzc19uYW1lCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2VsZi5yZXNvbHZlX2NvbnRleHQgPSByZXNvbHZlX2NvbnRleHQKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFkX2hvY190eXBlX2xpc3QgPSBhZF9ob2Nf
dHlwZV9saXN0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jb250YWluZXJfZnVs
bF9uYW1lX3ByZWZpeCA9IHBhcmVudF9mdWxsX25hbWVfcHJlZml4ICsgY2xhc3NfbmFtZSArICI6
OiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbnRhaW5lcl9yZWxhdGl2ZV9u
YW1lX3ByZWZpeCA9ICIiCi0KLSAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBnZXRfdHlwZV9u
YW1lX2ZpeChzZWxmKToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcyBOYW1lRml4
OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc19uYW1lID0gQ2FwaXRhbGl6
ZXIubG93ZXJfY2FtZWxfY2FzZV90b191cHBlcihzZWxmLnByb3BlcnR5X25hbWUpCi0KLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkZWYgb3V0cHV0X2NvbW1lbnQod3JpdGVyKToKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCIvLyBOYW1lZCBhZnRlciBw
cm9wZXJ0eSBuYW1lICclcycgd2hpbGUgZ2VuZXJhdGluZyAlcy5cbiIgJSAoc2VsZi5wcm9wZXJ0
eV9uYW1lLCBzZWxmLmNsYXNzX25hbWUpKQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIE5hbWVGaXgKLQotICAgICAgICAgICAgICAgICAgICAgICAgZGVmIGFkZF90eXBlKHNl
bGYsIGJpbmRpbmcpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYWRfaG9jX3R5
cGVfbGlzdC5hcHBlbmQoYmluZGluZykKLQotICAgICAgICAgICAgICAgIHJldHVybiBDbGFzc0Jp
bmRpbmcKLSAgICAgICAgICAgIGVsc2U6Ci0KLSAgICAgICAgICAgICAgICBjbGFzcyBQbGFpbk9i
amVjdEJpbmRpbmc6Ci0gICAgICAgICAgICAgICAgICAgIEBjbGFzc21ldGhvZAotICAgICAgICAg
ICAgICAgICAgICBkZWYgcmVzb2x2ZV9pbm5lcihjbHMsIHJlc29sdmVfY29udGV4dCk6Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBwYXNzCi0KLSAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21l
dGhvZAotICAgICAgICAgICAgICAgICAgICBkZWYgcmVxdWVzdF91c2VyX3J1bnRpbWVfY2FzdChy
ZXF1ZXN0KToKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKLQotICAgICAgICAgICAgICAg
ICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgIGRlZiByZXF1ZXN0X2ludGVy
bmFsX3J1bnRpbWVfY2FzdCgpOgotICAgICAgICAgICAgICAgICAgICAgICAgUmF3VHlwZXMuT2Jq
ZWN0LnJlcXVlc3RfcmF3X2ludGVybmFsX3J1bnRpbWVfY2FzdCgpCi0KLSAgICAgICAgICAgICAg
ICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X2NvZGVfZ2Vu
ZXJhdG9yKCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBwYXNzCi0KLSAgICAgICAgICAgICAg
ICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X3ZhbGlkYXRv
cl9jYWxsX3RleHQoKToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAiUnVudGltZUNh
c3RIZWxwZXI6OmFzc2VydFR5cGU8SW5zcGVjdG9yVmFsdWU6OlR5cGVPYmplY3Q+IgotCi0gICAg
ICAgICAgICAgICAgICAgIEBjbGFzc21ldGhvZAotICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0
X2FycmF5X2l0ZW1fY190eXBlX3RleHQoY2xzKToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBjbHMucmVkdWNlX3RvX3Jhd190eXBlKCkuZ2V0X2FycmF5X2l0ZW1fcmF3X2NfdHlwZV90
ZXh0KCkKLQotICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICAg
ICAgICAgIGRlZiBnZXRfc2V0dGVyX3ZhbHVlX2V4cHJlc3Npb25fcGF0dGVybigpOgotICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKLQotICAgICAgICAgICAgICAgICAgICBAc3Rh
dGljbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgIGRlZiByZWR1Y2VfdG9fcmF3X3R5cGUoKToK
LSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSYXdUeXBlcy5PYmplY3QKLQotICAgICAg
ICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgIGRlZiBnZXRf
dHlwZV9tb2RlbCgpOgotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFR5cGVNb2RlbC5P
YmplY3QKLQotICAgICAgICAgICAgICAgIHJldHVybiBQbGFpbk9iamVjdEJpbmRpbmcKLSAgICAg
ICAgZWxpZiBqc29uX3R5cGFibGVbInR5cGUiXSA9PSAiYXJyYXkiOgotICAgICAgICAgICAgaWYg
Iml0ZW1zIiBpbiBqc29uX3R5cGFibGU6Ci0KLSAgICAgICAgICAgICAgICBhZF9ob2NfdHlwZXMg
PSBbXQotCi0gICAgICAgICAgICAgICAgY2xhc3MgQWRIb2NUeXBlQ29udGV4dDoKLSAgICAgICAg
ICAgICAgICAgICAgY29udGFpbmVyX2Z1bGxfbmFtZV9wcmVmaXggPSAiPG5vdCB5ZXQgZGVmaW5l
ZD4iCi0gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcl9yZWxhdGl2ZV9uYW1lX3ByZWZpeCA9
ICIiCi0KLSAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgICAg
ICAgICBkZWYgZ2V0X3R5cGVfbmFtZV9maXgoKToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBmaXhlZF90eXBlX25hbWUKLQotICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9k
Ci0gICAgICAgICAgICAgICAgICAgIGRlZiBhZGRfdHlwZShiaW5kaW5nKToKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGFkX2hvY190eXBlcy5hcHBlbmQoYmluZGluZykKLQotICAgICAgICAgICAg
ICAgIGl0ZW1fYmluZGluZyA9IHJlc29sdmVfcGFyYW1fdHlwZShqc29uX3R5cGFibGVbIml0ZW1z
Il0sIGNvbnRleHRfZG9tYWluX25hbWUsIEFkSG9jVHlwZUNvbnRleHQpCi0KLSAgICAgICAgICAg
ICAgICBjbGFzcyBBcnJheUJpbmRpbmc6Ci0gICAgICAgICAgICAgICAgICAgIHJlc29sdmVfZGF0
YV8gPSBOb25lCi0gICAgICAgICAgICAgICAgICAgIG5lZWRfaW50ZXJuYWxfcnVudGltZV9jYXN0
XyA9IEZhbHNlCi0KLSAgICAgICAgICAgICAgICAgICAgQGNsYXNzbWV0aG9kCi0gICAgICAgICAg
ICAgICAgICAgIGRlZiByZXNvbHZlX2lubmVyKGNscywgcmVzb2x2ZV9jb250ZXh0KToKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIGNscy5yZXNvbHZlX2RhdGFfOgotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybgotCi0gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcyBSZXNv
bHZlRGF0YToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtX3R5cGVfYmluZGluZyA9
IGl0ZW1fYmluZGluZwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkX2hvY190eXBlX2xp
c3QgPSBhZF9ob2NfdHlwZXMKLQotICAgICAgICAgICAgICAgICAgICAgICAgY2xzLnJlc29sdmVf
ZGF0YV8gPSBSZXNvbHZlRGF0YQotCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgdCBpbiBh
ZF9ob2NfdHlwZXM6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdC5yZXNvbHZlX2lubmVy
KHJlc29sdmVfY29udGV4dCkKLQotICAgICAgICAgICAgICAgICAgICBAY2xhc3NtZXRob2QKLSAg
ICAgICAgICAgICAgICAgICAgZGVmIHJlcXVlc3RfdXNlcl9ydW50aW1lX2Nhc3QoY2xzLCByZXF1
ZXN0KToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiTm90IGltcGxl
bWVudGVkIHlldCIpCi0KLSAgICAgICAgICAgICAgICAgICAgQGNsYXNzbWV0aG9kCi0gICAgICAg
ICAgICAgICAgICAgIGRlZiByZXF1ZXN0X2ludGVybmFsX3J1bnRpbWVfY2FzdChjbHMpOgotICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgY2xzLm5lZWRfaW50ZXJuYWxfcnVudGltZV9jYXN0XzoK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4KLSAgICAgICAgICAgICAgICAgICAg
ICAgIGNscy5uZWVkX2ludGVybmFsX3J1bnRpbWVfY2FzdF8gPSBUcnVlCi0gICAgICAgICAgICAg
ICAgICAgICAgICBjbHMucmVzb2x2ZV9kYXRhXy5pdGVtX3R5cGVfYmluZGluZy5yZXF1ZXN0X2lu
dGVybmFsX3J1bnRpbWVfY2FzdCgpCi0KLSAgICAgICAgICAgICAgICAgICAgQGNsYXNzbWV0aG9k
Ci0gICAgICAgICAgICAgICAgICAgIGRlZiBnZXRfY29kZV9nZW5lcmF0b3IoYXJyYXlfYmluZGlu
Z19jbHMpOgotCi0gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcyBDb2RlR2VuZXJhdG9yOgot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkZWYgZ2VuZXJhdGVfdHlwZV9idWlsZGVyKHdyaXRlciwgZ2VuZXJhdGVf
Y29udGV4dCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkX2hvY190eXBlX3dy
aXRlciA9IHdyaXRlcgotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmVf
ZGF0YSA9IGFycmF5X2JpbmRpbmdfY2xzLnJlc29sdmVfZGF0YV8KLQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBmb3IgYWRfaG9jX3R5cGUgaW4gcmVzb2x2ZV9kYXRhLmFkX2hvY190
eXBlX2xpc3Q6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlX2dlbmVy
YXRvciA9IGFkX2hvY190eXBlLmdldF9jb2RlX2dlbmVyYXRvcigpCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiBjb2RlX2dlbmVyYXRvcjoKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb2RlX2dlbmVyYXRvci5nZW5lcmF0ZV90eXBlX2J1aWxk
ZXIoYWRfaG9jX3R5cGVfd3JpdGVyLCBnZW5lcmF0ZV9jb250ZXh0KQotCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGRlZiBnZW5lcmF0ZV9mb3J3YXJkX2RlY2xhcmF0aW9uKHdyaXRlcik6Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHBhc3MKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBz
dGF0aWNtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWYgcmVnaXN0ZXJfdXNl
KGZvcndhcmRfbGlzdGVuZXIpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVt
X2NvZGVfZ2VuZXJhdG9yID0gaXRlbV9iaW5kaW5nLmdldF9jb2RlX2dlbmVyYXRvcigpCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGl0ZW1fY29kZV9nZW5lcmF0b3I6Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtX2NvZGVfZ2VuZXJhdG9yLnJlZ2lz
dGVyX3VzZShmb3J3YXJkX2xpc3RlbmVyKQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
QHN0YXRpY21ldGhvZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBnZXRfZ2VuZXJh
dGVfcGFzc19pZCgpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHlw
ZUJ1aWxkZXJQYXNzLk1BSU4KLQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENvZGVH
ZW5lcmF0b3IKLQotICAgICAgICAgICAgICAgICAgICBAY2xhc3NtZXRob2QKLSAgICAgICAgICAg
ICAgICAgICAgZGVmIGdldF92YWxpZGF0b3JfY2FsbF90ZXh0KGNscyk6Ci0gICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gY2xzLmdldF9hcnJheV9pdGVtX2NfdHlwZV90ZXh0KCkgKyAiOjph
c3NlcnRDb3JyZWN0VmFsdWUiCi0KLSAgICAgICAgICAgICAgICAgICAgQGNsYXNzbWV0aG9kCi0g
ICAgICAgICAgICAgICAgICAgIGRlZiBnZXRfYXJyYXlfaXRlbV9jX3R5cGVfdGV4dChjbHMpOgot
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlcGxhY2VfcmlnaHRfc2hpZnQoIkluc3Bl
Y3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5PCVzPiIgJSBjbHMucmVzb2x2ZV9kYXRhXy5pdGVtX3R5
cGVfYmluZGluZy5nZXRfYXJyYXlfaXRlbV9jX3R5cGVfdGV4dCgpKQotCi0gICAgICAgICAgICAg
ICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgZGVmIGdldF9zZXR0ZXJf
dmFsdWVfZXhwcmVzc2lvbl9wYXR0ZXJuKCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gTm9uZQotCi0gICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAg
ICAgICAgICAgZGVmIHJlZHVjZV90b19yYXdfdHlwZSgpOgotICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIFJhd1R5cGVzLkFycmF5Ci0KLSAgICAgICAgICAgICAgICAgICAgQGNsYXNzbWV0
aG9kCi0gICAgICAgICAgICAgICAgICAgIGRlZiBnZXRfdHlwZV9tb2RlbChjbHMpOgotICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIFR5cGVNb2RlbC5SZWZQdHJCYXNlZChjbHMuZ2V0X2Fy
cmF5X2l0ZW1fY190eXBlX3RleHQoKSkKLQotICAgICAgICAgICAgICAgIHJldHVybiBBcnJheUJp
bmRpbmcKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgIyBGYWxsLXRocm91Z2gg
dG8gcmF3IHR5cGUuCi0gICAgICAgICAgICAgICAgcGFzcwotCi0gICAgICAgIHJhd190eXBlID0g
UmF3VHlwZXMuZ2V0KGpzb25fdHlwYWJsZVsidHlwZSJdKQotCi0gICAgICAgIHJldHVybiBSYXdU
eXBlQmluZGluZyhyYXdfdHlwZSkKLQotCi1jbGFzcyBSYXdUeXBlQmluZGluZzoKLSAgICBkZWYg
X19pbml0X18oc2VsZiwgcmF3X3R5cGUpOgotICAgICAgICBzZWxmLnJhd190eXBlXyA9IHJhd190
eXBlCi0KLSAgICBkZWYgcmVzb2x2ZV9pbm5lcihzZWxmLCByZXNvbHZlX2NvbnRleHQpOgotICAg
ICAgICBwYXNzCi0KLSAgICBkZWYgcmVxdWVzdF91c2VyX3J1bnRpbWVfY2FzdChzZWxmLCByZXF1
ZXN0KToKLSAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJVbnN1cHBvcnRlZCIpCi0KLSAgICBkZWYg
cmVxdWVzdF9pbnRlcm5hbF9ydW50aW1lX2Nhc3Qoc2VsZik6Ci0gICAgICAgIHNlbGYucmF3X3R5
cGVfLnJlcXVlc3RfcmF3X2ludGVybmFsX3J1bnRpbWVfY2FzdCgpCi0KLSAgICBkZWYgZ2V0X2Nv
ZGVfZ2VuZXJhdG9yKHNlbGYpOgotICAgICAgICByZXR1cm4gTm9uZQotCi0gICAgZGVmIGdldF92
YWxpZGF0b3JfY2FsbF90ZXh0KHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5yYXdfdHlwZV8u
Z2V0X3Jhd192YWxpZGF0b3JfY2FsbF90ZXh0KCkKLQotICAgIGRlZiBnZXRfYXJyYXlfaXRlbV9j
X3R5cGVfdGV4dChzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYucmF3X3R5cGVfLmdldF9hcnJh
eV9pdGVtX3Jhd19jX3R5cGVfdGV4dCgpCi0KLSAgICBkZWYgZ2V0X3NldHRlcl92YWx1ZV9leHBy
ZXNzaW9uX3BhdHRlcm4oc2VsZik6Ci0gICAgICAgIHJldHVybiBOb25lCi0KLSAgICBkZWYgcmVk
dWNlX3RvX3Jhd190eXBlKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5yYXdfdHlwZV8KLQot
ICAgIGRlZiBnZXRfdHlwZV9tb2RlbChzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYucmF3X3R5
cGVfLmdldF9yYXdfdHlwZV9tb2RlbCgpCi0KLQotY2xhc3MgVHlwZURhdGEob2JqZWN0KToKLSAg
ICBkZWYgX19pbml0X18oc2VsZiwganNvbl90eXBlLCBqc29uX2RvbWFpbiwgZG9tYWluX2RhdGEp
OgotICAgICAgICBzZWxmLmpzb25fdHlwZV8gPSBqc29uX3R5cGUKLSAgICAgICAgc2VsZi5qc29u
X2RvbWFpbl8gPSBqc29uX2RvbWFpbgotICAgICAgICBzZWxmLmRvbWFpbl9kYXRhXyA9IGRvbWFp
bl9kYXRhCi0KLSAgICAgICAgaWYgInR5cGUiIG5vdCBpbiBqc29uX3R5cGU6Ci0gICAgICAgICAg
ICByYWlzZSBFeGNlcHRpb24oIlVua25vd24gdHlwZSIpCi0KLSAgICAgICAganNvbl90eXBlX25h
bWUgPSBqc29uX3R5cGVbInR5cGUiXQotICAgICAgICBzZWxmLnJhd190eXBlXyA9IFJhd1R5cGVz
LmdldChqc29uX3R5cGVfbmFtZSkKLSAgICAgICAgc2VsZi5iaW5kaW5nX2JlaW5nX3Jlc29sdmVk
XyA9IEZhbHNlCi0gICAgICAgIHNlbGYuYmluZGluZ18gPSBOb25lCi0KLSAgICBkZWYgZ2V0X3Jh
d190eXBlKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5yYXdfdHlwZV8KLQotICAgIGRlZiBn
ZXRfYmluZGluZyhzZWxmKToKLSAgICAgICAgaWYgbm90IHNlbGYuYmluZGluZ186Ci0gICAgICAg
ICAgICBpZiBzZWxmLmJpbmRpbmdfYmVpbmdfcmVzb2x2ZWRfOgotICAgICAgICAgICAgICAgIHJh
aXNlIEV4Y2VwdGlvbigiVHlwZSAlcyBpcyBhbHJlYWR5IGJlaW5nIHJlc29sdmVkIiAlIHNlbGYu
anNvbl90eXBlX1sidHlwZSJdKQotICAgICAgICAgICAgIyBSZXNvbHZlIG9ubHkgbGF6aWx5LCBi
ZWNhdXNlIHJlc29sdmluZyBvbmUgbmFtZWQgdHlwZSBtYXkgcmVxdWlyZSByZXNvbHZpbmcgc29t
ZSBvdGhlciBuYW1lZCB0eXBlLgotICAgICAgICAgICAgc2VsZi5iaW5kaW5nX2JlaW5nX3Jlc29s
dmVkXyA9IFRydWUKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBzZWxmLmJpbmRp
bmdfID0gVHlwZUJpbmRpbmdzLmNyZWF0ZV9uYW1lZF90eXBlX2RlY2xhcmF0aW9uKHNlbGYuanNv
bl90eXBlXywgc2VsZi5qc29uX2RvbWFpbl9bImRvbWFpbiJdLCBzZWxmKQotICAgICAgICAgICAg
ZmluYWxseToKLSAgICAgICAgICAgICAgICBzZWxmLmJpbmRpbmdfYmVpbmdfcmVzb2x2ZWRfID0g
RmFsc2UKLQotICAgICAgICByZXR1cm4gc2VsZi5iaW5kaW5nXwotCi0gICAgZGVmIGdldF9qc29u
X3R5cGUoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLmpzb25fdHlwZV8KLQotICAgIGRlZiBn
ZXRfbmFtZShzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuanNvbl90eXBlX1siaWQiXQotCi0g
ICAgZGVmIGdldF9kb21haW5fbmFtZShzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuanNvbl9k
b21haW5fWyJkb21haW4iXQotCi0KLWNsYXNzIERvbWFpbkRhdGE6Ci0gICAgZGVmIF9faW5pdF9f
KHNlbGYsIGpzb25fZG9tYWluKToKLSAgICAgICAgc2VsZi5qc29uX2RvbWFpbiA9IGpzb25fZG9t
YWluCi0gICAgICAgIHNlbGYudHlwZXNfID0gW10KLQotICAgIGRlZiBhZGRfdHlwZShzZWxmLCB0
eXBlX2RhdGEpOgotICAgICAgICBzZWxmLnR5cGVzXy5hcHBlbmQodHlwZV9kYXRhKQotCi0gICAg
ZGVmIG5hbWUoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLmpzb25fZG9tYWluWyJkb21haW4i
XQotCi0gICAgZGVmIHR5cGVzKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi50eXBlc18KLQot
Ci1jbGFzcyBUeXBlTWFwOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhcGksIGRlcGVuZGVuY3lf
YXBpKToKLSAgICAgICAgc2VsZi5tYXBfID0ge30KLSAgICAgICAgc2VsZi5kb21haW5zXyA9IFtd
Ci0gICAgICAgIHNlbGYuZG9tYWluc190b19nZW5lcmF0ZV8gPSBbXQotICAgICAgICBmb3IganNv
bl9kb21haW4gaW4gYXBpWyJkb21haW5zIl06Ci0gICAgICAgICAgICBzZWxmLmFkZF9kb21haW4o
anNvbl9kb21haW4sIFRydWUpCi0gICAgICAgIGZvciBqc29uX2RvbWFpbiBpbiBkZXBlbmRlbmN5
X2FwaVsiZG9tYWlucyJdOgotICAgICAgICAgICAgc2VsZi5hZGRfZG9tYWluKGpzb25fZG9tYWlu
LCBGYWxzZSkKLQotICAgIGRlZiBhZGRfZG9tYWluKHNlbGYsIGpzb25fZG9tYWluLCBzaG91bGRf
Z2VuZXJhdGUpOgotICAgICAgICBkb21haW5fbmFtZSA9IGpzb25fZG9tYWluWyJkb21haW4iXQot
Ci0gICAgICAgIGRvbWFpbl9tYXAgPSB7fQotICAgICAgICBzZWxmLm1hcF9bZG9tYWluX25hbWVd
ID0gZG9tYWluX21hcAotCi0gICAgICAgIGRvbWFpbl9kYXRhID0gRG9tYWluRGF0YShqc29uX2Rv
bWFpbikKLSAgICAgICAgc2VsZi5kb21haW5zXy5hcHBlbmQoZG9tYWluX2RhdGEpCi0KLSAgICAg
ICAgaWYgc2hvdWxkX2dlbmVyYXRlOgotICAgICAgICAgICAgIyBGSVhNRTogVGhlIG9yZGVyIG9m
IHR5cGVzIHNob3VsZCBub3QgbWF0dGVyLiBUaGUgZ2VuZXJhdGVkIGNvZGUgc2hvdWxkIHdvcmsg
cmVnYXJkbGVzcyBvZiB0aGUgb3JkZXIgb2YgdHlwZXMuCi0gICAgICAgICAgICBpZiBkb21haW5f
bmFtZSA9PSAiUGFnZSI6Ci0gICAgICAgICAgICAgICAgc2VsZi5kb21haW5zX3RvX2dlbmVyYXRl
Xy5pbnNlcnQoMCwgZG9tYWluX2RhdGEpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAg
ICAgIHNlbGYuZG9tYWluc190b19nZW5lcmF0ZV8uYXBwZW5kKGRvbWFpbl9kYXRhKQotCi0gICAg
ICAgIGlmICJ0eXBlcyIgaW4ganNvbl9kb21haW46Ci0gICAgICAgICAgICBmb3IganNvbl90eXBl
IGluIGpzb25fZG9tYWluWyJ0eXBlcyJdOgotICAgICAgICAgICAgICAgIHR5cGVfbmFtZSA9IGpz
b25fdHlwZVsiaWQiXQotICAgICAgICAgICAgICAgIHR5cGVfZGF0YSA9IFR5cGVEYXRhKGpzb25f
dHlwZSwganNvbl9kb21haW4sIGRvbWFpbl9kYXRhKQotICAgICAgICAgICAgICAgIGRvbWFpbl9t
YXBbdHlwZV9uYW1lXSA9IHR5cGVfZGF0YQotICAgICAgICAgICAgICAgIGRvbWFpbl9kYXRhLmFk
ZF90eXBlKHR5cGVfZGF0YSkKLQotICAgIGRlZiBkb21haW5zKHNlbGYpOgotICAgICAgICByZXR1
cm4gc2VsZi5kb21haW5zXwotCi0gICAgZGVmIGRvbWFpbnNfdG9fZ2VuZXJhdGUoc2VsZik6Ci0g
ICAgICAgIHJldHVybiBzZWxmLmRvbWFpbnNfdG9fZ2VuZXJhdGVfCi0KLSAgICBkZWYgZ2V0KHNl
bGYsIGRvbWFpbl9uYW1lLCB0eXBlX25hbWUpOgotICAgICAgICByZXR1cm4gc2VsZi5tYXBfW2Rv
bWFpbl9uYW1lXVt0eXBlX25hbWVdCi0KLQotZGVmIHJlc29sdmVfcGFyYW1fdHlwZShqc29uX3Bh
cmFtZXRlciwgc2NvcGVfZG9tYWluX25hbWUsIGFkX2hvY190eXBlX2NvbnRleHQpOgotICAgIGlm
ICIkcmVmIiBpbiBqc29uX3BhcmFtZXRlcjoKLSAgICAgICAganNvbl9yZWYgPSBqc29uX3BhcmFt
ZXRlclsiJHJlZiJdCi0gICAgICAgIHR5cGVfZGF0YSA9IGdldF9yZWZfZGF0YShqc29uX3JlZiwg
c2NvcGVfZG9tYWluX25hbWUpCi0gICAgICAgIHJldHVybiB0eXBlX2RhdGEuZ2V0X2JpbmRpbmco
KQotICAgIGVsaWYgInR5cGUiIGluIGpzb25fcGFyYW1ldGVyOgotICAgICAgICByZXN1bHQgPSBU
eXBlQmluZGluZ3MuY3JlYXRlX2FkX2hvY190eXBlX2RlY2xhcmF0aW9uKGpzb25fcGFyYW1ldGVy
LCBzY29wZV9kb21haW5fbmFtZSwgYWRfaG9jX3R5cGVfY29udGV4dCkKLSAgICAgICAgYWRfaG9j
X3R5cGVfY29udGV4dC5hZGRfdHlwZShyZXN1bHQpCi0gICAgICAgIHJldHVybiByZXN1bHQKLSAg
ICBlbHNlOgotICAgICAgICByYWlzZSBFeGNlcHRpb24oIlVua25vd24gdHlwZSIpCi0KLQotZGVm
IHJlc29sdmVfcGFyYW1fcmF3X3R5cGUoanNvbl9wYXJhbWV0ZXIsIHNjb3BlX2RvbWFpbl9uYW1l
KToKLSAgICBpZiAiJHJlZiIgaW4ganNvbl9wYXJhbWV0ZXI6Ci0gICAgICAgIGpzb25fcmVmID0g
anNvbl9wYXJhbWV0ZXJbIiRyZWYiXQotICAgICAgICB0eXBlX2RhdGEgPSBnZXRfcmVmX2RhdGEo
anNvbl9yZWYsIHNjb3BlX2RvbWFpbl9uYW1lKQotICAgICAgICByZXR1cm4gdHlwZV9kYXRhLmdl
dF9yYXdfdHlwZSgpCi0gICAgZWxpZiAidHlwZSIgaW4ganNvbl9wYXJhbWV0ZXI6Ci0gICAgICAg
IGpzb25fdHlwZSA9IGpzb25fcGFyYW1ldGVyWyJ0eXBlIl0KLSAgICAgICAgcmV0dXJuIFJhd1R5
cGVzLmdldChqc29uX3R5cGUpCi0gICAgZWxzZToKLSAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJV
bmtub3duIHR5cGUiKQotCi0KLWRlZiBnZXRfcmVmX2RhdGEoanNvbl9yZWYsIHNjb3BlX2RvbWFp
bl9uYW1lKToKLSAgICBkb3RfcG9zID0ganNvbl9yZWYuZmluZCgiLiIpCi0gICAgaWYgZG90X3Bv
cyA9PSAtMToKLSAgICAgICAgZG9tYWluX25hbWUgPSBzY29wZV9kb21haW5fbmFtZQotICAgICAg
ICB0eXBlX25hbWUgPSBqc29uX3JlZgotICAgIGVsc2U6Ci0gICAgICAgIGRvbWFpbl9uYW1lID0g
anNvbl9yZWZbOmRvdF9wb3NdCi0gICAgICAgIHR5cGVfbmFtZSA9IGpzb25fcmVmW2RvdF9wb3Mg
KyAxOl0KLQotICAgIHJldHVybiB0eXBlX21hcC5nZXQoZG9tYWluX25hbWUsIHR5cGVfbmFtZSkK
LQotCi1pbnB1dF9maWxlID0gb3BlbihpbnB1dF9qc29uX2ZpbGVuYW1lLCAiciIpCi1qc29uX3N0
cmluZyA9IGlucHV0X2ZpbGUucmVhZCgpCi1qc29uX2FwaSA9IGpzb24ubG9hZHMoanNvbl9zdHJp
bmcpCi1pbnB1dF9maWxlLmNsb3NlKCkKLWlmIG5vdCAiZG9tYWlucyIgaW4ganNvbl9hcGk6Ci0g
ICAganNvbl9hcGkgPSB7ImRvbWFpbnMiOiBbanNvbl9hcGldfQotCi1kZXBlbmRlbmN5X2FwaSA9
IHsiZG9tYWlucyI6IFtdfQotZm9yIGRlcGVuZGVuY3lfanNvbl9maWxlbmFtZSBpbiBkZXBlbmRl
bmN5X2pzb25fZmlsZW5hbWVzOgotICAgIGRlcGVuZGVuY3lfaW5wdXRfZmlsZSA9IG9wZW4oZGVw
ZW5kZW5jeV9qc29uX2ZpbGVuYW1lLCAiciIpCi0gICAgZGVwZW5kZW5jeV9qc29uX3N0cmluZyA9
IGRlcGVuZGVuY3lfaW5wdXRfZmlsZS5yZWFkKCkKLSAgICBkZXBlbmRlbmN5X2pzb25fYXBpID0g
anNvbi5sb2FkcyhkZXBlbmRlbmN5X2pzb25fc3RyaW5nKQotICAgIGRlcGVuZGVuY3lfaW5wdXRf
ZmlsZS5jbG9zZSgpCi0gICAgaWYgbm90ICJkb21haW5zIiBpbiBkZXBlbmRlbmN5X2pzb25fYXBp
OgotICAgICAgICBkZXBlbmRlbmN5X2pzb25fYXBpID0geyJkb21haW5zIjogW2RlcGVuZGVuY3lf
anNvbl9hcGldfQotICAgIGRlcGVuZGVuY3lfYXBpWyJkb21haW5zIl0gKz0gZGVwZW5kZW5jeV9q
c29uX2FwaVsiZG9tYWlucyJdCi0KLQotY2xhc3MgVGVtcGxhdGVzOgotICAgIGRlZiBnZXRfdGhp
c19zY3JpcHRfcGF0aF8oYWJzb2x1dGVfcGF0aCk6Ci0gICAgICAgIGFic29sdXRlX3BhdGggPSBv
cy5wYXRoLmFic3BhdGgoYWJzb2x1dGVfcGF0aCkKLSAgICAgICAgY29tcG9uZW50cyA9IFtdCi0K
LSAgICAgICAgZGVmIGZpbGxfcmVjdXJzaXZlKHBhdGhfcGFydCwgZGVwdGgpOgotICAgICAgICAg
ICAgaWYgZGVwdGggPD0gMCBvciBwYXRoX3BhcnQgPT0gJy8nOgotICAgICAgICAgICAgICAgIHJl
dHVybgotICAgICAgICAgICAgZmlsbF9yZWN1cnNpdmUob3MucGF0aC5kaXJuYW1lKHBhdGhfcGFy
dCksIGRlcHRoIC0gMSkKLSAgICAgICAgICAgIGNvbXBvbmVudHMuYXBwZW5kKG9zLnBhdGguYmFz
ZW5hbWUocGF0aF9wYXJ0KSkKLQotICAgICAgICAjIFR5cGljYWwgcGF0aCBpcyAvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKLSAgICAgICAgIyBMZXQn
cyB0YWtlIDQgY29tcG9uZW50cyBmcm9tIHRoZSByZWFsIHBhdGggdGhlbi4KLSAgICAgICAgZmls
bF9yZWN1cnNpdmUoYWJzb2x1dGVfcGF0aCwgNCkKLQotICAgICAgICByZXR1cm4gIi8iLmpvaW4o
Y29tcG9uZW50cykKLQotICAgIGZpbGVfaGVhZGVyXyA9ICgiLy8gRmlsZSBpcyBnZW5lcmF0ZWQg
YnkgJXNcblxuIiAlIGdldF90aGlzX3NjcmlwdF9wYXRoXyhzeXMuYXJndlswXSkgKwotIiIiLy8g
Q29weXJpZ2h0IChjKSAyMDEzIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLS8vIENv
cHlyaWdodCAoYykgMjAxMSBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0iIiIp
Ci0KLSAgICBmcm9udGVuZF9kb21haW5fY2xhc3MgPSBzdHJpbmcuVGVtcGxhdGUoQ29kZUdlbmVy
YXRvckluc3BlY3RvclN0cmluZ3MuZnJvbnRlbmRfZG9tYWluX2NsYXNzKQotICAgIGJhY2tlbmRf
ZGlzcGF0Y2hlcl9jb25zdHJ1Y3RvciA9IHN0cmluZy5UZW1wbGF0ZShDb2RlR2VuZXJhdG9ySW5z
cGVjdG9yU3RyaW5ncy5iYWNrZW5kX2Rpc3BhdGNoZXJfY29uc3RydWN0b3IpCi0gICAgYmFja2Vu
ZF9kaXNwYXRjaGVyX2Rpc3BhdGNoX21ldGhvZCA9IHN0cmluZy5UZW1wbGF0ZShDb2RlR2VuZXJh
dG9ySW5zcGVjdG9yU3RyaW5ncy5iYWNrZW5kX2Rpc3BhdGNoZXJfZGlzcGF0Y2hfbWV0aG9kKQot
ICAgIGJhY2tlbmRfZGlzcGF0Y2hlcl9kaXNwYXRjaF9tZXRob2Rfc2ltcGxlID0gc3RyaW5nLlRl
bXBsYXRlKENvZGVHZW5lcmF0b3JJbnNwZWN0b3JTdHJpbmdzLmJhY2tlbmRfZGlzcGF0Y2hlcl9k
aXNwYXRjaF9tZXRob2Rfc2ltcGxlKQotICAgIGJhY2tlbmRfbWV0aG9kID0gc3RyaW5nLlRlbXBs
YXRlKENvZGVHZW5lcmF0b3JJbnNwZWN0b3JTdHJpbmdzLmJhY2tlbmRfbWV0aG9kKQotICAgIGZy
b250ZW5kX21ldGhvZCA9IHN0cmluZy5UZW1wbGF0ZShDb2RlR2VuZXJhdG9ySW5zcGVjdG9yU3Ry
aW5ncy5mcm9udGVuZF9tZXRob2QpCi0gICAgY2FsbGJhY2tfbWV0aG9kID0gc3RyaW5nLlRlbXBs
YXRlKENvZGVHZW5lcmF0b3JJbnNwZWN0b3JTdHJpbmdzLmNhbGxiYWNrX21ldGhvZCkKLSAgICBm
cm9udGVuZF9oID0gc3RyaW5nLlRlbXBsYXRlKGZpbGVfaGVhZGVyXyArIENvZGVHZW5lcmF0b3JJ
bnNwZWN0b3JTdHJpbmdzLmZyb250ZW5kX2gpCi0gICAgYmFja2VuZF9oID0gc3RyaW5nLlRlbXBs
YXRlKGZpbGVfaGVhZGVyXyArIENvZGVHZW5lcmF0b3JJbnNwZWN0b3JTdHJpbmdzLmJhY2tlbmRf
aCkKLSAgICBiYWNrZW5kX2NwcCA9IHN0cmluZy5UZW1wbGF0ZShmaWxlX2hlYWRlcl8gKyBDb2Rl
R2VuZXJhdG9ySW5zcGVjdG9yU3RyaW5ncy5iYWNrZW5kX2NwcCkKLSAgICBmcm9udGVuZF9jcHAg
PSBzdHJpbmcuVGVtcGxhdGUoZmlsZV9oZWFkZXJfICsgQ29kZUdlbmVyYXRvckluc3BlY3RvclN0
cmluZ3MuZnJvbnRlbmRfY3BwKQotICAgIHR5cGVidWlsZGVyX2ggPSBzdHJpbmcuVGVtcGxhdGUo
ZmlsZV9oZWFkZXJfICsgQ29kZUdlbmVyYXRvckluc3BlY3RvclN0cmluZ3MudHlwZWJ1aWxkZXJf
aCkKLSAgICB0eXBlYnVpbGRlcl9jcHAgPSBzdHJpbmcuVGVtcGxhdGUoZmlsZV9oZWFkZXJfICsg
Q29kZUdlbmVyYXRvckluc3BlY3RvclN0cmluZ3MudHlwZWJ1aWxkZXJfY3BwKQotICAgIGJhY2tl
bmRfanMgPSBzdHJpbmcuVGVtcGxhdGUoZmlsZV9oZWFkZXJfICsgQ29kZUdlbmVyYXRvckluc3Bl
Y3RvclN0cmluZ3MuYmFja2VuZF9qcykKLSAgICBwYXJhbV9jb250YWluZXJfYWNjZXNzX2NvZGUg
PSBDb2RlR2VuZXJhdG9ySW5zcGVjdG9yU3RyaW5ncy5wYXJhbV9jb250YWluZXJfYWNjZXNzX2Nv
ZGUKLQotCi0KLQotCi10eXBlX21hcCA9IFR5cGVNYXAoanNvbl9hcGksIGRlcGVuZGVuY3lfYXBp
KQotCi0KLWNsYXNzIE5lZWRSdW50aW1lQ2FzdFJlcXVlc3Q6Ci0gICAgZGVmIF9faW5pdF9fKHNl
bGYpOgotICAgICAgICBzZWxmLmFja18gPSBOb25lCi0KLSAgICBkZWYgYWNrbm93bGVkZ2Uoc2Vs
Zik6Ci0gICAgICAgIHNlbGYuYWNrXyA9IFRydWUKLQotICAgIGRlZiBpc19hY2tub3dsZWRnZWQo
c2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLmFja18KLQotCi1kZWYgcmVzb2x2ZV9hbGxfdHlw
ZXMoKToKLSAgICBydW50aW1lX2Nhc3RfZ2VuZXJhdGVfcmVxdWVzdHMgPSB7fQotICAgIGZvciB0
eXBlX25hbWUgaW4gVFlQRVNfV0lUSF9SVU5USU1FX0NBU1RfU0VUOgotICAgICAgICBydW50aW1l
X2Nhc3RfZ2VuZXJhdGVfcmVxdWVzdHNbdHlwZV9uYW1lXSA9IE5lZWRSdW50aW1lQ2FzdFJlcXVl
c3QoKQotCi0gICAgY2xhc3MgRm9yd2FyZExpc3RlbmVyOgotICAgICAgICB0eXBlX2RhdGFfc2V0
ID0gc2V0KCkKLSAgICAgICAgYWxyZWFkeV9kZWNsYXJlZF9zZXQgPSBzZXQoKQotCi0gICAgICAg
IEBjbGFzc21ldGhvZAotICAgICAgICBkZWYgYWRkX3R5cGVfZGF0YShjbHMsIHR5cGVfZGF0YSk6
Ci0gICAgICAgICAgICBpZiB0eXBlX2RhdGEgbm90IGluIGNscy5hbHJlYWR5X2RlY2xhcmVkX3Nl
dDoKLSAgICAgICAgICAgICAgICBjbHMudHlwZV9kYXRhX3NldC5hZGQodHlwZV9kYXRhKQotCi0g
ICAgY2xhc3MgUmVzb2x2ZUNvbnRleHQ6Ci0gICAgICAgIGZvcndhcmRfbGlzdGVuZXIgPSBGb3J3
YXJkTGlzdGVuZXIKLQotICAgIGZvciBkb21haW5fZGF0YSBpbiB0eXBlX21hcC5kb21haW5zKCk6
Ci0gICAgICAgIGZvciB0eXBlX2RhdGEgaW4gZG9tYWluX2RhdGEudHlwZXMoKToKLSAgICAgICAg
ICAgIGJpbmRpbmcgPSB0eXBlX2RhdGEuZ2V0X2JpbmRpbmcoKQotICAgICAgICAgICAgYmluZGlu
Zy5yZXNvbHZlX2lubmVyKFJlc29sdmVDb250ZXh0KQotICAgICAgICAgICAgIyBEbyBub3QgZ2Vu
ZXJhdGUgZm9yd2FyZHMgZm9yIHRoaXMgdHlwZSBhbnkgbG9uZ2VyLgotICAgICAgICAgICAgRm9y
d2FyZExpc3RlbmVyLmFscmVhZHlfZGVjbGFyZWRfc2V0LmFkZCh0eXBlX2RhdGEpCi0KLSAgICBm
b3IgZG9tYWluX2RhdGEgaW4gdHlwZV9tYXAuZG9tYWlucygpOgotICAgICAgICBmb3IgdHlwZV9k
YXRhIGluIGRvbWFpbl9kYXRhLnR5cGVzKCk6Ci0gICAgICAgICAgICBmdWxsX3R5cGVfbmFtZSA9
ICIlcy4lcyIgJSAodHlwZV9kYXRhLmdldF9kb21haW5fbmFtZSgpLCB0eXBlX2RhdGEuZ2V0X25h
bWUoKSkKLSAgICAgICAgICAgIHJlcXVlc3QgPSBydW50aW1lX2Nhc3RfZ2VuZXJhdGVfcmVxdWVz
dHMucG9wKGZ1bGxfdHlwZV9uYW1lLCBOb25lKQotICAgICAgICAgICAgYmluZGluZyA9IHR5cGVf
ZGF0YS5nZXRfYmluZGluZygpCi0gICAgICAgICAgICBpZiByZXF1ZXN0OgotICAgICAgICAgICAg
ICAgIGJpbmRpbmcucmVxdWVzdF91c2VyX3J1bnRpbWVfY2FzdChyZXF1ZXN0KQotCi0gICAgICAg
ICAgICBpZiByZXF1ZXN0IGFuZCBub3QgcmVxdWVzdC5pc19hY2tub3dsZWRnZWQoKToKLSAgICAg
ICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIkZhaWxlZCB0byBnZW5lcmF0ZSBydW50aW1lQ2Fz
dCBpbiAiICsgZnVsbF90eXBlX25hbWUpCi0KLSAgICAjIEZJWE1FOiBUaGlzIGFzc3VtZXMgYWxs
IHRoZSBkb21haW5zIGFyZSBwcm9jZXNzZWQgYXQgb25jZS4gQ2hhbmdlIHRoaXMgdmVyaWZpY2F0
aW9uCi0gICAgIyB0byBvbmx5IHZlcmlmeSBydW50aW1lIGNhc3RzIGZvciB0aGUgZG9tYWlucyBi
ZWluZyBnZW5lcmF0ZWQuCi0gICAgIyBpZiB2ZXJpZmljYXRpb246Ci0gICAgIyAgICAgZm9yIGZ1
bGxfdHlwZV9uYW1lIGluIHJ1bnRpbWVfY2FzdF9nZW5lcmF0ZV9yZXF1ZXN0czoKLSAgICAjICAg
ICAgICAgcmFpc2UgRXhjZXB0aW9uKCJGYWlsZWQgdG8gZ2VuZXJhdGUgcnVudGltZUNhc3QuIFR5
cGUgIiArIGZ1bGxfdHlwZV9uYW1lICsgIiBub3QgZm91bmQiKQotCi0gICAgcmV0dXJuIEZvcndh
cmRMaXN0ZW5lcgotCi0KLWdsb2JhbF9mb3J3YXJkX2xpc3RlbmVyID0gcmVzb2x2ZV9hbGxfdHlw
ZXMoKQotCi0KLWRlZiBnZXRfYW5ub3RhdGVkX3R5cGVfdGV4dChyYXdfdHlwZSwgYW5ub3RhdGVk
X3R5cGUpOgotICAgIGlmIGFubm90YXRlZF90eXBlICE9IHJhd190eXBlOgotICAgICAgICByZXR1
cm4gIi8qJXMqLyAlcyIgJSAoYW5ub3RhdGVkX3R5cGUsIHJhd190eXBlKQotICAgIGVsc2U6Ci0g
ICAgICAgIHJldHVybiByYXdfdHlwZQotCi0KLWRlZiBmb3JtYXRfc2V0dGVyX3ZhbHVlX2V4cHJl
c3Npb24ocGFyYW1fdHlwZV9iaW5kaW5nLCB2YWx1ZV9yZWYpOgotICAgIHBhdHRlcm4gPSBwYXJh
bV90eXBlX2JpbmRpbmcuZ2V0X3NldHRlcl92YWx1ZV9leHByZXNzaW9uX3BhdHRlcm4oKQotICAg
IGlmIHBhdHRlcm46Ci0gICAgICAgIHJldHVybiBwYXR0ZXJuICUgKElOU1BFQ1RPUl9UWVBFU19H
RU5FUkFUT1JfQ09ORklHX01BUFtvdXRwdXRfdHlwZV1bInByZWZpeCJdLCB2YWx1ZV9yZWYpCi0g
ICAgZWxzZToKLSAgICAgICAgcmV0dXJuIHZhbHVlX3JlZgotCi0KLWNsYXNzIEdlbmVyYXRvcjoK
LSAgICBmcm9udGVuZF9kb21haW5fY2xhc3NfbGluZXMgPSBbXQotCi0gICAgYmFja2VuZF9tZXRo
b2RfaW1wbGVtZW50YXRpb25fbGlzdCA9IFtdCi0gICAgZnJvbnRlbmRfbWV0aG9kX2xpc3QgPSBb
XQotICAgIGJhY2tlbmRfanNfZG9tYWluX2luaXRpYWxpemVyX2xpc3QgPSBbXQotCi0gICAgYmFj
a2VuZF9oYW5kbGVyX2ludGVyZmFjZV9saXN0ID0gW10KLSAgICBiYWNrZW5kX2hhbmRsZXJfaW1w
bGVtZW50YXRpb25fbGlzdCA9IFtdCi0gICAgYmFja2VuZF9kaXNwYXRjaGVyX2ludGVyZmFjZV9s
aXN0ID0gW10KLSAgICB0eXBlX2J1aWxkZXJfZnJhZ21lbnRzID0gW10KLSAgICB0eXBlX2J1aWxk
ZXJfZm9yd2FyZHMgPSBbXQotICAgIHZhbGlkYXRvcl9pbXBsX2xpc3QgPSBbXQotICAgIHR5cGVf
YnVpbGRlcl9pbXBsX2xpc3QgPSBbXQotCi0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIGdv
KCk6Ci0gICAgICAgIEdlbmVyYXRvci5wcm9jZXNzX3R5cGVzKHR5cGVfbWFwKQotCi0gICAgICAg
IGZpcnN0X2N5Y2xlX2d1YXJkYWJsZV9saXN0X2xpc3QgPSBbCi0gICAgICAgICAgICBHZW5lcmF0
b3IuYmFja2VuZF9tZXRob2RfaW1wbGVtZW50YXRpb25fbGlzdCwKLSAgICAgICAgICAgIEdlbmVy
YXRvci5iYWNrZW5kX2hhbmRsZXJfaW50ZXJmYWNlX2xpc3QsCi0gICAgICAgICAgICBHZW5lcmF0
b3IuYmFja2VuZF9oYW5kbGVyX2ltcGxlbWVudGF0aW9uX2xpc3QsCi0gICAgICAgICAgICBHZW5l
cmF0b3IuYmFja2VuZF9kaXNwYXRjaGVyX2ludGVyZmFjZV9saXN0XQotCi0gICAgICAgIGZvciBq
c29uX2RvbWFpbiBpbiBqc29uX2FwaVsiZG9tYWlucyJdOgotICAgICAgICAgICAgZG9tYWluX25h
bWUgPSBqc29uX2RvbWFpblsiZG9tYWluIl0KLSAgICAgICAgICAgIGRvbWFpbl9uYW1lX2xvd2Vy
ID0gZG9tYWluX25hbWUubG93ZXIoKQotCi0gICAgICAgICAgICBkb21haW5fZml4ZXMgPSBEb21h
aW5OYW1lRml4ZXMuZ2V0X2ZpeGVkX2RhdGEoZG9tYWluX25hbWUpCi0KLSAgICAgICAgICAgIGRv
bWFpbl9ndWFyZCA9IGRvbWFpbl9maXhlcy5nZXRfZ3VhcmQoKQotCi0gICAgICAgICAgICBpZiBk
b21haW5fZ3VhcmQ6Ci0gICAgICAgICAgICAgICAgZm9yIGwgaW4gZmlyc3RfY3ljbGVfZ3VhcmRh
YmxlX2xpc3RfbGlzdDoKLSAgICAgICAgICAgICAgICAgICAgZG9tYWluX2d1YXJkLmdlbmVyYXRl
X29wZW4obCkKLQotICAgICAgICAgICAgZnJvbnRlbmRfbWV0aG9kX2RlY2xhcmF0aW9uX2xpbmVz
ID0gW10KLQotICAgICAgICAgICAgaWYgKCJjb21tYW5kcyIgaW4ganNvbl9kb21haW4gb3IgImV2
ZW50cyIgaW4ganNvbl9kb21haW4pOgotICAgICAgICAgICAgICAgIEdlbmVyYXRvci5iYWNrZW5k
X2pzX2RvbWFpbl9pbml0aWFsaXplcl9saXN0LmFwcGVuZCgiLy8gJXMuXG4iICUgZG9tYWluX25h
bWUpCi0gICAgICAgICAgICAgICAgaWYgbm90IGRvbWFpbl9maXhlcy5za2lwX2pzX2JpbmQ6Ci0g
ICAgICAgICAgICAgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX2pzX2RvbWFpbl9pbml0aWFsaXpl
cl9saXN0LmFwcGVuZCgiSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlciVzRGlzcGF0Y2hlciA9IElu
c3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW5EaXNwYXRjaGVyLmJpbmQoSW5zcGVjdG9yQmFj
a2VuZCwgXCIlc1wiKTtcbiIgJSAoZG9tYWluX25hbWUsIGRvbWFpbl9uYW1lKSkKLQotICAgICAg
ICAgICAgaWYgInR5cGVzIiBpbiBqc29uX2RvbWFpbjoKLSAgICAgICAgICAgICAgICBmb3IganNv
bl90eXBlIGluIGpzb25fZG9tYWluWyJ0eXBlcyJdOgotICAgICAgICAgICAgICAgICAgICBpZiAi
dHlwZSIgaW4ganNvbl90eXBlIGFuZCBqc29uX3R5cGVbInR5cGUiXSA9PSAic3RyaW5nIiBhbmQg
ImVudW0iIGluIGpzb25fdHlwZToKLSAgICAgICAgICAgICAgICAgICAgICAgIGVudW1fbmFtZSA9
ICIlcy4lcyIgJSAoZG9tYWluX25hbWUsIGpzb25fdHlwZVsiaWQiXSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgIEdlbmVyYXRvci5wcm9jZXNzX2VudW0oanNvbl90eXBlLCBlbnVtX25hbWUpCi0g
ICAgICAgICAgICAgICAgICAgIGVsaWYganNvbl90eXBlWyJ0eXBlIl0gPT0gIm9iamVjdCI6Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBpZiAicHJvcGVydGllcyIgaW4ganNvbl90eXBlOgotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBqc29uX3Byb3BlcnR5IGluIGpzb25fdHlwZVsi
cHJvcGVydGllcyJdOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAidHlwZSIg
aW4ganNvbl9wcm9wZXJ0eSBhbmQganNvbl9wcm9wZXJ0eVsidHlwZSJdID09ICJzdHJpbmciIGFu
ZCAiZW51bSIgaW4ganNvbl9wcm9wZXJ0eToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGVudW1fbmFtZSA9ICIlcy4lcyVzIiAlIChkb21haW5fbmFtZSwganNvbl90eXBlWyJp
ZCJdLCB0b190aXRsZV9jYXNlKGpzb25fcHJvcGVydHlbIm5hbWUiXSkpCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHZW5lcmF0b3IucHJvY2Vzc19lbnVtKGpzb25fcHJvcGVy
dHksIGVudW1fbmFtZSkKLQotICAgICAgICAgICAgaWYgImV2ZW50cyIgaW4ganNvbl9kb21haW46
Ci0gICAgICAgICAgICAgICAgaWYgZG9tYWluX2d1YXJkOgotICAgICAgICAgICAgICAgICAgICBk
b21haW5fZ3VhcmQuZ2VuZXJhdGVfb3BlbihHZW5lcmF0b3IuZnJvbnRlbmRfbWV0aG9kX2xpc3Qp
Ci0gICAgICAgICAgICAgICAgICAgIGRvbWFpbl9ndWFyZC5nZW5lcmF0ZV9vcGVuKEdlbmVyYXRv
ci5mcm9udGVuZF9kb21haW5fY2xhc3NfbGluZXMpCi0KLSAgICAgICAgICAgICAgICBmb3IganNv
bl9ldmVudCBpbiBqc29uX2RvbWFpblsiZXZlbnRzIl06Ci0gICAgICAgICAgICAgICAgICAgIEdl
bmVyYXRvci5wcm9jZXNzX2V2ZW50KGpzb25fZXZlbnQsIGRvbWFpbl9uYW1lLCBmcm9udGVuZF9t
ZXRob2RfZGVjbGFyYXRpb25fbGluZXMpCi0KLSAgICAgICAgICAgICAgICBHZW5lcmF0b3IuZnJv
bnRlbmRfZG9tYWluX2NsYXNzX2xpbmVzLmFwcGVuZChUZW1wbGF0ZXMuZnJvbnRlbmRfZG9tYWlu
X2NsYXNzLnN1YnN0aXR1dGUoTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgZXhwb3J0TWFjcm89
SU5TUEVDVE9SX1RZUEVTX0dFTkVSQVRPUl9DT05GSUdfTUFQW291dHB1dF90eXBlXVsiZXhwb3J0
X21hY3JvIl0sCi0gICAgICAgICAgICAgICAgICAgIGRvbWFpbkNsYXNzTmFtZT0iSW5zcGVjdG9y
JXNGcm9udGVuZERpc3BhdGNoZXIiICUgZG9tYWluX25hbWUsCi0gICAgICAgICAgICAgICAgICAg
IGZyb250ZW5kRG9tYWluTWV0aG9kRGVjbGFyYXRpb25zPSIiLmpvaW4oZmxhdHRlbl9saXN0KGZy
b250ZW5kX21ldGhvZF9kZWNsYXJhdGlvbl9saW5lcykpKSkKLQotICAgICAgICAgICAgICAgIGlm
IGRvbWFpbl9ndWFyZDoKLSAgICAgICAgICAgICAgICAgICAgZG9tYWluX2d1YXJkLmdlbmVyYXRl
X2Nsb3NlKEdlbmVyYXRvci5mcm9udGVuZF9tZXRob2RfbGlzdCkKLSAgICAgICAgICAgICAgICAg
ICAgZG9tYWluX2d1YXJkLmdlbmVyYXRlX2Nsb3NlKEdlbmVyYXRvci5mcm9udGVuZF9kb21haW5f
Y2xhc3NfbGluZXMpCi0KLSAgICAgICAgICAgIGRpc3BhdGNoZXJfbmFtZSA9ICJJbnNwZWN0b3Ii
ICsgQ2FwaXRhbGl6ZXIubG93ZXJfY2FtZWxfY2FzZV90b191cHBlcihkb21haW5fbmFtZSkgKyAi
QmFja2VuZERpc3BhdGNoZXIiCi0gICAgICAgICAgICBhZ2VudF9pbnRlcmZhY2VfbmFtZSA9IGRp
c3BhdGNoZXJfbmFtZSArICJIYW5kbGVyIgotCi0gICAgICAgICAgICBpZiAiY29tbWFuZHMiIGlu
IGpzb25fZG9tYWluOgotICAgICAgICAgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX2Rpc3BhdGNo
ZXJfaW50ZXJmYWNlX2xpc3QuYXBwZW5kKCJjbGFzcyAlcyAlcyBmaW5hbCA6IHB1YmxpYyBJbnNw
ZWN0b3I6Okluc3BlY3RvclN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHtcbiIgJSAoSU5T
UEVDVE9SX1RZUEVTX0dFTkVSQVRPUl9DT05GSUdfTUFQW291dHB1dF90eXBlXVsiZXhwb3J0X21h
Y3JvIl0sIGRpc3BhdGNoZXJfbmFtZSkpCi0gICAgICAgICAgICAgICAgR2VuZXJhdG9yLmJhY2tl
bmRfZGlzcGF0Y2hlcl9pbnRlcmZhY2VfbGlzdC5hcHBlbmQoInB1YmxpYzpcbiIpCi0gICAgICAg
ICAgICAgICAgR2VuZXJhdG9yLmJhY2tlbmRfZGlzcGF0Y2hlcl9pbnRlcmZhY2VfbGlzdC5hcHBl
bmQoIiAgICBzdGF0aWMgUGFzc1JlZlB0cjwlcz4gY3JlYXRlKEluc3BlY3Rvcjo6SW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXIqLCAlcyopO1xuIiAlIChkaXNwYXRjaGVyX25hbWUsIGFnZW50X2lu
dGVyZmFjZV9uYW1lKSkKLSAgICAgICAgICAgICAgICBHZW5lcmF0b3IuYmFja2VuZF9kaXNwYXRj
aGVyX2ludGVyZmFjZV9saXN0LmFwcGVuZCgiICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaChsb25n
IGNhbGxJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNw
ZWN0b3JPYmplY3Q+IG1lc3NhZ2UpIG92ZXJyaWRlO1xuIikKLSAgICAgICAgICAgICAgICBHZW5l
cmF0b3IuYmFja2VuZF9kaXNwYXRjaGVyX2ludGVyZmFjZV9saXN0LmFwcGVuZCgicHJpdmF0ZTpc
biIpCi0KLSAgICAgICAgICAgICAgICBHZW5lcmF0b3IuYmFja2VuZF9oYW5kbGVyX2ludGVyZmFj
ZV9saXN0LmFwcGVuZCgiY2xhc3MgJXMgJXMge1xuIiAlIChJTlNQRUNUT1JfVFlQRVNfR0VORVJB
VE9SX0NPTkZJR19NQVBbb3V0cHV0X3R5cGVdWyJleHBvcnRfbWFjcm8iXSwgYWdlbnRfaW50ZXJm
YWNlX25hbWUpKQotICAgICAgICAgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX2hhbmRsZXJfaW50
ZXJmYWNlX2xpc3QuYXBwZW5kKCJwdWJsaWM6XG4iKQotCi0gICAgICAgICAgICAgICAgYmFja2Vu
ZF9tZXRob2RfY291bnQgPSBsZW4oR2VuZXJhdG9yLmJhY2tlbmRfbWV0aG9kX2ltcGxlbWVudGF0
aW9uX2xpc3QpCi0KLSAgICAgICAgICAgICAgICBkaXNwYXRjaGVyX2lmX2NoYWluID0gW10KLSAg
ICAgICAgICAgICAgICBkaXNwYXRjaGVyX2NvbW1hbmRzX2xpc3QgPSBbXQotICAgICAgICAgICAg
ICAgIGZvciBqc29uX2NvbW1hbmQgaW4ganNvbl9kb21haW5bImNvbW1hbmRzIl06Ci0gICAgICAg
ICAgICAgICAgICAgIEdlbmVyYXRvci5wcm9jZXNzX2NvbW1hbmQoanNvbl9jb21tYW5kLCBkb21h
aW5fbmFtZSwgYWdlbnRfaW50ZXJmYWNlX25hbWUsIGRpc3BhdGNoZXJfbmFtZSwgZGlzcGF0Y2hl
cl9pZl9jaGFpbiwgZGlzcGF0Y2hlcl9jb21tYW5kc19saXN0KQotCi0gICAgICAgICAgICAgICAg
R2VuZXJhdG9yLmJhY2tlbmRfaGFuZGxlcl9pbnRlcmZhY2VfbGlzdC5hcHBlbmQoInByb3RlY3Rl
ZDpcbiIpCi0gICAgICAgICAgICAgICAgR2VuZXJhdG9yLmJhY2tlbmRfaGFuZGxlcl9pbnRlcmZh
Y2VfbGlzdC5hcHBlbmQoIiAgICB2aXJ0dWFsIH4lcygpO1xuIiAlIGFnZW50X2ludGVyZmFjZV9u
YW1lKQotICAgICAgICAgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX2hhbmRsZXJfaW50ZXJmYWNl
X2xpc3QuYXBwZW5kKCJ9O1xuXG4iKQotCi0gICAgICAgICAgICAgICAgR2VuZXJhdG9yLmJhY2tl
bmRfaGFuZGxlcl9pbXBsZW1lbnRhdGlvbl9saXN0LmFwcGVuZCgiJXM6On4lcygpIHsgfVxuIiAl
IChhZ2VudF9pbnRlcmZhY2VfbmFtZSwgYWdlbnRfaW50ZXJmYWNlX25hbWUpKQotCi0gICAgICAg
ICAgICAgICAgR2VuZXJhdG9yLmJhY2tlbmRfZGlzcGF0Y2hlcl9pbnRlcmZhY2VfbGlzdC5hcHBl
bmQoInByaXZhdGU6XG4iKQotICAgICAgICAgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX2Rpc3Bh
dGNoZXJfaW50ZXJmYWNlX2xpc3QuYXBwZW5kKCIgICAgJXMoSW5zcGVjdG9yOjpJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlciosICVzKik7XG4iICUgKGRpc3BhdGNoZXJfbmFtZSwgYWdlbnRfaW50
ZXJmYWNlX25hbWUpKQotICAgICAgICAgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX2Rpc3BhdGNo
ZXJfaW50ZXJmYWNlX2xpc3QuYXBwZW5kKCIgICAgJXMqIG1fYWdlbnQ7XG4iICUgYWdlbnRfaW50
ZXJmYWNlX25hbWUpCi0gICAgICAgICAgICAgICAgR2VuZXJhdG9yLmJhY2tlbmRfZGlzcGF0Y2hl
cl9pbnRlcmZhY2VfbGlzdC5hcHBlbmQoIn07XG5cbiIpCi0KLSAgICAgICAgICAgICAgICBHZW5l
cmF0b3IuYmFja2VuZF9tZXRob2RfaW1wbGVtZW50YXRpb25fbGlzdC5pbnNlcnQoYmFja2VuZF9t
ZXRob2RfY291bnQsIFRlbXBsYXRlcy5iYWNrZW5kX2Rpc3BhdGNoZXJfY29uc3RydWN0b3Iuc3Vi
c3RpdHV0ZShOb25lLAotICAgICAgICAgICAgICAgICAgICBkb21haW5OYW1lPWRvbWFpbl9uYW1l
LAotICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaGVyTmFtZT1kaXNwYXRjaGVyX25hbWUsCi0g
ICAgICAgICAgICAgICAgICAgIGFnZW50TmFtZT1hZ2VudF9pbnRlcmZhY2VfbmFtZSkpCi0KLSAg
ICAgICAgICAgICAgICBpZiBsZW4oanNvbl9kb21haW5bImNvbW1hbmRzIl0pIDw9IDU6Ci0gICAg
ICAgICAgICAgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX21ldGhvZF9pbXBsZW1lbnRhdGlvbl9s
aXN0Lmluc2VydChiYWNrZW5kX21ldGhvZF9jb3VudCArIDEsIFRlbXBsYXRlcy5iYWNrZW5kX2Rp
c3BhdGNoZXJfZGlzcGF0Y2hfbWV0aG9kX3NpbXBsZS5zdWJzdGl0dXRlKE5vbmUsCi0gICAgICAg
ICAgICAgICAgICAgICAgICBkb21haW5OYW1lPWRvbWFpbl9uYW1lLAotICAgICAgICAgICAgICAg
ICAgICAgICAgZGlzcGF0Y2hlck5hbWU9ZGlzcGF0Y2hlcl9uYW1lLAotICAgICAgICAgICAgICAg
ICAgICAgICAgaWZDaGFpbj0iXG4iLmpvaW4oZGlzcGF0Y2hlcl9pZl9jaGFpbikpKQotICAgICAg
ICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX21l
dGhvZF9pbXBsZW1lbnRhdGlvbl9saXN0Lmluc2VydChiYWNrZW5kX21ldGhvZF9jb3VudCArIDEs
IFRlbXBsYXRlcy5iYWNrZW5kX2Rpc3BhdGNoZXJfZGlzcGF0Y2hfbWV0aG9kLnN1YnN0aXR1dGUo
Tm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGRvbWFpbk5hbWU9ZG9tYWluX25hbWUsCi0g
ICAgICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaGVyTmFtZT1kaXNwYXRjaGVyX25hbWUsCi0g
ICAgICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaGVyQ29tbWFuZHM9IlxuIi5qb2luKGRpc3Bh
dGNoZXJfY29tbWFuZHNfbGlzdCkpKQotCi0gICAgICAgICAgICAgICAgaWYgZG9tYWluX2d1YXJk
OgotICAgICAgICAgICAgICAgICAgICBmb3IgbCBpbiByZXZlcnNlZChmaXJzdF9jeWNsZV9ndWFy
ZGFibGVfbGlzdF9saXN0KToKLSAgICAgICAgICAgICAgICAgICAgICAgIGRvbWFpbl9ndWFyZC5n
ZW5lcmF0ZV9jbG9zZShsKQotICAgICAgICAgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX2pzX2Rv
bWFpbl9pbml0aWFsaXplcl9saXN0LmFwcGVuZCgiXG4iKQotCi0gICAgQHN0YXRpY21ldGhvZAot
ICAgIGRlZiBwcm9jZXNzX2VudW0oanNvbl9lbnVtLCBlbnVtX25hbWUpOgotICAgICAgICBlbnVt
X21lbWJlcnMgPSBbXQotICAgICAgICBmb3IgbWVtYmVyIGluIGpzb25fZW51bVsiZW51bSJdOgot
ICAgICAgICAgICAgZW51bV9tZW1iZXJzLmFwcGVuZCgiJXM6IFwiJXNcIiIgJSAoZml4X2NhbWVs
X2Nhc2UobWVtYmVyKSwgbWVtYmVyKSkKLQotICAgICAgICBHZW5lcmF0b3IuYmFja2VuZF9qc19k
b21haW5faW5pdGlhbGl6ZXJfbGlzdC5hcHBlbmQoIkluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJF
bnVtKFwiJXNcIiwgeyVzfSk7XG4iICUgKAotICAgICAgICAgICAgZW51bV9uYW1lLCAiLCAiLmpv
aW4oZW51bV9tZW1iZXJzKSkpCi0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIHByb2Nlc3Nf
ZXZlbnQoanNvbl9ldmVudCwgZG9tYWluX25hbWUsIGZyb250ZW5kX21ldGhvZF9kZWNsYXJhdGlv
bl9saW5lcyk6Ci0gICAgICAgIGV2ZW50X25hbWUgPSBqc29uX2V2ZW50WyJuYW1lIl0KLQotICAg
ICAgICBhZF9ob2NfdHlwZV9vdXRwdXQgPSBbXQotICAgICAgICBmcm9udGVuZF9tZXRob2RfZGVj
bGFyYXRpb25fbGluZXMuYXBwZW5kKGFkX2hvY190eXBlX291dHB1dCkKLSAgICAgICAgYWRfaG9j
X3R5cGVfd3JpdGVyID0gV3JpdGVyKGFkX2hvY190eXBlX291dHB1dCwgIiAgICAgICAgIikKLQot
ICAgICAgICBkZWNsX3BhcmFtZXRlcl9saXN0ID0gW10KLQotICAgICAgICBqc29uX3BhcmFtZXRl
cnMgPSBqc29uX2V2ZW50LmdldCgicGFyYW1ldGVycyIpCi0gICAgICAgIEdlbmVyYXRvci5nZW5l
cmF0ZV9zZW5kX21ldGhvZChqc29uX3BhcmFtZXRlcnMsIGV2ZW50X25hbWUsIGRvbWFpbl9uYW1l
LCBhZF9ob2NfdHlwZV93cml0ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkZWNsX3BhcmFtZXRlcl9saXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR2VuZXJhdG9yLkV2ZW50TWV0aG9kU3RydWN0VGVtcGxhdGUsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHZW5lcmF0b3IuZnJvbnRlbmRfbWV0aG9kX2xp
c3QsIFRlbXBsYXRlcy5mcm9udGVuZF9tZXRob2QsIHsiZXZlbnROYW1lIjogZXZlbnRfbmFtZX0p
Ci0KLSAgICAgICAgYmFja2VuZF9qc19ldmVudF9wYXJhbV9saXN0ID0gW10KLSAgICAgICAgaWYg
anNvbl9wYXJhbWV0ZXJzOgotICAgICAgICAgICAgZm9yIHBhcmFtZXRlciBpbiBqc29uX3BhcmFt
ZXRlcnM6Ci0gICAgICAgICAgICAgICAgcGFyYW1ldGVyX25hbWUgPSBwYXJhbWV0ZXJbIm5hbWUi
XQotICAgICAgICAgICAgICAgIGJhY2tlbmRfanNfZXZlbnRfcGFyYW1fbGlzdC5hcHBlbmQoIlwi
JXNcIiIgJSBwYXJhbWV0ZXJfbmFtZSkKLQotICAgICAgICBmcm9udGVuZF9tZXRob2RfZGVjbGFy
YXRpb25fbGluZXMuYXBwZW5kKAotICAgICAgICAgICAgIiAgICB2b2lkICVzKCVzKTtcbiIgJSAo
ZXZlbnRfbmFtZSwgIiwgIi5qb2luKGRlY2xfcGFyYW1ldGVyX2xpc3QpKSkKLQotICAgICAgICBH
ZW5lcmF0b3IuYmFja2VuZF9qc19kb21haW5faW5pdGlhbGl6ZXJfbGlzdC5hcHBlbmQoIkluc3Bl
Y3RvckJhY2tlbmQucmVnaXN0ZXJFdmVudChcIiVzLiVzXCIsIFslc10pO1xuIiAlICgKLSAgICAg
ICAgICAgIGRvbWFpbl9uYW1lLCBldmVudF9uYW1lLCAiLCAiLmpvaW4oYmFja2VuZF9qc19ldmVu
dF9wYXJhbV9saXN0KSkpCi0KLSAgICBjbGFzcyBFdmVudE1ldGhvZFN0cnVjdFRlbXBsYXRlOgot
ICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgIGRlZiBhcHBlbmRfcHJvbG9nKGxpbmVfbGlz
dCk6Ci0gICAgICAgICAgICBsaW5lX2xpc3QuYXBwZW5kKCIgICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gcGFyYW1zT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTtcbiIpCi0KLSAg
ICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBkZWYgYXBwZW5kX2VwaWxvZyhsaW5lX2xpc3Qp
OgotICAgICAgICAgICAgbGluZV9saXN0LmFwcGVuZCgiICAgIGpzb25NZXNzYWdlLT5zZXRPYmpl
Y3QoQVNDSUlMaXRlcmFsKFwicGFyYW1zXCIpLCBwYXJhbXNPYmplY3QpO1xuIikKLQotICAgICAg
ICBjb250YWluZXJfbmFtZSA9ICJwYXJhbXNPYmplY3QiCi0KLSAgICBAc3RhdGljbWV0aG9kCi0g
ICAgZGVmIHByb2Nlc3NfY29tbWFuZChqc29uX2NvbW1hbmQsIGRvbWFpbl9uYW1lLCBhZ2VudF9p
bnRlcmZhY2VfbmFtZSwgZGlzcGF0Y2hlcl9uYW1lLCBkaXNwYXRjaGVyX2lmX2NoYWluLCBkaXNw
YXRjaGVyX2NvbW1hbmRzX2xpc3QpOgotICAgICAgICBqc29uX2NvbW1hbmRfbmFtZSA9IGpzb25f
Y29tbWFuZFsibmFtZSJdCi0KLSAgICAgICAgYWRfaG9jX3R5cGVfb3V0cHV0ID0gW10KLSAgICAg
ICAgR2VuZXJhdG9yLmJhY2tlbmRfaGFuZGxlcl9pbnRlcmZhY2VfbGlzdC5hcHBlbmQoYWRfaG9j
X3R5cGVfb3V0cHV0KQotICAgICAgICBhZF9ob2NfdHlwZV93cml0ZXIgPSBXcml0ZXIoYWRfaG9j
X3R5cGVfb3V0cHV0LCAiICAgICIpCi0KLSAgICAgICAgR2VuZXJhdG9yLmJhY2tlbmRfZGlzcGF0
Y2hlcl9pbnRlcmZhY2VfbGlzdC5hcHBlbmQoIiAgICB2b2lkICVzKGxvbmcgY2FsbElkLCBjb25z
dCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7XG4iICUganNvbl9jb21tYW5k
X25hbWUpCi0KLSAgICAgICAgR2VuZXJhdG9yLmJhY2tlbmRfaGFuZGxlcl9pbnRlcmZhY2VfbGlz
dC5hcHBlbmQoIiAgICB2aXJ0dWFsIHZvaWQgJXMoRXJyb3JTdHJpbmcqIiAlIGpzb25fY29tbWFu
ZF9uYW1lKQotCi0gICAgICAgIGlmIG5vdCBkaXNwYXRjaGVyX2lmX2NoYWluOgotICAgICAgICAg
ICAgZGlzcGF0Y2hlcl9pZl9jaGFpbi5hcHBlbmQoIiAgICBpZiAobWV0aG9kID09IFwiJXNcIiki
ICUganNvbl9jb21tYW5kX25hbWUpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBkaXNwYXRj
aGVyX2lmX2NoYWluLmFwcGVuZCgiICAgIGVsc2UgaWYgKG1ldGhvZCA9PSBcIiVzXCIpIiAlIGpz
b25fY29tbWFuZF9uYW1lKQotICAgICAgICBkaXNwYXRjaGVyX2lmX2NoYWluLmFwcGVuZCgiICAg
ICAgICAlcyhjYWxsSWQsICptZXNzYWdlLmdldCgpKTsiICUganNvbl9jb21tYW5kX25hbWUpCi0g
ICAgICAgIGRpc3BhdGNoZXJfY29tbWFuZHNfbGlzdC5hcHBlbmQoIiAgICAgICAgICAgIHsgXCIl
c1wiLCAmJXM6OiVzIH0sIiAlIChqc29uX2NvbW1hbmRfbmFtZSwgZGlzcGF0Y2hlcl9uYW1lLCBq
c29uX2NvbW1hbmRfbmFtZSkpCi0KLSAgICAgICAgbWV0aG9kX2luX3BhcmFtc19oYW5kbGluZyA9
IFtdCi0gICAgICAgIG1ldGhvZF9kaXNwYXRjaF9oYW5kbGluZyA9IFtdCi0gICAgICAgIG1ldGhv
ZF9vdXRfcGFyYW1zX2hhbmRsaW5nID0gW10KLSAgICAgICAgbWV0aG9kX2VuZGluZ19oYW5kbGlu
ZyA9IFtdCi0gICAgICAgIG1ldGhvZF9yZXF1ZXN0X21lc3NhZ2VfcGFyYW1fbmFtZSA9ICIiCi0g
ICAgICAgIGFnZW50X2NhbGxfcGFyYW1fbGlzdCA9IFtdCi0gICAgICAgIGpzX3BhcmFtZXRlcnNf
dGV4dCA9ICIiCi0gICAgICAgIGlmICJwYXJhbWV0ZXJzIiBpbiBqc29uX2NvbW1hbmQ6Ci0gICAg
ICAgICAgICBqc29uX3BhcmFtcyA9IGpzb25fY29tbWFuZFsicGFyYW1ldGVycyJdCi0gICAgICAg
ICAgICBtZXRob2RfcmVxdWVzdF9tZXNzYWdlX3BhcmFtX25hbWUgPSAiIG1lc3NhZ2UiCi0gICAg
ICAgICAgICBtZXRob2RfaW5fcGFyYW1zX2hhbmRsaW5nLmFwcGVuZCgiICAgIFJlZlB0cjxJbnNw
ZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7XG4i
KQotICAgICAgICAgICAgbWV0aG9kX2luX3BhcmFtc19oYW5kbGluZy5hcHBlbmQoIiAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSBtZXNzYWdlLmdldE9iamVjdChB
U0NJSUxpdGVyYWwoXCJwYXJhbXNcIikpO1xuIikKLSAgICAgICAgICAgIG1ldGhvZF9pbl9wYXJh
bXNfaGFuZGxpbmcuYXBwZW5kKCIgICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQ
dHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7XG4iKQotICAgICAgICAgICAgbWV0aG9kX2luX3Bh
cmFtc19oYW5kbGluZy5hcHBlbmQoIiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQ
dHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTtcbiIpCi0gICAgICAgICAgICBqc19wYXJhbV9saXN0
ID0gW10KLQotICAgICAgICAgICAgZm9yIGpzb25fcGFyYW1ldGVyIGluIGpzb25fcGFyYW1zOgot
ICAgICAgICAgICAgICAgIGpzb25fcGFyYW1fbmFtZSA9IGpzb25fcGFyYW1ldGVyWyJuYW1lIl0K
LSAgICAgICAgICAgICAgICBwYXJhbV9yYXdfdHlwZSA9IHJlc29sdmVfcGFyYW1fcmF3X3R5cGUo
anNvbl9wYXJhbWV0ZXIsIGRvbWFpbl9uYW1lKQotCi0gICAgICAgICAgICAgICAgZ2V0dGVyX25h
bWUgPSBwYXJhbV9yYXdfdHlwZS5nZXRfZ2V0dGVyX25hbWUoKQotCi0gICAgICAgICAgICAgICAg
b3B0aW9uYWwgPSBqc29uX3BhcmFtZXRlci5nZXQoIm9wdGlvbmFsIikKLQotICAgICAgICAgICAg
ICAgIG5vbl9vcHRpb25hbF90eXBlX21vZGVsID0gcGFyYW1fcmF3X3R5cGUuZ2V0X3Jhd190eXBl
X21vZGVsKCkKLSAgICAgICAgICAgICAgICBpZiBvcHRpb25hbDoKLSAgICAgICAgICAgICAgICAg
ICAgdHlwZV9tb2RlbCA9IG5vbl9vcHRpb25hbF90eXBlX21vZGVsLmdldF9vcHRpb25hbCgpCi0g
ICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgdHlwZV9tb2RlbCA9IG5v
bl9vcHRpb25hbF90eXBlX21vZGVsCi0KLSAgICAgICAgICAgICAgICBpZiBvcHRpb25hbDoKLSAg
ICAgICAgICAgICAgICAgICAgY29kZSA9ICgiICAgIGJvb2wgJXNfdmFsdWVGb3VuZCA9IGZhbHNl
O1xuIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgJXMgaW5fJXMgPSBJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0JXMocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVy
YWwoXCIlc1wiKSwgJiVzX3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRyKTtcbiIgJQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKGpzb25fcGFyYW1fbmFtZSwgbm9uX29wdGlvbmFsX3R5
cGVfbW9kZWwuZ2V0X2NvbW1hbmRfcmV0dXJuX3Bhc3NfbW9kZWwoKS5nZXRfcmV0dXJuX3Zhcl90
eXBlKCksIGpzb25fcGFyYW1fbmFtZSwgZ2V0dGVyX25hbWUsIGpzb25fcGFyYW1fbmFtZSwganNv
bl9wYXJhbV9uYW1lKSkKLSAgICAgICAgICAgICAgICAgICAgcGFyYW0gPSAiLCAlc192YWx1ZUZv
dW5kID8gJmluXyVzIDogbnVsbHB0ciIgJSAoanNvbl9wYXJhbV9uYW1lLCBqc29uX3BhcmFtX25h
bWUpCi0gICAgICAgICAgICAgICAgICAgICMgRklYTUU6IHBhc3Mgb3B0aW9uYWwgcmVmcHRyLXZh
bHVlcyBhcyBQYXNzUmVmUHRyCi0gICAgICAgICAgICAgICAgICAgIGZvcm1hbF9wYXJhbV90eXBl
X3BhdHRlcm4gPSAiY29uc3QgJXMqIgotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAg
ICAgICAgICAgIGNvZGUgPSAoIiAgICAlcyBpbl8lcyA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyOjpnZXQlcyhwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbChcIiVzXCIpLCBudWxs
cHRyLCBwcm90b2NvbEVycm9yc1B0cik7XG4iICUKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAobm9uX29wdGlvbmFsX3R5cGVfbW9kZWwuZ2V0X2NvbW1hbmRfcmV0dXJuX3Bhc3NfbW9kZWwo
KS5nZXRfcmV0dXJuX3Zhcl90eXBlKCksIGpzb25fcGFyYW1fbmFtZSwgZ2V0dGVyX25hbWUsIGpz
b25fcGFyYW1fbmFtZSkpCi0gICAgICAgICAgICAgICAgICAgIHBhcmFtID0gIiwgaW5fJXMiICUg
anNvbl9wYXJhbV9uYW1lCi0gICAgICAgICAgICAgICAgICAgICMgRklYTUU6IHBhc3Mgbm90LW9w
dGlvbmFsIHJlZnB0ci12YWx1ZXMgYXMgTm9uTnVsbFBhc3NSZWZQdHIKLSAgICAgICAgICAgICAg
ICAgICAgaWYgcGFyYW1fcmF3X3R5cGUuaXNfaGVhdnlfdmFsdWUoKToKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGZvcm1hbF9wYXJhbV90eXBlX3BhdHRlcm4gPSAiY29uc3QgJXMmIgotICAgICAg
ICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWFsX3BhcmFt
X3R5cGVfcGF0dGVybiA9ICIlcyIKLQotICAgICAgICAgICAgICAgIG1ldGhvZF9pbl9wYXJhbXNf
aGFuZGxpbmcuYXBwZW5kKGNvZGUpCi0gICAgICAgICAgICAgICAgYWdlbnRfY2FsbF9wYXJhbV9s
aXN0LmFwcGVuZChwYXJhbSkKLSAgICAgICAgICAgICAgICBHZW5lcmF0b3IuYmFja2VuZF9oYW5k
bGVyX2ludGVyZmFjZV9saXN0LmFwcGVuZCgiLCAlcyBpbl8lcyIgJSAoZm9ybWFsX3BhcmFtX3R5
cGVfcGF0dGVybiAlIG5vbl9vcHRpb25hbF90eXBlX21vZGVsLmdldF9jb21tYW5kX3JldHVybl9w
YXNzX21vZGVsKCkuZ2V0X3JldHVybl92YXJfdHlwZSgpLCBqc29uX3BhcmFtX25hbWUpKQotCi0g
ICAgICAgICAgICAgICAganNfYmluZF90eXBlID0gcGFyYW1fcmF3X3R5cGUuZ2V0X2pzX2JpbmRf
dHlwZSgpCi0gICAgICAgICAgICAgICAganNfcGFyYW1fdGV4dCA9ICJ7XCJuYW1lXCI6IFwiJXNc
IiwgXCJ0eXBlXCI6IFwiJXNcIiwgXCJvcHRpb25hbFwiOiAlc30iICUgKAotICAgICAgICAgICAg
ICAgICAgICBqc29uX3BhcmFtX25hbWUsCi0gICAgICAgICAgICAgICAgICAgIGpzX2JpbmRfdHlw
ZSwKLSAgICAgICAgICAgICAgICAgICAgKCJ0cnVlIiBpZiAoIm9wdGlvbmFsIiBpbiBqc29uX3Bh
cmFtZXRlciBhbmQganNvbl9wYXJhbWV0ZXJbIm9wdGlvbmFsIl0pIGVsc2UgImZhbHNlIikpCi0K
LSAgICAgICAgICAgICAgICBqc19wYXJhbV9saXN0LmFwcGVuZChqc19wYXJhbV90ZXh0KQotCi0g
ICAgICAgICAgICBtZXRob2RfaW5fcGFyYW1zX2hhbmRsaW5nLmFwcGVuZCgiICAgIGlmIChwcm90
b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHtcbiIpCi0gICAgICAgICAgICBtZXRob2RfaW5fcGFyYW1z
X2hhbmRsaW5nLmFwcGVuZCgiICAgICAgICBTdHJpbmcgZXJyb3JNZXNzYWdlID0gU3RyaW5nOjpm
b3JtYXQoXCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyUlcycgY2FuJ3QgYmUgcHJvY2Vzc2Vk
XCIsIFwiJXMuJXNcIik7XG4iICUgKGRvbWFpbl9uYW1lLCBqc29uX2NvbW1hbmRfbmFtZSkpCi0g
ICAgICAgICAgICBtZXRob2RfaW5fcGFyYW1zX2hhbmRsaW5nLmFwcGVuZCgiICAgICAgICBtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIEluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCBlcnJvck1lc3NhZ2UsIHByb3RvY29sRXJy
b3JzLnJlbGVhc2UoKSk7XG4iKQotICAgICAgICAgICAgbWV0aG9kX2luX3BhcmFtc19oYW5kbGlu
Zy5hcHBlbmQoIiAgICAgICAgcmV0dXJuO1xuIikKLSAgICAgICAgICAgIG1ldGhvZF9pbl9wYXJh
bXNfaGFuZGxpbmcuYXBwZW5kKCIgICAgfVxuIikKLSAgICAgICAgICAgIG1ldGhvZF9pbl9wYXJh
bXNfaGFuZGxpbmcuYXBwZW5kKCJcbiIpCi0KLSAgICAgICAgICAgIGpzX3BhcmFtZXRlcnNfdGV4
dCA9ICIsICIuam9pbihqc19wYXJhbV9saXN0KQotCi0gICAgICAgIG1ldGhvZF9kaXNwYXRjaF9o
YW5kbGluZy5hcHBlbmQoIiAgICBFcnJvclN0cmluZyBlcnJvcjtcbiIpCi0gICAgICAgIG1ldGhv
ZF9kaXNwYXRjaF9oYW5kbGluZy5hcHBlbmQoIiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBy
ZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpO1xuIikKLQotICAgICAgICBpZiBqc29u
X2NvbW1hbmQuZ2V0KCJhc3luYyIpID09IFRydWU6Ci0gICAgICAgICAgICBjYWxsYmFja19uYW1l
ID0gQ2FwaXRhbGl6ZXIubG93ZXJfY2FtZWxfY2FzZV90b191cHBlcihqc29uX2NvbW1hbmRfbmFt
ZSkgKyAiQ2FsbGJhY2siCi0KLSAgICAgICAgICAgIGNhbGxiYWNrX291dHB1dCA9IFtdCi0gICAg
ICAgICAgICBjYWxsYmFja193cml0ZXIgPSBXcml0ZXIoY2FsbGJhY2tfb3V0cHV0LCBhZF9ob2Nf
dHlwZV93cml0ZXIuZ2V0X2luZGVudCgpKQotCi0gICAgICAgICAgICBkZWNsX3BhcmFtZXRlcl9s
aXN0ID0gW10KLSAgICAgICAgICAgIEdlbmVyYXRvci5nZW5lcmF0ZV9zZW5kX21ldGhvZChqc29u
X2NvbW1hbmQuZ2V0KCJyZXR1cm5zIiksIGpzb25fY29tbWFuZF9uYW1lLCBkb21haW5fbmFtZSwg
YWRfaG9jX3R5cGVfd3JpdGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRlY2xfcGFyYW1ldGVyX2xpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgR2VuZXJhdG9yLkNhbGxiYWNrTWV0aG9kU3RydWN0VGVtcGxhdGUsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2VuZXJhdG9yLmJhY2tl
bmRfbWV0aG9kX2ltcGxlbWVudGF0aW9uX2xpc3QsIFRlbXBsYXRlcy5jYWxsYmFja19tZXRob2Qs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyJjYWxsYmFja05h
bWUiOiBjYWxsYmFja19uYW1lLCAiaGFuZGxlck5hbWUiOiBhZ2VudF9pbnRlcmZhY2VfbmFtZX0p
Ci0KLSAgICAgICAgICAgIGNhbGxiYWNrX3dyaXRlci5uZXdsaW5lKCJjbGFzcyAiICsgY2FsbGJh
Y2tfbmFtZSArICIgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
cjo6Q2FsbGJhY2tCYXNlIHtcbiIpCi0gICAgICAgICAgICBjYWxsYmFja193cml0ZXIubmV3bGlu
ZSgicHVibGljOlxuIikKLSAgICAgICAgICAgIGNhbGxiYWNrX3dyaXRlci5uZXdsaW5lKCIgICAg
IiArIGNhbGxiYWNrX25hbWUgKyAiKFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlcj4sIGludCBpZCk7XG4iKQotICAgICAgICAgICAgY2FsbGJhY2tfd3JpdGVy
Lm5ld2xpbmUoIiAgICB2b2lkIHNlbmRTdWNjZXNzKCIgKyAiLCAiLmpvaW4oZGVjbF9wYXJhbWV0
ZXJfbGlzdCkgKyAiKTtcbiIpCi0gICAgICAgICAgICBjYWxsYmFja193cml0ZXIubmV3bGluZSgi
fTtcbiIpCi0KLSAgICAgICAgICAgIGFkX2hvY190eXBlX291dHB1dC5hcHBlbmQoY2FsbGJhY2tf
b3V0cHV0KQotCi0gICAgICAgICAgICBtZXRob2RfZGlzcGF0Y2hfaGFuZGxpbmcuYXBwZW5kKCIg
ICAgUmVmUHRyPCVzOjolcz4gY2FsbGJhY2sgPSBhZG9wdFJlZihuZXcgJXM6OiVzKG1fYmFja2Vu
ZERpc3BhdGNoZXIsY2FsbElkKSk7XG4iICUgKGFnZW50X2ludGVyZmFjZV9uYW1lLCBjYWxsYmFj
a19uYW1lLCBhZ2VudF9pbnRlcmZhY2VfbmFtZSwgY2FsbGJhY2tfbmFtZSkpCi0gICAgICAgICAg
ICBtZXRob2RfZW5kaW5nX2hhbmRsaW5nLmFwcGVuZCgiICAgIGlmIChlcnJvci5sZW5ndGgoKSkg
e1xuIikKLSAgICAgICAgICAgIG1ldGhvZF9lbmRpbmdfaGFuZGxpbmcuYXBwZW5kKCIgICAgICAg
IGNhbGxiYWNrLT5kaXNhYmxlKCk7XG4iKQotICAgICAgICAgICAgbWV0aG9kX2VuZGluZ19oYW5k
bGluZy5hcHBlbmQoIiAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xF
cnJvcigmY2FsbElkLCBJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2
ZXJFcnJvciwgZXJyb3IpO1xuIikKLSAgICAgICAgICAgIG1ldGhvZF9lbmRpbmdfaGFuZGxpbmcu
YXBwZW5kKCIgICAgICAgIHJldHVybjtcbiIpCi0gICAgICAgICAgICBtZXRob2RfZW5kaW5nX2hh
bmRsaW5nLmFwcGVuZCgiICAgIH0iKQotCi0gICAgICAgICAgICBhZ2VudF9jYWxsX3BhcmFtX2xp
c3QuYXBwZW5kKCIsIGNhbGxiYWNrIikKLSAgICAgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX2hh
bmRsZXJfaW50ZXJmYWNlX2xpc3QuYXBwZW5kKCIsIFBhc3NSZWZQdHI8JXM+IGNhbGxiYWNrIiAl
IGNhbGxiYWNrX25hbWUpCi0gICAgICAgIGVsaWYgInJldHVybnMiIGluIGpzb25fY29tbWFuZDoK
LSAgICAgICAgICAgIGhhc19tdWx0aXBsZV9yZXR1cm5zID0gbGVuKGpzb25fY29tbWFuZFsicmV0
dXJucyJdKSA+IDEKLSAgICAgICAgICAgIGlmIGhhc19tdWx0aXBsZV9yZXR1cm5zOgotICAgICAg
ICAgICAgICAgIG1ldGhvZF9vdXRfcGFyYW1zX2hhbmRsaW5nLmFwcGVuZCgiICAgIGlmICghZXJy
b3IubGVuZ3RoKCkpIHtcbiIpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIG1l
dGhvZF9vdXRfcGFyYW1zX2hhbmRsaW5nLmFwcGVuZCgiICAgIGlmICghZXJyb3IubGVuZ3RoKCkp
XG4iKQotCi0gICAgICAgICAgICBmb3IganNvbl9yZXR1cm4gaW4ganNvbl9jb21tYW5kWyJyZXR1
cm5zIl06Ci0KLSAgICAgICAgICAgICAgICBqc29uX3JldHVybl9uYW1lID0ganNvbl9yZXR1cm5b
Im5hbWUiXQotCi0gICAgICAgICAgICAgICAgb3B0aW9uYWwgPSBib29sKGpzb25fcmV0dXJuLmdl
dCgib3B0aW9uYWwiKSkKLQotICAgICAgICAgICAgICAgIHJldHVybl90eXBlX2JpbmRpbmcgPSBH
ZW5lcmF0b3IucmVzb2x2ZV90eXBlX2FuZF9nZW5lcmF0ZV9hZF9ob2MoanNvbl9yZXR1cm4sIGpz
b25fY29tbWFuZF9uYW1lLCBkb21haW5fbmFtZSwgYWRfaG9jX3R5cGVfd3JpdGVyLCBhZ2VudF9p
bnRlcmZhY2VfbmFtZSArICI6OiIpCi0KLSAgICAgICAgICAgICAgICByYXdfdHlwZSA9IHJldHVy
bl90eXBlX2JpbmRpbmcucmVkdWNlX3RvX3Jhd190eXBlKCkKLSAgICAgICAgICAgICAgICBzZXR0
ZXJfdHlwZSA9IHJhd190eXBlLmdldF9zZXR0ZXJfbmFtZSgpCi0gICAgICAgICAgICAgICAgaW5p
dGlhbGl6ZXIgPSByYXdfdHlwZS5nZXRfY19pbml0aWFsaXplcigpCi0KLSAgICAgICAgICAgICAg
ICB0eXBlX21vZGVsID0gcmV0dXJuX3R5cGVfYmluZGluZy5nZXRfdHlwZV9tb2RlbCgpCi0gICAg
ICAgICAgICAgICAgaWYgb3B0aW9uYWw6Ci0gICAgICAgICAgICAgICAgICAgIHR5cGVfbW9kZWwg
PSB0eXBlX21vZGVsLmdldF9vcHRpb25hbCgpCi0KLSAgICAgICAgICAgICAgICBjb2RlID0gIiAg
ICAlcyBvdXRfJXM7XG4iICUgKHR5cGVfbW9kZWwuZ2V0X2NvbW1hbmRfcmV0dXJuX3Bhc3NfbW9k
ZWwoKS5nZXRfcmV0dXJuX3Zhcl90eXBlKCksIGpzb25fcmV0dXJuX25hbWUpCi0gICAgICAgICAg
ICAgICAgcGFyYW0gPSAiLCAlc291dF8lcyIgJSAodHlwZV9tb2RlbC5nZXRfY29tbWFuZF9yZXR1
cm5fcGFzc19tb2RlbCgpLmdldF9vdXRwdXRfYXJndW1lbnRfcHJlZml4KCksIGpzb25fcmV0dXJu
X25hbWUpCi0gICAgICAgICAgICAgICAgdmFyX25hbWUgPSAib3V0XyVzIiAlIGpzb25fcmV0dXJu
X25hbWUKLSAgICAgICAgICAgICAgICBzZXR0ZXJfYXJndW1lbnQgPSB0eXBlX21vZGVsLmdldF9j
b21tYW5kX3JldHVybl9wYXNzX21vZGVsKCkuZ2V0X291dHB1dF90b19yYXdfZXhwcmVzc2lvbigp
ICUgdmFyX25hbWUKLSAgICAgICAgICAgICAgICBpZiByZXR1cm5fdHlwZV9iaW5kaW5nLmdldF9z
ZXR0ZXJfdmFsdWVfZXhwcmVzc2lvbl9wYXR0ZXJuKCk6Ci0gICAgICAgICAgICAgICAgICAgIHNl
dHRlcl9hcmd1bWVudCA9IHJldHVybl90eXBlX2JpbmRpbmcuZ2V0X3NldHRlcl92YWx1ZV9leHBy
ZXNzaW9uX3BhdHRlcm4oKSAlIChJTlNQRUNUT1JfVFlQRVNfR0VORVJBVE9SX0NPTkZJR19NQVBb
b3V0cHV0X3R5cGVdWyJwcmVmaXgiXSwgc2V0dGVyX2FyZ3VtZW50KQotCi0gICAgICAgICAgICAg
ICAgY29vayA9ICIgICAgICAgIHJlc3VsdC0+c2V0JXMoQVNDSUlMaXRlcmFsKFwiJXNcIiksICVz
KTtcbiIgJSAoc2V0dGVyX3R5cGUsIGpzb25fcmV0dXJuX25hbWUsIHNldHRlcl9hcmd1bWVudCkK
LQotICAgICAgICAgICAgICAgIHNldF9jb25kaXRpb25fcGF0dGVybiA9IHR5cGVfbW9kZWwuZ2V0
X2NvbW1hbmRfcmV0dXJuX3Bhc3NfbW9kZWwoKS5nZXRfc2V0X3JldHVybl9jb25kaXRpb24oKQot
ICAgICAgICAgICAgICAgIGlmIHNldF9jb25kaXRpb25fcGF0dGVybjoKLSAgICAgICAgICAgICAg
ICAgICAgY29vayA9ICgiICAgICAgICBpZiAoJXMpXG4gICAgIiAlIChzZXRfY29uZGl0aW9uX3Bh
dHRlcm4gJSB2YXJfbmFtZSkpICsgY29vawotICAgICAgICAgICAgICAgIGFubm90YXRlZF90eXBl
ID0gdHlwZV9tb2RlbC5nZXRfY29tbWFuZF9yZXR1cm5fcGFzc19tb2RlbCgpLmdldF9vdXRwdXRf
cGFyYW1ldGVyX3R5cGUoKQotCi0gICAgICAgICAgICAgICAgcGFyYW1fbmFtZSA9ICJvdXRfJXMi
ICUganNvbl9yZXR1cm5fbmFtZQotICAgICAgICAgICAgICAgIGlmIG9wdGlvbmFsOgotICAgICAg
ICAgICAgICAgICAgICBwYXJhbV9uYW1lID0gIm9wdF8iICsgcGFyYW1fbmFtZQotCi0gICAgICAg
ICAgICAgICAgR2VuZXJhdG9yLmJhY2tlbmRfaGFuZGxlcl9pbnRlcmZhY2VfbGlzdC5hcHBlbmQo
IiwgJXMgJXMiICUgKGFubm90YXRlZF90eXBlLCBwYXJhbV9uYW1lKSkKLSAgICAgICAgICAgICAg
ICBtZXRob2Rfb3V0X3BhcmFtc19oYW5kbGluZy5hcHBlbmQoY29vaykKLSAgICAgICAgICAgICAg
ICBtZXRob2RfZGlzcGF0Y2hfaGFuZGxpbmcuYXBwZW5kKGNvZGUpCi0KLSAgICAgICAgICAgICAg
ICBhZ2VudF9jYWxsX3BhcmFtX2xpc3QuYXBwZW5kKHBhcmFtKQotCi0gICAgICAgICAgICBpZiBo
YXNfbXVsdGlwbGVfcmV0dXJuczoKLSAgICAgICAgICAgICAgICBtZXRob2Rfb3V0X3BhcmFtc19o
YW5kbGluZy5hcHBlbmQoIiAgICB9XG4iKQotICAgICAgICAgICAgbWV0aG9kX291dF9wYXJhbXNf
aGFuZGxpbmcuYXBwZW5kKCJcbiIpCi0KLSAgICAgICAgbWV0aG9kX2Rpc3BhdGNoX2hhbmRsaW5n
LmFwcGVuZCgiICAgIG1fYWdlbnQtPiVzKCZlcnJvciVzKTtcbiIgJSAoanNvbl9jb21tYW5kX25h
bWUsICIiLmpvaW4oYWdlbnRfY2FsbF9wYXJhbV9saXN0KSkpCi0gICAgICAgIG1ldGhvZF9kaXNw
YXRjaF9oYW5kbGluZy5hcHBlbmQoIlxuIikKLQotICAgICAgICBpZiBub3QgbWV0aG9kX2VuZGlu
Z19oYW5kbGluZzoKLSAgICAgICAgICAgIG1ldGhvZF9lbmRpbmdfaGFuZGxpbmcuYXBwZW5kKCIg
ICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVh
c2UoKSwgZXJyb3IpOyIpCi0KLSAgICAgICAgYmFja2VuZF9qc19yZXBseV9wYXJhbV9saXN0ID0g
W10KLSAgICAgICAgaWYgInJldHVybnMiIGluIGpzb25fY29tbWFuZDoKLSAgICAgICAgICAgIGZv
ciBqc29uX3JldHVybiBpbiBqc29uX2NvbW1hbmRbInJldHVybnMiXToKLSAgICAgICAgICAgICAg
ICBqc29uX3JldHVybl9uYW1lID0ganNvbl9yZXR1cm5bIm5hbWUiXQotICAgICAgICAgICAgICAg
IGJhY2tlbmRfanNfcmVwbHlfcGFyYW1fbGlzdC5hcHBlbmQoIlwiJXNcIiIgJSBqc29uX3JldHVy
bl9uYW1lKQotCi0gICAgICAgIGpzX3JlcGx5X2xpc3QgPSAiWyVzXSIgJSAiLCAiLmpvaW4oYmFj
a2VuZF9qc19yZXBseV9wYXJhbV9saXN0KQotCi0gICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX21l
dGhvZF9pbXBsZW1lbnRhdGlvbl9saXN0LmFwcGVuZChUZW1wbGF0ZXMuYmFja2VuZF9tZXRob2Qu
c3Vic3RpdHV0ZShOb25lLAotICAgICAgICAgICAgZGlzcGF0Y2hlck5hbWU9ZGlzcGF0Y2hlcl9u
YW1lLAotICAgICAgICAgICAgbWV0aG9kTmFtZT1qc29uX2NvbW1hbmRfbmFtZSwKLSAgICAgICAg
ICAgIHJlcXVlc3RNZXNzYWdlT2JqZWN0PW1ldGhvZF9yZXF1ZXN0X21lc3NhZ2VfcGFyYW1fbmFt
ZSwKLSAgICAgICAgICAgIG1ldGhvZEluUGFyYW1ldGVyc0hhbmRsaW5nPSIiLmpvaW4obWV0aG9k
X2luX3BhcmFtc19oYW5kbGluZyksCi0gICAgICAgICAgICBtZXRob2REaXNwYXRjaEhhbmRsaW5n
PSIiLmpvaW4obWV0aG9kX2Rpc3BhdGNoX2hhbmRsaW5nKSwKLSAgICAgICAgICAgIG1ldGhvZE91
dFBhcmFtZXRlcnNIYW5kbGluZz0iIi5qb2luKG1ldGhvZF9vdXRfcGFyYW1zX2hhbmRsaW5nKSwK
LSAgICAgICAgICAgIG1ldGhvZEVuZGluZ0hhbmRsaW5nPSIiLmpvaW4obWV0aG9kX2VuZGluZ19o
YW5kbGluZykpKQotCi0gICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX2pzX2RvbWFpbl9pbml0aWFs
aXplcl9saXN0LmFwcGVuZCgiSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoXCIlcy4l
c1wiLCBbJXNdLCAlcyk7XG4iICUgKGRvbWFpbl9uYW1lLCBqc29uX2NvbW1hbmRfbmFtZSwganNf
cGFyYW1ldGVyc190ZXh0LCBqc19yZXBseV9saXN0KSkKLSAgICAgICAgR2VuZXJhdG9yLmJhY2tl
bmRfaGFuZGxlcl9pbnRlcmZhY2VfbGlzdC5hcHBlbmQoIikgPSAwO1xuIikKLQotICAgIGNsYXNz
IENhbGxiYWNrTWV0aG9kU3RydWN0VGVtcGxhdGU6Ci0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAg
ICAgICAgZGVmIGFwcGVuZF9wcm9sb2cobGluZV9saXN0KToKLSAgICAgICAgICAgIHBhc3MKLQot
ICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgIGRlZiBhcHBlbmRfZXBpbG9nKGxpbmVfbGlz
dCk6Ci0gICAgICAgICAgICBwYXNzCi0KLSAgICAgICAgY29udGFpbmVyX25hbWUgPSAianNvbk1l
c3NhZ2UiCi0KLSAgICAjIEdlbmVyYXRlcyBjb21tb24gY29kZSBmb3IgZXZlbnQgc2VuZGluZyBh
bmQgY2FsbGJhY2sgcmVzcG9uc2UgZGF0YSBzZW5kaW5nLgotICAgIEBzdGF0aWNtZXRob2QKLSAg
ICBkZWYgZ2VuZXJhdGVfc2VuZF9tZXRob2QocGFyYW1ldGVycywgZXZlbnRfbmFtZSwgZG9tYWlu
X25hbWUsIGFkX2hvY190eXBlX3dyaXRlciwgZGVjbF9wYXJhbWV0ZXJfbGlzdCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbWV0aG9kX3N0cnVjdF90ZW1wbGF0ZSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ2VuZXJhdG9yX21ldGhvZF9saXN0LCBtZXRob2RfdGVtcGxhdGUs
IHRlbXBsYXRlX3BhcmFtcyk6Ci0gICAgICAgIG1ldGhvZF9saW5lX2xpc3QgPSBbXQotICAgICAg
ICBpZiBwYXJhbWV0ZXJzOgotICAgICAgICAgICAgbWV0aG9kX3N0cnVjdF90ZW1wbGF0ZS5hcHBl
bmRfcHJvbG9nKG1ldGhvZF9saW5lX2xpc3QpCi0gICAgICAgICAgICBmb3IganNvbl9wYXJhbWV0
ZXIgaW4gcGFyYW1ldGVyczoKLSAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfbmFtZSA9IGpzb25f
cGFyYW1ldGVyWyJuYW1lIl0KLQotICAgICAgICAgICAgICAgIHBhcmFtX3R5cGVfYmluZGluZyA9
IEdlbmVyYXRvci5yZXNvbHZlX3R5cGVfYW5kX2dlbmVyYXRlX2FkX2hvYyhqc29uX3BhcmFtZXRl
ciwgZXZlbnRfbmFtZSwgZG9tYWluX25hbWUsIGFkX2hvY190eXBlX3dyaXRlciwgIiIpCi0KLSAg
ICAgICAgICAgICAgICByYXdfdHlwZSA9IHBhcmFtX3R5cGVfYmluZGluZy5yZWR1Y2VfdG9fcmF3
X3R5cGUoKQotICAgICAgICAgICAgICAgIHJhd190eXBlX2JpbmRpbmcgPSBSYXdUeXBlQmluZGlu
ZyhyYXdfdHlwZSkKLQotICAgICAgICAgICAgICAgIG9wdGlvbmFsID0gYm9vbChqc29uX3BhcmFt
ZXRlci5nZXQoIm9wdGlvbmFsIikpCi0KLSAgICAgICAgICAgICAgICBzZXR0ZXJfdHlwZSA9IHJh
d190eXBlLmdldF9zZXR0ZXJfbmFtZSgpCi0KLSAgICAgICAgICAgICAgICB0eXBlX21vZGVsID0g
cGFyYW1fdHlwZV9iaW5kaW5nLmdldF90eXBlX21vZGVsKCkKLSAgICAgICAgICAgICAgICByYXdf
dHlwZV9tb2RlbCA9IHJhd190eXBlX2JpbmRpbmcuZ2V0X3R5cGVfbW9kZWwoKQotICAgICAgICAg
ICAgICAgIGlmIG9wdGlvbmFsOgotICAgICAgICAgICAgICAgICAgICB0eXBlX21vZGVsID0gdHlw
ZV9tb2RlbC5nZXRfb3B0aW9uYWwoKQotICAgICAgICAgICAgICAgICAgICByYXdfdHlwZV9tb2Rl
bCA9IHJhd190eXBlX21vZGVsLmdldF9vcHRpb25hbCgpCi0KLSAgICAgICAgICAgICAgICBhbm5v
dGF0ZWRfdHlwZSA9IHR5cGVfbW9kZWwuZ2V0X2lucHV0X3BhcmFtX3R5cGVfdGV4dCgpCi0gICAg
ICAgICAgICAgICAgbW9kZV90eXBlX2JpbmRpbmcgPSBwYXJhbV90eXBlX2JpbmRpbmcKLQotICAg
ICAgICAgICAgICAgIGRlY2xfcGFyYW1ldGVyX2xpc3QuYXBwZW5kKCIlcyAlcyIgJSAoYW5ub3Rh
dGVkX3R5cGUsIHBhcmFtZXRlcl9uYW1lKSkKLQotICAgICAgICAgICAgICAgIHNldHRlcl9hcmd1
bWVudCA9IHJhd190eXBlX21vZGVsLmdldF9ldmVudF9zZXR0ZXJfZXhwcmVzc2lvbl9wYXR0ZXJu
KCkgJSBwYXJhbWV0ZXJfbmFtZQotICAgICAgICAgICAgICAgIGlmIG1vZGVfdHlwZV9iaW5kaW5n
LmdldF9zZXR0ZXJfdmFsdWVfZXhwcmVzc2lvbl9wYXR0ZXJuKCk6Ci0gICAgICAgICAgICAgICAg
ICAgIHNldHRlcl9hcmd1bWVudCA9IG1vZGVfdHlwZV9iaW5kaW5nLmdldF9zZXR0ZXJfdmFsdWVf
ZXhwcmVzc2lvbl9wYXR0ZXJuKCkgJSAoSU5TUEVDVE9SX1RZUEVTX0dFTkVSQVRPUl9DT05GSUdf
TUFQW291dHB1dF90eXBlXVsicHJlZml4Il0sIHNldHRlcl9hcmd1bWVudCkKLQotICAgICAgICAg
ICAgICAgIHNldHRlcl9jb2RlID0gIiAgICAlcy0+c2V0JXMoQVNDSUlMaXRlcmFsKFwiJXNcIiks
ICVzKTtcbiIgJSAobWV0aG9kX3N0cnVjdF90ZW1wbGF0ZS5jb250YWluZXJfbmFtZSwgc2V0dGVy
X3R5cGUsIHBhcmFtZXRlcl9uYW1lLCBzZXR0ZXJfYXJndW1lbnQpCi0gICAgICAgICAgICAgICAg
aWYgb3B0aW9uYWw6Ci0gICAgICAgICAgICAgICAgICAgIHNldHRlcl9jb2RlID0gKCIgICAgaWYg
KCVzKVxuICAgICIgJSBwYXJhbWV0ZXJfbmFtZSkgKyBzZXR0ZXJfY29kZQotICAgICAgICAgICAg
ICAgIG1ldGhvZF9saW5lX2xpc3QuYXBwZW5kKHNldHRlcl9jb2RlKQotCi0gICAgICAgICAgICBt
ZXRob2Rfc3RydWN0X3RlbXBsYXRlLmFwcGVuZF9lcGlsb2cobWV0aG9kX2xpbmVfbGlzdCkKLQot
ICAgICAgICBnZW5lcmF0b3JfbWV0aG9kX2xpc3QuYXBwZW5kKG1ldGhvZF90ZW1wbGF0ZS5zdWJz
dGl0dXRlKE5vbmUsCi0gICAgICAgICAgICBkb21haW5OYW1lPWRvbWFpbl9uYW1lLAotICAgICAg
ICAgICAgcGFyYW1ldGVycz0iLCAiLmpvaW4oZGVjbF9wYXJhbWV0ZXJfbGlzdCksCi0gICAgICAg
ICAgICBjb2RlPSIiLmpvaW4obWV0aG9kX2xpbmVfbGlzdCksICoqdGVtcGxhdGVfcGFyYW1zKSkK
LQotICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgcmVzb2x2ZV90eXBlX2FuZF9nZW5lcmF0ZV9h
ZF9ob2MoanNvbl9wYXJhbSwgbWV0aG9kX25hbWUsIGRvbWFpbl9uYW1lLCBhZF9ob2NfdHlwZV93
cml0ZXIsIGNvbnRhaW5lcl9yZWxhdGl2ZV9uYW1lX3ByZWZpeF9wYXJhbSk6Ci0gICAgICAgIHBh
cmFtX25hbWUgPSBqc29uX3BhcmFtWyJuYW1lIl0KLSAgICAgICAgYWRfaG9jX3R5cGVfbGlzdCA9
IFtdCi0KLSAgICAgICAgY2xhc3MgQWRIb2NUeXBlQ29udGV4dDoKLSAgICAgICAgICAgIGNvbnRh
aW5lcl9mdWxsX25hbWVfcHJlZml4ID0gIjxub3QgeWV0IGRlZmluZWQ+IgotICAgICAgICAgICAg
Y29udGFpbmVyX3JlbGF0aXZlX25hbWVfcHJlZml4ID0gY29udGFpbmVyX3JlbGF0aXZlX25hbWVf
cHJlZml4X3BhcmFtCi0KLSAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgIGRl
ZiBnZXRfdHlwZV9uYW1lX2ZpeCgpOgotICAgICAgICAgICAgICAgIGNsYXNzIE5hbWVGaXg6Ci0g
ICAgICAgICAgICAgICAgICAgIGNsYXNzX25hbWUgPSBDYXBpdGFsaXplci5sb3dlcl9jYW1lbF9j
YXNlX3RvX3VwcGVyKHBhcmFtX25hbWUpCi0KLSAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21l
dGhvZAotICAgICAgICAgICAgICAgICAgICBkZWYgb3V0cHV0X2NvbW1lbnQod3JpdGVyKToKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCIvLyBOYW1lZCBhZnRlciBwYXJh
bWV0ZXIgJyVzJyB3aGlsZSBnZW5lcmF0aW5nIGNvbW1hbmQvZXZlbnQgJXMuXG4iICUgKHBhcmFt
X25hbWUsIG1ldGhvZF9uYW1lKSkKLQotICAgICAgICAgICAgICAgIHJldHVybiBOYW1lRml4Ci0K
LSAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgIGRlZiBhZGRfdHlwZShiaW5k
aW5nKToKLSAgICAgICAgICAgICAgICBhZF9ob2NfdHlwZV9saXN0LmFwcGVuZChiaW5kaW5nKQot
Ci0gICAgICAgIHR5cGVfYmluZGluZyA9IHJlc29sdmVfcGFyYW1fdHlwZShqc29uX3BhcmFtLCBk
b21haW5fbmFtZSwgQWRIb2NUeXBlQ29udGV4dCkKLQotICAgICAgICBjbGFzcyBJbnRlcmZhY2VG
b3J3YXJkTGlzdGVuZXI6Ci0gICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICBk
ZWYgYWRkX3R5cGVfZGF0YSh0eXBlX2RhdGEpOgotICAgICAgICAgICAgICAgIHBhc3MKLQotICAg
ICAgICBjbGFzcyBJbnRlcmZhY2VSZXNvbHZlQ29udGV4dDoKLSAgICAgICAgICAgIGZvcndhcmRf
bGlzdGVuZXIgPSBJbnRlcmZhY2VGb3J3YXJkTGlzdGVuZXIKLQotICAgICAgICBmb3IgdHlwZSBp
biBhZF9ob2NfdHlwZV9saXN0OgotICAgICAgICAgICAgdHlwZS5yZXNvbHZlX2lubmVyKEludGVy
ZmFjZVJlc29sdmVDb250ZXh0KQotCi0gICAgICAgIGNsYXNzIEludGVyZmFjZUdlbmVyYXRlQ29u
dGV4dDoKLSAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIgPSAibm90IHN1cHBvcnRlZCBpbiBJ
bnRlcmZhY2VHZW5lcmF0ZUNvbnRleHQiCi0gICAgICAgICAgICBjcHBfd3JpdGVyID0gdmFsaWRh
dG9yX3dyaXRlcgotCi0gICAgICAgIGZvciB0eXBlIGluIGFkX2hvY190eXBlX2xpc3Q6Ci0gICAg
ICAgICAgICBnZW5lcmF0b3IgPSB0eXBlLmdldF9jb2RlX2dlbmVyYXRvcigpCi0gICAgICAgICAg
ICBpZiBnZW5lcmF0b3I6Ci0gICAgICAgICAgICAgICAgZ2VuZXJhdG9yLmdlbmVyYXRlX3R5cGVf
YnVpbGRlcihhZF9ob2NfdHlwZV93cml0ZXIsIEludGVyZmFjZUdlbmVyYXRlQ29udGV4dCkKLQot
ICAgICAgICByZXR1cm4gdHlwZV9iaW5kaW5nCi0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVm
IHByb2Nlc3NfdHlwZXModHlwZV9tYXApOgotICAgICAgICBvdXRwdXQgPSBHZW5lcmF0b3IudHlw
ZV9idWlsZGVyX2ZyYWdtZW50cwotCi0gICAgICAgIGNsYXNzIEdlbmVyYXRlQ29udGV4dDoKLSAg
ICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIgPSBXcml0ZXIoR2VuZXJhdG9yLnZhbGlkYXRvcl9p
bXBsX2xpc3QsICIiKQotICAgICAgICAgICAgY3BwX3dyaXRlciA9IFdyaXRlcihHZW5lcmF0b3Iu
dHlwZV9idWlsZGVyX2ltcGxfbGlzdCwgIiIpCi0KLSAgICAgICAgZGVmIGdlbmVyYXRlX2FsbF9k
b21haW5zX2NvZGUob3V0LCB0eXBlX2RhdGFfY2FsbGJhY2spOgotICAgICAgICAgICAgd3JpdGVy
ID0gV3JpdGVyKG91dCwgIiIpCi0gICAgICAgICAgICBmb3IgZG9tYWluX2RhdGEgaW4gdHlwZV9t
YXAuZG9tYWluc190b19nZW5lcmF0ZSgpOgotICAgICAgICAgICAgICAgIGRvbWFpbl9maXhlcyA9
IERvbWFpbk5hbWVGaXhlcy5nZXRfZml4ZWRfZGF0YShkb21haW5fZGF0YS5uYW1lKCkpCi0gICAg
ICAgICAgICAgICAgZG9tYWluX2d1YXJkID0gZG9tYWluX2ZpeGVzLmdldF9ndWFyZCgpCi0KLSAg
ICAgICAgICAgICAgICBuYW1lc3BhY2VfZGVjbGFyZWQgPSBbXQotCi0gICAgICAgICAgICAgICAg
ZGVmIG5hbWVzcGFjZV9sYXp5X2dlbmVyYXRvcigpOgotICAgICAgICAgICAgICAgICAgICBpZiBu
b3QgbmFtZXNwYWNlX2RlY2xhcmVkOgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgZG9tYWlu
X2d1YXJkOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbWFpbl9ndWFyZC5nZW5lcmF0
ZV9vcGVuKG91dCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCJuYW1l
c3BhY2UgIikKLSAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5hcHBlbmQoZG9tYWluX2Rh
dGEubmFtZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVuZCgiIHtcbiIp
Ci0gICAgICAgICAgICAgICAgICAgICAgICAjIFdoYXQgaXMgYSBiZXR0ZXIgd2F5IHRvIGNoYW5n
ZSB2YWx1ZSBmcm9tIG91dGVyIHNjb3BlPwotICAgICAgICAgICAgICAgICAgICAgICAgbmFtZXNw
YWNlX2RlY2xhcmVkLmFwcGVuZChUcnVlKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gd3Jp
dGVyCi0KLSAgICAgICAgICAgICAgICBmb3IgdHlwZV9kYXRhIGluIGRvbWFpbl9kYXRhLnR5cGVz
KCk6Ci0gICAgICAgICAgICAgICAgICAgIHR5cGVfZGF0YV9jYWxsYmFjayh0eXBlX2RhdGEsIG5h
bWVzcGFjZV9sYXp5X2dlbmVyYXRvcikKLQotICAgICAgICAgICAgICAgIGlmIG5hbWVzcGFjZV9k
ZWNsYXJlZDoKLSAgICAgICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVuZCgifSAvLyAiKQotICAg
ICAgICAgICAgICAgICAgICB3cml0ZXIuYXBwZW5kKGRvbWFpbl9kYXRhLm5hbWUoKSkKLSAgICAg
ICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVuZCgiXG5cbiIpCi0KLSAgICAgICAgICAgICAgICAg
ICAgaWYgZG9tYWluX2d1YXJkOgotICAgICAgICAgICAgICAgICAgICAgICAgZG9tYWluX2d1YXJk
LmdlbmVyYXRlX2Nsb3NlKG91dCkKLQotICAgICAgICBkZWYgY3JlYXRlX3R5cGVfYnVpbGRlcl9j
YWxsZXIoZ2VuZXJhdGVfcGFzc19pZCk6Ci0gICAgICAgICAgICBkZWYgY2FsbF90eXBlX2J1aWxk
ZXIodHlwZV9kYXRhLCB3cml0ZXJfZ2V0dGVyKToKLSAgICAgICAgICAgICAgICBjb2RlX2dlbmVy
YXRvciA9IHR5cGVfZGF0YS5nZXRfYmluZGluZygpLmdldF9jb2RlX2dlbmVyYXRvcigpCi0gICAg
ICAgICAgICAgICAgaWYgY29kZV9nZW5lcmF0b3IgYW5kIGdlbmVyYXRlX3Bhc3NfaWQgPT0gY29k
ZV9nZW5lcmF0b3IuZ2V0X2dlbmVyYXRlX3Bhc3NfaWQoKToKLSAgICAgICAgICAgICAgICAgICAg
d3JpdGVyID0gd3JpdGVyX2dldHRlcigpCi0KLSAgICAgICAgICAgICAgICAgICAgY29kZV9nZW5l
cmF0b3IuZ2VuZXJhdGVfdHlwZV9idWlsZGVyKHdyaXRlciwgR2VuZXJhdGVDb250ZXh0KQotICAg
ICAgICAgICAgcmV0dXJuIGNhbGxfdHlwZV9idWlsZGVyCi0KLSAgICAgICAgZ2VuZXJhdGVfYWxs
X2RvbWFpbnNfY29kZShvdXRwdXQsIGNyZWF0ZV90eXBlX2J1aWxkZXJfY2FsbGVyKFR5cGVCdWls
ZGVyUGFzcy5NQUlOKSkKLQotICAgICAgICBHZW5lcmF0b3IudHlwZV9idWlsZGVyX2ZvcndhcmRz
LmFwcGVuZCgiLy8gRm9yd2FyZCBkZWNsYXJhdGlvbnMuXG4iKQotCi0gICAgICAgIGRlZiBnZW5l
cmF0ZV9mb3J3YXJkX2NhbGxiYWNrKHR5cGVfZGF0YSwgd3JpdGVyX2dldHRlcik6Ci0gICAgICAg
ICAgICBpZiB0eXBlX2RhdGEgaW4gZ2xvYmFsX2ZvcndhcmRfbGlzdGVuZXIudHlwZV9kYXRhX3Nl
dDoKLSAgICAgICAgICAgICAgICBiaW5kaW5nID0gdHlwZV9kYXRhLmdldF9iaW5kaW5nKCkKLSAg
ICAgICAgICAgICAgICBiaW5kaW5nLmdldF9jb2RlX2dlbmVyYXRvcigpLmdlbmVyYXRlX2Zvcndh
cmRfZGVjbGFyYXRpb24od3JpdGVyX2dldHRlcigpKQotICAgICAgICBnZW5lcmF0ZV9hbGxfZG9t
YWluc19jb2RlKEdlbmVyYXRvci50eXBlX2J1aWxkZXJfZm9yd2FyZHMsIGdlbmVyYXRlX2Zvcndh
cmRfY2FsbGJhY2spCi0KLSAgICAgICAgR2VuZXJhdG9yLnR5cGVfYnVpbGRlcl9mb3J3YXJkcy5h
cHBlbmQoIi8vIEVuZCBvZiBmb3J3YXJkIGRlY2xhcmF0aW9ucy5cblxuIikKLQotICAgICAgICBH
ZW5lcmF0b3IudHlwZV9idWlsZGVyX2ZvcndhcmRzLmFwcGVuZCgiLy8gVHlwZWRlZnMuXG4iKQot
Ci0gICAgICAgIGdlbmVyYXRlX2FsbF9kb21haW5zX2NvZGUoR2VuZXJhdG9yLnR5cGVfYnVpbGRl
cl9mb3J3YXJkcywgY3JlYXRlX3R5cGVfYnVpbGRlcl9jYWxsZXIoVHlwZUJ1aWxkZXJQYXNzLlRZ
UEVERUYpKQotCi0gICAgICAgIEdlbmVyYXRvci50eXBlX2J1aWxkZXJfZm9yd2FyZHMuYXBwZW5k
KCIvLyBFbmQgb2YgdHlwZWRlZnMuXG5cbiIpCi0KLQotZGVmIGZsYXR0ZW5fbGlzdChpbnB1dCk6
Ci0gICAgcmVzID0gW10KLQotICAgIGRlZiBmaWxsX3JlY3Vyc2l2ZShsKToKLSAgICAgICAgZm9y
IGl0ZW0gaW4gbDoKLSAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoaXRlbSwgbGlzdCk6Ci0gICAg
ICAgICAgICAgICAgZmlsbF9yZWN1cnNpdmUoaXRlbSkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAg
ICAgICAgICAgICAgcmVzLmFwcGVuZChpdGVtKQotICAgIGZpbGxfcmVjdXJzaXZlKGlucHV0KQot
ICAgIHJldHVybiByZXMKLQotCi0jIEEgd3JpdGVyIHRoYXQgb25seSB1cGRhdGVzIGZpbGUgaWYg
aXQgYWN0dWFsbHkgY2hhbmdlZCB0byBiZXR0ZXIgc3VwcG9ydCBpbmNyZW1lbnRhbCBidWlsZC4K
LWNsYXNzIFNtYXJ0T3V0cHV0OgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlX25hbWUpOgot
ICAgICAgICBzZWxmLmZpbGVfbmFtZV8gPSBmaWxlX25hbWUKLSAgICAgICAgc2VsZi5vdXRwdXRf
ID0gIiIKLQotICAgIGRlZiB3cml0ZShzZWxmLCB0ZXh0KToKLSAgICAgICAgc2VsZi5vdXRwdXRf
ICs9IHRleHQKLQotICAgIGRlZiBjbG9zZShzZWxmKToKLSAgICAgICAgdGV4dF9jaGFuZ2VkID0g
VHJ1ZQotICAgICAgICBzZWxmLm91dHB1dF8gPSBzZWxmLm91dHB1dF8ucnN0cmlwKCkgKyAiXG4i
Ci0KLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgcmVhZF9maWxlID0gb3BlbihzZWxmLmZpbGVf
bmFtZV8sICJyIikKLSAgICAgICAgICAgIG9sZF90ZXh0ID0gcmVhZF9maWxlLnJlYWQoKQotICAg
ICAgICAgICAgcmVhZF9maWxlLmNsb3NlKCkKLSAgICAgICAgICAgIHRleHRfY2hhbmdlZCA9IG9s
ZF90ZXh0ICE9IHNlbGYub3V0cHV0XwotICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICAjIEln
bm9yZSwganVzdCBvdmVyd3JpdGUgYnkgZGVmYXVsdAotICAgICAgICAgICAgcGFzcwotCi0gICAg
ICAgIGlmIHRleHRfY2hhbmdlZCBvciB3cml0ZV9hbHdheXM6Ci0gICAgICAgICAgICBvdXRfZmls
ZSA9IG9wZW4oc2VsZi5maWxlX25hbWVfLCAidyIpCi0gICAgICAgICAgICBvdXRfZmlsZS53cml0
ZShzZWxmLm91dHB1dF8pCi0gICAgICAgICAgICBvdXRfZmlsZS5jbG9zZSgpCi0KLQotR2VuZXJh
dG9yLmdvKCkKLQotb3V0cHV0X2ZpbGVfbmFtZV9wcmVmaXggPSBJTlNQRUNUT1JfVFlQRVNfR0VO
RVJBVE9SX0NPTkZJR19NQVBbb3V0cHV0X3R5cGVdWyJwcmVmaXgiXQotCi1iYWNrZW5kX2hfZmls
ZSA9IFNtYXJ0T3V0cHV0KG91dHB1dF9oZWFkZXJfZGlybmFtZSArICgiL0luc3BlY3RvciVzQmFj
a2VuZERpc3BhdGNoZXJzLmgiICUgb3V0cHV0X2ZpbGVfbmFtZV9wcmVmaXgpKQotYmFja2VuZF9j
cHBfZmlsZSA9IFNtYXJ0T3V0cHV0KG91dHB1dF9jcHBfZGlybmFtZSArICgiL0luc3BlY3RvciVz
QmFja2VuZERpc3BhdGNoZXJzLmNwcCIgJSBvdXRwdXRfZmlsZV9uYW1lX3ByZWZpeCkpCi0KLWZy
b250ZW5kX2hfZmlsZSA9IFNtYXJ0T3V0cHV0KG91dHB1dF9oZWFkZXJfZGlybmFtZSArICgiL0lu
c3BlY3RvciVzRnJvbnRlbmREaXNwYXRjaGVycy5oIiAlIG91dHB1dF9maWxlX25hbWVfcHJlZml4
KSkKLWZyb250ZW5kX2NwcF9maWxlID0gU21hcnRPdXRwdXQob3V0cHV0X2NwcF9kaXJuYW1lICsg
KCIvSW5zcGVjdG9yJXNGcm9udGVuZERpc3BhdGNoZXJzLmNwcCIgJSBvdXRwdXRfZmlsZV9uYW1l
X3ByZWZpeCkpCi0KLXR5cGVidWlsZGVyX2hfZmlsZSA9IFNtYXJ0T3V0cHV0KG91dHB1dF9oZWFk
ZXJfZGlybmFtZSArICgiL0luc3BlY3RvciVzVHlwZUJ1aWxkZXJzLmgiICUgb3V0cHV0X2ZpbGVf
bmFtZV9wcmVmaXgpKQotdHlwZWJ1aWxkZXJfY3BwX2ZpbGUgPSBTbWFydE91dHB1dChvdXRwdXRf
Y3BwX2Rpcm5hbWUgKyAoIi9JbnNwZWN0b3Ilc1R5cGVCdWlsZGVycy5jcHAiICUgb3V0cHV0X2Zp
bGVfbmFtZV9wcmVmaXgpKQotCi1iYWNrZW5kX2pzX2ZpbGUgPSBTbWFydE91dHB1dChvdXRwdXRf
anNfZGlybmFtZSArICgiL0luc3BlY3RvciVzQmFja2VuZENvbW1hbmRzLmpzIiAlIG91dHB1dF9m
aWxlX25hbWVfcHJlZml4KSkKLQotCi1iYWNrZW5kX2hfZmlsZS53cml0ZShUZW1wbGF0ZXMuYmFj
a2VuZF9oLnN1YnN0aXR1dGUoTm9uZSwKLSAgICBvdXRwdXRGaWxlTmFtZVByZWZpeD1vdXRwdXRf
ZmlsZV9uYW1lX3ByZWZpeCwKLSAgICBoYW5kbGVySW50ZXJmYWNlcz0iIi5qb2luKGZsYXR0ZW5f
bGlzdChHZW5lcmF0b3IuYmFja2VuZF9oYW5kbGVyX2ludGVyZmFjZV9saXN0KSksCi0gICAgZGlz
cGF0Y2hlckludGVyZmFjZXM9IiIuam9pbihmbGF0dGVuX2xpc3QoR2VuZXJhdG9yLmJhY2tlbmRf
ZGlzcGF0Y2hlcl9pbnRlcmZhY2VfbGlzdCkpKSkKLQotYmFja2VuZF9jcHBfZmlsZS53cml0ZShU
ZW1wbGF0ZXMuYmFja2VuZF9jcHAuc3Vic3RpdHV0ZShOb25lLAotICAgIG91dHB1dEZpbGVOYW1l
UHJlZml4PW91dHB1dF9maWxlX25hbWVfcHJlZml4LAotICAgIGhhbmRsZXJJbXBsZW1lbnRhdGlv
bnM9IiIuam9pbihmbGF0dGVuX2xpc3QoR2VuZXJhdG9yLmJhY2tlbmRfaGFuZGxlcl9pbXBsZW1l
bnRhdGlvbl9saXN0KSksCi0gICAgbWV0aG9kcz0iXG4iLmpvaW4oR2VuZXJhdG9yLmJhY2tlbmRf
bWV0aG9kX2ltcGxlbWVudGF0aW9uX2xpc3QpKSkKLQotZnJvbnRlbmRfaF9maWxlLndyaXRlKFRl
bXBsYXRlcy5mcm9udGVuZF9oLnN1YnN0aXR1dGUoTm9uZSwKLSAgICBvdXRwdXRGaWxlTmFtZVBy
ZWZpeD1vdXRwdXRfZmlsZV9uYW1lX3ByZWZpeCwKLSAgICBkb21haW5DbGFzc0xpc3Q9IiIuam9p
bihHZW5lcmF0b3IuZnJvbnRlbmRfZG9tYWluX2NsYXNzX2xpbmVzKSkpCi0KLWZyb250ZW5kX2Nw
cF9maWxlLndyaXRlKFRlbXBsYXRlcy5mcm9udGVuZF9jcHAuc3Vic3RpdHV0ZShOb25lLAotICAg
IG91dHB1dEZpbGVOYW1lUHJlZml4PW91dHB1dF9maWxlX25hbWVfcHJlZml4LAotICAgIG1ldGhv
ZHM9IlxuIi5qb2luKEdlbmVyYXRvci5mcm9udGVuZF9tZXRob2RfbGlzdCkpKQotCi10eXBlYnVp
bGRlcl9oX2ZpbGUud3JpdGUoVGVtcGxhdGVzLnR5cGVidWlsZGVyX2guc3Vic3RpdHV0ZShOb25l
LAotICAgIG91dHB1dEZpbGVOYW1lUHJlZml4PW91dHB1dF9maWxlX25hbWVfcHJlZml4LAotICAg
IHR5cGVCdWlsZGVyRGVwZW5kZW5jaWVzPUlOU1BFQ1RPUl9UWVBFU19HRU5FUkFUT1JfQ09ORklH
X01BUFtvdXRwdXRfdHlwZV1bInR5cGVidWlsZGVyX2RlcGVuZGVuY3kiXSwKLSAgICBleHBvcnRN
YWNybz1JTlNQRUNUT1JfVFlQRVNfR0VORVJBVE9SX0NPTkZJR19NQVBbb3V0cHV0X3R5cGVdWyJl
eHBvcnRfbWFjcm8iXSwKLSAgICB0eXBlQnVpbGRlcnM9IiIuam9pbihmbGF0dGVuX2xpc3QoR2Vu
ZXJhdG9yLnR5cGVfYnVpbGRlcl9mcmFnbWVudHMpKSwKLSAgICBmb3J3YXJkcz0iIi5qb2luKEdl
bmVyYXRvci50eXBlX2J1aWxkZXJfZm9yd2FyZHMpLAotICAgIHZhbGlkYXRvcklmZGVmTmFtZT1W
QUxJREFUT1JfSUZERUZfTkFNRSkpCi0KLXR5cGVidWlsZGVyX2NwcF9maWxlLndyaXRlKFRlbXBs
YXRlcy50eXBlYnVpbGRlcl9jcHAuc3Vic3RpdHV0ZShOb25lLAotICAgIG91dHB1dEZpbGVOYW1l
UHJlZml4PW91dHB1dF9maWxlX25hbWVfcHJlZml4LAotICAgIGVudW1Db25zdGFudFZhbHVlcz1F
bnVtQ29uc3RhbnRzLmdldF9lbnVtX2NvbnN0YW50X2NvZGUoKSwKLSAgICBpbXBsQ29kZT0iIi5q
b2luKGZsYXR0ZW5fbGlzdChHZW5lcmF0b3IudHlwZV9idWlsZGVyX2ltcGxfbGlzdCkpLAotICAg
IHZhbGlkYXRvckNvZGU9IiIuam9pbihmbGF0dGVuX2xpc3QoR2VuZXJhdG9yLnZhbGlkYXRvcl9p
bXBsX2xpc3QpKSwKLSAgICB2YWxpZGF0b3JJZmRlZk5hbWU9VkFMSURBVE9SX0lGREVGX05BTUUp
KQotCi1iYWNrZW5kX2pzX2ZpbGUud3JpdGUoVGVtcGxhdGVzLmJhY2tlbmRfanMuc3Vic3RpdHV0
ZShOb25lLAotICAgIGRvbWFpbkluaXRpYWxpemVycz0iIi5qb2luKEdlbmVyYXRvci5iYWNrZW5k
X2pzX2RvbWFpbl9pbml0aWFsaXplcl9saXN0KSkpCi0KLWJhY2tlbmRfaF9maWxlLmNsb3NlKCkK
LWJhY2tlbmRfY3BwX2ZpbGUuY2xvc2UoKQotCi1mcm9udGVuZF9oX2ZpbGUuY2xvc2UoKQotZnJv
bnRlbmRfY3BwX2ZpbGUuY2xvc2UoKQotCi10eXBlYnVpbGRlcl9oX2ZpbGUuY2xvc2UoKQotdHlw
ZWJ1aWxkZXJfY3BwX2ZpbGUuY2xvc2UoKQotCi1iYWNrZW5kX2pzX2ZpbGUuY2xvc2UoKQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4v
X19pbml0X18ucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29k
ZWdlbi9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wYjc2MTE4Y2U1ZWUyOWY4NGNkNTUwZTk4NDIx
ODBhNGViMzQ5NzNhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vX19pbml0X18ucHkKQEAgLTAsMCArMSwxMiBAQAorIyBS
ZXF1aXJlZCBmb3IgUHl0aG9uIHRvIHNlYXJjaCB0aGlzIGRpcmVjdG9yeSBmb3IgbW9kdWxlIGZp
bGVzCisKK2Zyb20gbW9kZWxzIGltcG9ydCAqCitmcm9tIGdlbmVyYXRvciBpbXBvcnQgKgorCitm
cm9tIGdlbmVyYXRlX2JhY2tlbmRfY29tbWFuZHMgaW1wb3J0ICoKK2Zyb20gZ2VuZXJhdGVfYmFj
a2VuZF9kaXNwYXRjaGVyX2hlYWRlciBpbXBvcnQgKgorZnJvbSBnZW5lcmF0ZV9iYWNrZW5kX2Rp
c3BhdGNoZXJfaW1wbGVtZW50YXRpb24gaW1wb3J0ICoKK2Zyb20gZ2VuZXJhdGVfZnJvbnRlbmRf
ZGlzcGF0Y2hlcl9oZWFkZXIgaW1wb3J0ICoKK2Zyb20gZ2VuZXJhdGVfZnJvbnRlbmRfZGlzcGF0
Y2hlcl9pbXBsZW1lbnRhdGlvbiBpbXBvcnQgKgorZnJvbSBnZW5lcmF0ZV90eXBlX2J1aWxkZXJf
aGVhZGVyIGltcG9ydCAqCitmcm9tIGdlbmVyYXRlX3R5cGVfYnVpbGRlcl9pbXBsZW1lbnRhdGlv
biBpbXBvcnQgKgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfYmFja2VuZF9jb21tYW5kcy5weSBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2JhY2tlbmRfY29t
bWFuZHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uYzdkOTljNWE4NzEyYmQ5Yzg5OGNiM2E4M2U0MWE4ZWU5NDZi
MzhjZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2JhY2tlbmRfY29tbWFuZHMucHkKQEAgLTAsMCArMSwx
MjQgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyBDb3B5cmlnaHQgKGMpIDIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKGMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMg
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworIyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisjIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKworCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IHN0cmluZwor
Citmcm9tIGdlbmVyYXRvciBpbXBvcnQgR2VuZXJhdG9yLCB1Y2ZpcnN0Citmcm9tIHN0cmluZyBp
bXBvcnQgVGVtcGxhdGUKK2Zyb20gZ2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgR2VuZXJhdG9y
VGVtcGxhdGVzIGFzIFRlbXBsYXRlcworZnJvbSBtb2RlbHMgaW1wb3J0IEVudW1UeXBlCisKK2xv
Z2dpbmcuYmFzaWNDb25maWcoZm9ybWF0PSclKGxldmVsbmFtZSlzOiAlKG1lc3NhZ2UpcycsIGxl
dmVsPWxvZ2dpbmcuRVJST1IpCitsb2cgPSBsb2dnaW5nLmdldExvZ2dlcignZ2xvYmFsJykKKwor
CitjbGFzcyBCYWNrZW5kQ29tbWFuZHNHZW5lcmF0b3IoR2VuZXJhdG9yKToKKyAgICBkZWYgX19p
bml0X18oc2VsZiwgbW9kZWwsIGlucHV0X2ZpbGVwYXRoKToKKyAgICAgICAgR2VuZXJhdG9yLl9f
aW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0aCkKKworICAgIGRlZiBvdXRwdXRfZmls
ZW5hbWUoc2VsZik6CisgICAgICAgIHJldHVybiAiSW5zcGVjdG9yJXNCYWNrZW5kQ29tbWFuZHMu
anMiICUgc2VsZi5tb2RlbCgpLmZyYW1ld29yay5zZXR0aW5nKCdwcmVmaXgnKQorCisgICAgZGVm
IGdlbmVyYXRlX291dHB1dChzZWxmKToKKyAgICAgICAgZG9tYWluc190b19nZW5lcmF0ZSA9IFtd
CisgICAgICAgIGZvciBfZG9tYWluIGluIHNlbGYubW9kZWwoKS5kb21haW5zOgorICAgICAgICAg
ICAgZW51bV90eXBlcyA9IGZpbHRlcihsYW1iZGEgZGVjbGFyYXRpb246IGlzaW5zdGFuY2UoZGVj
bGFyYXRpb24udHlwZSwgRW51bVR5cGUpLCBfZG9tYWluLnR5cGVfZGVjbGFyYXRpb25zKQorICAg
ICAgICAgICAgaWYgX2RvbWFpbi5pc19zdXBwbGVtZW50YWw6CisgICAgICAgICAgICAgICAgY29u
dGludWUKKyAgICAgICAgICAgIGVsaWYgbGVuKF9kb21haW4uY29tbWFuZHMpID09IDAgYW5kIGxl
bihfZG9tYWluLmV2ZW50cykgPT0gMCBhbmQgbGVuKGVudW1fdHlwZXMpID09IDA6CisgICAgICAg
ICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgZG9tYWluc190b19nZW5lcmF0ZS5hcHBl
bmQoX2RvbWFpbikKKworICAgICAgICBzZWN0aW9ucyA9IFtdCisgICAgICAgIHNlY3Rpb25zLmFw
cGVuZChzZWxmLmdlbmVyYXRlX2xpY2Vuc2UoKSkKKyAgICAgICAgc2VjdGlvbnMuZXh0ZW5kKFtz
ZWxmLmdlbmVyYXRlX2RvbWFpbihkb21haW4pIGZvciBkb21haW4gaW4gZG9tYWluc190b19nZW5l
cmF0ZV0pCisgICAgICAgIHJldHVybiAiXG5cbiIuam9pbihzZWN0aW9ucykKKworICAgIGRlZiBn
ZW5lcmF0ZV9kb21haW4oc2VsZiwgZG9tYWluKToKKyAgICAgICAgbGluZXMgPSBbXQorICAgICAg
ICBhcmdzID0geworICAgICAgICAgICAgJ2RvbWFpbic6IGRvbWFpbi5kb21haW5fbmFtZQorICAg
ICAgICB9CisKKyAgICAgICAgIyBQcmVhbWJsZQorICAgICAgICBsaW5lcy5hcHBlbmQoJy8vICUo
ZG9tYWluKXMuJyAlIGFyZ3MpCisKKyAgICAgICAgaGFzX2FzeW5jX2NvbW1hbmRzID0gYW55KG1h
cChsYW1iZGEgY29tbWFuZDogY29tbWFuZC5pc19hc3luYywgZG9tYWluLmNvbW1hbmRzKSkKKyAg
ICAgICAgaWYgbGVuKGRvbWFpbi5ldmVudHMpID4gMCBvciBoYXNfYXN5bmNfY29tbWFuZHM6Cisg
ICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXIlKGRvbWFp
bilzRGlzcGF0Y2hlciA9IEluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW5EaXNwYXRjaGVy
LmJpbmQoSW5zcGVjdG9yQmFja2VuZCwgIiUoZG9tYWluKXMiKTsnICUgYXJncykKKworICAgICAg
ICAjIEVudW0gVHlwZSBEZWNsYXJhdGlvbnMKKyAgICAgICAgZm9yIF9kZWNsYXJhdGlvbiBpbiBk
b21haW4udHlwZV9kZWNsYXJhdGlvbnM6CisgICAgICAgICAgICBpZiBfZGVjbGFyYXRpb24udHlw
ZS5pc19lbnVtKCk6CisgICAgICAgICAgICAgICAgZW51bV9hcmdzID0geworICAgICAgICAgICAg
ICAgICAgICAnZG9tYWluJzogZG9tYWluLmRvbWFpbl9uYW1lLAorICAgICAgICAgICAgICAgICAg
ICAnZW51bU5hbWUnOiBfZGVjbGFyYXRpb24udHlwZV9uYW1lLAorICAgICAgICAgICAgICAgICAg
ICAnZW51bU1hcCc6ICIsICIuam9pbihbJyVzOiAiJXMiJyAlIChHZW5lcmF0b3Iuc3R5bGl6ZWRf
bmFtZV9mb3JfZW51bV92YWx1ZShlbnVtX3ZhbHVlKSwgZW51bV92YWx1ZSkgZm9yIGVudW1fdmFs
dWUgaW4gX2RlY2xhcmF0aW9uLnR5cGUuZW51bV92YWx1ZXMoKV0pCisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnSW5zcGVjdG9yQmFja2VuZC5yZWdpc3Rl
ckVudW0oIiUoZG9tYWluKXMuJShlbnVtTmFtZSlzIiwgeyUoZW51bU1hcClzfSk7JyAlIGVudW1f
YXJncykKKworICAgICAgICAgICAgZGVmIGlzX2Fub255bW91c19lbnVtX21lbWJlcih0eXBlX21l
bWJlcik6CisgICAgICAgICAgICAgICAgcmV0dXJuIGlzaW5zdGFuY2UodHlwZV9tZW1iZXIudHlw
ZSwgRW51bVR5cGUpIGFuZCB0eXBlX21lbWJlci50eXBlLmlzX2Fub255bW91cworCisgICAgICAg
ICAgICBmb3IgX21lbWJlciBpbiBmaWx0ZXIoaXNfYW5vbnltb3VzX2VudW1fbWVtYmVyLCBfZGVj
bGFyYXRpb24udHlwZV9tZW1iZXJzKToKKyAgICAgICAgICAgICAgICBlbnVtX2FyZ3MgPSB7Cisg
ICAgICAgICAgICAgICAgICAgICdkb21haW4nOiBkb21haW4uZG9tYWluX25hbWUsCisgICAgICAg
ICAgICAgICAgICAgICdlbnVtTmFtZSc6ICclcyVzJyAlIChfZGVjbGFyYXRpb24udHlwZV9uYW1l
LCB1Y2ZpcnN0KF9tZW1iZXIubWVtYmVyX25hbWUpKSwKKyAgICAgICAgICAgICAgICAgICAgJ2Vu
dW1NYXAnOiAiLCAiLmpvaW4oWyclczogIiVzIicgJSAoR2VuZXJhdG9yLnN0eWxpemVkX25hbWVf
Zm9yX2VudW1fdmFsdWUoZW51bV92YWx1ZSksIGVudW1fdmFsdWUpIGZvciBlbnVtX3ZhbHVlIGlu
IF9tZW1iZXIudHlwZS5lbnVtX3ZhbHVlcygpXSkKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgbGluZXMuYXBwZW5kKCdJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRW51bSgiJShk
b21haW4pcy4lKGVudW1OYW1lKXMiLCB7JShlbnVtTWFwKXN9KTsnICUgZW51bV9hcmdzKQorCisg
ICAgICAgICMgRXZlbnRzCisgICAgICAgIGZvciBfZXZlbnQgaW4gZG9tYWluLmV2ZW50czoKKyAg
ICAgICAgICAgIGV2ZW50X2FyZ3MgPSB7CisgICAgICAgICAgICAgICAgJ2RvbWFpbic6IGRvbWFp
bi5kb21haW5fbmFtZSwKKyAgICAgICAgICAgICAgICAnZXZlbnROYW1lJzogX2V2ZW50LmV2ZW50
X25hbWUsCisgICAgICAgICAgICAgICAgJ3BhcmFtcyc6ICIsICIuam9pbihbJyIlcyInICUgX3Bh
cmFtZXRlci5wYXJhbWV0ZXJfbmFtZSBmb3IgX3BhcmFtZXRlciBpbiBfZXZlbnQuZXZlbnRfcGFy
YW1ldGVyc10pCisgICAgICAgICAgICB9CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ0luc3Bl
Y3RvckJhY2tlbmQucmVnaXN0ZXJFdmVudCgiJShkb21haW4pcy4lKGV2ZW50TmFtZSlzIiwgWyUo
cGFyYW1zKXNdKTsnICUgZXZlbnRfYXJncykKKworICAgICAgICAjIENvbW1hbmRzCisgICAgICAg
IGZvciBfY29tbWFuZCBpbiBkb21haW4uY29tbWFuZHM6CisKKyAgICAgICAgICAgIGRlZiBnZW5l
cmF0ZV9wYXJhbWV0ZXJfb2JqZWN0KHBhcmFtZXRlcik6CisgICAgICAgICAgICAgICAgb3B0aW9u
YWxfc3RyaW5nID0gInRydWUiIGlmIF9wYXJhbWV0ZXIuaXNfb3B0aW9uYWwgZWxzZSAiZmFsc2Ui
CisgICAgICAgICAgICAgICAgcGFpcnMgPSBbXQorICAgICAgICAgICAgICAgIHBhaXJzLmFwcGVu
ZCgnIm5hbWUiOiAiJXMiJyAlIF9wYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpCisgICAgICAgICAg
ICAgICAgcGFpcnMuYXBwZW5kKCcidHlwZSI6ICIlcyInICUgR2VuZXJhdG9yLmpzX25hbWVfZm9y
X3BhcmFtZXRlcl90eXBlKF9wYXJhbWV0ZXIudHlwZSkpCisgICAgICAgICAgICAgICAgcGFpcnMu
YXBwZW5kKCcib3B0aW9uYWwiOiAlcycgJSBvcHRpb25hbF9zdHJpbmcpCisgICAgICAgICAgICAg
ICAgcmV0dXJuICJ7JXN9IiAlICIsICIuam9pbihwYWlycykKKworICAgICAgICAgICAgY29tbWFu
ZF9hcmdzID0geworICAgICAgICAgICAgICAgICdkb21haW4nOiBkb21haW4uZG9tYWluX25hbWUs
CisgICAgICAgICAgICAgICAgJ2NvbW1hbmROYW1lJzogX2NvbW1hbmQuY29tbWFuZF9uYW1lLAor
ICAgICAgICAgICAgICAgICdjYWxsUGFyYW1zJzogIiwgIi5qb2luKFtnZW5lcmF0ZV9wYXJhbWV0
ZXJfb2JqZWN0KF9wYXJhbWV0ZXIpIGZvciBfcGFyYW1ldGVyIGluIF9jb21tYW5kLmNhbGxfcGFy
YW1ldGVyc10pLAorICAgICAgICAgICAgICAgICdyZXR1cm5QYXJhbXMnOiAiLCAiLmpvaW4oWyci
JXMiJyAlIF9wYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUgZm9yIF9wYXJhbWV0ZXIgaW4gX2NvbW1h
bmQucmV0dXJuX3BhcmFtZXRlcnNdKSwKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGxpbmVz
LmFwcGVuZCgnSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIiUoZG9tYWluKXMuJShj
b21tYW5kTmFtZSlzIiwgWyUoY2FsbFBhcmFtcylzXSwgWyUocmV0dXJuUGFyYW1zKXNdKTsnICUg
Y29tbWFuZF9hcmdzKQorCisgICAgICAgIHJldHVybiAiXG4iLmpvaW4obGluZXMpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5l
cmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hl
YWRlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5kMzgwYjU5MmVhOTgxZGViZmY3NTU1NjM3ZjAxMWQ3MDM5YjU2
ZWViCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weQpAQCAt
MCwwICsxLDE4MCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIENvcHlyaWdodCAoYykgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoYykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisjIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisj
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyMgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQg
cmUKK2ltcG9ydCBzdHJpbmcKKworZnJvbSBnZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvciwgdWNm
aXJzdAorZnJvbSBtb2RlbHMgaW1wb3J0IEVudW1UeXBlCitmcm9tIHN0cmluZyBpbXBvcnQgVGVt
cGxhdGUKK2Zyb20gZ2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgR2VuZXJhdG9yVGVtcGxhdGVz
IGFzIFRlbXBsYXRlcworCitsb2cgPSBsb2dnaW5nLmdldExvZ2dlcignZ2xvYmFsJykKKworCitj
bGFzcyBCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvcihHZW5lcmF0b3IpOgorICAgIGRl
ZiBfX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpOgorICAgICAgICBHZW5lcmF0
b3IuX19pbml0X18oc2VsZiwgbW9kZWwsIGlucHV0X2ZpbGVwYXRoKQorCisgICAgZGVmIG91dHB1
dF9maWxlbmFtZShzZWxmKToKKyAgICAgICAgcmV0dXJuICJJbnNwZWN0b3Ilc0JhY2tlbmREaXNw
YXRjaGVycy5oIiAlIHNlbGYubW9kZWwoKS5mcmFtZXdvcmsuc2V0dGluZygncHJlZml4JykKKwor
ICAgIGRlZiBnZW5lcmF0ZV9vdXRwdXQoc2VsZik6CisgICAgICAgIGhlYWRlcnMgPSBbCisgICAg
ICAgICAgICAnIkluc3BlY3RvciVzVHlwZUJ1aWxkZXJzLmgiJyAlIHNlbGYubW9kZWwoKS5mcmFt
ZXdvcmsuc2V0dGluZygncHJlZml4JyksCisgICAgICAgICAgICAnPGluc3BlY3Rvci9JbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlci5oPicsCisgICAgICAgICAgICAnPHd0Zi9QYXNzUmVmUHRyLmg+
JywKKyAgICAgICAgICAgICc8d3RmL3RleHQvV1RGU3RyaW5nLmg+J10KKworICAgICAgICB0eXBl
ZGVmcyA9IFsoJ1N0cmluZycsICdFcnJvclN0cmluZycpXQorCisgICAgICAgIHNlY3Rpb25zID0g
W10KKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfbGljZW5zZSgpKQorICAg
ICAgICBoZWFkZXJfYXJncyA9IHsKKyAgICAgICAgICAgICdoZWFkZXJHdWFyZFN0cmluZyc6IHJl
LnN1YignWy0uL10nLCAnXycsIHNlbGYub3V0cHV0X2ZpbGVuYW1lKCkpLAorICAgICAgICAgICAg
J2luY2x1ZGVzJzogJ1xuJy5qb2luKFsnI2luY2x1ZGUgJyArIGhlYWRlciBmb3IgaGVhZGVyIGlu
IGhlYWRlcnNdKSwKKyAgICAgICAgICAgICd0eXBlZGVmcyc6ICdcbicuam9pbihbJ3R5cGVkZWYg
JXMgJXM7JyAlIHR5cGVkZWYgZm9yIHR5cGVkZWYgaW4gdHlwZWRlZnNdKSwKKyAgICAgICAgICAg
ICdpbnB1dEZpbGVuYW1lJzogc2VsZi5faW5wdXRfZmlsZXBhdGgKKyAgICAgICAgfQorCisgICAg
ICAgIGRvbWFpbnMgPSBzZWxmLmRvbWFpbnNfdG9fZ2VuZXJhdGUoKQorICAgICAgICBkb21haW5z
ID0gZmlsdGVyKGxhbWJkYSBkb21haW46IGxlbihkb21haW4uY29tbWFuZHMpID4gMCwgZG9tYWlu
cykKKworICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVzLkNwcEhlYWRl
clByZWx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCisgICAgICAgIHNlY3Rp
b25zLmV4dGVuZChtYXAoc2VsZi5fZ2VuZXJhdGVfaGFuZGxlcl9kZWNsYXJhdGlvbnNfZm9yX2Rv
bWFpbiwgZG9tYWlucykpCisgICAgICAgIHNlY3Rpb25zLmV4dGVuZChtYXAoc2VsZi5fZ2VuZXJh
dGVfZGlzcGF0Y2hlcl9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbiwgZG9tYWlucykpCisgICAgICAg
IHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMuQ3BwSGVhZGVyUG9zdGx1ZGUpLnN1
YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCisgICAgICAgIHJldHVybiAiXG5cbiIuam9p
bihzZWN0aW9ucykKKworICAgICMgUHJpdmF0ZSBtZXRob2RzLgorCisgICAgZGVmIF9nZW5lcmF0
ZV9oYW5kbGVyX2RlY2xhcmF0aW9uc19mb3JfZG9tYWluKHNlbGYsIGRvbWFpbik6CisgICAgICAg
IGNsYXNzQ29tcG9uZW50cyA9IFsnY2xhc3MnXQorICAgICAgICBleHBvcnRNYWNybyA9IHNlbGYu
bW9kZWwoKS5mcmFtZXdvcmsuc2V0dGluZygnZXhwb3J0X21hY3JvJywgTm9uZSkKKyAgICAgICAg
aWYgZXhwb3J0TWFjcm8gaXMgbm90IE5vbmU6CisgICAgICAgICAgICBjbGFzc0NvbXBvbmVudHMu
YXBwZW5kKGV4cG9ydE1hY3JvKQorCisgICAgICAgIHVzZWRfZW51bV9uYW1lcyA9IHNldCgpCisK
KyAgICAgICAgY29tbWFuZF9kZWNsYXJhdGlvbnMgPSBbXQorICAgICAgICBmb3IgY29tbWFuZCBp
biBkb21haW4uY29tbWFuZHM6CisgICAgICAgICAgICBjb21tYW5kX2RlY2xhcmF0aW9ucy5hcHBl
bmQoc2VsZi5fZ2VuZXJhdGVfaGFuZGxlcl9kZWNsYXJhdGlvbl9mb3JfY29tbWFuZChjb21tYW5k
LCB1c2VkX2VudW1fbmFtZXMpKQorCisgICAgICAgIGhhbmRsZXJfYXJncyA9IHsKKyAgICAgICAg
ICAgICdjbGFzc0FuZEV4cG9ydE1hY3JvJzogIiAiLmpvaW4oY2xhc3NDb21wb25lbnRzKSwKKyAg
ICAgICAgICAgICdkb21haW5OYW1lJzogZG9tYWluLmRvbWFpbl9uYW1lLAorICAgICAgICAgICAg
J2NvbW1hbmREZWNsYXJhdGlvbnMnOiAiXG4iLmpvaW4oY29tbWFuZF9kZWNsYXJhdGlvbnMpCisg
ICAgICAgIH0KKworICAgICAgICByZXR1cm4gR2VuZXJhdG9yLndyYXBfd2l0aF9ndWFyZF9mb3Jf
ZG9tYWluKGRvbWFpbiwgVGVtcGxhdGUoVGVtcGxhdGVzLkJhY2tlbmREaXNwYXRjaGVySGVhZGVy
RG9tYWluSGFuZGxlckRlY2xhcmF0aW9uKS5zdWJzdGl0dXRlKE5vbmUsICoqaGFuZGxlcl9hcmdz
KSkKKworICAgIGRlZiBfZ2VuZXJhdGVfYW5vbnltb3VzX2VudW1fZm9yX3BhcmFtZXRlcihzZWxm
LCBwYXJhbWV0ZXIsIGNvbW1hbmQpOgorICAgICAgICBlbnVtX2FyZ3MgPSB7CisgICAgICAgICAg
ICAncGFyYW1ldGVyTmFtZSc6IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwKKyAgICAgICAgICAg
ICdjb21tYW5kTmFtZSc6IGNvbW1hbmQuY29tbWFuZF9uYW1lCisgICAgICAgIH0KKworICAgICAg
ICBsaW5lcyA9IFtdCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIC8vIE5hbWVkIGFmdGVyIHBh
cmFtZXRlciBcJyUocGFyYW1ldGVyTmFtZSlzXCcgd2hpbGUgZ2VuZXJhdGluZyBjb21tYW5kL2V2
ZW50ICUoY29tbWFuZE5hbWUpcy4nICUgZW51bV9hcmdzKQorICAgICAgICBsaW5lcy5hcHBlbmQo
JyAgICBlbnVtIGNsYXNzICVzIHsnICUgdWNmaXJzdChwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUp
KQorICAgICAgICBmb3IgZW51bV92YWx1ZSBpbiBwYXJhbWV0ZXIudHlwZS5lbnVtX3ZhbHVlcygp
OgorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgICVzID0gJWQsJyAlIChHZW5lcmF0
b3Iuc3R5bGl6ZWRfbmFtZV9mb3JfZW51bV92YWx1ZShlbnVtX3ZhbHVlKSwgc2VsZi5lbmNvZGlu
Z19mb3JfZW51bV92YWx1ZShlbnVtX3ZhbHVlKSkpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAg
IH07IC8vIGVudW0gY2xhc3MgJXMnICUgdWNmaXJzdChwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUp
KQorICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQorCisgICAgZGVmIF9nZW5lcmF0ZV9o
YW5kbGVyX2RlY2xhcmF0aW9uX2Zvcl9jb21tYW5kKHNlbGYsIGNvbW1hbmQsIHVzZWRfZW51bV9u
YW1lcyk6CisgICAgICAgIGlmIGNvbW1hbmQuaXNfYXN5bmM6CisgICAgICAgICAgICByZXR1cm4g
c2VsZi5fZ2VuZXJhdGVfYXN5bmNfaGFuZGxlcl9kZWNsYXJhdGlvbl9mb3JfY29tbWFuZChjb21t
YW5kKQorCisgICAgICAgIGxpbmVzID0gW10KKyAgICAgICAgcGFyYW1ldGVycyA9IFsnRXJyb3JT
dHJpbmcqJ10KKyAgICAgICAgZm9yIF9wYXJhbWV0ZXIgaW4gY29tbWFuZC5jYWxsX3BhcmFtZXRl
cnM6CisgICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZCgiJXMgaW5fJXMiICUgKEdlbmVyYXRv
ci50eXBlX3N0cmluZ19mb3JfdW5jaGVja2VkX2Zvcm1hbF9pbl9wYXJhbWV0ZXIoX3BhcmFtZXRl
ciksIF9wYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpKQorCisgICAgICAgICAgICBpZiBpc2luc3Rh
bmNlKF9wYXJhbWV0ZXIudHlwZSwgRW51bVR5cGUpIGFuZCBfcGFyYW1ldGVyLnBhcmFtZXRlcl9u
YW1lIG5vdCBpbiB1c2VkX2VudW1fbmFtZXM6CisgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5k
KHNlbGYuX2dlbmVyYXRlX2Fub255bW91c19lbnVtX2Zvcl9wYXJhbWV0ZXIoX3BhcmFtZXRlciwg
Y29tbWFuZCkpCisgICAgICAgICAgICAgICAgdXNlZF9lbnVtX25hbWVzLmFkZChfcGFyYW1ldGVy
LnBhcmFtZXRlcl9uYW1lKQorCisgICAgICAgIGZvciBfcGFyYW1ldGVyIGluIGNvbW1hbmQucmV0
dXJuX3BhcmFtZXRlcnM6CisgICAgICAgICAgICBwYXJhbWV0ZXJfbmFtZSA9ICdvdXRfJyArIF9w
YXJhbWV0ZXIucGFyYW1ldGVyX25hbWUKKyAgICAgICAgICAgIGlmIF9wYXJhbWV0ZXIuaXNfb3B0
aW9uYWw6CisgICAgICAgICAgICAgICAgcGFyYW1ldGVyX25hbWUgPSAnb3B0XycgKyBwYXJhbWV0
ZXJfbmFtZQorICAgICAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoIiVzICVzIiAlIChHZW5lcmF0
b3IudHlwZV9zdHJpbmdfZm9yX2Zvcm1hbF9vdXRfcGFyYW1ldGVyKF9wYXJhbWV0ZXIpLCBwYXJh
bWV0ZXJfbmFtZSkpCisKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoX3BhcmFtZXRlci50eXBl
LCBFbnVtVHlwZSkgYW5kIF9wYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUgbm90IGluIHVzZWRfZW51
bV9uYW1lczoKKyAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYW5v
bnltb3VzX2VudW1fZm9yX3BhcmFtZXRlcihfcGFyYW1ldGVyLCBjb21tYW5kKSkKKyAgICAgICAg
ICAgICAgICB1c2VkX2VudW1fbmFtZXMuYWRkKF9wYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpCisK
KyAgICAgICAgY29tbWFuZF9hcmdzID0geworICAgICAgICAgICAgJ2NvbW1hbmROYW1lJzogY29t
bWFuZC5jb21tYW5kX25hbWUsCisgICAgICAgICAgICAncGFyYW1ldGVycyc6ICIsICIuam9pbihw
YXJhbWV0ZXJzKQorICAgICAgICB9CisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIHZpcnR1YWwg
dm9pZCAlKGNvbW1hbmROYW1lKXMoJShwYXJhbWV0ZXJzKXMpID0gMDsnICUgY29tbWFuZF9hcmdz
KQorICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQorCisgICAgZGVmIF9nZW5lcmF0ZV9h
c3luY19oYW5kbGVyX2RlY2xhcmF0aW9uX2Zvcl9jb21tYW5kKHNlbGYsIGNvbW1hbmQpOgorICAg
ICAgICBjYWxsYmFja05hbWUgPSAiJXNDYWxsYmFjayIgJSB1Y2ZpcnN0KGNvbW1hbmQuY29tbWFu
ZF9uYW1lKQorCisgICAgICAgIGluX3BhcmFtZXRlcnMgPSBbJ0Vycm9yU3RyaW5nKiddCisgICAg
ICAgIGZvciBfcGFyYW1ldGVyIGluIGNvbW1hbmQuY2FsbF9wYXJhbWV0ZXJzOgorICAgICAgICAg
ICAgaW5fcGFyYW1ldGVycy5hcHBlbmQoIiVzIGluXyVzIiAlIChHZW5lcmF0b3IudHlwZV9zdHJp
bmdfZm9yX3VuY2hlY2tlZF9mb3JtYWxfaW5fcGFyYW1ldGVyKF9wYXJhbWV0ZXIpLCBfcGFyYW1l
dGVyLnBhcmFtZXRlcl9uYW1lKSkKKyAgICAgICAgaW5fcGFyYW1ldGVycy5hcHBlbmQoIlBhc3NS
ZWZQdHI8JXM+IGNhbGxiYWNrIiAlIGNhbGxiYWNrTmFtZSkKKworICAgICAgICBvdXRfcGFyYW1l
dGVycyA9IFtdCisgICAgICAgIGZvciBfcGFyYW1ldGVyIGluIGNvbW1hbmQucmV0dXJuX3BhcmFt
ZXRlcnM6CisgICAgICAgICAgICBvdXRfcGFyYW1ldGVycy5hcHBlbmQoIiVzICVzIiAlIChHZW5l
cmF0b3IudHlwZV9zdHJpbmdfZm9yX2Zvcm1hbF9hc3luY19wYXJhbWV0ZXIoX3BhcmFtZXRlciks
IF9wYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpKQorCisgICAgICAgIGNvbW1hbmRfYXJncyA9IHsK
KyAgICAgICAgICAgICdjYWxsYmFja05hbWUnOiBjYWxsYmFja05hbWUsCisgICAgICAgICAgICAn
Y29tbWFuZE5hbWUnOiBjb21tYW5kLmNvbW1hbmRfbmFtZSwKKyAgICAgICAgICAgICdpblBhcmFt
ZXRlcnMnOiAiLCAiLmpvaW4oaW5fcGFyYW1ldGVycyksCisgICAgICAgICAgICAnb3V0UGFyYW1l
dGVycyc6ICIsICIuam9pbihvdXRfcGFyYW1ldGVycyksCisgICAgICAgIH0KKworICAgICAgICBy
ZXR1cm4gVGVtcGxhdGUoVGVtcGxhdGVzLkJhY2tlbmREaXNwYXRjaGVySGVhZGVyQXN5bmNDb21t
YW5kRGVjbGFyYXRpb24pLnN1YnN0aXR1dGUoTm9uZSwgKipjb21tYW5kX2FyZ3MpCisKKyAgICBk
ZWYgX2dlbmVyYXRlX2Rpc3BhdGNoZXJfZGVjbGFyYXRpb25zX2Zvcl9kb21haW4oc2VsZiwgZG9t
YWluKToKKyAgICAgICAgY2xhc3NDb21wb25lbnRzID0gWydjbGFzcyddCisgICAgICAgIGV4cG9y
dE1hY3JvID0gc2VsZi5tb2RlbCgpLmZyYW1ld29yay5zZXR0aW5nKCdleHBvcnRfbWFjcm8nLCBO
b25lKQorICAgICAgICBpZiBleHBvcnRNYWNybyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGNs
YXNzQ29tcG9uZW50cy5hcHBlbmQoZXhwb3J0TWFjcm8pCisKKyAgICAgICAgZGVjbGFyYXRpb25z
ID0gW10KKyAgICAgICAgaWYgbGVuKGRvbWFpbi5jb21tYW5kcykgPiAwOgorICAgICAgICAgICAg
ZGVjbGFyYXRpb25zLmFwcGVuZCgncHJpdmF0ZTonKQorICAgICAgICBkZWNsYXJhdGlvbnMuZXh0
ZW5kKG1hcChzZWxmLl9nZW5lcmF0ZV9kaXNwYXRjaGVyX2RlY2xhcmF0aW9uX2Zvcl9jb21tYW5k
LCBkb21haW4uY29tbWFuZHMpKQorCisgICAgICAgIGhhbmRsZXJfYXJncyA9IHsKKyAgICAgICAg
ICAgICdjbGFzc0FuZEV4cG9ydE1hY3JvJzogIiAiLmpvaW4oY2xhc3NDb21wb25lbnRzKSwKKyAg
ICAgICAgICAgICdkb21haW5OYW1lJzogZG9tYWluLmRvbWFpbl9uYW1lLAorICAgICAgICAgICAg
J2NvbW1hbmREZWNsYXJhdGlvbnMnOiAiXG4iLmpvaW4oZGVjbGFyYXRpb25zKQorICAgICAgICB9
CisKKyAgICAgICAgcmV0dXJuIEdlbmVyYXRvci53cmFwX3dpdGhfZ3VhcmRfZm9yX2RvbWFpbihk
b21haW4sIFRlbXBsYXRlKFRlbXBsYXRlcy5CYWNrZW5kRGlzcGF0Y2hlckhlYWRlckRvbWFpbkRp
c3BhdGNoZXJEZWNsYXJhdGlvbikuc3Vic3RpdHV0ZShOb25lLCAqKmhhbmRsZXJfYXJncykpCisK
KyAgICBkZWYgX2dlbmVyYXRlX2Rpc3BhdGNoZXJfZGVjbGFyYXRpb25fZm9yX2NvbW1hbmQoc2Vs
ZiwgY29tbWFuZCk6CisgICAgICAgIHJldHVybiAiICAgIHZvaWQgJXMobG9uZyBjYWxsSWQsIGNv
bnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsiICUgY29tbWFuZC5jb21t
YW5kX25hbWUKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5w
eSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVy
YXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43OWQ3
ZjFmNjM4OGYzZTJjYjgyOWIyZDBkZGMyMTA1NDBjMzIwZjU1Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVf
YmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5CkBAIC0wLDAgKzEsMjcwIEBACisj
IS91c3IvYmluL2VudiBweXRob24KKyMgQ29weXJpZ2h0IChjKSAyMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChjKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworIyBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisKKworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCByZQoraW1wb3J0IHN0cmlu
ZworCitmcm9tIGdlbmVyYXRvciBpbXBvcnQgR2VuZXJhdG9yLCB1Y2ZpcnN0Citmcm9tIHN0cmlu
ZyBpbXBvcnQgVGVtcGxhdGUKK2Zyb20gZ2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgR2VuZXJh
dG9yVGVtcGxhdGVzIGFzIFRlbXBsYXRlcworZnJvbSBtb2RlbHMgaW1wb3J0IE9iamVjdFR5cGUs
IEFycmF5VHlwZQorCisjIFVzZSBhIGdsb2JhbCBsb2dnZXIsIHdoaWNoIG5vcm1hbGx5IG9ubHkg
bG9ncyBlcnJvcnMuCitsb2cgPSBsb2dnaW5nLmdldExvZ2dlcignZ2xvYmFsJykKKworCitjbGFz
cyBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKEdlbmVyYXRvcik6Cisg
ICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0aCk6CisgICAgICAgIEdl
bmVyYXRvci5fX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpCisKKyAgICBkZWYg
b3V0cHV0X2ZpbGVuYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gIkluc3BlY3RvciVzQmFja2Vu
ZERpc3BhdGNoZXJzLmNwcCIgJSBzZWxmLm1vZGVsKCkuZnJhbWV3b3JrLnNldHRpbmcoJ3ByZWZp
eCcpCisKKyAgICBkZWYgZ2VuZXJhdGVfb3V0cHV0KHNlbGYpOgorICAgICAgICBzZWNvbmRhcnlf
aGVhZGVycyA9IFsKKyAgICAgICAgICAgICc8aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2hh
bm5lbC5oPicsCisgICAgICAgICAgICAnPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4nLAor
ICAgICAgICAgICAgJzx3dGYvdGV4dC9DU3RyaW5nLmg+J10KKworICAgICAgICBzZWN0aW9ucyA9
IFtdCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLmdlbmVyYXRlX2xpY2Vuc2UoKSkKKyAg
ICAgICAgaGVhZGVyX2FyZ3MgPSB7CisgICAgICAgICAgICAncHJpbWFyeUluY2x1ZGUnOiAnIklu
c3BlY3RvciVzQmFja2VuZERpc3BhdGNoZXJzLmgiJyAlIHNlbGYubW9kZWwoKS5mcmFtZXdvcmsu
c2V0dGluZygncHJlZml4JyksCisgICAgICAgICAgICAnc2Vjb25kYXJ5SW5jbHVkZXMnOiAiXG4i
LmpvaW4oWycjaW5jbHVkZSAlcycgJSBoZWFkZXIgZm9yIGhlYWRlciBpbiBzZWNvbmRhcnlfaGVh
ZGVyc10pLAorICAgICAgICAgICAgJ2lucHV0RmlsZW5hbWUnOiBzZWxmLl9pbnB1dF9maWxlcGF0
aAorICAgICAgICB9CisKKyAgICAgICAgZG9tYWlucyA9IHNlbGYuZG9tYWluc190b19nZW5lcmF0
ZSgpCisgICAgICAgIGRvbWFpbnMgPSBmaWx0ZXIobGFtYmRhIGRvbWFpbjogbGVuKGRvbWFpbi5j
b21tYW5kcykgPiAwLCBkb21haW5zKQorCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0
ZShUZW1wbGF0ZXMuQ3BwSW1wbGVtZW50YXRpb25QcmVsdWRlKS5zdWJzdGl0dXRlKE5vbmUsICoq
aGVhZGVyX2FyZ3MpKQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoIlxuIi5qb2luKG1hcChzZWxm
Ll9nZW5lcmF0ZV9oYW5kbGVyX2NsYXNzX2Rlc3RydWN0b3JfZm9yX2RvbWFpbiwgZG9tYWlucykp
KQorICAgICAgICBzZWN0aW9ucy5leHRlbmQobWFwKHNlbGYuX2dlbmVyYXRlX2Rpc3BhdGNoZXJf
aW1wbGVtZW50YXRpb25zX2Zvcl9kb21haW4sIGRvbWFpbnMpKQorICAgICAgICBzZWN0aW9ucy5h
cHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVzLkNwcEltcGxlbWVudGF0aW9uUG9zdGx1ZGUpLnN1YnN0
aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCisgICAgICAgIHJldHVybiAiXG5cbiIuam9pbihz
ZWN0aW9ucykKKworICAgICMgUHJpdmF0ZSBtZXRob2RzLgorCisgICAgZGVmIF9nZW5lcmF0ZV9o
YW5kbGVyX2NsYXNzX2Rlc3RydWN0b3JfZm9yX2RvbWFpbihzZWxmLCBkb21haW4pOgorICAgICAg
ICBkZXN0cnVjdG9yX2FyZ3MgPSB7CisgICAgICAgICAgICAnZG9tYWluTmFtZSc6IGRvbWFpbi5k
b21haW5fbmFtZQorICAgICAgICB9CisgICAgICAgIGRlc3RydWN0b3IgPSAnSW5zcGVjdG9yJShk
b21haW5OYW1lKXNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6On5JbnNwZWN0b3IlKGRvbWFpbk5h
bWUpc0JhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpIHsgfScgJSBkZXN0cnVjdG9yX2FyZ3MKKyAg
ICAgICAgcmV0dXJuIEdlbmVyYXRvci53cmFwX3dpdGhfZ3VhcmRfZm9yX2RvbWFpbihkb21haW4s
IGRlc3RydWN0b3IpCisKKyAgICBkZWYgX2dlbmVyYXRlX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRp
b25zX2Zvcl9kb21haW4oc2VsZiwgZG9tYWluKToKKyAgICAgICAgaW1wbGVtZW50YXRpb25zID0g
W10KKworICAgICAgICBjb25zdHJ1Y3Rvcl9hcmdzID0geworICAgICAgICAgICAgJ2RvbWFpbk5h
bWUnOiBkb21haW4uZG9tYWluX25hbWUsCisgICAgICAgIH0KKyAgICAgICAgaW1wbGVtZW50YXRp
b25zLmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMuQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRh
dGlvbkRvbWFpbkNvbnN0cnVjdG9yKS5zdWJzdGl0dXRlKE5vbmUsICoqY29uc3RydWN0b3JfYXJn
cykpCisKKyAgICAgICAgaWYgbGVuKGRvbWFpbi5jb21tYW5kcykgPD0gNToKKyAgICAgICAgICAg
IGltcGxlbWVudGF0aW9ucy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfc21hbGxfZGlzcGF0Y2hlcl9z
d2l0Y2hfaW1wbGVtZW50YXRpb25fZm9yX2RvbWFpbihkb21haW4pKQorICAgICAgICBlbHNlOgor
ICAgICAgICAgICAgaW1wbGVtZW50YXRpb25zLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9sYXJnZV9k
aXNwYXRjaGVyX3N3aXRjaF9pbXBsZW1lbnRhdGlvbl9mb3JfZG9tYWluKGRvbWFpbikpCisKKyAg
ICAgICAgZm9yIF9jb21tYW5kIGluIGRvbWFpbi5jb21tYW5kczoKKyAgICAgICAgICAgIGlmIF9j
b21tYW5kLmlzX2FzeW5jOgorICAgICAgICAgICAgICAgIGltcGxlbWVudGF0aW9ucy5hcHBlbmQo
c2VsZi5fZ2VuZXJhdGVfYXN5bmNfZGlzcGF0Y2hlcl9jbGFzc19mb3JfZG9tYWluKF9jb21tYW5k
LCBkb21haW4pKQorICAgICAgICAgICAgaW1wbGVtZW50YXRpb25zLmFwcGVuZChzZWxmLl9nZW5l
cmF0ZV9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uX2Zvcl9jb21tYW5kKF9jb21tYW5kLCBkb21h
aW4pKQorCisgICAgICAgIHJldHVybiBHZW5lcmF0b3Iud3JhcF93aXRoX2d1YXJkX2Zvcl9kb21h
aW4oZG9tYWluLCAiXG5cbiIuam9pbihpbXBsZW1lbnRhdGlvbnMpKQorCisgICAgZGVmIF9nZW5l
cmF0ZV9zbWFsbF9kaXNwYXRjaGVyX3N3aXRjaF9pbXBsZW1lbnRhdGlvbl9mb3JfZG9tYWluKHNl
bGYsIGRvbWFpbik6CisgICAgICAgIGNhc2VzID0gW10KKyAgICAgICAgY2FzZXMuYXBwZW5kKCcg
ICAgaWYgKG1ldGhvZCA9PSAiJXMiKScgJSBkb21haW4uY29tbWFuZHNbMF0uY29tbWFuZF9uYW1l
KQorICAgICAgICBjYXNlcy5hcHBlbmQoJyAgICAgICAgJXMoY2FsbElkLCAqbWVzc2FnZS5nZXQo
KSk7JyAlIGRvbWFpbi5jb21tYW5kc1swXS5jb21tYW5kX25hbWUpCisgICAgICAgIGZvciBfY29t
bWFuZCBpbiBkb21haW4uY29tbWFuZHNbMTpdOgorICAgICAgICAgICAgY2FzZXMuYXBwZW5kKCcg
ICAgZWxzZSBpZiAobWV0aG9kID09ICIlcyIpJyAlIF9jb21tYW5kLmNvbW1hbmRfbmFtZSkKKyAg
ICAgICAgICAgIGNhc2VzLmFwcGVuZCgnICAgICAgICAlcyhjYWxsSWQsICptZXNzYWdlLmdldCgp
KTsnICUgX2NvbW1hbmQuY29tbWFuZF9uYW1lKQorCisgICAgICAgIHN3aXRjaF9hcmdzID0gewor
ICAgICAgICAgICAgJ2RvbWFpbk5hbWUnOiBkb21haW4uZG9tYWluX25hbWUsCisgICAgICAgICAg
ICAnZGlzcGF0Y2hDYXNlcyc6ICJcbiIuam9pbihjYXNlcykKKyAgICAgICAgfQorCisgICAgICAg
IHJldHVybiBUZW1wbGF0ZShUZW1wbGF0ZXMuQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlv
blNtYWxsU3dpdGNoKS5zdWJzdGl0dXRlKE5vbmUsICoqc3dpdGNoX2FyZ3MpCisKKyAgICBkZWYg
X2dlbmVyYXRlX2xhcmdlX2Rpc3BhdGNoZXJfc3dpdGNoX2ltcGxlbWVudGF0aW9uX2Zvcl9kb21h
aW4oc2VsZiwgZG9tYWluKToKKyAgICAgICAgY2FzZXMgPSBbXQorICAgICAgICBmb3IgX2NvbW1h
bmQgaW4gZG9tYWluLmNvbW1hbmRzOgorICAgICAgICAgICAgYXJncyA9IHsKKyAgICAgICAgICAg
ICAgICAnZG9tYWluTmFtZSc6IGRvbWFpbi5kb21haW5fbmFtZSwKKyAgICAgICAgICAgICAgICAn
Y29tbWFuZE5hbWUnOiBfY29tbWFuZC5jb21tYW5kX25hbWUKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGNhc2VzLmFwcGVuZCgnICAgICAgICAgICAgeyAiJShjb21tYW5kTmFtZSlzIiwgJklu
c3BlY3RvciUoZG9tYWluTmFtZSlzQmFja2VuZERpc3BhdGNoZXI6OiUoY29tbWFuZE5hbWUpcyB9
LCcgJSBhcmdzKQorCisgICAgICAgIHN3aXRjaF9hcmdzID0geworICAgICAgICAgICAgJ2RvbWFp
bk5hbWUnOiBkb21haW4uZG9tYWluX25hbWUsCisgICAgICAgICAgICAnZGlzcGF0Y2hDYXNlcyc6
ICJcbiIuam9pbihjYXNlcykKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBUZW1wbGF0ZShU
ZW1wbGF0ZXMuQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkxhcmdlU3dpdGNoKS5zdWJz
dGl0dXRlKE5vbmUsICoqc3dpdGNoX2FyZ3MpCisKKyAgICBkZWYgX2dlbmVyYXRlX2FzeW5jX2Rp
c3BhdGNoZXJfY2xhc3NfZm9yX2RvbWFpbihzZWxmLCBjb21tYW5kLCBkb21haW4pOgorICAgICAg
ICBvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRzID0gW10KKyAgICAgICAgZm9ybWFsX3BhcmFtZXRl
cnMgPSBbXQorCisgICAgICAgIGZvciBfcGFyYW1ldGVyIGluIGNvbW1hbmQucmV0dXJuX3BhcmFt
ZXRlcnM6CisgICAgICAgICAgICBwYXJhbV9hcmdzID0geworICAgICAgICAgICAgICAgICdmcmFt
ZXdvcmtQcmVmaXgnOiBzZWxmLm1vZGVsKCkuZnJhbWV3b3JrLnNldHRpbmcoJ3ByZWZpeCcpLAor
ICAgICAgICAgICAgICAgICdrZXllZFNldE1ldGhvZCc6IEdlbmVyYXRvci5rZXllZF9zZXRfbWV0
aG9kX2Zvcl90eXBlKF9wYXJhbWV0ZXIudHlwZSksCisgICAgICAgICAgICAgICAgJ3BhcmFtZXRl
ck5hbWUnOiBfcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lLAorICAgICAgICAgICAgICAgICdwYXJh
bWV0ZXJUeXBlJzogR2VuZXJhdG9yLnR5cGVfc3RyaW5nX2Zvcl9zdGFja19pbl9wYXJhbWV0ZXIo
X3BhcmFtZXRlciksCisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZvcm1hbF9wYXJhbWV0
ZXJzLmFwcGVuZCgnJXMgJXMnICUgKEdlbmVyYXRvci50eXBlX3N0cmluZ19mb3JfZm9ybWFsX2Fz
eW5jX3BhcmFtZXRlcihfcGFyYW1ldGVyKSwgX3BhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkpCisK
KyAgICAgICAgICAgIGlmIF9wYXJhbWV0ZXIuaXNfb3B0aW9uYWw6CisgICAgICAgICAgICAgICAg
aWYgR2VuZXJhdG9yLnNob3VsZF91c2Vfd3JhcHBlcl9mb3JfcmV0dXJuX3R5cGUoX3BhcmFtZXRl
ci50eXBlKToKKyAgICAgICAgICAgICAgICAgICAgb3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cy5h
cHBlbmQoJyAgICBpZiAoJShwYXJhbWV0ZXJOYW1lKXMuaXNBc3NpZ25lZCgpKScgJSBwYXJhbV9h
cmdzKQorICAgICAgICAgICAgICAgICAgICBvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRzLmFwcGVu
ZCgnICAgICAgICBqc29uTWVzc2FnZS0+JShrZXllZFNldE1ldGhvZClzKEFTQ0lJTGl0ZXJhbCgi
JShwYXJhbWV0ZXJOYW1lKXMiKSwgJShwYXJhbWV0ZXJOYW1lKXMuZ2V0VmFsdWUoKSk7JyAlIHBh
cmFtX2FyZ3MpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgb3V0
X3BhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICBpZiAoJShwYXJhbWV0ZXJOYW1lKXMp
JyAlIHBhcmFtX2FyZ3MpCisgICAgICAgICAgICAgICAgICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdu
bWVudHMuYXBwZW5kKCcgICAgICAgIGpzb25NZXNzYWdlLT4lKGtleWVkU2V0TWV0aG9kKXMoQVND
SUlMaXRlcmFsKCIlKHBhcmFtZXRlck5hbWUpcyIpLCAlKHBhcmFtZXRlck5hbWUpcyk7JyAlIHBh
cmFtX2FyZ3MpCisgICAgICAgICAgICBlbGlmIF9wYXJhbWV0ZXIudHlwZS5pc19lbnVtKCk6Cisg
ICAgICAgICAgICAgICAgb3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICBqc29u
TWVzc2FnZS0+JShrZXllZFNldE1ldGhvZClzKEFTQ0lJTGl0ZXJhbCgiJShwYXJhbWV0ZXJOYW1l
KXMiKSwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Z2V0JShmcmFtZXdvcmtQcmVmaXgpc0VudW1D
b25zdGFudFZhbHVlKCUocGFyYW1ldGVyTmFtZSlzKSk7JyAlIHBhcmFtX2FyZ3MpCisgICAgICAg
ICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBw
ZW5kKCcgICAganNvbk1lc3NhZ2UtPiUoa2V5ZWRTZXRNZXRob2QpcyhBU0NJSUxpdGVyYWwoIiUo
cGFyYW1ldGVyTmFtZSlzIiksICUocGFyYW1ldGVyTmFtZSlzKTsnICUgcGFyYW1fYXJncykKKwor
ICAgICAgICBhc3luY19hcmdzID0geworICAgICAgICAgICAgJ2RvbWFpbk5hbWUnOiBkb21haW4u
ZG9tYWluX25hbWUsCisgICAgICAgICAgICAnY2FsbGJhY2tOYW1lJzogdWNmaXJzdChjb21tYW5k
LmNvbW1hbmRfbmFtZSkgKyAnQ2FsbGJhY2snLAorICAgICAgICAgICAgJ2Zvcm1hbFBhcmFtZXRl
cnMnOiAiLCAiLmpvaW4oZm9ybWFsX3BhcmFtZXRlcnMpLAorICAgICAgICAgICAgJ291dFBhcmFt
ZXRlckFzc2lnbm1lbnRzJzogIlxuIi5qb2luKG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMpCisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFRlbXBsYXRlKFRlbXBsYXRlcy5CYWNrZW5kRGlzcGF0
Y2hlckltcGxlbWVudGF0aW9uQXN5bmNDb21tYW5kKS5zdWJzdGl0dXRlKE5vbmUsICoqYXN5bmNf
YXJncykKKworICAgIGRlZiBfZ2VuZXJhdGVfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbl9mb3Jf
Y29tbWFuZChzZWxmLCBjb21tYW5kLCBkb21haW4pOgorICAgICAgICBsaW5lcyA9IFtdCisgICAg
ICAgIGluX3BhcmFtZXRlcl9kZWNsYXJhdGlvbnMgPSBbXQorICAgICAgICBvdXRfcGFyYW1ldGVy
X2RlY2xhcmF0aW9ucyA9IFtdCisgICAgICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMgPSBb
XQorICAgICAgICBtZXRob2RfcGFyYW1ldGVycyA9IFsnJmVycm9yJ10KKworICAgICAgICBmb3Ig
X3BhcmFtZXRlciBpbiBjb21tYW5kLmNhbGxfcGFyYW1ldGVyczoKKyAgICAgICAgICAgIG91dF9z
dWNjZXNzX2FyZ3VtZW50ID0gJ251bGxwdHInCisgICAgICAgICAgICBpZiBfcGFyYW1ldGVyLmlz
X29wdGlvbmFsOgorICAgICAgICAgICAgICAgIG91dF9zdWNjZXNzX2FyZ3VtZW50ID0gJyYlc192
YWx1ZUZvdW5kJyAlIF9wYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUKKyAgICAgICAgICAgICAgICBp
bl9wYXJhbWV0ZXJfZGVjbGFyYXRpb25zLmFwcGVuZCgnICAgIGJvb2wgJXNfdmFsdWVGb3VuZCA9
IGZhbHNlOycgJSBfcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKQorCisgICAgICAgICAgICBwYXJh
bV9hcmdzID0geworICAgICAgICAgICAgICAgICdwYXJhbWV0ZXJUeXBlJzogR2VuZXJhdG9yLnR5
cGVfc3RyaW5nX2Zvcl9zdGFja19pbl9wYXJhbWV0ZXIoX3BhcmFtZXRlciksCisgICAgICAgICAg
ICAgICAgJ3BhcmFtZXRlck5hbWUnOiBfcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lLAorICAgICAg
ICAgICAgICAgICdrZXllZEdldE1ldGhvZCc6IEdlbmVyYXRvci5rZXllZF9nZXRfbWV0aG9kX2Zv
cl90eXBlKF9wYXJhbWV0ZXIudHlwZSksCisgICAgICAgICAgICAgICAgJ3N1Y2Nlc3NPdXRQYXJh
bSc6IG91dF9zdWNjZXNzX2FyZ3VtZW50CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlu
X3BhcmFtZXRlcl9kZWNsYXJhdGlvbnMuYXBwZW5kKCcgICAgJShwYXJhbWV0ZXJUeXBlKXMgaW5f
JShwYXJhbWV0ZXJOYW1lKXMgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6JShrZXllZEdl
dE1ldGhvZClzKHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCIlKHBhcmFtZXRlck5h
bWUpcyIpLCAlKHN1Y2Nlc3NPdXRQYXJhbSlzLCBwcm90b2NvbEVycm9yc1B0cik7JyAlIHBhcmFt
X2FyZ3MpCisKKyAgICAgICAgICAgIGlmIF9wYXJhbWV0ZXIuaXNfb3B0aW9uYWw6CisgICAgICAg
ICAgICAgICAgbWV0aG9kX3BhcmFtZXRlcnMuYXBwZW5kKCclKHBhcmFtZXRlck5hbWUpc192YWx1
ZUZvdW5kID8gJmluXyUocGFyYW1ldGVyTmFtZSlzIDogbnVsbHB0cicgJSBwYXJhbV9hcmdzKQor
ICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBtZXRob2RfcGFyYW1ldGVycy5hcHBl
bmQoJ2luXycgKyBfcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKQorCisgICAgICAgIGlmIGNvbW1h
bmQuaXNfYXN5bmM6CisgICAgICAgICAgICBhc3luY19hcmdzID0geworICAgICAgICAgICAgICAg
ICdkb21haW5OYW1lJzogZG9tYWluLmRvbWFpbl9uYW1lLAorICAgICAgICAgICAgICAgICdjYWxs
YmFja05hbWUnOiB1Y2ZpcnN0KGNvbW1hbmQuY29tbWFuZF9uYW1lKSArICdDYWxsYmFjaycKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgb3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBl
bmQoJyAgICAgICAgY2FsbGJhY2stPmRpc2FibGUoKTsnKQorICAgICAgICAgICAgb3V0X3BhcmFt
ZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVw
b3J0UHJvdG9jb2xFcnJvcigmY2FsbElkLCBJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOycpCisgICAgICAgICAgICBvdXRfcGFyYW1ldGVy
X2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgICAgICByZXR1cm47JykKKyAgICAgICAgICAgIG1ldGhv
ZF9wYXJhbWV0ZXJzLmFwcGVuZCgnY2FsbGJhY2snKQorCisgICAgICAgIGVsc2U6CisgICAgICAg
ICAgICBmb3IgX3BhcmFtZXRlciBpbiBjb21tYW5kLnJldHVybl9wYXJhbWV0ZXJzOgorICAgICAg
ICAgICAgICAgIHBhcmFtX2FyZ3MgPSB7CisgICAgICAgICAgICAgICAgICAgICdwYXJhbWV0ZXJU
eXBlJzogR2VuZXJhdG9yLnR5cGVfc3RyaW5nX2Zvcl9zdGFja19vdXRfcGFyYW1ldGVyKF9wYXJh
bWV0ZXIpLAorICAgICAgICAgICAgICAgICAgICAncGFyYW1ldGVyTmFtZSc6IF9wYXJhbWV0ZXIu
cGFyYW1ldGVyX25hbWUsCisgICAgICAgICAgICAgICAgICAgICdrZXllZFNldE1ldGhvZCc6IEdl
bmVyYXRvci5rZXllZF9zZXRfbWV0aG9kX2Zvcl90eXBlKF9wYXJhbWV0ZXIudHlwZSksCisgICAg
ICAgICAgICAgICAgICAgICdmcmFtZXdvcmtQcmVmaXgnOiBzZWxmLm1vZGVsKCkuZnJhbWV3b3Jr
LnNldHRpbmcoJ3ByZWZpeCcpCisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
b3V0X3BhcmFtZXRlcl9kZWNsYXJhdGlvbnMuYXBwZW5kKCcgICAgJShwYXJhbWV0ZXJUeXBlKXMg
b3V0XyUocGFyYW1ldGVyTmFtZSlzOycgJSBwYXJhbV9hcmdzKQorICAgICAgICAgICAgICAgIGlm
IF9wYXJhbWV0ZXIuaXNfb3B0aW9uYWw6CisgICAgICAgICAgICAgICAgICAgIGlmIEdlbmVyYXRv
ci5zaG91bGRfdXNlX3dyYXBwZXJfZm9yX3JldHVybl90eXBlKF9wYXJhbWV0ZXIudHlwZSk6Cisg
ICAgICAgICAgICAgICAgICAgICAgICBvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRzLmFwcGVuZCgn
ICAgICAgICBpZiAob3V0XyUocGFyYW1ldGVyTmFtZSlzLmlzQXNzaWduZWQoKSknICUgcGFyYW1f
YXJncykKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMu
YXBwZW5kKCcgICAgICAgICAgICByZXN1bHQtPiUoa2V5ZWRTZXRNZXRob2QpcyhBU0NJSUxpdGVy
YWwoIiUocGFyYW1ldGVyTmFtZSlzIiksIG91dF8lKHBhcmFtZXRlck5hbWUpcy5nZXRWYWx1ZSgp
KTsnICUgcGFyYW1fYXJncykKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAgICAgIGlm
IChvdXRfJShwYXJhbWV0ZXJOYW1lKXMpJyAlIHBhcmFtX2FyZ3MpCisgICAgICAgICAgICAgICAg
ICAgICAgICBvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgICAgICAgICAgcmVz
dWx0LT4lKGtleWVkU2V0TWV0aG9kKXMoQVNDSUlMaXRlcmFsKCIlKHBhcmFtZXRlck5hbWUpcyIp
LCBvdXRfJShwYXJhbWV0ZXJOYW1lKXMpOycgJSBwYXJhbV9hcmdzKQorICAgICAgICAgICAgICAg
IGVsaWYgX3BhcmFtZXRlci50eXBlLmlzX2VudW0oKToKKyAgICAgICAgICAgICAgICAgICAgb3V0
X3BhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICAgICAgcmVzdWx0LT4lKGtleWVkU2V0
TWV0aG9kKXMoQVNDSUlMaXRlcmFsKCIlKHBhcmFtZXRlck5hbWUpcyIpLCBJbnNwZWN0b3I6OlR5
cGVCdWlsZGVyOjpnZXQlKGZyYW1ld29ya1ByZWZpeClzRW51bUNvbnN0YW50VmFsdWUob3V0XyUo
cGFyYW1ldGVyTmFtZSlzKSk7JyAlIHBhcmFtX2FyZ3MpCisgICAgICAgICAgICAgICAgZWxzZToK
KyAgICAgICAgICAgICAgICAgICAgb3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAg
ICAgICAgcmVzdWx0LT4lKGtleWVkU2V0TWV0aG9kKXMoQVNDSUlMaXRlcmFsKCIlKHBhcmFtZXRl
ck5hbWUpcyIpLCBvdXRfJShwYXJhbWV0ZXJOYW1lKXMpOycgJSBwYXJhbV9hcmdzKQorCisgICAg
ICAgICAgICAgICAgaWYgR2VuZXJhdG9yLnNob3VsZF9wYXNzX2J5X2NvcHlfZm9yX3JldHVybl90
eXBlKF9wYXJhbWV0ZXIudHlwZSk6CisgICAgICAgICAgICAgICAgICAgIG1ldGhvZF9wYXJhbWV0
ZXJzLmFwcGVuZCgnb3V0XycgKyBfcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKQorICAgICAgICAg
ICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIG1ldGhvZF9wYXJhbWV0ZXJzLmFwcGVu
ZCgnJm91dF8nICsgX3BhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkKKworICAgICAgICBjb21tYW5k
X2FyZ3MgPSB7CisgICAgICAgICAgICAnZG9tYWluTmFtZSc6IGRvbWFpbi5kb21haW5fbmFtZSwK
KyAgICAgICAgICAgICdjYWxsYmFja05hbWUnOiAnJXNDYWxsYmFjaycgJSB1Y2ZpcnN0KGNvbW1h
bmQuY29tbWFuZF9uYW1lKSwKKyAgICAgICAgICAgICdjb21tYW5kTmFtZSc6IGNvbW1hbmQuY29t
bWFuZF9uYW1lLAorICAgICAgICAgICAgJ2luUGFyYW1ldGVyRGVjbGFyYXRpb25zJzogIlxuIi5q
b2luKGluX3BhcmFtZXRlcl9kZWNsYXJhdGlvbnMpLAorICAgICAgICAgICAgJ2ludm9jYXRpb25Q
YXJhbWV0ZXJzJzogIiwgIi5qb2luKG1ldGhvZF9wYXJhbWV0ZXJzKQorICAgICAgICB9CisKKyAg
ICAgICAgaWYgbGVuKGNvbW1hbmQuY2FsbF9wYXJhbWV0ZXJzKSA9PSAwOgorICAgICAgICAgICAg
bGluZXMuYXBwZW5kKCd2b2lkIEluc3BlY3RvciUoZG9tYWluTmFtZSlzQmFja2VuZERpc3BhdGNo
ZXI6OiUoY29tbWFuZE5hbWUpcyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0Jikn
ICUgY29tbWFuZF9hcmdzKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbGluZXMuYXBwZW5k
KCd2b2lkIEluc3BlY3RvciUoZG9tYWluTmFtZSlzQmFja2VuZERpc3BhdGNoZXI6OiUoY29tbWFu
ZE5hbWUpcyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKScgJSBj
b21tYW5kX2FyZ3MpCisgICAgICAgIGxpbmVzLmFwcGVuZCgneycpCisKKyAgICAgICAgaWYgbGVu
KGNvbW1hbmQuY2FsbF9wYXJhbWV0ZXJzKSA+IDA6CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQo
VGVtcGxhdGUoVGVtcGxhdGVzLkJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25QcmVwYXJl
Q29tbWFuZEFyZ3VtZW50cykuc3Vic3RpdHV0ZShOb25lLCAqKmNvbW1hbmRfYXJncykpCisKKyAg
ICAgICAgbGluZXMuYXBwZW5kKCcgICAgRXJyb3JTdHJpbmcgZXJyb3I7JykKKyAgICAgICAgbGlu
ZXMuYXBwZW5kKCcgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsnKQorICAgICAgICBpZiBjb21tYW5kLmlzX2FzeW5jOgorICAgICAg
ICAgICAgbGluZXMuYXBwZW5kKCcgICAgUmVmUHRyPEluc3BlY3RvciUoZG9tYWluTmFtZSlzQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyOjolKGNhbGxiYWNrTmFtZSlzPiBjYWxsYmFjayA9IGFkb3B0
UmVmKG5ldyBJbnNwZWN0b3IlKGRvbWFpbk5hbWUpc0JhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6
JShjYWxsYmFja05hbWUpcyhtX2JhY2tlbmREaXNwYXRjaGVyLGNhbGxJZCkpOycgJSBjb21tYW5k
X2FyZ3MpCisgICAgICAgIGlmIGxlbihjb21tYW5kLnJldHVybl9wYXJhbWV0ZXJzKSA+IDA6Cisg
ICAgICAgICAgICBsaW5lcy5leHRlbmQob3V0X3BhcmFtZXRlcl9kZWNsYXJhdGlvbnMpCisgICAg
ICAgIGxpbmVzLmFwcGVuZCgnICAgIG1fYWdlbnQtPiUoY29tbWFuZE5hbWUpcyglKGludm9jYXRp
b25QYXJhbWV0ZXJzKXMpOycgJSBjb21tYW5kX2FyZ3MpCisgICAgICAgIGxpbmVzLmFwcGVuZCgn
JykKKyAgICAgICAgaWYgY29tbWFuZC5pc19hc3luYzoKKyAgICAgICAgICAgIGxpbmVzLmFwcGVu
ZCgnICAgIGlmIChlcnJvci5sZW5ndGgoKSkgeycpCisgICAgICAgICAgICBsaW5lcy5leHRlbmQo
b3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cykKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAg
IH0nKQorICAgICAgICBlbGlmIGxlbihjb21tYW5kLnJldHVybl9wYXJhbWV0ZXJzKSA+IDE6Cisg
ICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBpZiAoIWVycm9yLmxlbmd0aCgpKSB7JykKKyAg
ICAgICAgICAgIGxpbmVzLmV4dGVuZChvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRzKQorICAgICAg
ICAgICAgbGluZXMuYXBwZW5kKCcgICAgfScpCisgICAgICAgIGVsaWYgbGVuKGNvbW1hbmQucmV0
dXJuX3BhcmFtZXRlcnMpID09IDE6CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBpZiAo
IWVycm9yLmxlbmd0aCgpKScpCisgICAgICAgICAgICBsaW5lcy5leHRlbmQob3V0X3BhcmFtZXRl
cl9hc3NpZ25tZW50cykKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnJykKKworICAgICAgICBp
ZiBub3QgY29tbWFuZC5pc19hc3luYzoKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIG1f
YmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCks
IGVycm9yKTsnKQorICAgICAgICBsaW5lcy5hcHBlbmQoJ30nKQorICAgICAgICByZXR1cm4gIlxu
Ii5qb2luKGxpbmVzKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfZnJvbnRlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0
ZV9mcm9udGVuZF9kaXNwYXRjaGVyX2hlYWRlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45MjcwNzgzYmZlZjI3
NWQ5ZTAxODAxNTBkZmQ0OTc4OGYzNTY3MWY2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfZnJvbnRlbmRf
ZGlzcGF0Y2hlcl9oZWFkZXIucHkKQEAgLTAsMCArMSwxMTcgQEAKKyMhL3Vzci9iaW4vZW52IHB5
dGhvbgorIyBDb3B5cmlnaHQgKGMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorIyBDb3B5cmlnaHQgKGMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6Cisj
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisjIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKwor
CitpbXBvcnQgbG9nZ2luZworaW1wb3J0IHJlCitpbXBvcnQgc3RyaW5nCisKK2Zyb20gbW9kZWxz
IGltcG9ydCBFbnVtVHlwZQorZnJvbSBnZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvciwgdWNmaXJz
dAorZnJvbSBzdHJpbmcgaW1wb3J0IFRlbXBsYXRlCitmcm9tIGdlbmVyYXRvcl90ZW1wbGF0ZXMg
aW1wb3J0IEdlbmVyYXRvclRlbXBsYXRlcyBhcyBUZW1wbGF0ZXMKKworbG9nID0gbG9nZ2luZy5n
ZXRMb2dnZXIoJ2dsb2JhbCcpCisKKworY2xhc3MgRnJvbnRlbmREaXNwYXRjaGVySGVhZGVyR2Vu
ZXJhdG9yKEdlbmVyYXRvcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9m
aWxlcGF0aCk6CisgICAgICAgIEdlbmVyYXRvci5fX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRf
ZmlsZXBhdGgpCisKKyAgICBkZWYgb3V0cHV0X2ZpbGVuYW1lKHNlbGYpOgorICAgICAgICByZXR1
cm4gIkluc3BlY3RvciVzRnJvbnRlbmREaXNwYXRjaGVycy5oIiAlIHNlbGYubW9kZWwoKS5mcmFt
ZXdvcmsuc2V0dGluZygncHJlZml4JykKKworICAgIGRlZiBnZW5lcmF0ZV9vdXRwdXQoc2VsZik6
CisgICAgICAgIGhlYWRlcnMgPSBbCisgICAgICAgICAgICAnIkluc3BlY3RvciVzVHlwZUJ1aWxk
ZXJzLmgiJyAlIHNlbGYubW9kZWwoKS5mcmFtZXdvcmsuc2V0dGluZygncHJlZml4JyksCisgICAg
ICAgICAgICAnPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4nLAorICAgICAg
ICAgICAgJzxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+JywKKyAgICAgICAgICAgICc8d3Rm
L1Bhc3NSZWZQdHIuaD4nLAorICAgICAgICAgICAgJzx3dGYvdGV4dC9XVEZTdHJpbmcuaD4nXQor
CisgICAgICAgIHNlY3Rpb25zID0gW10KKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2Vu
ZXJhdGVfbGljZW5zZSgpKQorICAgICAgICBoZWFkZXJfYXJncyA9IHsKKyAgICAgICAgICAgICdo
ZWFkZXJHdWFyZFN0cmluZyc6IHJlLnN1YignWy0uL10nLCAnXycsIHNlbGYub3V0cHV0X2ZpbGVu
YW1lKCkpLAorICAgICAgICAgICAgJ2luY2x1ZGVzJzogJ1xuJy5qb2luKFsnI2luY2x1ZGUgJyAr
IGhlYWRlciBmb3IgaGVhZGVyIGluIGhlYWRlcnNdKSwKKyAgICAgICAgICAgICd0eXBlZGVmcyc6
ICcnLAorICAgICAgICAgICAgJ2lucHV0RmlsZW5hbWUnOiBzZWxmLl9pbnB1dF9maWxlcGF0aAor
ICAgICAgICB9CisKKyAgICAgICAgZG9tYWlucyA9IHNlbGYuZG9tYWluc190b19nZW5lcmF0ZSgp
CisgICAgICAgIGRvbWFpbnMgPSBmaWx0ZXIobGFtYmRhIGRvbWFpbjogbGVuKGRvbWFpbi5ldmVu
dHMpID4gMCwgZG9tYWlucykKKworICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoVGVt
cGxhdGVzLkNwcEhlYWRlclByZWx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykp
CisgICAgICAgIHNlY3Rpb25zLmV4dGVuZChtYXAoc2VsZi5fZ2VuZXJhdGVfZGlzcGF0Y2hlcl9k
ZWNsYXJhdGlvbnNfZm9yX2RvbWFpbiwgZG9tYWlucykpCisgICAgICAgIHNlY3Rpb25zLmFwcGVu
ZChUZW1wbGF0ZShUZW1wbGF0ZXMuQ3BwSGVhZGVyUG9zdGx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwg
KipoZWFkZXJfYXJncykpCisgICAgICAgIHJldHVybiAiXG5cbiIuam9pbihzZWN0aW9ucykKKwor
ICAgICMgUHJpdmF0ZSBtZXRob2RzLgorCisgICAgZGVmIF9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51
bV9mb3JfcGFyYW1ldGVyKHNlbGYsIHBhcmFtZXRlciwgZXZlbnQpOgorICAgICAgICBlbnVtX2Fy
Z3MgPSB7CisgICAgICAgICAgICAncGFyYW1ldGVyTmFtZSc6IHBhcmFtZXRlci5wYXJhbWV0ZXJf
bmFtZSwKKyAgICAgICAgICAgICdldmVudE5hbWUnOiBldmVudC5ldmVudF9uYW1lCisgICAgICAg
IH0KKworICAgICAgICBsaW5lcyA9IFtdCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICAv
LyBOYW1lZCBhZnRlciBwYXJhbWV0ZXIgXCclKHBhcmFtZXRlck5hbWUpc1wnIHdoaWxlIGdlbmVy
YXRpbmcgY29tbWFuZC9ldmVudCAlKGV2ZW50TmFtZSlzLicgJSBlbnVtX2FyZ3MpCisgICAgICAg
IGxpbmVzLmFwcGVuZCgnICAgICAgICBlbnVtIGNsYXNzICVzIHsnICUgdWNmaXJzdChwYXJhbWV0
ZXIucGFyYW1ldGVyX25hbWUpKQorICAgICAgICBmb3IgZW51bV92YWx1ZSBpbiBwYXJhbWV0ZXIu
dHlwZS5lbnVtX3ZhbHVlcygpOgorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgICAg
ICAlcyA9ICVkLCcgJSAoR2VuZXJhdG9yLnN0eWxpemVkX25hbWVfZm9yX2VudW1fdmFsdWUoZW51
bV92YWx1ZSksIHNlbGYuZW5jb2RpbmdfZm9yX2VudW1fdmFsdWUoZW51bV92YWx1ZSkpKQorICAg
ICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgfTsgLy8gZW51bSBjbGFzcyAlcycgJSB1Y2ZpcnN0
KHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkpCisgICAgICAgIHJldHVybiAiXG4iLmpvaW4obGlu
ZXMpCisKKyAgICBkZWYgX2dlbmVyYXRlX2Rpc3BhdGNoZXJfZGVjbGFyYXRpb25zX2Zvcl9kb21h
aW4oc2VsZiwgZG9tYWluKToKKyAgICAgICAgY2xhc3NDb21wb25lbnRzID0gWydjbGFzcyddCisg
ICAgICAgIGV4cG9ydE1hY3JvID0gc2VsZi5tb2RlbCgpLmZyYW1ld29yay5zZXR0aW5nKCdleHBv
cnRfbWFjcm8nLCBOb25lKQorICAgICAgICBpZiBleHBvcnRNYWNybyBpcyBub3QgTm9uZToKKyAg
ICAgICAgICAgIGNsYXNzQ29tcG9uZW50cy5hcHBlbmQoZXhwb3J0TWFjcm8pCisKKyAgICAgICAg
dXNlZF9lbnVtX25hbWVzID0gc2V0KFtdKQorCisgICAgICAgIGV2ZW50X2RlY2xhcmF0aW9ucyA9
IFtdCisgICAgICAgIGZvciBldmVudCBpbiBkb21haW4uZXZlbnRzOgorICAgICAgICAgICAgZXZl
bnRfZGVjbGFyYXRpb25zLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9kaXNwYXRjaGVyX2RlY2xhcmF0
aW9uX2Zvcl9ldmVudChldmVudCwgZG9tYWluLCB1c2VkX2VudW1fbmFtZXMpKQorCisgICAgICAg
IGhhbmRsZXJfYXJncyA9IHsKKyAgICAgICAgICAgICdjbGFzc0FuZEV4cG9ydE1hY3JvJzogIiAi
LmpvaW4oY2xhc3NDb21wb25lbnRzKSwKKyAgICAgICAgICAgICdkb21haW5OYW1lJzogZG9tYWlu
LmRvbWFpbl9uYW1lLAorICAgICAgICAgICAgJ2V2ZW50RGVjbGFyYXRpb25zJzogIlxuIi5qb2lu
KGV2ZW50X2RlY2xhcmF0aW9ucykKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBHZW5lcmF0
b3Iud3JhcF93aXRoX2d1YXJkX2Zvcl9kb21haW4oZG9tYWluLCBUZW1wbGF0ZShUZW1wbGF0ZXMu
RnJvbnRlbmREaXNwYXRjaGVyRG9tYWluRGlzcGF0Y2hlckRlY2xhcmF0aW9uKS5zdWJzdGl0dXRl
KE5vbmUsICoqaGFuZGxlcl9hcmdzKSkKKworICAgIGRlZiBfZ2VuZXJhdGVfZGlzcGF0Y2hlcl9k
ZWNsYXJhdGlvbl9mb3JfZXZlbnQoc2VsZiwgZXZlbnQsIGRvbWFpbiwgdXNlZF9lbnVtX25hbWVz
KToKKyAgICAgICAgZm9ybWFsX3BhcmFtZXRlcnMgPSBbXQorICAgICAgICBsaW5lcyA9IFtdCisg
ICAgICAgIGZvciBfcGFyYW1ldGVyIGluIGV2ZW50LmV2ZW50X3BhcmFtZXRlcnM6CisgICAgICAg
ICAgICBmb3JtYWxfcGFyYW1ldGVycy5hcHBlbmQoJyVzICVzJyAlIChHZW5lcmF0b3IudHlwZV9z
dHJpbmdfZm9yX2NoZWNrZWRfZm9ybWFsX2V2ZW50X3BhcmFtZXRlcihfcGFyYW1ldGVyKSwgX3Bh
cmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkpCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKF9wYXJh
bWV0ZXIudHlwZSwgRW51bVR5cGUpIGFuZCBfcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lIG5vdCBp
biB1c2VkX2VudW1fbmFtZXM6CisgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuX2dl
bmVyYXRlX2Fub255bW91c19lbnVtX2Zvcl9wYXJhbWV0ZXIoX3BhcmFtZXRlciwgZXZlbnQpKQor
ICAgICAgICAgICAgICAgIHVzZWRfZW51bV9uYW1lcy5hZGQoX3BhcmFtZXRlci5wYXJhbWV0ZXJf
bmFtZSkKKworICAgICAgICBsaW5lcy5hcHBlbmQoIiAgICB2b2lkICVzKCVzKTsiICUgKGV2ZW50
LmV2ZW50X25hbWUsICIsICIuam9pbihmb3JtYWxfcGFyYW1ldGVycykpKQorICAgICAgICByZXR1
cm4gIlxuIi5qb2luKGxpbmVzKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBs
ZW1lbnRhdGlvbi5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9j
b2RlZ2VuL2dlbmVyYXRlX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNjBhYmE0YjQyZjMxMGQ4NTUwZjhhY2FkOTQ2OTljYTk2ZWI5Y2U5ZgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2Rl
Z2VuL2dlbmVyYXRlX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkKQEAgLTAs
MCArMSwxMjIgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyBDb3B5cmlnaHQgKGMpIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKGMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisjIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IHJl
CitpbXBvcnQgc3RyaW5nCisKK2Zyb20gZ2VuZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IsIHVjZmly
c3QKK2Zyb20gc3RyaW5nIGltcG9ydCBUZW1wbGF0ZQorZnJvbSBnZW5lcmF0b3JfdGVtcGxhdGVz
IGltcG9ydCBHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgVGVtcGxhdGVzCitmcm9tIG1vZGVscyBpbXBv
cnQgT2JqZWN0VHlwZSwgQXJyYXlUeXBlCisKK2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9i
YWwnKQorCisKK2NsYXNzIEZyb250ZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9y
KEdlbmVyYXRvcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0
aCk6CisgICAgICAgIEdlbmVyYXRvci5fX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBh
dGgpCisKKyAgICBkZWYgb3V0cHV0X2ZpbGVuYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gIklu
c3BlY3RvciVzRnJvbnRlbmREaXNwYXRjaGVycy5jcHAiICUgc2VsZi5tb2RlbCgpLmZyYW1ld29y
ay5zZXR0aW5nKCdwcmVmaXgnKQorCisgICAgZGVmIGdlbmVyYXRlX291dHB1dChzZWxmKToKKyAg
ICAgICAgc2Vjb25kYXJ5X2hlYWRlcnMgPSBbJzx3dGYvdGV4dC9DU3RyaW5nLmg+J10KKworICAg
ICAgICBzZWN0aW9ucyA9IFtdCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLmdlbmVyYXRl
X2xpY2Vuc2UoKSkKKyAgICAgICAgaGVhZGVyX2FyZ3MgPSB7CisgICAgICAgICAgICAncHJpbWFy
eUluY2x1ZGUnOiAnIkluc3BlY3RvciVzRnJvbnRlbmREaXNwYXRjaGVycy5oIicgJSBzZWxmLm1v
ZGVsKCkuZnJhbWV3b3JrLnNldHRpbmcoJ3ByZWZpeCcpLAorICAgICAgICAgICAgJ3NlY29uZGFy
eUluY2x1ZGVzJzogIlxuIi5qb2luKFsnI2luY2x1ZGUgJXMnICUgaGVhZGVyIGZvciBoZWFkZXIg
aW4gc2Vjb25kYXJ5X2hlYWRlcnNdKSwKKyAgICAgICAgICAgICdpbnB1dEZpbGVuYW1lJzogc2Vs
Zi5faW5wdXRfZmlsZXBhdGgKKyAgICAgICAgfQorCisgICAgICAgIGRvbWFpbnMgPSBzZWxmLmRv
bWFpbnNfdG9fZ2VuZXJhdGUoKQorICAgICAgICBkb21haW5zID0gZmlsdGVyKGxhbWJkYSBkb21h
aW46IGxlbihkb21haW4uZXZlbnRzKSA+IDAsIGRvbWFpbnMpCisKKyAgICAgICAgc2VjdGlvbnMu
YXBwZW5kKFRlbXBsYXRlKFRlbXBsYXRlcy5DcHBJbXBsZW1lbnRhdGlvblByZWx1ZGUpLnN1YnN0
aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCisgICAgICAgIHNlY3Rpb25zLmV4dGVuZChtYXAo
c2VsZi5fZ2VuZXJhdGVfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbnNfZm9yX2RvbWFpbiwgZG9t
YWlucykpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMuQ3BwSW1w
bGVtZW50YXRpb25Qb3N0bHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkKKyAg
ICAgICAgcmV0dXJuICJcblxuIi5qb2luKHNlY3Rpb25zKQorCisgICAgIyBQcml2YXRlIG1ldGhv
ZHMuCisKKyAgICBkZWYgX2dlbmVyYXRlX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb25zX2Zvcl9k
b21haW4oc2VsZiwgZG9tYWluKToKKyAgICAgICAgaW1wbGVtZW50YXRpb25zID0gW10KKyAgICAg
ICAgZm9yIF9ldmVudCBpbiBkb21haW4uZXZlbnRzOgorICAgICAgICAgICAgaW1wbGVtZW50YXRp
b25zLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uX2Zvcl9l
dmVudChfZXZlbnQsIGRvbWFpbikpCisKKyAgICAgICAgcmV0dXJuIEdlbmVyYXRvci53cmFwX3dp
dGhfZ3VhcmRfZm9yX2RvbWFpbihkb21haW4sICJcblxuIi5qb2luKGltcGxlbWVudGF0aW9ucykp
CisKKyAgICBkZWYgX2dlbmVyYXRlX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb25fZm9yX2V2ZW50
KHNlbGYsIGV2ZW50LCBkb21haW4pOgorICAgICAgICBsaW5lcyA9IFtdCisgICAgICAgIHBhcmFt
ZXRlcl9hc3NpZ25tZW50cyA9IFtdCisgICAgICAgIGZvcm1hbF9wYXJhbWV0ZXJzID0gW10KKwor
ICAgICAgICBmb3IgX3BhcmFtZXRlciBpbiBldmVudC5ldmVudF9wYXJhbWV0ZXJzOgorCisgICAg
ICAgICAgICBwYXJhbWV0ZXJfdmFsdWUgPSBfcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lCisgICAg
ICAgICAgICBpZiBfcGFyYW1ldGVyLmlzX29wdGlvbmFsIGFuZCBub3QgR2VuZXJhdG9yLnNob3Vs
ZF9wYXNzX2J5X2NvcHlfZm9yX3JldHVybl90eXBlKF9wYXJhbWV0ZXIudHlwZSk6CisgICAgICAg
ICAgICAgICAgcGFyYW1ldGVyX3ZhbHVlID0gJyonICsgcGFyYW1ldGVyX3ZhbHVlCisgICAgICAg
ICAgICBpZiBfcGFyYW1ldGVyLnR5cGUuaXNfZW51bSgpOgorICAgICAgICAgICAgICAgIGZyYW1l
d29ya19wcmVmaXggPSBzZWxmLm1vZGVsKCkuZnJhbWV3b3JrLnNldHRpbmcoJ3ByZWZpeCcpCisg
ICAgICAgICAgICAgICAgcGFyYW1ldGVyX3ZhbHVlID0gJ0luc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6
OmdldCVzRW51bUNvbnN0YW50VmFsdWUoJXMpJyAlIChmcmFtZXdvcmtfcHJlZml4LCBwYXJhbWV0
ZXJfdmFsdWUpCisKKyAgICAgICAgICAgIHBhcmFtZXRlcl9hcmdzID0geworICAgICAgICAgICAg
ICAgICdwYXJhbWV0ZXJUeXBlJzogR2VuZXJhdG9yLnR5cGVfc3RyaW5nX2Zvcl9zdGFja19vdXRf
cGFyYW1ldGVyKF9wYXJhbWV0ZXIpLAorICAgICAgICAgICAgICAgICdwYXJhbWV0ZXJOYW1lJzog
X3BhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwKKyAgICAgICAgICAgICAgICAncGFyYW1ldGVyVmFs
dWUnOiBwYXJhbWV0ZXJfdmFsdWUsCisgICAgICAgICAgICAgICAgJ2tleWVkU2V0TWV0aG9kJzog
R2VuZXJhdG9yLmtleWVkX3NldF9tZXRob2RfZm9yX3R5cGUoX3BhcmFtZXRlci50eXBlKSwKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgX3BhcmFtZXRlci5pc19vcHRpb25hbDoKKyAg
ICAgICAgICAgICAgICBwYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAgaWYgKCUocGFy
YW1ldGVyTmFtZSlzKScgJSBwYXJhbWV0ZXJfYXJncykKKyAgICAgICAgICAgICAgICBwYXJhbWV0
ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAgICAgIHBhcmFtc09iamVjdC0+JShrZXllZFNldE1l
dGhvZClzKEFTQ0lJTGl0ZXJhbCgiJShwYXJhbWV0ZXJOYW1lKXMiKSwgJShwYXJhbWV0ZXJWYWx1
ZSlzKTsnICUgcGFyYW1ldGVyX2FyZ3MpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAg
ICAgIHBhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICBwYXJhbXNPYmplY3QtPiUoa2V5
ZWRTZXRNZXRob2QpcyhBU0NJSUxpdGVyYWwoIiUocGFyYW1ldGVyTmFtZSlzIiksICUocGFyYW1l
dGVyVmFsdWUpcyk7JyAlIHBhcmFtZXRlcl9hcmdzKQorCisgICAgICAgICAgICBmb3JtYWxfcGFy
YW1ldGVycy5hcHBlbmQoJyVzICVzJyAlIChHZW5lcmF0b3IudHlwZV9zdHJpbmdfZm9yX2NoZWNr
ZWRfZm9ybWFsX2V2ZW50X3BhcmFtZXRlcihfcGFyYW1ldGVyKSwgX3BhcmFtZXRlci5wYXJhbWV0
ZXJfbmFtZSkpCisKKyAgICAgICAgZXZlbnRfYXJncyA9IHsKKyAgICAgICAgICAgICdkb21haW5O
YW1lJzogZG9tYWluLmRvbWFpbl9uYW1lLAorICAgICAgICAgICAgJ2V2ZW50TmFtZSc6IGV2ZW50
LmV2ZW50X25hbWUsCisgICAgICAgICAgICAnZm9ybWFsUGFyYW1ldGVycyc6ICIsICIuam9pbihm
b3JtYWxfcGFyYW1ldGVycykKKyAgICAgICAgfQorCisgICAgICAgIGxpbmVzLmFwcGVuZCgndm9p
ZCBJbnNwZWN0b3IlKGRvbWFpbk5hbWUpc0Zyb250ZW5kRGlzcGF0Y2hlcjo6JShldmVudE5hbWUp
cyglKGZvcm1hbFBhcmFtZXRlcnMpcyknICUgZXZlbnRfYXJncykKKyAgICAgICAgbGluZXMuYXBw
ZW5kKCd7JykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4ganNvbk1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOycpCisgICAgICAgIGxp
bmVzLmFwcGVuZCgnICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJtZXRo
b2QiKSwgQVNDSUlMaXRlcmFsKCIlKGRvbWFpbk5hbWUpcy4lKGV2ZW50TmFtZSlzIikpOycgJSBl
dmVudF9hcmdzKQorCisgICAgICAgIGlmIGxlbihwYXJhbWV0ZXJfYXNzaWdubWVudHMpID4gMDoK
KyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBh
cmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7JykKKyAgICAgICAgICAgIGxp
bmVzLmV4dGVuZChwYXJhbWV0ZXJfYXNzaWdubWVudHMpCisgICAgICAgICAgICBsaW5lcy5hcHBl
bmQoJyAgICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicGFyYW1zIiksIHBh
cmFtc09iamVjdCk7JykKKworICAgICAgICBsaW5lcy5hcHBlbmQoJycpCisgICAgICAgIGxpbmVz
LmFwcGVuZCgnICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJv
bnRlbmQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsnKQorICAgICAgICBsaW5lcy5hcHBl
bmQoJ30nKQorICAgICAgICByZXR1cm4gIlxuIi5qb2luKGxpbmVzKQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfdHlw
ZV9idWlsZGVyX2hlYWRlci5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9jb2RlZ2VuL2dlbmVyYXRlX3R5cGVfYnVpbGRlcl9oZWFkZXIucHkKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NTc2NjdiZDZiYTE2MjkzYjVhYTM4NWFjNDZlMGJiNjgyYmJjM2E2NgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVy
YXRlX3R5cGVfYnVpbGRlcl9oZWFkZXIucHkKQEAgLTAsMCArMSwzNDggQEAKKyMhL3Vzci9iaW4v
ZW52IHB5dGhvbgorIyBDb3B5cmlnaHQgKGMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorIyBDb3B5cmlnaHQgKGMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBt
ZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
IyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisjIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKworCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IHJlCitpbXBvcnQgc3RyaW5nCisKK2Zyb20g
Z2VuZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IsIHVjZmlyc3QKK2Zyb20gbW9kZWxzIGltcG9ydCBF
bnVtVHlwZSwgT2JqZWN0VHlwZSwgUHJpbWl0aXZlVHlwZSwgQWxpYXNlZFR5cGUsIEFycmF5VHlw
ZSwgRnJhbWV3b3JrcworZnJvbSBzdHJpbmcgaW1wb3J0IFRlbXBsYXRlCitmcm9tIGdlbmVyYXRv
cl90ZW1wbGF0ZXMgaW1wb3J0IEdlbmVyYXRvclRlbXBsYXRlcyBhcyBUZW1wbGF0ZXMKKworbG9n
ID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2JhbCcpCisKKworY2xhc3MgVHlwZUJ1aWxkZXJIZWFk
ZXJHZW5lcmF0b3IoR2VuZXJhdG9yKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbW9kZWwsIGlu
cHV0X2ZpbGVwYXRoKToKKyAgICAgICAgR2VuZXJhdG9yLl9faW5pdF9fKHNlbGYsIG1vZGVsLCBp
bnB1dF9maWxlcGF0aCkKKworICAgIGRlZiBvdXRwdXRfZmlsZW5hbWUoc2VsZik6CisgICAgICAg
IHJldHVybiAiSW5zcGVjdG9yJXNUeXBlQnVpbGRlcnMuaCIgJSBzZWxmLm1vZGVsKCkuZnJhbWV3
b3JrLnNldHRpbmcoJ3ByZWZpeCcpCisKKyAgICBkZWYgZ2VuZXJhdGVfb3V0cHV0KHNlbGYpOgor
ICAgICAgICBkb21haW5zID0gc2VsZi5kb21haW5zX3RvX2dlbmVyYXRlKCkKKyAgICAgICAgc2Vs
Zi5jYWxjdWxhdGVfdHlwZXNfcmVxdWlyaW5nX3NoYXBlX2Fzc2VydGlvbnMoZG9tYWlucykKKwor
ICAgICAgICBoZWFkZXJzID0gc2V0KFsKKyAgICAgICAgICAgICc8aW5zcGVjdG9yL0luc3BlY3Rv
clR5cGVCdWlsZGVyLmg+JywKKyAgICAgICAgICAgICc8d3RmL0Fzc2VydGlvbnMuaD4nLAorICAg
ICAgICAgICAgJzx3dGYvUGFzc1JlZlB0ci5oPicKKyAgICAgICAgXSkKKworICAgICAgICBpZiBz
ZWxmLm1vZGVsKCkuZnJhbWV3b3JrIGlzIG5vdCBGcmFtZXdvcmtzLkphdmFTY3JpcHRDb3JlOgor
ICAgICAgICAgICAgaGVhZGVycy5hZGQoJzxpbnNwZWN0b3IvSW5zcGVjdG9ySlNUeXBlQnVpbGRl
cnMuaD4nKQorCisgICAgICAgIGV4cG9ydF9tYWNybyA9IHNlbGYubW9kZWwoKS5mcmFtZXdvcmsu
c2V0dGluZygnZXhwb3J0X21hY3JvJywgTm9uZSkKKyAgICAgICAgZnJhbWV3b3JrX3ByZWZpeCA9
IHNlbGYubW9kZWwoKS5mcmFtZXdvcmsuc2V0dGluZygncHJlZml4JykKKworICAgICAgICBzZWN0
aW9ucyA9IFtdCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLmdlbmVyYXRlX2xpY2Vuc2Uo
KSkKKyAgICAgICAgaGVhZGVyX2FyZ3MgPSB7CisgICAgICAgICAgICAnaGVhZGVyR3VhcmRTdHJp
bmcnOiByZS5zdWIoJ1stLi9dJywgJ18nLCBzZWxmLm91dHB1dF9maWxlbmFtZSgpKSwKKyAgICAg
ICAgICAgICdpbmNsdWRlcyc6ICdcbicuam9pbihbJyNpbmNsdWRlICcgKyBoZWFkZXIgZm9yIGhl
YWRlciBpbiBzb3J0ZWQoaGVhZGVycyldKSwKKyAgICAgICAgICAgICd0eXBlZGVmcyc6ICcnLAor
ICAgICAgICAgICAgJ2lucHV0RmlsZW5hbWUnOiBzZWxmLl9pbnB1dF9maWxlcGF0aAorICAgICAg
ICB9CisKKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKFRlbXBsYXRlcy5DcHBIZWFk
ZXJQcmVsdWRlKS5zdWJzdGl0dXRlKE5vbmUsICoqaGVhZGVyX2FyZ3MpKQorICAgICAgICBzZWN0
aW9ucy5hcHBlbmQoJ25hbWVzcGFjZSBUeXBlQnVpbGRlciB7JykKKyAgICAgICAgc2VjdGlvbnMu
YXBwZW5kKHNlbGYuX2dlbmVyYXRlX2ZvcndhcmRfZGVjbGFyYXRpb25zKGRvbWFpbnMpKQorICAg
ICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfdHlwZWRlZnMoZG9tYWlucykpCisg
ICAgICAgIHJldHVybl90eXBlID0gWydTdHJpbmcnXQorICAgICAgICBpZiBleHBvcnRfbWFjcm8g
aXMgbm90IE5vbmU6CisgICAgICAgICAgICByZXR1cm5fdHlwZVs6MF0gPSBbZXhwb3J0X21hY3Jv
XQorCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZCgnJXMgZ2V0JXNFbnVtQ29uc3RhbnRWYWx1ZShp
bnQgY29kZSk7JyAlICgnICcuam9pbihyZXR1cm5fdHlwZSksIGZyYW1ld29ya19wcmVmaXgpKQor
CisgICAgICAgIHNlY3Rpb25zLmFwcGVuZCgnXG4nLmpvaW4oWworICAgICAgICAgICAgJ3RlbXBs
YXRlPHR5cGVuYW1lIFQ+ICVzIGdldCVzRW51bUNvbnN0YW50VmFsdWUoVCBlbnVtVmFsdWUpJyAl
ICgnICcuam9pbihyZXR1cm5fdHlwZSksIGZyYW1ld29ya19wcmVmaXgpLAorICAgICAgICAgICAg
J3snLAorICAgICAgICAgICAgJyAgICByZXR1cm4gZ2V0JXNFbnVtQ29uc3RhbnRWYWx1ZShzdGF0
aWNfY2FzdDxpbnQ+KGVudW1WYWx1ZSkpOycgJSBmcmFtZXdvcmtfcHJlZml4LAorICAgICAgICAg
ICAgJ30nXSkpCisKKyAgICAgICAgYnVpbGRlcl9zZWN0aW9ucyA9IG1hcChzZWxmLl9nZW5lcmF0
ZV9idWlsZGVyc19mb3JfZG9tYWluLCBkb21haW5zKQorICAgICAgICBzZWN0aW9ucy5leHRlbmQo
ZmlsdGVyKGxhbWJkYSBzZWN0aW9uOiBsZW4oc2VjdGlvbikgPiAwLCBidWlsZGVyX3NlY3Rpb25z
KSkKKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2ZvcndhcmRfZGVjbGFy
YXRpb25zX2Zvcl9iaW5kaW5nX3RyYWl0cygpKQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoJ30g
Ly8gbmFtZXNwYWNlIFR5cGVCdWlsZGVyJykKKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBs
YXRlKFRlbXBsYXRlcy5DcHBIZWFkZXJQb3N0bHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRl
cl9hcmdzKSkKKyAgICAgICAgcmV0dXJuICJcblxuIi5qb2luKHNlY3Rpb25zKQorCisgICAgIyBQ
cml2YXRlIG1ldGhvZHMuCisKKyAgICAjIEZJWE1FOiBtb3ZlIGJ1aWxkZXJzIG91dCBvZiBjbGFz
c2VzLCB1bmNvbW1lbnQgZm9yd2FyZCBkZWNsYXJhdGlvbgorCisgICAgZGVmIF9nZW5lcmF0ZV9m
b3J3YXJkX2RlY2xhcmF0aW9ucyhzZWxmLCBkb21haW5zKToKKyAgICAgICAgc2VjdGlvbnMgPSBb
XQorCisgICAgICAgIGZvciBkb21haW4gaW4gZG9tYWluczoKKyAgICAgICAgICAgIGRlY2xhcmF0
aW9uX3R5cGVzID0gW2RlY2wudHlwZSBmb3IgZGVjbCBpbiBkb21haW4udHlwZV9kZWNsYXJhdGlv
bnNdCisgICAgICAgICAgICBvYmplY3RfdHlwZXMgPSBmaWx0ZXIobGFtYmRhIF90eXBlOiBpc2lu
c3RhbmNlKF90eXBlLCBPYmplY3RUeXBlKSwgZGVjbGFyYXRpb25fdHlwZXMpCisgICAgICAgICAg
ICBlbnVtX3R5cGVzID0gZmlsdGVyKGxhbWJkYSBfdHlwZTogaXNpbnN0YW5jZShfdHlwZSwgRW51
bVR5cGUpLCBkZWNsYXJhdGlvbl90eXBlcykKKyAgICAgICAgICAgIGlmIGxlbihvYmplY3RfdHlw
ZXMpICsgbGVuKGVudW1fdHlwZXMpID09IDA6CisgICAgICAgICAgICAgICAgY29udGludWUKKwor
ICAgICAgICAgICAgZG9tYWluX2xpbmVzID0gW10KKyAgICAgICAgICAgIGRvbWFpbl9saW5lcy5h
cHBlbmQoJ25hbWVzcGFjZSAlcyB7JyAlIGRvbWFpbi5kb21haW5fbmFtZSkKKworICAgICAgICAg
ICAgb2JqZWN0X3R5cGVfbmFtZXMgPSBbX3R5cGUucmF3X25hbWUoKSBmb3IgX3R5cGUgaW4gb2Jq
ZWN0X3R5cGVzXQorICAgICAgICAgICAgZW51bV90eXBlX25hbWVzID0gW190eXBlLnJhd19uYW1l
KCkgZm9yIF90eXBlIGluIGVudW1fdHlwZXNdCisKKyAgICAgICAgICAgICMgRm9yd2FyZC1kZWNs
YXJlIGFsbCBjbGFzc2VzIHNvIHRoZSB0eXBlIGJ1aWxkZXJzIHdvbid0IGJyZWFrIGlmIHJlYXJy
YW5nZWQuCisgICAgICAgICAgICBkb21haW5fbGluZXMuZXh0ZW5kKCdjbGFzcyAlczsnICUgbmFt
ZSBmb3IgbmFtZSBpbiBzb3J0ZWQob2JqZWN0X3R5cGVfbmFtZXMpKQorICAgICAgICAgICAgZG9t
YWluX2xpbmVzLmV4dGVuZCgnZW51bSBjbGFzcyAlczsnICUgbmFtZSBmb3IgbmFtZSBpbiBzb3J0
ZWQoZW51bV90eXBlX25hbWVzKSkKKyAgICAgICAgICAgIGRvbWFpbl9saW5lcy5hcHBlbmQoJ30g
Ly8gJXMnICUgZG9tYWluLmRvbWFpbl9uYW1lKQorICAgICAgICAgICAgc2VjdGlvbnMuYXBwZW5k
KEdlbmVyYXRvci53cmFwX3dpdGhfZ3VhcmRfZm9yX2RvbWFpbihkb21haW4sICdcbicuam9pbihk
b21haW5fbGluZXMpKSkKKworICAgICAgICBpZiBsZW4oc2VjdGlvbnMpID09IDA6CisgICAgICAg
ICAgICByZXR1cm4gJycKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiAiIiIvLyBG
b3J3YXJkIGRlY2xhcmF0aW9ucy4KKyVzCisvLyBFbmQgb2YgZm9yd2FyZCBkZWNsYXJhdGlvbnMu
CisiIiIgJSAnXG5cbicuam9pbihzZWN0aW9ucykKKworICAgIGRlZiBfZ2VuZXJhdGVfdHlwZWRl
ZnMoc2VsZiwgZG9tYWlucyk6CisgICAgICAgIHNlY3Rpb25zID0gbWFwKHNlbGYuX2dlbmVyYXRl
X3R5cGVkZWZzX2Zvcl9kb21haW4sIGRvbWFpbnMpCisgICAgICAgIHNlY3Rpb25zID0gZmlsdGVy
KGxhbWJkYSB0ZXh0OiBsZW4odGV4dCkgPiAwLCBzZWN0aW9ucykKKworICAgICAgICBpZiBsZW4o
c2VjdGlvbnMpID09IDA6CisgICAgICAgICAgICByZXR1cm4gJycKKyAgICAgICAgZWxzZToKKyAg
ICAgICAgICAgIHJldHVybiAiIiIvLyBUeXBlZGVmcy4KKyVzCisvLyBFbmQgb2YgdHlwZWRlZnMu
IiIiICUgJ1xuXG4nLmpvaW4oc2VjdGlvbnMpCisKKyAgICBkZWYgX2dlbmVyYXRlX3R5cGVkZWZz
X2Zvcl9kb21haW4oc2VsZiwgZG9tYWluKToKKyAgICAgICAgcHJpbWl0aXZlX2RlY2xhcmF0aW9u
cyA9IGZpbHRlcihsYW1iZGEgZGVjbDogaXNpbnN0YW5jZShkZWNsLnR5cGUsIEFsaWFzZWRUeXBl
KSwgZG9tYWluLnR5cGVfZGVjbGFyYXRpb25zKQorICAgICAgICBpZiBsZW4ocHJpbWl0aXZlX2Rl
Y2xhcmF0aW9ucykgPT0gMDoKKyAgICAgICAgICAgIHJldHVybiAnJworCisgICAgICAgIHNlY3Rp
b25zID0gW10KKyAgICAgICAgZm9yIGRlY2xhcmF0aW9uIGluIHByaW1pdGl2ZV9kZWNsYXJhdGlv
bnM6CisgICAgICAgICAgICBwcmltaXRpdmVfbmFtZSA9IEdlbmVyYXRvci5jcHBfbmFtZV9mb3Jf
cHJpbWl0aXZlX3R5cGUoZGVjbGFyYXRpb24udHlwZS5hbGlhc2VkX3R5cGUpCisgICAgICAgICAg
ICB0eXBlZGVmX2xpbmVzID0gW10KKyAgICAgICAgICAgIGlmIGxlbihkZWNsYXJhdGlvbi5kZXNj
cmlwdGlvbikgPiAwOgorICAgICAgICAgICAgICAgIHR5cGVkZWZfbGluZXMuYXBwZW5kKCcvKiAl
cyAqLycgJSBkZWNsYXJhdGlvbi5kZXNjcmlwdGlvbikKKyAgICAgICAgICAgIHR5cGVkZWZfbGlu
ZXMuYXBwZW5kKCd0eXBlZGVmICVzICVzOycgJSAocHJpbWl0aXZlX25hbWUsIGRlY2xhcmF0aW9u
LnR5cGVfbmFtZSkpCisgICAgICAgICAgICBzZWN0aW9ucy5hcHBlbmQoJ1xuJy5qb2luKHR5cGVk
ZWZfbGluZXMpKQorCisgICAgICAgIGxpbmVzID0gW10KKyAgICAgICAgbGluZXMuYXBwZW5kKCdu
YW1lc3BhY2UgJXMgeycgJSBkb21haW4uZG9tYWluX25hbWUpCisgICAgICAgIGxpbmVzLmFwcGVu
ZCgnXG5cbicuam9pbihzZWN0aW9ucykpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnfSAvLyAlcycg
JSBkb21haW4uZG9tYWluX25hbWUpCisgICAgICAgIHJldHVybiBHZW5lcmF0b3Iud3JhcF93aXRo
X2d1YXJkX2Zvcl9kb21haW4oZG9tYWluLCAnXG4nLmpvaW4obGluZXMpKQorCisgICAgZGVmIF9n
ZW5lcmF0ZV9idWlsZGVyc19mb3JfZG9tYWluKHNlbGYsIGRvbWFpbik6CisgICAgICAgIHNlY3Rp
b25zID0gW10KKworICAgICAgICBmb3IgdHlwZV9kZWNsYXJhdGlvbiBpbiBkb21haW4udHlwZV9k
ZWNsYXJhdGlvbnM6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHR5cGVfZGVjbGFyYXRpb24u
dHlwZSwgRW51bVR5cGUpOgorICAgICAgICAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLl9n
ZW5lcmF0ZV9zdHJ1Y3RfZm9yX2VudW1fZGVjbGFyYXRpb24odHlwZV9kZWNsYXJhdGlvbikpCisg
ICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2UodHlwZV9kZWNsYXJhdGlvbi50eXBlLCBPYmplY3RU
eXBlKToKKyAgICAgICAgICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfY2xh
c3NfZm9yX29iamVjdF9kZWNsYXJhdGlvbih0eXBlX2RlY2xhcmF0aW9uLCBkb21haW4pKQorCisg
ICAgICAgIHNlY3Rpb25zID0gZmlsdGVyKGxhbWJkYSBzZWN0aW9uOiBsZW4oc2VjdGlvbikgPiAw
LCBzZWN0aW9ucykKKyAgICAgICAgaWYgbGVuKHNlY3Rpb25zKSA9PSAwOgorICAgICAgICAgICAg
cmV0dXJuICcnCisKKyAgICAgICAgbGluZXMgPSBbXQorICAgICAgICBsaW5lcy5hcHBlbmQoJ25h
bWVzcGFjZSAlcyB7JyAlIGRvbWFpbi5kb21haW5fbmFtZSkKKyAgICAgICAgbGluZXMuYXBwZW5k
KCdcbicuam9pbihzZWN0aW9ucykpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnfSAvLyAlcycgJSBk
b21haW4uZG9tYWluX25hbWUpCisgICAgICAgIHJldHVybiBHZW5lcmF0b3Iud3JhcF93aXRoX2d1
YXJkX2Zvcl9kb21haW4oZG9tYWluLCAnXG4nLmpvaW4obGluZXMpKQorCisgICAgZGVmIF9nZW5l
cmF0ZV9jbGFzc19mb3Jfb2JqZWN0X2RlY2xhcmF0aW9uKHNlbGYsIHR5cGVfZGVjbGFyYXRpb24s
IGRvbWFpbik6CisgICAgICAgIGlmIGxlbih0eXBlX2RlY2xhcmF0aW9uLnR5cGVfbWVtYmVycykg
PT0gMDoKKyAgICAgICAgICAgIHJldHVybiAnJworCisgICAgICAgIGVudW1fbWVtYmVycyA9IGZp
bHRlcihsYW1iZGEgbWVtYmVyOiBpc2luc3RhbmNlKG1lbWJlci50eXBlLCBFbnVtVHlwZSkgYW5k
IG1lbWJlci50eXBlLmlzX2Fub255bW91cywgdHlwZV9kZWNsYXJhdGlvbi50eXBlX21lbWJlcnMp
CisgICAgICAgIHJlcXVpcmVkX21lbWJlcnMgPSBmaWx0ZXIobGFtYmRhIG1lbWJlcjogbm90IG1l
bWJlci5pc19vcHRpb25hbCwgdHlwZV9kZWNsYXJhdGlvbi50eXBlX21lbWJlcnMpCisgICAgICAg
IG9wdGlvbmFsX21lbWJlcnMgPSBmaWx0ZXIobGFtYmRhIG1lbWJlcjogbWVtYmVyLmlzX29wdGlv
bmFsLCB0eXBlX2RlY2xhcmF0aW9uLnR5cGVfbWVtYmVycykKKyAgICAgICAgb2JqZWN0X25hbWUg
PSB0eXBlX2RlY2xhcmF0aW9uLnR5cGVfbmFtZQorCisgICAgICAgIGxpbmVzID0gW10KKyAgICAg
ICAgaWYgbGVuKHR5cGVfZGVjbGFyYXRpb24uZGVzY3JpcHRpb24pID4gMDoKKyAgICAgICAgICAg
IGxpbmVzLmFwcGVuZCgnLyogJXMgKi8nICUgdHlwZV9kZWNsYXJhdGlvbi5kZXNjcmlwdGlvbikK
KyAgICAgICAgYmFzZV9jbGFzcyA9ICdJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCcKKyAgICAg
ICAgaWYgbm90IEdlbmVyYXRvci50eXBlX2hhc19vcGVuX2ZpZWxkcyh0eXBlX2RlY2xhcmF0aW9u
LnR5cGUpOgorICAgICAgICAgICAgYmFzZV9jbGFzcyA9IGJhc2VfY2xhc3MgKyAnQmFzZScKKyAg
ICAgICAgbGluZXMuYXBwZW5kKCdjbGFzcyAlcyA6IHB1YmxpYyAlcyB7JyAlIChvYmplY3RfbmFt
ZSwgYmFzZV9jbGFzcykpCisgICAgICAgIGxpbmVzLmFwcGVuZCgncHVibGljOicpCisgICAgICAg
IGZvciBlbnVtX21lbWJlciBpbiBlbnVtX21lbWJlcnM6CisgICAgICAgICAgICBsaW5lcy5hcHBl
bmQoJyAgICAvLyBOYW1lZCBhZnRlciBwcm9wZXJ0eSBuYW1lIFwnJXNcJyB3aGlsZSBnZW5lcmF0
aW5nICVzLicgJSAoZW51bV9tZW1iZXIubWVtYmVyX25hbWUsIG9iamVjdF9uYW1lKSkKKyAgICAg
ICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9zdHJ1Y3RfZm9yX2Fub255bW91c19l
bnVtX21lbWJlcihlbnVtX21lbWJlcikpCisgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5l
cmF0ZV9idWlsZGVyX3N0YXRlX2VudW0odHlwZV9kZWNsYXJhdGlvbikpCisKKyAgICAgICAgY29u
c3RydWN0b3JfZXhhbXBsZSA9IFtdCisgICAgICAgIGNvbnN0cnVjdG9yX2V4YW1wbGUuYXBwZW5k
KCcgICAgICogUmVmUHRyPCVzPiByZXN1bHQgPSAlczo6Y3JlYXRlKCknICUgKG9iamVjdF9uYW1l
LCBvYmplY3RfbmFtZSkpCisgICAgICAgIGZvciBtZW1iZXIgaW4gcmVxdWlyZWRfbWVtYmVyczoK
KyAgICAgICAgICAgIGNvbnN0cnVjdG9yX2V4YW1wbGUuYXBwZW5kKCcgICAgICogICAgIC5zZXQl
cyguLi4pJyAlIHVjZmlyc3QobWVtYmVyLm1lbWJlcl9uYW1lKSkKKworICAgICAgICBidWlsZGVy
X2FyZ3MgPSB7CisgICAgICAgICAgICAnb2JqZWN0VHlwZSc6IG9iamVjdF9uYW1lLAorICAgICAg
ICAgICAgJ2NvbnN0cnVjdG9yRXhhbXBsZSc6ICdcbicuam9pbihjb25zdHJ1Y3Rvcl9leGFtcGxl
KSArICc7JywKKyAgICAgICAgfQorCisgICAgICAgIGxpbmVzLmFwcGVuZChUZW1wbGF0ZShUZW1w
bGF0ZXMuVHlwZUJ1aWxkZXJEZWNsYXJhdGlvblByZWx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipi
dWlsZGVyX2FyZ3MpKQorICAgICAgICBmb3IgdHlwZV9tZW1iZXIgaW4gcmVxdWlyZWRfbWVtYmVy
czoKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9idWlsZGVyX3NldHRl
cl9mb3JfbWVtYmVyKHR5cGVfbWVtYmVyLCBkb21haW4pKQorICAgICAgICBsaW5lcy5hcHBlbmQo
VGVtcGxhdGUoVGVtcGxhdGVzLlR5cGVCdWlsZGVyRGVjbGFyYXRpb25Qb3N0bHVkZSkuc3Vic3Rp
dHV0ZShOb25lLCAqKmJ1aWxkZXJfYXJncykpCisgICAgICAgIGZvciBtZW1iZXIgaW4gb3B0aW9u
YWxfbWVtYmVyczoKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV91bmNo
ZWNrZWRfc2V0dGVyX2Zvcl9tZW1iZXIobWVtYmVyLCBkb21haW4pKQorCisgICAgICAgIGlmIEdl
bmVyYXRvci50eXBlX2hhc19vcGVuX2ZpZWxkcyh0eXBlX2RlY2xhcmF0aW9uLnR5cGUpOgorICAg
ICAgICAgICAgbGluZXMuYXBwZW5kKCcnKQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAg
Ly8gUHJvcGVydHkgbmFtZXMgZm9yIHR5cGUgZ2VuZXJhdGVkIGFzIG9wZW4uJykKKyAgICAgICAg
ICAgIGZvciB0eXBlX21lbWJlciBpbiB0eXBlX2RlY2xhcmF0aW9uLnR5cGVfbWVtYmVyczoKKyAg
ICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBzdGF0aWMgY29uc3QgY2hhciogJXM7JyAl
IHVjZmlyc3QodHlwZV9tZW1iZXIubWVtYmVyX25hbWUpKQorCisgICAgICAgIGxpbmVzLmFwcGVu
ZCgnfTsnKQorICAgICAgICBsaW5lcy5hcHBlbmQoJycpCisgICAgICAgIHJldHVybiAnXG4nLmpv
aW4obGluZXMpCisKKyAgICBkZWYgX2dlbmVyYXRlX3N0cnVjdF9mb3JfZW51bV9kZWNsYXJhdGlv
bihzZWxmLCBlbnVtX2RlY2xhcmF0aW9uKToKKyAgICAgICAgbGluZXMgPSBbXQorICAgICAgICBs
aW5lcy5hcHBlbmQoJy8qICVzICovJyAlIGVudW1fZGVjbGFyYXRpb24uZGVzY3JpcHRpb24pCisg
ICAgICAgIGxpbmVzLmV4dGVuZChzZWxmLl9nZW5lcmF0ZV9zdHJ1Y3RfZm9yX2VudW1fdHlwZShl
bnVtX2RlY2xhcmF0aW9uLnR5cGVfbmFtZSwgZW51bV9kZWNsYXJhdGlvbi50eXBlKSkKKyAgICAg
ICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKKworICAgIGRlZiBfZ2VuZXJhdGVfc3RydWN0X2Zv
cl9hbm9ueW1vdXNfZW51bV9tZW1iZXIoc2VsZiwgZW51bV9tZW1iZXIpOgorICAgICAgICBkZWYg
YXBwbHlfaW5kZW50YXRpb24obGluZSk6CisgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgo
KCcjJywgJy8qJywgJyovJywgJy8vJykpIG9yIGxlbihsaW5lKSBpcyAwOgorICAgICAgICAgICAg
ICAgIHJldHVybiBsaW5lCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVy
biAnICAgICcgKyBsaW5lCisKKyAgICAgICAgaW5kZW50ZWRfbGluZXMgPSBtYXAoYXBwbHlfaW5k
ZW50YXRpb24sIHNlbGYuX2dlbmVyYXRlX3N0cnVjdF9mb3JfZW51bV90eXBlKGVudW1fbWVtYmVy
Lm1lbWJlcl9uYW1lLCBlbnVtX21lbWJlci50eXBlKSkKKyAgICAgICAgcmV0dXJuICdcbicuam9p
bihpbmRlbnRlZF9saW5lcykKKworICAgIGRlZiBfZ2VuZXJhdGVfc3RydWN0X2Zvcl9lbnVtX3R5
cGUoc2VsZiwgZW51bV9uYW1lLCBlbnVtX3R5cGUpOgorICAgICAgICBsaW5lcyA9IFtdCisgICAg
ICAgIGVudW1fbmFtZSA9IHVjZmlyc3QoZW51bV9uYW1lKQorICAgICAgICBsaW5lcy5hcHBlbmQo
J2VudW0gY2xhc3MgJXMgeycgJSBlbnVtX25hbWUpCisgICAgICAgIGZvciBlbnVtX3ZhbHVlIGlu
IGVudW1fdHlwZS5lbnVtX3ZhbHVlcygpOgorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAg
JXMgPSAlcywnICUgKEdlbmVyYXRvci5zdHlsaXplZF9uYW1lX2Zvcl9lbnVtX3ZhbHVlKGVudW1f
dmFsdWUpLCBzZWxmLmVuY29kaW5nX2Zvcl9lbnVtX3ZhbHVlKGVudW1fdmFsdWUpKSkKKyAgICAg
ICAgbGluZXMuYXBwZW5kKCd9OyAvLyBlbnVtIGNsYXNzICVzJyAlIGVudW1fbmFtZSkKKyAgICAg
ICAgcmV0dXJuIGxpbmVzICAjIFRoZSBjYWxsZXIgbWF5IHdhbnQgdG8gYWRqdXN0IGluZGVudGF0
aW9uLCBzbyBkb24ndCBqb2luIHRoZXNlIGxpbmVzLgorCisgICAgZGVmIF9nZW5lcmF0ZV9idWls
ZGVyX3N0YXRlX2VudW0oc2VsZiwgdHlwZV9kZWNsYXJhdGlvbik6CisgICAgICAgIGxpbmVzID0g
W10KKyAgICAgICAgcmVxdWlyZWRfbWVtYmVycyA9IGZpbHRlcihsYW1iZGEgbWVtYmVyOiBub3Qg
bWVtYmVyLmlzX29wdGlvbmFsLCB0eXBlX2RlY2xhcmF0aW9uLnR5cGVfbWVtYmVycykKKyAgICAg
ICAgZW51bV92YWx1ZXMgPSBbXQorCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGVudW0geycp
CisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBOb0ZpZWxkc1NldCA9IDAsJykKKyAgICAg
ICAgZm9yIGkgaW4gcmFuZ2UobGVuKHJlcXVpcmVkX21lbWJlcnMpKToKKyAgICAgICAgICAgIGVu
dW1fdmFsdWUgPSAiJXNTZXQiICUgdWNmaXJzdChyZXF1aXJlZF9tZW1iZXJzW2ldLm1lbWJlcl9u
YW1lKQorICAgICAgICAgICAgZW51bV92YWx1ZXMuYXBwZW5kKGVudW1fdmFsdWUpCisgICAgICAg
ICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgJXMgPSAxIDw8ICVkLCcgJSAoZW51bV92YWx1ZSwg
aSkpCisgICAgICAgIGlmIGxlbihlbnVtX3ZhbHVlcykgPiAwOgorICAgICAgICAgICAgbGluZXMu
YXBwZW5kKCcgICAgICAgIEFsbEZpZWxkc1NldCA9ICglcyknICUgJyB8ICcuam9pbihlbnVtX3Zh
bHVlcykpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAg
QWxsRmllbGRzU2V0ID0gMCcpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIH07JykKKyAgICAg
ICAgbGluZXMuYXBwZW5kKCcnKQorICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQorCisg
ICAgZGVmIF9nZW5lcmF0ZV9idWlsZGVyX3NldHRlcl9mb3JfbWVtYmVyKHNlbGYsIHR5cGVfbWVt
YmVyLCBkb21haW4pOgorICAgICAgICBzZXR0ZXJfYXJncyA9IHsKKyAgICAgICAgICAgICdjYW1l
bE5hbWUnOiB1Y2ZpcnN0KHR5cGVfbWVtYmVyLm1lbWJlcl9uYW1lKSwKKyAgICAgICAgICAgICdm
cmFtZXdvcmtQcmVmaXgnOiBzZWxmLm1vZGVsKCkuZnJhbWV3b3JrLnNldHRpbmcoJ3ByZWZpeCcp
LAorICAgICAgICAgICAgJ2tleWVkU2V0JzogR2VuZXJhdG9yLmtleWVkX3NldF9tZXRob2RfZm9y
X3R5cGUodHlwZV9tZW1iZXIudHlwZSksCisgICAgICAgICAgICAnbmFtZSc6IHR5cGVfbWVtYmVy
Lm1lbWJlcl9uYW1lLAorICAgICAgICAgICAgJ3BhcmFtZXRlclR5cGUnOiBHZW5lcmF0b3IudHlw
ZV9zdHJpbmdfZm9yX3R5cGVfbWVtYmVyKHR5cGVfbWVtYmVyKQorICAgICAgICB9CisKKyAgICAg
ICAgbGluZXMgPSBbXQorICAgICAgICBsaW5lcy5hcHBlbmQoJycpCisgICAgICAgIGxpbmVzLmFw
cGVuZCgnICAgICAgICBCdWlsZGVyPFNUQVRFIHwgJShjYW1lbE5hbWUpc1NldD4mIHNldCUoY2Ft
ZWxOYW1lKXMoJShwYXJhbWV0ZXJUeXBlKXMgdmFsdWUpJyAlIHNldHRlcl9hcmdzKQorICAgICAg
ICBsaW5lcy5hcHBlbmQoJyAgICAgICAgeycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmICUoY2FtZWxOYW1lKXNTZXQpLCBwcm9wZXJ0
eV8lKG5hbWUpc19hbHJlYWR5X3NldCk7JyAlIHNldHRlcl9hcmdzKQorCisgICAgICAgIGlmIGlz
aW5zdGFuY2UodHlwZV9tZW1iZXIudHlwZSwgRW51bVR5cGUpOgorICAgICAgICAgICAgbGluZXMu
YXBwZW5kKCcgICAgICAgICAgICBtX3Jlc3VsdC0+JShrZXllZFNldClzKEFTQ0lJTGl0ZXJhbCgi
JShuYW1lKXMiKSwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Z2V0JShmcmFtZXdvcmtQcmVmaXgp
c0VudW1Db25zdGFudFZhbHVlKHN0YXRpY19jYXN0PGludD4odmFsdWUpKSk7JyAlIHNldHRlcl9h
cmdzKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgICAg
ICBtX3Jlc3VsdC0+JShrZXllZFNldClzKEFTQ0lJTGl0ZXJhbCgiJShuYW1lKXMiKSwgdmFsdWUp
OycgJSBzZXR0ZXJfYXJncykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgICAgICByZXR1
cm4gY2FzdFN0YXRlPCUoY2FtZWxOYW1lKXNTZXQ+KCk7JyAlIHNldHRlcl9hcmdzKQorICAgICAg
ICBsaW5lcy5hcHBlbmQoJyAgICAgICAgfScpCisgICAgICAgIHJldHVybiAnXG4nLmpvaW4obGlu
ZXMpCisKKyAgICBkZWYgX2dlbmVyYXRlX3VuY2hlY2tlZF9zZXR0ZXJfZm9yX21lbWJlcihzZWxm
LCB0eXBlX21lbWJlciwgZG9tYWluKToKKyAgICAgICAgc2V0dGVyX2FyZ3MgPSB7CisgICAgICAg
ICAgICAnY2FtZWxOYW1lJzogdWNmaXJzdCh0eXBlX21lbWJlci5tZW1iZXJfbmFtZSksCisgICAg
ICAgICAgICAnZnJhbWV3b3JrUHJlZml4Jzogc2VsZi5tb2RlbCgpLmZyYW1ld29yay5zZXR0aW5n
KCdwcmVmaXgnKSwKKyAgICAgICAgICAgICdrZXllZFNldCc6IEdlbmVyYXRvci5rZXllZF9zZXRf
bWV0aG9kX2Zvcl90eXBlKHR5cGVfbWVtYmVyLnR5cGUpLAorICAgICAgICAgICAgJ25hbWUnOiB0
eXBlX21lbWJlci5tZW1iZXJfbmFtZSwKKyAgICAgICAgICAgICdwYXJhbWV0ZXJUeXBlJzogR2Vu
ZXJhdG9yLnR5cGVfc3RyaW5nX2Zvcl90eXBlX21lbWJlcih0eXBlX21lbWJlcikKKyAgICAgICAg
fQorCisgICAgICAgIGxpbmVzID0gW10KKyAgICAgICAgbGluZXMuYXBwZW5kKCcnKQorICAgICAg
ICBsaW5lcy5hcHBlbmQoJyAgICB2b2lkIHNldCUoY2FtZWxOYW1lKXMoJShwYXJhbWV0ZXJUeXBl
KXMgdmFsdWUpJyAlIHNldHRlcl9hcmdzKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICB7JykK
KyAgICAgICAgaWYgaXNpbnN0YW5jZSh0eXBlX21lbWJlci50eXBlLCBFbnVtVHlwZSk6CisgICAg
ICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgdGhpcy0+JShrZXllZFNldClzKEFTQ0lJTGl0
ZXJhbCgiJShuYW1lKXMiKSwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Z2V0JShmcmFtZXdvcmtQ
cmVmaXgpc0VudW1Db25zdGFudFZhbHVlKHN0YXRpY19jYXN0PGludD4odmFsdWUpKSk7JyAlIHNl
dHRlcl9hcmdzKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAg
ICAgIHRoaXMtPiUoa2V5ZWRTZXQpcyhBU0NJSUxpdGVyYWwoIiUobmFtZSlzIiksIHZhbHVlKTsn
ICUgc2V0dGVyX2FyZ3MpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIH0nKQorICAgICAgICBp
ZiB0eXBlX21lbWJlci5tZW1iZXJfbmFtZSBpbiBbJ3ZhbHVlJywgJ2FycmF5JywgJ3N0cmluZycs
ICdudW1iZXInLCAnaW50ZWdlciddOgorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgdXNp
bmcgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3RCYXNlOjpzZXQlczsnICUgdWNmaXJzdCh0eXBl
X21lbWJlci5tZW1iZXJfbmFtZSkpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJycpCisgICAg
ICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCisKKyAgICBkZWYgX2dlbmVyYXRlX2ZvcndhcmRf
ZGVjbGFyYXRpb25zX2Zvcl9iaW5kaW5nX3RyYWl0cyhzZWxmKToKKyAgICAgICAgIyBBIGxpc3Qg
b2YgKGJ1aWxkZXJfdHlwZSwgbmVlZHNfcnVudGltZV9jYXN0KQorICAgICAgICB0eXBlX2FyZ3Vt
ZW50cyA9IFtdCisKKyAgICAgICAgZm9yIGRvbWFpbiBpbiBzZWxmLmRvbWFpbnNfdG9fZ2VuZXJh
dGUoKToKKyAgICAgICAgICAgIGRlY2xhcmF0aW9uc190b19nZW5lcmF0ZSA9IGZpbHRlcihsYW1i
ZGEgZGVjbDogc2VsZi50eXBlX25lZWRzX3NoYXBlX2Fzc2VydGlvbnMoZGVjbC50eXBlKSwgZG9t
YWluLnR5cGVfZGVjbGFyYXRpb25zKQorCisgICAgICAgICAgICBmb3IgdHlwZV9kZWNsYXJhdGlv
biBpbiBkZWNsYXJhdGlvbnNfdG9fZ2VuZXJhdGU6CisgICAgICAgICAgICAgICAgZm9yIHR5cGVf
bWVtYmVyIGluIHR5cGVfZGVjbGFyYXRpb24udHlwZV9tZW1iZXJzOgorICAgICAgICAgICAgICAg
ICAgICBpZiBpc2luc3RhbmNlKHR5cGVfbWVtYmVyLnR5cGUsIEVudW1UeXBlKToKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHR5cGVfYXJndW1lbnRzLmFwcGVuZCgoR2VuZXJhdG9yLnR5cGVfYnVp
bGRlcl9zdHJpbmdfZm9yX3R5cGVfbWVtYmVyKHR5cGVfbWVtYmVyLCB0eXBlX2RlY2xhcmF0aW9u
KSwgRmFsc2UpKQorCisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh0eXBlX2RlY2xhcmF0
aW9uLnR5cGUsIE9iamVjdFR5cGUpOgorICAgICAgICAgICAgICAgICAgICB0eXBlX2FyZ3VtZW50
cy5hcHBlbmQoKEdlbmVyYXRvci50eXBlX2J1aWxkZXJfc3RyaW5nX2Zvcl90eXBlKHR5cGVfZGVj
bGFyYXRpb24udHlwZSksIEdlbmVyYXRvci50eXBlX25lZWRzX3J1bnRpbWVfY2FzdHModHlwZV9k
ZWNsYXJhdGlvbi50eXBlKSkpCisKKyAgICAgICAgc3RydWN0X2tleXdvcmRzID0gWydzdHJ1Y3Qn
XQorICAgICAgICBmdW5jdGlvbl9rZXl3b3JkcyA9IFsnc3RhdGljIHZvaWQnXQorICAgICAgICBl
eHBvcnRfbWFjcm8gPSBzZWxmLm1vZGVsKCkuZnJhbWV3b3JrLnNldHRpbmcoJ2V4cG9ydF9tYWNy
bycsIE5vbmUpCisgICAgICAgIGlmIGV4cG9ydF9tYWNybyBpcyBub3QgTm9uZToKKyAgICAgICAg
ICAgIHN0cnVjdF9rZXl3b3Jkcy5hcHBlbmQoZXhwb3J0X21hY3JvKQorICAgICAgICAgICAgZnVu
Y3Rpb25fa2V5d29yZHNbMToxXSA9IFtleHBvcnRfbWFjcm9dCisKKyAgICAgICAgbGluZXMgPSBb
XQorICAgICAgICBmb3IgYXJndW1lbnQgaW4gdHlwZV9hcmd1bWVudHM6CisgICAgICAgICAgICBs
aW5lcy5hcHBlbmQoJ3RlbXBsYXRlPD4gJXMgQmluZGluZ1RyYWl0czwlcz4geycgJSAoJyAnLmpv
aW4oc3RydWN0X2tleXdvcmRzKSwgYXJndW1lbnRbMF0pKQorICAgICAgICAgICAgaWYgYXJndW1l
bnRbMV06CisgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCdzdGF0aWMgUGFzc1JlZlB0cjwl
cz4gcnVudGltZUNhc3QoUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiB2YWx1
ZSk7JyAlIGFyZ3VtZW50WzBdKQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcjaWYgIUFTU0VS
VF9ESVNBQkxFRCcpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyVzIGFzc2VydFZhbHVlSGFz
RXhwZWN0ZWRUeXBlKEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUqKTsnICUgJyAnLmpvaW4oZnVu
Y3Rpb25fa2V5d29yZHMpKQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcjZW5kaWYgLy8gIUFT
U0VSVF9ESVNBQkxFRCcpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ307JykKKyAgICAgICAg
cmV0dXJuICdcbicuam9pbihsaW5lcykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX3R5cGVfYnVpbGRlcl9pbXBsZW1l
bnRhdGlvbi5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2Rl
Z2VuL2dlbmVyYXRlX3R5cGVfYnVpbGRlcl9pbXBsZW1lbnRhdGlvbi5weQpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43
NjdlMDY3NmU2NmJhMzMwZDg3ZWRkZjg2OGQ5MTYxY2Y1MGE1MzhlCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJh
dGVfdHlwZV9idWlsZGVyX2ltcGxlbWVudGF0aW9uLnB5CkBAIC0wLDAgKzEsMTg2IEBACisjIS91
c3IvYmluL2VudiBweXRob24KKyMgQ29weXJpZ2h0IChjKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChjKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
IyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworIyBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMg
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisKKworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCByZQoraW1wb3J0IHN0cmluZwor
Citmcm9tIGdlbmVyYXRvciBpbXBvcnQgR2VuZXJhdG9yLCB1Y2ZpcnN0Citmcm9tIHN0cmluZyBp
bXBvcnQgVGVtcGxhdGUKK2Zyb20gZ2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgR2VuZXJhdG9y
VGVtcGxhdGVzIGFzIFRlbXBsYXRlcworZnJvbSBtb2RlbHMgaW1wb3J0IEFsaWFzZWRUeXBlLCBB
cnJheVR5cGUsIEVudW1UeXBlLCBPYmplY3RUeXBlCisKK2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2Vy
KCdnbG9iYWwnKQorCisKK2NsYXNzIFR5cGVCdWlsZGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3Io
R2VuZXJhdG9yKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbW9kZWwsIGlucHV0X2ZpbGVwYXRo
KToKKyAgICAgICAgR2VuZXJhdG9yLl9faW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0
aCkKKworICAgIGRlZiBvdXRwdXRfZmlsZW5hbWUoc2VsZik6CisgICAgICAgIHJldHVybiAiSW5z
cGVjdG9yJXNUeXBlQnVpbGRlcnMuY3BwIiAlIHNlbGYubW9kZWwoKS5mcmFtZXdvcmsuc2V0dGlu
ZygncHJlZml4JykKKworICAgIGRlZiBnZW5lcmF0ZV9vdXRwdXQoc2VsZik6CisgICAgICAgIGRv
bWFpbnMgPSBzZWxmLmRvbWFpbnNfdG9fZ2VuZXJhdGUoKQorICAgICAgICBzZWxmLmNhbGN1bGF0
ZV90eXBlc19yZXF1aXJpbmdfc2hhcGVfYXNzZXJ0aW9ucyhkb21haW5zKQorCisgICAgICAgIHNl
Y29uZGFyeV9oZWFkZXJzID0gWyc8d3RmL3RleHQvQ1N0cmluZy5oPiddCisKKyAgICAgICAgc2Vj
dGlvbnMgPSBbXQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5nZW5lcmF0ZV9saWNlbnNl
KCkpCisgICAgICAgIGhlYWRlcl9hcmdzID0geworICAgICAgICAgICAgJ3ByaW1hcnlJbmNsdWRl
JzogJyJJbnNwZWN0b3Ilc1R5cGVCdWlsZGVycy5oIicgJSBzZWxmLm1vZGVsKCkuZnJhbWV3b3Jr
LnNldHRpbmcoJ3ByZWZpeCcpLAorICAgICAgICAgICAgJ3NlY29uZGFyeUluY2x1ZGVzJzogIlxu
Ii5qb2luKFsnI2luY2x1ZGUgJXMnICUgaGVhZGVyIGZvciBoZWFkZXIgaW4gc2Vjb25kYXJ5X2hl
YWRlcnNdKSwKKyAgICAgICAgICAgICdpbnB1dEZpbGVuYW1lJzogc2VsZi5faW5wdXRfZmlsZXBh
dGgKKyAgICAgICAgfQorCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0
ZXMuQ3BwSW1wbGVtZW50YXRpb25QcmVsdWRlKS5zdWJzdGl0dXRlKE5vbmUsICoqaGVhZGVyX2Fy
Z3MpKQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoJ25hbWVzcGFjZSBUeXBlQnVpbGRlciB7JykK
KyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2VudW1fbWFwcGluZygpKQor
ICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfb3Blbl9maWVsZF9uYW1lcygp
KQorICAgICAgICBidWlsZGVyX3NlY3Rpb25zID0gbWFwKHNlbGYuX2dlbmVyYXRlX2J1aWxkZXJz
X2Zvcl9kb21haW4sIGRvbWFpbnMpCisgICAgICAgIHNlY3Rpb25zLmV4dGVuZChmaWx0ZXIobGFt
YmRhIHNlY3Rpb246IGxlbihzZWN0aW9uKSA+IDAsIGJ1aWxkZXJfc2VjdGlvbnMpKQorICAgICAg
ICBzZWN0aW9ucy5hcHBlbmQoJ30gLy8gbmFtZXNwYWNlIFR5cGVCdWlsZGVyJykKKyAgICAgICAg
c2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKFRlbXBsYXRlcy5DcHBJbXBsZW1lbnRhdGlvblBvc3Rs
dWRlKS5zdWJzdGl0dXRlKE5vbmUsICoqaGVhZGVyX2FyZ3MpKQorCisgICAgICAgIHJldHVybiAi
XG5cbiIuam9pbihzZWN0aW9ucykKKworICAgICMgUHJpdmF0ZSBtZXRob2RzLgorCisgICAgZGVm
IF9nZW5lcmF0ZV9lbnVtX21hcHBpbmcoc2VsZik6CisgICAgICAgIGZyYW1ld29ya19wcmVmaXgg
PSBzZWxmLm1vZGVsKCkuZnJhbWV3b3JrLnNldHRpbmcoJ3ByZWZpeCcpCisgICAgICAgIGxpbmVz
ID0gW10KKworICAgICAgICBsaW5lcy5hcHBlbmQoJ3N0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBl
bnVtX2NvbnN0YW50X3ZhbHVlc1tdID0geycpCisgICAgICAgIGxpbmVzLmV4dGVuZChbJyAgICAi
JXMiLCcgJSBlbnVtX3ZhbHVlIGZvciBlbnVtX3ZhbHVlIGluIHNlbGYuYXNzaWduZWRfZW51bV92
YWx1ZXMoKV0pCisgICAgICAgIGxpbmVzLmFwcGVuZCgnfTsnKQorICAgICAgICBsaW5lcy5hcHBl
bmQoJycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnU3RyaW5nIGdldCVzRW51bUNvbnN0YW50VmFs
dWUoaW50IGNvZGUpIHsnICUgZnJhbWV3b3JrX3ByZWZpeCkKKyAgICAgICAgbGluZXMuYXBwZW5k
KCcgICAgcmV0dXJuIGVudW1fY29uc3RhbnRfdmFsdWVzW2NvZGVdOycpCisgICAgICAgIGxpbmVz
LmFwcGVuZCgnfScpCisKKyAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKKworICAgIGRl
ZiBfZ2VuZXJhdGVfb3Blbl9maWVsZF9uYW1lcyhzZWxmKToKKyAgICAgICAgbGluZXMgPSBbXQor
ICAgICAgICBmb3IgZG9tYWluIGluIHNlbGYuZG9tYWluc190b19nZW5lcmF0ZSgpOgorICAgICAg
ICAgICAgZm9yIHR5cGVfZGVjbGFyYXRpb24gaW4gZmlsdGVyKGxhbWJkYSBkZWNsOiBHZW5lcmF0
b3IudHlwZV9oYXNfb3Blbl9maWVsZHMoZGVjbC50eXBlKSwgZG9tYWluLnR5cGVfZGVjbGFyYXRp
b25zKToKKyAgICAgICAgICAgICAgICBmb3IgdHlwZV9tZW1iZXIgaW4gc29ydGVkKHR5cGVfZGVj
bGFyYXRpb24udHlwZV9tZW1iZXJzLCBrZXk9bGFtYmRhIG1lbWJlcjogbWVtYmVyLm1lbWJlcl9u
YW1lKToKKyAgICAgICAgICAgICAgICAgICAgZmllbGRfbmFtZSA9ICc6Oicuam9pbihbJ0luc3Bl
Y3RvcicsICdUeXBlQnVpbGRlcicsIGRvbWFpbi5kb21haW5fbmFtZSwgdWNmaXJzdCh0eXBlX2Rl
Y2xhcmF0aW9uLnR5cGVfbmFtZSksIHVjZmlyc3QodHlwZV9tZW1iZXIubWVtYmVyX25hbWUpXSkK
KyAgICAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCdjb25zdCBjaGFyKiAlcyA9ICIlcyI7
JyAlIChmaWVsZF9uYW1lLCB0eXBlX21lbWJlci5tZW1iZXJfbmFtZSkpCisKKyAgICAgICAgcmV0
dXJuICdcbicuam9pbihsaW5lcykKKworICAgIGRlZiBfZ2VuZXJhdGVfYnVpbGRlcnNfZm9yX2Rv
bWFpbihzZWxmLCBkb21haW4pOgorICAgICAgICBzZWN0aW9ucyA9IFtdCisgICAgICAgIGRlY2xh
cmF0aW9uc190b19nZW5lcmF0ZSA9IGZpbHRlcihsYW1iZGEgZGVjbDogc2VsZi50eXBlX25lZWRz
X3NoYXBlX2Fzc2VydGlvbnMoZGVjbC50eXBlKSwgZG9tYWluLnR5cGVfZGVjbGFyYXRpb25zKQor
CisgICAgICAgIGZvciB0eXBlX2RlY2xhcmF0aW9uIGluIGRlY2xhcmF0aW9uc190b19nZW5lcmF0
ZToKKyAgICAgICAgICAgIGZvciB0eXBlX21lbWJlciBpbiB0eXBlX2RlY2xhcmF0aW9uLnR5cGVf
bWVtYmVyczoKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHR5cGVfbWVtYmVyLnR5cGUs
IEVudW1UeXBlKToKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuX2dl
bmVyYXRlX2Fzc2VydGlvbl9mb3JfZW51bSh0eXBlX21lbWJlciwgdHlwZV9kZWNsYXJhdGlvbikp
CisKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodHlwZV9kZWNsYXJhdGlvbi50eXBlLCBPYmpl
Y3RUeXBlKToKKyAgICAgICAgICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVf
YXNzZXJ0aW9uX2Zvcl9vYmplY3RfZGVjbGFyYXRpb24odHlwZV9kZWNsYXJhdGlvbikpCisgICAg
ICAgICAgICAgICAgaWYgR2VuZXJhdG9yLnR5cGVfbmVlZHNfcnVudGltZV9jYXN0cyh0eXBlX2Rl
Y2xhcmF0aW9uLnR5cGUpOgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2Vs
Zi5fZ2VuZXJhdGVfcnVudGltZV9jYXN0X2Zvcl9vYmplY3RfZGVjbGFyYXRpb24odHlwZV9kZWNs
YXJhdGlvbikpCisKKyAgICAgICAgcmV0dXJuICdcblxuJy5qb2luKHNlY3Rpb25zKQorCisgICAg
ZGVmIF9nZW5lcmF0ZV9ydW50aW1lX2Nhc3RfZm9yX29iamVjdF9kZWNsYXJhdGlvbihzZWxmLCBv
YmplY3RfZGVjbGFyYXRpb24pOgorICAgICAgICBhcmdzID0geworICAgICAgICAgICAgJ29iamVj
dFR5cGUnOiBHZW5lcmF0b3IudHlwZV9idWlsZGVyX3N0cmluZ19mb3JfdHlwZShvYmplY3RfZGVj
bGFyYXRpb24udHlwZSkKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gVGVtcGxhdGUoVGVtcGxh
dGVzLlR5cGVCdWlsZGVyT2JqZWN0UnVudGltZUNhc3QpLnN1YnN0aXR1dGUoTm9uZSwgKiphcmdz
KQorCisgICAgZGVmIF9nZW5lcmF0ZV9hc3NlcnRpb25fZm9yX29iamVjdF9kZWNsYXJhdGlvbihz
ZWxmLCBvYmplY3RfZGVjbGFyYXRpb24pOgorICAgICAgICByZXF1aXJlZF9tZW1iZXJzID0gZmls
dGVyKGxhbWJkYSBtZW1iZXI6IG5vdCBtZW1iZXIuaXNfb3B0aW9uYWwsIG9iamVjdF9kZWNsYXJh
dGlvbi50eXBlX21lbWJlcnMpCisgICAgICAgIG9wdGlvbmFsX21lbWJlcnMgPSBmaWx0ZXIobGFt
YmRhIG1lbWJlcjogbWVtYmVyLmlzX29wdGlvbmFsLCBvYmplY3RfZGVjbGFyYXRpb24udHlwZV9t
ZW1iZXJzKQorICAgICAgICBzaG91bGRfY291bnRfcHJvcGVydGllcyA9IG5vdCBHZW5lcmF0b3Iu
dHlwZV9oYXNfb3Blbl9maWVsZHMob2JqZWN0X2RlY2xhcmF0aW9uLnR5cGUpCisgICAgICAgIGxp
bmVzID0gW10KKworICAgICAgICBsaW5lcy5hcHBlbmQoJyNpZiAhQVNTRVJUX0RJU0FCTEVEJykK
KyAgICAgICAgbGluZXMuYXBwZW5kKCd2b2lkIEJpbmRpbmdUcmFpdHM8JXM+Ojphc3NlcnRWYWx1
ZUhhc0V4cGVjdGVkVHlwZShJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlKiB2YWx1ZSknICUgKEdl
bmVyYXRvci50eXBlX2J1aWxkZXJfc3RyaW5nX2Zvcl90eXBlKG9iamVjdF9kZWNsYXJhdGlvbi50
eXBlKSkpCisgICAgICAgIGxpbmVzLmFwcGVuZCgiIiJ7CisgICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gb2JqZWN0OworICAgIGJvb2wgY2FzdFJlcyA9IHZhbHVlLT5hc09iamVjdCgmb2JqZWN0
KTsKKyAgICBBU1NFUlRfVU5VU0VEKGNhc3RSZXMsIGNhc3RSZXMpOyIiIikKKyAgICAgICAgZm9y
IHR5cGVfbWVtYmVyIGluIHJlcXVpcmVkX21lbWJlcnM6CisgICAgICAgICAgICBhcmdzID0gewor
ICAgICAgICAgICAgICAgICdtZW1iZXJOYW1lJzogdHlwZV9tZW1iZXIubWVtYmVyX25hbWUsCisg
ICAgICAgICAgICAgICAgJ2Fzc2VydE1ldGhvZCc6IEdlbmVyYXRvci5hc3NlcnRpb25fbWV0aG9k
X2Zvcl90eXBlX21lbWJlcih0eXBlX21lbWJlciwgb2JqZWN0X2RlY2xhcmF0aW9uKQorICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoIiIiICAgIHsKKyAgICAgICAgSW5z
cGVjdG9yT2JqZWN0OjppdGVyYXRvciAlKG1lbWJlck5hbWUpc1BvczsKKyAgICAgICAgJShtZW1i
ZXJOYW1lKXNQb3MgPSBvYmplY3QtPmZpbmQoIiUobWVtYmVyTmFtZSlzIik7CisgICAgICAgIEFT
U0VSVCglKG1lbWJlck5hbWUpc1BvcyAhPSBvYmplY3QtPmVuZCgpKTsKKyAgICAgICAgJShhc3Nl
cnRNZXRob2QpcyglKG1lbWJlck5hbWUpc1Bvcy0+dmFsdWUuZ2V0KCkpOworICAgIH0iIiIgJSBh
cmdzKQorCisgICAgICAgIGlmIHNob3VsZF9jb3VudF9wcm9wZXJ0aWVzOgorICAgICAgICAgICAg
bGluZXMuYXBwZW5kKCcnKQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgaW50IGZvdW5k
UHJvcGVydGllc0NvdW50ID0gJXM7JyAlIGxlbihyZXF1aXJlZF9tZW1iZXJzKSkKKworICAgICAg
ICBmb3IgdHlwZV9tZW1iZXIgaW4gb3B0aW9uYWxfbWVtYmVyczoKKyAgICAgICAgICAgIGFyZ3Mg
PSB7CisgICAgICAgICAgICAgICAgJ21lbWJlck5hbWUnOiB0eXBlX21lbWJlci5tZW1iZXJfbmFt
ZSwKKyAgICAgICAgICAgICAgICAnYXNzZXJ0TWV0aG9kJzogR2VuZXJhdG9yLmFzc2VydGlvbl9t
ZXRob2RfZm9yX3R5cGVfbWVtYmVyKHR5cGVfbWVtYmVyLCBvYmplY3RfZGVjbGFyYXRpb24pCisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgiIiIgICAgeworICAgICAg
ICBJbnNwZWN0b3JPYmplY3Q6Oml0ZXJhdG9yICUobWVtYmVyTmFtZSlzUG9zOworICAgICAgICAl
KG1lbWJlck5hbWUpc1BvcyA9IG9iamVjdC0+ZmluZCgiJShtZW1iZXJOYW1lKXMiKTsKKyAgICAg
ICAgaWYgKCUobWVtYmVyTmFtZSlzUG9zICE9IG9iamVjdC0+ZW5kKCkpIHsKKyAgICAgICAgICAg
ICUoYXNzZXJ0TWV0aG9kKXMoJShtZW1iZXJOYW1lKXNQb3MtPnZhbHVlLmdldCgpKTsiIiIgJSBh
cmdzKQorCisgICAgICAgICAgICBpZiBzaG91bGRfY291bnRfcHJvcGVydGllczoKKyAgICAgICAg
ICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgICAgICsrZm91bmRQcm9wZXJ0aWVzQ291bnQ7
JykKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICB9JykKKyAgICAgICAgICAgIGxp
bmVzLmFwcGVuZCgnICAgIH0nKQorCisgICAgICAgIGlmIHNob3VsZF9jb3VudF9wcm9wZXJ0aWVz
OgorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgaWYgKGZvdW5kUHJvcGVydGllc0NvdW50
ICE9IG9iamVjdC0+c2l6ZSgpKScpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAg
RkFUQUwoIlVuZXhwZWN0ZWQgcHJvcGVydGllcyBpbiBvYmplY3Q6ICVzXFxuIiwgb2JqZWN0LT50
b0pTT05TdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSk7JykKKyAgICAgICAgbGluZXMuYXBwZW5kKCd9
JykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcjZW5kaWYgLy8gIUFTU0VSVF9ESVNBQkxFRCcpCisg
ICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCisKKyAgICBkZWYgX2dlbmVyYXRlX2Fzc2Vy
dGlvbl9mb3JfZW51bShzZWxmLCBlbnVtX21lbWJlciwgb2JqZWN0X2RlY2xhcmF0aW9uKToKKyAg
ICAgICAgbGluZXMgPSBbXQorICAgICAgICBsaW5lcy5hcHBlbmQoJyNpZiAhQVNTRVJUX0RJU0FC
TEVEJykKKyAgICAgICAgbGluZXMuYXBwZW5kKCd2b2lkICVzKEluc3BlY3Rvcjo6SW5zcGVjdG9y
VmFsdWUqIHZhbHVlKScgJSBHZW5lcmF0b3IuYXNzZXJ0aW9uX21ldGhvZF9mb3JfdHlwZV9tZW1i
ZXIoZW51bV9tZW1iZXIsIG9iamVjdF9kZWNsYXJhdGlvbikpCisgICAgICAgIGxpbmVzLmFwcGVu
ZCgneycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIFdURjo6U3RyaW5nIHM7JykKKyAgICAg
ICAgbGluZXMuYXBwZW5kKCcgICAgYm9vbCBjYXN0X3JlcyA9IHZhbHVlLT5hc1N0cmluZygmcyk7
JykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgQVNTRVJUKGNhc3RfcmVzKTsnKQorCisgICAg
ICAgIGFzc2VydF9jb25kaXRpb24gPSAnIHx8ICcuam9pbihbJ3MgPT0gIiVzIicgJSBlbnVtX3Zh
bHVlIGZvciBlbnVtX3ZhbHVlIGluIGVudW1fbWVtYmVyLnR5cGUuZW51bV92YWx1ZXMoKV0pCisg
ICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIEFTU0VSVCglcyk7JyAlIGFzc2VydF9jb25kaXRpb24p
CisgICAgICAgIGxpbmVzLmFwcGVuZCgnfScpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnI2VuZGlm
IC8vICFBU1NFUlRfRElTQUJMRUQnKQorCisgICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29k
ZWdlbi9nZW5lcmF0b3IucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvY29kZWdlbi9nZW5lcmF0b3IucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWU5OGIyMTBmMDMxNmI4YzA3YWZi
ZjA2NTY4NzA5MmRhNzZlMWQyNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRvci5weQpAQCAtMCwwICsxLDQ5
MiBAQAorIyBDb3B5cmlnaHQgKGMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorIyBDb3B5cmlnaHQgKGMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6Cisj
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisjIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKwor
aW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBvcy5wYXRoCitpbXBvcnQgcmUKK2Zyb20gc3RyaW5nIGlt
cG9ydCBUZW1wbGF0ZQorCitmcm9tIGdlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IEdlbmVyYXRv
clRlbXBsYXRlcyBhcyBUZW1wbGF0ZXMKK2Zyb20gbW9kZWxzIGltcG9ydCBQcmltaXRpdmVUeXBl
LCBPYmplY3RUeXBlLCBBcnJheVR5cGUsIEVudW1UeXBlLCBBbGlhc2VkVHlwZQorCitsb2cgPSBs
b2dnaW5nLmdldExvZ2dlcignZ2xvYmFsJykKKworCitkZWYgdWNmaXJzdChzdHIpOgorICAgIHJl
dHVybiBzdHJbOjFdLnVwcGVyKCkgKyBzdHJbMTpdCisKK19QUklNSVRJVkVfVE9fQ1BQX05BTUVf
TUFQID0geworICAgICdib29sZWFuJzogJ2Jvb2wnLAorICAgICdpbnRlZ2VyJzogJ2ludCcsCisg
ICAgJ251bWJlcic6ICdkb3VibGUnLAorICAgICdzdHJpbmcnOiAnU3RyaW5nJywKKyAgICAnb2Jq
ZWN0JzogJ0luc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0JywKKyAgICAnYW55JzogJ0luc3BlY3Rv
cjo6SW5zcGVjdG9yVmFsdWUnCit9CisKKyMgRklYTUU6IFRoaXMgc2hvdWxkIGJlIGNvbnZlcnRl
ZCBpbnRvIGEgcHJvcGVydHkgb24gdGhlIGRvbWFpbiBpbiBKU09OLgorX0RPTUFJTl9UT19DUFBf
R1VBUkRfTUFQID0geworICAgICdEYXRhYmFzZSc6ICJFTkFCTEUoU1FMX0RBVEFCQVNFKSIsCisg
ICAgJ0luZGV4ZWREQic6ICJFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkiLAorICAgICdSZXBsYXkn
OiAiRU5BQkxFKFdFQl9SRVBMQVkpIiwKK30KKworX0FMV0FZU19VUFBFUkNBU0VEX0VOVU1fVkFM
VUVfU1VCU1RSSU5HUyA9IHNldChbJ0FQSScsICdDU1MnLCAnRE9NJywgJ0hUTUwnLCAnWEhSJywg
J1hNTCddKQorCisjIFRoZXNlIG9iamVjdHMgYXJlIGJ1aWx0IG1hbnVhbGx5IGJ5IGNyZWF0aW5n
IGFuZCBzZXR0aW5nIEluc3BlY3RvclZhbHVlcy4KKyMgQmVmb3JlIHNlbmRpbmcgdGhlc2Ugb3Zl
ciB0aGUgcHJvdG9jb2wsIHRoZWlyIHNoYXBlcyBhcmUgY2hlY2tlZCBhZ2FpbnN0IHRoZSBzcGVj
aWZpY2F0aW9uLgorIyBTbywgYW55IHR5cGVzIHJlZmVyZW5jZWQgYnkgdGhlc2UgdHlwZXMgcmVx
dWlyZSBkZWJ1Zy1vbmx5IGFzc2VydGlvbnMgdGhhdCBjaGVjayB2YWx1ZXMuCisjIENhbGN1bGF0
aW5nIG5lY2Vzc2FyeSBhc3NlcnRpb25zIGlzIGFubm95aW5nLCBhbmQgYWRkcyBhIGxvdCBvZiBj
b21wbGV4aXR5IHRvIHRoZSBnZW5lcmF0b3IuCisKKyMgRklYTUU6IFRoaXMgc2hvdWxkIGJlIGNv
bnZlcnRlZCBpbnRvIGEgcHJvcGVydHkgaW4gSlNPTi4KK19UWVBFU19ORUVESU5HX1JVTlRJTUVf
Q0FTVFMgPSBzZXQoWworICAgICJSdW50aW1lLlJlbW90ZU9iamVjdCIsCisgICAgIlJ1bnRpbWUu
UHJvcGVydHlEZXNjcmlwdG9yIiwKKyAgICAiUnVudGltZS5JbnRlcm5hbFByb3BlcnR5RGVzY3Jp
cHRvciIsCisgICAgIkRlYnVnZ2VyLkZ1bmN0aW9uRGV0YWlscyIsCisgICAgIkRlYnVnZ2VyLkNh
bGxGcmFtZSIsCisgICAgIkNhbnZhcy5UcmFjZUxvZyIsCisgICAgIkNhbnZhcy5SZXNvdXJjZUlu
Zm8iLAorICAgICJDYW52YXMuUmVzb3VyY2VTdGF0ZSIsCisgICAgIyBUaGlzIHNob3VsZCBiZSBh
IHRlbXBvcmFyeSBoYWNrLiBUaW1lbGluZUV2ZW50IHNob3VsZCBiZSBjcmVhdGVkIHZpYSBnZW5l
cmF0ZWQgQysrIEFQSS4KKyAgICAiVGltZWxpbmUuVGltZWxpbmVFdmVudCIsCisgICAgIyBGb3Ig
dGVzdGluZyBwdXJwb3NlcyBvbmx5LgorICAgICJUZXN0LlR5cGVOZWVkaW5nQ2FzdCIKK10pCisK
KyMgRklYTUU6IFRoaXMgc2hvdWxkIGJlIGNvbnZlcnRlZCBpbnRvIGEgcHJvcGVydHkgaW4gSlNP
Ti4KK19UWVBFU19XSVRIX09QRU5fRklFTERTID0gc2V0KFsKKyAgICAiVGltZWxpbmUuVGltZWxp
bmVFdmVudCIsCisgICAgIyBJbnNwZWN0b3JTdHlsZVNoZWV0IG5vdCBvbmx5IGNyZWF0ZXMgdGhp
cyBwcm9wZXJ0eSBidXQgd2FudHMgdG8gcmVhZCBpdCBhbmQgbW9kaWZ5IGl0LgorICAgICJDU1Mu
Q1NTUHJvcGVydHkiLAorICAgICMgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudCBuZWVkcyB0byB1cGRh
dGUgbWltZS10eXBlLgorICAgICJOZXR3b3JrLlJlc3BvbnNlIiwKKyAgICAjIEZvciB0ZXN0aW5n
IHB1cnBvc2VzIG9ubHkuCisgICAgIlRlc3QuT3BlblBhcmFtZXRlckJ1bmRsZSIKK10pCisKKwor
Y2xhc3MgR2VuZXJhdG9yOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmls
ZXBhdGgpOgorICAgICAgICBzZWxmLl9tb2RlbCA9IG1vZGVsCisgICAgICAgIHNlbGYuX2lucHV0
X2ZpbGVwYXRoID0gaW5wdXRfZmlsZXBhdGgKKworICAgIGRlZiBtb2RlbChzZWxmKToKKyAgICAg
ICAgcmV0dXJuIHNlbGYuX21vZGVsCisKKyAgICBkZWYgZ2VuZXJhdGVfbGljZW5zZShzZWxmKToK
KyAgICAgICAgcmV0dXJuIFRlbXBsYXRlKFRlbXBsYXRlcy5Db3B5cmlnaHRCbG9jaykuc3Vic3Rp
dHV0ZShOb25lLCBpbnB1dEZpbGVuYW1lPW9zLnBhdGguYmFzZW5hbWUoc2VsZi5faW5wdXRfZmls
ZXBhdGgpKQorCisgICAgZGVmIGRvbWFpbnNfdG9fZ2VuZXJhdGUoc2VsZik6CisgICAgICAgIHJl
dHVybiBmaWx0ZXIobGFtYmRhIGRvbWFpbjogbm90IGRvbWFpbi5pc19zdXBwbGVtZW50YWwsIHNl
bGYubW9kZWwoKS5kb21haW5zKQorCisgICAgIyBUaGVzZSB0d28gbWV0aG9kcyBhcmUgb3ZlcnJp
ZGRlbiBieSBzdWJjbGFzc2VzLgorICAgIGRlZiBnZW5lcmF0ZV9vdXRwdXQoc2VsZik6CisgICAg
ICAgIHBhc3MKKworICAgIGRlZiBvdXRwdXRfZmlsZW5hbWUoc2VsZik6CisgICAgICAgIHBhc3MK
KworICAgIGRlZiBlbmNvZGluZ19mb3JfZW51bV92YWx1ZShzZWxmLCBlbnVtX3ZhbHVlKToKKyAg
ICAgICAgaWYgbm90IGhhc2F0dHIoc2VsZiwgIl9hc3NpZ25lZF9lbnVtX3ZhbHVlcyIpOgorICAg
ICAgICAgICAgc2VsZi5fdHJhdmVyc2VfYW5kX2Fzc2lnbl9lbnVtX3ZhbHVlcygpCisKKyAgICAg
ICAgcmV0dXJuIHNlbGYuX2VudW1fdmFsdWVfZW5jb2RpbmdzW2VudW1fdmFsdWVdCisKKyAgICBk
ZWYgYXNzaWduZWRfZW51bV92YWx1ZXMoc2VsZik6CisgICAgICAgIGlmIG5vdCBoYXNhdHRyKHNl
bGYsICJfYXNzaWduZWRfZW51bV92YWx1ZXMiKToKKyAgICAgICAgICAgIHNlbGYuX3RyYXZlcnNl
X2FuZF9hc3NpZ25fZW51bV92YWx1ZXMoKQorCisgICAgICAgIHJldHVybiBzZWxmLl9hc3NpZ25l
ZF9lbnVtX3ZhbHVlc1s6XSAgIyBTbGljZS4KKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYg
dHlwZV9uZWVkc19ydW50aW1lX2Nhc3RzKF90eXBlKToKKyAgICAgICAgcmV0dXJuIF90eXBlLnF1
YWxpZmllZF9uYW1lKCkgaW4gX1RZUEVTX05FRURJTkdfUlVOVElNRV9DQVNUUworCisgICAgQHN0
YXRpY21ldGhvZAorICAgIGRlZiB0eXBlX2hhc19vcGVuX2ZpZWxkcyhfdHlwZSk6CisgICAgICAg
IHJldHVybiBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpIGluIF9UWVBFU19XSVRIX09QRU5fRklFTERT
CisKKyAgICBkZWYgdHlwZV9uZWVkc19zaGFwZV9hc3NlcnRpb25zKHNlbGYsIF90eXBlKToKKyAg
ICAgICAgaWYgbm90IGhhc2F0dHIoc2VsZiwgIl90eXBlc19uZWVkaW5nX3NoYXBlX2Fzc2VydGlv
bnMiKToKKyAgICAgICAgICAgIHNlbGYuY2FsY3VsYXRlX3R5cGVzX3JlcXVpcmluZ19zaGFwZV9h
c3NlcnRpb25zKHNlbGYubW9kZWwoKS5kb21haW5zKQorCisgICAgICAgIHJldHVybiBfdHlwZSBp
biBzZWxmLl90eXBlc19uZWVkaW5nX3NoYXBlX2Fzc2VydGlvbnMKKworICAgICMgVG8gcmVzdHJp
Y3QgdGhlIGRvbWFpbnMgb3ZlciB3aGljaCB3ZSBjb21wdXRlIHR5cGVzIG5lZWRpbmcgYXNzZXJ0
aW9ucywgY2FsbCB0aGlzIG1ldGhvZAorICAgICMgYmVmb3JlIGdlbmVyYXRpbmcgYW55IG91dHB1
dCB3aXRoIHRoZSBkZXNpcmVkIGRvbWFpbnMgcGFyYW1ldGVyLiBUaGUgY29tcHV0ZWQKKyAgICAj
IHNldCBvZiB0eXBlcyB3aWxsIG5vdCBiZSBhdXRvbWF0aWNhbGx5IHJlZ2VuZXJhdGVkIG9uIHN1
YnNlcXVlbnQgY2FsbHMgdG8KKyAgICAjIEdlbmVyYXRvci50eXBlc19uZWVkaW5nX3NoYXBlX2Fz
c2VydGlvbnMoKS4KKyAgICBkZWYgY2FsY3VsYXRlX3R5cGVzX3JlcXVpcmluZ19zaGFwZV9hc3Nl
cnRpb25zKHNlbGYsIGRvbWFpbnMpOgorICAgICAgICBkb21haW5fbmFtZXMgPSBtYXAobGFtYmRh
IGRvbWFpbjogZG9tYWluLmRvbWFpbl9uYW1lLCBkb21haW5zKQorICAgICAgICBsb2cuZGVidWco
Ij4gQ2FsY3VsYXRpbmcgdHlwZXMgdGhhdCBuZWVkIHNoYXBlIGFzc2VydGlvbnMgKGVsaWdpYmxl
IGRvbWFpbnM6ICVzKSIgJSAiLCAiLmpvaW4oZG9tYWluX25hbWVzKSkKKworICAgICAgICAjIE11
dGF0ZXMgdGhlIHBhc3NlZC1pbiBzZXQ7IHRoaXMgc2ltcGxpZmllcyBjaGVja3MgdG8gcHJldmVu
dCBpbmZpbml0ZSByZWN1cnNpb24uCisgICAgICAgIGRlZiBnYXRoZXJfdHJhbnNpdGl2ZWx5X3Jl
ZmVyZW5jZWRfdHlwZXModHlwZSwgZ2F0aGVyZWRfdHlwZXMpOgorICAgICAgICAgICAgaWYgdHlw
ZSBpbiBnYXRoZXJlZF90eXBlczoKKyAgICAgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAg
ICAgaWYgaXNpbnN0YW5jZSh0eXBlLCBPYmplY3RUeXBlKToKKyAgICAgICAgICAgICAgICBsb2cu
ZGVidWcoIj4gQWRkaW5nIHR5cGUgJXMgdG8gbGlzdCBvZiB0eXBlcyBuZWVkaW5nIHNoYXBlIGFz
c2VydGlvbnMuIiAlIHR5cGUucXVhbGlmaWVkX25hbWUoKSkKKyAgICAgICAgICAgICAgICBnYXRo
ZXJlZF90eXBlcy5hZGQodHlwZSkKKyAgICAgICAgICAgICAgICBmb3IgdHlwZV9tZW1iZXIgaW4g
dHlwZS5tZW1iZXJzOgorICAgICAgICAgICAgICAgICAgICBnYXRoZXJfdHJhbnNpdGl2ZWx5X3Jl
ZmVyZW5jZWRfdHlwZXModHlwZV9tZW1iZXIudHlwZSwgZ2F0aGVyZWRfdHlwZXMpCisgICAgICAg
ICAgICBlbGlmIGlzaW5zdGFuY2UodHlwZSwgRW51bVR5cGUpOgorICAgICAgICAgICAgICAgIGxv
Zy5kZWJ1ZygiPiBBZGRpbmcgdHlwZSAlcyB0byBsaXN0IG9mIHR5cGVzIG5lZWRpbmcgc2hhcGUg
YXNzZXJ0aW9ucy4iICUgdHlwZS5xdWFsaWZpZWRfbmFtZSgpKQorICAgICAgICAgICAgICAgIGdh
dGhlcmVkX3R5cGVzLmFkZCh0eXBlKQorICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHR5cGUs
IEFsaWFzZWRUeXBlKToKKyAgICAgICAgICAgICAgICBnYXRoZXJfdHJhbnNpdGl2ZWx5X3JlZmVy
ZW5jZWRfdHlwZXModHlwZS5hbGlhc2VkX3R5cGUsIGdhdGhlcmVkX3R5cGVzKQorICAgICAgICAg
ICAgZWxpZiBpc2luc3RhbmNlKHR5cGUsIEFycmF5VHlwZSk6CisgICAgICAgICAgICAgICAgZ2F0
aGVyX3RyYW5zaXRpdmVseV9yZWZlcmVuY2VkX3R5cGVzKHR5cGUuZWxlbWVudF90eXBlLCBnYXRo
ZXJlZF90eXBlcykKKworICAgICAgICBmb3VuZF90eXBlcyA9IHNldCgpCisgICAgICAgIGZvciBk
b21haW4gaW4gZG9tYWluczoKKyAgICAgICAgICAgIGZvciBkZWNsYXJhdGlvbiBpbiBkb21haW4u
dHlwZV9kZWNsYXJhdGlvbnM6CisgICAgICAgICAgICAgICAgaWYgZGVjbGFyYXRpb24udHlwZS5x
dWFsaWZpZWRfbmFtZSgpIGluIF9UWVBFU19ORUVESU5HX1JVTlRJTUVfQ0FTVFM6CisgICAgICAg
ICAgICAgICAgICAgIGxvZy5kZWJ1ZygiPiBHYXRoZXJpbmcgdHlwZXMgcmVmZXJlbmNlZCBieSAl
cyB0byBnZW5lcmF0ZSBzaGFwZSBhc3NlcnRpb25zLiIgJSBkZWNsYXJhdGlvbi50eXBlLnF1YWxp
ZmllZF9uYW1lKCkpCisgICAgICAgICAgICAgICAgICAgIGdhdGhlcl90cmFuc2l0aXZlbHlfcmVm
ZXJlbmNlZF90eXBlcyhkZWNsYXJhdGlvbi50eXBlLCBmb3VuZF90eXBlcykKKworICAgICAgICBz
ZWxmLl90eXBlc19uZWVkaW5nX3NoYXBlX2Fzc2VydGlvbnMgPSBmb3VuZF90eXBlcworCisgICAg
IyBQcml2YXRlIGhlbHBlciBpbnN0YW5jZSBtZXRob2RzLgorICAgIGRlZiBfdHJhdmVyc2VfYW5k
X2Fzc2lnbl9lbnVtX3ZhbHVlcyhzZWxmKToKKyAgICAgICAgc2VsZi5fZW51bV92YWx1ZV9lbmNv
ZGluZ3MgPSB7fQorICAgICAgICBzZWxmLl9hc3NpZ25lZF9lbnVtX3ZhbHVlcyA9IFtdCisgICAg
ICAgIGFsbF90eXBlcyA9IFtdCisKKyAgICAgICAgZG9tYWlucyA9IHNlbGYuZG9tYWluc190b19n
ZW5lcmF0ZSgpCisKKyAgICAgICAgZm9yIF9kb21haW4gaW4gZG9tYWluczoKKyAgICAgICAgICAg
IGZvciBfdHlwZV9kZWNsYXJhdGlvbiBpbiBfZG9tYWluLnR5cGVfZGVjbGFyYXRpb25zOgorICAg
ICAgICAgICAgICAgIGFsbF90eXBlcy5hcHBlbmQoX3R5cGVfZGVjbGFyYXRpb24udHlwZSkKKyAg
ICAgICAgICAgICAgICBmb3IgX3R5cGVfbWVtYmVyIGluIF90eXBlX2RlY2xhcmF0aW9uLnR5cGVf
bWVtYmVyczoKKyAgICAgICAgICAgICAgICAgICAgYWxsX3R5cGVzLmFwcGVuZChfdHlwZV9tZW1i
ZXIudHlwZSkKKworICAgICAgICBmb3IgX2RvbWFpbiBpbiBkb21haW5zOgorICAgICAgICAgICAg
Zm9yIF9ldmVudCBpbiBfZG9tYWluLmV2ZW50czoKKyAgICAgICAgICAgICAgICBhbGxfdHlwZXMu
ZXh0ZW5kKFtwYXJhbWV0ZXIudHlwZSBmb3IgcGFyYW1ldGVyIGluIF9ldmVudC5ldmVudF9wYXJh
bWV0ZXJzXSkKKworICAgICAgICBmb3IgX2RvbWFpbiBpbiBkb21haW5zOgorICAgICAgICAgICAg
Zm9yIF9jb21tYW5kIGluIF9kb21haW4uY29tbWFuZHM6CisgICAgICAgICAgICAgICAgYWxsX3R5
cGVzLmV4dGVuZChbcGFyYW1ldGVyLnR5cGUgZm9yIHBhcmFtZXRlciBpbiBfY29tbWFuZC5jYWxs
X3BhcmFtZXRlcnNdKQorICAgICAgICAgICAgICAgIGFsbF90eXBlcy5leHRlbmQoW3BhcmFtZXRl
ci50eXBlIGZvciBwYXJhbWV0ZXIgaW4gX2NvbW1hbmQucmV0dXJuX3BhcmFtZXRlcnNdKQorCisg
ICAgICAgIGZvciBfdHlwZSBpbiBhbGxfdHlwZXM6CisgICAgICAgICAgICBpZiBub3QgaXNpbnN0
YW5jZShfdHlwZSwgRW51bVR5cGUpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAg
ICAgICBtYXAoc2VsZi5fYXNzaWduX2VuY29kaW5nX2Zvcl9lbnVtX3ZhbHVlLCBfdHlwZS5lbnVt
X3ZhbHVlcygpKQorCisgICAgZGVmIF9hc3NpZ25fZW5jb2RpbmdfZm9yX2VudW1fdmFsdWUoc2Vs
ZiwgZW51bV92YWx1ZSk6CisgICAgICAgIGlmIGVudW1fdmFsdWUgaW4gc2VsZi5fZW51bV92YWx1
ZV9lbmNvZGluZ3M6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBzZWxmLl9lbnVtX3Zh
bHVlX2VuY29kaW5nc1tlbnVtX3ZhbHVlXSA9IGxlbihzZWxmLl9hc3NpZ25lZF9lbnVtX3ZhbHVl
cykKKyAgICAgICAgc2VsZi5fYXNzaWduZWRfZW51bV92YWx1ZXMuYXBwZW5kKGVudW1fdmFsdWUp
CisKKyAgICAjIE1pc2NlbGxhbmVvdXMgdGV4dCBtYW5pcHVsYXRpb24gcm91dGluZXMuCisgICAg
QHN0YXRpY21ldGhvZAorICAgIGRlZiB3cmFwX3dpdGhfZ3VhcmRfZm9yX2RvbWFpbihkb21haW4s
IHRleHQpOgorICAgICAgICBndWFyZCA9IF9ET01BSU5fVE9fQ1BQX0dVQVJEX01BUC5nZXQoZG9t
YWluLmRvbWFpbl9uYW1lKQorICAgICAgICBpZiBndWFyZCBpcyBub3QgTm9uZToKKyAgICAgICAg
ICAgIGxpbmVzID0gWworICAgICAgICAgICAgICAgICcjaWYgJXMnICUgZ3VhcmQsCisgICAgICAg
ICAgICAgICAgdGV4dCwKKyAgICAgICAgICAgICAgICAnI2VuZGlmIC8vICVzJyAlIGd1YXJkCisg
ICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKKyAg
ICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiB0ZXh0CisKKyAgICBAc3RhdGljbWV0aG9k
CisgICAgZGVmIHN0eWxpemVkX25hbWVfZm9yX2VudW1fdmFsdWUoZW51bV92YWx1ZSk6CisgICAg
ICAgIHJlZ2V4ID0gJyglcyknICUgInwiLmpvaW4oX0FMV0FZU19VUFBFUkNBU0VEX0VOVU1fVkFM
VUVfU1VCU1RSSU5HUykKKworICAgICAgICBkZWYgcmVwbGFjZUNhbGxiYWNrKG1hdGNoKToKKyAg
ICAgICAgICAgIHJldHVybiBtYXRjaC5ncm91cCgxKS51cHBlcigpCisKKyAgICAgICAgIyBTcGxp
dCBvbiBoeXBoZW4sIGludHJvZHVjZSBjYW1lbGNhc2UsIGFuZCBmb3JjZSB1cHBlcmNhc2luZyBv
ZiBhY3Jvbnltcy4KKyAgICAgICAgc3Vid29yZHMgPSBtYXAodWNmaXJzdCwgZW51bV92YWx1ZS5z
cGxpdCgnLScpKQorICAgICAgICByZXR1cm4gcmUuc3ViKHJlZ2V4LCByZXBsYWNlQ2FsbGJhY2ss
ICIiLmpvaW4oc3Vid29yZHMpLCBmbGFncz1yZS5JR05PUkVDQVNFKQorCisgICAgQHN0YXRpY21l
dGhvZAorICAgIGRlZiBrZXllZF9nZXRfbWV0aG9kX2Zvcl90eXBlKHR5cGUpOgorICAgICAgICBp
ZiBpc2luc3RhbmNlKHR5cGUsIE9iamVjdFR5cGUpOgorICAgICAgICAgICAgcmV0dXJuICdnZXRP
YmplY3QnCisgICAgICAgIGlmIGlzaW5zdGFuY2UodHlwZSwgQXJyYXlUeXBlKToKKyAgICAgICAg
ICAgIHJldHVybiAnZ2V0QXJyYXknCisgICAgICAgIGlmIGlzaW5zdGFuY2UodHlwZSwgUHJpbWl0
aXZlVHlwZSk6CisgICAgICAgICAgICBpZiB0eXBlLnJhd19uYW1lKCkgaXMgJ2ludGVnZXInOgor
ICAgICAgICAgICAgICAgIHJldHVybiAnZ2V0SW50JworICAgICAgICAgICAgZWxzZToKKyAgICAg
ICAgICAgICAgICByZXR1cm4gJ2dldCcgKyB1Y2ZpcnN0KHR5cGUucmF3X25hbWUoKSkKKyAgICAg
ICAgaWYgaXNpbnN0YW5jZSh0eXBlLCBBbGlhc2VkVHlwZSk6CisgICAgICAgICAgICByZXR1cm4g
R2VuZXJhdG9yLmtleWVkX2dldF9tZXRob2RfZm9yX3R5cGUodHlwZS5hbGlhc2VkX3R5cGUpCisg
ICAgICAgIGlmIGlzaW5zdGFuY2UodHlwZSwgRW51bVR5cGUpOgorICAgICAgICAgICAgcmV0dXJu
IEdlbmVyYXRvci5rZXllZF9nZXRfbWV0aG9kX2Zvcl90eXBlKHR5cGUucHJpbWl0aXZlX3R5cGUp
CisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGtleWVkX3NldF9tZXRob2RfZm9yX3R5cGUo
dHlwZSk6CisgICAgICAgIGlmIGlzaW5zdGFuY2UodHlwZSwgT2JqZWN0VHlwZSkgb3IgaXNpbnN0
YW5jZSh0eXBlLCBBcnJheVR5cGUpOgorICAgICAgICAgICAgcmV0dXJuICdzZXRWYWx1ZScKKyAg
ICAgICAgaWYgaXNpbnN0YW5jZSh0eXBlLCBQcmltaXRpdmVUeXBlKToKKyAgICAgICAgICAgIGlm
IHR5cGUucmF3X25hbWUoKSBpbiBbJ2ludGVnZXInLCAnbnVtYmVyJ106CisgICAgICAgICAgICAg
ICAgcmV0dXJuICdzZXROdW1iZXInCisgICAgICAgICAgICBlbGlmIHR5cGUucmF3X25hbWUoKSBp
biBbJ2FueSddOgorICAgICAgICAgICAgICAgIHJldHVybiAnc2V0VmFsdWUnCisgICAgICAgICAg
ICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiAnc2V0JyArIHVjZmlyc3QodHlwZS5yYXdf
bmFtZSgpKQorICAgICAgICBpZiBpc2luc3RhbmNlKHR5cGUsIEFsaWFzZWRUeXBlKToKKyAgICAg
ICAgICAgIHJldHVybiBHZW5lcmF0b3Iua2V5ZWRfc2V0X21ldGhvZF9mb3JfdHlwZSh0eXBlLmFs
aWFzZWRfdHlwZSkKKyAgICAgICAgaWYgaXNpbnN0YW5jZSh0eXBlLCBFbnVtVHlwZSk6CisgICAg
ICAgICAgICByZXR1cm4gR2VuZXJhdG9yLmtleWVkX3NldF9tZXRob2RfZm9yX3R5cGUodHlwZS5w
cmltaXRpdmVfdHlwZSkKKworICAgICMgR2VuZXJhdGUgdHlwZSByZXByZXNlbnRhdGlvbnMgZm9y
IHZhcmlvdXMgc2l0dWF0aW9ucy4KKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIHR5cGVfYnVp
bGRlcl9zdHJpbmdfZm9yX3R5cGUodHlwZSk6CisgICAgICAgIGlmIGlzaW5zdGFuY2UodHlwZSwg
T2JqZWN0VHlwZSkgYW5kIGxlbih0eXBlLm1lbWJlcnMpID09IDA6CisgICAgICAgICAgICByZXR1
cm4gJ0luc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0JworICAgICAgICBpZiBpc2luc3RhbmNlKHR5
cGUsIChPYmplY3RUeXBlLCBBbGlhc2VkVHlwZSwgRW51bVR5cGUpKToKKyAgICAgICAgICAgIHJl
dHVybiAnSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6JXM6OiVzJyAlICh0eXBlLnR5cGVfZG9tYWlu
KCkuZG9tYWluX25hbWUsIHR5cGUucmF3X25hbWUoKSkKKyAgICAgICAgaWYgaXNpbnN0YW5jZSh0
eXBlLCBBcnJheVR5cGUpOgorICAgICAgICAgICAgcmV0dXJuICdJbnNwZWN0b3I6OlR5cGVCdWls
ZGVyOjpBcnJheTwlcz4nICUgR2VuZXJhdG9yLnR5cGVfYnVpbGRlcl9zdHJpbmdfZm9yX3R5cGUo
dHlwZS5lbGVtZW50X3R5cGUpCisgICAgICAgIGlmIGlzaW5zdGFuY2UodHlwZSwgUHJpbWl0aXZl
VHlwZSk6CisgICAgICAgICAgICByZXR1cm4gR2VuZXJhdG9yLmNwcF9uYW1lX2Zvcl9wcmltaXRp
dmVfdHlwZSh0eXBlKQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiB0eXBlX2J1aWxkZXJf
c3RyaW5nX2Zvcl90eXBlX21lbWJlcih0eXBlX21lbWJlciwgb2JqZWN0X2RlY2xhcmF0aW9uKToK
KyAgICAgICAgaWYgaXNpbnN0YW5jZSh0eXBlX21lbWJlci50eXBlLCBFbnVtVHlwZSkgYW5kIHR5
cGVfbWVtYmVyLnR5cGUuaXNfYW5vbnltb3VzOgorICAgICAgICAgICAgcmV0dXJuICc6Oicuam9p
bihbR2VuZXJhdG9yLnR5cGVfYnVpbGRlcl9zdHJpbmdfZm9yX3R5cGUob2JqZWN0X2RlY2xhcmF0
aW9uLnR5cGUpLCB1Y2ZpcnN0KHR5cGVfbWVtYmVyLm1lbWJlcl9uYW1lKV0pCisgICAgICAgIGVs
c2U6CisgICAgICAgICAgICByZXR1cm4gR2VuZXJhdG9yLnR5cGVfYnVpbGRlcl9zdHJpbmdfZm9y
X3R5cGUodHlwZV9tZW1iZXIudHlwZSkKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgdHlw
ZV9zdHJpbmdfZm9yX3VuY2hlY2tlZF9mb3JtYWxfaW5fcGFyYW1ldGVyKHBhcmFtZXRlcik6Cisg
ICAgICAgIF90eXBlID0gcGFyYW1ldGVyLnR5cGUKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlw
ZSwgQWxpYXNlZFR5cGUpOgorICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5hbGlhc2VkX3R5cGUg
ICMgRmFsbCB0aHJvdWdoIHRvIGVudW0gb3IgcHJpbWl0aXZlLgorCisgICAgICAgIGlmIGlzaW5z
dGFuY2UoX3R5cGUsIEVudW1UeXBlKToKKyAgICAgICAgICAgIF90eXBlID0gX3R5cGUucHJpbWl0
aXZlX3R5cGUgICMgRmFsbCB0aHJvdWdoIHRvIHByaW1pdGl2ZS4KKworICAgICAgICBzaWdpbCA9
ICcqJyBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwgZWxzZSAnJicKKyAgICAgICAgIyBUaGlzIGhh
bmRsZXMgdGhlICdhbnknIHR5cGUgYW5kIG9iamVjdHMgd2l0aCBkZWZpbmVkIHByb3BlcnRpZXMu
CisgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIE9iamVjdFR5cGUpIG9yIF90eXBlLnF1YWxp
ZmllZF9uYW1lKCkgaXMgJ29iamVjdCc6CisgICAgICAgICAgICByZXR1cm4gJ2NvbnN0IFJlZlB0
cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4nICsgc2lnaWwKKyAgICAgICAgaWYgaXNpbnN0
YW5jZShfdHlwZSwgQXJyYXlUeXBlKToKKyAgICAgICAgICAgIHJldHVybiAnY29uc3QgUmVmUHRy
PEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXk+JyArIHNpZ2lsCisgICAgICAgIGlmIGlzaW5zdGFu
Y2UoX3R5cGUsIFByaW1pdGl2ZVR5cGUpOgorICAgICAgICAgICAgY3BwX25hbWUgPSBHZW5lcmF0
b3IuY3BwX25hbWVfZm9yX3ByaW1pdGl2ZV90eXBlKF90eXBlKQorICAgICAgICAgICAgaWYgcGFy
YW1ldGVyLmlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAgIHJldHVybiAnY29uc3QgJXMqJyAl
IGNwcF9uYW1lCisgICAgICAgICAgICBlbGlmIF90eXBlLnJhd19uYW1lKCkgaW4gWydzdHJpbmcn
XToKKyAgICAgICAgICAgICAgICByZXR1cm4gJ2NvbnN0ICVzJicgJSBjcHBfbmFtZQorICAgICAg
ICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gY3BwX25hbWUKKworICAgICAgICBy
ZXR1cm4gInVua25vd25fdW5jaGVja2VkX2Zvcm1hbF9pbl9wYXJhbWV0ZXJfdHlwZSIKKworICAg
IEBzdGF0aWNtZXRob2QKKyAgICBkZWYgdHlwZV9zdHJpbmdfZm9yX2NoZWNrZWRfZm9ybWFsX2V2
ZW50X3BhcmFtZXRlcihwYXJhbWV0ZXIpOgorICAgICAgICByZXR1cm4gR2VuZXJhdG9yLnR5cGVf
c3RyaW5nX2Zvcl90eXBlX3dpdGhfbmFtZShwYXJhbWV0ZXIudHlwZSwgcGFyYW1ldGVyLnBhcmFt
ZXRlcl9uYW1lLCBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwpCisKKyAgICBAc3RhdGljbWV0aG9kCisg
ICAgZGVmIHR5cGVfc3RyaW5nX2Zvcl90eXBlX21lbWJlcihtZW1iZXIpOgorICAgICAgICByZXR1
cm4gR2VuZXJhdG9yLnR5cGVfc3RyaW5nX2Zvcl90eXBlX3dpdGhfbmFtZShtZW1iZXIudHlwZSwg
bWVtYmVyLm1lbWJlcl9uYW1lLCBGYWxzZSkKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYg
dHlwZV9zdHJpbmdfZm9yX3R5cGVfd2l0aF9uYW1lKF90eXBlLCB0eXBlX25hbWUsIGlzX29wdGlv
bmFsKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgKEFycmF5VHlwZSwgT2JqZWN0VHlw
ZSkpOgorICAgICAgICAgICAgcmV0dXJuICdQYXNzUmVmUHRyPCVzPicgJSBHZW5lcmF0b3IudHlw
ZV9idWlsZGVyX3N0cmluZ19mb3JfdHlwZShfdHlwZSkKKyAgICAgICAgaWYgaXNpbnN0YW5jZShf
dHlwZSwgQWxpYXNlZFR5cGUpOgorICAgICAgICAgICAgYnVpbGRlcl90eXBlID0gR2VuZXJhdG9y
LnR5cGVfYnVpbGRlcl9zdHJpbmdfZm9yX3R5cGUoX3R5cGUpCisgICAgICAgICAgICBpZiBpc19v
cHRpb25hbDoKKyAgICAgICAgICAgICAgICByZXR1cm4gJ2NvbnN0ICVzKiBjb25zdCcgJSBidWls
ZGVyX3R5cGUKKyAgICAgICAgICAgIGVsaWYgX3R5cGUuYWxpYXNlZF90eXBlLnF1YWxpZmllZF9u
YW1lKCkgaW4gWydpbnRlZ2VyJywgJ251bWJlciddOgorICAgICAgICAgICAgICAgIHJldHVybiBH
ZW5lcmF0b3IuY3BwX25hbWVfZm9yX3ByaW1pdGl2ZV90eXBlKF90eXBlLmFsaWFzZWRfdHlwZSkK
KyAgICAgICAgICAgIGVsaWYgX3R5cGUuYWxpYXNlZF90eXBlLnF1YWxpZmllZF9uYW1lKCkgaW4g
WydzdHJpbmcnXToKKyAgICAgICAgICAgICAgICByZXR1cm4gJ2NvbnN0ICVzJicgJSBidWlsZGVy
X3R5cGUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIGJ1aWxkZXJf
dHlwZQorICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBQcmltaXRpdmVUeXBlKToKKyAgICAg
ICAgICAgIGNwcF9uYW1lID0gR2VuZXJhdG9yLmNwcF9uYW1lX2Zvcl9wcmltaXRpdmVfdHlwZShf
dHlwZSkKKyAgICAgICAgICAgIGlmIF90eXBlLnF1YWxpZmllZF9uYW1lKCkgaW4gWydvYmplY3Qn
XToKKyAgICAgICAgICAgICAgICByZXR1cm4gJ1Bhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0
b3JPYmplY3Q+JworICAgICAgICAgICAgZWxpZiBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpIGluIFsn
YW55J106CisgICAgICAgICAgICAgICAgcmV0dXJuICdQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5z
cGVjdG9yVmFsdWU+JworICAgICAgICAgICAgZWxpZiBpc19vcHRpb25hbDoKKyAgICAgICAgICAg
ICAgICByZXR1cm4gJ2NvbnN0ICVzKiBjb25zdCcgJSBjcHBfbmFtZQorICAgICAgICAgICAgZWxp
ZiBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpIGluIFsnc3RyaW5nJ106CisgICAgICAgICAgICAgICAg
cmV0dXJuICdjb25zdCAlcyYnICUgY3BwX25hbWUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGNwcF9uYW1lCisgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEVu
dW1UeXBlKToKKyAgICAgICAgICAgIGlmIF90eXBlLmlzX2Fub255bW91czoKKyAgICAgICAgICAg
ICAgICBlbnVtX3R5cGVfbmFtZSA9IHVjZmlyc3QodHlwZV9uYW1lKQorICAgICAgICAgICAgZWxz
ZToKKyAgICAgICAgICAgICAgICBlbnVtX3R5cGVfbmFtZSA9ICdJbnNwZWN0b3I6OlR5cGVCdWls
ZGVyOjolczo6JXMnICUgKF90eXBlLnR5cGVfZG9tYWluKCkuZG9tYWluX25hbWUsIF90eXBlLnJh
d19uYW1lKCkpCisKKyAgICAgICAgICAgIGlmIGlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAg
IHJldHVybiAnJXMqJyAlIGVudW1fdHlwZV9uYW1lCisgICAgICAgICAgICBlbHNlOgorICAgICAg
ICAgICAgICAgIHJldHVybiAnJXMnICUgZW51bV90eXBlX25hbWUKKworICAgIEBzdGF0aWNtZXRo
b2QKKyAgICBkZWYgdHlwZV9zdHJpbmdfZm9yX2Zvcm1hbF9vdXRfcGFyYW1ldGVyKHBhcmFtZXRl
cik6CisgICAgICAgIF90eXBlID0gcGFyYW1ldGVyLnR5cGUKKworICAgICAgICBpZiBpc2luc3Rh
bmNlKF90eXBlLCBBbGlhc2VkVHlwZSk6CisgICAgICAgICAgICBfdHlwZSA9IF90eXBlLmFsaWFz
ZWRfdHlwZSAgIyBGYWxsIHRocm91Z2guCisKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwg
KE9iamVjdFR5cGUsIEFycmF5VHlwZSkpOgorICAgICAgICAgICAgcmV0dXJuICdSZWZQdHI8JXM+
JicgJSBHZW5lcmF0b3IudHlwZV9idWlsZGVyX3N0cmluZ19mb3JfdHlwZShfdHlwZSkKKyAgICAg
ICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgUHJpbWl0aXZlVHlwZSk6CisgICAgICAgICAgICBjcHBf
bmFtZSA9IEdlbmVyYXRvci5jcHBfbmFtZV9mb3JfcHJpbWl0aXZlX3R5cGUoX3R5cGUpCisgICAg
ICAgICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6CisgICAgICAgICAgICAgICAgcmV0dXJu
ICJJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8JXM+KiIgJSBjcHBfbmFtZQorICAg
ICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gJyVzKicgJSBjcHBfbmFtZQor
ICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBFbnVtVHlwZSk6CisgICAgICAgICAgICBpZiBf
dHlwZS5pc19hbm9ueW1vdXM6CisgICAgICAgICAgICAgICAgcmV0dXJuICdJbnNwZWN0b3Ilc0Jh
Y2tlbmREaXNwYXRjaGVySGFuZGxlcjo6JXMqJyAlIChfdHlwZS50eXBlX2RvbWFpbigpLmRvbWFp
bl9uYW1lLCB1Y2ZpcnN0KHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkpCisgICAgICAgICAgICBl
bHNlOgorICAgICAgICAgICAgICAgIHJldHVybiAnSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6JXM6
OiVzKicgJSAoX3R5cGUudHlwZV9kb21haW4oKS5kb21haW5fbmFtZSwgX3R5cGUucmF3X25hbWUo
KSkKKworICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJ1bmtub3duIGZvcm1hbCBvdXQgcGFyYW1l
dGVyIHR5cGUuIikKKworICAgICMgRklYTUU6IHRoaXMgaXMgb25seSBzbGlnaHRseSBkaWZmZXJl
bnQgZnJvbSBvdXQgcGFyYW1ldGVyczsgdGhleSBjb3VsZCBiZSB1bmlmaWVkLgorICAgIEBzdGF0
aWNtZXRob2QKKyAgICBkZWYgdHlwZV9zdHJpbmdfZm9yX2Zvcm1hbF9hc3luY19wYXJhbWV0ZXIo
cGFyYW1ldGVyKToKKyAgICAgICAgX3R5cGUgPSBwYXJhbWV0ZXIudHlwZQorICAgICAgICBpZiBp
c2luc3RhbmNlKF90eXBlLCBBbGlhc2VkVHlwZSk6CisgICAgICAgICAgICBfdHlwZSA9IF90eXBl
LmFsaWFzZWRfdHlwZSAgIyBGYWxsIHRocm91Z2guCisKKyAgICAgICAgaWYgaXNpbnN0YW5jZShf
dHlwZSwgRW51bVR5cGUpOgorICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5wcmltaXRpdmVfdHlw
ZSAgIyBGYWxsIHRocm91Z2guCisKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgKE9iamVj
dFR5cGUsIEFycmF5VHlwZSkpOgorICAgICAgICAgICAgcmV0dXJuICdQYXNzUmVmUHRyPCVzPicg
JSBHZW5lcmF0b3IudHlwZV9idWlsZGVyX3N0cmluZ19mb3JfdHlwZShfdHlwZSkKKyAgICAgICAg
aWYgaXNpbnN0YW5jZShfdHlwZSwgUHJpbWl0aXZlVHlwZSk6CisgICAgICAgICAgICBjcHBfbmFt
ZSA9IEdlbmVyYXRvci5jcHBfbmFtZV9mb3JfcHJpbWl0aXZlX3R5cGUoX3R5cGUpCisgICAgICAg
ICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6CisgICAgICAgICAgICAgICAgcmV0dXJuICJJ
bnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8JXM+KiIgJSBjcHBfbmFtZQorICAgICAg
ICAgICAgZWxpZiBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpIGluIFsnaW50ZWdlcicsICdudW1iZXIn
XToKKyAgICAgICAgICAgICAgICByZXR1cm4gR2VuZXJhdG9yLmNwcF9uYW1lX2Zvcl9wcmltaXRp
dmVfdHlwZShfdHlwZSkKKyAgICAgICAgICAgIGVsaWYgX3R5cGUucXVhbGlmaWVkX25hbWUoKSBp
biBbJ3N0cmluZyddOgorICAgICAgICAgICAgICAgIHJldHVybiAnY29uc3QgJXMmJyAlIGNwcF9u
YW1lCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBjcHBfbmFtZQor
CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIlVua25vd24gZm9ybWFsIGFzeW5jIHBhcmFtZXRl
ciB0eXBlLiIpCisKKyAgICAjIEluLXBhcmFtZXRlcnMgZG9uJ3QgdXNlIGJ1aWxkZXIgdHlwZXMs
IGJlY2F1c2UgdGhleSBjb3VsZCBiZSBwYXNzZWQKKyAgICAjICJvcGVuIHR5cGVzIiB0aGF0IGFy
ZSBtYW51YWxseSBjb25zdHJ1Y3RlZCBvdXQgb2YgSW5zcGVjdG9yT2JqZWN0cy4KKworICAgICMg
RklYTUU6IE9ubHkgcGFyYW1ldGVycyB0aGF0IGFyZSBhY3R1YWxseSBvcGVuIHR5cGVzIHNob3Vs
ZCBuZWVkIG5vbi1idWlsZGVyIHBhcmFtZXRlciB0eXBlcy4KKyAgICBAc3RhdGljbWV0aG9kCisg
ICAgZGVmIHR5cGVfc3RyaW5nX2Zvcl9zdGFja19pbl9wYXJhbWV0ZXIocGFyYW1ldGVyKToKKyAg
ICAgICAgX3R5cGUgPSBwYXJhbWV0ZXIudHlwZQorICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBl
LCBBbGlhc2VkVHlwZSk6CisgICAgICAgICAgICBfdHlwZSA9IF90eXBlLmFsaWFzZWRfdHlwZSAg
IyBGYWxsIHRocm91Z2guCisKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgRW51bVR5cGUp
OgorICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5wcmltaXRpdmVfdHlwZSAgIyBGYWxsIHRocm91
Z2guCisKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgT2JqZWN0VHlwZSk6CisgICAgICAg
ICAgICByZXR1cm4gIlJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4iCisgICAgICAg
IGlmIGlzaW5zdGFuY2UoX3R5cGUsIEFycmF5VHlwZSk6CisgICAgICAgICAgICByZXR1cm4gIlJl
ZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5PiIKKyAgICAgICAgaWYgaXNpbnN0YW5jZShf
dHlwZSwgUHJpbWl0aXZlVHlwZSk6CisgICAgICAgICAgICBjcHBfbmFtZSA9IEdlbmVyYXRvci5j
cHBfbmFtZV9mb3JfcHJpbWl0aXZlX3R5cGUoX3R5cGUpCisgICAgICAgICAgICBpZiBfdHlwZS5x
dWFsaWZpZWRfbmFtZSgpIGluIFsnYW55JywgJ29iamVjdCddOgorICAgICAgICAgICAgICAgIHJl
dHVybiAiUmVmUHRyPCVzPiIgJSBHZW5lcmF0b3IuY3BwX25hbWVfZm9yX3ByaW1pdGl2ZV90eXBl
KF90eXBlKQorICAgICAgICAgICAgZWxpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwgYW5kIF90eXBl
LnF1YWxpZmllZF9uYW1lKCkgbm90IGluIFsnYm9vbGVhbicsICdzdHJpbmcnLCAnaW50ZWdlcidd
OgorICAgICAgICAgICAgICAgIHJldHVybiAiSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6T3B0T3V0
cHV0PCVzPiIgJSBjcHBfbmFtZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gY3BwX25hbWUKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgdHlwZV9zdHJpbmdf
Zm9yX3N0YWNrX291dF9wYXJhbWV0ZXIocGFyYW1ldGVyKToKKyAgICAgICAgX3R5cGUgPSBwYXJh
bWV0ZXIudHlwZQorICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCAoQXJyYXlUeXBlLCBPYmpl
Y3RUeXBlKSk6CisgICAgICAgICAgICByZXR1cm4gJ1JlZlB0cjwlcz4nICUgR2VuZXJhdG9yLnR5
cGVfYnVpbGRlcl9zdHJpbmdfZm9yX3R5cGUoX3R5cGUpCisgICAgICAgIGlmIGlzaW5zdGFuY2Uo
X3R5cGUsIEFsaWFzZWRUeXBlKToKKyAgICAgICAgICAgIGJ1aWxkZXJfdHlwZSA9IEdlbmVyYXRv
ci50eXBlX2J1aWxkZXJfc3RyaW5nX2Zvcl90eXBlKF90eXBlKQorICAgICAgICAgICAgaWYgcGFy
YW1ldGVyLmlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAgIHJldHVybiAiSW5zcGVjdG9yOjpU
eXBlQnVpbGRlcjo6T3B0T3V0cHV0PCVzPiIgJSBidWlsZGVyX3R5cGUKKyAgICAgICAgICAgIHJl
dHVybiAnJXMnICUgYnVpbGRlcl90eXBlCisgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIFBy
aW1pdGl2ZVR5cGUpOgorICAgICAgICAgICAgY3BwX25hbWUgPSBHZW5lcmF0b3IuY3BwX25hbWVf
Zm9yX3ByaW1pdGl2ZV90eXBlKF90eXBlKQorICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29w
dGlvbmFsOgorICAgICAgICAgICAgICAgIHJldHVybiAiSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6
T3B0T3V0cHV0PCVzPiIgJSBjcHBfbmFtZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAg
ICAgICByZXR1cm4gY3BwX25hbWUKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgRW51bVR5
cGUpOgorICAgICAgICAgICAgaWYgX3R5cGUuaXNfYW5vbnltb3VzOgorICAgICAgICAgICAgICAg
IHJldHVybiAnSW5zcGVjdG9yJXNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OiVzJyAlIChfdHlw
ZS50eXBlX2RvbWFpbigpLmRvbWFpbl9uYW1lLCB1Y2ZpcnN0KHBhcmFtZXRlci5wYXJhbWV0ZXJf
bmFtZSkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiAnSW5zcGVj
dG9yOjpUeXBlQnVpbGRlcjo6JXM6OiVzJyAlIChfdHlwZS50eXBlX2RvbWFpbigpLmRvbWFpbl9u
YW1lLCBfdHlwZS5yYXdfbmFtZSgpKQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBhc3Nl
cnRpb25fbWV0aG9kX2Zvcl90eXBlX21lbWJlcih0eXBlX21lbWJlciwgb2JqZWN0X2RlY2xhcmF0
aW9uKToKKworICAgICAgICBkZWYgYXNzZXJ0aW9uX21ldGhvZF9mb3JfdHlwZShfdHlwZSk6Cisg
ICAgICAgICAgICByZXR1cm4gJ0JpbmRpbmdUcmFpdHM8JXM+Ojphc3NlcnRWYWx1ZUhhc0V4cGVj
dGVkVHlwZScgJSBHZW5lcmF0b3IudHlwZV9idWlsZGVyX3N0cmluZ19mb3JfdHlwZShfdHlwZSkK
KworICAgICAgICBpZiBpc2luc3RhbmNlKHR5cGVfbWVtYmVyLnR5cGUsIEFsaWFzZWRUeXBlKToK
KyAgICAgICAgICAgIHJldHVybiBhc3NlcnRpb25fbWV0aG9kX2Zvcl90eXBlKHR5cGVfbWVtYmVy
LnR5cGUuYWxpYXNlZF90eXBlKQorICAgICAgICBpZiBpc2luc3RhbmNlKHR5cGVfbWVtYmVyLnR5
cGUsIEVudW1UeXBlKSBhbmQgdHlwZV9tZW1iZXIudHlwZS5pc19hbm9ueW1vdXM6CisgICAgICAg
ICAgICByZXR1cm4gJ0JpbmRpbmdUcmFpdHM8JXM+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlw
ZScgJSBHZW5lcmF0b3IudHlwZV9idWlsZGVyX3N0cmluZ19mb3JfdHlwZV9tZW1iZXIodHlwZV9t
ZW1iZXIsIG9iamVjdF9kZWNsYXJhdGlvbikKKworICAgICAgICByZXR1cm4gYXNzZXJ0aW9uX21l
dGhvZF9mb3JfdHlwZSh0eXBlX21lbWJlci50eXBlKQorCisgICAgQHN0YXRpY21ldGhvZAorICAg
IGRlZiBjcHBfbmFtZV9mb3JfcHJpbWl0aXZlX3R5cGUodHlwZSk6CisgICAgICAgIHJldHVybiBf
UFJJTUlUSVZFX1RPX0NQUF9OQU1FX01BUC5nZXQodHlwZS5yYXdfbmFtZSgpKQorCisgICAgQHN0
YXRpY21ldGhvZAorICAgIGRlZiBqc19uYW1lX2Zvcl9wYXJhbWV0ZXJfdHlwZSh0eXBlKToKKyAg
ICAgICAgX3R5cGUgPSB0eXBlCisgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEFsaWFzZWRU
eXBlKToKKyAgICAgICAgICAgIF90eXBlID0gX3R5cGUuYWxpYXNlZF90eXBlICAjIEZhbGwgdGhy
b3VnaC4KKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgRW51bVR5cGUpOgorICAgICAgICAg
ICAgX3R5cGUgPSBfdHlwZS5wcmltaXRpdmVfdHlwZSAgIyBGYWxsIHRocm91Z2guCisKKyAgICAg
ICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgKEFycmF5VHlwZSwgT2JqZWN0VHlwZSkpOgorICAgICAg
ICAgICAgcmV0dXJuICdvYmplY3QnCisgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIFByaW1p
dGl2ZVR5cGUpOgorICAgICAgICAgICAgaWYgX3R5cGUucXVhbGlmaWVkX25hbWUoKSBpbiBbJ29i
amVjdCcsICdhbnknXToKKyAgICAgICAgICAgICAgICByZXR1cm4gJ29iamVjdCcKKyAgICAgICAg
ICAgIGVsaWYgX3R5cGUucXVhbGlmaWVkX25hbWUoKSBpbiBbJ2ludGVnZXInLCAnbnVtYmVyJ106
CisgICAgICAgICAgICAgICAgcmV0dXJuICdudW1iZXInCisgICAgICAgICAgICBlbHNlOgorICAg
ICAgICAgICAgICAgIHJldHVybiBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpCisKKyAgICAjIERlY2lk
ZSB3aGV0aGVyIGNlcnRhaW4gaGVscGVycyBhcmUgbmVjZXNzYXJ5IGluIGEgc2l0dWF0aW9uLgor
ICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgc2hvdWxkX3VzZV93cmFwcGVyX2Zvcl9yZXR1cm5f
dHlwZSh0eXBlKToKKyAgICAgICAgcmV0dXJuIG5vdCBpc2luc3RhbmNlKHR5cGUsIChBcnJheVR5
cGUsIE9iamVjdFR5cGUpKQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBzaG91bGRfcGFz
c19ieV9jb3B5X2Zvcl9yZXR1cm5fdHlwZSh0eXBlKToKKyAgICAgICAgcmV0dXJuIGlzaW5zdGFu
Y2UodHlwZSwgKEFycmF5VHlwZSwgT2JqZWN0VHlwZSkpIG9yIChpc2luc3RhbmNlKHR5cGUsIChQ
cmltaXRpdmVUeXBlKSkgYW5kIHR5cGUucXVhbGlmaWVkX25hbWUoKSA9PSAib2JqZWN0IikKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2Vu
L2dlbmVyYXRvcl90ZW1wbGF0ZXMucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0b3JfdGVtcGxhdGVzLnB5Cm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjMwMDIw
ZWIzZWJlZDAwN2Q4ZGRlYzI0M2U5OTdkZmQ4ZDMyMDZlOWEKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0b3Jf
dGVtcGxhdGVzLnB5CkBAIC0wLDAgKzEsMjYzIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMg
Q29weXJpZ2h0IChjKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29w
eXJpZ2h0IChjKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyMgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyMgR2VuZXJh
dG9yIHRlbXBsYXRlcywgd2hpY2ggY2FuIGJlIGZpbGxlZCB3aXRoIHN0cmluZy5UZW1wbGF0ZS4K
KyMgRm9sbG93aW5nIGFyZSBjbGFzc2VzIHRoYXQgZmlsbCB0aGUgdGVtcGxhdGVzIGZyb20gdGhl
IHR5cGVjaGVja2VkIG1vZGVsLgorCisKK2NsYXNzIEdlbmVyYXRvclRlbXBsYXRlczoKKyAgICBD
b3B5cmlnaHRCbG9jayA9ICgKKyAgICAiIiIvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tICR7aW5wdXRGaWxlbmFt
ZX0KKy8vIGJ5IHRoZSBzY3JpcHQ6IEphdmFTY3JpcHRDb3JlL3JlcGxheS9zY3JpcHRzL0NvZGVH
ZW5lcmF0b3JJbnNwZWN0b3IucHkiIiIpCisKKyAgICBDcHBIZWFkZXJQcmVsdWRlID0gKAorICAg
ICIiIiNpZm5kZWYgJHtoZWFkZXJHdWFyZFN0cmluZ30KKyNkZWZpbmUgJHtoZWFkZXJHdWFyZFN0
cmluZ30KKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyR7aW5jbHVkZXN9CisKK25hbWVzcGFj
ZSBJbnNwZWN0b3IgeworCiske3R5cGVkZWZzfSIiIikKKworICAgIENwcEhlYWRlclBvc3RsdWRl
ID0gKAorICAgICIiIn0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxF
KElOU1BFQ1RPUikKKworI2VuZGlmIC8vICFkZWZpbmVkKCR7aGVhZGVyR3VhcmRTdHJpbmd9KSIi
IikKKworICAgIENwcEltcGxlbWVudGF0aW9uUHJlbHVkZSA9ICgKKyAgICAiIiIjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAke3ByaW1hcnlJbmNsdWRlfQorCisjaWYgRU5BQkxFKElOU1BF
Q1RPUikKKworJHtzZWNvbmRhcnlJbmNsdWRlc30KKworbmFtZXNwYWNlIEluc3BlY3RvciB7IiIi
KQorCisgICAgQ3BwSW1wbGVtZW50YXRpb25Qb3N0bHVkZSA9ICgKKyAgICAiIiJ9IC8vIG5hbWVz
cGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisiIiIpCisKKyAg
ICBCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckRvbWFpbkhhbmRsZXJEZWNsYXJhdGlvbiA9ICgKKyAg
ICAiIiIke2NsYXNzQW5kRXhwb3J0TWFjcm99IEluc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5k
RGlzcGF0Y2hlckhhbmRsZXIgeworcHVibGljOgorJHtjb21tYW5kRGVjbGFyYXRpb25zfQorcHJv
dGVjdGVkOgorICAgIHZpcnR1YWwgfkluc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXIoKTsKK307IiIiKQorCisgICAgQmFja2VuZERpc3BhdGNoZXJIZWFkZXJEb21h
aW5EaXNwYXRjaGVyRGVjbGFyYXRpb24gPSAoCisgICAgIiIiJHtjbGFzc0FuZEV4cG9ydE1hY3Jv
fSBJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMg
SW5zcGVjdG9yOjpJbnNwZWN0b3JTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJs
aWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmRE
aXNwYXRjaGVyPiBjcmVhdGUoSW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcios
IEluc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKKyAgICB2
aXJ0dWFsIHZvaWQgZGlzcGF0Y2gobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBQ
YXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBtZXNzYWdlKSBvdmVycmlkZTsK
KyR7Y29tbWFuZERlY2xhcmF0aW9uc30KK3ByaXZhdGU6CisgICAgSW5zcGVjdG9yJHtkb21haW5O
YW1lfUJhY2tlbmREaXNwYXRjaGVyKEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXIqLCBJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7Cisg
ICAgSW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogbV9hZ2Vu
dDsKK307IiIiKQorCisgICAgQmFja2VuZERpc3BhdGNoZXJIZWFkZXJBc3luY0NvbW1hbmREZWNs
YXJhdGlvbiA9ICgKKyAgICAiIiIgICAgY2xhc3MgJHtjYWxsYmFja05hbWV9IDogcHVibGljIElu
c3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZSB7CisgICAg
cHVibGljOgorICAgICAgICAke2NhbGxiYWNrTmFtZX0oUGFzc1JlZlB0cjxJbnNwZWN0b3I6Oklu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiwgaW50IGlkKTsKKyAgICAgICAgdm9pZCBzZW5kU3Vj
Y2Vzcygke291dFBhcmFtZXRlcnN9KTsKKyAgICB9OworICAgIHZpcnR1YWwgdm9pZCAke2NvbW1h
bmROYW1lfSgke2luUGFyYW1ldGVyc30pID0gMDsiIiIpCisKKyAgICBCYWNrZW5kRGlzcGF0Y2hl
ckltcGxlbWVudGF0aW9uU21hbGxTd2l0Y2ggPSAoCisgICAgIiIidm9pZCBJbnNwZWN0b3Ike2Rv
bWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgY2FsbElkLCBjb25zdCBT
dHJpbmcmIG1ldGhvZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1lc3NhZ2UpCit7Cisg
ICAgUmVmPEluc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgq
dGhpcyk7CisKKyR7ZGlzcGF0Y2hDYXNlc30KKyAgICBlbHNlCisgICAgICAgIG1fYmFja2VuZERp
c3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCBTdHJpbmcoIiciKSArICIke2RvbWFpbk5hbWV9IiAr
ICcuJyArIG1ldGhvZCArICInIHdhcyBub3QgZm91bmQiKTsKK30iIiIpCisKKyAgICBCYWNrZW5k
RGlzcGF0Y2hlckltcGxlbWVudGF0aW9uTGFyZ2VTd2l0Y2ggPSAoCisiIiJ2b2lkIEluc3BlY3Rv
ciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyBjYWxsSWQsIGNv
bnN0IFN0cmluZyYgbWV0aG9kLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbWVzc2FnZSkK
K3sKKyAgICBSZWY8SW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyPiBwcm90
ZWN0KCp0aGlzKTsKKworICAgIHR5cGVkZWYgdm9pZCAoSW5zcGVjdG9yJHtkb21haW5OYW1lfUJh
Y2tlbmREaXNwYXRjaGVyOjoqQ2FsbEhhbmRsZXIpKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0
b3I6Okluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7CisgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmlu
ZywgQ2FsbEhhbmRsZXI+IERpc3BhdGNoTWFwOworICAgIERFUFJFQ0FURURfREVGSU5FX1NUQVRJ
Q19MT0NBTChEaXNwYXRjaE1hcCwgZGlzcGF0Y2hNYXAsICgpKTsKKyAgICBpZiAoZGlzcGF0Y2hN
YXAuaXNFbXB0eSgpKSB7CisgICAgICAgIHN0YXRpYyBjb25zdCBzdHJ1Y3QgTWV0aG9kVGFibGUg
eworICAgICAgICAgICAgY29uc3QgY2hhciogbmFtZTsKKyAgICAgICAgICAgIENhbGxIYW5kbGVy
IGhhbmRsZXI7CisgICAgICAgIH0gY29tbWFuZHNbXSA9IHsKKyR7ZGlzcGF0Y2hDYXNlc30KKyAg
ICAgICAgfTsKKyAgICAgICAgc2l6ZV90IGxlbmd0aCA9IFdURl9BUlJBWV9MRU5HVEgoY29tbWFu
ZHMpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQorICAgICAg
ICAgICAgZGlzcGF0Y2hNYXAuYWRkKGNvbW1hbmRzW2ldLm5hbWUsIGNvbW1hbmRzW2ldLmhhbmRs
ZXIpOworICAgIH0KKworICAgIEhhc2hNYXA8U3RyaW5nLCBDYWxsSGFuZGxlcj46Oml0ZXJhdG9y
IGl0ID0gZGlzcGF0Y2hNYXAuZmluZChtZXRob2QpOworICAgIGlmIChpdCA9PSBkaXNwYXRjaE1h
cC5lbmQoKSkgeworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVy
cm9yKCZjYWxsSWQsIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwg
U3RyaW5nKCInIikgKyAiJHtkb21haW5OYW1lfSIgKyAnLicgKyBtZXRob2QgKyAiJyB3YXMgbm90
IGZvdW5kIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAoKCp0aGlzKS4qaXQtPnZh
bHVlKShjYWxsSWQsICptZXNzYWdlLmdldCgpKTsKK30iIiIpCisKKyAgICBCYWNrZW5kRGlzcGF0
Y2hlckltcGxlbWVudGF0aW9uRG9tYWluQ29uc3RydWN0b3IgPSAoCisgICAgIiIiUGFzc1JlZlB0
cjxJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXI+IEluc3BlY3RvciR7ZG9t
YWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKEluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyKiBiYWNrZW5kRGlzcGF0Y2hlciwgSW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNw
YXRjaGVySGFuZGxlciogYWdlbnQpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnNwZWN0
b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIsIGFnZW50
KSk7Cit9CisKK0luc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcjo6SW5zcGVj
dG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyKEluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyKiBiYWNrZW5kRGlzcGF0Y2hlciwgSW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNw
YXRjaGVySGFuZGxlciogYWdlbnQpCisgICAgOiBJbnNwZWN0b3JTdXBwbGVtZW50YWxCYWNrZW5k
RGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlcikKKyAgICAsIG1fYWdlbnQoYWdlbnQpCit7Cisg
ICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRjaGVyRm9yRG9tYWluKEFTQ0lJ
TGl0ZXJhbCgiJHtkb21haW5OYW1lfSIpLCB0aGlzKTsKK30iIiIpCisKKyAgICBCYWNrZW5kRGlz
cGF0Y2hlckltcGxlbWVudGF0aW9uUHJlcGFyZUNvbW1hbmRBcmd1bWVudHMgPSAoCisiIiIgICAg
UmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5Ojpj
cmVhdGUoKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSBt
ZXNzYWdlLmdldE9iamVjdChBU0NJSUxpdGVyYWwoInBhcmFtcyIpKTsKKyAgICBJbnNwZWN0b3JP
YmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKKyAgICBJ
bnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsK
KyR7aW5QYXJhbWV0ZXJEZWNsYXJhdGlvbnN9CisgICAgaWYgKHByb3RvY29sRXJyb3JzLT5sZW5n
dGgoKSkgeworICAgICAgICBTdHJpbmcgZXJyb3JNZXNzYWdlID0gU3RyaW5nOjpmb3JtYXQoIlNv
bWUgYXJndW1lbnRzIG9mIG1ldGhvZCBcJyVzXCcgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIiR7ZG9t
YWluTmFtZX0uJHtjb21tYW5kTmFtZX0iKTsKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+
cmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElkLCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6
SW52YWxpZFBhcmFtcywgZXJyb3JNZXNzYWdlLCBwcm90b2NvbEVycm9ycy5yZWxlYXNlKCkpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorIiIiKQorCisgICAgQmFja2VuZERpc3BhdGNoZXJJbXBs
ZW1lbnRhdGlvbkFzeW5jQ29tbWFuZCA9ICgKKyIiIkluc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXI6OiR7Y2FsbGJhY2tOYW1lfTo6JHtjYWxsYmFja05hbWV9KFBh
c3NSZWZQdHI8SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+IGJhY2tlbmREaXNwYXRjaGVyLCBp
bnQgaWQpIDogSW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tC
YXNlKGJhY2tlbmREaXNwYXRjaGVyLCBpZCkgeyB9CisKK3ZvaWQgSW5zcGVjdG9yJHtkb21haW5O
YW1lfUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6JHtjYWxsYmFja05hbWV9OjpzZW5kU3VjY2Vz
cygke2Zvcm1hbFBhcmFtZXRlcnN9KQoreworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGpz
b25NZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyR7b3V0UGFyYW1ldGVyQXNz
aWdubWVudHN9CisgICAgc2VuZElmQWN0aXZlKGpzb25NZXNzYWdlLCBFcnJvclN0cmluZygpKTsK
K30iIiIpCisKKyAgICBGcm9udGVuZERpc3BhdGNoZXJEb21haW5EaXNwYXRjaGVyRGVjbGFyYXRp
b24gPSAoCisiIiIke2NsYXNzQW5kRXhwb3J0TWFjcm99IEluc3BlY3RvciR7ZG9tYWluTmFtZX1G
cm9udGVuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIEluc3BlY3RvciR7ZG9tYWluTmFtZX1G
cm9udGVuZERpc3BhdGNoZXIoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwpIDogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoaW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsKSB7IH0KKyR7ZXZlbnREZWNsYXJhdGlvbnN9Citwcml2YXRlOgorICAgIEluc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbCogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7Cit9OyIiIikK
KworICAgIFR5cGVCdWlsZGVyRGVjbGFyYXRpb25QcmVsdWRlID0gKAorIiIiICAgIHRlbXBsYXRl
PGludCBTVEFURT4KKyAgICBjbGFzcyBCdWlsZGVyIHsKKyAgICBwcml2YXRlOgorICAgICAgICBS
ZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OworCisgICAgICAgIHRl
bXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRF
IHwgU1RFUD4qPih0aGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0
cjwvKiR7b2JqZWN0VHlwZX0qL0luc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBwdHIpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBi
dWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOworICAgICAgICAgICAgbV9yZXN1bHQg
PSBwdHI7CisgICAgICAgIH0KKyAgICAgICAgZnJpZW5kIGNsYXNzICR7b2JqZWN0VHlwZX07Cisg
ICAgcHVibGljOiIiIikKKworICAgIFR5cGVCdWlsZGVyRGVjbGFyYXRpb25Qb3N0bHVkZSA9ICgK
KyIiIgorICAgICAgICBvcGVyYXRvciBSZWZQdHI8JHtvYmplY3RUeXBlfT4mICgpCisgICAgICAg
IHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVz
dWx0X2lzX25vdF9yZWFkeSk7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoJHtv
YmplY3RUeXBlfSkgPT0gc2l6ZW9mKEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0KSwgY2Fubm90
X2Nhc3QpOworICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjwke29i
amVjdFR5cGV9Pio+KCZtX3Jlc3VsdCk7CisgICAgICAgIH0KKworICAgICAgICBQYXNzUmVmUHRy
PCR7b2JqZWN0VHlwZX0+IHJlbGVhc2UoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
UmVmUHRyPCR7b2JqZWN0VHlwZX0+KCp0aGlzKS5yZWxlYXNlKCk7CisgICAgICAgIH0KKyAgICB9
OworCisgICAgLyoKKyAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6Ciske2NvbnN0cnVjdG9y
RXhhbXBsZX0KKyAgICAgKi8KKyAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRl
KCkKKyAgICB7CisgICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihJbnNwZWN0b3I6
Okluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkpOworICAgIH0KKyAgICB0eXBlZGVmIEluc3BlY3Rv
cjo6VHlwZUJ1aWxkZXI6OlN0cnVjdEl0ZW1UcmFpdHMgSXRlbVRyYWl0czsiIiIpCisKKyAgICBU
eXBlQnVpbGRlck9iamVjdFJ1bnRpbWVDYXN0ID0gKAorIiIiUGFzc1JlZlB0cjwke29iamVjdFR5
cGV9PiBCaW5kaW5nVHJhaXRzPCR7b2JqZWN0VHlwZX0+OjpydW50aW1lQ2FzdChQYXNzUmVmUHRy
PEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+IHZhbHVlKQoreworICAgIFJlZlB0cjxJbnNwZWN0
b3I6Okluc3BlY3Rvck9iamVjdD4gb2JqZWN0OworICAgIGJvb2wgY2FzdFJlcyA9IHZhbHVlLT5h
c09iamVjdCgmb2JqZWN0KTsKKyAgICBBU1NFUlRfVU5VU0VEKGNhc3RSZXMsIGNhc3RSZXMpOwor
I2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICBCaW5kaW5nVHJhaXRzPCR7b2JqZWN0VHlwZX0+Ojph
c3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShvYmplY3QuZ2V0KCkpOworI2VuZGlmICAvLyAhQVNT
RVJUX0RJU0FCTEVECisgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKCR7b2JqZWN0VHlwZX0pID09
IHNpemVvZihJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdEJhc2UpLCB0eXBlX2Nhc3RfcHJvYmxl
bSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PCR7b2JqZWN0VHlwZX0qPihzdGF0aWNfY2FzdDxJ
bnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdEJhc2UqPihvYmplY3QuZ2V0KCkpKTsKK30KKyIiIgor
KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2Nv
ZGVnZW4vbW9kZWxzLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2NvZGVnZW4vbW9kZWxzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVhMjc4ZDJiZmI4ODdlNmU4MmVmZGM4MTkx
ZjRlNmJjZjIzMGQyNjkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9tb2RlbHMucHkKQEAgLTAsMCArMSw1NzUgQEAKKyMh
L3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTQgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKGMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisjIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworIyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisjIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKworaW1wb3J0IGxvZ2dpbmcKKworbG9nZ2luZy5iYXNpY0NvbmZpZyhm
b3JtYXQ9JyUobGV2ZWxuYW1lKXM6ICUobWVzc2FnZSlzJywgbGV2ZWw9bG9nZ2luZy5FUlJPUikK
K2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQorCisKK2RlZiB1Y2ZpcnN0KHN0cik6
CisgICAgcmV0dXJuIHN0cls6MV0udXBwZXIoKSArIHN0clsxOl0KKworCitfRlJBTUVXT1JLX0NP
TkZJR19NQVAgPSB7CisgICAgIkdsb2JhbCI6IHsKKyAgICAgICAgInByZWZpeCI6ICIiLAorICAg
IH0sCisKKyAgICAiV1RGIjogeworICAgICAgICAicHJlZml4IjogIldURiIsCisgICAgfSwKKyAg
ICAiSmF2YVNjcmlwdENvcmUiOiB7CisgICAgICAgICJwcmVmaXgiOiAiSlMiLAorICAgICAgICAi
ZXhwb3J0X21hY3JvIjogIkpTX0VYUE9SVF9QUklWQVRFIgorICAgIH0sCisgICAgIldlYkNvcmUi
OiB7CisgICAgICAgICJwcmVmaXgiOiAiV2ViIiwKKyAgICB9LAorICAgICMgVXNlZCBmb3IgY29k
ZSBnZW5lcmF0b3IgdGVzdHMuCisgICAgIlRlc3QiOiB7CisgICAgICAgICJwcmVmaXgiOiAiVGVz
dCIsCisgICAgfQorfQorCisKKyMgRklYTUU6IFRoZXNlIHNob3VsZCBiZSBjb252ZXJ0ZWQgaW50
byBKU09OIHByb3BlcnRpZXMsIG9yIHJlbmFtZWQuCitfVFlQRVNfTkVFRElOR19SRU5BTUVfV09S
S0FST1VORFMgPSB7CisgICAgJ1JHQkEnOiAnUmdiYScsICMgUkdCQSBpcyByZXBvcnRlZCB0byBi
ZSBjb25mbGljdGluZyB3aXRoIGEgZGVmaW5lIG5hbWUgaW4gV2luZG93cyBDRS4KKyAgICAjIEZv
ciB0ZXN0aW5nIG9ubHkuCisgICAgJ1VucGxlYXNhbnROYW1lJzogJ0hhcHB5TmFtZScKK30KKwor
CitjbGFzcyBQYXJzZUV4Y2VwdGlvbihFeGNlcHRpb24pOgorICAgIHBhc3MKKworCitjbGFzcyBU
eXBlY2hlY2tFeGNlcHRpb24oRXhjZXB0aW9uKToKKyAgICBwYXNzCisKKworY2xhc3MgRnJhbWV3
b3JrOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lKToKKyAgICAgICAgc2VsZi5fc2V0dGlu
Z3MgPSBfRlJBTUVXT1JLX0NPTkZJR19NQVBbbmFtZV0KKyAgICAgICAgc2VsZi5uYW1lID0gbmFt
ZQorCisgICAgZGVmIHNldHRpbmcoc2VsZiwga2V5LCBkZWZhdWx0PScnKToKKyAgICAgICAgcmV0
dXJuIHNlbGYuX3NldHRpbmdzLmdldChrZXksIGRlZmF1bHQpCisKKyAgICBAc3RhdGljbWV0aG9k
CisgICAgZGVmIGZyb21TdHJpbmcoZnJhbWV3b3JrU3RyaW5nKToKKyAgICAgICAgaWYgZnJhbWV3
b3JrU3RyaW5nID09ICJHbG9iYWwiOgorICAgICAgICAgICAgcmV0dXJuIEZyYW1ld29ya3MuR2xv
YmFsCisKKyAgICAgICAgaWYgZnJhbWV3b3JrU3RyaW5nID09ICJXVEYiOgorICAgICAgICAgICAg
cmV0dXJuIEZyYW1ld29ya3MuV1RGCisKKyAgICAgICAgaWYgZnJhbWV3b3JrU3RyaW5nID09ICJK
YXZhU2NyaXB0Q29yZSI6CisgICAgICAgICAgICByZXR1cm4gRnJhbWV3b3Jrcy5KYXZhU2NyaXB0
Q29yZQorCisgICAgICAgIGlmIGZyYW1ld29ya1N0cmluZyA9PSAiV2ViQ29yZSI6CisgICAgICAg
ICAgICByZXR1cm4gRnJhbWV3b3Jrcy5XZWJDb3JlCisKKyAgICAgICAgaWYgZnJhbWV3b3JrU3Ry
aW5nID09ICJUZXN0IjoKKyAgICAgICAgICAgIHJldHVybiBGcmFtZXdvcmtzLlRlc3QKKworICAg
ICAgICByYWlzZSBQYXJzZUV4Y2VwdGlvbigiVW5rbm93biBmcmFtZXdvcms6ICVzIiAlIGZyYW1l
d29ya1N0cmluZykKKworCitjbGFzcyBGcmFtZXdvcmtzOgorICAgIEdsb2JhbCA9IEZyYW1ld29y
aygiR2xvYmFsIikKKyAgICBXVEYgPSBGcmFtZXdvcmsoIldURiIpCisgICAgSmF2YVNjcmlwdENv
cmUgPSBGcmFtZXdvcmsoIkphdmFTY3JpcHRDb3JlIikKKyAgICBXZWJDb3JlID0gRnJhbWV3b3Jr
KCJXZWJDb3JlIikKKyAgICBUZXN0ID0gRnJhbWV3b3JrKCJUZXN0IikKKworCitjbGFzcyBUeXBl
UmVmZXJlbmNlOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0eXBlX2tpbmQsIHJlZmVyZW5jZWRf
dHlwZV9uYW1lLCBlbnVtX3ZhbHVlcywgYXJyYXlfaXRlbXMpOgorICAgICAgICBzZWxmLnR5cGVf
a2luZCA9IHR5cGVfa2luZAorICAgICAgICBzZWxmLnJlZmVyZW5jZWRfdHlwZV9uYW1lID0gX1RZ
UEVTX05FRURJTkdfUkVOQU1FX1dPUktBUk9VTkRTLmdldChyZWZlcmVuY2VkX3R5cGVfbmFtZSwg
cmVmZXJlbmNlZF90eXBlX25hbWUpCisgICAgICAgIHNlbGYuZW51bV92YWx1ZXMgPSBlbnVtX3Zh
bHVlcworICAgICAgICBpZiBhcnJheV9pdGVtcyBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5h
cnJheV90eXBlX3JlZiA9IE5vbmUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuYXJy
YXlfdHlwZV9yZWYgPSBUeXBlUmVmZXJlbmNlKGFycmF5X2l0ZW1zLmdldCgndHlwZScpLCBhcnJh
eV9pdGVtcy5nZXQoJyRyZWYnKSwgYXJyYXlfaXRlbXMuZ2V0KCdlbnVtJyksIGFycmF5X2l0ZW1z
LmdldCgnaXRlbXMnKSkKKworICAgICAgICBpZiB0eXBlX2tpbmQgaXMgbm90IE5vbmUgYW5kIHJl
ZmVyZW5jZWRfdHlwZV9uYW1lIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmFpc2UgUGFyc2VF
eGNlcHRpb24oIlR5cGUgcmVmZXJlbmNlIGNhbm5vdCBoYXZlIGJvdGggJ3R5cGUnIGFuZCAnJHJl
Zicga2V5cy4iKQorCisgICAgICAgIGlmIHR5cGVfa2luZCA9PSAiYXJyYXkiIGFuZCBhcnJheV9p
dGVtcyBpcyBOb25lOgorICAgICAgICAgICAgcmFpc2UgUGFyc2VFeGNlcHRpb24oIlR5cGUgcmVm
ZXJlbmNlIHdpdGggdHlwZSAnYXJyYXknIG11c3QgaGF2ZSBrZXkgJ2l0ZW1zJyB0byBkZWZpbmUg
YXJyYXkgZWxlbWVudCB0eXBlLiIpCisKKyAgICAgICAgaWYgZW51bV92YWx1ZXMgaXMgbm90IE5v
bmUgYW5kIGxlbihlbnVtX3ZhbHVlcykgPT0gMDoKKyAgICAgICAgICAgIHJhaXNlIFBhcnNlRXhj
ZXB0aW9uKCJUeXBlIHJlZmVyZW5jZSB3aXRoIGVudW0gdmFsdWVzIG11c3QgaGF2ZSBhdCBsZWFz
dCBvbmUgZW51bSB2YWx1ZS4iKQorCisgICAgZGVmIHJlZmVyZW5jZWRfbmFtZShzZWxmKToKKyAg
ICAgICAgaWYgc2VsZi5yZWZlcmVuY2VkX3R5cGVfbmFtZSBpcyBub3QgTm9uZToKKyAgICAgICAg
ICAgIHJldHVybiBzZWxmLnJlZmVyZW5jZWRfdHlwZV9uYW1lCisgICAgICAgIGVsc2U6CisgICAg
ICAgICAgICByZXR1cm4gc2VsZi50eXBlX2tpbmQgICMgaW50ZWdlciwgc3RyaW5nLCBudW1iZXIs
IGJvb2xlYW4sIGVudW0sIG9iamVjdCwgYXJyYXkKKworCitjbGFzcyBUeXBlOgorICAgIGRlZiBf
X2luaXRfXyhzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhl
cik6CisgICAgICAgIHJldHVybiBzZWxmLnF1YWxpZmllZF9uYW1lKCkgPT0gb3RoZXIucXVhbGlm
aWVkX25hbWUoKQorCisgICAgZGVmIF9faGFzaF9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2Vs
Zi5xdWFsaWZpZWRfbmFtZSgpLl9faGFzaF9fKCkKKworICAgIGRlZiByYXdfbmFtZShzZWxmKToK
KyAgICAgICAgcmV0dXJuIF9UWVBFU19ORUVESU5HX1JFTkFNRV9XT1JLQVJPVU5EUy5nZXQoc2Vs
Zi5fbmFtZSwgc2VsZi5fbmFtZSkKKworICAgICMgVGhlc2UgbWV0aG9kcyBzaG91bGQgYmUgb3Zl
cnJpZGRlbiBieSBzdWJjbGFzc2VzLgorICAgIGRlZiBpc19lbnVtKHNlbGYpOgorICAgICAgICBy
ZXR1cm4gRmFsc2UKKworICAgIGRlZiB0eXBlX2RvbWFpbihzZWxmKToKKyAgICAgICAgcGFzcwor
CisgICAgZGVmIHF1YWxpZmllZF9uYW1lKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICAjIFRo
aXMgaXMgdXNlZCB0byByZXNvbHZlIG5lc3RlZCB0eXBlcyBhZnRlciBpbnN0YW5jZXMgYXJlIGNy
ZWF0ZWQuCisgICAgZGVmIHJlc29sdmVfdHlwZV9yZWZlcmVuY2VzKHNlbGYsIHByb3RvY29sKToK
KyAgICAgICAgcGFzcworCisKK2NsYXNzIFByaW1pdGl2ZVR5cGUoVHlwZSk6CisgICAgZGVmIF9f
aW5pdF9fKHNlbGYsIG5hbWUpOgorICAgICAgICBzZWxmLl9uYW1lID0gbmFtZQorCisgICAgZGVm
IF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gJ1ByaW1pdGl2ZVR5cGVbJXNdJyAlIHNl
bGYucXVhbGlmaWVkX25hbWUoKQorCisgICAgZGVmIHR5cGVfZG9tYWluKHNlbGYpOgorICAgICAg
ICByZXR1cm4gTm9uZQorCisgICAgZGVmIHF1YWxpZmllZF9uYW1lKHNlbGYpOgorICAgICAgICBy
ZXR1cm4gc2VsZi5yYXdfbmFtZSgpCisKKworY2xhc3MgQWxpYXNlZFR5cGUoVHlwZSk6CisgICAg
ZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsIGRvbWFpbiwgYWxpYXNlZF90eXBlX3JlZik6CisgICAg
ICAgIHNlbGYuX25hbWUgPSBuYW1lCisgICAgICAgIHNlbGYuX2RvbWFpbiA9IGRvbWFpbgorICAg
ICAgICBzZWxmLl9hbGlhc2VkX3R5cGVfcmVmID0gYWxpYXNlZF90eXBlX3JlZgorICAgICAgICBz
ZWxmLmFsaWFzZWRfdHlwZSA9IE5vbmUKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAg
ICAgaWYgc2VsZi5hbGlhc2VkX3R5cGUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICByZXR1cm4g
J0FsaWFzZWRUeXBlWyVzIC0+ICVyXScgJSAoc2VsZi5xdWFsaWZpZWRfbmFtZSgpLCBzZWxmLmFs
aWFzZWRfdHlwZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiAnQWxpYXNlZFR5
cGVbJXMgLT4gKHVucmVzb2x2ZWQpXScgJSBzZWxmLnF1YWxpZmllZF9uYW1lKCkKKworICAgIGRl
ZiBpc19lbnVtKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5hbGlhc2VkX3R5cGUuaXNfZW51
bSgpCisKKyAgICBkZWYgdHlwZV9kb21haW4oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9k
b21haW4KKworICAgIGRlZiBxdWFsaWZpZWRfbmFtZShzZWxmKToKKyAgICAgICAgcmV0dXJuICAi
LiIuam9pbihbc2VsZi50eXBlX2RvbWFpbigpLmRvbWFpbl9uYW1lLCBzZWxmLnJhd19uYW1lKCld
KQorCisgICAgZGVmIHJlc29sdmVfdHlwZV9yZWZlcmVuY2VzKHNlbGYsIHByb3RvY29sKToKKyAg
ICAgICAgaWYgc2VsZi5hbGlhc2VkX3R5cGUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICByZXR1
cm4KKworICAgICAgICBzZWxmLmFsaWFzZWRfdHlwZSA9IHByb3RvY29sLmxvb2t1cF90eXBlX3Jl
ZmVyZW5jZShzZWxmLl9hbGlhc2VkX3R5cGVfcmVmLCBzZWxmLnR5cGVfZG9tYWluKCkpCisgICAg
ICAgIGxvZy5kZWJ1ZygiPCBSZXNvbHZlZCB0eXBlIHJlZmVyZW5jZSBmb3IgYWxpYXNlZCB0eXBl
IGluICVzOiAlcyIgJSAoc2VsZi5xdWFsaWZpZWRfbmFtZSgpLCBzZWxmLmFsaWFzZWRfdHlwZS5x
dWFsaWZpZWRfbmFtZSgpKSkKKworCitjbGFzcyBFbnVtVHlwZShUeXBlKToKKyAgICBkZWYgX19p
bml0X18oc2VsZiwgbmFtZSwgZG9tYWluLCB2YWx1ZXMsIHByaW1pdGl2ZV90eXBlX3JlZiwgaXNf
YW5vbnltb3VzPUZhbHNlKToKKyAgICAgICAgc2VsZi5fbmFtZSA9IG5hbWUKKyAgICAgICAgc2Vs
Zi5fZG9tYWluID0gZG9tYWluCisgICAgICAgIHNlbGYuX3ZhbHVlcyA9IHZhbHVlcworICAgICAg
ICBzZWxmLl9wcmltaXRpdmVfdHlwZV9yZWYgPSBwcmltaXRpdmVfdHlwZV9yZWYKKyAgICAgICAg
c2VsZi5wcmltaXRpdmVfdHlwZSA9IE5vbmUKKyAgICAgICAgc2VsZi5pc19hbm9ueW1vdXMgPSBp
c19hbm9ueW1vdXMKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICdF
bnVtVHlwZVt2YWx1ZV90eXBlPSVzOyB2YWx1ZXM9JXNdJyAlIChzZWxmLnF1YWxpZmllZF9uYW1l
KCksICcsICcuam9pbihtYXAoc3RyLCBzZWxmLmVudW1fdmFsdWVzKCkpKSkKKworICAgIGRlZiBp
c19lbnVtKHNlbGYpOgorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIHR5cGVfZG9tYWlu
KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fZG9tYWluCisKKyAgICBkZWYgZW51bV92YWx1
ZXMoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl92YWx1ZXMKKworICAgIGRlZiBxdWFsaWZp
ZWRfbmFtZShzZWxmKToKKyAgICAgICAgcmV0dXJuICAiLiIuam9pbihbc2VsZi50eXBlX2RvbWFp
bigpLmRvbWFpbl9uYW1lLCBzZWxmLnJhd19uYW1lKCldKQorCisgICAgZGVmIHJlc29sdmVfdHlw
ZV9yZWZlcmVuY2VzKHNlbGYsIHByb3RvY29sKToKKyAgICAgICAgaWYgc2VsZi5wcmltaXRpdmVf
dHlwZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHNlbGYucHJp
bWl0aXZlX3R5cGUgPSBwcm90b2NvbC5sb29rdXBfdHlwZV9yZWZlcmVuY2Uoc2VsZi5fcHJpbWl0
aXZlX3R5cGVfcmVmLCBEb21haW5zLkdMT0JBTCkKKyAgICAgICAgbG9nLmRlYnVnKCI8IFJlc29s
dmVkIHR5cGUgcmVmZXJlbmNlIGZvciBlbnVtIHR5cGUgaW4gJXM6ICVzIiAlIChzZWxmLnF1YWxp
ZmllZF9uYW1lKCksIHNlbGYucHJpbWl0aXZlX3R5cGUucXVhbGlmaWVkX25hbWUoKSkpCisgICAg
ICAgIGxvZy5kZWJ1ZygiPDwgZW51bSB2YWx1ZXM6ICVzIiAlIHNlbGYuZW51bV92YWx1ZXMoKSkK
KworCitjbGFzcyBBcnJheVR5cGUoVHlwZSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGVsZW1l
bnRfdHlwZV9yZWYsIGRvbWFpbik6CisgICAgICAgIHNlbGYuX2RvbWFpbiA9IGRvbWFpbgorICAg
ICAgICBzZWxmLl9lbGVtZW50X3R5cGVfcmVmID0gZWxlbWVudF90eXBlX3JlZgorICAgICAgICBz
ZWxmLmVsZW1lbnRfdHlwZSA9IE5vbmUKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAg
ICAgaWYgc2VsZi5lbGVtZW50X3R5cGUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICByZXR1cm4g
J0FycmF5VHlwZVtlbGVtZW50X3R5cGU9JXJdJyAlIHNlbGYuZWxlbWVudF90eXBlCisgICAgICAg
IGVsc2U6CisgICAgICAgICAgICByZXR1cm4gJ0FycmF5VHlwZVtlbGVtZW50X3R5cGU9KHVucmVz
b2x2ZWQpXScKKworICAgIGRlZiB0eXBlX2RvbWFpbihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNl
bGYuX2RvbWFpbgorCisgICAgZGVmIHF1YWxpZmllZF9uYW1lKHNlbGYpOgorICAgICAgICByZXR1
cm4gICIuIi5qb2luKFsiYXJyYXkiLCBzZWxmLmVsZW1lbnRfdHlwZS5xdWFsaWZpZWRfbmFtZSgp
XSkKKworICAgIGRlZiByZXNvbHZlX3R5cGVfcmVmZXJlbmNlcyhzZWxmLCBwcm90b2NvbCk6Cisg
ICAgICAgIGlmIHNlbGYuZWxlbWVudF90eXBlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmV0
dXJuCisKKyAgICAgICAgc2VsZi5lbGVtZW50X3R5cGUgPSBwcm90b2NvbC5sb29rdXBfdHlwZV9y
ZWZlcmVuY2Uoc2VsZi5fZWxlbWVudF90eXBlX3JlZiwgc2VsZi50eXBlX2RvbWFpbigpKQorICAg
ICAgICBsb2cuZGVidWcoIjwgUmVzb2x2ZWQgdHlwZSByZWZlcmVuY2UgZm9yIGVsZW1lbnQgdHlw
ZSBpbiAlczogJXMiICUgKHNlbGYucXVhbGlmaWVkX25hbWUoKSwgc2VsZi5lbGVtZW50X3R5cGUu
cXVhbGlmaWVkX25hbWUoKSkpCisKKworY2xhc3MgT2JqZWN0VHlwZShUeXBlKToKKyAgICBkZWYg
X19pbml0X18oc2VsZiwgbmFtZSwgZG9tYWluLCBtZW1iZXJzKToKKyAgICAgICAgc2VsZi5fbmFt
ZSA9IG5hbWUKKyAgICAgICAgc2VsZi5fZG9tYWluID0gZG9tYWluCisgICAgICAgIHNlbGYubWVt
YmVycyA9IG1lbWJlcnMKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJu
ICdPYmplY3RUeXBlWyVzXScgJSBzZWxmLnF1YWxpZmllZF9uYW1lKCkKKworICAgIGRlZiB0eXBl
X2RvbWFpbihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2RvbWFpbgorCisgICAgZGVmIHF1
YWxpZmllZF9uYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gICIuIi5qb2luKFtzZWxmLnR5cGVf
ZG9tYWluKCkuZG9tYWluX25hbWUsIHNlbGYucmF3X25hbWUoKV0pCisKKworZGVmIGNoZWNrX2Zv
cl9yZXF1aXJlZF9wcm9wZXJ0aWVzKHByb3BzLCBvYmosIHdoYXQpOgorICAgIGZvciBwcm9wIGlu
IHByb3BzOgorICAgICAgICBpZiBwcm9wIG5vdCBpbiBvYmo6CisgICAgICAgICAgICByYWlzZSBQ
YXJzZUV4Y2VwdGlvbigiV2hlbiBwYXJzaW5nICVzLCByZXF1aXJlZCBwcm9wZXJ0eSBtaXNzaW5n
OiAlcyIgJSAod2hhdCwgcHJvcCkpCisKKworY2xhc3MgUHJvdG9jb2w6CisgICAgZGVmIF9faW5p
dF9fKHNlbGYsIGZyYW1ld29ya19uYW1lKToKKyAgICAgICAgc2VsZi5kb21haW5zID0gW10KKyAg
ICAgICAgc2VsZi50eXBlc19ieV9uYW1lID0ge30KKyAgICAgICAgc2VsZi5mcmFtZXdvcmsgPSBG
cmFtZXdvcmsuZnJvbVN0cmluZyhmcmFtZXdvcmtfbmFtZSkKKworICAgIGRlZiBwYXJzZV9zcGVj
aWZpY2F0aW9uKHNlbGYsIGpzb24sIGlzU3VwcGxlbWVudGFsKToKKyAgICAgICAgbG9nLmRlYnVn
KCJwYXJzZSB0b3BsZXZlbCIpCisKKyAgICAgICAgaWYgaXNpbnN0YW5jZShqc29uLCBkaWN0KSBh
bmQgJ2RvbWFpbnMnIGluIGpzb246CisgICAgICAgICAgICBqc29uID0ganNvblsnZG9tYWlucydd
CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGpzb24sIGxpc3QpOgorICAgICAgICAgICAganNv
biA9IFtqc29uXQorCisgICAgICAgIGZvciBkb21haW4gaW4ganNvbjoKKyAgICAgICAgICAgIHNl
bGYucGFyc2VfZG9tYWluKGRvbWFpbiwgaXNTdXBwbGVtZW50YWwpCisKKyAgICBkZWYgcGFyc2Vf
ZG9tYWluKHNlbGYsIGpzb24sIGlzU3VwcGxlbWVudGFsKToKKyAgICAgICAgY2hlY2tfZm9yX3Jl
cXVpcmVkX3Byb3BlcnRpZXMoWydkb21haW4nXSwganNvbiwgImRvbWFpbiIpCisgICAgICAgIGxv
Zy5kZWJ1ZygicGFyc2UgZG9tYWluICIgKyBqc29uWydkb21haW4nXSkKKworICAgICAgICB0eXBl
cyA9IFtdCisgICAgICAgIGNvbW1hbmRzID0gW10KKyAgICAgICAgZXZlbnRzID0gW10KKworICAg
ICAgICBpZiAndHlwZXMnIGluIGpzb246CisgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShq
c29uWyd0eXBlcyddLCBsaXN0KToKKyAgICAgICAgICAgICAgICByYWlzZSBQYXJzZUV4Y2VwdGlv
bigiTWFsZm9ybWVkIGRvbWFpbiBzcGVjaWZpY2F0aW9uOiB0eXBlcyBpcyBub3QgYW4gYXJyYXki
KQorICAgICAgICAgICAgdHlwZXMuZXh0ZW5kKFtzZWxmLnBhcnNlX3R5cGVfZGVjbGFyYXRpb24o
X2RlY2xhcmF0aW9uKSBmb3IgX2RlY2xhcmF0aW9uIGluIGpzb25bJ3R5cGVzJ11dKQorCisgICAg
ICAgIGlmICdjb21tYW5kcycgaW4ganNvbjoKKyAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNl
KGpzb25bJ2NvbW1hbmRzJ10sIGxpc3QpOgorICAgICAgICAgICAgICAgIHJhaXNlIFBhcnNlRXhj
ZXB0aW9uKCJNYWxmb3JtZWQgZG9tYWluIHNwZWNpZmljYXRpb246IGNvbW1hbmRzIGlzIG5vdCBh
biBhcnJheSIpCisgICAgICAgICAgICBjb21tYW5kcy5leHRlbmQoW3NlbGYucGFyc2VfY29tbWFu
ZChfY29tbWFuZCkgZm9yIF9jb21tYW5kIGluIGpzb25bJ2NvbW1hbmRzJ11dKQorCisgICAgICAg
IGlmICdldmVudHMnIGluIGpzb246CisgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShqc29u
WydldmVudHMnXSwgbGlzdCk6CisgICAgICAgICAgICAgICAgcmFpc2UgUGFyc2VFeGNlcHRpb24o
Ik1hbGZvcm1lZCBkb21haW4gc3BlY2lmaWNhdGlvbjogZXZlbnRzIGlzIG5vdCBhbiBhcnJheSIp
CisgICAgICAgICAgICBldmVudHMuZXh0ZW5kKFtzZWxmLnBhcnNlX2V2ZW50KF9ldmVudCkgZm9y
IF9ldmVudCBpbiBqc29uWydldmVudHMnXV0pCisKKyAgICAgICAgc2VsZi5kb21haW5zLmFwcGVu
ZChEb21haW4oanNvblsnZG9tYWluJ10sIGpzb24uZ2V0KCdkZXNjcmlwdGlvbicsICIiKSwgaXNT
dXBwbGVtZW50YWwsIHR5cGVzLCBjb21tYW5kcywgZXZlbnRzKSkKKworICAgIGRlZiBwYXJzZV90
eXBlX2RlY2xhcmF0aW9uKHNlbGYsIGpzb24pOgorICAgICAgICBjaGVja19mb3JfcmVxdWlyZWRf
cHJvcGVydGllcyhbJ2lkJywgJ3R5cGUnXSwganNvbiwgInR5cGUiKQorICAgICAgICBsb2cuZGVi
dWcoInBhcnNlIHR5cGUgJXMiICUganNvblsnaWQnXSkKKworICAgICAgICB0eXBlX21lbWJlcnMg
PSBbXQorCisgICAgICAgIGlmICdwcm9wZXJ0aWVzJyBpbiBqc29uOgorICAgICAgICAgICAgaWYg
bm90IGlzaW5zdGFuY2UoanNvblsncHJvcGVydGllcyddLCBsaXN0KToKKyAgICAgICAgICAgICAg
ICByYWlzZSBQYXJzZUV4Y2VwdGlvbigiTWFsZm9ybWVkIHR5cGUgc3BlY2lmaWNhdGlvbjogcHJv
cGVydGllcyBpcyBub3QgYW4gYXJyYXkiKQorICAgICAgICAgICAgdHlwZV9tZW1iZXJzLmV4dGVu
ZChbc2VsZi5wYXJzZV90eXBlX21lbWJlcihfbWVtYmVyKSBmb3IgX21lbWJlciBpbiBqc29uWydw
cm9wZXJ0aWVzJ11dKQorCisgICAgICAgIHR5cGVfcmVmID0gVHlwZVJlZmVyZW5jZShqc29uWyd0
eXBlJ10sIE5vbmUsIGpzb24uZ2V0KCdlbnVtJyksIGpzb24uZ2V0KCdpdGVtcycpKQorICAgICAg
ICByZXR1cm4gVHlwZURlY2xhcmF0aW9uKGpzb25bJ2lkJ10sIHR5cGVfcmVmLCBqc29uLmdldCgi
ZGVzY3JpcHRpb24iLCAiIiksIHR5cGVfbWVtYmVycykKKworICAgIGRlZiBwYXJzZV90eXBlX21l
bWJlcihzZWxmLCBqc29uKToKKyAgICAgICAgY2hlY2tfZm9yX3JlcXVpcmVkX3Byb3BlcnRpZXMo
WyduYW1lJ10sIGpzb24sICJ0eXBlIG1lbWJlciIpCisgICAgICAgIGxvZy5kZWJ1ZygicGFyc2Ug
dHlwZSBtZW1iZXIgJXMiICUganNvblsnbmFtZSddKQorCisgICAgICAgIHR5cGVfcmVmID0gVHlw
ZVJlZmVyZW5jZShqc29uLmdldCgndHlwZScpLCBqc29uLmdldCgnJHJlZicpLCBqc29uLmdldCgn
ZW51bScpLCBqc29uLmdldCgnaXRlbXMnKSkKKyAgICAgICAgcmV0dXJuIFR5cGVNZW1iZXIoanNv
blsnbmFtZSddLCB0eXBlX3JlZiwganNvbi5nZXQoJ29wdGlvbmFsJywgRmFsc2UpLCBqc29uLmdl
dCgnZGVzY3JpcHRpb24nLCAiIikpCisKKyAgICBkZWYgcGFyc2VfY29tbWFuZChzZWxmLCBqc29u
KToKKyAgICAgICAgY2hlY2tfZm9yX3JlcXVpcmVkX3Byb3BlcnRpZXMoWyduYW1lJ10sIGpzb24s
ICJjb21tYW5kIikKKyAgICAgICAgbG9nLmRlYnVnKCJwYXJzZSBjb21tYW5kICVzIiAlIGpzb25b
J25hbWUnXSkKKworICAgICAgICBjYWxsX3BhcmFtZXRlcnMgPSBbXQorICAgICAgICByZXR1cm5f
cGFyYW1ldGVycyA9IFtdCisKKyAgICAgICAgaWYgJ3BhcmFtZXRlcnMnIGluIGpzb246CisgICAg
ICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShqc29uWydwYXJhbWV0ZXJzJ10sIGxpc3QpOgorICAg
ICAgICAgICAgICAgIHJhaXNlIFBhcnNlRXhjZXB0aW9uKCJNYWxmb3JtZWQgY29tbWFuZCBzcGVj
aWZpY2F0aW9uOiBwYXJhbWV0ZXJzIGlzIG5vdCBhbiBhcnJheSIpCisgICAgICAgICAgICBjYWxs
X3BhcmFtZXRlcnMuZXh0ZW5kKFtzZWxmLnBhcnNlX2NhbGxfb3JfcmV0dXJuX3BhcmFtZXRlcihf
cGFyYW1ldGVyKSBmb3IgX3BhcmFtZXRlciBpbiBqc29uWydwYXJhbWV0ZXJzJ11dKQorCisgICAg
ICAgIGlmICdyZXR1cm5zJyBpbiBqc29uOgorICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uo
anNvblsncmV0dXJucyddLCBsaXN0KToKKyAgICAgICAgICAgICAgICByYWlzZSBQYXJzZUV4Y2Vw
dGlvbigiTWFsZm9ybWVkIGNvbW1hbmQgc3BlY2lmaWNhdGlvbjogcmV0dXJucyBpcyBub3QgYW4g
YXJyYXkiKQorICAgICAgICAgICAgcmV0dXJuX3BhcmFtZXRlcnMuZXh0ZW5kKFtzZWxmLnBhcnNl
X2NhbGxfb3JfcmV0dXJuX3BhcmFtZXRlcihfcGFyYW1ldGVyKSBmb3IgX3BhcmFtZXRlciBpbiBq
c29uWydyZXR1cm5zJ11dKQorCisgICAgICAgIHJldHVybiBDb21tYW5kKGpzb25bJ25hbWUnXSwg
Y2FsbF9wYXJhbWV0ZXJzLCByZXR1cm5fcGFyYW1ldGVycywganNvbi5nZXQoJ2Rlc2NyaXB0aW9u
JywgIiIpLCBqc29uLmdldCgnYXN5bmMnLCBGYWxzZSkpCisKKyAgICBkZWYgcGFyc2VfZXZlbnQo
c2VsZiwganNvbik6CisgICAgICAgIGNoZWNrX2Zvcl9yZXF1aXJlZF9wcm9wZXJ0aWVzKFsnbmFt
ZSddLCBqc29uLCAiZXZlbnQiKQorICAgICAgICBsb2cuZGVidWcoInBhcnNlIGV2ZW50ICVzIiAl
IGpzb25bJ25hbWUnXSkKKworICAgICAgICBldmVudF9wYXJhbWV0ZXJzID0gW10KKworICAgICAg
ICBpZiAncGFyYW1ldGVycycgaW4ganNvbjoKKyAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNl
KGpzb25bJ3BhcmFtZXRlcnMnXSwgbGlzdCk6CisgICAgICAgICAgICAgICAgcmFpc2UgUGFyc2VF
eGNlcHRpb24oIk1hbGZvcm1lZCBldmVudCBzcGVjaWZpY2F0aW9uOiBwYXJhbWV0ZXJzIGlzIG5v
dCBhbiBhcnJheSIpCisgICAgICAgICAgICBldmVudF9wYXJhbWV0ZXJzLmV4dGVuZChbc2VsZi5w
YXJzZV9jYWxsX29yX3JldHVybl9wYXJhbWV0ZXIoX3BhcmFtZXRlcikgZm9yIF9wYXJhbWV0ZXIg
aW4ganNvblsncGFyYW1ldGVycyddXSkKKworICAgICAgICByZXR1cm4gRXZlbnQoanNvblsnbmFt
ZSddLCBldmVudF9wYXJhbWV0ZXJzLCBqc29uLmdldCgnZGVzY3JpcHRpb24nLCAiIikpCisKKyAg
ICBkZWYgcGFyc2VfY2FsbF9vcl9yZXR1cm5fcGFyYW1ldGVyKHNlbGYsIGpzb24pOgorICAgICAg
ICBjaGVja19mb3JfcmVxdWlyZWRfcHJvcGVydGllcyhbJ25hbWUnXSwganNvbiwgInBhcmFtZXRl
ciIpCisgICAgICAgIGxvZy5kZWJ1ZygicGFyc2UgcGFyYW1ldGVyICVzIiAlIGpzb25bJ25hbWUn
XSkKKworICAgICAgICB0eXBlX3JlZiA9IFR5cGVSZWZlcmVuY2UoanNvbi5nZXQoJ3R5cGUnKSwg
anNvbi5nZXQoJyRyZWYnKSwganNvbi5nZXQoJ2VudW0nKSwganNvbi5nZXQoJ2l0ZW1zJykpCisg
ICAgICAgIHJldHVybiBQYXJhbWV0ZXIoanNvblsnbmFtZSddLCB0eXBlX3JlZiwganNvbi5nZXQo
J29wdGlvbmFsJywgRmFsc2UpLCBqc29uLmdldCgnZGVzY3JpcHRpb24nLCAiIikpCisKKyAgICBk
ZWYgcmVzb2x2ZV90eXBlcyhzZWxmKToKKyAgICAgICAgcXVhbGlmaWVkX2RlY2xhcmVkX3R5cGVf
bmFtZXMgPSBzZXQoWydib29sZWFuJywgJ3N0cmluZycsICdpbnRlZ2VyJywgJ251bWJlcicsICdl
bnVtJywgJ2FycmF5JywgJ29iamVjdCcsICdhbnknXSkKKworICAgICAgICBzZWxmLnR5cGVzX2J5
X25hbWVbJ3N0cmluZyddID0gUHJpbWl0aXZlVHlwZSgnc3RyaW5nJykKKyAgICAgICAgZm9yIF9w
cmltaXRpdmVfdHlwZSBpbiBbJ2Jvb2xlYW4nLCAnaW50ZWdlcicsICdudW1iZXInXToKKyAgICAg
ICAgICAgIHNlbGYudHlwZXNfYnlfbmFtZVtfcHJpbWl0aXZlX3R5cGVdID0gUHJpbWl0aXZlVHlw
ZShfcHJpbWl0aXZlX3R5cGUpCisgICAgICAgIGZvciBfb2JqZWN0X3R5cGUgaW4gWydhbnknLCAn
b2JqZWN0J106CisgICAgICAgICAgICBzZWxmLnR5cGVzX2J5X25hbWVbX29iamVjdF90eXBlXSA9
IFByaW1pdGl2ZVR5cGUoX29iamVjdF90eXBlKQorCisgICAgICAgICMgR2F0aGVyIHF1YWxpZmll
ZCB0eXBlIG5hbWVzIGZyb20gdHlwZSBkZWNsYXJhdGlvbnMgaW4gZWFjaCBkb21haW4uCisgICAg
ICAgIGZvciBfZG9tYWluIGluIHNlbGYuZG9tYWluczoKKyAgICAgICAgICAgIGZvciBfZGVjbGFy
YXRpb24gaW4gX2RvbWFpbi50eXBlX2RlY2xhcmF0aW9uczoKKyAgICAgICAgICAgICAgICAjIEJh
c2ljIHNhbml0eSBjaGVja2luZy4KKyAgICAgICAgICAgICAgICBpZiBfZGVjbGFyYXRpb24udHlw
ZV9yZWYucmVmZXJlbmNlZF90eXBlX25hbWUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAg
ICAgIHJhaXNlIFR5cGVjaGVja0V4Y2VwdGlvbigiVHlwZSBkZWNsYXJhdGlvbnMgbXVzdCBuYW1l
IGEgYmFzZSB0eXBlLCBub3QgYSB0eXBlIHJlZmVyZW5jZS4iKQorCisgICAgICAgICAgICAgICAg
IyBGaW5kIGR1cGxpY2F0ZSBxdWFsaWZpZWQgdHlwZSBuYW1lcy4KKyAgICAgICAgICAgICAgICBx
dWFsaWZpZWRfdHlwZV9uYW1lID0gIi4iLmpvaW4oW19kb21haW4uZG9tYWluX25hbWUsIF9kZWNs
YXJhdGlvbi50eXBlX25hbWVdKQorICAgICAgICAgICAgICAgIGlmIHF1YWxpZmllZF90eXBlX25h
bWUgaW4gcXVhbGlmaWVkX2RlY2xhcmVkX3R5cGVfbmFtZXM6CisgICAgICAgICAgICAgICAgICAg
IHJhaXNlIFR5cGVjaGVja0V4Y2VwdGlvbigiRHVwbGljYXRlIHR5cGUgZGVjbGFyYXRpb246ICVz
IiAlIHF1YWxpZmllZF90eXBlX25hbWUpCisKKyAgICAgICAgICAgICAgICBxdWFsaWZpZWRfZGVj
bGFyZWRfdHlwZV9uYW1lcy5hZGQocXVhbGlmaWVkX3R5cGVfbmFtZSkKKworICAgICAgICAgICAg
ICAgIHR5cGVfaW5zdGFuY2UgPSBOb25lCisKKyAgICAgICAgICAgICAgICBraW5kID0gX2RlY2xh
cmF0aW9uLnR5cGVfcmVmLnR5cGVfa2luZAorICAgICAgICAgICAgICAgIGlmIF9kZWNsYXJhdGlv
bi50eXBlX3JlZi5lbnVtX3ZhbHVlcyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAg
cHJpbWl0aXZlX3R5cGVfcmVmID0gVHlwZVJlZmVyZW5jZShfZGVjbGFyYXRpb24udHlwZV9yZWYu
dHlwZV9raW5kLCBOb25lLCBOb25lLCBOb25lKQorICAgICAgICAgICAgICAgICAgICB0eXBlX2lu
c3RhbmNlID0gRW51bVR5cGUoX2RlY2xhcmF0aW9uLnR5cGVfbmFtZSwgX2RvbWFpbiwgX2RlY2xh
cmF0aW9uLnR5cGVfcmVmLmVudW1fdmFsdWVzLCBwcmltaXRpdmVfdHlwZV9yZWYpCisgICAgICAg
ICAgICAgICAgZWxpZiBraW5kID09ICJhcnJheSI6CisgICAgICAgICAgICAgICAgICAgIHR5cGVf
aW5zdGFuY2UgPSBBcnJheVR5cGUoX2RlY2xhcmF0aW9uLnR5cGVfcmVmLmFycmF5X3R5cGVfcmVm
LCBfZG9tYWluKQorICAgICAgICAgICAgICAgIGVsaWYga2luZCA9PSAib2JqZWN0IjoKKyAgICAg
ICAgICAgICAgICAgICAgdHlwZV9pbnN0YW5jZSA9IE9iamVjdFR5cGUoX2RlY2xhcmF0aW9uLnR5
cGVfbmFtZSwgX2RvbWFpbiwgX2RlY2xhcmF0aW9uLnR5cGVfbWVtYmVycykKKyAgICAgICAgICAg
ICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICB0eXBlX2luc3RhbmNlID0gQWxpYXNlZFR5
cGUoX2RlY2xhcmF0aW9uLnR5cGVfbmFtZSwgX2RvbWFpbiwgX2RlY2xhcmF0aW9uLnR5cGVfcmVm
KQorCisgICAgICAgICAgICAgICAgbG9nLmRlYnVnKCI8IENyZWF0ZWQgZnJlc2ggdHlwZSAlciBm
b3IgZGVjbGFyYXRpb24gJXMiICUgKHR5cGVfaW5zdGFuY2UsIHF1YWxpZmllZF90eXBlX25hbWUp
KQorICAgICAgICAgICAgICAgIHNlbGYudHlwZXNfYnlfbmFtZVtxdWFsaWZpZWRfdHlwZV9uYW1l
XSA9IHR5cGVfaW5zdGFuY2UKKworICAgICAgICAjIFJlc29sdmUgYWxsIHR5cGUgcmVmZXJlbmNl
cyByZWN1cnNpdmVseS4KKyAgICAgICAgZm9yIF9kb21haW4gaW4gc2VsZi5kb21haW5zOgorICAg
ICAgICAgICAgX2RvbWFpbi5yZXNvbHZlX3R5cGVfcmVmZXJlbmNlcyhzZWxmKQorCisgICAgZGVm
IGxvb2t1cF90eXBlX2Zvcl9kZWNsYXJhdGlvbihzZWxmLCBkZWNsYXJhdGlvbiwgZG9tYWluKToK
KyAgICAgICAgIyBUaGlzIHdpbGwgb25seSBtYXRjaCBhIHR5cGUgZGVmaW5lZCBpbiB0aGUgc2Ft
ZSBkb21haW4sIHdoZXJlIHByZWZpeGVzIGFyZW4ndCByZXF1aXJlZC4KKyAgICAgICAgcXVhbGlm
aWVkX25hbWUgPSAiLiIuam9pbihbZG9tYWluLmRvbWFpbl9uYW1lLCBkZWNsYXJhdGlvbi50eXBl
X25hbWVdKQorICAgICAgICBpZiBxdWFsaWZpZWRfbmFtZSBpbiBzZWxmLnR5cGVzX2J5X25hbWU6
CisgICAgICAgICAgICBmb3VuZF90eXBlID0gc2VsZi50eXBlc19ieV9uYW1lW3F1YWxpZmllZF9u
YW1lXQorICAgICAgICAgICAgZm91bmRfdHlwZS5yZXNvbHZlX3R5cGVfcmVmZXJlbmNlcyhzZWxm
KQorICAgICAgICAgICAgcmV0dXJuIGZvdW5kX3R5cGUKKworICAgICAgICByYWlzZSBUeXBlY2hl
Y2tFeGNlcHRpb24oIkxvb2t1cCBmYWlsZWQgZm9yIHR5cGUgZGVjbGFyYXRpb246ICVzIChyZWZl
cmVuY2VkIGZyb20gZG9tYWluOiAlcykiICUgKGRlY2xhcmF0aW9uLnR5cGVfbmFtZSwgZG9tYWlu
LmRvbWFpbl9uYW1lKSkKKworICAgIGRlZiBsb29rdXBfdHlwZV9yZWZlcmVuY2Uoc2VsZiwgdHlw
ZV9yZWYsIGRvbWFpbik6CisgICAgICAgICMgSWYgcmVmZXJlbmNlIGlzIHRvIGFuIGFub255bW91
cyBhcnJheSB0eXBlLCBjcmVhdGUgYSBmcmVzaCBpbnN0YW5jZS4KKyAgICAgICAgaWYgdHlwZV9y
ZWYudHlwZV9raW5kID09ICJhcnJheSI6CisgICAgICAgICAgICB0eXBlX2luc3RhbmNlID0gQXJy
YXlUeXBlKHR5cGVfcmVmLmFycmF5X3R5cGVfcmVmLCBkb21haW4pCisgICAgICAgICAgICB0eXBl
X2luc3RhbmNlLnJlc29sdmVfdHlwZV9yZWZlcmVuY2VzKHNlbGYpCisgICAgICAgICAgICBsb2cu
ZGVidWcoIjwgQ3JlYXRlZCBmcmVzaCB0eXBlIGluc3RhbmNlIGZvciBhbm9ueW1vdXMgYXJyYXkg
dHlwZTogJXMiICUgdHlwZV9pbnN0YW5jZS5xdWFsaWZpZWRfbmFtZSgpKQorICAgICAgICAgICAg
cmV0dXJuIHR5cGVfaW5zdGFuY2UKKworICAgICAgICAjIElmIHJlZmVyZW5jZSBpcyB0byBhbiBh
bm9ueW1vdXMgZW51bSB0eXBlLCBjcmVhdGUgYSBmcmVzaCBpbnN0YW5jZS4KKyAgICAgICAgaWYg
dHlwZV9yZWYuZW51bV92YWx1ZXMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAjIFdlIG5lZWQg
dG8gY3JlYXRlIGEgdHlwZSByZWZlcmVuY2Ugd2l0aG91dCBlbnVtIHZhbHVlcyBhcyB0aGUgZW51
bSdzIG5lc3RlZCB0eXBlLgorICAgICAgICAgICAgcHJpbWl0aXZlX3R5cGVfcmVmID0gVHlwZVJl
ZmVyZW5jZSh0eXBlX3JlZi50eXBlX2tpbmQsIE5vbmUsIE5vbmUsIE5vbmUpCisgICAgICAgICAg
ICB0eXBlX2luc3RhbmNlID0gRW51bVR5cGUoIihhbm9ueW1vdXMpIiwgZG9tYWluLCB0eXBlX3Jl
Zi5lbnVtX3ZhbHVlcywgcHJpbWl0aXZlX3R5cGVfcmVmLCBUcnVlKQorICAgICAgICAgICAgdHlw
ZV9pbnN0YW5jZS5yZXNvbHZlX3R5cGVfcmVmZXJlbmNlcyhzZWxmKQorICAgICAgICAgICAgbG9n
LmRlYnVnKCI8IENyZWF0ZWQgZnJlc2ggdHlwZSBpbnN0YW5jZSBmb3IgYW5vbnltb3VzIGVudW0g
dHlwZTogJXMiICUgdHlwZV9pbnN0YW5jZS5xdWFsaWZpZWRfbmFtZSgpKQorICAgICAgICAgICAg
cmV0dXJuIHR5cGVfaW5zdGFuY2UKKworICAgICAgICAjIFRoaXMgd2lsbCBtYXRjaCB3aGVuIHJl
ZmVyZW5jaW5nIGEgdHlwZSBkZWZpbmVkIGluIHRoZSBzYW1lIGRvbWFpbiwgd2hlcmUgcHJlZml4
ZXMgYXJlbid0IHJlcXVpcmVkLgorICAgICAgICBxdWFsaWZpZWRfbmFtZSA9ICIuIi5qb2luKFtk
b21haW4uZG9tYWluX25hbWUsIHR5cGVfcmVmLnJlZmVyZW5jZWRfbmFtZSgpXSkKKyAgICAgICAg
aWYgcXVhbGlmaWVkX25hbWUgaW4gc2VsZi50eXBlc19ieV9uYW1lOgorICAgICAgICAgICAgZm91
bmRfdHlwZSA9IHNlbGYudHlwZXNfYnlfbmFtZVtxdWFsaWZpZWRfbmFtZV0KKyAgICAgICAgICAg
IGZvdW5kX3R5cGUucmVzb2x2ZV90eXBlX3JlZmVyZW5jZXMoc2VsZikKKyAgICAgICAgICAgIGxv
Zy5kZWJ1ZygiPCBMb29rdXAgc3VjY2VlZGVkIGZvciB1bnF1YWxpZmllZCB0eXBlOiAlcyIgJSBm
b3VuZF90eXBlLnF1YWxpZmllZF9uYW1lKCkpCisgICAgICAgICAgICByZXR1cm4gZm91bmRfdHlw
ZQorCisgICAgICAgICMgVGhpcyB3aWxsIG1hdGNoIHByaW1pdGl2ZSB0eXBlcyBhbmQgZnVsbHkt
cXVhbGlmaWVkIHR5cGVzIGZyb20gYSBkaWZmZXJlbnQgZG9tYWluLgorICAgICAgICBpZiB0eXBl
X3JlZi5yZWZlcmVuY2VkX25hbWUoKSBpbiBzZWxmLnR5cGVzX2J5X25hbWU6CisgICAgICAgICAg
ICBmb3VuZF90eXBlID0gc2VsZi50eXBlc19ieV9uYW1lW3R5cGVfcmVmLnJlZmVyZW5jZWRfbmFt
ZSgpXQorICAgICAgICAgICAgZm91bmRfdHlwZS5yZXNvbHZlX3R5cGVfcmVmZXJlbmNlcyhzZWxm
KQorICAgICAgICAgICAgbG9nLmRlYnVnKCI8IExvb2t1cCBzdWNjZWVkZWQgZm9yIHByaW1pdGl2
ZSBvciBxdWFsaWZpZWQgdHlwZTogJXMiICUgZm91bmRfdHlwZS5xdWFsaWZpZWRfbmFtZSgpKQor
ICAgICAgICAgICAgcmV0dXJuIGZvdW5kX3R5cGUKKworICAgICAgICByYWlzZSBUeXBlY2hlY2tF
eGNlcHRpb24oIkxvb2t1cCBmYWlsZWQgZm9yIHR5cGUgcmVmZXJlbmNlOiAlcyAocmVmZXJlbmNl
ZCBmcm9tIGRvbWFpbjogJXMpIiAlICh0eXBlX3JlZi5yZWZlcmVuY2VkX25hbWUoKSwgZG9tYWlu
LmRvbWFpbl9uYW1lKSkKKworCitjbGFzcyBEb21haW46CisgICAgZGVmIF9faW5pdF9fKHNlbGYs
IGRvbWFpbl9uYW1lLCBkZXNjcmlwdGlvbiwgaXNTdXBwbGVtZW50YWwsIHR5cGVfZGVjbGFyYXRp
b25zLCBjb21tYW5kcywgZXZlbnRzKToKKyAgICAgICAgc2VsZi5kb21haW5fbmFtZSA9IGRvbWFp
bl9uYW1lCisgICAgICAgIHNlbGYuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbgorICAgICAgICBz
ZWxmLmlzX3N1cHBsZW1lbnRhbCA9IGlzU3VwcGxlbWVudGFsCisgICAgICAgIHNlbGYudHlwZV9k
ZWNsYXJhdGlvbnMgPSB0eXBlX2RlY2xhcmF0aW9ucworICAgICAgICBzZWxmLmNvbW1hbmRzID0g
Y29tbWFuZHMKKyAgICAgICAgc2VsZi5ldmVudHMgPSBldmVudHMKKworICAgIGRlZiByZXNvbHZl
X3R5cGVfcmVmZXJlbmNlcyhzZWxmLCBwcm90b2NvbCk6CisgICAgICAgIGxvZy5kZWJ1ZygiPiBS
ZXNvbHZpbmcgdHlwZSBkZWNsYXJhdGlvbnMgZm9yIGRvbWFpbjogJXMiICUgc2VsZi5kb21haW5f
bmFtZSkKKyAgICAgICAgZm9yIF9kZWNsYXJhdGlvbiBpbiBzZWxmLnR5cGVfZGVjbGFyYXRpb25z
OgorICAgICAgICAgICAgX2RlY2xhcmF0aW9uLnJlc29sdmVfdHlwZV9yZWZlcmVuY2VzKHByb3Rv
Y29sLCBzZWxmKQorCisgICAgICAgIGxvZy5kZWJ1ZygiPiBSZXNvbHZpbmcgdHlwZXMgaW4gY29t
bWFuZHMgZm9yIGRvbWFpbjogJXMiICUgc2VsZi5kb21haW5fbmFtZSkKKyAgICAgICAgZm9yIF9j
b21tYW5kIGluIHNlbGYuY29tbWFuZHM6CisgICAgICAgICAgICBfY29tbWFuZC5yZXNvbHZlX3R5
cGVfcmVmZXJlbmNlcyhwcm90b2NvbCwgc2VsZikKKworICAgICAgICBsb2cuZGVidWcoIj4gUmVz
b2x2aW5nIHR5cGVzIGluIGV2ZW50cyBmb3IgZG9tYWluOiAlcyIgJSBzZWxmLmRvbWFpbl9uYW1l
KQorICAgICAgICBmb3IgX2V2ZW50IGluIHNlbGYuZXZlbnRzOgorICAgICAgICAgICAgX2V2ZW50
LnJlc29sdmVfdHlwZV9yZWZlcmVuY2VzKHByb3RvY29sLCBzZWxmKQorCisKK2NsYXNzIERvbWFp
bnM6CisgICAgR0xPQkFMID0gRG9tYWluKCIiLCAiVGhlIGdsb2JhbCBkb21haW4sIGluIHdoaWNo
IHByaW1pdGl2ZSB0eXBlcyBhcmUgaW1wbGljaXRseSBkZWNsYXJlZC4iLCBUcnVlLCBbXSwgW10s
IFtdKQorCisKK2NsYXNzIFR5cGVEZWNsYXJhdGlvbjoKKyAgICBkZWYgX19pbml0X18oc2VsZiwg
dHlwZV9uYW1lLCB0eXBlX3JlZiwgZGVzY3JpcHRpb24sIHR5cGVfbWVtYmVycyk6CisgICAgICAg
IHNlbGYudHlwZV9uYW1lID0gX1RZUEVTX05FRURJTkdfUkVOQU1FX1dPUktBUk9VTkRTLmdldCh0
eXBlX25hbWUsIHR5cGVfbmFtZSkKKyAgICAgICAgc2VsZi50eXBlX3JlZiA9IHR5cGVfcmVmCisg
ICAgICAgIHNlbGYuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbgorICAgICAgICBzZWxmLnR5cGVf
bWVtYmVycyA9IHR5cGVfbWVtYmVycworCisgICAgICAgIGlmIHNlbGYudHlwZV9uYW1lICE9IHVj
Zmlyc3Qoc2VsZi50eXBlX25hbWUpOgorICAgICAgICAgICAgcmFpc2UgUGFyc2VFeGNlcHRpb24o
IlR5cGVzIG11c3QgYmVnaW4gd2l0aCBhbiB1cHBlcmNhc2UgY2hhcmFjdGVyLiIpCisKKyAgICBk
ZWYgcmVzb2x2ZV90eXBlX3JlZmVyZW5jZXMoc2VsZiwgcHJvdG9jb2wsIGRvbWFpbik6CisgICAg
ICAgIGxvZy5kZWJ1ZygiPj4gUmVzb2x2aW5nIHR5cGUgcmVmZXJlbmNlcyBmb3IgdHlwZSBkZWNs
YXJhdGlvbjogJXMiICUgc2VsZi50eXBlX25hbWUpCisgICAgICAgIHNlbGYudHlwZSA9IHByb3Rv
Y29sLmxvb2t1cF90eXBlX2Zvcl9kZWNsYXJhdGlvbihzZWxmLCBkb21haW4pCisgICAgICAgIGZv
ciBfbWVtYmVyIGluIHNlbGYudHlwZV9tZW1iZXJzOgorICAgICAgICAgICAgX21lbWJlci5yZXNv
bHZlX3R5cGVfcmVmZXJlbmNlcyhwcm90b2NvbCwgZG9tYWluKQorCisKK2NsYXNzIFR5cGVNZW1i
ZXI6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1lbWJlcl9uYW1lLCB0eXBlX3JlZiwgaXNfb3B0
aW9uYWwsIGRlc2NyaXB0aW9uKToKKyAgICAgICAgc2VsZi5tZW1iZXJfbmFtZSA9IG1lbWJlcl9u
YW1lCisgICAgICAgIHNlbGYudHlwZV9yZWYgPSB0eXBlX3JlZgorICAgICAgICBzZWxmLmlzX29w
dGlvbmFsID0gaXNfb3B0aW9uYWwKKyAgICAgICAgc2VsZi5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0
aW9uCisKKyAgICBkZWYgcmVzb2x2ZV90eXBlX3JlZmVyZW5jZXMoc2VsZiwgcHJvdG9jb2wsIGRv
bWFpbik6CisgICAgICAgIGxvZy5kZWJ1ZygiPj4+IFJlc29sdmluZyB0eXBlIHJlZmVyZW5jZXMg
Zm9yIHR5cGUgbWVtYmVyOiAlcyIgJSBzZWxmLm1lbWJlcl9uYW1lKQorICAgICAgICBzZWxmLnR5
cGUgPSBwcm90b2NvbC5sb29rdXBfdHlwZV9yZWZlcmVuY2Uoc2VsZi50eXBlX3JlZiwgZG9tYWlu
KQorCisKK2NsYXNzIFBhcmFtZXRlcjoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcGFyYW1ldGVy
X25hbWUsIHR5cGVfcmVmLCBpc19vcHRpb25hbCwgZGVzY3JpcHRpb24pOgorICAgICAgICBzZWxm
LnBhcmFtZXRlcl9uYW1lID0gcGFyYW1ldGVyX25hbWUKKyAgICAgICAgc2VsZi50eXBlX3JlZiA9
IHR5cGVfcmVmCisgICAgICAgIHNlbGYuaXNfb3B0aW9uYWwgPSBpc19vcHRpb25hbAorICAgICAg
ICBzZWxmLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb24KKworICAgIGRlZiByZXNvbHZlX3R5cGVf
cmVmZXJlbmNlcyhzZWxmLCBwcm90b2NvbCwgZG9tYWluKToKKyAgICAgICAgbG9nLmRlYnVnKCI+
Pj4gUmVzb2x2aW5nIHR5cGUgcmVmZXJlbmNlcyBmb3IgcGFyYW1ldGVyOiAlcyIgJSBzZWxmLnBh
cmFtZXRlcl9uYW1lKQorICAgICAgICBzZWxmLnR5cGUgPSBwcm90b2NvbC5sb29rdXBfdHlwZV9y
ZWZlcmVuY2Uoc2VsZi50eXBlX3JlZiwgZG9tYWluKQorCisKK2NsYXNzIENvbW1hbmQ6CisgICAg
ZGVmIF9faW5pdF9fKHNlbGYsIGNvbW1hbmRfbmFtZSwgY2FsbF9wYXJhbWV0ZXJzLCByZXR1cm5f
cGFyYW1ldGVycywgZGVzY3JpcHRpb24sIGlzX2FzeW5jKToKKyAgICAgICAgc2VsZi5jb21tYW5k
X25hbWUgPSBjb21tYW5kX25hbWUKKyAgICAgICAgc2VsZi5jYWxsX3BhcmFtZXRlcnMgPSBjYWxs
X3BhcmFtZXRlcnMKKyAgICAgICAgc2VsZi5yZXR1cm5fcGFyYW1ldGVycyA9IHJldHVybl9wYXJh
bWV0ZXJzCisgICAgICAgIHNlbGYuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbgorICAgICAgICBz
ZWxmLmlzX2FzeW5jID0gaXNfYXN5bmMKKworICAgIGRlZiByZXNvbHZlX3R5cGVfcmVmZXJlbmNl
cyhzZWxmLCBwcm90b2NvbCwgZG9tYWluKToKKyAgICAgICAgbG9nLmRlYnVnKCI+PiBSZXNvbHZp
bmcgdHlwZSByZWZlcmVuY2VzIGZvciBjYWxsIHBhcmFtZXRlcnMgaW4gY29tbWFuZDogJXMiICUg
c2VsZi5jb21tYW5kX25hbWUpCisgICAgICAgIGZvciBfcGFyYW1ldGVyIGluIHNlbGYuY2FsbF9w
YXJhbWV0ZXJzOgorICAgICAgICAgICAgX3BhcmFtZXRlci5yZXNvbHZlX3R5cGVfcmVmZXJlbmNl
cyhwcm90b2NvbCwgZG9tYWluKQorCisgICAgICAgIGxvZy5kZWJ1ZygiPj4gUmVzb2x2aW5nIHR5
cGUgcmVmZXJlbmNlcyBmb3IgcmV0dXJuIHBhcmFtZXRlcnMgaW4gY29tbWFuZDogJXMiICUgc2Vs
Zi5jb21tYW5kX25hbWUpCisgICAgICAgIGZvciBfcGFyYW1ldGVyIGluIHNlbGYucmV0dXJuX3Bh
cmFtZXRlcnM6CisgICAgICAgICAgICBfcGFyYW1ldGVyLnJlc29sdmVfdHlwZV9yZWZlcmVuY2Vz
KHByb3RvY29sLCBkb21haW4pCisKKworY2xhc3MgRXZlbnQ6CisgICAgZGVmIF9faW5pdF9fKHNl
bGYsIGV2ZW50X25hbWUsIGV2ZW50X3BhcmFtZXRlcnMsIGRlc2NyaXB0aW9uKToKKyAgICAgICAg
c2VsZi5ldmVudF9uYW1lID0gZXZlbnRfbmFtZQorICAgICAgICBzZWxmLmV2ZW50X3BhcmFtZXRl
cnMgPSBldmVudF9wYXJhbWV0ZXJzCisgICAgICAgIHNlbGYuZGVzY3JpcHRpb24gPSBkZXNjcmlw
dGlvbgorCisgICAgZGVmIHJlc29sdmVfdHlwZV9yZWZlcmVuY2VzKHNlbGYsIHByb3RvY29sLCBk
b21haW4pOgorICAgICAgICBsb2cuZGVidWcoIj4+IFJlc29sdmluZyB0eXBlIHJlZmVyZW5jZXMg
Zm9yIHBhcmFtZXRlcnMgaW4gZXZlbnQ6ICVzIiAlIHNlbGYuZXZlbnRfbmFtZSkKKyAgICAgICAg
Zm9yIF9wYXJhbWV0ZXIgaW4gc2VsZi5ldmVudF9wYXJhbWV0ZXJzOgorICAgICAgICAgICAgX3Bh
cmFtZXRlci5yZXNvbHZlX3R5cGVfcmVmZXJlbmNlcyhwcm90b2NvbCwgZG9tYWluKQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKbmV3
IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uMmZkNmRmYmU3M2RhM2ZlNGYyZTFhNGMzZDFlYWI0NTVkODc4Y2U2YgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKQEAgLTAsMCArMSwxODYgQEAKKyMh
L3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTQgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKGMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisjIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworIyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisjIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKworIyBUaGlzIHNjcmlwdCBnZW5lcmF0ZXMgSlMgYW5kIEMrKyBiaW5k
aW5ncyBmb3IgdGhlIGluc3BlY3RvciBwcm90b2NvbC4KKyMgR2VuZXJhdG9ycyBmb3IgaW5kaXZp
ZHVhbCBmaWxlcyBhcmUgbG9jYXRlZCBpbiB0aGUgY29kZWdlbi8gZGlyZWN0b3J5LgorCitpbXBv
cnQgb3MucGF0aAoraW1wb3J0IHJlCitpbXBvcnQgc3lzCitpbXBvcnQgc3RyaW5nCitmcm9tIHN0
cmluZyBpbXBvcnQgVGVtcGxhdGUKK2ltcG9ydCBvcHRwYXJzZQoraW1wb3J0IGxvZ2dpbmcKKwor
dHJ5OgorICAgIGltcG9ydCBqc29uCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgaW1wb3J0IHNp
bXBsZWpzb24gYXMganNvbgorCit0cnk6CisgICAgZnJvbSBjb2RlZ2VuIGltcG9ydCAqCisKKyMg
V2hlbiBjb3B5aW5nIGdlbmVyYXRvciBmaWxlcyB0byBKYXZhU2NyaXB0Q29yZSdzIHByaXZhdGUg
aGVhZGVycyBvbiBNYWMsCisjIHRoZSBjb2RlZ2VuLyBtb2R1bGUgZGlyZWN0b3J5IGlzIGZsYXR0
ZW5lZC4gU28sIGltcG9ydCBkaXJlY3RseS4KK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBpbXBv
cnQgbW9kZWxzCisgICAgZnJvbSBtb2RlbHMgaW1wb3J0ICoKKyAgICBmcm9tIGdlbmVyYXRvciBp
bXBvcnQgKgorCisgICAgZnJvbSBnZW5lcmF0ZV9iYWNrZW5kX2NvbW1hbmRzIGltcG9ydCAqCisg
ICAgZnJvbSBnZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyIGltcG9ydCAqCisgICAg
ZnJvbSBnZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24gaW1wb3J0ICoK
KyAgICBmcm9tIGdlbmVyYXRlX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyIGltcG9ydCAqCisg
ICAgZnJvbSBnZW5lcmF0ZV9mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uIGltcG9y
dCAqCisgICAgZnJvbSBnZW5lcmF0ZV90eXBlX2J1aWxkZXJfaGVhZGVyIGltcG9ydCAqCisgICAg
ZnJvbSBnZW5lcmF0ZV90eXBlX2J1aWxkZXJfaW1wbGVtZW50YXRpb24gaW1wb3J0ICoKKworCits
b2dnaW5nLmJhc2ljQ29uZmlnKGZvcm1hdD0nJShsZXZlbG5hbWUpczogJShtZXNzYWdlKXMnLCBs
ZXZlbD1sb2dnaW5nLkVSUk9SKQorbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2JhbCcpCisK
KworIyBBIHdyaXRlciB0aGF0IG9ubHkgdXBkYXRlcyBmaWxlIGlmIGl0IGFjdHVhbGx5IGNoYW5n
ZWQuCitjbGFzcyBJbmNyZW1lbnRhbEZpbGVXcml0ZXI6CisgICAgZGVmIF9faW5pdF9fKHNlbGYs
IGZpbGVwYXRoLCBmb3JjZV9vdXRwdXQpOgorICAgICAgICBzZWxmLl9maWxlcGF0aCA9IGZpbGVw
YXRoCisgICAgICAgIHNlbGYuX291dHB1dCA9ICIiCisgICAgICAgIHNlbGYuZm9yY2Vfb3V0cHV0
ID0gZm9yY2Vfb3V0cHV0CisKKyAgICBkZWYgd3JpdGUoc2VsZiwgdGV4dCk6CisgICAgICAgIHNl
bGYuX291dHB1dCArPSB0ZXh0CisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgIHRleHRf
Y2hhbmdlZCA9IFRydWUKKyAgICAgICAgc2VsZi5fb3V0cHV0ID0gc2VsZi5fb3V0cHV0LnJzdHJp
cCgpICsgIlxuIgorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIHNlbGYuZm9yY2Vfb3V0
cHV0OgorICAgICAgICAgICAgICAgIHJhaXNlCisKKyAgICAgICAgICAgIHJlYWRfZmlsZSA9IG9w
ZW4oc2VsZi5fZmlsZXBhdGgsICJyIikKKyAgICAgICAgICAgIG9sZF90ZXh0ID0gcmVhZF9maWxl
LnJlYWQoKQorICAgICAgICAgICAgcmVhZF9maWxlLmNsb3NlKCkKKyAgICAgICAgICAgIHRleHRf
Y2hhbmdlZCA9IG9sZF90ZXh0ICE9IHNlbGYuX291dHB1dAorICAgICAgICBleGNlcHQ6CisgICAg
ICAgICAgICAjIElnbm9yZSwganVzdCBvdmVyd3JpdGUgYnkgZGVmYXVsdAorICAgICAgICAgICAg
cGFzcworCisgICAgICAgIGlmIHRleHRfY2hhbmdlZCBvciBzZWxmLmZvcmNlX291dHB1dDoKKyAg
ICAgICAgICAgIG91dF9maWxlID0gb3BlbihzZWxmLl9maWxlcGF0aCwgInciKQorICAgICAgICAg
ICAgb3V0X2ZpbGUud3JpdGUoc2VsZi5fb3V0cHV0KQorICAgICAgICAgICAgb3V0X2ZpbGUuY2xv
c2UoKQorCisKK2RlZiBnZW5lcmF0ZV9mcm9tX3NwZWNpZmljYXRpb24ocHJpbWFyeV9zcGVjaWZp
Y2F0aW9uX2ZpbGVwYXRoPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1
cHBsZW1lbnRhbF9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRocz1bXSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uY2F0ZW5hdGVfb3V0cHV0PUZhbHNlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBvdXRwdXRfZGlycGF0aD1Ob25lLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmb3JjZV9vdXRwdXQ9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGZyYW1ld29ya19uYW1lPSIiKToKKworICAgIGRlZiBsb2FkX3NwZWNpZmljYXRp
b24ocHJvdG9jb2wsIGZpbGVwYXRoLCBpc1N1cHBsZW1lbnRhbD1GYWxzZSk6CisgICAgICAgIHRy
eToKKyAgICAgICAgICAgIHdpdGggb3BlbihmaWxlcGF0aCwgInIiKSBhcyBpbnB1dF9maWxlOgor
ICAgICAgICAgICAgICAgIHBhcnNlZF9qc29uID0ganNvbi5sb2FkKGlucHV0X2ZpbGUpCisgICAg
ICAgICAgICAgICAgcHJvdG9jb2wucGFyc2Vfc3BlY2lmaWNhdGlvbihwYXJzZWRfanNvbiwgaXNT
dXBwbGVtZW50YWwpCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yIGFzIGU6CisgICAgICAgICAg
ICByYWlzZSBFeGNlcHRpb24oIkVycm9yIHBhcnNpbmcgdmFsaWQgSlNPTiBpbiBmaWxlOiAiICsg
ZmlsZXBhdGgpCisKKyAgICBwcm90b2NvbCA9IG1vZGVscy5Qcm90b2NvbChmcmFtZXdvcmtfbmFt
ZSkKKyAgICBmb3Igc3BlY2lmaWNhdGlvbiBpbiBzdXBwbGVtZW50YWxfc3BlY2lmaWNhdGlvbl9m
aWxlcGF0aHM6CisgICAgICAgIGxvYWRfc3BlY2lmaWNhdGlvbihwcm90b2NvbCwgc3BlY2lmaWNh
dGlvbiwgaXNTdXBwbGVtZW50YWw9VHJ1ZSkKKyAgICBsb2FkX3NwZWNpZmljYXRpb24ocHJvdG9j
b2wsIHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aCwgaXNTdXBwbGVtZW50YWw9RmFsc2Up
CisKKyAgICBwcm90b2NvbC5yZXNvbHZlX3R5cGVzKCkKKworICAgIGdlbmVyYXRvcnMgPSBbXQor
ICAgIGdlbmVyYXRvcnMuYXBwZW5kKEJhY2tlbmRDb21tYW5kc0dlbmVyYXRvcihwcm90b2NvbCwg
cHJpbWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRoKSkKKyAgICBnZW5lcmF0b3JzLmFwcGVuZChC
YWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvcihwcm90b2NvbCwgcHJpbWFyeV9zcGVjaWZp
Y2F0aW9uX2ZpbGVwYXRoKSkKKyAgICBnZW5lcmF0b3JzLmFwcGVuZChCYWNrZW5kRGlzcGF0Y2hl
ckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKHByb3RvY29sLCBwcmltYXJ5X3NwZWNpZmljYXRpb25f
ZmlsZXBhdGgpKQorICAgIGdlbmVyYXRvcnMuYXBwZW5kKEZyb250ZW5kRGlzcGF0Y2hlckhlYWRl
ckdlbmVyYXRvcihwcm90b2NvbCwgcHJpbWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRoKSkKKyAg
ICBnZW5lcmF0b3JzLmFwcGVuZChGcm9udGVuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVy
YXRvcihwcm90b2NvbCwgcHJpbWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRoKSkKKyAgICBnZW5l
cmF0b3JzLmFwcGVuZChUeXBlQnVpbGRlckhlYWRlckdlbmVyYXRvcihwcm90b2NvbCwgcHJpbWFy
eV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRoKSkKKyAgICBnZW5lcmF0b3JzLmFwcGVuZChUeXBlQnVp
bGRlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKHByb3RvY29sLCBwcmltYXJ5X3NwZWNpZmljYXRp
b25fZmlsZXBhdGgpKQorCisgICAgc2luZ2xlX291dHB1dF9maWxlX2NvbnRlbnRzID0gW10KKwor
ICAgIGZvciBnZW5lcmF0b3IgaW4gZ2VuZXJhdG9yczoKKyAgICAgICAgb3V0cHV0ID0gZ2VuZXJh
dG9yLmdlbmVyYXRlX291dHB1dCgpCisgICAgICAgIGlmIGNvbmNhdGVuYXRlX291dHB1dDoKKyAg
ICAgICAgICAgIHNpbmdsZV9vdXRwdXRfZmlsZV9jb250ZW50cy5hcHBlbmQoJyMjIyBCZWdpbiBG
aWxlOiAlcycgJSBnZW5lcmF0b3Iub3V0cHV0X2ZpbGVuYW1lKCkpCisgICAgICAgICAgICBzaW5n
bGVfb3V0cHV0X2ZpbGVfY29udGVudHMuYXBwZW5kKG91dHB1dCkKKyAgICAgICAgICAgIHNpbmds
ZV9vdXRwdXRfZmlsZV9jb250ZW50cy5hcHBlbmQoJyMjIyBFbmQgRmlsZTogJXMnICUgZ2VuZXJh
dG9yLm91dHB1dF9maWxlbmFtZSgpKQorICAgICAgICAgICAgc2luZ2xlX291dHB1dF9maWxlX2Nv
bnRlbnRzLmFwcGVuZCgnJykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG91dHB1dF9maWxl
ID0gSW5jcmVtZW50YWxGaWxlV3JpdGVyKG9zLnBhdGguam9pbihvdXRwdXRfZGlycGF0aCwgZ2Vu
ZXJhdG9yLm91dHB1dF9maWxlbmFtZSgpKSwgZm9yY2Vfb3V0cHV0KQorICAgICAgICAgICAgb3V0
cHV0X2ZpbGUud3JpdGUob3V0cHV0KQorICAgICAgICAgICAgb3V0cHV0X2ZpbGUuY2xvc2UoKQor
CisgICAgaWYgY29uY2F0ZW5hdGVfb3V0cHV0OgorICAgICAgICBmaWxlbmFtZSA9IG9zLnBhdGgu
am9pbihvcy5wYXRoLmJhc2VuYW1lKHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aCkgKyAn
LXJlc3VsdCcpCisgICAgICAgIG91dHB1dF9maWxlID0gSW5jcmVtZW50YWxGaWxlV3JpdGVyKG9z
LnBhdGguam9pbihvdXRwdXRfZGlycGF0aCwgZmlsZW5hbWUpLCBmb3JjZV9vdXRwdXQpCisgICAg
ICAgIG91dHB1dF9maWxlLndyaXRlKCdcbicuam9pbihzaW5nbGVfb3V0cHV0X2ZpbGVfY29udGVu
dHMpKQorICAgICAgICBvdXRwdXRfZmlsZS5jbG9zZSgpCisKKworaWYgX19uYW1lX18gPT0gJ19f
bWFpbl9fJzoKKyAgICBhbGxvd2VkX2ZyYW1ld29ya19uYW1lcyA9IFsnV1RGJywgJ0phdmFTY3Jp
cHRDb3JlJywgJ1dlYkNvcmUnLCAnV2ViS2l0JywgJ1dlYktpdDInLCAnVGVzdCddCisgICAgY2xp
X3BhcnNlciA9IG9wdHBhcnNlLk9wdGlvblBhcnNlcih1c2FnZT0idXNhZ2U6ICVwcm9nIFtvcHRp
b25zXSBQcmltYXJ5UHJvdG9jb2wuanNvbiBbU3VwcGxlbWVudGFsUHJvdG9jb2wuanNvbiAuLi5d
IikKKyAgICBjbGlfcGFyc2VyLmFkZF9vcHRpb24oIi1vIiwgIi0tb3V0cHV0RGlyIiwgaGVscD0i
RGlyZWN0b3J5IHdoZXJlIGdlbmVyYXRlZCBmaWxlcyBzaG91bGQgYmUgd3JpdHRlbi4iKQorICAg
IGNsaV9wYXJzZXIuYWRkX29wdGlvbigiLS1mcmFtZXdvcmsiLCB0eXBlPSJjaG9pY2UiLCBjaG9p
Y2VzPWFsbG93ZWRfZnJhbWV3b3JrX25hbWVzLCBoZWxwPSJUaGUgZnJhbWV3b3JrIHRoYXQgdGhl
IHByaW1hcnkgc3BlY2lmaWNhdGlvbiBiZWxvbmdzIHRvLiIpCisgICAgY2xpX3BhcnNlci5hZGRf
b3B0aW9uKCItLWZvcmNlIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwgaGVscD0iRm9yY2Ugb3V0cHV0
IG9mIGdlbmVyYXRlZCBzY3JpcHRzLCBldmVuIGlmIG5vdGhpbmcgY2hhbmdlZC4iKQorICAgIGNs
aV9wYXJzZXIuYWRkX29wdGlvbigiLXYiLCAiLS1kZWJ1ZyIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIs
IGhlbHA9IkxvZyBleHRyYSBvdXRwdXQgZm9yIGRlYnVnZ2luZyB0aGUgZ2VuZXJhdG9yIGl0c2Vs
Zi4iKQorICAgIGNsaV9wYXJzZXIuYWRkX29wdGlvbigiLXQiLCAiLS10ZXN0IiwgYWN0aW9uPSJz
dG9yZV90cnVlIiwgaGVscD0iRW5hYmxlIHRlc3QgbW9kZS4gVXNlIHVuaXF1ZSBvdXRwdXQgZmls
ZW5hbWVzIGNyZWF0ZWQgYnkgcHJlcGVuZGluZyB0aGUgaW5wdXQgZmlsZW5hbWUuIikKKworICAg
IG9wdGlvbnMgPSBOb25lCisKKyAgICBhcmdfb3B0aW9ucywgYXJnX3ZhbHVlcyA9IGNsaV9wYXJz
ZXIucGFyc2VfYXJncygpCisgICAgaWYgKGxlbihhcmdfdmFsdWVzKSA8IDEpOgorICAgICAgICBy
YWlzZSBQYXJzZUV4Y2VwdGlvbigiQXQgbGVhc3Qgb25lIHBsYWluIGFyZ3VtZW50IGV4cGVjdGVk
IikKKworICAgIGlmIG5vdCBhcmdfb3B0aW9ucy5vdXRwdXREaXI6CisgICAgICAgIHJhaXNlIFBh
cnNlRXhjZXB0aW9uKCJNaXNzaW5nIG91dHB1dCBkaXJlY3RvcnkiKQorCisgICAgaWYgYXJnX29w
dGlvbnMuZGVidWc6CisgICAgICAgIGxvZy5zZXRMZXZlbChsb2dnaW5nLkRFQlVHKQorCisgICAg
b3B0aW9ucyA9IHsKKyAgICAgICAgJ3ByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aCc6IGFy
Z192YWx1ZXNbMF0sCisgICAgICAgICdzdXBwbGVtZW50YWxfc3BlY2lmaWNhdGlvbl9maWxlcGF0
aHMnOiBhcmdfdmFsdWVzWzE6XSwKKyAgICAgICAgJ291dHB1dF9kaXJwYXRoJzogYXJnX29wdGlv
bnMub3V0cHV0RGlyLAorICAgICAgICAnY29uY2F0ZW5hdGVfb3V0cHV0JzogYXJnX29wdGlvbnMu
dGVzdCwKKyAgICAgICAgJ2ZyYW1ld29ya19uYW1lJzogYXJnX29wdGlvbnMuZnJhbWV3b3JrLAor
ICAgICAgICAnZm9yY2Vfb3V0cHV0JzogYXJnX29wdGlvbnMuZm9yY2UKKyAgICB9CisKKyAgICB0
cnk6CisgICAgICAgIGdlbmVyYXRlX2Zyb21fc3BlY2lmaWNhdGlvbigqKm9wdGlvbnMpCisgICAg
ZXhjZXB0IChQYXJzZUV4Y2VwdGlvbiwgVHlwZWNoZWNrRXhjZXB0aW9uKSBhcyBlOgorICAgICAg
ICBpZiBhcmdfb3B0aW9ucy50ZXN0OgorICAgICAgICAgICAgbG9nLmVycm9yKGUubWVzc2FnZSkK
KyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlICAjIEZvcmNlIHRoZSBidWlsZCB0byBm
YWlsLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2NvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24gYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvY29tbWFuZHMtd2l0aC1hc3luYy1hdHRy
aWJ1dGUuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41NjFiNWNlYWIxNGM3YWMzN2VlNTFhOWJkN2M5MjAzZmM1
YmFiMTBiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2NvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24KQEAgLTAs
MCArMSwxMDAgQEAKK3sKKyAgICAiZG9tYWluIjogIkRhdGFiYXNlIiwKKyAgICAidHlwZXMiOiBb
CisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJEYXRhYmFzZUlkIiwKKyAgICAgICAgICAg
ICJ0eXBlIjogImludGVnZXIiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBp
ZGVudGlmaWVyIG9mIERhdGFiYXNlIG9iamVjdC4iCisgICAgICAgIH0sCisgICAgICAgIHsKKyAg
ICAgICAgICAgICJpZCI6ICJQcmltYXJ5Q29sb3JzIiwKKyAgICAgICAgICAgICJ0eXBlIjogInN0
cmluZyIsCisgICAgICAgICAgICAiZW51bSI6IFsicmVkIiwgImdyZWVuIiwgImJsdWUiXQorICAg
ICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiRXJyb3IiLAorICAgICAgICAg
ICAgInR5cGUiOiAib2JqZWN0IiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJEYXRhYmFz
ZSBlcnJvci4iLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCisgICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJtZXNzYWdlIiwgInR5cGUiOiAic3RyaW5nIiwgImRlc2NyaXB0aW9uIjogIkVy
cm9yIG1lc3NhZ2UuIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29kZSIsICJ0eXBl
IjogImludGVnZXIiLCAiZGVzY3JpcHRpb24iOiAiRXJyb3IgY29kZS4iIH0KKyAgICAgICAgICAg
IF0KKyAgICAgICAgfQorICAgIF0sCisgICAgImNvbW1hbmRzIjogWworICAgICAgICB7CisgICAg
ICAgICAgICAibmFtZSI6ICJleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzIiwKKyAg
ICAgICAgICAgICJwYXJhbWV0ZXJzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZGF0
YWJhc2VJZCIsICIkcmVmIjogIkRhdGFiYXNlSWQiIH0sCisgICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJxdWVyeSIsICJ0eXBlIjogInN0cmluZyIgfQorICAgICAgICAgICAgXSwKKyAgICAgICAg
ICAgICJyZXR1cm5zIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29sdW1uTmFtZXMi
LCAidHlwZSI6ICJhcnJheSIsICJvcHRpb25hbCI6IHRydWUsICJpdGVtcyI6IHsgInR5cGUiOiAi
c3RyaW5nIiB9IH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJub3RlcyIsICJ0eXBlIjog
InN0cmluZyIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjog
InRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogInZhbHVlcyIsICJ0eXBlIjogIm9iamVjdCIsICJvcHRpb25h
bCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBheWxvYWQiLCAidHlwZSI6
ICJhbnkiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJk
YXRhYmFzZUlkIiwgIiRyZWYiOiAiRGF0YWJhc2VJZCIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogInNxbEVycm9yIiwgIiRyZWYiOiAiRXJyb3IiLCAib3B0
aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzY3JlZW5Db2xvciIs
ICIkcmVmIjogIlByaW1hcnlDb2xvcnMiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJwcmludENvbG9yIiwgInR5cGUiOiAic3RyaW5nIiwgImVudW0iOiBb
ImN5YW4iLCAibWFnZW50YSIsICJ5ZWxsb3ciLCAiYmxhY2siXSwgIm9wdGlvbmFsIjogdHJ1ZSB9
CisgICAgICAgICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1l
IjogImV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzIiwKKyAgICAgICAgICAgICJh
c3luYyI6IHRydWUsCisgICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKKyAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogImRhdGFiYXNlSWQiLCAiJHJlZiI6ICJEYXRhYmFzZUlkIiB9LAorICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAicXVlcnkiLCAidHlwZSI6ICJzdHJpbmciIH0KKyAgICAgICAg
ICAgIF0sCisgICAgICAgICAgICAicmV0dXJucyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1l
IjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAiYXJyYXkiLCAib3B0aW9uYWwiOiB0cnVlLCAiaXRl
bXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
bm90ZXMiLCAidHlwZSI6ICJzdHJpbmciLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJ0aW1lc3RhbXAiLCAidHlwZSI6ICJudW1iZXIiLCAib3B0aW9uYWwi
OiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ2YWx1ZXMiLCAidHlwZSI6ICJv
YmplY3QiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJw
YXlsb2FkIiwgInR5cGUiOiAiYW55IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAiZGF0YWJhc2VJZCIsICIkcmVmIjogIkRhdGFiYXNlSWQiLCAib3B0aW9u
YWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzcWxFcnJvciIsICIkcmVm
IjogIkVycm9yIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAic2NyZWVuQ29sb3IiLCAiJHJlZiI6ICJQcmltYXJ5Q29sb3JzIiwgIm9wdGlvbmFsIjogdHJ1
ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicHJpbnRDb2xvciIsICJ0eXBlIjogInN0
cmluZyIsICJlbnVtIjogWyJjeWFuIiwgIm1hZ2VudGEiLCAieWVsbG93IiwgImJsYWNrIl0sICJv
cHRpb25hbCI6IHRydWUgfQorICAgICAgICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7Cisg
ICAgICAgICAgICAibmFtZSI6ICJleGVjdXRlU1FMU3luYyIsCisgICAgICAgICAgICAicGFyYW1l
dGVycyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImRhdGFiYXNlSWQiLCAiJHJlZiI6
ICJEYXRhYmFzZUlkIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicXVlcnkiLCAidHlw
ZSI6ICJzdHJpbmciIH0KKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICAicmV0dXJucyI6IFsK
KyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAiYXJyYXki
LCAiaXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSB9LAorICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAibm90ZXMiLCAidHlwZSI6ICJzdHJpbmciIH0sCisgICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJ0aW1lc3RhbXAiLCAidHlwZSI6ICJudW1iZXIiIH0sCisgICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJ2YWx1ZXMiLCAidHlwZSI6ICJvYmplY3QiIH0sCisgICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJwYXlsb2FkIiwgInR5cGUiOiAiYW55IiB9LAorICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAiZGF0YWJhc2VJZCIsICIkcmVmIjogIkRhdGFiYXNlSWQiIH0sCisgICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJzcWxFcnJvciIsICIkcmVmIjogIkVycm9yIiB9LAorICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAic2NyZWVuQ29sb3IiLCAiJHJlZiI6ICJQcmltYXJ5Q29sb3JzIiB9LAor
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicHJpbnRDb2xvciIsICJ0eXBlIjogInN0cmluZyIs
ICJlbnVtIjogWyJjeWFuIiwgIm1hZ2VudGEiLCAieWVsbG93IiwgImJsYWNrIl0gfQorICAgICAg
ICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJleGVj
dXRlU1FMQXN5bmMiLAorICAgICAgICAgICAgImFzeW5jIjogdHJ1ZSwKKyAgICAgICAgICAgICJw
YXJhbWV0ZXJzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZGF0YWJhc2VJZCIsICIk
cmVmIjogIkRhdGFiYXNlSWQiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJxdWVyeSIs
ICJ0eXBlIjogInN0cmluZyIgfQorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICJyZXR1cm5z
IjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJh
cnJheSIsICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9IH0sCisgICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIgfSwKKyAgICAgICAgICAgICAgICB7
ICJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciIgfSwKKyAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogInZhbHVlcyIsICJ0eXBlIjogIm9iamVjdCIgfSwKKyAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJhbnkiIH0sCisgICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJkYXRhYmFzZUlkIiwgIiRyZWYiOiAiRGF0YWJhc2VJZCIgfSwKKyAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogInNxbEVycm9yIiwgIiRyZWYiOiAiRXJyb3IiIH0sCisgICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJzY3JlZW5Db2xvciIsICIkcmVmIjogIlByaW1hcnlDb2xvcnMi
IH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwcmludENvbG9yIiwgInR5cGUiOiAic3Ry
aW5nIiwgImVudW0iOiBbImN5YW4iLCAibWFnZW50YSIsICJ5ZWxsb3ciLCAiYmxhY2siXSB9Cisg
ICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvY29tbWFuZHMtd2l0aC1vcHRpb25h
bC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1w
YXJhbWV0ZXJzLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzg1NjFlNzM0NTc1NTdiOTUwY2FiY2NkYzJlOTlh
OWEzYzE5MzQwYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9jb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBh
cmFtZXRlcnMuanNvbgpAQCAtMCwwICsxLDc2IEBACit7CisgICAgImRvbWFpbiI6ICJEYXRhYmFz
ZSIsCisgICAgInR5cGVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiRGF0YWJh
c2VJZCIsCisgICAgICAgICAgICAidHlwZSI6ICJpbnRlZ2VyIiwKKyAgICAgICAgICAgICJkZXNj
cmlwdGlvbiI6ICJVbmlxdWUgaWRlbnRpZmllciBvZiBEYXRhYmFzZSBvYmplY3QuIgorICAgICAg
ICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiUHJpbWFyeUNvbG9ycyIsCisgICAg
ICAgICAgICAidHlwZSI6ICJzdHJpbmciLAorICAgICAgICAgICAgImVudW0iOiBbInJlZCIsICJn
cmVlbiIsICJibHVlIl0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjog
IkVycm9yIiwKKyAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCisgICAgICAgICAgICAiZGVz
Y3JpcHRpb24iOiAiRGF0YWJhc2UgZXJyb3IuIiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjog
WworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibWVzc2FnZSIsICJ0eXBlIjogInN0cmluZyIs
ICJkZXNjcmlwdGlvbiI6ICJFcnJvciBtZXNzYWdlLiIgfSwKKyAgICAgICAgICAgICAgICB7ICJu
YW1lIjogImNvZGUiLCAidHlwZSI6ICJpbnRlZ2VyIiwgImRlc2NyaXB0aW9uIjogIkVycm9yIGNv
ZGUuIiB9CisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdLAorICAgICJjb21tYW5kcyI6
IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiZXhlY3V0ZUFsbE9wdGlvbmFsUGFy
YW1ldGVycyIsCisgICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKKyAgICAgICAgICAgICAgICB7
ICJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAiYXJyYXkiLCAib3B0aW9uYWwiOiB0cnVl
LCAiaXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSB9LAorICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAibm90ZXMiLCAidHlwZSI6ICJzdHJpbmciLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJ0aW1lc3RhbXAiLCAidHlwZSI6ICJudW1iZXIiLCAib3B0
aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ2YWx1ZXMiLCAidHlw
ZSI6ICJvYmplY3QiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJwYXlsb2FkIiwgInR5cGUiOiAiYW55IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAiZGF0YWJhc2VJZCIsICIkcmVmIjogIkRhdGFiYXNlSWQiLCAi
b3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzcWxFcnJvciIs
ICIkcmVmIjogIkVycm9yIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAic2NyZWVuQ29sb3IiLCAiJHJlZiI6ICJQcmltYXJ5Q29sb3JzIiwgIm9wdGlvbmFs
IjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicHJpbnRDb2xvciIsICJ0eXBl
IjogInN0cmluZyIsICJlbnVtIjogWyJjeWFuIiwgIm1hZ2VudGEiLCAieWVsbG93IiwgImJsYWNr
Il0sICJvcHRpb25hbCI6IHRydWUgfQorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICJyZXR1
cm5zIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6
ICJhcnJheSIsICJvcHRpb25hbCI6IHRydWUsICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9
IH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIs
ICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRpbWVzdGFt
cCIsICJ0eXBlIjogIm51bWJlciIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogInZhbHVlcyIsICJ0eXBlIjogIm9iamVjdCIsICJvcHRpb25hbCI6IHRydWUg
fSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJhbnkiLCAi
b3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJkYXRhYmFzZUlk
IiwgIiRyZWYiOiAiRGF0YWJhc2VJZCIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogInNxbEVycm9yIiwgIiRyZWYiOiAiRXJyb3IiLCAib3B0aW9uYWwiOiB0
cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzY3JlZW5Db2xvciIsICIkcmVmIjog
IlByaW1hcnlDb2xvcnMiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJwcmludENvbG9yIiwgInR5cGUiOiAic3RyaW5nIiwgImVudW0iOiBbImN5YW4iLCAi
bWFnZW50YSIsICJ5ZWxsb3ciLCAiYmxhY2siXSwgIm9wdGlvbmFsIjogdHJ1ZSB9CisgICAgICAg
ICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImV4ZWN1
dGVOb09wdGlvbmFsUGFyYW1ldGVycyIsCisgICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKKyAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAiYXJyYXkiLCAi
aXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAibm90ZXMiLCAidHlwZSI6ICJzdHJpbmciIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJ0aW1lc3RhbXAiLCAidHlwZSI6ICJudW1iZXIiIH0sCisgICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJ2YWx1ZXMiLCAidHlwZSI6ICJvYmplY3QiIH0sCisgICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJwYXlsb2FkIiwgInR5cGUiOiAiYW55IiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAiZGF0YWJhc2VJZCIsICIkcmVmIjogIkRhdGFiYXNlSWQiIH0sCisgICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJzcWxFcnJvciIsICIkcmVmIjogIkVycm9yIiB9LAorICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAic2NyZWVuQ29sb3IiLCAiJHJlZiI6ICJQcmltYXJ5Q29sb3JzIiB9LAorICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAicHJpbnRDb2xvciIsICJ0eXBlIjogInN0cmluZyIsICJl
bnVtIjogWyJjeWFuIiwgIm1hZ2VudGEiLCAieWVsbG93IiwgImJsYWNrIl0gfQorICAgICAgICAg
ICAgXSwKKyAgICAgICAgICAgICJyZXR1cm5zIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJhcnJheSIsICJpdGVtcyI6IHsgInR5cGUiOiAic3Ry
aW5nIiB9IH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0
cmluZyIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjog
Im51bWJlciIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInZhbHVlcyIsICJ0eXBlIjog
Im9iamVjdCIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBheWxvYWQiLCAidHlwZSI6
ICJhbnkiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJkYXRhYmFzZUlkIiwgIiRyZWYi
OiAiRGF0YWJhc2VJZCIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNxbEVycm9yIiwg
IiRyZWYiOiAiRXJyb3IiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzY3JlZW5Db2xv
ciIsICIkcmVmIjogIlByaW1hcnlDb2xvcnMiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJwcmludENvbG9yIiwgInR5cGUiOiAic3RyaW5nIiwgImVudW0iOiBbImN5YW4iLCAibWFnZW50
YSIsICJ5ZWxsb3ciLCAiYmxhY2siXSB9CisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBd
Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2RvbWFpbnMtd2l0aC12YXJ5aW5n
LWNvbW1hbmQtc2l6ZXMuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wMDRkN2M5MDI1ZTdlODAxOGRhZDcyODZl
ZGE5ODc4ZTU3Mzk5ZWVkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2RvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6
ZXMuanNvbgpAQCAtMCwwICsxLDU1IEBACitbCit7CisgICAgImRvbWFpbiI6ICJOZXR3b3JrMSIs
CisKKyAgICAiY29tbWFuZHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImxv
YWRSZXNvdXJjZTEiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkxvYWRzIGEgcmVzb3Vy
Y2UgaW4gdGhlIGNvbnRleHQgb2YgYSBmcmFtZSBvbiB0aGUgaW5zcGVjdGVkIHBhZ2Ugd2l0aG91
dCBjcm9zcyBvcmlnaW4gY2hlY2tzLiIKKyAgICAgICAgfQorICAgIF0KK30sCit7CisgICAgImRv
bWFpbiI6ICJOZXR3b3JrMiIsCisgICAgInR5cGVzIjogWworICAgICAgICB7CisgICAgICAgICAg
ICAiaWQiOiAiTG9hZGVySWQiLAorICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKKyAgICAg
ICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUgbG9hZGVyIGlkZW50aWZpZXIuIgorICAgICAg
ICB9CisgICAgXQorfSwKK3sKKyAgICAiZG9tYWluIjogIk5ldHdvcmszIiwKKyAgICAiY29tbWFu
ZHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImxvYWRSZXNvdXJjZTEiLAor
ICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkxvYWRzIGEgcmVzb3VyY2UgaW4gdGhlIGNvbnRl
eHQgb2YgYSBmcmFtZSBvbiB0aGUgaW5zcGVjdGVkIHBhZ2Ugd2l0aG91dCBjcm9zcyBvcmlnaW4g
Y2hlY2tzLiIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAibG9h
ZFJlc291cmNlMiIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiTG9hZHMgYSByZXNvdXJj
ZSBpbiB0aGUgY29udGV4dCBvZiBhIGZyYW1lIG9uIHRoZSBpbnNwZWN0ZWQgcGFnZSB3aXRob3V0
IGNyb3NzIG9yaWdpbiBjaGVja3MuIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAg
ICAibmFtZSI6ICJsb2FkUmVzb3VyY2UzIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJM
b2FkcyBhIHJlc291cmNlIGluIHRoZSBjb250ZXh0IG9mIGEgZnJhbWUgb24gdGhlIGluc3BlY3Rl
ZCBwYWdlIHdpdGhvdXQgY3Jvc3Mgb3JpZ2luIGNoZWNrcy4iCisgICAgICAgIH0sCisgICAgICAg
IHsKKyAgICAgICAgICAgICJuYW1lIjogImxvYWRSZXNvdXJjZTQiLAorICAgICAgICAgICAgImRl
c2NyaXB0aW9uIjogIkxvYWRzIGEgcmVzb3VyY2UgaW4gdGhlIGNvbnRleHQgb2YgYSBmcmFtZSBv
biB0aGUgaW5zcGVjdGVkIHBhZ2Ugd2l0aG91dCBjcm9zcyBvcmlnaW4gY2hlY2tzLiIKKyAgICAg
ICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAibG9hZFJlc291cmNlNSIsCisg
ICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiTG9hZHMgYSByZXNvdXJjZSBpbiB0aGUgY29udGV4
dCBvZiBhIGZyYW1lIG9uIHRoZSBpbnNwZWN0ZWQgcGFnZSB3aXRob3V0IGNyb3NzIG9yaWdpbiBj
aGVja3MuIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJsb2Fk
UmVzb3VyY2U2IiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJMb2FkcyBhIHJlc291cmNl
IGluIHRoZSBjb250ZXh0IG9mIGEgZnJhbWUgb24gdGhlIGluc3BlY3RlZCBwYWdlIHdpdGhvdXQg
Y3Jvc3Mgb3JpZ2luIGNoZWNrcy4iCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAg
ICJuYW1lIjogImxvYWRSZXNvdXJjZTciLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkxv
YWRzIGEgcmVzb3VyY2UgaW4gdGhlIGNvbnRleHQgb2YgYSBmcmFtZSBvbiB0aGUgaW5zcGVjdGVk
IHBhZ2Ugd2l0aG91dCBjcm9zcyBvcmlnaW4gY2hlY2tzLiIKKyAgICAgICAgfQorICAgIF0KK30K
K10KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9ldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24gYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFy
YW1ldGVycy5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVlZmM3Y2IzMTliMGIzNmZhOTVjNDcxNDAzMDUzNzc4
NjI0YWZjMTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uCkBA
IC0wLDAgKzEsNTIgQEAKK3sKKyAgICAiZG9tYWluIjogIkRhdGFiYXNlIiwKKyAgICAidHlwZXMi
OiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJEYXRhYmFzZUlkIiwKKyAgICAgICAg
ICAgICJ0eXBlIjogInN0cmluZyIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5pcXVl
IGlkZW50aWZpZXIgb2YgRGF0YWJhc2Ugb2JqZWN0LiIKKyAgICAgICAgfSwKKyAgICAgICAgewor
ICAgICAgICAgICAgImlkIjogIlByaW1hcnlDb2xvcnMiLAorICAgICAgICAgICAgInR5cGUiOiAi
c3RyaW5nIiwKKyAgICAgICAgICAgICJ2YWx1ZXMiOiBbInJlZCIsICJncmVlbiIsICJibHVlIl0K
KyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIkVycm9yIiwKKyAgICAg
ICAgICAgICJ0eXBlIjogIm9iamVjdCIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiRGF0
YWJhc2UgZXJyb3IuIiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWworICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAibWVzc2FnZSIsICJ0eXBlIjogInN0cmluZyIsICJkZXNjcmlwdGlvbiI6
ICJFcnJvciBtZXNzYWdlLiIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvZGUiLCAi
dHlwZSI6ICJpbnRlZ2VyIiwgImRlc2NyaXB0aW9uIjogIkVycm9yIGNvZGUuIiB9CisgICAgICAg
ICAgICBdCisgICAgICAgIH0KKyAgICBdLAorICAgICJldmVudHMiOiBbCisgICAgICAgIHsKKyAg
ICAgICAgICAgICJuYW1lIjogImRpZEV4ZWN1dGVPcHRpb25hbFBhcmFtZXRlcnMiLAorICAgICAg
ICAgICAgInBhcmFtZXRlcnMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2x1bW5O
YW1lcyIsICJ0eXBlIjogImFycmF5IiwgIm9wdGlvbmFsIjogdHJ1ZSwgIml0ZW1zIjogeyAidHlw
ZSI6ICJzdHJpbmciIH0gfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm5vdGVzIiwgInR5
cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAidGltZXN0YW1wIiwgInR5cGUiOiAibnVtYmVyIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAor
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidmFsdWVzIiwgInR5cGUiOiAib2JqZWN0IiwgIm9w
dGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicGF5bG9hZCIsICJ0
eXBlIjogImFueSIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1l
IjogInNxbEVycm9yIiwgIiRyZWYiOiAiRXJyb3IiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJzY3JlZW5Db2xvciIsICIkcmVmIjogIlByaW1hcnlDb2xv
cnMiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwcmlu
dENvbG9yIiwgInR5cGUiOiAic3RyaW5nIiwgInZhbHVlcyI6IFsiY3lhbiIsICJtYWdlbnRhIiwg
InllbGxvdyIsICJibGFjayJdLCAib3B0aW9uYWwiOiB0cnVlIH0KKyAgICAgICAgICAgIF0KKyAg
ICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiZGlkRXhlY3V0ZU5vT3B0
aW9uYWxQYXJhbWV0ZXJzIiwKKyAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWworICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJhcnJheSIsICJpdGVtcyI6
IHsgInR5cGUiOiAic3RyaW5nIiB9IH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJub3Rl
cyIsICJ0eXBlIjogInN0cmluZyIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRpbWVz
dGFtcCIsICJ0eXBlIjogIm51bWJlciIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInZh
bHVlcyIsICJ0eXBlIjogIm9iamVjdCIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBh
eWxvYWQiLCAidHlwZSI6ICJhbnkiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzcWxF
cnJvciIsICIkcmVmIjogIkVycm9yIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic2Ny
ZWVuQ29sb3IiLCAiJHJlZiI6ICJQcmltYXJ5Q29sb3JzIiB9LAorICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAicHJpbnRDb2xvciIsICJ0eXBlIjogInN0cmluZyIsICJ2YWx1ZXMiOiBbImN5YW4i
LCAibWFnZW50YSIsICJ5ZWxsb3ciLCAiYmxhY2siXSB9CisgICAgICAgICAgICBdCisgICAgICAg
IH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNv
bi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
ZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbi1yZXN1bHQKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uODkyMmYwMjNlODhmNzc1YWQ3YzQzZWRhNWZlY2Q4OGZhNjRjZmM2NQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9l
eHBlY3RlZC9jb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uLXJlc3VsdApAQCAtMCww
ICsxLDcyNCBAQAorIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kQ29tbWFuZHMu
anMKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgor
Ly8gYnkgdGhlIHNjcmlwdDogSmF2YVNjcmlwdENvcmUvcmVwbGF5L3NjcmlwdHMvQ29kZUdlbmVy
YXRvckluc3BlY3Rvci5weQorCisvLyBEYXRhYmFzZS4KK0luc3BlY3RvckJhY2tlbmQucmVnaXN0
ZXJEYXRhYmFzZURpc3BhdGNoZXIgPSBJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluRGlz
cGF0Y2hlci5iaW5kKEluc3BlY3RvckJhY2tlbmQsICJEYXRhYmFzZSIpOworSW5zcGVjdG9yQmFj
a2VuZC5yZWdpc3RlckVudW0oIkRhdGFiYXNlLlByaW1hcnlDb2xvcnMiLCB7UmVkOiAicmVkIiwg
R3JlZW46ICJncmVlbiIsIEJsdWU6ICJibHVlIn0pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3Rl
ckNvbW1hbmQoIkRhdGFiYXNlLmV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMiLCBb
eyJuYW1lIjogImRhdGFiYXNlSWQiLCAidHlwZSI6ICJudW1iZXIiLCAib3B0aW9uYWwiOiBmYWxz
ZX0sIHsibmFtZSI6ICJxdWVyeSIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IGZhbHNl
fV0sIFsiY29sdW1uTmFtZXMiLCAibm90ZXMiLCAidGltZXN0YW1wIiwgInZhbHVlcyIsICJwYXls
b2FkIiwgImRhdGFiYXNlSWQiLCAic3FsRXJyb3IiLCAic2NyZWVuQ29sb3IiLCAicHJpbnRDb2xv
ciJdKTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJEYXRhYmFzZS5leGVjdXRl
U1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyIsIFt7Im5hbWUiOiAiZGF0YWJhc2VJZCIsICJ0
eXBlIjogIm51bWJlciIsICJvcHRpb25hbCI6IGZhbHNlfSwgeyJuYW1lIjogInF1ZXJ5IiwgInR5
cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjogZmFsc2V9XSwgWyJjb2x1bW5OYW1lcyIsICJub3Rl
cyIsICJ0aW1lc3RhbXAiLCAidmFsdWVzIiwgInBheWxvYWQiLCAiZGF0YWJhc2VJZCIsICJzcWxF
cnJvciIsICJzY3JlZW5Db2xvciIsICJwcmludENvbG9yIl0pOworSW5zcGVjdG9yQmFja2VuZC5y
ZWdpc3RlckNvbW1hbmQoIkRhdGFiYXNlLmV4ZWN1dGVTUUxTeW5jIiwgW3sibmFtZSI6ICJkYXRh
YmFzZUlkIiwgInR5cGUiOiAibnVtYmVyIiwgIm9wdGlvbmFsIjogZmFsc2V9LCB7Im5hbWUiOiAi
cXVlcnkiLCAidHlwZSI6ICJzdHJpbmciLCAib3B0aW9uYWwiOiBmYWxzZX1dLCBbImNvbHVtbk5h
bWVzIiwgIm5vdGVzIiwgInRpbWVzdGFtcCIsICJ2YWx1ZXMiLCAicGF5bG9hZCIsICJkYXRhYmFz
ZUlkIiwgInNxbEVycm9yIiwgInNjcmVlbkNvbG9yIiwgInByaW50Q29sb3IiXSk7CitJbnNwZWN0
b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiRGF0YWJhc2UuZXhlY3V0ZVNRTEFzeW5jIiwgW3si
bmFtZSI6ICJkYXRhYmFzZUlkIiwgInR5cGUiOiAibnVtYmVyIiwgIm9wdGlvbmFsIjogZmFsc2V9
LCB7Im5hbWUiOiAicXVlcnkiLCAidHlwZSI6ICJzdHJpbmciLCAib3B0aW9uYWwiOiBmYWxzZX1d
LCBbImNvbHVtbk5hbWVzIiwgIm5vdGVzIiwgInRpbWVzdGFtcCIsICJ2YWx1ZXMiLCAicGF5bG9h
ZCIsICJkYXRhYmFzZUlkIiwgInNxbEVycm9yIiwgInNjcmVlbkNvbG9yIiwgInByaW50Q29sb3Ii
XSk7CisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kQ29tbWFuZHMuanMKKworIyMj
IEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBjb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uCisvLyBieSB0aGUgc2Ny
aXB0OiBKYXZhU2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySW5zcGVjdG9y
LnB5CisKKyNpZm5kZWYgSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVyc19oCisjZGVmaW5l
IEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnNfaAorCisjaWYgRU5BQkxFKElOU1BFQ1RP
UikKKworI2luY2x1ZGUgIkluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuaCIKKyNpbmNsdWRlIDxp
bnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx3dGYvUGFz
c1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKKwordHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKKyNpZiBFTkFCTEUo
U1FMX0RBVEFCQVNFKQorY2xhc3MgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXIgeworcHVibGljOgorICAgIC8vIE5hbWVkIGFmdGVyIHBhcmFtZXRlciAnc2NyZWVuQ29s
b3InIHdoaWxlIGdlbmVyYXRpbmcgY29tbWFuZC9ldmVudCBleGVjdXRlU1FMU3luY09wdGlvbmFs
UmV0dXJuVmFsdWVzLgorICAgIGVudW0gY2xhc3MgU2NyZWVuQ29sb3IgeworICAgICAgICBSZWQg
PSAwLAorICAgICAgICBHcmVlbiA9IDEsCisgICAgICAgIEJsdWUgPSAyLAorICAgIH07IC8vIGVu
dW0gY2xhc3MgU2NyZWVuQ29sb3IKKyAgICAvLyBOYW1lZCBhZnRlciBwYXJhbWV0ZXIgJ3ByaW50
Q29sb3InIHdoaWxlIGdlbmVyYXRpbmcgY29tbWFuZC9ldmVudCBleGVjdXRlU1FMU3luY09wdGlv
bmFsUmV0dXJuVmFsdWVzLgorICAgIGVudW0gY2xhc3MgUHJpbnRDb2xvciB7CisgICAgICAgIEN5
YW4gPSAzLAorICAgICAgICBNYWdlbnRhID0gNCwKKyAgICAgICAgWWVsbG93ID0gNSwKKyAgICAg
ICAgQmxhY2sgPSA2LAorICAgIH07IC8vIGVudW0gY2xhc3MgUHJpbnRDb2xvcgorICAgIHZpcnR1
YWwgdm9pZCBleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKEVycm9yU3RyaW5nKiwg
aW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnksIFJlZlB0cjxJbnNwZWN0
b3I6OlR5cGVCdWlsZGVyOjpBcnJheTxTdHJpbmc+PiYgb3B0X291dF9jb2x1bW5OYW1lcywgSW5z
cGVjdG9yOjpUeXBlQnVpbGRlcjo6T3B0T3V0cHV0PFN0cmluZz4qIG9wdF9vdXRfbm90ZXMsIElu
c3BlY3Rvcjo6VHlwZUJ1aWxkZXI6Ok9wdE91dHB1dDxkb3VibGU+KiBvcHRfb3V0X3RpbWVzdGFt
cCwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6T3B0T3V0cHV0PEluc3BlY3Rvcjo6SW5zcGVjdG9y
T2JqZWN0Piogb3B0X291dF92YWx1ZXMsIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6Ok9wdE91dHB1
dDxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiogb3B0X291dF9wYXlsb2FkLCBJbnNwZWN0b3I6
OlR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8aW50Piogb3B0X291dF9kYXRhYmFzZUlkLCBSZWZQdHI8
SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6RGF0YWJhc2U6OkVycm9yPiYgb3B0X291dF9zcWxFcnJv
ciwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMqIG9wdF9v
dXRfc2NyZWVuQ29sb3IsIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVy
OjpQcmludENvbG9yKiBvcHRfb3V0X3ByaW50Q29sb3IpID0gMDsKKyAgICBjbGFzcyBFeGVjdXRl
U1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc0NhbGxiYWNrIDogcHVibGljIEluc3BlY3Rvcjo6
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZSB7CisgICAgcHVibGljOgor
ICAgICAgICBFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc0NhbGxiYWNrKFBhc3NS
ZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4sIGludCBpZCk7Cisg
ICAgICAgIHZvaWQgc2VuZFN1Y2Nlc3MoUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVy
OjpBcnJheTxTdHJpbmc+PiBjb2x1bW5OYW1lcywgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6T3B0
T3V0cHV0PFN0cmluZz4qIG5vdGVzLCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8
ZG91YmxlPiogdGltZXN0YW1wLCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8SW5z
cGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+KiB2YWx1ZXMsIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6
Ok9wdE91dHB1dDxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiogcGF5bG9hZCwgSW5zcGVjdG9y
OjpUeXBlQnVpbGRlcjo6T3B0T3V0cHV0PGludD4qIGRhdGFiYXNlSWQsIFBhc3NSZWZQdHI8SW5z
cGVjdG9yOjpUeXBlQnVpbGRlcjo6RGF0YWJhc2U6OkVycm9yPiBzcWxFcnJvciwgSW5zcGVjdG9y
OjpUeXBlQnVpbGRlcjo6T3B0T3V0cHV0PFN0cmluZz4qIHNjcmVlbkNvbG9yLCBJbnNwZWN0b3I6
OlR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8U3RyaW5nPiogcHJpbnRDb2xvcik7CisgICAgfTsKKyAg
ICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMoRXJyb3JT
dHJpbmcqLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSwgUGFzc1Jl
ZlB0cjxFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc0NhbGxiYWNrPiBjYWxsYmFj
aykgPSAwOworICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU1FMU3luYyhFcnJvclN0cmluZyosIGlu
dCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5LCBSZWZQdHI8SW5zcGVjdG9y
OjpUeXBlQnVpbGRlcjo6QXJyYXk8U3RyaW5nPj4mIG91dF9jb2x1bW5OYW1lcywgU3RyaW5nKiBv
dXRfbm90ZXMsIGRvdWJsZSogb3V0X3RpbWVzdGFtcCwgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmpl
Y3QqIG91dF92YWx1ZXMsIEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUqIG91dF9wYXlsb2FkLCBp
bnQqIG91dF9kYXRhYmFzZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6RGF0YWJh
c2U6OkVycm9yPiYgb3V0X3NxbEVycm9yLCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpEYXRhYmFz
ZTo6UHJpbWFyeUNvbG9ycyogb3V0X3NjcmVlbkNvbG9yLCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tl
bmREaXNwYXRjaGVySGFuZGxlcjo6UHJpbnRDb2xvciogb3V0X3ByaW50Q29sb3IpID0gMDsKKyAg
ICBjbGFzcyBFeGVjdXRlU1FMQXN5bmNDYWxsYmFjayA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2UgeworICAgIHB1YmxpYzoKKyAgICAg
ICAgRXhlY3V0ZVNRTEFzeW5jQ2FsbGJhY2soUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyPiwgaW50IGlkKTsKKyAgICAgICAgdm9pZCBzZW5kU3VjY2VzcyhQ
YXNzUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5PFN0cmluZz4+IGNvbHVtbk5h
bWVzLCBjb25zdCBTdHJpbmcmIG5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBJbnNwZWN0b3I6Oklu
c3BlY3Rvck9iamVjdCB2YWx1ZXMsIEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUgcGF5bG9hZCwg
aW50IGRhdGFiYXNlSWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6RGF0YWJh
c2U6OkVycm9yPiBzcWxFcnJvciwgY29uc3QgU3RyaW5nJiBzY3JlZW5Db2xvciwgY29uc3QgU3Ry
aW5nJiBwcmludENvbG9yKTsKKyAgICB9OworICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU1FMQXN5
bmMoRXJyb3JTdHJpbmcqLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVy
eSwgUGFzc1JlZlB0cjxFeGVjdXRlU1FMQXN5bmNDYWxsYmFjaz4gY2FsbGJhY2spID0gMDsKK3By
b3RlY3RlZDoKKyAgICB2aXJ0dWFsIH5JbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVy
SGFuZGxlcigpOworfTsKKyNlbmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQorCisjaWYgRU5B
QkxFKFNRTF9EQVRBQkFTRSkKK2NsYXNzIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNo
ZXIgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JTdXBwbGVtZW50YWxCYWNrZW5k
RGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yRGF0
YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXIqLCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciop
OworICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBt
ZXRob2QsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IG1lc3NhZ2UpIG92
ZXJyaWRlOworcHJpdmF0ZToKKyAgICB2b2lkIGV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5W
YWx1ZXMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0JiBtZXNz
YWdlKTsKKyAgICB2b2lkIGV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcg
Y2FsbElkLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7CisgICAg
dm9pZCBleGVjdXRlU1FMU3luYyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0
b3JPYmplY3QmIG1lc3NhZ2UpOworICAgIHZvaWQgZXhlY3V0ZVNRTEFzeW5jKGxvbmcgY2FsbElk
LCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7Citwcml2YXRlOgor
ICAgIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIoSW5zcGVjdG9yOjpJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlciosIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyKik7CisgICAgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIq
IG1fYWdlbnQ7Cit9OworI2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0UpCisKK30gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKworI2VuZGlm
IC8vICFkZWZpbmVkKEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnNfaCkKKyMjIyBFbmQg
RmlsZTogSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxl
OiBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBj
b21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBKYXZh
U2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5CisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNo
ZXJzLmgiCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSA8aW5zcGVjdG9yL0lu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oPgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JW
YWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNw
ZWN0b3IgeworCisjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKK0luc3BlY3RvckRhdGFiYXNlQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyOjp+SW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXIoKSB7IH0KKyNlbmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQorCisjaWYgRU5B
QkxFKFNRTF9EQVRBQkFTRSkKK1Bhc3NSZWZQdHI8SW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlz
cGF0Y2hlcj4gSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKEluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlciwgSW5zcGVjdG9yRGF0YWJh
c2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQoreworICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hl
ciwgYWdlbnQpKTsKK30KKworSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6SW5z
cGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcihJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
ciogYmFja2VuZERpc3BhdGNoZXIsIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyKiBhZ2VudCkKKyAgICA6IEluc3BlY3RvclN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRj
aGVyKGJhY2tlbmREaXNwYXRjaGVyKQorICAgICwgbV9hZ2VudChhZ2VudCkKK3sKKyAgICBtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4oQVNDSUlMaXRlcmFs
KCJEYXRhYmFzZSIpLCB0aGlzKTsKK30KKwordm9pZCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmRE
aXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFBh
c3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtZXNzYWdlKQoreworICAgIFJlZjxJbnNwZWN0b3JE
YXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKKworICAgIGlmIChtZXRo
b2QgPT0gImV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMiKQorICAgICAgICBleGVj
dXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGNhbGxJZCwgKm1lc3NhZ2UuZ2V0KCkpOwor
ICAgIGVsc2UgaWYgKG1ldGhvZCA9PSAiZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1
ZXMiKQorICAgICAgICBleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhjYWxsSWQs
ICptZXNzYWdlLmdldCgpKTsKKyAgICBlbHNlIGlmIChtZXRob2QgPT0gImV4ZWN1dGVTUUxTeW5j
IikKKyAgICAgICAgZXhlY3V0ZVNRTFN5bmMoY2FsbElkLCAqbWVzc2FnZS5nZXQoKSk7CisgICAg
ZWxzZSBpZiAobWV0aG9kID09ICJleGVjdXRlU1FMQXN5bmMiKQorICAgICAgICBleGVjdXRlU1FM
QXN5bmMoY2FsbElkLCAqbWVzc2FnZS5nZXQoKSk7CisgICAgZWxzZQorICAgICAgICBtX2JhY2tl
bmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIEluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgU3RyaW5nKCInIikgKyAiRGF0YWJhc2UiICsg
Jy4nICsgbWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOworfQorCit2b2lkIEluc3BlY3RvckRh
dGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1
ZXMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSkKK3sKKyAgICBS
ZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNy
ZWF0ZSgpOworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IG1l
c3NhZ2UuZ2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicGFyYW1zIikpOworICAgIEluc3BlY3Rvck9i
amVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOworICAgIElu
c3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwor
ICAgIGludCBpbl9kYXRhYmFzZUlkID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldElu
dChwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgiZGF0YWJhc2VJZCIpLCBudWxscHRy
LCBwcm90b2NvbEVycm9yc1B0cik7CisgICAgU3RyaW5nIGluX3F1ZXJ5ID0gSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXI6OmdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJh
bCgicXVlcnkiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnNQdHIpOworICAgIGlmIChwcm90b2Nv
bEVycm9ycy0+bGVuZ3RoKCkpIHsKKyAgICAgICAgU3RyaW5nIGVycm9yTWVzc2FnZSA9IFN0cmlu
Zzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNz
ZWQiLCAiRGF0YWJhc2UuZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyIpOworICAg
ICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIElu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCBlcnJvck1lc3NhZ2UsIHBy
b3RvY29sRXJyb3JzLnJlbGVhc2UoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBF
cnJvclN0cmluZyBlcnJvcjsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJ
bnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWls
ZGVyOjpBcnJheTxTdHJpbmc+PiBvdXRfY29sdW1uTmFtZXM7CisgICAgSW5zcGVjdG9yOjpUeXBl
QnVpbGRlcjo6T3B0T3V0cHV0PFN0cmluZz4gb3V0X25vdGVzOworICAgIEluc3BlY3Rvcjo6VHlw
ZUJ1aWxkZXI6Ok9wdE91dHB1dDxkb3VibGU+IG91dF90aW1lc3RhbXA7CisgICAgSW5zcGVjdG9y
OjpUeXBlQnVpbGRlcjo6T3B0T3V0cHV0PEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBvdXRf
dmFsdWVzOworICAgIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6Ok9wdE91dHB1dDxJbnNwZWN0b3I6
Okluc3BlY3RvclZhbHVlPiBvdXRfcGF5bG9hZDsKKyAgICBJbnNwZWN0b3I6OlR5cGVCdWlsZGVy
OjpPcHRPdXRwdXQ8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6RGF0YWJhc2U6OkRhdGFiYXNlSWQ+
IG91dF9kYXRhYmFzZUlkOworICAgIFJlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpEYXRh
YmFzZTo6RXJyb3I+IG91dF9zcWxFcnJvcjsKKyAgICBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpE
YXRhYmFzZTo6UHJpbWFyeUNvbG9ycyBvdXRfc2NyZWVuQ29sb3I7CisgICAgSW5zcGVjdG9yRGF0
YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3Igb3V0X3ByaW50Q29sb3I7
CisgICAgbV9hZ2VudC0+ZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcygmZXJyb3Is
IGluX2RhdGFiYXNlSWQsIGluX3F1ZXJ5LCBvdXRfY29sdW1uTmFtZXMsICZvdXRfbm90ZXMsICZv
dXRfdGltZXN0YW1wLCBvdXRfdmFsdWVzLCAmb3V0X3BheWxvYWQsICZvdXRfZGF0YWJhc2VJZCwg
b3V0X3NxbEVycm9yLCAmb3V0X3NjcmVlbkNvbG9yLCAmb3V0X3ByaW50Q29sb3IpOworCisgICAg
aWYgKCFlcnJvci5sZW5ndGgoKSkgeworICAgICAgICBpZiAob3V0X2NvbHVtbk5hbWVzKQorICAg
ICAgICAgICAgcmVzdWx0LT5zZXRWYWx1ZShBU0NJSUxpdGVyYWwoImNvbHVtbk5hbWVzIiksIG91
dF9jb2x1bW5OYW1lcyk7CisgICAgICAgIGlmIChvdXRfbm90ZXMuaXNBc3NpZ25lZCgpKQorICAg
ICAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJub3RlcyIpLCBvdXRfbm90
ZXMuZ2V0VmFsdWUoKSk7CisgICAgICAgIGlmIChvdXRfdGltZXN0YW1wLmlzQXNzaWduZWQoKSkK
KyAgICAgICAgICAgIHJlc3VsdC0+c2V0TnVtYmVyKEFTQ0lJTGl0ZXJhbCgidGltZXN0YW1wIiks
IG91dF90aW1lc3RhbXAuZ2V0VmFsdWUoKSk7CisgICAgICAgIGlmIChvdXRfdmFsdWVzLmlzQXNz
aWduZWQoKSkKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgidmFs
dWVzIiksIG91dF92YWx1ZXMuZ2V0VmFsdWUoKSk7CisgICAgICAgIGlmIChvdXRfcGF5bG9hZC5p
c0Fzc2lnbmVkKCkpCisgICAgICAgICAgICByZXN1bHQtPnNldFZhbHVlKEFTQ0lJTGl0ZXJhbCgi
cGF5bG9hZCIpLCBvdXRfcGF5bG9hZC5nZXRWYWx1ZSgpKTsKKyAgICAgICAgaWYgKG91dF9kYXRh
YmFzZUlkLmlzQXNzaWduZWQoKSkKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0TnVtYmVyKEFTQ0lJ
TGl0ZXJhbCgiZGF0YWJhc2VJZCIpLCBvdXRfZGF0YWJhc2VJZC5nZXRWYWx1ZSgpKTsKKyAgICAg
ICAgaWYgKG91dF9zcWxFcnJvcikKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0VmFsdWUoQVNDSUlM
aXRlcmFsKCJzcWxFcnJvciIpLCBvdXRfc3FsRXJyb3IpOworICAgICAgICBpZiAob3V0X3NjcmVl
bkNvbG9yLmlzQXNzaWduZWQoKSkKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKEFTQ0lJ
TGl0ZXJhbCgic2NyZWVuQ29sb3IiKSwgb3V0X3NjcmVlbkNvbG9yLmdldFZhbHVlKCkpOworICAg
ICAgICBpZiAob3V0X3ByaW50Q29sb3IuaXNBc3NpZ25lZCgpKQorICAgICAgICAgICAgcmVzdWx0
LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJwcmludENvbG9yIiksIG91dF9wcmludENvbG9yLmdl
dFZhbHVlKCkpOworICAgIH0KKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2Uo
Y2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBlcnJvcik7Cit9CisKK0luc3BlY3RvckRhdGFiYXNl
QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZh
bHVlc0NhbGxiYWNrOjpFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc0NhbGxiYWNr
KFBhc3NSZWZQdHI8SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+IGJhY2tlbmREaXNwYXRjaGVy
LCBpbnQgaWQpIDogSW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJh
Y2tCYXNlKGJhY2tlbmREaXNwYXRjaGVyLCBpZCkgeyB9CisKK3ZvaWQgSW5zcGVjdG9yRGF0YWJh
c2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJu
VmFsdWVzQ2FsbGJhY2s6OnNlbmRTdWNjZXNzKFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVp
bGRlcjo6QXJyYXk8U3RyaW5nPj4gY29sdW1uTmFtZXMsIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6
Ok9wdE91dHB1dDxTdHJpbmc+KiBub3RlcywgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6T3B0T3V0
cHV0PGRvdWJsZT4qIHRpbWVzdGFtcCwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6T3B0T3V0cHV0
PEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiogdmFsdWVzLCBJbnNwZWN0b3I6OlR5cGVCdWls
ZGVyOjpPcHRPdXRwdXQ8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4qIHBheWxvYWQsIEluc3Bl
Y3Rvcjo6VHlwZUJ1aWxkZXI6Ok9wdE91dHB1dDxpbnQ+KiBkYXRhYmFzZUlkLCBQYXNzUmVmUHRy
PEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkRhdGFiYXNlOjpFcnJvcj4gc3FsRXJyb3IsIEluc3Bl
Y3Rvcjo6VHlwZUJ1aWxkZXI6Ok9wdE91dHB1dDxTdHJpbmc+KiBzY3JlZW5Db2xvciwgSW5zcGVj
dG9yOjpUeXBlQnVpbGRlcjo6T3B0T3V0cHV0PFN0cmluZz4qIHByaW50Q29sb3IpCit7CisgICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4ganNvbk1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNy
ZWF0ZSgpOworICAgIGlmIChjb2x1bW5OYW1lcykKKyAgICAgICAganNvbk1lc3NhZ2UtPnNldFZh
bHVlKEFTQ0lJTGl0ZXJhbCgiY29sdW1uTmFtZXMiKSwgY29sdW1uTmFtZXMpOworICAgIGlmIChu
b3Rlcy5pc0Fzc2lnbmVkKCkpCisgICAgICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoQVNDSUlM
aXRlcmFsKCJub3RlcyIpLCBub3Rlcy5nZXRWYWx1ZSgpKTsKKyAgICBpZiAodGltZXN0YW1wLmlz
QXNzaWduZWQoKSkKKyAgICAgICAganNvbk1lc3NhZ2UtPnNldE51bWJlcihBU0NJSUxpdGVyYWwo
InRpbWVzdGFtcCIpLCB0aW1lc3RhbXAuZ2V0VmFsdWUoKSk7CisgICAgaWYgKHZhbHVlcy5pc0Fz
c2lnbmVkKCkpCisgICAgICAgIGpzb25NZXNzYWdlLT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJ2
YWx1ZXMiKSwgdmFsdWVzLmdldFZhbHVlKCkpOworICAgIGlmIChwYXlsb2FkLmlzQXNzaWduZWQo
KSkKKyAgICAgICAganNvbk1lc3NhZ2UtPnNldFZhbHVlKEFTQ0lJTGl0ZXJhbCgicGF5bG9hZCIp
LCBwYXlsb2FkLmdldFZhbHVlKCkpOworICAgIGlmIChkYXRhYmFzZUlkLmlzQXNzaWduZWQoKSkK
KyAgICAgICAganNvbk1lc3NhZ2UtPnNldE51bWJlcihBU0NJSUxpdGVyYWwoImRhdGFiYXNlSWQi
KSwgZGF0YWJhc2VJZC5nZXRWYWx1ZSgpKTsKKyAgICBpZiAoc3FsRXJyb3IpCisgICAgICAgIGpz
b25NZXNzYWdlLT5zZXRWYWx1ZShBU0NJSUxpdGVyYWwoInNxbEVycm9yIiksIHNxbEVycm9yKTsK
KyAgICBpZiAoc2NyZWVuQ29sb3IuaXNBc3NpZ25lZCgpKQorICAgICAgICBqc29uTWVzc2FnZS0+
c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgic2NyZWVuQ29sb3IiKSwgc2NyZWVuQ29sb3IuZ2V0VmFs
dWUoKSk7CisgICAgaWYgKHByaW50Q29sb3IuaXNBc3NpZ25lZCgpKQorICAgICAgICBqc29uTWVz
c2FnZS0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgicHJpbnRDb2xvciIpLCBwcmludENvbG9yLmdl
dFZhbHVlKCkpOworICAgIHNlbmRJZkFjdGl2ZShqc29uTWVzc2FnZSwgRXJyb3JTdHJpbmcoKSk7
Cit9CisKK3ZvaWQgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNR
TEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9i
amVjdCYgbWVzc2FnZSkKK3sKKyAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJy
b3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IHBhcmFtc0NvbnRhaW5lciA9IG1lc3NhZ2UuZ2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicGFy
YW1zIikpOworICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1z
Q29udGFpbmVyLmdldCgpOworICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9
IHByb3RvY29sRXJyb3JzLmdldCgpOworICAgIGludCBpbl9kYXRhYmFzZUlkID0gSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXI6OmdldEludChwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJh
bCgiZGF0YWJhc2VJZCIpLCBudWxscHRyLCBwcm90b2NvbEVycm9yc1B0cik7CisgICAgU3RyaW5n
IGluX3F1ZXJ5ID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldFN0cmluZyhwYXJhbXND
b250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgicXVlcnkiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJv
cnNQdHIpOworICAgIGlmIChwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKKyAgICAgICAgU3Ry
aW5nIGVycm9yTWVzc2FnZSA9IFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRo
b2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiRGF0YWJhc2UuZXhlY3V0ZVNRTEFzeW5jT3B0
aW9uYWxSZXR1cm5WYWx1ZXMiKTsKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0
UHJvdG9jb2xFcnJvcigmY2FsbElkLCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxp
ZFBhcmFtcywgZXJyb3JNZXNzYWdlLCBwcm90b2NvbEVycm9ycy5yZWxlYXNlKCkpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgRXJyb3JTdHJpbmcgZXJyb3I7CisgICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBS
ZWZQdHI8SW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkV4ZWN1dGVT
UUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJhY2s+IGNhbGxiYWNrID0gYWRvcHRSZWYo
bmV3IEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FM
QXN5bmNPcHRpb25hbFJldHVyblZhbHVlc0NhbGxiYWNrKG1fYmFja2VuZERpc3BhdGNoZXIsY2Fs
bElkKSk7CisgICAgbV9hZ2VudC0+ZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMo
JmVycm9yLCBpbl9kYXRhYmFzZUlkLCBpbl9xdWVyeSwgY2FsbGJhY2spOworCisgICAgaWYgKGVy
cm9yLmxlbmd0aCgpKSB7CisgICAgICAgIGNhbGxiYWNrLT5kaXNhYmxlKCk7CisgICAgICAgIG1f
YmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgSW5zcGVjdG9y
OjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KK30KKwordm9pZCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVyOjpleGVjdXRlU1FMU3luYyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0
JiBtZXNzYWdlKQoreworICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMg
PSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
cGFyYW1zQ29udGFpbmVyID0gbWVzc2FnZS5nZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJwYXJhbXMi
KSk7CisgICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250
YWluZXIuZ2V0KCk7CisgICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJv
dG9jb2xFcnJvcnMuZ2V0KCk7CisgICAgaW50IGluX2RhdGFiYXNlSWQgPSBJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlcjo6Z2V0SW50KHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJk
YXRhYmFzZUlkIiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzUHRyKTsKKyAgICBTdHJpbmcgaW5f
cXVlcnkgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0U3RyaW5nKHBhcmFtc0NvbnRh
aW5lclB0ciwgQVNDSUlMaXRlcmFsKCJxdWVyeSIpLCBudWxscHRyLCBwcm90b2NvbEVycm9yc1B0
cik7CisgICAgaWYgKHByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgeworICAgICAgICBTdHJpbmcg
ZXJyb3JNZXNzYWdlID0gU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAn
JXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJEYXRhYmFzZS5leGVjdXRlU1FMU3luYyIpOworICAg
ICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIElu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCBlcnJvck1lc3NhZ2UsIHBy
b3RvY29sRXJyb3JzLnJlbGVhc2UoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBF
cnJvclN0cmluZyBlcnJvcjsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJ
bnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWls
ZGVyOjpBcnJheTxTdHJpbmc+PiBvdXRfY29sdW1uTmFtZXM7CisgICAgU3RyaW5nIG91dF9ub3Rl
czsKKyAgICBkb3VibGUgb3V0X3RpbWVzdGFtcDsKKyAgICBJbnNwZWN0b3I6Okluc3BlY3Rvck9i
amVjdCBvdXRfdmFsdWVzOworICAgIEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUgb3V0X3BheWxv
YWQ7CisgICAgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6RGF0YWJhc2U6OkRhdGFiYXNlSWQgb3V0
X2RhdGFiYXNlSWQ7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkRhdGFiYXNl
OjpFcnJvcj4gb3V0X3NxbEVycm9yOworICAgIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkRhdGFi
YXNlOjpQcmltYXJ5Q29sb3JzIG91dF9zY3JlZW5Db2xvcjsKKyAgICBJbnNwZWN0b3JEYXRhYmFz
ZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UHJpbnRDb2xvciBvdXRfcHJpbnRDb2xvcjsKKyAg
ICBtX2FnZW50LT5leGVjdXRlU1FMU3luYygmZXJyb3IsIGluX2RhdGFiYXNlSWQsIGluX3F1ZXJ5
LCBvdXRfY29sdW1uTmFtZXMsICZvdXRfbm90ZXMsICZvdXRfdGltZXN0YW1wLCBvdXRfdmFsdWVz
LCAmb3V0X3BheWxvYWQsICZvdXRfZGF0YWJhc2VJZCwgb3V0X3NxbEVycm9yLCAmb3V0X3NjcmVl
bkNvbG9yLCAmb3V0X3ByaW50Q29sb3IpOworCisgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkgewor
ICAgICAgICByZXN1bHQtPnNldFZhbHVlKEFTQ0lJTGl0ZXJhbCgiY29sdW1uTmFtZXMiKSwgb3V0
X2NvbHVtbk5hbWVzKTsKKyAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJu
b3RlcyIpLCBvdXRfbm90ZXMpOworICAgICAgICByZXN1bHQtPnNldE51bWJlcihBU0NJSUxpdGVy
YWwoInRpbWVzdGFtcCIpLCBvdXRfdGltZXN0YW1wKTsKKyAgICAgICAgcmVzdWx0LT5zZXRPYmpl
Y3QoQVNDSUlMaXRlcmFsKCJ2YWx1ZXMiKSwgb3V0X3ZhbHVlcyk7CisgICAgICAgIHJlc3VsdC0+
c2V0VmFsdWUoQVNDSUlMaXRlcmFsKCJwYXlsb2FkIiksIG91dF9wYXlsb2FkKTsKKyAgICAgICAg
cmVzdWx0LT5zZXROdW1iZXIoQVNDSUlMaXRlcmFsKCJkYXRhYmFzZUlkIiksIG91dF9kYXRhYmFz
ZUlkKTsKKyAgICAgICAgcmVzdWx0LT5zZXRWYWx1ZShBU0NJSUxpdGVyYWwoInNxbEVycm9yIiks
IG91dF9zcWxFcnJvcik7CisgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgi
c2NyZWVuQ29sb3IiKSwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Z2V0VGVzdEVudW1Db25zdGFu
dFZhbHVlKG91dF9zY3JlZW5Db2xvcikpOworICAgICAgICByZXN1bHQtPnNldFN0cmluZyhBU0NJ
SUxpdGVyYWwoInByaW50Q29sb3IiKSwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Z2V0VGVzdEVu
dW1Db25zdGFudFZhbHVlKG91dF9wcmludENvbG9yKSk7CisgICAgfQorICAgIG1fYmFja2VuZERp
c3BhdGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIGVycm9yKTsK
K30KKworSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkV4ZWN1dGVT
UUxBc3luY0NhbGxiYWNrOjpFeGVjdXRlU1FMQXN5bmNDYWxsYmFjayhQYXNzUmVmUHRyPEluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyPiBiYWNrZW5kRGlzcGF0Y2hlciwgaW50IGlkKSA6IEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZShiYWNrZW5kRGlz
cGF0Y2hlciwgaWQpIHsgfQorCit2b2lkIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNo
ZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNDYWxsYmFjazo6c2VuZFN1Y2Nlc3MoUGFzc1JlZlB0
cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheTxTdHJpbmc+PiBjb2x1bW5OYW1lcywgY29u
c3QgU3RyaW5nJiBub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgSW5zcGVjdG9yOjpJbnNwZWN0b3JP
YmplY3QgdmFsdWVzLCBJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlIHBheWxvYWQsIGludCBkYXRh
YmFzZUlkLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkRhdGFiYXNlOjpFcnJv
cj4gc3FsRXJyb3IsIGNvbnN0IFN0cmluZyYgc2NyZWVuQ29sb3IsIGNvbnN0IFN0cmluZyYgcHJp
bnRDb2xvcikKK3sKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBqc29uTWVzc2FnZSA9IElu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAganNvbk1lc3NhZ2UtPnNldFZhbHVlKEFTQ0lJ
TGl0ZXJhbCgiY29sdW1uTmFtZXMiKSwgY29sdW1uTmFtZXMpOworICAgIGpzb25NZXNzYWdlLT5z
ZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJub3RlcyIpLCBub3Rlcyk7CisgICAganNvbk1lc3NhZ2Ut
PnNldE51bWJlcihBU0NJSUxpdGVyYWwoInRpbWVzdGFtcCIpLCB0aW1lc3RhbXApOworICAgIGpz
b25NZXNzYWdlLT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJ2YWx1ZXMiKSwgdmFsdWVzKTsKKyAg
ICBqc29uTWVzc2FnZS0+c2V0VmFsdWUoQVNDSUlMaXRlcmFsKCJwYXlsb2FkIiksIHBheWxvYWQp
OworICAgIGpzb25NZXNzYWdlLT5zZXROdW1iZXIoQVNDSUlMaXRlcmFsKCJkYXRhYmFzZUlkIiks
IGRhdGFiYXNlSWQpOworICAgIGpzb25NZXNzYWdlLT5zZXRWYWx1ZShBU0NJSUxpdGVyYWwoInNx
bEVycm9yIiksIHNxbEVycm9yKTsKKyAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKEFTQ0lJTGl0
ZXJhbCgic2NyZWVuQ29sb3IiKSwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Z2V0VGVzdEVudW1D
b25zdGFudFZhbHVlKHNjcmVlbkNvbG9yKSk7CisgICAganNvbk1lc3NhZ2UtPnNldFN0cmluZyhB
U0NJSUxpdGVyYWwoInByaW50Q29sb3IiKSwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Z2V0VGVz
dEVudW1Db25zdGFudFZhbHVlKHByaW50Q29sb3IpKTsKKyAgICBzZW5kSWZBY3RpdmUoanNvbk1l
c3NhZ2UsIEVycm9yU3RyaW5nKCkpOworfQorCit2b2lkIEluc3BlY3RvckRhdGFiYXNlQmFja2Vu
ZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxBc3luYyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9y
T2JqZWN0JiBtZXNzYWdlKQoreworICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xF
cnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gcGFyYW1zQ29udGFpbmVyID0gbWVzc2FnZS5nZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJw
YXJhbXMiKSk7CisgICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJh
bXNDb250YWluZXIuZ2V0KCk7CisgICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRy
ID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CisgICAgaW50IGluX2RhdGFiYXNlSWQgPSBJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0SW50KHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRl
cmFsKCJkYXRhYmFzZUlkIiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzUHRyKTsKKyAgICBTdHJp
bmcgaW5fcXVlcnkgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0U3RyaW5nKHBhcmFt
c0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJxdWVyeSIpLCBudWxscHRyLCBwcm90b2NvbEVy
cm9yc1B0cik7CisgICAgaWYgKHByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgeworICAgICAgICBT
dHJpbmcgZXJyb3JNZXNzYWdlID0gU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1l
dGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJEYXRhYmFzZS5leGVjdXRlU1FMQXN5bmMi
KTsKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcigmY2Fs
bElkLCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFtcywgZXJyb3JNZXNz
YWdlLCBwcm90b2NvbEVycm9ycy5yZWxlYXNlKCkpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgRXJyb3JTdHJpbmcgZXJyb3I7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVz
dWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yRGF0
YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkV4ZWN1dGVTUUxBc3luY0NhbGxiYWNrPiBj
YWxsYmFjayA9IGFkb3B0UmVmKG5ldyBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVy
SGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jQ2FsbGJhY2sobV9iYWNrZW5kRGlzcGF0Y2hlcixjYWxs
SWQpKTsKKyAgICBtX2FnZW50LT5leGVjdXRlU1FMQXN5bmMoJmVycm9yLCBpbl9kYXRhYmFzZUlk
LCBpbl9xdWVyeSwgY2FsbGJhY2spOworCisgICAgaWYgKGVycm9yLmxlbmd0aCgpKSB7CisgICAg
ICAgIGNhbGxiYWNrLT5kaXNhYmxlKCk7CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJl
cG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgSW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KK30K
KyNlbmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyMjIyBFbmQgRmlsZTogSW5zcGVj
dG9yVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IEluc3BlY3Rv
clRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0
aC1hc3luYy1hdHRyaWJ1dGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogSmF2YVNjcmlwdENvcmUv
cmVwbGF5L3NjcmlwdHMvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQorCisjaWZuZGVmIEluc3Bl
Y3RvclRlc3RGcm9udGVuZERpc3BhdGNoZXJzX2gKKyNkZWZpbmUgSW5zcGVjdG9yVGVzdEZyb250
ZW5kRGlzcGF0Y2hlcnNfaAorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUgIklu
c3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuaCIKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsLmg+CisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5o
PgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorCisjZW5kaWYgLy8gIWRlZmlu
ZWQoSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnNfaCkKKyMjIyBFbmQgRmlsZTogSW5z
cGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogSW5zcGVj
dG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRz
LXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IEphdmFTY3JpcHRD
b3JlL3JlcGxheS9zY3JpcHRzL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkluc3BlY3RvclRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgi
CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5o
PgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisK
KyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorCisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRl
c3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVz
dFR5cGVCdWlsZGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtYXN5bmMtYXR0
cmlidXRlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IEphdmFTY3JpcHRDb3JlL3JlcGxheS9zY3Jp
cHRzL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKKworI2lmbmRlZiBJbnNwZWN0b3JUZXN0VHlw
ZUJ1aWxkZXJzX2gKKyNkZWZpbmUgSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVyc19oCisKKyNpZiBF
TkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckpTVHlwZUJ1
aWxkZXJzLmg+CisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclR5cGVCdWlsZGVyLmg+Cisj
aW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgor
CituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKK25hbWVzcGFjZSBUeXBlQnVpbGRlciB7CisK
Ky8vIEZvcndhcmQgZGVjbGFyYXRpb25zLgorI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCituYW1l
c3BhY2UgRGF0YWJhc2UgeworY2xhc3MgRXJyb3I7CitlbnVtIGNsYXNzIFByaW1hcnlDb2xvcnM7
Cit9IC8vIERhdGFiYXNlCisjZW5kaWYgLy8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKKy8vIEVuZCBv
ZiBmb3J3YXJkIGRlY2xhcmF0aW9ucy4KKworCisvLyBUeXBlZGVmcy4KKyNpZiBFTkFCTEUoU1FM
X0RBVEFCQVNFKQorbmFtZXNwYWNlIERhdGFiYXNlIHsKKy8qIFVuaXF1ZSBpZGVudGlmaWVyIG9m
IERhdGFiYXNlIG9iamVjdC4gKi8KK3R5cGVkZWYgaW50IERhdGFiYXNlSWQ7Cit9IC8vIERhdGFi
YXNlCisjZW5kaWYgLy8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKKy8vIEVuZCBvZiB0eXBlZGVmcy4K
KworU3RyaW5nIGdldFRlc3RFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSk7CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+IFN0cmluZyBnZXRUZXN0RW51bUNvbnN0YW50VmFsdWUoVCBlbnVtVmFsdWUp
Cit7CisgICAgcmV0dXJuIGdldFRlc3RFbnVtQ29uc3RhbnRWYWx1ZShzdGF0aWNfY2FzdDxpbnQ+
KGVudW1WYWx1ZSkpOworfQorCisjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKK25hbWVzcGFjZSBE
YXRhYmFzZSB7CisvKiAgKi8KK2VudW0gY2xhc3MgUHJpbWFyeUNvbG9ycyB7CisgICAgUmVkID0g
MCwKKyAgICBHcmVlbiA9IDEsCisgICAgQmx1ZSA9IDIsCit9OyAvLyBlbnVtIGNsYXNzIFByaW1h
cnlDb2xvcnMKKy8qIERhdGFiYXNlIGVycm9yLiAqLworY2xhc3MgRXJyb3IgOiBwdWJsaWMgSW5z
cGVjdG9yOjpJbnNwZWN0b3JPYmplY3RCYXNlIHsKK3B1YmxpYzoKKyAgICBlbnVtIHsKKyAgICAg
ICAgTm9GaWVsZHNTZXQgPSAwLAorICAgICAgICBNZXNzYWdlU2V0ID0gMSA8PCAwLAorICAgICAg
ICBDb2RlU2V0ID0gMSA8PCAxLAorICAgICAgICBBbGxGaWVsZHNTZXQgPSAoTWVzc2FnZVNldCB8
IENvZGVTZXQpCisgICAgfTsKKworICAgIHRlbXBsYXRlPGludCBTVEFURT4KKyAgICBjbGFzcyBC
dWlsZGVyIHsKKyAgICBwcml2YXRlOgorICAgICAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0
b3JPYmplY3Q+IG1fcmVzdWx0OworCisgICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVy
PFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKKyAgICAg
ICAgfQorCisgICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjwvKkVycm9yKi9JbnNwZWN0b3I6Oklu
c3BlY3Rvck9iamVjdD4gcHRyKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VS
VChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRl
KTsKKyAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOworICAgICAgICB9CisgICAgICAgIGZyaWVu
ZCBjbGFzcyBFcnJvcjsKKyAgICBwdWJsaWM6CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IE1l
c3NhZ2VTZXQ+JiBzZXRNZXNzYWdlKGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBNZXNzYWdlU2V0KSwgcHJvcGVydHlf
bWVzc2FnZV9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKEFT
Q0lJTGl0ZXJhbCgibWVzc2FnZSIpLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0
YXRlPE1lc3NhZ2VTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwg
Q29kZVNldD4mIHNldENvZGUoaW50IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVCghKFNUQVRFICYgQ29kZVNldCksIHByb3BlcnR5X2NvZGVfYWxyZWFkeV9zZXQp
OworICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcihBU0NJSUxpdGVyYWwoImNvZGUiKSwg
dmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxDb2RlU2V0PigpOworICAgICAg
ICB9CisKKyAgICAgICAgb3BlcmF0b3IgUmVmUHRyPEVycm9yPiYgKCkKKyAgICAgICAgeworICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNf
bm90X3JlYWR5KTsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihFcnJvcikgPT0g
c2l6ZW9mKEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0KSwgY2Fubm90X2Nhc3QpOworICAgICAg
ICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxFcnJvcj4qPigmbV9yZXN1bHQp
OworICAgICAgICB9CisKKyAgICAgICAgUGFzc1JlZlB0cjxFcnJvcj4gcmVsZWFzZSgpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBSZWZQdHI8RXJyb3I+KCp0aGlzKS5yZWxlYXNlKCk7
CisgICAgICAgIH0KKyAgICB9OworCisgICAgLyoKKyAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0
b3I6CisgICAgICogUmVmUHRyPEVycm9yPiByZXN1bHQgPSBFcnJvcjo6Y3JlYXRlKCkKKyAgICAg
KiAgICAgLnNldE1lc3NhZ2UoLi4uKQorICAgICAqICAgICAuc2V0Q29kZSguLi4pOworICAgICAq
LworICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0
OjpjcmVhdGUoKSk7CisgICAgfQorICAgIHR5cGVkZWYgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6
U3RydWN0SXRlbVRyYWl0cyBJdGVtVHJhaXRzOworfTsKKworfSAvLyBEYXRhYmFzZQorI2VuZGlm
IC8vIEVOQUJMRShTUUxfREFUQUJBU0UpCisKKworCit9IC8vIG5hbWVzcGFjZSBUeXBlQnVpbGRl
cgorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNU
T1IpCisKKyNlbmRpZiAvLyAhZGVmaW5lZChJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzX2gpCisj
IyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuaAorCisjIyMgQmVnaW4gRmls
ZTogSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFu
ZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogSmF2YVNjcmlw
dENvcmUvcmVwbGF5L3NjcmlwdHMvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQorCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5oIgorCisj
aWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKwor
bmFtZXNwYWNlIEluc3BlY3RvciB7CisKK25hbWVzcGFjZSBUeXBlQnVpbGRlciB7CisKK3N0YXRp
YyBjb25zdCBjaGFyKiBjb25zdCBlbnVtX2NvbnN0YW50X3ZhbHVlc1tdID0geworICAgICJyZWQi
LAorICAgICJncmVlbiIsCisgICAgImJsdWUiLAorICAgICJjeWFuIiwKKyAgICAibWFnZW50YSIs
CisgICAgInllbGxvdyIsCisgICAgImJsYWNrIiwKK307CisKK1N0cmluZyBnZXRUZXN0RW51bUNv
bnN0YW50VmFsdWUoaW50IGNvZGUpIHsKKyAgICByZXR1cm4gZW51bV9jb25zdGFudF92YWx1ZXNb
Y29kZV07Cit9CisKKworCit9IC8vIG5hbWVzcGFjZSBUeXBlQnVpbGRlcgorCit9IC8vIG5hbWVz
cGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyMjIyBFbmQg
RmlsZTogSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9jb21tYW5kcy13
aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbi1yZXN1bHQgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvY29tbWFuZHMt
d2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0Cm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjU2OWFhOGMyZTE1ZTIzOTZiZGE5MDFjY2M5ZTM1YTg0YWJjYzc3ZmIKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhw
ZWN0ZWQvY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24t
cmVzdWx0CkBAIC0wLDAgKzEsNjMxIEBACisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdEJh
Y2tlbmRDb21tYW5kcy5qcworLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9wdGlvbmFs
LWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogSmF2YVNjcmlw
dENvcmUvcmVwbGF5L3NjcmlwdHMvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQorCisvLyBEYXRh
YmFzZS4KK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFbnVtKCJEYXRhYmFzZS5QcmltYXJ5Q29s
b3JzIiwge1JlZDogInJlZCIsIEdyZWVuOiAiZ3JlZW4iLCBCbHVlOiAiYmx1ZSJ9KTsKK0luc3Bl
Y3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJEYXRhYmFzZS5leGVjdXRlQWxsT3B0aW9uYWxQ
YXJhbWV0ZXJzIiwgW3sibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogIm9iamVjdCIsICJv
cHRpb25hbCI6IHRydWV9LCB7Im5hbWUiOiAibm90ZXMiLCAidHlwZSI6ICJzdHJpbmciLCAib3B0
aW9uYWwiOiB0cnVlfSwgeyJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciIsICJv
cHRpb25hbCI6IHRydWV9LCB7Im5hbWUiOiAidmFsdWVzIiwgInR5cGUiOiAib2JqZWN0IiwgIm9w
dGlvbmFsIjogdHJ1ZX0sIHsibmFtZSI6ICJwYXlsb2FkIiwgInR5cGUiOiAib2JqZWN0IiwgIm9w
dGlvbmFsIjogdHJ1ZX0sIHsibmFtZSI6ICJkYXRhYmFzZUlkIiwgInR5cGUiOiAibnVtYmVyIiwg
Im9wdGlvbmFsIjogdHJ1ZX0sIHsibmFtZSI6ICJzcWxFcnJvciIsICJ0eXBlIjogIm9iamVjdCIs
ICJvcHRpb25hbCI6IHRydWV9LCB7Im5hbWUiOiAic2NyZWVuQ29sb3IiLCAidHlwZSI6ICJzdHJp
bmciLCAib3B0aW9uYWwiOiB0cnVlfSwgeyJuYW1lIjogInByaW50Q29sb3IiLCAidHlwZSI6ICJz
dHJpbmciLCAib3B0aW9uYWwiOiB0cnVlfV0sIFsiY29sdW1uTmFtZXMiLCAibm90ZXMiLCAidGlt
ZXN0YW1wIiwgInZhbHVlcyIsICJwYXlsb2FkIiwgImRhdGFiYXNlSWQiLCAic3FsRXJyb3IiLCAi
c2NyZWVuQ29sb3IiLCAicHJpbnRDb2xvciJdKTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJD
b21tYW5kKCJEYXRhYmFzZS5leGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMiLCBbeyJuYW1lIjog
ImNvbHVtbk5hbWVzIiwgInR5cGUiOiAib2JqZWN0IiwgIm9wdGlvbmFsIjogZmFsc2V9LCB7Im5h
bWUiOiAibm90ZXMiLCAidHlwZSI6ICJzdHJpbmciLCAib3B0aW9uYWwiOiBmYWxzZX0sIHsibmFt
ZSI6ICJ0aW1lc3RhbXAiLCAidHlwZSI6ICJudW1iZXIiLCAib3B0aW9uYWwiOiBmYWxzZX0sIHsi
bmFtZSI6ICJ2YWx1ZXMiLCAidHlwZSI6ICJvYmplY3QiLCAib3B0aW9uYWwiOiBmYWxzZX0sIHsi
bmFtZSI6ICJwYXlsb2FkIiwgInR5cGUiOiAib2JqZWN0IiwgIm9wdGlvbmFsIjogZmFsc2V9LCB7
Im5hbWUiOiAiZGF0YWJhc2VJZCIsICJ0eXBlIjogIm51bWJlciIsICJvcHRpb25hbCI6IGZhbHNl
fSwgeyJuYW1lIjogInNxbEVycm9yIiwgInR5cGUiOiAib2JqZWN0IiwgIm9wdGlvbmFsIjogZmFs
c2V9LCB7Im5hbWUiOiAic2NyZWVuQ29sb3IiLCAidHlwZSI6ICJzdHJpbmciLCAib3B0aW9uYWwi
OiBmYWxzZX0sIHsibmFtZSI6ICJwcmludENvbG9yIiwgInR5cGUiOiAic3RyaW5nIiwgIm9wdGlv
bmFsIjogZmFsc2V9XSwgWyJjb2x1bW5OYW1lcyIsICJub3RlcyIsICJ0aW1lc3RhbXAiLCAidmFs
dWVzIiwgInBheWxvYWQiLCAiZGF0YWJhc2VJZCIsICJzcWxFcnJvciIsICJzY3JlZW5Db2xvciIs
ICJwcmludENvbG9yIl0pOworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0QmFja2VuZENvbW1h
bmRzLmpzCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJz
LmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1w
YXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IEphdmFTY3JpcHRDb3JlL3JlcGxheS9z
Y3JpcHRzL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKKworI2lmbmRlZiBJbnNwZWN0b3JUZXN0
QmFja2VuZERpc3BhdGNoZXJzX2gKKyNkZWZpbmUgSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRj
aGVyc19oCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSAiSW5zcGVjdG9yVGVz
dFR5cGVCdWlsZGVycy5oIgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0eXBlZGVmIFN0cmlu
ZyBFcnJvclN0cmluZzsKKworI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCitjbGFzcyBJbnNwZWN0
b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7CitwdWJsaWM6CisgICAgLy8gTmFt
ZWQgYWZ0ZXIgcGFyYW1ldGVyICdzY3JlZW5Db2xvcicgd2hpbGUgZ2VuZXJhdGluZyBjb21tYW5k
L2V2ZW50IGV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMuCisgICAgZW51bSBjbGFzcyBTY3Jl
ZW5Db2xvciB7CisgICAgICAgIFJlZCA9IDAsCisgICAgICAgIEdyZWVuID0gMSwKKyAgICAgICAg
Qmx1ZSA9IDIsCisgICAgfTsgLy8gZW51bSBjbGFzcyBTY3JlZW5Db2xvcgorICAgIC8vIE5hbWVk
IGFmdGVyIHBhcmFtZXRlciAncHJpbnRDb2xvcicgd2hpbGUgZ2VuZXJhdGluZyBjb21tYW5kL2V2
ZW50IGV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMuCisgICAgZW51bSBjbGFzcyBQcmludENv
bG9yIHsKKyAgICAgICAgQ3lhbiA9IDMsCisgICAgICAgIE1hZ2VudGEgPSA0LAorICAgICAgICBZ
ZWxsb3cgPSA1LAorICAgICAgICBCbGFjayA9IDYsCisgICAgfTsgLy8gZW51bSBjbGFzcyBQcmlu
dENvbG9yCisgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMoRXJy
b3JTdHJpbmcqLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheT4qIGluX2Nv
bHVtbk5hbWVzLCBjb25zdCBTdHJpbmcqIGluX25vdGVzLCBjb25zdCBkb3VibGUqIGluX3RpbWVz
dGFtcCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiogaW5fdmFsdWVz
LCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlKiBpbl9wYXlsb2FkLCBjb25zdCBpbnQq
IGluX2RhdGFiYXNlSWQsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4q
IGluX3NxbEVycm9yLCBjb25zdCBTdHJpbmcqIGluX3NjcmVlbkNvbG9yLCBjb25zdCBTdHJpbmcq
IGluX3ByaW50Q29sb3IsIFJlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheTxTdHJp
bmc+PiYgb3B0X291dF9jb2x1bW5OYW1lcywgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6T3B0T3V0
cHV0PFN0cmluZz4qIG9wdF9vdXRfbm90ZXMsIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6Ok9wdE91
dHB1dDxkb3VibGU+KiBvcHRfb3V0X3RpbWVzdGFtcCwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6
T3B0T3V0cHV0PEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0Piogb3B0X291dF92YWx1ZXMsIElu
c3BlY3Rvcjo6VHlwZUJ1aWxkZXI6Ok9wdE91dHB1dDxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVl
Piogb3B0X291dF9wYXlsb2FkLCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8aW50
Piogb3B0X291dF9kYXRhYmFzZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6RGF0
YWJhc2U6OkVycm9yPiYgb3B0X291dF9zcWxFcnJvciwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6
RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMqIG9wdF9vdXRfc2NyZWVuQ29sb3IsIEluc3BlY3RvckRh
dGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQcmludENvbG9yKiBvcHRfb3V0X3ByaW50
Q29sb3IpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJz
KEVycm9yU3RyaW5nKiwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXk+JiBp
bl9jb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBpbl9ub3RlcywgZG91YmxlIGluX3RpbWVzdGFt
cCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYgaW5fdmFsdWVzLCBJ
bnNwZWN0b3I6Okluc3BlY3RvclZhbHVlIGluX3BheWxvYWQsIGludCBpbl9kYXRhYmFzZUlkLCBj
b25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+JiBpbl9zcWxFcnJvciwgY29u
c3QgU3RyaW5nJiBpbl9zY3JlZW5Db2xvciwgY29uc3QgU3RyaW5nJiBpbl9wcmludENvbG9yLCBS
ZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk8U3RyaW5nPj4mIG91dF9jb2x1bW5O
YW1lcywgU3RyaW5nKiBvdXRfbm90ZXMsIGRvdWJsZSogb3V0X3RpbWVzdGFtcCwgSW5zcGVjdG9y
OjpJbnNwZWN0b3JPYmplY3QqIG91dF92YWx1ZXMsIEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUq
IG91dF9wYXlsb2FkLCBpbnQqIG91dF9kYXRhYmFzZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpUeXBl
QnVpbGRlcjo6RGF0YWJhc2U6OkVycm9yPiYgb3V0X3NxbEVycm9yLCBJbnNwZWN0b3I6OlR5cGVC
dWlsZGVyOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyogb3V0X3NjcmVlbkNvbG9yLCBJbnNwZWN0
b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UHJpbnRDb2xvciogb3V0X3ByaW50
Q29sb3IpID0gMDsKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIH5JbnNwZWN0b3JEYXRhYmFzZUJh
Y2tlbmREaXNwYXRjaGVySGFuZGxlcigpOworfTsKKyNlbmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFC
QVNFKQorCisjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKK2NsYXNzIEluc3BlY3RvckRhdGFiYXNl
QmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JTdXBw
bGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEluc3BlY3Rvcjo6
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqLCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVySGFuZGxlciopOworICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaChsb25nIGNhbGxJZCwg
Y29uc3QgU3RyaW5nJiBtZXRob2QsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmpl
Y3Q+IG1lc3NhZ2UpIG92ZXJyaWRlOworcHJpdmF0ZToKKyAgICB2b2lkIGV4ZWN1dGVBbGxPcHRp
b25hbFBhcmFtZXRlcnMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2Jq
ZWN0JiBtZXNzYWdlKTsKKyAgICB2b2lkIGV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhsb25n
IGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpOworcHJp
dmF0ZToKKyAgICBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKEluc3BlY3Rvcjo6
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqLCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVySGFuZGxlciopOworICAgIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyKiBtX2FnZW50OworfTsKKyNlbmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQorCit9
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisK
KyNlbmRpZiAvLyAhZGVmaW5lZChJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzX2gpCisj
IyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVn
aW4gRmlsZTogSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24K
Ky8vIGJ5IHRoZSBzY3JpcHQ6IEphdmFTY3JpcHRDb3JlL3JlcGxheS9zY3JpcHRzL0NvZGVHZW5l
cmF0b3JJbnNwZWN0b3IucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkluc3Bl
Y3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisK
KyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLmg+CisjaW5jbHVk
ZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJp
bmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKyNpZiBFTkFCTEUoU1FMX0RBVEFCQVNF
KQorSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6On5JbnNwZWN0b3JE
YXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpIHsgfQorI2VuZGlmIC8vIEVOQUJMRShT
UUxfREFUQUJBU0UpCisKKyNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQorUGFzc1JlZlB0cjxJbnNw
ZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyPiBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmRE
aXNwYXRjaGVyOjpjcmVhdGUoSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNw
YXRjaGVyLCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQp
Cit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyLCBhZ2VudCkpOworfQorCitJbnNwZWN0b3JEYXRhYmFz
ZUJhY2tlbmREaXNwYXRjaGVyOjpJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKElu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlciwgSW5zcGVjdG9yRGF0
YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQorICAgIDogSW5zcGVjdG9yU3Vw
cGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIpCisgICAgLCBtX2Fn
ZW50KGFnZW50KQoreworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hl
ckZvckRvbWFpbihBU0NJSUxpdGVyYWwoIkRhdGFiYXNlIiksIHRoaXMpOworfQorCit2b2lkIElu
c3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgY2FsbElkLCBj
b25zdCBTdHJpbmcmIG1ldGhvZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1lc3NhZ2Up
Cit7CisgICAgUmVmPEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3Qo
KnRoaXMpOworCisgICAgaWYgKG1ldGhvZCA9PSAiZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVy
cyIpCisgICAgICAgIGV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMoY2FsbElkLCAqbWVzc2Fn
ZS5nZXQoKSk7CisgICAgZWxzZSBpZiAobWV0aG9kID09ICJleGVjdXRlTm9PcHRpb25hbFBhcmFt
ZXRlcnMiKQorICAgICAgICBleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMoY2FsbElkLCAqbWVz
c2FnZS5nZXQoKSk7CisgICAgZWxzZQorICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBv
cnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpNZXRo
b2ROb3RGb3VuZCwgU3RyaW5nKCInIikgKyAiRGF0YWJhc2UiICsgJy4nICsgbWV0aG9kICsgIicg
d2FzIG5vdCBmb3VuZCIpOworfQorCit2b2lkIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3Bh
dGNoZXI6OmV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMobG9uZyBjYWxsSWQsIGNvbnN0IElu
c3BlY3Rvck9iamVjdCYgbWVzc2FnZSkKK3sKKyAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHBy
b3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IG1lc3NhZ2UuZ2V0T2JqZWN0KEFTQ0lJTGl0
ZXJhbCgicGFyYW1zIikpOworICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRy
ID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOworICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVy
cm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOworICAgIGJvb2wgY29sdW1uTmFtZXNfdmFs
dWVGb3VuZCA9IGZhbHNlOworICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5PiBp
bl9jb2x1bW5OYW1lcyA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRBcnJheShwYXJh
bXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgiY29sdW1uTmFtZXMiKSwgJmNvbHVtbk5hbWVz
X3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRyKTsKKyAgICBib29sIG5vdGVzX3ZhbHVlRm91
bmQgPSBmYWxzZTsKKyAgICBTdHJpbmcgaW5fbm90ZXMgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlcjo6Z2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJub3RlcyIp
LCAmbm90ZXNfdmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJvcnNQdHIpOworICAgIGJvb2wgdGltZXN0
YW1wX3ZhbHVlRm91bmQgPSBmYWxzZTsKKyAgICBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpPcHRP
dXRwdXQ8ZG91YmxlPiBpbl90aW1lc3RhbXAgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6
Z2V0TnVtYmVyKHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJ0aW1lc3RhbXAiKSwg
JnRpbWVzdGFtcF92YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0cik7CisgICAgYm9vbCB2YWx1
ZXNfdmFsdWVGb3VuZCA9IGZhbHNlOworICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9i
amVjdD4gaW5fdmFsdWVzID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldE9iamVjdChw
YXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgidmFsdWVzIiksICZ2YWx1ZXNfdmFsdWVG
b3VuZCwgcHJvdG9jb2xFcnJvcnNQdHIpOworICAgIGJvb2wgcGF5bG9hZF92YWx1ZUZvdW5kID0g
ZmFsc2U7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+IGluX3BheWxvYWQg
PSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0QW55KHBhcmFtc0NvbnRhaW5lclB0ciwg
QVNDSUlMaXRlcmFsKCJwYXlsb2FkIiksICZwYXlsb2FkX3ZhbHVlRm91bmQsIHByb3RvY29sRXJy
b3JzUHRyKTsKKyAgICBib29sIGRhdGFiYXNlSWRfdmFsdWVGb3VuZCA9IGZhbHNlOworICAgIGlu
dCBpbl9kYXRhYmFzZUlkID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldEludChwYXJh
bXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgiZGF0YWJhc2VJZCIpLCAmZGF0YWJhc2VJZF92
YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0cik7CisgICAgYm9vbCBzcWxFcnJvcl92YWx1ZUZv
dW5kID0gZmFsc2U7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBpbl9z
cWxFcnJvciA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRPYmplY3QocGFyYW1zQ29u
dGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoInNxbEVycm9yIiksICZzcWxFcnJvcl92YWx1ZUZvdW5k
LCBwcm90b2NvbEVycm9yc1B0cik7CisgICAgYm9vbCBzY3JlZW5Db2xvcl92YWx1ZUZvdW5kID0g
ZmFsc2U7CisgICAgU3RyaW5nIGluX3NjcmVlbkNvbG9yID0gSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXI6OmdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgic2NyZWVu
Q29sb3IiKSwgJnNjcmVlbkNvbG9yX3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRyKTsKKyAg
ICBib29sIHByaW50Q29sb3JfdmFsdWVGb3VuZCA9IGZhbHNlOworICAgIFN0cmluZyBpbl9wcmlu
dENvbG9yID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldFN0cmluZyhwYXJhbXNDb250
YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgicHJpbnRDb2xvciIpLCAmcHJpbnRDb2xvcl92YWx1ZUZv
dW5kLCBwcm90b2NvbEVycm9yc1B0cik7CisgICAgaWYgKHByb3RvY29sRXJyb3JzLT5sZW5ndGgo
KSkgeworICAgICAgICBTdHJpbmcgZXJyb3JNZXNzYWdlID0gU3RyaW5nOjpmb3JtYXQoIlNvbWUg
YXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJEYXRhYmFzZS5l
eGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzIik7CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNo
ZXItPnJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXI6OkludmFsaWRQYXJhbXMsIGVycm9yTWVzc2FnZSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgp
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEVycm9yU3RyaW5nIGVycm9yOworICAg
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCk7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5PFN0cmluZz4+IG91
dF9jb2x1bW5OYW1lczsKKyAgICBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8U3Ry
aW5nPiBvdXRfbm90ZXM7CisgICAgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6T3B0T3V0cHV0PGRv
dWJsZT4gb3V0X3RpbWVzdGFtcDsKKyAgICBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpPcHRPdXRw
dXQ8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IG91dF92YWx1ZXM7CisgICAgSW5zcGVjdG9y
OjpUeXBlQnVpbGRlcjo6T3B0T3V0cHV0PEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+IG91dF9w
YXlsb2FkOworICAgIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6Ok9wdE91dHB1dDxJbnNwZWN0b3I6
OlR5cGVCdWlsZGVyOjpEYXRhYmFzZTo6RGF0YWJhc2VJZD4gb3V0X2RhdGFiYXNlSWQ7CisgICAg
UmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkRhdGFiYXNlOjpFcnJvcj4gb3V0X3NxbEVy
cm9yOworICAgIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3Jz
IG91dF9zY3JlZW5Db2xvcjsKKyAgICBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVy
SGFuZGxlcjo6UHJpbnRDb2xvciBvdXRfcHJpbnRDb2xvcjsKKyAgICBtX2FnZW50LT5leGVjdXRl
QWxsT3B0aW9uYWxQYXJhbWV0ZXJzKCZlcnJvciwgY29sdW1uTmFtZXNfdmFsdWVGb3VuZCA/ICZp
bl9jb2x1bW5OYW1lcyA6IG51bGxwdHIsIG5vdGVzX3ZhbHVlRm91bmQgPyAmaW5fbm90ZXMgOiBu
dWxscHRyLCB0aW1lc3RhbXBfdmFsdWVGb3VuZCA/ICZpbl90aW1lc3RhbXAgOiBudWxscHRyLCB2
YWx1ZXNfdmFsdWVGb3VuZCA/ICZpbl92YWx1ZXMgOiBudWxscHRyLCBwYXlsb2FkX3ZhbHVlRm91
bmQgPyAmaW5fcGF5bG9hZCA6IG51bGxwdHIsIGRhdGFiYXNlSWRfdmFsdWVGb3VuZCA/ICZpbl9k
YXRhYmFzZUlkIDogbnVsbHB0ciwgc3FsRXJyb3JfdmFsdWVGb3VuZCA/ICZpbl9zcWxFcnJvciA6
IG51bGxwdHIsIHNjcmVlbkNvbG9yX3ZhbHVlRm91bmQgPyAmaW5fc2NyZWVuQ29sb3IgOiBudWxs
cHRyLCBwcmludENvbG9yX3ZhbHVlRm91bmQgPyAmaW5fcHJpbnRDb2xvciA6IG51bGxwdHIsIG91
dF9jb2x1bW5OYW1lcywgJm91dF9ub3RlcywgJm91dF90aW1lc3RhbXAsIG91dF92YWx1ZXMsICZv
dXRfcGF5bG9hZCwgJm91dF9kYXRhYmFzZUlkLCBvdXRfc3FsRXJyb3IsICZvdXRfc2NyZWVuQ29s
b3IsICZvdXRfcHJpbnRDb2xvcik7CisKKyAgICBpZiAoIWVycm9yLmxlbmd0aCgpKSB7CisgICAg
ICAgIGlmIChvdXRfY29sdW1uTmFtZXMpCisgICAgICAgICAgICByZXN1bHQtPnNldFZhbHVlKEFT
Q0lJTGl0ZXJhbCgiY29sdW1uTmFtZXMiKSwgb3V0X2NvbHVtbk5hbWVzKTsKKyAgICAgICAgaWYg
KG91dF9ub3Rlcy5pc0Fzc2lnbmVkKCkpCisgICAgICAgICAgICByZXN1bHQtPnNldFN0cmluZyhB
U0NJSUxpdGVyYWwoIm5vdGVzIiksIG91dF9ub3Rlcy5nZXRWYWx1ZSgpKTsKKyAgICAgICAgaWYg
KG91dF90aW1lc3RhbXAuaXNBc3NpZ25lZCgpKQorICAgICAgICAgICAgcmVzdWx0LT5zZXROdW1i
ZXIoQVNDSUlMaXRlcmFsKCJ0aW1lc3RhbXAiKSwgb3V0X3RpbWVzdGFtcC5nZXRWYWx1ZSgpKTsK
KyAgICAgICAgaWYgKG91dF92YWx1ZXMuaXNBc3NpZ25lZCgpKQorICAgICAgICAgICAgcmVzdWx0
LT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJ2YWx1ZXMiKSwgb3V0X3ZhbHVlcy5nZXRWYWx1ZSgp
KTsKKyAgICAgICAgaWYgKG91dF9wYXlsb2FkLmlzQXNzaWduZWQoKSkKKyAgICAgICAgICAgIHJl
c3VsdC0+c2V0VmFsdWUoQVNDSUlMaXRlcmFsKCJwYXlsb2FkIiksIG91dF9wYXlsb2FkLmdldFZh
bHVlKCkpOworICAgICAgICBpZiAob3V0X2RhdGFiYXNlSWQuaXNBc3NpZ25lZCgpKQorICAgICAg
ICAgICAgcmVzdWx0LT5zZXROdW1iZXIoQVNDSUlMaXRlcmFsKCJkYXRhYmFzZUlkIiksIG91dF9k
YXRhYmFzZUlkLmdldFZhbHVlKCkpOworICAgICAgICBpZiAob3V0X3NxbEVycm9yKQorICAgICAg
ICAgICAgcmVzdWx0LT5zZXRWYWx1ZShBU0NJSUxpdGVyYWwoInNxbEVycm9yIiksIG91dF9zcWxF
cnJvcik7CisgICAgICAgIGlmIChvdXRfc2NyZWVuQ29sb3IuaXNBc3NpZ25lZCgpKQorICAgICAg
ICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJzY3JlZW5Db2xvciIpLCBvdXRf
c2NyZWVuQ29sb3IuZ2V0VmFsdWUoKSk7CisgICAgICAgIGlmIChvdXRfcHJpbnRDb2xvci5pc0Fz
c2lnbmVkKCkpCisgICAgICAgICAgICByZXN1bHQtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInBy
aW50Q29sb3IiKSwgb3V0X3ByaW50Q29sb3IuZ2V0VmFsdWUoKSk7CisgICAgfQorICAgIG1fYmFj
a2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIGVy
cm9yKTsKK30KKwordm9pZCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVj
dXRlTm9PcHRpb25hbFBhcmFtZXRlcnMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVj
dCYgbWVzc2FnZSkKK3sKKyAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3Jz
ID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHBhcmFtc0NvbnRhaW5lciA9IG1lc3NhZ2UuZ2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicGFyYW1z
IikpOworICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29u
dGFpbmVyLmdldCgpOworICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHBy
b3RvY29sRXJyb3JzLmdldCgpOworICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5
PiBpbl9jb2x1bW5OYW1lcyA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRBcnJheShw
YXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgiY29sdW1uTmFtZXMiKSwgbnVsbHB0ciwg
cHJvdG9jb2xFcnJvcnNQdHIpOworICAgIFN0cmluZyBpbl9ub3RlcyA9IEluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyOjpnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwo
Im5vdGVzIiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzUHRyKTsKKyAgICBkb3VibGUgaW5fdGlt
ZXN0YW1wID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldE51bWJlcihwYXJhbXNDb250
YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgidGltZXN0YW1wIiksIG51bGxwdHIsIHByb3RvY29sRXJy
b3JzUHRyKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IGluX3ZhbHVl
cyA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRPYmplY3QocGFyYW1zQ29udGFpbmVy
UHRyLCBBU0NJSUxpdGVyYWwoInZhbHVlcyIpLCBudWxscHRyLCBwcm90b2NvbEVycm9yc1B0cik7
CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+IGluX3BheWxvYWQgPSBJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0QW55KHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlM
aXRlcmFsKCJwYXlsb2FkIiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzUHRyKTsKKyAgICBpbnQg
aW5fZGF0YWJhc2VJZCA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRJbnQocGFyYW1z
Q29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoImRhdGFiYXNlSWQiKSwgbnVsbHB0ciwgcHJvdG9j
b2xFcnJvcnNQdHIpOworICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gaW5f
c3FsRXJyb3IgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0T2JqZWN0KHBhcmFtc0Nv
bnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJzcWxFcnJvciIpLCBudWxscHRyLCBwcm90b2NvbEVy
cm9yc1B0cik7CisgICAgU3RyaW5nIGluX3NjcmVlbkNvbG9yID0gSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXI6OmdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgic2Ny
ZWVuQ29sb3IiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnNQdHIpOworICAgIFN0cmluZyBpbl9w
cmludENvbG9yID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldFN0cmluZyhwYXJhbXND
b250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgicHJpbnRDb2xvciIpLCBudWxscHRyLCBwcm90b2Nv
bEVycm9yc1B0cik7CisgICAgaWYgKHByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgeworICAgICAg
ICBTdHJpbmcgZXJyb3JNZXNzYWdlID0gU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9m
IG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJEYXRhYmFzZS5leGVjdXRlTm9PcHRp
b25hbFBhcmFtZXRlcnMiKTsKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJv
dG9jb2xFcnJvcigmY2FsbElkLCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBh
cmFtcywgZXJyb3JNZXNzYWdlLCBwcm90b2NvbEVycm9ycy5yZWxlYXNlKCkpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgRXJyb3JTdHJpbmcgZXJyb3I7CisgICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBSZWZQ
dHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk8U3RyaW5nPj4gb3V0X2NvbHVtbk5hbWVz
OworICAgIFN0cmluZyBvdXRfbm90ZXM7CisgICAgZG91YmxlIG91dF90aW1lc3RhbXA7CisgICAg
SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Qgb3V0X3ZhbHVlczsKKyAgICBJbnNwZWN0b3I6Oklu
c3BlY3RvclZhbHVlIG91dF9wYXlsb2FkOworICAgIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkRh
dGFiYXNlOjpEYXRhYmFzZUlkIG91dF9kYXRhYmFzZUlkOworICAgIFJlZlB0cjxJbnNwZWN0b3I6
OlR5cGVCdWlsZGVyOjpEYXRhYmFzZTo6RXJyb3I+IG91dF9zcWxFcnJvcjsKKyAgICBJbnNwZWN0
b3I6OlR5cGVCdWlsZGVyOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyBvdXRfc2NyZWVuQ29sb3I7
CisgICAgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29s
b3Igb3V0X3ByaW50Q29sb3I7CisgICAgbV9hZ2VudC0+ZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0
ZXJzKCZlcnJvciwgaW5fY29sdW1uTmFtZXMsIGluX25vdGVzLCBpbl90aW1lc3RhbXAsIGluX3Zh
bHVlcywgaW5fcGF5bG9hZCwgaW5fZGF0YWJhc2VJZCwgaW5fc3FsRXJyb3IsIGluX3NjcmVlbkNv
bG9yLCBpbl9wcmludENvbG9yLCBvdXRfY29sdW1uTmFtZXMsICZvdXRfbm90ZXMsICZvdXRfdGlt
ZXN0YW1wLCBvdXRfdmFsdWVzLCAmb3V0X3BheWxvYWQsICZvdXRfZGF0YWJhc2VJZCwgb3V0X3Nx
bEVycm9yLCAmb3V0X3NjcmVlbkNvbG9yLCAmb3V0X3ByaW50Q29sb3IpOworCisgICAgaWYgKCFl
cnJvci5sZW5ndGgoKSkgeworICAgICAgICByZXN1bHQtPnNldFZhbHVlKEFTQ0lJTGl0ZXJhbCgi
Y29sdW1uTmFtZXMiKSwgb3V0X2NvbHVtbk5hbWVzKTsKKyAgICAgICAgcmVzdWx0LT5zZXRTdHJp
bmcoQVNDSUlMaXRlcmFsKCJub3RlcyIpLCBvdXRfbm90ZXMpOworICAgICAgICByZXN1bHQtPnNl
dE51bWJlcihBU0NJSUxpdGVyYWwoInRpbWVzdGFtcCIpLCBvdXRfdGltZXN0YW1wKTsKKyAgICAg
ICAgcmVzdWx0LT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJ2YWx1ZXMiKSwgb3V0X3ZhbHVlcyk7
CisgICAgICAgIHJlc3VsdC0+c2V0VmFsdWUoQVNDSUlMaXRlcmFsKCJwYXlsb2FkIiksIG91dF9w
YXlsb2FkKTsKKyAgICAgICAgcmVzdWx0LT5zZXROdW1iZXIoQVNDSUlMaXRlcmFsKCJkYXRhYmFz
ZUlkIiksIG91dF9kYXRhYmFzZUlkKTsKKyAgICAgICAgcmVzdWx0LT5zZXRWYWx1ZShBU0NJSUxp
dGVyYWwoInNxbEVycm9yIiksIG91dF9zcWxFcnJvcik7CisgICAgICAgIHJlc3VsdC0+c2V0U3Ry
aW5nKEFTQ0lJTGl0ZXJhbCgic2NyZWVuQ29sb3IiKSwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6
Z2V0VGVzdEVudW1Db25zdGFudFZhbHVlKG91dF9zY3JlZW5Db2xvcikpOworICAgICAgICByZXN1
bHQtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInByaW50Q29sb3IiKSwgSW5zcGVjdG9yOjpUeXBl
QnVpbGRlcjo6Z2V0VGVzdEVudW1Db25zdGFudFZhbHVlKG91dF9wcmludENvbG9yKSk7CisgICAg
fQorICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5y
ZWxlYXNlKCksIGVycm9yKTsKK30KKyNlbmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQorCit9
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisK
KyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKworIyMj
IEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpz
b24KKy8vIGJ5IHRoZSBzY3JpcHQ6IEphdmFTY3JpcHRDb3JlL3JlcGxheS9zY3JpcHRzL0NvZGVH
ZW5lcmF0b3JJbnNwZWN0b3IucHkKKworI2lmbmRlZiBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNw
YXRjaGVyc19oCisjZGVmaW5lIEluc3BlY3RvclRlc3RGcm9udGVuZERpc3BhdGNoZXJzX2gKKwor
I2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRlICJJbnNwZWN0b3JUZXN0VHlwZUJ1aWxk
ZXJzLmgiCisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oPgor
I2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvUGFz
c1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8g
RU5BQkxFKElOU1BFQ1RPUikKKworI2VuZGlmIC8vICFkZWZpbmVkKEluc3BlY3RvclRlc3RGcm9u
dGVuZERpc3BhdGNoZXJzX2gpCisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RGcm9udGVuZERp
c3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RGcm9udGVuZERpc3Bh
dGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwt
cmV0dXJuLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogSmF2YVNjcmlwdENvcmUv
cmVwbGF5L3NjcmlwdHMvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQorCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKKwor
I2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisK
K25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2Vu
ZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdEZy
b250ZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0VHlw
ZUJ1aWxkZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxs
LXJldHVybi1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IEphdmFTY3JpcHRDb3Jl
L3JlcGxheS9zY3JpcHRzL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKKworI2lmbmRlZiBJbnNw
ZWN0b3JUZXN0VHlwZUJ1aWxkZXJzX2gKKyNkZWZpbmUgSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVy
c19oCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3Bl
Y3RvckpTVHlwZUJ1aWxkZXJzLmg+CisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclR5cGVC
dWlsZGVyLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvUGFz
c1JlZlB0ci5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKK25hbWVzcGFjZSBUeXBl
QnVpbGRlciB7CisKKy8vIEZvcndhcmQgZGVjbGFyYXRpb25zLgorI2lmIEVOQUJMRShTUUxfREFU
QUJBU0UpCituYW1lc3BhY2UgRGF0YWJhc2UgeworY2xhc3MgRXJyb3I7CitlbnVtIGNsYXNzIFBy
aW1hcnlDb2xvcnM7Cit9IC8vIERhdGFiYXNlCisjZW5kaWYgLy8gRU5BQkxFKFNRTF9EQVRBQkFT
RSkKKy8vIEVuZCBvZiBmb3J3YXJkIGRlY2xhcmF0aW9ucy4KKworCisvLyBUeXBlZGVmcy4KKyNp
ZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQorbmFtZXNwYWNlIERhdGFiYXNlIHsKKy8qIFVuaXF1ZSBp
ZGVudGlmaWVyIG9mIERhdGFiYXNlIG9iamVjdC4gKi8KK3R5cGVkZWYgaW50IERhdGFiYXNlSWQ7
Cit9IC8vIERhdGFiYXNlCisjZW5kaWYgLy8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKKy8vIEVuZCBv
ZiB0eXBlZGVmcy4KKworU3RyaW5nIGdldFRlc3RFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSk7
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IFN0cmluZyBnZXRUZXN0RW51bUNvbnN0YW50VmFsdWUo
VCBlbnVtVmFsdWUpCit7CisgICAgcmV0dXJuIGdldFRlc3RFbnVtQ29uc3RhbnRWYWx1ZShzdGF0
aWNfY2FzdDxpbnQ+KGVudW1WYWx1ZSkpOworfQorCisjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkK
K25hbWVzcGFjZSBEYXRhYmFzZSB7CisvKiAgKi8KK2VudW0gY2xhc3MgUHJpbWFyeUNvbG9ycyB7
CisgICAgUmVkID0gMCwKKyAgICBHcmVlbiA9IDEsCisgICAgQmx1ZSA9IDIsCit9OyAvLyBlbnVt
IGNsYXNzIFByaW1hcnlDb2xvcnMKKy8qIERhdGFiYXNlIGVycm9yLiAqLworY2xhc3MgRXJyb3Ig
OiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3RCYXNlIHsKK3B1YmxpYzoKKyAgICBl
bnVtIHsKKyAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAorICAgICAgICBNZXNzYWdlU2V0ID0gMSA8
PCAwLAorICAgICAgICBDb2RlU2V0ID0gMSA8PCAxLAorICAgICAgICBBbGxGaWVsZHNTZXQgPSAo
TWVzc2FnZVNldCB8IENvZGVTZXQpCisgICAgfTsKKworICAgIHRlbXBsYXRlPGludCBTVEFURT4K
KyAgICBjbGFzcyBCdWlsZGVyIHsKKyAgICBwcml2YXRlOgorICAgICAgICBSZWZQdHI8SW5zcGVj
dG9yOjpJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OworCisgICAgICAgIHRlbXBsYXRlPGludCBT
VEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0
aGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjwvKkVycm9yKi9J
bnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gcHRyKQorICAgICAgICB7CisgICAgICAgICAgICBD
T01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25v
bl9pbml0X3N0YXRlKTsKKyAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOworICAgICAgICB9Cisg
ICAgICAgIGZyaWVuZCBjbGFzcyBFcnJvcjsKKyAgICBwdWJsaWM6CisKKyAgICAgICAgQnVpbGRl
cjxTVEFURSB8IE1lc3NhZ2VTZXQ+JiBzZXRNZXNzYWdlKGNvbnN0IFN0cmluZyYgdmFsdWUpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBNZXNzYWdlU2V0
KSwgcHJvcGVydHlfbWVzc2FnZV9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+
c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgibWVzc2FnZSIpLCB2YWx1ZSk7CisgICAgICAgICAgICBy
ZXR1cm4gY2FzdFN0YXRlPE1lc3NhZ2VTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBCdWls
ZGVyPFNUQVRFIHwgQ29kZVNldD4mIHNldENvZGUoaW50IHZhbHVlKQorICAgICAgICB7CisgICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQ29kZVNldCksIHByb3BlcnR5X2NvZGVf
YWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcihBU0NJSUxpdGVy
YWwoImNvZGUiKSwgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxDb2RlU2V0
PigpOworICAgICAgICB9CisKKyAgICAgICAgb3BlcmF0b3IgUmVmUHRyPEVycm9yPiYgKCkKKyAg
ICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0
LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVv
ZihFcnJvcikgPT0gc2l6ZW9mKEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0KSwgY2Fubm90X2Nh
c3QpOworICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxFcnJvcj4q
PigmbV9yZXN1bHQpOworICAgICAgICB9CisKKyAgICAgICAgUGFzc1JlZlB0cjxFcnJvcj4gcmVs
ZWFzZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBSZWZQdHI8RXJyb3I+KCp0aGlz
KS5yZWxlYXNlKCk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgLyoKKyAgICAgKiBTeW50aGV0
aWMgY29uc3RydWN0b3I6CisgICAgICogUmVmUHRyPEVycm9yPiByZXN1bHQgPSBFcnJvcjo6Y3Jl
YXRlKCkKKyAgICAgKiAgICAgLnNldE1lc3NhZ2UoLi4uKQorICAgICAqICAgICAuc2V0Q29kZSgu
Li4pOworICAgICAqLworICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEluc3BlY3Rvcjo6SW5z
cGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7CisgICAgfQorICAgIHR5cGVkZWYgSW5zcGVjdG9yOjpU
eXBlQnVpbGRlcjo6U3RydWN0SXRlbVRyYWl0cyBJdGVtVHJhaXRzOworfTsKKworfSAvLyBEYXRh
YmFzZQorI2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0UpCisKKworCit9IC8vIG5hbWVzcGFj
ZSBUeXBlQnVpbGRlcgorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVO
QUJMRShJTlNQRUNUT1IpCisKKyNlbmRpZiAvLyAhZGVmaW5lZChJbnNwZWN0b3JUZXN0VHlwZUJ1
aWxkZXJzX2gpCisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuaAorCisj
IyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5jcHAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24K
Ky8vIGJ5IHRoZSBzY3JpcHQ6IEphdmFTY3JpcHRDb3JlL3JlcGxheS9zY3JpcHRzL0NvZGVHZW5l
cmF0b3JJbnNwZWN0b3IucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkluc3Bl
Y3RvclRlc3RUeXBlQnVpbGRlcnMuaCIKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNs
dWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCituYW1l
c3BhY2UgVHlwZUJ1aWxkZXIgeworCitzdGF0aWMgY29uc3QgY2hhciogY29uc3QgZW51bV9jb25z
dGFudF92YWx1ZXNbXSA9IHsKKyAgICAicmVkIiwKKyAgICAiZ3JlZW4iLAorICAgICJibHVlIiwK
KyAgICAiY3lhbiIsCisgICAgIm1hZ2VudGEiLAorICAgICJ5ZWxsb3ciLAorICAgICJibGFjayIs
Cit9OworCitTdHJpbmcgZ2V0VGVzdEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKSB7CisgICAg
cmV0dXJuIGVudW1fY29uc3RhbnRfdmFsdWVzW2NvZGVdOworfQorCisKKworfSAvLyBuYW1lc3Bh
Y2UgVHlwZUJ1aWxkZXIKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBF
TkFCTEUoSU5TUEVDVE9SKQorCisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RUeXBlQnVpbGRl
cnMuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZXhwZWN0ZWQvZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29u
LXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9l
eHBlY3RlZC9kb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24tcmVzdWx0Cm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmNmNmUwMjIzYjQ5YWRhNDI3YTY0MzBlNTcxYTQ3MDgzYWRjMTQ4MzIKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZXhwZWN0ZWQvZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uLXJlc3Vs
dApAQCAtMCwwICsxLDU1MiBAQAorIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5k
Q29tbWFuZHMuanMKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFu
ZC1zaXplcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBKYXZhU2NyaXB0Q29yZS9yZXBsYXkvc2Ny
aXB0cy9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5CisKKy8vIE5ldHdvcmsxLgorSW5zcGVjdG9y
QmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIk5ldHdvcmsxLmxvYWRSZXNvdXJjZTEiLCBbXSwgW10p
OworCisvLyBOZXR3b3JrMy4KK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJOZXR3
b3JrMy5sb2FkUmVzb3VyY2UxIiwgW10sIFtdKTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJD
b21tYW5kKCJOZXR3b3JrMy5sb2FkUmVzb3VyY2UyIiwgW10sIFtdKTsKK0luc3BlY3RvckJhY2tl
bmQucmVnaXN0ZXJDb21tYW5kKCJOZXR3b3JrMy5sb2FkUmVzb3VyY2UzIiwgW10sIFtdKTsKK0lu
c3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJOZXR3b3JrMy5sb2FkUmVzb3VyY2U0Iiwg
W10sIFtdKTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJOZXR3b3JrMy5sb2Fk
UmVzb3VyY2U1IiwgW10sIFtdKTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJO
ZXR3b3JrMy5sb2FkUmVzb3VyY2U2IiwgW10sIFtdKTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0
ZXJDb21tYW5kKCJOZXR3b3JrMy5sb2FkUmVzb3VyY2U3IiwgW10sIFtdKTsKKyMjIyBFbmQgRmls
ZTogSW5zcGVjdG9yVGVzdEJhY2tlbmRDb21tYW5kcy5qcworCisjIyMgQmVnaW4gRmlsZTogSW5z
cGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbnMt
d2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogSmF2YVNj
cmlwdENvcmUvcmVwbGF5L3NjcmlwdHMvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQorCisjaWZu
ZGVmIEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnNfaAorI2RlZmluZSBJbnNwZWN0b3JU
ZXN0QmFja2VuZERpc3BhdGNoZXJzX2gKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNs
dWRlICJJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmgiCisjaW5jbHVkZSA8aW5zcGVjdG9yL0lu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7
CisKK3R5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCitjbGFzcyBJbnNwZWN0b3JOZXR3b3Jr
MUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIGxv
YWRSZXNvdXJjZTEoRXJyb3JTdHJpbmcqKSA9IDA7Citwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB+
SW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKTsKK307CisKK2NsYXNz
IEluc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKK3B1YmxpYzoKKyAg
ICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlMShFcnJvclN0cmluZyopID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgbG9hZFJlc291cmNlMihFcnJvclN0cmluZyopID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgbG9hZFJlc291cmNlMyhFcnJvclN0cmluZyopID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbG9h
ZFJlc291cmNlNChFcnJvclN0cmluZyopID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291
cmNlNShFcnJvclN0cmluZyopID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlNihF
cnJvclN0cmluZyopID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlNyhFcnJvclN0
cmluZyopID0gMDsKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIH5JbnNwZWN0b3JOZXR3b3JrM0Jh
Y2tlbmREaXNwYXRjaGVySGFuZGxlcigpOworfTsKKworY2xhc3MgSW5zcGVjdG9yTmV0d29yazFC
YWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3BlY3RvclN1cHBs
ZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0
cjxJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUoSW5zcGVjdG9yOjpJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciosIEluc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3Bh
dGNoZXJIYW5kbGVyKik7CisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoKGxvbmcgY2FsbElkLCBj
b25zdCBTdHJpbmcmIG1ldGhvZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVj
dD4gbWVzc2FnZSkgb3ZlcnJpZGU7Citwcml2YXRlOgorICAgIHZvaWQgbG9hZFJlc291cmNlMShs
b25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpOwor
cHJpdmF0ZToKKyAgICBJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyKEluc3BlY3Rv
cjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqLCBJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmRE
aXNwYXRjaGVySGFuZGxlciopOworICAgIEluc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNo
ZXJIYW5kbGVyKiBtX2FnZW50OworfTsKKworY2xhc3MgSW5zcGVjdG9yTmV0d29yazNCYWNrZW5k
RGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3BlY3RvclN1cHBsZW1lbnRh
bEJhY2tlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNw
ZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUoSW5zcGVjdG9yOjpJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlciosIEluc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyKik7CisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoKGxvbmcgY2FsbElkLCBjb25zdCBT
dHJpbmcmIG1ldGhvZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gbWVz
c2FnZSkgb3ZlcnJpZGU7Citwcml2YXRlOgorICAgIHZvaWQgbG9hZFJlc291cmNlMShsb25nIGNh
bGxJZCwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpOworICAgIHZv
aWQgbG9hZFJlc291cmNlMihsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JP
YmplY3QmIG1lc3NhZ2UpOworICAgIHZvaWQgbG9hZFJlc291cmNlMyhsb25nIGNhbGxJZCwgY29u
c3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpOworICAgIHZvaWQgbG9hZFJl
c291cmNlNChsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QmIG1l
c3NhZ2UpOworICAgIHZvaWQgbG9hZFJlc291cmNlNShsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVj
dG9yOjpJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpOworICAgIHZvaWQgbG9hZFJlc291cmNlNihs
b25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpOwor
ICAgIHZvaWQgbG9hZFJlc291cmNlNyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yOjpJbnNw
ZWN0b3JPYmplY3QmIG1lc3NhZ2UpOworcHJpdmF0ZToKKyAgICBJbnNwZWN0b3JOZXR3b3JrM0Jh
Y2tlbmREaXNwYXRjaGVyKEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqLCBJ
bnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOworICAgIEluc3BlY3Rv
ck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBtX2FnZW50OworfTsKKworfSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorCisjZW5k
aWYgLy8gIWRlZmluZWQoSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVyc19oKQorIyMjIEVu
ZCBGaWxlOiBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZp
bGU6IEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IGRvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbgorLy8gYnkgdGhlIHNjcmlw
dDogSmF2YVNjcmlwdENvcmUvcmVwbGF5L3NjcmlwdHMvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5w
eQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yVGVzdEJhY2tlbmRE
aXNwYXRjaGVycy5oIgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUgPGluc3Bl
Y3Rvci9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4KKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5z
cGVjdG9yVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKKworSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXI6On5JbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpIHsgfQorSW5z
cGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6On5JbnNwZWN0b3JOZXR3b3Jr
M0JhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpIHsgfQorCitQYXNzUmVmUHRyPEluc3BlY3Rvck5l
dHdvcmsxQmFja2VuZERpc3BhdGNoZXI+IEluc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNo
ZXI6OmNyZWF0ZShJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIs
IEluc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKK3sKKyAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IEluc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIo
YmFja2VuZERpc3BhdGNoZXIsIGFnZW50KSk7Cit9CisKK0luc3BlY3Rvck5ldHdvcmsxQmFja2Vu
ZERpc3BhdGNoZXI6Okluc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIoSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyLCBJbnNwZWN0b3JOZXR3b3JrMUJh
Y2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCisgICAgOiBJbnNwZWN0b3JTdXBwbGVtZW50
YWxCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlcikKKyAgICAsIG1fYWdlbnQoYWdl
bnQpCit7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRjaGVyRm9yRG9t
YWluKEFTQ0lJTGl0ZXJhbCgiTmV0d29yazEiKSwgdGhpcyk7Cit9CisKK3ZvaWQgSW5zcGVjdG9y
TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyBjYWxsSWQsIGNvbnN0IFN0
cmluZyYgbWV0aG9kLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbWVzc2FnZSkKK3sKKyAg
ICBSZWY8SW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7
CisKKyAgICBpZiAobWV0aG9kID09ICJsb2FkUmVzb3VyY2UxIikKKyAgICAgICAgbG9hZFJlc291
cmNlMShjYWxsSWQsICptZXNzYWdlLmdldCgpKTsKKyAgICBlbHNlCisgICAgICAgIG1fYmFja2Vu
ZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCBTdHJpbmcoIiciKSArICJOZXR3b3JrMSIgKyAn
LicgKyBtZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7Cit9CisKK3ZvaWQgSW5zcGVjdG9yTmV0
d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMShsb25nIGNhbGxJZCwgY29uc3Qg
SW5zcGVjdG9yT2JqZWN0JikKK3sKKyAgICBFcnJvclN0cmluZyBlcnJvcjsKKyAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAg
IG1fYWdlbnQtPmxvYWRSZXNvdXJjZTEoJmVycm9yKTsKKworICAgIG1fYmFja2VuZERpc3BhdGNo
ZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIGVycm9yKTsKK30KKwor
UGFzc1JlZlB0cjxJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyPiBJbnNwZWN0b3JO
ZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUoSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXIqIGJhY2tlbmREaXNwYXRjaGVyLCBJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVy
SGFuZGxlciogYWdlbnQpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnNwZWN0b3JOZXR3
b3JrM0JhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyLCBhZ2VudCkpOworfQorCitJ
bnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpJbnNwZWN0b3JOZXR3b3JrM0JhY2tl
bmREaXNwYXRjaGVyKEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hl
ciwgSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQorICAg
IDogSW5zcGVjdG9yU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNo
ZXIpCisgICAgLCBtX2FnZW50KGFnZW50KQoreworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJl
Z2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbihBU0NJSUxpdGVyYWwoIk5ldHdvcmszIiksIHRoaXMp
OworfQorCit2b2lkIEluc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNo
KGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IG1lc3NhZ2UpCit7CisgICAgUmVmPEluc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3Bh
dGNoZXI+IHByb3RlY3QoKnRoaXMpOworCisgICAgdHlwZWRlZiB2b2lkIChJbnNwZWN0b3JOZXR3
b3JrM0JhY2tlbmREaXNwYXRjaGVyOjoqQ2FsbEhhbmRsZXIpKGxvbmcgY2FsbElkLCBjb25zdCBJ
bnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7CisgICAgdHlwZWRlZiBIYXNoTWFw
PFN0cmluZywgQ2FsbEhhbmRsZXI+IERpc3BhdGNoTWFwOworICAgIERFUFJFQ0FURURfREVGSU5F
X1NUQVRJQ19MT0NBTChEaXNwYXRjaE1hcCwgZGlzcGF0Y2hNYXAsICgpKTsKKyAgICBpZiAoZGlz
cGF0Y2hNYXAuaXNFbXB0eSgpKSB7CisgICAgICAgIHN0YXRpYyBjb25zdCBzdHJ1Y3QgTWV0aG9k
VGFibGUgeworICAgICAgICAgICAgY29uc3QgY2hhciogbmFtZTsKKyAgICAgICAgICAgIENhbGxI
YW5kbGVyIGhhbmRsZXI7CisgICAgICAgIH0gY29tbWFuZHNbXSA9IHsKKyAgICAgICAgICAgIHsg
ImxvYWRSZXNvdXJjZTEiLCAmSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9h
ZFJlc291cmNlMSB9LAorICAgICAgICAgICAgeyAibG9hZFJlc291cmNlMiIsICZJbnNwZWN0b3JO
ZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UyIH0sCisgICAgICAgICAgICB7
ICJsb2FkUmVzb3VyY2UzIiwgJkluc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6Omxv
YWRSZXNvdXJjZTMgfSwKKyAgICAgICAgICAgIHsgImxvYWRSZXNvdXJjZTQiLCAmSW5zcGVjdG9y
TmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNCB9LAorICAgICAgICAgICAg
eyAibG9hZFJlc291cmNlNSIsICZJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjps
b2FkUmVzb3VyY2U1IH0sCisgICAgICAgICAgICB7ICJsb2FkUmVzb3VyY2U2IiwgJkluc3BlY3Rv
ck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTYgfSwKKyAgICAgICAgICAg
IHsgImxvYWRSZXNvdXJjZTciLCAmSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6
bG9hZFJlc291cmNlNyB9LAorICAgICAgICB9OworICAgICAgICBzaXplX3QgbGVuZ3RoID0gV1RG
X0FSUkFZX0xFTkdUSChjb21tYW5kcyk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bGVuZ3RoOyArK2kpCisgICAgICAgICAgICBkaXNwYXRjaE1hcC5hZGQoY29tbWFuZHNbaV0ubmFt
ZSwgY29tbWFuZHNbaV0uaGFuZGxlcik7CisgICAgfQorCisgICAgSGFzaE1hcDxTdHJpbmcsIENh
bGxIYW5kbGVyPjo6aXRlcmF0b3IgaXQgPSBkaXNwYXRjaE1hcC5maW5kKG1ldGhvZCk7CisgICAg
aWYgKGl0ID09IGRpc3BhdGNoTWFwLmVuZCgpKSB7CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNo
ZXItPnJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXI6Ok1ldGhvZE5vdEZvdW5kLCBTdHJpbmcoIiciKSArICJOZXR3b3JrMyIgKyAnLicgKyBtZXRo
b2QgKyAiJyB3YXMgbm90IGZvdW5kIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAo
KCp0aGlzKS4qaXQtPnZhbHVlKShjYWxsSWQsICptZXNzYWdlLmdldCgpKTsKK30KKwordm9pZCBJ
bnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UxKGxvbmcgY2Fs
bElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmKQoreworICAgIEVycm9yU3RyaW5nIGVycm9yOwor
ICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3Jl
YXRlKCk7CisgICAgbV9hZ2VudC0+bG9hZFJlc291cmNlMSgmZXJyb3IpOworCisgICAgbV9iYWNr
ZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgZXJy
b3IpOworfQorCit2b2lkIEluc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRS
ZXNvdXJjZTIobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYpCit7CisgICAgRXJy
b3JTdHJpbmcgZXJyb3I7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5z
cGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBtX2FnZW50LT5sb2FkUmVzb3VyY2UyKCZlcnJv
cik7CisKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1
bHQucmVsZWFzZSgpLCBlcnJvcik7Cit9CisKK3ZvaWQgSW5zcGVjdG9yTmV0d29yazNCYWNrZW5k
RGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2Jq
ZWN0JikKK3sKKyAgICBFcnJvclN0cmluZyBlcnJvcjsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIG1fYWdlbnQtPmxv
YWRSZXNvdXJjZTMoJmVycm9yKTsKKworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNw
b25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIGVycm9yKTsKK30KKwordm9pZCBJbnNwZWN0
b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U0KGxvbmcgY2FsbElkLCBj
b25zdCBJbnNwZWN0b3JPYmplY3QmKQoreworICAgIEVycm9yU3RyaW5nIGVycm9yOworICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7
CisgICAgbV9hZ2VudC0+bG9hZFJlc291cmNlNCgmZXJyb3IpOworCisgICAgbV9iYWNrZW5kRGlz
cGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgZXJyb3IpOwor
fQorCit2b2lkIEluc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJj
ZTUobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYpCit7CisgICAgRXJyb3JTdHJp
bmcgZXJyb3I7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBtX2FnZW50LT5sb2FkUmVzb3VyY2U1KCZlcnJvcik7CisK
KyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVs
ZWFzZSgpLCBlcnJvcik7Cit9CisKK3ZvaWQgSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0
Y2hlcjo6bG9hZFJlc291cmNlNihsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JikK
K3sKKyAgICBFcnJvclN0cmluZyBlcnJvcjsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBy
ZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIG1fYWdlbnQtPmxvYWRSZXNv
dXJjZTYoJmVycm9yKTsKKworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShj
YWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIGVycm9yKTsKK30KKwordm9pZCBJbnNwZWN0b3JOZXR3
b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U3KGxvbmcgY2FsbElkLCBjb25zdCBJ
bnNwZWN0b3JPYmplY3QmKQoreworICAgIEVycm9yU3RyaW5nIGVycm9yOworICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAg
bV9hZ2VudC0+bG9hZFJlc291cmNlNygmZXJyb3IpOworCisgICAgbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgZXJyb3IpOworfQorCit9
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisK
KyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKworIyMj
IEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCisvLyBieSB0
aGUgc2NyaXB0OiBKYXZhU2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySW5z
cGVjdG9yLnB5CisKKyNpZm5kZWYgSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnNfaAor
I2RlZmluZSBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVyc19oCisKKyNpZiBFTkFCTEUo
SU5TUEVDVE9SKQorCisjaW5jbHVkZSAiSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5oIgorI2lu
Y2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4KKyNpbmNsdWRlIDxp
bnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7
CisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQ
RUNUT1IpCisKKyNlbmRpZiAvLyAhZGVmaW5lZChJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRj
aGVyc19oKQorIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5o
CisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29u
CisvLyBieSB0aGUgc2NyaXB0OiBKYXZhU2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0cy9Db2RlR2Vu
ZXJhdG9ySW5zcGVjdG9yLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnNw
ZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikK
KworI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7
CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RP
UikKKworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAK
KworIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuaAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBkb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24KKy8vIGJ5IHRo
ZSBzY3JpcHQ6IEphdmFTY3JpcHRDb3JlL3JlcGxheS9zY3JpcHRzL0NvZGVHZW5lcmF0b3JJbnNw
ZWN0b3IucHkKKworI2lmbmRlZiBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzX2gKKyNkZWZpbmUg
SW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVyc19oCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisj
aW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckpTVHlwZUJ1aWxkZXJzLmg+CisjaW5jbHVkZSA8
aW5zcGVjdG9yL0luc3BlY3RvclR5cGVCdWlsZGVyLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlv
bnMuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9y
IHsKKworCisKK25hbWVzcGFjZSBUeXBlQnVpbGRlciB7CisKKworCisvLyBUeXBlZGVmcy4KK25h
bWVzcGFjZSBOZXR3b3JrMiB7CisvKiBVbmlxdWUgbG9hZGVyIGlkZW50aWZpZXIuICovCit0eXBl
ZGVmIFN0cmluZyBMb2FkZXJJZDsKK30gLy8gTmV0d29yazIKKy8vIEVuZCBvZiB0eXBlZGVmcy4K
KworU3RyaW5nIGdldFRlc3RFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSk7CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+IFN0cmluZyBnZXRUZXN0RW51bUNvbnN0YW50VmFsdWUoVCBlbnVtVmFsdWUp
Cit7CisgICAgcmV0dXJuIGdldFRlc3RFbnVtQ29uc3RhbnRWYWx1ZShzdGF0aWNfY2FzdDxpbnQ+
KGVudW1WYWx1ZSkpOworfQorCisKKworfSAvLyBuYW1lc3BhY2UgVHlwZUJ1aWxkZXIKKworfSAv
LyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorCisj
ZW5kaWYgLy8gIWRlZmluZWQoSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVyc19oKQorIyMjIEVuZCBG
aWxlOiBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IEluc3Bl
Y3RvclRlc3RUeXBlQnVpbGRlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbnMtd2l0aC12
YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogSmF2YVNjcmlwdENv
cmUvcmVwbGF5L3NjcmlwdHMvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQorCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5oIgorCisjaWYg
RU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFt
ZXNwYWNlIEluc3BlY3RvciB7CisKK25hbWVzcGFjZSBUeXBlQnVpbGRlciB7CisKK3N0YXRpYyBj
b25zdCBjaGFyKiBjb25zdCBlbnVtX2NvbnN0YW50X3ZhbHVlc1tdID0geworfTsKKworU3RyaW5n
IGdldFRlc3RFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSkgeworICAgIHJldHVybiBlbnVtX2Nv
bnN0YW50X3ZhbHVlc1tjb2RlXTsKK30KKworCisKK30gLy8gbmFtZXNwYWNlIFR5cGVCdWlsZGVy
CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RP
UikKKworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmNwcApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVj
dGVkL2V2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbi1yZXN1bHQgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZXZlbnRzLXdp
dGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uLXJlc3VsdApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43MTRhZjk1NGE4
NTNmZTliNGRlZDcyZDYwZDc3MGYwZjIwZmQwNDM5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2V2ZW50cy13
aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbi1yZXN1bHQKQEAgLTAsMCArMSw0OTcgQEAKKyMj
IyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0QmFja2VuZENvbW1hbmRzLmpzCisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNj
cmlwdDogSmF2YVNjcmlwdENvcmUvcmVwbGF5L3NjcmlwdHMvQ29kZUdlbmVyYXRvckluc3BlY3Rv
ci5weQorCisvLyBEYXRhYmFzZS4KK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEYXRhYmFzZURp
c3BhdGNoZXIgPSBJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluRGlzcGF0Y2hlci5iaW5k
KEluc3BlY3RvckJhY2tlbmQsICJEYXRhYmFzZSIpOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3Rl
ckV2ZW50KCJEYXRhYmFzZS5kaWRFeGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJzIiwgWyJjb2x1bW5O
YW1lcyIsICJub3RlcyIsICJ0aW1lc3RhbXAiLCAidmFsdWVzIiwgInBheWxvYWQiLCAic3FsRXJy
b3IiLCAic2NyZWVuQ29sb3IiLCAicHJpbnRDb2xvciJdKTsKK0luc3BlY3RvckJhY2tlbmQucmVn
aXN0ZXJFdmVudCgiRGF0YWJhc2UuZGlkRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzIiwgWyJj
b2x1bW5OYW1lcyIsICJub3RlcyIsICJ0aW1lc3RhbXAiLCAidmFsdWVzIiwgInBheWxvYWQiLCAi
c3FsRXJyb3IiLCAic2NyZWVuQ29sb3IiLCAicHJpbnRDb2xvciJdKTsKKyMjIyBFbmQgRmlsZTog
SW5zcGVjdG9yVGVzdEJhY2tlbmRDb21tYW5kcy5qcworCisjIyMgQmVnaW4gRmlsZTogSW5zcGVj
dG9yVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13aXRo
LW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogSmF2YVNjcmlwdENv
cmUvcmVwbGF5L3NjcmlwdHMvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQorCisjaWZuZGVmIElu
c3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnNfaAorI2RlZmluZSBJbnNwZWN0b3JUZXN0QmFj
a2VuZERpc3BhdGNoZXJzX2gKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRlICJJ
bnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmgiCisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3R5
cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKwor
I2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyNlbmRpZiAvLyAhZGVmaW5lZChJbnNwZWN0
b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzX2gpCisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RC
YWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdEJhY2tl
bmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnRzLXdpdGgtb3B0aW9uYWwt
cGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBKYXZhU2NyaXB0Q29yZS9yZXBsYXkv
c2NyaXB0cy9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCisKKyNpZiBFTkFC
TEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2hh
bm5lbC5oPgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworfSAv
LyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorCisj
IyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBC
ZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNj
cmlwdDogSmF2YVNjcmlwdENvcmUvcmVwbGF5L3NjcmlwdHMvQ29kZUdlbmVyYXRvckluc3BlY3Rv
ci5weQorCisjaWZuZGVmIEluc3BlY3RvclRlc3RGcm9udGVuZERpc3BhdGNoZXJzX2gKKyNkZWZp
bmUgSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnNfaAorCisjaWYgRU5BQkxFKElOU1BF
Q1RPUikKKworI2luY2x1ZGUgIkluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuaCIKKyNpbmNsdWRl
IDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLmg+CisjaW5jbHVkZSA8aW5zcGVj
dG9yL0luc3BlY3RvclZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisK
KworI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCitjbGFzcyBJbnNwZWN0b3JEYXRhYmFzZUZyb250
ZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgSW5zcGVjdG9yRGF0YWJhc2VGcm9udGVuZERp
c3BhdGNoZXIoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwpIDogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
KSB7IH0KKyAgICB2b2lkIGRpZEV4ZWN1dGVPcHRpb25hbFBhcmFtZXRlcnMoUGFzc1JlZlB0cjxJ
bnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheTxTdHJpbmc+PiBjb2x1bW5OYW1lcywgY29uc3Qg
U3RyaW5nKiBjb25zdCBub3RlcywgY29uc3QgZG91YmxlKiBjb25zdCB0aW1lc3RhbXAsIFBhc3NS
ZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IHZhbHVlcywgUGFzc1JlZlB0cjxJbnNw
ZWN0b3I6Okluc3BlY3RvclZhbHVlPiBwYXlsb2FkLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6VHlw
ZUJ1aWxkZXI6OkRhdGFiYXNlOjpFcnJvcj4gc3FsRXJyb3IsIGNvbnN0IEluc3BlY3Rvcjo6VHlw
ZUJ1aWxkZXI6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzKiBjb25zdCBzY3JlZW5Db2xvciwgY29u
c3QgU3RyaW5nKiBjb25zdCBwcmludENvbG9yKTsKKyAgICB2b2lkIGRpZEV4ZWN1dGVOb09wdGlv
bmFsUGFyYW1ldGVycyhQYXNzUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5PFN0
cmluZz4+IGNvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIG5vdGVzLCBkb3VibGUgdGltZXN0YW1w
LCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZXMsIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4gcGF5bG9hZCwgUGFzc1JlZlB0cjxJbnNwZWN0
b3I6OlR5cGVCdWlsZGVyOjpEYXRhYmFzZTo6RXJyb3I+IHNxbEVycm9yLCBjb25zdCBJbnNwZWN0
b3I6OlR5cGVCdWlsZGVyOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyYgc2NyZWVuQ29sb3IsIGNv
bnN0IFN0cmluZyYgcHJpbnRDb2xvcik7Citwcml2YXRlOgorICAgIEluc3BlY3RvckZyb250ZW5k
Q2hhbm5lbCogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7Cit9OworI2VuZGlmIC8vIEVOQUJM
RShTUUxfREFUQUJBU0UpCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8g
RU5BQkxFKElOU1BFQ1RPUikKKworI2VuZGlmIC8vICFkZWZpbmVkKEluc3BlY3RvclRlc3RGcm9u
dGVuZERpc3BhdGNoZXJzX2gpCisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RGcm9udGVuZERp
c3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RGcm9udGVuZERpc3Bh
dGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0
ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IEphdmFTY3JpcHRDb3JlL3JlcGxheS9zY3JpcHRz
L0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkluc3BlY3RvclRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCisKKyNpZiBFTkFCTEUoSU5T
UEVDVE9SKQorCisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5z
cGVjdG9yIHsKKworI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCit2b2lkIEluc3BlY3RvckRhdGFi
YXNlRnJvbnRlbmREaXNwYXRjaGVyOjpkaWRFeGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJzKFBhc3NS
ZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk8U3RyaW5nPj4gY29sdW1uTmFtZXMs
IGNvbnN0IFN0cmluZyogY29uc3Qgbm90ZXMsIGNvbnN0IGRvdWJsZSogY29uc3QgdGltZXN0YW1w
LCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZXMsIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4gcGF5bG9hZCwgUGFzc1JlZlB0cjxJbnNwZWN0
b3I6OlR5cGVCdWlsZGVyOjpEYXRhYmFzZTo6RXJyb3I+IHNxbEVycm9yLCBjb25zdCBJbnNwZWN0
b3I6OlR5cGVCdWlsZGVyOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyogY29uc3Qgc2NyZWVuQ29s
b3IsIGNvbnN0IFN0cmluZyogY29uc3QgcHJpbnRDb2xvcikKK3sKKyAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBqc29uTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAg
anNvbk1lc3NhZ2UtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoIm1ldGhvZCIpLCBBU0NJSUxpdGVy
YWwoIkRhdGFiYXNlLmRpZEV4ZWN1dGVPcHRpb25hbFBhcmFtZXRlcnMiKSk7CisgICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUo
KTsKKyAgICBpZiAoY29sdW1uTmFtZXMpCisgICAgICAgIHBhcmFtc09iamVjdC0+c2V0VmFsdWUo
QVNDSUlMaXRlcmFsKCJjb2x1bW5OYW1lcyIpLCBjb2x1bW5OYW1lcyk7CisgICAgaWYgKG5vdGVz
KQorICAgICAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoIm5vdGVzIiks
ICpub3Rlcyk7CisgICAgaWYgKHRpbWVzdGFtcCkKKyAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRO
dW1iZXIoQVNDSUlMaXRlcmFsKCJ0aW1lc3RhbXAiKSwgKnRpbWVzdGFtcCk7CisgICAgaWYgKHZh
bHVlcykKKyAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJ2YWx1
ZXMiKSwgdmFsdWVzKTsKKyAgICBpZiAocGF5bG9hZCkKKyAgICAgICAgcGFyYW1zT2JqZWN0LT5z
ZXRWYWx1ZShBU0NJSUxpdGVyYWwoInBheWxvYWQiKSwgKnBheWxvYWQpOworICAgIGlmIChzcWxF
cnJvcikKKyAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRWYWx1ZShBU0NJSUxpdGVyYWwoInNxbEVy
cm9yIiksIHNxbEVycm9yKTsKKyAgICBpZiAoc2NyZWVuQ29sb3IpCisgICAgICAgIHBhcmFtc09i
amVjdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgic2NyZWVuQ29sb3IiKSwgKnNjcmVlbkNvbG9y
KTsKKyAgICBpZiAocHJpbnRDb2xvcikKKyAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmco
QVNDSUlMaXRlcmFsKCJwcmludENvbG9yIiksICpwcmludENvbG9yKTsKKyAgICBqc29uTWVzc2Fn
ZS0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicGFyYW1zIiksIHBhcmFtc09iamVjdCk7CisKKyAg
ICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGpzb25N
ZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yRGF0YWJhc2VGcm9u
dGVuZERpc3BhdGNoZXI6OmRpZEV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhQYXNzUmVmUHRy
PEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5PFN0cmluZz4+IGNvbHVtbk5hbWVzLCBjb25z
dCBTdHJpbmcmIG5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6
SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZXMsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JW
YWx1ZT4gcGF5bG9hZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpEYXRhYmFz
ZTo6RXJyb3I+IHNxbEVycm9yLCBjb25zdCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpEYXRhYmFz
ZTo6UHJpbWFyeUNvbG9ycyYgc2NyZWVuQ29sb3IsIGNvbnN0IFN0cmluZyYgcHJpbnRDb2xvcikK
K3sKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBqc29uTWVzc2FnZSA9IEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCk7CisgICAganNvbk1lc3NhZ2UtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwo
Im1ldGhvZCIpLCBBU0NJSUxpdGVyYWwoIkRhdGFiYXNlLmRpZEV4ZWN1dGVOb09wdGlvbmFsUGFy
YW1ldGVycyIpKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJ
bnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIHBhcmFtc09iamVjdC0+c2V0VmFsdWUoQVND
SUlMaXRlcmFsKCJjb2x1bW5OYW1lcyIpLCBjb2x1bW5OYW1lcyk7CisgICAgcGFyYW1zT2JqZWN0
LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJub3RlcyIpLCBub3Rlcyk7CisgICAgcGFyYW1zT2Jq
ZWN0LT5zZXROdW1iZXIoQVNDSUlMaXRlcmFsKCJ0aW1lc3RhbXAiKSwgdGltZXN0YW1wKTsKKyAg
ICBwYXJhbXNPYmplY3QtPnNldE9iamVjdChBU0NJSUxpdGVyYWwoInZhbHVlcyIpLCB2YWx1ZXMp
OworICAgIHBhcmFtc09iamVjdC0+c2V0VmFsdWUoQVNDSUlMaXRlcmFsKCJwYXlsb2FkIiksIHBh
eWxvYWQpOworICAgIHBhcmFtc09iamVjdC0+c2V0VmFsdWUoQVNDSUlMaXRlcmFsKCJzcWxFcnJv
ciIpLCBzcWxFcnJvcik7CisgICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFs
KCJzY3JlZW5Db2xvciIpLCBzY3JlZW5Db2xvcik7CisgICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJp
bmcoQVNDSUlMaXRlcmFsKCJwcmludENvbG9yIiksIHByaW50Q29sb3IpOworICAgIGpzb25NZXNz
YWdlLT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJwYXJhbXMiKSwgcGFyYW1zT2JqZWN0KTsKKwor
ICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQoanNv
bk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKK30KKyNlbmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFC
QVNFKQorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQ
RUNUT1IpCisKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMu
Y3BwCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmgKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uCisvLyBieSB0
aGUgc2NyaXB0OiBKYXZhU2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySW5z
cGVjdG9yLnB5CisKKyNpZm5kZWYgSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVyc19oCisjZGVmaW5l
IEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnNfaAorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKwor
I2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JKU1R5cGVCdWlsZGVycy5oPgorI2luY2x1ZGUg
PGluc3BlY3Rvci9JbnNwZWN0b3JUeXBlQnVpbGRlci5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRp
b25zLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKworbmFtZXNwYWNlIEluc3BlY3Rv
ciB7CisKKworCituYW1lc3BhY2UgVHlwZUJ1aWxkZXIgeworCisvLyBGb3J3YXJkIGRlY2xhcmF0
aW9ucy4KKyNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQorbmFtZXNwYWNlIERhdGFiYXNlIHsKK2Ns
YXNzIEVycm9yOworfSAvLyBEYXRhYmFzZQorI2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0Up
CisvLyBFbmQgb2YgZm9yd2FyZCBkZWNsYXJhdGlvbnMuCisKKworLy8gVHlwZWRlZnMuCisjaWYg
RU5BQkxFKFNRTF9EQVRBQkFTRSkKK25hbWVzcGFjZSBEYXRhYmFzZSB7CisvKiBVbmlxdWUgaWRl
bnRpZmllciBvZiBEYXRhYmFzZSBvYmplY3QuICovCit0eXBlZGVmIFN0cmluZyBEYXRhYmFzZUlk
OworCit0eXBlZGVmIFN0cmluZyBQcmltYXJ5Q29sb3JzOworfSAvLyBEYXRhYmFzZQorI2VuZGlm
IC8vIEVOQUJMRShTUUxfREFUQUJBU0UpCisvLyBFbmQgb2YgdHlwZWRlZnMuCisKK1N0cmluZyBn
ZXRUZXN0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBTdHJpbmcgZ2V0VGVzdEVudW1Db25zdGFudFZhbHVlKFQgZW51bVZhbHVlKQoreworICAgIHJl
dHVybiBnZXRUZXN0RW51bUNvbnN0YW50VmFsdWUoc3RhdGljX2Nhc3Q8aW50PihlbnVtVmFsdWUp
KTsKK30KKworI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCituYW1lc3BhY2UgRGF0YWJhc2Ugewor
LyogRGF0YWJhc2UgZXJyb3IuICovCitjbGFzcyBFcnJvciA6IHB1YmxpYyBJbnNwZWN0b3I6Oklu
c3BlY3Rvck9iamVjdEJhc2UgeworcHVibGljOgorICAgIGVudW0geworICAgICAgICBOb0ZpZWxk
c1NldCA9IDAsCisgICAgICAgIE1lc3NhZ2VTZXQgPSAxIDw8IDAsCisgICAgICAgIENvZGVTZXQg
PSAxIDw8IDEsCisgICAgICAgIEFsbEZpZWxkc1NldCA9IChNZXNzYWdlU2V0IHwgQ29kZVNldCkK
KyAgICB9OworCisgICAgdGVtcGxhdGU8aW50IFNUQVRFPgorICAgIGNsYXNzIEJ1aWxkZXIgewor
ICAgIHByaXZhdGU6CisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4g
bV9yZXN1bHQ7CisKKyAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBT
VEVQPiYgY2FzdFN0YXRlKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICpyZWludGVy
cHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOworICAgICAgICB9CisKKyAg
ICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPC8qRXJyb3IqL0luc3BlY3Rvcjo6SW5zcGVjdG9yT2Jq
ZWN0PiBwdHIpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09
IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOworICAgICAg
ICAgICAgbV9yZXN1bHQgPSBwdHI7CisgICAgICAgIH0KKyAgICAgICAgZnJpZW5kIGNsYXNzIEVy
cm9yOworICAgIHB1YmxpYzoKKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTWVzc2FnZVNldD4m
IHNldE1lc3NhZ2UoY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoIShTVEFURSAmIE1lc3NhZ2VTZXQpLCBwcm9wZXJ0eV9tZXNzYWdlX2Fs
cmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFs
KCJtZXNzYWdlIiksIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TWVzc2Fn
ZVNldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDb2RlU2V0PiYg
c2V0Q29kZShpbnQgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KCEoU1RBVEUgJiBDb2RlU2V0KSwgcHJvcGVydHlfY29kZV9hbHJlYWR5X3NldCk7CisgICAgICAg
ICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKEFTQ0lJTGl0ZXJhbCgiY29kZSIpLCB2YWx1ZSk7Cisg
ICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENvZGVTZXQ+KCk7CisgICAgICAgIH0KKworICAg
ICAgICBvcGVyYXRvciBSZWZQdHI8RXJyb3I+JiAoKQorICAgICAgICB7CisgICAgICAgICAgICBD
T01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkp
OworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKEVycm9yKSA9PSBzaXplb2YoSW5z
cGVjdG9yOjpJbnNwZWN0b3JPYmplY3QpLCBjYW5ub3RfY2FzdCk7CisgICAgICAgICAgICByZXR1
cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPEVycm9yPio+KCZtX3Jlc3VsdCk7CisgICAgICAg
IH0KKworICAgICAgICBQYXNzUmVmUHRyPEVycm9yPiByZWxlYXNlKCkKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIFJlZlB0cjxFcnJvcj4oKnRoaXMpLnJlbGVhc2UoKTsKKyAgICAgICAg
fQorICAgIH07CisKKyAgICAvKgorICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKKyAgICAg
KiBSZWZQdHI8RXJyb3I+IHJlc3VsdCA9IEVycm9yOjpjcmVhdGUoKQorICAgICAqICAgICAuc2V0
TWVzc2FnZSguLi4pCisgICAgICogICAgIC5zZXRDb2RlKC4uLik7CisgICAgICovCisgICAgc3Rh
dGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4g
QnVpbGRlcjxOb0ZpZWxkc1NldD4oSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgp
KTsKKyAgICB9CisgICAgdHlwZWRlZiBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpTdHJ1Y3RJdGVt
VHJhaXRzIEl0ZW1UcmFpdHM7Cit9OworCit9IC8vIERhdGFiYXNlCisjZW5kaWYgLy8gRU5BQkxF
KFNRTF9EQVRBQkFTRSkKKworCisKK30gLy8gbmFtZXNwYWNlIFR5cGVCdWlsZGVyCisKK30gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKworI2Vu
ZGlmIC8vICFkZWZpbmVkKEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnNfaCkKKyMjIyBFbmQgRmls
ZTogSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0
b3JUZXN0VHlwZUJ1aWxkZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudHMtd2l0aC1vcHRp
b25hbC1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IEphdmFTY3JpcHRDb3JlL3Jl
cGxheS9zY3JpcHRzL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuaCIKKworI2lmIEVOQUJM
RShJTlNQRUNUT1IpCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFj
ZSBJbnNwZWN0b3IgeworCituYW1lc3BhY2UgVHlwZUJ1aWxkZXIgeworCitzdGF0aWMgY29uc3Qg
Y2hhciogY29uc3QgZW51bV9jb25zdGFudF92YWx1ZXNbXSA9IHsKK307CisKK1N0cmluZyBnZXRU
ZXN0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpIHsKKyAgICByZXR1cm4gZW51bV9jb25zdGFu
dF92YWx1ZXNbY29kZV07Cit9CisKKworCit9IC8vIG5hbWVzcGFjZSBUeXBlQnVpbGRlcgorCit9
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisK
KyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5jcHAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9m
YWlsLW9uLWR1cGxpY2F0ZS10eXBlLWRlY2xhcmF0aW9ucy5qc29uLWVycm9yIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tZHVw
bGljYXRlLXR5cGUtZGVjbGFyYXRpb25zLmpzb24tZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDQ3Y2RmOGUy
OGU4NTY2MTBhMjZmODE1NDk0M2YzNmNmOGI3ZDFmNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9u
LWR1cGxpY2F0ZS10eXBlLWRlY2xhcmF0aW9ucy5qc29uLWVycm9yCkBAIC0wLDAgKzEgQEAKK0VS
Uk9SOiBEdXBsaWNhdGUgdHlwZSBkZWNsYXJhdGlvbjogUnVudGltZS5SZW1vdGVPYmplY3RJZApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2V4cGVjdGVkL2ZhaWwtb24tZW51bS13aXRoLW5vLXZhbHVlcy5qc29uLWVycm9yIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24t
ZW51bS13aXRoLW5vLXZhbHVlcy5qc29uLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI2NTVjMmI5MDdlMDJl
M2U4NGNiM2Y2NmZhMWY1OGUxM2Q5YjdiNTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1lbnVt
LXdpdGgtbm8tdmFsdWVzLmpzb24tZXJyb3IKQEAgLTAsMCArMSBAQAorRVJST1I6IFR5cGUgcmVm
ZXJlbmNlIHdpdGggZW51bSB2YWx1ZXMgbXVzdCBoYXZlIGF0IGxlYXN0IG9uZSBlbnVtIHZhbHVl
LgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2V4cGVjdGVkL2ZhaWwtb24tdHlwZS1kZWNsYXJhdGlvbi11c2luZy10eXBlLXJlZmVyZW5j
ZS5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2V4cGVjdGVkL2ZhaWwtb24tdHlwZS1kZWNsYXJhdGlvbi11c2luZy10eXBlLXJlZmVyZW5j
ZS5qc29uLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQyZjU3NTNhNDM5NjE0NGViNTY2YzVjNTk2OGQwNDlh
ZWM2MTgyZGIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi10eXBlLWRlY2xhcmF0aW9uLXVzaW5n
LXR5cGUtcmVmZXJlbmNlLmpzb24tZXJyb3IKQEAgLTAsMCArMSBAQAorRVJST1I6IFR5cGUgcmVm
ZXJlbmNlIGNhbm5vdCBoYXZlIGJvdGggJ3R5cGUnIGFuZCAnJHJlZicga2V5cy4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3Rl
ZC9mYWlsLW9uLXR5cGUtd2l0aC1sb3dlcmNhc2UtbmFtZS5qc29uLWVycm9yIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tdHlw
ZS13aXRoLWxvd2VyY2FzZS1uYW1lLmpzb24tZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGU0NjIyNTBjMGFm
ODBhMTc5ZTA2YWFmNDVkMjFlYjU0NmRiODgxNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLXR5
cGUtd2l0aC1sb3dlcmNhc2UtbmFtZS5qc29uLWVycm9yCkBAIC0wLDAgKzEgQEAKK0VSUk9SOiBU
eXBlcyBtdXN0IGJlZ2luIHdpdGggYW4gdXBwZXJjYXNlIGNoYXJhY3Rlci4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9m
YWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1kZWNsYXJhdGlvbi5qc29uLWVy
cm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVj
dGVkL2ZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVyZW5jZS1pbi10eXBlLWRlY2xhcmF0aW9uLmpz
b24tZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uZDNjNzgyZDg5ZGI1NjVkNzI0ZTc1NDBlMzJlZGNmZGJkNzlh
MmY3MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2UtaW4t
dHlwZS1kZWNsYXJhdGlvbi5qc29uLWVycm9yCkBAIC0wLDAgKzEgQEAKK0VSUk9SOiBMb29rdXAg
ZmFpbGVkIGZvciB0eXBlIHJlZmVyZW5jZTogZHJhZ29uIChyZWZlcmVuY2VkIGZyb20gZG9tYWlu
OiBSdW50aW1lKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVyZW5jZS1pbi10
eXBlLW1lbWJlci5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVyZW5jZS1pbi10
eXBlLW1lbWJlci5qc29uLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZhZjY2NzJjYmVmMDk2MzBmZDliZThm
ZmFkYWNlMTJjNTYxMWNjYTgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi11bmtub3duLXR5cGUt
cmVmZXJlbmNlLWluLXR5cGUtbWVtYmVyLmpzb24tZXJyb3IKQEAgLTAsMCArMSBAQAorRVJST1I6
IExvb2t1cCBmYWlsZWQgZm9yIHR5cGUgcmVmZXJlbmNlOiBDb2xvciAocmVmZXJlbmNlZCBmcm9t
IGRvbWFpbjogRmFudGFzeSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9zYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFp
bi5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9leHBlY3RlZC9zYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uLXJlc3VsdApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4yNTBiYTU0OGY3ZmU3OTY3ODk0NTk1ZGNkZWEzYzNkZWJmZTVlNDlmCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2V4cGVjdGVkL3NhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24tcmVzdWx0CkBA
IC0wLDAgKzEsMzU2IEBACisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdEJhY2tlbmRDb21t
YW5kcy5qcworLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5q
c29uCisvLyBieSB0aGUgc2NyaXB0OiBKYXZhU2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0cy9Db2Rl
R2VuZXJhdG9ySW5zcGVjdG9yLnB5CisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5k
Q29tbWFuZHMuanMKKworIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0
Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5q
c29uCisvLyBieSB0aGUgc2NyaXB0OiBKYXZhU2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0cy9Db2Rl
R2VuZXJhdG9ySW5zcGVjdG9yLnB5CisKKyNpZm5kZWYgSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNw
YXRjaGVyc19oCisjZGVmaW5lIEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnNfaAorCisj
aWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUgIkluc3BlY3RvclRlc3RUeXBlQnVpbGRl
cnMuaCIKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4K
KyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJp
bmc7CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BF
Q1RPUikKKworI2VuZGlmIC8vICFkZWZpbmVkKEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hl
cnNfaCkKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisK
KyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCisvLyBieSB0
aGUgc2NyaXB0OiBKYXZhU2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySW5z
cGVjdG9yLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JUZXN0
QmFja2VuZERpc3BhdGNoZXJzLmgiCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVk
ZSA8aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oPgorI2luY2x1ZGUgPGluc3Bl
Y3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisK
K25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisK
KyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorCisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRl
c3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0
RnJvbnRlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNhbWUtdHlwZS1pZC1kaWZm
ZXJlbnQtZG9tYWluLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IEphdmFTY3JpcHRDb3JlL3JlcGxh
eS9zY3JpcHRzL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKKworI2lmbmRlZiBJbnNwZWN0b3JU
ZXN0RnJvbnRlbmREaXNwYXRjaGVyc19oCisjZGVmaW5lIEluc3BlY3RvclRlc3RGcm9udGVuZERp
c3BhdGNoZXJzX2gKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRlICJJbnNwZWN0
b3JUZXN0VHlwZUJ1aWxkZXJzLmgiCisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckZyb250
ZW5kQ2hhbm5lbC5oPgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4KKyNp
bmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rv
cgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKworI2VuZGlmIC8vICFkZWZpbmVkKElu
c3BlY3RvclRlc3RGcm9udGVuZERpc3BhdGNoZXJzX2gpCisjIyMgRW5kIEZpbGU6IEluc3BlY3Rv
clRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRl
c3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQt
ZGlmZmVyZW50LWRvbWFpbi5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBKYXZhU2NyaXB0Q29yZS9y
ZXBsYXkvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5CisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgorCisj
aWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKwor
bmFtZXNwYWNlIEluc3BlY3RvciB7CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5k
aWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0RnJv
bnRlbmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RUeXBl
QnVpbGRlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFp
bi5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBKYXZhU2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0cy9D
b2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5CisKKyNpZm5kZWYgSW5zcGVjdG9yVGVzdFR5cGVCdWls
ZGVyc19oCisjZGVmaW5lIEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnNfaAorCisjaWYgRU5BQkxF
KElOU1BFQ1RPUikKKworI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JKU1R5cGVCdWlsZGVy
cy5oPgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JUeXBlQnVpbGRlci5oPgorI2luY2x1
ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKworbmFt
ZXNwYWNlIEluc3BlY3RvciB7CisKKworCituYW1lc3BhY2UgVHlwZUJ1aWxkZXIgeworCisKKwor
Ly8gVHlwZWRlZnMuCituYW1lc3BhY2UgUnVudGltZSB7CisvKiBVbmlxdWUgb2JqZWN0IGlkZW50
aWZpZXIuICovCit0eXBlZGVmIFN0cmluZyBSZW1vdGVPYmplY3RJZDsKK30gLy8gUnVudGltZQor
CituYW1lc3BhY2UgUnVudGltZTIgeworLyogVW5pcXVlIG9iamVjdCBpZGVudGlmaWVyLiAqLwor
dHlwZWRlZiBTdHJpbmcgUmVtb3RlT2JqZWN0SWQ7Cit9IC8vIFJ1bnRpbWUyCisvLyBFbmQgb2Yg
dHlwZWRlZnMuCisKK1N0cmluZyBnZXRUZXN0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpOwor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBTdHJpbmcgZ2V0VGVzdEVudW1Db25zdGFudFZhbHVlKFQg
ZW51bVZhbHVlKQoreworICAgIHJldHVybiBnZXRUZXN0RW51bUNvbnN0YW50VmFsdWUoc3RhdGlj
X2Nhc3Q8aW50PihlbnVtVmFsdWUpKTsKK30KKworCisKK30gLy8gbmFtZXNwYWNlIFR5cGVCdWls
ZGVyCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BF
Q1RPUikKKworI2VuZGlmIC8vICFkZWZpbmVkKEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnNfaCkK
KyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5oCisKKyMjIyBCZWdpbiBG
aWxlOiBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1l
LXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBKYXZhU2Ny
aXB0Q29yZS9yZXBsYXkvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5CisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmgiCisK
KyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgor
CituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworbmFtZXNwYWNlIFR5cGVCdWlsZGVyIHsKKworc3Rh
dGljIGNvbnN0IGNoYXIqIGNvbnN0IGVudW1fY29uc3RhbnRfdmFsdWVzW10gPSB7Cit9OworCitT
dHJpbmcgZ2V0VGVzdEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKSB7CisgICAgcmV0dXJuIGVu
dW1fY29uc3RhbnRfdmFsdWVzW2NvZGVdOworfQorCisKKworfSAvLyBuYW1lc3BhY2UgVHlwZUJ1
aWxkZXIKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5T
UEVDVE9SKQorCisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuY3BwCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
ZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24tcmVz
dWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVj
dGVkL3R5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uLXJlc3VsdApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5jNGQyYTcyY2NmMTc1ZDY1M2ViODdhZGEzODhhZjIwZDdhMWM0NzU5Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29u
LXJlc3VsdApAQCAtMCwwICsxLDM1MSBAQAorIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RC
YWNrZW5kQ29tbWFuZHMuanMKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlh
c2VkLXByaW1pdGl2ZS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IEphdmFTY3JpcHRDb3Jl
L3JlcGxheS9zY3JpcHRzL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKKyMjIyBFbmQgRmlsZTog
SW5zcGVjdG9yVGVzdEJhY2tlbmRDb21tYW5kcy5qcworCisjIyMgQmVnaW4gRmlsZTogSW5zcGVj
dG9yVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFy
YXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBKYXZh
U2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5CisKKyNp
Zm5kZWYgSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVyc19oCisjZGVmaW5lIEluc3BlY3Rv
clRlc3RCYWNrZW5kRGlzcGF0Y2hlcnNfaAorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2lu
Y2x1ZGUgIkluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuaCIKKyNpbmNsdWRlIDxpbnNwZWN0b3Iv
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5o
PgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9y
IHsKKwordHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKK30gLy8gbmFtZXNwYWNlIEluc3Bl
Y3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKworI2VuZGlmIC8vICFkZWZpbmVk
KEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnNfaCkKKyMjIyBFbmQgRmlsZTogSW5zcGVj
dG9yVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JU
ZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0
aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogSmF2YVNj
cmlwdENvcmUvcmVwbGF5L3NjcmlwdHMvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQorCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVy
cy5oIgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwuaD4KKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFs
dWVzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVj
dG9yIHsKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxF
KElOU1BFQ1RPUikKKworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNo
ZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hl
cnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZl
LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogSmF2YVNjcmlwdENvcmUvcmVwbGF5L3Njcmlw
dHMvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQorCisjaWZuZGVmIEluc3BlY3RvclRlc3RGcm9u
dGVuZERpc3BhdGNoZXJzX2gKKyNkZWZpbmUgSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hl
cnNfaAorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUgIkluc3BlY3RvclRlc3RU
eXBlQnVpbGRlcnMuaCIKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsLmg+CisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPgorI2luY2x1ZGUg
PHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25h
bWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNl
bmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorCisjZW5kaWYgLy8gIWRlZmluZWQoSW5zcGVjdG9y
VGVzdEZyb250ZW5kRGlzcGF0Y2hlcnNfaCkKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdEZy
b250ZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdEZyb250
ZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYWxp
YXNlZC1wcmltaXRpdmUtdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBKYXZhU2NyaXB0Q29y
ZS9yZXBsYXkvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5CisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgor
CisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
KworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisj
ZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0
RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RU
eXBlQnVpbGRlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQt
cHJpbWl0aXZlLXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogSmF2YVNjcmlwdENvcmUvcmVw
bGF5L3NjcmlwdHMvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQorCisjaWZuZGVmIEluc3BlY3Rv
clRlc3RUeXBlQnVpbGRlcnNfaAorI2RlZmluZSBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzX2gK
KworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9y
SlNUeXBlQnVpbGRlcnMuaD4KKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVHlwZUJ1aWxk
ZXIuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVm
UHRyLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworbmFtZXNwYWNlIFR5cGVCdWls
ZGVyIHsKKworCisKKy8vIFR5cGVkZWZzLgorbmFtZXNwYWNlIFJ1bnRpbWUgeworLyogVW5pcXVl
IG9iamVjdCBpZGVudGlmaWVyLiAqLwordHlwZWRlZiBpbnQgUmVtb3RlT2JqZWN0SWQ7Cit9IC8v
IFJ1bnRpbWUKKy8vIEVuZCBvZiB0eXBlZGVmcy4KKworU3RyaW5nIGdldFRlc3RFbnVtQ29uc3Rh
bnRWYWx1ZShpbnQgY29kZSk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IFN0cmluZyBnZXRUZXN0
RW51bUNvbnN0YW50VmFsdWUoVCBlbnVtVmFsdWUpCit7CisgICAgcmV0dXJuIGdldFRlc3RFbnVt
Q29uc3RhbnRWYWx1ZShzdGF0aWNfY2FzdDxpbnQ+KGVudW1WYWx1ZSkpOworfQorCisKKworfSAv
LyBuYW1lc3BhY2UgVHlwZUJ1aWxkZXIKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNl
bmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorCisjZW5kaWYgLy8gIWRlZmluZWQoSW5zcGVjdG9y
VGVzdFR5cGVCdWlsZGVyc19oKQorIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxk
ZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuY3BwCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5q
c29uCisvLyBieSB0aGUgc2NyaXB0OiBKYXZhU2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0cy9Db2Rl
R2VuZXJhdG9ySW5zcGVjdG9yLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJ
bnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmgiCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisj
aW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwor
bmFtZXNwYWNlIFR5cGVCdWlsZGVyIHsKKworc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGVudW1f
Y29uc3RhbnRfdmFsdWVzW10gPSB7Cit9OworCitTdHJpbmcgZ2V0VGVzdEVudW1Db25zdGFudFZh
bHVlKGludCBjb2RlKSB7CisgICAgcmV0dXJuIGVudW1fY29uc3RhbnRfdmFsdWVzW2NvZGVdOwor
fQorCisKKworfSAvLyBuYW1lc3BhY2UgVHlwZUJ1aWxkZXIKKworfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorCisjIyMgRW5kIEZpbGU6IElu
c3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1h
cnJheS10eXBlLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uLXJl
c3VsdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4xZmQ0NWFmM2ZiZjFjNmRiY2U3ZmMzZWFjZmI1Y2IzMTc5MGFkMzU3
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uLXJlc3Vs
dApAQCAtMCwwICsxLDM3NCBAQAorIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5k
Q29tbWFuZHMuanMKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBl
Lmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IEphdmFTY3JpcHRDb3JlL3JlcGxheS9zY3JpcHRzL0Nv
ZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKKworLy8gRGVidWdnZXIuCitJbnNwZWN0b3JCYWNrZW5k
LnJlZ2lzdGVyRW51bSgiRGVidWdnZXIuUmVhc29uIiwge0RpZWQ6ICJEaWVkIiwgRmFpbnRlZDog
IkZhaW50ZWQiLCBIdW5ncnk6ICJIdW5ncnkifSk7CisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRl
c3RCYWNrZW5kQ29tbWFuZHMuanMKKworIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RCYWNr
ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFycmF5
LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogSmF2YVNjcmlwdENvcmUvcmVwbGF5L3Njcmlw
dHMvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQorCisjaWZuZGVmIEluc3BlY3RvclRlc3RCYWNr
ZW5kRGlzcGF0Y2hlcnNfaAorI2RlZmluZSBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJz
X2gKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRlICJJbnNwZWN0b3JUZXN0VHlw
ZUJ1aWxkZXJzLmgiCisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3R5cGVkZWYgU3RyaW5nIEVy
cm9yU3RyaW5nOworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJM
RShJTlNQRUNUT1IpCisKKyNlbmRpZiAvLyAhZGVmaW5lZChJbnNwZWN0b3JUZXN0QmFja2VuZERp
c3BhdGNoZXJzX2gpCisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hl
cnMuaAorCisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVycy5j
cHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24KKy8v
IGJ5IHRoZSBzY3JpcHQ6IEphdmFTY3JpcHRDb3JlL3JlcGxheS9zY3JpcHRzL0NvZGVHZW5lcmF0
b3JJbnNwZWN0b3IucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkluc3BlY3Rv
clRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNp
bmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLmg+CisjaW5jbHVkZSA8
aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcu
aD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyMjIyBFbmQgRmlsZTogSW5zcGVj
dG9yVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IEluc3BlY3Rv
clRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJh
dGlvbi1hcnJheS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IEphdmFTY3JpcHRDb3JlL3Jl
cGxheS9zY3JpcHRzL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKKworI2lmbmRlZiBJbnNwZWN0
b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVyc19oCisjZGVmaW5lIEluc3BlY3RvclRlc3RGcm9udGVu
ZERpc3BhdGNoZXJzX2gKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRlICJJbnNw
ZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmgiCisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckZy
b250ZW5kQ2hhbm5lbC5oPgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4K
KyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3Bl
Y3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKworI2VuZGlmIC8vICFkZWZpbmVk
KEluc3BlY3RvclRlc3RGcm9udGVuZERpc3BhdGNoZXJzX2gpCisjIyMgRW5kIEZpbGU6IEluc3Bl
Y3RvclRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IEluc3BlY3Rv
clRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xh
cmF0aW9uLWFycmF5LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogSmF2YVNjcmlwdENvcmUv
cmVwbGF5L3NjcmlwdHMvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQorCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKKwor
I2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisK
K25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2Vu
ZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdEZy
b250ZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0VHlw
ZUJ1aWxkZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBl
Lmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IEphdmFTY3JpcHRDb3JlL3JlcGxheS9zY3JpcHRzL0Nv
ZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKKworI2lmbmRlZiBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxk
ZXJzX2gKKyNkZWZpbmUgSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVyc19oCisKKyNpZiBFTkFCTEUo
SU5TUEVDVE9SKQorCisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckpTVHlwZUJ1aWxkZXJz
Lmg+CisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclR5cGVCdWlsZGVyLmg+CisjaW5jbHVk
ZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorCituYW1l
c3BhY2UgSW5zcGVjdG9yIHsKKworCisKK25hbWVzcGFjZSBUeXBlQnVpbGRlciB7CisKKy8vIEZv
cndhcmQgZGVjbGFyYXRpb25zLgorbmFtZXNwYWNlIERlYnVnZ2VyIHsKK2VudW0gY2xhc3MgUmVh
c29uOworfSAvLyBEZWJ1Z2dlcgorLy8gRW5kIG9mIGZvcndhcmQgZGVjbGFyYXRpb25zLgorCisK
Ky8vIFR5cGVkZWZzLgorbmFtZXNwYWNlIERlYnVnZ2VyIHsKK3R5cGVkZWYgaW50IEJyZWFrcG9p
bnRJZDsKK30gLy8gRGVidWdnZXIKKworbmFtZXNwYWNlIFJ1bnRpbWUgewordHlwZWRlZiBpbnQg
T2JqZWN0SWQ7Cit9IC8vIFJ1bnRpbWUKKy8vIEVuZCBvZiB0eXBlZGVmcy4KKworU3RyaW5nIGdl
dFRlc3RFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
IFN0cmluZyBnZXRUZXN0RW51bUNvbnN0YW50VmFsdWUoVCBlbnVtVmFsdWUpCit7CisgICAgcmV0
dXJuIGdldFRlc3RFbnVtQ29uc3RhbnRWYWx1ZShzdGF0aWNfY2FzdDxpbnQ+KGVudW1WYWx1ZSkp
OworfQorCituYW1lc3BhY2UgRGVidWdnZXIgeworLyogICovCitlbnVtIGNsYXNzIFJlYXNvbiB7
CisgICAgRGllZCA9IDAsCisgICAgRmFpbnRlZCA9IDEsCisgICAgSHVuZ3J5ID0gMiwKK307IC8v
IGVudW0gY2xhc3MgUmVhc29uCit9IC8vIERlYnVnZ2VyCisKKworCit9IC8vIG5hbWVzcGFjZSBU
eXBlQnVpbGRlcgorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJM
RShJTlNQRUNUT1IpCisKKyNlbmRpZiAvLyAhZGVmaW5lZChJbnNwZWN0b3JUZXN0VHlwZUJ1aWxk
ZXJzX2gpCisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuaAorCisjIyMg
QmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5jcHAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisv
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IEph
dmFTY3JpcHRDb3JlL3JlcGxheS9zY3JpcHRzL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMu
aCIKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5n
Lmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCituYW1lc3BhY2UgVHlwZUJ1aWxkZXIgewor
CitzdGF0aWMgY29uc3QgY2hhciogY29uc3QgZW51bV9jb25zdGFudF92YWx1ZXNbXSA9IHsKKyAg
ICAiRGllZCIsCisgICAgIkZhaW50ZWQiLAorICAgICJIdW5ncnkiLAorfTsKKworU3RyaW5nIGdl
dFRlc3RFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSkgeworICAgIHJldHVybiBlbnVtX2NvbnN0
YW50X3ZhbHVlc1tjb2RlXTsKK30KKworCisKK30gLy8gbmFtZXNwYWNlIFR5cGVCdWlsZGVyCisK
K30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikK
KworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmNwcApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVk
L3R5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24t
ZW51bS10eXBlLmpzb24tcmVzdWx0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjgyZDIwNTExZjg4MjVkMWY1NDZjYzY2
N2E2MmNlZDU2MTI1Y2FiOTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1lbnVt
LXR5cGUuanNvbi1yZXN1bHQKQEAgLTAsMCArMSwzODAgQEAKKyMjIyBCZWdpbiBGaWxlOiBJbnNw
ZWN0b3JUZXN0QmFja2VuZENvbW1hbmRzLmpzCisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFy
YXRpb24tZW51bS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IEphdmFTY3JpcHRDb3JlL3Jl
cGxheS9zY3JpcHRzL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKKworLy8gUnVudGltZS4KK0lu
c3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFbnVtKCJSdW50aW1lLkZhcm1BbmltYWxzIiwge1BpZ3M6
ICJQaWdzIiwgQ293czogIkNvd3MiLCBDYXRzOiAiQ2F0cyIsIEhlbnM6ICJIZW5zIn0pOworSW5z
cGVjdG9yQmFja2VuZC5yZWdpc3RlckVudW0oIlJ1bnRpbWUuVHdvTGVnZ2VkQW5pbWFscyIsIHtE
dWNrczogIkR1Y2tzIiwgSGVuczogIkhlbnMiLCBDcm93czogIkNyb3dzIiwgRmxhbWluZ29zOiAi
RmxhbWluZ29zIn0pOworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0QmFja2VuZENvbW1hbmRz
LmpzCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgorLy8gYnkg
dGhlIHNjcmlwdDogSmF2YVNjcmlwdENvcmUvcmVwbGF5L3NjcmlwdHMvQ29kZUdlbmVyYXRvcklu
c3BlY3Rvci5weQorCisjaWZuZGVmIEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnNfaAor
I2RlZmluZSBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzX2gKKworI2lmIEVOQUJMRShJ
TlNQRUNUT1IpCisKKyNpbmNsdWRlICJJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmgiCisjaW5j
bHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8
d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFt
ZXNwYWNlIEluc3BlY3RvciB7CisKK3R5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCit9IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyNl
bmRpZiAvLyAhZGVmaW5lZChJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzX2gpCisjIyMg
RW5kIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4g
RmlsZTogSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisv
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogSmF2
YVNjcmlwdENvcmUvcmVwbGF5L3NjcmlwdHMvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQorCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRj
aGVycy5oIgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUgPGluc3BlY3Rvci9J
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4KKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9y
VmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5z
cGVjdG9yIHsKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5B
QkxFKElOU1BFQ1RPUikKKworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3Bh
dGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0
Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29u
CisvLyBieSB0aGUgc2NyaXB0OiBKYXZhU2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0cy9Db2RlR2Vu
ZXJhdG9ySW5zcGVjdG9yLnB5CisKKyNpZm5kZWYgSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0
Y2hlcnNfaAorI2RlZmluZSBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVyc19oCisKKyNp
ZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSAiSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVy
cy5oIgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4KKyNp
bmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NS
ZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIElu
c3BlY3RvciB7CisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVO
QUJMRShJTlNQRUNUT1IpCisKKyNlbmRpZiAvLyAhZGVmaW5lZChJbnNwZWN0b3JUZXN0RnJvbnRl
bmREaXNwYXRjaGVyc19oKQorIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNw
YXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRj
aGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNv
bgorLy8gYnkgdGhlIHNjcmlwdDogSmF2YVNjcmlwdENvcmUvcmVwbGF5L3NjcmlwdHMvQ29kZUdl
bmVyYXRvckluc3BlY3Rvci5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW5z
cGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKKworI2lmIEVOQUJMRShJTlNQRUNUT1Ip
CisKKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3Ig
eworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNU
T1IpCisKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3Bw
CisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmgKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlw
dDogSmF2YVNjcmlwdENvcmUvcmVwbGF5L3NjcmlwdHMvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5w
eQorCisjaWZuZGVmIEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnNfaAorI2RlZmluZSBJbnNwZWN0
b3JUZXN0VHlwZUJ1aWxkZXJzX2gKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRl
IDxpbnNwZWN0b3IvSW5zcGVjdG9ySlNUeXBlQnVpbGRlcnMuaD4KKyNpbmNsdWRlIDxpbnNwZWN0
b3IvSW5zcGVjdG9yVHlwZUJ1aWxkZXIuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgor
I2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisK
KworbmFtZXNwYWNlIFR5cGVCdWlsZGVyIHsKKworLy8gRm9yd2FyZCBkZWNsYXJhdGlvbnMuCitu
YW1lc3BhY2UgUnVudGltZSB7CitlbnVtIGNsYXNzIEZhcm1BbmltYWxzOworZW51bSBjbGFzcyBU
d29MZWdnZWRBbmltYWxzOworfSAvLyBSdW50aW1lCisvLyBFbmQgb2YgZm9yd2FyZCBkZWNsYXJh
dGlvbnMuCisKKworCisKK1N0cmluZyBnZXRUZXN0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUp
OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBTdHJpbmcgZ2V0VGVzdEVudW1Db25zdGFudFZhbHVl
KFQgZW51bVZhbHVlKQoreworICAgIHJldHVybiBnZXRUZXN0RW51bUNvbnN0YW50VmFsdWUoc3Rh
dGljX2Nhc3Q8aW50PihlbnVtVmFsdWUpKTsKK30KKworbmFtZXNwYWNlIFJ1bnRpbWUgeworLyog
ICovCitlbnVtIGNsYXNzIEZhcm1BbmltYWxzIHsKKyAgICBQaWdzID0gMCwKKyAgICBDb3dzID0g
MSwKKyAgICBDYXRzID0gMiwKKyAgICBIZW5zID0gMywKK307IC8vIGVudW0gY2xhc3MgRmFybUFu
aW1hbHMKKy8qICAqLworZW51bSBjbGFzcyBUd29MZWdnZWRBbmltYWxzIHsKKyAgICBEdWNrcyA9
IDQsCisgICAgSGVucyA9IDMsCisgICAgQ3Jvd3MgPSA1LAorICAgIEZsYW1pbmdvcyA9IDYsCit9
OyAvLyBlbnVtIGNsYXNzIFR3b0xlZ2dlZEFuaW1hbHMKK30gLy8gUnVudGltZQorCisKKworfSAv
LyBuYW1lc3BhY2UgVHlwZUJ1aWxkZXIKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNl
bmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorCisjZW5kaWYgLy8gIWRlZmluZWQoSW5zcGVjdG9y
VGVzdFR5cGVCdWlsZGVyc19oKQorIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxk
ZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuY3BwCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24KKy8vIGJ5IHRo
ZSBzY3JpcHQ6IEphdmFTY3JpcHRDb3JlL3JlcGxheS9zY3JpcHRzL0NvZGVHZW5lcmF0b3JJbnNw
ZWN0b3IucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkluc3BlY3RvclRlc3RU
eXBlQnVpbGRlcnMuaCIKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRlIDx3dGYv
dGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCituYW1lc3BhY2UgVHlw
ZUJ1aWxkZXIgeworCitzdGF0aWMgY29uc3QgY2hhciogY29uc3QgZW51bV9jb25zdGFudF92YWx1
ZXNbXSA9IHsKKyAgICAiUGlncyIsCisgICAgIkNvd3MiLAorICAgICJDYXRzIiwKKyAgICAiSGVu
cyIsCisgICAgIkR1Y2tzIiwKKyAgICAiQ3Jvd3MiLAorICAgICJGbGFtaW5nb3MiLAorfTsKKwor
U3RyaW5nIGdldFRlc3RFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSkgeworICAgIHJldHVybiBl
bnVtX2NvbnN0YW50X3ZhbHVlc1tjb2RlXTsKK30KKworCisKK30gLy8gbmFtZXNwYWNlIFR5cGVC
dWlsZGVyCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElO
U1BFQ1RPUikKKworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmNwcApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbi1yZXN1bHQgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1k
ZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uLXJlc3VsdApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kMjU1NTZkZDhk
MWU2ODlhYWZmMGM1NzhmMDMzNTdjMjVkOGExN2M5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVj
bGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbi1yZXN1bHQKQEAgLTAsMCArMSw4ODYgQEAKKyMjIyBC
ZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0QmFja2VuZENvbW1hbmRzLmpzCisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIHR5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDog
SmF2YVNjcmlwdENvcmUvcmVwbGF5L3NjcmlwdHMvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQor
CisvLyBUZXN0LgorSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIlRlc3QuYXR0ZW1w
dEN1cnNlIiwgW3sibmFtZSI6ICJjdXJzZSIsICJ0eXBlIjogIm9iamVjdCIsICJvcHRpb25hbCI6
IGZhbHNlfV0sIFsiY2Vuc29yZWRDdXJzZSJdKTsKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVz
dEJhY2tlbmRDb21tYW5kcy5qcworCisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdEJhY2tl
bmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tb2JqZWN0
LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogSmF2YVNjcmlwdENvcmUvcmVwbGF5L3Njcmlw
dHMvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQorCisjaWZuZGVmIEluc3BlY3RvclRlc3RCYWNr
ZW5kRGlzcGF0Y2hlcnNfaAorI2RlZmluZSBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJz
X2gKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRlICJJbnNwZWN0b3JUZXN0VHlw
ZUJ1aWxkZXJzLmgiCisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3R5cGVkZWYgU3RyaW5nIEVy
cm9yU3RyaW5nOworCitjbGFzcyBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJIYW5kbGVy
IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIHZvaWQgYXR0ZW1wdEN1cnNlKEVycm9yU3RyaW5nKiwg
Y29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYgaW5fY3Vyc2UsIEluc3Bl
Y3Rvcjo6VHlwZUJ1aWxkZXI6Ok9wdE91dHB1dDxTdHJpbmc+KiBvcHRfb3V0X2NlbnNvcmVkQ3Vy
c2UpID0gMDsKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIH5JbnNwZWN0b3JUZXN0QmFja2VuZERp
c3BhdGNoZXJIYW5kbGVyKCk7Cit9OworCitjbGFzcyBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3Bh
dGNoZXIgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JTdXBwbGVtZW50YWxCYWNr
ZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9y
VGVzdEJhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUoSW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlciosIEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2gobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgbWV0aG9k
LCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBtZXNzYWdlKSBvdmVycmlk
ZTsKK3ByaXZhdGU6CisgICAgdm9pZCBhdHRlbXB0Q3Vyc2UobG9uZyBjYWxsSWQsIGNvbnN0IElu
c3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsKK3ByaXZhdGU6CisgICAgSW5zcGVj
dG9yVGVzdEJhY2tlbmREaXNwYXRjaGVyKEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXIqLCBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7CisgICAgSW5z
cGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogbV9hZ2VudDsKK307CisKK30gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKworI2Vu
ZGlmIC8vICFkZWZpbmVkKEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnNfaCkKKyMjIyBF
bmQgRmlsZTogSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBG
aWxlOiBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSB0eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IEph
dmFTY3JpcHRDb3JlL3JlcGxheS9zY3JpcHRzL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0
Y2hlcnMuaCIKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRlIDxpbnNwZWN0b3Iv
SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLmg+CisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3Rv
clZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIElu
c3BlY3RvciB7CisKK0luc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6On5JbnNw
ZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCkgeyB9CisKK1Bhc3NSZWZQdHI8SW5z
cGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVyPiBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNo
ZXI6OmNyZWF0ZShJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIs
IEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQoreworICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmRE
aXNwYXRjaGVyLCBhZ2VudCkpOworfQorCitJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXI6
Okluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcihJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
ciogYmFja2VuZERpc3BhdGNoZXIsIEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXIqIGFnZW50KQorICAgIDogSW5zcGVjdG9yU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIo
YmFja2VuZERpc3BhdGNoZXIpCisgICAgLCBtX2FnZW50KGFnZW50KQoreworICAgIG1fYmFja2Vu
ZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbihBU0NJSUxpdGVyYWwoIlRl
c3QiKSwgdGhpcyk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVyOjpk
aXNwYXRjaChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFBhc3NSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBtZXNzYWdlKQoreworICAgIFJlZjxJbnNwZWN0b3JUZXN0QmFja2VuZERp
c3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOworCisgICAgaWYgKG1ldGhvZCA9PSAiYXR0ZW1wdEN1
cnNlIikKKyAgICAgICAgYXR0ZW1wdEN1cnNlKGNhbGxJZCwgKm1lc3NhZ2UuZ2V0KCkpOworICAg
IGVsc2UKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcigm
Y2FsbElkLCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsIFN0cmlu
ZygiJyIpICsgIlRlc3QiICsgJy4nICsgbWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOworfQor
Cit2b2lkIEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcjo6YXR0ZW1wdEN1cnNlKGxvbmcg
Y2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpCit7CisgICAgUmVmUHRyPElu
c3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsK
KyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSBtZXNzYWdlLmdl
dE9iamVjdChBU0NJSUxpdGVyYWwoInBhcmFtcyIpKTsKKyAgICBJbnNwZWN0b3JPYmplY3QqIHBh
cmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKKyAgICBJbnNwZWN0b3JB
cnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKKyAgICBSZWZQ
dHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IGluX2N1cnNlID0gSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXI6OmdldE9iamVjdChwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgi
Y3Vyc2UiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnNQdHIpOworICAgIGlmIChwcm90b2NvbEVy
cm9ycy0+bGVuZ3RoKCkpIHsKKyAgICAgICAgU3RyaW5nIGVycm9yTWVzc2FnZSA9IFN0cmluZzo6
Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQi
LCAiVGVzdC5hdHRlbXB0Q3Vyc2UiKTsKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVw
b3J0UHJvdG9jb2xFcnJvcigmY2FsbElkLCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6SW52
YWxpZFBhcmFtcywgZXJyb3JNZXNzYWdlLCBwcm90b2NvbEVycm9ycy5yZWxlYXNlKCkpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgRXJyb3JTdHJpbmcgZXJyb3I7CisgICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAg
ICBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8U3RyaW5nPiBvdXRfY2Vuc29yZWRD
dXJzZTsKKyAgICBtX2FnZW50LT5hdHRlbXB0Q3Vyc2UoJmVycm9yLCBpbl9jdXJzZSwgJm91dF9j
ZW5zb3JlZEN1cnNlKTsKKworICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCisgICAgICAgIGlmIChv
dXRfY2Vuc29yZWRDdXJzZS5pc0Fzc2lnbmVkKCkpCisgICAgICAgICAgICByZXN1bHQtPnNldFN0
cmluZyhBU0NJSUxpdGVyYWwoImNlbnNvcmVkQ3Vyc2UiKSwgb3V0X2NlbnNvcmVkQ3Vyc2UuZ2V0
VmFsdWUoKSk7CisKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElk
LCByZXN1bHQucmVsZWFzZSgpLCBlcnJvcik7Cit9CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rv
cgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKworIyMjIEVuZCBGaWxlOiBJbnNwZWN0
b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9y
VGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0
aW9uLW9iamVjdC10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IEphdmFTY3JpcHRDb3JlL3Jl
cGxheS9zY3JpcHRzL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKKworI2lmbmRlZiBJbnNwZWN0
b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVyc19oCisjZGVmaW5lIEluc3BlY3RvclRlc3RGcm9udGVu
ZERpc3BhdGNoZXJzX2gKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRlICJJbnNw
ZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmgiCisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckZy
b250ZW5kQ2hhbm5lbC5oPgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4K
KyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3Bl
Y3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKworI2VuZGlmIC8vICFkZWZpbmVk
KEluc3BlY3RvclRlc3RGcm9udGVuZERpc3BhdGNoZXJzX2gpCisjIyMgRW5kIEZpbGU6IEluc3Bl
Y3RvclRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IEluc3BlY3Rv
clRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xh
cmF0aW9uLW9iamVjdC10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IEphdmFTY3JpcHRDb3Jl
L3JlcGxheS9zY3JpcHRzL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkluc3BlY3RvclRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCisK
KyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgor
CituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNl
bmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorCisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RG
cm9udGVuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdFR5
cGVCdWlsZGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5
cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogSmF2YVNjcmlwdENvcmUvcmVwbGF5L3NjcmlwdHMv
Q29kZUdlbmVyYXRvckluc3BlY3Rvci5weQorCisjaWZuZGVmIEluc3BlY3RvclRlc3RUeXBlQnVp
bGRlcnNfaAorI2RlZmluZSBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzX2gKKworI2lmIEVOQUJM
RShJTlNQRUNUT1IpCisKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9ySlNUeXBlQnVpbGRl
cnMuaD4KKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVHlwZUJ1aWxkZXIuaD4KKyNpbmNs
dWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisKK25h
bWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworbmFtZXNwYWNlIFR5cGVCdWlsZGVyIHsKKworLy8g
Rm9yd2FyZCBkZWNsYXJhdGlvbnMuCisjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKK25hbWVzcGFj
ZSBEYXRhYmFzZSB7CitjbGFzcyBEdW1teU9iamVjdDsKK2NsYXNzIEVycm9yOworY2xhc3MgT2Jq
ZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0czsKK2NsYXNzIE9wdGlvbmFsUGFyYW1ldGVyQnVu
ZGxlOworY2xhc3MgUGFyYW1ldGVyQnVuZGxlOworfSAvLyBEYXRhYmFzZQorI2VuZGlmIC8vIEVO
QUJMRShTUUxfREFUQUJBU0UpCisKK25hbWVzcGFjZSBUZXN0IHsKK2NsYXNzIEhhcHB5TmFtZTsK
K2NsYXNzIFBhcmFtZXRlckJ1bmRsZTsKK30gLy8gVGVzdAorLy8gRW5kIG9mIGZvcndhcmQgZGVj
bGFyYXRpb25zLgorCisKKworCitTdHJpbmcgZ2V0VGVzdEVudW1Db25zdGFudFZhbHVlKGludCBj
b2RlKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gU3RyaW5nIGdldFRlc3RFbnVtQ29uc3RhbnRW
YWx1ZShUIGVudW1WYWx1ZSkKK3sKKyAgICByZXR1cm4gZ2V0VGVzdEVudW1Db25zdGFudFZhbHVl
KHN0YXRpY19jYXN0PGludD4oZW51bVZhbHVlKSk7Cit9CisKKyNpZiBFTkFCTEUoU1FMX0RBVEFC
QVNFKQorbmFtZXNwYWNlIERhdGFiYXNlIHsKKy8qIERhdGFiYXNlIGVycm9yLiAqLworY2xhc3Mg
RXJyb3IgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3RCYXNlIHsKK3B1YmxpYzoK
KyAgICBlbnVtIHsKKyAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAorICAgICAgICBNZXNzYWdlU2V0
ID0gMSA8PCAwLAorICAgICAgICBDb2RlU2V0ID0gMSA8PCAxLAorICAgICAgICBBbGxGaWVsZHNT
ZXQgPSAoTWVzc2FnZVNldCB8IENvZGVTZXQpCisgICAgfTsKKworICAgIHRlbXBsYXRlPGludCBT
VEFURT4KKyAgICBjbGFzcyBCdWlsZGVyIHsKKyAgICBwcml2YXRlOgorICAgICAgICBSZWZQdHI8
SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OworCisgICAgICAgIHRlbXBsYXRl
PGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RF
UD4qPih0aGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjwvKkVy
cm9yKi9JbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gcHRyKQorICAgICAgICB7CisgICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVk
X2luX25vbl9pbml0X3N0YXRlKTsKKyAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOworICAgICAg
ICB9CisgICAgICAgIGZyaWVuZCBjbGFzcyBFcnJvcjsKKyAgICBwdWJsaWM6CisKKyAgICAgICAg
QnVpbGRlcjxTVEFURSB8IE1lc3NhZ2VTZXQ+JiBzZXRNZXNzYWdlKGNvbnN0IFN0cmluZyYgdmFs
dWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBNZXNz
YWdlU2V0KSwgcHJvcGVydHlfbWVzc2FnZV9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jl
c3VsdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgibWVzc2FnZSIpLCB2YWx1ZSk7CisgICAgICAg
ICAgICByZXR1cm4gY2FzdFN0YXRlPE1lc3NhZ2VTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAg
ICBCdWlsZGVyPFNUQVRFIHwgQ29kZVNldD4mIHNldENvZGUoaW50IHZhbHVlKQorICAgICAgICB7
CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQ29kZVNldCksIHByb3BlcnR5
X2NvZGVfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcihBU0NJ
SUxpdGVyYWwoImNvZGUiKSwgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxD
b2RlU2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgb3BlcmF0b3IgUmVmUHRyPEVycm9yPiYg
KCkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmll
bGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KHNpemVvZihFcnJvcikgPT0gc2l6ZW9mKEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0KSwgY2Fu
bm90X2Nhc3QpOworICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxF
cnJvcj4qPigmbV9yZXN1bHQpOworICAgICAgICB9CisKKyAgICAgICAgUGFzc1JlZlB0cjxFcnJv
cj4gcmVsZWFzZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBSZWZQdHI8RXJyb3I+
KCp0aGlzKS5yZWxlYXNlKCk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgLyoKKyAgICAgKiBT
eW50aGV0aWMgY29uc3RydWN0b3I6CisgICAgICogUmVmUHRyPEVycm9yPiByZXN1bHQgPSBFcnJv
cjo6Y3JlYXRlKCkKKyAgICAgKiAgICAgLnNldE1lc3NhZ2UoLi4uKQorICAgICAqICAgICAuc2V0
Q29kZSguLi4pOworICAgICAqLworICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVh
dGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEluc3BlY3Rv
cjo6SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7CisgICAgfQorICAgIHR5cGVkZWYgSW5zcGVj
dG9yOjpUeXBlQnVpbGRlcjo6U3RydWN0SXRlbVRyYWl0cyBJdGVtVHJhaXRzOworfTsKKworY2xh
c3MgT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGUgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JP
YmplY3RCYXNlIHsKK3B1YmxpYzoKKyAgICBlbnVtIHsKKyAgICAgICAgTm9GaWVsZHNTZXQgPSAw
LAorICAgICAgICBBbGxGaWVsZHNTZXQgPSAwCisgICAgfTsKKworICAgIHRlbXBsYXRlPGludCBT
VEFURT4KKyAgICBjbGFzcyBCdWlsZGVyIHsKKyAgICBwcml2YXRlOgorICAgICAgICBSZWZQdHI8
SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OworCisgICAgICAgIHRlbXBsYXRl
PGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RF
UD4qPih0aGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjwvKk9w
dGlvbmFsUGFyYW1ldGVyQnVuZGxlKi9JbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gcHRyKQor
ICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1Nl
dCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKKyAgICAgICAgICAgIG1fcmVz
dWx0ID0gcHRyOworICAgICAgICB9CisgICAgICAgIGZyaWVuZCBjbGFzcyBPcHRpb25hbFBhcmFt
ZXRlckJ1bmRsZTsKKyAgICBwdWJsaWM6CisKKyAgICAgICAgb3BlcmF0b3IgUmVmUHRyPE9wdGlv
bmFsUGFyYW1ldGVyQnVuZGxlPiYgKCkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKKyAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihPcHRpb25hbFBhcmFtZXRlckJ1bmRsZSkgPT0g
c2l6ZW9mKEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0KSwgY2Fubm90X2Nhc3QpOworICAgICAg
ICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxPcHRpb25hbFBhcmFtZXRlckJ1
bmRsZT4qPigmbV9yZXN1bHQpOworICAgICAgICB9CisKKyAgICAgICAgUGFzc1JlZlB0cjxPcHRp
b25hbFBhcmFtZXRlckJ1bmRsZT4gcmVsZWFzZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBSZWZQdHI8T3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU+KCp0aGlzKS5yZWxlYXNlKCk7Cisg
ICAgICAgIH0KKyAgICB9OworCisgICAgLyoKKyAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6
CisgICAgICogUmVmUHRyPE9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlPiByZXN1bHQgPSBPcHRpb25h
bFBhcmFtZXRlckJ1bmRsZTo6Y3JlYXRlKCk7CisgICAgICovCisgICAgc3RhdGljIEJ1aWxkZXI8
Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0Zp
ZWxkc1NldD4oSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpKTsKKyAgICB9Cisg
ICAgdHlwZWRlZiBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpTdHJ1Y3RJdGVtVHJhaXRzIEl0ZW1U
cmFpdHM7CisKKyAgICB2b2lkIHNldENvbHVtbk5hbWVzKFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpU
eXBlQnVpbGRlcjo6QXJyYXk8U3RyaW5nPj4gdmFsdWUpCisgICAgeworICAgICAgICB0aGlzLT5z
ZXRWYWx1ZShBU0NJSUxpdGVyYWwoImNvbHVtbk5hbWVzIiksIHZhbHVlKTsKKyAgICB9CisKKyAg
ICB2b2lkIHNldE5vdGVzKGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgeworICAgICAgICB0aGlz
LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJub3RlcyIpLCB2YWx1ZSk7CisgICAgfQorCisgICAg
dm9pZCBzZXRUaW1lc3RhbXAoZG91YmxlIHZhbHVlKQorICAgIHsKKyAgICAgICAgdGhpcy0+c2V0
TnVtYmVyKEFTQ0lJTGl0ZXJhbCgidGltZXN0YW1wIiksIHZhbHVlKTsKKyAgICB9CisKKyAgICB2
b2lkIHNldFZhbHVlcyhQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiB2YWx1
ZSkKKyAgICB7CisgICAgICAgIHRoaXMtPnNldE9iamVjdChBU0NJSUxpdGVyYWwoInZhbHVlcyIp
LCB2YWx1ZSk7CisgICAgfQorCisgICAgdm9pZCBzZXRQYXlsb2FkKFBhc3NSZWZQdHI8SW5zcGVj
dG9yOjpJbnNwZWN0b3JWYWx1ZT4gdmFsdWUpCisgICAgeworICAgICAgICB0aGlzLT5zZXRWYWx1
ZShBU0NJSUxpdGVyYWwoInBheWxvYWQiKSwgdmFsdWUpOworICAgIH0KKworICAgIHZvaWQgc2V0
RXJyb3IoUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpEYXRhYmFzZTo6RXJyb3I+
IHZhbHVlKQorICAgIHsKKyAgICAgICAgdGhpcy0+c2V0VmFsdWUoQVNDSUlMaXRlcmFsKCJlcnJv
ciIpLCB2YWx1ZSk7CisgICAgfQorfTsKKworY2xhc3MgUGFyYW1ldGVyQnVuZGxlIDogcHVibGlj
IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0QmFzZSB7CitwdWJsaWM6CisgICAgZW51bSB7Cisg
ICAgICAgIE5vRmllbGRzU2V0ID0gMCwKKyAgICAgICAgQ29sdW1uTmFtZXNTZXQgPSAxIDw8IDAs
CisgICAgICAgIE5vdGVzU2V0ID0gMSA8PCAxLAorICAgICAgICBUaW1lc3RhbXBTZXQgPSAxIDw8
IDIsCisgICAgICAgIFZhbHVlc1NldCA9IDEgPDwgMywKKyAgICAgICAgUGF5bG9hZFNldCA9IDEg
PDwgNCwKKyAgICAgICAgRXJyb3JTZXQgPSAxIDw8IDUsCisgICAgICAgIEFsbEZpZWxkc1NldCA9
IChDb2x1bW5OYW1lc1NldCB8IE5vdGVzU2V0IHwgVGltZXN0YW1wU2V0IHwgVmFsdWVzU2V0IHwg
UGF5bG9hZFNldCB8IEVycm9yU2V0KQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+
CisgICAgY2xhc3MgQnVpbGRlciB7CisgICAgcHJpdmF0ZToKKyAgICAgICAgUmVmUHRyPEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKKworICAgICAgICB0ZW1wbGF0ZTxpbnQg
U1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4o
dGhpcyk7CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8LypQYXJhbWV0
ZXJCdW5kbGUqL0luc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBwdHIpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2Ny
ZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOworICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7Cisg
ICAgICAgIH0KKyAgICAgICAgZnJpZW5kIGNsYXNzIFBhcmFtZXRlckJ1bmRsZTsKKyAgICBwdWJs
aWM6CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IENvbHVtbk5hbWVzU2V0PiYgc2V0Q29sdW1u
TmFtZXMoUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheTxTdHJpbmc+PiB2
YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIENv
bHVtbk5hbWVzU2V0KSwgcHJvcGVydHlfY29sdW1uTmFtZXNfYWxyZWFkeV9zZXQpOworICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldFZhbHVlKEFTQ0lJTGl0ZXJhbCgiY29sdW1uTmFtZXMiKSwgdmFs
dWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxDb2x1bW5OYW1lc1NldD4oKTsKKyAg
ICAgICAgfQorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBOb3Rlc1NldD4mIHNldE5vdGVzKGNv
bnN0IFN0cmluZyYgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KCEoU1RBVEUgJiBOb3Rlc1NldCksIHByb3BlcnR5X25vdGVzX2FscmVhZHlfc2V0KTsKKyAgICAg
ICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJub3RlcyIpLCB2YWx1ZSk7
CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE5vdGVzU2V0PigpOworICAgICAgICB9CisK
KyAgICAgICAgQnVpbGRlcjxTVEFURSB8IFRpbWVzdGFtcFNldD4mIHNldFRpbWVzdGFtcChkb3Vi
bGUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUg
JiBUaW1lc3RhbXBTZXQpLCBwcm9wZXJ0eV90aW1lc3RhbXBfYWxyZWFkeV9zZXQpOworICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldE51bWJlcihBU0NJSUxpdGVyYWwoInRpbWVzdGFtcCIpLCB2YWx1
ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFRpbWVzdGFtcFNldD4oKTsKKyAgICAg
ICAgfQorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBWYWx1ZXNTZXQ+JiBzZXRWYWx1ZXMoUGFz
c1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gdmFsdWUpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBWYWx1ZXNTZXQpLCBwcm9wZXJ0eV92
YWx1ZXNfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldE9iamVjdChBU0NJ
SUxpdGVyYWwoInZhbHVlcyIpLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRl
PFZhbHVlc1NldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBQYXls
b2FkU2V0PiYgc2V0UGF5bG9hZChQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+
IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYg
UGF5bG9hZFNldCksIHByb3BlcnR5X3BheWxvYWRfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAg
bV9yZXN1bHQtPnNldFZhbHVlKEFTQ0lJTGl0ZXJhbCgicGF5bG9hZCIpLCB2YWx1ZSk7CisgICAg
ICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFBheWxvYWRTZXQ+KCk7CisgICAgICAgIH0KKworICAg
ICAgICBCdWlsZGVyPFNUQVRFIHwgRXJyb3JTZXQ+JiBzZXRFcnJvcihQYXNzUmVmUHRyPEluc3Bl
Y3Rvcjo6VHlwZUJ1aWxkZXI6OkRhdGFiYXNlOjpFcnJvcj4gdmFsdWUpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBFcnJvclNldCksIHByb3BlcnR5X2Vy
cm9yX2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRWYWx1ZShBU0NJSUxp
dGVyYWwoImVycm9yIiksIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8RXJy
b3JTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBvcGVyYXRvciBSZWZQdHI8UGFyYW1ldGVy
QnVuZGxlPiYgKCkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUg
PT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKKyAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKHNpemVvZihQYXJhbWV0ZXJCdW5kbGUpID09IHNpemVvZihJbnNwZWN0b3I6Oklu
c3BlY3Rvck9iamVjdCksIGNhbm5vdF9jYXN0KTsKKyAgICAgICAgICAgIHJldHVybiAqcmVpbnRl
cnByZXRfY2FzdDxSZWZQdHI8UGFyYW1ldGVyQnVuZGxlPio+KCZtX3Jlc3VsdCk7CisgICAgICAg
IH0KKworICAgICAgICBQYXNzUmVmUHRyPFBhcmFtZXRlckJ1bmRsZT4gcmVsZWFzZSgpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBSZWZQdHI8UGFyYW1ldGVyQnVuZGxlPigqdGhpcyku
cmVsZWFzZSgpOworICAgICAgICB9CisgICAgfTsKKworICAgIC8qCisgICAgICogU3ludGhldGlj
IGNvbnN0cnVjdG9yOgorICAgICAqIFJlZlB0cjxQYXJhbWV0ZXJCdW5kbGU+IHJlc3VsdCA9IFBh
cmFtZXRlckJ1bmRsZTo6Y3JlYXRlKCkKKyAgICAgKiAgICAgLnNldENvbHVtbk5hbWVzKC4uLikK
KyAgICAgKiAgICAgLnNldE5vdGVzKC4uLikKKyAgICAgKiAgICAgLnNldFRpbWVzdGFtcCguLi4p
CisgICAgICogICAgIC5zZXRWYWx1ZXMoLi4uKQorICAgICAqICAgICAuc2V0UGF5bG9hZCguLi4p
CisgICAgICogICAgIC5zZXRFcnJvciguLi4pOworICAgICAqLworICAgIHN0YXRpYyBCdWlsZGVy
PE5vRmllbGRzU2V0PiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9G
aWVsZHNTZXQ+KEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7CisgICAgfQor
ICAgIHR5cGVkZWYgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6U3RydWN0SXRlbVRyYWl0cyBJdGVt
VHJhaXRzOworfTsKKworLyogQ29uZmxpY3RlZCBuYW1lcyBtYXkgY2F1c2UgZ2VuZXJhdGVkIGdl
dHRlcnMvc2V0dGVycyB0byBjbGFzaCB3aXRoIGJ1aWx0LWluIEluc3BlY3Rvck9iamVjdCBtZXRo
b2RzLiAqLworY2xhc3MgT2JqZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0cyA6IHB1YmxpYyBJ
bnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdEJhc2UgeworcHVibGljOgorICAgIGVudW0geworICAg
ICAgICBOb0ZpZWxkc1NldCA9IDAsCisgICAgICAgIEludGVnZXJTZXQgPSAxIDw8IDAsCisgICAg
ICAgIEFycmF5U2V0ID0gMSA8PCAxLAorICAgICAgICBTdHJpbmdTZXQgPSAxIDw8IDIsCisgICAg
ICAgIFZhbHVlU2V0ID0gMSA8PCAzLAorICAgICAgICBPYmplY3RTZXQgPSAxIDw8IDQsCisgICAg
ICAgIEFsbEZpZWxkc1NldCA9IChJbnRlZ2VyU2V0IHwgQXJyYXlTZXQgfCBTdHJpbmdTZXQgfCBW
YWx1ZVNldCB8IE9iamVjdFNldCkKKyAgICB9OworCisgICAgdGVtcGxhdGU8aW50IFNUQVRFPgor
ICAgIGNsYXNzIEJ1aWxkZXIgeworICAgIHByaXZhdGU6CisgICAgICAgIFJlZlB0cjxJbnNwZWN0
b3I6Okluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CisKKyAgICAgICAgdGVtcGxhdGU8aW50IFNU
RVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRo
aXMpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPC8qT2JqZWN0V2l0
aFByb3BlcnR5TmFtZUNvbmZsaWN0cyovSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IHB0cikK
KyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNT
ZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CisgICAgICAgICAgICBtX3Jl
c3VsdCA9IHB0cjsKKyAgICAgICAgfQorICAgICAgICBmcmllbmQgY2xhc3MgT2JqZWN0V2l0aFBy
b3BlcnR5TmFtZUNvbmZsaWN0czsKKyAgICBwdWJsaWM6CisKKyAgICAgICAgQnVpbGRlcjxTVEFU
RSB8IEludGVnZXJTZXQ+JiBzZXRJbnRlZ2VyKGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgICAg
IHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBJbnRlZ2VyU2V0KSwgcHJv
cGVydHlfaW50ZWdlcl9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3Ry
aW5nKEFTQ0lJTGl0ZXJhbCgiaW50ZWdlciIpLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4g
Y2FzdFN0YXRlPEludGVnZXJTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyPFNU
QVRFIHwgQXJyYXlTZXQ+JiBzZXRBcnJheShjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgICAgICB7
CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQXJyYXlTZXQpLCBwcm9wZXJ0
eV9hcnJheV9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKEFT
Q0lJTGl0ZXJhbCgiYXJyYXkiKSwgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0
ZTxBcnJheVNldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBTdHJp
bmdTZXQ+JiBzZXRTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICAgICAgeworICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFN0cmluZ1NldCksIHByb3BlcnR5X3N0cmlu
Z19hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKEFTQ0lJTGl0
ZXJhbCgic3RyaW5nIiksIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8U3Ry
aW5nU2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IFZhbHVlU2V0
PiYgc2V0VmFsdWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoIShTVEFURSAmIFZhbHVlU2V0KSwgcHJvcGVydHlfdmFsdWVfYWxyZWFk
eV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInZh
bHVlIiksIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VmFsdWVTZXQ+KCk7
CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgT2JqZWN0U2V0PiYgc2V0T2Jq
ZWN0KGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKCEoU1RBVEUgJiBPYmplY3RTZXQpLCBwcm9wZXJ0eV9vYmplY3RfYWxyZWFkeV9zZXQp
OworICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoIm9iamVjdCIp
LCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE9iamVjdFNldD4oKTsKKyAg
ICAgICAgfQorCisgICAgICAgIG9wZXJhdG9yIFJlZlB0cjxPYmplY3RXaXRoUHJvcGVydHlOYW1l
Q29uZmxpY3RzPiYgKCkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RB
VEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKKyAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKHNpemVvZihPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzKSA9PSBz
aXplb2YoSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QpLCBjYW5ub3RfY2FzdCk7CisgICAgICAg
ICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPE9iamVjdFdpdGhQcm9wZXJ0eU5h
bWVDb25mbGljdHM+Kj4oJm1fcmVzdWx0KTsKKyAgICAgICAgfQorCisgICAgICAgIFBhc3NSZWZQ
dHI8T2JqZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0cz4gcmVsZWFzZSgpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBSZWZQdHI8T2JqZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0
cz4oKnRoaXMpLnJlbGVhc2UoKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICAvKgorICAgICAq
IFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKKyAgICAgKiBSZWZQdHI8T2JqZWN0V2l0aFByb3BlcnR5
TmFtZUNvbmZsaWN0cz4gcmVzdWx0ID0gT2JqZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0czo6
Y3JlYXRlKCkKKyAgICAgKiAgICAgLnNldEludGVnZXIoLi4uKQorICAgICAqICAgICAuc2V0QXJy
YXkoLi4uKQorICAgICAqICAgICAuc2V0U3RyaW5nKC4uLikKKyAgICAgKiAgICAgLnNldFZhbHVl
KC4uLikKKyAgICAgKiAgICAgLnNldE9iamVjdCguLi4pOworICAgICAqLworICAgIHN0YXRpYyBC
dWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEJ1aWxk
ZXI8Tm9GaWVsZHNTZXQ+KEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7Cisg
ICAgfQorICAgIHR5cGVkZWYgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6U3RydWN0SXRlbVRyYWl0
cyBJdGVtVHJhaXRzOworfTsKKworfSAvLyBEYXRhYmFzZQorI2VuZGlmIC8vIEVOQUJMRShTUUxf
REFUQUJBU0UpCisKK25hbWVzcGFjZSBUZXN0IHsKK2NsYXNzIFBhcmFtZXRlckJ1bmRsZSA6IHB1
YmxpYyBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdEJhc2UgeworcHVibGljOgorICAgIGVudW0g
eworICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCisgICAgICAgIENvbHVtbk5hbWVzU2V0ID0gMSA8
PCAwLAorICAgICAgICBOb3Rlc1NldCA9IDEgPDwgMSwKKyAgICAgICAgVGltZXN0YW1wU2V0ID0g
MSA8PCAyLAorICAgICAgICBWYWx1ZXNTZXQgPSAxIDw8IDMsCisgICAgICAgIFBheWxvYWRTZXQg
PSAxIDw8IDQsCisgICAgICAgIEVycm9yU2V0ID0gMSA8PCA1LAorICAgICAgICBBbGxGaWVsZHNT
ZXQgPSAoQ29sdW1uTmFtZXNTZXQgfCBOb3Rlc1NldCB8IFRpbWVzdGFtcFNldCB8IFZhbHVlc1Nl
dCB8IFBheWxvYWRTZXQgfCBFcnJvclNldCkKKyAgICB9OworCisgICAgdGVtcGxhdGU8aW50IFNU
QVRFPgorICAgIGNsYXNzIEJ1aWxkZXIgeworICAgIHByaXZhdGU6CisgICAgICAgIFJlZlB0cjxJ
bnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CisKKyAgICAgICAgdGVtcGxhdGU8
aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQ
Pio+KHRoaXMpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPC8qUGFy
YW1ldGVyQnVuZGxlKi9JbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gcHRyKQorICAgICAgICB7
CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRl
cl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKKyAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRy
OworICAgICAgICB9CisgICAgICAgIGZyaWVuZCBjbGFzcyBQYXJhbWV0ZXJCdW5kbGU7CisgICAg
cHVibGljOgorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDb2x1bW5OYW1lc1NldD4mIHNldENv
bHVtbk5hbWVzKFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk8U3RyaW5n
Pj4gdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUg
JiBDb2x1bW5OYW1lc1NldCksIHByb3BlcnR5X2NvbHVtbk5hbWVzX2FscmVhZHlfc2V0KTsKKyAg
ICAgICAgICAgIG1fcmVzdWx0LT5zZXRWYWx1ZShBU0NJSUxpdGVyYWwoImNvbHVtbk5hbWVzIiks
IHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q29sdW1uTmFtZXNTZXQ+KCk7
CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTm90ZXNTZXQ+JiBzZXROb3Rl
cyhjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FT
U0VSVCghKFNUQVRFICYgTm90ZXNTZXQpLCBwcm9wZXJ0eV9ub3Rlc19hbHJlYWR5X3NldCk7Cisg
ICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgibm90ZXMiKSwgdmFs
dWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxOb3Rlc1NldD4oKTsKKyAgICAgICAg
fQorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBUaW1lc3RhbXBTZXQ+JiBzZXRUaW1lc3RhbXAo
ZG91YmxlIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNU
QVRFICYgVGltZXN0YW1wU2V0KSwgcHJvcGVydHlfdGltZXN0YW1wX2FscmVhZHlfc2V0KTsKKyAg
ICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoQVNDSUlMaXRlcmFsKCJ0aW1lc3RhbXAiKSwg
dmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxUaW1lc3RhbXBTZXQ+KCk7Cisg
ICAgICAgIH0KKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVmFsdWVzU2V0PiYgc2V0VmFsdWVz
KFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQorICAgICAgICB7
CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVmFsdWVzU2V0KSwgcHJvcGVy
dHlfdmFsdWVzX2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRPYmplY3Qo
QVNDSUlMaXRlcmFsKCJ2YWx1ZXMiKSwgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RT
dGF0ZTxWYWx1ZXNTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwg
UGF5bG9hZFNldD4mIHNldFBheWxvYWQoUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvclZh
bHVlPiB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFU
RSAmIFBheWxvYWRTZXQpLCBwcm9wZXJ0eV9wYXlsb2FkX2FscmVhZHlfc2V0KTsKKyAgICAgICAg
ICAgIG1fcmVzdWx0LT5zZXRWYWx1ZShBU0NJSUxpdGVyYWwoInBheWxvYWQiKSwgdmFsdWUpOwor
ICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxQYXlsb2FkU2V0PigpOworICAgICAgICB9CisK
KyAgICAgICAgQnVpbGRlcjxTVEFURSB8IEVycm9yU2V0PiYgc2V0RXJyb3IoUGFzc1JlZlB0cjxJ
bnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpEYXRhYmFzZTo6RXJyb3I+IHZhbHVlKQorICAgICAgICB7
CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgRXJyb3JTZXQpLCBwcm9wZXJ0
eV9lcnJvcl9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0VmFsdWUoQVND
SUlMaXRlcmFsKCJlcnJvciIpLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRl
PEVycm9yU2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgb3BlcmF0b3IgUmVmUHRyPFBhcmFt
ZXRlckJ1bmRsZT4mICgpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNU
QVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CisgICAgICAgICAgICBD
T01QSUxFX0FTU0VSVChzaXplb2YoUGFyYW1ldGVyQnVuZGxlKSA9PSBzaXplb2YoSW5zcGVjdG9y
OjpJbnNwZWN0b3JPYmplY3QpLCBjYW5ub3RfY2FzdCk7CisgICAgICAgICAgICByZXR1cm4gKnJl
aW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPFBhcmFtZXRlckJ1bmRsZT4qPigmbV9yZXN1bHQpOworICAg
ICAgICB9CisKKyAgICAgICAgUGFzc1JlZlB0cjxQYXJhbWV0ZXJCdW5kbGU+IHJlbGVhc2UoKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gUmVmUHRyPFBhcmFtZXRlckJ1bmRsZT4oKnRo
aXMpLnJlbGVhc2UoKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICAvKgorICAgICAqIFN5bnRo
ZXRpYyBjb25zdHJ1Y3RvcjoKKyAgICAgKiBSZWZQdHI8UGFyYW1ldGVyQnVuZGxlPiByZXN1bHQg
PSBQYXJhbWV0ZXJCdW5kbGU6OmNyZWF0ZSgpCisgICAgICogICAgIC5zZXRDb2x1bW5OYW1lcygu
Li4pCisgICAgICogICAgIC5zZXROb3RlcyguLi4pCisgICAgICogICAgIC5zZXRUaW1lc3RhbXAo
Li4uKQorICAgICAqICAgICAuc2V0VmFsdWVzKC4uLikKKyAgICAgKiAgICAgLnNldFBheWxvYWQo
Li4uKQorICAgICAqICAgICAuc2V0RXJyb3IoLi4uKTsKKyAgICAgKi8KKyAgICBzdGF0aWMgQnVp
bGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBCdWlsZGVy
PE5vRmllbGRzU2V0PihJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkpOworICAg
IH0KKyAgICB0eXBlZGVmIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlN0cnVjdEl0ZW1UcmFpdHMg
SXRlbVRyYWl0czsKK307CisKK30gLy8gVGVzdAorCisKKworfSAvLyBuYW1lc3BhY2UgVHlwZUJ1
aWxkZXIKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5T
UEVDVE9SKQorCisjZW5kaWYgLy8gIWRlZmluZWQoSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVyc19o
KQorIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmgKKworIyMjIEJlZ2lu
IEZpbGU6IEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5
cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogSmF2YVNj
cmlwdENvcmUvcmVwbGF5L3NjcmlwdHMvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQorCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5oIgor
CisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
KworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK25hbWVzcGFjZSBUeXBlQnVpbGRlciB7CisKK3N0
YXRpYyBjb25zdCBjaGFyKiBjb25zdCBlbnVtX2NvbnN0YW50X3ZhbHVlc1tdID0geworfTsKKwor
U3RyaW5nIGdldFRlc3RFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSkgeworICAgIHJldHVybiBl
bnVtX2NvbnN0YW50X3ZhbHVlc1tjb2RlXTsKK30KKworCisKK30gLy8gbmFtZXNwYWNlIFR5cGVC
dWlsZGVyCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElO
U1BFQ1RPUikKKworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmNwcApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2V4cGVjdGVkL3R5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbi1yZXN1bHQgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1y
ZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uLXJlc3VsdApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zZTBjNDA5MjJi
OWNkZGVlMzIyZDk5OTM3ZTdhMmM2NDA0YTFjMzYyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtcmVx
dWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbi1yZXN1bHQKQEAgLTAsMCArMSw3MjAgQEAKKyMjIyBC
ZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0QmFja2VuZENvbW1hbmRzLmpzCisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIHR5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDog
SmF2YVNjcmlwdENvcmUvcmVwbGF5L3NjcmlwdHMvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQor
CisvLyBUZXN0LgorSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckVudW0oIlRlc3QuVW5jYXN0ZWRB
bmltYWxzIiwge1BpZ3M6ICJQaWdzIiwgQ293czogIkNvd3MiLCBDYXRzOiAiQ2F0cyIsIEhlbnM6
ICJIZW5zIn0pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckVudW0oIlRlc3QuQ2FzdGVkQW5p
bWFscyIsIHtEdWNrczogIkR1Y2tzIiwgSGVuczogIkhlbnMiLCBDcm93czogIkNyb3dzIiwgRmxh
bWluZ29zOiAiRmxhbWluZ29zIn0pOworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0QmFja2Vu
ZENvbW1hbmRzLmpzCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3Bh
dGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5q
c29uCisvLyBieSB0aGUgc2NyaXB0OiBKYXZhU2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0cy9Db2Rl
R2VuZXJhdG9ySW5zcGVjdG9yLnB5CisKKyNpZm5kZWYgSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNw
YXRjaGVyc19oCisjZGVmaW5lIEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnNfaAorCisj
aWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUgIkluc3BlY3RvclRlc3RUeXBlQnVpbGRl
cnMuaCIKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4K
KyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJp
bmc7CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BF
Q1RPUikKKworI2VuZGlmIC8vICFkZWZpbmVkKEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hl
cnNfaCkKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisK
KyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KKy8vIGJ5IHRo
ZSBzY3JpcHQ6IEphdmFTY3JpcHRDb3JlL3JlcGxheS9zY3JpcHRzL0NvZGVHZW5lcmF0b3JJbnNw
ZWN0b3IucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkluc3BlY3RvclRlc3RC
YWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRl
IDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLmg+CisjaW5jbHVkZSA8aW5zcGVj
dG9yL0luc3BlY3RvclZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKwor
bmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKwor
I2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVz
dEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RG
cm9udGVuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1yZXF1aXJpbmctcnVu
dGltZS1jYXN0cy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBKYXZhU2NyaXB0Q29yZS9yZXBsYXkv
c2NyaXB0cy9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5CisKKyNpZm5kZWYgSW5zcGVjdG9yVGVz
dEZyb250ZW5kRGlzcGF0Y2hlcnNfaAorI2RlZmluZSBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNw
YXRjaGVyc19oCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSAiSW5zcGVjdG9y
VGVzdFR5cGVCdWlsZGVycy5oIgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwuaD4KKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW5j
bHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
KworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
KworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyNlbmRpZiAvLyAhZGVmaW5lZChJbnNw
ZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVyc19oKQorIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JU
ZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0
RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1yZXF1aXJpbmct
cnVudGltZS1jYXN0cy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBKYXZhU2NyaXB0Q29yZS9yZXBs
YXkvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5CisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgorCisjaWYg
RU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFt
ZXNwYWNlIEluc3BlY3RvciB7CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYg
Ly8gRU5BQkxFKElOU1BFQ1RPUikKKworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0RnJvbnRl
bmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RUeXBlQnVp
bGRlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpz
b24KKy8vIGJ5IHRoZSBzY3JpcHQ6IEphdmFTY3JpcHRDb3JlL3JlcGxheS9zY3JpcHRzL0NvZGVH
ZW5lcmF0b3JJbnNwZWN0b3IucHkKKworI2lmbmRlZiBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJz
X2gKKyNkZWZpbmUgSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVyc19oCisKKyNpZiBFTkFCTEUoSU5T
UEVDVE9SKQorCisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckpTVHlwZUJ1aWxkZXJzLmg+
CisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclR5cGVCdWlsZGVyLmg+CisjaW5jbHVkZSA8
d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorCituYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKKworCisKK25hbWVzcGFjZSBUeXBlQnVpbGRlciB7CisKKy8vIEZvcndh
cmQgZGVjbGFyYXRpb25zLgorbmFtZXNwYWNlIFRlc3QgeworY2xhc3MgUmVjdXJzaXZlT2JqZWN0
MTsKK2NsYXNzIFJlY3Vyc2l2ZU9iamVjdDI7CitjbGFzcyBUeXBlTmVlZGluZ0Nhc3Q7CitlbnVt
IGNsYXNzIENhc3RlZEFuaW1hbHM7CitlbnVtIGNsYXNzIFVuY2FzdGVkQW5pbWFsczsKK30gLy8g
VGVzdAorLy8gRW5kIG9mIGZvcndhcmQgZGVjbGFyYXRpb25zLgorCisKKy8vIFR5cGVkZWZzLgor
bmFtZXNwYWNlIFRlc3QgewordHlwZWRlZiBpbnQgQ2FzdGVkT2JqZWN0SWQ7CisKK3R5cGVkZWYg
aW50IFVuY2FzdGVkT2JqZWN0SWQ7Cit9IC8vIFRlc3QKKy8vIEVuZCBvZiB0eXBlZGVmcy4KKwor
U3RyaW5nIGdldFRlc3RFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSk7CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+IFN0cmluZyBnZXRUZXN0RW51bUNvbnN0YW50VmFsdWUoVCBlbnVtVmFsdWUpCit7
CisgICAgcmV0dXJuIGdldFRlc3RFbnVtQ29uc3RhbnRWYWx1ZShzdGF0aWNfY2FzdDxpbnQ+KGVu
dW1WYWx1ZSkpOworfQorCituYW1lc3BhY2UgVGVzdCB7CisvKiBBIGR1bW15IHR5cGUgdGhhdCBy
ZXF1aXJlcyBydW50aW1lIGNhc3RzLCBhbmQgZm9yY2VzIG5vbi1wcmltaXRpdmUgcmVmZXJlbmNl
ZCB0eXBlcyB0byBhbHNvIGVtaXQgcnVudGltZSBjYXN0IGhlbHBlcnMuICovCitjbGFzcyBUeXBl
TmVlZGluZ0Nhc3QgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3RCYXNlIHsKK3B1
YmxpYzoKKyAgICBlbnVtIHsKKyAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAorICAgICAgICBTdHJp
bmdTZXQgPSAxIDw8IDAsCisgICAgICAgIE51bWJlclNldCA9IDEgPDwgMSwKKyAgICAgICAgQW5p
bWFsc1NldCA9IDEgPDwgMiwKKyAgICAgICAgSWRTZXQgPSAxIDw8IDMsCisgICAgICAgIFRyZWVT
ZXQgPSAxIDw8IDQsCisgICAgICAgIEFsbEZpZWxkc1NldCA9IChTdHJpbmdTZXQgfCBOdW1iZXJT
ZXQgfCBBbmltYWxzU2V0IHwgSWRTZXQgfCBUcmVlU2V0KQorICAgIH07CisKKyAgICB0ZW1wbGF0
ZTxpbnQgU1RBVEU+CisgICAgY2xhc3MgQnVpbGRlciB7CisgICAgcHJpdmF0ZToKKyAgICAgICAg
UmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKKworICAgICAgICB0
ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFU
RSB8IFNURVA+Kj4odGhpcyk7CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyKFBhc3NSZWZQ
dHI8LypUeXBlTmVlZGluZ0Nhc3QqL0luc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBwdHIpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0
LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOworICAgICAgICAgICAgbV9yZXN1
bHQgPSBwdHI7CisgICAgICAgIH0KKyAgICAgICAgZnJpZW5kIGNsYXNzIFR5cGVOZWVkaW5nQ2Fz
dDsKKyAgICBwdWJsaWM6CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IFN0cmluZ1NldD4mIHNl
dFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVCghKFNUQVRFICYgU3RyaW5nU2V0KSwgcHJvcGVydHlfc3RyaW5nX2FscmVhZHlf
c2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJzdHJp
bmciKSwgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxTdHJpbmdTZXQ+KCk7
CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTnVtYmVyU2V0PiYgc2V0TnVt
YmVyKGludCB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShT
VEFURSAmIE51bWJlclNldCksIHByb3BlcnR5X251bWJlcl9hbHJlYWR5X3NldCk7CisgICAgICAg
ICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKEFTQ0lJTGl0ZXJhbCgibnVtYmVyIiksIHZhbHVlKTsK
KyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TnVtYmVyU2V0PigpOworICAgICAgICB9CisK
KyAgICAgICAgQnVpbGRlcjxTVEFURSB8IEFuaW1hbHNTZXQ+JiBzZXRBbmltYWxzKEluc3BlY3Rv
cjo6VHlwZUJ1aWxkZXI6OlRlc3Q6OkNhc3RlZEFuaW1hbHMgdmFsdWUpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBBbmltYWxzU2V0KSwgcHJvcGVydHlf
YW5pbWFsc19hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKEFT
Q0lJTGl0ZXJhbCgiYW5pbWFscyIpLCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpnZXRUZXN0RW51
bUNvbnN0YW50VmFsdWUoc3RhdGljX2Nhc3Q8aW50Pih2YWx1ZSkpKTsKKyAgICAgICAgICAgIHJl
dHVybiBjYXN0U3RhdGU8QW5pbWFsc1NldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxk
ZXI8U1RBVEUgfCBJZFNldD4mIHNldElkKGludCB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIElkU2V0KSwgcHJvcGVydHlfaWRfYWxyZWFkeV9z
ZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcihBU0NJSUxpdGVyYWwoImlkIiks
IHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8SWRTZXQ+KCk7CisgICAgICAg
IH0KKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVHJlZVNldD4mIHNldFRyZWUoUGFzc1JlZlB0
cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpUZXN0OjpSZWN1cnNpdmVPYmplY3QxPiB2YWx1ZSkK
KyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFRyZWVTZXQp
LCBwcm9wZXJ0eV90cmVlX2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRW
YWx1ZShBU0NJSUxpdGVyYWwoInRyZWUiKSwgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNh
c3RTdGF0ZTxUcmVlU2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgb3BlcmF0b3IgUmVmUHRy
PFR5cGVOZWVkaW5nQ2FzdD4mICgpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CisgICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoVHlwZU5lZWRpbmdDYXN0KSA9PSBzaXplb2YoSW5z
cGVjdG9yOjpJbnNwZWN0b3JPYmplY3QpLCBjYW5ub3RfY2FzdCk7CisgICAgICAgICAgICByZXR1
cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPFR5cGVOZWVkaW5nQ2FzdD4qPigmbV9yZXN1bHQp
OworICAgICAgICB9CisKKyAgICAgICAgUGFzc1JlZlB0cjxUeXBlTmVlZGluZ0Nhc3Q+IHJlbGVh
c2UoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gUmVmUHRyPFR5cGVOZWVkaW5nQ2Fz
dD4oKnRoaXMpLnJlbGVhc2UoKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICAvKgorICAgICAq
IFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKKyAgICAgKiBSZWZQdHI8VHlwZU5lZWRpbmdDYXN0PiBy
ZXN1bHQgPSBUeXBlTmVlZGluZ0Nhc3Q6OmNyZWF0ZSgpCisgICAgICogICAgIC5zZXRTdHJpbmco
Li4uKQorICAgICAqICAgICAuc2V0TnVtYmVyKC4uLikKKyAgICAgKiAgICAgLnNldEFuaW1hbHMo
Li4uKQorICAgICAqICAgICAuc2V0SWQoLi4uKQorICAgICAqICAgICAuc2V0VHJlZSguLi4pOwor
ICAgICAqLworICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEluc3BlY3Rvcjo6SW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKSk7CisgICAgfQorICAgIHR5cGVkZWYgSW5zcGVjdG9yOjpUeXBlQnVp
bGRlcjo6U3RydWN0SXRlbVRyYWl0cyBJdGVtVHJhaXRzOworfTsKKworLyogICovCitlbnVtIGNs
YXNzIFVuY2FzdGVkQW5pbWFscyB7CisgICAgUGlncyA9IDQsCisgICAgQ293cyA9IDUsCisgICAg
Q2F0cyA9IDYsCisgICAgSGVucyA9IDEsCit9OyAvLyBlbnVtIGNsYXNzIFVuY2FzdGVkQW5pbWFs
cworLyogICovCitlbnVtIGNsYXNzIENhc3RlZEFuaW1hbHMgeworICAgIER1Y2tzID0gMCwKKyAg
ICBIZW5zID0gMSwKKyAgICBDcm93cyA9IDIsCisgICAgRmxhbWluZ29zID0gMywKK307IC8vIGVu
dW0gY2xhc3MgQ2FzdGVkQW5pbWFscworY2xhc3MgUmVjdXJzaXZlT2JqZWN0MSA6IHB1YmxpYyBJ
bnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdEJhc2UgeworcHVibGljOgorICAgIGVudW0geworICAg
ICAgICBOb0ZpZWxkc1NldCA9IDAsCisgICAgICAgIEFsbEZpZWxkc1NldCA9IDAKKyAgICB9Owor
CisgICAgdGVtcGxhdGU8aW50IFNUQVRFPgorICAgIGNsYXNzIEJ1aWxkZXIgeworICAgIHByaXZh
dGU6CisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7
CisKKyAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2Fz
dFN0YXRlKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0
PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOworICAgICAgICB9CisKKyAgICAgICAgQnVp
bGRlcihQYXNzUmVmUHRyPC8qUmVjdXJzaXZlT2JqZWN0MSovSW5zcGVjdG9yOjpJbnNwZWN0b3JP
YmplY3Q+IHB0cikKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUg
PT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CisgICAg
ICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKKyAgICAgICAgfQorICAgICAgICBmcmllbmQgY2xhc3Mg
UmVjdXJzaXZlT2JqZWN0MTsKKyAgICBwdWJsaWM6CisKKyAgICAgICAgb3BlcmF0b3IgUmVmUHRy
PFJlY3Vyc2l2ZU9iamVjdDE+JiAoKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FT
U0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOworICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKFJlY3Vyc2l2ZU9iamVjdDEpID09IHNpemVvZihJ
bnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCksIGNhbm5vdF9jYXN0KTsKKyAgICAgICAgICAgIHJl
dHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8UmVjdXJzaXZlT2JqZWN0MT4qPigmbV9yZXN1
bHQpOworICAgICAgICB9CisKKyAgICAgICAgUGFzc1JlZlB0cjxSZWN1cnNpdmVPYmplY3QxPiBy
ZWxlYXNlKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxSZWN1cnNpdmVP
YmplY3QxPigqdGhpcykucmVsZWFzZSgpOworICAgICAgICB9CisgICAgfTsKKworICAgIC8qCisg
ICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgorICAgICAqIFJlZlB0cjxSZWN1cnNpdmVPYmpl
Y3QxPiByZXN1bHQgPSBSZWN1cnNpdmVPYmplY3QxOjpjcmVhdGUoKTsKKyAgICAgKi8KKyAgICBz
dGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVy
biBCdWlsZGVyPE5vRmllbGRzU2V0PihJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCkpOworICAgIH0KKyAgICB0eXBlZGVmIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlN0cnVjdEl0
ZW1UcmFpdHMgSXRlbVRyYWl0czsKKworICAgIHZvaWQgc2V0T2JqKFBhc3NSZWZQdHI8SW5zcGVj
dG9yOjpUeXBlQnVpbGRlcjo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0Mj4gdmFsdWUpCisgICAgewor
ICAgICAgICB0aGlzLT5zZXRWYWx1ZShBU0NJSUxpdGVyYWwoIm9iaiIpLCB2YWx1ZSk7CisgICAg
fQorfTsKKworY2xhc3MgUmVjdXJzaXZlT2JqZWN0MiA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3Bl
Y3Rvck9iamVjdEJhc2UgeworcHVibGljOgorICAgIGVudW0geworICAgICAgICBOb0ZpZWxkc1Nl
dCA9IDAsCisgICAgICAgIEFsbEZpZWxkc1NldCA9IDAKKyAgICB9OworCisgICAgdGVtcGxhdGU8
aW50IFNUQVRFPgorICAgIGNsYXNzIEJ1aWxkZXIgeworICAgIHByaXZhdGU6CisgICAgICAgIFJl
ZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CisKKyAgICAgICAgdGVt
cGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUg
fCBTVEVQPio+KHRoaXMpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRy
PC8qUmVjdXJzaXZlT2JqZWN0MiovSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IHB0cikKKyAg
ICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQs
IGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CisgICAgICAgICAgICBtX3Jlc3Vs
dCA9IHB0cjsKKyAgICAgICAgfQorICAgICAgICBmcmllbmQgY2xhc3MgUmVjdXJzaXZlT2JqZWN0
MjsKKyAgICBwdWJsaWM6CisKKyAgICAgICAgb3BlcmF0b3IgUmVmUHRyPFJlY3Vyc2l2ZU9iamVj
dDI+JiAoKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBB
bGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOworICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoc2l6ZW9mKFJlY3Vyc2l2ZU9iamVjdDIpID09IHNpemVvZihJbnNwZWN0b3I6Okluc3Bl
Y3Rvck9iamVjdCksIGNhbm5vdF9jYXN0KTsKKyAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnBy
ZXRfY2FzdDxSZWZQdHI8UmVjdXJzaXZlT2JqZWN0Mj4qPigmbV9yZXN1bHQpOworICAgICAgICB9
CisKKyAgICAgICAgUGFzc1JlZlB0cjxSZWN1cnNpdmVPYmplY3QyPiByZWxlYXNlKCkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxSZWN1cnNpdmVPYmplY3QyPigqdGhpcyku
cmVsZWFzZSgpOworICAgICAgICB9CisgICAgfTsKKworICAgIC8qCisgICAgICogU3ludGhldGlj
IGNvbnN0cnVjdG9yOgorICAgICAqIFJlZlB0cjxSZWN1cnNpdmVPYmplY3QyPiByZXN1bHQgPSBS
ZWN1cnNpdmVPYmplY3QyOjpjcmVhdGUoKTsKKyAgICAgKi8KKyAgICBzdGF0aWMgQnVpbGRlcjxO
b0ZpZWxkc1NldD4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmll
bGRzU2V0PihJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkpOworICAgIH0KKyAg
ICB0eXBlZGVmIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlN0cnVjdEl0ZW1UcmFpdHMgSXRlbVRy
YWl0czsKKworICAgIHZvaWQgc2V0T2JqKFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRl
cjo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0MT4gdmFsdWUpCisgICAgeworICAgICAgICB0aGlzLT5z
ZXRWYWx1ZShBU0NJSUxpdGVyYWwoIm9iaiIpLCB2YWx1ZSk7CisgICAgfQorfTsKKworfSAvLyBU
ZXN0CisKK3RlbXBsYXRlPD4gc3RydWN0IEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpUeXBlQnVp
bGRlcjo6VGVzdDo6Q2FzdGVkQW5pbWFscz4geworI2lmICFBU1NFUlRfRElTQUJMRUQKK3N0YXRp
YyB2b2lkIGFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFs
dWUqKTsKKyNlbmRpZiAvLyAhQVNTRVJUX0RJU0FCTEVECit9OwordGVtcGxhdGU8PiBzdHJ1Y3Qg
QmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpUZXN0OjpUeXBlTmVlZGluZ0Nh
c3Q+IHsKK3N0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlRlc3Q6OlR5
cGVOZWVkaW5nQ2FzdD4gcnVudGltZUNhc3QoUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rv
clZhbHVlPiB2YWx1ZSk7CisjaWYgIUFTU0VSVF9ESVNBQkxFRAorc3RhdGljIHZvaWQgYXNzZXJ0
VmFsdWVIYXNFeHBlY3RlZFR5cGUoSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSopOworI2VuZGlm
IC8vICFBU1NFUlRfRElTQUJMRUQKK307Cit0ZW1wbGF0ZTw+IHN0cnVjdCBCaW5kaW5nVHJhaXRz
PEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDE+IHsKKyNpZiAh
QVNTRVJUX0RJU0FCTEVECitzdGF0aWMgdm9pZCBhc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShJ
bnNwZWN0b3I6Okluc3BlY3RvclZhbHVlKik7CisjZW5kaWYgLy8gIUFTU0VSVF9ESVNBQkxFRAor
fTsKK3RlbXBsYXRlPD4gc3RydWN0IEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpUeXBlQnVpbGRl
cjo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0Mj4geworI2lmICFBU1NFUlRfRElTQUJMRUQKK3N0YXRp
YyB2b2lkIGFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFs
dWUqKTsKKyNlbmRpZiAvLyAhQVNTRVJUX0RJU0FCTEVECit9OworCit9IC8vIG5hbWVzcGFjZSBU
eXBlQnVpbGRlcgorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJM
RShJTlNQRUNUT1IpCisKKyNlbmRpZiAvLyAhZGVmaW5lZChJbnNwZWN0b3JUZXN0VHlwZUJ1aWxk
ZXJzX2gpCisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuaAorCisjIyMg
QmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5jcHAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisv
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBK
YXZhU2NyaXB0Q29yZS9yZXBsYXkvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5CisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJz
LmgiCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworbmFtZXNwYWNlIFR5cGVCdWlsZGVyIHsK
Kworc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGVudW1fY29uc3RhbnRfdmFsdWVzW10gPSB7Cisg
ICAgIkR1Y2tzIiwKKyAgICAiSGVucyIsCisgICAgIkNyb3dzIiwKKyAgICAiRmxhbWluZ29zIiwK
KyAgICAiUGlncyIsCisgICAgIkNvd3MiLAorICAgICJDYXRzIiwKK307CisKK1N0cmluZyBnZXRU
ZXN0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpIHsKKyAgICByZXR1cm4gZW51bV9jb25zdGFu
dF92YWx1ZXNbY29kZV07Cit9CisKKworCisjaWYgIUFTU0VSVF9ESVNBQkxFRAordm9pZCBCaW5k
aW5nVHJhaXRzPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlRlc3Q6OkNhc3RlZEFuaW1hbHM+Ojph
c3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlKiB2YWx1
ZSkKK3sKKyAgICBXVEY6OlN0cmluZyBzOworICAgIGJvb2wgY2FzdF9yZXMgPSB2YWx1ZS0+YXNT
dHJpbmcoJnMpOworICAgIEFTU0VSVChjYXN0X3Jlcyk7CisgICAgQVNTRVJUKHMgPT0gIkR1Y2tz
IiB8fCBzID09ICJIZW5zIiB8fCBzID09ICJDcm93cyIgfHwgcyA9PSAiRmxhbWluZ29zIik7Cit9
CisjZW5kaWYgLy8gIUFTU0VSVF9ESVNBQkxFRAorCisjaWYgIUFTU0VSVF9ESVNBQkxFRAordm9p
ZCBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlRlc3Q6OlR5cGVOZWVkaW5n
Q2FzdD46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFs
dWUqIHZhbHVlKQoreworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG9iamVjdDsKKyAgICBi
b29sIGNhc3RSZXMgPSB2YWx1ZS0+YXNPYmplY3QoJm9iamVjdCk7CisgICAgQVNTRVJUX1VOVVNF
RChjYXN0UmVzLCBjYXN0UmVzKTsKKyAgICB7CisgICAgICAgIEluc3BlY3Rvck9iamVjdDo6aXRl
cmF0b3Igc3RyaW5nUG9zOworICAgICAgICBzdHJpbmdQb3MgPSBvYmplY3QtPmZpbmQoInN0cmlu
ZyIpOworICAgICAgICBBU1NFUlQoc3RyaW5nUG9zICE9IG9iamVjdC0+ZW5kKCkpOworICAgICAg
ICBCaW5kaW5nVHJhaXRzPFN0cmluZz46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKHN0cmlu
Z1Bvcy0+dmFsdWUuZ2V0KCkpOworICAgIH0KKyAgICB7CisgICAgICAgIEluc3BlY3Rvck9iamVj
dDo6aXRlcmF0b3IgbnVtYmVyUG9zOworICAgICAgICBudW1iZXJQb3MgPSBvYmplY3QtPmZpbmQo
Im51bWJlciIpOworICAgICAgICBBU1NFUlQobnVtYmVyUG9zICE9IG9iamVjdC0+ZW5kKCkpOwor
ICAgICAgICBCaW5kaW5nVHJhaXRzPGludD46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKG51
bWJlclBvcy0+dmFsdWUuZ2V0KCkpOworICAgIH0KKyAgICB7CisgICAgICAgIEluc3BlY3Rvck9i
amVjdDo6aXRlcmF0b3IgYW5pbWFsc1BvczsKKyAgICAgICAgYW5pbWFsc1BvcyA9IG9iamVjdC0+
ZmluZCgiYW5pbWFscyIpOworICAgICAgICBBU1NFUlQoYW5pbWFsc1BvcyAhPSBvYmplY3QtPmVu
ZCgpKTsKKyAgICAgICAgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpUZXN0
OjpDYXN0ZWRBbmltYWxzPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoYW5pbWFsc1Bvcy0+
dmFsdWUuZ2V0KCkpOworICAgIH0KKyAgICB7CisgICAgICAgIEluc3BlY3Rvck9iamVjdDo6aXRl
cmF0b3IgaWRQb3M7CisgICAgICAgIGlkUG9zID0gb2JqZWN0LT5maW5kKCJpZCIpOworICAgICAg
ICBBU1NFUlQoaWRQb3MgIT0gb2JqZWN0LT5lbmQoKSk7CisgICAgICAgIEJpbmRpbmdUcmFpdHM8
aW50Pjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoaWRQb3MtPnZhbHVlLmdldCgpKTsKKyAg
ICB9CisgICAgeworICAgICAgICBJbnNwZWN0b3JPYmplY3Q6Oml0ZXJhdG9yIHRyZWVQb3M7Cisg
ICAgICAgIHRyZWVQb3MgPSBvYmplY3QtPmZpbmQoInRyZWUiKTsKKyAgICAgICAgQVNTRVJUKHRy
ZWVQb3MgIT0gb2JqZWN0LT5lbmQoKSk7CisgICAgICAgIEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9y
OjpUeXBlQnVpbGRlcjo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0MT46OmFzc2VydFZhbHVlSGFzRXhw
ZWN0ZWRUeXBlKHRyZWVQb3MtPnZhbHVlLmdldCgpKTsKKyAgICB9CisKKyAgICBpbnQgZm91bmRQ
cm9wZXJ0aWVzQ291bnQgPSA1OworICAgIGlmIChmb3VuZFByb3BlcnRpZXNDb3VudCAhPSBvYmpl
Y3QtPnNpemUoKSkKKyAgICAgICAgRkFUQUwoIlVuZXhwZWN0ZWQgcHJvcGVydGllcyBpbiBvYmpl
Y3Q6ICVzXG4iLCBvYmplY3QtPnRvSlNPTlN0cmluZygpLmFzY2lpKCkuZGF0YSgpKTsKK30KKyNl
bmRpZiAvLyAhQVNTRVJUX0RJU0FCTEVECisKK1Bhc3NSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVp
bGRlcjo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0PiBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6VHlw
ZUJ1aWxkZXI6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdD46OnJ1bnRpbWVDYXN0KFBhc3NSZWZQdHI8
SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4gdmFsdWUpCit7CisgICAgUmVmUHRyPEluc3BlY3Rv
cjo6SW5zcGVjdG9yT2JqZWN0PiBvYmplY3Q7CisgICAgYm9vbCBjYXN0UmVzID0gdmFsdWUtPmFz
T2JqZWN0KCZvYmplY3QpOworICAgIEFTU0VSVF9VTlVTRUQoY2FzdFJlcywgY2FzdFJlcyk7Cisj
aWYgIUFTU0VSVF9ESVNBQkxFRAorICAgIEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpUeXBlQnVp
bGRlcjo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0Pjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUo
b2JqZWN0LmdldCgpKTsKKyNlbmRpZiAgLy8gIUFTU0VSVF9ESVNBQkxFRAorICAgIENPTVBJTEVf
QVNTRVJUKHNpemVvZihJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpUZXN0OjpUeXBlTmVlZGluZ0Nh
c3QpID09IHNpemVvZihJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdEJhc2UpLCB0eXBlX2Nhc3Rf
cHJvYmxlbSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6
OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdCo+KHN0YXRpY19jYXN0PEluc3BlY3Rvcjo6SW5zcGVjdG9y
T2JqZWN0QmFzZSo+KG9iamVjdC5nZXQoKSkpOworfQorCisKKyNpZiAhQVNTRVJUX0RJU0FCTEVE
Cit2b2lkIEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6VGVzdDo6UmVjdXJz
aXZlT2JqZWN0MT46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKEluc3BlY3Rvcjo6SW5zcGVj
dG9yVmFsdWUqIHZhbHVlKQoreworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG9iamVjdDsK
KyAgICBib29sIGNhc3RSZXMgPSB2YWx1ZS0+YXNPYmplY3QoJm9iamVjdCk7CisgICAgQVNTRVJU
X1VOVVNFRChjYXN0UmVzLCBjYXN0UmVzKTsKKworICAgIGludCBmb3VuZFByb3BlcnRpZXNDb3Vu
dCA9IDA7CisgICAgeworICAgICAgICBJbnNwZWN0b3JPYmplY3Q6Oml0ZXJhdG9yIG9ialBvczsK
KyAgICAgICAgb2JqUG9zID0gb2JqZWN0LT5maW5kKCJvYmoiKTsKKyAgICAgICAgaWYgKG9ialBv
cyAhPSBvYmplY3QtPmVuZCgpKSB7CisgICAgICAgICAgICBCaW5kaW5nVHJhaXRzPEluc3BlY3Rv
cjo6VHlwZUJ1aWxkZXI6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDI+Ojphc3NlcnRWYWx1ZUhhc0V4
cGVjdGVkVHlwZShvYmpQb3MtPnZhbHVlLmdldCgpKTsKKyAgICAgICAgICAgICsrZm91bmRQcm9w
ZXJ0aWVzQ291bnQ7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKGZvdW5kUHJvcGVydGllc0Nv
dW50ICE9IG9iamVjdC0+c2l6ZSgpKQorICAgICAgICBGQVRBTCgiVW5leHBlY3RlZCBwcm9wZXJ0
aWVzIGluIG9iamVjdDogJXNcbiIsIG9iamVjdC0+dG9KU09OU3RyaW5nKCkuYXNjaWkoKS5kYXRh
KCkpOworfQorI2VuZGlmIC8vICFBU1NFUlRfRElTQUJMRUQKKworI2lmICFBU1NFUlRfRElTQUJM
RUQKK3ZvaWQgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpUZXN0OjpSZWN1
cnNpdmVPYmplY3QyPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSW5zcGVjdG9yOjpJbnNw
ZWN0b3JWYWx1ZSogdmFsdWUpCit7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gb2JqZWN0
OworICAgIGJvb2wgY2FzdFJlcyA9IHZhbHVlLT5hc09iamVjdCgmb2JqZWN0KTsKKyAgICBBU1NF
UlRfVU5VU0VEKGNhc3RSZXMsIGNhc3RSZXMpOworCisgICAgaW50IGZvdW5kUHJvcGVydGllc0Nv
dW50ID0gMDsKKyAgICB7CisgICAgICAgIEluc3BlY3Rvck9iamVjdDo6aXRlcmF0b3Igb2JqUG9z
OworICAgICAgICBvYmpQb3MgPSBvYmplY3QtPmZpbmQoIm9iaiIpOworICAgICAgICBpZiAob2Jq
UG9zICE9IG9iamVjdC0+ZW5kKCkpIHsKKyAgICAgICAgICAgIEJpbmRpbmdUcmFpdHM8SW5zcGVj
dG9yOjpUeXBlQnVpbGRlcjo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0MT46OmFzc2VydFZhbHVlSGFz
RXhwZWN0ZWRUeXBlKG9ialBvcy0+dmFsdWUuZ2V0KCkpOworICAgICAgICAgICAgKytmb3VuZFBy
b3BlcnRpZXNDb3VudDsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoZm91bmRQcm9wZXJ0aWVz
Q291bnQgIT0gb2JqZWN0LT5zaXplKCkpCisgICAgICAgIEZBVEFMKCJVbmV4cGVjdGVkIHByb3Bl
cnRpZXMgaW4gb2JqZWN0OiAlc1xuIiwgb2JqZWN0LT50b0pTT05TdHJpbmcoKS5hc2NpaSgpLmRh
dGEoKSk7Cit9CisjZW5kaWYgLy8gIUFTU0VSVF9ESVNBQkxFRAorCit9IC8vIG5hbWVzcGFjZSBU
eXBlQnVpbGRlcgorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJM
RShJTlNQRUNUT1IpCisKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5j
cHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9mYWlsLW9uLWR1cGxpY2F0ZS10eXBlLWRlY2xhcmF0aW9ucy5qc29uIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tZHVwbGljYXRlLXR5
cGUtZGVjbGFyYXRpb25zLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzAyZmM2YTMyNzBhNjQ2YTQ1MDQ0N2Zk
YzA0MDEzOTk1YTk0MmJmMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWR1cGxpY2F0ZS10eXBlLWRlY2xhcmF0
aW9ucy5qc29uCkBAIC0wLDAgKzEsMTUgQEAKK3sKKyAgICAiZG9tYWluIjogIlJ1bnRpbWUiLAor
ICAgICJ0eXBlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIlJlbW90ZU9iamVj
dElkIiwKKyAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCisgICAgICAgICAgICAiZGVzY3Jp
cHRpb24iOiAiVW5pcXVlIG9iamVjdCBpZGVudGlmaWVyLiIKKyAgICAgICAgfSwKKyAgICAgICAg
eworICAgICAgICAgICAgImlkIjogIlJlbW90ZU9iamVjdElkIiwKKyAgICAgICAgICAgICJ0eXBl
IjogInN0cmluZyIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5pcXVlIG9iamVjdCBp
ZGVudGlmaWVyLiIKKyAgICAgICAgfQorICAgIF0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWVudW0td2l0aC1uby12
YWx1ZXMuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9mYWlsLW9uLWVudW0td2l0aC1uby12YWx1ZXMuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yMzJhN2MzMjQ5
YTQwYmQ0NDdlMTlhOTJhOGU1NjkzMGQzZjg1OTU3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tZW51bS13aXRo
LW5vLXZhbHVlcy5qc29uCkBAIC0wLDAgKzEsMTAgQEAKK3sKKyAgICAiZG9tYWluIjogIkRhdGFi
YXNlIiwKKyAgICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJQcmlt
YXJ5Q29sb3JzIiwKKyAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCisgICAgICAgICAgICAi
ZW51bSI6IFtdCisgICAgICAgIH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi10eXBlLWRlY2xhcmF0aW9u
LXVzaW5nLXR5cGUtcmVmZXJlbmNlLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi10eXBlLWRlY2xhcmF0aW9uLXVzaW5nLXR5cGUtcmVm
ZXJlbmNlLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTliNzU5MGNjYzZmNmJjMzQ0M2E0YTI4M2NhNmZjY2Zk
ZjMyNzczNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLXR5cGUtZGVjbGFyYXRpb24tdXNpbmctdHlwZS1yZWZl
cmVuY2UuanNvbgpAQCAtMCwwICsxLDEzIEBACitbCit7CisgICAgImRvbWFpbiI6ICJSdW50aW1l
IiwKKyAgICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJSZW1vdGVP
YmplY3RJZCIsCisgICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAorICAgICAgICAgICAgIiRy
ZWYiOiAiU29tZVR5cGUiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBvYmpl
Y3QgaWRlbnRpZmllci4iCisgICAgICAgIH0KKyAgICBdCit9CitdCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi10eXBlLXdp
dGgtbG93ZXJjYXNlLW5hbWUuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9mYWlsLW9uLXR5cGUtd2l0aC1sb3dlcmNhc2UtbmFtZS5qc29uCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjUzMTkwMWU0YTlhZDk5MzZiMDFiYmFlZDk3YTFkNGRhMzQ4NDc4YjAKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
ZmFpbC1vbi10eXBlLXdpdGgtbG93ZXJjYXNlLW5hbWUuanNvbgpAQCAtMCwwICsxLDEwIEBACit7
CisgICAgImRvbWFpbiI6ICJEYXRhYmFzZSIsCisgICAgInR5cGVzIjogWworICAgICAgICB7Cisg
ICAgICAgICAgICAiaWQiOiAiZGF0YWJhc2VJZCIsCisgICAgICAgICAgICAidHlwZSI6ICJpbnRl
Z2VyIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUgaWRlbnRpZmllciBvZiBE
YXRhYmFzZSBvYmplY3QuIgorICAgICAgICB9CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tdW5rbm93bi10
eXBlLXJlZmVyZW5jZS1pbi10eXBlLWRlY2xhcmF0aW9uLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi11bmtub3duLXR5cGUtcmVmZXJl
bmNlLWluLXR5cGUtZGVjbGFyYXRpb24uanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kNjg4N2EyNzQxMTkwMGE4
MGQ1MGYwMDNlYWMzNmMxM2E5OWZhZTU4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tdW5rbm93bi10eXBlLXJl
ZmVyZW5jZS1pbi10eXBlLWRlY2xhcmF0aW9uLmpzb24KQEAgLTAsMCArMSwxMiBAQAorWworewor
ICAgICJkb21haW4iOiAiUnVudGltZSIsCisgICAgInR5cGVzIjogWworICAgICAgICB7CisgICAg
ICAgICAgICAiaWQiOiAiUmVtb3RlT2JqZWN0SWQiLAorICAgICAgICAgICAgInR5cGUiOiAiZHJh
Z29uIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUgb2JqZWN0IGlkZW50aWZp
ZXIuIgorICAgICAgICB9CisgICAgXQorfQorXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVy
ZW5jZS1pbi10eXBlLW1lbWJlci5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVyZW5jZS1pbi10eXBlLW1l
bWJlci5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI4MTdkYjUwNDRkYzFmMjg1NTcwMDhjMWYxNzYxZjFiMDY4
ZjRjZTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZmFpbC1vbi11bmtub3duLXR5cGUtcmVmZXJlbmNlLWluLXR5cGUtbWVt
YmVyLmpzb24KQEAgLTAsMCArMSwxNSBAQAorWworeworICAgICJkb21haW4iOiAiRmFudGFzeSIs
CisgICAgInR5cGVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiRHJhZ29uRWdn
IiwKKyAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCisgICAgICAgICAgICAiZGVzY3JpcHRp
b24iOiAiQSBkcmFnb24gZWdnLiIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IFsKKyAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogImNvbG9yIiwgIiRyZWYiOiAiQ29sb3IiIH0KKyAgICAgICAg
ICAgIF0KKyAgICAgICAgfQorICAgIF0KK30KK10KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9zYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRv
bWFpbi5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L3NhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2JmNGRmZjVj
Y2MyOWQwZThjMWZhNGIyZGQzMjgzZTc3MTYzMmM3ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9zYW1lLXR5cGUtaWQtZGlm
ZmVyZW50LWRvbWFpbi5qc29uCkBAIC0wLDAgKzEsMjIgQEAKK1sKK3sKKyAgICAiZG9tYWluIjog
IlJ1bnRpbWUiLAorICAgICJ0eXBlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjog
IlJlbW90ZU9iamVjdElkIiwKKyAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCisgICAgICAg
ICAgICAiZGVzY3JpcHRpb24iOiAiVW5pcXVlIG9iamVjdCBpZGVudGlmaWVyLiIKKyAgICAgICAg
fQorICAgIF0KK30sCit7CisgICAgImRvbWFpbiI6ICJSdW50aW1lMiIsCisgICAgInR5cGVzIjog
WworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiUmVtb3RlT2JqZWN0SWQiLAorICAgICAg
ICAgICAgInR5cGUiOiAic3RyaW5nIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmlx
dWUgb2JqZWN0IGlkZW50aWZpZXIuIgorICAgICAgICB9CisgICAgXQorfQorXQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3R5cGUtZGVj
bGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3R5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmlt
aXRpdmUtdHlwZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNiYzlkNTM5NDc4ZGI0OTVjOTYwNjdlY2Q1NGE5
NWJlNTJmOGQwNzAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10
eXBlLmpzb24KQEAgLTAsMCArMSwxMCBAQAoreworICAgICJkb21haW4iOiAiUnVudGltZSIsCisg
ICAgInR5cGVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiUmVtb3RlT2JqZWN0
SWQiLAorICAgICAgICAgICAgInR5cGUiOiAiaW50ZWdlciIsCisgICAgICAgICAgICAiZGVzY3Jp
cHRpb24iOiAiVW5pcXVlIG9iamVjdCBpZGVudGlmaWVyLiIKKyAgICAgICAgfQorICAgIF0KK30K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy90eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy90eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNv
bgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5jZmIwOGJkOTQwYjY0ZmI2NjAzOTY1Y2UxYjA0ZDNmYzk3NDllYTkwCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL3R5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uCkBAIC0wLDAgKzEsNTAgQEAK
K1sKK3sKKyAgICAiZG9tYWluIjogIkRlYnVnZ2VyIiwKKyAgICAidHlwZXMiOiBbCisgICAgICAg
IHsKKyAgICAgICAgICAgICJpZCI6ICJCcmVha3BvaW50SWQiLAorICAgICAgICAgICAgInR5cGUi
OiAiaW50ZWdlciIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIlJl
YXNvbiIsCisgICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAorICAgICAgICAgICAgImVudW0i
OiBbIkRpZWQiLCAiRmFpbnRlZCIsICJIdW5ncnkiXQorICAgICAgICB9CisgICAgXQorfSwKK3sK
KyAgICAiZG9tYWluIjogIlJ1bnRpbWUiLAorICAgICJ0eXBlcyI6IFsKKyAgICAgICAgeworICAg
ICAgICAgICAgImlkIjogIk9iamVjdElkIiwKKyAgICAgICAgICAgICJ0eXBlIjogImludGVnZXIi
CisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJMdWNreU51bWJlcnMi
LAorICAgICAgICAgICAgInR5cGUiOiAiYXJyYXkiLAorICAgICAgICAgICAgIml0ZW1zIjogeyAi
dHlwZSI6ICJpbnRlZ2VyIiB9CisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJp
ZCI6ICJCYWJ5TmFtZXMiLAorICAgICAgICAgICAgInR5cGUiOiAiYXJyYXkiLAorICAgICAgICAg
ICAgIml0ZW1zIjogeyAidHlwZSI6ICJzdHJpbmciIH0KKyAgICAgICAgfSwKKyAgICAgICAgewor
ICAgICAgICAgICAgImlkIjogIk5ld09iamVjdHMiLAorICAgICAgICAgICAgInR5cGUiOiAiYXJy
YXkiLAorICAgICAgICAgICAgIml0ZW1zIjogeyAiJHJlZiI6ICJPYmplY3RJZCIgfQorICAgICAg
ICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiT2xkT2JqZWN0cyIsCisgICAgICAg
ICAgICAidHlwZSI6ICJhcnJheSIsCisgICAgICAgICAgICAiaXRlbXMiOiB7ICIkcmVmIjogIkRl
YnVnZ2VyLkJyZWFrcG9pbnRJZCIgfQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAg
ICAiaWQiOiAiU3RvcFJlYXNvbnMiLAorICAgICAgICAgICAgInR5cGUiOiAiYXJyYXkiLAorICAg
ICAgICAgICAgIml0ZW1zIjogeyAiJHJlZiI6ICJEZWJ1Z2dlci5SZWFzb24iIH0KKyAgICAgICAg
fQorICAgIF0KK30KK10KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy90eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3R5cGUtZGVjbGFyYXRpb24t
ZW51bS10eXBlLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWYwYWVlOWM5MWI5NWFiYWYzODdlNzJhOTFhMzMz
OGI1NzlkYTlhYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy90eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uCkBAIC0w
LDAgKzEsMTUgQEAKK3sKKyAgICAiZG9tYWluIjogIlJ1bnRpbWUiLAorICAgICJ0eXBlcyI6IFsK
KyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIkZhcm1BbmltYWxzIiwKKyAgICAgICAgICAg
ICJ0eXBlIjogInN0cmluZyIsCisgICAgICAgICAgICAiZW51bSI6IFsiUGlncyIsICJDb3dzIiwg
IkNhdHMiLCAiSGVucyJdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6
ICJUd29MZWdnZWRBbmltYWxzIiwKKyAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCisgICAg
ICAgICAgICAiZW51bSI6IFsiRHVja3MiLCAiSGVucyIsICJDcm93cyIsICJGbGFtaW5nb3MiXQor
ICAgICAgICB9CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3R5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbiBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy90eXBlLWRlY2xh
cmF0aW9uLW9iamVjdC10eXBlLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmY1N2FkMmNmNWY3OGJjNjU0ZGY4
MWE5M2RiYjU2MDY5ZDE1YTQzMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy90eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBl
Lmpzb24KQEAgLTAsMCArMSw5NyBAQAorWworeworICAgICJkb21haW4iOiAiRGF0YWJhc2UiLAor
ICAgICJkZXNjcmlwdGlvbiI6ICJUZXN0IHR5cGUgYnVpbGRlciBnZW5lcmF0aW9uIG9mIHZhcmlv
dXMgb2JqZWN0IHR5cGVzLiIsCisgICAgInR5cGVzIjogWworICAgICAgICB7CisgICAgICAgICAg
ICAiaWQiOiAiRXJyb3IiLAorICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKKyAgICAgICAg
ICAgICJkZXNjcmlwdGlvbiI6ICJEYXRhYmFzZSBlcnJvci4iLAorICAgICAgICAgICAgInByb3Bl
cnRpZXMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJtZXNzYWdlIiwgInR5cGUiOiAi
c3RyaW5nIiwgImRlc2NyaXB0aW9uIjogIkVycm9yIG1lc3NhZ2UuIiB9LAorICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAiY29kZSIsICJ0eXBlIjogImludGVnZXIiLCAiZGVzY3JpcHRpb24iOiAi
RXJyb3IgY29kZS4iIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAg
ICAgICAgICAgImlkIjogIk9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlIiwKKyAgICAgICAgICAgICJ0
eXBlIjogIm9iamVjdCIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IFsKKyAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAiYXJyYXkiLCAib3B0aW9uYWwi
OiB0cnVlLCAiaXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSB9LAorICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAibm90ZXMiLCAidHlwZSI6ICJzdHJpbmciLCAib3B0aW9uYWwiOiB0cnVlIH0s
CisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0aW1lc3RhbXAiLCAidHlwZSI6ICJudW1iZXIi
LCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ2YWx1ZXMi
LCAidHlwZSI6ICJvYmplY3QiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJwYXlsb2FkIiwgInR5cGUiOiAiYW55IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAor
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZXJyb3IiLCAiJHJlZiI6ICJFcnJvciIsICJvcHRp
b25hbCI6IHRydWUgfQorICAgICAgICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7CisgICAg
ICAgICAgICAiaWQiOiAiUGFyYW1ldGVyQnVuZGxlIiwKKyAgICAgICAgICAgICJ0eXBlIjogIm9i
amVjdCIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IFsKKyAgICAgICAgICAgICAgICB7ICJu
YW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAiYXJyYXkiLCAiaXRlbXMiOiB7ICJ0eXBlIjog
InN0cmluZyIgfSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibm90ZXMiLCAidHlwZSI6
ICJzdHJpbmciIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0aW1lc3RhbXAiLCAidHlw
ZSI6ICJudW1iZXIiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ2YWx1ZXMiLCAidHlw
ZSI6ICJvYmplY3QiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwYXlsb2FkIiwgInR5
cGUiOiAiYW55IiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZXJyb3IiLCAiJHJlZiI6
ICJFcnJvciIgfQorICAgICAgICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAg
ICAgICAiaWQiOiAiT2JqZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0cyIsCisgICAgICAgICAg
ICAiZGVzY3JpcHRpb24iOiAiQ29uZmxpY3RlZCBuYW1lcyBtYXkgY2F1c2UgZ2VuZXJhdGVkIGdl
dHRlcnMvc2V0dGVycyB0byBjbGFzaCB3aXRoIGJ1aWx0LWluIEluc3BlY3Rvck9iamVjdCBtZXRo
b2RzLiIsCisgICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAorICAgICAgICAgICAgInByb3Bl
cnRpZXMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJpbnRlZ2VyIiwgInR5cGUiOiAi
c3RyaW5nIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiYXJyYXkiLCAidHlwZSI6ICJz
dHJpbmciIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzdHJpbmciLCAidHlwZSI6ICJz
dHJpbmciIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ2YWx1ZSIsICJ0eXBlIjogInN0
cmluZyIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm9iamVjdCIsICJ0eXBlIjogInN0
cmluZyIgfQorICAgICAgICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAg
ICAiaWQiOiAiRHVtbXlPYmplY3QiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkFuIG9w
ZW4gb2JqZWN0IHRoYXQgZG9lc24ndCBoYXZlIGFueSBwcmVkZWZpbmVkIGZpZWxkcy4iLAorICAg
ICAgICAgICAgInR5cGUiOiAib2JqZWN0IgorICAgICAgICB9CisgICAgXQorfSwKK3sKKyAgICAi
ZG9tYWluIjogIlRlc3QiLAorICAgICJkZXNjcmlwdGlvbiI6ICJUZXN0IHRoZSBnZW5lcmF0aW9u
IG9mIHNwZWNpYWwgYmVoYXZpb3JzIHRoYXQgb25seSBhcHBseSB0byBzcGVjaWZpYyBjbGFzc2Vz
LiIsCisgICAgInR5cGVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiVW5wbGVh
c2FudE5hbWUiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlRoaXMgdHlwZSBzaG91bGQg
YmUgcmVuYW1lZCB0byBIYXBweU5hbWUiLAorICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwK
KyAgICAgICAgICAgICJtZW1iZXJzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibm90
ZXMiLCAidHlwZSI6ICJzdHJpbmciIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0aW1l
c3RhbXAiLCAidHlwZSI6ICJudW1iZXIiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ2
YWx1ZXMiLCAidHlwZSI6ICJvYmplY3QiIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAg
ICAgICAgeworICAgICAgICAgICAgImlkIjogIlBhcmFtZXRlckJ1bmRsZSIsCisgICAgICAgICAg
ICAidHlwZSI6ICJvYmplY3QiLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCisgICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogImFycmF5IiwgIml0ZW1z
IjogeyAidHlwZSI6ICJzdHJpbmciIH0gfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm5v
dGVzIiwgInR5cGUiOiAic3RyaW5nIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidGlt
ZXN0YW1wIiwgInR5cGUiOiAibnVtYmVyIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
dmFsdWVzIiwgInR5cGUiOiAib2JqZWN0IiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
cGF5bG9hZCIsICJ0eXBlIjogImFueSIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImVy
cm9yIiwgIiRyZWYiOiAiRGF0YWJhc2UuRXJyb3IiIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAg
fQorICAgIF0sCisgICAgImNvbW1hbmRzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibmFt
ZSI6ICJhdHRlbXB0Q3Vyc2UiLAorICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCisgICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJjdXJzZSIsICIkcmVmIjogIlVucGxlYXNhbnROYW1lIiB9Cisg
ICAgICAgICAgICBdLAorICAgICAgICAgICAgInJldHVybnMiOiBbCisgICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJjZW5zb3JlZEN1cnNlIiwgInR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjog
dHJ1ZSB9CisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdCit9CitdCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvdHlwZS1yZXF1
aXJpbmctcnVudGltZS1jYXN0cy5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL3R5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbgpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi44M2Q5NGJlODk3ZDIyY2MwNThiYjY0NmZlY2Q5YTQ3MzAzN2I2YjkyCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3R5
cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbgpAQCAtMCwwICsxLDUxIEBACitbCit7Cisg
ICAgImRvbWFpbiI6ICJUZXN0IiwKKyAgICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAg
ICAgICJpZCI6ICJUeXBlTmVlZGluZ0Nhc3QiLAorICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0
IiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJBIGR1bW15IHR5cGUgdGhhdCByZXF1aXJl
cyBydW50aW1lIGNhc3RzLCBhbmQgZm9yY2VzIG5vbi1wcmltaXRpdmUgcmVmZXJlbmNlZCB0eXBl
cyB0byBhbHNvIGVtaXQgcnVudGltZSBjYXN0IGhlbHBlcnMuIiwKKyAgICAgICAgICAgICJwcm9w
ZXJ0aWVzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic3RyaW5nIiwgInR5cGUiOiAi
c3RyaW5nIiwgImRlc2NyaXB0aW9uIjogIlN0cmluZyBtZW1iZXIuIiB9LAorICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAibnVtYmVyIiwgInR5cGUiOiAiaW50ZWdlciIsICJkZXNjcmlwdGlvbiI6
ICJOdW1iZXIgbWVtYmVyLiIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImFuaW1hbHMi
LCAiJHJlZiI6ICJDYXN0ZWRBbmltYWxzIiwgImRlc2NyaXB0aW9uIjogIkVudW0gbWVtYmVyLiIg
fSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImlkIiwgIiRyZWYiOiAiQ2FzdGVkT2JqZWN0
SWQiLCAiZGVzY3JpcHRpb24iOiAiQWxpYXNlZCBtZW1iZXIuIiB9LAorICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAidHJlZSIsICIkcmVmIjogIlJlY3Vyc2l2ZU9iamVjdDEiLCAiZGVzY3JpcHRp
b24iOiAiUmVjdXJzaXZlIG9iamVjdCBtZW1iZXIuIiB9CisgICAgICAgICAgICBdCisgICAgICAg
IH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJDYXN0ZWRPYmplY3RJZCIsCisgICAg
ICAgICAgICAidHlwZSI6ICJpbnRlZ2VyIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAg
ICAgICAiaWQiOiAiVW5jYXN0ZWRPYmplY3RJZCIsCisgICAgICAgICAgICAidHlwZSI6ICJpbnRl
Z2VyIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiVW5jYXN0ZWRB
bmltYWxzIiwKKyAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCisgICAgICAgICAgICAiZW51
bSI6IFsiUGlncyIsICJDb3dzIiwgIkNhdHMiLCAiSGVucyJdCisgICAgICAgIH0sCisgICAgICAg
IHsKKyAgICAgICAgICAgICJpZCI6ICJDYXN0ZWRBbmltYWxzIiwKKyAgICAgICAgICAgICJ0eXBl
IjogInN0cmluZyIsCisgICAgICAgICAgICAiZW51bSI6IFsiRHVja3MiLCAiSGVucyIsICJDcm93
cyIsICJGbGFtaW5nb3MiXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQi
OiAiUmVjdXJzaXZlT2JqZWN0MSIsCisgICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAorICAg
ICAgICAgICAgInByb3BlcnRpZXMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJvYmoi
LCAiJHJlZiI6ICJSZWN1cnNpdmVPYmplY3QyIiwgIm9wdGlvbmFsIjogdHJ1ZSB9CisgICAgICAg
ICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJSZWN1cnNp
dmVPYmplY3QyIiwKKyAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCisgICAgICAgICAgICAi
cHJvcGVydGllcyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm9iaiIsICIkcmVmIjog
IlJlY3Vyc2l2ZU9iamVjdDEiLCAib3B0aW9uYWwiOiB0cnVlIH0KKyAgICAgICAgICAgIF0KKyAg
ICAgICAgfQorICAgIF0KK30KK10KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0hpZ2hGaWRlbGl0eVR5cGVQcm9maWxlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9IaWdoRmlkZWxpdHlUeXBlUHJvZmlsZXIuY3BwCmluZGV4IGRjZjEwODVhODFh
MmRlNDBiOWUyMzc0ZWQzY2ZlNDA0NjAyMzNmZDAuLmZmZDFiMTFkZmFmODQyZmVmOGZmYzAzYjRi
NTJmMjM2NWMzMjg5NjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0hpZ2hGaWRlbGl0eVR5cGVQcm9maWxlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVyLmNwcApAQCAtNjksMjEgKzY5LDIxIEBA
IHZvaWQgSGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVyOjppbnNlcnROZXdMb2NhdGlvbihUeXBlTG9j
YXRpb24qIGxvY2F0aW9uKQogICAgIGJ1Y2tldC5hcHBlbmQobG9jYXRpb24pOwogfQogCi12b2lk
IEhpZ2hGaWRlbGl0eVR5cGVQcm9maWxlcjo6Z2V0VHlwZXNGb3JWYXJpYWJsZUF0T2Zmc2V0Rm9y
SW5zcGVjdG9yKFR5cGVQcm9maWxlclNlYXJjaERlc2NyaXB0b3IgZGVzY3JpcHRvciwgdW5zaWdu
ZWQgZGl2b3QsIGludHB0cl90IHNvdXJjZUlELCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JP
YmplY3Q+JiByZXQpCit2b2lkIEhpZ2hGaWRlbGl0eVR5cGVQcm9maWxlcjo6Z2V0VHlwZXNGb3JW
YXJpYWJsZUF0T2Zmc2V0Rm9ySW5zcGVjdG9yKFR5cGVQcm9maWxlclNlYXJjaERlc2NyaXB0b3Ig
ZGVzY3JpcHRvciwgdW5zaWduZWQgZGl2b3QsIGludHB0cl90IHNvdXJjZUlELCBSZWZQdHI8SW5z
cGVjdG9yOjpUeXBlQnVpbGRlcjo6UnVudGltZTo6VHlwZURlc2NyaXB0aW9uPiYgZGVzY3JpcHRp
b24pCiB7CiAgICAgVHlwZUxvY2F0aW9uKiBsb2NhdGlvbiA9IGZpbmRMb2NhdGlvbihkaXZvdCwg
c291cmNlSUQsIGRlc2NyaXB0b3IpOwogICAgIGlmICghbG9jYXRpb24pCiAgICAgICAgIHJldHVy
bjsKIAogICAgIGlmIChsb2NhdGlvbi0+bV9nbG9iYWxUeXBlU2V0ICYmIGxvY2F0aW9uLT5tX2ds
b2JhbFZhcmlhYmxlSUQgIT0gSGlnaEZpZGVsaXR5Tm9HbG9iYWxJREV4aXN0cykgewotICAgICAg
ICByZXQtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoImRpc3BsYXlUeXBlTmFtZSIpLCBsb2NhdGlv
bi0+bV9nbG9iYWxUeXBlU2V0LT5kaXNwbGF5TmFtZSgpKTsKLSAgICAgICAgcmV0LT5zZXRBcnJh
eShBU0NJSUxpdGVyYWwoImdsb2JhbFByaW1pdGl2ZVR5cGVOYW1lcyIpLCBsb2NhdGlvbi0+bV9n
bG9iYWxUeXBlU2V0LT5hbGxQcmltaXRpdmVUeXBlTmFtZXMoKS0+YXNBcnJheSgpKTsKLSAgICAg
ICAgcmV0LT5zZXRBcnJheShBU0NJSUxpdGVyYWwoImdsb2JhbFN0cnVjdHVyZXMiKSwgbG9jYXRp
b24tPm1fZ2xvYmFsVHlwZVNldC0+YWxsU3RydWN0dXJlUmVwcmVzZW50YXRpb25zKCktPmFzQXJy
YXkoKSk7CisgICAgICAgIGRlc2NyaXB0aW9uLT5zZXREaXNwbGF5VHlwZU5hbWUobG9jYXRpb24t
Pm1fZ2xvYmFsVHlwZVNldC0+ZGlzcGxheU5hbWUoKSk7CisgICAgICAgIGRlc2NyaXB0aW9uLT5z
ZXRHbG9iYWxQcmltaXRpdmVUeXBlTmFtZXMobG9jYXRpb24tPm1fZ2xvYmFsVHlwZVNldC0+YWxs
UHJpbWl0aXZlVHlwZU5hbWVzKCkpOworICAgICAgICBkZXNjcmlwdGlvbi0+c2V0R2xvYmFsU3Ry
dWN0dXJlcyhsb2NhdGlvbi0+bV9nbG9iYWxUeXBlU2V0LT5hbGxTdHJ1Y3R1cmVSZXByZXNlbnRh
dGlvbnMoKSk7CiAgICAgfSBlbHNlCi0gICAgICAgIHJldC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJh
bCgiZGlzcGxheVR5cGVOYW1lIiksIGxvY2F0aW9uLT5tX2luc3RydWN0aW9uVHlwZVNldC0+ZGlz
cGxheU5hbWUoKSk7CisgICAgICAgIGRlc2NyaXB0aW9uLT5zZXREaXNwbGF5VHlwZU5hbWUobG9j
YXRpb24tPm1faW5zdHJ1Y3Rpb25UeXBlU2V0LT5kaXNwbGF5TmFtZSgpKTsKIAotICAgIHJldC0+
c2V0QXJyYXkoQVNDSUlMaXRlcmFsKCJsb2NhbFByaW1pdGl2ZVR5cGVOYW1lcyIpLCBsb2NhdGlv
bi0+bV9pbnN0cnVjdGlvblR5cGVTZXQtPmFsbFByaW1pdGl2ZVR5cGVOYW1lcygpLT5hc0FycmF5
KCkpOwotICAgIHJldC0+c2V0QXJyYXkoQVNDSUlMaXRlcmFsKCJsb2NhbFN0cnVjdHVyZXMiKSwg
bG9jYXRpb24tPm1faW5zdHJ1Y3Rpb25UeXBlU2V0LT5hbGxTdHJ1Y3R1cmVSZXByZXNlbnRhdGlv
bnMoKS0+YXNBcnJheSgpKTsKKyAgICBkZXNjcmlwdGlvbi0+c2V0TG9jYWxQcmltaXRpdmVUeXBl
TmFtZXMobG9jYXRpb24tPm1faW5zdHJ1Y3Rpb25UeXBlU2V0LT5hbGxQcmltaXRpdmVUeXBlTmFt
ZXMoKSk7CisgICAgZGVzY3JpcHRpb24tPnNldExvY2FsU3RydWN0dXJlcyhsb2NhdGlvbi0+bV9p
bnN0cnVjdGlvblR5cGVTZXQtPmFsbFN0cnVjdHVyZVJlcHJlc2VudGF0aW9ucygpKTsKIH0KIAog
c3RhdGljIGJvb2wgZGVzY3JpcHRvck1hdGNoZXNUeXBlTG9jYXRpb24oVHlwZVByb2ZpbGVyU2Vh
cmNoRGVzY3JpcHRvciBkZXNjcmlwdG9yLCBUeXBlTG9jYXRpb24qIGxvY2F0aW9uKQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGlnaEZpZGVsaXR5VHlwZVByb2Zp
bGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IaWdoRmlkZWxpdHlUeXBlUHJv
ZmlsZXIuaAppbmRleCAxOTU1ZDU5YTE5YjU5YmExMzM3MTRlNTY3MDVmMTM3ZGQyODVmMWYxLi4w
YTg5ZDBjNmMyMTc5N2RiZTY3ODM4ZTA5NTBmNTMxZmRlODc5OGIyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IaWdoRmlkZWxpdHlUeXBlUHJvZmlsZXIuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IaWdoRmlkZWxpdHlUeXBlUHJvZmlsZXIu
aApAQCAtMzYsOSArMzYsNiBAQAogbmFtZXNwYWNlIEluc3BlY3RvciB7IG5hbWVzcGFjZSBUeXBl
QnVpbGRlciAgeyBuYW1lc3BhY2UgUnVudGltZSB7CiBjbGFzcyBUeXBlRGVzY3JpcHRpb247CiB9
fX0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotY2xhc3MgSW5zcGVjdG9yT2JqZWN0OwotfQogCiBu
YW1lc3BhY2UgSlNDIHsKIApAQCAtOTksMTMgKzk2LDEzIEBAIGVudW0gVHlwZVByb2ZpbGVyU2Vh
cmNoRGVzY3JpcHRvciB7CiBjbGFzcyBIaWdoRmlkZWxpdHlUeXBlUHJvZmlsZXIgewogcHVibGlj
OgogICAgIHZvaWQgbG9nVHlwZXNGb3JUeXBlTG9jYXRpb24oVHlwZUxvY2F0aW9uKik7Ci0gICAg
dm9pZCBnZXRUeXBlc0ZvclZhcmlhYmxlQXRPZmZzZXRGb3JJbnNwZWN0b3IoVHlwZVByb2ZpbGVy
U2VhcmNoRGVzY3JpcHRvciBkZXNjcmlwdG9yLCB1bnNpZ25lZCBkaXZvdCwgaW50cHRyX3Qgc291
cmNlSUQsIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4mKTsKKyAgICB2b2lkIGdl
dFR5cGVzRm9yVmFyaWFibGVBdE9mZnNldEZvckluc3BlY3RvcihUeXBlUHJvZmlsZXJTZWFyY2hE
ZXNjcmlwdG9yLCB1bnNpZ25lZCBkaXZvdCwgaW50cHRyX3Qgc291cmNlSUQsIFJlZlB0cjxJbnNw
ZWN0b3I6OlR5cGVCdWlsZGVyOjpSdW50aW1lOjpUeXBlRGVzY3JpcHRpb24+Jik7CiAgICAgdm9p
ZCBpbnNlcnROZXdMb2NhdGlvbihUeXBlTG9jYXRpb24qKTsKICAgICBGdW5jdGlvbkhhc0V4ZWN1
dGVkQ2FjaGUqIGZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZSgpIHsgcmV0dXJuICZtX2Z1bmN0aW9u
SGFzRXhlY3V0ZWRDYWNoZTsgfQogICAgIFR5cGVMb2NhdGlvbkNhY2hlKiB0eXBlTG9jYXRpb25D
YWNoZSgpIHsgcmV0dXJuICZtX3R5cGVMb2NhdGlvbkNhY2hlOyB9Ci0gICAgCisKIHByaXZhdGU6
Ci0gICAgVHlwZUxvY2F0aW9uKiBmaW5kTG9jYXRpb24odW5zaWduZWQgZGl2b3QsIGludHB0cl90
IHNvdXJjZUlELCBUeXBlUHJvZmlsZXJTZWFyY2hEZXNjcmlwdG9yIGRlc2NyaXB0b3IpOworICAg
IFR5cGVMb2NhdGlvbiogZmluZExvY2F0aW9uKHVuc2lnbmVkIGRpdm90LCBpbnRwdHJfdCBzb3Vy
Y2VJRCwgVHlwZVByb2ZpbGVyU2VhcmNoRGVzY3JpcHRvcik7CiAgICAgdHlwZWRlZiBIYXNoTWFw
PGludHB0cl90LCBWZWN0b3I8VHlwZUxvY2F0aW9uKj4+IFNvdXJjZUlEVG9Mb2NhdGlvbkJ1Y2tl
dE1hcDsKICAgICBTb3VyY2VJRFRvTG9jYXRpb25CdWNrZXRNYXAgbV9idWNrZXRNYXA7CiAgICAg
RnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlIG1fZnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVNldC5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlU2V0LmNwcAppbmRleCAwNzc5MGZhNDQ0MjNi
N2E0ZWNjMGIyMjM1NDExMDU1ZDk3NGE1Y2FkLi42MzQ0MGJhYmNhZGU4ZGE2NmVhNmY4YWU5MGYz
NWU4NDM4M2Y0ZmUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9U
eXBlU2V0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlU2V0LmNw
cApAQCAtMjM2LDE0ICsyMzYsMTQgQEAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVy
OjpBcnJheTxTdHJpbmc+PiBUeXBlU2V0OjphbGxQcmltaXRpdmVUeXBlTmFtZXMKICAgICByZXR1
cm4gc2Vlbi5yZWxlYXNlKCk7CiB9CiAKLVBhc3NSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRl
cjo6QXJyYXk8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+PiBUeXBlU2V0OjphbGxTdHJ1Y3R1
cmVSZXByZXNlbnRhdGlvbnMoKSBjb25zdAorUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWls
ZGVyOjpBcnJheTxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpSdW50aW1lOjpTdHJ1Y3R1cmVEZXNj
cmlwdGlvbj4+IFR5cGVTZXQ6OmFsbFN0cnVjdHVyZVJlcHJlc2VudGF0aW9ucygpIGNvbnN0CiB7
Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5PEluc3BlY3Rvcjo6SW5z
cGVjdG9yT2JqZWN0Pj4gcmV0ID0gSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk8SW5zcGVj
dG9yOjpJbnNwZWN0b3JPYmplY3Q+OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpU
eXBlQnVpbGRlcjo6QXJyYXk8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UnVudGltZTo6U3RydWN0
dXJlRGVzY3JpcHRpb24+PiBkZXNjcmlwdGlvbiA9IEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFy
cmF5PEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OlN0cnVjdHVyZURlc2NyaXB0aW9u
Pjo6Y3JlYXRlKCk7CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fc3RydWN0dXJlSGlz
dG9yeS0+c2l6ZSgpOyBpKyspCi0gICAgICAgIHJldC0+YWRkSXRlbShtX3N0cnVjdHVyZUhpc3Rv
cnktPmF0KGkpLT5pbnNwZWN0b3JSZXByZXNlbnRhdGlvbigpKTsKKyAgICAgICAgZGVzY3JpcHRp
b24tPmFkZEl0ZW0obV9zdHJ1Y3R1cmVIaXN0b3J5LT5hdChpKS0+aW5zcGVjdG9yUmVwcmVzZW50
YXRpb24oKSk7CiAKLSAgICByZXR1cm4gcmV0LnJlbGVhc2UoKTsKKyAgICByZXR1cm4gZGVzY3Jp
cHRpb24ucmVsZWFzZSgpOwogfQogCiBTdHJpbmcgVHlwZVNldDo6bGVhc3RDb21tb25BbmNlc3Rv
cigpIGNvbnN0CkBAIC0zNDEsOCArMzQxLDggQEAgU3RyaW5nIFN0cnVjdHVyZVNoYXBlOjpzdHJp
bmdSZXByZXNlbnRhdGlvbigpCiAKICAgICByZXByZXNlbnRhdGlvbi5hcHBlbmQoInsiKTsKICAg
ICB3aGlsZSAoY3VyU2hhcGUpIHsKLSAgICAgICAgZm9yIChhdXRvIGl0ZXIgPSBjdXJTaGFwZS0+
bV9maWVsZHMuYmVnaW4oKSwgZW5kID0gY3VyU2hhcGUtPm1fZmllbGRzLmVuZCgpOyBpdGVyICE9
IGVuZDsgKytpdGVyKSB7Ci0gICAgICAgICAgICBTdHJpbmcgcHJvcCgoKml0ZXIpLmdldCgpKTsK
KyAgICAgICAgZm9yIChhdXRvIGl0ID0gY3VyU2hhcGUtPm1fZmllbGRzLmJlZ2luKCksIGVuZCA9
IGN1clNoYXBlLT5tX2ZpZWxkcy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICAg
ICBTdHJpbmcgcHJvcCgoKml0KS5nZXQoKSk7CiAgICAgICAgICAgICByZXByZXNlbnRhdGlvbi5h
cHBlbmQocHJvcCk7CiAgICAgICAgICAgICByZXByZXNlbnRhdGlvbi5hcHBlbmQoIiwgIik7CiAg
ICAgICAgIH0KQEAgLTM2NCwyMyArMzY0LDIzIEBAIFN0cmluZyBTdHJ1Y3R1cmVTaGFwZTo6c3Ry
aW5nUmVwcmVzZW50YXRpb24oKQogICAgIHJldHVybiByZXByZXNlbnRhdGlvbi50b1N0cmluZygp
OwogfQogCi1QYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBTdHJ1Y3R1cmVT
aGFwZTo6aW5zcGVjdG9yUmVwcmVzZW50YXRpb24oKQorUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlR5
cGVCdWlsZGVyOjpSdW50aW1lOjpTdHJ1Y3R1cmVEZXNjcmlwdGlvbj4gU3RydWN0dXJlU2hhcGU6
Omluc3BlY3RvclJlcHJlc2VudGF0aW9uKCkKIHsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNw
ZWN0b3JPYmplY3Q+IGJhc2UgPSBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7
Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBjdXJyZW50T2JqZWN0ID0g
YmFzZTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UnVudGltZTo6U3RydWN0
dXJlRGVzY3JpcHRpb24+IGJhc2UgPSBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpSdW50aW1lOjpT
dHJ1Y3R1cmVEZXNjcmlwdGlvbjo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6VHlw
ZUJ1aWxkZXI6OlJ1bnRpbWU6OlN0cnVjdHVyZURlc2NyaXB0aW9uPiBjdXJyZW50T2JqZWN0ID0g
YmFzZTsKICAgICBSZWZQdHI8U3RydWN0dXJlU2hhcGU+IGN1cnJlbnRTaGFwZSA9IHRoaXM7CiAK
ICAgICB3aGlsZSAoY3VycmVudFNoYXBlKSB7Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3I6OlR5
cGVCdWlsZGVyOjpBcnJheTxTdHJpbmc+PiBmaWVsZHMgPSBJbnNwZWN0b3I6OlR5cGVCdWlsZGVy
OjpBcnJheTxTdHJpbmc+OjpjcmVhdGUoKTsKLSAgICAgICAgZm9yIChhdXRvIGl0ZXIgPSBjdXJy
ZW50U2hhcGUtPm1fZmllbGRzLmJlZ2luKCksIGVuZCA9IGN1cnJlbnRTaGFwZS0+bV9maWVsZHMu
ZW5kKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCi0gICAgICAgICAgICBmaWVsZHMtPmFkZEl0ZW0o
KCppdGVyKS5nZXQoKSk7CisgICAgICAgIGF1dG8gZmllbGRzID0gSW5zcGVjdG9yOjpUeXBlQnVp
bGRlcjo6QXJyYXk8U3RyaW5nPjo6Y3JlYXRlKCk7CisgICAgICAgIGZvciAoYXV0byBpdCA9IGN1
cnJlbnRTaGFwZS0+bV9maWVsZHMuYmVnaW4oKSwgZW5kID0gY3VycmVudFNoYXBlLT5tX2ZpZWxk
cy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICAgICAgZmllbGRzLT5hZGRJdGVtKCgq
aXQpLmdldCgpKTsKIAotICAgICAgICBjdXJyZW50T2JqZWN0LT5zZXRBcnJheShBU0NJSUxpdGVy
YWwoImZpZWxkcyIpLCBmaWVsZHMtPmFzQXJyYXkoKSk7Ci0gICAgICAgIGN1cnJlbnRPYmplY3Qt
PnNldFN0cmluZyhBU0NJSUxpdGVyYWwoImNvbnN0cnVjdG9yTmFtZSIpLCBjdXJyZW50U2hhcGUt
Pm1fY29uc3RydWN0b3JOYW1lKTsKKyAgICAgICAgY3VycmVudE9iamVjdC0+c2V0RmllbGRzKGZp
ZWxkcyk7CisgICAgICAgIGN1cnJlbnRPYmplY3QtPnNldENvbnN0cnVjdG9yTmFtZShjdXJyZW50
U2hhcGUtPm1fY29uc3RydWN0b3JOYW1lKTsKIAogICAgICAgICBpZiAoY3VycmVudFNoYXBlLT5t
X3Byb3RvKSB7Ci0gICAgICAgICAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+
IG5leHRPYmplY3QgPSBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0gICAg
ICAgICAgICBjdXJyZW50T2JqZWN0LT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJwcm90b3R5cGVT
dHJ1Y3R1cmUiKSwgbmV4dE9iamVjdCk7CisgICAgICAgICAgICBSZWZQdHI8SW5zcGVjdG9yOjpU
eXBlQnVpbGRlcjo6UnVudGltZTo6U3RydWN0dXJlRGVzY3JpcHRpb24+IG5leHRPYmplY3QgPSBJ
bnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpSdW50aW1lOjpTdHJ1Y3R1cmVEZXNjcmlwdGlvbjo6Y3Jl
YXRlKCk7CisgICAgICAgICAgICBjdXJyZW50T2JqZWN0LT5zZXRQcm90b3R5cGVTdHJ1Y3R1cmUo
bmV4dE9iamVjdCk7CiAgICAgICAgICAgICBjdXJyZW50T2JqZWN0ID0gbmV4dE9iamVjdDsKICAg
ICAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBl
U2V0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlU2V0LmgKaW5kZXggMDcw
ZmYxZTM2Y2ExMDk4OWM1Y2M0MWM5NWI0MWU1MDRmNGNhOWY3NC4uNTc0N2RkZjI5YjhmZmVjY2Ix
N2ZiZDExYWJkOTAwZjE5OWMxYTQ4OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVHlwZVNldC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5
cGVTZXQuaApAQCAtMzIsMTMgKzMyLDE1IEBACiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsgbmFt
ZXNwYWNlIFR5cGVCdWlsZGVyICB7IAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLWNsYXNzIEFycmF5
OwotfX0KK25hbWVzcGFjZSBJbnNwZWN0b3IgeworbmFtZXNwYWNlIFR5cGVCdWlsZGVyICB7Cit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBBcnJheTsKIAotbmFtZXNwYWNlIEluc3BlY3RvciB7
IAotY2xhc3MgSW5zcGVjdG9yT2JqZWN0OworbmFtZXNwYWNlIFJ1bnRpbWUgeworY2xhc3MgU3Ry
dWN0dXJlRGVzY3JpcHRpb247Cit9CisKK30KIH0KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC02OCw3
ICs3MCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIG1hcmtBc0ZpbmFsKCk7CiAgICAgdm9pZCBhZGRQ
cm9wZXJ0eShSZWZQdHI8U3RyaW5nSW1wbD4pOwogICAgIFN0cmluZyBzdHJpbmdSZXByZXNlbnRh
dGlvbigpOwotICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IGluc3Bl
Y3RvclJlcHJlc2VudGF0aW9uKCk7CisgICAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWls
ZGVyOjpSdW50aW1lOjpTdHJ1Y3R1cmVEZXNjcmlwdGlvbj4gaW5zcGVjdG9yUmVwcmVzZW50YXRp
b24oKTsKICAgICB2b2lkIHNldENvbnN0cnVjdG9yTmFtZShTdHJpbmcgbmFtZSkgeyBtX2NvbnN0
cnVjdG9yTmFtZSA9IChuYW1lLmlzRW1wdHkoKSA/ICJPYmplY3QiIDogbmFtZSk7IH0KICAgICBT
dHJpbmcgY29uc3RydWN0b3JOYW1lKCkgeyByZXR1cm4gbV9jb25zdHJ1Y3Rvck5hbWU7IH0KICAg
ICB2b2lkIHNldFByb3RvKFBhc3NSZWZQdHI8U3RydWN0dXJlU2hhcGU+IHNoYXBlKSB7IG1fcHJv
dG8gPSBzaGFwZTsgfQpAQCAtOTMsNyArOTUsNyBAQCBwdWJsaWM6CiAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgU3RyaW5nIHNlZW5UeXBlcygpIGNvbnN0OwogICAgIFN0cmluZyBkaXNwbGF5TmFtZSgp
IGNvbnN0OwogICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk8U3Ry
aW5nPj4gYWxsUHJpbWl0aXZlVHlwZU5hbWVzKCkgY29uc3Q7Ci0gICAgUGFzc1JlZlB0cjxJbnNw
ZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheTxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4+IGFs
bFN0cnVjdHVyZVJlcHJlc2VudGF0aW9ucygpIGNvbnN0OworICAgIFBhc3NSZWZQdHI8SW5zcGVj
dG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UnVudGltZTo6
U3RydWN0dXJlRGVzY3JpcHRpb24+PiBhbGxTdHJ1Y3R1cmVSZXByZXNlbnRhdGlvbnMoKSBjb25z
dDsKIAogcHJpdmF0ZToKICAgICBTdHJpbmcgbGVhc3RDb21tb25BbmNlc3RvcigpIGNvbnN0Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViQ29y
ZS9DTWFrZUxpc3RzLnR4dAppbmRleCBmOGFkZTg0MDExODQ2NWEwMDJkYzk5Yjg1MDA3OTkyMTUz
OGRhNWJmLi5iOTMwMmU1ODJhNTMwZTc0ZDg3M2VlMTkxNjkwMjY2YTQ3ZjQ1Y2U3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9D
TWFrZUxpc3RzLnR4dApAQCAtNzc2LDYgKzc3NiwyMSBAQCBzZXQoV2ViQ29yZV9JRExfRklMRVMK
IAogc2V0KFdlYkNvcmVfSU5TUEVDVE9SX1NDUklQVFNfRElSICIke0pBVkFTQ1JJUFRDT1JFX0RJ
Un0vaW5zcGVjdG9yL3NjcmlwdHMiKQogCitzZXQoV2ViQ29yZV9JTlNQRUNUT1JfUFJPVE9DT0xf
U0NSSVBUUworICAgICR7V2ViQ29yZV9JTlNQRUNUT1JfU0NSSVBUU19ESVJ9L2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorICAgICR7V2ViQ29yZV9JTlNQRUNUT1JfU0NS
SVBUU19ESVJ9L2NvZGVnZW4vZ2VuZXJhdGVfYmFja2VuZF9jb21tYW5kcy5weQorICAgICR7V2Vi
Q29yZV9JTlNQRUNUT1JfU0NSSVBUU19ESVJ9L2NvZGVnZW4vZ2VuZXJhdGVfYmFja2VuZF9kaXNw
YXRjaGVyX2hlYWRlci5weQorICAgICR7V2ViQ29yZV9JTlNQRUNUT1JfU0NSSVBUU19ESVJ9L2Nv
ZGVnZW4vZ2VuZXJhdGVfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5CisgICAg
JHtXZWJDb3JlX0lOU1BFQ1RPUl9TQ1JJUFRTX0RJUn0vY29kZWdlbi9nZW5lcmF0ZV9mcm9udGVu
ZF9kaXNwYXRjaGVyX2hlYWRlci5weQorICAgICR7V2ViQ29yZV9JTlNQRUNUT1JfU0NSSVBUU19E
SVJ9L2NvZGVnZW4vZ2VuZXJhdGVfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5w
eQorICAgICR7V2ViQ29yZV9JTlNQRUNUT1JfU0NSSVBUU19ESVJ9L2NvZGVnZW4vZ2VuZXJhdGVf
dHlwZV9idWlsZGVyX2hlYWRlci5weQorICAgICR7V2ViQ29yZV9JTlNQRUNUT1JfU0NSSVBUU19E
SVJ9L2NvZGVnZW4vZ2VuZXJhdGVfdHlwZV9idWlsZGVyX2ltcGxlbWVudGF0aW9uLnB5CisgICAg
JHtXZWJDb3JlX0lOU1BFQ1RPUl9TQ1JJUFRTX0RJUn0vY29kZWdlbi9nZW5lcmF0b3IucHkKKyAg
ICAke1dlYkNvcmVfSU5TUEVDVE9SX1NDUklQVFNfRElSfS9jb2RlZ2VuL2dlbmVyYXRvcl90ZW1w
bGF0ZXMucHkKKyAgICAke1dlYkNvcmVfSU5TUEVDVE9SX1NDUklQVFNfRElSfS9jb2RlZ2VuL19f
aW5pdF9fLnB5CisgICAgJHtXZWJDb3JlX0lOU1BFQ1RPUl9TQ1JJUFRTX0RJUn0vY29kZWdlbi9t
b2RlbHMucHkKKykKKwogc2V0KFdlYkNvcmVfSU5TUEVDVE9SX0RPTUFJTlMKICAgICAke1dFQkNP
UkVfRElSfS9pbnNwZWN0b3IvcHJvdG9jb2wvQXBwbGljYXRpb25DYWNoZS5qc29uCiAgICAgJHtX
RUJDT1JFX0RJUn0vaW5zcGVjdG9yL3Byb3RvY29sL0NTUy5qc29uCkBAIC0zMjUzLDcgKzMyNjgs
NyBAQCBhZGRfY3VzdG9tX2NvbW1hbmQoCiAgICAgQ09NTUFORCAke1BZVEhPTl9FWEVDVVRBQkxF
fSAke1dlYkNvcmVfSU5TUEVDVE9SX1NDUklQVFNfRElSfS9nZW5lcmF0ZS1jb21iaW5lZC1pbnNw
ZWN0b3ItanNvbi5weSAke1dlYkNvcmVfSU5TUEVDVE9SX0RPTUFJTlN9ID4gJHtERVJJVkVEX1NP
VVJDRVNfV0VCQ09SRV9ESVJ9L0luc3BlY3RvcldlYi5qc29uCiAgICAgVkVSQkFUSU0pCiAKLSMg
QWxsIFdlYiBJbnNwZWN0b3IgZ2VuZXJhdGVkIGZpbGVzIGFyZSBjcmVhdGVkIHdpdGggdGhpcyBv
bmUgY2FsbCB0byBDb2RlR2VuZXJhdG9ySW5zcGVjdG9yLnBtCisjIEFsbCBXZWIgSW5zcGVjdG9y
IGdlbmVyYXRlZCBmaWxlcyBhcmUgY3JlYXRlZCB3aXRoIHRoaXMgb25lIGNhbGwgdG8gZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CiBhZGRfY3VzdG9tX2NvbW1hbmQoCiAg
ICAgT1VUUFVUICR7REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfS9JbnNwZWN0b3JXZWJCYWNr
ZW5kRGlzcGF0Y2hlcnMuY3BwCiAgICAgICAgICAgICR7REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVf
RElSfS9JbnNwZWN0b3JXZWJCYWNrZW5kRGlzcGF0Y2hlcnMuaApAQCAtMzI2MywxMSArMzI3OCw5
IEBAIGFkZF9jdXN0b21fY29tbWFuZCgKICAgICAgICAgICAgJHtERVJJVkVEX1NPVVJDRVNfV0VC
Q09SRV9ESVJ9L0luc3BlY3RvcldlYlR5cGVCdWlsZGVycy5oCiAgICAgICAgICAgICR7REVSSVZF
RF9TT1VSQ0VTX1dFQklOU1BFQ1RPUlVJX0RJUn0vVXNlckludGVyZmFjZS9Qcm90b2NvbC9JbnNw
ZWN0b3JXZWJCYWNrZW5kQ29tbWFuZHMuanMKICAgICBNQUlOX0RFUEVOREVOQ1kgJHtERVJJVkVE
X1NPVVJDRVNfV0VCQ09SRV9ESVJ9L0luc3BlY3RvcldlYi5qc29uCi0gICAgREVQRU5EUyAke1dl
YkNvcmVfSU5TUEVDVE9SX1NDUklQVFNfRElSfS9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5Ci0g
ICAgICAgICAgICAke1dlYkNvcmVfSU5TUEVDVE9SX1NDUklQVFNfRElSfS9Db2RlR2VuZXJhdG9y
SW5zcGVjdG9yU3RyaW5ncy5weQorICAgIERFUEVORFMgJHtXZWJDb3JlX0lOU1BFQ1RPUl9QUk9U
T0NPTF9TQ1JJUFRTfQogICAgICAgICAgICAgJHtERVJJVkVEX1NPVVJDRVNfSkFWQVNDUklQVENP
UkVfRElSfS9JbnNwZWN0b3JKUy5qc29uCi0gICAgICAgICAgICAke0RFUklWRURfU09VUkNFU19K
QVZBU0NSSVBUQ09SRV9ESVJ9L2luc3BlY3Rvci9JbnNwZWN0b3JKU1R5cGVCdWlsZGVycy5oCi0g
ICAgQ09NTUFORCAke1BZVEhPTl9FWEVDVVRBQkxFfSAke1dlYkNvcmVfSU5TUEVDVE9SX1NDUklQ
VFNfRElSfS9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5ICR7REVSSVZFRF9TT1VSQ0VTX1dFQkNP
UkVfRElSfS9JbnNwZWN0b3JXZWIuanNvbiAke0RFUklWRURfU09VUkNFU19KQVZBU0NSSVBUQ09S
RV9ESVJ9L0luc3BlY3RvckpTLmpzb24gLS1vdXRwdXRfaF9kaXIgIiR7REVSSVZFRF9TT1VSQ0VT
X1dFQkNPUkVfRElSfSIgLS1vdXRwdXRfY3BwX2RpciAiJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09S
RV9ESVJ9IiAtLW91dHB1dF9qc19kaXIgIiR7REVSSVZFRF9TT1VSQ0VTX1dFQklOU1BFQ1RPUlVJ
X0RJUn0vVXNlckludGVyZmFjZS9Qcm90b2NvbCIgLS1vdXRwdXRfdHlwZSBXZWIgLS13cml0ZV9h
bHdheXMKKyAgICBDT01NQU5EICR7UFlUSE9OX0VYRUNVVEFCTEV9ICR7V2ViQ29yZV9JTlNQRUNU
T1JfU0NSSVBUU19ESVJ9L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weSAt
LW91dHB1dERpciAiJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9IiAtLWZyYW1ld29yayBX
ZWJDb3JlICR7REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfS9JbnNwZWN0b3JXZWIuanNvbiAk
e0RFUklWRURfU09VUkNFU19KQVZBU0NSSVBUQ09SRV9ESVJ9L0luc3BlY3RvckpTLmpzb24gJiYg
Y3AgJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L0luc3BlY3RvcldlYkJhY2tlbmRDb21t
YW5kcy5qcyAke0RFUklWRURfU09VUkNFU19XRUJJTlNQRUNUT1JVSV9ESVJ9L1VzZXJJbnRlcmZh
Y2UvUHJvdG9jb2wKICAgICBWRVJCQVRJTSkKIAogbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VT
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlIGIvU291cmNl
L1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQppbmRleCBlNDE3NWE4OTdlM2RkZmFkOGQzMjhj
ODc0NjZlOWVmYzIyZjkxZDI4Li5hOWNmNmMyMWVhMjNmZTVhMWIxZjY3ZmI1ZjRmMzY5ODk1NWUz
ZjQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCisrKyBi
L1NvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKQEAgLTExNTEsOCArMTE1MSwxOCBA
QCBpZmVxICgkKGZpbmRzdHJpbmcgRU5BQkxFX1dFQl9SRVBMQVksJChGRUFUVVJFX0RFRklORVMp
KSwgRU5BQkxFX1dFQl9SRVBMQVkpCiBlbmRpZgogCiBJTlNQRUNUT1JfR0VORVJBVE9SX1NDUklQ
VFMgPSBcCi0JJChJbnNwZWN0b3JTY3JpcHRzKS9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5IFwK
LQkkKEluc3BlY3RvclNjcmlwdHMpL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3JTdHJpbmdzLnB5IFwK
KyAgICAkKEluc3BlY3RvclNjcmlwdHMpL2dlbmVyYXRlX2JhY2tlbmRfY29tbWFuZHMucHkgXAor
ICAgICQoSW5zcGVjdG9yU2NyaXB0cykvZ2VuZXJhdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRl
ci5weSBcCisgICAgJChJbnNwZWN0b3JTY3JpcHRzKS9nZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNo
ZXJfaW1wbGVtZW50YXRpb24ucHkgXAorICAgICQoSW5zcGVjdG9yU2NyaXB0cykvZ2VuZXJhdGVf
ZnJvbnRlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkgXAorICAgICQoSW5zcGVjdG9yU2NyaXB0cykv
Z2VuZXJhdGVfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSBcCisgICAgJChJ
bnNwZWN0b3JTY3JpcHRzKS9nZW5lcmF0ZV90eXBlX2J1aWxkZXJfaGVhZGVyLnB5IFwKKyAgICAk
KEluc3BlY3RvclNjcmlwdHMpL2dlbmVyYXRlX3R5cGVfYnVpbGRlcl9pbXBsZW1lbnRhdGlvbi5w
eSBcCisgICAgJChJbnNwZWN0b3JTY3JpcHRzKS9nZW5lcmF0b3JfdGVtcGxhdGVzLnB5IFwKKyAg
ICAkKEluc3BlY3RvclNjcmlwdHMpL2dlbmVyYXRvci5weSBcCisgICAgJChJbnNwZWN0b3JTY3Jp
cHRzKS9nZW5lcmF0ZS1jb21iaW5lZC1pbnNwZWN0b3ItanNvbi5weSBcCisgICAgJChJbnNwZWN0
b3JTY3JpcHRzKS9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkgXAorICAg
ICQoSW5zcGVjdG9yU2NyaXB0cykvbW9kZWxzLnB5IFwKICMKIAogYWxsIDogSW5zcGVjdG9yV2Vi
Lmpzb24KQEAgLTExNzAsNyArMTE4MCw3IEBAIEluc3BlY3RvcldlYi5qc29uIDogJChJbnNwZWN0
b3JTY3JpcHRzKS9nZW5lcmF0ZS1jb21iaW5lZC1pbnNwZWN0b3ItanNvbi5weSAkKElOCiBhbGwg
OiBJbnNwZWN0b3JXZWJGcm9udGVuZERpc3BhdGNoZXJzLmgKIAogSW5zcGVjdG9yV2ViRnJvbnRl
bmREaXNwYXRjaGVycy5oIDogSW5zcGVjdG9yV2ViLmpzb24gJChJbnNwZWN0b3JTY3JpcHRzKS9J
bnNwZWN0b3JKUy5qc29uICQoSU5TUEVDVE9SX0dFTkVSQVRPUl9TQ1JJUFRTKQotCSQoUFlUSE9O
KSAkKEluc3BlY3RvclNjcmlwdHMpL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkgLi9JbnNwZWN0
b3JXZWIuanNvbiAkKEluc3BlY3RvclNjcmlwdHMpL0luc3BlY3RvckpTLmpzb24gLS1vdXRwdXRf
aF9kaXIgLiAtLW91dHB1dF9jcHBfZGlyIC4gLS1vdXRwdXRfanNfZGlyIC4gLS1vdXRwdXRfdHlw
ZSBXZWIKKwkkKFBZVEhPTikgJChJbnNwZWN0b3JTY3JpcHRzKS9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkgLS1mcmFtZXdvcmsgV2ViQ29yZSAtLW91dHB1dERpciAuIC4v
SW5zcGVjdG9yV2ViLmpzb24gJChJbnNwZWN0b3JTY3JpcHRzKS9JbnNwZWN0b3JKUy5qc29uCiAK
IGFsbCA6IEluc3BlY3Rvck92ZXJsYXlQYWdlLmgKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0NvbW1hbmRMaW5lQVBJSG9zdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvQ29tbWFuZExpbmVBUElIb3N0LmNwcAppbmRleCA1N2I5MjFhZWQ5Y2Q0YWQ1M2U5NWIx
NGNiMWM5MzZkNjRhMTBlNDgxLi5iNjhiNGNlOWQyOWI3OTBhMzI5Y2YyMjg0YTM2YjU2NmNkYjky
YzBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29tbWFuZExpbmVBUElI
b3N0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29tbWFuZExpbmVBUElIb3N0
LmNwcApAQCAtOTUsNyArOTUsNyBAQCB2b2lkIENvbW1hbmRMaW5lQVBJSG9zdDo6ZGlzY29ubmVj
dCgpCiB2b2lkIENvbW1hbmRMaW5lQVBJSG9zdDo6aW5zcGVjdEltcGwoUGFzc1JlZlB0cjxJbnNw
ZWN0b3JWYWx1ZT4gb2JqZWN0LCBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiBoaW50cykKIHsK
ICAgICBpZiAobV9pbnNwZWN0b3JBZ2VudCkgewotICAgICAgICBSZWZQdHI8SW5zcGVjdG9yOjpU
eXBlQnVpbGRlcjo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiByZW1vdGVPYmplY3QgPSBJbnNwZWN0
b3I6OlR5cGVCdWlsZGVyOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q6OnJ1bnRpbWVDYXN0KG9iamVj
dCk7CisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpSdW50aW1lOjpSZW1v
dGVPYmplY3Q+IHJlbW90ZU9iamVjdCA9IEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpUeXBlQnVp
bGRlcjo6UnVudGltZTo6UmVtb3RlT2JqZWN0Pjo6cnVudGltZUNhc3Qob2JqZWN0KTsKICAgICAg
ICAgbV9pbnNwZWN0b3JBZ2VudC0+aW5zcGVjdChyZW1vdGVPYmplY3QsIGhpbnRzLT5hc09iamVj
dCgpKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yQ1NTQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNT
U0FnZW50LmNwcAppbmRleCAzMDVhOTk1NGRmMWE5N2YxYzBjMDcxZDg0Zjc0OTEwYWEwMGQ2Zjhj
Li4xNjlkMzdjYjJlMjc0ZTYxZWIwMTJmNDI3MTEwOTg5YmU5ZTE0MzA3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHAKQEAgLTEwMDAsOSArMTAw
MCw5IEBAIEluc3BlY3RvclN0eWxlU2hlZXQqIEluc3BlY3RvckNTU0FnZW50Ojphc3NlcnRTdHls
ZVNoZWV0Rm9ySWQoRXJyb3JTdHJpbmcqIGVycm9yCiAgICAgcmV0dXJuIGl0LT52YWx1ZS5nZXQo
KTsKIH0KIAotSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luOjpF
bnVtIEluc3BlY3RvckNTU0FnZW50OjpkZXRlY3RPcmlnaW4oQ1NTU3R5bGVTaGVldCogcGFnZVN0
eWxlU2hlZXQsIERvY3VtZW50KiBvd25lckRvY3VtZW50KQorSW5zcGVjdG9yOjpUeXBlQnVpbGRl
cjo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luIEluc3BlY3RvckNTU0FnZW50OjpkZXRlY3RPcmlnaW4o
Q1NTU3R5bGVTaGVldCogcGFnZVN0eWxlU2hlZXQsIERvY3VtZW50KiBvd25lckRvY3VtZW50KQog
ewotICAgIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6RW51
bSBvcmlnaW4gPSBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW46
OlJlZ3VsYXI7CisgICAgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q1NTOjpTdHlsZVNoZWV0T3Jp
Z2luIG9yaWdpbiA9IEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNTUzo6U3R5bGVTaGVldE9yaWdp
bjo6UmVndWxhcjsKICAgICBpZiAocGFnZVN0eWxlU2hlZXQgJiYgIXBhZ2VTdHlsZVNoZWV0LT5v
d25lck5vZGUoKSAmJiBwYWdlU3R5bGVTaGVldC0+aHJlZigpLmlzRW1wdHkoKSkKICAgICAgICAg
b3JpZ2luID0gSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luOjpV
c2VyQWdlbnQ7CiAgICAgZWxzZSBpZiAocGFnZVN0eWxlU2hlZXQgJiYgcGFnZVN0eWxlU2hlZXQt
Pm93bmVyTm9kZSgpICYmIHBhZ2VTdHlsZVNoZWV0LT5vd25lck5vZGUoKS0+bm9kZU5hbWUoKSA9
PSAiI2RvY3VtZW50IikKQEAgLTExMDYsNyArMTEwNiw3IEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9y
OjpUeXBlQnVpbGRlcjo6QXJyYXk8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q1NTOjpSZWdpb24+
PiBJCiAgICAgUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5PEluc3BlY3Rvcjo6
VHlwZUJ1aWxkZXI6OkNTUzo6UmVnaW9uPj4gcmVnaW9ucyA9IEluc3BlY3Rvcjo6VHlwZUJ1aWxk
ZXI6OkFycmF5PEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNTUzo6UmVnaW9uPjo6Y3JlYXRlKCk7
CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVnaW9uTGlzdC0+bGVuZ3RoKCk7ICsr
aSkgewotICAgICAgICBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDU1M6OlJlZ2lvbjo6UmVnaW9u
T3ZlcnNldDo6RW51bSByZWdpb25PdmVyc2V0OworICAgICAgICBJbnNwZWN0b3I6OlR5cGVCdWls
ZGVyOjpDU1M6OlJlZ2lvbjo6UmVnaW9uT3ZlcnNldCByZWdpb25PdmVyc2V0OwogCiAgICAgICAg
IHN3aXRjaCAodG9FbGVtZW50KHJlZ2lvbkxpc3QtPml0ZW0oaSkpLT5yZWdpb25PdmVyc2V0U3Rh
dGUoKSkgewogICAgICAgICBjYXNlIFJlZ2lvbkZpdDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckNTU0FnZW50LmgKaW5kZXggMzY1MjM3ZjAzNmE2Y2Y2YmJlMWE1ZjUzMzc0
Yjc1Y2U1MjYwNzhmMi4uMTc1NWQ3MjBjMzE1ZTJlZDhjMWRhNjA0ZjIwNWY2YmJkZTlkMDE1ZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmgKQEAgLTE0
OSw3ICsxNDksNyBAQCBwcml2YXRlOgogICAgIEluc3BlY3RvclN0eWxlU2hlZXQqIGJpbmRTdHls
ZVNoZWV0KENTU1N0eWxlU2hlZXQqKTsKICAgICBJbnNwZWN0b3JTdHlsZVNoZWV0KiB2aWFJbnNw
ZWN0b3JTdHlsZVNoZWV0KERvY3VtZW50KiwgYm9vbCBjcmVhdGVJZkFic2VudCk7CiAgICAgSW5z
cGVjdG9yU3R5bGVTaGVldCogYXNzZXJ0U3R5bGVTaGVldEZvcklkKEVycm9yU3RyaW5nKiwgY29u
c3QgU3RyaW5nJik7Ci0gICAgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q1NTOjpTdHlsZVNoZWV0
T3JpZ2luOjpFbnVtIGRldGVjdE9yaWdpbihDU1NTdHlsZVNoZWV0KiBwYWdlU3R5bGVTaGVldCwg
RG9jdW1lbnQqIG93bmVyRG9jdW1lbnQpOworICAgIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNT
Uzo6U3R5bGVTaGVldE9yaWdpbiBkZXRlY3RPcmlnaW4oQ1NTU3R5bGVTaGVldCogcGFnZVN0eWxl
U2hlZXQsIERvY3VtZW50KiBvd25lckRvY3VtZW50KTsKIAogICAgIFBhc3NSZWZQdHI8SW5zcGVj
dG9yOjpUeXBlQnVpbGRlcjo6Q1NTOjpDU1NSdWxlPiBidWlsZE9iamVjdEZvclJ1bGUoU3R5bGVS
dWxlKiwgU3R5bGVSZXNvbHZlciYpOwogICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVp
bGRlcjo6Q1NTOjpDU1NSdWxlPiBidWlsZE9iamVjdEZvclJ1bGUoQ1NTU3R5bGVSdWxlKik7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcAppbmRleCBh
ZmVlZTk0MzcxNDNlYmE4MmExMWRhYzgxY2I4ZGViYTVhNzBlNTRhLi5iMmNiNGM2NDBkNjVlZjU0
MzU4MzZmZmY1N2UzZTQzYzcwN2Y2MWM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JET01BZ2VudC5jcHAKQEAgLTE0NDUsNyArMTQ0NSw3IEBAIFBhc3NSZWZQdHI8
VHlwZUJ1aWxkZXI6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM+IEluc3BlY3RvckRPTUFn
ZW50OjpidWlsZE9iCiAKICAgICBOb2RlKiBhY3RpdmVEZXNjZW5kYW50Tm9kZSA9IG51bGxwdHI7
CiAgICAgYm9vbCBidXN5ID0gZmFsc2U7Ci0gICAgVHlwZUJ1aWxkZXI6OkRPTTo6QWNjZXNzaWJp
bGl0eVByb3BlcnRpZXM6OkNoZWNrZWQ6OkVudW0gY2hlY2tlZCA9IFR5cGVCdWlsZGVyOjpET006
OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpDaGVja2VkOjpGYWxzZTsKKyAgICBUeXBlQnVpbGRl
cjo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6Q2hlY2tlZCBjaGVja2VkID0gVHlwZUJ1
aWxkZXI6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6OkNoZWNrZWQ6OkZhbHNlOwogICAg
IFJlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheTxpbnQ+PiBjaGlsZE5vZGVJZHM7
CiAgICAgUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5PGludD4+IGNvbnRyb2xs
ZWROb2RlSWRzOwogICAgIGJvb2wgZXhpc3RzID0gZmFsc2U7CkBAIC0xNDU1LDEyICsxNDU1LDEy
IEBAIFBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM+
IEluc3BlY3RvckRPTUFnZW50OjpidWlsZE9iCiAgICAgYm9vbCBmb2N1c2VkID0gZmFsc2U7CiAg
ICAgYm9vbCBpZ25vcmVkID0gdHJ1ZTsKICAgICBib29sIGlnbm9yZWRCeURlZmF1bHQgPSBmYWxz
ZTsKLSAgICBUeXBlQnVpbGRlcjo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6SW52YWxp
ZDo6RW51bSBpbnZhbGlkID0gVHlwZUJ1aWxkZXI6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRp
ZXM6OkludmFsaWQ6OkZhbHNlOworICAgIFR5cGVCdWlsZGVyOjpET006OkFjY2Vzc2liaWxpdHlQ
cm9wZXJ0aWVzOjpJbnZhbGlkIGludmFsaWQgPSBUeXBlQnVpbGRlcjo6RE9NOjpBY2Nlc3NpYmls
aXR5UHJvcGVydGllczo6SW52YWxpZDo6RmFsc2U7CiAgICAgYm9vbCBoaWRkZW4gPSBmYWxzZTsK
ICAgICBTdHJpbmcgbGFiZWw7CiAgICAgYm9vbCBsaXZlUmVnaW9uQXRvbWljID0gZmFsc2U7CiAg
ICAgUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5PFN0cmluZz4+IGxpdmVSZWdp
b25SZWxldmFudDsKLSAgICBUeXBlQnVpbGRlcjo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGll
czo6TGl2ZVJlZ2lvblN0YXR1czo6RW51bSBsaXZlUmVnaW9uU3RhdHVzID0gVHlwZUJ1aWxkZXI6
OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6OkxpdmVSZWdpb25TdGF0dXM6Ok9mZjsKKyAg
ICBUeXBlQnVpbGRlcjo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6TGl2ZVJlZ2lvblN0
YXR1cyBsaXZlUmVnaW9uU3RhdHVzID0gVHlwZUJ1aWxkZXI6OkRPTTo6QWNjZXNzaWJpbGl0eVBy
b3BlcnRpZXM6OkxpdmVSZWdpb25TdGF0dXM6Ok9mZjsKICAgICBOb2RlKiBtb3VzZUV2ZW50Tm9k
ZSA9IG51bGxwdHI7CiAgICAgUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5PGlu
dD4+IG93bmVkTm9kZUlkczsKICAgICBOb2RlKiBwYXJlbnROb2RlID0gbnVsbHB0cjsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAKaW5kZXggNDVi
ZjBlZWU4NDZmNzcwOWVkNDJlMjc0ZmQxMTdmOTY0ODI0MThkZS4uMjhiYjkxOTdmN2MwZjAxMWMw
OGM5ZTE0ZjlmY2EwNjg2MmE4NGIxNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvclBhZ2VBZ2VudC5jcHAKQEAgLTI4Nyw3ICsyODcsNyBAQCBDYWNoZWRSZXNvdXJj
ZSogSW5zcGVjdG9yUGFnZUFnZW50OjpjYWNoZWRSZXNvdXJjZShGcmFtZSogZnJhbWUsIGNvbnN0
IFVSTCYgdXJsKQogICAgIHJldHVybiBjYWNoZWRSZXNvdXJjZTsKIH0KIAotSW5zcGVjdG9yOjpU
eXBlQnVpbGRlcjo6UGFnZTo6UmVzb3VyY2VUeXBlOjpFbnVtIEluc3BlY3RvclBhZ2VBZ2VudDo6
cmVzb3VyY2VUeXBlSnNvbihJbnNwZWN0b3JQYWdlQWdlbnQ6OlJlc291cmNlVHlwZSByZXNvdXJj
ZVR5cGUpCitJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpQYWdlOjpSZXNvdXJjZVR5cGUgSW5zcGVj
dG9yUGFnZUFnZW50OjpyZXNvdXJjZVR5cGVKc29uKEluc3BlY3RvclBhZ2VBZ2VudDo6UmVzb3Vy
Y2VUeXBlIHJlc291cmNlVHlwZSkKIHsKICAgICBzd2l0Y2ggKHJlc291cmNlVHlwZSkgewogICAg
IGNhc2UgRG9jdW1lbnRSZXNvdXJjZToKQEAgLTMzNSw3ICszMzUsNyBAQCBJbnNwZWN0b3JQYWdl
QWdlbnQ6OlJlc291cmNlVHlwZSBJbnNwZWN0b3JQYWdlQWdlbnQ6OmNhY2hlZFJlc291cmNlVHlw
ZShjb25zdCBDYQogICAgIHJldHVybiBJbnNwZWN0b3JQYWdlQWdlbnQ6Ok90aGVyUmVzb3VyY2U7
CiB9CiAKLUluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlBhZ2U6OlJlc291cmNlVHlwZTo6RW51bSBJ
bnNwZWN0b3JQYWdlQWdlbnQ6OmNhY2hlZFJlc291cmNlVHlwZUpzb24oY29uc3QgQ2FjaGVkUmVz
b3VyY2UmIGNhY2hlZFJlc291cmNlKQorSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UGFnZTo6UmVz
b3VyY2VUeXBlIEluc3BlY3RvclBhZ2VBZ2VudDo6Y2FjaGVkUmVzb3VyY2VUeXBlSnNvbihjb25z
dCBDYWNoZWRSZXNvdXJjZSYgY2FjaGVkUmVzb3VyY2UpCiB7CiAgICAgcmV0dXJuIHJlc291cmNl
VHlwZUpzb24oY2FjaGVkUmVzb3VyY2VUeXBlKGNhY2hlZFJlc291cmNlKSk7CiB9CkBAIC03MDYs
NyArNzA2LDcgQEAgdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OnNldENvbnRpbnVvdXNQYWludGlu
Z0VuYWJsZWQoRXJyb3JTdHJpbmcqLCBib29sIGVuYWJsZWQKICAgICAgICAgbWFpbkZyYW1lKCkt
PnZpZXcoKS0+aW52YWxpZGF0ZSgpOwogfQogCi12b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6Z2V0
U2NyaXB0RXhlY3V0aW9uU3RhdHVzKEVycm9yU3RyaW5nKiwgSW5zcGVjdG9yUGFnZUJhY2tlbmRE
aXNwYXRjaGVySGFuZGxlcjo6UmVzdWx0OjpFbnVtKiBzdGF0dXMpCit2b2lkIEluc3BlY3RvclBh
Z2VBZ2VudDo6Z2V0U2NyaXB0RXhlY3V0aW9uU3RhdHVzKEVycm9yU3RyaW5nKiwgSW5zcGVjdG9y
UGFnZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UmVzdWx0KiBzdGF0dXMpCiB7CiAgICAgYm9v
bCBkaXNhYmxlZEJ5U2NyaXB0Q29udHJvbGxlciA9IGZhbHNlOwogICAgIGJvb2wgZGlzYWJsZWRJ
blNldHRpbmdzID0gZmFsc2U7CkBAIC05NjMsMTMgKzk2MywxMyBAQCBQYXNzUmVmUHRyPEluc3Bl
Y3Rvcjo6VHlwZUJ1aWxkZXI6OlBhZ2U6OkZyYW1lPiBJbnNwZWN0b3JQYWdlQWdlbnQ6OmJ1aWxk
T2JqZWN0RgogUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpQYWdlOjpGcmFtZVJl
c291cmNlVHJlZT4gSW5zcGVjdG9yUGFnZUFnZW50OjpidWlsZE9iamVjdEZvckZyYW1lVHJlZShG
cmFtZSogZnJhbWUpCiB7CiAgICAgUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlBhZ2U6
OkZyYW1lPiBmcmFtZU9iamVjdCA9IGJ1aWxkT2JqZWN0Rm9yRnJhbWUoZnJhbWUpOwotICAgIFJl
ZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheTxJbnNwZWN0b3I6OlR5cGVCdWlsZGVy
OjpQYWdlOjpGcmFtZVJlc291cmNlVHJlZTo6UmVzb3VyY2VzPj4gc3VicmVzb3VyY2VzID0gSW5z
cGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UGFnZTo6
RnJhbWVSZXNvdXJjZVRyZWU6OlJlc291cmNlcz46OmNyZWF0ZSgpOworICAgIFJlZlB0cjxJbnNw
ZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheTxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpQYWdlOjpG
cmFtZVJlc291cmNlPj4gc3VicmVzb3VyY2VzID0gSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJy
YXk8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UGFnZTo6RnJhbWVSZXNvdXJjZT46OmNyZWF0ZSgp
OwogICAgIFJlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpQYWdlOjpGcmFtZVJlc291cmNl
VHJlZT4gcmVzdWx0ID0gSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UGFnZTo6RnJhbWVSZXNvdXJj
ZVRyZWU6OmNyZWF0ZSgpCiAgICAgICAgICAuc2V0RnJhbWUoZnJhbWVPYmplY3QpCiAgICAgICAg
ICAuc2V0UmVzb3VyY2VzKHN1YnJlc291cmNlcyk7CiAKICAgICBmb3IgKGF1dG8qIGNhY2hlZFJl
c291cmNlIDogY2FjaGVkUmVzb3VyY2VzRm9yRnJhbWUoZnJhbWUpKSB7Ci0gICAgICAgIFJlZlB0
cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpQYWdlOjpGcmFtZVJlc291cmNlVHJlZTo6UmVzb3Vy
Y2VzPiByZXNvdXJjZU9iamVjdCA9IEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlBhZ2U6OkZyYW1l
UmVzb3VyY2VUcmVlOjpSZXNvdXJjZXM6OmNyZWF0ZSgpCisgICAgICAgIFJlZlB0cjxJbnNwZWN0
b3I6OlR5cGVCdWlsZGVyOjpQYWdlOjpGcmFtZVJlc291cmNlPiByZXNvdXJjZU9iamVjdCA9IElu
c3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlBhZ2U6OkZyYW1lUmVzb3VyY2U6OmNyZWF0ZSgpCiAgICAg
ICAgICAgICAuc2V0VXJsKGNhY2hlZFJlc291cmNlLT51cmwoKSkKICAgICAgICAgICAgIC5zZXRU
eXBlKGNhY2hlZFJlc291cmNlVHlwZUpzb24oKmNhY2hlZFJlc291cmNlKSkKICAgICAgICAgICAg
IC5zZXRNaW1lVHlwZShjYWNoZWRSZXNvdXJjZS0+cmVzcG9uc2UoKS5taW1lVHlwZSgpKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuaCBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuaAppbmRleCBjYTRm
ZjJmMDAzY2ViYTk4MTY4ZDA3Nzk5MzM0YzVmYmQ1YzlhMzExLi45Zjg3ZDIyOWQ0MzY3MDk2ZjI4
NjAzODFlZjIzZDNiMjI1MzE5NGI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yUGFnZUFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvclBhZ2VBZ2VudC5oCkBAIC05MCw5ICs5MCw5IEBAIHB1YmxpYzoKIAogICAgIHN0YXRp
YyBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gcmVzb3VyY2VEYXRhKEZyYW1lKiwgY29uc3QgVVJM
JiwgU3RyaW5nKiB0ZXh0RW5jb2RpbmdOYW1lKTsKICAgICBzdGF0aWMgQ2FjaGVkUmVzb3VyY2Uq
IGNhY2hlZFJlc291cmNlKEZyYW1lKiwgY29uc3QgVVJMJik7Ci0gICAgc3RhdGljIEluc3BlY3Rv
cjo6VHlwZUJ1aWxkZXI6OlBhZ2U6OlJlc291cmNlVHlwZTo6RW51bSByZXNvdXJjZVR5cGVKc29u
KFJlc291cmNlVHlwZSk7CisgICAgc3RhdGljIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlBhZ2U6
OlJlc291cmNlVHlwZSByZXNvdXJjZVR5cGVKc29uKFJlc291cmNlVHlwZSk7CiAgICAgc3RhdGlj
IFJlc291cmNlVHlwZSBjYWNoZWRSZXNvdXJjZVR5cGUoY29uc3QgQ2FjaGVkUmVzb3VyY2UmKTsK
LSAgICBzdGF0aWMgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UGFnZTo6UmVzb3VyY2VUeXBlOjpF
bnVtIGNhY2hlZFJlc291cmNlVHlwZUpzb24oY29uc3QgQ2FjaGVkUmVzb3VyY2UmKTsKKyAgICBz
dGF0aWMgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UGFnZTo6UmVzb3VyY2VUeXBlIGNhY2hlZFJl
c291cmNlVHlwZUpzb24oY29uc3QgQ2FjaGVkUmVzb3VyY2UmKTsKIAogICAgIC8vIFBhZ2UgQVBJ
IGZvciBJbnNwZWN0b3JGcm9udGVuZAogICAgIHZpcnR1YWwgdm9pZCBlbmFibGUoRXJyb3JTdHJp
bmcqKSBvdmVycmlkZTsKQEAgLTExNSw3ICsxMTUsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2
b2lkIHNldFNob3dGUFNDb3VudGVyKEVycm9yU3RyaW5nKiwgYm9vbCBzaG93KSBvdmVycmlkZTsK
ICAgICB2aXJ0dWFsIHZvaWQgY2FuQ29udGludW91c2x5UGFpbnQoRXJyb3JTdHJpbmcqLCBib29s
Kikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHNldENvbnRpbnVvdXNQYWludGluZ0VuYWJs
ZWQoRXJyb3JTdHJpbmcqLCBib29sIGVuYWJsZWQpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9p
ZCBnZXRTY3JpcHRFeGVjdXRpb25TdGF0dXMoRXJyb3JTdHJpbmcqLCBJbnNwZWN0b3I6Okluc3Bl
Y3RvclBhZ2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlJlc3VsdDo6RW51bSopIG92ZXJyaWRl
OworICAgIHZpcnR1YWwgdm9pZCBnZXRTY3JpcHRFeGVjdXRpb25TdGF0dXMoRXJyb3JTdHJpbmcq
LCBJbnNwZWN0b3I6Okluc3BlY3RvclBhZ2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlJlc3Vs
dCopIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JpcHRFeGVjdXRpb25EaXNhYmxl
ZChFcnJvclN0cmluZyosIGJvb2wpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBzZXRUb3Vj
aEVtdWxhdGlvbkVuYWJsZWQoRXJyb3JTdHJpbmcqLCBib29sKSBvdmVycmlkZTsKICAgICB2aXJ0
dWFsIHZvaWQgc2V0RW11bGF0ZWRNZWRpYShFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYpIG92
ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJl
cGxheUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXBsYXlB
Z2VudC5jcHAKaW5kZXggZGYwODE4ZTg3ZjBhNzQwMGIwYTYxZTMxN2M0MjBkN2Y5MDUwYTYxNi4u
ZjQ4MGM1NDA3M2MwMDI3NTQ0ZWZhNDhjOWZhYjVlMWMxNGRhMmY0YiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJlcGxheUFnZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVwbGF5QWdlbnQuY3BwCkBAIC05MCwyMiAr
OTAsMjIgQEAgc3RhdGljIFBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OlJlcGxheTo6UmVwbGF5U2Vz
c2lvbj4gYnVpbGRJbnNwZWN0b3JPYmplY3RGb3JTZXMKICAgICByZXR1cm4gc2Vzc2lvbk9iamVj
dC5yZWxlYXNlKCk7CiB9CiAKLXN0YXRpYyBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpSZXBsYXk6
OlNlc3Npb25TdGF0ZTo6RW51bSBidWlsZEluc3BlY3Rvck9iamVjdEZvclNlc3Npb25TdGF0ZShT
ZXNzaW9uU3RhdGUgc2Vzc2lvblN0YXRlKQorc3RhdGljIFR5cGVCdWlsZGVyOjpSZXBsYXk6OlNl
c3Npb25TdGF0ZSBidWlsZEluc3BlY3Rvck9iamVjdEZvclNlc3Npb25TdGF0ZShXZWJDb3JlOjpT
ZXNzaW9uU3RhdGUgc2Vzc2lvblN0YXRlKQogewogICAgIHN3aXRjaCAoc2Vzc2lvblN0YXRlKSB7
Ci0gICAgY2FzZSBTZXNzaW9uU3RhdGU6OkNhcHR1cmluZzogcmV0dXJuIEluc3BlY3Rvcjo6VHlw
ZUJ1aWxkZXI6OlJlcGxheTo6U2Vzc2lvblN0YXRlOjpDYXB0dXJpbmc7Ci0gICAgY2FzZSBTZXNz
aW9uU3RhdGU6OkluYWN0aXZlOiByZXR1cm4gSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UmVwbGF5
OjpTZXNzaW9uU3RhdGU6OkluYWN0aXZlOwotICAgIGNhc2UgU2Vzc2lvblN0YXRlOjpSZXBsYXlp
bmc6IHJldHVybiBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpSZXBsYXk6OlNlc3Npb25TdGF0ZTo6
UmVwbGF5aW5nOworICAgIGNhc2UgV2ViQ29yZTo6U2Vzc2lvblN0YXRlOjpDYXB0dXJpbmc6IHJl
dHVybiBUeXBlQnVpbGRlcjo6UmVwbGF5OjpTZXNzaW9uU3RhdGU6OkNhcHR1cmluZzsKKyAgICBj
YXNlIFdlYkNvcmU6OlNlc3Npb25TdGF0ZTo6SW5hY3RpdmU6IHJldHVybiBUeXBlQnVpbGRlcjo6
UmVwbGF5OjpTZXNzaW9uU3RhdGU6OkluYWN0aXZlOworICAgIGNhc2UgV2ViQ29yZTo6U2Vzc2lv
blN0YXRlOjpSZXBsYXlpbmc6IHJldHVybiBUeXBlQnVpbGRlcjo6UmVwbGF5OjpTZXNzaW9uU3Rh
dGU6OlJlcGxheWluZzsKICAgICB9CiB9CiAKLXN0YXRpYyBJbnNwZWN0b3I6OlR5cGVCdWlsZGVy
OjpSZXBsYXk6OlNlZ21lbnRTdGF0ZTo6RW51bSBidWlsZEluc3BlY3Rvck9iamVjdEZvclNlZ21l
bnRTdGF0ZShTZWdtZW50U3RhdGUgc2VnbWVudFN0YXRlKQorc3RhdGljIFR5cGVCdWlsZGVyOjpS
ZXBsYXk6OlNlZ21lbnRTdGF0ZSBidWlsZEluc3BlY3Rvck9iamVjdEZvclNlZ21lbnRTdGF0ZShX
ZWJDb3JlOjpTZWdtZW50U3RhdGUgc2VnbWVudFN0YXRlKQogewogICAgIHN3aXRjaCAoc2VnbWVu
dFN0YXRlKSB7Ci0gICAgY2FzZSBTZWdtZW50U3RhdGU6OkFwcGVuZGluZzogcmV0dXJuIEluc3Bl
Y3Rvcjo6VHlwZUJ1aWxkZXI6OlJlcGxheTo6U2VnbWVudFN0YXRlOjpBcHBlbmRpbmc7Ci0gICAg
Y2FzZSBTZWdtZW50U3RhdGU6OlVubG9hZGVkOiByZXR1cm4gSW5zcGVjdG9yOjpUeXBlQnVpbGRl
cjo6UmVwbGF5OjpTZWdtZW50U3RhdGU6OlVubG9hZGVkOwotICAgIGNhc2UgU2VnbWVudFN0YXRl
OjpMb2FkZWQ6IHJldHVybiBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpSZXBsYXk6OlNlZ21lbnRT
dGF0ZTo6TG9hZGVkOwotICAgIGNhc2UgU2VnbWVudFN0YXRlOjpEaXNwYXRjaGluZzogcmV0dXJu
IEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlJlcGxheTo6U2VnbWVudFN0YXRlOjpEaXNwYXRjaGlu
ZzsKKyAgICBjYXNlIFdlYkNvcmU6OlNlZ21lbnRTdGF0ZTo6QXBwZW5kaW5nOiByZXR1cm4gVHlw
ZUJ1aWxkZXI6OlJlcGxheTo6U2VnbWVudFN0YXRlOjpBcHBlbmRpbmc7CisgICAgY2FzZSBXZWJD
b3JlOjpTZWdtZW50U3RhdGU6OlVubG9hZGVkOiByZXR1cm4gVHlwZUJ1aWxkZXI6OlJlcGxheTo6
U2VnbWVudFN0YXRlOjpVbmxvYWRlZDsKKyAgICBjYXNlIFdlYkNvcmU6OlNlZ21lbnRTdGF0ZTo6
TG9hZGVkOiByZXR1cm4gVHlwZUJ1aWxkZXI6OlJlcGxheTo6U2VnbWVudFN0YXRlOjpMb2FkZWQ7
CisgICAgY2FzZSBXZWJDb3JlOjpTZWdtZW50U3RhdGU6OkRpc3BhdGNoaW5nOiByZXR1cm4gVHlw
ZUJ1aWxkZXI6OlJlcGxheTo6U2VnbWVudFN0YXRlOjpEaXNwYXRjaGluZzsKICAgICB9CiB9CiAK
QEAgLTE2OCw3ICsxNjgsNyBAQCBJbnNwZWN0b3JSZXBsYXlBZ2VudDo6fkluc3BlY3RvclJlcGxh
eUFnZW50KCkKICAgICBBU1NFUlQoIW1fc2VnbWVudHNNYXAuc2l6ZSgpKTsKIH0KIAotU2Vzc2lv
blN0YXRlIEluc3BlY3RvclJlcGxheUFnZW50OjpzZXNzaW9uU3RhdGUoKSBjb25zdAorV2ViQ29y
ZTo6U2Vzc2lvblN0YXRlIEluc3BlY3RvclJlcGxheUFnZW50OjpzZXNzaW9uU3RhdGUoKSBjb25z
dAogewogICAgIHJldHVybiBtX3BhZ2UucmVwbGF5Q29udHJvbGxlcigpLnNlc3Npb25TdGF0ZSgp
OwogfQpAQCAtMTc5LDcgKzE3OSw3IEBAIHZvaWQgSW5zcGVjdG9yUmVwbGF5QWdlbnQ6OmRpZENy
ZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqCiAgICAgbV9i
YWNrZW5kRGlzcGF0Y2hlciA9IEluc3BlY3RvclJlcGxheUJhY2tlbmREaXNwYXRjaGVyOjpjcmVh
dGUoYmFja2VuZERpc3BhdGNoZXIsIHRoaXMpOwogCiAgICAgbV9pbnN0cnVtZW50aW5nQWdlbnRz
LT5zZXRJbnNwZWN0b3JSZXBsYXlBZ2VudCh0aGlzKTsKLSAgICBBU1NFUlQoc2Vzc2lvblN0YXRl
KCkgPT0gU2Vzc2lvblN0YXRlOjpJbmFjdGl2ZSk7CisgICAgQVNTRVJUKHNlc3Npb25TdGF0ZSgp
ID09IFdlYkNvcmU6OlNlc3Npb25TdGF0ZTo6SW5hY3RpdmUpOwogCiAgICAgLy8gS2VlcCB0cmFj
ayBvZiB0aGUgKGRlZmF1bHQpIHNlc3Npb24gY3VycmVudGx5IGxvYWRlZCBieSBSZXBsYXlDb250
cm9sbGVyLAogICAgIC8vIGFuZCBhbnkgc2VnbWVudHMgd2l0aGluIHRoZSBzZXNzaW9uLgpAQCAt
MjA0LDE5ICsyMDQsMTkgQEAgdm9pZCBJbnNwZWN0b3JSZXBsYXlBZ2VudDo6d2lsbERlc3Ryb3lG
cm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yRGlzY29ubmVjdFJlYXMKIAogdm9pZCBJbnNwZWN0
b3JSZXBsYXlBZ2VudDo6ZnJhbWVOYXZpZ2F0ZWQoRG9jdW1lbnRMb2FkZXIqIGxvYWRlcikKIHsK
LSAgICBpZiAoc2Vzc2lvblN0YXRlKCkgIT0gU2Vzc2lvblN0YXRlOjpJbmFjdGl2ZSkKKyAgICBp
ZiAoc2Vzc2lvblN0YXRlKCkgIT0gV2ViQ29yZTo6U2Vzc2lvblN0YXRlOjpJbmFjdGl2ZSkKICAg
ICAgICAgbV9wYWdlLnJlcGxheUNvbnRyb2xsZXIoKS5mcmFtZU5hdmlnYXRlZChsb2FkZXIpOwog
fQogCiB2b2lkIEluc3BlY3RvclJlcGxheUFnZW50OjpmcmFtZURldGFjaGVkKEZyYW1lKiBmcmFt
ZSkKIHsKLSAgICBpZiAoc2Vzc2lvblN0YXRlKCkgIT0gU2Vzc2lvblN0YXRlOjpJbmFjdGl2ZSkK
KyAgICBpZiAoc2Vzc2lvblN0YXRlKCkgIT0gV2ViQ29yZTo6U2Vzc2lvblN0YXRlOjpJbmFjdGl2
ZSkKICAgICAgICAgbV9wYWdlLnJlcGxheUNvbnRyb2xsZXIoKS5mcmFtZURldGFjaGVkKGZyYW1l
KTsKIH0KIAogdm9pZCBJbnNwZWN0b3JSZXBsYXlBZ2VudDo6d2lsbERpc3BhdGNoRXZlbnQoY29u
c3QgRXZlbnQmIGV2ZW50LCBGcmFtZSogZnJhbWUpCiB7Ci0gICAgaWYgKHNlc3Npb25TdGF0ZSgp
ICE9IFNlc3Npb25TdGF0ZTo6SW5hY3RpdmUpCisgICAgaWYgKHNlc3Npb25TdGF0ZSgpICE9IFdl
YkNvcmU6OlNlc3Npb25TdGF0ZTo6SW5hY3RpdmUpCiAgICAgICAgIG1fcGFnZS5yZXBsYXlDb250
cm9sbGVyKCkud2lsbERpc3BhdGNoRXZlbnQoZXZlbnQsIGZyYW1lKTsKIH0KIApAQCAtMzE5LDcg
KzMxOSw3IEBAIHZvaWQgSW5zcGVjdG9yUmVwbGF5QWdlbnQ6OnBsYXliYWNrRmluaXNoZWQoKQog
CiB2b2lkIEluc3BlY3RvclJlcGxheUFnZW50OjpzdGFydENhcHR1cmluZyhFcnJvclN0cmluZyog
ZXJyb3JTdHJpbmcpCiB7Ci0gICAgaWYgKHNlc3Npb25TdGF0ZSgpICE9IFNlc3Npb25TdGF0ZTo6
SW5hY3RpdmUpIHsKKyAgICBpZiAoc2Vzc2lvblN0YXRlKCkgIT0gV2ViQ29yZTo6U2Vzc2lvblN0
YXRlOjpJbmFjdGl2ZSkgewogICAgICAgICAqZXJyb3JTdHJpbmcgPSBBU0NJSUxpdGVyYWwoIkNh
bid0IHN0YXJ0IGNhcHR1cmluZyBpZiB0aGUgc2Vzc2lvbiBpcyBhbHJlYWR5IGNhcHR1cmluZyBv
ciByZXBsYXlpbmcuIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zMjksNyArMzI5LDcg
QEAgdm9pZCBJbnNwZWN0b3JSZXBsYXlBZ2VudDo6c3RhcnRDYXB0dXJpbmcoRXJyb3JTdHJpbmcq
IGVycm9yU3RyaW5nKQogCiB2b2lkIEluc3BlY3RvclJlcGxheUFnZW50OjpzdG9wQ2FwdHVyaW5n
KEVycm9yU3RyaW5nKiBlcnJvclN0cmluZykKIHsKLSAgICBpZiAoc2Vzc2lvblN0YXRlKCkgIT0g
U2Vzc2lvblN0YXRlOjpDYXB0dXJpbmcpIHsKKyAgICBpZiAoc2Vzc2lvblN0YXRlKCkgIT0gV2Vi
Q29yZTo6U2Vzc2lvblN0YXRlOjpDYXB0dXJpbmcpIHsKICAgICAgICAgKmVycm9yU3RyaW5nID0g
QVNDSUlMaXRlcmFsKCJDYW4ndCBzdG9wIGNhcHR1cmluZyBpZiBjYXB0dXJlIGlzIG5vdCBpbiBw
cm9ncmVzcy4iKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTM1MCw3ICszNTAsNyBAQCB2
b2lkIEluc3BlY3RvclJlcGxheUFnZW50OjpyZXBsYXlUb1Bvc2l0aW9uKEVycm9yU3RyaW5nKiBl
cnJvclN0cmluZywgY29uc3QgUmVmUAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYg
KHNlc3Npb25TdGF0ZSgpID09IFNlc3Npb25TdGF0ZTo6Q2FwdHVyaW5nKSB7CisgICAgaWYgKHNl
c3Npb25TdGF0ZSgpID09IFdlYkNvcmU6OlNlc3Npb25TdGF0ZTo6Q2FwdHVyaW5nKSB7CiAgICAg
ICAgICplcnJvclN0cmluZyA9IEFTQ0lJTGl0ZXJhbCgiQ2FuJ3Qgc3RhcnQgcmVwbGF5IHdoaWxl
IGNhcHR1cmUgaXMgaW4gcHJvZ3Jlc3MuIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0z
NjAsNyArMzYwLDcgQEAgdm9pZCBJbnNwZWN0b3JSZXBsYXlBZ2VudDo6cmVwbGF5VG9Qb3NpdGlv
bihFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGNvbnN0IFJlZlAKIAogdm9pZCBJbnNwZWN0b3JS
ZXBsYXlBZ2VudDo6cmVwbGF5VG9Db21wbGV0aW9uKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywg
Ym9vbCBmYXN0UmVwbGF5KQogewotICAgIGlmIChzZXNzaW9uU3RhdGUoKSA9PSBTZXNzaW9uU3Rh
dGU6OkNhcHR1cmluZykgeworICAgIGlmIChzZXNzaW9uU3RhdGUoKSA9PSBXZWJDb3JlOjpTZXNz
aW9uU3RhdGU6OkNhcHR1cmluZykgewogICAgICAgICAqZXJyb3JTdHJpbmcgPSBBU0NJSUxpdGVy
YWwoIkNhbid0IHN0YXJ0IHJlcGxheSB3aGlsZSBjYXB0dXJlIGlzIGluIHByb2dyZXNzLiIpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMzcwLDcgKzM3MCw3IEBAIHZvaWQgSW5zcGVjdG9y
UmVwbGF5QWdlbnQ6OnJlcGxheVRvQ29tcGxldGlvbihFcnJvclN0cmluZyogZXJyb3JTdHJpbmcs
IGJvb2wgZmFzCiAKIHZvaWQgSW5zcGVjdG9yUmVwbGF5QWdlbnQ6OnBhdXNlUGxheWJhY2soRXJy
b3JTdHJpbmcqIGVycm9yU3RyaW5nKQogewotICAgIGlmIChzZXNzaW9uU3RhdGUoKSAhPSBTZXNz
aW9uU3RhdGU6OlJlcGxheWluZykgeworICAgIGlmIChzZXNzaW9uU3RhdGUoKSAhPSBXZWJDb3Jl
OjpTZXNzaW9uU3RhdGU6OlJlcGxheWluZykgewogICAgICAgICAqZXJyb3JTdHJpbmcgPSBBU0NJ
SUxpdGVyYWwoIkNhbid0IHBhdXNlIHBsYXliYWNrIGlmIHBsYXliYWNrIGlzIG5vdCBpbiBwcm9n
cmVzcy4iKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTM4MCw3ICszODAsNyBAQCB2b2lk
IEluc3BlY3RvclJlcGxheUFnZW50OjpwYXVzZVBsYXliYWNrKEVycm9yU3RyaW5nKiBlcnJvclN0
cmluZykKIAogdm9pZCBJbnNwZWN0b3JSZXBsYXlBZ2VudDo6Y2FuY2VsUGxheWJhY2soRXJyb3JT
dHJpbmcqIGVycm9yU3RyaW5nKQogewotICAgIGlmIChzZXNzaW9uU3RhdGUoKSA9PSBTZXNzaW9u
U3RhdGU6OkNhcHR1cmluZykgeworICAgIGlmIChzZXNzaW9uU3RhdGUoKSA9PSBXZWJDb3JlOjpT
ZXNzaW9uU3RhdGU6OkNhcHR1cmluZykgewogICAgICAgICAqZXJyb3JTdHJpbmcgPSBBU0NJSUxp
dGVyYWwoIkNhbid0IGNhbmNlbCBwbGF5YmFjayBpZiBjYXB0dXJlIGlzIGluIHByb2dyZXNzLiIp
OwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMzg4LDExICszODgsMTEgQEAgdm9pZCBJbnNw
ZWN0b3JSZXBsYXlBZ2VudDo6Y2FuY2VsUGxheWJhY2soRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5n
KQogICAgIG1fcGFnZS5yZXBsYXlDb250cm9sbGVyKCkuY2FuY2VsUGxheWJhY2soKTsKIH0KIAot
dm9pZCBJbnNwZWN0b3JSZXBsYXlBZ2VudDo6c3dpdGNoU2Vzc2lvbihFcnJvclN0cmluZyogZXJy
b3JTdHJpbmcsIFNlc3Npb25JZGVudGlmaWVyIGlkZW50aWZpZXIpCit2b2lkIEluc3BlY3RvclJl
cGxheUFnZW50Ojpzd2l0Y2hTZXNzaW9uKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgVHlwZUJ1
aWxkZXI6OlJlcGxheTo6U2Vzc2lvbklkZW50aWZpZXIgaWRlbnRpZmllcikKIHsKICAgICBBU1NF
UlQoaWRlbnRpZmllciA+IDApOwogCi0gICAgaWYgKHNlc3Npb25TdGF0ZSgpICE9IFNlc3Npb25T
dGF0ZTo6SW5hY3RpdmUpIHsKKyAgICBpZiAoc2Vzc2lvblN0YXRlKCkgIT0gV2ViQ29yZTo6U2Vz
c2lvblN0YXRlOjpJbmFjdGl2ZSkgewogICAgICAgICAqZXJyb3JTdHJpbmcgPSBBU0NJSUxpdGVy
YWwoIkNhbid0IHN3aXRjaCBzZXNzaW9ucyB1bmxlc3MgdGhlIHNlc3Npb24gaXMgbmVpdGhlciBj
YXB0dXJpbmcgb3IgcmVwbGF5aW5nLiIpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtNDA0
LDcgKzQwNCw3IEBAIHZvaWQgSW5zcGVjdG9yUmVwbGF5QWdlbnQ6OnN3aXRjaFNlc3Npb24oRXJy
b3JTdHJpbmcqIGVycm9yU3RyaW5nLCBTZXNzaW9uSWRlbnRpCiAgICAgbV9wYWdlLnJlcGxheUNv
bnRyb2xsZXIoKS5zd2l0Y2hTZXNzaW9uKHNlc3Npb24pOwogfQogCi12b2lkIEluc3BlY3RvclJl
cGxheUFnZW50OjppbnNlcnRTZXNzaW9uU2VnbWVudChFcnJvclN0cmluZyogZXJyb3JTdHJpbmcs
IFNlc3Npb25JZGVudGlmaWVyIHNlc3Npb25JZGVudGlmaWVyLCBTZWdtZW50SWRlbnRpZmllciBz
ZWdtZW50SWRlbnRpZmllciwgaW50IHNlZ21lbnRJbmRleCkKK3ZvaWQgSW5zcGVjdG9yUmVwbGF5
QWdlbnQ6Omluc2VydFNlc3Npb25TZWdtZW50KEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgVHlw
ZUJ1aWxkZXI6OlJlcGxheTo6U2Vzc2lvbklkZW50aWZpZXIgc2Vzc2lvbklkZW50aWZpZXIsIFNl
Z21lbnRJZGVudGlmaWVyIHNlZ21lbnRJZGVudGlmaWVyLCBpbnQgc2VnbWVudEluZGV4KQogewog
ICAgIEFTU0VSVChzZXNzaW9uSWRlbnRpZmllciA+IDApOwogICAgIEFTU0VSVChzZWdtZW50SWRl
bnRpZmllciA+IDApOwpAQCAtNDIxLDcgKzQyMSw3IEBAIHZvaWQgSW5zcGVjdG9yUmVwbGF5QWdl
bnQ6Omluc2VydFNlc3Npb25TZWdtZW50KEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgU2Vzc2lv
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoc2Vzc2lvbiA9PSBtX3BhZ2UucmVw
bGF5Q29udHJvbGxlcigpLmxvYWRlZFNlc3Npb24oKSAmJiBzZXNzaW9uU3RhdGUoKSAhPSBTZXNz
aW9uU3RhdGU6OkluYWN0aXZlKSB7CisgICAgaWYgKHNlc3Npb24gPT0gbV9wYWdlLnJlcGxheUNv
bnRyb2xsZXIoKS5sb2FkZWRTZXNzaW9uKCkgJiYgc2Vzc2lvblN0YXRlKCkgIT0gV2ViQ29yZTo6
U2Vzc2lvblN0YXRlOjpJbmFjdGl2ZSkgewogICAgICAgICAqZXJyb3JTdHJpbmcgPSBBU0NJSUxp
dGVyYWwoIkNhbid0IG1vZGlmeSBhIGxvYWRlZCBzZXNzaW9uIHVubGVzcyB0aGUgc2Vzc2lvbiBp
cyBpbmFjdGl2ZS4iKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTQzMCw3ICs0MzAsNyBA
QCB2b2lkIEluc3BlY3RvclJlcGxheUFnZW50OjppbnNlcnRTZXNzaW9uU2VnbWVudChFcnJvclN0
cmluZyogZXJyb3JTdHJpbmcsIFNlc3NpbwogICAgIHNlc3Npb25Nb2RpZmllZChzZXNzaW9uKTsK
IH0KIAotdm9pZCBJbnNwZWN0b3JSZXBsYXlBZ2VudDo6cmVtb3ZlU2Vzc2lvblNlZ21lbnQoRXJy
b3JTdHJpbmcqIGVycm9yU3RyaW5nLCBTZXNzaW9uSWRlbnRpZmllciBpZGVudGlmaWVyLCBpbnQg
c2VnbWVudEluZGV4KQordm9pZCBJbnNwZWN0b3JSZXBsYXlBZ2VudDo6cmVtb3ZlU2Vzc2lvblNl
Z21lbnQoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBUeXBlQnVpbGRlcjo6UmVwbGF5OjpTZXNz
aW9uSWRlbnRpZmllciBpZGVudGlmaWVyLCBpbnQgc2VnbWVudEluZGV4KQogewogICAgIEFTU0VS
VChpZGVudGlmaWVyID4gMCk7CiAgICAgQVNTRVJUKHNlZ21lbnRJbmRleCA+PSAwKTsKQEAgLTQ0
NSw3ICs0NDUsNyBAQCB2b2lkIEluc3BlY3RvclJlcGxheUFnZW50OjpyZW1vdmVTZXNzaW9uU2Vn
bWVudChFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIFNlc3NpbwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCi0gICAgaWYgKHNlc3Npb24gPT0gbV9wYWdlLnJlcGxheUNvbnRyb2xsZXIoKS5sb2Fk
ZWRTZXNzaW9uKCkgJiYgc2Vzc2lvblN0YXRlKCkgIT0gU2Vzc2lvblN0YXRlOjpJbmFjdGl2ZSkg
eworICAgIGlmIChzZXNzaW9uID09IG1fcGFnZS5yZXBsYXlDb250cm9sbGVyKCkubG9hZGVkU2Vz
c2lvbigpICYmIHNlc3Npb25TdGF0ZSgpICE9IFdlYkNvcmU6OlNlc3Npb25TdGF0ZTo6SW5hY3Rp
dmUpIHsKICAgICAgICAgKmVycm9yU3RyaW5nID0gQVNDSUlMaXRlcmFsKCJDYW4ndCBtb2RpZnkg
YSBsb2FkZWQgc2Vzc2lvbiB1bmxlc3MgdGhlIHNlc3Npb24gaXMgaW5hY3RpdmUuIik7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CkBAIC00ODAsNyArNDgwLDcgQEAgUGFzc1JlZlB0cjxSZXBsYXlT
ZXNzaW9uU2VnbWVudD4gSW5zcGVjdG9yUmVwbGF5QWdlbnQ6OmZpbmRTZWdtZW50KEVycm9yU3Ry
aW5nKgogICAgIHJldHVybiBpdC0+dmFsdWU7CiB9CiAKLXZvaWQgSW5zcGVjdG9yUmVwbGF5QWdl
bnQ6OmN1cnJlbnRSZXBsYXlTdGF0ZShFcnJvclN0cmluZyosIFNlc3Npb25JZGVudGlmaWVyKiBz
ZXNzaW9uSWRlbnRpZmllciwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6T3B0T3V0cHV0PGludD4q
IHNlZ21lbnRJZGVudGlmaWVyLCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpSZXBsYXk6OlNlc3Np
b25TdGF0ZTo6RW51bSogc2Vzc2lvblN0YXRlLCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpSZXBs
YXk6OlNlZ21lbnRTdGF0ZTo6RW51bSogc2VnbWVudFN0YXRlLCBSZWZQdHI8SW5zcGVjdG9yOjpU
eXBlQnVpbGRlcjo6UmVwbGF5OjpSZXBsYXlQb3NpdGlvbj4mIHJlcGxheVBvc2l0aW9uKQordm9p
ZCBJbnNwZWN0b3JSZXBsYXlBZ2VudDo6Y3VycmVudFJlcGxheVN0YXRlKEVycm9yU3RyaW5nKiwg
VHlwZUJ1aWxkZXI6OlJlcGxheTo6U2Vzc2lvbklkZW50aWZpZXIqIHNlc3Npb25JZGVudGlmaWVy
LCBUeXBlQnVpbGRlcjo6T3B0T3V0cHV0PFR5cGVCdWlsZGVyOjpSZXBsYXk6OlNlZ21lbnRJZGVu
dGlmaWVyPiogc2VnbWVudElkZW50aWZpZXIsIFR5cGVCdWlsZGVyOjpSZXBsYXk6OlNlc3Npb25T
dGF0ZSogc2Vzc2lvblN0YXRlLCBUeXBlQnVpbGRlcjo6UmVwbGF5OjpTZWdtZW50U3RhdGUqIHNl
Z21lbnRTdGF0ZSwgUmVmUHRyPFR5cGVCdWlsZGVyOjpSZXBsYXk6OlJlcGxheVBvc2l0aW9uPiYg
cmVwbGF5UG9zaXRpb24pCiB7CiAgICAgKnNlc3Npb25TdGF0ZSA9IGJ1aWxkSW5zcGVjdG9yT2Jq
ZWN0Rm9yU2Vzc2lvblN0YXRlKG1fcGFnZS5yZXBsYXlDb250cm9sbGVyKCkuc2Vzc2lvblN0YXRl
KCkpOwogICAgICpzZWdtZW50U3RhdGUgPSBidWlsZEluc3BlY3Rvck9iamVjdEZvclNlZ21lbnRT
dGF0ZShtX3BhZ2UucmVwbGF5Q29udHJvbGxlcigpLnNlZ21lbnRTdGF0ZSgpKTsKQEAgLTQ5Miwx
NCArNDkyLDE0IEBAIHZvaWQgSW5zcGVjdG9yUmVwbGF5QWdlbnQ6OmN1cnJlbnRSZXBsYXlTdGF0
ZShFcnJvclN0cmluZyosIFNlc3Npb25JZGVudGlmaWVyKiBzCiAgICAgcmVwbGF5UG9zaXRpb24g
PSBidWlsZEluc3BlY3Rvck9iamVjdEZvclBvc2l0aW9uKG1fcGFnZS5yZXBsYXlDb250cm9sbGVy
KCkuY3VycmVudFBvc2l0aW9uKCkpOwogfQogCi12b2lkIEluc3BlY3RvclJlcGxheUFnZW50Ojpn
ZXRBdmFpbGFibGVTZXNzaW9ucyhFcnJvclN0cmluZyosIFJlZlB0cjxJbnNwZWN0b3I6OlR5cGVC
dWlsZGVyOjpBcnJheTxTZXNzaW9uSWRlbnRpZmllcj4+JiBzZXNzaW9uc0xpc3QpCit2b2lkIElu
c3BlY3RvclJlcGxheUFnZW50OjpnZXRBdmFpbGFibGVTZXNzaW9ucyhFcnJvclN0cmluZyosIFJl
ZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8U2Vzc2lvbklkZW50aWZpZXI+PiYgc2Vzc2lvbnNMaXN0
KQogewotICAgIHNlc3Npb25zTGlzdCA9IFR5cGVCdWlsZGVyOjpBcnJheTxTZXNzaW9uSWRlbnRp
Zmllcj46OmNyZWF0ZSgpOworICAgIHNlc3Npb25zTGlzdCA9IFR5cGVCdWlsZGVyOjpBcnJheTxU
eXBlQnVpbGRlcjo6UmVwbGF5OjpTZXNzaW9uSWRlbnRpZmllcj46OmNyZWF0ZSgpOwogICAgIGZv
ciAoYXV0byYgcGFpciA6IG1fc2Vzc2lvbnNNYXApCiAgICAgICAgIHNlc3Npb25zTGlzdC0+YWRk
SXRlbShwYWlyLmtleSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yUmVwbGF5QWdlbnQ6OmdldFNlc3Np
b25EYXRhKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgU2Vzc2lvbklkZW50aWZpZXIgaWRlbnRp
ZmllciwgUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlJlcGxheTo6UmVwbGF5U2Vzc2lv
bj4mIHNlcmlhbGl6ZWRPYmplY3QpCit2b2lkIEluc3BlY3RvclJlcGxheUFnZW50OjpnZXRTZXNz
aW9uRGF0YShFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIFR5cGVCdWlsZGVyOjpSZXBsYXk6OlNl
c3Npb25JZGVudGlmaWVyIGlkZW50aWZpZXIsIFJlZlB0cjxUeXBlQnVpbGRlcjo6UmVwbGF5OjpS
ZXBsYXlTZXNzaW9uPiYgc2VyaWFsaXplZE9iamVjdCkKIHsKICAgICBSZWZQdHI8UmVwbGF5U2Vz
c2lvbj4gc2Vzc2lvbiA9IGZpbmRTZXNzaW9uKGVycm9yU3RyaW5nLCBpZGVudGlmaWVyKTsKICAg
ICBpZiAoIXNlc3Npb24pIHsKQEAgLTUxMCw3ICs1MTAsNyBAQCB2b2lkIEluc3BlY3RvclJlcGxh
eUFnZW50OjpnZXRTZXNzaW9uRGF0YShFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIFNlc3Npb25J
ZGVudAogICAgIHNlcmlhbGl6ZWRPYmplY3QgPSBidWlsZEluc3BlY3Rvck9iamVjdEZvclNlc3Np
b24oc2Vzc2lvbik7CiB9CiAKLXZvaWQgSW5zcGVjdG9yUmVwbGF5QWdlbnQ6OmdldFNlZ21lbnRE
YXRhKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgU2VnbWVudElkZW50aWZpZXIgaWRlbnRpZmll
ciwgUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlJlcGxheTo6U2Vzc2lvblNlZ21lbnQ+
JiBzZXJpYWxpemVkT2JqZWN0KQordm9pZCBJbnNwZWN0b3JSZXBsYXlBZ2VudDo6Z2V0U2VnbWVu
dERhdGEoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBUeXBlQnVpbGRlcjo6UmVwbGF5OjpTZWdt
ZW50SWRlbnRpZmllciBpZGVudGlmaWVyLCBSZWZQdHI8VHlwZUJ1aWxkZXI6OlJlcGxheTo6U2Vz
c2lvblNlZ21lbnQ+JiBzZXJpYWxpemVkT2JqZWN0KQogewogICAgIFJlZlB0cjxSZXBsYXlTZXNz
aW9uU2VnbWVudD4gc2VnbWVudCA9IGZpbmRTZWdtZW50KGVycm9yU3RyaW5nLCBpZGVudGlmaWVy
KTsKICAgICBpZiAoIXNlZ21lbnQpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JSZXBsYXlBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvclJlcGxheUFnZW50LmgKaW5kZXggNjljMTRiNjU1NDRjODIzMTc5MjQ1YWM0ODBkY2Q0
M2RjMzYxZjMwZi4uZjdiY2U2ZjRjZmIwOWFmNGQ0MmRjMTZmMjEzM2IyNWY1ODc5NDFiNCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJlcGxheUFnZW50LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJlcGxheUFnZW50LmgKQEAg
LTEwMSwxOCArMTAxLDE4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgY2FuY2VsUGxheWJh
Y2soRXJyb3JTdHJpbmcqKSBvdmVycmlkZTsKIAogICAgIHZpcnR1YWwgdm9pZCBzd2l0Y2hTZXNz
aW9uKEVycm9yU3RyaW5nKiwgU2Vzc2lvbklkZW50aWZpZXIpIG92ZXJyaWRlOwotICAgIHZpcnR1
YWwgdm9pZCBpbnNlcnRTZXNzaW9uU2VnbWVudChFcnJvclN0cmluZyosIFNlc3Npb25JZGVudGlm
aWVyLCBTZWdtZW50SWRlbnRpZmllciwgaW50IHNlZ21lbnRJbmRleCkgb3ZlcnJpZGU7Ci0gICAg
dmlydHVhbCB2b2lkIHJlbW92ZVNlc3Npb25TZWdtZW50KEVycm9yU3RyaW5nKiwgU2Vzc2lvbklk
ZW50aWZpZXIsIGludCBzZWdtZW50SW5kZXgpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBp
bnNlcnRTZXNzaW9uU2VnbWVudChFcnJvclN0cmluZyosIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6
OlJlcGxheTo6U2Vzc2lvbklkZW50aWZpZXIsIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlJlcGxh
eTo6U2VnbWVudElkZW50aWZpZXIsIGludCBzZWdtZW50SW5kZXgpIG92ZXJyaWRlOworICAgIHZp
cnR1YWwgdm9pZCByZW1vdmVTZXNzaW9uU2VnbWVudChFcnJvclN0cmluZyosIEluc3BlY3Rvcjo6
VHlwZUJ1aWxkZXI6OlJlcGxheTo6U2Vzc2lvbklkZW50aWZpZXIsIGludCBzZWdtZW50SW5kZXgp
IG92ZXJyaWRlOwogCi0gICAgdmlydHVhbCB2b2lkIGN1cnJlbnRSZXBsYXlTdGF0ZShFcnJvclN0
cmluZyosIFNlc3Npb25JZGVudGlmaWVyKiwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6T3B0T3V0
cHV0PGludD4qIHNlZ21lbnRJZGVudGlmaWVyLCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpSZXBs
YXk6OlNlc3Npb25TdGF0ZTo6RW51bSogc2Vzc2lvblN0YXRlLCBJbnNwZWN0b3I6OlR5cGVCdWls
ZGVyOjpSZXBsYXk6OlNlZ21lbnRTdGF0ZTo6RW51bSogc2VnbWVudFN0YXRlLCBSZWZQdHI8SW5z
cGVjdG9yOjpUeXBlQnVpbGRlcjo6UmVwbGF5OjpSZXBsYXlQb3NpdGlvbj4mKSBvdmVycmlkZTsK
LSAgICB2aXJ0dWFsIHZvaWQgZ2V0QXZhaWxhYmxlU2Vzc2lvbnMoRXJyb3JTdHJpbmcqLCBSZWZQ
dHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk8U2Vzc2lvbklkZW50aWZpZXI+PiYpIG92
ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBnZXRTZXNzaW9uRGF0YShFcnJvclN0cmluZyosIFNl
c3Npb25JZGVudGlmaWVyLCBSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UmVwbGF5OjpS
ZXBsYXlTZXNzaW9uPiYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBnZXRTZWdtZW50RGF0
YShFcnJvclN0cmluZyosIFNlZ21lbnRJZGVudGlmaWVyLCBSZWZQdHI8SW5zcGVjdG9yOjpUeXBl
QnVpbGRlcjo6UmVwbGF5OjpTZXNzaW9uU2VnbWVudD4mKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFs
IHZvaWQgY3VycmVudFJlcGxheVN0YXRlKEVycm9yU3RyaW5nKiwgSW5zcGVjdG9yOjpUeXBlQnVp
bGRlcjo6UmVwbGF5OjpTZXNzaW9uSWRlbnRpZmllciosIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6
Ok9wdE91dHB1dDxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpSZXBsYXk6OlNlZ21lbnRJZGVudGlm
aWVyPiosIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlJlcGxheTo6U2Vzc2lvblN0YXRlKiwgSW5z
cGVjdG9yOjpUeXBlQnVpbGRlcjo6UmVwbGF5OjpTZWdtZW50U3RhdGUqIHNlZ21lbnRTdGF0ZSwg
UmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlJlcGxheTo6UmVwbGF5UG9zaXRpb24+Jikg
b3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGdldEF2YWlsYWJsZVNlc3Npb25zKEVycm9yU3Ry
aW5nKiwgUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5PEluc3BlY3Rvcjo6VHlw
ZUJ1aWxkZXI6OlJlcGxheTo6U2Vzc2lvbklkZW50aWZpZXI+PiYpIG92ZXJyaWRlOworICAgIHZp
cnR1YWwgdm9pZCBnZXRTZXNzaW9uRGF0YShFcnJvclN0cmluZyosIEluc3BlY3Rvcjo6VHlwZUJ1
aWxkZXI6OlJlcGxheTo6U2Vzc2lvbklkZW50aWZpZXIsIFJlZlB0cjxJbnNwZWN0b3I6OlR5cGVC
dWlsZGVyOjpSZXBsYXk6OlJlcGxheVNlc3Npb24+Jikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2
b2lkIGdldFNlZ21lbnREYXRhKEVycm9yU3RyaW5nKiwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6
UmVwbGF5OjpTZWdtZW50SWRlbnRpZmllciwgUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6
OlJlcGxheTo6U2Vzc2lvblNlZ21lbnQ+Jikgb3ZlcnJpZGU7CiAKIHByaXZhdGU6CiAgICAgUGFz
c1JlZlB0cjxSZXBsYXlTZXNzaW9uPiBmaW5kU2Vzc2lvbihFcnJvclN0cmluZyosIFNlc3Npb25J
ZGVudGlmaWVyKTsKICAgICBQYXNzUmVmUHRyPFJlcGxheVNlc3Npb25TZWdtZW50PiBmaW5kU2Vn
bWVudChFcnJvclN0cmluZyosIFNlZ21lbnRJZGVudGlmaWVyKTsKLSAgICBTZXNzaW9uU3RhdGUg
c2Vzc2lvblN0YXRlKCkgY29uc3Q7CisgICAgV2ViQ29yZTo6U2Vzc2lvblN0YXRlIHNlc3Npb25T
dGF0ZSgpIGNvbnN0OwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9y
UmVwbGF5RnJvbnRlbmREaXNwYXRjaGVyPiBtX2Zyb250ZW5kRGlzcGF0Y2hlcjsKICAgICBSZWZQ
dHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JSZXBsYXlCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5k
RGlzcGF0Y2hlcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JSZXNvdXJjZUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JS
ZXNvdXJjZUFnZW50LmNwcAppbmRleCBhNDcwMzBkMmRmMTczYjA1ZTBmMWFhODMyODYxN2QwMThm
MGZmMDEwLi5iNDY4ZjM1NTY5OTRmNjY5YTYwODMyYWFhOWZlMTk1YzA1YzBkMjQzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlQWdlbnQuY3Bw
CkBAIC0zMTcsNyArMzE3LDcgQEAgdm9pZCBJbnNwZWN0b3JSZXNvdXJjZUFnZW50Ojp3aWxsU2Vu
ZFJlcXVlc3QodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBEb2N1bWVudEwKICAgICAgICAgcmVx
dWVzdC5zZXRIVFRQSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6OkNhY2hlQ29udHJvbCwgIm5v
LWNhY2hlIik7CiAgICAgfQogCi0gICAgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UGFnZTo6UmVz
b3VyY2VUeXBlOjpFbnVtIHJlc291cmNlVHlwZSA9IEluc3BlY3RvclBhZ2VBZ2VudDo6cmVzb3Vy
Y2VUeXBlSnNvbih0eXBlKTsKKyAgICBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpQYWdlOjpSZXNv
dXJjZVR5cGUgcmVzb3VyY2VUeXBlID0gSW5zcGVjdG9yUGFnZUFnZW50OjpyZXNvdXJjZVR5cGVK
c29uKHR5cGUpOwogCiAgICAgUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6Ok5ldHdvcms6
OkluaXRpYXRvcj4gaW5pdGlhdG9yT2JqZWN0ID0gYnVpbGRJbml0aWF0b3JPYmplY3QobG9hZGVy
LT5mcmFtZSgpID8gbG9hZGVyLT5mcmFtZSgpLT5kb2N1bWVudCgpIDogbnVsbHB0cik7CiAgICAg
bV9mcm9udGVuZERpc3BhdGNoZXItPnJlcXVlc3RXaWxsQmVTZW50KHJlcXVlc3RJZCwgbV9wYWdl
QWdlbnQtPmZyYW1lSWQobG9hZGVyLT5mcmFtZSgpKSwgbV9wYWdlQWdlbnQtPmxvYWRlcklkKGxv
YWRlciksIGxvYWRlci0+dXJsKCkuc3RyaW5nKCksIGJ1aWxkT2JqZWN0Rm9yUmVzb3VyY2VSZXF1
ZXN0KHJlcXVlc3QpLCBjdXJyZW50VGltZSgpLCBpbml0aWF0b3JPYmplY3QsIGJ1aWxkT2JqZWN0
Rm9yUmVzb3VyY2VSZXNwb25zZShyZWRpcmVjdFJlc3BvbnNlLCBsb2FkZXIpLCB0eXBlICE9IElu
c3BlY3RvclBhZ2VBZ2VudDo6T3RoZXJSZXNvdXJjZSA/ICZyZXNvdXJjZVR5cGUgOiBudWxscHRy
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNo
ZWV0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNw
cAppbmRleCBjMzg4Mzc3ODdhNmMxZjJmM2VmYjNkZGI5MWVmNzI1NTQ4NWE5ZDE4Li44ZjJiODJi
N2Y2YjRiZmEyOTA5NjM3MWFlMmEwZGEwNjdlN2Y4OTQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwCkBAIC0xNjYsNyArMTY2LDcgQEAg
c3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q1NTOjpTb3VyY2VSYW5n
ZT4gYnVpbGRTb3VyY2VSYW5nZU9iamUKIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6VHlw
ZUJ1aWxkZXI6OkNTUzo6Q1NTTWVkaWE+IGJ1aWxkTWVkaWFPYmplY3QoY29uc3QgTWVkaWFMaXN0
KiBtZWRpYSwgTWVkaWFMaXN0U291cmNlIG1lZGlhTGlzdFNvdXJjZSwgY29uc3QgU3RyaW5nJiBz
b3VyY2VVUkwpCiB7CiAgICAgLy8gTWFrZSBjZXJ0YWluIGNvbXBpbGVycyBoYXBweSBieSBpbml0
aWFsaXppbmcgfHNvdXJjZXwgdXAtZnJvbnQuCi0gICAgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6
Q1NTOjpDU1NNZWRpYTo6U291cmNlOjpFbnVtIHNvdXJjZSA9IEluc3BlY3Rvcjo6VHlwZUJ1aWxk
ZXI6OkNTUzo6Q1NTTWVkaWE6OlNvdXJjZTo6SW5saW5lU2hlZXQ7CisgICAgSW5zcGVjdG9yOjpU
eXBlQnVpbGRlcjo6Q1NTOjpDU1NNZWRpYTo6U291cmNlIHNvdXJjZSA9IEluc3BlY3Rvcjo6VHlw
ZUJ1aWxkZXI6OkNTUzo6Q1NTTWVkaWE6OlNvdXJjZTo6SW5saW5lU2hlZXQ7CiAgICAgc3dpdGNo
IChtZWRpYUxpc3RTb3VyY2UpIHsKICAgICBjYXNlIE1lZGlhTGlzdFNvdXJjZU1lZGlhUnVsZToK
ICAgICAgICAgc291cmNlID0gSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q1NTOjpDU1NNZWRpYTo6
U291cmNlOjpNZWRpYVJ1bGU7CkBAIC01MjgsNyArNTI4LDEzIEBAIFBhc3NSZWZQdHI8SW5zcGVj
dG9yOjpUeXBlQnVpbGRlcjo6Q1NTOjpDU1NTdHlsZT4gSW5zcGVjdG9yU3R5bGU6OnN0eWxlV2l0
aFByb3BlCiAgICAgICAgIGNvbnN0IENTU1Byb3BlcnR5U291cmNlRGF0YSYgcHJvcGVydHlFbnRy
eSA9IGl0LT5zb3VyY2VEYXRhOwogICAgICAgICBjb25zdCBTdHJpbmcmIG5hbWUgPSBwcm9wZXJ0
eUVudHJ5Lm5hbWU7CiAKLSAgICAgICAgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q1NTOjpDU1NQ
cm9wZXJ0eTo6U3RhdHVzOjpFbnVtIHN0YXR1cyA9IGl0LT5kaXNhYmxlZCA/IEluc3BlY3Rvcjo6
VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTUHJvcGVydHk6OlN0YXR1czo6RGlzYWJsZWQgOiBJbnNwZWN0
b3I6OlR5cGVCdWlsZGVyOjpDU1M6OkNTU1Byb3BlcnR5OjpTdGF0dXM6OkFjdGl2ZTsKKyAgICAg
ICAgLy8gVmlzdWFsIFN0dWRpbyBkaXNhZ3JlZXMgd2l0aCBvdGhlciBjb21waWxlcnMgYXMgdG8g
d2hldGhlciAnY2xhc3MnIGlzIG5lZWRlZCBoZXJlLgorI2lmIENPTVBJTEVSKE1TVkMpCisgICAg
ICAgIGVudW0gY2xhc3MgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q1NTOjpDU1NQcm9wZXJ0eVN0
YXR1cyBzdGF0dXM7CisjZWxzZQorICAgICAgICBlbnVtIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6
OkNTUzo6Q1NTUHJvcGVydHlTdGF0dXMgc3RhdHVzOworI2VuZGlmCisgICAgICAgIHN0YXR1cyA9
IGl0LT5kaXNhYmxlZCA/IEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTUHJvcGVydHlT
dGF0dXM6OkRpc2FibGVkIDogSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q1NTOjpDU1NQcm9wZXJ0
eVN0YXR1czo6QWN0aXZlOwogCiAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVy
OjpDU1M6OkNTU1Byb3BlcnR5PiBwcm9wZXJ0eSA9IEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNT
Uzo6Q1NTUHJvcGVydHk6OmNyZWF0ZSgpCiAgICAgICAgICAgICAuc2V0TmFtZShuYW1lLmxvd2Vy
KCkpCkBAIC01NzEsOSArNTc3LDkgQEAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVy
OjpDU1M6OkNTU1N0eWxlPiBJbnNwZWN0b3JTdHlsZTo6c3R5bGVXaXRoUHJvcGUKICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChzdWNjZXNzU3RhdHVzICYmIHByZXZpb3VzU3RhdHVzICE9ICJp
bmFjdGl2ZSIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydHlFbnRy
eS5pbXBvcnRhbnQgfHwgIXN1Y2Nlc3NQcmlvcml0eSkgLy8gUHJpb3JpdHkgbm90IHNldCA9PSAi
bm90IGltcG9ydGFudCIuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3VsZElu
YWN0aXZhdGUgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN0
YXR1cyA9PSBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDU1M6OkNTU1Byb3BlcnR5OjpTdGF0dXM6
OkFjdGl2ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN0YXR1cyA9
PSBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDU1M6OkNTU1Byb3BlcnR5U3RhdHVzOjpBY3RpdmUp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSW5hY3RpdmF0ZSBhIG5vbi1p
bXBvcnRhbnQgcHJvcGVydHkgZm9sbG93aW5nIHRoZSBzYW1lLW5hbWVkIGltcG9ydGFudCBwcm9w
ZXJ0eS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gSW5zcGVjdG9y
OjpUeXBlQnVpbGRlcjo6Q1NTOjpDU1NQcm9wZXJ0eTo6U3RhdHVzOjpJbmFjdGl2ZTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gSW5zcGVjdG9yOjpUeXBlQnVpbGRl
cjo6Q1NTOjpDU1NQcm9wZXJ0eVN0YXR1czo6SW5hY3RpdmU7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg
ICB9IGVsc2UgewpAQCAtNTg2LDcgKzU5Miw3IEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpUeXBl
QnVpbGRlcjo6Q1NTOjpDU1NTdHlsZT4gSW5zcGVjdG9yU3R5bGU6OnN0eWxlV2l0aFByb3BlCiAg
ICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZVRvUHJldmlvdXNBY3RpdmVQcm9wZXJ0eS5z
ZXQoY2Fub25pY2FsUHJvcGVydHlOYW1lLCBwcm9wZXJ0eSk7CiAKICAgICAgICAgICAgICAgICBp
ZiAoc2hvdWxkSW5hY3RpdmF0ZSkgewotICAgICAgICAgICAgICAgICAgICBhY3RpdmVJdC0+dmFs
dWUtPnNldFN0YXR1cyhJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDU1M6OkNTU1Byb3BlcnR5OjpT
dGF0dXM6OkluYWN0aXZlKTsKKyAgICAgICAgICAgICAgICAgICAgYWN0aXZlSXQtPnZhbHVlLT5z
ZXRTdGF0dXMoSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q1NTOjpDU1NQcm9wZXJ0eVN0YXR1czo6
SW5hY3RpdmUpOwogICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWVUb1ByZXZpb3VzQWN0
aXZlUHJvcGVydHkuc2V0KGNhbm9uaWNhbFByb3BlcnR5TmFtZSwgcHJvcGVydHkpOwogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSB7CkBAIC01OTQsNyArNjAwLDcgQEAgUGFz
c1JlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDU1M6OkNTU1N0eWxlPiBJbnNwZWN0b3JT
dHlsZTo6c3R5bGVXaXRoUHJvcGUKICAgICAgICAgICAgICAgICAvLyBEZWZhdWx0ICJpbXBsaWNp
dCIgPT0gZmFsc2UuCiAgICAgICAgICAgICAgICAgaWYgKGltcGxpY2l0KQogICAgICAgICAgICAg
ICAgICAgICBwcm9wZXJ0eS0+c2V0SW1wbGljaXQodHJ1ZSk7Ci0gICAgICAgICAgICAgICAgc3Rh
dHVzID0gSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q1NTOjpDU1NQcm9wZXJ0eTo6U3RhdHVzOjpT
dHlsZTsKKyAgICAgICAgICAgICAgICBzdGF0dXMgPSBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpD
U1M6OkNTU1Byb3BlcnR5U3RhdHVzOjpTdHlsZTsKIAogICAgICAgICAgICAgICAgIFN0cmluZyBz
aG9ydGhhbmQgPSBtX3N0eWxlLT5nZXRQcm9wZXJ0eVNob3J0aGFuZChuYW1lKTsKICAgICAgICAg
ICAgICAgICBpZiAoIXNob3J0aGFuZC5pc0VtcHR5KCkpIHsKQEAgLTYxMCw3ICs2MTYsNyBAQCBQ
YXNzUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTU3R5bGU+IEluc3BlY3Rv
clN0eWxlOjpzdHlsZVdpdGhQcm9wZQogICAgICAgICB9CiAKICAgICAgICAgLy8gRGVmYXVsdCAi
c3RhdHVzIiA9PSAic3R5bGUiLgotICAgICAgICBpZiAoc3RhdHVzICE9IEluc3BlY3Rvcjo6VHlw
ZUJ1aWxkZXI6OkNTUzo6Q1NTUHJvcGVydHk6OlN0YXR1czo6U3R5bGUpCisgICAgICAgIGlmIChz
dGF0dXMgIT0gSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q1NTOjpDU1NQcm9wZXJ0eVN0YXR1czo6
U3R5bGUpCiAgICAgICAgICAgICBwcm9wZXJ0eS0+c2V0U3RhdHVzKHN0YXR1cyk7CiAgICAgfQog
CkBAIC03NDksNyArNzU1LDcgQEAgTmV3TGluZUFuZFdoaXRlc3BhY2UmIEluc3BlY3RvclN0eWxl
OjpuZXdMaW5lQW5kV2hpdGVzcGFjZURlbGltaXRlcnMoKSBjb25zdAogICAgIHJldHVybiBtX2Zv
cm1hdDsKIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3JTdHlsZVNoZWV0PiBJbnNwZWN0b3JTdHls
ZVNoZWV0OjpjcmVhdGUoSW5zcGVjdG9yUGFnZUFnZW50KiBwYWdlQWdlbnQsIGNvbnN0IFN0cmlu
ZyYgaWQsIFBhc3NSZWZQdHI8Q1NTU3R5bGVTaGVldD4gcGFnZVN0eWxlU2hlZXQsIEluc3BlY3Rv
cjo6VHlwZUJ1aWxkZXI6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6RW51bSBvcmlnaW4sIGNvbnN0
IFN0cmluZyYgZG9jdW1lbnRVUkwsIExpc3RlbmVyKiBsaXN0ZW5lcikKK1Bhc3NSZWZQdHI8SW5z
cGVjdG9yU3R5bGVTaGVldD4gSW5zcGVjdG9yU3R5bGVTaGVldDo6Y3JlYXRlKEluc3BlY3RvclBh
Z2VBZ2VudCogcGFnZUFnZW50LCBjb25zdCBTdHJpbmcmIGlkLCBQYXNzUmVmUHRyPENTU1N0eWxl
U2hlZXQ+IHBhZ2VTdHlsZVNoZWV0LCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDU1M6OlN0eWxl
U2hlZXRPcmlnaW4gb3JpZ2luLCBjb25zdCBTdHJpbmcmIGRvY3VtZW50VVJMLCBMaXN0ZW5lciog
bGlzdGVuZXIpCiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnNwZWN0b3JTdHlsZVNoZWV0
KHBhZ2VBZ2VudCwgaWQsIHBhZ2VTdHlsZVNoZWV0LCBvcmlnaW4sIGRvY3VtZW50VVJMLCBsaXN0
ZW5lcikpOwogfQpAQCAtNzYyLDcgKzc2OCw3IEBAIFN0cmluZyBJbnNwZWN0b3JTdHlsZVNoZWV0
OjpzdHlsZVNoZWV0VVJMKENTU1N0eWxlU2hlZXQqIHBhZ2VTdHlsZVNoZWV0KQogICAgIHJldHVy
biBlbXB0eVN0cmluZygpOwogfQogCi1JbnNwZWN0b3JTdHlsZVNoZWV0OjpJbnNwZWN0b3JTdHls
ZVNoZWV0KEluc3BlY3RvclBhZ2VBZ2VudCogcGFnZUFnZW50LCBjb25zdCBTdHJpbmcmIGlkLCBQ
YXNzUmVmUHRyPENTU1N0eWxlU2hlZXQ+IHBhZ2VTdHlsZVNoZWV0LCBJbnNwZWN0b3I6OlR5cGVC
dWlsZGVyOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW46OkVudW0gb3JpZ2luLCBjb25zdCBTdHJpbmcm
IGRvY3VtZW50VVJMLCBMaXN0ZW5lciogbGlzdGVuZXIpCitJbnNwZWN0b3JTdHlsZVNoZWV0OjpJ
bnNwZWN0b3JTdHlsZVNoZWV0KEluc3BlY3RvclBhZ2VBZ2VudCogcGFnZUFnZW50LCBjb25zdCBT
dHJpbmcmIGlkLCBQYXNzUmVmUHRyPENTU1N0eWxlU2hlZXQ+IHBhZ2VTdHlsZVNoZWV0LCBJbnNw
ZWN0b3I6OlR5cGVCdWlsZGVyOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW4gb3JpZ2luLCBjb25zdCBT
dHJpbmcmIGRvY3VtZW50VVJMLCBMaXN0ZW5lciogbGlzdGVuZXIpCiAgICAgOiBtX3BhZ2VBZ2Vu
dChwYWdlQWdlbnQpCiAgICAgLCBtX2lkKGlkKQogICAgICwgbV9wYWdlU3R5bGVTaGVldChwYWdl
U3R5bGVTaGVldCkKQEAgLTE0MjYsMTIgKzE0MzIsMTIgQEAgdm9pZCBJbnNwZWN0b3JTdHlsZVNo
ZWV0Ojpjb2xsZWN0RmxhdFJ1bGVzKFBhc3NSZWZQdHI8Q1NTUnVsZUxpc3Q+IHJ1bGVMaXN0LCBD
U1MKICAgICB9CiB9CiAKLVBhc3NSZWZQdHI8SW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0
eWxlPiBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU6OmNyZWF0ZShJbnNwZWN0b3JQ
YWdlQWdlbnQqIHBhZ2VBZ2VudCwgY29uc3QgU3RyaW5nJiBpZCwgUGFzc1JlZlB0cjxFbGVtZW50
PiBlbGVtZW50LCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW46
OkVudW0gb3JpZ2luLCBMaXN0ZW5lciogbGlzdGVuZXIpCitQYXNzUmVmUHRyPEluc3BlY3RvclN0
eWxlU2hlZXRGb3JJbmxpbmVTdHlsZT4gSW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxl
OjpjcmVhdGUoSW5zcGVjdG9yUGFnZUFnZW50KiBwYWdlQWdlbnQsIGNvbnN0IFN0cmluZyYgaWQs
IFBhc3NSZWZQdHI8RWxlbWVudD4gZWxlbWVudCwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q1NT
OjpTdHlsZVNoZWV0T3JpZ2luIG9yaWdpbiwgTGlzdGVuZXIqIGxpc3RlbmVyKQogewogICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgSW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlKHBhZ2VB
Z2VudCwgaWQsIGVsZW1lbnQsIG9yaWdpbiwgbGlzdGVuZXIpKTsKIH0KIAotSW5zcGVjdG9yU3R5
bGVTaGVldEZvcklubGluZVN0eWxlOjpJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGUo
SW5zcGVjdG9yUGFnZUFnZW50KiBwYWdlQWdlbnQsIGNvbnN0IFN0cmluZyYgaWQsIFBhc3NSZWZQ
dHI8RWxlbWVudD4gZWxlbWVudCwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q1NTOjpTdHlsZVNo
ZWV0T3JpZ2luOjpFbnVtIG9yaWdpbiwgTGlzdGVuZXIqIGxpc3RlbmVyKQorSW5zcGVjdG9yU3R5
bGVTaGVldEZvcklubGluZVN0eWxlOjpJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGUo
SW5zcGVjdG9yUGFnZUFnZW50KiBwYWdlQWdlbnQsIGNvbnN0IFN0cmluZyYgaWQsIFBhc3NSZWZQ
dHI8RWxlbWVudD4gZWxlbWVudCwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q1NTOjpTdHlsZVNo
ZWV0T3JpZ2luIG9yaWdpbiwgTGlzdGVuZXIqIGxpc3RlbmVyKQogICAgIDogSW5zcGVjdG9yU3R5
bGVTaGVldChwYWdlQWdlbnQsIGlkLCBudWxscHRyLCBvcmlnaW4sICIiLCBsaXN0ZW5lcikKICAg
ICAsIG1fZWxlbWVudChlbGVtZW50KQogICAgICwgbV9ydWxlU291cmNlRGF0YShudWxscHRyKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQu
aCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmgKaW5kZXgg
OGIxOTFmZTA4NDM5YjVmOGU3N2EyNzU5NTk3ZTYzM2RhOTllMGY0Zi4uMGNhNWE1M2FlZTVjMzgz
M2ZmOTg1YjliMTM1Nzk0MzA5ODcyMDU2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5oCkBAIC0xODEsNyArMTgxLDcgQEAgcHVibGljOgogICAg
IH07CiAKICAgICB0eXBlZGVmIEhhc2hNYXA8Q1NTU3R5bGVEZWNsYXJhdGlvbiosIFJlZlB0cjxJ
bnNwZWN0b3JTdHlsZT4+IEluc3BlY3RvclN0eWxlTWFwOwotICAgIHN0YXRpYyBQYXNzUmVmUHRy
PEluc3BlY3RvclN0eWxlU2hlZXQ+IGNyZWF0ZShJbnNwZWN0b3JQYWdlQWdlbnQqLCBjb25zdCBT
dHJpbmcmIGlkLCBQYXNzUmVmUHRyPENTU1N0eWxlU2hlZXQ+IHBhZ2VTdHlsZVNoZWV0LCBJbnNw
ZWN0b3I6OlR5cGVCdWlsZGVyOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW46OkVudW0sIGNvbnN0IFN0
cmluZyYgZG9jdW1lbnRVUkwsIExpc3RlbmVyKik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5z
cGVjdG9yU3R5bGVTaGVldD4gY3JlYXRlKEluc3BlY3RvclBhZ2VBZ2VudCosIGNvbnN0IFN0cmlu
ZyYgaWQsIFBhc3NSZWZQdHI8Q1NTU3R5bGVTaGVldD4gcGFnZVN0eWxlU2hlZXQsIEluc3BlY3Rv
cjo6VHlwZUJ1aWxkZXI6OkNTUzo6U3R5bGVTaGVldE9yaWdpbiwgY29uc3QgU3RyaW5nJiBkb2N1
bWVudFVSTCwgTGlzdGVuZXIqKTsKICAgICBzdGF0aWMgU3RyaW5nIHN0eWxlU2hlZXRVUkwoQ1NT
U3R5bGVTaGVldCogcGFnZVN0eWxlU2hlZXQpOwogCiAgICAgdmlydHVhbCB+SW5zcGVjdG9yU3R5
bGVTaGVldCgpOwpAQCAtMjEyLDcgKzIxMiw3IEBAIHB1YmxpYzoKICAgICBJbnNwZWN0b3JDU1NJ
ZCBzdHlsZUlkKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKSBjb25zdCB7IHJldHVybiBydWxl
T3JTdHlsZUlkKHN0eWxlKTsgfQogCiBwcm90ZWN0ZWQ6Ci0gICAgSW5zcGVjdG9yU3R5bGVTaGVl
dChJbnNwZWN0b3JQYWdlQWdlbnQqLCBjb25zdCBTdHJpbmcmIGlkLCBQYXNzUmVmUHRyPENTU1N0
eWxlU2hlZXQ+IHBhZ2VTdHlsZVNoZWV0LCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDU1M6OlN0
eWxlU2hlZXRPcmlnaW46OkVudW0sIGNvbnN0IFN0cmluZyYgZG9jdW1lbnRVUkwsIExpc3RlbmVy
Kik7CisgICAgSW5zcGVjdG9yU3R5bGVTaGVldChJbnNwZWN0b3JQYWdlQWdlbnQqLCBjb25zdCBT
dHJpbmcmIGlkLCBQYXNzUmVmUHRyPENTU1N0eWxlU2hlZXQ+IHBhZ2VTdHlsZVNoZWV0LCBJbnNw
ZWN0b3I6OlR5cGVCdWlsZGVyOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW4sIGNvbnN0IFN0cmluZyYg
ZG9jdW1lbnRVUkwsIExpc3RlbmVyKik7CiAKICAgICBib29sIGNhbkJpbmQoKSBjb25zdCB7IHJl
dHVybiBtX29yaWdpbiAhPSBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDU1M6OlN0eWxlU2hlZXRP
cmlnaW46OlVzZXJBZ2VudCAmJiBtX29yaWdpbiAhPSBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpD
U1M6OlN0eWxlU2hlZXRPcmlnaW46OlVzZXI7IH0KICAgICBJbnNwZWN0b3JDU1NJZCBydWxlT3JT
dHlsZUlkKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKSBjb25zdDsKQEAgLTI0OCw3ICsyNDgs
NyBAQCBwcml2YXRlOgogICAgIEluc3BlY3RvclBhZ2VBZ2VudCogbV9wYWdlQWdlbnQ7CiAgICAg
U3RyaW5nIG1faWQ7CiAgICAgUmVmUHRyPENTU1N0eWxlU2hlZXQ+IG1fcGFnZVN0eWxlU2hlZXQ7
Ci0gICAgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luOjpFbnVt
IG1fb3JpZ2luOworICAgIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNTUzo6U3R5bGVTaGVldE9y
aWdpbiBtX29yaWdpbjsKICAgICBTdHJpbmcgbV9kb2N1bWVudFVSTDsKICAgICBib29sIG1faXNS
ZXZhbGlkYXRpbmc7CiAgICAgUGFyc2VkU3R5bGVTaGVldCogbV9wYXJzZWRTdHlsZVNoZWV0OwpA
QCAtMjU5LDE0ICsyNTksMTQgQEAgcHJpdmF0ZToKIAogY2xhc3MgSW5zcGVjdG9yU3R5bGVTaGVl
dEZvcklubGluZVN0eWxlIDogcHVibGljIEluc3BlY3RvclN0eWxlU2hlZXQgewogcHVibGljOgot
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZT4g
Y3JlYXRlKEluc3BlY3RvclBhZ2VBZ2VudCosIGNvbnN0IFN0cmluZyYgaWQsIFBhc3NSZWZQdHI8
RWxlbWVudD4sIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6
RW51bSwgTGlzdGVuZXIqKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JTdHlsZVNo
ZWV0Rm9ySW5saW5lU3R5bGU+IGNyZWF0ZShJbnNwZWN0b3JQYWdlQWdlbnQqLCBjb25zdCBTdHJp
bmcmIGlkLCBQYXNzUmVmUHRyPEVsZW1lbnQ+LCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDU1M6
OlN0eWxlU2hlZXRPcmlnaW4sIExpc3RlbmVyKik7CiAKICAgICB2b2lkIGRpZE1vZGlmeUVsZW1l
bnRBdHRyaWJ1dGUoKTsKICAgICB2aXJ0dWFsIGJvb2wgZ2V0VGV4dChTdHJpbmcqIHJlc3VsdCkg
Y29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZUZv
cklkKGNvbnN0IEluc3BlY3RvckNTU0lkJiBpZCkgY29uc3Qgb3ZlcnJpZGUgeyBBU1NFUlRfVU5V
U0VEKGlkLCAhaWQub3JkaW5hbCgpKTsgcmV0dXJuIGlubGluZVN0eWxlKCk7IH0KIAogcHJvdGVj
dGVkOgotICAgIEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZShJbnNwZWN0b3JQYWdl
QWdlbnQqLCBjb25zdCBTdHJpbmcmIGlkLCBQYXNzUmVmUHRyPEVsZW1lbnQ+LCBJbnNwZWN0b3I6
OlR5cGVCdWlsZGVyOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW46OkVudW0sIExpc3RlbmVyKik7Cisg
ICAgSW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlKEluc3BlY3RvclBhZ2VBZ2VudCos
IGNvbnN0IFN0cmluZyYgaWQsIFBhc3NSZWZQdHI8RWxlbWVudD4sIEluc3BlY3Rvcjo6VHlwZUJ1
aWxkZXI6OkNTUzo6U3R5bGVTaGVldE9yaWdpbiwgTGlzdGVuZXIqKTsKIAogICAgIHZpcnR1YWwg
RG9jdW1lbnQqIG93bmVyRG9jdW1lbnQoKSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIFJl
ZlB0cjxDU1NSdWxlU291cmNlRGF0YT4gcnVsZVNvdXJjZURhdGFGb3IoQ1NTU3R5bGVEZWNsYXJh
dGlvbiogc3R5bGUpIGNvbnN0IG92ZXJyaWRlIHsgQVNTRVJUX1VOVVNFRChzdHlsZSwgc3R5bGUg
PT0gaW5saW5lU3R5bGUoKSk7IHJldHVybiBtX3J1bGVTb3VyY2VEYXRhOyB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5jcHAKaW5kZXgg
MzcyYTEzNGE4NGFlOWQ1NWFiMWQyZmI1ZWJlNDlhNzdhNTI1NDc1MC4uYjZlN2IxOWE4OGZjNjYy
NTRlMDVhZDFlZWJkNzhiNDRmN2FiZTEyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvclRpbWVsaW5lQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JUaW1lbGluZUFnZW50LmNwcApAQCAtNTQwLDcgKzU0MCw3IEBAIHZv
aWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6YnJlYWtwb2ludEFjdGlvblByb2JlKEpTQzo6RXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBJCiAgICAgYXBwZW5kUmVjb3JkKFRpbWVsaW5lUmVjb3JkRmFj
dG9yeTo6Y3JlYXRlUHJvYmVTYW1wbGVEYXRhKGFjdGlvbiwgaGl0Q291bnQpLCBUaW1lbGluZVJl
Y29yZFR5cGU6OlByb2JlU2FtcGxlLCBmYWxzZSwgZnJhbWVGcm9tRXhlY1N0YXRlKGV4ZWMpKTsK
IH0KIAotc3RhdGljIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlRpbWVsaW5lOjpFdmVudFR5cGU6
OkVudW0gdG9Qcm90b2NvbChUaW1lbGluZVJlY29yZFR5cGUgdHlwZSkKK3N0YXRpYyBJbnNwZWN0
b3I6OlR5cGVCdWlsZGVyOjpUaW1lbGluZTo6RXZlbnRUeXBlIHRvUHJvdG9jb2woVGltZWxpbmVS
ZWNvcmRUeXBlIHR5cGUpCiB7CiAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgY2FzZSBUaW1lbGlu
ZVJlY29yZFR5cGU6OkV2ZW50RGlzcGF0Y2g6CkBAIC02MzIsNyArNjMyLDcgQEAgdm9pZCBJbnNw
ZWN0b3JUaW1lbGluZUFnZW50OjphZGRSZWNvcmRUb1RpbWVsaW5lKFBhc3NSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBwcnAKIHsKICAgICBwcnBSZWNvcmQtPnNldFN0cmluZygidHlwZSIsIEluc3Bl
Y3Rvcjo6VHlwZUJ1aWxkZXI6OmdldFdlYkVudW1Db25zdGFudFZhbHVlKHRvUHJvdG9jb2wodHlw
ZSkpKTsKIAotICAgIFJlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpUaW1lbGluZTo6VGlt
ZWxpbmVFdmVudD4gcmVjb3JkID0gSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6VGltZWxpbmU6OlRp
bWVsaW5lRXZlbnQ6OnJ1bnRpbWVDYXN0KHBycFJlY29yZCk7CisgICAgUmVmUHRyPEluc3BlY3Rv
cjo6VHlwZUJ1aWxkZXI6OlRpbWVsaW5lOjpUaW1lbGluZUV2ZW50PiByZWNvcmQgPSBCaW5kaW5n
VHJhaXRzPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlRpbWVsaW5lOjpUaW1lbGluZUV2ZW50Pjo6
cnVudGltZUNhc3QocHJwUmVjb3JkKTsKIAogICAgIGlmIChtX3JlY29yZFN0YWNrLmlzRW1wdHko
KSkKICAgICAgICAgc2VuZEV2ZW50KHJlY29yZC5yZWxlYXNlKCkpOwpAQCAtNjk5LDcgKzY5OSw3
IEBAIHZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6c2VuZEV2ZW50KFBhc3NSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBldmVudCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gRklYTUU6IHJ1
bnRpbWVDYXN0IGlzIGEgaGFjay4gV2UgZG8gaXQgYmVjYXVzZSB3ZSBjYW4ndCBidWlsZCBUaW1l
bGluZUV2ZW50IGRpcmVjdGx5IG5vdy4KLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRl
cjo6VGltZWxpbmU6OlRpbWVsaW5lRXZlbnQ+IHJlY29yZENoZWNrZWQgPSBJbnNwZWN0b3I6OlR5
cGVCdWlsZGVyOjpUaW1lbGluZTo6VGltZWxpbmVFdmVudDo6cnVudGltZUNhc3QoZXZlbnQpOwor
ICAgIFJlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpUaW1lbGluZTo6VGltZWxpbmVFdmVu
dD4gcmVjb3JkQ2hlY2tlZCA9IEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6
VGltZWxpbmU6OlRpbWVsaW5lRXZlbnQ+OjpydW50aW1lQ2FzdChldmVudCk7CiAgICAgbV9mcm9u
dGVuZERpc3BhdGNoZXItPmV2ZW50UmVjb3JkZWQocmVjb3JkQ2hlY2tlZC5yZWxlYXNlKCkpOwog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvQ1NTLmpz
b24gYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvQ1NTLmpzb24KaW5kZXggY2E5
MGNmNzQxYmY2YzFiODkzNjg3YWZlMWY2MGUwNGU0MDJkYzg0Yy4uOWM1YjI3NTQ1ZWI5YmNhNzhh
ZDllMmUzZWNhZjYwMjQ5Y2JmYzYwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL3Byb3RvY29sL0NTUy5qc29uCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9wcm90
b2NvbC9DU1MuanNvbgpAQCAtMTYzLDYgKzE2MywxMiBAQAogICAgICAgICAgICAgImRlc2NyaXB0
aW9uIjogIkNTUyBzdHlsZSByZXByZXNlbnRhdGlvbi4iCiAgICAgICAgIH0sCiAgICAgICAgIHsK
KyAgICAgICAgICAgICJpZCI6ICJDU1NQcm9wZXJ0eVN0YXR1cyIsCisJICAgICJ0eXBlIjogInN0
cmluZyIsCisgICAgICAgICAgICAiZW51bSI6IFsiYWN0aXZlIiwgImluYWN0aXZlIiwgImRpc2Fi
bGVkIiwgInN0eWxlIl0sCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVGhlIHByb3BlcnR5
IHN0YXR1czogXCJhY3RpdmVcIiBpZiB0aGUgcHJvcGVydHkgaXMgZWZmZWN0aXZlIGluIHRoZSBz
dHlsZSwgXCJpbmFjdGl2ZVwiIGlmIHRoZSBwcm9wZXJ0eSBpcyBvdmVycmlkZGVuIGJ5IGEgc2Ft
ZS1uYW1lZCBwcm9wZXJ0eSBpbiB0aGlzIHN0eWxlIGxhdGVyIG9uLCBcImRpc2FibGVkXCIgaWYg
dGhlIHByb3BlcnR5IGlzIGRpc2FibGVkIGJ5IHRoZSB1c2VyLCBcInN0eWxlXCIgKGltcGxpZWQg
aWYgYWJzZW50KSBpZiB0aGUgcHJvcGVydHkgaXMgcmVwb3J0ZWQgYnkgdGhlIGJyb3dzZXIgcmF0
aGVyIHRoYW4gYnkgdGhlIENTUyBzb3VyY2UgcGFyc2VyLiIKKyAgICAgICAgfSwKKyAgICAgICAg
ewogICAgICAgICAgICAgImlkIjogIkNTU1Byb3BlcnR5IiwKICAgICAgICAgICAgICJ0eXBlIjog
Im9iamVjdCIsCiAgICAgICAgICAgICAicHJvcGVydGllcyI6IFsKQEAgLTE3Miw3ICsxNzgsNyBA
QAogICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiaW1wbGljaXQiLCAidHlwZSI6ICJib29sZWFu
IiwgIm9wdGlvbmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9uIjogIldoZXRoZXIgdGhlIHByb3BlcnR5
IGlzIGltcGxpY2l0IChpbXBsaWVzIDxjb2RlPmZhbHNlPC9jb2RlPiBpZiBhYnNlbnQpLiIgfSwK
ICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRleHQiLCAidHlwZSI6ICJzdHJpbmciLCAib3B0
aW9uYWwiOiB0cnVlLCAiZGVzY3JpcHRpb24iOiAiVGhlIGZ1bGwgcHJvcGVydHkgdGV4dCBhcyBz
cGVjaWZpZWQgaW4gdGhlIHN0eWxlLiIgfSwKICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBh
cnNlZE9rIiwgInR5cGUiOiAiYm9vbGVhbiIsICJvcHRpb25hbCI6IHRydWUsICJkZXNjcmlwdGlv
biI6ICJXaGV0aGVyIHRoZSBwcm9wZXJ0eSBpcyB1bmRlcnN0b29kIGJ5IHRoZSBicm93c2VyIChp
bXBsaWVzIDxjb2RlPnRydWU8L2NvZGU+IGlmIGFic2VudCkuIiB9LAotICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAic3RhdHVzIiwgInR5cGUiOiAic3RyaW5nIiwgImVudW0iOiBbImFjdGl2ZSIs
ICJpbmFjdGl2ZSIsICJkaXNhYmxlZCIsICJzdHlsZSJdLCAib3B0aW9uYWwiOiB0cnVlLCAiZGVz
Y3JpcHRpb24iOiAiVGhlIHByb3BlcnR5IHN0YXR1czogXCJhY3RpdmVcIiBpZiB0aGUgcHJvcGVy
dHkgaXMgZWZmZWN0aXZlIGluIHRoZSBzdHlsZSwgXCJpbmFjdGl2ZVwiIGlmIHRoZSBwcm9wZXJ0
eSBpcyBvdmVycmlkZGVuIGJ5IGEgc2FtZS1uYW1lZCBwcm9wZXJ0eSBpbiB0aGlzIHN0eWxlIGxh
dGVyIG9uLCBcImRpc2FibGVkXCIgaWYgdGhlIHByb3BlcnR5IGlzIGRpc2FibGVkIGJ5IHRoZSB1
c2VyLCBcInN0eWxlXCIgKGltcGxpZWQgaWYgYWJzZW50KSBpZiB0aGUgcHJvcGVydHkgaXMgcmVw
b3J0ZWQgYnkgdGhlIGJyb3dzZXIgcmF0aGVyIHRoYW4gYnkgdGhlIENTUyBzb3VyY2UgcGFyc2Vy
LiIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInN0YXR1cyIsICIkcmVmIjogIkNTU1By
b3BlcnR5U3RhdHVzIiwgIm9wdGlvbmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9uIjogIldoZXRoZXIg
dGhlIHByb3BlcnR5IGlzIGFjdGl2ZSBvciBkaXNhYmxlZC4iIH0sCiAgICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJyYW5nZSIsICIkcmVmIjogIlNvdXJjZVJhbmdlIiwgIm9wdGlvbmFsIjogdHJ1
ZSwgImRlc2NyaXB0aW9uIjogIlRoZSBlbnRpcmUgcHJvcGVydHkgcmFuZ2UgaW4gdGhlIGVuY2xv
c2luZyBzdHlsZSBkZWNsYXJhdGlvbiAoaWYgYXZhaWxhYmxlKS4iIH0KICAgICAgICAgICAgIF0s
CiAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiQ1NTIHN0eWxlIGVmZmVjdGl2ZSB2aXN1YWwg
ZGltZW5zaW9ucyBhbmQgc291cmNlIG9mZnNldHMuIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL3Byb3RvY29sL1BhZ2UuanNvbiBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9wcm90b2NvbC9QYWdlLmpzb24KaW5kZXggM2FmZGJjMGNkM2QyN2Q1MTY0ZDI2ZThiZDMyYzRk
NzZmZGZkZDI3NS4uODhhNzZjNDZmMmJlZmNkYTRkYjFhNDUwNGY3MmYyZTIyZDY3MTUwMCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL3Byb3RvY29sL1BhZ2UuanNvbgorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvUGFnZS5qc29uCkBAIC0yOSwyNiAr
MjksMjUgQEAKICAgICAgICAgICAgIF0KICAgICAgICAgfSwKICAgICAgICAgeworICAgICAgICAg
ICAgImlkIjogIkZyYW1lUmVzb3VyY2UiLAorICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwK
KyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
dXJsIiwgInR5cGUiOiAic3RyaW5nIiwgImRlc2NyaXB0aW9uIjogIlJlc291cmNlIFVSTC4iIH0s
CisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0eXBlIiwgIiRyZWYiOiAiUmVzb3VyY2VUeXBl
IiwgImRlc2NyaXB0aW9uIjogIlR5cGUgb2YgdGhpcyByZXNvdXJjZS4iIH0sCisgICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJtaW1lVHlwZSIsICJ0eXBlIjogInN0cmluZyIsICJkZXNjcmlwdGlv
biI6ICJSZXNvdXJjZSBtaW1lVHlwZSBhcyBkZXRlcm1pbmVkIGJ5IHRoZSBicm93c2VyLiIgfSwK
KyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImZhaWxlZCIsICJ0eXBlIjogImJvb2xlYW4iLCAi
b3B0aW9uYWwiOiB0cnVlLCAiZGVzY3JpcHRpb24iOiAiVHJ1ZSBpZiB0aGUgcmVzb3VyY2UgZmFp
bGVkIHRvIGxvYWQuIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY2FuY2VsZWQiLCAi
dHlwZSI6ICJib29sZWFuIiwgIm9wdGlvbmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9uIjogIlRydWUg
aWYgdGhlIHJlc291cmNlIHdhcyBjYW5jZWxlZCBkdXJpbmcgbG9hZGluZy4iIH0sCisgICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJzb3VyY2VNYXBVUkwiLCAidHlwZSI6ICJzdHJpbmciLCAib3B0
aW9uYWwiOiB0cnVlLCAiZGVzY3JpcHRpb24iOiAiVVJMIG9mIHNvdXJjZSBtYXAgYXNzb2NpYXRl
ZCB3aXRoIHRoaXMgcmVzb3VyY2UgKGlmIGFueSkuIiB9CisgICAgICAgICAgICBdCisgICAgICAg
IH0sCisgICAgICAgIHsKICAgICAgICAgICAgICJpZCI6ICJGcmFtZVJlc291cmNlVHJlZSIsCiAg
ICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAogICAgICAgICAgICAgImRlc2NyaXB0aW9uIjog
IkluZm9ybWF0aW9uIGFib3V0IHRoZSBGcmFtZSBoaWVyYXJjaHkgYWxvbmcgd2l0aCB0aGVpciBj
YWNoZWQgcmVzb3VyY2VzLiIsCiAgICAgICAgICAgICAicHJvcGVydGllcyI6IFsKICAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogImZyYW1lIiwgIiRyZWYiOiAiRnJhbWUiLCAiZGVzY3JpcHRpb24i
OiAiRnJhbWUgaW5mb3JtYXRpb24gZm9yIHRoaXMgdHJlZSBpdGVtLiIgfSwKICAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogImNoaWxkRnJhbWVzIiwgInR5cGUiOiAiYXJyYXkiLCAib3B0aW9uYWwi
OiB0cnVlLCAiaXRlbXMiOiB7ICIkcmVmIjogIkZyYW1lUmVzb3VyY2VUcmVlIiB9LCAiZGVzY3Jp
cHRpb24iOiAiQ2hpbGQgZnJhbWVzLiIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInJl
c291cmNlcyIsICJ0eXBlIjogImFycmF5IiwKLSAgICAgICAgICAgICAgICAgICAgIml0ZW1zIjog
ewotICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAidXJsIiwgInR5cGUiOiAic3RyaW5nIiwgImRlc2NyaXB0aW9uIjogIlJlc291
cmNlIFVSTC4iIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0eXBl
IiwgIiRyZWYiOiAiUmVzb3VyY2VUeXBlIiwgImRlc2NyaXB0aW9uIjogIlR5cGUgb2YgdGhpcyBy
ZXNvdXJjZS4iIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJtaW1l
VHlwZSIsICJ0eXBlIjogInN0cmluZyIsICJkZXNjcmlwdGlvbiI6ICJSZXNvdXJjZSBtaW1lVHlw
ZSBhcyBkZXRlcm1pbmVkIGJ5IHRoZSBicm93c2VyLiIgfSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogImZhaWxlZCIsICJ0eXBlIjogImJvb2xlYW4iLCAib3B0aW9uYWwi
OiB0cnVlLCAiZGVzY3JpcHRpb24iOiAiVHJ1ZSBpZiB0aGUgcmVzb3VyY2UgZmFpbGVkIHRvIGxv
YWQuIiB9LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY2FuY2VsZWQi
LCAidHlwZSI6ICJib29sZWFuIiwgIm9wdGlvbmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9uIjogIlRy
dWUgaWYgdGhlIHJlc291cmNlIHdhcyBjYW5jZWxlZCBkdXJpbmcgbG9hZGluZy4iIH0sCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzb3VyY2VNYXBVUkwiLCAidHlwZSI6
ICJzdHJpbmciLCAib3B0aW9uYWwiOiB0cnVlLCAiZGVzY3JpcHRpb24iOiAiVVJMIG9mIHNvdXJj
ZSBtYXAgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcmVzb3VyY2UgKGlmIGFueSkuIiB9Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBdCi0gICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAg
ICAgICAgICJkZXNjcmlwdGlvbiI6ICJJbmZvcm1hdGlvbiBhYm91dCBmcmFtZSByZXNvdXJjZXMu
IgotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInJlc291cmNl
cyIsICJ0eXBlIjogImFycmF5IiwgIml0ZW1zIjogeyAiJHJlZiI6ICJGcmFtZVJlc291cmNlIiB9
LCAiZGVzY3JpcHRpb24iOiAiSW5mb3JtYXRpb24gYWJvdXQgZnJhbWUgcmVzb3VyY2VzLiIgfQog
ICAgICAgICAgICAgXQogICAgICAgICB9LAogICAgICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViSW5zcGVjdG9yVUkvVmVyc2lvbnMvSW5zcGVjdG9yLWlPUy02LjAuanNvbiBiL1NvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9WZXJzaW9ucy9JbnNwZWN0b3ItaU9TLTYuMC5qc29uCmluZGV4IDE0ODM3
ODFiYTUwYjE4MTFkN2Q2Y2FmY2Q1MGE0MTE0YTlhYzlkMDUuLjM1MDI0NWZmOGI2OWYwODUyZjQw
MTAxYWQxZDdmODU5MzExMGM3YjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9W
ZXJzaW9ucy9JbnNwZWN0b3ItaU9TLTYuMC5qc29uCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JV
SS9WZXJzaW9ucy9JbnNwZWN0b3ItaU9TLTYuMC5qc29uCkBAIC02OCwyNSArNjgsMjQgQEAKICAg
ICAgICAgICAgICAgICBdCiAgICAgICAgICAgICB9LAogICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICJpZCI6ICJGcmFtZVJlc291cmNlIiwKKyAgICAgICAgICAgICAgICAidHlwZSI6ICJv
YmplY3QiLAorICAgICAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWworICAgICAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogInVybCIsICJ0eXBlIjogInN0cmluZyIsICJkZXNjcmlwdGlvbiI6ICJS
ZXNvdXJjZSBVUkwuIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInR5cGUiLCAi
JHJlZiI6ICJSZXNvdXJjZVR5cGUiLCAiZGVzY3JpcHRpb24iOiAiVHlwZSBvZiB0aGlzIHJlc291
cmNlLiIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJtaW1lVHlwZSIsICJ0eXBl
IjogInN0cmluZyIsICJkZXNjcmlwdGlvbiI6ICJSZXNvdXJjZSBtaW1lVHlwZSBhcyBkZXRlcm1p
bmVkIGJ5IHRoZSBicm93c2VyLiIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJm
YWlsZWQiLCAidHlwZSI6ICJib29sZWFuIiwgIm9wdGlvbmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9u
IjogIlRydWUgaWYgdGhlIHJlc291cmNlIGZhaWxlZCB0byBsb2FkLiIgfSwKKyAgICAgICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJjYW5jZWxlZCIsICJ0eXBlIjogImJvb2xlYW4iLCAib3B0aW9u
YWwiOiB0cnVlLCAiZGVzY3JpcHRpb24iOiAiVHJ1ZSBpZiB0aGUgcmVzb3VyY2Ugd2FzIGNhbmNl
bGVkIGR1cmluZyBsb2FkaW5nLiIgfQorICAgICAgICAgICAgICAgIF0KKyAgICAgICAgICAgIH0s
CisgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgImlkIjogIkZyYW1lUmVzb3VyY2VUcmVl
IiwKICAgICAgICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAogICAgICAgICAgICAgICAgICJk
ZXNjcmlwdGlvbiI6ICJJbmZvcm1hdGlvbiBhYm91dCB0aGUgRnJhbWUgaGllcmFyY2h5IGFsb25n
IHdpdGggdGhlaXIgY2FjaGVkIHJlc291cmNlcy4iLAogICAgICAgICAgICAgICAgICJwcm9wZXJ0
aWVzIjogWwogICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogImZyYW1lIiwgIiRyZWYiOiAi
RnJhbWUiLCAiZGVzY3JpcHRpb24iOiAiRnJhbWUgaW5mb3JtYXRpb24gZm9yIHRoaXMgdHJlZSBp
dGVtLiIgfSwKICAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjaGlsZEZyYW1lcyIsICJ0
eXBlIjogImFycmF5IiwgIm9wdGlvbmFsIjogdHJ1ZSwgIml0ZW1zIjogeyAiJHJlZiI6ICJGcmFt
ZVJlc291cmNlVHJlZSIgfSwgImRlc2NyaXB0aW9uIjogIkNoaWxkIGZyYW1lcy4iIH0sCi0gICAg
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicmVzb3VyY2VzIiwgInR5cGUiOiAiYXJyYXkiLAot
ICAgICAgICAgICAgICAgICAgICAgICAgIml0ZW1zIjogewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICJ0eXBlIjogIm9iamVjdCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgInBy
b3BlcnRpZXMiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
dXJsIiwgInR5cGUiOiAic3RyaW5nIiwgImRlc2NyaXB0aW9uIjogIlJlc291cmNlIFVSTC4iIH0s
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidHlwZSIsICIkcmVm
IjogIlJlc291cmNlVHlwZSIsICJkZXNjcmlwdGlvbiI6ICJUeXBlIG9mIHRoaXMgcmVzb3VyY2Uu
IiB9LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm1pbWVUeXBl
IiwgInR5cGUiOiAic3RyaW5nIiwgImRlc2NyaXB0aW9uIjogIlJlc291cmNlIG1pbWVUeXBlIGFz
IGRldGVybWluZWQgYnkgdGhlIGJyb3dzZXIuIiB9LAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogImZhaWxlZCIsICJ0eXBlIjogImJvb2xlYW4iLCAib3B0aW9uYWwi
OiB0cnVlLCAiZGVzY3JpcHRpb24iOiAiVHJ1ZSBpZiB0aGUgcmVzb3VyY2UgZmFpbGVkIHRvIGxv
YWQuIiB9LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNhbmNl
bGVkIiwgInR5cGUiOiAiYm9vbGVhbiIsICJvcHRpb25hbCI6IHRydWUsICJkZXNjcmlwdGlvbiI6
ICJUcnVlIGlmIHRoZSByZXNvdXJjZSB3YXMgY2FuY2VsZWQgZHVyaW5nIGxvYWRpbmcuIiB9Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXQotICAgICAgICAgICAgICAgICAgICAgICAgfSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJJbmZvcm1hdGlvbiBhYm91
dCBmcmFtZSByZXNvdXJjZXMuIgotICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAicmVzb3VyY2VzIiwgInR5cGUiOiAiYXJyYXkiLCAiaXRlbXMiOiB7
ICIkcmVmIjogIkZyYW1lUmVzb3VyY2UiIH0sICJkZXNjcmlwdGlvbiI6ICJJbmZvcm1hdGlvbiBh
Ym91dCBmcmFtZSByZXNvdXJjZXMuIiB9CiAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAg
fSwKICAgICAgICAgICAgIHsKQEAgLTE1ODcsNyArMTU4Niw3IEBACiAgICAgICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAibmFtZSIsICJ0eXBlIjogInN0cmluZyIsICJkZXNjcmlwdGlvbiI6ICJD
b21wdXRlZCBzdHlsZSBwcm9wZXJ0eSBuYW1lLiIgfSwKICAgICAgICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJ2YWx1ZSIsICJ0eXBlIjogInN0cmluZyIsICJkZXNjcmlwdGlvbiI6ICJDb21wdXRl
ZCBzdHlsZSBwcm9wZXJ0eSB2YWx1ZS4iIH0KICAgICAgICAgICAgICAgICBdCi0gICAgICAgICAg
ICB9LCAgICAgICAgICAgIAorICAgICAgICAgICAgfSwKICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgICAiaWQiOiAiQ1NTU3R5bGUiLAogICAgICAgICAgICAgICAgICJ0eXBlIjogIm9iamVj
dCIsCkBAIC0xNjAzLDYgKzE2MDIsMTIgQEAKICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24i
OiAiQ1NTIHN0eWxlIHJlcHJlc2VudGF0aW9uLiIKICAgICAgICAgICAgIH0sCiAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgImlkIjogIkNTU1Byb3BlcnR5U3RhdHVzIiwKKyAgICAgICAg
ICAgICAgICAidHlwZSI6ICJzdHJpbmciLAorICAgICAgICAgICAgICAgICJlbnVtIjogWyJhY3Rp
dmUiLCAiaW5hY3RpdmUiLCAiZGlzYWJsZWQiLCAic3R5bGUiXSwKKyAgICAgICAgICAgICAgICAi
ZGVzY3JpcHRpb24iOiAiVGhlIHByb3BlcnR5IHN0YXR1czogXCJhY3RpdmVcIiAoaW1wbGllZCBp
ZiBhYnNlbnQpIGlmIHRoZSBwcm9wZXJ0eSBpcyBlZmZlY3RpdmUgaW4gdGhlIHN0eWxlLCBcImlu
YWN0aXZlXCIgaWYgdGhlIHByb3BlcnR5IGlzIG92ZXJyaWRkZW4gYnkgYSBzYW1lLW5hbWVkIHBy
b3BlcnR5IGluIHRoaXMgc3R5bGUgbGF0ZXIgb24sIFwiZGlzYWJsZWRcIiBpZiB0aGUgcHJvcGVy
dHkgaXMgZGlzYWJsZWQgYnkgdGhlIHVzZXIsIFwic3R5bGVcIiBpZiB0aGUgcHJvcGVydHkgaXMg
cmVwb3J0ZWQgYnkgdGhlIGJyb3dzZXIgcmF0aGVyIHRoYW4gYnkgdGhlIENTUyBzb3VyY2UgcGFy
c2VyLiIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgImlk
IjogIkNTU1Byb3BlcnR5IiwKICAgICAgICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAogICAg
ICAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWwpAQCAtMTYxMiw3ICsxNjE3LDcgQEAKICAgICAg
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJpbXBsaWNpdCIsICJ0eXBlIjogImJvb2xlYW4iLCAi
b3B0aW9uYWwiOiB0cnVlLCAiZGVzY3JpcHRpb24iOiAiV2hldGhlciB0aGUgcHJvcGVydHkgaXMg
aW1wbGljaXQgKGltcGxpZXMgPGNvZGU+ZmFsc2U8L2NvZGU+IGlmIGFic2VudCkuIiB9LAogICAg
ICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRleHQiLCAidHlwZSI6ICJzdHJpbmciLCAib3B0
aW9uYWwiOiB0cnVlLCAiZGVzY3JpcHRpb24iOiAiVGhlIGZ1bGwgcHJvcGVydHkgdGV4dCBhcyBz
cGVjaWZpZWQgaW4gdGhlIHN0eWxlLiIgfSwKICAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJwYXJzZWRPayIsICJ0eXBlIjogImJvb2xlYW4iLCAib3B0aW9uYWwiOiB0cnVlLCAiZGVzY3Jp
cHRpb24iOiAiV2hldGhlciB0aGUgcHJvcGVydHkgaXMgdW5kZXJzdG9vZCBieSB0aGUgYnJvd3Nl
ciAoaW1wbGllcyA8Y29kZT50cnVlPC9jb2RlPiBpZiBhYnNlbnQpLiIgfSwKLSAgICAgICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJzdGF0dXMiLCAidHlwZSI6ICJzdHJpbmciLCAiZW51bSI6IFsi
YWN0aXZlIiwgImluYWN0aXZlIiwgImRpc2FibGVkIiwgInN0eWxlIl0sICJvcHRpb25hbCI6IHRy
dWUsICJkZXNjcmlwdGlvbiI6ICJUaGUgcHJvcGVydHkgc3RhdHVzOiBcImFjdGl2ZVwiIChpbXBs
aWVkIGlmIGFic2VudCkgaWYgdGhlIHByb3BlcnR5IGlzIGVmZmVjdGl2ZSBpbiB0aGUgc3R5bGUs
IFwiaW5hY3RpdmVcIiBpZiB0aGUgcHJvcGVydHkgaXMgb3ZlcnJpZGRlbiBieSBhIHNhbWUtbmFt
ZWQgcHJvcGVydHkgaW4gdGhpcyBzdHlsZSBsYXRlciBvbiwgXCJkaXNhYmxlZFwiIGlmIHRoZSBw
cm9wZXJ0eSBpcyBkaXNhYmxlZCBieSB0aGUgdXNlciwgXCJzdHlsZVwiIGlmIHRoZSBwcm9wZXJ0
eSBpcyByZXBvcnRlZCBieSB0aGUgYnJvd3NlciByYXRoZXIgdGhhbiBieSB0aGUgQ1NTIHNvdXJj
ZSBwYXJzZXIuIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInN0YXR1cyIsICIk
cmVmIjogIkNTU1Byb3BlcnR5U3RhdHVzIiwgIm9wdGlvbmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9u
IjogIldoZXRoZXIgdGhlIHByb3BlcnR5IGlzIGFjdGl2ZSBvciBkaXNhYmxlZC4iIH0sCiAgICAg
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic2hvcnRoYW5kTmFtZSIsICJ0eXBlIjogInN0cmlu
ZyIsICJvcHRpb25hbCI6IHRydWUsICJkZXNjcmlwdGlvbiI6ICJUaGUgcmVsYXRlZCBzaG9ydGhh
bmQgcHJvcGVydHkgbmFtZSAoYWJzZW50IGlmIHRoaXMgcHJvcGVydHkgaXMgbm90IGEgbG9uZ2hh
bmQpLiIgfSwKICAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJyYW5nZSIsICIkcmVmIjog
IlNvdXJjZVJhbmdlIiwgIm9wdGlvbmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9uIjogIlRoZSBlbnRp
cmUgcHJvcGVydHkgcmFuZ2UgaW4gdGhlIGVuY2xvc2luZyBzdHlsZSBkZWNsYXJhdGlvbiAoaWYg
YXZhaWxhYmxlKS4iIH0KICAgICAgICAgICAgICAgICBdLApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
Ykluc3BlY3RvclVJL1ZlcnNpb25zL0luc3BlY3Rvci1pT1MtNy4wLmpzb24gYi9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvVmVyc2lvbnMvSW5zcGVjdG9yLWlPUy03LjAuanNvbgppbmRleCBkMDUzMjA5
YjYyOTM5OGQ2YzA4OTczMmNjMmRiYmFlZTIxNzljNWMwLi42OGFlMWI1MDcxNzVkMjQxZjZkOTY3
MDNhMmFiNGFlNWJhZGM4ZGU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVmVy
c2lvbnMvSW5zcGVjdG9yLWlPUy03LjAuanNvbgorKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkv
VmVyc2lvbnMvSW5zcGVjdG9yLWlPUy03LjAuanNvbgpAQCAtNjUsMjYgKzY1LDI1IEBACiAgICAg
ICAgICAgICAgICAgXQogICAgICAgICAgICAgfSwKICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAiaWQiOiAiRnJhbWVSZXNvdXJjZSIsCisgICAgICAgICAgICAgICAgInR5cGUiOiAib2Jq
ZWN0IiwKKyAgICAgICAgICAgICAgICAicHJvcGVydGllcyI6IFsKKyAgICAgICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJ1cmwiLCAidHlwZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRpb24iOiAiUmVz
b3VyY2UgVVJMLiIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0eXBlIiwgIiRy
ZWYiOiAiUmVzb3VyY2VUeXBlIiwgImRlc2NyaXB0aW9uIjogIlR5cGUgb2YgdGhpcyByZXNvdXJj
ZS4iIH0sCisgICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibWltZVR5cGUiLCAidHlwZSI6
ICJzdHJpbmciLCAiZGVzY3JpcHRpb24iOiAiUmVzb3VyY2UgbWltZVR5cGUgYXMgZGV0ZXJtaW5l
ZCBieSB0aGUgYnJvd3Nlci4iIH0sCisgICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZmFp
bGVkIiwgInR5cGUiOiAiYm9vbGVhbiIsICJvcHRpb25hbCI6IHRydWUsICJkZXNjcmlwdGlvbiI6
ICJUcnVlIGlmIHRoZSByZXNvdXJjZSBmYWlsZWQgdG8gbG9hZC4iIH0sCisgICAgICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAiY2FuY2VsZWQiLCAidHlwZSI6ICJib29sZWFuIiwgIm9wdGlvbmFs
IjogdHJ1ZSwgImRlc2NyaXB0aW9uIjogIlRydWUgaWYgdGhlIHJlc291cmNlIHdhcyBjYW5jZWxl
ZCBkdXJpbmcgbG9hZGluZy4iIH0sCisgICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic291
cmNlTWFwVVJMIiwgInR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjogdHJ1ZSwgImRlc2NyaXB0
aW9uIjogIlVSTCBvZiBzb3VyY2UgbWFwIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHJlc291cmNlIChp
ZiBhbnkpLiIgfQorICAgICAgICAgICAgICAgIF0KKyAgICAgICAgICAgIH0sCisgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgImlkIjogIkZyYW1lUmVzb3VyY2VUcmVlIiwKICAgICAgICAg
ICAgICAgICAidHlwZSI6ICJvYmplY3QiLAogICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6
ICJJbmZvcm1hdGlvbiBhYm91dCB0aGUgRnJhbWUgaGllcmFyY2h5IGFsb25nIHdpdGggdGhlaXIg
Y2FjaGVkIHJlc291cmNlcy4iLAogICAgICAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWwogICAg
ICAgICAgICAgICAgICAgICB7ICJuYW1lIjogImZyYW1lIiwgIiRyZWYiOiAiRnJhbWUiLCAiZGVz
Y3JpcHRpb24iOiAiRnJhbWUgaW5mb3JtYXRpb24gZm9yIHRoaXMgdHJlZSBpdGVtLiIgfSwKICAg
ICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjaGlsZEZyYW1lcyIsICJ0eXBlIjogImFycmF5
IiwgIm9wdGlvbmFsIjogdHJ1ZSwgIml0ZW1zIjogeyAiJHJlZiI6ICJGcmFtZVJlc291cmNlVHJl
ZSIgfSwgImRlc2NyaXB0aW9uIjogIkNoaWxkIGZyYW1lcy4iIH0sCi0gICAgICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAicmVzb3VyY2VzIiwgInR5cGUiOiAiYXJyYXkiLAotICAgICAgICAgICAg
ICAgICAgICAgICAgIml0ZW1zIjogewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBl
IjogIm9iamVjdCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgInByb3BlcnRpZXMiOiBb
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidXJsIiwgInR5cGUi
OiAic3RyaW5nIiwgImRlc2NyaXB0aW9uIjogIlJlc291cmNlIFVSTC4iIH0sCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidHlwZSIsICIkcmVmIjogIlJlc291cmNl
VHlwZSIsICJkZXNjcmlwdGlvbiI6ICJUeXBlIG9mIHRoaXMgcmVzb3VyY2UuIiB9LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm1pbWVUeXBlIiwgInR5cGUiOiAi
c3RyaW5nIiwgImRlc2NyaXB0aW9uIjogIlJlc291cmNlIG1pbWVUeXBlIGFzIGRldGVybWluZWQg
YnkgdGhlIGJyb3dzZXIuIiB9LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICJu
YW1lIjogImZhaWxlZCIsICJ0eXBlIjogImJvb2xlYW4iLCAib3B0aW9uYWwiOiB0cnVlLCAiZGVz
Y3JpcHRpb24iOiAiVHJ1ZSBpZiB0aGUgcmVzb3VyY2UgZmFpbGVkIHRvIGxvYWQuIiB9LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNhbmNlbGVkIiwgInR5cGUi
OiAiYm9vbGVhbiIsICJvcHRpb25hbCI6IHRydWUsICJkZXNjcmlwdGlvbiI6ICJUcnVlIGlmIHRo
ZSByZXNvdXJjZSB3YXMgY2FuY2VsZWQgZHVyaW5nIGxvYWRpbmcuIiB9LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNvdXJjZU1hcFVSTCIsICJ0eXBlIjogInN0
cmluZyIsICJvcHRpb25hbCI6IHRydWUsICJkZXNjcmlwdGlvbiI6ICJVUkwgb2Ygc291cmNlIG1h
cCBhc3NvY2lhdGVkIHdpdGggdGhpcyByZXNvdXJjZSAoaWYgYW55KS4iIH0KLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBdCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAg
ICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkluZm9ybWF0aW9uIGFib3V0IGZyYW1lIHJl
c291cmNlcy4iCi0gICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJyZXNvdXJjZXMiLCAidHlwZSI6ICJhcnJheSIsICJpdGVtcyI6IHsgIiRyZWYiOiAi
RnJhbWVSZXNvdXJjZSIgfSwgImRlc2NyaXB0aW9uIjogIkluZm9ybWF0aW9uIGFib3V0IGZyYW1l
IHJlc291cmNlcy4iIH0KICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICB9LAogICAgICAg
ICAgICAgewpAQCAtMTkxNyw2ICsxOTE2LDEyIEBACiAgICAgICAgICAgICAgICAgImRlc2NyaXB0
aW9uIjogIkNTUyBzdHlsZSByZXByZXNlbnRhdGlvbi4iCiAgICAgICAgICAgICB9LAogICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICJpZCI6ICJDU1NQcm9wZXJ0eVN0YXR1cyIsCisgICAg
ICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKKyAgICAgICAgICAgICAgICAiZW51bSI6IFsi
YWN0aXZlIiwgImluYWN0aXZlIiwgImRpc2FibGVkIiwgInN0eWxlIl0sCisgICAgICAgICAgICAg
ICAgImRlc2NyaXB0aW9uIjogIlRoZSBwcm9wZXJ0eSBzdGF0dXM6IFwiYWN0aXZlXCIgKGltcGxp
ZWQgaWYgYWJzZW50KSBpZiB0aGUgcHJvcGVydHkgaXMgZWZmZWN0aXZlIGluIHRoZSBzdHlsZSwg
XCJpbmFjdGl2ZVwiIGlmIHRoZSBwcm9wZXJ0eSBpcyBvdmVycmlkZGVuIGJ5IGEgc2FtZS1uYW1l
ZCBwcm9wZXJ0eSBpbiB0aGlzIHN0eWxlIGxhdGVyIG9uLCBcImRpc2FibGVkXCIgaWYgdGhlIHBy
b3BlcnR5IGlzIGRpc2FibGVkIGJ5IHRoZSB1c2VyLCBcInN0eWxlXCIgaWYgdGhlIHByb3BlcnR5
IGlzIHJlcG9ydGVkIGJ5IHRoZSBicm93c2VyIHJhdGhlciB0aGFuIGJ5IHRoZSBDU1Mgc291cmNl
IHBhcnNlci4iCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
ICJpZCI6ICJDU1NQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwK
ICAgICAgICAgICAgICAgICAicHJvcGVydGllcyI6IFsKQEAgLTE5MjYsNyArMTkzMSw3IEBACiAg
ICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiaW1wbGljaXQiLCAidHlwZSI6ICJib29sZWFu
IiwgIm9wdGlvbmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9uIjogIldoZXRoZXIgdGhlIHByb3BlcnR5
IGlzIGltcGxpY2l0IChpbXBsaWVzIDxjb2RlPmZhbHNlPC9jb2RlPiBpZiBhYnNlbnQpLiIgfSwK
ICAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0ZXh0IiwgInR5cGUiOiAic3RyaW5nIiwg
Im9wdGlvbmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9uIjogIlRoZSBmdWxsIHByb3BlcnR5IHRleHQg
YXMgc3BlY2lmaWVkIGluIHRoZSBzdHlsZS4iIH0sCiAgICAgICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAicGFyc2VkT2siLCAidHlwZSI6ICJib29sZWFuIiwgIm9wdGlvbmFsIjogdHJ1ZSwgImRl
c2NyaXB0aW9uIjogIldoZXRoZXIgdGhlIHByb3BlcnR5IGlzIHVuZGVyc3Rvb2QgYnkgdGhlIGJy
b3dzZXIgKGltcGxpZXMgPGNvZGU+dHJ1ZTwvY29kZT4gaWYgYWJzZW50KS4iIH0sCi0gICAgICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAic3RhdHVzIiwgInR5cGUiOiAic3RyaW5nIiwgImVudW0i
OiBbImFjdGl2ZSIsICJpbmFjdGl2ZSIsICJkaXNhYmxlZCIsICJzdHlsZSJdLCAib3B0aW9uYWwi
OiB0cnVlLCAiZGVzY3JpcHRpb24iOiAiVGhlIHByb3BlcnR5IHN0YXR1czogXCJhY3RpdmVcIiBp
ZiB0aGUgcHJvcGVydHkgaXMgZWZmZWN0aXZlIGluIHRoZSBzdHlsZSwgXCJpbmFjdGl2ZVwiIGlm
IHRoZSBwcm9wZXJ0eSBpcyBvdmVycmlkZGVuIGJ5IGEgc2FtZS1uYW1lZCBwcm9wZXJ0eSBpbiB0
aGlzIHN0eWxlIGxhdGVyIG9uLCBcImRpc2FibGVkXCIgaWYgdGhlIHByb3BlcnR5IGlzIGRpc2Fi
bGVkIGJ5IHRoZSB1c2VyLCBcInN0eWxlXCIgKGltcGxpZWQgaWYgYWJzZW50KSBpZiB0aGUgcHJv
cGVydHkgaXMgcmVwb3J0ZWQgYnkgdGhlIGJyb3dzZXIgcmF0aGVyIHRoYW4gYnkgdGhlIENTUyBz
b3VyY2UgcGFyc2VyLiIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzdGF0dXMi
LCAiJHJlZiI6ICJDU1NQcm9wZXJ0eVN0YXR1cyIsICJvcHRpb25hbCI6IHRydWUsICJkZXNjcmlw
dGlvbiI6ICJXaGV0aGVyIHRoZSBwcm9wZXJ0eSBpcyBhY3RpdmUgb3IgZGlzYWJsZWQuIiB9LAog
ICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInJhbmdlIiwgIiRyZWYiOiAiU291cmNlUmFu
Z2UiLCAib3B0aW9uYWwiOiB0cnVlLCAiZGVzY3JpcHRpb24iOiAiVGhlIGVudGlyZSBwcm9wZXJ0
eSByYW5nZSBpbiB0aGUgZW5jbG9zaW5nIHN0eWxlIGRlY2xhcmF0aW9uIChpZiBhdmFpbGFibGUp
LiIgfQogICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjog
IkNTUyBzdHlsZSBlZmZlY3RpdmUgdmlzdWFsIGRpbWVuc2lvbnMgYW5kIHNvdXJjZSBvZmZzZXRz
LiIKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBl
Y2M4NGYyYzQ1OTA1NDY0YTVkNDRiMmI1MjJkODI3NjZiMDY3MTg3Li44YjNlY2M2YmU2NmVkMDYz
ZjhkYWY5OTg4MzFiNDRkODU5YjQyOGU0IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysr
IGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDQgQEAKKzIwMTQtMDgtMTEgIEJyaWFuIEou
IEJ1cmcgIDxidXJnQGNzLndhc2hpbmd0b24uZWR1PgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6
IHJld3JpdGUgQ29kZUdlbmVyYXRvckluc3BlY3RvciB0byBiZSBtb2R1bGFyIGFuZCB0ZXN0YWJs
ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMxNTk2
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTY3Jp
cHRzL3J1bi1pbnNwZWN0b3ItZ2VuZXJhdG9yLXRlc3RzOiBBZGRlZC4KKyAgICAgICAgKG1haW4p
OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvaW5zcGVjdG9yL19faW5pdF9fLnB5OiBBZGRl
ZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2luc3BlY3Rvci9tYWluLnB5OiBBZGRlZC4K
KyAgICAgICAgKEluc3BlY3RvckdlbmVyYXRvclRlc3RzKToKKyAgICAgICAgKEluc3BlY3Rvckdl
bmVyYXRvclRlc3RzLl9faW5pdF9fKToKKyAgICAgICAgKEluc3BlY3RvckdlbmVyYXRvclRlc3Rz
LmdlbmVyYXRlX2Zyb21fanNvbik6CisgICAgICAgIChJbnNwZWN0b3JHZW5lcmF0b3JUZXN0cy53
cml0ZV9lcnJvcl9maWxlKToKKyAgICAgICAgKEluc3BlY3RvckdlbmVyYXRvclRlc3RzLmRldGVj
dF9jaGFuZ2VzKToKKyAgICAgICAgKEluc3BlY3RvckdlbmVyYXRvclRlc3RzLnJ1bl90ZXN0cyk6
CisgICAgICAgIChJbnNwZWN0b3JHZW5lcmF0b3JUZXN0cy5tYWluKToKKworMjAxNC0wOC0wOSAg
QnJpYW4gSi4gQnVyZyAgPGJ1cmdAY3Mud2FzaGluZ3Rvbi5lZHU+CisKKyAgICAgICAgV2ViIElu
c3BlY3RvcjogcmV3cml0ZSBDb2RlR2VuZXJhdG9ySW5zcGVjdG9yIHRvIGJlIG1vZHVsYXIgYW5k
IHRlc3RhYmxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMzE1OTYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBBZGQgYSB3cmFwcGVyIHNjcmlwdCBmb3IgcnVubmluZyBpbnNwZWN0b3IgYmluZGluZ3MgZ2Vu
ZXJhdG9yIHRlc3RzLgorICAgICAgICBJdCBpcyBhZGFwdGVkIGZyb20gdGhlIERPTSBiaW5kaW5n
cyBhbmQgcmVwbGF5IGdlbmVyYXRvciB0ZXN0IHNjcmlwdHMuCisKKyAgICAgICAgKiBTY3JpcHRz
L3J1bi1pbnNwZWN0b3ItZ2VuZXJhdG9yLXRlc3RzOiBBZGRlZC4KKyAgICAgICAgKG1haW4pOgor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvaW5zcGVjdG9yL19faW5pdF9fLnB5OiBBZGRlZC4K
KyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2luc3BlY3Rvci9tYWluLnB5OiBBZGRlZC4KKyAg
ICAgICAgKEluc3BlY3RvckdlbmVyYXRvclRlc3RzKToKKyAgICAgICAgKEluc3BlY3RvckdlbmVy
YXRvclRlc3RzLl9faW5pdF9fKToKKyAgICAgICAgKEluc3BlY3RvckdlbmVyYXRvclRlc3RzLmdl
bmVyYXRlX2Zyb21fanNvbik6CisgICAgICAgIChJbnNwZWN0b3JHZW5lcmF0b3JUZXN0cy53cml0
ZV9lcnJvcl9maWxlKToKKyAgICAgICAgKEluc3BlY3RvckdlbmVyYXRvclRlc3RzLmRldGVjdF9j
aGFuZ2VzKToKKyAgICAgICAgKEluc3BlY3RvckdlbmVyYXRvclRlc3RzLnJ1bl90ZXN0cyk6Cisg
ICAgICAgIChJbnNwZWN0b3JHZW5lcmF0b3JUZXN0cy5tYWluKToKKwogMjAxNC0wOC0xMSAgQ2Fy
bG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgVW5yZXZp
ZXdlZC4gRml4IEdUSysgbWFrZSBkaXN0Y2hlY2suCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRz
L3J1bi1pbnNwZWN0b3ItZ2VuZXJhdG9yLXRlc3RzIGIvVG9vbHMvU2NyaXB0cy9ydW4taW5zcGVj
dG9yLWdlbmVyYXRvci10ZXN0cwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hYWFiMTgwMGJjYTZmN2U4YTM0OTZlNTkx
ODQyMWVlYWUyZDM4ZDgyCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy9ydW4taW5z
cGVjdG9yLWdlbmVyYXRvci10ZXN0cwpAQCAtMCwwICsxLDQyIEBACisjIS91c3IvYmluL2VudiBw
eXRob24KKyMgQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
IyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyMgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
IyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCBzeXMK
K2Zyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbSBpbXBvcnQgZXhlY3V0aXZlCisKK2RlZiBtYWlu
KGFyZ3YpOgorICAgICIiIlJ1bnMgcmVwbGF5IGlucHV0IGNvZGUgZ2VuZXJhdG9yIG9uIHRlc3Qg
c3BlY2lmaWNhdGlvbiBmaWxlcyBhbmQgY29tcGFyZXMKKyAgICB0aGUgcmVzdWx0cyB3aXRoIHJl
ZmVyZW5jZSBmaWxlcy4KKworICAgIE9wdGlvbnM6CisgICAgICAgLS1yZXNldC1yZXN1bHRzOiBP
dmVyd3JpdGVzIHRoZSByZWZlcmVuY2UgZmlsZXMgd2l0aCB0aGUgZ2VuZXJhdGVkIHJlc3VsdHMu
CisKKyAgICAiIiIKKyAgICByZXNldF9yZXN1bHRzID0gIi0tcmVzZXQtcmVzdWx0cyIgaW4gYXJn
dgorCisgICAgZnJvbSB3ZWJraXRweS5pbnNwZWN0b3IubWFpbiBpbXBvcnQgSW5zcGVjdG9yR2Vu
ZXJhdG9yVGVzdHMKKyAgICByZXR1cm4gSW5zcGVjdG9yR2VuZXJhdG9yVGVzdHMocmVzZXRfcmVz
dWx0cywgZXhlY3V0aXZlLkV4ZWN1dGl2ZSgpKS5tYWluKCkKKworaWYgX19uYW1lX18gPT0gJ19f
bWFpbl9fJzoKKyAgICBzeXMuZXhpdChtYWluKHN5cy5hcmd2KSkKZGlmZiAtLWdpdCBhL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvaW5zcGVjdG9yL19faW5pdF9fLnB5IGIvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9pbnNwZWN0b3IvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWY2NWJlZTViYjc3ZTk2
ZWJjN2NkOWM0NzY0MDY5MGZiZGE4YWMxOQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvaW5zcGVjdG9yL19faW5pdF9fLnB5CkBAIC0wLDAgKzEgQEAKKyMgUmVxdWly
ZWQgZm9yIFB5dGhvbiB0byBzZWFyY2ggdGhpcyBkaXJlY3RvcnkgZm9yIG1vZHVsZSBmaWxlcwpk
aWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9pbnNwZWN0b3IvbWFpbi5weSBiL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvaW5zcGVjdG9yL21haW4ucHkKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzY5ZjA0
MTJmYzYzMDM2YWNjYTc0Y2Y3NTljODc0ZTU3Y2IxZGVhZAotLS0gL2Rldi9udWxsCisrKyBiL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvaW5zcGVjdG9yL21haW4ucHkKQEAgLTAsMCArMSwxMzQgQEAK
KyMgQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisj
IENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisj
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMKKyMgMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUyAiQVMKKyMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECisjIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQQorIyBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKKyMgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKwor
aW1wb3J0IG9zCitpbXBvcnQgb3MucGF0aAoraW1wb3J0IHNodXRpbAoraW1wb3J0IHN5cworaW1w
b3J0IHRlbXBmaWxlCitmcm9tIHdlYmtpdHB5LmNvbW1vbi5jaGVja291dC5zY20uZGV0ZWN0aW9u
IGltcG9ydCBkZXRlY3Rfc2NtX3N5c3RlbQorZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmV4
ZWN1dGl2ZSBpbXBvcnQgU2NyaXB0RXJyb3IKKworCitjbGFzcyBJbnNwZWN0b3JHZW5lcmF0b3JU
ZXN0czoKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCByZXNldF9yZXN1bHRzLCBleGVjdXRpdmUp
OgorICAgICAgICBzZWxmLnJlc2V0X3Jlc3VsdHMgPSByZXNldF9yZXN1bHRzCisgICAgICAgIHNl
bGYuZXhlY3V0aXZlID0gZXhlY3V0aXZlCisKKyAgICBkZWYgZ2VuZXJhdGVfZnJvbV9qc29uKHNl
bGYsIGpzb25fZmlsZSwgb3V0cHV0X2RpcmVjdG9yeSk6CisgICAgICAgIGNtZCA9IFsncHl0aG9u
JywKKyAgICAgICAgICAgICAgICdKYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHknLAorICAgICAgICAgICAgICAgJy0t
b3V0cHV0RGlyJywgb3V0cHV0X2RpcmVjdG9yeSwKKyAgICAgICAgICAgICAgICctLWZvcmNlJywK
KyAgICAgICAgICAgICAgICctLWZyYW1ld29yaycsICdUZXN0JywKKyAgICAgICAgICAgICAgICct
LXRlc3QnLAorICAgICAgICAgICAgICAganNvbl9maWxlXQorCisgICAgICAgIGV4aXRfY29kZSA9
IDAKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc3RkZXJyX291dHB1dCA9IHNlbGYuZXhlY3V0
aXZlLnJ1bl9jb21tYW5kKGNtZCkKKyAgICAgICAgICAgIGlmIHN0ZGVycl9vdXRwdXQ6CisgICAg
ICAgICAgICAgICAgc2VsZi53cml0ZV9lcnJvcl9maWxlKGpzb25fZmlsZSwgb3V0cHV0X2RpcmVj
dG9yeSwgc3RkZXJyX291dHB1dCkKKyAgICAgICAgZXhjZXB0IFNjcmlwdEVycm9yLCBlOgorICAg
ICAgICAgICAgcHJpbnQgZS5vdXRwdXQKKyAgICAgICAgICAgIGV4aXRfY29kZSA9IGUuZXhpdF9j
b2RlCisgICAgICAgIHJldHVybiBleGl0X2NvZGUKKworICAgIGRlZiB3cml0ZV9lcnJvcl9maWxl
KHNlbGYsIGlucHV0X2ZpbGVwYXRoLCBvdXRwdXRfZGlyZWN0b3J5LCBlcnJvcl9vdXRwdXQpOgor
ICAgICAgICBvdXRwdXRfZmlsZXBhdGggPSBvcy5wYXRoLmpvaW4ob3V0cHV0X2RpcmVjdG9yeSwg
b3MucGF0aC5iYXNlbmFtZShpbnB1dF9maWxlcGF0aCkgKyAnLWVycm9yJykKKworICAgICAgICB3
aXRoIG9wZW4ob3V0cHV0X2ZpbGVwYXRoLCAidyIpIGFzIG91dHB1dF9maWxlOgorICAgICAgICAg
ICAgb3V0cHV0X2ZpbGUud3JpdGUoZXJyb3Jfb3V0cHV0KQorCisgICAgZGVmIGRldGVjdF9jaGFu
Z2VzKHNlbGYsIHdvcmtfZGlyZWN0b3J5LCByZWZlcmVuY2VfZGlyZWN0b3J5KToKKyAgICAgICAg
Y2hhbmdlc19mb3VuZCA9IEZhbHNlCisgICAgICAgIGZvciBvdXRwdXRfZmlsZSBpbiBvcy5saXN0
ZGlyKHdvcmtfZGlyZWN0b3J5KToKKyAgICAgICAgICAgIGNtZCA9IFsnZGlmZicsCisgICAgICAg
ICAgICAgICAgICAgJy11JywKKyAgICAgICAgICAgICAgICAgICAnLU4nLAorICAgICAgICAgICAg
ICAgICAgIG9zLnBhdGguam9pbihyZWZlcmVuY2VfZGlyZWN0b3J5LCBvdXRwdXRfZmlsZSksCisg
ICAgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKHdvcmtfZGlyZWN0b3J5LCBvdXRwdXRfZmls
ZSldCisKKyAgICAgICAgICAgIGV4aXRfY29kZSA9IDAKKyAgICAgICAgICAgIHRyeToKKyAgICAg
ICAgICAgICAgICBvdXRwdXQgPSBzZWxmLmV4ZWN1dGl2ZS5ydW5fY29tbWFuZChjbWQpCisgICAg
ICAgICAgICBleGNlcHQgU2NyaXB0RXJyb3IsIGU6CisgICAgICAgICAgICAgICAgb3V0cHV0ID0g
ZS5vdXRwdXQKKyAgICAgICAgICAgICAgICBleGl0X2NvZGUgPSBlLmV4aXRfY29kZQorCisgICAg
ICAgICAgICBpZiBleGl0X2NvZGUgb3Igb3V0cHV0OgorICAgICAgICAgICAgICAgIHByaW50ICdG
QUlMOiAlcycgJSBvdXRwdXRfZmlsZQorICAgICAgICAgICAgICAgIHByaW50IG91dHB1dAorICAg
ICAgICAgICAgICAgIGNoYW5nZXNfZm91bmQgPSBUcnVlCisgICAgICAgICAgICBlbHNlOgorICAg
ICAgICAgICAgICAgIHByaW50ICdQQVNTOiAlcycgJSBvdXRwdXRfZmlsZQorICAgICAgICByZXR1
cm4gY2hhbmdlc19mb3VuZAorCisgICAgZGVmIHJ1bl90ZXN0cyhzZWxmLCBpbnB1dF9kaXJlY3Rv
cnksIHJlZmVyZW5jZV9kaXJlY3RvcnkpOgorICAgICAgICB3b3JrX2RpcmVjdG9yeSA9IHJlZmVy
ZW5jZV9kaXJlY3RvcnkKKworICAgICAgICBwYXNzZWQgPSBUcnVlCisgICAgICAgIGZvciBpbnB1
dF9maWxlIGluIG9zLmxpc3RkaXIoaW5wdXRfZGlyZWN0b3J5KToKKyAgICAgICAgICAgIChuYW1l
LCBleHRlbnNpb24pID0gb3MucGF0aC5zcGxpdGV4dChpbnB1dF9maWxlKQorICAgICAgICAgICAg
aWYgZXh0ZW5zaW9uICE9ICcuanNvbic6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAg
ICAgICAgICMgR2VuZXJhdGUgb3V0cHV0IGludG8gdGhlIHdvcmsgZGlyZWN0b3J5IChlaXRoZXIg
dGhlIGdpdmVuIG9uZSBvciBhCisgICAgICAgICAgICAjIHRlbXAgb25lIGlmIG5vdCByZXNldF9y
ZXN1bHRzIGlzIHBlcmZvcm1lZCkKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLnJlc2V0X3Jlc3Vs
dHM6CisgICAgICAgICAgICAgICAgd29ya19kaXJlY3RvcnkgPSB0ZW1wZmlsZS5ta2R0ZW1wKCkK
KworICAgICAgICAgICAgaWYgc2VsZi5nZW5lcmF0ZV9mcm9tX2pzb24ob3MucGF0aC5qb2luKGlu
cHV0X2RpcmVjdG9yeSwgaW5wdXRfZmlsZSksIHdvcmtfZGlyZWN0b3J5KToKKyAgICAgICAgICAg
ICAgICBwYXNzZWQgPSBGYWxzZQorCisgICAgICAgICAgICBpZiBzZWxmLnJlc2V0X3Jlc3VsdHM6
CisgICAgICAgICAgICAgICAgcHJpbnQgIlJlc2V0IHJlc3VsdHMgZm9yIHRlc3Q6ICVzIiAlIChp
bnB1dF9maWxlKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICMgRGV0
ZWN0IGNoYW5nZXMKKyAgICAgICAgICAgIGlmIHNlbGYuZGV0ZWN0X2NoYW5nZXMod29ya19kaXJl
Y3RvcnksIHJlZmVyZW5jZV9kaXJlY3RvcnkpOgorICAgICAgICAgICAgICAgIHBhc3NlZCA9IEZh
bHNlCisgICAgICAgICAgICBzaHV0aWwucm10cmVlKHdvcmtfZGlyZWN0b3J5KQorCisgICAgICAg
IHJldHVybiBwYXNzZWQKKworICAgIGRlZiBtYWluKHNlbGYpOgorICAgICAgICBjdXJyZW50X3Nj
bSA9IGRldGVjdF9zY21fc3lzdGVtKG9zLmN1cmRpcikKKyAgICAgICAgb3MuY2hkaXIob3MucGF0
aC5qb2luKGN1cnJlbnRfc2NtLmNoZWNrb3V0X3Jvb3QsICdTb3VyY2UnKSkKKworICAgICAgICBh
bGxfdGVzdHNfcGFzc2VkID0gVHJ1ZQorCisgICAgICAgIGlucHV0X2RpcmVjdG9yeSA9IG9zLnBh
dGguam9pbignSmF2YVNjcmlwdENvcmUnLCAnaW5zcGVjdG9yJywgJ3NjcmlwdHMnLCAndGVzdHMn
KQorICAgICAgICByZWZlcmVuY2VfZGlyZWN0b3J5ID0gb3MucGF0aC5qb2luKCdKYXZhU2NyaXB0
Q29yZScsICdpbnNwZWN0b3InLCAnc2NyaXB0cycsICd0ZXN0cycsICdleHBlY3RlZCcpCisgICAg
ICAgIGlmIG5vdCBzZWxmLnJ1bl90ZXN0cyhpbnB1dF9kaXJlY3RvcnksIHJlZmVyZW5jZV9kaXJl
Y3RvcnkpOgorICAgICAgICAgICAgYWxsX3Rlc3RzX3Bhc3NlZCA9IEZhbHNlCisKKyAgICAgICAg
cHJpbnQgJycKKyAgICAgICAgaWYgYWxsX3Rlc3RzX3Bhc3NlZDoKKyAgICAgICAgICAgIHByaW50
ICdBbGwgdGVzdHMgUEFTUyEnCisgICAgICAgICAgICByZXR1cm4gMAorICAgICAgICBlbHNlOgor
ICAgICAgICAgICAgcHJpbnQgJ1NvbWUgdGVzdHMgRkFJTCEgKFRvIHVwZGF0ZSB0aGUgcmVmZXJl
bmNlIGZpbGVzLCBleGVjdXRlICJydW4taW5zcGVjdG9yLWdlbmVyYXRvci10ZXN0cyAtLXJlc2V0
LXJlc3VsdHMiKScKKyAgICAgICAgICAgIHJldHVybiAtMQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>236611</attachid>
            <date>2014-08-14 12:50:01 -0700</date>
            <delta_ts>2014-08-14 15:41:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-131596-20140814125019.patch</filename>
            <type>text/plain</type>
            <size>716227</size>
            <attacher name="Brian Burg">burg</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTcyNTg3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA1
ZmI2NTlhN2M5MzJmMzQwYzFjOWNmNGU1MGQ1OGMzYTcwNTc5OGU0Li4zODEyOGM1ZDAxOWY5YjA1
MjE1Y2U1MmI4OTY5YzRjZmExNjg4YmJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzODYgQEAKKzIwMTQtMDgtMTQgIEJyaWFuIEouIEJ1cmcgIDxidXJnQGNzLndhc2hpbmd0
b24uZWR1PgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IHJld3JpdGUgQ29kZUdlbmVyYXRvcklu
c3BlY3RvciB0byBiZSBtb2R1bGFyIGFuZCB0ZXN0YWJsZQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMxNTk2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Sm9zZXBoIFBlY29yYXJvLgorCisgICAgICAgIFJlcGxhY2UgQ29kZUdlbmVyYXRvckluc3BlY3Rv
ci5weSB3aXRoIGdlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weS4KKyAgICAg
ICAgVGhlIG5ldyBnZW5lcmF0b3IgZGVjb3VwbGVzIHBhcnNpbmcgYW5kIHR5cGVjaGVja2luZyBh
IG1vZGVsIG9mIHRoZSBwcm90b2NvbCBmcm9tCisgICAgICAgIGNvZGUgZ2VuZXJhdGlvbi4gRWFj
aCBnZW5lcmF0ZWQgZmlsZSBpcyBjcmVhdGVkIGJ5IGEgZGlmZmVyZW50IHN1YmNsYXNzIG9mIEdl
bmVyYXRvci4KKyAgICAgICAgSGVscGVyIG1ldGhvZHMgdG8gY29tcHV0ZSB2YXJpb3VzIHR5cGUg
c2lnbmF0dXJlcyBhcmUgc2hhcmVkIGFtb25nIGdlbmVyYXRvcnMuCisKKyAgICAgICAgVGhpcyBw
YXRjaCBpbnRyb2R1Y2VzIGEgdGVzdCBoYXJuZXNzIGFuZCBhIHRlc3Qgc3VpdGUgdGhhdCBjb3Zl
cnMgYWxsIGZ1bmN0aW9uYWxpdHkuCisKKyAgICAgICAgQXNpZGUgZnJvbSBob29raW5nIHVwIHRo
ZSBuZXcgaW5zcGVjdG9yIGJpbmRpbmdzIGdlbmVyYXRvciB0byB0aGUgYnVpbGQgc3lzdGVtLAor
ICAgICAgICB0aGVyZSBhcmUgYSBmZXcgY29taW5nbGVkIGNoYW5nZXMgdGhhdCB3b3VsZCBiZSBw
YWluZnVsIHRvIHNwbGl0IGZyb20gdGhlIG1haW4KKyAgICAgICAgcGF0Y2g6CisKKyAgICAgICAg
Q29udmVydCBwcm90b2NvbCBlbnVtZXJhdGlvbiB0eXBlcyBmcm9tIHN0cnVjdC1uYW1lc3BhY2Vk
IGVudW1zIHRvIEMrKyBzY29wZWQgZW51bXMuCisKKyAgICAgICAgTW92ZSBhbGwgcnVudGltZUNh
c3QoKSwgYXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoKSwgYW5kIFJ1bnRpbWVDYXN0SGVscGVy
IG1ldGhvZHMgdG8gc3RhdGljCisgICAgICAgIG1ldGhvZHMgb2YgQmluZGluZ1RyYWl0cyBzcGVj
aWFsaXphdGlvbnMuCisKKyAgICAgICAgVG9nZXRoZXIsIHRoZXNlIGNoYW5nZXMgcmVkdWNlIGR1
cGxpY2F0aW9uIGFuZCBtYWtlIGl0IHBvc3NpYmxlIHRvIGZvcndhcmQtZGVjbGFyZQorICAgICAg
ICBhbGwgcHJvdG9jb2wgZW51bSBhbmQgb2JqZWN0IHR5cGVzLCByZWR1Y2luZyB3ZWlyZCBvcmRl
cmluZyBkZXBlbmRlbmNpZXMgYmV0d2VlbiBkb21haW5zLgorCisgICAgICAgICogQ01ha2VMaXN0
cy50eHQ6CisgICAgICAgICogRGVyaXZlZFNvdXJjZXMubWFrZToKKyAgICAgICAgKiBKYXZhU2Ny
aXB0Q29yZS52Y3hwcm9qL2NvcHktZmlsZXMuY21kOgorICAgICAgICAqIEphdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogaW5zcGVjdG9yL0NvbnNvbGVN
ZXNzYWdlLmNwcDogQ29udmVydCB0byBzY29wZWQgZW51bXMuCisgICAgICAgIChJbnNwZWN0b3I6
Om1lc3NhZ2VTb3VyY2VWYWx1ZSk6CisgICAgICAgIChJbnNwZWN0b3I6Om1lc3NhZ2VUeXBlVmFs
dWUpOgorICAgICAgICAoSW5zcGVjdG9yOjptZXNzYWdlTGV2ZWxWYWx1ZSk6CisgICAgICAgICog
aW5zcGVjdG9yL0luamVjdGVkU2NyaXB0LmNwcDogQ29udmVydCB0byBzY29wZWQgZW51bXMgYW5k
IEJpbmRpbmdUcmFpdHMuCisgICAgICAgIChJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0OjpnZXRG
dW5jdGlvbkRldGFpbHMpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdDo6Z2V0
UHJvcGVydGllcyk6CisgICAgICAgIChJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0OjpnZXRJbnRl
cm5hbFByb3BlcnRpZXMpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdDo6d3Jh
cENhbGxGcmFtZXMpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdDo6d3JhcE9i
amVjdCk6CisgICAgICAgIChJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0Ojp3cmFwVGFibGUpOgor
ICAgICAgICAqIGluc3BlY3Rvci9JbmplY3RlZFNjcmlwdEJhc2UuY3BwOiBDb252ZXJ0IEluc3Bl
Y3RvclZhbHVlOjpUeXBlIHRvIGEgc2NvcGVkIGVudW0uCisgICAgICAgIChJbnNwZWN0b3I6Oklu
amVjdGVkU2NyaXB0QmFzZTo6bWFrZUV2YWxDYWxsKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5q
ZWN0ZWRTY3JpcHRNYW5hZ2VyLmNwcDoKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3Jp
cHRNYW5hZ2VyOjppbmplY3RlZFNjcmlwdEZvck9iamVjdElkKToKKyAgICAgICAgKiBpbnNwZWN0
b3IvSW5zcGVjdG9yVHlwZUJ1aWxkZXIuaDoKKyAgICAgICAgKEluc3BlY3Rvcjo6VHlwZUJ1aWxk
ZXI6OkFycmF5OjpjcmVhdGUpOgorICAgICAgICAoSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6U3Ry
dWN0SXRlbVRyYWl0czo6cHVzaFJlZlB0cik6CisgICAgICAgIChJbnNwZWN0b3I6OlR5cGVCdWls
ZGVyOjpBcnJheUl0ZW1IZWxwZXI8U3RyaW5nPjo6VHJhaXRzOjpwdXNoUmF3KToKKyAgICAgICAg
KEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5SXRlbUhlbHBlcjxpbnQ+OjpUcmFpdHM6OnB1
c2hSYXcpOgorICAgICAgICAoSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXlJdGVtSGVscGVy
PGRvdWJsZT46OlRyYWl0czo6cHVzaFJhdyk6CisgICAgICAgIChJbnNwZWN0b3I6OlR5cGVCdWls
ZGVyOjpBcnJheUl0ZW1IZWxwZXI8Ym9vbD46OlRyYWl0czo6cHVzaFJhdyk6CisgICAgICAgIChJ
bnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheUl0ZW1IZWxwZXI8SW5zcGVjdG9yVmFsdWU+OjpU
cmFpdHM6OnB1c2hSZWZQdHIpOgorICAgICAgICAoSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJy
YXlJdGVtSGVscGVyPEluc3BlY3Rvck9iamVjdD46OlRyYWl0czo6cHVzaFJlZlB0cik6CisgICAg
ICAgIChJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheUl0ZW1IZWxwZXI8SW5zcGVjdG9yQXJy
YXk+OjpUcmFpdHM6OnB1c2hSZWZQdHIpOgorICAgICAgICAoSW5zcGVjdG9yOjpUeXBlQnVpbGRl
cjo6UHJpbWl0aXZlQmluZGluZ1RyYWl0czo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUpOgor
ICAgICAgICAoSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QmluZGluZ1RyYWl0czxUeXBlQnVpbGRl
cjo6QXJyYXk8VD4+OjpydW50aW1lQ2FzdCk6CisgICAgICAgIChJbnNwZWN0b3I6OlR5cGVCdWls
ZGVyOjpCaW5kaW5nVHJhaXRzPFR5cGVCdWlsZGVyOjpBcnJheTxUPj46OmFzc2VydFZhbHVlSGFz
RXhwZWN0ZWRUeXBlKToKKyAgICAgICAgKEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkJpbmRpbmdU
cmFpdHM8SW5zcGVjdG9yVmFsdWU+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZSk6CisgICAg
ICAgIChJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpCaW5kaW5nVHJhaXRzPGludD46OmFzc2VydFZh
bHVlSGFzRXhwZWN0ZWRUeXBlKToKKyAgICAgICAgKEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkV4
YWN0bHlJbnQ6OkV4YWN0bHlJbnQpOiBEZWxldGVkLiBJdCB3YXMgbm90IHVzZWQuCisgICAgICAg
IChJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpFeGFjdGx5SW50OjpvcGVyYXRvciBpbnQpOiBEZWxl
dGVkLgorICAgICAgICAoSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6RXhhY3RseUludDo6Y2FzdF90
b19pbnQpOiBEZWxldGVkLgorICAgICAgICAoSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6RXhhY3Rs
eUludDo6Y2FzdF90b19pbnQ8aW50Pik6IERlbGV0ZWQuCisgICAgICAgIChJbnNwZWN0b3I6OlR5
cGVCdWlsZGVyOjppbnQ+KTogRGVsZXRlZC4KKyAgICAgICAgKEluc3BlY3Rvcjo6VHlwZUJ1aWxk
ZXI6OlJ1bnRpbWVDYXN0SGVscGVyOjphc3NlcnRUeXBlKTogRGVsZXRlZC4KKyAgICAgICAgKElu
c3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlJ1bnRpbWVDYXN0SGVscGVyOjphc3NlcnRBbnkpOiBEZWxl
dGVkLgorICAgICAgICAoSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UnVudGltZUNhc3RIZWxwZXI6
OmFzc2VydEludCk6IERlbGV0ZWQuCisgICAgICAgIChJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpB
cnJheTo6cnVudGltZUNhc3QpOiBEZWxldGVkLgorICAgICAgICAoSW5zcGVjdG9yOjpUeXBlQnVp
bGRlcjo6QXJyYXk6OmFzc2VydENvcnJlY3RWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgIChJbnNw
ZWN0b3I6OlR5cGVCdWlsZGVyOjpTdHJ1Y3RJdGVtVHJhaXRzOjphc3NlcnRDb3JyZWN0VmFsdWUp
OiBEZWxldGVkLgorICAgICAgICAoSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXlJdGVtSGVs
cGVyPFN0cmluZz46OlRyYWl0czo6YXNzZXJ0Q29ycmVjdFZhbHVlKTogRGVsZXRlZC4KKyAgICAg
ICAgKEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5SXRlbUhlbHBlcjxpbnQ+OjpUcmFpdHM6
OmFzc2VydENvcnJlY3RWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgIChJbnNwZWN0b3I6OlR5cGVC
dWlsZGVyOjpBcnJheUl0ZW1IZWxwZXI8ZG91YmxlPjo6VHJhaXRzOjphc3NlcnRDb3JyZWN0VmFs
dWUpOiBEZWxldGVkLgorICAgICAgICAoSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXlJdGVt
SGVscGVyPGJvb2w+OjpUcmFpdHM6OmFzc2VydENvcnJlY3RWYWx1ZSk6IERlbGV0ZWQuCisgICAg
ICAgIChJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheUl0ZW1IZWxwZXI8SW5zcGVjdG9yVmFs
dWU+OjpUcmFpdHM6OmFzc2VydENvcnJlY3RWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgIChJbnNw
ZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheUl0ZW1IZWxwZXI8SW5zcGVjdG9yT2JqZWN0Pjo6VHJh
aXRzOjphc3NlcnRDb3JyZWN0VmFsdWUpOiBEZWxldGVkLgorICAgICAgICAoSW5zcGVjdG9yOjpU
eXBlQnVpbGRlcjo6QXJyYXlJdGVtSGVscGVyPEluc3BlY3RvckFycmF5Pjo6VHJhaXRzOjphc3Nl
cnRDb3JyZWN0VmFsdWUpOiBEZWxldGVkLgorICAgICAgICAoSW5zcGVjdG9yOjpUeXBlQnVpbGRl
cjo6QXJyYXlJdGVtSGVscGVyPFR5cGVCdWlsZGVyOjpBcnJheTxUPj46OlRyYWl0czo6YXNzZXJ0
Q29ycmVjdFZhbHVlKTogRGVsZXRlZC4KKworICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JW
YWx1ZXMuY3BwOiBDb252ZXJ0IEluc3BlY3RvclZhbHVlOjpUeXBlIHRvIGEgc2NvcGVkIGVudW0u
CisgICAgICAgIChJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlOjp3cml0ZUpTT04pOgorICAgICAg
ICAoSW5zcGVjdG9yOjpJbnNwZWN0b3JCYXNpY1ZhbHVlOjphc0Jvb2xlYW4pOgorICAgICAgICAo
SW5zcGVjdG9yOjpJbnNwZWN0b3JCYXNpY1ZhbHVlOjphc051bWJlcik6CisgICAgICAgIChJbnNw
ZWN0b3I6Okluc3BlY3RvckJhc2ljVmFsdWU6OndyaXRlSlNPTik6CisgICAgICAgIChJbnNwZWN0
b3I6Okluc3BlY3RvclN0cmluZzo6d3JpdGVKU09OKToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5z
cGVjdG9yT2JqZWN0QmFzZTo6SW5zcGVjdG9yT2JqZWN0QmFzZSk6CisgICAgICAgIChJbnNwZWN0
b3I6Okluc3BlY3Rvck9iamVjdEJhc2U6OnNldEFycmF5KTogVGFrZSBJbnNwZWN0b3JBcnJheUJh
c2UuCisgICAgICAgIChJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdEJhc2U6OnNldE9iamVjdCk6
IFRha2UgSW5zcGVjdG9yT2JqZWN0QmFzZS4KKyAgICAgICAgKEluc3BlY3Rvcjo6SW5zcGVjdG9y
QXJyYXlCYXNlOjpJbnNwZWN0b3JBcnJheUJhc2UpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNw
ZWN0b3JWYWx1ZXMuaDoKKworICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRGVi
dWdnZXJBZ2VudC5jcHA6IENvbnZlcnQgdG8gc2NvcGVkIGVudW1zLgorICAgICAgICAoSW5zcGVj
dG9yOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzY2hlZHVsZVBhdXNlT25OZXh0U3RhdGVtZW50
KToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6YnJlYWtQcm9n
cmFtKToKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQu
aDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclJ1bnRpbWVBZ2VudC5jcHA6
CisgICAgICAgIChJbnNwZWN0b3I6Okluc3BlY3RvclJ1bnRpbWVBZ2VudDo6cGFyc2UpOgorICAg
ICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUnVudGltZUFnZW50Lmg6CisKKyAgICAg
ICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5OiBSZW1vdmVk
LgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vX19pbml0X18ucHk6IEFkZGVk
LgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfYmFja2VuZF9j
b21tYW5kcy5weTogQWRkZWQuCisgICAgICAgIChCYWNrZW5kQ29tbWFuZHNHZW5lcmF0b3IpOgor
ICAgICAgICAoQmFja2VuZENvbW1hbmRzR2VuZXJhdG9yLl9faW5pdF9fKToKKyAgICAgICAgKEJh
Y2tlbmRDb21tYW5kc0dlbmVyYXRvci5tb2RlbCk6CisgICAgICAgIChCYWNrZW5kQ29tbWFuZHNH
ZW5lcmF0b3Iub3V0cHV0X2ZpbGVuYW1lKToKKyAgICAgICAgKEJhY2tlbmRDb21tYW5kc0dlbmVy
YXRvci5nZW5lcmF0ZV9saWNlbnNlKToKKyAgICAgICAgKEJhY2tlbmRDb21tYW5kc0dlbmVyYXRv
ci5nZW5lcmF0ZV9vdXRwdXQpOgorICAgICAgICAoQmFja2VuZENvbW1hbmRzR2VuZXJhdG9yLmdl
bmVyYXRlX2RvbWFpbik6CisgICAgICAgIChCYWNrZW5kQ29tbWFuZHNHZW5lcmF0b3IuZ2VuZXJh
dGVfZG9tYWluLmlzX2Fub255bW91c19lbnVtX21lbWJlcik6CisgICAgICAgIChCYWNrZW5kQ29t
bWFuZHNHZW5lcmF0b3IuZ2VuZXJhdGVfZG9tYWluLmdlbmVyYXRlX3BhcmFtZXRlcl9vYmplY3Qp
OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfYmFja2VuZF9k
aXNwYXRjaGVyX2hlYWRlci5weTogQWRkZWQuCisgICAgICAgIChCYWNrZW5kRGlzcGF0Y2hlckhl
YWRlckdlbmVyYXRvcik6CisgICAgICAgIChCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRv
ci5fX2luaXRfXyk6CisgICAgICAgIChCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvci5t
b2RlbCk6CisgICAgICAgIChCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvci5vdXRwdXRf
ZmlsZW5hbWUpOgorICAgICAgICAoQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IuZ2Vu
ZXJhdGVfbGljZW5zZSk6CisgICAgICAgIChCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRv
ci5nZW5lcmF0ZV9vdXRwdXQpOgorICAgICAgICAoQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5l
cmF0b3IuZ2VuZXJhdGVfb3V0cHV0LmZvcik6CisgICAgICAgIChCYWNrZW5kRGlzcGF0Y2hlckhl
YWRlckdlbmVyYXRvci5fZ2VuZXJhdGVfaGFuZGxlcl9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbik6
CisgICAgICAgIChCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvci5fZ2VuZXJhdGVfYW5v
bnltb3VzX2VudW1fZm9yX3BhcmFtZXRlcik6CisgICAgICAgIChCYWNrZW5kRGlzcGF0Y2hlckhl
YWRlckdlbmVyYXRvci5fZ2VuZXJhdGVfaGFuZGxlcl9kZWNsYXJhdGlvbl9mb3JfY29tbWFuZCk6
CisgICAgICAgIChCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvci5fZ2VuZXJhdGVfYXN5
bmNfaGFuZGxlcl9kZWNsYXJhdGlvbl9mb3JfY29tbWFuZCk6CisgICAgICAgIChCYWNrZW5kRGlz
cGF0Y2hlckhlYWRlckdlbmVyYXRvci5fZ2VuZXJhdGVfZGlzcGF0Y2hlcl9kZWNsYXJhdGlvbnNf
Zm9yX2RvbWFpbik6CisgICAgICAgIChCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvci5f
Z2VuZXJhdGVfZGlzcGF0Y2hlcl9kZWNsYXJhdGlvbl9mb3JfY29tbWFuZCk6CisgICAgICAgICog
aW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaW1w
bGVtZW50YXRpb24ucHk6IEFkZGVkLgorICAgICAgICAoQmFja2VuZERpc3BhdGNoZXJJbXBsZW1l
bnRhdGlvbkdlbmVyYXRvcik6CisgICAgICAgIChCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0
aW9uR2VuZXJhdG9yLl9faW5pdF9fKToKKyAgICAgICAgKEJhY2tlbmREaXNwYXRjaGVySW1wbGVt
ZW50YXRpb25HZW5lcmF0b3IubW9kZWwpOgorICAgICAgICAoQmFja2VuZERpc3BhdGNoZXJJbXBs
ZW1lbnRhdGlvbkdlbmVyYXRvci5vdXRwdXRfZmlsZW5hbWUpOgorICAgICAgICAoQmFja2VuZERp
c3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5nZW5lcmF0ZV9saWNlbnNlKToKKyAgICAg
ICAgKEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IuZ2VuZXJhdGVfb3V0
cHV0KToKKyAgICAgICAgKEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3Iu
X2dlbmVyYXRlX2hhbmRsZXJfY2xhc3NfZGVzdHJ1Y3Rvcl9mb3JfZG9tYWluKToKKyAgICAgICAg
KEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX2Rpc3Bh
dGNoZXJfaW1wbGVtZW50YXRpb25zX2Zvcl9kb21haW4pOgorICAgICAgICAoQmFja2VuZERpc3Bh
dGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfc21hbGxfZGlzcGF0Y2hlcl9z
d2l0Y2hfaW1wbGVtZW50YXRpb25fZm9yX2RvbWFpbik6CisgICAgICAgIChCYWNrZW5kRGlzcGF0
Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9sYXJnZV9kaXNwYXRjaGVyX3N3
aXRjaF9pbXBsZW1lbnRhdGlvbl9mb3JfZG9tYWluKToKKyAgICAgICAgKEJhY2tlbmREaXNwYXRj
aGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX2FzeW5jX2Rpc3BhdGNoZXJfY2xh
c3NfZm9yX2RvbWFpbik6CisgICAgICAgIChCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9u
R2VuZXJhdG9yLl9nZW5lcmF0ZV9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uX2Zvcl9jb21tYW5k
KToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2Zyb250ZW5k
X2Rpc3BhdGNoZXJfaGVhZGVyLnB5OiBBZGRlZC4KKyAgICAgICAgKEZyb250ZW5kRGlzcGF0Y2hl
ckhlYWRlckdlbmVyYXRvcik6CisgICAgICAgIChGcm9udGVuZERpc3BhdGNoZXJIZWFkZXJHZW5l
cmF0b3IuX19pbml0X18pOgorICAgICAgICAoRnJvbnRlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJh
dG9yLm1vZGVsKToKKyAgICAgICAgKEZyb250ZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvci5v
dXRwdXRfZmlsZW5hbWUpOgorICAgICAgICAoRnJvbnRlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJh
dG9yLmdlbmVyYXRlX2xpY2Vuc2UpOgorICAgICAgICAoRnJvbnRlbmREaXNwYXRjaGVySGVhZGVy
R2VuZXJhdG9yLmdlbmVyYXRlX291dHB1dCk6CisgICAgICAgIChGcm9udGVuZERpc3BhdGNoZXJI
ZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRlX2Fub255bW91c19lbnVtX2Zvcl9wYXJhbWV0ZXIpOgor
ICAgICAgICAoRnJvbnRlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yLl9nZW5lcmF0ZV9kaXNw
YXRjaGVyX2RlY2xhcmF0aW9uc19mb3JfZG9tYWluKToKKyAgICAgICAgKEZyb250ZW5kRGlzcGF0
Y2hlckhlYWRlckdlbmVyYXRvci5fZ2VuZXJhdGVfZGlzcGF0Y2hlcl9kZWNsYXJhdGlvbl9mb3Jf
ZXZlbnQpOgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfZnJv
bnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weTogQWRkZWQuCisgICAgICAgIChGcm9u
dGVuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcik6CisgICAgICAgIChGcm9udGVu
ZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fX2luaXRfXyk6CisgICAgICAgIChG
cm9udGVuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5tb2RlbCk6CisgICAgICAg
IChGcm9udGVuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5vdXRwdXRfZmlsZW5h
bWUpOgorICAgICAgICAoRnJvbnRlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3Iu
Z2VuZXJhdGVfbGljZW5zZSk6CisgICAgICAgIChGcm9udGVuZERpc3BhdGNoZXJJbXBsZW1lbnRh
dGlvbkdlbmVyYXRvci5nZW5lcmF0ZV9vdXRwdXQpOgorICAgICAgICAoRnJvbnRlbmREaXNwYXRj
aGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX2Rpc3BhdGNoZXJfaW1wbGVtZW50
YXRpb25zX2Zvcl9kb21haW4pOgorICAgICAgICAoRnJvbnRlbmREaXNwYXRjaGVySW1wbGVtZW50
YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb25fZm9yX2V2
ZW50KToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX3R5cGVf
YnVpbGRlcl9oZWFkZXIucHk6IEFkZGVkLgorICAgICAgICAoVHlwZUJ1aWxkZXJIZWFkZXJHZW5l
cmF0b3IpOgorICAgICAgICAoVHlwZUJ1aWxkZXJIZWFkZXJHZW5lcmF0b3IuX19pbml0X18pOgor
ICAgICAgICAoVHlwZUJ1aWxkZXJIZWFkZXJHZW5lcmF0b3IubW9kZWwpOgorICAgICAgICAoVHlw
ZUJ1aWxkZXJIZWFkZXJHZW5lcmF0b3Iub3V0cHV0X2ZpbGVuYW1lKToKKyAgICAgICAgKFR5cGVC
dWlsZGVySGVhZGVyR2VuZXJhdG9yLmdlbmVyYXRlX2xpY2Vuc2UpOgorICAgICAgICAoVHlwZUJ1
aWxkZXJIZWFkZXJHZW5lcmF0b3IuZ2VuZXJhdGVfb3V0cHV0KToKKyAgICAgICAgKFR5cGVCdWls
ZGVySGVhZGVyR2VuZXJhdG9yLl9nZW5lcmF0ZV9mb3J3YXJkX2RlY2xhcmF0aW9ucyk6CisgICAg
ICAgIChfZ2VuZXJhdGVfdHlwZWRlZnMpOgorICAgICAgICAoX2dlbmVyYXRlX3R5cGVkZWZzX2Zv
cl9kb21haW4pOgorICAgICAgICAoX2dlbmVyYXRlX2J1aWxkZXJzX2Zvcl9kb21haW4pOgorICAg
ICAgICAoX2dlbmVyYXRlX2NsYXNzX2Zvcl9vYmplY3RfZGVjbGFyYXRpb24pOgorICAgICAgICAo
X2dlbmVyYXRlX3N0cnVjdF9mb3JfZW51bV9kZWNsYXJhdGlvbik6CisgICAgICAgIChfZ2VuZXJh
dGVfc3RydWN0X2Zvcl9hbm9ueW1vdXNfZW51bV9tZW1iZXIpOgorICAgICAgICAoX2dlbmVyYXRl
X3N0cnVjdF9mb3JfYW5vbnltb3VzX2VudW1fbWVtYmVyLmFwcGx5X2luZGVudGF0aW9uKToKKyAg
ICAgICAgKF9nZW5lcmF0ZV9zdHJ1Y3RfZm9yX2VudW1fdHlwZSk6CisgICAgICAgIChfZ2VuZXJh
dGVfYnVpbGRlcl9zdGF0ZV9lbnVtKToKKyAgICAgICAgKF9nZW5lcmF0ZV9idWlsZGVyX3NldHRl
cl9mb3JfbWVtYmVyKToKKyAgICAgICAgKF9nZW5lcmF0ZV91bmNoZWNrZWRfc2V0dGVyX2Zvcl9t
ZW1iZXIpOgorICAgICAgICAoX2dlbmVyYXRlX2ZvcndhcmRfZGVjbGFyYXRpb25zX2Zvcl9iaW5k
aW5nX3RyYWl0cyk6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0
ZV90eXBlX2J1aWxkZXJfaW1wbGVtZW50YXRpb24ucHk6IEFkZGVkLgorICAgICAgICAoVHlwZUJ1
aWxkZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcik6CisgICAgICAgIChUeXBlQnVpbGRlckltcGxl
bWVudGF0aW9uR2VuZXJhdG9yLl9faW5pdF9fKToKKyAgICAgICAgKFR5cGVCdWlsZGVySW1wbGVt
ZW50YXRpb25HZW5lcmF0b3IubW9kZWwpOgorICAgICAgICAoVHlwZUJ1aWxkZXJJbXBsZW1lbnRh
dGlvbkdlbmVyYXRvci5vdXRwdXRfZmlsZW5hbWUpOgorICAgICAgICAoVHlwZUJ1aWxkZXJJbXBs
ZW1lbnRhdGlvbkdlbmVyYXRvci5nZW5lcmF0ZV9saWNlbnNlKToKKyAgICAgICAgKFR5cGVCdWls
ZGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IuZ2VuZXJhdGVfb3V0cHV0KToKKyAgICAgICAgKFR5
cGVCdWlsZGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX2VudW1fbWFwcGluZyk6
CisgICAgICAgIChUeXBlQnVpbGRlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9v
cGVuX2ZpZWxkX25hbWVzKToKKyAgICAgICAgKFR5cGVCdWlsZGVySW1wbGVtZW50YXRpb25HZW5l
cmF0b3IuX2dlbmVyYXRlX2J1aWxkZXJzX2Zvcl9kb21haW4pOgorICAgICAgICAoVHlwZUJ1aWxk
ZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfcnVudGltZV9jYXN0X2Zvcl9vYmpl
Y3RfZGVjbGFyYXRpb24pOgorICAgICAgICAoVHlwZUJ1aWxkZXJJbXBsZW1lbnRhdGlvbkdlbmVy
YXRvci5fZ2VuZXJhdGVfYXNzZXJ0aW9uX2Zvcl9vYmplY3RfZGVjbGFyYXRpb24pOgorICAgICAg
ICAoVHlwZUJ1aWxkZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfYXNzZXJ0aW9u
X2Zvcl9lbnVtKToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRv
ci5weTogQWRkZWQuCisgICAgICAgICh1Y2ZpcnN0KToKKyAgICAgICAgKEdlbmVyYXRvcik6Cisg
ICAgICAgIChHZW5lcmF0b3IuX19pbml0X18pOgorICAgICAgICAoR2VuZXJhdG9yLm1vZGVsKToK
KyAgICAgICAgKEdlbmVyYXRvci5nZW5lcmF0ZV9saWNlbnNlKToKKyAgICAgICAgKEdlbmVyYXRv
ci5kb21haW5zX3RvX2dlbmVyYXRlKToKKyAgICAgICAgKEdlbmVyYXRvci5nZW5lcmF0ZV9vdXRw
dXQpOgorICAgICAgICAoR2VuZXJhdG9yLm91dHB1dF9maWxlbmFtZSk6CisgICAgICAgIChHZW5l
cmF0b3IuZW5jb2RpbmdfZm9yX2VudW1fdmFsdWUpOgorICAgICAgICAoR2VuZXJhdG9yLmFzc2ln
bmVkX2VudW1fdmFsdWVzKToKKyAgICAgICAgKEdlbmVyYXRvci50eXBlX25lZWRzX3J1bnRpbWVf
Y2FzdHMpOgorICAgICAgICAoR2VuZXJhdG9yLnR5cGVfaGFzX29wZW5fZmllbGRzKToKKyAgICAg
ICAgKEdlbmVyYXRvci50eXBlX25lZWRzX3NoYXBlX2Fzc2VydGlvbnMpOgorICAgICAgICAoR2Vu
ZXJhdG9yLmNhbGN1bGF0ZV90eXBlc19yZXF1aXJpbmdfc2hhcGVfYXNzZXJ0aW9ucyk6CisgICAg
ICAgIChHZW5lcmF0b3IuY2FsY3VsYXRlX3R5cGVzX3JlcXVpcmluZ19zaGFwZV9hc3NlcnRpb25z
LmdhdGhlcl90cmFuc2l0aXZlbHlfcmVmZXJlbmNlZF90eXBlcyk6CisgICAgICAgIChHZW5lcmF0
b3IuX3RyYXZlcnNlX2FuZF9hc3NpZ25fZW51bV92YWx1ZXMpOgorICAgICAgICAoR2VuZXJhdG9y
Ll9hc3NpZ25fZW5jb2RpbmdfZm9yX2VudW1fdmFsdWUpOgorICAgICAgICAoR2VuZXJhdG9yLndy
YXBfd2l0aF9ndWFyZF9mb3JfZG9tYWluKToKKyAgICAgICAgKEdlbmVyYXRvci5zdHlsaXplZF9u
YW1lX2Zvcl9lbnVtX3ZhbHVlKToKKyAgICAgICAgKEdlbmVyYXRvci5zdHlsaXplZF9uYW1lX2Zv
cl9lbnVtX3ZhbHVlLnJlcGxhY2VDYWxsYmFjayk6CisgICAgICAgIChHZW5lcmF0b3Iua2V5ZWRf
Z2V0X21ldGhvZF9mb3JfdHlwZSk6CisgICAgICAgIChHZW5lcmF0b3Iua2V5ZWRfc2V0X21ldGhv
ZF9mb3JfdHlwZSk6CisgICAgICAgIChHZW5lcmF0b3IudHlwZV9idWlsZGVyX3N0cmluZ19mb3Jf
dHlwZSk6CisgICAgICAgIChHZW5lcmF0b3IudHlwZV9idWlsZGVyX3N0cmluZ19mb3JfdHlwZV9t
ZW1iZXIpOgorICAgICAgICAoR2VuZXJhdG9yLnR5cGVfc3RyaW5nX2Zvcl91bmNoZWNrZWRfZm9y
bWFsX2luX3BhcmFtZXRlcik6CisgICAgICAgIChHZW5lcmF0b3IudHlwZV9zdHJpbmdfZm9yX2No
ZWNrZWRfZm9ybWFsX2V2ZW50X3BhcmFtZXRlcik6CisgICAgICAgIChHZW5lcmF0b3IudHlwZV9z
dHJpbmdfZm9yX3R5cGVfbWVtYmVyKToKKyAgICAgICAgKEdlbmVyYXRvci50eXBlX3N0cmluZ19m
b3JfdHlwZV93aXRoX25hbWUpOgorICAgICAgICAoR2VuZXJhdG9yLnR5cGVfc3RyaW5nX2Zvcl9m
b3JtYWxfb3V0X3BhcmFtZXRlcik6CisgICAgICAgIChHZW5lcmF0b3IudHlwZV9zdHJpbmdfZm9y
X2Zvcm1hbF9hc3luY19wYXJhbWV0ZXIpOgorICAgICAgICAoR2VuZXJhdG9yLnR5cGVfc3RyaW5n
X2Zvcl9zdGFja19pbl9wYXJhbWV0ZXIpOgorICAgICAgICAoR2VuZXJhdG9yLnR5cGVfc3RyaW5n
X2Zvcl9zdGFja19vdXRfcGFyYW1ldGVyKToKKyAgICAgICAgKEdlbmVyYXRvci5hc3NlcnRpb25f
bWV0aG9kX2Zvcl90eXBlX21lbWJlcik6CisgICAgICAgIChHZW5lcmF0b3IuYXNzZXJ0aW9uX21l
dGhvZF9mb3JfdHlwZV9tZW1iZXIuYXNzZXJ0aW9uX21ldGhvZF9mb3JfdHlwZSk6CisgICAgICAg
IChHZW5lcmF0b3IuY3BwX25hbWVfZm9yX3ByaW1pdGl2ZV90eXBlKToKKyAgICAgICAgKEdlbmVy
YXRvci5qc19uYW1lX2Zvcl9wYXJhbWV0ZXJfdHlwZSk6CisgICAgICAgIChHZW5lcmF0b3Iuc2hv
dWxkX3VzZV93cmFwcGVyX2Zvcl9yZXR1cm5fdHlwZSk6CisgICAgICAgIChHZW5lcmF0b3Iuc2hv
dWxkX3Bhc3NfYnlfY29weV9mb3JfcmV0dXJuX3R5cGUpOgorICAgICAgICAqIGluc3BlY3Rvci9z
Y3JpcHRzL2NvZGVnZW4vZ2VuZXJhdG9yX3RlbXBsYXRlcy5weTogQWRkZWQuCisgICAgICAgIChH
ZW5lcmF0b3JUZW1wbGF0ZXMpOgorICAgICAgICAodm9pZCk6CisgICAgICAgIChIYXNoTWFwKToK
KyAgICAgICAgKEJ1aWxkZXIpOgorICAgICAgICAoSW5zcGVjdG9yKToKKyAgICAgICAgKiBpbnNw
ZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL21vZGVscy5weTogQWRkZWQuCisgICAgICAgICh1Y2ZpcnN0
KToKKyAgICAgICAgKFBhcnNlRXhjZXB0aW9uKToKKyAgICAgICAgKFR5cGVjaGVja0V4Y2VwdGlv
bik6CisgICAgICAgIChGcmFtZXdvcmspOgorICAgICAgICAoRnJhbWV3b3JrLl9faW5pdF9fKToK
KyAgICAgICAgKEZyYW1ld29yay5zZXR0aW5nKToKKyAgICAgICAgKEZyYW1ld29yay5mcm9tU3Ry
aW5nKToKKyAgICAgICAgKEZyYW1ld29ya3MpOgorICAgICAgICAoVHlwZVJlZmVyZW5jZSk6Cisg
ICAgICAgIChUeXBlUmVmZXJlbmNlLl9faW5pdF9fKToKKyAgICAgICAgKFR5cGVSZWZlcmVuY2Uu
cmVmZXJlbmNlZF9uYW1lKToKKyAgICAgICAgKFR5cGUpOgorICAgICAgICAoVHlwZS5fX2luaXRf
Xyk6CisgICAgICAgIChUeXBlLl9fZXFfXyk6CisgICAgICAgIChUeXBlLl9faGFzaF9fKToKKyAg
ICAgICAgKFR5cGUucmF3X25hbWUpOgorICAgICAgICAoVHlwZS5pc19lbnVtKToKKyAgICAgICAg
KFR5cGUudHlwZV9kb21haW4pOgorICAgICAgICAoVHlwZS5xdWFsaWZpZWRfbmFtZSk6CisgICAg
ICAgIChUeXBlLnJlc29sdmVfdHlwZV9yZWZlcmVuY2VzKToKKyAgICAgICAgKFByaW1pdGl2ZVR5
cGUpOgorICAgICAgICAoUHJpbWl0aXZlVHlwZS5fX2luaXRfXyk6CisgICAgICAgIChQcmltaXRp
dmVUeXBlLl9fcmVwcl9fKToKKyAgICAgICAgKFByaW1pdGl2ZVR5cGUudHlwZV9kb21haW4pOgor
ICAgICAgICAoUHJpbWl0aXZlVHlwZS5xdWFsaWZpZWRfbmFtZSk6CisgICAgICAgIChBbGlhc2Vk
VHlwZSk6CisgICAgICAgIChBbGlhc2VkVHlwZS5fX2luaXRfXyk6CisgICAgICAgIChBbGlhc2Vk
VHlwZS5fX3JlcHJfXyk6CisgICAgICAgIChBbGlhc2VkVHlwZS5pc19lbnVtKToKKyAgICAgICAg
KEFsaWFzZWRUeXBlLnR5cGVfZG9tYWluKToKKyAgICAgICAgKEFsaWFzZWRUeXBlLnF1YWxpZmll
ZF9uYW1lKToKKyAgICAgICAgKEFsaWFzZWRUeXBlLnJlc29sdmVfdHlwZV9yZWZlcmVuY2VzKToK
KyAgICAgICAgKEVudW1UeXBlKToKKyAgICAgICAgKEVudW1UeXBlLl9faW5pdF9fKToKKyAgICAg
ICAgKEVudW1UeXBlLl9fcmVwcl9fKToKKyAgICAgICAgKEVudW1UeXBlLmlzX2VudW0pOgorICAg
ICAgICAoRW51bVR5cGUudHlwZV9kb21haW4pOgorICAgICAgICAoRW51bVR5cGUuZW51bV92YWx1
ZXMpOgorICAgICAgICAoRW51bVR5cGUucXVhbGlmaWVkX25hbWUpOgorICAgICAgICAoRW51bVR5
cGUucmVzb2x2ZV90eXBlX3JlZmVyZW5jZXMpOgorICAgICAgICAoQXJyYXlUeXBlKToKKyAgICAg
ICAgKEFycmF5VHlwZS5fX2luaXRfXyk6CisgICAgICAgIChBcnJheVR5cGUuX19yZXByX18pOgor
ICAgICAgICAoQXJyYXlUeXBlLnR5cGVfZG9tYWluKToKKyAgICAgICAgKEFycmF5VHlwZS5xdWFs
aWZpZWRfbmFtZSk6CisgICAgICAgIChBcnJheVR5cGUucmVzb2x2ZV90eXBlX3JlZmVyZW5jZXMp
OgorICAgICAgICAoT2JqZWN0VHlwZSk6CisgICAgICAgIChPYmplY3RUeXBlLl9faW5pdF9fKToK
KyAgICAgICAgKE9iamVjdFR5cGUuX19yZXByX18pOgorICAgICAgICAoT2JqZWN0VHlwZS50eXBl
X2RvbWFpbik6CisgICAgICAgIChPYmplY3RUeXBlLnF1YWxpZmllZF9uYW1lKToKKyAgICAgICAg
KGNoZWNrX2Zvcl9yZXF1aXJlZF9wcm9wZXJ0aWVzKToKKyAgICAgICAgKFByb3RvY29sKToKKyAg
ICAgICAgKFByb3RvY29sLl9faW5pdF9fKToKKyAgICAgICAgKFByb3RvY29sLnBhcnNlX3NwZWNp
ZmljYXRpb24pOgorICAgICAgICAoUHJvdG9jb2wucGFyc2VfZG9tYWluKToKKyAgICAgICAgKFBy
b3RvY29sLnBhcnNlX3R5cGVfZGVjbGFyYXRpb24pOgorICAgICAgICAoUHJvdG9jb2wucGFyc2Vf
dHlwZV9tZW1iZXIpOgorICAgICAgICAoUHJvdG9jb2wucGFyc2VfY29tbWFuZCk6CisgICAgICAg
IChQcm90b2NvbC5wYXJzZV9ldmVudCk6CisgICAgICAgIChQcm90b2NvbC5wYXJzZV9jYWxsX29y
X3JldHVybl9wYXJhbWV0ZXIpOgorICAgICAgICAoUHJvdG9jb2wucmVzb2x2ZV90eXBlcyk6Cisg
ICAgICAgIChQcm90b2NvbC5sb29rdXBfdHlwZV9mb3JfZGVjbGFyYXRpb24pOgorICAgICAgICAo
UHJvdG9jb2wubG9va3VwX3R5cGVfcmVmZXJlbmNlKToKKyAgICAgICAgKERvbWFpbik6CisgICAg
ICAgIChEb21haW4uX19pbml0X18pOgorICAgICAgICAoRG9tYWluLnJlc29sdmVfdHlwZV9yZWZl
cmVuY2VzKToKKyAgICAgICAgKERvbWFpbnMpOgorICAgICAgICAoVHlwZURlY2xhcmF0aW9uKToK
KyAgICAgICAgKFR5cGVEZWNsYXJhdGlvbi5fX2luaXRfXyk6CisgICAgICAgIChUeXBlRGVjbGFy
YXRpb24ucmVzb2x2ZV90eXBlX3JlZmVyZW5jZXMpOgorICAgICAgICAoVHlwZU1lbWJlcik6Cisg
ICAgICAgIChUeXBlTWVtYmVyLl9faW5pdF9fKToKKyAgICAgICAgKFR5cGVNZW1iZXIucmVzb2x2
ZV90eXBlX3JlZmVyZW5jZXMpOgorICAgICAgICAoUGFyYW1ldGVyKToKKyAgICAgICAgKFBhcmFt
ZXRlci5fX2luaXRfXyk6CisgICAgICAgIChQYXJhbWV0ZXIucmVzb2x2ZV90eXBlX3JlZmVyZW5j
ZXMpOgorICAgICAgICAoQ29tbWFuZCk6CisgICAgICAgIChDb21tYW5kLl9faW5pdF9fKToKKyAg
ICAgICAgKENvbW1hbmQucmVzb2x2ZV90eXBlX3JlZmVyZW5jZXMpOgorICAgICAgICAoRXZlbnQp
OgorICAgICAgICAoRXZlbnQuX19pbml0X18pOgorICAgICAgICAoRXZlbnQucmVzb2x2ZV90eXBl
X3JlZmVyZW5jZXMpOgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weTogQWRkZWQuCisgICAgICAgIChJbmNyZW1lbnRhbEZp
bGVXcml0ZXIpOgorICAgICAgICAoSW5jcmVtZW50YWxGaWxlV3JpdGVyLl9faW5pdF9fKToKKyAg
ICAgICAgKEluY3JlbWVudGFsRmlsZVdyaXRlci53cml0ZSk6CisgICAgICAgIChJbmNyZW1lbnRh
bEZpbGVXcml0ZXIuY2xvc2UpOgorICAgICAgICAoZ2VuZXJhdGVfZnJvbV9zcGVjaWZpY2F0aW9u
KToKKyAgICAgICAgKGdlbmVyYXRlX2Zyb21fc3BlY2lmaWNhdGlvbi5sb2FkX3NwZWNpZmljYXRp
b24pOgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2NvbW1hbmRzLXdpdGgtYXN5
bmMtYXR0cmlidXRlLmpzb246IEFkZGVkLgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2NvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uOiBB
ZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9kb21haW5zLXdpdGgtdmFy
eWluZy1jb21tYW5kLXNpemVzLmpzb246IEFkZGVkLgorICAgICAgICAqIGluc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2V2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbjogQWRkZWQuCisg
ICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1h
c3luYy1hdHRyaWJ1dGUuanNvbi1yZXN1bHQ6IEFkZGVkLgorICAgICAgICAqIGluc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2NvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4t
cGFyYW1ldGVycy5qc29uLXJlc3VsdDogQWRkZWQuCisgICAgICAgICogaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZXhwZWN0ZWQvZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29u
LXJlc3VsdDogQWRkZWQuCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0
ZWQvZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uLXJlc3VsdDogQWRkZWQuCisg
ICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1kdXBsaWNhdGUtdHlwZS1k
ZWNsYXJhdGlvbnMuanNvbi1lcnJvcjogQWRkZWQuCisgICAgICAgICogaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZmFpbC1vbi1lbnVtLXdpdGgtbm8tdmFsdWVzLmpzb24tZXJyb3I6IEFkZGVkLgor
ICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tdHlwZS1kZWNsYXJhdGlv
bi11c2luZy10eXBlLXJlZmVyZW5jZS5qc29uLWVycm9yOiBBZGRlZC4KKyAgICAgICAgKiBpbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLXR5cGUtd2l0aC1sb3dlcmNhc2UtbmFtZS5qc29u
LWVycm9yOiBBZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9u
LXVua25vd24tdHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1kZWNsYXJhdGlvbi5qc29uLWVycm9yOiBB
ZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLXVua25vd24t
dHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1tZW1iZXIuanNvbi1lcnJvcjogQWRkZWQuCisgICAgICAg
ICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvc2FtZS10eXBlLWlkLWRpZmZlcmVu
dC1kb21haW4uanNvbi1yZXN1bHQ6IEFkZGVkLgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5q
c29uLXJlc3VsdDogQWRkZWQuCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhw
ZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24tcmVzdWx0OiBBZGRlZC4KKyAg
ICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9u
LWVudW0tdHlwZS5qc29uLXJlc3VsdDogQWRkZWQuCisgICAgICAgICogaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uLXJlc3Vs
dDogQWRkZWQuCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlw
ZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uLXJlc3VsdDogQWRkZWQuCisgICAgICAgICog
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1kdXBsaWNhdGUtdHlwZS1kZWNsYXJhdGlv
bnMuanNvbjogQWRkZWQuCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1v
bi1lbnVtLXdpdGgtbm8tdmFsdWVzLmpzb246IEFkZGVkLgorICAgICAgICAqIGluc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2ZhaWwtb24tdHlwZS1kZWNsYXJhdGlvbi11c2luZy10eXBlLXJlZmVyZW5j
ZS5qc29uOiBBZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9u
LXR5cGUtd2l0aC1sb3dlcmNhc2UtbmFtZS5qc29uOiBBZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1k
ZWNsYXJhdGlvbi5qc29uOiBBZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1tZW1iZXIuanNvbjogQWRk
ZWQuCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvc2FtZS10eXBlLWlkLWRpZmZl
cmVudC1kb21haW4uanNvbjogQWRkZWQuCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb246IEFkZGVkLgor
ICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3R5cGUtZGVjbGFyYXRpb24tYXJyYXkt
dHlwZS5qc29uOiBBZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy90eXBl
LWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uOiBBZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy90eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb246IEFkZGVkLgor
ICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3R5cGUtcmVxdWlyaW5nLXJ1bnRpbWUt
Y2FzdHMuanNvbjogQWRkZWQuCisKKzIwMTQtMDgtMTEgIEJyaWFuIEouIEJ1cmcgIDxidXJnQGNz
Lndhc2hpbmd0b24uZWR1PgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IHVzZSB0eXBlIGJ1aWxk
ZXJzIHRvIGNvbnN0cnVjdCBoaWdoIGZpZGVsaXR5IHR5cGUgaW5mb3JtYXRpb24gcGF5bG9hZHMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNTgwMwor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIER1ZSB0byBz
b21lIHR5cG9zIGluIHRoZSBwcm90b2NvbCBmaWxlLCB0aGUgY29kZSBoYWQgd29ya2VkIHdpdGgg
cmF3IG9iamVjdHMKKyAgICAgICAgcmF0aGVyIHRoYW4gd2l0aCB0eXBlIGJ1aWxkZXJzLiBDb252
ZXJ0IHRvIHVzaW5nIGJ1aWxkZXJzLgorCisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNw
ZWN0b3JSdW50aW1lQWdlbnQuY3BwOgorICAgICAgICAoSW5zcGVjdG9yOjpJbnNwZWN0b3JSdW50
aW1lQWdlbnQ6OmdldFJ1bnRpbWVUeXBlc0ZvclZhcmlhYmxlc0F0T2Zmc2V0cyk6CisgICAgICAg
ICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JSdW50aW1lQWdlbnQuaDoKKyAgICAgICAgKiBp
bnNwZWN0b3IvcHJvdG9jb2wvUnVudGltZS5qc29uOiBGaXggJ2l0ZW0nIGZvciAnaXRlbXMnOyB0
cnVlIGZvciAndHJ1ZScuCisgICAgICAgICogcnVudGltZS9IaWdoRmlkZWxpdHlUeXBlUHJvZmls
ZXIuY3BwOgorICAgICAgICAoSlNDOjpIaWdoRmlkZWxpdHlUeXBlUHJvZmlsZXI6OmdldFR5cGVz
Rm9yVmFyaWFibGVBdE9mZnNldEZvckluc3BlY3Rvcik6CisgICAgICAgICogcnVudGltZS9IaWdo
RmlkZWxpdHlUeXBlUHJvZmlsZXIuaDoKKyAgICAgICAgKiBydW50aW1lL1R5cGVTZXQuY3BwOgor
ICAgICAgICAoSlNDOjpUeXBlU2V0OjphbGxTdHJ1Y3R1cmVSZXByZXNlbnRhdGlvbnMpOgorICAg
ICAgICAoSlNDOjpTdHJ1Y3R1cmVTaGFwZTo6c3RyaW5nUmVwcmVzZW50YXRpb24pOgorICAgICAg
ICAoSlNDOjpTdHJ1Y3R1cmVTaGFwZTo6aW5zcGVjdG9yUmVwcmVzZW50YXRpb24pOgorICAgICAg
ICAqIHJ1bnRpbWUvVHlwZVNldC5oOgorCiAyMDE0LTA4LTE0ICBUb21hcyBQb3BlbGEgIDx0cG9w
ZWxhQHJlZGhhdC5jb20+CiAKICAgICAgICAgQWRkIHN1cHBvcnQgZm9yIHBwYywgcHBjNjQsIHBw
YzY0bGUsIHMzOTAsIHMzOTB4IGludG8gdGhlIENNYWtlIGJ1aWxkCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYmJh
YWNhMzczMjY3NjgyOWQyNjA4ZmMxYzVjNTMxMmM5M2YzOGEwMi4uNzQwNGM0NWE4MGQxNDQ4ZDRl
YWY3OTU5ODIxNzE1YzY2NDAzOGNkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg4IEBACisyMDE0
LTA4LTE0ICBCcmlhbiBKLiBCdXJnICA8YnVyZ0Bjcy53YXNoaW5ndG9uLmVkdT4KKworICAgICAg
ICBXZWIgSW5zcGVjdG9yOiByZXdyaXRlIENvZGVHZW5lcmF0b3JJbnNwZWN0b3IgdG8gYmUgbW9k
dWxhciBhbmQgdGVzdGFibGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEzMTU5NgorCisgICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4K
KworICAgICAgICBBc2lkZSBmcm9tIGhvb2tpbmcgdXAgdGhlIG5ldyBpbnNwZWN0b3IgYmluZGlu
Z3MgZ2VuZXJhdG9yIHRvIHRoZSBidWlsZCBzeXN0ZW0sCisgICAgICAgIHRoZXJlIGFyZSBhIGZl
dyBjb21pbmdsZWQgY2hhbmdlcyB0aGF0IHdvdWxkIGJlIHBhaW5mdWwgdG8gc3BsaXQgZnJvbSB0
aGUgbWFpbgorICAgICAgICBwYXRjaC4gVG9nZXRoZXIsIHRoZXNlIGNoYW5nZXMgbWFrZSBpdCBw
b3NzaWJsZSB0byBmb3J3YXJkLWRlY2xhcmUgYWxsIHByb3RvY29sCisgICAgICAgIGVudW1lcmF0
aW9ucyBhcyBzY29wZWQgZW51bXMsIHJlZHVjaW5nIHdlaXJkIG9yZGVyaW5nIGRlcGVuZGVuY2ll
cyBiZXR3ZWVuIGRvbWFpbnMuCisKKyAgICAgICAgQWxsIHJ1bnRpbWVDYXN0KCkgbWV0aG9kcyBh
cmUgbm93IHN0YXRpYyBtZXRob2RzIG9mIEJpbmRpbmdUcmFpdHMgc3BlY2lhbGl6YXRpb25zLAor
ICAgICAgICByYXRoZXIgdGhhbiBhcyBzdGF0aWMgbWV0aG9kcyBvZiB0aGUgdHlwZSBidWlsZGVy
IGNsYXNzZXMuCisKKyAgICAgICAgQWxsIHByb3RvY29sIGVudW1lcmF0aW9uIHR5cGVzIGFyZSBz
Y29wZWQgZW51bXMgcmF0aGVyIHRoYW4gc3RydWN0LW5hbWVzcGFjZWQgZW51bXMuCisKKyAgICAg
ICAgUmVtb3ZlIHNvbWUgaW1wbGljaXQgcHJvdG9jb2wgdHlwZSBhbmQgZW51bWVyYXRpb24gZGVm
aW5pdGlvbnMgYmVjYXVzZSB0aGV5IHRyaWdnZXIKKyAgICAgICAgY29tcGlsZXIgYnVncyBvciBp
bnRyb2R1Y2UgdW5uZWNlc3NhcnkgY29tcGxleGl0eSBpbiB0aGUgYmluZGluZ3MgZ2VuZXJhdG9y
LgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgbm8gYmVoYXZpb3IgY2hhbmdlZC4KKworICAgICAg
ICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIERlcml2ZWRTb3VyY2VzLm1ha2U6IFVwZGF0
ZSBzY3JpcHQgZGVwZW5kZW5jaWVzIGFuZCB0aGUgYmluZGluZ3MgZ2VuZXJhdG9yIHNjcmlwdCBu
YW1lLgorCisgICAgICAgICogaW5zcGVjdG9yL0NvbW1hbmRMaW5lQVBJSG9zdC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDb21tYW5kTGluZUFQSUhvc3Q6Omluc3BlY3RJbXBsKTogQ29udmVydCB0
byBCaW5kaW5nVHJhaXRzLgorCisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50OjpkZXRlY3RPcmlnaW4p
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6OmJ1aWxkQXJyYXlGb3JSZWdp
b25zKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuaDoKKyAgICAgICAg
KiBpbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yRE9NQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yQWNjZXNzaWJpbGl0eVByb3BlcnRpZXMpOgor
ICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yUGFnZUFnZW50OjpyZXNvdXJjZVR5cGVKc29uKToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvclBhZ2VBZ2VudDo6Y2FjaGVkUmVzb3VyY2VUeXBlSnNvbik6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQYWdlQWdlbnQ6OmdldFNjcmlwdEV4ZWN1dGlvblN0YXR1
cyk6IENvbnZlcnQgdG8gc2NvcGVkIGVudW1zLgorCisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JQYWdlQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yRnJhbWVUcmVlKTogRXh0cmFjdCBGcmFtZVJlc291
cmNlVHJlZTo6UmVzb3VyY2VzCisgICAgICAgIGludG8gaXRzIG93biBleHBsaWNpdGx5LWRlZmlu
ZWQgb2JqZWN0IHR5cGUuIFRoZSBuZXcgZ2VuZXJhdG9yIGRvZXMgbm90IHN1cHBvcnQgaW1wbGlj
aXRseQorICAgICAgICBkZWZpbmluZyBvYmplY3QgdHlwZXMgYXMgZWxlbWVudHMgb2YgYXJyYXlz
LgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuaDoKKyAgICAgICAgKiBp
bnNwZWN0b3IvSW5zcGVjdG9yUmVwbGF5QWdlbnQuY3BwOiBEaXNhbWJpZ3VhdGUgYmV0d2VlbiBp
bnRlcm5hbCBhbmQgcHJvdG9jb2wgdHlwZXMuCisgICAgICAgIChXZWJDb3JlOjpidWlsZEluc3Bl
Y3Rvck9iamVjdEZvclNlc3Npb25TdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpidWlsZEluc3Bl
Y3Rvck9iamVjdEZvclNlZ21lbnRTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JS
ZXBsYXlBZ2VudDo6c2Vzc2lvblN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclJl
cGxheUFnZW50OjpkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yUmVwbGF5QWdlbnQ6OmZyYW1lTmF2aWdhdGVkKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvclJlcGxheUFnZW50OjpmcmFtZURldGFjaGVkKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvclJlcGxheUFnZW50Ojp3aWxsRGlzcGF0Y2hFdmVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JSZXBsYXlBZ2VudDo6c3RhcnRDYXB0dXJpbmcpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yUmVwbGF5QWdlbnQ6OnN0b3BDYXB0dXJpbmcpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yUmVwbGF5QWdlbnQ6OnJlcGxheVRvUG9zaXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yUmVwbGF5QWdlbnQ6OnJlcGxheVRvQ29tcGxldGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JSZXBsYXlBZ2VudDo6cGF1c2VQbGF5YmFjayk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JSZXBsYXlBZ2VudDo6Y2FuY2VsUGxheWJhY2spOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUmVwbGF5QWdlbnQ6OnN3aXRjaFNlc3Npb24pOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUmVwbGF5QWdlbnQ6Omluc2VydFNlc3Npb25TZWdt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclJlcGxheUFnZW50OjpyZW1vdmVTZXNz
aW9uU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JSZXBsYXlBZ2VudDo6Y3Vy
cmVudFJlcGxheVN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclJlcGxheUFnZW50
OjpnZXRBdmFpbGFibGVTZXNzaW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JSZXBs
YXlBZ2VudDo6Z2V0U2Vzc2lvbkRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUmVw
bGF5QWdlbnQ6OmdldFNlZ21lbnREYXRhKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9y
UmVwbGF5QWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2VBZ2Vu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JSZXNvdXJjZUFnZW50Ojp3aWxsU2Vu
ZFJlcXVlc3QpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcDog
Q29udmVydCB0byBzY29wZWQgZW51bXMuIEV4dHJhY3QgQ1NTUHJvcGVydHk6OlN0YXR1cworICAg
ICAgICBiZWNhdXNlIHNjb3BlZCBlbnVtcyBkZWZpbmVkIGluIGEgY2xhc3Mgc2NvcGUgdHJpZ2dl
ciBjb21waWxlciBidWdzIGluIEdDQyA0LjguCisgICAgICAgIChXZWJDb3JlOjpidWlsZE1lZGlh
T2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0eWxlOjpzdHlsZVdpdGhQcm9w
ZXJ0aWVzKTogV29yayBhcm91bmQgY29tcGlsZXIgZGlzYWdyZWVtZW50cy4KKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvclN0eWxlU2hlZXQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JTdHlsZVNoZWV0OjpJbnNwZWN0b3JTdHlsZVNoZWV0KToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZTo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZTo6SW5zcGVjdG9yU3R5
bGVTaGVldEZvcklubGluZVN0eWxlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yU3R5
bGVTaGVldC5oOgorCisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclRpbWVsaW5lQWdlbnQu
Y3BwOiBDb252ZXJ0IHRvIHNjb3BlZCBlbnVtcyBhbmQgQmluZGluZ1RyYWl0cy4KKyAgICAgICAg
KFdlYkNvcmU6OnRvUHJvdG9jb2wpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yVGltZWxp
bmVBZ2VudDo6YWRkUmVjb3JkVG9UaW1lbGluZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JUaW1lbGluZUFnZW50OjpzZW5kRXZlbnQpOgorCisgICAgICAgICogaW5zcGVjdG9yL3Byb3Rv
Y29sL0NTUy5qc29uOiBFeHRyYWN0IENTU1Byb3BlcnR5OjpTdGF0dXMuCisgICAgICAgICogaW5z
cGVjdG9yL3Byb3RvY29sL1BhZ2UuanNvbjogRXh0cmFjdCBGcmFtZVJlc291cmNlVHJlZTo6UmVz
b3VyY2VzLgorCiAyMDE0LTA4LTE0ICBKZXIgTm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgog
CiAgICAgICAgIFtNU0VdIEFsdGVyaW5nIHRoZSBxdWFsaXR5IG9mIGEgWW91VHViZSB2aWRlbyB3
aWxsIGNhdXNlIHRoZSB2aWRlbyB0byBkaXN0b3J0IGFuZCBkaXNwbGF5IGFuIGVycm9yIG1lc3Nh
Z2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViSW5zcGVjdG9yVUkvQ2hhbmdlTG9nCmluZGV4IGRlNTQ4NGJhMzdkOTc5OWMxNGE4NWFlYjRi
NGE0OTIwOWQyMWY3NGIuLmIzOTg4MjBjZWJhYzkyZmY2ZjFmOTBiNmMyOWUxYTFkMmY5NTY1M2Ug
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDE0LTA4LTE0ICBC
cmlhbiBKLiBCdXJnICA8YnVyZ0Bjcy53YXNoaW5ndG9uLmVkdT4KKworICAgICAgICBXZWIgSW5z
cGVjdG9yOiByZXdyaXRlIENvZGVHZW5lcmF0b3JJbnNwZWN0b3IgdG8gYmUgbW9kdWxhciBhbmQg
dGVzdGFibGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEzMTU5NgorCisgICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KKworICAgICAg
ICBBbHNvIGFwcGx5IHR5cGUgZXh0cmFjdGlvbiByZWZhY3RvcmluZ3MgdG8gb2xkIHByb3RvY29s
IHZlcnNpb25zIGZvciBjb25zaXN0ZW5jeS4KKworICAgICAgICAqIFZlcnNpb25zL0luc3BlY3Rv
ci1pT1MtNi4wLmpzb246CisgICAgICAgICogVmVyc2lvbnMvSW5zcGVjdG9yLWlPUy03LjAuanNv
bjoKKwogMjAxNC0wOC0xMyAgSm9ubyBXZWxscyAgPGpvbm93ZWxsc0BhcHBsZS5jb20+CiAKICAg
ICAgICAgV2ViIEluc3BlY3RvcjogZXNsaW50IGNvbmZpZ3VyYXRpb24gc2hvdWxkIGJlIHN0b3Jl
ZCBhcyAuZXNsaW50cmMKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxp
c3RzLnR4dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCBhODdl
OGIyZTU5YmNiMGUyOTNlMjFhNWIyNTgwN2UzYzcwMzVlZGZhLi5mZTUyMmEwYTcwN2E4NGY1NzU4
YTAzMTRkODJhYmNiYTY2Mjc4YWFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Q01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0
CkBAIC05MDcsNiArOTA3LDIxIEBAIEFERF9TT1VSQ0VfREVQRU5ERU5DSUVTKCR7Q01BS0VfQ1VS
UkVOVF9TT1VSQ0VfRElSfS9wYXJzZXIvTGV4ZXIuY3BwICR7REVSSVZFRF9TCiAKIHNldChKYXZh
U2NyaXB0Q29yZV9JTlNQRUNUT1JfU0NSSVBUU19ESVIgIiR7SkFWQVNDUklQVENPUkVfRElSfS9p
bnNwZWN0b3Ivc2NyaXB0cyIpCiAKK3NldChKYXZhU2NyaXB0Q29yZV9JTlNQRUNUT1JfUFJPVE9D
T0xfU0NSSVBUUworICAgICR7SmF2YVNjcmlwdENvcmVfSU5TUEVDVE9SX1NDUklQVFNfRElSfS9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKyAgICAke0phdmFTY3JpcHRD
b3JlX0lOU1BFQ1RPUl9TQ1JJUFRTX0RJUn0vY29kZWdlbi9nZW5lcmF0ZV9iYWNrZW5kX2NvbW1h
bmRzLnB5CisgICAgJHtKYXZhU2NyaXB0Q29yZV9JTlNQRUNUT1JfU0NSSVBUU19ESVJ9L2NvZGVn
ZW4vZ2VuZXJhdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weQorICAgICR7SmF2YVNjcmlw
dENvcmVfSU5TUEVDVE9SX1NDUklQVFNfRElSfS9jb2RlZ2VuL2dlbmVyYXRlX2JhY2tlbmRfZGlz
cGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQorICAgICR7SmF2YVNjcmlwdENvcmVfSU5TUEVDVE9S
X1NDUklQVFNfRElSfS9jb2RlZ2VuL2dlbmVyYXRlX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVy
LnB5CisgICAgJHtKYXZhU2NyaXB0Q29yZV9JTlNQRUNUT1JfU0NSSVBUU19ESVJ9L2NvZGVnZW4v
Z2VuZXJhdGVfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQorICAgICR7SmF2
YVNjcmlwdENvcmVfSU5TUEVDVE9SX1NDUklQVFNfRElSfS9jb2RlZ2VuL2dlbmVyYXRlX3R5cGVf
YnVpbGRlcl9oZWFkZXIucHkKKyAgICAke0phdmFTY3JpcHRDb3JlX0lOU1BFQ1RPUl9TQ1JJUFRT
X0RJUn0vY29kZWdlbi9nZW5lcmF0ZV90eXBlX2J1aWxkZXJfaW1wbGVtZW50YXRpb24ucHkKKyAg
ICAke0phdmFTY3JpcHRDb3JlX0lOU1BFQ1RPUl9TQ1JJUFRTX0RJUn0vY29kZWdlbi9nZW5lcmF0
b3IucHkKKyAgICAke0phdmFTY3JpcHRDb3JlX0lOU1BFQ1RPUl9TQ1JJUFRTX0RJUn0vY29kZWdl
bi9nZW5lcmF0b3JfdGVtcGxhdGVzLnB5CisgICAgJHtKYXZhU2NyaXB0Q29yZV9JTlNQRUNUT1Jf
U0NSSVBUU19ESVJ9L2NvZGVnZW4vX19pbml0X18ucHkKKyAgICAke0phdmFTY3JpcHRDb3JlX0lO
U1BFQ1RPUl9TQ1JJUFRTX0RJUn0vY29kZWdlbi9tb2RlbHMucHkKKykKKwogc2V0KEphdmFTY3Jp
cHRDb3JlX0lOU1BFQ1RPUl9ET01BSU5TCiAgICAgJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L2luc3Bl
Y3Rvci9wcm90b2NvbC9Db25zb2xlLmpzb24KICAgICAke0pBVkFTQ1JJUFRDT1JFX0RJUn0vaW5z
cGVjdG9yL3Byb3RvY29sL0RlYnVnZ2VyLmpzb24KQEAgLTkzMyw5ICs5NDgsOCBAQCBhZGRfY3Vz
dG9tX2NvbW1hbmQoCiAgICAgICAgICAgICR7REVSSVZFRF9TT1VSQ0VTX0pBVkFTQ1JJUFRDT1JF
X0RJUn0vaW5zcGVjdG9yL0luc3BlY3RvckpTVHlwZUJ1aWxkZXJzLmgKICAgICAgICAgICAgJHtE
RVJJVkVEX1NPVVJDRVNfV0VCSU5TUEVDVE9SVUlfRElSfS9Vc2VySW50ZXJmYWNlL1Byb3RvY29s
L0luc3BlY3RvckpTQmFja2VuZENvbW1hbmRzLmpzCiAgICAgTUFJTl9ERVBFTkRFTkNZICR7REVS
SVZFRF9TT1VSQ0VTX0pBVkFTQ1JJUFRDT1JFX0RJUn0vSW5zcGVjdG9ySlMuanNvbgotICAgIERF
UEVORFMgJHtKYXZhU2NyaXB0Q29yZV9JTlNQRUNUT1JfU0NSSVBUU19ESVJ9L0NvZGVHZW5lcmF0
b3JJbnNwZWN0b3IucHkKLSAgICAgICAgICAgICR7SmF2YVNjcmlwdENvcmVfSU5TUEVDVE9SX1ND
UklQVFNfRElSfS9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yU3RyaW5ncy5weQotICAgIENPTU1BTkQg
JHtQWVRIT05fRVhFQ1VUQUJMRX0gJHtKYXZhU2NyaXB0Q29yZV9JTlNQRUNUT1JfU0NSSVBUU19E
SVJ9L0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkgJHtERVJJVkVEX1NPVVJDRVNfSkFWQVNDUklQ
VENPUkVfRElSfS9JbnNwZWN0b3JKUy5qc29uIC0tb3V0cHV0X2hfZGlyICIke0RFUklWRURfU09V
UkNFU19KQVZBU0NSSVBUQ09SRV9ESVJ9L2luc3BlY3RvciIgLS1vdXRwdXRfY3BwX2RpciAiJHtE
RVJJVkVEX1NPVVJDRVNfSkFWQVNDUklQVENPUkVfRElSfS9pbnNwZWN0b3IiIC0tb3V0cHV0X2pz
X2RpciAiJHtERVJJVkVEX1NPVVJDRVNfV0VCSU5TUEVDVE9SVUlfRElSfS9Vc2VySW50ZXJmYWNl
L1Byb3RvY29sIiAtLW91dHB1dF90eXBlIEphdmFTY3JpcHQgLS13cml0ZV9hbHdheXMKKyAgICBE
RVBFTkRTICR7SmF2YVNjcmlwdENvcmVfSU5TUEVDVE9SX1BST1RPQ09MX1NDUklQVFN9CisgICAg
Q09NTUFORCAke1BZVEhPTl9FWEVDVVRBQkxFfSAke0phdmFTY3JpcHRDb3JlX0lOU1BFQ1RPUl9T
Q1JJUFRTX0RJUn0vZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5IC0tb3V0
cHV0RGlyICIke0RFUklWRURfU09VUkNFU19KQVZBU0NSSVBUQ09SRV9ESVJ9IiAtLWZyYW1ld29y
ayBKYXZhU2NyaXB0Q29yZSAke0RFUklWRURfU09VUkNFU19KQVZBU0NSSVBUQ09SRV9ESVJ9L0lu
c3BlY3RvckpTLmpzb24gJiYgbWtkaXIgLXAgJHtERVJJVkVEX1NPVVJDRVNfSkFWQVNDUklQVENP
UkVfRElSfS9pbnNwZWN0b3IgJiYgY3AgJHtERVJJVkVEX1NPVVJDRVNfSkFWQVNDUklQVENPUkVf
RElSfS9JbnNwZWN0b3JKU0JhY2tlbmREaXNwYXRjaGVycy5oICR7REVSSVZFRF9TT1VSQ0VTX0pB
VkFTQ1JJUFRDT1JFX0RJUn0vSW5zcGVjdG9ySlNGcm9udGVuZERpc3BhdGNoZXJzLmggJHtERVJJ
VkVEX1NPVVJDRVNfSkFWQVNDUklQVENPUkVfRElSfS9JbnNwZWN0b3JKU1R5cGVCdWlsZGVycy5o
ICR7REVSSVZFRF9TT1VSQ0VTX0pBVkFTQ1JJUFRDT1JFX0RJUn0vaW5zcGVjdG9yICYmIG1rZGly
IC1wICR7REVSSVZFRF9TT1VSQ0VTX1dFQklOU1BFQ1RPUlVJX0RJUn0vVXNlckludGVyZmFjZS9Q
cm90b2NvbCAmJiBjcCAke0RFUklWRURfU09VUkNFU19KQVZBU0NSSVBUQ09SRV9ESVJ9L0luc3Bl
Y3RvckpTQmFja2VuZENvbW1hbmRzLmpzICR7REVSSVZFRF9TT1VSQ0VTX1dFQklOU1BFQ1RPUlVJ
X0RJUn0vVXNlckludGVyZmFjZS9Qcm90b2NvbAogICAgIFZFUkJBVElNKQogZmlsZShNQUtFX0RJ
UkVDVE9SWSAke0RFUklWRURfU09VUkNFU19KQVZBU0NSSVBUQ09SRV9ESVJ9L2luc3BlY3RvcikK
IApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2Ug
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQppbmRleCBjYzMwN2Q3
ZTc0NzliOWJmOTBhOGEzZWZiZjEzYzk4NzNhMzg4M2I4Li5kMzNjOTUxOGZjMjkyODFjNDRiMDcy
OGVhMTg0YTY2MWE4NGM5NjRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVy
aXZlZFNvdXJjZXMubWFrZQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJj
ZXMubWFrZQpAQCAtMTIyLDggKzEyMiwxOSBAQCBJTlNQRUNUT1JfRE9NQUlOUyA9IFwKICMKIAog
SU5TUEVDVE9SX0dFTkVSQVRPUl9TQ1JJUFRTID0gXAotCSQoSmF2YVNjcmlwdENvcmUpL2luc3Bl
Y3Rvci9zY3JpcHRzL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkgXAotCSQoSmF2YVNjcmlwdENv
cmUpL2luc3BlY3Rvci9zY3JpcHRzL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3JTdHJpbmdzLnB5IFwK
KwkkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL19faW5pdF9fLnB5
IFwKKwkkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRl
X2JhY2tlbmRfY29tbWFuZHMucHkgXAorCSQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9zY3Jp
cHRzL2NvZGVnZW4vZ2VuZXJhdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weSBcCisJJChK
YXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9iYWNrZW5k
X2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkgXAorCSQoSmF2YVNjcmlwdENvcmUpL2luc3Bl
Y3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfZnJvbnRlbmRfZGlzcGF0Y2hlcl9oZWFkZXIu
cHkgXAorCSQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJh
dGVfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSBcCisJJChKYXZhU2NyaXB0
Q29yZSkvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV90eXBlX2J1aWxkZXJfaGVh
ZGVyLnB5IFwKKwkkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dl
bmVyYXRlX3R5cGVfYnVpbGRlcl9pbXBsZW1lbnRhdGlvbi5weSBcCisJJChKYXZhU2NyaXB0Q29y
ZSkvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0b3JfdGVtcGxhdGVzLnB5IFwKKwkk
KEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRvci5weSBc
CisJJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9tb2RlbHMucHkg
XAorCSQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWNvbWJpbmVk
LWluc3BlY3Rvci1qc29uLnB5IFwKKwkkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3Ivc2NyaXB0
cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkgXAogIwogCiBhbGwgOiBc
CkBAIC0xNDQsNyArMTU1LDcgQEAgSW5zcGVjdG9ySlMuanNvbiA6IGluc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWNvbWJpbmVkLWluc3BlY3Rvci1qc29uLnB5ICQoSU5TUEUKIAogIyBJbnNwZWN0
b3IgQmFja2VuZCBEaXNwYXRjaGVycywgRnJvbnRlbmQgRGlzcGF0Y2hlcnMsIFR5cGUgQnVpbGRl
cnMKIEluc3BlY3RvckpTRnJvbnRlbmREaXNwYXRjaGVycy5oIDogSW5zcGVjdG9ySlMuanNvbiAk
KElOU1BFQ1RPUl9HRU5FUkFUT1JfU0NSSVBUUykKLQkkKFBZVEhPTikgJChKYXZhU2NyaXB0Q29y
ZSkvaW5zcGVjdG9yL3NjcmlwdHMvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weSAuL0luc3BlY3Rv
ckpTLmpzb24gLS1vdXRwdXRfaF9kaXIgLiAtLW91dHB1dF9jcHBfZGlyIC4gLS1vdXRwdXRfanNf
ZGlyIC4gLS1vdXRwdXRfdHlwZSBKYXZhU2NyaXB0CisJJChQWVRIT04pICQoSmF2YVNjcmlwdENv
cmUpL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weSAtLWZyYW1ld29yayBKYXZhU2NyaXB0Q29yZSAtLW91dHB1dERpciAuIC4vSW5zcGVjdG9y
SlMuanNvbgogCiBJbmplY3RlZFNjcmlwdFNvdXJjZS5oIDogaW5zcGVjdG9yL0luamVjdGVkU2Ny
aXB0U291cmNlLmpzICQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9zY3JpcHRzL2pzbWluLnB5
ICQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9zY3JpcHRzL3h4ZC5wbAogCWVjaG8gIi8vIyBz
b3VyY2VVUkw9X19XZWJJbnNwZWN0b3JJbmplY3RlZFNjcmlwdF9fIiA+IC4vSW5qZWN0ZWRTY3Jp
cHRTb3VyY2UubWluLmpzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUudmN4cHJvai9jb3B5LWZpbGVzLmNtZCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS52Y3hwcm9qL2NvcHktZmlsZXMuY21kCmluZGV4IDQ2NTVlOGNkM2Q2Y2E3
OTY5YjAwZWQ3ZGU5ZWVkYjk5MTNjYjU1NzUuLmViODRiYzE4ZmY0M2QyYzc4YjUyMjJhZWU0ZWJl
ZGE1ZmIwYTdhMGUgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS52Y3hwcm9qL2NvcHktZmlsZXMuY21kCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS52Y3hwcm9qL2NvcHktZmlsZXMuY21kCkBAIC02NCw2ICs2NCw3IEBAIGZv
ciAlJWQgaW4gKAogZWNobyBDb3B5aW5nIEluc3BlY3RvciBzY3JpcHRzIGFzIGlmIHRoZXkgd2Vy
ZSBwcml2YXRlIGhlYWRlcnMuLi4NCiBmb3IgJSVkIGluICgNCiAgICAgaW5zcGVjdG9yXHNjcmlw
dHMNCisJaW5zcGVjdG9yXHNjcmlwdHNcY29kZWdlbg0KICkgZG8gKA0KICAgICB4Y29weSAveSAv
ZCAuLlwlJWRcKiAiJVByaXZhdGVIZWFkZXJzRGlyZWN0b3J5JSIgPk5VTA0KICkNCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvaiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDNiNmQyZGM2YmU5NzliMGZjMjkyNjVlMDMxMGIwYzI0
NDRmNWYwOWIuLjc5MTJiNDUzY2U4Y2IzZTZlYWRkOGYwNTFlYmQ4YjFmYWU5YWY4NWYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xNjM1LDggKzE2MzUsNiBAQAogCQlBNTMyNDM4
QTE4NTY4MzM1MDAyRUQ2OTIgLyogSW5zcGVjdG9ySlNGcm9udGVuZERpc3BhdGNoZXJzLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNTMyNDM4NDE4NTY4
MzE3MDAyRUQ2OTIgLyogSW5zcGVjdG9ySlNGcm9udGVuZERpc3BhdGNoZXJzLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTUzMjQzOEIxODU2ODMz
NTAwMkVENjkyIC8qIEluc3BlY3RvckpTVHlwZUJ1aWxkZXJzLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1MzI0Mzg1MTg1NjgzMTcwMDJFRDY5MiAv
KiBJbnNwZWN0b3JKU1R5cGVCdWlsZGVycy5jcHAgKi87IH07CiAJCUE1MzI0MzhDMTg1NjgzMzUw
MDJFRDY5MiAvKiBJbnNwZWN0b3JKU1R5cGVCdWlsZGVycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTUzMjQzODYxODU2ODMxNzAwMkVENjkyIC8qIElu
c3BlY3RvckpTVHlwZUJ1aWxkZXJzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKLQkJQTUzMjQzOTIxODU2OTcwOTAwMkVENjkyIC8qIENvZGVHZW5lcmF0
b3JJbnNwZWN0b3IucHkgaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBNTMyNDM4RjE4NTY5NkU2MDAyRUQ2OTIgLyogQ29kZUdlbmVyYXRvckluc3BlY3Rvci5w
eSAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlBNTMy
NDM5MzE4NTY5NzA5MDAyRUQ2OTIgLyogQ29kZUdlbmVyYXRvckluc3BlY3RvclN0cmluZ3MucHkg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNTMyNDM5MDE4
NTY5NkU2MDAyRUQ2OTIgLyogQ29kZUdlbmVyYXRvckluc3BlY3RvclN0cmluZ3MucHkgKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTUzMjQzOTQxODU2
OTcwOTAwMkVENjkyIC8qIGdlbmVyYXRlLWNvbWJpbmVkLWluc3BlY3Rvci1qc29uLnB5IGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTUzMjQzOTExODU2OTZF
NjAwMkVENjkyIC8qIGdlbmVyYXRlLWNvbWJpbmVkLWluc3BlY3Rvci1qc29uLnB5ICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE1MzI0Mzk4MTg1NkE0
ODkwMDJFRDY5MiAvKiBJbnNwZWN0b3JKUy5qc29uIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTUzMjQzOTUxODU2QTQ3NTAwMkVENjkyIC8qIEluc3BlY3Rv
ckpTLmpzb24gKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJQTUzQ0UwODUxOEJDMUE1NjAwQkVERjc2IC8qIENvbnNvbGVQcm90b3R5cGUuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTUzQ0UwODExOEJDMUE1
NjAwQkVERjc2IC8qIENvbnNvbGVQcm90b3R5cGUuY3BwICovOyB9OwpAQCAtMjA2Miw2ICsyMDYw
LDE3IEBACiAJCUMyRkNBRTEyMTdBOUMyNEUwMDM0QzczNSAvKiBCeXRlY29kZUxpdmVuZXNzQW5h
bHlzaXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QzJGQ0FFMEUxN0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5jcHAg
Ki87IH07CiAJCUMyRkNBRTEzMTdBOUMyNEUwMDM0QzczNSAvKiBCeXRlY29kZUxpdmVuZXNzQW5h
bHlzaXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMy
RkNBRTBGMTdBOUMyNEUwMDM0QzczNSAvKiBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlDMkZFMThBNDE2
QkFFQzQwMDBBRjMwNjEgLyogU3RydWN0dXJlUmFyZURhdGEuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyRkUxOEEzMTZCQUVDNDAwMEFGMzA2MSAvKiBT
dHJ1Y3R1cmVSYXJlRGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCUM0NzAzQ0MwMTkyODQ0OTYwMDEzRkJFQSAvKiBnZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkgaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBDNDcwM0NCRjE5Mjg0NDk2MDAxM0ZCRUEgLyogZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCUM0NzAzQ0NFMTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0ZV9i
YWNrZW5kX2NvbW1hbmRzLnB5IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQzQ3MDNDQzMxOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRlX2JhY2tlbmRfY29t
bWFuZHMucHkgKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJQzQ3MDNDQ0YxOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRlX2JhY2tlbmRfZGlzcGF0Y2hl
cl9oZWFkZXIucHkgaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBDNDcwM0NDNDE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJhdGVfYmFja2VuZF9kaXNwYXRjaGVy
X2hlYWRlci5weSAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OworCQlDNDcwM0NEMDE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJhdGVfYmFja2VuZF9kaXNwYXRj
aGVyX2ltcGxlbWVudGF0aW9uLnB5IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQzQ3MDNDQzUxOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRlX2JhY2tlbmRf
ZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OworCQlDNDcwM0NEMTE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJh
dGVfZnJvbnRlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkgaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNDcwM0NDNjE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJh
dGVfZnJvbnRlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkgKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQzQ3MDNDRDIxOTI4NDRDQzAwMTNGQkVBIC8qIGdl
bmVyYXRlX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkgaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNDcwM0NDNzE5Mjg0NENDMDAxM0ZC
RUEgLyogZ2VuZXJhdGVfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlDNDcwM0NEMzE5
Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJhdGVfdHlwZV9idWlsZGVyX2hlYWRlci5weSBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM0NzAzQ0M4MTkyODQ0Q0Mw
MDEzRkJFQSAvKiBnZW5lcmF0ZV90eXBlX2J1aWxkZXJfaGVhZGVyLnB5ICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUM0NzAzQ0Q0MTkyODQ0Q0MwMDEz
RkJFQSAvKiBnZW5lcmF0ZV90eXBlX2J1aWxkZXJfaW1wbGVtZW50YXRpb24ucHkgaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNDcwM0NDOTE5Mjg0NENDMDAx
M0ZCRUEgLyogZ2VuZXJhdGVfdHlwZV9idWlsZGVyX2ltcGxlbWVudGF0aW9uLnB5ICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUM0NzAzQ0Q1MTkyODQ0
Q0MwMDEzRkJFQSAvKiBnZW5lcmF0b3JfdGVtcGxhdGVzLnB5IGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzQ3MDNDQ0ExOTI4NDRDQzAwMTNGQkVBIC8qIGdl
bmVyYXRvcl90ZW1wbGF0ZXMucHkgKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKKwkJQzQ3MDNDRDYxOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRvci5weSBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM0NzAzQ0NCMTky
ODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0b3IucHkgKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQzQ3MDNDRDcxOTI4NDRDQzAwMTNGQkVBIC8qIG1vZGVs
cy5weSBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM0NzAz
Q0NDMTkyODQ0Q0MwMDEzRkJFQSAvKiBtb2RlbHMucHkgKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTEyNEE4RjcwRTU1NTc3NTAwMzA5MUYxIC8qIE9w
YXF1ZUpTU3RyaW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBFMTI0QThGNTBFNTU1Nzc1MDAzMDkxRjEgLyogT3BhcXVlSlNTdHJpbmcuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFMTI0QThGODBFNTU1
Nzc1MDAzMDkxRjEgLyogT3BhcXVlSlNTdHJpbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTEyNEE4RjYwRTU1NTc3NTAwMzA5MUYxIC8qIE9wYXF1
ZUpTU3RyaW5nLmNwcCAqLzsgfTsKIAkJRTE4RTNBNTkwREY5Mjc4QzAwRDkwQjM0IC8qIFZNLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxOEUzQTU3
MERGOTI3OEMwMEQ5MEIzNCAvKiBWTS5jcHAgKi87IH07CkBAIC0zMzEyLDggKzMzMjEsNiBAQAog
CQlBNTMyNDM4NTE4NTY4MzE3MDAyRUQ2OTIgLyogSW5zcGVjdG9ySlNUeXBlQnVpbGRlcnMuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSW5zcGVjdG9ySlNUeXBlQnVpbGRlcnMuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlBNTMyNDM4NjE4NTY4MzE3MDAyRUQ2OTIgLyogSW5zcGVj
dG9ySlNUeXBlQnVpbGRlcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5zcGVjdG9ySlNUeXBlQnVpbGRl
cnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTUzMjQzOEQxODU2OTZDQTAwMkVE
NjkyIC8qIHByb3RvY29sICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gZm9sZGVyOyBwYXRoID0gcHJvdG9jb2w7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCUE1MzI0MzhGMTg1Njk2RTYwMDJFRDY5MiAvKiBDb2RlR2VuZXJhdG9ySW5zcGVjdG9y
LnB5ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gdGV4dC5zY3JpcHQucHl0aG9uOyBwYXRoID0gQ29kZUdlbmVyYXRvcklu
c3BlY3Rvci5weTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTUzMjQzOTAxODU2OTZF
NjAwMkVENjkyIC8qIENvZGVHZW5lcmF0b3JJbnNwZWN0b3JTdHJpbmdzLnB5ICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
dGV4dC5zY3JpcHQucHl0aG9uOyBwYXRoID0gQ29kZUdlbmVyYXRvckluc3BlY3RvclN0cmluZ3Mu
cHk7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE1MzI0MzkxMTg1Njk2RTYwMDJFRDY5
MiAvKiBnZW5lcmF0ZS1jb21iaW5lZC1pbnNwZWN0b3ItanNvbi5weSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQu
c2NyaXB0LnB5dGhvbjsgcGF0aCA9ICJnZW5lcmF0ZS1jb21iaW5lZC1pbnNwZWN0b3ItanNvbi5w
eSI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE1MzI0Mzk1MTg1NkE0NzUwMDJFRDY5
MiAvKiBJbnNwZWN0b3JKUy5qc29uICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5qc29uOyBwYXRoID0gSW5zcGVj
dG9ySlMuanNvbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTUzMjQzOTYxODU2QTQ3
NTAwMkVENjkyIC8qIEluc3BlY3RvckpTQmFja2VuZENvbW1hbmRzLmpzICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5qYXZhc2NyaXB0OyBwYXRoID0gSW5zcGVjdG9ySlNCYWNrZW5kQ29tbWFuZHMuanM7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zNzI5LDYgKzM3MzYsMTggQEAKIAkJQzJG
Q0FFMEUxN0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBCeXRlY29kZUxpdmVuZXNzQW5hbHlz
aXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMkZDQUUwRjE3QTlDMjRFMDAz
NEM3MzUgLyogQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlDMkZFMThBMzE2QkFFQzQwMDBBRjMwNjEgLyogU3RydWN0dXJlUmFyZURh
dGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RydWN0dXJlUmFyZURhdGEu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzQ3MDNDQkYxOTI4NDQ5NjAwMTNGQkVB
IC8qIGdlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRl
eHQuc2NyaXB0LnB5dGhvbjsgcGF0aCA9ICJnZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDNDcwM0NDMjE5Mjg0NEND
MDAxM0ZCRUEgLyogX19pbml0X18ucHkgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnNjcmlwdC5weXRob247IG5h
bWUgPSBfX2luaXRfXy5weTsgcGF0aCA9IF9faW5pdF9fLnB5OyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQlDNDcwM0NDMzE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJhdGVfYmFja2VuZF9j
b21tYW5kcy5weSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuc2NyaXB0LnB5dGhvbjsgbmFtZSA9IGdlbmVyYXRl
X2JhY2tlbmRfY29tbWFuZHMucHk7IHBhdGggPSBnZW5lcmF0ZV9iYWNrZW5kX2NvbW1hbmRzLnB5
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDNDcwM0NDNDE5Mjg0NENDMDAxM0ZCRUEg
LyogZ2VuZXJhdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQu
c2NyaXB0LnB5dGhvbjsgbmFtZSA9IGdlbmVyYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIu
cHk7IHBhdGggPSBnZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5OyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlDNDcwM0NDNTE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJh
dGVfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5ICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5z
Y3JpcHQucHl0aG9uOyBuYW1lID0gZ2VuZXJhdGVfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVu
dGF0aW9uLnB5OyBwYXRoID0gZ2VuZXJhdGVfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0
aW9uLnB5OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDNDcwM0NDNjE5Mjg0NENDMDAx
M0ZCRUEgLyogZ2VuZXJhdGVfZnJvbnRlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSB0ZXh0LnNjcmlwdC5weXRob247IG5hbWUgPSBnZW5lcmF0ZV9mcm9udGVuZF9kaXNwYXRjaGVy
X2hlYWRlci5weTsgcGF0aCA9IGdlbmVyYXRlX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDNDcwM0NDNzE5Mjg0NENDMDAxM0ZCRUEg
LyogZ2VuZXJhdGVfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHRleHQuc2NyaXB0LnB5dGhvbjsgbmFtZSA9IGdlbmVyYXRlX2Zyb250ZW5kX2Rpc3BhdGNo
ZXJfaW1wbGVtZW50YXRpb24ucHk7IHBhdGggPSBnZW5lcmF0ZV9mcm9udGVuZF9kaXNwYXRjaGVy
X2ltcGxlbWVudGF0aW9uLnB5OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDNDcwM0ND
ODE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJhdGVfdHlwZV9idWlsZGVyX2hlYWRlci5weSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHRleHQuc2NyaXB0LnB5dGhvbjsgbmFtZSA9IGdlbmVyYXRlX3R5cGVfYnVpbGRlcl9o
ZWFkZXIucHk7IHBhdGggPSBnZW5lcmF0ZV90eXBlX2J1aWxkZXJfaGVhZGVyLnB5OyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlDNDcwM0NDOTE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJh
dGVfdHlwZV9idWlsZGVyX2ltcGxlbWVudGF0aW9uLnB5ICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5zY3JpcHQu
cHl0aG9uOyBuYW1lID0gZ2VuZXJhdGVfdHlwZV9idWlsZGVyX2ltcGxlbWVudGF0aW9uLnB5OyBw
YXRoID0gZ2VuZXJhdGVfdHlwZV9idWlsZGVyX2ltcGxlbWVudGF0aW9uLnB5OyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlDNDcwM0NDQTE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJhdG9y
X3RlbXBsYXRlcy5weSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuc2NyaXB0LnB5dGhvbjsgbmFtZSA9IGdlbmVy
YXRvcl90ZW1wbGF0ZXMucHk7IHBhdGggPSBnZW5lcmF0b3JfdGVtcGxhdGVzLnB5OyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlDNDcwM0NDQjE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJh
dG9yLnB5ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gdGV4dC5zY3JpcHQucHl0aG9uOyBuYW1lID0gZ2VuZXJhdG9yLnB5
OyBwYXRoID0gZ2VuZXJhdG9yLnB5OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDNDcw
M0NDQzE5Mjg0NENDMDAxM0ZCRUEgLyogbW9kZWxzLnB5ICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5zY3JpcHQu
cHl0aG9uOyBuYW1lID0gbW9kZWxzLnB5OyBwYXRoID0gbW9kZWxzLnB5OyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlEMjEyMDIyODBBRDQzMTBDMDBFRDc5QjYgLyogRGF0ZUNvbnZlcnNp
b24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERhdGVDb252ZXJz
aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDIxMjAyMjkwQUQ0MzEwQzAw
RUQ3OUI2IC8qIERhdGVDb252ZXJzaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBEYXRlQ29udmVyc2lvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMTI0
QThGNTBFNTU1Nzc1MDAzMDkxRjEgLyogT3BhcXVlSlNTdHJpbmcuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gT3BhcXVlSlNTdHJpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTU1NzgsMTAgKzU1OTcsMTAgQEAKIAkJQTUzMjQzOEUxODU2OTZDRTAwMkVENjky
IC8qIHNjcmlwdHMgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAot
CQkJCUE1MzI0MzhGMTg1Njk2RTYwMDJFRDY5MiAvKiBDb2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5
ICovLAotCQkJCUE1MzI0MzkwMTg1Njk2RTYwMDJFRDY5MiAvKiBDb2RlR2VuZXJhdG9ySW5zcGVj
dG9yU3RyaW5ncy5weSAqLywKKwkJCQlDNDcwM0NDMTE5Mjg0NEE0MDAxM0ZCRUEgLyogY29kZWdl
biAqLywKIAkJCQlBNTg0MEUyNjE4N0M5ODA3MDA4NDNCMTAgLyogY3NzbWluLnB5ICovLAogCQkJ
CUE1MzI0MzkxMTg1Njk2RTYwMDJFRDY5MiAvKiBnZW5lcmF0ZS1jb21iaW5lZC1pbnNwZWN0b3It
anNvbi5weSAqLywKKwkJCQlDNDcwM0NCRjE5Mjg0NDk2MDAxM0ZCRUEgLyogZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5ICovLAogCQkJCUE1ODQwRTI4MTg3Q0E1QjgwMDg0
M0IxMCAvKiBpbmxpbmUtYW5kLW1pbmlmeS1zdHlsZXNoZWV0cy1hbmQtc2NyaXB0cy5weSAqLywK
IAkJCQlBNTEzRTVDNDE4NUY5MkRDMDA3RTk1QUQgLyoganNtaW4ucHkgKi8sCiAJCQkJQTUxM0U1
QzUxODVGOTJGMDAwN0U5NUFEIC8qIHh4ZC5wbCAqLywKQEAgLTU2OTksNiArNTcxOCwyNCBAQAog
CQkJcGF0aCA9IGJ1aWx0aW5zOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKKwkJ
QzQ3MDNDQzExOTI4NDRBNDAwMTNGQkVBIC8qIGNvZGVnZW4gKi8gPSB7CisJCQlpc2EgPSBQQlhH
cm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCUM0NzAzQ0MyMTkyODQ0Q0MwMDEzRkJFQSAvKiBf
X2luaXRfXy5weSAqLywKKwkJCQlDNDcwM0NDMzE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJhdGVf
YmFja2VuZF9jb21tYW5kcy5weSAqLywKKwkJCQlDNDcwM0NDNDE5Mjg0NENDMDAxM0ZCRUEgLyog
Z2VuZXJhdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weSAqLywKKwkJCQlDNDcwM0NDNTE5
Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJhdGVfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0
aW9uLnB5ICovLAorCQkJCUM0NzAzQ0M2MTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0ZV9mcm9u
dGVuZF9kaXNwYXRjaGVyX2hlYWRlci5weSAqLywKKwkJCQlDNDcwM0NDNzE5Mjg0NENDMDAxM0ZC
RUEgLyogZ2VuZXJhdGVfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSAqLywK
KwkJCQlDNDcwM0NDODE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJhdGVfdHlwZV9idWlsZGVyX2hl
YWRlci5weSAqLywKKwkJCQlDNDcwM0NDOTE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJhdGVfdHlw
ZV9idWlsZGVyX2ltcGxlbWVudGF0aW9uLnB5ICovLAorCQkJCUM0NzAzQ0NBMTkyODQ0Q0MwMDEz
RkJFQSAvKiBnZW5lcmF0b3JfdGVtcGxhdGVzLnB5ICovLAorCQkJCUM0NzAzQ0NCMTkyODQ0Q0Mw
MDEzRkJFQSAvKiBnZW5lcmF0b3IucHkgKi8sCisJCQkJQzQ3MDNDQ0MxOTI4NDRDQzAwMTNGQkVB
IC8qIG1vZGVscy5weSAqLywKKwkJCSk7CisJCQlwYXRoID0gY29kZWdlbjsKKwkJCXNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7CisJCX07CiAvKiBFbmQgUEJYR3JvdXAgc2VjdGlvbiAqLwogCiAvKiBC
ZWdpbiBQQlhIZWFkZXJzQnVpbGRQaGFzZSBzZWN0aW9uICovCkBAIC01OTg3LDYgKzYwMjQsMTkg
QEAKIAkJCQkyQUFCQ0RFNzE4RUYyOTQyMDAwMDIwOTYgLyogR0NMb2dnaW5nLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlGRTUyNDhGOTE5MTQ0MkQ5MDBCN0ZERTQgLyogVmFyaWFibGVXYXRjaHBvaW50
U2V0SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzJEQTc3ODMxOEUyNTk5OTAwNjZGQ0I2
IC8qIEhlYXBJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKKwkJCQlBNTMyNDM5NDE4NTY5NzA5MDAy
RUQ2OTIgLyogZ2VuZXJhdGUtY29tYmluZWQtaW5zcGVjdG9yLWpzb24ucHkgaW4gSGVhZGVycyAq
LywKKwkJCQlBNTg0MEUyNzE4N0M5ODFFMDA4NDNCMTAgLyogY3NzbWluLnB5IGluIEhlYWRlcnMg
Ki8sCisJCQkJQzQ3MDNDRDMxOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRlX3R5cGVfYnVpbGRl
cl9oZWFkZXIucHkgaW4gSGVhZGVycyAqLywKKwkJCQlDNDcwM0NEMjE5Mjg0NENDMDAxM0ZCRUEg
LyogZ2VuZXJhdGVfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSBpbiBIZWFk
ZXJzICovLAorCQkJCUM0NzAzQ0QxMTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0ZV9mcm9udGVu
ZF9kaXNwYXRjaGVyX2hlYWRlci5weSBpbiBIZWFkZXJzICovLAorCQkJCUM0NzAzQ0Q1MTkyODQ0
Q0MwMDEzRkJFQSAvKiBnZW5lcmF0b3JfdGVtcGxhdGVzLnB5IGluIEhlYWRlcnMgKi8sCisJCQkJ
QzQ3MDNDRDYxOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRvci5weSBpbiBIZWFkZXJzICovLAor
CQkJCUM0NzAzQ0NGMTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNo
ZXJfaGVhZGVyLnB5IGluIEhlYWRlcnMgKi8sCisJCQkJQzQ3MDNDQzAxOTI4NDQ5NjAwMTNGQkVB
IC8qIGdlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weSBpbiBIZWFkZXJzICov
LAorCQkJCUM0NzAzQ0QwMTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0ZV9iYWNrZW5kX2Rpc3Bh
dGNoZXJfaW1wbGVtZW50YXRpb24ucHkgaW4gSGVhZGVycyAqLywKKwkJCQlDNDcwM0NDRTE5Mjg0
NENDMDAxM0ZCRUEgLyogZ2VuZXJhdGVfYmFja2VuZF9jb21tYW5kcy5weSBpbiBIZWFkZXJzICov
LAorCQkJCUM0NzAzQ0Q0MTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0ZV90eXBlX2J1aWxkZXJf
aW1wbGVtZW50YXRpb24ucHkgaW4gSGVhZGVycyAqLywKKwkJCQlDNDcwM0NENzE5Mjg0NENDMDAx
M0ZCRUEgLyogbW9kZWxzLnB5IGluIEhlYWRlcnMgKi8sCiAJCQkJMkFBQ0U2M0QxOENBNUEwMzAw
RUQwMTkxIC8qIEdDQWN0aXZpdHlDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkE4MzYz
ODYxOEQ3RDBFRTAwMDBFQkNDIC8qIEVkZW5HQ0FjdGl2aXR5Q2FsbGJhY2suaCBpbiBIZWFkZXJz
ICovLAogCQkJCTJBODM2MzhBMThEN0QwRkUwMDAwRUJDQyAvKiBGdWxsR0NBY3Rpdml0eUNhbGxi
YWNrLmggaW4gSGVhZGVycyAqLywKQEAgLTYwNDYsOCArNjA5Niw2IEBACiAJCQkJMEZEOEEzMTQx
N0Q0MzI2QzAwQ0EyQzQwIC8qIENvZGVCbG9ja1NldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5
NkVCQjMxNjY3NkVGNjAwOEJBREUzIC8qIENvZGVCbG9ja1dpdGhKSVRUeXBlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBNzdGMTgyMjE2NDA4OEIyMDA2NDBBNDcgLyogQ29kZUNhY2hlLmggaW4gSGVh
ZGVycyAqLywKLQkJCQlBNTMyNDM5MjE4NTY5NzA5MDAyRUQ2OTIgLyogQ29kZUdlbmVyYXRvcklu
c3BlY3Rvci5weSBpbiBIZWFkZXJzICovLAotCQkJCUE1MzI0MzkzMTg1Njk3MDkwMDJFRDY5MiAv
KiBDb2RlR2VuZXJhdG9ySW5zcGVjdG9yU3RyaW5ncy5weSBpbiBIZWFkZXJzICovLAogCQkJCTg2
RTExNkIxMEZFNzVBQzgwMEI1MTJCQyAvKiBDb2RlTG9jYXRpb24uaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGQkQ3RTY5MTQ0Nzk5OTYwMDQ4MTMxNSAvKiBDb2RlT3JpZ2luLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjIxQzI3RDE0QkU3MjdBMDBBREM2NEIgLyogQ29kZVNwZWNpYWxpemF0aW9uS2lu
ZC5oIGluIEhlYWRlcnMgKi8sCkBAIC02MDc4LDcgKzYxMjYsNiBAQAogCQkJCUMyMThEMTQwMTY1
NUNGRDUwMDYyQkI4MSAvKiBDb3B5V29ya0xpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTJBNjgy
OTVCMTg3NUY4MDUwMEI2QzNFMiAvKiBDb3B5V3JpdGVCYXJyaWVyLmggaW4gSGVhZGVycyAqLywK
IAkJCQk1REU2RTVCMzBFMTcyOEVDMDAxODA0MDcgLyogY3JlYXRlX2hhc2hfdGFibGUgaW4gSGVh
ZGVycyAqLywKLQkJCQlBNTg0MEUyNzE4N0M5ODFFMDA4NDNCMTAgLyogY3NzbWluLnB5IGluIEhl
YWRlcnMgKi8sCiAJCQkJMEY0MjZBNEIxNDYwQ0Q2RTAwMTMxRjhGIC8qIERhdGFGb3JtYXQuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGMkI2NkRGMTdCNkI1QUIwMEE3QUUzRiAvKiBEYXRhVmlldy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkNEMjAzNEEwRTE3MTM1RTAwMkM3RTgyIC8qIERhdGVDb25z
dHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCkBAIC02MzE5LDcgKzYzNjYsNiBAQAogCQkJCTBGMkI2
NkFGMTdCNkI1NDUwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZFNldElubGluZXMuaCBp
biBIZWFkZXJzICovLAogCQkJCUMyMjM5RDFCMTYyNjJCREQwMDVBQzVGRCAvKiBHQ1RocmVhZC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQzIxMTIyRTIxNUREOUFCMzAwNzkwRTNBIC8qIEdDVGhyZWFk
U2hhcmVkRGF0YS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQTUzMjQzOTQxODU2OTcwOTAwMkVENjky
IC8qIGdlbmVyYXRlLWNvbWJpbmVkLWluc3BlY3Rvci1qc29uLnB5IGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEYyQjY2RTAxN0I2QjVBQjAwQTdBRTNGIC8qIEdlbmVyaWNUeXBlZEFycmF5Vmlldy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEYxRkU1MUMxOTIyQTNCQzAwNjk4N0M1IC8qIEFib3J0UmVhc29u
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZFMTE3QjZCNUFCMDBBN0FFM0YgLyogR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0NvbnNvbGVNZXNzYWdlLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvQ29uc29sZU1lc3NhZ2UuY3BwCmluZGV4IDQwNzkwYmY1
ZDllNTkxYmUwZTM1ZjYyYTQ1MTg3OGJjZDU3MmM3ZjYuLjAyMDNiYzFhOWY3MzZiNDhmYzIxZWMx
MWM4ZTNiNDk1MDlkMTA5NTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3IvQ29uc29sZU1lc3NhZ2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3IvQ29uc29sZU1lc3NhZ2UuY3BwCkBAIC0xMzEsNyArMTMxLDcgQEAgdm9pZCBDb25zb2xl
TWVzc2FnZTo6YXV0b2dlbmVyYXRlTWV0YWRhdGEoSlNDOjpFeGVjU3RhdGUqIHN0YXRlKQogICAg
IH0KIH0KIAotc3RhdGljIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNvbnNvbGU6OkNvbnNvbGVN
ZXNzYWdlOjpTb3VyY2U6OkVudW0gbWVzc2FnZVNvdXJjZVZhbHVlKE1lc3NhZ2VTb3VyY2Ugc291
cmNlKQorc3RhdGljIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNvbnNvbGU6OkNvbnNvbGVNZXNz
YWdlOjpTb3VyY2UgbWVzc2FnZVNvdXJjZVZhbHVlKE1lc3NhZ2VTb3VyY2Ugc291cmNlKQogewog
ICAgIHN3aXRjaCAoc291cmNlKSB7CiAgICAgY2FzZSBNZXNzYWdlU291cmNlOjpYTUw6IHJldHVy
biBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDb25zb2xlOjpDb25zb2xlTWVzc2FnZTo6U291cmNl
OjpYTUw7CkBAIC0xNDgsNyArMTQ4LDcgQEAgc3RhdGljIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6
OkNvbnNvbGU6OkNvbnNvbGVNZXNzYWdlOjpTb3VyY2U6OkVudW0gbWVzc2FnZVNvdXIKICAgICBy
ZXR1cm4gSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q29uc29sZTo6Q29uc29sZU1lc3NhZ2U6OlNv
dXJjZTo6T3RoZXI7CiB9CiAKLXN0YXRpYyBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDb25zb2xl
OjpDb25zb2xlTWVzc2FnZTo6VHlwZTo6RW51bSBtZXNzYWdlVHlwZVZhbHVlKE1lc3NhZ2VUeXBl
IHR5cGUpCitzdGF0aWMgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q29uc29sZTo6Q29uc29sZU1l
c3NhZ2U6OlR5cGUgbWVzc2FnZVR5cGVWYWx1ZShNZXNzYWdlVHlwZSB0eXBlKQogewogICAgIHN3
aXRjaCAodHlwZSkgewogICAgIGNhc2UgTWVzc2FnZVR5cGU6OkxvZzogcmV0dXJuIEluc3BlY3Rv
cjo6VHlwZUJ1aWxkZXI6OkNvbnNvbGU6OkNvbnNvbGVNZXNzYWdlOjpUeXBlOjpMb2c7CkBAIC0x
NjgsNyArMTY4LDcgQEAgc3RhdGljIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNvbnNvbGU6OkNv
bnNvbGVNZXNzYWdlOjpUeXBlOjpFbnVtIG1lc3NhZ2VUeXBlVmEKICAgICByZXR1cm4gSW5zcGVj
dG9yOjpUeXBlQnVpbGRlcjo6Q29uc29sZTo6Q29uc29sZU1lc3NhZ2U6OlR5cGU6OkxvZzsKIH0K
IAotc3RhdGljIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNvbnNvbGU6OkNvbnNvbGVNZXNzYWdl
OjpMZXZlbDo6RW51bSBtZXNzYWdlTGV2ZWxWYWx1ZShNZXNzYWdlTGV2ZWwgbGV2ZWwpCitzdGF0
aWMgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q29uc29sZTo6Q29uc29sZU1lc3NhZ2U6OkxldmVs
IG1lc3NhZ2VMZXZlbFZhbHVlKE1lc3NhZ2VMZXZlbCBsZXZlbCkKIHsKICAgICBzd2l0Y2ggKGxl
dmVsKSB7CiAgICAgY2FzZSBNZXNzYWdlTGV2ZWw6OkxvZzogcmV0dXJuIEluc3BlY3Rvcjo6VHlw
ZUJ1aWxkZXI6OkNvbnNvbGU6OkNvbnNvbGVNZXNzYWdlOjpMZXZlbDo6TG9nOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdC5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0LmNwcAppbmRleCA3
ODVkYWQwYWM4OGU0ZTcwZDk4NWY2MDk4ODA1ZWRjNDViYWY2OGYxLi5lNWEyNjIyZGRlYjE0NTJm
ZTkyYmNhNDZhODA0NTliOTliYWQ0MDhhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0LmNwcApAQCAtMTAwLDEzICsxMDAsMTMgQEAgdm9p
ZCBJbmplY3RlZFNjcmlwdDo6Z2V0RnVuY3Rpb25EZXRhaWxzKEVycm9yU3RyaW5nKiBlcnJvclN0
cmluZywgY29uc3QgU3RyaW5nJgogCiAgICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiByZXN1bHRW
YWx1ZTsKICAgICBtYWtlQ2FsbChmdW5jdGlvbiwgJnJlc3VsdFZhbHVlKTsKLSAgICBpZiAoIXJl
c3VsdFZhbHVlIHx8IHJlc3VsdFZhbHVlLT50eXBlKCkgIT0gSW5zcGVjdG9yVmFsdWU6OlR5cGVP
YmplY3QpIHsKKyAgICBpZiAoIXJlc3VsdFZhbHVlIHx8IHJlc3VsdFZhbHVlLT50eXBlKCkgIT0g
SW5zcGVjdG9yVmFsdWU6OlR5cGU6Ok9iamVjdCkgewogICAgICAgICBpZiAoIXJlc3VsdFZhbHVl
LT5hc1N0cmluZyhlcnJvclN0cmluZykpCiAgICAgICAgICAgICAqZXJyb3JTdHJpbmcgPSBBU0NJ
SUxpdGVyYWwoIkludGVybmFsIGVycm9yIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAg
ICAqcmVzdWx0ID0gSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6RGVidWdnZXI6OkZ1bmN0aW9uRGV0
YWlsczo6cnVudGltZUNhc3QocmVzdWx0VmFsdWUpOworICAgICpyZXN1bHQgPSBCaW5kaW5nVHJh
aXRzPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpGdW5jdGlvbkRldGFpbHM+Ojpy
dW50aW1lQ2FzdChyZXN1bHRWYWx1ZSk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRTY3JpcHQ6OmdldFBy
b3BlcnRpZXMoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIG9iamVjdElk
LCBib29sIG93blByb3BlcnRpZXMsIFJlZlB0cjxBcnJheTxJbnNwZWN0b3I6OlR5cGVCdWlsZGVy
OjpSdW50aW1lOjpQcm9wZXJ0eURlc2NyaXB0b3I+PiogcHJvcGVydGllcykKQEAgLTExNywxMiAr
MTE3LDEyIEBAIHZvaWQgSW5qZWN0ZWRTY3JpcHQ6OmdldFByb3BlcnRpZXMoRXJyb3JTdHJpbmcq
IGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIG9iamVjCiAKICAgICBSZWZQdHI8SW5zcGVjdG9y
VmFsdWU+IHJlc3VsdDsKICAgICBtYWtlQ2FsbChmdW5jdGlvbiwgJnJlc3VsdCk7Ci0gICAgaWYg
KCFyZXN1bHQgfHwgcmVzdWx0LT50eXBlKCkgIT0gSW5zcGVjdG9yVmFsdWU6OlR5cGVBcnJheSkg
eworICAgIGlmICghcmVzdWx0IHx8IHJlc3VsdC0+dHlwZSgpICE9IEluc3BlY3RvclZhbHVlOjpU
eXBlOjpBcnJheSkgewogICAgICAgICAqZXJyb3JTdHJpbmcgPSBBU0NJSUxpdGVyYWwoIkludGVy
bmFsIGVycm9yIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICAqcHJvcGVydGllcyA9
IEFycmF5PEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OlByb3BlcnR5RGVzY3JpcHRv
cj46OnJ1bnRpbWVDYXN0KHJlc3VsdCk7CisgICAgKnByb3BlcnRpZXMgPSBCaW5kaW5nVHJhaXRz
PEFycmF5PEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OlByb3BlcnR5RGVzY3JpcHRv
cj4+OjpydW50aW1lQ2FzdChyZXN1bHQpOwogfQogCiB2b2lkIEluamVjdGVkU2NyaXB0OjpnZXRJ
bnRlcm5hbFByb3BlcnRpZXMoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcm
IG9iamVjdElkLCBSZWZQdHI8QXJyYXk8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UnVudGltZTo6
SW50ZXJuYWxQcm9wZXJ0eURlc2NyaXB0b3I+PiogcHJvcGVydGllcykKQEAgLTEzMiwxMiArMTMy
LDEyIEBAIHZvaWQgSW5qZWN0ZWRTY3JpcHQ6OmdldEludGVybmFsUHJvcGVydGllcyhFcnJvclN0
cmluZyogZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluCiAKICAgICBSZWZQdHI8SW5zcGVjdG9yVmFs
dWU+IHJlc3VsdDsKICAgICBtYWtlQ2FsbChmdW5jdGlvbiwgJnJlc3VsdCk7Ci0gICAgaWYgKCFy
ZXN1bHQgfHwgcmVzdWx0LT50eXBlKCkgIT0gSW5zcGVjdG9yVmFsdWU6OlR5cGVBcnJheSkgewor
ICAgIGlmICghcmVzdWx0IHx8IHJlc3VsdC0+dHlwZSgpICE9IEluc3BlY3RvclZhbHVlOjpUeXBl
OjpBcnJheSkgewogICAgICAgICAqZXJyb3JTdHJpbmcgPSBBU0NJSUxpdGVyYWwoIkludGVybmFs
IGVycm9yIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBSZWZQdHI8QXJyYXk8SW5z
cGVjdG9yOjpUeXBlQnVpbGRlcjo6UnVudGltZTo6SW50ZXJuYWxQcm9wZXJ0eURlc2NyaXB0b3I+
PiBhcnJheSA9IEFycmF5PEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OkludGVybmFs
UHJvcGVydHlEZXNjcmlwdG9yPjo6cnVudGltZUNhc3QocmVzdWx0KTsKKyAgICBhdXRvIGFycmF5
ID0gQmluZGluZ1RyYWl0czxBcnJheTxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpSdW50aW1lOjpJ
bnRlcm5hbFByb3BlcnR5RGVzY3JpcHRvcj4+OjpydW50aW1lQ2FzdChyZXN1bHQpOwogICAgIGlm
IChhcnJheS0+bGVuZ3RoKCkgPiAwKQogICAgICAgICAqcHJvcGVydGllcyA9IGFycmF5OwogfQpA
QCAtMTUyLDggKzE1Miw4IEBAIFBhc3NSZWZQdHI8QXJyYXk8SW5zcGVjdG9yOjpUeXBlQnVpbGRl
cjo6RGVidWdnZXI6OkNhbGxGcmFtZT4+IEluamVjdGVkU2NyaXB0Ojp3CiAgICAgRGVwcmVjYXRl
ZDo6U2NyaXB0VmFsdWUgY2FsbEZyYW1lc1ZhbHVlID0gY2FsbEZ1bmN0aW9uV2l0aEV2YWxFbmFi
bGVkKGZ1bmN0aW9uLCBoYWRFeGNlcHRpb24pOwogICAgIEFTU0VSVCghaGFkRXhjZXB0aW9uKTsK
ICAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHJlc3VsdCA9IGNhbGxGcmFtZXNWYWx1ZS50b0lu
c3BlY3RvclZhbHVlKHNjcmlwdFN0YXRlKCkpOwotICAgIGlmIChyZXN1bHQtPnR5cGUoKSA9PSBJ
bnNwZWN0b3JWYWx1ZTo6VHlwZUFycmF5KQotICAgICAgICByZXR1cm4gQXJyYXk8SW5zcGVjdG9y
OjpUeXBlQnVpbGRlcjo6RGVidWdnZXI6OkNhbGxGcmFtZT46OnJ1bnRpbWVDYXN0KHJlc3VsdCk7
CisgICAgaWYgKHJlc3VsdC0+dHlwZSgpID09IEluc3BlY3RvclZhbHVlOjpUeXBlOjpBcnJheSkK
KyAgICAgICAgcmV0dXJuIEJpbmRpbmdUcmFpdHM8QXJyYXk8SW5zcGVjdG9yOjpUeXBlQnVpbGRl
cjo6RGVidWdnZXI6OkNhbGxGcmFtZT4+OjpydW50aW1lQ2FzdChyZXN1bHQpOwogCiAgICAgcmV0
dXJuIEFycmF5PEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpDYWxsRnJhbWU+Ojpj
cmVhdGUoKTsKIH0KQEAgLTE3Myw3ICsxNzMsNyBAQCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6VHlw
ZUJ1aWxkZXI6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4gSW5qZWN0ZWRTY3JpcHQ6OndyYXBPYgog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJh
d1Jlc3VsdCA9IHIudG9JbnNwZWN0b3JWYWx1ZShzY3JpcHRTdGF0ZSgpKS0+YXNPYmplY3QoKTsK
LSAgICByZXR1cm4gSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UnVudGltZTo6UmVtb3RlT2JqZWN0
OjpydW50aW1lQ2FzdChyYXdSZXN1bHQpOworICAgIHJldHVybiBCaW5kaW5nVHJhaXRzPEluc3Bl
Y3Rvcjo6VHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD46OnJ1bnRpbWVDYXN0KHJh
d1Jlc3VsdCk7CiB9CiAKIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UnVudGlt
ZTo6UmVtb3RlT2JqZWN0PiBJbmplY3RlZFNjcmlwdDo6d3JhcFRhYmxlKGNvbnN0IERlcHJlY2F0
ZWQ6OlNjcmlwdFZhbHVlJiB0YWJsZSwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGNv
bHVtbnMpIGNvbnN0CkBAIC0xOTMsNyArMTkzLDcgQEAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlR5
cGVCdWlsZGVyOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+IEluamVjdGVkU2NyaXB0Ojp3cmFwVGEK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBy
YXdSZXN1bHQgPSByLnRvSW5zcGVjdG9yVmFsdWUoc2NyaXB0U3RhdGUoKSktPmFzT2JqZWN0KCk7
Ci0gICAgcmV0dXJuIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OlJlbW90ZU9iamVj
dDo6cnVudGltZUNhc3QocmF3UmVzdWx0KTsKKyAgICByZXR1cm4gQmluZGluZ1RyYWl0czxJbnNw
ZWN0b3I6OlR5cGVCdWlsZGVyOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+OjpydW50aW1lQ2FzdChy
YXdSZXN1bHQpOwogfQogCiBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSBJbmplY3RlZFNjcmlwdDo6
ZmluZE9iamVjdEJ5SWQoY29uc3QgU3RyaW5nJiBvYmplY3RJZCkgY29uc3QKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRCYXNlLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRCYXNlLmNwcApp
bmRleCBkOTU2MWUxZjRhNzg2Zjk2NTUwZTIyZGFhMzQyMzdlYzkzYWVjZjFiLi5mZTEwZDZjNGJm
YmFmYmYyODZjYzNhOGQzNWM5YzU4ZGQ1NDI0YzFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0QmFzZS5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdEJhc2UuY3BwCkBAIC0xMjgsNyAr
MTI4LDcgQEAgdm9pZCBJbmplY3RlZFNjcmlwdEJhc2U6Om1ha2VFdmFsQ2FsbChFcnJvclN0cmlu
ZyogZXJyb3JTdHJpbmcsIERlcHJlY2F0ZWQ6OlNjcmkKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAotICAgIGlmIChyZXN1bHQtPnR5cGUoKSA9PSBJbnNwZWN0b3JWYWx1ZTo6VHlwZVN0cmluZykg
eworICAgIGlmIChyZXN1bHQtPnR5cGUoKSA9PSBJbnNwZWN0b3JWYWx1ZTo6VHlwZTo6U3RyaW5n
KSB7CiAgICAgICAgIHJlc3VsdC0+YXNTdHJpbmcoZXJyb3JTdHJpbmcpOwogICAgICAgICBBU1NF
UlQoZXJyb3JTdHJpbmctPmxlbmd0aCgpKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMTQ3LDcgKzE0
Nyw3IEBAIHZvaWQgSW5qZWN0ZWRTY3JpcHRCYXNlOjptYWtlRXZhbENhbGwoRXJyb3JTdHJpbmcq
IGVycm9yU3RyaW5nLCBEZXByZWNhdGVkOjpTY3JpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICAqb2JqZWN0UmVzdWx0ID0gVHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdDo6
cnVudGltZUNhc3QocmVzdWx0T2JqKTsKKyAgICAqb2JqZWN0UmVzdWx0ID0gQmluZGluZ1RyYWl0
czxUeXBlQnVpbGRlcjo6UnVudGltZTo6UmVtb3RlT2JqZWN0Pjo6cnVudGltZUNhc3QocmVzdWx0
T2JqKTsKICAgICAqd2FzVGhyb3duID0gd2FzVGhyb3duVmFsOwogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0TWFuYWdlci5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0TWFuYWdlci5j
cHAKaW5kZXggZWYwZDlhMzc0NzM0ZDI1NjRlYzBjODFiNjM4NGQ2YzdkMDM0ZWExZC4uNDUxNzNm
YzgzN2JhZTBlMjA2NDE3YzM1NTExMTkyZTU0NjYzOGNiOSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdE1hbmFnZXIuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmNwcApA
QCAtOTUsNyArOTUsNyBAQCBpbnQgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOjppbmplY3RlZFNjcmlw
dElkRm9yKEV4ZWNTdGF0ZSogc2NyaXB0U3RhdGUpCiBJbmplY3RlZFNjcmlwdCBJbmplY3RlZFNj
cmlwdE1hbmFnZXI6OmluamVjdGVkU2NyaXB0Rm9yT2JqZWN0SWQoY29uc3QgU3RyaW5nJiBvYmpl
Y3RJZCkKIHsKICAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHBhcnNlZE9iamVjdElkID0gSW5z
cGVjdG9yVmFsdWU6OnBhcnNlSlNPTihvYmplY3RJZCk7Ci0gICAgaWYgKHBhcnNlZE9iamVjdElk
ICYmIHBhcnNlZE9iamVjdElkLT50eXBlKCkgPT0gSW5zcGVjdG9yVmFsdWU6OlR5cGVPYmplY3Qp
IHsKKyAgICBpZiAocGFyc2VkT2JqZWN0SWQgJiYgcGFyc2VkT2JqZWN0SWQtPnR5cGUoKSA9PSBJ
bnNwZWN0b3JWYWx1ZTo6VHlwZTo6T2JqZWN0KSB7CiAgICAgICAgIGxvbmcgaW5qZWN0ZWRTY3Jp
cHRJZCA9IDA7CiAgICAgICAgIGJvb2wgc3VjY2VzcyA9IHBhcnNlZE9iamVjdElkLT5hc09iamVj
dCgpLT5nZXROdW1iZXIoQVNDSUlMaXRlcmFsKCJpbmplY3RlZFNjcmlwdElkIiksICZpbmplY3Rl
ZFNjcmlwdElkKTsKICAgICAgICAgaWYgKHN1Y2Nlc3MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvclR5cGVCdWlsZGVyLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvclR5cGVCdWlsZGVyLmgKaW5kZXggOGVhNzZl
YzkwYzYwZTA3NzYxNzk1YzFjMTQ3OTUyZDQ3ODY4ZmU1OC4uNTM5Zjc4MjEyMDAzZmY1NDAxZWNi
NjM5ZGQ1YzNlMTFhZTFhYmI5MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JUeXBlQnVpbGRlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yVHlwZUJ1aWxkZXIuaApAQCAtNjMsNTQgKzYzLDYgQEAgcHJp
dmF0ZToKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShPcHRPdXRwdXQpOwogfTsKIAotCi0vLyBB
IHNtYWxsIHRyYW5zaWVudCB3cmFwcGVyIGFyb3VuZCBpbnQgdHlwZSwgdGhhdCBjYW4gYmUgdXNl
ZCBhcyBhIGZ1bmNpdG9uIHBhcmFtZXRlciB0eXBlCi0vLyBjbGV2ZXJseSBkaXNhbGxvd2luZyBD
KysgaW1wbGljaXQgY2FzdHMgZnJvbSBmbG9hdCBvciBkb3VibGUuCi1jbGFzcyBFeGFjdGx5SW50
IHsKLXB1YmxpYzoKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIEV4YWN0bHlJbnQoVCB0
KSA6IG1fdmFsdWUoY2FzdF90b19pbnQ8VD4odCkpIHsgfQotICAgIEV4YWN0bHlJbnQoKSB7IH0K
LQotICAgIG9wZXJhdG9yIGludCgpIHsgcmV0dXJuIG1fdmFsdWU7IH0KLQotcHJpdmF0ZToKLSAg
ICBpbnQgbV92YWx1ZTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgc3RhdGljIGlu
dCBjYXN0X3RvX2ludChUKSB7IHJldHVybiBUOjpkZWZhdWx0X2Nhc2VfY2FzdF9pc19ub3Rfc3Vw
cG9ydGVkKCk7IH0KLX07Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBpbnQgRXhhY3RseUludDo6Y2Fz
dF90b19pbnQ8aW50PihpbnQgaSkgeyByZXR1cm4gaTsgfQotCi10ZW1wbGF0ZTw+Ci1pbmxpbmUg
aW50IEV4YWN0bHlJbnQ6OmNhc3RfdG9faW50PHVuc2lnbmVkIGludD4odW5zaWduZWQgaW50IGkp
IHsgcmV0dXJuIGk7IH0KLQotI2lmICFBU1NFUlRfRElTQUJMRUQKLWNsYXNzIFJ1bnRpbWVDYXN0
SGVscGVyIHsKLXB1YmxpYzoKLSAgICB0ZW1wbGF0ZTxJbnNwZWN0b3JWYWx1ZTo6VHlwZSBUWVBF
PgotICAgIHN0YXRpYyB2b2lkIGFzc2VydFR5cGUoSW5zcGVjdG9yVmFsdWUqIHZhbHVlKQotICAg
IHsKLSAgICAgICAgQVNTRVJUKHZhbHVlLT50eXBlKCkgPT0gVFlQRSk7Ci0gICAgfQotCi0gICAg
c3RhdGljIHZvaWQgYXNzZXJ0QW55KEluc3BlY3RvclZhbHVlKikKLSAgICB7Ci0gICAgfQotCi0g
ICAgc3RhdGljIHZvaWQgYXNzZXJ0SW50KEluc3BlY3RvclZhbHVlKiB2YWx1ZSkKLSAgICB7Ci0g
ICAgICAgIGRvdWJsZSB2OwotICAgICAgICBib29sIGNhc3RSZXMgPSB2YWx1ZS0+YXNOdW1iZXIo
JnYpOwotICAgICAgICBBU1NFUlRfVU5VU0VEKGNhc3RSZXMsIGNhc3RSZXMpOwotICAgICAgICBB
U1NFUlQoc3RhdGljX2Nhc3Q8ZG91YmxlPihzdGF0aWNfY2FzdDxpbnQ+KHYpKSA9PSB2KTsKLSAg
ICB9Ci19OwotI2VuZGlmCi0KLQogLy8gVGhpcyBjbGFzcyBwcm92aWRlcyAiVHJhaXRzIiB0eXBl
IGZvciB0aGUgaW5wdXQgdHlwZSBULiBJdCBpcyBwcm9ncmFtbWVkIHVzaW5nIEMrKyB0ZW1wbGF0
ZSBzcGVjaWFsaXphdGlvbgogLy8gdGVjaG5pcXVlLiBCeSBkZWZhdWx0IGl0IHNpbXBseSB0YWtl
cyAiSXRlbVRyYWl0cyIgdHlwZSBmcm9tIFQsIGJ1dCBpdCBkb2Vzbid0IHdvcmsgd2l0aCB0aGUg
YmFzZSB0eXBlcy4KIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CkBAIC0xNDQsMjkgKzk2LDYgQEAgcHVi
bGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBBcnJheTxUPigpKTsKICAg
ICB9Ci0KLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxBcnJheTxUPj4gcnVudGltZUNhc3QoUGFzc1Jl
ZlB0cjxJbnNwZWN0b3JWYWx1ZT4gdmFsdWUpCi0gICAgewotICAgICAgICBSZWZQdHI8SW5zcGVj
dG9yQXJyYXk+IGFycmF5OwotICAgICAgICBib29sIGNhc3RSZXMgPSB2YWx1ZS0+YXNBcnJheSgm
YXJyYXkpOwotICAgICAgICBBU1NFUlRfVU5VU0VEKGNhc3RSZXMsIGNhc3RSZXMpOwotI2lmICFB
U1NFUlRfRElTQUJMRUQKLSAgICAgICAgYXNzZXJ0Q29ycmVjdFZhbHVlKGFycmF5LmdldCgpKTsK
LSNlbmRpZiAvLyAhQVNTRVJUX0RJU0FCTEVECi0gICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVv
ZihBcnJheTxUPikgPT0gc2l6ZW9mKEluc3BlY3RvckFycmF5KSwgdHlwZV9jYXN0X3Byb2JsZW0p
OwotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QXJyYXk8VD4qPihzdGF0aWNfY2FzdDxJbnNw
ZWN0b3JBcnJheUJhc2UqPihhcnJheS5nZXQoKSkpOwotICAgIH0KLQotI2lmICFBU1NFUlRfRElT
QUJMRUQKLSAgICBzdGF0aWMgdm9pZCBhc3NlcnRDb3JyZWN0VmFsdWUoSW5zcGVjdG9yVmFsdWUq
IHZhbHVlKQotICAgIHsKLSAgICAgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBhcnJheTsKLSAg
ICAgICAgYm9vbCBjYXN0UmVzID0gdmFsdWUtPmFzQXJyYXkoJmFycmF5KTsKLSAgICAgICAgQVNT
RVJUX1VOVVNFRChjYXN0UmVzLCBjYXN0UmVzKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGFycmF5LT5sZW5ndGgoKTsgaSsrKQotICAgICAgICAgICAgQXJyYXlJdGVtSGVscGVy
PFQ+OjpUcmFpdHM6OnRlbXBsYXRlIGFzc2VydENvcnJlY3RWYWx1ZTxUPihhcnJheS0+Z2V0KGkp
LmdldCgpKTsKLSAgICB9Ci0jZW5kaWYgLy8gIUFTU0VSVF9ESVNBQkxFRAogfTsKIAogc3RydWN0
IFN0cnVjdEl0ZW1UcmFpdHMgewpAQCAtMTc0LDE0ICsxMDMsNiBAQCBzdHJ1Y3QgU3RydWN0SXRl
bVRyYWl0cyB7CiAgICAgewogICAgICAgICBhcnJheS0+cHVzaFZhbHVlKHZhbHVlKTsKICAgICB9
Ci0KLSNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBz
dGF0aWMgdm9pZCBhc3NlcnRDb3JyZWN0VmFsdWUoSW5zcGVjdG9yVmFsdWUqIHZhbHVlKQotICAg
IHsKLSAgICAgICAgVDo6YXNzZXJ0Q29ycmVjdFZhbHVlKHZhbHVlKTsKLSAgICB9Ci0jZW5kaWYg
Ly8gIUFTU0VSVF9ESVNBQkxFRAogfTsKIAogdGVtcGxhdGU8PgpAQCAtMTkxLDE0ICsxMTIsNiBA
QCBzdHJ1Y3QgQXJyYXlJdGVtSGVscGVyPFN0cmluZz4gewogICAgICAgICB7CiAgICAgICAgICAg
ICBhcnJheS0+cHVzaFN0cmluZyh2YWx1ZSk7CiAgICAgICAgIH0KLQotI2lmICFBU1NFUlRfRElT
QUJMRUQKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICAgICAgc3RhdGljIHZvaWQg
YXNzZXJ0Q29ycmVjdFZhbHVlKEluc3BlY3RvclZhbHVlKiB2YWx1ZSkKLSAgICAgICAgewotICAg
ICAgICAgICAgUnVudGltZUNhc3RIZWxwZXI6OmFzc2VydFR5cGU8SW5zcGVjdG9yVmFsdWU6OlR5
cGVTdHJpbmc+KHZhbHVlKTsKLSAgICAgICAgfQotI2VuZGlmIC8vICFBU1NFUlRfRElTQUJMRUQK
ICAgICB9OwogfTsKIApAQCAtMjA5LDE0ICsxMjIsNiBAQCBzdHJ1Y3QgQXJyYXlJdGVtSGVscGVy
PGludD4gewogICAgICAgICB7CiAgICAgICAgICAgICBhcnJheS0+cHVzaEludCh2YWx1ZSk7CiAg
ICAgICAgIH0KLQotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVD4KLSAgICAgICAgc3RhdGljIHZvaWQgYXNzZXJ0Q29ycmVjdFZhbHVlKEluc3BlY3RvclZh
bHVlKiB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgUnVudGltZUNhc3RIZWxwZXI6OmFz
c2VydEludCh2YWx1ZSk7Ci0gICAgICAgIH0KLSNlbmRpZiAvLyAhQVNTRVJUX0RJU0FCTEVECiAg
ICAgfTsKIH07CiAKQEAgLTIyNywxNCArMTMyLDYgQEAgc3RydWN0IEFycmF5SXRlbUhlbHBlcjxk
b3VibGU+IHsKICAgICAgICAgewogICAgICAgICAgICAgYXJyYXktPnB1c2hOdW1iZXIodmFsdWUp
OwogICAgICAgICB9Ci0KLSNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+Ci0gICAgICAgIHN0YXRpYyB2b2lkIGFzc2VydENvcnJlY3RWYWx1ZShJbnNwZWN0
b3JWYWx1ZSogdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFJ1bnRpbWVDYXN0SGVscGVy
Ojphc3NlcnRUeXBlPEluc3BlY3RvclZhbHVlOjpUeXBlTnVtYmVyPih2YWx1ZSk7Ci0gICAgICAg
IH0KLSNlbmRpZiAvLyAhQVNTRVJUX0RJU0FCTEVECiAgICAgfTsKIH07CiAKQEAgLTI0NSwxNCAr
MTQyLDYgQEAgc3RydWN0IEFycmF5SXRlbUhlbHBlcjxib29sPiB7CiAgICAgICAgIHsKICAgICAg
ICAgICAgIGFycmF5LT5wdXNoQm9vbGVhbih2YWx1ZSk7CiAgICAgICAgIH0KLQotI2lmICFBU1NF
UlRfRElTQUJMRUQKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICAgICAgc3RhdGlj
IHZvaWQgYXNzZXJ0Q29ycmVjdFZhbHVlKEluc3BlY3RvclZhbHVlKiB2YWx1ZSkKLSAgICAgICAg
ewotICAgICAgICAgICAgUnVudGltZUNhc3RIZWxwZXI6OmFzc2VydFR5cGU8SW5zcGVjdG9yVmFs
dWU6OlR5cGVCb29sZWFuPih2YWx1ZSk7Ci0gICAgICAgIH0KLSNlbmRpZiAvLyAhQVNTRVJUX0RJ
U0FCTEVECiAgICAgfTsKIH07CiAKQEAgLTI2MywxNCArMTUyLDYgQEAgc3RydWN0IEFycmF5SXRl
bUhlbHBlcjxJbnNwZWN0b3JWYWx1ZT4gewogICAgICAgICB7CiAgICAgICAgICAgICBhcnJheS0+
cHVzaFZhbHVlKHZhbHVlKTsKICAgICAgICAgfQotCi0jaWYgIUFTU0VSVF9ESVNBQkxFRAotICAg
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgICAgICBzdGF0aWMgdm9pZCBhc3NlcnRDb3Jy
ZWN0VmFsdWUoSW5zcGVjdG9yVmFsdWUqIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBS
dW50aW1lQ2FzdEhlbHBlcjo6YXNzZXJ0QW55KHZhbHVlKTsKLSAgICAgICAgfQotI2VuZGlmIC8v
ICFBU1NFUlRfRElTQUJMRUQKICAgICB9OwogfTsKIApAQCAtMjgxLDE0ICsxNjIsNiBAQCBzdHJ1
Y3QgQXJyYXlJdGVtSGVscGVyPEluc3BlY3Rvck9iamVjdD4gewogICAgICAgICB7CiAgICAgICAg
ICAgICBhcnJheS0+cHVzaFZhbHVlKHZhbHVlKTsKICAgICAgICAgfQotCi0jaWYgIUFTU0VSVF9E
SVNBQkxFRAotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgICAgICBzdGF0aWMgdm9p
ZCBhc3NlcnRDb3JyZWN0VmFsdWUoSW5zcGVjdG9yVmFsdWUqIHZhbHVlKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBSdW50aW1lQ2FzdEhlbHBlcjo6YXNzZXJ0VHlwZTxJbnNwZWN0b3JWYWx1ZTo6
VHlwZU9iamVjdD4odmFsdWUpOwotICAgICAgICB9Ci0jZW5kaWYgLy8gIUFTU0VSVF9ESVNBQkxF
RAogICAgIH07CiB9OwogCkBAIC0yOTksMTQgKzE3Miw2IEBAIHN0cnVjdCBBcnJheUl0ZW1IZWxw
ZXI8SW5zcGVjdG9yQXJyYXk+IHsKICAgICAgICAgewogICAgICAgICAgICAgYXJyYXktPnB1c2hB
cnJheSh2YWx1ZSk7CiAgICAgICAgIH0KLQotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICAgICAgc3RhdGljIHZvaWQgYXNzZXJ0Q29ycmVjdFZh
bHVlKEluc3BlY3RvclZhbHVlKiB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgUnVudGlt
ZUNhc3RIZWxwZXI6OmFzc2VydFR5cGU8SW5zcGVjdG9yVmFsdWU6OlR5cGVBcnJheT4odmFsdWUp
OwotICAgICAgICB9Ci0jZW5kaWYgLy8gIUFTU0VSVF9ESVNBQkxFRAogICAgIH07CiB9OwogCkBA
IC0zMTcsMTkgKzE4Miw5MiBAQCBzdHJ1Y3QgQXJyYXlJdGVtSGVscGVyPFR5cGVCdWlsZGVyOjpB
cnJheTxUPj4gewogICAgICAgICB7CiAgICAgICAgICAgICBhcnJheS0+cHVzaFZhbHVlKHZhbHVl
KTsKICAgICAgICAgfQorICAgIH07Cit9OworCisvLyBIZWxwZXIgbWV0aG9kcyBmb3IgVHlwZUJ1
aWxkZXIgYW5kIG90aGVyIEluc3BlY3RvciB0eXBlcyBhcmUgcHJvdmlkZWQgYnkKKy8vIHNwZWNp
YWxpemF0aW9ucyBvZiBCaW5kaW5nVHJhaXRzPFQ+LiBTb21lIGFyZSBnZW5lcmF0ZWQgZm9yIHBy
b3RvY29sIHR5cGVzLgogCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3RydWN0IEJpbmRpbmdUcmFp
dHMgeworICAgIHR5cGVkZWYgVCBCaW5kaW5nVHlwZTsKKworICAgIHN0YXRpYyBJbnNwZWN0b3JW
YWx1ZTo6VHlwZSB0eXBlVGFnKCk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8VD4gcnVudGltZUNh
c3QoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+KTsKICNpZiAhQVNTRVJUX0RJU0FCTEVECi0g
ICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFM+Ci0gICAgICAgIHN0YXRpYyB2b2lkIGFzc2VydENv
cnJlY3RWYWx1ZShJbnNwZWN0b3JWYWx1ZSogdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IFM6OmFzc2VydENvcnJlY3RWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIH0KKyAgICBzdGF0aWMgdm9p
ZCBhc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShJbnNwZWN0b3JWYWx1ZSopOworI2VuZGlmIC8v
ICFBU1NFUlRfRElTQUJMRUQKK307CisKK3RlbXBsYXRlPEluc3BlY3RvclZhbHVlOjpUeXBlIFRZ
UEU+CitzdHJ1Y3QgUHJpbWl0aXZlQmluZGluZ1RyYWl0cyB7CisjaWYgIUFTU0VSVF9ESVNBQkxF
RAorICAgIHN0YXRpYyB2b2lkIGFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKEluc3BlY3RvclZh
bHVlKiB2YWx1ZSkKKyAgICB7CisgICAgICAgIEFTU0VSVCh2YWx1ZS0+dHlwZSgpID09IFRZUEUp
OworICAgIH0KKyNlbmRpZiAvLyAhQVNTRVJUX0RJU0FCTEVECit9OworCit0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgorc3RydWN0IEJpbmRpbmdUcmFpdHM8VHlwZUJ1aWxkZXI6OkFycmF5PFQ+PiB7Cisg
ICAgc3RhdGljIFBhc3NSZWZQdHI8QXJyYXk8VD4+IHJ1bnRpbWVDYXN0KFBhc3NSZWZQdHI8SW5z
cGVjdG9yVmFsdWU+IHZhbHVlKQorICAgIHsKKyAgICAgICAgUmVmUHRyPEluc3BlY3RvckFycmF5
PiBhcnJheTsKKyAgICAgICAgYm9vbCBjYXN0UmVzID0gdmFsdWUtPmFzQXJyYXkoJmFycmF5KTsK
KyAgICAgICAgQVNTRVJUX1VOVVNFRChjYXN0UmVzLCBjYXN0UmVzKTsKKyNpZiAhQVNTRVJUX0RJ
U0FCTEVECisgICAgICAgIGFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKGFycmF5LmdldCgpKTsK
KyNlbmRpZiAvLyAhQVNTRVJUX0RJU0FCTEVECisgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVv
ZihBcnJheTxUPikgPT0gc2l6ZW9mKEluc3BlY3RvckFycmF5KSwgdHlwZV9jYXN0X3Byb2JsZW0p
OworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QXJyYXk8VD4qPihzdGF0aWNfY2FzdDxJbnNw
ZWN0b3JBcnJheUJhc2UqPihhcnJheS5nZXQoKSkpOworICAgIH0KKworI2lmICFBU1NFUlRfRElT
QUJMRUQKKyAgICBzdGF0aWMgdm9pZCBhc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShJbnNwZWN0
b3JWYWx1ZSogdmFsdWUpCisgICAgeworICAgICAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFy
cmF5OworICAgICAgICBib29sIGNhc3RSZXMgPSB2YWx1ZS0+YXNBcnJheSgmYXJyYXkpOworICAg
ICAgICBBU1NFUlRfVU5VU0VEKGNhc3RSZXMsIGNhc3RSZXMpOworICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgYXJyYXktPmxlbmd0aCgpOyBpKyspCisgICAgICAgICAgICBCaW5kaW5n
VHJhaXRzPFQ+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShhcnJheS0+Z2V0KGkpLmdldCgp
KTsKKyAgICB9CisjZW5kaWYgLy8gIUFTU0VSVF9ESVNBQkxFRAorfTsKKwordGVtcGxhdGU8Pgor
c3RydWN0IEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yVmFsdWU+IHsKKyNpZiAhQVNTRVJUX0RJU0FC
TEVECisgICAgc3RhdGljIHZvaWQgYXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSW5zcGVjdG9y
VmFsdWUqKQorICAgIHsKKyAgICB9CisjZW5kaWYgLy8gIUFTU0VSVF9ESVNBQkxFRAorfTsKKwor
dGVtcGxhdGU8PiBzdHJ1Y3QgQmluZGluZ1RyYWl0czxJbnNwZWN0b3JBcnJheT4gOiBwdWJsaWMg
UHJpbWl0aXZlQmluZGluZ1RyYWl0czxJbnNwZWN0b3JWYWx1ZTo6VHlwZTo6QXJyYXk+IHsgfTsK
K3RlbXBsYXRlPD4gc3RydWN0IEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yT2JqZWN0PiA6IHB1Ymxp
YyBQcmltaXRpdmVCaW5kaW5nVHJhaXRzPEluc3BlY3RvclZhbHVlOjpUeXBlOjpPYmplY3Q+IHsg
fTsKK3RlbXBsYXRlPD4gc3RydWN0IEJpbmRpbmdUcmFpdHM8U3RyaW5nPiA6IHB1YmxpYyBQcmlt
aXRpdmVCaW5kaW5nVHJhaXRzPEluc3BlY3RvclZhbHVlOjpUeXBlOjpTdHJpbmc+IHsgfTsKK3Rl
bXBsYXRlPD4gc3RydWN0IEJpbmRpbmdUcmFpdHM8Ym9vbD4gOiBwdWJsaWMgUHJpbWl0aXZlQmlu
ZGluZ1RyYWl0czxJbnNwZWN0b3JWYWx1ZTo6VHlwZTo6Qm9vbGVhbj4geyB9OwordGVtcGxhdGU8
PiBzdHJ1Y3QgQmluZGluZ1RyYWl0czxkb3VibGU+IDogcHVibGljIFByaW1pdGl2ZUJpbmRpbmdU
cmFpdHM8SW5zcGVjdG9yVmFsdWU6OlR5cGU6Ok51bWJlcj4geyB9OworCisvLyBGSVhNRTogQWRk
IGFuIEluc3BlY3Rvcjo6VHlwZSB0YWcgZm9yIGludCBzbyB3ZSBjYW4gcmVtb3ZlIHRoaXMgc3Bl
Y2lhbCBjYXNlLgordGVtcGxhdGU8Pgorc3RydWN0IEJpbmRpbmdUcmFpdHM8aW50PiB7CisjaWYg
IUFTU0VSVF9ESVNBQkxFRAorICAgIHN0YXRpYyB2b2lkIGFzc2VydFZhbHVlSGFzRXhwZWN0ZWRU
eXBlKEluc3BlY3RvclZhbHVlKiB2YWx1ZSkKKyAgICB7CisgICAgICAgIGRvdWJsZSB2OworICAg
ICAgICBib29sIGNhc3RSZXMgPSB2YWx1ZS0+YXNOdW1iZXIoJnYpOworICAgICAgICBBU1NFUlRf
VU5VU0VEKGNhc3RSZXMsIGNhc3RSZXMpOworICAgICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8ZG91
YmxlPihzdGF0aWNfY2FzdDxpbnQ+KHYpKSA9PSB2KTsKKyAgICB9CiAjZW5kaWYgLy8gIUFTU0VS
VF9ESVNBQkxFRAotICAgIH07CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBUeXBlQnVpbGRlcgogCit1
c2luZyBUeXBlQnVpbGRlcjo6QmluZGluZ1RyYWl0czsKKwogfSAvLyBuYW1lc3BhY2UgSW5zcGVj
dG9yCiAKICNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuY3BwCmluZGV4IDE5MmZiNmM5ZDkw
OTI0ZTYxN2M1ZDMyYzVkMmUzYmI5ZmNjZDNlMWEuLmUyZDAzNWRjMDlhMWJiZDg1ZjE3YWEwMTA4
ZTIwMTg2MTVmOWEyZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yVmFsdWVzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL0luc3BlY3RvclZhbHVlcy5jcHAKQEAgLTU3OSwxMyArNTc5LDEzIEBAIFN0cmluZyBJbnNw
ZWN0b3JWYWx1ZTo6dG9KU09OU3RyaW5nKCkgY29uc3QKIAogdm9pZCBJbnNwZWN0b3JWYWx1ZTo6
d3JpdGVKU09OKFN0cmluZ0J1aWxkZXIqIG91dHB1dCkgY29uc3QKIHsKLSAgICBBU1NFUlQobV90
eXBlID09IFR5cGVOdWxsKTsKKyAgICBBU1NFUlQobV90eXBlID09IFR5cGU6Ok51bGwpOwogICAg
IG91dHB1dC0+YXBwZW5kKG51bGxTdHJpbmcsIDQpOwogfQogCiBib29sIEluc3BlY3RvckJhc2lj
VmFsdWU6OmFzQm9vbGVhbihib29sKiBvdXRwdXQpIGNvbnN0CiB7Ci0gICAgaWYgKHR5cGUoKSAh
PSBUeXBlQm9vbGVhbikKKyAgICBpZiAodHlwZSgpICE9IFR5cGU6OkJvb2xlYW4pCiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAqb3V0cHV0ID0gbV9ib29sVmFsdWU7CiAgICAgcmV0dXJuIHRy
dWU7CkBAIC01OTMsNyArNTkzLDcgQEAgYm9vbCBJbnNwZWN0b3JCYXNpY1ZhbHVlOjphc0Jvb2xl
YW4oYm9vbCogb3V0cHV0KSBjb25zdAogCiBib29sIEluc3BlY3RvckJhc2ljVmFsdWU6OmFzTnVt
YmVyKGRvdWJsZSogb3V0cHV0KSBjb25zdAogewotICAgIGlmICh0eXBlKCkgIT0gVHlwZU51bWJl
cikKKyAgICBpZiAodHlwZSgpICE9IFR5cGU6Ok51bWJlcikKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICpvdXRwdXQgPSBtX2RvdWJsZVZhbHVlOwogICAgIHJldHVybiB0cnVlOwpAQCAtNjAx
LDcgKzYwMSw3IEBAIGJvb2wgSW5zcGVjdG9yQmFzaWNWYWx1ZTo6YXNOdW1iZXIoZG91YmxlKiBv
dXRwdXQpIGNvbnN0CiAKIGJvb2wgSW5zcGVjdG9yQmFzaWNWYWx1ZTo6YXNOdW1iZXIoZmxvYXQq
IG91dHB1dCkgY29uc3QKIHsKLSAgICBpZiAodHlwZSgpICE9IFR5cGVOdW1iZXIpCisgICAgaWYg
KHR5cGUoKSAhPSBUeXBlOjpOdW1iZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAqb3V0
cHV0ID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fZG91YmxlVmFsdWUpOwogICAgIHJldHVybiB0cnVl
OwpAQCAtNjA5LDcgKzYwOSw3IEBAIGJvb2wgSW5zcGVjdG9yQmFzaWNWYWx1ZTo6YXNOdW1iZXIo
ZmxvYXQqIG91dHB1dCkgY29uc3QKIAogYm9vbCBJbnNwZWN0b3JCYXNpY1ZhbHVlOjphc051bWJl
cihpbnQqIG91dHB1dCkgY29uc3QKIHsKLSAgICBpZiAodHlwZSgpICE9IFR5cGVOdW1iZXIpCisg
ICAgaWYgKHR5cGUoKSAhPSBUeXBlOjpOdW1iZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAqb3V0cHV0ID0gc3RhdGljX2Nhc3Q8aW50PihtX2RvdWJsZVZhbHVlKTsKICAgICByZXR1cm4g
dHJ1ZTsKQEAgLTYxNyw3ICs2MTcsNyBAQCBib29sIEluc3BlY3RvckJhc2ljVmFsdWU6OmFzTnVt
YmVyKGludCogb3V0cHV0KSBjb25zdAogCiBib29sIEluc3BlY3RvckJhc2ljVmFsdWU6OmFzTnVt
YmVyKHVuc2lnbmVkKiBvdXRwdXQpIGNvbnN0CiB7Ci0gICAgaWYgKHR5cGUoKSAhPSBUeXBlTnVt
YmVyKQorICAgIGlmICh0eXBlKCkgIT0gVHlwZTo6TnVtYmVyKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgKm91dHB1dCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2RvdWJsZVZhbHVlKTsK
ICAgICByZXR1cm4gdHJ1ZTsKQEAgLTYyNSw3ICs2MjUsNyBAQCBib29sIEluc3BlY3RvckJhc2lj
VmFsdWU6OmFzTnVtYmVyKHVuc2lnbmVkKiBvdXRwdXQpIGNvbnN0CiAKIGJvb2wgSW5zcGVjdG9y
QmFzaWNWYWx1ZTo6YXNOdW1iZXIobG9uZyogb3V0cHV0KSBjb25zdAogewotICAgIGlmICh0eXBl
KCkgIT0gVHlwZU51bWJlcikKKyAgICBpZiAodHlwZSgpICE9IFR5cGU6Ok51bWJlcikKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICpvdXRwdXQgPSBzdGF0aWNfY2FzdDxsb25nPihtX2RvdWJs
ZVZhbHVlKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTYzMyw3ICs2MzMsNyBAQCBib29sIEluc3Bl
Y3RvckJhc2ljVmFsdWU6OmFzTnVtYmVyKGxvbmcqIG91dHB1dCkgY29uc3QKIAogYm9vbCBJbnNw
ZWN0b3JCYXNpY1ZhbHVlOjphc051bWJlcihsb25nIGxvbmcqIG91dHB1dCkgY29uc3QKIHsKLSAg
ICBpZiAodHlwZSgpICE9IFR5cGVOdW1iZXIpCisgICAgaWYgKHR5cGUoKSAhPSBUeXBlOjpOdW1i
ZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAqb3V0cHV0ID0gc3RhdGljX2Nhc3Q8bG9u
ZyBsb25nPihtX2RvdWJsZVZhbHVlKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTY0MSw3ICs2NDEs
NyBAQCBib29sIEluc3BlY3RvckJhc2ljVmFsdWU6OmFzTnVtYmVyKGxvbmcgbG9uZyogb3V0cHV0
KSBjb25zdAogCiBib29sIEluc3BlY3RvckJhc2ljVmFsdWU6OmFzTnVtYmVyKHVuc2lnbmVkIGxv
bmcqIG91dHB1dCkgY29uc3QKIHsKLSAgICBpZiAodHlwZSgpICE9IFR5cGVOdW1iZXIpCisgICAg
aWYgKHR5cGUoKSAhPSBUeXBlOjpOdW1iZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAq
b3V0cHV0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4obV9kb3VibGVWYWx1ZSk7CiAgICAg
cmV0dXJuIHRydWU7CkBAIC02NDksNyArNjQ5LDcgQEAgYm9vbCBJbnNwZWN0b3JCYXNpY1ZhbHVl
Ojphc051bWJlcih1bnNpZ25lZCBsb25nKiBvdXRwdXQpIGNvbnN0CiAKIGJvb2wgSW5zcGVjdG9y
QmFzaWNWYWx1ZTo6YXNOdW1iZXIodW5zaWduZWQgbG9uZyBsb25nKiBvdXRwdXQpIGNvbnN0CiB7
Ci0gICAgaWYgKHR5cGUoKSAhPSBUeXBlTnVtYmVyKQorICAgIGlmICh0eXBlKCkgIT0gVHlwZTo6
TnVtYmVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgKm91dHB1dCA9IHN0YXRpY19jYXN0
PHVuc2lnbmVkIGxvbmcgbG9uZz4obV9kb3VibGVWYWx1ZSk7CiAgICAgcmV0dXJuIHRydWU7CkBA
IC02NTcsMTMgKzY1NywxMyBAQCBib29sIEluc3BlY3RvckJhc2ljVmFsdWU6OmFzTnVtYmVyKHVu
c2lnbmVkIGxvbmcgbG9uZyogb3V0cHV0KSBjb25zdAogCiB2b2lkIEluc3BlY3RvckJhc2ljVmFs
dWU6OndyaXRlSlNPTihTdHJpbmdCdWlsZGVyKiBvdXRwdXQpIGNvbnN0CiB7Ci0gICAgQVNTRVJU
KHR5cGUoKSA9PSBUeXBlQm9vbGVhbiB8fCB0eXBlKCkgPT0gVHlwZU51bWJlcik7Ci0gICAgaWYg
KHR5cGUoKSA9PSBUeXBlQm9vbGVhbikgeworICAgIEFTU0VSVCh0eXBlKCkgPT0gVHlwZTo6Qm9v
bGVhbiB8fCB0eXBlKCkgPT0gVHlwZTo6TnVtYmVyKTsKKyAgICBpZiAodHlwZSgpID09IFR5cGU6
OkJvb2xlYW4pIHsKICAgICAgICAgaWYgKG1fYm9vbFZhbHVlKQogICAgICAgICAgICAgb3V0cHV0
LT5hcHBlbmQodHJ1ZVN0cmluZywgNCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG91dHB1
dC0+YXBwZW5kKGZhbHNlU3RyaW5nLCA1KTsKLSAgICB9IGVsc2UgaWYgKHR5cGUoKSA9PSBUeXBl
TnVtYmVyKSB7CisgICAgfSBlbHNlIGlmICh0eXBlKCkgPT0gVHlwZTo6TnVtYmVyKSB7CiAgICAg
ICAgIE51bWJlclRvTFN0cmluZ0J1ZmZlciBidWZmZXI7CiAgICAgICAgIGlmICghc3RkOjppc2Zp
bml0ZShtX2RvdWJsZVZhbHVlKSkgewogICAgICAgICAgICAgb3V0cHV0LT5hcHBlbmQobnVsbFN0
cmluZywgNCk7CkBAIC02OTMsNyArNjkzLDcgQEAgYm9vbCBJbnNwZWN0b3JTdHJpbmc6OmFzU3Ry
aW5nKFN0cmluZyogb3V0cHV0KSBjb25zdAogCiB2b2lkIEluc3BlY3RvclN0cmluZzo6d3JpdGVK
U09OKFN0cmluZ0J1aWxkZXIqIG91dHB1dCkgY29uc3QKIHsKLSAgICBBU1NFUlQodHlwZSgpID09
IFR5cGVTdHJpbmcpOworICAgIEFTU0VSVCh0eXBlKCkgPT0gVHlwZTo6U3RyaW5nKTsKICAgICBk
b3VibGVRdW90ZVN0cmluZyhtX3N0cmluZ1ZhbHVlLCBvdXRwdXQpOwogfQogCkBAIC03ODYsNyAr
Nzg2LDcgQEAgdm9pZCBJbnNwZWN0b3JPYmplY3RCYXNlOjp3cml0ZUpTT04oU3RyaW5nQnVpbGRl
ciogb3V0cHV0KSBjb25zdAogfQogCiBJbnNwZWN0b3JPYmplY3RCYXNlOjpJbnNwZWN0b3JPYmpl
Y3RCYXNlKCkKLSAgICA6IEluc3BlY3RvclZhbHVlKFR5cGVPYmplY3QpCisgICAgOiBJbnNwZWN0
b3JWYWx1ZShUeXBlOjpPYmplY3QpCiAgICAgLCBtX2RhdGEoKQogICAgICwgbV9vcmRlcigpCiB7
CkBAIC04MjEsNyArODIxLDcgQEAgdm9pZCBJbnNwZWN0b3JBcnJheUJhc2U6OndyaXRlSlNPTihT
dHJpbmdCdWlsZGVyKiBvdXRwdXQpIGNvbnN0CiB9CiAKIEluc3BlY3RvckFycmF5QmFzZTo6SW5z
cGVjdG9yQXJyYXlCYXNlKCkKLSAgICA6IEluc3BlY3RvclZhbHVlKFR5cGVBcnJheSkKKyAgICA6
IEluc3BlY3RvclZhbHVlKFR5cGU6OkFycmF5KQogICAgICwgbV9kYXRhKCkKIHsKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oCmluZGV4
IDNiODYxNjY0ZGEzMzc5ZGViNTY4OWJjMDAxMzRkZTI2ZWJhNjczZGEuLjk3Y2I4OGJmMWNjMzll
MTZjYzc1OTE5ZTNhOGYyZTgwYjU5NzM2ZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaApAQCAtNDEsMjkgKzQxLDMyIEBACiBuYW1l
c3BhY2UgSW5zcGVjdG9yIHsKIAogY2xhc3MgSW5zcGVjdG9yQXJyYXk7CitjbGFzcyBJbnNwZWN0
b3JBcnJheUJhc2U7CiBjbGFzcyBJbnNwZWN0b3JPYmplY3Q7CitjbGFzcyBJbnNwZWN0b3JPYmpl
Y3RCYXNlOwogCiBjbGFzcyBKU19FWFBPUlRfUFJJVkFURSBJbnNwZWN0b3JWYWx1ZSA6IHB1Ymxp
YyBSZWZDb3VudGVkPEluc3BlY3RvclZhbHVlPiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0
IGludCBtYXhEZXB0aCA9IDEwMDA7CiAKLSAgICBJbnNwZWN0b3JWYWx1ZSgpIDogbV90eXBlKFR5
cGVOdWxsKSB7IH0KKyAgICBJbnNwZWN0b3JWYWx1ZSgpCisgICAgICAgIDogbV90eXBlKFR5cGU6
Ok51bGwpIHsgfQogICAgIHZpcnR1YWwgfkluc3BlY3RvclZhbHVlKCkgeyB9CiAKICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gbnVsbCgpOwogCi0gICAgdHlwZWRlZiBlbnVt
IHsKLSAgICAgICAgVHlwZU51bGwgPSAwLAotICAgICAgICBUeXBlQm9vbGVhbiwKLSAgICAgICAg
VHlwZU51bWJlciwKLSAgICAgICAgVHlwZVN0cmluZywKLSAgICAgICAgVHlwZU9iamVjdCwKLSAg
ICAgICAgVHlwZUFycmF5Ci0gICAgfSBUeXBlOworICAgIGVudW0gY2xhc3MgVHlwZSB7CisgICAg
ICAgIE51bGwgPSAwLAorICAgICAgICBCb29sZWFuLAorICAgICAgICBOdW1iZXIsCisgICAgICAg
IFN0cmluZywKKyAgICAgICAgT2JqZWN0LAorICAgICAgICBBcnJheQorICAgIH07CiAKICAgICBU
eXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KIAotICAgIGJvb2wgaXNOdWxsKCkg
Y29uc3QgeyByZXR1cm4gbV90eXBlID09IFR5cGVOdWxsOyB9CisgICAgYm9vbCBpc051bGwoKSBj
b25zdCB7IHJldHVybiBtX3R5cGUgPT0gVHlwZTo6TnVsbDsgfQogCiAgICAgdmlydHVhbCBib29s
IGFzQm9vbGVhbihib29sKiBvdXRwdXQpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBhc051bWJl
cihkb3VibGUqIG91dHB1dCkgY29uc3Q7CkBAIC0xMTMsOSArMTE2LDE3IEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIHZvaWQgd3JpdGVKU09OKFN0cmluZ0J1aWxkZXIqIG91dHB1dCkgY29uc3Qgb3Zl
cnJpZGU7CiAKIHByaXZhdGU6Ci0gICAgZXhwbGljaXQgSW5zcGVjdG9yQmFzaWNWYWx1ZShib29s
IHZhbHVlKSA6IEluc3BlY3RvclZhbHVlKFR5cGVCb29sZWFuKSwgbV9ib29sVmFsdWUodmFsdWUp
IHsgfQotICAgIGV4cGxpY2l0IEluc3BlY3RvckJhc2ljVmFsdWUoaW50IHZhbHVlKSA6IEluc3Bl
Y3RvclZhbHVlKFR5cGVOdW1iZXIpLCBtX2RvdWJsZVZhbHVlKChkb3VibGUpdmFsdWUpIHsgfQot
ICAgIGV4cGxpY2l0IEluc3BlY3RvckJhc2ljVmFsdWUoZG91YmxlIHZhbHVlKSA6IEluc3BlY3Rv
clZhbHVlKFR5cGVOdW1iZXIpLCBtX2RvdWJsZVZhbHVlKHZhbHVlKSB7IH0KKyAgICBleHBsaWNp
dCBJbnNwZWN0b3JCYXNpY1ZhbHVlKGJvb2wgdmFsdWUpCisgICAgICAgIDogSW5zcGVjdG9yVmFs
dWUoVHlwZTo6Qm9vbGVhbikKKyAgICAgICAgLCBtX2Jvb2xWYWx1ZSh2YWx1ZSkgeyB9CisKKyAg
ICBleHBsaWNpdCBJbnNwZWN0b3JCYXNpY1ZhbHVlKGludCB2YWx1ZSkKKyAgICAgICAgOiBJbnNw
ZWN0b3JWYWx1ZShUeXBlOjpOdW1iZXIpCisgICAgICAgICwgbV9kb3VibGVWYWx1ZShzdGF0aWNf
Y2FzdDxkb3VibGU+KHZhbHVlKSkgeyB9CisKKyAgICBleHBsaWNpdCBJbnNwZWN0b3JCYXNpY1Zh
bHVlKGRvdWJsZSB2YWx1ZSkKKyAgICAgICAgOiBJbnNwZWN0b3JWYWx1ZShUeXBlOjpOdW1iZXIp
CisgICAgICAgICwgbV9kb3VibGVWYWx1ZSh2YWx1ZSkgeyB9CiAKICAgICB1bmlvbiB7CiAgICAg
ICAgIGJvb2wgbV9ib29sVmFsdWU7CkBAIC0xMzMsOCArMTQ0LDEzIEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIHZvaWQgd3JpdGVKU09OKFN0cmluZ0J1aWxkZXIqIG91dHB1dCkgY29uc3Qgb3ZlcnJp
ZGU7CiAKIHByaXZhdGU6Ci0gICAgZXhwbGljaXQgSW5zcGVjdG9yU3RyaW5nKGNvbnN0IFN0cmlu
ZyYgdmFsdWUpIDogSW5zcGVjdG9yVmFsdWUoVHlwZVN0cmluZyksIG1fc3RyaW5nVmFsdWUodmFs
dWUpIHsgfQotICAgIGV4cGxpY2l0IEluc3BlY3RvclN0cmluZyhjb25zdCBjaGFyKiB2YWx1ZSkg
OiBJbnNwZWN0b3JWYWx1ZShUeXBlU3RyaW5nKSwgbV9zdHJpbmdWYWx1ZSh2YWx1ZSkgeyB9Cisg
ICAgZXhwbGljaXQgSW5zcGVjdG9yU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgICAg
IDogSW5zcGVjdG9yVmFsdWUoVHlwZTo6U3RyaW5nKQorICAgICAgICAsIG1fc3RyaW5nVmFsdWUo
dmFsdWUpIHsgfQorCisgICAgZXhwbGljaXQgSW5zcGVjdG9yU3RyaW5nKGNvbnN0IGNoYXIqIHZh
bHVlKQorICAgICAgICA6IEluc3BlY3RvclZhbHVlKFR5cGU6OlN0cmluZykKKyAgICAgICAgLCBt
X3N0cmluZ1ZhbHVlKHZhbHVlKSB7IH0KIAogICAgIFN0cmluZyBtX3N0cmluZ1ZhbHVlOwogfTsK
QEAgLTE1OSw4ICsxNzUsOCBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBzZXROdW1iZXIoY29uc3Qg
U3RyaW5nJiBuYW1lLCBkb3VibGUpOwogICAgIHZvaWQgc2V0U3RyaW5nKGNvbnN0IFN0cmluZyYg
bmFtZSwgY29uc3QgU3RyaW5nJik7CiAgICAgdm9pZCBzZXRWYWx1ZShjb25zdCBTdHJpbmcmIG5h
bWUsIFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KTsKLSAgICB2b2lkIHNldE9iamVjdChjb25z
dCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0Pik7Ci0gICAgdm9pZCBz
ZXRBcnJheShjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+KTsK
KyAgICB2b2lkIHNldE9iamVjdChjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0QmFzZT4pOworICAgIHZvaWQgc2V0QXJyYXkoY29uc3QgU3RyaW5nJiBuYW1lLCBQ
YXNzUmVmUHRyPEluc3BlY3RvckFycmF5QmFzZT4pOwogCiAgICAgaXRlcmF0b3IgZmluZChjb25z
dCBTdHJpbmcmIG5hbWUpOwogICAgIGNvbnN0X2l0ZXJhdG9yIGZpbmQoY29uc3QgU3RyaW5nJiBu
YW1lKSBjb25zdDsKQEAgLTMxNywxNCArMzMzLDE0IEBAIGlubGluZSB2b2lkIEluc3BlY3Rvck9i
amVjdEJhc2U6OnNldFZhbHVlKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJbnNwZWN0
CiAgICAgICAgIG1fb3JkZXIuYXBwZW5kKG5hbWUpOwogfQogCi1pbmxpbmUgdm9pZCBJbnNwZWN0
b3JPYmplY3RCYXNlOjpzZXRPYmplY3QoY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gdmFsdWUpCitpbmxpbmUgdm9pZCBJbnNwZWN0b3JPYmplY3RCYXNlOjpz
ZXRPYmplY3QoY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdEJh
c2U+IHZhbHVlKQogewogICAgIEFTU0VSVCh2YWx1ZSk7CiAgICAgaWYgKG1fZGF0YS5zZXQobmFt
ZSwgdmFsdWUpLmlzTmV3RW50cnkpCiAgICAgICAgIG1fb3JkZXIuYXBwZW5kKG5hbWUpOwogfQog
Ci1pbmxpbmUgdm9pZCBJbnNwZWN0b3JPYmplY3RCYXNlOjpzZXRBcnJheShjb25zdCBTdHJpbmcm
IG5hbWUsIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHZhbHVlKQoraW5saW5lIHZvaWQgSW5z
cGVjdG9yT2JqZWN0QmFzZTo6c2V0QXJyYXkoY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRy
PEluc3BlY3RvckFycmF5QmFzZT4gdmFsdWUpCiB7CiAgICAgQVNTRVJUKHZhbHVlKTsKICAgICBp
ZiAobV9kYXRhLnNldChuYW1lLCB2YWx1ZSkuaXNOZXdFbnRyeSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRGVi
dWdnZXJBZ2VudC5jcHAKaW5kZXggNTA5NmE2Yzk5ZDJhOTEyMDQzOGM2OGZkYzg4NzU4ZjZjYmZh
ZWI5Zi4uNWUxYjY0NjQ2M2RmNTUxZTgyZDQ1OTU3YjVhZjdjOTYwZmVjMjVlYyAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRGVidWdn
ZXJBZ2VudC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHAKQEAgLTQyOSw3ICs0MjksNyBAQCB2b2lkIEluc3Bl
Y3RvckRlYnVnZ2VyQWdlbnQ6OmdldEZ1bmN0aW9uRGV0YWlscyhFcnJvclN0cmluZyogZXJyb3JT
dHJpbmcsIGNvbnN0CiAgICAgaW5qZWN0ZWRTY3JpcHQuZ2V0RnVuY3Rpb25EZXRhaWxzKGVycm9y
U3RyaW5nLCBmdW5jdGlvbklkLCAmZGV0YWlscyk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdn
ZXJBZ2VudDo6c2NoZWR1bGVQYXVzZU9uTmV4dFN0YXRlbWVudChJbnNwZWN0b3JEZWJ1Z2dlckZy
b250ZW5kRGlzcGF0Y2hlcjo6UmVhc29uOjpFbnVtIGJyZWFrUmVhc29uLCBQYXNzUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gZGF0YSkKK3ZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2NoZWR1
bGVQYXVzZU9uTmV4dFN0YXRlbWVudChJbnNwZWN0b3JEZWJ1Z2dlckZyb250ZW5kRGlzcGF0Y2hl
cjo6UmVhc29uIGJyZWFrUmVhc29uLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZGF0YSkK
IHsKICAgICBpZiAobV9qYXZhU2NyaXB0UGF1c2VTY2hlZHVsZWQpCiAgICAgICAgIHJldHVybjsK
QEAgLTY4MCw3ICs2ODAsNyBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpZENvbnRp
bnVlKCkKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+cmVzdW1lZCgpOwogfQogCi12b2lkIElu
c3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmJyZWFrUHJvZ3JhbShJbnNwZWN0b3JEZWJ1Z2dlckZyb250
ZW5kRGlzcGF0Y2hlcjo6UmVhc29uOjpFbnVtIGJyZWFrUmVhc29uLCBQYXNzUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gZGF0YSkKK3ZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6YnJlYWtQcm9n
cmFtKEluc3BlY3RvckRlYnVnZ2VyRnJvbnRlbmREaXNwYXRjaGVyOjpSZWFzb24gYnJlYWtSZWFz
b24sIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBkYXRhKQogewogICAgIG1fYnJlYWtSZWFz
b24gPSBicmVha1JlYXNvbjsKICAgICBtX2JyZWFrQXV4RGF0YSA9IGRhdGE7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JEZWJ1Z2dl
ckFnZW50LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0
b3JEZWJ1Z2dlckFnZW50LmgKaW5kZXggZWIyMjcwYTljZTI0MjgxM2Y5ZDRlZTU1OTAwZmY4M2E5
OTZmNDA2Yi4uODQ3ZTc4YjYwZjVkY2NmOTY5ZmIzZDAxMTNlZDI1MjNlYTAyN2QzZSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRGVi
dWdnZXJBZ2VudC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRz
L0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuaApAQCAtOTEsOSArOTEsOSBAQCBwdWJsaWM6CiAgICAg
CiAgICAgdm9pZCBoYW5kbGVDb25zb2xlQXNzZXJ0KCk7CiAKLSAgICB2b2lkIHNjaGVkdWxlUGF1
c2VPbk5leHRTdGF0ZW1lbnQoSW5zcGVjdG9yRGVidWdnZXJGcm9udGVuZERpc3BhdGNoZXI6OlJl
YXNvbjo6RW51bSBicmVha1JlYXNvbiwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGRhdGEp
OworICAgIHZvaWQgc2NoZWR1bGVQYXVzZU9uTmV4dFN0YXRlbWVudChJbnNwZWN0b3JEZWJ1Z2dl
ckZyb250ZW5kRGlzcGF0Y2hlcjo6UmVhc29uIGJyZWFrUmVhc29uLCBQYXNzUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gZGF0YSk7CiAgICAgdm9pZCBjYW5jZWxQYXVzZU9uTmV4dFN0YXRlbWVudCgp
OwotICAgIHZvaWQgYnJlYWtQcm9ncmFtKEluc3BlY3RvckRlYnVnZ2VyRnJvbnRlbmREaXNwYXRj
aGVyOjpSZWFzb246OkVudW0gYnJlYWtSZWFzb24sIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBkYXRhKTsKKyAgICB2b2lkIGJyZWFrUHJvZ3JhbShJbnNwZWN0b3JEZWJ1Z2dlckZyb250ZW5k
RGlzcGF0Y2hlcjo6UmVhc29uIGJyZWFrUmVhc29uLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gZGF0YSk7CiAgICAgdm9pZCBzY3JpcHRFeGVjdXRpb25CbG9ja2VkQnlDU1AoY29uc3QgU3Ry
aW5nJiBkaXJlY3RpdmVUZXh0KTsKIAogICAgIGNsYXNzIExpc3RlbmVyIHsKQEAgLTE1OSw3ICsx
NTksNyBAQCBwcml2YXRlOgogICAgIEJyZWFrcG9pbnRJZGVudGlmaWVyVG9EZWJ1Z1NlcnZlckJy
ZWFrcG9pbnRJRHNNYXAgbV9icmVha3BvaW50SWRlbnRpZmllclRvRGVidWdTZXJ2ZXJCcmVha3Bv
aW50SURzOwogICAgIEJyZWFrcG9pbnRJZGVudGlmaWVyVG9CcmVha3BvaW50TWFwIG1famF2YVNj
cmlwdEJyZWFrcG9pbnRzOwogICAgIEpTQzo6QnJlYWtwb2ludElEIG1fY29udGludWVUb0xvY2F0
aW9uQnJlYWtwb2ludElEOwotICAgIEluc3BlY3RvckRlYnVnZ2VyRnJvbnRlbmREaXNwYXRjaGVy
OjpSZWFzb246OkVudW0gbV9icmVha1JlYXNvbjsKKyAgICBJbnNwZWN0b3JEZWJ1Z2dlckZyb250
ZW5kRGlzcGF0Y2hlcjo6UmVhc29uIG1fYnJlYWtSZWFzb247CiAgICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gbV9icmVha0F1eERhdGE7CiAgICAgYm9vbCBtX2VuYWJsZWQ7CiAgICAgYm9vbCBt
X2phdmFTY3JpcHRQYXVzZVNjaGVkdWxlZDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclJ1bnRpbWVBZ2VudC5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JSdW50aW1lQWdlbnQuY3Bw
CmluZGV4IDBiYmI5MGI5MDc2NWU4NDE4ZmI2YTIxZDQyMmMwMGVlMzMzYmRjNWEuLjk0MGI4YmQ1
MDY5YWIwMzdiMDMzOGM2YTFlMzBiZmUxZDBlNDYwNDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclJ1bnRpbWVBZ2VudC5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUnVudGlt
ZUFnZW50LmNwcApAQCAtODUsNyArODUsNyBAQCBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3I6
OlR5cGVCdWlsZGVyOjpSdW50aW1lOjpFcnJvclJhbmdlPiBidWlsZEVycm9yUmFuZ2VPYgogICAg
IHJldHVybiByZXN1bHQucmVsZWFzZSgpOwogfQogCi12b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2Vu
dDo6cGFyc2UoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIEluc3BlY3Rv
cjo6VHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OlN5bnRheEVycm9yVHlwZTo6RW51bSogcmVzdWx0LCBJ
bnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8U3RyaW5nPiogbWVzc2FnZSwgUmVmUHRy
PEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OkVycm9yUmFuZ2U+JiByYW5nZSkKK3Zv
aWQgSW5zcGVjdG9yUnVudGltZUFnZW50OjpwYXJzZShFcnJvclN0cmluZyosIGNvbnN0IFN0cmlu
ZyYgZXhwcmVzc2lvbiwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UnVudGltZTo6U3ludGF4RXJy
b3JUeXBlKiByZXN1bHQsIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6Ok9wdE91dHB1dDxTdHJpbmc+
KiBtZXNzYWdlLCBSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UnVudGltZTo6RXJyb3JS
YW5nZT4mIHJhbmdlKQogewogICAgIFZNJiB2bSA9IGdsb2JhbFZNKCk7CiAgICAgSlNMb2NrSG9s
ZGVyIGxvY2sodm0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9hZ2VudHMvSW5zcGVjdG9yUnVudGltZUFnZW50LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JSdW50aW1lQWdlbnQuaAppbmRleCAxMTU1MGQwNjg0
ZWFlZjc3ODllZGE5ZmQ1YjgwY2Q4MWNiZDY3ZmJiLi41MmU2M2JjODVmODUxZTA2MGE2NDkyZjc0
ZDc1OTMzNzdmNmZlYWE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL2FnZW50cy9JbnNwZWN0b3JSdW50aW1lQWdlbnQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JSdW50aW1lQWdlbnQuaApAQCAtNTksNyAr
NTksNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgZW5hYmxlKEVycm9yU3RyaW5nKikg
b3ZlcnJpZGUgeyBtX2VuYWJsZWQgPSB0cnVlOyB9CiAgICAgdmlydHVhbCB2b2lkIGRpc2FibGUo
RXJyb3JTdHJpbmcqKSBvdmVycmlkZSB7IG1fZW5hYmxlZCA9IGZhbHNlOyB9Ci0gICAgdmlydHVh
bCB2b2lkIHBhcnNlKEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBJbnNw
ZWN0b3I6OlR5cGVCdWlsZGVyOjpSdW50aW1lOjpTeW50YXhFcnJvclR5cGU6OkVudW0qIHJlc3Vs
dCwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6T3B0T3V0cHV0PFN0cmluZz4qIG1lc3NhZ2UsIFJl
ZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpSdW50aW1lOjpFcnJvclJhbmdlPiYpIG92ZXJy
aWRlIGZpbmFsOworICAgIHZpcnR1YWwgdm9pZCBwYXJzZShFcnJvclN0cmluZyosIGNvbnN0IFN0
cmluZyYgZXhwcmVzc2lvbiwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UnVudGltZTo6U3ludGF4
RXJyb3JUeXBlKiByZXN1bHQsIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6Ok9wdE91dHB1dDxTdHJp
bmc+KiBtZXNzYWdlLCBSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UnVudGltZTo6RXJy
b3JSYW5nZT4mKSBvdmVycmlkZSBmaW5hbDsKICAgICB2aXJ0dWFsIHZvaWQgZXZhbHVhdGUoRXJy
b3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIGNvbnN0IFN0cmluZyogb2JqZWN0
R3JvdXAsIGNvbnN0IGJvb2wqIGluY2x1ZGVDb21tYW5kTGluZUFQSSwgY29uc3QgYm9vbCogZG9O
b3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xlLCBjb25zdCBpbnQqIGV4ZWN1dGlvbkNv
bnRleHRJZCwgY29uc3QgYm9vbCogcmV0dXJuQnlWYWx1ZSwgY29uc3QgYm9vbCogZ2VuZXJhdGVQ
cmV2aWV3LCBSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UnVudGltZTo6UmVtb3RlT2Jq
ZWN0PiYgcmVzdWx0LCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8Ym9vbD4qIHdh
c1Rocm93bikgb3ZlcnJpZGUgZmluYWw7CiAgICAgdmlydHVhbCB2b2lkIGNhbGxGdW5jdGlvbk9u
KEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwgY29uc3QgU3RyaW5nJiBleHBy
ZXNzaW9uLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheT4qIG9wdGlvbmFs
QXJndW1lbnRzLCBjb25zdCBib29sKiBkb05vdFBhdXNlT25FeGNlcHRpb25zQW5kTXV0ZUNvbnNv
bGUsIGNvbnN0IGJvb2wqIHJldHVybkJ5VmFsdWUsIGNvbnN0IGJvb2wqIGdlbmVyYXRlUHJldmll
dywgUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4m
IHJlc3VsdCwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6T3B0T3V0cHV0PGJvb2w+KiB3YXNUaHJv
d24pIG92ZXJyaWRlIGZpbmFsOwogICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlT2JqZWN0KEVycm9y
U3RyaW5nKiwgY29uc3QgRXJyb3JTdHJpbmcmIG9iamVjdElkKSBvdmVycmlkZSBmaW5hbDsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9Db2RlR2Vu
ZXJhdG9ySW5zcGVjdG9yLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1Cmlu
ZGV4IDkxZmE4YzljMmQ3Yjk0OTljYjA4ZDVlZmE0MmE5MjI0OTI2NTMxODQuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKKysrIC9kZXYvbnVs
bApAQCAtMSwyNjE0ICswLDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgotIyBDb3B5cmlnaHQg
KGMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgQ29weXJpZ2h0IChj
KSAyMDEyIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBDb3B5cmln
aHQgKGMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQotIyBtZXQ6Ci0jCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMg
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQotIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCi0jIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSMgZGlzdHJpYnV0aW9uLgotIyAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0jIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCi0jIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
Ci0jIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCi0jIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotIyBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAotIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKLSMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLQotaW1wb3J0IG9zLnBhdGgKLWltcG9ydCBzeXMKLWltcG9ydCBzdHJpbmcKLWltcG9y
dCBvcHRwYXJzZQotaW1wb3J0IHJlCi10cnk6Ci0gICAgaW1wb3J0IGpzb24KLWV4Y2VwdCBJbXBv
cnRFcnJvcjoKLSAgICBpbXBvcnQgc2ltcGxlanNvbiBhcyBqc29uCi0KLWltcG9ydCBDb2RlR2Vu
ZXJhdG9ySW5zcGVjdG9yU3RyaW5ncwotCi0KLURPTUFJTl9ERUZJTkVfTkFNRV9NQVAgPSB7Ci0g
ICAgIkRhdGFiYXNlIjogIlNRTF9EQVRBQkFTRSIsCi0gICAgIkluZGV4ZWREQiI6ICJJTkRFWEVE
X0RBVEFCQVNFIiwKLSAgICAiUmVwbGF5IjogIldFQl9SRVBMQVkiLAotfQotCi0KLSMgTWFudWFs
bHktZmlsbGVkIG1hcCBvZiB0eXBlIG5hbWUgcmVwbGFjZW1lbnRzLgotVFlQRV9OQU1FX0ZJWF9N
QVAgPSB7Ci0gICAgIlJHQkEiOiAiUmdiYSIsICAjIFJHQkEgaXMgcmVwb3J0ZWQgdG8gYmUgY29u
ZmxpY3Rpbmcgd2l0aCBhIGRlZmluZSBuYW1lIGluIFdpbmRvd3MgQ0UuCi0gICAgIiI6ICJFbXB0
eSIsCi19Ci0KLQotVFlQRVNfV0lUSF9SVU5USU1FX0NBU1RfU0VUID0gZnJvemVuc2V0KFsiUnVu
dGltZS5SZW1vdGVPYmplY3QiLCAiUnVudGltZS5Qcm9wZXJ0eURlc2NyaXB0b3IiLCAiUnVudGlt
ZS5JbnRlcm5hbFByb3BlcnR5RGVzY3JpcHRvciIsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJEZWJ1Z2dlci5GdW5jdGlvbkRldGFpbHMiLCAiRGVidWdnZXIuQ2Fs
bEZyYW1lIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNhbnZh
cy5UcmFjZUxvZyIsICJDYW52YXMuUmVzb3VyY2VJbmZvIiwgIkNhbnZhcy5SZXNvdXJjZVN0YXRl
IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBUaGlzIHNob3Vs
ZCBiZSBhIHRlbXBvcmFyeSBoYWNrLiBUaW1lbGluZUV2ZW50IHNob3VsZCBiZSBjcmVhdGVkIHZp
YSBnZW5lcmF0ZWQgQysrIEFQSS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIlRpbWVsaW5lLlRpbWVsaW5lRXZlbnQiXSkKLQotVFlQRVNfV0lUSF9PUEVOX0ZJRUxE
X0xJU1RfU0VUID0gZnJvemVuc2V0KFsiVGltZWxpbmUuVGltZWxpbmVFdmVudCIsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgSW5zcGVjdG9yU3R5bGVTaGVl
dCBub3Qgb25seSBjcmVhdGVzIHRoaXMgcHJvcGVydHkgYnV0IHdhbnRzIHRvIHJlYWQgaXQgYW5k
IG1vZGlmeSBpdC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IkNTUy5DU1NQcm9wZXJ0eSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICMgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudCBuZWVkcyB0byB1cGRhdGUgbWltZS10eXBl
LgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTmV0d29yay5S
ZXNwb25zZSJdKQotCi1FWEFDVExZX0lOVF9TVVBQT1JURUQgPSBGYWxzZQotCi1JTlNQRUNUT1Jf
VFlQRVNfR0VORVJBVE9SX0NPTkZJR19NQVAgPSB7Ci0gICAgIkphdmFTY3JpcHQiOiB7Ci0gICAg
ICAgICJwcmVmaXgiOiAiSlMiLAotICAgICAgICAidHlwZWJ1aWxkZXJfZGVwZW5kZW5jeSI6ICIi
LAotICAgICAgICAiZXhwb3J0X21hY3JvIjogIkpTX0VYUE9SVF9QUklWQVRFIiwKLSAgICB9LAot
ICAgICJXZWIiOiB7Ci0gICAgICAgICJwcmVmaXgiOiAiV2ViIiwKLSAgICAgICAgInR5cGVidWls
ZGVyX2RlcGVuZGVuY3kiOiAiI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JKU1R5cGVCdWls
ZGVycy5oPiIsCi0gICAgICAgICJleHBvcnRfbWFjcm8iOiAiIiwKLSAgICB9LAotfQotCi1jbWRs
aW5lX3BhcnNlciA9IG9wdHBhcnNlLk9wdGlvblBhcnNlcih1c2FnZT0idXNhZ2U6ICVwcm9nIFtv
cHRpb25zXSA8SW5zcGVjdG9yLmpzb24+IikKLWNtZGxpbmVfcGFyc2VyLmFkZF9vcHRpb24oIi0t
b3V0cHV0X2hfZGlyIikKLWNtZGxpbmVfcGFyc2VyLmFkZF9vcHRpb24oIi0tb3V0cHV0X2NwcF9k
aXIiKQotY21kbGluZV9wYXJzZXIuYWRkX29wdGlvbigiLS1vdXRwdXRfanNfZGlyIikKLWNtZGxp
bmVfcGFyc2VyLmFkZF9vcHRpb24oIi0tb3V0cHV0X3R5cGUiKSAgIyBKYXZhU2NyaXB0LCBXZWIK
LWNtZGxpbmVfcGFyc2VyLmFkZF9vcHRpb24oIi0td3JpdGVfYWx3YXlzIiwgYWN0aW9uPSJzdG9y
ZV90cnVlIikKLWNtZGxpbmVfcGFyc2VyLmFkZF9vcHRpb24oIi0tbm9fdmVyaWZpY2F0aW9uIiwg
YWN0aW9uPSJzdG9yZV90cnVlIikKLQotdHJ5OgotICAgIGFyZ19vcHRpb25zLCBhcmdfdmFsdWVz
ID0gY21kbGluZV9wYXJzZXIucGFyc2VfYXJncygpCi0gICAgaWYgKGxlbihhcmdfdmFsdWVzKSA8
IDEpOgotICAgICAgICByYWlzZSBFeGNlcHRpb24oIkF0IGxlYXN0IG9uZSBwbGFpbiBhcmd1bWVu
dCBleHBlY3RlZCIpCi0KLSAgICBpbnB1dF9qc29uX2ZpbGVuYW1lID0gYXJnX3ZhbHVlc1swXQot
ICAgIGRlcGVuZGVuY3lfanNvbl9maWxlbmFtZXMgPSBhcmdfdmFsdWVzWzE6XQotCi0gICAgb3V0
cHV0X2hlYWRlcl9kaXJuYW1lID0gYXJnX29wdGlvbnMub3V0cHV0X2hfZGlyCi0gICAgb3V0cHV0
X2NwcF9kaXJuYW1lID0gYXJnX29wdGlvbnMub3V0cHV0X2NwcF9kaXIKLSAgICBvdXRwdXRfanNf
ZGlybmFtZSA9IGFyZ19vcHRpb25zLm91dHB1dF9qc19kaXIKLSAgICBvdXRwdXRfdHlwZSA9IGFy
Z19vcHRpb25zLm91dHB1dF90eXBlCi0KLSAgICB3cml0ZV9hbHdheXMgPSBhcmdfb3B0aW9ucy53
cml0ZV9hbHdheXMKLSAgICB2ZXJpZmljYXRpb24gPSBub3QgYXJnX29wdGlvbnMubm9fdmVyaWZp
Y2F0aW9uCi0gICAgaWYgbm90IG91dHB1dF9oZWFkZXJfZGlybmFtZToKLSAgICAgICAgcmFpc2Ug
RXhjZXB0aW9uKCJPdXRwdXQgLmggZGlyZWN0b3J5IG11c3QgYmUgc3BlY2lmaWVkIikKLSAgICBp
ZiBub3Qgb3V0cHV0X2NwcF9kaXJuYW1lOgotICAgICAgICByYWlzZSBFeGNlcHRpb24oIk91dHB1
dCAuY3BwIGRpcmVjdG9yeSBtdXN0IGJlIHNwZWNpZmllZCIpCi0gICAgaWYgbm90IG91dHB1dF9q
c19kaXJuYW1lOgotICAgICAgICByYWlzZSBFeGNlcHRpb24oIk91dHB1dCAuanMgZGlyZWN0b3J5
IG11c3QgYmUgc3BlY2lmaWVkIikKLSAgICBpZiBvdXRwdXRfdHlwZSBub3QgaW4gSU5TUEVDVE9S
X1RZUEVTX0dFTkVSQVRPUl9DT05GSUdfTUFQLmtleXMoKToKLSAgICAgICAgcmFpc2UgRXhjZXB0
aW9uKCJVbmtub3duIG91dHB1dCB0eXBlLiBBbGxvd2VkIHR5cGVzIGFyZTogJXMiICUgSU5TUEVD
VE9SX1RZUEVTX0dFTkVSQVRPUl9DT05GSUdfTUFQLmtleXMoKSkKLWV4Y2VwdCBFeGNlcHRpb246
Ci0gICAgIyBXb3JrIHdpdGggcHl0aG9uIDIgYW5kIDMgaHR0cDovL2RvY3MucHl0aG9uLm9yZy9w
eTNrL2hvd3RvL3B5cG9ydGluZy5odG1sCi0gICAgZXhjID0gc3lzLmV4Y19pbmZvKClbMV0KLSAg
ICBzeXMuc3RkZXJyLndyaXRlKCJGYWlsZWQgdG8gcGFyc2UgY29tbWFuZC1saW5lIGFyZ3VtZW50
czogJXNcblxuIiAlIGV4YykKLSAgICBzeXMuc3RkZXJyLndyaXRlKCJVc2FnZTogPHNjcmlwdD4g
SW5zcGVjdG9yLmpzb24gLS1vdXRwdXRfaF9kaXIgPG91dHB1dF9oZWFkZXJfZGlyPiAtLW91dHB1
dF9jcHBfZGlyIDxvdXRwdXRfY3BwX2Rpcj4gLS1vdXRwdXRfanNfZGlyIDxvdXRwdXRfanNfZGly
PiBbLS13cml0ZV9hbHdheXNdIFstLW5vX3ZlcmlmaWNhdGlvbl1cbiIpCi0gICAgZXhpdCgxKQot
Ci0KLWRlZiBkYXNoX3RvX2NhbWVsY2FzZSh3b3JkKToKLSAgICByZXR1cm4gJycuam9pbih4LmNh
cGl0YWxpemUoKSBvciAnLScgZm9yIHggaW4gd29yZC5zcGxpdCgnLScpKQotCi0KLWRlZiBmaXhf
Y2FtZWxfY2FzZShuYW1lKToKLSAgICByZWZpbmVkID0gcmUuc3ViKHInLShcdyknLCBsYW1iZGEg
cGF0OiBwYXQuZ3JvdXAoMSkudXBwZXIoKSwgbmFtZSkKLSAgICByZWZpbmVkID0gdG9fdGl0bGVf
Y2FzZShyZWZpbmVkKQotICAgIHJldHVybiByZS5zdWIocicoP2kpSFRNTHxYTUx8V01MfEFQSXxH
Q3xYSFJ8RE9NfENTUycsIGxhbWJkYSBwYXQ6IHBhdC5ncm91cCgwKS51cHBlcigpLCByZWZpbmVk
KQotCi0KLWRlZiB0b190aXRsZV9jYXNlKG5hbWUpOgotICAgIHJldHVybiBuYW1lWzoxXS51cHBl
cigpICsgbmFtZVsxOl0KLQotCi1jbGFzcyBDYXBpdGFsaXplcjoKLSAgICBAc3RhdGljbWV0aG9k
Ci0gICAgZGVmIGxvd2VyX2NhbWVsX2Nhc2VfdG9fdXBwZXIoc3RyKToKLSAgICAgICAgaWYgbGVu
KHN0cikgPiAwIGFuZCBzdHJbMF0uaXNsb3dlcigpOgotICAgICAgICAgICAgc3RyID0gc3RyWzBd
LnVwcGVyKCkgKyBzdHJbMTpdCi0gICAgICAgIHJldHVybiBzdHIKLQotICAgIEBzdGF0aWNtZXRo
b2QKLSAgICBkZWYgdXBwZXJfY2FtZWxfY2FzZV90b19sb3dlcihzdHIpOgotICAgICAgICBwb3Mg
PSAwCi0gICAgICAgIHdoaWxlIHBvcyA8IGxlbihzdHIpIGFuZCBzdHJbcG9zXS5pc3VwcGVyKCk6
Ci0gICAgICAgICAgICBwb3MgKz0gMQotICAgICAgICBpZiBwb3MgPT0gMDoKLSAgICAgICAgICAg
IHJldHVybiBzdHIKLSAgICAgICAgaWYgcG9zID09IDE6Ci0gICAgICAgICAgICByZXR1cm4gc3Ry
WzBdLmxvd2VyKCkgKyBzdHJbMTpdCi0gICAgICAgIGlmIHBvcyA8IGxlbihzdHIpOgotICAgICAg
ICAgICAgcG9zIC09IDEKLSAgICAgICAgcG9zc2libGVfYWJicmV2aWF0aW9uID0gc3RyWzA6cG9z
XQotICAgICAgICBpZiBwb3NzaWJsZV9hYmJyZXZpYXRpb24gbm90IGluIENhcGl0YWxpemVyLkFC
QlJFVklBVElPTjoKLSAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiVW5rbm93biBhYmJyZXZp
YXRpb24gJXMiICUgcG9zc2libGVfYWJicmV2aWF0aW9uKQotICAgICAgICBzdHIgPSBwb3NzaWJs
ZV9hYmJyZXZpYXRpb24ubG93ZXIoKSArIHN0cltwb3M6XQotICAgICAgICByZXR1cm4gc3RyCi0K
LSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIGNhbWVsX2Nhc2VfdG9fY2FwaXRhbGl6ZWRfd2l0
aF91bmRlcnNjb3JlcyhzdHIpOgotICAgICAgICBpZiBsZW4oc3RyKSA9PSAwOgotICAgICAgICAg
ICAgcmV0dXJuIHN0cgotICAgICAgICBvdXRwdXQgPSBDYXBpdGFsaXplci5zcGxpdF9jYW1lbF9j
YXNlXyhzdHIpCi0gICAgICAgIHJldHVybiAiXyIuam9pbihvdXRwdXQpLnVwcGVyKCkKLQotICAg
IEBzdGF0aWNtZXRob2QKLSAgICBkZWYgc3BsaXRfY2FtZWxfY2FzZV8oc3RyKToKLSAgICAgICAg
b3V0cHV0ID0gW10KLSAgICAgICAgcG9zX2JlaW5nID0gMAotICAgICAgICBwb3MgPSAxCi0gICAg
ICAgIGhhc19vbmVsZXR0ZXIgPSBGYWxzZQotICAgICAgICB3aGlsZSBwb3MgPCBsZW4oc3RyKToK
LSAgICAgICAgICAgIGlmIHN0cltwb3NdLmlzdXBwZXIoKToKLSAgICAgICAgICAgICAgICBvdXRw
dXQuYXBwZW5kKHN0cltwb3NfYmVpbmc6cG9zXS51cHBlcigpKQotICAgICAgICAgICAgICAgIGlm
IHBvcyAtIHBvc19iZWluZyA9PSAxOgotICAgICAgICAgICAgICAgICAgICBoYXNfb25lbGV0dGVy
ID0gVHJ1ZQotICAgICAgICAgICAgICAgIHBvc19iZWluZyA9IHBvcwotICAgICAgICAgICAgcG9z
ICs9IDEKLSAgICAgICAgb3V0cHV0LmFwcGVuZChzdHJbcG9zX2JlaW5nOl0pCi0gICAgICAgIGlm
IGhhc19vbmVsZXR0ZXI6Ci0gICAgICAgICAgICBhcnJheV9wb3MgPSAwCi0gICAgICAgICAgICB3
aGlsZSBhcnJheV9wb3MgPCBsZW4ob3V0cHV0KSAtIDE6Ci0gICAgICAgICAgICAgICAgaWYgbGVu
KG91dHB1dFthcnJheV9wb3NdKSA9PSAxOgotICAgICAgICAgICAgICAgICAgICBhcnJheV9wb3Nf
ZW5kID0gYXJyYXlfcG9zICsgMQotICAgICAgICAgICAgICAgICAgICB3aGlsZSBhcnJheV9wb3Nf
ZW5kIDwgbGVuKG91dHB1dCkgYW5kIGxlbihvdXRwdXRbYXJyYXlfcG9zX2VuZF0pID09IDE6Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBhcnJheV9wb3NfZW5kICs9IDEKLSAgICAgICAgICAgICAg
ICAgICAgaWYgYXJyYXlfcG9zX2VuZCAtIGFycmF5X3BvcyA+IDE6Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBwb3NzaWJsZV9hYmJyZXZpYXRpb24gPSAiIi5qb2luKG91dHB1dFthcnJheV9wb3M6
YXJyYXlfcG9zX2VuZF0pCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiBwb3NzaWJsZV9hYmJy
ZXZpYXRpb24udXBwZXIoKSBpbiBDYXBpdGFsaXplci5BQkJSRVZJQVRJT046Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgb3V0cHV0W2FycmF5X3BvczphcnJheV9wb3NfZW5kXSA9IFtwb3Nz
aWJsZV9hYmJyZXZpYXRpb25dCi0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGFycmF5X3BvcyA9IGFycmF5X3Bvc19lbmQgLSAxCi0gICAg
ICAgICAgICAgICAgYXJyYXlfcG9zICs9IDEKLSAgICAgICAgcmV0dXJuIG91dHB1dAotCi0gICAg
QUJCUkVWSUFUSU9OID0gZnJvemVuc2V0KFsiWEhSIiwgIkRPTSIsICJDU1MiXSkKLQotVkFMSURB
VE9SX0lGREVGX05BTUUgPSAiIUFTU0VSVF9ESVNBQkxFRCIKLQotCi1jbGFzcyBEb21haW5OYW1l
Rml4ZXM6Ci0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIGdldF9maXhlZF9kYXRhKGNscywgZG9t
YWluX25hbWUpOgotICAgICAgICBmaWVsZF9uYW1lX3JlcyA9IENhcGl0YWxpemVyLnVwcGVyX2Nh
bWVsX2Nhc2VfdG9fbG93ZXIoZG9tYWluX25hbWUpICsgIkFnZW50IgotCi0gICAgICAgIGNsYXNz
IFJlcyhvYmplY3QpOgotICAgICAgICAgICAgc2tpcF9qc19iaW5kID0gZG9tYWluX25hbWUgaW4g
Y2xzLnNraXBfanNfYmluZF9kb21haW5zCi0KLSAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAg
ICAgICAgICAgIGRlZiBnZXRfZ3VhcmQoKToKLSAgICAgICAgICAgICAgICBpZiBkb21haW5fbmFt
ZSBpbiBET01BSU5fREVGSU5FX05BTUVfTUFQOgotICAgICAgICAgICAgICAgICAgICBkZWZpbmVf
bmFtZSA9IERPTUFJTl9ERUZJTkVfTkFNRV9NQVBbZG9tYWluX25hbWVdCi0KLSAgICAgICAgICAg
ICAgICAgICAgY2xhc3MgR3VhcmQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0
aG9kCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWYgZ2VuZXJhdGVfb3BlbihvdXRwdXQpOgot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoIiNpZiBFTkFCTEUoJXMp
XG4iICUgZGVmaW5lX25hbWUpCi0KLSAgICAgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRo
b2QKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBnZW5lcmF0ZV9jbG9zZShvdXRwdXQpOgot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoIiNlbmRpZiAvLyBFTkFC
TEUoJXMpXG4iICUgZGVmaW5lX25hbWUpCi0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEd1
YXJkCi0KLSAgICAgICAgcmV0dXJuIFJlcwotCi0gICAgc2tpcF9qc19iaW5kX2RvbWFpbnMgPSBz
ZXQoWyJET01EZWJ1Z2dlciJdKQotCi0KLWNsYXNzIFJhd1R5cGVzKG9iamVjdCk6Ci0gICAgQHN0
YXRpY21ldGhvZAotICAgIGRlZiBnZXQoanNvbl90eXBlKToKLSAgICAgICAgaWYganNvbl90eXBl
ID09ICJib29sZWFuIjoKLSAgICAgICAgICAgIHJldHVybiBSYXdUeXBlcy5Cb29sCi0gICAgICAg
IGVsaWYganNvbl90eXBlID09ICJzdHJpbmciOgotICAgICAgICAgICAgcmV0dXJuIFJhd1R5cGVz
LlN0cmluZwotICAgICAgICBlbGlmIGpzb25fdHlwZSA9PSAiYXJyYXkiOgotICAgICAgICAgICAg
cmV0dXJuIFJhd1R5cGVzLkFycmF5Ci0gICAgICAgIGVsaWYganNvbl90eXBlID09ICJvYmplY3Qi
OgotICAgICAgICAgICAgcmV0dXJuIFJhd1R5cGVzLk9iamVjdAotICAgICAgICBlbGlmIGpzb25f
dHlwZSA9PSAiaW50ZWdlciI6Ci0gICAgICAgICAgICByZXR1cm4gUmF3VHlwZXMuSW50Ci0gICAg
ICAgIGVsaWYganNvbl90eXBlID09ICJudW1iZXIiOgotICAgICAgICAgICAgcmV0dXJuIFJhd1R5
cGVzLk51bWJlcgotICAgICAgICBlbGlmIGpzb25fdHlwZSA9PSAiYW55IjoKLSAgICAgICAgICAg
IHJldHVybiBSYXdUeXBlcy5BbnkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJhaXNlIEV4
Y2VwdGlvbigiVW5rbm93biB0eXBlOiAlcyIgJSBqc29uX3R5cGUpCi0KLSAgICAjIEZvciBvdXRw
dXQgcGFyYW1ldGVyIGFsbCB2YWx1ZXMgYXJlIHBhc3NlZCBieSBwb2ludGVyIGV4Y2VwdCBSZWZQ
dHItYmFzZWQgdHlwZXMuCi0gICAgY2xhc3MgT3V0cHV0UGFzc01vZGVsOgotICAgICAgICBjbGFz
cyBCeVBvaW50ZXI6Ci0gICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICBkZWYg
Z2V0X2FyZ3VtZW50X3ByZWZpeCgpOgotICAgICAgICAgICAgICAgIHJldHVybiAiJiIKLQotICAg
ICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgZGVmIGdldF9wYXJhbWV0ZXJfdHlw
ZV9zdWZmaXgoKToKLSAgICAgICAgICAgICAgICByZXR1cm4gIioiCi0KLSAgICAgICAgY2xhc3Mg
QnlSZWZlcmVuY2U6Ci0gICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICBkZWYg
Z2V0X2FyZ3VtZW50X3ByZWZpeCgpOgotICAgICAgICAgICAgICAgIHJldHVybiAiIgotCi0gICAg
ICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICBkZWYgZ2V0X3BhcmFtZXRlcl90eXBl
X3N1ZmZpeCgpOgotICAgICAgICAgICAgICAgIHJldHVybiAiJiIKLQotICAgIGNsYXNzIEJhc2VU
eXBlKG9iamVjdCk6Ci0gICAgICAgIG5lZWRfaW50ZXJuYWxfcnVudGltZV9jYXN0XyA9IEZhbHNl
Ci0KLSAgICAgICAgQGNsYXNzbWV0aG9kCi0gICAgICAgIGRlZiByZXF1ZXN0X3Jhd19pbnRlcm5h
bF9ydW50aW1lX2Nhc3QoY2xzKToKLSAgICAgICAgICAgIGlmIG5vdCBjbHMubmVlZF9pbnRlcm5h
bF9ydW50aW1lX2Nhc3RfOgotICAgICAgICAgICAgICAgIGNscy5uZWVkX2ludGVybmFsX3J1bnRp
bWVfY2FzdF8gPSBUcnVlCi0KLSAgICAgICAgQGNsYXNzbWV0aG9kCi0gICAgICAgIGRlZiBnZXRf
cmF3X3ZhbGlkYXRvcl9jYWxsX3RleHQoY2xzKToKLSAgICAgICAgICAgIHJldHVybiAiUnVudGlt
ZUNhc3RIZWxwZXI6OmFzc2VydFR5cGU8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZTo6VHlwZSVz
PiIgJSBjbHMuZ2V0X3ZhbGlkYXRlX21ldGhvZF9wYXJhbXMoKS50ZW1wbGF0ZV90eXBlCi0KLSAg
ICBjbGFzcyBTdHJpbmcoQmFzZVR5cGUpOgotICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAg
IGRlZiBnZXRfZ2V0dGVyX25hbWUoKToKLSAgICAgICAgICAgIHJldHVybiAiU3RyaW5nIgotCi0g
ICAgICAgIGdldF9zZXR0ZXJfbmFtZSA9IGdldF9nZXR0ZXJfbmFtZQotCi0gICAgICAgIEBzdGF0
aWNtZXRob2QKLSAgICAgICAgZGVmIGdldF9jX2luaXRpYWxpemVyKCk6Ci0gICAgICAgICAgICBy
ZXR1cm4gIlwiXCIiCi0KLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBkZWYgZ2V0X2pz
X2JpbmRfdHlwZSgpOgotICAgICAgICAgICAgcmV0dXJuICJzdHJpbmciCi0KLSAgICAgICAgQHN0
YXRpY21ldGhvZAotICAgICAgICBkZWYgZ2V0X3ZhbGlkYXRlX21ldGhvZF9wYXJhbXMoKToKLSAg
ICAgICAgICAgIGNsYXNzIFZhbGlkYXRlTWV0aG9kUGFyYW1zOgotICAgICAgICAgICAgICAgIHRl
bXBsYXRlX3R5cGUgPSAiU3RyaW5nIgotICAgICAgICAgICAgcmV0dXJuIFZhbGlkYXRlTWV0aG9k
UGFyYW1zCi0KLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBkZWYgZ2V0X291dHB1dF9w
YXNzX21vZGVsKCk6Ci0gICAgICAgICAgICByZXR1cm4gUmF3VHlwZXMuT3V0cHV0UGFzc01vZGVs
LkJ5UG9pbnRlcgotCi0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGlzX2hlYXZ5
X3ZhbHVlKCk6Ci0gICAgICAgICAgICByZXR1cm4gVHJ1ZQotCi0gICAgICAgIEBzdGF0aWNtZXRo
b2QKLSAgICAgICAgZGVmIGdldF9hcnJheV9pdGVtX3Jhd19jX3R5cGVfdGV4dCgpOgotICAgICAg
ICAgICAgcmV0dXJuICJTdHJpbmciCi0KLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBk
ZWYgZ2V0X3Jhd190eXBlX21vZGVsKCk6Ci0gICAgICAgICAgICByZXR1cm4gVHlwZU1vZGVsLlN0
cmluZwotCi0gICAgY2xhc3MgSW50KEJhc2VUeXBlKToKLSAgICAgICAgQHN0YXRpY21ldGhvZAot
ICAgICAgICBkZWYgZ2V0X2dldHRlcl9uYW1lKCk6Ci0gICAgICAgICAgICByZXR1cm4gIkludCIK
LQotICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgIGRlZiBnZXRfc2V0dGVyX25hbWUoKToK
LSAgICAgICAgICAgIHJldHVybiAiTnVtYmVyIgotCi0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAg
ICAgICAgZGVmIGdldF9jX2luaXRpYWxpemVyKCk6Ci0gICAgICAgICAgICByZXR1cm4gIjAiCi0K
LSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBkZWYgZ2V0X2pzX2JpbmRfdHlwZSgpOgot
ICAgICAgICAgICAgcmV0dXJuICJudW1iZXIiCi0KLSAgICAgICAgQGNsYXNzbWV0aG9kCi0gICAg
ICAgIGRlZiBnZXRfcmF3X3ZhbGlkYXRvcl9jYWxsX3RleHQoY2xzKToKLSAgICAgICAgICAgIHJl
dHVybiAiUnVudGltZUNhc3RIZWxwZXI6OmFzc2VydEludCIKLQotICAgICAgICBAc3RhdGljbWV0
aG9kCi0gICAgICAgIGRlZiBnZXRfb3V0cHV0X3Bhc3NfbW9kZWwoKToKLSAgICAgICAgICAgIHJl
dHVybiBSYXdUeXBlcy5PdXRwdXRQYXNzTW9kZWwuQnlQb2ludGVyCi0KLSAgICAgICAgQHN0YXRp
Y21ldGhvZAotICAgICAgICBkZWYgaXNfaGVhdnlfdmFsdWUoKToKLSAgICAgICAgICAgIHJldHVy
biBGYWxzZQotCi0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGdldF9hcnJheV9p
dGVtX3Jhd19jX3R5cGVfdGV4dCgpOgotICAgICAgICAgICAgcmV0dXJuICJpbnQiCi0KLSAgICAg
ICAgQHN0YXRpY21ldGhvZAotICAgICAgICBkZWYgZ2V0X3Jhd190eXBlX21vZGVsKCk6Ci0gICAg
ICAgICAgICByZXR1cm4gVHlwZU1vZGVsLkludAotCi0gICAgY2xhc3MgTnVtYmVyKEJhc2VUeXBl
KToKLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBkZWYgZ2V0X2dldHRlcl9uYW1lKCk6
Ci0gICAgICAgICAgICByZXR1cm4gIkRvdWJsZSIKLQotICAgICAgICBAc3RhdGljbWV0aG9kCi0g
ICAgICAgIGRlZiBnZXRfc2V0dGVyX25hbWUoKToKLSAgICAgICAgICAgIHJldHVybiAiTnVtYmVy
IgotCi0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGdldF9jX2luaXRpYWxpemVy
KCk6Ci0gICAgICAgICAgICByZXR1cm4gIjAiCi0KLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAg
ICAgICBkZWYgZ2V0X2pzX2JpbmRfdHlwZSgpOgotICAgICAgICAgICAgcmV0dXJuICJudW1iZXIi
Ci0KLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBkZWYgZ2V0X3ZhbGlkYXRlX21ldGhv
ZF9wYXJhbXMoKToKLSAgICAgICAgICAgIGNsYXNzIFZhbGlkYXRlTWV0aG9kUGFyYW1zOgotICAg
ICAgICAgICAgICAgIHRlbXBsYXRlX3R5cGUgPSAiTnVtYmVyIgotICAgICAgICAgICAgcmV0dXJu
IFZhbGlkYXRlTWV0aG9kUGFyYW1zCi0KLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBk
ZWYgZ2V0X291dHB1dF9wYXNzX21vZGVsKCk6Ci0gICAgICAgICAgICByZXR1cm4gUmF3VHlwZXMu
T3V0cHV0UGFzc01vZGVsLkJ5UG9pbnRlcgotCi0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAg
ICAgZGVmIGlzX2hlYXZ5X3ZhbHVlKCk6Ci0gICAgICAgICAgICByZXR1cm4gRmFsc2UKLQotICAg
ICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgIGRlZiBnZXRfYXJyYXlfaXRlbV9yYXdfY190eXBl
X3RleHQoKToKLSAgICAgICAgICAgIHJldHVybiAiZG91YmxlIgotCi0gICAgICAgIEBzdGF0aWNt
ZXRob2QKLSAgICAgICAgZGVmIGdldF9yYXdfdHlwZV9tb2RlbCgpOgotICAgICAgICAgICAgcmV0
dXJuIFR5cGVNb2RlbC5OdW1iZXIKLQotICAgIGNsYXNzIEJvb2woQmFzZVR5cGUpOgotICAgICAg
ICBAc3RhdGljbWV0aG9kCi0gICAgICAgIGRlZiBnZXRfZ2V0dGVyX25hbWUoKToKLSAgICAgICAg
ICAgIHJldHVybiAiQm9vbGVhbiIKLQotICAgICAgICBnZXRfc2V0dGVyX25hbWUgPSBnZXRfZ2V0
dGVyX25hbWUKLQotICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgIGRlZiBnZXRfY19pbml0
aWFsaXplcigpOgotICAgICAgICAgICAgcmV0dXJuICJmYWxzZSIKLQotICAgICAgICBAc3RhdGlj
bWV0aG9kCi0gICAgICAgIGRlZiBnZXRfanNfYmluZF90eXBlKCk6Ci0gICAgICAgICAgICByZXR1
cm4gImJvb2xlYW4iCi0KLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBkZWYgZ2V0X3Zh
bGlkYXRlX21ldGhvZF9wYXJhbXMoKToKLSAgICAgICAgICAgIGNsYXNzIFZhbGlkYXRlTWV0aG9k
UGFyYW1zOgotICAgICAgICAgICAgICAgIHRlbXBsYXRlX3R5cGUgPSAiQm9vbGVhbiIKLSAgICAg
ICAgICAgIHJldHVybiBWYWxpZGF0ZU1ldGhvZFBhcmFtcwotCi0gICAgICAgIEBzdGF0aWNtZXRo
b2QKLSAgICAgICAgZGVmIGdldF9vdXRwdXRfcGFzc19tb2RlbCgpOgotICAgICAgICAgICAgcmV0
dXJuIFJhd1R5cGVzLk91dHB1dFBhc3NNb2RlbC5CeVBvaW50ZXIKLQotICAgICAgICBAc3RhdGlj
bWV0aG9kCi0gICAgICAgIGRlZiBpc19oZWF2eV92YWx1ZSgpOgotICAgICAgICAgICAgcmV0dXJu
IEZhbHNlCi0KLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBkZWYgZ2V0X2FycmF5X2l0
ZW1fcmF3X2NfdHlwZV90ZXh0KCk6Ci0gICAgICAgICAgICByZXR1cm4gImJvb2wiCi0KLSAgICAg
ICAgQHN0YXRpY21ldGhvZAotICAgICAgICBkZWYgZ2V0X3Jhd190eXBlX21vZGVsKCk6Ci0gICAg
ICAgICAgICByZXR1cm4gVHlwZU1vZGVsLkJvb2wKLQotICAgIGNsYXNzIE9iamVjdChCYXNlVHlw
ZSk6Ci0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGdldF9nZXR0ZXJfbmFtZSgp
OgotICAgICAgICAgICAgcmV0dXJuICJPYmplY3QiCi0KLSAgICAgICAgQHN0YXRpY21ldGhvZAot
ICAgICAgICBkZWYgZ2V0X3NldHRlcl9uYW1lKCk6Ci0gICAgICAgICAgICByZXR1cm4gIlZhbHVl
IgotCi0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGdldF9jX2luaXRpYWxpemVy
KCk6Ci0gICAgICAgICAgICByZXR1cm4gIkluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkiCi0KLSAg
ICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBkZWYgZ2V0X2pzX2JpbmRfdHlwZSgpOgotICAg
ICAgICAgICAgcmV0dXJuICJvYmplY3QiCi0KLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAg
ICBkZWYgZ2V0X291dHB1dF9hcmd1bWVudF9wcmVmaXgoKToKLSAgICAgICAgICAgIHJldHVybiAi
IgotCi0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGdldF92YWxpZGF0ZV9tZXRo
b2RfcGFyYW1zKCk6Ci0gICAgICAgICAgICBjbGFzcyBWYWxpZGF0ZU1ldGhvZFBhcmFtczoKLSAg
ICAgICAgICAgICAgICB0ZW1wbGF0ZV90eXBlID0gIk9iamVjdCIKLSAgICAgICAgICAgIHJldHVy
biBWYWxpZGF0ZU1ldGhvZFBhcmFtcwotCi0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAg
ZGVmIGdldF9vdXRwdXRfcGFzc19tb2RlbCgpOgotICAgICAgICAgICAgcmV0dXJuIFJhd1R5cGVz
Lk91dHB1dFBhc3NNb2RlbC5CeVJlZmVyZW5jZQotCi0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAg
ICAgICAgZGVmIGlzX2hlYXZ5X3ZhbHVlKCk6Ci0gICAgICAgICAgICByZXR1cm4gVHJ1ZQotCi0g
ICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGdldF9hcnJheV9pdGVtX3Jhd19jX3R5
cGVfdGV4dCgpOgotICAgICAgICAgICAgcmV0dXJuICJJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVj
dCIKLQotICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgIGRlZiBnZXRfcmF3X3R5cGVfbW9k
ZWwoKToKLSAgICAgICAgICAgIHJldHVybiBUeXBlTW9kZWwuT2JqZWN0Ci0KLSAgICBjbGFzcyBB
bnkoQmFzZVR5cGUpOgotICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgIGRlZiBnZXRfZ2V0
dGVyX25hbWUoKToKLSAgICAgICAgICAgIHJldHVybiAiVmFsdWUiCi0KLSAgICAgICAgZ2V0X3Nl
dHRlcl9uYW1lID0gZ2V0X2dldHRlcl9uYW1lCi0KLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAg
ICAgICBkZWYgZ2V0X2NfaW5pdGlhbGl6ZXIoKToKLSAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlv
bigiVW5zdXBwb3J0ZWQiKQotCi0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGdl
dF9qc19iaW5kX3R5cGUoKToKLSAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiVW5zdXBwb3J0
ZWQiKQotCi0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGdldF9yYXdfdmFsaWRh
dG9yX2NhbGxfdGV4dCgpOgotICAgICAgICAgICAgcmV0dXJuICJSdW50aW1lQ2FzdEhlbHBlcjo6
YXNzZXJ0QW55IgotCi0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGdldF9vdXRw
dXRfcGFzc19tb2RlbCgpOgotICAgICAgICAgICAgcmV0dXJuIFJhd1R5cGVzLk91dHB1dFBhc3NN
b2RlbC5CeVJlZmVyZW5jZQotCi0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGlz
X2hlYXZ5X3ZhbHVlKCk6Ci0gICAgICAgICAgICByZXR1cm4gVHJ1ZQotCi0gICAgICAgIEBzdGF0
aWNtZXRob2QKLSAgICAgICAgZGVmIGdldF9hcnJheV9pdGVtX3Jhd19jX3R5cGVfdGV4dCgpOgot
ICAgICAgICAgICAgcmV0dXJuICJJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlIgotCi0gICAgICAg
IEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGdldF9yYXdfdHlwZV9tb2RlbCgpOgotICAgICAg
ICAgICAgcmV0dXJuIFR5cGVNb2RlbC5BbnkKLQotICAgIGNsYXNzIEFycmF5KEJhc2VUeXBlKToK
LSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBkZWYgZ2V0X2dldHRlcl9uYW1lKCk6Ci0g
ICAgICAgICAgICByZXR1cm4gIkFycmF5IgotCi0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAg
ICAgZGVmIGdldF9zZXR0ZXJfbmFtZSgpOgotICAgICAgICAgICAgcmV0dXJuICJWYWx1ZSIKLQot
ICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgIGRlZiBnZXRfY19pbml0aWFsaXplcigpOgot
ICAgICAgICAgICAgcmV0dXJuICJJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCkiCi0KLSAgICAgICAg
QHN0YXRpY21ldGhvZAotICAgICAgICBkZWYgZ2V0X2pzX2JpbmRfdHlwZSgpOgotICAgICAgICAg
ICAgcmV0dXJuICJvYmplY3QiCi0KLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBkZWYg
Z2V0X291dHB1dF9hcmd1bWVudF9wcmVmaXgoKToKLSAgICAgICAgICAgIHJldHVybiAiIgotCi0g
ICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGdldF92YWxpZGF0ZV9tZXRob2RfcGFy
YW1zKCk6Ci0gICAgICAgICAgICBjbGFzcyBWYWxpZGF0ZU1ldGhvZFBhcmFtczoKLSAgICAgICAg
ICAgICAgICB0ZW1wbGF0ZV90eXBlID0gIkFycmF5IgotICAgICAgICAgICAgcmV0dXJuIFZhbGlk
YXRlTWV0aG9kUGFyYW1zCi0KLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBkZWYgZ2V0
X291dHB1dF9wYXNzX21vZGVsKCk6Ci0gICAgICAgICAgICByZXR1cm4gUmF3VHlwZXMuT3V0cHV0
UGFzc01vZGVsLkJ5UmVmZXJlbmNlCi0KLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBk
ZWYgaXNfaGVhdnlfdmFsdWUoKToKLSAgICAgICAgICAgIHJldHVybiBUcnVlCi0KLSAgICAgICAg
QHN0YXRpY21ldGhvZAotICAgICAgICBkZWYgZ2V0X2FycmF5X2l0ZW1fcmF3X2NfdHlwZV90ZXh0
KCk6Ci0gICAgICAgICAgICByZXR1cm4gIkluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXkiCi0KLSAg
ICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBkZWYgZ2V0X3Jhd190eXBlX21vZGVsKCk6Ci0g
ICAgICAgICAgICByZXR1cm4gVHlwZU1vZGVsLkFycmF5Ci0KLQotZGVmIHJlcGxhY2VfcmlnaHRf
c2hpZnQoaW5wdXRfc3RyKToKLSAgICByZXR1cm4gaW5wdXRfc3RyLnJlcGxhY2UoIj4+IiwgIj4g
PiIpCi0KLQotY2xhc3MgQ29tbWFuZFJldHVyblBhc3NNb2RlbDoKLSAgICBjbGFzcyBCeVJlZmVy
ZW5jZToKLSAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZhcl90eXBlLCBzZXRfY29uZGl0aW9u
KToKLSAgICAgICAgICAgIHNlbGYudmFyX3R5cGUgPSB2YXJfdHlwZQotICAgICAgICAgICAgc2Vs
Zi5zZXRfY29uZGl0aW9uID0gc2V0X2NvbmRpdGlvbgotCi0gICAgICAgIGRlZiBnZXRfcmV0dXJu
X3Zhcl90eXBlKHNlbGYpOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYudmFyX3R5cGUKLQotICAg
ICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgIGRlZiBnZXRfb3V0cHV0X2FyZ3VtZW50X3ByZWZp
eCgpOgotICAgICAgICAgICAgcmV0dXJuICIiCi0KLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAg
ICAgICBkZWYgZ2V0X291dHB1dF90b19yYXdfZXhwcmVzc2lvbigpOgotICAgICAgICAgICAgcmV0
dXJuICIlcyIKLQotICAgICAgICBkZWYgZ2V0X291dHB1dF9wYXJhbWV0ZXJfdHlwZShzZWxmKToK
LSAgICAgICAgICAgIHJldHVybiBzZWxmLnZhcl90eXBlICsgIiYiCi0KLSAgICAgICAgZGVmIGdl
dF9zZXRfcmV0dXJuX2NvbmRpdGlvbihzZWxmKToKLSAgICAgICAgICAgIHJldHVybiBzZWxmLnNl
dF9jb25kaXRpb24KLQotICAgIGNsYXNzIEJ5UG9pbnRlcjoKLSAgICAgICAgZGVmIF9faW5pdF9f
KHNlbGYsIHZhcl90eXBlKToKLSAgICAgICAgICAgIHNlbGYudmFyX3R5cGUgPSB2YXJfdHlwZQot
Ci0gICAgICAgIGRlZiBnZXRfcmV0dXJuX3Zhcl90eXBlKHNlbGYpOgotICAgICAgICAgICAgcmV0
dXJuIHNlbGYudmFyX3R5cGUKLQotICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgIGRlZiBn
ZXRfb3V0cHV0X2FyZ3VtZW50X3ByZWZpeCgpOgotICAgICAgICAgICAgcmV0dXJuICImIgotCi0g
ICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGdldF9vdXRwdXRfdG9fcmF3X2V4cHJl
c3Npb24oKToKLSAgICAgICAgICAgIHJldHVybiAiJXMiCi0KLSAgICAgICAgZGVmIGdldF9vdXRw
dXRfcGFyYW1ldGVyX3R5cGUoc2VsZik6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi52YXJfdHlw
ZSArICIqIgotCi0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGdldF9zZXRfcmV0
dXJuX2NvbmRpdGlvbigpOgotICAgICAgICAgICAgcmV0dXJuIE5vbmUKLQotICAgIGNsYXNzIE9w
dE91dHB1dDoKLSAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZhcl90eXBlKToKLSAgICAgICAg
ICAgIHNlbGYudmFyX3R5cGUgPSB2YXJfdHlwZQotCi0gICAgICAgIGRlZiBnZXRfcmV0dXJuX3Zh
cl90eXBlKHNlbGYpOgotICAgICAgICAgICAgcmV0dXJuICJJbnNwZWN0b3I6OlR5cGVCdWlsZGVy
OjpPcHRPdXRwdXQ8JXM+IiAlIHNlbGYudmFyX3R5cGUKLQotICAgICAgICBAc3RhdGljbWV0aG9k
Ci0gICAgICAgIGRlZiBnZXRfb3V0cHV0X2FyZ3VtZW50X3ByZWZpeCgpOgotICAgICAgICAgICAg
cmV0dXJuICImIgotCi0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGdldF9vdXRw
dXRfdG9fcmF3X2V4cHJlc3Npb24oKToKLSAgICAgICAgICAgIHJldHVybiAiJXMuZ2V0VmFsdWUo
KSIKLQotICAgICAgICBkZWYgZ2V0X291dHB1dF9wYXJhbWV0ZXJfdHlwZShzZWxmKToKLSAgICAg
ICAgICAgIHJldHVybiAiSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6T3B0T3V0cHV0PCVzPioiICUg
c2VsZi52YXJfdHlwZQotCi0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGdldF9z
ZXRfcmV0dXJuX2NvbmRpdGlvbigpOgotICAgICAgICAgICAgcmV0dXJuICIlcy5pc0Fzc2lnbmVk
KCkiCi0KLQotY2xhc3MgVHlwZU1vZGVsOgotICAgIGNsYXNzIFJlZlB0ckJhc2VkKG9iamVjdCk6
Ci0gICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjbGFzc19uYW1lKToKLSAgICAgICAgICAgIHNl
bGYuY2xhc3NfbmFtZSA9IGNsYXNzX25hbWUKLSAgICAgICAgICAgIHNlbGYub3B0aW9uYWwgPSBG
YWxzZQotCi0gICAgICAgIGRlZiBnZXRfb3B0aW9uYWwoc2VsZik6Ci0gICAgICAgICAgICByZXN1
bHQgPSBUeXBlTW9kZWwuUmVmUHRyQmFzZWQoc2VsZi5jbGFzc19uYW1lKQotICAgICAgICAgICAg
cmVzdWx0Lm9wdGlvbmFsID0gVHJ1ZQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdAotCi0gICAg
ICAgIGRlZiBnZXRfY29tbWFuZF9yZXR1cm5fcGFzc19tb2RlbChzZWxmKToKLSAgICAgICAgICAg
IGlmIHNlbGYub3B0aW9uYWw6Ci0gICAgICAgICAgICAgICAgc2V0X2NvbmRpdGlvbiA9ICIlcyIK
LSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2V0X2NvbmRpdGlvbiA9IE5vbmUK
LSAgICAgICAgICAgIHJldHVybiBDb21tYW5kUmV0dXJuUGFzc01vZGVsLkJ5UmVmZXJlbmNlKHJl
cGxhY2VfcmlnaHRfc2hpZnQoIlJlZlB0cjwlcz4iICUgc2VsZi5jbGFzc19uYW1lKSwgc2V0X2Nv
bmRpdGlvbikKLQotICAgICAgICBkZWYgZ2V0X2lucHV0X3BhcmFtX3R5cGVfdGV4dChzZWxmKToK
LSAgICAgICAgICAgIHJldHVybiByZXBsYWNlX3JpZ2h0X3NoaWZ0KCJQYXNzUmVmUHRyPCVzPiIg
JSBzZWxmLmNsYXNzX25hbWUpCi0KLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBkZWYg
Z2V0X2V2ZW50X3NldHRlcl9leHByZXNzaW9uX3BhdHRlcm4oKToKLSAgICAgICAgICAgIHJldHVy
biAiJXMiCi0KLSAgICBjbGFzcyBFbnVtKG9iamVjdCk6Ci0gICAgICAgIGRlZiBfX2luaXRfXyhz
ZWxmLCBiYXNlX3R5cGVfbmFtZSk6Ci0gICAgICAgICAgICBzZWxmLnR5cGVfbmFtZSA9IGJhc2Vf
dHlwZV9uYW1lICsgIjo6RW51bSIKLQotICAgICAgICBkZWYgZ2V0X29wdGlvbmFsKGJhc2Vfc2Vs
Zik6Ci0gICAgICAgICAgICBjbGFzcyBFbnVtT3B0aW9uYWw6Ci0gICAgICAgICAgICAgICAgQGNs
YXNzbWV0aG9kCi0gICAgICAgICAgICAgICAgZGVmIGdldF9vcHRpb25hbChjbHMpOgotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gY2xzCi0KLSAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9k
Ci0gICAgICAgICAgICAgICAgZGVmIGdldF9jb21tYW5kX3JldHVybl9wYXNzX21vZGVsKCk6Ci0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBDb21tYW5kUmV0dXJuUGFzc01vZGVsLk9wdE91dHB1
dChiYXNlX3NlbGYudHlwZV9uYW1lKQotCi0gICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAot
ICAgICAgICAgICAgICAgIGRlZiBnZXRfaW5wdXRfcGFyYW1fdHlwZV90ZXh0KCk6Ci0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBiYXNlX3NlbGYudHlwZV9uYW1lICsgIioiCi0KLSAgICAgICAg
ICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICAgICAgZGVmIGdldF9ldmVudF9zZXR0
ZXJfZXhwcmVzc2lvbl9wYXR0ZXJuKCk6Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2Vw
dGlvbigiVE9ETyIpCi0gICAgICAgICAgICByZXR1cm4gRW51bU9wdGlvbmFsCi0KLSAgICAgICAg
ZGVmIGdldF9jb21tYW5kX3JldHVybl9wYXNzX21vZGVsKHNlbGYpOgotICAgICAgICAgICAgcmV0
dXJuIENvbW1hbmRSZXR1cm5QYXNzTW9kZWwuQnlQb2ludGVyKHNlbGYudHlwZV9uYW1lKQotCi0g
ICAgICAgIGRlZiBnZXRfaW5wdXRfcGFyYW1fdHlwZV90ZXh0KHNlbGYpOgotICAgICAgICAgICAg
cmV0dXJuIHNlbGYudHlwZV9uYW1lCi0KLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBk
ZWYgZ2V0X2V2ZW50X3NldHRlcl9leHByZXNzaW9uX3BhdHRlcm4oKToKLSAgICAgICAgICAgIHJl
dHVybiAiJXMiCi0KLSAgICBjbGFzcyBWYWx1ZVR5cGUob2JqZWN0KToKLSAgICAgICAgZGVmIF9f
aW5pdF9fKHNlbGYsIHR5cGVfbmFtZSwgaXNfaGVhdnkpOgotICAgICAgICAgICAgc2VsZi50eXBl
X25hbWUgPSB0eXBlX25hbWUKLSAgICAgICAgICAgIHNlbGYuaXNfaGVhdnkgPSBpc19oZWF2eQot
Ci0gICAgICAgIGRlZiBnZXRfb3B0aW9uYWwoc2VsZik6Ci0gICAgICAgICAgICByZXR1cm4gc2Vs
Zi5WYWx1ZU9wdGlvbmFsKHNlbGYpCi0KLSAgICAgICAgZGVmIGdldF9jb21tYW5kX3JldHVybl9w
YXNzX21vZGVsKHNlbGYpOgotICAgICAgICAgICAgcmV0dXJuIENvbW1hbmRSZXR1cm5QYXNzTW9k
ZWwuQnlQb2ludGVyKHNlbGYudHlwZV9uYW1lKQotCi0gICAgICAgIGRlZiBnZXRfaW5wdXRfcGFy
YW1fdHlwZV90ZXh0KHNlbGYpOgotICAgICAgICAgICAgaWYgc2VsZi5pc19oZWF2eToKLSAgICAg
ICAgICAgICAgICByZXR1cm4gImNvbnN0ICVzJiIgJSBzZWxmLnR5cGVfbmFtZQotICAgICAgICAg
ICAgZWxzZToKLSAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi50eXBlX25hbWUKLQotICAgICAg
ICBkZWYgZ2V0X29wdF9vdXRwdXRfdHlwZV8oc2VsZik6Ci0gICAgICAgICAgICByZXR1cm4gc2Vs
Zi50eXBlX25hbWUKLQotICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgIGRlZiBnZXRfZXZl
bnRfc2V0dGVyX2V4cHJlc3Npb25fcGF0dGVybigpOgotICAgICAgICAgICAgcmV0dXJuICIlcyIK
LQotICAgICAgICBjbGFzcyBWYWx1ZU9wdGlvbmFsOgotICAgICAgICAgICAgZGVmIF9faW5pdF9f
KHNlbGYsIGJhc2UpOgotICAgICAgICAgICAgICAgIHNlbGYuYmFzZSA9IGJhc2UKLQotICAgICAg
ICAgICAgZGVmIGdldF9vcHRpb25hbChzZWxmKToKLSAgICAgICAgICAgICAgICByZXR1cm4gc2Vs
ZgotCi0gICAgICAgICAgICBkZWYgZ2V0X2NvbW1hbmRfcmV0dXJuX3Bhc3NfbW9kZWwoc2VsZik6
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIENvbW1hbmRSZXR1cm5QYXNzTW9kZWwuT3B0T3V0cHV0
KHNlbGYuYmFzZS5nZXRfb3B0X291dHB1dF90eXBlXygpKQotCi0gICAgICAgICAgICBkZWYgZ2V0
X2lucHV0X3BhcmFtX3R5cGVfdGV4dChzZWxmKToKLSAgICAgICAgICAgICAgICByZXR1cm4gImNv
bnN0ICVzKiBjb25zdCIgJSBzZWxmLmJhc2UudHlwZV9uYW1lCi0KLSAgICAgICAgICAgIEBzdGF0
aWNtZXRob2QKLSAgICAgICAgICAgIGRlZiBnZXRfZXZlbnRfc2V0dGVyX2V4cHJlc3Npb25fcGF0
dGVybigpOgotICAgICAgICAgICAgICAgIHJldHVybiAiKiVzIgotCi0gICAgY2xhc3MgRXhhY3Rs
eUludChWYWx1ZVR5cGUpOgotICAgICAgICBkZWYgX19pbml0X18oc2VsZik6Ci0gICAgICAgICAg
ICBUeXBlTW9kZWwuVmFsdWVUeXBlLl9faW5pdF9fKHNlbGYsICJpbnQiLCBGYWxzZSkKLQotICAg
ICAgICBkZWYgZ2V0X2lucHV0X3BhcmFtX3R5cGVfdGV4dChzZWxmKToKLSAgICAgICAgICAgIHJl
dHVybiAiSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6RXhhY3RseUludCIKLQotICAgICAgICBkZWYg
Z2V0X29wdF9vdXRwdXRfdHlwZV8oc2VsZik6Ci0gICAgICAgICAgICByZXR1cm4gIkluc3BlY3Rv
cjo6VHlwZUJ1aWxkZXI6OkV4YWN0bHlJbnQiCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYg
aW5pdF9jbGFzcyhjbHMpOgotICAgICAgICBjbHMuQm9vbCA9IGNscy5WYWx1ZVR5cGUoImJvb2wi
LCBGYWxzZSkKLSAgICAgICAgaWYgRVhBQ1RMWV9JTlRfU1VQUE9SVEVEOgotICAgICAgICAgICAg
Y2xzLkludCA9IGNscy5FeGFjdGx5SW50KCkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGNs
cy5JbnQgPSBjbHMuVmFsdWVUeXBlKCJpbnQiLCBGYWxzZSkKLSAgICAgICAgY2xzLk51bWJlciA9
IGNscy5WYWx1ZVR5cGUoImRvdWJsZSIsIEZhbHNlKQotICAgICAgICBjbHMuU3RyaW5nID0gY2xz
LlZhbHVlVHlwZSgiU3RyaW5nIiwgVHJ1ZSwpCi0gICAgICAgIGNscy5PYmplY3QgPSBjbHMuUmVm
UHRyQmFzZWQoIkluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0IikKLSAgICAgICAgY2xzLkFycmF5
ID0gY2xzLlJlZlB0ckJhc2VkKCJJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5IikKLSAgICAgICAg
Y2xzLkFueSA9IGNscy5SZWZQdHJCYXNlZCgiSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSIpCi0K
LVR5cGVNb2RlbC5pbml0X2NsYXNzKCkKLQotCi0jIENvbGxlY3Rpb24gb2YgSW5zcGVjdG9yT2Jq
ZWN0IGNsYXNzIG1ldGhvZHMgdGhhdCBhcmUgbGlrZWx5IHRvIGJlIG92ZXJsb2FkZWQgaW4gZ2Vu
ZXJhdGVkIGNsYXNzLgotIyBXZSBtdXN0IGV4cGxpY2l0bHkgaW1wb3J0IGFsbCBvdmVybG9hZGVk
IG1ldGhvZHMgb3IgdGhleSB3b24ndCBiZSBhdmFpbGFibGUgdG8gdXNlci4KLUlOU1BFQ1RPUl9P
QkpFQ1RfU0VUVEVSX05BTUVTID0gZnJvemVuc2V0KFsic2V0VmFsdWUiLCAic2V0Qm9vbGVhbiIs
ICJzZXROdW1iZXIiLCAic2V0U3RyaW5nIiwgInNldFZhbHVlIiwgInNldE9iamVjdCIsICJzZXRB
cnJheSJdKQotCi0KLWRlZiBmaXhfdHlwZV9uYW1lKGpzb25fbmFtZSk6Ci0gICAgaWYganNvbl9u
YW1lIGluIFRZUEVfTkFNRV9GSVhfTUFQOgotICAgICAgICBmaXhlZCA9IFRZUEVfTkFNRV9GSVhf
TUFQW2pzb25fbmFtZV0KLQotICAgICAgICBjbGFzcyBSZXN1bHQob2JqZWN0KToKLSAgICAgICAg
ICAgIGNsYXNzX25hbWUgPSBmaXhlZAotCi0gICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAg
ICAgICAgICBkZWYgb3V0cHV0X2NvbW1lbnQod3JpdGVyKToKLSAgICAgICAgICAgICAgICB3cml0
ZXIubmV3bGluZSgiLy8gVHlwZSBvcmlnaW5hbGx5IHdhcyBuYW1lZCAnJXMnLlxuIiAlIGpzb25f
bmFtZSkKLSAgICBlbHNlOgotCi0gICAgICAgIGNsYXNzIFJlc3VsdChvYmplY3QpOgotICAgICAg
ICAgICAgY2xhc3NfbmFtZSA9IGpzb25fbmFtZQotCi0gICAgICAgICAgICBAc3RhdGljbWV0aG9k
Ci0gICAgICAgICAgICBkZWYgb3V0cHV0X2NvbW1lbnQod3JpdGVyKToKLSAgICAgICAgICAgICAg
ICBwYXNzCi0KLSAgICByZXR1cm4gUmVzdWx0Ci0KLQotY2xhc3MgV3JpdGVyOgotICAgIGRlZiBf
X2luaXRfXyhzZWxmLCBvdXRwdXQsIGluZGVudCk6Ci0gICAgICAgIHNlbGYub3V0cHV0ID0gb3V0
cHV0Ci0gICAgICAgIHNlbGYuaW5kZW50ID0gaW5kZW50Ci0KLSAgICBkZWYgbmV3bGluZShzZWxm
LCBzdHIpOgotICAgICAgICBpZiAoc2VsZi5pbmRlbnQpOgotICAgICAgICAgICAgc2VsZi5vdXRw
dXQuYXBwZW5kKHNlbGYuaW5kZW50KQotICAgICAgICBzZWxmLm91dHB1dC5hcHBlbmQoc3RyKQot
Ci0gICAgZGVmIGFwcGVuZChzZWxmLCBzdHIpOgotICAgICAgICBzZWxmLm91dHB1dC5hcHBlbmQo
c3RyKQotCi0gICAgZGVmIG5ld2xpbmVfbXVsdGlsaW5lKHNlbGYsIHN0cik6Ci0gICAgICAgIHBh
cnRzID0gc3RyLnNwbGl0KCdcbicpCi0gICAgICAgIHNlbGYubmV3bGluZShwYXJ0c1swXSkKLSAg
ICAgICAgZm9yIHAgaW4gcGFydHNbMTpdOgotICAgICAgICAgICAgc2VsZi5vdXRwdXQuYXBwZW5k
KCdcbicpCi0gICAgICAgICAgICBpZiBwOgotICAgICAgICAgICAgICAgIHNlbGYubmV3bGluZShw
KQotCi0gICAgZGVmIGFwcGVuZF9tdWx0aWxpbmUoc2VsZiwgc3RyKToKLSAgICAgICAgcGFydHMg
PSBzdHIuc3BsaXQoJ1xuJykKLSAgICAgICAgc2VsZi5hcHBlbmQocGFydHNbMF0pCi0gICAgICAg
IGZvciBwIGluIHBhcnRzWzE6XToKLSAgICAgICAgICAgIHNlbGYub3V0cHV0LmFwcGVuZCgnXG4n
KQotICAgICAgICAgICAgaWYgcDoKLSAgICAgICAgICAgICAgICBzZWxmLm5ld2xpbmUocCkKLQot
ICAgIGRlZiBnZXRfaW5kZW50KHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5pbmRlbnQKLQot
ICAgIGRlZiBnZXRfaW5kZW50ZWQoc2VsZiwgYWRkaXRpb25hbF9pbmRlbnQpOgotICAgICAgICBy
ZXR1cm4gV3JpdGVyKHNlbGYub3V0cHV0LCBzZWxmLmluZGVudCArIGFkZGl0aW9uYWxfaW5kZW50
KQotCi0gICAgZGVmIGluc2VydF93cml0ZXIoc2VsZiwgYWRkaXRpb25hbF9pbmRlbnQpOgotICAg
ICAgICBuZXdfb3V0cHV0ID0gW10KLSAgICAgICAgc2VsZi5vdXRwdXQuYXBwZW5kKG5ld19vdXRw
dXQpCi0gICAgICAgIHJldHVybiBXcml0ZXIobmV3X291dHB1dCwgc2VsZi5pbmRlbnQgKyBhZGRp
dGlvbmFsX2luZGVudCkKLQotCi1jbGFzcyBFbnVtQ29uc3RhbnRzOgotICAgIG1hcF8gPSB7fQot
ICAgIGNvbnN0YW50c18gPSBbXQotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIGFkZF9jb25z
dGFudChjbHMsIHZhbHVlKToKLSAgICAgICAgaWYgdmFsdWUgaW4gY2xzLm1hcF86Ci0gICAgICAg
ICAgICByZXR1cm4gY2xzLm1hcF9bdmFsdWVdCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBw
b3MgPSBsZW4oY2xzLm1hcF8pCi0gICAgICAgICAgICBjbHMubWFwX1t2YWx1ZV0gPSBwb3MKLSAg
ICAgICAgICAgIGNscy5jb25zdGFudHNfLmFwcGVuZCh2YWx1ZSkKLSAgICAgICAgICAgIHJldHVy
biBwb3MKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBnZXRfZW51bV9jb25zdGFudF9jb2Rl
KGNscyk6Ci0gICAgICAgIG91dHB1dCA9IFtdCi0gICAgICAgIGZvciBpdGVtIGluIGNscy5jb25z
dGFudHNfOgotICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgiICAgIFwiIiArIGl0ZW0gKyAiXCIi
KQotICAgICAgICByZXR1cm4gIixcbiIuam9pbihvdXRwdXQpICsgIlxuIgotCi0KLSMgVHlwZWJ1
aWxkZXIgY29kZSBpcyBnZW5lcmF0ZWQgaW4gc2V2ZXJhbCBwYXNzZXM6IGZpcnN0IHR5cGVkZWZz
LCB0aGVuIG90aGVyIGNsYXNzZXMuCi0jIE1hbnVhbCBwYXNzIG1hbmFnZW1lbnQgaXMgbmVlZGVk
IGJlY2F1c2Ugd2UgY2Fubm90IGhhdmUgZm9yd2FyZCBkZWNsYXJhdGlvbnMgZm9yIHR5cGVkZWZz
LgotY2xhc3MgVHlwZUJ1aWxkZXJQYXNzOgotICAgIFRZUEVERUYgPSAidHlwZWRlZiIKLSAgICBN
QUlOID0gIm1haW4iCi0KLQotY2xhc3MgVHlwZUJpbmRpbmdzOgotICAgIEBzdGF0aWNtZXRob2QK
LSAgICBkZWYgY3JlYXRlX25hbWVkX3R5cGVfZGVjbGFyYXRpb24oanNvbl90eXBhYmxlLCBjb250
ZXh0X2RvbWFpbl9uYW1lLCB0eXBlX2RhdGEpOgotICAgICAgICBqc29uX3R5cGUgPSB0eXBlX2Rh
dGEuZ2V0X2pzb25fdHlwZSgpCi0KLSAgICAgICAgY2xhc3MgSGVscGVyOgotICAgICAgICAgICAg
aXNfYWRfaG9jID0gRmFsc2UKLSAgICAgICAgICAgIGZ1bGxfbmFtZV9wcmVmaXhfZm9yX3VzZSA9
ICJJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjoiICsgY29udGV4dF9kb21haW5fbmFtZSArICI6OiIK
LSAgICAgICAgICAgIGZ1bGxfbmFtZV9wcmVmaXhfZm9yX2ltcGwgPSAiSW5zcGVjdG9yOjpUeXBl
QnVpbGRlcjo6IiArIGNvbnRleHRfZG9tYWluX25hbWUgKyAiOjoiCi0KLSAgICAgICAgICAgIEBz
dGF0aWNtZXRob2QKLSAgICAgICAgICAgIGRlZiB3cml0ZV9kb2Mod3JpdGVyKToKLSAgICAgICAg
ICAgICAgICBpZiAiZGVzY3JpcHRpb24iIGluIGpzb25fdHlwZToKLSAgICAgICAgICAgICAgICAg
ICAgd3JpdGVyLm5ld2xpbmUoIi8qICIpCi0gICAgICAgICAgICAgICAgICAgIHdyaXRlci5hcHBl
bmQoanNvbl90eXBlWyJkZXNjcmlwdGlvbiJdKQotICAgICAgICAgICAgICAgICAgICB3cml0ZXIu
YXBwZW5kKCIgKi9cbiIpCi0KLSAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAg
IGRlZiBhZGRfdG9fZm9yd2FyZF9saXN0ZW5lcihmb3J3YXJkX2xpc3RlbmVyKToKLSAgICAgICAg
ICAgICAgICBmb3J3YXJkX2xpc3RlbmVyLmFkZF90eXBlX2RhdGEodHlwZV9kYXRhKQotCi0KLSAg
ICAgICAgZml4ZWRfdHlwZV9uYW1lID0gZml4X3R5cGVfbmFtZShqc29uX3R5cGVbImlkIl0pCi0g
ICAgICAgIHJldHVybiBUeXBlQmluZGluZ3MuY3JlYXRlX3R5cGVfZGVjbGFyYXRpb25fKGpzb25f
dHlwYWJsZSwgY29udGV4dF9kb21haW5fbmFtZSwgZml4ZWRfdHlwZV9uYW1lLCBIZWxwZXIpCi0K
LSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIGNyZWF0ZV9hZF9ob2NfdHlwZV9kZWNsYXJhdGlv
bihqc29uX3R5cGFibGUsIGNvbnRleHRfZG9tYWluX25hbWUsIGFkX2hvY190eXBlX2NvbnRleHQp
OgotICAgICAgICBjbGFzcyBIZWxwZXI6Ci0gICAgICAgICAgICBpc19hZF9ob2MgPSBUcnVlCi0g
ICAgICAgICAgICBmdWxsX25hbWVfcHJlZml4X2Zvcl91c2UgPSBhZF9ob2NfdHlwZV9jb250ZXh0
LmNvbnRhaW5lcl9yZWxhdGl2ZV9uYW1lX3ByZWZpeAotICAgICAgICAgICAgZnVsbF9uYW1lX3By
ZWZpeF9mb3JfaW1wbCA9IGFkX2hvY190eXBlX2NvbnRleHQuY29udGFpbmVyX2Z1bGxfbmFtZV9w
cmVmaXgKLQotICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgZGVmIHdyaXRl
X2RvYyh3cml0ZXIpOgotICAgICAgICAgICAgICAgIHBhc3MKLQotICAgICAgICAgICAgQHN0YXRp
Y21ldGhvZAotICAgICAgICAgICAgZGVmIGFkZF90b19mb3J3YXJkX2xpc3RlbmVyKGZvcndhcmRf
bGlzdGVuZXIpOgotICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgZml4ZWRfdHlwZV9uYW1l
ID0gYWRfaG9jX3R5cGVfY29udGV4dC5nZXRfdHlwZV9uYW1lX2ZpeCgpCi0gICAgICAgIHJldHVy
biBUeXBlQmluZGluZ3MuY3JlYXRlX3R5cGVfZGVjbGFyYXRpb25fKGpzb25fdHlwYWJsZSwgY29u
dGV4dF9kb21haW5fbmFtZSwgZml4ZWRfdHlwZV9uYW1lLCBIZWxwZXIpCi0KLSAgICBAc3RhdGlj
bWV0aG9kCi0gICAgZGVmIGNyZWF0ZV90eXBlX2RlY2xhcmF0aW9uXyhqc29uX3R5cGFibGUsIGNv
bnRleHRfZG9tYWluX25hbWUsIGZpeGVkX3R5cGVfbmFtZSwgaGVscGVyKToKLSAgICAgICAgaWYg
anNvbl90eXBhYmxlWyJ0eXBlIl0gPT0gInN0cmluZyI6Ci0gICAgICAgICAgICBpZiAiZW51bSIg
aW4ganNvbl90eXBhYmxlOgotCi0gICAgICAgICAgICAgICAgY2xhc3MgRW51bUJpbmRpbmc6Ci0g
ICAgICAgICAgICAgICAgICAgIG5lZWRfdXNlcl9ydW50aW1lX2Nhc3RfID0gRmFsc2UKLSAgICAg
ICAgICAgICAgICAgICAgbmVlZF9pbnRlcm5hbF9ydW50aW1lX2Nhc3RfID0gRmFsc2UKLQotICAg
ICAgICAgICAgICAgICAgICBAY2xhc3NtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgZGVmIHJl
c29sdmVfaW5uZXIoY2xzLCByZXNvbHZlX2NvbnRleHQpOgotICAgICAgICAgICAgICAgICAgICAg
ICAgcGFzcwotCi0gICAgICAgICAgICAgICAgICAgIEBjbGFzc21ldGhvZAotICAgICAgICAgICAg
ICAgICAgICBkZWYgcmVxdWVzdF91c2VyX3J1bnRpbWVfY2FzdChjbHMsIHJlcXVlc3QpOgotICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgcmVxdWVzdDoKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjbHMubmVlZF91c2VyX3J1bnRpbWVfY2FzdF8gPSBUcnVlCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmVxdWVzdC5hY2tub3dsZWRnZSgpCi0KLSAgICAgICAgICAgICAgICAgICAg
QGNsYXNzbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgIGRlZiByZXF1ZXN0X2ludGVybmFsX3J1
bnRpbWVfY2FzdChjbHMpOgotICAgICAgICAgICAgICAgICAgICAgICAgY2xzLm5lZWRfaW50ZXJu
YWxfcnVudGltZV9jYXN0XyA9IFRydWUKLQotICAgICAgICAgICAgICAgICAgICBAY2xhc3NtZXRo
b2QKLSAgICAgICAgICAgICAgICAgICAgZGVmIGdldF9jb2RlX2dlbmVyYXRvcihlbnVtX2JpbmRp
bmdfY2xzKToKLSAgICAgICAgICAgICAgICAgICAgICAgICNGSVhNRTogZ2VuZXJhdGUgYWQtaG9j
IGVudW1zIHRvbyBvbmNlIHdlIGZpZ3VyZSBvdXQgaG93IHRvIGJldHRlciBpbXBsZW1lbnQgdGhl
bSBpbiBDKysuCi0gICAgICAgICAgICAgICAgICAgICAgICBjb21tZW50X291dCA9IGhlbHBlci5p
c19hZF9ob2MKLQotICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3MgQ29kZUdlbmVyYXRvcjoK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZGVmIGdlbmVyYXRlX3R5cGVfYnVpbGRlcih3cml0ZXIsIGdlbmVyYXRl
X2NvbnRleHQpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtID0ganNvbl90
eXBhYmxlWyJlbnVtIl0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscGVyLndy
aXRlX2RvYyh3cml0ZXIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW1fbmFt
ZSA9IGZpeGVkX3R5cGVfbmFtZS5jbGFzc19uYW1lCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZpeGVkX3R5cGVfbmFtZS5vdXRwdXRfY29tbWVudCh3cml0ZXIpCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCJzdHJ1Y3QgIikKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVuZChlbnVtX25hbWUpCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5hcHBlbmQoIiB7XG4iKQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3bGluZSgiICAgIGVudW0gRW51bSB7XG4i
KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgZW51bV9pdGVtIGluIGVudW06
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtX3BvcyA9IEVudW1Db25z
dGFudHMuYWRkX2NvbnN0YW50KGVudW1faXRlbSkKLQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaXRlbV9jX25hbWUgPSBmaXhfY2FtZWxfY2FzZShlbnVtX2l0ZW0pCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBpdGVtX2NfbmFtZSBpbiBUWVBFX05B
TUVfRklYX01BUDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVt
X2NfbmFtZSA9IFRZUEVfTkFNRV9GSVhfTUFQW2l0ZW1fY19uYW1lXQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIiAgICAgICAgIikKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5hcHBlbmQoaXRlbV9jX25hbWUpCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuYXBwZW5kKCIgPSAiKQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVuZCgiJXMiICUg
ZW51bV9wb3MpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuYXBw
ZW5kKCIsXG4iKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3bGlu
ZSgiICAgIH07XG4iKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBlbnVtX2Jp
bmRpbmdfY2xzLm5lZWRfdXNlcl9ydW50aW1lX2Nhc3RfOgotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJOb3QgeWV0IGltcGxlbWVudGVkIikKLQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBlbnVtX2JpbmRpbmdfY2xzLm5lZWRf
aW50ZXJuYWxfcnVudGltZV9jYXN0XzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHdyaXRlci5hcHBlbmQoIiNpZiAlc1xuIiAlIFZBTElEQVRPUl9JRkRFRl9OQU1FKQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIiAgICBzdGF0
aWMgdm9pZCBhc3NlcnRDb3JyZWN0VmFsdWUoSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSogdmFs
dWUpO1xuIikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5hcHBl
bmQoIiNlbmRpZiAgLy8gJXNcbiIgJSBWQUxJREFUT1JfSUZERUZfTkFNRSkKLQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlciA9IGdlbmVyYXRlX2Nv
bnRleHQudmFsaWRhdG9yX3dyaXRlcgotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkb21haW5fZml4ZXMgPSBEb21haW5OYW1lRml4ZXMuZ2V0X2ZpeGVkX2RhdGEoY29udGV4
dF9kb21haW5fbmFtZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbWFp
bl9ndWFyZCA9IGRvbWFpbl9maXhlcy5nZXRfZ3VhcmQoKQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgZG9tYWluX2d1YXJkOgotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGRvbWFpbl9ndWFyZC5nZW5lcmF0ZV9vcGVuKHZhbGlkYXRvcl93cml0
ZXIpCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0
ZXIubmV3bGluZSgidm9pZCAlcyVzOjphc3NlcnRDb3JyZWN0VmFsdWUoSW5zcGVjdG9yOjpJbnNw
ZWN0b3JWYWx1ZSogdmFsdWUpXG4iICUgKGhlbHBlci5mdWxsX25hbWVfcHJlZml4X2Zvcl9pbXBs
LCBlbnVtX25hbWUpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRh
dG9yX3dyaXRlci5uZXdsaW5lKCJ7XG4iKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCIgICAgV1RGOjpTdHJpbmcgcztcbiIpCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xp
bmUoIiAgICBib29sIGNhc3RfcmVzID0gdmFsdWUtPmFzU3RyaW5nKCZzKTtcbiIpCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIiAg
ICBBU1NFUlQoY2FzdF9yZXMpO1xuIikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIGxlbihlbnVtKSA+IDA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uZGl0aW9uX2xpc3QgPSBbXQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGZvciBlbnVtX2l0ZW0gaW4gZW51bToKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZW51bV9wb3MgPSBFbnVtQ29uc3RhbnRzLmFkZF9jb25zdGFu
dChlbnVtX2l0ZW0pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbmRpdGlvbl9saXN0LmFwcGVuZCgicyA9PSBcIiVzXCIiICUgZW51bV9pdGVtKQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGlu
ZSgiICAgIEFTU0VSVCglcyk7XG4iICUgIiB8fCAiLmpvaW4oY29uZGl0aW9uX2xpc3QpKQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5l
KCJ9XG4iKQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBkb21haW5f
Z3VhcmQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9tYWluX2d1
YXJkLmdlbmVyYXRlX2Nsb3NlKHZhbGlkYXRvcl93cml0ZXIpCi0KLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgiXG5cbiIpCi0KLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIn07IC8vIHN0cnVj
dCAiKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuYXBwZW5kKGVudW1f
bmFtZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVuZCgiXG4i
KQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRlZiByZWdpc3Rlcl91c2UoZm9yd2FyZF9saXN0ZW5lcik6Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKLQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWYg
Z2V0X2dlbmVyYXRlX3Bhc3NfaWQoKToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIFR5cGVCdWlsZGVyUGFzcy5NQUlOCi0KLSAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBDb2RlR2VuZXJhdG9yCi0KLSAgICAgICAgICAgICAgICAgICAgQGNsYXNzbWV0aG9kCi0g
ICAgICAgICAgICAgICAgICAgIGRlZiBnZXRfdmFsaWRhdG9yX2NhbGxfdGV4dChjbHMpOgotICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhlbHBlci5mdWxsX25hbWVfcHJlZml4X2Zvcl91
c2UgKyBmaXhlZF90eXBlX25hbWUuY2xhc3NfbmFtZSArICI6OmFzc2VydENvcnJlY3RWYWx1ZSIK
LQotICAgICAgICAgICAgICAgICAgICBAY2xhc3NtZXRob2QKLSAgICAgICAgICAgICAgICAgICAg
ZGVmIGdldF9hcnJheV9pdGVtX2NfdHlwZV90ZXh0KGNscyk6Ci0gICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gaGVscGVyLmZ1bGxfbmFtZV9wcmVmaXhfZm9yX3VzZSArIGZpeGVkX3R5cGVf
bmFtZS5jbGFzc19uYW1lICsgIjo6RW51bSIKLQotICAgICAgICAgICAgICAgICAgICBAc3RhdGlj
bWV0aG9kCi0gICAgICAgICAgICAgICAgICAgIGRlZiBnZXRfc2V0dGVyX3ZhbHVlX2V4cHJlc3Np
b25fcGF0dGVybigpOgotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJJbnNwZWN0b3I6
OlR5cGVCdWlsZGVyOjpnZXQlc0VudW1Db25zdGFudFZhbHVlKCVzKSIKLQotICAgICAgICAgICAg
ICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgIGRlZiByZWR1Y2VfdG9f
cmF3X3R5cGUoKToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSYXdUeXBlcy5TdHJp
bmcKLQotICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICAgICAg
ICAgIGRlZiBnZXRfdHlwZV9tb2RlbCgpOgotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IFR5cGVNb2RlbC5FbnVtKGhlbHBlci5mdWxsX25hbWVfcHJlZml4X2Zvcl91c2UgKyBmaXhlZF90
eXBlX25hbWUuY2xhc3NfbmFtZSkKLQotICAgICAgICAgICAgICAgIHJldHVybiBFbnVtQmluZGlu
ZwotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBpZiBoZWxwZXIuaXNfYWRfaG9j
OgotCi0gICAgICAgICAgICAgICAgICAgIGNsYXNzIFBsYWluU3RyaW5nOgotICAgICAgICAgICAg
ICAgICAgICAgICAgQGNsYXNzbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWYgcmVz
b2x2ZV9pbm5lcihjbHMsIHJlc29sdmVfY29udGV4dCk6Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcGFzcwotCi0gICAgICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAg
ICAgICAgICAgICAgICAgICAgICBkZWYgcmVxdWVzdF91c2VyX3J1bnRpbWVfY2FzdChyZXF1ZXN0
KToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIlVuc3VwcG9y
dGVkIikKLQotICAgICAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAg
ICAgICAgICAgICAgICAgZGVmIHJlcXVlc3RfaW50ZXJuYWxfcnVudGltZV9jYXN0KCk6Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcGFzcwotCi0gICAgICAgICAgICAgICAgICAgICAgICBA
c3RhdGljbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X2NvZGVfZ2VuZXJh
dG9yKCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKLQotICAgICAg
ICAgICAgICAgICAgICAgICAgQGNsYXNzbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgICAgICBk
ZWYgZ2V0X3ZhbGlkYXRvcl9jYWxsX3RleHQoY2xzKToKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gUmF3VHlwZXMuU3RyaW5nLmdldF9yYXdfdmFsaWRhdG9yX2NhbGxfdGV4dCgp
Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGRlZiByZWR1Y2VfdG9fcmF3X3R5cGUoKToKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gUmF3VHlwZXMuU3RyaW5nCi0KLSAgICAgICAgICAgICAgICAgICAgICAg
IEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBnZXRfdHlwZV9tb2Rl
bCgpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBUeXBlTW9kZWwuU3RyaW5n
Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGRlZiBnZXRfc2V0dGVyX3ZhbHVlX2V4cHJlc3Npb25fcGF0dGVybigpOgotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb25lCi0KLSAgICAgICAgICAgICAgICAg
ICAgICAgIEBjbGFzc21ldGhvZAotICAgICAgICAgICAgICAgICAgICAgICAgZGVmIGdldF9hcnJh
eV9pdGVtX2NfdHlwZV90ZXh0KGNscyk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGNscy5yZWR1Y2VfdG9fcmF3X3R5cGUoKS5nZXRfYXJyYXlfaXRlbV9yYXdfY190eXBlX3Rl
eHQoKQotCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBQbGFpblN0cmluZwotCi0gICAgICAg
ICAgICAgICAgZWxzZToKLQotICAgICAgICAgICAgICAgICAgICBjbGFzcyBUeXBlZGVmU3RyaW5n
OgotICAgICAgICAgICAgICAgICAgICAgICAgQGNsYXNzbWV0aG9kCi0gICAgICAgICAgICAgICAg
ICAgICAgICBkZWYgcmVzb2x2ZV9pbm5lcihjbHMsIHJlc29sdmVfY29udGV4dCk6Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcGFzcwotCi0gICAgICAgICAgICAgICAgICAgICAgICBAc3Rh
dGljbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWYgcmVxdWVzdF91c2VyX3J1bnRp
bWVfY2FzdChyZXF1ZXN0KToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBFeGNl
cHRpb24oIlVuc3VwcG9ydGVkIikKLQotICAgICAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21l
dGhvZAotICAgICAgICAgICAgICAgICAgICAgICAgZGVmIHJlcXVlc3RfaW50ZXJuYWxfcnVudGlt
ZV9jYXN0KCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgUmF3VHlwZXMuU3RyaW5nLnJl
cXVlc3RfcmF3X2ludGVybmFsX3J1bnRpbWVfY2FzdCgpCi0KLSAgICAgICAgICAgICAgICAgICAg
ICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBnZXRfY29kZV9n
ZW5lcmF0b3IoKToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcyBDb2RlR2VuZXJh
dG9yOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBnZW5lcmF0ZV90eXBlX2J1aWxkZXIod3Jp
dGVyLCBnZW5lcmF0ZV9jb250ZXh0KToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGhlbHBlci53cml0ZV9kb2Mod3JpdGVyKQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZml4ZWRfdHlwZV9uYW1lLm91dHB1dF9jb21tZW50KHdyaXRlcikKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCJ0eXBlZGVmIFN0cmlu
ZyAiKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVuZChm
aXhlZF90eXBlX25hbWUuY2xhc3NfbmFtZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHdyaXRlci5hcHBlbmQoIjtcblxuIikKLQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRl
ZiByZWdpc3Rlcl91c2UoZm9yd2FyZF9saXN0ZW5lcik6Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwYXNzCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQHN0
YXRpY21ldGhvZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X2dlbmVy
YXRlX3Bhc3NfaWQoKToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBUeXBlQnVpbGRlclBhc3MuVFlQRURFRgotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIENvZGVHZW5lcmF0b3IKLQotICAgICAgICAgICAgICAgICAgICAgICAgQGNsYXNzbWV0
aG9kCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X3ZhbGlkYXRvcl9jYWxsX3RleHQo
Y2xzKToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmF3VHlwZXMuU3RyaW5n
LmdldF9yYXdfdmFsaWRhdG9yX2NhbGxfdGV4dCgpCi0KLSAgICAgICAgICAgICAgICAgICAgICAg
IEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlZiByZWR1Y2VfdG9fcmF3
X3R5cGUoKToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmF3VHlwZXMuU3Ry
aW5nCi0KLSAgICAgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGRlZiBnZXRfdHlwZV9tb2RlbCgpOgotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBUeXBlTW9kZWwuVmFsdWVUeXBlKCIlcyVzIiAlIChoZWxwZXIuZnVsbF9u
YW1lX3ByZWZpeF9mb3JfdXNlLCBmaXhlZF90eXBlX25hbWUuY2xhc3NfbmFtZSksIFRydWUpCi0K
LSAgICAgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGRlZiBnZXRfc2V0dGVyX3ZhbHVlX2V4cHJlc3Npb25fcGF0dGVybigpOgotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb25lCi0KLSAgICAgICAgICAgICAgICAgICAg
ICAgIEBjbGFzc21ldGhvZAotICAgICAgICAgICAgICAgICAgICAgICAgZGVmIGdldF9hcnJheV9p
dGVtX2NfdHlwZV90ZXh0KGNscyk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
ICJjb25zdCAlcyVzJiIgJSAoaGVscGVyLmZ1bGxfbmFtZV9wcmVmaXhfZm9yX3VzZSwgZml4ZWRf
dHlwZV9uYW1lLmNsYXNzX25hbWUpCi0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFR5cGVk
ZWZTdHJpbmcKLQotICAgICAgICBlbGlmIGpzb25fdHlwYWJsZVsidHlwZSJdID09ICJpbnRlZ2Vy
IjoKLSAgICAgICAgICAgICAgICBpZiBoZWxwZXIuaXNfYWRfaG9jOgotCi0gICAgICAgICAgICAg
ICAgICAgIGNsYXNzIFBsYWluSW50ZWdlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgIEBjbGFz
c21ldGhvZAotICAgICAgICAgICAgICAgICAgICAgICAgZGVmIHJlc29sdmVfaW5uZXIoY2xzLCBy
ZXNvbHZlX2NvbnRleHQpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKLQotICAg
ICAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgICAgICAgICAg
ICAgZGVmIHJlcXVlc3RfdXNlcl9ydW50aW1lX2Nhc3QocmVxdWVzdCk6Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJVbnN1cHBvcnRlZCIpCi0KLSAgICAgICAg
ICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgICAgIGRl
ZiByZXF1ZXN0X2ludGVybmFsX3J1bnRpbWVfY2FzdCgpOgotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHBhc3MKLQotICAgICAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAg
ICAgICAgICAgICAgICAgICAgICAgZGVmIGdldF9jb2RlX2dlbmVyYXRvcigpOgotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBOb25lCi0KLSAgICAgICAgICAgICAgICAgICAgICAg
IEBjbGFzc21ldGhvZAotICAgICAgICAgICAgICAgICAgICAgICAgZGVmIGdldF92YWxpZGF0b3Jf
Y2FsbF90ZXh0KGNscyk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJhd1R5
cGVzLkludC5nZXRfcmF3X3ZhbGlkYXRvcl9jYWxsX3RleHQoKQotCi0gICAgICAgICAgICAgICAg
ICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWYgcmVkdWNl
X3RvX3Jhd190eXBlKCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJhd1R5
cGVzLkludAotCi0gICAgICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAg
ICAgICAgICAgICAgICAgICBkZWYgZ2V0X3R5cGVfbW9kZWwoKToKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gVHlwZU1vZGVsLkludAotCi0gICAgICAgICAgICAgICAgICAgICAg
ICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X3NldHRlcl92
YWx1ZV9leHByZXNzaW9uX3BhdHRlcm4oKToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gTm9uZQotCi0gICAgICAgICAgICAgICAgICAgICAgICBAY2xhc3NtZXRob2QKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGRlZiBnZXRfYXJyYXlfaXRlbV9jX3R5cGVfdGV4dChjbHMpOgot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjbHMucmVkdWNlX3RvX3Jhd190eXBl
KCkuZ2V0X2FycmF5X2l0ZW1fcmF3X2NfdHlwZV90ZXh0KCkKLQotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gUGxhaW5JbnRlZ2VyCi0KLSAgICAgICAgICAgICAgICBlbHNlOgotCi0gICAgICAg
ICAgICAgICAgICAgIGNsYXNzIFR5cGVkZWZJbnRlZ2VyOgotICAgICAgICAgICAgICAgICAgICAg
ICAgQGNsYXNzbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWYgcmVzb2x2ZV9pbm5l
cihjbHMsIHJlc29sdmVfY29udGV4dCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFz
cwotCi0gICAgICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICAg
ICAgICAgICAgICBkZWYgcmVxdWVzdF91c2VyX3J1bnRpbWVfY2FzdChyZXF1ZXN0KToKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIlVuc3VwcG9ydGVkIikKLQot
ICAgICAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgICAgICAg
ICAgICAgZGVmIHJlcXVlc3RfaW50ZXJuYWxfcnVudGltZV9jYXN0KCk6Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgUmF3VHlwZXMuSW50LnJlcXVlc3RfcmF3X2ludGVybmFsX3J1bnRpbWVf
Y2FzdCgpCi0KLSAgICAgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGRlZiBnZXRfY29kZV9nZW5lcmF0b3IoKToKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjbGFzcyBDb2RlR2VuZXJhdG9yOgotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGRlZiBnZW5lcmF0ZV90eXBlX2J1aWxkZXIod3JpdGVyLCBnZW5lcmF0ZV9jb250ZXh0KToKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHBlci53cml0ZV9kb2Mod3JpdGVy
KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZml4ZWRfdHlwZV9uYW1lLm91
dHB1dF9jb21tZW50KHdyaXRlcikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHdyaXRlci5uZXdsaW5lKCJ0eXBlZGVmIGludCAiKQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgd3JpdGVyLmFwcGVuZChmaXhlZF90eXBlX25hbWUuY2xhc3NfbmFtZSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5hcHBlbmQoIjtcblxuIikK
LQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGRlZiByZWdpc3Rlcl91c2UoZm9yd2FyZF9saXN0ZW5l
cik6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCi0KLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkZWYgZ2V0X2dlbmVyYXRlX3Bhc3NfaWQoKToKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBUeXBlQnVpbGRlclBhc3MuVFlQRURFRgotCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENvZGVHZW5lcmF0b3IKLQotICAgICAg
ICAgICAgICAgICAgICAgICAgQGNsYXNzbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgICAgICBk
ZWYgZ2V0X3ZhbGlkYXRvcl9jYWxsX3RleHQoY2xzKToKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gUmF3VHlwZXMuSW50LmdldF9yYXdfdmFsaWRhdG9yX2NhbGxfdGV4dCgpCi0K
LSAgICAgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGRlZiByZWR1Y2VfdG9fcmF3X3R5cGUoKToKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gUmF3VHlwZXMuSW50Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIEBzdGF0
aWNtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBnZXRfdHlwZV9tb2RlbCgpOgot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBUeXBlTW9kZWwuSW50Ci0KLSAgICAg
ICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgICAg
IGRlZiBnZXRfc2V0dGVyX3ZhbHVlX2V4cHJlc3Npb25fcGF0dGVybigpOgotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBOb25lCi0KLSAgICAgICAgICAgICAgICAgICAgICAgIEBj
bGFzc21ldGhvZAotICAgICAgICAgICAgICAgICAgICAgICAgZGVmIGdldF9hcnJheV9pdGVtX2Nf
dHlwZV90ZXh0KGNscyk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhlbHBl
ci5mdWxsX25hbWVfcHJlZml4X2Zvcl91c2UgKyBmaXhlZF90eXBlX25hbWUuY2xhc3NfbmFtZQot
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBUeXBlZGVmSW50ZWdlcgotCi0gICAgICAgIGVs
aWYganNvbl90eXBhYmxlWyJ0eXBlIl0gPT0gIm9iamVjdCI6Ci0gICAgICAgICAgICBpZiAicHJv
cGVydGllcyIgaW4ganNvbl90eXBhYmxlOgotCi0gICAgICAgICAgICAgICAgY2xhc3MgQ2xhc3NC
aW5kaW5nOgotICAgICAgICAgICAgICAgICAgICByZXNvbHZlX2RhdGFfID0gTm9uZQotICAgICAg
ICAgICAgICAgICAgICBuZWVkX3VzZXJfcnVudGltZV9jYXN0XyA9IEZhbHNlCi0gICAgICAgICAg
ICAgICAgICAgIG5lZWRfaW50ZXJuYWxfcnVudGltZV9jYXN0XyA9IEZhbHNlCi0KLSAgICAgICAg
ICAgICAgICAgICAgQGNsYXNzbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgIGRlZiByZXNvbHZl
X2lubmVyKGNscywgcmVzb2x2ZV9jb250ZXh0KToKLSAgICAgICAgICAgICAgICAgICAgICAgIGlm
IGNscy5yZXNvbHZlX2RhdGFfOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybgot
Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzID0ganNvbl90eXBhYmxlWyJwcm9w
ZXJ0aWVzIl0KLSAgICAgICAgICAgICAgICAgICAgICAgIG1haW4gPSBbXQotICAgICAgICAgICAg
ICAgICAgICAgICAgb3B0aW9uYWwgPSBbXQotCi0gICAgICAgICAgICAgICAgICAgICAgICBhZF9o
b2NfdHlwZV9saXN0ID0gW10KLQotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHByb3AgaW4g
cHJvcGVydGllczoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wX25hbWUgPSBwcm9w
WyJuYW1lIl0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZF9ob2NfdHlwZV9jb250ZXh0
ID0gY2xzLkFkSG9jVHlwZUNvbnRleHRJbXBsKHByb3BfbmFtZSwgZml4ZWRfdHlwZV9uYW1lLmNs
YXNzX25hbWUsIHJlc29sdmVfY29udGV4dCwgYWRfaG9jX3R5cGVfbGlzdCwgaGVscGVyLmZ1bGxf
bmFtZV9wcmVmaXhfZm9yX2ltcGwpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmluZGlu
ZyA9IHJlc29sdmVfcGFyYW1fdHlwZShwcm9wLCBjb250ZXh0X2RvbWFpbl9uYW1lLCBhZF9ob2Nf
dHlwZV9jb250ZXh0KQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZV9nZW5lcmF0
b3IgPSBiaW5kaW5nLmdldF9jb2RlX2dlbmVyYXRvcigpCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgY29kZV9nZW5lcmF0b3I6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvZGVfZ2VuZXJhdG9yLnJlZ2lzdGVyX3VzZShyZXNvbHZlX2NvbnRleHQuZm9yd2FyZF9saXN0
ZW5lcikKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzIFByb3BlcnR5RGF0YToK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1fdHlwZV9iaW5kaW5nID0gYmlu
ZGluZwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwID0gcHJvcAotCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgcHJvcC5nZXQoIm9wdGlvbmFsIik6Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbmFsLmFwcGVuZChQcm9wZXJ0eURhdGEpCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbWFpbi5hcHBlbmQoUHJvcGVydHlEYXRhKQotCi0gICAgICAgICAgICAgICAgICAgICAg
ICBjbGFzcyBSZXNvbHZlRGF0YToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWluX3By
b3BlcnRpZXMgPSBtYWluCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWxfcHJv
cGVydGllcyA9IG9wdGlvbmFsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRfaG9jX3R5
cGVzID0gYWRfaG9jX3R5cGVfbGlzdAotCi0gICAgICAgICAgICAgICAgICAgICAgICBjbHMucmVz
b2x2ZV9kYXRhXyA9IFJlc29sdmVEYXRhCi0KLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciBh
ZF9ob2MgaW4gYWRfaG9jX3R5cGVfbGlzdDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBh
ZF9ob2MucmVzb2x2ZV9pbm5lcihyZXNvbHZlX2NvbnRleHQpCi0KLSAgICAgICAgICAgICAgICAg
ICAgQGNsYXNzbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgIGRlZiByZXF1ZXN0X3VzZXJfcnVu
dGltZV9jYXN0KGNscywgcmVxdWVzdCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiBub3Qg
cmVxdWVzdDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4KLSAgICAgICAgICAg
ICAgICAgICAgICAgIGNscy5uZWVkX3VzZXJfcnVudGltZV9jYXN0XyA9IFRydWUKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHJlcXVlc3QuYWNrbm93bGVkZ2UoKQotICAgICAgICAgICAgICAgICAg
ICAgICAgY2xzLnJlcXVlc3RfaW50ZXJuYWxfcnVudGltZV9jYXN0KCkKLQotICAgICAgICAgICAg
ICAgICAgICBAY2xhc3NtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgZGVmIHJlcXVlc3RfaW50
ZXJuYWxfcnVudGltZV9jYXN0KGNscyk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiBjbHMu
bmVlZF9pbnRlcm5hbF9ydW50aW1lX2Nhc3RfOgotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybgotICAgICAgICAgICAgICAgICAgICAgICAgY2xzLm5lZWRfaW50ZXJuYWxfcnVudGlt
ZV9jYXN0XyA9IFRydWUKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciBwIGluIGNscy5yZXNv
bHZlX2RhdGFfLm1haW5fcHJvcGVydGllczoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
LnBhcmFtX3R5cGVfYmluZGluZy5yZXF1ZXN0X2ludGVybmFsX3J1bnRpbWVfY2FzdCgpCi0gICAg
ICAgICAgICAgICAgICAgICAgICBmb3IgcCBpbiBjbHMucmVzb2x2ZV9kYXRhXy5vcHRpb25hbF9w
cm9wZXJ0aWVzOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAucGFyYW1fdHlwZV9iaW5k
aW5nLnJlcXVlc3RfaW50ZXJuYWxfcnVudGltZV9jYXN0KCkKLQotICAgICAgICAgICAgICAgICAg
ICBAY2xhc3NtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgZGVmIGdldF9jb2RlX2dlbmVyYXRv
cihjbGFzc19iaW5kaW5nX2Nscyk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcyBDb2Rl
R2VuZXJhdG9yOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBjbGFzc21ldGhvZAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBnZW5lcmF0ZV90eXBlX2J1aWxkZXIoY2xzLCB3
cml0ZXIsIGdlbmVyYXRlX2NvbnRleHQpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXNvbHZlX2RhdGEgPSBjbGFzc19iaW5kaW5nX2Nscy5yZXNvbHZlX2RhdGFfCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHBlci53cml0ZV9kb2Mod3JpdGVyKQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc19uYW1lID0gZml4ZWRfdHlwZV9uYW1lLmNs
YXNzX25hbWUKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc19vcGVuX3R5cGUg
PSAoY29udGV4dF9kb21haW5fbmFtZSArICIuIiArIGNsYXNzX25hbWUpIGluIFRZUEVTX1dJVEhf
T1BFTl9GSUVMRF9MSVNUX1NFVAotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZp
eGVkX3R5cGVfbmFtZS5vdXRwdXRfY29tbWVudCh3cml0ZXIpCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCJjbGFzcyAiKQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB3cml0ZXIuYXBwZW5kKGNsYXNzX25hbWUpCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHdyaXRlci5hcHBlbmQoIiA6IHB1YmxpYyAiKQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiBpc19vcGVuX3R5cGU6Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB3cml0ZXIuYXBwZW5kKCJJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVj
dCIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuYXBwZW5kKCJJbnNwZWN0b3I6Okluc3BlY3Rv
ck9iamVjdEJhc2UiKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuYXBw
ZW5kKCIge1xuIikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xp
bmUoInB1YmxpYzpcbiIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkX2hvY190
eXBlX3dyaXRlciA9IHdyaXRlci5pbnNlcnRfd3JpdGVyKCIgICAgIikKLQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmb3IgYWRfaG9jX3R5cGUgaW4gcmVzb2x2ZV9kYXRhLmFkX2hv
Y190eXBlczoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVfZ2VuZXJh
dG9yID0gYWRfaG9jX3R5cGUuZ2V0X2NvZGVfZ2VuZXJhdG9yKCkKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIGNvZGVfZ2VuZXJhdG9yOgotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvZGVfZ2VuZXJhdG9yLmdlbmVyYXRlX3R5cGVfYnVpbGRl
cihhZF9ob2NfdHlwZV93cml0ZXIsIGdlbmVyYXRlX2NvbnRleHQpCi0KLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmVfbXVsdGlsaW5lKAotIiIiICAgIGVudW0g
ewotICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCi0iIiIpCi0KLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3RhdGVfZW51bV9pdGVtcyA9IFtdCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIGxlbihyZXNvbHZlX2RhdGEubWFpbl9wcm9wZXJ0aWVzKSA+IDA6Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3MgPSAwCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmb3IgcHJvcF9kYXRhIGluIHJlc29sdmVfZGF0YS5tYWluX3By
b3BlcnRpZXM6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbV9u
YW1lID0gQ2FwaXRhbGl6ZXIubG93ZXJfY2FtZWxfY2FzZV90b191cHBlcihwcm9wX2RhdGEucFsi
bmFtZSJdKSArICJTZXQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3RhdGVfZW51bV9pdGVtcy5hcHBlbmQoaXRlbV9uYW1lKQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCIgICAgICAgICVzID0gMSA8PCAlcyxc
biIgJSAoaXRlbV9uYW1lLCBwb3MpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHBvcyArPSAxCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxf
ZmllbGRzX3NldF92YWx1ZSA9ICIoIiArICgiIHwgIi5qb2luKHN0YXRlX2VudW1faXRlbXMpKSAr
ICIpIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYWxsX2ZpZWxkc19zZXRfdmFsdWUgPSAiMCIKLQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3bGluZV9tdWx0aWxpbmUoQ29k
ZUdlbmVyYXRvckluc3BlY3RvclN0cmluZ3MuY2xhc3NfYmluZGluZ19idWlsZGVyX3BhcnRfMQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
JSAoYWxsX2ZpZWxkc19zZXRfdmFsdWUsIGNsYXNzX25hbWUsIGNsYXNzX25hbWUpKQotCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcyA9IDAKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZm9yIHByb3BfZGF0YSBpbiByZXNvbHZlX2RhdGEubWFpbl9wcm9wZXJ0aWVz
OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcF9uYW1lID0gcHJvcF9k
YXRhLnBbIm5hbWUiXQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJh
bV90eXBlX2JpbmRpbmcgPSBwcm9wX2RhdGEucGFyYW1fdHlwZV9iaW5kaW5nCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbV9yYXdfdHlwZSA9IHBhcmFtX3R5cGVfYmlu
ZGluZy5yZWR1Y2VfdG9fcmF3X3R5cGUoKQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB3cml0ZXIubmV3bGluZV9tdWx0aWxpbmUoQ29kZUdlbmVyYXRvckluc3BlY3RvclN0
cmluZ3MuY2xhc3NfYmluZGluZ19idWlsZGVyX3BhcnRfMgotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICUgKHN0YXRlX2VudW1faXRlbXNbcG9zXSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDYXBpdGFsaXplci5sb3dlcl9jYW1lbF9j
YXNlX3RvX3VwcGVyKHByb3BfbmFtZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcGFyYW1fdHlwZV9iaW5kaW5nLmdldF90eXBlX21vZGVsKCkuZ2V0X2lucHV0
X3BhcmFtX3R5cGVfdGV4dCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0YXRlX2VudW1faXRlbXNbcG9zXSwgcHJvcF9uYW1lLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtX3Jhd190eXBlLmdldF9zZXR0ZXJfbmFt
ZSgpLCBwcm9wX25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZm9ybWF0X3NldHRlcl92YWx1ZV9leHByZXNzaW9uKHBhcmFtX3R5cGVfYmluZGluZywgInZh
bHVlIiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVf
ZW51bV9pdGVtc1twb3NdKSkKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cG9zICs9IDEKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3bGlu
ZV9tdWx0aWxpbmUoQ29kZUdlbmVyYXRvckluc3BlY3RvclN0cmluZ3MuY2xhc3NfYmluZGluZ19i
dWlsZGVyX3BhcnRfMwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJSAoY2xhc3NfbmFtZSwgY2xhc3NfbmFtZSwgY2xhc3NfbmFtZSwgY2xh
c3NfbmFtZSwgY2xhc3NfbmFtZSkpCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
d3JpdGVyLm5ld2xpbmUoIiAgICAvKlxuIikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgd3JpdGVyLm5ld2xpbmUoIiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6XG4iKQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3bGluZSgiICAgICAqIFJlZlB0
cjwlcz4gcmVzdWx0ID0gJXM6OmNyZWF0ZSgpIiAlIChjbGFzc19uYW1lLCBjbGFzc19uYW1lKSkK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHByb3BfZGF0YSBpbiByZXNvbHZl
X2RhdGEubWFpbl9wcm9wZXJ0aWVzOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgd3JpdGVyLmFwcGVuZF9tdWx0aWxpbmUoIlxuICAgICAqICAgICAuc2V0JXMoLi4uKSIgJSBD
YXBpdGFsaXplci5sb3dlcl9jYW1lbF9jYXNlX3RvX3VwcGVyKHByb3BfZGF0YS5wWyJuYW1lIl0p
KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuYXBwZW5kX211bHRpbGlu
ZSgiO1xuICAgICAqL1xuIikKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0
ZXIubmV3bGluZV9tdWx0aWxpbmUoQ29kZUdlbmVyYXRvckluc3BlY3RvclN0cmluZ3MuY2xhc3Nf
YmluZGluZ19idWlsZGVyX3BhcnRfNCkKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB3cml0ZXIubmV3bGluZSgiICAgIHR5cGVkZWYgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6U3Ry
dWN0SXRlbVRyYWl0cyBJdGVtVHJhaXRzO1xuIikKLQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBmb3IgcHJvcF9kYXRhIGluIHJlc29sdmVfZGF0YS5vcHRpb25hbF9wcm9wZXJ0aWVz
OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcF9uYW1lID0gcHJvcF9k
YXRhLnBbIm5hbWUiXQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1f
dHlwZV9iaW5kaW5nID0gcHJvcF9kYXRhLnBhcmFtX3R5cGVfYmluZGluZwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2V0dGVyX25hbWUgPSAic2V0JXMiICUgQ2FwaXRhbGl6
ZXIubG93ZXJfY2FtZWxfY2FzZV90b191cHBlcihwcm9wX25hbWUpCi0KLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5hcHBlbmRfbXVsdGlsaW5lKCJcbiAgICB2b2lk
ICVzIiAlIHNldHRlcl9uYW1lKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
d3JpdGVyLmFwcGVuZCgiKCVzIHZhbHVlKVxuIiAlIHBhcmFtX3R5cGVfYmluZGluZy5nZXRfdHlw
ZV9tb2RlbCgpLmdldF9pbnB1dF9wYXJhbV90eXBlX3RleHQoKSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCIgICAge1xuIikKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCIgICAgICAgIHRoaXMtPnNl
dCVzKEFTQ0lJTGl0ZXJhbChcIiVzXCIpLCAlcyk7XG4iCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJSAocGFyYW1fdHlwZV9iaW5kaW5nLnJlZHVjZV90b19yYXdfdHlw
ZSgpLmdldF9zZXR0ZXJfbmFtZSgpLCBwcm9wX2RhdGEucFsibmFtZSJdLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdF9zZXR0ZXJfdmFsdWVfZXhwcmVz
c2lvbihwYXJhbV90eXBlX2JpbmRpbmcsICJ2YWx1ZSIpKSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCIgICAgfVxuIikKLQotCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBzZXR0ZXJfbmFtZSBpbiBJTlNQRUNUT1JfT0JK
RUNUX1NFVFRFUl9OQU1FUzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB3cml0ZXIubmV3bGluZSgiICAgIHVzaW5nIEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0QmFz
ZTo6JXM7XG5cbiIgJSBzZXR0ZXJfbmFtZSkKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiBjbGFzc19iaW5kaW5nX2Nscy5uZWVkX3VzZXJfcnVudGltZV9jYXN0XzoKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCIgICAgc3RhdGlj
IFBhc3NSZWZQdHI8JXM+IHJ1bnRpbWVDYXN0KFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0
b3JWYWx1ZT4gdmFsdWUpXG4iICUgY2xhc3NfbmFtZSkKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCIgICAge1xuIikKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCIgICAgICAgIFJlZlB0cjxJbnNwZWN0
b3I6Okluc3BlY3Rvck9iamVjdD4gb2JqZWN0O1xuIikKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCIgICAgICAgIGJvb2wgY2FzdFJlcyA9IHZhbHVl
LT5hc09iamVjdCgmb2JqZWN0KTtcbiIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB3cml0ZXIubmV3bGluZSgiICAgICAgICBBU1NFUlRfVU5VU0VEKGNhc3RSZXMsIGNhc3RS
ZXMpO1xuIikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5hcHBl
bmQoIiNpZiAlc1xuIiAlIFZBTElEQVRPUl9JRkRFRl9OQU1FKQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIiAgICAgICAgYXNzZXJ0Q29ycmVjdFZh
bHVlKG9iamVjdC5nZXQoKSk7XG4iKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgd3JpdGVyLmFwcGVuZCgiI2VuZGlmICAvLyAlc1xuIiAlIFZBTElEQVRPUl9JRkRFRl9OQU1F
KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIiAg
ICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKCVzKSA9PSBzaXplb2YoSW5zcGVjdG9yOjpJbnNw
ZWN0b3JPYmplY3RCYXNlKSwgdHlwZV9jYXN0X3Byb2JsZW0pO1xuIiAlIGNsYXNzX25hbWUpCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3bGluZSgiICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8JXMqPihzdGF0aWNfY2FzdDxJbnNwZWN0b3I6Okluc3BlY3Rv
ck9iamVjdEJhc2UqPihvYmplY3QuZ2V0KCkpKTtcbiIgJSBjbGFzc19uYW1lKQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIiAgICB9XG4iKQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVuZCgiXG4iKQotCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGNsYXNzX2JpbmRpbmdfY2xzLm5lZWRf
aW50ZXJuYWxfcnVudGltZV9jYXN0XzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHdyaXRlci5hcHBlbmQoIiNpZiAlc1xuIiAlIFZBTElEQVRPUl9JRkRFRl9OQU1FKQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIiAgICBzdGF0
aWMgJXMgdm9pZCBhc3NlcnRDb3JyZWN0VmFsdWUoSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSog
dmFsdWUpO1xuIiAlIElOU1BFQ1RPUl9UWVBFU19HRU5FUkFUT1JfQ09ORklHX01BUFtvdXRwdXRf
dHlwZV1bImV4cG9ydF9tYWNybyJdKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgd3JpdGVyLmFwcGVuZCgiI2VuZGlmICAvLyAlc1xuIiAlIFZBTElEQVRPUl9JRkRFRl9OQU1F
KQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9zZWRfZmllbGRfc2V0
ID0gKGNvbnRleHRfZG9tYWluX25hbWUgKyAiLiIgKyBjbGFzc19uYW1lKSBub3QgaW4gVFlQRVNf
V0lUSF9PUEVOX0ZJRUxEX0xJU1RfU0VUCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHZhbGlkYXRvcl93cml0ZXIgPSBnZW5lcmF0ZV9jb250ZXh0LnZhbGlkYXRvcl93cml0
ZXIKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9tYWluX2ZpeGVzID0g
RG9tYWluTmFtZUZpeGVzLmdldF9maXhlZF9kYXRhKGNvbnRleHRfZG9tYWluX25hbWUpCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb21haW5fZ3VhcmQgPSBkb21haW5fZml4
ZXMuZ2V0X2d1YXJkKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGRv
bWFpbl9ndWFyZDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb21h
aW5fZ3VhcmQuZ2VuZXJhdGVfb3Blbih2YWxpZGF0b3Jfd3JpdGVyKQotCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoInZvaWQgJXMl
czo6YXNzZXJ0Q29ycmVjdFZhbHVlKEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUqIHZhbHVlKVxu
IiAlIChoZWxwZXIuZnVsbF9uYW1lX3ByZWZpeF9mb3JfaW1wbCwgY2xhc3NfbmFtZSkpCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUo
IntcbiIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3Jp
dGVyLm5ld2xpbmUoIiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBvYmplY3Q7XG4iKQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5l
KCIgICAgYm9vbCBjYXN0UmVzID0gdmFsdWUtPmFzT2JqZWN0KCZvYmplY3QpO1xuIikKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgi
ICAgIEFTU0VSVF9VTlVTRUQoY2FzdFJlcywgY2FzdFJlcyk7XG4iKQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZm9yIHByb3BfZGF0YSBpbiByZXNvbHZlX2RhdGEubWFpbl9w
cm9wZXJ0aWVzOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlk
YXRvcl93cml0ZXIubmV3bGluZSgiICAgIHtcbiIpCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaXRfbmFtZSA9ICIlc1BvcyIgJSBwcm9wX2RhdGEucFsibmFtZSJdCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5u
ZXdsaW5lKCIgICAgICAgIEluc3BlY3Rvck9iamVjdDo6aXRlcmF0b3IgJXM7XG4iICUgaXRfbmFt
ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3Jp
dGVyLm5ld2xpbmUoIiAgICAgICAgJXMgPSBvYmplY3QtPmZpbmQoXCIlc1wiKTtcbiIgJSAoaXRf
bmFtZSwgcHJvcF9kYXRhLnBbIm5hbWUiXSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCIgICAgICAgIEFTU0VSVCglcyAh
PSBvYmplY3QtPmVuZCgpKTtcbiIgJSBpdF9uYW1lKQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgiICAgICAgICAlcyglcy0+
dmFsdWUuZ2V0KCkpO1xuIiAlIChwcm9wX2RhdGEucGFyYW1fdHlwZV9iaW5kaW5nLmdldF92YWxp
ZGF0b3JfY2FsbF90ZXh0KCksIGl0X25hbWUpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgiICAgIH1cbiIpCi0KLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGNsb3NlZF9maWVsZF9zZXQ6Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXds
aW5lKCIgICAgaW50IGZvdW5kUHJvcGVydGllc0NvdW50ID0gJXM7XG4iICUgbGVuKHJlc29sdmVf
ZGF0YS5tYWluX3Byb3BlcnRpZXMpKQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBmb3IgcHJvcF9kYXRhIGluIHJlc29sdmVfZGF0YS5vcHRpb25hbF9wcm9wZXJ0aWVzOgot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIu
bmV3bGluZSgiICAgIHtcbiIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaXRfbmFtZSA9ICIlc1BvcyIgJSBwcm9wX2RhdGEucFsibmFtZSJdCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCIgICAg
ICAgIEluc3BlY3Rvck9iamVjdDo6aXRlcmF0b3IgJXM7XG4iICUgaXRfbmFtZSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUo
IiAgICAgICAgJXMgPSBvYmplY3QtPmZpbmQoXCIlc1wiKTtcbiIgJSAoaXRfbmFtZSwgcHJvcF9k
YXRhLnBbIm5hbWUiXSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCIgICAgICAgIGlmICglcyAhPSBvYmplY3QtPmVuZCgp
KSB7XG4iICUgaXRfbmFtZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIiAgICAgICAgICAgICVzKCVzLT52YWx1ZS5nZXQo
KSk7XG4iICUgKHByb3BfZGF0YS5wYXJhbV90eXBlX2JpbmRpbmcuZ2V0X3ZhbGlkYXRvcl9jYWxs
X3RleHQoKSwgaXRfbmFtZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgY2xvc2VkX2ZpZWxkX3NldDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCIgICAgICAgICAgICArK2ZvdW5k
UHJvcGVydGllc0NvdW50O1xuIikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIiAgICAgICAgfVxuIikKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIiAg
ICB9XG4iKQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBjbG9zZWRf
ZmllbGRfc2V0OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlk
YXRvcl93cml0ZXIubmV3bGluZSgiICAgIGlmIChmb3VuZFByb3BlcnRpZXNDb3VudCAhPSBvYmpl
Y3QtPnNpemUoKSlcbiIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCIgICAgICAgIEZBVEFMKFwiVW5leHBlY3RlZCBwcm9w
ZXJ0aWVzIGluIG9iamVjdDogJXNcXG5cIiwgb2JqZWN0LT50b0pTT05TdHJpbmcoKS5hc2NpaSgp
LmRhdGEoKSk7XG4iKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRh
dG9yX3dyaXRlci5uZXdsaW5lKCJ9XG4iKQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiBkb21haW5fZ3VhcmQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZG9tYWluX2d1YXJkLmdlbmVyYXRlX2Nsb3NlKHZhbGlkYXRvcl93cml0ZXIpCi0K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3
bGluZSgiXG5cbiIpCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgaXNfb3Bl
bl90eXBlOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3BwX3dyaXRlciA9
IGdlbmVyYXRlX2NvbnRleHQuY3BwX3dyaXRlcgotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgd3JpdGVyLmFwcGVuZCgiXG4iKQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIiAgICAvLyBQcm9wZXJ0eSBuYW1lcyBmb3IgdHlwZSBn
ZW5lcmF0ZWQgYXMgb3Blbi5cbiIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmb3IgcHJvcF9kYXRhIGluIHJlc29sdmVfZGF0YS5tYWluX3Byb3BlcnRpZXMgKyByZXNvbHZl
X2RhdGEub3B0aW9uYWxfcHJvcGVydGllczoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwcm9wX25hbWUgPSBwcm9wX2RhdGEucFsibmFtZSJdCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcF9maWVsZF9uYW1lID0gQ2FwaXRhbGl6ZXIu
bG93ZXJfY2FtZWxfY2FzZV90b191cHBlcihwcm9wX25hbWUpCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIiAgICBzdGF0aWMgY29uc3QgY2hh
ciogJXM7XG4iICUgKHByb3BfZmllbGRfbmFtZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY3BwX3dyaXRlci5uZXdsaW5lKCJjb25zdCBjaGFyKiAlcyVzOjolcyA9
IFwiJXNcIjtcbiIgJSAoaGVscGVyLmZ1bGxfbmFtZV9wcmVmaXhfZm9yX2ltcGwsIGNsYXNzX25h
bWUsIHByb3BfZmllbGRfbmFtZSwgcHJvcF9uYW1lKSkKLQotCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCJ9O1xuXG4iKQotCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRl
ZiBnZW5lcmF0ZV9mb3J3YXJkX2RlY2xhcmF0aW9uKHdyaXRlcik6Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNsYXNzX25hbWUgPSBmaXhlZF90eXBlX25hbWUuY2xhc3NfbmFtZQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3bGluZSgiY2xhc3MgIikK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVuZChjbGFzc19uYW1l
KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuYXBwZW5kKCI7XG4iKQot
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGRlZiByZWdpc3Rlcl91c2UoZm9yd2FyZF9saXN0ZW5lcik6Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHBlci5hZGRfdG9fZm9yd2FyZF9saXN0ZW5l
cihmb3J3YXJkX2xpc3RlbmVyKQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQHN0YXRp
Y21ldGhvZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBnZXRfZ2VuZXJhdGVfcGFz
c19pZCgpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHlwZUJ1aWxk
ZXJQYXNzLk1BSU4KLQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENvZGVHZW5lcmF0
b3IKLQotICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICAgICAg
ICAgIGRlZiBnZXRfdmFsaWRhdG9yX2NhbGxfdGV4dCgpOgotICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGhlbHBlci5mdWxsX25hbWVfcHJlZml4X2Zvcl91c2UgKyBmaXhlZF90eXBlX25h
bWUuY2xhc3NfbmFtZSArICI6OmFzc2VydENvcnJlY3RWYWx1ZSIKLQotICAgICAgICAgICAgICAg
ICAgICBAY2xhc3NtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgZGVmIGdldF9hcnJheV9pdGVt
X2NfdHlwZV90ZXh0KGNscyk6Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaGVscGVy
LmZ1bGxfbmFtZV9wcmVmaXhfZm9yX3VzZSArIGZpeGVkX3R5cGVfbmFtZS5jbGFzc19uYW1lCi0K
LSAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgICAgICAgICBk
ZWYgZ2V0X3NldHRlcl92YWx1ZV9leHByZXNzaW9uX3BhdHRlcm4oKToKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBOb25lCi0KLSAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhv
ZAotICAgICAgICAgICAgICAgICAgICBkZWYgcmVkdWNlX3RvX3Jhd190eXBlKCk6Ci0gICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gUmF3VHlwZXMuT2JqZWN0Ci0KLSAgICAgICAgICAgICAg
ICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X3R5cGVfbW9k
ZWwoKToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBUeXBlTW9kZWwuUmVmUHRyQmFz
ZWQoaGVscGVyLmZ1bGxfbmFtZV9wcmVmaXhfZm9yX3VzZSArIGZpeGVkX3R5cGVfbmFtZS5jbGFz
c19uYW1lKQotCi0gICAgICAgICAgICAgICAgICAgIGNsYXNzIEFkSG9jVHlwZUNvbnRleHRJbXBs
OgotICAgICAgICAgICAgICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHByb3BlcnR5X25h
bWUsIGNsYXNzX25hbWUsIHJlc29sdmVfY29udGV4dCwgYWRfaG9jX3R5cGVfbGlzdCwgcGFyZW50
X2Z1bGxfbmFtZV9wcmVmaXgpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucHJv
cGVydHlfbmFtZSA9IHByb3BlcnR5X25hbWUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
ZWxmLmNsYXNzX25hbWUgPSBjbGFzc19uYW1lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2VsZi5yZXNvbHZlX2NvbnRleHQgPSByZXNvbHZlX2NvbnRleHQKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzZWxmLmFkX2hvY190eXBlX2xpc3QgPSBhZF9ob2NfdHlwZV9saXN0Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jb250YWluZXJfZnVsbF9uYW1lX3ByZWZpeCA9
IHBhcmVudF9mdWxsX25hbWVfcHJlZml4ICsgY2xhc3NfbmFtZSArICI6OiIKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzZWxmLmNvbnRhaW5lcl9yZWxhdGl2ZV9uYW1lX3ByZWZpeCA9ICIi
Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBnZXRfdHlwZV9uYW1lX2ZpeChzZWxmKToK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcyBOYW1lRml4OgotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjbGFzc19uYW1lID0gQ2FwaXRhbGl6ZXIubG93ZXJfY2FtZWxf
Y2FzZV90b191cHBlcihzZWxmLnByb3BlcnR5X25hbWUpCi0KLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkZWYgb3V0cHV0X2NvbW1lbnQod3JpdGVyKToKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCIvLyBOYW1lZCBhZnRlciBwcm9wZXJ0eSBuYW1lICcl
cycgd2hpbGUgZ2VuZXJhdGluZyAlcy5cbiIgJSAoc2VsZi5wcm9wZXJ0eV9uYW1lLCBzZWxmLmNs
YXNzX25hbWUpKQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5hbWVGaXgK
LQotICAgICAgICAgICAgICAgICAgICAgICAgZGVmIGFkZF90eXBlKHNlbGYsIGJpbmRpbmcpOgot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYWRfaG9jX3R5cGVfbGlzdC5hcHBlbmQo
YmluZGluZykKLQotICAgICAgICAgICAgICAgIHJldHVybiBDbGFzc0JpbmRpbmcKLSAgICAgICAg
ICAgIGVsc2U6Ci0KLSAgICAgICAgICAgICAgICBjbGFzcyBQbGFpbk9iamVjdEJpbmRpbmc6Ci0g
ICAgICAgICAgICAgICAgICAgIEBjbGFzc21ldGhvZAotICAgICAgICAgICAgICAgICAgICBkZWYg
cmVzb2x2ZV9pbm5lcihjbHMsIHJlc29sdmVfY29udGV4dCk6Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBwYXNzCi0KLSAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAg
ICAgICAgICAgICBkZWYgcmVxdWVzdF91c2VyX3J1bnRpbWVfY2FzdChyZXF1ZXN0KToKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHBhc3MKLQotICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0
aG9kCi0gICAgICAgICAgICAgICAgICAgIGRlZiByZXF1ZXN0X2ludGVybmFsX3J1bnRpbWVfY2Fz
dCgpOgotICAgICAgICAgICAgICAgICAgICAgICAgUmF3VHlwZXMuT2JqZWN0LnJlcXVlc3RfcmF3
X2ludGVybmFsX3J1bnRpbWVfY2FzdCgpCi0KLSAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21l
dGhvZAotICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X2NvZGVfZ2VuZXJhdG9yKCk6Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBwYXNzCi0KLSAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21l
dGhvZAotICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X3ZhbGlkYXRvcl9jYWxsX3RleHQoKToK
LSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAiUnVudGltZUNhc3RIZWxwZXI6OmFzc2Vy
dFR5cGU8SW5zcGVjdG9yVmFsdWU6OlR5cGVPYmplY3Q+IgotCi0gICAgICAgICAgICAgICAgICAg
IEBjbGFzc21ldGhvZAotICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X2FycmF5X2l0ZW1fY190
eXBlX3RleHQoY2xzKToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjbHMucmVkdWNl
X3RvX3Jhd190eXBlKCkuZ2V0X2FycmF5X2l0ZW1fcmF3X2NfdHlwZV90ZXh0KCkKLQotICAgICAg
ICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgIGRlZiBnZXRf
c2V0dGVyX3ZhbHVlX2V4cHJlc3Npb25fcGF0dGVybigpOgotICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIE5vbmUKLQotICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAg
ICAgICAgICAgICAgICAgIGRlZiByZWR1Y2VfdG9fcmF3X3R5cGUoKToKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBSYXdUeXBlcy5PYmplY3QKLQotICAgICAgICAgICAgICAgICAgICBA
c3RhdGljbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgIGRlZiBnZXRfdHlwZV9tb2RlbCgpOgot
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFR5cGVNb2RlbC5PYmplY3QKLQotICAgICAg
ICAgICAgICAgIHJldHVybiBQbGFpbk9iamVjdEJpbmRpbmcKLSAgICAgICAgZWxpZiBqc29uX3R5
cGFibGVbInR5cGUiXSA9PSAiYXJyYXkiOgotICAgICAgICAgICAgaWYgIml0ZW1zIiBpbiBqc29u
X3R5cGFibGU6Ci0KLSAgICAgICAgICAgICAgICBhZF9ob2NfdHlwZXMgPSBbXQotCi0gICAgICAg
ICAgICAgICAgY2xhc3MgQWRIb2NUeXBlQ29udGV4dDoKLSAgICAgICAgICAgICAgICAgICAgY29u
dGFpbmVyX2Z1bGxfbmFtZV9wcmVmaXggPSAiPG5vdCB5ZXQgZGVmaW5lZD4iCi0gICAgICAgICAg
ICAgICAgICAgIGNvbnRhaW5lcl9yZWxhdGl2ZV9uYW1lX3ByZWZpeCA9ICIiCi0KLSAgICAgICAg
ICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X3R5
cGVfbmFtZV9maXgoKToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmaXhlZF90eXBl
X25hbWUKLQotICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICAg
ICAgICAgIGRlZiBhZGRfdHlwZShiaW5kaW5nKToKLSAgICAgICAgICAgICAgICAgICAgICAgIGFk
X2hvY190eXBlcy5hcHBlbmQoYmluZGluZykKLQotICAgICAgICAgICAgICAgIGl0ZW1fYmluZGlu
ZyA9IHJlc29sdmVfcGFyYW1fdHlwZShqc29uX3R5cGFibGVbIml0ZW1zIl0sIGNvbnRleHRfZG9t
YWluX25hbWUsIEFkSG9jVHlwZUNvbnRleHQpCi0KLSAgICAgICAgICAgICAgICBjbGFzcyBBcnJh
eUJpbmRpbmc6Ci0gICAgICAgICAgICAgICAgICAgIHJlc29sdmVfZGF0YV8gPSBOb25lCi0gICAg
ICAgICAgICAgICAgICAgIG5lZWRfaW50ZXJuYWxfcnVudGltZV9jYXN0XyA9IEZhbHNlCi0KLSAg
ICAgICAgICAgICAgICAgICAgQGNsYXNzbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgIGRlZiBy
ZXNvbHZlX2lubmVyKGNscywgcmVzb2x2ZV9jb250ZXh0KToKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIGNscy5yZXNvbHZlX2RhdGFfOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybgotCi0gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcyBSZXNvbHZlRGF0YToKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpdGVtX3R5cGVfYmluZGluZyA9IGl0ZW1fYmluZGluZwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkX2hvY190eXBlX2xpc3QgPSBhZF9ob2NfdHlw
ZXMKLQotICAgICAgICAgICAgICAgICAgICAgICAgY2xzLnJlc29sdmVfZGF0YV8gPSBSZXNvbHZl
RGF0YQotCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgdCBpbiBhZF9ob2NfdHlwZXM6Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdC5yZXNvbHZlX2lubmVyKHJlc29sdmVfY29udGV4
dCkKLQotICAgICAgICAgICAgICAgICAgICBAY2xhc3NtZXRob2QKLSAgICAgICAgICAgICAgICAg
ICAgZGVmIHJlcXVlc3RfdXNlcl9ydW50aW1lX2Nhc3QoY2xzLCByZXF1ZXN0KToKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiTm90IGltcGxlbWVudGVkIHlldCIpCi0K
LSAgICAgICAgICAgICAgICAgICAgQGNsYXNzbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgIGRl
ZiByZXF1ZXN0X2ludGVybmFsX3J1bnRpbWVfY2FzdChjbHMpOgotICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgY2xzLm5lZWRfaW50ZXJuYWxfcnVudGltZV9jYXN0XzoKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4KLSAgICAgICAgICAgICAgICAgICAgICAgIGNscy5uZWVkX2lu
dGVybmFsX3J1bnRpbWVfY2FzdF8gPSBUcnVlCi0gICAgICAgICAgICAgICAgICAgICAgICBjbHMu
cmVzb2x2ZV9kYXRhXy5pdGVtX3R5cGVfYmluZGluZy5yZXF1ZXN0X2ludGVybmFsX3J1bnRpbWVf
Y2FzdCgpCi0KLSAgICAgICAgICAgICAgICAgICAgQGNsYXNzbWV0aG9kCi0gICAgICAgICAgICAg
ICAgICAgIGRlZiBnZXRfY29kZV9nZW5lcmF0b3IoYXJyYXlfYmluZGluZ19jbHMpOgotCi0gICAg
ICAgICAgICAgICAgICAgICAgICBjbGFzcyBDb2RlR2VuZXJhdG9yOgotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
ZWYgZ2VuZXJhdGVfdHlwZV9idWlsZGVyKHdyaXRlciwgZ2VuZXJhdGVfY29udGV4dCk6Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkX2hvY190eXBlX3dyaXRlciA9IHdyaXRlcgot
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmVfZGF0YSA9IGFycmF5X2Jp
bmRpbmdfY2xzLnJlc29sdmVfZGF0YV8KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmb3IgYWRfaG9jX3R5cGUgaW4gcmVzb2x2ZV9kYXRhLmFkX2hvY190eXBlX2xpc3Q6Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlX2dlbmVyYXRvciA9IGFkX2hvY190
eXBlLmdldF9jb2RlX2dlbmVyYXRvcigpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiBjb2RlX2dlbmVyYXRvcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb2RlX2dlbmVyYXRvci5nZW5lcmF0ZV90eXBlX2J1aWxkZXIoYWRfaG9jX3R5cGVf
d3JpdGVyLCBnZW5lcmF0ZV9jb250ZXh0KQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
QHN0YXRpY21ldGhvZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBnZW5lcmF0ZV9m
b3J3YXJkX2RlY2xhcmF0aW9uKHdyaXRlcik6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHBhc3MKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBkZWYgcmVnaXN0ZXJfdXNlKGZvcndhcmRfbGlzdGVu
ZXIpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtX2NvZGVfZ2VuZXJhdG9y
ID0gaXRlbV9iaW5kaW5nLmdldF9jb2RlX2dlbmVyYXRvcigpCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIGl0ZW1fY29kZV9nZW5lcmF0b3I6Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpdGVtX2NvZGVfZ2VuZXJhdG9yLnJlZ2lzdGVyX3VzZShmb3J3YXJk
X2xpc3RlbmVyKQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBnZXRfZ2VuZXJhdGVfcGFzc19pZCgpOgot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHlwZUJ1aWxkZXJQYXNzLk1B
SU4KLQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENvZGVHZW5lcmF0b3IKLQotICAg
ICAgICAgICAgICAgICAgICBAY2xhc3NtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgZGVmIGdl
dF92YWxpZGF0b3JfY2FsbF90ZXh0KGNscyk6Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gY2xzLmdldF9hcnJheV9pdGVtX2NfdHlwZV90ZXh0KCkgKyAiOjphc3NlcnRDb3JyZWN0VmFs
dWUiCi0KLSAgICAgICAgICAgICAgICAgICAgQGNsYXNzbWV0aG9kCi0gICAgICAgICAgICAgICAg
ICAgIGRlZiBnZXRfYXJyYXlfaXRlbV9jX3R5cGVfdGV4dChjbHMpOgotICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHJlcGxhY2VfcmlnaHRfc2hpZnQoIkluc3BlY3Rvcjo6VHlwZUJ1aWxk
ZXI6OkFycmF5PCVzPiIgJSBjbHMucmVzb2x2ZV9kYXRhXy5pdGVtX3R5cGVfYmluZGluZy5nZXRf
YXJyYXlfaXRlbV9jX3R5cGVfdGV4dCgpKQotCi0gICAgICAgICAgICAgICAgICAgIEBzdGF0aWNt
ZXRob2QKLSAgICAgICAgICAgICAgICAgICAgZGVmIGdldF9zZXR0ZXJfdmFsdWVfZXhwcmVzc2lv
bl9wYXR0ZXJuKCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQotCi0gICAg
ICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgZGVmIHJl
ZHVjZV90b19yYXdfdHlwZSgpOgotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJhd1R5
cGVzLkFycmF5Ci0KLSAgICAgICAgICAgICAgICAgICAgQGNsYXNzbWV0aG9kCi0gICAgICAgICAg
ICAgICAgICAgIGRlZiBnZXRfdHlwZV9tb2RlbChjbHMpOgotICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIFR5cGVNb2RlbC5SZWZQdHJCYXNlZChjbHMuZ2V0X2FycmF5X2l0ZW1fY190eXBl
X3RleHQoKSkKLQotICAgICAgICAgICAgICAgIHJldHVybiBBcnJheUJpbmRpbmcKLSAgICAgICAg
ICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgIyBGYWxsLXRocm91Z2ggdG8gcmF3IHR5cGUuCi0g
ICAgICAgICAgICAgICAgcGFzcwotCi0gICAgICAgIHJhd190eXBlID0gUmF3VHlwZXMuZ2V0KGpz
b25fdHlwYWJsZVsidHlwZSJdKQotCi0gICAgICAgIHJldHVybiBSYXdUeXBlQmluZGluZyhyYXdf
dHlwZSkKLQotCi1jbGFzcyBSYXdUeXBlQmluZGluZzoKLSAgICBkZWYgX19pbml0X18oc2VsZiwg
cmF3X3R5cGUpOgotICAgICAgICBzZWxmLnJhd190eXBlXyA9IHJhd190eXBlCi0KLSAgICBkZWYg
cmVzb2x2ZV9pbm5lcihzZWxmLCByZXNvbHZlX2NvbnRleHQpOgotICAgICAgICBwYXNzCi0KLSAg
ICBkZWYgcmVxdWVzdF91c2VyX3J1bnRpbWVfY2FzdChzZWxmLCByZXF1ZXN0KToKLSAgICAgICAg
cmFpc2UgRXhjZXB0aW9uKCJVbnN1cHBvcnRlZCIpCi0KLSAgICBkZWYgcmVxdWVzdF9pbnRlcm5h
bF9ydW50aW1lX2Nhc3Qoc2VsZik6Ci0gICAgICAgIHNlbGYucmF3X3R5cGVfLnJlcXVlc3RfcmF3
X2ludGVybmFsX3J1bnRpbWVfY2FzdCgpCi0KLSAgICBkZWYgZ2V0X2NvZGVfZ2VuZXJhdG9yKHNl
bGYpOgotICAgICAgICByZXR1cm4gTm9uZQotCi0gICAgZGVmIGdldF92YWxpZGF0b3JfY2FsbF90
ZXh0KHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5yYXdfdHlwZV8uZ2V0X3Jhd192YWxpZGF0
b3JfY2FsbF90ZXh0KCkKLQotICAgIGRlZiBnZXRfYXJyYXlfaXRlbV9jX3R5cGVfdGV4dChzZWxm
KToKLSAgICAgICAgcmV0dXJuIHNlbGYucmF3X3R5cGVfLmdldF9hcnJheV9pdGVtX3Jhd19jX3R5
cGVfdGV4dCgpCi0KLSAgICBkZWYgZ2V0X3NldHRlcl92YWx1ZV9leHByZXNzaW9uX3BhdHRlcm4o
c2VsZik6Ci0gICAgICAgIHJldHVybiBOb25lCi0KLSAgICBkZWYgcmVkdWNlX3RvX3Jhd190eXBl
KHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5yYXdfdHlwZV8KLQotICAgIGRlZiBnZXRfdHlw
ZV9tb2RlbChzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYucmF3X3R5cGVfLmdldF9yYXdfdHlw
ZV9tb2RlbCgpCi0KLQotY2xhc3MgVHlwZURhdGEob2JqZWN0KToKLSAgICBkZWYgX19pbml0X18o
c2VsZiwganNvbl90eXBlLCBqc29uX2RvbWFpbiwgZG9tYWluX2RhdGEpOgotICAgICAgICBzZWxm
Lmpzb25fdHlwZV8gPSBqc29uX3R5cGUKLSAgICAgICAgc2VsZi5qc29uX2RvbWFpbl8gPSBqc29u
X2RvbWFpbgotICAgICAgICBzZWxmLmRvbWFpbl9kYXRhXyA9IGRvbWFpbl9kYXRhCi0KLSAgICAg
ICAgaWYgInR5cGUiIG5vdCBpbiBqc29uX3R5cGU6Ci0gICAgICAgICAgICByYWlzZSBFeGNlcHRp
b24oIlVua25vd24gdHlwZSIpCi0KLSAgICAgICAganNvbl90eXBlX25hbWUgPSBqc29uX3R5cGVb
InR5cGUiXQotICAgICAgICBzZWxmLnJhd190eXBlXyA9IFJhd1R5cGVzLmdldChqc29uX3R5cGVf
bmFtZSkKLSAgICAgICAgc2VsZi5iaW5kaW5nX2JlaW5nX3Jlc29sdmVkXyA9IEZhbHNlCi0gICAg
ICAgIHNlbGYuYmluZGluZ18gPSBOb25lCi0KLSAgICBkZWYgZ2V0X3Jhd190eXBlKHNlbGYpOgot
ICAgICAgICByZXR1cm4gc2VsZi5yYXdfdHlwZV8KLQotICAgIGRlZiBnZXRfYmluZGluZyhzZWxm
KToKLSAgICAgICAgaWYgbm90IHNlbGYuYmluZGluZ186Ci0gICAgICAgICAgICBpZiBzZWxmLmJp
bmRpbmdfYmVpbmdfcmVzb2x2ZWRfOgotICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigi
VHlwZSAlcyBpcyBhbHJlYWR5IGJlaW5nIHJlc29sdmVkIiAlIHNlbGYuanNvbl90eXBlX1sidHlw
ZSJdKQotICAgICAgICAgICAgIyBSZXNvbHZlIG9ubHkgbGF6aWx5LCBiZWNhdXNlIHJlc29sdmlu
ZyBvbmUgbmFtZWQgdHlwZSBtYXkgcmVxdWlyZSByZXNvbHZpbmcgc29tZSBvdGhlciBuYW1lZCB0
eXBlLgotICAgICAgICAgICAgc2VsZi5iaW5kaW5nX2JlaW5nX3Jlc29sdmVkXyA9IFRydWUKLSAg
ICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBzZWxmLmJpbmRpbmdfID0gVHlwZUJpbmRp
bmdzLmNyZWF0ZV9uYW1lZF90eXBlX2RlY2xhcmF0aW9uKHNlbGYuanNvbl90eXBlXywgc2VsZi5q
c29uX2RvbWFpbl9bImRvbWFpbiJdLCBzZWxmKQotICAgICAgICAgICAgZmluYWxseToKLSAgICAg
ICAgICAgICAgICBzZWxmLmJpbmRpbmdfYmVpbmdfcmVzb2x2ZWRfID0gRmFsc2UKLQotICAgICAg
ICByZXR1cm4gc2VsZi5iaW5kaW5nXwotCi0gICAgZGVmIGdldF9qc29uX3R5cGUoc2VsZik6Ci0g
ICAgICAgIHJldHVybiBzZWxmLmpzb25fdHlwZV8KLQotICAgIGRlZiBnZXRfbmFtZShzZWxmKToK
LSAgICAgICAgcmV0dXJuIHNlbGYuanNvbl90eXBlX1siaWQiXQotCi0gICAgZGVmIGdldF9kb21h
aW5fbmFtZShzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuanNvbl9kb21haW5fWyJkb21haW4i
XQotCi0KLWNsYXNzIERvbWFpbkRhdGE6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGpzb25fZG9t
YWluKToKLSAgICAgICAgc2VsZi5qc29uX2RvbWFpbiA9IGpzb25fZG9tYWluCi0gICAgICAgIHNl
bGYudHlwZXNfID0gW10KLQotICAgIGRlZiBhZGRfdHlwZShzZWxmLCB0eXBlX2RhdGEpOgotICAg
ICAgICBzZWxmLnR5cGVzXy5hcHBlbmQodHlwZV9kYXRhKQotCi0gICAgZGVmIG5hbWUoc2VsZik6
Ci0gICAgICAgIHJldHVybiBzZWxmLmpzb25fZG9tYWluWyJkb21haW4iXQotCi0gICAgZGVmIHR5
cGVzKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi50eXBlc18KLQotCi1jbGFzcyBUeXBlTWFw
OgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhcGksIGRlcGVuZGVuY3lfYXBpKToKLSAgICAgICAg
c2VsZi5tYXBfID0ge30KLSAgICAgICAgc2VsZi5kb21haW5zXyA9IFtdCi0gICAgICAgIHNlbGYu
ZG9tYWluc190b19nZW5lcmF0ZV8gPSBbXQotICAgICAgICBmb3IganNvbl9kb21haW4gaW4gYXBp
WyJkb21haW5zIl06Ci0gICAgICAgICAgICBzZWxmLmFkZF9kb21haW4oanNvbl9kb21haW4sIFRy
dWUpCi0gICAgICAgIGZvciBqc29uX2RvbWFpbiBpbiBkZXBlbmRlbmN5X2FwaVsiZG9tYWlucyJd
OgotICAgICAgICAgICAgc2VsZi5hZGRfZG9tYWluKGpzb25fZG9tYWluLCBGYWxzZSkKLQotICAg
IGRlZiBhZGRfZG9tYWluKHNlbGYsIGpzb25fZG9tYWluLCBzaG91bGRfZ2VuZXJhdGUpOgotICAg
ICAgICBkb21haW5fbmFtZSA9IGpzb25fZG9tYWluWyJkb21haW4iXQotCi0gICAgICAgIGRvbWFp
bl9tYXAgPSB7fQotICAgICAgICBzZWxmLm1hcF9bZG9tYWluX25hbWVdID0gZG9tYWluX21hcAot
Ci0gICAgICAgIGRvbWFpbl9kYXRhID0gRG9tYWluRGF0YShqc29uX2RvbWFpbikKLSAgICAgICAg
c2VsZi5kb21haW5zXy5hcHBlbmQoZG9tYWluX2RhdGEpCi0KLSAgICAgICAgaWYgc2hvdWxkX2dl
bmVyYXRlOgotICAgICAgICAgICAgIyBGSVhNRTogVGhlIG9yZGVyIG9mIHR5cGVzIHNob3VsZCBu
b3QgbWF0dGVyLiBUaGUgZ2VuZXJhdGVkIGNvZGUgc2hvdWxkIHdvcmsgcmVnYXJkbGVzcyBvZiB0
aGUgb3JkZXIgb2YgdHlwZXMuCi0gICAgICAgICAgICBpZiBkb21haW5fbmFtZSA9PSAiUGFnZSI6
Ci0gICAgICAgICAgICAgICAgc2VsZi5kb21haW5zX3RvX2dlbmVyYXRlXy5pbnNlcnQoMCwgZG9t
YWluX2RhdGEpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHNlbGYuZG9tYWlu
c190b19nZW5lcmF0ZV8uYXBwZW5kKGRvbWFpbl9kYXRhKQotCi0gICAgICAgIGlmICJ0eXBlcyIg
aW4ganNvbl9kb21haW46Ci0gICAgICAgICAgICBmb3IganNvbl90eXBlIGluIGpzb25fZG9tYWlu
WyJ0eXBlcyJdOgotICAgICAgICAgICAgICAgIHR5cGVfbmFtZSA9IGpzb25fdHlwZVsiaWQiXQot
ICAgICAgICAgICAgICAgIHR5cGVfZGF0YSA9IFR5cGVEYXRhKGpzb25fdHlwZSwganNvbl9kb21h
aW4sIGRvbWFpbl9kYXRhKQotICAgICAgICAgICAgICAgIGRvbWFpbl9tYXBbdHlwZV9uYW1lXSA9
IHR5cGVfZGF0YQotICAgICAgICAgICAgICAgIGRvbWFpbl9kYXRhLmFkZF90eXBlKHR5cGVfZGF0
YSkKLQotICAgIGRlZiBkb21haW5zKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5kb21haW5z
XwotCi0gICAgZGVmIGRvbWFpbnNfdG9fZ2VuZXJhdGUoc2VsZik6Ci0gICAgICAgIHJldHVybiBz
ZWxmLmRvbWFpbnNfdG9fZ2VuZXJhdGVfCi0KLSAgICBkZWYgZ2V0KHNlbGYsIGRvbWFpbl9uYW1l
LCB0eXBlX25hbWUpOgotICAgICAgICByZXR1cm4gc2VsZi5tYXBfW2RvbWFpbl9uYW1lXVt0eXBl
X25hbWVdCi0KLQotZGVmIHJlc29sdmVfcGFyYW1fdHlwZShqc29uX3BhcmFtZXRlciwgc2NvcGVf
ZG9tYWluX25hbWUsIGFkX2hvY190eXBlX2NvbnRleHQpOgotICAgIGlmICIkcmVmIiBpbiBqc29u
X3BhcmFtZXRlcjoKLSAgICAgICAganNvbl9yZWYgPSBqc29uX3BhcmFtZXRlclsiJHJlZiJdCi0g
ICAgICAgIHR5cGVfZGF0YSA9IGdldF9yZWZfZGF0YShqc29uX3JlZiwgc2NvcGVfZG9tYWluX25h
bWUpCi0gICAgICAgIHJldHVybiB0eXBlX2RhdGEuZ2V0X2JpbmRpbmcoKQotICAgIGVsaWYgInR5
cGUiIGluIGpzb25fcGFyYW1ldGVyOgotICAgICAgICByZXN1bHQgPSBUeXBlQmluZGluZ3MuY3Jl
YXRlX2FkX2hvY190eXBlX2RlY2xhcmF0aW9uKGpzb25fcGFyYW1ldGVyLCBzY29wZV9kb21haW5f
bmFtZSwgYWRfaG9jX3R5cGVfY29udGV4dCkKLSAgICAgICAgYWRfaG9jX3R5cGVfY29udGV4dC5h
ZGRfdHlwZShyZXN1bHQpCi0gICAgICAgIHJldHVybiByZXN1bHQKLSAgICBlbHNlOgotICAgICAg
ICByYWlzZSBFeGNlcHRpb24oIlVua25vd24gdHlwZSIpCi0KLQotZGVmIHJlc29sdmVfcGFyYW1f
cmF3X3R5cGUoanNvbl9wYXJhbWV0ZXIsIHNjb3BlX2RvbWFpbl9uYW1lKToKLSAgICBpZiAiJHJl
ZiIgaW4ganNvbl9wYXJhbWV0ZXI6Ci0gICAgICAgIGpzb25fcmVmID0ganNvbl9wYXJhbWV0ZXJb
IiRyZWYiXQotICAgICAgICB0eXBlX2RhdGEgPSBnZXRfcmVmX2RhdGEoanNvbl9yZWYsIHNjb3Bl
X2RvbWFpbl9uYW1lKQotICAgICAgICByZXR1cm4gdHlwZV9kYXRhLmdldF9yYXdfdHlwZSgpCi0g
ICAgZWxpZiAidHlwZSIgaW4ganNvbl9wYXJhbWV0ZXI6Ci0gICAgICAgIGpzb25fdHlwZSA9IGpz
b25fcGFyYW1ldGVyWyJ0eXBlIl0KLSAgICAgICAgcmV0dXJuIFJhd1R5cGVzLmdldChqc29uX3R5
cGUpCi0gICAgZWxzZToKLSAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJVbmtub3duIHR5cGUiKQot
Ci0KLWRlZiBnZXRfcmVmX2RhdGEoanNvbl9yZWYsIHNjb3BlX2RvbWFpbl9uYW1lKToKLSAgICBk
b3RfcG9zID0ganNvbl9yZWYuZmluZCgiLiIpCi0gICAgaWYgZG90X3BvcyA9PSAtMToKLSAgICAg
ICAgZG9tYWluX25hbWUgPSBzY29wZV9kb21haW5fbmFtZQotICAgICAgICB0eXBlX25hbWUgPSBq
c29uX3JlZgotICAgIGVsc2U6Ci0gICAgICAgIGRvbWFpbl9uYW1lID0ganNvbl9yZWZbOmRvdF9w
b3NdCi0gICAgICAgIHR5cGVfbmFtZSA9IGpzb25fcmVmW2RvdF9wb3MgKyAxOl0KLQotICAgIHJl
dHVybiB0eXBlX21hcC5nZXQoZG9tYWluX25hbWUsIHR5cGVfbmFtZSkKLQotCi1pbnB1dF9maWxl
ID0gb3BlbihpbnB1dF9qc29uX2ZpbGVuYW1lLCAiciIpCi1qc29uX3N0cmluZyA9IGlucHV0X2Zp
bGUucmVhZCgpCi1qc29uX2FwaSA9IGpzb24ubG9hZHMoanNvbl9zdHJpbmcpCi1pbnB1dF9maWxl
LmNsb3NlKCkKLWlmIG5vdCAiZG9tYWlucyIgaW4ganNvbl9hcGk6Ci0gICAganNvbl9hcGkgPSB7
ImRvbWFpbnMiOiBbanNvbl9hcGldfQotCi1kZXBlbmRlbmN5X2FwaSA9IHsiZG9tYWlucyI6IFtd
fQotZm9yIGRlcGVuZGVuY3lfanNvbl9maWxlbmFtZSBpbiBkZXBlbmRlbmN5X2pzb25fZmlsZW5h
bWVzOgotICAgIGRlcGVuZGVuY3lfaW5wdXRfZmlsZSA9IG9wZW4oZGVwZW5kZW5jeV9qc29uX2Zp
bGVuYW1lLCAiciIpCi0gICAgZGVwZW5kZW5jeV9qc29uX3N0cmluZyA9IGRlcGVuZGVuY3lfaW5w
dXRfZmlsZS5yZWFkKCkKLSAgICBkZXBlbmRlbmN5X2pzb25fYXBpID0ganNvbi5sb2FkcyhkZXBl
bmRlbmN5X2pzb25fc3RyaW5nKQotICAgIGRlcGVuZGVuY3lfaW5wdXRfZmlsZS5jbG9zZSgpCi0g
ICAgaWYgbm90ICJkb21haW5zIiBpbiBkZXBlbmRlbmN5X2pzb25fYXBpOgotICAgICAgICBkZXBl
bmRlbmN5X2pzb25fYXBpID0geyJkb21haW5zIjogW2RlcGVuZGVuY3lfanNvbl9hcGldfQotICAg
IGRlcGVuZGVuY3lfYXBpWyJkb21haW5zIl0gKz0gZGVwZW5kZW5jeV9qc29uX2FwaVsiZG9tYWlu
cyJdCi0KLQotY2xhc3MgVGVtcGxhdGVzOgotICAgIGRlZiBnZXRfdGhpc19zY3JpcHRfcGF0aF8o
YWJzb2x1dGVfcGF0aCk6Ci0gICAgICAgIGFic29sdXRlX3BhdGggPSBvcy5wYXRoLmFic3BhdGgo
YWJzb2x1dGVfcGF0aCkKLSAgICAgICAgY29tcG9uZW50cyA9IFtdCi0KLSAgICAgICAgZGVmIGZp
bGxfcmVjdXJzaXZlKHBhdGhfcGFydCwgZGVwdGgpOgotICAgICAgICAgICAgaWYgZGVwdGggPD0g
MCBvciBwYXRoX3BhcnQgPT0gJy8nOgotICAgICAgICAgICAgICAgIHJldHVybgotICAgICAgICAg
ICAgZmlsbF9yZWN1cnNpdmUob3MucGF0aC5kaXJuYW1lKHBhdGhfcGFydCksIGRlcHRoIC0gMSkK
LSAgICAgICAgICAgIGNvbXBvbmVudHMuYXBwZW5kKG9zLnBhdGguYmFzZW5hbWUocGF0aF9wYXJ0
KSkKLQotICAgICAgICAjIFR5cGljYWwgcGF0aCBpcyAvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKLSAgICAgICAgIyBMZXQncyB0YWtlIDQgY29tcG9u
ZW50cyBmcm9tIHRoZSByZWFsIHBhdGggdGhlbi4KLSAgICAgICAgZmlsbF9yZWN1cnNpdmUoYWJz
b2x1dGVfcGF0aCwgNCkKLQotICAgICAgICByZXR1cm4gIi8iLmpvaW4oY29tcG9uZW50cykKLQot
ICAgIGZpbGVfaGVhZGVyXyA9ICgiLy8gRmlsZSBpcyBnZW5lcmF0ZWQgYnkgJXNcblxuIiAlIGdl
dF90aGlzX3NjcmlwdF9wYXRoXyhzeXMuYXJndlswXSkgKwotIiIiLy8gQ29weXJpZ2h0IChjKSAy
MDEzIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLS8vIENvcHlyaWdodCAoYykgMjAx
MSBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0iIiIpCi0KLSAgICBmcm9udGVu
ZF9kb21haW5fY2xhc3MgPSBzdHJpbmcuVGVtcGxhdGUoQ29kZUdlbmVyYXRvckluc3BlY3RvclN0
cmluZ3MuZnJvbnRlbmRfZG9tYWluX2NsYXNzKQotICAgIGJhY2tlbmRfZGlzcGF0Y2hlcl9jb25z
dHJ1Y3RvciA9IHN0cmluZy5UZW1wbGF0ZShDb2RlR2VuZXJhdG9ySW5zcGVjdG9yU3RyaW5ncy5i
YWNrZW5kX2Rpc3BhdGNoZXJfY29uc3RydWN0b3IpCi0gICAgYmFja2VuZF9kaXNwYXRjaGVyX2Rp
c3BhdGNoX21ldGhvZCA9IHN0cmluZy5UZW1wbGF0ZShDb2RlR2VuZXJhdG9ySW5zcGVjdG9yU3Ry
aW5ncy5iYWNrZW5kX2Rpc3BhdGNoZXJfZGlzcGF0Y2hfbWV0aG9kKQotICAgIGJhY2tlbmRfZGlz
cGF0Y2hlcl9kaXNwYXRjaF9tZXRob2Rfc2ltcGxlID0gc3RyaW5nLlRlbXBsYXRlKENvZGVHZW5l
cmF0b3JJbnNwZWN0b3JTdHJpbmdzLmJhY2tlbmRfZGlzcGF0Y2hlcl9kaXNwYXRjaF9tZXRob2Rf
c2ltcGxlKQotICAgIGJhY2tlbmRfbWV0aG9kID0gc3RyaW5nLlRlbXBsYXRlKENvZGVHZW5lcmF0
b3JJbnNwZWN0b3JTdHJpbmdzLmJhY2tlbmRfbWV0aG9kKQotICAgIGZyb250ZW5kX21ldGhvZCA9
IHN0cmluZy5UZW1wbGF0ZShDb2RlR2VuZXJhdG9ySW5zcGVjdG9yU3RyaW5ncy5mcm9udGVuZF9t
ZXRob2QpCi0gICAgY2FsbGJhY2tfbWV0aG9kID0gc3RyaW5nLlRlbXBsYXRlKENvZGVHZW5lcmF0
b3JJbnNwZWN0b3JTdHJpbmdzLmNhbGxiYWNrX21ldGhvZCkKLSAgICBmcm9udGVuZF9oID0gc3Ry
aW5nLlRlbXBsYXRlKGZpbGVfaGVhZGVyXyArIENvZGVHZW5lcmF0b3JJbnNwZWN0b3JTdHJpbmdz
LmZyb250ZW5kX2gpCi0gICAgYmFja2VuZF9oID0gc3RyaW5nLlRlbXBsYXRlKGZpbGVfaGVhZGVy
XyArIENvZGVHZW5lcmF0b3JJbnNwZWN0b3JTdHJpbmdzLmJhY2tlbmRfaCkKLSAgICBiYWNrZW5k
X2NwcCA9IHN0cmluZy5UZW1wbGF0ZShmaWxlX2hlYWRlcl8gKyBDb2RlR2VuZXJhdG9ySW5zcGVj
dG9yU3RyaW5ncy5iYWNrZW5kX2NwcCkKLSAgICBmcm9udGVuZF9jcHAgPSBzdHJpbmcuVGVtcGxh
dGUoZmlsZV9oZWFkZXJfICsgQ29kZUdlbmVyYXRvckluc3BlY3RvclN0cmluZ3MuZnJvbnRlbmRf
Y3BwKQotICAgIHR5cGVidWlsZGVyX2ggPSBzdHJpbmcuVGVtcGxhdGUoZmlsZV9oZWFkZXJfICsg
Q29kZUdlbmVyYXRvckluc3BlY3RvclN0cmluZ3MudHlwZWJ1aWxkZXJfaCkKLSAgICB0eXBlYnVp
bGRlcl9jcHAgPSBzdHJpbmcuVGVtcGxhdGUoZmlsZV9oZWFkZXJfICsgQ29kZUdlbmVyYXRvcklu
c3BlY3RvclN0cmluZ3MudHlwZWJ1aWxkZXJfY3BwKQotICAgIGJhY2tlbmRfanMgPSBzdHJpbmcu
VGVtcGxhdGUoZmlsZV9oZWFkZXJfICsgQ29kZUdlbmVyYXRvckluc3BlY3RvclN0cmluZ3MuYmFj
a2VuZF9qcykKLSAgICBwYXJhbV9jb250YWluZXJfYWNjZXNzX2NvZGUgPSBDb2RlR2VuZXJhdG9y
SW5zcGVjdG9yU3RyaW5ncy5wYXJhbV9jb250YWluZXJfYWNjZXNzX2NvZGUKLQotCi0KLQotCi10
eXBlX21hcCA9IFR5cGVNYXAoanNvbl9hcGksIGRlcGVuZGVuY3lfYXBpKQotCi0KLWNsYXNzIE5l
ZWRSdW50aW1lQ2FzdFJlcXVlc3Q6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYpOgotICAgICAgICBz
ZWxmLmFja18gPSBOb25lCi0KLSAgICBkZWYgYWNrbm93bGVkZ2Uoc2VsZik6Ci0gICAgICAgIHNl
bGYuYWNrXyA9IFRydWUKLQotICAgIGRlZiBpc19hY2tub3dsZWRnZWQoc2VsZik6Ci0gICAgICAg
IHJldHVybiBzZWxmLmFja18KLQotCi1kZWYgcmVzb2x2ZV9hbGxfdHlwZXMoKToKLSAgICBydW50
aW1lX2Nhc3RfZ2VuZXJhdGVfcmVxdWVzdHMgPSB7fQotICAgIGZvciB0eXBlX25hbWUgaW4gVFlQ
RVNfV0lUSF9SVU5USU1FX0NBU1RfU0VUOgotICAgICAgICBydW50aW1lX2Nhc3RfZ2VuZXJhdGVf
cmVxdWVzdHNbdHlwZV9uYW1lXSA9IE5lZWRSdW50aW1lQ2FzdFJlcXVlc3QoKQotCi0gICAgY2xh
c3MgRm9yd2FyZExpc3RlbmVyOgotICAgICAgICB0eXBlX2RhdGFfc2V0ID0gc2V0KCkKLSAgICAg
ICAgYWxyZWFkeV9kZWNsYXJlZF9zZXQgPSBzZXQoKQotCi0gICAgICAgIEBjbGFzc21ldGhvZAot
ICAgICAgICBkZWYgYWRkX3R5cGVfZGF0YShjbHMsIHR5cGVfZGF0YSk6Ci0gICAgICAgICAgICBp
ZiB0eXBlX2RhdGEgbm90IGluIGNscy5hbHJlYWR5X2RlY2xhcmVkX3NldDoKLSAgICAgICAgICAg
ICAgICBjbHMudHlwZV9kYXRhX3NldC5hZGQodHlwZV9kYXRhKQotCi0gICAgY2xhc3MgUmVzb2x2
ZUNvbnRleHQ6Ci0gICAgICAgIGZvcndhcmRfbGlzdGVuZXIgPSBGb3J3YXJkTGlzdGVuZXIKLQot
ICAgIGZvciBkb21haW5fZGF0YSBpbiB0eXBlX21hcC5kb21haW5zKCk6Ci0gICAgICAgIGZvciB0
eXBlX2RhdGEgaW4gZG9tYWluX2RhdGEudHlwZXMoKToKLSAgICAgICAgICAgIGJpbmRpbmcgPSB0
eXBlX2RhdGEuZ2V0X2JpbmRpbmcoKQotICAgICAgICAgICAgYmluZGluZy5yZXNvbHZlX2lubmVy
KFJlc29sdmVDb250ZXh0KQotICAgICAgICAgICAgIyBEbyBub3QgZ2VuZXJhdGUgZm9yd2FyZHMg
Zm9yIHRoaXMgdHlwZSBhbnkgbG9uZ2VyLgotICAgICAgICAgICAgRm9yd2FyZExpc3RlbmVyLmFs
cmVhZHlfZGVjbGFyZWRfc2V0LmFkZCh0eXBlX2RhdGEpCi0KLSAgICBmb3IgZG9tYWluX2RhdGEg
aW4gdHlwZV9tYXAuZG9tYWlucygpOgotICAgICAgICBmb3IgdHlwZV9kYXRhIGluIGRvbWFpbl9k
YXRhLnR5cGVzKCk6Ci0gICAgICAgICAgICBmdWxsX3R5cGVfbmFtZSA9ICIlcy4lcyIgJSAodHlw
ZV9kYXRhLmdldF9kb21haW5fbmFtZSgpLCB0eXBlX2RhdGEuZ2V0X25hbWUoKSkKLSAgICAgICAg
ICAgIHJlcXVlc3QgPSBydW50aW1lX2Nhc3RfZ2VuZXJhdGVfcmVxdWVzdHMucG9wKGZ1bGxfdHlw
ZV9uYW1lLCBOb25lKQotICAgICAgICAgICAgYmluZGluZyA9IHR5cGVfZGF0YS5nZXRfYmluZGlu
ZygpCi0gICAgICAgICAgICBpZiByZXF1ZXN0OgotICAgICAgICAgICAgICAgIGJpbmRpbmcucmVx
dWVzdF91c2VyX3J1bnRpbWVfY2FzdChyZXF1ZXN0KQotCi0gICAgICAgICAgICBpZiByZXF1ZXN0
IGFuZCBub3QgcmVxdWVzdC5pc19hY2tub3dsZWRnZWQoKToKLSAgICAgICAgICAgICAgICByYWlz
ZSBFeGNlcHRpb24oIkZhaWxlZCB0byBnZW5lcmF0ZSBydW50aW1lQ2FzdCBpbiAiICsgZnVsbF90
eXBlX25hbWUpCi0KLSAgICAjIEZJWE1FOiBUaGlzIGFzc3VtZXMgYWxsIHRoZSBkb21haW5zIGFy
ZSBwcm9jZXNzZWQgYXQgb25jZS4gQ2hhbmdlIHRoaXMgdmVyaWZpY2F0aW9uCi0gICAgIyB0byBv
bmx5IHZlcmlmeSBydW50aW1lIGNhc3RzIGZvciB0aGUgZG9tYWlucyBiZWluZyBnZW5lcmF0ZWQu
Ci0gICAgIyBpZiB2ZXJpZmljYXRpb246Ci0gICAgIyAgICAgZm9yIGZ1bGxfdHlwZV9uYW1lIGlu
IHJ1bnRpbWVfY2FzdF9nZW5lcmF0ZV9yZXF1ZXN0czoKLSAgICAjICAgICAgICAgcmFpc2UgRXhj
ZXB0aW9uKCJGYWlsZWQgdG8gZ2VuZXJhdGUgcnVudGltZUNhc3QuIFR5cGUgIiArIGZ1bGxfdHlw
ZV9uYW1lICsgIiBub3QgZm91bmQiKQotCi0gICAgcmV0dXJuIEZvcndhcmRMaXN0ZW5lcgotCi0K
LWdsb2JhbF9mb3J3YXJkX2xpc3RlbmVyID0gcmVzb2x2ZV9hbGxfdHlwZXMoKQotCi0KLWRlZiBn
ZXRfYW5ub3RhdGVkX3R5cGVfdGV4dChyYXdfdHlwZSwgYW5ub3RhdGVkX3R5cGUpOgotICAgIGlm
IGFubm90YXRlZF90eXBlICE9IHJhd190eXBlOgotICAgICAgICByZXR1cm4gIi8qJXMqLyAlcyIg
JSAoYW5ub3RhdGVkX3R5cGUsIHJhd190eXBlKQotICAgIGVsc2U6Ci0gICAgICAgIHJldHVybiBy
YXdfdHlwZQotCi0KLWRlZiBmb3JtYXRfc2V0dGVyX3ZhbHVlX2V4cHJlc3Npb24ocGFyYW1fdHlw
ZV9iaW5kaW5nLCB2YWx1ZV9yZWYpOgotICAgIHBhdHRlcm4gPSBwYXJhbV90eXBlX2JpbmRpbmcu
Z2V0X3NldHRlcl92YWx1ZV9leHByZXNzaW9uX3BhdHRlcm4oKQotICAgIGlmIHBhdHRlcm46Ci0g
ICAgICAgIHJldHVybiBwYXR0ZXJuICUgKElOU1BFQ1RPUl9UWVBFU19HRU5FUkFUT1JfQ09ORklH
X01BUFtvdXRwdXRfdHlwZV1bInByZWZpeCJdLCB2YWx1ZV9yZWYpCi0gICAgZWxzZToKLSAgICAg
ICAgcmV0dXJuIHZhbHVlX3JlZgotCi0KLWNsYXNzIEdlbmVyYXRvcjoKLSAgICBmcm9udGVuZF9k
b21haW5fY2xhc3NfbGluZXMgPSBbXQotCi0gICAgYmFja2VuZF9tZXRob2RfaW1wbGVtZW50YXRp
b25fbGlzdCA9IFtdCi0gICAgZnJvbnRlbmRfbWV0aG9kX2xpc3QgPSBbXQotICAgIGJhY2tlbmRf
anNfZG9tYWluX2luaXRpYWxpemVyX2xpc3QgPSBbXQotCi0gICAgYmFja2VuZF9oYW5kbGVyX2lu
dGVyZmFjZV9saXN0ID0gW10KLSAgICBiYWNrZW5kX2hhbmRsZXJfaW1wbGVtZW50YXRpb25fbGlz
dCA9IFtdCi0gICAgYmFja2VuZF9kaXNwYXRjaGVyX2ludGVyZmFjZV9saXN0ID0gW10KLSAgICB0
eXBlX2J1aWxkZXJfZnJhZ21lbnRzID0gW10KLSAgICB0eXBlX2J1aWxkZXJfZm9yd2FyZHMgPSBb
XQotICAgIHZhbGlkYXRvcl9pbXBsX2xpc3QgPSBbXQotICAgIHR5cGVfYnVpbGRlcl9pbXBsX2xp
c3QgPSBbXQotCi0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIGdvKCk6Ci0gICAgICAgIEdl
bmVyYXRvci5wcm9jZXNzX3R5cGVzKHR5cGVfbWFwKQotCi0gICAgICAgIGZpcnN0X2N5Y2xlX2d1
YXJkYWJsZV9saXN0X2xpc3QgPSBbCi0gICAgICAgICAgICBHZW5lcmF0b3IuYmFja2VuZF9tZXRo
b2RfaW1wbGVtZW50YXRpb25fbGlzdCwKLSAgICAgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX2hh
bmRsZXJfaW50ZXJmYWNlX2xpc3QsCi0gICAgICAgICAgICBHZW5lcmF0b3IuYmFja2VuZF9oYW5k
bGVyX2ltcGxlbWVudGF0aW9uX2xpc3QsCi0gICAgICAgICAgICBHZW5lcmF0b3IuYmFja2VuZF9k
aXNwYXRjaGVyX2ludGVyZmFjZV9saXN0XQotCi0gICAgICAgIGZvciBqc29uX2RvbWFpbiBpbiBq
c29uX2FwaVsiZG9tYWlucyJdOgotICAgICAgICAgICAgZG9tYWluX25hbWUgPSBqc29uX2RvbWFp
blsiZG9tYWluIl0KLSAgICAgICAgICAgIGRvbWFpbl9uYW1lX2xvd2VyID0gZG9tYWluX25hbWUu
bG93ZXIoKQotCi0gICAgICAgICAgICBkb21haW5fZml4ZXMgPSBEb21haW5OYW1lRml4ZXMuZ2V0
X2ZpeGVkX2RhdGEoZG9tYWluX25hbWUpCi0KLSAgICAgICAgICAgIGRvbWFpbl9ndWFyZCA9IGRv
bWFpbl9maXhlcy5nZXRfZ3VhcmQoKQotCi0gICAgICAgICAgICBpZiBkb21haW5fZ3VhcmQ6Ci0g
ICAgICAgICAgICAgICAgZm9yIGwgaW4gZmlyc3RfY3ljbGVfZ3VhcmRhYmxlX2xpc3RfbGlzdDoK
LSAgICAgICAgICAgICAgICAgICAgZG9tYWluX2d1YXJkLmdlbmVyYXRlX29wZW4obCkKLQotICAg
ICAgICAgICAgZnJvbnRlbmRfbWV0aG9kX2RlY2xhcmF0aW9uX2xpbmVzID0gW10KLQotICAgICAg
ICAgICAgaWYgKCJjb21tYW5kcyIgaW4ganNvbl9kb21haW4gb3IgImV2ZW50cyIgaW4ganNvbl9k
b21haW4pOgotICAgICAgICAgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX2pzX2RvbWFpbl9pbml0
aWFsaXplcl9saXN0LmFwcGVuZCgiLy8gJXMuXG4iICUgZG9tYWluX25hbWUpCi0gICAgICAgICAg
ICAgICAgaWYgbm90IGRvbWFpbl9maXhlcy5za2lwX2pzX2JpbmQ6Ci0gICAgICAgICAgICAgICAg
ICAgIEdlbmVyYXRvci5iYWNrZW5kX2pzX2RvbWFpbl9pbml0aWFsaXplcl9saXN0LmFwcGVuZCgi
SW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlciVzRGlzcGF0Y2hlciA9IEluc3BlY3RvckJhY2tlbmQu
cmVnaXN0ZXJEb21haW5EaXNwYXRjaGVyLmJpbmQoSW5zcGVjdG9yQmFja2VuZCwgXCIlc1wiKTtc
biIgJSAoZG9tYWluX25hbWUsIGRvbWFpbl9uYW1lKSkKLQotICAgICAgICAgICAgaWYgInR5cGVz
IiBpbiBqc29uX2RvbWFpbjoKLSAgICAgICAgICAgICAgICBmb3IganNvbl90eXBlIGluIGpzb25f
ZG9tYWluWyJ0eXBlcyJdOgotICAgICAgICAgICAgICAgICAgICBpZiAidHlwZSIgaW4ganNvbl90
eXBlIGFuZCBqc29uX3R5cGVbInR5cGUiXSA9PSAic3RyaW5nIiBhbmQgImVudW0iIGluIGpzb25f
dHlwZToKLSAgICAgICAgICAgICAgICAgICAgICAgIGVudW1fbmFtZSA9ICIlcy4lcyIgJSAoZG9t
YWluX25hbWUsIGpzb25fdHlwZVsiaWQiXSkKLSAgICAgICAgICAgICAgICAgICAgICAgIEdlbmVy
YXRvci5wcm9jZXNzX2VudW0oanNvbl90eXBlLCBlbnVtX25hbWUpCi0gICAgICAgICAgICAgICAg
ICAgIGVsaWYganNvbl90eXBlWyJ0eXBlIl0gPT0gIm9iamVjdCI6Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBpZiAicHJvcGVydGllcyIgaW4ganNvbl90eXBlOgotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGZvciBqc29uX3Byb3BlcnR5IGluIGpzb25fdHlwZVsicHJvcGVydGllcyJdOgot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAidHlwZSIgaW4ganNvbl9wcm9wZXJ0
eSBhbmQganNvbl9wcm9wZXJ0eVsidHlwZSJdID09ICJzdHJpbmciIGFuZCAiZW51bSIgaW4ganNv
bl9wcm9wZXJ0eToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW1fbmFt
ZSA9ICIlcy4lcyVzIiAlIChkb21haW5fbmFtZSwganNvbl90eXBlWyJpZCJdLCB0b190aXRsZV9j
YXNlKGpzb25fcHJvcGVydHlbIm5hbWUiXSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHZW5lcmF0b3IucHJvY2Vzc19lbnVtKGpzb25fcHJvcGVydHksIGVudW1fbmFtZSkK
LQotICAgICAgICAgICAgaWYgImV2ZW50cyIgaW4ganNvbl9kb21haW46Ci0gICAgICAgICAgICAg
ICAgaWYgZG9tYWluX2d1YXJkOgotICAgICAgICAgICAgICAgICAgICBkb21haW5fZ3VhcmQuZ2Vu
ZXJhdGVfb3BlbihHZW5lcmF0b3IuZnJvbnRlbmRfbWV0aG9kX2xpc3QpCi0gICAgICAgICAgICAg
ICAgICAgIGRvbWFpbl9ndWFyZC5nZW5lcmF0ZV9vcGVuKEdlbmVyYXRvci5mcm9udGVuZF9kb21h
aW5fY2xhc3NfbGluZXMpCi0KLSAgICAgICAgICAgICAgICBmb3IganNvbl9ldmVudCBpbiBqc29u
X2RvbWFpblsiZXZlbnRzIl06Ci0gICAgICAgICAgICAgICAgICAgIEdlbmVyYXRvci5wcm9jZXNz
X2V2ZW50KGpzb25fZXZlbnQsIGRvbWFpbl9uYW1lLCBmcm9udGVuZF9tZXRob2RfZGVjbGFyYXRp
b25fbGluZXMpCi0KLSAgICAgICAgICAgICAgICBHZW5lcmF0b3IuZnJvbnRlbmRfZG9tYWluX2Ns
YXNzX2xpbmVzLmFwcGVuZChUZW1wbGF0ZXMuZnJvbnRlbmRfZG9tYWluX2NsYXNzLnN1YnN0aXR1
dGUoTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgZXhwb3J0TWFjcm89SU5TUEVDVE9SX1RZUEVT
X0dFTkVSQVRPUl9DT05GSUdfTUFQW291dHB1dF90eXBlXVsiZXhwb3J0X21hY3JvIl0sCi0gICAg
ICAgICAgICAgICAgICAgIGRvbWFpbkNsYXNzTmFtZT0iSW5zcGVjdG9yJXNGcm9udGVuZERpc3Bh
dGNoZXIiICUgZG9tYWluX25hbWUsCi0gICAgICAgICAgICAgICAgICAgIGZyb250ZW5kRG9tYWlu
TWV0aG9kRGVjbGFyYXRpb25zPSIiLmpvaW4oZmxhdHRlbl9saXN0KGZyb250ZW5kX21ldGhvZF9k
ZWNsYXJhdGlvbl9saW5lcykpKSkKLQotICAgICAgICAgICAgICAgIGlmIGRvbWFpbl9ndWFyZDoK
LSAgICAgICAgICAgICAgICAgICAgZG9tYWluX2d1YXJkLmdlbmVyYXRlX2Nsb3NlKEdlbmVyYXRv
ci5mcm9udGVuZF9tZXRob2RfbGlzdCkKLSAgICAgICAgICAgICAgICAgICAgZG9tYWluX2d1YXJk
LmdlbmVyYXRlX2Nsb3NlKEdlbmVyYXRvci5mcm9udGVuZF9kb21haW5fY2xhc3NfbGluZXMpCi0K
LSAgICAgICAgICAgIGRpc3BhdGNoZXJfbmFtZSA9ICJJbnNwZWN0b3IiICsgQ2FwaXRhbGl6ZXIu
bG93ZXJfY2FtZWxfY2FzZV90b191cHBlcihkb21haW5fbmFtZSkgKyAiQmFja2VuZERpc3BhdGNo
ZXIiCi0gICAgICAgICAgICBhZ2VudF9pbnRlcmZhY2VfbmFtZSA9IGRpc3BhdGNoZXJfbmFtZSAr
ICJIYW5kbGVyIgotCi0gICAgICAgICAgICBpZiAiY29tbWFuZHMiIGluIGpzb25fZG9tYWluOgot
ICAgICAgICAgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX2Rpc3BhdGNoZXJfaW50ZXJmYWNlX2xp
c3QuYXBwZW5kKCJjbGFzcyAlcyAlcyBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3BlY3Rv
clN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHtcbiIgJSAoSU5TUEVDVE9SX1RZUEVTX0dF
TkVSQVRPUl9DT05GSUdfTUFQW291dHB1dF90eXBlXVsiZXhwb3J0X21hY3JvIl0sIGRpc3BhdGNo
ZXJfbmFtZSkpCi0gICAgICAgICAgICAgICAgR2VuZXJhdG9yLmJhY2tlbmRfZGlzcGF0Y2hlcl9p
bnRlcmZhY2VfbGlzdC5hcHBlbmQoInB1YmxpYzpcbiIpCi0gICAgICAgICAgICAgICAgR2VuZXJh
dG9yLmJhY2tlbmRfZGlzcGF0Y2hlcl9pbnRlcmZhY2VfbGlzdC5hcHBlbmQoIiAgICBzdGF0aWMg
UGFzc1JlZlB0cjwlcz4gY3JlYXRlKEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXIqLCAlcyopO1xuIiAlIChkaXNwYXRjaGVyX25hbWUsIGFnZW50X2ludGVyZmFjZV9uYW1lKSkK
LSAgICAgICAgICAgICAgICBHZW5lcmF0b3IuYmFja2VuZF9kaXNwYXRjaGVyX2ludGVyZmFjZV9s
aXN0LmFwcGVuZCgiICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaChsb25nIGNhbGxJZCwgY29uc3Qg
U3RyaW5nJiBtZXRob2QsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IG1l
c3NhZ2UpIG92ZXJyaWRlO1xuIikKLSAgICAgICAgICAgICAgICBHZW5lcmF0b3IuYmFja2VuZF9k
aXNwYXRjaGVyX2ludGVyZmFjZV9saXN0LmFwcGVuZCgicHJpdmF0ZTpcbiIpCi0KLSAgICAgICAg
ICAgICAgICBHZW5lcmF0b3IuYmFja2VuZF9oYW5kbGVyX2ludGVyZmFjZV9saXN0LmFwcGVuZCgi
Y2xhc3MgJXMgJXMge1xuIiAlIChJTlNQRUNUT1JfVFlQRVNfR0VORVJBVE9SX0NPTkZJR19NQVBb
b3V0cHV0X3R5cGVdWyJleHBvcnRfbWFjcm8iXSwgYWdlbnRfaW50ZXJmYWNlX25hbWUpKQotICAg
ICAgICAgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX2hhbmRsZXJfaW50ZXJmYWNlX2xpc3QuYXBw
ZW5kKCJwdWJsaWM6XG4iKQotCi0gICAgICAgICAgICAgICAgYmFja2VuZF9tZXRob2RfY291bnQg
PSBsZW4oR2VuZXJhdG9yLmJhY2tlbmRfbWV0aG9kX2ltcGxlbWVudGF0aW9uX2xpc3QpCi0KLSAg
ICAgICAgICAgICAgICBkaXNwYXRjaGVyX2lmX2NoYWluID0gW10KLSAgICAgICAgICAgICAgICBk
aXNwYXRjaGVyX2NvbW1hbmRzX2xpc3QgPSBbXQotICAgICAgICAgICAgICAgIGZvciBqc29uX2Nv
bW1hbmQgaW4ganNvbl9kb21haW5bImNvbW1hbmRzIl06Ci0gICAgICAgICAgICAgICAgICAgIEdl
bmVyYXRvci5wcm9jZXNzX2NvbW1hbmQoanNvbl9jb21tYW5kLCBkb21haW5fbmFtZSwgYWdlbnRf
aW50ZXJmYWNlX25hbWUsIGRpc3BhdGNoZXJfbmFtZSwgZGlzcGF0Y2hlcl9pZl9jaGFpbiwgZGlz
cGF0Y2hlcl9jb21tYW5kc19saXN0KQotCi0gICAgICAgICAgICAgICAgR2VuZXJhdG9yLmJhY2tl
bmRfaGFuZGxlcl9pbnRlcmZhY2VfbGlzdC5hcHBlbmQoInByb3RlY3RlZDpcbiIpCi0gICAgICAg
ICAgICAgICAgR2VuZXJhdG9yLmJhY2tlbmRfaGFuZGxlcl9pbnRlcmZhY2VfbGlzdC5hcHBlbmQo
IiAgICB2aXJ0dWFsIH4lcygpO1xuIiAlIGFnZW50X2ludGVyZmFjZV9uYW1lKQotICAgICAgICAg
ICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX2hhbmRsZXJfaW50ZXJmYWNlX2xpc3QuYXBwZW5kKCJ9
O1xuXG4iKQotCi0gICAgICAgICAgICAgICAgR2VuZXJhdG9yLmJhY2tlbmRfaGFuZGxlcl9pbXBs
ZW1lbnRhdGlvbl9saXN0LmFwcGVuZCgiJXM6On4lcygpIHsgfVxuIiAlIChhZ2VudF9pbnRlcmZh
Y2VfbmFtZSwgYWdlbnRfaW50ZXJmYWNlX25hbWUpKQotCi0gICAgICAgICAgICAgICAgR2VuZXJh
dG9yLmJhY2tlbmRfZGlzcGF0Y2hlcl9pbnRlcmZhY2VfbGlzdC5hcHBlbmQoInByaXZhdGU6XG4i
KQotICAgICAgICAgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX2Rpc3BhdGNoZXJfaW50ZXJmYWNl
X2xpc3QuYXBwZW5kKCIgICAgJXMoSW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
ciosICVzKik7XG4iICUgKGRpc3BhdGNoZXJfbmFtZSwgYWdlbnRfaW50ZXJmYWNlX25hbWUpKQot
ICAgICAgICAgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX2Rpc3BhdGNoZXJfaW50ZXJmYWNlX2xp
c3QuYXBwZW5kKCIgICAgJXMqIG1fYWdlbnQ7XG4iICUgYWdlbnRfaW50ZXJmYWNlX25hbWUpCi0g
ICAgICAgICAgICAgICAgR2VuZXJhdG9yLmJhY2tlbmRfZGlzcGF0Y2hlcl9pbnRlcmZhY2VfbGlz
dC5hcHBlbmQoIn07XG5cbiIpCi0KLSAgICAgICAgICAgICAgICBHZW5lcmF0b3IuYmFja2VuZF9t
ZXRob2RfaW1wbGVtZW50YXRpb25fbGlzdC5pbnNlcnQoYmFja2VuZF9tZXRob2RfY291bnQsIFRl
bXBsYXRlcy5iYWNrZW5kX2Rpc3BhdGNoZXJfY29uc3RydWN0b3Iuc3Vic3RpdHV0ZShOb25lLAot
ICAgICAgICAgICAgICAgICAgICBkb21haW5OYW1lPWRvbWFpbl9uYW1lLAotICAgICAgICAgICAg
ICAgICAgICBkaXNwYXRjaGVyTmFtZT1kaXNwYXRjaGVyX25hbWUsCi0gICAgICAgICAgICAgICAg
ICAgIGFnZW50TmFtZT1hZ2VudF9pbnRlcmZhY2VfbmFtZSkpCi0KLSAgICAgICAgICAgICAgICBp
ZiBsZW4oanNvbl9kb21haW5bImNvbW1hbmRzIl0pIDw9IDU6Ci0gICAgICAgICAgICAgICAgICAg
IEdlbmVyYXRvci5iYWNrZW5kX21ldGhvZF9pbXBsZW1lbnRhdGlvbl9saXN0Lmluc2VydChiYWNr
ZW5kX21ldGhvZF9jb3VudCArIDEsIFRlbXBsYXRlcy5iYWNrZW5kX2Rpc3BhdGNoZXJfZGlzcGF0
Y2hfbWV0aG9kX3NpbXBsZS5zdWJzdGl0dXRlKE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAg
ICBkb21haW5OYW1lPWRvbWFpbl9uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGF0
Y2hlck5hbWU9ZGlzcGF0Y2hlcl9uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgaWZDaGFp
bj0iXG4iLmpvaW4oZGlzcGF0Y2hlcl9pZl9jaGFpbikpKQotICAgICAgICAgICAgICAgIGVsc2U6
Ci0gICAgICAgICAgICAgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX21ldGhvZF9pbXBsZW1lbnRh
dGlvbl9saXN0Lmluc2VydChiYWNrZW5kX21ldGhvZF9jb3VudCArIDEsIFRlbXBsYXRlcy5iYWNr
ZW5kX2Rpc3BhdGNoZXJfZGlzcGF0Y2hfbWV0aG9kLnN1YnN0aXR1dGUoTm9uZSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGRvbWFpbk5hbWU9ZG9tYWluX25hbWUsCi0gICAgICAgICAgICAgICAg
ICAgICAgICBkaXNwYXRjaGVyTmFtZT1kaXNwYXRjaGVyX25hbWUsCi0gICAgICAgICAgICAgICAg
ICAgICAgICBkaXNwYXRjaGVyQ29tbWFuZHM9IlxuIi5qb2luKGRpc3BhdGNoZXJfY29tbWFuZHNf
bGlzdCkpKQotCi0gICAgICAgICAgICAgICAgaWYgZG9tYWluX2d1YXJkOgotICAgICAgICAgICAg
ICAgICAgICBmb3IgbCBpbiByZXZlcnNlZChmaXJzdF9jeWNsZV9ndWFyZGFibGVfbGlzdF9saXN0
KToKLSAgICAgICAgICAgICAgICAgICAgICAgIGRvbWFpbl9ndWFyZC5nZW5lcmF0ZV9jbG9zZShs
KQotICAgICAgICAgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX2pzX2RvbWFpbl9pbml0aWFsaXpl
cl9saXN0LmFwcGVuZCgiXG4iKQotCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBwcm9jZXNz
X2VudW0oanNvbl9lbnVtLCBlbnVtX25hbWUpOgotICAgICAgICBlbnVtX21lbWJlcnMgPSBbXQot
ICAgICAgICBmb3IgbWVtYmVyIGluIGpzb25fZW51bVsiZW51bSJdOgotICAgICAgICAgICAgZW51
bV9tZW1iZXJzLmFwcGVuZCgiJXM6IFwiJXNcIiIgJSAoZml4X2NhbWVsX2Nhc2UobWVtYmVyKSwg
bWVtYmVyKSkKLQotICAgICAgICBHZW5lcmF0b3IuYmFja2VuZF9qc19kb21haW5faW5pdGlhbGl6
ZXJfbGlzdC5hcHBlbmQoIkluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFbnVtKFwiJXNcIiwgeyVz
fSk7XG4iICUgKAotICAgICAgICAgICAgZW51bV9uYW1lLCAiLCAiLmpvaW4oZW51bV9tZW1iZXJz
KSkpCi0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIHByb2Nlc3NfZXZlbnQoanNvbl9ldmVu
dCwgZG9tYWluX25hbWUsIGZyb250ZW5kX21ldGhvZF9kZWNsYXJhdGlvbl9saW5lcyk6Ci0gICAg
ICAgIGV2ZW50X25hbWUgPSBqc29uX2V2ZW50WyJuYW1lIl0KLQotICAgICAgICBhZF9ob2NfdHlw
ZV9vdXRwdXQgPSBbXQotICAgICAgICBmcm9udGVuZF9tZXRob2RfZGVjbGFyYXRpb25fbGluZXMu
YXBwZW5kKGFkX2hvY190eXBlX291dHB1dCkKLSAgICAgICAgYWRfaG9jX3R5cGVfd3JpdGVyID0g
V3JpdGVyKGFkX2hvY190eXBlX291dHB1dCwgIiAgICAgICAgIikKLQotICAgICAgICBkZWNsX3Bh
cmFtZXRlcl9saXN0ID0gW10KLQotICAgICAgICBqc29uX3BhcmFtZXRlcnMgPSBqc29uX2V2ZW50
LmdldCgicGFyYW1ldGVycyIpCi0gICAgICAgIEdlbmVyYXRvci5nZW5lcmF0ZV9zZW5kX21ldGhv
ZChqc29uX3BhcmFtZXRlcnMsIGV2ZW50X25hbWUsIGRvbWFpbl9uYW1lLCBhZF9ob2NfdHlwZV93
cml0ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNsX3BhcmFt
ZXRlcl9saXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2VuZXJh
dG9yLkV2ZW50TWV0aG9kU3RydWN0VGVtcGxhdGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHZW5lcmF0b3IuZnJvbnRlbmRfbWV0aG9kX2xpc3QsIFRlbXBsYXRlcy5m
cm9udGVuZF9tZXRob2QsIHsiZXZlbnROYW1lIjogZXZlbnRfbmFtZX0pCi0KLSAgICAgICAgYmFj
a2VuZF9qc19ldmVudF9wYXJhbV9saXN0ID0gW10KLSAgICAgICAgaWYganNvbl9wYXJhbWV0ZXJz
OgotICAgICAgICAgICAgZm9yIHBhcmFtZXRlciBpbiBqc29uX3BhcmFtZXRlcnM6Ci0gICAgICAg
ICAgICAgICAgcGFyYW1ldGVyX25hbWUgPSBwYXJhbWV0ZXJbIm5hbWUiXQotICAgICAgICAgICAg
ICAgIGJhY2tlbmRfanNfZXZlbnRfcGFyYW1fbGlzdC5hcHBlbmQoIlwiJXNcIiIgJSBwYXJhbWV0
ZXJfbmFtZSkKLQotICAgICAgICBmcm9udGVuZF9tZXRob2RfZGVjbGFyYXRpb25fbGluZXMuYXBw
ZW5kKAotICAgICAgICAgICAgIiAgICB2b2lkICVzKCVzKTtcbiIgJSAoZXZlbnRfbmFtZSwgIiwg
Ii5qb2luKGRlY2xfcGFyYW1ldGVyX2xpc3QpKSkKLQotICAgICAgICBHZW5lcmF0b3IuYmFja2Vu
ZF9qc19kb21haW5faW5pdGlhbGl6ZXJfbGlzdC5hcHBlbmQoIkluc3BlY3RvckJhY2tlbmQucmVn
aXN0ZXJFdmVudChcIiVzLiVzXCIsIFslc10pO1xuIiAlICgKLSAgICAgICAgICAgIGRvbWFpbl9u
YW1lLCBldmVudF9uYW1lLCAiLCAiLmpvaW4oYmFja2VuZF9qc19ldmVudF9wYXJhbV9saXN0KSkp
Ci0KLSAgICBjbGFzcyBFdmVudE1ldGhvZFN0cnVjdFRlbXBsYXRlOgotICAgICAgICBAc3RhdGlj
bWV0aG9kCi0gICAgICAgIGRlZiBhcHBlbmRfcHJvbG9nKGxpbmVfbGlzdCk6Ci0gICAgICAgICAg
ICBsaW5lX2xpc3QuYXBwZW5kKCIgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zT2Jq
ZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTtcbiIpCi0KLSAgICAgICAgQHN0YXRpY21l
dGhvZAotICAgICAgICBkZWYgYXBwZW5kX2VwaWxvZyhsaW5lX2xpc3QpOgotICAgICAgICAgICAg
bGluZV9saXN0LmFwcGVuZCgiICAgIGpzb25NZXNzYWdlLT5zZXRPYmplY3QoQVNDSUlMaXRlcmFs
KFwicGFyYW1zXCIpLCBwYXJhbXNPYmplY3QpO1xuIikKLQotICAgICAgICBjb250YWluZXJfbmFt
ZSA9ICJwYXJhbXNPYmplY3QiCi0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIHByb2Nlc3Nf
Y29tbWFuZChqc29uX2NvbW1hbmQsIGRvbWFpbl9uYW1lLCBhZ2VudF9pbnRlcmZhY2VfbmFtZSwg
ZGlzcGF0Y2hlcl9uYW1lLCBkaXNwYXRjaGVyX2lmX2NoYWluLCBkaXNwYXRjaGVyX2NvbW1hbmRz
X2xpc3QpOgotICAgICAgICBqc29uX2NvbW1hbmRfbmFtZSA9IGpzb25fY29tbWFuZFsibmFtZSJd
Ci0KLSAgICAgICAgYWRfaG9jX3R5cGVfb3V0cHV0ID0gW10KLSAgICAgICAgR2VuZXJhdG9yLmJh
Y2tlbmRfaGFuZGxlcl9pbnRlcmZhY2VfbGlzdC5hcHBlbmQoYWRfaG9jX3R5cGVfb3V0cHV0KQot
ICAgICAgICBhZF9ob2NfdHlwZV93cml0ZXIgPSBXcml0ZXIoYWRfaG9jX3R5cGVfb3V0cHV0LCAi
ICAgICIpCi0KLSAgICAgICAgR2VuZXJhdG9yLmJhY2tlbmRfZGlzcGF0Y2hlcl9pbnRlcmZhY2Vf
bGlzdC5hcHBlbmQoIiAgICB2b2lkICVzKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3I6Oklu
c3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7XG4iICUganNvbl9jb21tYW5kX25hbWUpCi0KLSAgICAg
ICAgR2VuZXJhdG9yLmJhY2tlbmRfaGFuZGxlcl9pbnRlcmZhY2VfbGlzdC5hcHBlbmQoIiAgICB2
aXJ0dWFsIHZvaWQgJXMoRXJyb3JTdHJpbmcqIiAlIGpzb25fY29tbWFuZF9uYW1lKQotCi0gICAg
ICAgIGlmIG5vdCBkaXNwYXRjaGVyX2lmX2NoYWluOgotICAgICAgICAgICAgZGlzcGF0Y2hlcl9p
Zl9jaGFpbi5hcHBlbmQoIiAgICBpZiAobWV0aG9kID09IFwiJXNcIikiICUganNvbl9jb21tYW5k
X25hbWUpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBkaXNwYXRjaGVyX2lmX2NoYWluLmFw
cGVuZCgiICAgIGVsc2UgaWYgKG1ldGhvZCA9PSBcIiVzXCIpIiAlIGpzb25fY29tbWFuZF9uYW1l
KQotICAgICAgICBkaXNwYXRjaGVyX2lmX2NoYWluLmFwcGVuZCgiICAgICAgICAlcyhjYWxsSWQs
ICptZXNzYWdlLmdldCgpKTsiICUganNvbl9jb21tYW5kX25hbWUpCi0gICAgICAgIGRpc3BhdGNo
ZXJfY29tbWFuZHNfbGlzdC5hcHBlbmQoIiAgICAgICAgICAgIHsgXCIlc1wiLCAmJXM6OiVzIH0s
IiAlIChqc29uX2NvbW1hbmRfbmFtZSwgZGlzcGF0Y2hlcl9uYW1lLCBqc29uX2NvbW1hbmRfbmFt
ZSkpCi0KLSAgICAgICAgbWV0aG9kX2luX3BhcmFtc19oYW5kbGluZyA9IFtdCi0gICAgICAgIG1l
dGhvZF9kaXNwYXRjaF9oYW5kbGluZyA9IFtdCi0gICAgICAgIG1ldGhvZF9vdXRfcGFyYW1zX2hh
bmRsaW5nID0gW10KLSAgICAgICAgbWV0aG9kX2VuZGluZ19oYW5kbGluZyA9IFtdCi0gICAgICAg
IG1ldGhvZF9yZXF1ZXN0X21lc3NhZ2VfcGFyYW1fbmFtZSA9ICIiCi0gICAgICAgIGFnZW50X2Nh
bGxfcGFyYW1fbGlzdCA9IFtdCi0gICAgICAgIGpzX3BhcmFtZXRlcnNfdGV4dCA9ICIiCi0gICAg
ICAgIGlmICJwYXJhbWV0ZXJzIiBpbiBqc29uX2NvbW1hbmQ6Ci0gICAgICAgICAgICBqc29uX3Bh
cmFtcyA9IGpzb25fY29tbWFuZFsicGFyYW1ldGVycyJdCi0gICAgICAgICAgICBtZXRob2RfcmVx
dWVzdF9tZXNzYWdlX3BhcmFtX25hbWUgPSAiIG1lc3NhZ2UiCi0gICAgICAgICAgICBtZXRob2Rf
aW5fcGFyYW1zX2hhbmRsaW5nLmFwcGVuZCgiICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJv
dG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7XG4iKQotICAgICAgICAgICAg
bWV0aG9kX2luX3BhcmFtc19oYW5kbGluZy5hcHBlbmQoIiAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBwYXJhbXNDb250YWluZXIgPSBtZXNzYWdlLmdldE9iamVjdChBU0NJSUxpdGVyYWwoXCJw
YXJhbXNcIikpO1xuIikKLSAgICAgICAgICAgIG1ldGhvZF9pbl9wYXJhbXNfaGFuZGxpbmcuYXBw
ZW5kKCIgICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250
YWluZXIuZ2V0KCk7XG4iKQotICAgICAgICAgICAgbWV0aG9kX2luX3BhcmFtc19oYW5kbGluZy5h
cHBlbmQoIiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVy
cm9ycy5nZXQoKTtcbiIpCi0gICAgICAgICAgICBqc19wYXJhbV9saXN0ID0gW10KLQotICAgICAg
ICAgICAgZm9yIGpzb25fcGFyYW1ldGVyIGluIGpzb25fcGFyYW1zOgotICAgICAgICAgICAgICAg
IGpzb25fcGFyYW1fbmFtZSA9IGpzb25fcGFyYW1ldGVyWyJuYW1lIl0KLSAgICAgICAgICAgICAg
ICBwYXJhbV9yYXdfdHlwZSA9IHJlc29sdmVfcGFyYW1fcmF3X3R5cGUoanNvbl9wYXJhbWV0ZXIs
IGRvbWFpbl9uYW1lKQotCi0gICAgICAgICAgICAgICAgZ2V0dGVyX25hbWUgPSBwYXJhbV9yYXdf
dHlwZS5nZXRfZ2V0dGVyX25hbWUoKQotCi0gICAgICAgICAgICAgICAgb3B0aW9uYWwgPSBqc29u
X3BhcmFtZXRlci5nZXQoIm9wdGlvbmFsIikKLQotICAgICAgICAgICAgICAgIG5vbl9vcHRpb25h
bF90eXBlX21vZGVsID0gcGFyYW1fcmF3X3R5cGUuZ2V0X3Jhd190eXBlX21vZGVsKCkKLSAgICAg
ICAgICAgICAgICBpZiBvcHRpb25hbDoKLSAgICAgICAgICAgICAgICAgICAgdHlwZV9tb2RlbCA9
IG5vbl9vcHRpb25hbF90eXBlX21vZGVsLmdldF9vcHRpb25hbCgpCi0gICAgICAgICAgICAgICAg
ZWxzZToKLSAgICAgICAgICAgICAgICAgICAgdHlwZV9tb2RlbCA9IG5vbl9vcHRpb25hbF90eXBl
X21vZGVsCi0KLSAgICAgICAgICAgICAgICBpZiBvcHRpb25hbDoKLSAgICAgICAgICAgICAgICAg
ICAgY29kZSA9ICgiICAgIGJvb2wgJXNfdmFsdWVGb3VuZCA9IGZhbHNlO1xuIgotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICIgICAgJXMgaW5fJXMgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlcjo6Z2V0JXMocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoXCIlc1wiKSwgJiVz
X3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRyKTtcbiIgJQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKGpzb25fcGFyYW1fbmFtZSwgbm9uX29wdGlvbmFsX3R5cGVfbW9kZWwuZ2V0X2Nv
bW1hbmRfcmV0dXJuX3Bhc3NfbW9kZWwoKS5nZXRfcmV0dXJuX3Zhcl90eXBlKCksIGpzb25fcGFy
YW1fbmFtZSwgZ2V0dGVyX25hbWUsIGpzb25fcGFyYW1fbmFtZSwganNvbl9wYXJhbV9uYW1lKSkK
LSAgICAgICAgICAgICAgICAgICAgcGFyYW0gPSAiLCAlc192YWx1ZUZvdW5kID8gJmluXyVzIDog
bnVsbHB0ciIgJSAoanNvbl9wYXJhbV9uYW1lLCBqc29uX3BhcmFtX25hbWUpCi0gICAgICAgICAg
ICAgICAgICAgICMgRklYTUU6IHBhc3Mgb3B0aW9uYWwgcmVmcHRyLXZhbHVlcyBhcyBQYXNzUmVm
UHRyCi0gICAgICAgICAgICAgICAgICAgIGZvcm1hbF9wYXJhbV90eXBlX3BhdHRlcm4gPSAiY29u
c3QgJXMqIgotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIGNvZGUg
PSAoIiAgICAlcyBpbl8lcyA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXQlcyhwYXJh
bXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbChcIiVzXCIpLCBudWxscHRyLCBwcm90b2NvbEVy
cm9yc1B0cik7XG4iICUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAobm9uX29wdGlvbmFs
X3R5cGVfbW9kZWwuZ2V0X2NvbW1hbmRfcmV0dXJuX3Bhc3NfbW9kZWwoKS5nZXRfcmV0dXJuX3Zh
cl90eXBlKCksIGpzb25fcGFyYW1fbmFtZSwgZ2V0dGVyX25hbWUsIGpzb25fcGFyYW1fbmFtZSkp
Ci0gICAgICAgICAgICAgICAgICAgIHBhcmFtID0gIiwgaW5fJXMiICUganNvbl9wYXJhbV9uYW1l
Ci0gICAgICAgICAgICAgICAgICAgICMgRklYTUU6IHBhc3Mgbm90LW9wdGlvbmFsIHJlZnB0ci12
YWx1ZXMgYXMgTm9uTnVsbFBhc3NSZWZQdHIKLSAgICAgICAgICAgICAgICAgICAgaWYgcGFyYW1f
cmF3X3R5cGUuaXNfaGVhdnlfdmFsdWUoKToKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1h
bF9wYXJhbV90eXBlX3BhdHRlcm4gPSAiY29uc3QgJXMmIgotICAgICAgICAgICAgICAgICAgICBl
bHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWFsX3BhcmFtX3R5cGVfcGF0dGVybiA9
ICIlcyIKLQotICAgICAgICAgICAgICAgIG1ldGhvZF9pbl9wYXJhbXNfaGFuZGxpbmcuYXBwZW5k
KGNvZGUpCi0gICAgICAgICAgICAgICAgYWdlbnRfY2FsbF9wYXJhbV9saXN0LmFwcGVuZChwYXJh
bSkKLSAgICAgICAgICAgICAgICBHZW5lcmF0b3IuYmFja2VuZF9oYW5kbGVyX2ludGVyZmFjZV9s
aXN0LmFwcGVuZCgiLCAlcyBpbl8lcyIgJSAoZm9ybWFsX3BhcmFtX3R5cGVfcGF0dGVybiAlIG5v
bl9vcHRpb25hbF90eXBlX21vZGVsLmdldF9jb21tYW5kX3JldHVybl9wYXNzX21vZGVsKCkuZ2V0
X3JldHVybl92YXJfdHlwZSgpLCBqc29uX3BhcmFtX25hbWUpKQotCi0gICAgICAgICAgICAgICAg
anNfYmluZF90eXBlID0gcGFyYW1fcmF3X3R5cGUuZ2V0X2pzX2JpbmRfdHlwZSgpCi0gICAgICAg
ICAgICAgICAganNfcGFyYW1fdGV4dCA9ICJ7XCJuYW1lXCI6IFwiJXNcIiwgXCJ0eXBlXCI6IFwi
JXNcIiwgXCJvcHRpb25hbFwiOiAlc30iICUgKAotICAgICAgICAgICAgICAgICAgICBqc29uX3Bh
cmFtX25hbWUsCi0gICAgICAgICAgICAgICAgICAgIGpzX2JpbmRfdHlwZSwKLSAgICAgICAgICAg
ICAgICAgICAgKCJ0cnVlIiBpZiAoIm9wdGlvbmFsIiBpbiBqc29uX3BhcmFtZXRlciBhbmQganNv
bl9wYXJhbWV0ZXJbIm9wdGlvbmFsIl0pIGVsc2UgImZhbHNlIikpCi0KLSAgICAgICAgICAgICAg
ICBqc19wYXJhbV9saXN0LmFwcGVuZChqc19wYXJhbV90ZXh0KQotCi0gICAgICAgICAgICBtZXRo
b2RfaW5fcGFyYW1zX2hhbmRsaW5nLmFwcGVuZCgiICAgIGlmIChwcm90b2NvbEVycm9ycy0+bGVu
Z3RoKCkpIHtcbiIpCi0gICAgICAgICAgICBtZXRob2RfaW5fcGFyYW1zX2hhbmRsaW5nLmFwcGVu
ZCgiICAgICAgICBTdHJpbmcgZXJyb3JNZXNzYWdlID0gU3RyaW5nOjpmb3JtYXQoXCJTb21lIGFy
Z3VtZW50cyBvZiBtZXRob2QgJyUlcycgY2FuJ3QgYmUgcHJvY2Vzc2VkXCIsIFwiJXMuJXNcIik7
XG4iICUgKGRvbWFpbl9uYW1lLCBqc29uX2NvbW1hbmRfbmFtZSkpCi0gICAgICAgICAgICBtZXRo
b2RfaW5fcGFyYW1zX2hhbmRsaW5nLmFwcGVuZCgiICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVy
LT5yZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
OjpJbnZhbGlkUGFyYW1zLCBlcnJvck1lc3NhZ2UsIHByb3RvY29sRXJyb3JzLnJlbGVhc2UoKSk7
XG4iKQotICAgICAgICAgICAgbWV0aG9kX2luX3BhcmFtc19oYW5kbGluZy5hcHBlbmQoIiAgICAg
ICAgcmV0dXJuO1xuIikKLSAgICAgICAgICAgIG1ldGhvZF9pbl9wYXJhbXNfaGFuZGxpbmcuYXBw
ZW5kKCIgICAgfVxuIikKLSAgICAgICAgICAgIG1ldGhvZF9pbl9wYXJhbXNfaGFuZGxpbmcuYXBw
ZW5kKCJcbiIpCi0KLSAgICAgICAgICAgIGpzX3BhcmFtZXRlcnNfdGV4dCA9ICIsICIuam9pbihq
c19wYXJhbV9saXN0KQotCi0gICAgICAgIG1ldGhvZF9kaXNwYXRjaF9oYW5kbGluZy5hcHBlbmQo
IiAgICBFcnJvclN0cmluZyBlcnJvcjtcbiIpCi0gICAgICAgIG1ldGhvZF9kaXNwYXRjaF9oYW5k
bGluZy5hcHBlbmQoIiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0
b3JPYmplY3Q6OmNyZWF0ZSgpO1xuIikKLQotICAgICAgICBpZiBqc29uX2NvbW1hbmQuZ2V0KCJh
c3luYyIpID09IFRydWU6Ci0gICAgICAgICAgICBjYWxsYmFja19uYW1lID0gQ2FwaXRhbGl6ZXIu
bG93ZXJfY2FtZWxfY2FzZV90b191cHBlcihqc29uX2NvbW1hbmRfbmFtZSkgKyAiQ2FsbGJhY2si
Ci0KLSAgICAgICAgICAgIGNhbGxiYWNrX291dHB1dCA9IFtdCi0gICAgICAgICAgICBjYWxsYmFj
a193cml0ZXIgPSBXcml0ZXIoY2FsbGJhY2tfb3V0cHV0LCBhZF9ob2NfdHlwZV93cml0ZXIuZ2V0
X2luZGVudCgpKQotCi0gICAgICAgICAgICBkZWNsX3BhcmFtZXRlcl9saXN0ID0gW10KLSAgICAg
ICAgICAgIEdlbmVyYXRvci5nZW5lcmF0ZV9zZW5kX21ldGhvZChqc29uX2NvbW1hbmQuZ2V0KCJy
ZXR1cm5zIiksIGpzb25fY29tbWFuZF9uYW1lLCBkb21haW5fbmFtZSwgYWRfaG9jX3R5cGVfd3Jp
dGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlY2xfcGFy
YW1ldGVyX2xpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
R2VuZXJhdG9yLkNhbGxiYWNrTWV0aG9kU3RydWN0VGVtcGxhdGUsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR2VuZXJhdG9yLmJhY2tlbmRfbWV0aG9kX2ltcGxl
bWVudGF0aW9uX2xpc3QsIFRlbXBsYXRlcy5jYWxsYmFja19tZXRob2QsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyJjYWxsYmFja05hbWUiOiBjYWxsYmFja19u
YW1lLCAiaGFuZGxlck5hbWUiOiBhZ2VudF9pbnRlcmZhY2VfbmFtZX0pCi0KLSAgICAgICAgICAg
IGNhbGxiYWNrX3dyaXRlci5uZXdsaW5lKCJjbGFzcyAiICsgY2FsbGJhY2tfbmFtZSArICIgOiBw
dWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNl
IHtcbiIpCi0gICAgICAgICAgICBjYWxsYmFja193cml0ZXIubmV3bGluZSgicHVibGljOlxuIikK
LSAgICAgICAgICAgIGNhbGxiYWNrX3dyaXRlci5uZXdsaW5lKCIgICAgIiArIGNhbGxiYWNrX25h
bWUgKyAiKFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4s
IGludCBpZCk7XG4iKQotICAgICAgICAgICAgY2FsbGJhY2tfd3JpdGVyLm5ld2xpbmUoIiAgICB2
b2lkIHNlbmRTdWNjZXNzKCIgKyAiLCAiLmpvaW4oZGVjbF9wYXJhbWV0ZXJfbGlzdCkgKyAiKTtc
biIpCi0gICAgICAgICAgICBjYWxsYmFja193cml0ZXIubmV3bGluZSgifTtcbiIpCi0KLSAgICAg
ICAgICAgIGFkX2hvY190eXBlX291dHB1dC5hcHBlbmQoY2FsbGJhY2tfb3V0cHV0KQotCi0gICAg
ICAgICAgICBtZXRob2RfZGlzcGF0Y2hfaGFuZGxpbmcuYXBwZW5kKCIgICAgUmVmUHRyPCVzOjol
cz4gY2FsbGJhY2sgPSBhZG9wdFJlZihuZXcgJXM6OiVzKG1fYmFja2VuZERpc3BhdGNoZXIsY2Fs
bElkKSk7XG4iICUgKGFnZW50X2ludGVyZmFjZV9uYW1lLCBjYWxsYmFja19uYW1lLCBhZ2VudF9p
bnRlcmZhY2VfbmFtZSwgY2FsbGJhY2tfbmFtZSkpCi0gICAgICAgICAgICBtZXRob2RfZW5kaW5n
X2hhbmRsaW5nLmFwcGVuZCgiICAgIGlmIChlcnJvci5sZW5ndGgoKSkge1xuIikKLSAgICAgICAg
ICAgIG1ldGhvZF9lbmRpbmdfaGFuZGxpbmcuYXBwZW5kKCIgICAgICAgIGNhbGxiYWNrLT5kaXNh
YmxlKCk7XG4iKQotICAgICAgICAgICAgbWV0aG9kX2VuZGluZ19oYW5kbGluZy5hcHBlbmQoIiAg
ICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElkLCBJ
bnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3Ip
O1xuIikKLSAgICAgICAgICAgIG1ldGhvZF9lbmRpbmdfaGFuZGxpbmcuYXBwZW5kKCIgICAgICAg
IHJldHVybjtcbiIpCi0gICAgICAgICAgICBtZXRob2RfZW5kaW5nX2hhbmRsaW5nLmFwcGVuZCgi
ICAgIH0iKQotCi0gICAgICAgICAgICBhZ2VudF9jYWxsX3BhcmFtX2xpc3QuYXBwZW5kKCIsIGNh
bGxiYWNrIikKLSAgICAgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX2hhbmRsZXJfaW50ZXJmYWNl
X2xpc3QuYXBwZW5kKCIsIFBhc3NSZWZQdHI8JXM+IGNhbGxiYWNrIiAlIGNhbGxiYWNrX25hbWUp
Ci0gICAgICAgIGVsaWYgInJldHVybnMiIGluIGpzb25fY29tbWFuZDoKLSAgICAgICAgICAgIGhh
c19tdWx0aXBsZV9yZXR1cm5zID0gbGVuKGpzb25fY29tbWFuZFsicmV0dXJucyJdKSA+IDEKLSAg
ICAgICAgICAgIGlmIGhhc19tdWx0aXBsZV9yZXR1cm5zOgotICAgICAgICAgICAgICAgIG1ldGhv
ZF9vdXRfcGFyYW1zX2hhbmRsaW5nLmFwcGVuZCgiICAgIGlmICghZXJyb3IubGVuZ3RoKCkpIHtc
biIpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIG1ldGhvZF9vdXRfcGFyYW1z
X2hhbmRsaW5nLmFwcGVuZCgiICAgIGlmICghZXJyb3IubGVuZ3RoKCkpXG4iKQotCi0gICAgICAg
ICAgICBmb3IganNvbl9yZXR1cm4gaW4ganNvbl9jb21tYW5kWyJyZXR1cm5zIl06Ci0KLSAgICAg
ICAgICAgICAgICBqc29uX3JldHVybl9uYW1lID0ganNvbl9yZXR1cm5bIm5hbWUiXQotCi0gICAg
ICAgICAgICAgICAgb3B0aW9uYWwgPSBib29sKGpzb25fcmV0dXJuLmdldCgib3B0aW9uYWwiKSkK
LQotICAgICAgICAgICAgICAgIHJldHVybl90eXBlX2JpbmRpbmcgPSBHZW5lcmF0b3IucmVzb2x2
ZV90eXBlX2FuZF9nZW5lcmF0ZV9hZF9ob2MoanNvbl9yZXR1cm4sIGpzb25fY29tbWFuZF9uYW1l
LCBkb21haW5fbmFtZSwgYWRfaG9jX3R5cGVfd3JpdGVyLCBhZ2VudF9pbnRlcmZhY2VfbmFtZSAr
ICI6OiIpCi0KLSAgICAgICAgICAgICAgICByYXdfdHlwZSA9IHJldHVybl90eXBlX2JpbmRpbmcu
cmVkdWNlX3RvX3Jhd190eXBlKCkKLSAgICAgICAgICAgICAgICBzZXR0ZXJfdHlwZSA9IHJhd190
eXBlLmdldF9zZXR0ZXJfbmFtZSgpCi0gICAgICAgICAgICAgICAgaW5pdGlhbGl6ZXIgPSByYXdf
dHlwZS5nZXRfY19pbml0aWFsaXplcigpCi0KLSAgICAgICAgICAgICAgICB0eXBlX21vZGVsID0g
cmV0dXJuX3R5cGVfYmluZGluZy5nZXRfdHlwZV9tb2RlbCgpCi0gICAgICAgICAgICAgICAgaWYg
b3B0aW9uYWw6Ci0gICAgICAgICAgICAgICAgICAgIHR5cGVfbW9kZWwgPSB0eXBlX21vZGVsLmdl
dF9vcHRpb25hbCgpCi0KLSAgICAgICAgICAgICAgICBjb2RlID0gIiAgICAlcyBvdXRfJXM7XG4i
ICUgKHR5cGVfbW9kZWwuZ2V0X2NvbW1hbmRfcmV0dXJuX3Bhc3NfbW9kZWwoKS5nZXRfcmV0dXJu
X3Zhcl90eXBlKCksIGpzb25fcmV0dXJuX25hbWUpCi0gICAgICAgICAgICAgICAgcGFyYW0gPSAi
LCAlc291dF8lcyIgJSAodHlwZV9tb2RlbC5nZXRfY29tbWFuZF9yZXR1cm5fcGFzc19tb2RlbCgp
LmdldF9vdXRwdXRfYXJndW1lbnRfcHJlZml4KCksIGpzb25fcmV0dXJuX25hbWUpCi0gICAgICAg
ICAgICAgICAgdmFyX25hbWUgPSAib3V0XyVzIiAlIGpzb25fcmV0dXJuX25hbWUKLSAgICAgICAg
ICAgICAgICBzZXR0ZXJfYXJndW1lbnQgPSB0eXBlX21vZGVsLmdldF9jb21tYW5kX3JldHVybl9w
YXNzX21vZGVsKCkuZ2V0X291dHB1dF90b19yYXdfZXhwcmVzc2lvbigpICUgdmFyX25hbWUKLSAg
ICAgICAgICAgICAgICBpZiByZXR1cm5fdHlwZV9iaW5kaW5nLmdldF9zZXR0ZXJfdmFsdWVfZXhw
cmVzc2lvbl9wYXR0ZXJuKCk6Ci0gICAgICAgICAgICAgICAgICAgIHNldHRlcl9hcmd1bWVudCA9
IHJldHVybl90eXBlX2JpbmRpbmcuZ2V0X3NldHRlcl92YWx1ZV9leHByZXNzaW9uX3BhdHRlcm4o
KSAlIChJTlNQRUNUT1JfVFlQRVNfR0VORVJBVE9SX0NPTkZJR19NQVBbb3V0cHV0X3R5cGVdWyJw
cmVmaXgiXSwgc2V0dGVyX2FyZ3VtZW50KQotCi0gICAgICAgICAgICAgICAgY29vayA9ICIgICAg
ICAgIHJlc3VsdC0+c2V0JXMoQVNDSUlMaXRlcmFsKFwiJXNcIiksICVzKTtcbiIgJSAoc2V0dGVy
X3R5cGUsIGpzb25fcmV0dXJuX25hbWUsIHNldHRlcl9hcmd1bWVudCkKLQotICAgICAgICAgICAg
ICAgIHNldF9jb25kaXRpb25fcGF0dGVybiA9IHR5cGVfbW9kZWwuZ2V0X2NvbW1hbmRfcmV0dXJu
X3Bhc3NfbW9kZWwoKS5nZXRfc2V0X3JldHVybl9jb25kaXRpb24oKQotICAgICAgICAgICAgICAg
IGlmIHNldF9jb25kaXRpb25fcGF0dGVybjoKLSAgICAgICAgICAgICAgICAgICAgY29vayA9ICgi
ICAgICAgICBpZiAoJXMpXG4gICAgIiAlIChzZXRfY29uZGl0aW9uX3BhdHRlcm4gJSB2YXJfbmFt
ZSkpICsgY29vawotICAgICAgICAgICAgICAgIGFubm90YXRlZF90eXBlID0gdHlwZV9tb2RlbC5n
ZXRfY29tbWFuZF9yZXR1cm5fcGFzc19tb2RlbCgpLmdldF9vdXRwdXRfcGFyYW1ldGVyX3R5cGUo
KQotCi0gICAgICAgICAgICAgICAgcGFyYW1fbmFtZSA9ICJvdXRfJXMiICUganNvbl9yZXR1cm5f
bmFtZQotICAgICAgICAgICAgICAgIGlmIG9wdGlvbmFsOgotICAgICAgICAgICAgICAgICAgICBw
YXJhbV9uYW1lID0gIm9wdF8iICsgcGFyYW1fbmFtZQotCi0gICAgICAgICAgICAgICAgR2VuZXJh
dG9yLmJhY2tlbmRfaGFuZGxlcl9pbnRlcmZhY2VfbGlzdC5hcHBlbmQoIiwgJXMgJXMiICUgKGFu
bm90YXRlZF90eXBlLCBwYXJhbV9uYW1lKSkKLSAgICAgICAgICAgICAgICBtZXRob2Rfb3V0X3Bh
cmFtc19oYW5kbGluZy5hcHBlbmQoY29vaykKLSAgICAgICAgICAgICAgICBtZXRob2RfZGlzcGF0
Y2hfaGFuZGxpbmcuYXBwZW5kKGNvZGUpCi0KLSAgICAgICAgICAgICAgICBhZ2VudF9jYWxsX3Bh
cmFtX2xpc3QuYXBwZW5kKHBhcmFtKQotCi0gICAgICAgICAgICBpZiBoYXNfbXVsdGlwbGVfcmV0
dXJuczoKLSAgICAgICAgICAgICAgICBtZXRob2Rfb3V0X3BhcmFtc19oYW5kbGluZy5hcHBlbmQo
IiAgICB9XG4iKQotICAgICAgICAgICAgbWV0aG9kX291dF9wYXJhbXNfaGFuZGxpbmcuYXBwZW5k
KCJcbiIpCi0KLSAgICAgICAgbWV0aG9kX2Rpc3BhdGNoX2hhbmRsaW5nLmFwcGVuZCgiICAgIG1f
YWdlbnQtPiVzKCZlcnJvciVzKTtcbiIgJSAoanNvbl9jb21tYW5kX25hbWUsICIiLmpvaW4oYWdl
bnRfY2FsbF9wYXJhbV9saXN0KSkpCi0gICAgICAgIG1ldGhvZF9kaXNwYXRjaF9oYW5kbGluZy5h
cHBlbmQoIlxuIikKLQotICAgICAgICBpZiBub3QgbWV0aG9kX2VuZGluZ19oYW5kbGluZzoKLSAg
ICAgICAgICAgIG1ldGhvZF9lbmRpbmdfaGFuZGxpbmcuYXBwZW5kKCIgICAgbV9iYWNrZW5kRGlz
cGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgZXJyb3IpOyIp
Ci0KLSAgICAgICAgYmFja2VuZF9qc19yZXBseV9wYXJhbV9saXN0ID0gW10KLSAgICAgICAgaWYg
InJldHVybnMiIGluIGpzb25fY29tbWFuZDoKLSAgICAgICAgICAgIGZvciBqc29uX3JldHVybiBp
biBqc29uX2NvbW1hbmRbInJldHVybnMiXToKLSAgICAgICAgICAgICAgICBqc29uX3JldHVybl9u
YW1lID0ganNvbl9yZXR1cm5bIm5hbWUiXQotICAgICAgICAgICAgICAgIGJhY2tlbmRfanNfcmVw
bHlfcGFyYW1fbGlzdC5hcHBlbmQoIlwiJXNcIiIgJSBqc29uX3JldHVybl9uYW1lKQotCi0gICAg
ICAgIGpzX3JlcGx5X2xpc3QgPSAiWyVzXSIgJSAiLCAiLmpvaW4oYmFja2VuZF9qc19yZXBseV9w
YXJhbV9saXN0KQotCi0gICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX21ldGhvZF9pbXBsZW1lbnRh
dGlvbl9saXN0LmFwcGVuZChUZW1wbGF0ZXMuYmFja2VuZF9tZXRob2Quc3Vic3RpdHV0ZShOb25l
LAotICAgICAgICAgICAgZGlzcGF0Y2hlck5hbWU9ZGlzcGF0Y2hlcl9uYW1lLAotICAgICAgICAg
ICAgbWV0aG9kTmFtZT1qc29uX2NvbW1hbmRfbmFtZSwKLSAgICAgICAgICAgIHJlcXVlc3RNZXNz
YWdlT2JqZWN0PW1ldGhvZF9yZXF1ZXN0X21lc3NhZ2VfcGFyYW1fbmFtZSwKLSAgICAgICAgICAg
IG1ldGhvZEluUGFyYW1ldGVyc0hhbmRsaW5nPSIiLmpvaW4obWV0aG9kX2luX3BhcmFtc19oYW5k
bGluZyksCi0gICAgICAgICAgICBtZXRob2REaXNwYXRjaEhhbmRsaW5nPSIiLmpvaW4obWV0aG9k
X2Rpc3BhdGNoX2hhbmRsaW5nKSwKLSAgICAgICAgICAgIG1ldGhvZE91dFBhcmFtZXRlcnNIYW5k
bGluZz0iIi5qb2luKG1ldGhvZF9vdXRfcGFyYW1zX2hhbmRsaW5nKSwKLSAgICAgICAgICAgIG1l
dGhvZEVuZGluZ0hhbmRsaW5nPSIiLmpvaW4obWV0aG9kX2VuZGluZ19oYW5kbGluZykpKQotCi0g
ICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX2pzX2RvbWFpbl9pbml0aWFsaXplcl9saXN0LmFwcGVu
ZCgiSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoXCIlcy4lc1wiLCBbJXNdLCAlcyk7
XG4iICUgKGRvbWFpbl9uYW1lLCBqc29uX2NvbW1hbmRfbmFtZSwganNfcGFyYW1ldGVyc190ZXh0
LCBqc19yZXBseV9saXN0KSkKLSAgICAgICAgR2VuZXJhdG9yLmJhY2tlbmRfaGFuZGxlcl9pbnRl
cmZhY2VfbGlzdC5hcHBlbmQoIikgPSAwO1xuIikKLQotICAgIGNsYXNzIENhbGxiYWNrTWV0aG9k
U3RydWN0VGVtcGxhdGU6Ci0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGFwcGVu
ZF9wcm9sb2cobGluZV9saXN0KToKLSAgICAgICAgICAgIHBhc3MKLQotICAgICAgICBAc3RhdGlj
bWV0aG9kCi0gICAgICAgIGRlZiBhcHBlbmRfZXBpbG9nKGxpbmVfbGlzdCk6Ci0gICAgICAgICAg
ICBwYXNzCi0KLSAgICAgICAgY29udGFpbmVyX25hbWUgPSAianNvbk1lc3NhZ2UiCi0KLSAgICAj
IEdlbmVyYXRlcyBjb21tb24gY29kZSBmb3IgZXZlbnQgc2VuZGluZyBhbmQgY2FsbGJhY2sgcmVz
cG9uc2UgZGF0YSBzZW5kaW5nLgotICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgZ2VuZXJhdGVf
c2VuZF9tZXRob2QocGFyYW1ldGVycywgZXZlbnRfbmFtZSwgZG9tYWluX25hbWUsIGFkX2hvY190
eXBlX3dyaXRlciwgZGVjbF9wYXJhbWV0ZXJfbGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbWV0aG9kX3N0cnVjdF90ZW1wbGF0ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZ2VuZXJhdG9yX21ldGhvZF9saXN0LCBtZXRob2RfdGVtcGxhdGUsIHRlbXBsYXRlX3BhcmFt
cyk6Ci0gICAgICAgIG1ldGhvZF9saW5lX2xpc3QgPSBbXQotICAgICAgICBpZiBwYXJhbWV0ZXJz
OgotICAgICAgICAgICAgbWV0aG9kX3N0cnVjdF90ZW1wbGF0ZS5hcHBlbmRfcHJvbG9nKG1ldGhv
ZF9saW5lX2xpc3QpCi0gICAgICAgICAgICBmb3IganNvbl9wYXJhbWV0ZXIgaW4gcGFyYW1ldGVy
czoKLSAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfbmFtZSA9IGpzb25fcGFyYW1ldGVyWyJuYW1l
Il0KLQotICAgICAgICAgICAgICAgIHBhcmFtX3R5cGVfYmluZGluZyA9IEdlbmVyYXRvci5yZXNv
bHZlX3R5cGVfYW5kX2dlbmVyYXRlX2FkX2hvYyhqc29uX3BhcmFtZXRlciwgZXZlbnRfbmFtZSwg
ZG9tYWluX25hbWUsIGFkX2hvY190eXBlX3dyaXRlciwgIiIpCi0KLSAgICAgICAgICAgICAgICBy
YXdfdHlwZSA9IHBhcmFtX3R5cGVfYmluZGluZy5yZWR1Y2VfdG9fcmF3X3R5cGUoKQotICAgICAg
ICAgICAgICAgIHJhd190eXBlX2JpbmRpbmcgPSBSYXdUeXBlQmluZGluZyhyYXdfdHlwZSkKLQot
ICAgICAgICAgICAgICAgIG9wdGlvbmFsID0gYm9vbChqc29uX3BhcmFtZXRlci5nZXQoIm9wdGlv
bmFsIikpCi0KLSAgICAgICAgICAgICAgICBzZXR0ZXJfdHlwZSA9IHJhd190eXBlLmdldF9zZXR0
ZXJfbmFtZSgpCi0KLSAgICAgICAgICAgICAgICB0eXBlX21vZGVsID0gcGFyYW1fdHlwZV9iaW5k
aW5nLmdldF90eXBlX21vZGVsKCkKLSAgICAgICAgICAgICAgICByYXdfdHlwZV9tb2RlbCA9IHJh
d190eXBlX2JpbmRpbmcuZ2V0X3R5cGVfbW9kZWwoKQotICAgICAgICAgICAgICAgIGlmIG9wdGlv
bmFsOgotICAgICAgICAgICAgICAgICAgICB0eXBlX21vZGVsID0gdHlwZV9tb2RlbC5nZXRfb3B0
aW9uYWwoKQotICAgICAgICAgICAgICAgICAgICByYXdfdHlwZV9tb2RlbCA9IHJhd190eXBlX21v
ZGVsLmdldF9vcHRpb25hbCgpCi0KLSAgICAgICAgICAgICAgICBhbm5vdGF0ZWRfdHlwZSA9IHR5
cGVfbW9kZWwuZ2V0X2lucHV0X3BhcmFtX3R5cGVfdGV4dCgpCi0gICAgICAgICAgICAgICAgbW9k
ZV90eXBlX2JpbmRpbmcgPSBwYXJhbV90eXBlX2JpbmRpbmcKLQotICAgICAgICAgICAgICAgIGRl
Y2xfcGFyYW1ldGVyX2xpc3QuYXBwZW5kKCIlcyAlcyIgJSAoYW5ub3RhdGVkX3R5cGUsIHBhcmFt
ZXRlcl9uYW1lKSkKLQotICAgICAgICAgICAgICAgIHNldHRlcl9hcmd1bWVudCA9IHJhd190eXBl
X21vZGVsLmdldF9ldmVudF9zZXR0ZXJfZXhwcmVzc2lvbl9wYXR0ZXJuKCkgJSBwYXJhbWV0ZXJf
bmFtZQotICAgICAgICAgICAgICAgIGlmIG1vZGVfdHlwZV9iaW5kaW5nLmdldF9zZXR0ZXJfdmFs
dWVfZXhwcmVzc2lvbl9wYXR0ZXJuKCk6Ci0gICAgICAgICAgICAgICAgICAgIHNldHRlcl9hcmd1
bWVudCA9IG1vZGVfdHlwZV9iaW5kaW5nLmdldF9zZXR0ZXJfdmFsdWVfZXhwcmVzc2lvbl9wYXR0
ZXJuKCkgJSAoSU5TUEVDVE9SX1RZUEVTX0dFTkVSQVRPUl9DT05GSUdfTUFQW291dHB1dF90eXBl
XVsicHJlZml4Il0sIHNldHRlcl9hcmd1bWVudCkKLQotICAgICAgICAgICAgICAgIHNldHRlcl9j
b2RlID0gIiAgICAlcy0+c2V0JXMoQVNDSUlMaXRlcmFsKFwiJXNcIiksICVzKTtcbiIgJSAobWV0
aG9kX3N0cnVjdF90ZW1wbGF0ZS5jb250YWluZXJfbmFtZSwgc2V0dGVyX3R5cGUsIHBhcmFtZXRl
cl9uYW1lLCBzZXR0ZXJfYXJndW1lbnQpCi0gICAgICAgICAgICAgICAgaWYgb3B0aW9uYWw6Ci0g
ICAgICAgICAgICAgICAgICAgIHNldHRlcl9jb2RlID0gKCIgICAgaWYgKCVzKVxuICAgICIgJSBw
YXJhbWV0ZXJfbmFtZSkgKyBzZXR0ZXJfY29kZQotICAgICAgICAgICAgICAgIG1ldGhvZF9saW5l
X2xpc3QuYXBwZW5kKHNldHRlcl9jb2RlKQotCi0gICAgICAgICAgICBtZXRob2Rfc3RydWN0X3Rl
bXBsYXRlLmFwcGVuZF9lcGlsb2cobWV0aG9kX2xpbmVfbGlzdCkKLQotICAgICAgICBnZW5lcmF0
b3JfbWV0aG9kX2xpc3QuYXBwZW5kKG1ldGhvZF90ZW1wbGF0ZS5zdWJzdGl0dXRlKE5vbmUsCi0g
ICAgICAgICAgICBkb21haW5OYW1lPWRvbWFpbl9uYW1lLAotICAgICAgICAgICAgcGFyYW1ldGVy
cz0iLCAiLmpvaW4oZGVjbF9wYXJhbWV0ZXJfbGlzdCksCi0gICAgICAgICAgICBjb2RlPSIiLmpv
aW4obWV0aG9kX2xpbmVfbGlzdCksICoqdGVtcGxhdGVfcGFyYW1zKSkKLQotICAgIEBzdGF0aWNt
ZXRob2QKLSAgICBkZWYgcmVzb2x2ZV90eXBlX2FuZF9nZW5lcmF0ZV9hZF9ob2MoanNvbl9wYXJh
bSwgbWV0aG9kX25hbWUsIGRvbWFpbl9uYW1lLCBhZF9ob2NfdHlwZV93cml0ZXIsIGNvbnRhaW5l
cl9yZWxhdGl2ZV9uYW1lX3ByZWZpeF9wYXJhbSk6Ci0gICAgICAgIHBhcmFtX25hbWUgPSBqc29u
X3BhcmFtWyJuYW1lIl0KLSAgICAgICAgYWRfaG9jX3R5cGVfbGlzdCA9IFtdCi0KLSAgICAgICAg
Y2xhc3MgQWRIb2NUeXBlQ29udGV4dDoKLSAgICAgICAgICAgIGNvbnRhaW5lcl9mdWxsX25hbWVf
cHJlZml4ID0gIjxub3QgeWV0IGRlZmluZWQ+IgotICAgICAgICAgICAgY29udGFpbmVyX3JlbGF0
aXZlX25hbWVfcHJlZml4ID0gY29udGFpbmVyX3JlbGF0aXZlX25hbWVfcHJlZml4X3BhcmFtCi0K
LSAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgIGRlZiBnZXRfdHlwZV9uYW1l
X2ZpeCgpOgotICAgICAgICAgICAgICAgIGNsYXNzIE5hbWVGaXg6Ci0gICAgICAgICAgICAgICAg
ICAgIGNsYXNzX25hbWUgPSBDYXBpdGFsaXplci5sb3dlcl9jYW1lbF9jYXNlX3RvX3VwcGVyKHBh
cmFtX25hbWUpCi0KLSAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAg
ICAgICAgICAgICBkZWYgb3V0cHV0X2NvbW1lbnQod3JpdGVyKToKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHdyaXRlci5uZXdsaW5lKCIvLyBOYW1lZCBhZnRlciBwYXJhbWV0ZXIgJyVzJyB3aGls
ZSBnZW5lcmF0aW5nIGNvbW1hbmQvZXZlbnQgJXMuXG4iICUgKHBhcmFtX25hbWUsIG1ldGhvZF9u
YW1lKSkKLQotICAgICAgICAgICAgICAgIHJldHVybiBOYW1lRml4Ci0KLSAgICAgICAgICAgIEBz
dGF0aWNtZXRob2QKLSAgICAgICAgICAgIGRlZiBhZGRfdHlwZShiaW5kaW5nKToKLSAgICAgICAg
ICAgICAgICBhZF9ob2NfdHlwZV9saXN0LmFwcGVuZChiaW5kaW5nKQotCi0gICAgICAgIHR5cGVf
YmluZGluZyA9IHJlc29sdmVfcGFyYW1fdHlwZShqc29uX3BhcmFtLCBkb21haW5fbmFtZSwgQWRI
b2NUeXBlQ29udGV4dCkKLQotICAgICAgICBjbGFzcyBJbnRlcmZhY2VGb3J3YXJkTGlzdGVuZXI6
Ci0gICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICBkZWYgYWRkX3R5cGVfZGF0
YSh0eXBlX2RhdGEpOgotICAgICAgICAgICAgICAgIHBhc3MKLQotICAgICAgICBjbGFzcyBJbnRl
cmZhY2VSZXNvbHZlQ29udGV4dDoKLSAgICAgICAgICAgIGZvcndhcmRfbGlzdGVuZXIgPSBJbnRl
cmZhY2VGb3J3YXJkTGlzdGVuZXIKLQotICAgICAgICBmb3IgdHlwZSBpbiBhZF9ob2NfdHlwZV9s
aXN0OgotICAgICAgICAgICAgdHlwZS5yZXNvbHZlX2lubmVyKEludGVyZmFjZVJlc29sdmVDb250
ZXh0KQotCi0gICAgICAgIGNsYXNzIEludGVyZmFjZUdlbmVyYXRlQ29udGV4dDoKLSAgICAgICAg
ICAgIHZhbGlkYXRvcl93cml0ZXIgPSAibm90IHN1cHBvcnRlZCBpbiBJbnRlcmZhY2VHZW5lcmF0
ZUNvbnRleHQiCi0gICAgICAgICAgICBjcHBfd3JpdGVyID0gdmFsaWRhdG9yX3dyaXRlcgotCi0g
ICAgICAgIGZvciB0eXBlIGluIGFkX2hvY190eXBlX2xpc3Q6Ci0gICAgICAgICAgICBnZW5lcmF0
b3IgPSB0eXBlLmdldF9jb2RlX2dlbmVyYXRvcigpCi0gICAgICAgICAgICBpZiBnZW5lcmF0b3I6
Ci0gICAgICAgICAgICAgICAgZ2VuZXJhdG9yLmdlbmVyYXRlX3R5cGVfYnVpbGRlcihhZF9ob2Nf
dHlwZV93cml0ZXIsIEludGVyZmFjZUdlbmVyYXRlQ29udGV4dCkKLQotICAgICAgICByZXR1cm4g
dHlwZV9iaW5kaW5nCi0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIHByb2Nlc3NfdHlwZXMo
dHlwZV9tYXApOgotICAgICAgICBvdXRwdXQgPSBHZW5lcmF0b3IudHlwZV9idWlsZGVyX2ZyYWdt
ZW50cwotCi0gICAgICAgIGNsYXNzIEdlbmVyYXRlQ29udGV4dDoKLSAgICAgICAgICAgIHZhbGlk
YXRvcl93cml0ZXIgPSBXcml0ZXIoR2VuZXJhdG9yLnZhbGlkYXRvcl9pbXBsX2xpc3QsICIiKQot
ICAgICAgICAgICAgY3BwX3dyaXRlciA9IFdyaXRlcihHZW5lcmF0b3IudHlwZV9idWlsZGVyX2lt
cGxfbGlzdCwgIiIpCi0KLSAgICAgICAgZGVmIGdlbmVyYXRlX2FsbF9kb21haW5zX2NvZGUob3V0
LCB0eXBlX2RhdGFfY2FsbGJhY2spOgotICAgICAgICAgICAgd3JpdGVyID0gV3JpdGVyKG91dCwg
IiIpCi0gICAgICAgICAgICBmb3IgZG9tYWluX2RhdGEgaW4gdHlwZV9tYXAuZG9tYWluc190b19n
ZW5lcmF0ZSgpOgotICAgICAgICAgICAgICAgIGRvbWFpbl9maXhlcyA9IERvbWFpbk5hbWVGaXhl
cy5nZXRfZml4ZWRfZGF0YShkb21haW5fZGF0YS5uYW1lKCkpCi0gICAgICAgICAgICAgICAgZG9t
YWluX2d1YXJkID0gZG9tYWluX2ZpeGVzLmdldF9ndWFyZCgpCi0KLSAgICAgICAgICAgICAgICBu
YW1lc3BhY2VfZGVjbGFyZWQgPSBbXQotCi0gICAgICAgICAgICAgICAgZGVmIG5hbWVzcGFjZV9s
YXp5X2dlbmVyYXRvcigpOgotICAgICAgICAgICAgICAgICAgICBpZiBub3QgbmFtZXNwYWNlX2Rl
Y2xhcmVkOgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgZG9tYWluX2d1YXJkOgotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRvbWFpbl9ndWFyZC5nZW5lcmF0ZV9vcGVuKG91dCkKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCJuYW1lc3BhY2UgIikKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHdyaXRlci5hcHBlbmQoZG9tYWluX2RhdGEubmFtZSgpKQotICAg
ICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVuZCgiIHtcbiIpCi0gICAgICAgICAgICAg
ICAgICAgICAgICAjIFdoYXQgaXMgYSBiZXR0ZXIgd2F5IHRvIGNoYW5nZSB2YWx1ZSBmcm9tIG91
dGVyIHNjb3BlPwotICAgICAgICAgICAgICAgICAgICAgICAgbmFtZXNwYWNlX2RlY2xhcmVkLmFw
cGVuZChUcnVlKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gd3JpdGVyCi0KLSAgICAgICAg
ICAgICAgICBmb3IgdHlwZV9kYXRhIGluIGRvbWFpbl9kYXRhLnR5cGVzKCk6Ci0gICAgICAgICAg
ICAgICAgICAgIHR5cGVfZGF0YV9jYWxsYmFjayh0eXBlX2RhdGEsIG5hbWVzcGFjZV9sYXp5X2dl
bmVyYXRvcikKLQotICAgICAgICAgICAgICAgIGlmIG5hbWVzcGFjZV9kZWNsYXJlZDoKLSAgICAg
ICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVuZCgifSAvLyAiKQotICAgICAgICAgICAgICAgICAg
ICB3cml0ZXIuYXBwZW5kKGRvbWFpbl9kYXRhLm5hbWUoKSkKLSAgICAgICAgICAgICAgICAgICAg
d3JpdGVyLmFwcGVuZCgiXG5cbiIpCi0KLSAgICAgICAgICAgICAgICAgICAgaWYgZG9tYWluX2d1
YXJkOgotICAgICAgICAgICAgICAgICAgICAgICAgZG9tYWluX2d1YXJkLmdlbmVyYXRlX2Nsb3Nl
KG91dCkKLQotICAgICAgICBkZWYgY3JlYXRlX3R5cGVfYnVpbGRlcl9jYWxsZXIoZ2VuZXJhdGVf
cGFzc19pZCk6Ci0gICAgICAgICAgICBkZWYgY2FsbF90eXBlX2J1aWxkZXIodHlwZV9kYXRhLCB3
cml0ZXJfZ2V0dGVyKToKLSAgICAgICAgICAgICAgICBjb2RlX2dlbmVyYXRvciA9IHR5cGVfZGF0
YS5nZXRfYmluZGluZygpLmdldF9jb2RlX2dlbmVyYXRvcigpCi0gICAgICAgICAgICAgICAgaWYg
Y29kZV9nZW5lcmF0b3IgYW5kIGdlbmVyYXRlX3Bhc3NfaWQgPT0gY29kZV9nZW5lcmF0b3IuZ2V0
X2dlbmVyYXRlX3Bhc3NfaWQoKToKLSAgICAgICAgICAgICAgICAgICAgd3JpdGVyID0gd3JpdGVy
X2dldHRlcigpCi0KLSAgICAgICAgICAgICAgICAgICAgY29kZV9nZW5lcmF0b3IuZ2VuZXJhdGVf
dHlwZV9idWlsZGVyKHdyaXRlciwgR2VuZXJhdGVDb250ZXh0KQotICAgICAgICAgICAgcmV0dXJu
IGNhbGxfdHlwZV9idWlsZGVyCi0KLSAgICAgICAgZ2VuZXJhdGVfYWxsX2RvbWFpbnNfY29kZShv
dXRwdXQsIGNyZWF0ZV90eXBlX2J1aWxkZXJfY2FsbGVyKFR5cGVCdWlsZGVyUGFzcy5NQUlOKSkK
LQotICAgICAgICBHZW5lcmF0b3IudHlwZV9idWlsZGVyX2ZvcndhcmRzLmFwcGVuZCgiLy8gRm9y
d2FyZCBkZWNsYXJhdGlvbnMuXG4iKQotCi0gICAgICAgIGRlZiBnZW5lcmF0ZV9mb3J3YXJkX2Nh
bGxiYWNrKHR5cGVfZGF0YSwgd3JpdGVyX2dldHRlcik6Ci0gICAgICAgICAgICBpZiB0eXBlX2Rh
dGEgaW4gZ2xvYmFsX2ZvcndhcmRfbGlzdGVuZXIudHlwZV9kYXRhX3NldDoKLSAgICAgICAgICAg
ICAgICBiaW5kaW5nID0gdHlwZV9kYXRhLmdldF9iaW5kaW5nKCkKLSAgICAgICAgICAgICAgICBi
aW5kaW5nLmdldF9jb2RlX2dlbmVyYXRvcigpLmdlbmVyYXRlX2ZvcndhcmRfZGVjbGFyYXRpb24o
d3JpdGVyX2dldHRlcigpKQotICAgICAgICBnZW5lcmF0ZV9hbGxfZG9tYWluc19jb2RlKEdlbmVy
YXRvci50eXBlX2J1aWxkZXJfZm9yd2FyZHMsIGdlbmVyYXRlX2ZvcndhcmRfY2FsbGJhY2spCi0K
LSAgICAgICAgR2VuZXJhdG9yLnR5cGVfYnVpbGRlcl9mb3J3YXJkcy5hcHBlbmQoIi8vIEVuZCBv
ZiBmb3J3YXJkIGRlY2xhcmF0aW9ucy5cblxuIikKLQotICAgICAgICBHZW5lcmF0b3IudHlwZV9i
dWlsZGVyX2ZvcndhcmRzLmFwcGVuZCgiLy8gVHlwZWRlZnMuXG4iKQotCi0gICAgICAgIGdlbmVy
YXRlX2FsbF9kb21haW5zX2NvZGUoR2VuZXJhdG9yLnR5cGVfYnVpbGRlcl9mb3J3YXJkcywgY3Jl
YXRlX3R5cGVfYnVpbGRlcl9jYWxsZXIoVHlwZUJ1aWxkZXJQYXNzLlRZUEVERUYpKQotCi0gICAg
ICAgIEdlbmVyYXRvci50eXBlX2J1aWxkZXJfZm9yd2FyZHMuYXBwZW5kKCIvLyBFbmQgb2YgdHlw
ZWRlZnMuXG5cbiIpCi0KLQotZGVmIGZsYXR0ZW5fbGlzdChpbnB1dCk6Ci0gICAgcmVzID0gW10K
LQotICAgIGRlZiBmaWxsX3JlY3Vyc2l2ZShsKToKLSAgICAgICAgZm9yIGl0ZW0gaW4gbDoKLSAg
ICAgICAgICAgIGlmIGlzaW5zdGFuY2UoaXRlbSwgbGlzdCk6Ci0gICAgICAgICAgICAgICAgZmls
bF9yZWN1cnNpdmUoaXRlbSkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmVz
LmFwcGVuZChpdGVtKQotICAgIGZpbGxfcmVjdXJzaXZlKGlucHV0KQotICAgIHJldHVybiByZXMK
LQotCi0jIEEgd3JpdGVyIHRoYXQgb25seSB1cGRhdGVzIGZpbGUgaWYgaXQgYWN0dWFsbHkgY2hh
bmdlZCB0byBiZXR0ZXIgc3VwcG9ydCBpbmNyZW1lbnRhbCBidWlsZC4KLWNsYXNzIFNtYXJ0T3V0
cHV0OgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlX25hbWUpOgotICAgICAgICBzZWxmLmZp
bGVfbmFtZV8gPSBmaWxlX25hbWUKLSAgICAgICAgc2VsZi5vdXRwdXRfID0gIiIKLQotICAgIGRl
ZiB3cml0ZShzZWxmLCB0ZXh0KToKLSAgICAgICAgc2VsZi5vdXRwdXRfICs9IHRleHQKLQotICAg
IGRlZiBjbG9zZShzZWxmKToKLSAgICAgICAgdGV4dF9jaGFuZ2VkID0gVHJ1ZQotICAgICAgICBz
ZWxmLm91dHB1dF8gPSBzZWxmLm91dHB1dF8ucnN0cmlwKCkgKyAiXG4iCi0KLSAgICAgICAgdHJ5
OgotICAgICAgICAgICAgcmVhZF9maWxlID0gb3BlbihzZWxmLmZpbGVfbmFtZV8sICJyIikKLSAg
ICAgICAgICAgIG9sZF90ZXh0ID0gcmVhZF9maWxlLnJlYWQoKQotICAgICAgICAgICAgcmVhZF9m
aWxlLmNsb3NlKCkKLSAgICAgICAgICAgIHRleHRfY2hhbmdlZCA9IG9sZF90ZXh0ICE9IHNlbGYu
b3V0cHV0XwotICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICAjIElnbm9yZSwganVzdCBvdmVy
d3JpdGUgYnkgZGVmYXVsdAotICAgICAgICAgICAgcGFzcwotCi0gICAgICAgIGlmIHRleHRfY2hh
bmdlZCBvciB3cml0ZV9hbHdheXM6Ci0gICAgICAgICAgICBvdXRfZmlsZSA9IG9wZW4oc2VsZi5m
aWxlX25hbWVfLCAidyIpCi0gICAgICAgICAgICBvdXRfZmlsZS53cml0ZShzZWxmLm91dHB1dF8p
Ci0gICAgICAgICAgICBvdXRfZmlsZS5jbG9zZSgpCi0KLQotR2VuZXJhdG9yLmdvKCkKLQotb3V0
cHV0X2ZpbGVfbmFtZV9wcmVmaXggPSBJTlNQRUNUT1JfVFlQRVNfR0VORVJBVE9SX0NPTkZJR19N
QVBbb3V0cHV0X3R5cGVdWyJwcmVmaXgiXQotCi1iYWNrZW5kX2hfZmlsZSA9IFNtYXJ0T3V0cHV0
KG91dHB1dF9oZWFkZXJfZGlybmFtZSArICgiL0luc3BlY3RvciVzQmFja2VuZERpc3BhdGNoZXJz
LmgiICUgb3V0cHV0X2ZpbGVfbmFtZV9wcmVmaXgpKQotYmFja2VuZF9jcHBfZmlsZSA9IFNtYXJ0
T3V0cHV0KG91dHB1dF9jcHBfZGlybmFtZSArICgiL0luc3BlY3RvciVzQmFja2VuZERpc3BhdGNo
ZXJzLmNwcCIgJSBvdXRwdXRfZmlsZV9uYW1lX3ByZWZpeCkpCi0KLWZyb250ZW5kX2hfZmlsZSA9
IFNtYXJ0T3V0cHV0KG91dHB1dF9oZWFkZXJfZGlybmFtZSArICgiL0luc3BlY3RvciVzRnJvbnRl
bmREaXNwYXRjaGVycy5oIiAlIG91dHB1dF9maWxlX25hbWVfcHJlZml4KSkKLWZyb250ZW5kX2Nw
cF9maWxlID0gU21hcnRPdXRwdXQob3V0cHV0X2NwcF9kaXJuYW1lICsgKCIvSW5zcGVjdG9yJXNG
cm9udGVuZERpc3BhdGNoZXJzLmNwcCIgJSBvdXRwdXRfZmlsZV9uYW1lX3ByZWZpeCkpCi0KLXR5
cGVidWlsZGVyX2hfZmlsZSA9IFNtYXJ0T3V0cHV0KG91dHB1dF9oZWFkZXJfZGlybmFtZSArICgi
L0luc3BlY3RvciVzVHlwZUJ1aWxkZXJzLmgiICUgb3V0cHV0X2ZpbGVfbmFtZV9wcmVmaXgpKQot
dHlwZWJ1aWxkZXJfY3BwX2ZpbGUgPSBTbWFydE91dHB1dChvdXRwdXRfY3BwX2Rpcm5hbWUgKyAo
Ii9JbnNwZWN0b3Ilc1R5cGVCdWlsZGVycy5jcHAiICUgb3V0cHV0X2ZpbGVfbmFtZV9wcmVmaXgp
KQotCi1iYWNrZW5kX2pzX2ZpbGUgPSBTbWFydE91dHB1dChvdXRwdXRfanNfZGlybmFtZSArICgi
L0luc3BlY3RvciVzQmFja2VuZENvbW1hbmRzLmpzIiAlIG91dHB1dF9maWxlX25hbWVfcHJlZml4
KSkKLQotCi1iYWNrZW5kX2hfZmlsZS53cml0ZShUZW1wbGF0ZXMuYmFja2VuZF9oLnN1YnN0aXR1
dGUoTm9uZSwKLSAgICBvdXRwdXRGaWxlTmFtZVByZWZpeD1vdXRwdXRfZmlsZV9uYW1lX3ByZWZp
eCwKLSAgICBoYW5kbGVySW50ZXJmYWNlcz0iIi5qb2luKGZsYXR0ZW5fbGlzdChHZW5lcmF0b3Iu
YmFja2VuZF9oYW5kbGVyX2ludGVyZmFjZV9saXN0KSksCi0gICAgZGlzcGF0Y2hlckludGVyZmFj
ZXM9IiIuam9pbihmbGF0dGVuX2xpc3QoR2VuZXJhdG9yLmJhY2tlbmRfZGlzcGF0Y2hlcl9pbnRl
cmZhY2VfbGlzdCkpKSkKLQotYmFja2VuZF9jcHBfZmlsZS53cml0ZShUZW1wbGF0ZXMuYmFja2Vu
ZF9jcHAuc3Vic3RpdHV0ZShOb25lLAotICAgIG91dHB1dEZpbGVOYW1lUHJlZml4PW91dHB1dF9m
aWxlX25hbWVfcHJlZml4LAotICAgIGhhbmRsZXJJbXBsZW1lbnRhdGlvbnM9IiIuam9pbihmbGF0
dGVuX2xpc3QoR2VuZXJhdG9yLmJhY2tlbmRfaGFuZGxlcl9pbXBsZW1lbnRhdGlvbl9saXN0KSks
Ci0gICAgbWV0aG9kcz0iXG4iLmpvaW4oR2VuZXJhdG9yLmJhY2tlbmRfbWV0aG9kX2ltcGxlbWVu
dGF0aW9uX2xpc3QpKSkKLQotZnJvbnRlbmRfaF9maWxlLndyaXRlKFRlbXBsYXRlcy5mcm9udGVu
ZF9oLnN1YnN0aXR1dGUoTm9uZSwKLSAgICBvdXRwdXRGaWxlTmFtZVByZWZpeD1vdXRwdXRfZmls
ZV9uYW1lX3ByZWZpeCwKLSAgICBkb21haW5DbGFzc0xpc3Q9IiIuam9pbihHZW5lcmF0b3IuZnJv
bnRlbmRfZG9tYWluX2NsYXNzX2xpbmVzKSkpCi0KLWZyb250ZW5kX2NwcF9maWxlLndyaXRlKFRl
bXBsYXRlcy5mcm9udGVuZF9jcHAuc3Vic3RpdHV0ZShOb25lLAotICAgIG91dHB1dEZpbGVOYW1l
UHJlZml4PW91dHB1dF9maWxlX25hbWVfcHJlZml4LAotICAgIG1ldGhvZHM9IlxuIi5qb2luKEdl
bmVyYXRvci5mcm9udGVuZF9tZXRob2RfbGlzdCkpKQotCi10eXBlYnVpbGRlcl9oX2ZpbGUud3Jp
dGUoVGVtcGxhdGVzLnR5cGVidWlsZGVyX2guc3Vic3RpdHV0ZShOb25lLAotICAgIG91dHB1dEZp
bGVOYW1lUHJlZml4PW91dHB1dF9maWxlX25hbWVfcHJlZml4LAotICAgIHR5cGVCdWlsZGVyRGVw
ZW5kZW5jaWVzPUlOU1BFQ1RPUl9UWVBFU19HRU5FUkFUT1JfQ09ORklHX01BUFtvdXRwdXRfdHlw
ZV1bInR5cGVidWlsZGVyX2RlcGVuZGVuY3kiXSwKLSAgICBleHBvcnRNYWNybz1JTlNQRUNUT1Jf
VFlQRVNfR0VORVJBVE9SX0NPTkZJR19NQVBbb3V0cHV0X3R5cGVdWyJleHBvcnRfbWFjcm8iXSwK
LSAgICB0eXBlQnVpbGRlcnM9IiIuam9pbihmbGF0dGVuX2xpc3QoR2VuZXJhdG9yLnR5cGVfYnVp
bGRlcl9mcmFnbWVudHMpKSwKLSAgICBmb3J3YXJkcz0iIi5qb2luKEdlbmVyYXRvci50eXBlX2J1
aWxkZXJfZm9yd2FyZHMpLAotICAgIHZhbGlkYXRvcklmZGVmTmFtZT1WQUxJREFUT1JfSUZERUZf
TkFNRSkpCi0KLXR5cGVidWlsZGVyX2NwcF9maWxlLndyaXRlKFRlbXBsYXRlcy50eXBlYnVpbGRl
cl9jcHAuc3Vic3RpdHV0ZShOb25lLAotICAgIG91dHB1dEZpbGVOYW1lUHJlZml4PW91dHB1dF9m
aWxlX25hbWVfcHJlZml4LAotICAgIGVudW1Db25zdGFudFZhbHVlcz1FbnVtQ29uc3RhbnRzLmdl
dF9lbnVtX2NvbnN0YW50X2NvZGUoKSwKLSAgICBpbXBsQ29kZT0iIi5qb2luKGZsYXR0ZW5fbGlz
dChHZW5lcmF0b3IudHlwZV9idWlsZGVyX2ltcGxfbGlzdCkpLAotICAgIHZhbGlkYXRvckNvZGU9
IiIuam9pbihmbGF0dGVuX2xpc3QoR2VuZXJhdG9yLnZhbGlkYXRvcl9pbXBsX2xpc3QpKSwKLSAg
ICB2YWxpZGF0b3JJZmRlZk5hbWU9VkFMSURBVE9SX0lGREVGX05BTUUpKQotCi1iYWNrZW5kX2pz
X2ZpbGUud3JpdGUoVGVtcGxhdGVzLmJhY2tlbmRfanMuc3Vic3RpdHV0ZShOb25lLAotICAgIGRv
bWFpbkluaXRpYWxpemVycz0iIi5qb2luKEdlbmVyYXRvci5iYWNrZW5kX2pzX2RvbWFpbl9pbml0
aWFsaXplcl9saXN0KSkpCi0KLWJhY2tlbmRfaF9maWxlLmNsb3NlKCkKLWJhY2tlbmRfY3BwX2Zp
bGUuY2xvc2UoKQotCi1mcm9udGVuZF9oX2ZpbGUuY2xvc2UoKQotZnJvbnRlbmRfY3BwX2ZpbGUu
Y2xvc2UoKQotCi10eXBlYnVpbGRlcl9oX2ZpbGUuY2xvc2UoKQotdHlwZWJ1aWxkZXJfY3BwX2Zp
bGUuY2xvc2UoKQotCi1iYWNrZW5kX2pzX2ZpbGUuY2xvc2UoKQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3JT
dHJpbmdzLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL0NvZGVH
ZW5lcmF0b3JJbnNwZWN0b3JTdHJpbmdzLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAyNzYzNzQ0MTYwYjg0ZmZkMmMzNzc1OWE0M2RiZDMzZGYwMTQ1YTQ0Li4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yU3RyaW5ncy5weQorKysgL2Rl
di9udWxsCkBAIC0xLDM0OCArMCwwIEBACi0jIENvcHlyaWdodCAoYykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBDb3B5cmlnaHQgKGMpIDIwMTMgQXBwbGUgSW5jLiBB
bGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotIyBt
ZXQ6Ci0jCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotIyBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0j
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKLSMgZGlzdHJpYnV0aW9uLgotIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0jIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0jIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0jCi0jIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKLSMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0jIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0jIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAotIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotIyBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSMgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotIyBUaGlzIGZpbGUgY29u
dGFpbnMgc3RyaW5nIHJlc291cmNlcyBmb3IgQ29kZUdlbmVyYXRvckluc3BlY3Rvci4KLSMgSXRz
IHN5bnRheCBpcyBhIFB5dGhvbiBzeW50YXggc3Vic2V0LCBzdWl0YWJsZSBmb3IgbWFudWFsIHBh
cnNpbmcuCi0KLWZyb250ZW5kX2RvbWFpbl9jbGFzcyA9ICgKLSIiImNsYXNzICR7ZXhwb3J0TWFj
cm99ICR7ZG9tYWluQ2xhc3NOYW1lfSB7Ci1wdWJsaWM6Ci0gICAgJHtkb21haW5DbGFzc05hbWV9
KEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSA6IG1f
aW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyB9Ci0k
e2Zyb250ZW5kRG9tYWluTWV0aG9kRGVjbGFyYXRpb25zfXByaXZhdGU6Ci0gICAgSW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKLX07Ci0KLSIiIikK
LQotYmFja2VuZF9kaXNwYXRjaGVyX2NvbnN0cnVjdG9yID0gKAotIiIiUGFzc1JlZlB0cjwke2Rp
c3BhdGNoZXJOYW1lfT4gJHtkaXNwYXRjaGVyTmFtZX06OmNyZWF0ZShJbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIsICR7YWdlbnROYW1lfSogYWdlbnQpCi17Ci0g
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyAke2Rpc3BhdGNoZXJOYW1lfShiYWNrZW5kRGlzcGF0Y2hl
ciwgYWdlbnQpKTsKLX0KLQotJHtkaXNwYXRjaGVyTmFtZX06OiR7ZGlzcGF0Y2hlck5hbWV9KElu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlciwgJHthZ2VudE5hbWV9
KiBhZ2VudCkKLSAgICA6IEluc3BlY3RvclN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyKGJh
Y2tlbmREaXNwYXRjaGVyKQotICAgICwgbV9hZ2VudChhZ2VudCkKLXsKLSAgICBtX2JhY2tlbmRE
aXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4oQVNDSUlMaXRlcmFsKCIke2Rv
bWFpbk5hbWV9IiksIHRoaXMpOwotfQotIiIiKQotCi1iYWNrZW5kX2Rpc3BhdGNoZXJfZGlzcGF0
Y2hfbWV0aG9kX3NpbXBsZSA9ICgKLSIiInZvaWQgJHtkaXNwYXRjaGVyTmFtZX06OmRpc3BhdGNo
KGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IG1lc3NhZ2UpCi17Ci0gICAgUmVmPCR7ZGlzcGF0Y2hlck5hbWV9PiBwcm90ZWN0KCp0
aGlzKTsKLQotJHtpZkNoYWlufQotICAgIGVsc2UKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+cmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElkLCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
cjo6TWV0aG9kTm90Rm91bmQsIFN0cmluZygiJyIpICsgIiR7ZG9tYWluTmFtZX0iICsgJy4nICsg
bWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOwotfQotIiIiKQotCi1iYWNrZW5kX2Rpc3BhdGNo
ZXJfZGlzcGF0Y2hfbWV0aG9kID0gKAotIiIidm9pZCAke2Rpc3BhdGNoZXJOYW1lfTo6ZGlzcGF0
Y2gobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBQYXNzUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gbWVzc2FnZSkKLXsKLSAgICBSZWY8JHtkaXNwYXRjaGVyTmFtZX0+IHByb3RlY3Qo
KnRoaXMpOwotCi0gICAgdHlwZWRlZiB2b2lkICgke2Rpc3BhdGNoZXJOYW1lfTo6KkNhbGxIYW5k
bGVyKShsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QmIG1lc3Nh
Z2UpOwotICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIENhbGxIYW5kbGVyPiBEaXNwYXRjaE1h
cDsKLSAgICBERVBSRUNBVEVEX0RFRklORV9TVEFUSUNfTE9DQUwoRGlzcGF0Y2hNYXAsIGRpc3Bh
dGNoTWFwLCAoKSk7Ci0gICAgaWYgKGRpc3BhdGNoTWFwLmlzRW1wdHkoKSkgewotICAgICAgICBz
dGF0aWMgY29uc3Qgc3RydWN0IE1ldGhvZFRhYmxlIHsKLSAgICAgICAgICAgIGNvbnN0IGNoYXIq
IG5hbWU7Ci0gICAgICAgICAgICBDYWxsSGFuZGxlciBoYW5kbGVyOwotICAgICAgICB9IGNvbW1h
bmRzW10gPSB7Ci0ke2Rpc3BhdGNoZXJDb21tYW5kc30KLSAgICAgICAgfTsKLSAgICAgICAgc2l6
ZV90IGxlbmd0aCA9IFdURl9BUlJBWV9MRU5HVEgoY29tbWFuZHMpOwotICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQotICAgICAgICAgICAgZGlzcGF0Y2hNYXAuYWRk
KGNvbW1hbmRzW2ldLm5hbWUsIGNvbW1hbmRzW2ldLmhhbmRsZXIpOwotICAgIH0KLQotICAgIEhh
c2hNYXA8U3RyaW5nLCBDYWxsSGFuZGxlcj46Oml0ZXJhdG9yIGl0ID0gZGlzcGF0Y2hNYXAuZmlu
ZChtZXRob2QpOwotICAgIGlmIChpdCA9PSBkaXNwYXRjaE1hcC5lbmQoKSkgewotICAgICAgICBt
X2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIEluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgU3RyaW5nKCInIikgKyAiJHtkb21h
aW5OYW1lfSIgKyAnLicgKyBtZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICAoKCp0aGlzKS4qaXQtPnZhbHVlKShjYWxsSWQsICptZXNzYWdl
LmdldCgpKTsKLX0KLSIiIikKLQotYmFja2VuZF9tZXRob2QgPSAoCi0iIiJ2b2lkICR7ZGlzcGF0
Y2hlck5hbWV9Ojoke21ldGhvZE5hbWV9KGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmpl
Y3QmJHtyZXF1ZXN0TWVzc2FnZU9iamVjdH0pCi17Ci0ke21ldGhvZEluUGFyYW1ldGVyc0hhbmRs
aW5nfSR7bWV0aG9kRGlzcGF0Y2hIYW5kbGluZ30ke21ldGhvZE91dFBhcmFtZXRlcnNIYW5kbGlu
Z30ke21ldGhvZEVuZGluZ0hhbmRsaW5nfQotfQotIiIiKQotCi1mcm9udGVuZF9tZXRob2QgPSAo
IiIidm9pZCBJbnNwZWN0b3Ike2RvbWFpbk5hbWV9RnJvbnRlbmREaXNwYXRjaGVyOjoke2V2ZW50
TmFtZX0oJHtwYXJhbWV0ZXJzfSkKLXsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBqc29u
TWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0gICAganNvbk1lc3NhZ2UtPnNl
dFN0cmluZyhBU0NJSUxpdGVyYWwoIm1ldGhvZCIpLCBBU0NJSUxpdGVyYWwoIiR7ZG9tYWluTmFt
ZX0uJHtldmVudE5hbWV9IikpOwotJHtjb2RlfQotICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsK
LX0KLSIiIikKLQotY2FsbGJhY2tfbWV0aG9kID0gKAotIiIiJHtoYW5kbGVyTmFtZX06OiR7Y2Fs
bGJhY2tOYW1lfTo6JHtjYWxsYmFja05hbWV9KFBhc3NSZWZQdHI8SW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXI+IGJhY2tlbmREaXNwYXRjaGVyLCBpbnQgaWQpIDogSW5zcGVjdG9yOjpJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlKGJhY2tlbmREaXNwYXRjaGVyLCBpZCkg
eyB9Ci0KLXZvaWQgJHtoYW5kbGVyTmFtZX06OiR7Y2FsbGJhY2tOYW1lfTo6c2VuZFN1Y2Nlc3Mo
JHtwYXJhbWV0ZXJzfSkKLXsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBqc29uTWVzc2Fn
ZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0ke2NvZGV9ICAgIHNlbmRJZkFjdGl2ZShq
c29uTWVzc2FnZSwgRXJyb3JTdHJpbmcoKSk7Ci19Ci0iIiIpCi0KLWZyb250ZW5kX2ggPSAoCi0i
IiIjaWZuZGVmIEluc3BlY3RvciR7b3V0cHV0RmlsZU5hbWVQcmVmaXh9RnJvbnRlbmREaXNwYXRj
aGVyc19oCi0jZGVmaW5lIEluc3BlY3RvciR7b3V0cHV0RmlsZU5hbWVQcmVmaXh9RnJvbnRlbmRE
aXNwYXRjaGVyc19oCi0KLSNpbmNsdWRlICJJbnNwZWN0b3Ike291dHB1dEZpbGVOYW1lUHJlZml4
fVR5cGVCdWlsZGVycy5oIgotI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwuaD4KLSNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+Ci0jaW5jbHVk
ZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQot
bmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SKQotCi0ke2RvbWFp
bkNsYXNzTGlzdH0KLQotI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCi0KLX0gLy8gbmFtZXNw
YWNlIEluc3BlY3RvcgotCi0jZW5kaWYgLy8gIWRlZmluZWQoSW5zcGVjdG9yJHtvdXRwdXRGaWxl
TmFtZVByZWZpeH1Gcm9udGVuZERpc3BhdGNoZXJzX2gpCi0iIiIpCi0KLWJhY2tlbmRfaCA9ICgK
LSIiIiNpZm5kZWYgSW5zcGVjdG9yJHtvdXRwdXRGaWxlTmFtZVByZWZpeH1CYWNrZW5kRGlzcGF0
Y2hlcnNfaAotI2RlZmluZSBJbnNwZWN0b3Ike291dHB1dEZpbGVOYW1lUHJlZml4fUJhY2tlbmRE
aXNwYXRjaGVyc19oCi0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SKQotCi0jaW5jbHVkZSAiSW5zcGVj
dG9yJHtvdXRwdXRGaWxlTmFtZVByZWZpeH1UeXBlQnVpbGRlcnMuaCIKLSNpbmNsdWRlIDxpbnNw
ZWN0b3IvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1Jl
ZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5z
cGVjdG9yIHsKLQotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7Ci0KLSR7aGFuZGxlckludGVy
ZmFjZXN9Ci0KLSR7ZGlzcGF0Y2hlckludGVyZmFjZXN9Ci19IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKLQotI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCi0KLSNlbmRpZiAvLyAhZGVmaW5lZChJ
bnNwZWN0b3Ike291dHB1dEZpbGVOYW1lUHJlZml4fUJhY2tlbmREaXNwYXRjaGVyc19oKQotIiIi
KQotCi1iYWNrZW5kX2NwcCA9ICgKLSIiIgotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5B
QkxFKElOU1BFQ1RPUikKLQotI2luY2x1ZGUgIkluc3BlY3RvciR7b3V0cHV0RmlsZU5hbWVQcmVm
aXh9QmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsLmg+Ci0jaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5o
PgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLSR7aGFuZGxlckltcGxlbWVudGF0
aW9uc30KLQotJHttZXRob2RzfQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSNlbmRpZiAv
LyBFTkFCTEUoSU5TUEVDVE9SKQotIiIiKQotCi1mcm9udGVuZF9jcHAgPSAoCi0iIiIKLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUikKLQotI2luY2x1ZGUgIklu
c3BlY3RvciR7b3V0cHV0RmlsZU5hbWVQcmVmaXh9RnJvbnRlbmREaXNwYXRjaGVycy5oIgotCi0j
aW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotJHttZXRob2RzfQotCi19IC8vIG5hbWVz
cGFjZSBJbnNwZWN0b3IKLQotI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCi0iIiIpCi0KLXR5
cGVidWlsZGVyX2ggPSAoCi0iIiIKLSNpZm5kZWYgSW5zcGVjdG9yJHtvdXRwdXRGaWxlTmFtZVBy
ZWZpeH1UeXBlQnVpbGRlcnNfaAotI2RlZmluZSBJbnNwZWN0b3Ike291dHB1dEZpbGVOYW1lUHJl
Zml4fVR5cGVCdWlsZGVyc19oCi0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SKQotCi0jaW5jbHVkZSA8
aW5zcGVjdG9yL0luc3BlY3RvclR5cGVCdWlsZGVyLmg+Ci0ke3R5cGVCdWlsZGVyRGVwZW5kZW5j
aWVzfQotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQ
dHIuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLW5hbWVzcGFjZSBUeXBlQnVpbGRlciB7
Ci0KLSR7Zm9yd2FyZHN9Ci0KLSR7ZXhwb3J0TWFjcm99IFN0cmluZyBnZXQke291dHB1dEZpbGVO
YW1lUHJlZml4fUVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKTsKLQotJHt0eXBlQnVpbGRlcnN9
Ci19IC8vIG5hbWVzcGFjZSBUeXBlQnVpbGRlcgotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
LQotI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCi0KLSNlbmRpZiAvLyAhZGVmaW5lZChJbnNw
ZWN0b3Ike291dHB1dEZpbGVOYW1lUHJlZml4fVR5cGVCdWlsZGVyc19oKQotCi0iIiIpCi0KLXR5
cGVidWlsZGVyX2NwcCA9ICgKLSIiIgotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
SW5zcGVjdG9yJHtvdXRwdXRGaWxlTmFtZVByZWZpeH1UeXBlQnVpbGRlcnMuaCIKLQotI2lmIEVO
QUJMRShJTlNQRUNUT1IpCi0KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVz
cGFjZSBJbnNwZWN0b3IgewotCi1uYW1lc3BhY2UgVHlwZUJ1aWxkZXIgewotCi1zdGF0aWMgY29u
c3QgY2hhciogY29uc3QgZW51bV9jb25zdGFudF92YWx1ZXNbXSA9IHsKLSR7ZW51bUNvbnN0YW50
VmFsdWVzfX07Ci0KLVN0cmluZyBnZXQke291dHB1dEZpbGVOYW1lUHJlZml4fUVudW1Db25zdGFu
dFZhbHVlKGludCBjb2RlKSB7Ci0gICAgcmV0dXJuIGVudW1fY29uc3RhbnRfdmFsdWVzW2NvZGVd
OwotfQotCi19IC8vIG5hbWVzcGFjZSBUeXBlQnVpbGRlcgotCi0ke2ltcGxDb2RlfQotCi0jaWYg
JHt2YWxpZGF0b3JJZmRlZk5hbWV9Ci0KLSR7dmFsaWRhdG9yQ29kZX0KLQotI2VuZGlmIC8vICR7
dmFsaWRhdG9ySWZkZWZOYW1lfQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotI2VuZGlm
IC8vIEVOQUJMRShJTlNQRUNUT1IpCi0iIiIpCi0KLWJhY2tlbmRfanMgPSAoCi0iIiIKLQotJHtk
b21haW5Jbml0aWFsaXplcnN9Ci0iIiIpCi0KLXBhcmFtX2NvbnRhaW5lcl9hY2Nlc3NfY29kZSA9
ICIiIgotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IG1lc3Nh
Z2UuZ2V0T2JqZWN0KCJwYXJhbXMiKTsKLSAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRh
aW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKLSAgICBJbnNwZWN0b3JBcnJheSogcHJv
dG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKLSIiIgotCi1jbGFzc19iaW5k
aW5nX2J1aWxkZXJfcGFydF8xID0gKAotIiIiICAgICAgICBBbGxGaWVsZHNTZXQgPSAlcwotICAg
IH07Ci0KLSAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+Ci0gICAgY2xhc3MgQnVpbGRlciB7Ci0gICAg
cHJpdmF0ZToKLSAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBtX3Jl
c3VsdDsKLQotICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+
JiBjYXN0U3RhdGUoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0
X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBCdWlsZGVyKFBhc3NSZWZQdHI8LyolcyovSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IHB0
cikKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVs
ZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7Ci0gICAgICAgICAgICBt
X3Jlc3VsdCA9IHB0cjsKLSAgICAgICAgfQotICAgICAgICBmcmllbmQgY2xhc3MgJXM7Ci0gICAg
cHVibGljOgotIiIiKQotCi1jbGFzc19iaW5kaW5nX2J1aWxkZXJfcGFydF8yID0gKCIiIgotICAg
ICAgICBCdWlsZGVyPFNUQVRFIHwgJXM+JiBzZXQlcyglcyB2YWx1ZSkKLSAgICAgICAgewotICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmICVzKSwgcHJvcGVydHlfJXNfYWxyZWFk
eV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldCVzKEFTQ0lJTGl0ZXJhbCgiJXMiKSwg
JXMpOwotICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTwlcz4oKTsKLSAgICAgICAgfQotIiIi
KQotCi1jbGFzc19iaW5kaW5nX2J1aWxkZXJfcGFydF8zID0gKCIiIgotICAgICAgICBvcGVyYXRv
ciBSZWZQdHI8JXM+JiAoKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChT
VEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwotICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoc2l6ZW9mKCVzKSA9PSBzaXplb2YoSW5zcGVjdG9yOjpJbnNwZWN0b3JP
YmplY3QpLCBjYW5ub3RfY2FzdCk7Ci0gICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nh
c3Q8UmVmUHRyPCVzPio+KCZtX3Jlc3VsdCk7Ci0gICAgICAgIH0KLQotICAgICAgICBQYXNzUmVm
UHRyPCVzPiByZWxlYXNlKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjwl
cz4oKnRoaXMpLnJlbGVhc2UoKTsKLSAgICAgICAgfQotICAgIH07Ci0KLSIiIikKLQotY2xhc3Nf
YmluZGluZ19idWlsZGVyX3BhcnRfNCA9ICgKLSIiIiAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxk
c1NldD4gY3JlYXRlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0
PihJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkpOwotICAgIH0KLSIiIikKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2Vu
L19faW5pdF9fLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2Nv
ZGVnZW4vX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGI3NjExOGNlNWVlMjlmODRjZDU1MGU5ODQy
MTgwYTRlYjM0OTczYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL19faW5pdF9fLnB5CkBAIC0wLDAgKzEsMTIgQEAKKyMg
UmVxdWlyZWQgZm9yIFB5dGhvbiB0byBzZWFyY2ggdGhpcyBkaXJlY3RvcnkgZm9yIG1vZHVsZSBm
aWxlcworCitmcm9tIG1vZGVscyBpbXBvcnQgKgorZnJvbSBnZW5lcmF0b3IgaW1wb3J0ICoKKwor
ZnJvbSBnZW5lcmF0ZV9iYWNrZW5kX2NvbW1hbmRzIGltcG9ydCAqCitmcm9tIGdlbmVyYXRlX2Jh
Y2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIgaW1wb3J0ICoKK2Zyb20gZ2VuZXJhdGVfYmFja2VuZF9k
aXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uIGltcG9ydCAqCitmcm9tIGdlbmVyYXRlX2Zyb250ZW5k
X2Rpc3BhdGNoZXJfaGVhZGVyIGltcG9ydCAqCitmcm9tIGdlbmVyYXRlX2Zyb250ZW5kX2Rpc3Bh
dGNoZXJfaW1wbGVtZW50YXRpb24gaW1wb3J0ICoKK2Zyb20gZ2VuZXJhdGVfdHlwZV9idWlsZGVy
X2hlYWRlciBpbXBvcnQgKgorZnJvbSBnZW5lcmF0ZV90eXBlX2J1aWxkZXJfaW1wbGVtZW50YXRp
b24gaW1wb3J0ICoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2JhY2tlbmRfY29tbWFuZHMucHkgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9iYWNrZW5kX2Nv
bW1hbmRzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhhODA1ZjNmYTAzNjEzZTU5YzlkNzdkYzY2ODE3NTk1YjJh
NDViODcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9iYWNrZW5kX2NvbW1hbmRzLnB5CkBAIC0wLDAgKzEs
MTE3IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChjKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorIyBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBzdHJp
bmcKK2Zyb20gc3RyaW5nIGltcG9ydCBUZW1wbGF0ZQorCitmcm9tIGdlbmVyYXRvciBpbXBvcnQg
R2VuZXJhdG9yLCB1Y2ZpcnN0Citmcm9tIGdlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IEdlbmVy
YXRvclRlbXBsYXRlcyBhcyBUZW1wbGF0ZXMKK2Zyb20gbW9kZWxzIGltcG9ydCBFbnVtVHlwZQor
Citsb2cgPSBsb2dnaW5nLmdldExvZ2dlcignZ2xvYmFsJykKKworCitjbGFzcyBCYWNrZW5kQ29t
bWFuZHNHZW5lcmF0b3IoR2VuZXJhdG9yKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbW9kZWws
IGlucHV0X2ZpbGVwYXRoKToKKyAgICAgICAgR2VuZXJhdG9yLl9faW5pdF9fKHNlbGYsIG1vZGVs
LCBpbnB1dF9maWxlcGF0aCkKKworICAgIGRlZiBvdXRwdXRfZmlsZW5hbWUoc2VsZik6CisgICAg
ICAgIHJldHVybiAiSW5zcGVjdG9yJXNCYWNrZW5kQ29tbWFuZHMuanMiICUgc2VsZi5tb2RlbCgp
LmZyYW1ld29yay5zZXR0aW5nKCdwcmVmaXgnKQorCisgICAgZGVmIGRvbWFpbnNfdG9fZ2VuZXJh
dGUoc2VsZik6CisgICAgICAgIGRlZiBzaG91bGRfZ2VuZXJhdGVfZG9tYWluKGRvbWFpbik6Cisg
ICAgICAgICAgICBkb21haW5fZW51bV90eXBlcyA9IGZpbHRlcihsYW1iZGEgZGVjbGFyYXRpb246
IGlzaW5zdGFuY2UoZGVjbGFyYXRpb24udHlwZSwgRW51bVR5cGUpLCBkb21haW4udHlwZV9kZWNs
YXJhdGlvbnMpCisgICAgICAgICAgICByZXR1cm4gbGVuKGRvbWFpbi5jb21tYW5kcykgPiAwIG9y
IGxlbihkb21haW4uZXZlbnRzKSA+IDAgb3IgbGVuKGRvbWFpbl9lbnVtX3R5cGVzKSA+IDAKKwor
ICAgICAgICByZXR1cm4gZmlsdGVyKHNob3VsZF9nZW5lcmF0ZV9kb21haW4sIEdlbmVyYXRvci5k
b21haW5zX3RvX2dlbmVyYXRlKHNlbGYpKQorCisgICAgZGVmIGdlbmVyYXRlX291dHB1dChzZWxm
KToKKyAgICAgICAgc2VjdGlvbnMgPSBbXQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5n
ZW5lcmF0ZV9saWNlbnNlKCkpCisgICAgICAgIHNlY3Rpb25zLmV4dGVuZChtYXAoc2VsZi5nZW5l
cmF0ZV9kb21haW4sIHNlbGYuZG9tYWluc190b19nZW5lcmF0ZSgpKSkKKyAgICAgICAgcmV0dXJu
ICJcblxuIi5qb2luKHNlY3Rpb25zKQorCisgICAgZGVmIGdlbmVyYXRlX2RvbWFpbihzZWxmLCBk
b21haW4pOgorICAgICAgICBsaW5lcyA9IFtdCisgICAgICAgIGFyZ3MgPSB7CisgICAgICAgICAg
ICAnZG9tYWluJzogZG9tYWluLmRvbWFpbl9uYW1lCisgICAgICAgIH0KKworICAgICAgICBsaW5l
cy5hcHBlbmQoJy8vICUoZG9tYWluKXMuJyAlIGFyZ3MpCisKKyAgICAgICAgaGFzX2FzeW5jX2Nv
bW1hbmRzID0gYW55KG1hcChsYW1iZGEgY29tbWFuZDogY29tbWFuZC5pc19hc3luYywgZG9tYWlu
LmNvbW1hbmRzKSkKKyAgICAgICAgaWYgbGVuKGRvbWFpbi5ldmVudHMpID4gMCBvciBoYXNfYXN5
bmNfY29tbWFuZHM6CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ0luc3BlY3RvckJhY2tlbmQu
cmVnaXN0ZXIlKGRvbWFpbilzRGlzcGF0Y2hlciA9IEluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJE
b21haW5EaXNwYXRjaGVyLmJpbmQoSW5zcGVjdG9yQmFja2VuZCwgIiUoZG9tYWluKXMiKTsnICUg
YXJncykKKworICAgICAgICBmb3IgZGVjbGFyYXRpb24gaW4gZG9tYWluLnR5cGVfZGVjbGFyYXRp
b25zOgorICAgICAgICAgICAgaWYgZGVjbGFyYXRpb24udHlwZS5pc19lbnVtKCk6CisgICAgICAg
ICAgICAgICAgZW51bV9hcmdzID0geworICAgICAgICAgICAgICAgICAgICAnZG9tYWluJzogZG9t
YWluLmRvbWFpbl9uYW1lLAorICAgICAgICAgICAgICAgICAgICAnZW51bU5hbWUnOiBkZWNsYXJh
dGlvbi50eXBlX25hbWUsCisgICAgICAgICAgICAgICAgICAgICdlbnVtTWFwJzogIiwgIi5qb2lu
KFsnJXM6ICIlcyInICUgKEdlbmVyYXRvci5zdHlsaXplZF9uYW1lX2Zvcl9lbnVtX3ZhbHVlKGVu
dW1fdmFsdWUpLCBlbnVtX3ZhbHVlKSBmb3IgZW51bV92YWx1ZSBpbiBkZWNsYXJhdGlvbi50eXBl
LmVudW1fdmFsdWVzKCldKQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBsaW5l
cy5hcHBlbmQoJ0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFbnVtKCIlKGRvbWFpbilzLiUoZW51
bU5hbWUpcyIsIHslKGVudW1NYXApc30pOycgJSBlbnVtX2FyZ3MpCisKKyAgICAgICAgICAgIGRl
ZiBpc19hbm9ueW1vdXNfZW51bV9tZW1iZXIodHlwZV9tZW1iZXIpOgorICAgICAgICAgICAgICAg
IHJldHVybiBpc2luc3RhbmNlKHR5cGVfbWVtYmVyLnR5cGUsIEVudW1UeXBlKSBhbmQgdHlwZV9t
ZW1iZXIudHlwZS5pc19hbm9ueW1vdXMKKworICAgICAgICAgICAgZm9yIF9tZW1iZXIgaW4gZmls
dGVyKGlzX2Fub255bW91c19lbnVtX21lbWJlciwgZGVjbGFyYXRpb24udHlwZV9tZW1iZXJzKToK
KyAgICAgICAgICAgICAgICBlbnVtX2FyZ3MgPSB7CisgICAgICAgICAgICAgICAgICAgICdkb21h
aW4nOiBkb21haW4uZG9tYWluX25hbWUsCisgICAgICAgICAgICAgICAgICAgICdlbnVtTmFtZSc6
ICclcyVzJyAlIChkZWNsYXJhdGlvbi50eXBlX25hbWUsIHVjZmlyc3QoX21lbWJlci5tZW1iZXJf
bmFtZSkpLAorICAgICAgICAgICAgICAgICAgICAnZW51bU1hcCc6ICIsICIuam9pbihbJyVzOiAi
JXMiJyAlIChHZW5lcmF0b3Iuc3R5bGl6ZWRfbmFtZV9mb3JfZW51bV92YWx1ZShlbnVtX3ZhbHVl
KSwgZW51bV92YWx1ZSkgZm9yIGVudW1fdmFsdWUgaW4gX21lbWJlci50eXBlLmVudW1fdmFsdWVz
KCldKQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ0lu
c3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFbnVtKCIlKGRvbWFpbilzLiUoZW51bU5hbWUpcyIsIHsl
KGVudW1NYXApc30pOycgJSBlbnVtX2FyZ3MpCisKKyAgICAgICAgZm9yIGV2ZW50IGluIGRvbWFp
bi5ldmVudHM6CisgICAgICAgICAgICBldmVudF9hcmdzID0geworICAgICAgICAgICAgICAgICdk
b21haW4nOiBkb21haW4uZG9tYWluX25hbWUsCisgICAgICAgICAgICAgICAgJ2V2ZW50TmFtZSc6
IGV2ZW50LmV2ZW50X25hbWUsCisgICAgICAgICAgICAgICAgJ3BhcmFtcyc6ICIsICIuam9pbihb
JyIlcyInICUgcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lIGZvciBwYXJhbWV0ZXIgaW4gZXZlbnQu
ZXZlbnRfcGFyYW1ldGVyc10pCisgICAgICAgICAgICB9CisgICAgICAgICAgICBsaW5lcy5hcHBl
bmQoJ0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFdmVudCgiJShkb21haW4pcy4lKGV2ZW50TmFt
ZSlzIiwgWyUocGFyYW1zKXNdKTsnICUgZXZlbnRfYXJncykKKworICAgICAgICBmb3IgY29tbWFu
ZCBpbiBkb21haW4uY29tbWFuZHM6CisKKyAgICAgICAgICAgIGRlZiBnZW5lcmF0ZV9wYXJhbWV0
ZXJfb2JqZWN0KHBhcmFtZXRlcik6CisgICAgICAgICAgICAgICAgb3B0aW9uYWxfc3RyaW5nID0g
InRydWUiIGlmIHBhcmFtZXRlci5pc19vcHRpb25hbCBlbHNlICJmYWxzZSIKKyAgICAgICAgICAg
ICAgICBwYWlycyA9IFtdCisgICAgICAgICAgICAgICAgcGFpcnMuYXBwZW5kKCcibmFtZSI6ICIl
cyInICUgcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKQorICAgICAgICAgICAgICAgIHBhaXJzLmFw
cGVuZCgnInR5cGUiOiAiJXMiJyAlIEdlbmVyYXRvci5qc19uYW1lX2Zvcl9wYXJhbWV0ZXJfdHlw
ZShwYXJhbWV0ZXIudHlwZSkpCisgICAgICAgICAgICAgICAgcGFpcnMuYXBwZW5kKCcib3B0aW9u
YWwiOiAlcycgJSBvcHRpb25hbF9zdHJpbmcpCisgICAgICAgICAgICAgICAgcmV0dXJuICJ7JXN9
IiAlICIsICIuam9pbihwYWlycykKKworICAgICAgICAgICAgY29tbWFuZF9hcmdzID0geworICAg
ICAgICAgICAgICAgICdkb21haW4nOiBkb21haW4uZG9tYWluX25hbWUsCisgICAgICAgICAgICAg
ICAgJ2NvbW1hbmROYW1lJzogY29tbWFuZC5jb21tYW5kX25hbWUsCisgICAgICAgICAgICAgICAg
J2NhbGxQYXJhbXMnOiAiLCAiLmpvaW4oW2dlbmVyYXRlX3BhcmFtZXRlcl9vYmplY3QocGFyYW1l
dGVyKSBmb3IgcGFyYW1ldGVyIGluIGNvbW1hbmQuY2FsbF9wYXJhbWV0ZXJzXSksCisgICAgICAg
ICAgICAgICAgJ3JldHVyblBhcmFtcyc6ICIsICIuam9pbihbJyIlcyInICUgcGFyYW1ldGVyLnBh
cmFtZXRlcl9uYW1lIGZvciBwYXJhbWV0ZXIgaW4gY29tbWFuZC5yZXR1cm5fcGFyYW1ldGVyc10p
LAorICAgICAgICAgICAgfQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCdJbnNwZWN0b3JCYWNr
ZW5kLnJlZ2lzdGVyQ29tbWFuZCgiJShkb21haW4pcy4lKGNvbW1hbmROYW1lKXMiLCBbJShjYWxs
UGFyYW1zKXNdLCBbJShyZXR1cm5QYXJhbXMpc10pOycgJSBjb21tYW5kX2FyZ3MpCisKKyAgICAg
ICAgcmV0dXJuICJcbiIuam9pbihsaW5lcykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2JhY2tlbmRfZGlzcGF0Y2hl
cl9oZWFkZXIucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29k
ZWdlbi9nZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5Cm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI2
ZjRiMzlkMDNhZTViYzNhNDNjNjQzMTRlYjgwMmI0MjI3Zjk5ODcKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0
ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5CkBAIC0wLDAgKzEsMTgxIEBACisjIS91c3Iv
YmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChjKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
IyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworIyBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMg
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisKKworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCByZQoraW1wb3J0IHN0cmluZwor
ZnJvbSBzdHJpbmcgaW1wb3J0IFRlbXBsYXRlCisKK2Zyb20gZ2VuZXJhdG9yIGltcG9ydCBHZW5l
cmF0b3IsIHVjZmlyc3QKK2Zyb20gZ2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgR2VuZXJhdG9y
VGVtcGxhdGVzIGFzIFRlbXBsYXRlcworZnJvbSBtb2RlbHMgaW1wb3J0IEVudW1UeXBlCisKK2xv
ZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQorCisKK2NsYXNzIEJhY2tlbmREaXNwYXRj
aGVySGVhZGVyR2VuZXJhdG9yKEdlbmVyYXRvcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1v
ZGVsLCBpbnB1dF9maWxlcGF0aCk6CisgICAgICAgIEdlbmVyYXRvci5fX2luaXRfXyhzZWxmLCBt
b2RlbCwgaW5wdXRfZmlsZXBhdGgpCisKKyAgICBkZWYgb3V0cHV0X2ZpbGVuYW1lKHNlbGYpOgor
ICAgICAgICByZXR1cm4gIkluc3BlY3RvciVzQmFja2VuZERpc3BhdGNoZXJzLmgiICUgc2VsZi5t
b2RlbCgpLmZyYW1ld29yay5zZXR0aW5nKCdwcmVmaXgnKQorCisgICAgZGVmIGRvbWFpbnNfdG9f
Z2VuZXJhdGUoc2VsZik6CisgICAgICAgIHJldHVybiBmaWx0ZXIobGFtYmRhIGRvbWFpbjogbGVu
KGRvbWFpbi5jb21tYW5kcykgPiAwLCBHZW5lcmF0b3IuZG9tYWluc190b19nZW5lcmF0ZShzZWxm
KSkKKworICAgIGRlZiBnZW5lcmF0ZV9vdXRwdXQoc2VsZik6CisgICAgICAgIGhlYWRlcnMgPSBb
CisgICAgICAgICAgICAnIkluc3BlY3RvciVzVHlwZUJ1aWxkZXJzLmgiJyAlIHNlbGYubW9kZWwo
KS5mcmFtZXdvcmsuc2V0dGluZygncHJlZml4JyksCisgICAgICAgICAgICAnPGluc3BlY3Rvci9J
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPicsCisgICAgICAgICAgICAnPHd0Zi9QYXNzUmVm
UHRyLmg+JywKKyAgICAgICAgICAgICc8d3RmL3RleHQvV1RGU3RyaW5nLmg+J10KKworICAgICAg
ICB0eXBlZGVmcyA9IFsoJ1N0cmluZycsICdFcnJvclN0cmluZycpXQorCisgICAgICAgIGhlYWRl
cl9hcmdzID0geworICAgICAgICAgICAgJ2hlYWRlckd1YXJkU3RyaW5nJzogcmUuc3ViKCdcVysn
LCAnXycsIHNlbGYub3V0cHV0X2ZpbGVuYW1lKCkpLAorICAgICAgICAgICAgJ2luY2x1ZGVzJzog
J1xuJy5qb2luKFsnI2luY2x1ZGUgJyArIGhlYWRlciBmb3IgaGVhZGVyIGluIGhlYWRlcnNdKSwK
KyAgICAgICAgICAgICd0eXBlZGVmcyc6ICdcbicuam9pbihbJ3R5cGVkZWYgJXMgJXM7JyAlIHR5
cGVkZWYgZm9yIHR5cGVkZWYgaW4gdHlwZWRlZnNdKSwKKyAgICAgICAgICAgICdpbnB1dEZpbGVu
YW1lJzogc2VsZi5faW5wdXRfZmlsZXBhdGgKKyAgICAgICAgfQorCisgICAgICAgIHNlY3Rpb25z
ID0gW10KKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfbGljZW5zZSgpKQor
ICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVzLkNwcEhlYWRlclByZWx1
ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCisgICAgICAgIHNlY3Rpb25zLmV4
dGVuZChtYXAoc2VsZi5fZ2VuZXJhdGVfaGFuZGxlcl9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbiwg
c2VsZi5kb21haW5zX3RvX2dlbmVyYXRlKCkpKQorICAgICAgICBzZWN0aW9ucy5leHRlbmQobWFw
KHNlbGYuX2dlbmVyYXRlX2Rpc3BhdGNoZXJfZGVjbGFyYXRpb25zX2Zvcl9kb21haW4sIHNlbGYu
ZG9tYWluc190b19nZW5lcmF0ZSgpKSkKKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRl
KFRlbXBsYXRlcy5DcHBIZWFkZXJQb3N0bHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9h
cmdzKSkKKyAgICAgICAgcmV0dXJuICJcblxuIi5qb2luKHNlY3Rpb25zKQorCisgICAgIyBQcml2
YXRlIG1ldGhvZHMuCisKKyAgICBkZWYgX2dlbmVyYXRlX2hhbmRsZXJfZGVjbGFyYXRpb25zX2Zv
cl9kb21haW4oc2VsZiwgZG9tYWluKToKKyAgICAgICAgY2xhc3NDb21wb25lbnRzID0gWydjbGFz
cyddCisgICAgICAgIGV4cG9ydE1hY3JvID0gc2VsZi5tb2RlbCgpLmZyYW1ld29yay5zZXR0aW5n
KCdleHBvcnRfbWFjcm8nLCBOb25lKQorICAgICAgICBpZiBleHBvcnRNYWNybyBpcyBub3QgTm9u
ZToKKyAgICAgICAgICAgIGNsYXNzQ29tcG9uZW50cy5hcHBlbmQoZXhwb3J0TWFjcm8pCisKKyAg
ICAgICAgdXNlZF9lbnVtX25hbWVzID0gc2V0KCkKKworICAgICAgICBjb21tYW5kX2RlY2xhcmF0
aW9ucyA9IFtdCisgICAgICAgIGZvciBjb21tYW5kIGluIGRvbWFpbi5jb21tYW5kczoKKyAgICAg
ICAgICAgIGNvbW1hbmRfZGVjbGFyYXRpb25zLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9oYW5kbGVy
X2RlY2xhcmF0aW9uX2Zvcl9jb21tYW5kKGNvbW1hbmQsIHVzZWRfZW51bV9uYW1lcykpCisKKyAg
ICAgICAgaGFuZGxlcl9hcmdzID0geworICAgICAgICAgICAgJ2NsYXNzQW5kRXhwb3J0TWFjcm8n
OiAiICIuam9pbihjbGFzc0NvbXBvbmVudHMpLAorICAgICAgICAgICAgJ2RvbWFpbk5hbWUnOiBk
b21haW4uZG9tYWluX25hbWUsCisgICAgICAgICAgICAnY29tbWFuZERlY2xhcmF0aW9ucyc6ICJc
biIuam9pbihjb21tYW5kX2RlY2xhcmF0aW9ucykKKyAgICAgICAgfQorCisgICAgICAgIHJldHVy
biBHZW5lcmF0b3Iud3JhcF93aXRoX2d1YXJkX2Zvcl9kb21haW4oZG9tYWluLCBUZW1wbGF0ZShU
ZW1wbGF0ZXMuQmFja2VuZERpc3BhdGNoZXJIZWFkZXJEb21haW5IYW5kbGVyRGVjbGFyYXRpb24p
LnN1YnN0aXR1dGUoTm9uZSwgKipoYW5kbGVyX2FyZ3MpKQorCisgICAgZGVmIF9nZW5lcmF0ZV9h
bm9ueW1vdXNfZW51bV9mb3JfcGFyYW1ldGVyKHNlbGYsIHBhcmFtZXRlciwgY29tbWFuZCk6Cisg
ICAgICAgIGVudW1fYXJncyA9IHsKKyAgICAgICAgICAgICdwYXJhbWV0ZXJOYW1lJzogcGFyYW1l
dGVyLnBhcmFtZXRlcl9uYW1lLAorICAgICAgICAgICAgJ2NvbW1hbmROYW1lJzogY29tbWFuZC5j
b21tYW5kX25hbWUKKyAgICAgICAgfQorCisgICAgICAgIGxpbmVzID0gW10KKyAgICAgICAgbGlu
ZXMuYXBwZW5kKCcgICAgLy8gTmFtZWQgYWZ0ZXIgcGFyYW1ldGVyIFwnJShwYXJhbWV0ZXJOYW1l
KXNcJyB3aGlsZSBnZW5lcmF0aW5nIGNvbW1hbmQvZXZlbnQgJShjb21tYW5kTmFtZSlzLicgJSBl
bnVtX2FyZ3MpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGVudW0gY2xhc3MgJXMgeycgJSB1
Y2ZpcnN0KHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkpCisgICAgICAgIGZvciBlbnVtX3ZhbHVl
IGluIHBhcmFtZXRlci50eXBlLmVudW1fdmFsdWVzKCk6CisgICAgICAgICAgICBsaW5lcy5hcHBl
bmQoJyAgICAgICAgJXMgPSAlZCwnICUgKEdlbmVyYXRvci5zdHlsaXplZF9uYW1lX2Zvcl9lbnVt
X3ZhbHVlKGVudW1fdmFsdWUpLCBzZWxmLmVuY29kaW5nX2Zvcl9lbnVtX3ZhbHVlKGVudW1fdmFs
dWUpKSkKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgfTsgLy8gZW51bSBjbGFzcyAlcycgJSB1
Y2ZpcnN0KHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkpCisgICAgICAgIHJldHVybiAnXG4nLmpv
aW4obGluZXMpCisKKyAgICBkZWYgX2dlbmVyYXRlX2hhbmRsZXJfZGVjbGFyYXRpb25fZm9yX2Nv
bW1hbmQoc2VsZiwgY29tbWFuZCwgdXNlZF9lbnVtX25hbWVzKToKKyAgICAgICAgaWYgY29tbWFu
ZC5pc19hc3luYzoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9nZW5lcmF0ZV9hc3luY19oYW5k
bGVyX2RlY2xhcmF0aW9uX2Zvcl9jb21tYW5kKGNvbW1hbmQpCisKKyAgICAgICAgbGluZXMgPSBb
XQorICAgICAgICBwYXJhbWV0ZXJzID0gWydFcnJvclN0cmluZyonXQorICAgICAgICBmb3IgX3Bh
cmFtZXRlciBpbiBjb21tYW5kLmNhbGxfcGFyYW1ldGVyczoKKyAgICAgICAgICAgIHBhcmFtZXRl
cnMuYXBwZW5kKCIlcyBpbl8lcyIgJSAoR2VuZXJhdG9yLnR5cGVfc3RyaW5nX2Zvcl91bmNoZWNr
ZWRfZm9ybWFsX2luX3BhcmFtZXRlcihfcGFyYW1ldGVyKSwgX3BhcmFtZXRlci5wYXJhbWV0ZXJf
bmFtZSkpCisKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoX3BhcmFtZXRlci50eXBlLCBFbnVt
VHlwZSkgYW5kIF9wYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUgbm90IGluIHVzZWRfZW51bV9uYW1l
czoKKyAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYW5vbnltb3Vz
X2VudW1fZm9yX3BhcmFtZXRlcihfcGFyYW1ldGVyLCBjb21tYW5kKSkKKyAgICAgICAgICAgICAg
ICB1c2VkX2VudW1fbmFtZXMuYWRkKF9wYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpCisKKyAgICAg
ICAgZm9yIF9wYXJhbWV0ZXIgaW4gY29tbWFuZC5yZXR1cm5fcGFyYW1ldGVyczoKKyAgICAgICAg
ICAgIHBhcmFtZXRlcl9uYW1lID0gJ291dF8nICsgX3BhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZQor
ICAgICAgICAgICAgaWYgX3BhcmFtZXRlci5pc19vcHRpb25hbDoKKyAgICAgICAgICAgICAgICBw
YXJhbWV0ZXJfbmFtZSA9ICdvcHRfJyArIHBhcmFtZXRlcl9uYW1lCisgICAgICAgICAgICBwYXJh
bWV0ZXJzLmFwcGVuZCgiJXMgJXMiICUgKEdlbmVyYXRvci50eXBlX3N0cmluZ19mb3JfZm9ybWFs
X291dF9wYXJhbWV0ZXIoX3BhcmFtZXRlciksIHBhcmFtZXRlcl9uYW1lKSkKKworICAgICAgICAg
ICAgaWYgaXNpbnN0YW5jZShfcGFyYW1ldGVyLnR5cGUsIEVudW1UeXBlKSBhbmQgX3BhcmFtZXRl
ci5wYXJhbWV0ZXJfbmFtZSBub3QgaW4gdXNlZF9lbnVtX25hbWVzOgorICAgICAgICAgICAgICAg
IGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9mb3JfcGFyYW1ldGVy
KF9wYXJhbWV0ZXIsIGNvbW1hbmQpKQorICAgICAgICAgICAgICAgIHVzZWRfZW51bV9uYW1lcy5h
ZGQoX3BhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkKKworICAgICAgICBjb21tYW5kX2FyZ3MgPSB7
CisgICAgICAgICAgICAnY29tbWFuZE5hbWUnOiBjb21tYW5kLmNvbW1hbmRfbmFtZSwKKyAgICAg
ICAgICAgICdwYXJhbWV0ZXJzJzogIiwgIi5qb2luKHBhcmFtZXRlcnMpCisgICAgICAgIH0KKyAg
ICAgICAgbGluZXMuYXBwZW5kKCcgICAgdmlydHVhbCB2b2lkICUoY29tbWFuZE5hbWUpcyglKHBh
cmFtZXRlcnMpcykgPSAwOycgJSBjb21tYW5kX2FyZ3MpCisgICAgICAgIHJldHVybiAnXG4nLmpv
aW4obGluZXMpCisKKyAgICBkZWYgX2dlbmVyYXRlX2FzeW5jX2hhbmRsZXJfZGVjbGFyYXRpb25f
Zm9yX2NvbW1hbmQoc2VsZiwgY29tbWFuZCk6CisgICAgICAgIGNhbGxiYWNrTmFtZSA9ICIlc0Nh
bGxiYWNrIiAlIHVjZmlyc3QoY29tbWFuZC5jb21tYW5kX25hbWUpCisKKyAgICAgICAgaW5fcGFy
YW1ldGVycyA9IFsnRXJyb3JTdHJpbmcqJ10KKyAgICAgICAgZm9yIF9wYXJhbWV0ZXIgaW4gY29t
bWFuZC5jYWxsX3BhcmFtZXRlcnM6CisgICAgICAgICAgICBpbl9wYXJhbWV0ZXJzLmFwcGVuZCgi
JXMgaW5fJXMiICUgKEdlbmVyYXRvci50eXBlX3N0cmluZ19mb3JfdW5jaGVja2VkX2Zvcm1hbF9p
bl9wYXJhbWV0ZXIoX3BhcmFtZXRlciksIF9wYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpKQorICAg
ICAgICBpbl9wYXJhbWV0ZXJzLmFwcGVuZCgiUGFzc1JlZlB0cjwlcz4gY2FsbGJhY2siICUgY2Fs
bGJhY2tOYW1lKQorCisgICAgICAgIG91dF9wYXJhbWV0ZXJzID0gW10KKyAgICAgICAgZm9yIF9w
YXJhbWV0ZXIgaW4gY29tbWFuZC5yZXR1cm5fcGFyYW1ldGVyczoKKyAgICAgICAgICAgIG91dF9w
YXJhbWV0ZXJzLmFwcGVuZCgiJXMgJXMiICUgKEdlbmVyYXRvci50eXBlX3N0cmluZ19mb3JfZm9y
bWFsX2FzeW5jX3BhcmFtZXRlcihfcGFyYW1ldGVyKSwgX3BhcmFtZXRlci5wYXJhbWV0ZXJfbmFt
ZSkpCisKKyAgICAgICAgY29tbWFuZF9hcmdzID0geworICAgICAgICAgICAgJ2NhbGxiYWNrTmFt
ZSc6IGNhbGxiYWNrTmFtZSwKKyAgICAgICAgICAgICdjb21tYW5kTmFtZSc6IGNvbW1hbmQuY29t
bWFuZF9uYW1lLAorICAgICAgICAgICAgJ2luUGFyYW1ldGVycyc6ICIsICIuam9pbihpbl9wYXJh
bWV0ZXJzKSwKKyAgICAgICAgICAgICdvdXRQYXJhbWV0ZXJzJzogIiwgIi5qb2luKG91dF9wYXJh
bWV0ZXJzKSwKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBUZW1wbGF0ZShUZW1wbGF0ZXMu
QmFja2VuZERpc3BhdGNoZXJIZWFkZXJBc3luY0NvbW1hbmREZWNsYXJhdGlvbikuc3Vic3RpdHV0
ZShOb25lLCAqKmNvbW1hbmRfYXJncykKKworICAgIGRlZiBfZ2VuZXJhdGVfZGlzcGF0Y2hlcl9k
ZWNsYXJhdGlvbnNfZm9yX2RvbWFpbihzZWxmLCBkb21haW4pOgorICAgICAgICBjbGFzc0NvbXBv
bmVudHMgPSBbJ2NsYXNzJ10KKyAgICAgICAgZXhwb3J0TWFjcm8gPSBzZWxmLm1vZGVsKCkuZnJh
bWV3b3JrLnNldHRpbmcoJ2V4cG9ydF9tYWNybycsIE5vbmUpCisgICAgICAgIGlmIGV4cG9ydE1h
Y3JvIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgY2xhc3NDb21wb25lbnRzLmFwcGVuZChleHBv
cnRNYWNybykKKworICAgICAgICBkZWNsYXJhdGlvbnMgPSBbXQorICAgICAgICBpZiBsZW4oZG9t
YWluLmNvbW1hbmRzKSA+IDA6CisgICAgICAgICAgICBkZWNsYXJhdGlvbnMuYXBwZW5kKCdwcml2
YXRlOicpCisgICAgICAgIGRlY2xhcmF0aW9ucy5leHRlbmQobWFwKHNlbGYuX2dlbmVyYXRlX2Rp
c3BhdGNoZXJfZGVjbGFyYXRpb25fZm9yX2NvbW1hbmQsIGRvbWFpbi5jb21tYW5kcykpCisKKyAg
ICAgICAgaGFuZGxlcl9hcmdzID0geworICAgICAgICAgICAgJ2NsYXNzQW5kRXhwb3J0TWFjcm8n
OiAiICIuam9pbihjbGFzc0NvbXBvbmVudHMpLAorICAgICAgICAgICAgJ2RvbWFpbk5hbWUnOiBk
b21haW4uZG9tYWluX25hbWUsCisgICAgICAgICAgICAnY29tbWFuZERlY2xhcmF0aW9ucyc6ICJc
biIuam9pbihkZWNsYXJhdGlvbnMpCisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gR2VuZXJh
dG9yLndyYXBfd2l0aF9ndWFyZF9mb3JfZG9tYWluKGRvbWFpbiwgVGVtcGxhdGUoVGVtcGxhdGVz
LkJhY2tlbmREaXNwYXRjaGVySGVhZGVyRG9tYWluRGlzcGF0Y2hlckRlY2xhcmF0aW9uKS5zdWJz
dGl0dXRlKE5vbmUsICoqaGFuZGxlcl9hcmdzKSkKKworICAgIGRlZiBfZ2VuZXJhdGVfZGlzcGF0
Y2hlcl9kZWNsYXJhdGlvbl9mb3JfY29tbWFuZChzZWxmLCBjb21tYW5kKToKKyAgICAgICAgcmV0
dXJuICIgICAgdm9pZCAlcyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JP
YmplY3QmIG1lc3NhZ2UpOyIgJSBjb21tYW5kLmNvbW1hbmRfbmFtZQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfYmFj
a2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfYmFja2VuZF9kaXNwYXRjaGVyX2lt
cGxlbWVudGF0aW9uLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg3YTJiOGZlMmRhYjE5ZDdjMWExNDQ1NGI0YzZh
MjE0MzlkZjMyODIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVt
ZW50YXRpb24ucHkKQEAgLTAsMCArMSwyNjkgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIwor
IyBDb3B5cmlnaHQgKGMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBD
b3B5cmlnaHQgKGMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisj
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisjIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworCitpbXBv
cnQgbG9nZ2luZworaW1wb3J0IHN0cmluZworZnJvbSBzdHJpbmcgaW1wb3J0IFRlbXBsYXRlCisK
K2Zyb20gZ2VuZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IsIHVjZmlyc3QKK2Zyb20gZ2VuZXJhdG9y
X3RlbXBsYXRlcyBpbXBvcnQgR2VuZXJhdG9yVGVtcGxhdGVzIGFzIFRlbXBsYXRlcworZnJvbSBt
b2RlbHMgaW1wb3J0IE9iamVjdFR5cGUsIEFycmF5VHlwZQorCitsb2cgPSBsb2dnaW5nLmdldExv
Z2dlcignZ2xvYmFsJykKKworCitjbGFzcyBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9u
R2VuZXJhdG9yKEdlbmVyYXRvcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1
dF9maWxlcGF0aCk6CisgICAgICAgIEdlbmVyYXRvci5fX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5w
dXRfZmlsZXBhdGgpCisKKyAgICBkZWYgb3V0cHV0X2ZpbGVuYW1lKHNlbGYpOgorICAgICAgICBy
ZXR1cm4gIkluc3BlY3RvciVzQmFja2VuZERpc3BhdGNoZXJzLmNwcCIgJSBzZWxmLm1vZGVsKCku
ZnJhbWV3b3JrLnNldHRpbmcoJ3ByZWZpeCcpCisKKyAgICBkZWYgZG9tYWluc190b19nZW5lcmF0
ZShzZWxmKToKKyAgICAgICAgcmV0dXJuIGZpbHRlcihsYW1iZGEgZG9tYWluOiBsZW4oZG9tYWlu
LmNvbW1hbmRzKSA+IDAsIEdlbmVyYXRvci5kb21haW5zX3RvX2dlbmVyYXRlKHNlbGYpKQorCisg
ICAgZGVmIGdlbmVyYXRlX291dHB1dChzZWxmKToKKyAgICAgICAgc2Vjb25kYXJ5X2hlYWRlcnMg
PSBbCisgICAgICAgICAgICAnPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4n
LAorICAgICAgICAgICAgJzxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+JywKKyAgICAgICAg
ICAgICc8d3RmL3RleHQvQ1N0cmluZy5oPiddCisKKyAgICAgICAgaGVhZGVyX2FyZ3MgPSB7Cisg
ICAgICAgICAgICAncHJpbWFyeUluY2x1ZGUnOiAnIkluc3BlY3RvciVzQmFja2VuZERpc3BhdGNo
ZXJzLmgiJyAlIHNlbGYubW9kZWwoKS5mcmFtZXdvcmsuc2V0dGluZygncHJlZml4JyksCisgICAg
ICAgICAgICAnc2Vjb25kYXJ5SW5jbHVkZXMnOiAiXG4iLmpvaW4oWycjaW5jbHVkZSAlcycgJSBo
ZWFkZXIgZm9yIGhlYWRlciBpbiBzZWNvbmRhcnlfaGVhZGVyc10pLAorICAgICAgICAgICAgJ2lu
cHV0RmlsZW5hbWUnOiBzZWxmLl9pbnB1dF9maWxlcGF0aAorICAgICAgICB9CisKKyAgICAgICAg
c2VjdGlvbnMgPSBbXQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5nZW5lcmF0ZV9saWNl
bnNlKCkpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMuQ3BwSW1w
bGVtZW50YXRpb25QcmVsdWRlKS5zdWJzdGl0dXRlKE5vbmUsICoqaGVhZGVyX2FyZ3MpKQorICAg
ICAgICBzZWN0aW9ucy5hcHBlbmQoIlxuIi5qb2luKG1hcChzZWxmLl9nZW5lcmF0ZV9oYW5kbGVy
X2NsYXNzX2Rlc3RydWN0b3JfZm9yX2RvbWFpbiwgc2VsZi5kb21haW5zX3RvX2dlbmVyYXRlKCkp
KSkKKyAgICAgICAgc2VjdGlvbnMuZXh0ZW5kKG1hcChzZWxmLl9nZW5lcmF0ZV9kaXNwYXRjaGVy
X2ltcGxlbWVudGF0aW9uc19mb3JfZG9tYWluLCBzZWxmLmRvbWFpbnNfdG9fZ2VuZXJhdGUoKSkp
CisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMuQ3BwSW1wbGVtZW50
YXRpb25Qb3N0bHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkKKyAgICAgICAg
cmV0dXJuICJcblxuIi5qb2luKHNlY3Rpb25zKQorCisgICAgIyBQcml2YXRlIG1ldGhvZHMuCisK
KyAgICBkZWYgX2dlbmVyYXRlX2hhbmRsZXJfY2xhc3NfZGVzdHJ1Y3Rvcl9mb3JfZG9tYWluKHNl
bGYsIGRvbWFpbik6CisgICAgICAgIGRlc3RydWN0b3JfYXJncyA9IHsKKyAgICAgICAgICAgICdk
b21haW5OYW1lJzogZG9tYWluLmRvbWFpbl9uYW1lCisgICAgICAgIH0KKyAgICAgICAgZGVzdHJ1
Y3RvciA9ICdJbnNwZWN0b3IlKGRvbWFpbk5hbWUpc0JhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6
fkluc3BlY3RvciUoZG9tYWluTmFtZSlzQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCkgeyB9JyAl
IGRlc3RydWN0b3JfYXJncworICAgICAgICByZXR1cm4gR2VuZXJhdG9yLndyYXBfd2l0aF9ndWFy
ZF9mb3JfZG9tYWluKGRvbWFpbiwgZGVzdHJ1Y3RvcikKKworICAgIGRlZiBfZ2VuZXJhdGVfZGlz
cGF0Y2hlcl9pbXBsZW1lbnRhdGlvbnNfZm9yX2RvbWFpbihzZWxmLCBkb21haW4pOgorICAgICAg
ICBpbXBsZW1lbnRhdGlvbnMgPSBbXQorCisgICAgICAgIGNvbnN0cnVjdG9yX2FyZ3MgPSB7Cisg
ICAgICAgICAgICAnZG9tYWluTmFtZSc6IGRvbWFpbi5kb21haW5fbmFtZSwKKyAgICAgICAgfQor
ICAgICAgICBpbXBsZW1lbnRhdGlvbnMuYXBwZW5kKFRlbXBsYXRlKFRlbXBsYXRlcy5CYWNrZW5k
RGlzcGF0Y2hlckltcGxlbWVudGF0aW9uRG9tYWluQ29uc3RydWN0b3IpLnN1YnN0aXR1dGUoTm9u
ZSwgKipjb25zdHJ1Y3Rvcl9hcmdzKSkKKworICAgICAgICBpZiBsZW4oZG9tYWluLmNvbW1hbmRz
KSA8PSA1OgorICAgICAgICAgICAgaW1wbGVtZW50YXRpb25zLmFwcGVuZChzZWxmLl9nZW5lcmF0
ZV9zbWFsbF9kaXNwYXRjaGVyX3N3aXRjaF9pbXBsZW1lbnRhdGlvbl9mb3JfZG9tYWluKGRvbWFp
bikpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpbXBsZW1lbnRhdGlvbnMuYXBwZW5kKHNl
bGYuX2dlbmVyYXRlX2xhcmdlX2Rpc3BhdGNoZXJfc3dpdGNoX2ltcGxlbWVudGF0aW9uX2Zvcl9k
b21haW4oZG9tYWluKSkKKworICAgICAgICBmb3IgY29tbWFuZCBpbiBkb21haW4uY29tbWFuZHM6
CisgICAgICAgICAgICBpZiBjb21tYW5kLmlzX2FzeW5jOgorICAgICAgICAgICAgICAgIGltcGxl
bWVudGF0aW9ucy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYXN5bmNfZGlzcGF0Y2hlcl9jbGFzc19m
b3JfZG9tYWluKGNvbW1hbmQsIGRvbWFpbikpCisgICAgICAgICAgICBpbXBsZW1lbnRhdGlvbnMu
YXBwZW5kKHNlbGYuX2dlbmVyYXRlX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb25fZm9yX2NvbW1h
bmQoY29tbWFuZCwgZG9tYWluKSkKKworICAgICAgICByZXR1cm4gR2VuZXJhdG9yLndyYXBfd2l0
aF9ndWFyZF9mb3JfZG9tYWluKGRvbWFpbiwgIlxuXG4iLmpvaW4oaW1wbGVtZW50YXRpb25zKSkK
KworICAgIGRlZiBfZ2VuZXJhdGVfc21hbGxfZGlzcGF0Y2hlcl9zd2l0Y2hfaW1wbGVtZW50YXRp
b25fZm9yX2RvbWFpbihzZWxmLCBkb21haW4pOgorICAgICAgICBjYXNlcyA9IFtdCisgICAgICAg
IGNhc2VzLmFwcGVuZCgnICAgIGlmIChtZXRob2QgPT0gIiVzIiknICUgZG9tYWluLmNvbW1hbmRz
WzBdLmNvbW1hbmRfbmFtZSkKKyAgICAgICAgY2FzZXMuYXBwZW5kKCcgICAgICAgICVzKGNhbGxJ
ZCwgKm1lc3NhZ2UuZ2V0KCkpOycgJSBkb21haW4uY29tbWFuZHNbMF0uY29tbWFuZF9uYW1lKQor
ICAgICAgICBmb3IgY29tbWFuZCBpbiBkb21haW4uY29tbWFuZHNbMTpdOgorICAgICAgICAgICAg
Y2FzZXMuYXBwZW5kKCcgICAgZWxzZSBpZiAobWV0aG9kID09ICIlcyIpJyAlIGNvbW1hbmQuY29t
bWFuZF9uYW1lKQorICAgICAgICAgICAgY2FzZXMuYXBwZW5kKCcgICAgICAgICVzKGNhbGxJZCwg
Km1lc3NhZ2UuZ2V0KCkpOycgJSBjb21tYW5kLmNvbW1hbmRfbmFtZSkKKworICAgICAgICBzd2l0
Y2hfYXJncyA9IHsKKyAgICAgICAgICAgICdkb21haW5OYW1lJzogZG9tYWluLmRvbWFpbl9uYW1l
LAorICAgICAgICAgICAgJ2Rpc3BhdGNoQ2FzZXMnOiAiXG4iLmpvaW4oY2FzZXMpCisgICAgICAg
IH0KKworICAgICAgICByZXR1cm4gVGVtcGxhdGUoVGVtcGxhdGVzLkJhY2tlbmREaXNwYXRjaGVy
SW1wbGVtZW50YXRpb25TbWFsbFN3aXRjaCkuc3Vic3RpdHV0ZShOb25lLCAqKnN3aXRjaF9hcmdz
KQorCisgICAgZGVmIF9nZW5lcmF0ZV9sYXJnZV9kaXNwYXRjaGVyX3N3aXRjaF9pbXBsZW1lbnRh
dGlvbl9mb3JfZG9tYWluKHNlbGYsIGRvbWFpbik6CisgICAgICAgIGNhc2VzID0gW10KKyAgICAg
ICAgZm9yIGNvbW1hbmQgaW4gZG9tYWluLmNvbW1hbmRzOgorICAgICAgICAgICAgYXJncyA9IHsK
KyAgICAgICAgICAgICAgICAnZG9tYWluTmFtZSc6IGRvbWFpbi5kb21haW5fbmFtZSwKKyAgICAg
ICAgICAgICAgICAnY29tbWFuZE5hbWUnOiBjb21tYW5kLmNvbW1hbmRfbmFtZQorICAgICAgICAg
ICAgfQorICAgICAgICAgICAgY2FzZXMuYXBwZW5kKCcgICAgICAgICAgICB7ICIlKGNvbW1hbmRO
YW1lKXMiLCAmSW5zcGVjdG9yJShkb21haW5OYW1lKXNCYWNrZW5kRGlzcGF0Y2hlcjo6JShjb21t
YW5kTmFtZSlzIH0sJyAlIGFyZ3MpCisKKyAgICAgICAgc3dpdGNoX2FyZ3MgPSB7CisgICAgICAg
ICAgICAnZG9tYWluTmFtZSc6IGRvbWFpbi5kb21haW5fbmFtZSwKKyAgICAgICAgICAgICdkaXNw
YXRjaENhc2VzJzogIlxuIi5qb2luKGNhc2VzKQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJu
IFRlbXBsYXRlKFRlbXBsYXRlcy5CYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uTGFyZ2VT
d2l0Y2gpLnN1YnN0aXR1dGUoTm9uZSwgKipzd2l0Y2hfYXJncykKKworICAgIGRlZiBfZ2VuZXJh
dGVfYXN5bmNfZGlzcGF0Y2hlcl9jbGFzc19mb3JfZG9tYWluKHNlbGYsIGNvbW1hbmQsIGRvbWFp
bik6CisgICAgICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMgPSBbXQorICAgICAgICBmb3Jt
YWxfcGFyYW1ldGVycyA9IFtdCisKKyAgICAgICAgZm9yIHBhcmFtZXRlciBpbiBjb21tYW5kLnJl
dHVybl9wYXJhbWV0ZXJzOgorICAgICAgICAgICAgcGFyYW1fYXJncyA9IHsKKyAgICAgICAgICAg
ICAgICAnZnJhbWV3b3JrUHJlZml4Jzogc2VsZi5tb2RlbCgpLmZyYW1ld29yay5zZXR0aW5nKCdw
cmVmaXgnKSwKKyAgICAgICAgICAgICAgICAna2V5ZWRTZXRNZXRob2QnOiBHZW5lcmF0b3Iua2V5
ZWRfc2V0X21ldGhvZF9mb3JfdHlwZShwYXJhbWV0ZXIudHlwZSksCisgICAgICAgICAgICAgICAg
J3BhcmFtZXRlck5hbWUnOiBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUsCisgICAgICAgICAgICAg
ICAgJ3BhcmFtZXRlclR5cGUnOiBHZW5lcmF0b3IudHlwZV9zdHJpbmdfZm9yX3N0YWNrX2luX3Bh
cmFtZXRlcihwYXJhbWV0ZXIpLAorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3JtYWxf
cGFyYW1ldGVycy5hcHBlbmQoJyVzICVzJyAlIChHZW5lcmF0b3IudHlwZV9zdHJpbmdfZm9yX2Zv
cm1hbF9hc3luY19wYXJhbWV0ZXIocGFyYW1ldGVyKSwgcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1l
KSkKKworICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgorICAgICAgICAgICAg
ICAgIGlmIEdlbmVyYXRvci5zaG91bGRfdXNlX3dyYXBwZXJfZm9yX3JldHVybl90eXBlKHBhcmFt
ZXRlci50eXBlKToKKyAgICAgICAgICAgICAgICAgICAgb3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50
cy5hcHBlbmQoJyAgICBpZiAoJShwYXJhbWV0ZXJOYW1lKXMuaXNBc3NpZ25lZCgpKScgJSBwYXJh
bV9hcmdzKQorICAgICAgICAgICAgICAgICAgICBvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRzLmFw
cGVuZCgnICAgICAgICBqc29uTWVzc2FnZS0+JShrZXllZFNldE1ldGhvZClzKEFTQ0lJTGl0ZXJh
bCgiJShwYXJhbWV0ZXJOYW1lKXMiKSwgJShwYXJhbWV0ZXJOYW1lKXMuZ2V0VmFsdWUoKSk7JyAl
IHBhcmFtX2FyZ3MpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAg
b3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICBpZiAoJShwYXJhbWV0ZXJOYW1l
KXMpJyAlIHBhcmFtX2FyZ3MpCisgICAgICAgICAgICAgICAgICAgIG91dF9wYXJhbWV0ZXJfYXNz
aWdubWVudHMuYXBwZW5kKCcgICAgICAgIGpzb25NZXNzYWdlLT4lKGtleWVkU2V0TWV0aG9kKXMo
QVNDSUlMaXRlcmFsKCIlKHBhcmFtZXRlck5hbWUpcyIpLCAlKHBhcmFtZXRlck5hbWUpcyk7JyAl
IHBhcmFtX2FyZ3MpCisgICAgICAgICAgICBlbGlmIHBhcmFtZXRlci50eXBlLmlzX2VudW0oKToK
KyAgICAgICAgICAgICAgICBvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgIGpz
b25NZXNzYWdlLT4lKGtleWVkU2V0TWV0aG9kKXMoQVNDSUlMaXRlcmFsKCIlKHBhcmFtZXRlck5h
bWUpcyIpLCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpnZXQlKGZyYW1ld29ya1ByZWZpeClzRW51
bUNvbnN0YW50VmFsdWUoJShwYXJhbWV0ZXJOYW1lKXMpKTsnICUgcGFyYW1fYXJncykKKyAgICAg
ICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgb3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cy5h
cHBlbmQoJyAgICBqc29uTWVzc2FnZS0+JShrZXllZFNldE1ldGhvZClzKEFTQ0lJTGl0ZXJhbCgi
JShwYXJhbWV0ZXJOYW1lKXMiKSwgJShwYXJhbWV0ZXJOYW1lKXMpOycgJSBwYXJhbV9hcmdzKQor
CisgICAgICAgIGFzeW5jX2FyZ3MgPSB7CisgICAgICAgICAgICAnZG9tYWluTmFtZSc6IGRvbWFp
bi5kb21haW5fbmFtZSwKKyAgICAgICAgICAgICdjYWxsYmFja05hbWUnOiB1Y2ZpcnN0KGNvbW1h
bmQuY29tbWFuZF9uYW1lKSArICdDYWxsYmFjaycsCisgICAgICAgICAgICAnZm9ybWFsUGFyYW1l
dGVycyc6ICIsICIuam9pbihmb3JtYWxfcGFyYW1ldGVycyksCisgICAgICAgICAgICAnb3V0UGFy
YW1ldGVyQXNzaWdubWVudHMnOiAiXG4iLmpvaW4ob3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cykK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gVGVtcGxhdGUoVGVtcGxhdGVzLkJhY2tlbmREaXNw
YXRjaGVySW1wbGVtZW50YXRpb25Bc3luY0NvbW1hbmQpLnN1YnN0aXR1dGUoTm9uZSwgKiphc3lu
Y19hcmdzKQorCisgICAgZGVmIF9nZW5lcmF0ZV9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uX2Zv
cl9jb21tYW5kKHNlbGYsIGNvbW1hbmQsIGRvbWFpbik6CisgICAgICAgIGluX3BhcmFtZXRlcl9k
ZWNsYXJhdGlvbnMgPSBbXQorICAgICAgICBvdXRfcGFyYW1ldGVyX2RlY2xhcmF0aW9ucyA9IFtd
CisgICAgICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMgPSBbXQorICAgICAgICBtZXRob2Rf
cGFyYW1ldGVycyA9IFsnJmVycm9yJ10KKworICAgICAgICBmb3IgcGFyYW1ldGVyIGluIGNvbW1h
bmQuY2FsbF9wYXJhbWV0ZXJzOgorICAgICAgICAgICAgb3V0X3N1Y2Nlc3NfYXJndW1lbnQgPSAn
bnVsbHB0cicKKyAgICAgICAgICAgIGlmIHBhcmFtZXRlci5pc19vcHRpb25hbDoKKyAgICAgICAg
ICAgICAgICBvdXRfc3VjY2Vzc19hcmd1bWVudCA9ICcmJXNfdmFsdWVGb3VuZCcgJSBwYXJhbWV0
ZXIucGFyYW1ldGVyX25hbWUKKyAgICAgICAgICAgICAgICBpbl9wYXJhbWV0ZXJfZGVjbGFyYXRp
b25zLmFwcGVuZCgnICAgIGJvb2wgJXNfdmFsdWVGb3VuZCA9IGZhbHNlOycgJSBwYXJhbWV0ZXIu
cGFyYW1ldGVyX25hbWUpCisKKyAgICAgICAgICAgIHBhcmFtX2FyZ3MgPSB7CisgICAgICAgICAg
ICAgICAgJ3BhcmFtZXRlclR5cGUnOiBHZW5lcmF0b3IudHlwZV9zdHJpbmdfZm9yX3N0YWNrX2lu
X3BhcmFtZXRlcihwYXJhbWV0ZXIpLAorICAgICAgICAgICAgICAgICdwYXJhbWV0ZXJOYW1lJzog
cGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lLAorICAgICAgICAgICAgICAgICdrZXllZEdldE1ldGhv
ZCc6IEdlbmVyYXRvci5rZXllZF9nZXRfbWV0aG9kX2Zvcl90eXBlKHBhcmFtZXRlci50eXBlKSwK
KyAgICAgICAgICAgICAgICAnc3VjY2Vzc091dFBhcmFtJzogb3V0X3N1Y2Nlc3NfYXJndW1lbnQK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaW5fcGFyYW1ldGVyX2RlY2xhcmF0aW9ucy5h
cHBlbmQoJyAgICAlKHBhcmFtZXRlclR5cGUpcyBpbl8lKHBhcmFtZXRlck5hbWUpcyA9IEluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyOjolKGtleWVkR2V0TWV0aG9kKXMocGFyYW1zQ29udGFpbmVy
UHRyLCBBU0NJSUxpdGVyYWwoIiUocGFyYW1ldGVyTmFtZSlzIiksICUoc3VjY2Vzc091dFBhcmFt
KXMsIHByb3RvY29sRXJyb3JzUHRyKTsnICUgcGFyYW1fYXJncykKKworICAgICAgICAgICAgaWYg
cGFyYW1ldGVyLmlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAgIG1ldGhvZF9wYXJhbWV0ZXJz
LmFwcGVuZCgnJShwYXJhbWV0ZXJOYW1lKXNfdmFsdWVGb3VuZCA/ICZpbl8lKHBhcmFtZXRlck5h
bWUpcyA6IG51bGxwdHInICUgcGFyYW1fYXJncykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAg
ICAgICAgICAgbWV0aG9kX3BhcmFtZXRlcnMuYXBwZW5kKCdpbl8nICsgcGFyYW1ldGVyLnBhcmFt
ZXRlcl9uYW1lKQorCisgICAgICAgIGlmIGNvbW1hbmQuaXNfYXN5bmM6CisgICAgICAgICAgICBh
c3luY19hcmdzID0geworICAgICAgICAgICAgICAgICdkb21haW5OYW1lJzogZG9tYWluLmRvbWFp
bl9uYW1lLAorICAgICAgICAgICAgICAgICdjYWxsYmFja05hbWUnOiB1Y2ZpcnN0KGNvbW1hbmQu
Y29tbWFuZF9uYW1lKSArICdDYWxsYmFjaycKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
b3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICAgICAgY2FsbGJhY2stPmRpc2Fi
bGUoKTsnKQorICAgICAgICAgICAgb3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAg
ICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElkLCBJ
bnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3Ip
OycpCisgICAgICAgICAgICBvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgICAg
ICByZXR1cm47JykKKyAgICAgICAgICAgIG1ldGhvZF9wYXJhbWV0ZXJzLmFwcGVuZCgnY2FsbGJh
Y2snKQorCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmb3IgcGFyYW1ldGVyIGluIGNvbW1h
bmQucmV0dXJuX3BhcmFtZXRlcnM6CisgICAgICAgICAgICAgICAgcGFyYW1fYXJncyA9IHsKKyAg
ICAgICAgICAgICAgICAgICAgJ3BhcmFtZXRlclR5cGUnOiBHZW5lcmF0b3IudHlwZV9zdHJpbmdf
Zm9yX3N0YWNrX291dF9wYXJhbWV0ZXIocGFyYW1ldGVyKSwKKyAgICAgICAgICAgICAgICAgICAg
J3BhcmFtZXRlck5hbWUnOiBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUsCisgICAgICAgICAgICAg
ICAgICAgICdrZXllZFNldE1ldGhvZCc6IEdlbmVyYXRvci5rZXllZF9zZXRfbWV0aG9kX2Zvcl90
eXBlKHBhcmFtZXRlci50eXBlKSwKKyAgICAgICAgICAgICAgICAgICAgJ2ZyYW1ld29ya1ByZWZp
eCc6IHNlbGYubW9kZWwoKS5mcmFtZXdvcmsuc2V0dGluZygncHJlZml4JykKKyAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICBvdXRfcGFyYW1ldGVyX2RlY2xhcmF0aW9ucy5hcHBl
bmQoJyAgICAlKHBhcmFtZXRlclR5cGUpcyBvdXRfJShwYXJhbWV0ZXJOYW1lKXM7JyAlIHBhcmFt
X2FyZ3MpCisgICAgICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgorICAgICAg
ICAgICAgICAgICAgICBpZiBHZW5lcmF0b3Iuc2hvdWxkX3VzZV93cmFwcGVyX2Zvcl9yZXR1cm5f
dHlwZShwYXJhbWV0ZXIudHlwZSk6CisgICAgICAgICAgICAgICAgICAgICAgICBvdXRfcGFyYW1l
dGVyX2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgICAgICBpZiAob3V0XyUocGFyYW1ldGVyTmFtZSlz
LmlzQXNzaWduZWQoKSknICUgcGFyYW1fYXJncykKKyAgICAgICAgICAgICAgICAgICAgICAgIG91
dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAgICAgICAgICByZXN1bHQtPiUoa2V5
ZWRTZXRNZXRob2QpcyhBU0NJSUxpdGVyYWwoIiUocGFyYW1ldGVyTmFtZSlzIiksIG91dF8lKHBh
cmFtZXRlck5hbWUpcy5nZXRWYWx1ZSgpKTsnICUgcGFyYW1fYXJncykKKyAgICAgICAgICAgICAg
ICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdu
bWVudHMuYXBwZW5kKCcgICAgICAgIGlmIChvdXRfJShwYXJhbWV0ZXJOYW1lKXMpJyAlIHBhcmFt
X2FyZ3MpCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRz
LmFwcGVuZCgnICAgICAgICAgICAgcmVzdWx0LT4lKGtleWVkU2V0TWV0aG9kKXMoQVNDSUlMaXRl
cmFsKCIlKHBhcmFtZXRlck5hbWUpcyIpLCBvdXRfJShwYXJhbWV0ZXJOYW1lKXMpOycgJSBwYXJh
bV9hcmdzKQorICAgICAgICAgICAgICAgIGVsaWYgcGFyYW1ldGVyLnR5cGUuaXNfZW51bSgpOgor
ICAgICAgICAgICAgICAgICAgICBvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAg
ICAgICByZXN1bHQtPiUoa2V5ZWRTZXRNZXRob2QpcyhBU0NJSUxpdGVyYWwoIiUocGFyYW1ldGVy
TmFtZSlzIiksIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OmdldCUoZnJhbWV3b3JrUHJlZml4KXNF
bnVtQ29uc3RhbnRWYWx1ZShvdXRfJShwYXJhbWV0ZXJOYW1lKXMpKTsnICUgcGFyYW1fYXJncykK
KyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBvdXRfcGFyYW1ldGVy
X2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgICAgICByZXN1bHQtPiUoa2V5ZWRTZXRNZXRob2QpcyhB
U0NJSUxpdGVyYWwoIiUocGFyYW1ldGVyTmFtZSlzIiksIG91dF8lKHBhcmFtZXRlck5hbWUpcyk7
JyAlIHBhcmFtX2FyZ3MpCisKKyAgICAgICAgICAgICAgICBpZiBHZW5lcmF0b3Iuc2hvdWxkX3Bh
c3NfYnlfY29weV9mb3JfcmV0dXJuX3R5cGUocGFyYW1ldGVyLnR5cGUpOgorICAgICAgICAgICAg
ICAgICAgICBtZXRob2RfcGFyYW1ldGVycy5hcHBlbmQoJ291dF8nICsgcGFyYW1ldGVyLnBhcmFt
ZXRlcl9uYW1lKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIG1l
dGhvZF9wYXJhbWV0ZXJzLmFwcGVuZCgnJm91dF8nICsgcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1l
KQorCisgICAgICAgIGNvbW1hbmRfYXJncyA9IHsKKyAgICAgICAgICAgICdkb21haW5OYW1lJzog
ZG9tYWluLmRvbWFpbl9uYW1lLAorICAgICAgICAgICAgJ2NhbGxiYWNrTmFtZSc6ICclc0NhbGxi
YWNrJyAlIHVjZmlyc3QoY29tbWFuZC5jb21tYW5kX25hbWUpLAorICAgICAgICAgICAgJ2NvbW1h
bmROYW1lJzogY29tbWFuZC5jb21tYW5kX25hbWUsCisgICAgICAgICAgICAnaW5QYXJhbWV0ZXJE
ZWNsYXJhdGlvbnMnOiAiXG4iLmpvaW4oaW5fcGFyYW1ldGVyX2RlY2xhcmF0aW9ucyksCisgICAg
ICAgICAgICAnaW52b2NhdGlvblBhcmFtZXRlcnMnOiAiLCAiLmpvaW4obWV0aG9kX3BhcmFtZXRl
cnMpCisgICAgICAgIH0KKworICAgICAgICBsaW5lcyA9IFtdCisgICAgICAgIGlmIGxlbihjb21t
YW5kLmNhbGxfcGFyYW1ldGVycykgPT0gMDoKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgndm9p
ZCBJbnNwZWN0b3IlKGRvbWFpbk5hbWUpc0JhY2tlbmREaXNwYXRjaGVyOjolKGNvbW1hbmROYW1l
KXMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYpJyAlIGNvbW1hbmRfYXJncykK
KyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgndm9pZCBJbnNwZWN0b3Il
KGRvbWFpbk5hbWUpc0JhY2tlbmREaXNwYXRjaGVyOjolKGNvbW1hbmROYW1lKXMobG9uZyBjYWxs
SWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSknICUgY29tbWFuZF9hcmdzKQorICAg
ICAgICBsaW5lcy5hcHBlbmQoJ3snKQorCisgICAgICAgIGlmIGxlbihjb21tYW5kLmNhbGxfcGFy
YW1ldGVycykgPiAwOgorICAgICAgICAgICAgbGluZXMuYXBwZW5kKFRlbXBsYXRlKFRlbXBsYXRl
cy5CYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uUHJlcGFyZUNvbW1hbmRBcmd1bWVudHMp
LnN1YnN0aXR1dGUoTm9uZSwgKipjb21tYW5kX2FyZ3MpKQorCisgICAgICAgIGxpbmVzLmFwcGVu
ZCgnICAgIEVycm9yU3RyaW5nIGVycm9yOycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7
JykKKyAgICAgICAgaWYgY29tbWFuZC5pc19hc3luYzoKKyAgICAgICAgICAgIGxpbmVzLmFwcGVu
ZCgnICAgIFJlZlB0cjxJbnNwZWN0b3IlKGRvbWFpbk5hbWUpc0JhY2tlbmREaXNwYXRjaGVySGFu
ZGxlcjo6JShjYWxsYmFja05hbWUpcz4gY2FsbGJhY2sgPSBhZG9wdFJlZihuZXcgSW5zcGVjdG9y
JShkb21haW5OYW1lKXNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OiUoY2FsbGJhY2tOYW1lKXMo
bV9iYWNrZW5kRGlzcGF0Y2hlcixjYWxsSWQpKTsnICUgY29tbWFuZF9hcmdzKQorICAgICAgICBp
ZiBsZW4oY29tbWFuZC5yZXR1cm5fcGFyYW1ldGVycykgPiAwOgorICAgICAgICAgICAgbGluZXMu
ZXh0ZW5kKG91dF9wYXJhbWV0ZXJfZGVjbGFyYXRpb25zKQorICAgICAgICBsaW5lcy5hcHBlbmQo
JyAgICBtX2FnZW50LT4lKGNvbW1hbmROYW1lKXMoJShpbnZvY2F0aW9uUGFyYW1ldGVycylzKTsn
ICUgY29tbWFuZF9hcmdzKQorICAgICAgICBsaW5lcy5hcHBlbmQoJycpCisgICAgICAgIGlmIGNv
bW1hbmQuaXNfYXN5bmM6CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBpZiAoZXJyb3Iu
bGVuZ3RoKCkpIHsnKQorICAgICAgICAgICAgbGluZXMuZXh0ZW5kKG91dF9wYXJhbWV0ZXJfYXNz
aWdubWVudHMpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICB9JykKKyAgICAgICAgZWxp
ZiBsZW4oY29tbWFuZC5yZXR1cm5fcGFyYW1ldGVycykgPiAxOgorICAgICAgICAgICAgbGluZXMu
YXBwZW5kKCcgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkgeycpCisgICAgICAgICAgICBsaW5lcy5l
eHRlbmQob3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cykKKyAgICAgICAgICAgIGxpbmVzLmFwcGVu
ZCgnICAgIH0nKQorICAgICAgICBlbGlmIGxlbihjb21tYW5kLnJldHVybl9wYXJhbWV0ZXJzKSA9
PSAxOgorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkn
KQorICAgICAgICAgICAgbGluZXMuZXh0ZW5kKG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMpCisg
ICAgICAgICAgICBsaW5lcy5hcHBlbmQoJycpCisKKyAgICAgICAgaWYgbm90IGNvbW1hbmQuaXNf
YXN5bmM6CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBtX2JhY2tlbmREaXNwYXRjaGVy
LT5zZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBlcnJvcik7JykKKyAgICAg
ICAgbGluZXMuYXBwZW5kKCd9JykKKyAgICAgICAgcmV0dXJuICJcbiIuam9pbihsaW5lcykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2Vu
L2dlbmVyYXRlX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5IGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfZnJvbnRlbmRfZGlzcGF0
Y2hlcl9oZWFkZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2M2NjllNjIzMGY2OTE1Nzc2ZDMxY2Q0MjUwYWIx
OTkwOWQ2ZGFlOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVy
LnB5CkBAIC0wLDAgKzEsMTE4IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJp
Z2h0IChjKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0
IChjKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyMgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKworaW1wb3J0IGxvZ2dp
bmcKK2ltcG9ydCByZQoraW1wb3J0IHN0cmluZworZnJvbSBzdHJpbmcgaW1wb3J0IFRlbXBsYXRl
CisKK2Zyb20gbW9kZWxzIGltcG9ydCBFbnVtVHlwZQorZnJvbSBnZW5lcmF0b3IgaW1wb3J0IEdl
bmVyYXRvciwgdWNmaXJzdAorZnJvbSBnZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBHZW5lcmF0
b3JUZW1wbGF0ZXMgYXMgVGVtcGxhdGVzCisKK2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9i
YWwnKQorCisKK2NsYXNzIEZyb250ZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvcihHZW5lcmF0
b3IpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpOgorICAg
ICAgICBHZW5lcmF0b3IuX19pbml0X18oc2VsZiwgbW9kZWwsIGlucHV0X2ZpbGVwYXRoKQorCisg
ICAgZGVmIG91dHB1dF9maWxlbmFtZShzZWxmKToKKyAgICAgICAgcmV0dXJuICJJbnNwZWN0b3Il
c0Zyb250ZW5kRGlzcGF0Y2hlcnMuaCIgJSBzZWxmLm1vZGVsKCkuZnJhbWV3b3JrLnNldHRpbmco
J3ByZWZpeCcpCisKKyAgICBkZWYgZG9tYWluc190b19nZW5lcmF0ZShzZWxmKToKKyAgICAgICAg
cmV0dXJuIGZpbHRlcihsYW1iZGEgZG9tYWluOiBsZW4oZG9tYWluLmV2ZW50cykgPiAwLCBHZW5l
cmF0b3IuZG9tYWluc190b19nZW5lcmF0ZShzZWxmKSkKKworICAgIGRlZiBnZW5lcmF0ZV9vdXRw
dXQoc2VsZik6CisgICAgICAgIGhlYWRlcnMgPSBbCisgICAgICAgICAgICAnIkluc3BlY3RvciVz
VHlwZUJ1aWxkZXJzLmgiJyAlIHNlbGYubW9kZWwoKS5mcmFtZXdvcmsuc2V0dGluZygncHJlZml4
JyksCisgICAgICAgICAgICAnPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4n
LAorICAgICAgICAgICAgJzxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+JywKKyAgICAgICAg
ICAgICc8d3RmL1Bhc3NSZWZQdHIuaD4nLAorICAgICAgICAgICAgJzx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4nXQorCisgICAgICAgIGhlYWRlcl9hcmdzID0geworICAgICAgICAgICAgJ2hlYWRlckd1
YXJkU3RyaW5nJzogcmUuc3ViKCdcVysnLCAnXycsIHNlbGYub3V0cHV0X2ZpbGVuYW1lKCkpLAor
ICAgICAgICAgICAgJ2luY2x1ZGVzJzogJ1xuJy5qb2luKFsnI2luY2x1ZGUgJyArIGhlYWRlciBm
b3IgaGVhZGVyIGluIGhlYWRlcnNdKSwKKyAgICAgICAgICAgICd0eXBlZGVmcyc6ICcnLAorICAg
ICAgICAgICAgJ2lucHV0RmlsZW5hbWUnOiBzZWxmLl9pbnB1dF9maWxlcGF0aAorICAgICAgICB9
CisKKyAgICAgICAgc2VjdGlvbnMgPSBbXQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5n
ZW5lcmF0ZV9saWNlbnNlKCkpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShUZW1w
bGF0ZXMuQ3BwSGVhZGVyUHJlbHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkK
KyAgICAgICAgc2VjdGlvbnMuZXh0ZW5kKG1hcChzZWxmLl9nZW5lcmF0ZV9kaXNwYXRjaGVyX2Rl
Y2xhcmF0aW9uc19mb3JfZG9tYWluLCBzZWxmLmRvbWFpbnNfdG9fZ2VuZXJhdGUoKSkpCisgICAg
ICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMuQ3BwSGVhZGVyUG9zdGx1ZGUp
LnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCisgICAgICAgIHJldHVybiAiXG5cbiIu
am9pbihzZWN0aW9ucykKKworICAgICMgUHJpdmF0ZSBtZXRob2RzLgorCisgICAgZGVmIF9nZW5l
cmF0ZV9hbm9ueW1vdXNfZW51bV9mb3JfcGFyYW1ldGVyKHNlbGYsIHBhcmFtZXRlciwgZXZlbnQp
OgorICAgICAgICBlbnVtX2FyZ3MgPSB7CisgICAgICAgICAgICAncGFyYW1ldGVyTmFtZSc6IHBh
cmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwKKyAgICAgICAgICAgICdldmVudE5hbWUnOiBldmVudC5l
dmVudF9uYW1lCisgICAgICAgIH0KKworICAgICAgICBsaW5lcyA9IFtdCisgICAgICAgIGxpbmVz
LmFwcGVuZCgnICAgICAgICAvLyBOYW1lZCBhZnRlciBwYXJhbWV0ZXIgXCclKHBhcmFtZXRlck5h
bWUpc1wnIHdoaWxlIGdlbmVyYXRpbmcgY29tbWFuZC9ldmVudCAlKGV2ZW50TmFtZSlzLicgJSBl
bnVtX2FyZ3MpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBlbnVtIGNsYXNzICVzIHsn
ICUgdWNmaXJzdChwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpKQorICAgICAgICBmb3IgZW51bV92
YWx1ZSBpbiBwYXJhbWV0ZXIudHlwZS5lbnVtX3ZhbHVlcygpOgorICAgICAgICAgICAgbGluZXMu
YXBwZW5kKCcgICAgICAgICAgICAlcyA9ICVkLCcgJSAoR2VuZXJhdG9yLnN0eWxpemVkX25hbWVf
Zm9yX2VudW1fdmFsdWUoZW51bV92YWx1ZSksIHNlbGYuZW5jb2RpbmdfZm9yX2VudW1fdmFsdWUo
ZW51bV92YWx1ZSkpKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgfTsgLy8gZW51bSBj
bGFzcyAlcycgJSB1Y2ZpcnN0KHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkpCisgICAgICAgIHJl
dHVybiAiXG4iLmpvaW4obGluZXMpCisKKyAgICBkZWYgX2dlbmVyYXRlX2Rpc3BhdGNoZXJfZGVj
bGFyYXRpb25zX2Zvcl9kb21haW4oc2VsZiwgZG9tYWluKToKKyAgICAgICAgY2xhc3NDb21wb25l
bnRzID0gWydjbGFzcyddCisgICAgICAgIGV4cG9ydE1hY3JvID0gc2VsZi5tb2RlbCgpLmZyYW1l
d29yay5zZXR0aW5nKCdleHBvcnRfbWFjcm8nLCBOb25lKQorICAgICAgICBpZiBleHBvcnRNYWNy
byBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGNsYXNzQ29tcG9uZW50cy5hcHBlbmQoZXhwb3J0
TWFjcm8pCisKKyAgICAgICAgdXNlZF9lbnVtX25hbWVzID0gc2V0KFtdKQorCisgICAgICAgIGV2
ZW50X2RlY2xhcmF0aW9ucyA9IFtdCisgICAgICAgIGZvciBldmVudCBpbiBkb21haW4uZXZlbnRz
OgorICAgICAgICAgICAgZXZlbnRfZGVjbGFyYXRpb25zLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9k
aXNwYXRjaGVyX2RlY2xhcmF0aW9uX2Zvcl9ldmVudChldmVudCwgZG9tYWluLCB1c2VkX2VudW1f
bmFtZXMpKQorCisgICAgICAgIGhhbmRsZXJfYXJncyA9IHsKKyAgICAgICAgICAgICdjbGFzc0Fu
ZEV4cG9ydE1hY3JvJzogIiAiLmpvaW4oY2xhc3NDb21wb25lbnRzKSwKKyAgICAgICAgICAgICdk
b21haW5OYW1lJzogZG9tYWluLmRvbWFpbl9uYW1lLAorICAgICAgICAgICAgJ2V2ZW50RGVjbGFy
YXRpb25zJzogIlxuIi5qb2luKGV2ZW50X2RlY2xhcmF0aW9ucykKKyAgICAgICAgfQorCisgICAg
ICAgIHJldHVybiBHZW5lcmF0b3Iud3JhcF93aXRoX2d1YXJkX2Zvcl9kb21haW4oZG9tYWluLCBU
ZW1wbGF0ZShUZW1wbGF0ZXMuRnJvbnRlbmREaXNwYXRjaGVyRG9tYWluRGlzcGF0Y2hlckRlY2xh
cmF0aW9uKS5zdWJzdGl0dXRlKE5vbmUsICoqaGFuZGxlcl9hcmdzKSkKKworICAgIGRlZiBfZ2Vu
ZXJhdGVfZGlzcGF0Y2hlcl9kZWNsYXJhdGlvbl9mb3JfZXZlbnQoc2VsZiwgZXZlbnQsIGRvbWFp
biwgdXNlZF9lbnVtX25hbWVzKToKKyAgICAgICAgZm9ybWFsX3BhcmFtZXRlcnMgPSBbXQorICAg
ICAgICBsaW5lcyA9IFtdCisgICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gZXZlbnQuZXZlbnRfcGFy
YW1ldGVyczoKKyAgICAgICAgICAgIGZvcm1hbF9wYXJhbWV0ZXJzLmFwcGVuZCgnJXMgJXMnICUg
KEdlbmVyYXRvci50eXBlX3N0cmluZ19mb3JfY2hlY2tlZF9mb3JtYWxfZXZlbnRfcGFyYW1ldGVy
KHBhcmFtZXRlciksIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkpCisgICAgICAgICAgICBpZiBp
c2luc3RhbmNlKHBhcmFtZXRlci50eXBlLCBFbnVtVHlwZSkgYW5kIHBhcmFtZXRlci5wYXJhbWV0
ZXJfbmFtZSBub3QgaW4gdXNlZF9lbnVtX25hbWVzOgorICAgICAgICAgICAgICAgIGxpbmVzLmFw
cGVuZChzZWxmLl9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9mb3JfcGFyYW1ldGVyKHBhcmFtZXRl
ciwgZXZlbnQpKQorICAgICAgICAgICAgICAgIHVzZWRfZW51bV9uYW1lcy5hZGQocGFyYW1ldGVy
LnBhcmFtZXRlcl9uYW1lKQorCisgICAgICAgIGxpbmVzLmFwcGVuZCgiICAgIHZvaWQgJXMoJXMp
OyIgJSAoZXZlbnQuZXZlbnRfbmFtZSwgIiwgIi5qb2luKGZvcm1hbF9wYXJhbWV0ZXJzKSkpCisg
ICAgICAgIHJldHVybiAiXG4iLmpvaW4obGluZXMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9mcm9udGVuZF9kaXNw
YXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRh
dGlvbi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi42NGU1YTY4M2ZiMjFjYTkwYWYzMzQ1NDJkZGQ2YmIwNzZmY2Y2
NTc0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlv
bi5weQpAQCAtMCwwICsxLDEyMiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHly
aWdodCAoYykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdo
dCAoYykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisjIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisKK2ltcG9ydCBsb2dn
aW5nCitpbXBvcnQgc3RyaW5nCitmcm9tIHN0cmluZyBpbXBvcnQgVGVtcGxhdGUKKworZnJvbSBn
ZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvciwgdWNmaXJzdAorZnJvbSBnZW5lcmF0b3JfdGVtcGxh
dGVzIGltcG9ydCBHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgVGVtcGxhdGVzCitmcm9tIG1vZGVscyBp
bXBvcnQgT2JqZWN0VHlwZSwgQXJyYXlUeXBlCisKK2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdn
bG9iYWwnKQorCisKK2NsYXNzIEZyb250ZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJh
dG9yKEdlbmVyYXRvcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9maWxl
cGF0aCk6CisgICAgICAgIEdlbmVyYXRvci5fX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmls
ZXBhdGgpCisKKyAgICBkZWYgb3V0cHV0X2ZpbGVuYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4g
Ikluc3BlY3RvciVzRnJvbnRlbmREaXNwYXRjaGVycy5jcHAiICUgc2VsZi5tb2RlbCgpLmZyYW1l
d29yay5zZXR0aW5nKCdwcmVmaXgnKQorCisgICAgZGVmIGRvbWFpbnNfdG9fZ2VuZXJhdGUoc2Vs
Zik6CisgICAgICAgIHJldHVybiBmaWx0ZXIobGFtYmRhIGRvbWFpbjogbGVuKGRvbWFpbi5ldmVu
dHMpID4gMCwgR2VuZXJhdG9yLmRvbWFpbnNfdG9fZ2VuZXJhdGUoc2VsZikpCisKKyAgICBkZWYg
Z2VuZXJhdGVfb3V0cHV0KHNlbGYpOgorICAgICAgICBzZWNvbmRhcnlfaGVhZGVycyA9IFsnPHd0
Zi90ZXh0L0NTdHJpbmcuaD4nXQorCisgICAgICAgIGhlYWRlcl9hcmdzID0geworICAgICAgICAg
ICAgJ3ByaW1hcnlJbmNsdWRlJzogJyJJbnNwZWN0b3Ilc0Zyb250ZW5kRGlzcGF0Y2hlcnMuaCIn
ICUgc2VsZi5tb2RlbCgpLmZyYW1ld29yay5zZXR0aW5nKCdwcmVmaXgnKSwKKyAgICAgICAgICAg
ICdzZWNvbmRhcnlJbmNsdWRlcyc6ICJcbiIuam9pbihbJyNpbmNsdWRlICVzJyAlIGhlYWRlciBm
b3IgaGVhZGVyIGluIHNlY29uZGFyeV9oZWFkZXJzXSksCisgICAgICAgICAgICAnaW5wdXRGaWxl
bmFtZSc6IHNlbGYuX2lucHV0X2ZpbGVwYXRoCisgICAgICAgIH0KKworICAgICAgICBzZWN0aW9u
cyA9IFtdCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLmdlbmVyYXRlX2xpY2Vuc2UoKSkK
KyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKFRlbXBsYXRlcy5DcHBJbXBsZW1lbnRh
dGlvblByZWx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCisgICAgICAgIHNl
Y3Rpb25zLmV4dGVuZChtYXAoc2VsZi5fZ2VuZXJhdGVfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlv
bnNfZm9yX2RvbWFpbiwgc2VsZi5kb21haW5zX3RvX2dlbmVyYXRlKCkpKQorICAgICAgICBzZWN0
aW9ucy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVzLkNwcEltcGxlbWVudGF0aW9uUG9zdGx1ZGUp
LnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCisgICAgICAgIHJldHVybiAiXG5cbiIu
am9pbihzZWN0aW9ucykKKworICAgICMgUHJpdmF0ZSBtZXRob2RzLgorCisgICAgZGVmIF9nZW5l
cmF0ZV9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uc19mb3JfZG9tYWluKHNlbGYsIGRvbWFpbik6
CisgICAgICAgIGltcGxlbWVudGF0aW9ucyA9IFtdCisgICAgICAgIGZvciBldmVudCBpbiBkb21h
aW4uZXZlbnRzOgorICAgICAgICAgICAgaW1wbGVtZW50YXRpb25zLmFwcGVuZChzZWxmLl9nZW5l
cmF0ZV9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uX2Zvcl9ldmVudChldmVudCwgZG9tYWluKSkK
KworICAgICAgICByZXR1cm4gR2VuZXJhdG9yLndyYXBfd2l0aF9ndWFyZF9mb3JfZG9tYWluKGRv
bWFpbiwgIlxuXG4iLmpvaW4oaW1wbGVtZW50YXRpb25zKSkKKworICAgIGRlZiBfZ2VuZXJhdGVf
ZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbl9mb3JfZXZlbnQoc2VsZiwgZXZlbnQsIGRvbWFpbik6
CisgICAgICAgIGxpbmVzID0gW10KKyAgICAgICAgcGFyYW1ldGVyX2Fzc2lnbm1lbnRzID0gW10K
KyAgICAgICAgZm9ybWFsX3BhcmFtZXRlcnMgPSBbXQorCisgICAgICAgIGZvciBwYXJhbWV0ZXIg
aW4gZXZlbnQuZXZlbnRfcGFyYW1ldGVyczoKKworICAgICAgICAgICAgcGFyYW1ldGVyX3ZhbHVl
ID0gcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lCisgICAgICAgICAgICBpZiBwYXJhbWV0ZXIuaXNf
b3B0aW9uYWwgYW5kIG5vdCBHZW5lcmF0b3Iuc2hvdWxkX3Bhc3NfYnlfY29weV9mb3JfcmV0dXJu
X3R5cGUocGFyYW1ldGVyLnR5cGUpOgorICAgICAgICAgICAgICAgIHBhcmFtZXRlcl92YWx1ZSA9
ICcqJyArIHBhcmFtZXRlcl92YWx1ZQorICAgICAgICAgICAgaWYgcGFyYW1ldGVyLnR5cGUuaXNf
ZW51bSgpOgorICAgICAgICAgICAgICAgIGZyYW1ld29ya19wcmVmaXggPSBzZWxmLm1vZGVsKCku
ZnJhbWV3b3JrLnNldHRpbmcoJ3ByZWZpeCcpCisgICAgICAgICAgICAgICAgcGFyYW1ldGVyX3Zh
bHVlID0gJ0luc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OmdldCVzRW51bUNvbnN0YW50VmFsdWUoJXMp
JyAlIChmcmFtZXdvcmtfcHJlZml4LCBwYXJhbWV0ZXJfdmFsdWUpCisKKyAgICAgICAgICAgIHBh
cmFtZXRlcl9hcmdzID0geworICAgICAgICAgICAgICAgICdwYXJhbWV0ZXJUeXBlJzogR2VuZXJh
dG9yLnR5cGVfc3RyaW5nX2Zvcl9zdGFja19vdXRfcGFyYW1ldGVyKHBhcmFtZXRlciksCisgICAg
ICAgICAgICAgICAgJ3BhcmFtZXRlck5hbWUnOiBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUsCisg
ICAgICAgICAgICAgICAgJ3BhcmFtZXRlclZhbHVlJzogcGFyYW1ldGVyX3ZhbHVlLAorICAgICAg
ICAgICAgICAgICdrZXllZFNldE1ldGhvZCc6IEdlbmVyYXRvci5rZXllZF9zZXRfbWV0aG9kX2Zv
cl90eXBlKHBhcmFtZXRlci50eXBlKSwKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYg
cGFyYW1ldGVyLmlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAgIHBhcmFtZXRlcl9hc3NpZ25t
ZW50cy5hcHBlbmQoJyAgICBpZiAoJShwYXJhbWV0ZXJOYW1lKXMpJyAlIHBhcmFtZXRlcl9hcmdz
KQorICAgICAgICAgICAgICAgIHBhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICAgICAg
cGFyYW1zT2JqZWN0LT4lKGtleWVkU2V0TWV0aG9kKXMoQVNDSUlMaXRlcmFsKCIlKHBhcmFtZXRl
ck5hbWUpcyIpLCAlKHBhcmFtZXRlclZhbHVlKXMpOycgJSBwYXJhbWV0ZXJfYXJncykKKyAgICAg
ICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcGFyYW1ldGVyX2Fzc2lnbm1lbnRzLmFwcGVu
ZCgnICAgIHBhcmFtc09iamVjdC0+JShrZXllZFNldE1ldGhvZClzKEFTQ0lJTGl0ZXJhbCgiJShw
YXJhbWV0ZXJOYW1lKXMiKSwgJShwYXJhbWV0ZXJWYWx1ZSlzKTsnICUgcGFyYW1ldGVyX2FyZ3Mp
CisKKyAgICAgICAgICAgIGZvcm1hbF9wYXJhbWV0ZXJzLmFwcGVuZCgnJXMgJXMnICUgKEdlbmVy
YXRvci50eXBlX3N0cmluZ19mb3JfY2hlY2tlZF9mb3JtYWxfZXZlbnRfcGFyYW1ldGVyKHBhcmFt
ZXRlciksIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkpCisKKyAgICAgICAgZXZlbnRfYXJncyA9
IHsKKyAgICAgICAgICAgICdkb21haW5OYW1lJzogZG9tYWluLmRvbWFpbl9uYW1lLAorICAgICAg
ICAgICAgJ2V2ZW50TmFtZSc6IGV2ZW50LmV2ZW50X25hbWUsCisgICAgICAgICAgICAnZm9ybWFs
UGFyYW1ldGVycyc6ICIsICIuam9pbihmb3JtYWxfcGFyYW1ldGVycykKKyAgICAgICAgfQorCisg
ICAgICAgIGxpbmVzLmFwcGVuZCgndm9pZCBJbnNwZWN0b3IlKGRvbWFpbk5hbWUpc0Zyb250ZW5k
RGlzcGF0Y2hlcjo6JShldmVudE5hbWUpcyglKGZvcm1hbFBhcmFtZXRlcnMpcyknICUgZXZlbnRf
YXJncykKKyAgICAgICAgbGluZXMuYXBwZW5kKCd7JykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcg
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4ganNvbk1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6
OmNyZWF0ZSgpOycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGpzb25NZXNzYWdlLT5zZXRT
dHJpbmcoQVNDSUlMaXRlcmFsKCJtZXRob2QiKSwgQVNDSUlMaXRlcmFsKCIlKGRvbWFpbk5hbWUp
cy4lKGV2ZW50TmFtZSlzIikpOycgJSBldmVudF9hcmdzKQorCisgICAgICAgIGlmIGxlbihwYXJh
bWV0ZXJfYXNzaWdubWVudHMpID4gMDoKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3Jl
YXRlKCk7JykKKyAgICAgICAgICAgIGxpbmVzLmV4dGVuZChwYXJhbWV0ZXJfYXNzaWdubWVudHMp
CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0KEFT
Q0lJTGl0ZXJhbCgicGFyYW1zIiksIHBhcmFtc09iamVjdCk7JykKKworICAgICAgICBsaW5lcy5h
cHBlbmQoJycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIG1faW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygp
KTsnKQorICAgICAgICBsaW5lcy5hcHBlbmQoJ30nKQorICAgICAgICByZXR1cm4gIlxuIi5qb2lu
KGxpbmVzKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2NvZGVnZW4vZ2VuZXJhdGVfdHlwZV9idWlsZGVyX2hlYWRlci5weSBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX3R5cGVfYnVpbGRl
cl9oZWFkZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzMwOTVkNGI2NjAxYmRkMTA0M2I0NmNhY2Q1ZWY0ZjYw
MWUxNGZhNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX3R5cGVfYnVpbGRlcl9oZWFkZXIucHkKQEAgLTAs
MCArMSwzNDUgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKGMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMg
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
IyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisjIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworCitpbXBvcnQgbG9nZ2luZworaW1wb3J0
IHJlCitpbXBvcnQgc3RyaW5nCitmcm9tIHN0cmluZyBpbXBvcnQgVGVtcGxhdGUKKworZnJvbSBn
ZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvciwgdWNmaXJzdAorZnJvbSBnZW5lcmF0b3JfdGVtcGxh
dGVzIGltcG9ydCBHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgVGVtcGxhdGVzCitmcm9tIG1vZGVscyBp
bXBvcnQgRW51bVR5cGUsIE9iamVjdFR5cGUsIFByaW1pdGl2ZVR5cGUsIEFsaWFzZWRUeXBlLCBB
cnJheVR5cGUsIEZyYW1ld29ya3MKKworbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2JhbCcp
CisKKworY2xhc3MgVHlwZUJ1aWxkZXJIZWFkZXJHZW5lcmF0b3IoR2VuZXJhdG9yKToKKyAgICBk
ZWYgX19pbml0X18oc2VsZiwgbW9kZWwsIGlucHV0X2ZpbGVwYXRoKToKKyAgICAgICAgR2VuZXJh
dG9yLl9faW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0aCkKKworICAgIGRlZiBvdXRw
dXRfZmlsZW5hbWUoc2VsZik6CisgICAgICAgIHJldHVybiAiSW5zcGVjdG9yJXNUeXBlQnVpbGRl
cnMuaCIgJSBzZWxmLm1vZGVsKCkuZnJhbWV3b3JrLnNldHRpbmcoJ3ByZWZpeCcpCisKKyAgICBk
ZWYgZ2VuZXJhdGVfb3V0cHV0KHNlbGYpOgorICAgICAgICBkb21haW5zID0gc2VsZi5kb21haW5z
X3RvX2dlbmVyYXRlKCkKKyAgICAgICAgc2VsZi5jYWxjdWxhdGVfdHlwZXNfcmVxdWlyaW5nX3No
YXBlX2Fzc2VydGlvbnMoZG9tYWlucykKKworICAgICAgICBoZWFkZXJzID0gc2V0KFsKKyAgICAg
ICAgICAgICc8aW5zcGVjdG9yL0luc3BlY3RvclR5cGVCdWlsZGVyLmg+JywKKyAgICAgICAgICAg
ICc8d3RmL0Fzc2VydGlvbnMuaD4nLAorICAgICAgICAgICAgJzx3dGYvUGFzc1JlZlB0ci5oPicK
KyAgICAgICAgXSkKKworICAgICAgICBpZiBzZWxmLm1vZGVsKCkuZnJhbWV3b3JrIGlzIG5vdCBG
cmFtZXdvcmtzLkphdmFTY3JpcHRDb3JlOgorICAgICAgICAgICAgaGVhZGVycy5hZGQoJzxpbnNw
ZWN0b3IvSW5zcGVjdG9ySlNUeXBlQnVpbGRlcnMuaD4nKQorCisgICAgICAgIGV4cG9ydF9tYWNy
byA9IHNlbGYubW9kZWwoKS5mcmFtZXdvcmsuc2V0dGluZygnZXhwb3J0X21hY3JvJywgTm9uZSkK
KyAgICAgICAgZnJhbWV3b3JrX3ByZWZpeCA9IHNlbGYubW9kZWwoKS5mcmFtZXdvcmsuc2V0dGlu
ZygncHJlZml4JykKKworICAgICAgICBoZWFkZXJfYXJncyA9IHsKKyAgICAgICAgICAgICdoZWFk
ZXJHdWFyZFN0cmluZyc6IHJlLnN1YignXFcrJywgJ18nLCBzZWxmLm91dHB1dF9maWxlbmFtZSgp
KSwKKyAgICAgICAgICAgICdpbmNsdWRlcyc6ICdcbicuam9pbihbJyNpbmNsdWRlICcgKyBoZWFk
ZXIgZm9yIGhlYWRlciBpbiBzb3J0ZWQoaGVhZGVycyldKSwKKyAgICAgICAgICAgICd0eXBlZGVm
cyc6ICcnLAorICAgICAgICAgICAgJ2lucHV0RmlsZW5hbWUnOiBzZWxmLl9pbnB1dF9maWxlcGF0
aAorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuX3R5cGUgPSBbJ1N0cmluZyddCisgICAgICAg
IGlmIGV4cG9ydF9tYWNybyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJldHVybl90eXBlWzow
XSA9IFtleHBvcnRfbWFjcm9dCisKKyAgICAgICAgc2VjdGlvbnMgPSBbXQorICAgICAgICBzZWN0
aW9ucy5hcHBlbmQoc2VsZi5nZW5lcmF0ZV9saWNlbnNlKCkpCisgICAgICAgIHNlY3Rpb25zLmFw
cGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMuQ3BwSGVhZGVyUHJlbHVkZSkuc3Vic3RpdHV0ZShOb25l
LCAqKmhlYWRlcl9hcmdzKSkKKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKCduYW1lc3BhY2UgVHlw
ZUJ1aWxkZXIgeycpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9mb3J3
YXJkX2RlY2xhcmF0aW9ucyhkb21haW5zKSkKKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYu
X2dlbmVyYXRlX3R5cGVkZWZzKGRvbWFpbnMpKQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoJyVz
IGdldCVzRW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpOycgJSAoJyAnLmpvaW4ocmV0dXJuX3R5
cGUpLCBmcmFtZXdvcmtfcHJlZml4KSkKKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKCdcbicuam9p
bihbCisgICAgICAgICAgICAndGVtcGxhdGU8dHlwZW5hbWUgVD4gJXMgZ2V0JXNFbnVtQ29uc3Rh
bnRWYWx1ZShUIGVudW1WYWx1ZSknICUgKCcgJy5qb2luKHJldHVybl90eXBlKSwgZnJhbWV3b3Jr
X3ByZWZpeCksCisgICAgICAgICAgICAneycsCisgICAgICAgICAgICAnICAgIHJldHVybiBnZXQl
c0VudW1Db25zdGFudFZhbHVlKHN0YXRpY19jYXN0PGludD4oZW51bVZhbHVlKSk7JyAlIGZyYW1l
d29ya19wcmVmaXgsCisgICAgICAgICAgICAnfSddKSkKKworICAgICAgICBidWlsZGVyX3NlY3Rp
b25zID0gbWFwKHNlbGYuX2dlbmVyYXRlX2J1aWxkZXJzX2Zvcl9kb21haW4sIGRvbWFpbnMpCisg
ICAgICAgIHNlY3Rpb25zLmV4dGVuZChmaWx0ZXIobGFtYmRhIHNlY3Rpb246IGxlbihzZWN0aW9u
KSA+IDAsIGJ1aWxkZXJfc2VjdGlvbnMpKQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5f
Z2VuZXJhdGVfZm9yd2FyZF9kZWNsYXJhdGlvbnNfZm9yX2JpbmRpbmdfdHJhaXRzKCkpCisgICAg
ICAgIHNlY3Rpb25zLmFwcGVuZCgnfSAvLyBuYW1lc3BhY2UgVHlwZUJ1aWxkZXInKQorICAgICAg
ICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVzLkNwcEhlYWRlclBvc3RsdWRlKS5z
dWJzdGl0dXRlKE5vbmUsICoqaGVhZGVyX2FyZ3MpKQorICAgICAgICByZXR1cm4gIlxuXG4iLmpv
aW4oc2VjdGlvbnMpCisKKyAgICAjIFByaXZhdGUgbWV0aG9kcy4KKworICAgICMgRklYTUU6IG1v
dmUgYnVpbGRlcnMgb3V0IG9mIGNsYXNzZXMsIHVuY29tbWVudCBmb3J3YXJkIGRlY2xhcmF0aW9u
CisKKyAgICBkZWYgX2dlbmVyYXRlX2ZvcndhcmRfZGVjbGFyYXRpb25zKHNlbGYsIGRvbWFpbnMp
OgorICAgICAgICBzZWN0aW9ucyA9IFtdCisKKyAgICAgICAgZm9yIGRvbWFpbiBpbiBkb21haW5z
OgorICAgICAgICAgICAgZGVjbGFyYXRpb25fdHlwZXMgPSBbZGVjbC50eXBlIGZvciBkZWNsIGlu
IGRvbWFpbi50eXBlX2RlY2xhcmF0aW9uc10KKyAgICAgICAgICAgIG9iamVjdF90eXBlcyA9IGZp
bHRlcihsYW1iZGEgX3R5cGU6IGlzaW5zdGFuY2UoX3R5cGUsIE9iamVjdFR5cGUpLCBkZWNsYXJh
dGlvbl90eXBlcykKKyAgICAgICAgICAgIGVudW1fdHlwZXMgPSBmaWx0ZXIobGFtYmRhIF90eXBl
OiBpc2luc3RhbmNlKF90eXBlLCBFbnVtVHlwZSksIGRlY2xhcmF0aW9uX3R5cGVzKQorICAgICAg
ICAgICAgaWYgbGVuKG9iamVjdF90eXBlcykgKyBsZW4oZW51bV90eXBlcykgPT0gMDoKKyAgICAg
ICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBkb21haW5fbGluZXMgPSBbXQorICAg
ICAgICAgICAgZG9tYWluX2xpbmVzLmFwcGVuZCgnbmFtZXNwYWNlICVzIHsnICUgZG9tYWluLmRv
bWFpbl9uYW1lKQorCisgICAgICAgICAgICBvYmplY3RfdHlwZV9uYW1lcyA9IFtfdHlwZS5yYXdf
bmFtZSgpIGZvciBfdHlwZSBpbiBvYmplY3RfdHlwZXNdCisgICAgICAgICAgICBlbnVtX3R5cGVf
bmFtZXMgPSBbX3R5cGUucmF3X25hbWUoKSBmb3IgX3R5cGUgaW4gZW51bV90eXBlc10KKworICAg
ICAgICAgICAgIyBGb3J3YXJkLWRlY2xhcmUgYWxsIGNsYXNzZXMgc28gdGhlIHR5cGUgYnVpbGRl
cnMgd29uJ3QgYnJlYWsgaWYgcmVhcnJhbmdlZC4KKyAgICAgICAgICAgIGRvbWFpbl9saW5lcy5l
eHRlbmQoJ2NsYXNzICVzOycgJSBuYW1lIGZvciBuYW1lIGluIHNvcnRlZChvYmplY3RfdHlwZV9u
YW1lcykpCisgICAgICAgICAgICBkb21haW5fbGluZXMuZXh0ZW5kKCdlbnVtIGNsYXNzICVzOycg
JSBuYW1lIGZvciBuYW1lIGluIHNvcnRlZChlbnVtX3R5cGVfbmFtZXMpKQorICAgICAgICAgICAg
ZG9tYWluX2xpbmVzLmFwcGVuZCgnfSAvLyAlcycgJSBkb21haW4uZG9tYWluX25hbWUpCisgICAg
ICAgICAgICBzZWN0aW9ucy5hcHBlbmQoR2VuZXJhdG9yLndyYXBfd2l0aF9ndWFyZF9mb3JfZG9t
YWluKGRvbWFpbiwgJ1xuJy5qb2luKGRvbWFpbl9saW5lcykpKQorCisgICAgICAgIGlmIGxlbihz
ZWN0aW9ucykgPT0gMDoKKyAgICAgICAgICAgIHJldHVybiAnJworICAgICAgICBlbHNlOgorICAg
ICAgICAgICAgcmV0dXJuICIiIi8vIEZvcndhcmQgZGVjbGFyYXRpb25zLgorJXMKKy8vIEVuZCBv
ZiBmb3J3YXJkIGRlY2xhcmF0aW9ucy4KKyIiIiAlICdcblxuJy5qb2luKHNlY3Rpb25zKQorCisg
ICAgZGVmIF9nZW5lcmF0ZV90eXBlZGVmcyhzZWxmLCBkb21haW5zKToKKyAgICAgICAgc2VjdGlv
bnMgPSBtYXAoc2VsZi5fZ2VuZXJhdGVfdHlwZWRlZnNfZm9yX2RvbWFpbiwgZG9tYWlucykKKyAg
ICAgICAgc2VjdGlvbnMgPSBmaWx0ZXIobGFtYmRhIHRleHQ6IGxlbih0ZXh0KSA+IDAsIHNlY3Rp
b25zKQorCisgICAgICAgIGlmIGxlbihzZWN0aW9ucykgPT0gMDoKKyAgICAgICAgICAgIHJldHVy
biAnJworICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuICIiIi8vIFR5cGVkZWZzLgor
JXMKKy8vIEVuZCBvZiB0eXBlZGVmcy4iIiIgJSAnXG5cbicuam9pbihzZWN0aW9ucykKKworICAg
IGRlZiBfZ2VuZXJhdGVfdHlwZWRlZnNfZm9yX2RvbWFpbihzZWxmLCBkb21haW4pOgorICAgICAg
ICBwcmltaXRpdmVfZGVjbGFyYXRpb25zID0gZmlsdGVyKGxhbWJkYSBkZWNsOiBpc2luc3RhbmNl
KGRlY2wudHlwZSwgQWxpYXNlZFR5cGUpLCBkb21haW4udHlwZV9kZWNsYXJhdGlvbnMpCisgICAg
ICAgIGlmIGxlbihwcmltaXRpdmVfZGVjbGFyYXRpb25zKSA9PSAwOgorICAgICAgICAgICAgcmV0
dXJuICcnCisKKyAgICAgICAgc2VjdGlvbnMgPSBbXQorICAgICAgICBmb3IgZGVjbGFyYXRpb24g
aW4gcHJpbWl0aXZlX2RlY2xhcmF0aW9uczoKKyAgICAgICAgICAgIHByaW1pdGl2ZV9uYW1lID0g
R2VuZXJhdG9yLmNwcF9uYW1lX2Zvcl9wcmltaXRpdmVfdHlwZShkZWNsYXJhdGlvbi50eXBlLmFs
aWFzZWRfdHlwZSkKKyAgICAgICAgICAgIHR5cGVkZWZfbGluZXMgPSBbXQorICAgICAgICAgICAg
aWYgbGVuKGRlY2xhcmF0aW9uLmRlc2NyaXB0aW9uKSA+IDA6CisgICAgICAgICAgICAgICAgdHlw
ZWRlZl9saW5lcy5hcHBlbmQoJy8qICVzICovJyAlIGRlY2xhcmF0aW9uLmRlc2NyaXB0aW9uKQor
ICAgICAgICAgICAgdHlwZWRlZl9saW5lcy5hcHBlbmQoJ3R5cGVkZWYgJXMgJXM7JyAlIChwcmlt
aXRpdmVfbmFtZSwgZGVjbGFyYXRpb24udHlwZV9uYW1lKSkKKyAgICAgICAgICAgIHNlY3Rpb25z
LmFwcGVuZCgnXG4nLmpvaW4odHlwZWRlZl9saW5lcykpCisKKyAgICAgICAgbGluZXMgPSBbXQor
ICAgICAgICBsaW5lcy5hcHBlbmQoJ25hbWVzcGFjZSAlcyB7JyAlIGRvbWFpbi5kb21haW5fbmFt
ZSkKKyAgICAgICAgbGluZXMuYXBwZW5kKCdcblxuJy5qb2luKHNlY3Rpb25zKSkKKyAgICAgICAg
bGluZXMuYXBwZW5kKCd9IC8vICVzJyAlIGRvbWFpbi5kb21haW5fbmFtZSkKKyAgICAgICAgcmV0
dXJuIEdlbmVyYXRvci53cmFwX3dpdGhfZ3VhcmRfZm9yX2RvbWFpbihkb21haW4sICdcbicuam9p
bihsaW5lcykpCisKKyAgICBkZWYgX2dlbmVyYXRlX2J1aWxkZXJzX2Zvcl9kb21haW4oc2VsZiwg
ZG9tYWluKToKKyAgICAgICAgc2VjdGlvbnMgPSBbXQorCisgICAgICAgIGZvciB0eXBlX2RlY2xh
cmF0aW9uIGluIGRvbWFpbi50eXBlX2RlY2xhcmF0aW9uczoKKyAgICAgICAgICAgIGlmIGlzaW5z
dGFuY2UodHlwZV9kZWNsYXJhdGlvbi50eXBlLCBFbnVtVHlwZSk6CisgICAgICAgICAgICAgICAg
c2VjdGlvbnMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX3N0cnVjdF9mb3JfZW51bV9kZWNsYXJhdGlv
bih0eXBlX2RlY2xhcmF0aW9uKSkKKyAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh0eXBlX2Rl
Y2xhcmF0aW9uLnR5cGUsIE9iamVjdFR5cGUpOgorICAgICAgICAgICAgICAgIHNlY3Rpb25zLmFw
cGVuZChzZWxmLl9nZW5lcmF0ZV9jbGFzc19mb3Jfb2JqZWN0X2RlY2xhcmF0aW9uKHR5cGVfZGVj
bGFyYXRpb24sIGRvbWFpbikpCisKKyAgICAgICAgc2VjdGlvbnMgPSBmaWx0ZXIobGFtYmRhIHNl
Y3Rpb246IGxlbihzZWN0aW9uKSA+IDAsIHNlY3Rpb25zKQorICAgICAgICBpZiBsZW4oc2VjdGlv
bnMpID09IDA6CisgICAgICAgICAgICByZXR1cm4gJycKKworICAgICAgICBsaW5lcyA9IFtdCisg
ICAgICAgIGxpbmVzLmFwcGVuZCgnbmFtZXNwYWNlICVzIHsnICUgZG9tYWluLmRvbWFpbl9uYW1l
KQorICAgICAgICBsaW5lcy5hcHBlbmQoJ1xuJy5qb2luKHNlY3Rpb25zKSkKKyAgICAgICAgbGlu
ZXMuYXBwZW5kKCd9IC8vICVzJyAlIGRvbWFpbi5kb21haW5fbmFtZSkKKyAgICAgICAgcmV0dXJu
IEdlbmVyYXRvci53cmFwX3dpdGhfZ3VhcmRfZm9yX2RvbWFpbihkb21haW4sICdcbicuam9pbihs
aW5lcykpCisKKyAgICBkZWYgX2dlbmVyYXRlX2NsYXNzX2Zvcl9vYmplY3RfZGVjbGFyYXRpb24o
c2VsZiwgdHlwZV9kZWNsYXJhdGlvbiwgZG9tYWluKToKKyAgICAgICAgaWYgbGVuKHR5cGVfZGVj
bGFyYXRpb24udHlwZV9tZW1iZXJzKSA9PSAwOgorICAgICAgICAgICAgcmV0dXJuICcnCisKKyAg
ICAgICAgZW51bV9tZW1iZXJzID0gZmlsdGVyKGxhbWJkYSBtZW1iZXI6IGlzaW5zdGFuY2UobWVt
YmVyLnR5cGUsIEVudW1UeXBlKSBhbmQgbWVtYmVyLnR5cGUuaXNfYW5vbnltb3VzLCB0eXBlX2Rl
Y2xhcmF0aW9uLnR5cGVfbWVtYmVycykKKyAgICAgICAgcmVxdWlyZWRfbWVtYmVycyA9IGZpbHRl
cihsYW1iZGEgbWVtYmVyOiBub3QgbWVtYmVyLmlzX29wdGlvbmFsLCB0eXBlX2RlY2xhcmF0aW9u
LnR5cGVfbWVtYmVycykKKyAgICAgICAgb3B0aW9uYWxfbWVtYmVycyA9IGZpbHRlcihsYW1iZGEg
bWVtYmVyOiBtZW1iZXIuaXNfb3B0aW9uYWwsIHR5cGVfZGVjbGFyYXRpb24udHlwZV9tZW1iZXJz
KQorICAgICAgICBvYmplY3RfbmFtZSA9IHR5cGVfZGVjbGFyYXRpb24udHlwZV9uYW1lCisKKyAg
ICAgICAgbGluZXMgPSBbXQorICAgICAgICBpZiBsZW4odHlwZV9kZWNsYXJhdGlvbi5kZXNjcmlw
dGlvbikgPiAwOgorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcvKiAlcyAqLycgJSB0eXBlX2Rl
Y2xhcmF0aW9uLmRlc2NyaXB0aW9uKQorICAgICAgICBiYXNlX2NsYXNzID0gJ0luc3BlY3Rvcjo6
SW5zcGVjdG9yT2JqZWN0JworICAgICAgICBpZiBub3QgR2VuZXJhdG9yLnR5cGVfaGFzX29wZW5f
ZmllbGRzKHR5cGVfZGVjbGFyYXRpb24udHlwZSk6CisgICAgICAgICAgICBiYXNlX2NsYXNzID0g
YmFzZV9jbGFzcyArICdCYXNlJworICAgICAgICBsaW5lcy5hcHBlbmQoJ2NsYXNzICVzIDogcHVi
bGljICVzIHsnICUgKG9iamVjdF9uYW1lLCBiYXNlX2NsYXNzKSkKKyAgICAgICAgbGluZXMuYXBw
ZW5kKCdwdWJsaWM6JykKKyAgICAgICAgZm9yIGVudW1fbWVtYmVyIGluIGVudW1fbWVtYmVyczoK
KyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5IG5h
bWUgXCclc1wnIHdoaWxlIGdlbmVyYXRpbmcgJXMuJyAlIChlbnVtX21lbWJlci5tZW1iZXJfbmFt
ZSwgb2JqZWN0X25hbWUpKQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRl
X3N0cnVjdF9mb3JfYW5vbnltb3VzX2VudW1fbWVtYmVyKGVudW1fbWVtYmVyKSkKKyAgICAgICAg
bGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2J1aWxkZXJfc3RhdGVfZW51bSh0eXBlX2RlY2xh
cmF0aW9uKSkKKworICAgICAgICBjb25zdHJ1Y3Rvcl9leGFtcGxlID0gW10KKyAgICAgICAgY29u
c3RydWN0b3JfZXhhbXBsZS5hcHBlbmQoJyAgICAgKiBSZWZQdHI8JXM+IHJlc3VsdCA9ICVzOjpj
cmVhdGUoKScgJSAob2JqZWN0X25hbWUsIG9iamVjdF9uYW1lKSkKKyAgICAgICAgZm9yIG1lbWJl
ciBpbiByZXF1aXJlZF9tZW1iZXJzOgorICAgICAgICAgICAgY29uc3RydWN0b3JfZXhhbXBsZS5h
cHBlbmQoJyAgICAgKiAgICAgLnNldCVzKC4uLiknICUgdWNmaXJzdChtZW1iZXIubWVtYmVyX25h
bWUpKQorCisgICAgICAgIGJ1aWxkZXJfYXJncyA9IHsKKyAgICAgICAgICAgICdvYmplY3RUeXBl
Jzogb2JqZWN0X25hbWUsCisgICAgICAgICAgICAnY29uc3RydWN0b3JFeGFtcGxlJzogJ1xuJy5q
b2luKGNvbnN0cnVjdG9yX2V4YW1wbGUpICsgJzsnLAorICAgICAgICB9CisKKyAgICAgICAgbGlu
ZXMuYXBwZW5kKFRlbXBsYXRlKFRlbXBsYXRlcy5UeXBlQnVpbGRlckRlY2xhcmF0aW9uUHJlbHVk
ZSkuc3Vic3RpdHV0ZShOb25lLCAqKmJ1aWxkZXJfYXJncykpCisgICAgICAgIGZvciB0eXBlX21l
bWJlciBpbiByZXF1aXJlZF9tZW1iZXJzOgorICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYu
X2dlbmVyYXRlX2J1aWxkZXJfc2V0dGVyX2Zvcl9tZW1iZXIodHlwZV9tZW1iZXIsIGRvbWFpbikp
CisgICAgICAgIGxpbmVzLmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMuVHlwZUJ1aWxkZXJEZWNs
YXJhdGlvblBvc3RsdWRlKS5zdWJzdGl0dXRlKE5vbmUsICoqYnVpbGRlcl9hcmdzKSkKKyAgICAg
ICAgZm9yIG1lbWJlciBpbiBvcHRpb25hbF9tZW1iZXJzOgorICAgICAgICAgICAgbGluZXMuYXBw
ZW5kKHNlbGYuX2dlbmVyYXRlX3VuY2hlY2tlZF9zZXR0ZXJfZm9yX21lbWJlcihtZW1iZXIsIGRv
bWFpbikpCisKKyAgICAgICAgaWYgR2VuZXJhdG9yLnR5cGVfaGFzX29wZW5fZmllbGRzKHR5cGVf
ZGVjbGFyYXRpb24udHlwZSk6CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJycpCisgICAgICAg
ICAgICBsaW5lcy5hcHBlbmQoJyAgICAvLyBQcm9wZXJ0eSBuYW1lcyBmb3IgdHlwZSBnZW5lcmF0
ZWQgYXMgb3Blbi4nKQorICAgICAgICAgICAgZm9yIHR5cGVfbWVtYmVyIGluIHR5cGVfZGVjbGFy
YXRpb24udHlwZV9tZW1iZXJzOgorICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIHN0
YXRpYyBjb25zdCBjaGFyKiAlczsnICUgdWNmaXJzdCh0eXBlX21lbWJlci5tZW1iZXJfbmFtZSkp
CisKKyAgICAgICAgbGluZXMuYXBwZW5kKCd9OycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnJykK
KyAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKKworICAgIGRlZiBfZ2VuZXJhdGVfc3Ry
dWN0X2Zvcl9lbnVtX2RlY2xhcmF0aW9uKHNlbGYsIGVudW1fZGVjbGFyYXRpb24pOgorICAgICAg
ICBsaW5lcyA9IFtdCisgICAgICAgIGxpbmVzLmFwcGVuZCgnLyogJXMgKi8nICUgZW51bV9kZWNs
YXJhdGlvbi5kZXNjcmlwdGlvbikKKyAgICAgICAgbGluZXMuZXh0ZW5kKHNlbGYuX2dlbmVyYXRl
X3N0cnVjdF9mb3JfZW51bV90eXBlKGVudW1fZGVjbGFyYXRpb24udHlwZV9uYW1lLCBlbnVtX2Rl
Y2xhcmF0aW9uLnR5cGUpKQorICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQorCisgICAg
ZGVmIF9nZW5lcmF0ZV9zdHJ1Y3RfZm9yX2Fub255bW91c19lbnVtX21lbWJlcihzZWxmLCBlbnVt
X21lbWJlcik6CisgICAgICAgIGRlZiBhcHBseV9pbmRlbnRhdGlvbihsaW5lKToKKyAgICAgICAg
ICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgoJyMnLCAnLyonLCAnKi8nLCAnLy8nKSkgb3IgbGVuKGxp
bmUpIGlzIDA6CisgICAgICAgICAgICAgICAgcmV0dXJuIGxpbmUKKyAgICAgICAgICAgIGVsc2U6
CisgICAgICAgICAgICAgICAgcmV0dXJuICcgICAgJyArIGxpbmUKKworICAgICAgICBpbmRlbnRl
ZF9saW5lcyA9IG1hcChhcHBseV9pbmRlbnRhdGlvbiwgc2VsZi5fZ2VuZXJhdGVfc3RydWN0X2Zv
cl9lbnVtX3R5cGUoZW51bV9tZW1iZXIubWVtYmVyX25hbWUsIGVudW1fbWVtYmVyLnR5cGUpKQor
ICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGluZGVudGVkX2xpbmVzKQorCisgICAgZGVmIF9nZW5l
cmF0ZV9zdHJ1Y3RfZm9yX2VudW1fdHlwZShzZWxmLCBlbnVtX25hbWUsIGVudW1fdHlwZSk6Cisg
ICAgICAgIGxpbmVzID0gW10KKyAgICAgICAgZW51bV9uYW1lID0gdWNmaXJzdChlbnVtX25hbWUp
CisgICAgICAgIGxpbmVzLmFwcGVuZCgnZW51bSBjbGFzcyAlcyB7JyAlIGVudW1fbmFtZSkKKyAg
ICAgICAgZm9yIGVudW1fdmFsdWUgaW4gZW51bV90eXBlLmVudW1fdmFsdWVzKCk6CisgICAgICAg
ICAgICBsaW5lcy5hcHBlbmQoJyAgICAlcyA9ICVzLCcgJSAoR2VuZXJhdG9yLnN0eWxpemVkX25h
bWVfZm9yX2VudW1fdmFsdWUoZW51bV92YWx1ZSksIHNlbGYuZW5jb2RpbmdfZm9yX2VudW1fdmFs
dWUoZW51bV92YWx1ZSkpKQorICAgICAgICBsaW5lcy5hcHBlbmQoJ307IC8vIGVudW0gY2xhc3Mg
JXMnICUgZW51bV9uYW1lKQorICAgICAgICByZXR1cm4gbGluZXMgICMgVGhlIGNhbGxlciBtYXkg
d2FudCB0byBhZGp1c3QgaW5kZW50YXRpb24sIHNvIGRvbid0IGpvaW4gdGhlc2UgbGluZXMuCisK
KyAgICBkZWYgX2dlbmVyYXRlX2J1aWxkZXJfc3RhdGVfZW51bShzZWxmLCB0eXBlX2RlY2xhcmF0
aW9uKToKKyAgICAgICAgbGluZXMgPSBbXQorICAgICAgICByZXF1aXJlZF9tZW1iZXJzID0gZmls
dGVyKGxhbWJkYSBtZW1iZXI6IG5vdCBtZW1iZXIuaXNfb3B0aW9uYWwsIHR5cGVfZGVjbGFyYXRp
b24udHlwZV9tZW1iZXJzKQorICAgICAgICBlbnVtX3ZhbHVlcyA9IFtdCisKKyAgICAgICAgbGlu
ZXMuYXBwZW5kKCcgICAgZW51bSB7JykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIE5v
RmllbGRzU2V0ID0gMCwnKQorICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4ocmVxdWlyZWRfbWVt
YmVycykpOgorICAgICAgICAgICAgZW51bV92YWx1ZSA9ICIlc1NldCIgJSB1Y2ZpcnN0KHJlcXVp
cmVkX21lbWJlcnNbaV0ubWVtYmVyX25hbWUpCisgICAgICAgICAgICBlbnVtX3ZhbHVlcy5hcHBl
bmQoZW51bV92YWx1ZSkKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICAlcyA9IDEg
PDwgJWQsJyAlIChlbnVtX3ZhbHVlLCBpKSkKKyAgICAgICAgaWYgbGVuKGVudW1fdmFsdWVzKSA+
IDA6CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgQWxsRmllbGRzU2V0ID0gKCVz
KScgJSAnIHwgJy5qb2luKGVudW1fdmFsdWVzKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAg
IGxpbmVzLmFwcGVuZCgnICAgICAgICBBbGxGaWVsZHNTZXQgPSAwJykKKyAgICAgICAgbGluZXMu
YXBwZW5kKCcgICAgfTsnKQorICAgICAgICBsaW5lcy5hcHBlbmQoJycpCisgICAgICAgIHJldHVy
biAnXG4nLmpvaW4obGluZXMpCisKKyAgICBkZWYgX2dlbmVyYXRlX2J1aWxkZXJfc2V0dGVyX2Zv
cl9tZW1iZXIoc2VsZiwgdHlwZV9tZW1iZXIsIGRvbWFpbik6CisgICAgICAgIHNldHRlcl9hcmdz
ID0geworICAgICAgICAgICAgJ2NhbWVsTmFtZSc6IHVjZmlyc3QodHlwZV9tZW1iZXIubWVtYmVy
X25hbWUpLAorICAgICAgICAgICAgJ2ZyYW1ld29ya1ByZWZpeCc6IHNlbGYubW9kZWwoKS5mcmFt
ZXdvcmsuc2V0dGluZygncHJlZml4JyksCisgICAgICAgICAgICAna2V5ZWRTZXQnOiBHZW5lcmF0
b3Iua2V5ZWRfc2V0X21ldGhvZF9mb3JfdHlwZSh0eXBlX21lbWJlci50eXBlKSwKKyAgICAgICAg
ICAgICduYW1lJzogdHlwZV9tZW1iZXIubWVtYmVyX25hbWUsCisgICAgICAgICAgICAncGFyYW1l
dGVyVHlwZSc6IEdlbmVyYXRvci50eXBlX3N0cmluZ19mb3JfdHlwZV9tZW1iZXIodHlwZV9tZW1i
ZXIpCisgICAgICAgIH0KKworICAgICAgICBsaW5lcyA9IFtdCisgICAgICAgIGxpbmVzLmFwcGVu
ZCgnJykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCAlKGNh
bWVsTmFtZSlzU2V0PiYgc2V0JShjYW1lbE5hbWUpcyglKHBhcmFtZXRlclR5cGUpcyB2YWx1ZSkn
ICUgc2V0dGVyX2FyZ3MpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICB7JykKKyAgICAg
ICAgbGluZXMuYXBwZW5kKCcgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgJShj
YW1lbE5hbWUpc1NldCksIHByb3BlcnR5XyUobmFtZSlzX2FscmVhZHlfc2V0KTsnICUgc2V0dGVy
X2FyZ3MpCisKKyAgICAgICAgaWYgaXNpbnN0YW5jZSh0eXBlX21lbWJlci50eXBlLCBFbnVtVHlw
ZSk6CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgICAgIG1fcmVzdWx0LT4lKGtl
eWVkU2V0KXMoQVNDSUlMaXRlcmFsKCIlKG5hbWUpcyIpLCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVy
OjpnZXQlKGZyYW1ld29ya1ByZWZpeClzRW51bUNvbnN0YW50VmFsdWUoc3RhdGljX2Nhc3Q8aW50
Pih2YWx1ZSkpKTsnICUgc2V0dGVyX2FyZ3MpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBs
aW5lcy5hcHBlbmQoJyAgICAgICAgICAgIG1fcmVzdWx0LT4lKGtleWVkU2V0KXMoQVNDSUlMaXRl
cmFsKCIlKG5hbWUpcyIpLCB2YWx1ZSk7JyAlIHNldHRlcl9hcmdzKQorICAgICAgICBsaW5lcy5h
cHBlbmQoJyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8JShjYW1lbE5hbWUpc1NldD4oKTsn
ICUgc2V0dGVyX2FyZ3MpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICB9JykKKyAgICAg
ICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKKworICAgIGRlZiBfZ2VuZXJhdGVfdW5jaGVja2Vk
X3NldHRlcl9mb3JfbWVtYmVyKHNlbGYsIHR5cGVfbWVtYmVyLCBkb21haW4pOgorICAgICAgICBz
ZXR0ZXJfYXJncyA9IHsKKyAgICAgICAgICAgICdjYW1lbE5hbWUnOiB1Y2ZpcnN0KHR5cGVfbWVt
YmVyLm1lbWJlcl9uYW1lKSwKKyAgICAgICAgICAgICdmcmFtZXdvcmtQcmVmaXgnOiBzZWxmLm1v
ZGVsKCkuZnJhbWV3b3JrLnNldHRpbmcoJ3ByZWZpeCcpLAorICAgICAgICAgICAgJ2tleWVkU2V0
JzogR2VuZXJhdG9yLmtleWVkX3NldF9tZXRob2RfZm9yX3R5cGUodHlwZV9tZW1iZXIudHlwZSks
CisgICAgICAgICAgICAnbmFtZSc6IHR5cGVfbWVtYmVyLm1lbWJlcl9uYW1lLAorICAgICAgICAg
ICAgJ3BhcmFtZXRlclR5cGUnOiBHZW5lcmF0b3IudHlwZV9zdHJpbmdfZm9yX3R5cGVfbWVtYmVy
KHR5cGVfbWVtYmVyKQorICAgICAgICB9CisKKyAgICAgICAgbGluZXMgPSBbXQorICAgICAgICBs
aW5lcy5hcHBlbmQoJycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIHZvaWQgc2V0JShjYW1l
bE5hbWUpcyglKHBhcmFtZXRlclR5cGUpcyB2YWx1ZSknICUgc2V0dGVyX2FyZ3MpCisgICAgICAg
IGxpbmVzLmFwcGVuZCgnICAgIHsnKQorICAgICAgICBpZiBpc2luc3RhbmNlKHR5cGVfbWVtYmVy
LnR5cGUsIEVudW1UeXBlKToKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBJbnNw
ZWN0b3JPYmplY3RCYXNlOjolKGtleWVkU2V0KXMoQVNDSUlMaXRlcmFsKCIlKG5hbWUpcyIpLCBJ
bnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpnZXQlKGZyYW1ld29ya1ByZWZpeClzRW51bUNvbnN0YW50
VmFsdWUoc3RhdGljX2Nhc3Q8aW50Pih2YWx1ZSkpKTsnICUgc2V0dGVyX2FyZ3MpCisgICAgICAg
IGVsc2U6CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgSW5zcGVjdG9yT2JqZWN0
QmFzZTo6JShrZXllZFNldClzKEFTQ0lJTGl0ZXJhbCgiJShuYW1lKXMiKSwgdmFsdWUpOycgJSBz
ZXR0ZXJfYXJncykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgfScpCisgICAgICAgIHJldHVy
biAnXG4nLmpvaW4obGluZXMpCisKKyAgICBkZWYgX2dlbmVyYXRlX2ZvcndhcmRfZGVjbGFyYXRp
b25zX2Zvcl9iaW5kaW5nX3RyYWl0cyhzZWxmKToKKyAgICAgICAgIyBBIGxpc3Qgb2YgKGJ1aWxk
ZXJfdHlwZSwgbmVlZHNfcnVudGltZV9jYXN0KQorICAgICAgICB0eXBlX2FyZ3VtZW50cyA9IFtd
CisKKyAgICAgICAgZm9yIGRvbWFpbiBpbiBzZWxmLmRvbWFpbnNfdG9fZ2VuZXJhdGUoKToKKyAg
ICAgICAgICAgIGRlY2xhcmF0aW9uc190b19nZW5lcmF0ZSA9IGZpbHRlcihsYW1iZGEgZGVjbDog
c2VsZi50eXBlX25lZWRzX3NoYXBlX2Fzc2VydGlvbnMoZGVjbC50eXBlKSwgZG9tYWluLnR5cGVf
ZGVjbGFyYXRpb25zKQorCisgICAgICAgICAgICBmb3IgdHlwZV9kZWNsYXJhdGlvbiBpbiBkZWNs
YXJhdGlvbnNfdG9fZ2VuZXJhdGU6CisgICAgICAgICAgICAgICAgZm9yIHR5cGVfbWVtYmVyIGlu
IHR5cGVfZGVjbGFyYXRpb24udHlwZV9tZW1iZXJzOgorICAgICAgICAgICAgICAgICAgICBpZiBp
c2luc3RhbmNlKHR5cGVfbWVtYmVyLnR5cGUsIEVudW1UeXBlKToKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHR5cGVfYXJndW1lbnRzLmFwcGVuZCgoR2VuZXJhdG9yLnR5cGVfYnVpbGRlcl9zdHJp
bmdfZm9yX3R5cGVfbWVtYmVyKHR5cGVfbWVtYmVyLCB0eXBlX2RlY2xhcmF0aW9uKSwgRmFsc2Up
KQorCisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh0eXBlX2RlY2xhcmF0aW9uLnR5cGUs
IE9iamVjdFR5cGUpOgorICAgICAgICAgICAgICAgICAgICB0eXBlX2FyZ3VtZW50cy5hcHBlbmQo
KEdlbmVyYXRvci50eXBlX2J1aWxkZXJfc3RyaW5nX2Zvcl90eXBlKHR5cGVfZGVjbGFyYXRpb24u
dHlwZSksIEdlbmVyYXRvci50eXBlX25lZWRzX3J1bnRpbWVfY2FzdHModHlwZV9kZWNsYXJhdGlv
bi50eXBlKSkpCisKKyAgICAgICAgc3RydWN0X2tleXdvcmRzID0gWydzdHJ1Y3QnXQorICAgICAg
ICBmdW5jdGlvbl9rZXl3b3JkcyA9IFsnc3RhdGljIHZvaWQnXQorICAgICAgICBleHBvcnRfbWFj
cm8gPSBzZWxmLm1vZGVsKCkuZnJhbWV3b3JrLnNldHRpbmcoJ2V4cG9ydF9tYWNybycsIE5vbmUp
CisgICAgICAgIGlmIGV4cG9ydF9tYWNybyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHN0cnVj
dF9rZXl3b3Jkcy5hcHBlbmQoZXhwb3J0X21hY3JvKQorICAgICAgICAgICAgZnVuY3Rpb25fa2V5
d29yZHNbMToxXSA9IFtleHBvcnRfbWFjcm9dCisKKyAgICAgICAgbGluZXMgPSBbXQorICAgICAg
ICBmb3IgYXJndW1lbnQgaW4gdHlwZV9hcmd1bWVudHM6CisgICAgICAgICAgICBsaW5lcy5hcHBl
bmQoJ3RlbXBsYXRlPD4gJXMgQmluZGluZ1RyYWl0czwlcz4geycgJSAoJyAnLmpvaW4oc3RydWN0
X2tleXdvcmRzKSwgYXJndW1lbnRbMF0pKQorICAgICAgICAgICAgaWYgYXJndW1lbnRbMV06Cisg
ICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCdzdGF0aWMgUGFzc1JlZlB0cjwlcz4gcnVudGlt
ZUNhc3QoUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiB2YWx1ZSk7JyAlIGFy
Z3VtZW50WzBdKQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcjaWYgIUFTU0VSVF9ESVNBQkxF
RCcpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyVzIGFzc2VydFZhbHVlSGFzRXhwZWN0ZWRU
eXBlKEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUqKTsnICUgJyAnLmpvaW4oZnVuY3Rpb25fa2V5
d29yZHMpKQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcjZW5kaWYgLy8gIUFTU0VSVF9ESVNB
QkxFRCcpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ307JykKKyAgICAgICAgcmV0dXJuICdc
bicuam9pbihsaW5lcykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX3R5cGVfYnVpbGRlcl9pbXBsZW1lbnRhdGlvbi5w
eSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVy
YXRlX3R5cGVfYnVpbGRlcl9pbXBsZW1lbnRhdGlvbi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jNjkyYWE4YWI5
M2MxMTE2ZDA4ZDFkOGZiMmVlYThmYmUzMGI0MTAxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfdHlwZV9i
dWlsZGVyX2ltcGxlbWVudGF0aW9uLnB5CkBAIC0wLDAgKzEsMTg0IEBACisjIS91c3IvYmluL2Vu
diBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChjKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUg
bWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworIyBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisKKworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBzdHJpbmcKK2Zyb20gc3RyaW5nIGltcG9y
dCBUZW1wbGF0ZQorCitmcm9tIGdlbmVyYXRvciBpbXBvcnQgR2VuZXJhdG9yLCB1Y2ZpcnN0Citm
cm9tIGdlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IEdlbmVyYXRvclRlbXBsYXRlcyBhcyBUZW1w
bGF0ZXMKK2Zyb20gbW9kZWxzIGltcG9ydCBBbGlhc2VkVHlwZSwgQXJyYXlUeXBlLCBFbnVtVHlw
ZSwgT2JqZWN0VHlwZQorCitsb2cgPSBsb2dnaW5nLmdldExvZ2dlcignZ2xvYmFsJykKKworCitj
bGFzcyBUeXBlQnVpbGRlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKEdlbmVyYXRvcik6CisgICAg
ZGVmIF9faW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0aCk6CisgICAgICAgIEdlbmVy
YXRvci5fX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpCisKKyAgICBkZWYgb3V0
cHV0X2ZpbGVuYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gIkluc3BlY3RvciVzVHlwZUJ1aWxk
ZXJzLmNwcCIgJSBzZWxmLm1vZGVsKCkuZnJhbWV3b3JrLnNldHRpbmcoJ3ByZWZpeCcpCisKKyAg
ICBkZWYgZ2VuZXJhdGVfb3V0cHV0KHNlbGYpOgorICAgICAgICBkb21haW5zID0gc2VsZi5kb21h
aW5zX3RvX2dlbmVyYXRlKCkKKyAgICAgICAgc2VsZi5jYWxjdWxhdGVfdHlwZXNfcmVxdWlyaW5n
X3NoYXBlX2Fzc2VydGlvbnMoZG9tYWlucykKKworICAgICAgICBzZWNvbmRhcnlfaGVhZGVycyA9
IFsnPHd0Zi90ZXh0L0NTdHJpbmcuaD4nXQorCisgICAgICAgIGhlYWRlcl9hcmdzID0geworICAg
ICAgICAgICAgJ3ByaW1hcnlJbmNsdWRlJzogJyJJbnNwZWN0b3Ilc1R5cGVCdWlsZGVycy5oIicg
JSBzZWxmLm1vZGVsKCkuZnJhbWV3b3JrLnNldHRpbmcoJ3ByZWZpeCcpLAorICAgICAgICAgICAg
J3NlY29uZGFyeUluY2x1ZGVzJzogIlxuIi5qb2luKFsnI2luY2x1ZGUgJXMnICUgaGVhZGVyIGZv
ciBoZWFkZXIgaW4gc2Vjb25kYXJ5X2hlYWRlcnNdKSwKKyAgICAgICAgICAgICdpbnB1dEZpbGVu
YW1lJzogc2VsZi5faW5wdXRfZmlsZXBhdGgKKyAgICAgICAgfQorCisgICAgICAgIHNlY3Rpb25z
ID0gW10KKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfbGljZW5zZSgpKQor
ICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVzLkNwcEltcGxlbWVudGF0
aW9uUHJlbHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkKKyAgICAgICAgc2Vj
dGlvbnMuYXBwZW5kKCduYW1lc3BhY2UgVHlwZUJ1aWxkZXIgeycpCisgICAgICAgIHNlY3Rpb25z
LmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9lbnVtX21hcHBpbmcoKSkKKyAgICAgICAgc2VjdGlvbnMu
YXBwZW5kKHNlbGYuX2dlbmVyYXRlX29wZW5fZmllbGRfbmFtZXMoKSkKKyAgICAgICAgYnVpbGRl
cl9zZWN0aW9ucyA9IG1hcChzZWxmLl9nZW5lcmF0ZV9idWlsZGVyc19mb3JfZG9tYWluLCBkb21h
aW5zKQorICAgICAgICBzZWN0aW9ucy5leHRlbmQoZmlsdGVyKGxhbWJkYSBzZWN0aW9uOiBsZW4o
c2VjdGlvbikgPiAwLCBidWlsZGVyX3NlY3Rpb25zKSkKKyAgICAgICAgc2VjdGlvbnMuYXBwZW5k
KCd9IC8vIG5hbWVzcGFjZSBUeXBlQnVpbGRlcicpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChU
ZW1wbGF0ZShUZW1wbGF0ZXMuQ3BwSW1wbGVtZW50YXRpb25Qb3N0bHVkZSkuc3Vic3RpdHV0ZShO
b25lLCAqKmhlYWRlcl9hcmdzKSkKKworICAgICAgICByZXR1cm4gIlxuXG4iLmpvaW4oc2VjdGlv
bnMpCisKKyAgICAjIFByaXZhdGUgbWV0aG9kcy4KKworICAgIGRlZiBfZ2VuZXJhdGVfZW51bV9t
YXBwaW5nKHNlbGYpOgorICAgICAgICBmcmFtZXdvcmtfcHJlZml4ID0gc2VsZi5tb2RlbCgpLmZy
YW1ld29yay5zZXR0aW5nKCdwcmVmaXgnKQorICAgICAgICBsaW5lcyA9IFtdCisKKyAgICAgICAg
bGluZXMuYXBwZW5kKCdzdGF0aWMgY29uc3QgY2hhciogY29uc3QgZW51bV9jb25zdGFudF92YWx1
ZXNbXSA9IHsnKQorICAgICAgICBsaW5lcy5leHRlbmQoWycgICAgIiVzIiwnICUgZW51bV92YWx1
ZSBmb3IgZW51bV92YWx1ZSBpbiBzZWxmLmFzc2lnbmVkX2VudW1fdmFsdWVzKCldKQorICAgICAg
ICBsaW5lcy5hcHBlbmQoJ307JykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcnKQorICAgICAgICBs
aW5lcy5hcHBlbmQoJ1N0cmluZyBnZXQlc0VudW1Db25zdGFudFZhbHVlKGludCBjb2RlKSB7JyAl
IGZyYW1ld29ya19wcmVmaXgpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIHJldHVybiBlbnVt
X2NvbnN0YW50X3ZhbHVlc1tjb2RlXTsnKQorICAgICAgICBsaW5lcy5hcHBlbmQoJ30nKQorCisg
ICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCisKKyAgICBkZWYgX2dlbmVyYXRlX29wZW5f
ZmllbGRfbmFtZXMoc2VsZik6CisgICAgICAgIGxpbmVzID0gW10KKyAgICAgICAgZm9yIGRvbWFp
biBpbiBzZWxmLmRvbWFpbnNfdG9fZ2VuZXJhdGUoKToKKyAgICAgICAgICAgIGZvciB0eXBlX2Rl
Y2xhcmF0aW9uIGluIGZpbHRlcihsYW1iZGEgZGVjbDogR2VuZXJhdG9yLnR5cGVfaGFzX29wZW5f
ZmllbGRzKGRlY2wudHlwZSksIGRvbWFpbi50eXBlX2RlY2xhcmF0aW9ucyk6CisgICAgICAgICAg
ICAgICAgZm9yIHR5cGVfbWVtYmVyIGluIHNvcnRlZCh0eXBlX2RlY2xhcmF0aW9uLnR5cGVfbWVt
YmVycywga2V5PWxhbWJkYSBtZW1iZXI6IG1lbWJlci5tZW1iZXJfbmFtZSk6CisgICAgICAgICAg
ICAgICAgICAgIGZpZWxkX25hbWUgPSAnOjonLmpvaW4oWydJbnNwZWN0b3InLCAnVHlwZUJ1aWxk
ZXInLCBkb21haW4uZG9tYWluX25hbWUsIHVjZmlyc3QodHlwZV9kZWNsYXJhdGlvbi50eXBlX25h
bWUpLCB1Y2ZpcnN0KHR5cGVfbWVtYmVyLm1lbWJlcl9uYW1lKV0pCisgICAgICAgICAgICAgICAg
ICAgIGxpbmVzLmFwcGVuZCgnY29uc3QgY2hhciogJXMgPSAiJXMiOycgJSAoZmllbGRfbmFtZSwg
dHlwZV9tZW1iZXIubWVtYmVyX25hbWUpKQorCisgICAgICAgIHJldHVybiAnXG4nLmpvaW4obGlu
ZXMpCisKKyAgICBkZWYgX2dlbmVyYXRlX2J1aWxkZXJzX2Zvcl9kb21haW4oc2VsZiwgZG9tYWlu
KToKKyAgICAgICAgc2VjdGlvbnMgPSBbXQorICAgICAgICBkZWNsYXJhdGlvbnNfdG9fZ2VuZXJh
dGUgPSBmaWx0ZXIobGFtYmRhIGRlY2w6IHNlbGYudHlwZV9uZWVkc19zaGFwZV9hc3NlcnRpb25z
KGRlY2wudHlwZSksIGRvbWFpbi50eXBlX2RlY2xhcmF0aW9ucykKKworICAgICAgICBmb3IgdHlw
ZV9kZWNsYXJhdGlvbiBpbiBkZWNsYXJhdGlvbnNfdG9fZ2VuZXJhdGU6CisgICAgICAgICAgICBm
b3IgdHlwZV9tZW1iZXIgaW4gdHlwZV9kZWNsYXJhdGlvbi50eXBlX21lbWJlcnM6CisgICAgICAg
ICAgICAgICAgaWYgaXNpbnN0YW5jZSh0eXBlX21lbWJlci50eXBlLCBFbnVtVHlwZSk6CisgICAg
ICAgICAgICAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9hc3NlcnRpb25f
Zm9yX2VudW0odHlwZV9tZW1iZXIsIHR5cGVfZGVjbGFyYXRpb24pKQorCisgICAgICAgICAgICBp
ZiBpc2luc3RhbmNlKHR5cGVfZGVjbGFyYXRpb24udHlwZSwgT2JqZWN0VHlwZSk6CisgICAgICAg
ICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2Fzc2VydGlvbl9mb3Jfb2Jq
ZWN0X2RlY2xhcmF0aW9uKHR5cGVfZGVjbGFyYXRpb24pKQorICAgICAgICAgICAgICAgIGlmIEdl
bmVyYXRvci50eXBlX25lZWRzX3J1bnRpbWVfY2FzdHModHlwZV9kZWNsYXJhdGlvbi50eXBlKToK
KyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX3J1bnRp
bWVfY2FzdF9mb3Jfb2JqZWN0X2RlY2xhcmF0aW9uKHR5cGVfZGVjbGFyYXRpb24pKQorCisgICAg
ICAgIHJldHVybiAnXG5cbicuam9pbihzZWN0aW9ucykKKworICAgIGRlZiBfZ2VuZXJhdGVfcnVu
dGltZV9jYXN0X2Zvcl9vYmplY3RfZGVjbGFyYXRpb24oc2VsZiwgb2JqZWN0X2RlY2xhcmF0aW9u
KToKKyAgICAgICAgYXJncyA9IHsKKyAgICAgICAgICAgICdvYmplY3RUeXBlJzogR2VuZXJhdG9y
LnR5cGVfYnVpbGRlcl9zdHJpbmdfZm9yX3R5cGUob2JqZWN0X2RlY2xhcmF0aW9uLnR5cGUpCisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFRlbXBsYXRlKFRlbXBsYXRlcy5UeXBlQnVpbGRlck9i
amVjdFJ1bnRpbWVDYXN0KS5zdWJzdGl0dXRlKE5vbmUsICoqYXJncykKKworICAgIGRlZiBfZ2Vu
ZXJhdGVfYXNzZXJ0aW9uX2Zvcl9vYmplY3RfZGVjbGFyYXRpb24oc2VsZiwgb2JqZWN0X2RlY2xh
cmF0aW9uKToKKyAgICAgICAgcmVxdWlyZWRfbWVtYmVycyA9IGZpbHRlcihsYW1iZGEgbWVtYmVy
OiBub3QgbWVtYmVyLmlzX29wdGlvbmFsLCBvYmplY3RfZGVjbGFyYXRpb24udHlwZV9tZW1iZXJz
KQorICAgICAgICBvcHRpb25hbF9tZW1iZXJzID0gZmlsdGVyKGxhbWJkYSBtZW1iZXI6IG1lbWJl
ci5pc19vcHRpb25hbCwgb2JqZWN0X2RlY2xhcmF0aW9uLnR5cGVfbWVtYmVycykKKyAgICAgICAg
c2hvdWxkX2NvdW50X3Byb3BlcnRpZXMgPSBub3QgR2VuZXJhdG9yLnR5cGVfaGFzX29wZW5fZmll
bGRzKG9iamVjdF9kZWNsYXJhdGlvbi50eXBlKQorICAgICAgICBsaW5lcyA9IFtdCisKKyAgICAg
ICAgbGluZXMuYXBwZW5kKCcjaWYgIUFTU0VSVF9ESVNBQkxFRCcpCisgICAgICAgIGxpbmVzLmFw
cGVuZCgndm9pZCBCaW5kaW5nVHJhaXRzPCVzPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUo
SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSogdmFsdWUpJyAlIChHZW5lcmF0b3IudHlwZV9idWls
ZGVyX3N0cmluZ19mb3JfdHlwZShvYmplY3RfZGVjbGFyYXRpb24udHlwZSkpKQorICAgICAgICBs
aW5lcy5hcHBlbmQoIiIieworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG9iamVjdDsKKyAg
ICBib29sIGNhc3RSZXMgPSB2YWx1ZS0+YXNPYmplY3QoJm9iamVjdCk7CisgICAgQVNTRVJUX1VO
VVNFRChjYXN0UmVzLCBjYXN0UmVzKTsiIiIpCisgICAgICAgIGZvciB0eXBlX21lbWJlciBpbiBy
ZXF1aXJlZF9tZW1iZXJzOgorICAgICAgICAgICAgYXJncyA9IHsKKyAgICAgICAgICAgICAgICAn
bWVtYmVyTmFtZSc6IHR5cGVfbWVtYmVyLm1lbWJlcl9uYW1lLAorICAgICAgICAgICAgICAgICdh
c3NlcnRNZXRob2QnOiBHZW5lcmF0b3IuYXNzZXJ0aW9uX21ldGhvZF9mb3JfdHlwZV9tZW1iZXIo
dHlwZV9tZW1iZXIsIG9iamVjdF9kZWNsYXJhdGlvbikKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgbGluZXMuYXBwZW5kKCIiIiAgICB7CisgICAgICAgIEluc3BlY3Rvck9iamVjdDo6aXRl
cmF0b3IgJShtZW1iZXJOYW1lKXNQb3MgPSBvYmplY3QtPmZpbmQoQVNDSUlMaXRlcmFsKCIlKG1l
bWJlck5hbWUpcyIpKTsKKyAgICAgICAgQVNTRVJUKCUobWVtYmVyTmFtZSlzUG9zICE9IG9iamVj
dC0+ZW5kKCkpOworICAgICAgICAlKGFzc2VydE1ldGhvZClzKCUobWVtYmVyTmFtZSlzUG9zLT52
YWx1ZS5nZXQoKSk7CisgICAgfSIiIiAlIGFyZ3MpCisKKyAgICAgICAgaWYgc2hvdWxkX2NvdW50
X3Byb3BlcnRpZXM6CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJycpCisgICAgICAgICAgICBs
aW5lcy5hcHBlbmQoJyAgICBpbnQgZm91bmRQcm9wZXJ0aWVzQ291bnQgPSAlczsnICUgbGVuKHJl
cXVpcmVkX21lbWJlcnMpKQorCisgICAgICAgIGZvciB0eXBlX21lbWJlciBpbiBvcHRpb25hbF9t
ZW1iZXJzOgorICAgICAgICAgICAgYXJncyA9IHsKKyAgICAgICAgICAgICAgICAnbWVtYmVyTmFt
ZSc6IHR5cGVfbWVtYmVyLm1lbWJlcl9uYW1lLAorICAgICAgICAgICAgICAgICdhc3NlcnRNZXRo
b2QnOiBHZW5lcmF0b3IuYXNzZXJ0aW9uX21ldGhvZF9mb3JfdHlwZV9tZW1iZXIodHlwZV9tZW1i
ZXIsIG9iamVjdF9kZWNsYXJhdGlvbikKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbGlu
ZXMuYXBwZW5kKCIiIiAgICB7CisgICAgICAgIEluc3BlY3Rvck9iamVjdDo6aXRlcmF0b3IgJSht
ZW1iZXJOYW1lKXNQb3MgPSBvYmplY3QtPmZpbmQoQVNDSUlMaXRlcmFsKCIlKG1lbWJlck5hbWUp
cyIpKTsKKyAgICAgICAgaWYgKCUobWVtYmVyTmFtZSlzUG9zICE9IG9iamVjdC0+ZW5kKCkpIHsK
KyAgICAgICAgICAgICUoYXNzZXJ0TWV0aG9kKXMoJShtZW1iZXJOYW1lKXNQb3MtPnZhbHVlLmdl
dCgpKTsiIiIgJSBhcmdzKQorCisgICAgICAgICAgICBpZiBzaG91bGRfY291bnRfcHJvcGVydGll
czoKKyAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgICAgICsrZm91bmRQcm9w
ZXJ0aWVzQ291bnQ7JykKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICB9JykKKyAg
ICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIH0nKQorCisgICAgICAgIGlmIHNob3VsZF9jb3Vu
dF9wcm9wZXJ0aWVzOgorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgaWYgKGZvdW5kUHJv
cGVydGllc0NvdW50ICE9IG9iamVjdC0+c2l6ZSgpKScpCisgICAgICAgICAgICBsaW5lcy5hcHBl
bmQoJyAgICAgICAgRkFUQUwoIlVuZXhwZWN0ZWQgcHJvcGVydGllcyBpbiBvYmplY3Q6ICVzXFxu
Iiwgb2JqZWN0LT50b0pTT05TdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSk7JykKKyAgICAgICAgbGlu
ZXMuYXBwZW5kKCd9JykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcjZW5kaWYgLy8gIUFTU0VSVF9E
SVNBQkxFRCcpCisgICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCisKKyAgICBkZWYgX2dl
bmVyYXRlX2Fzc2VydGlvbl9mb3JfZW51bShzZWxmLCBlbnVtX21lbWJlciwgb2JqZWN0X2RlY2xh
cmF0aW9uKToKKyAgICAgICAgbGluZXMgPSBbXQorICAgICAgICBsaW5lcy5hcHBlbmQoJyNpZiAh
QVNTRVJUX0RJU0FCTEVEJykKKyAgICAgICAgbGluZXMuYXBwZW5kKCd2b2lkICVzKEluc3BlY3Rv
cjo6SW5zcGVjdG9yVmFsdWUqIHZhbHVlKScgJSBHZW5lcmF0b3IuYXNzZXJ0aW9uX21ldGhvZF9m
b3JfdHlwZV9tZW1iZXIoZW51bV9tZW1iZXIsIG9iamVjdF9kZWNsYXJhdGlvbikpCisgICAgICAg
IGxpbmVzLmFwcGVuZCgneycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIFN0cmluZyBzOycp
CisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGJvb2wgY2FzdF9yZXMgPSB2YWx1ZS0+YXNTdHJp
bmcoJnMpOycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIEFTU0VSVChjYXN0X3Jlcyk7JykK
KworICAgICAgICBhc3NlcnRfY29uZGl0aW9uID0gJyB8fCAnLmpvaW4oWydzID09ICIlcyInICUg
ZW51bV92YWx1ZSBmb3IgZW51bV92YWx1ZSBpbiBlbnVtX21lbWJlci50eXBlLmVudW1fdmFsdWVz
KCldKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBBU1NFUlQoJXMpOycgJSBhc3NlcnRfY29u
ZGl0aW9uKQorICAgICAgICBsaW5lcy5hcHBlbmQoJ30nKQorICAgICAgICBsaW5lcy5hcHBlbmQo
JyNlbmRpZiAvLyAhQVNTRVJUX0RJU0FCTEVEJykKKworICAgICAgICByZXR1cm4gJ1xuJy5qb2lu
KGxpbmVzKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2NvZGVnZW4vZ2VuZXJhdG9yLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdG9yLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ2OWU0NDhlY2ZkYzQ0
ZjM4YzI4MGQ2OGVmYTkwYjVmMDUyN2U1ZWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0b3IucHkKQEAgLTAs
MCArMSw0OTYgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKGMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMg
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
IyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisjIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBv
cy5wYXRoCitpbXBvcnQgcmUKK2Zyb20gc3RyaW5nIGltcG9ydCBUZW1wbGF0ZQorCitmcm9tIGdl
bmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IEdlbmVyYXRvclRlbXBsYXRlcyBhcyBUZW1wbGF0ZXMK
K2Zyb20gbW9kZWxzIGltcG9ydCBQcmltaXRpdmVUeXBlLCBPYmplY3RUeXBlLCBBcnJheVR5cGUs
IEVudW1UeXBlLCBBbGlhc2VkVHlwZQorCitsb2cgPSBsb2dnaW5nLmdldExvZ2dlcignZ2xvYmFs
JykKKworCitkZWYgdWNmaXJzdChzdHIpOgorICAgIHJldHVybiBzdHJbOjFdLnVwcGVyKCkgKyBz
dHJbMTpdCisKK19QUklNSVRJVkVfVE9fQ1BQX05BTUVfTUFQID0geworICAgICdib29sZWFuJzog
J2Jvb2wnLAorICAgICdpbnRlZ2VyJzogJ2ludCcsCisgICAgJ251bWJlcic6ICdkb3VibGUnLAor
ICAgICdzdHJpbmcnOiAnU3RyaW5nJywKKyAgICAnb2JqZWN0JzogJ0luc3BlY3Rvcjo6SW5zcGVj
dG9yT2JqZWN0JywKKyAgICAnYW55JzogJ0luc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUnCit9CisK
KyMgRklYTUU6IFRoaXMgc2hvdWxkIGJlIGNvbnZlcnRlZCBpbnRvIGEgcHJvcGVydHkgb24gdGhl
IGRvbWFpbiBpbiBKU09OLgorX0RPTUFJTl9UT19DUFBfR1VBUkRfTUFQID0geworICAgICdEYXRh
YmFzZSc6ICJFTkFCTEUoU1FMX0RBVEFCQVNFKSIsCisgICAgJ0luZGV4ZWREQic6ICJFTkFCTEUo
SU5ERVhFRF9EQVRBQkFTRSkiLAorICAgICdSZXBsYXknOiAiRU5BQkxFKFdFQl9SRVBMQVkpIiwK
K30KKworX0FMV0FZU19VUFBFUkNBU0VEX0VOVU1fVkFMVUVfU1VCU1RSSU5HUyA9IHNldChbJ0FQ
SScsICdDU1MnLCAnRE9NJywgJ0hUTUwnLCAnWEhSJywgJ1hNTCddKQorCisjIFRoZXNlIG9iamVj
dHMgYXJlIGJ1aWx0IG1hbnVhbGx5IGJ5IGNyZWF0aW5nIGFuZCBzZXR0aW5nIEluc3BlY3RvclZh
bHVlcy4KKyMgQmVmb3JlIHNlbmRpbmcgdGhlc2Ugb3ZlciB0aGUgcHJvdG9jb2wsIHRoZWlyIHNo
YXBlcyBhcmUgY2hlY2tlZCBhZ2FpbnN0IHRoZSBzcGVjaWZpY2F0aW9uLgorIyBTbywgYW55IHR5
cGVzIHJlZmVyZW5jZWQgYnkgdGhlc2UgdHlwZXMgcmVxdWlyZSBkZWJ1Zy1vbmx5IGFzc2VydGlv
bnMgdGhhdCBjaGVjayB2YWx1ZXMuCisjIENhbGN1bGF0aW5nIG5lY2Vzc2FyeSBhc3NlcnRpb25z
IGlzIGFubm95aW5nLCBhbmQgYWRkcyBhIGxvdCBvZiBjb21wbGV4aXR5IHRvIHRoZSBnZW5lcmF0
b3IuCisKKyMgRklYTUU6IFRoaXMgc2hvdWxkIGJlIGNvbnZlcnRlZCBpbnRvIGEgcHJvcGVydHkg
aW4gSlNPTi4KK19UWVBFU19ORUVESU5HX1JVTlRJTUVfQ0FTVFMgPSBzZXQoWworICAgICJSdW50
aW1lLlJlbW90ZU9iamVjdCIsCisgICAgIlJ1bnRpbWUuUHJvcGVydHlEZXNjcmlwdG9yIiwKKyAg
ICAiUnVudGltZS5JbnRlcm5hbFByb3BlcnR5RGVzY3JpcHRvciIsCisgICAgIkRlYnVnZ2VyLkZ1
bmN0aW9uRGV0YWlscyIsCisgICAgIkRlYnVnZ2VyLkNhbGxGcmFtZSIsCisgICAgIkNhbnZhcy5U
cmFjZUxvZyIsCisgICAgIkNhbnZhcy5SZXNvdXJjZUluZm8iLAorICAgICJDYW52YXMuUmVzb3Vy
Y2VTdGF0ZSIsCisgICAgIyBUaGlzIHNob3VsZCBiZSBhIHRlbXBvcmFyeSBoYWNrLiBUaW1lbGlu
ZUV2ZW50IHNob3VsZCBiZSBjcmVhdGVkIHZpYSBnZW5lcmF0ZWQgQysrIEFQSS4KKyAgICAiVGlt
ZWxpbmUuVGltZWxpbmVFdmVudCIsCisgICAgIyBGb3IgdGVzdGluZyBwdXJwb3NlcyBvbmx5Lgor
ICAgICJUZXN0LlR5cGVOZWVkaW5nQ2FzdCIKK10pCisKKyMgRklYTUU6IFRoaXMgc2hvdWxkIGJl
IGNvbnZlcnRlZCBpbnRvIGEgcHJvcGVydHkgaW4gSlNPTi4KK19UWVBFU19XSVRIX09QRU5fRklF
TERTID0gc2V0KFsKKyAgICAiVGltZWxpbmUuVGltZWxpbmVFdmVudCIsCisgICAgIyBJbnNwZWN0
b3JTdHlsZVNoZWV0IG5vdCBvbmx5IGNyZWF0ZXMgdGhpcyBwcm9wZXJ0eSBidXQgd2FudHMgdG8g
cmVhZCBpdCBhbmQgbW9kaWZ5IGl0LgorICAgICJDU1MuQ1NTUHJvcGVydHkiLAorICAgICMgSW5z
cGVjdG9yUmVzb3VyY2VBZ2VudCBuZWVkcyB0byB1cGRhdGUgbWltZS10eXBlLgorICAgICJOZXR3
b3JrLlJlc3BvbnNlIiwKKyAgICAjIEZvciB0ZXN0aW5nIHB1cnBvc2VzIG9ubHkuCisgICAgIlRl
c3QuT3BlblBhcmFtZXRlckJ1bmRsZSIKK10pCisKKworY2xhc3MgR2VuZXJhdG9yOgorICAgIGRl
ZiBfX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpOgorICAgICAgICBzZWxmLl9t
b2RlbCA9IG1vZGVsCisgICAgICAgIHNlbGYuX2lucHV0X2ZpbGVwYXRoID0gaW5wdXRfZmlsZXBh
dGgKKworICAgIGRlZiBtb2RlbChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX21vZGVsCisK
KyAgICBkZWYgZ2VuZXJhdGVfbGljZW5zZShzZWxmKToKKyAgICAgICAgcmV0dXJuIFRlbXBsYXRl
KFRlbXBsYXRlcy5Db3B5cmlnaHRCbG9jaykuc3Vic3RpdHV0ZShOb25lLCBpbnB1dEZpbGVuYW1l
PW9zLnBhdGguYmFzZW5hbWUoc2VsZi5faW5wdXRfZmlsZXBhdGgpKQorCisgICAgIyBUaGVzZSBt
ZXRob2RzIGFyZSBvdmVycmlkZGVuIGJ5IHN1YmNsYXNzZXMuCisgICAgZGVmIGRvbWFpbnNfdG9f
Z2VuZXJhdGUoc2VsZik6CisgICAgICAgIHJldHVybiBmaWx0ZXIobGFtYmRhIGRvbWFpbjogbm90
IGRvbWFpbi5pc19zdXBwbGVtZW50YWwsIHNlbGYubW9kZWwoKS5kb21haW5zKQorCisgICAgZGVm
IGdlbmVyYXRlX291dHB1dChzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIG91dHB1dF9m
aWxlbmFtZShzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIGVuY29kaW5nX2Zvcl9lbnVt
X3ZhbHVlKHNlbGYsIGVudW1fdmFsdWUpOgorICAgICAgICBpZiBub3QgaGFzYXR0cihzZWxmLCAi
X2Fzc2lnbmVkX2VudW1fdmFsdWVzIik6CisgICAgICAgICAgICBzZWxmLl90cmF2ZXJzZV9hbmRf
YXNzaWduX2VudW1fdmFsdWVzKCkKKworICAgICAgICByZXR1cm4gc2VsZi5fZW51bV92YWx1ZV9l
bmNvZGluZ3NbZW51bV92YWx1ZV0KKworICAgIGRlZiBhc3NpZ25lZF9lbnVtX3ZhbHVlcyhzZWxm
KToKKyAgICAgICAgaWYgbm90IGhhc2F0dHIoc2VsZiwgIl9hc3NpZ25lZF9lbnVtX3ZhbHVlcyIp
OgorICAgICAgICAgICAgc2VsZi5fdHJhdmVyc2VfYW5kX2Fzc2lnbl9lbnVtX3ZhbHVlcygpCisK
KyAgICAgICAgcmV0dXJuIHNlbGYuX2Fzc2lnbmVkX2VudW1fdmFsdWVzWzpdICAjIFNsaWNlLgor
CisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiB0eXBlX25lZWRzX3J1bnRpbWVfY2FzdHMoX3R5
cGUpOgorICAgICAgICByZXR1cm4gX3R5cGUucXVhbGlmaWVkX25hbWUoKSBpbiBfVFlQRVNfTkVF
RElOR19SVU5USU1FX0NBU1RTCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIHR5cGVfaGFz
X29wZW5fZmllbGRzKF90eXBlKToKKyAgICAgICAgcmV0dXJuIF90eXBlLnF1YWxpZmllZF9uYW1l
KCkgaW4gX1RZUEVTX1dJVEhfT1BFTl9GSUVMRFMKKworICAgIGRlZiB0eXBlX25lZWRzX3NoYXBl
X2Fzc2VydGlvbnMoc2VsZiwgX3R5cGUpOgorICAgICAgICBpZiBub3QgaGFzYXR0cihzZWxmLCAi
X3R5cGVzX25lZWRpbmdfc2hhcGVfYXNzZXJ0aW9ucyIpOgorICAgICAgICAgICAgc2VsZi5jYWxj
dWxhdGVfdHlwZXNfcmVxdWlyaW5nX3NoYXBlX2Fzc2VydGlvbnMoc2VsZi5tb2RlbCgpLmRvbWFp
bnMpCisKKyAgICAgICAgcmV0dXJuIF90eXBlIGluIHNlbGYuX3R5cGVzX25lZWRpbmdfc2hhcGVf
YXNzZXJ0aW9ucworCisgICAgIyBUbyByZXN0cmljdCB0aGUgZG9tYWlucyBvdmVyIHdoaWNoIHdl
IGNvbXB1dGUgdHlwZXMgbmVlZGluZyBhc3NlcnRpb25zLCBjYWxsIHRoaXMgbWV0aG9kCisgICAg
IyBiZWZvcmUgZ2VuZXJhdGluZyBhbnkgb3V0cHV0IHdpdGggdGhlIGRlc2lyZWQgZG9tYWlucyBw
YXJhbWV0ZXIuIFRoZSBjb21wdXRlZAorICAgICMgc2V0IG9mIHR5cGVzIHdpbGwgbm90IGJlIGF1
dG9tYXRpY2FsbHkgcmVnZW5lcmF0ZWQgb24gc3Vic2VxdWVudCBjYWxscyB0bworICAgICMgR2Vu
ZXJhdG9yLnR5cGVzX25lZWRpbmdfc2hhcGVfYXNzZXJ0aW9ucygpLgorICAgIGRlZiBjYWxjdWxh
dGVfdHlwZXNfcmVxdWlyaW5nX3NoYXBlX2Fzc2VydGlvbnMoc2VsZiwgZG9tYWlucyk6CisgICAg
ICAgIGRvbWFpbl9uYW1lcyA9IG1hcChsYW1iZGEgZG9tYWluOiBkb21haW4uZG9tYWluX25hbWUs
IGRvbWFpbnMpCisgICAgICAgIGxvZy5kZWJ1ZygiPiBDYWxjdWxhdGluZyB0eXBlcyB0aGF0IG5l
ZWQgc2hhcGUgYXNzZXJ0aW9ucyAoZWxpZ2libGUgZG9tYWluczogJXMpIiAlICIsICIuam9pbihk
b21haW5fbmFtZXMpKQorCisgICAgICAgICMgTXV0YXRlcyB0aGUgcGFzc2VkLWluIHNldDsgdGhp
cyBzaW1wbGlmaWVzIGNoZWNrcyB0byBwcmV2ZW50IGluZmluaXRlIHJlY3Vyc2lvbi4KKyAgICAg
ICAgZGVmIGdhdGhlcl90cmFuc2l0aXZlbHlfcmVmZXJlbmNlZF90eXBlcyhfdHlwZSwgZ2F0aGVy
ZWRfdHlwZXMpOgorICAgICAgICAgICAgaWYgX3R5cGUgaW4gZ2F0aGVyZWRfdHlwZXM6CisgICAg
ICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIE9i
amVjdFR5cGUpOgorICAgICAgICAgICAgICAgIGxvZy5kZWJ1ZygiPiBBZGRpbmcgdHlwZSAlcyB0
byBsaXN0IG9mIHR5cGVzIG5lZWRpbmcgc2hhcGUgYXNzZXJ0aW9ucy4iICUgX3R5cGUucXVhbGlm
aWVkX25hbWUoKSkKKyAgICAgICAgICAgICAgICBnYXRoZXJlZF90eXBlcy5hZGQoX3R5cGUpCisg
ICAgICAgICAgICAgICAgZm9yIHR5cGVfbWVtYmVyIGluIF90eXBlLm1lbWJlcnM6CisgICAgICAg
ICAgICAgICAgICAgIGdhdGhlcl90cmFuc2l0aXZlbHlfcmVmZXJlbmNlZF90eXBlcyh0eXBlX21l
bWJlci50eXBlLCBnYXRoZXJlZF90eXBlcykKKyAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShf
dHlwZSwgRW51bVR5cGUpOgorICAgICAgICAgICAgICAgIGxvZy5kZWJ1ZygiPiBBZGRpbmcgdHlw
ZSAlcyB0byBsaXN0IG9mIHR5cGVzIG5lZWRpbmcgc2hhcGUgYXNzZXJ0aW9ucy4iICUgX3R5cGUu
cXVhbGlmaWVkX25hbWUoKSkKKyAgICAgICAgICAgICAgICBnYXRoZXJlZF90eXBlcy5hZGQoX3R5
cGUpCisgICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2UoX3R5cGUsIEFsaWFzZWRUeXBlKToKKyAg
ICAgICAgICAgICAgICBnYXRoZXJfdHJhbnNpdGl2ZWx5X3JlZmVyZW5jZWRfdHlwZXMoX3R5cGUu
YWxpYXNlZF90eXBlLCBnYXRoZXJlZF90eXBlcykKKyAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5j
ZShfdHlwZSwgQXJyYXlUeXBlKToKKyAgICAgICAgICAgICAgICBnYXRoZXJfdHJhbnNpdGl2ZWx5
X3JlZmVyZW5jZWRfdHlwZXMoX3R5cGUuZWxlbWVudF90eXBlLCBnYXRoZXJlZF90eXBlcykKKwor
ICAgICAgICBmb3VuZF90eXBlcyA9IHNldCgpCisgICAgICAgIGZvciBkb21haW4gaW4gZG9tYWlu
czoKKyAgICAgICAgICAgIGZvciBkZWNsYXJhdGlvbiBpbiBkb21haW4udHlwZV9kZWNsYXJhdGlv
bnM6CisgICAgICAgICAgICAgICAgaWYgZGVjbGFyYXRpb24udHlwZS5xdWFsaWZpZWRfbmFtZSgp
IGluIF9UWVBFU19ORUVESU5HX1JVTlRJTUVfQ0FTVFM6CisgICAgICAgICAgICAgICAgICAgIGxv
Zy5kZWJ1ZygiPiBHYXRoZXJpbmcgdHlwZXMgcmVmZXJlbmNlZCBieSAlcyB0byBnZW5lcmF0ZSBz
aGFwZSBhc3NlcnRpb25zLiIgJSBkZWNsYXJhdGlvbi50eXBlLnF1YWxpZmllZF9uYW1lKCkpCisg
ICAgICAgICAgICAgICAgICAgIGdhdGhlcl90cmFuc2l0aXZlbHlfcmVmZXJlbmNlZF90eXBlcyhk
ZWNsYXJhdGlvbi50eXBlLCBmb3VuZF90eXBlcykKKworICAgICAgICBzZWxmLl90eXBlc19uZWVk
aW5nX3NoYXBlX2Fzc2VydGlvbnMgPSBmb3VuZF90eXBlcworCisgICAgIyBQcml2YXRlIGhlbHBl
ciBpbnN0YW5jZSBtZXRob2RzLgorICAgIGRlZiBfdHJhdmVyc2VfYW5kX2Fzc2lnbl9lbnVtX3Zh
bHVlcyhzZWxmKToKKyAgICAgICAgc2VsZi5fZW51bV92YWx1ZV9lbmNvZGluZ3MgPSB7fQorICAg
ICAgICBzZWxmLl9hc3NpZ25lZF9lbnVtX3ZhbHVlcyA9IFtdCisgICAgICAgIGFsbF90eXBlcyA9
IFtdCisKKyAgICAgICAgZG9tYWlucyA9IHNlbGYuZG9tYWluc190b19nZW5lcmF0ZSgpCisKKyAg
ICAgICAgZm9yIGRvbWFpbiBpbiBkb21haW5zOgorICAgICAgICAgICAgZm9yIHR5cGVfZGVjbGFy
YXRpb24gaW4gZG9tYWluLnR5cGVfZGVjbGFyYXRpb25zOgorICAgICAgICAgICAgICAgIGFsbF90
eXBlcy5hcHBlbmQodHlwZV9kZWNsYXJhdGlvbi50eXBlKQorICAgICAgICAgICAgICAgIGZvciB0
eXBlX21lbWJlciBpbiB0eXBlX2RlY2xhcmF0aW9uLnR5cGVfbWVtYmVyczoKKyAgICAgICAgICAg
ICAgICAgICAgYWxsX3R5cGVzLmFwcGVuZCh0eXBlX21lbWJlci50eXBlKQorCisgICAgICAgIGZv
ciBkb21haW4gaW4gZG9tYWluczoKKyAgICAgICAgICAgIGZvciBldmVudCBpbiBkb21haW4uZXZl
bnRzOgorICAgICAgICAgICAgICAgIGFsbF90eXBlcy5leHRlbmQoW3BhcmFtZXRlci50eXBlIGZv
ciBwYXJhbWV0ZXIgaW4gZXZlbnQuZXZlbnRfcGFyYW1ldGVyc10pCisKKyAgICAgICAgZm9yIGRv
bWFpbiBpbiBkb21haW5zOgorICAgICAgICAgICAgZm9yIGNvbW1hbmQgaW4gZG9tYWluLmNvbW1h
bmRzOgorICAgICAgICAgICAgICAgIGFsbF90eXBlcy5leHRlbmQoW3BhcmFtZXRlci50eXBlIGZv
ciBwYXJhbWV0ZXIgaW4gY29tbWFuZC5jYWxsX3BhcmFtZXRlcnNdKQorICAgICAgICAgICAgICAg
IGFsbF90eXBlcy5leHRlbmQoW3BhcmFtZXRlci50eXBlIGZvciBwYXJhbWV0ZXIgaW4gY29tbWFu
ZC5yZXR1cm5fcGFyYW1ldGVyc10pCisKKyAgICAgICAgZm9yIF90eXBlIGluIGFsbF90eXBlczoK
KyAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKF90eXBlLCBFbnVtVHlwZSk6CisgICAgICAg
ICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIG1hcChzZWxmLl9hc3NpZ25fZW5jb2Rpbmdf
Zm9yX2VudW1fdmFsdWUsIF90eXBlLmVudW1fdmFsdWVzKCkpCisKKyAgICBkZWYgX2Fzc2lnbl9l
bmNvZGluZ19mb3JfZW51bV92YWx1ZShzZWxmLCBlbnVtX3ZhbHVlKToKKyAgICAgICAgaWYgZW51
bV92YWx1ZSBpbiBzZWxmLl9lbnVtX3ZhbHVlX2VuY29kaW5nczoKKyAgICAgICAgICAgIHJldHVy
bgorCisgICAgICAgIHNlbGYuX2VudW1fdmFsdWVfZW5jb2RpbmdzW2VudW1fdmFsdWVdID0gbGVu
KHNlbGYuX2Fzc2lnbmVkX2VudW1fdmFsdWVzKQorICAgICAgICBzZWxmLl9hc3NpZ25lZF9lbnVt
X3ZhbHVlcy5hcHBlbmQoZW51bV92YWx1ZSkKKworICAgICMgTWlzY2VsbGFuZW91cyB0ZXh0IG1h
bmlwdWxhdGlvbiByb3V0aW5lcy4KKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIHdyYXBfd2l0
aF9ndWFyZF9mb3JfZG9tYWluKGRvbWFpbiwgdGV4dCk6CisgICAgICAgIGd1YXJkID0gX0RPTUFJ
Tl9UT19DUFBfR1VBUkRfTUFQLmdldChkb21haW4uZG9tYWluX25hbWUpCisgICAgICAgIGlmIGd1
YXJkIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgbGluZXMgPSBbCisgICAgICAgICAgICAgICAg
JyNpZiAlcycgJSBndWFyZCwKKyAgICAgICAgICAgICAgICB0ZXh0LAorICAgICAgICAgICAgICAg
ICcjZW5kaWYgLy8gJXMnICUgZ3VhcmQKKyAgICAgICAgICAgICAgICBdCisgICAgICAgICAgICBy
ZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJu
IHRleHQKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgc3R5bGl6ZWRfbmFtZV9mb3JfZW51
bV92YWx1ZShlbnVtX3ZhbHVlKToKKyAgICAgICAgcmVnZXggPSAnKCVzKScgJSAifCIuam9pbihf
QUxXQVlTX1VQUEVSQ0FTRURfRU5VTV9WQUxVRV9TVUJTVFJJTkdTKQorCisgICAgICAgIGRlZiBy
ZXBsYWNlQ2FsbGJhY2sobWF0Y2gpOgorICAgICAgICAgICAgcmV0dXJuIG1hdGNoLmdyb3VwKDEp
LnVwcGVyKCkKKworICAgICAgICAjIFNwbGl0IG9uIGh5cGhlbiwgaW50cm9kdWNlIGNhbWVsY2Fz
ZSwgYW5kIGZvcmNlIHVwcGVyY2FzaW5nIG9mIGFjcm9ueW1zLgorICAgICAgICBzdWJ3b3JkcyA9
IG1hcCh1Y2ZpcnN0LCBlbnVtX3ZhbHVlLnNwbGl0KCctJykpCisgICAgICAgIHJldHVybiByZS5z
dWIocmVnZXgsIHJlcGxhY2VDYWxsYmFjaywgIiIuam9pbihzdWJ3b3JkcyksIGZsYWdzPXJlLklH
Tk9SRUNBU0UpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGtleWVkX2dldF9tZXRob2Rf
Zm9yX3R5cGUoX3R5cGUpOgorICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBPYmplY3RUeXBl
KToKKyAgICAgICAgICAgIHJldHVybiAnZ2V0T2JqZWN0JworICAgICAgICBpZiBpc2luc3RhbmNl
KF90eXBlLCBBcnJheVR5cGUpOgorICAgICAgICAgICAgcmV0dXJuICdnZXRBcnJheScKKyAgICAg
ICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgUHJpbWl0aXZlVHlwZSk6CisgICAgICAgICAgICBpZiBf
dHlwZS5yYXdfbmFtZSgpIGlzICdpbnRlZ2VyJzoKKyAgICAgICAgICAgICAgICByZXR1cm4gJ2dl
dEludCcKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuICdnZXQnICsg
dWNmaXJzdChfdHlwZS5yYXdfbmFtZSgpKQorICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBB
bGlhc2VkVHlwZSk6CisgICAgICAgICAgICByZXR1cm4gR2VuZXJhdG9yLmtleWVkX2dldF9tZXRo
b2RfZm9yX3R5cGUoX3R5cGUuYWxpYXNlZF90eXBlKQorICAgICAgICBpZiBpc2luc3RhbmNlKF90
eXBlLCBFbnVtVHlwZSk6CisgICAgICAgICAgICByZXR1cm4gR2VuZXJhdG9yLmtleWVkX2dldF9t
ZXRob2RfZm9yX3R5cGUoX3R5cGUucHJpbWl0aXZlX3R5cGUpCisKKyAgICBAc3RhdGljbWV0aG9k
CisgICAgZGVmIGtleWVkX3NldF9tZXRob2RfZm9yX3R5cGUoX3R5cGUpOgorICAgICAgICBpZiBp
c2luc3RhbmNlKF90eXBlLCBPYmplY3RUeXBlKToKKyAgICAgICAgICAgIHJldHVybiAnc2V0T2Jq
ZWN0JworICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBBcnJheVR5cGUpOgorICAgICAgICAg
ICAgcmV0dXJuICdzZXRBcnJheScKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgUHJpbWl0
aXZlVHlwZSk6CisgICAgICAgICAgICBpZiBfdHlwZS5yYXdfbmFtZSgpIGluIFsnaW50ZWdlcics
ICdudW1iZXInXToKKyAgICAgICAgICAgICAgICByZXR1cm4gJ3NldE51bWJlcicKKyAgICAgICAg
ICAgIGVsaWYgX3R5cGUucmF3X25hbWUoKSBpbiBbJ2FueSddOgorICAgICAgICAgICAgICAgIHJl
dHVybiAnc2V0VmFsdWUnCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVy
biAnc2V0JyArIHVjZmlyc3QoX3R5cGUucmF3X25hbWUoKSkKKyAgICAgICAgaWYgaXNpbnN0YW5j
ZShfdHlwZSwgQWxpYXNlZFR5cGUpOgorICAgICAgICAgICAgcmV0dXJuIEdlbmVyYXRvci5rZXll
ZF9zZXRfbWV0aG9kX2Zvcl90eXBlKF90eXBlLmFsaWFzZWRfdHlwZSkKKyAgICAgICAgaWYgaXNp
bnN0YW5jZShfdHlwZSwgRW51bVR5cGUpOgorICAgICAgICAgICAgcmV0dXJuIEdlbmVyYXRvci5r
ZXllZF9zZXRfbWV0aG9kX2Zvcl90eXBlKF90eXBlLnByaW1pdGl2ZV90eXBlKQorCisgICAgIyBH
ZW5lcmF0ZSB0eXBlIHJlcHJlc2VudGF0aW9ucyBmb3IgdmFyaW91cyBzaXR1YXRpb25zLgorICAg
IEBzdGF0aWNtZXRob2QKKyAgICBkZWYgdHlwZV9idWlsZGVyX3N0cmluZ19mb3JfdHlwZShfdHlw
ZSk6CisgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIE9iamVjdFR5cGUpIGFuZCBsZW4oX3R5
cGUubWVtYmVycykgPT0gMDoKKyAgICAgICAgICAgIHJldHVybiAnSW5zcGVjdG9yOjpJbnNwZWN0
b3JPYmplY3QnCisgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIChPYmplY3RUeXBlLCBBbGlh
c2VkVHlwZSwgRW51bVR5cGUpKToKKyAgICAgICAgICAgIHJldHVybiAnSW5zcGVjdG9yOjpUeXBl
QnVpbGRlcjo6JXM6OiVzJyAlIChfdHlwZS50eXBlX2RvbWFpbigpLmRvbWFpbl9uYW1lLCBfdHlw
ZS5yYXdfbmFtZSgpKQorICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBBcnJheVR5cGUpOgor
ICAgICAgICAgICAgcmV0dXJuICdJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheTwlcz4nICUg
R2VuZXJhdG9yLnR5cGVfYnVpbGRlcl9zdHJpbmdfZm9yX3R5cGUoX3R5cGUuZWxlbWVudF90eXBl
KQorICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBQcmltaXRpdmVUeXBlKToKKyAgICAgICAg
ICAgIHJldHVybiBHZW5lcmF0b3IuY3BwX25hbWVfZm9yX3ByaW1pdGl2ZV90eXBlKF90eXBlKQor
CisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiB0eXBlX2J1aWxkZXJfc3RyaW5nX2Zvcl90eXBl
X21lbWJlcih0eXBlX21lbWJlciwgb2JqZWN0X2RlY2xhcmF0aW9uKToKKyAgICAgICAgaWYgaXNp
bnN0YW5jZSh0eXBlX21lbWJlci50eXBlLCBFbnVtVHlwZSkgYW5kIHR5cGVfbWVtYmVyLnR5cGUu
aXNfYW5vbnltb3VzOgorICAgICAgICAgICAgcmV0dXJuICc6Oicuam9pbihbR2VuZXJhdG9yLnR5
cGVfYnVpbGRlcl9zdHJpbmdfZm9yX3R5cGUob2JqZWN0X2RlY2xhcmF0aW9uLnR5cGUpLCB1Y2Zp
cnN0KHR5cGVfbWVtYmVyLm1lbWJlcl9uYW1lKV0pCisgICAgICAgIGVsc2U6CisgICAgICAgICAg
ICByZXR1cm4gR2VuZXJhdG9yLnR5cGVfYnVpbGRlcl9zdHJpbmdfZm9yX3R5cGUodHlwZV9tZW1i
ZXIudHlwZSkKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgdHlwZV9zdHJpbmdfZm9yX3Vu
Y2hlY2tlZF9mb3JtYWxfaW5fcGFyYW1ldGVyKHBhcmFtZXRlcik6CisgICAgICAgIF90eXBlID0g
cGFyYW1ldGVyLnR5cGUKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgQWxpYXNlZFR5cGUp
OgorICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5hbGlhc2VkX3R5cGUgICMgRmFsbCB0aHJvdWdo
IHRvIGVudW0gb3IgcHJpbWl0aXZlLgorCisgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEVu
dW1UeXBlKToKKyAgICAgICAgICAgIF90eXBlID0gX3R5cGUucHJpbWl0aXZlX3R5cGUgICMgRmFs
bCB0aHJvdWdoIHRvIHByaW1pdGl2ZS4KKworICAgICAgICBzaWdpbCA9ICcqJyBpZiBwYXJhbWV0
ZXIuaXNfb3B0aW9uYWwgZWxzZSAnJicKKyAgICAgICAgIyBUaGlzIGhhbmRsZXMgdGhlICdhbnkn
IHR5cGUgYW5kIG9iamVjdHMgd2l0aCBkZWZpbmVkIHByb3BlcnRpZXMuCisgICAgICAgIGlmIGlz
aW5zdGFuY2UoX3R5cGUsIE9iamVjdFR5cGUpIG9yIF90eXBlLnF1YWxpZmllZF9uYW1lKCkgaXMg
J29iamVjdCc6CisgICAgICAgICAgICByZXR1cm4gJ2NvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Oklu
c3BlY3Rvck9iamVjdD4nICsgc2lnaWwKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgQXJy
YXlUeXBlKToKKyAgICAgICAgICAgIHJldHVybiAnY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5z
cGVjdG9yQXJyYXk+JyArIHNpZ2lsCisgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIFByaW1p
dGl2ZVR5cGUpOgorICAgICAgICAgICAgY3BwX25hbWUgPSBHZW5lcmF0b3IuY3BwX25hbWVfZm9y
X3ByaW1pdGl2ZV90eXBlKF90eXBlKQorICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlv
bmFsOgorICAgICAgICAgICAgICAgIHJldHVybiAnY29uc3QgJXMqJyAlIGNwcF9uYW1lCisgICAg
ICAgICAgICBlbGlmIF90eXBlLnJhd19uYW1lKCkgaW4gWydzdHJpbmcnXToKKyAgICAgICAgICAg
ICAgICByZXR1cm4gJ2NvbnN0ICVzJicgJSBjcHBfbmFtZQorICAgICAgICAgICAgZWxzZToKKyAg
ICAgICAgICAgICAgICByZXR1cm4gY3BwX25hbWUKKworICAgICAgICByZXR1cm4gInVua25vd25f
dW5jaGVja2VkX2Zvcm1hbF9pbl9wYXJhbWV0ZXJfdHlwZSIKKworICAgIEBzdGF0aWNtZXRob2QK
KyAgICBkZWYgdHlwZV9zdHJpbmdfZm9yX2NoZWNrZWRfZm9ybWFsX2V2ZW50X3BhcmFtZXRlcihw
YXJhbWV0ZXIpOgorICAgICAgICByZXR1cm4gR2VuZXJhdG9yLnR5cGVfc3RyaW5nX2Zvcl90eXBl
X3dpdGhfbmFtZShwYXJhbWV0ZXIudHlwZSwgcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lLCBwYXJh
bWV0ZXIuaXNfb3B0aW9uYWwpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIHR5cGVfc3Ry
aW5nX2Zvcl90eXBlX21lbWJlcihtZW1iZXIpOgorICAgICAgICByZXR1cm4gR2VuZXJhdG9yLnR5
cGVfc3RyaW5nX2Zvcl90eXBlX3dpdGhfbmFtZShtZW1iZXIudHlwZSwgbWVtYmVyLm1lbWJlcl9u
YW1lLCBGYWxzZSkKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgdHlwZV9zdHJpbmdfZm9y
X3R5cGVfd2l0aF9uYW1lKF90eXBlLCB0eXBlX25hbWUsIGlzX29wdGlvbmFsKToKKyAgICAgICAg
aWYgaXNpbnN0YW5jZShfdHlwZSwgKEFycmF5VHlwZSwgT2JqZWN0VHlwZSkpOgorICAgICAgICAg
ICAgcmV0dXJuICdQYXNzUmVmUHRyPCVzPicgJSBHZW5lcmF0b3IudHlwZV9idWlsZGVyX3N0cmlu
Z19mb3JfdHlwZShfdHlwZSkKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgQWxpYXNlZFR5
cGUpOgorICAgICAgICAgICAgYnVpbGRlcl90eXBlID0gR2VuZXJhdG9yLnR5cGVfYnVpbGRlcl9z
dHJpbmdfZm9yX3R5cGUoX3R5cGUpCisgICAgICAgICAgICBpZiBpc19vcHRpb25hbDoKKyAgICAg
ICAgICAgICAgICByZXR1cm4gJ2NvbnN0ICVzKiBjb25zdCcgJSBidWlsZGVyX3R5cGUKKyAgICAg
ICAgICAgIGVsaWYgX3R5cGUuYWxpYXNlZF90eXBlLnF1YWxpZmllZF9uYW1lKCkgaW4gWydpbnRl
Z2VyJywgJ251bWJlciddOgorICAgICAgICAgICAgICAgIHJldHVybiBHZW5lcmF0b3IuY3BwX25h
bWVfZm9yX3ByaW1pdGl2ZV90eXBlKF90eXBlLmFsaWFzZWRfdHlwZSkKKyAgICAgICAgICAgIGVs
aWYgX3R5cGUuYWxpYXNlZF90eXBlLnF1YWxpZmllZF9uYW1lKCkgaW4gWydzdHJpbmcnXToKKyAg
ICAgICAgICAgICAgICByZXR1cm4gJ2NvbnN0ICVzJicgJSBidWlsZGVyX3R5cGUKKyAgICAgICAg
ICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIGJ1aWxkZXJfdHlwZQorICAgICAgICBp
ZiBpc2luc3RhbmNlKF90eXBlLCBQcmltaXRpdmVUeXBlKToKKyAgICAgICAgICAgIGNwcF9uYW1l
ID0gR2VuZXJhdG9yLmNwcF9uYW1lX2Zvcl9wcmltaXRpdmVfdHlwZShfdHlwZSkKKyAgICAgICAg
ICAgIGlmIF90eXBlLnF1YWxpZmllZF9uYW1lKCkgaW4gWydvYmplY3QnXToKKyAgICAgICAgICAg
ICAgICByZXR1cm4gJ1Bhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+JworICAg
ICAgICAgICAgZWxpZiBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpIGluIFsnYW55J106CisgICAgICAg
ICAgICAgICAgcmV0dXJuICdQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+Jwor
ICAgICAgICAgICAgZWxpZiBpc19vcHRpb25hbDoKKyAgICAgICAgICAgICAgICByZXR1cm4gJ2Nv
bnN0ICVzKiBjb25zdCcgJSBjcHBfbmFtZQorICAgICAgICAgICAgZWxpZiBfdHlwZS5xdWFsaWZp
ZWRfbmFtZSgpIGluIFsnc3RyaW5nJ106CisgICAgICAgICAgICAgICAgcmV0dXJuICdjb25zdCAl
cyYnICUgY3BwX25hbWUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJu
IGNwcF9uYW1lCisgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKToKKyAgICAg
ICAgICAgIGlmIF90eXBlLmlzX2Fub255bW91czoKKyAgICAgICAgICAgICAgICBlbnVtX3R5cGVf
bmFtZSA9IHVjZmlyc3QodHlwZV9uYW1lKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAg
ICAgICBlbnVtX3R5cGVfbmFtZSA9ICdJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjolczo6JXMnICUg
KF90eXBlLnR5cGVfZG9tYWluKCkuZG9tYWluX25hbWUsIF90eXBlLnJhd19uYW1lKCkpCisKKyAg
ICAgICAgICAgIGlmIGlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAgIHJldHVybiAnJXMqJyAl
IGVudW1fdHlwZV9uYW1lCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVy
biAnJXMnICUgZW51bV90eXBlX25hbWUKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgdHlw
ZV9zdHJpbmdfZm9yX2Zvcm1hbF9vdXRfcGFyYW1ldGVyKHBhcmFtZXRlcik6CisgICAgICAgIF90
eXBlID0gcGFyYW1ldGVyLnR5cGUKKworICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBBbGlh
c2VkVHlwZSk6CisgICAgICAgICAgICBfdHlwZSA9IF90eXBlLmFsaWFzZWRfdHlwZSAgIyBGYWxs
IHRocm91Z2guCisKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgKE9iamVjdFR5cGUsIEFy
cmF5VHlwZSkpOgorICAgICAgICAgICAgcmV0dXJuICdSZWZQdHI8JXM+JicgJSBHZW5lcmF0b3Iu
dHlwZV9idWlsZGVyX3N0cmluZ19mb3JfdHlwZShfdHlwZSkKKyAgICAgICAgaWYgaXNpbnN0YW5j
ZShfdHlwZSwgUHJpbWl0aXZlVHlwZSk6CisgICAgICAgICAgICBjcHBfbmFtZSA9IEdlbmVyYXRv
ci5jcHBfbmFtZV9mb3JfcHJpbWl0aXZlX3R5cGUoX3R5cGUpCisgICAgICAgICAgICBpZiBwYXJh
bWV0ZXIuaXNfb3B0aW9uYWw6CisgICAgICAgICAgICAgICAgcmV0dXJuICJJbnNwZWN0b3I6OlR5
cGVCdWlsZGVyOjpPcHRPdXRwdXQ8JXM+KiIgJSBjcHBfbmFtZQorICAgICAgICAgICAgZWxzZToK
KyAgICAgICAgICAgICAgICByZXR1cm4gJyVzKicgJSBjcHBfbmFtZQorICAgICAgICBpZiBpc2lu
c3RhbmNlKF90eXBlLCBFbnVtVHlwZSk6CisgICAgICAgICAgICBpZiBfdHlwZS5pc19hbm9ueW1v
dXM6CisgICAgICAgICAgICAgICAgcmV0dXJuICdJbnNwZWN0b3Ilc0JhY2tlbmREaXNwYXRjaGVy
SGFuZGxlcjo6JXMqJyAlIChfdHlwZS50eXBlX2RvbWFpbigpLmRvbWFpbl9uYW1lLCB1Y2ZpcnN0
KHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAg
ICAgICAgIHJldHVybiAnSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6JXM6OiVzKicgJSAoX3R5cGUu
dHlwZV9kb21haW4oKS5kb21haW5fbmFtZSwgX3R5cGUucmF3X25hbWUoKSkKKworICAgICAgICBy
YWlzZSBWYWx1ZUVycm9yKCJ1bmtub3duIGZvcm1hbCBvdXQgcGFyYW1ldGVyIHR5cGUuIikKKwor
ICAgICMgRklYTUU6IHRoaXMgaXMgb25seSBzbGlnaHRseSBkaWZmZXJlbnQgZnJvbSBvdXQgcGFy
YW1ldGVyczsgdGhleSBjb3VsZCBiZSB1bmlmaWVkLgorICAgIEBzdGF0aWNtZXRob2QKKyAgICBk
ZWYgdHlwZV9zdHJpbmdfZm9yX2Zvcm1hbF9hc3luY19wYXJhbWV0ZXIocGFyYW1ldGVyKToKKyAg
ICAgICAgX3R5cGUgPSBwYXJhbWV0ZXIudHlwZQorICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBl
LCBBbGlhc2VkVHlwZSk6CisgICAgICAgICAgICBfdHlwZSA9IF90eXBlLmFsaWFzZWRfdHlwZSAg
IyBGYWxsIHRocm91Z2guCisKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgRW51bVR5cGUp
OgorICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5wcmltaXRpdmVfdHlwZSAgIyBGYWxsIHRocm91
Z2guCisKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgKE9iamVjdFR5cGUsIEFycmF5VHlw
ZSkpOgorICAgICAgICAgICAgcmV0dXJuICdQYXNzUmVmUHRyPCVzPicgJSBHZW5lcmF0b3IudHlw
ZV9idWlsZGVyX3N0cmluZ19mb3JfdHlwZShfdHlwZSkKKyAgICAgICAgaWYgaXNpbnN0YW5jZShf
dHlwZSwgUHJpbWl0aXZlVHlwZSk6CisgICAgICAgICAgICBjcHBfbmFtZSA9IEdlbmVyYXRvci5j
cHBfbmFtZV9mb3JfcHJpbWl0aXZlX3R5cGUoX3R5cGUpCisgICAgICAgICAgICBpZiBwYXJhbWV0
ZXIuaXNfb3B0aW9uYWw6CisgICAgICAgICAgICAgICAgcmV0dXJuICJJbnNwZWN0b3I6OlR5cGVC
dWlsZGVyOjpPcHRPdXRwdXQ8JXM+KiIgJSBjcHBfbmFtZQorICAgICAgICAgICAgZWxpZiBfdHlw
ZS5xdWFsaWZpZWRfbmFtZSgpIGluIFsnaW50ZWdlcicsICdudW1iZXInXToKKyAgICAgICAgICAg
ICAgICByZXR1cm4gR2VuZXJhdG9yLmNwcF9uYW1lX2Zvcl9wcmltaXRpdmVfdHlwZShfdHlwZSkK
KyAgICAgICAgICAgIGVsaWYgX3R5cGUucXVhbGlmaWVkX25hbWUoKSBpbiBbJ3N0cmluZyddOgor
ICAgICAgICAgICAgICAgIHJldHVybiAnY29uc3QgJXMmJyAlIGNwcF9uYW1lCisgICAgICAgICAg
ICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBjcHBfbmFtZQorCisgICAgICAgIHJhaXNl
IFZhbHVlRXJyb3IoIlVua25vd24gZm9ybWFsIGFzeW5jIHBhcmFtZXRlciB0eXBlLiIpCisKKyAg
ICAjIEluLXBhcmFtZXRlcnMgZG9uJ3QgdXNlIGJ1aWxkZXIgdHlwZXMsIGJlY2F1c2UgdGhleSBj
b3VsZCBiZSBwYXNzZWQKKyAgICAjICJvcGVuIHR5cGVzIiB0aGF0IGFyZSBtYW51YWxseSBjb25z
dHJ1Y3RlZCBvdXQgb2YgSW5zcGVjdG9yT2JqZWN0cy4KKworICAgICMgRklYTUU6IE9ubHkgcGFy
YW1ldGVycyB0aGF0IGFyZSBhY3R1YWxseSBvcGVuIHR5cGVzIHNob3VsZCBuZWVkIG5vbi1idWls
ZGVyIHBhcmFtZXRlciB0eXBlcy4KKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIHR5cGVfc3Ry
aW5nX2Zvcl9zdGFja19pbl9wYXJhbWV0ZXIocGFyYW1ldGVyKToKKyAgICAgICAgX3R5cGUgPSBw
YXJhbWV0ZXIudHlwZQorICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBBbGlhc2VkVHlwZSk6
CisgICAgICAgICAgICBfdHlwZSA9IF90eXBlLmFsaWFzZWRfdHlwZSAgIyBGYWxsIHRocm91Z2gu
CisKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgRW51bVR5cGUpOgorICAgICAgICAgICAg
X3R5cGUgPSBfdHlwZS5wcmltaXRpdmVfdHlwZSAgIyBGYWxsIHRocm91Z2guCisKKyAgICAgICAg
aWYgaXNpbnN0YW5jZShfdHlwZSwgT2JqZWN0VHlwZSk6CisgICAgICAgICAgICByZXR1cm4gIlJl
ZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4iCisgICAgICAgIGlmIGlzaW5zdGFuY2Uo
X3R5cGUsIEFycmF5VHlwZSk6CisgICAgICAgICAgICByZXR1cm4gIlJlZlB0cjxJbnNwZWN0b3I6
Okluc3BlY3RvckFycmF5PiIKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgUHJpbWl0aXZl
VHlwZSk6CisgICAgICAgICAgICBjcHBfbmFtZSA9IEdlbmVyYXRvci5jcHBfbmFtZV9mb3JfcHJp
bWl0aXZlX3R5cGUoX3R5cGUpCisgICAgICAgICAgICBpZiBfdHlwZS5xdWFsaWZpZWRfbmFtZSgp
IGluIFsnYW55JywgJ29iamVjdCddOgorICAgICAgICAgICAgICAgIHJldHVybiAiUmVmUHRyPCVz
PiIgJSBHZW5lcmF0b3IuY3BwX25hbWVfZm9yX3ByaW1pdGl2ZV90eXBlKF90eXBlKQorICAgICAg
ICAgICAgZWxpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwgYW5kIF90eXBlLnF1YWxpZmllZF9uYW1l
KCkgbm90IGluIFsnYm9vbGVhbicsICdzdHJpbmcnLCAnaW50ZWdlciddOgorICAgICAgICAgICAg
ICAgIHJldHVybiAiSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6T3B0T3V0cHV0PCVzPiIgJSBjcHBf
bmFtZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gY3BwX25hbWUK
KworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgdHlwZV9zdHJpbmdfZm9yX3N0YWNrX291dF9w
YXJhbWV0ZXIocGFyYW1ldGVyKToKKyAgICAgICAgX3R5cGUgPSBwYXJhbWV0ZXIudHlwZQorICAg
ICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCAoQXJyYXlUeXBlLCBPYmplY3RUeXBlKSk6CisgICAg
ICAgICAgICByZXR1cm4gJ1JlZlB0cjwlcz4nICUgR2VuZXJhdG9yLnR5cGVfYnVpbGRlcl9zdHJp
bmdfZm9yX3R5cGUoX3R5cGUpCisgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEFsaWFzZWRU
eXBlKToKKyAgICAgICAgICAgIGJ1aWxkZXJfdHlwZSA9IEdlbmVyYXRvci50eXBlX2J1aWxkZXJf
c3RyaW5nX2Zvcl90eXBlKF90eXBlKQorICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlv
bmFsOgorICAgICAgICAgICAgICAgIHJldHVybiAiSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6T3B0
T3V0cHV0PCVzPiIgJSBidWlsZGVyX3R5cGUKKyAgICAgICAgICAgIHJldHVybiAnJXMnICUgYnVp
bGRlcl90eXBlCisgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIFByaW1pdGl2ZVR5cGUpOgor
ICAgICAgICAgICAgY3BwX25hbWUgPSBHZW5lcmF0b3IuY3BwX25hbWVfZm9yX3ByaW1pdGl2ZV90
eXBlKF90eXBlKQorICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgorICAgICAg
ICAgICAgICAgIHJldHVybiAiSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6T3B0T3V0cHV0PCVzPiIg
JSBjcHBfbmFtZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gY3Bw
X25hbWUKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgRW51bVR5cGUpOgorICAgICAgICAg
ICAgaWYgX3R5cGUuaXNfYW5vbnltb3VzOgorICAgICAgICAgICAgICAgIHJldHVybiAnSW5zcGVj
dG9yJXNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OiVzJyAlIChfdHlwZS50eXBlX2RvbWFpbigp
LmRvbWFpbl9uYW1lLCB1Y2ZpcnN0KHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkpCisgICAgICAg
ICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiAnSW5zcGVjdG9yOjpUeXBlQnVpbGRl
cjo6JXM6OiVzJyAlIChfdHlwZS50eXBlX2RvbWFpbigpLmRvbWFpbl9uYW1lLCBfdHlwZS5yYXdf
bmFtZSgpKQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBhc3NlcnRpb25fbWV0aG9kX2Zv
cl90eXBlX21lbWJlcih0eXBlX21lbWJlciwgb2JqZWN0X2RlY2xhcmF0aW9uKToKKworICAgICAg
ICBkZWYgYXNzZXJ0aW9uX21ldGhvZF9mb3JfdHlwZShfdHlwZSk6CisgICAgICAgICAgICByZXR1
cm4gJ0JpbmRpbmdUcmFpdHM8JXM+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZScgJSBHZW5l
cmF0b3IudHlwZV9idWlsZGVyX3N0cmluZ19mb3JfdHlwZShfdHlwZSkKKworICAgICAgICBpZiBp
c2luc3RhbmNlKHR5cGVfbWVtYmVyLnR5cGUsIEFsaWFzZWRUeXBlKToKKyAgICAgICAgICAgIHJl
dHVybiBhc3NlcnRpb25fbWV0aG9kX2Zvcl90eXBlKHR5cGVfbWVtYmVyLnR5cGUuYWxpYXNlZF90
eXBlKQorICAgICAgICBpZiBpc2luc3RhbmNlKHR5cGVfbWVtYmVyLnR5cGUsIEVudW1UeXBlKSBh
bmQgdHlwZV9tZW1iZXIudHlwZS5pc19hbm9ueW1vdXM6CisgICAgICAgICAgICByZXR1cm4gJ0Jp
bmRpbmdUcmFpdHM8JXM+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZScgJSBHZW5lcmF0b3Iu
dHlwZV9idWlsZGVyX3N0cmluZ19mb3JfdHlwZV9tZW1iZXIodHlwZV9tZW1iZXIsIG9iamVjdF9k
ZWNsYXJhdGlvbikKKworICAgICAgICByZXR1cm4gYXNzZXJ0aW9uX21ldGhvZF9mb3JfdHlwZSh0
eXBlX21lbWJlci50eXBlKQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBjcHBfbmFtZV9m
b3JfcHJpbWl0aXZlX3R5cGUoX3R5cGUpOgorICAgICAgICByZXR1cm4gX1BSSU1JVElWRV9UT19D
UFBfTkFNRV9NQVAuZ2V0KF90eXBlLnJhd19uYW1lKCkpCisKKyAgICBAc3RhdGljbWV0aG9kCisg
ICAgZGVmIGpzX25hbWVfZm9yX3BhcmFtZXRlcl90eXBlKF90eXBlKToKKyAgICAgICAgX3R5cGUg
PSBfdHlwZQorICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBBbGlhc2VkVHlwZSk6CisgICAg
ICAgICAgICBfdHlwZSA9IF90eXBlLmFsaWFzZWRfdHlwZSAgIyBGYWxsIHRocm91Z2guCisgICAg
ICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKToKKyAgICAgICAgICAgIF90eXBlID0g
X3R5cGUucHJpbWl0aXZlX3R5cGUgICMgRmFsbCB0aHJvdWdoLgorCisgICAgICAgIGlmIGlzaW5z
dGFuY2UoX3R5cGUsIChBcnJheVR5cGUsIE9iamVjdFR5cGUpKToKKyAgICAgICAgICAgIHJldHVy
biAnb2JqZWN0JworICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBQcmltaXRpdmVUeXBlKToK
KyAgICAgICAgICAgIGlmIF90eXBlLnF1YWxpZmllZF9uYW1lKCkgaW4gWydvYmplY3QnLCAnYW55
J106CisgICAgICAgICAgICAgICAgcmV0dXJuICdvYmplY3QnCisgICAgICAgICAgICBlbGlmIF90
eXBlLnF1YWxpZmllZF9uYW1lKCkgaW4gWydpbnRlZ2VyJywgJ251bWJlciddOgorICAgICAgICAg
ICAgICAgIHJldHVybiAnbnVtYmVyJworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAg
ICByZXR1cm4gX3R5cGUucXVhbGlmaWVkX25hbWUoKQorCisgICAgIyBEZWNpZGUgd2hldGhlciBj
ZXJ0YWluIGhlbHBlcnMgYXJlIG5lY2Vzc2FyeSBpbiBhIHNpdHVhdGlvbi4KKyAgICBAc3RhdGlj
bWV0aG9kCisgICAgZGVmIHNob3VsZF91c2Vfd3JhcHBlcl9mb3JfcmV0dXJuX3R5cGUoX3R5cGUp
OgorICAgICAgICByZXR1cm4gbm90IGlzaW5zdGFuY2UoX3R5cGUsIChBcnJheVR5cGUsIE9iamVj
dFR5cGUpKQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBzaG91bGRfcGFzc19ieV9jb3B5
X2Zvcl9yZXR1cm5fdHlwZShfdHlwZSk6CisgICAgICAgIHJldHVybiBpc2luc3RhbmNlKF90eXBl
LCAoQXJyYXlUeXBlLCBPYmplY3RUeXBlKSkgb3IgKGlzaW5zdGFuY2UoX3R5cGUsIChQcmltaXRp
dmVUeXBlKSkgYW5kIF90eXBlLnF1YWxpZmllZF9uYW1lKCkgPT0gIm9iamVjdCIpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5l
cmF0b3JfdGVtcGxhdGVzLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2NvZGVnZW4vZ2VuZXJhdG9yX3RlbXBsYXRlcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wYWE4NTNlY2E0
YjQzMDlkMzM2YWZmNjY3NWU4MDMxODg1NzJmYmZhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdG9yX3RlbXBs
YXRlcy5weQpAQCAtMCwwICsxLDI2NiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENv
cHlyaWdodCAoYykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHly
aWdodCAoYykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisjIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisjIEdlbmVyYXRv
ciB0ZW1wbGF0ZXMsIHdoaWNoIGNhbiBiZSBmaWxsZWQgd2l0aCBzdHJpbmcuVGVtcGxhdGUuCisj
IEZvbGxvd2luZyBhcmUgY2xhc3NlcyB0aGF0IGZpbGwgdGhlIHRlbXBsYXRlcyBmcm9tIHRoZSB0
eXBlY2hlY2tlZCBtb2RlbC4KKworCitjbGFzcyBHZW5lcmF0b3JUZW1wbGF0ZXM6CisgICAgQ29w
eXJpZ2h0QmxvY2sgPSAoCisgICAgIiIiLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSAke2lucHV0RmlsZW5hbWV9CisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkiIiIpCisKKyAgICBDcHBIZWFkZXJQcmVsdWRlID0gKAorICAgICIiIiNpZm5k
ZWYgJHtoZWFkZXJHdWFyZFN0cmluZ30KKyNkZWZpbmUgJHtoZWFkZXJHdWFyZFN0cmluZ30KKwor
I2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyR7aW5jbHVkZXN9CisKK25hbWVzcGFjZSBJbnNwZWN0
b3IgeworCiske3R5cGVkZWZzfSIiIikKKworICAgIENwcEhlYWRlclBvc3RsdWRlID0gKAorICAg
ICIiIn0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RP
UikKKworI2VuZGlmIC8vICFkZWZpbmVkKCR7aGVhZGVyR3VhcmRTdHJpbmd9KSIiIikKKworICAg
IENwcEltcGxlbWVudGF0aW9uUHJlbHVkZSA9ICgKKyAgICAiIiIjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAke3ByaW1hcnlJbmNsdWRlfQorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKwor
JHtzZWNvbmRhcnlJbmNsdWRlc30KKworbmFtZXNwYWNlIEluc3BlY3RvciB7IiIiKQorCisgICAg
Q3BwSW1wbGVtZW50YXRpb25Qb3N0bHVkZSA9ICgKKyAgICAiIiJ9IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisiIiIpCisKKyAgICBCYWNrZW5k
RGlzcGF0Y2hlckhlYWRlckRvbWFpbkhhbmRsZXJEZWNsYXJhdGlvbiA9ICgKKyAgICAiIiIke2Ns
YXNzQW5kRXhwb3J0TWFjcm99IEluc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXIgeworcHVibGljOgorJHtjb21tYW5kRGVjbGFyYXRpb25zfQorcHJvdGVjdGVkOgor
ICAgIHZpcnR1YWwgfkluc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXIoKTsKK307IiIiKQorCisgICAgQmFja2VuZERpc3BhdGNoZXJIZWFkZXJEb21haW5EaXNwYXRj
aGVyRGVjbGFyYXRpb24gPSAoCisgICAgIiIiJHtjbGFzc0FuZEV4cG9ydE1hY3JvfSBJbnNwZWN0
b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9y
OjpJbnNwZWN0b3JTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAg
c3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVy
PiBjcmVhdGUoSW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciosIEluc3BlY3Rv
ciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKKyAgICB2aXJ0dWFsIHZv
aWQgZGlzcGF0Y2gobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBQYXNzUmVmUHRy
PEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBtZXNzYWdlKSBvdmVycmlkZTsKKyR7Y29tbWFu
ZERlY2xhcmF0aW9uc30KK3ByaXZhdGU6CisgICAgSW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tl
bmREaXNwYXRjaGVyKEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqLCBJbnNw
ZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7CisgICAgSW5zcGVj
dG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogbV9hZ2VudDsKK307IiIi
KQorCisgICAgQmFja2VuZERpc3BhdGNoZXJIZWFkZXJBc3luY0NvbW1hbmREZWNsYXJhdGlvbiA9
ICgKKyAgICAiIiIgICAgY2xhc3MgJHtjYWxsYmFja05hbWV9IDogcHVibGljIEluc3BlY3Rvcjo6
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZSB7CisgICAgcHVibGljOgor
ICAgICAgICAke2NhbGxiYWNrTmFtZX0oUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyPiwgaW50IGlkKTsKKyAgICAgICAgdm9pZCBzZW5kU3VjY2Vzcygke291
dFBhcmFtZXRlcnN9KTsKKyAgICB9OworICAgIHZpcnR1YWwgdm9pZCAke2NvbW1hbmROYW1lfSgk
e2luUGFyYW1ldGVyc30pID0gMDsiIiIpCisKKyAgICBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVu
dGF0aW9uU21hbGxTd2l0Y2ggPSAoCisgICAgIiIidm9pZCBJbnNwZWN0b3Ike2RvbWFpbk5hbWV9
QmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIG1l
dGhvZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1lc3NhZ2UpCit7CisgICAgUmVmPElu
c3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7CisK
KyR7ZGlzcGF0Y2hDYXNlc30KKyAgICBlbHNlCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXIt
PnJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6
Ok1ldGhvZE5vdEZvdW5kLCBTdHJpbmcoIiciKSArICIke2RvbWFpbk5hbWV9IiArICcuJyArIG1l
dGhvZCArICInIHdhcyBub3QgZm91bmQiKTsKK30iIiIpCisKKyAgICBCYWNrZW5kRGlzcGF0Y2hl
ckltcGxlbWVudGF0aW9uTGFyZ2VTd2l0Y2ggPSAoCisiIiJ2b2lkIEluc3BlY3RvciR7ZG9tYWlu
TmFtZX1CYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmlu
ZyYgbWV0aG9kLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbWVzc2FnZSkKK3sKKyAgICBS
ZWY8SW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlz
KTsKKworICAgIHR5cGVkZWYgdm9pZCAoSW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNw
YXRjaGVyOjoqQ2FsbEhhbmRsZXIpKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3I6Okluc3Bl
Y3Rvck9iamVjdCYgbWVzc2FnZSk7CisgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgQ2FsbEhh
bmRsZXI+IERpc3BhdGNoTWFwOworICAgIERFUFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NBTChE
aXNwYXRjaE1hcCwgZGlzcGF0Y2hNYXAsICgpKTsKKyAgICBpZiAoZGlzcGF0Y2hNYXAuaXNFbXB0
eSgpKSB7CisgICAgICAgIHN0YXRpYyBjb25zdCBzdHJ1Y3QgTWV0aG9kVGFibGUgeworICAgICAg
ICAgICAgY29uc3QgY2hhciogbmFtZTsKKyAgICAgICAgICAgIENhbGxIYW5kbGVyIGhhbmRsZXI7
CisgICAgICAgIH0gY29tbWFuZHNbXSA9IHsKKyR7ZGlzcGF0Y2hDYXNlc30KKyAgICAgICAgfTsK
KyAgICAgICAgc2l6ZV90IGxlbmd0aCA9IFdURl9BUlJBWV9MRU5HVEgoY29tbWFuZHMpOworICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQorICAgICAgICAgICAgZGlz
cGF0Y2hNYXAuYWRkKGNvbW1hbmRzW2ldLm5hbWUsIGNvbW1hbmRzW2ldLmhhbmRsZXIpOworICAg
IH0KKworICAgIEhhc2hNYXA8U3RyaW5nLCBDYWxsSGFuZGxlcj46Oml0ZXJhdG9yIGl0ID0gZGlz
cGF0Y2hNYXAuZmluZChtZXRob2QpOworICAgIGlmIChpdCA9PSBkaXNwYXRjaE1hcC5lbmQoKSkg
eworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKCZjYWxs
SWQsIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgU3RyaW5nKCIn
IikgKyAiJHtkb21haW5OYW1lfSIgKyAnLicgKyBtZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAoKCp0aGlzKS4qaXQtPnZhbHVlKShjYWxs
SWQsICptZXNzYWdlLmdldCgpKTsKK30iIiIpCisKKyAgICBCYWNrZW5kRGlzcGF0Y2hlckltcGxl
bWVudGF0aW9uRG9tYWluQ29uc3RydWN0b3IgPSAoCisgICAgIiIiUGFzc1JlZlB0cjxJbnNwZWN0
b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXI+IEluc3BlY3RvciR7ZG9tYWluTmFtZX1C
YWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiBiYWNr
ZW5kRGlzcGF0Y2hlciwgSW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVySGFu
ZGxlciogYWdlbnQpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnNwZWN0b3Ike2RvbWFp
bk5hbWV9QmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIsIGFnZW50KSk7Cit9CisK
K0luc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcjo6SW5zcGVjdG9yJHtkb21h
aW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyKEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiBiYWNr
ZW5kRGlzcGF0Y2hlciwgSW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVySGFu
ZGxlciogYWdlbnQpCisgICAgOiBJbnNwZWN0b3JTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hl
cihiYWNrZW5kRGlzcGF0Y2hlcikKKyAgICAsIG1fYWdlbnQoYWdlbnQpCit7CisgICAgbV9iYWNr
ZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRjaGVyRm9yRG9tYWluKEFTQ0lJTGl0ZXJhbCgi
JHtkb21haW5OYW1lfSIpLCB0aGlzKTsKK30iIiIpCisKKyAgICBCYWNrZW5kRGlzcGF0Y2hlcklt
cGxlbWVudGF0aW9uUHJlcGFyZUNvbW1hbmRBcmd1bWVudHMgPSAoCisiIiIgICAgUmVmUHRyPElu
c3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsK
KyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSBtZXNzYWdlLmdl
dE9iamVjdChBU0NJSUxpdGVyYWwoInBhcmFtcyIpKTsKKyAgICBJbnNwZWN0b3JPYmplY3QqIHBh
cmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKKyAgICBJbnNwZWN0b3JB
cnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKKyR7aW5QYXJh
bWV0ZXJEZWNsYXJhdGlvbnN9CisgICAgaWYgKHByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewor
ICAgICAgICBTdHJpbmcgZXJyb3JNZXNzYWdlID0gU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1l
bnRzIG9mIG1ldGhvZCBcJyVzXCcgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIiR7ZG9tYWluTmFtZX0u
JHtjb21tYW5kTmFtZX0iKTsKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJv
dG9jb2xFcnJvcigmY2FsbElkLCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBh
cmFtcywgZXJyb3JNZXNzYWdlLCBwcm90b2NvbEVycm9ycy5yZWxlYXNlKCkpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorIiIiKQorCisgICAgQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlv
bkFzeW5jQ29tbWFuZCA9ICgKKyIiIkluc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXI6OiR7Y2FsbGJhY2tOYW1lfTo6JHtjYWxsYmFja05hbWV9KFBhc3NSZWZQdHI8
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+IGJhY2tlbmREaXNwYXRjaGVyLCBpbnQgaWQpIDog
SW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlKGJhY2tl
bmREaXNwYXRjaGVyLCBpZCkgeyB9CisKK3ZvaWQgSW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tl
bmREaXNwYXRjaGVySGFuZGxlcjo6JHtjYWxsYmFja05hbWV9OjpzZW5kU3VjY2Vzcygke2Zvcm1h
bFBhcmFtZXRlcnN9KQoreworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGpzb25NZXNzYWdl
ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyR7b3V0UGFyYW1ldGVyQXNzaWdubWVudHN9
CisgICAgc2VuZElmQWN0aXZlKGpzb25NZXNzYWdlLCBFcnJvclN0cmluZygpKTsKK30iIiIpCisK
KyAgICBGcm9udGVuZERpc3BhdGNoZXJEb21haW5EaXNwYXRjaGVyRGVjbGFyYXRpb24gPSAoCisi
IiIke2NsYXNzQW5kRXhwb3J0TWFjcm99IEluc3BlY3RvciR7ZG9tYWluTmFtZX1Gcm9udGVuZERp
c3BhdGNoZXIgeworcHVibGljOgorICAgIEluc3BlY3RvciR7ZG9tYWluTmFtZX1Gcm9udGVuZERp
c3BhdGNoZXIoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwpIDogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
KSB7IH0KKyR7ZXZlbnREZWNsYXJhdGlvbnN9Citwcml2YXRlOgorICAgIEluc3BlY3RvckZyb250
ZW5kQ2hhbm5lbCogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7Cit9OyIiIikKKworICAgIFR5
cGVCdWlsZGVyRGVjbGFyYXRpb25QcmVsdWRlID0gKAorIiIiICAgIHRlbXBsYXRlPGludCBTVEFU
RT4KKyAgICBjbGFzcyBCdWlsZGVyIHsKKyAgICBwcml2YXRlOgorICAgICAgICBSZWZQdHI8SW5z
cGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OworCisgICAgICAgIHRlbXBsYXRlPGlu
dCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4q
Pih0aGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjwvKiR7b2Jq
ZWN0VHlwZX0qL0luc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBwdHIpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2Ny
ZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOworICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7Cisg
ICAgICAgIH0KKyAgICAgICAgZnJpZW5kIGNsYXNzICR7b2JqZWN0VHlwZX07CisgICAgcHVibGlj
OiIiIikKKworICAgIFR5cGVCdWlsZGVyRGVjbGFyYXRpb25Qb3N0bHVkZSA9ICgKKyIiIgorICAg
ICAgICBvcGVyYXRvciBSZWZQdHI8JHtvYmplY3RUeXBlfT4mICgpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25v
dF9yZWFkeSk7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoJHtvYmplY3RUeXBl
fSkgPT0gc2l6ZW9mKEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0KSwgY2Fubm90X2Nhc3QpOwor
ICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjwke29iamVjdFR5cGV9
Pio+KCZtX3Jlc3VsdCk7CisgICAgICAgIH0KKworICAgICAgICBQYXNzUmVmUHRyPCR7b2JqZWN0
VHlwZX0+IHJlbGVhc2UoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gUmVmUHRyPCR7
b2JqZWN0VHlwZX0+KCp0aGlzKS5yZWxlYXNlKCk7CisgICAgICAgIH0KKyAgICB9OworCisgICAg
LyoKKyAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6Ciske2NvbnN0cnVjdG9yRXhhbXBsZX0K
KyAgICAgKi8KKyAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKKyAgICB7
CisgICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihJbnNwZWN0b3I6Okluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCkpOworICAgIH0KKyAgICB0eXBlZGVmIEluc3BlY3Rvcjo6VHlwZUJ1
aWxkZXI6OlN0cnVjdEl0ZW1UcmFpdHMgSXRlbVRyYWl0czsiIiIpCisKKyAgICBUeXBlQnVpbGRl
ck9iamVjdFJ1bnRpbWVDYXN0ID0gKAorIiIiUGFzc1JlZlB0cjwke29iamVjdFR5cGV9PiBCaW5k
aW5nVHJhaXRzPCR7b2JqZWN0VHlwZX0+OjpydW50aW1lQ2FzdChQYXNzUmVmUHRyPEluc3BlY3Rv
cjo6SW5zcGVjdG9yVmFsdWU+IHZhbHVlKQoreworICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3Bl
Y3Rvck9iamVjdD4gb2JqZWN0OworICAgIGJvb2wgY2FzdFJlcyA9IHZhbHVlLT5hc09iamVjdCgm
b2JqZWN0KTsKKyAgICBBU1NFUlRfVU5VU0VEKGNhc3RSZXMsIGNhc3RSZXMpOworI2lmICFBU1NF
UlRfRElTQUJMRUQKKyAgICBCaW5kaW5nVHJhaXRzPCR7b2JqZWN0VHlwZX0+Ojphc3NlcnRWYWx1
ZUhhc0V4cGVjdGVkVHlwZShvYmplY3QuZ2V0KCkpOworI2VuZGlmICAvLyAhQVNTRVJUX0RJU0FC
TEVECisgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKCR7b2JqZWN0VHlwZX0pID09IHNpemVvZihJ
bnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdEJhc2UpLCB0eXBlX2Nhc3RfcHJvYmxlbSk7CisgICAg
cmV0dXJuIHN0YXRpY19jYXN0PCR7b2JqZWN0VHlwZX0qPihzdGF0aWNfY2FzdDxJbnNwZWN0b3I6
Okluc3BlY3Rvck9iamVjdEJhc2UqPihvYmplY3QuZ2V0KCkpKTsKK30KKyIiIgorKQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vbW9k
ZWxzLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4v
bW9kZWxzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRhYzAyZmJjYmVhMTU1YjdiY2UzZmEyZjFhNDY2MTAwOTZi
MmIxZTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvY29kZWdlbi9tb2RlbHMucHkKQEAgLTAsMCArMSw1ODAgQEAKKyMhL3Vzci9iaW4v
ZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKGMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFy
ZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisj
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisjIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKworaW1wb3J0IGxvZ2dpbmcKKworbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2Jh
bCcpCisKKworZGVmIHVjZmlyc3Qoc3RyKToKKyAgICByZXR1cm4gc3RyWzoxXS51cHBlcigpICsg
c3RyWzE6XQorCisKK19GUkFNRVdPUktfQ09ORklHX01BUCA9IHsKKyAgICAiR2xvYmFsIjogewor
ICAgICAgICAicHJlZml4IjogIiIsCisgICAgfSwKKworICAgICJXVEYiOiB7CisgICAgICAgICJw
cmVmaXgiOiAiV1RGIiwKKyAgICB9LAorICAgICJKYXZhU2NyaXB0Q29yZSI6IHsKKyAgICAgICAg
InByZWZpeCI6ICJKUyIsCisgICAgICAgICJleHBvcnRfbWFjcm8iOiAiSlNfRVhQT1JUX1BSSVZB
VEUiCisgICAgfSwKKyAgICAiV2ViQ29yZSI6IHsKKyAgICAgICAgInByZWZpeCI6ICJXZWIiLAor
ICAgIH0sCisgICAgIyBVc2VkIGZvciBjb2RlIGdlbmVyYXRvciB0ZXN0cy4KKyAgICAiVGVzdCI6
IHsKKyAgICAgICAgInByZWZpeCI6ICJUZXN0IiwKKyAgICB9Cit9CisKKworIyBGSVhNRTogVGhl
c2Ugc2hvdWxkIGJlIGNvbnZlcnRlZCBpbnRvIEpTT04gcHJvcGVydGllcywgb3IgcmVuYW1lZC4K
K19UWVBFU19ORUVESU5HX1JFTkFNRV9XT1JLQVJPVU5EUyA9IHsKKyAgICAnUkdCQSc6ICdSZ2Jh
JywgIyBSR0JBIGlzIHJlcG9ydGVkIHRvIGJlIGNvbmZsaWN0aW5nIHdpdGggYSBkZWZpbmUgbmFt
ZSBpbiBXaW5kb3dzIENFLgorICAgICMgRm9yIHRlc3Rpbmcgb25seS4KKyAgICAnVW5wbGVhc2Fu
dE5hbWUnOiAnSGFwcHlOYW1lJworfQorCisKK2NsYXNzIFBhcnNlRXhjZXB0aW9uKEV4Y2VwdGlv
bik6CisgICAgcGFzcworCisKK2NsYXNzIFR5cGVjaGVja0V4Y2VwdGlvbihFeGNlcHRpb24pOgor
ICAgIHBhc3MKKworCitjbGFzcyBGcmFtZXdvcms6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5h
bWUpOgorICAgICAgICBzZWxmLl9zZXR0aW5ncyA9IF9GUkFNRVdPUktfQ09ORklHX01BUFtuYW1l
XQorICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCisKKyAgICBkZWYgc2V0dGluZyhzZWxmLCBrZXks
IGRlZmF1bHQ9JycpOgorICAgICAgICByZXR1cm4gc2VsZi5fc2V0dGluZ3MuZ2V0KGtleSwgZGVm
YXVsdCkKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgZnJvbVN0cmluZyhmcmFtZXdvcmtT
dHJpbmcpOgorICAgICAgICBpZiBmcmFtZXdvcmtTdHJpbmcgPT0gIkdsb2JhbCI6CisgICAgICAg
ICAgICByZXR1cm4gRnJhbWV3b3Jrcy5HbG9iYWwKKworICAgICAgICBpZiBmcmFtZXdvcmtTdHJp
bmcgPT0gIldURiI6CisgICAgICAgICAgICByZXR1cm4gRnJhbWV3b3Jrcy5XVEYKKworICAgICAg
ICBpZiBmcmFtZXdvcmtTdHJpbmcgPT0gIkphdmFTY3JpcHRDb3JlIjoKKyAgICAgICAgICAgIHJl
dHVybiBGcmFtZXdvcmtzLkphdmFTY3JpcHRDb3JlCisKKyAgICAgICAgaWYgZnJhbWV3b3JrU3Ry
aW5nID09ICJXZWJDb3JlIjoKKyAgICAgICAgICAgIHJldHVybiBGcmFtZXdvcmtzLldlYkNvcmUK
KworICAgICAgICBpZiBmcmFtZXdvcmtTdHJpbmcgPT0gIlRlc3QiOgorICAgICAgICAgICAgcmV0
dXJuIEZyYW1ld29ya3MuVGVzdAorCisgICAgICAgIHJhaXNlIFBhcnNlRXhjZXB0aW9uKCJVbmtu
b3duIGZyYW1ld29yazogJXMiICUgZnJhbWV3b3JrU3RyaW5nKQorCisKK2NsYXNzIEZyYW1ld29y
a3M6CisgICAgR2xvYmFsID0gRnJhbWV3b3JrKCJHbG9iYWwiKQorICAgIFdURiA9IEZyYW1ld29y
aygiV1RGIikKKyAgICBKYXZhU2NyaXB0Q29yZSA9IEZyYW1ld29yaygiSmF2YVNjcmlwdENvcmUi
KQorICAgIFdlYkNvcmUgPSBGcmFtZXdvcmsoIldlYkNvcmUiKQorICAgIFRlc3QgPSBGcmFtZXdv
cmsoIlRlc3QiKQorCisKK2NsYXNzIFR5cGVSZWZlcmVuY2U6CisgICAgZGVmIF9faW5pdF9fKHNl
bGYsIHR5cGVfa2luZCwgcmVmZXJlbmNlZF90eXBlX25hbWUsIGVudW1fdmFsdWVzLCBhcnJheV9p
dGVtcyk6CisgICAgICAgIHNlbGYudHlwZV9raW5kID0gdHlwZV9raW5kCisgICAgICAgIHNlbGYu
cmVmZXJlbmNlZF90eXBlX25hbWUgPSBfVFlQRVNfTkVFRElOR19SRU5BTUVfV09SS0FST1VORFMu
Z2V0KHJlZmVyZW5jZWRfdHlwZV9uYW1lLCByZWZlcmVuY2VkX3R5cGVfbmFtZSkKKyAgICAgICAg
c2VsZi5lbnVtX3ZhbHVlcyA9IGVudW1fdmFsdWVzCisgICAgICAgIGlmIGFycmF5X2l0ZW1zIGlz
IE5vbmU6CisgICAgICAgICAgICBzZWxmLmFycmF5X3R5cGVfcmVmID0gTm9uZQorICAgICAgICBl
bHNlOgorICAgICAgICAgICAgc2VsZi5hcnJheV90eXBlX3JlZiA9IFR5cGVSZWZlcmVuY2UoYXJy
YXlfaXRlbXMuZ2V0KCd0eXBlJyksIGFycmF5X2l0ZW1zLmdldCgnJHJlZicpLCBhcnJheV9pdGVt
cy5nZXQoJ2VudW0nKSwgYXJyYXlfaXRlbXMuZ2V0KCdpdGVtcycpKQorCisgICAgICAgIGlmIHR5
cGVfa2luZCBpcyBub3QgTm9uZSBhbmQgcmVmZXJlbmNlZF90eXBlX25hbWUgaXMgbm90IE5vbmU6
CisgICAgICAgICAgICByYWlzZSBQYXJzZUV4Y2VwdGlvbigiVHlwZSByZWZlcmVuY2UgY2Fubm90
IGhhdmUgYm90aCAndHlwZScgYW5kICckcmVmJyBrZXlzLiIpCisKKyAgICAgICAgaWYgdHlwZV9r
aW5kID09ICJhcnJheSIgYW5kIGFycmF5X2l0ZW1zIGlzIE5vbmU6CisgICAgICAgICAgICByYWlz
ZSBQYXJzZUV4Y2VwdGlvbigiVHlwZSByZWZlcmVuY2Ugd2l0aCB0eXBlICdhcnJheScgbXVzdCBo
YXZlIGtleSAnaXRlbXMnIHRvIGRlZmluZSBhcnJheSBlbGVtZW50IHR5cGUuIikKKworICAgICAg
ICBpZiBlbnVtX3ZhbHVlcyBpcyBub3QgTm9uZSBhbmQgbGVuKGVudW1fdmFsdWVzKSA9PSAwOgor
ICAgICAgICAgICAgcmFpc2UgUGFyc2VFeGNlcHRpb24oIlR5cGUgcmVmZXJlbmNlIHdpdGggZW51
bSB2YWx1ZXMgbXVzdCBoYXZlIGF0IGxlYXN0IG9uZSBlbnVtIHZhbHVlLiIpCisKKyAgICBkZWYg
cmVmZXJlbmNlZF9uYW1lKHNlbGYpOgorICAgICAgICBpZiBzZWxmLnJlZmVyZW5jZWRfdHlwZV9u
YW1lIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYucmVmZXJlbmNlZF90eXBl
X25hbWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnR5cGVfa2luZCAg
IyBpbnRlZ2VyLCBzdHJpbmcsIG51bWJlciwgYm9vbGVhbiwgZW51bSwgb2JqZWN0LCBhcnJheQor
CisKK2NsYXNzIFR5cGU6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBwYXNzCisK
KyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuIHNlbGYucXVhbGlm
aWVkX25hbWUoKSA9PSBvdGhlci5xdWFsaWZpZWRfbmFtZSgpCisKKyAgICBkZWYgX19oYXNoX18o
c2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnF1YWxpZmllZF9uYW1lKCkuX19oYXNoX18oKQor
CisgICAgZGVmIHJhd19uYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gX1RZUEVTX05FRURJTkdf
UkVOQU1FX1dPUktBUk9VTkRTLmdldChzZWxmLl9uYW1lLCBzZWxmLl9uYW1lKQorCisgICAgIyBU
aGVzZSBtZXRob2RzIHNob3VsZCBiZSBvdmVycmlkZGVuIGJ5IHN1YmNsYXNzZXMuCisgICAgZGVm
IGlzX2VudW0oc2VsZik6CisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIHR5cGVfZG9t
YWluKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgcXVhbGlmaWVkX25hbWUoc2VsZik6
CisgICAgICAgIHBhc3MKKworICAgICMgVGhpcyBpcyB1c2VkIHRvIHJlc29sdmUgbmVzdGVkIHR5
cGVzIGFmdGVyIGluc3RhbmNlcyBhcmUgY3JlYXRlZC4KKyAgICBkZWYgcmVzb2x2ZV90eXBlX3Jl
ZmVyZW5jZXMoc2VsZiwgcHJvdG9jb2wpOgorICAgICAgICBwYXNzCisKKworY2xhc3MgUHJpbWl0
aXZlVHlwZShUeXBlKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSk6CisgICAgICAgIHNl
bGYuX25hbWUgPSBuYW1lCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVy
biAnUHJpbWl0aXZlVHlwZVslc10nICUgc2VsZi5xdWFsaWZpZWRfbmFtZSgpCisKKyAgICBkZWYg
dHlwZV9kb21haW4oc2VsZik6CisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgcXVhbGlm
aWVkX25hbWUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnJhd19uYW1lKCkKKworCitjbGFz
cyBBbGlhc2VkVHlwZShUeXBlKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwgZG9tYWlu
LCBhbGlhc2VkX3R5cGVfcmVmKToKKyAgICAgICAgc2VsZi5fbmFtZSA9IG5hbWUKKyAgICAgICAg
c2VsZi5fZG9tYWluID0gZG9tYWluCisgICAgICAgIHNlbGYuX2FsaWFzZWRfdHlwZV9yZWYgPSBh
bGlhc2VkX3R5cGVfcmVmCisgICAgICAgIHNlbGYuYWxpYXNlZF90eXBlID0gTm9uZQorCisgICAg
ZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICBpZiBzZWxmLmFsaWFzZWRfdHlwZSBpcyBub3Qg
Tm9uZToKKyAgICAgICAgICAgIHJldHVybiAnQWxpYXNlZFR5cGVbJXMgLT4gJXJdJyAlIChzZWxm
LnF1YWxpZmllZF9uYW1lKCksIHNlbGYuYWxpYXNlZF90eXBlKQorICAgICAgICBlbHNlOgorICAg
ICAgICAgICAgcmV0dXJuICdBbGlhc2VkVHlwZVslcyAtPiAodW5yZXNvbHZlZCldJyAlIHNlbGYu
cXVhbGlmaWVkX25hbWUoKQorCisgICAgZGVmIGlzX2VudW0oc2VsZik6CisgICAgICAgIHJldHVy
biBzZWxmLmFsaWFzZWRfdHlwZS5pc19lbnVtKCkKKworICAgIGRlZiB0eXBlX2RvbWFpbihzZWxm
KToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2RvbWFpbgorCisgICAgZGVmIHF1YWxpZmllZF9uYW1l
KHNlbGYpOgorICAgICAgICByZXR1cm4gICIuIi5qb2luKFtzZWxmLnR5cGVfZG9tYWluKCkuZG9t
YWluX25hbWUsIHNlbGYucmF3X25hbWUoKV0pCisKKyAgICBkZWYgcmVzb2x2ZV90eXBlX3JlZmVy
ZW5jZXMoc2VsZiwgcHJvdG9jb2wpOgorICAgICAgICBpZiBzZWxmLmFsaWFzZWRfdHlwZSBpcyBu
b3QgTm9uZToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHNlbGYuYWxpYXNlZF90eXBl
ID0gcHJvdG9jb2wubG9va3VwX3R5cGVfcmVmZXJlbmNlKHNlbGYuX2FsaWFzZWRfdHlwZV9yZWYs
IHNlbGYudHlwZV9kb21haW4oKSkKKyAgICAgICAgbG9nLmRlYnVnKCI8IFJlc29sdmVkIHR5cGUg
cmVmZXJlbmNlIGZvciBhbGlhc2VkIHR5cGUgaW4gJXM6ICVzIiAlIChzZWxmLnF1YWxpZmllZF9u
YW1lKCksIHNlbGYuYWxpYXNlZF90eXBlLnF1YWxpZmllZF9uYW1lKCkpKQorCisKK2NsYXNzIEVu
dW1UeXBlKFR5cGUpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCBkb21haW4sIHZhbHVl
cywgcHJpbWl0aXZlX3R5cGVfcmVmLCBpc19hbm9ueW1vdXM9RmFsc2UpOgorICAgICAgICBzZWxm
Ll9uYW1lID0gbmFtZQorICAgICAgICBzZWxmLl9kb21haW4gPSBkb21haW4KKyAgICAgICAgc2Vs
Zi5fdmFsdWVzID0gdmFsdWVzCisgICAgICAgIHNlbGYuX3ByaW1pdGl2ZV90eXBlX3JlZiA9IHBy
aW1pdGl2ZV90eXBlX3JlZgorICAgICAgICBzZWxmLnByaW1pdGl2ZV90eXBlID0gTm9uZQorICAg
ICAgICBzZWxmLmlzX2Fub255bW91cyA9IGlzX2Fub255bW91cworCisgICAgZGVmIF9fcmVwcl9f
KHNlbGYpOgorICAgICAgICByZXR1cm4gJ0VudW1UeXBlW3ZhbHVlX3R5cGU9JXM7IHZhbHVlcz0l
c10nICUgKHNlbGYucXVhbGlmaWVkX25hbWUoKSwgJywgJy5qb2luKG1hcChzdHIsIHNlbGYuZW51
bV92YWx1ZXMoKSkpKQorCisgICAgZGVmIGlzX2VudW0oc2VsZik6CisgICAgICAgIHJldHVybiBU
cnVlCisKKyAgICBkZWYgdHlwZV9kb21haW4oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9k
b21haW4KKworICAgIGRlZiBlbnVtX3ZhbHVlcyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYu
X3ZhbHVlcworCisgICAgZGVmIHF1YWxpZmllZF9uYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4g
ICIuIi5qb2luKFtzZWxmLnR5cGVfZG9tYWluKCkuZG9tYWluX25hbWUsIHNlbGYucmF3X25hbWUo
KV0pCisKKyAgICBkZWYgcmVzb2x2ZV90eXBlX3JlZmVyZW5jZXMoc2VsZiwgcHJvdG9jb2wpOgor
ICAgICAgICBpZiBzZWxmLnByaW1pdGl2ZV90eXBlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAg
cmV0dXJuCisKKyAgICAgICAgc2VsZi5wcmltaXRpdmVfdHlwZSA9IHByb3RvY29sLmxvb2t1cF90
eXBlX3JlZmVyZW5jZShzZWxmLl9wcmltaXRpdmVfdHlwZV9yZWYsIERvbWFpbnMuR0xPQkFMKQor
ICAgICAgICBsb2cuZGVidWcoIjwgUmVzb2x2ZWQgdHlwZSByZWZlcmVuY2UgZm9yIGVudW0gdHlw
ZSBpbiAlczogJXMiICUgKHNlbGYucXVhbGlmaWVkX25hbWUoKSwgc2VsZi5wcmltaXRpdmVfdHlw
ZS5xdWFsaWZpZWRfbmFtZSgpKSkKKyAgICAgICAgbG9nLmRlYnVnKCI8PCBlbnVtIHZhbHVlczog
JXMiICUgc2VsZi5lbnVtX3ZhbHVlcygpKQorCisKK2NsYXNzIEFycmF5VHlwZShUeXBlKToKKyAg
ICBkZWYgX19pbml0X18oc2VsZiwgZWxlbWVudF90eXBlX3JlZiwgZG9tYWluKToKKyAgICAgICAg
c2VsZi5fZG9tYWluID0gZG9tYWluCisgICAgICAgIHNlbGYuX2VsZW1lbnRfdHlwZV9yZWYgPSBl
bGVtZW50X3R5cGVfcmVmCisgICAgICAgIHNlbGYuZWxlbWVudF90eXBlID0gTm9uZQorCisgICAg
ZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICBpZiBzZWxmLmVsZW1lbnRfdHlwZSBpcyBub3Qg
Tm9uZToKKyAgICAgICAgICAgIHJldHVybiAnQXJyYXlUeXBlW2VsZW1lbnRfdHlwZT0lcl0nICUg
c2VsZi5lbGVtZW50X3R5cGUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiAnQXJy
YXlUeXBlW2VsZW1lbnRfdHlwZT0odW5yZXNvbHZlZCldJworCisgICAgZGVmIHR5cGVfZG9tYWlu
KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fZG9tYWluCisKKyAgICBkZWYgcXVhbGlmaWVk
X25hbWUoc2VsZik6CisgICAgICAgIHJldHVybiAgIi4iLmpvaW4oWyJhcnJheSIsIHNlbGYuZWxl
bWVudF90eXBlLnF1YWxpZmllZF9uYW1lKCldKQorCisgICAgZGVmIHJlc29sdmVfdHlwZV9yZWZl
cmVuY2VzKHNlbGYsIHByb3RvY29sKToKKyAgICAgICAgaWYgc2VsZi5lbGVtZW50X3R5cGUgaXMg
bm90IE5vbmU6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBzZWxmLmVsZW1lbnRfdHlw
ZSA9IHByb3RvY29sLmxvb2t1cF90eXBlX3JlZmVyZW5jZShzZWxmLl9lbGVtZW50X3R5cGVfcmVm
LCBzZWxmLnR5cGVfZG9tYWluKCkpCisgICAgICAgIGxvZy5kZWJ1ZygiPCBSZXNvbHZlZCB0eXBl
IHJlZmVyZW5jZSBmb3IgZWxlbWVudCB0eXBlIGluICVzOiAlcyIgJSAoc2VsZi5xdWFsaWZpZWRf
bmFtZSgpLCBzZWxmLmVsZW1lbnRfdHlwZS5xdWFsaWZpZWRfbmFtZSgpKSkKKworCitjbGFzcyBP
YmplY3RUeXBlKFR5cGUpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCBkb21haW4sIG1l
bWJlcnMpOgorICAgICAgICBzZWxmLl9uYW1lID0gbmFtZQorICAgICAgICBzZWxmLl9kb21haW4g
PSBkb21haW4KKyAgICAgICAgc2VsZi5tZW1iZXJzID0gbWVtYmVycworCisgICAgZGVmIF9fcmVw
cl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gJ09iamVjdFR5cGVbJXNdJyAlIHNlbGYucXVhbGlm
aWVkX25hbWUoKQorCisgICAgZGVmIHR5cGVfZG9tYWluKHNlbGYpOgorICAgICAgICByZXR1cm4g
c2VsZi5fZG9tYWluCisKKyAgICBkZWYgcXVhbGlmaWVkX25hbWUoc2VsZik6CisgICAgICAgIHJl
dHVybiAgIi4iLmpvaW4oW3NlbGYudHlwZV9kb21haW4oKS5kb21haW5fbmFtZSwgc2VsZi5yYXdf
bmFtZSgpXSkKKworCitkZWYgY2hlY2tfZm9yX3JlcXVpcmVkX3Byb3BlcnRpZXMocHJvcHMsIG9i
aiwgd2hhdCk6CisgICAgZm9yIHByb3AgaW4gcHJvcHM6CisgICAgICAgIGlmIHByb3Agbm90IGlu
IG9iajoKKyAgICAgICAgICAgIHJhaXNlIFBhcnNlRXhjZXB0aW9uKCJXaGVuIHBhcnNpbmcgJXMs
IHJlcXVpcmVkIHByb3BlcnR5IG1pc3Npbmc6ICVzIiAlICh3aGF0LCBwcm9wKSkKKworCitjbGFz
cyBQcm90b2NvbDoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZnJhbWV3b3JrX25hbWUpOgorICAg
ICAgICBzZWxmLmRvbWFpbnMgPSBbXQorICAgICAgICBzZWxmLnR5cGVzX2J5X25hbWUgPSB7fQor
ICAgICAgICBzZWxmLmZyYW1ld29yayA9IEZyYW1ld29yay5mcm9tU3RyaW5nKGZyYW1ld29ya19u
YW1lKQorCisgICAgZGVmIHBhcnNlX3NwZWNpZmljYXRpb24oc2VsZiwganNvbiwgaXNTdXBwbGVt
ZW50YWwpOgorICAgICAgICBsb2cuZGVidWcoInBhcnNlIHRvcGxldmVsIikKKworICAgICAgICBp
ZiBpc2luc3RhbmNlKGpzb24sIGRpY3QpIGFuZCAnZG9tYWlucycgaW4ganNvbjoKKyAgICAgICAg
ICAgIGpzb24gPSBqc29uWydkb21haW5zJ10KKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoanNv
biwgbGlzdCk6CisgICAgICAgICAgICBqc29uID0gW2pzb25dCisKKyAgICAgICAgZm9yIGRvbWFp
biBpbiBqc29uOgorICAgICAgICAgICAgc2VsZi5wYXJzZV9kb21haW4oZG9tYWluLCBpc1N1cHBs
ZW1lbnRhbCkKKworICAgIGRlZiBwYXJzZV9kb21haW4oc2VsZiwganNvbiwgaXNTdXBwbGVtZW50
YWwpOgorICAgICAgICBjaGVja19mb3JfcmVxdWlyZWRfcHJvcGVydGllcyhbJ2RvbWFpbiddLCBq
c29uLCAiZG9tYWluIikKKyAgICAgICAgbG9nLmRlYnVnKCJwYXJzZSBkb21haW4gIiArIGpzb25b
J2RvbWFpbiddKQorCisgICAgICAgIHR5cGVzID0gW10KKyAgICAgICAgY29tbWFuZHMgPSBbXQor
ICAgICAgICBldmVudHMgPSBbXQorCisgICAgICAgIGlmICd0eXBlcycgaW4ganNvbjoKKyAgICAg
ICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGpzb25bJ3R5cGVzJ10sIGxpc3QpOgorICAgICAgICAg
ICAgICAgIHJhaXNlIFBhcnNlRXhjZXB0aW9uKCJNYWxmb3JtZWQgZG9tYWluIHNwZWNpZmljYXRp
b246IHR5cGVzIGlzIG5vdCBhbiBhcnJheSIpCisgICAgICAgICAgICB0eXBlcy5leHRlbmQoW3Nl
bGYucGFyc2VfdHlwZV9kZWNsYXJhdGlvbihkZWNsYXJhdGlvbikgZm9yIGRlY2xhcmF0aW9uIGlu
IGpzb25bJ3R5cGVzJ11dKQorCisgICAgICAgIGlmICdjb21tYW5kcycgaW4ganNvbjoKKyAgICAg
ICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGpzb25bJ2NvbW1hbmRzJ10sIGxpc3QpOgorICAgICAg
ICAgICAgICAgIHJhaXNlIFBhcnNlRXhjZXB0aW9uKCJNYWxmb3JtZWQgZG9tYWluIHNwZWNpZmlj
YXRpb246IGNvbW1hbmRzIGlzIG5vdCBhbiBhcnJheSIpCisgICAgICAgICAgICBjb21tYW5kcy5l
eHRlbmQoW3NlbGYucGFyc2VfY29tbWFuZChjb21tYW5kKSBmb3IgY29tbWFuZCBpbiBqc29uWydj
b21tYW5kcyddXSkKKworICAgICAgICBpZiAnZXZlbnRzJyBpbiBqc29uOgorICAgICAgICAgICAg
aWYgbm90IGlzaW5zdGFuY2UoanNvblsnZXZlbnRzJ10sIGxpc3QpOgorICAgICAgICAgICAgICAg
IHJhaXNlIFBhcnNlRXhjZXB0aW9uKCJNYWxmb3JtZWQgZG9tYWluIHNwZWNpZmljYXRpb246IGV2
ZW50cyBpcyBub3QgYW4gYXJyYXkiKQorICAgICAgICAgICAgZXZlbnRzLmV4dGVuZChbc2VsZi5w
YXJzZV9ldmVudChldmVudCkgZm9yIGV2ZW50IGluIGpzb25bJ2V2ZW50cyddXSkKKworICAgICAg
ICBzZWxmLmRvbWFpbnMuYXBwZW5kKERvbWFpbihqc29uWydkb21haW4nXSwganNvbi5nZXQoJ2Rl
c2NyaXB0aW9uJywgIiIpLCBpc1N1cHBsZW1lbnRhbCwgdHlwZXMsIGNvbW1hbmRzLCBldmVudHMp
KQorCisgICAgZGVmIHBhcnNlX3R5cGVfZGVjbGFyYXRpb24oc2VsZiwganNvbik6CisgICAgICAg
IGNoZWNrX2Zvcl9yZXF1aXJlZF9wcm9wZXJ0aWVzKFsnaWQnLCAndHlwZSddLCBqc29uLCAidHlw
ZSIpCisgICAgICAgIGxvZy5kZWJ1ZygicGFyc2UgdHlwZSAlcyIgJSBqc29uWydpZCddKQorCisg
ICAgICAgIHR5cGVfbWVtYmVycyA9IFtdCisKKyAgICAgICAgaWYgJ3Byb3BlcnRpZXMnIGluIGpz
b246CisgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShqc29uWydwcm9wZXJ0aWVzJ10sIGxp
c3QpOgorICAgICAgICAgICAgICAgIHJhaXNlIFBhcnNlRXhjZXB0aW9uKCJNYWxmb3JtZWQgdHlw
ZSBzcGVjaWZpY2F0aW9uOiBwcm9wZXJ0aWVzIGlzIG5vdCBhbiBhcnJheSIpCisgICAgICAgICAg
ICB0eXBlX21lbWJlcnMuZXh0ZW5kKFtzZWxmLnBhcnNlX3R5cGVfbWVtYmVyKG1lbWJlcikgZm9y
IG1lbWJlciBpbiBqc29uWydwcm9wZXJ0aWVzJ11dKQorCisgICAgICAgIHR5cGVfcmVmID0gVHlw
ZVJlZmVyZW5jZShqc29uWyd0eXBlJ10sIGpzb24uZ2V0KCckcmVmJyksIGpzb24uZ2V0KCdlbnVt
JyksIGpzb24uZ2V0KCdpdGVtcycpKQorICAgICAgICByZXR1cm4gVHlwZURlY2xhcmF0aW9uKGpz
b25bJ2lkJ10sIHR5cGVfcmVmLCBqc29uLmdldCgiZGVzY3JpcHRpb24iLCAiIiksIHR5cGVfbWVt
YmVycykKKworICAgIGRlZiBwYXJzZV90eXBlX21lbWJlcihzZWxmLCBqc29uKToKKyAgICAgICAg
Y2hlY2tfZm9yX3JlcXVpcmVkX3Byb3BlcnRpZXMoWyduYW1lJ10sIGpzb24sICJ0eXBlIG1lbWJl
ciIpCisgICAgICAgIGxvZy5kZWJ1ZygicGFyc2UgdHlwZSBtZW1iZXIgJXMiICUganNvblsnbmFt
ZSddKQorCisgICAgICAgIHR5cGVfcmVmID0gVHlwZVJlZmVyZW5jZShqc29uLmdldCgndHlwZScp
LCBqc29uLmdldCgnJHJlZicpLCBqc29uLmdldCgnZW51bScpLCBqc29uLmdldCgnaXRlbXMnKSkK
KyAgICAgICAgcmV0dXJuIFR5cGVNZW1iZXIoanNvblsnbmFtZSddLCB0eXBlX3JlZiwganNvbi5n
ZXQoJ29wdGlvbmFsJywgRmFsc2UpLCBqc29uLmdldCgnZGVzY3JpcHRpb24nLCAiIikpCisKKyAg
ICBkZWYgcGFyc2VfY29tbWFuZChzZWxmLCBqc29uKToKKyAgICAgICAgY2hlY2tfZm9yX3JlcXVp
cmVkX3Byb3BlcnRpZXMoWyduYW1lJ10sIGpzb24sICJjb21tYW5kIikKKyAgICAgICAgbG9nLmRl
YnVnKCJwYXJzZSBjb21tYW5kICVzIiAlIGpzb25bJ25hbWUnXSkKKworICAgICAgICBjYWxsX3Bh
cmFtZXRlcnMgPSBbXQorICAgICAgICByZXR1cm5fcGFyYW1ldGVycyA9IFtdCisKKyAgICAgICAg
aWYgJ3BhcmFtZXRlcnMnIGluIGpzb246CisgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShq
c29uWydwYXJhbWV0ZXJzJ10sIGxpc3QpOgorICAgICAgICAgICAgICAgIHJhaXNlIFBhcnNlRXhj
ZXB0aW9uKCJNYWxmb3JtZWQgY29tbWFuZCBzcGVjaWZpY2F0aW9uOiBwYXJhbWV0ZXJzIGlzIG5v
dCBhbiBhcnJheSIpCisgICAgICAgICAgICBjYWxsX3BhcmFtZXRlcnMuZXh0ZW5kKFtzZWxmLnBh
cnNlX2NhbGxfb3JfcmV0dXJuX3BhcmFtZXRlcihwYXJhbWV0ZXIpIGZvciBwYXJhbWV0ZXIgaW4g
anNvblsncGFyYW1ldGVycyddXSkKKworICAgICAgICBpZiAncmV0dXJucycgaW4ganNvbjoKKyAg
ICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGpzb25bJ3JldHVybnMnXSwgbGlzdCk6CisgICAg
ICAgICAgICAgICAgcmFpc2UgUGFyc2VFeGNlcHRpb24oIk1hbGZvcm1lZCBjb21tYW5kIHNwZWNp
ZmljYXRpb246IHJldHVybnMgaXMgbm90IGFuIGFycmF5IikKKyAgICAgICAgICAgIHJldHVybl9w
YXJhbWV0ZXJzLmV4dGVuZChbc2VsZi5wYXJzZV9jYWxsX29yX3JldHVybl9wYXJhbWV0ZXIocGFy
YW1ldGVyKSBmb3IgcGFyYW1ldGVyIGluIGpzb25bJ3JldHVybnMnXV0pCisKKyAgICAgICAgcmV0
dXJuIENvbW1hbmQoanNvblsnbmFtZSddLCBjYWxsX3BhcmFtZXRlcnMsIHJldHVybl9wYXJhbWV0
ZXJzLCBqc29uLmdldCgnZGVzY3JpcHRpb24nLCAiIiksIGpzb24uZ2V0KCdhc3luYycsIEZhbHNl
KSkKKworICAgIGRlZiBwYXJzZV9ldmVudChzZWxmLCBqc29uKToKKyAgICAgICAgY2hlY2tfZm9y
X3JlcXVpcmVkX3Byb3BlcnRpZXMoWyduYW1lJ10sIGpzb24sICJldmVudCIpCisgICAgICAgIGxv
Zy5kZWJ1ZygicGFyc2UgZXZlbnQgJXMiICUganNvblsnbmFtZSddKQorCisgICAgICAgIGV2ZW50
X3BhcmFtZXRlcnMgPSBbXQorCisgICAgICAgIGlmICdwYXJhbWV0ZXJzJyBpbiBqc29uOgorICAg
ICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoanNvblsncGFyYW1ldGVycyddLCBsaXN0KToKKyAg
ICAgICAgICAgICAgICByYWlzZSBQYXJzZUV4Y2VwdGlvbigiTWFsZm9ybWVkIGV2ZW50IHNwZWNp
ZmljYXRpb246IHBhcmFtZXRlcnMgaXMgbm90IGFuIGFycmF5IikKKyAgICAgICAgICAgIGV2ZW50
X3BhcmFtZXRlcnMuZXh0ZW5kKFtzZWxmLnBhcnNlX2NhbGxfb3JfcmV0dXJuX3BhcmFtZXRlcihw
YXJhbWV0ZXIpIGZvciBwYXJhbWV0ZXIgaW4ganNvblsncGFyYW1ldGVycyddXSkKKworICAgICAg
ICByZXR1cm4gRXZlbnQoanNvblsnbmFtZSddLCBldmVudF9wYXJhbWV0ZXJzLCBqc29uLmdldCgn
ZGVzY3JpcHRpb24nLCAiIikpCisKKyAgICBkZWYgcGFyc2VfY2FsbF9vcl9yZXR1cm5fcGFyYW1l
dGVyKHNlbGYsIGpzb24pOgorICAgICAgICBjaGVja19mb3JfcmVxdWlyZWRfcHJvcGVydGllcyhb
J25hbWUnXSwganNvbiwgInBhcmFtZXRlciIpCisgICAgICAgIGxvZy5kZWJ1ZygicGFyc2UgcGFy
YW1ldGVyICVzIiAlIGpzb25bJ25hbWUnXSkKKworICAgICAgICB0eXBlX3JlZiA9IFR5cGVSZWZl
cmVuY2UoanNvbi5nZXQoJ3R5cGUnKSwganNvbi5nZXQoJyRyZWYnKSwganNvbi5nZXQoJ2VudW0n
KSwganNvbi5nZXQoJ2l0ZW1zJykpCisgICAgICAgIHJldHVybiBQYXJhbWV0ZXIoanNvblsnbmFt
ZSddLCB0eXBlX3JlZiwganNvbi5nZXQoJ29wdGlvbmFsJywgRmFsc2UpLCBqc29uLmdldCgnZGVz
Y3JpcHRpb24nLCAiIikpCisKKyAgICBkZWYgcmVzb2x2ZV90eXBlcyhzZWxmKToKKyAgICAgICAg
cXVhbGlmaWVkX2RlY2xhcmVkX3R5cGVfbmFtZXMgPSBzZXQoWydib29sZWFuJywgJ3N0cmluZycs
ICdpbnRlZ2VyJywgJ251bWJlcicsICdlbnVtJywgJ2FycmF5JywgJ29iamVjdCcsICdhbnknXSkK
KworICAgICAgICBzZWxmLnR5cGVzX2J5X25hbWVbJ3N0cmluZyddID0gUHJpbWl0aXZlVHlwZSgn
c3RyaW5nJykKKyAgICAgICAgZm9yIF9wcmltaXRpdmVfdHlwZSBpbiBbJ2Jvb2xlYW4nLCAnaW50
ZWdlcicsICdudW1iZXInXToKKyAgICAgICAgICAgIHNlbGYudHlwZXNfYnlfbmFtZVtfcHJpbWl0
aXZlX3R5cGVdID0gUHJpbWl0aXZlVHlwZShfcHJpbWl0aXZlX3R5cGUpCisgICAgICAgIGZvciBf
b2JqZWN0X3R5cGUgaW4gWydhbnknLCAnb2JqZWN0J106CisgICAgICAgICAgICBzZWxmLnR5cGVz
X2J5X25hbWVbX29iamVjdF90eXBlXSA9IFByaW1pdGl2ZVR5cGUoX29iamVjdF90eXBlKQorCisg
ICAgICAgICMgR2F0aGVyIHF1YWxpZmllZCB0eXBlIG5hbWVzIGZyb20gdHlwZSBkZWNsYXJhdGlv
bnMgaW4gZWFjaCBkb21haW4uCisgICAgICAgIGZvciBkb21haW4gaW4gc2VsZi5kb21haW5zOgor
ICAgICAgICAgICAgZm9yIGRlY2xhcmF0aW9uIGluIGRvbWFpbi50eXBlX2RlY2xhcmF0aW9uczoK
KyAgICAgICAgICAgICAgICAjIEJhc2ljIHNhbml0eSBjaGVja2luZy4KKyAgICAgICAgICAgICAg
ICBpZiBkZWNsYXJhdGlvbi50eXBlX3JlZi5yZWZlcmVuY2VkX3R5cGVfbmFtZSBpcyBub3QgTm9u
ZToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgVHlwZWNoZWNrRXhjZXB0aW9uKCJUeXBlIGRl
Y2xhcmF0aW9ucyBtdXN0IG5hbWUgYSBiYXNlIHR5cGUsIG5vdCBhIHR5cGUgcmVmZXJlbmNlLiIp
CisKKyAgICAgICAgICAgICAgICAjIEZpbmQgZHVwbGljYXRlIHF1YWxpZmllZCB0eXBlIG5hbWVz
LgorICAgICAgICAgICAgICAgIHF1YWxpZmllZF90eXBlX25hbWUgPSAiLiIuam9pbihbZG9tYWlu
LmRvbWFpbl9uYW1lLCBkZWNsYXJhdGlvbi50eXBlX25hbWVdKQorICAgICAgICAgICAgICAgIGlm
IHF1YWxpZmllZF90eXBlX25hbWUgaW4gcXVhbGlmaWVkX2RlY2xhcmVkX3R5cGVfbmFtZXM6Cisg
ICAgICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVjaGVja0V4Y2VwdGlvbigiRHVwbGljYXRlIHR5
cGUgZGVjbGFyYXRpb246ICVzIiAlIHF1YWxpZmllZF90eXBlX25hbWUpCisKKyAgICAgICAgICAg
ICAgICBxdWFsaWZpZWRfZGVjbGFyZWRfdHlwZV9uYW1lcy5hZGQocXVhbGlmaWVkX3R5cGVfbmFt
ZSkKKworICAgICAgICAgICAgICAgIHR5cGVfaW5zdGFuY2UgPSBOb25lCisKKyAgICAgICAgICAg
ICAgICBraW5kID0gZGVjbGFyYXRpb24udHlwZV9yZWYudHlwZV9raW5kCisgICAgICAgICAgICAg
ICAgaWYgZGVjbGFyYXRpb24udHlwZV9yZWYuZW51bV92YWx1ZXMgaXMgbm90IE5vbmU6CisgICAg
ICAgICAgICAgICAgICAgIHByaW1pdGl2ZV90eXBlX3JlZiA9IFR5cGVSZWZlcmVuY2UoZGVjbGFy
YXRpb24udHlwZV9yZWYudHlwZV9raW5kLCBOb25lLCBOb25lLCBOb25lKQorICAgICAgICAgICAg
ICAgICAgICB0eXBlX2luc3RhbmNlID0gRW51bVR5cGUoZGVjbGFyYXRpb24udHlwZV9uYW1lLCBk
b21haW4sIGRlY2xhcmF0aW9uLnR5cGVfcmVmLmVudW1fdmFsdWVzLCBwcmltaXRpdmVfdHlwZV9y
ZWYpCisgICAgICAgICAgICAgICAgZWxpZiBraW5kID09ICJhcnJheSI6CisgICAgICAgICAgICAg
ICAgICAgIHR5cGVfaW5zdGFuY2UgPSBBcnJheVR5cGUoZGVjbGFyYXRpb24udHlwZV9yZWYuYXJy
YXlfdHlwZV9yZWYsIGRvbWFpbikKKyAgICAgICAgICAgICAgICBlbGlmIGtpbmQgPT0gIm9iamVj
dCI6CisgICAgICAgICAgICAgICAgICAgIHR5cGVfaW5zdGFuY2UgPSBPYmplY3RUeXBlKGRlY2xh
cmF0aW9uLnR5cGVfbmFtZSwgZG9tYWluLCBkZWNsYXJhdGlvbi50eXBlX21lbWJlcnMpCisgICAg
ICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgdHlwZV9pbnN0YW5jZSA9IEFs
aWFzZWRUeXBlKGRlY2xhcmF0aW9uLnR5cGVfbmFtZSwgZG9tYWluLCBkZWNsYXJhdGlvbi50eXBl
X3JlZikKKworICAgICAgICAgICAgICAgIGxvZy5kZWJ1ZygiPCBDcmVhdGVkIGZyZXNoIHR5cGUg
JXIgZm9yIGRlY2xhcmF0aW9uICVzIiAlICh0eXBlX2luc3RhbmNlLCBxdWFsaWZpZWRfdHlwZV9u
YW1lKSkKKyAgICAgICAgICAgICAgICBzZWxmLnR5cGVzX2J5X25hbWVbcXVhbGlmaWVkX3R5cGVf
bmFtZV0gPSB0eXBlX2luc3RhbmNlCisKKyAgICAgICAgIyBSZXNvbHZlIGFsbCB0eXBlIHJlZmVy
ZW5jZXMgcmVjdXJzaXZlbHkuCisgICAgICAgIGZvciBkb21haW4gaW4gc2VsZi5kb21haW5zOgor
ICAgICAgICAgICAgZG9tYWluLnJlc29sdmVfdHlwZV9yZWZlcmVuY2VzKHNlbGYpCisKKyAgICBk
ZWYgbG9va3VwX3R5cGVfZm9yX2RlY2xhcmF0aW9uKHNlbGYsIGRlY2xhcmF0aW9uLCBkb21haW4p
OgorICAgICAgICAjIFRoaXMgd2lsbCBvbmx5IG1hdGNoIGEgdHlwZSBkZWZpbmVkIGluIHRoZSBz
YW1lIGRvbWFpbiwgd2hlcmUgcHJlZml4ZXMgYXJlbid0IHJlcXVpcmVkLgorICAgICAgICBxdWFs
aWZpZWRfbmFtZSA9ICIuIi5qb2luKFtkb21haW4uZG9tYWluX25hbWUsIGRlY2xhcmF0aW9uLnR5
cGVfbmFtZV0pCisgICAgICAgIGlmIHF1YWxpZmllZF9uYW1lIGluIHNlbGYudHlwZXNfYnlfbmFt
ZToKKyAgICAgICAgICAgIGZvdW5kX3R5cGUgPSBzZWxmLnR5cGVzX2J5X25hbWVbcXVhbGlmaWVk
X25hbWVdCisgICAgICAgICAgICBmb3VuZF90eXBlLnJlc29sdmVfdHlwZV9yZWZlcmVuY2VzKHNl
bGYpCisgICAgICAgICAgICByZXR1cm4gZm91bmRfdHlwZQorCisgICAgICAgIHJhaXNlIFR5cGVj
aGVja0V4Y2VwdGlvbigiTG9va3VwIGZhaWxlZCBmb3IgdHlwZSBkZWNsYXJhdGlvbjogJXMgKHJl
ZmVyZW5jZWQgZnJvbSBkb21haW46ICVzKSIgJSAoZGVjbGFyYXRpb24udHlwZV9uYW1lLCBkb21h
aW4uZG9tYWluX25hbWUpKQorCisgICAgZGVmIGxvb2t1cF90eXBlX3JlZmVyZW5jZShzZWxmLCB0
eXBlX3JlZiwgZG9tYWluKToKKyAgICAgICAgIyBJZiByZWZlcmVuY2UgaXMgdG8gYW4gYW5vbnlt
b3VzIGFycmF5IHR5cGUsIGNyZWF0ZSBhIGZyZXNoIGluc3RhbmNlLgorICAgICAgICBpZiB0eXBl
X3JlZi50eXBlX2tpbmQgPT0gImFycmF5IjoKKyAgICAgICAgICAgIHR5cGVfaW5zdGFuY2UgPSBB
cnJheVR5cGUodHlwZV9yZWYuYXJyYXlfdHlwZV9yZWYsIGRvbWFpbikKKyAgICAgICAgICAgIHR5
cGVfaW5zdGFuY2UucmVzb2x2ZV90eXBlX3JlZmVyZW5jZXMoc2VsZikKKyAgICAgICAgICAgIGxv
Zy5kZWJ1ZygiPCBDcmVhdGVkIGZyZXNoIHR5cGUgaW5zdGFuY2UgZm9yIGFub255bW91cyBhcnJh
eSB0eXBlOiAlcyIgJSB0eXBlX2luc3RhbmNlLnF1YWxpZmllZF9uYW1lKCkpCisgICAgICAgICAg
ICByZXR1cm4gdHlwZV9pbnN0YW5jZQorCisgICAgICAgICMgSWYgcmVmZXJlbmNlIGlzIHRvIGFu
IGFub255bW91cyBlbnVtIHR5cGUsIGNyZWF0ZSBhIGZyZXNoIGluc3RhbmNlLgorICAgICAgICBp
ZiB0eXBlX3JlZi5lbnVtX3ZhbHVlcyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICMgV2UgbmVl
ZCB0byBjcmVhdGUgYSB0eXBlIHJlZmVyZW5jZSB3aXRob3V0IGVudW0gdmFsdWVzIGFzIHRoZSBl
bnVtJ3MgbmVzdGVkIHR5cGUuCisgICAgICAgICAgICBwcmltaXRpdmVfdHlwZV9yZWYgPSBUeXBl
UmVmZXJlbmNlKHR5cGVfcmVmLnR5cGVfa2luZCwgTm9uZSwgTm9uZSwgTm9uZSkKKyAgICAgICAg
ICAgIHR5cGVfaW5zdGFuY2UgPSBFbnVtVHlwZSgiKGFub255bW91cykiLCBkb21haW4sIHR5cGVf
cmVmLmVudW1fdmFsdWVzLCBwcmltaXRpdmVfdHlwZV9yZWYsIFRydWUpCisgICAgICAgICAgICB0
eXBlX2luc3RhbmNlLnJlc29sdmVfdHlwZV9yZWZlcmVuY2VzKHNlbGYpCisgICAgICAgICAgICBs
b2cuZGVidWcoIjwgQ3JlYXRlZCBmcmVzaCB0eXBlIGluc3RhbmNlIGZvciBhbm9ueW1vdXMgZW51
bSB0eXBlOiAlcyIgJSB0eXBlX2luc3RhbmNlLnF1YWxpZmllZF9uYW1lKCkpCisgICAgICAgICAg
ICByZXR1cm4gdHlwZV9pbnN0YW5jZQorCisgICAgICAgICMgVGhpcyB3aWxsIG1hdGNoIHdoZW4g
cmVmZXJlbmNpbmcgYSB0eXBlIGRlZmluZWQgaW4gdGhlIHNhbWUgZG9tYWluLCB3aGVyZSBwcmVm
aXhlcyBhcmVuJ3QgcmVxdWlyZWQuCisgICAgICAgIHF1YWxpZmllZF9uYW1lID0gIi4iLmpvaW4o
W2RvbWFpbi5kb21haW5fbmFtZSwgdHlwZV9yZWYucmVmZXJlbmNlZF9uYW1lKCldKQorICAgICAg
ICBpZiBxdWFsaWZpZWRfbmFtZSBpbiBzZWxmLnR5cGVzX2J5X25hbWU6CisgICAgICAgICAgICBm
b3VuZF90eXBlID0gc2VsZi50eXBlc19ieV9uYW1lW3F1YWxpZmllZF9uYW1lXQorICAgICAgICAg
ICAgZm91bmRfdHlwZS5yZXNvbHZlX3R5cGVfcmVmZXJlbmNlcyhzZWxmKQorICAgICAgICAgICAg
bG9nLmRlYnVnKCI8IExvb2t1cCBzdWNjZWVkZWQgZm9yIHVucXVhbGlmaWVkIHR5cGU6ICVzIiAl
IGZvdW5kX3R5cGUucXVhbGlmaWVkX25hbWUoKSkKKyAgICAgICAgICAgIHJldHVybiBmb3VuZF90
eXBlCisKKyAgICAgICAgIyBUaGlzIHdpbGwgbWF0Y2ggcHJpbWl0aXZlIHR5cGVzIGFuZCBmdWxs
eS1xdWFsaWZpZWQgdHlwZXMgZnJvbSBhIGRpZmZlcmVudCBkb21haW4uCisgICAgICAgIGlmIHR5
cGVfcmVmLnJlZmVyZW5jZWRfbmFtZSgpIGluIHNlbGYudHlwZXNfYnlfbmFtZToKKyAgICAgICAg
ICAgIGZvdW5kX3R5cGUgPSBzZWxmLnR5cGVzX2J5X25hbWVbdHlwZV9yZWYucmVmZXJlbmNlZF9u
YW1lKCldCisgICAgICAgICAgICBmb3VuZF90eXBlLnJlc29sdmVfdHlwZV9yZWZlcmVuY2VzKHNl
bGYpCisgICAgICAgICAgICBsb2cuZGVidWcoIjwgTG9va3VwIHN1Y2NlZWRlZCBmb3IgcHJpbWl0
aXZlIG9yIHF1YWxpZmllZCB0eXBlOiAlcyIgJSBmb3VuZF90eXBlLnF1YWxpZmllZF9uYW1lKCkp
CisgICAgICAgICAgICByZXR1cm4gZm91bmRfdHlwZQorCisgICAgICAgIHJhaXNlIFR5cGVjaGVj
a0V4Y2VwdGlvbigiTG9va3VwIGZhaWxlZCBmb3IgdHlwZSByZWZlcmVuY2U6ICVzIChyZWZlcmVu
Y2VkIGZyb20gZG9tYWluOiAlcykiICUgKHR5cGVfcmVmLnJlZmVyZW5jZWRfbmFtZSgpLCBkb21h
aW4uZG9tYWluX25hbWUpKQorCisKK2NsYXNzIERvbWFpbjoKKyAgICBkZWYgX19pbml0X18oc2Vs
ZiwgZG9tYWluX25hbWUsIGRlc2NyaXB0aW9uLCBpc1N1cHBsZW1lbnRhbCwgdHlwZV9kZWNsYXJh
dGlvbnMsIGNvbW1hbmRzLCBldmVudHMpOgorICAgICAgICBzZWxmLmRvbWFpbl9uYW1lID0gZG9t
YWluX25hbWUKKyAgICAgICAgc2VsZi5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uCisgICAgICAg
IHNlbGYuaXNfc3VwcGxlbWVudGFsID0gaXNTdXBwbGVtZW50YWwKKyAgICAgICAgc2VsZi50eXBl
X2RlY2xhcmF0aW9ucyA9IHR5cGVfZGVjbGFyYXRpb25zCisgICAgICAgIHNlbGYuY29tbWFuZHMg
PSBjb21tYW5kcworICAgICAgICBzZWxmLmV2ZW50cyA9IGV2ZW50cworCisgICAgZGVmIHJlc29s
dmVfdHlwZV9yZWZlcmVuY2VzKHNlbGYsIHByb3RvY29sKToKKyAgICAgICAgbG9nLmRlYnVnKCI+
IFJlc29sdmluZyB0eXBlIGRlY2xhcmF0aW9ucyBmb3IgZG9tYWluOiAlcyIgJSBzZWxmLmRvbWFp
bl9uYW1lKQorICAgICAgICBmb3IgZGVjbGFyYXRpb24gaW4gc2VsZi50eXBlX2RlY2xhcmF0aW9u
czoKKyAgICAgICAgICAgIGRlY2xhcmF0aW9uLnJlc29sdmVfdHlwZV9yZWZlcmVuY2VzKHByb3Rv
Y29sLCBzZWxmKQorCisgICAgICAgIGxvZy5kZWJ1ZygiPiBSZXNvbHZpbmcgdHlwZXMgaW4gY29t
bWFuZHMgZm9yIGRvbWFpbjogJXMiICUgc2VsZi5kb21haW5fbmFtZSkKKyAgICAgICAgZm9yIGNv
bW1hbmQgaW4gc2VsZi5jb21tYW5kczoKKyAgICAgICAgICAgIGNvbW1hbmQucmVzb2x2ZV90eXBl
X3JlZmVyZW5jZXMocHJvdG9jb2wsIHNlbGYpCisKKyAgICAgICAgbG9nLmRlYnVnKCI+IFJlc29s
dmluZyB0eXBlcyBpbiBldmVudHMgZm9yIGRvbWFpbjogJXMiICUgc2VsZi5kb21haW5fbmFtZSkK
KyAgICAgICAgZm9yIGV2ZW50IGluIHNlbGYuZXZlbnRzOgorICAgICAgICAgICAgZXZlbnQucmVz
b2x2ZV90eXBlX3JlZmVyZW5jZXMocHJvdG9jb2wsIHNlbGYpCisKKworY2xhc3MgRG9tYWluczoK
KyAgICBHTE9CQUwgPSBEb21haW4oIiIsICJUaGUgZ2xvYmFsIGRvbWFpbiwgaW4gd2hpY2ggcHJp
bWl0aXZlIHR5cGVzIGFyZSBpbXBsaWNpdGx5IGRlY2xhcmVkLiIsIFRydWUsIFtdLCBbXSwgW10p
CisKKworY2xhc3MgVHlwZURlY2xhcmF0aW9uOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0eXBl
X25hbWUsIHR5cGVfcmVmLCBkZXNjcmlwdGlvbiwgdHlwZV9tZW1iZXJzKToKKyAgICAgICAgc2Vs
Zi50eXBlX25hbWUgPSBfVFlQRVNfTkVFRElOR19SRU5BTUVfV09SS0FST1VORFMuZ2V0KHR5cGVf
bmFtZSwgdHlwZV9uYW1lKQorICAgICAgICBzZWxmLnR5cGVfcmVmID0gdHlwZV9yZWYKKyAgICAg
ICAgc2VsZi5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uCisgICAgICAgIHNlbGYudHlwZV9tZW1i
ZXJzID0gdHlwZV9tZW1iZXJzCisKKyAgICAgICAgaWYgc2VsZi50eXBlX25hbWUgIT0gdWNmaXJz
dChzZWxmLnR5cGVfbmFtZSk6CisgICAgICAgICAgICByYWlzZSBQYXJzZUV4Y2VwdGlvbigiVHlw
ZXMgbXVzdCBiZWdpbiB3aXRoIGFuIHVwcGVyY2FzZSBjaGFyYWN0ZXIuIikKKworICAgIGRlZiBy
ZXNvbHZlX3R5cGVfcmVmZXJlbmNlcyhzZWxmLCBwcm90b2NvbCwgZG9tYWluKToKKyAgICAgICAg
bG9nLmRlYnVnKCI+PiBSZXNvbHZpbmcgdHlwZSByZWZlcmVuY2VzIGZvciB0eXBlIGRlY2xhcmF0
aW9uOiAlcyIgJSBzZWxmLnR5cGVfbmFtZSkKKyAgICAgICAgc2VsZi50eXBlID0gcHJvdG9jb2wu
bG9va3VwX3R5cGVfZm9yX2RlY2xhcmF0aW9uKHNlbGYsIGRvbWFpbikKKyAgICAgICAgZm9yIG1l
bWJlciBpbiBzZWxmLnR5cGVfbWVtYmVyczoKKyAgICAgICAgICAgIG1lbWJlci5yZXNvbHZlX3R5
cGVfcmVmZXJlbmNlcyhwcm90b2NvbCwgZG9tYWluKQorCisKK2NsYXNzIFR5cGVNZW1iZXI6Cisg
ICAgZGVmIF9faW5pdF9fKHNlbGYsIG1lbWJlcl9uYW1lLCB0eXBlX3JlZiwgaXNfb3B0aW9uYWws
IGRlc2NyaXB0aW9uKToKKyAgICAgICAgc2VsZi5tZW1iZXJfbmFtZSA9IG1lbWJlcl9uYW1lCisg
ICAgICAgIHNlbGYudHlwZV9yZWYgPSB0eXBlX3JlZgorICAgICAgICBzZWxmLmlzX29wdGlvbmFs
ID0gaXNfb3B0aW9uYWwKKyAgICAgICAgc2VsZi5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uCisK
KyAgICAgICAgaWYgc2VsZi5pc19vcHRpb25hbCBub3QgaW4gW1RydWUsIEZhbHNlXToKKyAgICAg
ICAgICAgIHJhaXNlIFBhcnNlRXhjZXB0aW9uKCJUaGUgJ29wdGlvbmFsJyBmbGFnIGZvciBhIHR5
cGUgbWVtYmVyIG11c3QgYmUgYSBib29sZWFuIGxpdGVyYWwuIikKKworICAgIGRlZiByZXNvbHZl
X3R5cGVfcmVmZXJlbmNlcyhzZWxmLCBwcm90b2NvbCwgZG9tYWluKToKKyAgICAgICAgbG9nLmRl
YnVnKCI+Pj4gUmVzb2x2aW5nIHR5cGUgcmVmZXJlbmNlcyBmb3IgdHlwZSBtZW1iZXI6ICVzIiAl
IHNlbGYubWVtYmVyX25hbWUpCisgICAgICAgIHNlbGYudHlwZSA9IHByb3RvY29sLmxvb2t1cF90
eXBlX3JlZmVyZW5jZShzZWxmLnR5cGVfcmVmLCBkb21haW4pCisKKworY2xhc3MgUGFyYW1ldGVy
OgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXJhbWV0ZXJfbmFtZSwgdHlwZV9yZWYsIGlzX29w
dGlvbmFsLCBkZXNjcmlwdGlvbik6CisgICAgICAgIHNlbGYucGFyYW1ldGVyX25hbWUgPSBwYXJh
bWV0ZXJfbmFtZQorICAgICAgICBzZWxmLnR5cGVfcmVmID0gdHlwZV9yZWYKKyAgICAgICAgc2Vs
Zi5pc19vcHRpb25hbCA9IGlzX29wdGlvbmFsCisgICAgICAgIHNlbGYuZGVzY3JpcHRpb24gPSBk
ZXNjcmlwdGlvbgorCisgICAgICAgIGlmIHNlbGYuaXNfb3B0aW9uYWwgbm90IGluIFtUcnVlLCBG
YWxzZV06CisgICAgICAgICAgICByYWlzZSBQYXJzZUV4Y2VwdGlvbigiVGhlICdvcHRpb25hbCcg
ZmxhZyBmb3IgYSBwYXJhbWV0ZXIgbXVzdCBiZSBhIGJvb2xlYW4gbGl0ZXJhbC4iKQorCisgICAg
ZGVmIHJlc29sdmVfdHlwZV9yZWZlcmVuY2VzKHNlbGYsIHByb3RvY29sLCBkb21haW4pOgorICAg
ICAgICBsb2cuZGVidWcoIj4+PiBSZXNvbHZpbmcgdHlwZSByZWZlcmVuY2VzIGZvciBwYXJhbWV0
ZXI6ICVzIiAlIHNlbGYucGFyYW1ldGVyX25hbWUpCisgICAgICAgIHNlbGYudHlwZSA9IHByb3Rv
Y29sLmxvb2t1cF90eXBlX3JlZmVyZW5jZShzZWxmLnR5cGVfcmVmLCBkb21haW4pCisKKworY2xh
c3MgQ29tbWFuZDoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY29tbWFuZF9uYW1lLCBjYWxsX3Bh
cmFtZXRlcnMsIHJldHVybl9wYXJhbWV0ZXJzLCBkZXNjcmlwdGlvbiwgaXNfYXN5bmMpOgorICAg
ICAgICBzZWxmLmNvbW1hbmRfbmFtZSA9IGNvbW1hbmRfbmFtZQorICAgICAgICBzZWxmLmNhbGxf
cGFyYW1ldGVycyA9IGNhbGxfcGFyYW1ldGVycworICAgICAgICBzZWxmLnJldHVybl9wYXJhbWV0
ZXJzID0gcmV0dXJuX3BhcmFtZXRlcnMKKyAgICAgICAgc2VsZi5kZXNjcmlwdGlvbiA9IGRlc2Ny
aXB0aW9uCisgICAgICAgIHNlbGYuaXNfYXN5bmMgPSBpc19hc3luYworCisgICAgZGVmIHJlc29s
dmVfdHlwZV9yZWZlcmVuY2VzKHNlbGYsIHByb3RvY29sLCBkb21haW4pOgorICAgICAgICBsb2cu
ZGVidWcoIj4+IFJlc29sdmluZyB0eXBlIHJlZmVyZW5jZXMgZm9yIGNhbGwgcGFyYW1ldGVycyBp
biBjb21tYW5kOiAlcyIgJSBzZWxmLmNvbW1hbmRfbmFtZSkKKyAgICAgICAgZm9yIHBhcmFtZXRl
ciBpbiBzZWxmLmNhbGxfcGFyYW1ldGVyczoKKyAgICAgICAgICAgIHBhcmFtZXRlci5yZXNvbHZl
X3R5cGVfcmVmZXJlbmNlcyhwcm90b2NvbCwgZG9tYWluKQorCisgICAgICAgIGxvZy5kZWJ1Zygi
Pj4gUmVzb2x2aW5nIHR5cGUgcmVmZXJlbmNlcyBmb3IgcmV0dXJuIHBhcmFtZXRlcnMgaW4gY29t
bWFuZDogJXMiICUgc2VsZi5jb21tYW5kX25hbWUpCisgICAgICAgIGZvciBwYXJhbWV0ZXIgaW4g
c2VsZi5yZXR1cm5fcGFyYW1ldGVyczoKKyAgICAgICAgICAgIHBhcmFtZXRlci5yZXNvbHZlX3R5
cGVfcmVmZXJlbmNlcyhwcm90b2NvbCwgZG9tYWluKQorCisKK2NsYXNzIEV2ZW50OgorICAgIGRl
ZiBfX2luaXRfXyhzZWxmLCBldmVudF9uYW1lLCBldmVudF9wYXJhbWV0ZXJzLCBkZXNjcmlwdGlv
bik6CisgICAgICAgIHNlbGYuZXZlbnRfbmFtZSA9IGV2ZW50X25hbWUKKyAgICAgICAgc2VsZi5l
dmVudF9wYXJhbWV0ZXJzID0gZXZlbnRfcGFyYW1ldGVycworICAgICAgICBzZWxmLmRlc2NyaXB0
aW9uID0gZGVzY3JpcHRpb24KKworICAgIGRlZiByZXNvbHZlX3R5cGVfcmVmZXJlbmNlcyhzZWxm
LCBwcm90b2NvbCwgZG9tYWluKToKKyAgICAgICAgbG9nLmRlYnVnKCI+PiBSZXNvbHZpbmcgdHlw
ZSByZWZlcmVuY2VzIGZvciBwYXJhbWV0ZXJzIGluIGV2ZW50OiAlcyIgJSBzZWxmLmV2ZW50X25h
bWUpCisgICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gc2VsZi5ldmVudF9wYXJhbWV0ZXJzOgorICAg
ICAgICAgICAgcGFyYW1ldGVyLnJlc29sdmVfdHlwZV9yZWZlcmVuY2VzKHByb3RvY29sLCBkb21h
aW4pCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5IGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4yZmQ2ZGZiZTczZGEzZmU0ZjJlMWE0YzNkMWVhYjQ1NWQ4Nzhj
ZTZiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQpAQCAtMCwwICsx
LDE4NiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoYykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisjIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyMgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisjIFRoaXMgc2NyaXB0IGdlbmVyYXRlcyBKUyBh
bmQgQysrIGJpbmRpbmdzIGZvciB0aGUgaW5zcGVjdG9yIHByb3RvY29sLgorIyBHZW5lcmF0b3Jz
IGZvciBpbmRpdmlkdWFsIGZpbGVzIGFyZSBsb2NhdGVkIGluIHRoZSBjb2RlZ2VuLyBkaXJlY3Rv
cnkuCisKK2ltcG9ydCBvcy5wYXRoCitpbXBvcnQgcmUKK2ltcG9ydCBzeXMKK2ltcG9ydCBzdHJp
bmcKK2Zyb20gc3RyaW5nIGltcG9ydCBUZW1wbGF0ZQoraW1wb3J0IG9wdHBhcnNlCitpbXBvcnQg
bG9nZ2luZworCit0cnk6CisgICAgaW1wb3J0IGpzb24KK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAg
ICBpbXBvcnQgc2ltcGxlanNvbiBhcyBqc29uCisKK3RyeToKKyAgICBmcm9tIGNvZGVnZW4gaW1w
b3J0ICoKKworIyBXaGVuIGNvcHlpbmcgZ2VuZXJhdG9yIGZpbGVzIHRvIEphdmFTY3JpcHRDb3Jl
J3MgcHJpdmF0ZSBoZWFkZXJzIG9uIE1hYywKKyMgdGhlIGNvZGVnZW4vIG1vZHVsZSBkaXJlY3Rv
cnkgaXMgZmxhdHRlbmVkLiBTbywgaW1wb3J0IGRpcmVjdGx5LgorZXhjZXB0IEltcG9ydEVycm9y
OgorICAgIGltcG9ydCBtb2RlbHMKKyAgICBmcm9tIG1vZGVscyBpbXBvcnQgKgorICAgIGZyb20g
Z2VuZXJhdG9yIGltcG9ydCAqCisKKyAgICBmcm9tIGdlbmVyYXRlX2JhY2tlbmRfY29tbWFuZHMg
aW1wb3J0ICoKKyAgICBmcm9tIGdlbmVyYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIgaW1w
b3J0ICoKKyAgICBmcm9tIGdlbmVyYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlv
biBpbXBvcnQgKgorICAgIGZyb20gZ2VuZXJhdGVfZnJvbnRlbmRfZGlzcGF0Y2hlcl9oZWFkZXIg
aW1wb3J0ICoKKyAgICBmcm9tIGdlbmVyYXRlX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50
YXRpb24gaW1wb3J0ICoKKyAgICBmcm9tIGdlbmVyYXRlX3R5cGVfYnVpbGRlcl9oZWFkZXIgaW1w
b3J0ICoKKyAgICBmcm9tIGdlbmVyYXRlX3R5cGVfYnVpbGRlcl9pbXBsZW1lbnRhdGlvbiBpbXBv
cnQgKgorCisKK2xvZ2dpbmcuYmFzaWNDb25maWcoZm9ybWF0PSclKGxldmVsbmFtZSlzOiAlKG1l
c3NhZ2UpcycsIGxldmVsPWxvZ2dpbmcuRVJST1IpCitsb2cgPSBsb2dnaW5nLmdldExvZ2dlcign
Z2xvYmFsJykKKworCisjIEEgd3JpdGVyIHRoYXQgb25seSB1cGRhdGVzIGZpbGUgaWYgaXQgYWN0
dWFsbHkgY2hhbmdlZC4KK2NsYXNzIEluY3JlbWVudGFsRmlsZVdyaXRlcjoKKyAgICBkZWYgX19p
bml0X18oc2VsZiwgZmlsZXBhdGgsIGZvcmNlX291dHB1dCk6CisgICAgICAgIHNlbGYuX2ZpbGVw
YXRoID0gZmlsZXBhdGgKKyAgICAgICAgc2VsZi5fb3V0cHV0ID0gIiIKKyAgICAgICAgc2VsZi5m
b3JjZV9vdXRwdXQgPSBmb3JjZV9vdXRwdXQKKworICAgIGRlZiB3cml0ZShzZWxmLCB0ZXh0KToK
KyAgICAgICAgc2VsZi5fb3V0cHV0ICs9IHRleHQKKworICAgIGRlZiBjbG9zZShzZWxmKToKKyAg
ICAgICAgdGV4dF9jaGFuZ2VkID0gVHJ1ZQorICAgICAgICBzZWxmLl9vdXRwdXQgPSBzZWxmLl9v
dXRwdXQucnN0cmlwKCkgKyAiXG4iCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgc2Vs
Zi5mb3JjZV9vdXRwdXQ6CisgICAgICAgICAgICAgICAgcmFpc2UKKworICAgICAgICAgICAgcmVh
ZF9maWxlID0gb3BlbihzZWxmLl9maWxlcGF0aCwgInIiKQorICAgICAgICAgICAgb2xkX3RleHQg
PSByZWFkX2ZpbGUucmVhZCgpCisgICAgICAgICAgICByZWFkX2ZpbGUuY2xvc2UoKQorICAgICAg
ICAgICAgdGV4dF9jaGFuZ2VkID0gb2xkX3RleHQgIT0gc2VsZi5fb3V0cHV0CisgICAgICAgIGV4
Y2VwdDoKKyAgICAgICAgICAgICMgSWdub3JlLCBqdXN0IG92ZXJ3cml0ZSBieSBkZWZhdWx0Cisg
ICAgICAgICAgICBwYXNzCisKKyAgICAgICAgaWYgdGV4dF9jaGFuZ2VkIG9yIHNlbGYuZm9yY2Vf
b3V0cHV0OgorICAgICAgICAgICAgb3V0X2ZpbGUgPSBvcGVuKHNlbGYuX2ZpbGVwYXRoLCAidyIp
CisgICAgICAgICAgICBvdXRfZmlsZS53cml0ZShzZWxmLl9vdXRwdXQpCisgICAgICAgICAgICBv
dXRfZmlsZS5jbG9zZSgpCisKKworZGVmIGdlbmVyYXRlX2Zyb21fc3BlY2lmaWNhdGlvbihwcmlt
YXJ5X3NwZWNpZmljYXRpb25fZmlsZXBhdGg9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3VwcGxlbWVudGFsX3NwZWNpZmljYXRpb25fZmlsZXBhdGhzPVtdLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25jYXRlbmF0ZV9vdXRwdXQ9RmFsc2UsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9kaXJwYXRoPU5vbmUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmNlX291dHB1dD1GYWxzZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZnJhbWV3b3JrX25hbWU9IiIpOgorCisgICAgZGVmIGxvYWRf
c3BlY2lmaWNhdGlvbihwcm90b2NvbCwgZmlsZXBhdGgsIGlzU3VwcGxlbWVudGFsPUZhbHNlKToK
KyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2l0aCBvcGVuKGZpbGVwYXRoLCAiciIpIGFzIGlu
cHV0X2ZpbGU6CisgICAgICAgICAgICAgICAgcGFyc2VkX2pzb24gPSBqc29uLmxvYWQoaW5wdXRf
ZmlsZSkKKyAgICAgICAgICAgICAgICBwcm90b2NvbC5wYXJzZV9zcGVjaWZpY2F0aW9uKHBhcnNl
ZF9qc29uLCBpc1N1cHBsZW1lbnRhbCkKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IgYXMgZToK
KyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiRXJyb3IgcGFyc2luZyB2YWxpZCBKU09OIGlu
IGZpbGU6ICIgKyBmaWxlcGF0aCkKKworICAgIHByb3RvY29sID0gbW9kZWxzLlByb3RvY29sKGZy
YW1ld29ya19uYW1lKQorICAgIGZvciBzcGVjaWZpY2F0aW9uIGluIHN1cHBsZW1lbnRhbF9zcGVj
aWZpY2F0aW9uX2ZpbGVwYXRoczoKKyAgICAgICAgbG9hZF9zcGVjaWZpY2F0aW9uKHByb3RvY29s
LCBzcGVjaWZpY2F0aW9uLCBpc1N1cHBsZW1lbnRhbD1UcnVlKQorICAgIGxvYWRfc3BlY2lmaWNh
dGlvbihwcm90b2NvbCwgcHJpbWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRoLCBpc1N1cHBsZW1l
bnRhbD1GYWxzZSkKKworICAgIHByb3RvY29sLnJlc29sdmVfdHlwZXMoKQorCisgICAgZ2VuZXJh
dG9ycyA9IFtdCisgICAgZ2VuZXJhdG9ycy5hcHBlbmQoQmFja2VuZENvbW1hbmRzR2VuZXJhdG9y
KHByb3RvY29sLCBwcmltYXJ5X3NwZWNpZmljYXRpb25fZmlsZXBhdGgpKQorICAgIGdlbmVyYXRv
cnMuYXBwZW5kKEJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yKHByb3RvY29sLCBwcmlt
YXJ5X3NwZWNpZmljYXRpb25fZmlsZXBhdGgpKQorICAgIGdlbmVyYXRvcnMuYXBwZW5kKEJhY2tl
bmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IocHJvdG9jb2wsIHByaW1hcnlfc3Bl
Y2lmaWNhdGlvbl9maWxlcGF0aCkpCisgICAgZ2VuZXJhdG9ycy5hcHBlbmQoRnJvbnRlbmREaXNw
YXRjaGVySGVhZGVyR2VuZXJhdG9yKHByb3RvY29sLCBwcmltYXJ5X3NwZWNpZmljYXRpb25fZmls
ZXBhdGgpKQorICAgIGdlbmVyYXRvcnMuYXBwZW5kKEZyb250ZW5kRGlzcGF0Y2hlckltcGxlbWVu
dGF0aW9uR2VuZXJhdG9yKHByb3RvY29sLCBwcmltYXJ5X3NwZWNpZmljYXRpb25fZmlsZXBhdGgp
KQorICAgIGdlbmVyYXRvcnMuYXBwZW5kKFR5cGVCdWlsZGVySGVhZGVyR2VuZXJhdG9yKHByb3Rv
Y29sLCBwcmltYXJ5X3NwZWNpZmljYXRpb25fZmlsZXBhdGgpKQorICAgIGdlbmVyYXRvcnMuYXBw
ZW5kKFR5cGVCdWlsZGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IocHJvdG9jb2wsIHByaW1hcnlf
c3BlY2lmaWNhdGlvbl9maWxlcGF0aCkpCisKKyAgICBzaW5nbGVfb3V0cHV0X2ZpbGVfY29udGVu
dHMgPSBbXQorCisgICAgZm9yIGdlbmVyYXRvciBpbiBnZW5lcmF0b3JzOgorICAgICAgICBvdXRw
dXQgPSBnZW5lcmF0b3IuZ2VuZXJhdGVfb3V0cHV0KCkKKyAgICAgICAgaWYgY29uY2F0ZW5hdGVf
b3V0cHV0OgorICAgICAgICAgICAgc2luZ2xlX291dHB1dF9maWxlX2NvbnRlbnRzLmFwcGVuZCgn
IyMjIEJlZ2luIEZpbGU6ICVzJyAlIGdlbmVyYXRvci5vdXRwdXRfZmlsZW5hbWUoKSkKKyAgICAg
ICAgICAgIHNpbmdsZV9vdXRwdXRfZmlsZV9jb250ZW50cy5hcHBlbmQob3V0cHV0KQorICAgICAg
ICAgICAgc2luZ2xlX291dHB1dF9maWxlX2NvbnRlbnRzLmFwcGVuZCgnIyMjIEVuZCBGaWxlOiAl
cycgJSBnZW5lcmF0b3Iub3V0cHV0X2ZpbGVuYW1lKCkpCisgICAgICAgICAgICBzaW5nbGVfb3V0
cHV0X2ZpbGVfY29udGVudHMuYXBwZW5kKCcnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAg
b3V0cHV0X2ZpbGUgPSBJbmNyZW1lbnRhbEZpbGVXcml0ZXIob3MucGF0aC5qb2luKG91dHB1dF9k
aXJwYXRoLCBnZW5lcmF0b3Iub3V0cHV0X2ZpbGVuYW1lKCkpLCBmb3JjZV9vdXRwdXQpCisgICAg
ICAgICAgICBvdXRwdXRfZmlsZS53cml0ZShvdXRwdXQpCisgICAgICAgICAgICBvdXRwdXRfZmls
ZS5jbG9zZSgpCisKKyAgICBpZiBjb25jYXRlbmF0ZV9vdXRwdXQ6CisgICAgICAgIGZpbGVuYW1l
ID0gb3MucGF0aC5qb2luKG9zLnBhdGguYmFzZW5hbWUocHJpbWFyeV9zcGVjaWZpY2F0aW9uX2Zp
bGVwYXRoKSArICctcmVzdWx0JykKKyAgICAgICAgb3V0cHV0X2ZpbGUgPSBJbmNyZW1lbnRhbEZp
bGVXcml0ZXIob3MucGF0aC5qb2luKG91dHB1dF9kaXJwYXRoLCBmaWxlbmFtZSksIGZvcmNlX291
dHB1dCkKKyAgICAgICAgb3V0cHV0X2ZpbGUud3JpdGUoJ1xuJy5qb2luKHNpbmdsZV9vdXRwdXRf
ZmlsZV9jb250ZW50cykpCisgICAgICAgIG91dHB1dF9maWxlLmNsb3NlKCkKKworCitpZiBfX25h
bWVfXyA9PSAnX19tYWluX18nOgorICAgIGFsbG93ZWRfZnJhbWV3b3JrX25hbWVzID0gWydXVEYn
LCAnSmF2YVNjcmlwdENvcmUnLCAnV2ViQ29yZScsICdXZWJLaXQnLCAnV2ViS2l0MicsICdUZXN0
J10KKyAgICBjbGlfcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKHVzYWdlPSJ1c2FnZTog
JXByb2cgW29wdGlvbnNdIFByaW1hcnlQcm90b2NvbC5qc29uIFtTdXBwbGVtZW50YWxQcm90b2Nv
bC5qc29uIC4uLl0iKQorICAgIGNsaV9wYXJzZXIuYWRkX29wdGlvbigiLW8iLCAiLS1vdXRwdXRE
aXIiLCBoZWxwPSJEaXJlY3Rvcnkgd2hlcmUgZ2VuZXJhdGVkIGZpbGVzIHNob3VsZCBiZSB3cml0
dGVuLiIpCisgICAgY2xpX3BhcnNlci5hZGRfb3B0aW9uKCItLWZyYW1ld29yayIsIHR5cGU9ImNo
b2ljZSIsIGNob2ljZXM9YWxsb3dlZF9mcmFtZXdvcmtfbmFtZXMsIGhlbHA9IlRoZSBmcmFtZXdv
cmsgdGhhdCB0aGUgcHJpbWFyeSBzcGVjaWZpY2F0aW9uIGJlbG9uZ3MgdG8uIikKKyAgICBjbGlf
cGFyc2VyLmFkZF9vcHRpb24oIi0tZm9yY2UiLCBhY3Rpb249InN0b3JlX3RydWUiLCBoZWxwPSJG
b3JjZSBvdXRwdXQgb2YgZ2VuZXJhdGVkIHNjcmlwdHMsIGV2ZW4gaWYgbm90aGluZyBjaGFuZ2Vk
LiIpCisgICAgY2xpX3BhcnNlci5hZGRfb3B0aW9uKCItdiIsICItLWRlYnVnIiwgYWN0aW9uPSJz
dG9yZV90cnVlIiwgaGVscD0iTG9nIGV4dHJhIG91dHB1dCBmb3IgZGVidWdnaW5nIHRoZSBnZW5l
cmF0b3IgaXRzZWxmLiIpCisgICAgY2xpX3BhcnNlci5hZGRfb3B0aW9uKCItdCIsICItLXRlc3Qi
LCBhY3Rpb249InN0b3JlX3RydWUiLCBoZWxwPSJFbmFibGUgdGVzdCBtb2RlLiBVc2UgdW5pcXVl
IG91dHB1dCBmaWxlbmFtZXMgY3JlYXRlZCBieSBwcmVwZW5kaW5nIHRoZSBpbnB1dCBmaWxlbmFt
ZS4iKQorCisgICAgb3B0aW9ucyA9IE5vbmUKKworICAgIGFyZ19vcHRpb25zLCBhcmdfdmFsdWVz
ID0gY2xpX3BhcnNlci5wYXJzZV9hcmdzKCkKKyAgICBpZiAobGVuKGFyZ192YWx1ZXMpIDwgMSk6
CisgICAgICAgIHJhaXNlIFBhcnNlRXhjZXB0aW9uKCJBdCBsZWFzdCBvbmUgcGxhaW4gYXJndW1l
bnQgZXhwZWN0ZWQiKQorCisgICAgaWYgbm90IGFyZ19vcHRpb25zLm91dHB1dERpcjoKKyAgICAg
ICAgcmFpc2UgUGFyc2VFeGNlcHRpb24oIk1pc3Npbmcgb3V0cHV0IGRpcmVjdG9yeSIpCisKKyAg
ICBpZiBhcmdfb3B0aW9ucy5kZWJ1ZzoKKyAgICAgICAgbG9nLnNldExldmVsKGxvZ2dpbmcuREVC
VUcpCisKKyAgICBvcHRpb25zID0geworICAgICAgICAncHJpbWFyeV9zcGVjaWZpY2F0aW9uX2Zp
bGVwYXRoJzogYXJnX3ZhbHVlc1swXSwKKyAgICAgICAgJ3N1cHBsZW1lbnRhbF9zcGVjaWZpY2F0
aW9uX2ZpbGVwYXRocyc6IGFyZ192YWx1ZXNbMTpdLAorICAgICAgICAnb3V0cHV0X2RpcnBhdGgn
OiBhcmdfb3B0aW9ucy5vdXRwdXREaXIsCisgICAgICAgICdjb25jYXRlbmF0ZV9vdXRwdXQnOiBh
cmdfb3B0aW9ucy50ZXN0LAorICAgICAgICAnZnJhbWV3b3JrX25hbWUnOiBhcmdfb3B0aW9ucy5m
cmFtZXdvcmssCisgICAgICAgICdmb3JjZV9vdXRwdXQnOiBhcmdfb3B0aW9ucy5mb3JjZQorICAg
IH0KKworICAgIHRyeToKKyAgICAgICAgZ2VuZXJhdGVfZnJvbV9zcGVjaWZpY2F0aW9uKCoqb3B0
aW9ucykKKyAgICBleGNlcHQgKFBhcnNlRXhjZXB0aW9uLCBUeXBlY2hlY2tFeGNlcHRpb24pIGFz
IGU6CisgICAgICAgIGlmIGFyZ19vcHRpb25zLnRlc3Q6CisgICAgICAgICAgICBsb2cuZXJyb3Io
ZS5tZXNzYWdlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgICMgRm9yY2UgdGhl
IGJ1aWxkIHRvIGZhaWwuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbiBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9jb21tYW5kcy13aXRo
LWFzeW5jLWF0dHJpYnV0ZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU2MWI1Y2VhYjE0YzdhYzM3ZWU1MWE5
YmQ3YzkyMDNmYzViYWIxMGIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUu
anNvbgpAQCAtMCwwICsxLDEwMCBAQAoreworICAgICJkb21haW4iOiAiRGF0YWJhc2UiLAorICAg
ICJ0eXBlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIkRhdGFiYXNlSWQiLAor
ICAgICAgICAgICAgInR5cGUiOiAiaW50ZWdlciIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24i
OiAiVW5pcXVlIGlkZW50aWZpZXIgb2YgRGF0YWJhc2Ugb2JqZWN0LiIKKyAgICAgICAgfSwKKyAg
ICAgICAgeworICAgICAgICAgICAgImlkIjogIlByaW1hcnlDb2xvcnMiLAorICAgICAgICAgICAg
InR5cGUiOiAic3RyaW5nIiwKKyAgICAgICAgICAgICJlbnVtIjogWyJyZWQiLCAiZ3JlZW4iLCAi
Ymx1ZSJdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJFcnJvciIs
CisgICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9u
IjogIkRhdGFiYXNlIGVycm9yLiIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IFsKKyAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogIm1lc3NhZ2UiLCAidHlwZSI6ICJzdHJpbmciLCAiZGVzY3Jp
cHRpb24iOiAiRXJyb3IgbWVzc2FnZS4iIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJj
b2RlIiwgInR5cGUiOiAiaW50ZWdlciIsICJkZXNjcmlwdGlvbiI6ICJFcnJvciBjb2RlLiIgfQor
ICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXSwKKyAgICAiY29tbWFuZHMiOiBbCisgICAg
ICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5W
YWx1ZXMiLAorICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCisgICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJkYXRhYmFzZUlkIiwgIiRyZWYiOiAiRGF0YWJhc2VJZCIgfSwKKyAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogInF1ZXJ5IiwgInR5cGUiOiAic3RyaW5nIiB9CisgICAgICAgICAgICBd
LAorICAgICAgICAgICAgInJldHVybnMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJj
b2x1bW5OYW1lcyIsICJ0eXBlIjogImFycmF5IiwgIm9wdGlvbmFsIjogdHJ1ZSwgIml0ZW1zIjog
eyAidHlwZSI6ICJzdHJpbmciIH0gfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm5vdGVz
IiwgInR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAidGltZXN0YW1wIiwgInR5cGUiOiAibnVtYmVyIiwgIm9wdGlvbmFsIjogdHJ1
ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidmFsdWVzIiwgInR5cGUiOiAib2JqZWN0
IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicGF5bG9h
ZCIsICJ0eXBlIjogImFueSIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7
ICJuYW1lIjogImRhdGFiYXNlSWQiLCAiJHJlZiI6ICJEYXRhYmFzZUlkIiwgIm9wdGlvbmFsIjog
dHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic3FsRXJyb3IiLCAiJHJlZiI6ICJF
cnJvciIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNj
cmVlbkNvbG9yIiwgIiRyZWYiOiAiUHJpbWFyeUNvbG9ycyIsICJvcHRpb25hbCI6IHRydWUgfSwK
KyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInByaW50Q29sb3IiLCAidHlwZSI6ICJzdHJpbmci
LCAiZW51bSI6IFsiY3lhbiIsICJtYWdlbnRhIiwgInllbGxvdyIsICJibGFjayJdLCAib3B0aW9u
YWwiOiB0cnVlIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAg
ICAgICAgIm5hbWUiOiAiZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMiLAorICAg
ICAgICAgICAgImFzeW5jIjogdHJ1ZSwKKyAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWworICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAiZGF0YWJhc2VJZCIsICIkcmVmIjogIkRhdGFiYXNlSWQi
IH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJxdWVyeSIsICJ0eXBlIjogInN0cmluZyIg
fQorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICJyZXR1cm5zIjogWworICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJhcnJheSIsICJvcHRpb25hbCI6
IHRydWUsICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9IH0sCisgICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IHRydWUgfSwK
KyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciIs
ICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInZhbHVlcyIs
ICJ0eXBlIjogIm9iamVjdCIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7
ICJuYW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJhbnkiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisg
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJkYXRhYmFzZUlkIiwgIiRyZWYiOiAiRGF0YWJhc2VJ
ZCIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNxbEVy
cm9yIiwgIiRyZWYiOiAiRXJyb3IiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJzY3JlZW5Db2xvciIsICIkcmVmIjogIlByaW1hcnlDb2xvcnMiLCAib3B0
aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwcmludENvbG9yIiwg
InR5cGUiOiAic3RyaW5nIiwgImVudW0iOiBbImN5YW4iLCAibWFnZW50YSIsICJ5ZWxsb3ciLCAi
YmxhY2siXSwgIm9wdGlvbmFsIjogdHJ1ZSB9CisgICAgICAgICAgICBdCisgICAgICAgIH0sCisg
ICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImV4ZWN1dGVTUUxTeW5jIiwKKyAgICAgICAg
ICAgICJwYXJhbWV0ZXJzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZGF0YWJhc2VJ
ZCIsICIkcmVmIjogIkRhdGFiYXNlSWQiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJx
dWVyeSIsICJ0eXBlIjogInN0cmluZyIgfQorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICJy
ZXR1cm5zIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlw
ZSI6ICJhcnJheSIsICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9IH0sCisgICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIgfSwKKyAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciIgfSwKKyAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogInZhbHVlcyIsICJ0eXBlIjogIm9iamVjdCIgfSwKKyAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJhbnkiIH0sCisgICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJkYXRhYmFzZUlkIiwgIiRyZWYiOiAiRGF0YWJhc2VJZCIgfSwKKyAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogInNxbEVycm9yIiwgIiRyZWYiOiAiRXJyb3IiIH0sCisg
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzY3JlZW5Db2xvciIsICIkcmVmIjogIlByaW1hcnlD
b2xvcnMiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwcmludENvbG9yIiwgInR5cGUi
OiAic3RyaW5nIiwgImVudW0iOiBbImN5YW4iLCAibWFnZW50YSIsICJ5ZWxsb3ciLCAiYmxhY2si
XSB9CisgICAgICAgICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJu
YW1lIjogImV4ZWN1dGVTUUxBc3luYyIsCisgICAgICAgICAgICAiYXN5bmMiOiB0cnVlLAorICAg
ICAgICAgICAgInBhcmFtZXRlcnMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJkYXRh
YmFzZUlkIiwgIiRyZWYiOiAiRGF0YWJhc2VJZCIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1l
IjogInF1ZXJ5IiwgInR5cGUiOiAic3RyaW5nIiB9CisgICAgICAgICAgICBdLAorICAgICAgICAg
ICAgInJldHVybnMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2x1bW5OYW1lcyIs
ICJ0eXBlIjogImFycmF5IiwgIml0ZW1zIjogeyAidHlwZSI6ICJzdHJpbmciIH0gfSwKKyAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogIm5vdGVzIiwgInR5cGUiOiAic3RyaW5nIiB9LAorICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAidGltZXN0YW1wIiwgInR5cGUiOiAibnVtYmVyIiB9LAorICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAidmFsdWVzIiwgInR5cGUiOiAib2JqZWN0IiB9LAorICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAicGF5bG9hZCIsICJ0eXBlIjogImFueSIgfSwKKyAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogImRhdGFiYXNlSWQiLCAiJHJlZiI6ICJEYXRhYmFzZUlkIiB9
LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic3FsRXJyb3IiLCAiJHJlZiI6ICJFcnJvciIg
fSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNjcmVlbkNvbG9yIiwgIiRyZWYiOiAiUHJp
bWFyeUNvbG9ycyIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInByaW50Q29sb3IiLCAi
dHlwZSI6ICJzdHJpbmciLCAiZW51bSI6IFsiY3lhbiIsICJtYWdlbnRhIiwgInllbGxvdyIsICJi
bGFjayJdIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0KK30KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9jb21tYW5kcy13
aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbiBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9jb21tYW5kcy13aXRoLW9wdGlvbmFsLWNh
bGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zODU2MWU3MzQ1NzU1N2I5NTBj
YWJjY2RjMmU5OWE5YTNjMTkzNDBjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2NvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2Fs
bC1yZXR1cm4tcGFyYW1ldGVycy5qc29uCkBAIC0wLDAgKzEsNzYgQEAKK3sKKyAgICAiZG9tYWlu
IjogIkRhdGFiYXNlIiwKKyAgICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJp
ZCI6ICJEYXRhYmFzZUlkIiwKKyAgICAgICAgICAgICJ0eXBlIjogImludGVnZXIiLAorICAgICAg
ICAgICAgImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBpZGVudGlmaWVyIG9mIERhdGFiYXNlIG9iamVj
dC4iCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJQcmltYXJ5Q29s
b3JzIiwKKyAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCisgICAgICAgICAgICAiZW51bSI6
IFsicmVkIiwgImdyZWVuIiwgImJsdWUiXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAg
ICAgICAiaWQiOiAiRXJyb3IiLAorICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKKyAgICAg
ICAgICAgICJkZXNjcmlwdGlvbiI6ICJEYXRhYmFzZSBlcnJvci4iLAorICAgICAgICAgICAgInBy
b3BlcnRpZXMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJtZXNzYWdlIiwgInR5cGUi
OiAic3RyaW5nIiwgImRlc2NyaXB0aW9uIjogIkVycm9yIG1lc3NhZ2UuIiB9LAorICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAiY29kZSIsICJ0eXBlIjogImludGVnZXIiLCAiZGVzY3JpcHRpb24i
OiAiRXJyb3IgY29kZS4iIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0sCisgICAg
ImNvbW1hbmRzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJleGVjdXRlQWxs
T3B0aW9uYWxQYXJhbWV0ZXJzIiwKKyAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWworICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJhcnJheSIsICJvcHRp
b25hbCI6IHRydWUsICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9IH0sCisgICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IHRy
dWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51
bWJlciIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInZh
bHVlcyIsICJ0eXBlIjogIm9iamVjdCIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJhbnkiLCAib3B0aW9uYWwiOiB0cnVl
IH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJkYXRhYmFzZUlkIiwgIiRyZWYiOiAiRGF0
YWJhc2VJZCIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjog
InNxbEVycm9yIiwgIiRyZWYiOiAiRXJyb3IiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJzY3JlZW5Db2xvciIsICIkcmVmIjogIlByaW1hcnlDb2xvcnMi
LCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwcmludENv
bG9yIiwgInR5cGUiOiAic3RyaW5nIiwgImVudW0iOiBbImN5YW4iLCAibWFnZW50YSIsICJ5ZWxs
b3ciLCAiYmxhY2siXSwgIm9wdGlvbmFsIjogdHJ1ZSB9CisgICAgICAgICAgICBdLAorICAgICAg
ICAgICAgInJldHVybnMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2x1bW5OYW1l
cyIsICJ0eXBlIjogImFycmF5IiwgIm9wdGlvbmFsIjogdHJ1ZSwgIml0ZW1zIjogeyAidHlwZSI6
ICJzdHJpbmciIH0gfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm5vdGVzIiwgInR5cGUi
OiAic3RyaW5nIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAidGltZXN0YW1wIiwgInR5cGUiOiAibnVtYmVyIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAidmFsdWVzIiwgInR5cGUiOiAib2JqZWN0IiwgIm9wdGlv
bmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicGF5bG9hZCIsICJ0eXBl
IjogImFueSIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjog
ImRhdGFiYXNlSWQiLCAiJHJlZiI6ICJEYXRhYmFzZUlkIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAor
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic3FsRXJyb3IiLCAiJHJlZiI6ICJFcnJvciIsICJv
cHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNjcmVlbkNvbG9y
IiwgIiRyZWYiOiAiUHJpbWFyeUNvbG9ycyIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogInByaW50Q29sb3IiLCAidHlwZSI6ICJzdHJpbmciLCAiZW51bSI6
IFsiY3lhbiIsICJtYWdlbnRhIiwgInllbGxvdyIsICJibGFjayJdLCAib3B0aW9uYWwiOiB0cnVl
IH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5h
bWUiOiAiZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzIiwKKyAgICAgICAgICAgICJwYXJhbWV0
ZXJzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6
ICJhcnJheSIsICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9IH0sCisgICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIgfSwKKyAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciIgfSwKKyAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogInZhbHVlcyIsICJ0eXBlIjogIm9iamVjdCIgfSwKKyAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJhbnkiIH0sCisgICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJkYXRhYmFzZUlkIiwgIiRyZWYiOiAiRGF0YWJhc2VJZCIgfSwKKyAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogInNxbEVycm9yIiwgIiRyZWYiOiAiRXJyb3IiIH0sCisgICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJzY3JlZW5Db2xvciIsICIkcmVmIjogIlByaW1hcnlDb2xv
cnMiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwcmludENvbG9yIiwgInR5cGUiOiAi
c3RyaW5nIiwgImVudW0iOiBbImN5YW4iLCAibWFnZW50YSIsICJ5ZWxsb3ciLCAiYmxhY2siXSB9
CisgICAgICAgICAgICBdLAorICAgICAgICAgICAgInJldHVybnMiOiBbCisgICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogImFycmF5IiwgIml0ZW1zIjogeyAi
dHlwZSI6ICJzdHJpbmciIH0gfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm5vdGVzIiwg
InR5cGUiOiAic3RyaW5nIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidGltZXN0YW1w
IiwgInR5cGUiOiAibnVtYmVyIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidmFsdWVz
IiwgInR5cGUiOiAib2JqZWN0IiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicGF5bG9h
ZCIsICJ0eXBlIjogImFueSIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImRhdGFiYXNl
SWQiLCAiJHJlZiI6ICJEYXRhYmFzZUlkIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
c3FsRXJyb3IiLCAiJHJlZiI6ICJFcnJvciIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjog
InNjcmVlbkNvbG9yIiwgIiRyZWYiOiAiUHJpbWFyeUNvbG9ycyIgfSwKKyAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogInByaW50Q29sb3IiLCAidHlwZSI6ICJzdHJpbmciLCAiZW51bSI6IFsiY3lh
biIsICJtYWdlbnRhIiwgInllbGxvdyIsICJibGFjayJdIH0KKyAgICAgICAgICAgIF0KKyAgICAg
ICAgfQorICAgIF0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9kb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24g
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZG9tYWlucy13
aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk0YThlY2IxNzZkM2I4
ZWM5YmY5NjY3NmU2M2NlYTA1MTQ2NmI4NjgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZG9tYWlucy13aXRoLXZhcnlpbmct
Y29tbWFuZC1zaXplcy5qc29uCkBAIC0wLDAgKzEsNTQgQEAKK1sKK3sKKyAgICAiZG9tYWluIjog
Ik5ldHdvcmsxIiwKKyAgICAiY29tbWFuZHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJu
YW1lIjogImxvYWRSZXNvdXJjZTEiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkxvYWRz
IGEgcmVzb3VyY2UgaW4gdGhlIGNvbnRleHQgb2YgYSBmcmFtZSBvbiB0aGUgaW5zcGVjdGVkIHBh
Z2Ugd2l0aG91dCBjcm9zcyBvcmlnaW4gY2hlY2tzLiIKKyAgICAgICAgfQorICAgIF0KK30sCit7
CisgICAgImRvbWFpbiI6ICJOZXR3b3JrMiIsCisgICAgInR5cGVzIjogWworICAgICAgICB7Cisg
ICAgICAgICAgICAiaWQiOiAiTG9hZGVySWQiLAorICAgICAgICAgICAgInR5cGUiOiAic3RyaW5n
IiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUgbG9hZGVyIGlkZW50aWZpZXIu
IgorICAgICAgICB9CisgICAgXQorfSwKK3sKKyAgICAiZG9tYWluIjogIk5ldHdvcmszIiwKKyAg
ICAiY29tbWFuZHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImxvYWRSZXNv
dXJjZTEiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkxvYWRzIGEgcmVzb3VyY2UgaW4g
dGhlIGNvbnRleHQgb2YgYSBmcmFtZSBvbiB0aGUgaW5zcGVjdGVkIHBhZ2Ugd2l0aG91dCBjcm9z
cyBvcmlnaW4gY2hlY2tzLiIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5h
bWUiOiAibG9hZFJlc291cmNlMiIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiTG9hZHMg
YSByZXNvdXJjZSBpbiB0aGUgY29udGV4dCBvZiBhIGZyYW1lIG9uIHRoZSBpbnNwZWN0ZWQgcGFn
ZSB3aXRob3V0IGNyb3NzIG9yaWdpbiBjaGVja3MuIgorICAgICAgICB9LAorICAgICAgICB7Cisg
ICAgICAgICAgICAibmFtZSI6ICJsb2FkUmVzb3VyY2UzIiwKKyAgICAgICAgICAgICJkZXNjcmlw
dGlvbiI6ICJMb2FkcyBhIHJlc291cmNlIGluIHRoZSBjb250ZXh0IG9mIGEgZnJhbWUgb24gdGhl
IGluc3BlY3RlZCBwYWdlIHdpdGhvdXQgY3Jvc3Mgb3JpZ2luIGNoZWNrcy4iCisgICAgICAgIH0s
CisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImxvYWRSZXNvdXJjZTQiLAorICAgICAg
ICAgICAgImRlc2NyaXB0aW9uIjogIkxvYWRzIGEgcmVzb3VyY2UgaW4gdGhlIGNvbnRleHQgb2Yg
YSBmcmFtZSBvbiB0aGUgaW5zcGVjdGVkIHBhZ2Ugd2l0aG91dCBjcm9zcyBvcmlnaW4gY2hlY2tz
LiIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAibG9hZFJlc291
cmNlNSIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiTG9hZHMgYSByZXNvdXJjZSBpbiB0
aGUgY29udGV4dCBvZiBhIGZyYW1lIG9uIHRoZSBpbnNwZWN0ZWQgcGFnZSB3aXRob3V0IGNyb3Nz
IG9yaWdpbiBjaGVja3MuIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFt
ZSI6ICJsb2FkUmVzb3VyY2U2IiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJMb2FkcyBh
IHJlc291cmNlIGluIHRoZSBjb250ZXh0IG9mIGEgZnJhbWUgb24gdGhlIGluc3BlY3RlZCBwYWdl
IHdpdGhvdXQgY3Jvc3Mgb3JpZ2luIGNoZWNrcy4iCisgICAgICAgIH0sCisgICAgICAgIHsKKyAg
ICAgICAgICAgICJuYW1lIjogImxvYWRSZXNvdXJjZTciLAorICAgICAgICAgICAgImRlc2NyaXB0
aW9uIjogIkxvYWRzIGEgcmVzb3VyY2UgaW4gdGhlIGNvbnRleHQgb2YgYSBmcmFtZSBvbiB0aGUg
aW5zcGVjdGVkIHBhZ2Ugd2l0aG91dCBjcm9zcyBvcmlnaW4gY2hlY2tzLiIKKyAgICAgICAgfQor
ICAgIF0KK30KK10KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9ldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24gYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXZlbnRzLXdpdGgtb3B0
aW9uYWwtcGFyYW1ldGVycy5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVlZmM3Y2IzMTliMGIzNmZhOTVjNDcx
NDAzMDUzNzc4NjI0YWZjMTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVy
cy5qc29uCkBAIC0wLDAgKzEsNTIgQEAKK3sKKyAgICAiZG9tYWluIjogIkRhdGFiYXNlIiwKKyAg
ICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJEYXRhYmFzZUlkIiwK
KyAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24i
OiAiVW5pcXVlIGlkZW50aWZpZXIgb2YgRGF0YWJhc2Ugb2JqZWN0LiIKKyAgICAgICAgfSwKKyAg
ICAgICAgeworICAgICAgICAgICAgImlkIjogIlByaW1hcnlDb2xvcnMiLAorICAgICAgICAgICAg
InR5cGUiOiAic3RyaW5nIiwKKyAgICAgICAgICAgICJ2YWx1ZXMiOiBbInJlZCIsICJncmVlbiIs
ICJibHVlIl0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIkVycm9y
IiwKKyAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCisgICAgICAgICAgICAiZGVzY3JpcHRp
b24iOiAiRGF0YWJhc2UgZXJyb3IuIiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWworICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAibWVzc2FnZSIsICJ0eXBlIjogInN0cmluZyIsICJkZXNj
cmlwdGlvbiI6ICJFcnJvciBtZXNzYWdlLiIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjog
ImNvZGUiLCAidHlwZSI6ICJpbnRlZ2VyIiwgImRlc2NyaXB0aW9uIjogIkVycm9yIGNvZGUuIiB9
CisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdLAorICAgICJldmVudHMiOiBbCisgICAg
ICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImRpZEV4ZWN1dGVPcHRpb25hbFBhcmFtZXRlcnMi
LAorICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogImFycmF5IiwgIm9wdGlvbmFsIjogdHJ1ZSwgIml0ZW1z
IjogeyAidHlwZSI6ICJzdHJpbmciIH0gfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm5v
dGVzIiwgInR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAidGltZXN0YW1wIiwgInR5cGUiOiAibnVtYmVyIiwgIm9wdGlvbmFsIjog
dHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidmFsdWVzIiwgInR5cGUiOiAib2Jq
ZWN0IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicGF5
bG9hZCIsICJ0eXBlIjogImFueSIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogInNxbEVycm9yIiwgIiRyZWYiOiAiRXJyb3IiLCAib3B0aW9uYWwiOiB0cnVl
IH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzY3JlZW5Db2xvciIsICIkcmVmIjogIlBy
aW1hcnlDb2xvcnMiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJwcmludENvbG9yIiwgInR5cGUiOiAic3RyaW5nIiwgInZhbHVlcyI6IFsiY3lhbiIsICJt
YWdlbnRhIiwgInllbGxvdyIsICJibGFjayJdLCAib3B0aW9uYWwiOiB0cnVlIH0KKyAgICAgICAg
ICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiZGlkRXhl
Y3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzIiwKKyAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWwor
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJhcnJheSIs
ICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9IH0sCisgICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1l
IjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciIgfSwKKyAgICAgICAgICAgICAgICB7ICJu
YW1lIjogInZhbHVlcyIsICJ0eXBlIjogIm9iamVjdCIgfSwKKyAgICAgICAgICAgICAgICB7ICJu
YW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJhbnkiIH0sCisgICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJzcWxFcnJvciIsICIkcmVmIjogIkVycm9yIiB9LAorICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAic2NyZWVuQ29sb3IiLCAiJHJlZiI6ICJQcmltYXJ5Q29sb3JzIiB9LAorICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAicHJpbnRDb2xvciIsICJ0eXBlIjogInN0cmluZyIsICJ2YWx1ZXMi
OiBbImN5YW4iLCAibWFnZW50YSIsICJ5ZWxsb3ciLCAiYmxhY2siXSB9CisgICAgICAgICAgICBd
CisgICAgICAgIH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1hc3luYy1hdHRy
aWJ1dGUuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbi1yZXN1
bHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uYTViN2NhZTQyYjY5YTJhNzFiOTk0OWVjMGNiZjkzNDU1MDEzMWEyMQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9leHBlY3RlZC9jb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uLXJlc3Vs
dApAQCAtMCwwICsxLDczOCBAQAorIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5k
Q29tbWFuZHMuanMKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMt
d2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5CisKKy8vIERhdGFiYXNlLgorSW5zcGVjdG9yQmFja2VuZC5yZWdp
c3RlckRhdGFiYXNlRGlzcGF0Y2hlciA9IEluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW5E
aXNwYXRjaGVyLmJpbmQoSW5zcGVjdG9yQmFja2VuZCwgIkRhdGFiYXNlIik7CitJbnNwZWN0b3JC
YWNrZW5kLnJlZ2lzdGVyRW51bSgiRGF0YWJhc2UuUHJpbWFyeUNvbG9ycyIsIHtSZWQ6ICJyZWQi
LCBHcmVlbjogImdyZWVuIiwgQmx1ZTogImJsdWUifSk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lz
dGVyQ29tbWFuZCgiRGF0YWJhc2UuZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyIs
IFt7Im5hbWUiOiAiZGF0YWJhc2VJZCIsICJ0eXBlIjogIm51bWJlciIsICJvcHRpb25hbCI6IGZh
bHNlfSwgeyJuYW1lIjogInF1ZXJ5IiwgInR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjogZmFs
c2V9XSwgWyJjb2x1bW5OYW1lcyIsICJub3RlcyIsICJ0aW1lc3RhbXAiLCAidmFsdWVzIiwgInBh
eWxvYWQiLCAiZGF0YWJhc2VJZCIsICJzcWxFcnJvciIsICJzY3JlZW5Db2xvciIsICJwcmludENv
bG9yIl0pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIkRhdGFiYXNlLmV4ZWN1
dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzIiwgW3sibmFtZSI6ICJkYXRhYmFzZUlkIiwg
InR5cGUiOiAibnVtYmVyIiwgIm9wdGlvbmFsIjogZmFsc2V9LCB7Im5hbWUiOiAicXVlcnkiLCAi
dHlwZSI6ICJzdHJpbmciLCAib3B0aW9uYWwiOiBmYWxzZX1dLCBbImNvbHVtbk5hbWVzIiwgIm5v
dGVzIiwgInRpbWVzdGFtcCIsICJ2YWx1ZXMiLCAicGF5bG9hZCIsICJkYXRhYmFzZUlkIiwgInNx
bEVycm9yIiwgInNjcmVlbkNvbG9yIiwgInByaW50Q29sb3IiXSk7CitJbnNwZWN0b3JCYWNrZW5k
LnJlZ2lzdGVyQ29tbWFuZCgiRGF0YWJhc2UuZXhlY3V0ZVNRTFN5bmMiLCBbeyJuYW1lIjogImRh
dGFiYXNlSWQiLCAidHlwZSI6ICJudW1iZXIiLCAib3B0aW9uYWwiOiBmYWxzZX0sIHsibmFtZSI6
ICJxdWVyeSIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IGZhbHNlfV0sIFsiY29sdW1u
TmFtZXMiLCAibm90ZXMiLCAidGltZXN0YW1wIiwgInZhbHVlcyIsICJwYXlsb2FkIiwgImRhdGFi
YXNlSWQiLCAic3FsRXJyb3IiLCAic2NyZWVuQ29sb3IiLCAicHJpbnRDb2xvciJdKTsKK0luc3Bl
Y3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJEYXRhYmFzZS5leGVjdXRlU1FMQXN5bmMiLCBb
eyJuYW1lIjogImRhdGFiYXNlSWQiLCAidHlwZSI6ICJudW1iZXIiLCAib3B0aW9uYWwiOiBmYWxz
ZX0sIHsibmFtZSI6ICJxdWVyeSIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IGZhbHNl
fV0sIFsiY29sdW1uTmFtZXMiLCAibm90ZXMiLCAidGltZXN0YW1wIiwgInZhbHVlcyIsICJwYXls
b2FkIiwgImRhdGFiYXNlSWQiLCAic3FsRXJyb3IiLCAic2NyZWVuQ29sb3IiLCAicHJpbnRDb2xv
ciJdKTsKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdEJhY2tlbmRDb21tYW5kcy5qcworCisj
IyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRl
Lmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQor
CisjaWZuZGVmIEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnNfaAorI2RlZmluZSBJbnNw
ZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzX2gKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisK
KyNpbmNsdWRlICJJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmgiCisjaW5jbHVkZSA8aW5zcGVj
dG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQ
dHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3Bl
Y3RvciB7CisKK3R5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCisjaWYgRU5BQkxFKFNRTF9E
QVRBQkFTRSkKK2NsYXNzIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVy
IHsKK3B1YmxpYzoKKyAgICAvLyBOYW1lZCBhZnRlciBwYXJhbWV0ZXIgJ3NjcmVlbkNvbG9yJyB3
aGlsZSBnZW5lcmF0aW5nIGNvbW1hbmQvZXZlbnQgZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVy
blZhbHVlcy4KKyAgICBlbnVtIGNsYXNzIFNjcmVlbkNvbG9yIHsKKyAgICAgICAgUmVkID0gMCwK
KyAgICAgICAgR3JlZW4gPSAxLAorICAgICAgICBCbHVlID0gMiwKKyAgICB9OyAvLyBlbnVtIGNs
YXNzIFNjcmVlbkNvbG9yCisgICAgLy8gTmFtZWQgYWZ0ZXIgcGFyYW1ldGVyICdwcmludENvbG9y
JyB3aGlsZSBnZW5lcmF0aW5nIGNvbW1hbmQvZXZlbnQgZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJl
dHVyblZhbHVlcy4KKyAgICBlbnVtIGNsYXNzIFByaW50Q29sb3IgeworICAgICAgICBDeWFuID0g
MywKKyAgICAgICAgTWFnZW50YSA9IDQsCisgICAgICAgIFllbGxvdyA9IDUsCisgICAgICAgIEJs
YWNrID0gNiwKKyAgICB9OyAvLyBlbnVtIGNsYXNzIFByaW50Q29sb3IKKyAgICB2aXJ0dWFsIHZv
aWQgZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhFcnJvclN0cmluZyosIGludCBp
bl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5LCBSZWZQdHI8SW5zcGVjdG9yOjpU
eXBlQnVpbGRlcjo6QXJyYXk8U3RyaW5nPj4mIG9wdF9vdXRfY29sdW1uTmFtZXMsIEluc3BlY3Rv
cjo6VHlwZUJ1aWxkZXI6Ok9wdE91dHB1dDxTdHJpbmc+KiBvcHRfb3V0X25vdGVzLCBJbnNwZWN0
b3I6OlR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8ZG91YmxlPiogb3B0X291dF90aW1lc3RhbXAsIElu
c3BlY3Rvcjo6VHlwZUJ1aWxkZXI6Ok9wdE91dHB1dDxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVj
dD4qIG9wdF9vdXRfdmFsdWVzLCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8SW5z
cGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4qIG9wdF9vdXRfcGF5bG9hZCwgSW5zcGVjdG9yOjpUeXBl
QnVpbGRlcjo6T3B0T3V0cHV0PGludD4qIG9wdF9vdXRfZGF0YWJhc2VJZCwgUmVmUHRyPEluc3Bl
Y3Rvcjo6VHlwZUJ1aWxkZXI6OkRhdGFiYXNlOjpFcnJvcj4mIG9wdF9vdXRfc3FsRXJyb3IsIElu
c3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzKiBvcHRfb3V0X3Nj
cmVlbkNvbG9yLCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UHJp
bnRDb2xvciogb3B0X291dF9wcmludENvbG9yKSA9IDA7CisgICAgY2xhc3MgRXhlY3V0ZVNRTEFz
eW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNDYWxsYmFjayA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2UgeworICAgIHB1YmxpYzoKKyAgICAg
ICAgRXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNDYWxsYmFjayhQYXNzUmVmUHRy
PEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+LCBpbnQgaWQpOworICAgICAg
ICB2b2lkIHNlbmRTdWNjZXNzKFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJy
YXk8U3RyaW5nPj4gY29sdW1uTmFtZXMsIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6Ok9wdE91dHB1
dDxTdHJpbmc+KiBub3RlcywgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6T3B0T3V0cHV0PGRvdWJs
ZT4qIHRpbWVzdGFtcCwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6T3B0T3V0cHV0PEluc3BlY3Rv
cjo6SW5zcGVjdG9yT2JqZWN0PiogdmFsdWVzLCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpPcHRP
dXRwdXQ8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4qIHBheWxvYWQsIEluc3BlY3Rvcjo6VHlw
ZUJ1aWxkZXI6Ok9wdE91dHB1dDxpbnQ+KiBkYXRhYmFzZUlkLCBQYXNzUmVmUHRyPEluc3BlY3Rv
cjo6VHlwZUJ1aWxkZXI6OkRhdGFiYXNlOjpFcnJvcj4gc3FsRXJyb3IsIEluc3BlY3Rvcjo6VHlw
ZUJ1aWxkZXI6Ok9wdE91dHB1dDxTdHJpbmc+KiBzY3JlZW5Db2xvciwgSW5zcGVjdG9yOjpUeXBl
QnVpbGRlcjo6T3B0T3V0cHV0PFN0cmluZz4qIHByaW50Q29sb3IpOworICAgIH07CisgICAgdmly
dHVhbCB2b2lkIGV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKEVycm9yU3RyaW5n
KiwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnksIFBhc3NSZWZQdHI8
RXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNDYWxsYmFjaz4gY2FsbGJhY2spID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNRTFN5bmMoRXJyb3JTdHJpbmcqLCBpbnQgaW5f
ZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSwgUmVmUHRyPEluc3BlY3Rvcjo6VHlw
ZUJ1aWxkZXI6OkFycmF5PFN0cmluZz4+JiBvdXRfY29sdW1uTmFtZXMsIFN0cmluZyogb3V0X25v
dGVzLCBkb3VibGUqIG91dF90aW1lc3RhbXAsIEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0KiBv
dXRfdmFsdWVzLCBJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlKiBvdXRfcGF5bG9hZCwgaW50KiBv
dXRfZGF0YWJhc2VJZCwgUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkRhdGFiYXNlOjpF
cnJvcj4mIG91dF9zcWxFcnJvciwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6RGF0YWJhc2U6OlBy
aW1hcnlDb2xvcnMqIG91dF9zY3JlZW5Db2xvciwgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlz
cGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3IqIG91dF9wcmludENvbG9yKSA9IDA7CisgICAgY2xh
c3MgRXhlY3V0ZVNRTEFzeW5jQ2FsbGJhY2sgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIEV4
ZWN1dGVTUUxBc3luY0NhbGxiYWNrKFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlcj4sIGludCBpZCk7CisgICAgICAgIHZvaWQgc2VuZFN1Y2Nlc3MoUGFzc1Jl
ZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheTxTdHJpbmc+PiBjb2x1bW5OYW1lcywg
Y29uc3QgU3RyaW5nJiBub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgSW5zcGVjdG9yOjpJbnNwZWN0
b3JPYmplY3QgdmFsdWVzLCBJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlIHBheWxvYWQsIGludCBk
YXRhYmFzZUlkLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkRhdGFiYXNlOjpF
cnJvcj4gc3FsRXJyb3IsIGNvbnN0IFN0cmluZyYgc2NyZWVuQ29sb3IsIGNvbnN0IFN0cmluZyYg
cHJpbnRDb2xvcik7CisgICAgfTsKKyAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNRTEFzeW5jKEVy
cm9yU3RyaW5nKiwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnksIFBh
c3NSZWZQdHI8RXhlY3V0ZVNRTEFzeW5jQ2FsbGJhY2s+IGNhbGxiYWNrKSA9IDA7Citwcm90ZWN0
ZWQ6CisgICAgdmlydHVhbCB+SW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXIoKTsKK307CisjZW5kaWYgLy8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKKworI2lmIEVOQUJMRShT
UUxfREFUQUJBU0UpCitjbGFzcyBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyIGZp
bmFsIDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yU3VwcGxlbWVudGFsQmFja2VuZERpc3Bh
dGNoZXIgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3RvckRhdGFiYXNl
QmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyKiwgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2gobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgbWV0aG9k
LCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBtZXNzYWdlKSBvdmVycmlk
ZTsKK3ByaXZhdGU6CisgICAgdm9pZCBleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVz
KGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7
CisgICAgdm9pZCBleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIGNhbGxJ
ZCwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpOworICAgIHZvaWQg
ZXhlY3V0ZVNRTFN5bmMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2Jq
ZWN0JiBtZXNzYWdlKTsKKyAgICB2b2lkIGV4ZWN1dGVTUUxBc3luYyhsb25nIGNhbGxJZCwgY29u
c3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpOworcHJpdmF0ZToKKyAgICBJ
bnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXIqLCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxl
ciopOworICAgIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBtX2Fn
ZW50OworfTsKKyNlbmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQorCit9IC8vIG5hbWVzcGFj
ZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyNlbmRpZiAvLyAh
ZGVmaW5lZChJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzX2gpCisjIyMgRW5kIEZpbGU6
IEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogSW5z
cGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
MywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgorLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4v
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCisKKyNp
ZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckZyb250
ZW5kQ2hhbm5lbC5oPgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisj
aWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKK0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNo
ZXJIYW5kbGVyOjp+SW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKSB7
IH0KKyNlbmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQorCisjaWYgRU5BQkxFKFNRTF9EQVRB
QkFTRSkKK1Bhc3NSZWZQdHI8SW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcj4gSW5z
cGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKEluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlciwgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlz
cGF0Y2hlckhhbmRsZXIqIGFnZW50KQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW5zcGVj
dG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlciwgYWdlbnQpKTsK
K30KKworSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6SW5zcGVjdG9yRGF0YWJh
c2VCYWNrZW5kRGlzcGF0Y2hlcihJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERp
c3BhdGNoZXIsIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2Vu
dCkKKyAgICA6IEluc3BlY3RvclN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmRE
aXNwYXRjaGVyKQorICAgICwgbV9hZ2VudChhZ2VudCkKK3sKKyAgICBtX2JhY2tlbmREaXNwYXRj
aGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4oQVNDSUlMaXRlcmFsKCJEYXRhYmFzZSIp
LCB0aGlzKTsKK30KKwordm9pZCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpk
aXNwYXRjaChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFBhc3NSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBtZXNzYWdlKQoreworICAgIFJlZjxJbnNwZWN0b3JEYXRhYmFzZUJhY2tl
bmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKKworICAgIGlmIChtZXRob2QgPT0gImV4ZWN1
dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMiKQorICAgICAgICBleGVjdXRlU1FMU3luY09w
dGlvbmFsUmV0dXJuVmFsdWVzKGNhbGxJZCwgKm1lc3NhZ2UuZ2V0KCkpOworICAgIGVsc2UgaWYg
KG1ldGhvZCA9PSAiZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMiKQorICAgICAg
ICBleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhjYWxsSWQsICptZXNzYWdlLmdl
dCgpKTsKKyAgICBlbHNlIGlmIChtZXRob2QgPT0gImV4ZWN1dGVTUUxTeW5jIikKKyAgICAgICAg
ZXhlY3V0ZVNRTFN5bmMoY2FsbElkLCAqbWVzc2FnZS5nZXQoKSk7CisgICAgZWxzZSBpZiAobWV0
aG9kID09ICJleGVjdXRlU1FMQXN5bmMiKQorICAgICAgICBleGVjdXRlU1FMQXN5bmMoY2FsbElk
LCAqbWVzc2FnZS5nZXQoKSk7CisgICAgZWxzZQorICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVy
LT5yZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
OjpNZXRob2ROb3RGb3VuZCwgU3RyaW5nKCInIikgKyAiRGF0YWJhc2UiICsgJy4nICsgbWV0aG9k
ICsgIicgd2FzIG5vdCBmb3VuZCIpOworfQorCit2b2lkIEluc3BlY3RvckRhdGFiYXNlQmFja2Vu
ZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyBjYWxs
SWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSkKK3sKKyAgICBSZWZQdHI8SW5zcGVj
dG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOworICAg
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IG1lc3NhZ2UuZ2V0T2Jq
ZWN0KEFTQ0lJTGl0ZXJhbCgicGFyYW1zIikpOworICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1z
Q29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOworICAgIEluc3BlY3RvckFycmF5
KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOworICAgIGludCBpbl9k
YXRhYmFzZUlkID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldEludChwYXJhbXNDb250
YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgiZGF0YWJhc2VJZCIpLCBudWxscHRyLCBwcm90b2NvbEVy
cm9yc1B0cik7CisgICAgU3RyaW5nIGluX3F1ZXJ5ID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXI6OmdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgicXVlcnkiKSwg
bnVsbHB0ciwgcHJvdG9jb2xFcnJvcnNQdHIpOworICAgIGlmIChwcm90b2NvbEVycm9ycy0+bGVu
Z3RoKCkpIHsKKyAgICAgICAgU3RyaW5nIGVycm9yTWVzc2FnZSA9IFN0cmluZzo6Zm9ybWF0KCJT
b21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiRGF0YWJh
c2UuZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyIpOworICAgICAgICBtX2JhY2tl
bmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIEluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCBlcnJvck1lc3NhZ2UsIHByb3RvY29sRXJyb3Jz
LnJlbGVhc2UoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBFcnJvclN0cmluZyBl
cnJvcjsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmpl
Y3Q6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheTxT
dHJpbmc+PiBvdXRfY29sdW1uTmFtZXM7CisgICAgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6T3B0
T3V0cHV0PFN0cmluZz4gb3V0X25vdGVzOworICAgIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6Ok9w
dE91dHB1dDxkb3VibGU+IG91dF90aW1lc3RhbXA7CisgICAgSW5zcGVjdG9yOjpUeXBlQnVpbGRl
cjo6T3B0T3V0cHV0PEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBvdXRfdmFsdWVzOworICAg
IEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6Ok9wdE91dHB1dDxJbnNwZWN0b3I6Okluc3BlY3RvclZh
bHVlPiBvdXRfcGF5bG9hZDsKKyAgICBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8
SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6RGF0YWJhc2U6OkRhdGFiYXNlSWQ+IG91dF9kYXRhYmFz
ZUlkOworICAgIFJlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpEYXRhYmFzZTo6RXJyb3I+
IG91dF9zcWxFcnJvcjsKKyAgICBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpEYXRhYmFzZTo6UHJp
bWFyeUNvbG9ycyBvdXRfc2NyZWVuQ29sb3I7CisgICAgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5k
RGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3Igb3V0X3ByaW50Q29sb3I7CisgICAgbV9hZ2Vu
dC0+ZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcygmZXJyb3IsIGluX2RhdGFiYXNl
SWQsIGluX3F1ZXJ5LCBvdXRfY29sdW1uTmFtZXMsICZvdXRfbm90ZXMsICZvdXRfdGltZXN0YW1w
LCBvdXRfdmFsdWVzLCAmb3V0X3BheWxvYWQsICZvdXRfZGF0YWJhc2VJZCwgb3V0X3NxbEVycm9y
LCAmb3V0X3NjcmVlbkNvbG9yLCAmb3V0X3ByaW50Q29sb3IpOworCisgICAgaWYgKCFlcnJvci5s
ZW5ndGgoKSkgeworICAgICAgICBpZiAob3V0X2NvbHVtbk5hbWVzKQorICAgICAgICAgICAgcmVz
dWx0LT5zZXRBcnJheShBU0NJSUxpdGVyYWwoImNvbHVtbk5hbWVzIiksIG91dF9jb2x1bW5OYW1l
cyk7CisgICAgICAgIGlmIChvdXRfbm90ZXMuaXNBc3NpZ25lZCgpKQorICAgICAgICAgICAgcmVz
dWx0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJub3RlcyIpLCBvdXRfbm90ZXMuZ2V0VmFsdWUo
KSk7CisgICAgICAgIGlmIChvdXRfdGltZXN0YW1wLmlzQXNzaWduZWQoKSkKKyAgICAgICAgICAg
IHJlc3VsdC0+c2V0TnVtYmVyKEFTQ0lJTGl0ZXJhbCgidGltZXN0YW1wIiksIG91dF90aW1lc3Rh
bXAuZ2V0VmFsdWUoKSk7CisgICAgICAgIGlmIChvdXRfdmFsdWVzLmlzQXNzaWduZWQoKSkKKyAg
ICAgICAgICAgIHJlc3VsdC0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgidmFsdWVzIiksIG91dF92
YWx1ZXMuZ2V0VmFsdWUoKSk7CisgICAgICAgIGlmIChvdXRfcGF5bG9hZC5pc0Fzc2lnbmVkKCkp
CisgICAgICAgICAgICByZXN1bHQtPnNldFZhbHVlKEFTQ0lJTGl0ZXJhbCgicGF5bG9hZCIpLCBv
dXRfcGF5bG9hZC5nZXRWYWx1ZSgpKTsKKyAgICAgICAgaWYgKG91dF9kYXRhYmFzZUlkLmlzQXNz
aWduZWQoKSkKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0TnVtYmVyKEFTQ0lJTGl0ZXJhbCgiZGF0
YWJhc2VJZCIpLCBvdXRfZGF0YWJhc2VJZC5nZXRWYWx1ZSgpKTsKKyAgICAgICAgaWYgKG91dF9z
cWxFcnJvcikKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgic3Fs
RXJyb3IiKSwgb3V0X3NxbEVycm9yKTsKKyAgICAgICAgaWYgKG91dF9zY3JlZW5Db2xvci5pc0Fz
c2lnbmVkKCkpCisgICAgICAgICAgICByZXN1bHQtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInNj
cmVlbkNvbG9yIiksIG91dF9zY3JlZW5Db2xvci5nZXRWYWx1ZSgpKTsKKyAgICAgICAgaWYgKG91
dF9wcmludENvbG9yLmlzQXNzaWduZWQoKSkKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5n
KEFTQ0lJTGl0ZXJhbCgicHJpbnRDb2xvciIpLCBvdXRfcHJpbnRDb2xvci5nZXRWYWx1ZSgpKTsK
KyAgICB9CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVz
dWx0LnJlbGVhc2UoKSwgZXJyb3IpOworfQorCitJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNDYWxsYmFj
azo6RXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNDYWxsYmFjayhQYXNzUmVmUHRy
PEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiBiYWNrZW5kRGlzcGF0Y2hlciwgaW50IGlkKSA6
IEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZShiYWNr
ZW5kRGlzcGF0Y2hlciwgaWQpIHsgfQorCit2b2lkIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERp
c3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc0NhbGxi
YWNrOjpzZW5kU3VjY2VzcyhQYXNzUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5
PFN0cmluZz4+IGNvbHVtbk5hbWVzLCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8
U3RyaW5nPiogbm90ZXMsIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6Ok9wdE91dHB1dDxkb3VibGU+
KiB0aW1lc3RhbXAsIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6Ok9wdE91dHB1dDxJbnNwZWN0b3I6
Okluc3BlY3Rvck9iamVjdD4qIHZhbHVlcywgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6T3B0T3V0
cHV0PEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+KiBwYXlsb2FkLCBJbnNwZWN0b3I6OlR5cGVC
dWlsZGVyOjpPcHRPdXRwdXQ8aW50PiogZGF0YWJhc2VJZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6
OlR5cGVCdWlsZGVyOjpEYXRhYmFzZTo6RXJyb3I+IHNxbEVycm9yLCBJbnNwZWN0b3I6OlR5cGVC
dWlsZGVyOjpPcHRPdXRwdXQ8U3RyaW5nPiogc2NyZWVuQ29sb3IsIEluc3BlY3Rvcjo6VHlwZUJ1
aWxkZXI6Ok9wdE91dHB1dDxTdHJpbmc+KiBwcmludENvbG9yKQoreworICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IGpzb25NZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAg
ICBpZiAoY29sdW1uTmFtZXMpCisgICAgICAgIGpzb25NZXNzYWdlLT5zZXRBcnJheShBU0NJSUxp
dGVyYWwoImNvbHVtbk5hbWVzIiksIGNvbHVtbk5hbWVzKTsKKyAgICBpZiAobm90ZXMuaXNBc3Np
Z25lZCgpKQorICAgICAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgibm90
ZXMiKSwgbm90ZXMuZ2V0VmFsdWUoKSk7CisgICAgaWYgKHRpbWVzdGFtcC5pc0Fzc2lnbmVkKCkp
CisgICAgICAgIGpzb25NZXNzYWdlLT5zZXROdW1iZXIoQVNDSUlMaXRlcmFsKCJ0aW1lc3RhbXAi
KSwgdGltZXN0YW1wLmdldFZhbHVlKCkpOworICAgIGlmICh2YWx1ZXMuaXNBc3NpZ25lZCgpKQor
ICAgICAgICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgidmFsdWVzIiksIHZh
bHVlcy5nZXRWYWx1ZSgpKTsKKyAgICBpZiAocGF5bG9hZC5pc0Fzc2lnbmVkKCkpCisgICAgICAg
IGpzb25NZXNzYWdlLT5zZXRWYWx1ZShBU0NJSUxpdGVyYWwoInBheWxvYWQiKSwgcGF5bG9hZC5n
ZXRWYWx1ZSgpKTsKKyAgICBpZiAoZGF0YWJhc2VJZC5pc0Fzc2lnbmVkKCkpCisgICAgICAgIGpz
b25NZXNzYWdlLT5zZXROdW1iZXIoQVNDSUlMaXRlcmFsKCJkYXRhYmFzZUlkIiksIGRhdGFiYXNl
SWQuZ2V0VmFsdWUoKSk7CisgICAgaWYgKHNxbEVycm9yKQorICAgICAgICBqc29uTWVzc2FnZS0+
c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgic3FsRXJyb3IiKSwgc3FsRXJyb3IpOworICAgIGlmIChz
Y3JlZW5Db2xvci5pc0Fzc2lnbmVkKCkpCisgICAgICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmco
QVNDSUlMaXRlcmFsKCJzY3JlZW5Db2xvciIpLCBzY3JlZW5Db2xvci5nZXRWYWx1ZSgpKTsKKyAg
ICBpZiAocHJpbnRDb2xvci5pc0Fzc2lnbmVkKCkpCisgICAgICAgIGpzb25NZXNzYWdlLT5zZXRT
dHJpbmcoQVNDSUlMaXRlcmFsKCJwcmludENvbG9yIiksIHByaW50Q29sb3IuZ2V0VmFsdWUoKSk7
CisgICAgc2VuZElmQWN0aXZlKGpzb25NZXNzYWdlLCBFcnJvclN0cmluZygpKTsKK30KKwordm9p
ZCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FMQXN5bmNPcHRp
b25hbFJldHVyblZhbHVlcyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNz
YWdlKQoreworICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNw
ZWN0b3JBcnJheTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1z
Q29udGFpbmVyID0gbWVzc2FnZS5nZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJwYXJhbXMiKSk7Cisg
ICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIu
Z2V0KCk7CisgICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xF
cnJvcnMuZ2V0KCk7CisgICAgaW50IGluX2RhdGFiYXNlSWQgPSBJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlcjo6Z2V0SW50KHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJkYXRhYmFz
ZUlkIiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzUHRyKTsKKyAgICBTdHJpbmcgaW5fcXVlcnkg
PSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0
ciwgQVNDSUlMaXRlcmFsKCJxdWVyeSIpLCBudWxscHRyLCBwcm90b2NvbEVycm9yc1B0cik7Cisg
ICAgaWYgKHByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgeworICAgICAgICBTdHJpbmcgZXJyb3JN
ZXNzYWdlID0gU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNh
bid0IGJlIHByb2Nlc3NlZCIsICJEYXRhYmFzZS5leGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVy
blZhbHVlcyIpOworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVy
cm9yKCZjYWxsSWQsIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCBl
cnJvck1lc3NhZ2UsIHByb3RvY29sRXJyb3JzLnJlbGVhc2UoKSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBFcnJvclN0cmluZyBlcnJvcjsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxJbnNw
ZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jT3B0
aW9uYWxSZXR1cm5WYWx1ZXNDYWxsYmFjaz4gY2FsbGJhY2sgPSBhZG9wdFJlZihuZXcgSW5zcGVj
dG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkV4ZWN1dGVTUUxBc3luY09wdGlv
bmFsUmV0dXJuVmFsdWVzQ2FsbGJhY2sobV9iYWNrZW5kRGlzcGF0Y2hlcixjYWxsSWQpKTsKKyAg
ICBtX2FnZW50LT5leGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcygmZXJyb3IsIGlu
X2RhdGFiYXNlSWQsIGluX3F1ZXJ5LCBjYWxsYmFjayk7CisKKyAgICBpZiAoZXJyb3IubGVuZ3Ro
KCkpIHsKKyAgICAgICAgY2FsbGJhY2stPmRpc2FibGUoKTsKKyAgICAgICAgbV9iYWNrZW5kRGlz
cGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElkLCBJbnNwZWN0b3I6Okluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAgICByZXR1cm47
CisgICAgfQorfQorCit2b2lkIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4
ZWN1dGVTUUxTeW5jKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2Up
Cit7CisgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3Rv
ckFycmF5OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250
YWluZXIgPSBtZXNzYWdlLmdldE9iamVjdChBU0NJSUxpdGVyYWwoInBhcmFtcyIpKTsKKyAgICBJ
bnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQo
KTsKKyAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9y
cy5nZXQoKTsKKyAgICBpbnQgaW5fZGF0YWJhc2VJZCA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyOjpnZXRJbnQocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoImRhdGFiYXNlSWQi
KSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnNQdHIpOworICAgIFN0cmluZyBpbl9xdWVyeSA9IElu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCBB
U0NJSUxpdGVyYWwoInF1ZXJ5IiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzUHRyKTsKKyAgICBp
ZiAocHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CisgICAgICAgIFN0cmluZyBlcnJvck1lc3Nh
Z2UgPSBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3Qg
YmUgcHJvY2Vzc2VkIiwgIkRhdGFiYXNlLmV4ZWN1dGVTUUxTeW5jIik7CisgICAgICAgIG1fYmFj
a2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXI6OkludmFsaWRQYXJhbXMsIGVycm9yTWVzc2FnZSwgcHJvdG9jb2xFcnJv
cnMucmVsZWFzZSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEVycm9yU3RyaW5n
IGVycm9yOworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5
PFN0cmluZz4+IG91dF9jb2x1bW5OYW1lczsKKyAgICBTdHJpbmcgb3V0X25vdGVzOworICAgIGRv
dWJsZSBvdXRfdGltZXN0YW1wOworICAgIEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0IG91dF92
YWx1ZXM7CisgICAgSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSBvdXRfcGF5bG9hZDsKKyAgICBJ
bnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpEYXRhYmFzZTo6RGF0YWJhc2VJZCBvdXRfZGF0YWJhc2VJ
ZDsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6RGF0YWJhc2U6OkVycm9yPiBv
dXRfc3FsRXJyb3I7CisgICAgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6RGF0YWJhc2U6OlByaW1h
cnlDb2xvcnMgb3V0X3NjcmVlbkNvbG9yOworICAgIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERp
c3BhdGNoZXJIYW5kbGVyOjpQcmludENvbG9yIG91dF9wcmludENvbG9yOworICAgIG1fYWdlbnQt
PmV4ZWN1dGVTUUxTeW5jKCZlcnJvciwgaW5fZGF0YWJhc2VJZCwgaW5fcXVlcnksIG91dF9jb2x1
bW5OYW1lcywgJm91dF9ub3RlcywgJm91dF90aW1lc3RhbXAsIG91dF92YWx1ZXMsICZvdXRfcGF5
bG9hZCwgJm91dF9kYXRhYmFzZUlkLCBvdXRfc3FsRXJyb3IsICZvdXRfc2NyZWVuQ29sb3IsICZv
dXRfcHJpbnRDb2xvcik7CisKKyAgICBpZiAoIWVycm9yLmxlbmd0aCgpKSB7CisgICAgICAgIHJl
c3VsdC0+c2V0QXJyYXkoQVNDSUlMaXRlcmFsKCJjb2x1bW5OYW1lcyIpLCBvdXRfY29sdW1uTmFt
ZXMpOworICAgICAgICByZXN1bHQtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoIm5vdGVzIiksIG91
dF9ub3Rlcyk7CisgICAgICAgIHJlc3VsdC0+c2V0TnVtYmVyKEFTQ0lJTGl0ZXJhbCgidGltZXN0
YW1wIiksIG91dF90aW1lc3RhbXApOworICAgICAgICByZXN1bHQtPnNldE9iamVjdChBU0NJSUxp
dGVyYWwoInZhbHVlcyIpLCBvdXRfdmFsdWVzKTsKKyAgICAgICAgcmVzdWx0LT5zZXRWYWx1ZShB
U0NJSUxpdGVyYWwoInBheWxvYWQiKSwgb3V0X3BheWxvYWQpOworICAgICAgICByZXN1bHQtPnNl
dE51bWJlcihBU0NJSUxpdGVyYWwoImRhdGFiYXNlSWQiKSwgb3V0X2RhdGFiYXNlSWQpOworICAg
ICAgICByZXN1bHQtPnNldE9iamVjdChBU0NJSUxpdGVyYWwoInNxbEVycm9yIiksIG91dF9zcWxF
cnJvcik7CisgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgic2NyZWVuQ29s
b3IiKSwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Z2V0VGVzdEVudW1Db25zdGFudFZhbHVlKG91
dF9zY3JlZW5Db2xvcikpOworICAgICAgICByZXN1bHQtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwo
InByaW50Q29sb3IiKSwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Z2V0VGVzdEVudW1Db25zdGFu
dFZhbHVlKG91dF9wcmludENvbG9yKSk7CisgICAgfQorICAgIG1fYmFja2VuZERpc3BhdGNoZXIt
PnNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIGVycm9yKTsKK30KKworSW5z
cGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkV4ZWN1dGVTUUxBc3luY0Nh
bGxiYWNrOjpFeGVjdXRlU1FMQXN5bmNDYWxsYmFjayhQYXNzUmVmUHRyPEluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyPiBiYWNrZW5kRGlzcGF0Y2hlciwgaW50IGlkKSA6IEluc3BlY3Rvcjo6SW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZShiYWNrZW5kRGlzcGF0Y2hlciwg
aWQpIHsgfQorCit2b2lkIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVy
OjpFeGVjdXRlU1FMQXN5bmNDYWxsYmFjazo6c2VuZFN1Y2Nlc3MoUGFzc1JlZlB0cjxJbnNwZWN0
b3I6OlR5cGVCdWlsZGVyOjpBcnJheTxTdHJpbmc+PiBjb2x1bW5OYW1lcywgY29uc3QgU3RyaW5n
JiBub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QgdmFs
dWVzLCBJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlIHBheWxvYWQsIGludCBkYXRhYmFzZUlkLCBQ
YXNzUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkRhdGFiYXNlOjpFcnJvcj4gc3FsRXJy
b3IsIGNvbnN0IFN0cmluZyYgc2NyZWVuQ29sb3IsIGNvbnN0IFN0cmluZyYgcHJpbnRDb2xvcikK
K3sKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBqc29uTWVzc2FnZSA9IEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCk7CisgICAganNvbk1lc3NhZ2UtPnNldEFycmF5KEFTQ0lJTGl0ZXJhbCgi
Y29sdW1uTmFtZXMiKSwgY29sdW1uTmFtZXMpOworICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmco
QVNDSUlMaXRlcmFsKCJub3RlcyIpLCBub3Rlcyk7CisgICAganNvbk1lc3NhZ2UtPnNldE51bWJl
cihBU0NJSUxpdGVyYWwoInRpbWVzdGFtcCIpLCB0aW1lc3RhbXApOworICAgIGpzb25NZXNzYWdl
LT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJ2YWx1ZXMiKSwgdmFsdWVzKTsKKyAgICBqc29uTWVz
c2FnZS0+c2V0VmFsdWUoQVNDSUlMaXRlcmFsKCJwYXlsb2FkIiksIHBheWxvYWQpOworICAgIGpz
b25NZXNzYWdlLT5zZXROdW1iZXIoQVNDSUlMaXRlcmFsKCJkYXRhYmFzZUlkIiksIGRhdGFiYXNl
SWQpOworICAgIGpzb25NZXNzYWdlLT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJzcWxFcnJvciIp
LCBzcWxFcnJvcik7CisgICAganNvbk1lc3NhZ2UtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInNj
cmVlbkNvbG9yIiksIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OmdldFRlc3RFbnVtQ29uc3RhbnRW
YWx1ZShzY3JlZW5Db2xvcikpOworICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoQVNDSUlMaXRl
cmFsKCJwcmludENvbG9yIiksIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OmdldFRlc3RFbnVtQ29u
c3RhbnRWYWx1ZShwcmludENvbG9yKSk7CisgICAgc2VuZElmQWN0aXZlKGpzb25NZXNzYWdlLCBF
cnJvclN0cmluZygpKTsKK30KKwordm9pZCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRj
aGVyOjpleGVjdXRlU1FMQXN5bmMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYg
bWVzc2FnZSkKK3sKKyAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0g
SW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBh
cmFtc0NvbnRhaW5lciA9IG1lc3NhZ2UuZ2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicGFyYW1zIikp
OworICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFp
bmVyLmdldCgpOworICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3Rv
Y29sRXJyb3JzLmdldCgpOworICAgIGludCBpbl9kYXRhYmFzZUlkID0gSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXI6OmdldEludChwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgiZGF0
YWJhc2VJZCIpLCBudWxscHRyLCBwcm90b2NvbEVycm9yc1B0cik7CisgICAgU3RyaW5nIGluX3F1
ZXJ5ID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldFN0cmluZyhwYXJhbXNDb250YWlu
ZXJQdHIsIEFTQ0lJTGl0ZXJhbCgicXVlcnkiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnNQdHIp
OworICAgIGlmIChwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKKyAgICAgICAgU3RyaW5nIGVy
cm9yTWVzc2FnZSA9IFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVz
JyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiRGF0YWJhc2UuZXhlY3V0ZVNRTEFzeW5jIik7CisgICAg
ICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkludmFsaWRQYXJhbXMsIGVycm9yTWVzc2FnZSwgcHJv
dG9jb2xFcnJvcnMucmVsZWFzZSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEVy
cm9yU3RyaW5nIGVycm9yOworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IElu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPEluc3BlY3RvckRhdGFiYXNlQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNDYWxsYmFjaz4gY2FsbGJhY2sg
PSBhZG9wdFJlZihuZXcgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6
OkV4ZWN1dGVTUUxBc3luY0NhbGxiYWNrKG1fYmFja2VuZERpc3BhdGNoZXIsY2FsbElkKSk7Cisg
ICAgbV9hZ2VudC0+ZXhlY3V0ZVNRTEFzeW5jKCZlcnJvciwgaW5fZGF0YWJhc2VJZCwgaW5fcXVl
cnksIGNhbGxiYWNrKTsKKworICAgIGlmIChlcnJvci5sZW5ndGgoKSkgeworICAgICAgICBjYWxs
YmFjay0+ZGlzYWJsZSgpOworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90
b2NvbEVycm9yKCZjYWxsSWQsIEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6
OlNlcnZlckVycm9yLCBlcnJvcik7CisgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisjZW5kaWYg
Ly8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNl
bmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorCisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RC
YWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0RnJv
bnRlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNv
bW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaWZuZGVmIEluc3BlY3RvclRlc3RGcm9udGVu
ZERpc3BhdGNoZXJzX2gKKyNkZWZpbmUgSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnNf
aAorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUgIkluc3BlY3RvclRlc3RUeXBl
QnVpbGRlcnMuaCIKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
Lmg+CisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPgorI2luY2x1ZGUgPHd0
Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVz
cGFjZSBJbnNwZWN0b3IgeworCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRp
ZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorCisjZW5kaWYgLy8gIWRlZmluZWQoSW5zcGVjdG9yVGVz
dEZyb250ZW5kRGlzcGF0Y2hlcnNfaCkKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdEZyb250
ZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdEZyb250ZW5k
RGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1h
bmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
SW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKKworI2lmIEVOQUJMRShJTlNQRUNU
T1IpCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0
b3IgeworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQ
RUNUT1IpCisKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMu
Y3BwCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmgKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1
dGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisKKyNpZm5kZWYgSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVyc19oCisjZGVmaW5lIEluc3BlY3Rv
clRlc3RUeXBlQnVpbGRlcnNfaAorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUg
PGluc3BlY3Rvci9JbnNwZWN0b3JKU1R5cGVCdWlsZGVycy5oPgorI2luY2x1ZGUgPGluc3BlY3Rv
ci9JbnNwZWN0b3JUeXBlQnVpbGRlci5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Cisj
aW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKwor
CituYW1lc3BhY2UgVHlwZUJ1aWxkZXIgeworCisvLyBGb3J3YXJkIGRlY2xhcmF0aW9ucy4KKyNp
ZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQorbmFtZXNwYWNlIERhdGFiYXNlIHsKK2NsYXNzIEVycm9y
OworZW51bSBjbGFzcyBQcmltYXJ5Q29sb3JzOworfSAvLyBEYXRhYmFzZQorI2VuZGlmIC8vIEVO
QUJMRShTUUxfREFUQUJBU0UpCisvLyBFbmQgb2YgZm9yd2FyZCBkZWNsYXJhdGlvbnMuCisKKwor
Ly8gVHlwZWRlZnMuCisjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKK25hbWVzcGFjZSBEYXRhYmFz
ZSB7CisvKiBVbmlxdWUgaWRlbnRpZmllciBvZiBEYXRhYmFzZSBvYmplY3QuICovCit0eXBlZGVm
IGludCBEYXRhYmFzZUlkOworfSAvLyBEYXRhYmFzZQorI2VuZGlmIC8vIEVOQUJMRShTUUxfREFU
QUJBU0UpCisvLyBFbmQgb2YgdHlwZWRlZnMuCisKK1N0cmluZyBnZXRUZXN0RW51bUNvbnN0YW50
VmFsdWUoaW50IGNvZGUpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBTdHJpbmcgZ2V0VGVzdEVu
dW1Db25zdGFudFZhbHVlKFQgZW51bVZhbHVlKQoreworICAgIHJldHVybiBnZXRUZXN0RW51bUNv
bnN0YW50VmFsdWUoc3RhdGljX2Nhc3Q8aW50PihlbnVtVmFsdWUpKTsKK30KKworI2lmIEVOQUJM
RShTUUxfREFUQUJBU0UpCituYW1lc3BhY2UgRGF0YWJhc2UgeworLyogICovCitlbnVtIGNsYXNz
IFByaW1hcnlDb2xvcnMgeworICAgIFJlZCA9IDAsCisgICAgR3JlZW4gPSAxLAorICAgIEJsdWUg
PSAyLAorfTsgLy8gZW51bSBjbGFzcyBQcmltYXJ5Q29sb3JzCisvKiBEYXRhYmFzZSBlcnJvci4g
Ki8KK2NsYXNzIEVycm9yIDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0QmFzZSB7
CitwdWJsaWM6CisgICAgZW51bSB7CisgICAgICAgIE5vRmllbGRzU2V0ID0gMCwKKyAgICAgICAg
TWVzc2FnZVNldCA9IDEgPDwgMCwKKyAgICAgICAgQ29kZVNldCA9IDEgPDwgMSwKKyAgICAgICAg
QWxsRmllbGRzU2V0ID0gKE1lc3NhZ2VTZXQgfCBDb2RlU2V0KQorICAgIH07CisKKyAgICB0ZW1w
bGF0ZTxpbnQgU1RBVEU+CisgICAgY2xhc3MgQnVpbGRlciB7CisgICAgcHJpdmF0ZToKKyAgICAg
ICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKKworICAgICAg
ICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxT
VEFURSB8IFNURVA+Kj4odGhpcyk7CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyKFBhc3NS
ZWZQdHI8LypFcnJvciovSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IHB0cikKKyAgICAgICAg
eworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxk
ZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdCA9IHB0
cjsKKyAgICAgICAgfQorICAgICAgICBmcmllbmQgY2xhc3MgRXJyb3I7CisgICAgcHVibGljOgor
CisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBNZXNzYWdlU2V0PiYgc2V0TWVzc2FnZShjb25zdCBT
dHJpbmcmIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNU
QVRFICYgTWVzc2FnZVNldCksIHByb3BlcnR5X21lc3NhZ2VfYWxyZWFkeV9zZXQpOworICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoIm1lc3NhZ2UiKSwgdmFsdWUp
OworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxNZXNzYWdlU2V0PigpOworICAgICAgICB9
CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IENvZGVTZXQ+JiBzZXRDb2RlKGludCB2YWx1ZSkK
KyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIENvZGVTZXQp
LCBwcm9wZXJ0eV9jb2RlX2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRO
dW1iZXIoQVNDSUlMaXRlcmFsKCJjb2RlIiksIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBj
YXN0U3RhdGU8Q29kZVNldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIG9wZXJhdG9yIFJlZlB0
cjxFcnJvcj4mICgpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRF
ID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CisgICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVChzaXplb2YoRXJyb3IpID09IHNpemVvZihJbnNwZWN0b3I6Okluc3BlY3Rvck9i
amVjdCksIGNhbm5vdF9jYXN0KTsKKyAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2Fz
dDxSZWZQdHI8RXJyb3I+Kj4oJm1fcmVzdWx0KTsKKyAgICAgICAgfQorCisgICAgICAgIFBhc3NS
ZWZQdHI8RXJyb3I+IHJlbGVhc2UoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gUmVm
UHRyPEVycm9yPigqdGhpcykucmVsZWFzZSgpOworICAgICAgICB9CisgICAgfTsKKworICAgIC8q
CisgICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgorICAgICAqIFJlZlB0cjxFcnJvcj4gcmVz
dWx0ID0gRXJyb3I6OmNyZWF0ZSgpCisgICAgICogICAgIC5zZXRNZXNzYWdlKC4uLikKKyAgICAg
KiAgICAgLnNldENvZGUoLi4uKTsKKyAgICAgKi8KKyAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxk
c1NldD4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0
PihJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkpOworICAgIH0KKyAgICB0eXBl
ZGVmIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlN0cnVjdEl0ZW1UcmFpdHMgSXRlbVRyYWl0czsK
K307CisKK30gLy8gRGF0YWJhc2UKKyNlbmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQorCisK
KworfSAvLyBuYW1lc3BhY2UgVHlwZUJ1aWxkZXIKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
CisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorCisjZW5kaWYgLy8gIWRlZmluZWQoSW5z
cGVjdG9yVGVzdFR5cGVCdWlsZGVyc19oKQorIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0VHlw
ZUJ1aWxkZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMu
Y3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtYXN5
bmMtYXR0cmlidXRlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yVGVz
dFR5cGVCdWlsZGVycy5oIgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUgPHd0
Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK25hbWVzcGFjZSBU
eXBlQnVpbGRlciB7CisKK3N0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBlbnVtX2NvbnN0YW50X3Zh
bHVlc1tdID0geworICAgICJyZWQiLAorICAgICJncmVlbiIsCisgICAgImJsdWUiLAorICAgICJj
eWFuIiwKKyAgICAibWFnZW50YSIsCisgICAgInllbGxvdyIsCisgICAgImJsYWNrIiwKK307CisK
K1N0cmluZyBnZXRUZXN0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpIHsKKyAgICByZXR1cm4g
ZW51bV9jb25zdGFudF92YWx1ZXNbY29kZV07Cit9CisKKworCit9IC8vIG5hbWVzcGFjZSBUeXBl
QnVpbGRlcgorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJ
TlNQRUNUT1IpCisKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5jcHAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9leHBlY3RlZC9jb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMu
anNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJz
Lmpzb24tcmVzdWx0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ3NTllMjFmYTMxMTIxYjVjMDY0ZDJhNGFmN2RiNTM3
Mjg2NTRjOTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJl
dHVybi1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0CkBAIC0wLDAgKzEsNjQ1IEBACisjIyMgQmVnaW4g
RmlsZTogSW5zcGVjdG9yVGVzdEJhY2tlbmRDb21tYW5kcy5qcworLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFt
ZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5CisKKy8vIERhdGFiYXNlLgorSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckVudW0oIkRhdGFi
YXNlLlByaW1hcnlDb2xvcnMiLCB7UmVkOiAicmVkIiwgR3JlZW46ICJncmVlbiIsIEJsdWU6ICJi
bHVlIn0pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIkRhdGFiYXNlLmV4ZWN1
dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMiLCBbeyJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUi
OiAib2JqZWN0IiwgIm9wdGlvbmFsIjogdHJ1ZX0sIHsibmFtZSI6ICJub3RlcyIsICJ0eXBlIjog
InN0cmluZyIsICJvcHRpb25hbCI6IHRydWV9LCB7Im5hbWUiOiAidGltZXN0YW1wIiwgInR5cGUi
OiAibnVtYmVyIiwgIm9wdGlvbmFsIjogdHJ1ZX0sIHsibmFtZSI6ICJ2YWx1ZXMiLCAidHlwZSI6
ICJvYmplY3QiLCAib3B0aW9uYWwiOiB0cnVlfSwgeyJuYW1lIjogInBheWxvYWQiLCAidHlwZSI6
ICJvYmplY3QiLCAib3B0aW9uYWwiOiB0cnVlfSwgeyJuYW1lIjogImRhdGFiYXNlSWQiLCAidHlw
ZSI6ICJudW1iZXIiLCAib3B0aW9uYWwiOiB0cnVlfSwgeyJuYW1lIjogInNxbEVycm9yIiwgInR5
cGUiOiAib2JqZWN0IiwgIm9wdGlvbmFsIjogdHJ1ZX0sIHsibmFtZSI6ICJzY3JlZW5Db2xvciIs
ICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IHRydWV9LCB7Im5hbWUiOiAicHJpbnRDb2xv
ciIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IHRydWV9XSwgWyJjb2x1bW5OYW1lcyIs
ICJub3RlcyIsICJ0aW1lc3RhbXAiLCAidmFsdWVzIiwgInBheWxvYWQiLCAiZGF0YWJhc2VJZCIs
ICJzcWxFcnJvciIsICJzY3JlZW5Db2xvciIsICJwcmludENvbG9yIl0pOworSW5zcGVjdG9yQmFj
a2VuZC5yZWdpc3RlckNvbW1hbmQoIkRhdGFiYXNlLmV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVy
cyIsIFt7Im5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJvYmplY3QiLCAib3B0aW9uYWwi
OiBmYWxzZX0sIHsibmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6
IGZhbHNlfSwgeyJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciIsICJvcHRpb25h
bCI6IGZhbHNlfSwgeyJuYW1lIjogInZhbHVlcyIsICJ0eXBlIjogIm9iamVjdCIsICJvcHRpb25h
bCI6IGZhbHNlfSwgeyJuYW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJvYmplY3QiLCAib3B0aW9u
YWwiOiBmYWxzZX0sIHsibmFtZSI6ICJkYXRhYmFzZUlkIiwgInR5cGUiOiAibnVtYmVyIiwgIm9w
dGlvbmFsIjogZmFsc2V9LCB7Im5hbWUiOiAic3FsRXJyb3IiLCAidHlwZSI6ICJvYmplY3QiLCAi
b3B0aW9uYWwiOiBmYWxzZX0sIHsibmFtZSI6ICJzY3JlZW5Db2xvciIsICJ0eXBlIjogInN0cmlu
ZyIsICJvcHRpb25hbCI6IGZhbHNlfSwgeyJuYW1lIjogInByaW50Q29sb3IiLCAidHlwZSI6ICJz
dHJpbmciLCAib3B0aW9uYWwiOiBmYWxzZX1dLCBbImNvbHVtbk5hbWVzIiwgIm5vdGVzIiwgInRp
bWVzdGFtcCIsICJ2YWx1ZXMiLCAicGF5bG9hZCIsICJkYXRhYmFzZUlkIiwgInNxbEVycm9yIiwg
InNjcmVlbkNvbG9yIiwgInByaW50Q29sb3IiXSk7CisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRl
c3RCYWNrZW5kQ29tbWFuZHMuanMKKworIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RCYWNr
ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21t
YW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4v
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpZm5kZWYgSW5zcGVj
dG9yVGVzdEJhY2tlbmREaXNwYXRjaGVyc19oCisjZGVmaW5lIEluc3BlY3RvclRlc3RCYWNrZW5k
RGlzcGF0Y2hlcnNfaAorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUgIkluc3Bl
Y3RvclRlc3RUeXBlQnVpbGRlcnMuaCIKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordHlwZWRl
ZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKKyNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQorY2xhc3Mg
SW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgeworcHVibGljOgorICAg
IC8vIE5hbWVkIGFmdGVyIHBhcmFtZXRlciAnc2NyZWVuQ29sb3InIHdoaWxlIGdlbmVyYXRpbmcg
Y29tbWFuZC9ldmVudCBleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzLgorICAgIGVudW0gY2xh
c3MgU2NyZWVuQ29sb3IgeworICAgICAgICBSZWQgPSAwLAorICAgICAgICBHcmVlbiA9IDEsCisg
ICAgICAgIEJsdWUgPSAyLAorICAgIH07IC8vIGVudW0gY2xhc3MgU2NyZWVuQ29sb3IKKyAgICAv
LyBOYW1lZCBhZnRlciBwYXJhbWV0ZXIgJ3ByaW50Q29sb3InIHdoaWxlIGdlbmVyYXRpbmcgY29t
bWFuZC9ldmVudCBleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzLgorICAgIGVudW0gY2xhc3Mg
UHJpbnRDb2xvciB7CisgICAgICAgIEN5YW4gPSAzLAorICAgICAgICBNYWdlbnRhID0gNCwKKyAg
ICAgICAgWWVsbG93ID0gNSwKKyAgICAgICAgQmxhY2sgPSA2LAorICAgIH07IC8vIGVudW0gY2xh
c3MgUHJpbnRDb2xvcgorICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0
ZXJzKEVycm9yU3RyaW5nKiwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXk+
KiBpbl9jb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nKiBpbl9ub3RlcywgY29uc3QgZG91YmxlKiBp
bl90aW1lc3RhbXAsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4qIGlu
X3ZhbHVlcywgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSogaW5fcGF5bG9hZCwgY29u
c3QgaW50KiBpbl9kYXRhYmFzZUlkLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JP
YmplY3Q+KiBpbl9zcWxFcnJvciwgY29uc3QgU3RyaW5nKiBpbl9zY3JlZW5Db2xvciwgY29uc3Qg
U3RyaW5nKiBpbl9wcmludENvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJy
YXk8U3RyaW5nPj4mIG9wdF9vdXRfY29sdW1uTmFtZXMsIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6
Ok9wdE91dHB1dDxTdHJpbmc+KiBvcHRfb3V0X25vdGVzLCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVy
OjpPcHRPdXRwdXQ8ZG91YmxlPiogb3B0X291dF90aW1lc3RhbXAsIEluc3BlY3Rvcjo6VHlwZUJ1
aWxkZXI6Ok9wdE91dHB1dDxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4qIG9wdF9vdXRfdmFs
dWVzLCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8SW5zcGVjdG9yOjpJbnNwZWN0
b3JWYWx1ZT4qIG9wdF9vdXRfcGF5bG9hZCwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6T3B0T3V0
cHV0PGludD4qIG9wdF9vdXRfZGF0YWJhc2VJZCwgUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxk
ZXI6OkRhdGFiYXNlOjpFcnJvcj4mIG9wdF9vdXRfc3FsRXJyb3IsIEluc3BlY3Rvcjo6VHlwZUJ1
aWxkZXI6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzKiBvcHRfb3V0X3NjcmVlbkNvbG9yLCBJbnNw
ZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UHJpbnRDb2xvciogb3B0X291
dF9wcmludENvbG9yKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVOb09wdGlvbmFsUGFy
YW1ldGVycyhFcnJvclN0cmluZyosIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvckFy
cmF5PiYgaW5fY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgaW5fbm90ZXMsIGRvdWJsZSBpbl90
aW1lc3RhbXAsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4mIGluX3Zh
bHVlcywgSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSBpbl9wYXlsb2FkLCBpbnQgaW5fZGF0YWJh
c2VJZCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYgaW5fc3FsRXJy
b3IsIGNvbnN0IFN0cmluZyYgaW5fc2NyZWVuQ29sb3IsIGNvbnN0IFN0cmluZyYgaW5fcHJpbnRD
b2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5PFN0cmluZz4+JiBvdXRf
Y29sdW1uTmFtZXMsIFN0cmluZyogb3V0X25vdGVzLCBkb3VibGUqIG91dF90aW1lc3RhbXAsIElu
c3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0KiBvdXRfdmFsdWVzLCBJbnNwZWN0b3I6Okluc3BlY3Rv
clZhbHVlKiBvdXRfcGF5bG9hZCwgaW50KiBvdXRfZGF0YWJhc2VJZCwgUmVmUHRyPEluc3BlY3Rv
cjo6VHlwZUJ1aWxkZXI6OkRhdGFiYXNlOjpFcnJvcj4mIG91dF9zcWxFcnJvciwgSW5zcGVjdG9y
OjpUeXBlQnVpbGRlcjo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMqIG91dF9zY3JlZW5Db2xvciwg
SW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3IqIG91
dF9wcmludENvbG9yKSA9IDA7Citwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB+SW5zcGVjdG9yRGF0
YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKTsKK307CisjZW5kaWYgLy8gRU5BQkxFKFNR
TF9EQVRBQkFTRSkKKworI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCitjbGFzcyBJbnNwZWN0b3JE
YXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVj
dG9yU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShJbnNw
ZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiwgSW5zcGVjdG9yRGF0YWJhc2VCYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2gobG9uZyBj
YWxsSWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVj
dG9yT2JqZWN0PiBtZXNzYWdlKSBvdmVycmlkZTsKK3ByaXZhdGU6CisgICAgdm9pZCBleGVjdXRl
QWxsT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3I6Okluc3Bl
Y3Rvck9iamVjdCYgbWVzc2FnZSk7CisgICAgdm9pZCBleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRl
cnMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdl
KTsKK3ByaXZhdGU6CisgICAgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcihJbnNw
ZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiwgSW5zcGVjdG9yRGF0YWJhc2VCYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKKyAgICBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVySGFuZGxlciogbV9hZ2VudDsKK307CisjZW5kaWYgLy8gRU5BQkxFKFNRTF9EQVRBQkFT
RSkKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVD
VE9SKQorCisjZW5kaWYgLy8gIWRlZmluZWQoSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVy
c19oKQorIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKwor
IyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2Fs
bC1yZXR1cm4tcGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkluc3Bl
Y3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisK
KyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLmg+CisjaW5jbHVk
ZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJp
bmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKyNpZiBFTkFCTEUoU1FMX0RBVEFCQVNF
KQorSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6On5JbnNwZWN0b3JE
YXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpIHsgfQorI2VuZGlmIC8vIEVOQUJMRShT
UUxfREFUQUJBU0UpCisKKyNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQorUGFzc1JlZlB0cjxJbnNw
ZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyPiBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmRE
aXNwYXRjaGVyOjpjcmVhdGUoSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNw
YXRjaGVyLCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQp
Cit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyLCBhZ2VudCkpOworfQorCitJbnNwZWN0b3JEYXRhYmFz
ZUJhY2tlbmREaXNwYXRjaGVyOjpJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKElu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlciwgSW5zcGVjdG9yRGF0
YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQorICAgIDogSW5zcGVjdG9yU3Vw
cGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIpCisgICAgLCBtX2Fn
ZW50KGFnZW50KQoreworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hl
ckZvckRvbWFpbihBU0NJSUxpdGVyYWwoIkRhdGFiYXNlIiksIHRoaXMpOworfQorCit2b2lkIElu
c3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgY2FsbElkLCBj
b25zdCBTdHJpbmcmIG1ldGhvZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1lc3NhZ2Up
Cit7CisgICAgUmVmPEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3Qo
KnRoaXMpOworCisgICAgaWYgKG1ldGhvZCA9PSAiZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVy
cyIpCisgICAgICAgIGV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMoY2FsbElkLCAqbWVzc2Fn
ZS5nZXQoKSk7CisgICAgZWxzZSBpZiAobWV0aG9kID09ICJleGVjdXRlTm9PcHRpb25hbFBhcmFt
ZXRlcnMiKQorICAgICAgICBleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMoY2FsbElkLCAqbWVz
c2FnZS5nZXQoKSk7CisgICAgZWxzZQorICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBv
cnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpNZXRo
b2ROb3RGb3VuZCwgU3RyaW5nKCInIikgKyAiRGF0YWJhc2UiICsgJy4nICsgbWV0aG9kICsgIicg
d2FzIG5vdCBmb3VuZCIpOworfQorCit2b2lkIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3Bh
dGNoZXI6OmV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMobG9uZyBjYWxsSWQsIGNvbnN0IElu
c3BlY3Rvck9iamVjdCYgbWVzc2FnZSkKK3sKKyAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHBy
b3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IG1lc3NhZ2UuZ2V0T2JqZWN0KEFTQ0lJTGl0
ZXJhbCgicGFyYW1zIikpOworICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRy
ID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOworICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVy
cm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOworICAgIGJvb2wgY29sdW1uTmFtZXNfdmFs
dWVGb3VuZCA9IGZhbHNlOworICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5PiBp
bl9jb2x1bW5OYW1lcyA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRBcnJheShwYXJh
bXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgiY29sdW1uTmFtZXMiKSwgJmNvbHVtbk5hbWVz
X3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRyKTsKKyAgICBib29sIG5vdGVzX3ZhbHVlRm91
bmQgPSBmYWxzZTsKKyAgICBTdHJpbmcgaW5fbm90ZXMgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlcjo6Z2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJub3RlcyIp
LCAmbm90ZXNfdmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJvcnNQdHIpOworICAgIGJvb2wgdGltZXN0
YW1wX3ZhbHVlRm91bmQgPSBmYWxzZTsKKyAgICBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpPcHRP
dXRwdXQ8ZG91YmxlPiBpbl90aW1lc3RhbXAgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6
Z2V0TnVtYmVyKHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJ0aW1lc3RhbXAiKSwg
JnRpbWVzdGFtcF92YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0cik7CisgICAgYm9vbCB2YWx1
ZXNfdmFsdWVGb3VuZCA9IGZhbHNlOworICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9i
amVjdD4gaW5fdmFsdWVzID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldE9iamVjdChw
YXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgidmFsdWVzIiksICZ2YWx1ZXNfdmFsdWVG
b3VuZCwgcHJvdG9jb2xFcnJvcnNQdHIpOworICAgIGJvb2wgcGF5bG9hZF92YWx1ZUZvdW5kID0g
ZmFsc2U7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+IGluX3BheWxvYWQg
PSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0QW55KHBhcmFtc0NvbnRhaW5lclB0ciwg
QVNDSUlMaXRlcmFsKCJwYXlsb2FkIiksICZwYXlsb2FkX3ZhbHVlRm91bmQsIHByb3RvY29sRXJy
b3JzUHRyKTsKKyAgICBib29sIGRhdGFiYXNlSWRfdmFsdWVGb3VuZCA9IGZhbHNlOworICAgIGlu
dCBpbl9kYXRhYmFzZUlkID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldEludChwYXJh
bXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgiZGF0YWJhc2VJZCIpLCAmZGF0YWJhc2VJZF92
YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0cik7CisgICAgYm9vbCBzcWxFcnJvcl92YWx1ZUZv
dW5kID0gZmFsc2U7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBpbl9z
cWxFcnJvciA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRPYmplY3QocGFyYW1zQ29u
dGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoInNxbEVycm9yIiksICZzcWxFcnJvcl92YWx1ZUZvdW5k
LCBwcm90b2NvbEVycm9yc1B0cik7CisgICAgYm9vbCBzY3JlZW5Db2xvcl92YWx1ZUZvdW5kID0g
ZmFsc2U7CisgICAgU3RyaW5nIGluX3NjcmVlbkNvbG9yID0gSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXI6OmdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgic2NyZWVu
Q29sb3IiKSwgJnNjcmVlbkNvbG9yX3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRyKTsKKyAg
ICBib29sIHByaW50Q29sb3JfdmFsdWVGb3VuZCA9IGZhbHNlOworICAgIFN0cmluZyBpbl9wcmlu
dENvbG9yID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldFN0cmluZyhwYXJhbXNDb250
YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgicHJpbnRDb2xvciIpLCAmcHJpbnRDb2xvcl92YWx1ZUZv
dW5kLCBwcm90b2NvbEVycm9yc1B0cik7CisgICAgaWYgKHByb3RvY29sRXJyb3JzLT5sZW5ndGgo
KSkgeworICAgICAgICBTdHJpbmcgZXJyb3JNZXNzYWdlID0gU3RyaW5nOjpmb3JtYXQoIlNvbWUg
YXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJEYXRhYmFzZS5l
eGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzIik7CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNo
ZXItPnJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXI6OkludmFsaWRQYXJhbXMsIGVycm9yTWVzc2FnZSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgp
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEVycm9yU3RyaW5nIGVycm9yOworICAg
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCk7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5PFN0cmluZz4+IG91
dF9jb2x1bW5OYW1lczsKKyAgICBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8U3Ry
aW5nPiBvdXRfbm90ZXM7CisgICAgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6T3B0T3V0cHV0PGRv
dWJsZT4gb3V0X3RpbWVzdGFtcDsKKyAgICBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpPcHRPdXRw
dXQ8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IG91dF92YWx1ZXM7CisgICAgSW5zcGVjdG9y
OjpUeXBlQnVpbGRlcjo6T3B0T3V0cHV0PEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+IG91dF9w
YXlsb2FkOworICAgIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6Ok9wdE91dHB1dDxJbnNwZWN0b3I6
OlR5cGVCdWlsZGVyOjpEYXRhYmFzZTo6RGF0YWJhc2VJZD4gb3V0X2RhdGFiYXNlSWQ7CisgICAg
UmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkRhdGFiYXNlOjpFcnJvcj4gb3V0X3NxbEVy
cm9yOworICAgIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3Jz
IG91dF9zY3JlZW5Db2xvcjsKKyAgICBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVy
SGFuZGxlcjo6UHJpbnRDb2xvciBvdXRfcHJpbnRDb2xvcjsKKyAgICBtX2FnZW50LT5leGVjdXRl
QWxsT3B0aW9uYWxQYXJhbWV0ZXJzKCZlcnJvciwgY29sdW1uTmFtZXNfdmFsdWVGb3VuZCA/ICZp
bl9jb2x1bW5OYW1lcyA6IG51bGxwdHIsIG5vdGVzX3ZhbHVlRm91bmQgPyAmaW5fbm90ZXMgOiBu
dWxscHRyLCB0aW1lc3RhbXBfdmFsdWVGb3VuZCA/ICZpbl90aW1lc3RhbXAgOiBudWxscHRyLCB2
YWx1ZXNfdmFsdWVGb3VuZCA/ICZpbl92YWx1ZXMgOiBudWxscHRyLCBwYXlsb2FkX3ZhbHVlRm91
bmQgPyAmaW5fcGF5bG9hZCA6IG51bGxwdHIsIGRhdGFiYXNlSWRfdmFsdWVGb3VuZCA/ICZpbl9k
YXRhYmFzZUlkIDogbnVsbHB0ciwgc3FsRXJyb3JfdmFsdWVGb3VuZCA/ICZpbl9zcWxFcnJvciA6
IG51bGxwdHIsIHNjcmVlbkNvbG9yX3ZhbHVlRm91bmQgPyAmaW5fc2NyZWVuQ29sb3IgOiBudWxs
cHRyLCBwcmludENvbG9yX3ZhbHVlRm91bmQgPyAmaW5fcHJpbnRDb2xvciA6IG51bGxwdHIsIG91
dF9jb2x1bW5OYW1lcywgJm91dF9ub3RlcywgJm91dF90aW1lc3RhbXAsIG91dF92YWx1ZXMsICZv
dXRfcGF5bG9hZCwgJm91dF9kYXRhYmFzZUlkLCBvdXRfc3FsRXJyb3IsICZvdXRfc2NyZWVuQ29s
b3IsICZvdXRfcHJpbnRDb2xvcik7CisKKyAgICBpZiAoIWVycm9yLmxlbmd0aCgpKSB7CisgICAg
ICAgIGlmIChvdXRfY29sdW1uTmFtZXMpCisgICAgICAgICAgICByZXN1bHQtPnNldEFycmF5KEFT
Q0lJTGl0ZXJhbCgiY29sdW1uTmFtZXMiKSwgb3V0X2NvbHVtbk5hbWVzKTsKKyAgICAgICAgaWYg
KG91dF9ub3Rlcy5pc0Fzc2lnbmVkKCkpCisgICAgICAgICAgICByZXN1bHQtPnNldFN0cmluZyhB
U0NJSUxpdGVyYWwoIm5vdGVzIiksIG91dF9ub3Rlcy5nZXRWYWx1ZSgpKTsKKyAgICAgICAgaWYg
KG91dF90aW1lc3RhbXAuaXNBc3NpZ25lZCgpKQorICAgICAgICAgICAgcmVzdWx0LT5zZXROdW1i
ZXIoQVNDSUlMaXRlcmFsKCJ0aW1lc3RhbXAiKSwgb3V0X3RpbWVzdGFtcC5nZXRWYWx1ZSgpKTsK
KyAgICAgICAgaWYgKG91dF92YWx1ZXMuaXNBc3NpZ25lZCgpKQorICAgICAgICAgICAgcmVzdWx0
LT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJ2YWx1ZXMiKSwgb3V0X3ZhbHVlcy5nZXRWYWx1ZSgp
KTsKKyAgICAgICAgaWYgKG91dF9wYXlsb2FkLmlzQXNzaWduZWQoKSkKKyAgICAgICAgICAgIHJl
c3VsdC0+c2V0VmFsdWUoQVNDSUlMaXRlcmFsKCJwYXlsb2FkIiksIG91dF9wYXlsb2FkLmdldFZh
bHVlKCkpOworICAgICAgICBpZiAob3V0X2RhdGFiYXNlSWQuaXNBc3NpZ25lZCgpKQorICAgICAg
ICAgICAgcmVzdWx0LT5zZXROdW1iZXIoQVNDSUlMaXRlcmFsKCJkYXRhYmFzZUlkIiksIG91dF9k
YXRhYmFzZUlkLmdldFZhbHVlKCkpOworICAgICAgICBpZiAob3V0X3NxbEVycm9yKQorICAgICAg
ICAgICAgcmVzdWx0LT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJzcWxFcnJvciIpLCBvdXRfc3Fs
RXJyb3IpOworICAgICAgICBpZiAob3V0X3NjcmVlbkNvbG9yLmlzQXNzaWduZWQoKSkKKyAgICAg
ICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgic2NyZWVuQ29sb3IiKSwgb3V0
X3NjcmVlbkNvbG9yLmdldFZhbHVlKCkpOworICAgICAgICBpZiAob3V0X3ByaW50Q29sb3IuaXNB
c3NpZ25lZCgpKQorICAgICAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJw
cmludENvbG9yIiksIG91dF9wcmludENvbG9yLmdldFZhbHVlKCkpOworICAgIH0KKyAgICBtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBl
cnJvcik7Cit9CisKK3ZvaWQgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhl
Y3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmpl
Y3QmIG1lc3NhZ2UpCit7CisgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9y
cyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBwYXJhbXNDb250YWluZXIgPSBtZXNzYWdlLmdldE9iamVjdChBU0NJSUxpdGVyYWwoInBhcmFt
cyIpKTsKKyAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0Nv
bnRhaW5lci5nZXQoKTsKKyAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBw
cm90b2NvbEVycm9ycy5nZXQoKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJh
eT4gaW5fY29sdW1uTmFtZXMgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0QXJyYXko
cGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoImNvbHVtbk5hbWVzIiksIG51bGxwdHIs
IHByb3RvY29sRXJyb3JzUHRyKTsKKyAgICBTdHJpbmcgaW5fbm90ZXMgPSBJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlcjo6Z2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFs
KCJub3RlcyIpLCBudWxscHRyLCBwcm90b2NvbEVycm9yc1B0cik7CisgICAgZG91YmxlIGluX3Rp
bWVzdGFtcCA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXROdW1iZXIocGFyYW1zQ29u
dGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoInRpbWVzdGFtcCIpLCBudWxscHRyLCBwcm90b2NvbEVy
cm9yc1B0cik7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBpbl92YWx1
ZXMgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0T2JqZWN0KHBhcmFtc0NvbnRhaW5l
clB0ciwgQVNDSUlMaXRlcmFsKCJ2YWx1ZXMiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnNQdHIp
OworICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiBpbl9wYXlsb2FkID0gSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldEFueShwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJ
TGl0ZXJhbCgicGF5bG9hZCIpLCBudWxscHRyLCBwcm90b2NvbEVycm9yc1B0cik7CisgICAgaW50
IGluX2RhdGFiYXNlSWQgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0SW50KHBhcmFt
c0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJkYXRhYmFzZUlkIiksIG51bGxwdHIsIHByb3Rv
Y29sRXJyb3JzUHRyKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IGlu
X3NxbEVycm9yID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldE9iamVjdChwYXJhbXND
b250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgic3FsRXJyb3IiKSwgbnVsbHB0ciwgcHJvdG9jb2xF
cnJvcnNQdHIpOworICAgIFN0cmluZyBpbl9zY3JlZW5Db2xvciA9IEluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyOjpnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoInNj
cmVlbkNvbG9yIiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzUHRyKTsKKyAgICBTdHJpbmcgaW5f
cHJpbnRDb2xvciA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRTdHJpbmcocGFyYW1z
Q29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoInByaW50Q29sb3IiKSwgbnVsbHB0ciwgcHJvdG9j
b2xFcnJvcnNQdHIpOworICAgIGlmIChwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKKyAgICAg
ICAgU3RyaW5nIGVycm9yTWVzc2FnZSA9IFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBv
ZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiRGF0YWJhc2UuZXhlY3V0ZU5vT3B0
aW9uYWxQYXJhbWV0ZXJzIik7CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFBy
b3RvY29sRXJyb3IoJmNhbGxJZCwgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkludmFsaWRQ
YXJhbXMsIGVycm9yTWVzc2FnZSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIEVycm9yU3RyaW5nIGVycm9yOworICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVm
UHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5PFN0cmluZz4+IG91dF9jb2x1bW5OYW1l
czsKKyAgICBTdHJpbmcgb3V0X25vdGVzOworICAgIGRvdWJsZSBvdXRfdGltZXN0YW1wOworICAg
IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0IG91dF92YWx1ZXM7CisgICAgSW5zcGVjdG9yOjpJ
bnNwZWN0b3JWYWx1ZSBvdXRfcGF5bG9hZDsKKyAgICBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpE
YXRhYmFzZTo6RGF0YWJhc2VJZCBvdXRfZGF0YWJhc2VJZDsKKyAgICBSZWZQdHI8SW5zcGVjdG9y
OjpUeXBlQnVpbGRlcjo6RGF0YWJhc2U6OkVycm9yPiBvdXRfc3FsRXJyb3I7CisgICAgSW5zcGVj
dG9yOjpUeXBlQnVpbGRlcjo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMgb3V0X3NjcmVlbkNvbG9y
OworICAgIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQcmludENv
bG9yIG91dF9wcmludENvbG9yOworICAgIG1fYWdlbnQtPmV4ZWN1dGVOb09wdGlvbmFsUGFyYW1l
dGVycygmZXJyb3IsIGluX2NvbHVtbk5hbWVzLCBpbl9ub3RlcywgaW5fdGltZXN0YW1wLCBpbl92
YWx1ZXMsIGluX3BheWxvYWQsIGluX2RhdGFiYXNlSWQsIGluX3NxbEVycm9yLCBpbl9zY3JlZW5D
b2xvciwgaW5fcHJpbnRDb2xvciwgb3V0X2NvbHVtbk5hbWVzLCAmb3V0X25vdGVzLCAmb3V0X3Rp
bWVzdGFtcCwgb3V0X3ZhbHVlcywgJm91dF9wYXlsb2FkLCAmb3V0X2RhdGFiYXNlSWQsIG91dF9z
cWxFcnJvciwgJm91dF9zY3JlZW5Db2xvciwgJm91dF9wcmludENvbG9yKTsKKworICAgIGlmICgh
ZXJyb3IubGVuZ3RoKCkpIHsKKyAgICAgICAgcmVzdWx0LT5zZXRBcnJheShBU0NJSUxpdGVyYWwo
ImNvbHVtbk5hbWVzIiksIG91dF9jb2x1bW5OYW1lcyk7CisgICAgICAgIHJlc3VsdC0+c2V0U3Ry
aW5nKEFTQ0lJTGl0ZXJhbCgibm90ZXMiKSwgb3V0X25vdGVzKTsKKyAgICAgICAgcmVzdWx0LT5z
ZXROdW1iZXIoQVNDSUlMaXRlcmFsKCJ0aW1lc3RhbXAiKSwgb3V0X3RpbWVzdGFtcCk7CisgICAg
ICAgIHJlc3VsdC0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgidmFsdWVzIiksIG91dF92YWx1ZXMp
OworICAgICAgICByZXN1bHQtPnNldFZhbHVlKEFTQ0lJTGl0ZXJhbCgicGF5bG9hZCIpLCBvdXRf
cGF5bG9hZCk7CisgICAgICAgIHJlc3VsdC0+c2V0TnVtYmVyKEFTQ0lJTGl0ZXJhbCgiZGF0YWJh
c2VJZCIpLCBvdXRfZGF0YWJhc2VJZCk7CisgICAgICAgIHJlc3VsdC0+c2V0T2JqZWN0KEFTQ0lJ
TGl0ZXJhbCgic3FsRXJyb3IiKSwgb3V0X3NxbEVycm9yKTsKKyAgICAgICAgcmVzdWx0LT5zZXRT
dHJpbmcoQVNDSUlMaXRlcmFsKCJzY3JlZW5Db2xvciIpLCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVy
OjpnZXRUZXN0RW51bUNvbnN0YW50VmFsdWUob3V0X3NjcmVlbkNvbG9yKSk7CisgICAgICAgIHJl
c3VsdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgicHJpbnRDb2xvciIpLCBJbnNwZWN0b3I6OlR5
cGVCdWlsZGVyOjpnZXRUZXN0RW51bUNvbnN0YW50VmFsdWUob3V0X3ByaW50Q29sb3IpKTsKKyAg
ICB9CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0
LnJlbGVhc2UoKSwgZXJyb3IpOworfQorI2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0UpCisK
K30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikK
KworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorCisj
IyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwt
cmV0dXJuLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisKKyNpZm5kZWYgSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hl
cnNfaAorI2RlZmluZSBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVyc19oCisKKyNpZiBF
TkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSAiSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5o
IgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4KKyNpbmNs
dWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQ
dHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3Bl
Y3RvciB7CisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJM
RShJTlNQRUNUT1IpCisKKyNlbmRpZiAvLyAhZGVmaW5lZChJbnNwZWN0b3JUZXN0RnJvbnRlbmRE
aXNwYXRjaGVyc19oKQorIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRj
aGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVy
cy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1v
cHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKKworI2lmIEVOQUJMRShJ
TlNQRUNUT1IpCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJ
bnNwZWN0b3IgeworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJM
RShJTlNQRUNUT1IpCisKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0
Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmgK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1vcHRpb25h
bC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaWZuZGVmIEluc3BlY3RvclRlc3RUeXBlQnVpbGRl
cnNfaAorI2RlZmluZSBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzX2gKKworI2lmIEVOQUJMRShJ
TlNQRUNUT1IpCisKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9ySlNUeXBlQnVpbGRlcnMu
aD4KKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVHlwZUJ1aWxkZXIuaD4KKyNpbmNsdWRl
IDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisKK25hbWVz
cGFjZSBJbnNwZWN0b3IgeworCisKKworbmFtZXNwYWNlIFR5cGVCdWlsZGVyIHsKKworLy8gRm9y
d2FyZCBkZWNsYXJhdGlvbnMuCisjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKK25hbWVzcGFjZSBE
YXRhYmFzZSB7CitjbGFzcyBFcnJvcjsKK2VudW0gY2xhc3MgUHJpbWFyeUNvbG9yczsKK30gLy8g
RGF0YWJhc2UKKyNlbmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQorLy8gRW5kIG9mIGZvcndh
cmQgZGVjbGFyYXRpb25zLgorCisKKy8vIFR5cGVkZWZzLgorI2lmIEVOQUJMRShTUUxfREFUQUJB
U0UpCituYW1lc3BhY2UgRGF0YWJhc2UgeworLyogVW5pcXVlIGlkZW50aWZpZXIgb2YgRGF0YWJh
c2Ugb2JqZWN0LiAqLwordHlwZWRlZiBpbnQgRGF0YWJhc2VJZDsKK30gLy8gRGF0YWJhc2UKKyNl
bmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQorLy8gRW5kIG9mIHR5cGVkZWZzLgorCitTdHJp
bmcgZ2V0VGVzdEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKTsKKwordGVtcGxhdGU8dHlwZW5h
bWUgVD4gU3RyaW5nIGdldFRlc3RFbnVtQ29uc3RhbnRWYWx1ZShUIGVudW1WYWx1ZSkKK3sKKyAg
ICByZXR1cm4gZ2V0VGVzdEVudW1Db25zdGFudFZhbHVlKHN0YXRpY19jYXN0PGludD4oZW51bVZh
bHVlKSk7Cit9CisKKyNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQorbmFtZXNwYWNlIERhdGFiYXNl
IHsKKy8qICAqLworZW51bSBjbGFzcyBQcmltYXJ5Q29sb3JzIHsKKyAgICBSZWQgPSAwLAorICAg
IEdyZWVuID0gMSwKKyAgICBCbHVlID0gMiwKK307IC8vIGVudW0gY2xhc3MgUHJpbWFyeUNvbG9y
cworLyogRGF0YWJhc2UgZXJyb3IuICovCitjbGFzcyBFcnJvciA6IHB1YmxpYyBJbnNwZWN0b3I6
Okluc3BlY3Rvck9iamVjdEJhc2UgeworcHVibGljOgorICAgIGVudW0geworICAgICAgICBOb0Zp
ZWxkc1NldCA9IDAsCisgICAgICAgIE1lc3NhZ2VTZXQgPSAxIDw8IDAsCisgICAgICAgIENvZGVT
ZXQgPSAxIDw8IDEsCisgICAgICAgIEFsbEZpZWxkc1NldCA9IChNZXNzYWdlU2V0IHwgQ29kZVNl
dCkKKyAgICB9OworCisgICAgdGVtcGxhdGU8aW50IFNUQVRFPgorICAgIGNsYXNzIEJ1aWxkZXIg
eworICAgIHByaXZhdGU6CisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVj
dD4gbV9yZXN1bHQ7CisKKyAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUg
fCBTVEVQPiYgY2FzdFN0YXRlKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICpyZWlu
dGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOworICAgICAgICB9CisK
KyAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPC8qRXJyb3IqL0luc3BlY3Rvcjo6SW5zcGVjdG9y
T2JqZWN0PiBwdHIpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRF
ID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOworICAg
ICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CisgICAgICAgIH0KKyAgICAgICAgZnJpZW5kIGNsYXNz
IEVycm9yOworICAgIHB1YmxpYzoKKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTWVzc2FnZVNl
dD4mIHNldE1lc3NhZ2UoY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE1lc3NhZ2VTZXQpLCBwcm9wZXJ0eV9tZXNzYWdl
X2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoQVNDSUlMaXRl
cmFsKCJtZXNzYWdlIiksIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TWVz
c2FnZVNldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDb2RlU2V0
PiYgc2V0Q29kZShpbnQgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKCEoU1RBVEUgJiBDb2RlU2V0KSwgcHJvcGVydHlfY29kZV9hbHJlYWR5X3NldCk7CisgICAg
ICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKEFTQ0lJTGl0ZXJhbCgiY29kZSIpLCB2YWx1ZSk7
CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENvZGVTZXQ+KCk7CisgICAgICAgIH0KKwor
ICAgICAgICBvcGVyYXRvciBSZWZQdHI8RXJyb3I+JiAoKQorICAgICAgICB7CisgICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVh
ZHkpOworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKEVycm9yKSA9PSBzaXplb2Yo
SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QpLCBjYW5ub3RfY2FzdCk7CisgICAgICAgICAgICBy
ZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPEVycm9yPio+KCZtX3Jlc3VsdCk7CisgICAg
ICAgIH0KKworICAgICAgICBQYXNzUmVmUHRyPEVycm9yPiByZWxlYXNlKCkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxFcnJvcj4oKnRoaXMpLnJlbGVhc2UoKTsKKyAgICAg
ICAgfQorICAgIH07CisKKyAgICAvKgorICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKKyAg
ICAgKiBSZWZQdHI8RXJyb3I+IHJlc3VsdCA9IEVycm9yOjpjcmVhdGUoKQorICAgICAqICAgICAu
c2V0TWVzc2FnZSguLi4pCisgICAgICogICAgIC5zZXRDb2RlKC4uLik7CisgICAgICovCisgICAg
c3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1
cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q6OmNyZWF0
ZSgpKTsKKyAgICB9CisgICAgdHlwZWRlZiBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpTdHJ1Y3RJ
dGVtVHJhaXRzIEl0ZW1UcmFpdHM7Cit9OworCit9IC8vIERhdGFiYXNlCisjZW5kaWYgLy8gRU5B
QkxFKFNRTF9EQVRBQkFTRSkKKworCisKK30gLy8gbmFtZXNwYWNlIFR5cGVCdWlsZGVyCisKK30g
Ly8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKwor
I2VuZGlmIC8vICFkZWZpbmVkKEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnNfaCkKKyMjIyBFbmQg
RmlsZTogSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNw
ZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
Ky8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBjb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgor
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2NvZGVnZW4vZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmgiCisK
KyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgor
CituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworbmFtZXNwYWNlIFR5cGVCdWlsZGVyIHsKKworc3Rh
dGljIGNvbnN0IGNoYXIqIGNvbnN0IGVudW1fY29uc3RhbnRfdmFsdWVzW10gPSB7CisgICAgInJl
ZCIsCisgICAgImdyZWVuIiwKKyAgICAiYmx1ZSIsCisgICAgImN5YW4iLAorICAgICJtYWdlbnRh
IiwKKyAgICAieWVsbG93IiwKKyAgICAiYmxhY2siLAorfTsKKworU3RyaW5nIGdldFRlc3RFbnVt
Q29uc3RhbnRWYWx1ZShpbnQgY29kZSkgeworICAgIHJldHVybiBlbnVtX2NvbnN0YW50X3ZhbHVl
c1tjb2RlXTsKK30KKworCisKK30gLy8gbmFtZXNwYWNlIFR5cGVCdWlsZGVyCisKK30gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKworIyMjIEVu
ZCBGaWxlOiBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmNwcApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2RvbWFpbnMt
d2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZG9tYWlucy13aXRoLXZhcnlp
bmctY29tbWFuZC1zaXplcy5qc29uLXJlc3VsdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44NGYxNGIzMWY5NGZlZGZl
ZTI0YTkxZTRhMDJiYWE1Yjk4Yzc4MzA1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2RvbWFpbnMtd2l0aC12
YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbi1yZXN1bHQKQEAgLTAsMCArMSw1NjYgQEAKKyMjIyBC
ZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0QmFja2VuZENvbW1hbmRzLmpzCisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMu
anNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisK
Ky8vIE5ldHdvcmsxLgorSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIk5ldHdvcmsx
LmxvYWRSZXNvdXJjZTEiLCBbXSwgW10pOworCisvLyBOZXR3b3JrMy4KK0luc3BlY3RvckJhY2tl
bmQucmVnaXN0ZXJDb21tYW5kKCJOZXR3b3JrMy5sb2FkUmVzb3VyY2UxIiwgW10sIFtdKTsKK0lu
c3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJOZXR3b3JrMy5sb2FkUmVzb3VyY2UyIiwg
W10sIFtdKTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJOZXR3b3JrMy5sb2Fk
UmVzb3VyY2UzIiwgW10sIFtdKTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJO
ZXR3b3JrMy5sb2FkUmVzb3VyY2U0IiwgW10sIFtdKTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0
ZXJDb21tYW5kKCJOZXR3b3JrMy5sb2FkUmVzb3VyY2U1IiwgW10sIFtdKTsKK0luc3BlY3RvckJh
Y2tlbmQucmVnaXN0ZXJDb21tYW5kKCJOZXR3b3JrMy5sb2FkUmVzb3VyY2U2IiwgW10sIFtdKTsK
K0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJOZXR3b3JrMy5sb2FkUmVzb3VyY2U3
IiwgW10sIFtdKTsKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdEJhY2tlbmRDb21tYW5kcy5q
cworCisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbnMtd2l0aC12YXJ5aW5nLWNv
bW1hbmQtc2l6ZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5CisKKyNpZm5kZWYgSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVyc19oCisj
ZGVmaW5lIEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnNfaAorCisjaWYgRU5BQkxFKElO
U1BFQ1RPUikKKworI2luY2x1ZGUgIkluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuaCIKKyNpbmNs
dWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx3
dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1l
c3BhY2UgSW5zcGVjdG9yIHsKKwordHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKK2NsYXNz
IEluc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKK3B1YmxpYzoKKyAg
ICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlMShFcnJvclN0cmluZyopID0gMDsKK3Byb3RlY3Rl
ZDoKKyAgICB2aXJ0dWFsIH5JbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxl
cigpOworfTsKKworY2xhc3MgSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXIgeworcHVibGljOgorICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UxKEVycm9yU3RyaW5n
KikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UyKEVycm9yU3RyaW5nKikgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UzKEVycm9yU3RyaW5nKikgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2U0KEVycm9yU3RyaW5nKikgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBsb2FkUmVzb3VyY2U1KEVycm9yU3RyaW5nKikgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCBsb2FkUmVzb3VyY2U2KEVycm9yU3RyaW5nKikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBsb2Fk
UmVzb3VyY2U3KEVycm9yU3RyaW5nKikgPSAwOworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgfklu
c3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCk7Cit9OworCitjbGFzcyBJ
bnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEluc3BlY3Rv
cjo6SW5zcGVjdG9yU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAg
IHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI+IGNy
ZWF0ZShJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiwgSW5zcGVjdG9yTmV0
d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0
Y2gobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBQYXNzUmVmUHRyPEluc3BlY3Rv
cjo6SW5zcGVjdG9yT2JqZWN0PiBtZXNzYWdlKSBvdmVycmlkZTsKK3ByaXZhdGU6CisgICAgdm9p
ZCBsb2FkUmVzb3VyY2UxKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9i
amVjdCYgbWVzc2FnZSk7Citwcml2YXRlOgorICAgIEluc3BlY3Rvck5ldHdvcmsxQmFja2VuZERp
c3BhdGNoZXIoSW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciosIEluc3BlY3Rv
ck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7CisgICAgSW5zcGVjdG9yTmV0d29y
azFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIG1fYWdlbnQ7Cit9OworCitjbGFzcyBJbnNwZWN0
b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEluc3BlY3Rvcjo6SW5z
cGVjdG9yU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHN0YXRp
YyBQYXNzUmVmUHRyPEluc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShJ
bnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiwgSW5zcGVjdG9yTmV0d29yazNC
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2gobG9u
ZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5z
cGVjdG9yT2JqZWN0PiBtZXNzYWdlKSBvdmVycmlkZTsKK3ByaXZhdGU6CisgICAgdm9pZCBsb2Fk
UmVzb3VyY2UxKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCYg
bWVzc2FnZSk7CisgICAgdm9pZCBsb2FkUmVzb3VyY2UyKGxvbmcgY2FsbElkLCBjb25zdCBJbnNw
ZWN0b3I6Okluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7CisgICAgdm9pZCBsb2FkUmVzb3VyY2Uz
KGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7
CisgICAgdm9pZCBsb2FkUmVzb3VyY2U0KGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3I6Oklu
c3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7CisgICAgdm9pZCBsb2FkUmVzb3VyY2U1KGxvbmcgY2Fs
bElkLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7CisgICAgdm9p
ZCBsb2FkUmVzb3VyY2U2KGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9i
amVjdCYgbWVzc2FnZSk7CisgICAgdm9pZCBsb2FkUmVzb3VyY2U3KGxvbmcgY2FsbElkLCBjb25z
dCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7Citwcml2YXRlOgorICAgIElu
c3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXIoSW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlciosIEluc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXJIYW5kbGVy
Kik7CisgICAgSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIG1fYWdl
bnQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJ
TlNQRUNUT1IpCisKKyNlbmRpZiAvLyAhZGVmaW5lZChJbnNwZWN0b3JUZXN0QmFja2VuZERpc3Bh
dGNoZXJzX2gpCisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMu
aAorCisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmct
Y29tbWFuZC1zaXplcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkluc3BlY3RvclRl
c3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNs
dWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLmg+CisjaW5jbHVkZSA8aW5z
cGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
KworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK0luc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3Bh
dGNoZXJIYW5kbGVyOjp+SW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIo
KSB7IH0KK0luc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjp+SW5zcGVj
dG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKSB7IH0KKworUGFzc1JlZlB0cjxJ
bnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyPiBJbnNwZWN0b3JOZXR3b3JrMUJhY2tl
bmREaXNwYXRjaGVyOjpjcmVhdGUoSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmRE
aXNwYXRjaGVyLCBJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdl
bnQpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmRE
aXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyLCBhZ2VudCkpOworfQorCitJbnNwZWN0b3JOZXR3
b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVy
KEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlciwgSW5zcGVjdG9y
TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQorICAgIDogSW5zcGVjdG9y
U3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIpCisgICAgLCBt
X2FnZW50KGFnZW50KQoreworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0
Y2hlckZvckRvbWFpbihBU0NJSUxpdGVyYWwoIk5ldHdvcmsxIiksIHRoaXMpOworfQorCit2b2lk
IEluc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgY2FsbElk
LCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1lc3Nh
Z2UpCit7CisgICAgUmVmPEluc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI+IHByb3Rl
Y3QoKnRoaXMpOworCisgICAgaWYgKG1ldGhvZCA9PSAibG9hZFJlc291cmNlMSIpCisgICAgICAg
IGxvYWRSZXNvdXJjZTEoY2FsbElkLCAqbWVzc2FnZS5nZXQoKSk7CisgICAgZWxzZQorICAgICAg
ICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIEluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgU3RyaW5nKCInIikgKyAiTmV0
d29yazEiICsgJy4nICsgbWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOworfQorCit2b2lkIElu
c3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTEobG9uZyBjYWxs
SWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYpCit7CisgICAgRXJyb3JTdHJpbmcgZXJyb3I7Cisg
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsKKyAgICBtX2FnZW50LT5sb2FkUmVzb3VyY2UxKCZlcnJvcik7CisKKyAgICBtX2JhY2tl
bmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBlcnJv
cik7Cit9CisKK1Bhc3NSZWZQdHI8SW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcj4g
SW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKEluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlciwgSW5zcGVjdG9yTmV0d29yazNCYWNrZW5k
RGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW5z
cGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlciwgYWdlbnQp
KTsKK30KKworSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6SW5zcGVjdG9yTmV0
d29yazNCYWNrZW5kRGlzcGF0Y2hlcihJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciogYmFja2Vu
ZERpc3BhdGNoZXIsIEluc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBh
Z2VudCkKKyAgICA6IEluc3BlY3RvclN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyKGJhY2tl
bmREaXNwYXRjaGVyKQorICAgICwgbV9hZ2VudChhZ2VudCkKK3sKKyAgICBtX2JhY2tlbmREaXNw
YXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4oQVNDSUlMaXRlcmFsKCJOZXR3b3Jr
MyIpLCB0aGlzKTsKK30KKwordm9pZCBJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVy
OjpkaXNwYXRjaChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFBhc3NSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBtZXNzYWdlKQoreworICAgIFJlZjxJbnNwZWN0b3JOZXR3b3JrM0Jh
Y2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKKworICAgIHR5cGVkZWYgdm9pZCAoSW5z
cGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6KkNhbGxIYW5kbGVyKShsb25nIGNhbGxJ
ZCwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpOworICAgIHR5cGVk
ZWYgSGFzaE1hcDxTdHJpbmcsIENhbGxIYW5kbGVyPiBEaXNwYXRjaE1hcDsKKyAgICBERVBSRUNB
VEVEX0RFRklORV9TVEFUSUNfTE9DQUwoRGlzcGF0Y2hNYXAsIGRpc3BhdGNoTWFwLCAoKSk7Cisg
ICAgaWYgKGRpc3BhdGNoTWFwLmlzRW1wdHkoKSkgeworICAgICAgICBzdGF0aWMgY29uc3Qgc3Ry
dWN0IE1ldGhvZFRhYmxlIHsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIqIG5hbWU7CisgICAgICAg
ICAgICBDYWxsSGFuZGxlciBoYW5kbGVyOworICAgICAgICB9IGNvbW1hbmRzW10gPSB7CisgICAg
ICAgICAgICB7ICJsb2FkUmVzb3VyY2UxIiwgJkluc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3Bh
dGNoZXI6OmxvYWRSZXNvdXJjZTEgfSwKKyAgICAgICAgICAgIHsgImxvYWRSZXNvdXJjZTIiLCAm
SW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMiB9LAorICAg
ICAgICAgICAgeyAibG9hZFJlc291cmNlMyIsICZJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNw
YXRjaGVyOjpsb2FkUmVzb3VyY2UzIH0sCisgICAgICAgICAgICB7ICJsb2FkUmVzb3VyY2U0Iiwg
Jkluc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTQgfSwKKyAg
ICAgICAgICAgIHsgImxvYWRSZXNvdXJjZTUiLCAmSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlz
cGF0Y2hlcjo6bG9hZFJlc291cmNlNSB9LAorICAgICAgICAgICAgeyAibG9hZFJlc291cmNlNiIs
ICZJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U2IH0sCisg
ICAgICAgICAgICB7ICJsb2FkUmVzb3VyY2U3IiwgJkluc3BlY3Rvck5ldHdvcmszQmFja2VuZERp
c3BhdGNoZXI6OmxvYWRSZXNvdXJjZTcgfSwKKyAgICAgICAgfTsKKyAgICAgICAgc2l6ZV90IGxl
bmd0aCA9IFdURl9BUlJBWV9MRU5HVEgoY29tbWFuZHMpOworICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGxlbmd0aDsgKytpKQorICAgICAgICAgICAgZGlzcGF0Y2hNYXAuYWRkKGNvbW1h
bmRzW2ldLm5hbWUsIGNvbW1hbmRzW2ldLmhhbmRsZXIpOworICAgIH0KKworICAgIEhhc2hNYXA8
U3RyaW5nLCBDYWxsSGFuZGxlcj46Oml0ZXJhdG9yIGl0ID0gZGlzcGF0Y2hNYXAuZmluZChtZXRo
b2QpOworICAgIGlmIChpdCA9PSBkaXNwYXRjaE1hcC5lbmQoKSkgeworICAgICAgICBtX2JhY2tl
bmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIEluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgU3RyaW5nKCInIikgKyAiTmV0d29yazMiICsg
Jy4nICsgbWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgKCgqdGhpcykuKml0LT52YWx1ZSkoY2FsbElkLCAqbWVzc2FnZS5nZXQoKSk7Cit9
CisKK3ZvaWQgSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNl
MShsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JikKK3sKKyAgICBFcnJvclN0cmlu
ZyBlcnJvcjsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JP
YmplY3Q6OmNyZWF0ZSgpOworICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJjZTEoJmVycm9yKTsKKwor
ICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxl
YXNlKCksIGVycm9yKTsKK30KKwordm9pZCBJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRj
aGVyOjpsb2FkUmVzb3VyY2UyKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmKQor
eworICAgIEVycm9yU3RyaW5nIGVycm9yOworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJl
c3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgbV9hZ2VudC0+bG9hZFJlc291
cmNlMigmZXJyb3IpOworCisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNh
bGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgZXJyb3IpOworfQorCit2b2lkIEluc3BlY3Rvck5ldHdv
cmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTMobG9uZyBjYWxsSWQsIGNvbnN0IElu
c3BlY3Rvck9iamVjdCYpCit7CisgICAgRXJyb3JTdHJpbmcgZXJyb3I7CisgICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBt
X2FnZW50LT5sb2FkUmVzb3VyY2UzKCZlcnJvcik7CisKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVy
LT5zZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBlcnJvcik7Cit9CisKK3Zv
aWQgSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNChsb25n
IGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JikKK3sKKyAgICBFcnJvclN0cmluZyBlcnJv
cjsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6
OmNyZWF0ZSgpOworICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJjZTQoJmVycm9yKTsKKworICAgIG1f
YmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCks
IGVycm9yKTsKK30KKwordm9pZCBJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjps
b2FkUmVzb3VyY2U1KGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmKQoreworICAg
IEVycm9yU3RyaW5nIGVycm9yOworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9
IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgbV9hZ2VudC0+bG9hZFJlc291cmNlNSgm
ZXJyb3IpOworCisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwg
cmVzdWx0LnJlbGVhc2UoKSwgZXJyb3IpOworfQorCit2b2lkIEluc3BlY3Rvck5ldHdvcmszQmFj
a2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTYobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rv
ck9iamVjdCYpCit7CisgICAgRXJyb3JTdHJpbmcgZXJyb3I7CisgICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBtX2FnZW50
LT5sb2FkUmVzb3VyY2U2KCZlcnJvcik7CisKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5k
UmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBlcnJvcik7Cit9CisKK3ZvaWQgSW5z
cGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNyhsb25nIGNhbGxJ
ZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JikKK3sKKyAgICBFcnJvclN0cmluZyBlcnJvcjsKKyAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0
ZSgpOworICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJjZTcoJmVycm9yKTsKKworICAgIG1fYmFja2Vu
ZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIGVycm9y
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5T
UEVDVE9SKQorCisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMu
Y3BwCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5o
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbnMtd2l0aC12YXJ5aW5n
LWNvbW1hbmQtc2l6ZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5CisKKyNpZm5kZWYgSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnNf
aAorI2RlZmluZSBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVyc19oCisKKyNpZiBFTkFC
TEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSAiSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5oIgor
I2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4KKyNpbmNsdWRl
IDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIu
aD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3Rv
ciB7CisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJ
TlNQRUNUT1IpCisKKyNlbmRpZiAvLyAhZGVmaW5lZChJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNw
YXRjaGVyc19oKQorIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVy
cy5oCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5j
cHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlp
bmctY29tbWFuZC1zaXplcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkluc3BlY3Rv
clRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisj
aW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwor
fSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQor
CisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAorCisj
IyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5oCisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMu
anNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisK
KyNpZm5kZWYgSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVyc19oCisjZGVmaW5lIEluc3BlY3RvclRl
c3RUeXBlQnVpbGRlcnNfaAorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUgPGlu
c3BlY3Rvci9JbnNwZWN0b3JKU1R5cGVCdWlsZGVycy5oPgorI2luY2x1ZGUgPGluc3BlY3Rvci9J
bnNwZWN0b3JUeXBlQnVpbGRlci5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5j
bHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCitu
YW1lc3BhY2UgVHlwZUJ1aWxkZXIgeworCisKKworLy8gVHlwZWRlZnMuCituYW1lc3BhY2UgTmV0
d29yazIgeworLyogVW5pcXVlIGxvYWRlciBpZGVudGlmaWVyLiAqLwordHlwZWRlZiBTdHJpbmcg
TG9hZGVySWQ7Cit9IC8vIE5ldHdvcmsyCisvLyBFbmQgb2YgdHlwZWRlZnMuCisKK1N0cmluZyBn
ZXRUZXN0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBTdHJpbmcgZ2V0VGVzdEVudW1Db25zdGFudFZhbHVlKFQgZW51bVZhbHVlKQoreworICAgIHJl
dHVybiBnZXRUZXN0RW51bUNvbnN0YW50VmFsdWUoc3RhdGljX2Nhc3Q8aW50PihlbnVtVmFsdWUp
KTsKK30KKworCisKK30gLy8gbmFtZXNwYWNlIFR5cGVCdWlsZGVyCisKK30gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKworI2VuZGlmIC8vICFk
ZWZpbmVkKEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnNfaCkKKyMjIyBFbmQgRmlsZTogSW5zcGVj
dG9yVGVzdFR5cGVCdWlsZGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0VHlw
ZUJ1aWxkZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW5z
LXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5oIgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikK
KworI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7
CisKK25hbWVzcGFjZSBUeXBlQnVpbGRlciB7CisKK3N0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBl
bnVtX2NvbnN0YW50X3ZhbHVlc1tdID0geworfTsKKworU3RyaW5nIGdldFRlc3RFbnVtQ29uc3Rh
bnRWYWx1ZShpbnQgY29kZSkgeworICAgIHJldHVybiBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb2Rl
XTsKK30KKworCisKK30gLy8gbmFtZXNwYWNlIFR5cGVCdWlsZGVyCisKK30gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKworIyMjIEVuZCBGaWxl
OiBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2V2ZW50cy13aXRoLW9w
dGlvbmFsLXBhcmFtZXRlcnMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1l
dGVycy5qc29uLXJlc3VsdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iNGIxMTYzZDBjOGY1YjAwMDI5ZDE5ODdlYTM5
YThmM2U1OTcwYzhhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2V2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFt
ZXRlcnMuanNvbi1yZXN1bHQKQEAgLTAsMCArMSw1MTEgQEAKKyMjIyBCZWdpbiBGaWxlOiBJbnNw
ZWN0b3JUZXN0QmFja2VuZENvbW1hbmRzLmpzCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKy8vIERhdGFiYXNlLgorSW5z
cGVjdG9yQmFja2VuZC5yZWdpc3RlckRhdGFiYXNlRGlzcGF0Y2hlciA9IEluc3BlY3RvckJhY2tl
bmQucmVnaXN0ZXJEb21haW5EaXNwYXRjaGVyLmJpbmQoSW5zcGVjdG9yQmFja2VuZCwgIkRhdGFi
YXNlIik7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRXZlbnQoIkRhdGFiYXNlLmRpZEV4ZWN1
dGVPcHRpb25hbFBhcmFtZXRlcnMiLCBbImNvbHVtbk5hbWVzIiwgIm5vdGVzIiwgInRpbWVzdGFt
cCIsICJ2YWx1ZXMiLCAicGF5bG9hZCIsICJzcWxFcnJvciIsICJzY3JlZW5Db2xvciIsICJwcmlu
dENvbG9yIl0pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckV2ZW50KCJEYXRhYmFzZS5kaWRF
eGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMiLCBbImNvbHVtbk5hbWVzIiwgIm5vdGVzIiwgInRp
bWVzdGFtcCIsICJ2YWx1ZXMiLCAicGF5bG9hZCIsICJzcWxFcnJvciIsICJzY3JlZW5Db2xvciIs
ICJwcmludENvbG9yIl0pOworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0QmFja2VuZENvbW1h
bmRzLmpzCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJz
LmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnRzLXdpdGgtb3B0aW9u
YWwtcGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKKworI2lmbmRlZiBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzX2gK
KyNkZWZpbmUgSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVyc19oCisKKyNpZiBFTkFCTEUo
SU5TUEVDVE9SKQorCisjaW5jbHVkZSAiSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5oIgorI2lu
Y2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUg
PHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25h
bWVzcGFjZSBJbnNwZWN0b3IgeworCit0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKworfSAv
LyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorCisj
ZW5kaWYgLy8gIWRlZmluZWQoSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVyc19oKQorIyMj
IEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2lu
IEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNv
bgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2NvZGVnZW4vZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNo
ZXJzLmgiCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSA8aW5zcGVjdG9yL0lu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oPgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JW
YWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNw
ZWN0b3IgeworCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFC
TEUoSU5TUEVDVE9SKQorCisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0
Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRj
aGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9w
dGlvbmFsLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisKKyNpZm5kZWYgSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hl
cnNfaAorI2RlZmluZSBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVyc19oCisKKyNpZiBF
TkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSAiSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5o
IgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4KKyNpbmNs
dWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQ
dHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3Bl
Y3RvciB7CisKKworCisjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKK2NsYXNzIEluc3BlY3RvckRh
dGFiYXNlRnJvbnRlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICBJbnNwZWN0b3JEYXRhYmFz
ZUZyb250ZW5kRGlzcGF0Y2hlcihJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZy
b250ZW5kQ2hhbm5lbCkgOiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbChpbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwpIHsgfQorICAgIHZvaWQgZGlkRXhlY3V0ZU9wdGlvbmFsUGFyYW1ldGVycyhQ
YXNzUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5PFN0cmluZz4+IGNvbHVtbk5h
bWVzLCBjb25zdCBTdHJpbmcqIGNvbnN0IG5vdGVzLCBjb25zdCBkb3VibGUqIGNvbnN0IHRpbWVz
dGFtcCwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gdmFsdWVzLCBQYXNz
UmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+IHBheWxvYWQsIFBhc3NSZWZQdHI8SW5z
cGVjdG9yOjpUeXBlQnVpbGRlcjo6RGF0YWJhc2U6OkVycm9yPiBzcWxFcnJvciwgY29uc3QgSW5z
cGVjdG9yOjpUeXBlQnVpbGRlcjo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMqIGNvbnN0IHNjcmVl
bkNvbG9yLCBjb25zdCBTdHJpbmcqIGNvbnN0IHByaW50Q29sb3IpOworICAgIHZvaWQgZGlkRXhl
Y3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRl
cjo6QXJyYXk8U3RyaW5nPj4gY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgbm90ZXMsIGRvdWJs
ZSB0aW1lc3RhbXAsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IHZhbHVl
cywgUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiBwYXlsb2FkLCBQYXNzUmVm
UHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkRhdGFiYXNlOjpFcnJvcj4gc3FsRXJyb3IsIGNv
bnN0IEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzJiBzY3Jl
ZW5Db2xvciwgY29uc3QgU3RyaW5nJiBwcmludENvbG9yKTsKK3ByaXZhdGU6CisgICAgSW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKK307CisjZW5k
aWYgLy8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisK
KyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorCisjZW5kaWYgLy8gIWRlZmluZWQoSW5zcGVj
dG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnNfaCkKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVz
dEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdEZy
b250ZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgorCisjaWYgRU5BQkxF
KElOU1BFQ1RPUikKKworI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNl
IEluc3BlY3RvciB7CisKKyNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQordm9pZCBJbnNwZWN0b3JE
YXRhYmFzZUZyb250ZW5kRGlzcGF0Y2hlcjo6ZGlkRXhlY3V0ZU9wdGlvbmFsUGFyYW1ldGVycyhQ
YXNzUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5PFN0cmluZz4+IGNvbHVtbk5h
bWVzLCBjb25zdCBTdHJpbmcqIGNvbnN0IG5vdGVzLCBjb25zdCBkb3VibGUqIGNvbnN0IHRpbWVz
dGFtcCwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gdmFsdWVzLCBQYXNz
UmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+IHBheWxvYWQsIFBhc3NSZWZQdHI8SW5z
cGVjdG9yOjpUeXBlQnVpbGRlcjo6RGF0YWJhc2U6OkVycm9yPiBzcWxFcnJvciwgY29uc3QgSW5z
cGVjdG9yOjpUeXBlQnVpbGRlcjo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMqIGNvbnN0IHNjcmVl
bkNvbG9yLCBjb25zdCBTdHJpbmcqIGNvbnN0IHByaW50Q29sb3IpCit7CisgICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4ganNvbk1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwor
ICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJtZXRob2QiKSwgQVNDSUlM
aXRlcmFsKCJEYXRhYmFzZS5kaWRFeGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJzIikpOworICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3Jl
YXRlKCk7CisgICAgaWYgKGNvbHVtbk5hbWVzKQorICAgICAgICBwYXJhbXNPYmplY3QtPnNldEFy
cmF5KEFTQ0lJTGl0ZXJhbCgiY29sdW1uTmFtZXMiKSwgY29sdW1uTmFtZXMpOworICAgIGlmIChu
b3RlcykKKyAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJub3Rl
cyIpLCAqbm90ZXMpOworICAgIGlmICh0aW1lc3RhbXApCisgICAgICAgIHBhcmFtc09iamVjdC0+
c2V0TnVtYmVyKEFTQ0lJTGl0ZXJhbCgidGltZXN0YW1wIiksICp0aW1lc3RhbXApOworICAgIGlm
ICh2YWx1ZXMpCisgICAgICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgi
dmFsdWVzIiksIHZhbHVlcyk7CisgICAgaWYgKHBheWxvYWQpCisgICAgICAgIHBhcmFtc09iamVj
dC0+c2V0VmFsdWUoQVNDSUlMaXRlcmFsKCJwYXlsb2FkIiksICpwYXlsb2FkKTsKKyAgICBpZiAo
c3FsRXJyb3IpCisgICAgICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgi
c3FsRXJyb3IiKSwgc3FsRXJyb3IpOworICAgIGlmIChzY3JlZW5Db2xvcikKKyAgICAgICAgcGFy
YW1zT2JqZWN0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJzY3JlZW5Db2xvciIpLCAqc2NyZWVu
Q29sb3IpOworICAgIGlmIChwcmludENvbG9yKQorICAgICAgICBwYXJhbXNPYmplY3QtPnNldFN0
cmluZyhBU0NJSUxpdGVyYWwoInByaW50Q29sb3IiKSwgKnByaW50Q29sb3IpOworICAgIGpzb25N
ZXNzYWdlLT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJwYXJhbXMiKSwgcGFyYW1zT2JqZWN0KTsK
KworICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQo
anNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKK30KKwordm9pZCBJbnNwZWN0b3JEYXRhYmFz
ZUZyb250ZW5kRGlzcGF0Y2hlcjo6ZGlkRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKFBhc3NS
ZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk8U3RyaW5nPj4gY29sdW1uTmFtZXMs
IGNvbnN0IFN0cmluZyYgbm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIFBhc3NSZWZQdHI8SW5zcGVj
dG9yOjpJbnNwZWN0b3JPYmplY3Q+IHZhbHVlcywgUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3Bl
Y3RvclZhbHVlPiBwYXlsb2FkLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkRh
dGFiYXNlOjpFcnJvcj4gc3FsRXJyb3IsIGNvbnN0IEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkRh
dGFiYXNlOjpQcmltYXJ5Q29sb3JzJiBzY3JlZW5Db2xvciwgY29uc3QgU3RyaW5nJiBwcmludENv
bG9yKQoreworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGpzb25NZXNzYWdlID0gSW5zcGVj
dG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKEFTQ0lJTGl0
ZXJhbCgibWV0aG9kIiksIEFTQ0lJTGl0ZXJhbCgiRGF0YWJhc2UuZGlkRXhlY3V0ZU5vT3B0aW9u
YWxQYXJhbWV0ZXJzIikpOworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVj
dCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgcGFyYW1zT2JqZWN0LT5zZXRBcnJh
eShBU0NJSUxpdGVyYWwoImNvbHVtbk5hbWVzIiksIGNvbHVtbk5hbWVzKTsKKyAgICBwYXJhbXNP
YmplY3QtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoIm5vdGVzIiksIG5vdGVzKTsKKyAgICBwYXJh
bXNPYmplY3QtPnNldE51bWJlcihBU0NJSUxpdGVyYWwoInRpbWVzdGFtcCIpLCB0aW1lc3RhbXAp
OworICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgidmFsdWVzIiksIHZh
bHVlcyk7CisgICAgcGFyYW1zT2JqZWN0LT5zZXRWYWx1ZShBU0NJSUxpdGVyYWwoInBheWxvYWQi
KSwgcGF5bG9hZCk7CisgICAgcGFyYW1zT2JqZWN0LT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJz
cWxFcnJvciIpLCBzcWxFcnJvcik7CisgICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoQVNDSUlM
aXRlcmFsKCJzY3JlZW5Db2xvciIpLCBzY3JlZW5Db2xvcik7CisgICAgcGFyYW1zT2JqZWN0LT5z
ZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJwcmludENvbG9yIiksIHByaW50Q29sb3IpOworICAgIGpz
b25NZXNzYWdlLT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJwYXJhbXMiKSwgcGFyYW1zT2JqZWN0
KTsKKworICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRl
bmQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKK30KKyNlbmRpZiAvLyBFTkFCTEUoU1FM
X0RBVEFCQVNFKQorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJM
RShJTlNQRUNUT1IpCisKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0
Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmgK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnRzLXdpdGgtb3B0aW9uYWwt
cGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKKworI2lmbmRlZiBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzX2gKKyNkZWZpbmUg
SW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVyc19oCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisj
aW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckpTVHlwZUJ1aWxkZXJzLmg+CisjaW5jbHVkZSA8
aW5zcGVjdG9yL0luc3BlY3RvclR5cGVCdWlsZGVyLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlv
bnMuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9y
IHsKKworCisKK25hbWVzcGFjZSBUeXBlQnVpbGRlciB7CisKKy8vIEZvcndhcmQgZGVjbGFyYXRp
b25zLgorI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCituYW1lc3BhY2UgRGF0YWJhc2UgeworY2xh
c3MgRXJyb3I7Cit9IC8vIERhdGFiYXNlCisjZW5kaWYgLy8gRU5BQkxFKFNRTF9EQVRBQkFTRSkK
Ky8vIEVuZCBvZiBmb3J3YXJkIGRlY2xhcmF0aW9ucy4KKworCisvLyBUeXBlZGVmcy4KKyNpZiBF
TkFCTEUoU1FMX0RBVEFCQVNFKQorbmFtZXNwYWNlIERhdGFiYXNlIHsKKy8qIFVuaXF1ZSBpZGVu
dGlmaWVyIG9mIERhdGFiYXNlIG9iamVjdC4gKi8KK3R5cGVkZWYgU3RyaW5nIERhdGFiYXNlSWQ7
CisKK3R5cGVkZWYgU3RyaW5nIFByaW1hcnlDb2xvcnM7Cit9IC8vIERhdGFiYXNlCisjZW5kaWYg
Ly8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKKy8vIEVuZCBvZiB0eXBlZGVmcy4KKworU3RyaW5nIGdl
dFRlc3RFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
IFN0cmluZyBnZXRUZXN0RW51bUNvbnN0YW50VmFsdWUoVCBlbnVtVmFsdWUpCit7CisgICAgcmV0
dXJuIGdldFRlc3RFbnVtQ29uc3RhbnRWYWx1ZShzdGF0aWNfY2FzdDxpbnQ+KGVudW1WYWx1ZSkp
OworfQorCisjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKK25hbWVzcGFjZSBEYXRhYmFzZSB7Cisv
KiBEYXRhYmFzZSBlcnJvci4gKi8KK2NsYXNzIEVycm9yIDogcHVibGljIEluc3BlY3Rvcjo6SW5z
cGVjdG9yT2JqZWN0QmFzZSB7CitwdWJsaWM6CisgICAgZW51bSB7CisgICAgICAgIE5vRmllbGRz
U2V0ID0gMCwKKyAgICAgICAgTWVzc2FnZVNldCA9IDEgPDwgMCwKKyAgICAgICAgQ29kZVNldCA9
IDEgPDwgMSwKKyAgICAgICAgQWxsRmllbGRzU2V0ID0gKE1lc3NhZ2VTZXQgfCBDb2RlU2V0KQor
ICAgIH07CisKKyAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CisgICAgY2xhc3MgQnVpbGRlciB7Cisg
ICAgcHJpdmF0ZToKKyAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBt
X3Jlc3VsdDsKKworICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNU
RVA+JiBjYXN0U3RhdGUoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJw
cmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CisgICAgICAgIH0KKworICAg
ICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8LypFcnJvciovSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmpl
Y3Q+IHB0cikKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0g
Tm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CisgICAgICAg
ICAgICBtX3Jlc3VsdCA9IHB0cjsKKyAgICAgICAgfQorICAgICAgICBmcmllbmQgY2xhc3MgRXJy
b3I7CisgICAgcHVibGljOgorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBNZXNzYWdlU2V0PiYg
c2V0TWVzc2FnZShjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBD
T01QSUxFX0FTU0VSVCghKFNUQVRFICYgTWVzc2FnZVNldCksIHByb3BlcnR5X21lc3NhZ2VfYWxy
ZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwo
Im1lc3NhZ2UiKSwgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxNZXNzYWdl
U2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IENvZGVTZXQ+JiBz
ZXRDb2RlKGludCB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
IShTVEFURSAmIENvZGVTZXQpLCBwcm9wZXJ0eV9jb2RlX2FscmVhZHlfc2V0KTsKKyAgICAgICAg
ICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoQVNDSUlMaXRlcmFsKCJjb2RlIiksIHZhbHVlKTsKKyAg
ICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q29kZVNldD4oKTsKKyAgICAgICAgfQorCisgICAg
ICAgIG9wZXJhdG9yIFJlZlB0cjxFcnJvcj4mICgpCisgICAgICAgIHsKKyAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7
CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoRXJyb3IpID09IHNpemVvZihJbnNw
ZWN0b3I6Okluc3BlY3Rvck9iamVjdCksIGNhbm5vdF9jYXN0KTsKKyAgICAgICAgICAgIHJldHVy
biAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8RXJyb3I+Kj4oJm1fcmVzdWx0KTsKKyAgICAgICAg
fQorCisgICAgICAgIFBhc3NSZWZQdHI8RXJyb3I+IHJlbGVhc2UoKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gUmVmUHRyPEVycm9yPigqdGhpcykucmVsZWFzZSgpOworICAgICAgICB9
CisgICAgfTsKKworICAgIC8qCisgICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgorICAgICAq
IFJlZlB0cjxFcnJvcj4gcmVzdWx0ID0gRXJyb3I6OmNyZWF0ZSgpCisgICAgICogICAgIC5zZXRN
ZXNzYWdlKC4uLikKKyAgICAgKiAgICAgLnNldENvZGUoLi4uKTsKKyAgICAgKi8KKyAgICBzdGF0
aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBC
dWlsZGVyPE5vRmllbGRzU2V0PihJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkp
OworICAgIH0KKyAgICB0eXBlZGVmIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlN0cnVjdEl0ZW1U
cmFpdHMgSXRlbVRyYWl0czsKK307CisKK30gLy8gRGF0YWJhc2UKKyNlbmRpZiAvLyBFTkFCTEUo
U1FMX0RBVEFCQVNFKQorCisKKworfSAvLyBuYW1lc3BhY2UgVHlwZUJ1aWxkZXIKKworfSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorCisjZW5k
aWYgLy8gIWRlZmluZWQoSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVyc19oKQorIyMjIEVuZCBGaWxl
OiBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IEluc3BlY3Rv
clRlc3RUeXBlQnVpbGRlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmgiCisKKyNpZiBFTkFCTEUoSU5TUEVD
VE9SKQorCisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVj
dG9yIHsKKworbmFtZXNwYWNlIFR5cGVCdWlsZGVyIHsKKworc3RhdGljIGNvbnN0IGNoYXIqIGNv
bnN0IGVudW1fY29uc3RhbnRfdmFsdWVzW10gPSB7Cit9OworCitTdHJpbmcgZ2V0VGVzdEVudW1D
b25zdGFudFZhbHVlKGludCBjb2RlKSB7CisgICAgcmV0dXJuIGVudW1fY29uc3RhbnRfdmFsdWVz
W2NvZGVdOworfQorCisKKworfSAvLyBuYW1lc3BhY2UgVHlwZUJ1aWxkZXIKKworfSAvLyBuYW1l
c3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorCisjIyMgRW5k
IEZpbGU6IEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1k
dXBsaWNhdGUtdHlwZS1kZWNsYXJhdGlvbnMuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWR1cGxpY2F0ZS10
eXBlLWRlY2xhcmF0aW9ucy5qc29uLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ0N2NkZjhlMjhlODU2NjEw
YTI2ZjgxNTQ5NDNmMzZjZjhiN2QxZjQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1kdXBsaWNh
dGUtdHlwZS1kZWNsYXJhdGlvbnMuanNvbi1lcnJvcgpAQCAtMCwwICsxIEBACitFUlJPUjogRHVw
bGljYXRlIHR5cGUgZGVjbGFyYXRpb246IFJ1bnRpbWUuUmVtb3RlT2JqZWN0SWQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3Rl
ZC9mYWlsLW9uLWVudW0td2l0aC1uby12YWx1ZXMuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWVudW0td2l0
aC1uby12YWx1ZXMuanNvbi1lcnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yNjU1YzJiOTA3ZTAyZTNlODRjYjNm
NjZmYTFmNThlMTNkOWI3YjUzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tZW51bS13aXRoLW5v
LXZhbHVlcy5qc29uLWVycm9yCkBAIC0wLDAgKzEgQEAKK0VSUk9SOiBUeXBlIHJlZmVyZW5jZSB3
aXRoIGVudW0gdmFsdWVzIG11c3QgaGF2ZSBhdCBsZWFzdCBvbmUgZW51bSB2YWx1ZS4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBl
Y3RlZC9mYWlsLW9uLXN0cmluZy10eXBlZC1vcHRpb25hbC1wYXJhbWV0ZXItZmxhZy5qc29uLWVy
cm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVj
dGVkL2ZhaWwtb24tc3RyaW5nLXR5cGVkLW9wdGlvbmFsLXBhcmFtZXRlci1mbGFnLmpzb24tZXJy
b3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uOTdiMmFmMGU0N2U5M2Y4MDQ5Nzk0NDQ3MjU3ZGYzMjcyM2YwNjgyNAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLXN0cmluZy10eXBlZC1vcHRpb25hbC1wYXJhbWV0ZXIt
ZmxhZy5qc29uLWVycm9yCkBAIC0wLDAgKzEgQEAKK0VSUk9SOiBUaGUgJ29wdGlvbmFsJyBmbGFn
IGZvciBhIHBhcmFtZXRlciBtdXN0IGJlIGEgYm9vbGVhbiBsaXRlcmFsLgpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2Zh
aWwtb24tc3RyaW5nLXR5cGVkLW9wdGlvbmFsLXR5cGUtbWVtYmVyLmpzb24tZXJyb3IgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1v
bi1zdHJpbmctdHlwZWQtb3B0aW9uYWwtdHlwZS1tZW1iZXIuanNvbi1lcnJvcgpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li44NmRmMzc1MGMxYTc3OTc4OTNjYmZiN2UyODc2ZDkyY2NlY2MyZjkxCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVj
dGVkL2ZhaWwtb24tc3RyaW5nLXR5cGVkLW9wdGlvbmFsLXR5cGUtbWVtYmVyLmpzb24tZXJyb3IK
QEAgLTAsMCArMSBAQAorRVJST1I6IFRoZSAnb3B0aW9uYWwnIGZsYWcgZm9yIGEgdHlwZSBtZW1i
ZXIgbXVzdCBiZSBhIGJvb2xlYW4gbGl0ZXJhbC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLXR5cGUtZGVj
bGFyYXRpb24tdXNpbmctdHlwZS1yZWZlcmVuY2UuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLXR5cGUtZGVj
bGFyYXRpb24tdXNpbmctdHlwZS1yZWZlcmVuY2UuanNvbi1lcnJvcgpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40MmY1
NzUzYTQzOTYxNDRlYjU2NmM1YzU5NjhkMDQ5YWVjNjE4MmRiCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2Zh
aWwtb24tdHlwZS1kZWNsYXJhdGlvbi11c2luZy10eXBlLXJlZmVyZW5jZS5qc29uLWVycm9yCkBA
IC0wLDAgKzEgQEAKK0VSUk9SOiBUeXBlIHJlZmVyZW5jZSBjYW5ub3QgaGF2ZSBib3RoICd0eXBl
JyBhbmQgJyRyZWYnIGtleXMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi10eXBlLXdpdGgtbG93ZXJjYXNl
LW5hbWUuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLXR5cGUtd2l0aC1sb3dlcmNhc2UtbmFtZS5qc29uLWVy
cm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjRlNDYyMjUwYzBhZjgwYTE3OWUwNmFhZjQ1ZDIxZWI1NDZkYjg4MTQK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi10eXBlLXdpdGgtbG93ZXJjYXNlLW5hbWUuanNvbi1l
cnJvcgpAQCAtMCwwICsxIEBACitFUlJPUjogVHlwZXMgbXVzdCBiZWdpbiB3aXRoIGFuIHVwcGVy
Y2FzZSBjaGFyYWN0ZXIuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi11bmtub3duLXR5cGUtcmVmZXJlbmNl
LWluLXR5cGUtZGVjbGFyYXRpb24uanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZl
cmVuY2UtaW4tdHlwZS1kZWNsYXJhdGlvbi5qc29uLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQzYzc4MmQ4
OWRiNTY1ZDcyNGU3NTQwZTMyZWRjZmRiZDc5YTJmNzMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1v
bi11bmtub3duLXR5cGUtcmVmZXJlbmNlLWluLXR5cGUtZGVjbGFyYXRpb24uanNvbi1lcnJvcgpA
QCAtMCwwICsxIEBACitFUlJPUjogTG9va3VwIGZhaWxlZCBmb3IgdHlwZSByZWZlcmVuY2U6IGRy
YWdvbiAocmVmZXJlbmNlZCBmcm9tIGRvbWFpbjogUnVudGltZSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9u
LXVua25vd24tdHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1tZW1iZXIuanNvbi1lcnJvciBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9u
LXVua25vd24tdHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1tZW1iZXIuanNvbi1lcnJvcgpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5mYWY2NjcyY2JlZjA5NjMwZmQ5YmU4ZmZhZGFjZTEyYzU2MTFjY2E4Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4
cGVjdGVkL2ZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVyZW5jZS1pbi10eXBlLW1lbWJlci5qc29u
LWVycm9yCkBAIC0wLDAgKzEgQEAKK0VSUk9SOiBMb29rdXAgZmFpbGVkIGZvciB0eXBlIHJlZmVy
ZW5jZTogQ29sb3IgKHJlZmVyZW5jZWQgZnJvbSBkb21haW46IEZhbnRhc3kpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQv
c2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvc2FtZS10eXBlLWlkLWRp
ZmZlcmVudC1kb21haW4uanNvbi1yZXN1bHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWFmZGM1ODc5MTYxZDg5ZmM4
NzIwM2JmNjkyMDM2MWFkYzliYWI5MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9zYW1lLXR5cGUtaWQtZGlm
ZmVyZW50LWRvbWFpbi5qc29uLXJlc3VsdApAQCAtMCwwICsxLDM3MCBAQAorIyMjIEJlZ2luIEZp
bGU6IEluc3BlY3RvclRlc3RCYWNrZW5kQ29tbWFuZHMuanMKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbgorLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVn
ZW4vZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisjIyMgRW5kIEZpbGU6
IEluc3BlY3RvclRlc3RCYWNrZW5kQ29tbWFuZHMuanMKKworIyMjIEJlZ2luIEZpbGU6IEluc3Bl
Y3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCisvLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2lmbmRlZiBJbnNwZWN0b3JU
ZXN0QmFja2VuZERpc3BhdGNoZXJzX2gKKyNkZWZpbmUgSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNw
YXRjaGVyc19oCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSAiSW5zcGVjdG9y
VGVzdFR5cGVCdWlsZGVycy5oIgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0eXBlZGVmIFN0
cmluZyBFcnJvclN0cmluZzsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAv
LyBFTkFCTEUoSU5TUEVDVE9SKQorCisjZW5kaWYgLy8gIWRlZmluZWQoSW5zcGVjdG9yVGVzdEJh
Y2tlbmREaXNwYXRjaGVyc19oKQorIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0QmFja2VuZERp
c3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0
Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNhbWUtdHlwZS1p
ZC1kaWZmZXJlbnQtZG9tYWluLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW5zcGVj
dG9yVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKwor
I2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4KKyNpbmNsdWRl
IDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3Bl
Y3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKworIyMjIEVuZCBGaWxlOiBJbnNw
ZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogSW5zcGVj
dG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCisvLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2lmbmRlZiBJbnNwZWN0b3JU
ZXN0RnJvbnRlbmREaXNwYXRjaGVyc19oCisjZGVmaW5lIEluc3BlY3RvclRlc3RGcm9udGVuZERp
c3BhdGNoZXJzX2gKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRlICJJbnNwZWN0
b3JUZXN0VHlwZUJ1aWxkZXJzLmgiCisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckZyb250
ZW5kQ2hhbm5lbC5oPgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4KKyNp
bmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rv
cgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKworI2VuZGlmIC8vICFkZWZpbmVkKElu
c3BlY3RvclRlc3RGcm9udGVuZERpc3BhdGNoZXJzX2gpCisjIyMgRW5kIEZpbGU6IEluc3BlY3Rv
clRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRl
c3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
Ky8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCisvLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkluc3BlY3RvclRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCisKKyNpZiBFTkFC
TEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBF
TkFCTEUoSU5TUEVDVE9SKQorCisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RGcm9udGVuZERp
c3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVy
cy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNhbWUtdHlwZS1pZC1kaWZm
ZXJlbnQtZG9tYWluLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQorCisjaWZuZGVmIEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnNfaAorI2RlZmlu
ZSBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzX2gKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisK
KyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9ySlNUeXBlQnVpbGRlcnMuaD4KKyNpbmNsdWRl
IDxpbnNwZWN0b3IvSW5zcGVjdG9yVHlwZUJ1aWxkZXIuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0
aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0
b3IgeworCisKKworbmFtZXNwYWNlIFR5cGVCdWlsZGVyIHsKKworCisKKy8vIFR5cGVkZWZzLgor
bmFtZXNwYWNlIFJ1bnRpbWUgeworLyogVW5pcXVlIG9iamVjdCBpZGVudGlmaWVyLiAqLwordHlw
ZWRlZiBTdHJpbmcgUmVtb3RlT2JqZWN0SWQ7Cit9IC8vIFJ1bnRpbWUKKworbmFtZXNwYWNlIFJ1
bnRpbWUyIHsKKy8qIFVuaXF1ZSBvYmplY3QgaWRlbnRpZmllci4gKi8KK3R5cGVkZWYgU3RyaW5n
IFJlbW90ZU9iamVjdElkOworfSAvLyBSdW50aW1lMgorLy8gRW5kIG9mIHR5cGVkZWZzLgorCitT
dHJpbmcgZ2V0VGVzdEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKTsKKwordGVtcGxhdGU8dHlw
ZW5hbWUgVD4gU3RyaW5nIGdldFRlc3RFbnVtQ29uc3RhbnRWYWx1ZShUIGVudW1WYWx1ZSkKK3sK
KyAgICByZXR1cm4gZ2V0VGVzdEVudW1Db25zdGFudFZhbHVlKHN0YXRpY19jYXN0PGludD4oZW51
bVZhbHVlKSk7Cit9CisKKworCit9IC8vIG5hbWVzcGFjZSBUeXBlQnVpbGRlcgorCit9IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyNlbmRp
ZiAvLyAhZGVmaW5lZChJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzX2gpCisjIyMgRW5kIEZpbGU6
IEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9y
VGVzdFR5cGVCdWlsZGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
c2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmgiCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9S
KQorCisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9y
IHsKKworbmFtZXNwYWNlIFR5cGVCdWlsZGVyIHsKKworc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0
IGVudW1fY29uc3RhbnRfdmFsdWVzW10gPSB7Cit9OworCitTdHJpbmcgZ2V0VGVzdEVudW1Db25z
dGFudFZhbHVlKGludCBjb2RlKSB7CisgICAgcmV0dXJuIGVudW1fY29uc3RhbnRfdmFsdWVzW2Nv
ZGVdOworfQorCisKKworfSAvLyBuYW1lc3BhY2UgVHlwZUJ1aWxkZXIKKworfSAvLyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorCisjIyMgRW5kIEZp
bGU6IEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvc2hhZG93ZWQtb3B0
aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3NoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0
dGVycy5qc29uLXJlc3VsdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lMjAzN2RjMzcyYjVjZDhlZDkyYWY1NmQ0MGU1
ZDFmOGIzZmIyNmM1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3NoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0
dGVycy5qc29uLXJlc3VsdApAQCAtMCwwICsxLDQ0NiBAQAorIyMjIEJlZ2luIEZpbGU6IEluc3Bl
Y3RvclRlc3RCYWNrZW5kQ29tbWFuZHMuanMKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorIyMjIEVuZCBGaWxlOiBJbnNwZWN0
b3JUZXN0QmFja2VuZENvbW1hbmRzLmpzCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0
QmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
c2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaWZuZGVmIEluc3BlY3RvclRlc3RCYWNr
ZW5kRGlzcGF0Y2hlcnNfaAorI2RlZmluZSBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJz
X2gKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRlICJJbnNwZWN0b3JUZXN0VHlw
ZUJ1aWxkZXJzLmgiCisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3R5cGVkZWYgU3RyaW5nIEVy
cm9yU3RyaW5nOworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJM
RShJTlNQRUNUT1IpCisKKyNlbmRpZiAvLyAhZGVmaW5lZChJbnNwZWN0b3JUZXN0QmFja2VuZERp
c3BhdGNoZXJzX2gpCisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hl
cnMuaAorCisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVycy5j
cHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93ZWQtb3B0aW9uYWwt
dHlwZS1zZXR0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yVGVz
dEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1
ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4KKyNpbmNsdWRlIDxpbnNw
ZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgor
CituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgor
CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JU
ZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVz
dEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBzaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpZm5kZWYgSW5zcGVjdG9yVGVzdEZy
b250ZW5kRGlzcGF0Y2hlcnNfaAorI2RlZmluZSBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRj
aGVyc19oCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSAiSW5zcGVjdG9yVGVz
dFR5cGVCdWlsZGVycy5oIgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwuaD4KKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW5jbHVk
ZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKwor
bmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKwor
I2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyNlbmRpZiAvLyAhZGVmaW5lZChJbnNwZWN0
b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVyc19oKQorIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0
RnJvbnRlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0RnJv
bnRlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
c2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKKworI2lmIEVOQUJMRShJ
TlNQRUNUT1IpCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJ
bnNwZWN0b3IgeworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJM
RShJTlNQRUNUT1IpCisKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0
Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmgK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlw
ZS1zZXR0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQorCisjaWZuZGVmIEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnNfaAorI2RlZmluZSBJ
bnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzX2gKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNp
bmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9ySlNUeXBlQnVpbGRlcnMuaD4KKyNpbmNsdWRlIDxp
bnNwZWN0b3IvSW5zcGVjdG9yVHlwZUJ1aWxkZXIuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9u
cy5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3Ig
eworCisKKworbmFtZXNwYWNlIFR5cGVCdWlsZGVyIHsKKworLy8gRm9yd2FyZCBkZWNsYXJhdGlv
bnMuCituYW1lc3BhY2UgUnVudGltZSB7CitjbGFzcyBLZXlQYXRoOworfSAvLyBSdW50aW1lCisv
LyBFbmQgb2YgZm9yd2FyZCBkZWNsYXJhdGlvbnMuCisKKworCisKK1N0cmluZyBnZXRUZXN0RW51
bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBTdHJpbmcg
Z2V0VGVzdEVudW1Db25zdGFudFZhbHVlKFQgZW51bVZhbHVlKQoreworICAgIHJldHVybiBnZXRU
ZXN0RW51bUNvbnN0YW50VmFsdWUoc3RhdGljX2Nhc3Q8aW50PihlbnVtVmFsdWUpKTsKK30KKwor
bmFtZXNwYWNlIFJ1bnRpbWUgeworLyogS2V5IHBhdGguICovCitjbGFzcyBLZXlQYXRoIDogcHVi
bGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0QmFzZSB7CitwdWJsaWM6CisgICAgLy8gTmFt
ZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAndHlwZScgd2hpbGUgZ2VuZXJhdGluZyBLZXlQYXRoLgor
ICAgIGVudW0gY2xhc3MgVHlwZSB7CisgICAgICAgIE51bGwgPSAwLAorICAgICAgICBTdHJpbmcg
PSAxLAorICAgICAgICBBcnJheSA9IDIsCisgICAgfTsgLy8gZW51bSBjbGFzcyBUeXBlCisgICAg
ZW51bSB7CisgICAgICAgIE5vRmllbGRzU2V0ID0gMCwKKyAgICAgICAgVHlwZVNldCA9IDEgPDwg
MCwKKyAgICAgICAgQWxsRmllbGRzU2V0ID0gKFR5cGVTZXQpCisgICAgfTsKKworICAgIHRlbXBs
YXRlPGludCBTVEFURT4KKyAgICBjbGFzcyBCdWlsZGVyIHsKKyAgICBwcml2YXRlOgorICAgICAg
ICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OworCisgICAgICAg
IHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNU
QVRFIHwgU1RFUD4qPih0aGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXIoUGFzc1Jl
ZlB0cjwvKktleVBhdGgqL0luc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBwdHIpCisgICAgICAg
IHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWls
ZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOworICAgICAgICAgICAgbV9yZXN1bHQgPSBw
dHI7CisgICAgICAgIH0KKyAgICAgICAgZnJpZW5kIGNsYXNzIEtleVBhdGg7CisgICAgcHVibGlj
OgorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBUeXBlU2V0PiYgc2V0VHlwZShUeXBlIHZhbHVl
KQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVHlwZVNl
dCksIHByb3BlcnR5X3R5cGVfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNl
dFN0cmluZyhBU0NJSUxpdGVyYWwoInR5cGUiKSwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Z2V0
VGVzdEVudW1Db25zdGFudFZhbHVlKHN0YXRpY19jYXN0PGludD4odmFsdWUpKSk7CisgICAgICAg
ICAgICByZXR1cm4gY2FzdFN0YXRlPFR5cGVTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBv
cGVyYXRvciBSZWZQdHI8S2V5UGF0aD4mICgpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7Cisg
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoS2V5UGF0aCkgPT0gc2l6ZW9mKEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yT2JqZWN0KSwgY2Fubm90X2Nhc3QpOworICAgICAgICAgICAgcmV0dXJu
ICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxLZXlQYXRoPio+KCZtX3Jlc3VsdCk7CisgICAgICAg
IH0KKworICAgICAgICBQYXNzUmVmUHRyPEtleVBhdGg+IHJlbGVhc2UoKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gUmVmUHRyPEtleVBhdGg+KCp0aGlzKS5yZWxlYXNlKCk7CisgICAg
ICAgIH0KKyAgICB9OworCisgICAgLyoKKyAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6Cisg
ICAgICogUmVmUHRyPEtleVBhdGg+IHJlc3VsdCA9IEtleVBhdGg6OmNyZWF0ZSgpCisgICAgICog
ICAgIC5zZXRUeXBlKC4uLik7CisgICAgICovCisgICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNT
ZXQ+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4o
SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpKTsKKyAgICB9CisgICAgdHlwZWRl
ZiBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpTdHJ1Y3RJdGVtVHJhaXRzIEl0ZW1UcmFpdHM7CisK
KyAgICB2b2lkIHNldFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgIHsKKyAgICAgICAg
SW5zcGVjdG9yT2JqZWN0QmFzZTo6c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgic3RyaW5nIiksIHZh
bHVlKTsKKyAgICB9CisKKyAgICB2b2lkIHNldEFycmF5KFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpU
eXBlQnVpbGRlcjo6QXJyYXk8U3RyaW5nPj4gdmFsdWUpCisgICAgeworICAgICAgICBJbnNwZWN0
b3JPYmplY3RCYXNlOjpzZXRBcnJheShBU0NJSUxpdGVyYWwoImFycmF5IiksIHZhbHVlKTsKKyAg
ICB9Cit9OworCit9IC8vIFJ1bnRpbWUKKworCisKK30gLy8gbmFtZXNwYWNlIFR5cGVCdWlsZGVy
CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RP
UikKKworI2VuZGlmIC8vICFkZWZpbmVkKEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnNfaCkKKyMj
IyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5oCisKKyMjIyBCZWdpbiBGaWxl
OiBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSBzaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbgorLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4v
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmgiCisKKyNpZiBFTkFC
TEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKKworbmFtZXNwYWNlIFR5cGVCdWlsZGVyIHsKKworc3RhdGljIGNvbnN0
IGNoYXIqIGNvbnN0IGVudW1fY29uc3RhbnRfdmFsdWVzW10gPSB7CisgICAgIm51bGwiLAorICAg
ICJzdHJpbmciLAorICAgICJhcnJheSIsCit9OworCitTdHJpbmcgZ2V0VGVzdEVudW1Db25zdGFu
dFZhbHVlKGludCBjb2RlKSB7CisgICAgcmV0dXJuIGVudW1fY29uc3RhbnRfdmFsdWVzW2NvZGVd
OworfQorCisKKworfSAvLyBuYW1lc3BhY2UgVHlwZUJ1aWxkZXIKKworfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorCisjIyMgRW5kIEZpbGU6
IEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlv
bi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tYWxp
YXNlZC1wcmltaXRpdmUtdHlwZS5qc29uLXJlc3VsdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45OWFmZTEwNjhiMjI2
MTVlZGZlMTUxZDVjMTcwMmMwYjQxZjk2MTE5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFy
YXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uLXJlc3VsdApAQCAtMCwwICsxLDM2NSBA
QAorIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kQ29tbWFuZHMuanMKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXBy
aW1pdGl2ZS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQorIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0QmFja2VuZENvbW1hbmRzLmpz
CisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2Vk
LXByaW1pdGl2ZS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQorCisjaWZuZGVmIEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnNf
aAorI2RlZmluZSBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzX2gKKworI2lmIEVOQUJM
RShJTlNQRUNUT1IpCisKKyNpbmNsdWRlICJJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmgiCisj
aW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVk
ZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKwor
bmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3R5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCit9
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisK
KyNlbmRpZiAvLyAhZGVmaW5lZChJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzX2gpCisj
IyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVn
aW4gRmlsZTogSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2
ZS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yVGVzdEJhY2tl
bmREaXNwYXRjaGVycy5oIgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUgPGlu
c3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4KKyNpbmNsdWRlIDxpbnNwZWN0b3Iv
SW5zcGVjdG9yVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1l
c3BhY2UgSW5zcGVjdG9yIHsKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5k
aWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0QmFj
a2VuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdEZyb250
ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBl
LWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpZm5kZWYgSW5zcGVjdG9yVGVz
dEZyb250ZW5kRGlzcGF0Y2hlcnNfaAorI2RlZmluZSBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNw
YXRjaGVyc19oCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSAiSW5zcGVjdG9y
VGVzdFR5cGVCdWlsZGVycy5oIgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwuaD4KKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW5j
bHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
KworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
KworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyNlbmRpZiAvLyAhZGVmaW5lZChJbnNw
ZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVyc19oKQorIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JU
ZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0
RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisv
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24KKy8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2Vu
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKKwor
I2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisK
K25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2Vu
ZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdEZy
b250ZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0VHlw
ZUJ1aWxkZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNs
YXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaWZuZGVmIEluc3BlY3RvclRlc3RUeXBl
QnVpbGRlcnNfaAorI2RlZmluZSBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzX2gKKworI2lmIEVO
QUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9ySlNUeXBlQnVp
bGRlcnMuaD4KKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVHlwZUJ1aWxkZXIuaD4KKyNp
bmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisK
K25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworbmFtZXNwYWNlIFR5cGVCdWlsZGVyIHsKKwor
CisKKy8vIFR5cGVkZWZzLgorbmFtZXNwYWNlIFJ1bnRpbWUgeworLyogVW5pcXVlIG9iamVjdCBp
ZGVudGlmaWVyLiAqLwordHlwZWRlZiBpbnQgUmVtb3RlT2JqZWN0SWQ7Cit9IC8vIFJ1bnRpbWUK
Ky8vIEVuZCBvZiB0eXBlZGVmcy4KKworU3RyaW5nIGdldFRlc3RFbnVtQ29uc3RhbnRWYWx1ZShp
bnQgY29kZSk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IFN0cmluZyBnZXRUZXN0RW51bUNvbnN0
YW50VmFsdWUoVCBlbnVtVmFsdWUpCit7CisgICAgcmV0dXJuIGdldFRlc3RFbnVtQ29uc3RhbnRW
YWx1ZShzdGF0aWNfY2FzdDxpbnQ+KGVudW1WYWx1ZSkpOworfQorCisKKworfSAvLyBuYW1lc3Bh
Y2UgVHlwZUJ1aWxkZXIKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBF
TkFCTEUoSU5TUEVDVE9SKQorCisjZW5kaWYgLy8gIWRlZmluZWQoSW5zcGVjdG9yVGVzdFR5cGVC
dWlsZGVyc19oKQorIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmgKKwor
IyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuY3BwCisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRp
dmUtdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkluc3BlY3RvclRlc3RUeXBl
QnVpbGRlcnMuaCIKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCituYW1lc3BhY2UgVHlwZUJ1
aWxkZXIgeworCitzdGF0aWMgY29uc3QgY2hhciogY29uc3QgZW51bV9jb25zdGFudF92YWx1ZXNb
XSA9IHsKK307CisKK1N0cmluZyBnZXRUZXN0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpIHsK
KyAgICByZXR1cm4gZW51bV9jb25zdGFudF92YWx1ZXNbY29kZV07Cit9CisKKworCit9IC8vIG5h
bWVzcGFjZSBUeXBlQnVpbGRlcgorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlm
IC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdFR5cGVC
dWlsZGVycy5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbi1y
ZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhw
ZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24tcmVzdWx0Cm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjQ2M2JmMmI5YTg0ZGRkOWMxYmY1N2ExNjA2NTBjMzRiOGM1NmQ5YWYKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0
ZWQvdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24tcmVzdWx0CkBAIC0wLDAgKzEsMzg4
IEBACisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdEJhY2tlbmRDb21tYW5kcy5qcworLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5
cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisKKy8vIERlYnVnZ2VyLgorSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckVudW0oIkRlYnVnZ2Vy
LlJlYXNvbiIsIHtEaWVkOiAiRGllZCIsIEZhaW50ZWQ6ICJGYWludGVkIiwgSHVuZ3J5OiAiSHVu
Z3J5In0pOworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0QmFja2VuZENvbW1hbmRzLmpzCisK
KyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBl
Lmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQor
CisjaWZuZGVmIEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnNfaAorI2RlZmluZSBJbnNw
ZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzX2gKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisK
KyNpbmNsdWRlICJJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmgiCisjaW5jbHVkZSA8aW5zcGVj
dG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQ
dHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3Bl
Y3RvciB7CisKK3R5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCit9IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyNlbmRpZiAvLyAhZGVm
aW5lZChJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzX2gpCisjIyMgRW5kIEZpbGU6IElu
c3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogSW5zcGVj
dG9yVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywg
MjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaWYgRU5B
QkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwuaD4KKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW5jbHVk
ZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKK30g
Ly8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKwor
IyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorCisjIyMg
QmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNv
bgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2NvZGVnZW4vZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNp
Zm5kZWYgSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnNfaAorI2RlZmluZSBJbnNwZWN0
b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVyc19oCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisj
aW5jbHVkZSAiSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5oIgorI2luY2x1ZGUgPGluc3BlY3Rv
ci9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4KKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVj
dG9yVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCit9IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyNlbmRp
ZiAvLyAhZGVmaW5lZChJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVyc19oKQorIyMjIEVu
ZCBGaWxlOiBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBG
aWxlOiBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24KKy8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9j
b2RlZ2VuL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMu
aCIKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5n
Lmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
KworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9y
VGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JU
ZXN0VHlwZUJ1aWxkZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlw
ZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaWZuZGVmIEluc3BlY3RvclRlc3RUeXBlQnVpbGRl
cnNfaAorI2RlZmluZSBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzX2gKKworI2lmIEVOQUJMRShJ
TlNQRUNUT1IpCisKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9ySlNUeXBlQnVpbGRlcnMu
aD4KKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVHlwZUJ1aWxkZXIuaD4KKyNpbmNsdWRl
IDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisKK25hbWVz
cGFjZSBJbnNwZWN0b3IgeworCisKKworbmFtZXNwYWNlIFR5cGVCdWlsZGVyIHsKKworLy8gRm9y
d2FyZCBkZWNsYXJhdGlvbnMuCituYW1lc3BhY2UgRGVidWdnZXIgeworZW51bSBjbGFzcyBSZWFz
b247Cit9IC8vIERlYnVnZ2VyCisvLyBFbmQgb2YgZm9yd2FyZCBkZWNsYXJhdGlvbnMuCisKKwor
Ly8gVHlwZWRlZnMuCituYW1lc3BhY2UgRGVidWdnZXIgewordHlwZWRlZiBpbnQgQnJlYWtwb2lu
dElkOworfSAvLyBEZWJ1Z2dlcgorCituYW1lc3BhY2UgUnVudGltZSB7Cit0eXBlZGVmIGludCBP
YmplY3RJZDsKK30gLy8gUnVudGltZQorLy8gRW5kIG9mIHR5cGVkZWZzLgorCitTdHJpbmcgZ2V0
VGVzdEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4g
U3RyaW5nIGdldFRlc3RFbnVtQ29uc3RhbnRWYWx1ZShUIGVudW1WYWx1ZSkKK3sKKyAgICByZXR1
cm4gZ2V0VGVzdEVudW1Db25zdGFudFZhbHVlKHN0YXRpY19jYXN0PGludD4oZW51bVZhbHVlKSk7
Cit9CisKK25hbWVzcGFjZSBEZWJ1Z2dlciB7CisvKiAgKi8KK2VudW0gY2xhc3MgUmVhc29uIHsK
KyAgICBEaWVkID0gMCwKKyAgICBGYWludGVkID0gMSwKKyAgICBIdW5ncnkgPSAyLAorfTsgLy8g
ZW51bSBjbGFzcyBSZWFzb24KK30gLy8gRGVidWdnZXIKKworCisKK30gLy8gbmFtZXNwYWNlIFR5
cGVCdWlsZGVyCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxF
KElOU1BFQ1RPUikKKworI2VuZGlmIC8vICFkZWZpbmVkKEluc3BlY3RvclRlc3RUeXBlQnVpbGRl
cnNfaCkKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5oCisKKyMjIyBC
ZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmNwcAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbgorLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2Nv
ZGVnZW4vZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmgiCisKKyNp
ZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCitu
YW1lc3BhY2UgSW5zcGVjdG9yIHsKKworbmFtZXNwYWNlIFR5cGVCdWlsZGVyIHsKKworc3RhdGlj
IGNvbnN0IGNoYXIqIGNvbnN0IGVudW1fY29uc3RhbnRfdmFsdWVzW10gPSB7CisgICAgIkRpZWQi
LAorICAgICJGYWludGVkIiwKKyAgICAiSHVuZ3J5IiwKK307CisKK1N0cmluZyBnZXRUZXN0RW51
bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpIHsKKyAgICByZXR1cm4gZW51bV9jb25zdGFudF92YWx1
ZXNbY29kZV07Cit9CisKKworCit9IC8vIG5hbWVzcGFjZSBUeXBlQnVpbGRlcgorCit9IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyMjIyBF
bmQgRmlsZTogSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5jcHAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRl
Y2xhcmF0aW9uLWVudW0tdHlwZS5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlw
ZS5qc29uLXJlc3VsdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lNWQyZmIwZmU1MTk2NDU2YjdlNTZmMjI2ZTBjYWMy
NjliYjhmN2VjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpz
b24tcmVzdWx0CkBAIC0wLDAgKzEsMzk0IEBACisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVz
dEJhY2tlbmRDb21tYW5kcy5qcworLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0
eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworLy8gUnVudGltZS4KK0luc3BlY3RvckJhY2tlbmQu
cmVnaXN0ZXJFbnVtKCJSdW50aW1lLkZhcm1BbmltYWxzIiwge1BpZ3M6ICJQaWdzIiwgQ293czog
IkNvd3MiLCBDYXRzOiAiQ2F0cyIsIEhlbnM6ICJIZW5zIn0pOworSW5zcGVjdG9yQmFja2VuZC5y
ZWdpc3RlckVudW0oIlJ1bnRpbWUuVHdvTGVnZ2VkQW5pbWFscyIsIHtEdWNrczogIkR1Y2tzIiwg
SGVuczogIkhlbnMiLCBDcm93czogIkNyb3dzIiwgRmxhbWluZ29zOiAiRmxhbWluZ29zIn0pOwor
IyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0QmFja2VuZENvbW1hbmRzLmpzCisKKyMjIyBCZWdp
biBGaWxlOiBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgorLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2Nv
ZGVnZW4vZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpZm5kZWYg
SW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVyc19oCisjZGVmaW5lIEluc3BlY3RvclRlc3RC
YWNrZW5kRGlzcGF0Y2hlcnNfaAorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUg
Ikluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuaCIKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwor
dHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgor
CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKworI2VuZGlmIC8vICFkZWZpbmVkKEluc3Bl
Y3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnNfaCkKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVz
dEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0QmFj
a2VuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0
eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
Ikluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2lmIEVOQUJMRShJTlNQRUNU
T1IpCisKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLmg+Cisj
aW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0
L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCit9IC8vIG5hbWVzcGFj
ZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyMjIyBFbmQgRmls
ZTogSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6
IEluc3BlY3RvclRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgorLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4v
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpZm5kZWYgSW5zcGVj
dG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnNfaAorI2RlZmluZSBJbnNwZWN0b3JUZXN0RnJvbnRl
bmREaXNwYXRjaGVyc19oCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSAiSW5z
cGVjdG9yVGVzdFR5cGVCdWlsZGVycy5oIgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwuaD4KKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+
CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyNlbmRpZiAvLyAhZGVmaW5l
ZChJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVyc19oKQorIyMjIEVuZCBGaWxlOiBJbnNw
ZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0
b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywg
MjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgorCisjaWYgRU5B
QkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNw
YWNlIEluc3BlY3RvciB7CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8g
RU5BQkxFKElOU1BFQ1RPUikKKworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0RnJvbnRlbmRE
aXNwYXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RUeXBlQnVpbGRl
cnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9u
LWVudW0tdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKKworI2lmbmRlZiBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzX2gKKyNkZWZpbmUg
SW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVyc19oCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisj
aW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckpTVHlwZUJ1aWxkZXJzLmg+CisjaW5jbHVkZSA8
aW5zcGVjdG9yL0luc3BlY3RvclR5cGVCdWlsZGVyLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlv
bnMuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9y
IHsKKworCisKK25hbWVzcGFjZSBUeXBlQnVpbGRlciB7CisKKy8vIEZvcndhcmQgZGVjbGFyYXRp
b25zLgorbmFtZXNwYWNlIFJ1bnRpbWUgeworZW51bSBjbGFzcyBGYXJtQW5pbWFsczsKK2VudW0g
Y2xhc3MgVHdvTGVnZ2VkQW5pbWFsczsKK30gLy8gUnVudGltZQorLy8gRW5kIG9mIGZvcndhcmQg
ZGVjbGFyYXRpb25zLgorCisKKworCitTdHJpbmcgZ2V0VGVzdEVudW1Db25zdGFudFZhbHVlKGlu
dCBjb2RlKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gU3RyaW5nIGdldFRlc3RFbnVtQ29uc3Rh
bnRWYWx1ZShUIGVudW1WYWx1ZSkKK3sKKyAgICByZXR1cm4gZ2V0VGVzdEVudW1Db25zdGFudFZh
bHVlKHN0YXRpY19jYXN0PGludD4oZW51bVZhbHVlKSk7Cit9CisKK25hbWVzcGFjZSBSdW50aW1l
IHsKKy8qICAqLworZW51bSBjbGFzcyBGYXJtQW5pbWFscyB7CisgICAgUGlncyA9IDAsCisgICAg
Q293cyA9IDEsCisgICAgQ2F0cyA9IDIsCisgICAgSGVucyA9IDMsCit9OyAvLyBlbnVtIGNsYXNz
IEZhcm1BbmltYWxzCisvKiAgKi8KK2VudW0gY2xhc3MgVHdvTGVnZ2VkQW5pbWFscyB7CisgICAg
RHVja3MgPSA0LAorICAgIEhlbnMgPSAzLAorICAgIENyb3dzID0gNSwKKyAgICBGbGFtaW5nb3Mg
PSA2LAorfTsgLy8gZW51bSBjbGFzcyBUd29MZWdnZWRBbmltYWxzCit9IC8vIFJ1bnRpbWUKKwor
CisKK30gLy8gbmFtZXNwYWNlIFR5cGVCdWlsZGVyCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rv
cgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKworI2VuZGlmIC8vICFkZWZpbmVkKElu
c3BlY3RvclRlc3RUeXBlQnVpbGRlcnNfaCkKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdFR5
cGVCdWlsZGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJz
LmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9u
LWVudW0tdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkluc3BlY3RvclRlc3RU
eXBlQnVpbGRlcnMuaCIKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRlIDx3dGYv
dGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCituYW1lc3BhY2UgVHlw
ZUJ1aWxkZXIgeworCitzdGF0aWMgY29uc3QgY2hhciogY29uc3QgZW51bV9jb25zdGFudF92YWx1
ZXNbXSA9IHsKKyAgICAiUGlncyIsCisgICAgIkNvd3MiLAorICAgICJDYXRzIiwKKyAgICAiSGVu
cyIsCisgICAgIkR1Y2tzIiwKKyAgICAiQ3Jvd3MiLAorICAgICJGbGFtaW5nb3MiLAorfTsKKwor
U3RyaW5nIGdldFRlc3RFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSkgeworICAgIHJldHVybiBl
bnVtX2NvbnN0YW50X3ZhbHVlc1tjb2RlXTsKK30KKworCisKK30gLy8gbmFtZXNwYWNlIFR5cGVC
dWlsZGVyCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElO
U1BFQ1RPUikKKworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmNwcApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbi1yZXN1bHQgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1k
ZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uLXJlc3VsdApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yZThjY2ZlODMx
NDljNDIwYjRmZjczYjYwOTc1ZGRjZTFiYzhjOWRhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVj
bGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbi1yZXN1bHQKQEAgLTAsMCArMSw5MDAgQEAKKyMjIyBC
ZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0QmFja2VuZENvbW1hbmRzLmpzCisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbgor
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2NvZGVnZW4vZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKy8vIFRl
c3QuCitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiVGVzdC5hdHRlbXB0Q3Vyc2Ui
LCBbeyJuYW1lIjogImN1cnNlIiwgInR5cGUiOiAib2JqZWN0IiwgIm9wdGlvbmFsIjogZmFsc2V9
XSwgWyJjZW5zb3JlZEN1cnNlIl0pOworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0QmFja2Vu
ZENvbW1hbmRzLmpzCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3Bh
dGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJh
dGlvbi1vYmplY3QtdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9j
b2wtYmluZGluZ3MucHkKKworI2lmbmRlZiBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJz
X2gKKyNkZWZpbmUgSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVyc19oCisKKyNpZiBFTkFC
TEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSAiSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5oIgor
I2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1
ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisK
K25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKwor
Y2xhc3MgSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7CitwdWJsaWM6Cisg
ICAgdmlydHVhbCB2b2lkIGF0dGVtcHRDdXJzZShFcnJvclN0cmluZyosIGNvbnN0IFJlZlB0cjxJ
bnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4mIGluX2N1cnNlLCBJbnNwZWN0b3I6OlR5cGVCdWls
ZGVyOjpPcHRPdXRwdXQ8U3RyaW5nPiogb3B0X291dF9jZW5zb3JlZEN1cnNlKSA9IDA7Citwcm90
ZWN0ZWQ6CisgICAgdmlydHVhbCB+SW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVySGFuZGxl
cigpOworfTsKKworY2xhc3MgSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDog
cHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIg
eworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3RvclRlc3RCYWNrZW5kRGlz
cGF0Y2hlcj4gY3JlYXRlKEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqLCBJ
bnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7CisgICAgdmlydHVhbCB2b2lk
IGRpc3BhdGNoKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUGFzc1JlZlB0cjxJ
bnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gbWVzc2FnZSkgb3ZlcnJpZGU7Citwcml2YXRlOgor
ICAgIHZvaWQgYXR0ZW1wdEN1cnNlKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3I6Okluc3Bl
Y3Rvck9iamVjdCYgbWVzc2FnZSk7Citwcml2YXRlOgorICAgIEluc3BlY3RvclRlc3RCYWNrZW5k
RGlzcGF0Y2hlcihJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiwgSW5zcGVj
dG9yVGVzdEJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOworICAgIEluc3BlY3RvclRlc3RCYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXIqIG1fYWdlbnQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyNlbmRpZiAvLyAhZGVmaW5l
ZChJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzX2gpCisjIyMgRW5kIEZpbGU6IEluc3Bl
Y3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9y
VGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2lmIEVOQUJM
RShJTlNQRUNUT1IpCisKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsLmg+CisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK0luc3BlY3Rv
clRlc3RCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6On5JbnNwZWN0b3JUZXN0QmFja2VuZERpc3Bh
dGNoZXJIYW5kbGVyKCkgeyB9CisKK1Bhc3NSZWZQdHI8SW5zcGVjdG9yVGVzdEJhY2tlbmREaXNw
YXRjaGVyPiBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXI6OmNyZWF0ZShJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIsIEluc3BlY3RvclRlc3RCYWNrZW5k
RGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW5z
cGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyLCBhZ2VudCkpOwor
fQorCitJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXI6Okluc3BlY3RvclRlc3RCYWNrZW5k
RGlzcGF0Y2hlcihJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIs
IEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQorICAgIDogSW5z
cGVjdG9yU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIpCisg
ICAgLCBtX2FnZW50KGFnZW50KQoreworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVy
RGlzcGF0Y2hlckZvckRvbWFpbihBU0NJSUxpdGVyYWwoIlRlc3QiKSwgdGhpcyk7Cit9CisKK3Zv
aWQgSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIGNhbGxJZCwg
Y29uc3QgU3RyaW5nJiBtZXRob2QsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtZXNzYWdl
KQoreworICAgIFJlZjxJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRo
aXMpOworCisgICAgaWYgKG1ldGhvZCA9PSAiYXR0ZW1wdEN1cnNlIikKKyAgICAgICAgYXR0ZW1w
dEN1cnNlKGNhbGxJZCwgKm1lc3NhZ2UuZ2V0KCkpOworICAgIGVsc2UKKyAgICAgICAgbV9iYWNr
ZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElkLCBJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsIFN0cmluZygiJyIpICsgIlRlc3QiICsgJy4n
ICsgbWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOworfQorCit2b2lkIEluc3BlY3RvclRlc3RC
YWNrZW5kRGlzcGF0Y2hlcjo6YXR0ZW1wdEN1cnNlKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0
b3JPYmplY3QmIG1lc3NhZ2UpCit7CisgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2Nv
bEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSBtZXNzYWdlLmdldE9iamVjdChBU0NJSUxpdGVyYWwo
InBhcmFtcyIpKTsKKyAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBh
cmFtc0NvbnRhaW5lci5nZXQoKTsKKyAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQ
dHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0
b3JPYmplY3Q+IGluX2N1cnNlID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldE9iamVj
dChwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgiY3Vyc2UiKSwgbnVsbHB0ciwgcHJv
dG9jb2xFcnJvcnNQdHIpOworICAgIGlmIChwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKKyAg
ICAgICAgU3RyaW5nIGVycm9yTWVzc2FnZSA9IFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50
cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiVGVzdC5hdHRlbXB0Q3Vyc2Ui
KTsKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcigmY2Fs
bElkLCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFtcywgZXJyb3JNZXNz
YWdlLCBwcm90b2NvbEVycm9ycy5yZWxlYXNlKCkpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgRXJyb3JTdHJpbmcgZXJyb3I7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVz
dWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBJbnNwZWN0b3I6OlR5cGVCdWls
ZGVyOjpPcHRPdXRwdXQ8U3RyaW5nPiBvdXRfY2Vuc29yZWRDdXJzZTsKKyAgICBtX2FnZW50LT5h
dHRlbXB0Q3Vyc2UoJmVycm9yLCBpbl9jdXJzZSwgJm91dF9jZW5zb3JlZEN1cnNlKTsKKworICAg
IGlmICghZXJyb3IubGVuZ3RoKCkpCisgICAgICAgIGlmIChvdXRfY2Vuc29yZWRDdXJzZS5pc0Fz
c2lnbmVkKCkpCisgICAgICAgICAgICByZXN1bHQtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoImNl
bnNvcmVkQ3Vyc2UiKSwgb3V0X2NlbnNvcmVkQ3Vyc2UuZ2V0VmFsdWUoKSk7CisKKyAgICBtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBl
cnJvcik7Cit9CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxF
KElOU1BFQ1RPUikKKworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNo
ZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hl
cnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9u
LW9iamVjdC10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQorCisjaWZuZGVmIEluc3BlY3RvclRlc3RGcm9udGVuZERpc3BhdGNoZXJzX2gK
KyNkZWZpbmUgSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnNfaAorCisjaWYgRU5BQkxF
KElOU1BFQ1RPUikKKworI2luY2x1ZGUgIkluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuaCIKKyNp
bmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLmg+CisjaW5jbHVkZSA8
aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3Ig
eworCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5T
UEVDVE9SKQorCisjZW5kaWYgLy8gIWRlZmluZWQoSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0
Y2hlcnNfaCkKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMu
aAorCisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3Bw
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tb2Jq
ZWN0LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JUZXN0RnJv
bnRlbmREaXNwYXRjaGVycy5oIgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUg
PHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK30gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKworIyMjIEVu
ZCBGaWxlOiBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJlZ2lu
IEZpbGU6IEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24KKy8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2Vu
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaWZuZGVmIEluc3Bl
Y3RvclRlc3RUeXBlQnVpbGRlcnNfaAorI2RlZmluZSBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJz
X2gKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVj
dG9ySlNUeXBlQnVpbGRlcnMuaD4KKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVHlwZUJ1
aWxkZXIuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9QYXNz
UmVmUHRyLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworbmFtZXNwYWNlIFR5cGVC
dWlsZGVyIHsKKworLy8gRm9yd2FyZCBkZWNsYXJhdGlvbnMuCisjaWYgRU5BQkxFKFNRTF9EQVRB
QkFTRSkKK25hbWVzcGFjZSBEYXRhYmFzZSB7CitjbGFzcyBEdW1teU9iamVjdDsKK2NsYXNzIEVy
cm9yOworY2xhc3MgT2JqZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0czsKK2NsYXNzIE9wdGlv
bmFsUGFyYW1ldGVyQnVuZGxlOworY2xhc3MgUGFyYW1ldGVyQnVuZGxlOworfSAvLyBEYXRhYmFz
ZQorI2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0UpCisKK25hbWVzcGFjZSBUZXN0IHsKK2Ns
YXNzIEhhcHB5TmFtZTsKK2NsYXNzIFBhcmFtZXRlckJ1bmRsZTsKK30gLy8gVGVzdAorLy8gRW5k
IG9mIGZvcndhcmQgZGVjbGFyYXRpb25zLgorCisKKworCitTdHJpbmcgZ2V0VGVzdEVudW1Db25z
dGFudFZhbHVlKGludCBjb2RlKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gU3RyaW5nIGdldFRl
c3RFbnVtQ29uc3RhbnRWYWx1ZShUIGVudW1WYWx1ZSkKK3sKKyAgICByZXR1cm4gZ2V0VGVzdEVu
dW1Db25zdGFudFZhbHVlKHN0YXRpY19jYXN0PGludD4oZW51bVZhbHVlKSk7Cit9CisKKyNpZiBF
TkFCTEUoU1FMX0RBVEFCQVNFKQorbmFtZXNwYWNlIERhdGFiYXNlIHsKKy8qIERhdGFiYXNlIGVy
cm9yLiAqLworY2xhc3MgRXJyb3IgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3RC
YXNlIHsKK3B1YmxpYzoKKyAgICBlbnVtIHsKKyAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAorICAg
ICAgICBNZXNzYWdlU2V0ID0gMSA8PCAwLAorICAgICAgICBDb2RlU2V0ID0gMSA8PCAxLAorICAg
ICAgICBBbGxGaWVsZHNTZXQgPSAoTWVzc2FnZVNldCB8IENvZGVTZXQpCisgICAgfTsKKworICAg
IHRlbXBsYXRlPGludCBTVEFURT4KKyAgICBjbGFzcyBCdWlsZGVyIHsKKyAgICBwcml2YXRlOgor
ICAgICAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OworCisg
ICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0
ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWls
ZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXIo
UGFzc1JlZlB0cjwvKkVycm9yKi9JbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gcHRyKQorICAg
ICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwg
YnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKKyAgICAgICAgICAgIG1fcmVzdWx0
ID0gcHRyOworICAgICAgICB9CisgICAgICAgIGZyaWVuZCBjbGFzcyBFcnJvcjsKKyAgICBwdWJs
aWM6CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IE1lc3NhZ2VTZXQ+JiBzZXRNZXNzYWdlKGNv
bnN0IFN0cmluZyYgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KCEoU1RBVEUgJiBNZXNzYWdlU2V0KSwgcHJvcGVydHlfbWVzc2FnZV9hbHJlYWR5X3NldCk7Cisg
ICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgibWVzc2FnZSIpLCB2
YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE1lc3NhZ2VTZXQ+KCk7CisgICAg
ICAgIH0KKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQ29kZVNldD4mIHNldENvZGUoaW50IHZh
bHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQ29k
ZVNldCksIHByb3BlcnR5X2NvZGVfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQt
PnNldE51bWJlcihBU0NJSUxpdGVyYWwoImNvZGUiKSwgdmFsdWUpOworICAgICAgICAgICAgcmV0
dXJuIGNhc3RTdGF0ZTxDb2RlU2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgb3BlcmF0b3Ig
UmVmUHRyPEVycm9yPiYgKCkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
U1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKKyAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKHNpemVvZihFcnJvcikgPT0gc2l6ZW9mKEluc3BlY3Rvcjo6SW5zcGVj
dG9yT2JqZWN0KSwgY2Fubm90X2Nhc3QpOworICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJl
dF9jYXN0PFJlZlB0cjxFcnJvcj4qPigmbV9yZXN1bHQpOworICAgICAgICB9CisKKyAgICAgICAg
UGFzc1JlZlB0cjxFcnJvcj4gcmVsZWFzZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBSZWZQdHI8RXJyb3I+KCp0aGlzKS5yZWxlYXNlKCk7CisgICAgICAgIH0KKyAgICB9OworCisg
ICAgLyoKKyAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CisgICAgICogUmVmUHRyPEVycm9y
PiByZXN1bHQgPSBFcnJvcjo6Y3JlYXRlKCkKKyAgICAgKiAgICAgLnNldE1lc3NhZ2UoLi4uKQor
ICAgICAqICAgICAuc2V0Q29kZSguLi4pOworICAgICAqLworICAgIHN0YXRpYyBCdWlsZGVyPE5v
RmllbGRzU2V0PiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVs
ZHNTZXQ+KEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7CisgICAgfQorICAg
IHR5cGVkZWYgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6U3RydWN0SXRlbVRyYWl0cyBJdGVtVHJh
aXRzOworfTsKKworY2xhc3MgT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGUgOiBwdWJsaWMgSW5zcGVj
dG9yOjpJbnNwZWN0b3JPYmplY3RCYXNlIHsKK3B1YmxpYzoKKyAgICBlbnVtIHsKKyAgICAgICAg
Tm9GaWVsZHNTZXQgPSAwLAorICAgICAgICBBbGxGaWVsZHNTZXQgPSAwCisgICAgfTsKKworICAg
IHRlbXBsYXRlPGludCBTVEFURT4KKyAgICBjbGFzcyBCdWlsZGVyIHsKKyAgICBwcml2YXRlOgor
ICAgICAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OworCisg
ICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0
ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWls
ZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXIo
UGFzc1JlZlB0cjwvKk9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlKi9JbnNwZWN0b3I6Okluc3BlY3Rv
ck9iamVjdD4gcHRyKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFU
RSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKKyAg
ICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOworICAgICAgICB9CisgICAgICAgIGZyaWVuZCBjbGFz
cyBPcHRpb25hbFBhcmFtZXRlckJ1bmRsZTsKKyAgICBwdWJsaWM6CisKKyAgICAgICAgb3BlcmF0
b3IgUmVmUHRyPE9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlPiYgKCkKKyAgICAgICAgeworICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90
X3JlYWR5KTsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihPcHRpb25hbFBhcmFt
ZXRlckJ1bmRsZSkgPT0gc2l6ZW9mKEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0KSwgY2Fubm90
X2Nhc3QpOworICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxPcHRp
b25hbFBhcmFtZXRlckJ1bmRsZT4qPigmbV9yZXN1bHQpOworICAgICAgICB9CisKKyAgICAgICAg
UGFzc1JlZlB0cjxPcHRpb25hbFBhcmFtZXRlckJ1bmRsZT4gcmVsZWFzZSgpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBSZWZQdHI8T3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU+KCp0aGlz
KS5yZWxlYXNlKCk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgLyoKKyAgICAgKiBTeW50aGV0
aWMgY29uc3RydWN0b3I6CisgICAgICogUmVmUHRyPE9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlPiBy
ZXN1bHQgPSBPcHRpb25hbFBhcmFtZXRlckJ1bmRsZTo6Y3JlYXRlKCk7CisgICAgICovCisgICAg
c3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1
cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q6OmNyZWF0
ZSgpKTsKKyAgICB9CisgICAgdHlwZWRlZiBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpTdHJ1Y3RJ
dGVtVHJhaXRzIEl0ZW1UcmFpdHM7CisKKyAgICB2b2lkIHNldENvbHVtbk5hbWVzKFBhc3NSZWZQ
dHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk8U3RyaW5nPj4gdmFsdWUpCisgICAgewor
ICAgICAgICBJbnNwZWN0b3JPYmplY3RCYXNlOjpzZXRBcnJheShBU0NJSUxpdGVyYWwoImNvbHVt
bk5hbWVzIiksIHZhbHVlKTsKKyAgICB9CisKKyAgICB2b2lkIHNldE5vdGVzKGNvbnN0IFN0cmlu
ZyYgdmFsdWUpCisgICAgeworICAgICAgICBJbnNwZWN0b3JPYmplY3RCYXNlOjpzZXRTdHJpbmco
QVNDSUlMaXRlcmFsKCJub3RlcyIpLCB2YWx1ZSk7CisgICAgfQorCisgICAgdm9pZCBzZXRUaW1l
c3RhbXAoZG91YmxlIHZhbHVlKQorICAgIHsKKyAgICAgICAgSW5zcGVjdG9yT2JqZWN0QmFzZTo6
c2V0TnVtYmVyKEFTQ0lJTGl0ZXJhbCgidGltZXN0YW1wIiksIHZhbHVlKTsKKyAgICB9CisKKyAg
ICB2b2lkIHNldFZhbHVlcyhQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiB2
YWx1ZSkKKyAgICB7CisgICAgICAgIEluc3BlY3Rvck9iamVjdEJhc2U6OnNldE9iamVjdChBU0NJ
SUxpdGVyYWwoInZhbHVlcyIpLCB2YWx1ZSk7CisgICAgfQorCisgICAgdm9pZCBzZXRQYXlsb2Fk
KFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4gdmFsdWUpCisgICAgeworICAg
ICAgICBJbnNwZWN0b3JPYmplY3RCYXNlOjpzZXRWYWx1ZShBU0NJSUxpdGVyYWwoInBheWxvYWQi
KSwgdmFsdWUpOworICAgIH0KKworICAgIHZvaWQgc2V0RXJyb3IoUGFzc1JlZlB0cjxJbnNwZWN0
b3I6OlR5cGVCdWlsZGVyOjpEYXRhYmFzZTo6RXJyb3I+IHZhbHVlKQorICAgIHsKKyAgICAgICAg
SW5zcGVjdG9yT2JqZWN0QmFzZTo6c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgiZXJyb3IiKSwgdmFs
dWUpOworICAgIH0KK307CisKK2NsYXNzIFBhcmFtZXRlckJ1bmRsZSA6IHB1YmxpYyBJbnNwZWN0
b3I6Okluc3BlY3Rvck9iamVjdEJhc2UgeworcHVibGljOgorICAgIGVudW0geworICAgICAgICBO
b0ZpZWxkc1NldCA9IDAsCisgICAgICAgIENvbHVtbk5hbWVzU2V0ID0gMSA8PCAwLAorICAgICAg
ICBOb3Rlc1NldCA9IDEgPDwgMSwKKyAgICAgICAgVGltZXN0YW1wU2V0ID0gMSA8PCAyLAorICAg
ICAgICBWYWx1ZXNTZXQgPSAxIDw8IDMsCisgICAgICAgIFBheWxvYWRTZXQgPSAxIDw8IDQsCisg
ICAgICAgIEVycm9yU2V0ID0gMSA8PCA1LAorICAgICAgICBBbGxGaWVsZHNTZXQgPSAoQ29sdW1u
TmFtZXNTZXQgfCBOb3Rlc1NldCB8IFRpbWVzdGFtcFNldCB8IFZhbHVlc1NldCB8IFBheWxvYWRT
ZXQgfCBFcnJvclNldCkKKyAgICB9OworCisgICAgdGVtcGxhdGU8aW50IFNUQVRFPgorICAgIGNs
YXNzIEJ1aWxkZXIgeworICAgIHByaXZhdGU6CisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3I6Oklu
c3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CisKKyAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1
aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwor
ICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPC8qUGFyYW1ldGVyQnVuZGxl
Ki9JbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gcHRyKQorICAgICAgICB7CisgICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2lu
X25vbl9pbml0X3N0YXRlKTsKKyAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOworICAgICAgICB9
CisgICAgICAgIGZyaWVuZCBjbGFzcyBQYXJhbWV0ZXJCdW5kbGU7CisgICAgcHVibGljOgorCisg
ICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDb2x1bW5OYW1lc1NldD4mIHNldENvbHVtbk5hbWVzKFBh
c3NSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk8U3RyaW5nPj4gdmFsdWUpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBDb2x1bW5OYW1l
c1NldCksIHByb3BlcnR5X2NvbHVtbk5hbWVzX2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1f
cmVzdWx0LT5zZXRBcnJheShBU0NJSUxpdGVyYWwoImNvbHVtbk5hbWVzIiksIHZhbHVlKTsKKyAg
ICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q29sdW1uTmFtZXNTZXQ+KCk7CisgICAgICAgIH0K
KworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTm90ZXNTZXQ+JiBzZXROb3Rlcyhjb25zdCBTdHJp
bmcmIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRF
ICYgTm90ZXNTZXQpLCBwcm9wZXJ0eV9ub3Rlc19hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBt
X3Jlc3VsdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgibm90ZXMiKSwgdmFsdWUpOworICAgICAg
ICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxOb3Rlc1NldD4oKTsKKyAgICAgICAgfQorCisgICAgICAg
IEJ1aWxkZXI8U1RBVEUgfCBUaW1lc3RhbXBTZXQ+JiBzZXRUaW1lc3RhbXAoZG91YmxlIHZhbHVl
KQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVGltZXN0
YW1wU2V0KSwgcHJvcGVydHlfdGltZXN0YW1wX2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1f
cmVzdWx0LT5zZXROdW1iZXIoQVNDSUlMaXRlcmFsKCJ0aW1lc3RhbXAiKSwgdmFsdWUpOworICAg
ICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxUaW1lc3RhbXBTZXQ+KCk7CisgICAgICAgIH0KKwor
ICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVmFsdWVzU2V0PiYgc2V0VmFsdWVzKFBhc3NSZWZQdHI8
SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVmFsdWVzU2V0KSwgcHJvcGVydHlfdmFsdWVzX2Fs
cmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRPYmplY3QoQVNDSUlMaXRlcmFs
KCJ2YWx1ZXMiKSwgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxWYWx1ZXNT
ZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgUGF5bG9hZFNldD4m
IHNldFBheWxvYWQoUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiB2YWx1ZSkK
KyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFBheWxvYWRT
ZXQpLCBwcm9wZXJ0eV9wYXlsb2FkX2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0
LT5zZXRWYWx1ZShBU0NJSUxpdGVyYWwoInBheWxvYWQiKSwgdmFsdWUpOworICAgICAgICAgICAg
cmV0dXJuIGNhc3RTdGF0ZTxQYXlsb2FkU2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgQnVp
bGRlcjxTVEFURSB8IEVycm9yU2V0PiYgc2V0RXJyb3IoUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlR5
cGVCdWlsZGVyOjpEYXRhYmFzZTo6RXJyb3I+IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgRXJyb3JTZXQpLCBwcm9wZXJ0eV9lcnJvcl9hbHJl
YWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgi
ZXJyb3IiKSwgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxFcnJvclNldD4o
KTsKKyAgICAgICAgfQorCisgICAgICAgIG9wZXJhdG9yIFJlZlB0cjxQYXJhbWV0ZXJCdW5kbGU+
JiAoKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxG
aWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOworICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoc2l6ZW9mKFBhcmFtZXRlckJ1bmRsZSkgPT0gc2l6ZW9mKEluc3BlY3Rvcjo6SW5zcGVjdG9y
T2JqZWN0KSwgY2Fubm90X2Nhc3QpOworICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9j
YXN0PFJlZlB0cjxQYXJhbWV0ZXJCdW5kbGU+Kj4oJm1fcmVzdWx0KTsKKyAgICAgICAgfQorCisg
ICAgICAgIFBhc3NSZWZQdHI8UGFyYW1ldGVyQnVuZGxlPiByZWxlYXNlKCkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxQYXJhbWV0ZXJCdW5kbGU+KCp0aGlzKS5yZWxlYXNl
KCk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgLyoKKyAgICAgKiBTeW50aGV0aWMgY29uc3Ry
dWN0b3I6CisgICAgICogUmVmUHRyPFBhcmFtZXRlckJ1bmRsZT4gcmVzdWx0ID0gUGFyYW1ldGVy
QnVuZGxlOjpjcmVhdGUoKQorICAgICAqICAgICAuc2V0Q29sdW1uTmFtZXMoLi4uKQorICAgICAq
ICAgICAuc2V0Tm90ZXMoLi4uKQorICAgICAqICAgICAuc2V0VGltZXN0YW1wKC4uLikKKyAgICAg
KiAgICAgLnNldFZhbHVlcyguLi4pCisgICAgICogICAgIC5zZXRQYXlsb2FkKC4uLikKKyAgICAg
KiAgICAgLnNldEVycm9yKC4uLik7CisgICAgICovCisgICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVs
ZHNTZXQ+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1Nl
dD4oSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpKTsKKyAgICB9CisgICAgdHlw
ZWRlZiBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpTdHJ1Y3RJdGVtVHJhaXRzIEl0ZW1UcmFpdHM7
Cit9OworCisvKiBDb25mbGljdGVkIG5hbWVzIG1heSBjYXVzZSBnZW5lcmF0ZWQgZ2V0dGVycy9z
ZXR0ZXJzIHRvIGNsYXNoIHdpdGggYnVpbHQtaW4gSW5zcGVjdG9yT2JqZWN0IG1ldGhvZHMuICov
CitjbGFzcyBPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzIDogcHVibGljIEluc3BlY3Rv
cjo6SW5zcGVjdG9yT2JqZWN0QmFzZSB7CitwdWJsaWM6CisgICAgZW51bSB7CisgICAgICAgIE5v
RmllbGRzU2V0ID0gMCwKKyAgICAgICAgSW50ZWdlclNldCA9IDEgPDwgMCwKKyAgICAgICAgQXJy
YXlTZXQgPSAxIDw8IDEsCisgICAgICAgIFN0cmluZ1NldCA9IDEgPDwgMiwKKyAgICAgICAgVmFs
dWVTZXQgPSAxIDw8IDMsCisgICAgICAgIE9iamVjdFNldCA9IDEgPDwgNCwKKyAgICAgICAgQWxs
RmllbGRzU2V0ID0gKEludGVnZXJTZXQgfCBBcnJheVNldCB8IFN0cmluZ1NldCB8IFZhbHVlU2V0
IHwgT2JqZWN0U2V0KQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CisgICAgY2xh
c3MgQnVpbGRlciB7CisgICAgcHJpdmF0ZToKKyAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5z
cGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKKworICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVp
bGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7Cisg
ICAgICAgIH0KKworICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8LypPYmplY3RXaXRoUHJvcGVy
dHlOYW1lQ29uZmxpY3RzKi9JbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gcHRyKQorICAgICAg
ICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVp
bGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKKyAgICAgICAgICAgIG1fcmVzdWx0ID0g
cHRyOworICAgICAgICB9CisgICAgICAgIGZyaWVuZCBjbGFzcyBPYmplY3RXaXRoUHJvcGVydHlO
YW1lQ29uZmxpY3RzOworICAgIHB1YmxpYzoKKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgSW50
ZWdlclNldD4mIHNldEludGVnZXIoY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICAgICAgeworICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEludGVnZXJTZXQpLCBwcm9wZXJ0eV9p
bnRlZ2VyX2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoQVND
SUlMaXRlcmFsKCJpbnRlZ2VyIiksIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3Rh
dGU8SW50ZWdlclNldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBB
cnJheVNldD4mIHNldEFycmF5KGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBBcnJheVNldCksIHByb3BlcnR5X2FycmF5
X2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoQVNDSUlMaXRl
cmFsKCJhcnJheSIpLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEFycmF5
U2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IFN0cmluZ1NldD4m
IHNldFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBD
T01QSUxFX0FTU0VSVCghKFNUQVRFICYgU3RyaW5nU2V0KSwgcHJvcGVydHlfc3RyaW5nX2FscmVh
ZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJz
dHJpbmciKSwgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxTdHJpbmdTZXQ+
KCk7CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVmFsdWVTZXQ+JiBzZXRW
YWx1ZShjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxF
X0FTU0VSVCghKFNUQVRFICYgVmFsdWVTZXQpLCBwcm9wZXJ0eV92YWx1ZV9hbHJlYWR5X3NldCk7
CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgidmFsdWUiKSwg
dmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxWYWx1ZVNldD4oKTsKKyAgICAg
ICAgfQorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBPYmplY3RTZXQ+JiBzZXRPYmplY3QoY29u
c3QgU3RyaW5nJiB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
IShTVEFURSAmIE9iamVjdFNldCksIHByb3BlcnR5X29iamVjdF9hbHJlYWR5X3NldCk7CisgICAg
ICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgib2JqZWN0IiksIHZhbHVl
KTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8T2JqZWN0U2V0PigpOworICAgICAgICB9
CisKKyAgICAgICAgb3BlcmF0b3IgUmVmUHRyPE9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGlj
dHM+JiAoKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBB
bGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOworICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoc2l6ZW9mKE9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHMpID09IHNpemVvZihJ
bnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCksIGNhbm5vdF9jYXN0KTsKKyAgICAgICAgICAgIHJl
dHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8T2JqZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZs
aWN0cz4qPigmbV9yZXN1bHQpOworICAgICAgICB9CisKKyAgICAgICAgUGFzc1JlZlB0cjxPYmpl
Y3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzPiByZWxlYXNlKCkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIFJlZlB0cjxPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzPigqdGhp
cykucmVsZWFzZSgpOworICAgICAgICB9CisgICAgfTsKKworICAgIC8qCisgICAgICogU3ludGhl
dGljIGNvbnN0cnVjdG9yOgorICAgICAqIFJlZlB0cjxPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29u
ZmxpY3RzPiByZXN1bHQgPSBPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzOjpjcmVhdGUo
KQorICAgICAqICAgICAuc2V0SW50ZWdlciguLi4pCisgICAgICogICAgIC5zZXRBcnJheSguLi4p
CisgICAgICogICAgIC5zZXRTdHJpbmcoLi4uKQorICAgICAqICAgICAuc2V0VmFsdWUoLi4uKQor
ICAgICAqICAgICAuc2V0T2JqZWN0KC4uLik7CisgICAgICovCisgICAgc3RhdGljIEJ1aWxkZXI8
Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0Zp
ZWxkc1NldD4oSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpKTsKKyAgICB9Cisg
ICAgdHlwZWRlZiBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpTdHJ1Y3RJdGVtVHJhaXRzIEl0ZW1U
cmFpdHM7Cit9OworCit9IC8vIERhdGFiYXNlCisjZW5kaWYgLy8gRU5BQkxFKFNRTF9EQVRBQkFT
RSkKKworbmFtZXNwYWNlIFRlc3QgeworY2xhc3MgUGFyYW1ldGVyQnVuZGxlIDogcHVibGljIElu
c3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0QmFzZSB7CitwdWJsaWM6CisgICAgZW51bSB7CisgICAg
ICAgIE5vRmllbGRzU2V0ID0gMCwKKyAgICAgICAgQ29sdW1uTmFtZXNTZXQgPSAxIDw8IDAsCisg
ICAgICAgIE5vdGVzU2V0ID0gMSA8PCAxLAorICAgICAgICBUaW1lc3RhbXBTZXQgPSAxIDw8IDIs
CisgICAgICAgIFZhbHVlc1NldCA9IDEgPDwgMywKKyAgICAgICAgUGF5bG9hZFNldCA9IDEgPDwg
NCwKKyAgICAgICAgRXJyb3JTZXQgPSAxIDw8IDUsCisgICAgICAgIEFsbEZpZWxkc1NldCA9IChD
b2x1bW5OYW1lc1NldCB8IE5vdGVzU2V0IHwgVGltZXN0YW1wU2V0IHwgVmFsdWVzU2V0IHwgUGF5
bG9hZFNldCB8IEVycm9yU2V0KQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+Cisg
ICAgY2xhc3MgQnVpbGRlciB7CisgICAgcHJpdmF0ZToKKyAgICAgICAgUmVmUHRyPEluc3BlY3Rv
cjo6SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKKworICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RF
UD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhp
cyk7CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8LypQYXJhbWV0ZXJC
dW5kbGUqL0luc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBwdHIpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0
ZWRfaW5fbm9uX2luaXRfc3RhdGUpOworICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CisgICAg
ICAgIH0KKyAgICAgICAgZnJpZW5kIGNsYXNzIFBhcmFtZXRlckJ1bmRsZTsKKyAgICBwdWJsaWM6
CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IENvbHVtbk5hbWVzU2V0PiYgc2V0Q29sdW1uTmFt
ZXMoUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheTxTdHJpbmc+PiB2YWx1
ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIENvbHVt
bk5hbWVzU2V0KSwgcHJvcGVydHlfY29sdW1uTmFtZXNfYWxyZWFkeV9zZXQpOworICAgICAgICAg
ICAgbV9yZXN1bHQtPnNldEFycmF5KEFTQ0lJTGl0ZXJhbCgiY29sdW1uTmFtZXMiKSwgdmFsdWUp
OworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxDb2x1bW5OYW1lc1NldD4oKTsKKyAgICAg
ICAgfQorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBOb3Rlc1NldD4mIHNldE5vdGVzKGNvbnN0
IFN0cmluZyYgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEo
U1RBVEUgJiBOb3Rlc1NldCksIHByb3BlcnR5X25vdGVzX2FscmVhZHlfc2V0KTsKKyAgICAgICAg
ICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJub3RlcyIpLCB2YWx1ZSk7Cisg
ICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE5vdGVzU2V0PigpOworICAgICAgICB9CisKKyAg
ICAgICAgQnVpbGRlcjxTVEFURSB8IFRpbWVzdGFtcFNldD4mIHNldFRpbWVzdGFtcChkb3VibGUg
dmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBU
aW1lc3RhbXBTZXQpLCBwcm9wZXJ0eV90aW1lc3RhbXBfYWxyZWFkeV9zZXQpOworICAgICAgICAg
ICAgbV9yZXN1bHQtPnNldE51bWJlcihBU0NJSUxpdGVyYWwoInRpbWVzdGFtcCIpLCB2YWx1ZSk7
CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFRpbWVzdGFtcFNldD4oKTsKKyAgICAgICAg
fQorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBWYWx1ZXNTZXQ+JiBzZXRWYWx1ZXMoUGFzc1Jl
ZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gdmFsdWUpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBWYWx1ZXNTZXQpLCBwcm9wZXJ0eV92YWx1
ZXNfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldE9iamVjdChBU0NJSUxp
dGVyYWwoInZhbHVlcyIpLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFZh
bHVlc1NldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBQYXlsb2Fk
U2V0PiYgc2V0UGF5bG9hZChQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+IHZh
bHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgUGF5
bG9hZFNldCksIHByb3BlcnR5X3BheWxvYWRfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9y
ZXN1bHQtPnNldFZhbHVlKEFTQ0lJTGl0ZXJhbCgicGF5bG9hZCIpLCB2YWx1ZSk7CisgICAgICAg
ICAgICByZXR1cm4gY2FzdFN0YXRlPFBheWxvYWRTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAg
ICBCdWlsZGVyPFNUQVRFIHwgRXJyb3JTZXQ+JiBzZXRFcnJvcihQYXNzUmVmUHRyPEluc3BlY3Rv
cjo6VHlwZUJ1aWxkZXI6OkRhdGFiYXNlOjpFcnJvcj4gdmFsdWUpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBFcnJvclNldCksIHByb3BlcnR5X2Vycm9y
X2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRPYmplY3QoQVNDSUlMaXRl
cmFsKCJlcnJvciIpLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEVycm9y
U2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgb3BlcmF0b3IgUmVmUHRyPFBhcmFtZXRlckJ1
bmRsZT4mICgpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09
IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CisgICAgICAgICAgICBDT01QSUxF
X0FTU0VSVChzaXplb2YoUGFyYW1ldGVyQnVuZGxlKSA9PSBzaXplb2YoSW5zcGVjdG9yOjpJbnNw
ZWN0b3JPYmplY3QpLCBjYW5ub3RfY2FzdCk7CisgICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJw
cmV0X2Nhc3Q8UmVmUHRyPFBhcmFtZXRlckJ1bmRsZT4qPigmbV9yZXN1bHQpOworICAgICAgICB9
CisKKyAgICAgICAgUGFzc1JlZlB0cjxQYXJhbWV0ZXJCdW5kbGU+IHJlbGVhc2UoKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gUmVmUHRyPFBhcmFtZXRlckJ1bmRsZT4oKnRoaXMpLnJl
bGVhc2UoKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICAvKgorICAgICAqIFN5bnRoZXRpYyBj
b25zdHJ1Y3RvcjoKKyAgICAgKiBSZWZQdHI8UGFyYW1ldGVyQnVuZGxlPiByZXN1bHQgPSBQYXJh
bWV0ZXJCdW5kbGU6OmNyZWF0ZSgpCisgICAgICogICAgIC5zZXRDb2x1bW5OYW1lcyguLi4pCisg
ICAgICogICAgIC5zZXROb3RlcyguLi4pCisgICAgICogICAgIC5zZXRUaW1lc3RhbXAoLi4uKQor
ICAgICAqICAgICAuc2V0VmFsdWVzKC4uLikKKyAgICAgKiAgICAgLnNldFBheWxvYWQoLi4uKQor
ICAgICAqICAgICAuc2V0RXJyb3IoLi4uKTsKKyAgICAgKi8KKyAgICBzdGF0aWMgQnVpbGRlcjxO
b0ZpZWxkc1NldD4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmll
bGRzU2V0PihJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkpOworICAgIH0KKyAg
ICB0eXBlZGVmIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlN0cnVjdEl0ZW1UcmFpdHMgSXRlbVRy
YWl0czsKK307CisKK30gLy8gVGVzdAorCisKKworfSAvLyBuYW1lc3BhY2UgVHlwZUJ1aWxkZXIK
KworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9S
KQorCisjZW5kaWYgLy8gIWRlZmluZWQoSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVyc19oKQorIyMj
IEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6
IEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMs
IDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbgorLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmgiCisKKyNpZiBFTkFCTEUo
SU5TUEVDVE9SKQorCisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKKworbmFtZXNwYWNlIFR5cGVCdWlsZGVyIHsKKworc3RhdGljIGNvbnN0IGNo
YXIqIGNvbnN0IGVudW1fY29uc3RhbnRfdmFsdWVzW10gPSB7Cit9OworCitTdHJpbmcgZ2V0VGVz
dEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKSB7CisgICAgcmV0dXJuIGVudW1fY29uc3RhbnRf
dmFsdWVzW2NvZGVdOworfQorCisKKworfSAvLyBuYW1lc3BhY2UgVHlwZUJ1aWxkZXIKKworfSAv
LyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorCisj
IyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuY3BwCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlw
ZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLXJlcXVpcmluZy1ydW50
aW1lLWNhc3RzLmpzb24tcmVzdWx0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA1NmY1MjMyMmI0MDdkMzdiOTI5MWQx
YjFkYThjYjEyNWE0MzE4ZjEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1yZXF1aXJpbmctcnVudGlt
ZS1jYXN0cy5qc29uLXJlc3VsdApAQCAtMCwwICsxLDcyNyBAQAorIyMjIEJlZ2luIEZpbGU6IElu
c3BlY3RvclRlc3RCYWNrZW5kQ29tbWFuZHMuanMKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywg
MjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uCisvLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworLy8gVGVzdC4KK0luc3BlY3Rv
ckJhY2tlbmQucmVnaXN0ZXJFbnVtKCJUZXN0LlVuY2FzdGVkQW5pbWFscyIsIHtQaWdzOiAiUGln
cyIsIENvd3M6ICJDb3dzIiwgQ2F0czogIkNhdHMiLCBIZW5zOiAiSGVucyJ9KTsKK0luc3BlY3Rv
ckJhY2tlbmQucmVnaXN0ZXJFbnVtKCJUZXN0LkNhc3RlZEFuaW1hbHMiLCB7RHVja3M6ICJEdWNr
cyIsIEhlbnM6ICJIZW5zIiwgQ3Jvd3M6ICJDcm93cyIsIEZsYW1pbmdvczogIkZsYW1pbmdvcyJ9
KTsKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdEJhY2tlbmRDb21tYW5kcy5qcworCisjIyMg
QmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNv
bgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2NvZGVnZW4vZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNp
Zm5kZWYgSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVyc19oCisjZGVmaW5lIEluc3BlY3Rv
clRlc3RCYWNrZW5kRGlzcGF0Y2hlcnNfaAorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2lu
Y2x1ZGUgIkluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuaCIKKyNpbmNsdWRlIDxpbnNwZWN0b3Iv
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5o
PgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9y
IHsKKwordHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKK30gLy8gbmFtZXNwYWNlIEluc3Bl
Y3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKworI2VuZGlmIC8vICFkZWZpbmVk
KEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnNfaCkKKyMjIyBFbmQgRmlsZTogSW5zcGVj
dG9yVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JU
ZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
Ky8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaWYgRU5BQkxF
KElOU1BFQ1RPUikKKworI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwuaD4KKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKK30gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKworIyMj
IEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVn
aW4gRmlsZTogSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24K
Ky8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9jb2RlZ2VuL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaWZu
ZGVmIEluc3BlY3RvclRlc3RGcm9udGVuZERpc3BhdGNoZXJzX2gKKyNkZWZpbmUgSW5zcGVjdG9y
VGVzdEZyb250ZW5kRGlzcGF0Y2hlcnNfaAorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2lu
Y2x1ZGUgIkluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuaCIKKyNpbmNsdWRlIDxpbnNwZWN0b3Iv
SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLmg+CisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3Rv
clZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworfSAvLyBuYW1l
c3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorCisjZW5kaWYg
Ly8gIWRlZmluZWQoSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnNfaCkKKyMjIyBFbmQg
RmlsZTogSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmls
ZTogSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbgorLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2Nv
ZGVnZW4vZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5o
IgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcu
aD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgor
CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JU
ZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRl
c3RUeXBlQnVpbGRlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBl
LXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaWZuZGVmIEluc3BlY3RvclRlc3RUeXBlQnVpbGRl
cnNfaAorI2RlZmluZSBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzX2gKKworI2lmIEVOQUJMRShJ
TlNQRUNUT1IpCisKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9ySlNUeXBlQnVpbGRlcnMu
aD4KKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVHlwZUJ1aWxkZXIuaD4KKyNpbmNsdWRl
IDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisKK25hbWVz
cGFjZSBJbnNwZWN0b3IgeworCisKKworbmFtZXNwYWNlIFR5cGVCdWlsZGVyIHsKKworLy8gRm9y
d2FyZCBkZWNsYXJhdGlvbnMuCituYW1lc3BhY2UgVGVzdCB7CitjbGFzcyBSZWN1cnNpdmVPYmpl
Y3QxOworY2xhc3MgUmVjdXJzaXZlT2JqZWN0MjsKK2NsYXNzIFR5cGVOZWVkaW5nQ2FzdDsKK2Vu
dW0gY2xhc3MgQ2FzdGVkQW5pbWFsczsKK2VudW0gY2xhc3MgVW5jYXN0ZWRBbmltYWxzOworfSAv
LyBUZXN0CisvLyBFbmQgb2YgZm9yd2FyZCBkZWNsYXJhdGlvbnMuCisKKworLy8gVHlwZWRlZnMu
CituYW1lc3BhY2UgVGVzdCB7Cit0eXBlZGVmIGludCBDYXN0ZWRPYmplY3RJZDsKKwordHlwZWRl
ZiBpbnQgVW5jYXN0ZWRPYmplY3RJZDsKK30gLy8gVGVzdAorLy8gRW5kIG9mIHR5cGVkZWZzLgor
CitTdHJpbmcgZ2V0VGVzdEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKTsKKwordGVtcGxhdGU8
dHlwZW5hbWUgVD4gU3RyaW5nIGdldFRlc3RFbnVtQ29uc3RhbnRWYWx1ZShUIGVudW1WYWx1ZSkK
K3sKKyAgICByZXR1cm4gZ2V0VGVzdEVudW1Db25zdGFudFZhbHVlKHN0YXRpY19jYXN0PGludD4o
ZW51bVZhbHVlKSk7Cit9CisKK25hbWVzcGFjZSBUZXN0IHsKKy8qIEEgZHVtbXkgdHlwZSB0aGF0
IHJlcXVpcmVzIHJ1bnRpbWUgY2FzdHMsIGFuZCBmb3JjZXMgbm9uLXByaW1pdGl2ZSByZWZlcmVu
Y2VkIHR5cGVzIHRvIGFsc28gZW1pdCBydW50aW1lIGNhc3QgaGVscGVycy4gKi8KK2NsYXNzIFR5
cGVOZWVkaW5nQ2FzdCA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdEJhc2Ugewor
cHVibGljOgorICAgIGVudW0geworICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCisgICAgICAgIFN0
cmluZ1NldCA9IDEgPDwgMCwKKyAgICAgICAgTnVtYmVyU2V0ID0gMSA8PCAxLAorICAgICAgICBB
bmltYWxzU2V0ID0gMSA8PCAyLAorICAgICAgICBJZFNldCA9IDEgPDwgMywKKyAgICAgICAgVHJl
ZVNldCA9IDEgPDwgNCwKKyAgICAgICAgQWxsRmllbGRzU2V0ID0gKFN0cmluZ1NldCB8IE51bWJl
clNldCB8IEFuaW1hbHNTZXQgfCBJZFNldCB8IFRyZWVTZXQpCisgICAgfTsKKworICAgIHRlbXBs
YXRlPGludCBTVEFURT4KKyAgICBjbGFzcyBCdWlsZGVyIHsKKyAgICBwcml2YXRlOgorICAgICAg
ICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OworCisgICAgICAg
IHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNU
QVRFIHwgU1RFUD4qPih0aGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXIoUGFzc1Jl
ZlB0cjwvKlR5cGVOZWVkaW5nQ2FzdCovSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IHB0cikK
KyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNT
ZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CisgICAgICAgICAgICBtX3Jl
c3VsdCA9IHB0cjsKKyAgICAgICAgfQorICAgICAgICBmcmllbmQgY2xhc3MgVHlwZU5lZWRpbmdD
YXN0OworICAgIHB1YmxpYzoKKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgU3RyaW5nU2V0PiYg
c2V0U3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTdHJpbmdTZXQpLCBwcm9wZXJ0eV9zdHJpbmdfYWxyZWFk
eV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInN0
cmluZyIpLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFN0cmluZ1NldD4o
KTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBOdW1iZXJTZXQ+JiBzZXRO
dW1iZXIoaW50IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCgh
KFNUQVRFICYgTnVtYmVyU2V0KSwgcHJvcGVydHlfbnVtYmVyX2FscmVhZHlfc2V0KTsKKyAgICAg
ICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoQVNDSUlMaXRlcmFsKCJudW1iZXIiKSwgdmFsdWUp
OworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxOdW1iZXJTZXQ+KCk7CisgICAgICAgIH0K
KworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQW5pbWFsc1NldD4mIHNldEFuaW1hbHMoSW5zcGVj
dG9yOjpUeXBlQnVpbGRlcjo6VGVzdDo6Q2FzdGVkQW5pbWFscyB2YWx1ZSkKKyAgICAgICAgewor
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEFuaW1hbHNTZXQpLCBwcm9wZXJ0
eV9hbmltYWxzX2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmco
QVNDSUlMaXRlcmFsKCJhbmltYWxzIiksIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OmdldFRlc3RF
bnVtQ29uc3RhbnRWYWx1ZShzdGF0aWNfY2FzdDxpbnQ+KHZhbHVlKSkpOworICAgICAgICAgICAg
cmV0dXJuIGNhc3RTdGF0ZTxBbmltYWxzU2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgQnVp
bGRlcjxTVEFURSB8IElkU2V0PiYgc2V0SWQoaW50IHZhbHVlKQorICAgICAgICB7CisgICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgSWRTZXQpLCBwcm9wZXJ0eV9pZF9hbHJlYWR5
X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKEFTQ0lJTGl0ZXJhbCgiaWQi
KSwgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxJZFNldD4oKTsKKyAgICAg
ICAgfQorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBUcmVlU2V0PiYgc2V0VHJlZShQYXNzUmVm
UHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDE+IHZhbHVl
KQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVHJlZVNl
dCksIHByb3BlcnR5X3RyZWVfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNl
dE9iamVjdChBU0NJSUxpdGVyYWwoInRyZWUiKSwgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJu
IGNhc3RTdGF0ZTxUcmVlU2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgb3BlcmF0b3IgUmVm
UHRyPFR5cGVOZWVkaW5nQ2FzdD4mICgpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CisgICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoVHlwZU5lZWRpbmdDYXN0KSA9PSBzaXplb2Yo
SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QpLCBjYW5ub3RfY2FzdCk7CisgICAgICAgICAgICBy
ZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPFR5cGVOZWVkaW5nQ2FzdD4qPigmbV9yZXN1
bHQpOworICAgICAgICB9CisKKyAgICAgICAgUGFzc1JlZlB0cjxUeXBlTmVlZGluZ0Nhc3Q+IHJl
bGVhc2UoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gUmVmUHRyPFR5cGVOZWVkaW5n
Q2FzdD4oKnRoaXMpLnJlbGVhc2UoKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICAvKgorICAg
ICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKKyAgICAgKiBSZWZQdHI8VHlwZU5lZWRpbmdDYXN0
PiByZXN1bHQgPSBUeXBlTmVlZGluZ0Nhc3Q6OmNyZWF0ZSgpCisgICAgICogICAgIC5zZXRTdHJp
bmcoLi4uKQorICAgICAqICAgICAuc2V0TnVtYmVyKC4uLikKKyAgICAgKiAgICAgLnNldEFuaW1h
bHMoLi4uKQorICAgICAqICAgICAuc2V0SWQoLi4uKQorICAgICAqICAgICAuc2V0VHJlZSguLi4p
OworICAgICAqLworICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEluc3BlY3Rvcjo6SW5zcGVj
dG9yT2JqZWN0OjpjcmVhdGUoKSk7CisgICAgfQorICAgIHR5cGVkZWYgSW5zcGVjdG9yOjpUeXBl
QnVpbGRlcjo6U3RydWN0SXRlbVRyYWl0cyBJdGVtVHJhaXRzOworfTsKKworLyogICovCitlbnVt
IGNsYXNzIFVuY2FzdGVkQW5pbWFscyB7CisgICAgUGlncyA9IDQsCisgICAgQ293cyA9IDUsCisg
ICAgQ2F0cyA9IDYsCisgICAgSGVucyA9IDEsCit9OyAvLyBlbnVtIGNsYXNzIFVuY2FzdGVkQW5p
bWFscworLyogICovCitlbnVtIGNsYXNzIENhc3RlZEFuaW1hbHMgeworICAgIER1Y2tzID0gMCwK
KyAgICBIZW5zID0gMSwKKyAgICBDcm93cyA9IDIsCisgICAgRmxhbWluZ29zID0gMywKK307IC8v
IGVudW0gY2xhc3MgQ2FzdGVkQW5pbWFscworY2xhc3MgUmVjdXJzaXZlT2JqZWN0MSA6IHB1Ymxp
YyBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdEJhc2UgeworcHVibGljOgorICAgIGVudW0gewor
ICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCisgICAgICAgIEFsbEZpZWxkc1NldCA9IDAKKyAgICB9
OworCisgICAgdGVtcGxhdGU8aW50IFNUQVRFPgorICAgIGNsYXNzIEJ1aWxkZXIgeworICAgIHBy
aXZhdGU6CisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gbV9yZXN1
bHQ7CisKKyAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYg
Y2FzdFN0YXRlKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9j
YXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOworICAgICAgICB9CisKKyAgICAgICAg
QnVpbGRlcihQYXNzUmVmUHRyPC8qUmVjdXJzaXZlT2JqZWN0MSovSW5zcGVjdG9yOjpJbnNwZWN0
b3JPYmplY3Q+IHB0cikKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RB
VEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7Cisg
ICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKKyAgICAgICAgfQorICAgICAgICBmcmllbmQgY2xh
c3MgUmVjdXJzaXZlT2JqZWN0MTsKKyAgICBwdWJsaWM6CisKKyAgICAgICAgb3BlcmF0b3IgUmVm
UHRyPFJlY3Vyc2l2ZU9iamVjdDE+JiAoKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxF
X0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOworICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKFJlY3Vyc2l2ZU9iamVjdDEpID09IHNpemVv
ZihJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCksIGNhbm5vdF9jYXN0KTsKKyAgICAgICAgICAg
IHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8UmVjdXJzaXZlT2JqZWN0MT4qPigmbV9y
ZXN1bHQpOworICAgICAgICB9CisKKyAgICAgICAgUGFzc1JlZlB0cjxSZWN1cnNpdmVPYmplY3Qx
PiByZWxlYXNlKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxSZWN1cnNp
dmVPYmplY3QxPigqdGhpcykucmVsZWFzZSgpOworICAgICAgICB9CisgICAgfTsKKworICAgIC8q
CisgICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgorICAgICAqIFJlZlB0cjxSZWN1cnNpdmVP
YmplY3QxPiByZXN1bHQgPSBSZWN1cnNpdmVPYmplY3QxOjpjcmVhdGUoKTsKKyAgICAgKi8KKyAg
ICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdDo6Y3Jl
YXRlKCkpOworICAgIH0KKyAgICB0eXBlZGVmIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlN0cnVj
dEl0ZW1UcmFpdHMgSXRlbVRyYWl0czsKKworICAgIHZvaWQgc2V0T2JqKFBhc3NSZWZQdHI8SW5z
cGVjdG9yOjpUeXBlQnVpbGRlcjo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0Mj4gdmFsdWUpCisgICAg
eworICAgICAgICBJbnNwZWN0b3JPYmplY3RCYXNlOjpzZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJv
YmoiKSwgdmFsdWUpOworICAgIH0KK307CisKK2NsYXNzIFJlY3Vyc2l2ZU9iamVjdDIgOiBwdWJs
aWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3RCYXNlIHsKK3B1YmxpYzoKKyAgICBlbnVtIHsK
KyAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAorICAgICAgICBBbGxGaWVsZHNTZXQgPSAwCisgICAg
fTsKKworICAgIHRlbXBsYXRlPGludCBTVEFURT4KKyAgICBjbGFzcyBCdWlsZGVyIHsKKyAgICBw
cml2YXRlOgorICAgICAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IG1fcmVz
dWx0OworCisgICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4m
IGNhc3RTdGF0ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRf
Y2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKKyAgICAgICAgfQorCisgICAgICAg
IEJ1aWxkZXIoUGFzc1JlZlB0cjwvKlJlY3Vyc2l2ZU9iamVjdDIqL0luc3BlY3Rvcjo6SW5zcGVj
dG9yT2JqZWN0PiBwdHIpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNU
QVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwor
ICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CisgICAgICAgIH0KKyAgICAgICAgZnJpZW5kIGNs
YXNzIFJlY3Vyc2l2ZU9iamVjdDI7CisgICAgcHVibGljOgorCisgICAgICAgIG9wZXJhdG9yIFJl
ZlB0cjxSZWN1cnNpdmVPYmplY3QyPiYgKCkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKKyAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihSZWN1cnNpdmVPYmplY3QyKSA9PSBzaXpl
b2YoSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QpLCBjYW5ub3RfY2FzdCk7CisgICAgICAgICAg
ICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPFJlY3Vyc2l2ZU9iamVjdDI+Kj4oJm1f
cmVzdWx0KTsKKyAgICAgICAgfQorCisgICAgICAgIFBhc3NSZWZQdHI8UmVjdXJzaXZlT2JqZWN0
Mj4gcmVsZWFzZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBSZWZQdHI8UmVjdXJz
aXZlT2JqZWN0Mj4oKnRoaXMpLnJlbGVhc2UoKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICAv
KgorICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKKyAgICAgKiBSZWZQdHI8UmVjdXJzaXZl
T2JqZWN0Mj4gcmVzdWx0ID0gUmVjdXJzaXZlT2JqZWN0Mjo6Y3JlYXRlKCk7CisgICAgICovCisg
ICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCisgICAgeworICAgICAgICBy
ZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q6OmNy
ZWF0ZSgpKTsKKyAgICB9CisgICAgdHlwZWRlZiBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpTdHJ1
Y3RJdGVtVHJhaXRzIEl0ZW1UcmFpdHM7CisKKyAgICB2b2lkIHNldE9iaihQYXNzUmVmUHRyPElu
c3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDE+IHZhbHVlKQorICAg
IHsKKyAgICAgICAgSW5zcGVjdG9yT2JqZWN0QmFzZTo6c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgi
b2JqIiksIHZhbHVlKTsKKyAgICB9Cit9OworCit9IC8vIFRlc3QKKwordGVtcGxhdGU8PiBzdHJ1
Y3QgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpUZXN0OjpDYXN0ZWRBbmlt
YWxzPiB7CisjaWYgIUFTU0VSVF9ESVNBQkxFRAorc3RhdGljIHZvaWQgYXNzZXJ0VmFsdWVIYXNF
eHBlY3RlZFR5cGUoSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSopOworI2VuZGlmIC8vICFBU1NF
UlRfRElTQUJMRUQKK307Cit0ZW1wbGF0ZTw+IHN0cnVjdCBCaW5kaW5nVHJhaXRzPEluc3BlY3Rv
cjo6VHlwZUJ1aWxkZXI6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdD4geworc3RhdGljIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0PiBydW50aW1l
Q2FzdChQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+IHZhbHVlKTsKKyNpZiAh
QVNTRVJUX0RJU0FCTEVECitzdGF0aWMgdm9pZCBhc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShJ
bnNwZWN0b3I6Okluc3BlY3RvclZhbHVlKik7CisjZW5kaWYgLy8gIUFTU0VSVF9ESVNBQkxFRAor
fTsKK3RlbXBsYXRlPD4gc3RydWN0IEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpUeXBlQnVpbGRl
cjo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0MT4geworI2lmICFBU1NFUlRfRElTQUJMRUQKK3N0YXRp
YyB2b2lkIGFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFs
dWUqKTsKKyNlbmRpZiAvLyAhQVNTRVJUX0RJU0FCTEVECit9OwordGVtcGxhdGU8PiBzdHJ1Y3Qg
QmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpUZXN0OjpSZWN1cnNpdmVPYmpl
Y3QyPiB7CisjaWYgIUFTU0VSVF9ESVNBQkxFRAorc3RhdGljIHZvaWQgYXNzZXJ0VmFsdWVIYXNF
eHBlY3RlZFR5cGUoSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSopOworI2VuZGlmIC8vICFBU1NF
UlRfRElTQUJMRUQKK307CisKK30gLy8gbmFtZXNwYWNlIFR5cGVCdWlsZGVyCisKK30gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKworI2VuZGlm
IC8vICFkZWZpbmVkKEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnNfaCkKKyMjIyBFbmQgRmlsZTog
SW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JU
ZXN0VHlwZUJ1aWxkZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0
eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5oIgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikK
KworI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7
CisKK25hbWVzcGFjZSBUeXBlQnVpbGRlciB7CisKK3N0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBl
bnVtX2NvbnN0YW50X3ZhbHVlc1tdID0geworICAgICJEdWNrcyIsCisgICAgIkhlbnMiLAorICAg
ICJDcm93cyIsCisgICAgIkZsYW1pbmdvcyIsCisgICAgIlBpZ3MiLAorICAgICJDb3dzIiwKKyAg
ICAiQ2F0cyIsCit9OworCitTdHJpbmcgZ2V0VGVzdEVudW1Db25zdGFudFZhbHVlKGludCBjb2Rl
KSB7CisgICAgcmV0dXJuIGVudW1fY29uc3RhbnRfdmFsdWVzW2NvZGVdOworfQorCisKKworI2lm
ICFBU1NFUlRfRElTQUJMRUQKK3ZvaWQgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlR5cGVCdWls
ZGVyOjpUZXN0OjpDYXN0ZWRBbmltYWxzPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSW5z
cGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSogdmFsdWUpCit7CisgICAgU3RyaW5nIHM7CisgICAgYm9v
bCBjYXN0X3JlcyA9IHZhbHVlLT5hc1N0cmluZygmcyk7CisgICAgQVNTRVJUKGNhc3RfcmVzKTsK
KyAgICBBU1NFUlQocyA9PSAiRHVja3MiIHx8IHMgPT0gIkhlbnMiIHx8IHMgPT0gIkNyb3dzIiB8
fCBzID09ICJGbGFtaW5nb3MiKTsKK30KKyNlbmRpZiAvLyAhQVNTRVJUX0RJU0FCTEVECisKKyNp
ZiAhQVNTRVJUX0RJU0FCTEVECit2b2lkIEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpUeXBlQnVp
bGRlcjo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0Pjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUo
SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSogdmFsdWUpCit7CisgICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gb2JqZWN0OworICAgIGJvb2wgY2FzdFJlcyA9IHZhbHVlLT5hc09iamVjdCgmb2Jq
ZWN0KTsKKyAgICBBU1NFUlRfVU5VU0VEKGNhc3RSZXMsIGNhc3RSZXMpOworICAgIHsKKyAgICAg
ICAgSW5zcGVjdG9yT2JqZWN0OjppdGVyYXRvciBzdHJpbmdQb3MgPSBvYmplY3QtPmZpbmQoQVND
SUlMaXRlcmFsKCJzdHJpbmciKSk7CisgICAgICAgIEFTU0VSVChzdHJpbmdQb3MgIT0gb2JqZWN0
LT5lbmQoKSk7CisgICAgICAgIEJpbmRpbmdUcmFpdHM8U3RyaW5nPjo6YXNzZXJ0VmFsdWVIYXNF
eHBlY3RlZFR5cGUoc3RyaW5nUG9zLT52YWx1ZS5nZXQoKSk7CisgICAgfQorICAgIHsKKyAgICAg
ICAgSW5zcGVjdG9yT2JqZWN0OjppdGVyYXRvciBudW1iZXJQb3MgPSBvYmplY3QtPmZpbmQoQVND
SUlMaXRlcmFsKCJudW1iZXIiKSk7CisgICAgICAgIEFTU0VSVChudW1iZXJQb3MgIT0gb2JqZWN0
LT5lbmQoKSk7CisgICAgICAgIEJpbmRpbmdUcmFpdHM8aW50Pjo6YXNzZXJ0VmFsdWVIYXNFeHBl
Y3RlZFR5cGUobnVtYmVyUG9zLT52YWx1ZS5nZXQoKSk7CisgICAgfQorICAgIHsKKyAgICAgICAg
SW5zcGVjdG9yT2JqZWN0OjppdGVyYXRvciBhbmltYWxzUG9zID0gb2JqZWN0LT5maW5kKEFTQ0lJ
TGl0ZXJhbCgiYW5pbWFscyIpKTsKKyAgICAgICAgQVNTRVJUKGFuaW1hbHNQb3MgIT0gb2JqZWN0
LT5lbmQoKSk7CisgICAgICAgIEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6
VGVzdDo6Q2FzdGVkQW5pbWFscz46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKGFuaW1hbHNQ
b3MtPnZhbHVlLmdldCgpKTsKKyAgICB9CisgICAgeworICAgICAgICBJbnNwZWN0b3JPYmplY3Q6
Oml0ZXJhdG9yIGlkUG9zID0gb2JqZWN0LT5maW5kKEFTQ0lJTGl0ZXJhbCgiaWQiKSk7CisgICAg
ICAgIEFTU0VSVChpZFBvcyAhPSBvYmplY3QtPmVuZCgpKTsKKyAgICAgICAgQmluZGluZ1RyYWl0
czxpbnQ+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShpZFBvcy0+dmFsdWUuZ2V0KCkpOwor
ICAgIH0KKyAgICB7CisgICAgICAgIEluc3BlY3Rvck9iamVjdDo6aXRlcmF0b3IgdHJlZVBvcyA9
IG9iamVjdC0+ZmluZChBU0NJSUxpdGVyYWwoInRyZWUiKSk7CisgICAgICAgIEFTU0VSVCh0cmVl
UG9zICE9IG9iamVjdC0+ZW5kKCkpOworICAgICAgICBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6
VHlwZUJ1aWxkZXI6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDE+Ojphc3NlcnRWYWx1ZUhhc0V4cGVj
dGVkVHlwZSh0cmVlUG9zLT52YWx1ZS5nZXQoKSk7CisgICAgfQorCisgICAgaW50IGZvdW5kUHJv
cGVydGllc0NvdW50ID0gNTsKKyAgICBpZiAoZm91bmRQcm9wZXJ0aWVzQ291bnQgIT0gb2JqZWN0
LT5zaXplKCkpCisgICAgICAgIEZBVEFMKCJVbmV4cGVjdGVkIHByb3BlcnRpZXMgaW4gb2JqZWN0
OiAlc1xuIiwgb2JqZWN0LT50b0pTT05TdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSk7Cit9CisjZW5k
aWYgLy8gIUFTU0VSVF9ESVNBQkxFRAorCitQYXNzUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxk
ZXI6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdD4gQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlR5cGVC
dWlsZGVyOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3Q+OjpydW50aW1lQ2FzdChQYXNzUmVmUHRyPElu
c3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+IHZhbHVlKQoreworICAgIFJlZlB0cjxJbnNwZWN0b3I6
Okluc3BlY3Rvck9iamVjdD4gb2JqZWN0OworICAgIGJvb2wgY2FzdFJlcyA9IHZhbHVlLT5hc09i
amVjdCgmb2JqZWN0KTsKKyAgICBBU1NFUlRfVU5VU0VEKGNhc3RSZXMsIGNhc3RSZXMpOworI2lm
ICFBU1NFUlRfRElTQUJMRUQKKyAgICBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6VHlwZUJ1aWxk
ZXI6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdD46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKG9i
amVjdC5nZXQoKSk7CisjZW5kaWYgIC8vICFBU1NFUlRfRElTQUJMRUQKKyAgICBDT01QSUxFX0FT
U0VSVChzaXplb2YoSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0
KSA9PSBzaXplb2YoSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3RCYXNlKSwgdHlwZV9jYXN0X3By
b2JsZW0pOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpU
ZXN0OjpUeXBlTmVlZGluZ0Nhc3QqPihzdGF0aWNfY2FzdDxJbnNwZWN0b3I6Okluc3BlY3Rvck9i
amVjdEJhc2UqPihvYmplY3QuZ2V0KCkpKTsKK30KKworCisjaWYgIUFTU0VSVF9ESVNBQkxFRAor
dm9pZCBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlRlc3Q6OlJlY3Vyc2l2
ZU9iamVjdDE+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShJbnNwZWN0b3I6Okluc3BlY3Rv
clZhbHVlKiB2YWx1ZSkKK3sKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBvYmplY3Q7Cisg
ICAgYm9vbCBjYXN0UmVzID0gdmFsdWUtPmFzT2JqZWN0KCZvYmplY3QpOworICAgIEFTU0VSVF9V
TlVTRUQoY2FzdFJlcywgY2FzdFJlcyk7CisKKyAgICBpbnQgZm91bmRQcm9wZXJ0aWVzQ291bnQg
PSAwOworICAgIHsKKyAgICAgICAgSW5zcGVjdG9yT2JqZWN0OjppdGVyYXRvciBvYmpQb3MgPSBv
YmplY3QtPmZpbmQoQVNDSUlMaXRlcmFsKCJvYmoiKSk7CisgICAgICAgIGlmIChvYmpQb3MgIT0g
b2JqZWN0LT5lbmQoKSkgeworICAgICAgICAgICAgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlR5
cGVCdWlsZGVyOjpUZXN0OjpSZWN1cnNpdmVPYmplY3QyPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3Rl
ZFR5cGUob2JqUG9zLT52YWx1ZS5nZXQoKSk7CisgICAgICAgICAgICArK2ZvdW5kUHJvcGVydGll
c0NvdW50OworICAgICAgICB9CisgICAgfQorICAgIGlmIChmb3VuZFByb3BlcnRpZXNDb3VudCAh
PSBvYmplY3QtPnNpemUoKSkKKyAgICAgICAgRkFUQUwoIlVuZXhwZWN0ZWQgcHJvcGVydGllcyBp
biBvYmplY3Q6ICVzXG4iLCBvYmplY3QtPnRvSlNPTlN0cmluZygpLmFzY2lpKCkuZGF0YSgpKTsK
K30KKyNlbmRpZiAvLyAhQVNTRVJUX0RJU0FCTEVECisKKyNpZiAhQVNTRVJUX0RJU0FCTEVECit2
b2lkIEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6VGVzdDo6UmVjdXJzaXZl
T2JqZWN0Mj46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKEluc3BlY3Rvcjo6SW5zcGVjdG9y
VmFsdWUqIHZhbHVlKQoreworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG9iamVjdDsKKyAg
ICBib29sIGNhc3RSZXMgPSB2YWx1ZS0+YXNPYmplY3QoJm9iamVjdCk7CisgICAgQVNTRVJUX1VO
VVNFRChjYXN0UmVzLCBjYXN0UmVzKTsKKworICAgIGludCBmb3VuZFByb3BlcnRpZXNDb3VudCA9
IDA7CisgICAgeworICAgICAgICBJbnNwZWN0b3JPYmplY3Q6Oml0ZXJhdG9yIG9ialBvcyA9IG9i
amVjdC0+ZmluZChBU0NJSUxpdGVyYWwoIm9iaiIpKTsKKyAgICAgICAgaWYgKG9ialBvcyAhPSBv
YmplY3QtPmVuZCgpKSB7CisgICAgICAgICAgICBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6VHlw
ZUJ1aWxkZXI6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDE+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVk
VHlwZShvYmpQb3MtPnZhbHVlLmdldCgpKTsKKyAgICAgICAgICAgICsrZm91bmRQcm9wZXJ0aWVz
Q291bnQ7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKGZvdW5kUHJvcGVydGllc0NvdW50ICE9
IG9iamVjdC0+c2l6ZSgpKQorICAgICAgICBGQVRBTCgiVW5leHBlY3RlZCBwcm9wZXJ0aWVzIGlu
IG9iamVjdDogJXNcbiIsIG9iamVjdC0+dG9KU09OU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOwor
fQorI2VuZGlmIC8vICFBU1NFUlRfRElTQUJMRUQKKworfSAvLyBuYW1lc3BhY2UgVHlwZUJ1aWxk
ZXIKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVD
VE9SKQorCisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuY3BwCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFp
bC1vbi1kdXBsaWNhdGUtdHlwZS1kZWNsYXJhdGlvbnMuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWR1cGxpY2F0ZS10eXBlLWRlY2xh
cmF0aW9ucy5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjcwMmZjNmEzMjcwYTY0NmE0NTA0NDdmZGMwNDAxMzk5
NWE5NDJiZjAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1kdXBsaWNhdGUtdHlwZS1kZWNsYXJhdGlvbnMuanNv
bgpAQCAtMCwwICsxLDE1IEBACit7CisgICAgImRvbWFpbiI6ICJSdW50aW1lIiwKKyAgICAidHlw
ZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJSZW1vdGVPYmplY3RJZCIsCisg
ICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjog
IlVuaXF1ZSBvYmplY3QgaWRlbnRpZmllci4iCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAg
ICAgICAgICJpZCI6ICJSZW1vdGVPYmplY3RJZCIsCisgICAgICAgICAgICAidHlwZSI6ICJzdHJp
bmciLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBvYmplY3QgaWRlbnRpZmll
ci4iCisgICAgICAgIH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1lbnVtLXdpdGgtbm8tdmFsdWVzLmpz
b24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1v
bi1lbnVtLXdpdGgtbm8tdmFsdWVzLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjMyYTdjMzI0OWE0MGJkNDQ3
ZTE5YTkyYThlNTY5MzBkM2Y4NTk1NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWVudW0td2l0aC1uby12YWx1
ZXMuanNvbgpAQCAtMCwwICsxLDEwIEBACit7CisgICAgImRvbWFpbiI6ICJEYXRhYmFzZSIsCisg
ICAgInR5cGVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiUHJpbWFyeUNvbG9y
cyIsCisgICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAorICAgICAgICAgICAgImVudW0iOiBb
XQorICAgICAgICB9CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tc3RyaW5nLXR5cGVkLW9wdGlvbmFsLXBh
cmFtZXRlci1mbGFnLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZmFpbC1vbi1zdHJpbmctdHlwZWQtb3B0aW9uYWwtcGFyYW1ldGVyLWZsYWcuanNv
bgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi40MDEyYzc5YjZiMzhjMjFkZmY2MDdmZWM5ZWU5MGIyODAzMTBmOTA4Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2ZhaWwtb24tc3RyaW5nLXR5cGVkLW9wdGlvbmFsLXBhcmFtZXRlci1mbGFnLmpzb24K
QEAgLTAsMCArMSwxOCBAQAoreworICAgICJkb21haW4iOiAiRGF0YWJhc2UiLAorICAgICJ0eXBl
cyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIkRhdGFiYXNlSWQiLAorICAgICAg
ICAgICAgInR5cGUiOiAic3RyaW5nIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmlx
dWUgaWRlbnRpZmllciBvZiBEYXRhYmFzZSBvYmplY3QuIgorICAgICAgICB9CisgICAgXSwKKyAg
ICAiZXZlbnRzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJkaWRFeGVjdXRl
T3B0aW9uYWxQYXJhbWV0ZXJzIiwKKyAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWworICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJzdHJpbmciLCAib3B0
aW9uYWwiOiAidHJ1ZSIgfQorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXQorfQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2Zh
aWwtb24tc3RyaW5nLXR5cGVkLW9wdGlvbmFsLXR5cGUtbWVtYmVyLmpzb24gYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1zdHJpbmctdHlwZWQt
b3B0aW9uYWwtdHlwZS1tZW1iZXIuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jYTNlZjI4YThmODgxNGNjNjE3
ZmI1ZDViYzIxMzA2ZDBhYWQ0ZmQwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tc3RyaW5nLXR5cGVkLW9wdGlv
bmFsLXR5cGUtbWVtYmVyLmpzb24KQEAgLTAsMCArMSwxNiBAQAorWworeworICAgICJkb21haW4i
OiAiRGF0YWJhc2UiLAorICAgICJ0eXBlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlk
IjogIkVycm9yIiwKKyAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCisgICAgICAgICAgICAi
ZGVzY3JpcHRpb24iOiAiRGF0YWJhc2UgZXJyb3IuIiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVz
IjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibWVzc2FnZSIsICJ0eXBlIjogInN0cmlu
ZyIsICJkZXNjcmlwdGlvbiI6ICJFcnJvciBtZXNzYWdlLiIgfSwKKyAgICAgICAgICAgICAgICB7
ICJuYW1lIjogImNvZGUiLCAidHlwZSI6ICJpbnRlZ2VyIiwgImRlc2NyaXB0aW9uIjogIkVycm9y
IGNvZGUuIiwgIm9wdGlvbmFsIjogImZhbHNlIiB9CisgICAgICAgICAgICBdCisgICAgICAgIH0K
KyAgICBdCit9CitdCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZmFpbC1vbi10eXBlLWRlY2xhcmF0aW9uLXVzaW5nLXR5cGUtcmVmZXJl
bmNlLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
ZmFpbC1vbi10eXBlLWRlY2xhcmF0aW9uLXVzaW5nLXR5cGUtcmVmZXJlbmNlLmpzb24KbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uMTliNzU5MGNjYzZmNmJjMzQ0M2E0YTI4M2NhNmZjY2ZkZjMyNzczNAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9m
YWlsLW9uLXR5cGUtZGVjbGFyYXRpb24tdXNpbmctdHlwZS1yZWZlcmVuY2UuanNvbgpAQCAtMCww
ICsxLDEzIEBACitbCit7CisgICAgImRvbWFpbiI6ICJSdW50aW1lIiwKKyAgICAidHlwZXMiOiBb
CisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJSZW1vdGVPYmplY3RJZCIsCisgICAgICAg
ICAgICAidHlwZSI6ICJvYmplY3QiLAorICAgICAgICAgICAgIiRyZWYiOiAiU29tZVR5cGUiLAor
ICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBvYmplY3QgaWRlbnRpZmllci4iCisg
ICAgICAgIH0KKyAgICBdCit9CitdCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi10eXBlLXdpdGgtbG93ZXJjYXNlLW5hbWUu
anNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWls
LW9uLXR5cGUtd2l0aC1sb3dlcmNhc2UtbmFtZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjUzMTkwMWU0YTlh
ZDk5MzZiMDFiYmFlZDk3YTFkNGRhMzQ4NDc4YjAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi10eXBlLXdpdGgt
bG93ZXJjYXNlLW5hbWUuanNvbgpAQCAtMCwwICsxLDEwIEBACit7CisgICAgImRvbWFpbiI6ICJE
YXRhYmFzZSIsCisgICAgInR5cGVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAi
ZGF0YWJhc2VJZCIsCisgICAgICAgICAgICAidHlwZSI6ICJpbnRlZ2VyIiwKKyAgICAgICAgICAg
ICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUgaWRlbnRpZmllciBvZiBEYXRhYmFzZSBvYmplY3QuIgor
ICAgICAgICB9CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVyZW5jZS1pbi10
eXBlLWRlY2xhcmF0aW9uLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZmFpbC1vbi11bmtub3duLXR5cGUtcmVmZXJlbmNlLWluLXR5cGUtZGVjbGFy
YXRpb24uanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kNjg4N2EyNzQxMTkwMGE4MGQ1MGYwMDNlYWMzNmMxM2E5
OWZhZTU4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVyZW5jZS1pbi10eXBlLWRl
Y2xhcmF0aW9uLmpzb24KQEAgLTAsMCArMSwxMiBAQAorWworeworICAgICJkb21haW4iOiAiUnVu
dGltZSIsCisgICAgInR5cGVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiUmVt
b3RlT2JqZWN0SWQiLAorICAgICAgICAgICAgInR5cGUiOiAiZHJhZ29uIiwKKyAgICAgICAgICAg
ICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUgb2JqZWN0IGlkZW50aWZpZXIuIgorICAgICAgICB9Cisg
ICAgXQorfQorXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2ZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVyZW5jZS1pbi10eXBlLW1lbWJl
ci5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2Zh
aWwtb24tdW5rbm93bi10eXBlLXJlZmVyZW5jZS1pbi10eXBlLW1lbWJlci5qc29uCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmI4MTdkYjUwNDRkYzFmMjg1NTcwMDhjMWYxNzYxZjFiMDY4ZjRjZTYKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFp
bC1vbi11bmtub3duLXR5cGUtcmVmZXJlbmNlLWluLXR5cGUtbWVtYmVyLmpzb24KQEAgLTAsMCAr
MSwxNSBAQAorWworeworICAgICJkb21haW4iOiAiRmFudGFzeSIsCisgICAgInR5cGVzIjogWwor
ICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiRHJhZ29uRWdnIiwKKyAgICAgICAgICAgICJ0
eXBlIjogIm9iamVjdCIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiQSBkcmFnb24gZWdn
LiIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1l
IjogImNvbG9yIiwgIiRyZWYiOiAiQ29sb3IiIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQor
ICAgIF0KK30KK10KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9zYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3NhbWUtdHlwZS1pZC1kaWZm
ZXJlbnQtZG9tYWluLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2JmNGRmZjVjY2MyOWQwZThjMWZhNGIyZGQz
MjgzZTc3MTYzMmM3ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9zYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29u
CkBAIC0wLDAgKzEsMjIgQEAKK1sKK3sKKyAgICAiZG9tYWluIjogIlJ1bnRpbWUiLAorICAgICJ0
eXBlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIlJlbW90ZU9iamVjdElkIiwK
KyAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24i
OiAiVW5pcXVlIG9iamVjdCBpZGVudGlmaWVyLiIKKyAgICAgICAgfQorICAgIF0KK30sCit7Cisg
ICAgImRvbWFpbiI6ICJSdW50aW1lMiIsCisgICAgInR5cGVzIjogWworICAgICAgICB7CisgICAg
ICAgICAgICAiaWQiOiAiUmVtb3RlT2JqZWN0SWQiLAorICAgICAgICAgICAgInR5cGUiOiAic3Ry
aW5nIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUgb2JqZWN0IGlkZW50aWZp
ZXIuIgorICAgICAgICB9CisgICAgXQorfQorXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3NoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0
dGVycy5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L3NoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjIwYTBjMTU1
Mjc1MGY2MjgyODhjZmY0MTkzOTZiZDZmNmFmNzQ5ZmUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvc2hhZG93ZWQtb3B0aW9u
YWwtdHlwZS1zZXR0ZXJzLmpzb24KQEAgLTAsMCArMSwzMSBAQAoreworICAgICJkb21haW4iOiAi
UnVudGltZSIsCisgICAgInR5cGVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAi
S2V5UGF0aCIsCisgICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAorICAgICAgICAgICAgImRl
c2NyaXB0aW9uIjogIktleSBwYXRoLiIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IFsKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJuYW1lIjogInR5cGUiLAorICAg
ICAgICAgICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAorICAgICAgICAgICAgICAgICAgICAi
ZW51bSI6IFsibnVsbCIsICJzdHJpbmciLCAiYXJyYXkiXSwKKyAgICAgICAgICAgICAgICAgICAg
ImRlc2NyaXB0aW9uIjogIktleSBwYXRoIHR5cGUuIgorICAgICAgICAgICAgICAgIH0sCisgICAg
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJzdHJpbmciLAorICAg
ICAgICAgICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAorICAgICAgICAgICAgICAgICAgICAi
b3B0aW9uYWwiOiB0cnVlLAorICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiU3Ry
aW5nIHZhbHVlLiIKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgIm5hbWUiOiAiYXJyYXkiLAorICAgICAgICAgICAgICAgICAgICAidHlw
ZSI6ICJhcnJheSIsCisgICAgICAgICAgICAgICAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAg
ICAgICAgICAgICAgICAgICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9LAorICAgICAgICAg
ICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiQXJyYXkgdmFsdWUuIgorICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0KK30KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy90eXBlLWRlY2xhcmF0aW9u
LWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy90eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5
cGUuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5jYmM5ZDUzOTQ3OGRiNDk1Yzk2MDY3ZWNkNTRhOTViZTUyZjhk
MDcwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL3R5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29u
CkBAIC0wLDAgKzEsMTAgQEAKK3sKKyAgICAiZG9tYWluIjogIlJ1bnRpbWUiLAorICAgICJ0eXBl
cyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIlJlbW90ZU9iamVjdElkIiwKKyAg
ICAgICAgICAgICJ0eXBlIjogImludGVnZXIiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjog
IlVuaXF1ZSBvYmplY3QgaWRlbnRpZmllci4iCisgICAgICAgIH0KKyAgICBdCit9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvdHlwZS1k
ZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24KbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uY2ZiMDhiZDk0MGI2NGZiNjYwMzk2NWNlMWIwNGQzZmM5NzQ5ZWE5MAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy90
eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbgpAQCAtMCwwICsxLDUwIEBACitbCit7Cisg
ICAgImRvbWFpbiI6ICJEZWJ1Z2dlciIsCisgICAgInR5cGVzIjogWworICAgICAgICB7CisgICAg
ICAgICAgICAiaWQiOiAiQnJlYWtwb2ludElkIiwKKyAgICAgICAgICAgICJ0eXBlIjogImludGVn
ZXIiCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJSZWFzb24iLAor
ICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKKyAgICAgICAgICAgICJlbnVtIjogWyJEaWVk
IiwgIkZhaW50ZWQiLCAiSHVuZ3J5Il0KKyAgICAgICAgfQorICAgIF0KK30sCit7CisgICAgImRv
bWFpbiI6ICJSdW50aW1lIiwKKyAgICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAg
ICJpZCI6ICJPYmplY3RJZCIsCisgICAgICAgICAgICAidHlwZSI6ICJpbnRlZ2VyIgorICAgICAg
ICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiTHVja3lOdW1iZXJzIiwKKyAgICAg
ICAgICAgICJ0eXBlIjogImFycmF5IiwKKyAgICAgICAgICAgICJpdGVtcyI6IHsgInR5cGUiOiAi
aW50ZWdlciIgfQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiQmFi
eU5hbWVzIiwKKyAgICAgICAgICAgICJ0eXBlIjogImFycmF5IiwKKyAgICAgICAgICAgICJpdGVt
cyI6IHsgInR5cGUiOiAic3RyaW5nIiB9CisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAg
ICAgICJpZCI6ICJOZXdPYmplY3RzIiwKKyAgICAgICAgICAgICJ0eXBlIjogImFycmF5IiwKKyAg
ICAgICAgICAgICJpdGVtcyI6IHsgIiRyZWYiOiAiT2JqZWN0SWQiIH0KKyAgICAgICAgfSwKKyAg
ICAgICAgeworICAgICAgICAgICAgImlkIjogIk9sZE9iamVjdHMiLAorICAgICAgICAgICAgInR5
cGUiOiAiYXJyYXkiLAorICAgICAgICAgICAgIml0ZW1zIjogeyAiJHJlZiI6ICJEZWJ1Z2dlci5C
cmVha3BvaW50SWQiIH0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjog
IlN0b3BSZWFzb25zIiwKKyAgICAgICAgICAgICJ0eXBlIjogImFycmF5IiwKKyAgICAgICAgICAg
ICJpdGVtcyI6IHsgIiRyZWYiOiAiRGVidWdnZXIuUmVhc29uIiB9CisgICAgICAgIH0KKyAgICBd
Cit9CitdCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbiBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy90eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlw
ZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjlmMGFlZTljOTFiOTVhYmFmMzg3ZTcyYTkxYTMzMzhiNTc5ZGE5
YWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgpAQCAtMCwwICsxLDE1
IEBACit7CisgICAgImRvbWFpbiI6ICJSdW50aW1lIiwKKyAgICAidHlwZXMiOiBbCisgICAgICAg
IHsKKyAgICAgICAgICAgICJpZCI6ICJGYXJtQW5pbWFscyIsCisgICAgICAgICAgICAidHlwZSI6
ICJzdHJpbmciLAorICAgICAgICAgICAgImVudW0iOiBbIlBpZ3MiLCAiQ293cyIsICJDYXRzIiwg
IkhlbnMiXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiVHdvTGVn
Z2VkQW5pbWFscyIsCisgICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAorICAgICAgICAgICAg
ImVudW0iOiBbIkR1Y2tzIiwgIkhlbnMiLCAiQ3Jvd3MiLCAiRmxhbWluZ29zIl0KKyAgICAgICAg
fQorICAgIF0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy90eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24gYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvdHlwZS1kZWNsYXJhdGlvbi1v
YmplY3QtdHlwZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZmNTdhZDJjZjVmNzhiYzY1NGRmODFhOTNkYmI1
NjA2OWQxNWE0MzEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCkBA
IC0wLDAgKzEsOTcgQEAKK1sKK3sKKyAgICAiZG9tYWluIjogIkRhdGFiYXNlIiwKKyAgICAiZGVz
Y3JpcHRpb24iOiAiVGVzdCB0eXBlIGJ1aWxkZXIgZ2VuZXJhdGlvbiBvZiB2YXJpb3VzIG9iamVj
dCB0eXBlcy4iLAorICAgICJ0eXBlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjog
IkVycm9yIiwKKyAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCisgICAgICAgICAgICAiZGVz
Y3JpcHRpb24iOiAiRGF0YWJhc2UgZXJyb3IuIiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjog
WworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibWVzc2FnZSIsICJ0eXBlIjogInN0cmluZyIs
ICJkZXNjcmlwdGlvbiI6ICJFcnJvciBtZXNzYWdlLiIgfSwKKyAgICAgICAgICAgICAgICB7ICJu
YW1lIjogImNvZGUiLCAidHlwZSI6ICJpbnRlZ2VyIiwgImRlc2NyaXB0aW9uIjogIkVycm9yIGNv
ZGUuIiB9CisgICAgICAgICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAg
ICJpZCI6ICJPcHRpb25hbFBhcmFtZXRlckJ1bmRsZSIsCisgICAgICAgICAgICAidHlwZSI6ICJv
YmplY3QiLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCisgICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogImFycmF5IiwgIm9wdGlvbmFsIjogdHJ1ZSwg
Iml0ZW1zIjogeyAidHlwZSI6ICJzdHJpbmciIH0gfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1l
IjogIm5vdGVzIiwgInR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAidGltZXN0YW1wIiwgInR5cGUiOiAibnVtYmVyIiwgIm9wdGlv
bmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidmFsdWVzIiwgInR5cGUi
OiAib2JqZWN0IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAicGF5bG9hZCIsICJ0eXBlIjogImFueSIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogImVycm9yIiwgIiRyZWYiOiAiRXJyb3IiLCAib3B0aW9uYWwiOiB0
cnVlIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAg
ImlkIjogIlBhcmFtZXRlckJ1bmRsZSIsCisgICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAor
ICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJj
b2x1bW5OYW1lcyIsICJ0eXBlIjogImFycmF5IiwgIml0ZW1zIjogeyAidHlwZSI6ICJzdHJpbmci
IH0gfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm5vdGVzIiwgInR5cGUiOiAic3RyaW5n
IiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidGltZXN0YW1wIiwgInR5cGUiOiAibnVt
YmVyIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidmFsdWVzIiwgInR5cGUiOiAib2Jq
ZWN0IiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicGF5bG9hZCIsICJ0eXBlIjogImFu
eSIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImVycm9yIiwgIiRyZWYiOiAiRXJyb3Ii
IH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlk
IjogIk9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHMiLAorICAgICAgICAgICAgImRlc2Ny
aXB0aW9uIjogIkNvbmZsaWN0ZWQgbmFtZXMgbWF5IGNhdXNlIGdlbmVyYXRlZCBnZXR0ZXJzL3Nl
dHRlcnMgdG8gY2xhc2ggd2l0aCBidWlsdC1pbiBJbnNwZWN0b3JPYmplY3QgbWV0aG9kcy4iLAor
ICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjog
WworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiaW50ZWdlciIsICJ0eXBlIjogInN0cmluZyIg
fSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImFycmF5IiwgInR5cGUiOiAic3RyaW5nIiB9
LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic3RyaW5nIiwgInR5cGUiOiAic3RyaW5nIiB9
LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidmFsdWUiLCAidHlwZSI6ICJzdHJpbmciIH0s
CisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJvYmplY3QiLCAidHlwZSI6ICJzdHJpbmciIH0K
KyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjog
IkR1bW15T2JqZWN0IiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJBbiBvcGVuIG9iamVj
dCB0aGF0IGRvZXNuJ3QgaGF2ZSBhbnkgcHJlZGVmaW5lZCBmaWVsZHMuIiwKKyAgICAgICAgICAg
ICJ0eXBlIjogIm9iamVjdCIKKyAgICAgICAgfQorICAgIF0KK30sCit7CisgICAgImRvbWFpbiI6
ICJUZXN0IiwKKyAgICAiZGVzY3JpcHRpb24iOiAiVGVzdCB0aGUgZ2VuZXJhdGlvbiBvZiBzcGVj
aWFsIGJlaGF2aW9ycyB0aGF0IG9ubHkgYXBwbHkgdG8gc3BlY2lmaWMgY2xhc3Nlcy4iLAorICAg
ICJ0eXBlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIlVucGxlYXNhbnROYW1l
IiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJUaGlzIHR5cGUgc2hvdWxkIGJlIHJlbmFt
ZWQgdG8gSGFwcHlOYW1lIiwKKyAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCisgICAgICAg
ICAgICAibWVtYmVycyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm5vdGVzIiwgInR5
cGUiOiAic3RyaW5nIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidGltZXN0YW1wIiwg
InR5cGUiOiAibnVtYmVyIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidmFsdWVzIiwg
InR5cGUiOiAib2JqZWN0IiB9CisgICAgICAgICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsK
KyAgICAgICAgICAgICJpZCI6ICJQYXJhbWV0ZXJCdW5kbGUiLAorICAgICAgICAgICAgInR5cGUi
OiAib2JqZWN0IiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWworICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJhcnJheSIsICJpdGVtcyI6IHsgInR5
cGUiOiAic3RyaW5nIiB9IH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJub3RlcyIsICJ0
eXBlIjogInN0cmluZyIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRpbWVzdGFtcCIs
ICJ0eXBlIjogIm51bWJlciIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInZhbHVlcyIs
ICJ0eXBlIjogIm9iamVjdCIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBheWxvYWQi
LCAidHlwZSI6ICJhbnkiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJlcnJvciIsICIk
cmVmIjogIkRhdGFiYXNlLkVycm9yIiB9CisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBd
LAorICAgICJjb21tYW5kcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiYXR0
ZW1wdEN1cnNlIiwKKyAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWworICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAiY3Vyc2UiLCAiJHJlZiI6ICJVbnBsZWFzYW50TmFtZSIgfQorICAgICAgICAg
ICAgXSwKKyAgICAgICAgICAgICJyZXR1cm5zIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAiY2Vuc29yZWRDdXJzZSIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IHRydWUgfQor
ICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXQorfQorXQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3R5cGUtcmVxdWlyaW5nLXJ1
bnRpbWUtY2FzdHMuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy90eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODNk
OTRiZTg5N2QyMmNjMDU4YmI2NDZmZWNkOWE0NzMwMzdiNmI5MgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy90eXBlLXJlcXVp
cmluZy1ydW50aW1lLWNhc3RzLmpzb24KQEAgLTAsMCArMSw1MSBAQAorWworeworICAgICJkb21h
aW4iOiAiVGVzdCIsCisgICAgInR5cGVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQi
OiAiVHlwZU5lZWRpbmdDYXN0IiwKKyAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCisgICAg
ICAgICAgICAiZGVzY3JpcHRpb24iOiAiQSBkdW1teSB0eXBlIHRoYXQgcmVxdWlyZXMgcnVudGlt
ZSBjYXN0cywgYW5kIGZvcmNlcyBub24tcHJpbWl0aXZlIHJlZmVyZW5jZWQgdHlwZXMgdG8gYWxz
byBlbWl0IHJ1bnRpbWUgY2FzdCBoZWxwZXJzLiIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6
IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInN0cmluZyIsICJ0eXBlIjogInN0cmluZyIs
ICJkZXNjcmlwdGlvbiI6ICJTdHJpbmcgbWVtYmVyLiIgfSwKKyAgICAgICAgICAgICAgICB7ICJu
YW1lIjogIm51bWJlciIsICJ0eXBlIjogImludGVnZXIiLCAiZGVzY3JpcHRpb24iOiAiTnVtYmVy
IG1lbWJlci4iIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJhbmltYWxzIiwgIiRyZWYi
OiAiQ2FzdGVkQW5pbWFscyIsICJkZXNjcmlwdGlvbiI6ICJFbnVtIG1lbWJlci4iIH0sCisgICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJpZCIsICIkcmVmIjogIkNhc3RlZE9iamVjdElkIiwgImRl
c2NyaXB0aW9uIjogIkFsaWFzZWQgbWVtYmVyLiIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1l
IjogInRyZWUiLCAiJHJlZiI6ICJSZWN1cnNpdmVPYmplY3QxIiwgImRlc2NyaXB0aW9uIjogIlJl
Y3Vyc2l2ZSBvYmplY3QgbWVtYmVyLiIgfQorICAgICAgICAgICAgXQorICAgICAgICB9LAorICAg
ICAgICB7CisgICAgICAgICAgICAiaWQiOiAiQ2FzdGVkT2JqZWN0SWQiLAorICAgICAgICAgICAg
InR5cGUiOiAiaW50ZWdlciIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlk
IjogIlVuY2FzdGVkT2JqZWN0SWQiLAorICAgICAgICAgICAgInR5cGUiOiAiaW50ZWdlciIKKyAg
ICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIlVuY2FzdGVkQW5pbWFscyIs
CisgICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAorICAgICAgICAgICAgImVudW0iOiBbIlBp
Z3MiLCAiQ293cyIsICJDYXRzIiwgIkhlbnMiXQorICAgICAgICB9LAorICAgICAgICB7CisgICAg
ICAgICAgICAiaWQiOiAiQ2FzdGVkQW5pbWFscyIsCisgICAgICAgICAgICAidHlwZSI6ICJzdHJp
bmciLAorICAgICAgICAgICAgImVudW0iOiBbIkR1Y2tzIiwgIkhlbnMiLCAiQ3Jvd3MiLCAiRmxh
bWluZ29zIl0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIlJlY3Vy
c2l2ZU9iamVjdDEiLAorICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKKyAgICAgICAgICAg
ICJwcm9wZXJ0aWVzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAib2JqIiwgIiRyZWYi
OiAiUmVjdXJzaXZlT2JqZWN0MiIsICJvcHRpb25hbCI6IHRydWUgfQorICAgICAgICAgICAgXQor
ICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiUmVjdXJzaXZlT2JqZWN0
MiIsCisgICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAorICAgICAgICAgICAgInByb3BlcnRp
ZXMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJvYmoiLCAiJHJlZiI6ICJSZWN1cnNp
dmVPYmplY3QxIiwgIm9wdGlvbmFsIjogdHJ1ZSB9CisgICAgICAgICAgICBdCisgICAgICAgIH0K
KyAgICBdCit9CitdCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dCBi
L1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IGY1NmYwZWQwN2M2NTExODQ0OTM4
Yzc2YWQ4NjRiZmRkYzMyYWI2NDcuLmNlMTU4MWRkOTU5MjI5YWJiMTg3ZGRkZWJiZTBiYTBkYzE3
ZjcyNTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC03ODcsNiArNzg3LDIxIEBAIHNldChXZWJD
b3JlX0lETF9GSUxFUwogCiBzZXQoV2ViQ29yZV9JTlNQRUNUT1JfU0NSSVBUU19ESVIgIiR7SkFW
QVNDUklQVENPUkVfRElSfS9pbnNwZWN0b3Ivc2NyaXB0cyIpCiAKK3NldChXZWJDb3JlX0lOU1BF
Q1RPUl9QUk9UT0NPTF9TQ1JJUFRTCisgICAgJHtXZWJDb3JlX0lOU1BFQ1RPUl9TQ1JJUFRTX0RJ
Un0vZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisgICAgJHtXZWJDb3Jl
X0lOU1BFQ1RPUl9TQ1JJUFRTX0RJUn0vY29kZWdlbi9nZW5lcmF0ZV9iYWNrZW5kX2NvbW1hbmRz
LnB5CisgICAgJHtXZWJDb3JlX0lOU1BFQ1RPUl9TQ1JJUFRTX0RJUn0vY29kZWdlbi9nZW5lcmF0
ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5CisgICAgJHtXZWJDb3JlX0lOU1BFQ1RPUl9T
Q1JJUFRTX0RJUn0vY29kZWdlbi9nZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50
YXRpb24ucHkKKyAgICAke1dlYkNvcmVfSU5TUEVDVE9SX1NDUklQVFNfRElSfS9jb2RlZ2VuL2dl
bmVyYXRlX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5CisgICAgJHtXZWJDb3JlX0lOU1BF
Q1RPUl9TQ1JJUFRTX0RJUn0vY29kZWdlbi9nZW5lcmF0ZV9mcm9udGVuZF9kaXNwYXRjaGVyX2lt
cGxlbWVudGF0aW9uLnB5CisgICAgJHtXZWJDb3JlX0lOU1BFQ1RPUl9TQ1JJUFRTX0RJUn0vY29k
ZWdlbi9nZW5lcmF0ZV90eXBlX2J1aWxkZXJfaGVhZGVyLnB5CisgICAgJHtXZWJDb3JlX0lOU1BF
Q1RPUl9TQ1JJUFRTX0RJUn0vY29kZWdlbi9nZW5lcmF0ZV90eXBlX2J1aWxkZXJfaW1wbGVtZW50
YXRpb24ucHkKKyAgICAke1dlYkNvcmVfSU5TUEVDVE9SX1NDUklQVFNfRElSfS9jb2RlZ2VuL2dl
bmVyYXRvci5weQorICAgICR7V2ViQ29yZV9JTlNQRUNUT1JfU0NSSVBUU19ESVJ9L2NvZGVnZW4v
Z2VuZXJhdG9yX3RlbXBsYXRlcy5weQorICAgICR7V2ViQ29yZV9JTlNQRUNUT1JfU0NSSVBUU19E
SVJ9L2NvZGVnZW4vX19pbml0X18ucHkKKyAgICAke1dlYkNvcmVfSU5TUEVDVE9SX1NDUklQVFNf
RElSfS9jb2RlZ2VuL21vZGVscy5weQorKQorCiBzZXQoV2ViQ29yZV9JTlNQRUNUT1JfRE9NQUlO
UwogICAgICR7V0VCQ09SRV9ESVJ9L2luc3BlY3Rvci9wcm90b2NvbC9BcHBsaWNhdGlvbkNhY2hl
Lmpzb24KICAgICAke1dFQkNPUkVfRElSfS9pbnNwZWN0b3IvcHJvdG9jb2wvQ1NTLmpzb24KQEAg
LTMyNjQsNyArMzI3OSw3IEBAIGFkZF9jdXN0b21fY29tbWFuZCgKICAgICBDT01NQU5EICR7UFlU
SE9OX0VYRUNVVEFCTEV9ICR7V2ViQ29yZV9JTlNQRUNUT1JfU0NSSVBUU19ESVJ9L2dlbmVyYXRl
LWNvbWJpbmVkLWluc3BlY3Rvci1qc29uLnB5ICR7V2ViQ29yZV9JTlNQRUNUT1JfRE9NQUlOU30g
PiAke0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0vSW5zcGVjdG9yV2ViLmpzb24KICAgICBW
RVJCQVRJTSkKIAotIyBBbGwgV2ViIEluc3BlY3RvciBnZW5lcmF0ZWQgZmlsZXMgYXJlIGNyZWF0
ZWQgd2l0aCB0aGlzIG9uZSBjYWxsIHRvIENvZGVHZW5lcmF0b3JJbnNwZWN0b3IucG0KKyMgQWxs
IFdlYiBJbnNwZWN0b3IgZ2VuZXJhdGVkIGZpbGVzIGFyZSBjcmVhdGVkIHdpdGggdGhpcyBvbmUg
Y2FsbCB0byBnZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKIGFkZF9jdXN0
b21fY29tbWFuZCgKICAgICBPVVRQVVQgJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L0lu
c3BlY3RvcldlYkJhY2tlbmREaXNwYXRjaGVycy5jcHAKICAgICAgICAgICAgJHtERVJJVkVEX1NP
VVJDRVNfV0VCQ09SRV9ESVJ9L0luc3BlY3RvcldlYkJhY2tlbmREaXNwYXRjaGVycy5oCkBAIC0z
Mjc0LDExICszMjg5LDkgQEAgYWRkX2N1c3RvbV9jb21tYW5kKAogICAgICAgICAgICAke0RFUklW
RURfU09VUkNFU19XRUJDT1JFX0RJUn0vSW5zcGVjdG9yV2ViVHlwZUJ1aWxkZXJzLmgKICAgICAg
ICAgICAgJHtERVJJVkVEX1NPVVJDRVNfV0VCSU5TUEVDVE9SVUlfRElSfS9Vc2VySW50ZXJmYWNl
L1Byb3RvY29sL0luc3BlY3RvcldlYkJhY2tlbmRDb21tYW5kcy5qcwogICAgIE1BSU5fREVQRU5E
RU5DWSAke0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0vSW5zcGVjdG9yV2ViLmpzb24KLSAg
ICBERVBFTkRTICR7V2ViQ29yZV9JTlNQRUNUT1JfU0NSSVBUU19ESVJ9L0NvZGVHZW5lcmF0b3JJ
bnNwZWN0b3IucHkKLSAgICAgICAgICAgICR7V2ViQ29yZV9JTlNQRUNUT1JfU0NSSVBUU19ESVJ9
L0NvZGVHZW5lcmF0b3JJbnNwZWN0b3JTdHJpbmdzLnB5CisgICAgREVQRU5EUyAke1dlYkNvcmVf
SU5TUEVDVE9SX1BST1RPQ09MX1NDUklQVFN9CiAgICAgICAgICAgICAke0RFUklWRURfU09VUkNF
U19KQVZBU0NSSVBUQ09SRV9ESVJ9L0luc3BlY3RvckpTLmpzb24KLSAgICAgICAgICAgICR7REVS
SVZFRF9TT1VSQ0VTX0pBVkFTQ1JJUFRDT1JFX0RJUn0vaW5zcGVjdG9yL0luc3BlY3RvckpTVHlw
ZUJ1aWxkZXJzLmgKLSAgICBDT01NQU5EICR7UFlUSE9OX0VYRUNVVEFCTEV9ICR7V2ViQ29yZV9J
TlNQRUNUT1JfU0NSSVBUU19ESVJ9L0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkgJHtERVJJVkVE
X1NPVVJDRVNfV0VCQ09SRV9ESVJ9L0luc3BlY3RvcldlYi5qc29uICR7REVSSVZFRF9TT1VSQ0VT
X0pBVkFTQ1JJUFRDT1JFX0RJUn0vSW5zcGVjdG9ySlMuanNvbiAtLW91dHB1dF9oX2RpciAiJHtE
RVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9IiAtLW91dHB1dF9jcHBfZGlyICIke0RFUklWRURf
U09VUkNFU19XRUJDT1JFX0RJUn0iIC0tb3V0cHV0X2pzX2RpciAiJHtERVJJVkVEX1NPVVJDRVNf
V0VCSU5TUEVDVE9SVUlfRElSfS9Vc2VySW50ZXJmYWNlL1Byb3RvY29sIiAtLW91dHB1dF90eXBl
IFdlYiAtLXdyaXRlX2Fsd2F5cworICAgIENPTU1BTkQgJHtQWVRIT05fRVhFQ1VUQUJMRX0gJHtX
ZWJDb3JlX0lOU1BFQ1RPUl9TQ1JJUFRTX0RJUn0vZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5IC0tb3V0cHV0RGlyICIke0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0i
IC0tZnJhbWV3b3JrIFdlYkNvcmUgJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L0luc3Bl
Y3RvcldlYi5qc29uICR7REVSSVZFRF9TT1VSQ0VTX0pBVkFTQ1JJUFRDT1JFX0RJUn0vSW5zcGVj
dG9ySlMuanNvbiAmJiBjcCAke0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0vSW5zcGVjdG9y
V2ViQmFja2VuZENvbW1hbmRzLmpzICR7REVSSVZFRF9TT1VSQ0VTX1dFQklOU1BFQ1RPUlVJX0RJ
Un0vVXNlckludGVyZmFjZS9Qcm90b2NvbAogICAgIFZFUkJBVElNKQogCiBsaXN0KEFQUEVORCBX
ZWJDb3JlX1NPVVJDRVMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2Vz
Lm1ha2UgYi9Tb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCmluZGV4IGU0MTc1YTg5
N2UzZGRmYWQ4ZDMyOGM4NzQ2NmU5ZWZjMjJmOTFkMjguLmE5Y2Y2YzIxZWEyM2ZlNWExYjFmNjdm
YjVmNGYzNjk4OTU1ZTNmNDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3Vy
Y2VzLm1ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQpAQCAtMTE1
MSw4ICsxMTUxLDE4IEBAIGlmZXEgKCQoZmluZHN0cmluZyBFTkFCTEVfV0VCX1JFUExBWSwkKEZF
QVRVUkVfREVGSU5FUykpLCBFTkFCTEVfV0VCX1JFUExBWSkKIGVuZGlmCiAKIElOU1BFQ1RPUl9H
RU5FUkFUT1JfU0NSSVBUUyA9IFwKLQkkKEluc3BlY3RvclNjcmlwdHMpL0NvZGVHZW5lcmF0b3JJ
bnNwZWN0b3IucHkgXAotCSQoSW5zcGVjdG9yU2NyaXB0cykvQ29kZUdlbmVyYXRvckluc3BlY3Rv
clN0cmluZ3MucHkgXAorICAgICQoSW5zcGVjdG9yU2NyaXB0cykvZ2VuZXJhdGVfYmFja2VuZF9j
b21tYW5kcy5weSBcCisgICAgJChJbnNwZWN0b3JTY3JpcHRzKS9nZW5lcmF0ZV9iYWNrZW5kX2Rp
c3BhdGNoZXJfaGVhZGVyLnB5IFwKKyAgICAkKEluc3BlY3RvclNjcmlwdHMpL2dlbmVyYXRlX2Jh
Y2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSBcCisgICAgJChJbnNwZWN0b3JTY3Jp
cHRzKS9nZW5lcmF0ZV9mcm9udGVuZF9kaXNwYXRjaGVyX2hlYWRlci5weSBcCisgICAgJChJbnNw
ZWN0b3JTY3JpcHRzKS9nZW5lcmF0ZV9mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9u
LnB5IFwKKyAgICAkKEluc3BlY3RvclNjcmlwdHMpL2dlbmVyYXRlX3R5cGVfYnVpbGRlcl9oZWFk
ZXIucHkgXAorICAgICQoSW5zcGVjdG9yU2NyaXB0cykvZ2VuZXJhdGVfdHlwZV9idWlsZGVyX2lt
cGxlbWVudGF0aW9uLnB5IFwKKyAgICAkKEluc3BlY3RvclNjcmlwdHMpL2dlbmVyYXRvcl90ZW1w
bGF0ZXMucHkgXAorICAgICQoSW5zcGVjdG9yU2NyaXB0cykvZ2VuZXJhdG9yLnB5IFwKKyAgICAk
KEluc3BlY3RvclNjcmlwdHMpL2dlbmVyYXRlLWNvbWJpbmVkLWluc3BlY3Rvci1qc29uLnB5IFwK
KyAgICAkKEluc3BlY3RvclNjcmlwdHMpL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weSBcCisgICAgJChJbnNwZWN0b3JTY3JpcHRzKS9tb2RlbHMucHkgXAogIwogCiBhbGwg
OiBJbnNwZWN0b3JXZWIuanNvbgpAQCAtMTE3MCw3ICsxMTgwLDcgQEAgSW5zcGVjdG9yV2ViLmpz
b24gOiAkKEluc3BlY3RvclNjcmlwdHMpL2dlbmVyYXRlLWNvbWJpbmVkLWluc3BlY3Rvci1qc29u
LnB5ICQoSU4KIGFsbCA6IEluc3BlY3RvcldlYkZyb250ZW5kRGlzcGF0Y2hlcnMuaAogCiBJbnNw
ZWN0b3JXZWJGcm9udGVuZERpc3BhdGNoZXJzLmggOiBJbnNwZWN0b3JXZWIuanNvbiAkKEluc3Bl
Y3RvclNjcmlwdHMpL0luc3BlY3RvckpTLmpzb24gJChJTlNQRUNUT1JfR0VORVJBVE9SX1NDUklQ
VFMpCi0JJChQWVRIT04pICQoSW5zcGVjdG9yU2NyaXB0cykvQ29kZUdlbmVyYXRvckluc3BlY3Rv
ci5weSAuL0luc3BlY3RvcldlYi5qc29uICQoSW5zcGVjdG9yU2NyaXB0cykvSW5zcGVjdG9ySlMu
anNvbiAtLW91dHB1dF9oX2RpciAuIC0tb3V0cHV0X2NwcF9kaXIgLiAtLW91dHB1dF9qc19kaXIg
LiAtLW91dHB1dF90eXBlIFdlYgorCSQoUFlUSE9OKSAkKEluc3BlY3RvclNjcmlwdHMpL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weSAtLWZyYW1ld29yayBXZWJDb3JlIC0t
b3V0cHV0RGlyIC4gLi9JbnNwZWN0b3JXZWIuanNvbiAkKEluc3BlY3RvclNjcmlwdHMpL0luc3Bl
Y3RvckpTLmpzb24KIAogYWxsIDogSW5zcGVjdG9yT3ZlcmxheVBhZ2UuaAogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29tbWFuZExpbmVBUElIb3N0LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9Db21tYW5kTGluZUFQSUhvc3QuY3BwCmluZGV4IDU3YjkyMWFl
ZDljZDRhZDUzZTk1YjE0Y2IxYzkzNmQ2NGExMGU0ODEuLmI2OGI0Y2U5ZDI5Yjc5MGEzMjljZjIy
ODRhMzZiNTY2Y2RiOTJjMGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9D
b21tYW5kTGluZUFQSUhvc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db21t
YW5kTGluZUFQSUhvc3QuY3BwCkBAIC05NSw3ICs5NSw3IEBAIHZvaWQgQ29tbWFuZExpbmVBUElI
b3N0OjpkaXNjb25uZWN0KCkKIHZvaWQgQ29tbWFuZExpbmVBUElIb3N0OjppbnNwZWN0SW1wbChQ
YXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiBvYmplY3QsIFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFs
dWU+IGhpbnRzKQogewogICAgIGlmIChtX2luc3BlY3RvckFnZW50KSB7Ci0gICAgICAgIFJlZlB0
cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+IHJlbW90ZU9i
amVjdCA9IEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdDo6cnVu
dGltZUNhc3Qob2JqZWN0KTsKKyAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6
OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4gcmVtb3RlT2JqZWN0ID0gQmluZGluZ1RyYWl0czxJbnNw
ZWN0b3I6OlR5cGVCdWlsZGVyOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+OjpydW50aW1lQ2FzdChv
YmplY3QpOwogICAgICAgICBtX2luc3BlY3RvckFnZW50LT5pbnNwZWN0KHJlbW90ZU9iamVjdCwg
aGludHMtPmFzT2JqZWN0KCkpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwCmluZGV4IDMwNWE5OTU0ZGYxYTk3ZjFjMGMwNzFkODRm
NzQ5MTBhYTAwZDZmOGMuLjE2OWQzN2NiMmUyNzRlNjFlYjAxMmY0MjcxMTA5ODliZTllMTQzMDcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNwcApA
QCAtMTAwMCw5ICsxMDAwLDkgQEAgSW5zcGVjdG9yU3R5bGVTaGVldCogSW5zcGVjdG9yQ1NTQWdl
bnQ6OmFzc2VydFN0eWxlU2hlZXRGb3JJZChFcnJvclN0cmluZyogZXJyb3IKICAgICByZXR1cm4g
aXQtPnZhbHVlLmdldCgpOwogfQogCi1JbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDU1M6OlN0eWxl
U2hlZXRPcmlnaW46OkVudW0gSW5zcGVjdG9yQ1NTQWdlbnQ6OmRldGVjdE9yaWdpbihDU1NTdHls
ZVNoZWV0KiBwYWdlU3R5bGVTaGVldCwgRG9jdW1lbnQqIG93bmVyRG9jdW1lbnQpCitJbnNwZWN0
b3I6OlR5cGVCdWlsZGVyOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW4gSW5zcGVjdG9yQ1NTQWdlbnQ6
OmRldGVjdE9yaWdpbihDU1NTdHlsZVNoZWV0KiBwYWdlU3R5bGVTaGVldCwgRG9jdW1lbnQqIG93
bmVyRG9jdW1lbnQpCiB7Ci0gICAgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q1NTOjpTdHlsZVNo
ZWV0T3JpZ2luOjpFbnVtIG9yaWdpbiA9IEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNTUzo6U3R5
bGVTaGVldE9yaWdpbjo6UmVndWxhcjsKKyAgICBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDU1M6
OlN0eWxlU2hlZXRPcmlnaW4gb3JpZ2luID0gSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q1NTOjpT
dHlsZVNoZWV0T3JpZ2luOjpSZWd1bGFyOwogICAgIGlmIChwYWdlU3R5bGVTaGVldCAmJiAhcGFn
ZVN0eWxlU2hlZXQtPm93bmVyTm9kZSgpICYmIHBhZ2VTdHlsZVNoZWV0LT5ocmVmKCkuaXNFbXB0
eSgpKQogICAgICAgICBvcmlnaW4gPSBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDU1M6OlN0eWxl
U2hlZXRPcmlnaW46OlVzZXJBZ2VudDsKICAgICBlbHNlIGlmIChwYWdlU3R5bGVTaGVldCAmJiBw
YWdlU3R5bGVTaGVldC0+b3duZXJOb2RlKCkgJiYgcGFnZVN0eWxlU2hlZXQtPm93bmVyTm9kZSgp
LT5ub2RlTmFtZSgpID09ICIjZG9jdW1lbnQiKQpAQCAtMTEwNiw3ICsxMTA2LDcgQEAgUGFzc1Jl
ZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheTxJbnNwZWN0b3I6OlR5cGVCdWlsZGVy
OjpDU1M6OlJlZ2lvbj4+IEkKICAgICBSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJy
YXk8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q1NTOjpSZWdpb24+PiByZWdpb25zID0gSW5zcGVj
dG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q1NTOjpSZWdp
b24+OjpjcmVhdGUoKTsKIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZWdpb25MaXN0
LT5sZW5ndGgoKTsgKytpKSB7Ci0gICAgICAgIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNTUzo6
UmVnaW9uOjpSZWdpb25PdmVyc2V0OjpFbnVtIHJlZ2lvbk92ZXJzZXQ7CisgICAgICAgIEluc3Bl
Y3Rvcjo6VHlwZUJ1aWxkZXI6OkNTUzo6UmVnaW9uOjpSZWdpb25PdmVyc2V0IHJlZ2lvbk92ZXJz
ZXQ7CiAKICAgICAgICAgc3dpdGNoICh0b0VsZW1lbnQocmVnaW9uTGlzdC0+aXRlbShpKSktPnJl
Z2lvbk92ZXJzZXRTdGF0ZSgpKSB7CiAgICAgICAgIGNhc2UgUmVnaW9uRml0OgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmggYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuaAppbmRleCAzNjUyMzdmMDM2YTZj
ZjZiYmUxYTVmNTMzNzRiNzVjZTUyNjA3OGYyLi4xNzU1ZDcyMGMzMTVlMmVkOGMxZGE2MDRmMjA1
ZjZiYmRlOWQwMTVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yQ1NTQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NT
QWdlbnQuaApAQCAtMTQ5LDcgKzE0OSw3IEBAIHByaXZhdGU6CiAgICAgSW5zcGVjdG9yU3R5bGVT
aGVldCogYmluZFN0eWxlU2hlZXQoQ1NTU3R5bGVTaGVldCopOwogICAgIEluc3BlY3RvclN0eWxl
U2hlZXQqIHZpYUluc3BlY3RvclN0eWxlU2hlZXQoRG9jdW1lbnQqLCBib29sIGNyZWF0ZUlmQWJz
ZW50KTsKICAgICBJbnNwZWN0b3JTdHlsZVNoZWV0KiBhc3NlcnRTdHlsZVNoZWV0Rm9ySWQoRXJy
b3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmKTsKLSAgICBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpD
U1M6OlN0eWxlU2hlZXRPcmlnaW46OkVudW0gZGV0ZWN0T3JpZ2luKENTU1N0eWxlU2hlZXQqIHBh
Z2VTdHlsZVNoZWV0LCBEb2N1bWVudCogb3duZXJEb2N1bWVudCk7CisgICAgSW5zcGVjdG9yOjpU
eXBlQnVpbGRlcjo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luIGRldGVjdE9yaWdpbihDU1NTdHlsZVNo
ZWV0KiBwYWdlU3R5bGVTaGVldCwgRG9jdW1lbnQqIG93bmVyRG9jdW1lbnQpOwogCiAgICAgUGFz
c1JlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDU1M6OkNTU1J1bGU+IGJ1aWxkT2JqZWN0
Rm9yUnVsZShTdHlsZVJ1bGUqLCBTdHlsZVJlc29sdmVyJik7CiAgICAgUGFzc1JlZlB0cjxJbnNw
ZWN0b3I6OlR5cGVCdWlsZGVyOjpDU1M6OkNTU1J1bGU+IGJ1aWxkT2JqZWN0Rm9yUnVsZShDU1NT
dHlsZVJ1bGUqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JET01BZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdl
bnQuY3BwCmluZGV4IGFmZWVlOTQzNzE0M2ViYTgyYTExZGFjODFjYjhkZWJhNWE3MGU1NGEuLmIy
Y2I0YzY0MGQ2NWVmNTQzNTgzNmZmZjU3ZTNlNDNjNzA3ZjYxYzcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcApAQCAtMTQ0NSw3ICsxNDQ1LDcg
QEAgUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllcz4g
SW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkT2IKIAogICAgIE5vZGUqIGFjdGl2ZURlc2NlbmRhbnRO
b2RlID0gbnVsbHB0cjsKICAgICBib29sIGJ1c3kgPSBmYWxzZTsKLSAgICBUeXBlQnVpbGRlcjo6
RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6Q2hlY2tlZDo6RW51bSBjaGVja2VkID0gVHlw
ZUJ1aWxkZXI6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6OkNoZWNrZWQ6OkZhbHNlOwor
ICAgIFR5cGVCdWlsZGVyOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpDaGVja2VkIGNo
ZWNrZWQgPSBUeXBlQnVpbGRlcjo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6Q2hlY2tl
ZDo6RmFsc2U7CiAgICAgUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5PGludD4+
IGNoaWxkTm9kZUlkczsKICAgICBSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk8
aW50Pj4gY29udHJvbGxlZE5vZGVJZHM7CiAgICAgYm9vbCBleGlzdHMgPSBmYWxzZTsKQEAgLTE0
NTUsMTIgKzE0NTUsMTIgQEAgUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6RE9NOjpBY2Nlc3NpYmls
aXR5UHJvcGVydGllcz4gSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkT2IKICAgICBib29sIGZvY3Vz
ZWQgPSBmYWxzZTsKICAgICBib29sIGlnbm9yZWQgPSB0cnVlOwogICAgIGJvb2wgaWdub3JlZEJ5
RGVmYXVsdCA9IGZhbHNlOwotICAgIFR5cGVCdWlsZGVyOjpET006OkFjY2Vzc2liaWxpdHlQcm9w
ZXJ0aWVzOjpJbnZhbGlkOjpFbnVtIGludmFsaWQgPSBUeXBlQnVpbGRlcjo6RE9NOjpBY2Nlc3Np
YmlsaXR5UHJvcGVydGllczo6SW52YWxpZDo6RmFsc2U7CisgICAgVHlwZUJ1aWxkZXI6OkRPTTo6
QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6OkludmFsaWQgaW52YWxpZCA9IFR5cGVCdWlsZGVyOjpE
T006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpJbnZhbGlkOjpGYWxzZTsKICAgICBib29sIGhp
ZGRlbiA9IGZhbHNlOwogICAgIFN0cmluZyBsYWJlbDsKICAgICBib29sIGxpdmVSZWdpb25BdG9t
aWMgPSBmYWxzZTsKICAgICBSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk8U3Ry
aW5nPj4gbGl2ZVJlZ2lvblJlbGV2YW50OwotICAgIFR5cGVCdWlsZGVyOjpET006OkFjY2Vzc2li
aWxpdHlQcm9wZXJ0aWVzOjpMaXZlUmVnaW9uU3RhdHVzOjpFbnVtIGxpdmVSZWdpb25TdGF0dXMg
PSBUeXBlQnVpbGRlcjo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6TGl2ZVJlZ2lvblN0
YXR1czo6T2ZmOworICAgIFR5cGVCdWlsZGVyOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVz
OjpMaXZlUmVnaW9uU3RhdHVzIGxpdmVSZWdpb25TdGF0dXMgPSBUeXBlQnVpbGRlcjo6RE9NOjpB
Y2Nlc3NpYmlsaXR5UHJvcGVydGllczo6TGl2ZVJlZ2lvblN0YXR1czo6T2ZmOwogICAgIE5vZGUq
IG1vdXNlRXZlbnROb2RlID0gbnVsbHB0cjsKICAgICBSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVp
bGRlcjo6QXJyYXk8aW50Pj4gb3duZWROb2RlSWRzOwogICAgIE5vZGUqIHBhcmVudE5vZGUgPSBu
dWxscHRyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBh
Z2VBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50
LmNwcAppbmRleCA0NWJmMGVlZTg0NmY3NzA5ZWQ0MmUyNzRmZDExN2Y5NjQ4MjQxOGRlLi4yOGJi
OTE5N2Y3YzBmMDExYzA4YzllMTRmOWZjYTA2ODYyYTg0YjE3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcApAQCAtMjg3LDcgKzI4Nyw3IEBA
IENhY2hlZFJlc291cmNlKiBJbnNwZWN0b3JQYWdlQWdlbnQ6OmNhY2hlZFJlc291cmNlKEZyYW1l
KiBmcmFtZSwgY29uc3QgVVJMJiB1cmwpCiAgICAgcmV0dXJuIGNhY2hlZFJlc291cmNlOwogfQog
Ci1JbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpQYWdlOjpSZXNvdXJjZVR5cGU6OkVudW0gSW5zcGVj
dG9yUGFnZUFnZW50OjpyZXNvdXJjZVR5cGVKc29uKEluc3BlY3RvclBhZ2VBZ2VudDo6UmVzb3Vy
Y2VUeXBlIHJlc291cmNlVHlwZSkKK0luc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlBhZ2U6OlJlc291
cmNlVHlwZSBJbnNwZWN0b3JQYWdlQWdlbnQ6OnJlc291cmNlVHlwZUpzb24oSW5zcGVjdG9yUGFn
ZUFnZW50OjpSZXNvdXJjZVR5cGUgcmVzb3VyY2VUeXBlKQogewogICAgIHN3aXRjaCAocmVzb3Vy
Y2VUeXBlKSB7CiAgICAgY2FzZSBEb2N1bWVudFJlc291cmNlOgpAQCAtMzM1LDcgKzMzNSw3IEBA
IEluc3BlY3RvclBhZ2VBZ2VudDo6UmVzb3VyY2VUeXBlIEluc3BlY3RvclBhZ2VBZ2VudDo6Y2Fj
aGVkUmVzb3VyY2VUeXBlKGNvbnN0IENhCiAgICAgcmV0dXJuIEluc3BlY3RvclBhZ2VBZ2VudDo6
T3RoZXJSZXNvdXJjZTsKIH0KIAotSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UGFnZTo6UmVzb3Vy
Y2VUeXBlOjpFbnVtIEluc3BlY3RvclBhZ2VBZ2VudDo6Y2FjaGVkUmVzb3VyY2VUeXBlSnNvbihj
b25zdCBDYWNoZWRSZXNvdXJjZSYgY2FjaGVkUmVzb3VyY2UpCitJbnNwZWN0b3I6OlR5cGVCdWls
ZGVyOjpQYWdlOjpSZXNvdXJjZVR5cGUgSW5zcGVjdG9yUGFnZUFnZW50OjpjYWNoZWRSZXNvdXJj
ZVR5cGVKc29uKGNvbnN0IENhY2hlZFJlc291cmNlJiBjYWNoZWRSZXNvdXJjZSkKIHsKICAgICBy
ZXR1cm4gcmVzb3VyY2VUeXBlSnNvbihjYWNoZWRSZXNvdXJjZVR5cGUoY2FjaGVkUmVzb3VyY2Up
KTsKIH0KQEAgLTcwNiw3ICs3MDYsNyBAQCB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6c2V0Q29u
dGludW91c1BhaW50aW5nRW5hYmxlZChFcnJvclN0cmluZyosIGJvb2wgZW5hYmxlZAogICAgICAg
ICBtYWluRnJhbWUoKS0+dmlldygpLT5pbnZhbGlkYXRlKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9y
UGFnZUFnZW50OjpnZXRTY3JpcHRFeGVjdXRpb25TdGF0dXMoRXJyb3JTdHJpbmcqLCBJbnNwZWN0
b3JQYWdlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpSZXN1bHQ6OkVudW0qIHN0YXR1cykKK3Zv
aWQgSW5zcGVjdG9yUGFnZUFnZW50OjpnZXRTY3JpcHRFeGVjdXRpb25TdGF0dXMoRXJyb3JTdHJp
bmcqLCBJbnNwZWN0b3JQYWdlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpSZXN1bHQqIHN0YXR1
cykKIHsKICAgICBib29sIGRpc2FibGVkQnlTY3JpcHRDb250cm9sbGVyID0gZmFsc2U7CiAgICAg
Ym9vbCBkaXNhYmxlZEluU2V0dGluZ3MgPSBmYWxzZTsKQEAgLTk2MywxMyArOTYzLDEzIEBAIFBh
c3NSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UGFnZTo6RnJhbWU+IEluc3BlY3RvclBh
Z2VBZ2VudDo6YnVpbGRPYmplY3RGCiBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6
OlBhZ2U6OkZyYW1lUmVzb3VyY2VUcmVlPiBJbnNwZWN0b3JQYWdlQWdlbnQ6OmJ1aWxkT2JqZWN0
Rm9yRnJhbWVUcmVlKEZyYW1lKiBmcmFtZSkKIHsKICAgICBSZWZQdHI8SW5zcGVjdG9yOjpUeXBl
QnVpbGRlcjo6UGFnZTo6RnJhbWU+IGZyYW1lT2JqZWN0ID0gYnVpbGRPYmplY3RGb3JGcmFtZShm
cmFtZSk7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5PEluc3BlY3Rv
cjo6VHlwZUJ1aWxkZXI6OlBhZ2U6OkZyYW1lUmVzb3VyY2VUcmVlOjpSZXNvdXJjZXM+PiBzdWJy
ZXNvdXJjZXMgPSBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheTxJbnNwZWN0b3I6OlR5cGVC
dWlsZGVyOjpQYWdlOjpGcmFtZVJlc291cmNlVHJlZTo6UmVzb3VyY2VzPjo6Y3JlYXRlKCk7Cisg
ICAgUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5PEluc3BlY3Rvcjo6VHlwZUJ1
aWxkZXI6OlBhZ2U6OkZyYW1lUmVzb3VyY2U+PiBzdWJyZXNvdXJjZXMgPSBJbnNwZWN0b3I6OlR5
cGVCdWlsZGVyOjpBcnJheTxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpQYWdlOjpGcmFtZVJlc291
cmNlPjo6Y3JlYXRlKCk7CiAgICAgUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlBhZ2U6
OkZyYW1lUmVzb3VyY2VUcmVlPiByZXN1bHQgPSBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpQYWdl
OjpGcmFtZVJlc291cmNlVHJlZTo6Y3JlYXRlKCkKICAgICAgICAgIC5zZXRGcmFtZShmcmFtZU9i
amVjdCkKICAgICAgICAgIC5zZXRSZXNvdXJjZXMoc3VicmVzb3VyY2VzKTsKIAogICAgIGZvciAo
YXV0byogY2FjaGVkUmVzb3VyY2UgOiBjYWNoZWRSZXNvdXJjZXNGb3JGcmFtZShmcmFtZSkpIHsK
LSAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlBhZ2U6OkZyYW1lUmVzb3Vy
Y2VUcmVlOjpSZXNvdXJjZXM+IHJlc291cmNlT2JqZWN0ID0gSW5zcGVjdG9yOjpUeXBlQnVpbGRl
cjo6UGFnZTo6RnJhbWVSZXNvdXJjZVRyZWU6OlJlc291cmNlczo6Y3JlYXRlKCkKKyAgICAgICAg
UmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlBhZ2U6OkZyYW1lUmVzb3VyY2U+IHJlc291
cmNlT2JqZWN0ID0gSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UGFnZTo6RnJhbWVSZXNvdXJjZTo6
Y3JlYXRlKCkKICAgICAgICAgICAgIC5zZXRVcmwoY2FjaGVkUmVzb3VyY2UtPnVybCgpKQogICAg
ICAgICAgICAgLnNldFR5cGUoY2FjaGVkUmVzb3VyY2VUeXBlSnNvbigqY2FjaGVkUmVzb3VyY2Up
KQogICAgICAgICAgICAgLnNldE1pbWVUeXBlKGNhY2hlZFJlc291cmNlLT5yZXNwb25zZSgpLm1p
bWVUeXBlKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
clBhZ2VBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2Vu
dC5oCmluZGV4IGNhNGZmMmYwMDNjZWJhOTgxNjhkMDc3OTkzMzRjNWZiZDVjOWEzMTEuLjlmODdk
MjI5ZDQzNjcwOTZmMjg2MDM4MWVmMjNkM2IyMjUzMTk0YjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmgKQEAgLTkwLDkgKzkwLDkgQEAgcHVibGlj
OgogCiAgICAgc3RhdGljIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiByZXNvdXJjZURhdGEoRnJh
bWUqLCBjb25zdCBVUkwmLCBTdHJpbmcqIHRleHRFbmNvZGluZ05hbWUpOwogICAgIHN0YXRpYyBD
YWNoZWRSZXNvdXJjZSogY2FjaGVkUmVzb3VyY2UoRnJhbWUqLCBjb25zdCBVUkwmKTsKLSAgICBz
dGF0aWMgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UGFnZTo6UmVzb3VyY2VUeXBlOjpFbnVtIHJl
c291cmNlVHlwZUpzb24oUmVzb3VyY2VUeXBlKTsKKyAgICBzdGF0aWMgSW5zcGVjdG9yOjpUeXBl
QnVpbGRlcjo6UGFnZTo6UmVzb3VyY2VUeXBlIHJlc291cmNlVHlwZUpzb24oUmVzb3VyY2VUeXBl
KTsKICAgICBzdGF0aWMgUmVzb3VyY2VUeXBlIGNhY2hlZFJlc291cmNlVHlwZShjb25zdCBDYWNo
ZWRSZXNvdXJjZSYpOwotICAgIHN0YXRpYyBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpQYWdlOjpS
ZXNvdXJjZVR5cGU6OkVudW0gY2FjaGVkUmVzb3VyY2VUeXBlSnNvbihjb25zdCBDYWNoZWRSZXNv
dXJjZSYpOworICAgIHN0YXRpYyBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpQYWdlOjpSZXNvdXJj
ZVR5cGUgY2FjaGVkUmVzb3VyY2VUeXBlSnNvbihjb25zdCBDYWNoZWRSZXNvdXJjZSYpOwogCiAg
ICAgLy8gUGFnZSBBUEkgZm9yIEluc3BlY3RvckZyb250ZW5kCiAgICAgdmlydHVhbCB2b2lkIGVu
YWJsZShFcnJvclN0cmluZyopIG92ZXJyaWRlOwpAQCAtMTE1LDcgKzExNSw3IEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIHZvaWQgc2V0U2hvd0ZQU0NvdW50ZXIoRXJyb3JTdHJpbmcqLCBib29sIHNo
b3cpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBjYW5Db250aW51b3VzbHlQYWludChFcnJv
clN0cmluZyosIGJvb2wqKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGludW91
c1BhaW50aW5nRW5hYmxlZChFcnJvclN0cmluZyosIGJvb2wgZW5hYmxlZCkgb3ZlcnJpZGU7Ci0g
ICAgdmlydHVhbCB2b2lkIGdldFNjcmlwdEV4ZWN1dGlvblN0YXR1cyhFcnJvclN0cmluZyosIElu
c3BlY3Rvcjo6SW5zcGVjdG9yUGFnZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UmVzdWx0OjpF
bnVtKikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGdldFNjcmlwdEV4ZWN1dGlvblN0YXR1
cyhFcnJvclN0cmluZyosIEluc3BlY3Rvcjo6SW5zcGVjdG9yUGFnZUJhY2tlbmREaXNwYXRjaGVy
SGFuZGxlcjo6UmVzdWx0Kikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHNldFNjcmlwdEV4
ZWN1dGlvbkRpc2FibGVkKEVycm9yU3RyaW5nKiwgYm9vbCkgb3ZlcnJpZGU7CiAgICAgdmlydHVh
bCB2b2lkIHNldFRvdWNoRW11bGF0aW9uRW5hYmxlZChFcnJvclN0cmluZyosIGJvb2wpIG92ZXJy
aWRlOwogICAgIHZpcnR1YWwgdm9pZCBzZXRFbXVsYXRlZE1lZGlhKEVycm9yU3RyaW5nKiwgY29u
c3QgU3RyaW5nJikgb3ZlcnJpZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yUmVwbGF5QWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvclJlcGxheUFnZW50LmNwcAppbmRleCBkZjA4MThlODdmMGE3NDAwYjBhNjFlMzE3YzQy
MGQ3ZjkwNTBhNjE2Li5mNDgwYzU0MDczYzAwMjc1NDRlZmE0OGM5ZmFiNWUxYzE0ZGEyZjRiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVwbGF5QWdlbnQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXBsYXlBZ2VudC5j
cHAKQEAgLTkwLDIyICs5MCwyMiBAQCBzdGF0aWMgUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6UmVw
bGF5OjpSZXBsYXlTZXNzaW9uPiBidWlsZEluc3BlY3Rvck9iamVjdEZvclNlcwogICAgIHJldHVy
biBzZXNzaW9uT2JqZWN0LnJlbGVhc2UoKTsKIH0KIAotc3RhdGljIEluc3BlY3Rvcjo6VHlwZUJ1
aWxkZXI6OlJlcGxheTo6U2Vzc2lvblN0YXRlOjpFbnVtIGJ1aWxkSW5zcGVjdG9yT2JqZWN0Rm9y
U2Vzc2lvblN0YXRlKFNlc3Npb25TdGF0ZSBzZXNzaW9uU3RhdGUpCitzdGF0aWMgVHlwZUJ1aWxk
ZXI6OlJlcGxheTo6U2Vzc2lvblN0YXRlIGJ1aWxkSW5zcGVjdG9yT2JqZWN0Rm9yU2Vzc2lvblN0
YXRlKFdlYkNvcmU6OlNlc3Npb25TdGF0ZSBzZXNzaW9uU3RhdGUpCiB7CiAgICAgc3dpdGNoIChz
ZXNzaW9uU3RhdGUpIHsKLSAgICBjYXNlIFNlc3Npb25TdGF0ZTo6Q2FwdHVyaW5nOiByZXR1cm4g
SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UmVwbGF5OjpTZXNzaW9uU3RhdGU6OkNhcHR1cmluZzsK
LSAgICBjYXNlIFNlc3Npb25TdGF0ZTo6SW5hY3RpdmU6IHJldHVybiBJbnNwZWN0b3I6OlR5cGVC
dWlsZGVyOjpSZXBsYXk6OlNlc3Npb25TdGF0ZTo6SW5hY3RpdmU7Ci0gICAgY2FzZSBTZXNzaW9u
U3RhdGU6OlJlcGxheWluZzogcmV0dXJuIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlJlcGxheTo6
U2Vzc2lvblN0YXRlOjpSZXBsYXlpbmc7CisgICAgY2FzZSBXZWJDb3JlOjpTZXNzaW9uU3RhdGU6
OkNhcHR1cmluZzogcmV0dXJuIFR5cGVCdWlsZGVyOjpSZXBsYXk6OlNlc3Npb25TdGF0ZTo6Q2Fw
dHVyaW5nOworICAgIGNhc2UgV2ViQ29yZTo6U2Vzc2lvblN0YXRlOjpJbmFjdGl2ZTogcmV0dXJu
IFR5cGVCdWlsZGVyOjpSZXBsYXk6OlNlc3Npb25TdGF0ZTo6SW5hY3RpdmU7CisgICAgY2FzZSBX
ZWJDb3JlOjpTZXNzaW9uU3RhdGU6OlJlcGxheWluZzogcmV0dXJuIFR5cGVCdWlsZGVyOjpSZXBs
YXk6OlNlc3Npb25TdGF0ZTo6UmVwbGF5aW5nOwogICAgIH0KIH0KIAotc3RhdGljIEluc3BlY3Rv
cjo6VHlwZUJ1aWxkZXI6OlJlcGxheTo6U2VnbWVudFN0YXRlOjpFbnVtIGJ1aWxkSW5zcGVjdG9y
T2JqZWN0Rm9yU2VnbWVudFN0YXRlKFNlZ21lbnRTdGF0ZSBzZWdtZW50U3RhdGUpCitzdGF0aWMg
VHlwZUJ1aWxkZXI6OlJlcGxheTo6U2VnbWVudFN0YXRlIGJ1aWxkSW5zcGVjdG9yT2JqZWN0Rm9y
U2VnbWVudFN0YXRlKFdlYkNvcmU6OlNlZ21lbnRTdGF0ZSBzZWdtZW50U3RhdGUpCiB7CiAgICAg
c3dpdGNoIChzZWdtZW50U3RhdGUpIHsKLSAgICBjYXNlIFNlZ21lbnRTdGF0ZTo6QXBwZW5kaW5n
OiByZXR1cm4gSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UmVwbGF5OjpTZWdtZW50U3RhdGU6OkFw
cGVuZGluZzsKLSAgICBjYXNlIFNlZ21lbnRTdGF0ZTo6VW5sb2FkZWQ6IHJldHVybiBJbnNwZWN0
b3I6OlR5cGVCdWlsZGVyOjpSZXBsYXk6OlNlZ21lbnRTdGF0ZTo6VW5sb2FkZWQ7Ci0gICAgY2Fz
ZSBTZWdtZW50U3RhdGU6OkxvYWRlZDogcmV0dXJuIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlJl
cGxheTo6U2VnbWVudFN0YXRlOjpMb2FkZWQ7Ci0gICAgY2FzZSBTZWdtZW50U3RhdGU6OkRpc3Bh
dGNoaW5nOiByZXR1cm4gSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UmVwbGF5OjpTZWdtZW50U3Rh
dGU6OkRpc3BhdGNoaW5nOworICAgIGNhc2UgV2ViQ29yZTo6U2VnbWVudFN0YXRlOjpBcHBlbmRp
bmc6IHJldHVybiBUeXBlQnVpbGRlcjo6UmVwbGF5OjpTZWdtZW50U3RhdGU6OkFwcGVuZGluZzsK
KyAgICBjYXNlIFdlYkNvcmU6OlNlZ21lbnRTdGF0ZTo6VW5sb2FkZWQ6IHJldHVybiBUeXBlQnVp
bGRlcjo6UmVwbGF5OjpTZWdtZW50U3RhdGU6OlVubG9hZGVkOworICAgIGNhc2UgV2ViQ29yZTo6
U2VnbWVudFN0YXRlOjpMb2FkZWQ6IHJldHVybiBUeXBlQnVpbGRlcjo6UmVwbGF5OjpTZWdtZW50
U3RhdGU6OkxvYWRlZDsKKyAgICBjYXNlIFdlYkNvcmU6OlNlZ21lbnRTdGF0ZTo6RGlzcGF0Y2hp
bmc6IHJldHVybiBUeXBlQnVpbGRlcjo6UmVwbGF5OjpTZWdtZW50U3RhdGU6OkRpc3BhdGNoaW5n
OwogICAgIH0KIH0KIApAQCAtMTY4LDcgKzE2OCw3IEBAIEluc3BlY3RvclJlcGxheUFnZW50Ojp+
SW5zcGVjdG9yUmVwbGF5QWdlbnQoKQogICAgIEFTU0VSVCghbV9zZWdtZW50c01hcC5zaXplKCkp
OwogfQogCi1TZXNzaW9uU3RhdGUgSW5zcGVjdG9yUmVwbGF5QWdlbnQ6OnNlc3Npb25TdGF0ZSgp
IGNvbnN0CitXZWJDb3JlOjpTZXNzaW9uU3RhdGUgSW5zcGVjdG9yUmVwbGF5QWdlbnQ6OnNlc3Np
b25TdGF0ZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fcGFnZS5yZXBsYXlDb250cm9sbGVyKCku
c2Vzc2lvblN0YXRlKCk7CiB9CkBAIC0xNzksNyArMTc5LDcgQEAgdm9pZCBJbnNwZWN0b3JSZXBs
YXlBZ2VudDo6ZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3RvckZyb250ZW5kQ2hh
bm5lbCoKICAgICBtX2JhY2tlbmREaXNwYXRjaGVyID0gSW5zcGVjdG9yUmVwbGF5QmFja2VuZERp
c3BhdGNoZXI6OmNyZWF0ZShiYWNrZW5kRGlzcGF0Y2hlciwgdGhpcyk7CiAKICAgICBtX2luc3Ry
dW1lbnRpbmdBZ2VudHMtPnNldEluc3BlY3RvclJlcGxheUFnZW50KHRoaXMpOwotICAgIEFTU0VS
VChzZXNzaW9uU3RhdGUoKSA9PSBTZXNzaW9uU3RhdGU6OkluYWN0aXZlKTsKKyAgICBBU1NFUlQo
c2Vzc2lvblN0YXRlKCkgPT0gV2ViQ29yZTo6U2Vzc2lvblN0YXRlOjpJbmFjdGl2ZSk7CiAKICAg
ICAvLyBLZWVwIHRyYWNrIG9mIHRoZSAoZGVmYXVsdCkgc2Vzc2lvbiBjdXJyZW50bHkgbG9hZGVk
IGJ5IFJlcGxheUNvbnRyb2xsZXIsCiAgICAgLy8gYW5kIGFueSBzZWdtZW50cyB3aXRoaW4gdGhl
IHNlc3Npb24uCkBAIC0yMDQsMTkgKzIwNCwxOSBAQCB2b2lkIEluc3BlY3RvclJlcGxheUFnZW50
Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3JEaXNjb25uZWN0UmVhcwog
CiB2b2lkIEluc3BlY3RvclJlcGxheUFnZW50OjpmcmFtZU5hdmlnYXRlZChEb2N1bWVudExvYWRl
ciogbG9hZGVyKQogewotICAgIGlmIChzZXNzaW9uU3RhdGUoKSAhPSBTZXNzaW9uU3RhdGU6Oklu
YWN0aXZlKQorICAgIGlmIChzZXNzaW9uU3RhdGUoKSAhPSBXZWJDb3JlOjpTZXNzaW9uU3RhdGU6
OkluYWN0aXZlKQogICAgICAgICBtX3BhZ2UucmVwbGF5Q29udHJvbGxlcigpLmZyYW1lTmF2aWdh
dGVkKGxvYWRlcik7CiB9CiAKIHZvaWQgSW5zcGVjdG9yUmVwbGF5QWdlbnQ6OmZyYW1lRGV0YWNo
ZWQoRnJhbWUqIGZyYW1lKQogewotICAgIGlmIChzZXNzaW9uU3RhdGUoKSAhPSBTZXNzaW9uU3Rh
dGU6OkluYWN0aXZlKQorICAgIGlmIChzZXNzaW9uU3RhdGUoKSAhPSBXZWJDb3JlOjpTZXNzaW9u
U3RhdGU6OkluYWN0aXZlKQogICAgICAgICBtX3BhZ2UucmVwbGF5Q29udHJvbGxlcigpLmZyYW1l
RGV0YWNoZWQoZnJhbWUpOwogfQogCiB2b2lkIEluc3BlY3RvclJlcGxheUFnZW50Ojp3aWxsRGlz
cGF0Y2hFdmVudChjb25zdCBFdmVudCYgZXZlbnQsIEZyYW1lKiBmcmFtZSkKIHsKLSAgICBpZiAo
c2Vzc2lvblN0YXRlKCkgIT0gU2Vzc2lvblN0YXRlOjpJbmFjdGl2ZSkKKyAgICBpZiAoc2Vzc2lv
blN0YXRlKCkgIT0gV2ViQ29yZTo6U2Vzc2lvblN0YXRlOjpJbmFjdGl2ZSkKICAgICAgICAgbV9w
YWdlLnJlcGxheUNvbnRyb2xsZXIoKS53aWxsRGlzcGF0Y2hFdmVudChldmVudCwgZnJhbWUpOwog
fQogCkBAIC0zMTksNyArMzE5LDcgQEAgdm9pZCBJbnNwZWN0b3JSZXBsYXlBZ2VudDo6cGxheWJh
Y2tGaW5pc2hlZCgpCiAKIHZvaWQgSW5zcGVjdG9yUmVwbGF5QWdlbnQ6OnN0YXJ0Q2FwdHVyaW5n
KEVycm9yU3RyaW5nKiBlcnJvclN0cmluZykKIHsKLSAgICBpZiAoc2Vzc2lvblN0YXRlKCkgIT0g
U2Vzc2lvblN0YXRlOjpJbmFjdGl2ZSkgeworICAgIGlmIChzZXNzaW9uU3RhdGUoKSAhPSBXZWJD
b3JlOjpTZXNzaW9uU3RhdGU6OkluYWN0aXZlKSB7CiAgICAgICAgICplcnJvclN0cmluZyA9IEFT
Q0lJTGl0ZXJhbCgiQ2FuJ3Qgc3RhcnQgY2FwdHVyaW5nIGlmIHRoZSBzZXNzaW9uIGlzIGFscmVh
ZHkgY2FwdHVyaW5nIG9yIHJlcGxheWluZy4iKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAg
LTMyOSw3ICszMjksNyBAQCB2b2lkIEluc3BlY3RvclJlcGxheUFnZW50OjpzdGFydENhcHR1cmlu
ZyhFcnJvclN0cmluZyogZXJyb3JTdHJpbmcpCiAKIHZvaWQgSW5zcGVjdG9yUmVwbGF5QWdlbnQ6
OnN0b3BDYXB0dXJpbmcoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nKQogewotICAgIGlmIChzZXNz
aW9uU3RhdGUoKSAhPSBTZXNzaW9uU3RhdGU6OkNhcHR1cmluZykgeworICAgIGlmIChzZXNzaW9u
U3RhdGUoKSAhPSBXZWJDb3JlOjpTZXNzaW9uU3RhdGU6OkNhcHR1cmluZykgewogICAgICAgICAq
ZXJyb3JTdHJpbmcgPSBBU0NJSUxpdGVyYWwoIkNhbid0IHN0b3AgY2FwdHVyaW5nIGlmIGNhcHR1
cmUgaXMgbm90IGluIHByb2dyZXNzLiIpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMzUw
LDcgKzM1MCw3IEBAIHZvaWQgSW5zcGVjdG9yUmVwbGF5QWdlbnQ6OnJlcGxheVRvUG9zaXRpb24o
RXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBjb25zdCBSZWZQCiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBpZiAoc2Vzc2lvblN0YXRlKCkgPT0gU2Vzc2lvblN0YXRlOjpDYXB0dXJpbmcp
IHsKKyAgICBpZiAoc2Vzc2lvblN0YXRlKCkgPT0gV2ViQ29yZTo6U2Vzc2lvblN0YXRlOjpDYXB0
dXJpbmcpIHsKICAgICAgICAgKmVycm9yU3RyaW5nID0gQVNDSUlMaXRlcmFsKCJDYW4ndCBzdGFy
dCByZXBsYXkgd2hpbGUgY2FwdHVyZSBpcyBpbiBwcm9ncmVzcy4iKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KQEAgLTM2MCw3ICszNjAsNyBAQCB2b2lkIEluc3BlY3RvclJlcGxheUFnZW50Ojpy
ZXBsYXlUb1Bvc2l0aW9uKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgY29uc3QgUmVmUAogCiB2
b2lkIEluc3BlY3RvclJlcGxheUFnZW50OjpyZXBsYXlUb0NvbXBsZXRpb24oRXJyb3JTdHJpbmcq
IGVycm9yU3RyaW5nLCBib29sIGZhc3RSZXBsYXkpCiB7Ci0gICAgaWYgKHNlc3Npb25TdGF0ZSgp
ID09IFNlc3Npb25TdGF0ZTo6Q2FwdHVyaW5nKSB7CisgICAgaWYgKHNlc3Npb25TdGF0ZSgpID09
IFdlYkNvcmU6OlNlc3Npb25TdGF0ZTo6Q2FwdHVyaW5nKSB7CiAgICAgICAgICplcnJvclN0cmlu
ZyA9IEFTQ0lJTGl0ZXJhbCgiQ2FuJ3Qgc3RhcnQgcmVwbGF5IHdoaWxlIGNhcHR1cmUgaXMgaW4g
cHJvZ3Jlc3MuIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zNzAsNyArMzcwLDcgQEAg
dm9pZCBJbnNwZWN0b3JSZXBsYXlBZ2VudDo6cmVwbGF5VG9Db21wbGV0aW9uKEVycm9yU3RyaW5n
KiBlcnJvclN0cmluZywgYm9vbCBmYXMKIAogdm9pZCBJbnNwZWN0b3JSZXBsYXlBZ2VudDo6cGF1
c2VQbGF5YmFjayhFcnJvclN0cmluZyogZXJyb3JTdHJpbmcpCiB7Ci0gICAgaWYgKHNlc3Npb25T
dGF0ZSgpICE9IFNlc3Npb25TdGF0ZTo6UmVwbGF5aW5nKSB7CisgICAgaWYgKHNlc3Npb25TdGF0
ZSgpICE9IFdlYkNvcmU6OlNlc3Npb25TdGF0ZTo6UmVwbGF5aW5nKSB7CiAgICAgICAgICplcnJv
clN0cmluZyA9IEFTQ0lJTGl0ZXJhbCgiQ2FuJ3QgcGF1c2UgcGxheWJhY2sgaWYgcGxheWJhY2sg
aXMgbm90IGluIHByb2dyZXNzLiIpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMzgwLDcg
KzM4MCw3IEBAIHZvaWQgSW5zcGVjdG9yUmVwbGF5QWdlbnQ6OnBhdXNlUGxheWJhY2soRXJyb3JT
dHJpbmcqIGVycm9yU3RyaW5nKQogCiB2b2lkIEluc3BlY3RvclJlcGxheUFnZW50OjpjYW5jZWxQ
bGF5YmFjayhFcnJvclN0cmluZyogZXJyb3JTdHJpbmcpCiB7Ci0gICAgaWYgKHNlc3Npb25TdGF0
ZSgpID09IFNlc3Npb25TdGF0ZTo6Q2FwdHVyaW5nKSB7CisgICAgaWYgKHNlc3Npb25TdGF0ZSgp
ID09IFdlYkNvcmU6OlNlc3Npb25TdGF0ZTo6Q2FwdHVyaW5nKSB7CiAgICAgICAgICplcnJvclN0
cmluZyA9IEFTQ0lJTGl0ZXJhbCgiQ2FuJ3QgY2FuY2VsIHBsYXliYWNrIGlmIGNhcHR1cmUgaXMg
aW4gcHJvZ3Jlc3MuIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zODgsMTEgKzM4OCwx
MSBAQCB2b2lkIEluc3BlY3RvclJlcGxheUFnZW50OjpjYW5jZWxQbGF5YmFjayhFcnJvclN0cmlu
ZyogZXJyb3JTdHJpbmcpCiAgICAgbV9wYWdlLnJlcGxheUNvbnRyb2xsZXIoKS5jYW5jZWxQbGF5
YmFjaygpOwogfQogCi12b2lkIEluc3BlY3RvclJlcGxheUFnZW50Ojpzd2l0Y2hTZXNzaW9uKEVy
cm9yU3RyaW5nKiBlcnJvclN0cmluZywgU2Vzc2lvbklkZW50aWZpZXIgaWRlbnRpZmllcikKK3Zv
aWQgSW5zcGVjdG9yUmVwbGF5QWdlbnQ6OnN3aXRjaFNlc3Npb24oRXJyb3JTdHJpbmcqIGVycm9y
U3RyaW5nLCBUeXBlQnVpbGRlcjo6UmVwbGF5OjpTZXNzaW9uSWRlbnRpZmllciBpZGVudGlmaWVy
KQogewogICAgIEFTU0VSVChpZGVudGlmaWVyID4gMCk7CiAKLSAgICBpZiAoc2Vzc2lvblN0YXRl
KCkgIT0gU2Vzc2lvblN0YXRlOjpJbmFjdGl2ZSkgeworICAgIGlmIChzZXNzaW9uU3RhdGUoKSAh
PSBXZWJDb3JlOjpTZXNzaW9uU3RhdGU6OkluYWN0aXZlKSB7CiAgICAgICAgICplcnJvclN0cmlu
ZyA9IEFTQ0lJTGl0ZXJhbCgiQ2FuJ3Qgc3dpdGNoIHNlc3Npb25zIHVubGVzcyB0aGUgc2Vzc2lv
biBpcyBuZWl0aGVyIGNhcHR1cmluZyBvciByZXBsYXlpbmcuIik7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CkBAIC00MDQsNyArNDA0LDcgQEAgdm9pZCBJbnNwZWN0b3JSZXBsYXlBZ2VudDo6c3dp
dGNoU2Vzc2lvbihFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIFNlc3Npb25JZGVudGkKICAgICBt
X3BhZ2UucmVwbGF5Q29udHJvbGxlcigpLnN3aXRjaFNlc3Npb24oc2Vzc2lvbik7CiB9CiAKLXZv
aWQgSW5zcGVjdG9yUmVwbGF5QWdlbnQ6Omluc2VydFNlc3Npb25TZWdtZW50KEVycm9yU3RyaW5n
KiBlcnJvclN0cmluZywgU2Vzc2lvbklkZW50aWZpZXIgc2Vzc2lvbklkZW50aWZpZXIsIFNlZ21l
bnRJZGVudGlmaWVyIHNlZ21lbnRJZGVudGlmaWVyLCBpbnQgc2VnbWVudEluZGV4KQordm9pZCBJ
bnNwZWN0b3JSZXBsYXlBZ2VudDo6aW5zZXJ0U2Vzc2lvblNlZ21lbnQoRXJyb3JTdHJpbmcqIGVy
cm9yU3RyaW5nLCBUeXBlQnVpbGRlcjo6UmVwbGF5OjpTZXNzaW9uSWRlbnRpZmllciBzZXNzaW9u
SWRlbnRpZmllciwgU2VnbWVudElkZW50aWZpZXIgc2VnbWVudElkZW50aWZpZXIsIGludCBzZWdt
ZW50SW5kZXgpCiB7CiAgICAgQVNTRVJUKHNlc3Npb25JZGVudGlmaWVyID4gMCk7CiAgICAgQVNT
RVJUKHNlZ21lbnRJZGVudGlmaWVyID4gMCk7CkBAIC00MjEsNyArNDIxLDcgQEAgdm9pZCBJbnNw
ZWN0b3JSZXBsYXlBZ2VudDo6aW5zZXJ0U2Vzc2lvblNlZ21lbnQoRXJyb3JTdHJpbmcqIGVycm9y
U3RyaW5nLCBTZXNzaW8KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChzZXNzaW9u
ID09IG1fcGFnZS5yZXBsYXlDb250cm9sbGVyKCkubG9hZGVkU2Vzc2lvbigpICYmIHNlc3Npb25T
dGF0ZSgpICE9IFNlc3Npb25TdGF0ZTo6SW5hY3RpdmUpIHsKKyAgICBpZiAoc2Vzc2lvbiA9PSBt
X3BhZ2UucmVwbGF5Q29udHJvbGxlcigpLmxvYWRlZFNlc3Npb24oKSAmJiBzZXNzaW9uU3RhdGUo
KSAhPSBXZWJDb3JlOjpTZXNzaW9uU3RhdGU6OkluYWN0aXZlKSB7CiAgICAgICAgICplcnJvclN0
cmluZyA9IEFTQ0lJTGl0ZXJhbCgiQ2FuJ3QgbW9kaWZ5IGEgbG9hZGVkIHNlc3Npb24gdW5sZXNz
IHRoZSBzZXNzaW9uIGlzIGluYWN0aXZlLiIpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAt
NDMwLDcgKzQzMCw3IEBAIHZvaWQgSW5zcGVjdG9yUmVwbGF5QWdlbnQ6Omluc2VydFNlc3Npb25T
ZWdtZW50KEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgU2Vzc2lvCiAgICAgc2Vzc2lvbk1vZGlm
aWVkKHNlc3Npb24pOwogfQogCi12b2lkIEluc3BlY3RvclJlcGxheUFnZW50OjpyZW1vdmVTZXNz
aW9uU2VnbWVudChFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIFNlc3Npb25JZGVudGlmaWVyIGlk
ZW50aWZpZXIsIGludCBzZWdtZW50SW5kZXgpCit2b2lkIEluc3BlY3RvclJlcGxheUFnZW50Ojpy
ZW1vdmVTZXNzaW9uU2VnbWVudChFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIFR5cGVCdWlsZGVy
OjpSZXBsYXk6OlNlc3Npb25JZGVudGlmaWVyIGlkZW50aWZpZXIsIGludCBzZWdtZW50SW5kZXgp
CiB7CiAgICAgQVNTRVJUKGlkZW50aWZpZXIgPiAwKTsKICAgICBBU1NFUlQoc2VnbWVudEluZGV4
ID49IDApOwpAQCAtNDQ1LDcgKzQ0NSw3IEBAIHZvaWQgSW5zcGVjdG9yUmVwbGF5QWdlbnQ6OnJl
bW92ZVNlc3Npb25TZWdtZW50KEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgU2Vzc2lvCiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoc2Vzc2lvbiA9PSBtX3BhZ2UucmVwbGF5Q29u
dHJvbGxlcigpLmxvYWRlZFNlc3Npb24oKSAmJiBzZXNzaW9uU3RhdGUoKSAhPSBTZXNzaW9uU3Rh
dGU6OkluYWN0aXZlKSB7CisgICAgaWYgKHNlc3Npb24gPT0gbV9wYWdlLnJlcGxheUNvbnRyb2xs
ZXIoKS5sb2FkZWRTZXNzaW9uKCkgJiYgc2Vzc2lvblN0YXRlKCkgIT0gV2ViQ29yZTo6U2Vzc2lv
blN0YXRlOjpJbmFjdGl2ZSkgewogICAgICAgICAqZXJyb3JTdHJpbmcgPSBBU0NJSUxpdGVyYWwo
IkNhbid0IG1vZGlmeSBhIGxvYWRlZCBzZXNzaW9uIHVubGVzcyB0aGUgc2Vzc2lvbiBpcyBpbmFj
dGl2ZS4iKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTQ4MCw3ICs0ODAsNyBAQCBQYXNz
UmVmUHRyPFJlcGxheVNlc3Npb25TZWdtZW50PiBJbnNwZWN0b3JSZXBsYXlBZ2VudDo6ZmluZFNl
Z21lbnQoRXJyb3JTdHJpbmcqCiAgICAgcmV0dXJuIGl0LT52YWx1ZTsKIH0KIAotdm9pZCBJbnNw
ZWN0b3JSZXBsYXlBZ2VudDo6Y3VycmVudFJlcGxheVN0YXRlKEVycm9yU3RyaW5nKiwgU2Vzc2lv
bklkZW50aWZpZXIqIHNlc3Npb25JZGVudGlmaWVyLCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpP
cHRPdXRwdXQ8aW50Piogc2VnbWVudElkZW50aWZpZXIsIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6
OlJlcGxheTo6U2Vzc2lvblN0YXRlOjpFbnVtKiBzZXNzaW9uU3RhdGUsIEluc3BlY3Rvcjo6VHlw
ZUJ1aWxkZXI6OlJlcGxheTo6U2VnbWVudFN0YXRlOjpFbnVtKiBzZWdtZW50U3RhdGUsIFJlZlB0
cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpSZXBsYXk6OlJlcGxheVBvc2l0aW9uPiYgcmVwbGF5
UG9zaXRpb24pCit2b2lkIEluc3BlY3RvclJlcGxheUFnZW50OjpjdXJyZW50UmVwbGF5U3RhdGUo
RXJyb3JTdHJpbmcqLCBUeXBlQnVpbGRlcjo6UmVwbGF5OjpTZXNzaW9uSWRlbnRpZmllciogc2Vz
c2lvbklkZW50aWZpZXIsIFR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8VHlwZUJ1aWxkZXI6OlJlcGxh
eTo6U2VnbWVudElkZW50aWZpZXI+KiBzZWdtZW50SWRlbnRpZmllciwgVHlwZUJ1aWxkZXI6OlJl
cGxheTo6U2Vzc2lvblN0YXRlKiBzZXNzaW9uU3RhdGUsIFR5cGVCdWlsZGVyOjpSZXBsYXk6OlNl
Z21lbnRTdGF0ZSogc2VnbWVudFN0YXRlLCBSZWZQdHI8VHlwZUJ1aWxkZXI6OlJlcGxheTo6UmVw
bGF5UG9zaXRpb24+JiByZXBsYXlQb3NpdGlvbikKIHsKICAgICAqc2Vzc2lvblN0YXRlID0gYnVp
bGRJbnNwZWN0b3JPYmplY3RGb3JTZXNzaW9uU3RhdGUobV9wYWdlLnJlcGxheUNvbnRyb2xsZXIo
KS5zZXNzaW9uU3RhdGUoKSk7CiAgICAgKnNlZ21lbnRTdGF0ZSA9IGJ1aWxkSW5zcGVjdG9yT2Jq
ZWN0Rm9yU2VnbWVudFN0YXRlKG1fcGFnZS5yZXBsYXlDb250cm9sbGVyKCkuc2VnbWVudFN0YXRl
KCkpOwpAQCAtNDkyLDE0ICs0OTIsMTQgQEAgdm9pZCBJbnNwZWN0b3JSZXBsYXlBZ2VudDo6Y3Vy
cmVudFJlcGxheVN0YXRlKEVycm9yU3RyaW5nKiwgU2Vzc2lvbklkZW50aWZpZXIqIHMKICAgICBy
ZXBsYXlQb3NpdGlvbiA9IGJ1aWxkSW5zcGVjdG9yT2JqZWN0Rm9yUG9zaXRpb24obV9wYWdlLnJl
cGxheUNvbnRyb2xsZXIoKS5jdXJyZW50UG9zaXRpb24oKSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9y
UmVwbGF5QWdlbnQ6OmdldEF2YWlsYWJsZVNlc3Npb25zKEVycm9yU3RyaW5nKiwgUmVmUHRyPElu
c3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5PFNlc3Npb25JZGVudGlmaWVyPj4mIHNlc3Npb25z
TGlzdCkKK3ZvaWQgSW5zcGVjdG9yUmVwbGF5QWdlbnQ6OmdldEF2YWlsYWJsZVNlc3Npb25zKEVy
cm9yU3RyaW5nKiwgUmVmUHRyPFR5cGVCdWlsZGVyOjpBcnJheTxTZXNzaW9uSWRlbnRpZmllcj4+
JiBzZXNzaW9uc0xpc3QpCiB7Ci0gICAgc2Vzc2lvbnNMaXN0ID0gVHlwZUJ1aWxkZXI6OkFycmF5
PFNlc3Npb25JZGVudGlmaWVyPjo6Y3JlYXRlKCk7CisgICAgc2Vzc2lvbnNMaXN0ID0gVHlwZUJ1
aWxkZXI6OkFycmF5PFR5cGVCdWlsZGVyOjpSZXBsYXk6OlNlc3Npb25JZGVudGlmaWVyPjo6Y3Jl
YXRlKCk7CiAgICAgZm9yIChhdXRvJiBwYWlyIDogbV9zZXNzaW9uc01hcCkKICAgICAgICAgc2Vz
c2lvbnNMaXN0LT5hZGRJdGVtKHBhaXIua2V5KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSZXBsYXlB
Z2VudDo6Z2V0U2Vzc2lvbkRhdGEoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBTZXNzaW9uSWRl
bnRpZmllciBpZGVudGlmaWVyLCBSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UmVwbGF5
OjpSZXBsYXlTZXNzaW9uPiYgc2VyaWFsaXplZE9iamVjdCkKK3ZvaWQgSW5zcGVjdG9yUmVwbGF5
QWdlbnQ6OmdldFNlc3Npb25EYXRhKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgVHlwZUJ1aWxk
ZXI6OlJlcGxheTo6U2Vzc2lvbklkZW50aWZpZXIgaWRlbnRpZmllciwgUmVmUHRyPFR5cGVCdWls
ZGVyOjpSZXBsYXk6OlJlcGxheVNlc3Npb24+JiBzZXJpYWxpemVkT2JqZWN0KQogewogICAgIFJl
ZlB0cjxSZXBsYXlTZXNzaW9uPiBzZXNzaW9uID0gZmluZFNlc3Npb24oZXJyb3JTdHJpbmcsIGlk
ZW50aWZpZXIpOwogICAgIGlmICghc2Vzc2lvbikgewpAQCAtNTEwLDcgKzUxMCw3IEBAIHZvaWQg
SW5zcGVjdG9yUmVwbGF5QWdlbnQ6OmdldFNlc3Npb25EYXRhKEVycm9yU3RyaW5nKiBlcnJvclN0
cmluZywgU2Vzc2lvbklkZW50CiAgICAgc2VyaWFsaXplZE9iamVjdCA9IGJ1aWxkSW5zcGVjdG9y
T2JqZWN0Rm9yU2Vzc2lvbihzZXNzaW9uKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSZXBsYXlBZ2Vu
dDo6Z2V0U2VnbWVudERhdGEoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBTZWdtZW50SWRlbnRp
ZmllciBpZGVudGlmaWVyLCBSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UmVwbGF5OjpT
ZXNzaW9uU2VnbWVudD4mIHNlcmlhbGl6ZWRPYmplY3QpCit2b2lkIEluc3BlY3RvclJlcGxheUFn
ZW50OjpnZXRTZWdtZW50RGF0YShFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIFR5cGVCdWlsZGVy
OjpSZXBsYXk6OlNlZ21lbnRJZGVudGlmaWVyIGlkZW50aWZpZXIsIFJlZlB0cjxUeXBlQnVpbGRl
cjo6UmVwbGF5OjpTZXNzaW9uU2VnbWVudD4mIHNlcmlhbGl6ZWRPYmplY3QpCiB7CiAgICAgUmVm
UHRyPFJlcGxheVNlc3Npb25TZWdtZW50PiBzZWdtZW50ID0gZmluZFNlZ21lbnQoZXJyb3JTdHJp
bmcsIGlkZW50aWZpZXIpOwogICAgIGlmICghc2VnbWVudCkgewpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJlcGxheUFnZW50LmggYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVwbGF5QWdlbnQuaAppbmRleCA2OWMxNGI2NTU0NGM4MjMx
NzkyNDVhYzQ4MGRjZDQzZGMzNjFmMzBmLi5mN2JjZTZmNGNmYjA5YWY0ZDQyZGMxNmYyMTMzYjI1
ZjU4Nzk0MWI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
UmVwbGF5QWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVw
bGF5QWdlbnQuaApAQCAtMTAxLDE4ICsxMDEsMTggQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9p
ZCBjYW5jZWxQbGF5YmFjayhFcnJvclN0cmluZyopIG92ZXJyaWRlOwogCiAgICAgdmlydHVhbCB2
b2lkIHN3aXRjaFNlc3Npb24oRXJyb3JTdHJpbmcqLCBTZXNzaW9uSWRlbnRpZmllcikgb3ZlcnJp
ZGU7Ci0gICAgdmlydHVhbCB2b2lkIGluc2VydFNlc3Npb25TZWdtZW50KEVycm9yU3RyaW5nKiwg
U2Vzc2lvbklkZW50aWZpZXIsIFNlZ21lbnRJZGVudGlmaWVyLCBpbnQgc2VnbWVudEluZGV4KSBv
dmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlU2Vzc2lvblNlZ21lbnQoRXJyb3JTdHJp
bmcqLCBTZXNzaW9uSWRlbnRpZmllciwgaW50IHNlZ21lbnRJbmRleCkgb3ZlcnJpZGU7CisgICAg
dmlydHVhbCB2b2lkIGluc2VydFNlc3Npb25TZWdtZW50KEVycm9yU3RyaW5nKiwgSW5zcGVjdG9y
OjpUeXBlQnVpbGRlcjo6UmVwbGF5OjpTZXNzaW9uSWRlbnRpZmllciwgSW5zcGVjdG9yOjpUeXBl
QnVpbGRlcjo6UmVwbGF5OjpTZWdtZW50SWRlbnRpZmllciwgaW50IHNlZ21lbnRJbmRleCkgb3Zl
cnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZVNlc3Npb25TZWdtZW50KEVycm9yU3RyaW5n
KiwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UmVwbGF5OjpTZXNzaW9uSWRlbnRpZmllciwgaW50
IHNlZ21lbnRJbmRleCkgb3ZlcnJpZGU7CiAKLSAgICB2aXJ0dWFsIHZvaWQgY3VycmVudFJlcGxh
eVN0YXRlKEVycm9yU3RyaW5nKiwgU2Vzc2lvbklkZW50aWZpZXIqLCBJbnNwZWN0b3I6OlR5cGVC
dWlsZGVyOjpPcHRPdXRwdXQ8aW50Piogc2VnbWVudElkZW50aWZpZXIsIEluc3BlY3Rvcjo6VHlw
ZUJ1aWxkZXI6OlJlcGxheTo6U2Vzc2lvblN0YXRlOjpFbnVtKiBzZXNzaW9uU3RhdGUsIEluc3Bl
Y3Rvcjo6VHlwZUJ1aWxkZXI6OlJlcGxheTo6U2VnbWVudFN0YXRlOjpFbnVtKiBzZWdtZW50U3Rh
dGUsIFJlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpSZXBsYXk6OlJlcGxheVBvc2l0aW9u
PiYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBnZXRBdmFpbGFibGVTZXNzaW9ucyhFcnJv
clN0cmluZyosIFJlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheTxTZXNzaW9uSWRl
bnRpZmllcj4+Jikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGdldFNlc3Npb25EYXRhKEVy
cm9yU3RyaW5nKiwgU2Vzc2lvbklkZW50aWZpZXIsIFJlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWls
ZGVyOjpSZXBsYXk6OlJlcGxheVNlc3Npb24+Jikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lk
IGdldFNlZ21lbnREYXRhKEVycm9yU3RyaW5nKiwgU2VnbWVudElkZW50aWZpZXIsIFJlZlB0cjxJ
bnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpSZXBsYXk6OlNlc3Npb25TZWdtZW50PiYpIG92ZXJyaWRl
OworICAgIHZpcnR1YWwgdm9pZCBjdXJyZW50UmVwbGF5U3RhdGUoRXJyb3JTdHJpbmcqLCBJbnNw
ZWN0b3I6OlR5cGVCdWlsZGVyOjpSZXBsYXk6OlNlc3Npb25JZGVudGlmaWVyKiwgSW5zcGVjdG9y
OjpUeXBlQnVpbGRlcjo6T3B0T3V0cHV0PEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlJlcGxheTo6
U2VnbWVudElkZW50aWZpZXI+KiwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UmVwbGF5OjpTZXNz
aW9uU3RhdGUqLCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpSZXBsYXk6OlNlZ21lbnRTdGF0ZSog
c2VnbWVudFN0YXRlLCBSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UmVwbGF5OjpSZXBs
YXlQb3NpdGlvbj4mKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0QXZhaWxhYmxlU2Vz
c2lvbnMoRXJyb3JTdHJpbmcqLCBSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk8
SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UmVwbGF5OjpTZXNzaW9uSWRlbnRpZmllcj4+Jikgb3Zl
cnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGdldFNlc3Npb25EYXRhKEVycm9yU3RyaW5nKiwgSW5z
cGVjdG9yOjpUeXBlQnVpbGRlcjo6UmVwbGF5OjpTZXNzaW9uSWRlbnRpZmllciwgUmVmUHRyPElu
c3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlJlcGxheTo6UmVwbGF5U2Vzc2lvbj4mKSBvdmVycmlkZTsK
KyAgICB2aXJ0dWFsIHZvaWQgZ2V0U2VnbWVudERhdGEoRXJyb3JTdHJpbmcqLCBJbnNwZWN0b3I6
OlR5cGVCdWlsZGVyOjpSZXBsYXk6OlNlZ21lbnRJZGVudGlmaWVyLCBSZWZQdHI8SW5zcGVjdG9y
OjpUeXBlQnVpbGRlcjo6UmVwbGF5OjpTZXNzaW9uU2VnbWVudD4mKSBvdmVycmlkZTsKIAogcHJp
dmF0ZToKICAgICBQYXNzUmVmUHRyPFJlcGxheVNlc3Npb24+IGZpbmRTZXNzaW9uKEVycm9yU3Ry
aW5nKiwgU2Vzc2lvbklkZW50aWZpZXIpOwogICAgIFBhc3NSZWZQdHI8UmVwbGF5U2Vzc2lvblNl
Z21lbnQ+IGZpbmRTZWdtZW50KEVycm9yU3RyaW5nKiwgU2VnbWVudElkZW50aWZpZXIpOwotICAg
IFNlc3Npb25TdGF0ZSBzZXNzaW9uU3RhdGUoKSBjb25zdDsKKyAgICBXZWJDb3JlOjpTZXNzaW9u
U3RhdGUgc2Vzc2lvblN0YXRlKCkgY29uc3Q7CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW5zcGVj
dG9yOjpJbnNwZWN0b3JSZXBsYXlGcm9udGVuZERpc3BhdGNoZXI+IG1fZnJvbnRlbmREaXNwYXRj
aGVyOwogICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvclJlcGxheUJhY2tlbmREaXNwYXRj
aGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvclJlc291cmNlQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvclJlc291cmNlQWdlbnQuY3BwCmluZGV4IGE0NzAzMGQyZGYxNzNiMDVlMGYx
YWE4MzI4NjE3ZDAxOGYwZmYwMTAuLmI0NjhmMzU1Njk5NGY2NjlhNjA4MzJhYWE5ZmUxOTVjMDVj
MGQyNDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXNv
dXJjZUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVz
b3VyY2VBZ2VudC5jcHAKQEAgLTMxNyw3ICszMTcsNyBAQCB2b2lkIEluc3BlY3RvclJlc291cmNl
QWdlbnQ6OndpbGxTZW5kUmVxdWVzdCh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIERvY3VtZW50
TAogICAgICAgICByZXF1ZXN0LnNldEhUVFBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFtZTo6Q2Fj
aGVDb250cm9sLCAibm8tY2FjaGUiKTsKICAgICB9CiAKLSAgICBJbnNwZWN0b3I6OlR5cGVCdWls
ZGVyOjpQYWdlOjpSZXNvdXJjZVR5cGU6OkVudW0gcmVzb3VyY2VUeXBlID0gSW5zcGVjdG9yUGFn
ZUFnZW50OjpyZXNvdXJjZVR5cGVKc29uKHR5cGUpOworICAgIEluc3BlY3Rvcjo6VHlwZUJ1aWxk
ZXI6OlBhZ2U6OlJlc291cmNlVHlwZSByZXNvdXJjZVR5cGUgPSBJbnNwZWN0b3JQYWdlQWdlbnQ6
OnJlc291cmNlVHlwZUpzb24odHlwZSk7CiAKICAgICBSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVp
bGRlcjo6TmV0d29yazo6SW5pdGlhdG9yPiBpbml0aWF0b3JPYmplY3QgPSBidWlsZEluaXRpYXRv
ck9iamVjdChsb2FkZXItPmZyYW1lKCkgPyBsb2FkZXItPmZyYW1lKCktPmRvY3VtZW50KCkgOiBu
dWxscHRyKTsKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+cmVxdWVzdFdpbGxCZVNlbnQocmVx
dWVzdElkLCBtX3BhZ2VBZ2VudC0+ZnJhbWVJZChsb2FkZXItPmZyYW1lKCkpLCBtX3BhZ2VBZ2Vu
dC0+bG9hZGVySWQobG9hZGVyKSwgbG9hZGVyLT51cmwoKS5zdHJpbmcoKSwgYnVpbGRPYmplY3RG
b3JSZXNvdXJjZVJlcXVlc3QocmVxdWVzdCksIGN1cnJlbnRUaW1lKCksIGluaXRpYXRvck9iamVj
dCwgYnVpbGRPYmplY3RGb3JSZXNvdXJjZVJlc3BvbnNlKHJlZGlyZWN0UmVzcG9uc2UsIGxvYWRl
ciksIHR5cGUgIT0gSW5zcGVjdG9yUGFnZUFnZW50OjpPdGhlclJlc291cmNlID8gJnJlc291cmNl
VHlwZSA6IG51bGxwdHIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvclN0eWxlU2hlZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
clN0eWxlU2hlZXQuY3BwCmluZGV4IGMzODgzNzc4N2E2YzFmMmYzZWZiM2RkYjkxZWY3MjU1NDg1
YTlkMTguLjhmMmI4MmI3ZjZiNGJmYTI5MDk2MzcxYWUyYTBkYTA2N2U3Zjg5NDQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHAKQEAgLTE2
Niw3ICsxNjYsNyBAQCBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpD
U1M6OlNvdXJjZVJhbmdlPiBidWlsZFNvdXJjZVJhbmdlT2JqZQogc3RhdGljIFBhc3NSZWZQdHI8
SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q1NTOjpDU1NNZWRpYT4gYnVpbGRNZWRpYU9iamVjdChj
b25zdCBNZWRpYUxpc3QqIG1lZGlhLCBNZWRpYUxpc3RTb3VyY2UgbWVkaWFMaXN0U291cmNlLCBj
b25zdCBTdHJpbmcmIHNvdXJjZVVSTCkKIHsKICAgICAvLyBNYWtlIGNlcnRhaW4gY29tcGlsZXJz
IGhhcHB5IGJ5IGluaXRpYWxpemluZyB8c291cmNlfCB1cC1mcm9udC4KLSAgICBJbnNwZWN0b3I6
OlR5cGVCdWlsZGVyOjpDU1M6OkNTU01lZGlhOjpTb3VyY2U6OkVudW0gc291cmNlID0gSW5zcGVj
dG9yOjpUeXBlQnVpbGRlcjo6Q1NTOjpDU1NNZWRpYTo6U291cmNlOjpJbmxpbmVTaGVldDsKKyAg
ICBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDU1M6OkNTU01lZGlhOjpTb3VyY2Ugc291cmNlID0g
SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q1NTOjpDU1NNZWRpYTo6U291cmNlOjpJbmxpbmVTaGVl
dDsKICAgICBzd2l0Y2ggKG1lZGlhTGlzdFNvdXJjZSkgewogICAgIGNhc2UgTWVkaWFMaXN0U291
cmNlTWVkaWFSdWxlOgogICAgICAgICBzb3VyY2UgPSBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpD
U1M6OkNTU01lZGlhOjpTb3VyY2U6Ok1lZGlhUnVsZTsKQEAgLTUyOCw3ICs1MjgsMTMgQEAgUGFz
c1JlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDU1M6OkNTU1N0eWxlPiBJbnNwZWN0b3JT
dHlsZTo6c3R5bGVXaXRoUHJvcGUKICAgICAgICAgY29uc3QgQ1NTUHJvcGVydHlTb3VyY2VEYXRh
JiBwcm9wZXJ0eUVudHJ5ID0gaXQtPnNvdXJjZURhdGE7CiAgICAgICAgIGNvbnN0IFN0cmluZyYg
bmFtZSA9IHByb3BlcnR5RW50cnkubmFtZTsKIAotICAgICAgICBJbnNwZWN0b3I6OlR5cGVCdWls
ZGVyOjpDU1M6OkNTU1Byb3BlcnR5OjpTdGF0dXM6OkVudW0gc3RhdHVzID0gaXQtPmRpc2FibGVk
ID8gSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q1NTOjpDU1NQcm9wZXJ0eTo6U3RhdHVzOjpEaXNh
YmxlZCA6IEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTUHJvcGVydHk6OlN0YXR1czo6
QWN0aXZlOworICAgICAgICAvLyBWaXN1YWwgU3R1ZGlvIGRpc2FncmVlcyB3aXRoIG90aGVyIGNv
bXBpbGVycyBhcyB0byB3aGV0aGVyICdjbGFzcycgaXMgbmVlZGVkIGhlcmUuCisjaWYgQ09NUElM
RVIoTVNWQykKKyAgICAgICAgZW51bSBjbGFzcyBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDU1M6
OkNTU1Byb3BlcnR5U3RhdHVzIHN0YXR1czsKKyNlbHNlCisgICAgICAgIGVudW0gSW5zcGVjdG9y
OjpUeXBlQnVpbGRlcjo6Q1NTOjpDU1NQcm9wZXJ0eVN0YXR1cyBzdGF0dXM7CisjZW5kaWYKKyAg
ICAgICAgc3RhdHVzID0gaXQtPmRpc2FibGVkID8gSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q1NT
OjpDU1NQcm9wZXJ0eVN0YXR1czo6RGlzYWJsZWQgOiBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpD
U1M6OkNTU1Byb3BlcnR5U3RhdHVzOjpBY3RpdmU7CiAKICAgICAgICAgUmVmUHRyPEluc3BlY3Rv
cjo6VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTUHJvcGVydHk+IHByb3BlcnR5ID0gSW5zcGVjdG9yOjpU
eXBlQnVpbGRlcjo6Q1NTOjpDU1NQcm9wZXJ0eTo6Y3JlYXRlKCkKICAgICAgICAgICAgIC5zZXRO
YW1lKG5hbWUubG93ZXIoKSkKQEAgLTU3MSw5ICs1NzcsOSBAQCBQYXNzUmVmUHRyPEluc3BlY3Rv
cjo6VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTU3R5bGU+IEluc3BlY3RvclN0eWxlOjpzdHlsZVdpdGhQ
cm9wZQogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Y2Nlc3NTdGF0dXMgJiYgcHJldmlv
dXNTdGF0dXMgIT0gImluYWN0aXZlIikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChwcm9wZXJ0eUVudHJ5LmltcG9ydGFudCB8fCAhc3VjY2Vzc1ByaW9yaXR5KSAvLyBQcmlvcml0
eSBub3Qgc2V0ID09ICJub3QgaW1wb3J0YW50Ii4KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2hvdWxkSW5hY3RpdmF0ZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZWxzZSBpZiAoc3RhdHVzID09IEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTUHJv
cGVydHk6OlN0YXR1czo6QWN0aXZlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxz
ZSBpZiAoc3RhdHVzID09IEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTUHJvcGVydHlT
dGF0dXM6OkFjdGl2ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJbmFj
dGl2YXRlIGEgbm9uLWltcG9ydGFudCBwcm9wZXJ0eSBmb2xsb3dpbmcgdGhlIHNhbWUtbmFtZWQg
aW1wb3J0YW50IHByb3BlcnR5LgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0
dXMgPSBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDU1M6OkNTU1Byb3BlcnR5OjpTdGF0dXM6Oklu
YWN0aXZlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSBJbnNwZWN0
b3I6OlR5cGVCdWlsZGVyOjpDU1M6OkNTU1Byb3BlcnR5U3RhdHVzOjpJbmFjdGl2ZTsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgICAgIH0gZWxzZSB7CkBAIC01ODYsNyArNTkyLDcgQEAgUGFzc1JlZlB0cjxJ
bnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDU1M6OkNTU1N0eWxlPiBJbnNwZWN0b3JTdHlsZTo6c3R5
bGVXaXRoUHJvcGUKICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lVG9QcmV2aW91c0Fj
dGl2ZVByb3BlcnR5LnNldChjYW5vbmljYWxQcm9wZXJ0eU5hbWUsIHByb3BlcnR5KTsKIAogICAg
ICAgICAgICAgICAgIGlmIChzaG91bGRJbmFjdGl2YXRlKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGFjdGl2ZUl0LT52YWx1ZS0+c2V0U3RhdHVzKEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNTUzo6
Q1NTUHJvcGVydHk6OlN0YXR1czo6SW5hY3RpdmUpOworICAgICAgICAgICAgICAgICAgICBhY3Rp
dmVJdC0+dmFsdWUtPnNldFN0YXR1cyhJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDU1M6OkNTU1By
b3BlcnR5U3RhdHVzOjpJbmFjdGl2ZSk7CiAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TmFt
ZVRvUHJldmlvdXNBY3RpdmVQcm9wZXJ0eS5zZXQoY2Fub25pY2FsUHJvcGVydHlOYW1lLCBwcm9w
ZXJ0eSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIHsKQEAgLTU5NCw3
ICs2MDAsNyBAQCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTU3R5
bGU+IEluc3BlY3RvclN0eWxlOjpzdHlsZVdpdGhQcm9wZQogICAgICAgICAgICAgICAgIC8vIERl
ZmF1bHQgImltcGxpY2l0IiA9PSBmYWxzZS4KICAgICAgICAgICAgICAgICBpZiAoaW1wbGljaXQp
CiAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5LT5zZXRJbXBsaWNpdCh0cnVlKTsKLSAgICAg
ICAgICAgICAgICBzdGF0dXMgPSBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDU1M6OkNTU1Byb3Bl
cnR5OjpTdGF0dXM6OlN0eWxlOworICAgICAgICAgICAgICAgIHN0YXR1cyA9IEluc3BlY3Rvcjo6
VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTUHJvcGVydHlTdGF0dXM6OlN0eWxlOwogCiAgICAgICAgICAg
ICAgICAgU3RyaW5nIHNob3J0aGFuZCA9IG1fc3R5bGUtPmdldFByb3BlcnR5U2hvcnRoYW5kKG5h
bWUpOwogICAgICAgICAgICAgICAgIGlmICghc2hvcnRoYW5kLmlzRW1wdHkoKSkgewpAQCAtNjEw
LDcgKzYxNiw3IEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q1NTOjpDU1NT
dHlsZT4gSW5zcGVjdG9yU3R5bGU6OnN0eWxlV2l0aFByb3BlCiAgICAgICAgIH0KIAogICAgICAg
ICAvLyBEZWZhdWx0ICJzdGF0dXMiID09ICJzdHlsZSIuCi0gICAgICAgIGlmIChzdGF0dXMgIT0g
SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q1NTOjpDU1NQcm9wZXJ0eTo6U3RhdHVzOjpTdHlsZSkK
KyAgICAgICAgaWYgKHN0YXR1cyAhPSBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDU1M6OkNTU1By
b3BlcnR5U3RhdHVzOjpTdHlsZSkKICAgICAgICAgICAgIHByb3BlcnR5LT5zZXRTdGF0dXMoc3Rh
dHVzKTsKICAgICB9CiAKQEAgLTc0OSw3ICs3NTUsNyBAQCBOZXdMaW5lQW5kV2hpdGVzcGFjZSYg
SW5zcGVjdG9yU3R5bGU6Om5ld0xpbmVBbmRXaGl0ZXNwYWNlRGVsaW1pdGVycygpIGNvbnN0CiAg
ICAgcmV0dXJuIG1fZm9ybWF0OwogfQogCi1QYXNzUmVmUHRyPEluc3BlY3RvclN0eWxlU2hlZXQ+
IEluc3BlY3RvclN0eWxlU2hlZXQ6OmNyZWF0ZShJbnNwZWN0b3JQYWdlQWdlbnQqIHBhZ2VBZ2Vu
dCwgY29uc3QgU3RyaW5nJiBpZCwgUGFzc1JlZlB0cjxDU1NTdHlsZVNoZWV0PiBwYWdlU3R5bGVT
aGVldCwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luOjpFbnVt
IG9yaWdpbiwgY29uc3QgU3RyaW5nJiBkb2N1bWVudFVSTCwgTGlzdGVuZXIqIGxpc3RlbmVyKQor
UGFzc1JlZlB0cjxJbnNwZWN0b3JTdHlsZVNoZWV0PiBJbnNwZWN0b3JTdHlsZVNoZWV0OjpjcmVh
dGUoSW5zcGVjdG9yUGFnZUFnZW50KiBwYWdlQWdlbnQsIGNvbnN0IFN0cmluZyYgaWQsIFBhc3NS
ZWZQdHI8Q1NTU3R5bGVTaGVldD4gcGFnZVN0eWxlU2hlZXQsIEluc3BlY3Rvcjo6VHlwZUJ1aWxk
ZXI6OkNTUzo6U3R5bGVTaGVldE9yaWdpbiBvcmlnaW4sIGNvbnN0IFN0cmluZyYgZG9jdW1lbnRV
UkwsIExpc3RlbmVyKiBsaXN0ZW5lcikKIHsKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEluc3Bl
Y3RvclN0eWxlU2hlZXQocGFnZUFnZW50LCBpZCwgcGFnZVN0eWxlU2hlZXQsIG9yaWdpbiwgZG9j
dW1lbnRVUkwsIGxpc3RlbmVyKSk7CiB9CkBAIC03NjIsNyArNzY4LDcgQEAgU3RyaW5nIEluc3Bl
Y3RvclN0eWxlU2hlZXQ6OnN0eWxlU2hlZXRVUkwoQ1NTU3R5bGVTaGVldCogcGFnZVN0eWxlU2hl
ZXQpCiAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CiB9CiAKLUluc3BlY3RvclN0eWxlU2hlZXQ6
Okluc3BlY3RvclN0eWxlU2hlZXQoSW5zcGVjdG9yUGFnZUFnZW50KiBwYWdlQWdlbnQsIGNvbnN0
IFN0cmluZyYgaWQsIFBhc3NSZWZQdHI8Q1NTU3R5bGVTaGVldD4gcGFnZVN0eWxlU2hlZXQsIElu
c3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6RW51bSBvcmlnaW4s
IGNvbnN0IFN0cmluZyYgZG9jdW1lbnRVUkwsIExpc3RlbmVyKiBsaXN0ZW5lcikKK0luc3BlY3Rv
clN0eWxlU2hlZXQ6Okluc3BlY3RvclN0eWxlU2hlZXQoSW5zcGVjdG9yUGFnZUFnZW50KiBwYWdl
QWdlbnQsIGNvbnN0IFN0cmluZyYgaWQsIFBhc3NSZWZQdHI8Q1NTU3R5bGVTaGVldD4gcGFnZVN0
eWxlU2hlZXQsIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNTUzo6U3R5bGVTaGVldE9yaWdpbiBv
cmlnaW4sIGNvbnN0IFN0cmluZyYgZG9jdW1lbnRVUkwsIExpc3RlbmVyKiBsaXN0ZW5lcikKICAg
ICA6IG1fcGFnZUFnZW50KHBhZ2VBZ2VudCkKICAgICAsIG1faWQoaWQpCiAgICAgLCBtX3BhZ2VT
dHlsZVNoZWV0KHBhZ2VTdHlsZVNoZWV0KQpAQCAtMTQyNiwxMiArMTQzMiwxMiBAQCB2b2lkIElu
c3BlY3RvclN0eWxlU2hlZXQ6OmNvbGxlY3RGbGF0UnVsZXMoUGFzc1JlZlB0cjxDU1NSdWxlTGlz
dD4gcnVsZUxpc3QsIENTUwogICAgIH0KIH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3JTdHlsZVNo
ZWV0Rm9ySW5saW5lU3R5bGU+IEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZTo6Y3Jl
YXRlKEluc3BlY3RvclBhZ2VBZ2VudCogcGFnZUFnZW50LCBjb25zdCBTdHJpbmcmIGlkLCBQYXNz
UmVmUHRyPEVsZW1lbnQ+IGVsZW1lbnQsIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNTUzo6U3R5
bGVTaGVldE9yaWdpbjo6RW51bSBvcmlnaW4sIExpc3RlbmVyKiBsaXN0ZW5lcikKK1Bhc3NSZWZQ
dHI8SW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlPiBJbnNwZWN0b3JTdHlsZVNoZWV0
Rm9ySW5saW5lU3R5bGU6OmNyZWF0ZShJbnNwZWN0b3JQYWdlQWdlbnQqIHBhZ2VBZ2VudCwgY29u
c3QgU3RyaW5nJiBpZCwgUGFzc1JlZlB0cjxFbGVtZW50PiBlbGVtZW50LCBJbnNwZWN0b3I6OlR5
cGVCdWlsZGVyOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW4gb3JpZ2luLCBMaXN0ZW5lciogbGlzdGVu
ZXIpCiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5s
aW5lU3R5bGUocGFnZUFnZW50LCBpZCwgZWxlbWVudCwgb3JpZ2luLCBsaXN0ZW5lcikpOwogfQog
Ci1JbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU6Okluc3BlY3RvclN0eWxlU2hlZXRG
b3JJbmxpbmVTdHlsZShJbnNwZWN0b3JQYWdlQWdlbnQqIHBhZ2VBZ2VudCwgY29uc3QgU3RyaW5n
JiBpZCwgUGFzc1JlZlB0cjxFbGVtZW50PiBlbGVtZW50LCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVy
OjpDU1M6OlN0eWxlU2hlZXRPcmlnaW46OkVudW0gb3JpZ2luLCBMaXN0ZW5lciogbGlzdGVuZXIp
CitJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU6Okluc3BlY3RvclN0eWxlU2hlZXRG
b3JJbmxpbmVTdHlsZShJbnNwZWN0b3JQYWdlQWdlbnQqIHBhZ2VBZ2VudCwgY29uc3QgU3RyaW5n
JiBpZCwgUGFzc1JlZlB0cjxFbGVtZW50PiBlbGVtZW50LCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVy
OjpDU1M6OlN0eWxlU2hlZXRPcmlnaW4gb3JpZ2luLCBMaXN0ZW5lciogbGlzdGVuZXIpCiAgICAg
OiBJbnNwZWN0b3JTdHlsZVNoZWV0KHBhZ2VBZ2VudCwgaWQsIG51bGxwdHIsIG9yaWdpbiwgIiIs
IGxpc3RlbmVyKQogICAgICwgbV9lbGVtZW50KGVsZW1lbnQpCiAgICAgLCBtX3J1bGVTb3VyY2VE
YXRhKG51bGxwdHIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yU3R5bGVTaGVldC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxl
U2hlZXQuaAppbmRleCA4YjE5MWZlMDg0MzliNWY4ZTc3YTI3NTk1OTdlNjMzZGE5OWUwZjRmLi4w
Y2E1YTUzYWVlNWMzODMzZmY5ODViOWIxMzU3OTQzMDk4NzIwNTZlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmgKQEAgLTE4MSw3ICsxODEsNyBA
QCBwdWJsaWM6CiAgICAgfTsKIAogICAgIHR5cGVkZWYgSGFzaE1hcDxDU1NTdHlsZURlY2xhcmF0
aW9uKiwgUmVmUHRyPEluc3BlY3RvclN0eWxlPj4gSW5zcGVjdG9yU3R5bGVNYXA7Ci0gICAgc3Rh
dGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yU3R5bGVTaGVldD4gY3JlYXRlKEluc3BlY3RvclBhZ2VB
Z2VudCosIGNvbnN0IFN0cmluZyYgaWQsIFBhc3NSZWZQdHI8Q1NTU3R5bGVTaGVldD4gcGFnZVN0
eWxlU2hlZXQsIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6
RW51bSwgY29uc3QgU3RyaW5nJiBkb2N1bWVudFVSTCwgTGlzdGVuZXIqKTsKKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxJbnNwZWN0b3JTdHlsZVNoZWV0PiBjcmVhdGUoSW5zcGVjdG9yUGFnZUFnZW50
KiwgY29uc3QgU3RyaW5nJiBpZCwgUGFzc1JlZlB0cjxDU1NTdHlsZVNoZWV0PiBwYWdlU3R5bGVT
aGVldCwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luLCBjb25z
dCBTdHJpbmcmIGRvY3VtZW50VVJMLCBMaXN0ZW5lciopOwogICAgIHN0YXRpYyBTdHJpbmcgc3R5
bGVTaGVldFVSTChDU1NTdHlsZVNoZWV0KiBwYWdlU3R5bGVTaGVldCk7CiAKICAgICB2aXJ0dWFs
IH5JbnNwZWN0b3JTdHlsZVNoZWV0KCk7CkBAIC0yMTIsNyArMjEyLDcgQEAgcHVibGljOgogICAg
IEluc3BlY3RvckNTU0lkIHN0eWxlSWQoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUpIGNvbnN0
IHsgcmV0dXJuIHJ1bGVPclN0eWxlSWQoc3R5bGUpOyB9CiAKIHByb3RlY3RlZDoKLSAgICBJbnNw
ZWN0b3JTdHlsZVNoZWV0KEluc3BlY3RvclBhZ2VBZ2VudCosIGNvbnN0IFN0cmluZyYgaWQsIFBh
c3NSZWZQdHI8Q1NTU3R5bGVTaGVldD4gcGFnZVN0eWxlU2hlZXQsIEluc3BlY3Rvcjo6VHlwZUJ1
aWxkZXI6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6RW51bSwgY29uc3QgU3RyaW5nJiBkb2N1bWVu
dFVSTCwgTGlzdGVuZXIqKTsKKyAgICBJbnNwZWN0b3JTdHlsZVNoZWV0KEluc3BlY3RvclBhZ2VB
Z2VudCosIGNvbnN0IFN0cmluZyYgaWQsIFBhc3NSZWZQdHI8Q1NTU3R5bGVTaGVldD4gcGFnZVN0
eWxlU2hlZXQsIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNTUzo6U3R5bGVTaGVldE9yaWdpbiwg
Y29uc3QgU3RyaW5nJiBkb2N1bWVudFVSTCwgTGlzdGVuZXIqKTsKIAogICAgIGJvb2wgY2FuQmlu
ZCgpIGNvbnN0IHsgcmV0dXJuIG1fb3JpZ2luICE9IEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNT
Uzo6U3R5bGVTaGVldE9yaWdpbjo6VXNlckFnZW50ICYmIG1fb3JpZ2luICE9IEluc3BlY3Rvcjo6
VHlwZUJ1aWxkZXI6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6VXNlcjsgfQogICAgIEluc3BlY3Rv
ckNTU0lkIHJ1bGVPclN0eWxlSWQoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUpIGNvbnN0OwpA
QCAtMjQ4LDcgKzI0OCw3IEBAIHByaXZhdGU6CiAgICAgSW5zcGVjdG9yUGFnZUFnZW50KiBtX3Bh
Z2VBZ2VudDsKICAgICBTdHJpbmcgbV9pZDsKICAgICBSZWZQdHI8Q1NTU3R5bGVTaGVldD4gbV9w
YWdlU3R5bGVTaGVldDsKLSAgICBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDU1M6OlN0eWxlU2hl
ZXRPcmlnaW46OkVudW0gbV9vcmlnaW47CisgICAgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q1NT
OjpTdHlsZVNoZWV0T3JpZ2luIG1fb3JpZ2luOwogICAgIFN0cmluZyBtX2RvY3VtZW50VVJMOwog
ICAgIGJvb2wgbV9pc1JldmFsaWRhdGluZzsKICAgICBQYXJzZWRTdHlsZVNoZWV0KiBtX3BhcnNl
ZFN0eWxlU2hlZXQ7CkBAIC0yNTksMTQgKzI1OSwxNCBAQCBwcml2YXRlOgogCiBjbGFzcyBJbnNw
ZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGUgOiBwdWJsaWMgSW5zcGVjdG9yU3R5bGVTaGVl
dCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yU3R5bGVTaGVldEZv
cklubGluZVN0eWxlPiBjcmVhdGUoSW5zcGVjdG9yUGFnZUFnZW50KiwgY29uc3QgU3RyaW5nJiBp
ZCwgUGFzc1JlZlB0cjxFbGVtZW50PiwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q1NTOjpTdHls
ZVNoZWV0T3JpZ2luOjpFbnVtLCBMaXN0ZW5lciopOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPElu
c3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZT4gY3JlYXRlKEluc3BlY3RvclBhZ2VBZ2Vu
dCosIGNvbnN0IFN0cmluZyYgaWQsIFBhc3NSZWZQdHI8RWxlbWVudD4sIEluc3BlY3Rvcjo6VHlw
ZUJ1aWxkZXI6OkNTUzo6U3R5bGVTaGVldE9yaWdpbiwgTGlzdGVuZXIqKTsKIAogICAgIHZvaWQg
ZGlkTW9kaWZ5RWxlbWVudEF0dHJpYnV0ZSgpOwogICAgIHZpcnR1YWwgYm9vbCBnZXRUZXh0KFN0
cmluZyogcmVzdWx0KSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIENTU1N0eWxlRGVjbGFy
YXRpb24qIHN0eWxlRm9ySWQoY29uc3QgSW5zcGVjdG9yQ1NTSWQmIGlkKSBjb25zdCBvdmVycmlk
ZSB7IEFTU0VSVF9VTlVTRUQoaWQsICFpZC5vcmRpbmFsKCkpOyByZXR1cm4gaW5saW5lU3R5bGUo
KTsgfQogCiBwcm90ZWN0ZWQ6Ci0gICAgSW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxl
KEluc3BlY3RvclBhZ2VBZ2VudCosIGNvbnN0IFN0cmluZyYgaWQsIFBhc3NSZWZQdHI8RWxlbWVu
dD4sIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6RW51bSwg
TGlzdGVuZXIqKTsKKyAgICBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGUoSW5zcGVj
dG9yUGFnZUFnZW50KiwgY29uc3QgU3RyaW5nJiBpZCwgUGFzc1JlZlB0cjxFbGVtZW50PiwgSW5z
cGVjdG9yOjpUeXBlQnVpbGRlcjo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luLCBMaXN0ZW5lciopOwog
CiAgICAgdmlydHVhbCBEb2N1bWVudCogb3duZXJEb2N1bWVudCgpIGNvbnN0IG92ZXJyaWRlOwog
ICAgIHZpcnR1YWwgUmVmUHRyPENTU1J1bGVTb3VyY2VEYXRhPiBydWxlU291cmNlRGF0YUZvcihD
U1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSkgY29uc3Qgb3ZlcnJpZGUgeyBBU1NFUlRfVU5VU0VE
KHN0eWxlLCBzdHlsZSA9PSBpbmxpbmVTdHlsZSgpKTsgcmV0dXJuIG1fcnVsZVNvdXJjZURhdGE7
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JUaW1lbGlu
ZUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JUaW1lbGluZUFn
ZW50LmNwcAppbmRleCAyNDI2OTc0ZjQ3MDZhNzFiZjk3ZjlkMjQyNWM3M2NkNDI5OTk0YTE0Li5h
Y2U1NjNmZTYyOTEzZmNhZWUwMjNiYzc1MmVkMTFmOTc2MmQyNTE0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclRpbWVsaW5lQWdlbnQuY3BwCkBAIC01NTQs
NyArNTU0LDcgQEAgdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpicmVha3BvaW50QWN0aW9u
UHJvYmUoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEkKICAgICBhcHBlbmRSZWNvcmQoVGlt
ZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVQcm9iZVNhbXBsZURhdGEoYWN0aW9uLCBoaXRDb3Vu
dCksIFRpbWVsaW5lUmVjb3JkVHlwZTo6UHJvYmVTYW1wbGUsIGZhbHNlLCBmcmFtZUZyb21FeGVj
U3RhdGUoZXhlYykpOwogfQogCi1zdGF0aWMgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6VGltZWxp
bmU6OkV2ZW50VHlwZTo6RW51bSB0b1Byb3RvY29sKFRpbWVsaW5lUmVjb3JkVHlwZSB0eXBlKQor
c3RhdGljIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlRpbWVsaW5lOjpFdmVudFR5cGUgdG9Qcm90
b2NvbChUaW1lbGluZVJlY29yZFR5cGUgdHlwZSkKIHsKICAgICBzd2l0Y2ggKHR5cGUpIHsKICAg
ICBjYXNlIFRpbWVsaW5lUmVjb3JkVHlwZTo6RXZlbnREaXNwYXRjaDoKQEAgLTY0Niw3ICs2NDYs
NyBAQCB2b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OmFkZFJlY29yZFRvVGltZWxpbmUoUGFz
c1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBycAogewogICAgIHBycFJlY29yZC0+c2V0U3RyaW5n
KCJ0eXBlIiwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Z2V0V2ViRW51bUNvbnN0YW50VmFsdWUo
dG9Qcm90b2NvbCh0eXBlKSkpOwogCi0gICAgUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6
OlRpbWVsaW5lOjpUaW1lbGluZUV2ZW50PiByZWNvcmQgPSBJbnNwZWN0b3I6OlR5cGVCdWlsZGVy
OjpUaW1lbGluZTo6VGltZWxpbmVFdmVudDo6cnVudGltZUNhc3QocHJwUmVjb3JkKTsKKyAgICBS
ZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6VGltZWxpbmU6OlRpbWVsaW5lRXZlbnQ+IHJl
Y29yZCA9IEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6VGltZWxpbmU6OlRp
bWVsaW5lRXZlbnQ+OjpydW50aW1lQ2FzdChwcnBSZWNvcmQpOwogCiAgICAgaWYgKG1fcmVjb3Jk
U3RhY2suaXNFbXB0eSgpKQogICAgICAgICBzZW5kRXZlbnQocmVjb3JkLnJlbGVhc2UoKSk7CkBA
IC03MTQsNyArNzE0LDcgQEAgdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpzZW5kRXZlbnQo
UGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGV2ZW50KQogICAgICAgICByZXR1cm47CiAKICAg
ICAvLyBGSVhNRTogcnVudGltZUNhc3QgaXMgYSBoYWNrLiBXZSBkbyBpdCBiZWNhdXNlIHdlIGNh
bid0IGJ1aWxkIFRpbWVsaW5lRXZlbnQgZGlyZWN0bHkgbm93LgotICAgIFJlZlB0cjxJbnNwZWN0
b3I6OlR5cGVCdWlsZGVyOjpUaW1lbGluZTo6VGltZWxpbmVFdmVudD4gcmVjb3JkQ2hlY2tlZCA9
IEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlRpbWVsaW5lOjpUaW1lbGluZUV2ZW50OjpydW50aW1l
Q2FzdChldmVudCk7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlRpbWVsaW5l
OjpUaW1lbGluZUV2ZW50PiByZWNvcmRDaGVja2VkID0gQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6
OlR5cGVCdWlsZGVyOjpUaW1lbGluZTo6VGltZWxpbmVFdmVudD46OnJ1bnRpbWVDYXN0KGV2ZW50
KTsKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+ZXZlbnRSZWNvcmRlZChyZWNvcmRDaGVja2Vk
LnJlbGVhc2UoKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9w
cm90b2NvbC9DU1MuanNvbiBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9DU1Mu
anNvbgppbmRleCBjYTkwY2Y3NDFiZjZjMWI4OTM2ODdhZmUxZjYwZTA0ZTQwMmRjODRjLi45YzVi
Mjc1NDVlYjliY2E3OGFkOWUyZTNlY2FmNjAyNDljYmZjNjAxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvQ1NTLmpzb24KKysrIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL3Byb3RvY29sL0NTUy5qc29uCkBAIC0xNjMsNiArMTYzLDEyIEBACiAgICAgICAg
ICAgICAiZGVzY3JpcHRpb24iOiAiQ1NTIHN0eWxlIHJlcHJlc2VudGF0aW9uLiIKICAgICAgICAg
fSwKICAgICAgICAgeworICAgICAgICAgICAgImlkIjogIkNTU1Byb3BlcnR5U3RhdHVzIiwKKwkg
ICAgInR5cGUiOiAic3RyaW5nIiwKKyAgICAgICAgICAgICJlbnVtIjogWyJhY3RpdmUiLCAiaW5h
Y3RpdmUiLCAiZGlzYWJsZWQiLCAic3R5bGUiXSwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6
ICJUaGUgcHJvcGVydHkgc3RhdHVzOiBcImFjdGl2ZVwiIGlmIHRoZSBwcm9wZXJ0eSBpcyBlZmZl
Y3RpdmUgaW4gdGhlIHN0eWxlLCBcImluYWN0aXZlXCIgaWYgdGhlIHByb3BlcnR5IGlzIG92ZXJy
aWRkZW4gYnkgYSBzYW1lLW5hbWVkIHByb3BlcnR5IGluIHRoaXMgc3R5bGUgbGF0ZXIgb24sIFwi
ZGlzYWJsZWRcIiBpZiB0aGUgcHJvcGVydHkgaXMgZGlzYWJsZWQgYnkgdGhlIHVzZXIsIFwic3R5
bGVcIiAoaW1wbGllZCBpZiBhYnNlbnQpIGlmIHRoZSBwcm9wZXJ0eSBpcyByZXBvcnRlZCBieSB0
aGUgYnJvd3NlciByYXRoZXIgdGhhbiBieSB0aGUgQ1NTIHNvdXJjZSBwYXJzZXIuIgorICAgICAg
ICB9LAorICAgICAgICB7CiAgICAgICAgICAgICAiaWQiOiAiQ1NTUHJvcGVydHkiLAogICAgICAg
ICAgICAgInR5cGUiOiAib2JqZWN0IiwKICAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWwpAQCAt
MTcyLDcgKzE3OCw3IEBACiAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJpbXBsaWNpdCIsICJ0
eXBlIjogImJvb2xlYW4iLCAib3B0aW9uYWwiOiB0cnVlLCAiZGVzY3JpcHRpb24iOiAiV2hldGhl
ciB0aGUgcHJvcGVydHkgaXMgaW1wbGljaXQgKGltcGxpZXMgPGNvZGU+ZmFsc2U8L2NvZGU+IGlm
IGFic2VudCkuIiB9LAogICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidGV4dCIsICJ0eXBlIjog
InN0cmluZyIsICJvcHRpb25hbCI6IHRydWUsICJkZXNjcmlwdGlvbiI6ICJUaGUgZnVsbCBwcm9w
ZXJ0eSB0ZXh0IGFzIHNwZWNpZmllZCBpbiB0aGUgc3R5bGUuIiB9LAogICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAicGFyc2VkT2siLCAidHlwZSI6ICJib29sZWFuIiwgIm9wdGlvbmFsIjogdHJ1
ZSwgImRlc2NyaXB0aW9uIjogIldoZXRoZXIgdGhlIHByb3BlcnR5IGlzIHVuZGVyc3Rvb2QgYnkg
dGhlIGJyb3dzZXIgKGltcGxpZXMgPGNvZGU+dHJ1ZTwvY29kZT4gaWYgYWJzZW50KS4iIH0sCi0g
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzdGF0dXMiLCAidHlwZSI6ICJzdHJpbmciLCAiZW51
bSI6IFsiYWN0aXZlIiwgImluYWN0aXZlIiwgImRpc2FibGVkIiwgInN0eWxlIl0sICJvcHRpb25h
bCI6IHRydWUsICJkZXNjcmlwdGlvbiI6ICJUaGUgcHJvcGVydHkgc3RhdHVzOiBcImFjdGl2ZVwi
IGlmIHRoZSBwcm9wZXJ0eSBpcyBlZmZlY3RpdmUgaW4gdGhlIHN0eWxlLCBcImluYWN0aXZlXCIg
aWYgdGhlIHByb3BlcnR5IGlzIG92ZXJyaWRkZW4gYnkgYSBzYW1lLW5hbWVkIHByb3BlcnR5IGlu
IHRoaXMgc3R5bGUgbGF0ZXIgb24sIFwiZGlzYWJsZWRcIiBpZiB0aGUgcHJvcGVydHkgaXMgZGlz
YWJsZWQgYnkgdGhlIHVzZXIsIFwic3R5bGVcIiAoaW1wbGllZCBpZiBhYnNlbnQpIGlmIHRoZSBw
cm9wZXJ0eSBpcyByZXBvcnRlZCBieSB0aGUgYnJvd3NlciByYXRoZXIgdGhhbiBieSB0aGUgQ1NT
IHNvdXJjZSBwYXJzZXIuIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic3RhdHVzIiwg
IiRyZWYiOiAiQ1NTUHJvcGVydHlTdGF0dXMiLCAib3B0aW9uYWwiOiB0cnVlLCAiZGVzY3JpcHRp
b24iOiAiV2hldGhlciB0aGUgcHJvcGVydHkgaXMgYWN0aXZlIG9yIGRpc2FibGVkLiIgfSwKICAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogInJhbmdlIiwgIiRyZWYiOiAiU291cmNlUmFuZ2UiLCAi
b3B0aW9uYWwiOiB0cnVlLCAiZGVzY3JpcHRpb24iOiAiVGhlIGVudGlyZSBwcm9wZXJ0eSByYW5n
ZSBpbiB0aGUgZW5jbG9zaW5nIHN0eWxlIGRlY2xhcmF0aW9uIChpZiBhdmFpbGFibGUpLiIgfQog
ICAgICAgICAgICAgXSwKICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJDU1Mgc3R5bGUgZWZm
ZWN0aXZlIHZpc3VhbCBkaW1lbnNpb25zIGFuZCBzb3VyY2Ugb2Zmc2V0cy4iCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvUGFnZS5qc29uIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL3Byb3RvY29sL1BhZ2UuanNvbgppbmRleCAzYWZkYmMwY2QzZDI3ZDUx
NjRkMjZlOGJkMzJjNGQ3NmZkZmRkMjc1Li44OGE3NmM0NmYyYmVmY2RhNGRiMWE0NTA0ZjcyZjJl
MjJkNjcxNTAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvcHJvdG9jb2wv
UGFnZS5qc29uCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9QYWdlLmpz
b24KQEAgLTI5LDI2ICsyOSwyNSBAQAogICAgICAgICAgICAgXQogICAgICAgICB9LAogICAgICAg
ICB7CisgICAgICAgICAgICAiaWQiOiAiRnJhbWVSZXNvdXJjZSIsCisgICAgICAgICAgICAidHlw
ZSI6ICJvYmplY3QiLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCisgICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJ1cmwiLCAidHlwZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRpb24iOiAiUmVz
b3VyY2UgVVJMLiIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInR5cGUiLCAiJHJlZiI6
ICJSZXNvdXJjZVR5cGUiLCAiZGVzY3JpcHRpb24iOiAiVHlwZSBvZiB0aGlzIHJlc291cmNlLiIg
fSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm1pbWVUeXBlIiwgInR5cGUiOiAic3RyaW5n
IiwgImRlc2NyaXB0aW9uIjogIlJlc291cmNlIG1pbWVUeXBlIGFzIGRldGVybWluZWQgYnkgdGhl
IGJyb3dzZXIuIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZmFpbGVkIiwgInR5cGUi
OiAiYm9vbGVhbiIsICJvcHRpb25hbCI6IHRydWUsICJkZXNjcmlwdGlvbiI6ICJUcnVlIGlmIHRo
ZSByZXNvdXJjZSBmYWlsZWQgdG8gbG9hZC4iIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJjYW5jZWxlZCIsICJ0eXBlIjogImJvb2xlYW4iLCAib3B0aW9uYWwiOiB0cnVlLCAiZGVzY3Jp
cHRpb24iOiAiVHJ1ZSBpZiB0aGUgcmVzb3VyY2Ugd2FzIGNhbmNlbGVkIGR1cmluZyBsb2FkaW5n
LiIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNvdXJjZU1hcFVSTCIsICJ0eXBlIjog
InN0cmluZyIsICJvcHRpb25hbCI6IHRydWUsICJkZXNjcmlwdGlvbiI6ICJVUkwgb2Ygc291cmNl
IG1hcCBhc3NvY2lhdGVkIHdpdGggdGhpcyByZXNvdXJjZSAoaWYgYW55KS4iIH0KKyAgICAgICAg
ICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgewogICAgICAgICAgICAgImlkIjogIkZyYW1lUmVz
b3VyY2VUcmVlIiwKICAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCiAgICAgICAgICAgICAi
ZGVzY3JpcHRpb24iOiAiSW5mb3JtYXRpb24gYWJvdXQgdGhlIEZyYW1lIGhpZXJhcmNoeSBhbG9u
ZyB3aXRoIHRoZWlyIGNhY2hlZCByZXNvdXJjZXMuIiwKICAgICAgICAgICAgICJwcm9wZXJ0aWVz
IjogWwogICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZnJhbWUiLCAiJHJlZiI6ICJGcmFtZSIs
ICJkZXNjcmlwdGlvbiI6ICJGcmFtZSBpbmZvcm1hdGlvbiBmb3IgdGhpcyB0cmVlIGl0ZW0uIiB9
LAogICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY2hpbGRGcmFtZXMiLCAidHlwZSI6ICJhcnJh
eSIsICJvcHRpb25hbCI6IHRydWUsICJpdGVtcyI6IHsgIiRyZWYiOiAiRnJhbWVSZXNvdXJjZVRy
ZWUiIH0sICJkZXNjcmlwdGlvbiI6ICJDaGlsZCBmcmFtZXMuIiB9LAotICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAicmVzb3VyY2VzIiwgInR5cGUiOiAiYXJyYXkiLAotICAgICAgICAgICAgICAg
ICAgICAiaXRlbXMiOiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJvYmplY3Qi
LAotICAgICAgICAgICAgICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ1cmwiLCAidHlwZSI6ICJzdHJpbmciLCAiZGVzY3Jp
cHRpb24iOiAiUmVzb3VyY2UgVVJMLiIgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7
ICJuYW1lIjogInR5cGUiLCAiJHJlZiI6ICJSZXNvdXJjZVR5cGUiLCAiZGVzY3JpcHRpb24iOiAi
VHlwZSBvZiB0aGlzIHJlc291cmNlLiIgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7
ICJuYW1lIjogIm1pbWVUeXBlIiwgInR5cGUiOiAic3RyaW5nIiwgImRlc2NyaXB0aW9uIjogIlJl
c291cmNlIG1pbWVUeXBlIGFzIGRldGVybWluZWQgYnkgdGhlIGJyb3dzZXIuIiB9LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZmFpbGVkIiwgInR5cGUiOiAiYm9vbGVh
biIsICJvcHRpb25hbCI6IHRydWUsICJkZXNjcmlwdGlvbiI6ICJUcnVlIGlmIHRoZSByZXNvdXJj
ZSBmYWlsZWQgdG8gbG9hZC4iIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJjYW5jZWxlZCIsICJ0eXBlIjogImJvb2xlYW4iLCAib3B0aW9uYWwiOiB0cnVlLCAiZGVz
Y3JpcHRpb24iOiAiVHJ1ZSBpZiB0aGUgcmVzb3VyY2Ugd2FzIGNhbmNlbGVkIGR1cmluZyBsb2Fk
aW5nLiIgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNvdXJjZU1h
cFVSTCIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IHRydWUsICJkZXNjcmlwdGlvbiI6
ICJVUkwgb2Ygc291cmNlIG1hcCBhc3NvY2lhdGVkIHdpdGggdGhpcyByZXNvdXJjZSAoaWYgYW55
KS4iIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIF0KLSAgICAgICAgICAgICAgICAgICAgfSwK
LSAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkluZm9ybWF0aW9uIGFib3V0IGZy
YW1lIHJlc291cmNlcy4iCi0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAicmVzb3VyY2VzIiwgInR5cGUiOiAiYXJyYXkiLCAiaXRlbXMiOiB7ICIkcmVmIjogIkZy
YW1lUmVzb3VyY2UiIH0sICJkZXNjcmlwdGlvbiI6ICJJbmZvcm1hdGlvbiBhYm91dCBmcmFtZSBy
ZXNvdXJjZXMuIiB9CiAgICAgICAgICAgICBdCiAgICAgICAgIH0sCiAgICAgICAgIHsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9WZXJzaW9ucy9JbnNwZWN0b3ItaU9TLTYuMC5q
c29uIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1ZlcnNpb25zL0luc3BlY3Rvci1pT1MtNi4wLmpz
b24KaW5kZXggMTQ4Mzc4MWJhNTBiMTgxMWQ3ZDZjYWZjZDUwYTQxMTRhOWFjOWQwNS4uMzUwMjQ1
ZmY4YjY5ZjA4NTJmNDAxMDFhZDFkN2Y4NTkzMTEwYzdiMCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
Ykluc3BlY3RvclVJL1ZlcnNpb25zL0luc3BlY3Rvci1pT1MtNi4wLmpzb24KKysrIGIvU291cmNl
L1dlYkluc3BlY3RvclVJL1ZlcnNpb25zL0luc3BlY3Rvci1pT1MtNi4wLmpzb24KQEAgLTY4LDI1
ICs2OCwyNCBAQAogICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgIH0sCiAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgImlkIjogIkZyYW1lUmVzb3VyY2UiLAorICAgICAgICAgICAg
ICAgICJ0eXBlIjogIm9iamVjdCIsCisgICAgICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCisg
ICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidXJsIiwgInR5cGUiOiAic3RyaW5nIiwgImRl
c2NyaXB0aW9uIjogIlJlc291cmNlIFVSTC4iIH0sCisgICAgICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAidHlwZSIsICIkcmVmIjogIlJlc291cmNlVHlwZSIsICJkZXNjcmlwdGlvbiI6ICJUeXBl
IG9mIHRoaXMgcmVzb3VyY2UuIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm1p
bWVUeXBlIiwgInR5cGUiOiAic3RyaW5nIiwgImRlc2NyaXB0aW9uIjogIlJlc291cmNlIG1pbWVU
eXBlIGFzIGRldGVybWluZWQgYnkgdGhlIGJyb3dzZXIuIiB9LAorICAgICAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogImZhaWxlZCIsICJ0eXBlIjogImJvb2xlYW4iLCAib3B0aW9uYWwiOiB0cnVl
LCAiZGVzY3JpcHRpb24iOiAiVHJ1ZSBpZiB0aGUgcmVzb3VyY2UgZmFpbGVkIHRvIGxvYWQuIiB9
LAorICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNhbmNlbGVkIiwgInR5cGUiOiAiYm9v
bGVhbiIsICJvcHRpb25hbCI6IHRydWUsICJkZXNjcmlwdGlvbiI6ICJUcnVlIGlmIHRoZSByZXNv
dXJjZSB3YXMgY2FuY2VsZWQgZHVyaW5nIGxvYWRpbmcuIiB9CisgICAgICAgICAgICAgICAgXQor
ICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAiaWQiOiAiRnJh
bWVSZXNvdXJjZVRyZWUiLAogICAgICAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCiAgICAg
ICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkluZm9ybWF0aW9uIGFib3V0IHRoZSBGcmFtZSBo
aWVyYXJjaHkgYWxvbmcgd2l0aCB0aGVpciBjYWNoZWQgcmVzb3VyY2VzLiIsCiAgICAgICAgICAg
ICAgICAgInByb3BlcnRpZXMiOiBbCiAgICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZnJh
bWUiLCAiJHJlZiI6ICJGcmFtZSIsICJkZXNjcmlwdGlvbiI6ICJGcmFtZSBpbmZvcm1hdGlvbiBm
b3IgdGhpcyB0cmVlIGl0ZW0uIiB9LAogICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNo
aWxkRnJhbWVzIiwgInR5cGUiOiAiYXJyYXkiLCAib3B0aW9uYWwiOiB0cnVlLCAiaXRlbXMiOiB7
ICIkcmVmIjogIkZyYW1lUmVzb3VyY2VUcmVlIiB9LCAiZGVzY3JpcHRpb24iOiAiQ2hpbGQgZnJh
bWVzLiIgfSwKLSAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJyZXNvdXJjZXMiLCAidHlw
ZSI6ICJhcnJheSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAiaXRlbXMiOiB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAicHJvcGVydGllcyI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJ1cmwiLCAidHlwZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRpb24iOiAiUmVz
b3VyY2UgVVJMLiIgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJ0eXBlIiwgIiRyZWYiOiAiUmVzb3VyY2VUeXBlIiwgImRlc2NyaXB0aW9uIjogIlR5cGUgb2Yg
dGhpcyByZXNvdXJjZS4iIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAibWltZVR5cGUiLCAidHlwZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRpb24iOiAiUmVzb3Vy
Y2UgbWltZVR5cGUgYXMgZGV0ZXJtaW5lZCBieSB0aGUgYnJvd3Nlci4iIH0sCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZmFpbGVkIiwgInR5cGUiOiAiYm9vbGVh
biIsICJvcHRpb25hbCI6IHRydWUsICJkZXNjcmlwdGlvbiI6ICJUcnVlIGlmIHRoZSByZXNvdXJj
ZSBmYWlsZWQgdG8gbG9hZC4iIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAiY2FuY2VsZWQiLCAidHlwZSI6ICJib29sZWFuIiwgIm9wdGlvbmFsIjogdHJ1ZSwg
ImRlc2NyaXB0aW9uIjogIlRydWUgaWYgdGhlIHJlc291cmNlIHdhcyBjYW5jZWxlZCBkdXJpbmcg
bG9hZGluZy4iIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCi0gICAgICAgICAgICAg
ICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIklu
Zm9ybWF0aW9uIGFib3V0IGZyYW1lIHJlc291cmNlcy4iCi0gICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJyZXNvdXJjZXMiLCAidHlwZSI6ICJhcnJh
eSIsICJpdGVtcyI6IHsgIiRyZWYiOiAiRnJhbWVSZXNvdXJjZSIgfSwgImRlc2NyaXB0aW9uIjog
IkluZm9ybWF0aW9uIGFib3V0IGZyYW1lIHJlc291cmNlcy4iIH0KICAgICAgICAgICAgICAgICBd
CiAgICAgICAgICAgICB9LAogICAgICAgICAgICAgewpAQCAtMTU4Nyw3ICsxNTg2LDcgQEAKICAg
ICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJuYW1lIiwgInR5cGUiOiAic3RyaW5nIiwgImRl
c2NyaXB0aW9uIjogIkNvbXB1dGVkIHN0eWxlIHByb3BlcnR5IG5hbWUuIiB9LAogICAgICAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogInZhbHVlIiwgInR5cGUiOiAic3RyaW5nIiwgImRlc2NyaXB0
aW9uIjogIkNvbXB1dGVkIHN0eWxlIHByb3BlcnR5IHZhbHVlLiIgfQogICAgICAgICAgICAgICAg
IF0KLSAgICAgICAgICAgIH0sICAgICAgICAgICAgCisgICAgICAgICAgICB9LAogICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgICJpZCI6ICJDU1NTdHlsZSIsCiAgICAgICAgICAgICAgICAg
InR5cGUiOiAib2JqZWN0IiwKQEAgLTE2MDMsNiArMTYwMiwxMiBAQAogICAgICAgICAgICAgICAg
ICJkZXNjcmlwdGlvbiI6ICJDU1Mgc3R5bGUgcmVwcmVzZW50YXRpb24uIgogICAgICAgICAgICAg
fSwKICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAiaWQiOiAiQ1NTUHJvcGVydHlTdGF0
dXMiLAorICAgICAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCisgICAgICAgICAgICAgICAg
ImVudW0iOiBbImFjdGl2ZSIsICJpbmFjdGl2ZSIsICJkaXNhYmxlZCIsICJzdHlsZSJdLAorICAg
ICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJUaGUgcHJvcGVydHkgc3RhdHVzOiBcImFjdGl2
ZVwiIChpbXBsaWVkIGlmIGFic2VudCkgaWYgdGhlIHByb3BlcnR5IGlzIGVmZmVjdGl2ZSBpbiB0
aGUgc3R5bGUsIFwiaW5hY3RpdmVcIiBpZiB0aGUgcHJvcGVydHkgaXMgb3ZlcnJpZGRlbiBieSBh
IHNhbWUtbmFtZWQgcHJvcGVydHkgaW4gdGhpcyBzdHlsZSBsYXRlciBvbiwgXCJkaXNhYmxlZFwi
IGlmIHRoZSBwcm9wZXJ0eSBpcyBkaXNhYmxlZCBieSB0aGUgdXNlciwgXCJzdHlsZVwiIGlmIHRo
ZSBwcm9wZXJ0eSBpcyByZXBvcnRlZCBieSB0aGUgYnJvd3NlciByYXRoZXIgdGhhbiBieSB0aGUg
Q1NTIHNvdXJjZSBwYXJzZXIuIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgICAiaWQiOiAiQ1NTUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICJ0eXBlIjog
Im9iamVjdCIsCiAgICAgICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCkBAIC0xNjEyLDcgKzE2
MTcsNyBAQAogICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogImltcGxpY2l0IiwgInR5cGUi
OiAiYm9vbGVhbiIsICJvcHRpb25hbCI6IHRydWUsICJkZXNjcmlwdGlvbiI6ICJXaGV0aGVyIHRo
ZSBwcm9wZXJ0eSBpcyBpbXBsaWNpdCAoaW1wbGllcyA8Y29kZT5mYWxzZTwvY29kZT4gaWYgYWJz
ZW50KS4iIH0sCiAgICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidGV4dCIsICJ0eXBlIjog
InN0cmluZyIsICJvcHRpb25hbCI6IHRydWUsICJkZXNjcmlwdGlvbiI6ICJUaGUgZnVsbCBwcm9w
ZXJ0eSB0ZXh0IGFzIHNwZWNpZmllZCBpbiB0aGUgc3R5bGUuIiB9LAogICAgICAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogInBhcnNlZE9rIiwgInR5cGUiOiAiYm9vbGVhbiIsICJvcHRpb25hbCI6
IHRydWUsICJkZXNjcmlwdGlvbiI6ICJXaGV0aGVyIHRoZSBwcm9wZXJ0eSBpcyB1bmRlcnN0b29k
IGJ5IHRoZSBicm93c2VyIChpbXBsaWVzIDxjb2RlPnRydWU8L2NvZGU+IGlmIGFic2VudCkuIiB9
LAotICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInN0YXR1cyIsICJ0eXBlIjogInN0cmlu
ZyIsICJlbnVtIjogWyJhY3RpdmUiLCAiaW5hY3RpdmUiLCAiZGlzYWJsZWQiLCAic3R5bGUiXSwg
Im9wdGlvbmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9uIjogIlRoZSBwcm9wZXJ0eSBzdGF0dXM6IFwi
YWN0aXZlXCIgKGltcGxpZWQgaWYgYWJzZW50KSBpZiB0aGUgcHJvcGVydHkgaXMgZWZmZWN0aXZl
IGluIHRoZSBzdHlsZSwgXCJpbmFjdGl2ZVwiIGlmIHRoZSBwcm9wZXJ0eSBpcyBvdmVycmlkZGVu
IGJ5IGEgc2FtZS1uYW1lZCBwcm9wZXJ0eSBpbiB0aGlzIHN0eWxlIGxhdGVyIG9uLCBcImRpc2Fi
bGVkXCIgaWYgdGhlIHByb3BlcnR5IGlzIGRpc2FibGVkIGJ5IHRoZSB1c2VyLCBcInN0eWxlXCIg
aWYgdGhlIHByb3BlcnR5IGlzIHJlcG9ydGVkIGJ5IHRoZSBicm93c2VyIHJhdGhlciB0aGFuIGJ5
IHRoZSBDU1Mgc291cmNlIHBhcnNlci4iIH0sCisgICAgICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAic3RhdHVzIiwgIiRyZWYiOiAiQ1NTUHJvcGVydHlTdGF0dXMiLCAib3B0aW9uYWwiOiB0cnVl
LCAiZGVzY3JpcHRpb24iOiAiV2hldGhlciB0aGUgcHJvcGVydHkgaXMgYWN0aXZlIG9yIGRpc2Fi
bGVkLiIgfSwKICAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzaG9ydGhhbmROYW1lIiwg
InR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9uIjogIlRoZSBy
ZWxhdGVkIHNob3J0aGFuZCBwcm9wZXJ0eSBuYW1lIChhYnNlbnQgaWYgdGhpcyBwcm9wZXJ0eSBp
cyBub3QgYSBsb25naGFuZCkuIiB9LAogICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInJh
bmdlIiwgIiRyZWYiOiAiU291cmNlUmFuZ2UiLCAib3B0aW9uYWwiOiB0cnVlLCAiZGVzY3JpcHRp
b24iOiAiVGhlIGVudGlyZSBwcm9wZXJ0eSByYW5nZSBpbiB0aGUgZW5jbG9zaW5nIHN0eWxlIGRl
Y2xhcmF0aW9uIChpZiBhdmFpbGFibGUpLiIgfQogICAgICAgICAgICAgICAgIF0sCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVmVyc2lvbnMvSW5zcGVjdG9yLWlPUy03LjAuanNv
biBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9WZXJzaW9ucy9JbnNwZWN0b3ItaU9TLTcuMC5qc29u
CmluZGV4IGQwNTMyMDliNjI5Mzk4ZDZjMDg5NzMyY2MyZGJiYWVlMjE3OWM1YzAuLjY4YWUxYjUw
NzE3NWQyNDFmNmQ5NjcwM2EyYWI0YWU1YmFkYzhkZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJ
bnNwZWN0b3JVSS9WZXJzaW9ucy9JbnNwZWN0b3ItaU9TLTcuMC5qc29uCisrKyBiL1NvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9WZXJzaW9ucy9JbnNwZWN0b3ItaU9TLTcuMC5qc29uCkBAIC02NSwyNiAr
NjUsMjUgQEAKICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICB9LAogICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICJpZCI6ICJGcmFtZVJlc291cmNlIiwKKyAgICAgICAgICAgICAg
ICAidHlwZSI6ICJvYmplY3QiLAorICAgICAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWworICAg
ICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInVybCIsICJ0eXBlIjogInN0cmluZyIsICJkZXNj
cmlwdGlvbiI6ICJSZXNvdXJjZSBVUkwuIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJuYW1l
IjogInR5cGUiLCAiJHJlZiI6ICJSZXNvdXJjZVR5cGUiLCAiZGVzY3JpcHRpb24iOiAiVHlwZSBv
ZiB0aGlzIHJlc291cmNlLiIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJtaW1l
VHlwZSIsICJ0eXBlIjogInN0cmluZyIsICJkZXNjcmlwdGlvbiI6ICJSZXNvdXJjZSBtaW1lVHlw
ZSBhcyBkZXRlcm1pbmVkIGJ5IHRoZSBicm93c2VyLiIgfSwKKyAgICAgICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJmYWlsZWQiLCAidHlwZSI6ICJib29sZWFuIiwgIm9wdGlvbmFsIjogdHJ1ZSwg
ImRlc2NyaXB0aW9uIjogIlRydWUgaWYgdGhlIHJlc291cmNlIGZhaWxlZCB0byBsb2FkLiIgfSwK
KyAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjYW5jZWxlZCIsICJ0eXBlIjogImJvb2xl
YW4iLCAib3B0aW9uYWwiOiB0cnVlLCAiZGVzY3JpcHRpb24iOiAiVHJ1ZSBpZiB0aGUgcmVzb3Vy
Y2Ugd2FzIGNhbmNlbGVkIGR1cmluZyBsb2FkaW5nLiIgfSwKKyAgICAgICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJzb3VyY2VNYXBVUkwiLCAidHlwZSI6ICJzdHJpbmciLCAib3B0aW9uYWwiOiB0
cnVlLCAiZGVzY3JpcHRpb24iOiAiVVJMIG9mIHNvdXJjZSBtYXAgYXNzb2NpYXRlZCB3aXRoIHRo
aXMgcmVzb3VyY2UgKGlmIGFueSkuIiB9CisgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAg
fSwKKyAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAiaWQiOiAiRnJhbWVSZXNvdXJjZVRy
ZWUiLAogICAgICAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCiAgICAgICAgICAgICAgICAg
ImRlc2NyaXB0aW9uIjogIkluZm9ybWF0aW9uIGFib3V0IHRoZSBGcmFtZSBoaWVyYXJjaHkgYWxv
bmcgd2l0aCB0aGVpciBjYWNoZWQgcmVzb3VyY2VzLiIsCiAgICAgICAgICAgICAgICAgInByb3Bl
cnRpZXMiOiBbCiAgICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZnJhbWUiLCAiJHJlZiI6
ICJGcmFtZSIsICJkZXNjcmlwdGlvbiI6ICJGcmFtZSBpbmZvcm1hdGlvbiBmb3IgdGhpcyB0cmVl
IGl0ZW0uIiB9LAogICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNoaWxkRnJhbWVzIiwg
InR5cGUiOiAiYXJyYXkiLCAib3B0aW9uYWwiOiB0cnVlLCAiaXRlbXMiOiB7ICIkcmVmIjogIkZy
YW1lUmVzb3VyY2VUcmVlIiB9LCAiZGVzY3JpcHRpb24iOiAiQ2hpbGQgZnJhbWVzLiIgfSwKLSAg
ICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJyZXNvdXJjZXMiLCAidHlwZSI6ICJhcnJheSIs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAiaXRlbXMiOiB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
cHJvcGVydGllcyI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJ1cmwiLCAidHlwZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRpb24iOiAiUmVzb3VyY2UgVVJMLiIg
fSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0eXBlIiwgIiRy
ZWYiOiAiUmVzb3VyY2VUeXBlIiwgImRlc2NyaXB0aW9uIjogIlR5cGUgb2YgdGhpcyByZXNvdXJj
ZS4iIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibWltZVR5
cGUiLCAidHlwZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRpb24iOiAiUmVzb3VyY2UgbWltZVR5cGUg
YXMgZGV0ZXJtaW5lZCBieSB0aGUgYnJvd3Nlci4iIH0sCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAiZmFpbGVkIiwgInR5cGUiOiAiYm9vbGVhbiIsICJvcHRpb25h
bCI6IHRydWUsICJkZXNjcmlwdGlvbiI6ICJUcnVlIGlmIHRoZSByZXNvdXJjZSBmYWlsZWQgdG8g
bG9hZC4iIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY2Fu
Y2VsZWQiLCAidHlwZSI6ICJib29sZWFuIiwgIm9wdGlvbmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9u
IjogIlRydWUgaWYgdGhlIHJlc291cmNlIHdhcyBjYW5jZWxlZCBkdXJpbmcgbG9hZGluZy4iIH0s
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic291cmNlTWFwVVJM
IiwgInR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9uIjogIlVS
TCBvZiBzb3VyY2UgbWFwIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHJlc291cmNlIChpZiBhbnkpLiIg
fQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KLSAgICAgICAgICAgICAgICAgICAgICAg
IH0sCi0gICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiSW5mb3JtYXRpb24g
YWJvdXQgZnJhbWUgcmVzb3VyY2VzLiIKLSAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogInJlc291cmNlcyIsICJ0eXBlIjogImFycmF5IiwgIml0ZW1z
IjogeyAiJHJlZiI6ICJGcmFtZVJlc291cmNlIiB9LCAiZGVzY3JpcHRpb24iOiAiSW5mb3JtYXRp
b24gYWJvdXQgZnJhbWUgcmVzb3VyY2VzLiIgfQogICAgICAgICAgICAgICAgIF0KICAgICAgICAg
ICAgIH0sCiAgICAgICAgICAgICB7CkBAIC0xOTE3LDYgKzE5MTYsMTIgQEAKICAgICAgICAgICAg
ICAgICAiZGVzY3JpcHRpb24iOiAiQ1NTIHN0eWxlIHJlcHJlc2VudGF0aW9uLiIKICAgICAgICAg
ICAgIH0sCiAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgImlkIjogIkNTU1Byb3BlcnR5
U3RhdHVzIiwKKyAgICAgICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAorICAgICAgICAgICAg
ICAgICJlbnVtIjogWyJhY3RpdmUiLCAiaW5hY3RpdmUiLCAiZGlzYWJsZWQiLCAic3R5bGUiXSwK
KyAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVGhlIHByb3BlcnR5IHN0YXR1czogXCJh
Y3RpdmVcIiAoaW1wbGllZCBpZiBhYnNlbnQpIGlmIHRoZSBwcm9wZXJ0eSBpcyBlZmZlY3RpdmUg
aW4gdGhlIHN0eWxlLCBcImluYWN0aXZlXCIgaWYgdGhlIHByb3BlcnR5IGlzIG92ZXJyaWRkZW4g
YnkgYSBzYW1lLW5hbWVkIHByb3BlcnR5IGluIHRoaXMgc3R5bGUgbGF0ZXIgb24sIFwiZGlzYWJs
ZWRcIiBpZiB0aGUgcHJvcGVydHkgaXMgZGlzYWJsZWQgYnkgdGhlIHVzZXIsIFwic3R5bGVcIiBp
ZiB0aGUgcHJvcGVydHkgaXMgcmVwb3J0ZWQgYnkgdGhlIGJyb3dzZXIgcmF0aGVyIHRoYW4gYnkg
dGhlIENTUyBzb3VyY2UgcGFyc2VyLiIKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICAgImlkIjogIkNTU1Byb3BlcnR5IiwKICAgICAgICAgICAgICAgICAidHlw
ZSI6ICJvYmplY3QiLAogICAgICAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWwpAQCAtMTkyNiw3
ICsxOTMxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJpbXBsaWNpdCIsICJ0
eXBlIjogImJvb2xlYW4iLCAib3B0aW9uYWwiOiB0cnVlLCAiZGVzY3JpcHRpb24iOiAiV2hldGhl
ciB0aGUgcHJvcGVydHkgaXMgaW1wbGljaXQgKGltcGxpZXMgPGNvZGU+ZmFsc2U8L2NvZGU+IGlm
IGFic2VudCkuIiB9LAogICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRleHQiLCAidHlw
ZSI6ICJzdHJpbmciLCAib3B0aW9uYWwiOiB0cnVlLCAiZGVzY3JpcHRpb24iOiAiVGhlIGZ1bGwg
cHJvcGVydHkgdGV4dCBhcyBzcGVjaWZpZWQgaW4gdGhlIHN0eWxlLiIgfSwKICAgICAgICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJwYXJzZWRPayIsICJ0eXBlIjogImJvb2xlYW4iLCAib3B0aW9u
YWwiOiB0cnVlLCAiZGVzY3JpcHRpb24iOiAiV2hldGhlciB0aGUgcHJvcGVydHkgaXMgdW5kZXJz
dG9vZCBieSB0aGUgYnJvd3NlciAoaW1wbGllcyA8Y29kZT50cnVlPC9jb2RlPiBpZiBhYnNlbnQp
LiIgfSwKLSAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzdGF0dXMiLCAidHlwZSI6ICJz
dHJpbmciLCAiZW51bSI6IFsiYWN0aXZlIiwgImluYWN0aXZlIiwgImRpc2FibGVkIiwgInN0eWxl
Il0sICJvcHRpb25hbCI6IHRydWUsICJkZXNjcmlwdGlvbiI6ICJUaGUgcHJvcGVydHkgc3RhdHVz
OiBcImFjdGl2ZVwiIGlmIHRoZSBwcm9wZXJ0eSBpcyBlZmZlY3RpdmUgaW4gdGhlIHN0eWxlLCBc
ImluYWN0aXZlXCIgaWYgdGhlIHByb3BlcnR5IGlzIG92ZXJyaWRkZW4gYnkgYSBzYW1lLW5hbWVk
IHByb3BlcnR5IGluIHRoaXMgc3R5bGUgbGF0ZXIgb24sIFwiZGlzYWJsZWRcIiBpZiB0aGUgcHJv
cGVydHkgaXMgZGlzYWJsZWQgYnkgdGhlIHVzZXIsIFwic3R5bGVcIiAoaW1wbGllZCBpZiBhYnNl
bnQpIGlmIHRoZSBwcm9wZXJ0eSBpcyByZXBvcnRlZCBieSB0aGUgYnJvd3NlciByYXRoZXIgdGhh
biBieSB0aGUgQ1NTIHNvdXJjZSBwYXJzZXIuIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJu
YW1lIjogInN0YXR1cyIsICIkcmVmIjogIkNTU1Byb3BlcnR5U3RhdHVzIiwgIm9wdGlvbmFsIjog
dHJ1ZSwgImRlc2NyaXB0aW9uIjogIldoZXRoZXIgdGhlIHByb3BlcnR5IGlzIGFjdGl2ZSBvciBk
aXNhYmxlZC4iIH0sCiAgICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicmFuZ2UiLCAiJHJl
ZiI6ICJTb3VyY2VSYW5nZSIsICJvcHRpb25hbCI6IHRydWUsICJkZXNjcmlwdGlvbiI6ICJUaGUg
ZW50aXJlIHByb3BlcnR5IHJhbmdlIGluIHRoZSBlbmNsb3Npbmcgc3R5bGUgZGVjbGFyYXRpb24g
KGlmIGF2YWlsYWJsZSkuIiB9CiAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAi
ZGVzY3JpcHRpb24iOiAiQ1NTIHN0eWxlIGVmZmVjdGl2ZSB2aXN1YWwgZGltZW5zaW9ucyBhbmQg
c291cmNlIG9mZnNldHMuIgpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hh
bmdlTG9nCmluZGV4IGY5NjhkNWU0MDY1MzIwNjYxMDVlMjZiNzM1NmEzMzE0YWNkNDU5ZTcuLmY4
YWEyY2VmYzdmOTNjYmQ5Njg5NmUzYTdhMzM0ODhkMjYzMzVmYzIgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0NCBAQAorMjAxNC0w
OC0xNCAgQnJpYW4gSi4gQnVyZyAgPGJ1cmdAY3Mud2FzaGluZ3Rvbi5lZHU+CisKKyAgICAgICAg
V2ViIEluc3BlY3RvcjogcmV3cml0ZSBDb2RlR2VuZXJhdG9ySW5zcGVjdG9yIHRvIGJlIG1vZHVs
YXIgYW5kIHRlc3RhYmxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMzE1OTYKKworICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCisK
KyAgICAgICAgKiBTY3JpcHRzL3J1bi1pbnNwZWN0b3ItZ2VuZXJhdG9yLXRlc3RzOiBBZGRlZC4K
KyAgICAgICAgKG1haW4pOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvaW5zcGVjdG9yL19f
aW5pdF9fLnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2luc3BlY3Rvci9t
YWluLnB5OiBBZGRlZC4KKyAgICAgICAgKEluc3BlY3RvckdlbmVyYXRvclRlc3RzKToKKyAgICAg
ICAgKEluc3BlY3RvckdlbmVyYXRvclRlc3RzLl9faW5pdF9fKToKKyAgICAgICAgKEluc3BlY3Rv
ckdlbmVyYXRvclRlc3RzLmdlbmVyYXRlX2Zyb21fanNvbik6CisgICAgICAgIChJbnNwZWN0b3JH
ZW5lcmF0b3JUZXN0cy53cml0ZV9lcnJvcl9maWxlKToKKyAgICAgICAgKEluc3BlY3RvckdlbmVy
YXRvclRlc3RzLmRldGVjdF9jaGFuZ2VzKToKKyAgICAgICAgKEluc3BlY3RvckdlbmVyYXRvclRl
c3RzLnJ1bl90ZXN0cyk6CisgICAgICAgIChJbnNwZWN0b3JHZW5lcmF0b3JUZXN0cy5tYWluKToK
KworMjAxNC0wOC0wOSAgQnJpYW4gSi4gQnVyZyAgPGJ1cmdAY3Mud2FzaGluZ3Rvbi5lZHU+CisK
KyAgICAgICAgV2ViIEluc3BlY3RvcjogcmV3cml0ZSBDb2RlR2VuZXJhdG9ySW5zcGVjdG9yIHRv
IGJlIG1vZHVsYXIgYW5kIHRlc3RhYmxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMzE1OTYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBBZGQgYSB3cmFwcGVyIHNjcmlwdCBmb3IgcnVubmluZyBpbnNwZWN0
b3IgYmluZGluZ3MgZ2VuZXJhdG9yIHRlc3RzLgorICAgICAgICBJdCBpcyBhZGFwdGVkIGZyb20g
dGhlIERPTSBiaW5kaW5ncyBhbmQgcmVwbGF5IGdlbmVyYXRvciB0ZXN0IHNjcmlwdHMuCisKKyAg
ICAgICAgKiBTY3JpcHRzL3J1bi1pbnNwZWN0b3ItZ2VuZXJhdG9yLXRlc3RzOiBBZGRlZC4KKyAg
ICAgICAgKG1haW4pOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvaW5zcGVjdG9yL19faW5p
dF9fLnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2luc3BlY3Rvci9tYWlu
LnB5OiBBZGRlZC4KKyAgICAgICAgKEluc3BlY3RvckdlbmVyYXRvclRlc3RzKToKKyAgICAgICAg
KEluc3BlY3RvckdlbmVyYXRvclRlc3RzLl9faW5pdF9fKToKKyAgICAgICAgKEluc3BlY3Rvckdl
bmVyYXRvclRlc3RzLmdlbmVyYXRlX2Zyb21fanNvbik6CisgICAgICAgIChJbnNwZWN0b3JHZW5l
cmF0b3JUZXN0cy53cml0ZV9lcnJvcl9maWxlKToKKyAgICAgICAgKEluc3BlY3RvckdlbmVyYXRv
clRlc3RzLmRldGVjdF9jaGFuZ2VzKToKKyAgICAgICAgKEluc3BlY3RvckdlbmVyYXRvclRlc3Rz
LnJ1bl90ZXN0cyk6CisgICAgICAgIChJbnNwZWN0b3JHZW5lcmF0b3JUZXN0cy5tYWluKToKKwog
MjAxNC0wOC0xNCAgWmFuIERvYmVyc2VrICA8emRvYmVyc2VrQGlnYWxpYS5jb20+CiAKICAgICAg
ICAgSW5pdGlhbGl6ZSBhIHNlcGFyYXRlIHZhcmlhYmxlIChUZXN0V1RGX1NPVVJDRVMpIHdpdGgg
dGhlIGxpc3Qgb2YgZmlsZXMKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvcnVuLWluc3BlY3Rv
ci1nZW5lcmF0b3ItdGVzdHMgYi9Ub29scy9TY3JpcHRzL3J1bi1pbnNwZWN0b3ItZ2VuZXJhdG9y
LXRlc3RzCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmFhYWIxODAwYmNhNmY3ZThhMzQ5NmU1OTE4NDIxZWVhZTJkMzhk
ODIKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3J1bi1pbnNwZWN0b3ItZ2VuZXJh
dG9yLXRlc3RzCkBAIC0wLDAgKzEsNDIgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyBDb3B5
cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMg
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
IyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisjIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0IHN5cworZnJvbSB3ZWJraXRw
eS5jb21tb24uc3lzdGVtIGltcG9ydCBleGVjdXRpdmUKKworZGVmIG1haW4oYXJndik6CisgICAg
IiIiUnVucyByZXBsYXkgaW5wdXQgY29kZSBnZW5lcmF0b3Igb24gdGVzdCBzcGVjaWZpY2F0aW9u
IGZpbGVzIGFuZCBjb21wYXJlcworICAgIHRoZSByZXN1bHRzIHdpdGggcmVmZXJlbmNlIGZpbGVz
LgorCisgICAgT3B0aW9uczoKKyAgICAgICAtLXJlc2V0LXJlc3VsdHM6IE92ZXJ3cml0ZXMgdGhl
IHJlZmVyZW5jZSBmaWxlcyB3aXRoIHRoZSBnZW5lcmF0ZWQgcmVzdWx0cy4KKworICAgICIiIgor
ICAgIHJlc2V0X3Jlc3VsdHMgPSAiLS1yZXNldC1yZXN1bHRzIiBpbiBhcmd2CisKKyAgICBmcm9t
IHdlYmtpdHB5Lmluc3BlY3Rvci5tYWluIGltcG9ydCBJbnNwZWN0b3JHZW5lcmF0b3JUZXN0cwor
ICAgIHJldHVybiBJbnNwZWN0b3JHZW5lcmF0b3JUZXN0cyhyZXNldF9yZXN1bHRzLCBleGVjdXRp
dmUuRXhlY3V0aXZlKCkpLm1haW4oKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAg
IHN5cy5leGl0KG1haW4oc3lzLmFyZ3YpKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9pbnNwZWN0b3IvX19pbml0X18ucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2luc3Bl
Y3Rvci9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lZjY1YmVlNWJiNzdlOTZlYmM3Y2Q5YzQ3NjQw
NjkwZmJkYThhYzE5Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9p
bnNwZWN0b3IvX19pbml0X18ucHkKQEAgLTAsMCArMSBAQAorIyBSZXF1aXJlZCBmb3IgUHl0aG9u
IHRvIHNlYXJjaCB0aGlzIGRpcmVjdG9yeSBmb3IgbW9kdWxlIGZpbGVzCmRpZmYgLS1naXQgYS9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L2luc3BlY3Rvci9tYWluLnB5IGIvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9pbnNwZWN0b3IvbWFpbi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43NjlmMDQxMmZjNjMwMzZhY2Nh
NzRjZjc1OWM4NzRlNTdjYjFkZWFkCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9pbnNwZWN0b3IvbWFpbi5weQpAQCAtMCwwICsxLDEzNCBAQAorIyBDb3B5cmlnaHQg
KEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChD
KSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisj
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworIyBhcmUgbWV0OgorIworIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTICJBUworIyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKKyMgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBCisjIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBIT0xE
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgb3MKK2lt
cG9ydCBvcy5wYXRoCitpbXBvcnQgc2h1dGlsCitpbXBvcnQgc3lzCitpbXBvcnQgdGVtcGZpbGUK
K2Zyb20gd2Via2l0cHkuY29tbW9uLmNoZWNrb3V0LnNjbS5kZXRlY3Rpb24gaW1wb3J0IGRldGVj
dF9zY21fc3lzdGVtCitmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uZXhlY3V0aXZlIGltcG9y
dCBTY3JpcHRFcnJvcgorCisKK2NsYXNzIEluc3BlY3RvckdlbmVyYXRvclRlc3RzOgorCisgICAg
ZGVmIF9faW5pdF9fKHNlbGYsIHJlc2V0X3Jlc3VsdHMsIGV4ZWN1dGl2ZSk6CisgICAgICAgIHNl
bGYucmVzZXRfcmVzdWx0cyA9IHJlc2V0X3Jlc3VsdHMKKyAgICAgICAgc2VsZi5leGVjdXRpdmUg
PSBleGVjdXRpdmUKKworICAgIGRlZiBnZW5lcmF0ZV9mcm9tX2pzb24oc2VsZiwganNvbl9maWxl
LCBvdXRwdXRfZGlyZWN0b3J5KToKKyAgICAgICAgY21kID0gWydweXRob24nLAorICAgICAgICAg
ICAgICAgJ0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weScsCisgICAgICAgICAgICAgICAnLS1vdXRwdXREaXInLCBv
dXRwdXRfZGlyZWN0b3J5LAorICAgICAgICAgICAgICAgJy0tZm9yY2UnLAorICAgICAgICAgICAg
ICAgJy0tZnJhbWV3b3JrJywgJ1Rlc3QnLAorICAgICAgICAgICAgICAgJy0tdGVzdCcsCisgICAg
ICAgICAgICAgICBqc29uX2ZpbGVdCisKKyAgICAgICAgZXhpdF9jb2RlID0gMAorICAgICAgICB0
cnk6CisgICAgICAgICAgICBzdGRlcnJfb3V0cHV0ID0gc2VsZi5leGVjdXRpdmUucnVuX2NvbW1h
bmQoY21kKQorICAgICAgICAgICAgaWYgc3RkZXJyX291dHB1dDoKKyAgICAgICAgICAgICAgICBz
ZWxmLndyaXRlX2Vycm9yX2ZpbGUoanNvbl9maWxlLCBvdXRwdXRfZGlyZWN0b3J5LCBzdGRlcnJf
b3V0cHV0KQorICAgICAgICBleGNlcHQgU2NyaXB0RXJyb3IsIGU6CisgICAgICAgICAgICBwcmlu
dCBlLm91dHB1dAorICAgICAgICAgICAgZXhpdF9jb2RlID0gZS5leGl0X2NvZGUKKyAgICAgICAg
cmV0dXJuIGV4aXRfY29kZQorCisgICAgZGVmIHdyaXRlX2Vycm9yX2ZpbGUoc2VsZiwgaW5wdXRf
ZmlsZXBhdGgsIG91dHB1dF9kaXJlY3RvcnksIGVycm9yX291dHB1dCk6CisgICAgICAgIG91dHB1
dF9maWxlcGF0aCA9IG9zLnBhdGguam9pbihvdXRwdXRfZGlyZWN0b3J5LCBvcy5wYXRoLmJhc2Vu
YW1lKGlucHV0X2ZpbGVwYXRoKSArICctZXJyb3InKQorCisgICAgICAgIHdpdGggb3BlbihvdXRw
dXRfZmlsZXBhdGgsICJ3IikgYXMgb3V0cHV0X2ZpbGU6CisgICAgICAgICAgICBvdXRwdXRfZmls
ZS53cml0ZShlcnJvcl9vdXRwdXQpCisKKyAgICBkZWYgZGV0ZWN0X2NoYW5nZXMoc2VsZiwgd29y
a19kaXJlY3RvcnksIHJlZmVyZW5jZV9kaXJlY3RvcnkpOgorICAgICAgICBjaGFuZ2VzX2ZvdW5k
ID0gRmFsc2UKKyAgICAgICAgZm9yIG91dHB1dF9maWxlIGluIG9zLmxpc3RkaXIod29ya19kaXJl
Y3RvcnkpOgorICAgICAgICAgICAgY21kID0gWydkaWZmJywKKyAgICAgICAgICAgICAgICAgICAn
LXUnLAorICAgICAgICAgICAgICAgICAgICctTicsCisgICAgICAgICAgICAgICAgICAgb3MucGF0
aC5qb2luKHJlZmVyZW5jZV9kaXJlY3RvcnksIG91dHB1dF9maWxlKSwKKyAgICAgICAgICAgICAg
ICAgICBvcy5wYXRoLmpvaW4od29ya19kaXJlY3RvcnksIG91dHB1dF9maWxlKV0KKworICAgICAg
ICAgICAgZXhpdF9jb2RlID0gMAorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG91
dHB1dCA9IHNlbGYuZXhlY3V0aXZlLnJ1bl9jb21tYW5kKGNtZCkKKyAgICAgICAgICAgIGV4Y2Vw
dCBTY3JpcHRFcnJvciwgZToKKyAgICAgICAgICAgICAgICBvdXRwdXQgPSBlLm91dHB1dAorICAg
ICAgICAgICAgICAgIGV4aXRfY29kZSA9IGUuZXhpdF9jb2RlCisKKyAgICAgICAgICAgIGlmIGV4
aXRfY29kZSBvciBvdXRwdXQ6CisgICAgICAgICAgICAgICAgcHJpbnQgJ0ZBSUw6ICVzJyAlIG91
dHB1dF9maWxlCisgICAgICAgICAgICAgICAgcHJpbnQgb3V0cHV0CisgICAgICAgICAgICAgICAg
Y2hhbmdlc19mb3VuZCA9IFRydWUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAg
cHJpbnQgJ1BBU1M6ICVzJyAlIG91dHB1dF9maWxlCisgICAgICAgIHJldHVybiBjaGFuZ2VzX2Zv
dW5kCisKKyAgICBkZWYgcnVuX3Rlc3RzKHNlbGYsIGlucHV0X2RpcmVjdG9yeSwgcmVmZXJlbmNl
X2RpcmVjdG9yeSk6CisgICAgICAgIHdvcmtfZGlyZWN0b3J5ID0gcmVmZXJlbmNlX2RpcmVjdG9y
eQorCisgICAgICAgIHBhc3NlZCA9IFRydWUKKyAgICAgICAgZm9yIGlucHV0X2ZpbGUgaW4gb3Mu
bGlzdGRpcihpbnB1dF9kaXJlY3RvcnkpOgorICAgICAgICAgICAgKG5hbWUsIGV4dGVuc2lvbikg
PSBvcy5wYXRoLnNwbGl0ZXh0KGlucHV0X2ZpbGUpCisgICAgICAgICAgICBpZiBleHRlbnNpb24g
IT0gJy5qc29uJzoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgIyBHZW5l
cmF0ZSBvdXRwdXQgaW50byB0aGUgd29yayBkaXJlY3RvcnkgKGVpdGhlciB0aGUgZ2l2ZW4gb25l
IG9yIGEKKyAgICAgICAgICAgICMgdGVtcCBvbmUgaWYgbm90IHJlc2V0X3Jlc3VsdHMgaXMgcGVy
Zm9ybWVkKQorICAgICAgICAgICAgaWYgbm90IHNlbGYucmVzZXRfcmVzdWx0czoKKyAgICAgICAg
ICAgICAgICB3b3JrX2RpcmVjdG9yeSA9IHRlbXBmaWxlLm1rZHRlbXAoKQorCisgICAgICAgICAg
ICBpZiBzZWxmLmdlbmVyYXRlX2Zyb21fanNvbihvcy5wYXRoLmpvaW4oaW5wdXRfZGlyZWN0b3J5
LCBpbnB1dF9maWxlKSwgd29ya19kaXJlY3RvcnkpOgorICAgICAgICAgICAgICAgIHBhc3NlZCA9
IEZhbHNlCisKKyAgICAgICAgICAgIGlmIHNlbGYucmVzZXRfcmVzdWx0czoKKyAgICAgICAgICAg
ICAgICBwcmludCAiUmVzZXQgcmVzdWx0cyBmb3IgdGVzdDogJXMiICUgKGlucHV0X2ZpbGUpCisg
ICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgIyBEZXRlY3QgY2hhbmdlcwor
ICAgICAgICAgICAgaWYgc2VsZi5kZXRlY3RfY2hhbmdlcyh3b3JrX2RpcmVjdG9yeSwgcmVmZXJl
bmNlX2RpcmVjdG9yeSk6CisgICAgICAgICAgICAgICAgcGFzc2VkID0gRmFsc2UKKyAgICAgICAg
ICAgIHNodXRpbC5ybXRyZWUod29ya19kaXJlY3RvcnkpCisKKyAgICAgICAgcmV0dXJuIHBhc3Nl
ZAorCisgICAgZGVmIG1haW4oc2VsZik6CisgICAgICAgIGN1cnJlbnRfc2NtID0gZGV0ZWN0X3Nj
bV9zeXN0ZW0ob3MuY3VyZGlyKQorICAgICAgICBvcy5jaGRpcihvcy5wYXRoLmpvaW4oY3VycmVu
dF9zY20uY2hlY2tvdXRfcm9vdCwgJ1NvdXJjZScpKQorCisgICAgICAgIGFsbF90ZXN0c19wYXNz
ZWQgPSBUcnVlCisKKyAgICAgICAgaW5wdXRfZGlyZWN0b3J5ID0gb3MucGF0aC5qb2luKCdKYXZh
U2NyaXB0Q29yZScsICdpbnNwZWN0b3InLCAnc2NyaXB0cycsICd0ZXN0cycpCisgICAgICAgIHJl
ZmVyZW5jZV9kaXJlY3RvcnkgPSBvcy5wYXRoLmpvaW4oJ0phdmFTY3JpcHRDb3JlJywgJ2luc3Bl
Y3RvcicsICdzY3JpcHRzJywgJ3Rlc3RzJywgJ2V4cGVjdGVkJykKKyAgICAgICAgaWYgbm90IHNl
bGYucnVuX3Rlc3RzKGlucHV0X2RpcmVjdG9yeSwgcmVmZXJlbmNlX2RpcmVjdG9yeSk6CisgICAg
ICAgICAgICBhbGxfdGVzdHNfcGFzc2VkID0gRmFsc2UKKworICAgICAgICBwcmludCAnJworICAg
ICAgICBpZiBhbGxfdGVzdHNfcGFzc2VkOgorICAgICAgICAgICAgcHJpbnQgJ0FsbCB0ZXN0cyBQ
QVNTIScKKyAgICAgICAgICAgIHJldHVybiAwCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBw
cmludCAnU29tZSB0ZXN0cyBGQUlMISAoVG8gdXBkYXRlIHRoZSByZWZlcmVuY2UgZmlsZXMsIGV4
ZWN1dGUgInJ1bi1pbnNwZWN0b3ItZ2VuZXJhdG9yLXRlc3RzIC0tcmVzZXQtcmVzdWx0cyIpJwor
ICAgICAgICAgICAgcmV0dXJuIC0xCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>236631</attachid>
            <date>2014-08-14 15:41:53 -0700</date>
            <delta_ts>2014-08-14 17:27:29 -0700</delta_ts>
            <desc>Fix for GTK build</desc>
            <filename>bug-131596-20140814154212.patch</filename>
            <type>text/plain</type>
            <size>716410</size>
            <attacher name="Brian Burg">burg</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTcyNjAwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA1
NTBlZDkyZjg3ZmRhYjI3ZjQ4MzBlMjU2ODk2MjA5Njc4NzZjYzA2Li41YWJjZTBkMDNjNGNmNTVh
ZjJkOTYwOGNmMmQ5YmZmODg3NGVjN2MzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzODYgQEAKKzIwMTQtMDgtMTQgIEJyaWFuIEouIEJ1cmcgIDxidXJnQGNzLndhc2hpbmd0
b24uZWR1PgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IHJld3JpdGUgQ29kZUdlbmVyYXRvcklu
c3BlY3RvciB0byBiZSBtb2R1bGFyIGFuZCB0ZXN0YWJsZQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMxNTk2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Sm9zZXBoIFBlY29yYXJvLgorCisgICAgICAgIFJlcGxhY2UgQ29kZUdlbmVyYXRvckluc3BlY3Rv
ci5weSB3aXRoIGdlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weS4KKyAgICAg
ICAgVGhlIG5ldyBnZW5lcmF0b3IgZGVjb3VwbGVzIHBhcnNpbmcgYW5kIHR5cGVjaGVja2luZyBh
IG1vZGVsIG9mIHRoZSBwcm90b2NvbCBmcm9tCisgICAgICAgIGNvZGUgZ2VuZXJhdGlvbi4gRWFj
aCBnZW5lcmF0ZWQgZmlsZSBpcyBjcmVhdGVkIGJ5IGEgZGlmZmVyZW50IHN1YmNsYXNzIG9mIEdl
bmVyYXRvci4KKyAgICAgICAgSGVscGVyIG1ldGhvZHMgdG8gY29tcHV0ZSB2YXJpb3VzIHR5cGUg
c2lnbmF0dXJlcyBhcmUgc2hhcmVkIGFtb25nIGdlbmVyYXRvcnMuCisKKyAgICAgICAgVGhpcyBw
YXRjaCBpbnRyb2R1Y2VzIGEgdGVzdCBoYXJuZXNzIGFuZCBhIHRlc3Qgc3VpdGUgdGhhdCBjb3Zl
cnMgYWxsIGZ1bmN0aW9uYWxpdHkuCisKKyAgICAgICAgQXNpZGUgZnJvbSBob29raW5nIHVwIHRo
ZSBuZXcgaW5zcGVjdG9yIGJpbmRpbmdzIGdlbmVyYXRvciB0byB0aGUgYnVpbGQgc3lzdGVtLAor
ICAgICAgICB0aGVyZSBhcmUgYSBmZXcgY29taW5nbGVkIGNoYW5nZXMgdGhhdCB3b3VsZCBiZSBw
YWluZnVsIHRvIHNwbGl0IGZyb20gdGhlIG1haW4KKyAgICAgICAgcGF0Y2g6CisKKyAgICAgICAg
Q29udmVydCBwcm90b2NvbCBlbnVtZXJhdGlvbiB0eXBlcyBmcm9tIHN0cnVjdC1uYW1lc3BhY2Vk
IGVudW1zIHRvIEMrKyBzY29wZWQgZW51bXMuCisKKyAgICAgICAgTW92ZSBhbGwgcnVudGltZUNh
c3QoKSwgYXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoKSwgYW5kIFJ1bnRpbWVDYXN0SGVscGVy
IG1ldGhvZHMgdG8gc3RhdGljCisgICAgICAgIG1ldGhvZHMgb2YgQmluZGluZ1RyYWl0cyBzcGVj
aWFsaXphdGlvbnMuCisKKyAgICAgICAgVG9nZXRoZXIsIHRoZXNlIGNoYW5nZXMgcmVkdWNlIGR1
cGxpY2F0aW9uIGFuZCBtYWtlIGl0IHBvc3NpYmxlIHRvIGZvcndhcmQtZGVjbGFyZQorICAgICAg
ICBhbGwgcHJvdG9jb2wgZW51bSBhbmQgb2JqZWN0IHR5cGVzLCByZWR1Y2luZyB3ZWlyZCBvcmRl
cmluZyBkZXBlbmRlbmNpZXMgYmV0d2VlbiBkb21haW5zLgorCisgICAgICAgICogQ01ha2VMaXN0
cy50eHQ6CisgICAgICAgICogRGVyaXZlZFNvdXJjZXMubWFrZToKKyAgICAgICAgKiBKYXZhU2Ny
aXB0Q29yZS52Y3hwcm9qL2NvcHktZmlsZXMuY21kOgorICAgICAgICAqIEphdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogaW5zcGVjdG9yL0NvbnNvbGVN
ZXNzYWdlLmNwcDogQ29udmVydCB0byBzY29wZWQgZW51bXMuCisgICAgICAgIChJbnNwZWN0b3I6
Om1lc3NhZ2VTb3VyY2VWYWx1ZSk6CisgICAgICAgIChJbnNwZWN0b3I6Om1lc3NhZ2VUeXBlVmFs
dWUpOgorICAgICAgICAoSW5zcGVjdG9yOjptZXNzYWdlTGV2ZWxWYWx1ZSk6CisgICAgICAgICog
aW5zcGVjdG9yL0luamVjdGVkU2NyaXB0LmNwcDogQ29udmVydCB0byBzY29wZWQgZW51bXMgYW5k
IEJpbmRpbmdUcmFpdHMuCisgICAgICAgIChJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0OjpnZXRG
dW5jdGlvbkRldGFpbHMpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdDo6Z2V0
UHJvcGVydGllcyk6CisgICAgICAgIChJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0OjpnZXRJbnRl
cm5hbFByb3BlcnRpZXMpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdDo6d3Jh
cENhbGxGcmFtZXMpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdDo6d3JhcE9i
amVjdCk6CisgICAgICAgIChJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0Ojp3cmFwVGFibGUpOgor
ICAgICAgICAqIGluc3BlY3Rvci9JbmplY3RlZFNjcmlwdEJhc2UuY3BwOiBDb252ZXJ0IEluc3Bl
Y3RvclZhbHVlOjpUeXBlIHRvIGEgc2NvcGVkIGVudW0uCisgICAgICAgIChJbnNwZWN0b3I6Oklu
amVjdGVkU2NyaXB0QmFzZTo6bWFrZUV2YWxDYWxsKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5q
ZWN0ZWRTY3JpcHRNYW5hZ2VyLmNwcDoKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3Jp
cHRNYW5hZ2VyOjppbmplY3RlZFNjcmlwdEZvck9iamVjdElkKToKKyAgICAgICAgKiBpbnNwZWN0
b3IvSW5zcGVjdG9yVHlwZUJ1aWxkZXIuaDoKKyAgICAgICAgKEluc3BlY3Rvcjo6VHlwZUJ1aWxk
ZXI6OkFycmF5OjpjcmVhdGUpOgorICAgICAgICAoSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6U3Ry
dWN0SXRlbVRyYWl0czo6cHVzaFJlZlB0cik6CisgICAgICAgIChJbnNwZWN0b3I6OlR5cGVCdWls
ZGVyOjpBcnJheUl0ZW1IZWxwZXI8U3RyaW5nPjo6VHJhaXRzOjpwdXNoUmF3KToKKyAgICAgICAg
KEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5SXRlbUhlbHBlcjxpbnQ+OjpUcmFpdHM6OnB1
c2hSYXcpOgorICAgICAgICAoSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXlJdGVtSGVscGVy
PGRvdWJsZT46OlRyYWl0czo6cHVzaFJhdyk6CisgICAgICAgIChJbnNwZWN0b3I6OlR5cGVCdWls
ZGVyOjpBcnJheUl0ZW1IZWxwZXI8Ym9vbD46OlRyYWl0czo6cHVzaFJhdyk6CisgICAgICAgIChJ
bnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheUl0ZW1IZWxwZXI8SW5zcGVjdG9yVmFsdWU+OjpU
cmFpdHM6OnB1c2hSZWZQdHIpOgorICAgICAgICAoSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJy
YXlJdGVtSGVscGVyPEluc3BlY3Rvck9iamVjdD46OlRyYWl0czo6cHVzaFJlZlB0cik6CisgICAg
ICAgIChJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheUl0ZW1IZWxwZXI8SW5zcGVjdG9yQXJy
YXk+OjpUcmFpdHM6OnB1c2hSZWZQdHIpOgorICAgICAgICAoSW5zcGVjdG9yOjpUeXBlQnVpbGRl
cjo6UHJpbWl0aXZlQmluZGluZ1RyYWl0czo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUpOgor
ICAgICAgICAoSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QmluZGluZ1RyYWl0czxUeXBlQnVpbGRl
cjo6QXJyYXk8VD4+OjpydW50aW1lQ2FzdCk6CisgICAgICAgIChJbnNwZWN0b3I6OlR5cGVCdWls
ZGVyOjpCaW5kaW5nVHJhaXRzPFR5cGVCdWlsZGVyOjpBcnJheTxUPj46OmFzc2VydFZhbHVlSGFz
RXhwZWN0ZWRUeXBlKToKKyAgICAgICAgKEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkJpbmRpbmdU
cmFpdHM8SW5zcGVjdG9yVmFsdWU+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZSk6CisgICAg
ICAgIChJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpCaW5kaW5nVHJhaXRzPGludD46OmFzc2VydFZh
bHVlSGFzRXhwZWN0ZWRUeXBlKToKKyAgICAgICAgKEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkV4
YWN0bHlJbnQ6OkV4YWN0bHlJbnQpOiBEZWxldGVkLiBJdCB3YXMgbm90IHVzZWQuCisgICAgICAg
IChJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpFeGFjdGx5SW50OjpvcGVyYXRvciBpbnQpOiBEZWxl
dGVkLgorICAgICAgICAoSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6RXhhY3RseUludDo6Y2FzdF90
b19pbnQpOiBEZWxldGVkLgorICAgICAgICAoSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6RXhhY3Rs
eUludDo6Y2FzdF90b19pbnQ8aW50Pik6IERlbGV0ZWQuCisgICAgICAgIChJbnNwZWN0b3I6OlR5
cGVCdWlsZGVyOjppbnQ+KTogRGVsZXRlZC4KKyAgICAgICAgKEluc3BlY3Rvcjo6VHlwZUJ1aWxk
ZXI6OlJ1bnRpbWVDYXN0SGVscGVyOjphc3NlcnRUeXBlKTogRGVsZXRlZC4KKyAgICAgICAgKElu
c3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlJ1bnRpbWVDYXN0SGVscGVyOjphc3NlcnRBbnkpOiBEZWxl
dGVkLgorICAgICAgICAoSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UnVudGltZUNhc3RIZWxwZXI6
OmFzc2VydEludCk6IERlbGV0ZWQuCisgICAgICAgIChJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpB
cnJheTo6cnVudGltZUNhc3QpOiBEZWxldGVkLgorICAgICAgICAoSW5zcGVjdG9yOjpUeXBlQnVp
bGRlcjo6QXJyYXk6OmFzc2VydENvcnJlY3RWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgIChJbnNw
ZWN0b3I6OlR5cGVCdWlsZGVyOjpTdHJ1Y3RJdGVtVHJhaXRzOjphc3NlcnRDb3JyZWN0VmFsdWUp
OiBEZWxldGVkLgorICAgICAgICAoSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXlJdGVtSGVs
cGVyPFN0cmluZz46OlRyYWl0czo6YXNzZXJ0Q29ycmVjdFZhbHVlKTogRGVsZXRlZC4KKyAgICAg
ICAgKEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5SXRlbUhlbHBlcjxpbnQ+OjpUcmFpdHM6
OmFzc2VydENvcnJlY3RWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgIChJbnNwZWN0b3I6OlR5cGVC
dWlsZGVyOjpBcnJheUl0ZW1IZWxwZXI8ZG91YmxlPjo6VHJhaXRzOjphc3NlcnRDb3JyZWN0VmFs
dWUpOiBEZWxldGVkLgorICAgICAgICAoSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXlJdGVt
SGVscGVyPGJvb2w+OjpUcmFpdHM6OmFzc2VydENvcnJlY3RWYWx1ZSk6IERlbGV0ZWQuCisgICAg
ICAgIChJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheUl0ZW1IZWxwZXI8SW5zcGVjdG9yVmFs
dWU+OjpUcmFpdHM6OmFzc2VydENvcnJlY3RWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgIChJbnNw
ZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheUl0ZW1IZWxwZXI8SW5zcGVjdG9yT2JqZWN0Pjo6VHJh
aXRzOjphc3NlcnRDb3JyZWN0VmFsdWUpOiBEZWxldGVkLgorICAgICAgICAoSW5zcGVjdG9yOjpU
eXBlQnVpbGRlcjo6QXJyYXlJdGVtSGVscGVyPEluc3BlY3RvckFycmF5Pjo6VHJhaXRzOjphc3Nl
cnRDb3JyZWN0VmFsdWUpOiBEZWxldGVkLgorICAgICAgICAoSW5zcGVjdG9yOjpUeXBlQnVpbGRl
cjo6QXJyYXlJdGVtSGVscGVyPFR5cGVCdWlsZGVyOjpBcnJheTxUPj46OlRyYWl0czo6YXNzZXJ0
Q29ycmVjdFZhbHVlKTogRGVsZXRlZC4KKworICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JW
YWx1ZXMuY3BwOiBDb252ZXJ0IEluc3BlY3RvclZhbHVlOjpUeXBlIHRvIGEgc2NvcGVkIGVudW0u
CisgICAgICAgIChJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlOjp3cml0ZUpTT04pOgorICAgICAg
ICAoSW5zcGVjdG9yOjpJbnNwZWN0b3JCYXNpY1ZhbHVlOjphc0Jvb2xlYW4pOgorICAgICAgICAo
SW5zcGVjdG9yOjpJbnNwZWN0b3JCYXNpY1ZhbHVlOjphc051bWJlcik6CisgICAgICAgIChJbnNw
ZWN0b3I6Okluc3BlY3RvckJhc2ljVmFsdWU6OndyaXRlSlNPTik6CisgICAgICAgIChJbnNwZWN0
b3I6Okluc3BlY3RvclN0cmluZzo6d3JpdGVKU09OKToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5z
cGVjdG9yT2JqZWN0QmFzZTo6SW5zcGVjdG9yT2JqZWN0QmFzZSk6CisgICAgICAgIChJbnNwZWN0
b3I6Okluc3BlY3Rvck9iamVjdEJhc2U6OnNldEFycmF5KTogVGFrZSBJbnNwZWN0b3JBcnJheUJh
c2UuCisgICAgICAgIChJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdEJhc2U6OnNldE9iamVjdCk6
IFRha2UgSW5zcGVjdG9yT2JqZWN0QmFzZS4KKyAgICAgICAgKEluc3BlY3Rvcjo6SW5zcGVjdG9y
QXJyYXlCYXNlOjpJbnNwZWN0b3JBcnJheUJhc2UpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNw
ZWN0b3JWYWx1ZXMuaDoKKworICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRGVi
dWdnZXJBZ2VudC5jcHA6IENvbnZlcnQgdG8gc2NvcGVkIGVudW1zLgorICAgICAgICAoSW5zcGVj
dG9yOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzY2hlZHVsZVBhdXNlT25OZXh0U3RhdGVtZW50
KToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6YnJlYWtQcm9n
cmFtKToKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQu
aDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclJ1bnRpbWVBZ2VudC5jcHA6
CisgICAgICAgIChJbnNwZWN0b3I6Okluc3BlY3RvclJ1bnRpbWVBZ2VudDo6cGFyc2UpOgorICAg
ICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUnVudGltZUFnZW50Lmg6CisKKyAgICAg
ICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5OiBSZW1vdmVk
LgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vX19pbml0X18ucHk6IEFkZGVk
LgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfYmFja2VuZF9j
b21tYW5kcy5weTogQWRkZWQuCisgICAgICAgIChCYWNrZW5kQ29tbWFuZHNHZW5lcmF0b3IpOgor
ICAgICAgICAoQmFja2VuZENvbW1hbmRzR2VuZXJhdG9yLl9faW5pdF9fKToKKyAgICAgICAgKEJh
Y2tlbmRDb21tYW5kc0dlbmVyYXRvci5tb2RlbCk6CisgICAgICAgIChCYWNrZW5kQ29tbWFuZHNH
ZW5lcmF0b3Iub3V0cHV0X2ZpbGVuYW1lKToKKyAgICAgICAgKEJhY2tlbmRDb21tYW5kc0dlbmVy
YXRvci5nZW5lcmF0ZV9saWNlbnNlKToKKyAgICAgICAgKEJhY2tlbmRDb21tYW5kc0dlbmVyYXRv
ci5nZW5lcmF0ZV9vdXRwdXQpOgorICAgICAgICAoQmFja2VuZENvbW1hbmRzR2VuZXJhdG9yLmdl
bmVyYXRlX2RvbWFpbik6CisgICAgICAgIChCYWNrZW5kQ29tbWFuZHNHZW5lcmF0b3IuZ2VuZXJh
dGVfZG9tYWluLmlzX2Fub255bW91c19lbnVtX21lbWJlcik6CisgICAgICAgIChCYWNrZW5kQ29t
bWFuZHNHZW5lcmF0b3IuZ2VuZXJhdGVfZG9tYWluLmdlbmVyYXRlX3BhcmFtZXRlcl9vYmplY3Qp
OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfYmFja2VuZF9k
aXNwYXRjaGVyX2hlYWRlci5weTogQWRkZWQuCisgICAgICAgIChCYWNrZW5kRGlzcGF0Y2hlckhl
YWRlckdlbmVyYXRvcik6CisgICAgICAgIChCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRv
ci5fX2luaXRfXyk6CisgICAgICAgIChCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvci5t
b2RlbCk6CisgICAgICAgIChCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvci5vdXRwdXRf
ZmlsZW5hbWUpOgorICAgICAgICAoQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IuZ2Vu
ZXJhdGVfbGljZW5zZSk6CisgICAgICAgIChCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRv
ci5nZW5lcmF0ZV9vdXRwdXQpOgorICAgICAgICAoQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5l
cmF0b3IuZ2VuZXJhdGVfb3V0cHV0LmZvcik6CisgICAgICAgIChCYWNrZW5kRGlzcGF0Y2hlckhl
YWRlckdlbmVyYXRvci5fZ2VuZXJhdGVfaGFuZGxlcl9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbik6
CisgICAgICAgIChCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvci5fZ2VuZXJhdGVfYW5v
bnltb3VzX2VudW1fZm9yX3BhcmFtZXRlcik6CisgICAgICAgIChCYWNrZW5kRGlzcGF0Y2hlckhl
YWRlckdlbmVyYXRvci5fZ2VuZXJhdGVfaGFuZGxlcl9kZWNsYXJhdGlvbl9mb3JfY29tbWFuZCk6
CisgICAgICAgIChCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvci5fZ2VuZXJhdGVfYXN5
bmNfaGFuZGxlcl9kZWNsYXJhdGlvbl9mb3JfY29tbWFuZCk6CisgICAgICAgIChCYWNrZW5kRGlz
cGF0Y2hlckhlYWRlckdlbmVyYXRvci5fZ2VuZXJhdGVfZGlzcGF0Y2hlcl9kZWNsYXJhdGlvbnNf
Zm9yX2RvbWFpbik6CisgICAgICAgIChCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvci5f
Z2VuZXJhdGVfZGlzcGF0Y2hlcl9kZWNsYXJhdGlvbl9mb3JfY29tbWFuZCk6CisgICAgICAgICog
aW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaW1w
bGVtZW50YXRpb24ucHk6IEFkZGVkLgorICAgICAgICAoQmFja2VuZERpc3BhdGNoZXJJbXBsZW1l
bnRhdGlvbkdlbmVyYXRvcik6CisgICAgICAgIChCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0
aW9uR2VuZXJhdG9yLl9faW5pdF9fKToKKyAgICAgICAgKEJhY2tlbmREaXNwYXRjaGVySW1wbGVt
ZW50YXRpb25HZW5lcmF0b3IubW9kZWwpOgorICAgICAgICAoQmFja2VuZERpc3BhdGNoZXJJbXBs
ZW1lbnRhdGlvbkdlbmVyYXRvci5vdXRwdXRfZmlsZW5hbWUpOgorICAgICAgICAoQmFja2VuZERp
c3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5nZW5lcmF0ZV9saWNlbnNlKToKKyAgICAg
ICAgKEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IuZ2VuZXJhdGVfb3V0
cHV0KToKKyAgICAgICAgKEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3Iu
X2dlbmVyYXRlX2hhbmRsZXJfY2xhc3NfZGVzdHJ1Y3Rvcl9mb3JfZG9tYWluKToKKyAgICAgICAg
KEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX2Rpc3Bh
dGNoZXJfaW1wbGVtZW50YXRpb25zX2Zvcl9kb21haW4pOgorICAgICAgICAoQmFja2VuZERpc3Bh
dGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfc21hbGxfZGlzcGF0Y2hlcl9z
d2l0Y2hfaW1wbGVtZW50YXRpb25fZm9yX2RvbWFpbik6CisgICAgICAgIChCYWNrZW5kRGlzcGF0
Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9sYXJnZV9kaXNwYXRjaGVyX3N3
aXRjaF9pbXBsZW1lbnRhdGlvbl9mb3JfZG9tYWluKToKKyAgICAgICAgKEJhY2tlbmREaXNwYXRj
aGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX2FzeW5jX2Rpc3BhdGNoZXJfY2xh
c3NfZm9yX2RvbWFpbik6CisgICAgICAgIChCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9u
R2VuZXJhdG9yLl9nZW5lcmF0ZV9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uX2Zvcl9jb21tYW5k
KToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2Zyb250ZW5k
X2Rpc3BhdGNoZXJfaGVhZGVyLnB5OiBBZGRlZC4KKyAgICAgICAgKEZyb250ZW5kRGlzcGF0Y2hl
ckhlYWRlckdlbmVyYXRvcik6CisgICAgICAgIChGcm9udGVuZERpc3BhdGNoZXJIZWFkZXJHZW5l
cmF0b3IuX19pbml0X18pOgorICAgICAgICAoRnJvbnRlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJh
dG9yLm1vZGVsKToKKyAgICAgICAgKEZyb250ZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvci5v
dXRwdXRfZmlsZW5hbWUpOgorICAgICAgICAoRnJvbnRlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJh
dG9yLmdlbmVyYXRlX2xpY2Vuc2UpOgorICAgICAgICAoRnJvbnRlbmREaXNwYXRjaGVySGVhZGVy
R2VuZXJhdG9yLmdlbmVyYXRlX291dHB1dCk6CisgICAgICAgIChGcm9udGVuZERpc3BhdGNoZXJI
ZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRlX2Fub255bW91c19lbnVtX2Zvcl9wYXJhbWV0ZXIpOgor
ICAgICAgICAoRnJvbnRlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yLl9nZW5lcmF0ZV9kaXNw
YXRjaGVyX2RlY2xhcmF0aW9uc19mb3JfZG9tYWluKToKKyAgICAgICAgKEZyb250ZW5kRGlzcGF0
Y2hlckhlYWRlckdlbmVyYXRvci5fZ2VuZXJhdGVfZGlzcGF0Y2hlcl9kZWNsYXJhdGlvbl9mb3Jf
ZXZlbnQpOgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfZnJv
bnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weTogQWRkZWQuCisgICAgICAgIChGcm9u
dGVuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcik6CisgICAgICAgIChGcm9udGVu
ZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fX2luaXRfXyk6CisgICAgICAgIChG
cm9udGVuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5tb2RlbCk6CisgICAgICAg
IChGcm9udGVuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5vdXRwdXRfZmlsZW5h
bWUpOgorICAgICAgICAoRnJvbnRlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3Iu
Z2VuZXJhdGVfbGljZW5zZSk6CisgICAgICAgIChGcm9udGVuZERpc3BhdGNoZXJJbXBsZW1lbnRh
dGlvbkdlbmVyYXRvci5nZW5lcmF0ZV9vdXRwdXQpOgorICAgICAgICAoRnJvbnRlbmREaXNwYXRj
aGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX2Rpc3BhdGNoZXJfaW1wbGVtZW50
YXRpb25zX2Zvcl9kb21haW4pOgorICAgICAgICAoRnJvbnRlbmREaXNwYXRjaGVySW1wbGVtZW50
YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb25fZm9yX2V2
ZW50KToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX3R5cGVf
YnVpbGRlcl9oZWFkZXIucHk6IEFkZGVkLgorICAgICAgICAoVHlwZUJ1aWxkZXJIZWFkZXJHZW5l
cmF0b3IpOgorICAgICAgICAoVHlwZUJ1aWxkZXJIZWFkZXJHZW5lcmF0b3IuX19pbml0X18pOgor
ICAgICAgICAoVHlwZUJ1aWxkZXJIZWFkZXJHZW5lcmF0b3IubW9kZWwpOgorICAgICAgICAoVHlw
ZUJ1aWxkZXJIZWFkZXJHZW5lcmF0b3Iub3V0cHV0X2ZpbGVuYW1lKToKKyAgICAgICAgKFR5cGVC
dWlsZGVySGVhZGVyR2VuZXJhdG9yLmdlbmVyYXRlX2xpY2Vuc2UpOgorICAgICAgICAoVHlwZUJ1
aWxkZXJIZWFkZXJHZW5lcmF0b3IuZ2VuZXJhdGVfb3V0cHV0KToKKyAgICAgICAgKFR5cGVCdWls
ZGVySGVhZGVyR2VuZXJhdG9yLl9nZW5lcmF0ZV9mb3J3YXJkX2RlY2xhcmF0aW9ucyk6CisgICAg
ICAgIChfZ2VuZXJhdGVfdHlwZWRlZnMpOgorICAgICAgICAoX2dlbmVyYXRlX3R5cGVkZWZzX2Zv
cl9kb21haW4pOgorICAgICAgICAoX2dlbmVyYXRlX2J1aWxkZXJzX2Zvcl9kb21haW4pOgorICAg
ICAgICAoX2dlbmVyYXRlX2NsYXNzX2Zvcl9vYmplY3RfZGVjbGFyYXRpb24pOgorICAgICAgICAo
X2dlbmVyYXRlX3N0cnVjdF9mb3JfZW51bV9kZWNsYXJhdGlvbik6CisgICAgICAgIChfZ2VuZXJh
dGVfc3RydWN0X2Zvcl9hbm9ueW1vdXNfZW51bV9tZW1iZXIpOgorICAgICAgICAoX2dlbmVyYXRl
X3N0cnVjdF9mb3JfYW5vbnltb3VzX2VudW1fbWVtYmVyLmFwcGx5X2luZGVudGF0aW9uKToKKyAg
ICAgICAgKF9nZW5lcmF0ZV9zdHJ1Y3RfZm9yX2VudW1fdHlwZSk6CisgICAgICAgIChfZ2VuZXJh
dGVfYnVpbGRlcl9zdGF0ZV9lbnVtKToKKyAgICAgICAgKF9nZW5lcmF0ZV9idWlsZGVyX3NldHRl
cl9mb3JfbWVtYmVyKToKKyAgICAgICAgKF9nZW5lcmF0ZV91bmNoZWNrZWRfc2V0dGVyX2Zvcl9t
ZW1iZXIpOgorICAgICAgICAoX2dlbmVyYXRlX2ZvcndhcmRfZGVjbGFyYXRpb25zX2Zvcl9iaW5k
aW5nX3RyYWl0cyk6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0
ZV90eXBlX2J1aWxkZXJfaW1wbGVtZW50YXRpb24ucHk6IEFkZGVkLgorICAgICAgICAoVHlwZUJ1
aWxkZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcik6CisgICAgICAgIChUeXBlQnVpbGRlckltcGxl
bWVudGF0aW9uR2VuZXJhdG9yLl9faW5pdF9fKToKKyAgICAgICAgKFR5cGVCdWlsZGVySW1wbGVt
ZW50YXRpb25HZW5lcmF0b3IubW9kZWwpOgorICAgICAgICAoVHlwZUJ1aWxkZXJJbXBsZW1lbnRh
dGlvbkdlbmVyYXRvci5vdXRwdXRfZmlsZW5hbWUpOgorICAgICAgICAoVHlwZUJ1aWxkZXJJbXBs
ZW1lbnRhdGlvbkdlbmVyYXRvci5nZW5lcmF0ZV9saWNlbnNlKToKKyAgICAgICAgKFR5cGVCdWls
ZGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IuZ2VuZXJhdGVfb3V0cHV0KToKKyAgICAgICAgKFR5
cGVCdWlsZGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX2VudW1fbWFwcGluZyk6
CisgICAgICAgIChUeXBlQnVpbGRlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9v
cGVuX2ZpZWxkX25hbWVzKToKKyAgICAgICAgKFR5cGVCdWlsZGVySW1wbGVtZW50YXRpb25HZW5l
cmF0b3IuX2dlbmVyYXRlX2J1aWxkZXJzX2Zvcl9kb21haW4pOgorICAgICAgICAoVHlwZUJ1aWxk
ZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfcnVudGltZV9jYXN0X2Zvcl9vYmpl
Y3RfZGVjbGFyYXRpb24pOgorICAgICAgICAoVHlwZUJ1aWxkZXJJbXBsZW1lbnRhdGlvbkdlbmVy
YXRvci5fZ2VuZXJhdGVfYXNzZXJ0aW9uX2Zvcl9vYmplY3RfZGVjbGFyYXRpb24pOgorICAgICAg
ICAoVHlwZUJ1aWxkZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfYXNzZXJ0aW9u
X2Zvcl9lbnVtKToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRv
ci5weTogQWRkZWQuCisgICAgICAgICh1Y2ZpcnN0KToKKyAgICAgICAgKEdlbmVyYXRvcik6Cisg
ICAgICAgIChHZW5lcmF0b3IuX19pbml0X18pOgorICAgICAgICAoR2VuZXJhdG9yLm1vZGVsKToK
KyAgICAgICAgKEdlbmVyYXRvci5nZW5lcmF0ZV9saWNlbnNlKToKKyAgICAgICAgKEdlbmVyYXRv
ci5kb21haW5zX3RvX2dlbmVyYXRlKToKKyAgICAgICAgKEdlbmVyYXRvci5nZW5lcmF0ZV9vdXRw
dXQpOgorICAgICAgICAoR2VuZXJhdG9yLm91dHB1dF9maWxlbmFtZSk6CisgICAgICAgIChHZW5l
cmF0b3IuZW5jb2RpbmdfZm9yX2VudW1fdmFsdWUpOgorICAgICAgICAoR2VuZXJhdG9yLmFzc2ln
bmVkX2VudW1fdmFsdWVzKToKKyAgICAgICAgKEdlbmVyYXRvci50eXBlX25lZWRzX3J1bnRpbWVf
Y2FzdHMpOgorICAgICAgICAoR2VuZXJhdG9yLnR5cGVfaGFzX29wZW5fZmllbGRzKToKKyAgICAg
ICAgKEdlbmVyYXRvci50eXBlX25lZWRzX3NoYXBlX2Fzc2VydGlvbnMpOgorICAgICAgICAoR2Vu
ZXJhdG9yLmNhbGN1bGF0ZV90eXBlc19yZXF1aXJpbmdfc2hhcGVfYXNzZXJ0aW9ucyk6CisgICAg
ICAgIChHZW5lcmF0b3IuY2FsY3VsYXRlX3R5cGVzX3JlcXVpcmluZ19zaGFwZV9hc3NlcnRpb25z
LmdhdGhlcl90cmFuc2l0aXZlbHlfcmVmZXJlbmNlZF90eXBlcyk6CisgICAgICAgIChHZW5lcmF0
b3IuX3RyYXZlcnNlX2FuZF9hc3NpZ25fZW51bV92YWx1ZXMpOgorICAgICAgICAoR2VuZXJhdG9y
Ll9hc3NpZ25fZW5jb2RpbmdfZm9yX2VudW1fdmFsdWUpOgorICAgICAgICAoR2VuZXJhdG9yLndy
YXBfd2l0aF9ndWFyZF9mb3JfZG9tYWluKToKKyAgICAgICAgKEdlbmVyYXRvci5zdHlsaXplZF9u
YW1lX2Zvcl9lbnVtX3ZhbHVlKToKKyAgICAgICAgKEdlbmVyYXRvci5zdHlsaXplZF9uYW1lX2Zv
cl9lbnVtX3ZhbHVlLnJlcGxhY2VDYWxsYmFjayk6CisgICAgICAgIChHZW5lcmF0b3Iua2V5ZWRf
Z2V0X21ldGhvZF9mb3JfdHlwZSk6CisgICAgICAgIChHZW5lcmF0b3Iua2V5ZWRfc2V0X21ldGhv
ZF9mb3JfdHlwZSk6CisgICAgICAgIChHZW5lcmF0b3IudHlwZV9idWlsZGVyX3N0cmluZ19mb3Jf
dHlwZSk6CisgICAgICAgIChHZW5lcmF0b3IudHlwZV9idWlsZGVyX3N0cmluZ19mb3JfdHlwZV9t
ZW1iZXIpOgorICAgICAgICAoR2VuZXJhdG9yLnR5cGVfc3RyaW5nX2Zvcl91bmNoZWNrZWRfZm9y
bWFsX2luX3BhcmFtZXRlcik6CisgICAgICAgIChHZW5lcmF0b3IudHlwZV9zdHJpbmdfZm9yX2No
ZWNrZWRfZm9ybWFsX2V2ZW50X3BhcmFtZXRlcik6CisgICAgICAgIChHZW5lcmF0b3IudHlwZV9z
dHJpbmdfZm9yX3R5cGVfbWVtYmVyKToKKyAgICAgICAgKEdlbmVyYXRvci50eXBlX3N0cmluZ19m
b3JfdHlwZV93aXRoX25hbWUpOgorICAgICAgICAoR2VuZXJhdG9yLnR5cGVfc3RyaW5nX2Zvcl9m
b3JtYWxfb3V0X3BhcmFtZXRlcik6CisgICAgICAgIChHZW5lcmF0b3IudHlwZV9zdHJpbmdfZm9y
X2Zvcm1hbF9hc3luY19wYXJhbWV0ZXIpOgorICAgICAgICAoR2VuZXJhdG9yLnR5cGVfc3RyaW5n
X2Zvcl9zdGFja19pbl9wYXJhbWV0ZXIpOgorICAgICAgICAoR2VuZXJhdG9yLnR5cGVfc3RyaW5n
X2Zvcl9zdGFja19vdXRfcGFyYW1ldGVyKToKKyAgICAgICAgKEdlbmVyYXRvci5hc3NlcnRpb25f
bWV0aG9kX2Zvcl90eXBlX21lbWJlcik6CisgICAgICAgIChHZW5lcmF0b3IuYXNzZXJ0aW9uX21l
dGhvZF9mb3JfdHlwZV9tZW1iZXIuYXNzZXJ0aW9uX21ldGhvZF9mb3JfdHlwZSk6CisgICAgICAg
IChHZW5lcmF0b3IuY3BwX25hbWVfZm9yX3ByaW1pdGl2ZV90eXBlKToKKyAgICAgICAgKEdlbmVy
YXRvci5qc19uYW1lX2Zvcl9wYXJhbWV0ZXJfdHlwZSk6CisgICAgICAgIChHZW5lcmF0b3Iuc2hv
dWxkX3VzZV93cmFwcGVyX2Zvcl9yZXR1cm5fdHlwZSk6CisgICAgICAgIChHZW5lcmF0b3Iuc2hv
dWxkX3Bhc3NfYnlfY29weV9mb3JfcmV0dXJuX3R5cGUpOgorICAgICAgICAqIGluc3BlY3Rvci9z
Y3JpcHRzL2NvZGVnZW4vZ2VuZXJhdG9yX3RlbXBsYXRlcy5weTogQWRkZWQuCisgICAgICAgIChH
ZW5lcmF0b3JUZW1wbGF0ZXMpOgorICAgICAgICAodm9pZCk6CisgICAgICAgIChIYXNoTWFwKToK
KyAgICAgICAgKEJ1aWxkZXIpOgorICAgICAgICAoSW5zcGVjdG9yKToKKyAgICAgICAgKiBpbnNw
ZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL21vZGVscy5weTogQWRkZWQuCisgICAgICAgICh1Y2ZpcnN0
KToKKyAgICAgICAgKFBhcnNlRXhjZXB0aW9uKToKKyAgICAgICAgKFR5cGVjaGVja0V4Y2VwdGlv
bik6CisgICAgICAgIChGcmFtZXdvcmspOgorICAgICAgICAoRnJhbWV3b3JrLl9faW5pdF9fKToK
KyAgICAgICAgKEZyYW1ld29yay5zZXR0aW5nKToKKyAgICAgICAgKEZyYW1ld29yay5mcm9tU3Ry
aW5nKToKKyAgICAgICAgKEZyYW1ld29ya3MpOgorICAgICAgICAoVHlwZVJlZmVyZW5jZSk6Cisg
ICAgICAgIChUeXBlUmVmZXJlbmNlLl9faW5pdF9fKToKKyAgICAgICAgKFR5cGVSZWZlcmVuY2Uu
cmVmZXJlbmNlZF9uYW1lKToKKyAgICAgICAgKFR5cGUpOgorICAgICAgICAoVHlwZS5fX2luaXRf
Xyk6CisgICAgICAgIChUeXBlLl9fZXFfXyk6CisgICAgICAgIChUeXBlLl9faGFzaF9fKToKKyAg
ICAgICAgKFR5cGUucmF3X25hbWUpOgorICAgICAgICAoVHlwZS5pc19lbnVtKToKKyAgICAgICAg
KFR5cGUudHlwZV9kb21haW4pOgorICAgICAgICAoVHlwZS5xdWFsaWZpZWRfbmFtZSk6CisgICAg
ICAgIChUeXBlLnJlc29sdmVfdHlwZV9yZWZlcmVuY2VzKToKKyAgICAgICAgKFByaW1pdGl2ZVR5
cGUpOgorICAgICAgICAoUHJpbWl0aXZlVHlwZS5fX2luaXRfXyk6CisgICAgICAgIChQcmltaXRp
dmVUeXBlLl9fcmVwcl9fKToKKyAgICAgICAgKFByaW1pdGl2ZVR5cGUudHlwZV9kb21haW4pOgor
ICAgICAgICAoUHJpbWl0aXZlVHlwZS5xdWFsaWZpZWRfbmFtZSk6CisgICAgICAgIChBbGlhc2Vk
VHlwZSk6CisgICAgICAgIChBbGlhc2VkVHlwZS5fX2luaXRfXyk6CisgICAgICAgIChBbGlhc2Vk
VHlwZS5fX3JlcHJfXyk6CisgICAgICAgIChBbGlhc2VkVHlwZS5pc19lbnVtKToKKyAgICAgICAg
KEFsaWFzZWRUeXBlLnR5cGVfZG9tYWluKToKKyAgICAgICAgKEFsaWFzZWRUeXBlLnF1YWxpZmll
ZF9uYW1lKToKKyAgICAgICAgKEFsaWFzZWRUeXBlLnJlc29sdmVfdHlwZV9yZWZlcmVuY2VzKToK
KyAgICAgICAgKEVudW1UeXBlKToKKyAgICAgICAgKEVudW1UeXBlLl9faW5pdF9fKToKKyAgICAg
ICAgKEVudW1UeXBlLl9fcmVwcl9fKToKKyAgICAgICAgKEVudW1UeXBlLmlzX2VudW0pOgorICAg
ICAgICAoRW51bVR5cGUudHlwZV9kb21haW4pOgorICAgICAgICAoRW51bVR5cGUuZW51bV92YWx1
ZXMpOgorICAgICAgICAoRW51bVR5cGUucXVhbGlmaWVkX25hbWUpOgorICAgICAgICAoRW51bVR5
cGUucmVzb2x2ZV90eXBlX3JlZmVyZW5jZXMpOgorICAgICAgICAoQXJyYXlUeXBlKToKKyAgICAg
ICAgKEFycmF5VHlwZS5fX2luaXRfXyk6CisgICAgICAgIChBcnJheVR5cGUuX19yZXByX18pOgor
ICAgICAgICAoQXJyYXlUeXBlLnR5cGVfZG9tYWluKToKKyAgICAgICAgKEFycmF5VHlwZS5xdWFs
aWZpZWRfbmFtZSk6CisgICAgICAgIChBcnJheVR5cGUucmVzb2x2ZV90eXBlX3JlZmVyZW5jZXMp
OgorICAgICAgICAoT2JqZWN0VHlwZSk6CisgICAgICAgIChPYmplY3RUeXBlLl9faW5pdF9fKToK
KyAgICAgICAgKE9iamVjdFR5cGUuX19yZXByX18pOgorICAgICAgICAoT2JqZWN0VHlwZS50eXBl
X2RvbWFpbik6CisgICAgICAgIChPYmplY3RUeXBlLnF1YWxpZmllZF9uYW1lKToKKyAgICAgICAg
KGNoZWNrX2Zvcl9yZXF1aXJlZF9wcm9wZXJ0aWVzKToKKyAgICAgICAgKFByb3RvY29sKToKKyAg
ICAgICAgKFByb3RvY29sLl9faW5pdF9fKToKKyAgICAgICAgKFByb3RvY29sLnBhcnNlX3NwZWNp
ZmljYXRpb24pOgorICAgICAgICAoUHJvdG9jb2wucGFyc2VfZG9tYWluKToKKyAgICAgICAgKFBy
b3RvY29sLnBhcnNlX3R5cGVfZGVjbGFyYXRpb24pOgorICAgICAgICAoUHJvdG9jb2wucGFyc2Vf
dHlwZV9tZW1iZXIpOgorICAgICAgICAoUHJvdG9jb2wucGFyc2VfY29tbWFuZCk6CisgICAgICAg
IChQcm90b2NvbC5wYXJzZV9ldmVudCk6CisgICAgICAgIChQcm90b2NvbC5wYXJzZV9jYWxsX29y
X3JldHVybl9wYXJhbWV0ZXIpOgorICAgICAgICAoUHJvdG9jb2wucmVzb2x2ZV90eXBlcyk6Cisg
ICAgICAgIChQcm90b2NvbC5sb29rdXBfdHlwZV9mb3JfZGVjbGFyYXRpb24pOgorICAgICAgICAo
UHJvdG9jb2wubG9va3VwX3R5cGVfcmVmZXJlbmNlKToKKyAgICAgICAgKERvbWFpbik6CisgICAg
ICAgIChEb21haW4uX19pbml0X18pOgorICAgICAgICAoRG9tYWluLnJlc29sdmVfdHlwZV9yZWZl
cmVuY2VzKToKKyAgICAgICAgKERvbWFpbnMpOgorICAgICAgICAoVHlwZURlY2xhcmF0aW9uKToK
KyAgICAgICAgKFR5cGVEZWNsYXJhdGlvbi5fX2luaXRfXyk6CisgICAgICAgIChUeXBlRGVjbGFy
YXRpb24ucmVzb2x2ZV90eXBlX3JlZmVyZW5jZXMpOgorICAgICAgICAoVHlwZU1lbWJlcik6Cisg
ICAgICAgIChUeXBlTWVtYmVyLl9faW5pdF9fKToKKyAgICAgICAgKFR5cGVNZW1iZXIucmVzb2x2
ZV90eXBlX3JlZmVyZW5jZXMpOgorICAgICAgICAoUGFyYW1ldGVyKToKKyAgICAgICAgKFBhcmFt
ZXRlci5fX2luaXRfXyk6CisgICAgICAgIChQYXJhbWV0ZXIucmVzb2x2ZV90eXBlX3JlZmVyZW5j
ZXMpOgorICAgICAgICAoQ29tbWFuZCk6CisgICAgICAgIChDb21tYW5kLl9faW5pdF9fKToKKyAg
ICAgICAgKENvbW1hbmQucmVzb2x2ZV90eXBlX3JlZmVyZW5jZXMpOgorICAgICAgICAoRXZlbnQp
OgorICAgICAgICAoRXZlbnQuX19pbml0X18pOgorICAgICAgICAoRXZlbnQucmVzb2x2ZV90eXBl
X3JlZmVyZW5jZXMpOgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weTogQWRkZWQuCisgICAgICAgIChJbmNyZW1lbnRhbEZp
bGVXcml0ZXIpOgorICAgICAgICAoSW5jcmVtZW50YWxGaWxlV3JpdGVyLl9faW5pdF9fKToKKyAg
ICAgICAgKEluY3JlbWVudGFsRmlsZVdyaXRlci53cml0ZSk6CisgICAgICAgIChJbmNyZW1lbnRh
bEZpbGVXcml0ZXIuY2xvc2UpOgorICAgICAgICAoZ2VuZXJhdGVfZnJvbV9zcGVjaWZpY2F0aW9u
KToKKyAgICAgICAgKGdlbmVyYXRlX2Zyb21fc3BlY2lmaWNhdGlvbi5sb2FkX3NwZWNpZmljYXRp
b24pOgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2NvbW1hbmRzLXdpdGgtYXN5
bmMtYXR0cmlidXRlLmpzb246IEFkZGVkLgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2NvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uOiBB
ZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9kb21haW5zLXdpdGgtdmFy
eWluZy1jb21tYW5kLXNpemVzLmpzb246IEFkZGVkLgorICAgICAgICAqIGluc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2V2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbjogQWRkZWQuCisg
ICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1h
c3luYy1hdHRyaWJ1dGUuanNvbi1yZXN1bHQ6IEFkZGVkLgorICAgICAgICAqIGluc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2NvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4t
cGFyYW1ldGVycy5qc29uLXJlc3VsdDogQWRkZWQuCisgICAgICAgICogaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZXhwZWN0ZWQvZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29u
LXJlc3VsdDogQWRkZWQuCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0
ZWQvZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uLXJlc3VsdDogQWRkZWQuCisg
ICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1kdXBsaWNhdGUtdHlwZS1k
ZWNsYXJhdGlvbnMuanNvbi1lcnJvcjogQWRkZWQuCisgICAgICAgICogaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZmFpbC1vbi1lbnVtLXdpdGgtbm8tdmFsdWVzLmpzb24tZXJyb3I6IEFkZGVkLgor
ICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tdHlwZS1kZWNsYXJhdGlv
bi11c2luZy10eXBlLXJlZmVyZW5jZS5qc29uLWVycm9yOiBBZGRlZC4KKyAgICAgICAgKiBpbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLXR5cGUtd2l0aC1sb3dlcmNhc2UtbmFtZS5qc29u
LWVycm9yOiBBZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9u
LXVua25vd24tdHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1kZWNsYXJhdGlvbi5qc29uLWVycm9yOiBB
ZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLXVua25vd24t
dHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1tZW1iZXIuanNvbi1lcnJvcjogQWRkZWQuCisgICAgICAg
ICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvc2FtZS10eXBlLWlkLWRpZmZlcmVu
dC1kb21haW4uanNvbi1yZXN1bHQ6IEFkZGVkLgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5q
c29uLXJlc3VsdDogQWRkZWQuCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhw
ZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24tcmVzdWx0OiBBZGRlZC4KKyAg
ICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9u
LWVudW0tdHlwZS5qc29uLXJlc3VsdDogQWRkZWQuCisgICAgICAgICogaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uLXJlc3Vs
dDogQWRkZWQuCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlw
ZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uLXJlc3VsdDogQWRkZWQuCisgICAgICAgICog
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1kdXBsaWNhdGUtdHlwZS1kZWNsYXJhdGlv
bnMuanNvbjogQWRkZWQuCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1v
bi1lbnVtLXdpdGgtbm8tdmFsdWVzLmpzb246IEFkZGVkLgorICAgICAgICAqIGluc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2ZhaWwtb24tdHlwZS1kZWNsYXJhdGlvbi11c2luZy10eXBlLXJlZmVyZW5j
ZS5qc29uOiBBZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9u
LXR5cGUtd2l0aC1sb3dlcmNhc2UtbmFtZS5qc29uOiBBZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1k
ZWNsYXJhdGlvbi5qc29uOiBBZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1tZW1iZXIuanNvbjogQWRk
ZWQuCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvc2FtZS10eXBlLWlkLWRpZmZl
cmVudC1kb21haW4uanNvbjogQWRkZWQuCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb246IEFkZGVkLgor
ICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3R5cGUtZGVjbGFyYXRpb24tYXJyYXkt
dHlwZS5qc29uOiBBZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy90eXBl
LWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uOiBBZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy90eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb246IEFkZGVkLgor
ICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3R5cGUtcmVxdWlyaW5nLXJ1bnRpbWUt
Y2FzdHMuanNvbjogQWRkZWQuCisKKzIwMTQtMDgtMTEgIEJyaWFuIEouIEJ1cmcgIDxidXJnQGNz
Lndhc2hpbmd0b24uZWR1PgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IHVzZSB0eXBlIGJ1aWxk
ZXJzIHRvIGNvbnN0cnVjdCBoaWdoIGZpZGVsaXR5IHR5cGUgaW5mb3JtYXRpb24gcGF5bG9hZHMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNTgwMwor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIER1ZSB0byBz
b21lIHR5cG9zIGluIHRoZSBwcm90b2NvbCBmaWxlLCB0aGUgY29kZSBoYWQgd29ya2VkIHdpdGgg
cmF3IG9iamVjdHMKKyAgICAgICAgcmF0aGVyIHRoYW4gd2l0aCB0eXBlIGJ1aWxkZXJzLiBDb252
ZXJ0IHRvIHVzaW5nIGJ1aWxkZXJzLgorCisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNw
ZWN0b3JSdW50aW1lQWdlbnQuY3BwOgorICAgICAgICAoSW5zcGVjdG9yOjpJbnNwZWN0b3JSdW50
aW1lQWdlbnQ6OmdldFJ1bnRpbWVUeXBlc0ZvclZhcmlhYmxlc0F0T2Zmc2V0cyk6CisgICAgICAg
ICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JSdW50aW1lQWdlbnQuaDoKKyAgICAgICAgKiBp
bnNwZWN0b3IvcHJvdG9jb2wvUnVudGltZS5qc29uOiBGaXggJ2l0ZW0nIGZvciAnaXRlbXMnOyB0
cnVlIGZvciAndHJ1ZScuCisgICAgICAgICogcnVudGltZS9IaWdoRmlkZWxpdHlUeXBlUHJvZmls
ZXIuY3BwOgorICAgICAgICAoSlNDOjpIaWdoRmlkZWxpdHlUeXBlUHJvZmlsZXI6OmdldFR5cGVz
Rm9yVmFyaWFibGVBdE9mZnNldEZvckluc3BlY3Rvcik6CisgICAgICAgICogcnVudGltZS9IaWdo
RmlkZWxpdHlUeXBlUHJvZmlsZXIuaDoKKyAgICAgICAgKiBydW50aW1lL1R5cGVTZXQuY3BwOgor
ICAgICAgICAoSlNDOjpUeXBlU2V0OjphbGxTdHJ1Y3R1cmVSZXByZXNlbnRhdGlvbnMpOgorICAg
ICAgICAoSlNDOjpTdHJ1Y3R1cmVTaGFwZTo6c3RyaW5nUmVwcmVzZW50YXRpb24pOgorICAgICAg
ICAoSlNDOjpTdHJ1Y3R1cmVTaGFwZTo6aW5zcGVjdG9yUmVwcmVzZW50YXRpb24pOgorICAgICAg
ICAqIHJ1bnRpbWUvVHlwZVNldC5oOgorCiAyMDE0LTA4LTE0ICBPbGl2ZXIgSHVudCAgPG9saXZl
ckBhcHBsZS5jb20+CiAKICAgICAgICAgVXBkYXRlIHNjb3BlIHJlc29sdXRpb24gdG8gYXNzdW1l
IHRoYXQgdGhlIHBhcmVudCBhY3RpdmF0aW9uIGlzIGFsd2F5cyB0aGVyZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4
IGQ2Y2EzZTVmZjFiNDVkZjUxNzE1ZWE3MmRmOWI0YThhNDBiNjk4NjAuLjU5MDM4YWQzMTM1MGFi
MGY2ZDE0ZThmNGFhNzVkZDYzYWI1MmFlMjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw4OCBAQAor
MjAxNC0wOC0xNCAgQnJpYW4gSi4gQnVyZyAgPGJ1cmdAY3Mud2FzaGluZ3Rvbi5lZHU+CisKKyAg
ICAgICAgV2ViIEluc3BlY3RvcjogcmV3cml0ZSBDb2RlR2VuZXJhdG9ySW5zcGVjdG9yIHRvIGJl
IG1vZHVsYXIgYW5kIHRlc3RhYmxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMzE1OTYKKworICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jh
cm8uCisKKyAgICAgICAgQXNpZGUgZnJvbSBob29raW5nIHVwIHRoZSBuZXcgaW5zcGVjdG9yIGJp
bmRpbmdzIGdlbmVyYXRvciB0byB0aGUgYnVpbGQgc3lzdGVtLAorICAgICAgICB0aGVyZSBhcmUg
YSBmZXcgY29taW5nbGVkIGNoYW5nZXMgdGhhdCB3b3VsZCBiZSBwYWluZnVsIHRvIHNwbGl0IGZy
b20gdGhlIG1haW4KKyAgICAgICAgcGF0Y2guIFRvZ2V0aGVyLCB0aGVzZSBjaGFuZ2VzIG1ha2Ug
aXQgcG9zc2libGUgdG8gZm9yd2FyZC1kZWNsYXJlIGFsbCBwcm90b2NvbAorICAgICAgICBlbnVt
ZXJhdGlvbnMgYXMgc2NvcGVkIGVudW1zLCByZWR1Y2luZyB3ZWlyZCBvcmRlcmluZyBkZXBlbmRl
bmNpZXMgYmV0d2VlbiBkb21haW5zLgorCisgICAgICAgIEFsbCBydW50aW1lQ2FzdCgpIG1ldGhv
ZHMgYXJlIG5vdyBzdGF0aWMgbWV0aG9kcyBvZiBCaW5kaW5nVHJhaXRzIHNwZWNpYWxpemF0aW9u
cywKKyAgICAgICAgcmF0aGVyIHRoYW4gYXMgc3RhdGljIG1ldGhvZHMgb2YgdGhlIHR5cGUgYnVp
bGRlciBjbGFzc2VzLgorCisgICAgICAgIEFsbCBwcm90b2NvbCBlbnVtZXJhdGlvbiB0eXBlcyBh
cmUgc2NvcGVkIGVudW1zIHJhdGhlciB0aGFuIHN0cnVjdC1uYW1lc3BhY2VkIGVudW1zLgorCisg
ICAgICAgIFJlbW92ZSBzb21lIGltcGxpY2l0IHByb3RvY29sIHR5cGUgYW5kIGVudW1lcmF0aW9u
IGRlZmluaXRpb25zIGJlY2F1c2UgdGhleSB0cmlnZ2VyCisgICAgICAgIGNvbXBpbGVyIGJ1Z3Mg
b3IgaW50cm9kdWNlIHVubmVjZXNzYXJ5IGNvbXBsZXhpdHkgaW4gdGhlIGJpbmRpbmdzIGdlbmVy
YXRvci4KKworICAgICAgICBObyBuZXcgdGVzdHMsIG5vIGJlaGF2aW9yIGNoYW5nZWQuCisKKyAg
ICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy5tYWtlOiBV
cGRhdGUgc2NyaXB0IGRlcGVuZGVuY2llcyBhbmQgdGhlIGJpbmRpbmdzIGdlbmVyYXRvciBzY3Jp
cHQgbmFtZS4KKworICAgICAgICAqIGluc3BlY3Rvci9Db21tYW5kTGluZUFQSUhvc3QuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q29tbWFuZExpbmVBUElIb3N0OjppbnNwZWN0SW1wbCk6IENvbnZl
cnQgdG8gQmluZGluZ1RyYWl0cy4KKworICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDU1NB
Z2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6ZGV0ZWN0T3Jp
Z2luKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50OjpidWlsZEFycmF5Rm9y
UmVnaW9ucyk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50Lmg6CisgICAg
ICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckRPTUFnZW50OjpidWlsZE9iamVjdEZvckFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVz
KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvclBhZ2VBZ2VudDo6cmVzb3VyY2VUeXBlSnNvbik6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JQYWdlQWdlbnQ6OmNhY2hlZFJlc291cmNlVHlwZUpzb24pOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUGFnZUFnZW50OjpnZXRTY3JpcHRFeGVjdXRpb25T
dGF0dXMpOiBDb252ZXJ0IHRvIHNjb3BlZCBlbnVtcy4KKworICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yUGFnZUFnZW50OjpidWlsZE9iamVjdEZvckZyYW1lVHJlZSk6IEV4dHJhY3QgRnJhbWVS
ZXNvdXJjZVRyZWU6OlJlc291cmNlcworICAgICAgICBpbnRvIGl0cyBvd24gZXhwbGljaXRseS1k
ZWZpbmVkIG9iamVjdCB0eXBlLiBUaGUgbmV3IGdlbmVyYXRvciBkb2VzIG5vdCBzdXBwb3J0IGlt
cGxpY2l0bHkKKyAgICAgICAgZGVmaW5pbmcgb2JqZWN0IHR5cGVzIGFzIGVsZW1lbnRzIG9mIGFy
cmF5cy4KKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50Lmg6CisgICAgICAg
ICogaW5zcGVjdG9yL0luc3BlY3RvclJlcGxheUFnZW50LmNwcDogRGlzYW1iaWd1YXRlIGJldHdl
ZW4gaW50ZXJuYWwgYW5kIHByb3RvY29sIHR5cGVzLgorICAgICAgICAoV2ViQ29yZTo6YnVpbGRJ
bnNwZWN0b3JPYmplY3RGb3JTZXNzaW9uU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6YnVpbGRJ
bnNwZWN0b3JPYmplY3RGb3JTZWdtZW50U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yUmVwbGF5QWdlbnQ6OnNlc3Npb25TdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JSZXBsYXlBZ2VudDo6ZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvclJlcGxheUFnZW50OjpmcmFtZU5hdmlnYXRlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JSZXBsYXlBZ2VudDo6ZnJhbWVEZXRhY2hlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JSZXBsYXlBZ2VudDo6d2lsbERpc3BhdGNoRXZlbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yUmVwbGF5QWdlbnQ6OnN0YXJ0Q2FwdHVyaW5nKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvclJlcGxheUFnZW50OjpzdG9wQ2FwdHVyaW5nKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvclJlcGxheUFnZW50OjpyZXBsYXlUb1Bvc2l0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclJlcGxheUFnZW50OjpyZXBsYXlUb0NvbXBsZXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUmVwbGF5QWdlbnQ6OnBhdXNlUGxheWJhY2sp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUmVwbGF5QWdlbnQ6OmNhbmNlbFBsYXliYWNr
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclJlcGxheUFnZW50Ojpzd2l0Y2hTZXNzaW9u
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclJlcGxheUFnZW50OjppbnNlcnRTZXNzaW9u
U2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JSZXBsYXlBZ2VudDo6cmVtb3Zl
U2Vzc2lvblNlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUmVwbGF5QWdlbnQ6
OmN1cnJlbnRSZXBsYXlTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JSZXBsYXlB
Z2VudDo6Z2V0QXZhaWxhYmxlU2Vzc2lvbnMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
UmVwbGF5QWdlbnQ6OmdldFNlc3Npb25EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
clJlcGxheUFnZW50OjpnZXRTZWdtZW50RGF0YSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3Bl
Y3RvclJlcGxheUFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNl
QWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6d2ls
bFNlbmRSZXF1ZXN0KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5j
cHA6IENvbnZlcnQgdG8gc2NvcGVkIGVudW1zLiBFeHRyYWN0IENTU1Byb3BlcnR5OjpTdGF0dXMK
KyAgICAgICAgYmVjYXVzZSBzY29wZWQgZW51bXMgZGVmaW5lZCBpbiBhIGNsYXNzIHNjb3BlIHRy
aWdnZXIgY29tcGlsZXIgYnVncyBpbiBHQ0MgNC44LgorICAgICAgICAoV2ViQ29yZTo6YnVpbGRN
ZWRpYU9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZTo6c3R5bGVXaXRo
UHJvcGVydGllcyk6IFdvcmsgYXJvdW5kIGNvbXBpbGVyIGRpc2FncmVlbWVudHMuCisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZVNoZWV0OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yU3R5bGVTaGVldDo6SW5zcGVjdG9yU3R5bGVTaGVldCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU6Okluc3BlY3Rv
clN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rv
clN0eWxlU2hlZXQuaDoKKworICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JUaW1lbGluZUFn
ZW50LmNwcDogQ29udmVydCB0byBzY29wZWQgZW51bXMgYW5kIEJpbmRpbmdUcmFpdHMuCisgICAg
ICAgIChXZWJDb3JlOjp0b1Byb3RvY29sKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclRp
bWVsaW5lQWdlbnQ6OmFkZFJlY29yZFRvVGltZWxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yVGltZWxpbmVBZ2VudDo6c2VuZEV2ZW50KToKKworICAgICAgICAqIGluc3BlY3Rvci9w
cm90b2NvbC9DU1MuanNvbjogRXh0cmFjdCBDU1NQcm9wZXJ0eTo6U3RhdHVzLgorICAgICAgICAq
IGluc3BlY3Rvci9wcm90b2NvbC9QYWdlLmpzb246IEV4dHJhY3QgRnJhbWVSZXNvdXJjZVRyZWU6
OlJlc291cmNlcy4KKwogMjAxNC0wOC0xNCAgWW9hdiBXZWlzcyAgPHlvYXZAeW9hdi53cz4KIAog
ICAgICAgICBzcmNzZXQgd2l0aCB3IGRlc2NyaXB0b3IgZG9lc24ndCBiZWhhdmUgYXMgZXhwZWN0
ZWQgd2hlbiBzaXplcyBpcyBub3Qgc3VwcG9ydGVkLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYklu
c3BlY3RvclVJL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKaW5k
ZXggZGU1NDg0YmEzN2Q5Nzk5YzE0YTg1YWViNGI0YTQ5MjA5ZDIxZjc0Yi4uYjM5ODgyMGNlYmFj
OTJmZjZmMWY5MGI2YzI5ZTFhMWQyZjk1NjUzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3Bl
Y3RvclVJL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMTUgQEAKKzIwMTQtMDgtMTQgIEJyaWFuIEouIEJ1cmcgIDxidXJnQGNzLndhc2hp
bmd0b24uZWR1PgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IHJld3JpdGUgQ29kZUdlbmVyYXRv
ckluc3BlY3RvciB0byBiZSBtb2R1bGFyIGFuZCB0ZXN0YWJsZQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMxNTk2CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgSm9zZXBoIFBlY29yYXJvLgorCisgICAgICAgIEFsc28gYXBwbHkgdHlwZSBleHRyYWN0aW9u
IHJlZmFjdG9yaW5ncyB0byBvbGQgcHJvdG9jb2wgdmVyc2lvbnMgZm9yIGNvbnNpc3RlbmN5Lgor
CisgICAgICAgICogVmVyc2lvbnMvSW5zcGVjdG9yLWlPUy02LjAuanNvbjoKKyAgICAgICAgKiBW
ZXJzaW9ucy9JbnNwZWN0b3ItaU9TLTcuMC5qc29uOgorCiAyMDE0LTA4LTEzICBKb25vIFdlbGxz
ICA8am9ub3dlbGxzQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBlc2xpbnQg
Y29uZmlndXJhdGlvbiBzaG91bGQgYmUgc3RvcmVkIGFzIC5lc2xpbnRyYwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IGE4N2U4YjJlNTliY2IwZTI5M2UyMWE1YjI1ODA3ZTNj
NzAzNWVkZmEuLjgxNWEyMmIxZDJiMDE0NDk5ODJiYWNiMzc0Y2FjNzEzODVkYjAzMzcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTkwNyw2ICs5MDcsMjEgQEAgQUREX1NP
VVJDRV9ERVBFTkRFTkNJRVMoJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L3BhcnNlci9MZXhl
ci5jcHAgJHtERVJJVkVEX1MKIAogc2V0KEphdmFTY3JpcHRDb3JlX0lOU1BFQ1RPUl9TQ1JJUFRT
X0RJUiAiJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L2luc3BlY3Rvci9zY3JpcHRzIikKIAorc2V0KEph
dmFTY3JpcHRDb3JlX0lOU1BFQ1RPUl9QUk9UT0NPTF9TQ1JJUFRTCisgICAgJHtKYXZhU2NyaXB0
Q29yZV9JTlNQRUNUT1JfU0NSSVBUU19ESVJ9L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQorICAgICR7SmF2YVNjcmlwdENvcmVfSU5TUEVDVE9SX1NDUklQVFNfRElSfS9j
b2RlZ2VuL2dlbmVyYXRlX2JhY2tlbmRfY29tbWFuZHMucHkKKyAgICAke0phdmFTY3JpcHRDb3Jl
X0lOU1BFQ1RPUl9TQ1JJUFRTX0RJUn0vY29kZWdlbi9nZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNo
ZXJfaGVhZGVyLnB5CisgICAgJHtKYXZhU2NyaXB0Q29yZV9JTlNQRUNUT1JfU0NSSVBUU19ESVJ9
L2NvZGVnZW4vZ2VuZXJhdGVfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5Cisg
ICAgJHtKYXZhU2NyaXB0Q29yZV9JTlNQRUNUT1JfU0NSSVBUU19ESVJ9L2NvZGVnZW4vZ2VuZXJh
dGVfZnJvbnRlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkKKyAgICAke0phdmFTY3JpcHRDb3JlX0lO
U1BFQ1RPUl9TQ1JJUFRTX0RJUn0vY29kZWdlbi9nZW5lcmF0ZV9mcm9udGVuZF9kaXNwYXRjaGVy
X2ltcGxlbWVudGF0aW9uLnB5CisgICAgJHtKYXZhU2NyaXB0Q29yZV9JTlNQRUNUT1JfU0NSSVBU
U19ESVJ9L2NvZGVnZW4vZ2VuZXJhdGVfdHlwZV9idWlsZGVyX2hlYWRlci5weQorICAgICR7SmF2
YVNjcmlwdENvcmVfSU5TUEVDVE9SX1NDUklQVFNfRElSfS9jb2RlZ2VuL2dlbmVyYXRlX3R5cGVf
YnVpbGRlcl9pbXBsZW1lbnRhdGlvbi5weQorICAgICR7SmF2YVNjcmlwdENvcmVfSU5TUEVDVE9S
X1NDUklQVFNfRElSfS9jb2RlZ2VuL2dlbmVyYXRvci5weQorICAgICR7SmF2YVNjcmlwdENvcmVf
SU5TUEVDVE9SX1NDUklQVFNfRElSfS9jb2RlZ2VuL2dlbmVyYXRvcl90ZW1wbGF0ZXMucHkKKyAg
ICAke0phdmFTY3JpcHRDb3JlX0lOU1BFQ1RPUl9TQ1JJUFRTX0RJUn0vY29kZWdlbi9fX2luaXRf
Xy5weQorICAgICR7SmF2YVNjcmlwdENvcmVfSU5TUEVDVE9SX1NDUklQVFNfRElSfS9jb2RlZ2Vu
L21vZGVscy5weQorKQorCiBzZXQoSmF2YVNjcmlwdENvcmVfSU5TUEVDVE9SX0RPTUFJTlMKICAg
ICAke0pBVkFTQ1JJUFRDT1JFX0RJUn0vaW5zcGVjdG9yL3Byb3RvY29sL0NvbnNvbGUuanNvbgog
ICAgICR7SkFWQVNDUklQVENPUkVfRElSfS9pbnNwZWN0b3IvcHJvdG9jb2wvRGVidWdnZXIuanNv
bgpAQCAtOTMzLDkgKzk0OCw4IEBAIGFkZF9jdXN0b21fY29tbWFuZCgKICAgICAgICAgICAgJHtE
RVJJVkVEX1NPVVJDRVNfSkFWQVNDUklQVENPUkVfRElSfS9pbnNwZWN0b3IvSW5zcGVjdG9ySlNU
eXBlQnVpbGRlcnMuaAogICAgICAgICAgICAke0RFUklWRURfU09VUkNFU19XRUJJTlNQRUNUT1JV
SV9ESVJ9L1VzZXJJbnRlcmZhY2UvUHJvdG9jb2wvSW5zcGVjdG9ySlNCYWNrZW5kQ29tbWFuZHMu
anMKICAgICBNQUlOX0RFUEVOREVOQ1kgJHtERVJJVkVEX1NPVVJDRVNfSkFWQVNDUklQVENPUkVf
RElSfS9JbnNwZWN0b3JKUy5qc29uCi0gICAgREVQRU5EUyAke0phdmFTY3JpcHRDb3JlX0lOU1BF
Q1RPUl9TQ1JJUFRTX0RJUn0vQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weQotICAgICAgICAgICAg
JHtKYXZhU2NyaXB0Q29yZV9JTlNQRUNUT1JfU0NSSVBUU19ESVJ9L0NvZGVHZW5lcmF0b3JJbnNw
ZWN0b3JTdHJpbmdzLnB5Ci0gICAgQ09NTUFORCAke1BZVEhPTl9FWEVDVVRBQkxFfSAke0phdmFT
Y3JpcHRDb3JlX0lOU1BFQ1RPUl9TQ1JJUFRTX0RJUn0vQ29kZUdlbmVyYXRvckluc3BlY3Rvci5w
eSAke0RFUklWRURfU09VUkNFU19KQVZBU0NSSVBUQ09SRV9ESVJ9L0luc3BlY3RvckpTLmpzb24g
LS1vdXRwdXRfaF9kaXIgIiR7REVSSVZFRF9TT1VSQ0VTX0pBVkFTQ1JJUFRDT1JFX0RJUn0vaW5z
cGVjdG9yIiAtLW91dHB1dF9jcHBfZGlyICIke0RFUklWRURfU09VUkNFU19KQVZBU0NSSVBUQ09S
RV9ESVJ9L2luc3BlY3RvciIgLS1vdXRwdXRfanNfZGlyICIke0RFUklWRURfU09VUkNFU19XRUJJ
TlNQRUNUT1JVSV9ESVJ9L1VzZXJJbnRlcmZhY2UvUHJvdG9jb2wiIC0tb3V0cHV0X3R5cGUgSmF2
YVNjcmlwdCAtLXdyaXRlX2Fsd2F5cworICAgIERFUEVORFMgJHtKYXZhU2NyaXB0Q29yZV9JTlNQ
RUNUT1JfUFJPVE9DT0xfU0NSSVBUU30KKyAgICBDT01NQU5EICR7UFlUSE9OX0VYRUNVVEFCTEV9
ICR7SmF2YVNjcmlwdENvcmVfSU5TUEVDVE9SX1NDUklQVFNfRElSfS9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkgLS1vdXRwdXREaXIgIiR7REVSSVZFRF9TT1VSQ0VTX0pB
VkFTQ1JJUFRDT1JFX0RJUn0iIC0tZnJhbWV3b3JrIEphdmFTY3JpcHRDb3JlICR7REVSSVZFRF9T
T1VSQ0VTX0pBVkFTQ1JJUFRDT1JFX0RJUn0vSW5zcGVjdG9ySlMuanNvbiAmJiBta2RpciAtcCAk
e0RFUklWRURfU09VUkNFU19KQVZBU0NSSVBUQ09SRV9ESVJ9L2luc3BlY3RvciAmJiBjcCAke0RF
UklWRURfU09VUkNFU19KQVZBU0NSSVBUQ09SRV9ESVJ9L0luc3BlY3RvckpTQmFja2VuZERpc3Bh
dGNoZXJzLmggJHtERVJJVkVEX1NPVVJDRVNfSkFWQVNDUklQVENPUkVfRElSfS9JbnNwZWN0b3JK
U0JhY2tlbmREaXNwYXRjaGVycy5jcHAgJHtERVJJVkVEX1NPVVJDRVNfSkFWQVNDUklQVENPUkVf
RElSfS9JbnNwZWN0b3JKU0Zyb250ZW5kRGlzcGF0Y2hlcnMuaCAke0RFUklWRURfU09VUkNFU19K
QVZBU0NSSVBUQ09SRV9ESVJ9L0luc3BlY3RvckpTRnJvbnRlbmREaXNwYXRjaGVycy5jcHAgJHtE
RVJJVkVEX1NPVVJDRVNfSkFWQVNDUklQVENPUkVfRElSfS9JbnNwZWN0b3JKU1R5cGVCdWlsZGVy
cy5oICR7REVSSVZFRF9TT1VSQ0VTX0pBVkFTQ1JJUFRDT1JFX0RJUn0vSW5zcGVjdG9ySlNUeXBl
QnVpbGRlcnMuY3BwICR7REVSSVZFRF9TT1VSQ0VTX0pBVkFTQ1JJUFRDT1JFX0RJUn0vaW5zcGVj
dG9yICYmIG1rZGlyIC1wICR7REVSSVZFRF9TT1VSQ0VTX1dFQklOU1BFQ1RPUlVJX0RJUn0vVXNl
ckludGVyZmFjZS9Qcm90b2NvbCAmJiBjcCAke0RFUklWRURfU09VUkNFU19KQVZBU0NSSVBUQ09S
RV9ESVJ9L0luc3BlY3RvckpTQmFja2VuZENvbW1hbmRzLmpzICR7REVSSVZFRF9TT1VSQ0VTX1dF
QklOU1BFQ1RPUlVJX0RJUn0vVXNlckludGVyZmFjZS9Qcm90b2NvbAogICAgIFZFUkJBVElNKQog
ZmlsZShNQUtFX0RJUkVDVE9SWSAke0RFUklWRURfU09VUkNFU19KQVZBU0NSSVBUQ09SRV9ESVJ9
L2luc3BlY3RvcikKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRT
b3VyY2VzLm1ha2UgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQpp
bmRleCBjYzMwN2Q3ZTc0NzliOWJmOTBhOGEzZWZiZjEzYzk4NzNhMzg4M2I4Li5kMzNjOTUxOGZj
MjkyODFjNDRiMDcyOGVhMTg0YTY2MWE4NGM5NjRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
RGVyaXZlZFNvdXJjZXMubWFrZQpAQCAtMTIyLDggKzEyMiwxOSBAQCBJTlNQRUNUT1JfRE9NQUlO
UyA9IFwKICMKIAogSU5TUEVDVE9SX0dFTkVSQVRPUl9TQ1JJUFRTID0gXAotCSQoSmF2YVNjcmlw
dENvcmUpL2luc3BlY3Rvci9zY3JpcHRzL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkgXAotCSQo
SmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9zY3JpcHRzL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3JT
dHJpbmdzLnB5IFwKKwkkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2Vu
L19faW5pdF9fLnB5IFwKKwkkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2Rl
Z2VuL2dlbmVyYXRlX2JhY2tlbmRfY29tbWFuZHMucHkgXAorCSQoSmF2YVNjcmlwdENvcmUpL2lu
c3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRl
ci5weSBcCisJJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5l
cmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkgXAorCSQoSmF2YVNjcmlw
dENvcmUpL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfZnJvbnRlbmRfZGlzcGF0
Y2hlcl9oZWFkZXIucHkgXAorCSQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9zY3JpcHRzL2Nv
ZGVnZW4vZ2VuZXJhdGVfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSBcCisJ
JChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV90eXBl
X2J1aWxkZXJfaGVhZGVyLnB5IFwKKwkkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3Ivc2NyaXB0
cy9jb2RlZ2VuL2dlbmVyYXRlX3R5cGVfYnVpbGRlcl9pbXBsZW1lbnRhdGlvbi5weSBcCisJJChK
YXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0b3JfdGVtcGxh
dGVzLnB5IFwKKwkkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dl
bmVyYXRvci5weSBcCisJJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdl
bi9tb2RlbHMucHkgXAorCSQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWNvbWJpbmVkLWluc3BlY3Rvci1qc29uLnB5IFwKKwkkKEphdmFTY3JpcHRDb3JlKS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkgXAog
IwogCiBhbGwgOiBcCkBAIC0xNDQsNyArMTU1LDcgQEAgSW5zcGVjdG9ySlMuanNvbiA6IGluc3Bl
Y3Rvci9zY3JpcHRzL2dlbmVyYXRlLWNvbWJpbmVkLWluc3BlY3Rvci1qc29uLnB5ICQoSU5TUEUK
IAogIyBJbnNwZWN0b3IgQmFja2VuZCBEaXNwYXRjaGVycywgRnJvbnRlbmQgRGlzcGF0Y2hlcnMs
IFR5cGUgQnVpbGRlcnMKIEluc3BlY3RvckpTRnJvbnRlbmREaXNwYXRjaGVycy5oIDogSW5zcGVj
dG9ySlMuanNvbiAkKElOU1BFQ1RPUl9HRU5FUkFUT1JfU0NSSVBUUykKLQkkKFBZVEhPTikgJChK
YXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3NjcmlwdHMvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5w
eSAuL0luc3BlY3RvckpTLmpzb24gLS1vdXRwdXRfaF9kaXIgLiAtLW91dHB1dF9jcHBfZGlyIC4g
LS1vdXRwdXRfanNfZGlyIC4gLS1vdXRwdXRfdHlwZSBKYXZhU2NyaXB0CisJJChQWVRIT04pICQo
SmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weSAtLWZyYW1ld29yayBKYXZhU2NyaXB0Q29yZSAtLW91dHB1dERpciAu
IC4vSW5zcGVjdG9ySlMuanNvbgogCiBJbmplY3RlZFNjcmlwdFNvdXJjZS5oIDogaW5zcGVjdG9y
L0luamVjdGVkU2NyaXB0U291cmNlLmpzICQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9zY3Jp
cHRzL2pzbWluLnB5ICQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9zY3JpcHRzL3h4ZC5wbAog
CWVjaG8gIi8vIyBzb3VyY2VVUkw9X19XZWJJbnNwZWN0b3JJbmplY3RlZFNjcmlwdF9fIiA+IC4v
SW5qZWN0ZWRTY3JpcHRTb3VyY2UubWluLmpzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9jb3B5LWZpbGVzLmNtZCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL2NvcHktZmlsZXMuY21kCmluZGV4IDQ2
NTVlOGNkM2Q2Y2E3OTY5YjAwZWQ3ZGU5ZWVkYjk5MTNjYjU1NzUuLmViODRiYzE4ZmY0M2QyYzc4
YjUyMjJhZWU0ZWJlZGE1ZmIwYTdhMGUgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL2NvcHktZmlsZXMuY21kCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL2NvcHktZmlsZXMuY21kCkBAIC02NCw2
ICs2NCw3IEBAIGZvciAlJWQgaW4gKAogZWNobyBDb3B5aW5nIEluc3BlY3RvciBzY3JpcHRzIGFz
IGlmIHRoZXkgd2VyZSBwcml2YXRlIGhlYWRlcnMuLi4NCiBmb3IgJSVkIGluICgNCiAgICAgaW5z
cGVjdG9yXHNjcmlwdHMNCisJaW5zcGVjdG9yXHNjcmlwdHNcY29kZWdlbg0KICkgZG8gKA0KICAg
ICB4Y29weSAveSAvZCAuLlwlJWRcKiAiJVByaXZhdGVIZWFkZXJzRGlyZWN0b3J5JSIgPk5VTA0K
ICkNCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDNiNmQyZGM2YmU5NzliMGZjMjky
NjVlMDMxMGIwYzI0NDRmNWYwOWIuLjc5MTJiNDUzY2U4Y2IzZTZlYWRkOGYwNTFlYmQ4YjFmYWU5
YWY4NWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xNjM1LDggKzE2MzUsNiBA
QAogCQlBNTMyNDM4QTE4NTY4MzM1MDAyRUQ2OTIgLyogSW5zcGVjdG9ySlNGcm9udGVuZERpc3Bh
dGNoZXJzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
NTMyNDM4NDE4NTY4MzE3MDAyRUQ2OTIgLyogSW5zcGVjdG9ySlNGcm9udGVuZERpc3BhdGNoZXJz
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTUz
MjQzOEIxODU2ODMzNTAwMkVENjkyIC8qIEluc3BlY3RvckpTVHlwZUJ1aWxkZXJzLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1MzI0Mzg1MTg1Njgz
MTcwMDJFRDY5MiAvKiBJbnNwZWN0b3JKU1R5cGVCdWlsZGVycy5jcHAgKi87IH07CiAJCUE1MzI0
MzhDMTg1NjgzMzUwMDJFRDY5MiAvKiBJbnNwZWN0b3JKU1R5cGVCdWlsZGVycy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTUzMjQzODYxODU2ODMxNzAw
MkVENjkyIC8qIEluc3BlY3RvckpTVHlwZUJ1aWxkZXJzLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJQTUzMjQzOTIxODU2OTcwOTAwMkVENjkyIC8q
IENvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkgaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBNTMyNDM4RjE4NTY5NkU2MDAyRUQ2OTIgLyogQ29kZUdlbmVyYXRv
ckluc3BlY3Rvci5weSAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwotCQlBNTMyNDM5MzE4NTY5NzA5MDAyRUQ2OTIgLyogQ29kZUdlbmVyYXRvckluc3BlY3Rv
clN0cmluZ3MucHkgaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBNTMyNDM5MDE4NTY5NkU2MDAyRUQ2OTIgLyogQ29kZUdlbmVyYXRvckluc3BlY3RvclN0cmlu
Z3MucHkgKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
QTUzMjQzOTQxODU2OTcwOTAwMkVENjkyIC8qIGdlbmVyYXRlLWNvbWJpbmVkLWluc3BlY3Rvci1q
c29uLnB5IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTUz
MjQzOTExODU2OTZFNjAwMkVENjkyIC8qIGdlbmVyYXRlLWNvbWJpbmVkLWluc3BlY3Rvci1qc29u
LnB5ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE1
MzI0Mzk4MTg1NkE0ODkwMDJFRDY5MiAvKiBJbnNwZWN0b3JKUy5qc29uIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTUzMjQzOTUxODU2QTQ3NTAwMkVENjky
IC8qIEluc3BlY3RvckpTLmpzb24gKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJQTUzQ0UwODUxOEJDMUE1NjAwQkVERjc2IC8qIENvbnNvbGVQcm90b3R5
cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTUz
Q0UwODExOEJDMUE1NjAwQkVERjc2IC8qIENvbnNvbGVQcm90b3R5cGUuY3BwICovOyB9OwpAQCAt
MjA2Miw2ICsyMDYwLDE3IEBACiAJCUMyRkNBRTEyMTdBOUMyNEUwMDM0QzczNSAvKiBCeXRlY29k
ZUxpdmVuZXNzQW5hbHlzaXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQzJGQ0FFMEUxN0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2RlTGl2ZW5lc3NB
bmFseXNpcy5jcHAgKi87IH07CiAJCUMyRkNBRTEzMTdBOUMyNEUwMDM0QzczNSAvKiBCeXRlY29k
ZUxpdmVuZXNzQW5hbHlzaXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEMyRkNBRTBGMTdBOUMyNEUwMDM0QzczNSAvKiBCeXRlY29kZUxpdmVuZXNzQW5h
bHlzaXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQlDMkZFMThBNDE2QkFFQzQwMDBBRjMwNjEgLyogU3RydWN0dXJlUmFyZURhdGEuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyRkUxOEEzMTZCQUVDNDAw
MEFGMzA2MSAvKiBTdHJ1Y3R1cmVSYXJlRGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCUM0NzAzQ0MwMTkyODQ0OTYwMDEzRkJFQSAvKiBnZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkgaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNDcwM0NCRjE5Mjg0NDk2MDAxM0ZCRUEgLyogZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5ICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUM0NzAzQ0NFMTkyODQ0Q0MwMDEzRkJFQSAv
KiBnZW5lcmF0ZV9iYWNrZW5kX2NvbW1hbmRzLnB5IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQzQ3MDNDQzMxOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRl
X2JhY2tlbmRfY29tbWFuZHMucHkgKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKKwkJQzQ3MDNDQ0YxOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRlX2JhY2tl
bmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkgaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBDNDcwM0NDNDE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJhdGVfYmFja2Vu
ZF9kaXNwYXRjaGVyX2hlYWRlci5weSAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQlDNDcwM0NEMDE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJhdGVfYmFj
a2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5IGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzQ3MDNDQzUxOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVy
YXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlDNDcwM0NEMTE5Mjg0NENDMDAxM0ZC
RUEgLyogZ2VuZXJhdGVfZnJvbnRlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkgaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNDcwM0NDNjE5Mjg0NENDMDAxM0ZC
RUEgLyogZ2VuZXJhdGVfZnJvbnRlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkgKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQzQ3MDNDRDIxOTI4NDRDQzAw
MTNGQkVBIC8qIGdlbmVyYXRlX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNDcwM0NDNzE5
Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJhdGVfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRh
dGlvbi5weSAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQlDNDcwM0NEMzE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJhdGVfdHlwZV9idWlsZGVyX2hlYWRl
ci5weSBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM0NzAz
Q0M4MTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0ZV90eXBlX2J1aWxkZXJfaGVhZGVyLnB5ICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUM0NzAzQ0Q0
MTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0ZV90eXBlX2J1aWxkZXJfaW1wbGVtZW50YXRpb24u
cHkgaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNDcwM0ND
OTE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJhdGVfdHlwZV9idWlsZGVyX2ltcGxlbWVudGF0aW9u
LnB5ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUM0
NzAzQ0Q1MTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0b3JfdGVtcGxhdGVzLnB5IGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzQ3MDNDQ0ExOTI4NDRDQzAw
MTNGQkVBIC8qIGdlbmVyYXRvcl90ZW1wbGF0ZXMucHkgKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQzQ3MDNDRDYxOTI4NDRDQzAwMTNGQkVBIC8qIGdl
bmVyYXRvci5weSBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEM0NzAzQ0NCMTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0b3IucHkgKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQzQ3MDNDRDcxOTI4NDRDQzAwMTNG
QkVBIC8qIG1vZGVscy5weSBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEM0NzAzQ0NDMTkyODQ0Q0MwMDEzRkJFQSAvKiBtb2RlbHMucHkgKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTEyNEE4RjcwRTU1NTc3NTAw
MzA5MUYxIC8qIE9wYXF1ZUpTU3RyaW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBFMTI0QThGNTBFNTU1Nzc1MDAzMDkxRjEgLyogT3BhcXVlSlNTdHJp
bmcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlF
MTI0QThGODBFNTU1Nzc1MDAzMDkxRjEgLyogT3BhcXVlSlNTdHJpbmcuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTEyNEE4RjYwRTU1NTc3NTAwMzA5
MUYxIC8qIE9wYXF1ZUpTU3RyaW5nLmNwcCAqLzsgfTsKIAkJRTE4RTNBNTkwREY5Mjc4QzAwRDkw
QjM0IC8qIFZNLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEUxOEUzQTU3MERGOTI3OEMwMEQ5MEIzNCAvKiBWTS5jcHAgKi87IH07CkBAIC0zMzEyLDgg
KzMzMjEsNiBAQAogCQlBNTMyNDM4NTE4NTY4MzE3MDAyRUQ2OTIgLyogSW5zcGVjdG9ySlNUeXBl
QnVpbGRlcnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5zcGVjdG9ySlNUeXBlQnVpbGRlcnMu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNTMyNDM4NjE4NTY4MzE3MDAyRUQ2
OTIgLyogSW5zcGVjdG9ySlNUeXBlQnVpbGRlcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5zcGVjdG9y
SlNUeXBlQnVpbGRlcnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTUzMjQzOEQx
ODU2OTZDQTAwMkVENjkyIC8qIHByb3RvY29sICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gZm9sZGVyOyBwYXRoID0gcHJvdG9jb2w7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCUE1MzI0MzhGMTg1Njk2RTYwMDJFRDY5MiAvKiBDb2RlR2VuZXJh
dG9ySW5zcGVjdG9yLnB5ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5zY3JpcHQucHl0aG9uOyBwYXRoID0gQ29k
ZUdlbmVyYXRvckluc3BlY3Rvci5weTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTUz
MjQzOTAxODU2OTZFNjAwMkVENjkyIC8qIENvZGVHZW5lcmF0b3JJbnNwZWN0b3JTdHJpbmdzLnB5
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gdGV4dC5zY3JpcHQucHl0aG9uOyBwYXRoID0gQ29kZUdlbmVyYXRvckluc3Bl
Y3RvclN0cmluZ3MucHk7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE1MzI0MzkxMTg1
Njk2RTYwMDJFRDY5MiAvKiBnZW5lcmF0ZS1jb21iaW5lZC1pbnNwZWN0b3ItanNvbi5weSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHRleHQuc2NyaXB0LnB5dGhvbjsgcGF0aCA9ICJnZW5lcmF0ZS1jb21iaW5lZC1pbnNw
ZWN0b3ItanNvbi5weSI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE1MzI0Mzk1MTg1
NkE0NzUwMDJFRDY5MiAvKiBJbnNwZWN0b3JKUy5qc29uICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5qc29uOyBw
YXRoID0gSW5zcGVjdG9ySlMuanNvbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTUz
MjQzOTYxODU2QTQ3NTAwMkVENjkyIC8qIEluc3BlY3RvckpTQmFja2VuZENvbW1hbmRzLmpzICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBwYXRoID0gSW5zcGVjdG9ySlNCYWNrZW5k
Q29tbWFuZHMuanM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zNzI5LDYgKzM3MzYs
MTggQEAKIAkJQzJGQ0FFMEUxN0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2RlTGl2ZW5lc3NBbmFs
eXNpcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBCeXRlY29kZUxp
dmVuZXNzQW5hbHlzaXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMkZDQUUw
RjE3QTlDMjRFMDAzNEM3MzUgLyogQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDMkZFMThBMzE2QkFFQzQwMDBBRjMwNjEgLyogU3Ry
dWN0dXJlUmFyZURhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RydWN0
dXJlUmFyZURhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzQ3MDNDQkYxOTI4
NDQ5NjAwMTNGQkVBIC8qIGdlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHRleHQuc2NyaXB0LnB5dGhvbjsgcGF0aCA9ICJnZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDNDcw
M0NDMjE5Mjg0NENDMDAxM0ZCRUEgLyogX19pbml0X18ucHkgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnNjcmlw
dC5weXRob247IG5hbWUgPSBfX2luaXRfXy5weTsgcGF0aCA9IF9faW5pdF9fLnB5OyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlDNDcwM0NDMzE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJh
dGVfYmFja2VuZF9jb21tYW5kcy5weSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuc2NyaXB0LnB5dGhvbjsgbmFt
ZSA9IGdlbmVyYXRlX2JhY2tlbmRfY29tbWFuZHMucHk7IHBhdGggPSBnZW5lcmF0ZV9iYWNrZW5k
X2NvbW1hbmRzLnB5OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDNDcwM0NDNDE5Mjg0
NENDMDAxM0ZCRUEgLyogZ2VuZXJhdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHRleHQuc2NyaXB0LnB5dGhvbjsgbmFtZSA9IGdlbmVyYXRlX2JhY2tlbmRfZGlzcGF0
Y2hlcl9oZWFkZXIucHk7IHBhdGggPSBnZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVy
LnB5OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDNDcwM0NDNTE5Mjg0NENDMDAxM0ZC
RUEgLyogZ2VuZXJhdGVfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5ICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gdGV4dC5zY3JpcHQucHl0aG9uOyBuYW1lID0gZ2VuZXJhdGVfYmFja2VuZF9kaXNwYXRj
aGVyX2ltcGxlbWVudGF0aW9uLnB5OyBwYXRoID0gZ2VuZXJhdGVfYmFja2VuZF9kaXNwYXRjaGVy
X2ltcGxlbWVudGF0aW9uLnB5OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDNDcwM0ND
NjE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJhdGVfZnJvbnRlbmRfZGlzcGF0Y2hlcl9oZWFkZXIu
cHkgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSB0ZXh0LnNjcmlwdC5weXRob247IG5hbWUgPSBnZW5lcmF0ZV9mcm9udGVu
ZF9kaXNwYXRjaGVyX2hlYWRlci5weTsgcGF0aCA9IGdlbmVyYXRlX2Zyb250ZW5kX2Rpc3BhdGNo
ZXJfaGVhZGVyLnB5OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDNDcwM0NDNzE5Mjg0
NENDMDAxM0ZCRUEgLyogZ2VuZXJhdGVfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlv
bi5weSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHRleHQuc2NyaXB0LnB5dGhvbjsgbmFtZSA9IGdlbmVyYXRlX2Zyb250
ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHk7IHBhdGggPSBnZW5lcmF0ZV9mcm9udGVu
ZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlDNDcwM0NDODE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJhdGVfdHlwZV9idWlsZGVyX2hl
YWRlci5weSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHRleHQuc2NyaXB0LnB5dGhvbjsgbmFtZSA9IGdlbmVyYXRlX3R5
cGVfYnVpbGRlcl9oZWFkZXIucHk7IHBhdGggPSBnZW5lcmF0ZV90eXBlX2J1aWxkZXJfaGVhZGVy
LnB5OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDNDcwM0NDOTE5Mjg0NENDMDAxM0ZC
RUEgLyogZ2VuZXJhdGVfdHlwZV9idWlsZGVyX2ltcGxlbWVudGF0aW9uLnB5ICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
dGV4dC5zY3JpcHQucHl0aG9uOyBuYW1lID0gZ2VuZXJhdGVfdHlwZV9idWlsZGVyX2ltcGxlbWVu
dGF0aW9uLnB5OyBwYXRoID0gZ2VuZXJhdGVfdHlwZV9idWlsZGVyX2ltcGxlbWVudGF0aW9uLnB5
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDNDcwM0NDQTE5Mjg0NENDMDAxM0ZCRUEg
LyogZ2VuZXJhdG9yX3RlbXBsYXRlcy5weSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuc2NyaXB0LnB5dGhvbjsg
bmFtZSA9IGdlbmVyYXRvcl90ZW1wbGF0ZXMucHk7IHBhdGggPSBnZW5lcmF0b3JfdGVtcGxhdGVz
LnB5OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDNDcwM0NDQjE5Mjg0NENDMDAxM0ZC
RUEgLyogZ2VuZXJhdG9yLnB5ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5zY3JpcHQucHl0aG9uOyBuYW1lID0g
Z2VuZXJhdG9yLnB5OyBwYXRoID0gZ2VuZXJhdG9yLnB5OyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlDNDcwM0NDQzE5Mjg0NENDMDAxM0ZCRUEgLyogbW9kZWxzLnB5ICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
dGV4dC5zY3JpcHQucHl0aG9uOyBuYW1lID0gbW9kZWxzLnB5OyBwYXRoID0gbW9kZWxzLnB5OyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlEMjEyMDIyODBBRDQzMTBDMDBFRDc5QjYgLyog
RGF0ZUNvbnZlcnNpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IERhdGVDb252ZXJzaW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDIxMjAy
MjkwQUQ0MzEwQzAwRUQ3OUI2IC8qIERhdGVDb252ZXJzaW9uLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBEYXRlQ29udmVyc2lvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlFMTI0QThGNTBFNTU1Nzc1MDAzMDkxRjEgLyogT3BhcXVlSlNTdHJpbmcuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT3BhcXVlSlNTdHJpbmcuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTU1NzgsMTAgKzU1OTcsMTAgQEAKIAkJQTUzMjQzOEUxODU2
OTZDRTAwMkVENjkyIC8qIHNjcmlwdHMgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNo
aWxkcmVuID0gKAotCQkJCUE1MzI0MzhGMTg1Njk2RTYwMDJFRDY5MiAvKiBDb2RlR2VuZXJhdG9y
SW5zcGVjdG9yLnB5ICovLAotCQkJCUE1MzI0MzkwMTg1Njk2RTYwMDJFRDY5MiAvKiBDb2RlR2Vu
ZXJhdG9ySW5zcGVjdG9yU3RyaW5ncy5weSAqLywKKwkJCQlDNDcwM0NDMTE5Mjg0NEE0MDAxM0ZC
RUEgLyogY29kZWdlbiAqLywKIAkJCQlBNTg0MEUyNjE4N0M5ODA3MDA4NDNCMTAgLyogY3NzbWlu
LnB5ICovLAogCQkJCUE1MzI0MzkxMTg1Njk2RTYwMDJFRDY5MiAvKiBnZW5lcmF0ZS1jb21iaW5l
ZC1pbnNwZWN0b3ItanNvbi5weSAqLywKKwkJCQlDNDcwM0NCRjE5Mjg0NDk2MDAxM0ZCRUEgLyog
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5ICovLAogCQkJCUE1ODQwRTI4
MTg3Q0E1QjgwMDg0M0IxMCAvKiBpbmxpbmUtYW5kLW1pbmlmeS1zdHlsZXNoZWV0cy1hbmQtc2Ny
aXB0cy5weSAqLywKIAkJCQlBNTEzRTVDNDE4NUY5MkRDMDA3RTk1QUQgLyoganNtaW4ucHkgKi8s
CiAJCQkJQTUxM0U1QzUxODVGOTJGMDAwN0U5NUFEIC8qIHh4ZC5wbCAqLywKQEAgLTU2OTksNiAr
NTcxOCwyNCBAQAogCQkJcGF0aCA9IGJ1aWx0aW5zOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsKIAkJfTsKKwkJQzQ3MDNDQzExOTI4NDRBNDAwMTNGQkVBIC8qIGNvZGVnZW4gKi8gPSB7CisJ
CQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCUM0NzAzQ0MyMTkyODQ0Q0Mw
MDEzRkJFQSAvKiBfX2luaXRfXy5weSAqLywKKwkJCQlDNDcwM0NDMzE5Mjg0NENDMDAxM0ZCRUEg
LyogZ2VuZXJhdGVfYmFja2VuZF9jb21tYW5kcy5weSAqLywKKwkJCQlDNDcwM0NDNDE5Mjg0NEND
MDAxM0ZCRUEgLyogZ2VuZXJhdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weSAqLywKKwkJ
CQlDNDcwM0NDNTE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJhdGVfYmFja2VuZF9kaXNwYXRjaGVy
X2ltcGxlbWVudGF0aW9uLnB5ICovLAorCQkJCUM0NzAzQ0M2MTkyODQ0Q0MwMDEzRkJFQSAvKiBn
ZW5lcmF0ZV9mcm9udGVuZF9kaXNwYXRjaGVyX2hlYWRlci5weSAqLywKKwkJCQlDNDcwM0NDNzE5
Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJhdGVfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRh
dGlvbi5weSAqLywKKwkJCQlDNDcwM0NDODE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJhdGVfdHlw
ZV9idWlsZGVyX2hlYWRlci5weSAqLywKKwkJCQlDNDcwM0NDOTE5Mjg0NENDMDAxM0ZCRUEgLyog
Z2VuZXJhdGVfdHlwZV9idWlsZGVyX2ltcGxlbWVudGF0aW9uLnB5ICovLAorCQkJCUM0NzAzQ0NB
MTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0b3JfdGVtcGxhdGVzLnB5ICovLAorCQkJCUM0NzAz
Q0NCMTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0b3IucHkgKi8sCisJCQkJQzQ3MDNDQ0MxOTI4
NDRDQzAwMTNGQkVBIC8qIG1vZGVscy5weSAqLywKKwkJCSk7CisJCQlwYXRoID0gY29kZWdlbjsK
KwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CiAvKiBFbmQgUEJYR3JvdXAgc2VjdGlv
biAqLwogCiAvKiBCZWdpbiBQQlhIZWFkZXJzQnVpbGRQaGFzZSBzZWN0aW9uICovCkBAIC01OTg3
LDYgKzYwMjQsMTkgQEAKIAkJCQkyQUFCQ0RFNzE4RUYyOTQyMDAwMDIwOTYgLyogR0NMb2dnaW5n
LmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTUyNDhGOTE5MTQ0MkQ5MDBCN0ZERTQgLyogVmFyaWFi
bGVXYXRjaHBvaW50U2V0SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzJEQTc3ODMxOEUy
NTk5OTAwNjZGQ0I2IC8qIEhlYXBJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKKwkJCQlBNTMyNDM5
NDE4NTY5NzA5MDAyRUQ2OTIgLyogZ2VuZXJhdGUtY29tYmluZWQtaW5zcGVjdG9yLWpzb24ucHkg
aW4gSGVhZGVycyAqLywKKwkJCQlBNTg0MEUyNzE4N0M5ODFFMDA4NDNCMTAgLyogY3NzbWluLnB5
IGluIEhlYWRlcnMgKi8sCisJCQkJQzQ3MDNDRDMxOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRl
X3R5cGVfYnVpbGRlcl9oZWFkZXIucHkgaW4gSGVhZGVycyAqLywKKwkJCQlDNDcwM0NEMjE5Mjg0
NENDMDAxM0ZCRUEgLyogZ2VuZXJhdGVfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlv
bi5weSBpbiBIZWFkZXJzICovLAorCQkJCUM0NzAzQ0QxMTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5l
cmF0ZV9mcm9udGVuZF9kaXNwYXRjaGVyX2hlYWRlci5weSBpbiBIZWFkZXJzICovLAorCQkJCUM0
NzAzQ0Q1MTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0b3JfdGVtcGxhdGVzLnB5IGluIEhlYWRl
cnMgKi8sCisJCQkJQzQ3MDNDRDYxOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRvci5weSBpbiBI
ZWFkZXJzICovLAorCQkJCUM0NzAzQ0NGMTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0ZV9iYWNr
ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5IGluIEhlYWRlcnMgKi8sCisJCQkJQzQ3MDNDQzAxOTI4
NDQ5NjAwMTNGQkVBIC8qIGdlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weSBp
biBIZWFkZXJzICovLAorCQkJCUM0NzAzQ0QwMTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0ZV9i
YWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkgaW4gSGVhZGVycyAqLywKKwkJCQlD
NDcwM0NDRTE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJhdGVfYmFja2VuZF9jb21tYW5kcy5weSBp
biBIZWFkZXJzICovLAorCQkJCUM0NzAzQ0Q0MTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0ZV90
eXBlX2J1aWxkZXJfaW1wbGVtZW50YXRpb24ucHkgaW4gSGVhZGVycyAqLywKKwkJCQlDNDcwM0NE
NzE5Mjg0NENDMDAxM0ZCRUEgLyogbW9kZWxzLnB5IGluIEhlYWRlcnMgKi8sCiAJCQkJMkFBQ0U2
M0QxOENBNUEwMzAwRUQwMTkxIC8qIEdDQWN0aXZpdHlDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMkE4MzYzODYxOEQ3RDBFRTAwMDBFQkNDIC8qIEVkZW5HQ0FjdGl2aXR5Q2FsbGJhY2su
aCBpbiBIZWFkZXJzICovLAogCQkJCTJBODM2MzhBMThEN0QwRkUwMDAwRUJDQyAvKiBGdWxsR0NB
Y3Rpdml0eUNhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKQEAgLTYwNDYsOCArNjA5Niw2IEBACiAJ
CQkJMEZEOEEzMTQxN0Q0MzI2QzAwQ0EyQzQwIC8qIENvZGVCbG9ja1NldC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEY5NkVCQjMxNjY3NkVGNjAwOEJBREUzIC8qIENvZGVCbG9ja1dpdGhKSVRUeXBl
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzdGMTgyMjE2NDA4OEIyMDA2NDBBNDcgLyogQ29kZUNh
Y2hlLmggaW4gSGVhZGVycyAqLywKLQkJCQlBNTMyNDM5MjE4NTY5NzA5MDAyRUQ2OTIgLyogQ29k
ZUdlbmVyYXRvckluc3BlY3Rvci5weSBpbiBIZWFkZXJzICovLAotCQkJCUE1MzI0MzkzMTg1Njk3
MDkwMDJFRDY5MiAvKiBDb2RlR2VuZXJhdG9ySW5zcGVjdG9yU3RyaW5ncy5weSBpbiBIZWFkZXJz
ICovLAogCQkJCTg2RTExNkIxMEZFNzVBQzgwMEI1MTJCQyAvKiBDb2RlTG9jYXRpb24uaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGQkQ3RTY5MTQ0Nzk5OTYwMDQ4MTMxNSAvKiBDb2RlT3JpZ2luLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjIxQzI3RDE0QkU3MjdBMDBBREM2NEIgLyogQ29kZVNwZWNp
YWxpemF0aW9uS2luZC5oIGluIEhlYWRlcnMgKi8sCkBAIC02MDc4LDcgKzYxMjYsNiBAQAogCQkJ
CUMyMThEMTQwMTY1NUNGRDUwMDYyQkI4MSAvKiBDb3B5V29ya0xpc3QuaCBpbiBIZWFkZXJzICov
LAogCQkJCTJBNjgyOTVCMTg3NUY4MDUwMEI2QzNFMiAvKiBDb3B5V3JpdGVCYXJyaWVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQk1REU2RTVCMzBFMTcyOEVDMDAxODA0MDcgLyogY3JlYXRlX2hhc2hf
dGFibGUgaW4gSGVhZGVycyAqLywKLQkJCQlBNTg0MEUyNzE4N0M5ODFFMDA4NDNCMTAgLyogY3Nz
bWluLnB5IGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0MjZBNEIxNDYwQ0Q2RTAwMTMxRjhGIC8qIERh
dGFGb3JtYXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NkRGMTdCNkI1QUIwMEE3QUUzRiAv
KiBEYXRhVmlldy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNEMjAzNEEwRTE3MTM1RTAwMkM3RTgy
IC8qIERhdGVDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCkBAIC02MzE5LDcgKzYzNjYsNiBA
QAogCQkJCTBGMkI2NkFGMTdCNkI1NDUwMEE3QUUzRiAvKiBHQ0luY29taW5nUmVmQ291bnRlZFNl
dElubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyMjM5RDFCMTYyNjJCREQwMDVBQzVGRCAv
KiBHQ1RocmVhZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzIxMTIyRTIxNUREOUFCMzAwNzkwRTNB
IC8qIEdDVGhyZWFkU2hhcmVkRGF0YS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQTUzMjQzOTQxODU2
OTcwOTAwMkVENjkyIC8qIGdlbmVyYXRlLWNvbWJpbmVkLWluc3BlY3Rvci1qc29uLnB5IGluIEhl
YWRlcnMgKi8sCiAJCQkJMEYyQjY2RTAxN0I2QjVBQjAwQTdBRTNGIC8qIEdlbmVyaWNUeXBlZEFy
cmF5Vmlldy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxRkU1MUMxOTIyQTNCQzAwNjk4N0M1IC8q
IEFib3J0UmVhc29uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZFMTE3QjZCNUFCMDBBN0FF
M0YgLyogR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0NvbnNvbGVNZXNzYWdlLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvQ29uc29sZU1lc3NhZ2UuY3BwCmlu
ZGV4IDQwNzkwYmY1ZDllNTkxYmUwZTM1ZjYyYTQ1MTg3OGJjZDU3MmM3ZjYuLjAyMDNiYzFhOWY3
MzZiNDhmYzIxZWMxMWM4ZTNiNDk1MDlkMTA5NTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3IvQ29uc29sZU1lc3NhZ2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3IvQ29uc29sZU1lc3NhZ2UuY3BwCkBAIC0xMzEsNyArMTMxLDcgQEAg
dm9pZCBDb25zb2xlTWVzc2FnZTo6YXV0b2dlbmVyYXRlTWV0YWRhdGEoSlNDOjpFeGVjU3RhdGUq
IHN0YXRlKQogICAgIH0KIH0KIAotc3RhdGljIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNvbnNv
bGU6OkNvbnNvbGVNZXNzYWdlOjpTb3VyY2U6OkVudW0gbWVzc2FnZVNvdXJjZVZhbHVlKE1lc3Nh
Z2VTb3VyY2Ugc291cmNlKQorc3RhdGljIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNvbnNvbGU6
OkNvbnNvbGVNZXNzYWdlOjpTb3VyY2UgbWVzc2FnZVNvdXJjZVZhbHVlKE1lc3NhZ2VTb3VyY2Ug
c291cmNlKQogewogICAgIHN3aXRjaCAoc291cmNlKSB7CiAgICAgY2FzZSBNZXNzYWdlU291cmNl
OjpYTUw6IHJldHVybiBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDb25zb2xlOjpDb25zb2xlTWVz
c2FnZTo6U291cmNlOjpYTUw7CkBAIC0xNDgsNyArMTQ4LDcgQEAgc3RhdGljIEluc3BlY3Rvcjo6
VHlwZUJ1aWxkZXI6OkNvbnNvbGU6OkNvbnNvbGVNZXNzYWdlOjpTb3VyY2U6OkVudW0gbWVzc2Fn
ZVNvdXIKICAgICByZXR1cm4gSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q29uc29sZTo6Q29uc29s
ZU1lc3NhZ2U6OlNvdXJjZTo6T3RoZXI7CiB9CiAKLXN0YXRpYyBJbnNwZWN0b3I6OlR5cGVCdWls
ZGVyOjpDb25zb2xlOjpDb25zb2xlTWVzc2FnZTo6VHlwZTo6RW51bSBtZXNzYWdlVHlwZVZhbHVl
KE1lc3NhZ2VUeXBlIHR5cGUpCitzdGF0aWMgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q29uc29s
ZTo6Q29uc29sZU1lc3NhZ2U6OlR5cGUgbWVzc2FnZVR5cGVWYWx1ZShNZXNzYWdlVHlwZSB0eXBl
KQogewogICAgIHN3aXRjaCAodHlwZSkgewogICAgIGNhc2UgTWVzc2FnZVR5cGU6OkxvZzogcmV0
dXJuIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNvbnNvbGU6OkNvbnNvbGVNZXNzYWdlOjpUeXBl
OjpMb2c7CkBAIC0xNjgsNyArMTY4LDcgQEAgc3RhdGljIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6
OkNvbnNvbGU6OkNvbnNvbGVNZXNzYWdlOjpUeXBlOjpFbnVtIG1lc3NhZ2VUeXBlVmEKICAgICBy
ZXR1cm4gSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q29uc29sZTo6Q29uc29sZU1lc3NhZ2U6OlR5
cGU6OkxvZzsKIH0KIAotc3RhdGljIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNvbnNvbGU6OkNv
bnNvbGVNZXNzYWdlOjpMZXZlbDo6RW51bSBtZXNzYWdlTGV2ZWxWYWx1ZShNZXNzYWdlTGV2ZWwg
bGV2ZWwpCitzdGF0aWMgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q29uc29sZTo6Q29uc29sZU1l
c3NhZ2U6OkxldmVsIG1lc3NhZ2VMZXZlbFZhbHVlKE1lc3NhZ2VMZXZlbCBsZXZlbCkKIHsKICAg
ICBzd2l0Y2ggKGxldmVsKSB7CiAgICAgY2FzZSBNZXNzYWdlTGV2ZWw6OkxvZzogcmV0dXJuIElu
c3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNvbnNvbGU6OkNvbnNvbGVNZXNzYWdlOjpMZXZlbDo6TG9n
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNj
cmlwdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0
LmNwcAppbmRleCA3ODVkYWQwYWM4OGU0ZTcwZDk4NWY2MDk4ODA1ZWRjNDViYWY2OGYxLi5lNWEy
NjIyZGRlYjE0NTJmZTkyYmNhNDZhODA0NTliOTliYWQ0MDhhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0LmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0LmNwcApAQCAtMTAwLDEzICsx
MDAsMTMgQEAgdm9pZCBJbmplY3RlZFNjcmlwdDo6Z2V0RnVuY3Rpb25EZXRhaWxzKEVycm9yU3Ry
aW5nKiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJgogCiAgICAgUmVmUHRyPEluc3BlY3RvclZh
bHVlPiByZXN1bHRWYWx1ZTsKICAgICBtYWtlQ2FsbChmdW5jdGlvbiwgJnJlc3VsdFZhbHVlKTsK
LSAgICBpZiAoIXJlc3VsdFZhbHVlIHx8IHJlc3VsdFZhbHVlLT50eXBlKCkgIT0gSW5zcGVjdG9y
VmFsdWU6OlR5cGVPYmplY3QpIHsKKyAgICBpZiAoIXJlc3VsdFZhbHVlIHx8IHJlc3VsdFZhbHVl
LT50eXBlKCkgIT0gSW5zcGVjdG9yVmFsdWU6OlR5cGU6Ok9iamVjdCkgewogICAgICAgICBpZiAo
IXJlc3VsdFZhbHVlLT5hc1N0cmluZyhlcnJvclN0cmluZykpCiAgICAgICAgICAgICAqZXJyb3JT
dHJpbmcgPSBBU0NJSUxpdGVyYWwoIkludGVybmFsIGVycm9yIik7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICAqcmVzdWx0ID0gSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6RGVidWdnZXI6
OkZ1bmN0aW9uRGV0YWlsczo6cnVudGltZUNhc3QocmVzdWx0VmFsdWUpOworICAgICpyZXN1bHQg
PSBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpGdW5jdGlv
bkRldGFpbHM+OjpydW50aW1lQ2FzdChyZXN1bHRWYWx1ZSk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRT
Y3JpcHQ6OmdldFByb3BlcnRpZXMoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBjb25zdCBTdHJp
bmcmIG9iamVjdElkLCBib29sIG93blByb3BlcnRpZXMsIFJlZlB0cjxBcnJheTxJbnNwZWN0b3I6
OlR5cGVCdWlsZGVyOjpSdW50aW1lOjpQcm9wZXJ0eURlc2NyaXB0b3I+PiogcHJvcGVydGllcykK
QEAgLTExNywxMiArMTE3LDEyIEBAIHZvaWQgSW5qZWN0ZWRTY3JpcHQ6OmdldFByb3BlcnRpZXMo
RXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIG9iamVjCiAKICAgICBSZWZQ
dHI8SW5zcGVjdG9yVmFsdWU+IHJlc3VsdDsKICAgICBtYWtlQ2FsbChmdW5jdGlvbiwgJnJlc3Vs
dCk7Ci0gICAgaWYgKCFyZXN1bHQgfHwgcmVzdWx0LT50eXBlKCkgIT0gSW5zcGVjdG9yVmFsdWU6
OlR5cGVBcnJheSkgeworICAgIGlmICghcmVzdWx0IHx8IHJlc3VsdC0+dHlwZSgpICE9IEluc3Bl
Y3RvclZhbHVlOjpUeXBlOjpBcnJheSkgewogICAgICAgICAqZXJyb3JTdHJpbmcgPSBBU0NJSUxp
dGVyYWwoIkludGVybmFsIGVycm9yIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICAq
cHJvcGVydGllcyA9IEFycmF5PEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OlByb3Bl
cnR5RGVzY3JpcHRvcj46OnJ1bnRpbWVDYXN0KHJlc3VsdCk7CisgICAgKnByb3BlcnRpZXMgPSBC
aW5kaW5nVHJhaXRzPEFycmF5PEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OlByb3Bl
cnR5RGVzY3JpcHRvcj4+OjpydW50aW1lQ2FzdChyZXN1bHQpOwogfQogCiB2b2lkIEluamVjdGVk
U2NyaXB0OjpnZXRJbnRlcm5hbFByb3BlcnRpZXMoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBj
b25zdCBTdHJpbmcmIG9iamVjdElkLCBSZWZQdHI8QXJyYXk8SW5zcGVjdG9yOjpUeXBlQnVpbGRl
cjo6UnVudGltZTo6SW50ZXJuYWxQcm9wZXJ0eURlc2NyaXB0b3I+PiogcHJvcGVydGllcykKQEAg
LTEzMiwxMiArMTMyLDEyIEBAIHZvaWQgSW5qZWN0ZWRTY3JpcHQ6OmdldEludGVybmFsUHJvcGVy
dGllcyhFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluCiAKICAgICBSZWZQdHI8
SW5zcGVjdG9yVmFsdWU+IHJlc3VsdDsKICAgICBtYWtlQ2FsbChmdW5jdGlvbiwgJnJlc3VsdCk7
Ci0gICAgaWYgKCFyZXN1bHQgfHwgcmVzdWx0LT50eXBlKCkgIT0gSW5zcGVjdG9yVmFsdWU6OlR5
cGVBcnJheSkgeworICAgIGlmICghcmVzdWx0IHx8IHJlc3VsdC0+dHlwZSgpICE9IEluc3BlY3Rv
clZhbHVlOjpUeXBlOjpBcnJheSkgewogICAgICAgICAqZXJyb3JTdHJpbmcgPSBBU0NJSUxpdGVy
YWwoIkludGVybmFsIGVycm9yIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBSZWZQ
dHI8QXJyYXk8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UnVudGltZTo6SW50ZXJuYWxQcm9wZXJ0
eURlc2NyaXB0b3I+PiBhcnJheSA9IEFycmF5PEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlJ1bnRp
bWU6OkludGVybmFsUHJvcGVydHlEZXNjcmlwdG9yPjo6cnVudGltZUNhc3QocmVzdWx0KTsKKyAg
ICBhdXRvIGFycmF5ID0gQmluZGluZ1RyYWl0czxBcnJheTxJbnNwZWN0b3I6OlR5cGVCdWlsZGVy
OjpSdW50aW1lOjpJbnRlcm5hbFByb3BlcnR5RGVzY3JpcHRvcj4+OjpydW50aW1lQ2FzdChyZXN1
bHQpOwogICAgIGlmIChhcnJheS0+bGVuZ3RoKCkgPiAwKQogICAgICAgICAqcHJvcGVydGllcyA9
IGFycmF5OwogfQpAQCAtMTUyLDggKzE1Miw4IEBAIFBhc3NSZWZQdHI8QXJyYXk8SW5zcGVjdG9y
OjpUeXBlQnVpbGRlcjo6RGVidWdnZXI6OkNhbGxGcmFtZT4+IEluamVjdGVkU2NyaXB0Ojp3CiAg
ICAgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUgY2FsbEZyYW1lc1ZhbHVlID0gY2FsbEZ1bmN0aW9u
V2l0aEV2YWxFbmFibGVkKGZ1bmN0aW9uLCBoYWRFeGNlcHRpb24pOwogICAgIEFTU0VSVCghaGFk
RXhjZXB0aW9uKTsKICAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHJlc3VsdCA9IGNhbGxGcmFt
ZXNWYWx1ZS50b0luc3BlY3RvclZhbHVlKHNjcmlwdFN0YXRlKCkpOwotICAgIGlmIChyZXN1bHQt
PnR5cGUoKSA9PSBJbnNwZWN0b3JWYWx1ZTo6VHlwZUFycmF5KQotICAgICAgICByZXR1cm4gQXJy
YXk8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6RGVidWdnZXI6OkNhbGxGcmFtZT46OnJ1bnRpbWVD
YXN0KHJlc3VsdCk7CisgICAgaWYgKHJlc3VsdC0+dHlwZSgpID09IEluc3BlY3RvclZhbHVlOjpU
eXBlOjpBcnJheSkKKyAgICAgICAgcmV0dXJuIEJpbmRpbmdUcmFpdHM8QXJyYXk8SW5zcGVjdG9y
OjpUeXBlQnVpbGRlcjo6RGVidWdnZXI6OkNhbGxGcmFtZT4+OjpydW50aW1lQ2FzdChyZXN1bHQp
OwogCiAgICAgcmV0dXJuIEFycmF5PEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpD
YWxsRnJhbWU+OjpjcmVhdGUoKTsKIH0KQEAgLTE3Myw3ICsxNzMsNyBAQCBQYXNzUmVmUHRyPElu
c3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4gSW5qZWN0ZWRTY3Jp
cHQ6OndyYXBPYgogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IHJhd1Jlc3VsdCA9IHIudG9JbnNwZWN0b3JWYWx1ZShzY3JpcHRTdGF0ZSgpKS0+
YXNPYmplY3QoKTsKLSAgICByZXR1cm4gSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UnVudGltZTo6
UmVtb3RlT2JqZWN0OjpydW50aW1lQ2FzdChyYXdSZXN1bHQpOworICAgIHJldHVybiBCaW5kaW5n
VHJhaXRzPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD46OnJ1
bnRpbWVDYXN0KHJhd1Jlc3VsdCk7CiB9CiAKIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVp
bGRlcjo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiBJbmplY3RlZFNjcmlwdDo6d3JhcFRhYmxlKGNv
bnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiB0YWJsZSwgY29uc3QgRGVwcmVjYXRlZDo6U2Ny
aXB0VmFsdWUmIGNvbHVtbnMpIGNvbnN0CkBAIC0xOTMsNyArMTkzLDcgQEAgUGFzc1JlZlB0cjxJ
bnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+IEluamVjdGVkU2Ny
aXB0Ojp3cmFwVGEKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiByYXdSZXN1bHQgPSByLnRvSW5zcGVjdG9yVmFsdWUoc2NyaXB0U3RhdGUoKSkt
PmFzT2JqZWN0KCk7Ci0gICAgcmV0dXJuIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlJ1bnRpbWU6
OlJlbW90ZU9iamVjdDo6cnVudGltZUNhc3QocmF3UmVzdWx0KTsKKyAgICByZXR1cm4gQmluZGlu
Z1RyYWl0czxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+Ojpy
dW50aW1lQ2FzdChyYXdSZXN1bHQpOwogfQogCiBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSBJbmpl
Y3RlZFNjcmlwdDo6ZmluZE9iamVjdEJ5SWQoY29uc3QgU3RyaW5nJiBvYmplY3RJZCkgY29uc3QK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3Jp
cHRCYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3Jp
cHRCYXNlLmNwcAppbmRleCBkOTU2MWUxZjRhNzg2Zjk2NTUwZTIyZGFhMzQyMzdlYzkzYWVjZjFi
Li5mZTEwZDZjNGJmYmFmYmYyODZjYzNhOGQzNWM5YzU4ZGQ1NDI0YzFiIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0QmFzZS5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdEJhc2UuY3Bw
CkBAIC0xMjgsNyArMTI4LDcgQEAgdm9pZCBJbmplY3RlZFNjcmlwdEJhc2U6Om1ha2VFdmFsQ2Fs
bChFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIERlcHJlY2F0ZWQ6OlNjcmkKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAotICAgIGlmIChyZXN1bHQtPnR5cGUoKSA9PSBJbnNwZWN0b3JWYWx1ZTo6
VHlwZVN0cmluZykgeworICAgIGlmIChyZXN1bHQtPnR5cGUoKSA9PSBJbnNwZWN0b3JWYWx1ZTo6
VHlwZTo6U3RyaW5nKSB7CiAgICAgICAgIHJlc3VsdC0+YXNTdHJpbmcoZXJyb3JTdHJpbmcpOwog
ICAgICAgICBBU1NFUlQoZXJyb3JTdHJpbmctPmxlbmd0aCgpKTsKICAgICAgICAgcmV0dXJuOwpA
QCAtMTQ3LDcgKzE0Nyw3IEBAIHZvaWQgSW5qZWN0ZWRTY3JpcHRCYXNlOjptYWtlRXZhbENhbGwo
RXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBEZXByZWNhdGVkOjpTY3JpCiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKLSAgICAqb2JqZWN0UmVzdWx0ID0gVHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OlJl
bW90ZU9iamVjdDo6cnVudGltZUNhc3QocmVzdWx0T2JqKTsKKyAgICAqb2JqZWN0UmVzdWx0ID0g
QmluZGluZ1RyYWl0czxUeXBlQnVpbGRlcjo6UnVudGltZTo6UmVtb3RlT2JqZWN0Pjo6cnVudGlt
ZUNhc3QocmVzdWx0T2JqKTsKICAgICAqd2FzVGhyb3duID0gd2FzVGhyb3duVmFsOwogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0
TWFuYWdlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luamVjdGVkU2Ny
aXB0TWFuYWdlci5jcHAKaW5kZXggZWYwZDlhMzc0NzM0ZDI1NjRlYzBjODFiNjM4NGQ2YzdkMDM0
ZWExZC4uNDUxNzNmYzgzN2JhZTBlMjA2NDE3YzM1NTExMTkyZTU0NjYzOGNiOSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdE1hbmFnZXIu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRN
YW5hZ2VyLmNwcApAQCAtOTUsNyArOTUsNyBAQCBpbnQgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOjpp
bmplY3RlZFNjcmlwdElkRm9yKEV4ZWNTdGF0ZSogc2NyaXB0U3RhdGUpCiBJbmplY3RlZFNjcmlw
dCBJbmplY3RlZFNjcmlwdE1hbmFnZXI6OmluamVjdGVkU2NyaXB0Rm9yT2JqZWN0SWQoY29uc3Qg
U3RyaW5nJiBvYmplY3RJZCkKIHsKICAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHBhcnNlZE9i
amVjdElkID0gSW5zcGVjdG9yVmFsdWU6OnBhcnNlSlNPTihvYmplY3RJZCk7Ci0gICAgaWYgKHBh
cnNlZE9iamVjdElkICYmIHBhcnNlZE9iamVjdElkLT50eXBlKCkgPT0gSW5zcGVjdG9yVmFsdWU6
OlR5cGVPYmplY3QpIHsKKyAgICBpZiAocGFyc2VkT2JqZWN0SWQgJiYgcGFyc2VkT2JqZWN0SWQt
PnR5cGUoKSA9PSBJbnNwZWN0b3JWYWx1ZTo6VHlwZTo6T2JqZWN0KSB7CiAgICAgICAgIGxvbmcg
aW5qZWN0ZWRTY3JpcHRJZCA9IDA7CiAgICAgICAgIGJvb2wgc3VjY2VzcyA9IHBhcnNlZE9iamVj
dElkLT5hc09iamVjdCgpLT5nZXROdW1iZXIoQVNDSUlMaXRlcmFsKCJpbmplY3RlZFNjcmlwdElk
IiksICZpbmplY3RlZFNjcmlwdElkKTsKICAgICAgICAgaWYgKHN1Y2Nlc3MpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvclR5cGVCdWlsZGVyLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvclR5cGVCdWlsZGVyLmgK
aW5kZXggOGVhNzZlYzkwYzYwZTA3NzYxNzk1YzFjMTQ3OTUyZDQ3ODY4ZmU1OC4uNTM5Zjc4MjEy
MDAzZmY1NDAxZWNiNjM5ZGQ1YzNlMTFhZTFhYmI5MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JUeXBlQnVpbGRlci5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVHlwZUJ1aWxkZXIuaApAQCAtNjMsNTQg
KzYzLDYgQEAgcHJpdmF0ZToKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShPcHRPdXRwdXQpOwog
fTsKIAotCi0vLyBBIHNtYWxsIHRyYW5zaWVudCB3cmFwcGVyIGFyb3VuZCBpbnQgdHlwZSwgdGhh
dCBjYW4gYmUgdXNlZCBhcyBhIGZ1bmNpdG9uIHBhcmFtZXRlciB0eXBlCi0vLyBjbGV2ZXJseSBk
aXNhbGxvd2luZyBDKysgaW1wbGljaXQgY2FzdHMgZnJvbSBmbG9hdCBvciBkb3VibGUuCi1jbGFz
cyBFeGFjdGx5SW50IHsKLXB1YmxpYzoKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIEV4
YWN0bHlJbnQoVCB0KSA6IG1fdmFsdWUoY2FzdF90b19pbnQ8VD4odCkpIHsgfQotICAgIEV4YWN0
bHlJbnQoKSB7IH0KLQotICAgIG9wZXJhdG9yIGludCgpIHsgcmV0dXJuIG1fdmFsdWU7IH0KLQot
cHJpdmF0ZToKLSAgICBpbnQgbV92YWx1ZTsKLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0g
ICAgc3RhdGljIGludCBjYXN0X3RvX2ludChUKSB7IHJldHVybiBUOjpkZWZhdWx0X2Nhc2VfY2Fz
dF9pc19ub3Rfc3VwcG9ydGVkKCk7IH0KLX07Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBpbnQgRXhh
Y3RseUludDo6Y2FzdF90b19pbnQ8aW50PihpbnQgaSkgeyByZXR1cm4gaTsgfQotCi10ZW1wbGF0
ZTw+Ci1pbmxpbmUgaW50IEV4YWN0bHlJbnQ6OmNhc3RfdG9faW50PHVuc2lnbmVkIGludD4odW5z
aWduZWQgaW50IGkpIHsgcmV0dXJuIGk7IH0KLQotI2lmICFBU1NFUlRfRElTQUJMRUQKLWNsYXNz
IFJ1bnRpbWVDYXN0SGVscGVyIHsKLXB1YmxpYzoKLSAgICB0ZW1wbGF0ZTxJbnNwZWN0b3JWYWx1
ZTo6VHlwZSBUWVBFPgotICAgIHN0YXRpYyB2b2lkIGFzc2VydFR5cGUoSW5zcGVjdG9yVmFsdWUq
IHZhbHVlKQotICAgIHsKLSAgICAgICAgQVNTRVJUKHZhbHVlLT50eXBlKCkgPT0gVFlQRSk7Ci0g
ICAgfQotCi0gICAgc3RhdGljIHZvaWQgYXNzZXJ0QW55KEluc3BlY3RvclZhbHVlKikKLSAgICB7
Ci0gICAgfQotCi0gICAgc3RhdGljIHZvaWQgYXNzZXJ0SW50KEluc3BlY3RvclZhbHVlKiB2YWx1
ZSkKLSAgICB7Ci0gICAgICAgIGRvdWJsZSB2OwotICAgICAgICBib29sIGNhc3RSZXMgPSB2YWx1
ZS0+YXNOdW1iZXIoJnYpOwotICAgICAgICBBU1NFUlRfVU5VU0VEKGNhc3RSZXMsIGNhc3RSZXMp
OwotICAgICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8ZG91YmxlPihzdGF0aWNfY2FzdDxpbnQ+KHYp
KSA9PSB2KTsKLSAgICB9Ci19OwotI2VuZGlmCi0KLQogLy8gVGhpcyBjbGFzcyBwcm92aWRlcyAi
VHJhaXRzIiB0eXBlIGZvciB0aGUgaW5wdXQgdHlwZSBULiBJdCBpcyBwcm9ncmFtbWVkIHVzaW5n
IEMrKyB0ZW1wbGF0ZSBzcGVjaWFsaXphdGlvbgogLy8gdGVjaG5pcXVlLiBCeSBkZWZhdWx0IGl0
IHNpbXBseSB0YWtlcyAiSXRlbVRyYWl0cyIgdHlwZSBmcm9tIFQsIGJ1dCBpdCBkb2Vzbid0IHdv
cmsgd2l0aCB0aGUgYmFzZSB0eXBlcy4KIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CkBAIC0xNDQsMjkg
Kzk2LDYgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBBcnJh
eTxUPigpKTsKICAgICB9Ci0KLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxBcnJheTxUPj4gcnVudGlt
ZUNhc3QoUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gdmFsdWUpCi0gICAgewotICAgICAgICBS
ZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFycmF5OwotICAgICAgICBib29sIGNhc3RSZXMgPSB2YWx1
ZS0+YXNBcnJheSgmYXJyYXkpOwotICAgICAgICBBU1NFUlRfVU5VU0VEKGNhc3RSZXMsIGNhc3RS
ZXMpOwotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICAgICAgYXNzZXJ0Q29ycmVjdFZhbHVlKGFy
cmF5LmdldCgpKTsKLSNlbmRpZiAvLyAhQVNTRVJUX0RJU0FCTEVECi0gICAgICAgIENPTVBJTEVf
QVNTRVJUKHNpemVvZihBcnJheTxUPikgPT0gc2l6ZW9mKEluc3BlY3RvckFycmF5KSwgdHlwZV9j
YXN0X3Byb2JsZW0pOwotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QXJyYXk8VD4qPihzdGF0
aWNfY2FzdDxJbnNwZWN0b3JBcnJheUJhc2UqPihhcnJheS5nZXQoKSkpOwotICAgIH0KLQotI2lm
ICFBU1NFUlRfRElTQUJMRUQKLSAgICBzdGF0aWMgdm9pZCBhc3NlcnRDb3JyZWN0VmFsdWUoSW5z
cGVjdG9yVmFsdWUqIHZhbHVlKQotICAgIHsKLSAgICAgICAgUmVmUHRyPEluc3BlY3RvckFycmF5
PiBhcnJheTsKLSAgICAgICAgYm9vbCBjYXN0UmVzID0gdmFsdWUtPmFzQXJyYXkoJmFycmF5KTsK
LSAgICAgICAgQVNTRVJUX1VOVVNFRChjYXN0UmVzLCBjYXN0UmVzKTsKLSAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGFycmF5LT5sZW5ndGgoKTsgaSsrKQotICAgICAgICAgICAgQXJy
YXlJdGVtSGVscGVyPFQ+OjpUcmFpdHM6OnRlbXBsYXRlIGFzc2VydENvcnJlY3RWYWx1ZTxUPihh
cnJheS0+Z2V0KGkpLmdldCgpKTsKLSAgICB9Ci0jZW5kaWYgLy8gIUFTU0VSVF9ESVNBQkxFRAog
fTsKIAogc3RydWN0IFN0cnVjdEl0ZW1UcmFpdHMgewpAQCAtMTc0LDE0ICsxMDMsNiBAQCBzdHJ1
Y3QgU3RydWN0SXRlbVRyYWl0cyB7CiAgICAgewogICAgICAgICBhcnJheS0+cHVzaFZhbHVlKHZh
bHVlKTsKICAgICB9Ci0KLSNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgdGVtcGxhdGU8dHlwZW5h
bWUgVD4KLSAgICBzdGF0aWMgdm9pZCBhc3NlcnRDb3JyZWN0VmFsdWUoSW5zcGVjdG9yVmFsdWUq
IHZhbHVlKQotICAgIHsKLSAgICAgICAgVDo6YXNzZXJ0Q29ycmVjdFZhbHVlKHZhbHVlKTsKLSAg
ICB9Ci0jZW5kaWYgLy8gIUFTU0VSVF9ESVNBQkxFRAogfTsKIAogdGVtcGxhdGU8PgpAQCAtMTkx
LDE0ICsxMTIsNiBAQCBzdHJ1Y3QgQXJyYXlJdGVtSGVscGVyPFN0cmluZz4gewogICAgICAgICB7
CiAgICAgICAgICAgICBhcnJheS0+cHVzaFN0cmluZyh2YWx1ZSk7CiAgICAgICAgIH0KLQotI2lm
ICFBU1NFUlRfRElTQUJMRUQKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICAgICAg
c3RhdGljIHZvaWQgYXNzZXJ0Q29ycmVjdFZhbHVlKEluc3BlY3RvclZhbHVlKiB2YWx1ZSkKLSAg
ICAgICAgewotICAgICAgICAgICAgUnVudGltZUNhc3RIZWxwZXI6OmFzc2VydFR5cGU8SW5zcGVj
dG9yVmFsdWU6OlR5cGVTdHJpbmc+KHZhbHVlKTsKLSAgICAgICAgfQotI2VuZGlmIC8vICFBU1NF
UlRfRElTQUJMRUQKICAgICB9OwogfTsKIApAQCAtMjA5LDE0ICsxMjIsNiBAQCBzdHJ1Y3QgQXJy
YXlJdGVtSGVscGVyPGludD4gewogICAgICAgICB7CiAgICAgICAgICAgICBhcnJheS0+cHVzaElu
dCh2YWx1ZSk7CiAgICAgICAgIH0KLQotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVD4KLSAgICAgICAgc3RhdGljIHZvaWQgYXNzZXJ0Q29ycmVjdFZhbHVl
KEluc3BlY3RvclZhbHVlKiB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgUnVudGltZUNh
c3RIZWxwZXI6OmFzc2VydEludCh2YWx1ZSk7Ci0gICAgICAgIH0KLSNlbmRpZiAvLyAhQVNTRVJU
X0RJU0FCTEVECiAgICAgfTsKIH07CiAKQEAgLTIyNywxNCArMTMyLDYgQEAgc3RydWN0IEFycmF5
SXRlbUhlbHBlcjxkb3VibGU+IHsKICAgICAgICAgewogICAgICAgICAgICAgYXJyYXktPnB1c2hO
dW1iZXIodmFsdWUpOwogICAgICAgICB9Ci0KLSNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgICAgIHN0YXRpYyB2b2lkIGFzc2VydENvcnJlY3RW
YWx1ZShJbnNwZWN0b3JWYWx1ZSogdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFJ1bnRp
bWVDYXN0SGVscGVyOjphc3NlcnRUeXBlPEluc3BlY3RvclZhbHVlOjpUeXBlTnVtYmVyPih2YWx1
ZSk7Ci0gICAgICAgIH0KLSNlbmRpZiAvLyAhQVNTRVJUX0RJU0FCTEVECiAgICAgfTsKIH07CiAK
QEAgLTI0NSwxNCArMTQyLDYgQEAgc3RydWN0IEFycmF5SXRlbUhlbHBlcjxib29sPiB7CiAgICAg
ICAgIHsKICAgICAgICAgICAgIGFycmF5LT5wdXNoQm9vbGVhbih2YWx1ZSk7CiAgICAgICAgIH0K
LQotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAg
ICAgICAgc3RhdGljIHZvaWQgYXNzZXJ0Q29ycmVjdFZhbHVlKEluc3BlY3RvclZhbHVlKiB2YWx1
ZSkKLSAgICAgICAgewotICAgICAgICAgICAgUnVudGltZUNhc3RIZWxwZXI6OmFzc2VydFR5cGU8
SW5zcGVjdG9yVmFsdWU6OlR5cGVCb29sZWFuPih2YWx1ZSk7Ci0gICAgICAgIH0KLSNlbmRpZiAv
LyAhQVNTRVJUX0RJU0FCTEVECiAgICAgfTsKIH07CiAKQEAgLTI2MywxNCArMTUyLDYgQEAgc3Ry
dWN0IEFycmF5SXRlbUhlbHBlcjxJbnNwZWN0b3JWYWx1ZT4gewogICAgICAgICB7CiAgICAgICAg
ICAgICBhcnJheS0+cHVzaFZhbHVlKHZhbHVlKTsKICAgICAgICAgfQotCi0jaWYgIUFTU0VSVF9E
SVNBQkxFRAotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgICAgICBzdGF0aWMgdm9p
ZCBhc3NlcnRDb3JyZWN0VmFsdWUoSW5zcGVjdG9yVmFsdWUqIHZhbHVlKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBSdW50aW1lQ2FzdEhlbHBlcjo6YXNzZXJ0QW55KHZhbHVlKTsKLSAgICAgICAg
fQotI2VuZGlmIC8vICFBU1NFUlRfRElTQUJMRUQKICAgICB9OwogfTsKIApAQCAtMjgxLDE0ICsx
NjIsNiBAQCBzdHJ1Y3QgQXJyYXlJdGVtSGVscGVyPEluc3BlY3Rvck9iamVjdD4gewogICAgICAg
ICB7CiAgICAgICAgICAgICBhcnJheS0+cHVzaFZhbHVlKHZhbHVlKTsKICAgICAgICAgfQotCi0j
aWYgIUFTU0VSVF9ESVNBQkxFRAotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgICAg
ICBzdGF0aWMgdm9pZCBhc3NlcnRDb3JyZWN0VmFsdWUoSW5zcGVjdG9yVmFsdWUqIHZhbHVlKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBSdW50aW1lQ2FzdEhlbHBlcjo6YXNzZXJ0VHlwZTxJbnNw
ZWN0b3JWYWx1ZTo6VHlwZU9iamVjdD4odmFsdWUpOwotICAgICAgICB9Ci0jZW5kaWYgLy8gIUFT
U0VSVF9ESVNBQkxFRAogICAgIH07CiB9OwogCkBAIC0yOTksMTQgKzE3Miw2IEBAIHN0cnVjdCBB
cnJheUl0ZW1IZWxwZXI8SW5zcGVjdG9yQXJyYXk+IHsKICAgICAgICAgewogICAgICAgICAgICAg
YXJyYXktPnB1c2hBcnJheSh2YWx1ZSk7CiAgICAgICAgIH0KLQotI2lmICFBU1NFUlRfRElTQUJM
RUQKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICAgICAgc3RhdGljIHZvaWQgYXNz
ZXJ0Q29ycmVjdFZhbHVlKEluc3BlY3RvclZhbHVlKiB2YWx1ZSkKLSAgICAgICAgewotICAgICAg
ICAgICAgUnVudGltZUNhc3RIZWxwZXI6OmFzc2VydFR5cGU8SW5zcGVjdG9yVmFsdWU6OlR5cGVB
cnJheT4odmFsdWUpOwotICAgICAgICB9Ci0jZW5kaWYgLy8gIUFTU0VSVF9ESVNBQkxFRAogICAg
IH07CiB9OwogCkBAIC0zMTcsMTkgKzE4Miw5MiBAQCBzdHJ1Y3QgQXJyYXlJdGVtSGVscGVyPFR5
cGVCdWlsZGVyOjpBcnJheTxUPj4gewogICAgICAgICB7CiAgICAgICAgICAgICBhcnJheS0+cHVz
aFZhbHVlKHZhbHVlKTsKICAgICAgICAgfQorICAgIH07Cit9OworCisvLyBIZWxwZXIgbWV0aG9k
cyBmb3IgVHlwZUJ1aWxkZXIgYW5kIG90aGVyIEluc3BlY3RvciB0eXBlcyBhcmUgcHJvdmlkZWQg
YnkKKy8vIHNwZWNpYWxpemF0aW9ucyBvZiBCaW5kaW5nVHJhaXRzPFQ+LiBTb21lIGFyZSBnZW5l
cmF0ZWQgZm9yIHByb3RvY29sIHR5cGVzLgogCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3RydWN0
IEJpbmRpbmdUcmFpdHMgeworICAgIHR5cGVkZWYgVCBCaW5kaW5nVHlwZTsKKworICAgIHN0YXRp
YyBJbnNwZWN0b3JWYWx1ZTo6VHlwZSB0eXBlVGFnKCk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8
VD4gcnVudGltZUNhc3QoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+KTsKICNpZiAhQVNTRVJU
X0RJU0FCTEVECi0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFM+Ci0gICAgICAgIHN0YXRpYyB2
b2lkIGFzc2VydENvcnJlY3RWYWx1ZShJbnNwZWN0b3JWYWx1ZSogdmFsdWUpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIFM6OmFzc2VydENvcnJlY3RWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIH0KKyAg
ICBzdGF0aWMgdm9pZCBhc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShJbnNwZWN0b3JWYWx1ZSop
OworI2VuZGlmIC8vICFBU1NFUlRfRElTQUJMRUQKK307CisKK3RlbXBsYXRlPEluc3BlY3RvclZh
bHVlOjpUeXBlIFRZUEU+CitzdHJ1Y3QgUHJpbWl0aXZlQmluZGluZ1RyYWl0cyB7CisjaWYgIUFT
U0VSVF9ESVNBQkxFRAorICAgIHN0YXRpYyB2b2lkIGFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBl
KEluc3BlY3RvclZhbHVlKiB2YWx1ZSkKKyAgICB7CisgICAgICAgIEFTU0VSVCh2YWx1ZS0+dHlw
ZSgpID09IFRZUEUpOworICAgIH0KKyNlbmRpZiAvLyAhQVNTRVJUX0RJU0FCTEVECit9OworCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3RydWN0IEJpbmRpbmdUcmFpdHM8VHlwZUJ1aWxkZXI6OkFy
cmF5PFQ+PiB7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8QXJyYXk8VD4+IHJ1bnRpbWVDYXN0KFBh
c3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHZhbHVlKQorICAgIHsKKyAgICAgICAgUmVmUHRyPElu
c3BlY3RvckFycmF5PiBhcnJheTsKKyAgICAgICAgYm9vbCBjYXN0UmVzID0gdmFsdWUtPmFzQXJy
YXkoJmFycmF5KTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChjYXN0UmVzLCBjYXN0UmVzKTsKKyNp
ZiAhQVNTRVJUX0RJU0FCTEVECisgICAgICAgIGFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKGFy
cmF5LmdldCgpKTsKKyNlbmRpZiAvLyAhQVNTRVJUX0RJU0FCTEVECisgICAgICAgIENPTVBJTEVf
QVNTRVJUKHNpemVvZihBcnJheTxUPikgPT0gc2l6ZW9mKEluc3BlY3RvckFycmF5KSwgdHlwZV9j
YXN0X3Byb2JsZW0pOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QXJyYXk8VD4qPihzdGF0
aWNfY2FzdDxJbnNwZWN0b3JBcnJheUJhc2UqPihhcnJheS5nZXQoKSkpOworICAgIH0KKworI2lm
ICFBU1NFUlRfRElTQUJMRUQKKyAgICBzdGF0aWMgdm9pZCBhc3NlcnRWYWx1ZUhhc0V4cGVjdGVk
VHlwZShJbnNwZWN0b3JWYWx1ZSogdmFsdWUpCisgICAgeworICAgICAgICBSZWZQdHI8SW5zcGVj
dG9yQXJyYXk+IGFycmF5OworICAgICAgICBib29sIGNhc3RSZXMgPSB2YWx1ZS0+YXNBcnJheSgm
YXJyYXkpOworICAgICAgICBBU1NFUlRfVU5VU0VEKGNhc3RSZXMsIGNhc3RSZXMpOworICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXJyYXktPmxlbmd0aCgpOyBpKyspCisgICAgICAg
ICAgICBCaW5kaW5nVHJhaXRzPFQ+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShhcnJheS0+
Z2V0KGkpLmdldCgpKTsKKyAgICB9CisjZW5kaWYgLy8gIUFTU0VSVF9ESVNBQkxFRAorfTsKKwor
dGVtcGxhdGU8Pgorc3RydWN0IEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yVmFsdWU+IHsKKyNpZiAh
QVNTRVJUX0RJU0FCTEVECisgICAgc3RhdGljIHZvaWQgYXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5
cGUoSW5zcGVjdG9yVmFsdWUqKQorICAgIHsKKyAgICB9CisjZW5kaWYgLy8gIUFTU0VSVF9ESVNB
QkxFRAorfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQmluZGluZ1RyYWl0czxJbnNwZWN0b3JBcnJh
eT4gOiBwdWJsaWMgUHJpbWl0aXZlQmluZGluZ1RyYWl0czxJbnNwZWN0b3JWYWx1ZTo6VHlwZTo6
QXJyYXk+IHsgfTsKK3RlbXBsYXRlPD4gc3RydWN0IEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yT2Jq
ZWN0PiA6IHB1YmxpYyBQcmltaXRpdmVCaW5kaW5nVHJhaXRzPEluc3BlY3RvclZhbHVlOjpUeXBl
OjpPYmplY3Q+IHsgfTsKK3RlbXBsYXRlPD4gc3RydWN0IEJpbmRpbmdUcmFpdHM8U3RyaW5nPiA6
IHB1YmxpYyBQcmltaXRpdmVCaW5kaW5nVHJhaXRzPEluc3BlY3RvclZhbHVlOjpUeXBlOjpTdHJp
bmc+IHsgfTsKK3RlbXBsYXRlPD4gc3RydWN0IEJpbmRpbmdUcmFpdHM8Ym9vbD4gOiBwdWJsaWMg
UHJpbWl0aXZlQmluZGluZ1RyYWl0czxJbnNwZWN0b3JWYWx1ZTo6VHlwZTo6Qm9vbGVhbj4geyB9
OwordGVtcGxhdGU8PiBzdHJ1Y3QgQmluZGluZ1RyYWl0czxkb3VibGU+IDogcHVibGljIFByaW1p
dGl2ZUJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yVmFsdWU6OlR5cGU6Ok51bWJlcj4geyB9OworCisv
LyBGSVhNRTogQWRkIGFuIEluc3BlY3Rvcjo6VHlwZSB0YWcgZm9yIGludCBzbyB3ZSBjYW4gcmVt
b3ZlIHRoaXMgc3BlY2lhbCBjYXNlLgordGVtcGxhdGU8Pgorc3RydWN0IEJpbmRpbmdUcmFpdHM8
aW50PiB7CisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgIHN0YXRpYyB2b2lkIGFzc2VydFZhbHVl
SGFzRXhwZWN0ZWRUeXBlKEluc3BlY3RvclZhbHVlKiB2YWx1ZSkKKyAgICB7CisgICAgICAgIGRv
dWJsZSB2OworICAgICAgICBib29sIGNhc3RSZXMgPSB2YWx1ZS0+YXNOdW1iZXIoJnYpOworICAg
ICAgICBBU1NFUlRfVU5VU0VEKGNhc3RSZXMsIGNhc3RSZXMpOworICAgICAgICBBU1NFUlQoc3Rh
dGljX2Nhc3Q8ZG91YmxlPihzdGF0aWNfY2FzdDxpbnQ+KHYpKSA9PSB2KTsKKyAgICB9CiAjZW5k
aWYgLy8gIUFTU0VSVF9ESVNBQkxFRAotICAgIH07CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBUeXBl
QnVpbGRlcgogCit1c2luZyBUeXBlQnVpbGRlcjo6QmluZGluZ1RyYWl0czsKKwogfSAvLyBuYW1l
c3BhY2UgSW5zcGVjdG9yCiAKICNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuY3BwCmluZGV4
IDE5MmZiNmM5ZDkwOTI0ZTYxN2M1ZDMyYzVkMmUzYmI5ZmNjZDNlMWEuLmUyZDAzNWRjMDlhMWJi
ZDg1ZjE3YWEwMTA4ZTIwMTg2MTVmOWEyZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5jcHAKQEAgLTU3OSwxMyArNTc5LDEzIEBA
IFN0cmluZyBJbnNwZWN0b3JWYWx1ZTo6dG9KU09OU3RyaW5nKCkgY29uc3QKIAogdm9pZCBJbnNw
ZWN0b3JWYWx1ZTo6d3JpdGVKU09OKFN0cmluZ0J1aWxkZXIqIG91dHB1dCkgY29uc3QKIHsKLSAg
ICBBU1NFUlQobV90eXBlID09IFR5cGVOdWxsKTsKKyAgICBBU1NFUlQobV90eXBlID09IFR5cGU6
Ok51bGwpOwogICAgIG91dHB1dC0+YXBwZW5kKG51bGxTdHJpbmcsIDQpOwogfQogCiBib29sIElu
c3BlY3RvckJhc2ljVmFsdWU6OmFzQm9vbGVhbihib29sKiBvdXRwdXQpIGNvbnN0CiB7Ci0gICAg
aWYgKHR5cGUoKSAhPSBUeXBlQm9vbGVhbikKKyAgICBpZiAodHlwZSgpICE9IFR5cGU6OkJvb2xl
YW4pCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAqb3V0cHV0ID0gbV9ib29sVmFsdWU7CiAg
ICAgcmV0dXJuIHRydWU7CkBAIC01OTMsNyArNTkzLDcgQEAgYm9vbCBJbnNwZWN0b3JCYXNpY1Zh
bHVlOjphc0Jvb2xlYW4oYm9vbCogb3V0cHV0KSBjb25zdAogCiBib29sIEluc3BlY3RvckJhc2lj
VmFsdWU6OmFzTnVtYmVyKGRvdWJsZSogb3V0cHV0KSBjb25zdAogewotICAgIGlmICh0eXBlKCkg
IT0gVHlwZU51bWJlcikKKyAgICBpZiAodHlwZSgpICE9IFR5cGU6Ok51bWJlcikKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICpvdXRwdXQgPSBtX2RvdWJsZVZhbHVlOwogICAgIHJldHVybiB0
cnVlOwpAQCAtNjAxLDcgKzYwMSw3IEBAIGJvb2wgSW5zcGVjdG9yQmFzaWNWYWx1ZTo6YXNOdW1i
ZXIoZG91YmxlKiBvdXRwdXQpIGNvbnN0CiAKIGJvb2wgSW5zcGVjdG9yQmFzaWNWYWx1ZTo6YXNO
dW1iZXIoZmxvYXQqIG91dHB1dCkgY29uc3QKIHsKLSAgICBpZiAodHlwZSgpICE9IFR5cGVOdW1i
ZXIpCisgICAgaWYgKHR5cGUoKSAhPSBUeXBlOjpOdW1iZXIpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAqb3V0cHV0ID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fZG91YmxlVmFsdWUpOwogICAg
IHJldHVybiB0cnVlOwpAQCAtNjA5LDcgKzYwOSw3IEBAIGJvb2wgSW5zcGVjdG9yQmFzaWNWYWx1
ZTo6YXNOdW1iZXIoZmxvYXQqIG91dHB1dCkgY29uc3QKIAogYm9vbCBJbnNwZWN0b3JCYXNpY1Zh
bHVlOjphc051bWJlcihpbnQqIG91dHB1dCkgY29uc3QKIHsKLSAgICBpZiAodHlwZSgpICE9IFR5
cGVOdW1iZXIpCisgICAgaWYgKHR5cGUoKSAhPSBUeXBlOjpOdW1iZXIpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAqb3V0cHV0ID0gc3RhdGljX2Nhc3Q8aW50PihtX2RvdWJsZVZhbHVlKTsK
ICAgICByZXR1cm4gdHJ1ZTsKQEAgLTYxNyw3ICs2MTcsNyBAQCBib29sIEluc3BlY3RvckJhc2lj
VmFsdWU6OmFzTnVtYmVyKGludCogb3V0cHV0KSBjb25zdAogCiBib29sIEluc3BlY3RvckJhc2lj
VmFsdWU6OmFzTnVtYmVyKHVuc2lnbmVkKiBvdXRwdXQpIGNvbnN0CiB7Ci0gICAgaWYgKHR5cGUo
KSAhPSBUeXBlTnVtYmVyKQorICAgIGlmICh0eXBlKCkgIT0gVHlwZTo6TnVtYmVyKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgKm91dHB1dCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2Rv
dWJsZVZhbHVlKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTYyNSw3ICs2MjUsNyBAQCBib29sIElu
c3BlY3RvckJhc2ljVmFsdWU6OmFzTnVtYmVyKHVuc2lnbmVkKiBvdXRwdXQpIGNvbnN0CiAKIGJv
b2wgSW5zcGVjdG9yQmFzaWNWYWx1ZTo6YXNOdW1iZXIobG9uZyogb3V0cHV0KSBjb25zdAogewot
ICAgIGlmICh0eXBlKCkgIT0gVHlwZU51bWJlcikKKyAgICBpZiAodHlwZSgpICE9IFR5cGU6Ok51
bWJlcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICpvdXRwdXQgPSBzdGF0aWNfY2FzdDxs
b25nPihtX2RvdWJsZVZhbHVlKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTYzMyw3ICs2MzMsNyBA
QCBib29sIEluc3BlY3RvckJhc2ljVmFsdWU6OmFzTnVtYmVyKGxvbmcqIG91dHB1dCkgY29uc3QK
IAogYm9vbCBJbnNwZWN0b3JCYXNpY1ZhbHVlOjphc051bWJlcihsb25nIGxvbmcqIG91dHB1dCkg
Y29uc3QKIHsKLSAgICBpZiAodHlwZSgpICE9IFR5cGVOdW1iZXIpCisgICAgaWYgKHR5cGUoKSAh
PSBUeXBlOjpOdW1iZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAqb3V0cHV0ID0gc3Rh
dGljX2Nhc3Q8bG9uZyBsb25nPihtX2RvdWJsZVZhbHVlKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAg
LTY0MSw3ICs2NDEsNyBAQCBib29sIEluc3BlY3RvckJhc2ljVmFsdWU6OmFzTnVtYmVyKGxvbmcg
bG9uZyogb3V0cHV0KSBjb25zdAogCiBib29sIEluc3BlY3RvckJhc2ljVmFsdWU6OmFzTnVtYmVy
KHVuc2lnbmVkIGxvbmcqIG91dHB1dCkgY29uc3QKIHsKLSAgICBpZiAodHlwZSgpICE9IFR5cGVO
dW1iZXIpCisgICAgaWYgKHR5cGUoKSAhPSBUeXBlOjpOdW1iZXIpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAqb3V0cHV0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4obV9kb3VibGVW
YWx1ZSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC02NDksNyArNjQ5LDcgQEAgYm9vbCBJbnNwZWN0
b3JCYXNpY1ZhbHVlOjphc051bWJlcih1bnNpZ25lZCBsb25nKiBvdXRwdXQpIGNvbnN0CiAKIGJv
b2wgSW5zcGVjdG9yQmFzaWNWYWx1ZTo6YXNOdW1iZXIodW5zaWduZWQgbG9uZyBsb25nKiBvdXRw
dXQpIGNvbnN0CiB7Ci0gICAgaWYgKHR5cGUoKSAhPSBUeXBlTnVtYmVyKQorICAgIGlmICh0eXBl
KCkgIT0gVHlwZTo6TnVtYmVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgKm91dHB1dCA9
IHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4obV9kb3VibGVWYWx1ZSk7CiAgICAgcmV0
dXJuIHRydWU7CkBAIC02NTcsMTMgKzY1NywxMyBAQCBib29sIEluc3BlY3RvckJhc2ljVmFsdWU6
OmFzTnVtYmVyKHVuc2lnbmVkIGxvbmcgbG9uZyogb3V0cHV0KSBjb25zdAogCiB2b2lkIEluc3Bl
Y3RvckJhc2ljVmFsdWU6OndyaXRlSlNPTihTdHJpbmdCdWlsZGVyKiBvdXRwdXQpIGNvbnN0CiB7
Ci0gICAgQVNTRVJUKHR5cGUoKSA9PSBUeXBlQm9vbGVhbiB8fCB0eXBlKCkgPT0gVHlwZU51bWJl
cik7Ci0gICAgaWYgKHR5cGUoKSA9PSBUeXBlQm9vbGVhbikgeworICAgIEFTU0VSVCh0eXBlKCkg
PT0gVHlwZTo6Qm9vbGVhbiB8fCB0eXBlKCkgPT0gVHlwZTo6TnVtYmVyKTsKKyAgICBpZiAodHlw
ZSgpID09IFR5cGU6OkJvb2xlYW4pIHsKICAgICAgICAgaWYgKG1fYm9vbFZhbHVlKQogICAgICAg
ICAgICAgb3V0cHV0LT5hcHBlbmQodHJ1ZVN0cmluZywgNCk7CiAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgIG91dHB1dC0+YXBwZW5kKGZhbHNlU3RyaW5nLCA1KTsKLSAgICB9IGVsc2UgaWYgKHR5
cGUoKSA9PSBUeXBlTnVtYmVyKSB7CisgICAgfSBlbHNlIGlmICh0eXBlKCkgPT0gVHlwZTo6TnVt
YmVyKSB7CiAgICAgICAgIE51bWJlclRvTFN0cmluZ0J1ZmZlciBidWZmZXI7CiAgICAgICAgIGlm
ICghc3RkOjppc2Zpbml0ZShtX2RvdWJsZVZhbHVlKSkgewogICAgICAgICAgICAgb3V0cHV0LT5h
cHBlbmQobnVsbFN0cmluZywgNCk7CkBAIC02OTMsNyArNjkzLDcgQEAgYm9vbCBJbnNwZWN0b3JT
dHJpbmc6OmFzU3RyaW5nKFN0cmluZyogb3V0cHV0KSBjb25zdAogCiB2b2lkIEluc3BlY3RvclN0
cmluZzo6d3JpdGVKU09OKFN0cmluZ0J1aWxkZXIqIG91dHB1dCkgY29uc3QKIHsKLSAgICBBU1NF
UlQodHlwZSgpID09IFR5cGVTdHJpbmcpOworICAgIEFTU0VSVCh0eXBlKCkgPT0gVHlwZTo6U3Ry
aW5nKTsKICAgICBkb3VibGVRdW90ZVN0cmluZyhtX3N0cmluZ1ZhbHVlLCBvdXRwdXQpOwogfQog
CkBAIC03ODYsNyArNzg2LDcgQEAgdm9pZCBJbnNwZWN0b3JPYmplY3RCYXNlOjp3cml0ZUpTT04o
U3RyaW5nQnVpbGRlciogb3V0cHV0KSBjb25zdAogfQogCiBJbnNwZWN0b3JPYmplY3RCYXNlOjpJ
bnNwZWN0b3JPYmplY3RCYXNlKCkKLSAgICA6IEluc3BlY3RvclZhbHVlKFR5cGVPYmplY3QpCisg
ICAgOiBJbnNwZWN0b3JWYWx1ZShUeXBlOjpPYmplY3QpCiAgICAgLCBtX2RhdGEoKQogICAgICwg
bV9vcmRlcigpCiB7CkBAIC04MjEsNyArODIxLDcgQEAgdm9pZCBJbnNwZWN0b3JBcnJheUJhc2U6
OndyaXRlSlNPTihTdHJpbmdCdWlsZGVyKiBvdXRwdXQpIGNvbnN0CiB9CiAKIEluc3BlY3RvckFy
cmF5QmFzZTo6SW5zcGVjdG9yQXJyYXlCYXNlKCkKLSAgICA6IEluc3BlY3RvclZhbHVlKFR5cGVB
cnJheSkKKyAgICA6IEluc3BlY3RvclZhbHVlKFR5cGU6OkFycmF5KQogICAgICwgbV9kYXRhKCkK
IHsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yVmFsdWVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZh
bHVlcy5oCmluZGV4IDNiODYxNjY0ZGEzMzc5ZGViNTY4OWJjMDAxMzRkZTI2ZWJhNjczZGEuLjk3
Y2I4OGJmMWNjMzllMTZjYzc1OTE5ZTNhOGYyZTgwYjU5NzM2ZjAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaApAQCAtNDEsMjkgKzQx
LDMyIEBACiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAogY2xhc3MgSW5zcGVjdG9yQXJyYXk7Citj
bGFzcyBJbnNwZWN0b3JBcnJheUJhc2U7CiBjbGFzcyBJbnNwZWN0b3JPYmplY3Q7CitjbGFzcyBJ
bnNwZWN0b3JPYmplY3RCYXNlOwogCiBjbGFzcyBKU19FWFBPUlRfUFJJVkFURSBJbnNwZWN0b3JW
YWx1ZSA6IHB1YmxpYyBSZWZDb3VudGVkPEluc3BlY3RvclZhbHVlPiB7CiBwdWJsaWM6CiAgICAg
c3RhdGljIGNvbnN0IGludCBtYXhEZXB0aCA9IDEwMDA7CiAKLSAgICBJbnNwZWN0b3JWYWx1ZSgp
IDogbV90eXBlKFR5cGVOdWxsKSB7IH0KKyAgICBJbnNwZWN0b3JWYWx1ZSgpCisgICAgICAgIDog
bV90eXBlKFR5cGU6Ok51bGwpIHsgfQogICAgIHZpcnR1YWwgfkluc3BlY3RvclZhbHVlKCkgeyB9
CiAKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gbnVsbCgpOwogCi0gICAg
dHlwZWRlZiBlbnVtIHsKLSAgICAgICAgVHlwZU51bGwgPSAwLAotICAgICAgICBUeXBlQm9vbGVh
biwKLSAgICAgICAgVHlwZU51bWJlciwKLSAgICAgICAgVHlwZVN0cmluZywKLSAgICAgICAgVHlw
ZU9iamVjdCwKLSAgICAgICAgVHlwZUFycmF5Ci0gICAgfSBUeXBlOworICAgIGVudW0gY2xhc3Mg
VHlwZSB7CisgICAgICAgIE51bGwgPSAwLAorICAgICAgICBCb29sZWFuLAorICAgICAgICBOdW1i
ZXIsCisgICAgICAgIFN0cmluZywKKyAgICAgICAgT2JqZWN0LAorICAgICAgICBBcnJheQorICAg
IH07CiAKICAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KIAotICAgIGJv
b2wgaXNOdWxsKCkgY29uc3QgeyByZXR1cm4gbV90eXBlID09IFR5cGVOdWxsOyB9CisgICAgYm9v
bCBpc051bGwoKSBjb25zdCB7IHJldHVybiBtX3R5cGUgPT0gVHlwZTo6TnVsbDsgfQogCiAgICAg
dmlydHVhbCBib29sIGFzQm9vbGVhbihib29sKiBvdXRwdXQpIGNvbnN0OwogICAgIHZpcnR1YWwg
Ym9vbCBhc051bWJlcihkb3VibGUqIG91dHB1dCkgY29uc3Q7CkBAIC0xMTMsOSArMTE2LDE3IEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgd3JpdGVKU09OKFN0cmluZ0J1aWxkZXIqIG91dHB1
dCkgY29uc3Qgb3ZlcnJpZGU7CiAKIHByaXZhdGU6Ci0gICAgZXhwbGljaXQgSW5zcGVjdG9yQmFz
aWNWYWx1ZShib29sIHZhbHVlKSA6IEluc3BlY3RvclZhbHVlKFR5cGVCb29sZWFuKSwgbV9ib29s
VmFsdWUodmFsdWUpIHsgfQotICAgIGV4cGxpY2l0IEluc3BlY3RvckJhc2ljVmFsdWUoaW50IHZh
bHVlKSA6IEluc3BlY3RvclZhbHVlKFR5cGVOdW1iZXIpLCBtX2RvdWJsZVZhbHVlKChkb3VibGUp
dmFsdWUpIHsgfQotICAgIGV4cGxpY2l0IEluc3BlY3RvckJhc2ljVmFsdWUoZG91YmxlIHZhbHVl
KSA6IEluc3BlY3RvclZhbHVlKFR5cGVOdW1iZXIpLCBtX2RvdWJsZVZhbHVlKHZhbHVlKSB7IH0K
KyAgICBleHBsaWNpdCBJbnNwZWN0b3JCYXNpY1ZhbHVlKGJvb2wgdmFsdWUpCisgICAgICAgIDog
SW5zcGVjdG9yVmFsdWUoVHlwZTo6Qm9vbGVhbikKKyAgICAgICAgLCBtX2Jvb2xWYWx1ZSh2YWx1
ZSkgeyB9CisKKyAgICBleHBsaWNpdCBJbnNwZWN0b3JCYXNpY1ZhbHVlKGludCB2YWx1ZSkKKyAg
ICAgICAgOiBJbnNwZWN0b3JWYWx1ZShUeXBlOjpOdW1iZXIpCisgICAgICAgICwgbV9kb3VibGVW
YWx1ZShzdGF0aWNfY2FzdDxkb3VibGU+KHZhbHVlKSkgeyB9CisKKyAgICBleHBsaWNpdCBJbnNw
ZWN0b3JCYXNpY1ZhbHVlKGRvdWJsZSB2YWx1ZSkKKyAgICAgICAgOiBJbnNwZWN0b3JWYWx1ZShU
eXBlOjpOdW1iZXIpCisgICAgICAgICwgbV9kb3VibGVWYWx1ZSh2YWx1ZSkgeyB9CiAKICAgICB1
bmlvbiB7CiAgICAgICAgIGJvb2wgbV9ib29sVmFsdWU7CkBAIC0xMzMsOCArMTQ0LDEzIEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgd3JpdGVKU09OKFN0cmluZ0J1aWxkZXIqIG91dHB1dCkg
Y29uc3Qgb3ZlcnJpZGU7CiAKIHByaXZhdGU6Ci0gICAgZXhwbGljaXQgSW5zcGVjdG9yU3RyaW5n
KGNvbnN0IFN0cmluZyYgdmFsdWUpIDogSW5zcGVjdG9yVmFsdWUoVHlwZVN0cmluZyksIG1fc3Ry
aW5nVmFsdWUodmFsdWUpIHsgfQotICAgIGV4cGxpY2l0IEluc3BlY3RvclN0cmluZyhjb25zdCBj
aGFyKiB2YWx1ZSkgOiBJbnNwZWN0b3JWYWx1ZShUeXBlU3RyaW5nKSwgbV9zdHJpbmdWYWx1ZSh2
YWx1ZSkgeyB9CisgICAgZXhwbGljaXQgSW5zcGVjdG9yU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFs
dWUpCisgICAgICAgIDogSW5zcGVjdG9yVmFsdWUoVHlwZTo6U3RyaW5nKQorICAgICAgICAsIG1f
c3RyaW5nVmFsdWUodmFsdWUpIHsgfQorCisgICAgZXhwbGljaXQgSW5zcGVjdG9yU3RyaW5nKGNv
bnN0IGNoYXIqIHZhbHVlKQorICAgICAgICA6IEluc3BlY3RvclZhbHVlKFR5cGU6OlN0cmluZykK
KyAgICAgICAgLCBtX3N0cmluZ1ZhbHVlKHZhbHVlKSB7IH0KIAogICAgIFN0cmluZyBtX3N0cmlu
Z1ZhbHVlOwogfTsKQEAgLTE1OSw4ICsxNzUsOCBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBzZXRO
dW1iZXIoY29uc3QgU3RyaW5nJiBuYW1lLCBkb3VibGUpOwogICAgIHZvaWQgc2V0U3RyaW5nKGNv
bnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJik7CiAgICAgdm9pZCBzZXRWYWx1ZShjb25z
dCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KTsKLSAgICB2b2lkIHNl
dE9iamVjdChjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0Pik7
Ci0gICAgdm9pZCBzZXRBcnJheShjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SW5zcGVj
dG9yQXJyYXk+KTsKKyAgICB2b2lkIHNldE9iamVjdChjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0QmFzZT4pOworICAgIHZvaWQgc2V0QXJyYXkoY29uc3QgU3Ry
aW5nJiBuYW1lLCBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5QmFzZT4pOwogCiAgICAgaXRlcmF0
b3IgZmluZChjb25zdCBTdHJpbmcmIG5hbWUpOwogICAgIGNvbnN0X2l0ZXJhdG9yIGZpbmQoY29u
c3QgU3RyaW5nJiBuYW1lKSBjb25zdDsKQEAgLTMxNywxNCArMzMzLDE0IEBAIGlubGluZSB2b2lk
IEluc3BlY3Rvck9iamVjdEJhc2U6OnNldFZhbHVlKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1Jl
ZlB0cjxJbnNwZWN0CiAgICAgICAgIG1fb3JkZXIuYXBwZW5kKG5hbWUpOwogfQogCi1pbmxpbmUg
dm9pZCBJbnNwZWN0b3JPYmplY3RCYXNlOjpzZXRPYmplY3QoY29uc3QgU3RyaW5nJiBuYW1lLCBQ
YXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCitpbmxpbmUgdm9pZCBJbnNwZWN0b3JP
YmplY3RCYXNlOjpzZXRPYmplY3QoY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdEJhc2U+IHZhbHVlKQogewogICAgIEFTU0VSVCh2YWx1ZSk7CiAgICAgaWYgKG1f
ZGF0YS5zZXQobmFtZSwgdmFsdWUpLmlzTmV3RW50cnkpCiAgICAgICAgIG1fb3JkZXIuYXBwZW5k
KG5hbWUpOwogfQogCi1pbmxpbmUgdm9pZCBJbnNwZWN0b3JPYmplY3RCYXNlOjpzZXRBcnJheShj
b25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHZhbHVlKQoraW5s
aW5lIHZvaWQgSW5zcGVjdG9yT2JqZWN0QmFzZTo6c2V0QXJyYXkoY29uc3QgU3RyaW5nJiBuYW1l
LCBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5QmFzZT4gdmFsdWUpCiB7CiAgICAgQVNTRVJUKHZh
bHVlKTsKICAgICBpZiAobV9kYXRhLnNldChuYW1lLCB2YWx1ZSkuaXNOZXdFbnRyeSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRl
YnVnZ2VyQWdlbnQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHAKaW5kZXggNTA5NmE2Yzk5ZDJhOTEyMDQzOGM2OGZk
Yzg4NzU4ZjZjYmZhZWI5Zi4uNWUxYjY0NjQ2M2RmNTUxZTgyZDQ1OTU3YjVhZjdjOTYwZmVjMjVl
YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5z
cGVjdG9yRGVidWdnZXJBZ2VudC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9hZ2VudHMvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHAKQEAgLTQyOSw3ICs0MjksNyBA
QCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmdldEZ1bmN0aW9uRGV0YWlscyhFcnJvclN0
cmluZyogZXJyb3JTdHJpbmcsIGNvbnN0CiAgICAgaW5qZWN0ZWRTY3JpcHQuZ2V0RnVuY3Rpb25E
ZXRhaWxzKGVycm9yU3RyaW5nLCBmdW5jdGlvbklkLCAmZGV0YWlscyk7CiB9CiAKLXZvaWQgSW5z
cGVjdG9yRGVidWdnZXJBZ2VudDo6c2NoZWR1bGVQYXVzZU9uTmV4dFN0YXRlbWVudChJbnNwZWN0
b3JEZWJ1Z2dlckZyb250ZW5kRGlzcGF0Y2hlcjo6UmVhc29uOjpFbnVtIGJyZWFrUmVhc29uLCBQ
YXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZGF0YSkKK3ZvaWQgSW5zcGVjdG9yRGVidWdnZXJB
Z2VudDo6c2NoZWR1bGVQYXVzZU9uTmV4dFN0YXRlbWVudChJbnNwZWN0b3JEZWJ1Z2dlckZyb250
ZW5kRGlzcGF0Y2hlcjo6UmVhc29uIGJyZWFrUmVhc29uLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gZGF0YSkKIHsKICAgICBpZiAobV9qYXZhU2NyaXB0UGF1c2VTY2hlZHVsZWQpCiAgICAg
ICAgIHJldHVybjsKQEAgLTY4MCw3ICs2ODAsNyBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdl
bnQ6OmRpZENvbnRpbnVlKCkKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+cmVzdW1lZCgpOwog
fQogCi12b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmJyZWFrUHJvZ3JhbShJbnNwZWN0b3JE
ZWJ1Z2dlckZyb250ZW5kRGlzcGF0Y2hlcjo6UmVhc29uOjpFbnVtIGJyZWFrUmVhc29uLCBQYXNz
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZGF0YSkKK3ZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2Vu
dDo6YnJlYWtQcm9ncmFtKEluc3BlY3RvckRlYnVnZ2VyRnJvbnRlbmREaXNwYXRjaGVyOjpSZWFz
b24gYnJlYWtSZWFzb24sIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBkYXRhKQogewogICAg
IG1fYnJlYWtSZWFzb24gPSBicmVha1JlYXNvbjsKICAgICBtX2JyZWFrQXV4RGF0YSA9IGRhdGE7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNw
ZWN0b3JEZWJ1Z2dlckFnZW50LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2Fn
ZW50cy9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmgKaW5kZXggZWIyMjcwYTljZTI0MjgxM2Y5ZDRl
ZTU1OTAwZmY4M2E5OTZmNDA2Yi4uODQ3ZTc4YjYwZjVkY2NmOTY5ZmIzZDAxMTNlZDI1MjNlYTAy
N2QzZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9yRGVidWdnZXJBZ2VudC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3IvYWdlbnRzL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuaApAQCAtOTEsOSArOTEsOSBAQCBw
dWJsaWM6CiAgICAgCiAgICAgdm9pZCBoYW5kbGVDb25zb2xlQXNzZXJ0KCk7CiAKLSAgICB2b2lk
IHNjaGVkdWxlUGF1c2VPbk5leHRTdGF0ZW1lbnQoSW5zcGVjdG9yRGVidWdnZXJGcm9udGVuZERp
c3BhdGNoZXI6OlJlYXNvbjo6RW51bSBicmVha1JlYXNvbiwgUGFzc1JlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IGRhdGEpOworICAgIHZvaWQgc2NoZWR1bGVQYXVzZU9uTmV4dFN0YXRlbWVudChJbnNw
ZWN0b3JEZWJ1Z2dlckZyb250ZW5kRGlzcGF0Y2hlcjo6UmVhc29uIGJyZWFrUmVhc29uLCBQYXNz
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZGF0YSk7CiAgICAgdm9pZCBjYW5jZWxQYXVzZU9uTmV4
dFN0YXRlbWVudCgpOwotICAgIHZvaWQgYnJlYWtQcm9ncmFtKEluc3BlY3RvckRlYnVnZ2VyRnJv
bnRlbmREaXNwYXRjaGVyOjpSZWFzb246OkVudW0gYnJlYWtSZWFzb24sIFBhc3NSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBkYXRhKTsKKyAgICB2b2lkIGJyZWFrUHJvZ3JhbShJbnNwZWN0b3JEZWJ1
Z2dlckZyb250ZW5kRGlzcGF0Y2hlcjo6UmVhc29uIGJyZWFrUmVhc29uLCBQYXNzUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gZGF0YSk7CiAgICAgdm9pZCBzY3JpcHRFeGVjdXRpb25CbG9ja2VkQnlD
U1AoY29uc3QgU3RyaW5nJiBkaXJlY3RpdmVUZXh0KTsKIAogICAgIGNsYXNzIExpc3RlbmVyIHsK
QEAgLTE1OSw3ICsxNTksNyBAQCBwcml2YXRlOgogICAgIEJyZWFrcG9pbnRJZGVudGlmaWVyVG9E
ZWJ1Z1NlcnZlckJyZWFrcG9pbnRJRHNNYXAgbV9icmVha3BvaW50SWRlbnRpZmllclRvRGVidWdT
ZXJ2ZXJCcmVha3BvaW50SURzOwogICAgIEJyZWFrcG9pbnRJZGVudGlmaWVyVG9CcmVha3BvaW50
TWFwIG1famF2YVNjcmlwdEJyZWFrcG9pbnRzOwogICAgIEpTQzo6QnJlYWtwb2ludElEIG1fY29u
dGludWVUb0xvY2F0aW9uQnJlYWtwb2ludElEOwotICAgIEluc3BlY3RvckRlYnVnZ2VyRnJvbnRl
bmREaXNwYXRjaGVyOjpSZWFzb246OkVudW0gbV9icmVha1JlYXNvbjsKKyAgICBJbnNwZWN0b3JE
ZWJ1Z2dlckZyb250ZW5kRGlzcGF0Y2hlcjo6UmVhc29uIG1fYnJlYWtSZWFzb247CiAgICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gbV9icmVha0F1eERhdGE7CiAgICAgYm9vbCBtX2VuYWJsZWQ7
CiAgICAgYm9vbCBtX2phdmFTY3JpcHRQYXVzZVNjaGVkdWxlZDsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclJ1bnRpbWVBZ2VudC5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JSdW50
aW1lQWdlbnQuY3BwCmluZGV4IDBiYmI5MGI5MDc2NWU4NDE4ZmI2YTIxZDQyMmMwMGVlMzMzYmRj
NWEuLjk0MGI4YmQ1MDY5YWIwMzdiMDMzOGM2YTFlMzBiZmUxZDBlNDYwNDUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclJ1bnRpbWVB
Z2VudC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5z
cGVjdG9yUnVudGltZUFnZW50LmNwcApAQCAtODUsNyArODUsNyBAQCBzdGF0aWMgUGFzc1JlZlB0
cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpSdW50aW1lOjpFcnJvclJhbmdlPiBidWlsZEVycm9y
UmFuZ2VPYgogICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOwogfQogCi12b2lkIEluc3BlY3Rv
clJ1bnRpbWVBZ2VudDo6cGFyc2UoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Np
b24sIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OlN5bnRheEVycm9yVHlwZTo6RW51
bSogcmVzdWx0LCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8U3RyaW5nPiogbWVz
c2FnZSwgUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OkVycm9yUmFuZ2U+
JiByYW5nZSkKK3ZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50OjpwYXJzZShFcnJvclN0cmluZyos
IGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UnVudGlt
ZTo6U3ludGF4RXJyb3JUeXBlKiByZXN1bHQsIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6Ok9wdE91
dHB1dDxTdHJpbmc+KiBtZXNzYWdlLCBSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UnVu
dGltZTo6RXJyb3JSYW5nZT4mIHJhbmdlKQogewogICAgIFZNJiB2bSA9IGdsb2JhbFZNKCk7CiAg
ICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUnVudGltZUFnZW50LmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JSdW50aW1lQWdlbnQuaAppbmRl
eCAxMTU1MGQwNjg0ZWFlZjc3ODllZGE5ZmQ1YjgwY2Q4MWNiZDY3ZmJiLi41MmU2M2JjODVmODUx
ZTA2MGE2NDkyZjc0ZDc1OTMzNzdmNmZlYWE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JSdW50aW1lQWdlbnQuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JSdW50aW1lQWdlbnQu
aApAQCAtNTksNyArNTksNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgZW5hYmxlKEVy
cm9yU3RyaW5nKikgb3ZlcnJpZGUgeyBtX2VuYWJsZWQgPSB0cnVlOyB9CiAgICAgdmlydHVhbCB2
b2lkIGRpc2FibGUoRXJyb3JTdHJpbmcqKSBvdmVycmlkZSB7IG1fZW5hYmxlZCA9IGZhbHNlOyB9
Ci0gICAgdmlydHVhbCB2b2lkIHBhcnNlKEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBleHBy
ZXNzaW9uLCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpSdW50aW1lOjpTeW50YXhFcnJvclR5cGU6
OkVudW0qIHJlc3VsdCwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6T3B0T3V0cHV0PFN0cmluZz4q
IG1lc3NhZ2UsIFJlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpSdW50aW1lOjpFcnJvclJh
bmdlPiYpIG92ZXJyaWRlIGZpbmFsOworICAgIHZpcnR1YWwgdm9pZCBwYXJzZShFcnJvclN0cmlu
ZyosIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UnVu
dGltZTo6U3ludGF4RXJyb3JUeXBlKiByZXN1bHQsIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6Ok9w
dE91dHB1dDxTdHJpbmc+KiBtZXNzYWdlLCBSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6
UnVudGltZTo6RXJyb3JSYW5nZT4mKSBvdmVycmlkZSBmaW5hbDsKICAgICB2aXJ0dWFsIHZvaWQg
ZXZhbHVhdGUoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIGNvbnN0IFN0
cmluZyogb2JqZWN0R3JvdXAsIGNvbnN0IGJvb2wqIGluY2x1ZGVDb21tYW5kTGluZUFQSSwgY29u
c3QgYm9vbCogZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xlLCBjb25zdCBpbnQq
IGV4ZWN1dGlvbkNvbnRleHRJZCwgY29uc3QgYm9vbCogcmV0dXJuQnlWYWx1ZSwgY29uc3QgYm9v
bCogZ2VuZXJhdGVQcmV2aWV3LCBSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UnVudGlt
ZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0LCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpPcHRPdXRw
dXQ8Ym9vbD4qIHdhc1Rocm93bikgb3ZlcnJpZGUgZmluYWw7CiAgICAgdmlydHVhbCB2b2lkIGNh
bGxGdW5jdGlvbk9uKEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwgY29uc3Qg
U3RyaW5nJiBleHByZXNzaW9uLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJh
eT4qIG9wdGlvbmFsQXJndW1lbnRzLCBjb25zdCBib29sKiBkb05vdFBhdXNlT25FeGNlcHRpb25z
QW5kTXV0ZUNvbnNvbGUsIGNvbnN0IGJvb2wqIHJldHVybkJ5VmFsdWUsIGNvbnN0IGJvb2wqIGdl
bmVyYXRlUHJldmlldywgUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OlJl
bW90ZU9iamVjdD4mIHJlc3VsdCwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6T3B0T3V0cHV0PGJv
b2w+KiB3YXNUaHJvd24pIG92ZXJyaWRlIGZpbmFsOwogICAgIHZpcnR1YWwgdm9pZCByZWxlYXNl
T2JqZWN0KEVycm9yU3RyaW5nKiwgY29uc3QgRXJyb3JTdHJpbmcmIG9iamVjdElkKSBvdmVycmlk
ZSBmaW5hbDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNzU1CmluZGV4IDkxZmE4YzljMmQ3Yjk0OTljYjA4ZDVlZmE0MmE5MjI0OTI2NTMxODQu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkK
KysrIC9kZXYvbnVsbApAQCAtMSwyNjE0ICswLDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgot
IyBDb3B5cmlnaHQgKGMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMg
Q29weXJpZ2h0IChjKSAyMDEyIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotIyBDb3B5cmlnaHQgKGMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgot
IwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotIyBtZXQ6Ci0jCi0jICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0jIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQotIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0jIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSMgZGlzdHJpYnV0aW9u
LgotIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCi0jIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0jIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSMgIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSMg
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCi0jIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0jIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotIyBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0j
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAotIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotIyAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLQotaW1wb3J0IG9zLnBhdGgKLWltcG9ydCBzeXMKLWltcG9ydCBz
dHJpbmcKLWltcG9ydCBvcHRwYXJzZQotaW1wb3J0IHJlCi10cnk6Ci0gICAgaW1wb3J0IGpzb24K
LWV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICBpbXBvcnQgc2ltcGxlanNvbiBhcyBqc29uCi0KLWlt
cG9ydCBDb2RlR2VuZXJhdG9ySW5zcGVjdG9yU3RyaW5ncwotCi0KLURPTUFJTl9ERUZJTkVfTkFN
RV9NQVAgPSB7Ci0gICAgIkRhdGFiYXNlIjogIlNRTF9EQVRBQkFTRSIsCi0gICAgIkluZGV4ZWRE
QiI6ICJJTkRFWEVEX0RBVEFCQVNFIiwKLSAgICAiUmVwbGF5IjogIldFQl9SRVBMQVkiLAotfQot
Ci0KLSMgTWFudWFsbHktZmlsbGVkIG1hcCBvZiB0eXBlIG5hbWUgcmVwbGFjZW1lbnRzLgotVFlQ
RV9OQU1FX0ZJWF9NQVAgPSB7Ci0gICAgIlJHQkEiOiAiUmdiYSIsICAjIFJHQkEgaXMgcmVwb3J0
ZWQgdG8gYmUgY29uZmxpY3Rpbmcgd2l0aCBhIGRlZmluZSBuYW1lIGluIFdpbmRvd3MgQ0UuCi0g
ICAgIiI6ICJFbXB0eSIsCi19Ci0KLQotVFlQRVNfV0lUSF9SVU5USU1FX0NBU1RfU0VUID0gZnJv
emVuc2V0KFsiUnVudGltZS5SZW1vdGVPYmplY3QiLCAiUnVudGltZS5Qcm9wZXJ0eURlc2NyaXB0
b3IiLCAiUnVudGltZS5JbnRlcm5hbFByb3BlcnR5RGVzY3JpcHRvciIsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJEZWJ1Z2dlci5GdW5jdGlvbkRldGFpbHMiLCAi
RGVidWdnZXIuQ2FsbEZyYW1lIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIkNhbnZhcy5UcmFjZUxvZyIsICJDYW52YXMuUmVzb3VyY2VJbmZvIiwgIkNhbnZhcy5S
ZXNvdXJjZVN0YXRlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IyBUaGlzIHNob3VsZCBiZSBhIHRlbXBvcmFyeSBoYWNrLiBUaW1lbGluZUV2ZW50IHNob3VsZCBi
ZSBjcmVhdGVkIHZpYSBnZW5lcmF0ZWQgQysrIEFQSS4KLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIlRpbWVsaW5lLlRpbWVsaW5lRXZlbnQiXSkKLQotVFlQRVNfV0lU
SF9PUEVOX0ZJRUxEX0xJU1RfU0VUID0gZnJvemVuc2V0KFsiVGltZWxpbmUuVGltZWxpbmVFdmVu
dCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgSW5zcGVj
dG9yU3R5bGVTaGVldCBub3Qgb25seSBjcmVhdGVzIHRoaXMgcHJvcGVydHkgYnV0IHdhbnRzIHRv
IHJlYWQgaXQgYW5kIG1vZGlmeSBpdC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIkNTUy5DU1NQcm9wZXJ0eSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICMgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudCBuZWVkcyB0byB1cGRh
dGUgbWltZS10eXBlLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiTmV0d29yay5SZXNwb25zZSJdKQotCi1FWEFDVExZX0lOVF9TVVBQT1JURUQgPSBGYWxzZQot
Ci1JTlNQRUNUT1JfVFlQRVNfR0VORVJBVE9SX0NPTkZJR19NQVAgPSB7Ci0gICAgIkphdmFTY3Jp
cHQiOiB7Ci0gICAgICAgICJwcmVmaXgiOiAiSlMiLAotICAgICAgICAidHlwZWJ1aWxkZXJfZGVw
ZW5kZW5jeSI6ICIiLAotICAgICAgICAiZXhwb3J0X21hY3JvIjogIkpTX0VYUE9SVF9QUklWQVRF
IiwKLSAgICB9LAotICAgICJXZWIiOiB7Ci0gICAgICAgICJwcmVmaXgiOiAiV2ViIiwKLSAgICAg
ICAgInR5cGVidWlsZGVyX2RlcGVuZGVuY3kiOiAiI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0
b3JKU1R5cGVCdWlsZGVycy5oPiIsCi0gICAgICAgICJleHBvcnRfbWFjcm8iOiAiIiwKLSAgICB9
LAotfQotCi1jbWRsaW5lX3BhcnNlciA9IG9wdHBhcnNlLk9wdGlvblBhcnNlcih1c2FnZT0idXNh
Z2U6ICVwcm9nIFtvcHRpb25zXSA8SW5zcGVjdG9yLmpzb24+IikKLWNtZGxpbmVfcGFyc2VyLmFk
ZF9vcHRpb24oIi0tb3V0cHV0X2hfZGlyIikKLWNtZGxpbmVfcGFyc2VyLmFkZF9vcHRpb24oIi0t
b3V0cHV0X2NwcF9kaXIiKQotY21kbGluZV9wYXJzZXIuYWRkX29wdGlvbigiLS1vdXRwdXRfanNf
ZGlyIikKLWNtZGxpbmVfcGFyc2VyLmFkZF9vcHRpb24oIi0tb3V0cHV0X3R5cGUiKSAgIyBKYXZh
U2NyaXB0LCBXZWIKLWNtZGxpbmVfcGFyc2VyLmFkZF9vcHRpb24oIi0td3JpdGVfYWx3YXlzIiwg
YWN0aW9uPSJzdG9yZV90cnVlIikKLWNtZGxpbmVfcGFyc2VyLmFkZF9vcHRpb24oIi0tbm9fdmVy
aWZpY2F0aW9uIiwgYWN0aW9uPSJzdG9yZV90cnVlIikKLQotdHJ5OgotICAgIGFyZ19vcHRpb25z
LCBhcmdfdmFsdWVzID0gY21kbGluZV9wYXJzZXIucGFyc2VfYXJncygpCi0gICAgaWYgKGxlbihh
cmdfdmFsdWVzKSA8IDEpOgotICAgICAgICByYWlzZSBFeGNlcHRpb24oIkF0IGxlYXN0IG9uZSBw
bGFpbiBhcmd1bWVudCBleHBlY3RlZCIpCi0KLSAgICBpbnB1dF9qc29uX2ZpbGVuYW1lID0gYXJn
X3ZhbHVlc1swXQotICAgIGRlcGVuZGVuY3lfanNvbl9maWxlbmFtZXMgPSBhcmdfdmFsdWVzWzE6
XQotCi0gICAgb3V0cHV0X2hlYWRlcl9kaXJuYW1lID0gYXJnX29wdGlvbnMub3V0cHV0X2hfZGly
Ci0gICAgb3V0cHV0X2NwcF9kaXJuYW1lID0gYXJnX29wdGlvbnMub3V0cHV0X2NwcF9kaXIKLSAg
ICBvdXRwdXRfanNfZGlybmFtZSA9IGFyZ19vcHRpb25zLm91dHB1dF9qc19kaXIKLSAgICBvdXRw
dXRfdHlwZSA9IGFyZ19vcHRpb25zLm91dHB1dF90eXBlCi0KLSAgICB3cml0ZV9hbHdheXMgPSBh
cmdfb3B0aW9ucy53cml0ZV9hbHdheXMKLSAgICB2ZXJpZmljYXRpb24gPSBub3QgYXJnX29wdGlv
bnMubm9fdmVyaWZpY2F0aW9uCi0gICAgaWYgbm90IG91dHB1dF9oZWFkZXJfZGlybmFtZToKLSAg
ICAgICAgcmFpc2UgRXhjZXB0aW9uKCJPdXRwdXQgLmggZGlyZWN0b3J5IG11c3QgYmUgc3BlY2lm
aWVkIikKLSAgICBpZiBub3Qgb3V0cHV0X2NwcF9kaXJuYW1lOgotICAgICAgICByYWlzZSBFeGNl
cHRpb24oIk91dHB1dCAuY3BwIGRpcmVjdG9yeSBtdXN0IGJlIHNwZWNpZmllZCIpCi0gICAgaWYg
bm90IG91dHB1dF9qc19kaXJuYW1lOgotICAgICAgICByYWlzZSBFeGNlcHRpb24oIk91dHB1dCAu
anMgZGlyZWN0b3J5IG11c3QgYmUgc3BlY2lmaWVkIikKLSAgICBpZiBvdXRwdXRfdHlwZSBub3Qg
aW4gSU5TUEVDVE9SX1RZUEVTX0dFTkVSQVRPUl9DT05GSUdfTUFQLmtleXMoKToKLSAgICAgICAg
cmFpc2UgRXhjZXB0aW9uKCJVbmtub3duIG91dHB1dCB0eXBlLiBBbGxvd2VkIHR5cGVzIGFyZTog
JXMiICUgSU5TUEVDVE9SX1RZUEVTX0dFTkVSQVRPUl9DT05GSUdfTUFQLmtleXMoKSkKLWV4Y2Vw
dCBFeGNlcHRpb246Ci0gICAgIyBXb3JrIHdpdGggcHl0aG9uIDIgYW5kIDMgaHR0cDovL2RvY3Mu
cHl0aG9uLm9yZy9weTNrL2hvd3RvL3B5cG9ydGluZy5odG1sCi0gICAgZXhjID0gc3lzLmV4Y19p
bmZvKClbMV0KLSAgICBzeXMuc3RkZXJyLndyaXRlKCJGYWlsZWQgdG8gcGFyc2UgY29tbWFuZC1s
aW5lIGFyZ3VtZW50czogJXNcblxuIiAlIGV4YykKLSAgICBzeXMuc3RkZXJyLndyaXRlKCJVc2Fn
ZTogPHNjcmlwdD4gSW5zcGVjdG9yLmpzb24gLS1vdXRwdXRfaF9kaXIgPG91dHB1dF9oZWFkZXJf
ZGlyPiAtLW91dHB1dF9jcHBfZGlyIDxvdXRwdXRfY3BwX2Rpcj4gLS1vdXRwdXRfanNfZGlyIDxv
dXRwdXRfanNfZGlyPiBbLS13cml0ZV9hbHdheXNdIFstLW5vX3ZlcmlmaWNhdGlvbl1cbiIpCi0g
ICAgZXhpdCgxKQotCi0KLWRlZiBkYXNoX3RvX2NhbWVsY2FzZSh3b3JkKToKLSAgICByZXR1cm4g
Jycuam9pbih4LmNhcGl0YWxpemUoKSBvciAnLScgZm9yIHggaW4gd29yZC5zcGxpdCgnLScpKQot
Ci0KLWRlZiBmaXhfY2FtZWxfY2FzZShuYW1lKToKLSAgICByZWZpbmVkID0gcmUuc3ViKHInLShc
dyknLCBsYW1iZGEgcGF0OiBwYXQuZ3JvdXAoMSkudXBwZXIoKSwgbmFtZSkKLSAgICByZWZpbmVk
ID0gdG9fdGl0bGVfY2FzZShyZWZpbmVkKQotICAgIHJldHVybiByZS5zdWIocicoP2kpSFRNTHxY
TUx8V01MfEFQSXxHQ3xYSFJ8RE9NfENTUycsIGxhbWJkYSBwYXQ6IHBhdC5ncm91cCgwKS51cHBl
cigpLCByZWZpbmVkKQotCi0KLWRlZiB0b190aXRsZV9jYXNlKG5hbWUpOgotICAgIHJldHVybiBu
YW1lWzoxXS51cHBlcigpICsgbmFtZVsxOl0KLQotCi1jbGFzcyBDYXBpdGFsaXplcjoKLSAgICBA
c3RhdGljbWV0aG9kCi0gICAgZGVmIGxvd2VyX2NhbWVsX2Nhc2VfdG9fdXBwZXIoc3RyKToKLSAg
ICAgICAgaWYgbGVuKHN0cikgPiAwIGFuZCBzdHJbMF0uaXNsb3dlcigpOgotICAgICAgICAgICAg
c3RyID0gc3RyWzBdLnVwcGVyKCkgKyBzdHJbMTpdCi0gICAgICAgIHJldHVybiBzdHIKLQotICAg
IEBzdGF0aWNtZXRob2QKLSAgICBkZWYgdXBwZXJfY2FtZWxfY2FzZV90b19sb3dlcihzdHIpOgot
ICAgICAgICBwb3MgPSAwCi0gICAgICAgIHdoaWxlIHBvcyA8IGxlbihzdHIpIGFuZCBzdHJbcG9z
XS5pc3VwcGVyKCk6Ci0gICAgICAgICAgICBwb3MgKz0gMQotICAgICAgICBpZiBwb3MgPT0gMDoK
LSAgICAgICAgICAgIHJldHVybiBzdHIKLSAgICAgICAgaWYgcG9zID09IDE6Ci0gICAgICAgICAg
ICByZXR1cm4gc3RyWzBdLmxvd2VyKCkgKyBzdHJbMTpdCi0gICAgICAgIGlmIHBvcyA8IGxlbihz
dHIpOgotICAgICAgICAgICAgcG9zIC09IDEKLSAgICAgICAgcG9zc2libGVfYWJicmV2aWF0aW9u
ID0gc3RyWzA6cG9zXQotICAgICAgICBpZiBwb3NzaWJsZV9hYmJyZXZpYXRpb24gbm90IGluIENh
cGl0YWxpemVyLkFCQlJFVklBVElPTjoKLSAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiVW5r
bm93biBhYmJyZXZpYXRpb24gJXMiICUgcG9zc2libGVfYWJicmV2aWF0aW9uKQotICAgICAgICBz
dHIgPSBwb3NzaWJsZV9hYmJyZXZpYXRpb24ubG93ZXIoKSArIHN0cltwb3M6XQotICAgICAgICBy
ZXR1cm4gc3RyCi0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIGNhbWVsX2Nhc2VfdG9fY2Fw
aXRhbGl6ZWRfd2l0aF91bmRlcnNjb3JlcyhzdHIpOgotICAgICAgICBpZiBsZW4oc3RyKSA9PSAw
OgotICAgICAgICAgICAgcmV0dXJuIHN0cgotICAgICAgICBvdXRwdXQgPSBDYXBpdGFsaXplci5z
cGxpdF9jYW1lbF9jYXNlXyhzdHIpCi0gICAgICAgIHJldHVybiAiXyIuam9pbihvdXRwdXQpLnVw
cGVyKCkKLQotICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgc3BsaXRfY2FtZWxfY2FzZV8oc3Ry
KToKLSAgICAgICAgb3V0cHV0ID0gW10KLSAgICAgICAgcG9zX2JlaW5nID0gMAotICAgICAgICBw
b3MgPSAxCi0gICAgICAgIGhhc19vbmVsZXR0ZXIgPSBGYWxzZQotICAgICAgICB3aGlsZSBwb3Mg
PCBsZW4oc3RyKToKLSAgICAgICAgICAgIGlmIHN0cltwb3NdLmlzdXBwZXIoKToKLSAgICAgICAg
ICAgICAgICBvdXRwdXQuYXBwZW5kKHN0cltwb3NfYmVpbmc6cG9zXS51cHBlcigpKQotICAgICAg
ICAgICAgICAgIGlmIHBvcyAtIHBvc19iZWluZyA9PSAxOgotICAgICAgICAgICAgICAgICAgICBo
YXNfb25lbGV0dGVyID0gVHJ1ZQotICAgICAgICAgICAgICAgIHBvc19iZWluZyA9IHBvcwotICAg
ICAgICAgICAgcG9zICs9IDEKLSAgICAgICAgb3V0cHV0LmFwcGVuZChzdHJbcG9zX2JlaW5nOl0p
Ci0gICAgICAgIGlmIGhhc19vbmVsZXR0ZXI6Ci0gICAgICAgICAgICBhcnJheV9wb3MgPSAwCi0g
ICAgICAgICAgICB3aGlsZSBhcnJheV9wb3MgPCBsZW4ob3V0cHV0KSAtIDE6Ci0gICAgICAgICAg
ICAgICAgaWYgbGVuKG91dHB1dFthcnJheV9wb3NdKSA9PSAxOgotICAgICAgICAgICAgICAgICAg
ICBhcnJheV9wb3NfZW5kID0gYXJyYXlfcG9zICsgMQotICAgICAgICAgICAgICAgICAgICB3aGls
ZSBhcnJheV9wb3NfZW5kIDwgbGVuKG91dHB1dCkgYW5kIGxlbihvdXRwdXRbYXJyYXlfcG9zX2Vu
ZF0pID09IDE6Ci0gICAgICAgICAgICAgICAgICAgICAgICBhcnJheV9wb3NfZW5kICs9IDEKLSAg
ICAgICAgICAgICAgICAgICAgaWYgYXJyYXlfcG9zX2VuZCAtIGFycmF5X3BvcyA+IDE6Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBwb3NzaWJsZV9hYmJyZXZpYXRpb24gPSAiIi5qb2luKG91dHB1
dFthcnJheV9wb3M6YXJyYXlfcG9zX2VuZF0pCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiBw
b3NzaWJsZV9hYmJyZXZpYXRpb24udXBwZXIoKSBpbiBDYXBpdGFsaXplci5BQkJSRVZJQVRJT046
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0W2FycmF5X3BvczphcnJheV9wb3Nf
ZW5kXSA9IFtwb3NzaWJsZV9hYmJyZXZpYXRpb25dCi0gICAgICAgICAgICAgICAgICAgICAgICBl
bHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5X3BvcyA9IGFycmF5X3Bvc19l
bmQgLSAxCi0gICAgICAgICAgICAgICAgYXJyYXlfcG9zICs9IDEKLSAgICAgICAgcmV0dXJuIG91
dHB1dAotCi0gICAgQUJCUkVWSUFUSU9OID0gZnJvemVuc2V0KFsiWEhSIiwgIkRPTSIsICJDU1Mi
XSkKLQotVkFMSURBVE9SX0lGREVGX05BTUUgPSAiIUFTU0VSVF9ESVNBQkxFRCIKLQotCi1jbGFz
cyBEb21haW5OYW1lRml4ZXM6Ci0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIGdldF9maXhlZF9k
YXRhKGNscywgZG9tYWluX25hbWUpOgotICAgICAgICBmaWVsZF9uYW1lX3JlcyA9IENhcGl0YWxp
emVyLnVwcGVyX2NhbWVsX2Nhc2VfdG9fbG93ZXIoZG9tYWluX25hbWUpICsgIkFnZW50IgotCi0g
ICAgICAgIGNsYXNzIFJlcyhvYmplY3QpOgotICAgICAgICAgICAgc2tpcF9qc19iaW5kID0gZG9t
YWluX25hbWUgaW4gY2xzLnNraXBfanNfYmluZF9kb21haW5zCi0KLSAgICAgICAgICAgIEBzdGF0
aWNtZXRob2QKLSAgICAgICAgICAgIGRlZiBnZXRfZ3VhcmQoKToKLSAgICAgICAgICAgICAgICBp
ZiBkb21haW5fbmFtZSBpbiBET01BSU5fREVGSU5FX05BTUVfTUFQOgotICAgICAgICAgICAgICAg
ICAgICBkZWZpbmVfbmFtZSA9IERPTUFJTl9ERUZJTkVfTkFNRV9NQVBbZG9tYWluX25hbWVdCi0K
LSAgICAgICAgICAgICAgICAgICAgY2xhc3MgR3VhcmQ6Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWYgZ2VuZXJhdGVfb3Bl
bihvdXRwdXQpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoIiNp
ZiBFTkFCTEUoJXMpXG4iICUgZGVmaW5lX25hbWUpCi0KLSAgICAgICAgICAgICAgICAgICAgICAg
IEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBnZW5lcmF0ZV9jbG9z
ZShvdXRwdXQpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoIiNl
bmRpZiAvLyBFTkFCTEUoJXMpXG4iICUgZGVmaW5lX25hbWUpCi0KLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIEd1YXJkCi0KLSAgICAgICAgcmV0dXJuIFJlcwotCi0gICAgc2tpcF9qc19iaW5k
X2RvbWFpbnMgPSBzZXQoWyJET01EZWJ1Z2dlciJdKQotCi0KLWNsYXNzIFJhd1R5cGVzKG9iamVj
dCk6Ci0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBnZXQoanNvbl90eXBlKToKLSAgICAgICAg
aWYganNvbl90eXBlID09ICJib29sZWFuIjoKLSAgICAgICAgICAgIHJldHVybiBSYXdUeXBlcy5C
b29sCi0gICAgICAgIGVsaWYganNvbl90eXBlID09ICJzdHJpbmciOgotICAgICAgICAgICAgcmV0
dXJuIFJhd1R5cGVzLlN0cmluZwotICAgICAgICBlbGlmIGpzb25fdHlwZSA9PSAiYXJyYXkiOgot
ICAgICAgICAgICAgcmV0dXJuIFJhd1R5cGVzLkFycmF5Ci0gICAgICAgIGVsaWYganNvbl90eXBl
ID09ICJvYmplY3QiOgotICAgICAgICAgICAgcmV0dXJuIFJhd1R5cGVzLk9iamVjdAotICAgICAg
ICBlbGlmIGpzb25fdHlwZSA9PSAiaW50ZWdlciI6Ci0gICAgICAgICAgICByZXR1cm4gUmF3VHlw
ZXMuSW50Ci0gICAgICAgIGVsaWYganNvbl90eXBlID09ICJudW1iZXIiOgotICAgICAgICAgICAg
cmV0dXJuIFJhd1R5cGVzLk51bWJlcgotICAgICAgICBlbGlmIGpzb25fdHlwZSA9PSAiYW55IjoK
LSAgICAgICAgICAgIHJldHVybiBSYXdUeXBlcy5BbnkKLSAgICAgICAgZWxzZToKLSAgICAgICAg
ICAgIHJhaXNlIEV4Y2VwdGlvbigiVW5rbm93biB0eXBlOiAlcyIgJSBqc29uX3R5cGUpCi0KLSAg
ICAjIEZvciBvdXRwdXQgcGFyYW1ldGVyIGFsbCB2YWx1ZXMgYXJlIHBhc3NlZCBieSBwb2ludGVy
IGV4Y2VwdCBSZWZQdHItYmFzZWQgdHlwZXMuCi0gICAgY2xhc3MgT3V0cHV0UGFzc01vZGVsOgot
ICAgICAgICBjbGFzcyBCeVBvaW50ZXI6Ci0gICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAg
ICAgICAgICBkZWYgZ2V0X2FyZ3VtZW50X3ByZWZpeCgpOgotICAgICAgICAgICAgICAgIHJldHVy
biAiJiIKLQotICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgZGVmIGdldF9w
YXJhbWV0ZXJfdHlwZV9zdWZmaXgoKToKLSAgICAgICAgICAgICAgICByZXR1cm4gIioiCi0KLSAg
ICAgICAgY2xhc3MgQnlSZWZlcmVuY2U6Ci0gICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAg
ICAgICAgICBkZWYgZ2V0X2FyZ3VtZW50X3ByZWZpeCgpOgotICAgICAgICAgICAgICAgIHJldHVy
biAiIgotCi0gICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICBkZWYgZ2V0X3Bh
cmFtZXRlcl90eXBlX3N1ZmZpeCgpOgotICAgICAgICAgICAgICAgIHJldHVybiAiJiIKLQotICAg
IGNsYXNzIEJhc2VUeXBlKG9iamVjdCk6Ci0gICAgICAgIG5lZWRfaW50ZXJuYWxfcnVudGltZV9j
YXN0XyA9IEZhbHNlCi0KLSAgICAgICAgQGNsYXNzbWV0aG9kCi0gICAgICAgIGRlZiByZXF1ZXN0
X3Jhd19pbnRlcm5hbF9ydW50aW1lX2Nhc3QoY2xzKToKLSAgICAgICAgICAgIGlmIG5vdCBjbHMu
bmVlZF9pbnRlcm5hbF9ydW50aW1lX2Nhc3RfOgotICAgICAgICAgICAgICAgIGNscy5uZWVkX2lu
dGVybmFsX3J1bnRpbWVfY2FzdF8gPSBUcnVlCi0KLSAgICAgICAgQGNsYXNzbWV0aG9kCi0gICAg
ICAgIGRlZiBnZXRfcmF3X3ZhbGlkYXRvcl9jYWxsX3RleHQoY2xzKToKLSAgICAgICAgICAgIHJl
dHVybiAiUnVudGltZUNhc3RIZWxwZXI6OmFzc2VydFR5cGU8SW5zcGVjdG9yOjpJbnNwZWN0b3JW
YWx1ZTo6VHlwZSVzPiIgJSBjbHMuZ2V0X3ZhbGlkYXRlX21ldGhvZF9wYXJhbXMoKS50ZW1wbGF0
ZV90eXBlCi0KLSAgICBjbGFzcyBTdHJpbmcoQmFzZVR5cGUpOgotICAgICAgICBAc3RhdGljbWV0
aG9kCi0gICAgICAgIGRlZiBnZXRfZ2V0dGVyX25hbWUoKToKLSAgICAgICAgICAgIHJldHVybiAi
U3RyaW5nIgotCi0gICAgICAgIGdldF9zZXR0ZXJfbmFtZSA9IGdldF9nZXR0ZXJfbmFtZQotCi0g
ICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGdldF9jX2luaXRpYWxpemVyKCk6Ci0g
ICAgICAgICAgICByZXR1cm4gIlwiXCIiCi0KLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAg
ICBkZWYgZ2V0X2pzX2JpbmRfdHlwZSgpOgotICAgICAgICAgICAgcmV0dXJuICJzdHJpbmciCi0K
LSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBkZWYgZ2V0X3ZhbGlkYXRlX21ldGhvZF9w
YXJhbXMoKToKLSAgICAgICAgICAgIGNsYXNzIFZhbGlkYXRlTWV0aG9kUGFyYW1zOgotICAgICAg
ICAgICAgICAgIHRlbXBsYXRlX3R5cGUgPSAiU3RyaW5nIgotICAgICAgICAgICAgcmV0dXJuIFZh
bGlkYXRlTWV0aG9kUGFyYW1zCi0KLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBkZWYg
Z2V0X291dHB1dF9wYXNzX21vZGVsKCk6Ci0gICAgICAgICAgICByZXR1cm4gUmF3VHlwZXMuT3V0
cHV0UGFzc01vZGVsLkJ5UG9pbnRlcgotCi0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAg
ZGVmIGlzX2hlYXZ5X3ZhbHVlKCk6Ci0gICAgICAgICAgICByZXR1cm4gVHJ1ZQotCi0gICAgICAg
IEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGdldF9hcnJheV9pdGVtX3Jhd19jX3R5cGVfdGV4
dCgpOgotICAgICAgICAgICAgcmV0dXJuICJTdHJpbmciCi0KLSAgICAgICAgQHN0YXRpY21ldGhv
ZAotICAgICAgICBkZWYgZ2V0X3Jhd190eXBlX21vZGVsKCk6Ci0gICAgICAgICAgICByZXR1cm4g
VHlwZU1vZGVsLlN0cmluZwotCi0gICAgY2xhc3MgSW50KEJhc2VUeXBlKToKLSAgICAgICAgQHN0
YXRpY21ldGhvZAotICAgICAgICBkZWYgZ2V0X2dldHRlcl9uYW1lKCk6Ci0gICAgICAgICAgICBy
ZXR1cm4gIkludCIKLQotICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgIGRlZiBnZXRfc2V0
dGVyX25hbWUoKToKLSAgICAgICAgICAgIHJldHVybiAiTnVtYmVyIgotCi0gICAgICAgIEBzdGF0
aWNtZXRob2QKLSAgICAgICAgZGVmIGdldF9jX2luaXRpYWxpemVyKCk6Ci0gICAgICAgICAgICBy
ZXR1cm4gIjAiCi0KLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBkZWYgZ2V0X2pzX2Jp
bmRfdHlwZSgpOgotICAgICAgICAgICAgcmV0dXJuICJudW1iZXIiCi0KLSAgICAgICAgQGNsYXNz
bWV0aG9kCi0gICAgICAgIGRlZiBnZXRfcmF3X3ZhbGlkYXRvcl9jYWxsX3RleHQoY2xzKToKLSAg
ICAgICAgICAgIHJldHVybiAiUnVudGltZUNhc3RIZWxwZXI6OmFzc2VydEludCIKLQotICAgICAg
ICBAc3RhdGljbWV0aG9kCi0gICAgICAgIGRlZiBnZXRfb3V0cHV0X3Bhc3NfbW9kZWwoKToKLSAg
ICAgICAgICAgIHJldHVybiBSYXdUeXBlcy5PdXRwdXRQYXNzTW9kZWwuQnlQb2ludGVyCi0KLSAg
ICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBkZWYgaXNfaGVhdnlfdmFsdWUoKToKLSAgICAg
ICAgICAgIHJldHVybiBGYWxzZQotCi0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVm
IGdldF9hcnJheV9pdGVtX3Jhd19jX3R5cGVfdGV4dCgpOgotICAgICAgICAgICAgcmV0dXJuICJp
bnQiCi0KLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBkZWYgZ2V0X3Jhd190eXBlX21v
ZGVsKCk6Ci0gICAgICAgICAgICByZXR1cm4gVHlwZU1vZGVsLkludAotCi0gICAgY2xhc3MgTnVt
YmVyKEJhc2VUeXBlKToKLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBkZWYgZ2V0X2dl
dHRlcl9uYW1lKCk6Ci0gICAgICAgICAgICByZXR1cm4gIkRvdWJsZSIKLQotICAgICAgICBAc3Rh
dGljbWV0aG9kCi0gICAgICAgIGRlZiBnZXRfc2V0dGVyX25hbWUoKToKLSAgICAgICAgICAgIHJl
dHVybiAiTnVtYmVyIgotCi0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGdldF9j
X2luaXRpYWxpemVyKCk6Ci0gICAgICAgICAgICByZXR1cm4gIjAiCi0KLSAgICAgICAgQHN0YXRp
Y21ldGhvZAotICAgICAgICBkZWYgZ2V0X2pzX2JpbmRfdHlwZSgpOgotICAgICAgICAgICAgcmV0
dXJuICJudW1iZXIiCi0KLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBkZWYgZ2V0X3Zh
bGlkYXRlX21ldGhvZF9wYXJhbXMoKToKLSAgICAgICAgICAgIGNsYXNzIFZhbGlkYXRlTWV0aG9k
UGFyYW1zOgotICAgICAgICAgICAgICAgIHRlbXBsYXRlX3R5cGUgPSAiTnVtYmVyIgotICAgICAg
ICAgICAgcmV0dXJuIFZhbGlkYXRlTWV0aG9kUGFyYW1zCi0KLSAgICAgICAgQHN0YXRpY21ldGhv
ZAotICAgICAgICBkZWYgZ2V0X291dHB1dF9wYXNzX21vZGVsKCk6Ci0gICAgICAgICAgICByZXR1
cm4gUmF3VHlwZXMuT3V0cHV0UGFzc01vZGVsLkJ5UG9pbnRlcgotCi0gICAgICAgIEBzdGF0aWNt
ZXRob2QKLSAgICAgICAgZGVmIGlzX2hlYXZ5X3ZhbHVlKCk6Ci0gICAgICAgICAgICByZXR1cm4g
RmFsc2UKLQotICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgIGRlZiBnZXRfYXJyYXlfaXRl
bV9yYXdfY190eXBlX3RleHQoKToKLSAgICAgICAgICAgIHJldHVybiAiZG91YmxlIgotCi0gICAg
ICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGdldF9yYXdfdHlwZV9tb2RlbCgpOgotICAg
ICAgICAgICAgcmV0dXJuIFR5cGVNb2RlbC5OdW1iZXIKLQotICAgIGNsYXNzIEJvb2woQmFzZVR5
cGUpOgotICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgIGRlZiBnZXRfZ2V0dGVyX25hbWUo
KToKLSAgICAgICAgICAgIHJldHVybiAiQm9vbGVhbiIKLQotICAgICAgICBnZXRfc2V0dGVyX25h
bWUgPSBnZXRfZ2V0dGVyX25hbWUKLQotICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgIGRl
ZiBnZXRfY19pbml0aWFsaXplcigpOgotICAgICAgICAgICAgcmV0dXJuICJmYWxzZSIKLQotICAg
ICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgIGRlZiBnZXRfanNfYmluZF90eXBlKCk6Ci0gICAg
ICAgICAgICByZXR1cm4gImJvb2xlYW4iCi0KLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAg
ICBkZWYgZ2V0X3ZhbGlkYXRlX21ldGhvZF9wYXJhbXMoKToKLSAgICAgICAgICAgIGNsYXNzIFZh
bGlkYXRlTWV0aG9kUGFyYW1zOgotICAgICAgICAgICAgICAgIHRlbXBsYXRlX3R5cGUgPSAiQm9v
bGVhbiIKLSAgICAgICAgICAgIHJldHVybiBWYWxpZGF0ZU1ldGhvZFBhcmFtcwotCi0gICAgICAg
IEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGdldF9vdXRwdXRfcGFzc19tb2RlbCgpOgotICAg
ICAgICAgICAgcmV0dXJuIFJhd1R5cGVzLk91dHB1dFBhc3NNb2RlbC5CeVBvaW50ZXIKLQotICAg
ICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgIGRlZiBpc19oZWF2eV92YWx1ZSgpOgotICAgICAg
ICAgICAgcmV0dXJuIEZhbHNlCi0KLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBkZWYg
Z2V0X2FycmF5X2l0ZW1fcmF3X2NfdHlwZV90ZXh0KCk6Ci0gICAgICAgICAgICByZXR1cm4gImJv
b2wiCi0KLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBkZWYgZ2V0X3Jhd190eXBlX21v
ZGVsKCk6Ci0gICAgICAgICAgICByZXR1cm4gVHlwZU1vZGVsLkJvb2wKLQotICAgIGNsYXNzIE9i
amVjdChCYXNlVHlwZSk6Ci0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGdldF9n
ZXR0ZXJfbmFtZSgpOgotICAgICAgICAgICAgcmV0dXJuICJPYmplY3QiCi0KLSAgICAgICAgQHN0
YXRpY21ldGhvZAotICAgICAgICBkZWYgZ2V0X3NldHRlcl9uYW1lKCk6Ci0gICAgICAgICAgICBy
ZXR1cm4gIlZhbHVlIgotCi0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGdldF9j
X2luaXRpYWxpemVyKCk6Ci0gICAgICAgICAgICByZXR1cm4gIkluc3BlY3Rvck9iamVjdDo6Y3Jl
YXRlKCkiCi0KLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBkZWYgZ2V0X2pzX2JpbmRf
dHlwZSgpOgotICAgICAgICAgICAgcmV0dXJuICJvYmplY3QiCi0KLSAgICAgICAgQHN0YXRpY21l
dGhvZAotICAgICAgICBkZWYgZ2V0X291dHB1dF9hcmd1bWVudF9wcmVmaXgoKToKLSAgICAgICAg
ICAgIHJldHVybiAiIgotCi0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGdldF92
YWxpZGF0ZV9tZXRob2RfcGFyYW1zKCk6Ci0gICAgICAgICAgICBjbGFzcyBWYWxpZGF0ZU1ldGhv
ZFBhcmFtczoKLSAgICAgICAgICAgICAgICB0ZW1wbGF0ZV90eXBlID0gIk9iamVjdCIKLSAgICAg
ICAgICAgIHJldHVybiBWYWxpZGF0ZU1ldGhvZFBhcmFtcwotCi0gICAgICAgIEBzdGF0aWNtZXRo
b2QKLSAgICAgICAgZGVmIGdldF9vdXRwdXRfcGFzc19tb2RlbCgpOgotICAgICAgICAgICAgcmV0
dXJuIFJhd1R5cGVzLk91dHB1dFBhc3NNb2RlbC5CeVJlZmVyZW5jZQotCi0gICAgICAgIEBzdGF0
aWNtZXRob2QKLSAgICAgICAgZGVmIGlzX2hlYXZ5X3ZhbHVlKCk6Ci0gICAgICAgICAgICByZXR1
cm4gVHJ1ZQotCi0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGdldF9hcnJheV9p
dGVtX3Jhd19jX3R5cGVfdGV4dCgpOgotICAgICAgICAgICAgcmV0dXJuICJJbnNwZWN0b3I6Oklu
c3BlY3Rvck9iamVjdCIKLQotICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgIGRlZiBnZXRf
cmF3X3R5cGVfbW9kZWwoKToKLSAgICAgICAgICAgIHJldHVybiBUeXBlTW9kZWwuT2JqZWN0Ci0K
LSAgICBjbGFzcyBBbnkoQmFzZVR5cGUpOgotICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAg
IGRlZiBnZXRfZ2V0dGVyX25hbWUoKToKLSAgICAgICAgICAgIHJldHVybiAiVmFsdWUiCi0KLSAg
ICAgICAgZ2V0X3NldHRlcl9uYW1lID0gZ2V0X2dldHRlcl9uYW1lCi0KLSAgICAgICAgQHN0YXRp
Y21ldGhvZAotICAgICAgICBkZWYgZ2V0X2NfaW5pdGlhbGl6ZXIoKToKLSAgICAgICAgICAgIHJh
aXNlIEV4Y2VwdGlvbigiVW5zdXBwb3J0ZWQiKQotCi0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAg
ICAgICAgZGVmIGdldF9qc19iaW5kX3R5cGUoKToKLSAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlv
bigiVW5zdXBwb3J0ZWQiKQotCi0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGdl
dF9yYXdfdmFsaWRhdG9yX2NhbGxfdGV4dCgpOgotICAgICAgICAgICAgcmV0dXJuICJSdW50aW1l
Q2FzdEhlbHBlcjo6YXNzZXJ0QW55IgotCi0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAg
ZGVmIGdldF9vdXRwdXRfcGFzc19tb2RlbCgpOgotICAgICAgICAgICAgcmV0dXJuIFJhd1R5cGVz
Lk91dHB1dFBhc3NNb2RlbC5CeVJlZmVyZW5jZQotCi0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAg
ICAgICAgZGVmIGlzX2hlYXZ5X3ZhbHVlKCk6Ci0gICAgICAgICAgICByZXR1cm4gVHJ1ZQotCi0g
ICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGdldF9hcnJheV9pdGVtX3Jhd19jX3R5
cGVfdGV4dCgpOgotICAgICAgICAgICAgcmV0dXJuICJJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVl
IgotCi0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGdldF9yYXdfdHlwZV9tb2Rl
bCgpOgotICAgICAgICAgICAgcmV0dXJuIFR5cGVNb2RlbC5BbnkKLQotICAgIGNsYXNzIEFycmF5
KEJhc2VUeXBlKToKLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBkZWYgZ2V0X2dldHRl
cl9uYW1lKCk6Ci0gICAgICAgICAgICByZXR1cm4gIkFycmF5IgotCi0gICAgICAgIEBzdGF0aWNt
ZXRob2QKLSAgICAgICAgZGVmIGdldF9zZXR0ZXJfbmFtZSgpOgotICAgICAgICAgICAgcmV0dXJu
ICJWYWx1ZSIKLQotICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgIGRlZiBnZXRfY19pbml0
aWFsaXplcigpOgotICAgICAgICAgICAgcmV0dXJuICJJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCki
Ci0KLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBkZWYgZ2V0X2pzX2JpbmRfdHlwZSgp
OgotICAgICAgICAgICAgcmV0dXJuICJvYmplY3QiCi0KLSAgICAgICAgQHN0YXRpY21ldGhvZAot
ICAgICAgICBkZWYgZ2V0X291dHB1dF9hcmd1bWVudF9wcmVmaXgoKToKLSAgICAgICAgICAgIHJl
dHVybiAiIgotCi0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGdldF92YWxpZGF0
ZV9tZXRob2RfcGFyYW1zKCk6Ci0gICAgICAgICAgICBjbGFzcyBWYWxpZGF0ZU1ldGhvZFBhcmFt
czoKLSAgICAgICAgICAgICAgICB0ZW1wbGF0ZV90eXBlID0gIkFycmF5IgotICAgICAgICAgICAg
cmV0dXJuIFZhbGlkYXRlTWV0aG9kUGFyYW1zCi0KLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAg
ICAgICBkZWYgZ2V0X291dHB1dF9wYXNzX21vZGVsKCk6Ci0gICAgICAgICAgICByZXR1cm4gUmF3
VHlwZXMuT3V0cHV0UGFzc01vZGVsLkJ5UmVmZXJlbmNlCi0KLSAgICAgICAgQHN0YXRpY21ldGhv
ZAotICAgICAgICBkZWYgaXNfaGVhdnlfdmFsdWUoKToKLSAgICAgICAgICAgIHJldHVybiBUcnVl
Ci0KLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBkZWYgZ2V0X2FycmF5X2l0ZW1fcmF3
X2NfdHlwZV90ZXh0KCk6Ci0gICAgICAgICAgICByZXR1cm4gIkluc3BlY3Rvcjo6SW5zcGVjdG9y
QXJyYXkiCi0KLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBkZWYgZ2V0X3Jhd190eXBl
X21vZGVsKCk6Ci0gICAgICAgICAgICByZXR1cm4gVHlwZU1vZGVsLkFycmF5Ci0KLQotZGVmIHJl
cGxhY2VfcmlnaHRfc2hpZnQoaW5wdXRfc3RyKToKLSAgICByZXR1cm4gaW5wdXRfc3RyLnJlcGxh
Y2UoIj4+IiwgIj4gPiIpCi0KLQotY2xhc3MgQ29tbWFuZFJldHVyblBhc3NNb2RlbDoKLSAgICBj
bGFzcyBCeVJlZmVyZW5jZToKLSAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZhcl90eXBlLCBz
ZXRfY29uZGl0aW9uKToKLSAgICAgICAgICAgIHNlbGYudmFyX3R5cGUgPSB2YXJfdHlwZQotICAg
ICAgICAgICAgc2VsZi5zZXRfY29uZGl0aW9uID0gc2V0X2NvbmRpdGlvbgotCi0gICAgICAgIGRl
ZiBnZXRfcmV0dXJuX3Zhcl90eXBlKHNlbGYpOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYudmFy
X3R5cGUKLQotICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgIGRlZiBnZXRfb3V0cHV0X2Fy
Z3VtZW50X3ByZWZpeCgpOgotICAgICAgICAgICAgcmV0dXJuICIiCi0KLSAgICAgICAgQHN0YXRp
Y21ldGhvZAotICAgICAgICBkZWYgZ2V0X291dHB1dF90b19yYXdfZXhwcmVzc2lvbigpOgotICAg
ICAgICAgICAgcmV0dXJuICIlcyIKLQotICAgICAgICBkZWYgZ2V0X291dHB1dF9wYXJhbWV0ZXJf
dHlwZShzZWxmKToKLSAgICAgICAgICAgIHJldHVybiBzZWxmLnZhcl90eXBlICsgIiYiCi0KLSAg
ICAgICAgZGVmIGdldF9zZXRfcmV0dXJuX2NvbmRpdGlvbihzZWxmKToKLSAgICAgICAgICAgIHJl
dHVybiBzZWxmLnNldF9jb25kaXRpb24KLQotICAgIGNsYXNzIEJ5UG9pbnRlcjoKLSAgICAgICAg
ZGVmIF9faW5pdF9fKHNlbGYsIHZhcl90eXBlKToKLSAgICAgICAgICAgIHNlbGYudmFyX3R5cGUg
PSB2YXJfdHlwZQotCi0gICAgICAgIGRlZiBnZXRfcmV0dXJuX3Zhcl90eXBlKHNlbGYpOgotICAg
ICAgICAgICAgcmV0dXJuIHNlbGYudmFyX3R5cGUKLQotICAgICAgICBAc3RhdGljbWV0aG9kCi0g
ICAgICAgIGRlZiBnZXRfb3V0cHV0X2FyZ3VtZW50X3ByZWZpeCgpOgotICAgICAgICAgICAgcmV0
dXJuICImIgotCi0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGdldF9vdXRwdXRf
dG9fcmF3X2V4cHJlc3Npb24oKToKLSAgICAgICAgICAgIHJldHVybiAiJXMiCi0KLSAgICAgICAg
ZGVmIGdldF9vdXRwdXRfcGFyYW1ldGVyX3R5cGUoc2VsZik6Ci0gICAgICAgICAgICByZXR1cm4g
c2VsZi52YXJfdHlwZSArICIqIgotCi0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVm
IGdldF9zZXRfcmV0dXJuX2NvbmRpdGlvbigpOgotICAgICAgICAgICAgcmV0dXJuIE5vbmUKLQot
ICAgIGNsYXNzIE9wdE91dHB1dDoKLSAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZhcl90eXBl
KToKLSAgICAgICAgICAgIHNlbGYudmFyX3R5cGUgPSB2YXJfdHlwZQotCi0gICAgICAgIGRlZiBn
ZXRfcmV0dXJuX3Zhcl90eXBlKHNlbGYpOgotICAgICAgICAgICAgcmV0dXJuICJJbnNwZWN0b3I6
OlR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8JXM+IiAlIHNlbGYudmFyX3R5cGUKLQotICAgICAgICBA
c3RhdGljbWV0aG9kCi0gICAgICAgIGRlZiBnZXRfb3V0cHV0X2FyZ3VtZW50X3ByZWZpeCgpOgot
ICAgICAgICAgICAgcmV0dXJuICImIgotCi0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAg
ZGVmIGdldF9vdXRwdXRfdG9fcmF3X2V4cHJlc3Npb24oKToKLSAgICAgICAgICAgIHJldHVybiAi
JXMuZ2V0VmFsdWUoKSIKLQotICAgICAgICBkZWYgZ2V0X291dHB1dF9wYXJhbWV0ZXJfdHlwZShz
ZWxmKToKLSAgICAgICAgICAgIHJldHVybiAiSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6T3B0T3V0
cHV0PCVzPioiICUgc2VsZi52YXJfdHlwZQotCi0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAg
ICAgZGVmIGdldF9zZXRfcmV0dXJuX2NvbmRpdGlvbigpOgotICAgICAgICAgICAgcmV0dXJuICIl
cy5pc0Fzc2lnbmVkKCkiCi0KLQotY2xhc3MgVHlwZU1vZGVsOgotICAgIGNsYXNzIFJlZlB0ckJh
c2VkKG9iamVjdCk6Ci0gICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjbGFzc19uYW1lKToKLSAg
ICAgICAgICAgIHNlbGYuY2xhc3NfbmFtZSA9IGNsYXNzX25hbWUKLSAgICAgICAgICAgIHNlbGYu
b3B0aW9uYWwgPSBGYWxzZQotCi0gICAgICAgIGRlZiBnZXRfb3B0aW9uYWwoc2VsZik6Ci0gICAg
ICAgICAgICByZXN1bHQgPSBUeXBlTW9kZWwuUmVmUHRyQmFzZWQoc2VsZi5jbGFzc19uYW1lKQot
ICAgICAgICAgICAgcmVzdWx0Lm9wdGlvbmFsID0gVHJ1ZQotICAgICAgICAgICAgcmV0dXJuIHJl
c3VsdAotCi0gICAgICAgIGRlZiBnZXRfY29tbWFuZF9yZXR1cm5fcGFzc19tb2RlbChzZWxmKToK
LSAgICAgICAgICAgIGlmIHNlbGYub3B0aW9uYWw6Ci0gICAgICAgICAgICAgICAgc2V0X2NvbmRp
dGlvbiA9ICIlcyIKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2V0X2NvbmRp
dGlvbiA9IE5vbmUKLSAgICAgICAgICAgIHJldHVybiBDb21tYW5kUmV0dXJuUGFzc01vZGVsLkJ5
UmVmZXJlbmNlKHJlcGxhY2VfcmlnaHRfc2hpZnQoIlJlZlB0cjwlcz4iICUgc2VsZi5jbGFzc19u
YW1lKSwgc2V0X2NvbmRpdGlvbikKLQotICAgICAgICBkZWYgZ2V0X2lucHV0X3BhcmFtX3R5cGVf
dGV4dChzZWxmKToKLSAgICAgICAgICAgIHJldHVybiByZXBsYWNlX3JpZ2h0X3NoaWZ0KCJQYXNz
UmVmUHRyPCVzPiIgJSBzZWxmLmNsYXNzX25hbWUpCi0KLSAgICAgICAgQHN0YXRpY21ldGhvZAot
ICAgICAgICBkZWYgZ2V0X2V2ZW50X3NldHRlcl9leHByZXNzaW9uX3BhdHRlcm4oKToKLSAgICAg
ICAgICAgIHJldHVybiAiJXMiCi0KLSAgICBjbGFzcyBFbnVtKG9iamVjdCk6Ci0gICAgICAgIGRl
ZiBfX2luaXRfXyhzZWxmLCBiYXNlX3R5cGVfbmFtZSk6Ci0gICAgICAgICAgICBzZWxmLnR5cGVf
bmFtZSA9IGJhc2VfdHlwZV9uYW1lICsgIjo6RW51bSIKLQotICAgICAgICBkZWYgZ2V0X29wdGlv
bmFsKGJhc2Vfc2VsZik6Ci0gICAgICAgICAgICBjbGFzcyBFbnVtT3B0aW9uYWw6Ci0gICAgICAg
ICAgICAgICAgQGNsYXNzbWV0aG9kCi0gICAgICAgICAgICAgICAgZGVmIGdldF9vcHRpb25hbChj
bHMpOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2xzCi0KLSAgICAgICAgICAgICAgICBA
c3RhdGljbWV0aG9kCi0gICAgICAgICAgICAgICAgZGVmIGdldF9jb21tYW5kX3JldHVybl9wYXNz
X21vZGVsKCk6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBDb21tYW5kUmV0dXJuUGFzc01v
ZGVsLk9wdE91dHB1dChiYXNlX3NlbGYudHlwZV9uYW1lKQotCi0gICAgICAgICAgICAgICAgQHN0
YXRpY21ldGhvZAotICAgICAgICAgICAgICAgIGRlZiBnZXRfaW5wdXRfcGFyYW1fdHlwZV90ZXh0
KCk6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBiYXNlX3NlbGYudHlwZV9uYW1lICsgIioi
Ci0KLSAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICAgICAgZGVmIGdl
dF9ldmVudF9zZXR0ZXJfZXhwcmVzc2lvbl9wYXR0ZXJuKCk6Ci0gICAgICAgICAgICAgICAgICAg
IHJhaXNlIEV4Y2VwdGlvbigiVE9ETyIpCi0gICAgICAgICAgICByZXR1cm4gRW51bU9wdGlvbmFs
Ci0KLSAgICAgICAgZGVmIGdldF9jb21tYW5kX3JldHVybl9wYXNzX21vZGVsKHNlbGYpOgotICAg
ICAgICAgICAgcmV0dXJuIENvbW1hbmRSZXR1cm5QYXNzTW9kZWwuQnlQb2ludGVyKHNlbGYudHlw
ZV9uYW1lKQotCi0gICAgICAgIGRlZiBnZXRfaW5wdXRfcGFyYW1fdHlwZV90ZXh0KHNlbGYpOgot
ICAgICAgICAgICAgcmV0dXJuIHNlbGYudHlwZV9uYW1lCi0KLSAgICAgICAgQHN0YXRpY21ldGhv
ZAotICAgICAgICBkZWYgZ2V0X2V2ZW50X3NldHRlcl9leHByZXNzaW9uX3BhdHRlcm4oKToKLSAg
ICAgICAgICAgIHJldHVybiAiJXMiCi0KLSAgICBjbGFzcyBWYWx1ZVR5cGUob2JqZWN0KToKLSAg
ICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHR5cGVfbmFtZSwgaXNfaGVhdnkpOgotICAgICAgICAg
ICAgc2VsZi50eXBlX25hbWUgPSB0eXBlX25hbWUKLSAgICAgICAgICAgIHNlbGYuaXNfaGVhdnkg
PSBpc19oZWF2eQotCi0gICAgICAgIGRlZiBnZXRfb3B0aW9uYWwoc2VsZik6Ci0gICAgICAgICAg
ICByZXR1cm4gc2VsZi5WYWx1ZU9wdGlvbmFsKHNlbGYpCi0KLSAgICAgICAgZGVmIGdldF9jb21t
YW5kX3JldHVybl9wYXNzX21vZGVsKHNlbGYpOgotICAgICAgICAgICAgcmV0dXJuIENvbW1hbmRS
ZXR1cm5QYXNzTW9kZWwuQnlQb2ludGVyKHNlbGYudHlwZV9uYW1lKQotCi0gICAgICAgIGRlZiBn
ZXRfaW5wdXRfcGFyYW1fdHlwZV90ZXh0KHNlbGYpOgotICAgICAgICAgICAgaWYgc2VsZi5pc19o
ZWF2eToKLSAgICAgICAgICAgICAgICByZXR1cm4gImNvbnN0ICVzJiIgJSBzZWxmLnR5cGVfbmFt
ZQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi50eXBlX25h
bWUKLQotICAgICAgICBkZWYgZ2V0X29wdF9vdXRwdXRfdHlwZV8oc2VsZik6Ci0gICAgICAgICAg
ICByZXR1cm4gc2VsZi50eXBlX25hbWUKLQotICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAg
IGRlZiBnZXRfZXZlbnRfc2V0dGVyX2V4cHJlc3Npb25fcGF0dGVybigpOgotICAgICAgICAgICAg
cmV0dXJuICIlcyIKLQotICAgICAgICBjbGFzcyBWYWx1ZU9wdGlvbmFsOgotICAgICAgICAgICAg
ZGVmIF9faW5pdF9fKHNlbGYsIGJhc2UpOgotICAgICAgICAgICAgICAgIHNlbGYuYmFzZSA9IGJh
c2UKLQotICAgICAgICAgICAgZGVmIGdldF9vcHRpb25hbChzZWxmKToKLSAgICAgICAgICAgICAg
ICByZXR1cm4gc2VsZgotCi0gICAgICAgICAgICBkZWYgZ2V0X2NvbW1hbmRfcmV0dXJuX3Bhc3Nf
bW9kZWwoc2VsZik6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIENvbW1hbmRSZXR1cm5QYXNzTW9k
ZWwuT3B0T3V0cHV0KHNlbGYuYmFzZS5nZXRfb3B0X291dHB1dF90eXBlXygpKQotCi0gICAgICAg
ICAgICBkZWYgZ2V0X2lucHV0X3BhcmFtX3R5cGVfdGV4dChzZWxmKToKLSAgICAgICAgICAgICAg
ICByZXR1cm4gImNvbnN0ICVzKiBjb25zdCIgJSBzZWxmLmJhc2UudHlwZV9uYW1lCi0KLSAgICAg
ICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgIGRlZiBnZXRfZXZlbnRfc2V0dGVyX2V4
cHJlc3Npb25fcGF0dGVybigpOgotICAgICAgICAgICAgICAgIHJldHVybiAiKiVzIgotCi0gICAg
Y2xhc3MgRXhhY3RseUludChWYWx1ZVR5cGUpOgotICAgICAgICBkZWYgX19pbml0X18oc2VsZik6
Ci0gICAgICAgICAgICBUeXBlTW9kZWwuVmFsdWVUeXBlLl9faW5pdF9fKHNlbGYsICJpbnQiLCBG
YWxzZSkKLQotICAgICAgICBkZWYgZ2V0X2lucHV0X3BhcmFtX3R5cGVfdGV4dChzZWxmKToKLSAg
ICAgICAgICAgIHJldHVybiAiSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6RXhhY3RseUludCIKLQot
ICAgICAgICBkZWYgZ2V0X29wdF9vdXRwdXRfdHlwZV8oc2VsZik6Ci0gICAgICAgICAgICByZXR1
cm4gIkluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkV4YWN0bHlJbnQiCi0KLSAgICBAY2xhc3NtZXRo
b2QKLSAgICBkZWYgaW5pdF9jbGFzcyhjbHMpOgotICAgICAgICBjbHMuQm9vbCA9IGNscy5WYWx1
ZVR5cGUoImJvb2wiLCBGYWxzZSkKLSAgICAgICAgaWYgRVhBQ1RMWV9JTlRfU1VQUE9SVEVEOgot
ICAgICAgICAgICAgY2xzLkludCA9IGNscy5FeGFjdGx5SW50KCkKLSAgICAgICAgZWxzZToKLSAg
ICAgICAgICAgIGNscy5JbnQgPSBjbHMuVmFsdWVUeXBlKCJpbnQiLCBGYWxzZSkKLSAgICAgICAg
Y2xzLk51bWJlciA9IGNscy5WYWx1ZVR5cGUoImRvdWJsZSIsIEZhbHNlKQotICAgICAgICBjbHMu
U3RyaW5nID0gY2xzLlZhbHVlVHlwZSgiU3RyaW5nIiwgVHJ1ZSwpCi0gICAgICAgIGNscy5PYmpl
Y3QgPSBjbHMuUmVmUHRyQmFzZWQoIkluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0IikKLSAgICAg
ICAgY2xzLkFycmF5ID0gY2xzLlJlZlB0ckJhc2VkKCJJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5
IikKLSAgICAgICAgY2xzLkFueSA9IGNscy5SZWZQdHJCYXNlZCgiSW5zcGVjdG9yOjpJbnNwZWN0
b3JWYWx1ZSIpCi0KLVR5cGVNb2RlbC5pbml0X2NsYXNzKCkKLQotCi0jIENvbGxlY3Rpb24gb2Yg
SW5zcGVjdG9yT2JqZWN0IGNsYXNzIG1ldGhvZHMgdGhhdCBhcmUgbGlrZWx5IHRvIGJlIG92ZXJs
b2FkZWQgaW4gZ2VuZXJhdGVkIGNsYXNzLgotIyBXZSBtdXN0IGV4cGxpY2l0bHkgaW1wb3J0IGFs
bCBvdmVybG9hZGVkIG1ldGhvZHMgb3IgdGhleSB3b24ndCBiZSBhdmFpbGFibGUgdG8gdXNlci4K
LUlOU1BFQ1RPUl9PQkpFQ1RfU0VUVEVSX05BTUVTID0gZnJvemVuc2V0KFsic2V0VmFsdWUiLCAi
c2V0Qm9vbGVhbiIsICJzZXROdW1iZXIiLCAic2V0U3RyaW5nIiwgInNldFZhbHVlIiwgInNldE9i
amVjdCIsICJzZXRBcnJheSJdKQotCi0KLWRlZiBmaXhfdHlwZV9uYW1lKGpzb25fbmFtZSk6Ci0g
ICAgaWYganNvbl9uYW1lIGluIFRZUEVfTkFNRV9GSVhfTUFQOgotICAgICAgICBmaXhlZCA9IFRZ
UEVfTkFNRV9GSVhfTUFQW2pzb25fbmFtZV0KLQotICAgICAgICBjbGFzcyBSZXN1bHQob2JqZWN0
KToKLSAgICAgICAgICAgIGNsYXNzX25hbWUgPSBmaXhlZAotCi0gICAgICAgICAgICBAc3RhdGlj
bWV0aG9kCi0gICAgICAgICAgICBkZWYgb3V0cHV0X2NvbW1lbnQod3JpdGVyKToKLSAgICAgICAg
ICAgICAgICB3cml0ZXIubmV3bGluZSgiLy8gVHlwZSBvcmlnaW5hbGx5IHdhcyBuYW1lZCAnJXMn
LlxuIiAlIGpzb25fbmFtZSkKLSAgICBlbHNlOgotCi0gICAgICAgIGNsYXNzIFJlc3VsdChvYmpl
Y3QpOgotICAgICAgICAgICAgY2xhc3NfbmFtZSA9IGpzb25fbmFtZQotCi0gICAgICAgICAgICBA
c3RhdGljbWV0aG9kCi0gICAgICAgICAgICBkZWYgb3V0cHV0X2NvbW1lbnQod3JpdGVyKToKLSAg
ICAgICAgICAgICAgICBwYXNzCi0KLSAgICByZXR1cm4gUmVzdWx0Ci0KLQotY2xhc3MgV3JpdGVy
OgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvdXRwdXQsIGluZGVudCk6Ci0gICAgICAgIHNlbGYu
b3V0cHV0ID0gb3V0cHV0Ci0gICAgICAgIHNlbGYuaW5kZW50ID0gaW5kZW50Ci0KLSAgICBkZWYg
bmV3bGluZShzZWxmLCBzdHIpOgotICAgICAgICBpZiAoc2VsZi5pbmRlbnQpOgotICAgICAgICAg
ICAgc2VsZi5vdXRwdXQuYXBwZW5kKHNlbGYuaW5kZW50KQotICAgICAgICBzZWxmLm91dHB1dC5h
cHBlbmQoc3RyKQotCi0gICAgZGVmIGFwcGVuZChzZWxmLCBzdHIpOgotICAgICAgICBzZWxmLm91
dHB1dC5hcHBlbmQoc3RyKQotCi0gICAgZGVmIG5ld2xpbmVfbXVsdGlsaW5lKHNlbGYsIHN0cik6
Ci0gICAgICAgIHBhcnRzID0gc3RyLnNwbGl0KCdcbicpCi0gICAgICAgIHNlbGYubmV3bGluZShw
YXJ0c1swXSkKLSAgICAgICAgZm9yIHAgaW4gcGFydHNbMTpdOgotICAgICAgICAgICAgc2VsZi5v
dXRwdXQuYXBwZW5kKCdcbicpCi0gICAgICAgICAgICBpZiBwOgotICAgICAgICAgICAgICAgIHNl
bGYubmV3bGluZShwKQotCi0gICAgZGVmIGFwcGVuZF9tdWx0aWxpbmUoc2VsZiwgc3RyKToKLSAg
ICAgICAgcGFydHMgPSBzdHIuc3BsaXQoJ1xuJykKLSAgICAgICAgc2VsZi5hcHBlbmQocGFydHNb
MF0pCi0gICAgICAgIGZvciBwIGluIHBhcnRzWzE6XToKLSAgICAgICAgICAgIHNlbGYub3V0cHV0
LmFwcGVuZCgnXG4nKQotICAgICAgICAgICAgaWYgcDoKLSAgICAgICAgICAgICAgICBzZWxmLm5l
d2xpbmUocCkKLQotICAgIGRlZiBnZXRfaW5kZW50KHNlbGYpOgotICAgICAgICByZXR1cm4gc2Vs
Zi5pbmRlbnQKLQotICAgIGRlZiBnZXRfaW5kZW50ZWQoc2VsZiwgYWRkaXRpb25hbF9pbmRlbnQp
OgotICAgICAgICByZXR1cm4gV3JpdGVyKHNlbGYub3V0cHV0LCBzZWxmLmluZGVudCArIGFkZGl0
aW9uYWxfaW5kZW50KQotCi0gICAgZGVmIGluc2VydF93cml0ZXIoc2VsZiwgYWRkaXRpb25hbF9p
bmRlbnQpOgotICAgICAgICBuZXdfb3V0cHV0ID0gW10KLSAgICAgICAgc2VsZi5vdXRwdXQuYXBw
ZW5kKG5ld19vdXRwdXQpCi0gICAgICAgIHJldHVybiBXcml0ZXIobmV3X291dHB1dCwgc2VsZi5p
bmRlbnQgKyBhZGRpdGlvbmFsX2luZGVudCkKLQotCi1jbGFzcyBFbnVtQ29uc3RhbnRzOgotICAg
IG1hcF8gPSB7fQotICAgIGNvbnN0YW50c18gPSBbXQotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAg
ZGVmIGFkZF9jb25zdGFudChjbHMsIHZhbHVlKToKLSAgICAgICAgaWYgdmFsdWUgaW4gY2xzLm1h
cF86Ci0gICAgICAgICAgICByZXR1cm4gY2xzLm1hcF9bdmFsdWVdCi0gICAgICAgIGVsc2U6Ci0g
ICAgICAgICAgICBwb3MgPSBsZW4oY2xzLm1hcF8pCi0gICAgICAgICAgICBjbHMubWFwX1t2YWx1
ZV0gPSBwb3MKLSAgICAgICAgICAgIGNscy5jb25zdGFudHNfLmFwcGVuZCh2YWx1ZSkKLSAgICAg
ICAgICAgIHJldHVybiBwb3MKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBnZXRfZW51bV9j
b25zdGFudF9jb2RlKGNscyk6Ci0gICAgICAgIG91dHB1dCA9IFtdCi0gICAgICAgIGZvciBpdGVt
IGluIGNscy5jb25zdGFudHNfOgotICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgiICAgIFwiIiAr
IGl0ZW0gKyAiXCIiKQotICAgICAgICByZXR1cm4gIixcbiIuam9pbihvdXRwdXQpICsgIlxuIgot
Ci0KLSMgVHlwZWJ1aWxkZXIgY29kZSBpcyBnZW5lcmF0ZWQgaW4gc2V2ZXJhbCBwYXNzZXM6IGZp
cnN0IHR5cGVkZWZzLCB0aGVuIG90aGVyIGNsYXNzZXMuCi0jIE1hbnVhbCBwYXNzIG1hbmFnZW1l
bnQgaXMgbmVlZGVkIGJlY2F1c2Ugd2UgY2Fubm90IGhhdmUgZm9yd2FyZCBkZWNsYXJhdGlvbnMg
Zm9yIHR5cGVkZWZzLgotY2xhc3MgVHlwZUJ1aWxkZXJQYXNzOgotICAgIFRZUEVERUYgPSAidHlw
ZWRlZiIKLSAgICBNQUlOID0gIm1haW4iCi0KLQotY2xhc3MgVHlwZUJpbmRpbmdzOgotICAgIEBz
dGF0aWNtZXRob2QKLSAgICBkZWYgY3JlYXRlX25hbWVkX3R5cGVfZGVjbGFyYXRpb24oanNvbl90
eXBhYmxlLCBjb250ZXh0X2RvbWFpbl9uYW1lLCB0eXBlX2RhdGEpOgotICAgICAgICBqc29uX3R5
cGUgPSB0eXBlX2RhdGEuZ2V0X2pzb25fdHlwZSgpCi0KLSAgICAgICAgY2xhc3MgSGVscGVyOgot
ICAgICAgICAgICAgaXNfYWRfaG9jID0gRmFsc2UKLSAgICAgICAgICAgIGZ1bGxfbmFtZV9wcmVm
aXhfZm9yX3VzZSA9ICJJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjoiICsgY29udGV4dF9kb21haW5f
bmFtZSArICI6OiIKLSAgICAgICAgICAgIGZ1bGxfbmFtZV9wcmVmaXhfZm9yX2ltcGwgPSAiSW5z
cGVjdG9yOjpUeXBlQnVpbGRlcjo6IiArIGNvbnRleHRfZG9tYWluX25hbWUgKyAiOjoiCi0KLSAg
ICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgIGRlZiB3cml0ZV9kb2Mod3JpdGVy
KToKLSAgICAgICAgICAgICAgICBpZiAiZGVzY3JpcHRpb24iIGluIGpzb25fdHlwZToKLSAgICAg
ICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIi8qICIpCi0gICAgICAgICAgICAgICAgICAg
IHdyaXRlci5hcHBlbmQoanNvbl90eXBlWyJkZXNjcmlwdGlvbiJdKQotICAgICAgICAgICAgICAg
ICAgICB3cml0ZXIuYXBwZW5kKCIgKi9cbiIpCi0KLSAgICAgICAgICAgIEBzdGF0aWNtZXRob2QK
LSAgICAgICAgICAgIGRlZiBhZGRfdG9fZm9yd2FyZF9saXN0ZW5lcihmb3J3YXJkX2xpc3RlbmVy
KToKLSAgICAgICAgICAgICAgICBmb3J3YXJkX2xpc3RlbmVyLmFkZF90eXBlX2RhdGEodHlwZV9k
YXRhKQotCi0KLSAgICAgICAgZml4ZWRfdHlwZV9uYW1lID0gZml4X3R5cGVfbmFtZShqc29uX3R5
cGVbImlkIl0pCi0gICAgICAgIHJldHVybiBUeXBlQmluZGluZ3MuY3JlYXRlX3R5cGVfZGVjbGFy
YXRpb25fKGpzb25fdHlwYWJsZSwgY29udGV4dF9kb21haW5fbmFtZSwgZml4ZWRfdHlwZV9uYW1l
LCBIZWxwZXIpCi0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIGNyZWF0ZV9hZF9ob2NfdHlw
ZV9kZWNsYXJhdGlvbihqc29uX3R5cGFibGUsIGNvbnRleHRfZG9tYWluX25hbWUsIGFkX2hvY190
eXBlX2NvbnRleHQpOgotICAgICAgICBjbGFzcyBIZWxwZXI6Ci0gICAgICAgICAgICBpc19hZF9o
b2MgPSBUcnVlCi0gICAgICAgICAgICBmdWxsX25hbWVfcHJlZml4X2Zvcl91c2UgPSBhZF9ob2Nf
dHlwZV9jb250ZXh0LmNvbnRhaW5lcl9yZWxhdGl2ZV9uYW1lX3ByZWZpeAotICAgICAgICAgICAg
ZnVsbF9uYW1lX3ByZWZpeF9mb3JfaW1wbCA9IGFkX2hvY190eXBlX2NvbnRleHQuY29udGFpbmVy
X2Z1bGxfbmFtZV9wcmVmaXgKLQotICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAg
ICAgZGVmIHdyaXRlX2RvYyh3cml0ZXIpOgotICAgICAgICAgICAgICAgIHBhc3MKLQotICAgICAg
ICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgZGVmIGFkZF90b19mb3J3YXJkX2xpc3Rl
bmVyKGZvcndhcmRfbGlzdGVuZXIpOgotICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgZml4
ZWRfdHlwZV9uYW1lID0gYWRfaG9jX3R5cGVfY29udGV4dC5nZXRfdHlwZV9uYW1lX2ZpeCgpCi0g
ICAgICAgIHJldHVybiBUeXBlQmluZGluZ3MuY3JlYXRlX3R5cGVfZGVjbGFyYXRpb25fKGpzb25f
dHlwYWJsZSwgY29udGV4dF9kb21haW5fbmFtZSwgZml4ZWRfdHlwZV9uYW1lLCBIZWxwZXIpCi0K
LSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIGNyZWF0ZV90eXBlX2RlY2xhcmF0aW9uXyhqc29u
X3R5cGFibGUsIGNvbnRleHRfZG9tYWluX25hbWUsIGZpeGVkX3R5cGVfbmFtZSwgaGVscGVyKToK
LSAgICAgICAgaWYganNvbl90eXBhYmxlWyJ0eXBlIl0gPT0gInN0cmluZyI6Ci0gICAgICAgICAg
ICBpZiAiZW51bSIgaW4ganNvbl90eXBhYmxlOgotCi0gICAgICAgICAgICAgICAgY2xhc3MgRW51
bUJpbmRpbmc6Ci0gICAgICAgICAgICAgICAgICAgIG5lZWRfdXNlcl9ydW50aW1lX2Nhc3RfID0g
RmFsc2UKLSAgICAgICAgICAgICAgICAgICAgbmVlZF9pbnRlcm5hbF9ydW50aW1lX2Nhc3RfID0g
RmFsc2UKLQotICAgICAgICAgICAgICAgICAgICBAY2xhc3NtZXRob2QKLSAgICAgICAgICAgICAg
ICAgICAgZGVmIHJlc29sdmVfaW5uZXIoY2xzLCByZXNvbHZlX2NvbnRleHQpOgotICAgICAgICAg
ICAgICAgICAgICAgICAgcGFzcwotCi0gICAgICAgICAgICAgICAgICAgIEBjbGFzc21ldGhvZAot
ICAgICAgICAgICAgICAgICAgICBkZWYgcmVxdWVzdF91c2VyX3J1bnRpbWVfY2FzdChjbHMsIHJl
cXVlc3QpOgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgcmVxdWVzdDoKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjbHMubmVlZF91c2VyX3J1bnRpbWVfY2FzdF8gPSBUcnVlCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5hY2tub3dsZWRnZSgpCi0KLSAgICAgICAg
ICAgICAgICAgICAgQGNsYXNzbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgIGRlZiByZXF1ZXN0
X2ludGVybmFsX3J1bnRpbWVfY2FzdChjbHMpOgotICAgICAgICAgICAgICAgICAgICAgICAgY2xz
Lm5lZWRfaW50ZXJuYWxfcnVudGltZV9jYXN0XyA9IFRydWUKLQotICAgICAgICAgICAgICAgICAg
ICBAY2xhc3NtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgZGVmIGdldF9jb2RlX2dlbmVyYXRv
cihlbnVtX2JpbmRpbmdfY2xzKToKLSAgICAgICAgICAgICAgICAgICAgICAgICNGSVhNRTogZ2Vu
ZXJhdGUgYWQtaG9jIGVudW1zIHRvbyBvbmNlIHdlIGZpZ3VyZSBvdXQgaG93IHRvIGJldHRlciBp
bXBsZW1lbnQgdGhlbSBpbiBDKysuCi0gICAgICAgICAgICAgICAgICAgICAgICBjb21tZW50X291
dCA9IGhlbHBlci5pc19hZF9ob2MKLQotICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3MgQ29k
ZUdlbmVyYXRvcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmIGdlbmVyYXRlX3R5cGVfYnVpbGRlcih3cml0
ZXIsIGdlbmVyYXRlX2NvbnRleHQpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBl
bnVtID0ganNvbl90eXBhYmxlWyJlbnVtIl0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaGVscGVyLndyaXRlX2RvYyh3cml0ZXIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGVudW1fbmFtZSA9IGZpeGVkX3R5cGVfbmFtZS5jbGFzc19uYW1lCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGZpeGVkX3R5cGVfbmFtZS5vdXRwdXRfY29tbWVudCh3cml0ZXIp
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCJzdHJ1Y3Qg
IikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVuZChlbnVtX25h
bWUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5hcHBlbmQoIiB7XG4i
KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3bGluZSgiICAgIGVu
dW0gRW51bSB7XG4iKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgZW51bV9p
dGVtIGluIGVudW06Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtX3Bv
cyA9IEVudW1Db25zdGFudHMuYWRkX2NvbnN0YW50KGVudW1faXRlbSkKLQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaXRlbV9jX25hbWUgPSBmaXhfY2FtZWxfY2FzZShlbnVt
X2l0ZW0pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBpdGVtX2NfbmFt
ZSBpbiBUWVBFX05BTUVfRklYX01BUDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpdGVtX2NfbmFtZSA9IFRZUEVfTkFNRV9GSVhfTUFQW2l0ZW1fY19uYW1lXQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIiAgICAgICAg
IikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5hcHBlbmQoaXRl
bV9jX25hbWUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuYXBw
ZW5kKCIgPSAiKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLmFw
cGVuZCgiJXMiICUgZW51bV9wb3MpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB3cml0ZXIuYXBwZW5kKCIsXG4iKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3
cml0ZXIubmV3bGluZSgiICAgIH07XG4iKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiBlbnVtX2JpbmRpbmdfY2xzLm5lZWRfdXNlcl9ydW50aW1lX2Nhc3RfOgotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJOb3QgeWV0IGltcGxl
bWVudGVkIikKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBlbnVtX2JpbmRp
bmdfY2xzLm5lZWRfaW50ZXJuYWxfcnVudGltZV9jYXN0XzoKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHdyaXRlci5hcHBlbmQoIiNpZiAlc1xuIiAlIFZBTElEQVRPUl9JRkRF
Rl9OQU1FKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xp
bmUoIiAgICBzdGF0aWMgdm9pZCBhc3NlcnRDb3JyZWN0VmFsdWUoSW5zcGVjdG9yOjpJbnNwZWN0
b3JWYWx1ZSogdmFsdWUpO1xuIikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHdyaXRlci5hcHBlbmQoIiNlbmRpZiAgLy8gJXNcbiIgJSBWQUxJREFUT1JfSUZERUZfTkFNRSkK
LQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlciA9
IGdlbmVyYXRlX2NvbnRleHQudmFsaWRhdG9yX3dyaXRlcgotCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkb21haW5fZml4ZXMgPSBEb21haW5OYW1lRml4ZXMuZ2V0X2ZpeGVk
X2RhdGEoY29udGV4dF9kb21haW5fbmFtZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRvbWFpbl9ndWFyZCA9IGRvbWFpbl9maXhlcy5nZXRfZ3VhcmQoKQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgZG9tYWluX2d1YXJkOgotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbWFpbl9ndWFyZC5nZW5lcmF0ZV9vcGVuKHZh
bGlkYXRvcl93cml0ZXIpCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZh
bGlkYXRvcl93cml0ZXIubmV3bGluZSgidm9pZCAlcyVzOjphc3NlcnRDb3JyZWN0VmFsdWUoSW5z
cGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSogdmFsdWUpXG4iICUgKGhlbHBlci5mdWxsX25hbWVfcHJl
Zml4X2Zvcl9pbXBsLCBlbnVtX25hbWUpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCJ7XG4iKQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCIgICAgV1RGOjpTdHJp
bmcgcztcbiIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jf
d3JpdGVyLm5ld2xpbmUoIiAgICBib29sIGNhc3RfcmVzID0gdmFsdWUtPmFzU3RyaW5nKCZzKTtc
biIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVy
Lm5ld2xpbmUoIiAgICBBU1NFUlQoY2FzdF9yZXMpO1xuIikKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIGxlbihlbnVtKSA+IDA6Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uZGl0aW9uX2xpc3QgPSBbXQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZvciBlbnVtX2l0ZW0gaW4gZW51bToKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bV9wb3MgPSBFbnVtQ29uc3RhbnRz
LmFkZF9jb25zdGFudChlbnVtX2l0ZW0pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbmRpdGlvbl9saXN0LmFwcGVuZCgicyA9PSBcIiVzXCIiICUgZW51bV9p
dGVtKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93
cml0ZXIubmV3bGluZSgiICAgIEFTU0VSVCglcyk7XG4iICUgIiB8fCAiLmpvaW4oY29uZGl0aW9u
X2xpc3QpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dy
aXRlci5uZXdsaW5lKCJ9XG4iKQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiBkb21haW5fZ3VhcmQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZG9tYWluX2d1YXJkLmdlbmVyYXRlX2Nsb3NlKHZhbGlkYXRvcl93cml0ZXIpCi0KLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgi
XG5cbiIpCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUo
In07IC8vIHN0cnVjdCAiKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIu
YXBwZW5kKGVudW1fbmFtZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVy
LmFwcGVuZCgiXG4iKQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhv
ZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZiByZWdpc3Rlcl91c2UoZm9yd2FyZF9s
aXN0ZW5lcik6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKLQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkZWYgZ2V0X2dlbmVyYXRlX3Bhc3NfaWQoKToKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIFR5cGVCdWlsZGVyUGFzcy5NQUlOCi0KLSAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBDb2RlR2VuZXJhdG9yCi0KLSAgICAgICAgICAgICAgICAgICAgQGNs
YXNzbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgIGRlZiBnZXRfdmFsaWRhdG9yX2NhbGxfdGV4
dChjbHMpOgotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhlbHBlci5mdWxsX25hbWVf
cHJlZml4X2Zvcl91c2UgKyBmaXhlZF90eXBlX25hbWUuY2xhc3NfbmFtZSArICI6OmFzc2VydENv
cnJlY3RWYWx1ZSIKLQotICAgICAgICAgICAgICAgICAgICBAY2xhc3NtZXRob2QKLSAgICAgICAg
ICAgICAgICAgICAgZGVmIGdldF9hcnJheV9pdGVtX2NfdHlwZV90ZXh0KGNscyk6Ci0gICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gaGVscGVyLmZ1bGxfbmFtZV9wcmVmaXhfZm9yX3VzZSAr
IGZpeGVkX3R5cGVfbmFtZS5jbGFzc19uYW1lICsgIjo6RW51bSIKLQotICAgICAgICAgICAgICAg
ICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgIGRlZiBnZXRfc2V0dGVyX3Zh
bHVlX2V4cHJlc3Npb25fcGF0dGVybigpOgotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
ICJJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpnZXQlc0VudW1Db25zdGFudFZhbHVlKCVzKSIKLQot
ICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgIGRl
ZiByZWR1Y2VfdG9fcmF3X3R5cGUoKToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBS
YXdUeXBlcy5TdHJpbmcKLQotICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAg
ICAgICAgICAgICAgICAgIGRlZiBnZXRfdHlwZV9tb2RlbCgpOgotICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIFR5cGVNb2RlbC5FbnVtKGhlbHBlci5mdWxsX25hbWVfcHJlZml4X2Zvcl91
c2UgKyBmaXhlZF90eXBlX25hbWUuY2xhc3NfbmFtZSkKLQotICAgICAgICAgICAgICAgIHJldHVy
biBFbnVtQmluZGluZwotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBpZiBoZWxw
ZXIuaXNfYWRfaG9jOgotCi0gICAgICAgICAgICAgICAgICAgIGNsYXNzIFBsYWluU3RyaW5nOgot
ICAgICAgICAgICAgICAgICAgICAgICAgQGNsYXNzbWV0aG9kCi0gICAgICAgICAgICAgICAgICAg
ICAgICBkZWYgcmVzb2x2ZV9pbm5lcihjbHMsIHJlc29sdmVfY29udGV4dCk6Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcGFzcwotCi0gICAgICAgICAgICAgICAgICAgICAgICBAc3RhdGlj
bWV0aG9kCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWYgcmVxdWVzdF91c2VyX3J1bnRpbWVf
Y2FzdChyZXF1ZXN0KToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRp
b24oIlVuc3VwcG9ydGVkIikKLQotICAgICAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhv
ZAotICAgICAgICAgICAgICAgICAgICAgICAgZGVmIHJlcXVlc3RfaW50ZXJuYWxfcnVudGltZV9j
YXN0KCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzcwotCi0gICAgICAgICAgICAg
ICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0
X2NvZGVfZ2VuZXJhdG9yKCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5v
bmUKLQotICAgICAgICAgICAgICAgICAgICAgICAgQGNsYXNzbWV0aG9kCi0gICAgICAgICAgICAg
ICAgICAgICAgICBkZWYgZ2V0X3ZhbGlkYXRvcl9jYWxsX3RleHQoY2xzKToKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gUmF3VHlwZXMuU3RyaW5nLmdldF9yYXdfdmFsaWRhdG9y
X2NhbGxfdGV4dCgpCi0KLSAgICAgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGRlZiByZWR1Y2VfdG9fcmF3X3R5cGUoKToKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmF3VHlwZXMuU3RyaW5nCi0KLSAgICAgICAgICAg
ICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBn
ZXRfdHlwZV9tb2RlbCgpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBUeXBl
TW9kZWwuU3RyaW5nCi0KLSAgICAgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGRlZiBnZXRfc2V0dGVyX3ZhbHVlX2V4cHJlc3Npb25fcGF0
dGVybigpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb25lCi0KLSAgICAg
ICAgICAgICAgICAgICAgICAgIEBjbGFzc21ldGhvZAotICAgICAgICAgICAgICAgICAgICAgICAg
ZGVmIGdldF9hcnJheV9pdGVtX2NfdHlwZV90ZXh0KGNscyk6Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGNscy5yZWR1Y2VfdG9fcmF3X3R5cGUoKS5nZXRfYXJyYXlfaXRlbV9y
YXdfY190eXBlX3RleHQoKQotCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBQbGFpblN0cmlu
ZwotCi0gICAgICAgICAgICAgICAgZWxzZToKLQotICAgICAgICAgICAgICAgICAgICBjbGFzcyBU
eXBlZGVmU3RyaW5nOgotICAgICAgICAgICAgICAgICAgICAgICAgQGNsYXNzbWV0aG9kCi0gICAg
ICAgICAgICAgICAgICAgICAgICBkZWYgcmVzb2x2ZV9pbm5lcihjbHMsIHJlc29sdmVfY29udGV4
dCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzcwotCi0gICAgICAgICAgICAgICAg
ICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWYgcmVxdWVz
dF91c2VyX3J1bnRpbWVfY2FzdChyZXF1ZXN0KToKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByYWlzZSBFeGNlcHRpb24oIlVuc3VwcG9ydGVkIikKLQotICAgICAgICAgICAgICAgICAgICAg
ICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgICAgICAgICAgICAgZGVmIHJlcXVlc3RfaW50
ZXJuYWxfcnVudGltZV9jYXN0KCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgUmF3VHlw
ZXMuU3RyaW5nLnJlcXVlc3RfcmF3X2ludGVybmFsX3J1bnRpbWVfY2FzdCgpCi0KLSAgICAgICAg
ICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgICAgIGRl
ZiBnZXRfY29kZV9nZW5lcmF0b3IoKToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFz
cyBDb2RlR2VuZXJhdG9yOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAc3RhdGlj
bWV0aG9kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBnZW5lcmF0ZV90eXBl
X2J1aWxkZXIod3JpdGVyLCBnZW5lcmF0ZV9jb250ZXh0KToKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGhlbHBlci53cml0ZV9kb2Mod3JpdGVyKQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZml4ZWRfdHlwZV9uYW1lLm91dHB1dF9jb21tZW50KHdyaXRl
cikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCJ0
eXBlZGVmIFN0cmluZyAiKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3Jp
dGVyLmFwcGVuZChmaXhlZF90eXBlX25hbWUuY2xhc3NfbmFtZSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHdyaXRlci5hcHBlbmQoIjtcblxuIikKLQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRlZiByZWdpc3Rlcl91c2UoZm9yd2FyZF9saXN0ZW5lcik6Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCi0KLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
ZWYgZ2V0X2dlbmVyYXRlX3Bhc3NfaWQoKToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBUeXBlQnVpbGRlclBhc3MuVFlQRURFRgotCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIENvZGVHZW5lcmF0b3IKLQotICAgICAgICAgICAgICAgICAgICAg
ICAgQGNsYXNzbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X3ZhbGlkYXRv
cl9jYWxsX3RleHQoY2xzKToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmF3
VHlwZXMuU3RyaW5nLmdldF9yYXdfdmFsaWRhdG9yX2NhbGxfdGV4dCgpCi0KLSAgICAgICAgICAg
ICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBy
ZWR1Y2VfdG9fcmF3X3R5cGUoKToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
UmF3VHlwZXMuU3RyaW5nCi0KLSAgICAgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QK
LSAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBnZXRfdHlwZV9tb2RlbCgpOgotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBUeXBlTW9kZWwuVmFsdWVUeXBlKCIlcyVzIiAlICho
ZWxwZXIuZnVsbF9uYW1lX3ByZWZpeF9mb3JfdXNlLCBmaXhlZF90eXBlX25hbWUuY2xhc3NfbmFt
ZSksIFRydWUpCi0KLSAgICAgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGRlZiBnZXRfc2V0dGVyX3ZhbHVlX2V4cHJlc3Npb25fcGF0dGVy
bigpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb25lCi0KLSAgICAgICAg
ICAgICAgICAgICAgICAgIEBjbGFzc21ldGhvZAotICAgICAgICAgICAgICAgICAgICAgICAgZGVm
IGdldF9hcnJheV9pdGVtX2NfdHlwZV90ZXh0KGNscyk6Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuICJjb25zdCAlcyVzJiIgJSAoaGVscGVyLmZ1bGxfbmFtZV9wcmVmaXhfZm9y
X3VzZSwgZml4ZWRfdHlwZV9uYW1lLmNsYXNzX25hbWUpCi0KLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIFR5cGVkZWZTdHJpbmcKLQotICAgICAgICBlbGlmIGpzb25fdHlwYWJsZVsidHlwZSJd
ID09ICJpbnRlZ2VyIjoKLSAgICAgICAgICAgICAgICBpZiBoZWxwZXIuaXNfYWRfaG9jOgotCi0g
ICAgICAgICAgICAgICAgICAgIGNsYXNzIFBsYWluSW50ZWdlcjoKLSAgICAgICAgICAgICAgICAg
ICAgICAgIEBjbGFzc21ldGhvZAotICAgICAgICAgICAgICAgICAgICAgICAgZGVmIHJlc29sdmVf
aW5uZXIoY2xzLCByZXNvbHZlX2NvbnRleHQpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHBhc3MKLQotICAgICAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAg
ICAgICAgICAgICAgICAgZGVmIHJlcXVlc3RfdXNlcl9ydW50aW1lX2Nhc3QocmVxdWVzdCk6Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJVbnN1cHBvcnRlZCIp
Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGRlZiByZXF1ZXN0X2ludGVybmFsX3J1bnRpbWVfY2FzdCgpOgotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHBhc3MKLQotICAgICAgICAgICAgICAgICAgICAgICAgQHN0YXRp
Y21ldGhvZAotICAgICAgICAgICAgICAgICAgICAgICAgZGVmIGdldF9jb2RlX2dlbmVyYXRvcigp
OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb25lCi0KLSAgICAgICAgICAg
ICAgICAgICAgICAgIEBjbGFzc21ldGhvZAotICAgICAgICAgICAgICAgICAgICAgICAgZGVmIGdl
dF92YWxpZGF0b3JfY2FsbF90ZXh0KGNscyk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIFJhd1R5cGVzLkludC5nZXRfcmF3X3ZhbGlkYXRvcl9jYWxsX3RleHQoKQotCi0gICAg
ICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgICAg
ICBkZWYgcmVkdWNlX3RvX3Jhd190eXBlKCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIFJhd1R5cGVzLkludAotCi0gICAgICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0
aG9kCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X3R5cGVfbW9kZWwoKToKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHlwZU1vZGVsLkludAotCi0gICAgICAgICAg
ICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWYg
Z2V0X3NldHRlcl92YWx1ZV9leHByZXNzaW9uX3BhdHRlcm4oKToKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gTm9uZQotCi0gICAgICAgICAgICAgICAgICAgICAgICBAY2xhc3Nt
ZXRob2QKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBnZXRfYXJyYXlfaXRlbV9jX3R5cGVf
dGV4dChjbHMpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjbHMucmVkdWNl
X3RvX3Jhd190eXBlKCkuZ2V0X2FycmF5X2l0ZW1fcmF3X2NfdHlwZV90ZXh0KCkKLQotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gUGxhaW5JbnRlZ2VyCi0KLSAgICAgICAgICAgICAgICBlbHNl
OgotCi0gICAgICAgICAgICAgICAgICAgIGNsYXNzIFR5cGVkZWZJbnRlZ2VyOgotICAgICAgICAg
ICAgICAgICAgICAgICAgQGNsYXNzbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWYg
cmVzb2x2ZV9pbm5lcihjbHMsIHJlc29sdmVfY29udGV4dCk6Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcGFzcwotCi0gICAgICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0g
ICAgICAgICAgICAgICAgICAgICAgICBkZWYgcmVxdWVzdF91c2VyX3J1bnRpbWVfY2FzdChyZXF1
ZXN0KToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIlVuc3Vw
cG9ydGVkIikKLQotICAgICAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAg
ICAgICAgICAgICAgICAgICAgZGVmIHJlcXVlc3RfaW50ZXJuYWxfcnVudGltZV9jYXN0KCk6Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgUmF3VHlwZXMuSW50LnJlcXVlc3RfcmF3X2ludGVy
bmFsX3J1bnRpbWVfY2FzdCgpCi0KLSAgICAgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRo
b2QKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBnZXRfY29kZV9nZW5lcmF0b3IoKToKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcyBDb2RlR2VuZXJhdG9yOgotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGRlZiBnZW5lcmF0ZV90eXBlX2J1aWxkZXIod3JpdGVyLCBnZW5lcmF0ZV9j
b250ZXh0KToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHBlci53cml0
ZV9kb2Mod3JpdGVyKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZml4ZWRf
dHlwZV9uYW1lLm91dHB1dF9jb21tZW50KHdyaXRlcikKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCJ0eXBlZGVmIGludCAiKQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVuZChmaXhlZF90eXBlX25hbWUuY2xh
c3NfbmFtZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5hcHBl
bmQoIjtcblxuIikKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0
aG9kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZiByZWdpc3Rlcl91c2UoZm9y
d2FyZF9saXN0ZW5lcik6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNz
Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X2dlbmVyYXRlX3Bhc3NfaWQoKToKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBUeXBlQnVpbGRlclBhc3Mu
VFlQRURFRgotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENvZGVHZW5lcmF0
b3IKLQotICAgICAgICAgICAgICAgICAgICAgICAgQGNsYXNzbWV0aG9kCi0gICAgICAgICAgICAg
ICAgICAgICAgICBkZWYgZ2V0X3ZhbGlkYXRvcl9jYWxsX3RleHQoY2xzKToKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gUmF3VHlwZXMuSW50LmdldF9yYXdfdmFsaWRhdG9yX2Nh
bGxfdGV4dCgpCi0KLSAgICAgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGRlZiByZWR1Y2VfdG9fcmF3X3R5cGUoKToKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gUmF3VHlwZXMuSW50Ci0KLSAgICAgICAgICAgICAgICAg
ICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBnZXRfdHlw
ZV9tb2RlbCgpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBUeXBlTW9kZWwu
SW50Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGRlZiBnZXRfc2V0dGVyX3ZhbHVlX2V4cHJlc3Npb25fcGF0dGVybigpOgot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb25lCi0KLSAgICAgICAgICAgICAg
ICAgICAgICAgIEBjbGFzc21ldGhvZAotICAgICAgICAgICAgICAgICAgICAgICAgZGVmIGdldF9h
cnJheV9pdGVtX2NfdHlwZV90ZXh0KGNscyk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGhlbHBlci5mdWxsX25hbWVfcHJlZml4X2Zvcl91c2UgKyBmaXhlZF90eXBlX25hbWUu
Y2xhc3NfbmFtZQotCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBUeXBlZGVmSW50ZWdlcgot
Ci0gICAgICAgIGVsaWYganNvbl90eXBhYmxlWyJ0eXBlIl0gPT0gIm9iamVjdCI6Ci0gICAgICAg
ICAgICBpZiAicHJvcGVydGllcyIgaW4ganNvbl90eXBhYmxlOgotCi0gICAgICAgICAgICAgICAg
Y2xhc3MgQ2xhc3NCaW5kaW5nOgotICAgICAgICAgICAgICAgICAgICByZXNvbHZlX2RhdGFfID0g
Tm9uZQotICAgICAgICAgICAgICAgICAgICBuZWVkX3VzZXJfcnVudGltZV9jYXN0XyA9IEZhbHNl
Ci0gICAgICAgICAgICAgICAgICAgIG5lZWRfaW50ZXJuYWxfcnVudGltZV9jYXN0XyA9IEZhbHNl
Ci0KLSAgICAgICAgICAgICAgICAgICAgQGNsYXNzbWV0aG9kCi0gICAgICAgICAgICAgICAgICAg
IGRlZiByZXNvbHZlX2lubmVyKGNscywgcmVzb2x2ZV9jb250ZXh0KToKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIGNscy5yZXNvbHZlX2RhdGFfOgotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybgotCi0gICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzID0ganNvbl90
eXBhYmxlWyJwcm9wZXJ0aWVzIl0KLSAgICAgICAgICAgICAgICAgICAgICAgIG1haW4gPSBbXQot
ICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWwgPSBbXQotCi0gICAgICAgICAgICAgICAg
ICAgICAgICBhZF9ob2NfdHlwZV9saXN0ID0gW10KLQotICAgICAgICAgICAgICAgICAgICAgICAg
Zm9yIHByb3AgaW4gcHJvcGVydGllczoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9w
X25hbWUgPSBwcm9wWyJuYW1lIl0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZF9ob2Nf
dHlwZV9jb250ZXh0ID0gY2xzLkFkSG9jVHlwZUNvbnRleHRJbXBsKHByb3BfbmFtZSwgZml4ZWRf
dHlwZV9uYW1lLmNsYXNzX25hbWUsIHJlc29sdmVfY29udGV4dCwgYWRfaG9jX3R5cGVfbGlzdCwg
aGVscGVyLmZ1bGxfbmFtZV9wcmVmaXhfZm9yX2ltcGwpCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYmluZGluZyA9IHJlc29sdmVfcGFyYW1fdHlwZShwcm9wLCBjb250ZXh0X2RvbWFpbl9u
YW1lLCBhZF9ob2NfdHlwZV9jb250ZXh0KQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29kZV9nZW5lcmF0b3IgPSBiaW5kaW5nLmdldF9jb2RlX2dlbmVyYXRvcigpCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgY29kZV9nZW5lcmF0b3I6Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvZGVfZ2VuZXJhdG9yLnJlZ2lzdGVyX3VzZShyZXNvbHZlX2NvbnRleHQu
Zm9yd2FyZF9saXN0ZW5lcikKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzIFBy
b3BlcnR5RGF0YToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1fdHlwZV9i
aW5kaW5nID0gYmluZGluZwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwID0gcHJv
cAotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgcHJvcC5nZXQoIm9wdGlvbmFsIik6
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbmFsLmFwcGVuZChQcm9wZXJ0
eURhdGEpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbWFpbi5hcHBlbmQoUHJvcGVydHlEYXRhKQotCi0gICAgICAgICAg
ICAgICAgICAgICAgICBjbGFzcyBSZXNvbHZlRGF0YToKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtYWluX3Byb3BlcnRpZXMgPSBtYWluCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
b3B0aW9uYWxfcHJvcGVydGllcyA9IG9wdGlvbmFsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYWRfaG9jX3R5cGVzID0gYWRfaG9jX3R5cGVfbGlzdAotCi0gICAgICAgICAgICAgICAgICAg
ICAgICBjbHMucmVzb2x2ZV9kYXRhXyA9IFJlc29sdmVEYXRhCi0KLSAgICAgICAgICAgICAgICAg
ICAgICAgIGZvciBhZF9ob2MgaW4gYWRfaG9jX3R5cGVfbGlzdDoKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBhZF9ob2MucmVzb2x2ZV9pbm5lcihyZXNvbHZlX2NvbnRleHQpCi0KLSAgICAg
ICAgICAgICAgICAgICAgQGNsYXNzbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgIGRlZiByZXF1
ZXN0X3VzZXJfcnVudGltZV9jYXN0KGNscywgcmVxdWVzdCk6Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBpZiBub3QgcmVxdWVzdDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4K
LSAgICAgICAgICAgICAgICAgICAgICAgIGNscy5uZWVkX3VzZXJfcnVudGltZV9jYXN0XyA9IFRy
dWUKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QuYWNrbm93bGVkZ2UoKQotICAgICAg
ICAgICAgICAgICAgICAgICAgY2xzLnJlcXVlc3RfaW50ZXJuYWxfcnVudGltZV9jYXN0KCkKLQot
ICAgICAgICAgICAgICAgICAgICBAY2xhc3NtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgZGVm
IHJlcXVlc3RfaW50ZXJuYWxfcnVudGltZV9jYXN0KGNscyk6Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBpZiBjbHMubmVlZF9pbnRlcm5hbF9ydW50aW1lX2Nhc3RfOgotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybgotICAgICAgICAgICAgICAgICAgICAgICAgY2xzLm5lZWRfaW50
ZXJuYWxfcnVudGltZV9jYXN0XyA9IFRydWUKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciBw
IGluIGNscy5yZXNvbHZlX2RhdGFfLm1haW5fcHJvcGVydGllczoKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwLnBhcmFtX3R5cGVfYmluZGluZy5yZXF1ZXN0X2ludGVybmFsX3J1bnRpbWVf
Y2FzdCgpCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgcCBpbiBjbHMucmVzb2x2ZV9kYXRh
Xy5vcHRpb25hbF9wcm9wZXJ0aWVzOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAucGFy
YW1fdHlwZV9iaW5kaW5nLnJlcXVlc3RfaW50ZXJuYWxfcnVudGltZV9jYXN0KCkKLQotICAgICAg
ICAgICAgICAgICAgICBAY2xhc3NtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgZGVmIGdldF9j
b2RlX2dlbmVyYXRvcihjbGFzc19iaW5kaW5nX2Nscyk6Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBjbGFzcyBDb2RlR2VuZXJhdG9yOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBjbGFz
c21ldGhvZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBnZW5lcmF0ZV90eXBlX2J1
aWxkZXIoY2xzLCB3cml0ZXIsIGdlbmVyYXRlX2NvbnRleHQpOgotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXNvbHZlX2RhdGEgPSBjbGFzc19iaW5kaW5nX2Nscy5yZXNvbHZlX2Rh
dGFfCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHBlci53cml0ZV9kb2Mod3Jp
dGVyKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc19uYW1lID0gZml4ZWRf
dHlwZV9uYW1lLmNsYXNzX25hbWUKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
c19vcGVuX3R5cGUgPSAoY29udGV4dF9kb21haW5fbmFtZSArICIuIiArIGNsYXNzX25hbWUpIGlu
IFRZUEVTX1dJVEhfT1BFTl9GSUVMRF9MSVNUX1NFVAotCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGZpeGVkX3R5cGVfbmFtZS5vdXRwdXRfY29tbWVudCh3cml0ZXIpCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCJjbGFzcyAiKQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuYXBwZW5kKGNsYXNzX25hbWUpCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5hcHBlbmQoIiA6IHB1YmxpYyAiKQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBpc19vcGVuX3R5cGU6Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuYXBwZW5kKCJJbnNwZWN0b3I6Oklu
c3BlY3Rvck9iamVjdCIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuYXBwZW5kKCJJbnNwZWN0
b3I6Okluc3BlY3Rvck9iamVjdEJhc2UiKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB3cml0ZXIuYXBwZW5kKCIge1xuIikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
d3JpdGVyLm5ld2xpbmUoInB1YmxpYzpcbiIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGFkX2hvY190eXBlX3dyaXRlciA9IHdyaXRlci5pbnNlcnRfd3JpdGVyKCIgICAgIikKLQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgYWRfaG9jX3R5cGUgaW4gcmVzb2x2
ZV9kYXRhLmFkX2hvY190eXBlczoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvZGVfZ2VuZXJhdG9yID0gYWRfaG9jX3R5cGUuZ2V0X2NvZGVfZ2VuZXJhdG9yKCkKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGNvZGVfZ2VuZXJhdG9yOgotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVfZ2VuZXJhdG9yLmdlbmVyYXRl
X3R5cGVfYnVpbGRlcihhZF9ob2NfdHlwZV93cml0ZXIsIGdlbmVyYXRlX2NvbnRleHQpCi0KLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmVfbXVsdGlsaW5lKAot
IiIiICAgIGVudW0gewotICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCi0iIiIpCi0KLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfZW51bV9pdGVtcyA9IFtdCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIGxlbihyZXNvbHZlX2RhdGEubWFpbl9wcm9wZXJ0aWVz
KSA+IDA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3MgPSAwCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgcHJvcF9kYXRhIGluIHJlc29sdmVf
ZGF0YS5tYWluX3Byb3BlcnRpZXM6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaXRlbV9uYW1lID0gQ2FwaXRhbGl6ZXIubG93ZXJfY2FtZWxfY2FzZV90b191cHBlcihw
cm9wX2RhdGEucFsibmFtZSJdKSArICJTZXQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3RhdGVfZW51bV9pdGVtcy5hcHBlbmQoaXRlbV9uYW1lKQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCIgICAgICAgICVz
ID0gMSA8PCAlcyxcbiIgJSAoaXRlbV9uYW1lLCBwb3MpKQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHBvcyArPSAxCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBhbGxfZmllbGRzX3NldF92YWx1ZSA9ICIoIiArICgiIHwgIi5qb2luKHN0YXRlX2Vu
dW1faXRlbXMpKSArICIpIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsX2ZpZWxkc19zZXRfdmFsdWUg
PSAiMCIKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3bGluZV9t
dWx0aWxpbmUoQ29kZUdlbmVyYXRvckluc3BlY3RvclN0cmluZ3MuY2xhc3NfYmluZGluZ19idWls
ZGVyX3BhcnRfMQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJSAoYWxsX2ZpZWxkc19zZXRfdmFsdWUsIGNsYXNzX25hbWUsIGNsYXNzX25h
bWUpKQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcyA9IDAKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHByb3BfZGF0YSBpbiByZXNvbHZlX2RhdGEubWFp
bl9wcm9wZXJ0aWVzOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcF9u
YW1lID0gcHJvcF9kYXRhLnBbIm5hbWUiXQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwYXJhbV90eXBlX2JpbmRpbmcgPSBwcm9wX2RhdGEucGFyYW1fdHlwZV9iaW5kaW5n
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbV9yYXdfdHlwZSA9IHBh
cmFtX3R5cGVfYmluZGluZy5yZWR1Y2VfdG9fcmF3X3R5cGUoKQotCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3bGluZV9tdWx0aWxpbmUoQ29kZUdlbmVyYXRv
ckluc3BlY3RvclN0cmluZ3MuY2xhc3NfYmluZGluZ19idWlsZGVyX3BhcnRfMgotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKHN0YXRlX2VudW1faXRlbXNbcG9zXSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDYXBpdGFsaXplci5s
b3dlcl9jYW1lbF9jYXNlX3RvX3VwcGVyKHByb3BfbmFtZSksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1fdHlwZV9iaW5kaW5nLmdldF90eXBlX21vZGVs
KCkuZ2V0X2lucHV0X3BhcmFtX3R5cGVfdGV4dCgpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0YXRlX2VudW1faXRlbXNbcG9zXSwgcHJvcF9uYW1lLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtX3Jhd190eXBlLmdl
dF9zZXR0ZXJfbmFtZSgpLCBwcm9wX25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZm9ybWF0X3NldHRlcl92YWx1ZV9leHByZXNzaW9uKHBhcmFtX3R5cGVf
YmluZGluZywgInZhbHVlIiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3RhdGVfZW51bV9pdGVtc1twb3NdKSkKLQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcG9zICs9IDEKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3
cml0ZXIubmV3bGluZV9tdWx0aWxpbmUoQ29kZUdlbmVyYXRvckluc3BlY3RvclN0cmluZ3MuY2xh
c3NfYmluZGluZ19idWlsZGVyX3BhcnRfMwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAoY2xhc3NfbmFtZSwgY2xhc3NfbmFtZSwgY2xh
c3NfbmFtZSwgY2xhc3NfbmFtZSwgY2xhc3NfbmFtZSkpCi0KLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIiAgICAvKlxuIikKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0
b3I6XG4iKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3bGluZSgi
ICAgICAqIFJlZlB0cjwlcz4gcmVzdWx0ID0gJXM6OmNyZWF0ZSgpIiAlIChjbGFzc19uYW1lLCBj
bGFzc19uYW1lKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHByb3BfZGF0
YSBpbiByZXNvbHZlX2RhdGEubWFpbl9wcm9wZXJ0aWVzOgotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVuZF9tdWx0aWxpbmUoIlxuICAgICAqICAgICAuc2V0
JXMoLi4uKSIgJSBDYXBpdGFsaXplci5sb3dlcl9jYW1lbF9jYXNlX3RvX3VwcGVyKHByb3BfZGF0
YS5wWyJuYW1lIl0pKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuYXBw
ZW5kX211bHRpbGluZSgiO1xuICAgICAqL1xuIikKLQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB3cml0ZXIubmV3bGluZV9tdWx0aWxpbmUoQ29kZUdlbmVyYXRvckluc3BlY3RvclN0
cmluZ3MuY2xhc3NfYmluZGluZ19idWlsZGVyX3BhcnRfNCkKLQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB3cml0ZXIubmV3bGluZSgiICAgIHR5cGVkZWYgSW5zcGVjdG9yOjpUeXBl
QnVpbGRlcjo6U3RydWN0SXRlbVRyYWl0cyBJdGVtVHJhaXRzO1xuIikKLQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmb3IgcHJvcF9kYXRhIGluIHJlc29sdmVfZGF0YS5vcHRpb25h
bF9wcm9wZXJ0aWVzOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcF9u
YW1lID0gcHJvcF9kYXRhLnBbIm5hbWUiXQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcGFyYW1fdHlwZV9iaW5kaW5nID0gcHJvcF9kYXRhLnBhcmFtX3R5cGVfYmluZGluZwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0dGVyX25hbWUgPSAic2V0JXMi
ICUgQ2FwaXRhbGl6ZXIubG93ZXJfY2FtZWxfY2FzZV90b191cHBlcihwcm9wX25hbWUpCi0KLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5hcHBlbmRfbXVsdGlsaW5l
KCJcbiAgICB2b2lkICVzIiAlIHNldHRlcl9uYW1lKQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgd3JpdGVyLmFwcGVuZCgiKCVzIHZhbHVlKVxuIiAlIHBhcmFtX3R5cGVfYmlu
ZGluZy5nZXRfdHlwZV9tb2RlbCgpLmdldF9pbnB1dF9wYXJhbV90eXBlX3RleHQoKSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCIgICAge1xuIikK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCIgICAg
ICAgIHRoaXMtPnNldCVzKEFTQ0lJTGl0ZXJhbChcIiVzXCIpLCAlcyk7XG4iCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAocGFyYW1fdHlwZV9iaW5kaW5nLnJlZHVj
ZV90b19yYXdfdHlwZSgpLmdldF9zZXR0ZXJfbmFtZSgpLCBwcm9wX2RhdGEucFsibmFtZSJdLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdF9zZXR0ZXJf
dmFsdWVfZXhwcmVzc2lvbihwYXJhbV90eXBlX2JpbmRpbmcsICJ2YWx1ZSIpKSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCIgICAgfVxuIikKLQot
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBzZXR0ZXJfbmFtZSBpbiBJ
TlNQRUNUT1JfT0JKRUNUX1NFVFRFUl9OQU1FUzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB3cml0ZXIubmV3bGluZSgiICAgIHVzaW5nIEluc3BlY3Rvcjo6SW5zcGVj
dG9yT2JqZWN0QmFzZTo6JXM7XG5cbiIgJSBzZXR0ZXJfbmFtZSkKLQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiBjbGFzc19iaW5kaW5nX2Nscy5uZWVkX3VzZXJfcnVudGltZV9j
YXN0XzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5l
KCIgICAgc3RhdGljIFBhc3NSZWZQdHI8JXM+IHJ1bnRpbWVDYXN0KFBhc3NSZWZQdHI8SW5zcGVj
dG9yOjpJbnNwZWN0b3JWYWx1ZT4gdmFsdWUpXG4iICUgY2xhc3NfbmFtZSkKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCIgICAge1xuIikKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCIgICAgICAgIFJl
ZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gb2JqZWN0O1xuIikKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCIgICAgICAgIGJvb2wgY2Fz
dFJlcyA9IHZhbHVlLT5hc09iamVjdCgmb2JqZWN0KTtcbiIpCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB3cml0ZXIubmV3bGluZSgiICAgICAgICBBU1NFUlRfVU5VU0VEKGNh
c3RSZXMsIGNhc3RSZXMpO1xuIikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHdyaXRlci5hcHBlbmQoIiNpZiAlc1xuIiAlIFZBTElEQVRPUl9JRkRFRl9OQU1FKQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIiAgICAgICAgYXNz
ZXJ0Q29ycmVjdFZhbHVlKG9iamVjdC5nZXQoKSk7XG4iKQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVuZCgiI2VuZGlmICAvLyAlc1xuIiAlIFZBTElEQVRP
Ul9JRkRFRl9OQU1FKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVy
Lm5ld2xpbmUoIiAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKCVzKSA9PSBzaXplb2YoSW5z
cGVjdG9yOjpJbnNwZWN0b3JPYmplY3RCYXNlKSwgdHlwZV9jYXN0X3Byb2JsZW0pO1xuIiAlIGNs
YXNzX25hbWUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3
bGluZSgiICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8JXMqPihzdGF0aWNfY2FzdDxJbnNwZWN0
b3I6Okluc3BlY3Rvck9iamVjdEJhc2UqPihvYmplY3QuZ2V0KCkpKTtcbiIgJSBjbGFzc19uYW1l
KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIiAg
ICB9XG4iKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVu
ZCgiXG4iKQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGNsYXNzX2JpbmRp
bmdfY2xzLm5lZWRfaW50ZXJuYWxfcnVudGltZV9jYXN0XzoKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHdyaXRlci5hcHBlbmQoIiNpZiAlc1xuIiAlIFZBTElEQVRPUl9JRkRF
Rl9OQU1FKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xp
bmUoIiAgICBzdGF0aWMgJXMgdm9pZCBhc3NlcnRDb3JyZWN0VmFsdWUoSW5zcGVjdG9yOjpJbnNw
ZWN0b3JWYWx1ZSogdmFsdWUpO1xuIiAlIElOU1BFQ1RPUl9UWVBFU19HRU5FUkFUT1JfQ09ORklH
X01BUFtvdXRwdXRfdHlwZV1bImV4cG9ydF9tYWNybyJdKQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVuZCgiI2VuZGlmICAvLyAlc1xuIiAlIFZBTElEQVRP
Ul9JRkRFRl9OQU1FKQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9z
ZWRfZmllbGRfc2V0ID0gKGNvbnRleHRfZG9tYWluX25hbWUgKyAiLiIgKyBjbGFzc19uYW1lKSBu
b3QgaW4gVFlQRVNfV0lUSF9PUEVOX0ZJRUxEX0xJU1RfU0VUCi0KLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIgPSBnZW5lcmF0ZV9jb250ZXh0LnZh
bGlkYXRvcl93cml0ZXIKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9t
YWluX2ZpeGVzID0gRG9tYWluTmFtZUZpeGVzLmdldF9maXhlZF9kYXRhKGNvbnRleHRfZG9tYWlu
X25hbWUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb21haW5fZ3VhcmQg
PSBkb21haW5fZml4ZXMuZ2V0X2d1YXJkKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIGRvbWFpbl9ndWFyZDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkb21haW5fZ3VhcmQuZ2VuZXJhdGVfb3Blbih2YWxpZGF0b3Jfd3JpdGVyKQotCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xp
bmUoInZvaWQgJXMlczo6YXNzZXJ0Q29ycmVjdFZhbHVlKEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFs
dWUqIHZhbHVlKVxuIiAlIChoZWxwZXIuZnVsbF9uYW1lX3ByZWZpeF9mb3JfaW1wbCwgY2xhc3Nf
bmFtZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3Jp
dGVyLm5ld2xpbmUoIntcbiIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBvYmpl
Y3Q7XG4iKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dy
aXRlci5uZXdsaW5lKCIgICAgYm9vbCBjYXN0UmVzID0gdmFsdWUtPmFzT2JqZWN0KCZvYmplY3Qp
O1xuIikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0
ZXIubmV3bGluZSgiICAgIEFTU0VSVF9VTlVTRUQoY2FzdFJlcywgY2FzdFJlcyk7XG4iKQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHByb3BfZGF0YSBpbiByZXNvbHZl
X2RhdGEubWFpbl9wcm9wZXJ0aWVzOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgiICAgIHtcbiIpCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRfbmFtZSA9ICIlc1BvcyIgJSBwcm9wX2RhdGEu
cFsibmFtZSJdCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRh
dG9yX3dyaXRlci5uZXdsaW5lKCIgICAgICAgIEluc3BlY3Rvck9iamVjdDo6aXRlcmF0b3IgJXM7
XG4iICUgaXRfbmFtZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIiAgICAgICAgJXMgPSBvYmplY3QtPmZpbmQoXCIlc1wi
KTtcbiIgJSAoaXRfbmFtZSwgcHJvcF9kYXRhLnBbIm5hbWUiXSkpCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCIgICAgICAg
IEFTU0VSVCglcyAhPSBvYmplY3QtPmVuZCgpKTtcbiIgJSBpdF9uYW1lKQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgiICAg
ICAgICAlcyglcy0+dmFsdWUuZ2V0KCkpO1xuIiAlIChwcm9wX2RhdGEucGFyYW1fdHlwZV9iaW5k
aW5nLmdldF92YWxpZGF0b3JfY2FsbF90ZXh0KCksIGl0X25hbWUpKQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgiICAgIH1c
biIpCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGNsb3NlZF9maWVs
ZF9zZXQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9y
X3dyaXRlci5uZXdsaW5lKCIgICAgaW50IGZvdW5kUHJvcGVydGllc0NvdW50ID0gJXM7XG4iICUg
bGVuKHJlc29sdmVfZGF0YS5tYWluX3Byb3BlcnRpZXMpKQotCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBmb3IgcHJvcF9kYXRhIGluIHJlc29sdmVfZGF0YS5vcHRpb25hbF9w
cm9wZXJ0aWVzOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlk
YXRvcl93cml0ZXIubmV3bGluZSgiICAgIHtcbiIpCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaXRfbmFtZSA9ICIlc1BvcyIgJSBwcm9wX2RhdGEucFsibmFtZSJdCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5u
ZXdsaW5lKCIgICAgICAgIEluc3BlY3Rvck9iamVjdDo6aXRlcmF0b3IgJXM7XG4iICUgaXRfbmFt
ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3Jp
dGVyLm5ld2xpbmUoIiAgICAgICAgJXMgPSBvYmplY3QtPmZpbmQoXCIlc1wiKTtcbiIgJSAoaXRf
bmFtZSwgcHJvcF9kYXRhLnBbIm5hbWUiXSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCIgICAgICAgIGlmICglcyAhPSBv
YmplY3QtPmVuZCgpKSB7XG4iICUgaXRfbmFtZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIiAgICAgICAgICAgICVzKCVz
LT52YWx1ZS5nZXQoKSk7XG4iICUgKHByb3BfZGF0YS5wYXJhbV90eXBlX2JpbmRpbmcuZ2V0X3Zh
bGlkYXRvcl9jYWxsX3RleHQoKSwgaXRfbmFtZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgY2xvc2VkX2ZpZWxkX3NldDoKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCIgICAgICAg
ICAgICArK2ZvdW5kUHJvcGVydGllc0NvdW50O1xuIikKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIiAgICAgICAgfVxuIikK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVy
Lm5ld2xpbmUoIiAgICB9XG4iKQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiBjbG9zZWRfZmllbGRfc2V0OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgiICAgIGlmIChmb3VuZFByb3BlcnRpZXND
b3VudCAhPSBvYmplY3QtPnNpemUoKSlcbiIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCIgICAgICAgIEZBVEFMKFwiVW5l
eHBlY3RlZCBwcm9wZXJ0aWVzIGluIG9iamVjdDogJXNcXG5cIiwgb2JqZWN0LT50b0pTT05TdHJp
bmcoKS5hc2NpaSgpLmRhdGEoKSk7XG4iKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCJ9XG4iKQotCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiBkb21haW5fZ3VhcmQ6Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZG9tYWluX2d1YXJkLmdlbmVyYXRlX2Nsb3NlKHZhbGlkYXRv
cl93cml0ZXIpCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRv
cl93cml0ZXIubmV3bGluZSgiXG5cbiIpCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgaXNfb3Blbl90eXBlOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y3BwX3dyaXRlciA9IGdlbmVyYXRlX2NvbnRleHQuY3BwX3dyaXRlcgotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVuZCgiXG4iKQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIiAgICAvLyBQcm9wZXJ0eSBuYW1l
cyBmb3IgdHlwZSBnZW5lcmF0ZWQgYXMgb3Blbi5cbiIpCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmb3IgcHJvcF9kYXRhIGluIHJlc29sdmVfZGF0YS5tYWluX3Byb3BlcnRp
ZXMgKyByZXNvbHZlX2RhdGEub3B0aW9uYWxfcHJvcGVydGllczoKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwcm9wX25hbWUgPSBwcm9wX2RhdGEucFsibmFtZSJdCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcF9maWVsZF9uYW1lID0g
Q2FwaXRhbGl6ZXIubG93ZXJfY2FtZWxfY2FzZV90b191cHBlcihwcm9wX25hbWUpCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIiAgICBzdGF0
aWMgY29uc3QgY2hhciogJXM7XG4iICUgKHByb3BfZmllbGRfbmFtZSkpCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY3BwX3dyaXRlci5uZXdsaW5lKCJjb25zdCBjaGFy
KiAlcyVzOjolcyA9IFwiJXNcIjtcbiIgJSAoaGVscGVyLmZ1bGxfbmFtZV9wcmVmaXhfZm9yX2lt
cGwsIGNsYXNzX25hbWUsIHByb3BfZmllbGRfbmFtZSwgcHJvcF9uYW1lKSkKLQotCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCJ9O1xuXG4iKQotCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRlZiBnZW5lcmF0ZV9mb3J3YXJkX2RlY2xhcmF0aW9uKHdyaXRlcik6Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzX25hbWUgPSBmaXhlZF90eXBlX25hbWUu
Y2xhc3NfbmFtZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3bGlu
ZSgiY2xhc3MgIikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVu
ZChjbGFzc19uYW1lKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuYXBw
ZW5kKCI7XG4iKQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZiByZWdpc3Rlcl91c2UoZm9yd2FyZF9saXN0
ZW5lcik6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHBlci5hZGRfdG9fZm9y
d2FyZF9saXN0ZW5lcihmb3J3YXJkX2xpc3RlbmVyKQotCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBnZXRf
Z2VuZXJhdGVfcGFzc19pZCgpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gVHlwZUJ1aWxkZXJQYXNzLk1BSU4KLQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IENvZGVHZW5lcmF0b3IKLQotICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAg
ICAgICAgICAgICAgICAgIGRlZiBnZXRfdmFsaWRhdG9yX2NhbGxfdGV4dCgpOgotICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGhlbHBlci5mdWxsX25hbWVfcHJlZml4X2Zvcl91c2UgKyBm
aXhlZF90eXBlX25hbWUuY2xhc3NfbmFtZSArICI6OmFzc2VydENvcnJlY3RWYWx1ZSIKLQotICAg
ICAgICAgICAgICAgICAgICBAY2xhc3NtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgZGVmIGdl
dF9hcnJheV9pdGVtX2NfdHlwZV90ZXh0KGNscyk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gaGVscGVyLmZ1bGxfbmFtZV9wcmVmaXhfZm9yX3VzZSArIGZpeGVkX3R5cGVfbmFtZS5j
bGFzc19uYW1lCi0KLSAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAg
ICAgICAgICAgICBkZWYgZ2V0X3NldHRlcl92YWx1ZV9leHByZXNzaW9uX3BhdHRlcm4oKToKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb25lCi0KLSAgICAgICAgICAgICAgICAgICAg
QHN0YXRpY21ldGhvZAotICAgICAgICAgICAgICAgICAgICBkZWYgcmVkdWNlX3RvX3Jhd190eXBl
KCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmF3VHlwZXMuT2JqZWN0Ci0KLSAg
ICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgICAgICAgICBkZWYg
Z2V0X3R5cGVfbW9kZWwoKToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBUeXBlTW9k
ZWwuUmVmUHRyQmFzZWQoaGVscGVyLmZ1bGxfbmFtZV9wcmVmaXhfZm9yX3VzZSArIGZpeGVkX3R5
cGVfbmFtZS5jbGFzc19uYW1lKQotCi0gICAgICAgICAgICAgICAgICAgIGNsYXNzIEFkSG9jVHlw
ZUNvbnRleHRJbXBsOgotICAgICAgICAgICAgICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYs
IHByb3BlcnR5X25hbWUsIGNsYXNzX25hbWUsIHJlc29sdmVfY29udGV4dCwgYWRfaG9jX3R5cGVf
bGlzdCwgcGFyZW50X2Z1bGxfbmFtZV9wcmVmaXgpOgotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNlbGYucHJvcGVydHlfbmFtZSA9IHByb3BlcnR5X25hbWUKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzZWxmLmNsYXNzX25hbWUgPSBjbGFzc19uYW1lCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2VsZi5yZXNvbHZlX2NvbnRleHQgPSByZXNvbHZlX2NvbnRleHQKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFkX2hvY190eXBlX2xpc3QgPSBhZF9ob2NfdHlw
ZV9saXN0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jb250YWluZXJfZnVsbF9u
YW1lX3ByZWZpeCA9IHBhcmVudF9mdWxsX25hbWVfcHJlZml4ICsgY2xhc3NfbmFtZSArICI6OiIK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbnRhaW5lcl9yZWxhdGl2ZV9uYW1l
X3ByZWZpeCA9ICIiCi0KLSAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBnZXRfdHlwZV9uYW1l
X2ZpeChzZWxmKToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcyBOYW1lRml4Ogot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc19uYW1lID0gQ2FwaXRhbGl6ZXIu
bG93ZXJfY2FtZWxfY2FzZV90b191cHBlcihzZWxmLnByb3BlcnR5X25hbWUpCi0KLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBkZWYgb3V0cHV0X2NvbW1lbnQod3JpdGVyKToKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCIvLyBOYW1lZCBhZnRlciBwcm9w
ZXJ0eSBuYW1lICclcycgd2hpbGUgZ2VuZXJhdGluZyAlcy5cbiIgJSAoc2VsZi5wcm9wZXJ0eV9u
YW1lLCBzZWxmLmNsYXNzX25hbWUpKQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIE5hbWVGaXgKLQotICAgICAgICAgICAgICAgICAgICAgICAgZGVmIGFkZF90eXBlKHNlbGYs
IGJpbmRpbmcpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYWRfaG9jX3R5cGVf
bGlzdC5hcHBlbmQoYmluZGluZykKLQotICAgICAgICAgICAgICAgIHJldHVybiBDbGFzc0JpbmRp
bmcKLSAgICAgICAgICAgIGVsc2U6Ci0KLSAgICAgICAgICAgICAgICBjbGFzcyBQbGFpbk9iamVj
dEJpbmRpbmc6Ci0gICAgICAgICAgICAgICAgICAgIEBjbGFzc21ldGhvZAotICAgICAgICAgICAg
ICAgICAgICBkZWYgcmVzb2x2ZV9pbm5lcihjbHMsIHJlc29sdmVfY29udGV4dCk6Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBwYXNzCi0KLSAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhv
ZAotICAgICAgICAgICAgICAgICAgICBkZWYgcmVxdWVzdF91c2VyX3J1bnRpbWVfY2FzdChyZXF1
ZXN0KToKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKLQotICAgICAgICAgICAgICAgICAg
ICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgIGRlZiByZXF1ZXN0X2ludGVybmFs
X3J1bnRpbWVfY2FzdCgpOgotICAgICAgICAgICAgICAgICAgICAgICAgUmF3VHlwZXMuT2JqZWN0
LnJlcXVlc3RfcmF3X2ludGVybmFsX3J1bnRpbWVfY2FzdCgpCi0KLSAgICAgICAgICAgICAgICAg
ICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X2NvZGVfZ2VuZXJh
dG9yKCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBwYXNzCi0KLSAgICAgICAgICAgICAgICAg
ICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X3ZhbGlkYXRvcl9j
YWxsX3RleHQoKToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAiUnVudGltZUNhc3RI
ZWxwZXI6OmFzc2VydFR5cGU8SW5zcGVjdG9yVmFsdWU6OlR5cGVPYmplY3Q+IgotCi0gICAgICAg
ICAgICAgICAgICAgIEBjbGFzc21ldGhvZAotICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X2Fy
cmF5X2l0ZW1fY190eXBlX3RleHQoY2xzKToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBjbHMucmVkdWNlX3RvX3Jhd190eXBlKCkuZ2V0X2FycmF5X2l0ZW1fcmF3X2NfdHlwZV90ZXh0
KCkKLQotICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICAgICAg
ICAgIGRlZiBnZXRfc2V0dGVyX3ZhbHVlX2V4cHJlc3Npb25fcGF0dGVybigpOgotICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKLQotICAgICAgICAgICAgICAgICAgICBAc3RhdGlj
bWV0aG9kCi0gICAgICAgICAgICAgICAgICAgIGRlZiByZWR1Y2VfdG9fcmF3X3R5cGUoKToKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSYXdUeXBlcy5PYmplY3QKLQotICAgICAgICAg
ICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgIGRlZiBnZXRfdHlw
ZV9tb2RlbCgpOgotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFR5cGVNb2RlbC5PYmpl
Y3QKLQotICAgICAgICAgICAgICAgIHJldHVybiBQbGFpbk9iamVjdEJpbmRpbmcKLSAgICAgICAg
ZWxpZiBqc29uX3R5cGFibGVbInR5cGUiXSA9PSAiYXJyYXkiOgotICAgICAgICAgICAgaWYgIml0
ZW1zIiBpbiBqc29uX3R5cGFibGU6Ci0KLSAgICAgICAgICAgICAgICBhZF9ob2NfdHlwZXMgPSBb
XQotCi0gICAgICAgICAgICAgICAgY2xhc3MgQWRIb2NUeXBlQ29udGV4dDoKLSAgICAgICAgICAg
ICAgICAgICAgY29udGFpbmVyX2Z1bGxfbmFtZV9wcmVmaXggPSAiPG5vdCB5ZXQgZGVmaW5lZD4i
Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcl9yZWxhdGl2ZV9uYW1lX3ByZWZpeCA9ICIi
Ci0KLSAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgICAgICAg
ICBkZWYgZ2V0X3R5cGVfbmFtZV9maXgoKToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBmaXhlZF90eXBlX25hbWUKLQotICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0g
ICAgICAgICAgICAgICAgICAgIGRlZiBhZGRfdHlwZShiaW5kaW5nKToKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGFkX2hvY190eXBlcy5hcHBlbmQoYmluZGluZykKLQotICAgICAgICAgICAgICAg
IGl0ZW1fYmluZGluZyA9IHJlc29sdmVfcGFyYW1fdHlwZShqc29uX3R5cGFibGVbIml0ZW1zIl0s
IGNvbnRleHRfZG9tYWluX25hbWUsIEFkSG9jVHlwZUNvbnRleHQpCi0KLSAgICAgICAgICAgICAg
ICBjbGFzcyBBcnJheUJpbmRpbmc6Ci0gICAgICAgICAgICAgICAgICAgIHJlc29sdmVfZGF0YV8g
PSBOb25lCi0gICAgICAgICAgICAgICAgICAgIG5lZWRfaW50ZXJuYWxfcnVudGltZV9jYXN0XyA9
IEZhbHNlCi0KLSAgICAgICAgICAgICAgICAgICAgQGNsYXNzbWV0aG9kCi0gICAgICAgICAgICAg
ICAgICAgIGRlZiByZXNvbHZlX2lubmVyKGNscywgcmVzb2x2ZV9jb250ZXh0KToKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIGNscy5yZXNvbHZlX2RhdGFfOgotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybgotCi0gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcyBSZXNvbHZl
RGF0YToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtX3R5cGVfYmluZGluZyA9IGl0
ZW1fYmluZGluZwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkX2hvY190eXBlX2xpc3Qg
PSBhZF9ob2NfdHlwZXMKLQotICAgICAgICAgICAgICAgICAgICAgICAgY2xzLnJlc29sdmVfZGF0
YV8gPSBSZXNvbHZlRGF0YQotCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgdCBpbiBhZF9o
b2NfdHlwZXM6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdC5yZXNvbHZlX2lubmVyKHJl
c29sdmVfY29udGV4dCkKLQotICAgICAgICAgICAgICAgICAgICBAY2xhc3NtZXRob2QKLSAgICAg
ICAgICAgICAgICAgICAgZGVmIHJlcXVlc3RfdXNlcl9ydW50aW1lX2Nhc3QoY2xzLCByZXF1ZXN0
KToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiTm90IGltcGxlbWVu
dGVkIHlldCIpCi0KLSAgICAgICAgICAgICAgICAgICAgQGNsYXNzbWV0aG9kCi0gICAgICAgICAg
ICAgICAgICAgIGRlZiByZXF1ZXN0X2ludGVybmFsX3J1bnRpbWVfY2FzdChjbHMpOgotICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgY2xzLm5lZWRfaW50ZXJuYWxfcnVudGltZV9jYXN0XzoKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4KLSAgICAgICAgICAgICAgICAgICAgICAg
IGNscy5uZWVkX2ludGVybmFsX3J1bnRpbWVfY2FzdF8gPSBUcnVlCi0gICAgICAgICAgICAgICAg
ICAgICAgICBjbHMucmVzb2x2ZV9kYXRhXy5pdGVtX3R5cGVfYmluZGluZy5yZXF1ZXN0X2ludGVy
bmFsX3J1bnRpbWVfY2FzdCgpCi0KLSAgICAgICAgICAgICAgICAgICAgQGNsYXNzbWV0aG9kCi0g
ICAgICAgICAgICAgICAgICAgIGRlZiBnZXRfY29kZV9nZW5lcmF0b3IoYXJyYXlfYmluZGluZ19j
bHMpOgotCi0gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcyBDb2RlR2VuZXJhdG9yOgotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkZWYgZ2VuZXJhdGVfdHlwZV9idWlsZGVyKHdyaXRlciwgZ2VuZXJhdGVfY29u
dGV4dCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkX2hvY190eXBlX3dyaXRl
ciA9IHdyaXRlcgotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmVfZGF0
YSA9IGFycmF5X2JpbmRpbmdfY2xzLnJlc29sdmVfZGF0YV8KLQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmb3IgYWRfaG9jX3R5cGUgaW4gcmVzb2x2ZV9kYXRhLmFkX2hvY190eXBl
X2xpc3Q6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlX2dlbmVyYXRv
ciA9IGFkX2hvY190eXBlLmdldF9jb2RlX2dlbmVyYXRvcigpCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiBjb2RlX2dlbmVyYXRvcjoKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb2RlX2dlbmVyYXRvci5nZW5lcmF0ZV90eXBlX2J1aWxkZXIo
YWRfaG9jX3R5cGVfd3JpdGVyLCBnZW5lcmF0ZV9jb250ZXh0KQotCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRl
ZiBnZW5lcmF0ZV9mb3J3YXJkX2RlY2xhcmF0aW9uKHdyaXRlcik6Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHBhc3MKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBzdGF0
aWNtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWYgcmVnaXN0ZXJfdXNlKGZv
cndhcmRfbGlzdGVuZXIpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtX2Nv
ZGVfZ2VuZXJhdG9yID0gaXRlbV9iaW5kaW5nLmdldF9jb2RlX2dlbmVyYXRvcigpCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGl0ZW1fY29kZV9nZW5lcmF0b3I6Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtX2NvZGVfZ2VuZXJhdG9yLnJlZ2lzdGVy
X3VzZShmb3J3YXJkX2xpc3RlbmVyKQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQHN0
YXRpY21ldGhvZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBnZXRfZ2VuZXJhdGVf
cGFzc19pZCgpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHlwZUJ1
aWxkZXJQYXNzLk1BSU4KLQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENvZGVHZW5l
cmF0b3IKLQotICAgICAgICAgICAgICAgICAgICBAY2xhc3NtZXRob2QKLSAgICAgICAgICAgICAg
ICAgICAgZGVmIGdldF92YWxpZGF0b3JfY2FsbF90ZXh0KGNscyk6Ci0gICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gY2xzLmdldF9hcnJheV9pdGVtX2NfdHlwZV90ZXh0KCkgKyAiOjphc3Nl
cnRDb3JyZWN0VmFsdWUiCi0KLSAgICAgICAgICAgICAgICAgICAgQGNsYXNzbWV0aG9kCi0gICAg
ICAgICAgICAgICAgICAgIGRlZiBnZXRfYXJyYXlfaXRlbV9jX3R5cGVfdGV4dChjbHMpOgotICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlcGxhY2VfcmlnaHRfc2hpZnQoIkluc3BlY3Rv
cjo6VHlwZUJ1aWxkZXI6OkFycmF5PCVzPiIgJSBjbHMucmVzb2x2ZV9kYXRhXy5pdGVtX3R5cGVf
YmluZGluZy5nZXRfYXJyYXlfaXRlbV9jX3R5cGVfdGV4dCgpKQotCi0gICAgICAgICAgICAgICAg
ICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgZGVmIGdldF9zZXR0ZXJfdmFs
dWVfZXhwcmVzc2lvbl9wYXR0ZXJuKCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
Tm9uZQotCi0gICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgICAg
ICAgICAgZGVmIHJlZHVjZV90b19yYXdfdHlwZSgpOgotICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIFJhd1R5cGVzLkFycmF5Ci0KLSAgICAgICAgICAgICAgICAgICAgQGNsYXNzbWV0aG9k
Ci0gICAgICAgICAgICAgICAgICAgIGRlZiBnZXRfdHlwZV9tb2RlbChjbHMpOgotICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIFR5cGVNb2RlbC5SZWZQdHJCYXNlZChjbHMuZ2V0X2FycmF5
X2l0ZW1fY190eXBlX3RleHQoKSkKLQotICAgICAgICAgICAgICAgIHJldHVybiBBcnJheUJpbmRp
bmcKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgIyBGYWxsLXRocm91Z2ggdG8g
cmF3IHR5cGUuCi0gICAgICAgICAgICAgICAgcGFzcwotCi0gICAgICAgIHJhd190eXBlID0gUmF3
VHlwZXMuZ2V0KGpzb25fdHlwYWJsZVsidHlwZSJdKQotCi0gICAgICAgIHJldHVybiBSYXdUeXBl
QmluZGluZyhyYXdfdHlwZSkKLQotCi1jbGFzcyBSYXdUeXBlQmluZGluZzoKLSAgICBkZWYgX19p
bml0X18oc2VsZiwgcmF3X3R5cGUpOgotICAgICAgICBzZWxmLnJhd190eXBlXyA9IHJhd190eXBl
Ci0KLSAgICBkZWYgcmVzb2x2ZV9pbm5lcihzZWxmLCByZXNvbHZlX2NvbnRleHQpOgotICAgICAg
ICBwYXNzCi0KLSAgICBkZWYgcmVxdWVzdF91c2VyX3J1bnRpbWVfY2FzdChzZWxmLCByZXF1ZXN0
KToKLSAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJVbnN1cHBvcnRlZCIpCi0KLSAgICBkZWYgcmVx
dWVzdF9pbnRlcm5hbF9ydW50aW1lX2Nhc3Qoc2VsZik6Ci0gICAgICAgIHNlbGYucmF3X3R5cGVf
LnJlcXVlc3RfcmF3X2ludGVybmFsX3J1bnRpbWVfY2FzdCgpCi0KLSAgICBkZWYgZ2V0X2NvZGVf
Z2VuZXJhdG9yKHNlbGYpOgotICAgICAgICByZXR1cm4gTm9uZQotCi0gICAgZGVmIGdldF92YWxp
ZGF0b3JfY2FsbF90ZXh0KHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5yYXdfdHlwZV8uZ2V0
X3Jhd192YWxpZGF0b3JfY2FsbF90ZXh0KCkKLQotICAgIGRlZiBnZXRfYXJyYXlfaXRlbV9jX3R5
cGVfdGV4dChzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYucmF3X3R5cGVfLmdldF9hcnJheV9p
dGVtX3Jhd19jX3R5cGVfdGV4dCgpCi0KLSAgICBkZWYgZ2V0X3NldHRlcl92YWx1ZV9leHByZXNz
aW9uX3BhdHRlcm4oc2VsZik6Ci0gICAgICAgIHJldHVybiBOb25lCi0KLSAgICBkZWYgcmVkdWNl
X3RvX3Jhd190eXBlKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5yYXdfdHlwZV8KLQotICAg
IGRlZiBnZXRfdHlwZV9tb2RlbChzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYucmF3X3R5cGVf
LmdldF9yYXdfdHlwZV9tb2RlbCgpCi0KLQotY2xhc3MgVHlwZURhdGEob2JqZWN0KToKLSAgICBk
ZWYgX19pbml0X18oc2VsZiwganNvbl90eXBlLCBqc29uX2RvbWFpbiwgZG9tYWluX2RhdGEpOgot
ICAgICAgICBzZWxmLmpzb25fdHlwZV8gPSBqc29uX3R5cGUKLSAgICAgICAgc2VsZi5qc29uX2Rv
bWFpbl8gPSBqc29uX2RvbWFpbgotICAgICAgICBzZWxmLmRvbWFpbl9kYXRhXyA9IGRvbWFpbl9k
YXRhCi0KLSAgICAgICAgaWYgInR5cGUiIG5vdCBpbiBqc29uX3R5cGU6Ci0gICAgICAgICAgICBy
YWlzZSBFeGNlcHRpb24oIlVua25vd24gdHlwZSIpCi0KLSAgICAgICAganNvbl90eXBlX25hbWUg
PSBqc29uX3R5cGVbInR5cGUiXQotICAgICAgICBzZWxmLnJhd190eXBlXyA9IFJhd1R5cGVzLmdl
dChqc29uX3R5cGVfbmFtZSkKLSAgICAgICAgc2VsZi5iaW5kaW5nX2JlaW5nX3Jlc29sdmVkXyA9
IEZhbHNlCi0gICAgICAgIHNlbGYuYmluZGluZ18gPSBOb25lCi0KLSAgICBkZWYgZ2V0X3Jhd190
eXBlKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5yYXdfdHlwZV8KLQotICAgIGRlZiBnZXRf
YmluZGluZyhzZWxmKToKLSAgICAgICAgaWYgbm90IHNlbGYuYmluZGluZ186Ci0gICAgICAgICAg
ICBpZiBzZWxmLmJpbmRpbmdfYmVpbmdfcmVzb2x2ZWRfOgotICAgICAgICAgICAgICAgIHJhaXNl
IEV4Y2VwdGlvbigiVHlwZSAlcyBpcyBhbHJlYWR5IGJlaW5nIHJlc29sdmVkIiAlIHNlbGYuanNv
bl90eXBlX1sidHlwZSJdKQotICAgICAgICAgICAgIyBSZXNvbHZlIG9ubHkgbGF6aWx5LCBiZWNh
dXNlIHJlc29sdmluZyBvbmUgbmFtZWQgdHlwZSBtYXkgcmVxdWlyZSByZXNvbHZpbmcgc29tZSBv
dGhlciBuYW1lZCB0eXBlLgotICAgICAgICAgICAgc2VsZi5iaW5kaW5nX2JlaW5nX3Jlc29sdmVk
XyA9IFRydWUKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBzZWxmLmJpbmRpbmdf
ID0gVHlwZUJpbmRpbmdzLmNyZWF0ZV9uYW1lZF90eXBlX2RlY2xhcmF0aW9uKHNlbGYuanNvbl90
eXBlXywgc2VsZi5qc29uX2RvbWFpbl9bImRvbWFpbiJdLCBzZWxmKQotICAgICAgICAgICAgZmlu
YWxseToKLSAgICAgICAgICAgICAgICBzZWxmLmJpbmRpbmdfYmVpbmdfcmVzb2x2ZWRfID0gRmFs
c2UKLQotICAgICAgICByZXR1cm4gc2VsZi5iaW5kaW5nXwotCi0gICAgZGVmIGdldF9qc29uX3R5
cGUoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLmpzb25fdHlwZV8KLQotICAgIGRlZiBnZXRf
bmFtZShzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuanNvbl90eXBlX1siaWQiXQotCi0gICAg
ZGVmIGdldF9kb21haW5fbmFtZShzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuanNvbl9kb21h
aW5fWyJkb21haW4iXQotCi0KLWNsYXNzIERvbWFpbkRhdGE6Ci0gICAgZGVmIF9faW5pdF9fKHNl
bGYsIGpzb25fZG9tYWluKToKLSAgICAgICAgc2VsZi5qc29uX2RvbWFpbiA9IGpzb25fZG9tYWlu
Ci0gICAgICAgIHNlbGYudHlwZXNfID0gW10KLQotICAgIGRlZiBhZGRfdHlwZShzZWxmLCB0eXBl
X2RhdGEpOgotICAgICAgICBzZWxmLnR5cGVzXy5hcHBlbmQodHlwZV9kYXRhKQotCi0gICAgZGVm
IG5hbWUoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLmpzb25fZG9tYWluWyJkb21haW4iXQot
Ci0gICAgZGVmIHR5cGVzKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi50eXBlc18KLQotCi1j
bGFzcyBUeXBlTWFwOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhcGksIGRlcGVuZGVuY3lfYXBp
KToKLSAgICAgICAgc2VsZi5tYXBfID0ge30KLSAgICAgICAgc2VsZi5kb21haW5zXyA9IFtdCi0g
ICAgICAgIHNlbGYuZG9tYWluc190b19nZW5lcmF0ZV8gPSBbXQotICAgICAgICBmb3IganNvbl9k
b21haW4gaW4gYXBpWyJkb21haW5zIl06Ci0gICAgICAgICAgICBzZWxmLmFkZF9kb21haW4oanNv
bl9kb21haW4sIFRydWUpCi0gICAgICAgIGZvciBqc29uX2RvbWFpbiBpbiBkZXBlbmRlbmN5X2Fw
aVsiZG9tYWlucyJdOgotICAgICAgICAgICAgc2VsZi5hZGRfZG9tYWluKGpzb25fZG9tYWluLCBG
YWxzZSkKLQotICAgIGRlZiBhZGRfZG9tYWluKHNlbGYsIGpzb25fZG9tYWluLCBzaG91bGRfZ2Vu
ZXJhdGUpOgotICAgICAgICBkb21haW5fbmFtZSA9IGpzb25fZG9tYWluWyJkb21haW4iXQotCi0g
ICAgICAgIGRvbWFpbl9tYXAgPSB7fQotICAgICAgICBzZWxmLm1hcF9bZG9tYWluX25hbWVdID0g
ZG9tYWluX21hcAotCi0gICAgICAgIGRvbWFpbl9kYXRhID0gRG9tYWluRGF0YShqc29uX2RvbWFp
bikKLSAgICAgICAgc2VsZi5kb21haW5zXy5hcHBlbmQoZG9tYWluX2RhdGEpCi0KLSAgICAgICAg
aWYgc2hvdWxkX2dlbmVyYXRlOgotICAgICAgICAgICAgIyBGSVhNRTogVGhlIG9yZGVyIG9mIHR5
cGVzIHNob3VsZCBub3QgbWF0dGVyLiBUaGUgZ2VuZXJhdGVkIGNvZGUgc2hvdWxkIHdvcmsgcmVn
YXJkbGVzcyBvZiB0aGUgb3JkZXIgb2YgdHlwZXMuCi0gICAgICAgICAgICBpZiBkb21haW5fbmFt
ZSA9PSAiUGFnZSI6Ci0gICAgICAgICAgICAgICAgc2VsZi5kb21haW5zX3RvX2dlbmVyYXRlXy5p
bnNlcnQoMCwgZG9tYWluX2RhdGEpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAg
IHNlbGYuZG9tYWluc190b19nZW5lcmF0ZV8uYXBwZW5kKGRvbWFpbl9kYXRhKQotCi0gICAgICAg
IGlmICJ0eXBlcyIgaW4ganNvbl9kb21haW46Ci0gICAgICAgICAgICBmb3IganNvbl90eXBlIGlu
IGpzb25fZG9tYWluWyJ0eXBlcyJdOgotICAgICAgICAgICAgICAgIHR5cGVfbmFtZSA9IGpzb25f
dHlwZVsiaWQiXQotICAgICAgICAgICAgICAgIHR5cGVfZGF0YSA9IFR5cGVEYXRhKGpzb25fdHlw
ZSwganNvbl9kb21haW4sIGRvbWFpbl9kYXRhKQotICAgICAgICAgICAgICAgIGRvbWFpbl9tYXBb
dHlwZV9uYW1lXSA9IHR5cGVfZGF0YQotICAgICAgICAgICAgICAgIGRvbWFpbl9kYXRhLmFkZF90
eXBlKHR5cGVfZGF0YSkKLQotICAgIGRlZiBkb21haW5zKHNlbGYpOgotICAgICAgICByZXR1cm4g
c2VsZi5kb21haW5zXwotCi0gICAgZGVmIGRvbWFpbnNfdG9fZ2VuZXJhdGUoc2VsZik6Ci0gICAg
ICAgIHJldHVybiBzZWxmLmRvbWFpbnNfdG9fZ2VuZXJhdGVfCi0KLSAgICBkZWYgZ2V0KHNlbGYs
IGRvbWFpbl9uYW1lLCB0eXBlX25hbWUpOgotICAgICAgICByZXR1cm4gc2VsZi5tYXBfW2RvbWFp
bl9uYW1lXVt0eXBlX25hbWVdCi0KLQotZGVmIHJlc29sdmVfcGFyYW1fdHlwZShqc29uX3BhcmFt
ZXRlciwgc2NvcGVfZG9tYWluX25hbWUsIGFkX2hvY190eXBlX2NvbnRleHQpOgotICAgIGlmICIk
cmVmIiBpbiBqc29uX3BhcmFtZXRlcjoKLSAgICAgICAganNvbl9yZWYgPSBqc29uX3BhcmFtZXRl
clsiJHJlZiJdCi0gICAgICAgIHR5cGVfZGF0YSA9IGdldF9yZWZfZGF0YShqc29uX3JlZiwgc2Nv
cGVfZG9tYWluX25hbWUpCi0gICAgICAgIHJldHVybiB0eXBlX2RhdGEuZ2V0X2JpbmRpbmcoKQot
ICAgIGVsaWYgInR5cGUiIGluIGpzb25fcGFyYW1ldGVyOgotICAgICAgICByZXN1bHQgPSBUeXBl
QmluZGluZ3MuY3JlYXRlX2FkX2hvY190eXBlX2RlY2xhcmF0aW9uKGpzb25fcGFyYW1ldGVyLCBz
Y29wZV9kb21haW5fbmFtZSwgYWRfaG9jX3R5cGVfY29udGV4dCkKLSAgICAgICAgYWRfaG9jX3R5
cGVfY29udGV4dC5hZGRfdHlwZShyZXN1bHQpCi0gICAgICAgIHJldHVybiByZXN1bHQKLSAgICBl
bHNlOgotICAgICAgICByYWlzZSBFeGNlcHRpb24oIlVua25vd24gdHlwZSIpCi0KLQotZGVmIHJl
c29sdmVfcGFyYW1fcmF3X3R5cGUoanNvbl9wYXJhbWV0ZXIsIHNjb3BlX2RvbWFpbl9uYW1lKToK
LSAgICBpZiAiJHJlZiIgaW4ganNvbl9wYXJhbWV0ZXI6Ci0gICAgICAgIGpzb25fcmVmID0ganNv
bl9wYXJhbWV0ZXJbIiRyZWYiXQotICAgICAgICB0eXBlX2RhdGEgPSBnZXRfcmVmX2RhdGEoanNv
bl9yZWYsIHNjb3BlX2RvbWFpbl9uYW1lKQotICAgICAgICByZXR1cm4gdHlwZV9kYXRhLmdldF9y
YXdfdHlwZSgpCi0gICAgZWxpZiAidHlwZSIgaW4ganNvbl9wYXJhbWV0ZXI6Ci0gICAgICAgIGpz
b25fdHlwZSA9IGpzb25fcGFyYW1ldGVyWyJ0eXBlIl0KLSAgICAgICAgcmV0dXJuIFJhd1R5cGVz
LmdldChqc29uX3R5cGUpCi0gICAgZWxzZToKLSAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJVbmtu
b3duIHR5cGUiKQotCi0KLWRlZiBnZXRfcmVmX2RhdGEoanNvbl9yZWYsIHNjb3BlX2RvbWFpbl9u
YW1lKToKLSAgICBkb3RfcG9zID0ganNvbl9yZWYuZmluZCgiLiIpCi0gICAgaWYgZG90X3BvcyA9
PSAtMToKLSAgICAgICAgZG9tYWluX25hbWUgPSBzY29wZV9kb21haW5fbmFtZQotICAgICAgICB0
eXBlX25hbWUgPSBqc29uX3JlZgotICAgIGVsc2U6Ci0gICAgICAgIGRvbWFpbl9uYW1lID0ganNv
bl9yZWZbOmRvdF9wb3NdCi0gICAgICAgIHR5cGVfbmFtZSA9IGpzb25fcmVmW2RvdF9wb3MgKyAx
Ol0KLQotICAgIHJldHVybiB0eXBlX21hcC5nZXQoZG9tYWluX25hbWUsIHR5cGVfbmFtZSkKLQot
Ci1pbnB1dF9maWxlID0gb3BlbihpbnB1dF9qc29uX2ZpbGVuYW1lLCAiciIpCi1qc29uX3N0cmlu
ZyA9IGlucHV0X2ZpbGUucmVhZCgpCi1qc29uX2FwaSA9IGpzb24ubG9hZHMoanNvbl9zdHJpbmcp
Ci1pbnB1dF9maWxlLmNsb3NlKCkKLWlmIG5vdCAiZG9tYWlucyIgaW4ganNvbl9hcGk6Ci0gICAg
anNvbl9hcGkgPSB7ImRvbWFpbnMiOiBbanNvbl9hcGldfQotCi1kZXBlbmRlbmN5X2FwaSA9IHsi
ZG9tYWlucyI6IFtdfQotZm9yIGRlcGVuZGVuY3lfanNvbl9maWxlbmFtZSBpbiBkZXBlbmRlbmN5
X2pzb25fZmlsZW5hbWVzOgotICAgIGRlcGVuZGVuY3lfaW5wdXRfZmlsZSA9IG9wZW4oZGVwZW5k
ZW5jeV9qc29uX2ZpbGVuYW1lLCAiciIpCi0gICAgZGVwZW5kZW5jeV9qc29uX3N0cmluZyA9IGRl
cGVuZGVuY3lfaW5wdXRfZmlsZS5yZWFkKCkKLSAgICBkZXBlbmRlbmN5X2pzb25fYXBpID0ganNv
bi5sb2FkcyhkZXBlbmRlbmN5X2pzb25fc3RyaW5nKQotICAgIGRlcGVuZGVuY3lfaW5wdXRfZmls
ZS5jbG9zZSgpCi0gICAgaWYgbm90ICJkb21haW5zIiBpbiBkZXBlbmRlbmN5X2pzb25fYXBpOgot
ICAgICAgICBkZXBlbmRlbmN5X2pzb25fYXBpID0geyJkb21haW5zIjogW2RlcGVuZGVuY3lfanNv
bl9hcGldfQotICAgIGRlcGVuZGVuY3lfYXBpWyJkb21haW5zIl0gKz0gZGVwZW5kZW5jeV9qc29u
X2FwaVsiZG9tYWlucyJdCi0KLQotY2xhc3MgVGVtcGxhdGVzOgotICAgIGRlZiBnZXRfdGhpc19z
Y3JpcHRfcGF0aF8oYWJzb2x1dGVfcGF0aCk6Ci0gICAgICAgIGFic29sdXRlX3BhdGggPSBvcy5w
YXRoLmFic3BhdGgoYWJzb2x1dGVfcGF0aCkKLSAgICAgICAgY29tcG9uZW50cyA9IFtdCi0KLSAg
ICAgICAgZGVmIGZpbGxfcmVjdXJzaXZlKHBhdGhfcGFydCwgZGVwdGgpOgotICAgICAgICAgICAg
aWYgZGVwdGggPD0gMCBvciBwYXRoX3BhcnQgPT0gJy8nOgotICAgICAgICAgICAgICAgIHJldHVy
bgotICAgICAgICAgICAgZmlsbF9yZWN1cnNpdmUob3MucGF0aC5kaXJuYW1lKHBhdGhfcGFydCks
IGRlcHRoIC0gMSkKLSAgICAgICAgICAgIGNvbXBvbmVudHMuYXBwZW5kKG9zLnBhdGguYmFzZW5h
bWUocGF0aF9wYXJ0KSkKLQotICAgICAgICAjIFR5cGljYWwgcGF0aCBpcyAvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKLSAgICAgICAgIyBMZXQncyB0
YWtlIDQgY29tcG9uZW50cyBmcm9tIHRoZSByZWFsIHBhdGggdGhlbi4KLSAgICAgICAgZmlsbF9y
ZWN1cnNpdmUoYWJzb2x1dGVfcGF0aCwgNCkKLQotICAgICAgICByZXR1cm4gIi8iLmpvaW4oY29t
cG9uZW50cykKLQotICAgIGZpbGVfaGVhZGVyXyA9ICgiLy8gRmlsZSBpcyBnZW5lcmF0ZWQgYnkg
JXNcblxuIiAlIGdldF90aGlzX3NjcmlwdF9wYXRoXyhzeXMuYXJndlswXSkgKwotIiIiLy8gQ29w
eXJpZ2h0IChjKSAyMDEzIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLS8vIENvcHly
aWdodCAoYykgMjAxMSBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0iIiIpCi0K
LSAgICBmcm9udGVuZF9kb21haW5fY2xhc3MgPSBzdHJpbmcuVGVtcGxhdGUoQ29kZUdlbmVyYXRv
ckluc3BlY3RvclN0cmluZ3MuZnJvbnRlbmRfZG9tYWluX2NsYXNzKQotICAgIGJhY2tlbmRfZGlz
cGF0Y2hlcl9jb25zdHJ1Y3RvciA9IHN0cmluZy5UZW1wbGF0ZShDb2RlR2VuZXJhdG9ySW5zcGVj
dG9yU3RyaW5ncy5iYWNrZW5kX2Rpc3BhdGNoZXJfY29uc3RydWN0b3IpCi0gICAgYmFja2VuZF9k
aXNwYXRjaGVyX2Rpc3BhdGNoX21ldGhvZCA9IHN0cmluZy5UZW1wbGF0ZShDb2RlR2VuZXJhdG9y
SW5zcGVjdG9yU3RyaW5ncy5iYWNrZW5kX2Rpc3BhdGNoZXJfZGlzcGF0Y2hfbWV0aG9kKQotICAg
IGJhY2tlbmRfZGlzcGF0Y2hlcl9kaXNwYXRjaF9tZXRob2Rfc2ltcGxlID0gc3RyaW5nLlRlbXBs
YXRlKENvZGVHZW5lcmF0b3JJbnNwZWN0b3JTdHJpbmdzLmJhY2tlbmRfZGlzcGF0Y2hlcl9kaXNw
YXRjaF9tZXRob2Rfc2ltcGxlKQotICAgIGJhY2tlbmRfbWV0aG9kID0gc3RyaW5nLlRlbXBsYXRl
KENvZGVHZW5lcmF0b3JJbnNwZWN0b3JTdHJpbmdzLmJhY2tlbmRfbWV0aG9kKQotICAgIGZyb250
ZW5kX21ldGhvZCA9IHN0cmluZy5UZW1wbGF0ZShDb2RlR2VuZXJhdG9ySW5zcGVjdG9yU3RyaW5n
cy5mcm9udGVuZF9tZXRob2QpCi0gICAgY2FsbGJhY2tfbWV0aG9kID0gc3RyaW5nLlRlbXBsYXRl
KENvZGVHZW5lcmF0b3JJbnNwZWN0b3JTdHJpbmdzLmNhbGxiYWNrX21ldGhvZCkKLSAgICBmcm9u
dGVuZF9oID0gc3RyaW5nLlRlbXBsYXRlKGZpbGVfaGVhZGVyXyArIENvZGVHZW5lcmF0b3JJbnNw
ZWN0b3JTdHJpbmdzLmZyb250ZW5kX2gpCi0gICAgYmFja2VuZF9oID0gc3RyaW5nLlRlbXBsYXRl
KGZpbGVfaGVhZGVyXyArIENvZGVHZW5lcmF0b3JJbnNwZWN0b3JTdHJpbmdzLmJhY2tlbmRfaCkK
LSAgICBiYWNrZW5kX2NwcCA9IHN0cmluZy5UZW1wbGF0ZShmaWxlX2hlYWRlcl8gKyBDb2RlR2Vu
ZXJhdG9ySW5zcGVjdG9yU3RyaW5ncy5iYWNrZW5kX2NwcCkKLSAgICBmcm9udGVuZF9jcHAgPSBz
dHJpbmcuVGVtcGxhdGUoZmlsZV9oZWFkZXJfICsgQ29kZUdlbmVyYXRvckluc3BlY3RvclN0cmlu
Z3MuZnJvbnRlbmRfY3BwKQotICAgIHR5cGVidWlsZGVyX2ggPSBzdHJpbmcuVGVtcGxhdGUoZmls
ZV9oZWFkZXJfICsgQ29kZUdlbmVyYXRvckluc3BlY3RvclN0cmluZ3MudHlwZWJ1aWxkZXJfaCkK
LSAgICB0eXBlYnVpbGRlcl9jcHAgPSBzdHJpbmcuVGVtcGxhdGUoZmlsZV9oZWFkZXJfICsgQ29k
ZUdlbmVyYXRvckluc3BlY3RvclN0cmluZ3MudHlwZWJ1aWxkZXJfY3BwKQotICAgIGJhY2tlbmRf
anMgPSBzdHJpbmcuVGVtcGxhdGUoZmlsZV9oZWFkZXJfICsgQ29kZUdlbmVyYXRvckluc3BlY3Rv
clN0cmluZ3MuYmFja2VuZF9qcykKLSAgICBwYXJhbV9jb250YWluZXJfYWNjZXNzX2NvZGUgPSBD
b2RlR2VuZXJhdG9ySW5zcGVjdG9yU3RyaW5ncy5wYXJhbV9jb250YWluZXJfYWNjZXNzX2NvZGUK
LQotCi0KLQotCi10eXBlX21hcCA9IFR5cGVNYXAoanNvbl9hcGksIGRlcGVuZGVuY3lfYXBpKQot
Ci0KLWNsYXNzIE5lZWRSdW50aW1lQ2FzdFJlcXVlc3Q6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYp
OgotICAgICAgICBzZWxmLmFja18gPSBOb25lCi0KLSAgICBkZWYgYWNrbm93bGVkZ2Uoc2VsZik6
Ci0gICAgICAgIHNlbGYuYWNrXyA9IFRydWUKLQotICAgIGRlZiBpc19hY2tub3dsZWRnZWQoc2Vs
Zik6Ci0gICAgICAgIHJldHVybiBzZWxmLmFja18KLQotCi1kZWYgcmVzb2x2ZV9hbGxfdHlwZXMo
KToKLSAgICBydW50aW1lX2Nhc3RfZ2VuZXJhdGVfcmVxdWVzdHMgPSB7fQotICAgIGZvciB0eXBl
X25hbWUgaW4gVFlQRVNfV0lUSF9SVU5USU1FX0NBU1RfU0VUOgotICAgICAgICBydW50aW1lX2Nh
c3RfZ2VuZXJhdGVfcmVxdWVzdHNbdHlwZV9uYW1lXSA9IE5lZWRSdW50aW1lQ2FzdFJlcXVlc3Qo
KQotCi0gICAgY2xhc3MgRm9yd2FyZExpc3RlbmVyOgotICAgICAgICB0eXBlX2RhdGFfc2V0ID0g
c2V0KCkKLSAgICAgICAgYWxyZWFkeV9kZWNsYXJlZF9zZXQgPSBzZXQoKQotCi0gICAgICAgIEBj
bGFzc21ldGhvZAotICAgICAgICBkZWYgYWRkX3R5cGVfZGF0YShjbHMsIHR5cGVfZGF0YSk6Ci0g
ICAgICAgICAgICBpZiB0eXBlX2RhdGEgbm90IGluIGNscy5hbHJlYWR5X2RlY2xhcmVkX3NldDoK
LSAgICAgICAgICAgICAgICBjbHMudHlwZV9kYXRhX3NldC5hZGQodHlwZV9kYXRhKQotCi0gICAg
Y2xhc3MgUmVzb2x2ZUNvbnRleHQ6Ci0gICAgICAgIGZvcndhcmRfbGlzdGVuZXIgPSBGb3J3YXJk
TGlzdGVuZXIKLQotICAgIGZvciBkb21haW5fZGF0YSBpbiB0eXBlX21hcC5kb21haW5zKCk6Ci0g
ICAgICAgIGZvciB0eXBlX2RhdGEgaW4gZG9tYWluX2RhdGEudHlwZXMoKToKLSAgICAgICAgICAg
IGJpbmRpbmcgPSB0eXBlX2RhdGEuZ2V0X2JpbmRpbmcoKQotICAgICAgICAgICAgYmluZGluZy5y
ZXNvbHZlX2lubmVyKFJlc29sdmVDb250ZXh0KQotICAgICAgICAgICAgIyBEbyBub3QgZ2VuZXJh
dGUgZm9yd2FyZHMgZm9yIHRoaXMgdHlwZSBhbnkgbG9uZ2VyLgotICAgICAgICAgICAgRm9yd2Fy
ZExpc3RlbmVyLmFscmVhZHlfZGVjbGFyZWRfc2V0LmFkZCh0eXBlX2RhdGEpCi0KLSAgICBmb3Ig
ZG9tYWluX2RhdGEgaW4gdHlwZV9tYXAuZG9tYWlucygpOgotICAgICAgICBmb3IgdHlwZV9kYXRh
IGluIGRvbWFpbl9kYXRhLnR5cGVzKCk6Ci0gICAgICAgICAgICBmdWxsX3R5cGVfbmFtZSA9ICIl
cy4lcyIgJSAodHlwZV9kYXRhLmdldF9kb21haW5fbmFtZSgpLCB0eXBlX2RhdGEuZ2V0X25hbWUo
KSkKLSAgICAgICAgICAgIHJlcXVlc3QgPSBydW50aW1lX2Nhc3RfZ2VuZXJhdGVfcmVxdWVzdHMu
cG9wKGZ1bGxfdHlwZV9uYW1lLCBOb25lKQotICAgICAgICAgICAgYmluZGluZyA9IHR5cGVfZGF0
YS5nZXRfYmluZGluZygpCi0gICAgICAgICAgICBpZiByZXF1ZXN0OgotICAgICAgICAgICAgICAg
IGJpbmRpbmcucmVxdWVzdF91c2VyX3J1bnRpbWVfY2FzdChyZXF1ZXN0KQotCi0gICAgICAgICAg
ICBpZiByZXF1ZXN0IGFuZCBub3QgcmVxdWVzdC5pc19hY2tub3dsZWRnZWQoKToKLSAgICAgICAg
ICAgICAgICByYWlzZSBFeGNlcHRpb24oIkZhaWxlZCB0byBnZW5lcmF0ZSBydW50aW1lQ2FzdCBp
biAiICsgZnVsbF90eXBlX25hbWUpCi0KLSAgICAjIEZJWE1FOiBUaGlzIGFzc3VtZXMgYWxsIHRo
ZSBkb21haW5zIGFyZSBwcm9jZXNzZWQgYXQgb25jZS4gQ2hhbmdlIHRoaXMgdmVyaWZpY2F0aW9u
Ci0gICAgIyB0byBvbmx5IHZlcmlmeSBydW50aW1lIGNhc3RzIGZvciB0aGUgZG9tYWlucyBiZWlu
ZyBnZW5lcmF0ZWQuCi0gICAgIyBpZiB2ZXJpZmljYXRpb246Ci0gICAgIyAgICAgZm9yIGZ1bGxf
dHlwZV9uYW1lIGluIHJ1bnRpbWVfY2FzdF9nZW5lcmF0ZV9yZXF1ZXN0czoKLSAgICAjICAgICAg
ICAgcmFpc2UgRXhjZXB0aW9uKCJGYWlsZWQgdG8gZ2VuZXJhdGUgcnVudGltZUNhc3QuIFR5cGUg
IiArIGZ1bGxfdHlwZV9uYW1lICsgIiBub3QgZm91bmQiKQotCi0gICAgcmV0dXJuIEZvcndhcmRM
aXN0ZW5lcgotCi0KLWdsb2JhbF9mb3J3YXJkX2xpc3RlbmVyID0gcmVzb2x2ZV9hbGxfdHlwZXMo
KQotCi0KLWRlZiBnZXRfYW5ub3RhdGVkX3R5cGVfdGV4dChyYXdfdHlwZSwgYW5ub3RhdGVkX3R5
cGUpOgotICAgIGlmIGFubm90YXRlZF90eXBlICE9IHJhd190eXBlOgotICAgICAgICByZXR1cm4g
Ii8qJXMqLyAlcyIgJSAoYW5ub3RhdGVkX3R5cGUsIHJhd190eXBlKQotICAgIGVsc2U6Ci0gICAg
ICAgIHJldHVybiByYXdfdHlwZQotCi0KLWRlZiBmb3JtYXRfc2V0dGVyX3ZhbHVlX2V4cHJlc3Np
b24ocGFyYW1fdHlwZV9iaW5kaW5nLCB2YWx1ZV9yZWYpOgotICAgIHBhdHRlcm4gPSBwYXJhbV90
eXBlX2JpbmRpbmcuZ2V0X3NldHRlcl92YWx1ZV9leHByZXNzaW9uX3BhdHRlcm4oKQotICAgIGlm
IHBhdHRlcm46Ci0gICAgICAgIHJldHVybiBwYXR0ZXJuICUgKElOU1BFQ1RPUl9UWVBFU19HRU5F
UkFUT1JfQ09ORklHX01BUFtvdXRwdXRfdHlwZV1bInByZWZpeCJdLCB2YWx1ZV9yZWYpCi0gICAg
ZWxzZToKLSAgICAgICAgcmV0dXJuIHZhbHVlX3JlZgotCi0KLWNsYXNzIEdlbmVyYXRvcjoKLSAg
ICBmcm9udGVuZF9kb21haW5fY2xhc3NfbGluZXMgPSBbXQotCi0gICAgYmFja2VuZF9tZXRob2Rf
aW1wbGVtZW50YXRpb25fbGlzdCA9IFtdCi0gICAgZnJvbnRlbmRfbWV0aG9kX2xpc3QgPSBbXQot
ICAgIGJhY2tlbmRfanNfZG9tYWluX2luaXRpYWxpemVyX2xpc3QgPSBbXQotCi0gICAgYmFja2Vu
ZF9oYW5kbGVyX2ludGVyZmFjZV9saXN0ID0gW10KLSAgICBiYWNrZW5kX2hhbmRsZXJfaW1wbGVt
ZW50YXRpb25fbGlzdCA9IFtdCi0gICAgYmFja2VuZF9kaXNwYXRjaGVyX2ludGVyZmFjZV9saXN0
ID0gW10KLSAgICB0eXBlX2J1aWxkZXJfZnJhZ21lbnRzID0gW10KLSAgICB0eXBlX2J1aWxkZXJf
Zm9yd2FyZHMgPSBbXQotICAgIHZhbGlkYXRvcl9pbXBsX2xpc3QgPSBbXQotICAgIHR5cGVfYnVp
bGRlcl9pbXBsX2xpc3QgPSBbXQotCi0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIGdvKCk6
Ci0gICAgICAgIEdlbmVyYXRvci5wcm9jZXNzX3R5cGVzKHR5cGVfbWFwKQotCi0gICAgICAgIGZp
cnN0X2N5Y2xlX2d1YXJkYWJsZV9saXN0X2xpc3QgPSBbCi0gICAgICAgICAgICBHZW5lcmF0b3Iu
YmFja2VuZF9tZXRob2RfaW1wbGVtZW50YXRpb25fbGlzdCwKLSAgICAgICAgICAgIEdlbmVyYXRv
ci5iYWNrZW5kX2hhbmRsZXJfaW50ZXJmYWNlX2xpc3QsCi0gICAgICAgICAgICBHZW5lcmF0b3Iu
YmFja2VuZF9oYW5kbGVyX2ltcGxlbWVudGF0aW9uX2xpc3QsCi0gICAgICAgICAgICBHZW5lcmF0
b3IuYmFja2VuZF9kaXNwYXRjaGVyX2ludGVyZmFjZV9saXN0XQotCi0gICAgICAgIGZvciBqc29u
X2RvbWFpbiBpbiBqc29uX2FwaVsiZG9tYWlucyJdOgotICAgICAgICAgICAgZG9tYWluX25hbWUg
PSBqc29uX2RvbWFpblsiZG9tYWluIl0KLSAgICAgICAgICAgIGRvbWFpbl9uYW1lX2xvd2VyID0g
ZG9tYWluX25hbWUubG93ZXIoKQotCi0gICAgICAgICAgICBkb21haW5fZml4ZXMgPSBEb21haW5O
YW1lRml4ZXMuZ2V0X2ZpeGVkX2RhdGEoZG9tYWluX25hbWUpCi0KLSAgICAgICAgICAgIGRvbWFp
bl9ndWFyZCA9IGRvbWFpbl9maXhlcy5nZXRfZ3VhcmQoKQotCi0gICAgICAgICAgICBpZiBkb21h
aW5fZ3VhcmQ6Ci0gICAgICAgICAgICAgICAgZm9yIGwgaW4gZmlyc3RfY3ljbGVfZ3VhcmRhYmxl
X2xpc3RfbGlzdDoKLSAgICAgICAgICAgICAgICAgICAgZG9tYWluX2d1YXJkLmdlbmVyYXRlX29w
ZW4obCkKLQotICAgICAgICAgICAgZnJvbnRlbmRfbWV0aG9kX2RlY2xhcmF0aW9uX2xpbmVzID0g
W10KLQotICAgICAgICAgICAgaWYgKCJjb21tYW5kcyIgaW4ganNvbl9kb21haW4gb3IgImV2ZW50
cyIgaW4ganNvbl9kb21haW4pOgotICAgICAgICAgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX2pz
X2RvbWFpbl9pbml0aWFsaXplcl9saXN0LmFwcGVuZCgiLy8gJXMuXG4iICUgZG9tYWluX25hbWUp
Ci0gICAgICAgICAgICAgICAgaWYgbm90IGRvbWFpbl9maXhlcy5za2lwX2pzX2JpbmQ6Ci0gICAg
ICAgICAgICAgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX2pzX2RvbWFpbl9pbml0aWFsaXplcl9s
aXN0LmFwcGVuZCgiSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlciVzRGlzcGF0Y2hlciA9IEluc3Bl
Y3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW5EaXNwYXRjaGVyLmJpbmQoSW5zcGVjdG9yQmFja2Vu
ZCwgXCIlc1wiKTtcbiIgJSAoZG9tYWluX25hbWUsIGRvbWFpbl9uYW1lKSkKLQotICAgICAgICAg
ICAgaWYgInR5cGVzIiBpbiBqc29uX2RvbWFpbjoKLSAgICAgICAgICAgICAgICBmb3IganNvbl90
eXBlIGluIGpzb25fZG9tYWluWyJ0eXBlcyJdOgotICAgICAgICAgICAgICAgICAgICBpZiAidHlw
ZSIgaW4ganNvbl90eXBlIGFuZCBqc29uX3R5cGVbInR5cGUiXSA9PSAic3RyaW5nIiBhbmQgImVu
dW0iIGluIGpzb25fdHlwZToKLSAgICAgICAgICAgICAgICAgICAgICAgIGVudW1fbmFtZSA9ICIl
cy4lcyIgJSAoZG9tYWluX25hbWUsIGpzb25fdHlwZVsiaWQiXSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgIEdlbmVyYXRvci5wcm9jZXNzX2VudW0oanNvbl90eXBlLCBlbnVtX25hbWUpCi0gICAg
ICAgICAgICAgICAgICAgIGVsaWYganNvbl90eXBlWyJ0eXBlIl0gPT0gIm9iamVjdCI6Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBpZiAicHJvcGVydGllcyIgaW4ganNvbl90eXBlOgotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZvciBqc29uX3Byb3BlcnR5IGluIGpzb25fdHlwZVsicHJv
cGVydGllcyJdOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAidHlwZSIgaW4g
anNvbl9wcm9wZXJ0eSBhbmQganNvbl9wcm9wZXJ0eVsidHlwZSJdID09ICJzdHJpbmciIGFuZCAi
ZW51bSIgaW4ganNvbl9wcm9wZXJ0eToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGVudW1fbmFtZSA9ICIlcy4lcyVzIiAlIChkb21haW5fbmFtZSwganNvbl90eXBlWyJpZCJd
LCB0b190aXRsZV9jYXNlKGpzb25fcHJvcGVydHlbIm5hbWUiXSkpCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHZW5lcmF0b3IucHJvY2Vzc19lbnVtKGpzb25fcHJvcGVydHks
IGVudW1fbmFtZSkKLQotICAgICAgICAgICAgaWYgImV2ZW50cyIgaW4ganNvbl9kb21haW46Ci0g
ICAgICAgICAgICAgICAgaWYgZG9tYWluX2d1YXJkOgotICAgICAgICAgICAgICAgICAgICBkb21h
aW5fZ3VhcmQuZ2VuZXJhdGVfb3BlbihHZW5lcmF0b3IuZnJvbnRlbmRfbWV0aG9kX2xpc3QpCi0g
ICAgICAgICAgICAgICAgICAgIGRvbWFpbl9ndWFyZC5nZW5lcmF0ZV9vcGVuKEdlbmVyYXRvci5m
cm9udGVuZF9kb21haW5fY2xhc3NfbGluZXMpCi0KLSAgICAgICAgICAgICAgICBmb3IganNvbl9l
dmVudCBpbiBqc29uX2RvbWFpblsiZXZlbnRzIl06Ci0gICAgICAgICAgICAgICAgICAgIEdlbmVy
YXRvci5wcm9jZXNzX2V2ZW50KGpzb25fZXZlbnQsIGRvbWFpbl9uYW1lLCBmcm9udGVuZF9tZXRo
b2RfZGVjbGFyYXRpb25fbGluZXMpCi0KLSAgICAgICAgICAgICAgICBHZW5lcmF0b3IuZnJvbnRl
bmRfZG9tYWluX2NsYXNzX2xpbmVzLmFwcGVuZChUZW1wbGF0ZXMuZnJvbnRlbmRfZG9tYWluX2Ns
YXNzLnN1YnN0aXR1dGUoTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgZXhwb3J0TWFjcm89SU5T
UEVDVE9SX1RZUEVTX0dFTkVSQVRPUl9DT05GSUdfTUFQW291dHB1dF90eXBlXVsiZXhwb3J0X21h
Y3JvIl0sCi0gICAgICAgICAgICAgICAgICAgIGRvbWFpbkNsYXNzTmFtZT0iSW5zcGVjdG9yJXNG
cm9udGVuZERpc3BhdGNoZXIiICUgZG9tYWluX25hbWUsCi0gICAgICAgICAgICAgICAgICAgIGZy
b250ZW5kRG9tYWluTWV0aG9kRGVjbGFyYXRpb25zPSIiLmpvaW4oZmxhdHRlbl9saXN0KGZyb250
ZW5kX21ldGhvZF9kZWNsYXJhdGlvbl9saW5lcykpKSkKLQotICAgICAgICAgICAgICAgIGlmIGRv
bWFpbl9ndWFyZDoKLSAgICAgICAgICAgICAgICAgICAgZG9tYWluX2d1YXJkLmdlbmVyYXRlX2Ns
b3NlKEdlbmVyYXRvci5mcm9udGVuZF9tZXRob2RfbGlzdCkKLSAgICAgICAgICAgICAgICAgICAg
ZG9tYWluX2d1YXJkLmdlbmVyYXRlX2Nsb3NlKEdlbmVyYXRvci5mcm9udGVuZF9kb21haW5fY2xh
c3NfbGluZXMpCi0KLSAgICAgICAgICAgIGRpc3BhdGNoZXJfbmFtZSA9ICJJbnNwZWN0b3IiICsg
Q2FwaXRhbGl6ZXIubG93ZXJfY2FtZWxfY2FzZV90b191cHBlcihkb21haW5fbmFtZSkgKyAiQmFj
a2VuZERpc3BhdGNoZXIiCi0gICAgICAgICAgICBhZ2VudF9pbnRlcmZhY2VfbmFtZSA9IGRpc3Bh
dGNoZXJfbmFtZSArICJIYW5kbGVyIgotCi0gICAgICAgICAgICBpZiAiY29tbWFuZHMiIGluIGpz
b25fZG9tYWluOgotICAgICAgICAgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX2Rpc3BhdGNoZXJf
aW50ZXJmYWNlX2xpc3QuYXBwZW5kKCJjbGFzcyAlcyAlcyBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0
b3I6Okluc3BlY3RvclN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHtcbiIgJSAoSU5TUEVD
VE9SX1RZUEVTX0dFTkVSQVRPUl9DT05GSUdfTUFQW291dHB1dF90eXBlXVsiZXhwb3J0X21hY3Jv
Il0sIGRpc3BhdGNoZXJfbmFtZSkpCi0gICAgICAgICAgICAgICAgR2VuZXJhdG9yLmJhY2tlbmRf
ZGlzcGF0Y2hlcl9pbnRlcmZhY2VfbGlzdC5hcHBlbmQoInB1YmxpYzpcbiIpCi0gICAgICAgICAg
ICAgICAgR2VuZXJhdG9yLmJhY2tlbmRfZGlzcGF0Y2hlcl9pbnRlcmZhY2VfbGlzdC5hcHBlbmQo
IiAgICBzdGF0aWMgUGFzc1JlZlB0cjwlcz4gY3JlYXRlKEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXIqLCAlcyopO1xuIiAlIChkaXNwYXRjaGVyX25hbWUsIGFnZW50X2ludGVy
ZmFjZV9uYW1lKSkKLSAgICAgICAgICAgICAgICBHZW5lcmF0b3IuYmFja2VuZF9kaXNwYXRjaGVy
X2ludGVyZmFjZV9saXN0LmFwcGVuZCgiICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaChsb25nIGNh
bGxJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0
b3JPYmplY3Q+IG1lc3NhZ2UpIG92ZXJyaWRlO1xuIikKLSAgICAgICAgICAgICAgICBHZW5lcmF0
b3IuYmFja2VuZF9kaXNwYXRjaGVyX2ludGVyZmFjZV9saXN0LmFwcGVuZCgicHJpdmF0ZTpcbiIp
Ci0KLSAgICAgICAgICAgICAgICBHZW5lcmF0b3IuYmFja2VuZF9oYW5kbGVyX2ludGVyZmFjZV9s
aXN0LmFwcGVuZCgiY2xhc3MgJXMgJXMge1xuIiAlIChJTlNQRUNUT1JfVFlQRVNfR0VORVJBVE9S
X0NPTkZJR19NQVBbb3V0cHV0X3R5cGVdWyJleHBvcnRfbWFjcm8iXSwgYWdlbnRfaW50ZXJmYWNl
X25hbWUpKQotICAgICAgICAgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX2hhbmRsZXJfaW50ZXJm
YWNlX2xpc3QuYXBwZW5kKCJwdWJsaWM6XG4iKQotCi0gICAgICAgICAgICAgICAgYmFja2VuZF9t
ZXRob2RfY291bnQgPSBsZW4oR2VuZXJhdG9yLmJhY2tlbmRfbWV0aG9kX2ltcGxlbWVudGF0aW9u
X2xpc3QpCi0KLSAgICAgICAgICAgICAgICBkaXNwYXRjaGVyX2lmX2NoYWluID0gW10KLSAgICAg
ICAgICAgICAgICBkaXNwYXRjaGVyX2NvbW1hbmRzX2xpc3QgPSBbXQotICAgICAgICAgICAgICAg
IGZvciBqc29uX2NvbW1hbmQgaW4ganNvbl9kb21haW5bImNvbW1hbmRzIl06Ci0gICAgICAgICAg
ICAgICAgICAgIEdlbmVyYXRvci5wcm9jZXNzX2NvbW1hbmQoanNvbl9jb21tYW5kLCBkb21haW5f
bmFtZSwgYWdlbnRfaW50ZXJmYWNlX25hbWUsIGRpc3BhdGNoZXJfbmFtZSwgZGlzcGF0Y2hlcl9p
Zl9jaGFpbiwgZGlzcGF0Y2hlcl9jb21tYW5kc19saXN0KQotCi0gICAgICAgICAgICAgICAgR2Vu
ZXJhdG9yLmJhY2tlbmRfaGFuZGxlcl9pbnRlcmZhY2VfbGlzdC5hcHBlbmQoInByb3RlY3RlZDpc
biIpCi0gICAgICAgICAgICAgICAgR2VuZXJhdG9yLmJhY2tlbmRfaGFuZGxlcl9pbnRlcmZhY2Vf
bGlzdC5hcHBlbmQoIiAgICB2aXJ0dWFsIH4lcygpO1xuIiAlIGFnZW50X2ludGVyZmFjZV9uYW1l
KQotICAgICAgICAgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX2hhbmRsZXJfaW50ZXJmYWNlX2xp
c3QuYXBwZW5kKCJ9O1xuXG4iKQotCi0gICAgICAgICAgICAgICAgR2VuZXJhdG9yLmJhY2tlbmRf
aGFuZGxlcl9pbXBsZW1lbnRhdGlvbl9saXN0LmFwcGVuZCgiJXM6On4lcygpIHsgfVxuIiAlIChh
Z2VudF9pbnRlcmZhY2VfbmFtZSwgYWdlbnRfaW50ZXJmYWNlX25hbWUpKQotCi0gICAgICAgICAg
ICAgICAgR2VuZXJhdG9yLmJhY2tlbmRfZGlzcGF0Y2hlcl9pbnRlcmZhY2VfbGlzdC5hcHBlbmQo
InByaXZhdGU6XG4iKQotICAgICAgICAgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX2Rpc3BhdGNo
ZXJfaW50ZXJmYWNlX2xpc3QuYXBwZW5kKCIgICAgJXMoSW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlciosICVzKik7XG4iICUgKGRpc3BhdGNoZXJfbmFtZSwgYWdlbnRfaW50ZXJm
YWNlX25hbWUpKQotICAgICAgICAgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX2Rpc3BhdGNoZXJf
aW50ZXJmYWNlX2xpc3QuYXBwZW5kKCIgICAgJXMqIG1fYWdlbnQ7XG4iICUgYWdlbnRfaW50ZXJm
YWNlX25hbWUpCi0gICAgICAgICAgICAgICAgR2VuZXJhdG9yLmJhY2tlbmRfZGlzcGF0Y2hlcl9p
bnRlcmZhY2VfbGlzdC5hcHBlbmQoIn07XG5cbiIpCi0KLSAgICAgICAgICAgICAgICBHZW5lcmF0
b3IuYmFja2VuZF9tZXRob2RfaW1wbGVtZW50YXRpb25fbGlzdC5pbnNlcnQoYmFja2VuZF9tZXRo
b2RfY291bnQsIFRlbXBsYXRlcy5iYWNrZW5kX2Rpc3BhdGNoZXJfY29uc3RydWN0b3Iuc3Vic3Rp
dHV0ZShOb25lLAotICAgICAgICAgICAgICAgICAgICBkb21haW5OYW1lPWRvbWFpbl9uYW1lLAot
ICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaGVyTmFtZT1kaXNwYXRjaGVyX25hbWUsCi0gICAg
ICAgICAgICAgICAgICAgIGFnZW50TmFtZT1hZ2VudF9pbnRlcmZhY2VfbmFtZSkpCi0KLSAgICAg
ICAgICAgICAgICBpZiBsZW4oanNvbl9kb21haW5bImNvbW1hbmRzIl0pIDw9IDU6Ci0gICAgICAg
ICAgICAgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX21ldGhvZF9pbXBsZW1lbnRhdGlvbl9saXN0
Lmluc2VydChiYWNrZW5kX21ldGhvZF9jb3VudCArIDEsIFRlbXBsYXRlcy5iYWNrZW5kX2Rpc3Bh
dGNoZXJfZGlzcGF0Y2hfbWV0aG9kX3NpbXBsZS5zdWJzdGl0dXRlKE5vbmUsCi0gICAgICAgICAg
ICAgICAgICAgICAgICBkb21haW5OYW1lPWRvbWFpbl9uYW1lLAotICAgICAgICAgICAgICAgICAg
ICAgICAgZGlzcGF0Y2hlck5hbWU9ZGlzcGF0Y2hlcl9uYW1lLAotICAgICAgICAgICAgICAgICAg
ICAgICAgaWZDaGFpbj0iXG4iLmpvaW4oZGlzcGF0Y2hlcl9pZl9jaGFpbikpKQotICAgICAgICAg
ICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX21ldGhv
ZF9pbXBsZW1lbnRhdGlvbl9saXN0Lmluc2VydChiYWNrZW5kX21ldGhvZF9jb3VudCArIDEsIFRl
bXBsYXRlcy5iYWNrZW5kX2Rpc3BhdGNoZXJfZGlzcGF0Y2hfbWV0aG9kLnN1YnN0aXR1dGUoTm9u
ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGRvbWFpbk5hbWU9ZG9tYWluX25hbWUsCi0gICAg
ICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaGVyTmFtZT1kaXNwYXRjaGVyX25hbWUsCi0gICAg
ICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaGVyQ29tbWFuZHM9IlxuIi5qb2luKGRpc3BhdGNo
ZXJfY29tbWFuZHNfbGlzdCkpKQotCi0gICAgICAgICAgICAgICAgaWYgZG9tYWluX2d1YXJkOgot
ICAgICAgICAgICAgICAgICAgICBmb3IgbCBpbiByZXZlcnNlZChmaXJzdF9jeWNsZV9ndWFyZGFi
bGVfbGlzdF9saXN0KToKLSAgICAgICAgICAgICAgICAgICAgICAgIGRvbWFpbl9ndWFyZC5nZW5l
cmF0ZV9jbG9zZShsKQotICAgICAgICAgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX2pzX2RvbWFp
bl9pbml0aWFsaXplcl9saXN0LmFwcGVuZCgiXG4iKQotCi0gICAgQHN0YXRpY21ldGhvZAotICAg
IGRlZiBwcm9jZXNzX2VudW0oanNvbl9lbnVtLCBlbnVtX25hbWUpOgotICAgICAgICBlbnVtX21l
bWJlcnMgPSBbXQotICAgICAgICBmb3IgbWVtYmVyIGluIGpzb25fZW51bVsiZW51bSJdOgotICAg
ICAgICAgICAgZW51bV9tZW1iZXJzLmFwcGVuZCgiJXM6IFwiJXNcIiIgJSAoZml4X2NhbWVsX2Nh
c2UobWVtYmVyKSwgbWVtYmVyKSkKLQotICAgICAgICBHZW5lcmF0b3IuYmFja2VuZF9qc19kb21h
aW5faW5pdGlhbGl6ZXJfbGlzdC5hcHBlbmQoIkluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFbnVt
KFwiJXNcIiwgeyVzfSk7XG4iICUgKAotICAgICAgICAgICAgZW51bV9uYW1lLCAiLCAiLmpvaW4o
ZW51bV9tZW1iZXJzKSkpCi0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIHByb2Nlc3NfZXZl
bnQoanNvbl9ldmVudCwgZG9tYWluX25hbWUsIGZyb250ZW5kX21ldGhvZF9kZWNsYXJhdGlvbl9s
aW5lcyk6Ci0gICAgICAgIGV2ZW50X25hbWUgPSBqc29uX2V2ZW50WyJuYW1lIl0KLQotICAgICAg
ICBhZF9ob2NfdHlwZV9vdXRwdXQgPSBbXQotICAgICAgICBmcm9udGVuZF9tZXRob2RfZGVjbGFy
YXRpb25fbGluZXMuYXBwZW5kKGFkX2hvY190eXBlX291dHB1dCkKLSAgICAgICAgYWRfaG9jX3R5
cGVfd3JpdGVyID0gV3JpdGVyKGFkX2hvY190eXBlX291dHB1dCwgIiAgICAgICAgIikKLQotICAg
ICAgICBkZWNsX3BhcmFtZXRlcl9saXN0ID0gW10KLQotICAgICAgICBqc29uX3BhcmFtZXRlcnMg
PSBqc29uX2V2ZW50LmdldCgicGFyYW1ldGVycyIpCi0gICAgICAgIEdlbmVyYXRvci5nZW5lcmF0
ZV9zZW5kX21ldGhvZChqc29uX3BhcmFtZXRlcnMsIGV2ZW50X25hbWUsIGRvbWFpbl9uYW1lLCBh
ZF9ob2NfdHlwZV93cml0ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkZWNsX3BhcmFtZXRlcl9saXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR2VuZXJhdG9yLkV2ZW50TWV0aG9kU3RydWN0VGVtcGxhdGUsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHZW5lcmF0b3IuZnJvbnRlbmRfbWV0aG9kX2xpc3Qs
IFRlbXBsYXRlcy5mcm9udGVuZF9tZXRob2QsIHsiZXZlbnROYW1lIjogZXZlbnRfbmFtZX0pCi0K
LSAgICAgICAgYmFja2VuZF9qc19ldmVudF9wYXJhbV9saXN0ID0gW10KLSAgICAgICAgaWYganNv
bl9wYXJhbWV0ZXJzOgotICAgICAgICAgICAgZm9yIHBhcmFtZXRlciBpbiBqc29uX3BhcmFtZXRl
cnM6Ci0gICAgICAgICAgICAgICAgcGFyYW1ldGVyX25hbWUgPSBwYXJhbWV0ZXJbIm5hbWUiXQot
ICAgICAgICAgICAgICAgIGJhY2tlbmRfanNfZXZlbnRfcGFyYW1fbGlzdC5hcHBlbmQoIlwiJXNc
IiIgJSBwYXJhbWV0ZXJfbmFtZSkKLQotICAgICAgICBmcm9udGVuZF9tZXRob2RfZGVjbGFyYXRp
b25fbGluZXMuYXBwZW5kKAotICAgICAgICAgICAgIiAgICB2b2lkICVzKCVzKTtcbiIgJSAoZXZl
bnRfbmFtZSwgIiwgIi5qb2luKGRlY2xfcGFyYW1ldGVyX2xpc3QpKSkKLQotICAgICAgICBHZW5l
cmF0b3IuYmFja2VuZF9qc19kb21haW5faW5pdGlhbGl6ZXJfbGlzdC5hcHBlbmQoIkluc3BlY3Rv
ckJhY2tlbmQucmVnaXN0ZXJFdmVudChcIiVzLiVzXCIsIFslc10pO1xuIiAlICgKLSAgICAgICAg
ICAgIGRvbWFpbl9uYW1lLCBldmVudF9uYW1lLCAiLCAiLmpvaW4oYmFja2VuZF9qc19ldmVudF9w
YXJhbV9saXN0KSkpCi0KLSAgICBjbGFzcyBFdmVudE1ldGhvZFN0cnVjdFRlbXBsYXRlOgotICAg
ICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgIGRlZiBhcHBlbmRfcHJvbG9nKGxpbmVfbGlzdCk6
Ci0gICAgICAgICAgICBsaW5lX2xpc3QuYXBwZW5kKCIgICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gcGFyYW1zT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTtcbiIpCi0KLSAgICAg
ICAgQHN0YXRpY21ldGhvZAotICAgICAgICBkZWYgYXBwZW5kX2VwaWxvZyhsaW5lX2xpc3QpOgot
ICAgICAgICAgICAgbGluZV9saXN0LmFwcGVuZCgiICAgIGpzb25NZXNzYWdlLT5zZXRPYmplY3Qo
QVNDSUlMaXRlcmFsKFwicGFyYW1zXCIpLCBwYXJhbXNPYmplY3QpO1xuIikKLQotICAgICAgICBj
b250YWluZXJfbmFtZSA9ICJwYXJhbXNPYmplY3QiCi0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAg
ZGVmIHByb2Nlc3NfY29tbWFuZChqc29uX2NvbW1hbmQsIGRvbWFpbl9uYW1lLCBhZ2VudF9pbnRl
cmZhY2VfbmFtZSwgZGlzcGF0Y2hlcl9uYW1lLCBkaXNwYXRjaGVyX2lmX2NoYWluLCBkaXNwYXRj
aGVyX2NvbW1hbmRzX2xpc3QpOgotICAgICAgICBqc29uX2NvbW1hbmRfbmFtZSA9IGpzb25fY29t
bWFuZFsibmFtZSJdCi0KLSAgICAgICAgYWRfaG9jX3R5cGVfb3V0cHV0ID0gW10KLSAgICAgICAg
R2VuZXJhdG9yLmJhY2tlbmRfaGFuZGxlcl9pbnRlcmZhY2VfbGlzdC5hcHBlbmQoYWRfaG9jX3R5
cGVfb3V0cHV0KQotICAgICAgICBhZF9ob2NfdHlwZV93cml0ZXIgPSBXcml0ZXIoYWRfaG9jX3R5
cGVfb3V0cHV0LCAiICAgICIpCi0KLSAgICAgICAgR2VuZXJhdG9yLmJhY2tlbmRfZGlzcGF0Y2hl
cl9pbnRlcmZhY2VfbGlzdC5hcHBlbmQoIiAgICB2b2lkICVzKGxvbmcgY2FsbElkLCBjb25zdCBJ
bnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7XG4iICUganNvbl9jb21tYW5kX25h
bWUpCi0KLSAgICAgICAgR2VuZXJhdG9yLmJhY2tlbmRfaGFuZGxlcl9pbnRlcmZhY2VfbGlzdC5h
cHBlbmQoIiAgICB2aXJ0dWFsIHZvaWQgJXMoRXJyb3JTdHJpbmcqIiAlIGpzb25fY29tbWFuZF9u
YW1lKQotCi0gICAgICAgIGlmIG5vdCBkaXNwYXRjaGVyX2lmX2NoYWluOgotICAgICAgICAgICAg
ZGlzcGF0Y2hlcl9pZl9jaGFpbi5hcHBlbmQoIiAgICBpZiAobWV0aG9kID09IFwiJXNcIikiICUg
anNvbl9jb21tYW5kX25hbWUpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBkaXNwYXRjaGVy
X2lmX2NoYWluLmFwcGVuZCgiICAgIGVsc2UgaWYgKG1ldGhvZCA9PSBcIiVzXCIpIiAlIGpzb25f
Y29tbWFuZF9uYW1lKQotICAgICAgICBkaXNwYXRjaGVyX2lmX2NoYWluLmFwcGVuZCgiICAgICAg
ICAlcyhjYWxsSWQsICptZXNzYWdlLmdldCgpKTsiICUganNvbl9jb21tYW5kX25hbWUpCi0gICAg
ICAgIGRpc3BhdGNoZXJfY29tbWFuZHNfbGlzdC5hcHBlbmQoIiAgICAgICAgICAgIHsgXCIlc1wi
LCAmJXM6OiVzIH0sIiAlIChqc29uX2NvbW1hbmRfbmFtZSwgZGlzcGF0Y2hlcl9uYW1lLCBqc29u
X2NvbW1hbmRfbmFtZSkpCi0KLSAgICAgICAgbWV0aG9kX2luX3BhcmFtc19oYW5kbGluZyA9IFtd
Ci0gICAgICAgIG1ldGhvZF9kaXNwYXRjaF9oYW5kbGluZyA9IFtdCi0gICAgICAgIG1ldGhvZF9v
dXRfcGFyYW1zX2hhbmRsaW5nID0gW10KLSAgICAgICAgbWV0aG9kX2VuZGluZ19oYW5kbGluZyA9
IFtdCi0gICAgICAgIG1ldGhvZF9yZXF1ZXN0X21lc3NhZ2VfcGFyYW1fbmFtZSA9ICIiCi0gICAg
ICAgIGFnZW50X2NhbGxfcGFyYW1fbGlzdCA9IFtdCi0gICAgICAgIGpzX3BhcmFtZXRlcnNfdGV4
dCA9ICIiCi0gICAgICAgIGlmICJwYXJhbWV0ZXJzIiBpbiBqc29uX2NvbW1hbmQ6Ci0gICAgICAg
ICAgICBqc29uX3BhcmFtcyA9IGpzb25fY29tbWFuZFsicGFyYW1ldGVycyJdCi0gICAgICAgICAg
ICBtZXRob2RfcmVxdWVzdF9tZXNzYWdlX3BhcmFtX25hbWUgPSAiIG1lc3NhZ2UiCi0gICAgICAg
ICAgICBtZXRob2RfaW5fcGFyYW1zX2hhbmRsaW5nLmFwcGVuZCgiICAgIFJlZlB0cjxJbnNwZWN0
b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7XG4iKQot
ICAgICAgICAgICAgbWV0aG9kX2luX3BhcmFtc19oYW5kbGluZy5hcHBlbmQoIiAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSBtZXNzYWdlLmdldE9iamVjdChBU0NJ
SUxpdGVyYWwoXCJwYXJhbXNcIikpO1xuIikKLSAgICAgICAgICAgIG1ldGhvZF9pbl9wYXJhbXNf
aGFuZGxpbmcuYXBwZW5kKCIgICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIg
PSBwYXJhbXNDb250YWluZXIuZ2V0KCk7XG4iKQotICAgICAgICAgICAgbWV0aG9kX2luX3BhcmFt
c19oYW5kbGluZy5hcHBlbmQoIiAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIg
PSBwcm90b2NvbEVycm9ycy5nZXQoKTtcbiIpCi0gICAgICAgICAgICBqc19wYXJhbV9saXN0ID0g
W10KLQotICAgICAgICAgICAgZm9yIGpzb25fcGFyYW1ldGVyIGluIGpzb25fcGFyYW1zOgotICAg
ICAgICAgICAgICAgIGpzb25fcGFyYW1fbmFtZSA9IGpzb25fcGFyYW1ldGVyWyJuYW1lIl0KLSAg
ICAgICAgICAgICAgICBwYXJhbV9yYXdfdHlwZSA9IHJlc29sdmVfcGFyYW1fcmF3X3R5cGUoanNv
bl9wYXJhbWV0ZXIsIGRvbWFpbl9uYW1lKQotCi0gICAgICAgICAgICAgICAgZ2V0dGVyX25hbWUg
PSBwYXJhbV9yYXdfdHlwZS5nZXRfZ2V0dGVyX25hbWUoKQotCi0gICAgICAgICAgICAgICAgb3B0
aW9uYWwgPSBqc29uX3BhcmFtZXRlci5nZXQoIm9wdGlvbmFsIikKLQotICAgICAgICAgICAgICAg
IG5vbl9vcHRpb25hbF90eXBlX21vZGVsID0gcGFyYW1fcmF3X3R5cGUuZ2V0X3Jhd190eXBlX21v
ZGVsKCkKLSAgICAgICAgICAgICAgICBpZiBvcHRpb25hbDoKLSAgICAgICAgICAgICAgICAgICAg
dHlwZV9tb2RlbCA9IG5vbl9vcHRpb25hbF90eXBlX21vZGVsLmdldF9vcHRpb25hbCgpCi0gICAg
ICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgdHlwZV9tb2RlbCA9IG5vbl9v
cHRpb25hbF90eXBlX21vZGVsCi0KLSAgICAgICAgICAgICAgICBpZiBvcHRpb25hbDoKLSAgICAg
ICAgICAgICAgICAgICAgY29kZSA9ICgiICAgIGJvb2wgJXNfdmFsdWVGb3VuZCA9IGZhbHNlO1xu
IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgJXMgaW5fJXMgPSBJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlcjo6Z2V0JXMocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwo
XCIlc1wiKSwgJiVzX3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRyKTtcbiIgJQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKGpzb25fcGFyYW1fbmFtZSwgbm9uX29wdGlvbmFsX3R5cGVf
bW9kZWwuZ2V0X2NvbW1hbmRfcmV0dXJuX3Bhc3NfbW9kZWwoKS5nZXRfcmV0dXJuX3Zhcl90eXBl
KCksIGpzb25fcGFyYW1fbmFtZSwgZ2V0dGVyX25hbWUsIGpzb25fcGFyYW1fbmFtZSwganNvbl9w
YXJhbV9uYW1lKSkKLSAgICAgICAgICAgICAgICAgICAgcGFyYW0gPSAiLCAlc192YWx1ZUZvdW5k
ID8gJmluXyVzIDogbnVsbHB0ciIgJSAoanNvbl9wYXJhbV9uYW1lLCBqc29uX3BhcmFtX25hbWUp
Ci0gICAgICAgICAgICAgICAgICAgICMgRklYTUU6IHBhc3Mgb3B0aW9uYWwgcmVmcHRyLXZhbHVl
cyBhcyBQYXNzUmVmUHRyCi0gICAgICAgICAgICAgICAgICAgIGZvcm1hbF9wYXJhbV90eXBlX3Bh
dHRlcm4gPSAiY29uc3QgJXMqIgotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAg
ICAgICAgIGNvZGUgPSAoIiAgICAlcyBpbl8lcyA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
OjpnZXQlcyhwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbChcIiVzXCIpLCBudWxscHRy
LCBwcm90b2NvbEVycm9yc1B0cik7XG4iICUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAo
bm9uX29wdGlvbmFsX3R5cGVfbW9kZWwuZ2V0X2NvbW1hbmRfcmV0dXJuX3Bhc3NfbW9kZWwoKS5n
ZXRfcmV0dXJuX3Zhcl90eXBlKCksIGpzb25fcGFyYW1fbmFtZSwgZ2V0dGVyX25hbWUsIGpzb25f
cGFyYW1fbmFtZSkpCi0gICAgICAgICAgICAgICAgICAgIHBhcmFtID0gIiwgaW5fJXMiICUganNv
bl9wYXJhbV9uYW1lCi0gICAgICAgICAgICAgICAgICAgICMgRklYTUU6IHBhc3Mgbm90LW9wdGlv
bmFsIHJlZnB0ci12YWx1ZXMgYXMgTm9uTnVsbFBhc3NSZWZQdHIKLSAgICAgICAgICAgICAgICAg
ICAgaWYgcGFyYW1fcmF3X3R5cGUuaXNfaGVhdnlfdmFsdWUoKToKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGZvcm1hbF9wYXJhbV90eXBlX3BhdHRlcm4gPSAiY29uc3QgJXMmIgotICAgICAgICAg
ICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWFsX3BhcmFtX3R5
cGVfcGF0dGVybiA9ICIlcyIKLQotICAgICAgICAgICAgICAgIG1ldGhvZF9pbl9wYXJhbXNfaGFu
ZGxpbmcuYXBwZW5kKGNvZGUpCi0gICAgICAgICAgICAgICAgYWdlbnRfY2FsbF9wYXJhbV9saXN0
LmFwcGVuZChwYXJhbSkKLSAgICAgICAgICAgICAgICBHZW5lcmF0b3IuYmFja2VuZF9oYW5kbGVy
X2ludGVyZmFjZV9saXN0LmFwcGVuZCgiLCAlcyBpbl8lcyIgJSAoZm9ybWFsX3BhcmFtX3R5cGVf
cGF0dGVybiAlIG5vbl9vcHRpb25hbF90eXBlX21vZGVsLmdldF9jb21tYW5kX3JldHVybl9wYXNz
X21vZGVsKCkuZ2V0X3JldHVybl92YXJfdHlwZSgpLCBqc29uX3BhcmFtX25hbWUpKQotCi0gICAg
ICAgICAgICAgICAganNfYmluZF90eXBlID0gcGFyYW1fcmF3X3R5cGUuZ2V0X2pzX2JpbmRfdHlw
ZSgpCi0gICAgICAgICAgICAgICAganNfcGFyYW1fdGV4dCA9ICJ7XCJuYW1lXCI6IFwiJXNcIiwg
XCJ0eXBlXCI6IFwiJXNcIiwgXCJvcHRpb25hbFwiOiAlc30iICUgKAotICAgICAgICAgICAgICAg
ICAgICBqc29uX3BhcmFtX25hbWUsCi0gICAgICAgICAgICAgICAgICAgIGpzX2JpbmRfdHlwZSwK
LSAgICAgICAgICAgICAgICAgICAgKCJ0cnVlIiBpZiAoIm9wdGlvbmFsIiBpbiBqc29uX3BhcmFt
ZXRlciBhbmQganNvbl9wYXJhbWV0ZXJbIm9wdGlvbmFsIl0pIGVsc2UgImZhbHNlIikpCi0KLSAg
ICAgICAgICAgICAgICBqc19wYXJhbV9saXN0LmFwcGVuZChqc19wYXJhbV90ZXh0KQotCi0gICAg
ICAgICAgICBtZXRob2RfaW5fcGFyYW1zX2hhbmRsaW5nLmFwcGVuZCgiICAgIGlmIChwcm90b2Nv
bEVycm9ycy0+bGVuZ3RoKCkpIHtcbiIpCi0gICAgICAgICAgICBtZXRob2RfaW5fcGFyYW1zX2hh
bmRsaW5nLmFwcGVuZCgiICAgICAgICBTdHJpbmcgZXJyb3JNZXNzYWdlID0gU3RyaW5nOjpmb3Jt
YXQoXCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyUlcycgY2FuJ3QgYmUgcHJvY2Vzc2VkXCIs
IFwiJXMuJXNcIik7XG4iICUgKGRvbWFpbl9uYW1lLCBqc29uX2NvbW1hbmRfbmFtZSkpCi0gICAg
ICAgICAgICBtZXRob2RfaW5fcGFyYW1zX2hhbmRsaW5nLmFwcGVuZCgiICAgICAgICBtX2JhY2tl
bmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIEluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCBlcnJvck1lc3NhZ2UsIHByb3RvY29sRXJyb3Jz
LnJlbGVhc2UoKSk7XG4iKQotICAgICAgICAgICAgbWV0aG9kX2luX3BhcmFtc19oYW5kbGluZy5h
cHBlbmQoIiAgICAgICAgcmV0dXJuO1xuIikKLSAgICAgICAgICAgIG1ldGhvZF9pbl9wYXJhbXNf
aGFuZGxpbmcuYXBwZW5kKCIgICAgfVxuIikKLSAgICAgICAgICAgIG1ldGhvZF9pbl9wYXJhbXNf
aGFuZGxpbmcuYXBwZW5kKCJcbiIpCi0KLSAgICAgICAgICAgIGpzX3BhcmFtZXRlcnNfdGV4dCA9
ICIsICIuam9pbihqc19wYXJhbV9saXN0KQotCi0gICAgICAgIG1ldGhvZF9kaXNwYXRjaF9oYW5k
bGluZy5hcHBlbmQoIiAgICBFcnJvclN0cmluZyBlcnJvcjtcbiIpCi0gICAgICAgIG1ldGhvZF9k
aXNwYXRjaF9oYW5kbGluZy5hcHBlbmQoIiAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1
bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpO1xuIikKLQotICAgICAgICBpZiBqc29uX2Nv
bW1hbmQuZ2V0KCJhc3luYyIpID09IFRydWU6Ci0gICAgICAgICAgICBjYWxsYmFja19uYW1lID0g
Q2FwaXRhbGl6ZXIubG93ZXJfY2FtZWxfY2FzZV90b191cHBlcihqc29uX2NvbW1hbmRfbmFtZSkg
KyAiQ2FsbGJhY2siCi0KLSAgICAgICAgICAgIGNhbGxiYWNrX291dHB1dCA9IFtdCi0gICAgICAg
ICAgICBjYWxsYmFja193cml0ZXIgPSBXcml0ZXIoY2FsbGJhY2tfb3V0cHV0LCBhZF9ob2NfdHlw
ZV93cml0ZXIuZ2V0X2luZGVudCgpKQotCi0gICAgICAgICAgICBkZWNsX3BhcmFtZXRlcl9saXN0
ID0gW10KLSAgICAgICAgICAgIEdlbmVyYXRvci5nZW5lcmF0ZV9zZW5kX21ldGhvZChqc29uX2Nv
bW1hbmQuZ2V0KCJyZXR1cm5zIiksIGpzb25fY29tbWFuZF9uYW1lLCBkb21haW5fbmFtZSwgYWRf
aG9jX3R5cGVfd3JpdGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGRlY2xfcGFyYW1ldGVyX2xpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR2VuZXJhdG9yLkNhbGxiYWNrTWV0aG9kU3RydWN0VGVtcGxhdGUsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2VuZXJhdG9yLmJhY2tlbmRf
bWV0aG9kX2ltcGxlbWVudGF0aW9uX2xpc3QsIFRlbXBsYXRlcy5jYWxsYmFja19tZXRob2QsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyJjYWxsYmFja05hbWUi
OiBjYWxsYmFja19uYW1lLCAiaGFuZGxlck5hbWUiOiBhZ2VudF9pbnRlcmZhY2VfbmFtZX0pCi0K
LSAgICAgICAgICAgIGNhbGxiYWNrX3dyaXRlci5uZXdsaW5lKCJjbGFzcyAiICsgY2FsbGJhY2tf
bmFtZSArICIgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6
Q2FsbGJhY2tCYXNlIHtcbiIpCi0gICAgICAgICAgICBjYWxsYmFja193cml0ZXIubmV3bGluZSgi
cHVibGljOlxuIikKLSAgICAgICAgICAgIGNhbGxiYWNrX3dyaXRlci5uZXdsaW5lKCIgICAgIiAr
IGNhbGxiYWNrX25hbWUgKyAiKFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlcj4sIGludCBpZCk7XG4iKQotICAgICAgICAgICAgY2FsbGJhY2tfd3JpdGVyLm5l
d2xpbmUoIiAgICB2b2lkIHNlbmRTdWNjZXNzKCIgKyAiLCAiLmpvaW4oZGVjbF9wYXJhbWV0ZXJf
bGlzdCkgKyAiKTtcbiIpCi0gICAgICAgICAgICBjYWxsYmFja193cml0ZXIubmV3bGluZSgifTtc
biIpCi0KLSAgICAgICAgICAgIGFkX2hvY190eXBlX291dHB1dC5hcHBlbmQoY2FsbGJhY2tfb3V0
cHV0KQotCi0gICAgICAgICAgICBtZXRob2RfZGlzcGF0Y2hfaGFuZGxpbmcuYXBwZW5kKCIgICAg
UmVmUHRyPCVzOjolcz4gY2FsbGJhY2sgPSBhZG9wdFJlZihuZXcgJXM6OiVzKG1fYmFja2VuZERp
c3BhdGNoZXIsY2FsbElkKSk7XG4iICUgKGFnZW50X2ludGVyZmFjZV9uYW1lLCBjYWxsYmFja19u
YW1lLCBhZ2VudF9pbnRlcmZhY2VfbmFtZSwgY2FsbGJhY2tfbmFtZSkpCi0gICAgICAgICAgICBt
ZXRob2RfZW5kaW5nX2hhbmRsaW5nLmFwcGVuZCgiICAgIGlmIChlcnJvci5sZW5ndGgoKSkge1xu
IikKLSAgICAgICAgICAgIG1ldGhvZF9lbmRpbmdfaGFuZGxpbmcuYXBwZW5kKCIgICAgICAgIGNh
bGxiYWNrLT5kaXNhYmxlKCk7XG4iKQotICAgICAgICAgICAgbWV0aG9kX2VuZGluZ19oYW5kbGlu
Zy5hcHBlbmQoIiAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJv
cigmY2FsbElkLCBJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJF
cnJvciwgZXJyb3IpO1xuIikKLSAgICAgICAgICAgIG1ldGhvZF9lbmRpbmdfaGFuZGxpbmcuYXBw
ZW5kKCIgICAgICAgIHJldHVybjtcbiIpCi0gICAgICAgICAgICBtZXRob2RfZW5kaW5nX2hhbmRs
aW5nLmFwcGVuZCgiICAgIH0iKQotCi0gICAgICAgICAgICBhZ2VudF9jYWxsX3BhcmFtX2xpc3Qu
YXBwZW5kKCIsIGNhbGxiYWNrIikKLSAgICAgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX2hhbmRs
ZXJfaW50ZXJmYWNlX2xpc3QuYXBwZW5kKCIsIFBhc3NSZWZQdHI8JXM+IGNhbGxiYWNrIiAlIGNh
bGxiYWNrX25hbWUpCi0gICAgICAgIGVsaWYgInJldHVybnMiIGluIGpzb25fY29tbWFuZDoKLSAg
ICAgICAgICAgIGhhc19tdWx0aXBsZV9yZXR1cm5zID0gbGVuKGpzb25fY29tbWFuZFsicmV0dXJu
cyJdKSA+IDEKLSAgICAgICAgICAgIGlmIGhhc19tdWx0aXBsZV9yZXR1cm5zOgotICAgICAgICAg
ICAgICAgIG1ldGhvZF9vdXRfcGFyYW1zX2hhbmRsaW5nLmFwcGVuZCgiICAgIGlmICghZXJyb3Iu
bGVuZ3RoKCkpIHtcbiIpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIG1ldGhv
ZF9vdXRfcGFyYW1zX2hhbmRsaW5nLmFwcGVuZCgiICAgIGlmICghZXJyb3IubGVuZ3RoKCkpXG4i
KQotCi0gICAgICAgICAgICBmb3IganNvbl9yZXR1cm4gaW4ganNvbl9jb21tYW5kWyJyZXR1cm5z
Il06Ci0KLSAgICAgICAgICAgICAgICBqc29uX3JldHVybl9uYW1lID0ganNvbl9yZXR1cm5bIm5h
bWUiXQotCi0gICAgICAgICAgICAgICAgb3B0aW9uYWwgPSBib29sKGpzb25fcmV0dXJuLmdldCgi
b3B0aW9uYWwiKSkKLQotICAgICAgICAgICAgICAgIHJldHVybl90eXBlX2JpbmRpbmcgPSBHZW5l
cmF0b3IucmVzb2x2ZV90eXBlX2FuZF9nZW5lcmF0ZV9hZF9ob2MoanNvbl9yZXR1cm4sIGpzb25f
Y29tbWFuZF9uYW1lLCBkb21haW5fbmFtZSwgYWRfaG9jX3R5cGVfd3JpdGVyLCBhZ2VudF9pbnRl
cmZhY2VfbmFtZSArICI6OiIpCi0KLSAgICAgICAgICAgICAgICByYXdfdHlwZSA9IHJldHVybl90
eXBlX2JpbmRpbmcucmVkdWNlX3RvX3Jhd190eXBlKCkKLSAgICAgICAgICAgICAgICBzZXR0ZXJf
dHlwZSA9IHJhd190eXBlLmdldF9zZXR0ZXJfbmFtZSgpCi0gICAgICAgICAgICAgICAgaW5pdGlh
bGl6ZXIgPSByYXdfdHlwZS5nZXRfY19pbml0aWFsaXplcigpCi0KLSAgICAgICAgICAgICAgICB0
eXBlX21vZGVsID0gcmV0dXJuX3R5cGVfYmluZGluZy5nZXRfdHlwZV9tb2RlbCgpCi0gICAgICAg
ICAgICAgICAgaWYgb3B0aW9uYWw6Ci0gICAgICAgICAgICAgICAgICAgIHR5cGVfbW9kZWwgPSB0
eXBlX21vZGVsLmdldF9vcHRpb25hbCgpCi0KLSAgICAgICAgICAgICAgICBjb2RlID0gIiAgICAl
cyBvdXRfJXM7XG4iICUgKHR5cGVfbW9kZWwuZ2V0X2NvbW1hbmRfcmV0dXJuX3Bhc3NfbW9kZWwo
KS5nZXRfcmV0dXJuX3Zhcl90eXBlKCksIGpzb25fcmV0dXJuX25hbWUpCi0gICAgICAgICAgICAg
ICAgcGFyYW0gPSAiLCAlc291dF8lcyIgJSAodHlwZV9tb2RlbC5nZXRfY29tbWFuZF9yZXR1cm5f
cGFzc19tb2RlbCgpLmdldF9vdXRwdXRfYXJndW1lbnRfcHJlZml4KCksIGpzb25fcmV0dXJuX25h
bWUpCi0gICAgICAgICAgICAgICAgdmFyX25hbWUgPSAib3V0XyVzIiAlIGpzb25fcmV0dXJuX25h
bWUKLSAgICAgICAgICAgICAgICBzZXR0ZXJfYXJndW1lbnQgPSB0eXBlX21vZGVsLmdldF9jb21t
YW5kX3JldHVybl9wYXNzX21vZGVsKCkuZ2V0X291dHB1dF90b19yYXdfZXhwcmVzc2lvbigpICUg
dmFyX25hbWUKLSAgICAgICAgICAgICAgICBpZiByZXR1cm5fdHlwZV9iaW5kaW5nLmdldF9zZXR0
ZXJfdmFsdWVfZXhwcmVzc2lvbl9wYXR0ZXJuKCk6Ci0gICAgICAgICAgICAgICAgICAgIHNldHRl
cl9hcmd1bWVudCA9IHJldHVybl90eXBlX2JpbmRpbmcuZ2V0X3NldHRlcl92YWx1ZV9leHByZXNz
aW9uX3BhdHRlcm4oKSAlIChJTlNQRUNUT1JfVFlQRVNfR0VORVJBVE9SX0NPTkZJR19NQVBbb3V0
cHV0X3R5cGVdWyJwcmVmaXgiXSwgc2V0dGVyX2FyZ3VtZW50KQotCi0gICAgICAgICAgICAgICAg
Y29vayA9ICIgICAgICAgIHJlc3VsdC0+c2V0JXMoQVNDSUlMaXRlcmFsKFwiJXNcIiksICVzKTtc
biIgJSAoc2V0dGVyX3R5cGUsIGpzb25fcmV0dXJuX25hbWUsIHNldHRlcl9hcmd1bWVudCkKLQot
ICAgICAgICAgICAgICAgIHNldF9jb25kaXRpb25fcGF0dGVybiA9IHR5cGVfbW9kZWwuZ2V0X2Nv
bW1hbmRfcmV0dXJuX3Bhc3NfbW9kZWwoKS5nZXRfc2V0X3JldHVybl9jb25kaXRpb24oKQotICAg
ICAgICAgICAgICAgIGlmIHNldF9jb25kaXRpb25fcGF0dGVybjoKLSAgICAgICAgICAgICAgICAg
ICAgY29vayA9ICgiICAgICAgICBpZiAoJXMpXG4gICAgIiAlIChzZXRfY29uZGl0aW9uX3BhdHRl
cm4gJSB2YXJfbmFtZSkpICsgY29vawotICAgICAgICAgICAgICAgIGFubm90YXRlZF90eXBlID0g
dHlwZV9tb2RlbC5nZXRfY29tbWFuZF9yZXR1cm5fcGFzc19tb2RlbCgpLmdldF9vdXRwdXRfcGFy
YW1ldGVyX3R5cGUoKQotCi0gICAgICAgICAgICAgICAgcGFyYW1fbmFtZSA9ICJvdXRfJXMiICUg
anNvbl9yZXR1cm5fbmFtZQotICAgICAgICAgICAgICAgIGlmIG9wdGlvbmFsOgotICAgICAgICAg
ICAgICAgICAgICBwYXJhbV9uYW1lID0gIm9wdF8iICsgcGFyYW1fbmFtZQotCi0gICAgICAgICAg
ICAgICAgR2VuZXJhdG9yLmJhY2tlbmRfaGFuZGxlcl9pbnRlcmZhY2VfbGlzdC5hcHBlbmQoIiwg
JXMgJXMiICUgKGFubm90YXRlZF90eXBlLCBwYXJhbV9uYW1lKSkKLSAgICAgICAgICAgICAgICBt
ZXRob2Rfb3V0X3BhcmFtc19oYW5kbGluZy5hcHBlbmQoY29vaykKLSAgICAgICAgICAgICAgICBt
ZXRob2RfZGlzcGF0Y2hfaGFuZGxpbmcuYXBwZW5kKGNvZGUpCi0KLSAgICAgICAgICAgICAgICBh
Z2VudF9jYWxsX3BhcmFtX2xpc3QuYXBwZW5kKHBhcmFtKQotCi0gICAgICAgICAgICBpZiBoYXNf
bXVsdGlwbGVfcmV0dXJuczoKLSAgICAgICAgICAgICAgICBtZXRob2Rfb3V0X3BhcmFtc19oYW5k
bGluZy5hcHBlbmQoIiAgICB9XG4iKQotICAgICAgICAgICAgbWV0aG9kX291dF9wYXJhbXNfaGFu
ZGxpbmcuYXBwZW5kKCJcbiIpCi0KLSAgICAgICAgbWV0aG9kX2Rpc3BhdGNoX2hhbmRsaW5nLmFw
cGVuZCgiICAgIG1fYWdlbnQtPiVzKCZlcnJvciVzKTtcbiIgJSAoanNvbl9jb21tYW5kX25hbWUs
ICIiLmpvaW4oYWdlbnRfY2FsbF9wYXJhbV9saXN0KSkpCi0gICAgICAgIG1ldGhvZF9kaXNwYXRj
aF9oYW5kbGluZy5hcHBlbmQoIlxuIikKLQotICAgICAgICBpZiBub3QgbWV0aG9kX2VuZGluZ19o
YW5kbGluZzoKLSAgICAgICAgICAgIG1ldGhvZF9lbmRpbmdfaGFuZGxpbmcuYXBwZW5kKCIgICAg
bV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2Uo
KSwgZXJyb3IpOyIpCi0KLSAgICAgICAgYmFja2VuZF9qc19yZXBseV9wYXJhbV9saXN0ID0gW10K
LSAgICAgICAgaWYgInJldHVybnMiIGluIGpzb25fY29tbWFuZDoKLSAgICAgICAgICAgIGZvciBq
c29uX3JldHVybiBpbiBqc29uX2NvbW1hbmRbInJldHVybnMiXToKLSAgICAgICAgICAgICAgICBq
c29uX3JldHVybl9uYW1lID0ganNvbl9yZXR1cm5bIm5hbWUiXQotICAgICAgICAgICAgICAgIGJh
Y2tlbmRfanNfcmVwbHlfcGFyYW1fbGlzdC5hcHBlbmQoIlwiJXNcIiIgJSBqc29uX3JldHVybl9u
YW1lKQotCi0gICAgICAgIGpzX3JlcGx5X2xpc3QgPSAiWyVzXSIgJSAiLCAiLmpvaW4oYmFja2Vu
ZF9qc19yZXBseV9wYXJhbV9saXN0KQotCi0gICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX21ldGhv
ZF9pbXBsZW1lbnRhdGlvbl9saXN0LmFwcGVuZChUZW1wbGF0ZXMuYmFja2VuZF9tZXRob2Quc3Vi
c3RpdHV0ZShOb25lLAotICAgICAgICAgICAgZGlzcGF0Y2hlck5hbWU9ZGlzcGF0Y2hlcl9uYW1l
LAotICAgICAgICAgICAgbWV0aG9kTmFtZT1qc29uX2NvbW1hbmRfbmFtZSwKLSAgICAgICAgICAg
IHJlcXVlc3RNZXNzYWdlT2JqZWN0PW1ldGhvZF9yZXF1ZXN0X21lc3NhZ2VfcGFyYW1fbmFtZSwK
LSAgICAgICAgICAgIG1ldGhvZEluUGFyYW1ldGVyc0hhbmRsaW5nPSIiLmpvaW4obWV0aG9kX2lu
X3BhcmFtc19oYW5kbGluZyksCi0gICAgICAgICAgICBtZXRob2REaXNwYXRjaEhhbmRsaW5nPSIi
LmpvaW4obWV0aG9kX2Rpc3BhdGNoX2hhbmRsaW5nKSwKLSAgICAgICAgICAgIG1ldGhvZE91dFBh
cmFtZXRlcnNIYW5kbGluZz0iIi5qb2luKG1ldGhvZF9vdXRfcGFyYW1zX2hhbmRsaW5nKSwKLSAg
ICAgICAgICAgIG1ldGhvZEVuZGluZ0hhbmRsaW5nPSIiLmpvaW4obWV0aG9kX2VuZGluZ19oYW5k
bGluZykpKQotCi0gICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX2pzX2RvbWFpbl9pbml0aWFsaXpl
cl9saXN0LmFwcGVuZCgiSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoXCIlcy4lc1wi
LCBbJXNdLCAlcyk7XG4iICUgKGRvbWFpbl9uYW1lLCBqc29uX2NvbW1hbmRfbmFtZSwganNfcGFy
YW1ldGVyc190ZXh0LCBqc19yZXBseV9saXN0KSkKLSAgICAgICAgR2VuZXJhdG9yLmJhY2tlbmRf
aGFuZGxlcl9pbnRlcmZhY2VfbGlzdC5hcHBlbmQoIikgPSAwO1xuIikKLQotICAgIGNsYXNzIENh
bGxiYWNrTWV0aG9kU3RydWN0VGVtcGxhdGU6Ci0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAg
ICAgZGVmIGFwcGVuZF9wcm9sb2cobGluZV9saXN0KToKLSAgICAgICAgICAgIHBhc3MKLQotICAg
ICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgIGRlZiBhcHBlbmRfZXBpbG9nKGxpbmVfbGlzdCk6
Ci0gICAgICAgICAgICBwYXNzCi0KLSAgICAgICAgY29udGFpbmVyX25hbWUgPSAianNvbk1lc3Nh
Z2UiCi0KLSAgICAjIEdlbmVyYXRlcyBjb21tb24gY29kZSBmb3IgZXZlbnQgc2VuZGluZyBhbmQg
Y2FsbGJhY2sgcmVzcG9uc2UgZGF0YSBzZW5kaW5nLgotICAgIEBzdGF0aWNtZXRob2QKLSAgICBk
ZWYgZ2VuZXJhdGVfc2VuZF9tZXRob2QocGFyYW1ldGVycywgZXZlbnRfbmFtZSwgZG9tYWluX25h
bWUsIGFkX2hvY190eXBlX3dyaXRlciwgZGVjbF9wYXJhbWV0ZXJfbGlzdCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbWV0aG9kX3N0cnVjdF90ZW1wbGF0ZSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZ2VuZXJhdG9yX21ldGhvZF9saXN0LCBtZXRob2RfdGVtcGxhdGUsIHRl
bXBsYXRlX3BhcmFtcyk6Ci0gICAgICAgIG1ldGhvZF9saW5lX2xpc3QgPSBbXQotICAgICAgICBp
ZiBwYXJhbWV0ZXJzOgotICAgICAgICAgICAgbWV0aG9kX3N0cnVjdF90ZW1wbGF0ZS5hcHBlbmRf
cHJvbG9nKG1ldGhvZF9saW5lX2xpc3QpCi0gICAgICAgICAgICBmb3IganNvbl9wYXJhbWV0ZXIg
aW4gcGFyYW1ldGVyczoKLSAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfbmFtZSA9IGpzb25fcGFy
YW1ldGVyWyJuYW1lIl0KLQotICAgICAgICAgICAgICAgIHBhcmFtX3R5cGVfYmluZGluZyA9IEdl
bmVyYXRvci5yZXNvbHZlX3R5cGVfYW5kX2dlbmVyYXRlX2FkX2hvYyhqc29uX3BhcmFtZXRlciwg
ZXZlbnRfbmFtZSwgZG9tYWluX25hbWUsIGFkX2hvY190eXBlX3dyaXRlciwgIiIpCi0KLSAgICAg
ICAgICAgICAgICByYXdfdHlwZSA9IHBhcmFtX3R5cGVfYmluZGluZy5yZWR1Y2VfdG9fcmF3X3R5
cGUoKQotICAgICAgICAgICAgICAgIHJhd190eXBlX2JpbmRpbmcgPSBSYXdUeXBlQmluZGluZyhy
YXdfdHlwZSkKLQotICAgICAgICAgICAgICAgIG9wdGlvbmFsID0gYm9vbChqc29uX3BhcmFtZXRl
ci5nZXQoIm9wdGlvbmFsIikpCi0KLSAgICAgICAgICAgICAgICBzZXR0ZXJfdHlwZSA9IHJhd190
eXBlLmdldF9zZXR0ZXJfbmFtZSgpCi0KLSAgICAgICAgICAgICAgICB0eXBlX21vZGVsID0gcGFy
YW1fdHlwZV9iaW5kaW5nLmdldF90eXBlX21vZGVsKCkKLSAgICAgICAgICAgICAgICByYXdfdHlw
ZV9tb2RlbCA9IHJhd190eXBlX2JpbmRpbmcuZ2V0X3R5cGVfbW9kZWwoKQotICAgICAgICAgICAg
ICAgIGlmIG9wdGlvbmFsOgotICAgICAgICAgICAgICAgICAgICB0eXBlX21vZGVsID0gdHlwZV9t
b2RlbC5nZXRfb3B0aW9uYWwoKQotICAgICAgICAgICAgICAgICAgICByYXdfdHlwZV9tb2RlbCA9
IHJhd190eXBlX21vZGVsLmdldF9vcHRpb25hbCgpCi0KLSAgICAgICAgICAgICAgICBhbm5vdGF0
ZWRfdHlwZSA9IHR5cGVfbW9kZWwuZ2V0X2lucHV0X3BhcmFtX3R5cGVfdGV4dCgpCi0gICAgICAg
ICAgICAgICAgbW9kZV90eXBlX2JpbmRpbmcgPSBwYXJhbV90eXBlX2JpbmRpbmcKLQotICAgICAg
ICAgICAgICAgIGRlY2xfcGFyYW1ldGVyX2xpc3QuYXBwZW5kKCIlcyAlcyIgJSAoYW5ub3RhdGVk
X3R5cGUsIHBhcmFtZXRlcl9uYW1lKSkKLQotICAgICAgICAgICAgICAgIHNldHRlcl9hcmd1bWVu
dCA9IHJhd190eXBlX21vZGVsLmdldF9ldmVudF9zZXR0ZXJfZXhwcmVzc2lvbl9wYXR0ZXJuKCkg
JSBwYXJhbWV0ZXJfbmFtZQotICAgICAgICAgICAgICAgIGlmIG1vZGVfdHlwZV9iaW5kaW5nLmdl
dF9zZXR0ZXJfdmFsdWVfZXhwcmVzc2lvbl9wYXR0ZXJuKCk6Ci0gICAgICAgICAgICAgICAgICAg
IHNldHRlcl9hcmd1bWVudCA9IG1vZGVfdHlwZV9iaW5kaW5nLmdldF9zZXR0ZXJfdmFsdWVfZXhw
cmVzc2lvbl9wYXR0ZXJuKCkgJSAoSU5TUEVDVE9SX1RZUEVTX0dFTkVSQVRPUl9DT05GSUdfTUFQ
W291dHB1dF90eXBlXVsicHJlZml4Il0sIHNldHRlcl9hcmd1bWVudCkKLQotICAgICAgICAgICAg
ICAgIHNldHRlcl9jb2RlID0gIiAgICAlcy0+c2V0JXMoQVNDSUlMaXRlcmFsKFwiJXNcIiksICVz
KTtcbiIgJSAobWV0aG9kX3N0cnVjdF90ZW1wbGF0ZS5jb250YWluZXJfbmFtZSwgc2V0dGVyX3R5
cGUsIHBhcmFtZXRlcl9uYW1lLCBzZXR0ZXJfYXJndW1lbnQpCi0gICAgICAgICAgICAgICAgaWYg
b3B0aW9uYWw6Ci0gICAgICAgICAgICAgICAgICAgIHNldHRlcl9jb2RlID0gKCIgICAgaWYgKCVz
KVxuICAgICIgJSBwYXJhbWV0ZXJfbmFtZSkgKyBzZXR0ZXJfY29kZQotICAgICAgICAgICAgICAg
IG1ldGhvZF9saW5lX2xpc3QuYXBwZW5kKHNldHRlcl9jb2RlKQotCi0gICAgICAgICAgICBtZXRo
b2Rfc3RydWN0X3RlbXBsYXRlLmFwcGVuZF9lcGlsb2cobWV0aG9kX2xpbmVfbGlzdCkKLQotICAg
ICAgICBnZW5lcmF0b3JfbWV0aG9kX2xpc3QuYXBwZW5kKG1ldGhvZF90ZW1wbGF0ZS5zdWJzdGl0
dXRlKE5vbmUsCi0gICAgICAgICAgICBkb21haW5OYW1lPWRvbWFpbl9uYW1lLAotICAgICAgICAg
ICAgcGFyYW1ldGVycz0iLCAiLmpvaW4oZGVjbF9wYXJhbWV0ZXJfbGlzdCksCi0gICAgICAgICAg
ICBjb2RlPSIiLmpvaW4obWV0aG9kX2xpbmVfbGlzdCksICoqdGVtcGxhdGVfcGFyYW1zKSkKLQot
ICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgcmVzb2x2ZV90eXBlX2FuZF9nZW5lcmF0ZV9hZF9o
b2MoanNvbl9wYXJhbSwgbWV0aG9kX25hbWUsIGRvbWFpbl9uYW1lLCBhZF9ob2NfdHlwZV93cml0
ZXIsIGNvbnRhaW5lcl9yZWxhdGl2ZV9uYW1lX3ByZWZpeF9wYXJhbSk6Ci0gICAgICAgIHBhcmFt
X25hbWUgPSBqc29uX3BhcmFtWyJuYW1lIl0KLSAgICAgICAgYWRfaG9jX3R5cGVfbGlzdCA9IFtd
Ci0KLSAgICAgICAgY2xhc3MgQWRIb2NUeXBlQ29udGV4dDoKLSAgICAgICAgICAgIGNvbnRhaW5l
cl9mdWxsX25hbWVfcHJlZml4ID0gIjxub3QgeWV0IGRlZmluZWQ+IgotICAgICAgICAgICAgY29u
dGFpbmVyX3JlbGF0aXZlX25hbWVfcHJlZml4ID0gY29udGFpbmVyX3JlbGF0aXZlX25hbWVfcHJl
Zml4X3BhcmFtCi0KLSAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgIGRlZiBn
ZXRfdHlwZV9uYW1lX2ZpeCgpOgotICAgICAgICAgICAgICAgIGNsYXNzIE5hbWVGaXg6Ci0gICAg
ICAgICAgICAgICAgICAgIGNsYXNzX25hbWUgPSBDYXBpdGFsaXplci5sb3dlcl9jYW1lbF9jYXNl
X3RvX3VwcGVyKHBhcmFtX25hbWUpCi0KLSAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhv
ZAotICAgICAgICAgICAgICAgICAgICBkZWYgb3V0cHV0X2NvbW1lbnQod3JpdGVyKToKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCIvLyBOYW1lZCBhZnRlciBwYXJhbWV0
ZXIgJyVzJyB3aGlsZSBnZW5lcmF0aW5nIGNvbW1hbmQvZXZlbnQgJXMuXG4iICUgKHBhcmFtX25h
bWUsIG1ldGhvZF9uYW1lKSkKLQotICAgICAgICAgICAgICAgIHJldHVybiBOYW1lRml4Ci0KLSAg
ICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgIGRlZiBhZGRfdHlwZShiaW5kaW5n
KToKLSAgICAgICAgICAgICAgICBhZF9ob2NfdHlwZV9saXN0LmFwcGVuZChiaW5kaW5nKQotCi0g
ICAgICAgIHR5cGVfYmluZGluZyA9IHJlc29sdmVfcGFyYW1fdHlwZShqc29uX3BhcmFtLCBkb21h
aW5fbmFtZSwgQWRIb2NUeXBlQ29udGV4dCkKLQotICAgICAgICBjbGFzcyBJbnRlcmZhY2VGb3J3
YXJkTGlzdGVuZXI6Ci0gICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICBkZWYg
YWRkX3R5cGVfZGF0YSh0eXBlX2RhdGEpOgotICAgICAgICAgICAgICAgIHBhc3MKLQotICAgICAg
ICBjbGFzcyBJbnRlcmZhY2VSZXNvbHZlQ29udGV4dDoKLSAgICAgICAgICAgIGZvcndhcmRfbGlz
dGVuZXIgPSBJbnRlcmZhY2VGb3J3YXJkTGlzdGVuZXIKLQotICAgICAgICBmb3IgdHlwZSBpbiBh
ZF9ob2NfdHlwZV9saXN0OgotICAgICAgICAgICAgdHlwZS5yZXNvbHZlX2lubmVyKEludGVyZmFj
ZVJlc29sdmVDb250ZXh0KQotCi0gICAgICAgIGNsYXNzIEludGVyZmFjZUdlbmVyYXRlQ29udGV4
dDoKLSAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIgPSAibm90IHN1cHBvcnRlZCBpbiBJbnRl
cmZhY2VHZW5lcmF0ZUNvbnRleHQiCi0gICAgICAgICAgICBjcHBfd3JpdGVyID0gdmFsaWRhdG9y
X3dyaXRlcgotCi0gICAgICAgIGZvciB0eXBlIGluIGFkX2hvY190eXBlX2xpc3Q6Ci0gICAgICAg
ICAgICBnZW5lcmF0b3IgPSB0eXBlLmdldF9jb2RlX2dlbmVyYXRvcigpCi0gICAgICAgICAgICBp
ZiBnZW5lcmF0b3I6Ci0gICAgICAgICAgICAgICAgZ2VuZXJhdG9yLmdlbmVyYXRlX3R5cGVfYnVp
bGRlcihhZF9ob2NfdHlwZV93cml0ZXIsIEludGVyZmFjZUdlbmVyYXRlQ29udGV4dCkKLQotICAg
ICAgICByZXR1cm4gdHlwZV9iaW5kaW5nCi0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIHBy
b2Nlc3NfdHlwZXModHlwZV9tYXApOgotICAgICAgICBvdXRwdXQgPSBHZW5lcmF0b3IudHlwZV9i
dWlsZGVyX2ZyYWdtZW50cwotCi0gICAgICAgIGNsYXNzIEdlbmVyYXRlQ29udGV4dDoKLSAgICAg
ICAgICAgIHZhbGlkYXRvcl93cml0ZXIgPSBXcml0ZXIoR2VuZXJhdG9yLnZhbGlkYXRvcl9pbXBs
X2xpc3QsICIiKQotICAgICAgICAgICAgY3BwX3dyaXRlciA9IFdyaXRlcihHZW5lcmF0b3IudHlw
ZV9idWlsZGVyX2ltcGxfbGlzdCwgIiIpCi0KLSAgICAgICAgZGVmIGdlbmVyYXRlX2FsbF9kb21h
aW5zX2NvZGUob3V0LCB0eXBlX2RhdGFfY2FsbGJhY2spOgotICAgICAgICAgICAgd3JpdGVyID0g
V3JpdGVyKG91dCwgIiIpCi0gICAgICAgICAgICBmb3IgZG9tYWluX2RhdGEgaW4gdHlwZV9tYXAu
ZG9tYWluc190b19nZW5lcmF0ZSgpOgotICAgICAgICAgICAgICAgIGRvbWFpbl9maXhlcyA9IERv
bWFpbk5hbWVGaXhlcy5nZXRfZml4ZWRfZGF0YShkb21haW5fZGF0YS5uYW1lKCkpCi0gICAgICAg
ICAgICAgICAgZG9tYWluX2d1YXJkID0gZG9tYWluX2ZpeGVzLmdldF9ndWFyZCgpCi0KLSAgICAg
ICAgICAgICAgICBuYW1lc3BhY2VfZGVjbGFyZWQgPSBbXQotCi0gICAgICAgICAgICAgICAgZGVm
IG5hbWVzcGFjZV9sYXp5X2dlbmVyYXRvcigpOgotICAgICAgICAgICAgICAgICAgICBpZiBub3Qg
bmFtZXNwYWNlX2RlY2xhcmVkOgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgZG9tYWluX2d1
YXJkOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbWFpbl9ndWFyZC5nZW5lcmF0ZV9v
cGVuKG91dCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCJuYW1lc3Bh
Y2UgIikKLSAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5hcHBlbmQoZG9tYWluX2RhdGEu
bmFtZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVuZCgiIHtcbiIpCi0g
ICAgICAgICAgICAgICAgICAgICAgICAjIFdoYXQgaXMgYSBiZXR0ZXIgd2F5IHRvIGNoYW5nZSB2
YWx1ZSBmcm9tIG91dGVyIHNjb3BlPwotICAgICAgICAgICAgICAgICAgICAgICAgbmFtZXNwYWNl
X2RlY2xhcmVkLmFwcGVuZChUcnVlKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gd3JpdGVy
Ci0KLSAgICAgICAgICAgICAgICBmb3IgdHlwZV9kYXRhIGluIGRvbWFpbl9kYXRhLnR5cGVzKCk6
Ci0gICAgICAgICAgICAgICAgICAgIHR5cGVfZGF0YV9jYWxsYmFjayh0eXBlX2RhdGEsIG5hbWVz
cGFjZV9sYXp5X2dlbmVyYXRvcikKLQotICAgICAgICAgICAgICAgIGlmIG5hbWVzcGFjZV9kZWNs
YXJlZDoKLSAgICAgICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVuZCgifSAvLyAiKQotICAgICAg
ICAgICAgICAgICAgICB3cml0ZXIuYXBwZW5kKGRvbWFpbl9kYXRhLm5hbWUoKSkKLSAgICAgICAg
ICAgICAgICAgICAgd3JpdGVyLmFwcGVuZCgiXG5cbiIpCi0KLSAgICAgICAgICAgICAgICAgICAg
aWYgZG9tYWluX2d1YXJkOgotICAgICAgICAgICAgICAgICAgICAgICAgZG9tYWluX2d1YXJkLmdl
bmVyYXRlX2Nsb3NlKG91dCkKLQotICAgICAgICBkZWYgY3JlYXRlX3R5cGVfYnVpbGRlcl9jYWxs
ZXIoZ2VuZXJhdGVfcGFzc19pZCk6Ci0gICAgICAgICAgICBkZWYgY2FsbF90eXBlX2J1aWxkZXIo
dHlwZV9kYXRhLCB3cml0ZXJfZ2V0dGVyKToKLSAgICAgICAgICAgICAgICBjb2RlX2dlbmVyYXRv
ciA9IHR5cGVfZGF0YS5nZXRfYmluZGluZygpLmdldF9jb2RlX2dlbmVyYXRvcigpCi0gICAgICAg
ICAgICAgICAgaWYgY29kZV9nZW5lcmF0b3IgYW5kIGdlbmVyYXRlX3Bhc3NfaWQgPT0gY29kZV9n
ZW5lcmF0b3IuZ2V0X2dlbmVyYXRlX3Bhc3NfaWQoKToKLSAgICAgICAgICAgICAgICAgICAgd3Jp
dGVyID0gd3JpdGVyX2dldHRlcigpCi0KLSAgICAgICAgICAgICAgICAgICAgY29kZV9nZW5lcmF0
b3IuZ2VuZXJhdGVfdHlwZV9idWlsZGVyKHdyaXRlciwgR2VuZXJhdGVDb250ZXh0KQotICAgICAg
ICAgICAgcmV0dXJuIGNhbGxfdHlwZV9idWlsZGVyCi0KLSAgICAgICAgZ2VuZXJhdGVfYWxsX2Rv
bWFpbnNfY29kZShvdXRwdXQsIGNyZWF0ZV90eXBlX2J1aWxkZXJfY2FsbGVyKFR5cGVCdWlsZGVy
UGFzcy5NQUlOKSkKLQotICAgICAgICBHZW5lcmF0b3IudHlwZV9idWlsZGVyX2ZvcndhcmRzLmFw
cGVuZCgiLy8gRm9yd2FyZCBkZWNsYXJhdGlvbnMuXG4iKQotCi0gICAgICAgIGRlZiBnZW5lcmF0
ZV9mb3J3YXJkX2NhbGxiYWNrKHR5cGVfZGF0YSwgd3JpdGVyX2dldHRlcik6Ci0gICAgICAgICAg
ICBpZiB0eXBlX2RhdGEgaW4gZ2xvYmFsX2ZvcndhcmRfbGlzdGVuZXIudHlwZV9kYXRhX3NldDoK
LSAgICAgICAgICAgICAgICBiaW5kaW5nID0gdHlwZV9kYXRhLmdldF9iaW5kaW5nKCkKLSAgICAg
ICAgICAgICAgICBiaW5kaW5nLmdldF9jb2RlX2dlbmVyYXRvcigpLmdlbmVyYXRlX2ZvcndhcmRf
ZGVjbGFyYXRpb24od3JpdGVyX2dldHRlcigpKQotICAgICAgICBnZW5lcmF0ZV9hbGxfZG9tYWlu
c19jb2RlKEdlbmVyYXRvci50eXBlX2J1aWxkZXJfZm9yd2FyZHMsIGdlbmVyYXRlX2ZvcndhcmRf
Y2FsbGJhY2spCi0KLSAgICAgICAgR2VuZXJhdG9yLnR5cGVfYnVpbGRlcl9mb3J3YXJkcy5hcHBl
bmQoIi8vIEVuZCBvZiBmb3J3YXJkIGRlY2xhcmF0aW9ucy5cblxuIikKLQotICAgICAgICBHZW5l
cmF0b3IudHlwZV9idWlsZGVyX2ZvcndhcmRzLmFwcGVuZCgiLy8gVHlwZWRlZnMuXG4iKQotCi0g
ICAgICAgIGdlbmVyYXRlX2FsbF9kb21haW5zX2NvZGUoR2VuZXJhdG9yLnR5cGVfYnVpbGRlcl9m
b3J3YXJkcywgY3JlYXRlX3R5cGVfYnVpbGRlcl9jYWxsZXIoVHlwZUJ1aWxkZXJQYXNzLlRZUEVE
RUYpKQotCi0gICAgICAgIEdlbmVyYXRvci50eXBlX2J1aWxkZXJfZm9yd2FyZHMuYXBwZW5kKCIv
LyBFbmQgb2YgdHlwZWRlZnMuXG5cbiIpCi0KLQotZGVmIGZsYXR0ZW5fbGlzdChpbnB1dCk6Ci0g
ICAgcmVzID0gW10KLQotICAgIGRlZiBmaWxsX3JlY3Vyc2l2ZShsKToKLSAgICAgICAgZm9yIGl0
ZW0gaW4gbDoKLSAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoaXRlbSwgbGlzdCk6Ci0gICAgICAg
ICAgICAgICAgZmlsbF9yZWN1cnNpdmUoaXRlbSkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAg
ICAgICAgICAgcmVzLmFwcGVuZChpdGVtKQotICAgIGZpbGxfcmVjdXJzaXZlKGlucHV0KQotICAg
IHJldHVybiByZXMKLQotCi0jIEEgd3JpdGVyIHRoYXQgb25seSB1cGRhdGVzIGZpbGUgaWYgaXQg
YWN0dWFsbHkgY2hhbmdlZCB0byBiZXR0ZXIgc3VwcG9ydCBpbmNyZW1lbnRhbCBidWlsZC4KLWNs
YXNzIFNtYXJ0T3V0cHV0OgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlX25hbWUpOgotICAg
ICAgICBzZWxmLmZpbGVfbmFtZV8gPSBmaWxlX25hbWUKLSAgICAgICAgc2VsZi5vdXRwdXRfID0g
IiIKLQotICAgIGRlZiB3cml0ZShzZWxmLCB0ZXh0KToKLSAgICAgICAgc2VsZi5vdXRwdXRfICs9
IHRleHQKLQotICAgIGRlZiBjbG9zZShzZWxmKToKLSAgICAgICAgdGV4dF9jaGFuZ2VkID0gVHJ1
ZQotICAgICAgICBzZWxmLm91dHB1dF8gPSBzZWxmLm91dHB1dF8ucnN0cmlwKCkgKyAiXG4iCi0K
LSAgICAgICAgdHJ5OgotICAgICAgICAgICAgcmVhZF9maWxlID0gb3BlbihzZWxmLmZpbGVfbmFt
ZV8sICJyIikKLSAgICAgICAgICAgIG9sZF90ZXh0ID0gcmVhZF9maWxlLnJlYWQoKQotICAgICAg
ICAgICAgcmVhZF9maWxlLmNsb3NlKCkKLSAgICAgICAgICAgIHRleHRfY2hhbmdlZCA9IG9sZF90
ZXh0ICE9IHNlbGYub3V0cHV0XwotICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICAjIElnbm9y
ZSwganVzdCBvdmVyd3JpdGUgYnkgZGVmYXVsdAotICAgICAgICAgICAgcGFzcwotCi0gICAgICAg
IGlmIHRleHRfY2hhbmdlZCBvciB3cml0ZV9hbHdheXM6Ci0gICAgICAgICAgICBvdXRfZmlsZSA9
IG9wZW4oc2VsZi5maWxlX25hbWVfLCAidyIpCi0gICAgICAgICAgICBvdXRfZmlsZS53cml0ZShz
ZWxmLm91dHB1dF8pCi0gICAgICAgICAgICBvdXRfZmlsZS5jbG9zZSgpCi0KLQotR2VuZXJhdG9y
LmdvKCkKLQotb3V0cHV0X2ZpbGVfbmFtZV9wcmVmaXggPSBJTlNQRUNUT1JfVFlQRVNfR0VORVJB
VE9SX0NPTkZJR19NQVBbb3V0cHV0X3R5cGVdWyJwcmVmaXgiXQotCi1iYWNrZW5kX2hfZmlsZSA9
IFNtYXJ0T3V0cHV0KG91dHB1dF9oZWFkZXJfZGlybmFtZSArICgiL0luc3BlY3RvciVzQmFja2Vu
ZERpc3BhdGNoZXJzLmgiICUgb3V0cHV0X2ZpbGVfbmFtZV9wcmVmaXgpKQotYmFja2VuZF9jcHBf
ZmlsZSA9IFNtYXJ0T3V0cHV0KG91dHB1dF9jcHBfZGlybmFtZSArICgiL0luc3BlY3RvciVzQmFj
a2VuZERpc3BhdGNoZXJzLmNwcCIgJSBvdXRwdXRfZmlsZV9uYW1lX3ByZWZpeCkpCi0KLWZyb250
ZW5kX2hfZmlsZSA9IFNtYXJ0T3V0cHV0KG91dHB1dF9oZWFkZXJfZGlybmFtZSArICgiL0luc3Bl
Y3RvciVzRnJvbnRlbmREaXNwYXRjaGVycy5oIiAlIG91dHB1dF9maWxlX25hbWVfcHJlZml4KSkK
LWZyb250ZW5kX2NwcF9maWxlID0gU21hcnRPdXRwdXQob3V0cHV0X2NwcF9kaXJuYW1lICsgKCIv
SW5zcGVjdG9yJXNGcm9udGVuZERpc3BhdGNoZXJzLmNwcCIgJSBvdXRwdXRfZmlsZV9uYW1lX3By
ZWZpeCkpCi0KLXR5cGVidWlsZGVyX2hfZmlsZSA9IFNtYXJ0T3V0cHV0KG91dHB1dF9oZWFkZXJf
ZGlybmFtZSArICgiL0luc3BlY3RvciVzVHlwZUJ1aWxkZXJzLmgiICUgb3V0cHV0X2ZpbGVfbmFt
ZV9wcmVmaXgpKQotdHlwZWJ1aWxkZXJfY3BwX2ZpbGUgPSBTbWFydE91dHB1dChvdXRwdXRfY3Bw
X2Rpcm5hbWUgKyAoIi9JbnNwZWN0b3Ilc1R5cGVCdWlsZGVycy5jcHAiICUgb3V0cHV0X2ZpbGVf
bmFtZV9wcmVmaXgpKQotCi1iYWNrZW5kX2pzX2ZpbGUgPSBTbWFydE91dHB1dChvdXRwdXRfanNf
ZGlybmFtZSArICgiL0luc3BlY3RvciVzQmFja2VuZENvbW1hbmRzLmpzIiAlIG91dHB1dF9maWxl
X25hbWVfcHJlZml4KSkKLQotCi1iYWNrZW5kX2hfZmlsZS53cml0ZShUZW1wbGF0ZXMuYmFja2Vu
ZF9oLnN1YnN0aXR1dGUoTm9uZSwKLSAgICBvdXRwdXRGaWxlTmFtZVByZWZpeD1vdXRwdXRfZmls
ZV9uYW1lX3ByZWZpeCwKLSAgICBoYW5kbGVySW50ZXJmYWNlcz0iIi5qb2luKGZsYXR0ZW5fbGlz
dChHZW5lcmF0b3IuYmFja2VuZF9oYW5kbGVyX2ludGVyZmFjZV9saXN0KSksCi0gICAgZGlzcGF0
Y2hlckludGVyZmFjZXM9IiIuam9pbihmbGF0dGVuX2xpc3QoR2VuZXJhdG9yLmJhY2tlbmRfZGlz
cGF0Y2hlcl9pbnRlcmZhY2VfbGlzdCkpKSkKLQotYmFja2VuZF9jcHBfZmlsZS53cml0ZShUZW1w
bGF0ZXMuYmFja2VuZF9jcHAuc3Vic3RpdHV0ZShOb25lLAotICAgIG91dHB1dEZpbGVOYW1lUHJl
Zml4PW91dHB1dF9maWxlX25hbWVfcHJlZml4LAotICAgIGhhbmRsZXJJbXBsZW1lbnRhdGlvbnM9
IiIuam9pbihmbGF0dGVuX2xpc3QoR2VuZXJhdG9yLmJhY2tlbmRfaGFuZGxlcl9pbXBsZW1lbnRh
dGlvbl9saXN0KSksCi0gICAgbWV0aG9kcz0iXG4iLmpvaW4oR2VuZXJhdG9yLmJhY2tlbmRfbWV0
aG9kX2ltcGxlbWVudGF0aW9uX2xpc3QpKSkKLQotZnJvbnRlbmRfaF9maWxlLndyaXRlKFRlbXBs
YXRlcy5mcm9udGVuZF9oLnN1YnN0aXR1dGUoTm9uZSwKLSAgICBvdXRwdXRGaWxlTmFtZVByZWZp
eD1vdXRwdXRfZmlsZV9uYW1lX3ByZWZpeCwKLSAgICBkb21haW5DbGFzc0xpc3Q9IiIuam9pbihH
ZW5lcmF0b3IuZnJvbnRlbmRfZG9tYWluX2NsYXNzX2xpbmVzKSkpCi0KLWZyb250ZW5kX2NwcF9m
aWxlLndyaXRlKFRlbXBsYXRlcy5mcm9udGVuZF9jcHAuc3Vic3RpdHV0ZShOb25lLAotICAgIG91
dHB1dEZpbGVOYW1lUHJlZml4PW91dHB1dF9maWxlX25hbWVfcHJlZml4LAotICAgIG1ldGhvZHM9
IlxuIi5qb2luKEdlbmVyYXRvci5mcm9udGVuZF9tZXRob2RfbGlzdCkpKQotCi10eXBlYnVpbGRl
cl9oX2ZpbGUud3JpdGUoVGVtcGxhdGVzLnR5cGVidWlsZGVyX2guc3Vic3RpdHV0ZShOb25lLAot
ICAgIG91dHB1dEZpbGVOYW1lUHJlZml4PW91dHB1dF9maWxlX25hbWVfcHJlZml4LAotICAgIHR5
cGVCdWlsZGVyRGVwZW5kZW5jaWVzPUlOU1BFQ1RPUl9UWVBFU19HRU5FUkFUT1JfQ09ORklHX01B
UFtvdXRwdXRfdHlwZV1bInR5cGVidWlsZGVyX2RlcGVuZGVuY3kiXSwKLSAgICBleHBvcnRNYWNy
bz1JTlNQRUNUT1JfVFlQRVNfR0VORVJBVE9SX0NPTkZJR19NQVBbb3V0cHV0X3R5cGVdWyJleHBv
cnRfbWFjcm8iXSwKLSAgICB0eXBlQnVpbGRlcnM9IiIuam9pbihmbGF0dGVuX2xpc3QoR2VuZXJh
dG9yLnR5cGVfYnVpbGRlcl9mcmFnbWVudHMpKSwKLSAgICBmb3J3YXJkcz0iIi5qb2luKEdlbmVy
YXRvci50eXBlX2J1aWxkZXJfZm9yd2FyZHMpLAotICAgIHZhbGlkYXRvcklmZGVmTmFtZT1WQUxJ
REFUT1JfSUZERUZfTkFNRSkpCi0KLXR5cGVidWlsZGVyX2NwcF9maWxlLndyaXRlKFRlbXBsYXRl
cy50eXBlYnVpbGRlcl9jcHAuc3Vic3RpdHV0ZShOb25lLAotICAgIG91dHB1dEZpbGVOYW1lUHJl
Zml4PW91dHB1dF9maWxlX25hbWVfcHJlZml4LAotICAgIGVudW1Db25zdGFudFZhbHVlcz1FbnVt
Q29uc3RhbnRzLmdldF9lbnVtX2NvbnN0YW50X2NvZGUoKSwKLSAgICBpbXBsQ29kZT0iIi5qb2lu
KGZsYXR0ZW5fbGlzdChHZW5lcmF0b3IudHlwZV9idWlsZGVyX2ltcGxfbGlzdCkpLAotICAgIHZh
bGlkYXRvckNvZGU9IiIuam9pbihmbGF0dGVuX2xpc3QoR2VuZXJhdG9yLnZhbGlkYXRvcl9pbXBs
X2xpc3QpKSwKLSAgICB2YWxpZGF0b3JJZmRlZk5hbWU9VkFMSURBVE9SX0lGREVGX05BTUUpKQot
Ci1iYWNrZW5kX2pzX2ZpbGUud3JpdGUoVGVtcGxhdGVzLmJhY2tlbmRfanMuc3Vic3RpdHV0ZShO
b25lLAotICAgIGRvbWFpbkluaXRpYWxpemVycz0iIi5qb2luKEdlbmVyYXRvci5iYWNrZW5kX2pz
X2RvbWFpbl9pbml0aWFsaXplcl9saXN0KSkpCi0KLWJhY2tlbmRfaF9maWxlLmNsb3NlKCkKLWJh
Y2tlbmRfY3BwX2ZpbGUuY2xvc2UoKQotCi1mcm9udGVuZF9oX2ZpbGUuY2xvc2UoKQotZnJvbnRl
bmRfY3BwX2ZpbGUuY2xvc2UoKQotCi10eXBlYnVpbGRlcl9oX2ZpbGUuY2xvc2UoKQotdHlwZWJ1
aWxkZXJfY3BwX2ZpbGUuY2xvc2UoKQotCi1iYWNrZW5kX2pzX2ZpbGUuY2xvc2UoKQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL0NvZGVHZW5lcmF0
b3JJbnNwZWN0b3JTdHJpbmdzLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3JTdHJpbmdzLnB5CmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAyNzYzNzQ0MTYwYjg0ZmZkMmMzNzc1OWE0M2RiZDMzZGYwMTQ1YTQ0Li4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yU3RyaW5n
cy5weQorKysgL2Rldi9udWxsCkBAIC0xLDM0OCArMCwwIEBACi0jIENvcHlyaWdodCAoYykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBDb3B5cmlnaHQgKGMpIDIwMTMg
QXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQotIyBtZXQ6Ci0jCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotIyBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCi0jIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKLSMgZGlzdHJpYnV0aW9uLgotIyAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0jIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0j
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
Ci0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKLSMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0jIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCi0jIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAotIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotIyBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKLSMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotIyBU
aGlzIGZpbGUgY29udGFpbnMgc3RyaW5nIHJlc291cmNlcyBmb3IgQ29kZUdlbmVyYXRvckluc3Bl
Y3Rvci4KLSMgSXRzIHN5bnRheCBpcyBhIFB5dGhvbiBzeW50YXggc3Vic2V0LCBzdWl0YWJsZSBm
b3IgbWFudWFsIHBhcnNpbmcuCi0KLWZyb250ZW5kX2RvbWFpbl9jbGFzcyA9ICgKLSIiImNsYXNz
ICR7ZXhwb3J0TWFjcm99ICR7ZG9tYWluQ2xhc3NOYW1lfSB7Ci1wdWJsaWM6Ci0gICAgJHtkb21h
aW5DbGFzc05hbWV9KEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsKSA6IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKGluc3BlY3RvckZyb250ZW5kQ2hh
bm5lbCkgeyB9Ci0ke2Zyb250ZW5kRG9tYWluTWV0aG9kRGVjbGFyYXRpb25zfXByaXZhdGU6Ci0g
ICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsK
LX07Ci0KLSIiIikKLQotYmFja2VuZF9kaXNwYXRjaGVyX2NvbnN0cnVjdG9yID0gKAotIiIiUGFz
c1JlZlB0cjwke2Rpc3BhdGNoZXJOYW1lfT4gJHtkaXNwYXRjaGVyTmFtZX06OmNyZWF0ZShJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIsICR7YWdlbnROYW1lfSog
YWdlbnQpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyAke2Rpc3BhdGNoZXJOYW1lfShiYWNr
ZW5kRGlzcGF0Y2hlciwgYWdlbnQpKTsKLX0KLQotJHtkaXNwYXRjaGVyTmFtZX06OiR7ZGlzcGF0
Y2hlck5hbWV9KEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlciwg
JHthZ2VudE5hbWV9KiBhZ2VudCkKLSAgICA6IEluc3BlY3RvclN1cHBsZW1lbnRhbEJhY2tlbmRE
aXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyKQotICAgICwgbV9hZ2VudChhZ2VudCkKLXsKLSAg
ICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4oQVNDSUlM
aXRlcmFsKCIke2RvbWFpbk5hbWV9IiksIHRoaXMpOwotfQotIiIiKQotCi1iYWNrZW5kX2Rpc3Bh
dGNoZXJfZGlzcGF0Y2hfbWV0aG9kX3NpbXBsZSA9ICgKLSIiInZvaWQgJHtkaXNwYXRjaGVyTmFt
ZX06OmRpc3BhdGNoKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUGFzc1JlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IG1lc3NhZ2UpCi17Ci0gICAgUmVmPCR7ZGlzcGF0Y2hlck5hbWV9
PiBwcm90ZWN0KCp0aGlzKTsKLQotJHtpZkNoYWlufQotICAgIGVsc2UKLSAgICAgICAgbV9iYWNr
ZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElkLCBJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsIFN0cmluZygiJyIpICsgIiR7ZG9tYWluTmFt
ZX0iICsgJy4nICsgbWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOwotfQotIiIiKQotCi1iYWNr
ZW5kX2Rpc3BhdGNoZXJfZGlzcGF0Y2hfbWV0aG9kID0gKAotIiIidm9pZCAke2Rpc3BhdGNoZXJO
YW1lfTo6ZGlzcGF0Y2gobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBQYXNzUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gbWVzc2FnZSkKLXsKLSAgICBSZWY8JHtkaXNwYXRjaGVyTmFt
ZX0+IHByb3RlY3QoKnRoaXMpOwotCi0gICAgdHlwZWRlZiB2b2lkICgke2Rpc3BhdGNoZXJOYW1l
fTo6KkNhbGxIYW5kbGVyKShsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JP
YmplY3QmIG1lc3NhZ2UpOwotICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIENhbGxIYW5kbGVy
PiBEaXNwYXRjaE1hcDsKLSAgICBERVBSRUNBVEVEX0RFRklORV9TVEFUSUNfTE9DQUwoRGlzcGF0
Y2hNYXAsIGRpc3BhdGNoTWFwLCAoKSk7Ci0gICAgaWYgKGRpc3BhdGNoTWFwLmlzRW1wdHkoKSkg
ewotICAgICAgICBzdGF0aWMgY29uc3Qgc3RydWN0IE1ldGhvZFRhYmxlIHsKLSAgICAgICAgICAg
IGNvbnN0IGNoYXIqIG5hbWU7Ci0gICAgICAgICAgICBDYWxsSGFuZGxlciBoYW5kbGVyOwotICAg
ICAgICB9IGNvbW1hbmRzW10gPSB7Ci0ke2Rpc3BhdGNoZXJDb21tYW5kc30KLSAgICAgICAgfTsK
LSAgICAgICAgc2l6ZV90IGxlbmd0aCA9IFdURl9BUlJBWV9MRU5HVEgoY29tbWFuZHMpOwotICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQotICAgICAgICAgICAgZGlz
cGF0Y2hNYXAuYWRkKGNvbW1hbmRzW2ldLm5hbWUsIGNvbW1hbmRzW2ldLmhhbmRsZXIpOwotICAg
IH0KLQotICAgIEhhc2hNYXA8U3RyaW5nLCBDYWxsSGFuZGxlcj46Oml0ZXJhdG9yIGl0ID0gZGlz
cGF0Y2hNYXAuZmluZChtZXRob2QpOwotICAgIGlmIChpdCA9PSBkaXNwYXRjaE1hcC5lbmQoKSkg
ewotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKCZjYWxs
SWQsIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgU3RyaW5nKCIn
IikgKyAiJHtkb21haW5OYW1lfSIgKyAnLicgKyBtZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAoKCp0aGlzKS4qaXQtPnZhbHVlKShjYWxs
SWQsICptZXNzYWdlLmdldCgpKTsKLX0KLSIiIikKLQotYmFja2VuZF9tZXRob2QgPSAoCi0iIiJ2
b2lkICR7ZGlzcGF0Y2hlck5hbWV9Ojoke21ldGhvZE5hbWV9KGxvbmcgY2FsbElkLCBjb25zdCBJ
bnNwZWN0b3JPYmplY3QmJHtyZXF1ZXN0TWVzc2FnZU9iamVjdH0pCi17Ci0ke21ldGhvZEluUGFy
YW1ldGVyc0hhbmRsaW5nfSR7bWV0aG9kRGlzcGF0Y2hIYW5kbGluZ30ke21ldGhvZE91dFBhcmFt
ZXRlcnNIYW5kbGluZ30ke21ldGhvZEVuZGluZ0hhbmRsaW5nfQotfQotIiIiKQotCi1mcm9udGVu
ZF9tZXRob2QgPSAoIiIidm9pZCBJbnNwZWN0b3Ike2RvbWFpbk5hbWV9RnJvbnRlbmREaXNwYXRj
aGVyOjoke2V2ZW50TmFtZX0oJHtwYXJhbWV0ZXJzfSkKLXsKLSAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBqc29uTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0gICAganNv
bk1lc3NhZ2UtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoIm1ldGhvZCIpLCBBU0NJSUxpdGVyYWwo
IiR7ZG9tYWluTmFtZX0uJHtldmVudE5hbWV9IikpOwotJHtjb2RlfQotICAgIG1faW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQoanNvbk1lc3NhZ2UtPnRvSlNP
TlN0cmluZygpKTsKLX0KLSIiIikKLQotY2FsbGJhY2tfbWV0aG9kID0gKAotIiIiJHtoYW5kbGVy
TmFtZX06OiR7Y2FsbGJhY2tOYW1lfTo6JHtjYWxsYmFja05hbWV9KFBhc3NSZWZQdHI8SW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXI+IGJhY2tlbmREaXNwYXRjaGVyLCBpbnQgaWQpIDogSW5zcGVj
dG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlKGJhY2tlbmREaXNw
YXRjaGVyLCBpZCkgeyB9Ci0KLXZvaWQgJHtoYW5kbGVyTmFtZX06OiR7Y2FsbGJhY2tOYW1lfTo6
c2VuZFN1Y2Nlc3MoJHtwYXJhbWV0ZXJzfSkKLXsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBqc29uTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0ke2NvZGV9ICAgIHNl
bmRJZkFjdGl2ZShqc29uTWVzc2FnZSwgRXJyb3JTdHJpbmcoKSk7Ci19Ci0iIiIpCi0KLWZyb250
ZW5kX2ggPSAoCi0iIiIjaWZuZGVmIEluc3BlY3RvciR7b3V0cHV0RmlsZU5hbWVQcmVmaXh9RnJv
bnRlbmREaXNwYXRjaGVyc19oCi0jZGVmaW5lIEluc3BlY3RvciR7b3V0cHV0RmlsZU5hbWVQcmVm
aXh9RnJvbnRlbmREaXNwYXRjaGVyc19oCi0KLSNpbmNsdWRlICJJbnNwZWN0b3Ike291dHB1dEZp
bGVOYW1lUHJlZml4fVR5cGVCdWlsZGVycy5oIgotI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwuaD4KLSNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVz
Lmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9S
KQotCi0ke2RvbWFpbkNsYXNzTGlzdH0KLQotI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCi0K
LX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jZW5kaWYgLy8gIWRlZmluZWQoSW5zcGVjdG9y
JHtvdXRwdXRGaWxlTmFtZVByZWZpeH1Gcm9udGVuZERpc3BhdGNoZXJzX2gpCi0iIiIpCi0KLWJh
Y2tlbmRfaCA9ICgKLSIiIiNpZm5kZWYgSW5zcGVjdG9yJHtvdXRwdXRGaWxlTmFtZVByZWZpeH1C
YWNrZW5kRGlzcGF0Y2hlcnNfaAotI2RlZmluZSBJbnNwZWN0b3Ike291dHB1dEZpbGVOYW1lUHJl
Zml4fUJhY2tlbmREaXNwYXRjaGVyc19oCi0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SKQotCi0jaW5j
bHVkZSAiSW5zcGVjdG9yJHtvdXRwdXRGaWxlTmFtZVByZWZpeH1UeXBlQnVpbGRlcnMuaCIKLSNp
bmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KLSNpbmNsdWRl
IDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1u
YW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7Ci0KLSR7
aGFuZGxlckludGVyZmFjZXN9Ci0KLSR7ZGlzcGF0Y2hlckludGVyZmFjZXN9Ci19IC8vIG5hbWVz
cGFjZSBJbnNwZWN0b3IKLQotI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCi0KLSNlbmRpZiAv
LyAhZGVmaW5lZChJbnNwZWN0b3Ike291dHB1dEZpbGVOYW1lUHJlZml4fUJhY2tlbmREaXNwYXRj
aGVyc19oKQotIiIiKQotCi1iYWNrZW5kX2NwcCA9ICgKLSIiIgotI2luY2x1ZGUgImNvbmZpZy5o
IgotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUikKLQotI2luY2x1ZGUgIkluc3BlY3RvciR7b3V0cHV0
RmlsZU5hbWVQcmVmaXh9QmFja2VuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlIDxpbnNwZWN0
b3IvSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLmg+Ci0jaW5jbHVkZSA8aW5zcGVjdG9yL0luc3Bl
Y3RvclZhbHVlcy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLSNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLSR7aGFuZGxl
ckltcGxlbWVudGF0aW9uc30KLQotJHttZXRob2RzfQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
Ci0KLSNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQotIiIiKQotCi1mcm9udGVuZF9jcHAgPSAo
Ci0iIiIKLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUikKLQot
I2luY2x1ZGUgIkluc3BlY3RvciR7b3V0cHV0RmlsZU5hbWVQcmVmaXh9RnJvbnRlbmREaXNwYXRj
aGVycy5oIgotCi0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotJHttZXRob2RzfQot
Ci19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1Ip
Ci0iIiIpCi0KLXR5cGVidWlsZGVyX2ggPSAoCi0iIiIKLSNpZm5kZWYgSW5zcGVjdG9yJHtvdXRw
dXRGaWxlTmFtZVByZWZpeH1UeXBlQnVpbGRlcnNfaAotI2RlZmluZSBJbnNwZWN0b3Ike291dHB1
dEZpbGVOYW1lUHJlZml4fVR5cGVCdWlsZGVyc19oCi0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SKQot
Ci0jaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclR5cGVCdWlsZGVyLmg+Ci0ke3R5cGVCdWls
ZGVyRGVwZW5kZW5jaWVzfQotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW5jbHVkZSA8
d3RmL1Bhc3NSZWZQdHIuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLW5hbWVzcGFjZSBU
eXBlQnVpbGRlciB7Ci0KLSR7Zm9yd2FyZHN9Ci0KLSR7ZXhwb3J0TWFjcm99IFN0cmluZyBnZXQk
e291dHB1dEZpbGVOYW1lUHJlZml4fUVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKTsKLQotJHt0
eXBlQnVpbGRlcnN9Ci19IC8vIG5hbWVzcGFjZSBUeXBlQnVpbGRlcgotCi19IC8vIG5hbWVzcGFj
ZSBJbnNwZWN0b3IKLQotI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCi0KLSNlbmRpZiAvLyAh
ZGVmaW5lZChJbnNwZWN0b3Ike291dHB1dEZpbGVOYW1lUHJlZml4fVR5cGVCdWlsZGVyc19oKQot
Ci0iIiIpCi0KLXR5cGVidWlsZGVyX2NwcCA9ICgKLSIiIgotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiSW5zcGVjdG9yJHtvdXRwdXRGaWxlTmFtZVByZWZpeH1UeXBlQnVpbGRlcnMu
aCIKLQotI2lmIEVOQUJMRShJTlNQRUNUT1IpCi0KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5n
Lmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi1uYW1lc3BhY2UgVHlwZUJ1aWxkZXIgewot
Ci1zdGF0aWMgY29uc3QgY2hhciogY29uc3QgZW51bV9jb25zdGFudF92YWx1ZXNbXSA9IHsKLSR7
ZW51bUNvbnN0YW50VmFsdWVzfX07Ci0KLVN0cmluZyBnZXQke291dHB1dEZpbGVOYW1lUHJlZml4
fUVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKSB7Ci0gICAgcmV0dXJuIGVudW1fY29uc3RhbnRf
dmFsdWVzW2NvZGVdOwotfQotCi19IC8vIG5hbWVzcGFjZSBUeXBlQnVpbGRlcgotCi0ke2ltcGxD
b2RlfQotCi0jaWYgJHt2YWxpZGF0b3JJZmRlZk5hbWV9Ci0KLSR7dmFsaWRhdG9yQ29kZX0KLQot
I2VuZGlmIC8vICR7dmFsaWRhdG9ySWZkZWZOYW1lfQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKLQotI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCi0iIiIpCi0KLWJhY2tlbmRfanMgPSAo
Ci0iIiIKLQotJHtkb21haW5Jbml0aWFsaXplcnN9Ci0iIiIpCi0KLXBhcmFtX2NvbnRhaW5lcl9h
Y2Nlc3NfY29kZSA9ICIiIgotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRh
aW5lciA9IG1lc3NhZ2UuZ2V0T2JqZWN0KCJwYXJhbXMiKTsKLSAgICBJbnNwZWN0b3JPYmplY3Qq
IHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKLSAgICBJbnNwZWN0
b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKLSIiIgot
Ci1jbGFzc19iaW5kaW5nX2J1aWxkZXJfcGFydF8xID0gKAotIiIiICAgICAgICBBbGxGaWVsZHNT
ZXQgPSAlcwotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+Ci0gICAgY2xhc3MgQnVp
bGRlciB7Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9y
T2JqZWN0PiBtX3Jlc3VsdDsKLQotICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxT
VEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
KnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7Ci0gICAgICAg
IH0KLQotICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8LyolcyovSW5zcGVjdG9yOjpJbnNwZWN0
b3JPYmplY3Q+IHB0cikKLSAgICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RB
VEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7Ci0g
ICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKLSAgICAgICAgfQotICAgICAgICBmcmllbmQgY2xh
c3MgJXM7Ci0gICAgcHVibGljOgotIiIiKQotCi1jbGFzc19iaW5kaW5nX2J1aWxkZXJfcGFydF8y
ID0gKCIiIgotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgJXM+JiBzZXQlcyglcyB2YWx1ZSkKLSAg
ICAgICAgewotICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmICVzKSwgcHJvcGVy
dHlfJXNfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldCVzKEFTQ0lJTGl0
ZXJhbCgiJXMiKSwgJXMpOwotICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTwlcz4oKTsKLSAg
ICAgICAgfQotIiIiKQotCi1jbGFzc19iaW5kaW5nX2J1aWxkZXJfcGFydF8zID0gKCIiIgotICAg
ICAgICBvcGVyYXRvciBSZWZQdHI8JXM+JiAoKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwot
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKCVzKSA9PSBzaXplb2YoSW5zcGVjdG9y
OjpJbnNwZWN0b3JPYmplY3QpLCBjYW5ub3RfY2FzdCk7Ci0gICAgICAgICAgICByZXR1cm4gKnJl
aW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPCVzPio+KCZtX3Jlc3VsdCk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBQYXNzUmVmUHRyPCVzPiByZWxlYXNlKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuIFJlZlB0cjwlcz4oKnRoaXMpLnJlbGVhc2UoKTsKLSAgICAgICAgfQotICAgIH07Ci0KLSIi
IikKLQotY2xhc3NfYmluZGluZ19idWlsZGVyX3BhcnRfNCA9ICgKLSIiIiAgICBzdGF0aWMgQnVp
bGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBCdWlsZGVy
PE5vRmllbGRzU2V0PihJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkpOwotICAg
IH0KLSIiIikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9jb2RlZ2VuL19faW5pdF9fLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2NvZGVnZW4vX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGI3NjExOGNlNWVlMjlm
ODRjZDU1MGU5ODQyMTgwYTRlYjM0OTczYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL19faW5pdF9fLnB5CkBAIC0wLDAg
KzEsMTIgQEAKKyMgUmVxdWlyZWQgZm9yIFB5dGhvbiB0byBzZWFyY2ggdGhpcyBkaXJlY3Rvcnkg
Zm9yIG1vZHVsZSBmaWxlcworCitmcm9tIG1vZGVscyBpbXBvcnQgKgorZnJvbSBnZW5lcmF0b3Ig
aW1wb3J0ICoKKworZnJvbSBnZW5lcmF0ZV9iYWNrZW5kX2NvbW1hbmRzIGltcG9ydCAqCitmcm9t
IGdlbmVyYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIgaW1wb3J0ICoKK2Zyb20gZ2VuZXJh
dGVfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uIGltcG9ydCAqCitmcm9tIGdlbmVy
YXRlX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyIGltcG9ydCAqCitmcm9tIGdlbmVyYXRlX2Zy
b250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24gaW1wb3J0ICoKK2Zyb20gZ2VuZXJhdGVf
dHlwZV9idWlsZGVyX2hlYWRlciBpbXBvcnQgKgorZnJvbSBnZW5lcmF0ZV90eXBlX2J1aWxkZXJf
aW1wbGVtZW50YXRpb24gaW1wb3J0ICoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2JhY2tlbmRfY29tbWFuZHMucHkg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0
ZV9iYWNrZW5kX2NvbW1hbmRzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhhODA1ZjNmYTAzNjEzZTU5YzlkNzdk
YzY2ODE3NTk1YjJhNDViODcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9iYWNrZW5kX2NvbW1hbmRzLnB5
CkBAIC0wLDAgKzEsMTE3IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0
IChjKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChj
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMK
KyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMK
KyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyMgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKworaW1wb3J0IGxvZ2dpbmcK
K2ltcG9ydCBzdHJpbmcKK2Zyb20gc3RyaW5nIGltcG9ydCBUZW1wbGF0ZQorCitmcm9tIGdlbmVy
YXRvciBpbXBvcnQgR2VuZXJhdG9yLCB1Y2ZpcnN0Citmcm9tIGdlbmVyYXRvcl90ZW1wbGF0ZXMg
aW1wb3J0IEdlbmVyYXRvclRlbXBsYXRlcyBhcyBUZW1wbGF0ZXMKK2Zyb20gbW9kZWxzIGltcG9y
dCBFbnVtVHlwZQorCitsb2cgPSBsb2dnaW5nLmdldExvZ2dlcignZ2xvYmFsJykKKworCitjbGFz
cyBCYWNrZW5kQ29tbWFuZHNHZW5lcmF0b3IoR2VuZXJhdG9yKToKKyAgICBkZWYgX19pbml0X18o
c2VsZiwgbW9kZWwsIGlucHV0X2ZpbGVwYXRoKToKKyAgICAgICAgR2VuZXJhdG9yLl9faW5pdF9f
KHNlbGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0aCkKKworICAgIGRlZiBvdXRwdXRfZmlsZW5hbWUo
c2VsZik6CisgICAgICAgIHJldHVybiAiSW5zcGVjdG9yJXNCYWNrZW5kQ29tbWFuZHMuanMiICUg
c2VsZi5tb2RlbCgpLmZyYW1ld29yay5zZXR0aW5nKCdwcmVmaXgnKQorCisgICAgZGVmIGRvbWFp
bnNfdG9fZ2VuZXJhdGUoc2VsZik6CisgICAgICAgIGRlZiBzaG91bGRfZ2VuZXJhdGVfZG9tYWlu
KGRvbWFpbik6CisgICAgICAgICAgICBkb21haW5fZW51bV90eXBlcyA9IGZpbHRlcihsYW1iZGEg
ZGVjbGFyYXRpb246IGlzaW5zdGFuY2UoZGVjbGFyYXRpb24udHlwZSwgRW51bVR5cGUpLCBkb21h
aW4udHlwZV9kZWNsYXJhdGlvbnMpCisgICAgICAgICAgICByZXR1cm4gbGVuKGRvbWFpbi5jb21t
YW5kcykgPiAwIG9yIGxlbihkb21haW4uZXZlbnRzKSA+IDAgb3IgbGVuKGRvbWFpbl9lbnVtX3R5
cGVzKSA+IDAKKworICAgICAgICByZXR1cm4gZmlsdGVyKHNob3VsZF9nZW5lcmF0ZV9kb21haW4s
IEdlbmVyYXRvci5kb21haW5zX3RvX2dlbmVyYXRlKHNlbGYpKQorCisgICAgZGVmIGdlbmVyYXRl
X291dHB1dChzZWxmKToKKyAgICAgICAgc2VjdGlvbnMgPSBbXQorICAgICAgICBzZWN0aW9ucy5h
cHBlbmQoc2VsZi5nZW5lcmF0ZV9saWNlbnNlKCkpCisgICAgICAgIHNlY3Rpb25zLmV4dGVuZCht
YXAoc2VsZi5nZW5lcmF0ZV9kb21haW4sIHNlbGYuZG9tYWluc190b19nZW5lcmF0ZSgpKSkKKyAg
ICAgICAgcmV0dXJuICJcblxuIi5qb2luKHNlY3Rpb25zKQorCisgICAgZGVmIGdlbmVyYXRlX2Rv
bWFpbihzZWxmLCBkb21haW4pOgorICAgICAgICBsaW5lcyA9IFtdCisgICAgICAgIGFyZ3MgPSB7
CisgICAgICAgICAgICAnZG9tYWluJzogZG9tYWluLmRvbWFpbl9uYW1lCisgICAgICAgIH0KKwor
ICAgICAgICBsaW5lcy5hcHBlbmQoJy8vICUoZG9tYWluKXMuJyAlIGFyZ3MpCisKKyAgICAgICAg
aGFzX2FzeW5jX2NvbW1hbmRzID0gYW55KG1hcChsYW1iZGEgY29tbWFuZDogY29tbWFuZC5pc19h
c3luYywgZG9tYWluLmNvbW1hbmRzKSkKKyAgICAgICAgaWYgbGVuKGRvbWFpbi5ldmVudHMpID4g
MCBvciBoYXNfYXN5bmNfY29tbWFuZHM6CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ0luc3Bl
Y3RvckJhY2tlbmQucmVnaXN0ZXIlKGRvbWFpbilzRGlzcGF0Y2hlciA9IEluc3BlY3RvckJhY2tl
bmQucmVnaXN0ZXJEb21haW5EaXNwYXRjaGVyLmJpbmQoSW5zcGVjdG9yQmFja2VuZCwgIiUoZG9t
YWluKXMiKTsnICUgYXJncykKKworICAgICAgICBmb3IgZGVjbGFyYXRpb24gaW4gZG9tYWluLnR5
cGVfZGVjbGFyYXRpb25zOgorICAgICAgICAgICAgaWYgZGVjbGFyYXRpb24udHlwZS5pc19lbnVt
KCk6CisgICAgICAgICAgICAgICAgZW51bV9hcmdzID0geworICAgICAgICAgICAgICAgICAgICAn
ZG9tYWluJzogZG9tYWluLmRvbWFpbl9uYW1lLAorICAgICAgICAgICAgICAgICAgICAnZW51bU5h
bWUnOiBkZWNsYXJhdGlvbi50eXBlX25hbWUsCisgICAgICAgICAgICAgICAgICAgICdlbnVtTWFw
JzogIiwgIi5qb2luKFsnJXM6ICIlcyInICUgKEdlbmVyYXRvci5zdHlsaXplZF9uYW1lX2Zvcl9l
bnVtX3ZhbHVlKGVudW1fdmFsdWUpLCBlbnVtX3ZhbHVlKSBmb3IgZW51bV92YWx1ZSBpbiBkZWNs
YXJhdGlvbi50eXBlLmVudW1fdmFsdWVzKCldKQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBsaW5lcy5hcHBlbmQoJ0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFbnVtKCIlKGRv
bWFpbilzLiUoZW51bU5hbWUpcyIsIHslKGVudW1NYXApc30pOycgJSBlbnVtX2FyZ3MpCisKKyAg
ICAgICAgICAgIGRlZiBpc19hbm9ueW1vdXNfZW51bV9tZW1iZXIodHlwZV9tZW1iZXIpOgorICAg
ICAgICAgICAgICAgIHJldHVybiBpc2luc3RhbmNlKHR5cGVfbWVtYmVyLnR5cGUsIEVudW1UeXBl
KSBhbmQgdHlwZV9tZW1iZXIudHlwZS5pc19hbm9ueW1vdXMKKworICAgICAgICAgICAgZm9yIF9t
ZW1iZXIgaW4gZmlsdGVyKGlzX2Fub255bW91c19lbnVtX21lbWJlciwgZGVjbGFyYXRpb24udHlw
ZV9tZW1iZXJzKToKKyAgICAgICAgICAgICAgICBlbnVtX2FyZ3MgPSB7CisgICAgICAgICAgICAg
ICAgICAgICdkb21haW4nOiBkb21haW4uZG9tYWluX25hbWUsCisgICAgICAgICAgICAgICAgICAg
ICdlbnVtTmFtZSc6ICclcyVzJyAlIChkZWNsYXJhdGlvbi50eXBlX25hbWUsIHVjZmlyc3QoX21l
bWJlci5tZW1iZXJfbmFtZSkpLAorICAgICAgICAgICAgICAgICAgICAnZW51bU1hcCc6ICIsICIu
am9pbihbJyVzOiAiJXMiJyAlIChHZW5lcmF0b3Iuc3R5bGl6ZWRfbmFtZV9mb3JfZW51bV92YWx1
ZShlbnVtX3ZhbHVlKSwgZW51bV92YWx1ZSkgZm9yIGVudW1fdmFsdWUgaW4gX21lbWJlci50eXBl
LmVudW1fdmFsdWVzKCldKQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBsaW5l
cy5hcHBlbmQoJ0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFbnVtKCIlKGRvbWFpbilzLiUoZW51
bU5hbWUpcyIsIHslKGVudW1NYXApc30pOycgJSBlbnVtX2FyZ3MpCisKKyAgICAgICAgZm9yIGV2
ZW50IGluIGRvbWFpbi5ldmVudHM6CisgICAgICAgICAgICBldmVudF9hcmdzID0geworICAgICAg
ICAgICAgICAgICdkb21haW4nOiBkb21haW4uZG9tYWluX25hbWUsCisgICAgICAgICAgICAgICAg
J2V2ZW50TmFtZSc6IGV2ZW50LmV2ZW50X25hbWUsCisgICAgICAgICAgICAgICAgJ3BhcmFtcyc6
ICIsICIuam9pbihbJyIlcyInICUgcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lIGZvciBwYXJhbWV0
ZXIgaW4gZXZlbnQuZXZlbnRfcGFyYW1ldGVyc10pCisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBsaW5lcy5hcHBlbmQoJ0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFdmVudCgiJShkb21haW4p
cy4lKGV2ZW50TmFtZSlzIiwgWyUocGFyYW1zKXNdKTsnICUgZXZlbnRfYXJncykKKworICAgICAg
ICBmb3IgY29tbWFuZCBpbiBkb21haW4uY29tbWFuZHM6CisKKyAgICAgICAgICAgIGRlZiBnZW5l
cmF0ZV9wYXJhbWV0ZXJfb2JqZWN0KHBhcmFtZXRlcik6CisgICAgICAgICAgICAgICAgb3B0aW9u
YWxfc3RyaW5nID0gInRydWUiIGlmIHBhcmFtZXRlci5pc19vcHRpb25hbCBlbHNlICJmYWxzZSIK
KyAgICAgICAgICAgICAgICBwYWlycyA9IFtdCisgICAgICAgICAgICAgICAgcGFpcnMuYXBwZW5k
KCcibmFtZSI6ICIlcyInICUgcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKQorICAgICAgICAgICAg
ICAgIHBhaXJzLmFwcGVuZCgnInR5cGUiOiAiJXMiJyAlIEdlbmVyYXRvci5qc19uYW1lX2Zvcl9w
YXJhbWV0ZXJfdHlwZShwYXJhbWV0ZXIudHlwZSkpCisgICAgICAgICAgICAgICAgcGFpcnMuYXBw
ZW5kKCcib3B0aW9uYWwiOiAlcycgJSBvcHRpb25hbF9zdHJpbmcpCisgICAgICAgICAgICAgICAg
cmV0dXJuICJ7JXN9IiAlICIsICIuam9pbihwYWlycykKKworICAgICAgICAgICAgY29tbWFuZF9h
cmdzID0geworICAgICAgICAgICAgICAgICdkb21haW4nOiBkb21haW4uZG9tYWluX25hbWUsCisg
ICAgICAgICAgICAgICAgJ2NvbW1hbmROYW1lJzogY29tbWFuZC5jb21tYW5kX25hbWUsCisgICAg
ICAgICAgICAgICAgJ2NhbGxQYXJhbXMnOiAiLCAiLmpvaW4oW2dlbmVyYXRlX3BhcmFtZXRlcl9v
YmplY3QocGFyYW1ldGVyKSBmb3IgcGFyYW1ldGVyIGluIGNvbW1hbmQuY2FsbF9wYXJhbWV0ZXJz
XSksCisgICAgICAgICAgICAgICAgJ3JldHVyblBhcmFtcyc6ICIsICIuam9pbihbJyIlcyInICUg
cGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lIGZvciBwYXJhbWV0ZXIgaW4gY29tbWFuZC5yZXR1cm5f
cGFyYW1ldGVyc10pLAorICAgICAgICAgICAgfQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCdJ
bnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiJShkb21haW4pcy4lKGNvbW1hbmROYW1l
KXMiLCBbJShjYWxsUGFyYW1zKXNdLCBbJShyZXR1cm5QYXJhbXMpc10pOycgJSBjb21tYW5kX2Fy
Z3MpCisKKyAgICAgICAgcmV0dXJuICJcbiIuam9pbihsaW5lcykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2JhY2tl
bmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5Cm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjI2ZjRiMzlkMDNhZTViYzNhNDNjNjQzMTRlYjgwMmI0MjI3Zjk5ODcKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29k
ZWdlbi9nZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5CkBAIC0wLDAgKzEsMTgx
IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE0IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChjKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisj
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorIyBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCByZQoraW1w
b3J0IHN0cmluZworZnJvbSBzdHJpbmcgaW1wb3J0IFRlbXBsYXRlCisKK2Zyb20gZ2VuZXJhdG9y
IGltcG9ydCBHZW5lcmF0b3IsIHVjZmlyc3QKK2Zyb20gZ2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBv
cnQgR2VuZXJhdG9yVGVtcGxhdGVzIGFzIFRlbXBsYXRlcworZnJvbSBtb2RlbHMgaW1wb3J0IEVu
dW1UeXBlCisKK2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQorCisKK2NsYXNzIEJh
Y2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yKEdlbmVyYXRvcik6CisgICAgZGVmIF9faW5p
dF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0aCk6CisgICAgICAgIEdlbmVyYXRvci5fX2lu
aXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpCisKKyAgICBkZWYgb3V0cHV0X2ZpbGVu
YW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gIkluc3BlY3RvciVzQmFja2VuZERpc3BhdGNoZXJz
LmgiICUgc2VsZi5tb2RlbCgpLmZyYW1ld29yay5zZXR0aW5nKCdwcmVmaXgnKQorCisgICAgZGVm
IGRvbWFpbnNfdG9fZ2VuZXJhdGUoc2VsZik6CisgICAgICAgIHJldHVybiBmaWx0ZXIobGFtYmRh
IGRvbWFpbjogbGVuKGRvbWFpbi5jb21tYW5kcykgPiAwLCBHZW5lcmF0b3IuZG9tYWluc190b19n
ZW5lcmF0ZShzZWxmKSkKKworICAgIGRlZiBnZW5lcmF0ZV9vdXRwdXQoc2VsZik6CisgICAgICAg
IGhlYWRlcnMgPSBbCisgICAgICAgICAgICAnIkluc3BlY3RvciVzVHlwZUJ1aWxkZXJzLmgiJyAl
IHNlbGYubW9kZWwoKS5mcmFtZXdvcmsuc2V0dGluZygncHJlZml4JyksCisgICAgICAgICAgICAn
PGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPicsCisgICAgICAgICAgICAn
PHd0Zi9QYXNzUmVmUHRyLmg+JywKKyAgICAgICAgICAgICc8d3RmL3RleHQvV1RGU3RyaW5nLmg+
J10KKworICAgICAgICB0eXBlZGVmcyA9IFsoJ1N0cmluZycsICdFcnJvclN0cmluZycpXQorCisg
ICAgICAgIGhlYWRlcl9hcmdzID0geworICAgICAgICAgICAgJ2hlYWRlckd1YXJkU3RyaW5nJzog
cmUuc3ViKCdcVysnLCAnXycsIHNlbGYub3V0cHV0X2ZpbGVuYW1lKCkpLAorICAgICAgICAgICAg
J2luY2x1ZGVzJzogJ1xuJy5qb2luKFsnI2luY2x1ZGUgJyArIGhlYWRlciBmb3IgaGVhZGVyIGlu
IGhlYWRlcnNdKSwKKyAgICAgICAgICAgICd0eXBlZGVmcyc6ICdcbicuam9pbihbJ3R5cGVkZWYg
JXMgJXM7JyAlIHR5cGVkZWYgZm9yIHR5cGVkZWYgaW4gdHlwZWRlZnNdKSwKKyAgICAgICAgICAg
ICdpbnB1dEZpbGVuYW1lJzogc2VsZi5faW5wdXRfZmlsZXBhdGgKKyAgICAgICAgfQorCisgICAg
ICAgIHNlY3Rpb25zID0gW10KKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVf
bGljZW5zZSgpKQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVzLkNw
cEhlYWRlclByZWx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCisgICAgICAg
IHNlY3Rpb25zLmV4dGVuZChtYXAoc2VsZi5fZ2VuZXJhdGVfaGFuZGxlcl9kZWNsYXJhdGlvbnNf
Zm9yX2RvbWFpbiwgc2VsZi5kb21haW5zX3RvX2dlbmVyYXRlKCkpKQorICAgICAgICBzZWN0aW9u
cy5leHRlbmQobWFwKHNlbGYuX2dlbmVyYXRlX2Rpc3BhdGNoZXJfZGVjbGFyYXRpb25zX2Zvcl9k
b21haW4sIHNlbGYuZG9tYWluc190b19nZW5lcmF0ZSgpKSkKKyAgICAgICAgc2VjdGlvbnMuYXBw
ZW5kKFRlbXBsYXRlKFRlbXBsYXRlcy5DcHBIZWFkZXJQb3N0bHVkZSkuc3Vic3RpdHV0ZShOb25l
LCAqKmhlYWRlcl9hcmdzKSkKKyAgICAgICAgcmV0dXJuICJcblxuIi5qb2luKHNlY3Rpb25zKQor
CisgICAgIyBQcml2YXRlIG1ldGhvZHMuCisKKyAgICBkZWYgX2dlbmVyYXRlX2hhbmRsZXJfZGVj
bGFyYXRpb25zX2Zvcl9kb21haW4oc2VsZiwgZG9tYWluKToKKyAgICAgICAgY2xhc3NDb21wb25l
bnRzID0gWydjbGFzcyddCisgICAgICAgIGV4cG9ydE1hY3JvID0gc2VsZi5tb2RlbCgpLmZyYW1l
d29yay5zZXR0aW5nKCdleHBvcnRfbWFjcm8nLCBOb25lKQorICAgICAgICBpZiBleHBvcnRNYWNy
byBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGNsYXNzQ29tcG9uZW50cy5hcHBlbmQoZXhwb3J0
TWFjcm8pCisKKyAgICAgICAgdXNlZF9lbnVtX25hbWVzID0gc2V0KCkKKworICAgICAgICBjb21t
YW5kX2RlY2xhcmF0aW9ucyA9IFtdCisgICAgICAgIGZvciBjb21tYW5kIGluIGRvbWFpbi5jb21t
YW5kczoKKyAgICAgICAgICAgIGNvbW1hbmRfZGVjbGFyYXRpb25zLmFwcGVuZChzZWxmLl9nZW5l
cmF0ZV9oYW5kbGVyX2RlY2xhcmF0aW9uX2Zvcl9jb21tYW5kKGNvbW1hbmQsIHVzZWRfZW51bV9u
YW1lcykpCisKKyAgICAgICAgaGFuZGxlcl9hcmdzID0geworICAgICAgICAgICAgJ2NsYXNzQW5k
RXhwb3J0TWFjcm8nOiAiICIuam9pbihjbGFzc0NvbXBvbmVudHMpLAorICAgICAgICAgICAgJ2Rv
bWFpbk5hbWUnOiBkb21haW4uZG9tYWluX25hbWUsCisgICAgICAgICAgICAnY29tbWFuZERlY2xh
cmF0aW9ucyc6ICJcbiIuam9pbihjb21tYW5kX2RlY2xhcmF0aW9ucykKKyAgICAgICAgfQorCisg
ICAgICAgIHJldHVybiBHZW5lcmF0b3Iud3JhcF93aXRoX2d1YXJkX2Zvcl9kb21haW4oZG9tYWlu
LCBUZW1wbGF0ZShUZW1wbGF0ZXMuQmFja2VuZERpc3BhdGNoZXJIZWFkZXJEb21haW5IYW5kbGVy
RGVjbGFyYXRpb24pLnN1YnN0aXR1dGUoTm9uZSwgKipoYW5kbGVyX2FyZ3MpKQorCisgICAgZGVm
IF9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9mb3JfcGFyYW1ldGVyKHNlbGYsIHBhcmFtZXRlciwg
Y29tbWFuZCk6CisgICAgICAgIGVudW1fYXJncyA9IHsKKyAgICAgICAgICAgICdwYXJhbWV0ZXJO
YW1lJzogcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lLAorICAgICAgICAgICAgJ2NvbW1hbmROYW1l
JzogY29tbWFuZC5jb21tYW5kX25hbWUKKyAgICAgICAgfQorCisgICAgICAgIGxpbmVzID0gW10K
KyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgLy8gTmFtZWQgYWZ0ZXIgcGFyYW1ldGVyIFwnJShw
YXJhbWV0ZXJOYW1lKXNcJyB3aGlsZSBnZW5lcmF0aW5nIGNvbW1hbmQvZXZlbnQgJShjb21tYW5k
TmFtZSlzLicgJSBlbnVtX2FyZ3MpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGVudW0gY2xh
c3MgJXMgeycgJSB1Y2ZpcnN0KHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkpCisgICAgICAgIGZv
ciBlbnVtX3ZhbHVlIGluIHBhcmFtZXRlci50eXBlLmVudW1fdmFsdWVzKCk6CisgICAgICAgICAg
ICBsaW5lcy5hcHBlbmQoJyAgICAgICAgJXMgPSAlZCwnICUgKEdlbmVyYXRvci5zdHlsaXplZF9u
YW1lX2Zvcl9lbnVtX3ZhbHVlKGVudW1fdmFsdWUpLCBzZWxmLmVuY29kaW5nX2Zvcl9lbnVtX3Zh
bHVlKGVudW1fdmFsdWUpKSkKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgfTsgLy8gZW51bSBj
bGFzcyAlcycgJSB1Y2ZpcnN0KHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkpCisgICAgICAgIHJl
dHVybiAnXG4nLmpvaW4obGluZXMpCisKKyAgICBkZWYgX2dlbmVyYXRlX2hhbmRsZXJfZGVjbGFy
YXRpb25fZm9yX2NvbW1hbmQoc2VsZiwgY29tbWFuZCwgdXNlZF9lbnVtX25hbWVzKToKKyAgICAg
ICAgaWYgY29tbWFuZC5pc19hc3luYzoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9nZW5lcmF0
ZV9hc3luY19oYW5kbGVyX2RlY2xhcmF0aW9uX2Zvcl9jb21tYW5kKGNvbW1hbmQpCisKKyAgICAg
ICAgbGluZXMgPSBbXQorICAgICAgICBwYXJhbWV0ZXJzID0gWydFcnJvclN0cmluZyonXQorICAg
ICAgICBmb3IgX3BhcmFtZXRlciBpbiBjb21tYW5kLmNhbGxfcGFyYW1ldGVyczoKKyAgICAgICAg
ICAgIHBhcmFtZXRlcnMuYXBwZW5kKCIlcyBpbl8lcyIgJSAoR2VuZXJhdG9yLnR5cGVfc3RyaW5n
X2Zvcl91bmNoZWNrZWRfZm9ybWFsX2luX3BhcmFtZXRlcihfcGFyYW1ldGVyKSwgX3BhcmFtZXRl
ci5wYXJhbWV0ZXJfbmFtZSkpCisKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoX3BhcmFtZXRl
ci50eXBlLCBFbnVtVHlwZSkgYW5kIF9wYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUgbm90IGluIHVz
ZWRfZW51bV9uYW1lczoKKyAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJh
dGVfYW5vbnltb3VzX2VudW1fZm9yX3BhcmFtZXRlcihfcGFyYW1ldGVyLCBjb21tYW5kKSkKKyAg
ICAgICAgICAgICAgICB1c2VkX2VudW1fbmFtZXMuYWRkKF9wYXJhbWV0ZXIucGFyYW1ldGVyX25h
bWUpCisKKyAgICAgICAgZm9yIF9wYXJhbWV0ZXIgaW4gY29tbWFuZC5yZXR1cm5fcGFyYW1ldGVy
czoKKyAgICAgICAgICAgIHBhcmFtZXRlcl9uYW1lID0gJ291dF8nICsgX3BhcmFtZXRlci5wYXJh
bWV0ZXJfbmFtZQorICAgICAgICAgICAgaWYgX3BhcmFtZXRlci5pc19vcHRpb25hbDoKKyAgICAg
ICAgICAgICAgICBwYXJhbWV0ZXJfbmFtZSA9ICdvcHRfJyArIHBhcmFtZXRlcl9uYW1lCisgICAg
ICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZCgiJXMgJXMiICUgKEdlbmVyYXRvci50eXBlX3N0cmlu
Z19mb3JfZm9ybWFsX291dF9wYXJhbWV0ZXIoX3BhcmFtZXRlciksIHBhcmFtZXRlcl9uYW1lKSkK
KworICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShfcGFyYW1ldGVyLnR5cGUsIEVudW1UeXBlKSBh
bmQgX3BhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSBub3QgaW4gdXNlZF9lbnVtX25hbWVzOgorICAg
ICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9m
b3JfcGFyYW1ldGVyKF9wYXJhbWV0ZXIsIGNvbW1hbmQpKQorICAgICAgICAgICAgICAgIHVzZWRf
ZW51bV9uYW1lcy5hZGQoX3BhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkKKworICAgICAgICBjb21t
YW5kX2FyZ3MgPSB7CisgICAgICAgICAgICAnY29tbWFuZE5hbWUnOiBjb21tYW5kLmNvbW1hbmRf
bmFtZSwKKyAgICAgICAgICAgICdwYXJhbWV0ZXJzJzogIiwgIi5qb2luKHBhcmFtZXRlcnMpCisg
ICAgICAgIH0KKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgdmlydHVhbCB2b2lkICUoY29tbWFu
ZE5hbWUpcyglKHBhcmFtZXRlcnMpcykgPSAwOycgJSBjb21tYW5kX2FyZ3MpCisgICAgICAgIHJl
dHVybiAnXG4nLmpvaW4obGluZXMpCisKKyAgICBkZWYgX2dlbmVyYXRlX2FzeW5jX2hhbmRsZXJf
ZGVjbGFyYXRpb25fZm9yX2NvbW1hbmQoc2VsZiwgY29tbWFuZCk6CisgICAgICAgIGNhbGxiYWNr
TmFtZSA9ICIlc0NhbGxiYWNrIiAlIHVjZmlyc3QoY29tbWFuZC5jb21tYW5kX25hbWUpCisKKyAg
ICAgICAgaW5fcGFyYW1ldGVycyA9IFsnRXJyb3JTdHJpbmcqJ10KKyAgICAgICAgZm9yIF9wYXJh
bWV0ZXIgaW4gY29tbWFuZC5jYWxsX3BhcmFtZXRlcnM6CisgICAgICAgICAgICBpbl9wYXJhbWV0
ZXJzLmFwcGVuZCgiJXMgaW5fJXMiICUgKEdlbmVyYXRvci50eXBlX3N0cmluZ19mb3JfdW5jaGVj
a2VkX2Zvcm1hbF9pbl9wYXJhbWV0ZXIoX3BhcmFtZXRlciksIF9wYXJhbWV0ZXIucGFyYW1ldGVy
X25hbWUpKQorICAgICAgICBpbl9wYXJhbWV0ZXJzLmFwcGVuZCgiUGFzc1JlZlB0cjwlcz4gY2Fs
bGJhY2siICUgY2FsbGJhY2tOYW1lKQorCisgICAgICAgIG91dF9wYXJhbWV0ZXJzID0gW10KKyAg
ICAgICAgZm9yIF9wYXJhbWV0ZXIgaW4gY29tbWFuZC5yZXR1cm5fcGFyYW1ldGVyczoKKyAgICAg
ICAgICAgIG91dF9wYXJhbWV0ZXJzLmFwcGVuZCgiJXMgJXMiICUgKEdlbmVyYXRvci50eXBlX3N0
cmluZ19mb3JfZm9ybWFsX2FzeW5jX3BhcmFtZXRlcihfcGFyYW1ldGVyKSwgX3BhcmFtZXRlci5w
YXJhbWV0ZXJfbmFtZSkpCisKKyAgICAgICAgY29tbWFuZF9hcmdzID0geworICAgICAgICAgICAg
J2NhbGxiYWNrTmFtZSc6IGNhbGxiYWNrTmFtZSwKKyAgICAgICAgICAgICdjb21tYW5kTmFtZSc6
IGNvbW1hbmQuY29tbWFuZF9uYW1lLAorICAgICAgICAgICAgJ2luUGFyYW1ldGVycyc6ICIsICIu
am9pbihpbl9wYXJhbWV0ZXJzKSwKKyAgICAgICAgICAgICdvdXRQYXJhbWV0ZXJzJzogIiwgIi5q
b2luKG91dF9wYXJhbWV0ZXJzKSwKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBUZW1wbGF0
ZShUZW1wbGF0ZXMuQmFja2VuZERpc3BhdGNoZXJIZWFkZXJBc3luY0NvbW1hbmREZWNsYXJhdGlv
bikuc3Vic3RpdHV0ZShOb25lLCAqKmNvbW1hbmRfYXJncykKKworICAgIGRlZiBfZ2VuZXJhdGVf
ZGlzcGF0Y2hlcl9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbihzZWxmLCBkb21haW4pOgorICAgICAg
ICBjbGFzc0NvbXBvbmVudHMgPSBbJ2NsYXNzJ10KKyAgICAgICAgZXhwb3J0TWFjcm8gPSBzZWxm
Lm1vZGVsKCkuZnJhbWV3b3JrLnNldHRpbmcoJ2V4cG9ydF9tYWNybycsIE5vbmUpCisgICAgICAg
IGlmIGV4cG9ydE1hY3JvIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgY2xhc3NDb21wb25lbnRz
LmFwcGVuZChleHBvcnRNYWNybykKKworICAgICAgICBkZWNsYXJhdGlvbnMgPSBbXQorICAgICAg
ICBpZiBsZW4oZG9tYWluLmNvbW1hbmRzKSA+IDA6CisgICAgICAgICAgICBkZWNsYXJhdGlvbnMu
YXBwZW5kKCdwcml2YXRlOicpCisgICAgICAgIGRlY2xhcmF0aW9ucy5leHRlbmQobWFwKHNlbGYu
X2dlbmVyYXRlX2Rpc3BhdGNoZXJfZGVjbGFyYXRpb25fZm9yX2NvbW1hbmQsIGRvbWFpbi5jb21t
YW5kcykpCisKKyAgICAgICAgaGFuZGxlcl9hcmdzID0geworICAgICAgICAgICAgJ2NsYXNzQW5k
RXhwb3J0TWFjcm8nOiAiICIuam9pbihjbGFzc0NvbXBvbmVudHMpLAorICAgICAgICAgICAgJ2Rv
bWFpbk5hbWUnOiBkb21haW4uZG9tYWluX25hbWUsCisgICAgICAgICAgICAnY29tbWFuZERlY2xh
cmF0aW9ucyc6ICJcbiIuam9pbihkZWNsYXJhdGlvbnMpCisgICAgICAgIH0KKworICAgICAgICBy
ZXR1cm4gR2VuZXJhdG9yLndyYXBfd2l0aF9ndWFyZF9mb3JfZG9tYWluKGRvbWFpbiwgVGVtcGxh
dGUoVGVtcGxhdGVzLkJhY2tlbmREaXNwYXRjaGVySGVhZGVyRG9tYWluRGlzcGF0Y2hlckRlY2xh
cmF0aW9uKS5zdWJzdGl0dXRlKE5vbmUsICoqaGFuZGxlcl9hcmdzKSkKKworICAgIGRlZiBfZ2Vu
ZXJhdGVfZGlzcGF0Y2hlcl9kZWNsYXJhdGlvbl9mb3JfY29tbWFuZChzZWxmLCBjb21tYW5kKToK
KyAgICAgICAgcmV0dXJuICIgICAgdm9pZCAlcyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9y
OjpJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpOyIgJSBjb21tYW5kLmNvbW1hbmRfbmFtZQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4v
Z2VuZXJhdGVfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5IGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfYmFja2VuZF9k
aXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg3YTJiOGZlMmRhYjE5ZDdj
MWExNDQ1NGI0YzZhMjE0MzlkZjMyODIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9iYWNrZW5kX2Rpc3Bh
dGNoZXJfaW1wbGVtZW50YXRpb24ucHkKQEAgLTAsMCArMSwyNjkgQEAKKyMhL3Vzci9iaW4vZW52
IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorIyBDb3B5cmlnaHQgKGMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBt
ZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
IyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisjIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKworCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IHN0cmluZworZnJvbSBzdHJpbmcgaW1wb3J0
IFRlbXBsYXRlCisKK2Zyb20gZ2VuZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IsIHVjZmlyc3QKK2Zy
b20gZ2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgR2VuZXJhdG9yVGVtcGxhdGVzIGFzIFRlbXBs
YXRlcworZnJvbSBtb2RlbHMgaW1wb3J0IE9iamVjdFR5cGUsIEFycmF5VHlwZQorCitsb2cgPSBs
b2dnaW5nLmdldExvZ2dlcignZ2xvYmFsJykKKworCitjbGFzcyBCYWNrZW5kRGlzcGF0Y2hlcklt
cGxlbWVudGF0aW9uR2VuZXJhdG9yKEdlbmVyYXRvcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYs
IG1vZGVsLCBpbnB1dF9maWxlcGF0aCk6CisgICAgICAgIEdlbmVyYXRvci5fX2luaXRfXyhzZWxm
LCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpCisKKyAgICBkZWYgb3V0cHV0X2ZpbGVuYW1lKHNlbGYp
OgorICAgICAgICByZXR1cm4gIkluc3BlY3RvciVzQmFja2VuZERpc3BhdGNoZXJzLmNwcCIgJSBz
ZWxmLm1vZGVsKCkuZnJhbWV3b3JrLnNldHRpbmcoJ3ByZWZpeCcpCisKKyAgICBkZWYgZG9tYWlu
c190b19nZW5lcmF0ZShzZWxmKToKKyAgICAgICAgcmV0dXJuIGZpbHRlcihsYW1iZGEgZG9tYWlu
OiBsZW4oZG9tYWluLmNvbW1hbmRzKSA+IDAsIEdlbmVyYXRvci5kb21haW5zX3RvX2dlbmVyYXRl
KHNlbGYpKQorCisgICAgZGVmIGdlbmVyYXRlX291dHB1dChzZWxmKToKKyAgICAgICAgc2Vjb25k
YXJ5X2hlYWRlcnMgPSBbCisgICAgICAgICAgICAnPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwuaD4nLAorICAgICAgICAgICAgJzxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+
JywKKyAgICAgICAgICAgICc8d3RmL3RleHQvQ1N0cmluZy5oPiddCisKKyAgICAgICAgaGVhZGVy
X2FyZ3MgPSB7CisgICAgICAgICAgICAncHJpbWFyeUluY2x1ZGUnOiAnIkluc3BlY3RvciVzQmFj
a2VuZERpc3BhdGNoZXJzLmgiJyAlIHNlbGYubW9kZWwoKS5mcmFtZXdvcmsuc2V0dGluZygncHJl
Zml4JyksCisgICAgICAgICAgICAnc2Vjb25kYXJ5SW5jbHVkZXMnOiAiXG4iLmpvaW4oWycjaW5j
bHVkZSAlcycgJSBoZWFkZXIgZm9yIGhlYWRlciBpbiBzZWNvbmRhcnlfaGVhZGVyc10pLAorICAg
ICAgICAgICAgJ2lucHV0RmlsZW5hbWUnOiBzZWxmLl9pbnB1dF9maWxlcGF0aAorICAgICAgICB9
CisKKyAgICAgICAgc2VjdGlvbnMgPSBbXQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5n
ZW5lcmF0ZV9saWNlbnNlKCkpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShUZW1w
bGF0ZXMuQ3BwSW1wbGVtZW50YXRpb25QcmVsdWRlKS5zdWJzdGl0dXRlKE5vbmUsICoqaGVhZGVy
X2FyZ3MpKQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoIlxuIi5qb2luKG1hcChzZWxmLl9nZW5l
cmF0ZV9oYW5kbGVyX2NsYXNzX2Rlc3RydWN0b3JfZm9yX2RvbWFpbiwgc2VsZi5kb21haW5zX3Rv
X2dlbmVyYXRlKCkpKSkKKyAgICAgICAgc2VjdGlvbnMuZXh0ZW5kKG1hcChzZWxmLl9nZW5lcmF0
ZV9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uc19mb3JfZG9tYWluLCBzZWxmLmRvbWFpbnNfdG9f
Z2VuZXJhdGUoKSkpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMu
Q3BwSW1wbGVtZW50YXRpb25Qb3N0bHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9hcmdz
KSkKKyAgICAgICAgcmV0dXJuICJcblxuIi5qb2luKHNlY3Rpb25zKQorCisgICAgIyBQcml2YXRl
IG1ldGhvZHMuCisKKyAgICBkZWYgX2dlbmVyYXRlX2hhbmRsZXJfY2xhc3NfZGVzdHJ1Y3Rvcl9m
b3JfZG9tYWluKHNlbGYsIGRvbWFpbik6CisgICAgICAgIGRlc3RydWN0b3JfYXJncyA9IHsKKyAg
ICAgICAgICAgICdkb21haW5OYW1lJzogZG9tYWluLmRvbWFpbl9uYW1lCisgICAgICAgIH0KKyAg
ICAgICAgZGVzdHJ1Y3RvciA9ICdJbnNwZWN0b3IlKGRvbWFpbk5hbWUpc0JhY2tlbmREaXNwYXRj
aGVySGFuZGxlcjo6fkluc3BlY3RvciUoZG9tYWluTmFtZSlzQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyKCkgeyB9JyAlIGRlc3RydWN0b3JfYXJncworICAgICAgICByZXR1cm4gR2VuZXJhdG9yLndy
YXBfd2l0aF9ndWFyZF9mb3JfZG9tYWluKGRvbWFpbiwgZGVzdHJ1Y3RvcikKKworICAgIGRlZiBf
Z2VuZXJhdGVfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbnNfZm9yX2RvbWFpbihzZWxmLCBkb21h
aW4pOgorICAgICAgICBpbXBsZW1lbnRhdGlvbnMgPSBbXQorCisgICAgICAgIGNvbnN0cnVjdG9y
X2FyZ3MgPSB7CisgICAgICAgICAgICAnZG9tYWluTmFtZSc6IGRvbWFpbi5kb21haW5fbmFtZSwK
KyAgICAgICAgfQorICAgICAgICBpbXBsZW1lbnRhdGlvbnMuYXBwZW5kKFRlbXBsYXRlKFRlbXBs
YXRlcy5CYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uRG9tYWluQ29uc3RydWN0b3IpLnN1
YnN0aXR1dGUoTm9uZSwgKipjb25zdHJ1Y3Rvcl9hcmdzKSkKKworICAgICAgICBpZiBsZW4oZG9t
YWluLmNvbW1hbmRzKSA8PSA1OgorICAgICAgICAgICAgaW1wbGVtZW50YXRpb25zLmFwcGVuZChz
ZWxmLl9nZW5lcmF0ZV9zbWFsbF9kaXNwYXRjaGVyX3N3aXRjaF9pbXBsZW1lbnRhdGlvbl9mb3Jf
ZG9tYWluKGRvbWFpbikpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpbXBsZW1lbnRhdGlv
bnMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2xhcmdlX2Rpc3BhdGNoZXJfc3dpdGNoX2ltcGxlbWVu
dGF0aW9uX2Zvcl9kb21haW4oZG9tYWluKSkKKworICAgICAgICBmb3IgY29tbWFuZCBpbiBkb21h
aW4uY29tbWFuZHM6CisgICAgICAgICAgICBpZiBjb21tYW5kLmlzX2FzeW5jOgorICAgICAgICAg
ICAgICAgIGltcGxlbWVudGF0aW9ucy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYXN5bmNfZGlzcGF0
Y2hlcl9jbGFzc19mb3JfZG9tYWluKGNvbW1hbmQsIGRvbWFpbikpCisgICAgICAgICAgICBpbXBs
ZW1lbnRhdGlvbnMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRp
b25fZm9yX2NvbW1hbmQoY29tbWFuZCwgZG9tYWluKSkKKworICAgICAgICByZXR1cm4gR2VuZXJh
dG9yLndyYXBfd2l0aF9ndWFyZF9mb3JfZG9tYWluKGRvbWFpbiwgIlxuXG4iLmpvaW4oaW1wbGVt
ZW50YXRpb25zKSkKKworICAgIGRlZiBfZ2VuZXJhdGVfc21hbGxfZGlzcGF0Y2hlcl9zd2l0Y2hf
aW1wbGVtZW50YXRpb25fZm9yX2RvbWFpbihzZWxmLCBkb21haW4pOgorICAgICAgICBjYXNlcyA9
IFtdCisgICAgICAgIGNhc2VzLmFwcGVuZCgnICAgIGlmIChtZXRob2QgPT0gIiVzIiknICUgZG9t
YWluLmNvbW1hbmRzWzBdLmNvbW1hbmRfbmFtZSkKKyAgICAgICAgY2FzZXMuYXBwZW5kKCcgICAg
ICAgICVzKGNhbGxJZCwgKm1lc3NhZ2UuZ2V0KCkpOycgJSBkb21haW4uY29tbWFuZHNbMF0uY29t
bWFuZF9uYW1lKQorICAgICAgICBmb3IgY29tbWFuZCBpbiBkb21haW4uY29tbWFuZHNbMTpdOgor
ICAgICAgICAgICAgY2FzZXMuYXBwZW5kKCcgICAgZWxzZSBpZiAobWV0aG9kID09ICIlcyIpJyAl
IGNvbW1hbmQuY29tbWFuZF9uYW1lKQorICAgICAgICAgICAgY2FzZXMuYXBwZW5kKCcgICAgICAg
ICVzKGNhbGxJZCwgKm1lc3NhZ2UuZ2V0KCkpOycgJSBjb21tYW5kLmNvbW1hbmRfbmFtZSkKKwor
ICAgICAgICBzd2l0Y2hfYXJncyA9IHsKKyAgICAgICAgICAgICdkb21haW5OYW1lJzogZG9tYWlu
LmRvbWFpbl9uYW1lLAorICAgICAgICAgICAgJ2Rpc3BhdGNoQ2FzZXMnOiAiXG4iLmpvaW4oY2Fz
ZXMpCisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gVGVtcGxhdGUoVGVtcGxhdGVzLkJhY2tl
bmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25TbWFsbFN3aXRjaCkuc3Vic3RpdHV0ZShOb25lLCAq
KnN3aXRjaF9hcmdzKQorCisgICAgZGVmIF9nZW5lcmF0ZV9sYXJnZV9kaXNwYXRjaGVyX3N3aXRj
aF9pbXBsZW1lbnRhdGlvbl9mb3JfZG9tYWluKHNlbGYsIGRvbWFpbik6CisgICAgICAgIGNhc2Vz
ID0gW10KKyAgICAgICAgZm9yIGNvbW1hbmQgaW4gZG9tYWluLmNvbW1hbmRzOgorICAgICAgICAg
ICAgYXJncyA9IHsKKyAgICAgICAgICAgICAgICAnZG9tYWluTmFtZSc6IGRvbWFpbi5kb21haW5f
bmFtZSwKKyAgICAgICAgICAgICAgICAnY29tbWFuZE5hbWUnOiBjb21tYW5kLmNvbW1hbmRfbmFt
ZQorICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZXMuYXBwZW5kKCcgICAgICAgICAgICB7
ICIlKGNvbW1hbmROYW1lKXMiLCAmSW5zcGVjdG9yJShkb21haW5OYW1lKXNCYWNrZW5kRGlzcGF0
Y2hlcjo6JShjb21tYW5kTmFtZSlzIH0sJyAlIGFyZ3MpCisKKyAgICAgICAgc3dpdGNoX2FyZ3Mg
PSB7CisgICAgICAgICAgICAnZG9tYWluTmFtZSc6IGRvbWFpbi5kb21haW5fbmFtZSwKKyAgICAg
ICAgICAgICdkaXNwYXRjaENhc2VzJzogIlxuIi5qb2luKGNhc2VzKQorICAgICAgICB9CisKKyAg
ICAgICAgcmV0dXJuIFRlbXBsYXRlKFRlbXBsYXRlcy5CYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVu
dGF0aW9uTGFyZ2VTd2l0Y2gpLnN1YnN0aXR1dGUoTm9uZSwgKipzd2l0Y2hfYXJncykKKworICAg
IGRlZiBfZ2VuZXJhdGVfYXN5bmNfZGlzcGF0Y2hlcl9jbGFzc19mb3JfZG9tYWluKHNlbGYsIGNv
bW1hbmQsIGRvbWFpbik6CisgICAgICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMgPSBbXQor
ICAgICAgICBmb3JtYWxfcGFyYW1ldGVycyA9IFtdCisKKyAgICAgICAgZm9yIHBhcmFtZXRlciBp
biBjb21tYW5kLnJldHVybl9wYXJhbWV0ZXJzOgorICAgICAgICAgICAgcGFyYW1fYXJncyA9IHsK
KyAgICAgICAgICAgICAgICAnZnJhbWV3b3JrUHJlZml4Jzogc2VsZi5tb2RlbCgpLmZyYW1ld29y
ay5zZXR0aW5nKCdwcmVmaXgnKSwKKyAgICAgICAgICAgICAgICAna2V5ZWRTZXRNZXRob2QnOiBH
ZW5lcmF0b3Iua2V5ZWRfc2V0X21ldGhvZF9mb3JfdHlwZShwYXJhbWV0ZXIudHlwZSksCisgICAg
ICAgICAgICAgICAgJ3BhcmFtZXRlck5hbWUnOiBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUsCisg
ICAgICAgICAgICAgICAgJ3BhcmFtZXRlclR5cGUnOiBHZW5lcmF0b3IudHlwZV9zdHJpbmdfZm9y
X3N0YWNrX2luX3BhcmFtZXRlcihwYXJhbWV0ZXIpLAorICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBmb3JtYWxfcGFyYW1ldGVycy5hcHBlbmQoJyVzICVzJyAlIChHZW5lcmF0b3IudHlwZV9z
dHJpbmdfZm9yX2Zvcm1hbF9hc3luY19wYXJhbWV0ZXIocGFyYW1ldGVyKSwgcGFyYW1ldGVyLnBh
cmFtZXRlcl9uYW1lKSkKKworICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgor
ICAgICAgICAgICAgICAgIGlmIEdlbmVyYXRvci5zaG91bGRfdXNlX3dyYXBwZXJfZm9yX3JldHVy
bl90eXBlKHBhcmFtZXRlci50eXBlKToKKyAgICAgICAgICAgICAgICAgICAgb3V0X3BhcmFtZXRl
cl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICBpZiAoJShwYXJhbWV0ZXJOYW1lKXMuaXNBc3NpZ25l
ZCgpKScgJSBwYXJhbV9hcmdzKQorICAgICAgICAgICAgICAgICAgICBvdXRfcGFyYW1ldGVyX2Fz
c2lnbm1lbnRzLmFwcGVuZCgnICAgICAgICBqc29uTWVzc2FnZS0+JShrZXllZFNldE1ldGhvZClz
KEFTQ0lJTGl0ZXJhbCgiJShwYXJhbWV0ZXJOYW1lKXMiKSwgJShwYXJhbWV0ZXJOYW1lKXMuZ2V0
VmFsdWUoKSk7JyAlIHBhcmFtX2FyZ3MpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAg
ICAgICAgICAgICAgb3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICBpZiAoJShw
YXJhbWV0ZXJOYW1lKXMpJyAlIHBhcmFtX2FyZ3MpCisgICAgICAgICAgICAgICAgICAgIG91dF9w
YXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAgICAgIGpzb25NZXNzYWdlLT4lKGtleWVk
U2V0TWV0aG9kKXMoQVNDSUlMaXRlcmFsKCIlKHBhcmFtZXRlck5hbWUpcyIpLCAlKHBhcmFtZXRl
ck5hbWUpcyk7JyAlIHBhcmFtX2FyZ3MpCisgICAgICAgICAgICBlbGlmIHBhcmFtZXRlci50eXBl
LmlzX2VudW0oKToKKyAgICAgICAgICAgICAgICBvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRzLmFw
cGVuZCgnICAgIGpzb25NZXNzYWdlLT4lKGtleWVkU2V0TWV0aG9kKXMoQVNDSUlMaXRlcmFsKCIl
KHBhcmFtZXRlck5hbWUpcyIpLCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpnZXQlKGZyYW1ld29y
a1ByZWZpeClzRW51bUNvbnN0YW50VmFsdWUoJShwYXJhbWV0ZXJOYW1lKXMpKTsnICUgcGFyYW1f
YXJncykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgb3V0X3BhcmFtZXRlcl9h
c3NpZ25tZW50cy5hcHBlbmQoJyAgICBqc29uTWVzc2FnZS0+JShrZXllZFNldE1ldGhvZClzKEFT
Q0lJTGl0ZXJhbCgiJShwYXJhbWV0ZXJOYW1lKXMiKSwgJShwYXJhbWV0ZXJOYW1lKXMpOycgJSBw
YXJhbV9hcmdzKQorCisgICAgICAgIGFzeW5jX2FyZ3MgPSB7CisgICAgICAgICAgICAnZG9tYWlu
TmFtZSc6IGRvbWFpbi5kb21haW5fbmFtZSwKKyAgICAgICAgICAgICdjYWxsYmFja05hbWUnOiB1
Y2ZpcnN0KGNvbW1hbmQuY29tbWFuZF9uYW1lKSArICdDYWxsYmFjaycsCisgICAgICAgICAgICAn
Zm9ybWFsUGFyYW1ldGVycyc6ICIsICIuam9pbihmb3JtYWxfcGFyYW1ldGVycyksCisgICAgICAg
ICAgICAnb3V0UGFyYW1ldGVyQXNzaWdubWVudHMnOiAiXG4iLmpvaW4ob3V0X3BhcmFtZXRlcl9h
c3NpZ25tZW50cykKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gVGVtcGxhdGUoVGVtcGxhdGVz
LkJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25Bc3luY0NvbW1hbmQpLnN1YnN0aXR1dGUo
Tm9uZSwgKiphc3luY19hcmdzKQorCisgICAgZGVmIF9nZW5lcmF0ZV9kaXNwYXRjaGVyX2ltcGxl
bWVudGF0aW9uX2Zvcl9jb21tYW5kKHNlbGYsIGNvbW1hbmQsIGRvbWFpbik6CisgICAgICAgIGlu
X3BhcmFtZXRlcl9kZWNsYXJhdGlvbnMgPSBbXQorICAgICAgICBvdXRfcGFyYW1ldGVyX2RlY2xh
cmF0aW9ucyA9IFtdCisgICAgICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMgPSBbXQorICAg
ICAgICBtZXRob2RfcGFyYW1ldGVycyA9IFsnJmVycm9yJ10KKworICAgICAgICBmb3IgcGFyYW1l
dGVyIGluIGNvbW1hbmQuY2FsbF9wYXJhbWV0ZXJzOgorICAgICAgICAgICAgb3V0X3N1Y2Nlc3Nf
YXJndW1lbnQgPSAnbnVsbHB0cicKKyAgICAgICAgICAgIGlmIHBhcmFtZXRlci5pc19vcHRpb25h
bDoKKyAgICAgICAgICAgICAgICBvdXRfc3VjY2Vzc19hcmd1bWVudCA9ICcmJXNfdmFsdWVGb3Vu
ZCcgJSBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUKKyAgICAgICAgICAgICAgICBpbl9wYXJhbWV0
ZXJfZGVjbGFyYXRpb25zLmFwcGVuZCgnICAgIGJvb2wgJXNfdmFsdWVGb3VuZCA9IGZhbHNlOycg
JSBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpCisKKyAgICAgICAgICAgIHBhcmFtX2FyZ3MgPSB7
CisgICAgICAgICAgICAgICAgJ3BhcmFtZXRlclR5cGUnOiBHZW5lcmF0b3IudHlwZV9zdHJpbmdf
Zm9yX3N0YWNrX2luX3BhcmFtZXRlcihwYXJhbWV0ZXIpLAorICAgICAgICAgICAgICAgICdwYXJh
bWV0ZXJOYW1lJzogcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lLAorICAgICAgICAgICAgICAgICdr
ZXllZEdldE1ldGhvZCc6IEdlbmVyYXRvci5rZXllZF9nZXRfbWV0aG9kX2Zvcl90eXBlKHBhcmFt
ZXRlci50eXBlKSwKKyAgICAgICAgICAgICAgICAnc3VjY2Vzc091dFBhcmFtJzogb3V0X3N1Y2Nl
c3NfYXJndW1lbnQKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaW5fcGFyYW1ldGVyX2Rl
Y2xhcmF0aW9ucy5hcHBlbmQoJyAgICAlKHBhcmFtZXRlclR5cGUpcyBpbl8lKHBhcmFtZXRlck5h
bWUpcyA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjolKGtleWVkR2V0TWV0aG9kKXMocGFy
YW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoIiUocGFyYW1ldGVyTmFtZSlzIiksICUoc3Vj
Y2Vzc091dFBhcmFtKXMsIHByb3RvY29sRXJyb3JzUHRyKTsnICUgcGFyYW1fYXJncykKKworICAg
ICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAgIG1ldGhv
ZF9wYXJhbWV0ZXJzLmFwcGVuZCgnJShwYXJhbWV0ZXJOYW1lKXNfdmFsdWVGb3VuZCA/ICZpbl8l
KHBhcmFtZXRlck5hbWUpcyA6IG51bGxwdHInICUgcGFyYW1fYXJncykKKyAgICAgICAgICAgIGVs
c2U6CisgICAgICAgICAgICAgICAgbWV0aG9kX3BhcmFtZXRlcnMuYXBwZW5kKCdpbl8nICsgcGFy
YW1ldGVyLnBhcmFtZXRlcl9uYW1lKQorCisgICAgICAgIGlmIGNvbW1hbmQuaXNfYXN5bmM6Cisg
ICAgICAgICAgICBhc3luY19hcmdzID0geworICAgICAgICAgICAgICAgICdkb21haW5OYW1lJzog
ZG9tYWluLmRvbWFpbl9uYW1lLAorICAgICAgICAgICAgICAgICdjYWxsYmFja05hbWUnOiB1Y2Zp
cnN0KGNvbW1hbmQuY29tbWFuZF9uYW1lKSArICdDYWxsYmFjaycKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgb3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICAgICAgY2Fs
bGJhY2stPmRpc2FibGUoKTsnKQorICAgICAgICAgICAgb3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50
cy5hcHBlbmQoJyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJv
cigmY2FsbElkLCBJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJF
cnJvciwgZXJyb3IpOycpCisgICAgICAgICAgICBvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRzLmFw
cGVuZCgnICAgICAgICByZXR1cm47JykKKyAgICAgICAgICAgIG1ldGhvZF9wYXJhbWV0ZXJzLmFw
cGVuZCgnY2FsbGJhY2snKQorCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmb3IgcGFyYW1l
dGVyIGluIGNvbW1hbmQucmV0dXJuX3BhcmFtZXRlcnM6CisgICAgICAgICAgICAgICAgcGFyYW1f
YXJncyA9IHsKKyAgICAgICAgICAgICAgICAgICAgJ3BhcmFtZXRlclR5cGUnOiBHZW5lcmF0b3Iu
dHlwZV9zdHJpbmdfZm9yX3N0YWNrX291dF9wYXJhbWV0ZXIocGFyYW1ldGVyKSwKKyAgICAgICAg
ICAgICAgICAgICAgJ3BhcmFtZXRlck5hbWUnOiBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUsCisg
ICAgICAgICAgICAgICAgICAgICdrZXllZFNldE1ldGhvZCc6IEdlbmVyYXRvci5rZXllZF9zZXRf
bWV0aG9kX2Zvcl90eXBlKHBhcmFtZXRlci50eXBlKSwKKyAgICAgICAgICAgICAgICAgICAgJ2Zy
YW1ld29ya1ByZWZpeCc6IHNlbGYubW9kZWwoKS5mcmFtZXdvcmsuc2V0dGluZygncHJlZml4JykK
KyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBvdXRfcGFyYW1ldGVyX2RlY2xh
cmF0aW9ucy5hcHBlbmQoJyAgICAlKHBhcmFtZXRlclR5cGUpcyBvdXRfJShwYXJhbWV0ZXJOYW1l
KXM7JyAlIHBhcmFtX2FyZ3MpCisgICAgICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlv
bmFsOgorICAgICAgICAgICAgICAgICAgICBpZiBHZW5lcmF0b3Iuc2hvdWxkX3VzZV93cmFwcGVy
X2Zvcl9yZXR1cm5fdHlwZShwYXJhbWV0ZXIudHlwZSk6CisgICAgICAgICAgICAgICAgICAgICAg
ICBvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgICAgICBpZiAob3V0XyUocGFy
YW1ldGVyTmFtZSlzLmlzQXNzaWduZWQoKSknICUgcGFyYW1fYXJncykKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAgICAgICAgICBy
ZXN1bHQtPiUoa2V5ZWRTZXRNZXRob2QpcyhBU0NJSUxpdGVyYWwoIiUocGFyYW1ldGVyTmFtZSlz
IiksIG91dF8lKHBhcmFtZXRlck5hbWUpcy5nZXRWYWx1ZSgpKTsnICUgcGFyYW1fYXJncykKKyAg
ICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dF9wYXJh
bWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAgICAgIGlmIChvdXRfJShwYXJhbWV0ZXJOYW1l
KXMpJyAlIHBhcmFtX2FyZ3MpCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRfcGFyYW1ldGVy
X2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgICAgICAgICAgcmVzdWx0LT4lKGtleWVkU2V0TWV0aG9k
KXMoQVNDSUlMaXRlcmFsKCIlKHBhcmFtZXRlck5hbWUpcyIpLCBvdXRfJShwYXJhbWV0ZXJOYW1l
KXMpOycgJSBwYXJhbV9hcmdzKQorICAgICAgICAgICAgICAgIGVsaWYgcGFyYW1ldGVyLnR5cGUu
aXNfZW51bSgpOgorICAgICAgICAgICAgICAgICAgICBvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRz
LmFwcGVuZCgnICAgICAgICByZXN1bHQtPiUoa2V5ZWRTZXRNZXRob2QpcyhBU0NJSUxpdGVyYWwo
IiUocGFyYW1ldGVyTmFtZSlzIiksIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OmdldCUoZnJhbWV3
b3JrUHJlZml4KXNFbnVtQ29uc3RhbnRWYWx1ZShvdXRfJShwYXJhbWV0ZXJOYW1lKXMpKTsnICUg
cGFyYW1fYXJncykKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBv
dXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgICAgICByZXN1bHQtPiUoa2V5ZWRT
ZXRNZXRob2QpcyhBU0NJSUxpdGVyYWwoIiUocGFyYW1ldGVyTmFtZSlzIiksIG91dF8lKHBhcmFt
ZXRlck5hbWUpcyk7JyAlIHBhcmFtX2FyZ3MpCisKKyAgICAgICAgICAgICAgICBpZiBHZW5lcmF0
b3Iuc2hvdWxkX3Bhc3NfYnlfY29weV9mb3JfcmV0dXJuX3R5cGUocGFyYW1ldGVyLnR5cGUpOgor
ICAgICAgICAgICAgICAgICAgICBtZXRob2RfcGFyYW1ldGVycy5hcHBlbmQoJ291dF8nICsgcGFy
YW1ldGVyLnBhcmFtZXRlcl9uYW1lKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAg
ICAgICAgICAgIG1ldGhvZF9wYXJhbWV0ZXJzLmFwcGVuZCgnJm91dF8nICsgcGFyYW1ldGVyLnBh
cmFtZXRlcl9uYW1lKQorCisgICAgICAgIGNvbW1hbmRfYXJncyA9IHsKKyAgICAgICAgICAgICdk
b21haW5OYW1lJzogZG9tYWluLmRvbWFpbl9uYW1lLAorICAgICAgICAgICAgJ2NhbGxiYWNrTmFt
ZSc6ICclc0NhbGxiYWNrJyAlIHVjZmlyc3QoY29tbWFuZC5jb21tYW5kX25hbWUpLAorICAgICAg
ICAgICAgJ2NvbW1hbmROYW1lJzogY29tbWFuZC5jb21tYW5kX25hbWUsCisgICAgICAgICAgICAn
aW5QYXJhbWV0ZXJEZWNsYXJhdGlvbnMnOiAiXG4iLmpvaW4oaW5fcGFyYW1ldGVyX2RlY2xhcmF0
aW9ucyksCisgICAgICAgICAgICAnaW52b2NhdGlvblBhcmFtZXRlcnMnOiAiLCAiLmpvaW4obWV0
aG9kX3BhcmFtZXRlcnMpCisgICAgICAgIH0KKworICAgICAgICBsaW5lcyA9IFtdCisgICAgICAg
IGlmIGxlbihjb21tYW5kLmNhbGxfcGFyYW1ldGVycykgPT0gMDoKKyAgICAgICAgICAgIGxpbmVz
LmFwcGVuZCgndm9pZCBJbnNwZWN0b3IlKGRvbWFpbk5hbWUpc0JhY2tlbmREaXNwYXRjaGVyOjol
KGNvbW1hbmROYW1lKXMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYpJyAlIGNv
bW1hbmRfYXJncykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgndm9p
ZCBJbnNwZWN0b3IlKGRvbWFpbk5hbWUpc0JhY2tlbmREaXNwYXRjaGVyOjolKGNvbW1hbmROYW1l
KXMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSknICUgY29tbWFu
ZF9hcmdzKQorICAgICAgICBsaW5lcy5hcHBlbmQoJ3snKQorCisgICAgICAgIGlmIGxlbihjb21t
YW5kLmNhbGxfcGFyYW1ldGVycykgPiAwOgorICAgICAgICAgICAgbGluZXMuYXBwZW5kKFRlbXBs
YXRlKFRlbXBsYXRlcy5CYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uUHJlcGFyZUNvbW1h
bmRBcmd1bWVudHMpLnN1YnN0aXR1dGUoTm9uZSwgKipjb21tYW5kX2FyZ3MpKQorCisgICAgICAg
IGxpbmVzLmFwcGVuZCgnICAgIEVycm9yU3RyaW5nIGVycm9yOycpCisgICAgICAgIGxpbmVzLmFw
cGVuZCgnICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVj
dDo6Y3JlYXRlKCk7JykKKyAgICAgICAgaWYgY29tbWFuZC5pc19hc3luYzoKKyAgICAgICAgICAg
IGxpbmVzLmFwcGVuZCgnICAgIFJlZlB0cjxJbnNwZWN0b3IlKGRvbWFpbk5hbWUpc0JhY2tlbmRE
aXNwYXRjaGVySGFuZGxlcjo6JShjYWxsYmFja05hbWUpcz4gY2FsbGJhY2sgPSBhZG9wdFJlZihu
ZXcgSW5zcGVjdG9yJShkb21haW5OYW1lKXNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OiUoY2Fs
bGJhY2tOYW1lKXMobV9iYWNrZW5kRGlzcGF0Y2hlcixjYWxsSWQpKTsnICUgY29tbWFuZF9hcmdz
KQorICAgICAgICBpZiBsZW4oY29tbWFuZC5yZXR1cm5fcGFyYW1ldGVycykgPiAwOgorICAgICAg
ICAgICAgbGluZXMuZXh0ZW5kKG91dF9wYXJhbWV0ZXJfZGVjbGFyYXRpb25zKQorICAgICAgICBs
aW5lcy5hcHBlbmQoJyAgICBtX2FnZW50LT4lKGNvbW1hbmROYW1lKXMoJShpbnZvY2F0aW9uUGFy
YW1ldGVycylzKTsnICUgY29tbWFuZF9hcmdzKQorICAgICAgICBsaW5lcy5hcHBlbmQoJycpCisg
ICAgICAgIGlmIGNvbW1hbmQuaXNfYXN5bmM6CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAg
ICBpZiAoZXJyb3IubGVuZ3RoKCkpIHsnKQorICAgICAgICAgICAgbGluZXMuZXh0ZW5kKG91dF9w
YXJhbWV0ZXJfYXNzaWdubWVudHMpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICB9JykK
KyAgICAgICAgZWxpZiBsZW4oY29tbWFuZC5yZXR1cm5fcGFyYW1ldGVycykgPiAxOgorICAgICAg
ICAgICAgbGluZXMuYXBwZW5kKCcgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkgeycpCisgICAgICAg
ICAgICBsaW5lcy5leHRlbmQob3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cykKKyAgICAgICAgICAg
IGxpbmVzLmFwcGVuZCgnICAgIH0nKQorICAgICAgICBlbGlmIGxlbihjb21tYW5kLnJldHVybl9w
YXJhbWV0ZXJzKSA9PSAxOgorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgaWYgKCFlcnJv
ci5sZW5ndGgoKSknKQorICAgICAgICAgICAgbGluZXMuZXh0ZW5kKG91dF9wYXJhbWV0ZXJfYXNz
aWdubWVudHMpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJycpCisKKyAgICAgICAgaWYgbm90
IGNvbW1hbmQuaXNfYXN5bmM6CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBtX2JhY2tl
bmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBlcnJv
cik7JykKKyAgICAgICAgbGluZXMuYXBwZW5kKCd9JykKKyAgICAgICAgcmV0dXJuICJcbiIuam9p
bihsaW5lcykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5IGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfZnJv
bnRlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2M2NjllNjIzMGY2OTE1Nzc2
ZDMxY2Q0MjUwYWIxOTkwOWQ2ZGFlOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2Zyb250ZW5kX2Rpc3Bh
dGNoZXJfaGVhZGVyLnB5CkBAIC0wLDAgKzEsMTE4IEBACisjIS91c3IvYmluL2VudiBweXRob24K
KyMKKyMgQ29weXJpZ2h0IChjKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyMgQ29weXJpZ2h0IChjKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyMgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKwor
aW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCByZQoraW1wb3J0IHN0cmluZworZnJvbSBzdHJpbmcgaW1w
b3J0IFRlbXBsYXRlCisKK2Zyb20gbW9kZWxzIGltcG9ydCBFbnVtVHlwZQorZnJvbSBnZW5lcmF0
b3IgaW1wb3J0IEdlbmVyYXRvciwgdWNmaXJzdAorZnJvbSBnZW5lcmF0b3JfdGVtcGxhdGVzIGlt
cG9ydCBHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgVGVtcGxhdGVzCisKK2xvZyA9IGxvZ2dpbmcuZ2V0
TG9nZ2VyKCdnbG9iYWwnKQorCisKK2NsYXNzIEZyb250ZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVy
YXRvcihHZW5lcmF0b3IpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmls
ZXBhdGgpOgorICAgICAgICBHZW5lcmF0b3IuX19pbml0X18oc2VsZiwgbW9kZWwsIGlucHV0X2Zp
bGVwYXRoKQorCisgICAgZGVmIG91dHB1dF9maWxlbmFtZShzZWxmKToKKyAgICAgICAgcmV0dXJu
ICJJbnNwZWN0b3Ilc0Zyb250ZW5kRGlzcGF0Y2hlcnMuaCIgJSBzZWxmLm1vZGVsKCkuZnJhbWV3
b3JrLnNldHRpbmcoJ3ByZWZpeCcpCisKKyAgICBkZWYgZG9tYWluc190b19nZW5lcmF0ZShzZWxm
KToKKyAgICAgICAgcmV0dXJuIGZpbHRlcihsYW1iZGEgZG9tYWluOiBsZW4oZG9tYWluLmV2ZW50
cykgPiAwLCBHZW5lcmF0b3IuZG9tYWluc190b19nZW5lcmF0ZShzZWxmKSkKKworICAgIGRlZiBn
ZW5lcmF0ZV9vdXRwdXQoc2VsZik6CisgICAgICAgIGhlYWRlcnMgPSBbCisgICAgICAgICAgICAn
Ikluc3BlY3RvciVzVHlwZUJ1aWxkZXJzLmgiJyAlIHNlbGYubW9kZWwoKS5mcmFtZXdvcmsuc2V0
dGluZygncHJlZml4JyksCisgICAgICAgICAgICAnPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwuaD4nLAorICAgICAgICAgICAgJzxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+
JywKKyAgICAgICAgICAgICc8d3RmL1Bhc3NSZWZQdHIuaD4nLAorICAgICAgICAgICAgJzx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4nXQorCisgICAgICAgIGhlYWRlcl9hcmdzID0geworICAgICAgICAg
ICAgJ2hlYWRlckd1YXJkU3RyaW5nJzogcmUuc3ViKCdcVysnLCAnXycsIHNlbGYub3V0cHV0X2Zp
bGVuYW1lKCkpLAorICAgICAgICAgICAgJ2luY2x1ZGVzJzogJ1xuJy5qb2luKFsnI2luY2x1ZGUg
JyArIGhlYWRlciBmb3IgaGVhZGVyIGluIGhlYWRlcnNdKSwKKyAgICAgICAgICAgICd0eXBlZGVm
cyc6ICcnLAorICAgICAgICAgICAgJ2lucHV0RmlsZW5hbWUnOiBzZWxmLl9pbnB1dF9maWxlcGF0
aAorICAgICAgICB9CisKKyAgICAgICAgc2VjdGlvbnMgPSBbXQorICAgICAgICBzZWN0aW9ucy5h
cHBlbmQoc2VsZi5nZW5lcmF0ZV9saWNlbnNlKCkpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChU
ZW1wbGF0ZShUZW1wbGF0ZXMuQ3BwSGVhZGVyUHJlbHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhl
YWRlcl9hcmdzKSkKKyAgICAgICAgc2VjdGlvbnMuZXh0ZW5kKG1hcChzZWxmLl9nZW5lcmF0ZV9k
aXNwYXRjaGVyX2RlY2xhcmF0aW9uc19mb3JfZG9tYWluLCBzZWxmLmRvbWFpbnNfdG9fZ2VuZXJh
dGUoKSkpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMuQ3BwSGVh
ZGVyUG9zdGx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCisgICAgICAgIHJl
dHVybiAiXG5cbiIuam9pbihzZWN0aW9ucykKKworICAgICMgUHJpdmF0ZSBtZXRob2RzLgorCisg
ICAgZGVmIF9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9mb3JfcGFyYW1ldGVyKHNlbGYsIHBhcmFt
ZXRlciwgZXZlbnQpOgorICAgICAgICBlbnVtX2FyZ3MgPSB7CisgICAgICAgICAgICAncGFyYW1l
dGVyTmFtZSc6IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwKKyAgICAgICAgICAgICdldmVudE5h
bWUnOiBldmVudC5ldmVudF9uYW1lCisgICAgICAgIH0KKworICAgICAgICBsaW5lcyA9IFtdCisg
ICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICAvLyBOYW1lZCBhZnRlciBwYXJhbWV0ZXIgXCcl
KHBhcmFtZXRlck5hbWUpc1wnIHdoaWxlIGdlbmVyYXRpbmcgY29tbWFuZC9ldmVudCAlKGV2ZW50
TmFtZSlzLicgJSBlbnVtX2FyZ3MpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBlbnVt
IGNsYXNzICVzIHsnICUgdWNmaXJzdChwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpKQorICAgICAg
ICBmb3IgZW51bV92YWx1ZSBpbiBwYXJhbWV0ZXIudHlwZS5lbnVtX3ZhbHVlcygpOgorICAgICAg
ICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgICAgICAlcyA9ICVkLCcgJSAoR2VuZXJhdG9yLnN0
eWxpemVkX25hbWVfZm9yX2VudW1fdmFsdWUoZW51bV92YWx1ZSksIHNlbGYuZW5jb2RpbmdfZm9y
X2VudW1fdmFsdWUoZW51bV92YWx1ZSkpKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAg
fTsgLy8gZW51bSBjbGFzcyAlcycgJSB1Y2ZpcnN0KHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkp
CisgICAgICAgIHJldHVybiAiXG4iLmpvaW4obGluZXMpCisKKyAgICBkZWYgX2dlbmVyYXRlX2Rp
c3BhdGNoZXJfZGVjbGFyYXRpb25zX2Zvcl9kb21haW4oc2VsZiwgZG9tYWluKToKKyAgICAgICAg
Y2xhc3NDb21wb25lbnRzID0gWydjbGFzcyddCisgICAgICAgIGV4cG9ydE1hY3JvID0gc2VsZi5t
b2RlbCgpLmZyYW1ld29yay5zZXR0aW5nKCdleHBvcnRfbWFjcm8nLCBOb25lKQorICAgICAgICBp
ZiBleHBvcnRNYWNybyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGNsYXNzQ29tcG9uZW50cy5h
cHBlbmQoZXhwb3J0TWFjcm8pCisKKyAgICAgICAgdXNlZF9lbnVtX25hbWVzID0gc2V0KFtdKQor
CisgICAgICAgIGV2ZW50X2RlY2xhcmF0aW9ucyA9IFtdCisgICAgICAgIGZvciBldmVudCBpbiBk
b21haW4uZXZlbnRzOgorICAgICAgICAgICAgZXZlbnRfZGVjbGFyYXRpb25zLmFwcGVuZChzZWxm
Ll9nZW5lcmF0ZV9kaXNwYXRjaGVyX2RlY2xhcmF0aW9uX2Zvcl9ldmVudChldmVudCwgZG9tYWlu
LCB1c2VkX2VudW1fbmFtZXMpKQorCisgICAgICAgIGhhbmRsZXJfYXJncyA9IHsKKyAgICAgICAg
ICAgICdjbGFzc0FuZEV4cG9ydE1hY3JvJzogIiAiLmpvaW4oY2xhc3NDb21wb25lbnRzKSwKKyAg
ICAgICAgICAgICdkb21haW5OYW1lJzogZG9tYWluLmRvbWFpbl9uYW1lLAorICAgICAgICAgICAg
J2V2ZW50RGVjbGFyYXRpb25zJzogIlxuIi5qb2luKGV2ZW50X2RlY2xhcmF0aW9ucykKKyAgICAg
ICAgfQorCisgICAgICAgIHJldHVybiBHZW5lcmF0b3Iud3JhcF93aXRoX2d1YXJkX2Zvcl9kb21h
aW4oZG9tYWluLCBUZW1wbGF0ZShUZW1wbGF0ZXMuRnJvbnRlbmREaXNwYXRjaGVyRG9tYWluRGlz
cGF0Y2hlckRlY2xhcmF0aW9uKS5zdWJzdGl0dXRlKE5vbmUsICoqaGFuZGxlcl9hcmdzKSkKKwor
ICAgIGRlZiBfZ2VuZXJhdGVfZGlzcGF0Y2hlcl9kZWNsYXJhdGlvbl9mb3JfZXZlbnQoc2VsZiwg
ZXZlbnQsIGRvbWFpbiwgdXNlZF9lbnVtX25hbWVzKToKKyAgICAgICAgZm9ybWFsX3BhcmFtZXRl
cnMgPSBbXQorICAgICAgICBsaW5lcyA9IFtdCisgICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gZXZl
bnQuZXZlbnRfcGFyYW1ldGVyczoKKyAgICAgICAgICAgIGZvcm1hbF9wYXJhbWV0ZXJzLmFwcGVu
ZCgnJXMgJXMnICUgKEdlbmVyYXRvci50eXBlX3N0cmluZ19mb3JfY2hlY2tlZF9mb3JtYWxfZXZl
bnRfcGFyYW1ldGVyKHBhcmFtZXRlciksIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkpCisgICAg
ICAgICAgICBpZiBpc2luc3RhbmNlKHBhcmFtZXRlci50eXBlLCBFbnVtVHlwZSkgYW5kIHBhcmFt
ZXRlci5wYXJhbWV0ZXJfbmFtZSBub3QgaW4gdXNlZF9lbnVtX25hbWVzOgorICAgICAgICAgICAg
ICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9mb3JfcGFyYW1l
dGVyKHBhcmFtZXRlciwgZXZlbnQpKQorICAgICAgICAgICAgICAgIHVzZWRfZW51bV9uYW1lcy5h
ZGQocGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKQorCisgICAgICAgIGxpbmVzLmFwcGVuZCgiICAg
IHZvaWQgJXMoJXMpOyIgJSAoZXZlbnQuZXZlbnRfbmFtZSwgIiwgIi5qb2luKGZvcm1hbF9wYXJh
bWV0ZXJzKSkpCisgICAgICAgIHJldHVybiAiXG4iLmpvaW4obGluZXMpCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9m
cm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5IGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfZnJvbnRlbmRfZGlzcGF0Y2hl
cl9pbXBsZW1lbnRhdGlvbi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42NGU1YTY4M2ZiMjFjYTkwYWYzMzQ1NDJk
ZGQ2YmIwNzZmY2Y2NTc0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfZnJvbnRlbmRfZGlzcGF0Y2hlcl9p
bXBsZW1lbnRhdGlvbi5weQpAQCAtMCwwICsxLDEyMiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9u
CisjCisjIENvcHlyaWdodCAoYykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisjIENvcHlyaWdodCAoYykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMg
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisjIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisK
K2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgc3RyaW5nCitmcm9tIHN0cmluZyBpbXBvcnQgVGVtcGxh
dGUKKworZnJvbSBnZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvciwgdWNmaXJzdAorZnJvbSBnZW5l
cmF0b3JfdGVtcGxhdGVzIGltcG9ydCBHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgVGVtcGxhdGVzCitm
cm9tIG1vZGVscyBpbXBvcnQgT2JqZWN0VHlwZSwgQXJyYXlUeXBlCisKK2xvZyA9IGxvZ2dpbmcu
Z2V0TG9nZ2VyKCdnbG9iYWwnKQorCisKK2NsYXNzIEZyb250ZW5kRGlzcGF0Y2hlckltcGxlbWVu
dGF0aW9uR2VuZXJhdG9yKEdlbmVyYXRvcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZGVs
LCBpbnB1dF9maWxlcGF0aCk6CisgICAgICAgIEdlbmVyYXRvci5fX2luaXRfXyhzZWxmLCBtb2Rl
bCwgaW5wdXRfZmlsZXBhdGgpCisKKyAgICBkZWYgb3V0cHV0X2ZpbGVuYW1lKHNlbGYpOgorICAg
ICAgICByZXR1cm4gIkluc3BlY3RvciVzRnJvbnRlbmREaXNwYXRjaGVycy5jcHAiICUgc2VsZi5t
b2RlbCgpLmZyYW1ld29yay5zZXR0aW5nKCdwcmVmaXgnKQorCisgICAgZGVmIGRvbWFpbnNfdG9f
Z2VuZXJhdGUoc2VsZik6CisgICAgICAgIHJldHVybiBmaWx0ZXIobGFtYmRhIGRvbWFpbjogbGVu
KGRvbWFpbi5ldmVudHMpID4gMCwgR2VuZXJhdG9yLmRvbWFpbnNfdG9fZ2VuZXJhdGUoc2VsZikp
CisKKyAgICBkZWYgZ2VuZXJhdGVfb3V0cHV0KHNlbGYpOgorICAgICAgICBzZWNvbmRhcnlfaGVh
ZGVycyA9IFsnPHd0Zi90ZXh0L0NTdHJpbmcuaD4nXQorCisgICAgICAgIGhlYWRlcl9hcmdzID0g
eworICAgICAgICAgICAgJ3ByaW1hcnlJbmNsdWRlJzogJyJJbnNwZWN0b3Ilc0Zyb250ZW5kRGlz
cGF0Y2hlcnMuaCInICUgc2VsZi5tb2RlbCgpLmZyYW1ld29yay5zZXR0aW5nKCdwcmVmaXgnKSwK
KyAgICAgICAgICAgICdzZWNvbmRhcnlJbmNsdWRlcyc6ICJcbiIuam9pbihbJyNpbmNsdWRlICVz
JyAlIGhlYWRlciBmb3IgaGVhZGVyIGluIHNlY29uZGFyeV9oZWFkZXJzXSksCisgICAgICAgICAg
ICAnaW5wdXRGaWxlbmFtZSc6IHNlbGYuX2lucHV0X2ZpbGVwYXRoCisgICAgICAgIH0KKworICAg
ICAgICBzZWN0aW9ucyA9IFtdCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLmdlbmVyYXRl
X2xpY2Vuc2UoKSkKKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKFRlbXBsYXRlcy5D
cHBJbXBsZW1lbnRhdGlvblByZWx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykp
CisgICAgICAgIHNlY3Rpb25zLmV4dGVuZChtYXAoc2VsZi5fZ2VuZXJhdGVfZGlzcGF0Y2hlcl9p
bXBsZW1lbnRhdGlvbnNfZm9yX2RvbWFpbiwgc2VsZi5kb21haW5zX3RvX2dlbmVyYXRlKCkpKQor
ICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVzLkNwcEltcGxlbWVudGF0
aW9uUG9zdGx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCisgICAgICAgIHJl
dHVybiAiXG5cbiIuam9pbihzZWN0aW9ucykKKworICAgICMgUHJpdmF0ZSBtZXRob2RzLgorCisg
ICAgZGVmIF9nZW5lcmF0ZV9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uc19mb3JfZG9tYWluKHNl
bGYsIGRvbWFpbik6CisgICAgICAgIGltcGxlbWVudGF0aW9ucyA9IFtdCisgICAgICAgIGZvciBl
dmVudCBpbiBkb21haW4uZXZlbnRzOgorICAgICAgICAgICAgaW1wbGVtZW50YXRpb25zLmFwcGVu
ZChzZWxmLl9nZW5lcmF0ZV9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uX2Zvcl9ldmVudChldmVu
dCwgZG9tYWluKSkKKworICAgICAgICByZXR1cm4gR2VuZXJhdG9yLndyYXBfd2l0aF9ndWFyZF9m
b3JfZG9tYWluKGRvbWFpbiwgIlxuXG4iLmpvaW4oaW1wbGVtZW50YXRpb25zKSkKKworICAgIGRl
ZiBfZ2VuZXJhdGVfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbl9mb3JfZXZlbnQoc2VsZiwgZXZl
bnQsIGRvbWFpbik6CisgICAgICAgIGxpbmVzID0gW10KKyAgICAgICAgcGFyYW1ldGVyX2Fzc2ln
bm1lbnRzID0gW10KKyAgICAgICAgZm9ybWFsX3BhcmFtZXRlcnMgPSBbXQorCisgICAgICAgIGZv
ciBwYXJhbWV0ZXIgaW4gZXZlbnQuZXZlbnRfcGFyYW1ldGVyczoKKworICAgICAgICAgICAgcGFy
YW1ldGVyX3ZhbHVlID0gcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lCisgICAgICAgICAgICBpZiBw
YXJhbWV0ZXIuaXNfb3B0aW9uYWwgYW5kIG5vdCBHZW5lcmF0b3Iuc2hvdWxkX3Bhc3NfYnlfY29w
eV9mb3JfcmV0dXJuX3R5cGUocGFyYW1ldGVyLnR5cGUpOgorICAgICAgICAgICAgICAgIHBhcmFt
ZXRlcl92YWx1ZSA9ICcqJyArIHBhcmFtZXRlcl92YWx1ZQorICAgICAgICAgICAgaWYgcGFyYW1l
dGVyLnR5cGUuaXNfZW51bSgpOgorICAgICAgICAgICAgICAgIGZyYW1ld29ya19wcmVmaXggPSBz
ZWxmLm1vZGVsKCkuZnJhbWV3b3JrLnNldHRpbmcoJ3ByZWZpeCcpCisgICAgICAgICAgICAgICAg
cGFyYW1ldGVyX3ZhbHVlID0gJ0luc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OmdldCVzRW51bUNvbnN0
YW50VmFsdWUoJXMpJyAlIChmcmFtZXdvcmtfcHJlZml4LCBwYXJhbWV0ZXJfdmFsdWUpCisKKyAg
ICAgICAgICAgIHBhcmFtZXRlcl9hcmdzID0geworICAgICAgICAgICAgICAgICdwYXJhbWV0ZXJU
eXBlJzogR2VuZXJhdG9yLnR5cGVfc3RyaW5nX2Zvcl9zdGFja19vdXRfcGFyYW1ldGVyKHBhcmFt
ZXRlciksCisgICAgICAgICAgICAgICAgJ3BhcmFtZXRlck5hbWUnOiBwYXJhbWV0ZXIucGFyYW1l
dGVyX25hbWUsCisgICAgICAgICAgICAgICAgJ3BhcmFtZXRlclZhbHVlJzogcGFyYW1ldGVyX3Zh
bHVlLAorICAgICAgICAgICAgICAgICdrZXllZFNldE1ldGhvZCc6IEdlbmVyYXRvci5rZXllZF9z
ZXRfbWV0aG9kX2Zvcl90eXBlKHBhcmFtZXRlci50eXBlKSwKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAgIHBhcmFt
ZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICBpZiAoJShwYXJhbWV0ZXJOYW1lKXMpJyAlIHBh
cmFtZXRlcl9hcmdzKQorICAgICAgICAgICAgICAgIHBhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBl
bmQoJyAgICAgICAgcGFyYW1zT2JqZWN0LT4lKGtleWVkU2V0TWV0aG9kKXMoQVNDSUlMaXRlcmFs
KCIlKHBhcmFtZXRlck5hbWUpcyIpLCAlKHBhcmFtZXRlclZhbHVlKXMpOycgJSBwYXJhbWV0ZXJf
YXJncykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcGFyYW1ldGVyX2Fzc2ln
bm1lbnRzLmFwcGVuZCgnICAgIHBhcmFtc09iamVjdC0+JShrZXllZFNldE1ldGhvZClzKEFTQ0lJ
TGl0ZXJhbCgiJShwYXJhbWV0ZXJOYW1lKXMiKSwgJShwYXJhbWV0ZXJWYWx1ZSlzKTsnICUgcGFy
YW1ldGVyX2FyZ3MpCisKKyAgICAgICAgICAgIGZvcm1hbF9wYXJhbWV0ZXJzLmFwcGVuZCgnJXMg
JXMnICUgKEdlbmVyYXRvci50eXBlX3N0cmluZ19mb3JfY2hlY2tlZF9mb3JtYWxfZXZlbnRfcGFy
YW1ldGVyKHBhcmFtZXRlciksIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkpCisKKyAgICAgICAg
ZXZlbnRfYXJncyA9IHsKKyAgICAgICAgICAgICdkb21haW5OYW1lJzogZG9tYWluLmRvbWFpbl9u
YW1lLAorICAgICAgICAgICAgJ2V2ZW50TmFtZSc6IGV2ZW50LmV2ZW50X25hbWUsCisgICAgICAg
ICAgICAnZm9ybWFsUGFyYW1ldGVycyc6ICIsICIuam9pbihmb3JtYWxfcGFyYW1ldGVycykKKyAg
ICAgICAgfQorCisgICAgICAgIGxpbmVzLmFwcGVuZCgndm9pZCBJbnNwZWN0b3IlKGRvbWFpbk5h
bWUpc0Zyb250ZW5kRGlzcGF0Y2hlcjo6JShldmVudE5hbWUpcyglKGZvcm1hbFBhcmFtZXRlcnMp
cyknICUgZXZlbnRfYXJncykKKyAgICAgICAgbGluZXMuYXBwZW5kKCd7JykKKyAgICAgICAgbGlu
ZXMuYXBwZW5kKCcgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4ganNvbk1lc3NhZ2UgPSBJbnNw
ZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGpzb25N
ZXNzYWdlLT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJtZXRob2QiKSwgQVNDSUlMaXRlcmFsKCIl
KGRvbWFpbk5hbWUpcy4lKGV2ZW50TmFtZSlzIikpOycgJSBldmVudF9hcmdzKQorCisgICAgICAg
IGlmIGxlbihwYXJhbWV0ZXJfYXNzaWdubWVudHMpID4gMDoKKyAgICAgICAgICAgIGxpbmVzLmFw
cGVuZCgnICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCk7JykKKyAgICAgICAgICAgIGxpbmVzLmV4dGVuZChwYXJhbWV0ZXJf
YXNzaWdubWVudHMpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBqc29uTWVzc2FnZS0+
c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicGFyYW1zIiksIHBhcmFtc09iamVjdCk7JykKKworICAg
ICAgICBsaW5lcy5hcHBlbmQoJycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIG1faW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQoanNvbk1lc3NhZ2UtPnRv
SlNPTlN0cmluZygpKTsnKQorICAgICAgICBsaW5lcy5hcHBlbmQoJ30nKQorICAgICAgICByZXR1
cm4gIlxuIi5qb2luKGxpbmVzKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfdHlwZV9idWlsZGVyX2hlYWRlci5weSBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRl
X3R5cGVfYnVpbGRlcl9oZWFkZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzMwOTVkNGI2NjAxYmRkMTA0M2I0
NmNhY2Q1ZWY0ZjYwMWUxNGZhNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX3R5cGVfYnVpbGRlcl9oZWFk
ZXIucHkKQEAgLTAsMCArMSwzNDUgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5
cmlnaHQgKGMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmln
aHQgKGMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisj
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisj
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisjIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworCitpbXBvcnQgbG9n
Z2luZworaW1wb3J0IHJlCitpbXBvcnQgc3RyaW5nCitmcm9tIHN0cmluZyBpbXBvcnQgVGVtcGxh
dGUKKworZnJvbSBnZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvciwgdWNmaXJzdAorZnJvbSBnZW5l
cmF0b3JfdGVtcGxhdGVzIGltcG9ydCBHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgVGVtcGxhdGVzCitm
cm9tIG1vZGVscyBpbXBvcnQgRW51bVR5cGUsIE9iamVjdFR5cGUsIFByaW1pdGl2ZVR5cGUsIEFs
aWFzZWRUeXBlLCBBcnJheVR5cGUsIEZyYW1ld29ya3MKKworbG9nID0gbG9nZ2luZy5nZXRMb2dn
ZXIoJ2dsb2JhbCcpCisKKworY2xhc3MgVHlwZUJ1aWxkZXJIZWFkZXJHZW5lcmF0b3IoR2VuZXJh
dG9yKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbW9kZWwsIGlucHV0X2ZpbGVwYXRoKToKKyAg
ICAgICAgR2VuZXJhdG9yLl9faW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0aCkKKwor
ICAgIGRlZiBvdXRwdXRfZmlsZW5hbWUoc2VsZik6CisgICAgICAgIHJldHVybiAiSW5zcGVjdG9y
JXNUeXBlQnVpbGRlcnMuaCIgJSBzZWxmLm1vZGVsKCkuZnJhbWV3b3JrLnNldHRpbmcoJ3ByZWZp
eCcpCisKKyAgICBkZWYgZ2VuZXJhdGVfb3V0cHV0KHNlbGYpOgorICAgICAgICBkb21haW5zID0g
c2VsZi5kb21haW5zX3RvX2dlbmVyYXRlKCkKKyAgICAgICAgc2VsZi5jYWxjdWxhdGVfdHlwZXNf
cmVxdWlyaW5nX3NoYXBlX2Fzc2VydGlvbnMoZG9tYWlucykKKworICAgICAgICBoZWFkZXJzID0g
c2V0KFsKKyAgICAgICAgICAgICc8aW5zcGVjdG9yL0luc3BlY3RvclR5cGVCdWlsZGVyLmg+JywK
KyAgICAgICAgICAgICc8d3RmL0Fzc2VydGlvbnMuaD4nLAorICAgICAgICAgICAgJzx3dGYvUGFz
c1JlZlB0ci5oPicKKyAgICAgICAgXSkKKworICAgICAgICBpZiBzZWxmLm1vZGVsKCkuZnJhbWV3
b3JrIGlzIG5vdCBGcmFtZXdvcmtzLkphdmFTY3JpcHRDb3JlOgorICAgICAgICAgICAgaGVhZGVy
cy5hZGQoJzxpbnNwZWN0b3IvSW5zcGVjdG9ySlNUeXBlQnVpbGRlcnMuaD4nKQorCisgICAgICAg
IGV4cG9ydF9tYWNybyA9IHNlbGYubW9kZWwoKS5mcmFtZXdvcmsuc2V0dGluZygnZXhwb3J0X21h
Y3JvJywgTm9uZSkKKyAgICAgICAgZnJhbWV3b3JrX3ByZWZpeCA9IHNlbGYubW9kZWwoKS5mcmFt
ZXdvcmsuc2V0dGluZygncHJlZml4JykKKworICAgICAgICBoZWFkZXJfYXJncyA9IHsKKyAgICAg
ICAgICAgICdoZWFkZXJHdWFyZFN0cmluZyc6IHJlLnN1YignXFcrJywgJ18nLCBzZWxmLm91dHB1
dF9maWxlbmFtZSgpKSwKKyAgICAgICAgICAgICdpbmNsdWRlcyc6ICdcbicuam9pbihbJyNpbmNs
dWRlICcgKyBoZWFkZXIgZm9yIGhlYWRlciBpbiBzb3J0ZWQoaGVhZGVycyldKSwKKyAgICAgICAg
ICAgICd0eXBlZGVmcyc6ICcnLAorICAgICAgICAgICAgJ2lucHV0RmlsZW5hbWUnOiBzZWxmLl9p
bnB1dF9maWxlcGF0aAorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuX3R5cGUgPSBbJ1N0cmlu
ZyddCisgICAgICAgIGlmIGV4cG9ydF9tYWNybyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJl
dHVybl90eXBlWzowXSA9IFtleHBvcnRfbWFjcm9dCisKKyAgICAgICAgc2VjdGlvbnMgPSBbXQor
ICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5nZW5lcmF0ZV9saWNlbnNlKCkpCisgICAgICAg
IHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMuQ3BwSGVhZGVyUHJlbHVkZSkuc3Vi
c3RpdHV0ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkKKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKCdu
YW1lc3BhY2UgVHlwZUJ1aWxkZXIgeycpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLl9n
ZW5lcmF0ZV9mb3J3YXJkX2RlY2xhcmF0aW9ucyhkb21haW5zKSkKKyAgICAgICAgc2VjdGlvbnMu
YXBwZW5kKHNlbGYuX2dlbmVyYXRlX3R5cGVkZWZzKGRvbWFpbnMpKQorICAgICAgICBzZWN0aW9u
cy5hcHBlbmQoJyVzIGdldCVzRW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpOycgJSAoJyAnLmpv
aW4ocmV0dXJuX3R5cGUpLCBmcmFtZXdvcmtfcHJlZml4KSkKKyAgICAgICAgc2VjdGlvbnMuYXBw
ZW5kKCdcbicuam9pbihbCisgICAgICAgICAgICAndGVtcGxhdGU8dHlwZW5hbWUgVD4gJXMgZ2V0
JXNFbnVtQ29uc3RhbnRWYWx1ZShUIGVudW1WYWx1ZSknICUgKCcgJy5qb2luKHJldHVybl90eXBl
KSwgZnJhbWV3b3JrX3ByZWZpeCksCisgICAgICAgICAgICAneycsCisgICAgICAgICAgICAnICAg
IHJldHVybiBnZXQlc0VudW1Db25zdGFudFZhbHVlKHN0YXRpY19jYXN0PGludD4oZW51bVZhbHVl
KSk7JyAlIGZyYW1ld29ya19wcmVmaXgsCisgICAgICAgICAgICAnfSddKSkKKworICAgICAgICBi
dWlsZGVyX3NlY3Rpb25zID0gbWFwKHNlbGYuX2dlbmVyYXRlX2J1aWxkZXJzX2Zvcl9kb21haW4s
IGRvbWFpbnMpCisgICAgICAgIHNlY3Rpb25zLmV4dGVuZChmaWx0ZXIobGFtYmRhIHNlY3Rpb246
IGxlbihzZWN0aW9uKSA+IDAsIGJ1aWxkZXJfc2VjdGlvbnMpKQorICAgICAgICBzZWN0aW9ucy5h
cHBlbmQoc2VsZi5fZ2VuZXJhdGVfZm9yd2FyZF9kZWNsYXJhdGlvbnNfZm9yX2JpbmRpbmdfdHJh
aXRzKCkpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZCgnfSAvLyBuYW1lc3BhY2UgVHlwZUJ1aWxk
ZXInKQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVzLkNwcEhlYWRl
clBvc3RsdWRlKS5zdWJzdGl0dXRlKE5vbmUsICoqaGVhZGVyX2FyZ3MpKQorICAgICAgICByZXR1
cm4gIlxuXG4iLmpvaW4oc2VjdGlvbnMpCisKKyAgICAjIFByaXZhdGUgbWV0aG9kcy4KKworICAg
ICMgRklYTUU6IG1vdmUgYnVpbGRlcnMgb3V0IG9mIGNsYXNzZXMsIHVuY29tbWVudCBmb3J3YXJk
IGRlY2xhcmF0aW9uCisKKyAgICBkZWYgX2dlbmVyYXRlX2ZvcndhcmRfZGVjbGFyYXRpb25zKHNl
bGYsIGRvbWFpbnMpOgorICAgICAgICBzZWN0aW9ucyA9IFtdCisKKyAgICAgICAgZm9yIGRvbWFp
biBpbiBkb21haW5zOgorICAgICAgICAgICAgZGVjbGFyYXRpb25fdHlwZXMgPSBbZGVjbC50eXBl
IGZvciBkZWNsIGluIGRvbWFpbi50eXBlX2RlY2xhcmF0aW9uc10KKyAgICAgICAgICAgIG9iamVj
dF90eXBlcyA9IGZpbHRlcihsYW1iZGEgX3R5cGU6IGlzaW5zdGFuY2UoX3R5cGUsIE9iamVjdFR5
cGUpLCBkZWNsYXJhdGlvbl90eXBlcykKKyAgICAgICAgICAgIGVudW1fdHlwZXMgPSBmaWx0ZXIo
bGFtYmRhIF90eXBlOiBpc2luc3RhbmNlKF90eXBlLCBFbnVtVHlwZSksIGRlY2xhcmF0aW9uX3R5
cGVzKQorICAgICAgICAgICAgaWYgbGVuKG9iamVjdF90eXBlcykgKyBsZW4oZW51bV90eXBlcykg
PT0gMDoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBkb21haW5fbGlu
ZXMgPSBbXQorICAgICAgICAgICAgZG9tYWluX2xpbmVzLmFwcGVuZCgnbmFtZXNwYWNlICVzIHsn
ICUgZG9tYWluLmRvbWFpbl9uYW1lKQorCisgICAgICAgICAgICBvYmplY3RfdHlwZV9uYW1lcyA9
IFtfdHlwZS5yYXdfbmFtZSgpIGZvciBfdHlwZSBpbiBvYmplY3RfdHlwZXNdCisgICAgICAgICAg
ICBlbnVtX3R5cGVfbmFtZXMgPSBbX3R5cGUucmF3X25hbWUoKSBmb3IgX3R5cGUgaW4gZW51bV90
eXBlc10KKworICAgICAgICAgICAgIyBGb3J3YXJkLWRlY2xhcmUgYWxsIGNsYXNzZXMgc28gdGhl
IHR5cGUgYnVpbGRlcnMgd29uJ3QgYnJlYWsgaWYgcmVhcnJhbmdlZC4KKyAgICAgICAgICAgIGRv
bWFpbl9saW5lcy5leHRlbmQoJ2NsYXNzICVzOycgJSBuYW1lIGZvciBuYW1lIGluIHNvcnRlZChv
YmplY3RfdHlwZV9uYW1lcykpCisgICAgICAgICAgICBkb21haW5fbGluZXMuZXh0ZW5kKCdlbnVt
IGNsYXNzICVzOycgJSBuYW1lIGZvciBuYW1lIGluIHNvcnRlZChlbnVtX3R5cGVfbmFtZXMpKQor
ICAgICAgICAgICAgZG9tYWluX2xpbmVzLmFwcGVuZCgnfSAvLyAlcycgJSBkb21haW4uZG9tYWlu
X25hbWUpCisgICAgICAgICAgICBzZWN0aW9ucy5hcHBlbmQoR2VuZXJhdG9yLndyYXBfd2l0aF9n
dWFyZF9mb3JfZG9tYWluKGRvbWFpbiwgJ1xuJy5qb2luKGRvbWFpbl9saW5lcykpKQorCisgICAg
ICAgIGlmIGxlbihzZWN0aW9ucykgPT0gMDoKKyAgICAgICAgICAgIHJldHVybiAnJworICAgICAg
ICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuICIiIi8vIEZvcndhcmQgZGVjbGFyYXRpb25zLgor
JXMKKy8vIEVuZCBvZiBmb3J3YXJkIGRlY2xhcmF0aW9ucy4KKyIiIiAlICdcblxuJy5qb2luKHNl
Y3Rpb25zKQorCisgICAgZGVmIF9nZW5lcmF0ZV90eXBlZGVmcyhzZWxmLCBkb21haW5zKToKKyAg
ICAgICAgc2VjdGlvbnMgPSBtYXAoc2VsZi5fZ2VuZXJhdGVfdHlwZWRlZnNfZm9yX2RvbWFpbiwg
ZG9tYWlucykKKyAgICAgICAgc2VjdGlvbnMgPSBmaWx0ZXIobGFtYmRhIHRleHQ6IGxlbih0ZXh0
KSA+IDAsIHNlY3Rpb25zKQorCisgICAgICAgIGlmIGxlbihzZWN0aW9ucykgPT0gMDoKKyAgICAg
ICAgICAgIHJldHVybiAnJworICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuICIiIi8v
IFR5cGVkZWZzLgorJXMKKy8vIEVuZCBvZiB0eXBlZGVmcy4iIiIgJSAnXG5cbicuam9pbihzZWN0
aW9ucykKKworICAgIGRlZiBfZ2VuZXJhdGVfdHlwZWRlZnNfZm9yX2RvbWFpbihzZWxmLCBkb21h
aW4pOgorICAgICAgICBwcmltaXRpdmVfZGVjbGFyYXRpb25zID0gZmlsdGVyKGxhbWJkYSBkZWNs
OiBpc2luc3RhbmNlKGRlY2wudHlwZSwgQWxpYXNlZFR5cGUpLCBkb21haW4udHlwZV9kZWNsYXJh
dGlvbnMpCisgICAgICAgIGlmIGxlbihwcmltaXRpdmVfZGVjbGFyYXRpb25zKSA9PSAwOgorICAg
ICAgICAgICAgcmV0dXJuICcnCisKKyAgICAgICAgc2VjdGlvbnMgPSBbXQorICAgICAgICBmb3Ig
ZGVjbGFyYXRpb24gaW4gcHJpbWl0aXZlX2RlY2xhcmF0aW9uczoKKyAgICAgICAgICAgIHByaW1p
dGl2ZV9uYW1lID0gR2VuZXJhdG9yLmNwcF9uYW1lX2Zvcl9wcmltaXRpdmVfdHlwZShkZWNsYXJh
dGlvbi50eXBlLmFsaWFzZWRfdHlwZSkKKyAgICAgICAgICAgIHR5cGVkZWZfbGluZXMgPSBbXQor
ICAgICAgICAgICAgaWYgbGVuKGRlY2xhcmF0aW9uLmRlc2NyaXB0aW9uKSA+IDA6CisgICAgICAg
ICAgICAgICAgdHlwZWRlZl9saW5lcy5hcHBlbmQoJy8qICVzICovJyAlIGRlY2xhcmF0aW9uLmRl
c2NyaXB0aW9uKQorICAgICAgICAgICAgdHlwZWRlZl9saW5lcy5hcHBlbmQoJ3R5cGVkZWYgJXMg
JXM7JyAlIChwcmltaXRpdmVfbmFtZSwgZGVjbGFyYXRpb24udHlwZV9uYW1lKSkKKyAgICAgICAg
ICAgIHNlY3Rpb25zLmFwcGVuZCgnXG4nLmpvaW4odHlwZWRlZl9saW5lcykpCisKKyAgICAgICAg
bGluZXMgPSBbXQorICAgICAgICBsaW5lcy5hcHBlbmQoJ25hbWVzcGFjZSAlcyB7JyAlIGRvbWFp
bi5kb21haW5fbmFtZSkKKyAgICAgICAgbGluZXMuYXBwZW5kKCdcblxuJy5qb2luKHNlY3Rpb25z
KSkKKyAgICAgICAgbGluZXMuYXBwZW5kKCd9IC8vICVzJyAlIGRvbWFpbi5kb21haW5fbmFtZSkK
KyAgICAgICAgcmV0dXJuIEdlbmVyYXRvci53cmFwX3dpdGhfZ3VhcmRfZm9yX2RvbWFpbihkb21h
aW4sICdcbicuam9pbihsaW5lcykpCisKKyAgICBkZWYgX2dlbmVyYXRlX2J1aWxkZXJzX2Zvcl9k
b21haW4oc2VsZiwgZG9tYWluKToKKyAgICAgICAgc2VjdGlvbnMgPSBbXQorCisgICAgICAgIGZv
ciB0eXBlX2RlY2xhcmF0aW9uIGluIGRvbWFpbi50eXBlX2RlY2xhcmF0aW9uczoKKyAgICAgICAg
ICAgIGlmIGlzaW5zdGFuY2UodHlwZV9kZWNsYXJhdGlvbi50eXBlLCBFbnVtVHlwZSk6CisgICAg
ICAgICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX3N0cnVjdF9mb3JfZW51
bV9kZWNsYXJhdGlvbih0eXBlX2RlY2xhcmF0aW9uKSkKKyAgICAgICAgICAgIGVsaWYgaXNpbnN0
YW5jZSh0eXBlX2RlY2xhcmF0aW9uLnR5cGUsIE9iamVjdFR5cGUpOgorICAgICAgICAgICAgICAg
IHNlY3Rpb25zLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9jbGFzc19mb3Jfb2JqZWN0X2RlY2xhcmF0
aW9uKHR5cGVfZGVjbGFyYXRpb24sIGRvbWFpbikpCisKKyAgICAgICAgc2VjdGlvbnMgPSBmaWx0
ZXIobGFtYmRhIHNlY3Rpb246IGxlbihzZWN0aW9uKSA+IDAsIHNlY3Rpb25zKQorICAgICAgICBp
ZiBsZW4oc2VjdGlvbnMpID09IDA6CisgICAgICAgICAgICByZXR1cm4gJycKKworICAgICAgICBs
aW5lcyA9IFtdCisgICAgICAgIGxpbmVzLmFwcGVuZCgnbmFtZXNwYWNlICVzIHsnICUgZG9tYWlu
LmRvbWFpbl9uYW1lKQorICAgICAgICBsaW5lcy5hcHBlbmQoJ1xuJy5qb2luKHNlY3Rpb25zKSkK
KyAgICAgICAgbGluZXMuYXBwZW5kKCd9IC8vICVzJyAlIGRvbWFpbi5kb21haW5fbmFtZSkKKyAg
ICAgICAgcmV0dXJuIEdlbmVyYXRvci53cmFwX3dpdGhfZ3VhcmRfZm9yX2RvbWFpbihkb21haW4s
ICdcbicuam9pbihsaW5lcykpCisKKyAgICBkZWYgX2dlbmVyYXRlX2NsYXNzX2Zvcl9vYmplY3Rf
ZGVjbGFyYXRpb24oc2VsZiwgdHlwZV9kZWNsYXJhdGlvbiwgZG9tYWluKToKKyAgICAgICAgaWYg
bGVuKHR5cGVfZGVjbGFyYXRpb24udHlwZV9tZW1iZXJzKSA9PSAwOgorICAgICAgICAgICAgcmV0
dXJuICcnCisKKyAgICAgICAgZW51bV9tZW1iZXJzID0gZmlsdGVyKGxhbWJkYSBtZW1iZXI6IGlz
aW5zdGFuY2UobWVtYmVyLnR5cGUsIEVudW1UeXBlKSBhbmQgbWVtYmVyLnR5cGUuaXNfYW5vbnlt
b3VzLCB0eXBlX2RlY2xhcmF0aW9uLnR5cGVfbWVtYmVycykKKyAgICAgICAgcmVxdWlyZWRfbWVt
YmVycyA9IGZpbHRlcihsYW1iZGEgbWVtYmVyOiBub3QgbWVtYmVyLmlzX29wdGlvbmFsLCB0eXBl
X2RlY2xhcmF0aW9uLnR5cGVfbWVtYmVycykKKyAgICAgICAgb3B0aW9uYWxfbWVtYmVycyA9IGZp
bHRlcihsYW1iZGEgbWVtYmVyOiBtZW1iZXIuaXNfb3B0aW9uYWwsIHR5cGVfZGVjbGFyYXRpb24u
dHlwZV9tZW1iZXJzKQorICAgICAgICBvYmplY3RfbmFtZSA9IHR5cGVfZGVjbGFyYXRpb24udHlw
ZV9uYW1lCisKKyAgICAgICAgbGluZXMgPSBbXQorICAgICAgICBpZiBsZW4odHlwZV9kZWNsYXJh
dGlvbi5kZXNjcmlwdGlvbikgPiAwOgorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcvKiAlcyAq
LycgJSB0eXBlX2RlY2xhcmF0aW9uLmRlc2NyaXB0aW9uKQorICAgICAgICBiYXNlX2NsYXNzID0g
J0luc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0JworICAgICAgICBpZiBub3QgR2VuZXJhdG9yLnR5
cGVfaGFzX29wZW5fZmllbGRzKHR5cGVfZGVjbGFyYXRpb24udHlwZSk6CisgICAgICAgICAgICBi
YXNlX2NsYXNzID0gYmFzZV9jbGFzcyArICdCYXNlJworICAgICAgICBsaW5lcy5hcHBlbmQoJ2Ns
YXNzICVzIDogcHVibGljICVzIHsnICUgKG9iamVjdF9uYW1lLCBiYXNlX2NsYXNzKSkKKyAgICAg
ICAgbGluZXMuYXBwZW5kKCdwdWJsaWM6JykKKyAgICAgICAgZm9yIGVudW1fbWVtYmVyIGluIGVu
dW1fbWVtYmVyczoKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIC8vIE5hbWVkIGFmdGVy
IHByb3BlcnR5IG5hbWUgXCclc1wnIHdoaWxlIGdlbmVyYXRpbmcgJXMuJyAlIChlbnVtX21lbWJl
ci5tZW1iZXJfbmFtZSwgb2JqZWN0X25hbWUpKQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNl
bGYuX2dlbmVyYXRlX3N0cnVjdF9mb3JfYW5vbnltb3VzX2VudW1fbWVtYmVyKGVudW1fbWVtYmVy
KSkKKyAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2J1aWxkZXJfc3RhdGVfZW51
bSh0eXBlX2RlY2xhcmF0aW9uKSkKKworICAgICAgICBjb25zdHJ1Y3Rvcl9leGFtcGxlID0gW10K
KyAgICAgICAgY29uc3RydWN0b3JfZXhhbXBsZS5hcHBlbmQoJyAgICAgKiBSZWZQdHI8JXM+IHJl
c3VsdCA9ICVzOjpjcmVhdGUoKScgJSAob2JqZWN0X25hbWUsIG9iamVjdF9uYW1lKSkKKyAgICAg
ICAgZm9yIG1lbWJlciBpbiByZXF1aXJlZF9tZW1iZXJzOgorICAgICAgICAgICAgY29uc3RydWN0
b3JfZXhhbXBsZS5hcHBlbmQoJyAgICAgKiAgICAgLnNldCVzKC4uLiknICUgdWNmaXJzdChtZW1i
ZXIubWVtYmVyX25hbWUpKQorCisgICAgICAgIGJ1aWxkZXJfYXJncyA9IHsKKyAgICAgICAgICAg
ICdvYmplY3RUeXBlJzogb2JqZWN0X25hbWUsCisgICAgICAgICAgICAnY29uc3RydWN0b3JFeGFt
cGxlJzogJ1xuJy5qb2luKGNvbnN0cnVjdG9yX2V4YW1wbGUpICsgJzsnLAorICAgICAgICB9CisK
KyAgICAgICAgbGluZXMuYXBwZW5kKFRlbXBsYXRlKFRlbXBsYXRlcy5UeXBlQnVpbGRlckRlY2xh
cmF0aW9uUHJlbHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmJ1aWxkZXJfYXJncykpCisgICAgICAg
IGZvciB0eXBlX21lbWJlciBpbiByZXF1aXJlZF9tZW1iZXJzOgorICAgICAgICAgICAgbGluZXMu
YXBwZW5kKHNlbGYuX2dlbmVyYXRlX2J1aWxkZXJfc2V0dGVyX2Zvcl9tZW1iZXIodHlwZV9tZW1i
ZXIsIGRvbWFpbikpCisgICAgICAgIGxpbmVzLmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMuVHlw
ZUJ1aWxkZXJEZWNsYXJhdGlvblBvc3RsdWRlKS5zdWJzdGl0dXRlKE5vbmUsICoqYnVpbGRlcl9h
cmdzKSkKKyAgICAgICAgZm9yIG1lbWJlciBpbiBvcHRpb25hbF9tZW1iZXJzOgorICAgICAgICAg
ICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX3VuY2hlY2tlZF9zZXR0ZXJfZm9yX21lbWJl
cihtZW1iZXIsIGRvbWFpbikpCisKKyAgICAgICAgaWYgR2VuZXJhdG9yLnR5cGVfaGFzX29wZW5f
ZmllbGRzKHR5cGVfZGVjbGFyYXRpb24udHlwZSk6CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQo
JycpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAvLyBQcm9wZXJ0eSBuYW1lcyBmb3Ig
dHlwZSBnZW5lcmF0ZWQgYXMgb3Blbi4nKQorICAgICAgICAgICAgZm9yIHR5cGVfbWVtYmVyIGlu
IHR5cGVfZGVjbGFyYXRpb24udHlwZV9tZW1iZXJzOgorICAgICAgICAgICAgICAgIGxpbmVzLmFw
cGVuZCgnICAgIHN0YXRpYyBjb25zdCBjaGFyKiAlczsnICUgdWNmaXJzdCh0eXBlX21lbWJlci5t
ZW1iZXJfbmFtZSkpCisKKyAgICAgICAgbGluZXMuYXBwZW5kKCd9OycpCisgICAgICAgIGxpbmVz
LmFwcGVuZCgnJykKKyAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKKworICAgIGRlZiBf
Z2VuZXJhdGVfc3RydWN0X2Zvcl9lbnVtX2RlY2xhcmF0aW9uKHNlbGYsIGVudW1fZGVjbGFyYXRp
b24pOgorICAgICAgICBsaW5lcyA9IFtdCisgICAgICAgIGxpbmVzLmFwcGVuZCgnLyogJXMgKi8n
ICUgZW51bV9kZWNsYXJhdGlvbi5kZXNjcmlwdGlvbikKKyAgICAgICAgbGluZXMuZXh0ZW5kKHNl
bGYuX2dlbmVyYXRlX3N0cnVjdF9mb3JfZW51bV90eXBlKGVudW1fZGVjbGFyYXRpb24udHlwZV9u
YW1lLCBlbnVtX2RlY2xhcmF0aW9uLnR5cGUpKQorICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxp
bmVzKQorCisgICAgZGVmIF9nZW5lcmF0ZV9zdHJ1Y3RfZm9yX2Fub255bW91c19lbnVtX21lbWJl
cihzZWxmLCBlbnVtX21lbWJlcik6CisgICAgICAgIGRlZiBhcHBseV9pbmRlbnRhdGlvbihsaW5l
KToKKyAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgoJyMnLCAnLyonLCAnKi8nLCAnLy8n
KSkgb3IgbGVuKGxpbmUpIGlzIDA6CisgICAgICAgICAgICAgICAgcmV0dXJuIGxpbmUKKyAgICAg
ICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuICcgICAgJyArIGxpbmUKKworICAg
ICAgICBpbmRlbnRlZF9saW5lcyA9IG1hcChhcHBseV9pbmRlbnRhdGlvbiwgc2VsZi5fZ2VuZXJh
dGVfc3RydWN0X2Zvcl9lbnVtX3R5cGUoZW51bV9tZW1iZXIubWVtYmVyX25hbWUsIGVudW1fbWVt
YmVyLnR5cGUpKQorICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGluZGVudGVkX2xpbmVzKQorCisg
ICAgZGVmIF9nZW5lcmF0ZV9zdHJ1Y3RfZm9yX2VudW1fdHlwZShzZWxmLCBlbnVtX25hbWUsIGVu
dW1fdHlwZSk6CisgICAgICAgIGxpbmVzID0gW10KKyAgICAgICAgZW51bV9uYW1lID0gdWNmaXJz
dChlbnVtX25hbWUpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnZW51bSBjbGFzcyAlcyB7JyAlIGVu
dW1fbmFtZSkKKyAgICAgICAgZm9yIGVudW1fdmFsdWUgaW4gZW51bV90eXBlLmVudW1fdmFsdWVz
KCk6CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAlcyA9ICVzLCcgJSAoR2VuZXJhdG9y
LnN0eWxpemVkX25hbWVfZm9yX2VudW1fdmFsdWUoZW51bV92YWx1ZSksIHNlbGYuZW5jb2Rpbmdf
Zm9yX2VudW1fdmFsdWUoZW51bV92YWx1ZSkpKQorICAgICAgICBsaW5lcy5hcHBlbmQoJ307IC8v
IGVudW0gY2xhc3MgJXMnICUgZW51bV9uYW1lKQorICAgICAgICByZXR1cm4gbGluZXMgICMgVGhl
IGNhbGxlciBtYXkgd2FudCB0byBhZGp1c3QgaW5kZW50YXRpb24sIHNvIGRvbid0IGpvaW4gdGhl
c2UgbGluZXMuCisKKyAgICBkZWYgX2dlbmVyYXRlX2J1aWxkZXJfc3RhdGVfZW51bShzZWxmLCB0
eXBlX2RlY2xhcmF0aW9uKToKKyAgICAgICAgbGluZXMgPSBbXQorICAgICAgICByZXF1aXJlZF9t
ZW1iZXJzID0gZmlsdGVyKGxhbWJkYSBtZW1iZXI6IG5vdCBtZW1iZXIuaXNfb3B0aW9uYWwsIHR5
cGVfZGVjbGFyYXRpb24udHlwZV9tZW1iZXJzKQorICAgICAgICBlbnVtX3ZhbHVlcyA9IFtdCisK
KyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgZW51bSB7JykKKyAgICAgICAgbGluZXMuYXBwZW5k
KCcgICAgICAgIE5vRmllbGRzU2V0ID0gMCwnKQorICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4o
cmVxdWlyZWRfbWVtYmVycykpOgorICAgICAgICAgICAgZW51bV92YWx1ZSA9ICIlc1NldCIgJSB1
Y2ZpcnN0KHJlcXVpcmVkX21lbWJlcnNbaV0ubWVtYmVyX25hbWUpCisgICAgICAgICAgICBlbnVt
X3ZhbHVlcy5hcHBlbmQoZW51bV92YWx1ZSkKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAg
ICAgICAlcyA9IDEgPDwgJWQsJyAlIChlbnVtX3ZhbHVlLCBpKSkKKyAgICAgICAgaWYgbGVuKGVu
dW1fdmFsdWVzKSA+IDA6CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgQWxsRmll
bGRzU2V0ID0gKCVzKScgJSAnIHwgJy5qb2luKGVudW1fdmFsdWVzKSkKKyAgICAgICAgZWxzZToK
KyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBBbGxGaWVsZHNTZXQgPSAwJykKKyAg
ICAgICAgbGluZXMuYXBwZW5kKCcgICAgfTsnKQorICAgICAgICBsaW5lcy5hcHBlbmQoJycpCisg
ICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCisKKyAgICBkZWYgX2dlbmVyYXRlX2J1aWxk
ZXJfc2V0dGVyX2Zvcl9tZW1iZXIoc2VsZiwgdHlwZV9tZW1iZXIsIGRvbWFpbik6CisgICAgICAg
IHNldHRlcl9hcmdzID0geworICAgICAgICAgICAgJ2NhbWVsTmFtZSc6IHVjZmlyc3QodHlwZV9t
ZW1iZXIubWVtYmVyX25hbWUpLAorICAgICAgICAgICAgJ2ZyYW1ld29ya1ByZWZpeCc6IHNlbGYu
bW9kZWwoKS5mcmFtZXdvcmsuc2V0dGluZygncHJlZml4JyksCisgICAgICAgICAgICAna2V5ZWRT
ZXQnOiBHZW5lcmF0b3Iua2V5ZWRfc2V0X21ldGhvZF9mb3JfdHlwZSh0eXBlX21lbWJlci50eXBl
KSwKKyAgICAgICAgICAgICduYW1lJzogdHlwZV9tZW1iZXIubWVtYmVyX25hbWUsCisgICAgICAg
ICAgICAncGFyYW1ldGVyVHlwZSc6IEdlbmVyYXRvci50eXBlX3N0cmluZ19mb3JfdHlwZV9tZW1i
ZXIodHlwZV9tZW1iZXIpCisgICAgICAgIH0KKworICAgICAgICBsaW5lcyA9IFtdCisgICAgICAg
IGxpbmVzLmFwcGVuZCgnJykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCAlKGNhbWVsTmFtZSlzU2V0PiYgc2V0JShjYW1lbE5hbWUpcyglKHBhcmFtZXRlclR5
cGUpcyB2YWx1ZSknICUgc2V0dGVyX2FyZ3MpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAg
ICB7JykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCgh
KFNUQVRFICYgJShjYW1lbE5hbWUpc1NldCksIHByb3BlcnR5XyUobmFtZSlzX2FscmVhZHlfc2V0
KTsnICUgc2V0dGVyX2FyZ3MpCisKKyAgICAgICAgaWYgaXNpbnN0YW5jZSh0eXBlX21lbWJlci50
eXBlLCBFbnVtVHlwZSk6CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgICAgIG1f
cmVzdWx0LT4lKGtleWVkU2V0KXMoQVNDSUlMaXRlcmFsKCIlKG5hbWUpcyIpLCBJbnNwZWN0b3I6
OlR5cGVCdWlsZGVyOjpnZXQlKGZyYW1ld29ya1ByZWZpeClzRW51bUNvbnN0YW50VmFsdWUoc3Rh
dGljX2Nhc3Q8aW50Pih2YWx1ZSkpKTsnICUgc2V0dGVyX2FyZ3MpCisgICAgICAgIGVsc2U6Cisg
ICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgICAgIG1fcmVzdWx0LT4lKGtleWVkU2V0
KXMoQVNDSUlMaXRlcmFsKCIlKG5hbWUpcyIpLCB2YWx1ZSk7JyAlIHNldHRlcl9hcmdzKQorICAg
ICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8JShjYW1lbE5h
bWUpc1NldD4oKTsnICUgc2V0dGVyX2FyZ3MpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAg
ICB9JykKKyAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKKworICAgIGRlZiBfZ2VuZXJh
dGVfdW5jaGVja2VkX3NldHRlcl9mb3JfbWVtYmVyKHNlbGYsIHR5cGVfbWVtYmVyLCBkb21haW4p
OgorICAgICAgICBzZXR0ZXJfYXJncyA9IHsKKyAgICAgICAgICAgICdjYW1lbE5hbWUnOiB1Y2Zp
cnN0KHR5cGVfbWVtYmVyLm1lbWJlcl9uYW1lKSwKKyAgICAgICAgICAgICdmcmFtZXdvcmtQcmVm
aXgnOiBzZWxmLm1vZGVsKCkuZnJhbWV3b3JrLnNldHRpbmcoJ3ByZWZpeCcpLAorICAgICAgICAg
ICAgJ2tleWVkU2V0JzogR2VuZXJhdG9yLmtleWVkX3NldF9tZXRob2RfZm9yX3R5cGUodHlwZV9t
ZW1iZXIudHlwZSksCisgICAgICAgICAgICAnbmFtZSc6IHR5cGVfbWVtYmVyLm1lbWJlcl9uYW1l
LAorICAgICAgICAgICAgJ3BhcmFtZXRlclR5cGUnOiBHZW5lcmF0b3IudHlwZV9zdHJpbmdfZm9y
X3R5cGVfbWVtYmVyKHR5cGVfbWVtYmVyKQorICAgICAgICB9CisKKyAgICAgICAgbGluZXMgPSBb
XQorICAgICAgICBsaW5lcy5hcHBlbmQoJycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIHZv
aWQgc2V0JShjYW1lbE5hbWUpcyglKHBhcmFtZXRlclR5cGUpcyB2YWx1ZSknICUgc2V0dGVyX2Fy
Z3MpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIHsnKQorICAgICAgICBpZiBpc2luc3RhbmNl
KHR5cGVfbWVtYmVyLnR5cGUsIEVudW1UeXBlKToKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgn
ICAgICAgICBJbnNwZWN0b3JPYmplY3RCYXNlOjolKGtleWVkU2V0KXMoQVNDSUlMaXRlcmFsKCIl
KG5hbWUpcyIpLCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpnZXQlKGZyYW1ld29ya1ByZWZpeClz
RW51bUNvbnN0YW50VmFsdWUoc3RhdGljX2Nhc3Q8aW50Pih2YWx1ZSkpKTsnICUgc2V0dGVyX2Fy
Z3MpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgSW5z
cGVjdG9yT2JqZWN0QmFzZTo6JShrZXllZFNldClzKEFTQ0lJTGl0ZXJhbCgiJShuYW1lKXMiKSwg
dmFsdWUpOycgJSBzZXR0ZXJfYXJncykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgfScpCisg
ICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCisKKyAgICBkZWYgX2dlbmVyYXRlX2Zvcndh
cmRfZGVjbGFyYXRpb25zX2Zvcl9iaW5kaW5nX3RyYWl0cyhzZWxmKToKKyAgICAgICAgIyBBIGxp
c3Qgb2YgKGJ1aWxkZXJfdHlwZSwgbmVlZHNfcnVudGltZV9jYXN0KQorICAgICAgICB0eXBlX2Fy
Z3VtZW50cyA9IFtdCisKKyAgICAgICAgZm9yIGRvbWFpbiBpbiBzZWxmLmRvbWFpbnNfdG9fZ2Vu
ZXJhdGUoKToKKyAgICAgICAgICAgIGRlY2xhcmF0aW9uc190b19nZW5lcmF0ZSA9IGZpbHRlcihs
YW1iZGEgZGVjbDogc2VsZi50eXBlX25lZWRzX3NoYXBlX2Fzc2VydGlvbnMoZGVjbC50eXBlKSwg
ZG9tYWluLnR5cGVfZGVjbGFyYXRpb25zKQorCisgICAgICAgICAgICBmb3IgdHlwZV9kZWNsYXJh
dGlvbiBpbiBkZWNsYXJhdGlvbnNfdG9fZ2VuZXJhdGU6CisgICAgICAgICAgICAgICAgZm9yIHR5
cGVfbWVtYmVyIGluIHR5cGVfZGVjbGFyYXRpb24udHlwZV9tZW1iZXJzOgorICAgICAgICAgICAg
ICAgICAgICBpZiBpc2luc3RhbmNlKHR5cGVfbWVtYmVyLnR5cGUsIEVudW1UeXBlKToKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHR5cGVfYXJndW1lbnRzLmFwcGVuZCgoR2VuZXJhdG9yLnR5cGVf
YnVpbGRlcl9zdHJpbmdfZm9yX3R5cGVfbWVtYmVyKHR5cGVfbWVtYmVyLCB0eXBlX2RlY2xhcmF0
aW9uKSwgRmFsc2UpKQorCisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh0eXBlX2RlY2xh
cmF0aW9uLnR5cGUsIE9iamVjdFR5cGUpOgorICAgICAgICAgICAgICAgICAgICB0eXBlX2FyZ3Vt
ZW50cy5hcHBlbmQoKEdlbmVyYXRvci50eXBlX2J1aWxkZXJfc3RyaW5nX2Zvcl90eXBlKHR5cGVf
ZGVjbGFyYXRpb24udHlwZSksIEdlbmVyYXRvci50eXBlX25lZWRzX3J1bnRpbWVfY2FzdHModHlw
ZV9kZWNsYXJhdGlvbi50eXBlKSkpCisKKyAgICAgICAgc3RydWN0X2tleXdvcmRzID0gWydzdHJ1
Y3QnXQorICAgICAgICBmdW5jdGlvbl9rZXl3b3JkcyA9IFsnc3RhdGljIHZvaWQnXQorICAgICAg
ICBleHBvcnRfbWFjcm8gPSBzZWxmLm1vZGVsKCkuZnJhbWV3b3JrLnNldHRpbmcoJ2V4cG9ydF9t
YWNybycsIE5vbmUpCisgICAgICAgIGlmIGV4cG9ydF9tYWNybyBpcyBub3QgTm9uZToKKyAgICAg
ICAgICAgIHN0cnVjdF9rZXl3b3Jkcy5hcHBlbmQoZXhwb3J0X21hY3JvKQorICAgICAgICAgICAg
ZnVuY3Rpb25fa2V5d29yZHNbMToxXSA9IFtleHBvcnRfbWFjcm9dCisKKyAgICAgICAgbGluZXMg
PSBbXQorICAgICAgICBmb3IgYXJndW1lbnQgaW4gdHlwZV9hcmd1bWVudHM6CisgICAgICAgICAg
ICBsaW5lcy5hcHBlbmQoJ3RlbXBsYXRlPD4gJXMgQmluZGluZ1RyYWl0czwlcz4geycgJSAoJyAn
LmpvaW4oc3RydWN0X2tleXdvcmRzKSwgYXJndW1lbnRbMF0pKQorICAgICAgICAgICAgaWYgYXJn
dW1lbnRbMV06CisgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCdzdGF0aWMgUGFzc1JlZlB0
cjwlcz4gcnVudGltZUNhc3QoUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiB2
YWx1ZSk7JyAlIGFyZ3VtZW50WzBdKQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcjaWYgIUFT
U0VSVF9ESVNBQkxFRCcpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyVzIGFzc2VydFZhbHVl
SGFzRXhwZWN0ZWRUeXBlKEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUqKTsnICUgJyAnLmpvaW4o
ZnVuY3Rpb25fa2V5d29yZHMpKQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcjZW5kaWYgLy8g
IUFTU0VSVF9ESVNBQkxFRCcpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ307JykKKyAgICAg
ICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX3R5cGVfYnVpbGRlcl9pbXBs
ZW1lbnRhdGlvbi5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9j
b2RlZ2VuL2dlbmVyYXRlX3R5cGVfYnVpbGRlcl9pbXBsZW1lbnRhdGlvbi5weQpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5jNjkyYWE4YWI5M2MxMTE2ZDA4ZDFkOGZiMmVlYThmYmUzMGI0MTAxCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2Vu
ZXJhdGVfdHlwZV9idWlsZGVyX2ltcGxlbWVudGF0aW9uLnB5CkBAIC0wLDAgKzEsMTg0IEBACisj
IS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE0IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChjKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisj
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworIyBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisKKworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBzdHJpbmcKK2Zyb20g
c3RyaW5nIGltcG9ydCBUZW1wbGF0ZQorCitmcm9tIGdlbmVyYXRvciBpbXBvcnQgR2VuZXJhdG9y
LCB1Y2ZpcnN0Citmcm9tIGdlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IEdlbmVyYXRvclRlbXBs
YXRlcyBhcyBUZW1wbGF0ZXMKK2Zyb20gbW9kZWxzIGltcG9ydCBBbGlhc2VkVHlwZSwgQXJyYXlU
eXBlLCBFbnVtVHlwZSwgT2JqZWN0VHlwZQorCitsb2cgPSBsb2dnaW5nLmdldExvZ2dlcignZ2xv
YmFsJykKKworCitjbGFzcyBUeXBlQnVpbGRlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKEdlbmVy
YXRvcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0aCk6Cisg
ICAgICAgIEdlbmVyYXRvci5fX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpCisK
KyAgICBkZWYgb3V0cHV0X2ZpbGVuYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gIkluc3BlY3Rv
ciVzVHlwZUJ1aWxkZXJzLmNwcCIgJSBzZWxmLm1vZGVsKCkuZnJhbWV3b3JrLnNldHRpbmcoJ3By
ZWZpeCcpCisKKyAgICBkZWYgZ2VuZXJhdGVfb3V0cHV0KHNlbGYpOgorICAgICAgICBkb21haW5z
ID0gc2VsZi5kb21haW5zX3RvX2dlbmVyYXRlKCkKKyAgICAgICAgc2VsZi5jYWxjdWxhdGVfdHlw
ZXNfcmVxdWlyaW5nX3NoYXBlX2Fzc2VydGlvbnMoZG9tYWlucykKKworICAgICAgICBzZWNvbmRh
cnlfaGVhZGVycyA9IFsnPHd0Zi90ZXh0L0NTdHJpbmcuaD4nXQorCisgICAgICAgIGhlYWRlcl9h
cmdzID0geworICAgICAgICAgICAgJ3ByaW1hcnlJbmNsdWRlJzogJyJJbnNwZWN0b3Ilc1R5cGVC
dWlsZGVycy5oIicgJSBzZWxmLm1vZGVsKCkuZnJhbWV3b3JrLnNldHRpbmcoJ3ByZWZpeCcpLAor
ICAgICAgICAgICAgJ3NlY29uZGFyeUluY2x1ZGVzJzogIlxuIi5qb2luKFsnI2luY2x1ZGUgJXMn
ICUgaGVhZGVyIGZvciBoZWFkZXIgaW4gc2Vjb25kYXJ5X2hlYWRlcnNdKSwKKyAgICAgICAgICAg
ICdpbnB1dEZpbGVuYW1lJzogc2VsZi5faW5wdXRfZmlsZXBhdGgKKyAgICAgICAgfQorCisgICAg
ICAgIHNlY3Rpb25zID0gW10KKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVf
bGljZW5zZSgpKQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVzLkNw
cEltcGxlbWVudGF0aW9uUHJlbHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkK
KyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKCduYW1lc3BhY2UgVHlwZUJ1aWxkZXIgeycpCisgICAg
ICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9lbnVtX21hcHBpbmcoKSkKKyAgICAg
ICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX29wZW5fZmllbGRfbmFtZXMoKSkKKyAg
ICAgICAgYnVpbGRlcl9zZWN0aW9ucyA9IG1hcChzZWxmLl9nZW5lcmF0ZV9idWlsZGVyc19mb3Jf
ZG9tYWluLCBkb21haW5zKQorICAgICAgICBzZWN0aW9ucy5leHRlbmQoZmlsdGVyKGxhbWJkYSBz
ZWN0aW9uOiBsZW4oc2VjdGlvbikgPiAwLCBidWlsZGVyX3NlY3Rpb25zKSkKKyAgICAgICAgc2Vj
dGlvbnMuYXBwZW5kKCd9IC8vIG5hbWVzcGFjZSBUeXBlQnVpbGRlcicpCisgICAgICAgIHNlY3Rp
b25zLmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMuQ3BwSW1wbGVtZW50YXRpb25Qb3N0bHVkZSku
c3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkKKworICAgICAgICByZXR1cm4gIlxuXG4i
LmpvaW4oc2VjdGlvbnMpCisKKyAgICAjIFByaXZhdGUgbWV0aG9kcy4KKworICAgIGRlZiBfZ2Vu
ZXJhdGVfZW51bV9tYXBwaW5nKHNlbGYpOgorICAgICAgICBmcmFtZXdvcmtfcHJlZml4ID0gc2Vs
Zi5tb2RlbCgpLmZyYW1ld29yay5zZXR0aW5nKCdwcmVmaXgnKQorICAgICAgICBsaW5lcyA9IFtd
CisKKyAgICAgICAgbGluZXMuYXBwZW5kKCdzdGF0aWMgY29uc3QgY2hhciogY29uc3QgZW51bV9j
b25zdGFudF92YWx1ZXNbXSA9IHsnKQorICAgICAgICBsaW5lcy5leHRlbmQoWycgICAgIiVzIiwn
ICUgZW51bV92YWx1ZSBmb3IgZW51bV92YWx1ZSBpbiBzZWxmLmFzc2lnbmVkX2VudW1fdmFsdWVz
KCldKQorICAgICAgICBsaW5lcy5hcHBlbmQoJ307JykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcn
KQorICAgICAgICBsaW5lcy5hcHBlbmQoJ1N0cmluZyBnZXQlc0VudW1Db25zdGFudFZhbHVlKGlu
dCBjb2RlKSB7JyAlIGZyYW1ld29ya19wcmVmaXgpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAg
IHJldHVybiBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb2RlXTsnKQorICAgICAgICBsaW5lcy5hcHBl
bmQoJ30nKQorCisgICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCisKKyAgICBkZWYgX2dl
bmVyYXRlX29wZW5fZmllbGRfbmFtZXMoc2VsZik6CisgICAgICAgIGxpbmVzID0gW10KKyAgICAg
ICAgZm9yIGRvbWFpbiBpbiBzZWxmLmRvbWFpbnNfdG9fZ2VuZXJhdGUoKToKKyAgICAgICAgICAg
IGZvciB0eXBlX2RlY2xhcmF0aW9uIGluIGZpbHRlcihsYW1iZGEgZGVjbDogR2VuZXJhdG9yLnR5
cGVfaGFzX29wZW5fZmllbGRzKGRlY2wudHlwZSksIGRvbWFpbi50eXBlX2RlY2xhcmF0aW9ucyk6
CisgICAgICAgICAgICAgICAgZm9yIHR5cGVfbWVtYmVyIGluIHNvcnRlZCh0eXBlX2RlY2xhcmF0
aW9uLnR5cGVfbWVtYmVycywga2V5PWxhbWJkYSBtZW1iZXI6IG1lbWJlci5tZW1iZXJfbmFtZSk6
CisgICAgICAgICAgICAgICAgICAgIGZpZWxkX25hbWUgPSAnOjonLmpvaW4oWydJbnNwZWN0b3In
LCAnVHlwZUJ1aWxkZXInLCBkb21haW4uZG9tYWluX25hbWUsIHVjZmlyc3QodHlwZV9kZWNsYXJh
dGlvbi50eXBlX25hbWUpLCB1Y2ZpcnN0KHR5cGVfbWVtYmVyLm1lbWJlcl9uYW1lKV0pCisgICAg
ICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnY29uc3QgY2hhciogJXMgPSAiJXMiOycgJSAo
ZmllbGRfbmFtZSwgdHlwZV9tZW1iZXIubWVtYmVyX25hbWUpKQorCisgICAgICAgIHJldHVybiAn
XG4nLmpvaW4obGluZXMpCisKKyAgICBkZWYgX2dlbmVyYXRlX2J1aWxkZXJzX2Zvcl9kb21haW4o
c2VsZiwgZG9tYWluKToKKyAgICAgICAgc2VjdGlvbnMgPSBbXQorICAgICAgICBkZWNsYXJhdGlv
bnNfdG9fZ2VuZXJhdGUgPSBmaWx0ZXIobGFtYmRhIGRlY2w6IHNlbGYudHlwZV9uZWVkc19zaGFw
ZV9hc3NlcnRpb25zKGRlY2wudHlwZSksIGRvbWFpbi50eXBlX2RlY2xhcmF0aW9ucykKKworICAg
ICAgICBmb3IgdHlwZV9kZWNsYXJhdGlvbiBpbiBkZWNsYXJhdGlvbnNfdG9fZ2VuZXJhdGU6Cisg
ICAgICAgICAgICBmb3IgdHlwZV9tZW1iZXIgaW4gdHlwZV9kZWNsYXJhdGlvbi50eXBlX21lbWJl
cnM6CisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh0eXBlX21lbWJlci50eXBlLCBFbnVt
VHlwZSk6CisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLl9nZW5lcmF0
ZV9hc3NlcnRpb25fZm9yX2VudW0odHlwZV9tZW1iZXIsIHR5cGVfZGVjbGFyYXRpb24pKQorCisg
ICAgICAgICAgICBpZiBpc2luc3RhbmNlKHR5cGVfZGVjbGFyYXRpb24udHlwZSwgT2JqZWN0VHlw
ZSk6CisgICAgICAgICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2Fzc2Vy
dGlvbl9mb3Jfb2JqZWN0X2RlY2xhcmF0aW9uKHR5cGVfZGVjbGFyYXRpb24pKQorICAgICAgICAg
ICAgICAgIGlmIEdlbmVyYXRvci50eXBlX25lZWRzX3J1bnRpbWVfY2FzdHModHlwZV9kZWNsYXJh
dGlvbi50eXBlKToKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuX2dl
bmVyYXRlX3J1bnRpbWVfY2FzdF9mb3Jfb2JqZWN0X2RlY2xhcmF0aW9uKHR5cGVfZGVjbGFyYXRp
b24pKQorCisgICAgICAgIHJldHVybiAnXG5cbicuam9pbihzZWN0aW9ucykKKworICAgIGRlZiBf
Z2VuZXJhdGVfcnVudGltZV9jYXN0X2Zvcl9vYmplY3RfZGVjbGFyYXRpb24oc2VsZiwgb2JqZWN0
X2RlY2xhcmF0aW9uKToKKyAgICAgICAgYXJncyA9IHsKKyAgICAgICAgICAgICdvYmplY3RUeXBl
JzogR2VuZXJhdG9yLnR5cGVfYnVpbGRlcl9zdHJpbmdfZm9yX3R5cGUob2JqZWN0X2RlY2xhcmF0
aW9uLnR5cGUpCisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFRlbXBsYXRlKFRlbXBsYXRlcy5U
eXBlQnVpbGRlck9iamVjdFJ1bnRpbWVDYXN0KS5zdWJzdGl0dXRlKE5vbmUsICoqYXJncykKKwor
ICAgIGRlZiBfZ2VuZXJhdGVfYXNzZXJ0aW9uX2Zvcl9vYmplY3RfZGVjbGFyYXRpb24oc2VsZiwg
b2JqZWN0X2RlY2xhcmF0aW9uKToKKyAgICAgICAgcmVxdWlyZWRfbWVtYmVycyA9IGZpbHRlcihs
YW1iZGEgbWVtYmVyOiBub3QgbWVtYmVyLmlzX29wdGlvbmFsLCBvYmplY3RfZGVjbGFyYXRpb24u
dHlwZV9tZW1iZXJzKQorICAgICAgICBvcHRpb25hbF9tZW1iZXJzID0gZmlsdGVyKGxhbWJkYSBt
ZW1iZXI6IG1lbWJlci5pc19vcHRpb25hbCwgb2JqZWN0X2RlY2xhcmF0aW9uLnR5cGVfbWVtYmVy
cykKKyAgICAgICAgc2hvdWxkX2NvdW50X3Byb3BlcnRpZXMgPSBub3QgR2VuZXJhdG9yLnR5cGVf
aGFzX29wZW5fZmllbGRzKG9iamVjdF9kZWNsYXJhdGlvbi50eXBlKQorICAgICAgICBsaW5lcyA9
IFtdCisKKyAgICAgICAgbGluZXMuYXBwZW5kKCcjaWYgIUFTU0VSVF9ESVNBQkxFRCcpCisgICAg
ICAgIGxpbmVzLmFwcGVuZCgndm9pZCBCaW5kaW5nVHJhaXRzPCVzPjo6YXNzZXJ0VmFsdWVIYXNF
eHBlY3RlZFR5cGUoSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSogdmFsdWUpJyAlIChHZW5lcmF0
b3IudHlwZV9idWlsZGVyX3N0cmluZ19mb3JfdHlwZShvYmplY3RfZGVjbGFyYXRpb24udHlwZSkp
KQorICAgICAgICBsaW5lcy5hcHBlbmQoIiIieworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IG9iamVjdDsKKyAgICBib29sIGNhc3RSZXMgPSB2YWx1ZS0+YXNPYmplY3QoJm9iamVjdCk7Cisg
ICAgQVNTRVJUX1VOVVNFRChjYXN0UmVzLCBjYXN0UmVzKTsiIiIpCisgICAgICAgIGZvciB0eXBl
X21lbWJlciBpbiByZXF1aXJlZF9tZW1iZXJzOgorICAgICAgICAgICAgYXJncyA9IHsKKyAgICAg
ICAgICAgICAgICAnbWVtYmVyTmFtZSc6IHR5cGVfbWVtYmVyLm1lbWJlcl9uYW1lLAorICAgICAg
ICAgICAgICAgICdhc3NlcnRNZXRob2QnOiBHZW5lcmF0b3IuYXNzZXJ0aW9uX21ldGhvZF9mb3Jf
dHlwZV9tZW1iZXIodHlwZV9tZW1iZXIsIG9iamVjdF9kZWNsYXJhdGlvbikKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgbGluZXMuYXBwZW5kKCIiIiAgICB7CisgICAgICAgIEluc3BlY3Rv
ck9iamVjdDo6aXRlcmF0b3IgJShtZW1iZXJOYW1lKXNQb3MgPSBvYmplY3QtPmZpbmQoQVNDSUlM
aXRlcmFsKCIlKG1lbWJlck5hbWUpcyIpKTsKKyAgICAgICAgQVNTRVJUKCUobWVtYmVyTmFtZSlz
UG9zICE9IG9iamVjdC0+ZW5kKCkpOworICAgICAgICAlKGFzc2VydE1ldGhvZClzKCUobWVtYmVy
TmFtZSlzUG9zLT52YWx1ZS5nZXQoKSk7CisgICAgfSIiIiAlIGFyZ3MpCisKKyAgICAgICAgaWYg
c2hvdWxkX2NvdW50X3Byb3BlcnRpZXM6CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJycpCisg
ICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBpbnQgZm91bmRQcm9wZXJ0aWVzQ291bnQgPSAl
czsnICUgbGVuKHJlcXVpcmVkX21lbWJlcnMpKQorCisgICAgICAgIGZvciB0eXBlX21lbWJlciBp
biBvcHRpb25hbF9tZW1iZXJzOgorICAgICAgICAgICAgYXJncyA9IHsKKyAgICAgICAgICAgICAg
ICAnbWVtYmVyTmFtZSc6IHR5cGVfbWVtYmVyLm1lbWJlcl9uYW1lLAorICAgICAgICAgICAgICAg
ICdhc3NlcnRNZXRob2QnOiBHZW5lcmF0b3IuYXNzZXJ0aW9uX21ldGhvZF9mb3JfdHlwZV9tZW1i
ZXIodHlwZV9tZW1iZXIsIG9iamVjdF9kZWNsYXJhdGlvbikKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgbGluZXMuYXBwZW5kKCIiIiAgICB7CisgICAgICAgIEluc3BlY3Rvck9iamVjdDo6
aXRlcmF0b3IgJShtZW1iZXJOYW1lKXNQb3MgPSBvYmplY3QtPmZpbmQoQVNDSUlMaXRlcmFsKCIl
KG1lbWJlck5hbWUpcyIpKTsKKyAgICAgICAgaWYgKCUobWVtYmVyTmFtZSlzUG9zICE9IG9iamVj
dC0+ZW5kKCkpIHsKKyAgICAgICAgICAgICUoYXNzZXJ0TWV0aG9kKXMoJShtZW1iZXJOYW1lKXNQ
b3MtPnZhbHVlLmdldCgpKTsiIiIgJSBhcmdzKQorCisgICAgICAgICAgICBpZiBzaG91bGRfY291
bnRfcHJvcGVydGllczoKKyAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgICAg
ICsrZm91bmRQcm9wZXJ0aWVzQ291bnQ7JykKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAg
ICAgICB9JykKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIH0nKQorCisgICAgICAgIGlm
IHNob3VsZF9jb3VudF9wcm9wZXJ0aWVzOgorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAg
aWYgKGZvdW5kUHJvcGVydGllc0NvdW50ICE9IG9iamVjdC0+c2l6ZSgpKScpCisgICAgICAgICAg
ICBsaW5lcy5hcHBlbmQoJyAgICAgICAgRkFUQUwoIlVuZXhwZWN0ZWQgcHJvcGVydGllcyBpbiBv
YmplY3Q6ICVzXFxuIiwgb2JqZWN0LT50b0pTT05TdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSk7JykK
KyAgICAgICAgbGluZXMuYXBwZW5kKCd9JykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcjZW5kaWYg
Ly8gIUFTU0VSVF9ESVNBQkxFRCcpCisgICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCisK
KyAgICBkZWYgX2dlbmVyYXRlX2Fzc2VydGlvbl9mb3JfZW51bShzZWxmLCBlbnVtX21lbWJlciwg
b2JqZWN0X2RlY2xhcmF0aW9uKToKKyAgICAgICAgbGluZXMgPSBbXQorICAgICAgICBsaW5lcy5h
cHBlbmQoJyNpZiAhQVNTRVJUX0RJU0FCTEVEJykKKyAgICAgICAgbGluZXMuYXBwZW5kKCd2b2lk
ICVzKEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUqIHZhbHVlKScgJSBHZW5lcmF0b3IuYXNzZXJ0
aW9uX21ldGhvZF9mb3JfdHlwZV9tZW1iZXIoZW51bV9tZW1iZXIsIG9iamVjdF9kZWNsYXJhdGlv
bikpCisgICAgICAgIGxpbmVzLmFwcGVuZCgneycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAg
IFN0cmluZyBzOycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGJvb2wgY2FzdF9yZXMgPSB2
YWx1ZS0+YXNTdHJpbmcoJnMpOycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIEFTU0VSVChj
YXN0X3Jlcyk7JykKKworICAgICAgICBhc3NlcnRfY29uZGl0aW9uID0gJyB8fCAnLmpvaW4oWydz
ID09ICIlcyInICUgZW51bV92YWx1ZSBmb3IgZW51bV92YWx1ZSBpbiBlbnVtX21lbWJlci50eXBl
LmVudW1fdmFsdWVzKCldKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBBU1NFUlQoJXMpOycg
JSBhc3NlcnRfY29uZGl0aW9uKQorICAgICAgICBsaW5lcy5hcHBlbmQoJ30nKQorICAgICAgICBs
aW5lcy5hcHBlbmQoJyNlbmRpZiAvLyAhQVNTRVJUX0RJU0FCTEVEJykKKworICAgICAgICByZXR1
cm4gJ1xuJy5qb2luKGxpbmVzKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdG9yLnB5IGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdG9yLnB5Cm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ2
OWU0NDhlY2ZkYzQ0ZjM4YzI4MGQ2OGVmYTkwYjVmMDUyN2U1ZWUKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0
b3IucHkKQEAgLTAsMCArMSw0OTYgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5
cmlnaHQgKGMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmln
aHQgKGMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisj
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisj
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisjIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0IGxvZ2dp
bmcKK2ltcG9ydCBvcy5wYXRoCitpbXBvcnQgcmUKK2Zyb20gc3RyaW5nIGltcG9ydCBUZW1wbGF0
ZQorCitmcm9tIGdlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IEdlbmVyYXRvclRlbXBsYXRlcyBh
cyBUZW1wbGF0ZXMKK2Zyb20gbW9kZWxzIGltcG9ydCBQcmltaXRpdmVUeXBlLCBPYmplY3RUeXBl
LCBBcnJheVR5cGUsIEVudW1UeXBlLCBBbGlhc2VkVHlwZQorCitsb2cgPSBsb2dnaW5nLmdldExv
Z2dlcignZ2xvYmFsJykKKworCitkZWYgdWNmaXJzdChzdHIpOgorICAgIHJldHVybiBzdHJbOjFd
LnVwcGVyKCkgKyBzdHJbMTpdCisKK19QUklNSVRJVkVfVE9fQ1BQX05BTUVfTUFQID0geworICAg
ICdib29sZWFuJzogJ2Jvb2wnLAorICAgICdpbnRlZ2VyJzogJ2ludCcsCisgICAgJ251bWJlcic6
ICdkb3VibGUnLAorICAgICdzdHJpbmcnOiAnU3RyaW5nJywKKyAgICAnb2JqZWN0JzogJ0luc3Bl
Y3Rvcjo6SW5zcGVjdG9yT2JqZWN0JywKKyAgICAnYW55JzogJ0luc3BlY3Rvcjo6SW5zcGVjdG9y
VmFsdWUnCit9CisKKyMgRklYTUU6IFRoaXMgc2hvdWxkIGJlIGNvbnZlcnRlZCBpbnRvIGEgcHJv
cGVydHkgb24gdGhlIGRvbWFpbiBpbiBKU09OLgorX0RPTUFJTl9UT19DUFBfR1VBUkRfTUFQID0g
eworICAgICdEYXRhYmFzZSc6ICJFTkFCTEUoU1FMX0RBVEFCQVNFKSIsCisgICAgJ0luZGV4ZWRE
Qic6ICJFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkiLAorICAgICdSZXBsYXknOiAiRU5BQkxFKFdF
Ql9SRVBMQVkpIiwKK30KKworX0FMV0FZU19VUFBFUkNBU0VEX0VOVU1fVkFMVUVfU1VCU1RSSU5H
UyA9IHNldChbJ0FQSScsICdDU1MnLCAnRE9NJywgJ0hUTUwnLCAnWEhSJywgJ1hNTCddKQorCisj
IFRoZXNlIG9iamVjdHMgYXJlIGJ1aWx0IG1hbnVhbGx5IGJ5IGNyZWF0aW5nIGFuZCBzZXR0aW5n
IEluc3BlY3RvclZhbHVlcy4KKyMgQmVmb3JlIHNlbmRpbmcgdGhlc2Ugb3ZlciB0aGUgcHJvdG9j
b2wsIHRoZWlyIHNoYXBlcyBhcmUgY2hlY2tlZCBhZ2FpbnN0IHRoZSBzcGVjaWZpY2F0aW9uLgor
IyBTbywgYW55IHR5cGVzIHJlZmVyZW5jZWQgYnkgdGhlc2UgdHlwZXMgcmVxdWlyZSBkZWJ1Zy1v
bmx5IGFzc2VydGlvbnMgdGhhdCBjaGVjayB2YWx1ZXMuCisjIENhbGN1bGF0aW5nIG5lY2Vzc2Fy
eSBhc3NlcnRpb25zIGlzIGFubm95aW5nLCBhbmQgYWRkcyBhIGxvdCBvZiBjb21wbGV4aXR5IHRv
IHRoZSBnZW5lcmF0b3IuCisKKyMgRklYTUU6IFRoaXMgc2hvdWxkIGJlIGNvbnZlcnRlZCBpbnRv
IGEgcHJvcGVydHkgaW4gSlNPTi4KK19UWVBFU19ORUVESU5HX1JVTlRJTUVfQ0FTVFMgPSBzZXQo
WworICAgICJSdW50aW1lLlJlbW90ZU9iamVjdCIsCisgICAgIlJ1bnRpbWUuUHJvcGVydHlEZXNj
cmlwdG9yIiwKKyAgICAiUnVudGltZS5JbnRlcm5hbFByb3BlcnR5RGVzY3JpcHRvciIsCisgICAg
IkRlYnVnZ2VyLkZ1bmN0aW9uRGV0YWlscyIsCisgICAgIkRlYnVnZ2VyLkNhbGxGcmFtZSIsCisg
ICAgIkNhbnZhcy5UcmFjZUxvZyIsCisgICAgIkNhbnZhcy5SZXNvdXJjZUluZm8iLAorICAgICJD
YW52YXMuUmVzb3VyY2VTdGF0ZSIsCisgICAgIyBUaGlzIHNob3VsZCBiZSBhIHRlbXBvcmFyeSBo
YWNrLiBUaW1lbGluZUV2ZW50IHNob3VsZCBiZSBjcmVhdGVkIHZpYSBnZW5lcmF0ZWQgQysrIEFQ
SS4KKyAgICAiVGltZWxpbmUuVGltZWxpbmVFdmVudCIsCisgICAgIyBGb3IgdGVzdGluZyBwdXJw
b3NlcyBvbmx5LgorICAgICJUZXN0LlR5cGVOZWVkaW5nQ2FzdCIKK10pCisKKyMgRklYTUU6IFRo
aXMgc2hvdWxkIGJlIGNvbnZlcnRlZCBpbnRvIGEgcHJvcGVydHkgaW4gSlNPTi4KK19UWVBFU19X
SVRIX09QRU5fRklFTERTID0gc2V0KFsKKyAgICAiVGltZWxpbmUuVGltZWxpbmVFdmVudCIsCisg
ICAgIyBJbnNwZWN0b3JTdHlsZVNoZWV0IG5vdCBvbmx5IGNyZWF0ZXMgdGhpcyBwcm9wZXJ0eSBi
dXQgd2FudHMgdG8gcmVhZCBpdCBhbmQgbW9kaWZ5IGl0LgorICAgICJDU1MuQ1NTUHJvcGVydHki
LAorICAgICMgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudCBuZWVkcyB0byB1cGRhdGUgbWltZS10eXBl
LgorICAgICJOZXR3b3JrLlJlc3BvbnNlIiwKKyAgICAjIEZvciB0ZXN0aW5nIHB1cnBvc2VzIG9u
bHkuCisgICAgIlRlc3QuT3BlblBhcmFtZXRlckJ1bmRsZSIKK10pCisKKworY2xhc3MgR2VuZXJh
dG9yOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpOgorICAg
ICAgICBzZWxmLl9tb2RlbCA9IG1vZGVsCisgICAgICAgIHNlbGYuX2lucHV0X2ZpbGVwYXRoID0g
aW5wdXRfZmlsZXBhdGgKKworICAgIGRlZiBtb2RlbChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNl
bGYuX21vZGVsCisKKyAgICBkZWYgZ2VuZXJhdGVfbGljZW5zZShzZWxmKToKKyAgICAgICAgcmV0
dXJuIFRlbXBsYXRlKFRlbXBsYXRlcy5Db3B5cmlnaHRCbG9jaykuc3Vic3RpdHV0ZShOb25lLCBp
bnB1dEZpbGVuYW1lPW9zLnBhdGguYmFzZW5hbWUoc2VsZi5faW5wdXRfZmlsZXBhdGgpKQorCisg
ICAgIyBUaGVzZSBtZXRob2RzIGFyZSBvdmVycmlkZGVuIGJ5IHN1YmNsYXNzZXMuCisgICAgZGVm
IGRvbWFpbnNfdG9fZ2VuZXJhdGUoc2VsZik6CisgICAgICAgIHJldHVybiBmaWx0ZXIobGFtYmRh
IGRvbWFpbjogbm90IGRvbWFpbi5pc19zdXBwbGVtZW50YWwsIHNlbGYubW9kZWwoKS5kb21haW5z
KQorCisgICAgZGVmIGdlbmVyYXRlX291dHB1dChzZWxmKToKKyAgICAgICAgcGFzcworCisgICAg
ZGVmIG91dHB1dF9maWxlbmFtZShzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIGVuY29k
aW5nX2Zvcl9lbnVtX3ZhbHVlKHNlbGYsIGVudW1fdmFsdWUpOgorICAgICAgICBpZiBub3QgaGFz
YXR0cihzZWxmLCAiX2Fzc2lnbmVkX2VudW1fdmFsdWVzIik6CisgICAgICAgICAgICBzZWxmLl90
cmF2ZXJzZV9hbmRfYXNzaWduX2VudW1fdmFsdWVzKCkKKworICAgICAgICByZXR1cm4gc2VsZi5f
ZW51bV92YWx1ZV9lbmNvZGluZ3NbZW51bV92YWx1ZV0KKworICAgIGRlZiBhc3NpZ25lZF9lbnVt
X3ZhbHVlcyhzZWxmKToKKyAgICAgICAgaWYgbm90IGhhc2F0dHIoc2VsZiwgIl9hc3NpZ25lZF9l
bnVtX3ZhbHVlcyIpOgorICAgICAgICAgICAgc2VsZi5fdHJhdmVyc2VfYW5kX2Fzc2lnbl9lbnVt
X3ZhbHVlcygpCisKKyAgICAgICAgcmV0dXJuIHNlbGYuX2Fzc2lnbmVkX2VudW1fdmFsdWVzWzpd
ICAjIFNsaWNlLgorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiB0eXBlX25lZWRzX3J1bnRp
bWVfY2FzdHMoX3R5cGUpOgorICAgICAgICByZXR1cm4gX3R5cGUucXVhbGlmaWVkX25hbWUoKSBp
biBfVFlQRVNfTkVFRElOR19SVU5USU1FX0NBU1RTCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAg
ZGVmIHR5cGVfaGFzX29wZW5fZmllbGRzKF90eXBlKToKKyAgICAgICAgcmV0dXJuIF90eXBlLnF1
YWxpZmllZF9uYW1lKCkgaW4gX1RZUEVTX1dJVEhfT1BFTl9GSUVMRFMKKworICAgIGRlZiB0eXBl
X25lZWRzX3NoYXBlX2Fzc2VydGlvbnMoc2VsZiwgX3R5cGUpOgorICAgICAgICBpZiBub3QgaGFz
YXR0cihzZWxmLCAiX3R5cGVzX25lZWRpbmdfc2hhcGVfYXNzZXJ0aW9ucyIpOgorICAgICAgICAg
ICAgc2VsZi5jYWxjdWxhdGVfdHlwZXNfcmVxdWlyaW5nX3NoYXBlX2Fzc2VydGlvbnMoc2VsZi5t
b2RlbCgpLmRvbWFpbnMpCisKKyAgICAgICAgcmV0dXJuIF90eXBlIGluIHNlbGYuX3R5cGVzX25l
ZWRpbmdfc2hhcGVfYXNzZXJ0aW9ucworCisgICAgIyBUbyByZXN0cmljdCB0aGUgZG9tYWlucyBv
dmVyIHdoaWNoIHdlIGNvbXB1dGUgdHlwZXMgbmVlZGluZyBhc3NlcnRpb25zLCBjYWxsIHRoaXMg
bWV0aG9kCisgICAgIyBiZWZvcmUgZ2VuZXJhdGluZyBhbnkgb3V0cHV0IHdpdGggdGhlIGRlc2ly
ZWQgZG9tYWlucyBwYXJhbWV0ZXIuIFRoZSBjb21wdXRlZAorICAgICMgc2V0IG9mIHR5cGVzIHdp
bGwgbm90IGJlIGF1dG9tYXRpY2FsbHkgcmVnZW5lcmF0ZWQgb24gc3Vic2VxdWVudCBjYWxscyB0
bworICAgICMgR2VuZXJhdG9yLnR5cGVzX25lZWRpbmdfc2hhcGVfYXNzZXJ0aW9ucygpLgorICAg
IGRlZiBjYWxjdWxhdGVfdHlwZXNfcmVxdWlyaW5nX3NoYXBlX2Fzc2VydGlvbnMoc2VsZiwgZG9t
YWlucyk6CisgICAgICAgIGRvbWFpbl9uYW1lcyA9IG1hcChsYW1iZGEgZG9tYWluOiBkb21haW4u
ZG9tYWluX25hbWUsIGRvbWFpbnMpCisgICAgICAgIGxvZy5kZWJ1ZygiPiBDYWxjdWxhdGluZyB0
eXBlcyB0aGF0IG5lZWQgc2hhcGUgYXNzZXJ0aW9ucyAoZWxpZ2libGUgZG9tYWluczogJXMpIiAl
ICIsICIuam9pbihkb21haW5fbmFtZXMpKQorCisgICAgICAgICMgTXV0YXRlcyB0aGUgcGFzc2Vk
LWluIHNldDsgdGhpcyBzaW1wbGlmaWVzIGNoZWNrcyB0byBwcmV2ZW50IGluZmluaXRlIHJlY3Vy
c2lvbi4KKyAgICAgICAgZGVmIGdhdGhlcl90cmFuc2l0aXZlbHlfcmVmZXJlbmNlZF90eXBlcyhf
dHlwZSwgZ2F0aGVyZWRfdHlwZXMpOgorICAgICAgICAgICAgaWYgX3R5cGUgaW4gZ2F0aGVyZWRf
dHlwZXM6CisgICAgICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgICAgIGlmIGlzaW5zdGFu
Y2UoX3R5cGUsIE9iamVjdFR5cGUpOgorICAgICAgICAgICAgICAgIGxvZy5kZWJ1ZygiPiBBZGRp
bmcgdHlwZSAlcyB0byBsaXN0IG9mIHR5cGVzIG5lZWRpbmcgc2hhcGUgYXNzZXJ0aW9ucy4iICUg
X3R5cGUucXVhbGlmaWVkX25hbWUoKSkKKyAgICAgICAgICAgICAgICBnYXRoZXJlZF90eXBlcy5h
ZGQoX3R5cGUpCisgICAgICAgICAgICAgICAgZm9yIHR5cGVfbWVtYmVyIGluIF90eXBlLm1lbWJl
cnM6CisgICAgICAgICAgICAgICAgICAgIGdhdGhlcl90cmFuc2l0aXZlbHlfcmVmZXJlbmNlZF90
eXBlcyh0eXBlX21lbWJlci50eXBlLCBnYXRoZXJlZF90eXBlcykKKyAgICAgICAgICAgIGVsaWYg
aXNpbnN0YW5jZShfdHlwZSwgRW51bVR5cGUpOgorICAgICAgICAgICAgICAgIGxvZy5kZWJ1Zygi
PiBBZGRpbmcgdHlwZSAlcyB0byBsaXN0IG9mIHR5cGVzIG5lZWRpbmcgc2hhcGUgYXNzZXJ0aW9u
cy4iICUgX3R5cGUucXVhbGlmaWVkX25hbWUoKSkKKyAgICAgICAgICAgICAgICBnYXRoZXJlZF90
eXBlcy5hZGQoX3R5cGUpCisgICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2UoX3R5cGUsIEFsaWFz
ZWRUeXBlKToKKyAgICAgICAgICAgICAgICBnYXRoZXJfdHJhbnNpdGl2ZWx5X3JlZmVyZW5jZWRf
dHlwZXMoX3R5cGUuYWxpYXNlZF90eXBlLCBnYXRoZXJlZF90eXBlcykKKyAgICAgICAgICAgIGVs
aWYgaXNpbnN0YW5jZShfdHlwZSwgQXJyYXlUeXBlKToKKyAgICAgICAgICAgICAgICBnYXRoZXJf
dHJhbnNpdGl2ZWx5X3JlZmVyZW5jZWRfdHlwZXMoX3R5cGUuZWxlbWVudF90eXBlLCBnYXRoZXJl
ZF90eXBlcykKKworICAgICAgICBmb3VuZF90eXBlcyA9IHNldCgpCisgICAgICAgIGZvciBkb21h
aW4gaW4gZG9tYWluczoKKyAgICAgICAgICAgIGZvciBkZWNsYXJhdGlvbiBpbiBkb21haW4udHlw
ZV9kZWNsYXJhdGlvbnM6CisgICAgICAgICAgICAgICAgaWYgZGVjbGFyYXRpb24udHlwZS5xdWFs
aWZpZWRfbmFtZSgpIGluIF9UWVBFU19ORUVESU5HX1JVTlRJTUVfQ0FTVFM6CisgICAgICAgICAg
ICAgICAgICAgIGxvZy5kZWJ1ZygiPiBHYXRoZXJpbmcgdHlwZXMgcmVmZXJlbmNlZCBieSAlcyB0
byBnZW5lcmF0ZSBzaGFwZSBhc3NlcnRpb25zLiIgJSBkZWNsYXJhdGlvbi50eXBlLnF1YWxpZmll
ZF9uYW1lKCkpCisgICAgICAgICAgICAgICAgICAgIGdhdGhlcl90cmFuc2l0aXZlbHlfcmVmZXJl
bmNlZF90eXBlcyhkZWNsYXJhdGlvbi50eXBlLCBmb3VuZF90eXBlcykKKworICAgICAgICBzZWxm
Ll90eXBlc19uZWVkaW5nX3NoYXBlX2Fzc2VydGlvbnMgPSBmb3VuZF90eXBlcworCisgICAgIyBQ
cml2YXRlIGhlbHBlciBpbnN0YW5jZSBtZXRob2RzLgorICAgIGRlZiBfdHJhdmVyc2VfYW5kX2Fz
c2lnbl9lbnVtX3ZhbHVlcyhzZWxmKToKKyAgICAgICAgc2VsZi5fZW51bV92YWx1ZV9lbmNvZGlu
Z3MgPSB7fQorICAgICAgICBzZWxmLl9hc3NpZ25lZF9lbnVtX3ZhbHVlcyA9IFtdCisgICAgICAg
IGFsbF90eXBlcyA9IFtdCisKKyAgICAgICAgZG9tYWlucyA9IHNlbGYuZG9tYWluc190b19nZW5l
cmF0ZSgpCisKKyAgICAgICAgZm9yIGRvbWFpbiBpbiBkb21haW5zOgorICAgICAgICAgICAgZm9y
IHR5cGVfZGVjbGFyYXRpb24gaW4gZG9tYWluLnR5cGVfZGVjbGFyYXRpb25zOgorICAgICAgICAg
ICAgICAgIGFsbF90eXBlcy5hcHBlbmQodHlwZV9kZWNsYXJhdGlvbi50eXBlKQorICAgICAgICAg
ICAgICAgIGZvciB0eXBlX21lbWJlciBpbiB0eXBlX2RlY2xhcmF0aW9uLnR5cGVfbWVtYmVyczoK
KyAgICAgICAgICAgICAgICAgICAgYWxsX3R5cGVzLmFwcGVuZCh0eXBlX21lbWJlci50eXBlKQor
CisgICAgICAgIGZvciBkb21haW4gaW4gZG9tYWluczoKKyAgICAgICAgICAgIGZvciBldmVudCBp
biBkb21haW4uZXZlbnRzOgorICAgICAgICAgICAgICAgIGFsbF90eXBlcy5leHRlbmQoW3BhcmFt
ZXRlci50eXBlIGZvciBwYXJhbWV0ZXIgaW4gZXZlbnQuZXZlbnRfcGFyYW1ldGVyc10pCisKKyAg
ICAgICAgZm9yIGRvbWFpbiBpbiBkb21haW5zOgorICAgICAgICAgICAgZm9yIGNvbW1hbmQgaW4g
ZG9tYWluLmNvbW1hbmRzOgorICAgICAgICAgICAgICAgIGFsbF90eXBlcy5leHRlbmQoW3BhcmFt
ZXRlci50eXBlIGZvciBwYXJhbWV0ZXIgaW4gY29tbWFuZC5jYWxsX3BhcmFtZXRlcnNdKQorICAg
ICAgICAgICAgICAgIGFsbF90eXBlcy5leHRlbmQoW3BhcmFtZXRlci50eXBlIGZvciBwYXJhbWV0
ZXIgaW4gY29tbWFuZC5yZXR1cm5fcGFyYW1ldGVyc10pCisKKyAgICAgICAgZm9yIF90eXBlIGlu
IGFsbF90eXBlczoKKyAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKF90eXBlLCBFbnVtVHlw
ZSk6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIG1hcChzZWxmLl9hc3Np
Z25fZW5jb2RpbmdfZm9yX2VudW1fdmFsdWUsIF90eXBlLmVudW1fdmFsdWVzKCkpCisKKyAgICBk
ZWYgX2Fzc2lnbl9lbmNvZGluZ19mb3JfZW51bV92YWx1ZShzZWxmLCBlbnVtX3ZhbHVlKToKKyAg
ICAgICAgaWYgZW51bV92YWx1ZSBpbiBzZWxmLl9lbnVtX3ZhbHVlX2VuY29kaW5nczoKKyAgICAg
ICAgICAgIHJldHVybgorCisgICAgICAgIHNlbGYuX2VudW1fdmFsdWVfZW5jb2RpbmdzW2VudW1f
dmFsdWVdID0gbGVuKHNlbGYuX2Fzc2lnbmVkX2VudW1fdmFsdWVzKQorICAgICAgICBzZWxmLl9h
c3NpZ25lZF9lbnVtX3ZhbHVlcy5hcHBlbmQoZW51bV92YWx1ZSkKKworICAgICMgTWlzY2VsbGFu
ZW91cyB0ZXh0IG1hbmlwdWxhdGlvbiByb3V0aW5lcy4KKyAgICBAc3RhdGljbWV0aG9kCisgICAg
ZGVmIHdyYXBfd2l0aF9ndWFyZF9mb3JfZG9tYWluKGRvbWFpbiwgdGV4dCk6CisgICAgICAgIGd1
YXJkID0gX0RPTUFJTl9UT19DUFBfR1VBUkRfTUFQLmdldChkb21haW4uZG9tYWluX25hbWUpCisg
ICAgICAgIGlmIGd1YXJkIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgbGluZXMgPSBbCisgICAg
ICAgICAgICAgICAgJyNpZiAlcycgJSBndWFyZCwKKyAgICAgICAgICAgICAgICB0ZXh0LAorICAg
ICAgICAgICAgICAgICcjZW5kaWYgLy8gJXMnICUgZ3VhcmQKKyAgICAgICAgICAgICAgICBdCisg
ICAgICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQorICAgICAgICBlbHNlOgorICAgICAg
ICAgICAgcmV0dXJuIHRleHQKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgc3R5bGl6ZWRf
bmFtZV9mb3JfZW51bV92YWx1ZShlbnVtX3ZhbHVlKToKKyAgICAgICAgcmVnZXggPSAnKCVzKScg
JSAifCIuam9pbihfQUxXQVlTX1VQUEVSQ0FTRURfRU5VTV9WQUxVRV9TVUJTVFJJTkdTKQorCisg
ICAgICAgIGRlZiByZXBsYWNlQ2FsbGJhY2sobWF0Y2gpOgorICAgICAgICAgICAgcmV0dXJuIG1h
dGNoLmdyb3VwKDEpLnVwcGVyKCkKKworICAgICAgICAjIFNwbGl0IG9uIGh5cGhlbiwgaW50cm9k
dWNlIGNhbWVsY2FzZSwgYW5kIGZvcmNlIHVwcGVyY2FzaW5nIG9mIGFjcm9ueW1zLgorICAgICAg
ICBzdWJ3b3JkcyA9IG1hcCh1Y2ZpcnN0LCBlbnVtX3ZhbHVlLnNwbGl0KCctJykpCisgICAgICAg
IHJldHVybiByZS5zdWIocmVnZXgsIHJlcGxhY2VDYWxsYmFjaywgIiIuam9pbihzdWJ3b3Jkcyks
IGZsYWdzPXJlLklHTk9SRUNBU0UpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGtleWVk
X2dldF9tZXRob2RfZm9yX3R5cGUoX3R5cGUpOgorICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBl
LCBPYmplY3RUeXBlKToKKyAgICAgICAgICAgIHJldHVybiAnZ2V0T2JqZWN0JworICAgICAgICBp
ZiBpc2luc3RhbmNlKF90eXBlLCBBcnJheVR5cGUpOgorICAgICAgICAgICAgcmV0dXJuICdnZXRB
cnJheScKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgUHJpbWl0aXZlVHlwZSk6CisgICAg
ICAgICAgICBpZiBfdHlwZS5yYXdfbmFtZSgpIGlzICdpbnRlZ2VyJzoKKyAgICAgICAgICAgICAg
ICByZXR1cm4gJ2dldEludCcKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0
dXJuICdnZXQnICsgdWNmaXJzdChfdHlwZS5yYXdfbmFtZSgpKQorICAgICAgICBpZiBpc2luc3Rh
bmNlKF90eXBlLCBBbGlhc2VkVHlwZSk6CisgICAgICAgICAgICByZXR1cm4gR2VuZXJhdG9yLmtl
eWVkX2dldF9tZXRob2RfZm9yX3R5cGUoX3R5cGUuYWxpYXNlZF90eXBlKQorICAgICAgICBpZiBp
c2luc3RhbmNlKF90eXBlLCBFbnVtVHlwZSk6CisgICAgICAgICAgICByZXR1cm4gR2VuZXJhdG9y
LmtleWVkX2dldF9tZXRob2RfZm9yX3R5cGUoX3R5cGUucHJpbWl0aXZlX3R5cGUpCisKKyAgICBA
c3RhdGljbWV0aG9kCisgICAgZGVmIGtleWVkX3NldF9tZXRob2RfZm9yX3R5cGUoX3R5cGUpOgor
ICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBPYmplY3RUeXBlKToKKyAgICAgICAgICAgIHJl
dHVybiAnc2V0T2JqZWN0JworICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBBcnJheVR5cGUp
OgorICAgICAgICAgICAgcmV0dXJuICdzZXRBcnJheScKKyAgICAgICAgaWYgaXNpbnN0YW5jZShf
dHlwZSwgUHJpbWl0aXZlVHlwZSk6CisgICAgICAgICAgICBpZiBfdHlwZS5yYXdfbmFtZSgpIGlu
IFsnaW50ZWdlcicsICdudW1iZXInXToKKyAgICAgICAgICAgICAgICByZXR1cm4gJ3NldE51bWJl
cicKKyAgICAgICAgICAgIGVsaWYgX3R5cGUucmF3X25hbWUoKSBpbiBbJ2FueSddOgorICAgICAg
ICAgICAgICAgIHJldHVybiAnc2V0VmFsdWUnCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAg
ICAgICAgIHJldHVybiAnc2V0JyArIHVjZmlyc3QoX3R5cGUucmF3X25hbWUoKSkKKyAgICAgICAg
aWYgaXNpbnN0YW5jZShfdHlwZSwgQWxpYXNlZFR5cGUpOgorICAgICAgICAgICAgcmV0dXJuIEdl
bmVyYXRvci5rZXllZF9zZXRfbWV0aG9kX2Zvcl90eXBlKF90eXBlLmFsaWFzZWRfdHlwZSkKKyAg
ICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgRW51bVR5cGUpOgorICAgICAgICAgICAgcmV0dXJu
IEdlbmVyYXRvci5rZXllZF9zZXRfbWV0aG9kX2Zvcl90eXBlKF90eXBlLnByaW1pdGl2ZV90eXBl
KQorCisgICAgIyBHZW5lcmF0ZSB0eXBlIHJlcHJlc2VudGF0aW9ucyBmb3IgdmFyaW91cyBzaXR1
YXRpb25zLgorICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgdHlwZV9idWlsZGVyX3N0cmluZ19m
b3JfdHlwZShfdHlwZSk6CisgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIE9iamVjdFR5cGUp
IGFuZCBsZW4oX3R5cGUubWVtYmVycykgPT0gMDoKKyAgICAgICAgICAgIHJldHVybiAnSW5zcGVj
dG9yOjpJbnNwZWN0b3JPYmplY3QnCisgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIChPYmpl
Y3RUeXBlLCBBbGlhc2VkVHlwZSwgRW51bVR5cGUpKToKKyAgICAgICAgICAgIHJldHVybiAnSW5z
cGVjdG9yOjpUeXBlQnVpbGRlcjo6JXM6OiVzJyAlIChfdHlwZS50eXBlX2RvbWFpbigpLmRvbWFp
bl9uYW1lLCBfdHlwZS5yYXdfbmFtZSgpKQorICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBB
cnJheVR5cGUpOgorICAgICAgICAgICAgcmV0dXJuICdJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpB
cnJheTwlcz4nICUgR2VuZXJhdG9yLnR5cGVfYnVpbGRlcl9zdHJpbmdfZm9yX3R5cGUoX3R5cGUu
ZWxlbWVudF90eXBlKQorICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBQcmltaXRpdmVUeXBl
KToKKyAgICAgICAgICAgIHJldHVybiBHZW5lcmF0b3IuY3BwX25hbWVfZm9yX3ByaW1pdGl2ZV90
eXBlKF90eXBlKQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiB0eXBlX2J1aWxkZXJfc3Ry
aW5nX2Zvcl90eXBlX21lbWJlcih0eXBlX21lbWJlciwgb2JqZWN0X2RlY2xhcmF0aW9uKToKKyAg
ICAgICAgaWYgaXNpbnN0YW5jZSh0eXBlX21lbWJlci50eXBlLCBFbnVtVHlwZSkgYW5kIHR5cGVf
bWVtYmVyLnR5cGUuaXNfYW5vbnltb3VzOgorICAgICAgICAgICAgcmV0dXJuICc6Oicuam9pbihb
R2VuZXJhdG9yLnR5cGVfYnVpbGRlcl9zdHJpbmdfZm9yX3R5cGUob2JqZWN0X2RlY2xhcmF0aW9u
LnR5cGUpLCB1Y2ZpcnN0KHR5cGVfbWVtYmVyLm1lbWJlcl9uYW1lKV0pCisgICAgICAgIGVsc2U6
CisgICAgICAgICAgICByZXR1cm4gR2VuZXJhdG9yLnR5cGVfYnVpbGRlcl9zdHJpbmdfZm9yX3R5
cGUodHlwZV9tZW1iZXIudHlwZSkKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgdHlwZV9z
dHJpbmdfZm9yX3VuY2hlY2tlZF9mb3JtYWxfaW5fcGFyYW1ldGVyKHBhcmFtZXRlcik6CisgICAg
ICAgIF90eXBlID0gcGFyYW1ldGVyLnR5cGUKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwg
QWxpYXNlZFR5cGUpOgorICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5hbGlhc2VkX3R5cGUgICMg
RmFsbCB0aHJvdWdoIHRvIGVudW0gb3IgcHJpbWl0aXZlLgorCisgICAgICAgIGlmIGlzaW5zdGFu
Y2UoX3R5cGUsIEVudW1UeXBlKToKKyAgICAgICAgICAgIF90eXBlID0gX3R5cGUucHJpbWl0aXZl
X3R5cGUgICMgRmFsbCB0aHJvdWdoIHRvIHByaW1pdGl2ZS4KKworICAgICAgICBzaWdpbCA9ICcq
JyBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwgZWxzZSAnJicKKyAgICAgICAgIyBUaGlzIGhhbmRs
ZXMgdGhlICdhbnknIHR5cGUgYW5kIG9iamVjdHMgd2l0aCBkZWZpbmVkIHByb3BlcnRpZXMuCisg
ICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIE9iamVjdFR5cGUpIG9yIF90eXBlLnF1YWxpZmll
ZF9uYW1lKCkgaXMgJ29iamVjdCc6CisgICAgICAgICAgICByZXR1cm4gJ2NvbnN0IFJlZlB0cjxJ
bnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4nICsgc2lnaWwKKyAgICAgICAgaWYgaXNpbnN0YW5j
ZShfdHlwZSwgQXJyYXlUeXBlKToKKyAgICAgICAgICAgIHJldHVybiAnY29uc3QgUmVmUHRyPElu
c3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXk+JyArIHNpZ2lsCisgICAgICAgIGlmIGlzaW5zdGFuY2Uo
X3R5cGUsIFByaW1pdGl2ZVR5cGUpOgorICAgICAgICAgICAgY3BwX25hbWUgPSBHZW5lcmF0b3Iu
Y3BwX25hbWVfZm9yX3ByaW1pdGl2ZV90eXBlKF90eXBlKQorICAgICAgICAgICAgaWYgcGFyYW1l
dGVyLmlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAgIHJldHVybiAnY29uc3QgJXMqJyAlIGNw
cF9uYW1lCisgICAgICAgICAgICBlbGlmIF90eXBlLnJhd19uYW1lKCkgaW4gWydzdHJpbmcnXToK
KyAgICAgICAgICAgICAgICByZXR1cm4gJ2NvbnN0ICVzJicgJSBjcHBfbmFtZQorICAgICAgICAg
ICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gY3BwX25hbWUKKworICAgICAgICByZXR1
cm4gInVua25vd25fdW5jaGVja2VkX2Zvcm1hbF9pbl9wYXJhbWV0ZXJfdHlwZSIKKworICAgIEBz
dGF0aWNtZXRob2QKKyAgICBkZWYgdHlwZV9zdHJpbmdfZm9yX2NoZWNrZWRfZm9ybWFsX2V2ZW50
X3BhcmFtZXRlcihwYXJhbWV0ZXIpOgorICAgICAgICByZXR1cm4gR2VuZXJhdG9yLnR5cGVfc3Ry
aW5nX2Zvcl90eXBlX3dpdGhfbmFtZShwYXJhbWV0ZXIudHlwZSwgcGFyYW1ldGVyLnBhcmFtZXRl
cl9uYW1lLCBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAg
ZGVmIHR5cGVfc3RyaW5nX2Zvcl90eXBlX21lbWJlcihtZW1iZXIpOgorICAgICAgICByZXR1cm4g
R2VuZXJhdG9yLnR5cGVfc3RyaW5nX2Zvcl90eXBlX3dpdGhfbmFtZShtZW1iZXIudHlwZSwgbWVt
YmVyLm1lbWJlcl9uYW1lLCBGYWxzZSkKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgdHlw
ZV9zdHJpbmdfZm9yX3R5cGVfd2l0aF9uYW1lKF90eXBlLCB0eXBlX25hbWUsIGlzX29wdGlvbmFs
KToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgKEFycmF5VHlwZSwgT2JqZWN0VHlwZSkp
OgorICAgICAgICAgICAgcmV0dXJuICdQYXNzUmVmUHRyPCVzPicgJSBHZW5lcmF0b3IudHlwZV9i
dWlsZGVyX3N0cmluZ19mb3JfdHlwZShfdHlwZSkKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlw
ZSwgQWxpYXNlZFR5cGUpOgorICAgICAgICAgICAgYnVpbGRlcl90eXBlID0gR2VuZXJhdG9yLnR5
cGVfYnVpbGRlcl9zdHJpbmdfZm9yX3R5cGUoX3R5cGUpCisgICAgICAgICAgICBpZiBpc19vcHRp
b25hbDoKKyAgICAgICAgICAgICAgICByZXR1cm4gJ2NvbnN0ICVzKiBjb25zdCcgJSBidWlsZGVy
X3R5cGUKKyAgICAgICAgICAgIGVsaWYgX3R5cGUuYWxpYXNlZF90eXBlLnF1YWxpZmllZF9uYW1l
KCkgaW4gWydpbnRlZ2VyJywgJ251bWJlciddOgorICAgICAgICAgICAgICAgIHJldHVybiBHZW5l
cmF0b3IuY3BwX25hbWVfZm9yX3ByaW1pdGl2ZV90eXBlKF90eXBlLmFsaWFzZWRfdHlwZSkKKyAg
ICAgICAgICAgIGVsaWYgX3R5cGUuYWxpYXNlZF90eXBlLnF1YWxpZmllZF9uYW1lKCkgaW4gWydz
dHJpbmcnXToKKyAgICAgICAgICAgICAgICByZXR1cm4gJ2NvbnN0ICVzJicgJSBidWlsZGVyX3R5
cGUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIGJ1aWxkZXJfdHlw
ZQorICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBQcmltaXRpdmVUeXBlKToKKyAgICAgICAg
ICAgIGNwcF9uYW1lID0gR2VuZXJhdG9yLmNwcF9uYW1lX2Zvcl9wcmltaXRpdmVfdHlwZShfdHlw
ZSkKKyAgICAgICAgICAgIGlmIF90eXBlLnF1YWxpZmllZF9uYW1lKCkgaW4gWydvYmplY3QnXToK
KyAgICAgICAgICAgICAgICByZXR1cm4gJ1Bhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JP
YmplY3Q+JworICAgICAgICAgICAgZWxpZiBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpIGluIFsnYW55
J106CisgICAgICAgICAgICAgICAgcmV0dXJuICdQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVj
dG9yVmFsdWU+JworICAgICAgICAgICAgZWxpZiBpc19vcHRpb25hbDoKKyAgICAgICAgICAgICAg
ICByZXR1cm4gJ2NvbnN0ICVzKiBjb25zdCcgJSBjcHBfbmFtZQorICAgICAgICAgICAgZWxpZiBf
dHlwZS5xdWFsaWZpZWRfbmFtZSgpIGluIFsnc3RyaW5nJ106CisgICAgICAgICAgICAgICAgcmV0
dXJuICdjb25zdCAlcyYnICUgY3BwX25hbWUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGNwcF9uYW1lCisgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEVudW1U
eXBlKToKKyAgICAgICAgICAgIGlmIF90eXBlLmlzX2Fub255bW91czoKKyAgICAgICAgICAgICAg
ICBlbnVtX3R5cGVfbmFtZSA9IHVjZmlyc3QodHlwZV9uYW1lKQorICAgICAgICAgICAgZWxzZToK
KyAgICAgICAgICAgICAgICBlbnVtX3R5cGVfbmFtZSA9ICdJbnNwZWN0b3I6OlR5cGVCdWlsZGVy
Ojolczo6JXMnICUgKF90eXBlLnR5cGVfZG9tYWluKCkuZG9tYWluX25hbWUsIF90eXBlLnJhd19u
YW1lKCkpCisKKyAgICAgICAgICAgIGlmIGlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAgIHJl
dHVybiAnJXMqJyAlIGVudW1fdHlwZV9uYW1lCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAg
ICAgICAgIHJldHVybiAnJXMnICUgZW51bV90eXBlX25hbWUKKworICAgIEBzdGF0aWNtZXRob2QK
KyAgICBkZWYgdHlwZV9zdHJpbmdfZm9yX2Zvcm1hbF9vdXRfcGFyYW1ldGVyKHBhcmFtZXRlcik6
CisgICAgICAgIF90eXBlID0gcGFyYW1ldGVyLnR5cGUKKworICAgICAgICBpZiBpc2luc3RhbmNl
KF90eXBlLCBBbGlhc2VkVHlwZSk6CisgICAgICAgICAgICBfdHlwZSA9IF90eXBlLmFsaWFzZWRf
dHlwZSAgIyBGYWxsIHRocm91Z2guCisKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgKE9i
amVjdFR5cGUsIEFycmF5VHlwZSkpOgorICAgICAgICAgICAgcmV0dXJuICdSZWZQdHI8JXM+Jicg
JSBHZW5lcmF0b3IudHlwZV9idWlsZGVyX3N0cmluZ19mb3JfdHlwZShfdHlwZSkKKyAgICAgICAg
aWYgaXNpbnN0YW5jZShfdHlwZSwgUHJpbWl0aXZlVHlwZSk6CisgICAgICAgICAgICBjcHBfbmFt
ZSA9IEdlbmVyYXRvci5jcHBfbmFtZV9mb3JfcHJpbWl0aXZlX3R5cGUoX3R5cGUpCisgICAgICAg
ICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6CisgICAgICAgICAgICAgICAgcmV0dXJuICJJ
bnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8JXM+KiIgJSBjcHBfbmFtZQorICAgICAg
ICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gJyVzKicgJSBjcHBfbmFtZQorICAg
ICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBFbnVtVHlwZSk6CisgICAgICAgICAgICBpZiBfdHlw
ZS5pc19hbm9ueW1vdXM6CisgICAgICAgICAgICAgICAgcmV0dXJuICdJbnNwZWN0b3Ilc0JhY2tl
bmREaXNwYXRjaGVySGFuZGxlcjo6JXMqJyAlIChfdHlwZS50eXBlX2RvbWFpbigpLmRvbWFpbl9u
YW1lLCB1Y2ZpcnN0KHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkpCisgICAgICAgICAgICBlbHNl
OgorICAgICAgICAgICAgICAgIHJldHVybiAnSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6JXM6OiVz
KicgJSAoX3R5cGUudHlwZV9kb21haW4oKS5kb21haW5fbmFtZSwgX3R5cGUucmF3X25hbWUoKSkK
KworICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJ1bmtub3duIGZvcm1hbCBvdXQgcGFyYW1ldGVy
IHR5cGUuIikKKworICAgICMgRklYTUU6IHRoaXMgaXMgb25seSBzbGlnaHRseSBkaWZmZXJlbnQg
ZnJvbSBvdXQgcGFyYW1ldGVyczsgdGhleSBjb3VsZCBiZSB1bmlmaWVkLgorICAgIEBzdGF0aWNt
ZXRob2QKKyAgICBkZWYgdHlwZV9zdHJpbmdfZm9yX2Zvcm1hbF9hc3luY19wYXJhbWV0ZXIocGFy
YW1ldGVyKToKKyAgICAgICAgX3R5cGUgPSBwYXJhbWV0ZXIudHlwZQorICAgICAgICBpZiBpc2lu
c3RhbmNlKF90eXBlLCBBbGlhc2VkVHlwZSk6CisgICAgICAgICAgICBfdHlwZSA9IF90eXBlLmFs
aWFzZWRfdHlwZSAgIyBGYWxsIHRocm91Z2guCisKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlw
ZSwgRW51bVR5cGUpOgorICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5wcmltaXRpdmVfdHlwZSAg
IyBGYWxsIHRocm91Z2guCisKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgKE9iamVjdFR5
cGUsIEFycmF5VHlwZSkpOgorICAgICAgICAgICAgcmV0dXJuICdQYXNzUmVmUHRyPCVzPicgJSBH
ZW5lcmF0b3IudHlwZV9idWlsZGVyX3N0cmluZ19mb3JfdHlwZShfdHlwZSkKKyAgICAgICAgaWYg
aXNpbnN0YW5jZShfdHlwZSwgUHJpbWl0aXZlVHlwZSk6CisgICAgICAgICAgICBjcHBfbmFtZSA9
IEdlbmVyYXRvci5jcHBfbmFtZV9mb3JfcHJpbWl0aXZlX3R5cGUoX3R5cGUpCisgICAgICAgICAg
ICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6CisgICAgICAgICAgICAgICAgcmV0dXJuICJJbnNw
ZWN0b3I6OlR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8JXM+KiIgJSBjcHBfbmFtZQorICAgICAgICAg
ICAgZWxpZiBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpIGluIFsnaW50ZWdlcicsICdudW1iZXInXToK
KyAgICAgICAgICAgICAgICByZXR1cm4gR2VuZXJhdG9yLmNwcF9uYW1lX2Zvcl9wcmltaXRpdmVf
dHlwZShfdHlwZSkKKyAgICAgICAgICAgIGVsaWYgX3R5cGUucXVhbGlmaWVkX25hbWUoKSBpbiBb
J3N0cmluZyddOgorICAgICAgICAgICAgICAgIHJldHVybiAnY29uc3QgJXMmJyAlIGNwcF9uYW1l
CisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBjcHBfbmFtZQorCisg
ICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIlVua25vd24gZm9ybWFsIGFzeW5jIHBhcmFtZXRlciB0
eXBlLiIpCisKKyAgICAjIEluLXBhcmFtZXRlcnMgZG9uJ3QgdXNlIGJ1aWxkZXIgdHlwZXMsIGJl
Y2F1c2UgdGhleSBjb3VsZCBiZSBwYXNzZWQKKyAgICAjICJvcGVuIHR5cGVzIiB0aGF0IGFyZSBt
YW51YWxseSBjb25zdHJ1Y3RlZCBvdXQgb2YgSW5zcGVjdG9yT2JqZWN0cy4KKworICAgICMgRklY
TUU6IE9ubHkgcGFyYW1ldGVycyB0aGF0IGFyZSBhY3R1YWxseSBvcGVuIHR5cGVzIHNob3VsZCBu
ZWVkIG5vbi1idWlsZGVyIHBhcmFtZXRlciB0eXBlcy4KKyAgICBAc3RhdGljbWV0aG9kCisgICAg
ZGVmIHR5cGVfc3RyaW5nX2Zvcl9zdGFja19pbl9wYXJhbWV0ZXIocGFyYW1ldGVyKToKKyAgICAg
ICAgX3R5cGUgPSBwYXJhbWV0ZXIudHlwZQorICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBB
bGlhc2VkVHlwZSk6CisgICAgICAgICAgICBfdHlwZSA9IF90eXBlLmFsaWFzZWRfdHlwZSAgIyBG
YWxsIHRocm91Z2guCisKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgRW51bVR5cGUpOgor
ICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5wcmltaXRpdmVfdHlwZSAgIyBGYWxsIHRocm91Z2gu
CisKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgT2JqZWN0VHlwZSk6CisgICAgICAgICAg
ICByZXR1cm4gIlJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4iCisgICAgICAgIGlm
IGlzaW5zdGFuY2UoX3R5cGUsIEFycmF5VHlwZSk6CisgICAgICAgICAgICByZXR1cm4gIlJlZlB0
cjxJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5PiIKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlw
ZSwgUHJpbWl0aXZlVHlwZSk6CisgICAgICAgICAgICBjcHBfbmFtZSA9IEdlbmVyYXRvci5jcHBf
bmFtZV9mb3JfcHJpbWl0aXZlX3R5cGUoX3R5cGUpCisgICAgICAgICAgICBpZiBfdHlwZS5xdWFs
aWZpZWRfbmFtZSgpIGluIFsnYW55JywgJ29iamVjdCddOgorICAgICAgICAgICAgICAgIHJldHVy
biAiUmVmUHRyPCVzPiIgJSBHZW5lcmF0b3IuY3BwX25hbWVfZm9yX3ByaW1pdGl2ZV90eXBlKF90
eXBlKQorICAgICAgICAgICAgZWxpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwgYW5kIF90eXBlLnF1
YWxpZmllZF9uYW1lKCkgbm90IGluIFsnYm9vbGVhbicsICdzdHJpbmcnLCAnaW50ZWdlciddOgor
ICAgICAgICAgICAgICAgIHJldHVybiAiSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6T3B0T3V0cHV0
PCVzPiIgJSBjcHBfbmFtZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1
cm4gY3BwX25hbWUKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgdHlwZV9zdHJpbmdfZm9y
X3N0YWNrX291dF9wYXJhbWV0ZXIocGFyYW1ldGVyKToKKyAgICAgICAgX3R5cGUgPSBwYXJhbWV0
ZXIudHlwZQorICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCAoQXJyYXlUeXBlLCBPYmplY3RU
eXBlKSk6CisgICAgICAgICAgICByZXR1cm4gJ1JlZlB0cjwlcz4nICUgR2VuZXJhdG9yLnR5cGVf
YnVpbGRlcl9zdHJpbmdfZm9yX3R5cGUoX3R5cGUpCisgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5
cGUsIEFsaWFzZWRUeXBlKToKKyAgICAgICAgICAgIGJ1aWxkZXJfdHlwZSA9IEdlbmVyYXRvci50
eXBlX2J1aWxkZXJfc3RyaW5nX2Zvcl90eXBlKF90eXBlKQorICAgICAgICAgICAgaWYgcGFyYW1l
dGVyLmlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAgIHJldHVybiAiSW5zcGVjdG9yOjpUeXBl
QnVpbGRlcjo6T3B0T3V0cHV0PCVzPiIgJSBidWlsZGVyX3R5cGUKKyAgICAgICAgICAgIHJldHVy
biAnJXMnICUgYnVpbGRlcl90eXBlCisgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIFByaW1p
dGl2ZVR5cGUpOgorICAgICAgICAgICAgY3BwX25hbWUgPSBHZW5lcmF0b3IuY3BwX25hbWVfZm9y
X3ByaW1pdGl2ZV90eXBlKF90eXBlKQorICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlv
bmFsOgorICAgICAgICAgICAgICAgIHJldHVybiAiSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6T3B0
T3V0cHV0PCVzPiIgJSBjcHBfbmFtZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAg
ICByZXR1cm4gY3BwX25hbWUKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgRW51bVR5cGUp
OgorICAgICAgICAgICAgaWYgX3R5cGUuaXNfYW5vbnltb3VzOgorICAgICAgICAgICAgICAgIHJl
dHVybiAnSW5zcGVjdG9yJXNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OiVzJyAlIChfdHlwZS50
eXBlX2RvbWFpbigpLmRvbWFpbl9uYW1lLCB1Y2ZpcnN0KHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFt
ZSkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiAnSW5zcGVjdG9y
OjpUeXBlQnVpbGRlcjo6JXM6OiVzJyAlIChfdHlwZS50eXBlX2RvbWFpbigpLmRvbWFpbl9uYW1l
LCBfdHlwZS5yYXdfbmFtZSgpKQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBhc3NlcnRp
b25fbWV0aG9kX2Zvcl90eXBlX21lbWJlcih0eXBlX21lbWJlciwgb2JqZWN0X2RlY2xhcmF0aW9u
KToKKworICAgICAgICBkZWYgYXNzZXJ0aW9uX21ldGhvZF9mb3JfdHlwZShfdHlwZSk6CisgICAg
ICAgICAgICByZXR1cm4gJ0JpbmRpbmdUcmFpdHM8JXM+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVk
VHlwZScgJSBHZW5lcmF0b3IudHlwZV9idWlsZGVyX3N0cmluZ19mb3JfdHlwZShfdHlwZSkKKwor
ICAgICAgICBpZiBpc2luc3RhbmNlKHR5cGVfbWVtYmVyLnR5cGUsIEFsaWFzZWRUeXBlKToKKyAg
ICAgICAgICAgIHJldHVybiBhc3NlcnRpb25fbWV0aG9kX2Zvcl90eXBlKHR5cGVfbWVtYmVyLnR5
cGUuYWxpYXNlZF90eXBlKQorICAgICAgICBpZiBpc2luc3RhbmNlKHR5cGVfbWVtYmVyLnR5cGUs
IEVudW1UeXBlKSBhbmQgdHlwZV9tZW1iZXIudHlwZS5pc19hbm9ueW1vdXM6CisgICAgICAgICAg
ICByZXR1cm4gJ0JpbmRpbmdUcmFpdHM8JXM+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZScg
JSBHZW5lcmF0b3IudHlwZV9idWlsZGVyX3N0cmluZ19mb3JfdHlwZV9tZW1iZXIodHlwZV9tZW1i
ZXIsIG9iamVjdF9kZWNsYXJhdGlvbikKKworICAgICAgICByZXR1cm4gYXNzZXJ0aW9uX21ldGhv
ZF9mb3JfdHlwZSh0eXBlX21lbWJlci50eXBlKQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRl
ZiBjcHBfbmFtZV9mb3JfcHJpbWl0aXZlX3R5cGUoX3R5cGUpOgorICAgICAgICByZXR1cm4gX1BS
SU1JVElWRV9UT19DUFBfTkFNRV9NQVAuZ2V0KF90eXBlLnJhd19uYW1lKCkpCisKKyAgICBAc3Rh
dGljbWV0aG9kCisgICAgZGVmIGpzX25hbWVfZm9yX3BhcmFtZXRlcl90eXBlKF90eXBlKToKKyAg
ICAgICAgX3R5cGUgPSBfdHlwZQorICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBBbGlhc2Vk
VHlwZSk6CisgICAgICAgICAgICBfdHlwZSA9IF90eXBlLmFsaWFzZWRfdHlwZSAgIyBGYWxsIHRo
cm91Z2guCisgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKToKKyAgICAgICAg
ICAgIF90eXBlID0gX3R5cGUucHJpbWl0aXZlX3R5cGUgICMgRmFsbCB0aHJvdWdoLgorCisgICAg
ICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIChBcnJheVR5cGUsIE9iamVjdFR5cGUpKToKKyAgICAg
ICAgICAgIHJldHVybiAnb2JqZWN0JworICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBQcmlt
aXRpdmVUeXBlKToKKyAgICAgICAgICAgIGlmIF90eXBlLnF1YWxpZmllZF9uYW1lKCkgaW4gWydv
YmplY3QnLCAnYW55J106CisgICAgICAgICAgICAgICAgcmV0dXJuICdvYmplY3QnCisgICAgICAg
ICAgICBlbGlmIF90eXBlLnF1YWxpZmllZF9uYW1lKCkgaW4gWydpbnRlZ2VyJywgJ251bWJlcidd
OgorICAgICAgICAgICAgICAgIHJldHVybiAnbnVtYmVyJworICAgICAgICAgICAgZWxzZToKKyAg
ICAgICAgICAgICAgICByZXR1cm4gX3R5cGUucXVhbGlmaWVkX25hbWUoKQorCisgICAgIyBEZWNp
ZGUgd2hldGhlciBjZXJ0YWluIGhlbHBlcnMgYXJlIG5lY2Vzc2FyeSBpbiBhIHNpdHVhdGlvbi4K
KyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIHNob3VsZF91c2Vfd3JhcHBlcl9mb3JfcmV0dXJu
X3R5cGUoX3R5cGUpOgorICAgICAgICByZXR1cm4gbm90IGlzaW5zdGFuY2UoX3R5cGUsIChBcnJh
eVR5cGUsIE9iamVjdFR5cGUpKQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBzaG91bGRf
cGFzc19ieV9jb3B5X2Zvcl9yZXR1cm5fdHlwZShfdHlwZSk6CisgICAgICAgIHJldHVybiBpc2lu
c3RhbmNlKF90eXBlLCAoQXJyYXlUeXBlLCBPYmplY3RUeXBlKSkgb3IgKGlzaW5zdGFuY2UoX3R5
cGUsIChQcmltaXRpdmVUeXBlKSkgYW5kIF90eXBlLnF1YWxpZmllZF9uYW1lKCkgPT0gIm9iamVj
dCIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Y29kZWdlbi9nZW5lcmF0b3JfdGVtcGxhdGVzLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdG9yX3RlbXBsYXRlcy5weQpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4wYWE4NTNlY2E0YjQzMDlkMzM2YWZmNjY3NWU4MDMxODg1NzJmYmZhCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2Vu
ZXJhdG9yX3RlbXBsYXRlcy5weQpAQCAtMCwwICsxLDI2NiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0
aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisjIENvcHlyaWdodCAoYykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoK
KyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisj
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyMgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisjIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
CisjIEdlbmVyYXRvciB0ZW1wbGF0ZXMsIHdoaWNoIGNhbiBiZSBmaWxsZWQgd2l0aCBzdHJpbmcu
VGVtcGxhdGUuCisjIEZvbGxvd2luZyBhcmUgY2xhc3NlcyB0aGF0IGZpbGwgdGhlIHRlbXBsYXRl
cyBmcm9tIHRoZSB0eXBlY2hlY2tlZCBtb2RlbC4KKworCitjbGFzcyBHZW5lcmF0b3JUZW1wbGF0
ZXM6CisgICAgQ29weXJpZ2h0QmxvY2sgPSAoCisgICAgIiIiLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSAke2lucHV0RmlsZW5hbWV9CisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkiIiIpCisKKyAgICBDcHBIZWFkZXJQcmVsdWRlID0gKAor
ICAgICIiIiNpZm5kZWYgJHtoZWFkZXJHdWFyZFN0cmluZ30KKyNkZWZpbmUgJHtoZWFkZXJHdWFy
ZFN0cmluZ30KKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyR7aW5jbHVkZXN9CisKK25hbWVz
cGFjZSBJbnNwZWN0b3IgeworCiske3R5cGVkZWZzfSIiIikKKworICAgIENwcEhlYWRlclBvc3Rs
dWRlID0gKAorICAgICIiIn0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5B
QkxFKElOU1BFQ1RPUikKKworI2VuZGlmIC8vICFkZWZpbmVkKCR7aGVhZGVyR3VhcmRTdHJpbmd9
KSIiIikKKworICAgIENwcEltcGxlbWVudGF0aW9uUHJlbHVkZSA9ICgKKyAgICAiIiIjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAke3ByaW1hcnlJbmNsdWRlfQorCisjaWYgRU5BQkxFKElO
U1BFQ1RPUikKKworJHtzZWNvbmRhcnlJbmNsdWRlc30KKworbmFtZXNwYWNlIEluc3BlY3RvciB7
IiIiKQorCisgICAgQ3BwSW1wbGVtZW50YXRpb25Qb3N0bHVkZSA9ICgKKyAgICAiIiJ9IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisiIiIpCisK
KyAgICBCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckRvbWFpbkhhbmRsZXJEZWNsYXJhdGlvbiA9ICgK
KyAgICAiIiIke2NsYXNzQW5kRXhwb3J0TWFjcm99IEluc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXIgeworcHVibGljOgorJHtjb21tYW5kRGVjbGFyYXRpb25zfQor
cHJvdGVjdGVkOgorICAgIHZpcnR1YWwgfkluc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlz
cGF0Y2hlckhhbmRsZXIoKTsKK307IiIiKQorCisgICAgQmFja2VuZERpc3BhdGNoZXJIZWFkZXJE
b21haW5EaXNwYXRjaGVyRGVjbGFyYXRpb24gPSAoCisgICAgIiIiJHtjbGFzc0FuZEV4cG9ydE1h
Y3JvfSBJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJs
aWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7Citw
dWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tl
bmREaXNwYXRjaGVyPiBjcmVhdGUoSW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
ciosIEluc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2gobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgbWV0aG9k
LCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBtZXNzYWdlKSBvdmVycmlk
ZTsKKyR7Y29tbWFuZERlY2xhcmF0aW9uc30KK3ByaXZhdGU6CisgICAgSW5zcGVjdG9yJHtkb21h
aW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyKEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXIqLCBJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7
CisgICAgSW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogbV9h
Z2VudDsKK307IiIiKQorCisgICAgQmFja2VuZERpc3BhdGNoZXJIZWFkZXJBc3luY0NvbW1hbmRE
ZWNsYXJhdGlvbiA9ICgKKyAgICAiIiIgICAgY2xhc3MgJHtjYWxsYmFja05hbWV9IDogcHVibGlj
IEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZSB7Cisg
ICAgcHVibGljOgorICAgICAgICAke2NhbGxiYWNrTmFtZX0oUGFzc1JlZlB0cjxJbnNwZWN0b3I6
Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiwgaW50IGlkKTsKKyAgICAgICAgdm9pZCBzZW5k
U3VjY2Vzcygke291dFBhcmFtZXRlcnN9KTsKKyAgICB9OworICAgIHZpcnR1YWwgdm9pZCAke2Nv
bW1hbmROYW1lfSgke2luUGFyYW1ldGVyc30pID0gMDsiIiIpCisKKyAgICBCYWNrZW5kRGlzcGF0
Y2hlckltcGxlbWVudGF0aW9uU21hbGxTd2l0Y2ggPSAoCisgICAgIiIidm9pZCBJbnNwZWN0b3Ik
e2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgY2FsbElkLCBjb25z
dCBTdHJpbmcmIG1ldGhvZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1lc3NhZ2UpCit7
CisgICAgUmVmPEluc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVj
dCgqdGhpcyk7CisKKyR7ZGlzcGF0Y2hDYXNlc30KKyAgICBlbHNlCisgICAgICAgIG1fYmFja2Vu
ZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCBTdHJpbmcoIiciKSArICIke2RvbWFpbk5hbWV9
IiArICcuJyArIG1ldGhvZCArICInIHdhcyBub3QgZm91bmQiKTsKK30iIiIpCisKKyAgICBCYWNr
ZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uTGFyZ2VTd2l0Y2ggPSAoCisiIiJ2b2lkIEluc3Bl
Y3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyBjYWxsSWQs
IGNvbnN0IFN0cmluZyYgbWV0aG9kLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbWVzc2Fn
ZSkKK3sKKyAgICBSZWY8SW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyPiBw
cm90ZWN0KCp0aGlzKTsKKworICAgIHR5cGVkZWYgdm9pZCAoSW5zcGVjdG9yJHtkb21haW5OYW1l
fUJhY2tlbmREaXNwYXRjaGVyOjoqQ2FsbEhhbmRsZXIpKGxvbmcgY2FsbElkLCBjb25zdCBJbnNw
ZWN0b3I6Okluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7CisgICAgdHlwZWRlZiBIYXNoTWFwPFN0
cmluZywgQ2FsbEhhbmRsZXI+IERpc3BhdGNoTWFwOworICAgIERFUFJFQ0FURURfREVGSU5FX1NU
QVRJQ19MT0NBTChEaXNwYXRjaE1hcCwgZGlzcGF0Y2hNYXAsICgpKTsKKyAgICBpZiAoZGlzcGF0
Y2hNYXAuaXNFbXB0eSgpKSB7CisgICAgICAgIHN0YXRpYyBjb25zdCBzdHJ1Y3QgTWV0aG9kVGFi
bGUgeworICAgICAgICAgICAgY29uc3QgY2hhciogbmFtZTsKKyAgICAgICAgICAgIENhbGxIYW5k
bGVyIGhhbmRsZXI7CisgICAgICAgIH0gY29tbWFuZHNbXSA9IHsKKyR7ZGlzcGF0Y2hDYXNlc30K
KyAgICAgICAgfTsKKyAgICAgICAgc2l6ZV90IGxlbmd0aCA9IFdURl9BUlJBWV9MRU5HVEgoY29t
bWFuZHMpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQorICAg
ICAgICAgICAgZGlzcGF0Y2hNYXAuYWRkKGNvbW1hbmRzW2ldLm5hbWUsIGNvbW1hbmRzW2ldLmhh
bmRsZXIpOworICAgIH0KKworICAgIEhhc2hNYXA8U3RyaW5nLCBDYWxsSGFuZGxlcj46Oml0ZXJh
dG9yIGl0ID0gZGlzcGF0Y2hNYXAuZmluZChtZXRob2QpOworICAgIGlmIChpdCA9PSBkaXNwYXRj
aE1hcC5lbmQoKSkgeworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2Nv
bEVycm9yKCZjYWxsSWQsIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3Vu
ZCwgU3RyaW5nKCInIikgKyAiJHtkb21haW5OYW1lfSIgKyAnLicgKyBtZXRob2QgKyAiJyB3YXMg
bm90IGZvdW5kIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAoKCp0aGlzKS4qaXQt
PnZhbHVlKShjYWxsSWQsICptZXNzYWdlLmdldCgpKTsKK30iIiIpCisKKyAgICBCYWNrZW5kRGlz
cGF0Y2hlckltcGxlbWVudGF0aW9uRG9tYWluQ29uc3RydWN0b3IgPSAoCisgICAgIiIiUGFzc1Jl
ZlB0cjxJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXI+IEluc3BlY3RvciR7
ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKEluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlciwgSW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmRE
aXNwYXRjaGVySGFuZGxlciogYWdlbnQpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnNw
ZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIsIGFn
ZW50KSk7Cit9CisKK0luc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcjo6SW5z
cGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyKEluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlciwgSW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmRE
aXNwYXRjaGVySGFuZGxlciogYWdlbnQpCisgICAgOiBJbnNwZWN0b3JTdXBwbGVtZW50YWxCYWNr
ZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlcikKKyAgICAsIG1fYWdlbnQoYWdlbnQpCit7
CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRjaGVyRm9yRG9tYWluKEFT
Q0lJTGl0ZXJhbCgiJHtkb21haW5OYW1lfSIpLCB0aGlzKTsKK30iIiIpCisKKyAgICBCYWNrZW5k
RGlzcGF0Y2hlckltcGxlbWVudGF0aW9uUHJlcGFyZUNvbW1hbmRBcmd1bWVudHMgPSAoCisiIiIg
ICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5
OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIg
PSBtZXNzYWdlLmdldE9iamVjdChBU0NJSUxpdGVyYWwoInBhcmFtcyIpKTsKKyAgICBJbnNwZWN0
b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKKyAg
ICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQo
KTsKKyR7aW5QYXJhbWV0ZXJEZWNsYXJhdGlvbnN9CisgICAgaWYgKHByb3RvY29sRXJyb3JzLT5s
ZW5ndGgoKSkgeworICAgICAgICBTdHJpbmcgZXJyb3JNZXNzYWdlID0gU3RyaW5nOjpmb3JtYXQo
IlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCBcJyVzXCcgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIiR7
ZG9tYWluTmFtZX0uJHtjb21tYW5kTmFtZX0iKTsKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+cmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElkLCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
cjo6SW52YWxpZFBhcmFtcywgZXJyb3JNZXNzYWdlLCBwcm90b2NvbEVycm9ycy5yZWxlYXNlKCkp
OworICAgICAgICByZXR1cm47CisgICAgfQorIiIiKQorCisgICAgQmFja2VuZERpc3BhdGNoZXJJ
bXBsZW1lbnRhdGlvbkFzeW5jQ29tbWFuZCA9ICgKKyIiIkluc3BlY3RvciR7ZG9tYWluTmFtZX1C
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OiR7Y2FsbGJhY2tOYW1lfTo6JHtjYWxsYmFja05hbWV9
KFBhc3NSZWZQdHI8SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+IGJhY2tlbmREaXNwYXRjaGVy
LCBpbnQgaWQpIDogSW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJh
Y2tCYXNlKGJhY2tlbmREaXNwYXRjaGVyLCBpZCkgeyB9CisKK3ZvaWQgSW5zcGVjdG9yJHtkb21h
aW5OYW1lfUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6JHtjYWxsYmFja05hbWV9OjpzZW5kU3Vj
Y2Vzcygke2Zvcm1hbFBhcmFtZXRlcnN9KQoreworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IGpzb25NZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyR7b3V0UGFyYW1ldGVy
QXNzaWdubWVudHN9CisgICAgc2VuZElmQWN0aXZlKGpzb25NZXNzYWdlLCBFcnJvclN0cmluZygp
KTsKK30iIiIpCisKKyAgICBGcm9udGVuZERpc3BhdGNoZXJEb21haW5EaXNwYXRjaGVyRGVjbGFy
YXRpb24gPSAoCisiIiIke2NsYXNzQW5kRXhwb3J0TWFjcm99IEluc3BlY3RvciR7ZG9tYWluTmFt
ZX1Gcm9udGVuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIEluc3BlY3RvciR7ZG9tYWluTmFt
ZX1Gcm9udGVuZERpc3BhdGNoZXIoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwpIDogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoaW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsKSB7IH0KKyR7ZXZlbnREZWNsYXJhdGlvbnN9Citwcml2YXRlOgorICAgIElu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbCogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7Cit9OyIi
IikKKworICAgIFR5cGVCdWlsZGVyRGVjbGFyYXRpb25QcmVsdWRlID0gKAorIiIiICAgIHRlbXBs
YXRlPGludCBTVEFURT4KKyAgICBjbGFzcyBCdWlsZGVyIHsKKyAgICBwcml2YXRlOgorICAgICAg
ICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OworCisgICAgICAg
IHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNU
QVRFIHwgU1RFUD4qPih0aGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXIoUGFzc1Jl
ZlB0cjwvKiR7b2JqZWN0VHlwZX0qL0luc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBwdHIpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0
LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOworICAgICAgICAgICAgbV9yZXN1
bHQgPSBwdHI7CisgICAgICAgIH0KKyAgICAgICAgZnJpZW5kIGNsYXNzICR7b2JqZWN0VHlwZX07
CisgICAgcHVibGljOiIiIikKKworICAgIFR5cGVCdWlsZGVyRGVjbGFyYXRpb25Qb3N0bHVkZSA9
ICgKKyIiIgorICAgICAgICBvcGVyYXRvciBSZWZQdHI8JHtvYmplY3RUeXBlfT4mICgpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwg
cmVzdWx0X2lzX25vdF9yZWFkeSk7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2Yo
JHtvYmplY3RUeXBlfSkgPT0gc2l6ZW9mKEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0KSwgY2Fu
bm90X2Nhc3QpOworICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjwk
e29iamVjdFR5cGV9Pio+KCZtX3Jlc3VsdCk7CisgICAgICAgIH0KKworICAgICAgICBQYXNzUmVm
UHRyPCR7b2JqZWN0VHlwZX0+IHJlbGVhc2UoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gUmVmUHRyPCR7b2JqZWN0VHlwZX0+KCp0aGlzKS5yZWxlYXNlKCk7CisgICAgICAgIH0KKyAg
ICB9OworCisgICAgLyoKKyAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6Ciske2NvbnN0cnVj
dG9yRXhhbXBsZX0KKyAgICAgKi8KKyAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3Jl
YXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihJbnNwZWN0
b3I6Okluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkpOworICAgIH0KKyAgICB0eXBlZGVmIEluc3Bl
Y3Rvcjo6VHlwZUJ1aWxkZXI6OlN0cnVjdEl0ZW1UcmFpdHMgSXRlbVRyYWl0czsiIiIpCisKKyAg
ICBUeXBlQnVpbGRlck9iamVjdFJ1bnRpbWVDYXN0ID0gKAorIiIiUGFzc1JlZlB0cjwke29iamVj
dFR5cGV9PiBCaW5kaW5nVHJhaXRzPCR7b2JqZWN0VHlwZX0+OjpydW50aW1lQ2FzdChQYXNzUmVm
UHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+IHZhbHVlKQoreworICAgIFJlZlB0cjxJbnNw
ZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gb2JqZWN0OworICAgIGJvb2wgY2FzdFJlcyA9IHZhbHVl
LT5hc09iamVjdCgmb2JqZWN0KTsKKyAgICBBU1NFUlRfVU5VU0VEKGNhc3RSZXMsIGNhc3RSZXMp
OworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICBCaW5kaW5nVHJhaXRzPCR7b2JqZWN0VHlwZX0+
Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShvYmplY3QuZ2V0KCkpOworI2VuZGlmICAvLyAh
QVNTRVJUX0RJU0FCTEVECisgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKCR7b2JqZWN0VHlwZX0p
ID09IHNpemVvZihJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdEJhc2UpLCB0eXBlX2Nhc3RfcHJv
YmxlbSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PCR7b2JqZWN0VHlwZX0qPihzdGF0aWNfY2Fz
dDxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdEJhc2UqPihvYmplY3QuZ2V0KCkpKTsKK30KKyIi
IgorKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2NvZGVnZW4vbW9kZWxzLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2NvZGVnZW4vbW9kZWxzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRhYzAyZmJjYmVhMTU1YjdiY2UzZmEy
ZjFhNDY2MTAwOTZiMmIxZTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9tb2RlbHMucHkKQEAgLTAsMCArMSw1ODAgQEAK
KyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKGMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisj
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworIyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisjIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0IGxvZ2dpbmcKKworbG9nID0gbG9nZ2luZy5nZXRM
b2dnZXIoJ2dsb2JhbCcpCisKKworZGVmIHVjZmlyc3Qoc3RyKToKKyAgICByZXR1cm4gc3RyWzox
XS51cHBlcigpICsgc3RyWzE6XQorCisKK19GUkFNRVdPUktfQ09ORklHX01BUCA9IHsKKyAgICAi
R2xvYmFsIjogeworICAgICAgICAicHJlZml4IjogIiIsCisgICAgfSwKKworICAgICJXVEYiOiB7
CisgICAgICAgICJwcmVmaXgiOiAiV1RGIiwKKyAgICB9LAorICAgICJKYXZhU2NyaXB0Q29yZSI6
IHsKKyAgICAgICAgInByZWZpeCI6ICJKUyIsCisgICAgICAgICJleHBvcnRfbWFjcm8iOiAiSlNf
RVhQT1JUX1BSSVZBVEUiCisgICAgfSwKKyAgICAiV2ViQ29yZSI6IHsKKyAgICAgICAgInByZWZp
eCI6ICJXZWIiLAorICAgIH0sCisgICAgIyBVc2VkIGZvciBjb2RlIGdlbmVyYXRvciB0ZXN0cy4K
KyAgICAiVGVzdCI6IHsKKyAgICAgICAgInByZWZpeCI6ICJUZXN0IiwKKyAgICB9Cit9CisKKwor
IyBGSVhNRTogVGhlc2Ugc2hvdWxkIGJlIGNvbnZlcnRlZCBpbnRvIEpTT04gcHJvcGVydGllcywg
b3IgcmVuYW1lZC4KK19UWVBFU19ORUVESU5HX1JFTkFNRV9XT1JLQVJPVU5EUyA9IHsKKyAgICAn
UkdCQSc6ICdSZ2JhJywgIyBSR0JBIGlzIHJlcG9ydGVkIHRvIGJlIGNvbmZsaWN0aW5nIHdpdGgg
YSBkZWZpbmUgbmFtZSBpbiBXaW5kb3dzIENFLgorICAgICMgRm9yIHRlc3Rpbmcgb25seS4KKyAg
ICAnVW5wbGVhc2FudE5hbWUnOiAnSGFwcHlOYW1lJworfQorCisKK2NsYXNzIFBhcnNlRXhjZXB0
aW9uKEV4Y2VwdGlvbik6CisgICAgcGFzcworCisKK2NsYXNzIFR5cGVjaGVja0V4Y2VwdGlvbihF
eGNlcHRpb24pOgorICAgIHBhc3MKKworCitjbGFzcyBGcmFtZXdvcms6CisgICAgZGVmIF9faW5p
dF9fKHNlbGYsIG5hbWUpOgorICAgICAgICBzZWxmLl9zZXR0aW5ncyA9IF9GUkFNRVdPUktfQ09O
RklHX01BUFtuYW1lXQorICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCisKKyAgICBkZWYgc2V0dGlu
ZyhzZWxmLCBrZXksIGRlZmF1bHQ9JycpOgorICAgICAgICByZXR1cm4gc2VsZi5fc2V0dGluZ3Mu
Z2V0KGtleSwgZGVmYXVsdCkKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgZnJvbVN0cmlu
ZyhmcmFtZXdvcmtTdHJpbmcpOgorICAgICAgICBpZiBmcmFtZXdvcmtTdHJpbmcgPT0gIkdsb2Jh
bCI6CisgICAgICAgICAgICByZXR1cm4gRnJhbWV3b3Jrcy5HbG9iYWwKKworICAgICAgICBpZiBm
cmFtZXdvcmtTdHJpbmcgPT0gIldURiI6CisgICAgICAgICAgICByZXR1cm4gRnJhbWV3b3Jrcy5X
VEYKKworICAgICAgICBpZiBmcmFtZXdvcmtTdHJpbmcgPT0gIkphdmFTY3JpcHRDb3JlIjoKKyAg
ICAgICAgICAgIHJldHVybiBGcmFtZXdvcmtzLkphdmFTY3JpcHRDb3JlCisKKyAgICAgICAgaWYg
ZnJhbWV3b3JrU3RyaW5nID09ICJXZWJDb3JlIjoKKyAgICAgICAgICAgIHJldHVybiBGcmFtZXdv
cmtzLldlYkNvcmUKKworICAgICAgICBpZiBmcmFtZXdvcmtTdHJpbmcgPT0gIlRlc3QiOgorICAg
ICAgICAgICAgcmV0dXJuIEZyYW1ld29ya3MuVGVzdAorCisgICAgICAgIHJhaXNlIFBhcnNlRXhj
ZXB0aW9uKCJVbmtub3duIGZyYW1ld29yazogJXMiICUgZnJhbWV3b3JrU3RyaW5nKQorCisKK2Ns
YXNzIEZyYW1ld29ya3M6CisgICAgR2xvYmFsID0gRnJhbWV3b3JrKCJHbG9iYWwiKQorICAgIFdU
RiA9IEZyYW1ld29yaygiV1RGIikKKyAgICBKYXZhU2NyaXB0Q29yZSA9IEZyYW1ld29yaygiSmF2
YVNjcmlwdENvcmUiKQorICAgIFdlYkNvcmUgPSBGcmFtZXdvcmsoIldlYkNvcmUiKQorICAgIFRl
c3QgPSBGcmFtZXdvcmsoIlRlc3QiKQorCisKK2NsYXNzIFR5cGVSZWZlcmVuY2U6CisgICAgZGVm
IF9faW5pdF9fKHNlbGYsIHR5cGVfa2luZCwgcmVmZXJlbmNlZF90eXBlX25hbWUsIGVudW1fdmFs
dWVzLCBhcnJheV9pdGVtcyk6CisgICAgICAgIHNlbGYudHlwZV9raW5kID0gdHlwZV9raW5kCisg
ICAgICAgIHNlbGYucmVmZXJlbmNlZF90eXBlX25hbWUgPSBfVFlQRVNfTkVFRElOR19SRU5BTUVf
V09SS0FST1VORFMuZ2V0KHJlZmVyZW5jZWRfdHlwZV9uYW1lLCByZWZlcmVuY2VkX3R5cGVfbmFt
ZSkKKyAgICAgICAgc2VsZi5lbnVtX3ZhbHVlcyA9IGVudW1fdmFsdWVzCisgICAgICAgIGlmIGFy
cmF5X2l0ZW1zIGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLmFycmF5X3R5cGVfcmVmID0gTm9u
ZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hcnJheV90eXBlX3JlZiA9IFR5cGVS
ZWZlcmVuY2UoYXJyYXlfaXRlbXMuZ2V0KCd0eXBlJyksIGFycmF5X2l0ZW1zLmdldCgnJHJlZicp
LCBhcnJheV9pdGVtcy5nZXQoJ2VudW0nKSwgYXJyYXlfaXRlbXMuZ2V0KCdpdGVtcycpKQorCisg
ICAgICAgIGlmIHR5cGVfa2luZCBpcyBub3QgTm9uZSBhbmQgcmVmZXJlbmNlZF90eXBlX25hbWUg
aXMgbm90IE5vbmU6CisgICAgICAgICAgICByYWlzZSBQYXJzZUV4Y2VwdGlvbigiVHlwZSByZWZl
cmVuY2UgY2Fubm90IGhhdmUgYm90aCAndHlwZScgYW5kICckcmVmJyBrZXlzLiIpCisKKyAgICAg
ICAgaWYgdHlwZV9raW5kID09ICJhcnJheSIgYW5kIGFycmF5X2l0ZW1zIGlzIE5vbmU6CisgICAg
ICAgICAgICByYWlzZSBQYXJzZUV4Y2VwdGlvbigiVHlwZSByZWZlcmVuY2Ugd2l0aCB0eXBlICdh
cnJheScgbXVzdCBoYXZlIGtleSAnaXRlbXMnIHRvIGRlZmluZSBhcnJheSBlbGVtZW50IHR5cGUu
IikKKworICAgICAgICBpZiBlbnVtX3ZhbHVlcyBpcyBub3QgTm9uZSBhbmQgbGVuKGVudW1fdmFs
dWVzKSA9PSAwOgorICAgICAgICAgICAgcmFpc2UgUGFyc2VFeGNlcHRpb24oIlR5cGUgcmVmZXJl
bmNlIHdpdGggZW51bSB2YWx1ZXMgbXVzdCBoYXZlIGF0IGxlYXN0IG9uZSBlbnVtIHZhbHVlLiIp
CisKKyAgICBkZWYgcmVmZXJlbmNlZF9uYW1lKHNlbGYpOgorICAgICAgICBpZiBzZWxmLnJlZmVy
ZW5jZWRfdHlwZV9uYW1lIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYucmVm
ZXJlbmNlZF90eXBlX25hbWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBzZWxm
LnR5cGVfa2luZCAgIyBpbnRlZ2VyLCBzdHJpbmcsIG51bWJlciwgYm9vbGVhbiwgZW51bSwgb2Jq
ZWN0LCBhcnJheQorCisKK2NsYXNzIFR5cGU6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAg
ICAgICBwYXNzCisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJu
IHNlbGYucXVhbGlmaWVkX25hbWUoKSA9PSBvdGhlci5xdWFsaWZpZWRfbmFtZSgpCisKKyAgICBk
ZWYgX19oYXNoX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnF1YWxpZmllZF9uYW1lKCku
X19oYXNoX18oKQorCisgICAgZGVmIHJhd19uYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gX1RZ
UEVTX05FRURJTkdfUkVOQU1FX1dPUktBUk9VTkRTLmdldChzZWxmLl9uYW1lLCBzZWxmLl9uYW1l
KQorCisgICAgIyBUaGVzZSBtZXRob2RzIHNob3VsZCBiZSBvdmVycmlkZGVuIGJ5IHN1YmNsYXNz
ZXMuCisgICAgZGVmIGlzX2VudW0oc2VsZik6CisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAg
ZGVmIHR5cGVfZG9tYWluKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgcXVhbGlmaWVk
X25hbWUoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgICMgVGhpcyBpcyB1c2VkIHRvIHJlc29s
dmUgbmVzdGVkIHR5cGVzIGFmdGVyIGluc3RhbmNlcyBhcmUgY3JlYXRlZC4KKyAgICBkZWYgcmVz
b2x2ZV90eXBlX3JlZmVyZW5jZXMoc2VsZiwgcHJvdG9jb2wpOgorICAgICAgICBwYXNzCisKKwor
Y2xhc3MgUHJpbWl0aXZlVHlwZShUeXBlKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSk6
CisgICAgICAgIHNlbGYuX25hbWUgPSBuYW1lCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6Cisg
ICAgICAgIHJldHVybiAnUHJpbWl0aXZlVHlwZVslc10nICUgc2VsZi5xdWFsaWZpZWRfbmFtZSgp
CisKKyAgICBkZWYgdHlwZV9kb21haW4oc2VsZik6CisgICAgICAgIHJldHVybiBOb25lCisKKyAg
ICBkZWYgcXVhbGlmaWVkX25hbWUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnJhd19uYW1l
KCkKKworCitjbGFzcyBBbGlhc2VkVHlwZShUeXBlKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwg
bmFtZSwgZG9tYWluLCBhbGlhc2VkX3R5cGVfcmVmKToKKyAgICAgICAgc2VsZi5fbmFtZSA9IG5h
bWUKKyAgICAgICAgc2VsZi5fZG9tYWluID0gZG9tYWluCisgICAgICAgIHNlbGYuX2FsaWFzZWRf
dHlwZV9yZWYgPSBhbGlhc2VkX3R5cGVfcmVmCisgICAgICAgIHNlbGYuYWxpYXNlZF90eXBlID0g
Tm9uZQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICBpZiBzZWxmLmFsaWFzZWRf
dHlwZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJldHVybiAnQWxpYXNlZFR5cGVbJXMgLT4g
JXJdJyAlIChzZWxmLnF1YWxpZmllZF9uYW1lKCksIHNlbGYuYWxpYXNlZF90eXBlKQorICAgICAg
ICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuICdBbGlhc2VkVHlwZVslcyAtPiAodW5yZXNvbHZl
ZCldJyAlIHNlbGYucXVhbGlmaWVkX25hbWUoKQorCisgICAgZGVmIGlzX2VudW0oc2VsZik6Cisg
ICAgICAgIHJldHVybiBzZWxmLmFsaWFzZWRfdHlwZS5pc19lbnVtKCkKKworICAgIGRlZiB0eXBl
X2RvbWFpbihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2RvbWFpbgorCisgICAgZGVmIHF1
YWxpZmllZF9uYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gICIuIi5qb2luKFtzZWxmLnR5cGVf
ZG9tYWluKCkuZG9tYWluX25hbWUsIHNlbGYucmF3X25hbWUoKV0pCisKKyAgICBkZWYgcmVzb2x2
ZV90eXBlX3JlZmVyZW5jZXMoc2VsZiwgcHJvdG9jb2wpOgorICAgICAgICBpZiBzZWxmLmFsaWFz
ZWRfdHlwZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHNlbGYu
YWxpYXNlZF90eXBlID0gcHJvdG9jb2wubG9va3VwX3R5cGVfcmVmZXJlbmNlKHNlbGYuX2FsaWFz
ZWRfdHlwZV9yZWYsIHNlbGYudHlwZV9kb21haW4oKSkKKyAgICAgICAgbG9nLmRlYnVnKCI8IFJl
c29sdmVkIHR5cGUgcmVmZXJlbmNlIGZvciBhbGlhc2VkIHR5cGUgaW4gJXM6ICVzIiAlIChzZWxm
LnF1YWxpZmllZF9uYW1lKCksIHNlbGYuYWxpYXNlZF90eXBlLnF1YWxpZmllZF9uYW1lKCkpKQor
CisKK2NsYXNzIEVudW1UeXBlKFR5cGUpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCBk
b21haW4sIHZhbHVlcywgcHJpbWl0aXZlX3R5cGVfcmVmLCBpc19hbm9ueW1vdXM9RmFsc2UpOgor
ICAgICAgICBzZWxmLl9uYW1lID0gbmFtZQorICAgICAgICBzZWxmLl9kb21haW4gPSBkb21haW4K
KyAgICAgICAgc2VsZi5fdmFsdWVzID0gdmFsdWVzCisgICAgICAgIHNlbGYuX3ByaW1pdGl2ZV90
eXBlX3JlZiA9IHByaW1pdGl2ZV90eXBlX3JlZgorICAgICAgICBzZWxmLnByaW1pdGl2ZV90eXBl
ID0gTm9uZQorICAgICAgICBzZWxmLmlzX2Fub255bW91cyA9IGlzX2Fub255bW91cworCisgICAg
ZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gJ0VudW1UeXBlW3ZhbHVlX3R5cGU9
JXM7IHZhbHVlcz0lc10nICUgKHNlbGYucXVhbGlmaWVkX25hbWUoKSwgJywgJy5qb2luKG1hcChz
dHIsIHNlbGYuZW51bV92YWx1ZXMoKSkpKQorCisgICAgZGVmIGlzX2VudW0oc2VsZik6CisgICAg
ICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgdHlwZV9kb21haW4oc2VsZik6CisgICAgICAgIHJl
dHVybiBzZWxmLl9kb21haW4KKworICAgIGRlZiBlbnVtX3ZhbHVlcyhzZWxmKToKKyAgICAgICAg
cmV0dXJuIHNlbGYuX3ZhbHVlcworCisgICAgZGVmIHF1YWxpZmllZF9uYW1lKHNlbGYpOgorICAg
ICAgICByZXR1cm4gICIuIi5qb2luKFtzZWxmLnR5cGVfZG9tYWluKCkuZG9tYWluX25hbWUsIHNl
bGYucmF3X25hbWUoKV0pCisKKyAgICBkZWYgcmVzb2x2ZV90eXBlX3JlZmVyZW5jZXMoc2VsZiwg
cHJvdG9jb2wpOgorICAgICAgICBpZiBzZWxmLnByaW1pdGl2ZV90eXBlIGlzIG5vdCBOb25lOgor
ICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgc2VsZi5wcmltaXRpdmVfdHlwZSA9IHByb3Rv
Y29sLmxvb2t1cF90eXBlX3JlZmVyZW5jZShzZWxmLl9wcmltaXRpdmVfdHlwZV9yZWYsIERvbWFp
bnMuR0xPQkFMKQorICAgICAgICBsb2cuZGVidWcoIjwgUmVzb2x2ZWQgdHlwZSByZWZlcmVuY2Ug
Zm9yIGVudW0gdHlwZSBpbiAlczogJXMiICUgKHNlbGYucXVhbGlmaWVkX25hbWUoKSwgc2VsZi5w
cmltaXRpdmVfdHlwZS5xdWFsaWZpZWRfbmFtZSgpKSkKKyAgICAgICAgbG9nLmRlYnVnKCI8PCBl
bnVtIHZhbHVlczogJXMiICUgc2VsZi5lbnVtX3ZhbHVlcygpKQorCisKK2NsYXNzIEFycmF5VHlw
ZShUeXBlKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZWxlbWVudF90eXBlX3JlZiwgZG9tYWlu
KToKKyAgICAgICAgc2VsZi5fZG9tYWluID0gZG9tYWluCisgICAgICAgIHNlbGYuX2VsZW1lbnRf
dHlwZV9yZWYgPSBlbGVtZW50X3R5cGVfcmVmCisgICAgICAgIHNlbGYuZWxlbWVudF90eXBlID0g
Tm9uZQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICBpZiBzZWxmLmVsZW1lbnRf
dHlwZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJldHVybiAnQXJyYXlUeXBlW2VsZW1lbnRf
dHlwZT0lcl0nICUgc2VsZi5lbGVtZW50X3R5cGUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAg
IHJldHVybiAnQXJyYXlUeXBlW2VsZW1lbnRfdHlwZT0odW5yZXNvbHZlZCldJworCisgICAgZGVm
IHR5cGVfZG9tYWluKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fZG9tYWluCisKKyAgICBk
ZWYgcXVhbGlmaWVkX25hbWUoc2VsZik6CisgICAgICAgIHJldHVybiAgIi4iLmpvaW4oWyJhcnJh
eSIsIHNlbGYuZWxlbWVudF90eXBlLnF1YWxpZmllZF9uYW1lKCldKQorCisgICAgZGVmIHJlc29s
dmVfdHlwZV9yZWZlcmVuY2VzKHNlbGYsIHByb3RvY29sKToKKyAgICAgICAgaWYgc2VsZi5lbGVt
ZW50X3R5cGUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBzZWxm
LmVsZW1lbnRfdHlwZSA9IHByb3RvY29sLmxvb2t1cF90eXBlX3JlZmVyZW5jZShzZWxmLl9lbGVt
ZW50X3R5cGVfcmVmLCBzZWxmLnR5cGVfZG9tYWluKCkpCisgICAgICAgIGxvZy5kZWJ1ZygiPCBS
ZXNvbHZlZCB0eXBlIHJlZmVyZW5jZSBmb3IgZWxlbWVudCB0eXBlIGluICVzOiAlcyIgJSAoc2Vs
Zi5xdWFsaWZpZWRfbmFtZSgpLCBzZWxmLmVsZW1lbnRfdHlwZS5xdWFsaWZpZWRfbmFtZSgpKSkK
KworCitjbGFzcyBPYmplY3RUeXBlKFR5cGUpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1l
LCBkb21haW4sIG1lbWJlcnMpOgorICAgICAgICBzZWxmLl9uYW1lID0gbmFtZQorICAgICAgICBz
ZWxmLl9kb21haW4gPSBkb21haW4KKyAgICAgICAgc2VsZi5tZW1iZXJzID0gbWVtYmVycworCisg
ICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gJ09iamVjdFR5cGVbJXNdJyAl
IHNlbGYucXVhbGlmaWVkX25hbWUoKQorCisgICAgZGVmIHR5cGVfZG9tYWluKHNlbGYpOgorICAg
ICAgICByZXR1cm4gc2VsZi5fZG9tYWluCisKKyAgICBkZWYgcXVhbGlmaWVkX25hbWUoc2VsZik6
CisgICAgICAgIHJldHVybiAgIi4iLmpvaW4oW3NlbGYudHlwZV9kb21haW4oKS5kb21haW5fbmFt
ZSwgc2VsZi5yYXdfbmFtZSgpXSkKKworCitkZWYgY2hlY2tfZm9yX3JlcXVpcmVkX3Byb3BlcnRp
ZXMocHJvcHMsIG9iaiwgd2hhdCk6CisgICAgZm9yIHByb3AgaW4gcHJvcHM6CisgICAgICAgIGlm
IHByb3Agbm90IGluIG9iajoKKyAgICAgICAgICAgIHJhaXNlIFBhcnNlRXhjZXB0aW9uKCJXaGVu
IHBhcnNpbmcgJXMsIHJlcXVpcmVkIHByb3BlcnR5IG1pc3Npbmc6ICVzIiAlICh3aGF0LCBwcm9w
KSkKKworCitjbGFzcyBQcm90b2NvbDoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZnJhbWV3b3Jr
X25hbWUpOgorICAgICAgICBzZWxmLmRvbWFpbnMgPSBbXQorICAgICAgICBzZWxmLnR5cGVzX2J5
X25hbWUgPSB7fQorICAgICAgICBzZWxmLmZyYW1ld29yayA9IEZyYW1ld29yay5mcm9tU3RyaW5n
KGZyYW1ld29ya19uYW1lKQorCisgICAgZGVmIHBhcnNlX3NwZWNpZmljYXRpb24oc2VsZiwganNv
biwgaXNTdXBwbGVtZW50YWwpOgorICAgICAgICBsb2cuZGVidWcoInBhcnNlIHRvcGxldmVsIikK
KworICAgICAgICBpZiBpc2luc3RhbmNlKGpzb24sIGRpY3QpIGFuZCAnZG9tYWlucycgaW4ganNv
bjoKKyAgICAgICAgICAgIGpzb24gPSBqc29uWydkb21haW5zJ10KKyAgICAgICAgaWYgbm90IGlz
aW5zdGFuY2UoanNvbiwgbGlzdCk6CisgICAgICAgICAgICBqc29uID0gW2pzb25dCisKKyAgICAg
ICAgZm9yIGRvbWFpbiBpbiBqc29uOgorICAgICAgICAgICAgc2VsZi5wYXJzZV9kb21haW4oZG9t
YWluLCBpc1N1cHBsZW1lbnRhbCkKKworICAgIGRlZiBwYXJzZV9kb21haW4oc2VsZiwganNvbiwg
aXNTdXBwbGVtZW50YWwpOgorICAgICAgICBjaGVja19mb3JfcmVxdWlyZWRfcHJvcGVydGllcyhb
J2RvbWFpbiddLCBqc29uLCAiZG9tYWluIikKKyAgICAgICAgbG9nLmRlYnVnKCJwYXJzZSBkb21h
aW4gIiArIGpzb25bJ2RvbWFpbiddKQorCisgICAgICAgIHR5cGVzID0gW10KKyAgICAgICAgY29t
bWFuZHMgPSBbXQorICAgICAgICBldmVudHMgPSBbXQorCisgICAgICAgIGlmICd0eXBlcycgaW4g
anNvbjoKKyAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGpzb25bJ3R5cGVzJ10sIGxpc3Qp
OgorICAgICAgICAgICAgICAgIHJhaXNlIFBhcnNlRXhjZXB0aW9uKCJNYWxmb3JtZWQgZG9tYWlu
IHNwZWNpZmljYXRpb246IHR5cGVzIGlzIG5vdCBhbiBhcnJheSIpCisgICAgICAgICAgICB0eXBl
cy5leHRlbmQoW3NlbGYucGFyc2VfdHlwZV9kZWNsYXJhdGlvbihkZWNsYXJhdGlvbikgZm9yIGRl
Y2xhcmF0aW9uIGluIGpzb25bJ3R5cGVzJ11dKQorCisgICAgICAgIGlmICdjb21tYW5kcycgaW4g
anNvbjoKKyAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGpzb25bJ2NvbW1hbmRzJ10sIGxp
c3QpOgorICAgICAgICAgICAgICAgIHJhaXNlIFBhcnNlRXhjZXB0aW9uKCJNYWxmb3JtZWQgZG9t
YWluIHNwZWNpZmljYXRpb246IGNvbW1hbmRzIGlzIG5vdCBhbiBhcnJheSIpCisgICAgICAgICAg
ICBjb21tYW5kcy5leHRlbmQoW3NlbGYucGFyc2VfY29tbWFuZChjb21tYW5kKSBmb3IgY29tbWFu
ZCBpbiBqc29uWydjb21tYW5kcyddXSkKKworICAgICAgICBpZiAnZXZlbnRzJyBpbiBqc29uOgor
ICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoanNvblsnZXZlbnRzJ10sIGxpc3QpOgorICAg
ICAgICAgICAgICAgIHJhaXNlIFBhcnNlRXhjZXB0aW9uKCJNYWxmb3JtZWQgZG9tYWluIHNwZWNp
ZmljYXRpb246IGV2ZW50cyBpcyBub3QgYW4gYXJyYXkiKQorICAgICAgICAgICAgZXZlbnRzLmV4
dGVuZChbc2VsZi5wYXJzZV9ldmVudChldmVudCkgZm9yIGV2ZW50IGluIGpzb25bJ2V2ZW50cydd
XSkKKworICAgICAgICBzZWxmLmRvbWFpbnMuYXBwZW5kKERvbWFpbihqc29uWydkb21haW4nXSwg
anNvbi5nZXQoJ2Rlc2NyaXB0aW9uJywgIiIpLCBpc1N1cHBsZW1lbnRhbCwgdHlwZXMsIGNvbW1h
bmRzLCBldmVudHMpKQorCisgICAgZGVmIHBhcnNlX3R5cGVfZGVjbGFyYXRpb24oc2VsZiwganNv
bik6CisgICAgICAgIGNoZWNrX2Zvcl9yZXF1aXJlZF9wcm9wZXJ0aWVzKFsnaWQnLCAndHlwZSdd
LCBqc29uLCAidHlwZSIpCisgICAgICAgIGxvZy5kZWJ1ZygicGFyc2UgdHlwZSAlcyIgJSBqc29u
WydpZCddKQorCisgICAgICAgIHR5cGVfbWVtYmVycyA9IFtdCisKKyAgICAgICAgaWYgJ3Byb3Bl
cnRpZXMnIGluIGpzb246CisgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShqc29uWydwcm9w
ZXJ0aWVzJ10sIGxpc3QpOgorICAgICAgICAgICAgICAgIHJhaXNlIFBhcnNlRXhjZXB0aW9uKCJN
YWxmb3JtZWQgdHlwZSBzcGVjaWZpY2F0aW9uOiBwcm9wZXJ0aWVzIGlzIG5vdCBhbiBhcnJheSIp
CisgICAgICAgICAgICB0eXBlX21lbWJlcnMuZXh0ZW5kKFtzZWxmLnBhcnNlX3R5cGVfbWVtYmVy
KG1lbWJlcikgZm9yIG1lbWJlciBpbiBqc29uWydwcm9wZXJ0aWVzJ11dKQorCisgICAgICAgIHR5
cGVfcmVmID0gVHlwZVJlZmVyZW5jZShqc29uWyd0eXBlJ10sIGpzb24uZ2V0KCckcmVmJyksIGpz
b24uZ2V0KCdlbnVtJyksIGpzb24uZ2V0KCdpdGVtcycpKQorICAgICAgICByZXR1cm4gVHlwZURl
Y2xhcmF0aW9uKGpzb25bJ2lkJ10sIHR5cGVfcmVmLCBqc29uLmdldCgiZGVzY3JpcHRpb24iLCAi
IiksIHR5cGVfbWVtYmVycykKKworICAgIGRlZiBwYXJzZV90eXBlX21lbWJlcihzZWxmLCBqc29u
KToKKyAgICAgICAgY2hlY2tfZm9yX3JlcXVpcmVkX3Byb3BlcnRpZXMoWyduYW1lJ10sIGpzb24s
ICJ0eXBlIG1lbWJlciIpCisgICAgICAgIGxvZy5kZWJ1ZygicGFyc2UgdHlwZSBtZW1iZXIgJXMi
ICUganNvblsnbmFtZSddKQorCisgICAgICAgIHR5cGVfcmVmID0gVHlwZVJlZmVyZW5jZShqc29u
LmdldCgndHlwZScpLCBqc29uLmdldCgnJHJlZicpLCBqc29uLmdldCgnZW51bScpLCBqc29uLmdl
dCgnaXRlbXMnKSkKKyAgICAgICAgcmV0dXJuIFR5cGVNZW1iZXIoanNvblsnbmFtZSddLCB0eXBl
X3JlZiwganNvbi5nZXQoJ29wdGlvbmFsJywgRmFsc2UpLCBqc29uLmdldCgnZGVzY3JpcHRpb24n
LCAiIikpCisKKyAgICBkZWYgcGFyc2VfY29tbWFuZChzZWxmLCBqc29uKToKKyAgICAgICAgY2hl
Y2tfZm9yX3JlcXVpcmVkX3Byb3BlcnRpZXMoWyduYW1lJ10sIGpzb24sICJjb21tYW5kIikKKyAg
ICAgICAgbG9nLmRlYnVnKCJwYXJzZSBjb21tYW5kICVzIiAlIGpzb25bJ25hbWUnXSkKKworICAg
ICAgICBjYWxsX3BhcmFtZXRlcnMgPSBbXQorICAgICAgICByZXR1cm5fcGFyYW1ldGVycyA9IFtd
CisKKyAgICAgICAgaWYgJ3BhcmFtZXRlcnMnIGluIGpzb246CisgICAgICAgICAgICBpZiBub3Qg
aXNpbnN0YW5jZShqc29uWydwYXJhbWV0ZXJzJ10sIGxpc3QpOgorICAgICAgICAgICAgICAgIHJh
aXNlIFBhcnNlRXhjZXB0aW9uKCJNYWxmb3JtZWQgY29tbWFuZCBzcGVjaWZpY2F0aW9uOiBwYXJh
bWV0ZXJzIGlzIG5vdCBhbiBhcnJheSIpCisgICAgICAgICAgICBjYWxsX3BhcmFtZXRlcnMuZXh0
ZW5kKFtzZWxmLnBhcnNlX2NhbGxfb3JfcmV0dXJuX3BhcmFtZXRlcihwYXJhbWV0ZXIpIGZvciBw
YXJhbWV0ZXIgaW4ganNvblsncGFyYW1ldGVycyddXSkKKworICAgICAgICBpZiAncmV0dXJucycg
aW4ganNvbjoKKyAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGpzb25bJ3JldHVybnMnXSwg
bGlzdCk6CisgICAgICAgICAgICAgICAgcmFpc2UgUGFyc2VFeGNlcHRpb24oIk1hbGZvcm1lZCBj
b21tYW5kIHNwZWNpZmljYXRpb246IHJldHVybnMgaXMgbm90IGFuIGFycmF5IikKKyAgICAgICAg
ICAgIHJldHVybl9wYXJhbWV0ZXJzLmV4dGVuZChbc2VsZi5wYXJzZV9jYWxsX29yX3JldHVybl9w
YXJhbWV0ZXIocGFyYW1ldGVyKSBmb3IgcGFyYW1ldGVyIGluIGpzb25bJ3JldHVybnMnXV0pCisK
KyAgICAgICAgcmV0dXJuIENvbW1hbmQoanNvblsnbmFtZSddLCBjYWxsX3BhcmFtZXRlcnMsIHJl
dHVybl9wYXJhbWV0ZXJzLCBqc29uLmdldCgnZGVzY3JpcHRpb24nLCAiIiksIGpzb24uZ2V0KCdh
c3luYycsIEZhbHNlKSkKKworICAgIGRlZiBwYXJzZV9ldmVudChzZWxmLCBqc29uKToKKyAgICAg
ICAgY2hlY2tfZm9yX3JlcXVpcmVkX3Byb3BlcnRpZXMoWyduYW1lJ10sIGpzb24sICJldmVudCIp
CisgICAgICAgIGxvZy5kZWJ1ZygicGFyc2UgZXZlbnQgJXMiICUganNvblsnbmFtZSddKQorCisg
ICAgICAgIGV2ZW50X3BhcmFtZXRlcnMgPSBbXQorCisgICAgICAgIGlmICdwYXJhbWV0ZXJzJyBp
biBqc29uOgorICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoanNvblsncGFyYW1ldGVycydd
LCBsaXN0KToKKyAgICAgICAgICAgICAgICByYWlzZSBQYXJzZUV4Y2VwdGlvbigiTWFsZm9ybWVk
IGV2ZW50IHNwZWNpZmljYXRpb246IHBhcmFtZXRlcnMgaXMgbm90IGFuIGFycmF5IikKKyAgICAg
ICAgICAgIGV2ZW50X3BhcmFtZXRlcnMuZXh0ZW5kKFtzZWxmLnBhcnNlX2NhbGxfb3JfcmV0dXJu
X3BhcmFtZXRlcihwYXJhbWV0ZXIpIGZvciBwYXJhbWV0ZXIgaW4ganNvblsncGFyYW1ldGVycydd
XSkKKworICAgICAgICByZXR1cm4gRXZlbnQoanNvblsnbmFtZSddLCBldmVudF9wYXJhbWV0ZXJz
LCBqc29uLmdldCgnZGVzY3JpcHRpb24nLCAiIikpCisKKyAgICBkZWYgcGFyc2VfY2FsbF9vcl9y
ZXR1cm5fcGFyYW1ldGVyKHNlbGYsIGpzb24pOgorICAgICAgICBjaGVja19mb3JfcmVxdWlyZWRf
cHJvcGVydGllcyhbJ25hbWUnXSwganNvbiwgInBhcmFtZXRlciIpCisgICAgICAgIGxvZy5kZWJ1
ZygicGFyc2UgcGFyYW1ldGVyICVzIiAlIGpzb25bJ25hbWUnXSkKKworICAgICAgICB0eXBlX3Jl
ZiA9IFR5cGVSZWZlcmVuY2UoanNvbi5nZXQoJ3R5cGUnKSwganNvbi5nZXQoJyRyZWYnKSwganNv
bi5nZXQoJ2VudW0nKSwganNvbi5nZXQoJ2l0ZW1zJykpCisgICAgICAgIHJldHVybiBQYXJhbWV0
ZXIoanNvblsnbmFtZSddLCB0eXBlX3JlZiwganNvbi5nZXQoJ29wdGlvbmFsJywgRmFsc2UpLCBq
c29uLmdldCgnZGVzY3JpcHRpb24nLCAiIikpCisKKyAgICBkZWYgcmVzb2x2ZV90eXBlcyhzZWxm
KToKKyAgICAgICAgcXVhbGlmaWVkX2RlY2xhcmVkX3R5cGVfbmFtZXMgPSBzZXQoWydib29sZWFu
JywgJ3N0cmluZycsICdpbnRlZ2VyJywgJ251bWJlcicsICdlbnVtJywgJ2FycmF5JywgJ29iamVj
dCcsICdhbnknXSkKKworICAgICAgICBzZWxmLnR5cGVzX2J5X25hbWVbJ3N0cmluZyddID0gUHJp
bWl0aXZlVHlwZSgnc3RyaW5nJykKKyAgICAgICAgZm9yIF9wcmltaXRpdmVfdHlwZSBpbiBbJ2Jv
b2xlYW4nLCAnaW50ZWdlcicsICdudW1iZXInXToKKyAgICAgICAgICAgIHNlbGYudHlwZXNfYnlf
bmFtZVtfcHJpbWl0aXZlX3R5cGVdID0gUHJpbWl0aXZlVHlwZShfcHJpbWl0aXZlX3R5cGUpCisg
ICAgICAgIGZvciBfb2JqZWN0X3R5cGUgaW4gWydhbnknLCAnb2JqZWN0J106CisgICAgICAgICAg
ICBzZWxmLnR5cGVzX2J5X25hbWVbX29iamVjdF90eXBlXSA9IFByaW1pdGl2ZVR5cGUoX29iamVj
dF90eXBlKQorCisgICAgICAgICMgR2F0aGVyIHF1YWxpZmllZCB0eXBlIG5hbWVzIGZyb20gdHlw
ZSBkZWNsYXJhdGlvbnMgaW4gZWFjaCBkb21haW4uCisgICAgICAgIGZvciBkb21haW4gaW4gc2Vs
Zi5kb21haW5zOgorICAgICAgICAgICAgZm9yIGRlY2xhcmF0aW9uIGluIGRvbWFpbi50eXBlX2Rl
Y2xhcmF0aW9uczoKKyAgICAgICAgICAgICAgICAjIEJhc2ljIHNhbml0eSBjaGVja2luZy4KKyAg
ICAgICAgICAgICAgICBpZiBkZWNsYXJhdGlvbi50eXBlX3JlZi5yZWZlcmVuY2VkX3R5cGVfbmFt
ZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgVHlwZWNoZWNrRXhjZXB0
aW9uKCJUeXBlIGRlY2xhcmF0aW9ucyBtdXN0IG5hbWUgYSBiYXNlIHR5cGUsIG5vdCBhIHR5cGUg
cmVmZXJlbmNlLiIpCisKKyAgICAgICAgICAgICAgICAjIEZpbmQgZHVwbGljYXRlIHF1YWxpZmll
ZCB0eXBlIG5hbWVzLgorICAgICAgICAgICAgICAgIHF1YWxpZmllZF90eXBlX25hbWUgPSAiLiIu
am9pbihbZG9tYWluLmRvbWFpbl9uYW1lLCBkZWNsYXJhdGlvbi50eXBlX25hbWVdKQorICAgICAg
ICAgICAgICAgIGlmIHF1YWxpZmllZF90eXBlX25hbWUgaW4gcXVhbGlmaWVkX2RlY2xhcmVkX3R5
cGVfbmFtZXM6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVjaGVja0V4Y2VwdGlvbigi
RHVwbGljYXRlIHR5cGUgZGVjbGFyYXRpb246ICVzIiAlIHF1YWxpZmllZF90eXBlX25hbWUpCisK
KyAgICAgICAgICAgICAgICBxdWFsaWZpZWRfZGVjbGFyZWRfdHlwZV9uYW1lcy5hZGQocXVhbGlm
aWVkX3R5cGVfbmFtZSkKKworICAgICAgICAgICAgICAgIHR5cGVfaW5zdGFuY2UgPSBOb25lCisK
KyAgICAgICAgICAgICAgICBraW5kID0gZGVjbGFyYXRpb24udHlwZV9yZWYudHlwZV9raW5kCisg
ICAgICAgICAgICAgICAgaWYgZGVjbGFyYXRpb24udHlwZV9yZWYuZW51bV92YWx1ZXMgaXMgbm90
IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHByaW1pdGl2ZV90eXBlX3JlZiA9IFR5cGVSZWZl
cmVuY2UoZGVjbGFyYXRpb24udHlwZV9yZWYudHlwZV9raW5kLCBOb25lLCBOb25lLCBOb25lKQor
ICAgICAgICAgICAgICAgICAgICB0eXBlX2luc3RhbmNlID0gRW51bVR5cGUoZGVjbGFyYXRpb24u
dHlwZV9uYW1lLCBkb21haW4sIGRlY2xhcmF0aW9uLnR5cGVfcmVmLmVudW1fdmFsdWVzLCBwcmlt
aXRpdmVfdHlwZV9yZWYpCisgICAgICAgICAgICAgICAgZWxpZiBraW5kID09ICJhcnJheSI6Cisg
ICAgICAgICAgICAgICAgICAgIHR5cGVfaW5zdGFuY2UgPSBBcnJheVR5cGUoZGVjbGFyYXRpb24u
dHlwZV9yZWYuYXJyYXlfdHlwZV9yZWYsIGRvbWFpbikKKyAgICAgICAgICAgICAgICBlbGlmIGtp
bmQgPT0gIm9iamVjdCI6CisgICAgICAgICAgICAgICAgICAgIHR5cGVfaW5zdGFuY2UgPSBPYmpl
Y3RUeXBlKGRlY2xhcmF0aW9uLnR5cGVfbmFtZSwgZG9tYWluLCBkZWNsYXJhdGlvbi50eXBlX21l
bWJlcnMpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgdHlwZV9p
bnN0YW5jZSA9IEFsaWFzZWRUeXBlKGRlY2xhcmF0aW9uLnR5cGVfbmFtZSwgZG9tYWluLCBkZWNs
YXJhdGlvbi50eXBlX3JlZikKKworICAgICAgICAgICAgICAgIGxvZy5kZWJ1ZygiPCBDcmVhdGVk
IGZyZXNoIHR5cGUgJXIgZm9yIGRlY2xhcmF0aW9uICVzIiAlICh0eXBlX2luc3RhbmNlLCBxdWFs
aWZpZWRfdHlwZV9uYW1lKSkKKyAgICAgICAgICAgICAgICBzZWxmLnR5cGVzX2J5X25hbWVbcXVh
bGlmaWVkX3R5cGVfbmFtZV0gPSB0eXBlX2luc3RhbmNlCisKKyAgICAgICAgIyBSZXNvbHZlIGFs
bCB0eXBlIHJlZmVyZW5jZXMgcmVjdXJzaXZlbHkuCisgICAgICAgIGZvciBkb21haW4gaW4gc2Vs
Zi5kb21haW5zOgorICAgICAgICAgICAgZG9tYWluLnJlc29sdmVfdHlwZV9yZWZlcmVuY2VzKHNl
bGYpCisKKyAgICBkZWYgbG9va3VwX3R5cGVfZm9yX2RlY2xhcmF0aW9uKHNlbGYsIGRlY2xhcmF0
aW9uLCBkb21haW4pOgorICAgICAgICAjIFRoaXMgd2lsbCBvbmx5IG1hdGNoIGEgdHlwZSBkZWZp
bmVkIGluIHRoZSBzYW1lIGRvbWFpbiwgd2hlcmUgcHJlZml4ZXMgYXJlbid0IHJlcXVpcmVkLgor
ICAgICAgICBxdWFsaWZpZWRfbmFtZSA9ICIuIi5qb2luKFtkb21haW4uZG9tYWluX25hbWUsIGRl
Y2xhcmF0aW9uLnR5cGVfbmFtZV0pCisgICAgICAgIGlmIHF1YWxpZmllZF9uYW1lIGluIHNlbGYu
dHlwZXNfYnlfbmFtZToKKyAgICAgICAgICAgIGZvdW5kX3R5cGUgPSBzZWxmLnR5cGVzX2J5X25h
bWVbcXVhbGlmaWVkX25hbWVdCisgICAgICAgICAgICBmb3VuZF90eXBlLnJlc29sdmVfdHlwZV9y
ZWZlcmVuY2VzKHNlbGYpCisgICAgICAgICAgICByZXR1cm4gZm91bmRfdHlwZQorCisgICAgICAg
IHJhaXNlIFR5cGVjaGVja0V4Y2VwdGlvbigiTG9va3VwIGZhaWxlZCBmb3IgdHlwZSBkZWNsYXJh
dGlvbjogJXMgKHJlZmVyZW5jZWQgZnJvbSBkb21haW46ICVzKSIgJSAoZGVjbGFyYXRpb24udHlw
ZV9uYW1lLCBkb21haW4uZG9tYWluX25hbWUpKQorCisgICAgZGVmIGxvb2t1cF90eXBlX3JlZmVy
ZW5jZShzZWxmLCB0eXBlX3JlZiwgZG9tYWluKToKKyAgICAgICAgIyBJZiByZWZlcmVuY2UgaXMg
dG8gYW4gYW5vbnltb3VzIGFycmF5IHR5cGUsIGNyZWF0ZSBhIGZyZXNoIGluc3RhbmNlLgorICAg
ICAgICBpZiB0eXBlX3JlZi50eXBlX2tpbmQgPT0gImFycmF5IjoKKyAgICAgICAgICAgIHR5cGVf
aW5zdGFuY2UgPSBBcnJheVR5cGUodHlwZV9yZWYuYXJyYXlfdHlwZV9yZWYsIGRvbWFpbikKKyAg
ICAgICAgICAgIHR5cGVfaW5zdGFuY2UucmVzb2x2ZV90eXBlX3JlZmVyZW5jZXMoc2VsZikKKyAg
ICAgICAgICAgIGxvZy5kZWJ1ZygiPCBDcmVhdGVkIGZyZXNoIHR5cGUgaW5zdGFuY2UgZm9yIGFu
b255bW91cyBhcnJheSB0eXBlOiAlcyIgJSB0eXBlX2luc3RhbmNlLnF1YWxpZmllZF9uYW1lKCkp
CisgICAgICAgICAgICByZXR1cm4gdHlwZV9pbnN0YW5jZQorCisgICAgICAgICMgSWYgcmVmZXJl
bmNlIGlzIHRvIGFuIGFub255bW91cyBlbnVtIHR5cGUsIGNyZWF0ZSBhIGZyZXNoIGluc3RhbmNl
LgorICAgICAgICBpZiB0eXBlX3JlZi5lbnVtX3ZhbHVlcyBpcyBub3QgTm9uZToKKyAgICAgICAg
ICAgICMgV2UgbmVlZCB0byBjcmVhdGUgYSB0eXBlIHJlZmVyZW5jZSB3aXRob3V0IGVudW0gdmFs
dWVzIGFzIHRoZSBlbnVtJ3MgbmVzdGVkIHR5cGUuCisgICAgICAgICAgICBwcmltaXRpdmVfdHlw
ZV9yZWYgPSBUeXBlUmVmZXJlbmNlKHR5cGVfcmVmLnR5cGVfa2luZCwgTm9uZSwgTm9uZSwgTm9u
ZSkKKyAgICAgICAgICAgIHR5cGVfaW5zdGFuY2UgPSBFbnVtVHlwZSgiKGFub255bW91cykiLCBk
b21haW4sIHR5cGVfcmVmLmVudW1fdmFsdWVzLCBwcmltaXRpdmVfdHlwZV9yZWYsIFRydWUpCisg
ICAgICAgICAgICB0eXBlX2luc3RhbmNlLnJlc29sdmVfdHlwZV9yZWZlcmVuY2VzKHNlbGYpCisg
ICAgICAgICAgICBsb2cuZGVidWcoIjwgQ3JlYXRlZCBmcmVzaCB0eXBlIGluc3RhbmNlIGZvciBh
bm9ueW1vdXMgZW51bSB0eXBlOiAlcyIgJSB0eXBlX2luc3RhbmNlLnF1YWxpZmllZF9uYW1lKCkp
CisgICAgICAgICAgICByZXR1cm4gdHlwZV9pbnN0YW5jZQorCisgICAgICAgICMgVGhpcyB3aWxs
IG1hdGNoIHdoZW4gcmVmZXJlbmNpbmcgYSB0eXBlIGRlZmluZWQgaW4gdGhlIHNhbWUgZG9tYWlu
LCB3aGVyZSBwcmVmaXhlcyBhcmVuJ3QgcmVxdWlyZWQuCisgICAgICAgIHF1YWxpZmllZF9uYW1l
ID0gIi4iLmpvaW4oW2RvbWFpbi5kb21haW5fbmFtZSwgdHlwZV9yZWYucmVmZXJlbmNlZF9uYW1l
KCldKQorICAgICAgICBpZiBxdWFsaWZpZWRfbmFtZSBpbiBzZWxmLnR5cGVzX2J5X25hbWU6Cisg
ICAgICAgICAgICBmb3VuZF90eXBlID0gc2VsZi50eXBlc19ieV9uYW1lW3F1YWxpZmllZF9uYW1l
XQorICAgICAgICAgICAgZm91bmRfdHlwZS5yZXNvbHZlX3R5cGVfcmVmZXJlbmNlcyhzZWxmKQor
ICAgICAgICAgICAgbG9nLmRlYnVnKCI8IExvb2t1cCBzdWNjZWVkZWQgZm9yIHVucXVhbGlmaWVk
IHR5cGU6ICVzIiAlIGZvdW5kX3R5cGUucXVhbGlmaWVkX25hbWUoKSkKKyAgICAgICAgICAgIHJl
dHVybiBmb3VuZF90eXBlCisKKyAgICAgICAgIyBUaGlzIHdpbGwgbWF0Y2ggcHJpbWl0aXZlIHR5
cGVzIGFuZCBmdWxseS1xdWFsaWZpZWQgdHlwZXMgZnJvbSBhIGRpZmZlcmVudCBkb21haW4uCisg
ICAgICAgIGlmIHR5cGVfcmVmLnJlZmVyZW5jZWRfbmFtZSgpIGluIHNlbGYudHlwZXNfYnlfbmFt
ZToKKyAgICAgICAgICAgIGZvdW5kX3R5cGUgPSBzZWxmLnR5cGVzX2J5X25hbWVbdHlwZV9yZWYu
cmVmZXJlbmNlZF9uYW1lKCldCisgICAgICAgICAgICBmb3VuZF90eXBlLnJlc29sdmVfdHlwZV9y
ZWZlcmVuY2VzKHNlbGYpCisgICAgICAgICAgICBsb2cuZGVidWcoIjwgTG9va3VwIHN1Y2NlZWRl
ZCBmb3IgcHJpbWl0aXZlIG9yIHF1YWxpZmllZCB0eXBlOiAlcyIgJSBmb3VuZF90eXBlLnF1YWxp
ZmllZF9uYW1lKCkpCisgICAgICAgICAgICByZXR1cm4gZm91bmRfdHlwZQorCisgICAgICAgIHJh
aXNlIFR5cGVjaGVja0V4Y2VwdGlvbigiTG9va3VwIGZhaWxlZCBmb3IgdHlwZSByZWZlcmVuY2U6
ICVzIChyZWZlcmVuY2VkIGZyb20gZG9tYWluOiAlcykiICUgKHR5cGVfcmVmLnJlZmVyZW5jZWRf
bmFtZSgpLCBkb21haW4uZG9tYWluX25hbWUpKQorCisKK2NsYXNzIERvbWFpbjoKKyAgICBkZWYg
X19pbml0X18oc2VsZiwgZG9tYWluX25hbWUsIGRlc2NyaXB0aW9uLCBpc1N1cHBsZW1lbnRhbCwg
dHlwZV9kZWNsYXJhdGlvbnMsIGNvbW1hbmRzLCBldmVudHMpOgorICAgICAgICBzZWxmLmRvbWFp
bl9uYW1lID0gZG9tYWluX25hbWUKKyAgICAgICAgc2VsZi5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0
aW9uCisgICAgICAgIHNlbGYuaXNfc3VwcGxlbWVudGFsID0gaXNTdXBwbGVtZW50YWwKKyAgICAg
ICAgc2VsZi50eXBlX2RlY2xhcmF0aW9ucyA9IHR5cGVfZGVjbGFyYXRpb25zCisgICAgICAgIHNl
bGYuY29tbWFuZHMgPSBjb21tYW5kcworICAgICAgICBzZWxmLmV2ZW50cyA9IGV2ZW50cworCisg
ICAgZGVmIHJlc29sdmVfdHlwZV9yZWZlcmVuY2VzKHNlbGYsIHByb3RvY29sKToKKyAgICAgICAg
bG9nLmRlYnVnKCI+IFJlc29sdmluZyB0eXBlIGRlY2xhcmF0aW9ucyBmb3IgZG9tYWluOiAlcyIg
JSBzZWxmLmRvbWFpbl9uYW1lKQorICAgICAgICBmb3IgZGVjbGFyYXRpb24gaW4gc2VsZi50eXBl
X2RlY2xhcmF0aW9uczoKKyAgICAgICAgICAgIGRlY2xhcmF0aW9uLnJlc29sdmVfdHlwZV9yZWZl
cmVuY2VzKHByb3RvY29sLCBzZWxmKQorCisgICAgICAgIGxvZy5kZWJ1ZygiPiBSZXNvbHZpbmcg
dHlwZXMgaW4gY29tbWFuZHMgZm9yIGRvbWFpbjogJXMiICUgc2VsZi5kb21haW5fbmFtZSkKKyAg
ICAgICAgZm9yIGNvbW1hbmQgaW4gc2VsZi5jb21tYW5kczoKKyAgICAgICAgICAgIGNvbW1hbmQu
cmVzb2x2ZV90eXBlX3JlZmVyZW5jZXMocHJvdG9jb2wsIHNlbGYpCisKKyAgICAgICAgbG9nLmRl
YnVnKCI+IFJlc29sdmluZyB0eXBlcyBpbiBldmVudHMgZm9yIGRvbWFpbjogJXMiICUgc2VsZi5k
b21haW5fbmFtZSkKKyAgICAgICAgZm9yIGV2ZW50IGluIHNlbGYuZXZlbnRzOgorICAgICAgICAg
ICAgZXZlbnQucmVzb2x2ZV90eXBlX3JlZmVyZW5jZXMocHJvdG9jb2wsIHNlbGYpCisKKworY2xh
c3MgRG9tYWluczoKKyAgICBHTE9CQUwgPSBEb21haW4oIiIsICJUaGUgZ2xvYmFsIGRvbWFpbiwg
aW4gd2hpY2ggcHJpbWl0aXZlIHR5cGVzIGFyZSBpbXBsaWNpdGx5IGRlY2xhcmVkLiIsIFRydWUs
IFtdLCBbXSwgW10pCisKKworY2xhc3MgVHlwZURlY2xhcmF0aW9uOgorICAgIGRlZiBfX2luaXRf
XyhzZWxmLCB0eXBlX25hbWUsIHR5cGVfcmVmLCBkZXNjcmlwdGlvbiwgdHlwZV9tZW1iZXJzKToK
KyAgICAgICAgc2VsZi50eXBlX25hbWUgPSBfVFlQRVNfTkVFRElOR19SRU5BTUVfV09SS0FST1VO
RFMuZ2V0KHR5cGVfbmFtZSwgdHlwZV9uYW1lKQorICAgICAgICBzZWxmLnR5cGVfcmVmID0gdHlw
ZV9yZWYKKyAgICAgICAgc2VsZi5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uCisgICAgICAgIHNl
bGYudHlwZV9tZW1iZXJzID0gdHlwZV9tZW1iZXJzCisKKyAgICAgICAgaWYgc2VsZi50eXBlX25h
bWUgIT0gdWNmaXJzdChzZWxmLnR5cGVfbmFtZSk6CisgICAgICAgICAgICByYWlzZSBQYXJzZUV4
Y2VwdGlvbigiVHlwZXMgbXVzdCBiZWdpbiB3aXRoIGFuIHVwcGVyY2FzZSBjaGFyYWN0ZXIuIikK
KworICAgIGRlZiByZXNvbHZlX3R5cGVfcmVmZXJlbmNlcyhzZWxmLCBwcm90b2NvbCwgZG9tYWlu
KToKKyAgICAgICAgbG9nLmRlYnVnKCI+PiBSZXNvbHZpbmcgdHlwZSByZWZlcmVuY2VzIGZvciB0
eXBlIGRlY2xhcmF0aW9uOiAlcyIgJSBzZWxmLnR5cGVfbmFtZSkKKyAgICAgICAgc2VsZi50eXBl
ID0gcHJvdG9jb2wubG9va3VwX3R5cGVfZm9yX2RlY2xhcmF0aW9uKHNlbGYsIGRvbWFpbikKKyAg
ICAgICAgZm9yIG1lbWJlciBpbiBzZWxmLnR5cGVfbWVtYmVyczoKKyAgICAgICAgICAgIG1lbWJl
ci5yZXNvbHZlX3R5cGVfcmVmZXJlbmNlcyhwcm90b2NvbCwgZG9tYWluKQorCisKK2NsYXNzIFR5
cGVNZW1iZXI6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1lbWJlcl9uYW1lLCB0eXBlX3JlZiwg
aXNfb3B0aW9uYWwsIGRlc2NyaXB0aW9uKToKKyAgICAgICAgc2VsZi5tZW1iZXJfbmFtZSA9IG1l
bWJlcl9uYW1lCisgICAgICAgIHNlbGYudHlwZV9yZWYgPSB0eXBlX3JlZgorICAgICAgICBzZWxm
LmlzX29wdGlvbmFsID0gaXNfb3B0aW9uYWwKKyAgICAgICAgc2VsZi5kZXNjcmlwdGlvbiA9IGRl
c2NyaXB0aW9uCisKKyAgICAgICAgaWYgc2VsZi5pc19vcHRpb25hbCBub3QgaW4gW1RydWUsIEZh
bHNlXToKKyAgICAgICAgICAgIHJhaXNlIFBhcnNlRXhjZXB0aW9uKCJUaGUgJ29wdGlvbmFsJyBm
bGFnIGZvciBhIHR5cGUgbWVtYmVyIG11c3QgYmUgYSBib29sZWFuIGxpdGVyYWwuIikKKworICAg
IGRlZiByZXNvbHZlX3R5cGVfcmVmZXJlbmNlcyhzZWxmLCBwcm90b2NvbCwgZG9tYWluKToKKyAg
ICAgICAgbG9nLmRlYnVnKCI+Pj4gUmVzb2x2aW5nIHR5cGUgcmVmZXJlbmNlcyBmb3IgdHlwZSBt
ZW1iZXI6ICVzIiAlIHNlbGYubWVtYmVyX25hbWUpCisgICAgICAgIHNlbGYudHlwZSA9IHByb3Rv
Y29sLmxvb2t1cF90eXBlX3JlZmVyZW5jZShzZWxmLnR5cGVfcmVmLCBkb21haW4pCisKKworY2xh
c3MgUGFyYW1ldGVyOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXJhbWV0ZXJfbmFtZSwgdHlw
ZV9yZWYsIGlzX29wdGlvbmFsLCBkZXNjcmlwdGlvbik6CisgICAgICAgIHNlbGYucGFyYW1ldGVy
X25hbWUgPSBwYXJhbWV0ZXJfbmFtZQorICAgICAgICBzZWxmLnR5cGVfcmVmID0gdHlwZV9yZWYK
KyAgICAgICAgc2VsZi5pc19vcHRpb25hbCA9IGlzX29wdGlvbmFsCisgICAgICAgIHNlbGYuZGVz
Y3JpcHRpb24gPSBkZXNjcmlwdGlvbgorCisgICAgICAgIGlmIHNlbGYuaXNfb3B0aW9uYWwgbm90
IGluIFtUcnVlLCBGYWxzZV06CisgICAgICAgICAgICByYWlzZSBQYXJzZUV4Y2VwdGlvbigiVGhl
ICdvcHRpb25hbCcgZmxhZyBmb3IgYSBwYXJhbWV0ZXIgbXVzdCBiZSBhIGJvb2xlYW4gbGl0ZXJh
bC4iKQorCisgICAgZGVmIHJlc29sdmVfdHlwZV9yZWZlcmVuY2VzKHNlbGYsIHByb3RvY29sLCBk
b21haW4pOgorICAgICAgICBsb2cuZGVidWcoIj4+PiBSZXNvbHZpbmcgdHlwZSByZWZlcmVuY2Vz
IGZvciBwYXJhbWV0ZXI6ICVzIiAlIHNlbGYucGFyYW1ldGVyX25hbWUpCisgICAgICAgIHNlbGYu
dHlwZSA9IHByb3RvY29sLmxvb2t1cF90eXBlX3JlZmVyZW5jZShzZWxmLnR5cGVfcmVmLCBkb21h
aW4pCisKKworY2xhc3MgQ29tbWFuZDoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY29tbWFuZF9u
YW1lLCBjYWxsX3BhcmFtZXRlcnMsIHJldHVybl9wYXJhbWV0ZXJzLCBkZXNjcmlwdGlvbiwgaXNf
YXN5bmMpOgorICAgICAgICBzZWxmLmNvbW1hbmRfbmFtZSA9IGNvbW1hbmRfbmFtZQorICAgICAg
ICBzZWxmLmNhbGxfcGFyYW1ldGVycyA9IGNhbGxfcGFyYW1ldGVycworICAgICAgICBzZWxmLnJl
dHVybl9wYXJhbWV0ZXJzID0gcmV0dXJuX3BhcmFtZXRlcnMKKyAgICAgICAgc2VsZi5kZXNjcmlw
dGlvbiA9IGRlc2NyaXB0aW9uCisgICAgICAgIHNlbGYuaXNfYXN5bmMgPSBpc19hc3luYworCisg
ICAgZGVmIHJlc29sdmVfdHlwZV9yZWZlcmVuY2VzKHNlbGYsIHByb3RvY29sLCBkb21haW4pOgor
ICAgICAgICBsb2cuZGVidWcoIj4+IFJlc29sdmluZyB0eXBlIHJlZmVyZW5jZXMgZm9yIGNhbGwg
cGFyYW1ldGVycyBpbiBjb21tYW5kOiAlcyIgJSBzZWxmLmNvbW1hbmRfbmFtZSkKKyAgICAgICAg
Zm9yIHBhcmFtZXRlciBpbiBzZWxmLmNhbGxfcGFyYW1ldGVyczoKKyAgICAgICAgICAgIHBhcmFt
ZXRlci5yZXNvbHZlX3R5cGVfcmVmZXJlbmNlcyhwcm90b2NvbCwgZG9tYWluKQorCisgICAgICAg
IGxvZy5kZWJ1ZygiPj4gUmVzb2x2aW5nIHR5cGUgcmVmZXJlbmNlcyBmb3IgcmV0dXJuIHBhcmFt
ZXRlcnMgaW4gY29tbWFuZDogJXMiICUgc2VsZi5jb21tYW5kX25hbWUpCisgICAgICAgIGZvciBw
YXJhbWV0ZXIgaW4gc2VsZi5yZXR1cm5fcGFyYW1ldGVyczoKKyAgICAgICAgICAgIHBhcmFtZXRl
ci5yZXNvbHZlX3R5cGVfcmVmZXJlbmNlcyhwcm90b2NvbCwgZG9tYWluKQorCisKK2NsYXNzIEV2
ZW50OgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBldmVudF9uYW1lLCBldmVudF9wYXJhbWV0ZXJz
LCBkZXNjcmlwdGlvbik6CisgICAgICAgIHNlbGYuZXZlbnRfbmFtZSA9IGV2ZW50X25hbWUKKyAg
ICAgICAgc2VsZi5ldmVudF9wYXJhbWV0ZXJzID0gZXZlbnRfcGFyYW1ldGVycworICAgICAgICBz
ZWxmLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb24KKworICAgIGRlZiByZXNvbHZlX3R5cGVfcmVm
ZXJlbmNlcyhzZWxmLCBwcm90b2NvbCwgZG9tYWluKToKKyAgICAgICAgbG9nLmRlYnVnKCI+PiBS
ZXNvbHZpbmcgdHlwZSByZWZlcmVuY2VzIGZvciBwYXJhbWV0ZXJzIGluIGV2ZW50OiAlcyIgJSBz
ZWxmLmV2ZW50X25hbWUpCisgICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gc2VsZi5ldmVudF9wYXJh
bWV0ZXJzOgorICAgICAgICAgICAgcGFyYW1ldGVyLnJlc29sdmVfdHlwZV9yZWZlcmVuY2VzKHBy
b3RvY29sLCBkb21haW4pCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5IGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yZmQ2ZGZiZTczZGEzZmU0ZjJlMWE0YzNk
MWVhYjQ1NWQ4NzhjZTZiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQpAQCAtMCwwICsxLDE4NiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdo
dCAoYykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAo
YykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisj
CisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisj
CisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisjIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisjIFRoaXMgc2NyaXB0IGdl
bmVyYXRlcyBKUyBhbmQgQysrIGJpbmRpbmdzIGZvciB0aGUgaW5zcGVjdG9yIHByb3RvY29sLgor
IyBHZW5lcmF0b3JzIGZvciBpbmRpdmlkdWFsIGZpbGVzIGFyZSBsb2NhdGVkIGluIHRoZSBjb2Rl
Z2VuLyBkaXJlY3RvcnkuCisKK2ltcG9ydCBvcy5wYXRoCitpbXBvcnQgcmUKK2ltcG9ydCBzeXMK
K2ltcG9ydCBzdHJpbmcKK2Zyb20gc3RyaW5nIGltcG9ydCBUZW1wbGF0ZQoraW1wb3J0IG9wdHBh
cnNlCitpbXBvcnQgbG9nZ2luZworCit0cnk6CisgICAgaW1wb3J0IGpzb24KK2V4Y2VwdCBJbXBv
cnRFcnJvcjoKKyAgICBpbXBvcnQgc2ltcGxlanNvbiBhcyBqc29uCisKK3RyeToKKyAgICBmcm9t
IGNvZGVnZW4gaW1wb3J0ICoKKworIyBXaGVuIGNvcHlpbmcgZ2VuZXJhdG9yIGZpbGVzIHRvIEph
dmFTY3JpcHRDb3JlJ3MgcHJpdmF0ZSBoZWFkZXJzIG9uIE1hYywKKyMgdGhlIGNvZGVnZW4vIG1v
ZHVsZSBkaXJlY3RvcnkgaXMgZmxhdHRlbmVkLiBTbywgaW1wb3J0IGRpcmVjdGx5LgorZXhjZXB0
IEltcG9ydEVycm9yOgorICAgIGltcG9ydCBtb2RlbHMKKyAgICBmcm9tIG1vZGVscyBpbXBvcnQg
KgorICAgIGZyb20gZ2VuZXJhdG9yIGltcG9ydCAqCisKKyAgICBmcm9tIGdlbmVyYXRlX2JhY2tl
bmRfY29tbWFuZHMgaW1wb3J0ICoKKyAgICBmcm9tIGdlbmVyYXRlX2JhY2tlbmRfZGlzcGF0Y2hl
cl9oZWFkZXIgaW1wb3J0ICoKKyAgICBmcm9tIGdlbmVyYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9p
bXBsZW1lbnRhdGlvbiBpbXBvcnQgKgorICAgIGZyb20gZ2VuZXJhdGVfZnJvbnRlbmRfZGlzcGF0
Y2hlcl9oZWFkZXIgaW1wb3J0ICoKKyAgICBmcm9tIGdlbmVyYXRlX2Zyb250ZW5kX2Rpc3BhdGNo
ZXJfaW1wbGVtZW50YXRpb24gaW1wb3J0ICoKKyAgICBmcm9tIGdlbmVyYXRlX3R5cGVfYnVpbGRl
cl9oZWFkZXIgaW1wb3J0ICoKKyAgICBmcm9tIGdlbmVyYXRlX3R5cGVfYnVpbGRlcl9pbXBsZW1l
bnRhdGlvbiBpbXBvcnQgKgorCisKK2xvZ2dpbmcuYmFzaWNDb25maWcoZm9ybWF0PSclKGxldmVs
bmFtZSlzOiAlKG1lc3NhZ2UpcycsIGxldmVsPWxvZ2dpbmcuRVJST1IpCitsb2cgPSBsb2dnaW5n
LmdldExvZ2dlcignZ2xvYmFsJykKKworCisjIEEgd3JpdGVyIHRoYXQgb25seSB1cGRhdGVzIGZp
bGUgaWYgaXQgYWN0dWFsbHkgY2hhbmdlZC4KK2NsYXNzIEluY3JlbWVudGFsRmlsZVdyaXRlcjoK
KyAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZXBhdGgsIGZvcmNlX291dHB1dCk6CisgICAgICAg
IHNlbGYuX2ZpbGVwYXRoID0gZmlsZXBhdGgKKyAgICAgICAgc2VsZi5fb3V0cHV0ID0gIiIKKyAg
ICAgICAgc2VsZi5mb3JjZV9vdXRwdXQgPSBmb3JjZV9vdXRwdXQKKworICAgIGRlZiB3cml0ZShz
ZWxmLCB0ZXh0KToKKyAgICAgICAgc2VsZi5fb3V0cHV0ICs9IHRleHQKKworICAgIGRlZiBjbG9z
ZShzZWxmKToKKyAgICAgICAgdGV4dF9jaGFuZ2VkID0gVHJ1ZQorICAgICAgICBzZWxmLl9vdXRw
dXQgPSBzZWxmLl9vdXRwdXQucnN0cmlwKCkgKyAiXG4iCisKKyAgICAgICAgdHJ5OgorICAgICAg
ICAgICAgaWYgc2VsZi5mb3JjZV9vdXRwdXQ6CisgICAgICAgICAgICAgICAgcmFpc2UKKworICAg
ICAgICAgICAgcmVhZF9maWxlID0gb3BlbihzZWxmLl9maWxlcGF0aCwgInIiKQorICAgICAgICAg
ICAgb2xkX3RleHQgPSByZWFkX2ZpbGUucmVhZCgpCisgICAgICAgICAgICByZWFkX2ZpbGUuY2xv
c2UoKQorICAgICAgICAgICAgdGV4dF9jaGFuZ2VkID0gb2xkX3RleHQgIT0gc2VsZi5fb3V0cHV0
CisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICMgSWdub3JlLCBqdXN0IG92ZXJ3cml0ZSBi
eSBkZWZhdWx0CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgaWYgdGV4dF9jaGFuZ2VkIG9y
IHNlbGYuZm9yY2Vfb3V0cHV0OgorICAgICAgICAgICAgb3V0X2ZpbGUgPSBvcGVuKHNlbGYuX2Zp
bGVwYXRoLCAidyIpCisgICAgICAgICAgICBvdXRfZmlsZS53cml0ZShzZWxmLl9vdXRwdXQpCisg
ICAgICAgICAgICBvdXRfZmlsZS5jbG9zZSgpCisKKworZGVmIGdlbmVyYXRlX2Zyb21fc3BlY2lm
aWNhdGlvbihwcmltYXJ5X3NwZWNpZmljYXRpb25fZmlsZXBhdGg9Tm9uZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3VwcGxlbWVudGFsX3NwZWNpZmljYXRpb25fZmlsZXBhdGhz
PVtdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25jYXRlbmF0ZV9vdXRwdXQ9
RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9kaXJwYXRoPU5v
bmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmNlX291dHB1dD1GYWxzZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWV3b3JrX25hbWU9IiIpOgorCisg
ICAgZGVmIGxvYWRfc3BlY2lmaWNhdGlvbihwcm90b2NvbCwgZmlsZXBhdGgsIGlzU3VwcGxlbWVu
dGFsPUZhbHNlKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2l0aCBvcGVuKGZpbGVwYXRo
LCAiciIpIGFzIGlucHV0X2ZpbGU6CisgICAgICAgICAgICAgICAgcGFyc2VkX2pzb24gPSBqc29u
LmxvYWQoaW5wdXRfZmlsZSkKKyAgICAgICAgICAgICAgICBwcm90b2NvbC5wYXJzZV9zcGVjaWZp
Y2F0aW9uKHBhcnNlZF9qc29uLCBpc1N1cHBsZW1lbnRhbCkKKyAgICAgICAgZXhjZXB0IFZhbHVl
RXJyb3IgYXMgZToKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiRXJyb3IgcGFyc2luZyB2
YWxpZCBKU09OIGluIGZpbGU6ICIgKyBmaWxlcGF0aCkKKworICAgIHByb3RvY29sID0gbW9kZWxz
LlByb3RvY29sKGZyYW1ld29ya19uYW1lKQorICAgIGZvciBzcGVjaWZpY2F0aW9uIGluIHN1cHBs
ZW1lbnRhbF9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRoczoKKyAgICAgICAgbG9hZF9zcGVjaWZpY2F0
aW9uKHByb3RvY29sLCBzcGVjaWZpY2F0aW9uLCBpc1N1cHBsZW1lbnRhbD1UcnVlKQorICAgIGxv
YWRfc3BlY2lmaWNhdGlvbihwcm90b2NvbCwgcHJpbWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRo
LCBpc1N1cHBsZW1lbnRhbD1GYWxzZSkKKworICAgIHByb3RvY29sLnJlc29sdmVfdHlwZXMoKQor
CisgICAgZ2VuZXJhdG9ycyA9IFtdCisgICAgZ2VuZXJhdG9ycy5hcHBlbmQoQmFja2VuZENvbW1h
bmRzR2VuZXJhdG9yKHByb3RvY29sLCBwcmltYXJ5X3NwZWNpZmljYXRpb25fZmlsZXBhdGgpKQor
ICAgIGdlbmVyYXRvcnMuYXBwZW5kKEJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yKHBy
b3RvY29sLCBwcmltYXJ5X3NwZWNpZmljYXRpb25fZmlsZXBhdGgpKQorICAgIGdlbmVyYXRvcnMu
YXBwZW5kKEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IocHJvdG9jb2ws
IHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aCkpCisgICAgZ2VuZXJhdG9ycy5hcHBlbmQo
RnJvbnRlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yKHByb3RvY29sLCBwcmltYXJ5X3NwZWNp
ZmljYXRpb25fZmlsZXBhdGgpKQorICAgIGdlbmVyYXRvcnMuYXBwZW5kKEZyb250ZW5kRGlzcGF0
Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKHByb3RvY29sLCBwcmltYXJ5X3NwZWNpZmljYXRp
b25fZmlsZXBhdGgpKQorICAgIGdlbmVyYXRvcnMuYXBwZW5kKFR5cGVCdWlsZGVySGVhZGVyR2Vu
ZXJhdG9yKHByb3RvY29sLCBwcmltYXJ5X3NwZWNpZmljYXRpb25fZmlsZXBhdGgpKQorICAgIGdl
bmVyYXRvcnMuYXBwZW5kKFR5cGVCdWlsZGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IocHJvdG9j
b2wsIHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aCkpCisKKyAgICBzaW5nbGVfb3V0cHV0
X2ZpbGVfY29udGVudHMgPSBbXQorCisgICAgZm9yIGdlbmVyYXRvciBpbiBnZW5lcmF0b3JzOgor
ICAgICAgICBvdXRwdXQgPSBnZW5lcmF0b3IuZ2VuZXJhdGVfb3V0cHV0KCkKKyAgICAgICAgaWYg
Y29uY2F0ZW5hdGVfb3V0cHV0OgorICAgICAgICAgICAgc2luZ2xlX291dHB1dF9maWxlX2NvbnRl
bnRzLmFwcGVuZCgnIyMjIEJlZ2luIEZpbGU6ICVzJyAlIGdlbmVyYXRvci5vdXRwdXRfZmlsZW5h
bWUoKSkKKyAgICAgICAgICAgIHNpbmdsZV9vdXRwdXRfZmlsZV9jb250ZW50cy5hcHBlbmQob3V0
cHV0KQorICAgICAgICAgICAgc2luZ2xlX291dHB1dF9maWxlX2NvbnRlbnRzLmFwcGVuZCgnIyMj
IEVuZCBGaWxlOiAlcycgJSBnZW5lcmF0b3Iub3V0cHV0X2ZpbGVuYW1lKCkpCisgICAgICAgICAg
ICBzaW5nbGVfb3V0cHV0X2ZpbGVfY29udGVudHMuYXBwZW5kKCcnKQorICAgICAgICBlbHNlOgor
ICAgICAgICAgICAgb3V0cHV0X2ZpbGUgPSBJbmNyZW1lbnRhbEZpbGVXcml0ZXIob3MucGF0aC5q
b2luKG91dHB1dF9kaXJwYXRoLCBnZW5lcmF0b3Iub3V0cHV0X2ZpbGVuYW1lKCkpLCBmb3JjZV9v
dXRwdXQpCisgICAgICAgICAgICBvdXRwdXRfZmlsZS53cml0ZShvdXRwdXQpCisgICAgICAgICAg
ICBvdXRwdXRfZmlsZS5jbG9zZSgpCisKKyAgICBpZiBjb25jYXRlbmF0ZV9vdXRwdXQ6CisgICAg
ICAgIGZpbGVuYW1lID0gb3MucGF0aC5qb2luKG9zLnBhdGguYmFzZW5hbWUocHJpbWFyeV9zcGVj
aWZpY2F0aW9uX2ZpbGVwYXRoKSArICctcmVzdWx0JykKKyAgICAgICAgb3V0cHV0X2ZpbGUgPSBJ
bmNyZW1lbnRhbEZpbGVXcml0ZXIob3MucGF0aC5qb2luKG91dHB1dF9kaXJwYXRoLCBmaWxlbmFt
ZSksIGZvcmNlX291dHB1dCkKKyAgICAgICAgb3V0cHV0X2ZpbGUud3JpdGUoJ1xuJy5qb2luKHNp
bmdsZV9vdXRwdXRfZmlsZV9jb250ZW50cykpCisgICAgICAgIG91dHB1dF9maWxlLmNsb3NlKCkK
KworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIGFsbG93ZWRfZnJhbWV3b3JrX25h
bWVzID0gWydXVEYnLCAnSmF2YVNjcmlwdENvcmUnLCAnV2ViQ29yZScsICdXZWJLaXQnLCAnV2Vi
S2l0MicsICdUZXN0J10KKyAgICBjbGlfcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKHVz
YWdlPSJ1c2FnZTogJXByb2cgW29wdGlvbnNdIFByaW1hcnlQcm90b2NvbC5qc29uIFtTdXBwbGVt
ZW50YWxQcm90b2NvbC5qc29uIC4uLl0iKQorICAgIGNsaV9wYXJzZXIuYWRkX29wdGlvbigiLW8i
LCAiLS1vdXRwdXREaXIiLCBoZWxwPSJEaXJlY3Rvcnkgd2hlcmUgZ2VuZXJhdGVkIGZpbGVzIHNo
b3VsZCBiZSB3cml0dGVuLiIpCisgICAgY2xpX3BhcnNlci5hZGRfb3B0aW9uKCItLWZyYW1ld29y
ayIsIHR5cGU9ImNob2ljZSIsIGNob2ljZXM9YWxsb3dlZF9mcmFtZXdvcmtfbmFtZXMsIGhlbHA9
IlRoZSBmcmFtZXdvcmsgdGhhdCB0aGUgcHJpbWFyeSBzcGVjaWZpY2F0aW9uIGJlbG9uZ3MgdG8u
IikKKyAgICBjbGlfcGFyc2VyLmFkZF9vcHRpb24oIi0tZm9yY2UiLCBhY3Rpb249InN0b3JlX3Ry
dWUiLCBoZWxwPSJGb3JjZSBvdXRwdXQgb2YgZ2VuZXJhdGVkIHNjcmlwdHMsIGV2ZW4gaWYgbm90
aGluZyBjaGFuZ2VkLiIpCisgICAgY2xpX3BhcnNlci5hZGRfb3B0aW9uKCItdiIsICItLWRlYnVn
IiwgYWN0aW9uPSJzdG9yZV90cnVlIiwgaGVscD0iTG9nIGV4dHJhIG91dHB1dCBmb3IgZGVidWdn
aW5nIHRoZSBnZW5lcmF0b3IgaXRzZWxmLiIpCisgICAgY2xpX3BhcnNlci5hZGRfb3B0aW9uKCIt
dCIsICItLXRlc3QiLCBhY3Rpb249InN0b3JlX3RydWUiLCBoZWxwPSJFbmFibGUgdGVzdCBtb2Rl
LiBVc2UgdW5pcXVlIG91dHB1dCBmaWxlbmFtZXMgY3JlYXRlZCBieSBwcmVwZW5kaW5nIHRoZSBp
bnB1dCBmaWxlbmFtZS4iKQorCisgICAgb3B0aW9ucyA9IE5vbmUKKworICAgIGFyZ19vcHRpb25z
LCBhcmdfdmFsdWVzID0gY2xpX3BhcnNlci5wYXJzZV9hcmdzKCkKKyAgICBpZiAobGVuKGFyZ192
YWx1ZXMpIDwgMSk6CisgICAgICAgIHJhaXNlIFBhcnNlRXhjZXB0aW9uKCJBdCBsZWFzdCBvbmUg
cGxhaW4gYXJndW1lbnQgZXhwZWN0ZWQiKQorCisgICAgaWYgbm90IGFyZ19vcHRpb25zLm91dHB1
dERpcjoKKyAgICAgICAgcmFpc2UgUGFyc2VFeGNlcHRpb24oIk1pc3Npbmcgb3V0cHV0IGRpcmVj
dG9yeSIpCisKKyAgICBpZiBhcmdfb3B0aW9ucy5kZWJ1ZzoKKyAgICAgICAgbG9nLnNldExldmVs
KGxvZ2dpbmcuREVCVUcpCisKKyAgICBvcHRpb25zID0geworICAgICAgICAncHJpbWFyeV9zcGVj
aWZpY2F0aW9uX2ZpbGVwYXRoJzogYXJnX3ZhbHVlc1swXSwKKyAgICAgICAgJ3N1cHBsZW1lbnRh
bF9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRocyc6IGFyZ192YWx1ZXNbMTpdLAorICAgICAgICAnb3V0
cHV0X2RpcnBhdGgnOiBhcmdfb3B0aW9ucy5vdXRwdXREaXIsCisgICAgICAgICdjb25jYXRlbmF0
ZV9vdXRwdXQnOiBhcmdfb3B0aW9ucy50ZXN0LAorICAgICAgICAnZnJhbWV3b3JrX25hbWUnOiBh
cmdfb3B0aW9ucy5mcmFtZXdvcmssCisgICAgICAgICdmb3JjZV9vdXRwdXQnOiBhcmdfb3B0aW9u
cy5mb3JjZQorICAgIH0KKworICAgIHRyeToKKyAgICAgICAgZ2VuZXJhdGVfZnJvbV9zcGVjaWZp
Y2F0aW9uKCoqb3B0aW9ucykKKyAgICBleGNlcHQgKFBhcnNlRXhjZXB0aW9uLCBUeXBlY2hlY2tF
eGNlcHRpb24pIGFzIGU6CisgICAgICAgIGlmIGFyZ19vcHRpb25zLnRlc3Q6CisgICAgICAgICAg
ICBsb2cuZXJyb3IoZS5tZXNzYWdlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2Ug
ICMgRm9yY2UgdGhlIGJ1aWxkIHRvIGZhaWwuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1
dGUuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9j
b21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU2MWI1Y2VhYjE0
YzdhYzM3ZWU1MWE5YmQ3YzkyMDNmYzViYWIxMGIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvY29tbWFuZHMtd2l0aC1hc3lu
Yy1hdHRyaWJ1dGUuanNvbgpAQCAtMCwwICsxLDEwMCBAQAoreworICAgICJkb21haW4iOiAiRGF0
YWJhc2UiLAorICAgICJ0eXBlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIkRh
dGFiYXNlSWQiLAorICAgICAgICAgICAgInR5cGUiOiAiaW50ZWdlciIsCisgICAgICAgICAgICAi
ZGVzY3JpcHRpb24iOiAiVW5pcXVlIGlkZW50aWZpZXIgb2YgRGF0YWJhc2Ugb2JqZWN0LiIKKyAg
ICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIlByaW1hcnlDb2xvcnMiLAor
ICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKKyAgICAgICAgICAgICJlbnVtIjogWyJyZWQi
LCAiZ3JlZW4iLCAiYmx1ZSJdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJp
ZCI6ICJFcnJvciIsCisgICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAorICAgICAgICAgICAg
ImRlc2NyaXB0aW9uIjogIkRhdGFiYXNlIGVycm9yLiIsCisgICAgICAgICAgICAicHJvcGVydGll
cyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm1lc3NhZ2UiLCAidHlwZSI6ICJzdHJp
bmciLCAiZGVzY3JpcHRpb24iOiAiRXJyb3IgbWVzc2FnZS4iIH0sCisgICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJjb2RlIiwgInR5cGUiOiAiaW50ZWdlciIsICJkZXNjcmlwdGlvbiI6ICJFcnJv
ciBjb2RlLiIgfQorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXSwKKyAgICAiY29tbWFu
ZHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImV4ZWN1dGVTUUxTeW5jT3B0
aW9uYWxSZXR1cm5WYWx1ZXMiLAorICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCisgICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJkYXRhYmFzZUlkIiwgIiRyZWYiOiAiRGF0YWJhc2VJZCIgfSwK
KyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInF1ZXJ5IiwgInR5cGUiOiAic3RyaW5nIiB9Cisg
ICAgICAgICAgICBdLAorICAgICAgICAgICAgInJldHVybnMiOiBbCisgICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogImFycmF5IiwgIm9wdGlvbmFsIjogdHJ1
ZSwgIml0ZW1zIjogeyAidHlwZSI6ICJzdHJpbmciIH0gfSwKKyAgICAgICAgICAgICAgICB7ICJu
YW1lIjogIm5vdGVzIiwgInR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAidGltZXN0YW1wIiwgInR5cGUiOiAibnVtYmVyIiwgIm9w
dGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidmFsdWVzIiwgInR5
cGUiOiAib2JqZWN0IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAicGF5bG9hZCIsICJ0eXBlIjogImFueSIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogImRhdGFiYXNlSWQiLCAiJHJlZiI6ICJEYXRhYmFzZUlkIiwg
Im9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic3FsRXJyb3Ii
LCAiJHJlZiI6ICJFcnJvciIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7
ICJuYW1lIjogInNjcmVlbkNvbG9yIiwgIiRyZWYiOiAiUHJpbWFyeUNvbG9ycyIsICJvcHRpb25h
bCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInByaW50Q29sb3IiLCAidHlw
ZSI6ICJzdHJpbmciLCAiZW51bSI6IFsiY3lhbiIsICJtYWdlbnRhIiwgInllbGxvdyIsICJibGFj
ayJdLCAib3B0aW9uYWwiOiB0cnVlIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAg
ICAgeworICAgICAgICAgICAgIm5hbWUiOiAiZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5W
YWx1ZXMiLAorICAgICAgICAgICAgImFzeW5jIjogdHJ1ZSwKKyAgICAgICAgICAgICJwYXJhbWV0
ZXJzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZGF0YWJhc2VJZCIsICIkcmVmIjog
IkRhdGFiYXNlSWQiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJxdWVyeSIsICJ0eXBl
IjogInN0cmluZyIgfQorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICJyZXR1cm5zIjogWwor
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJhcnJheSIs
ICJvcHRpb25hbCI6IHRydWUsICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9IH0sCisgICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25h
bCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBl
IjogIm51bWJlciIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1l
IjogInZhbHVlcyIsICJ0eXBlIjogIm9iamVjdCIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJhbnkiLCAib3B0aW9uYWwi
OiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJkYXRhYmFzZUlkIiwgIiRyZWYi
OiAiRGF0YWJhc2VJZCIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJu
YW1lIjogInNxbEVycm9yIiwgIiRyZWYiOiAiRXJyb3IiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisg
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzY3JlZW5Db2xvciIsICIkcmVmIjogIlByaW1hcnlD
b2xvcnMiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJw
cmludENvbG9yIiwgInR5cGUiOiAic3RyaW5nIiwgImVudW0iOiBbImN5YW4iLCAibWFnZW50YSIs
ICJ5ZWxsb3ciLCAiYmxhY2siXSwgIm9wdGlvbmFsIjogdHJ1ZSB9CisgICAgICAgICAgICBdCisg
ICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImV4ZWN1dGVTUUxTeW5j
IiwKKyAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAiZGF0YWJhc2VJZCIsICIkcmVmIjogIkRhdGFiYXNlSWQiIH0sCisgICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJxdWVyeSIsICJ0eXBlIjogInN0cmluZyIgfQorICAgICAgICAgICAgXSwKKyAg
ICAgICAgICAgICJyZXR1cm5zIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29sdW1u
TmFtZXMiLCAidHlwZSI6ICJhcnJheSIsICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9IH0s
CisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIgfSwK
KyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciIg
fSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInZhbHVlcyIsICJ0eXBlIjogIm9iamVjdCIg
fSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJhbnkiIH0s
CisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJkYXRhYmFzZUlkIiwgIiRyZWYiOiAiRGF0YWJh
c2VJZCIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNxbEVycm9yIiwgIiRyZWYiOiAi
RXJyb3IiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzY3JlZW5Db2xvciIsICIkcmVm
IjogIlByaW1hcnlDb2xvcnMiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwcmludENv
bG9yIiwgInR5cGUiOiAic3RyaW5nIiwgImVudW0iOiBbImN5YW4iLCAibWFnZW50YSIsICJ5ZWxs
b3ciLCAiYmxhY2siXSB9CisgICAgICAgICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAg
ICAgICAgICAgICJuYW1lIjogImV4ZWN1dGVTUUxBc3luYyIsCisgICAgICAgICAgICAiYXN5bmMi
OiB0cnVlLAorICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCisgICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJkYXRhYmFzZUlkIiwgIiRyZWYiOiAiRGF0YWJhc2VJZCIgfSwKKyAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogInF1ZXJ5IiwgInR5cGUiOiAic3RyaW5nIiB9CisgICAgICAgICAgICBd
LAorICAgICAgICAgICAgInJldHVybnMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJj
b2x1bW5OYW1lcyIsICJ0eXBlIjogImFycmF5IiwgIml0ZW1zIjogeyAidHlwZSI6ICJzdHJpbmci
IH0gfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm5vdGVzIiwgInR5cGUiOiAic3RyaW5n
IiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidGltZXN0YW1wIiwgInR5cGUiOiAibnVt
YmVyIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidmFsdWVzIiwgInR5cGUiOiAib2Jq
ZWN0IiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicGF5bG9hZCIsICJ0eXBlIjogImFu
eSIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImRhdGFiYXNlSWQiLCAiJHJlZiI6ICJE
YXRhYmFzZUlkIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic3FsRXJyb3IiLCAiJHJl
ZiI6ICJFcnJvciIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNjcmVlbkNvbG9yIiwg
IiRyZWYiOiAiUHJpbWFyeUNvbG9ycyIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBy
aW50Q29sb3IiLCAidHlwZSI6ICJzdHJpbmciLCAiZW51bSI6IFsiY3lhbiIsICJtYWdlbnRhIiwg
InllbGxvdyIsICJibGFjayJdIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0KK30K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9jb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbiBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9jb21tYW5kcy13aXRo
LW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zODU2MWU3
MzQ1NzU1N2I5NTBjYWJjY2RjMmU5OWE5YTNjMTkzNDBjCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2NvbW1hbmRzLXdpdGgt
b3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uCkBAIC0wLDAgKzEsNzYgQEAKK3sK
KyAgICAiZG9tYWluIjogIkRhdGFiYXNlIiwKKyAgICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAg
ICAgICAgICAgICJpZCI6ICJEYXRhYmFzZUlkIiwKKyAgICAgICAgICAgICJ0eXBlIjogImludGVn
ZXIiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBpZGVudGlmaWVyIG9mIERh
dGFiYXNlIG9iamVjdC4iCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6
ICJQcmltYXJ5Q29sb3JzIiwKKyAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCisgICAgICAg
ICAgICAiZW51bSI6IFsicmVkIiwgImdyZWVuIiwgImJsdWUiXQorICAgICAgICB9LAorICAgICAg
ICB7CisgICAgICAgICAgICAiaWQiOiAiRXJyb3IiLAorICAgICAgICAgICAgInR5cGUiOiAib2Jq
ZWN0IiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJEYXRhYmFzZSBlcnJvci4iLAorICAg
ICAgICAgICAgInByb3BlcnRpZXMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJtZXNz
YWdlIiwgInR5cGUiOiAic3RyaW5nIiwgImRlc2NyaXB0aW9uIjogIkVycm9yIG1lc3NhZ2UuIiB9
LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29kZSIsICJ0eXBlIjogImludGVnZXIiLCAi
ZGVzY3JpcHRpb24iOiAiRXJyb3IgY29kZS4iIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQor
ICAgIF0sCisgICAgImNvbW1hbmRzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6
ICJleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzIiwKKyAgICAgICAgICAgICJwYXJhbWV0ZXJz
IjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJh
cnJheSIsICJvcHRpb25hbCI6IHRydWUsICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9IH0s
CisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIsICJv
cHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRpbWVzdGFtcCIs
ICJ0eXBlIjogIm51bWJlciIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7
ICJuYW1lIjogInZhbHVlcyIsICJ0eXBlIjogIm9iamVjdCIsICJvcHRpb25hbCI6IHRydWUgfSwK
KyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJhbnkiLCAib3B0
aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJkYXRhYmFzZUlkIiwg
IiRyZWYiOiAiRGF0YWJhc2VJZCIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogInNxbEVycm9yIiwgIiRyZWYiOiAiRXJyb3IiLCAib3B0aW9uYWwiOiB0cnVl
IH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzY3JlZW5Db2xvciIsICIkcmVmIjogIlBy
aW1hcnlDb2xvcnMiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJwcmludENvbG9yIiwgInR5cGUiOiAic3RyaW5nIiwgImVudW0iOiBbImN5YW4iLCAibWFn
ZW50YSIsICJ5ZWxsb3ciLCAiYmxhY2siXSwgIm9wdGlvbmFsIjogdHJ1ZSB9CisgICAgICAgICAg
ICBdLAorICAgICAgICAgICAgInJldHVybnMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogImFycmF5IiwgIm9wdGlvbmFsIjogdHJ1ZSwgIml0ZW1z
IjogeyAidHlwZSI6ICJzdHJpbmciIH0gfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm5v
dGVzIiwgInR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAidGltZXN0YW1wIiwgInR5cGUiOiAibnVtYmVyIiwgIm9wdGlvbmFsIjog
dHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidmFsdWVzIiwgInR5cGUiOiAib2Jq
ZWN0IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicGF5
bG9hZCIsICJ0eXBlIjogImFueSIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogImRhdGFiYXNlSWQiLCAiJHJlZiI6ICJEYXRhYmFzZUlkIiwgIm9wdGlvbmFs
IjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic3FsRXJyb3IiLCAiJHJlZiI6
ICJFcnJvciIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjog
InNjcmVlbkNvbG9yIiwgIiRyZWYiOiAiUHJpbWFyeUNvbG9ycyIsICJvcHRpb25hbCI6IHRydWUg
fSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInByaW50Q29sb3IiLCAidHlwZSI6ICJzdHJp
bmciLCAiZW51bSI6IFsiY3lhbiIsICJtYWdlbnRhIiwgInllbGxvdyIsICJibGFjayJdLCAib3B0
aW9uYWwiOiB0cnVlIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAg
ICAgICAgICAgIm5hbWUiOiAiZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzIiwKKyAgICAgICAg
ICAgICJwYXJhbWV0ZXJzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29sdW1uTmFt
ZXMiLCAidHlwZSI6ICJhcnJheSIsICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9IH0sCisg
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIgfSwKKyAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciIgfSwK
KyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInZhbHVlcyIsICJ0eXBlIjogIm9iamVjdCIgfSwK
KyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJhbnkiIH0sCisg
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJkYXRhYmFzZUlkIiwgIiRyZWYiOiAiRGF0YWJhc2VJ
ZCIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNxbEVycm9yIiwgIiRyZWYiOiAiRXJy
b3IiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzY3JlZW5Db2xvciIsICIkcmVmIjog
IlByaW1hcnlDb2xvcnMiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwcmludENvbG9y
IiwgInR5cGUiOiAic3RyaW5nIiwgImVudW0iOiBbImN5YW4iLCAibWFnZW50YSIsICJ5ZWxsb3ci
LCAiYmxhY2siXSB9CisgICAgICAgICAgICBdLAorICAgICAgICAgICAgInJldHVybnMiOiBbCisg
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogImFycmF5Iiwg
Iml0ZW1zIjogeyAidHlwZSI6ICJzdHJpbmciIH0gfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1l
IjogIm5vdGVzIiwgInR5cGUiOiAic3RyaW5nIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAidGltZXN0YW1wIiwgInR5cGUiOiAibnVtYmVyIiB9LAorICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAidmFsdWVzIiwgInR5cGUiOiAib2JqZWN0IiB9LAorICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAicGF5bG9hZCIsICJ0eXBlIjogImFueSIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1l
IjogImRhdGFiYXNlSWQiLCAiJHJlZiI6ICJEYXRhYmFzZUlkIiB9LAorICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAic3FsRXJyb3IiLCAiJHJlZiI6ICJFcnJvciIgfSwKKyAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogInNjcmVlbkNvbG9yIiwgIiRyZWYiOiAiUHJpbWFyeUNvbG9ycyIgfSwKKyAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogInByaW50Q29sb3IiLCAidHlwZSI6ICJzdHJpbmciLCAi
ZW51bSI6IFsiY3lhbiIsICJtYWdlbnRhIiwgInllbGxvdyIsICJibGFjayJdIH0KKyAgICAgICAg
ICAgIF0KKyAgICAgICAgfQorICAgIF0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9kb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5k
LXNpemVzLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk0
YThlY2IxNzZkM2I4ZWM5YmY5NjY3NmU2M2NlYTA1MTQ2NmI4NjgKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZG9tYWlucy13
aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCkBAIC0wLDAgKzEsNTQgQEAKK1sKK3sKKyAg
ICAiZG9tYWluIjogIk5ldHdvcmsxIiwKKyAgICAiY29tbWFuZHMiOiBbCisgICAgICAgIHsKKyAg
ICAgICAgICAgICJuYW1lIjogImxvYWRSZXNvdXJjZTEiLAorICAgICAgICAgICAgImRlc2NyaXB0
aW9uIjogIkxvYWRzIGEgcmVzb3VyY2UgaW4gdGhlIGNvbnRleHQgb2YgYSBmcmFtZSBvbiB0aGUg
aW5zcGVjdGVkIHBhZ2Ugd2l0aG91dCBjcm9zcyBvcmlnaW4gY2hlY2tzLiIKKyAgICAgICAgfQor
ICAgIF0KK30sCit7CisgICAgImRvbWFpbiI6ICJOZXR3b3JrMiIsCisgICAgInR5cGVzIjogWwor
ICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiTG9hZGVySWQiLAorICAgICAgICAgICAgInR5
cGUiOiAic3RyaW5nIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUgbG9hZGVy
IGlkZW50aWZpZXIuIgorICAgICAgICB9CisgICAgXQorfSwKK3sKKyAgICAiZG9tYWluIjogIk5l
dHdvcmszIiwKKyAgICAiY29tbWFuZHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1l
IjogImxvYWRSZXNvdXJjZTEiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkxvYWRzIGEg
cmVzb3VyY2UgaW4gdGhlIGNvbnRleHQgb2YgYSBmcmFtZSBvbiB0aGUgaW5zcGVjdGVkIHBhZ2Ug
d2l0aG91dCBjcm9zcyBvcmlnaW4gY2hlY2tzLiIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAg
ICAgICAgICAgIm5hbWUiOiAibG9hZFJlc291cmNlMiIsCisgICAgICAgICAgICAiZGVzY3JpcHRp
b24iOiAiTG9hZHMgYSByZXNvdXJjZSBpbiB0aGUgY29udGV4dCBvZiBhIGZyYW1lIG9uIHRoZSBp
bnNwZWN0ZWQgcGFnZSB3aXRob3V0IGNyb3NzIG9yaWdpbiBjaGVja3MuIgorICAgICAgICB9LAor
ICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJsb2FkUmVzb3VyY2UzIiwKKyAgICAgICAg
ICAgICJkZXNjcmlwdGlvbiI6ICJMb2FkcyBhIHJlc291cmNlIGluIHRoZSBjb250ZXh0IG9mIGEg
ZnJhbWUgb24gdGhlIGluc3BlY3RlZCBwYWdlIHdpdGhvdXQgY3Jvc3Mgb3JpZ2luIGNoZWNrcy4i
CisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImxvYWRSZXNvdXJj
ZTQiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkxvYWRzIGEgcmVzb3VyY2UgaW4gdGhl
IGNvbnRleHQgb2YgYSBmcmFtZSBvbiB0aGUgaW5zcGVjdGVkIHBhZ2Ugd2l0aG91dCBjcm9zcyBv
cmlnaW4gY2hlY2tzLiIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUi
OiAibG9hZFJlc291cmNlNSIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiTG9hZHMgYSBy
ZXNvdXJjZSBpbiB0aGUgY29udGV4dCBvZiBhIGZyYW1lIG9uIHRoZSBpbnNwZWN0ZWQgcGFnZSB3
aXRob3V0IGNyb3NzIG9yaWdpbiBjaGVja3MuIgorICAgICAgICB9LAorICAgICAgICB7CisgICAg
ICAgICAgICAibmFtZSI6ICJsb2FkUmVzb3VyY2U2IiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlv
biI6ICJMb2FkcyBhIHJlc291cmNlIGluIHRoZSBjb250ZXh0IG9mIGEgZnJhbWUgb24gdGhlIGlu
c3BlY3RlZCBwYWdlIHdpdGhvdXQgY3Jvc3Mgb3JpZ2luIGNoZWNrcy4iCisgICAgICAgIH0sCisg
ICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImxvYWRSZXNvdXJjZTciLAorICAgICAgICAg
ICAgImRlc2NyaXB0aW9uIjogIkxvYWRzIGEgcmVzb3VyY2UgaW4gdGhlIGNvbnRleHQgb2YgYSBm
cmFtZSBvbiB0aGUgaW5zcGVjdGVkIHBhZ2Ugd2l0aG91dCBjcm9zcyBvcmlnaW4gY2hlY2tzLiIK
KyAgICAgICAgfQorICAgIF0KK30KK10KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9ldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJz
Lmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXZl
bnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVlZmM3Y2IzMTli
MGIzNmZhOTVjNDcxNDAzMDUzNzc4NjI0YWZjMTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXZlbnRzLXdpdGgtb3B0aW9u
YWwtcGFyYW1ldGVycy5qc29uCkBAIC0wLDAgKzEsNTIgQEAKK3sKKyAgICAiZG9tYWluIjogIkRh
dGFiYXNlIiwKKyAgICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJE
YXRhYmFzZUlkIiwKKyAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCisgICAgICAgICAgICAi
ZGVzY3JpcHRpb24iOiAiVW5pcXVlIGlkZW50aWZpZXIgb2YgRGF0YWJhc2Ugb2JqZWN0LiIKKyAg
ICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIlByaW1hcnlDb2xvcnMiLAor
ICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKKyAgICAgICAgICAgICJ2YWx1ZXMiOiBbInJl
ZCIsICJncmVlbiIsICJibHVlIl0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAg
ImlkIjogIkVycm9yIiwKKyAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCisgICAgICAgICAg
ICAiZGVzY3JpcHRpb24iOiAiRGF0YWJhc2UgZXJyb3IuIiwKKyAgICAgICAgICAgICJwcm9wZXJ0
aWVzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibWVzc2FnZSIsICJ0eXBlIjogInN0
cmluZyIsICJkZXNjcmlwdGlvbiI6ICJFcnJvciBtZXNzYWdlLiIgfSwKKyAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogImNvZGUiLCAidHlwZSI6ICJpbnRlZ2VyIiwgImRlc2NyaXB0aW9uIjogIkVy
cm9yIGNvZGUuIiB9CisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdLAorICAgICJldmVu
dHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImRpZEV4ZWN1dGVPcHRpb25h
bFBhcmFtZXRlcnMiLAorICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCisgICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogImFycmF5IiwgIm9wdGlvbmFsIjog
dHJ1ZSwgIml0ZW1zIjogeyAidHlwZSI6ICJzdHJpbmciIH0gfSwKKyAgICAgICAgICAgICAgICB7
ICJuYW1lIjogIm5vdGVzIiwgInR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAor
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidGltZXN0YW1wIiwgInR5cGUiOiAibnVtYmVyIiwg
Im9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidmFsdWVzIiwg
InR5cGUiOiAib2JqZWN0IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAicGF5bG9hZCIsICJ0eXBlIjogImFueSIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogInNxbEVycm9yIiwgIiRyZWYiOiAiRXJyb3IiLCAib3B0
aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzY3JlZW5Db2xvciIs
ICIkcmVmIjogIlByaW1hcnlDb2xvcnMiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJwcmludENvbG9yIiwgInR5cGUiOiAic3RyaW5nIiwgInZhbHVlcyI6
IFsiY3lhbiIsICJtYWdlbnRhIiwgInllbGxvdyIsICJibGFjayJdLCAib3B0aW9uYWwiOiB0cnVl
IH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5h
bWUiOiAiZGlkRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzIiwKKyAgICAgICAgICAgICJwYXJh
bWV0ZXJzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlw
ZSI6ICJhcnJheSIsICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9IH0sCisgICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIgfSwKKyAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciIgfSwKKyAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogInZhbHVlcyIsICJ0eXBlIjogIm9iamVjdCIgfSwKKyAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJhbnkiIH0sCisgICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJzcWxFcnJvciIsICIkcmVmIjogIkVycm9yIiB9LAorICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAic2NyZWVuQ29sb3IiLCAiJHJlZiI6ICJQcmltYXJ5Q29sb3JzIiB9
LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicHJpbnRDb2xvciIsICJ0eXBlIjogInN0cmlu
ZyIsICJ2YWx1ZXMiOiBbImN5YW4iLCAibWFnZW50YSIsICJ5ZWxsb3ciLCAiYmxhY2siXSB9Cisg
ICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvY29tbWFuZHMtd2l0
aC1hc3luYy1hdHRyaWJ1dGUuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1
dGUuanNvbi1yZXN1bHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTViN2NhZTQyYjY5YTJhNzFiOTk0OWVjMGNiZjkz
NDU1MDEzMWEyMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9jb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0
ZS5qc29uLXJlc3VsdApAQCAtMCwwICsxLDczOCBAQAorIyMjIEJlZ2luIEZpbGU6IEluc3BlY3Rv
clRlc3RCYWNrZW5kQ29tbWFuZHMuanMKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisv
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKy8vIERhdGFiYXNlLgorSW5zcGVjdG9y
QmFja2VuZC5yZWdpc3RlckRhdGFiYXNlRGlzcGF0Y2hlciA9IEluc3BlY3RvckJhY2tlbmQucmVn
aXN0ZXJEb21haW5EaXNwYXRjaGVyLmJpbmQoSW5zcGVjdG9yQmFja2VuZCwgIkRhdGFiYXNlIik7
CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRW51bSgiRGF0YWJhc2UuUHJpbWFyeUNvbG9ycyIs
IHtSZWQ6ICJyZWQiLCBHcmVlbjogImdyZWVuIiwgQmx1ZTogImJsdWUifSk7CitJbnNwZWN0b3JC
YWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiRGF0YWJhc2UuZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJl
dHVyblZhbHVlcyIsIFt7Im5hbWUiOiAiZGF0YWJhc2VJZCIsICJ0eXBlIjogIm51bWJlciIsICJv
cHRpb25hbCI6IGZhbHNlfSwgeyJuYW1lIjogInF1ZXJ5IiwgInR5cGUiOiAic3RyaW5nIiwgIm9w
dGlvbmFsIjogZmFsc2V9XSwgWyJjb2x1bW5OYW1lcyIsICJub3RlcyIsICJ0aW1lc3RhbXAiLCAi
dmFsdWVzIiwgInBheWxvYWQiLCAiZGF0YWJhc2VJZCIsICJzcWxFcnJvciIsICJzY3JlZW5Db2xv
ciIsICJwcmludENvbG9yIl0pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIkRh
dGFiYXNlLmV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzIiwgW3sibmFtZSI6ICJk
YXRhYmFzZUlkIiwgInR5cGUiOiAibnVtYmVyIiwgIm9wdGlvbmFsIjogZmFsc2V9LCB7Im5hbWUi
OiAicXVlcnkiLCAidHlwZSI6ICJzdHJpbmciLCAib3B0aW9uYWwiOiBmYWxzZX1dLCBbImNvbHVt
bk5hbWVzIiwgIm5vdGVzIiwgInRpbWVzdGFtcCIsICJ2YWx1ZXMiLCAicGF5bG9hZCIsICJkYXRh
YmFzZUlkIiwgInNxbEVycm9yIiwgInNjcmVlbkNvbG9yIiwgInByaW50Q29sb3IiXSk7CitJbnNw
ZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiRGF0YWJhc2UuZXhlY3V0ZVNRTFN5bmMiLCBb
eyJuYW1lIjogImRhdGFiYXNlSWQiLCAidHlwZSI6ICJudW1iZXIiLCAib3B0aW9uYWwiOiBmYWxz
ZX0sIHsibmFtZSI6ICJxdWVyeSIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IGZhbHNl
fV0sIFsiY29sdW1uTmFtZXMiLCAibm90ZXMiLCAidGltZXN0YW1wIiwgInZhbHVlcyIsICJwYXls
b2FkIiwgImRhdGFiYXNlSWQiLCAic3FsRXJyb3IiLCAic2NyZWVuQ29sb3IiLCAicHJpbnRDb2xv
ciJdKTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJEYXRhYmFzZS5leGVjdXRl
U1FMQXN5bmMiLCBbeyJuYW1lIjogImRhdGFiYXNlSWQiLCAidHlwZSI6ICJudW1iZXIiLCAib3B0
aW9uYWwiOiBmYWxzZX0sIHsibmFtZSI6ICJxdWVyeSIsICJ0eXBlIjogInN0cmluZyIsICJvcHRp
b25hbCI6IGZhbHNlfV0sIFsiY29sdW1uTmFtZXMiLCAibm90ZXMiLCAidGltZXN0YW1wIiwgInZh
bHVlcyIsICJwYXlsb2FkIiwgImRhdGFiYXNlSWQiLCAic3FsRXJyb3IiLCAic2NyZWVuQ29sb3Ii
LCAicHJpbnRDb2xvciJdKTsKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdEJhY2tlbmRDb21t
YW5kcy5qcworCisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVy
cy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtYXN5
bmMtYXR0cmlidXRlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQorCisjaWZuZGVmIEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnNfaAor
I2RlZmluZSBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzX2gKKworI2lmIEVOQUJMRShJ
TlNQRUNUT1IpCisKKyNpbmNsdWRlICJJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmgiCisjaW5j
bHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8
d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFt
ZXNwYWNlIEluc3BlY3RvciB7CisKK3R5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCisjaWYg
RU5BQkxFKFNRTF9EQVRBQkFTRSkKK2NsYXNzIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3Bh
dGNoZXJIYW5kbGVyIHsKK3B1YmxpYzoKKyAgICAvLyBOYW1lZCBhZnRlciBwYXJhbWV0ZXIgJ3Nj
cmVlbkNvbG9yJyB3aGlsZSBnZW5lcmF0aW5nIGNvbW1hbmQvZXZlbnQgZXhlY3V0ZVNRTFN5bmNP
cHRpb25hbFJldHVyblZhbHVlcy4KKyAgICBlbnVtIGNsYXNzIFNjcmVlbkNvbG9yIHsKKyAgICAg
ICAgUmVkID0gMCwKKyAgICAgICAgR3JlZW4gPSAxLAorICAgICAgICBCbHVlID0gMiwKKyAgICB9
OyAvLyBlbnVtIGNsYXNzIFNjcmVlbkNvbG9yCisgICAgLy8gTmFtZWQgYWZ0ZXIgcGFyYW1ldGVy
ICdwcmludENvbG9yJyB3aGlsZSBnZW5lcmF0aW5nIGNvbW1hbmQvZXZlbnQgZXhlY3V0ZVNRTFN5
bmNPcHRpb25hbFJldHVyblZhbHVlcy4KKyAgICBlbnVtIGNsYXNzIFByaW50Q29sb3IgeworICAg
ICAgICBDeWFuID0gMywKKyAgICAgICAgTWFnZW50YSA9IDQsCisgICAgICAgIFllbGxvdyA9IDUs
CisgICAgICAgIEJsYWNrID0gNiwKKyAgICB9OyAvLyBlbnVtIGNsYXNzIFByaW50Q29sb3IKKyAg
ICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhFcnJvclN0
cmluZyosIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5LCBSZWZQdHI8
SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk8U3RyaW5nPj4mIG9wdF9vdXRfY29sdW1uTmFt
ZXMsIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6Ok9wdE91dHB1dDxTdHJpbmc+KiBvcHRfb3V0X25v
dGVzLCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8ZG91YmxlPiogb3B0X291dF90
aW1lc3RhbXAsIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6Ok9wdE91dHB1dDxJbnNwZWN0b3I6Oklu
c3BlY3Rvck9iamVjdD4qIG9wdF9vdXRfdmFsdWVzLCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpP
cHRPdXRwdXQ8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4qIG9wdF9vdXRfcGF5bG9hZCwgSW5z
cGVjdG9yOjpUeXBlQnVpbGRlcjo6T3B0T3V0cHV0PGludD4qIG9wdF9vdXRfZGF0YWJhc2VJZCwg
UmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkRhdGFiYXNlOjpFcnJvcj4mIG9wdF9vdXRf
c3FsRXJyb3IsIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3Jz
KiBvcHRfb3V0X3NjcmVlbkNvbG9yLCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVy
SGFuZGxlcjo6UHJpbnRDb2xvciogb3B0X291dF9wcmludENvbG9yKSA9IDA7CisgICAgY2xhc3Mg
RXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNDYWxsYmFjayA6IHB1YmxpYyBJbnNw
ZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2UgeworICAgIHB1
YmxpYzoKKyAgICAgICAgRXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNDYWxsYmFj
ayhQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI+LCBpbnQg
aWQpOworICAgICAgICB2b2lkIHNlbmRTdWNjZXNzKFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpUeXBl
QnVpbGRlcjo6QXJyYXk8U3RyaW5nPj4gY29sdW1uTmFtZXMsIEluc3BlY3Rvcjo6VHlwZUJ1aWxk
ZXI6Ok9wdE91dHB1dDxTdHJpbmc+KiBub3RlcywgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6T3B0
T3V0cHV0PGRvdWJsZT4qIHRpbWVzdGFtcCwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6T3B0T3V0
cHV0PEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiogdmFsdWVzLCBJbnNwZWN0b3I6OlR5cGVC
dWlsZGVyOjpPcHRPdXRwdXQ8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4qIHBheWxvYWQsIElu
c3BlY3Rvcjo6VHlwZUJ1aWxkZXI6Ok9wdE91dHB1dDxpbnQ+KiBkYXRhYmFzZUlkLCBQYXNzUmVm
UHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkRhdGFiYXNlOjpFcnJvcj4gc3FsRXJyb3IsIElu
c3BlY3Rvcjo6VHlwZUJ1aWxkZXI6Ok9wdE91dHB1dDxTdHJpbmc+KiBzY3JlZW5Db2xvciwgSW5z
cGVjdG9yOjpUeXBlQnVpbGRlcjo6T3B0T3V0cHV0PFN0cmluZz4qIHByaW50Q29sb3IpOworICAg
IH07CisgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVz
KEVycm9yU3RyaW5nKiwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnks
IFBhc3NSZWZQdHI8RXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNDYWxsYmFjaz4g
Y2FsbGJhY2spID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNRTFN5bmMoRXJyb3JTdHJp
bmcqLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSwgUmVmUHRyPElu
c3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5PFN0cmluZz4+JiBvdXRfY29sdW1uTmFtZXMsIFN0
cmluZyogb3V0X25vdGVzLCBkb3VibGUqIG91dF90aW1lc3RhbXAsIEluc3BlY3Rvcjo6SW5zcGVj
dG9yT2JqZWN0KiBvdXRfdmFsdWVzLCBJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlKiBvdXRfcGF5
bG9hZCwgaW50KiBvdXRfZGF0YWJhc2VJZCwgUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6
OkRhdGFiYXNlOjpFcnJvcj4mIG91dF9zcWxFcnJvciwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6
RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMqIG91dF9zY3JlZW5Db2xvciwgSW5zcGVjdG9yRGF0YWJh
c2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3IqIG91dF9wcmludENvbG9yKSA9
IDA7CisgICAgY2xhc3MgRXhlY3V0ZVNRTEFzeW5jQ2FsbGJhY2sgOiBwdWJsaWMgSW5zcGVjdG9y
OjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlIHsKKyAgICBwdWJsaWM6
CisgICAgICAgIEV4ZWN1dGVTUUxBc3luY0NhbGxiYWNrKFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4sIGludCBpZCk7CisgICAgICAgIHZvaWQgc2VuZFN1
Y2Nlc3MoUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheTxTdHJpbmc+PiBj
b2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgSW5zcGVj
dG9yOjpJbnNwZWN0b3JPYmplY3QgdmFsdWVzLCBJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlIHBh
eWxvYWQsIGludCBkYXRhYmFzZUlkLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6
OkRhdGFiYXNlOjpFcnJvcj4gc3FsRXJyb3IsIGNvbnN0IFN0cmluZyYgc2NyZWVuQ29sb3IsIGNv
bnN0IFN0cmluZyYgcHJpbnRDb2xvcik7CisgICAgfTsKKyAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0
ZVNRTEFzeW5jKEVycm9yU3RyaW5nKiwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYg
aW5fcXVlcnksIFBhc3NSZWZQdHI8RXhlY3V0ZVNRTEFzeW5jQ2FsbGJhY2s+IGNhbGxiYWNrKSA9
IDA7Citwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB+SW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlz
cGF0Y2hlckhhbmRsZXIoKTsKK307CisjZW5kaWYgLy8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKKwor
I2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCitjbGFzcyBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmRE
aXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yU3VwcGxlbWVudGFs
QmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3Bl
Y3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShJbnNwZWN0b3I6Okluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyKiwgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2gobG9uZyBjYWxsSWQsIGNvbnN0IFN0
cmluZyYgbWV0aG9kLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBtZXNz
YWdlKSBvdmVycmlkZTsKK3ByaXZhdGU6CisgICAgdm9pZCBleGVjdXRlU1FMU3luY09wdGlvbmFs
UmV0dXJuVmFsdWVzKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVj
dCYgbWVzc2FnZSk7CisgICAgdm9pZCBleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVl
cyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2Up
OworICAgIHZvaWQgZXhlY3V0ZVNRTFN5bmMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvcjo6
SW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsKKyAgICB2b2lkIGV4ZWN1dGVTUUxBc3luYyhsb25n
IGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpOworcHJp
dmF0ZToKKyAgICBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKEluc3BlY3Rvcjo6
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqLCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVySGFuZGxlciopOworICAgIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyKiBtX2FnZW50OworfTsKKyNlbmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQorCit9
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisK
KyNlbmRpZiAvLyAhZGVmaW5lZChJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzX2gpCisj
IyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVn
aW4gRmlsZTogSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNv
bgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2NvZGVnZW4vZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNo
ZXJzLmgiCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSA8aW5zcGVjdG9yL0lu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oPgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JW
YWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNw
ZWN0b3IgeworCisjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKK0luc3BlY3RvckRhdGFiYXNlQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyOjp+SW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXIoKSB7IH0KKyNlbmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQorCisjaWYgRU5B
QkxFKFNRTF9EQVRBQkFTRSkKK1Bhc3NSZWZQdHI8SW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlz
cGF0Y2hlcj4gSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKEluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlciwgSW5zcGVjdG9yRGF0YWJh
c2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQoreworICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hl
ciwgYWdlbnQpKTsKK30KKworSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6SW5z
cGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcihJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
ciogYmFja2VuZERpc3BhdGNoZXIsIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyKiBhZ2VudCkKKyAgICA6IEluc3BlY3RvclN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRj
aGVyKGJhY2tlbmREaXNwYXRjaGVyKQorICAgICwgbV9hZ2VudChhZ2VudCkKK3sKKyAgICBtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4oQVNDSUlMaXRlcmFs
KCJEYXRhYmFzZSIpLCB0aGlzKTsKK30KKwordm9pZCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmRE
aXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFBh
c3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtZXNzYWdlKQoreworICAgIFJlZjxJbnNwZWN0b3JE
YXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKKworICAgIGlmIChtZXRo
b2QgPT0gImV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMiKQorICAgICAgICBleGVj
dXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGNhbGxJZCwgKm1lc3NhZ2UuZ2V0KCkpOwor
ICAgIGVsc2UgaWYgKG1ldGhvZCA9PSAiZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1
ZXMiKQorICAgICAgICBleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhjYWxsSWQs
ICptZXNzYWdlLmdldCgpKTsKKyAgICBlbHNlIGlmIChtZXRob2QgPT0gImV4ZWN1dGVTUUxTeW5j
IikKKyAgICAgICAgZXhlY3V0ZVNRTFN5bmMoY2FsbElkLCAqbWVzc2FnZS5nZXQoKSk7CisgICAg
ZWxzZSBpZiAobWV0aG9kID09ICJleGVjdXRlU1FMQXN5bmMiKQorICAgICAgICBleGVjdXRlU1FM
QXN5bmMoY2FsbElkLCAqbWVzc2FnZS5nZXQoKSk7CisgICAgZWxzZQorICAgICAgICBtX2JhY2tl
bmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIEluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgU3RyaW5nKCInIikgKyAiRGF0YWJhc2UiICsg
Jy4nICsgbWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOworfQorCit2b2lkIEluc3BlY3RvckRh
dGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1
ZXMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSkKK3sKKyAgICBS
ZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNy
ZWF0ZSgpOworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IG1l
c3NhZ2UuZ2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicGFyYW1zIikpOworICAgIEluc3BlY3Rvck9i
amVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOworICAgIElu
c3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwor
ICAgIGludCBpbl9kYXRhYmFzZUlkID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldElu
dChwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgiZGF0YWJhc2VJZCIpLCBudWxscHRy
LCBwcm90b2NvbEVycm9yc1B0cik7CisgICAgU3RyaW5nIGluX3F1ZXJ5ID0gSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXI6OmdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJh
bCgicXVlcnkiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnNQdHIpOworICAgIGlmIChwcm90b2Nv
bEVycm9ycy0+bGVuZ3RoKCkpIHsKKyAgICAgICAgU3RyaW5nIGVycm9yTWVzc2FnZSA9IFN0cmlu
Zzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNz
ZWQiLCAiRGF0YWJhc2UuZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyIpOworICAg
ICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIElu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCBlcnJvck1lc3NhZ2UsIHBy
b3RvY29sRXJyb3JzLnJlbGVhc2UoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBF
cnJvclN0cmluZyBlcnJvcjsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJ
bnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWls
ZGVyOjpBcnJheTxTdHJpbmc+PiBvdXRfY29sdW1uTmFtZXM7CisgICAgSW5zcGVjdG9yOjpUeXBl
QnVpbGRlcjo6T3B0T3V0cHV0PFN0cmluZz4gb3V0X25vdGVzOworICAgIEluc3BlY3Rvcjo6VHlw
ZUJ1aWxkZXI6Ok9wdE91dHB1dDxkb3VibGU+IG91dF90aW1lc3RhbXA7CisgICAgSW5zcGVjdG9y
OjpUeXBlQnVpbGRlcjo6T3B0T3V0cHV0PEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBvdXRf
dmFsdWVzOworICAgIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6Ok9wdE91dHB1dDxJbnNwZWN0b3I6
Okluc3BlY3RvclZhbHVlPiBvdXRfcGF5bG9hZDsKKyAgICBJbnNwZWN0b3I6OlR5cGVCdWlsZGVy
OjpPcHRPdXRwdXQ8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6RGF0YWJhc2U6OkRhdGFiYXNlSWQ+
IG91dF9kYXRhYmFzZUlkOworICAgIFJlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpEYXRh
YmFzZTo6RXJyb3I+IG91dF9zcWxFcnJvcjsKKyAgICBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpE
YXRhYmFzZTo6UHJpbWFyeUNvbG9ycyBvdXRfc2NyZWVuQ29sb3I7CisgICAgSW5zcGVjdG9yRGF0
YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3Igb3V0X3ByaW50Q29sb3I7
CisgICAgbV9hZ2VudC0+ZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcygmZXJyb3Is
IGluX2RhdGFiYXNlSWQsIGluX3F1ZXJ5LCBvdXRfY29sdW1uTmFtZXMsICZvdXRfbm90ZXMsICZv
dXRfdGltZXN0YW1wLCBvdXRfdmFsdWVzLCAmb3V0X3BheWxvYWQsICZvdXRfZGF0YWJhc2VJZCwg
b3V0X3NxbEVycm9yLCAmb3V0X3NjcmVlbkNvbG9yLCAmb3V0X3ByaW50Q29sb3IpOworCisgICAg
aWYgKCFlcnJvci5sZW5ndGgoKSkgeworICAgICAgICBpZiAob3V0X2NvbHVtbk5hbWVzKQorICAg
ICAgICAgICAgcmVzdWx0LT5zZXRBcnJheShBU0NJSUxpdGVyYWwoImNvbHVtbk5hbWVzIiksIG91
dF9jb2x1bW5OYW1lcyk7CisgICAgICAgIGlmIChvdXRfbm90ZXMuaXNBc3NpZ25lZCgpKQorICAg
ICAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJub3RlcyIpLCBvdXRfbm90
ZXMuZ2V0VmFsdWUoKSk7CisgICAgICAgIGlmIChvdXRfdGltZXN0YW1wLmlzQXNzaWduZWQoKSkK
KyAgICAgICAgICAgIHJlc3VsdC0+c2V0TnVtYmVyKEFTQ0lJTGl0ZXJhbCgidGltZXN0YW1wIiks
IG91dF90aW1lc3RhbXAuZ2V0VmFsdWUoKSk7CisgICAgICAgIGlmIChvdXRfdmFsdWVzLmlzQXNz
aWduZWQoKSkKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgidmFs
dWVzIiksIG91dF92YWx1ZXMuZ2V0VmFsdWUoKSk7CisgICAgICAgIGlmIChvdXRfcGF5bG9hZC5p
c0Fzc2lnbmVkKCkpCisgICAgICAgICAgICByZXN1bHQtPnNldFZhbHVlKEFTQ0lJTGl0ZXJhbCgi
cGF5bG9hZCIpLCBvdXRfcGF5bG9hZC5nZXRWYWx1ZSgpKTsKKyAgICAgICAgaWYgKG91dF9kYXRh
YmFzZUlkLmlzQXNzaWduZWQoKSkKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0TnVtYmVyKEFTQ0lJ
TGl0ZXJhbCgiZGF0YWJhc2VJZCIpLCBvdXRfZGF0YWJhc2VJZC5nZXRWYWx1ZSgpKTsKKyAgICAg
ICAgaWYgKG91dF9zcWxFcnJvcikKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0T2JqZWN0KEFTQ0lJ
TGl0ZXJhbCgic3FsRXJyb3IiKSwgb3V0X3NxbEVycm9yKTsKKyAgICAgICAgaWYgKG91dF9zY3Jl
ZW5Db2xvci5pc0Fzc2lnbmVkKCkpCisgICAgICAgICAgICByZXN1bHQtPnNldFN0cmluZyhBU0NJ
SUxpdGVyYWwoInNjcmVlbkNvbG9yIiksIG91dF9zY3JlZW5Db2xvci5nZXRWYWx1ZSgpKTsKKyAg
ICAgICAgaWYgKG91dF9wcmludENvbG9yLmlzQXNzaWduZWQoKSkKKyAgICAgICAgICAgIHJlc3Vs
dC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgicHJpbnRDb2xvciIpLCBvdXRfcHJpbnRDb2xvci5n
ZXRWYWx1ZSgpKTsKKyAgICB9CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNl
KGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgZXJyb3IpOworfQorCitJbnNwZWN0b3JEYXRhYmFz
ZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5W
YWx1ZXNDYWxsYmFjazo6RXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNDYWxsYmFj
ayhQYXNzUmVmUHRyPEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiBiYWNrZW5kRGlzcGF0Y2hl
ciwgaW50IGlkKSA6IEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkNhbGxi
YWNrQmFzZShiYWNrZW5kRGlzcGF0Y2hlciwgaWQpIHsgfQorCit2b2lkIEluc3BlY3RvckRhdGFi
YXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVy
blZhbHVlc0NhbGxiYWNrOjpzZW5kU3VjY2VzcyhQYXNzUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1
aWxkZXI6OkFycmF5PFN0cmluZz4+IGNvbHVtbk5hbWVzLCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVy
OjpPcHRPdXRwdXQ8U3RyaW5nPiogbm90ZXMsIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6Ok9wdE91
dHB1dDxkb3VibGU+KiB0aW1lc3RhbXAsIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6Ok9wdE91dHB1
dDxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4qIHZhbHVlcywgSW5zcGVjdG9yOjpUeXBlQnVp
bGRlcjo6T3B0T3V0cHV0PEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+KiBwYXlsb2FkLCBJbnNw
ZWN0b3I6OlR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8aW50PiogZGF0YWJhc2VJZCwgUGFzc1JlZlB0
cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpEYXRhYmFzZTo6RXJyb3I+IHNxbEVycm9yLCBJbnNw
ZWN0b3I6OlR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8U3RyaW5nPiogc2NyZWVuQ29sb3IsIEluc3Bl
Y3Rvcjo6VHlwZUJ1aWxkZXI6Ok9wdE91dHB1dDxTdHJpbmc+KiBwcmludENvbG9yKQoreworICAg
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGpzb25NZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0Ojpj
cmVhdGUoKTsKKyAgICBpZiAoY29sdW1uTmFtZXMpCisgICAgICAgIGpzb25NZXNzYWdlLT5zZXRB
cnJheShBU0NJSUxpdGVyYWwoImNvbHVtbk5hbWVzIiksIGNvbHVtbk5hbWVzKTsKKyAgICBpZiAo
bm90ZXMuaXNBc3NpZ25lZCgpKQorICAgICAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKEFTQ0lJ
TGl0ZXJhbCgibm90ZXMiKSwgbm90ZXMuZ2V0VmFsdWUoKSk7CisgICAgaWYgKHRpbWVzdGFtcC5p
c0Fzc2lnbmVkKCkpCisgICAgICAgIGpzb25NZXNzYWdlLT5zZXROdW1iZXIoQVNDSUlMaXRlcmFs
KCJ0aW1lc3RhbXAiKSwgdGltZXN0YW1wLmdldFZhbHVlKCkpOworICAgIGlmICh2YWx1ZXMuaXNB
c3NpZ25lZCgpKQorICAgICAgICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgi
dmFsdWVzIiksIHZhbHVlcy5nZXRWYWx1ZSgpKTsKKyAgICBpZiAocGF5bG9hZC5pc0Fzc2lnbmVk
KCkpCisgICAgICAgIGpzb25NZXNzYWdlLT5zZXRWYWx1ZShBU0NJSUxpdGVyYWwoInBheWxvYWQi
KSwgcGF5bG9hZC5nZXRWYWx1ZSgpKTsKKyAgICBpZiAoZGF0YWJhc2VJZC5pc0Fzc2lnbmVkKCkp
CisgICAgICAgIGpzb25NZXNzYWdlLT5zZXROdW1iZXIoQVNDSUlMaXRlcmFsKCJkYXRhYmFzZUlk
IiksIGRhdGFiYXNlSWQuZ2V0VmFsdWUoKSk7CisgICAgaWYgKHNxbEVycm9yKQorICAgICAgICBq
c29uTWVzc2FnZS0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgic3FsRXJyb3IiKSwgc3FsRXJyb3Ip
OworICAgIGlmIChzY3JlZW5Db2xvci5pc0Fzc2lnbmVkKCkpCisgICAgICAgIGpzb25NZXNzYWdl
LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJzY3JlZW5Db2xvciIpLCBzY3JlZW5Db2xvci5nZXRW
YWx1ZSgpKTsKKyAgICBpZiAocHJpbnRDb2xvci5pc0Fzc2lnbmVkKCkpCisgICAgICAgIGpzb25N
ZXNzYWdlLT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJwcmludENvbG9yIiksIHByaW50Q29sb3Iu
Z2V0VmFsdWUoKSk7CisgICAgc2VuZElmQWN0aXZlKGpzb25NZXNzYWdlLCBFcnJvclN0cmluZygp
KTsKK30KKwordm9pZCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRl
U1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9y
T2JqZWN0JiBtZXNzYWdlKQoreworICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xF
cnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gcGFyYW1zQ29udGFpbmVyID0gbWVzc2FnZS5nZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJw
YXJhbXMiKSk7CisgICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJh
bXNDb250YWluZXIuZ2V0KCk7CisgICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRy
ID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CisgICAgaW50IGluX2RhdGFiYXNlSWQgPSBJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0SW50KHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRl
cmFsKCJkYXRhYmFzZUlkIiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzUHRyKTsKKyAgICBTdHJp
bmcgaW5fcXVlcnkgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0U3RyaW5nKHBhcmFt
c0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJxdWVyeSIpLCBudWxscHRyLCBwcm90b2NvbEVy
cm9yc1B0cik7CisgICAgaWYgKHByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgeworICAgICAgICBT
dHJpbmcgZXJyb3JNZXNzYWdlID0gU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1l
dGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJEYXRhYmFzZS5leGVjdXRlU1FMQXN5bmNP
cHRpb25hbFJldHVyblZhbHVlcyIpOworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBv
cnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpJbnZh
bGlkUGFyYW1zLCBlcnJvck1lc3NhZ2UsIHByb3RvY29sRXJyb3JzLnJlbGVhc2UoKSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBFcnJvclN0cmluZyBlcnJvcjsKKyAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAg
IFJlZlB0cjxJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0
ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNDYWxsYmFjaz4gY2FsbGJhY2sgPSBhZG9wdFJl
ZihuZXcgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkV4ZWN1dGVT
UUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJhY2sobV9iYWNrZW5kRGlzcGF0Y2hlcixj
YWxsSWQpKTsKKyAgICBtX2FnZW50LT5leGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVl
cygmZXJyb3IsIGluX2RhdGFiYXNlSWQsIGluX3F1ZXJ5LCBjYWxsYmFjayk7CisKKyAgICBpZiAo
ZXJyb3IubGVuZ3RoKCkpIHsKKyAgICAgICAgY2FsbGJhY2stPmRpc2FibGUoKTsKKyAgICAgICAg
bV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElkLCBJbnNwZWN0
b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAg
ICAgICByZXR1cm47CisgICAgfQorfQorCit2b2lkIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERp
c3BhdGNoZXI6OmV4ZWN1dGVTUUxTeW5jKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmpl
Y3QmIG1lc3NhZ2UpCit7CisgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9y
cyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBwYXJhbXNDb250YWluZXIgPSBtZXNzYWdlLmdldE9iamVjdChBU0NJSUxpdGVyYWwoInBhcmFt
cyIpKTsKKyAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0Nv
bnRhaW5lci5nZXQoKTsKKyAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBw
cm90b2NvbEVycm9ycy5nZXQoKTsKKyAgICBpbnQgaW5fZGF0YWJhc2VJZCA9IEluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyOjpnZXRJbnQocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwo
ImRhdGFiYXNlSWQiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnNQdHIpOworICAgIFN0cmluZyBp
bl9xdWVyeSA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRTdHJpbmcocGFyYW1zQ29u
dGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoInF1ZXJ5IiksIG51bGxwdHIsIHByb3RvY29sRXJyb3Jz
UHRyKTsKKyAgICBpZiAocHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CisgICAgICAgIFN0cmlu
ZyBlcnJvck1lc3NhZ2UgPSBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9k
ICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkRhdGFiYXNlLmV4ZWN1dGVTUUxTeW5jIik7Cisg
ICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwg
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkludmFsaWRQYXJhbXMsIGVycm9yTWVzc2FnZSwg
cHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IEVycm9yU3RyaW5nIGVycm9yOworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9
IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1
aWxkZXI6OkFycmF5PFN0cmluZz4+IG91dF9jb2x1bW5OYW1lczsKKyAgICBTdHJpbmcgb3V0X25v
dGVzOworICAgIGRvdWJsZSBvdXRfdGltZXN0YW1wOworICAgIEluc3BlY3Rvcjo6SW5zcGVjdG9y
T2JqZWN0IG91dF92YWx1ZXM7CisgICAgSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSBvdXRfcGF5
bG9hZDsKKyAgICBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpEYXRhYmFzZTo6RGF0YWJhc2VJZCBv
dXRfZGF0YWJhc2VJZDsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6RGF0YWJh
c2U6OkVycm9yPiBvdXRfc3FsRXJyb3I7CisgICAgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6RGF0
YWJhc2U6OlByaW1hcnlDb2xvcnMgb3V0X3NjcmVlbkNvbG9yOworICAgIEluc3BlY3RvckRhdGFi
YXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQcmludENvbG9yIG91dF9wcmludENvbG9yOwor
ICAgIG1fYWdlbnQtPmV4ZWN1dGVTUUxTeW5jKCZlcnJvciwgaW5fZGF0YWJhc2VJZCwgaW5fcXVl
cnksIG91dF9jb2x1bW5OYW1lcywgJm91dF9ub3RlcywgJm91dF90aW1lc3RhbXAsIG91dF92YWx1
ZXMsICZvdXRfcGF5bG9hZCwgJm91dF9kYXRhYmFzZUlkLCBvdXRfc3FsRXJyb3IsICZvdXRfc2Ny
ZWVuQ29sb3IsICZvdXRfcHJpbnRDb2xvcik7CisKKyAgICBpZiAoIWVycm9yLmxlbmd0aCgpKSB7
CisgICAgICAgIHJlc3VsdC0+c2V0QXJyYXkoQVNDSUlMaXRlcmFsKCJjb2x1bW5OYW1lcyIpLCBv
dXRfY29sdW1uTmFtZXMpOworICAgICAgICByZXN1bHQtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwo
Im5vdGVzIiksIG91dF9ub3Rlcyk7CisgICAgICAgIHJlc3VsdC0+c2V0TnVtYmVyKEFTQ0lJTGl0
ZXJhbCgidGltZXN0YW1wIiksIG91dF90aW1lc3RhbXApOworICAgICAgICByZXN1bHQtPnNldE9i
amVjdChBU0NJSUxpdGVyYWwoInZhbHVlcyIpLCBvdXRfdmFsdWVzKTsKKyAgICAgICAgcmVzdWx0
LT5zZXRWYWx1ZShBU0NJSUxpdGVyYWwoInBheWxvYWQiKSwgb3V0X3BheWxvYWQpOworICAgICAg
ICByZXN1bHQtPnNldE51bWJlcihBU0NJSUxpdGVyYWwoImRhdGFiYXNlSWQiKSwgb3V0X2RhdGFi
YXNlSWQpOworICAgICAgICByZXN1bHQtPnNldE9iamVjdChBU0NJSUxpdGVyYWwoInNxbEVycm9y
IiksIG91dF9zcWxFcnJvcik7CisgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJh
bCgic2NyZWVuQ29sb3IiKSwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Z2V0VGVzdEVudW1Db25z
dGFudFZhbHVlKG91dF9zY3JlZW5Db2xvcikpOworICAgICAgICByZXN1bHQtPnNldFN0cmluZyhB
U0NJSUxpdGVyYWwoInByaW50Q29sb3IiKSwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Z2V0VGVz
dEVudW1Db25zdGFudFZhbHVlKG91dF9wcmludENvbG9yKSk7CisgICAgfQorICAgIG1fYmFja2Vu
ZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIGVycm9y
KTsKK30KKworSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkV4ZWN1
dGVTUUxBc3luY0NhbGxiYWNrOjpFeGVjdXRlU1FMQXN5bmNDYWxsYmFjayhQYXNzUmVmUHRyPElu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiBiYWNrZW5kRGlzcGF0Y2hlciwgaW50IGlkKSA6IElu
c3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZShiYWNrZW5k
RGlzcGF0Y2hlciwgaWQpIHsgfQorCit2b2lkIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3Bh
dGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNDYWxsYmFjazo6c2VuZFN1Y2Nlc3MoUGFzc1Jl
ZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheTxTdHJpbmc+PiBjb2x1bW5OYW1lcywg
Y29uc3QgU3RyaW5nJiBub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgSW5zcGVjdG9yOjpJbnNwZWN0
b3JPYmplY3QgdmFsdWVzLCBJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlIHBheWxvYWQsIGludCBk
YXRhYmFzZUlkLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkRhdGFiYXNlOjpF
cnJvcj4gc3FsRXJyb3IsIGNvbnN0IFN0cmluZyYgc2NyZWVuQ29sb3IsIGNvbnN0IFN0cmluZyYg
cHJpbnRDb2xvcikKK3sKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBqc29uTWVzc2FnZSA9
IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAganNvbk1lc3NhZ2UtPnNldEFycmF5KEFT
Q0lJTGl0ZXJhbCgiY29sdW1uTmFtZXMiKSwgY29sdW1uTmFtZXMpOworICAgIGpzb25NZXNzYWdl
LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJub3RlcyIpLCBub3Rlcyk7CisgICAganNvbk1lc3Nh
Z2UtPnNldE51bWJlcihBU0NJSUxpdGVyYWwoInRpbWVzdGFtcCIpLCB0aW1lc3RhbXApOworICAg
IGpzb25NZXNzYWdlLT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJ2YWx1ZXMiKSwgdmFsdWVzKTsK
KyAgICBqc29uTWVzc2FnZS0+c2V0VmFsdWUoQVNDSUlMaXRlcmFsKCJwYXlsb2FkIiksIHBheWxv
YWQpOworICAgIGpzb25NZXNzYWdlLT5zZXROdW1iZXIoQVNDSUlMaXRlcmFsKCJkYXRhYmFzZUlk
IiksIGRhdGFiYXNlSWQpOworICAgIGpzb25NZXNzYWdlLT5zZXRPYmplY3QoQVNDSUlMaXRlcmFs
KCJzcWxFcnJvciIpLCBzcWxFcnJvcik7CisgICAganNvbk1lc3NhZ2UtPnNldFN0cmluZyhBU0NJ
SUxpdGVyYWwoInNjcmVlbkNvbG9yIiksIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OmdldFRlc3RF
bnVtQ29uc3RhbnRWYWx1ZShzY3JlZW5Db2xvcikpOworICAgIGpzb25NZXNzYWdlLT5zZXRTdHJp
bmcoQVNDSUlMaXRlcmFsKCJwcmludENvbG9yIiksIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6Omdl
dFRlc3RFbnVtQ29uc3RhbnRWYWx1ZShwcmludENvbG9yKSk7CisgICAgc2VuZElmQWN0aXZlKGpz
b25NZXNzYWdlLCBFcnJvclN0cmluZygpKTsKK30KKwordm9pZCBJbnNwZWN0b3JEYXRhYmFzZUJh
Y2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FMQXN5bmMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3Bl
Y3Rvck9iamVjdCYgbWVzc2FnZSkKK3sKKyAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3Rv
Y29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IG1lc3NhZ2UuZ2V0T2JqZWN0KEFTQ0lJTGl0ZXJh
bCgicGFyYW1zIikpOworICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0g
cGFyYW1zQ29udGFpbmVyLmdldCgpOworICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9y
c1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOworICAgIGludCBpbl9kYXRhYmFzZUlkID0gSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldEludChwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJ
TGl0ZXJhbCgiZGF0YWJhc2VJZCIpLCBudWxscHRyLCBwcm90b2NvbEVycm9yc1B0cik7CisgICAg
U3RyaW5nIGluX3F1ZXJ5ID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldFN0cmluZyhw
YXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgicXVlcnkiKSwgbnVsbHB0ciwgcHJvdG9j
b2xFcnJvcnNQdHIpOworICAgIGlmIChwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKKyAgICAg
ICAgU3RyaW5nIGVycm9yTWVzc2FnZSA9IFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBv
ZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiRGF0YWJhc2UuZXhlY3V0ZVNRTEFz
eW5jIik7CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3Io
JmNhbGxJZCwgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkludmFsaWRQYXJhbXMsIGVycm9y
TWVzc2FnZSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIEVycm9yU3RyaW5nIGVycm9yOworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPEluc3BlY3Rv
ckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNDYWxsYmFj
az4gY2FsbGJhY2sgPSBhZG9wdFJlZihuZXcgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXI6OkV4ZWN1dGVTUUxBc3luY0NhbGxiYWNrKG1fYmFja2VuZERpc3BhdGNoZXIs
Y2FsbElkKSk7CisgICAgbV9hZ2VudC0+ZXhlY3V0ZVNRTEFzeW5jKCZlcnJvciwgaW5fZGF0YWJh
c2VJZCwgaW5fcXVlcnksIGNhbGxiYWNrKTsKKworICAgIGlmIChlcnJvci5sZW5ndGgoKSkgewor
ICAgICAgICBjYWxsYmFjay0+ZGlzYWJsZSgpOworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVy
LT5yZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CisgICAgICAgIHJldHVybjsKKyAgICB9
Cit9CisjZW5kaWYgLy8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKKworfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorCisjIyMgRW5kIEZpbGU6IElu
c3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNw
ZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMs
IDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24KKy8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaWZuZGVmIEluc3BlY3Rv
clRlc3RGcm9udGVuZERpc3BhdGNoZXJzX2gKKyNkZWZpbmUgSW5zcGVjdG9yVGVzdEZyb250ZW5k
RGlzcGF0Y2hlcnNfaAorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUgIkluc3Bl
Y3RvclRlc3RUeXBlQnVpbGRlcnMuaCIKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsLmg+CisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPgor
I2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVj
dG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorCisjZW5kaWYgLy8gIWRlZmluZWQo
SW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnNfaCkKKyMjIyBFbmQgRmlsZTogSW5zcGVj
dG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9y
VGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIGNvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24KKy8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKKworI2lmIEVO
QUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVz
cGFjZSBJbnNwZWN0b3IgeworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8v
IEVOQUJMRShJTlNQRUNUT1IpCisKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdEZyb250ZW5k
RGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxk
ZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1h
c3luYy1hdHRyaWJ1dGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5CisKKyNpZm5kZWYgSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVyc19oCisjZGVm
aW5lIEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnNfaAorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikK
KworI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JKU1R5cGVCdWlsZGVycy5oPgorI2luY2x1
ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JUeXBlQnVpbGRlci5oPgorI2luY2x1ZGUgPHd0Zi9Bc3Nl
cnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKworbmFtZXNwYWNlIEluc3Bl
Y3RvciB7CisKKworCituYW1lc3BhY2UgVHlwZUJ1aWxkZXIgeworCisvLyBGb3J3YXJkIGRlY2xh
cmF0aW9ucy4KKyNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQorbmFtZXNwYWNlIERhdGFiYXNlIHsK
K2NsYXNzIEVycm9yOworZW51bSBjbGFzcyBQcmltYXJ5Q29sb3JzOworfSAvLyBEYXRhYmFzZQor
I2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0UpCisvLyBFbmQgb2YgZm9yd2FyZCBkZWNsYXJh
dGlvbnMuCisKKworLy8gVHlwZWRlZnMuCisjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKK25hbWVz
cGFjZSBEYXRhYmFzZSB7CisvKiBVbmlxdWUgaWRlbnRpZmllciBvZiBEYXRhYmFzZSBvYmplY3Qu
ICovCit0eXBlZGVmIGludCBEYXRhYmFzZUlkOworfSAvLyBEYXRhYmFzZQorI2VuZGlmIC8vIEVO
QUJMRShTUUxfREFUQUJBU0UpCisvLyBFbmQgb2YgdHlwZWRlZnMuCisKK1N0cmluZyBnZXRUZXN0
RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBTdHJp
bmcgZ2V0VGVzdEVudW1Db25zdGFudFZhbHVlKFQgZW51bVZhbHVlKQoreworICAgIHJldHVybiBn
ZXRUZXN0RW51bUNvbnN0YW50VmFsdWUoc3RhdGljX2Nhc3Q8aW50PihlbnVtVmFsdWUpKTsKK30K
KworI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCituYW1lc3BhY2UgRGF0YWJhc2UgeworLyogICov
CitlbnVtIGNsYXNzIFByaW1hcnlDb2xvcnMgeworICAgIFJlZCA9IDAsCisgICAgR3JlZW4gPSAx
LAorICAgIEJsdWUgPSAyLAorfTsgLy8gZW51bSBjbGFzcyBQcmltYXJ5Q29sb3JzCisvKiBEYXRh
YmFzZSBlcnJvci4gKi8KK2NsYXNzIEVycm9yIDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9y
T2JqZWN0QmFzZSB7CitwdWJsaWM6CisgICAgZW51bSB7CisgICAgICAgIE5vRmllbGRzU2V0ID0g
MCwKKyAgICAgICAgTWVzc2FnZVNldCA9IDEgPDwgMCwKKyAgICAgICAgQ29kZVNldCA9IDEgPDwg
MSwKKyAgICAgICAgQWxsRmllbGRzU2V0ID0gKE1lc3NhZ2VTZXQgfCBDb2RlU2V0KQorICAgIH07
CisKKyAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CisgICAgY2xhc3MgQnVpbGRlciB7CisgICAgcHJp
dmF0ZToKKyAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3Vs
dDsKKworICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBj
YXN0U3RhdGUoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nh
c3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CisgICAgICAgIH0KKworICAgICAgICBC
dWlsZGVyKFBhc3NSZWZQdHI8LypFcnJvciovSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IHB0
cikKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVs
ZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CisgICAgICAgICAgICBt
X3Jlc3VsdCA9IHB0cjsKKyAgICAgICAgfQorICAgICAgICBmcmllbmQgY2xhc3MgRXJyb3I7Cisg
ICAgcHVibGljOgorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBNZXNzYWdlU2V0PiYgc2V0TWVz
c2FnZShjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxF
X0FTU0VSVCghKFNUQVRFICYgTWVzc2FnZVNldCksIHByb3BlcnR5X21lc3NhZ2VfYWxyZWFkeV9z
ZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoIm1lc3Nh
Z2UiKSwgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxNZXNzYWdlU2V0Pigp
OworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IENvZGVTZXQ+JiBzZXRDb2Rl
KGludCB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFU
RSAmIENvZGVTZXQpLCBwcm9wZXJ0eV9jb2RlX2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1f
cmVzdWx0LT5zZXROdW1iZXIoQVNDSUlMaXRlcmFsKCJjb2RlIiksIHZhbHVlKTsKKyAgICAgICAg
ICAgIHJldHVybiBjYXN0U3RhdGU8Q29kZVNldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIG9w
ZXJhdG9yIFJlZlB0cjxFcnJvcj4mICgpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CisgICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoRXJyb3IpID09IHNpemVvZihJbnNwZWN0b3I6
Okluc3BlY3Rvck9iamVjdCksIGNhbm5vdF9jYXN0KTsKKyAgICAgICAgICAgIHJldHVybiAqcmVp
bnRlcnByZXRfY2FzdDxSZWZQdHI8RXJyb3I+Kj4oJm1fcmVzdWx0KTsKKyAgICAgICAgfQorCisg
ICAgICAgIFBhc3NSZWZQdHI8RXJyb3I+IHJlbGVhc2UoKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gUmVmUHRyPEVycm9yPigqdGhpcykucmVsZWFzZSgpOworICAgICAgICB9CisgICAg
fTsKKworICAgIC8qCisgICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgorICAgICAqIFJlZlB0
cjxFcnJvcj4gcmVzdWx0ID0gRXJyb3I6OmNyZWF0ZSgpCisgICAgICogICAgIC5zZXRNZXNzYWdl
KC4uLikKKyAgICAgKiAgICAgLnNldENvZGUoLi4uKTsKKyAgICAgKi8KKyAgICBzdGF0aWMgQnVp
bGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBCdWlsZGVy
PE5vRmllbGRzU2V0PihJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkpOworICAg
IH0KKyAgICB0eXBlZGVmIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlN0cnVjdEl0ZW1UcmFpdHMg
SXRlbVRyYWl0czsKK307CisKK30gLy8gRGF0YWJhc2UKKyNlbmRpZiAvLyBFTkFCTEUoU1FMX0RB
VEFCQVNFKQorCisKKworfSAvLyBuYW1lc3BhY2UgVHlwZUJ1aWxkZXIKKworfSAvLyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorCisjZW5kaWYgLy8g
IWRlZmluZWQoSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVyc19oKQorIyMjIEVuZCBGaWxlOiBJbnNw
ZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RU
eXBlQnVpbGRlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1h
bmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
SW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5oIgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKwor
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisK
K25hbWVzcGFjZSBUeXBlQnVpbGRlciB7CisKK3N0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBlbnVt
X2NvbnN0YW50X3ZhbHVlc1tdID0geworICAgICJyZWQiLAorICAgICJncmVlbiIsCisgICAgImJs
dWUiLAorICAgICJjeWFuIiwKKyAgICAibWFnZW50YSIsCisgICAgInllbGxvdyIsCisgICAgImJs
YWNrIiwKK307CisKK1N0cmluZyBnZXRUZXN0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpIHsK
KyAgICByZXR1cm4gZW51bV9jb25zdGFudF92YWx1ZXNbY29kZV07Cit9CisKKworCit9IC8vIG5h
bWVzcGFjZSBUeXBlQnVpbGRlcgorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlm
IC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdFR5cGVC
dWlsZGVycy5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9leHBlY3RlZC9jb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJu
LXBhcmFtZXRlcnMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVy
bi1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ3NTllMjFmYTMxMTIxYjVjMDY0
ZDJhNGFmN2RiNTM3Mjg2NTRjOTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1vcHRp
b25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0CkBAIC0wLDAgKzEsNjQ1IEBA
CisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdEJhY2tlbmRDb21tYW5kcy5qcworLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwt
cmV0dXJuLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisKKy8vIERhdGFiYXNlLgorSW5zcGVjdG9yQmFja2VuZC5yZWdpc3Rl
ckVudW0oIkRhdGFiYXNlLlByaW1hcnlDb2xvcnMiLCB7UmVkOiAicmVkIiwgR3JlZW46ICJncmVl
biIsIEJsdWU6ICJibHVlIn0pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIkRh
dGFiYXNlLmV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMiLCBbeyJuYW1lIjogImNvbHVtbk5h
bWVzIiwgInR5cGUiOiAib2JqZWN0IiwgIm9wdGlvbmFsIjogdHJ1ZX0sIHsibmFtZSI6ICJub3Rl
cyIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IHRydWV9LCB7Im5hbWUiOiAidGltZXN0
YW1wIiwgInR5cGUiOiAibnVtYmVyIiwgIm9wdGlvbmFsIjogdHJ1ZX0sIHsibmFtZSI6ICJ2YWx1
ZXMiLCAidHlwZSI6ICJvYmplY3QiLCAib3B0aW9uYWwiOiB0cnVlfSwgeyJuYW1lIjogInBheWxv
YWQiLCAidHlwZSI6ICJvYmplY3QiLCAib3B0aW9uYWwiOiB0cnVlfSwgeyJuYW1lIjogImRhdGFi
YXNlSWQiLCAidHlwZSI6ICJudW1iZXIiLCAib3B0aW9uYWwiOiB0cnVlfSwgeyJuYW1lIjogInNx
bEVycm9yIiwgInR5cGUiOiAib2JqZWN0IiwgIm9wdGlvbmFsIjogdHJ1ZX0sIHsibmFtZSI6ICJz
Y3JlZW5Db2xvciIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IHRydWV9LCB7Im5hbWUi
OiAicHJpbnRDb2xvciIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IHRydWV9XSwgWyJj
b2x1bW5OYW1lcyIsICJub3RlcyIsICJ0aW1lc3RhbXAiLCAidmFsdWVzIiwgInBheWxvYWQiLCAi
ZGF0YWJhc2VJZCIsICJzcWxFcnJvciIsICJzY3JlZW5Db2xvciIsICJwcmludENvbG9yIl0pOwor
SW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIkRhdGFiYXNlLmV4ZWN1dGVOb09wdGlv
bmFsUGFyYW1ldGVycyIsIFt7Im5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJvYmplY3Qi
LCAib3B0aW9uYWwiOiBmYWxzZX0sIHsibmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIs
ICJvcHRpb25hbCI6IGZhbHNlfSwgeyJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJl
ciIsICJvcHRpb25hbCI6IGZhbHNlfSwgeyJuYW1lIjogInZhbHVlcyIsICJ0eXBlIjogIm9iamVj
dCIsICJvcHRpb25hbCI6IGZhbHNlfSwgeyJuYW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJvYmpl
Y3QiLCAib3B0aW9uYWwiOiBmYWxzZX0sIHsibmFtZSI6ICJkYXRhYmFzZUlkIiwgInR5cGUiOiAi
bnVtYmVyIiwgIm9wdGlvbmFsIjogZmFsc2V9LCB7Im5hbWUiOiAic3FsRXJyb3IiLCAidHlwZSI6
ICJvYmplY3QiLCAib3B0aW9uYWwiOiBmYWxzZX0sIHsibmFtZSI6ICJzY3JlZW5Db2xvciIsICJ0
eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IGZhbHNlfSwgeyJuYW1lIjogInByaW50Q29sb3Ii
LCAidHlwZSI6ICJzdHJpbmciLCAib3B0aW9uYWwiOiBmYWxzZX1dLCBbImNvbHVtbk5hbWVzIiwg
Im5vdGVzIiwgInRpbWVzdGFtcCIsICJ2YWx1ZXMiLCAicGF5bG9hZCIsICJkYXRhYmFzZUlkIiwg
InNxbEVycm9yIiwgInNjcmVlbkNvbG9yIiwgInByaW50Q29sb3IiXSk7CisjIyMgRW5kIEZpbGU6
IEluc3BlY3RvclRlc3RCYWNrZW5kQ29tbWFuZHMuanMKKworIyMjIEJlZ2luIEZpbGU6IEluc3Bl
Y3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNv
bgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2NvZGVnZW4vZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNp
Zm5kZWYgSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVyc19oCisjZGVmaW5lIEluc3BlY3Rv
clRlc3RCYWNrZW5kRGlzcGF0Y2hlcnNfaAorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2lu
Y2x1ZGUgIkluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuaCIKKyNpbmNsdWRlIDxpbnNwZWN0b3Iv
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5o
PgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9y
IHsKKwordHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKKyNpZiBFTkFCTEUoU1FMX0RBVEFC
QVNFKQorY2xhc3MgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewor
cHVibGljOgorICAgIC8vIE5hbWVkIGFmdGVyIHBhcmFtZXRlciAnc2NyZWVuQ29sb3InIHdoaWxl
IGdlbmVyYXRpbmcgY29tbWFuZC9ldmVudCBleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzLgor
ICAgIGVudW0gY2xhc3MgU2NyZWVuQ29sb3IgeworICAgICAgICBSZWQgPSAwLAorICAgICAgICBH
cmVlbiA9IDEsCisgICAgICAgIEJsdWUgPSAyLAorICAgIH07IC8vIGVudW0gY2xhc3MgU2NyZWVu
Q29sb3IKKyAgICAvLyBOYW1lZCBhZnRlciBwYXJhbWV0ZXIgJ3ByaW50Q29sb3InIHdoaWxlIGdl
bmVyYXRpbmcgY29tbWFuZC9ldmVudCBleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzLgorICAg
IGVudW0gY2xhc3MgUHJpbnRDb2xvciB7CisgICAgICAgIEN5YW4gPSAzLAorICAgICAgICBNYWdl
bnRhID0gNCwKKyAgICAgICAgWWVsbG93ID0gNSwKKyAgICAgICAgQmxhY2sgPSA2LAorICAgIH07
IC8vIGVudW0gY2xhc3MgUHJpbnRDb2xvcgorICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlQWxsT3B0
aW9uYWxQYXJhbWV0ZXJzKEVycm9yU3RyaW5nKiwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5z
cGVjdG9yQXJyYXk+KiBpbl9jb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nKiBpbl9ub3RlcywgY29u
c3QgZG91YmxlKiBpbl90aW1lc3RhbXAsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rv
ck9iamVjdD4qIGluX3ZhbHVlcywgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSogaW5f
cGF5bG9hZCwgY29uc3QgaW50KiBpbl9kYXRhYmFzZUlkLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9y
OjpJbnNwZWN0b3JPYmplY3Q+KiBpbl9zcWxFcnJvciwgY29uc3QgU3RyaW5nKiBpbl9zY3JlZW5D
b2xvciwgY29uc3QgU3RyaW5nKiBpbl9wcmludENvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpUeXBl
QnVpbGRlcjo6QXJyYXk8U3RyaW5nPj4mIG9wdF9vdXRfY29sdW1uTmFtZXMsIEluc3BlY3Rvcjo6
VHlwZUJ1aWxkZXI6Ok9wdE91dHB1dDxTdHJpbmc+KiBvcHRfb3V0X25vdGVzLCBJbnNwZWN0b3I6
OlR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8ZG91YmxlPiogb3B0X291dF90aW1lc3RhbXAsIEluc3Bl
Y3Rvcjo6VHlwZUJ1aWxkZXI6Ok9wdE91dHB1dDxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4q
IG9wdF9vdXRfdmFsdWVzLCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8SW5zcGVj
dG9yOjpJbnNwZWN0b3JWYWx1ZT4qIG9wdF9vdXRfcGF5bG9hZCwgSW5zcGVjdG9yOjpUeXBlQnVp
bGRlcjo6T3B0T3V0cHV0PGludD4qIG9wdF9vdXRfZGF0YWJhc2VJZCwgUmVmUHRyPEluc3BlY3Rv
cjo6VHlwZUJ1aWxkZXI6OkRhdGFiYXNlOjpFcnJvcj4mIG9wdF9vdXRfc3FsRXJyb3IsIEluc3Bl
Y3Rvcjo6VHlwZUJ1aWxkZXI6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzKiBvcHRfb3V0X3NjcmVl
bkNvbG9yLCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UHJpbnRD
b2xvciogb3B0X291dF9wcmludENvbG9yKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVO
b09wdGlvbmFsUGFyYW1ldGVycyhFcnJvclN0cmluZyosIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6
Okluc3BlY3RvckFycmF5PiYgaW5fY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgaW5fbm90ZXMs
IGRvdWJsZSBpbl90aW1lc3RhbXAsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9i
amVjdD4mIGluX3ZhbHVlcywgSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSBpbl9wYXlsb2FkLCBp
bnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0
PiYgaW5fc3FsRXJyb3IsIGNvbnN0IFN0cmluZyYgaW5fc2NyZWVuQ29sb3IsIGNvbnN0IFN0cmlu
ZyYgaW5fcHJpbnRDb2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5PFN0
cmluZz4+JiBvdXRfY29sdW1uTmFtZXMsIFN0cmluZyogb3V0X25vdGVzLCBkb3VibGUqIG91dF90
aW1lc3RhbXAsIEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0KiBvdXRfdmFsdWVzLCBJbnNwZWN0
b3I6Okluc3BlY3RvclZhbHVlKiBvdXRfcGF5bG9hZCwgaW50KiBvdXRfZGF0YWJhc2VJZCwgUmVm
UHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkRhdGFiYXNlOjpFcnJvcj4mIG91dF9zcWxFcnJv
ciwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMqIG91dF9z
Y3JlZW5Db2xvciwgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlBy
aW50Q29sb3IqIG91dF9wcmludENvbG9yKSA9IDA7Citwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB+
SW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKTsKK307CisjZW5kaWYg
Ly8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKKworI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCitjbGFz
cyBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgor
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI+
IGNyZWF0ZShJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiwgSW5zcGVjdG9y
RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlz
cGF0Y2gobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBQYXNzUmVmUHRyPEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBtZXNzYWdlKSBvdmVycmlkZTsKK3ByaXZhdGU6CisgICAg
dm9pZCBleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgY2FsbElkLCBjb25zdCBJbnNw
ZWN0b3I6Okluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7CisgICAgdm9pZCBleGVjdXRlTm9PcHRp
b25hbFBhcmFtZXRlcnMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2Jq
ZWN0JiBtZXNzYWdlKTsKK3ByaXZhdGU6CisgICAgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlz
cGF0Y2hlcihJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiwgSW5zcGVjdG9y
RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKKyAgICBJbnNwZWN0b3JEYXRhYmFz
ZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogbV9hZ2VudDsKK307CisjZW5kaWYgLy8gRU5BQkxF
KFNRTF9EQVRBQkFTRSkKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBF
TkFCTEUoSU5TUEVDVE9SKQorCisjZW5kaWYgLy8gIWRlZmluZWQoSW5zcGVjdG9yVGVzdEJhY2tl
bmREaXNwYXRjaGVyc19oKQorIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3Bh
dGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hl
cnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgt
b3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2lmIEVOQUJMRShJ
TlNQRUNUT1IpCisKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
Lmg+CisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPgorI2luY2x1ZGUgPHd0
Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKyNpZiBFTkFCTEUo
U1FMX0RBVEFCQVNFKQorSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6
On5JbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpIHsgfQorI2VuZGlm
IC8vIEVOQUJMRShTUUxfREFUQUJBU0UpCisKKyNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQorUGFz
c1JlZlB0cjxJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyPiBJbnNwZWN0b3JEYXRh
YmFzZUJhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUoSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIq
IGJhY2tlbmREaXNwYXRjaGVyLCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFu
ZGxlciogYWdlbnQpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnNwZWN0b3JEYXRhYmFz
ZUJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyLCBhZ2VudCkpOworfQorCitJbnNw
ZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmRE
aXNwYXRjaGVyKEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlciwg
SW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQorICAgIDog
SW5zcGVjdG9yU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIp
CisgICAgLCBtX2FnZW50KGFnZW50KQoreworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lz
dGVyRGlzcGF0Y2hlckZvckRvbWFpbihBU0NJSUxpdGVyYWwoIkRhdGFiYXNlIiksIHRoaXMpOwor
fQorCit2b2lkIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxv
bmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IG1lc3NhZ2UpCit7CisgICAgUmVmPEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNo
ZXI+IHByb3RlY3QoKnRoaXMpOworCisgICAgaWYgKG1ldGhvZCA9PSAiZXhlY3V0ZUFsbE9wdGlv
bmFsUGFyYW1ldGVycyIpCisgICAgICAgIGV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMoY2Fs
bElkLCAqbWVzc2FnZS5nZXQoKSk7CisgICAgZWxzZSBpZiAobWV0aG9kID09ICJleGVjdXRlTm9P
cHRpb25hbFBhcmFtZXRlcnMiKQorICAgICAgICBleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMo
Y2FsbElkLCAqbWVzc2FnZS5nZXQoKSk7CisgICAgZWxzZQorICAgICAgICBtX2JhY2tlbmREaXNw
YXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIEluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgU3RyaW5nKCInIikgKyAiRGF0YWJhc2UiICsgJy4nICsg
bWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOworfQorCit2b2lkIEluc3BlY3RvckRhdGFiYXNl
QmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMobG9uZyBjYWxs
SWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSkKK3sKKyAgICBSZWZQdHI8SW5zcGVj
dG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOworICAg
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IG1lc3NhZ2UuZ2V0T2Jq
ZWN0KEFTQ0lJTGl0ZXJhbCgicGFyYW1zIikpOworICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1z
Q29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOworICAgIEluc3BlY3RvckFycmF5
KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOworICAgIGJvb2wgY29s
dW1uTmFtZXNfdmFsdWVGb3VuZCA9IGZhbHNlOworICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3Bl
Y3RvckFycmF5PiBpbl9jb2x1bW5OYW1lcyA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpn
ZXRBcnJheShwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgiY29sdW1uTmFtZXMiKSwg
JmNvbHVtbk5hbWVzX3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRyKTsKKyAgICBib29sIG5v
dGVzX3ZhbHVlRm91bmQgPSBmYWxzZTsKKyAgICBTdHJpbmcgaW5fbm90ZXMgPSBJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlcjo6Z2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRl
cmFsKCJub3RlcyIpLCAmbm90ZXNfdmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJvcnNQdHIpOworICAg
IGJvb2wgdGltZXN0YW1wX3ZhbHVlRm91bmQgPSBmYWxzZTsKKyAgICBJbnNwZWN0b3I6OlR5cGVC
dWlsZGVyOjpPcHRPdXRwdXQ8ZG91YmxlPiBpbl90aW1lc3RhbXAgPSBJbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlcjo6Z2V0TnVtYmVyKHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJ0
aW1lc3RhbXAiKSwgJnRpbWVzdGFtcF92YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0cik7Cisg
ICAgYm9vbCB2YWx1ZXNfdmFsdWVGb3VuZCA9IGZhbHNlOworICAgIFJlZlB0cjxJbnNwZWN0b3I6
Okluc3BlY3Rvck9iamVjdD4gaW5fdmFsdWVzID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6
OmdldE9iamVjdChwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgidmFsdWVzIiksICZ2
YWx1ZXNfdmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJvcnNQdHIpOworICAgIGJvb2wgcGF5bG9hZF92
YWx1ZUZvdW5kID0gZmFsc2U7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+
IGluX3BheWxvYWQgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0QW55KHBhcmFtc0Nv
bnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJwYXlsb2FkIiksICZwYXlsb2FkX3ZhbHVlRm91bmQs
IHByb3RvY29sRXJyb3JzUHRyKTsKKyAgICBib29sIGRhdGFiYXNlSWRfdmFsdWVGb3VuZCA9IGZh
bHNlOworICAgIGludCBpbl9kYXRhYmFzZUlkID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6
OmdldEludChwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgiZGF0YWJhc2VJZCIpLCAm
ZGF0YWJhc2VJZF92YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0cik7CisgICAgYm9vbCBzcWxF
cnJvcl92YWx1ZUZvdW5kID0gZmFsc2U7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9y
T2JqZWN0PiBpbl9zcWxFcnJvciA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRPYmpl
Y3QocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoInNxbEVycm9yIiksICZzcWxFcnJv
cl92YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0cik7CisgICAgYm9vbCBzY3JlZW5Db2xvcl92
YWx1ZUZvdW5kID0gZmFsc2U7CisgICAgU3RyaW5nIGluX3NjcmVlbkNvbG9yID0gSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXI6OmdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0
ZXJhbCgic2NyZWVuQ29sb3IiKSwgJnNjcmVlbkNvbG9yX3ZhbHVlRm91bmQsIHByb3RvY29sRXJy
b3JzUHRyKTsKKyAgICBib29sIHByaW50Q29sb3JfdmFsdWVGb3VuZCA9IGZhbHNlOworICAgIFN0
cmluZyBpbl9wcmludENvbG9yID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldFN0cmlu
ZyhwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgicHJpbnRDb2xvciIpLCAmcHJpbnRD
b2xvcl92YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0cik7CisgICAgaWYgKHByb3RvY29sRXJy
b3JzLT5sZW5ndGgoKSkgeworICAgICAgICBTdHJpbmcgZXJyb3JNZXNzYWdlID0gU3RyaW5nOjpm
b3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIs
ICJEYXRhYmFzZS5leGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzIik7CisgICAgICAgIG1fYmFj
a2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXI6OkludmFsaWRQYXJhbXMsIGVycm9yTWVzc2FnZSwgcHJvdG9jb2xFcnJv
cnMucmVsZWFzZSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEVycm9yU3RyaW5n
IGVycm9yOworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5
PFN0cmluZz4+IG91dF9jb2x1bW5OYW1lczsKKyAgICBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpP
cHRPdXRwdXQ8U3RyaW5nPiBvdXRfbm90ZXM7CisgICAgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6
T3B0T3V0cHV0PGRvdWJsZT4gb3V0X3RpbWVzdGFtcDsKKyAgICBJbnNwZWN0b3I6OlR5cGVCdWls
ZGVyOjpPcHRPdXRwdXQ8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IG91dF92YWx1ZXM7Cisg
ICAgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6T3B0T3V0cHV0PEluc3BlY3Rvcjo6SW5zcGVjdG9y
VmFsdWU+IG91dF9wYXlsb2FkOworICAgIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6Ok9wdE91dHB1
dDxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpEYXRhYmFzZTo6RGF0YWJhc2VJZD4gb3V0X2RhdGFi
YXNlSWQ7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkRhdGFiYXNlOjpFcnJv
cj4gb3V0X3NxbEVycm9yOworICAgIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkRhdGFiYXNlOjpQ
cmltYXJ5Q29sb3JzIG91dF9zY3JlZW5Db2xvcjsKKyAgICBJbnNwZWN0b3JEYXRhYmFzZUJhY2tl
bmREaXNwYXRjaGVySGFuZGxlcjo6UHJpbnRDb2xvciBvdXRfcHJpbnRDb2xvcjsKKyAgICBtX2Fn
ZW50LT5leGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKCZlcnJvciwgY29sdW1uTmFtZXNfdmFs
dWVGb3VuZCA/ICZpbl9jb2x1bW5OYW1lcyA6IG51bGxwdHIsIG5vdGVzX3ZhbHVlRm91bmQgPyAm
aW5fbm90ZXMgOiBudWxscHRyLCB0aW1lc3RhbXBfdmFsdWVGb3VuZCA/ICZpbl90aW1lc3RhbXAg
OiBudWxscHRyLCB2YWx1ZXNfdmFsdWVGb3VuZCA/ICZpbl92YWx1ZXMgOiBudWxscHRyLCBwYXls
b2FkX3ZhbHVlRm91bmQgPyAmaW5fcGF5bG9hZCA6IG51bGxwdHIsIGRhdGFiYXNlSWRfdmFsdWVG
b3VuZCA/ICZpbl9kYXRhYmFzZUlkIDogbnVsbHB0ciwgc3FsRXJyb3JfdmFsdWVGb3VuZCA/ICZp
bl9zcWxFcnJvciA6IG51bGxwdHIsIHNjcmVlbkNvbG9yX3ZhbHVlRm91bmQgPyAmaW5fc2NyZWVu
Q29sb3IgOiBudWxscHRyLCBwcmludENvbG9yX3ZhbHVlRm91bmQgPyAmaW5fcHJpbnRDb2xvciA6
IG51bGxwdHIsIG91dF9jb2x1bW5OYW1lcywgJm91dF9ub3RlcywgJm91dF90aW1lc3RhbXAsIG91
dF92YWx1ZXMsICZvdXRfcGF5bG9hZCwgJm91dF9kYXRhYmFzZUlkLCBvdXRfc3FsRXJyb3IsICZv
dXRfc2NyZWVuQ29sb3IsICZvdXRfcHJpbnRDb2xvcik7CisKKyAgICBpZiAoIWVycm9yLmxlbmd0
aCgpKSB7CisgICAgICAgIGlmIChvdXRfY29sdW1uTmFtZXMpCisgICAgICAgICAgICByZXN1bHQt
PnNldEFycmF5KEFTQ0lJTGl0ZXJhbCgiY29sdW1uTmFtZXMiKSwgb3V0X2NvbHVtbk5hbWVzKTsK
KyAgICAgICAgaWYgKG91dF9ub3Rlcy5pc0Fzc2lnbmVkKCkpCisgICAgICAgICAgICByZXN1bHQt
PnNldFN0cmluZyhBU0NJSUxpdGVyYWwoIm5vdGVzIiksIG91dF9ub3Rlcy5nZXRWYWx1ZSgpKTsK
KyAgICAgICAgaWYgKG91dF90aW1lc3RhbXAuaXNBc3NpZ25lZCgpKQorICAgICAgICAgICAgcmVz
dWx0LT5zZXROdW1iZXIoQVNDSUlMaXRlcmFsKCJ0aW1lc3RhbXAiKSwgb3V0X3RpbWVzdGFtcC5n
ZXRWYWx1ZSgpKTsKKyAgICAgICAgaWYgKG91dF92YWx1ZXMuaXNBc3NpZ25lZCgpKQorICAgICAg
ICAgICAgcmVzdWx0LT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJ2YWx1ZXMiKSwgb3V0X3ZhbHVl
cy5nZXRWYWx1ZSgpKTsKKyAgICAgICAgaWYgKG91dF9wYXlsb2FkLmlzQXNzaWduZWQoKSkKKyAg
ICAgICAgICAgIHJlc3VsdC0+c2V0VmFsdWUoQVNDSUlMaXRlcmFsKCJwYXlsb2FkIiksIG91dF9w
YXlsb2FkLmdldFZhbHVlKCkpOworICAgICAgICBpZiAob3V0X2RhdGFiYXNlSWQuaXNBc3NpZ25l
ZCgpKQorICAgICAgICAgICAgcmVzdWx0LT5zZXROdW1iZXIoQVNDSUlMaXRlcmFsKCJkYXRhYmFz
ZUlkIiksIG91dF9kYXRhYmFzZUlkLmdldFZhbHVlKCkpOworICAgICAgICBpZiAob3V0X3NxbEVy
cm9yKQorICAgICAgICAgICAgcmVzdWx0LT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJzcWxFcnJv
ciIpLCBvdXRfc3FsRXJyb3IpOworICAgICAgICBpZiAob3V0X3NjcmVlbkNvbG9yLmlzQXNzaWdu
ZWQoKSkKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgic2NyZWVu
Q29sb3IiKSwgb3V0X3NjcmVlbkNvbG9yLmdldFZhbHVlKCkpOworICAgICAgICBpZiAob3V0X3By
aW50Q29sb3IuaXNBc3NpZ25lZCgpKQorICAgICAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoQVND
SUlMaXRlcmFsKCJwcmludENvbG9yIiksIG91dF9wcmludENvbG9yLmdldFZhbHVlKCkpOworICAg
IH0KKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQu
cmVsZWFzZSgpLCBlcnJvcik7Cit9CisKK3ZvaWQgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlz
cGF0Y2hlcjo6ZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgY2FsbElkLCBjb25zdCBJ
bnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpCit7CisgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBw
cm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSBtZXNzYWdlLmdldE9iamVjdChBU0NJSUxp
dGVyYWwoInBhcmFtcyIpKTsKKyAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0
ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKKyAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xF
cnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpJ
bnNwZWN0b3JBcnJheT4gaW5fY29sdW1uTmFtZXMgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
cjo6Z2V0QXJyYXkocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoImNvbHVtbk5hbWVz
IiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzUHRyKTsKKyAgICBTdHJpbmcgaW5fbm90ZXMgPSBJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwg
QVNDSUlMaXRlcmFsKCJub3RlcyIpLCBudWxscHRyLCBwcm90b2NvbEVycm9yc1B0cik7CisgICAg
ZG91YmxlIGluX3RpbWVzdGFtcCA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXROdW1i
ZXIocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoInRpbWVzdGFtcCIpLCBudWxscHRy
LCBwcm90b2NvbEVycm9yc1B0cik7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2Jq
ZWN0PiBpbl92YWx1ZXMgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0T2JqZWN0KHBh
cmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJ2YWx1ZXMiKSwgbnVsbHB0ciwgcHJvdG9j
b2xFcnJvcnNQdHIpOworICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiBpbl9w
YXlsb2FkID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldEFueShwYXJhbXNDb250YWlu
ZXJQdHIsIEFTQ0lJTGl0ZXJhbCgicGF5bG9hZCIpLCBudWxscHRyLCBwcm90b2NvbEVycm9yc1B0
cik7CisgICAgaW50IGluX2RhdGFiYXNlSWQgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6
Z2V0SW50KHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJkYXRhYmFzZUlkIiksIG51
bGxwdHIsIHByb3RvY29sRXJyb3JzUHRyKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0
b3JPYmplY3Q+IGluX3NxbEVycm9yID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldE9i
amVjdChwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgic3FsRXJyb3IiKSwgbnVsbHB0
ciwgcHJvdG9jb2xFcnJvcnNQdHIpOworICAgIFN0cmluZyBpbl9zY3JlZW5Db2xvciA9IEluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJ
SUxpdGVyYWwoInNjcmVlbkNvbG9yIiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzUHRyKTsKKyAg
ICBTdHJpbmcgaW5fcHJpbnRDb2xvciA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRT
dHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoInByaW50Q29sb3IiKSwgbnVs
bHB0ciwgcHJvdG9jb2xFcnJvcnNQdHIpOworICAgIGlmIChwcm90b2NvbEVycm9ycy0+bGVuZ3Ro
KCkpIHsKKyAgICAgICAgU3RyaW5nIGVycm9yTWVzc2FnZSA9IFN0cmluZzo6Zm9ybWF0KCJTb21l
IGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiRGF0YWJhc2Uu
ZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzIik7CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNo
ZXItPnJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXI6OkludmFsaWRQYXJhbXMsIGVycm9yTWVzc2FnZSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgp
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEVycm9yU3RyaW5nIGVycm9yOworICAg
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCk7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5PFN0cmluZz4+IG91
dF9jb2x1bW5OYW1lczsKKyAgICBTdHJpbmcgb3V0X25vdGVzOworICAgIGRvdWJsZSBvdXRfdGlt
ZXN0YW1wOworICAgIEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0IG91dF92YWx1ZXM7CisgICAg
SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSBvdXRfcGF5bG9hZDsKKyAgICBJbnNwZWN0b3I6OlR5
cGVCdWlsZGVyOjpEYXRhYmFzZTo6RGF0YWJhc2VJZCBvdXRfZGF0YWJhc2VJZDsKKyAgICBSZWZQ
dHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6RGF0YWJhc2U6OkVycm9yPiBvdXRfc3FsRXJyb3I7
CisgICAgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMgb3V0
X3NjcmVlbkNvbG9yOworICAgIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyOjpQcmludENvbG9yIG91dF9wcmludENvbG9yOworICAgIG1fYWdlbnQtPmV4ZWN1dGVOb09w
dGlvbmFsUGFyYW1ldGVycygmZXJyb3IsIGluX2NvbHVtbk5hbWVzLCBpbl9ub3RlcywgaW5fdGlt
ZXN0YW1wLCBpbl92YWx1ZXMsIGluX3BheWxvYWQsIGluX2RhdGFiYXNlSWQsIGluX3NxbEVycm9y
LCBpbl9zY3JlZW5Db2xvciwgaW5fcHJpbnRDb2xvciwgb3V0X2NvbHVtbk5hbWVzLCAmb3V0X25v
dGVzLCAmb3V0X3RpbWVzdGFtcCwgb3V0X3ZhbHVlcywgJm91dF9wYXlsb2FkLCAmb3V0X2RhdGFi
YXNlSWQsIG91dF9zcWxFcnJvciwgJm91dF9zY3JlZW5Db2xvciwgJm91dF9wcmludENvbG9yKTsK
KworICAgIGlmICghZXJyb3IubGVuZ3RoKCkpIHsKKyAgICAgICAgcmVzdWx0LT5zZXRBcnJheShB
U0NJSUxpdGVyYWwoImNvbHVtbk5hbWVzIiksIG91dF9jb2x1bW5OYW1lcyk7CisgICAgICAgIHJl
c3VsdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgibm90ZXMiKSwgb3V0X25vdGVzKTsKKyAgICAg
ICAgcmVzdWx0LT5zZXROdW1iZXIoQVNDSUlMaXRlcmFsKCJ0aW1lc3RhbXAiKSwgb3V0X3RpbWVz
dGFtcCk7CisgICAgICAgIHJlc3VsdC0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgidmFsdWVzIiks
IG91dF92YWx1ZXMpOworICAgICAgICByZXN1bHQtPnNldFZhbHVlKEFTQ0lJTGl0ZXJhbCgicGF5
bG9hZCIpLCBvdXRfcGF5bG9hZCk7CisgICAgICAgIHJlc3VsdC0+c2V0TnVtYmVyKEFTQ0lJTGl0
ZXJhbCgiZGF0YWJhc2VJZCIpLCBvdXRfZGF0YWJhc2VJZCk7CisgICAgICAgIHJlc3VsdC0+c2V0
T2JqZWN0KEFTQ0lJTGl0ZXJhbCgic3FsRXJyb3IiKSwgb3V0X3NxbEVycm9yKTsKKyAgICAgICAg
cmVzdWx0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJzY3JlZW5Db2xvciIpLCBJbnNwZWN0b3I6
OlR5cGVCdWlsZGVyOjpnZXRUZXN0RW51bUNvbnN0YW50VmFsdWUob3V0X3NjcmVlbkNvbG9yKSk7
CisgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgicHJpbnRDb2xvciIpLCBJ
bnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpnZXRUZXN0RW51bUNvbnN0YW50VmFsdWUob3V0X3ByaW50
Q29sb3IpKTsKKyAgICB9CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNh
bGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgZXJyb3IpOworfQorI2VuZGlmIC8vIEVOQUJMRShTUUxf
REFUQUJBU0UpCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxF
KElOU1BFQ1RPUikKKworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNo
ZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hl
cnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9w
dGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpZm5kZWYgSW5zcGVjdG9yVGVzdEZyb250
ZW5kRGlzcGF0Y2hlcnNfaAorI2RlZmluZSBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVy
c19oCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSAiSW5zcGVjdG9yVGVzdFR5
cGVCdWlsZGVycy5oIgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwuaD4KKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW5jbHVkZSA8
d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFt
ZXNwYWNlIEluc3BlY3RvciB7CisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2Vu
ZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyNlbmRpZiAvLyAhZGVmaW5lZChJbnNwZWN0b3JU
ZXN0RnJvbnRlbmREaXNwYXRjaGVyc19oKQorIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0RnJv
bnRlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0RnJvbnRl
bmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29t
bWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2Vu
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKKwor
I2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisK
K25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2Vu
ZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdEZy
b250ZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0VHlw
ZUJ1aWxkZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMt
d2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaWZuZGVmIEluc3BlY3RvclRl
c3RUeXBlQnVpbGRlcnNfaAorI2RlZmluZSBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzX2gKKwor
I2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9ySlNU
eXBlQnVpbGRlcnMuaD4KKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVHlwZUJ1aWxkZXIu
aD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRy
Lmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworbmFtZXNwYWNlIFR5cGVCdWlsZGVy
IHsKKworLy8gRm9yd2FyZCBkZWNsYXJhdGlvbnMuCisjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkK
K25hbWVzcGFjZSBEYXRhYmFzZSB7CitjbGFzcyBFcnJvcjsKK2VudW0gY2xhc3MgUHJpbWFyeUNv
bG9yczsKK30gLy8gRGF0YWJhc2UKKyNlbmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQorLy8g
RW5kIG9mIGZvcndhcmQgZGVjbGFyYXRpb25zLgorCisKKy8vIFR5cGVkZWZzLgorI2lmIEVOQUJM
RShTUUxfREFUQUJBU0UpCituYW1lc3BhY2UgRGF0YWJhc2UgeworLyogVW5pcXVlIGlkZW50aWZp
ZXIgb2YgRGF0YWJhc2Ugb2JqZWN0LiAqLwordHlwZWRlZiBpbnQgRGF0YWJhc2VJZDsKK30gLy8g
RGF0YWJhc2UKKyNlbmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQorLy8gRW5kIG9mIHR5cGVk
ZWZzLgorCitTdHJpbmcgZ2V0VGVzdEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKTsKKwordGVt
cGxhdGU8dHlwZW5hbWUgVD4gU3RyaW5nIGdldFRlc3RFbnVtQ29uc3RhbnRWYWx1ZShUIGVudW1W
YWx1ZSkKK3sKKyAgICByZXR1cm4gZ2V0VGVzdEVudW1Db25zdGFudFZhbHVlKHN0YXRpY19jYXN0
PGludD4oZW51bVZhbHVlKSk7Cit9CisKKyNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQorbmFtZXNw
YWNlIERhdGFiYXNlIHsKKy8qICAqLworZW51bSBjbGFzcyBQcmltYXJ5Q29sb3JzIHsKKyAgICBS
ZWQgPSAwLAorICAgIEdyZWVuID0gMSwKKyAgICBCbHVlID0gMiwKK307IC8vIGVudW0gY2xhc3Mg
UHJpbWFyeUNvbG9ycworLyogRGF0YWJhc2UgZXJyb3IuICovCitjbGFzcyBFcnJvciA6IHB1Ymxp
YyBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdEJhc2UgeworcHVibGljOgorICAgIGVudW0gewor
ICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCisgICAgICAgIE1lc3NhZ2VTZXQgPSAxIDw8IDAsCisg
ICAgICAgIENvZGVTZXQgPSAxIDw8IDEsCisgICAgICAgIEFsbEZpZWxkc1NldCA9IChNZXNzYWdl
U2V0IHwgQ29kZVNldCkKKyAgICB9OworCisgICAgdGVtcGxhdGU8aW50IFNUQVRFPgorICAgIGNs
YXNzIEJ1aWxkZXIgeworICAgIHByaXZhdGU6CisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3I6Oklu
c3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CisKKyAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1
aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwor
ICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPC8qRXJyb3IqL0luc3BlY3Rv
cjo6SW5zcGVjdG9yT2JqZWN0PiBwdHIpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRf
c3RhdGUpOworICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CisgICAgICAgIH0KKyAgICAgICAg
ZnJpZW5kIGNsYXNzIEVycm9yOworICAgIHB1YmxpYzoKKworICAgICAgICBCdWlsZGVyPFNUQVRF
IHwgTWVzc2FnZVNldD4mIHNldE1lc3NhZ2UoY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICAgICAg
eworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE1lc3NhZ2VTZXQpLCBwcm9w
ZXJ0eV9tZXNzYWdlX2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJp
bmcoQVNDSUlMaXRlcmFsKCJtZXNzYWdlIiksIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBj
YXN0U3RhdGU8TWVzc2FnZVNldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXI8U1RB
VEUgfCBDb2RlU2V0PiYgc2V0Q29kZShpbnQgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBDb2RlU2V0KSwgcHJvcGVydHlfY29kZV9hbHJlYWR5
X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKEFTQ0lJTGl0ZXJhbCgiY29k
ZSIpLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENvZGVTZXQ+KCk7Cisg
ICAgICAgIH0KKworICAgICAgICBvcGVyYXRvciBSZWZQdHI8RXJyb3I+JiAoKQorICAgICAgICB7
CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3Vs
dF9pc19ub3RfcmVhZHkpOworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKEVycm9y
KSA9PSBzaXplb2YoSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QpLCBjYW5ub3RfY2FzdCk7Cisg
ICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPEVycm9yPio+KCZtX3Jl
c3VsdCk7CisgICAgICAgIH0KKworICAgICAgICBQYXNzUmVmUHRyPEVycm9yPiByZWxlYXNlKCkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxFcnJvcj4oKnRoaXMpLnJlbGVh
c2UoKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICAvKgorICAgICAqIFN5bnRoZXRpYyBjb25z
dHJ1Y3RvcjoKKyAgICAgKiBSZWZQdHI8RXJyb3I+IHJlc3VsdCA9IEVycm9yOjpjcmVhdGUoKQor
ICAgICAqICAgICAuc2V0TWVzc2FnZSguLi4pCisgICAgICogICAgIC5zZXRDb2RlKC4uLik7Cisg
ICAgICovCisgICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCisgICAgewor
ICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSW5zcGVjdG9yOjpJbnNwZWN0b3JP
YmplY3Q6OmNyZWF0ZSgpKTsKKyAgICB9CisgICAgdHlwZWRlZiBJbnNwZWN0b3I6OlR5cGVCdWls
ZGVyOjpTdHJ1Y3RJdGVtVHJhaXRzIEl0ZW1UcmFpdHM7Cit9OworCit9IC8vIERhdGFiYXNlCisj
ZW5kaWYgLy8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKKworCisKK30gLy8gbmFtZXNwYWNlIFR5cGVC
dWlsZGVyCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElO
U1BFQ1RPUikKKworI2VuZGlmIC8vICFkZWZpbmVkKEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnNf
aCkKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5oCisKKyMjIyBCZWdp
biBGaWxlOiBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFt
ZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JUZXN0VHlwZUJ1
aWxkZXJzLmgiCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworbmFtZXNwYWNlIFR5cGVCdWls
ZGVyIHsKKworc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGVudW1fY29uc3RhbnRfdmFsdWVzW10g
PSB7CisgICAgInJlZCIsCisgICAgImdyZWVuIiwKKyAgICAiYmx1ZSIsCisgICAgImN5YW4iLAor
ICAgICJtYWdlbnRhIiwKKyAgICAieWVsbG93IiwKKyAgICAiYmxhY2siLAorfTsKKworU3RyaW5n
IGdldFRlc3RFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSkgeworICAgIHJldHVybiBlbnVtX2Nv
bnN0YW50X3ZhbHVlc1tjb2RlXTsKK30KKworCisKK30gLy8gbmFtZXNwYWNlIFR5cGVCdWlsZGVy
CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RP
UikKKworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmNwcApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVj
dGVkL2RvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbi1yZXN1bHQgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZG9tYWlu
cy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uLXJlc3VsdApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44NGYx
NGIzMWY5NGZlZGZlZTI0YTkxZTRhMDJiYWE1Yjk4Yzc4MzA1Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2Rv
bWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbi1yZXN1bHQKQEAgLTAsMCArMSw1
NjYgQEAKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0QmFja2VuZENvbW1hbmRzLmpzCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbnMtd2l0aC12YXJ5aW5nLWNv
bW1hbmQtc2l6ZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5CisKKy8vIE5ldHdvcmsxLgorSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1h
bmQoIk5ldHdvcmsxLmxvYWRSZXNvdXJjZTEiLCBbXSwgW10pOworCisvLyBOZXR3b3JrMy4KK0lu
c3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJOZXR3b3JrMy5sb2FkUmVzb3VyY2UxIiwg
W10sIFtdKTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJOZXR3b3JrMy5sb2Fk
UmVzb3VyY2UyIiwgW10sIFtdKTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJO
ZXR3b3JrMy5sb2FkUmVzb3VyY2UzIiwgW10sIFtdKTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0
ZXJDb21tYW5kKCJOZXR3b3JrMy5sb2FkUmVzb3VyY2U0IiwgW10sIFtdKTsKK0luc3BlY3RvckJh
Y2tlbmQucmVnaXN0ZXJDb21tYW5kKCJOZXR3b3JrMy5sb2FkUmVzb3VyY2U1IiwgW10sIFtdKTsK
K0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJOZXR3b3JrMy5sb2FkUmVzb3VyY2U2
IiwgW10sIFtdKTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJOZXR3b3JrMy5s
b2FkUmVzb3VyY2U3IiwgW10sIFtdKTsKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdEJhY2tl
bmRDb21tYW5kcy5qcworCisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNw
YXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbnMtd2l0
aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpZm5kZWYgSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNw
YXRjaGVyc19oCisjZGVmaW5lIEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnNfaAorCisj
aWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUgIkluc3BlY3RvclRlc3RUeXBlQnVpbGRl
cnMuaCIKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4K
KyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJp
bmc7CisKK2NsYXNzIEluc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsK
K3B1YmxpYzoKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlMShFcnJvclN0cmluZyopID0g
MDsKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIH5JbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNw
YXRjaGVySGFuZGxlcigpOworfTsKKworY2xhc3MgSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlz
cGF0Y2hlckhhbmRsZXIgeworcHVibGljOgorICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2Ux
KEVycm9yU3RyaW5nKikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UyKEVycm9y
U3RyaW5nKikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UzKEVycm9yU3RyaW5n
KikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2U0KEVycm9yU3RyaW5nKikgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2U1KEVycm9yU3RyaW5nKikgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2U2KEVycm9yU3RyaW5nKikgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBsb2FkUmVzb3VyY2U3KEVycm9yU3RyaW5nKikgPSAwOworcHJvdGVjdGVkOgorICAg
IHZpcnR1YWwgfkluc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCk7Cit9
OworCitjbGFzcyBJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVi
bGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIgewor
cHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvck5ldHdvcmsxQmFja2VuZERp
c3BhdGNoZXI+IGNyZWF0ZShJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiwg
SW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKKyAgICB2aXJ0dWFs
IHZvaWQgZGlzcGF0Y2gobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBQYXNzUmVm
UHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBtZXNzYWdlKSBvdmVycmlkZTsKK3ByaXZh
dGU6CisgICAgdm9pZCBsb2FkUmVzb3VyY2UxKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3I6
Okluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7Citwcml2YXRlOgorICAgIEluc3BlY3Rvck5ldHdv
cmsxQmFja2VuZERpc3BhdGNoZXIoSW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
ciosIEluc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7CisgICAgSW5z
cGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIG1fYWdlbnQ7Cit9OworCitj
bGFzcyBJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIElu
c3BlY3Rvcjo6SW5zcGVjdG9yU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIgeworcHVibGlj
OgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNo
ZXI+IGNyZWF0ZShJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiwgSW5zcGVj
dG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQg
ZGlzcGF0Y2gobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBQYXNzUmVmUHRyPElu
c3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBtZXNzYWdlKSBvdmVycmlkZTsKK3ByaXZhdGU6Cisg
ICAgdm9pZCBsb2FkUmVzb3VyY2UxKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3I6Okluc3Bl
Y3Rvck9iamVjdCYgbWVzc2FnZSk7CisgICAgdm9pZCBsb2FkUmVzb3VyY2UyKGxvbmcgY2FsbElk
LCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7CisgICAgdm9pZCBs
b2FkUmVzb3VyY2UzKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVj
dCYgbWVzc2FnZSk7CisgICAgdm9pZCBsb2FkUmVzb3VyY2U0KGxvbmcgY2FsbElkLCBjb25zdCBJ
bnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7CisgICAgdm9pZCBsb2FkUmVzb3Vy
Y2U1KGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCYgbWVzc2Fn
ZSk7CisgICAgdm9pZCBsb2FkUmVzb3VyY2U2KGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3I6
Okluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7CisgICAgdm9pZCBsb2FkUmVzb3VyY2U3KGxvbmcg
Y2FsbElkLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7Citwcml2
YXRlOgorICAgIEluc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXIoSW5zcGVjdG9yOjpJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciosIEluc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3Bh
dGNoZXJIYW5kbGVyKik7CisgICAgSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXIqIG1fYWdlbnQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlm
IC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyNlbmRpZiAvLyAhZGVmaW5lZChJbnNwZWN0b3JUZXN0
QmFja2VuZERpc3BhdGNoZXJzX2gpCisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5k
RGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNw
YXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13
aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
Ikluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2lmIEVOQUJMRShJTlNQRUNU
T1IpCisKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLmg+Cisj
aW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0
L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK0luc3BlY3Rvck5ldHdvcmsx
QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjp+SW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXIoKSB7IH0KK0luc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyOjp+SW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKSB7IH0KKwor
UGFzc1JlZlB0cjxJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyPiBJbnNwZWN0b3JO
ZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUoSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXIqIGJhY2tlbmREaXNwYXRjaGVyLCBJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVy
SGFuZGxlciogYWdlbnQpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnNwZWN0b3JOZXR3
b3JrMUJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyLCBhZ2VudCkpOworfQorCitJ
bnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpJbnNwZWN0b3JOZXR3b3JrMUJhY2tl
bmREaXNwYXRjaGVyKEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hl
ciwgSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQorICAg
IDogSW5zcGVjdG9yU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNo
ZXIpCisgICAgLCBtX2FnZW50KGFnZW50KQoreworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJl
Z2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbihBU0NJSUxpdGVyYWwoIk5ldHdvcmsxIiksIHRoaXMp
OworfQorCit2b2lkIEluc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNo
KGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IG1lc3NhZ2UpCit7CisgICAgUmVmPEluc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3Bh
dGNoZXI+IHByb3RlY3QoKnRoaXMpOworCisgICAgaWYgKG1ldGhvZCA9PSAibG9hZFJlc291cmNl
MSIpCisgICAgICAgIGxvYWRSZXNvdXJjZTEoY2FsbElkLCAqbWVzc2FnZS5nZXQoKSk7CisgICAg
ZWxzZQorICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKCZj
YWxsSWQsIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgU3RyaW5n
KCInIikgKyAiTmV0d29yazEiICsgJy4nICsgbWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOwor
fQorCit2b2lkIEluc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJj
ZTEobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYpCit7CisgICAgRXJyb3JTdHJp
bmcgZXJyb3I7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBtX2FnZW50LT5sb2FkUmVzb3VyY2UxKCZlcnJvcik7CisK
KyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVs
ZWFzZSgpLCBlcnJvcik7Cit9CisKK1Bhc3NSZWZQdHI8SW5zcGVjdG9yTmV0d29yazNCYWNrZW5k
RGlzcGF0Y2hlcj4gSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKElu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlciwgSW5zcGVjdG9yTmV0
d29yazNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQoreworICAgIHJldHVybiBhZG9w
dFJlZihuZXcgSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0
Y2hlciwgYWdlbnQpKTsKK30KKworSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6
SW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcihJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlciogYmFja2VuZERpc3BhdGNoZXIsIEluc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNo
ZXJIYW5kbGVyKiBhZ2VudCkKKyAgICA6IEluc3BlY3RvclN1cHBsZW1lbnRhbEJhY2tlbmREaXNw
YXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyKQorICAgICwgbV9hZ2VudChhZ2VudCkKK3sKKyAgICBt
X2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4oQVNDSUlMaXRl
cmFsKCJOZXR3b3JrMyIpLCB0aGlzKTsKK30KKwordm9pZCBJbnNwZWN0b3JOZXR3b3JrM0JhY2tl
bmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBtZXRob2Qs
IFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtZXNzYWdlKQoreworICAgIFJlZjxJbnNwZWN0
b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKKworICAgIHR5cGVk
ZWYgdm9pZCAoSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6KkNhbGxIYW5kbGVy
KShsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2Up
OworICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIENhbGxIYW5kbGVyPiBEaXNwYXRjaE1hcDsK
KyAgICBERVBSRUNBVEVEX0RFRklORV9TVEFUSUNfTE9DQUwoRGlzcGF0Y2hNYXAsIGRpc3BhdGNo
TWFwLCAoKSk7CisgICAgaWYgKGRpc3BhdGNoTWFwLmlzRW1wdHkoKSkgeworICAgICAgICBzdGF0
aWMgY29uc3Qgc3RydWN0IE1ldGhvZFRhYmxlIHsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIqIG5h
bWU7CisgICAgICAgICAgICBDYWxsSGFuZGxlciBoYW5kbGVyOworICAgICAgICB9IGNvbW1hbmRz
W10gPSB7CisgICAgICAgICAgICB7ICJsb2FkUmVzb3VyY2UxIiwgJkluc3BlY3Rvck5ldHdvcmsz
QmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTEgfSwKKyAgICAgICAgICAgIHsgImxvYWRS
ZXNvdXJjZTIiLCAmSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291
cmNlMiB9LAorICAgICAgICAgICAgeyAibG9hZFJlc291cmNlMyIsICZJbnNwZWN0b3JOZXR3b3Jr
M0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UzIH0sCisgICAgICAgICAgICB7ICJsb2Fk
UmVzb3VyY2U0IiwgJkluc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNv
dXJjZTQgfSwKKyAgICAgICAgICAgIHsgImxvYWRSZXNvdXJjZTUiLCAmSW5zcGVjdG9yTmV0d29y
azNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNSB9LAorICAgICAgICAgICAgeyAibG9h
ZFJlc291cmNlNiIsICZJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVz
b3VyY2U2IH0sCisgICAgICAgICAgICB7ICJsb2FkUmVzb3VyY2U3IiwgJkluc3BlY3Rvck5ldHdv
cmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTcgfSwKKyAgICAgICAgfTsKKyAgICAg
ICAgc2l6ZV90IGxlbmd0aCA9IFdURl9BUlJBWV9MRU5HVEgoY29tbWFuZHMpOworICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQorICAgICAgICAgICAgZGlzcGF0Y2hN
YXAuYWRkKGNvbW1hbmRzW2ldLm5hbWUsIGNvbW1hbmRzW2ldLmhhbmRsZXIpOworICAgIH0KKwor
ICAgIEhhc2hNYXA8U3RyaW5nLCBDYWxsSGFuZGxlcj46Oml0ZXJhdG9yIGl0ID0gZGlzcGF0Y2hN
YXAuZmluZChtZXRob2QpOworICAgIGlmIChpdCA9PSBkaXNwYXRjaE1hcC5lbmQoKSkgeworICAg
ICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIElu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgU3RyaW5nKCInIikgKyAi
TmV0d29yazMiICsgJy4nICsgbWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgKCgqdGhpcykuKml0LT52YWx1ZSkoY2FsbElkLCAqbWVzc2Fn
ZS5nZXQoKSk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6
bG9hZFJlc291cmNlMShsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JikKK3sKKyAg
ICBFcnJvclN0cmluZyBlcnJvcjsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQg
PSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJjZTEo
JmVycm9yKTsKKworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQs
IHJlc3VsdC5yZWxlYXNlKCksIGVycm9yKTsKK30KKwordm9pZCBJbnNwZWN0b3JOZXR3b3JrM0Jh
Y2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UyKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0
b3JPYmplY3QmKQoreworICAgIEVycm9yU3RyaW5nIGVycm9yOworICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgbV9hZ2Vu
dC0+bG9hZFJlc291cmNlMigmZXJyb3IpOworCisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2Vu
ZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgZXJyb3IpOworfQorCit2b2lkIElu
c3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTMobG9uZyBjYWxs
SWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYpCit7CisgICAgRXJyb3JTdHJpbmcgZXJyb3I7Cisg
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsKKyAgICBtX2FnZW50LT5sb2FkUmVzb3VyY2UzKCZlcnJvcik7CisKKyAgICBtX2JhY2tl
bmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBlcnJv
cik7Cit9CisKK3ZvaWQgSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJl
c291cmNlNChsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JikKK3sKKyAgICBFcnJv
clN0cmluZyBlcnJvcjsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNw
ZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJjZTQoJmVycm9y
KTsKKworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3Vs
dC5yZWxlYXNlKCksIGVycm9yKTsKK30KKwordm9pZCBJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmRE
aXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U1KGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmpl
Y3QmKQoreworICAgIEVycm9yU3RyaW5nIGVycm9yOworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgbV9hZ2VudC0+bG9h
ZFJlc291cmNlNSgmZXJyb3IpOworCisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3Bv
bnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgZXJyb3IpOworfQorCit2b2lkIEluc3BlY3Rv
ck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTYobG9uZyBjYWxsSWQsIGNv
bnN0IEluc3BlY3Rvck9iamVjdCYpCit7CisgICAgRXJyb3JTdHJpbmcgZXJyb3I7CisgICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsK
KyAgICBtX2FnZW50LT5sb2FkUmVzb3VyY2U2KCZlcnJvcik7CisKKyAgICBtX2JhY2tlbmREaXNw
YXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBlcnJvcik7Cit9
CisKK3ZvaWQgSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNl
Nyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JikKK3sKKyAgICBFcnJvclN0cmlu
ZyBlcnJvcjsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JP
YmplY3Q6OmNyZWF0ZSgpOworICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJjZTcoJmVycm9yKTsKKwor
ICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxl
YXNlKCksIGVycm9yKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAv
LyBFTkFCTEUoSU5TUEVDVE9SKQorCisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5k
RGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0RnJvbnRlbmRE
aXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbnMt
d2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpZm5kZWYgSW5zcGVjdG9yVGVzdEZyb250ZW5k
RGlzcGF0Y2hlcnNfaAorI2RlZmluZSBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVyc19o
CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSAiSW5zcGVjdG9yVGVzdFR5cGVC
dWlsZGVycy5oIgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwu
aD4KKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW5jbHVkZSA8d3Rm
L1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNw
YWNlIEluc3BlY3RvciB7CisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlm
IC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyNlbmRpZiAvLyAhZGVmaW5lZChJbnNwZWN0b3JUZXN0
RnJvbnRlbmREaXNwYXRjaGVyc19oKQorIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0RnJvbnRl
bmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0RnJvbnRlbmRE
aXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlu
cy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkluc3BlY3RvclRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCisKKyNpZiBFTkFCTEUoSU5T
UEVDVE9SKQorCisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5z
cGVjdG9yIHsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUo
SU5TUEVDVE9SKQorCisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RGcm9udGVuZERpc3BhdGNo
ZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5oCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbnMtd2l0aC12YXJ5aW5nLWNv
bW1hbmQtc2l6ZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5CisKKyNpZm5kZWYgSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVyc19oCisjZGVmaW5l
IEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnNfaAorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKwor
I2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JKU1R5cGVCdWlsZGVycy5oPgorI2luY2x1ZGUg
PGluc3BlY3Rvci9JbnNwZWN0b3JUeXBlQnVpbGRlci5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRp
b25zLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKworbmFtZXNwYWNlIEluc3BlY3Rv
ciB7CisKKworCituYW1lc3BhY2UgVHlwZUJ1aWxkZXIgeworCisKKworLy8gVHlwZWRlZnMuCitu
YW1lc3BhY2UgTmV0d29yazIgeworLyogVW5pcXVlIGxvYWRlciBpZGVudGlmaWVyLiAqLwordHlw
ZWRlZiBTdHJpbmcgTG9hZGVySWQ7Cit9IC8vIE5ldHdvcmsyCisvLyBFbmQgb2YgdHlwZWRlZnMu
CisKK1N0cmluZyBnZXRUZXN0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpOworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBTdHJpbmcgZ2V0VGVzdEVudW1Db25zdGFudFZhbHVlKFQgZW51bVZhbHVl
KQoreworICAgIHJldHVybiBnZXRUZXN0RW51bUNvbnN0YW50VmFsdWUoc3RhdGljX2Nhc3Q8aW50
PihlbnVtVmFsdWUpKTsKK30KKworCisKK30gLy8gbmFtZXNwYWNlIFR5cGVCdWlsZGVyCisKK30g
Ly8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKwor
I2VuZGlmIC8vICFkZWZpbmVkKEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnNfaCkKKyMjIyBFbmQg
RmlsZTogSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNw
ZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
Ky8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBkb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24KKy8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5oIgorCisjaWYgRU5BQkxF
KElOU1BFQ1RPUikKKworI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNl
IEluc3BlY3RvciB7CisKK25hbWVzcGFjZSBUeXBlQnVpbGRlciB7CisKK3N0YXRpYyBjb25zdCBj
aGFyKiBjb25zdCBlbnVtX2NvbnN0YW50X3ZhbHVlc1tdID0geworfTsKKworU3RyaW5nIGdldFRl
c3RFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSkgeworICAgIHJldHVybiBlbnVtX2NvbnN0YW50
X3ZhbHVlc1tjb2RlXTsKK30KKworCisKK30gLy8gbmFtZXNwYWNlIFR5cGVCdWlsZGVyCisKK30g
Ly8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKwor
IyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmNwcApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2V2
ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZXZlbnRzLXdpdGgtb3B0
aW9uYWwtcGFyYW1ldGVycy5qc29uLXJlc3VsdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iNGIxMTYzZDBjOGY1YjAw
MDI5ZDE5ODdlYTM5YThmM2U1OTcwYzhhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2V2ZW50cy13aXRoLW9w
dGlvbmFsLXBhcmFtZXRlcnMuanNvbi1yZXN1bHQKQEAgLTAsMCArMSw1MTEgQEAKKyMjIyBCZWdp
biBGaWxlOiBJbnNwZWN0b3JUZXN0QmFja2VuZENvbW1hbmRzLmpzCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgor
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2NvZGVnZW4vZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKy8vIERh
dGFiYXNlLgorSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRhdGFiYXNlRGlzcGF0Y2hlciA9IElu
c3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW5EaXNwYXRjaGVyLmJpbmQoSW5zcGVjdG9yQmFj
a2VuZCwgIkRhdGFiYXNlIik7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRXZlbnQoIkRhdGFi
YXNlLmRpZEV4ZWN1dGVPcHRpb25hbFBhcmFtZXRlcnMiLCBbImNvbHVtbk5hbWVzIiwgIm5vdGVz
IiwgInRpbWVzdGFtcCIsICJ2YWx1ZXMiLCAicGF5bG9hZCIsICJzcWxFcnJvciIsICJzY3JlZW5D
b2xvciIsICJwcmludENvbG9yIl0pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckV2ZW50KCJE
YXRhYmFzZS5kaWRFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMiLCBbImNvbHVtbk5hbWVzIiwg
Im5vdGVzIiwgInRpbWVzdGFtcCIsICJ2YWx1ZXMiLCAicGF5bG9hZCIsICJzcWxFcnJvciIsICJz
Y3JlZW5Db2xvciIsICJwcmludENvbG9yIl0pOworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0
QmFja2VuZENvbW1hbmRzLmpzCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0QmFja2Vu
ZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnRz
LXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2lmbmRlZiBJbnNwZWN0b3JUZXN0QmFja2VuZERp
c3BhdGNoZXJzX2gKKyNkZWZpbmUgSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVyc19oCisK
KyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSAiSW5zcGVjdG9yVGVzdFR5cGVCdWls
ZGVycy5oIgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5o
PgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0eXBlZGVmIFN0cmluZyBFcnJvclN0
cmluZzsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5T
UEVDVE9SKQorCisjZW5kaWYgLy8gIWRlZmluZWQoSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRj
aGVyc19oKQorIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgK
KworIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBh
cmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JUZXN0QmFj
a2VuZERpc3BhdGNoZXJzLmgiCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSA8
aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oPgorI2luY2x1ZGUgPGluc3BlY3Rv
ci9JbnNwZWN0b3JWYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25h
bWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNl
bmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorCisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RC
YWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0RnJv
bnRlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2
ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpZm5kZWYgSW5zcGVjdG9yVGVzdEZyb250
ZW5kRGlzcGF0Y2hlcnNfaAorI2RlZmluZSBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVy
c19oCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSAiSW5zcGVjdG9yVGVzdFR5
cGVCdWlsZGVycy5oIgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwuaD4KKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW5jbHVkZSA8
d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFt
ZXNwYWNlIEluc3BlY3RvciB7CisKKworCisjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKK2NsYXNz
IEluc3BlY3RvckRhdGFiYXNlRnJvbnRlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICBJbnNw
ZWN0b3JEYXRhYmFzZUZyb250ZW5kRGlzcGF0Y2hlcihJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwq
IGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgOiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbChp
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgfQorICAgIHZvaWQgZGlkRXhlY3V0ZU9wdGlvbmFs
UGFyYW1ldGVycyhQYXNzUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5PFN0cmlu
Zz4+IGNvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcqIGNvbnN0IG5vdGVzLCBjb25zdCBkb3VibGUq
IGNvbnN0IHRpbWVzdGFtcCwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4g
dmFsdWVzLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+IHBheWxvYWQsIFBh
c3NSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6RGF0YWJhc2U6OkVycm9yPiBzcWxFcnJv
ciwgY29uc3QgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMq
IGNvbnN0IHNjcmVlbkNvbG9yLCBjb25zdCBTdHJpbmcqIGNvbnN0IHByaW50Q29sb3IpOworICAg
IHZvaWQgZGlkRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKFBhc3NSZWZQdHI8SW5zcGVjdG9y
OjpUeXBlQnVpbGRlcjo6QXJyYXk8U3RyaW5nPj4gY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYg
bm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JP
YmplY3Q+IHZhbHVlcywgUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiBwYXls
b2FkLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkRhdGFiYXNlOjpFcnJvcj4g
c3FsRXJyb3IsIGNvbnN0IEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkRhdGFiYXNlOjpQcmltYXJ5
Q29sb3JzJiBzY3JlZW5Db2xvciwgY29uc3QgU3RyaW5nJiBwcmludENvbG9yKTsKK3ByaXZhdGU6
CisgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5l
bDsKK307CisjZW5kaWYgLy8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKKworfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorCisjZW5kaWYgLy8gIWRl
ZmluZWQoSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnNfaCkKKyMjIyBFbmQgRmlsZTog
SW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogSW5z
cGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgorLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVn
ZW4vZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgor
CisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
KworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKyNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQordm9p
ZCBJbnNwZWN0b3JEYXRhYmFzZUZyb250ZW5kRGlzcGF0Y2hlcjo6ZGlkRXhlY3V0ZU9wdGlvbmFs
UGFyYW1ldGVycyhQYXNzUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5PFN0cmlu
Zz4+IGNvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcqIGNvbnN0IG5vdGVzLCBjb25zdCBkb3VibGUq
IGNvbnN0IHRpbWVzdGFtcCwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4g
dmFsdWVzLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+IHBheWxvYWQsIFBh
c3NSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6RGF0YWJhc2U6OkVycm9yPiBzcWxFcnJv
ciwgY29uc3QgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMq
IGNvbnN0IHNjcmVlbkNvbG9yLCBjb25zdCBTdHJpbmcqIGNvbnN0IHByaW50Q29sb3IpCit7Cisg
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4ganNvbk1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6
OmNyZWF0ZSgpOworICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJtZXRo
b2QiKSwgQVNDSUlMaXRlcmFsKCJEYXRhYmFzZS5kaWRFeGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJz
IikpOworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCk7CisgICAgaWYgKGNvbHVtbk5hbWVzKQorICAgICAgICBwYXJhbXNP
YmplY3QtPnNldEFycmF5KEFTQ0lJTGl0ZXJhbCgiY29sdW1uTmFtZXMiKSwgY29sdW1uTmFtZXMp
OworICAgIGlmIChub3RlcykKKyAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoQVNDSUlM
aXRlcmFsKCJub3RlcyIpLCAqbm90ZXMpOworICAgIGlmICh0aW1lc3RhbXApCisgICAgICAgIHBh
cmFtc09iamVjdC0+c2V0TnVtYmVyKEFTQ0lJTGl0ZXJhbCgidGltZXN0YW1wIiksICp0aW1lc3Rh
bXApOworICAgIGlmICh2YWx1ZXMpCisgICAgICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KEFT
Q0lJTGl0ZXJhbCgidmFsdWVzIiksIHZhbHVlcyk7CisgICAgaWYgKHBheWxvYWQpCisgICAgICAg
IHBhcmFtc09iamVjdC0+c2V0VmFsdWUoQVNDSUlMaXRlcmFsKCJwYXlsb2FkIiksICpwYXlsb2Fk
KTsKKyAgICBpZiAoc3FsRXJyb3IpCisgICAgICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KEFT
Q0lJTGl0ZXJhbCgic3FsRXJyb3IiKSwgc3FsRXJyb3IpOworICAgIGlmIChzY3JlZW5Db2xvcikK
KyAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJzY3JlZW5Db2xv
ciIpLCAqc2NyZWVuQ29sb3IpOworICAgIGlmIChwcmludENvbG9yKQorICAgICAgICBwYXJhbXNP
YmplY3QtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInByaW50Q29sb3IiKSwgKnByaW50Q29sb3Ip
OworICAgIGpzb25NZXNzYWdlLT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJwYXJhbXMiKSwgcGFy
YW1zT2JqZWN0KTsKKworICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2Fn
ZVRvRnJvbnRlbmQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKK30KKwordm9pZCBJbnNw
ZWN0b3JEYXRhYmFzZUZyb250ZW5kRGlzcGF0Y2hlcjo6ZGlkRXhlY3V0ZU5vT3B0aW9uYWxQYXJh
bWV0ZXJzKFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk8U3RyaW5nPj4g
Y29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgbm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIFBhc3NS
ZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IHZhbHVlcywgUGFzc1JlZlB0cjxJbnNw
ZWN0b3I6Okluc3BlY3RvclZhbHVlPiBwYXlsb2FkLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6VHlw
ZUJ1aWxkZXI6OkRhdGFiYXNlOjpFcnJvcj4gc3FsRXJyb3IsIGNvbnN0IEluc3BlY3Rvcjo6VHlw
ZUJ1aWxkZXI6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzJiBzY3JlZW5Db2xvciwgY29uc3QgU3Ry
aW5nJiBwcmludENvbG9yKQoreworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGpzb25NZXNz
YWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBqc29uTWVzc2FnZS0+c2V0U3Ry
aW5nKEFTQ0lJTGl0ZXJhbCgibWV0aG9kIiksIEFTQ0lJTGl0ZXJhbCgiRGF0YWJhc2UuZGlkRXhl
Y3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzIikpOworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHBhcmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgcGFyYW1zT2Jq
ZWN0LT5zZXRBcnJheShBU0NJSUxpdGVyYWwoImNvbHVtbk5hbWVzIiksIGNvbHVtbk5hbWVzKTsK
KyAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoIm5vdGVzIiksIG5vdGVz
KTsKKyAgICBwYXJhbXNPYmplY3QtPnNldE51bWJlcihBU0NJSUxpdGVyYWwoInRpbWVzdGFtcCIp
LCB0aW1lc3RhbXApOworICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgi
dmFsdWVzIiksIHZhbHVlcyk7CisgICAgcGFyYW1zT2JqZWN0LT5zZXRWYWx1ZShBU0NJSUxpdGVy
YWwoInBheWxvYWQiKSwgcGF5bG9hZCk7CisgICAgcGFyYW1zT2JqZWN0LT5zZXRPYmplY3QoQVND
SUlMaXRlcmFsKCJzcWxFcnJvciIpLCBzcWxFcnJvcik7CisgICAgcGFyYW1zT2JqZWN0LT5zZXRT
dHJpbmcoQVNDSUlMaXRlcmFsKCJzY3JlZW5Db2xvciIpLCBzY3JlZW5Db2xvcik7CisgICAgcGFy
YW1zT2JqZWN0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJwcmludENvbG9yIiksIHByaW50Q29s
b3IpOworICAgIGpzb25NZXNzYWdlLT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJwYXJhbXMiKSwg
cGFyYW1zT2JqZWN0KTsKKworICAgIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLT5zZW5kTWVz
c2FnZVRvRnJvbnRlbmQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKK30KKyNlbmRpZiAv
LyBFTkFCTEUoU1FMX0RBVEFCQVNFKQorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2Vu
ZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdEZy
b250ZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0VHlw
ZUJ1aWxkZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnRzLXdp
dGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKKworI2lmbmRlZiBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJz
X2gKKyNkZWZpbmUgSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVyc19oCisKKyNpZiBFTkFCTEUoSU5T
UEVDVE9SKQorCisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckpTVHlwZUJ1aWxkZXJzLmg+
CisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclR5cGVCdWlsZGVyLmg+CisjaW5jbHVkZSA8
d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorCituYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKKworCisKK25hbWVzcGFjZSBUeXBlQnVpbGRlciB7CisKKy8vIEZvcndh
cmQgZGVjbGFyYXRpb25zLgorI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCituYW1lc3BhY2UgRGF0
YWJhc2UgeworY2xhc3MgRXJyb3I7Cit9IC8vIERhdGFiYXNlCisjZW5kaWYgLy8gRU5BQkxFKFNR
TF9EQVRBQkFTRSkKKy8vIEVuZCBvZiBmb3J3YXJkIGRlY2xhcmF0aW9ucy4KKworCisvLyBUeXBl
ZGVmcy4KKyNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQorbmFtZXNwYWNlIERhdGFiYXNlIHsKKy8q
IFVuaXF1ZSBpZGVudGlmaWVyIG9mIERhdGFiYXNlIG9iamVjdC4gKi8KK3R5cGVkZWYgU3RyaW5n
IERhdGFiYXNlSWQ7CisKK3R5cGVkZWYgU3RyaW5nIFByaW1hcnlDb2xvcnM7Cit9IC8vIERhdGFi
YXNlCisjZW5kaWYgLy8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKKy8vIEVuZCBvZiB0eXBlZGVmcy4K
KworU3RyaW5nIGdldFRlc3RFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSk7CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+IFN0cmluZyBnZXRUZXN0RW51bUNvbnN0YW50VmFsdWUoVCBlbnVtVmFsdWUp
Cit7CisgICAgcmV0dXJuIGdldFRlc3RFbnVtQ29uc3RhbnRWYWx1ZShzdGF0aWNfY2FzdDxpbnQ+
KGVudW1WYWx1ZSkpOworfQorCisjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKK25hbWVzcGFjZSBE
YXRhYmFzZSB7CisvKiBEYXRhYmFzZSBlcnJvci4gKi8KK2NsYXNzIEVycm9yIDogcHVibGljIElu
c3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0QmFzZSB7CitwdWJsaWM6CisgICAgZW51bSB7CisgICAg
ICAgIE5vRmllbGRzU2V0ID0gMCwKKyAgICAgICAgTWVzc2FnZVNldCA9IDEgPDwgMCwKKyAgICAg
ICAgQ29kZVNldCA9IDEgPDwgMSwKKyAgICAgICAgQWxsRmllbGRzU2V0ID0gKE1lc3NhZ2VTZXQg
fCBDb2RlU2V0KQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CisgICAgY2xhc3Mg
QnVpbGRlciB7CisgICAgcHJpdmF0ZToKKyAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVj
dG9yT2JqZWN0PiBtX3Jlc3VsdDsKKworICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRl
cjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CisgICAg
ICAgIH0KKworICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8LypFcnJvciovSW5zcGVjdG9yOjpJ
bnNwZWN0b3JPYmplY3Q+IHB0cikKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0
ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKKyAgICAgICAgfQorICAgICAgICBmcmll
bmQgY2xhc3MgRXJyb3I7CisgICAgcHVibGljOgorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBN
ZXNzYWdlU2V0PiYgc2V0TWVzc2FnZShjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgICAgICB7Cisg
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTWVzc2FnZVNldCksIHByb3BlcnR5
X21lc3NhZ2VfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZyhB
U0NJSUxpdGVyYWwoIm1lc3NhZ2UiKSwgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RT
dGF0ZTxNZXNzYWdlU2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8
IENvZGVTZXQ+JiBzZXRDb2RlKGludCB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoIShTVEFURSAmIENvZGVTZXQpLCBwcm9wZXJ0eV9jb2RlX2FscmVhZHlfc2V0
KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoQVNDSUlMaXRlcmFsKCJjb2RlIiks
IHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q29kZVNldD4oKTsKKyAgICAg
ICAgfQorCisgICAgICAgIG9wZXJhdG9yIFJlZlB0cjxFcnJvcj4mICgpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lz
X25vdF9yZWFkeSk7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoRXJyb3IpID09
IHNpemVvZihJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCksIGNhbm5vdF9jYXN0KTsKKyAgICAg
ICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8RXJyb3I+Kj4oJm1fcmVzdWx0
KTsKKyAgICAgICAgfQorCisgICAgICAgIFBhc3NSZWZQdHI8RXJyb3I+IHJlbGVhc2UoKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gUmVmUHRyPEVycm9yPigqdGhpcykucmVsZWFzZSgp
OworICAgICAgICB9CisgICAgfTsKKworICAgIC8qCisgICAgICogU3ludGhldGljIGNvbnN0cnVj
dG9yOgorICAgICAqIFJlZlB0cjxFcnJvcj4gcmVzdWx0ID0gRXJyb3I6OmNyZWF0ZSgpCisgICAg
ICogICAgIC5zZXRNZXNzYWdlKC4uLikKKyAgICAgKiAgICAgLnNldENvZGUoLi4uKTsKKyAgICAg
Ki8KKyAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVj
dDo6Y3JlYXRlKCkpOworICAgIH0KKyAgICB0eXBlZGVmIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6
OlN0cnVjdEl0ZW1UcmFpdHMgSXRlbVRyYWl0czsKK307CisKK30gLy8gRGF0YWJhc2UKKyNlbmRp
ZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQorCisKKworfSAvLyBuYW1lc3BhY2UgVHlwZUJ1aWxk
ZXIKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVD
VE9SKQorCisjZW5kaWYgLy8gIWRlZmluZWQoSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVyc19oKQor
IyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmgKKworIyMjIEJlZ2luIEZp
bGU6IEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgorLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVn
ZW4vZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmgiCisKKyNpZiBF
TkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1l
c3BhY2UgSW5zcGVjdG9yIHsKKworbmFtZXNwYWNlIFR5cGVCdWlsZGVyIHsKKworc3RhdGljIGNv
bnN0IGNoYXIqIGNvbnN0IGVudW1fY29uc3RhbnRfdmFsdWVzW10gPSB7Cit9OworCitTdHJpbmcg
Z2V0VGVzdEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKSB7CisgICAgcmV0dXJuIGVudW1fY29u
c3RhbnRfdmFsdWVzW2NvZGVdOworfQorCisKKworfSAvLyBuYW1lc3BhY2UgVHlwZUJ1aWxkZXIK
KworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9S
KQorCisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuY3BwCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0
ZWQvZmFpbC1vbi1kdXBsaWNhdGUtdHlwZS1kZWNsYXJhdGlvbnMuanNvbi1lcnJvciBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9u
LWR1cGxpY2F0ZS10eXBlLWRlY2xhcmF0aW9ucy5qc29uLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ0N2Nk
ZjhlMjhlODU2NjEwYTI2ZjgxNTQ5NDNmMzZjZjhiN2QxZjQKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFp
bC1vbi1kdXBsaWNhdGUtdHlwZS1kZWNsYXJhdGlvbnMuanNvbi1lcnJvcgpAQCAtMCwwICsxIEBA
CitFUlJPUjogRHVwbGljYXRlIHR5cGUgZGVjbGFyYXRpb246IFJ1bnRpbWUuUmVtb3RlT2JqZWN0
SWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWVudW0td2l0aC1uby12YWx1ZXMuanNvbi1lcnJvciBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWls
LW9uLWVudW0td2l0aC1uby12YWx1ZXMuanNvbi1lcnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yNjU1YzJiOTA3
ZTAyZTNlODRjYjNmNjZmYTFmNThlMTNkOWI3YjUzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24t
ZW51bS13aXRoLW5vLXZhbHVlcy5qc29uLWVycm9yCkBAIC0wLDAgKzEgQEAKK0VSUk9SOiBUeXBl
IHJlZmVyZW5jZSB3aXRoIGVudW0gdmFsdWVzIG11c3QgaGF2ZSBhdCBsZWFzdCBvbmUgZW51bSB2
YWx1ZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLXN0cmluZy10eXBlZC1vcHRpb25hbC1wYXJhbWV0ZXIt
ZmxhZy5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tc3RyaW5nLXR5cGVkLW9wdGlvbmFsLXBhcmFtZXRlci1m
bGFnLmpzb24tZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTdiMmFmMGU0N2U5M2Y4MDQ5Nzk0NDQ3MjU3ZGYz
MjcyM2YwNjgyNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLXN0cmluZy10eXBlZC1vcHRpb25h
bC1wYXJhbWV0ZXItZmxhZy5qc29uLWVycm9yCkBAIC0wLDAgKzEgQEAKK0VSUk9SOiBUaGUgJ29w
dGlvbmFsJyBmbGFnIGZvciBhIHBhcmFtZXRlciBtdXN0IGJlIGEgYm9vbGVhbiBsaXRlcmFsLgpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2V4cGVjdGVkL2ZhaWwtb24tc3RyaW5nLXR5cGVkLW9wdGlvbmFsLXR5cGUtbWVtYmVyLmpzb24t
ZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhw
ZWN0ZWQvZmFpbC1vbi1zdHJpbmctdHlwZWQtb3B0aW9uYWwtdHlwZS1tZW1iZXIuanNvbi1lcnJv
cgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi44NmRmMzc1MGMxYTc3OTc4OTNjYmZiN2UyODc2ZDkyY2NlY2MyZjkxCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tc3RyaW5nLXR5cGVkLW9wdGlvbmFsLXR5cGUtbWVtYmVy
Lmpzb24tZXJyb3IKQEAgLTAsMCArMSBAQAorRVJST1I6IFRoZSAnb3B0aW9uYWwnIGZsYWcgZm9y
IGEgdHlwZSBtZW1iZXIgbXVzdCBiZSBhIGJvb2xlYW4gbGl0ZXJhbC4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWls
LW9uLXR5cGUtZGVjbGFyYXRpb24tdXNpbmctdHlwZS1yZWZlcmVuY2UuanNvbi1lcnJvciBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWls
LW9uLXR5cGUtZGVjbGFyYXRpb24tdXNpbmctdHlwZS1yZWZlcmVuY2UuanNvbi1lcnJvcgpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi40MmY1NzUzYTQzOTYxNDRlYjU2NmM1YzU5NjhkMDQ5YWVjNjE4MmRiCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2V4cGVjdGVkL2ZhaWwtb24tdHlwZS1kZWNsYXJhdGlvbi11c2luZy10eXBlLXJlZmVyZW5jZS5q
c29uLWVycm9yCkBAIC0wLDAgKzEgQEAKK0VSUk9SOiBUeXBlIHJlZmVyZW5jZSBjYW5ub3QgaGF2
ZSBib3RoICd0eXBlJyBhbmQgJyRyZWYnIGtleXMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi10eXBlLXdp
dGgtbG93ZXJjYXNlLW5hbWUuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLXR5cGUtd2l0aC1sb3dlcmNhc2Ut
bmFtZS5qc29uLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRlNDYyMjUwYzBhZjgwYTE3OWUwNmFhZjQ1ZDIx
ZWI1NDZkYjg4MTQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi10eXBlLXdpdGgtbG93ZXJjYXNl
LW5hbWUuanNvbi1lcnJvcgpAQCAtMCwwICsxIEBACitFUlJPUjogVHlwZXMgbXVzdCBiZWdpbiB3
aXRoIGFuIHVwcGVyY2FzZSBjaGFyYWN0ZXIuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi11bmtub3duLXR5
cGUtcmVmZXJlbmNlLWluLXR5cGUtZGVjbGFyYXRpb24uanNvbi1lcnJvciBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLXVua25v
d24tdHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1kZWNsYXJhdGlvbi5qc29uLWVycm9yCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmQzYzc4MmQ4OWRiNTY1ZDcyNGU3NTQwZTMyZWRjZmRiZDc5YTJmNzMKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhw
ZWN0ZWQvZmFpbC1vbi11bmtub3duLXR5cGUtcmVmZXJlbmNlLWluLXR5cGUtZGVjbGFyYXRpb24u
anNvbi1lcnJvcgpAQCAtMCwwICsxIEBACitFUlJPUjogTG9va3VwIGZhaWxlZCBmb3IgdHlwZSBy
ZWZlcmVuY2U6IGRyYWdvbiAocmVmZXJlbmNlZCBmcm9tIGRvbWFpbjogUnVudGltZSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBl
Y3RlZC9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1tZW1iZXIuanNvbi1l
cnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBl
Y3RlZC9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1tZW1iZXIuanNvbi1l
cnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5mYWY2NjcyY2JlZjA5NjMwZmQ5YmU4ZmZhZGFjZTEyYzU2MTFjY2E4
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVyZW5jZS1pbi10eXBl
LW1lbWJlci5qc29uLWVycm9yCkBAIC0wLDAgKzEgQEAKK0VSUk9SOiBMb29rdXAgZmFpbGVkIGZv
ciB0eXBlIHJlZmVyZW5jZTogQ29sb3IgKHJlZmVyZW5jZWQgZnJvbSBkb21haW46IEZhbnRhc3kp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZXhwZWN0ZWQvc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbi1yZXN1bHQgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvc2Ft
ZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbi1yZXN1bHQKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWFmZGM1
ODc5MTYxZDg5ZmM4NzIwM2JmNjkyMDM2MWFkYzliYWI5MwotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9zYW1l
LXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uLXJlc3VsdApAQCAtMCwwICsxLDM3MCBAQAor
IyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kQ29tbWFuZHMuanMKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4u
anNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Cisj
IyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kQ29tbWFuZHMuanMKKworIyMjIEJlZ2lu
IEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCisv
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Y29kZWdlbi9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2lmbmRl
ZiBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzX2gKKyNkZWZpbmUgSW5zcGVjdG9yVGVz
dEJhY2tlbmREaXNwYXRjaGVyc19oCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVk
ZSAiSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5oIgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3Igewor
Cit0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
CisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorCisjZW5kaWYgLy8gIWRlZmluZWQoSW5z
cGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVyc19oKQorIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JU
ZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RC
YWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IHNhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlLWlu
c3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaWYgRU5BQkxFKElO
U1BFQ1RPUikKKworI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwu
aD4KKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW5jbHVkZSA8d3Rm
L3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKK30gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKworIyMjIEVu
ZCBGaWxlOiBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4g
RmlsZTogSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCisv
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Y29kZWdlbi9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2lmbmRl
ZiBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVyc19oCisjZGVmaW5lIEluc3BlY3RvclRl
c3RGcm9udGVuZERpc3BhdGNoZXJzX2gKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNs
dWRlICJJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmgiCisjaW5jbHVkZSA8aW5zcGVjdG9yL0lu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oPgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JW
YWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKK30gLy8gbmFtZXNw
YWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKworI2VuZGlmIC8v
ICFkZWZpbmVkKEluc3BlY3RvclRlc3RGcm9udGVuZERpc3BhdGNoZXJzX2gpCisjIyMgRW5kIEZp
bGU6IEluc3BlY3RvclRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6
IEluc3BlY3RvclRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCisvLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29k
ZWdlbi9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkluc3BlY3RvclRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgi
CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5o
PgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisK
KyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorCisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRl
c3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVz
dFR5cGVCdWlsZGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNhbWUt
dHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaWZuZGVmIEluc3BlY3RvclRlc3RUeXBlQnVpbGRl
cnNfaAorI2RlZmluZSBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzX2gKKworI2lmIEVOQUJMRShJ
TlNQRUNUT1IpCisKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9ySlNUeXBlQnVpbGRlcnMu
aD4KKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVHlwZUJ1aWxkZXIuaD4KKyNpbmNsdWRl
IDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisKK25hbWVz
cGFjZSBJbnNwZWN0b3IgeworCisKKworbmFtZXNwYWNlIFR5cGVCdWlsZGVyIHsKKworCisKKy8v
IFR5cGVkZWZzLgorbmFtZXNwYWNlIFJ1bnRpbWUgeworLyogVW5pcXVlIG9iamVjdCBpZGVudGlm
aWVyLiAqLwordHlwZWRlZiBTdHJpbmcgUmVtb3RlT2JqZWN0SWQ7Cit9IC8vIFJ1bnRpbWUKKwor
bmFtZXNwYWNlIFJ1bnRpbWUyIHsKKy8qIFVuaXF1ZSBvYmplY3QgaWRlbnRpZmllci4gKi8KK3R5
cGVkZWYgU3RyaW5nIFJlbW90ZU9iamVjdElkOworfSAvLyBSdW50aW1lMgorLy8gRW5kIG9mIHR5
cGVkZWZzLgorCitTdHJpbmcgZ2V0VGVzdEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKTsKKwor
dGVtcGxhdGU8dHlwZW5hbWUgVD4gU3RyaW5nIGdldFRlc3RFbnVtQ29uc3RhbnRWYWx1ZShUIGVu
dW1WYWx1ZSkKK3sKKyAgICByZXR1cm4gZ2V0VGVzdEVudW1Db25zdGFudFZhbHVlKHN0YXRpY19j
YXN0PGludD4oZW51bVZhbHVlKSk7Cit9CisKKworCit9IC8vIG5hbWVzcGFjZSBUeXBlQnVpbGRl
cgorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNU
T1IpCisKKyNlbmRpZiAvLyAhZGVmaW5lZChJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzX2gpCisj
IyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuaAorCisjIyMgQmVnaW4gRmls
ZTogSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
MywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbgorLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4v
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmgiCisKKyNpZiBFTkFC
TEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKKworbmFtZXNwYWNlIFR5cGVCdWlsZGVyIHsKKworc3RhdGljIGNvbnN0
IGNoYXIqIGNvbnN0IGVudW1fY29uc3RhbnRfdmFsdWVzW10gPSB7Cit9OworCitTdHJpbmcgZ2V0
VGVzdEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKSB7CisgICAgcmV0dXJuIGVudW1fY29uc3Rh
bnRfdmFsdWVzW2NvZGVdOworfQorCisKKworfSAvLyBuYW1lc3BhY2UgVHlwZUJ1aWxkZXIKKwor
fSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQor
CisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuY3BwCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQv
c2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3NoYWRvd2VkLW9wdGlv
bmFsLXR5cGUtc2V0dGVycy5qc29uLXJlc3VsdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lMjAzN2RjMzcyYjVjZDhl
ZDkyYWY1NmQ0MGU1ZDFmOGIzZmIyNmM1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3NoYWRvd2VkLW9wdGlv
bmFsLXR5cGUtc2V0dGVycy5qc29uLXJlc3VsdApAQCAtMCwwICsxLDQ0NiBAQAorIyMjIEJlZ2lu
IEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kQ29tbWFuZHMuanMKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KKy8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9j
b2RlZ2VuL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorIyMjIEVuZCBG
aWxlOiBJbnNwZWN0b3JUZXN0QmFja2VuZENvbW1hbmRzLmpzCisKKyMjIyBCZWdpbiBGaWxlOiBJ
bnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
MywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KKy8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2Vu
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaWZuZGVmIEluc3Bl
Y3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnNfaAorI2RlZmluZSBJbnNwZWN0b3JUZXN0QmFja2Vu
ZERpc3BhdGNoZXJzX2gKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRlICJJbnNw
ZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmgiCisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3R5cGVk
ZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2Vu
ZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyNlbmRpZiAvLyAhZGVmaW5lZChJbnNwZWN0b3JU
ZXN0QmFja2VuZERpc3BhdGNoZXJzX2gpCisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RCYWNr
ZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdEJhY2tlbmRE
aXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBv
ZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1Qg
RURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93
ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
SW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaWYgRU5BQkxFKElOU1BFQ1RP
UikKKworI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4KKyNp
bmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKK30gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKworIyMjIEVuZCBGaWxl
OiBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTog
SW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSBzaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbgorLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVn
ZW4vZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpZm5kZWYgSW5z
cGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnNfaAorI2RlZmluZSBJbnNwZWN0b3JUZXN0RnJv
bnRlbmREaXNwYXRjaGVyc19oCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSAi
SW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5oIgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwuaD4KKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVz
Lmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCit9IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyNlbmRpZiAvLyAhZGVm
aW5lZChJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVyc19oKQorIyMjIEVuZCBGaWxlOiBJ
bnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNw
ZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
MywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KKy8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2Vu
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKKwor
I2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisK
K25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2Vu
ZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdEZy
b250ZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0VHlw
ZUJ1aWxkZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93ZWQt
b3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weQorCisjaWZuZGVmIEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnNf
aAorI2RlZmluZSBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzX2gKKworI2lmIEVOQUJMRShJTlNQ
RUNUT1IpCisKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9ySlNUeXBlQnVpbGRlcnMuaD4K
KyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVHlwZUJ1aWxkZXIuaD4KKyNpbmNsdWRlIDx3
dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisKK25hbWVzcGFj
ZSBJbnNwZWN0b3IgeworCisKKworbmFtZXNwYWNlIFR5cGVCdWlsZGVyIHsKKworLy8gRm9yd2Fy
ZCBkZWNsYXJhdGlvbnMuCituYW1lc3BhY2UgUnVudGltZSB7CitjbGFzcyBLZXlQYXRoOworfSAv
LyBSdW50aW1lCisvLyBFbmQgb2YgZm9yd2FyZCBkZWNsYXJhdGlvbnMuCisKKworCisKK1N0cmlu
ZyBnZXRUZXN0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpOworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBTdHJpbmcgZ2V0VGVzdEVudW1Db25zdGFudFZhbHVlKFQgZW51bVZhbHVlKQoreworICAg
IHJldHVybiBnZXRUZXN0RW51bUNvbnN0YW50VmFsdWUoc3RhdGljX2Nhc3Q8aW50PihlbnVtVmFs
dWUpKTsKK30KKworbmFtZXNwYWNlIFJ1bnRpbWUgeworLyogS2V5IHBhdGguICovCitjbGFzcyBL
ZXlQYXRoIDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0QmFzZSB7CitwdWJsaWM6
CisgICAgLy8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAndHlwZScgd2hpbGUgZ2VuZXJhdGlu
ZyBLZXlQYXRoLgorICAgIGVudW0gY2xhc3MgVHlwZSB7CisgICAgICAgIE51bGwgPSAwLAorICAg
ICAgICBTdHJpbmcgPSAxLAorICAgICAgICBBcnJheSA9IDIsCisgICAgfTsgLy8gZW51bSBjbGFz
cyBUeXBlCisgICAgZW51bSB7CisgICAgICAgIE5vRmllbGRzU2V0ID0gMCwKKyAgICAgICAgVHlw
ZVNldCA9IDEgPDwgMCwKKyAgICAgICAgQWxsRmllbGRzU2V0ID0gKFR5cGVTZXQpCisgICAgfTsK
KworICAgIHRlbXBsYXRlPGludCBTVEFURT4KKyAgICBjbGFzcyBCdWlsZGVyIHsKKyAgICBwcml2
YXRlOgorICAgICAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0
OworCisgICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNh
c3RTdGF0ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2Fz
dDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1
aWxkZXIoUGFzc1JlZlB0cjwvKktleVBhdGgqL0luc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBw
dHIpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmll
bGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOworICAgICAgICAgICAg
bV9yZXN1bHQgPSBwdHI7CisgICAgICAgIH0KKyAgICAgICAgZnJpZW5kIGNsYXNzIEtleVBhdGg7
CisgICAgcHVibGljOgorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBUeXBlU2V0PiYgc2V0VHlw
ZShUeXBlIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNU
QVRFICYgVHlwZVNldCksIHByb3BlcnR5X3R5cGVfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAg
bV9yZXN1bHQtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInR5cGUiKSwgSW5zcGVjdG9yOjpUeXBl
QnVpbGRlcjo6Z2V0VGVzdEVudW1Db25zdGFudFZhbHVlKHN0YXRpY19jYXN0PGludD4odmFsdWUp
KSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFR5cGVTZXQ+KCk7CisgICAgICAgIH0K
KworICAgICAgICBvcGVyYXRvciBSZWZQdHI8S2V5UGF0aD4mICgpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25v
dF9yZWFkeSk7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoS2V5UGF0aCkgPT0g
c2l6ZW9mKEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0KSwgY2Fubm90X2Nhc3QpOworICAgICAg
ICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxLZXlQYXRoPio+KCZtX3Jlc3Vs
dCk7CisgICAgICAgIH0KKworICAgICAgICBQYXNzUmVmUHRyPEtleVBhdGg+IHJlbGVhc2UoKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gUmVmUHRyPEtleVBhdGg+KCp0aGlzKS5yZWxl
YXNlKCk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgLyoKKyAgICAgKiBTeW50aGV0aWMgY29u
c3RydWN0b3I6CisgICAgICogUmVmUHRyPEtleVBhdGg+IHJlc3VsdCA9IEtleVBhdGg6OmNyZWF0
ZSgpCisgICAgICogICAgIC5zZXRUeXBlKC4uLik7CisgICAgICovCisgICAgc3RhdGljIEJ1aWxk
ZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gQnVpbGRlcjxO
b0ZpZWxkc1NldD4oSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpKTsKKyAgICB9
CisgICAgdHlwZWRlZiBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpTdHJ1Y3RJdGVtVHJhaXRzIEl0
ZW1UcmFpdHM7CisKKyAgICB2b2lkIHNldFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQorICAg
IHsKKyAgICAgICAgSW5zcGVjdG9yT2JqZWN0QmFzZTo6c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgi
c3RyaW5nIiksIHZhbHVlKTsKKyAgICB9CisKKyAgICB2b2lkIHNldEFycmF5KFBhc3NSZWZQdHI8
SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk8U3RyaW5nPj4gdmFsdWUpCisgICAgeworICAg
ICAgICBJbnNwZWN0b3JPYmplY3RCYXNlOjpzZXRBcnJheShBU0NJSUxpdGVyYWwoImFycmF5Iiks
IHZhbHVlKTsKKyAgICB9Cit9OworCit9IC8vIFJ1bnRpbWUKKworCisKK30gLy8gbmFtZXNwYWNl
IFR5cGVCdWlsZGVyCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5B
QkxFKElOU1BFQ1RPUikKKworI2VuZGlmIC8vICFkZWZpbmVkKEluc3BlY3RvclRlc3RUeXBlQnVp
bGRlcnNfaCkKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5oCisKKyMj
IyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmNwcAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNv
bgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2NvZGVnZW4vZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmgi
CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5o
PgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworbmFtZXNwYWNlIFR5cGVCdWlsZGVyIHsKKwor
c3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGVudW1fY29uc3RhbnRfdmFsdWVzW10gPSB7CisgICAg
Im51bGwiLAorICAgICJzdHJpbmciLAorICAgICJhcnJheSIsCit9OworCitTdHJpbmcgZ2V0VGVz
dEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKSB7CisgICAgcmV0dXJuIGVudW1fY29uc3RhbnRf
dmFsdWVzW2NvZGVdOworfQorCisKKworfSAvLyBuYW1lc3BhY2UgVHlwZUJ1aWxkZXIKKworfSAv
LyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorCisj
IyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuY3BwCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlw
ZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24tcmVzdWx0IGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVj
bGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uLXJlc3VsdApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45
OWFmZTEwNjhiMjI2MTVlZGZlMTUxZDVjMTcwMmMwYjQxZjk2MTE5Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVk
L3R5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uLXJlc3VsdApAQCAt
MCwwICsxLDM2NSBAQAorIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kQ29tbWFu
ZHMuanMKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlv
bi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQorIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0QmFja2Vu
ZENvbW1hbmRzLmpzCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3Bh
dGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJh
dGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaWZuZGVmIEluc3BlY3RvclRlc3RCYWNrZW5k
RGlzcGF0Y2hlcnNfaAorI2RlZmluZSBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzX2gK
KworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRlICJJbnNwZWN0b3JUZXN0VHlwZUJ1
aWxkZXJzLmgiCisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
Lmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3R5cGVkZWYgU3RyaW5nIEVycm9y
U3RyaW5nOworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJ
TlNQRUNUT1IpCisKKyNlbmRpZiAvLyAhZGVmaW5lZChJbnNwZWN0b3JUZXN0QmFja2VuZERpc3Bh
dGNoZXJzX2gpCisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMu
aAorCisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlh
c2VkLXByaW1pdGl2ZS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW5zcGVj
dG9yVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKwor
I2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4KKyNpbmNsdWRl
IDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3Bl
Y3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKworIyMjIEVuZCBGaWxlOiBJbnNw
ZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogSW5zcGVj
dG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbgorLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2Nv
ZGVnZW4vZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpZm5kZWYg
SW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnNfaAorI2RlZmluZSBJbnNwZWN0b3JUZXN0
RnJvbnRlbmREaXNwYXRjaGVyc19oCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVk
ZSAiSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5oIgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwuaD4KKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFs
dWVzLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCit9IC8vIG5hbWVzcGFj
ZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyNlbmRpZiAvLyAh
ZGVmaW5lZChJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVyc19oKQorIyMjIEVuZCBGaWxl
OiBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBJ
bnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpz
b24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9jb2RlZ2VuL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0
Y2hlcnMuaCIKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit9IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyMjIyBFbmQgRmlsZTogSW5z
cGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNw
ZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisv
LyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZy
b20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24KKy8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2Vu
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaWZuZGVmIEluc3Bl
Y3RvclRlc3RUeXBlQnVpbGRlcnNfaAorI2RlZmluZSBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJz
X2gKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVj
dG9ySlNUeXBlQnVpbGRlcnMuaD4KKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVHlwZUJ1
aWxkZXIuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9QYXNz
UmVmUHRyLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworbmFtZXNwYWNlIFR5cGVC
dWlsZGVyIHsKKworCisKKy8vIFR5cGVkZWZzLgorbmFtZXNwYWNlIFJ1bnRpbWUgeworLyogVW5p
cXVlIG9iamVjdCBpZGVudGlmaWVyLiAqLwordHlwZWRlZiBpbnQgUmVtb3RlT2JqZWN0SWQ7Cit9
IC8vIFJ1bnRpbWUKKy8vIEVuZCBvZiB0eXBlZGVmcy4KKworU3RyaW5nIGdldFRlc3RFbnVtQ29u
c3RhbnRWYWx1ZShpbnQgY29kZSk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IFN0cmluZyBnZXRU
ZXN0RW51bUNvbnN0YW50VmFsdWUoVCBlbnVtVmFsdWUpCit7CisgICAgcmV0dXJuIGdldFRlc3RF
bnVtQ29uc3RhbnRWYWx1ZShzdGF0aWNfY2FzdDxpbnQ+KGVudW1WYWx1ZSkpOworfQorCisKKwor
fSAvLyBuYW1lc3BhY2UgVHlwZUJ1aWxkZXIKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisK
KyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorCisjZW5kaWYgLy8gIWRlZmluZWQoSW5zcGVj
dG9yVGVzdFR5cGVCdWlsZGVyc19oKQorIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0VHlwZUJ1
aWxkZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuY3Bw
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYWxp
YXNlZC1wcmltaXRpdmUtdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkluc3Bl
Y3RvclRlc3RUeXBlQnVpbGRlcnMuaCIKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNs
dWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCituYW1l
c3BhY2UgVHlwZUJ1aWxkZXIgeworCitzdGF0aWMgY29uc3QgY2hhciogY29uc3QgZW51bV9jb25z
dGFudF92YWx1ZXNbXSA9IHsKK307CisKK1N0cmluZyBnZXRUZXN0RW51bUNvbnN0YW50VmFsdWUo
aW50IGNvZGUpIHsKKyAgICByZXR1cm4gZW51bV9jb25zdGFudF92YWx1ZXNbY29kZV07Cit9CisK
KworCit9IC8vIG5hbWVzcGFjZSBUeXBlQnVpbGRlcgorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyMjIyBFbmQgRmlsZTogSW5zcGVj
dG9yVGVzdFR5cGVCdWlsZGVycy5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWFycmF5
LXR5cGUuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24tcmVzdWx0
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjQ2M2JmMmI5YTg0ZGRkOWMxYmY1N2ExNjA2NTBjMzRiOGM1NmQ5YWYKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24tcmVzdWx0CkBA
IC0wLDAgKzEsMzg4IEBACisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdEJhY2tlbmRDb21t
YW5kcy5qcworLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0
aW9uLWFycmF5LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5CisKKy8vIERlYnVnZ2VyLgorSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckVu
dW0oIkRlYnVnZ2VyLlJlYXNvbiIsIHtEaWVkOiAiRGllZCIsIEZhaW50ZWQ6ICJGYWludGVkIiwg
SHVuZ3J5OiAiSHVuZ3J5In0pOworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0QmFja2VuZENv
bW1hbmRzLmpzCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNo
ZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlv
bi1hcnJheS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQorCisjaWZuZGVmIEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnNfaAor
I2RlZmluZSBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzX2gKKworI2lmIEVOQUJMRShJ
TlNQRUNUT1IpCisKKyNpbmNsdWRlICJJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmgiCisjaW5j
bHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8
d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFt
ZXNwYWNlIEluc3BlY3RvciB7CisKK3R5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCit9IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyNl
bmRpZiAvLyAhZGVmaW5lZChJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzX2gpCisjIyMg
RW5kIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4g
RmlsZTogSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24KKy8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9j
b2RlZ2VuL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVycy5o
IgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwuaD4KKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVz
Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9y
IHsKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElO
U1BFQ1RPUikKKworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJz
LmNwcAorCisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMu
aAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFy
cmF5LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5CisKKyNpZm5kZWYgSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnNfaAorI2Rl
ZmluZSBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVyc19oCisKKyNpZiBFTkFCTEUoSU5T
UEVDVE9SKQorCisjaW5jbHVkZSAiSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5oIgorI2luY2x1
ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4KKyNpbmNsdWRlIDxpbnNw
ZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisK
KworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNU
T1IpCisKKyNlbmRpZiAvLyAhZGVmaW5lZChJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVy
c19oKQorIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisK
KyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10
eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yVGVzdEZyb250ZW5k
RGlzcGF0Y2hlcnMuaCIKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRlIDx3dGYv
dGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit9IC8vIG5hbWVzcGFj
ZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyMjIyBFbmQgRmls
ZTogSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxl
OiBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywg
MjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaWZuZGVmIEluc3BlY3RvclRl
c3RUeXBlQnVpbGRlcnNfaAorI2RlZmluZSBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzX2gKKwor
I2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9ySlNU
eXBlQnVpbGRlcnMuaD4KKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVHlwZUJ1aWxkZXIu
aD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRy
Lmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworbmFtZXNwYWNlIFR5cGVCdWlsZGVy
IHsKKworLy8gRm9yd2FyZCBkZWNsYXJhdGlvbnMuCituYW1lc3BhY2UgRGVidWdnZXIgeworZW51
bSBjbGFzcyBSZWFzb247Cit9IC8vIERlYnVnZ2VyCisvLyBFbmQgb2YgZm9yd2FyZCBkZWNsYXJh
dGlvbnMuCisKKworLy8gVHlwZWRlZnMuCituYW1lc3BhY2UgRGVidWdnZXIgewordHlwZWRlZiBp
bnQgQnJlYWtwb2ludElkOworfSAvLyBEZWJ1Z2dlcgorCituYW1lc3BhY2UgUnVudGltZSB7Cit0
eXBlZGVmIGludCBPYmplY3RJZDsKK30gLy8gUnVudGltZQorLy8gRW5kIG9mIHR5cGVkZWZzLgor
CitTdHJpbmcgZ2V0VGVzdEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKTsKKwordGVtcGxhdGU8
dHlwZW5hbWUgVD4gU3RyaW5nIGdldFRlc3RFbnVtQ29uc3RhbnRWYWx1ZShUIGVudW1WYWx1ZSkK
K3sKKyAgICByZXR1cm4gZ2V0VGVzdEVudW1Db25zdGFudFZhbHVlKHN0YXRpY19jYXN0PGludD4o
ZW51bVZhbHVlKSk7Cit9CisKK25hbWVzcGFjZSBEZWJ1Z2dlciB7CisvKiAgKi8KK2VudW0gY2xh
c3MgUmVhc29uIHsKKyAgICBEaWVkID0gMCwKKyAgICBGYWludGVkID0gMSwKKyAgICBIdW5ncnkg
PSAyLAorfTsgLy8gZW51bSBjbGFzcyBSZWFzb24KK30gLy8gRGVidWdnZXIKKworCisKK30gLy8g
bmFtZXNwYWNlIFR5cGVCdWlsZGVyCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5k
aWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKworI2VuZGlmIC8vICFkZWZpbmVkKEluc3BlY3RvclRl
c3RUeXBlQnVpbGRlcnNfaCkKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVy
cy5oCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmNwcAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5
cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JUZXN0VHlwZUJ1aWxk
ZXJzLmgiCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworbmFtZXNwYWNlIFR5cGVCdWlsZGVy
IHsKKworc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGVudW1fY29uc3RhbnRfdmFsdWVzW10gPSB7
CisgICAgIkRpZWQiLAorICAgICJGYWludGVkIiwKKyAgICAiSHVuZ3J5IiwKK307CisKK1N0cmlu
ZyBnZXRUZXN0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpIHsKKyAgICByZXR1cm4gZW51bV9j
b25zdGFudF92YWx1ZXNbY29kZV07Cit9CisKKworCit9IC8vIG5hbWVzcGFjZSBUeXBlQnVpbGRl
cgorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNU
T1IpCisKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5jcHAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBl
Y3RlZC90eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0
aW9uLWVudW0tdHlwZS5qc29uLXJlc3VsdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lNWQyZmIwZmU1MTk2NDU2Yjdl
NTZmMjI2ZTBjYWMyNjliYjhmN2VjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24t
ZW51bS10eXBlLmpzb24tcmVzdWx0CkBAIC0wLDAgKzEsMzk0IEBACisjIyMgQmVnaW4gRmlsZTog
SW5zcGVjdG9yVGVzdEJhY2tlbmRDb21tYW5kcy5qcworLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uCisvLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworLy8gUnVudGltZS4KK0luc3Bl
Y3RvckJhY2tlbmQucmVnaXN0ZXJFbnVtKCJSdW50aW1lLkZhcm1BbmltYWxzIiwge1BpZ3M6ICJQ
aWdzIiwgQ293czogIkNvd3MiLCBDYXRzOiAiQ2F0cyIsIEhlbnM6ICJIZW5zIn0pOworSW5zcGVj
dG9yQmFja2VuZC5yZWdpc3RlckVudW0oIlJ1bnRpbWUuVHdvTGVnZ2VkQW5pbWFscyIsIHtEdWNr
czogIkR1Y2tzIiwgSGVuczogIkhlbnMiLCBDcm93czogIkNyb3dzIiwgRmxhbWluZ29zOiAiRmxh
bWluZ29zIn0pOworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0QmFja2VuZENvbW1hbmRzLmpz
CisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5
cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisKKyNpZm5kZWYgSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVyc19oCisjZGVmaW5lIElu
c3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnNfaAorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikK
KworI2luY2x1ZGUgIkluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuaCIKKyNpbmNsdWRlIDxpbnNw
ZWN0b3IvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1Jl
ZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5z
cGVjdG9yIHsKKwordHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKK30gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKworI2VuZGlmIC8vICFk
ZWZpbmVkKEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnNfaCkKKyMjIyBFbmQgRmlsZTog
SW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNw
ZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uCisvLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2lmIEVO
QUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsLmg+CisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCit9
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisK
KyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKworIyMj
IEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNv
bgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2NvZGVnZW4vZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNp
Zm5kZWYgSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnNfaAorI2RlZmluZSBJbnNwZWN0
b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVyc19oCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisj
aW5jbHVkZSAiSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5oIgorI2luY2x1ZGUgPGluc3BlY3Rv
ci9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4KKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVj
dG9yVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCit9IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyNlbmRp
ZiAvLyAhZGVmaW5lZChJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVyc19oKQorIyMjIEVu
ZCBGaWxlOiBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBG
aWxlOiBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgorLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2Nv
ZGVnZW4vZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5o
IgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcu
aD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgor
CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JU
ZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRl
c3RUeXBlQnVpbGRlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBl
LWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKKworI2lmbmRlZiBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJz
X2gKKyNkZWZpbmUgSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVyc19oCisKKyNpZiBFTkFCTEUoSU5T
UEVDVE9SKQorCisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckpTVHlwZUJ1aWxkZXJzLmg+
CisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclR5cGVCdWlsZGVyLmg+CisjaW5jbHVkZSA8
d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorCituYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKKworCisKK25hbWVzcGFjZSBUeXBlQnVpbGRlciB7CisKKy8vIEZvcndh
cmQgZGVjbGFyYXRpb25zLgorbmFtZXNwYWNlIFJ1bnRpbWUgeworZW51bSBjbGFzcyBGYXJtQW5p
bWFsczsKK2VudW0gY2xhc3MgVHdvTGVnZ2VkQW5pbWFsczsKK30gLy8gUnVudGltZQorLy8gRW5k
IG9mIGZvcndhcmQgZGVjbGFyYXRpb25zLgorCisKKworCitTdHJpbmcgZ2V0VGVzdEVudW1Db25z
dGFudFZhbHVlKGludCBjb2RlKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gU3RyaW5nIGdldFRl
c3RFbnVtQ29uc3RhbnRWYWx1ZShUIGVudW1WYWx1ZSkKK3sKKyAgICByZXR1cm4gZ2V0VGVzdEVu
dW1Db25zdGFudFZhbHVlKHN0YXRpY19jYXN0PGludD4oZW51bVZhbHVlKSk7Cit9CisKK25hbWVz
cGFjZSBSdW50aW1lIHsKKy8qICAqLworZW51bSBjbGFzcyBGYXJtQW5pbWFscyB7CisgICAgUGln
cyA9IDAsCisgICAgQ293cyA9IDEsCisgICAgQ2F0cyA9IDIsCisgICAgSGVucyA9IDMsCit9OyAv
LyBlbnVtIGNsYXNzIEZhcm1BbmltYWxzCisvKiAgKi8KK2VudW0gY2xhc3MgVHdvTGVnZ2VkQW5p
bWFscyB7CisgICAgRHVja3MgPSA0LAorICAgIEhlbnMgPSAzLAorICAgIENyb3dzID0gNSwKKyAg
ICBGbGFtaW5nb3MgPSA2LAorfTsgLy8gZW51bSBjbGFzcyBUd29MZWdnZWRBbmltYWxzCit9IC8v
IFJ1bnRpbWUKKworCisKK30gLy8gbmFtZXNwYWNlIFR5cGVCdWlsZGVyCisKK30gLy8gbmFtZXNw
YWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKworI2VuZGlmIC8v
ICFkZWZpbmVkKEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnNfaCkKKyMjIyBFbmQgRmlsZTogSW5z
cGVjdG9yVGVzdFR5cGVCdWlsZGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0
VHlwZUJ1aWxkZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBl
LWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIklu
c3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuaCIKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitu
YW1lc3BhY2UgVHlwZUJ1aWxkZXIgeworCitzdGF0aWMgY29uc3QgY2hhciogY29uc3QgZW51bV9j
b25zdGFudF92YWx1ZXNbXSA9IHsKKyAgICAiUGlncyIsCisgICAgIkNvd3MiLAorICAgICJDYXRz
IiwKKyAgICAiSGVucyIsCisgICAgIkR1Y2tzIiwKKyAgICAiQ3Jvd3MiLAorICAgICJGbGFtaW5n
b3MiLAorfTsKKworU3RyaW5nIGdldFRlc3RFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSkgewor
ICAgIHJldHVybiBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb2RlXTsKK30KKworCisKK30gLy8gbmFt
ZXNwYWNlIFR5cGVCdWlsZGVyCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYg
Ly8gRU5BQkxFKElOU1BFQ1RPUikKKworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0VHlwZUJ1
aWxkZXJzLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbi1y
ZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhw
ZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uLXJlc3VsdApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4yZThjY2ZlODMxNDljNDIwYjRmZjczYjYwOTc1ZGRjZTFiYzhjOWRhCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVj
dGVkL3R5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbi1yZXN1bHQKQEAgLTAsMCArMSw5
MDAgQEAKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0QmFja2VuZENvbW1hbmRzLmpzCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tb2JqZWN0
LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5CisKKy8vIFRlc3QuCitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiVGVzdC5h
dHRlbXB0Q3Vyc2UiLCBbeyJuYW1lIjogImN1cnNlIiwgInR5cGUiOiAib2JqZWN0IiwgIm9wdGlv
bmFsIjogZmFsc2V9XSwgWyJjZW5zb3JlZEN1cnNlIl0pOworIyMjIEVuZCBGaWxlOiBJbnNwZWN0
b3JUZXN0QmFja2VuZENvbW1hbmRzLmpzCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0
QmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
dHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2lmbmRlZiBJbnNwZWN0b3JUZXN0QmFja2Vu
ZERpc3BhdGNoZXJzX2gKKyNkZWZpbmUgSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVyc19o
CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSAiSW5zcGVjdG9yVGVzdFR5cGVC
dWlsZGVycy5oIgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0eXBlZGVmIFN0cmluZyBFcnJv
clN0cmluZzsKKworY2xhc3MgSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7
CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIGF0dGVtcHRDdXJzZShFcnJvclN0cmluZyosIGNv
bnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4mIGluX2N1cnNlLCBJbnNwZWN0
b3I6OlR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8U3RyaW5nPiogb3B0X291dF9jZW5zb3JlZEN1cnNl
KSA9IDA7Citwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB+SW5zcGVjdG9yVGVzdEJhY2tlbmREaXNw
YXRjaGVySGFuZGxlcigpOworfTsKKworY2xhc3MgSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRj
aGVyIGZpbmFsIDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yU3VwcGxlbWVudGFsQmFja2Vu
ZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3RvclRl
c3RCYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXIqLCBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7CisgICAg
dmlydHVhbCB2b2lkIGRpc3BhdGNoKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwg
UGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gbWVzc2FnZSkgb3ZlcnJpZGU7
Citwcml2YXRlOgorICAgIHZvaWQgYXR0ZW1wdEN1cnNlKGxvbmcgY2FsbElkLCBjb25zdCBJbnNw
ZWN0b3I6Okluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7Citwcml2YXRlOgorICAgIEluc3BlY3Rv
clRlc3RCYWNrZW5kRGlzcGF0Y2hlcihJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyKiwgSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOworICAgIEluc3Bl
Y3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIG1fYWdlbnQ7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyNlbmRp
ZiAvLyAhZGVmaW5lZChJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzX2gpCisjIyMgRW5k
IEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmls
ZTogSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCisvLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29k
ZWdlbi9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIK
KworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsLmg+CisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5o
PgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7
CisKK0luc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6On5JbnNwZWN0b3JUZXN0
QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCkgeyB9CisKK1Bhc3NSZWZQdHI8SW5zcGVjdG9yVGVz
dEJhY2tlbmREaXNwYXRjaGVyPiBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXI6OmNyZWF0
ZShJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIsIEluc3BlY3Rv
clRlc3RCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQoreworICAgIHJldHVybiBhZG9w
dFJlZihuZXcgSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVy
LCBhZ2VudCkpOworfQorCitJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXI6Okluc3BlY3Rv
clRlc3RCYWNrZW5kRGlzcGF0Y2hlcihJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciogYmFja2Vu
ZERpc3BhdGNoZXIsIEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50
KQorICAgIDogSW5zcGVjdG9yU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERp
c3BhdGNoZXIpCisgICAgLCBtX2FnZW50KGFnZW50KQoreworICAgIG1fYmFja2VuZERpc3BhdGNo
ZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbihBU0NJSUxpdGVyYWwoIlRlc3QiKSwgdGhp
cyk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChs
b25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBtZXNzYWdlKQoreworICAgIFJlZjxJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXI+
IHByb3RlY3QoKnRoaXMpOworCisgICAgaWYgKG1ldGhvZCA9PSAiYXR0ZW1wdEN1cnNlIikKKyAg
ICAgICAgYXR0ZW1wdEN1cnNlKGNhbGxJZCwgKm1lc3NhZ2UuZ2V0KCkpOworICAgIGVsc2UKKyAg
ICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElkLCBJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsIFN0cmluZygiJyIpICsg
IlRlc3QiICsgJy4nICsgbWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOworfQorCit2b2lkIElu
c3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcjo6YXR0ZW1wdEN1cnNlKGxvbmcgY2FsbElkLCBj
b25zdCBJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpCit7CisgICAgUmVmUHRyPEluc3BlY3RvckFy
cmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKKyAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSBtZXNzYWdlLmdldE9iamVjdChB
U0NJSUxpdGVyYWwoInBhcmFtcyIpKTsKKyAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRh
aW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKKyAgICBJbnNwZWN0b3JBcnJheSogcHJv
dG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKKyAgICBSZWZQdHI8SW5zcGVj
dG9yOjpJbnNwZWN0b3JPYmplY3Q+IGluX2N1cnNlID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXI6OmdldE9iamVjdChwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgiY3Vyc2UiKSwg
bnVsbHB0ciwgcHJvdG9jb2xFcnJvcnNQdHIpOworICAgIGlmIChwcm90b2NvbEVycm9ycy0+bGVu
Z3RoKCkpIHsKKyAgICAgICAgU3RyaW5nIGVycm9yTWVzc2FnZSA9IFN0cmluZzo6Zm9ybWF0KCJT
b21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiVGVzdC5h
dHRlbXB0Q3Vyc2UiKTsKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9j
b2xFcnJvcigmY2FsbElkLCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFt
cywgZXJyb3JNZXNzYWdlLCBwcm90b2NvbEVycm9ycy5yZWxlYXNlKCkpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgRXJyb3JTdHJpbmcgZXJyb3I7CisgICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBJbnNwZWN0
b3I6OlR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8U3RyaW5nPiBvdXRfY2Vuc29yZWRDdXJzZTsKKyAg
ICBtX2FnZW50LT5hdHRlbXB0Q3Vyc2UoJmVycm9yLCBpbl9jdXJzZSwgJm91dF9jZW5zb3JlZEN1
cnNlKTsKKworICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCisgICAgICAgIGlmIChvdXRfY2Vuc29y
ZWRDdXJzZS5pc0Fzc2lnbmVkKCkpCisgICAgICAgICAgICByZXN1bHQtPnNldFN0cmluZyhBU0NJ
SUxpdGVyYWwoImNlbnNvcmVkQ3Vyc2UiKSwgb3V0X2NlbnNvcmVkQ3Vyc2UuZ2V0VmFsdWUoKSk7
CisKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQu
cmVsZWFzZSgpLCBlcnJvcik7Cit9CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5k
aWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0QmFj
a2VuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdEZyb250
ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBl
LWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaWZuZGVmIEluc3BlY3RvclRlc3RGcm9udGVuZERp
c3BhdGNoZXJzX2gKKyNkZWZpbmUgSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnNfaAor
CisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUgIkluc3BlY3RvclRlc3RUeXBlQnVp
bGRlcnMuaCIKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLmg+
CisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9Q
YXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFj
ZSBJbnNwZWN0b3IgeworCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAv
LyBFTkFCTEUoSU5TUEVDVE9SKQorCisjZW5kaWYgLy8gIWRlZmluZWQoSW5zcGVjdG9yVGVzdEZy
b250ZW5kRGlzcGF0Y2hlcnNfaCkKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdEZyb250ZW5k
RGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlz
cGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVj
bGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnNw
ZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikK
KworI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7
CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RP
UikKKworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAK
KworIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuaAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpz
b24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9jb2RlZ2VuL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisj
aWZuZGVmIEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnNfaAorI2RlZmluZSBJbnNwZWN0b3JUZXN0
VHlwZUJ1aWxkZXJzX2gKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRlIDxpbnNw
ZWN0b3IvSW5zcGVjdG9ySlNUeXBlQnVpbGRlcnMuaD4KKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5z
cGVjdG9yVHlwZUJ1aWxkZXIuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1
ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworbmFt
ZXNwYWNlIFR5cGVCdWlsZGVyIHsKKworLy8gRm9yd2FyZCBkZWNsYXJhdGlvbnMuCisjaWYgRU5B
QkxFKFNRTF9EQVRBQkFTRSkKK25hbWVzcGFjZSBEYXRhYmFzZSB7CitjbGFzcyBEdW1teU9iamVj
dDsKK2NsYXNzIEVycm9yOworY2xhc3MgT2JqZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0czsK
K2NsYXNzIE9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlOworY2xhc3MgUGFyYW1ldGVyQnVuZGxlOwor
fSAvLyBEYXRhYmFzZQorI2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0UpCisKK25hbWVzcGFj
ZSBUZXN0IHsKK2NsYXNzIEhhcHB5TmFtZTsKK2NsYXNzIFBhcmFtZXRlckJ1bmRsZTsKK30gLy8g
VGVzdAorLy8gRW5kIG9mIGZvcndhcmQgZGVjbGFyYXRpb25zLgorCisKKworCitTdHJpbmcgZ2V0
VGVzdEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4g
U3RyaW5nIGdldFRlc3RFbnVtQ29uc3RhbnRWYWx1ZShUIGVudW1WYWx1ZSkKK3sKKyAgICByZXR1
cm4gZ2V0VGVzdEVudW1Db25zdGFudFZhbHVlKHN0YXRpY19jYXN0PGludD4oZW51bVZhbHVlKSk7
Cit9CisKKyNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQorbmFtZXNwYWNlIERhdGFiYXNlIHsKKy8q
IERhdGFiYXNlIGVycm9yLiAqLworY2xhc3MgRXJyb3IgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNw
ZWN0b3JPYmplY3RCYXNlIHsKK3B1YmxpYzoKKyAgICBlbnVtIHsKKyAgICAgICAgTm9GaWVsZHNT
ZXQgPSAwLAorICAgICAgICBNZXNzYWdlU2V0ID0gMSA8PCAwLAorICAgICAgICBDb2RlU2V0ID0g
MSA8PCAxLAorICAgICAgICBBbGxGaWVsZHNTZXQgPSAoTWVzc2FnZVNldCB8IENvZGVTZXQpCisg
ICAgfTsKKworICAgIHRlbXBsYXRlPGludCBTVEFURT4KKyAgICBjbGFzcyBCdWlsZGVyIHsKKyAg
ICBwcml2YXRlOgorICAgICAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IG1f
cmVzdWx0OworCisgICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RF
UD4mIGNhc3RTdGF0ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnBy
ZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKKyAgICAgICAgfQorCisgICAg
ICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjwvKkVycm9yKi9JbnNwZWN0b3I6Okluc3BlY3Rvck9iamVj
dD4gcHRyKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBO
b0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKKyAgICAgICAg
ICAgIG1fcmVzdWx0ID0gcHRyOworICAgICAgICB9CisgICAgICAgIGZyaWVuZCBjbGFzcyBFcnJv
cjsKKyAgICBwdWJsaWM6CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IE1lc3NhZ2VTZXQ+JiBz
ZXRNZXNzYWdlKGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBNZXNzYWdlU2V0KSwgcHJvcGVydHlfbWVzc2FnZV9hbHJl
YWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgi
bWVzc2FnZSIpLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE1lc3NhZ2VT
ZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQ29kZVNldD4mIHNl
dENvZGUoaW50IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCgh
KFNUQVRFICYgQ29kZVNldCksIHByb3BlcnR5X2NvZGVfYWxyZWFkeV9zZXQpOworICAgICAgICAg
ICAgbV9yZXN1bHQtPnNldE51bWJlcihBU0NJSUxpdGVyYWwoImNvZGUiKSwgdmFsdWUpOworICAg
ICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxDb2RlU2V0PigpOworICAgICAgICB9CisKKyAgICAg
ICAgb3BlcmF0b3IgUmVmUHRyPEVycm9yPiYgKCkKKyAgICAgICAgeworICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsK
KyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihFcnJvcikgPT0gc2l6ZW9mKEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yT2JqZWN0KSwgY2Fubm90X2Nhc3QpOworICAgICAgICAgICAgcmV0dXJu
ICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxFcnJvcj4qPigmbV9yZXN1bHQpOworICAgICAgICB9
CisKKyAgICAgICAgUGFzc1JlZlB0cjxFcnJvcj4gcmVsZWFzZSgpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBSZWZQdHI8RXJyb3I+KCp0aGlzKS5yZWxlYXNlKCk7CisgICAgICAgIH0K
KyAgICB9OworCisgICAgLyoKKyAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CisgICAgICog
UmVmUHRyPEVycm9yPiByZXN1bHQgPSBFcnJvcjo6Y3JlYXRlKCkKKyAgICAgKiAgICAgLnNldE1l
c3NhZ2UoLi4uKQorICAgICAqICAgICAuc2V0Q29kZSguLi4pOworICAgICAqLworICAgIHN0YXRp
YyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEJ1
aWxkZXI8Tm9GaWVsZHNTZXQ+KEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7
CisgICAgfQorICAgIHR5cGVkZWYgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6U3RydWN0SXRlbVRy
YWl0cyBJdGVtVHJhaXRzOworfTsKKworY2xhc3MgT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGUgOiBw
dWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3RCYXNlIHsKK3B1YmxpYzoKKyAgICBlbnVt
IHsKKyAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAorICAgICAgICBBbGxGaWVsZHNTZXQgPSAwCisg
ICAgfTsKKworICAgIHRlbXBsYXRlPGludCBTVEFURT4KKyAgICBjbGFzcyBCdWlsZGVyIHsKKyAg
ICBwcml2YXRlOgorICAgICAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IG1f
cmVzdWx0OworCisgICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RF
UD4mIGNhc3RTdGF0ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnBy
ZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKKyAgICAgICAgfQorCisgICAg
ICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjwvKk9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlKi9JbnNwZWN0
b3I6Okluc3BlY3Rvck9iamVjdD4gcHRyKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxF
X0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0
X3N0YXRlKTsKKyAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOworICAgICAgICB9CisgICAgICAg
IGZyaWVuZCBjbGFzcyBPcHRpb25hbFBhcmFtZXRlckJ1bmRsZTsKKyAgICBwdWJsaWM6CisKKyAg
ICAgICAgb3BlcmF0b3IgUmVmUHRyPE9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlPiYgKCkKKyAgICAg
ICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCBy
ZXN1bHRfaXNfbm90X3JlYWR5KTsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihP
cHRpb25hbFBhcmFtZXRlckJ1bmRsZSkgPT0gc2l6ZW9mKEluc3BlY3Rvcjo6SW5zcGVjdG9yT2Jq
ZWN0KSwgY2Fubm90X2Nhc3QpOworICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0
PFJlZlB0cjxPcHRpb25hbFBhcmFtZXRlckJ1bmRsZT4qPigmbV9yZXN1bHQpOworICAgICAgICB9
CisKKyAgICAgICAgUGFzc1JlZlB0cjxPcHRpb25hbFBhcmFtZXRlckJ1bmRsZT4gcmVsZWFzZSgp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBSZWZQdHI8T3B0aW9uYWxQYXJhbWV0ZXJC
dW5kbGU+KCp0aGlzKS5yZWxlYXNlKCk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgLyoKKyAg
ICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CisgICAgICogUmVmUHRyPE9wdGlvbmFsUGFyYW1l
dGVyQnVuZGxlPiByZXN1bHQgPSBPcHRpb25hbFBhcmFtZXRlckJ1bmRsZTo6Y3JlYXRlKCk7Cisg
ICAgICovCisgICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCisgICAgewor
ICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSW5zcGVjdG9yOjpJbnNwZWN0b3JP
YmplY3Q6OmNyZWF0ZSgpKTsKKyAgICB9CisgICAgdHlwZWRlZiBJbnNwZWN0b3I6OlR5cGVCdWls
ZGVyOjpTdHJ1Y3RJdGVtVHJhaXRzIEl0ZW1UcmFpdHM7CisKKyAgICB2b2lkIHNldENvbHVtbk5h
bWVzKFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk8U3RyaW5nPj4gdmFs
dWUpCisgICAgeworICAgICAgICBJbnNwZWN0b3JPYmplY3RCYXNlOjpzZXRBcnJheShBU0NJSUxp
dGVyYWwoImNvbHVtbk5hbWVzIiksIHZhbHVlKTsKKyAgICB9CisKKyAgICB2b2lkIHNldE5vdGVz
KGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgeworICAgICAgICBJbnNwZWN0b3JPYmplY3RCYXNl
OjpzZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJub3RlcyIpLCB2YWx1ZSk7CisgICAgfQorCisgICAg
dm9pZCBzZXRUaW1lc3RhbXAoZG91YmxlIHZhbHVlKQorICAgIHsKKyAgICAgICAgSW5zcGVjdG9y
T2JqZWN0QmFzZTo6c2V0TnVtYmVyKEFTQ0lJTGl0ZXJhbCgidGltZXN0YW1wIiksIHZhbHVlKTsK
KyAgICB9CisKKyAgICB2b2lkIHNldFZhbHVlcyhQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVj
dG9yT2JqZWN0PiB2YWx1ZSkKKyAgICB7CisgICAgICAgIEluc3BlY3Rvck9iamVjdEJhc2U6OnNl
dE9iamVjdChBU0NJSUxpdGVyYWwoInZhbHVlcyIpLCB2YWx1ZSk7CisgICAgfQorCisgICAgdm9p
ZCBzZXRQYXlsb2FkKFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4gdmFsdWUp
CisgICAgeworICAgICAgICBJbnNwZWN0b3JPYmplY3RCYXNlOjpzZXRWYWx1ZShBU0NJSUxpdGVy
YWwoInBheWxvYWQiKSwgdmFsdWUpOworICAgIH0KKworICAgIHZvaWQgc2V0RXJyb3IoUGFzc1Jl
ZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpEYXRhYmFzZTo6RXJyb3I+IHZhbHVlKQorICAg
IHsKKyAgICAgICAgSW5zcGVjdG9yT2JqZWN0QmFzZTo6c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgi
ZXJyb3IiKSwgdmFsdWUpOworICAgIH0KK307CisKK2NsYXNzIFBhcmFtZXRlckJ1bmRsZSA6IHB1
YmxpYyBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdEJhc2UgeworcHVibGljOgorICAgIGVudW0g
eworICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCisgICAgICAgIENvbHVtbk5hbWVzU2V0ID0gMSA8
PCAwLAorICAgICAgICBOb3Rlc1NldCA9IDEgPDwgMSwKKyAgICAgICAgVGltZXN0YW1wU2V0ID0g
MSA8PCAyLAorICAgICAgICBWYWx1ZXNTZXQgPSAxIDw8IDMsCisgICAgICAgIFBheWxvYWRTZXQg
PSAxIDw8IDQsCisgICAgICAgIEVycm9yU2V0ID0gMSA8PCA1LAorICAgICAgICBBbGxGaWVsZHNT
ZXQgPSAoQ29sdW1uTmFtZXNTZXQgfCBOb3Rlc1NldCB8IFRpbWVzdGFtcFNldCB8IFZhbHVlc1Nl
dCB8IFBheWxvYWRTZXQgfCBFcnJvclNldCkKKyAgICB9OworCisgICAgdGVtcGxhdGU8aW50IFNU
QVRFPgorICAgIGNsYXNzIEJ1aWxkZXIgeworICAgIHByaXZhdGU6CisgICAgICAgIFJlZlB0cjxJ
bnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CisKKyAgICAgICAgdGVtcGxhdGU8
aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQ
Pio+KHRoaXMpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPC8qUGFy
YW1ldGVyQnVuZGxlKi9JbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gcHRyKQorICAgICAgICB7
CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRl
cl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKKyAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRy
OworICAgICAgICB9CisgICAgICAgIGZyaWVuZCBjbGFzcyBQYXJhbWV0ZXJCdW5kbGU7CisgICAg
cHVibGljOgorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDb2x1bW5OYW1lc1NldD4mIHNldENv
bHVtbk5hbWVzKFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk8U3RyaW5n
Pj4gdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUg
JiBDb2x1bW5OYW1lc1NldCksIHByb3BlcnR5X2NvbHVtbk5hbWVzX2FscmVhZHlfc2V0KTsKKyAg
ICAgICAgICAgIG1fcmVzdWx0LT5zZXRBcnJheShBU0NJSUxpdGVyYWwoImNvbHVtbk5hbWVzIiks
IHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q29sdW1uTmFtZXNTZXQ+KCk7
CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTm90ZXNTZXQ+JiBzZXROb3Rl
cyhjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FT
U0VSVCghKFNUQVRFICYgTm90ZXNTZXQpLCBwcm9wZXJ0eV9ub3Rlc19hbHJlYWR5X3NldCk7Cisg
ICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgibm90ZXMiKSwgdmFs
dWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxOb3Rlc1NldD4oKTsKKyAgICAgICAg
fQorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBUaW1lc3RhbXBTZXQ+JiBzZXRUaW1lc3RhbXAo
ZG91YmxlIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNU
QVRFICYgVGltZXN0YW1wU2V0KSwgcHJvcGVydHlfdGltZXN0YW1wX2FscmVhZHlfc2V0KTsKKyAg
ICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoQVNDSUlMaXRlcmFsKCJ0aW1lc3RhbXAiKSwg
dmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxUaW1lc3RhbXBTZXQ+KCk7Cisg
ICAgICAgIH0KKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVmFsdWVzU2V0PiYgc2V0VmFsdWVz
KFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQorICAgICAgICB7
CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVmFsdWVzU2V0KSwgcHJvcGVy
dHlfdmFsdWVzX2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRPYmplY3Qo
QVNDSUlMaXRlcmFsKCJ2YWx1ZXMiKSwgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RT
dGF0ZTxWYWx1ZXNTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwg
UGF5bG9hZFNldD4mIHNldFBheWxvYWQoUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvclZh
bHVlPiB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFU
RSAmIFBheWxvYWRTZXQpLCBwcm9wZXJ0eV9wYXlsb2FkX2FscmVhZHlfc2V0KTsKKyAgICAgICAg
ICAgIG1fcmVzdWx0LT5zZXRWYWx1ZShBU0NJSUxpdGVyYWwoInBheWxvYWQiKSwgdmFsdWUpOwor
ICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxQYXlsb2FkU2V0PigpOworICAgICAgICB9CisK
KyAgICAgICAgQnVpbGRlcjxTVEFURSB8IEVycm9yU2V0PiYgc2V0RXJyb3IoUGFzc1JlZlB0cjxJ
bnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpEYXRhYmFzZTo6RXJyb3I+IHZhbHVlKQorICAgICAgICB7
CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgRXJyb3JTZXQpLCBwcm9wZXJ0
eV9lcnJvcl9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0KEFT
Q0lJTGl0ZXJhbCgiZXJyb3IiKSwgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0
ZTxFcnJvclNldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIG9wZXJhdG9yIFJlZlB0cjxQYXJh
bWV0ZXJCdW5kbGU+JiAoKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChT
VEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOworICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoc2l6ZW9mKFBhcmFtZXRlckJ1bmRsZSkgPT0gc2l6ZW9mKEluc3BlY3Rv
cjo6SW5zcGVjdG9yT2JqZWN0KSwgY2Fubm90X2Nhc3QpOworICAgICAgICAgICAgcmV0dXJuICpy
ZWludGVycHJldF9jYXN0PFJlZlB0cjxQYXJhbWV0ZXJCdW5kbGU+Kj4oJm1fcmVzdWx0KTsKKyAg
ICAgICAgfQorCisgICAgICAgIFBhc3NSZWZQdHI8UGFyYW1ldGVyQnVuZGxlPiByZWxlYXNlKCkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxQYXJhbWV0ZXJCdW5kbGU+KCp0
aGlzKS5yZWxlYXNlKCk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgLyoKKyAgICAgKiBTeW50
aGV0aWMgY29uc3RydWN0b3I6CisgICAgICogUmVmUHRyPFBhcmFtZXRlckJ1bmRsZT4gcmVzdWx0
ID0gUGFyYW1ldGVyQnVuZGxlOjpjcmVhdGUoKQorICAgICAqICAgICAuc2V0Q29sdW1uTmFtZXMo
Li4uKQorICAgICAqICAgICAuc2V0Tm90ZXMoLi4uKQorICAgICAqICAgICAuc2V0VGltZXN0YW1w
KC4uLikKKyAgICAgKiAgICAgLnNldFZhbHVlcyguLi4pCisgICAgICogICAgIC5zZXRQYXlsb2Fk
KC4uLikKKyAgICAgKiAgICAgLnNldEVycm9yKC4uLik7CisgICAgICovCisgICAgc3RhdGljIEJ1
aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gQnVpbGRl
cjxOb0ZpZWxkc1NldD4oSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpKTsKKyAg
ICB9CisgICAgdHlwZWRlZiBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpTdHJ1Y3RJdGVtVHJhaXRz
IEl0ZW1UcmFpdHM7Cit9OworCisvKiBDb25mbGljdGVkIG5hbWVzIG1heSBjYXVzZSBnZW5lcmF0
ZWQgZ2V0dGVycy9zZXR0ZXJzIHRvIGNsYXNoIHdpdGggYnVpbHQtaW4gSW5zcGVjdG9yT2JqZWN0
IG1ldGhvZHMuICovCitjbGFzcyBPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzIDogcHVi
bGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0QmFzZSB7CitwdWJsaWM6CisgICAgZW51bSB7
CisgICAgICAgIE5vRmllbGRzU2V0ID0gMCwKKyAgICAgICAgSW50ZWdlclNldCA9IDEgPDwgMCwK
KyAgICAgICAgQXJyYXlTZXQgPSAxIDw8IDEsCisgICAgICAgIFN0cmluZ1NldCA9IDEgPDwgMiwK
KyAgICAgICAgVmFsdWVTZXQgPSAxIDw8IDMsCisgICAgICAgIE9iamVjdFNldCA9IDEgPDwgNCwK
KyAgICAgICAgQWxsRmllbGRzU2V0ID0gKEludGVnZXJTZXQgfCBBcnJheVNldCB8IFN0cmluZ1Nl
dCB8IFZhbHVlU2V0IHwgT2JqZWN0U2V0KQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTxpbnQgU1RB
VEU+CisgICAgY2xhc3MgQnVpbGRlciB7CisgICAgcHJpdmF0ZToKKyAgICAgICAgUmVmUHRyPElu
c3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKKworICAgICAgICB0ZW1wbGF0ZTxp
bnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+
Kj4odGhpcyk7CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8LypPYmpl
Y3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzKi9JbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4g
cHRyKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0Zp
ZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKKyAgICAgICAgICAg
IG1fcmVzdWx0ID0gcHRyOworICAgICAgICB9CisgICAgICAgIGZyaWVuZCBjbGFzcyBPYmplY3RX
aXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzOworICAgIHB1YmxpYzoKKworICAgICAgICBCdWlsZGVy
PFNUQVRFIHwgSW50ZWdlclNldD4mIHNldEludGVnZXIoY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAg
ICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEludGVnZXJTZXQp
LCBwcm9wZXJ0eV9pbnRlZ2VyX2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5z
ZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJpbnRlZ2VyIiksIHZhbHVlKTsKKyAgICAgICAgICAgIHJl
dHVybiBjYXN0U3RhdGU8SW50ZWdlclNldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxk
ZXI8U1RBVEUgfCBBcnJheVNldD4mIHNldEFycmF5KGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBBcnJheVNldCksIHBy
b3BlcnR5X2FycmF5X2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJp
bmcoQVNDSUlMaXRlcmFsKCJhcnJheSIpLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2Fz
dFN0YXRlPEFycmF5U2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8
IFN0cmluZ1NldD4mIHNldFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgICAgICB7Cisg
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgU3RyaW5nU2V0KSwgcHJvcGVydHlf
c3RyaW5nX2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoQVND
SUlMaXRlcmFsKCJzdHJpbmciKSwgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0
ZTxTdHJpbmdTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVmFs
dWVTZXQ+JiBzZXRWYWx1ZShjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgICAgICB7CisgICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVmFsdWVTZXQpLCBwcm9wZXJ0eV92YWx1ZV9h
bHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJh
bCgidmFsdWUiKSwgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxWYWx1ZVNl
dD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBPYmplY3RTZXQ+JiBz
ZXRPYmplY3QoY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoIShTVEFURSAmIE9iamVjdFNldCksIHByb3BlcnR5X29iamVjdF9hbHJlYWR5
X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgib2Jq
ZWN0IiksIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8T2JqZWN0U2V0Pigp
OworICAgICAgICB9CisKKyAgICAgICAgb3BlcmF0b3IgUmVmUHRyPE9iamVjdFdpdGhQcm9wZXJ0
eU5hbWVDb25mbGljdHM+JiAoKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VS
VChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOworICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKE9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHMp
ID09IHNpemVvZihJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCksIGNhbm5vdF9jYXN0KTsKKyAg
ICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8T2JqZWN0V2l0aFByb3Bl
cnR5TmFtZUNvbmZsaWN0cz4qPigmbV9yZXN1bHQpOworICAgICAgICB9CisKKyAgICAgICAgUGFz
c1JlZlB0cjxPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzPiByZWxlYXNlKCkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29u
ZmxpY3RzPigqdGhpcykucmVsZWFzZSgpOworICAgICAgICB9CisgICAgfTsKKworICAgIC8qCisg
ICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgorICAgICAqIFJlZlB0cjxPYmplY3RXaXRoUHJv
cGVydHlOYW1lQ29uZmxpY3RzPiByZXN1bHQgPSBPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxp
Y3RzOjpjcmVhdGUoKQorICAgICAqICAgICAuc2V0SW50ZWdlciguLi4pCisgICAgICogICAgIC5z
ZXRBcnJheSguLi4pCisgICAgICogICAgIC5zZXRTdHJpbmcoLi4uKQorICAgICAqICAgICAuc2V0
VmFsdWUoLi4uKQorICAgICAqICAgICAuc2V0T2JqZWN0KC4uLik7CisgICAgICovCisgICAgc3Rh
dGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4g
QnVpbGRlcjxOb0ZpZWxkc1NldD4oSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgp
KTsKKyAgICB9CisgICAgdHlwZWRlZiBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpTdHJ1Y3RJdGVt
VHJhaXRzIEl0ZW1UcmFpdHM7Cit9OworCit9IC8vIERhdGFiYXNlCisjZW5kaWYgLy8gRU5BQkxF
KFNRTF9EQVRBQkFTRSkKKworbmFtZXNwYWNlIFRlc3QgeworY2xhc3MgUGFyYW1ldGVyQnVuZGxl
IDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0QmFzZSB7CitwdWJsaWM6CisgICAg
ZW51bSB7CisgICAgICAgIE5vRmllbGRzU2V0ID0gMCwKKyAgICAgICAgQ29sdW1uTmFtZXNTZXQg
PSAxIDw8IDAsCisgICAgICAgIE5vdGVzU2V0ID0gMSA8PCAxLAorICAgICAgICBUaW1lc3RhbXBT
ZXQgPSAxIDw8IDIsCisgICAgICAgIFZhbHVlc1NldCA9IDEgPDwgMywKKyAgICAgICAgUGF5bG9h
ZFNldCA9IDEgPDwgNCwKKyAgICAgICAgRXJyb3JTZXQgPSAxIDw8IDUsCisgICAgICAgIEFsbEZp
ZWxkc1NldCA9IChDb2x1bW5OYW1lc1NldCB8IE5vdGVzU2V0IHwgVGltZXN0YW1wU2V0IHwgVmFs
dWVzU2V0IHwgUGF5bG9hZFNldCB8IEVycm9yU2V0KQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTxp
bnQgU1RBVEU+CisgICAgY2xhc3MgQnVpbGRlciB7CisgICAgcHJpdmF0ZToKKyAgICAgICAgUmVm
UHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKKworICAgICAgICB0ZW1w
bGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8
IFNURVA+Kj4odGhpcyk7CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8
LypQYXJhbWV0ZXJCdW5kbGUqL0luc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBwdHIpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBi
dWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOworICAgICAgICAgICAgbV9yZXN1bHQg
PSBwdHI7CisgICAgICAgIH0KKyAgICAgICAgZnJpZW5kIGNsYXNzIFBhcmFtZXRlckJ1bmRsZTsK
KyAgICBwdWJsaWM6CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IENvbHVtbk5hbWVzU2V0PiYg
c2V0Q29sdW1uTmFtZXMoUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheTxT
dHJpbmc+PiB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShT
VEFURSAmIENvbHVtbk5hbWVzU2V0KSwgcHJvcGVydHlfY29sdW1uTmFtZXNfYWxyZWFkeV9zZXQp
OworICAgICAgICAgICAgbV9yZXN1bHQtPnNldEFycmF5KEFTQ0lJTGl0ZXJhbCgiY29sdW1uTmFt
ZXMiKSwgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxDb2x1bW5OYW1lc1Nl
dD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBOb3Rlc1NldD4mIHNl
dE5vdGVzKGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKCEoU1RBVEUgJiBOb3Rlc1NldCksIHByb3BlcnR5X25vdGVzX2FscmVhZHlfc2V0
KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJub3RlcyIp
LCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE5vdGVzU2V0PigpOworICAg
ICAgICB9CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IFRpbWVzdGFtcFNldD4mIHNldFRpbWVz
dGFtcChkb3VibGUgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KCEoU1RBVEUgJiBUaW1lc3RhbXBTZXQpLCBwcm9wZXJ0eV90aW1lc3RhbXBfYWxyZWFkeV9zZXQp
OworICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcihBU0NJSUxpdGVyYWwoInRpbWVzdGFt
cCIpLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFRpbWVzdGFtcFNldD4o
KTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBWYWx1ZXNTZXQ+JiBzZXRW
YWx1ZXMoUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gdmFsdWUpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBWYWx1ZXNTZXQpLCBw
cm9wZXJ0eV92YWx1ZXNfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldE9i
amVjdChBU0NJSUxpdGVyYWwoInZhbHVlcyIpLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4g
Y2FzdFN0YXRlPFZhbHVlc1NldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXI8U1RB
VEUgfCBQYXlsb2FkU2V0PiYgc2V0UGF5bG9hZChQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVj
dG9yVmFsdWU+IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCgh
KFNUQVRFICYgUGF5bG9hZFNldCksIHByb3BlcnR5X3BheWxvYWRfYWxyZWFkeV9zZXQpOworICAg
ICAgICAgICAgbV9yZXN1bHQtPnNldFZhbHVlKEFTQ0lJTGl0ZXJhbCgicGF5bG9hZCIpLCB2YWx1
ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFBheWxvYWRTZXQ+KCk7CisgICAgICAg
IH0KKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgRXJyb3JTZXQ+JiBzZXRFcnJvcihQYXNzUmVm
UHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkRhdGFiYXNlOjpFcnJvcj4gdmFsdWUpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBFcnJvclNldCksIHBy
b3BlcnR5X2Vycm9yX2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRPYmpl
Y3QoQVNDSUlMaXRlcmFsKCJlcnJvciIpLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2Fz
dFN0YXRlPEVycm9yU2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgb3BlcmF0b3IgUmVmUHRy
PFBhcmFtZXRlckJ1bmRsZT4mICgpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CisgICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoUGFyYW1ldGVyQnVuZGxlKSA9PSBzaXplb2YoSW5z
cGVjdG9yOjpJbnNwZWN0b3JPYmplY3QpLCBjYW5ub3RfY2FzdCk7CisgICAgICAgICAgICByZXR1
cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPFBhcmFtZXRlckJ1bmRsZT4qPigmbV9yZXN1bHQp
OworICAgICAgICB9CisKKyAgICAgICAgUGFzc1JlZlB0cjxQYXJhbWV0ZXJCdW5kbGU+IHJlbGVh
c2UoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gUmVmUHRyPFBhcmFtZXRlckJ1bmRs
ZT4oKnRoaXMpLnJlbGVhc2UoKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICAvKgorICAgICAq
IFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKKyAgICAgKiBSZWZQdHI8UGFyYW1ldGVyQnVuZGxlPiBy
ZXN1bHQgPSBQYXJhbWV0ZXJCdW5kbGU6OmNyZWF0ZSgpCisgICAgICogICAgIC5zZXRDb2x1bW5O
YW1lcyguLi4pCisgICAgICogICAgIC5zZXROb3RlcyguLi4pCisgICAgICogICAgIC5zZXRUaW1l
c3RhbXAoLi4uKQorICAgICAqICAgICAuc2V0VmFsdWVzKC4uLikKKyAgICAgKiAgICAgLnNldFBh
eWxvYWQoLi4uKQorICAgICAqICAgICAuc2V0RXJyb3IoLi4uKTsKKyAgICAgKi8KKyAgICBzdGF0
aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBC
dWlsZGVyPE5vRmllbGRzU2V0PihJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkp
OworICAgIH0KKyAgICB0eXBlZGVmIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlN0cnVjdEl0ZW1U
cmFpdHMgSXRlbVRyYWl0czsKK307CisKK30gLy8gVGVzdAorCisKKworfSAvLyBuYW1lc3BhY2Ug
VHlwZUJ1aWxkZXIKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFC
TEUoSU5TUEVDVE9SKQorCisjZW5kaWYgLy8gIWRlZmluZWQoSW5zcGVjdG9yVGVzdFR5cGVCdWls
ZGVyc19oKQorIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmgKKworIyMj
IEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuY3BwCisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbgor
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2NvZGVnZW4vZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmgiCisK
KyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgor
CituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworbmFtZXNwYWNlIFR5cGVCdWlsZGVyIHsKKworc3Rh
dGljIGNvbnN0IGNoYXIqIGNvbnN0IGVudW1fY29uc3RhbnRfdmFsdWVzW10gPSB7Cit9OworCitT
dHJpbmcgZ2V0VGVzdEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKSB7CisgICAgcmV0dXJuIGVu
dW1fY29uc3RhbnRfdmFsdWVzW2NvZGVdOworfQorCisKKworfSAvLyBuYW1lc3BhY2UgVHlwZUJ1
aWxkZXIKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5T
UEVDVE9SKQorCisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuY3BwCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
ZXhwZWN0ZWQvdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uLXJlc3VsdCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLXJl
cXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24tcmVzdWx0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA1NmY1MjMyMmI0
MDdkMzdiOTI5MWQxYjFkYThjYjEyNWE0MzE4ZjEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1yZXF1
aXJpbmctcnVudGltZS1jYXN0cy5qc29uLXJlc3VsdApAQCAtMCwwICsxLDcyNyBAQAorIyMjIEJl
Z2luIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kQ29tbWFuZHMuanMKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uCisv
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Y29kZWdlbi9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworLy8gVGVz
dC4KK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFbnVtKCJUZXN0LlVuY2FzdGVkQW5pbWFscyIs
IHtQaWdzOiAiUGlncyIsIENvd3M6ICJDb3dzIiwgQ2F0czogIkNhdHMiLCBIZW5zOiAiSGVucyJ9
KTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFbnVtKCJUZXN0LkNhc3RlZEFuaW1hbHMiLCB7
RHVja3M6ICJEdWNrcyIsIEhlbnM6ICJIZW5zIiwgQ3Jvd3M6ICJDcm93cyIsIEZsYW1pbmdvczog
IkZsYW1pbmdvcyJ9KTsKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdEJhY2tlbmRDb21tYW5k
cy5qcworCisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVycy5o
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxF
LiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtcmVxdWlyaW5nLXJ1bnRp
bWUtY2FzdHMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5CisKKyNpZm5kZWYgSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVyc19oCisjZGVm
aW5lIEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnNfaAorCisjaWYgRU5BQkxFKElOU1BF
Q1RPUikKKworI2luY2x1ZGUgIkluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuaCIKKyNpbmNsdWRl
IDxpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx3dGYv
UGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKKwordHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKK30gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKworI2VuZGlm
IC8vICFkZWZpbmVkKEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnNfaCkKKyMjIyBFbmQg
RmlsZTogSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxl
OiBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KKy8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2Rl
Z2VuL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgor
CisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwuaD4KKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsK
KworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BF
Q1RPUikKKworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNw
cAorCisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1l
LWNhc3RzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQorCisjaWZuZGVmIEluc3BlY3RvclRlc3RGcm9udGVuZERpc3BhdGNoZXJzX2gKKyNkZWZp
bmUgSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnNfaAorCisjaWYgRU5BQkxFKElOU1BF
Q1RPUikKKworI2luY2x1ZGUgIkluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuaCIKKyNpbmNsdWRl
IDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLmg+CisjaW5jbHVkZSA8aW5zcGVj
dG9yL0luc3BlY3RvclZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisK
KworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9S
KQorCisjZW5kaWYgLy8gIWRlZmluZWQoSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnNf
aCkKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorCisj
IyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2Fz
dHMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JUZXN0RnJvbnRlbmRE
aXNwYXRjaGVycy5oIgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUgPHd0Zi90
ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK30gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKworIyMjIEVuZCBGaWxl
OiBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6
IEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KKy8vIGJ5IHRoZSBzY3Jp
cHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaWZuZGVmIEluc3BlY3RvclRl
c3RUeXBlQnVpbGRlcnNfaAorI2RlZmluZSBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzX2gKKwor
I2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9ySlNU
eXBlQnVpbGRlcnMuaD4KKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVHlwZUJ1aWxkZXIu
aD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRy
Lmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworbmFtZXNwYWNlIFR5cGVCdWlsZGVy
IHsKKworLy8gRm9yd2FyZCBkZWNsYXJhdGlvbnMuCituYW1lc3BhY2UgVGVzdCB7CitjbGFzcyBS
ZWN1cnNpdmVPYmplY3QxOworY2xhc3MgUmVjdXJzaXZlT2JqZWN0MjsKK2NsYXNzIFR5cGVOZWVk
aW5nQ2FzdDsKK2VudW0gY2xhc3MgQ2FzdGVkQW5pbWFsczsKK2VudW0gY2xhc3MgVW5jYXN0ZWRB
bmltYWxzOworfSAvLyBUZXN0CisvLyBFbmQgb2YgZm9yd2FyZCBkZWNsYXJhdGlvbnMuCisKKwor
Ly8gVHlwZWRlZnMuCituYW1lc3BhY2UgVGVzdCB7Cit0eXBlZGVmIGludCBDYXN0ZWRPYmplY3RJ
ZDsKKwordHlwZWRlZiBpbnQgVW5jYXN0ZWRPYmplY3RJZDsKK30gLy8gVGVzdAorLy8gRW5kIG9m
IHR5cGVkZWZzLgorCitTdHJpbmcgZ2V0VGVzdEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKTsK
KwordGVtcGxhdGU8dHlwZW5hbWUgVD4gU3RyaW5nIGdldFRlc3RFbnVtQ29uc3RhbnRWYWx1ZShU
IGVudW1WYWx1ZSkKK3sKKyAgICByZXR1cm4gZ2V0VGVzdEVudW1Db25zdGFudFZhbHVlKHN0YXRp
Y19jYXN0PGludD4oZW51bVZhbHVlKSk7Cit9CisKK25hbWVzcGFjZSBUZXN0IHsKKy8qIEEgZHVt
bXkgdHlwZSB0aGF0IHJlcXVpcmVzIHJ1bnRpbWUgY2FzdHMsIGFuZCBmb3JjZXMgbm9uLXByaW1p
dGl2ZSByZWZlcmVuY2VkIHR5cGVzIHRvIGFsc28gZW1pdCBydW50aW1lIGNhc3QgaGVscGVycy4g
Ki8KK2NsYXNzIFR5cGVOZWVkaW5nQ2FzdCA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3BlY3Rvck9i
amVjdEJhc2UgeworcHVibGljOgorICAgIGVudW0geworICAgICAgICBOb0ZpZWxkc1NldCA9IDAs
CisgICAgICAgIFN0cmluZ1NldCA9IDEgPDwgMCwKKyAgICAgICAgTnVtYmVyU2V0ID0gMSA8PCAx
LAorICAgICAgICBBbmltYWxzU2V0ID0gMSA8PCAyLAorICAgICAgICBJZFNldCA9IDEgPDwgMywK
KyAgICAgICAgVHJlZVNldCA9IDEgPDwgNCwKKyAgICAgICAgQWxsRmllbGRzU2V0ID0gKFN0cmlu
Z1NldCB8IE51bWJlclNldCB8IEFuaW1hbHNTZXQgfCBJZFNldCB8IFRyZWVTZXQpCisgICAgfTsK
KworICAgIHRlbXBsYXRlPGludCBTVEFURT4KKyAgICBjbGFzcyBCdWlsZGVyIHsKKyAgICBwcml2
YXRlOgorICAgICAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0
OworCisgICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNh
c3RTdGF0ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2Fz
dDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1
aWxkZXIoUGFzc1JlZlB0cjwvKlR5cGVOZWVkaW5nQ2FzdCovSW5zcGVjdG9yOjpJbnNwZWN0b3JP
YmplY3Q+IHB0cikKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUg
PT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CisgICAg
ICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKKyAgICAgICAgfQorICAgICAgICBmcmllbmQgY2xhc3Mg
VHlwZU5lZWRpbmdDYXN0OworICAgIHB1YmxpYzoKKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwg
U3RyaW5nU2V0PiYgc2V0U3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTdHJpbmdTZXQpLCBwcm9wZXJ0eV9z
dHJpbmdfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZyhBU0NJ
SUxpdGVyYWwoInN0cmluZyIpLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRl
PFN0cmluZ1NldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBOdW1i
ZXJTZXQ+JiBzZXROdW1iZXIoaW50IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVCghKFNUQVRFICYgTnVtYmVyU2V0KSwgcHJvcGVydHlfbnVtYmVyX2FscmVhZHlf
c2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoQVNDSUlMaXRlcmFsKCJudW1i
ZXIiKSwgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxOdW1iZXJTZXQ+KCk7
CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQW5pbWFsc1NldD4mIHNldEFu
aW1hbHMoSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6VGVzdDo6Q2FzdGVkQW5pbWFscyB2YWx1ZSkK
KyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEFuaW1hbHNT
ZXQpLCBwcm9wZXJ0eV9hbmltYWxzX2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0
LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJhbmltYWxzIiksIEluc3BlY3Rvcjo6VHlwZUJ1aWxk
ZXI6OmdldFRlc3RFbnVtQ29uc3RhbnRWYWx1ZShzdGF0aWNfY2FzdDxpbnQ+KHZhbHVlKSkpOwor
ICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxBbmltYWxzU2V0PigpOworICAgICAgICB9CisK
KyAgICAgICAgQnVpbGRlcjxTVEFURSB8IElkU2V0PiYgc2V0SWQoaW50IHZhbHVlKQorICAgICAg
ICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgSWRTZXQpLCBwcm9wZXJ0
eV9pZF9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKEFTQ0lJ
TGl0ZXJhbCgiaWQiKSwgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxJZFNl
dD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBUcmVlU2V0PiYgc2V0
VHJlZShQYXNzUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlRlc3Q6OlJlY3Vyc2l2ZU9i
amVjdDE+IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNU
QVRFICYgVHJlZVNldCksIHByb3BlcnR5X3RyZWVfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAg
bV9yZXN1bHQtPnNldE9iamVjdChBU0NJSUxpdGVyYWwoInRyZWUiKSwgdmFsdWUpOworICAgICAg
ICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxUcmVlU2V0PigpOworICAgICAgICB9CisKKyAgICAgICAg
b3BlcmF0b3IgUmVmUHRyPFR5cGVOZWVkaW5nQ2FzdD4mICgpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9y
ZWFkeSk7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoVHlwZU5lZWRpbmdDYXN0
KSA9PSBzaXplb2YoSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QpLCBjYW5ub3RfY2FzdCk7Cisg
ICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPFR5cGVOZWVkaW5nQ2Fz
dD4qPigmbV9yZXN1bHQpOworICAgICAgICB9CisKKyAgICAgICAgUGFzc1JlZlB0cjxUeXBlTmVl
ZGluZ0Nhc3Q+IHJlbGVhc2UoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gUmVmUHRy
PFR5cGVOZWVkaW5nQ2FzdD4oKnRoaXMpLnJlbGVhc2UoKTsKKyAgICAgICAgfQorICAgIH07CisK
KyAgICAvKgorICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKKyAgICAgKiBSZWZQdHI8VHlw
ZU5lZWRpbmdDYXN0PiByZXN1bHQgPSBUeXBlTmVlZGluZ0Nhc3Q6OmNyZWF0ZSgpCisgICAgICog
ICAgIC5zZXRTdHJpbmcoLi4uKQorICAgICAqICAgICAuc2V0TnVtYmVyKC4uLikKKyAgICAgKiAg
ICAgLnNldEFuaW1hbHMoLi4uKQorICAgICAqICAgICAuc2V0SWQoLi4uKQorICAgICAqICAgICAu
c2V0VHJlZSguLi4pOworICAgICAqLworICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBj
cmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7CisgICAgfQorICAgIHR5cGVkZWYgSW5z
cGVjdG9yOjpUeXBlQnVpbGRlcjo6U3RydWN0SXRlbVRyYWl0cyBJdGVtVHJhaXRzOworfTsKKwor
LyogICovCitlbnVtIGNsYXNzIFVuY2FzdGVkQW5pbWFscyB7CisgICAgUGlncyA9IDQsCisgICAg
Q293cyA9IDUsCisgICAgQ2F0cyA9IDYsCisgICAgSGVucyA9IDEsCit9OyAvLyBlbnVtIGNsYXNz
IFVuY2FzdGVkQW5pbWFscworLyogICovCitlbnVtIGNsYXNzIENhc3RlZEFuaW1hbHMgeworICAg
IER1Y2tzID0gMCwKKyAgICBIZW5zID0gMSwKKyAgICBDcm93cyA9IDIsCisgICAgRmxhbWluZ29z
ID0gMywKK307IC8vIGVudW0gY2xhc3MgQ2FzdGVkQW5pbWFscworY2xhc3MgUmVjdXJzaXZlT2Jq
ZWN0MSA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdEJhc2UgeworcHVibGljOgor
ICAgIGVudW0geworICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCisgICAgICAgIEFsbEZpZWxkc1Nl
dCA9IDAKKyAgICB9OworCisgICAgdGVtcGxhdGU8aW50IFNUQVRFPgorICAgIGNsYXNzIEJ1aWxk
ZXIgeworICAgIHByaXZhdGU6CisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9i
amVjdD4gbV9yZXN1bHQ7CisKKyAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RB
VEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICpy
ZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOworICAgICAgICB9
CisKKyAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPC8qUmVjdXJzaXZlT2JqZWN0MSovSW5zcGVj
dG9yOjpJbnNwZWN0b3JPYmplY3Q+IHB0cikKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5p
dF9zdGF0ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKKyAgICAgICAgfQorICAgICAg
ICBmcmllbmQgY2xhc3MgUmVjdXJzaXZlT2JqZWN0MTsKKyAgICBwdWJsaWM6CisKKyAgICAgICAg
b3BlcmF0b3IgUmVmUHRyPFJlY3Vyc2l2ZU9iamVjdDE+JiAoKQorICAgICAgICB7CisgICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3Rf
cmVhZHkpOworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKFJlY3Vyc2l2ZU9iamVj
dDEpID09IHNpemVvZihJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCksIGNhbm5vdF9jYXN0KTsK
KyAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8UmVjdXJzaXZlT2Jq
ZWN0MT4qPigmbV9yZXN1bHQpOworICAgICAgICB9CisKKyAgICAgICAgUGFzc1JlZlB0cjxSZWN1
cnNpdmVPYmplY3QxPiByZWxlYXNlKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIFJl
ZlB0cjxSZWN1cnNpdmVPYmplY3QxPigqdGhpcykucmVsZWFzZSgpOworICAgICAgICB9CisgICAg
fTsKKworICAgIC8qCisgICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgorICAgICAqIFJlZlB0
cjxSZWN1cnNpdmVPYmplY3QxPiByZXN1bHQgPSBSZWN1cnNpdmVPYmplY3QxOjpjcmVhdGUoKTsK
KyAgICAgKi8KKyAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKKyAgICB7
CisgICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihJbnNwZWN0b3I6Okluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCkpOworICAgIH0KKyAgICB0eXBlZGVmIEluc3BlY3Rvcjo6VHlwZUJ1
aWxkZXI6OlN0cnVjdEl0ZW1UcmFpdHMgSXRlbVRyYWl0czsKKworICAgIHZvaWQgc2V0T2JqKFBh
c3NSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0Mj4g
dmFsdWUpCisgICAgeworICAgICAgICBJbnNwZWN0b3JPYmplY3RCYXNlOjpzZXRPYmplY3QoQVND
SUlMaXRlcmFsKCJvYmoiKSwgdmFsdWUpOworICAgIH0KK307CisKK2NsYXNzIFJlY3Vyc2l2ZU9i
amVjdDIgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3RCYXNlIHsKK3B1YmxpYzoK
KyAgICBlbnVtIHsKKyAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAorICAgICAgICBBbGxGaWVsZHNT
ZXQgPSAwCisgICAgfTsKKworICAgIHRlbXBsYXRlPGludCBTVEFURT4KKyAgICBjbGFzcyBCdWls
ZGVyIHsKKyAgICBwcml2YXRlOgorICAgICAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JP
YmplY3Q+IG1fcmVzdWx0OworCisgICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNU
QVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAq
cmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKKyAgICAgICAg
fQorCisgICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjwvKlJlY3Vyc2l2ZU9iamVjdDIqL0luc3Bl
Y3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBwdHIpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2lu
aXRfc3RhdGUpOworICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CisgICAgICAgIH0KKyAgICAg
ICAgZnJpZW5kIGNsYXNzIFJlY3Vyc2l2ZU9iamVjdDI7CisgICAgcHVibGljOgorCisgICAgICAg
IG9wZXJhdG9yIFJlZlB0cjxSZWN1cnNpdmVPYmplY3QyPiYgKCkKKyAgICAgICAgeworICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90
X3JlYWR5KTsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihSZWN1cnNpdmVPYmpl
Y3QyKSA9PSBzaXplb2YoSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QpLCBjYW5ub3RfY2FzdCk7
CisgICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPFJlY3Vyc2l2ZU9i
amVjdDI+Kj4oJm1fcmVzdWx0KTsKKyAgICAgICAgfQorCisgICAgICAgIFBhc3NSZWZQdHI8UmVj
dXJzaXZlT2JqZWN0Mj4gcmVsZWFzZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBS
ZWZQdHI8UmVjdXJzaXZlT2JqZWN0Mj4oKnRoaXMpLnJlbGVhc2UoKTsKKyAgICAgICAgfQorICAg
IH07CisKKyAgICAvKgorICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKKyAgICAgKiBSZWZQ
dHI8UmVjdXJzaXZlT2JqZWN0Mj4gcmVzdWx0ID0gUmVjdXJzaXZlT2JqZWN0Mjo6Y3JlYXRlKCk7
CisgICAgICovCisgICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCisgICAg
eworICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSW5zcGVjdG9yOjpJbnNwZWN0
b3JPYmplY3Q6OmNyZWF0ZSgpKTsKKyAgICB9CisgICAgdHlwZWRlZiBJbnNwZWN0b3I6OlR5cGVC
dWlsZGVyOjpTdHJ1Y3RJdGVtVHJhaXRzIEl0ZW1UcmFpdHM7CisKKyAgICB2b2lkIHNldE9iaihQ
YXNzUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDE+
IHZhbHVlKQorICAgIHsKKyAgICAgICAgSW5zcGVjdG9yT2JqZWN0QmFzZTo6c2V0T2JqZWN0KEFT
Q0lJTGl0ZXJhbCgib2JqIiksIHZhbHVlKTsKKyAgICB9Cit9OworCit9IC8vIFRlc3QKKwordGVt
cGxhdGU8PiBzdHJ1Y3QgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpUZXN0
OjpDYXN0ZWRBbmltYWxzPiB7CisjaWYgIUFTU0VSVF9ESVNBQkxFRAorc3RhdGljIHZvaWQgYXNz
ZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSopOworI2Vu
ZGlmIC8vICFBU1NFUlRfRElTQUJMRUQKK307Cit0ZW1wbGF0ZTw+IHN0cnVjdCBCaW5kaW5nVHJh
aXRzPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdD4geworc3Rh
dGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6VGVzdDo6VHlwZU5lZWRpbmdD
YXN0PiBydW50aW1lQ2FzdChQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+IHZh
bHVlKTsKKyNpZiAhQVNTRVJUX0RJU0FCTEVECitzdGF0aWMgdm9pZCBhc3NlcnRWYWx1ZUhhc0V4
cGVjdGVkVHlwZShJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlKik7CisjZW5kaWYgLy8gIUFTU0VS
VF9ESVNBQkxFRAorfTsKK3RlbXBsYXRlPD4gc3RydWN0IEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9y
OjpUeXBlQnVpbGRlcjo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0MT4geworI2lmICFBU1NFUlRfRElT
QUJMRUQKK3N0YXRpYyB2b2lkIGFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKEluc3BlY3Rvcjo6
SW5zcGVjdG9yVmFsdWUqKTsKKyNlbmRpZiAvLyAhQVNTRVJUX0RJU0FCTEVECit9OwordGVtcGxh
dGU8PiBzdHJ1Y3QgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpUZXN0OjpS
ZWN1cnNpdmVPYmplY3QyPiB7CisjaWYgIUFTU0VSVF9ESVNBQkxFRAorc3RhdGljIHZvaWQgYXNz
ZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSopOworI2Vu
ZGlmIC8vICFBU1NFUlRfRElTQUJMRUQKK307CisKK30gLy8gbmFtZXNwYWNlIFR5cGVCdWlsZGVy
CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RP
UikKKworI2VuZGlmIC8vICFkZWZpbmVkKEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnNfaCkKKyMj
IyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5oCisKKyMjIyBCZWdpbiBGaWxl
OiBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KKy8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5oIgorCisjaWYgRU5BQkxF
KElOU1BFQ1RPUikKKworI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNl
IEluc3BlY3RvciB7CisKK25hbWVzcGFjZSBUeXBlQnVpbGRlciB7CisKK3N0YXRpYyBjb25zdCBj
aGFyKiBjb25zdCBlbnVtX2NvbnN0YW50X3ZhbHVlc1tdID0geworICAgICJEdWNrcyIsCisgICAg
IkhlbnMiLAorICAgICJDcm93cyIsCisgICAgIkZsYW1pbmdvcyIsCisgICAgIlBpZ3MiLAorICAg
ICJDb3dzIiwKKyAgICAiQ2F0cyIsCit9OworCitTdHJpbmcgZ2V0VGVzdEVudW1Db25zdGFudFZh
bHVlKGludCBjb2RlKSB7CisgICAgcmV0dXJuIGVudW1fY29uc3RhbnRfdmFsdWVzW2NvZGVdOwor
fQorCisKKworI2lmICFBU1NFUlRfRElTQUJMRUQKK3ZvaWQgQmluZGluZ1RyYWl0czxJbnNwZWN0
b3I6OlR5cGVCdWlsZGVyOjpUZXN0OjpDYXN0ZWRBbmltYWxzPjo6YXNzZXJ0VmFsdWVIYXNFeHBl
Y3RlZFR5cGUoSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSogdmFsdWUpCit7CisgICAgU3RyaW5n
IHM7CisgICAgYm9vbCBjYXN0X3JlcyA9IHZhbHVlLT5hc1N0cmluZygmcyk7CisgICAgQVNTRVJU
KGNhc3RfcmVzKTsKKyAgICBBU1NFUlQocyA9PSAiRHVja3MiIHx8IHMgPT0gIkhlbnMiIHx8IHMg
PT0gIkNyb3dzIiB8fCBzID09ICJGbGFtaW5nb3MiKTsKK30KKyNlbmRpZiAvLyAhQVNTRVJUX0RJ
U0FCTEVECisKKyNpZiAhQVNTRVJUX0RJU0FCTEVECit2b2lkIEJpbmRpbmdUcmFpdHM8SW5zcGVj
dG9yOjpUeXBlQnVpbGRlcjo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0Pjo6YXNzZXJ0VmFsdWVIYXNF
eHBlY3RlZFR5cGUoSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSogdmFsdWUpCit7CisgICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gb2JqZWN0OworICAgIGJvb2wgY2FzdFJlcyA9IHZhbHVlLT5h
c09iamVjdCgmb2JqZWN0KTsKKyAgICBBU1NFUlRfVU5VU0VEKGNhc3RSZXMsIGNhc3RSZXMpOwor
ICAgIHsKKyAgICAgICAgSW5zcGVjdG9yT2JqZWN0OjppdGVyYXRvciBzdHJpbmdQb3MgPSBvYmpl
Y3QtPmZpbmQoQVNDSUlMaXRlcmFsKCJzdHJpbmciKSk7CisgICAgICAgIEFTU0VSVChzdHJpbmdQ
b3MgIT0gb2JqZWN0LT5lbmQoKSk7CisgICAgICAgIEJpbmRpbmdUcmFpdHM8U3RyaW5nPjo6YXNz
ZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoc3RyaW5nUG9zLT52YWx1ZS5nZXQoKSk7CisgICAgfQor
ICAgIHsKKyAgICAgICAgSW5zcGVjdG9yT2JqZWN0OjppdGVyYXRvciBudW1iZXJQb3MgPSBvYmpl
Y3QtPmZpbmQoQVNDSUlMaXRlcmFsKCJudW1iZXIiKSk7CisgICAgICAgIEFTU0VSVChudW1iZXJQ
b3MgIT0gb2JqZWN0LT5lbmQoKSk7CisgICAgICAgIEJpbmRpbmdUcmFpdHM8aW50Pjo6YXNzZXJ0
VmFsdWVIYXNFeHBlY3RlZFR5cGUobnVtYmVyUG9zLT52YWx1ZS5nZXQoKSk7CisgICAgfQorICAg
IHsKKyAgICAgICAgSW5zcGVjdG9yT2JqZWN0OjppdGVyYXRvciBhbmltYWxzUG9zID0gb2JqZWN0
LT5maW5kKEFTQ0lJTGl0ZXJhbCgiYW5pbWFscyIpKTsKKyAgICAgICAgQVNTRVJUKGFuaW1hbHNQ
b3MgIT0gb2JqZWN0LT5lbmQoKSk7CisgICAgICAgIEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpU
eXBlQnVpbGRlcjo6VGVzdDo6Q2FzdGVkQW5pbWFscz46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRU
eXBlKGFuaW1hbHNQb3MtPnZhbHVlLmdldCgpKTsKKyAgICB9CisgICAgeworICAgICAgICBJbnNw
ZWN0b3JPYmplY3Q6Oml0ZXJhdG9yIGlkUG9zID0gb2JqZWN0LT5maW5kKEFTQ0lJTGl0ZXJhbCgi
aWQiKSk7CisgICAgICAgIEFTU0VSVChpZFBvcyAhPSBvYmplY3QtPmVuZCgpKTsKKyAgICAgICAg
QmluZGluZ1RyYWl0czxpbnQ+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShpZFBvcy0+dmFs
dWUuZ2V0KCkpOworICAgIH0KKyAgICB7CisgICAgICAgIEluc3BlY3Rvck9iamVjdDo6aXRlcmF0
b3IgdHJlZVBvcyA9IG9iamVjdC0+ZmluZChBU0NJSUxpdGVyYWwoInRyZWUiKSk7CisgICAgICAg
IEFTU0VSVCh0cmVlUG9zICE9IG9iamVjdC0+ZW5kKCkpOworICAgICAgICBCaW5kaW5nVHJhaXRz
PEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDE+Ojphc3NlcnRW
YWx1ZUhhc0V4cGVjdGVkVHlwZSh0cmVlUG9zLT52YWx1ZS5nZXQoKSk7CisgICAgfQorCisgICAg
aW50IGZvdW5kUHJvcGVydGllc0NvdW50ID0gNTsKKyAgICBpZiAoZm91bmRQcm9wZXJ0aWVzQ291
bnQgIT0gb2JqZWN0LT5zaXplKCkpCisgICAgICAgIEZBVEFMKCJVbmV4cGVjdGVkIHByb3BlcnRp
ZXMgaW4gb2JqZWN0OiAlc1xuIiwgb2JqZWN0LT50b0pTT05TdHJpbmcoKS5hc2NpaSgpLmRhdGEo
KSk7Cit9CisjZW5kaWYgLy8gIUFTU0VSVF9ESVNBQkxFRAorCitQYXNzUmVmUHRyPEluc3BlY3Rv
cjo6VHlwZUJ1aWxkZXI6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdD4gQmluZGluZ1RyYWl0czxJbnNw
ZWN0b3I6OlR5cGVCdWlsZGVyOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3Q+OjpydW50aW1lQ2FzdChQ
YXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+IHZhbHVlKQoreworICAgIFJlZlB0
cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gb2JqZWN0OworICAgIGJvb2wgY2FzdFJlcyA9
IHZhbHVlLT5hc09iamVjdCgmb2JqZWN0KTsKKyAgICBBU1NFUlRfVU5VU0VEKGNhc3RSZXMsIGNh
c3RSZXMpOworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICBCaW5kaW5nVHJhaXRzPEluc3BlY3Rv
cjo6VHlwZUJ1aWxkZXI6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdD46OmFzc2VydFZhbHVlSGFzRXhw
ZWN0ZWRUeXBlKG9iamVjdC5nZXQoKSk7CisjZW5kaWYgIC8vICFBU1NFUlRfRElTQUJMRUQKKyAg
ICBDT01QSUxFX0FTU0VSVChzaXplb2YoSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6VGVzdDo6VHlw
ZU5lZWRpbmdDYXN0KSA9PSBzaXplb2YoSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3RCYXNlKSwg
dHlwZV9jYXN0X3Byb2JsZW0pOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxJbnNwZWN0b3I6OlR5
cGVCdWlsZGVyOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3QqPihzdGF0aWNfY2FzdDxJbnNwZWN0b3I6
Okluc3BlY3Rvck9iamVjdEJhc2UqPihvYmplY3QuZ2V0KCkpKTsKK30KKworCisjaWYgIUFTU0VS
VF9ESVNBQkxFRAordm9pZCBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlRl
c3Q6OlJlY3Vyc2l2ZU9iamVjdDE+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShJbnNwZWN0
b3I6Okluc3BlY3RvclZhbHVlKiB2YWx1ZSkKK3sKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBvYmplY3Q7CisgICAgYm9vbCBjYXN0UmVzID0gdmFsdWUtPmFzT2JqZWN0KCZvYmplY3QpOwor
ICAgIEFTU0VSVF9VTlVTRUQoY2FzdFJlcywgY2FzdFJlcyk7CisKKyAgICBpbnQgZm91bmRQcm9w
ZXJ0aWVzQ291bnQgPSAwOworICAgIHsKKyAgICAgICAgSW5zcGVjdG9yT2JqZWN0OjppdGVyYXRv
ciBvYmpQb3MgPSBvYmplY3QtPmZpbmQoQVNDSUlMaXRlcmFsKCJvYmoiKSk7CisgICAgICAgIGlm
IChvYmpQb3MgIT0gb2JqZWN0LT5lbmQoKSkgeworICAgICAgICAgICAgQmluZGluZ1RyYWl0czxJ
bnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpUZXN0OjpSZWN1cnNpdmVPYmplY3QyPjo6YXNzZXJ0VmFs
dWVIYXNFeHBlY3RlZFR5cGUob2JqUG9zLT52YWx1ZS5nZXQoKSk7CisgICAgICAgICAgICArK2Zv
dW5kUHJvcGVydGllc0NvdW50OworICAgICAgICB9CisgICAgfQorICAgIGlmIChmb3VuZFByb3Bl
cnRpZXNDb3VudCAhPSBvYmplY3QtPnNpemUoKSkKKyAgICAgICAgRkFUQUwoIlVuZXhwZWN0ZWQg
cHJvcGVydGllcyBpbiBvYmplY3Q6ICVzXG4iLCBvYmplY3QtPnRvSlNPTlN0cmluZygpLmFzY2lp
KCkuZGF0YSgpKTsKK30KKyNlbmRpZiAvLyAhQVNTRVJUX0RJU0FCTEVECisKKyNpZiAhQVNTRVJU
X0RJU0FCTEVECit2b2lkIEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6VGVz
dDo6UmVjdXJzaXZlT2JqZWN0Mj46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKEluc3BlY3Rv
cjo6SW5zcGVjdG9yVmFsdWUqIHZhbHVlKQoreworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IG9iamVjdDsKKyAgICBib29sIGNhc3RSZXMgPSB2YWx1ZS0+YXNPYmplY3QoJm9iamVjdCk7Cisg
ICAgQVNTRVJUX1VOVVNFRChjYXN0UmVzLCBjYXN0UmVzKTsKKworICAgIGludCBmb3VuZFByb3Bl
cnRpZXNDb3VudCA9IDA7CisgICAgeworICAgICAgICBJbnNwZWN0b3JPYmplY3Q6Oml0ZXJhdG9y
IG9ialBvcyA9IG9iamVjdC0+ZmluZChBU0NJSUxpdGVyYWwoIm9iaiIpKTsKKyAgICAgICAgaWYg
KG9ialBvcyAhPSBvYmplY3QtPmVuZCgpKSB7CisgICAgICAgICAgICBCaW5kaW5nVHJhaXRzPElu
c3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDE+Ojphc3NlcnRWYWx1
ZUhhc0V4cGVjdGVkVHlwZShvYmpQb3MtPnZhbHVlLmdldCgpKTsKKyAgICAgICAgICAgICsrZm91
bmRQcm9wZXJ0aWVzQ291bnQ7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKGZvdW5kUHJvcGVy
dGllc0NvdW50ICE9IG9iamVjdC0+c2l6ZSgpKQorICAgICAgICBGQVRBTCgiVW5leHBlY3RlZCBw
cm9wZXJ0aWVzIGluIG9iamVjdDogJXNcbiIsIG9iamVjdC0+dG9KU09OU3RyaW5nKCkuYXNjaWko
KS5kYXRhKCkpOworfQorI2VuZGlmIC8vICFBU1NFUlRfRElTQUJMRUQKKworfSAvLyBuYW1lc3Bh
Y2UgVHlwZUJ1aWxkZXIKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBF
TkFCTEUoSU5TUEVDVE9SKQorCisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RUeXBlQnVpbGRl
cnMuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZmFpbC1vbi1kdXBsaWNhdGUtdHlwZS1kZWNsYXJhdGlvbnMuanNvbiBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWR1cGxpY2F0
ZS10eXBlLWRlY2xhcmF0aW9ucy5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjcwMmZjNmEzMjcwYTY0NmE0NTA0
NDdmZGMwNDAxMzk5NWE5NDJiZjAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1kdXBsaWNhdGUtdHlwZS1kZWNs
YXJhdGlvbnMuanNvbgpAQCAtMCwwICsxLDE1IEBACit7CisgICAgImRvbWFpbiI6ICJSdW50aW1l
IiwKKyAgICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJSZW1vdGVP
YmplY3RJZCIsCisgICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAorICAgICAgICAgICAgImRl
c2NyaXB0aW9uIjogIlVuaXF1ZSBvYmplY3QgaWRlbnRpZmllci4iCisgICAgICAgIH0sCisgICAg
ICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJSZW1vdGVPYmplY3RJZCIsCisgICAgICAgICAgICAi
dHlwZSI6ICJzdHJpbmciLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBvYmpl
Y3QgaWRlbnRpZmllci4iCisgICAgICAgIH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1lbnVtLXdpdGgt
bm8tdmFsdWVzLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZmFpbC1vbi1lbnVtLXdpdGgtbm8tdmFsdWVzLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjMyYTdj
MzI0OWE0MGJkNDQ3ZTE5YTkyYThlNTY5MzBkM2Y4NTk1NwotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWVudW0t
d2l0aC1uby12YWx1ZXMuanNvbgpAQCAtMCwwICsxLDEwIEBACit7CisgICAgImRvbWFpbiI6ICJE
YXRhYmFzZSIsCisgICAgInR5cGVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAi
UHJpbWFyeUNvbG9ycyIsCisgICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAorICAgICAgICAg
ICAgImVudW0iOiBbXQorICAgICAgICB9CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tc3RyaW5nLXR5cGVk
LW9wdGlvbmFsLXBhcmFtZXRlci1mbGFnLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1zdHJpbmctdHlwZWQtb3B0aW9uYWwtcGFyYW1l
dGVyLWZsYWcuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40MDEyYzc5YjZiMzhjMjFkZmY2MDdmZWM5ZWU5MGIy
ODAzMTBmOTA4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tc3RyaW5nLXR5cGVkLW9wdGlvbmFsLXBhcmFtZXRl
ci1mbGFnLmpzb24KQEAgLTAsMCArMSwxOCBAQAoreworICAgICJkb21haW4iOiAiRGF0YWJhc2Ui
LAorICAgICJ0eXBlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIkRhdGFiYXNl
SWQiLAorICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKKyAgICAgICAgICAgICJkZXNjcmlw
dGlvbiI6ICJVbmlxdWUgaWRlbnRpZmllciBvZiBEYXRhYmFzZSBvYmplY3QuIgorICAgICAgICB9
CisgICAgXSwKKyAgICAiZXZlbnRzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6
ICJkaWRFeGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJzIiwKKyAgICAgICAgICAgICJwYXJhbWV0ZXJz
IjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJz
dHJpbmciLCAib3B0aW9uYWwiOiAidHJ1ZSIgfQorICAgICAgICAgICAgXQorICAgICAgICB9Cisg
ICAgXQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2ZhaWwtb24tc3RyaW5nLXR5cGVkLW9wdGlvbmFsLXR5cGUtbWVtYmVyLmpzb24g
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1z
dHJpbmctdHlwZWQtb3B0aW9uYWwtdHlwZS1tZW1iZXIuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jYTNlZjI4
YThmODgxNGNjNjE3ZmI1ZDViYzIxMzA2ZDBhYWQ0ZmQwCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tc3RyaW5n
LXR5cGVkLW9wdGlvbmFsLXR5cGUtbWVtYmVyLmpzb24KQEAgLTAsMCArMSwxNiBAQAorWworewor
ICAgICJkb21haW4iOiAiRGF0YWJhc2UiLAorICAgICJ0eXBlcyI6IFsKKyAgICAgICAgeworICAg
ICAgICAgICAgImlkIjogIkVycm9yIiwKKyAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCisg
ICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiRGF0YWJhc2UgZXJyb3IuIiwKKyAgICAgICAgICAg
ICJwcm9wZXJ0aWVzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibWVzc2FnZSIsICJ0
eXBlIjogInN0cmluZyIsICJkZXNjcmlwdGlvbiI6ICJFcnJvciBtZXNzYWdlLiIgfSwKKyAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogImNvZGUiLCAidHlwZSI6ICJpbnRlZ2VyIiwgImRlc2NyaXB0
aW9uIjogIkVycm9yIGNvZGUuIiwgIm9wdGlvbmFsIjogImZhbHNlIiB9CisgICAgICAgICAgICBd
CisgICAgICAgIH0KKyAgICBdCit9CitdCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi10eXBlLWRlY2xhcmF0aW9uLXVzaW5n
LXR5cGUtcmVmZXJlbmNlLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZmFpbC1vbi10eXBlLWRlY2xhcmF0aW9uLXVzaW5nLXR5cGUtcmVmZXJlbmNl
Lmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMTliNzU5MGNjYzZmNmJjMzQ0M2E0YTI4M2NhNmZjY2ZkZjMyNzcz
NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9mYWlsLW9uLXR5cGUtZGVjbGFyYXRpb24tdXNpbmctdHlwZS1yZWZlcmVuY2Uu
anNvbgpAQCAtMCwwICsxLDEzIEBACitbCit7CisgICAgImRvbWFpbiI6ICJSdW50aW1lIiwKKyAg
ICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJSZW1vdGVPYmplY3RJ
ZCIsCisgICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAorICAgICAgICAgICAgIiRyZWYiOiAi
U29tZVR5cGUiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBvYmplY3QgaWRl
bnRpZmllci4iCisgICAgICAgIH0KKyAgICBdCit9CitdCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi10eXBlLXdpdGgtbG93
ZXJjYXNlLW5hbWUuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9mYWlsLW9uLXR5cGUtd2l0aC1sb3dlcmNhc2UtbmFtZS5qc29uCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjUzMTkwMWU0YTlhZDk5MzZiMDFiYmFlZDk3YTFkNGRhMzQ4NDc4YjAKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1v
bi10eXBlLXdpdGgtbG93ZXJjYXNlLW5hbWUuanNvbgpAQCAtMCwwICsxLDEwIEBACit7CisgICAg
ImRvbWFpbiI6ICJEYXRhYmFzZSIsCisgICAgInR5cGVzIjogWworICAgICAgICB7CisgICAgICAg
ICAgICAiaWQiOiAiZGF0YWJhc2VJZCIsCisgICAgICAgICAgICAidHlwZSI6ICJpbnRlZ2VyIiwK
KyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUgaWRlbnRpZmllciBvZiBEYXRhYmFz
ZSBvYmplY3QuIgorICAgICAgICB9CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tdW5rbm93bi10eXBlLXJl
ZmVyZW5jZS1pbi10eXBlLWRlY2xhcmF0aW9uLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi11bmtub3duLXR5cGUtcmVmZXJlbmNlLWlu
LXR5cGUtZGVjbGFyYXRpb24uanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kNjg4N2EyNzQxMTkwMGE4MGQ1MGYw
MDNlYWMzNmMxM2E5OWZhZTU4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVyZW5j
ZS1pbi10eXBlLWRlY2xhcmF0aW9uLmpzb24KQEAgLTAsMCArMSwxMiBAQAorWworeworICAgICJk
b21haW4iOiAiUnVudGltZSIsCisgICAgInR5cGVzIjogWworICAgICAgICB7CisgICAgICAgICAg
ICAiaWQiOiAiUmVtb3RlT2JqZWN0SWQiLAorICAgICAgICAgICAgInR5cGUiOiAiZHJhZ29uIiwK
KyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUgb2JqZWN0IGlkZW50aWZpZXIuIgor
ICAgICAgICB9CisgICAgXQorfQorXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVyZW5jZS1p
bi10eXBlLW1lbWJlci5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2ZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVyZW5jZS1pbi10eXBlLW1lbWJlci5q
c29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmI4MTdkYjUwNDRkYzFmMjg1NTcwMDhjMWYxNzYxZjFiMDY4ZjRjZTYK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZmFpbC1vbi11bmtub3duLXR5cGUtcmVmZXJlbmNlLWluLXR5cGUtbWVtYmVyLmpz
b24KQEAgLTAsMCArMSwxNSBAQAorWworeworICAgICJkb21haW4iOiAiRmFudGFzeSIsCisgICAg
InR5cGVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiRHJhZ29uRWdnIiwKKyAg
ICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAi
QSBkcmFnb24gZWdnLiIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IFsKKyAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogImNvbG9yIiwgIiRyZWYiOiAiQ29sb3IiIH0KKyAgICAgICAgICAgIF0K
KyAgICAgICAgfQorICAgIF0KK30KK10KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9zYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5q
c29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3NhbWUt
dHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2JmNGRmZjVjY2MyOWQw
ZThjMWZhNGIyZGQzMjgzZTc3MTYzMmM3ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9zYW1lLXR5cGUtaWQtZGlmZmVyZW50
LWRvbWFpbi5qc29uCkBAIC0wLDAgKzEsMjIgQEAKK1sKK3sKKyAgICAiZG9tYWluIjogIlJ1bnRp
bWUiLAorICAgICJ0eXBlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIlJlbW90
ZU9iamVjdElkIiwKKyAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCisgICAgICAgICAgICAi
ZGVzY3JpcHRpb24iOiAiVW5pcXVlIG9iamVjdCBpZGVudGlmaWVyLiIKKyAgICAgICAgfQorICAg
IF0KK30sCit7CisgICAgImRvbWFpbiI6ICJSdW50aW1lMiIsCisgICAgInR5cGVzIjogWworICAg
ICAgICB7CisgICAgICAgICAgICAiaWQiOiAiUmVtb3RlT2JqZWN0SWQiLAorICAgICAgICAgICAg
InR5cGUiOiAic3RyaW5nIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUgb2Jq
ZWN0IGlkZW50aWZpZXIuIgorICAgICAgICB9CisgICAgXQorfQorXQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3NoYWRvd2VkLW9wdGlv
bmFsLXR5cGUtc2V0dGVycy5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL3NoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjIwYTBjMTU1Mjc1MGY2MjgyODhjZmY0MTkzOTZiZDZmNmFmNzQ5ZmUKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvc2hh
ZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KQEAgLTAsMCArMSwzMSBAQAoreworICAg
ICJkb21haW4iOiAiUnVudGltZSIsCisgICAgInR5cGVzIjogWworICAgICAgICB7CisgICAgICAg
ICAgICAiaWQiOiAiS2V5UGF0aCIsCisgICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAorICAg
ICAgICAgICAgImRlc2NyaXB0aW9uIjogIktleSBwYXRoLiIsCisgICAgICAgICAgICAicHJvcGVy
dGllcyI6IFsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICJuYW1lIjog
InR5cGUiLAorICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAorICAgICAgICAg
ICAgICAgICAgICAiZW51bSI6IFsibnVsbCIsICJzdHJpbmciLCAiYXJyYXkiXSwKKyAgICAgICAg
ICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIktleSBwYXRoIHR5cGUuIgorICAgICAgICAgICAg
ICAgIH0sCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJz
dHJpbmciLAorICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAorICAgICAgICAg
ICAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAgICAgICAgICAgICAgICAiZGVzY3Jp
cHRpb24iOiAiU3RyaW5nIHZhbHVlLiIKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiYXJyYXkiLAorICAgICAgICAgICAg
ICAgICAgICAidHlwZSI6ICJhcnJheSIsCisgICAgICAgICAgICAgICAgICAgICJvcHRpb25hbCI6
IHRydWUsCisgICAgICAgICAgICAgICAgICAgICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9
LAorICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiQXJyYXkgdmFsdWUuIgorICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0KK30KZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy90eXBl
LWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbiBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy90eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQt
cHJpbWl0aXZlLXR5cGUuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jYmM5ZDUzOTQ3OGRiNDk1Yzk2MDY3ZWNk
NTRhOTViZTUyZjhkMDcwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3R5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRp
dmUtdHlwZS5qc29uCkBAIC0wLDAgKzEsMTAgQEAKK3sKKyAgICAiZG9tYWluIjogIlJ1bnRpbWUi
LAorICAgICJ0eXBlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIlJlbW90ZU9i
amVjdElkIiwKKyAgICAgICAgICAgICJ0eXBlIjogImludGVnZXIiLAorICAgICAgICAgICAgImRl
c2NyaXB0aW9uIjogIlVuaXF1ZSBvYmplY3QgaWRlbnRpZmllci4iCisgICAgICAgIH0KKyAgICBd
Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBl
Lmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uY2ZiMDhiZDk0MGI2NGZiNjYwMzk2NWNlMWIwNGQzZmM5NzQ5ZWE5
MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy90eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbgpAQCAtMCwwICsxLDUw
IEBACitbCit7CisgICAgImRvbWFpbiI6ICJEZWJ1Z2dlciIsCisgICAgInR5cGVzIjogWworICAg
ICAgICB7CisgICAgICAgICAgICAiaWQiOiAiQnJlYWtwb2ludElkIiwKKyAgICAgICAgICAgICJ0
eXBlIjogImludGVnZXIiCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6
ICJSZWFzb24iLAorICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKKyAgICAgICAgICAgICJl
bnVtIjogWyJEaWVkIiwgIkZhaW50ZWQiLCAiSHVuZ3J5Il0KKyAgICAgICAgfQorICAgIF0KK30s
Cit7CisgICAgImRvbWFpbiI6ICJSdW50aW1lIiwKKyAgICAidHlwZXMiOiBbCisgICAgICAgIHsK
KyAgICAgICAgICAgICJpZCI6ICJPYmplY3RJZCIsCisgICAgICAgICAgICAidHlwZSI6ICJpbnRl
Z2VyIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiTHVja3lOdW1i
ZXJzIiwKKyAgICAgICAgICAgICJ0eXBlIjogImFycmF5IiwKKyAgICAgICAgICAgICJpdGVtcyI6
IHsgInR5cGUiOiAiaW50ZWdlciIgfQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAg
ICAiaWQiOiAiQmFieU5hbWVzIiwKKyAgICAgICAgICAgICJ0eXBlIjogImFycmF5IiwKKyAgICAg
ICAgICAgICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9CisgICAgICAgIH0sCisgICAgICAg
IHsKKyAgICAgICAgICAgICJpZCI6ICJOZXdPYmplY3RzIiwKKyAgICAgICAgICAgICJ0eXBlIjog
ImFycmF5IiwKKyAgICAgICAgICAgICJpdGVtcyI6IHsgIiRyZWYiOiAiT2JqZWN0SWQiIH0KKyAg
ICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIk9sZE9iamVjdHMiLAorICAg
ICAgICAgICAgInR5cGUiOiAiYXJyYXkiLAorICAgICAgICAgICAgIml0ZW1zIjogeyAiJHJlZiI6
ICJEZWJ1Z2dlci5CcmVha3BvaW50SWQiIH0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAg
ICAgICAgImlkIjogIlN0b3BSZWFzb25zIiwKKyAgICAgICAgICAgICJ0eXBlIjogImFycmF5IiwK
KyAgICAgICAgICAgICJpdGVtcyI6IHsgIiRyZWYiOiAiRGVidWdnZXIuUmVhc29uIiB9CisgICAg
ICAgIH0KKyAgICBdCit9CitdCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbiBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy90eXBlLWRlY2xhcmF0
aW9uLWVudW0tdHlwZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjlmMGFlZTljOTFiOTVhYmFmMzg3ZTcyYTkx
YTMzMzhiNTc5ZGE5YWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgpA
QCAtMCwwICsxLDE1IEBACit7CisgICAgImRvbWFpbiI6ICJSdW50aW1lIiwKKyAgICAidHlwZXMi
OiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJGYXJtQW5pbWFscyIsCisgICAgICAg
ICAgICAidHlwZSI6ICJzdHJpbmciLAorICAgICAgICAgICAgImVudW0iOiBbIlBpZ3MiLCAiQ293
cyIsICJDYXRzIiwgIkhlbnMiXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAi
aWQiOiAiVHdvTGVnZ2VkQW5pbWFscyIsCisgICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAor
ICAgICAgICAgICAgImVudW0iOiBbIkR1Y2tzIiwgIkhlbnMiLCAiQ3Jvd3MiLCAiRmxhbWluZ29z
Il0KKyAgICAgICAgfQorICAgIF0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy90eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpz
b24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvdHlwZS1k
ZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZmNTdhZDJjZjVmNzhiYzY1
NGRmODFhOTNkYmI1NjA2OWQxNWE0MzEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvdHlwZS1kZWNsYXJhdGlvbi1vYmplY3Qt
dHlwZS5qc29uCkBAIC0wLDAgKzEsOTcgQEAKK1sKK3sKKyAgICAiZG9tYWluIjogIkRhdGFiYXNl
IiwKKyAgICAiZGVzY3JpcHRpb24iOiAiVGVzdCB0eXBlIGJ1aWxkZXIgZ2VuZXJhdGlvbiBvZiB2
YXJpb3VzIG9iamVjdCB0eXBlcy4iLAorICAgICJ0eXBlcyI6IFsKKyAgICAgICAgeworICAgICAg
ICAgICAgImlkIjogIkVycm9yIiwKKyAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCisgICAg
ICAgICAgICAiZGVzY3JpcHRpb24iOiAiRGF0YWJhc2UgZXJyb3IuIiwKKyAgICAgICAgICAgICJw
cm9wZXJ0aWVzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibWVzc2FnZSIsICJ0eXBl
IjogInN0cmluZyIsICJkZXNjcmlwdGlvbiI6ICJFcnJvciBtZXNzYWdlLiIgfSwKKyAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogImNvZGUiLCAidHlwZSI6ICJpbnRlZ2VyIiwgImRlc2NyaXB0aW9u
IjogIkVycm9yIGNvZGUuIiB9CisgICAgICAgICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsK
KyAgICAgICAgICAgICJpZCI6ICJPcHRpb25hbFBhcmFtZXRlckJ1bmRsZSIsCisgICAgICAgICAg
ICAidHlwZSI6ICJvYmplY3QiLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCisgICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogImFycmF5IiwgIm9wdGlv
bmFsIjogdHJ1ZSwgIml0ZW1zIjogeyAidHlwZSI6ICJzdHJpbmciIH0gfSwKKyAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogIm5vdGVzIiwgInR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjogdHJ1
ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidGltZXN0YW1wIiwgInR5cGUiOiAibnVt
YmVyIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidmFs
dWVzIiwgInR5cGUiOiAib2JqZWN0IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAicGF5bG9hZCIsICJ0eXBlIjogImFueSIsICJvcHRpb25hbCI6IHRydWUg
fSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImVycm9yIiwgIiRyZWYiOiAiRXJyb3IiLCAi
b3B0aW9uYWwiOiB0cnVlIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgewor
ICAgICAgICAgICAgImlkIjogIlBhcmFtZXRlckJ1bmRsZSIsCisgICAgICAgICAgICAidHlwZSI6
ICJvYmplY3QiLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCisgICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogImFycmF5IiwgIml0ZW1zIjogeyAidHlw
ZSI6ICJzdHJpbmciIH0gfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm5vdGVzIiwgInR5
cGUiOiAic3RyaW5nIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidGltZXN0YW1wIiwg
InR5cGUiOiAibnVtYmVyIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidmFsdWVzIiwg
InR5cGUiOiAib2JqZWN0IiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicGF5bG9hZCIs
ICJ0eXBlIjogImFueSIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImVycm9yIiwgIiRy
ZWYiOiAiRXJyb3IiIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAg
ICAgICAgICAgImlkIjogIk9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHMiLAorICAgICAg
ICAgICAgImRlc2NyaXB0aW9uIjogIkNvbmZsaWN0ZWQgbmFtZXMgbWF5IGNhdXNlIGdlbmVyYXRl
ZCBnZXR0ZXJzL3NldHRlcnMgdG8gY2xhc2ggd2l0aCBidWlsdC1pbiBJbnNwZWN0b3JPYmplY3Qg
bWV0aG9kcy4iLAorICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKKyAgICAgICAgICAgICJw
cm9wZXJ0aWVzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiaW50ZWdlciIsICJ0eXBl
IjogInN0cmluZyIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImFycmF5IiwgInR5cGUi
OiAic3RyaW5nIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic3RyaW5nIiwgInR5cGUi
OiAic3RyaW5nIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidmFsdWUiLCAidHlwZSI6
ICJzdHJpbmciIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJvYmplY3QiLCAidHlwZSI6
ICJzdHJpbmciIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAg
ICAgICAgImlkIjogIkR1bW15T2JqZWN0IiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJB
biBvcGVuIG9iamVjdCB0aGF0IGRvZXNuJ3QgaGF2ZSBhbnkgcHJlZGVmaW5lZCBmaWVsZHMuIiwK
KyAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIKKyAgICAgICAgfQorICAgIF0KK30sCit7Cisg
ICAgImRvbWFpbiI6ICJUZXN0IiwKKyAgICAiZGVzY3JpcHRpb24iOiAiVGVzdCB0aGUgZ2VuZXJh
dGlvbiBvZiBzcGVjaWFsIGJlaGF2aW9ycyB0aGF0IG9ubHkgYXBwbHkgdG8gc3BlY2lmaWMgY2xh
c3Nlcy4iLAorICAgICJ0eXBlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIlVu
cGxlYXNhbnROYW1lIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJUaGlzIHR5cGUgc2hv
dWxkIGJlIHJlbmFtZWQgdG8gSGFwcHlOYW1lIiwKKyAgICAgICAgICAgICJ0eXBlIjogIm9iamVj
dCIsCisgICAgICAgICAgICAibWVtYmVycyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjog
Im5vdGVzIiwgInR5cGUiOiAic3RyaW5nIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
dGltZXN0YW1wIiwgInR5cGUiOiAibnVtYmVyIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAidmFsdWVzIiwgInR5cGUiOiAib2JqZWN0IiB9CisgICAgICAgICAgICBdCisgICAgICAgIH0s
CisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJQYXJhbWV0ZXJCdW5kbGUiLAorICAgICAg
ICAgICAgInR5cGUiOiAib2JqZWN0IiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWworICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJhcnJheSIsICJp
dGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9IH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjog
InRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1l
IjogInZhbHVlcyIsICJ0eXBlIjogIm9iamVjdCIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1l
IjogInBheWxvYWQiLCAidHlwZSI6ICJhbnkiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJlcnJvciIsICIkcmVmIjogIkRhdGFiYXNlLkVycm9yIiB9CisgICAgICAgICAgICBdCisgICAg
ICAgIH0KKyAgICBdLAorICAgICJjb21tYW5kcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAg
Im5hbWUiOiAiYXR0ZW1wdEN1cnNlIiwKKyAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWworICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAiY3Vyc2UiLCAiJHJlZiI6ICJVbnBsZWFzYW50TmFtZSIg
fQorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICJyZXR1cm5zIjogWworICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAiY2Vuc29yZWRDdXJzZSIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25h
bCI6IHRydWUgfQorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXQorfQorXQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3R5cGUt
cmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy90eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uODNkOTRiZTg5N2QyMmNjMDU4YmI2NDZmZWNkOWE0NzMwMzdiNmI5MgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy90eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KQEAgLTAsMCArMSw1MSBAQAorWwor
eworICAgICJkb21haW4iOiAiVGVzdCIsCisgICAgInR5cGVzIjogWworICAgICAgICB7CisgICAg
ICAgICAgICAiaWQiOiAiVHlwZU5lZWRpbmdDYXN0IiwKKyAgICAgICAgICAgICJ0eXBlIjogIm9i
amVjdCIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiQSBkdW1teSB0eXBlIHRoYXQgcmVx
dWlyZXMgcnVudGltZSBjYXN0cywgYW5kIGZvcmNlcyBub24tcHJpbWl0aXZlIHJlZmVyZW5jZWQg
dHlwZXMgdG8gYWxzbyBlbWl0IHJ1bnRpbWUgY2FzdCBoZWxwZXJzLiIsCisgICAgICAgICAgICAi
cHJvcGVydGllcyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInN0cmluZyIsICJ0eXBl
IjogInN0cmluZyIsICJkZXNjcmlwdGlvbiI6ICJTdHJpbmcgbWVtYmVyLiIgfSwKKyAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogIm51bWJlciIsICJ0eXBlIjogImludGVnZXIiLCAiZGVzY3JpcHRp
b24iOiAiTnVtYmVyIG1lbWJlci4iIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJhbmlt
YWxzIiwgIiRyZWYiOiAiQ2FzdGVkQW5pbWFscyIsICJkZXNjcmlwdGlvbiI6ICJFbnVtIG1lbWJl
ci4iIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJpZCIsICIkcmVmIjogIkNhc3RlZE9i
amVjdElkIiwgImRlc2NyaXB0aW9uIjogIkFsaWFzZWQgbWVtYmVyLiIgfSwKKyAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogInRyZWUiLCAiJHJlZiI6ICJSZWN1cnNpdmVPYmplY3QxIiwgImRlc2Ny
aXB0aW9uIjogIlJlY3Vyc2l2ZSBvYmplY3QgbWVtYmVyLiIgfQorICAgICAgICAgICAgXQorICAg
ICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiQ2FzdGVkT2JqZWN0SWQiLAor
ICAgICAgICAgICAgInR5cGUiOiAiaW50ZWdlciIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAg
ICAgICAgICAgImlkIjogIlVuY2FzdGVkT2JqZWN0SWQiLAorICAgICAgICAgICAgInR5cGUiOiAi
aW50ZWdlciIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIlVuY2Fz
dGVkQW5pbWFscyIsCisgICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAorICAgICAgICAgICAg
ImVudW0iOiBbIlBpZ3MiLCAiQ293cyIsICJDYXRzIiwgIkhlbnMiXQorICAgICAgICB9LAorICAg
ICAgICB7CisgICAgICAgICAgICAiaWQiOiAiQ2FzdGVkQW5pbWFscyIsCisgICAgICAgICAgICAi
dHlwZSI6ICJzdHJpbmciLAorICAgICAgICAgICAgImVudW0iOiBbIkR1Y2tzIiwgIkhlbnMiLCAi
Q3Jvd3MiLCAiRmxhbWluZ29zIl0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAg
ImlkIjogIlJlY3Vyc2l2ZU9iamVjdDEiLAorICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwK
KyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
b2JqIiwgIiRyZWYiOiAiUmVjdXJzaXZlT2JqZWN0MiIsICJvcHRpb25hbCI6IHRydWUgfQorICAg
ICAgICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiUmVj
dXJzaXZlT2JqZWN0MiIsCisgICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAorICAgICAgICAg
ICAgInByb3BlcnRpZXMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJvYmoiLCAiJHJl
ZiI6ICJSZWN1cnNpdmVPYmplY3QxIiwgIm9wdGlvbmFsIjogdHJ1ZSB9CisgICAgICAgICAgICBd
CisgICAgICAgIH0KKyAgICBdCit9CitdCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DTWFr
ZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IGY1NmYwZWQw
N2M2NTExODQ0OTM4Yzc2YWQ4NjRiZmRkYzMyYWI2NDcuLmNlMTU4MWRkOTU5MjI5YWJiMTg3ZGRk
ZWJiZTBiYTBkYzE3ZjcyNTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMu
dHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC03ODcsNiArNzg3LDIx
IEBAIHNldChXZWJDb3JlX0lETF9GSUxFUwogCiBzZXQoV2ViQ29yZV9JTlNQRUNUT1JfU0NSSVBU
U19ESVIgIiR7SkFWQVNDUklQVENPUkVfRElSfS9pbnNwZWN0b3Ivc2NyaXB0cyIpCiAKK3NldChX
ZWJDb3JlX0lOU1BFQ1RPUl9QUk9UT0NPTF9TQ1JJUFRTCisgICAgJHtXZWJDb3JlX0lOU1BFQ1RP
Ul9TQ1JJUFRTX0RJUn0vZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Cisg
ICAgJHtXZWJDb3JlX0lOU1BFQ1RPUl9TQ1JJUFRTX0RJUn0vY29kZWdlbi9nZW5lcmF0ZV9iYWNr
ZW5kX2NvbW1hbmRzLnB5CisgICAgJHtXZWJDb3JlX0lOU1BFQ1RPUl9TQ1JJUFRTX0RJUn0vY29k
ZWdlbi9nZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5CisgICAgJHtXZWJDb3Jl
X0lOU1BFQ1RPUl9TQ1JJUFRTX0RJUn0vY29kZWdlbi9nZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNo
ZXJfaW1wbGVtZW50YXRpb24ucHkKKyAgICAke1dlYkNvcmVfSU5TUEVDVE9SX1NDUklQVFNfRElS
fS9jb2RlZ2VuL2dlbmVyYXRlX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5CisgICAgJHtX
ZWJDb3JlX0lOU1BFQ1RPUl9TQ1JJUFRTX0RJUn0vY29kZWdlbi9nZW5lcmF0ZV9mcm9udGVuZF9k
aXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5CisgICAgJHtXZWJDb3JlX0lOU1BFQ1RPUl9TQ1JJ
UFRTX0RJUn0vY29kZWdlbi9nZW5lcmF0ZV90eXBlX2J1aWxkZXJfaGVhZGVyLnB5CisgICAgJHtX
ZWJDb3JlX0lOU1BFQ1RPUl9TQ1JJUFRTX0RJUn0vY29kZWdlbi9nZW5lcmF0ZV90eXBlX2J1aWxk
ZXJfaW1wbGVtZW50YXRpb24ucHkKKyAgICAke1dlYkNvcmVfSU5TUEVDVE9SX1NDUklQVFNfRElS
fS9jb2RlZ2VuL2dlbmVyYXRvci5weQorICAgICR7V2ViQ29yZV9JTlNQRUNUT1JfU0NSSVBUU19E
SVJ9L2NvZGVnZW4vZ2VuZXJhdG9yX3RlbXBsYXRlcy5weQorICAgICR7V2ViQ29yZV9JTlNQRUNU
T1JfU0NSSVBUU19ESVJ9L2NvZGVnZW4vX19pbml0X18ucHkKKyAgICAke1dlYkNvcmVfSU5TUEVD
VE9SX1NDUklQVFNfRElSfS9jb2RlZ2VuL21vZGVscy5weQorKQorCiBzZXQoV2ViQ29yZV9JTlNQ
RUNUT1JfRE9NQUlOUwogICAgICR7V0VCQ09SRV9ESVJ9L2luc3BlY3Rvci9wcm90b2NvbC9BcHBs
aWNhdGlvbkNhY2hlLmpzb24KICAgICAke1dFQkNPUkVfRElSfS9pbnNwZWN0b3IvcHJvdG9jb2wv
Q1NTLmpzb24KQEAgLTMyNjQsNyArMzI3OSw3IEBAIGFkZF9jdXN0b21fY29tbWFuZCgKICAgICBD
T01NQU5EICR7UFlUSE9OX0VYRUNVVEFCTEV9ICR7V2ViQ29yZV9JTlNQRUNUT1JfU0NSSVBUU19E
SVJ9L2dlbmVyYXRlLWNvbWJpbmVkLWluc3BlY3Rvci1qc29uLnB5ICR7V2ViQ29yZV9JTlNQRUNU
T1JfRE9NQUlOU30gPiAke0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0vSW5zcGVjdG9yV2Vi
Lmpzb24KICAgICBWRVJCQVRJTSkKIAotIyBBbGwgV2ViIEluc3BlY3RvciBnZW5lcmF0ZWQgZmls
ZXMgYXJlIGNyZWF0ZWQgd2l0aCB0aGlzIG9uZSBjYWxsIHRvIENvZGVHZW5lcmF0b3JJbnNwZWN0
b3IucG0KKyMgQWxsIFdlYiBJbnNwZWN0b3IgZ2VuZXJhdGVkIGZpbGVzIGFyZSBjcmVhdGVkIHdp
dGggdGhpcyBvbmUgY2FsbCB0byBnZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKIGFkZF9jdXN0b21fY29tbWFuZCgKICAgICBPVVRQVVQgJHtERVJJVkVEX1NPVVJDRVNfV0VC
Q09SRV9ESVJ9L0luc3BlY3RvcldlYkJhY2tlbmREaXNwYXRjaGVycy5jcHAKICAgICAgICAgICAg
JHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L0luc3BlY3RvcldlYkJhY2tlbmREaXNwYXRj
aGVycy5oCkBAIC0zMjc0LDExICszMjg5LDkgQEAgYWRkX2N1c3RvbV9jb21tYW5kKAogICAgICAg
ICAgICAke0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0vSW5zcGVjdG9yV2ViVHlwZUJ1aWxk
ZXJzLmgKICAgICAgICAgICAgJHtERVJJVkVEX1NPVVJDRVNfV0VCSU5TUEVDVE9SVUlfRElSfS9V
c2VySW50ZXJmYWNlL1Byb3RvY29sL0luc3BlY3RvcldlYkJhY2tlbmRDb21tYW5kcy5qcwogICAg
IE1BSU5fREVQRU5ERU5DWSAke0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0vSW5zcGVjdG9y
V2ViLmpzb24KLSAgICBERVBFTkRTICR7V2ViQ29yZV9JTlNQRUNUT1JfU0NSSVBUU19ESVJ9L0Nv
ZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKLSAgICAgICAgICAgICR7V2ViQ29yZV9JTlNQRUNUT1Jf
U0NSSVBUU19ESVJ9L0NvZGVHZW5lcmF0b3JJbnNwZWN0b3JTdHJpbmdzLnB5CisgICAgREVQRU5E
UyAke1dlYkNvcmVfSU5TUEVDVE9SX1BST1RPQ09MX1NDUklQVFN9CiAgICAgICAgICAgICAke0RF
UklWRURfU09VUkNFU19KQVZBU0NSSVBUQ09SRV9ESVJ9L0luc3BlY3RvckpTLmpzb24KLSAgICAg
ICAgICAgICR7REVSSVZFRF9TT1VSQ0VTX0pBVkFTQ1JJUFRDT1JFX0RJUn0vaW5zcGVjdG9yL0lu
c3BlY3RvckpTVHlwZUJ1aWxkZXJzLmgKLSAgICBDT01NQU5EICR7UFlUSE9OX0VYRUNVVEFCTEV9
ICR7V2ViQ29yZV9JTlNQRUNUT1JfU0NSSVBUU19ESVJ9L0NvZGVHZW5lcmF0b3JJbnNwZWN0b3Iu
cHkgJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L0luc3BlY3RvcldlYi5qc29uICR7REVS
SVZFRF9TT1VSQ0VTX0pBVkFTQ1JJUFRDT1JFX0RJUn0vSW5zcGVjdG9ySlMuanNvbiAtLW91dHB1
dF9oX2RpciAiJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9IiAtLW91dHB1dF9jcHBfZGly
ICIke0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0iIC0tb3V0cHV0X2pzX2RpciAiJHtERVJJ
VkVEX1NPVVJDRVNfV0VCSU5TUEVDVE9SVUlfRElSfS9Vc2VySW50ZXJmYWNlL1Byb3RvY29sIiAt
LW91dHB1dF90eXBlIFdlYiAtLXdyaXRlX2Fsd2F5cworICAgIENPTU1BTkQgJHtQWVRIT05fRVhF
Q1VUQUJMRX0gJHtXZWJDb3JlX0lOU1BFQ1RPUl9TQ1JJUFRTX0RJUn0vZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5IC0tb3V0cHV0RGlyICIke0RFUklWRURfU09VUkNFU19X
RUJDT1JFX0RJUn0iIC0tZnJhbWV3b3JrIFdlYkNvcmUgJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09S
RV9ESVJ9L0luc3BlY3RvcldlYi5qc29uICR7REVSSVZFRF9TT1VSQ0VTX0pBVkFTQ1JJUFRDT1JF
X0RJUn0vSW5zcGVjdG9ySlMuanNvbiAmJiBjcCAke0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJ
Un0vSW5zcGVjdG9yV2ViQmFja2VuZENvbW1hbmRzLmpzICR7REVSSVZFRF9TT1VSQ0VTX1dFQklO
U1BFQ1RPUlVJX0RJUn0vVXNlckludGVyZmFjZS9Qcm90b2NvbAogICAgIFZFUkJBVElNKQogCiBs
aXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0Rl
cml2ZWRTb3VyY2VzLm1ha2UgYi9Tb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCmlu
ZGV4IGU0MTc1YTg5N2UzZGRmYWQ4ZDMyOGM4NzQ2NmU5ZWZjMjJmOTFkMjguLmE5Y2Y2YzIxZWEy
M2ZlNWExYjFmNjdmYjVmNGYzNjk4OTU1ZTNmNDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L0Rlcml2ZWRTb3VyY2VzLm1ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMu
bWFrZQpAQCAtMTE1MSw4ICsxMTUxLDE4IEBAIGlmZXEgKCQoZmluZHN0cmluZyBFTkFCTEVfV0VC
X1JFUExBWSwkKEZFQVRVUkVfREVGSU5FUykpLCBFTkFCTEVfV0VCX1JFUExBWSkKIGVuZGlmCiAK
IElOU1BFQ1RPUl9HRU5FUkFUT1JfU0NSSVBUUyA9IFwKLQkkKEluc3BlY3RvclNjcmlwdHMpL0Nv
ZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkgXAotCSQoSW5zcGVjdG9yU2NyaXB0cykvQ29kZUdlbmVy
YXRvckluc3BlY3RvclN0cmluZ3MucHkgXAorICAgICQoSW5zcGVjdG9yU2NyaXB0cykvZ2VuZXJh
dGVfYmFja2VuZF9jb21tYW5kcy5weSBcCisgICAgJChJbnNwZWN0b3JTY3JpcHRzKS9nZW5lcmF0
ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5IFwKKyAgICAkKEluc3BlY3RvclNjcmlwdHMp
L2dlbmVyYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSBcCisgICAgJChJ
bnNwZWN0b3JTY3JpcHRzKS9nZW5lcmF0ZV9mcm9udGVuZF9kaXNwYXRjaGVyX2hlYWRlci5weSBc
CisgICAgJChJbnNwZWN0b3JTY3JpcHRzKS9nZW5lcmF0ZV9mcm9udGVuZF9kaXNwYXRjaGVyX2lt
cGxlbWVudGF0aW9uLnB5IFwKKyAgICAkKEluc3BlY3RvclNjcmlwdHMpL2dlbmVyYXRlX3R5cGVf
YnVpbGRlcl9oZWFkZXIucHkgXAorICAgICQoSW5zcGVjdG9yU2NyaXB0cykvZ2VuZXJhdGVfdHlw
ZV9idWlsZGVyX2ltcGxlbWVudGF0aW9uLnB5IFwKKyAgICAkKEluc3BlY3RvclNjcmlwdHMpL2dl
bmVyYXRvcl90ZW1wbGF0ZXMucHkgXAorICAgICQoSW5zcGVjdG9yU2NyaXB0cykvZ2VuZXJhdG9y
LnB5IFwKKyAgICAkKEluc3BlY3RvclNjcmlwdHMpL2dlbmVyYXRlLWNvbWJpbmVkLWluc3BlY3Rv
ci1qc29uLnB5IFwKKyAgICAkKEluc3BlY3RvclNjcmlwdHMpL2dlbmVyYXRlLWluc3BlY3Rvci1w
cm90b2NvbC1iaW5kaW5ncy5weSBcCisgICAgJChJbnNwZWN0b3JTY3JpcHRzKS9tb2RlbHMucHkg
XAogIwogCiBhbGwgOiBJbnNwZWN0b3JXZWIuanNvbgpAQCAtMTE3MCw3ICsxMTgwLDcgQEAgSW5z
cGVjdG9yV2ViLmpzb24gOiAkKEluc3BlY3RvclNjcmlwdHMpL2dlbmVyYXRlLWNvbWJpbmVkLWlu
c3BlY3Rvci1qc29uLnB5ICQoSU4KIGFsbCA6IEluc3BlY3RvcldlYkZyb250ZW5kRGlzcGF0Y2hl
cnMuaAogCiBJbnNwZWN0b3JXZWJGcm9udGVuZERpc3BhdGNoZXJzLmggOiBJbnNwZWN0b3JXZWIu
anNvbiAkKEluc3BlY3RvclNjcmlwdHMpL0luc3BlY3RvckpTLmpzb24gJChJTlNQRUNUT1JfR0VO
RVJBVE9SX1NDUklQVFMpCi0JJChQWVRIT04pICQoSW5zcGVjdG9yU2NyaXB0cykvQ29kZUdlbmVy
YXRvckluc3BlY3Rvci5weSAuL0luc3BlY3RvcldlYi5qc29uICQoSW5zcGVjdG9yU2NyaXB0cykv
SW5zcGVjdG9ySlMuanNvbiAtLW91dHB1dF9oX2RpciAuIC0tb3V0cHV0X2NwcF9kaXIgLiAtLW91
dHB1dF9qc19kaXIgLiAtLW91dHB1dF90eXBlIFdlYgorCSQoUFlUSE9OKSAkKEluc3BlY3RvclNj
cmlwdHMpL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weSAtLWZyYW1ld29y
ayBXZWJDb3JlIC0tb3V0cHV0RGlyIC4gLi9JbnNwZWN0b3JXZWIuanNvbiAkKEluc3BlY3RvclNj
cmlwdHMpL0luc3BlY3RvckpTLmpzb24KIAogYWxsIDogSW5zcGVjdG9yT3ZlcmxheVBhZ2UuaAog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29tbWFuZExpbmVBUElIb3N0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db21tYW5kTGluZUFQSUhvc3QuY3BwCmlu
ZGV4IDU3YjkyMWFlZDljZDRhZDUzZTk1YjE0Y2IxYzkzNmQ2NGExMGU0ODEuLmI2OGI0Y2U5ZDI5
Yjc5MGEzMjljZjIyODRhMzZiNTY2Y2RiOTJjMGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9Db21tYW5kTGluZUFQSUhvc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9Db21tYW5kTGluZUFQSUhvc3QuY3BwCkBAIC05NSw3ICs5NSw3IEBAIHZvaWQgQ29t
bWFuZExpbmVBUElIb3N0OjpkaXNjb25uZWN0KCkKIHZvaWQgQ29tbWFuZExpbmVBUElIb3N0Ojpp
bnNwZWN0SW1wbChQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiBvYmplY3QsIFBhc3NSZWZQdHI8
SW5zcGVjdG9yVmFsdWU+IGhpbnRzKQogewogICAgIGlmIChtX2luc3BlY3RvckFnZW50KSB7Ci0g
ICAgICAgIFJlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpSdW50aW1lOjpSZW1vdGVPYmpl
Y3Q+IHJlbW90ZU9iamVjdCA9IEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OlJlbW90
ZU9iamVjdDo6cnVudGltZUNhc3Qob2JqZWN0KTsKKyAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6
VHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4gcmVtb3RlT2JqZWN0ID0gQmluZGlu
Z1RyYWl0czxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+Ojpy
dW50aW1lQ2FzdChvYmplY3QpOwogICAgICAgICBtX2luc3BlY3RvckFnZW50LT5pbnNwZWN0KHJl
bW90ZU9iamVjdCwgaGludHMtPmFzT2JqZWN0KCkpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwCmluZGV4IDMwNWE5OTU0ZGYxYTk3
ZjFjMGMwNzFkODRmNzQ5MTBhYTAwZDZmOGMuLjE2OWQzN2NiMmUyNzRlNjFlYjAxMmY0MjcxMTA5
ODliZTllMTQzMDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JDU1NBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNT
U0FnZW50LmNwcApAQCAtMTAwMCw5ICsxMDAwLDkgQEAgSW5zcGVjdG9yU3R5bGVTaGVldCogSW5z
cGVjdG9yQ1NTQWdlbnQ6OmFzc2VydFN0eWxlU2hlZXRGb3JJZChFcnJvclN0cmluZyogZXJyb3IK
ICAgICByZXR1cm4gaXQtPnZhbHVlLmdldCgpOwogfQogCi1JbnNwZWN0b3I6OlR5cGVCdWlsZGVy
OjpDU1M6OlN0eWxlU2hlZXRPcmlnaW46OkVudW0gSW5zcGVjdG9yQ1NTQWdlbnQ6OmRldGVjdE9y
aWdpbihDU1NTdHlsZVNoZWV0KiBwYWdlU3R5bGVTaGVldCwgRG9jdW1lbnQqIG93bmVyRG9jdW1l
bnQpCitJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW4gSW5zcGVj
dG9yQ1NTQWdlbnQ6OmRldGVjdE9yaWdpbihDU1NTdHlsZVNoZWV0KiBwYWdlU3R5bGVTaGVldCwg
RG9jdW1lbnQqIG93bmVyRG9jdW1lbnQpCiB7Ci0gICAgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6
Q1NTOjpTdHlsZVNoZWV0T3JpZ2luOjpFbnVtIG9yaWdpbiA9IEluc3BlY3Rvcjo6VHlwZUJ1aWxk
ZXI6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6UmVndWxhcjsKKyAgICBJbnNwZWN0b3I6OlR5cGVC
dWlsZGVyOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW4gb3JpZ2luID0gSW5zcGVjdG9yOjpUeXBlQnVp
bGRlcjo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luOjpSZWd1bGFyOwogICAgIGlmIChwYWdlU3R5bGVT
aGVldCAmJiAhcGFnZVN0eWxlU2hlZXQtPm93bmVyTm9kZSgpICYmIHBhZ2VTdHlsZVNoZWV0LT5o
cmVmKCkuaXNFbXB0eSgpKQogICAgICAgICBvcmlnaW4gPSBJbnNwZWN0b3I6OlR5cGVCdWlsZGVy
OjpDU1M6OlN0eWxlU2hlZXRPcmlnaW46OlVzZXJBZ2VudDsKICAgICBlbHNlIGlmIChwYWdlU3R5
bGVTaGVldCAmJiBwYWdlU3R5bGVTaGVldC0+b3duZXJOb2RlKCkgJiYgcGFnZVN0eWxlU2hlZXQt
Pm93bmVyTm9kZSgpLT5ub2RlTmFtZSgpID09ICIjZG9jdW1lbnQiKQpAQCAtMTEwNiw3ICsxMTA2
LDcgQEAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheTxJbnNwZWN0b3I6
OlR5cGVCdWlsZGVyOjpDU1M6OlJlZ2lvbj4+IEkKICAgICBSZWZQdHI8SW5zcGVjdG9yOjpUeXBl
QnVpbGRlcjo6QXJyYXk8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q1NTOjpSZWdpb24+PiByZWdp
b25zID0gSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk8SW5zcGVjdG9yOjpUeXBlQnVpbGRl
cjo6Q1NTOjpSZWdpb24+OjpjcmVhdGUoKTsKIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCByZWdpb25MaXN0LT5sZW5ndGgoKTsgKytpKSB7Ci0gICAgICAgIEluc3BlY3Rvcjo6VHlwZUJ1
aWxkZXI6OkNTUzo6UmVnaW9uOjpSZWdpb25PdmVyc2V0OjpFbnVtIHJlZ2lvbk92ZXJzZXQ7Cisg
ICAgICAgIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNTUzo6UmVnaW9uOjpSZWdpb25PdmVyc2V0
IHJlZ2lvbk92ZXJzZXQ7CiAKICAgICAgICAgc3dpdGNoICh0b0VsZW1lbnQocmVnaW9uTGlzdC0+
aXRlbShpKSktPnJlZ2lvbk92ZXJzZXRTdGF0ZSgpKSB7CiAgICAgICAgIGNhc2UgUmVnaW9uRml0
OgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50
LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuaAppbmRleCAz
NjUyMzdmMDM2YTZjZjZiYmUxYTVmNTMzNzRiNzVjZTUyNjA3OGYyLi4xNzU1ZDcyMGMzMTVlMmVk
OGMxZGE2MDRmMjA1ZjZiYmRlOWQwMTVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yQ1NTQWdlbnQuaApAQCAtMTQ5LDcgKzE0OSw3IEBAIHByaXZhdGU6CiAgICAgSW5z
cGVjdG9yU3R5bGVTaGVldCogYmluZFN0eWxlU2hlZXQoQ1NTU3R5bGVTaGVldCopOwogICAgIElu
c3BlY3RvclN0eWxlU2hlZXQqIHZpYUluc3BlY3RvclN0eWxlU2hlZXQoRG9jdW1lbnQqLCBib29s
IGNyZWF0ZUlmQWJzZW50KTsKICAgICBJbnNwZWN0b3JTdHlsZVNoZWV0KiBhc3NlcnRTdHlsZVNo
ZWV0Rm9ySWQoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmKTsKLSAgICBJbnNwZWN0b3I6OlR5
cGVCdWlsZGVyOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW46OkVudW0gZGV0ZWN0T3JpZ2luKENTU1N0
eWxlU2hlZXQqIHBhZ2VTdHlsZVNoZWV0LCBEb2N1bWVudCogb3duZXJEb2N1bWVudCk7CisgICAg
SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luIGRldGVjdE9yaWdp
bihDU1NTdHlsZVNoZWV0KiBwYWdlU3R5bGVTaGVldCwgRG9jdW1lbnQqIG93bmVyRG9jdW1lbnQp
OwogCiAgICAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDU1M6OkNTU1J1bGU+
IGJ1aWxkT2JqZWN0Rm9yUnVsZShTdHlsZVJ1bGUqLCBTdHlsZVJlc29sdmVyJik7CiAgICAgUGFz
c1JlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDU1M6OkNTU1J1bGU+IGJ1aWxkT2JqZWN0
Rm9yUnVsZShDU1NTdHlsZVJ1bGUqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yRE9NQWdlbnQuY3BwCmluZGV4IGFmZWVlOTQzNzE0M2ViYTgyYTExZGFjODFjYjhkZWJh
NWE3MGU1NGEuLmIyY2I0YzY0MGQ2NWVmNTQzNTgzNmZmZjU3ZTNlNDNjNzA3ZjYxYzcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcApAQCAtMTQ0
NSw3ICsxNDQ1LDcgQEAgUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6RE9NOjpBY2Nlc3NpYmlsaXR5
UHJvcGVydGllcz4gSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkT2IKIAogICAgIE5vZGUqIGFjdGl2
ZURlc2NlbmRhbnROb2RlID0gbnVsbHB0cjsKICAgICBib29sIGJ1c3kgPSBmYWxzZTsKLSAgICBU
eXBlQnVpbGRlcjo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6Q2hlY2tlZDo6RW51bSBj
aGVja2VkID0gVHlwZUJ1aWxkZXI6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6OkNoZWNr
ZWQ6OkZhbHNlOworICAgIFR5cGVCdWlsZGVyOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVz
OjpDaGVja2VkIGNoZWNrZWQgPSBUeXBlQnVpbGRlcjo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVy
dGllczo6Q2hlY2tlZDo6RmFsc2U7CiAgICAgUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6
OkFycmF5PGludD4+IGNoaWxkTm9kZUlkczsKICAgICBSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVp
bGRlcjo6QXJyYXk8aW50Pj4gY29udHJvbGxlZE5vZGVJZHM7CiAgICAgYm9vbCBleGlzdHMgPSBm
YWxzZTsKQEAgLTE0NTUsMTIgKzE0NTUsMTIgQEAgUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6RE9N
OjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllcz4gSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkT2IKICAg
ICBib29sIGZvY3VzZWQgPSBmYWxzZTsKICAgICBib29sIGlnbm9yZWQgPSB0cnVlOwogICAgIGJv
b2wgaWdub3JlZEJ5RGVmYXVsdCA9IGZhbHNlOwotICAgIFR5cGVCdWlsZGVyOjpET006OkFjY2Vz
c2liaWxpdHlQcm9wZXJ0aWVzOjpJbnZhbGlkOjpFbnVtIGludmFsaWQgPSBUeXBlQnVpbGRlcjo6
RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6SW52YWxpZDo6RmFsc2U7CisgICAgVHlwZUJ1
aWxkZXI6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6OkludmFsaWQgaW52YWxpZCA9IFR5
cGVCdWlsZGVyOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpJbnZhbGlkOjpGYWxzZTsK
ICAgICBib29sIGhpZGRlbiA9IGZhbHNlOwogICAgIFN0cmluZyBsYWJlbDsKICAgICBib29sIGxp
dmVSZWdpb25BdG9taWMgPSBmYWxzZTsKICAgICBSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRl
cjo6QXJyYXk8U3RyaW5nPj4gbGl2ZVJlZ2lvblJlbGV2YW50OwotICAgIFR5cGVCdWlsZGVyOjpE
T006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpMaXZlUmVnaW9uU3RhdHVzOjpFbnVtIGxpdmVS
ZWdpb25TdGF0dXMgPSBUeXBlQnVpbGRlcjo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6
TGl2ZVJlZ2lvblN0YXR1czo6T2ZmOworICAgIFR5cGVCdWlsZGVyOjpET006OkFjY2Vzc2liaWxp
dHlQcm9wZXJ0aWVzOjpMaXZlUmVnaW9uU3RhdHVzIGxpdmVSZWdpb25TdGF0dXMgPSBUeXBlQnVp
bGRlcjo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6TGl2ZVJlZ2lvblN0YXR1czo6T2Zm
OwogICAgIE5vZGUqIG1vdXNlRXZlbnROb2RlID0gbnVsbHB0cjsKICAgICBSZWZQdHI8SW5zcGVj
dG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk8aW50Pj4gb3duZWROb2RlSWRzOwogICAgIE5vZGUqIHBh
cmVudE5vZGUgPSBudWxscHRyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvclBhZ2VBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yUGFnZUFnZW50LmNwcAppbmRleCA0NWJmMGVlZTg0NmY3NzA5ZWQ0MmUyNzRmZDExN2Y5NjQ4
MjQxOGRlLi4yOGJiOTE5N2Y3YzBmMDExYzA4YzllMTRmOWZjYTA2ODYyYTg0YjE3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcApAQCAtMjg3
LDcgKzI4Nyw3IEBAIENhY2hlZFJlc291cmNlKiBJbnNwZWN0b3JQYWdlQWdlbnQ6OmNhY2hlZFJl
c291cmNlKEZyYW1lKiBmcmFtZSwgY29uc3QgVVJMJiB1cmwpCiAgICAgcmV0dXJuIGNhY2hlZFJl
c291cmNlOwogfQogCi1JbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpQYWdlOjpSZXNvdXJjZVR5cGU6
OkVudW0gSW5zcGVjdG9yUGFnZUFnZW50OjpyZXNvdXJjZVR5cGVKc29uKEluc3BlY3RvclBhZ2VB
Z2VudDo6UmVzb3VyY2VUeXBlIHJlc291cmNlVHlwZSkKK0luc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6
OlBhZ2U6OlJlc291cmNlVHlwZSBJbnNwZWN0b3JQYWdlQWdlbnQ6OnJlc291cmNlVHlwZUpzb24o
SW5zcGVjdG9yUGFnZUFnZW50OjpSZXNvdXJjZVR5cGUgcmVzb3VyY2VUeXBlKQogewogICAgIHN3
aXRjaCAocmVzb3VyY2VUeXBlKSB7CiAgICAgY2FzZSBEb2N1bWVudFJlc291cmNlOgpAQCAtMzM1
LDcgKzMzNSw3IEBAIEluc3BlY3RvclBhZ2VBZ2VudDo6UmVzb3VyY2VUeXBlIEluc3BlY3RvclBh
Z2VBZ2VudDo6Y2FjaGVkUmVzb3VyY2VUeXBlKGNvbnN0IENhCiAgICAgcmV0dXJuIEluc3BlY3Rv
clBhZ2VBZ2VudDo6T3RoZXJSZXNvdXJjZTsKIH0KIAotSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6
UGFnZTo6UmVzb3VyY2VUeXBlOjpFbnVtIEluc3BlY3RvclBhZ2VBZ2VudDo6Y2FjaGVkUmVzb3Vy
Y2VUeXBlSnNvbihjb25zdCBDYWNoZWRSZXNvdXJjZSYgY2FjaGVkUmVzb3VyY2UpCitJbnNwZWN0
b3I6OlR5cGVCdWlsZGVyOjpQYWdlOjpSZXNvdXJjZVR5cGUgSW5zcGVjdG9yUGFnZUFnZW50Ojpj
YWNoZWRSZXNvdXJjZVR5cGVKc29uKGNvbnN0IENhY2hlZFJlc291cmNlJiBjYWNoZWRSZXNvdXJj
ZSkKIHsKICAgICByZXR1cm4gcmVzb3VyY2VUeXBlSnNvbihjYWNoZWRSZXNvdXJjZVR5cGUoY2Fj
aGVkUmVzb3VyY2UpKTsKIH0KQEAgLTcwNiw3ICs3MDYsNyBAQCB2b2lkIEluc3BlY3RvclBhZ2VB
Z2VudDo6c2V0Q29udGludW91c1BhaW50aW5nRW5hYmxlZChFcnJvclN0cmluZyosIGJvb2wgZW5h
YmxlZAogICAgICAgICBtYWluRnJhbWUoKS0+dmlldygpLT5pbnZhbGlkYXRlKCk7CiB9CiAKLXZv
aWQgSW5zcGVjdG9yUGFnZUFnZW50OjpnZXRTY3JpcHRFeGVjdXRpb25TdGF0dXMoRXJyb3JTdHJp
bmcqLCBJbnNwZWN0b3JQYWdlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpSZXN1bHQ6OkVudW0q
IHN0YXR1cykKK3ZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpnZXRTY3JpcHRFeGVjdXRpb25TdGF0
dXMoRXJyb3JTdHJpbmcqLCBJbnNwZWN0b3JQYWdlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpS
ZXN1bHQqIHN0YXR1cykKIHsKICAgICBib29sIGRpc2FibGVkQnlTY3JpcHRDb250cm9sbGVyID0g
ZmFsc2U7CiAgICAgYm9vbCBkaXNhYmxlZEluU2V0dGluZ3MgPSBmYWxzZTsKQEAgLTk2MywxMyAr
OTYzLDEzIEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UGFnZTo6RnJhbWU+
IEluc3BlY3RvclBhZ2VBZ2VudDo6YnVpbGRPYmplY3RGCiBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6
VHlwZUJ1aWxkZXI6OlBhZ2U6OkZyYW1lUmVzb3VyY2VUcmVlPiBJbnNwZWN0b3JQYWdlQWdlbnQ6
OmJ1aWxkT2JqZWN0Rm9yRnJhbWVUcmVlKEZyYW1lKiBmcmFtZSkKIHsKICAgICBSZWZQdHI8SW5z
cGVjdG9yOjpUeXBlQnVpbGRlcjo6UGFnZTo6RnJhbWU+IGZyYW1lT2JqZWN0ID0gYnVpbGRPYmpl
Y3RGb3JGcmFtZShmcmFtZSk7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFy
cmF5PEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlBhZ2U6OkZyYW1lUmVzb3VyY2VUcmVlOjpSZXNv
dXJjZXM+PiBzdWJyZXNvdXJjZXMgPSBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheTxJbnNw
ZWN0b3I6OlR5cGVCdWlsZGVyOjpQYWdlOjpGcmFtZVJlc291cmNlVHJlZTo6UmVzb3VyY2VzPjo6
Y3JlYXRlKCk7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5PEluc3Bl
Y3Rvcjo6VHlwZUJ1aWxkZXI6OlBhZ2U6OkZyYW1lUmVzb3VyY2U+PiBzdWJyZXNvdXJjZXMgPSBJ
bnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheTxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpQYWdl
OjpGcmFtZVJlc291cmNlPjo6Y3JlYXRlKCk7CiAgICAgUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1
aWxkZXI6OlBhZ2U6OkZyYW1lUmVzb3VyY2VUcmVlPiByZXN1bHQgPSBJbnNwZWN0b3I6OlR5cGVC
dWlsZGVyOjpQYWdlOjpGcmFtZVJlc291cmNlVHJlZTo6Y3JlYXRlKCkKICAgICAgICAgIC5zZXRG
cmFtZShmcmFtZU9iamVjdCkKICAgICAgICAgIC5zZXRSZXNvdXJjZXMoc3VicmVzb3VyY2VzKTsK
IAogICAgIGZvciAoYXV0byogY2FjaGVkUmVzb3VyY2UgOiBjYWNoZWRSZXNvdXJjZXNGb3JGcmFt
ZShmcmFtZSkpIHsKLSAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlBhZ2U6
OkZyYW1lUmVzb3VyY2VUcmVlOjpSZXNvdXJjZXM+IHJlc291cmNlT2JqZWN0ID0gSW5zcGVjdG9y
OjpUeXBlQnVpbGRlcjo6UGFnZTo6RnJhbWVSZXNvdXJjZVRyZWU6OlJlc291cmNlczo6Y3JlYXRl
KCkKKyAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlBhZ2U6OkZyYW1lUmVz
b3VyY2U+IHJlc291cmNlT2JqZWN0ID0gSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UGFnZTo6RnJh
bWVSZXNvdXJjZTo6Y3JlYXRlKCkKICAgICAgICAgICAgIC5zZXRVcmwoY2FjaGVkUmVzb3VyY2Ut
PnVybCgpKQogICAgICAgICAgICAgLnNldFR5cGUoY2FjaGVkUmVzb3VyY2VUeXBlSnNvbigqY2Fj
aGVkUmVzb3VyY2UpKQogICAgICAgICAgICAgLnNldE1pbWVUeXBlKGNhY2hlZFJlc291cmNlLT5y
ZXNwb25zZSgpLm1pbWVUeXBlKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvclBhZ2VBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvclBhZ2VBZ2VudC5oCmluZGV4IGNhNGZmMmYwMDNjZWJhOTgxNjhkMDc3OTkzMzRjNWZiZDVj
OWEzMTEuLjlmODdkMjI5ZDQzNjcwOTZmMjg2MDM4MWVmMjNkM2IyMjUzMTk0YjQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmgKQEAgLTkwLDkgKzkw
LDkgQEAgcHVibGljOgogCiAgICAgc3RhdGljIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiByZXNv
dXJjZURhdGEoRnJhbWUqLCBjb25zdCBVUkwmLCBTdHJpbmcqIHRleHRFbmNvZGluZ05hbWUpOwog
ICAgIHN0YXRpYyBDYWNoZWRSZXNvdXJjZSogY2FjaGVkUmVzb3VyY2UoRnJhbWUqLCBjb25zdCBV
UkwmKTsKLSAgICBzdGF0aWMgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UGFnZTo6UmVzb3VyY2VU
eXBlOjpFbnVtIHJlc291cmNlVHlwZUpzb24oUmVzb3VyY2VUeXBlKTsKKyAgICBzdGF0aWMgSW5z
cGVjdG9yOjpUeXBlQnVpbGRlcjo6UGFnZTo6UmVzb3VyY2VUeXBlIHJlc291cmNlVHlwZUpzb24o
UmVzb3VyY2VUeXBlKTsKICAgICBzdGF0aWMgUmVzb3VyY2VUeXBlIGNhY2hlZFJlc291cmNlVHlw
ZShjb25zdCBDYWNoZWRSZXNvdXJjZSYpOwotICAgIHN0YXRpYyBJbnNwZWN0b3I6OlR5cGVCdWls
ZGVyOjpQYWdlOjpSZXNvdXJjZVR5cGU6OkVudW0gY2FjaGVkUmVzb3VyY2VUeXBlSnNvbihjb25z
dCBDYWNoZWRSZXNvdXJjZSYpOworICAgIHN0YXRpYyBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpQ
YWdlOjpSZXNvdXJjZVR5cGUgY2FjaGVkUmVzb3VyY2VUeXBlSnNvbihjb25zdCBDYWNoZWRSZXNv
dXJjZSYpOwogCiAgICAgLy8gUGFnZSBBUEkgZm9yIEluc3BlY3RvckZyb250ZW5kCiAgICAgdmly
dHVhbCB2b2lkIGVuYWJsZShFcnJvclN0cmluZyopIG92ZXJyaWRlOwpAQCAtMTE1LDcgKzExNSw3
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0U2hvd0ZQU0NvdW50ZXIoRXJyb3JTdHJp
bmcqLCBib29sIHNob3cpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBjYW5Db250aW51b3Vz
bHlQYWludChFcnJvclN0cmluZyosIGJvb2wqKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQg
c2V0Q29udGludW91c1BhaW50aW5nRW5hYmxlZChFcnJvclN0cmluZyosIGJvb2wgZW5hYmxlZCkg
b3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGdldFNjcmlwdEV4ZWN1dGlvblN0YXR1cyhFcnJv
clN0cmluZyosIEluc3BlY3Rvcjo6SW5zcGVjdG9yUGFnZUJhY2tlbmREaXNwYXRjaGVySGFuZGxl
cjo6UmVzdWx0OjpFbnVtKikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGdldFNjcmlwdEV4
ZWN1dGlvblN0YXR1cyhFcnJvclN0cmluZyosIEluc3BlY3Rvcjo6SW5zcGVjdG9yUGFnZUJhY2tl
bmREaXNwYXRjaGVySGFuZGxlcjo6UmVzdWx0Kikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lk
IHNldFNjcmlwdEV4ZWN1dGlvbkRpc2FibGVkKEVycm9yU3RyaW5nKiwgYm9vbCkgb3ZlcnJpZGU7
CiAgICAgdmlydHVhbCB2b2lkIHNldFRvdWNoRW11bGF0aW9uRW5hYmxlZChFcnJvclN0cmluZyos
IGJvb2wpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBzZXRFbXVsYXRlZE1lZGlhKEVycm9y
U3RyaW5nKiwgY29uc3QgU3RyaW5nJikgb3ZlcnJpZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVwbGF5QWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvclJlcGxheUFnZW50LmNwcAppbmRleCBkZjA4MThlODdmMGE3NDAw
YjBhNjFlMzE3YzQyMGQ3ZjkwNTBhNjE2Li5mNDgwYzU0MDczYzAwMjc1NDRlZmE0OGM5ZmFiNWUx
YzE0ZGEyZjRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
UmVwbGF5QWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JS
ZXBsYXlBZ2VudC5jcHAKQEAgLTkwLDIyICs5MCwyMiBAQCBzdGF0aWMgUGFzc1JlZlB0cjxUeXBl
QnVpbGRlcjo6UmVwbGF5OjpSZXBsYXlTZXNzaW9uPiBidWlsZEluc3BlY3Rvck9iamVjdEZvclNl
cwogICAgIHJldHVybiBzZXNzaW9uT2JqZWN0LnJlbGVhc2UoKTsKIH0KIAotc3RhdGljIEluc3Bl
Y3Rvcjo6VHlwZUJ1aWxkZXI6OlJlcGxheTo6U2Vzc2lvblN0YXRlOjpFbnVtIGJ1aWxkSW5zcGVj
dG9yT2JqZWN0Rm9yU2Vzc2lvblN0YXRlKFNlc3Npb25TdGF0ZSBzZXNzaW9uU3RhdGUpCitzdGF0
aWMgVHlwZUJ1aWxkZXI6OlJlcGxheTo6U2Vzc2lvblN0YXRlIGJ1aWxkSW5zcGVjdG9yT2JqZWN0
Rm9yU2Vzc2lvblN0YXRlKFdlYkNvcmU6OlNlc3Npb25TdGF0ZSBzZXNzaW9uU3RhdGUpCiB7CiAg
ICAgc3dpdGNoIChzZXNzaW9uU3RhdGUpIHsKLSAgICBjYXNlIFNlc3Npb25TdGF0ZTo6Q2FwdHVy
aW5nOiByZXR1cm4gSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UmVwbGF5OjpTZXNzaW9uU3RhdGU6
OkNhcHR1cmluZzsKLSAgICBjYXNlIFNlc3Npb25TdGF0ZTo6SW5hY3RpdmU6IHJldHVybiBJbnNw
ZWN0b3I6OlR5cGVCdWlsZGVyOjpSZXBsYXk6OlNlc3Npb25TdGF0ZTo6SW5hY3RpdmU7Ci0gICAg
Y2FzZSBTZXNzaW9uU3RhdGU6OlJlcGxheWluZzogcmV0dXJuIEluc3BlY3Rvcjo6VHlwZUJ1aWxk
ZXI6OlJlcGxheTo6U2Vzc2lvblN0YXRlOjpSZXBsYXlpbmc7CisgICAgY2FzZSBXZWJDb3JlOjpT
ZXNzaW9uU3RhdGU6OkNhcHR1cmluZzogcmV0dXJuIFR5cGVCdWlsZGVyOjpSZXBsYXk6OlNlc3Np
b25TdGF0ZTo6Q2FwdHVyaW5nOworICAgIGNhc2UgV2ViQ29yZTo6U2Vzc2lvblN0YXRlOjpJbmFj
dGl2ZTogcmV0dXJuIFR5cGVCdWlsZGVyOjpSZXBsYXk6OlNlc3Npb25TdGF0ZTo6SW5hY3RpdmU7
CisgICAgY2FzZSBXZWJDb3JlOjpTZXNzaW9uU3RhdGU6OlJlcGxheWluZzogcmV0dXJuIFR5cGVC
dWlsZGVyOjpSZXBsYXk6OlNlc3Npb25TdGF0ZTo6UmVwbGF5aW5nOwogICAgIH0KIH0KIAotc3Rh
dGljIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlJlcGxheTo6U2VnbWVudFN0YXRlOjpFbnVtIGJ1
aWxkSW5zcGVjdG9yT2JqZWN0Rm9yU2VnbWVudFN0YXRlKFNlZ21lbnRTdGF0ZSBzZWdtZW50U3Rh
dGUpCitzdGF0aWMgVHlwZUJ1aWxkZXI6OlJlcGxheTo6U2VnbWVudFN0YXRlIGJ1aWxkSW5zcGVj
dG9yT2JqZWN0Rm9yU2VnbWVudFN0YXRlKFdlYkNvcmU6OlNlZ21lbnRTdGF0ZSBzZWdtZW50U3Rh
dGUpCiB7CiAgICAgc3dpdGNoIChzZWdtZW50U3RhdGUpIHsKLSAgICBjYXNlIFNlZ21lbnRTdGF0
ZTo6QXBwZW5kaW5nOiByZXR1cm4gSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UmVwbGF5OjpTZWdt
ZW50U3RhdGU6OkFwcGVuZGluZzsKLSAgICBjYXNlIFNlZ21lbnRTdGF0ZTo6VW5sb2FkZWQ6IHJl
dHVybiBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpSZXBsYXk6OlNlZ21lbnRTdGF0ZTo6VW5sb2Fk
ZWQ7Ci0gICAgY2FzZSBTZWdtZW50U3RhdGU6OkxvYWRlZDogcmV0dXJuIEluc3BlY3Rvcjo6VHlw
ZUJ1aWxkZXI6OlJlcGxheTo6U2VnbWVudFN0YXRlOjpMb2FkZWQ7Ci0gICAgY2FzZSBTZWdtZW50
U3RhdGU6OkRpc3BhdGNoaW5nOiByZXR1cm4gSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UmVwbGF5
OjpTZWdtZW50U3RhdGU6OkRpc3BhdGNoaW5nOworICAgIGNhc2UgV2ViQ29yZTo6U2VnbWVudFN0
YXRlOjpBcHBlbmRpbmc6IHJldHVybiBUeXBlQnVpbGRlcjo6UmVwbGF5OjpTZWdtZW50U3RhdGU6
OkFwcGVuZGluZzsKKyAgICBjYXNlIFdlYkNvcmU6OlNlZ21lbnRTdGF0ZTo6VW5sb2FkZWQ6IHJl
dHVybiBUeXBlQnVpbGRlcjo6UmVwbGF5OjpTZWdtZW50U3RhdGU6OlVubG9hZGVkOworICAgIGNh
c2UgV2ViQ29yZTo6U2VnbWVudFN0YXRlOjpMb2FkZWQ6IHJldHVybiBUeXBlQnVpbGRlcjo6UmVw
bGF5OjpTZWdtZW50U3RhdGU6OkxvYWRlZDsKKyAgICBjYXNlIFdlYkNvcmU6OlNlZ21lbnRTdGF0
ZTo6RGlzcGF0Y2hpbmc6IHJldHVybiBUeXBlQnVpbGRlcjo6UmVwbGF5OjpTZWdtZW50U3RhdGU6
OkRpc3BhdGNoaW5nOwogICAgIH0KIH0KIApAQCAtMTY4LDcgKzE2OCw3IEBAIEluc3BlY3RvclJl
cGxheUFnZW50Ojp+SW5zcGVjdG9yUmVwbGF5QWdlbnQoKQogICAgIEFTU0VSVCghbV9zZWdtZW50
c01hcC5zaXplKCkpOwogfQogCi1TZXNzaW9uU3RhdGUgSW5zcGVjdG9yUmVwbGF5QWdlbnQ6OnNl
c3Npb25TdGF0ZSgpIGNvbnN0CitXZWJDb3JlOjpTZXNzaW9uU3RhdGUgSW5zcGVjdG9yUmVwbGF5
QWdlbnQ6OnNlc3Npb25TdGF0ZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fcGFnZS5yZXBsYXlD
b250cm9sbGVyKCkuc2Vzc2lvblN0YXRlKCk7CiB9CkBAIC0xNzksNyArMTc5LDcgQEAgdm9pZCBJ
bnNwZWN0b3JSZXBsYXlBZ2VudDo6ZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbCoKICAgICBtX2JhY2tlbmREaXNwYXRjaGVyID0gSW5zcGVjdG9yUmVw
bGF5QmFja2VuZERpc3BhdGNoZXI6OmNyZWF0ZShiYWNrZW5kRGlzcGF0Y2hlciwgdGhpcyk7CiAK
ICAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMtPnNldEluc3BlY3RvclJlcGxheUFnZW50KHRoaXMp
OwotICAgIEFTU0VSVChzZXNzaW9uU3RhdGUoKSA9PSBTZXNzaW9uU3RhdGU6OkluYWN0aXZlKTsK
KyAgICBBU1NFUlQoc2Vzc2lvblN0YXRlKCkgPT0gV2ViQ29yZTo6U2Vzc2lvblN0YXRlOjpJbmFj
dGl2ZSk7CiAKICAgICAvLyBLZWVwIHRyYWNrIG9mIHRoZSAoZGVmYXVsdCkgc2Vzc2lvbiBjdXJy
ZW50bHkgbG9hZGVkIGJ5IFJlcGxheUNvbnRyb2xsZXIsCiAgICAgLy8gYW5kIGFueSBzZWdtZW50
cyB3aXRoaW4gdGhlIHNlc3Npb24uCkBAIC0yMDQsMTkgKzIwNCwxOSBAQCB2b2lkIEluc3BlY3Rv
clJlcGxheUFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3JEaXNj
b25uZWN0UmVhcwogCiB2b2lkIEluc3BlY3RvclJlcGxheUFnZW50OjpmcmFtZU5hdmlnYXRlZChE
b2N1bWVudExvYWRlciogbG9hZGVyKQogewotICAgIGlmIChzZXNzaW9uU3RhdGUoKSAhPSBTZXNz
aW9uU3RhdGU6OkluYWN0aXZlKQorICAgIGlmIChzZXNzaW9uU3RhdGUoKSAhPSBXZWJDb3JlOjpT
ZXNzaW9uU3RhdGU6OkluYWN0aXZlKQogICAgICAgICBtX3BhZ2UucmVwbGF5Q29udHJvbGxlcigp
LmZyYW1lTmF2aWdhdGVkKGxvYWRlcik7CiB9CiAKIHZvaWQgSW5zcGVjdG9yUmVwbGF5QWdlbnQ6
OmZyYW1lRGV0YWNoZWQoRnJhbWUqIGZyYW1lKQogewotICAgIGlmIChzZXNzaW9uU3RhdGUoKSAh
PSBTZXNzaW9uU3RhdGU6OkluYWN0aXZlKQorICAgIGlmIChzZXNzaW9uU3RhdGUoKSAhPSBXZWJD
b3JlOjpTZXNzaW9uU3RhdGU6OkluYWN0aXZlKQogICAgICAgICBtX3BhZ2UucmVwbGF5Q29udHJv
bGxlcigpLmZyYW1lRGV0YWNoZWQoZnJhbWUpOwogfQogCiB2b2lkIEluc3BlY3RvclJlcGxheUFn
ZW50Ojp3aWxsRGlzcGF0Y2hFdmVudChjb25zdCBFdmVudCYgZXZlbnQsIEZyYW1lKiBmcmFtZSkK
IHsKLSAgICBpZiAoc2Vzc2lvblN0YXRlKCkgIT0gU2Vzc2lvblN0YXRlOjpJbmFjdGl2ZSkKKyAg
ICBpZiAoc2Vzc2lvblN0YXRlKCkgIT0gV2ViQ29yZTo6U2Vzc2lvblN0YXRlOjpJbmFjdGl2ZSkK
ICAgICAgICAgbV9wYWdlLnJlcGxheUNvbnRyb2xsZXIoKS53aWxsRGlzcGF0Y2hFdmVudChldmVu
dCwgZnJhbWUpOwogfQogCkBAIC0zMTksNyArMzE5LDcgQEAgdm9pZCBJbnNwZWN0b3JSZXBsYXlB
Z2VudDo6cGxheWJhY2tGaW5pc2hlZCgpCiAKIHZvaWQgSW5zcGVjdG9yUmVwbGF5QWdlbnQ6OnN0
YXJ0Q2FwdHVyaW5nKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZykKIHsKLSAgICBpZiAoc2Vzc2lv
blN0YXRlKCkgIT0gU2Vzc2lvblN0YXRlOjpJbmFjdGl2ZSkgeworICAgIGlmIChzZXNzaW9uU3Rh
dGUoKSAhPSBXZWJDb3JlOjpTZXNzaW9uU3RhdGU6OkluYWN0aXZlKSB7CiAgICAgICAgICplcnJv
clN0cmluZyA9IEFTQ0lJTGl0ZXJhbCgiQ2FuJ3Qgc3RhcnQgY2FwdHVyaW5nIGlmIHRoZSBzZXNz
aW9uIGlzIGFscmVhZHkgY2FwdHVyaW5nIG9yIHJlcGxheWluZy4iKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KQEAgLTMyOSw3ICszMjksNyBAQCB2b2lkIEluc3BlY3RvclJlcGxheUFnZW50Ojpz
dGFydENhcHR1cmluZyhFcnJvclN0cmluZyogZXJyb3JTdHJpbmcpCiAKIHZvaWQgSW5zcGVjdG9y
UmVwbGF5QWdlbnQ6OnN0b3BDYXB0dXJpbmcoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nKQogewot
ICAgIGlmIChzZXNzaW9uU3RhdGUoKSAhPSBTZXNzaW9uU3RhdGU6OkNhcHR1cmluZykgeworICAg
IGlmIChzZXNzaW9uU3RhdGUoKSAhPSBXZWJDb3JlOjpTZXNzaW9uU3RhdGU6OkNhcHR1cmluZykg
ewogICAgICAgICAqZXJyb3JTdHJpbmcgPSBBU0NJSUxpdGVyYWwoIkNhbid0IHN0b3AgY2FwdHVy
aW5nIGlmIGNhcHR1cmUgaXMgbm90IGluIHByb2dyZXNzLiIpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQpAQCAtMzUwLDcgKzM1MCw3IEBAIHZvaWQgSW5zcGVjdG9yUmVwbGF5QWdlbnQ6OnJlcGxh
eVRvUG9zaXRpb24oRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBjb25zdCBSZWZQCiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoc2Vzc2lvblN0YXRlKCkgPT0gU2Vzc2lvblN0YXRl
OjpDYXB0dXJpbmcpIHsKKyAgICBpZiAoc2Vzc2lvblN0YXRlKCkgPT0gV2ViQ29yZTo6U2Vzc2lv
blN0YXRlOjpDYXB0dXJpbmcpIHsKICAgICAgICAgKmVycm9yU3RyaW5nID0gQVNDSUlMaXRlcmFs
KCJDYW4ndCBzdGFydCByZXBsYXkgd2hpbGUgY2FwdHVyZSBpcyBpbiBwcm9ncmVzcy4iKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTM2MCw3ICszNjAsNyBAQCB2b2lkIEluc3BlY3RvclJl
cGxheUFnZW50OjpyZXBsYXlUb1Bvc2l0aW9uKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgY29u
c3QgUmVmUAogCiB2b2lkIEluc3BlY3RvclJlcGxheUFnZW50OjpyZXBsYXlUb0NvbXBsZXRpb24o
RXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBib29sIGZhc3RSZXBsYXkpCiB7Ci0gICAgaWYgKHNl
c3Npb25TdGF0ZSgpID09IFNlc3Npb25TdGF0ZTo6Q2FwdHVyaW5nKSB7CisgICAgaWYgKHNlc3Np
b25TdGF0ZSgpID09IFdlYkNvcmU6OlNlc3Npb25TdGF0ZTo6Q2FwdHVyaW5nKSB7CiAgICAgICAg
ICplcnJvclN0cmluZyA9IEFTQ0lJTGl0ZXJhbCgiQ2FuJ3Qgc3RhcnQgcmVwbGF5IHdoaWxlIGNh
cHR1cmUgaXMgaW4gcHJvZ3Jlc3MuIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zNzAs
NyArMzcwLDcgQEAgdm9pZCBJbnNwZWN0b3JSZXBsYXlBZ2VudDo6cmVwbGF5VG9Db21wbGV0aW9u
KEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgYm9vbCBmYXMKIAogdm9pZCBJbnNwZWN0b3JSZXBs
YXlBZ2VudDo6cGF1c2VQbGF5YmFjayhFcnJvclN0cmluZyogZXJyb3JTdHJpbmcpCiB7Ci0gICAg
aWYgKHNlc3Npb25TdGF0ZSgpICE9IFNlc3Npb25TdGF0ZTo6UmVwbGF5aW5nKSB7CisgICAgaWYg
KHNlc3Npb25TdGF0ZSgpICE9IFdlYkNvcmU6OlNlc3Npb25TdGF0ZTo6UmVwbGF5aW5nKSB7CiAg
ICAgICAgICplcnJvclN0cmluZyA9IEFTQ0lJTGl0ZXJhbCgiQ2FuJ3QgcGF1c2UgcGxheWJhY2sg
aWYgcGxheWJhY2sgaXMgbm90IGluIHByb2dyZXNzLiIpOwogICAgICAgICByZXR1cm47CiAgICAg
fQpAQCAtMzgwLDcgKzM4MCw3IEBAIHZvaWQgSW5zcGVjdG9yUmVwbGF5QWdlbnQ6OnBhdXNlUGxh
eWJhY2soRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nKQogCiB2b2lkIEluc3BlY3RvclJlcGxheUFn
ZW50OjpjYW5jZWxQbGF5YmFjayhFcnJvclN0cmluZyogZXJyb3JTdHJpbmcpCiB7Ci0gICAgaWYg
KHNlc3Npb25TdGF0ZSgpID09IFNlc3Npb25TdGF0ZTo6Q2FwdHVyaW5nKSB7CisgICAgaWYgKHNl
c3Npb25TdGF0ZSgpID09IFdlYkNvcmU6OlNlc3Npb25TdGF0ZTo6Q2FwdHVyaW5nKSB7CiAgICAg
ICAgICplcnJvclN0cmluZyA9IEFTQ0lJTGl0ZXJhbCgiQ2FuJ3QgY2FuY2VsIHBsYXliYWNrIGlm
IGNhcHR1cmUgaXMgaW4gcHJvZ3Jlc3MuIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0z
ODgsMTEgKzM4OCwxMSBAQCB2b2lkIEluc3BlY3RvclJlcGxheUFnZW50OjpjYW5jZWxQbGF5YmFj
ayhFcnJvclN0cmluZyogZXJyb3JTdHJpbmcpCiAgICAgbV9wYWdlLnJlcGxheUNvbnRyb2xsZXIo
KS5jYW5jZWxQbGF5YmFjaygpOwogfQogCi12b2lkIEluc3BlY3RvclJlcGxheUFnZW50Ojpzd2l0
Y2hTZXNzaW9uKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgU2Vzc2lvbklkZW50aWZpZXIgaWRl
bnRpZmllcikKK3ZvaWQgSW5zcGVjdG9yUmVwbGF5QWdlbnQ6OnN3aXRjaFNlc3Npb24oRXJyb3JT
dHJpbmcqIGVycm9yU3RyaW5nLCBUeXBlQnVpbGRlcjo6UmVwbGF5OjpTZXNzaW9uSWRlbnRpZmll
ciBpZGVudGlmaWVyKQogewogICAgIEFTU0VSVChpZGVudGlmaWVyID4gMCk7CiAKLSAgICBpZiAo
c2Vzc2lvblN0YXRlKCkgIT0gU2Vzc2lvblN0YXRlOjpJbmFjdGl2ZSkgeworICAgIGlmIChzZXNz
aW9uU3RhdGUoKSAhPSBXZWJDb3JlOjpTZXNzaW9uU3RhdGU6OkluYWN0aXZlKSB7CiAgICAgICAg
ICplcnJvclN0cmluZyA9IEFTQ0lJTGl0ZXJhbCgiQ2FuJ3Qgc3dpdGNoIHNlc3Npb25zIHVubGVz
cyB0aGUgc2Vzc2lvbiBpcyBuZWl0aGVyIGNhcHR1cmluZyBvciByZXBsYXlpbmcuIik7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CkBAIC00MDQsNyArNDA0LDcgQEAgdm9pZCBJbnNwZWN0b3JSZXBs
YXlBZ2VudDo6c3dpdGNoU2Vzc2lvbihFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIFNlc3Npb25J
ZGVudGkKICAgICBtX3BhZ2UucmVwbGF5Q29udHJvbGxlcigpLnN3aXRjaFNlc3Npb24oc2Vzc2lv
bik7CiB9CiAKLXZvaWQgSW5zcGVjdG9yUmVwbGF5QWdlbnQ6Omluc2VydFNlc3Npb25TZWdtZW50
KEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgU2Vzc2lvbklkZW50aWZpZXIgc2Vzc2lvbklkZW50
aWZpZXIsIFNlZ21lbnRJZGVudGlmaWVyIHNlZ21lbnRJZGVudGlmaWVyLCBpbnQgc2VnbWVudElu
ZGV4KQordm9pZCBJbnNwZWN0b3JSZXBsYXlBZ2VudDo6aW5zZXJ0U2Vzc2lvblNlZ21lbnQoRXJy
b3JTdHJpbmcqIGVycm9yU3RyaW5nLCBUeXBlQnVpbGRlcjo6UmVwbGF5OjpTZXNzaW9uSWRlbnRp
ZmllciBzZXNzaW9uSWRlbnRpZmllciwgU2VnbWVudElkZW50aWZpZXIgc2VnbWVudElkZW50aWZp
ZXIsIGludCBzZWdtZW50SW5kZXgpCiB7CiAgICAgQVNTRVJUKHNlc3Npb25JZGVudGlmaWVyID4g
MCk7CiAgICAgQVNTRVJUKHNlZ21lbnRJZGVudGlmaWVyID4gMCk7CkBAIC00MjEsNyArNDIxLDcg
QEAgdm9pZCBJbnNwZWN0b3JSZXBsYXlBZ2VudDo6aW5zZXJ0U2Vzc2lvblNlZ21lbnQoRXJyb3JT
dHJpbmcqIGVycm9yU3RyaW5nLCBTZXNzaW8KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IGlmIChzZXNzaW9uID09IG1fcGFnZS5yZXBsYXlDb250cm9sbGVyKCkubG9hZGVkU2Vzc2lvbigp
ICYmIHNlc3Npb25TdGF0ZSgpICE9IFNlc3Npb25TdGF0ZTo6SW5hY3RpdmUpIHsKKyAgICBpZiAo
c2Vzc2lvbiA9PSBtX3BhZ2UucmVwbGF5Q29udHJvbGxlcigpLmxvYWRlZFNlc3Npb24oKSAmJiBz
ZXNzaW9uU3RhdGUoKSAhPSBXZWJDb3JlOjpTZXNzaW9uU3RhdGU6OkluYWN0aXZlKSB7CiAgICAg
ICAgICplcnJvclN0cmluZyA9IEFTQ0lJTGl0ZXJhbCgiQ2FuJ3QgbW9kaWZ5IGEgbG9hZGVkIHNl
c3Npb24gdW5sZXNzIHRoZSBzZXNzaW9uIGlzIGluYWN0aXZlLiIpOwogICAgICAgICByZXR1cm47
CiAgICAgfQpAQCAtNDMwLDcgKzQzMCw3IEBAIHZvaWQgSW5zcGVjdG9yUmVwbGF5QWdlbnQ6Omlu
c2VydFNlc3Npb25TZWdtZW50KEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgU2Vzc2lvCiAgICAg
c2Vzc2lvbk1vZGlmaWVkKHNlc3Npb24pOwogfQogCi12b2lkIEluc3BlY3RvclJlcGxheUFnZW50
OjpyZW1vdmVTZXNzaW9uU2VnbWVudChFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIFNlc3Npb25J
ZGVudGlmaWVyIGlkZW50aWZpZXIsIGludCBzZWdtZW50SW5kZXgpCit2b2lkIEluc3BlY3RvclJl
cGxheUFnZW50OjpyZW1vdmVTZXNzaW9uU2VnbWVudChFcnJvclN0cmluZyogZXJyb3JTdHJpbmcs
IFR5cGVCdWlsZGVyOjpSZXBsYXk6OlNlc3Npb25JZGVudGlmaWVyIGlkZW50aWZpZXIsIGludCBz
ZWdtZW50SW5kZXgpCiB7CiAgICAgQVNTRVJUKGlkZW50aWZpZXIgPiAwKTsKICAgICBBU1NFUlQo
c2VnbWVudEluZGV4ID49IDApOwpAQCAtNDQ1LDcgKzQ0NSw3IEBAIHZvaWQgSW5zcGVjdG9yUmVw
bGF5QWdlbnQ6OnJlbW92ZVNlc3Npb25TZWdtZW50KEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywg
U2Vzc2lvCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoc2Vzc2lvbiA9PSBtX3Bh
Z2UucmVwbGF5Q29udHJvbGxlcigpLmxvYWRlZFNlc3Npb24oKSAmJiBzZXNzaW9uU3RhdGUoKSAh
PSBTZXNzaW9uU3RhdGU6OkluYWN0aXZlKSB7CisgICAgaWYgKHNlc3Npb24gPT0gbV9wYWdlLnJl
cGxheUNvbnRyb2xsZXIoKS5sb2FkZWRTZXNzaW9uKCkgJiYgc2Vzc2lvblN0YXRlKCkgIT0gV2Vi
Q29yZTo6U2Vzc2lvblN0YXRlOjpJbmFjdGl2ZSkgewogICAgICAgICAqZXJyb3JTdHJpbmcgPSBB
U0NJSUxpdGVyYWwoIkNhbid0IG1vZGlmeSBhIGxvYWRlZCBzZXNzaW9uIHVubGVzcyB0aGUgc2Vz
c2lvbiBpcyBpbmFjdGl2ZS4iKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTQ4MCw3ICs0
ODAsNyBAQCBQYXNzUmVmUHRyPFJlcGxheVNlc3Npb25TZWdtZW50PiBJbnNwZWN0b3JSZXBsYXlB
Z2VudDo6ZmluZFNlZ21lbnQoRXJyb3JTdHJpbmcqCiAgICAgcmV0dXJuIGl0LT52YWx1ZTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JSZXBsYXlBZ2VudDo6Y3VycmVudFJlcGxheVN0YXRlKEVycm9yU3Ry
aW5nKiwgU2Vzc2lvbklkZW50aWZpZXIqIHNlc3Npb25JZGVudGlmaWVyLCBJbnNwZWN0b3I6OlR5
cGVCdWlsZGVyOjpPcHRPdXRwdXQ8aW50Piogc2VnbWVudElkZW50aWZpZXIsIEluc3BlY3Rvcjo6
VHlwZUJ1aWxkZXI6OlJlcGxheTo6U2Vzc2lvblN0YXRlOjpFbnVtKiBzZXNzaW9uU3RhdGUsIElu
c3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlJlcGxheTo6U2VnbWVudFN0YXRlOjpFbnVtKiBzZWdtZW50
U3RhdGUsIFJlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpSZXBsYXk6OlJlcGxheVBvc2l0
aW9uPiYgcmVwbGF5UG9zaXRpb24pCit2b2lkIEluc3BlY3RvclJlcGxheUFnZW50OjpjdXJyZW50
UmVwbGF5U3RhdGUoRXJyb3JTdHJpbmcqLCBUeXBlQnVpbGRlcjo6UmVwbGF5OjpTZXNzaW9uSWRl
bnRpZmllciogc2Vzc2lvbklkZW50aWZpZXIsIFR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8VHlwZUJ1
aWxkZXI6OlJlcGxheTo6U2VnbWVudElkZW50aWZpZXI+KiBzZWdtZW50SWRlbnRpZmllciwgVHlw
ZUJ1aWxkZXI6OlJlcGxheTo6U2Vzc2lvblN0YXRlKiBzZXNzaW9uU3RhdGUsIFR5cGVCdWlsZGVy
OjpSZXBsYXk6OlNlZ21lbnRTdGF0ZSogc2VnbWVudFN0YXRlLCBSZWZQdHI8VHlwZUJ1aWxkZXI6
OlJlcGxheTo6UmVwbGF5UG9zaXRpb24+JiByZXBsYXlQb3NpdGlvbikKIHsKICAgICAqc2Vzc2lv
blN0YXRlID0gYnVpbGRJbnNwZWN0b3JPYmplY3RGb3JTZXNzaW9uU3RhdGUobV9wYWdlLnJlcGxh
eUNvbnRyb2xsZXIoKS5zZXNzaW9uU3RhdGUoKSk7CiAgICAgKnNlZ21lbnRTdGF0ZSA9IGJ1aWxk
SW5zcGVjdG9yT2JqZWN0Rm9yU2VnbWVudFN0YXRlKG1fcGFnZS5yZXBsYXlDb250cm9sbGVyKCku
c2VnbWVudFN0YXRlKCkpOwpAQCAtNDkyLDE0ICs0OTIsMTQgQEAgdm9pZCBJbnNwZWN0b3JSZXBs
YXlBZ2VudDo6Y3VycmVudFJlcGxheVN0YXRlKEVycm9yU3RyaW5nKiwgU2Vzc2lvbklkZW50aWZp
ZXIqIHMKICAgICByZXBsYXlQb3NpdGlvbiA9IGJ1aWxkSW5zcGVjdG9yT2JqZWN0Rm9yUG9zaXRp
b24obV9wYWdlLnJlcGxheUNvbnRyb2xsZXIoKS5jdXJyZW50UG9zaXRpb24oKSk7CiB9CiAKLXZv
aWQgSW5zcGVjdG9yUmVwbGF5QWdlbnQ6OmdldEF2YWlsYWJsZVNlc3Npb25zKEVycm9yU3RyaW5n
KiwgUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5PFNlc3Npb25JZGVudGlmaWVy
Pj4mIHNlc3Npb25zTGlzdCkKK3ZvaWQgSW5zcGVjdG9yUmVwbGF5QWdlbnQ6OmdldEF2YWlsYWJs
ZVNlc3Npb25zKEVycm9yU3RyaW5nKiwgUmVmUHRyPFR5cGVCdWlsZGVyOjpBcnJheTxTZXNzaW9u
SWRlbnRpZmllcj4+JiBzZXNzaW9uc0xpc3QpCiB7Ci0gICAgc2Vzc2lvbnNMaXN0ID0gVHlwZUJ1
aWxkZXI6OkFycmF5PFNlc3Npb25JZGVudGlmaWVyPjo6Y3JlYXRlKCk7CisgICAgc2Vzc2lvbnNM
aXN0ID0gVHlwZUJ1aWxkZXI6OkFycmF5PFR5cGVCdWlsZGVyOjpSZXBsYXk6OlNlc3Npb25JZGVu
dGlmaWVyPjo6Y3JlYXRlKCk7CiAgICAgZm9yIChhdXRvJiBwYWlyIDogbV9zZXNzaW9uc01hcCkK
ICAgICAgICAgc2Vzc2lvbnNMaXN0LT5hZGRJdGVtKHBhaXIua2V5KTsKIH0KIAotdm9pZCBJbnNw
ZWN0b3JSZXBsYXlBZ2VudDo6Z2V0U2Vzc2lvbkRhdGEoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5n
LCBTZXNzaW9uSWRlbnRpZmllciBpZGVudGlmaWVyLCBSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVp
bGRlcjo6UmVwbGF5OjpSZXBsYXlTZXNzaW9uPiYgc2VyaWFsaXplZE9iamVjdCkKK3ZvaWQgSW5z
cGVjdG9yUmVwbGF5QWdlbnQ6OmdldFNlc3Npb25EYXRhKEVycm9yU3RyaW5nKiBlcnJvclN0cmlu
ZywgVHlwZUJ1aWxkZXI6OlJlcGxheTo6U2Vzc2lvbklkZW50aWZpZXIgaWRlbnRpZmllciwgUmVm
UHRyPFR5cGVCdWlsZGVyOjpSZXBsYXk6OlJlcGxheVNlc3Npb24+JiBzZXJpYWxpemVkT2JqZWN0
KQogewogICAgIFJlZlB0cjxSZXBsYXlTZXNzaW9uPiBzZXNzaW9uID0gZmluZFNlc3Npb24oZXJy
b3JTdHJpbmcsIGlkZW50aWZpZXIpOwogICAgIGlmICghc2Vzc2lvbikgewpAQCAtNTEwLDcgKzUx
MCw3IEBAIHZvaWQgSW5zcGVjdG9yUmVwbGF5QWdlbnQ6OmdldFNlc3Npb25EYXRhKEVycm9yU3Ry
aW5nKiBlcnJvclN0cmluZywgU2Vzc2lvbklkZW50CiAgICAgc2VyaWFsaXplZE9iamVjdCA9IGJ1
aWxkSW5zcGVjdG9yT2JqZWN0Rm9yU2Vzc2lvbihzZXNzaW9uKTsKIH0KIAotdm9pZCBJbnNwZWN0
b3JSZXBsYXlBZ2VudDo6Z2V0U2VnbWVudERhdGEoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBT
ZWdtZW50SWRlbnRpZmllciBpZGVudGlmaWVyLCBSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRl
cjo6UmVwbGF5OjpTZXNzaW9uU2VnbWVudD4mIHNlcmlhbGl6ZWRPYmplY3QpCit2b2lkIEluc3Bl
Y3RvclJlcGxheUFnZW50OjpnZXRTZWdtZW50RGF0YShFcnJvclN0cmluZyogZXJyb3JTdHJpbmcs
IFR5cGVCdWlsZGVyOjpSZXBsYXk6OlNlZ21lbnRJZGVudGlmaWVyIGlkZW50aWZpZXIsIFJlZlB0
cjxUeXBlQnVpbGRlcjo6UmVwbGF5OjpTZXNzaW9uU2VnbWVudD4mIHNlcmlhbGl6ZWRPYmplY3Qp
CiB7CiAgICAgUmVmUHRyPFJlcGxheVNlc3Npb25TZWdtZW50PiBzZWdtZW50ID0gZmluZFNlZ21l
bnQoZXJyb3JTdHJpbmcsIGlkZW50aWZpZXIpOwogICAgIGlmICghc2VnbWVudCkgewpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJlcGxheUFnZW50LmggYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVwbGF5QWdlbnQuaAppbmRleCA2OWMx
NGI2NTU0NGM4MjMxNzkyNDVhYzQ4MGRjZDQzZGMzNjFmMzBmLi5mN2JjZTZmNGNmYjA5YWY0ZDQy
ZGMxNmYyMTMzYjI1ZjU4Nzk0MWI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yUmVwbGF5QWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yUmVwbGF5QWdlbnQuaApAQCAtMTAxLDE4ICsxMDEsMTggQEAgcHVibGljOgogICAg
IHZpcnR1YWwgdm9pZCBjYW5jZWxQbGF5YmFjayhFcnJvclN0cmluZyopIG92ZXJyaWRlOwogCiAg
ICAgdmlydHVhbCB2b2lkIHN3aXRjaFNlc3Npb24oRXJyb3JTdHJpbmcqLCBTZXNzaW9uSWRlbnRp
Zmllcikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGluc2VydFNlc3Npb25TZWdtZW50KEVy
cm9yU3RyaW5nKiwgU2Vzc2lvbklkZW50aWZpZXIsIFNlZ21lbnRJZGVudGlmaWVyLCBpbnQgc2Vn
bWVudEluZGV4KSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlU2Vzc2lvblNlZ21l
bnQoRXJyb3JTdHJpbmcqLCBTZXNzaW9uSWRlbnRpZmllciwgaW50IHNlZ21lbnRJbmRleCkgb3Zl
cnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGluc2VydFNlc3Npb25TZWdtZW50KEVycm9yU3RyaW5n
KiwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UmVwbGF5OjpTZXNzaW9uSWRlbnRpZmllciwgSW5z
cGVjdG9yOjpUeXBlQnVpbGRlcjo6UmVwbGF5OjpTZWdtZW50SWRlbnRpZmllciwgaW50IHNlZ21l
bnRJbmRleCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZVNlc3Npb25TZWdtZW50
KEVycm9yU3RyaW5nKiwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UmVwbGF5OjpTZXNzaW9uSWRl
bnRpZmllciwgaW50IHNlZ21lbnRJbmRleCkgb3ZlcnJpZGU7CiAKLSAgICB2aXJ0dWFsIHZvaWQg
Y3VycmVudFJlcGxheVN0YXRlKEVycm9yU3RyaW5nKiwgU2Vzc2lvbklkZW50aWZpZXIqLCBJbnNw
ZWN0b3I6OlR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8aW50Piogc2VnbWVudElkZW50aWZpZXIsIElu
c3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlJlcGxheTo6U2Vzc2lvblN0YXRlOjpFbnVtKiBzZXNzaW9u
U3RhdGUsIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlJlcGxheTo6U2VnbWVudFN0YXRlOjpFbnVt
KiBzZWdtZW50U3RhdGUsIFJlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpSZXBsYXk6OlJl
cGxheVBvc2l0aW9uPiYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBnZXRBdmFpbGFibGVT
ZXNzaW9ucyhFcnJvclN0cmluZyosIFJlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJh
eTxTZXNzaW9uSWRlbnRpZmllcj4+Jikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGdldFNl
c3Npb25EYXRhKEVycm9yU3RyaW5nKiwgU2Vzc2lvbklkZW50aWZpZXIsIFJlZlB0cjxJbnNwZWN0
b3I6OlR5cGVCdWlsZGVyOjpSZXBsYXk6OlJlcGxheVNlc3Npb24+Jikgb3ZlcnJpZGU7Ci0gICAg
dmlydHVhbCB2b2lkIGdldFNlZ21lbnREYXRhKEVycm9yU3RyaW5nKiwgU2VnbWVudElkZW50aWZp
ZXIsIFJlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpSZXBsYXk6OlNlc3Npb25TZWdtZW50
PiYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBjdXJyZW50UmVwbGF5U3RhdGUoRXJyb3JT
dHJpbmcqLCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpSZXBsYXk6OlNlc3Npb25JZGVudGlmaWVy
KiwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6T3B0T3V0cHV0PEluc3BlY3Rvcjo6VHlwZUJ1aWxk
ZXI6OlJlcGxheTo6U2VnbWVudElkZW50aWZpZXI+KiwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6
UmVwbGF5OjpTZXNzaW9uU3RhdGUqLCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpSZXBsYXk6OlNl
Z21lbnRTdGF0ZSogc2VnbWVudFN0YXRlLCBSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6
UmVwbGF5OjpSZXBsYXlQb3NpdGlvbj4mKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0
QXZhaWxhYmxlU2Vzc2lvbnMoRXJyb3JTdHJpbmcqLCBSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVp
bGRlcjo6QXJyYXk8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UmVwbGF5OjpTZXNzaW9uSWRlbnRp
Zmllcj4+Jikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGdldFNlc3Npb25EYXRhKEVycm9y
U3RyaW5nKiwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UmVwbGF5OjpTZXNzaW9uSWRlbnRpZmll
ciwgUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlJlcGxheTo6UmVwbGF5U2Vzc2lvbj4m
KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0U2VnbWVudERhdGEoRXJyb3JTdHJpbmcq
LCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpSZXBsYXk6OlNlZ21lbnRJZGVudGlmaWVyLCBSZWZQ
dHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UmVwbGF5OjpTZXNzaW9uU2VnbWVudD4mKSBvdmVy
cmlkZTsKIAogcHJpdmF0ZToKICAgICBQYXNzUmVmUHRyPFJlcGxheVNlc3Npb24+IGZpbmRTZXNz
aW9uKEVycm9yU3RyaW5nKiwgU2Vzc2lvbklkZW50aWZpZXIpOwogICAgIFBhc3NSZWZQdHI8UmVw
bGF5U2Vzc2lvblNlZ21lbnQ+IGZpbmRTZWdtZW50KEVycm9yU3RyaW5nKiwgU2VnbWVudElkZW50
aWZpZXIpOwotICAgIFNlc3Npb25TdGF0ZSBzZXNzaW9uU3RhdGUoKSBjb25zdDsKKyAgICBXZWJD
b3JlOjpTZXNzaW9uU3RhdGUgc2Vzc2lvblN0YXRlKCkgY29uc3Q7CiAKICAgICBzdGQ6OnVuaXF1
ZV9wdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JSZXBsYXlGcm9udGVuZERpc3BhdGNoZXI+IG1fZnJv
bnRlbmREaXNwYXRjaGVyOwogICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvclJlcGxheUJh
Y2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlQWdlbnQuY3BwIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlQWdlbnQuY3BwCmluZGV4IGE0NzAzMGQy
ZGYxNzNiMDVlMGYxYWE4MzI4NjE3ZDAxOGYwZmYwMTAuLmI0NjhmMzU1Njk5NGY2NjlhNjA4MzJh
YWE5ZmUxOTVjMDVjMGQyNDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JSZXNvdXJjZUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5jcHAKQEAgLTMxNyw3ICszMTcsNyBAQCB2b2lkIEluc3Bl
Y3RvclJlc291cmNlQWdlbnQ6OndpbGxTZW5kUmVxdWVzdCh1bnNpZ25lZCBsb25nIGlkZW50aWZp
ZXIsIERvY3VtZW50TAogICAgICAgICByZXF1ZXN0LnNldEhUVFBIZWFkZXJGaWVsZChIVFRQSGVh
ZGVyTmFtZTo6Q2FjaGVDb250cm9sLCAibm8tY2FjaGUiKTsKICAgICB9CiAKLSAgICBJbnNwZWN0
b3I6OlR5cGVCdWlsZGVyOjpQYWdlOjpSZXNvdXJjZVR5cGU6OkVudW0gcmVzb3VyY2VUeXBlID0g
SW5zcGVjdG9yUGFnZUFnZW50OjpyZXNvdXJjZVR5cGVKc29uKHR5cGUpOworICAgIEluc3BlY3Rv
cjo6VHlwZUJ1aWxkZXI6OlBhZ2U6OlJlc291cmNlVHlwZSByZXNvdXJjZVR5cGUgPSBJbnNwZWN0
b3JQYWdlQWdlbnQ6OnJlc291cmNlVHlwZUpzb24odHlwZSk7CiAKICAgICBSZWZQdHI8SW5zcGVj
dG9yOjpUeXBlQnVpbGRlcjo6TmV0d29yazo6SW5pdGlhdG9yPiBpbml0aWF0b3JPYmplY3QgPSBi
dWlsZEluaXRpYXRvck9iamVjdChsb2FkZXItPmZyYW1lKCkgPyBsb2FkZXItPmZyYW1lKCktPmRv
Y3VtZW50KCkgOiBudWxscHRyKTsKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+cmVxdWVzdFdp
bGxCZVNlbnQocmVxdWVzdElkLCBtX3BhZ2VBZ2VudC0+ZnJhbWVJZChsb2FkZXItPmZyYW1lKCkp
LCBtX3BhZ2VBZ2VudC0+bG9hZGVySWQobG9hZGVyKSwgbG9hZGVyLT51cmwoKS5zdHJpbmcoKSwg
YnVpbGRPYmplY3RGb3JSZXNvdXJjZVJlcXVlc3QocmVxdWVzdCksIGN1cnJlbnRUaW1lKCksIGlu
aXRpYXRvck9iamVjdCwgYnVpbGRPYmplY3RGb3JSZXNvdXJjZVJlc3BvbnNlKHJlZGlyZWN0UmVz
cG9uc2UsIGxvYWRlciksIHR5cGUgIT0gSW5zcGVjdG9yUGFnZUFnZW50OjpPdGhlclJlc291cmNl
ID8gJnJlc291cmNlVHlwZSA6IG51bGxwdHIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwCmluZGV4IGMzODgzNzc4N2E2YzFmMmYzZWZiM2Rk
YjkxZWY3MjU1NDg1YTlkMTguLjhmMmI4MmI3ZjZiNGJmYTI5MDk2MzcxYWUyYTBkYTA2N2U3Zjg5
NDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNo
ZWV0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVl
dC5jcHAKQEAgLTE2Niw3ICsxNjYsNyBAQCBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlR5
cGVCdWlsZGVyOjpDU1M6OlNvdXJjZVJhbmdlPiBidWlsZFNvdXJjZVJhbmdlT2JqZQogc3RhdGlj
IFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q1NTOjpDU1NNZWRpYT4gYnVpbGRN
ZWRpYU9iamVjdChjb25zdCBNZWRpYUxpc3QqIG1lZGlhLCBNZWRpYUxpc3RTb3VyY2UgbWVkaWFM
aXN0U291cmNlLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCkKIHsKICAgICAvLyBNYWtlIGNlcnRh
aW4gY29tcGlsZXJzIGhhcHB5IGJ5IGluaXRpYWxpemluZyB8c291cmNlfCB1cC1mcm9udC4KLSAg
ICBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDU1M6OkNTU01lZGlhOjpTb3VyY2U6OkVudW0gc291
cmNlID0gSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q1NTOjpDU1NNZWRpYTo6U291cmNlOjpJbmxp
bmVTaGVldDsKKyAgICBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDU1M6OkNTU01lZGlhOjpTb3Vy
Y2Ugc291cmNlID0gSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q1NTOjpDU1NNZWRpYTo6U291cmNl
OjpJbmxpbmVTaGVldDsKICAgICBzd2l0Y2ggKG1lZGlhTGlzdFNvdXJjZSkgewogICAgIGNhc2Ug
TWVkaWFMaXN0U291cmNlTWVkaWFSdWxlOgogICAgICAgICBzb3VyY2UgPSBJbnNwZWN0b3I6OlR5
cGVCdWlsZGVyOjpDU1M6OkNTU01lZGlhOjpTb3VyY2U6Ok1lZGlhUnVsZTsKQEAgLTUyOCw3ICs1
MjgsMTMgQEAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDU1M6OkNTU1N0eWxl
PiBJbnNwZWN0b3JTdHlsZTo6c3R5bGVXaXRoUHJvcGUKICAgICAgICAgY29uc3QgQ1NTUHJvcGVy
dHlTb3VyY2VEYXRhJiBwcm9wZXJ0eUVudHJ5ID0gaXQtPnNvdXJjZURhdGE7CiAgICAgICAgIGNv
bnN0IFN0cmluZyYgbmFtZSA9IHByb3BlcnR5RW50cnkubmFtZTsKIAotICAgICAgICBJbnNwZWN0
b3I6OlR5cGVCdWlsZGVyOjpDU1M6OkNTU1Byb3BlcnR5OjpTdGF0dXM6OkVudW0gc3RhdHVzID0g
aXQtPmRpc2FibGVkID8gSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q1NTOjpDU1NQcm9wZXJ0eTo6
U3RhdHVzOjpEaXNhYmxlZCA6IEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTUHJvcGVy
dHk6OlN0YXR1czo6QWN0aXZlOworICAgICAgICAvLyBWaXN1YWwgU3R1ZGlvIGRpc2FncmVlcyB3
aXRoIG90aGVyIGNvbXBpbGVycyBhcyB0byB3aGV0aGVyICdjbGFzcycgaXMgbmVlZGVkIGhlcmUu
CisjaWYgQ09NUElMRVIoTVNWQykKKyAgICAgICAgZW51bSBjbGFzcyBJbnNwZWN0b3I6OlR5cGVC
dWlsZGVyOjpDU1M6OkNTU1Byb3BlcnR5U3RhdHVzIHN0YXR1czsKKyNlbHNlCisgICAgICAgIGVu
dW0gSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q1NTOjpDU1NQcm9wZXJ0eVN0YXR1cyBzdGF0dXM7
CisjZW5kaWYKKyAgICAgICAgc3RhdHVzID0gaXQtPmRpc2FibGVkID8gSW5zcGVjdG9yOjpUeXBl
QnVpbGRlcjo6Q1NTOjpDU1NQcm9wZXJ0eVN0YXR1czo6RGlzYWJsZWQgOiBJbnNwZWN0b3I6OlR5
cGVCdWlsZGVyOjpDU1M6OkNTU1Byb3BlcnR5U3RhdHVzOjpBY3RpdmU7CiAKICAgICAgICAgUmVm
UHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTUHJvcGVydHk+IHByb3BlcnR5ID0g
SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q1NTOjpDU1NQcm9wZXJ0eTo6Y3JlYXRlKCkKICAgICAg
ICAgICAgIC5zZXROYW1lKG5hbWUubG93ZXIoKSkKQEAgLTU3MSw5ICs1NzcsOSBAQCBQYXNzUmVm
UHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTU3R5bGU+IEluc3BlY3RvclN0eWxl
OjpzdHlsZVdpdGhQcm9wZQogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Y2Nlc3NTdGF0
dXMgJiYgcHJldmlvdXNTdGF0dXMgIT0gImluYWN0aXZlIikgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChwcm9wZXJ0eUVudHJ5LmltcG9ydGFudCB8fCAhc3VjY2Vzc1ByaW9yaXR5
KSAvLyBQcmlvcml0eSBub3Qgc2V0ID09ICJub3QgaW1wb3J0YW50Ii4KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2hvdWxkSW5hY3RpdmF0ZSA9IHRydWU7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZWxzZSBpZiAoc3RhdHVzID09IEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6
OkNTUzo6Q1NTUHJvcGVydHk6OlN0YXR1czo6QWN0aXZlKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZWxzZSBpZiAoc3RhdHVzID09IEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNTUzo6
Q1NTUHJvcGVydHlTdGF0dXM6OkFjdGl2ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBJbmFjdGl2YXRlIGEgbm9uLWltcG9ydGFudCBwcm9wZXJ0eSBmb2xsb3dpbmcgdGhl
IHNhbWUtbmFtZWQgaW1wb3J0YW50IHByb3BlcnR5LgotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdGF0dXMgPSBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDU1M6OkNTU1Byb3BlcnR5
OjpTdGF0dXM6OkluYWN0aXZlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0
dXMgPSBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDU1M6OkNTU1Byb3BlcnR5U3RhdHVzOjpJbmFj
dGl2ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CkBAIC01ODYsNyArNTkyLDcgQEAg
UGFzc1JlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDU1M6OkNTU1N0eWxlPiBJbnNwZWN0
b3JTdHlsZTo6c3R5bGVXaXRoUHJvcGUKICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1l
VG9QcmV2aW91c0FjdGl2ZVByb3BlcnR5LnNldChjYW5vbmljYWxQcm9wZXJ0eU5hbWUsIHByb3Bl
cnR5KTsKIAogICAgICAgICAgICAgICAgIGlmIChzaG91bGRJbmFjdGl2YXRlKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGFjdGl2ZUl0LT52YWx1ZS0+c2V0U3RhdHVzKEluc3BlY3Rvcjo6VHlwZUJ1
aWxkZXI6OkNTUzo6Q1NTUHJvcGVydHk6OlN0YXR1czo6SW5hY3RpdmUpOworICAgICAgICAgICAg
ICAgICAgICBhY3RpdmVJdC0+dmFsdWUtPnNldFN0YXR1cyhJbnNwZWN0b3I6OlR5cGVCdWlsZGVy
OjpDU1M6OkNTU1Byb3BlcnR5U3RhdHVzOjpJbmFjdGl2ZSk7CiAgICAgICAgICAgICAgICAgICAg
IHByb3BlcnR5TmFtZVRvUHJldmlvdXNBY3RpdmVQcm9wZXJ0eS5zZXQoY2Fub25pY2FsUHJvcGVy
dHlOYW1lLCBwcm9wZXJ0eSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNl
IHsKQEAgLTU5NCw3ICs2MDAsNyBAQCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6
OkNTUzo6Q1NTU3R5bGU+IEluc3BlY3RvclN0eWxlOjpzdHlsZVdpdGhQcm9wZQogICAgICAgICAg
ICAgICAgIC8vIERlZmF1bHQgImltcGxpY2l0IiA9PSBmYWxzZS4KICAgICAgICAgICAgICAgICBp
ZiAoaW1wbGljaXQpCiAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5LT5zZXRJbXBsaWNpdCh0
cnVlKTsKLSAgICAgICAgICAgICAgICBzdGF0dXMgPSBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpD
U1M6OkNTU1Byb3BlcnR5OjpTdGF0dXM6OlN0eWxlOworICAgICAgICAgICAgICAgIHN0YXR1cyA9
IEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTUHJvcGVydHlTdGF0dXM6OlN0eWxlOwog
CiAgICAgICAgICAgICAgICAgU3RyaW5nIHNob3J0aGFuZCA9IG1fc3R5bGUtPmdldFByb3BlcnR5
U2hvcnRoYW5kKG5hbWUpOwogICAgICAgICAgICAgICAgIGlmICghc2hvcnRoYW5kLmlzRW1wdHko
KSkgewpAQCAtNjEwLDcgKzYxNiw3IEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRl
cjo6Q1NTOjpDU1NTdHlsZT4gSW5zcGVjdG9yU3R5bGU6OnN0eWxlV2l0aFByb3BlCiAgICAgICAg
IH0KIAogICAgICAgICAvLyBEZWZhdWx0ICJzdGF0dXMiID09ICJzdHlsZSIuCi0gICAgICAgIGlm
IChzdGF0dXMgIT0gSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q1NTOjpDU1NQcm9wZXJ0eTo6U3Rh
dHVzOjpTdHlsZSkKKyAgICAgICAgaWYgKHN0YXR1cyAhPSBJbnNwZWN0b3I6OlR5cGVCdWlsZGVy
OjpDU1M6OkNTU1Byb3BlcnR5U3RhdHVzOjpTdHlsZSkKICAgICAgICAgICAgIHByb3BlcnR5LT5z
ZXRTdGF0dXMoc3RhdHVzKTsKICAgICB9CiAKQEAgLTc0OSw3ICs3NTUsNyBAQCBOZXdMaW5lQW5k
V2hpdGVzcGFjZSYgSW5zcGVjdG9yU3R5bGU6Om5ld0xpbmVBbmRXaGl0ZXNwYWNlRGVsaW1pdGVy
cygpIGNvbnN0CiAgICAgcmV0dXJuIG1fZm9ybWF0OwogfQogCi1QYXNzUmVmUHRyPEluc3BlY3Rv
clN0eWxlU2hlZXQ+IEluc3BlY3RvclN0eWxlU2hlZXQ6OmNyZWF0ZShJbnNwZWN0b3JQYWdlQWdl
bnQqIHBhZ2VBZ2VudCwgY29uc3QgU3RyaW5nJiBpZCwgUGFzc1JlZlB0cjxDU1NTdHlsZVNoZWV0
PiBwYWdlU3R5bGVTaGVldCwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q1NTOjpTdHlsZVNoZWV0
T3JpZ2luOjpFbnVtIG9yaWdpbiwgY29uc3QgU3RyaW5nJiBkb2N1bWVudFVSTCwgTGlzdGVuZXIq
IGxpc3RlbmVyKQorUGFzc1JlZlB0cjxJbnNwZWN0b3JTdHlsZVNoZWV0PiBJbnNwZWN0b3JTdHls
ZVNoZWV0OjpjcmVhdGUoSW5zcGVjdG9yUGFnZUFnZW50KiBwYWdlQWdlbnQsIGNvbnN0IFN0cmlu
ZyYgaWQsIFBhc3NSZWZQdHI8Q1NTU3R5bGVTaGVldD4gcGFnZVN0eWxlU2hlZXQsIEluc3BlY3Rv
cjo6VHlwZUJ1aWxkZXI6OkNTUzo6U3R5bGVTaGVldE9yaWdpbiBvcmlnaW4sIGNvbnN0IFN0cmlu
ZyYgZG9jdW1lbnRVUkwsIExpc3RlbmVyKiBsaXN0ZW5lcikKIHsKICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IEluc3BlY3RvclN0eWxlU2hlZXQocGFnZUFnZW50LCBpZCwgcGFnZVN0eWxlU2hlZXQs
IG9yaWdpbiwgZG9jdW1lbnRVUkwsIGxpc3RlbmVyKSk7CiB9CkBAIC03NjIsNyArNzY4LDcgQEAg
U3RyaW5nIEluc3BlY3RvclN0eWxlU2hlZXQ6OnN0eWxlU2hlZXRVUkwoQ1NTU3R5bGVTaGVldCog
cGFnZVN0eWxlU2hlZXQpCiAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CiB9CiAKLUluc3BlY3Rv
clN0eWxlU2hlZXQ6Okluc3BlY3RvclN0eWxlU2hlZXQoSW5zcGVjdG9yUGFnZUFnZW50KiBwYWdl
QWdlbnQsIGNvbnN0IFN0cmluZyYgaWQsIFBhc3NSZWZQdHI8Q1NTU3R5bGVTaGVldD4gcGFnZVN0
eWxlU2hlZXQsIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6
RW51bSBvcmlnaW4sIGNvbnN0IFN0cmluZyYgZG9jdW1lbnRVUkwsIExpc3RlbmVyKiBsaXN0ZW5l
cikKK0luc3BlY3RvclN0eWxlU2hlZXQ6Okluc3BlY3RvclN0eWxlU2hlZXQoSW5zcGVjdG9yUGFn
ZUFnZW50KiBwYWdlQWdlbnQsIGNvbnN0IFN0cmluZyYgaWQsIFBhc3NSZWZQdHI8Q1NTU3R5bGVT
aGVldD4gcGFnZVN0eWxlU2hlZXQsIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNTUzo6U3R5bGVT
aGVldE9yaWdpbiBvcmlnaW4sIGNvbnN0IFN0cmluZyYgZG9jdW1lbnRVUkwsIExpc3RlbmVyKiBs
aXN0ZW5lcikKICAgICA6IG1fcGFnZUFnZW50KHBhZ2VBZ2VudCkKICAgICAsIG1faWQoaWQpCiAg
ICAgLCBtX3BhZ2VTdHlsZVNoZWV0KHBhZ2VTdHlsZVNoZWV0KQpAQCAtMTQyNiwxMiArMTQzMiwx
MiBAQCB2b2lkIEluc3BlY3RvclN0eWxlU2hlZXQ6OmNvbGxlY3RGbGF0UnVsZXMoUGFzc1JlZlB0
cjxDU1NSdWxlTGlzdD4gcnVsZUxpc3QsIENTUwogICAgIH0KIH0KIAotUGFzc1JlZlB0cjxJbnNw
ZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU+IEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxp
bmVTdHlsZTo6Y3JlYXRlKEluc3BlY3RvclBhZ2VBZ2VudCogcGFnZUFnZW50LCBjb25zdCBTdHJp
bmcmIGlkLCBQYXNzUmVmUHRyPEVsZW1lbnQ+IGVsZW1lbnQsIEluc3BlY3Rvcjo6VHlwZUJ1aWxk
ZXI6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6RW51bSBvcmlnaW4sIExpc3RlbmVyKiBsaXN0ZW5l
cikKK1Bhc3NSZWZQdHI8SW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlPiBJbnNwZWN0
b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU6OmNyZWF0ZShJbnNwZWN0b3JQYWdlQWdlbnQqIHBh
Z2VBZ2VudCwgY29uc3QgU3RyaW5nJiBpZCwgUGFzc1JlZlB0cjxFbGVtZW50PiBlbGVtZW50LCBJ
bnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW4gb3JpZ2luLCBMaXN0
ZW5lciogbGlzdGVuZXIpCiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnNwZWN0b3JTdHls
ZVNoZWV0Rm9ySW5saW5lU3R5bGUocGFnZUFnZW50LCBpZCwgZWxlbWVudCwgb3JpZ2luLCBsaXN0
ZW5lcikpOwogfQogCi1JbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU6Okluc3BlY3Rv
clN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZShJbnNwZWN0b3JQYWdlQWdlbnQqIHBhZ2VBZ2VudCwg
Y29uc3QgU3RyaW5nJiBpZCwgUGFzc1JlZlB0cjxFbGVtZW50PiBlbGVtZW50LCBJbnNwZWN0b3I6
OlR5cGVCdWlsZGVyOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW46OkVudW0gb3JpZ2luLCBMaXN0ZW5l
ciogbGlzdGVuZXIpCitJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU6Okluc3BlY3Rv
clN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZShJbnNwZWN0b3JQYWdlQWdlbnQqIHBhZ2VBZ2VudCwg
Y29uc3QgU3RyaW5nJiBpZCwgUGFzc1JlZlB0cjxFbGVtZW50PiBlbGVtZW50LCBJbnNwZWN0b3I6
OlR5cGVCdWlsZGVyOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW4gb3JpZ2luLCBMaXN0ZW5lciogbGlz
dGVuZXIpCiAgICAgOiBJbnNwZWN0b3JTdHlsZVNoZWV0KHBhZ2VBZ2VudCwgaWQsIG51bGxwdHIs
IG9yaWdpbiwgIiIsIGxpc3RlbmVyKQogICAgICwgbV9lbGVtZW50KGVsZW1lbnQpCiAgICAgLCBt
X3J1bGVTb3VyY2VEYXRhKG51bGxwdHIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvclN0eWxlU2hlZXQuaAppbmRleCA4YjE5MWZlMDg0MzliNWY4ZTc3YTI3NTk1OTdlNjMz
ZGE5OWUwZjRmLi4wY2E1YTUzYWVlNWMzODMzZmY5ODViOWIxMzU3OTQzMDk4NzIwNTZlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmgKQEAgLTE4
MSw3ICsxODEsNyBAQCBwdWJsaWM6CiAgICAgfTsKIAogICAgIHR5cGVkZWYgSGFzaE1hcDxDU1NT
dHlsZURlY2xhcmF0aW9uKiwgUmVmUHRyPEluc3BlY3RvclN0eWxlPj4gSW5zcGVjdG9yU3R5bGVN
YXA7Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yU3R5bGVTaGVldD4gY3JlYXRlKElu
c3BlY3RvclBhZ2VBZ2VudCosIGNvbnN0IFN0cmluZyYgaWQsIFBhc3NSZWZQdHI8Q1NTU3R5bGVT
aGVldD4gcGFnZVN0eWxlU2hlZXQsIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNTUzo6U3R5bGVT
aGVldE9yaWdpbjo6RW51bSwgY29uc3QgU3RyaW5nJiBkb2N1bWVudFVSTCwgTGlzdGVuZXIqKTsK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JTdHlsZVNoZWV0PiBjcmVhdGUoSW5zcGVj
dG9yUGFnZUFnZW50KiwgY29uc3QgU3RyaW5nJiBpZCwgUGFzc1JlZlB0cjxDU1NTdHlsZVNoZWV0
PiBwYWdlU3R5bGVTaGVldCwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q1NTOjpTdHlsZVNoZWV0
T3JpZ2luLCBjb25zdCBTdHJpbmcmIGRvY3VtZW50VVJMLCBMaXN0ZW5lciopOwogICAgIHN0YXRp
YyBTdHJpbmcgc3R5bGVTaGVldFVSTChDU1NTdHlsZVNoZWV0KiBwYWdlU3R5bGVTaGVldCk7CiAK
ICAgICB2aXJ0dWFsIH5JbnNwZWN0b3JTdHlsZVNoZWV0KCk7CkBAIC0yMTIsNyArMjEyLDcgQEAg
cHVibGljOgogICAgIEluc3BlY3RvckNTU0lkIHN0eWxlSWQoQ1NTU3R5bGVEZWNsYXJhdGlvbiog
c3R5bGUpIGNvbnN0IHsgcmV0dXJuIHJ1bGVPclN0eWxlSWQoc3R5bGUpOyB9CiAKIHByb3RlY3Rl
ZDoKLSAgICBJbnNwZWN0b3JTdHlsZVNoZWV0KEluc3BlY3RvclBhZ2VBZ2VudCosIGNvbnN0IFN0
cmluZyYgaWQsIFBhc3NSZWZQdHI8Q1NTU3R5bGVTaGVldD4gcGFnZVN0eWxlU2hlZXQsIEluc3Bl
Y3Rvcjo6VHlwZUJ1aWxkZXI6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6RW51bSwgY29uc3QgU3Ry
aW5nJiBkb2N1bWVudFVSTCwgTGlzdGVuZXIqKTsKKyAgICBJbnNwZWN0b3JTdHlsZVNoZWV0KElu
c3BlY3RvclBhZ2VBZ2VudCosIGNvbnN0IFN0cmluZyYgaWQsIFBhc3NSZWZQdHI8Q1NTU3R5bGVT
aGVldD4gcGFnZVN0eWxlU2hlZXQsIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNTUzo6U3R5bGVT
aGVldE9yaWdpbiwgY29uc3QgU3RyaW5nJiBkb2N1bWVudFVSTCwgTGlzdGVuZXIqKTsKIAogICAg
IGJvb2wgY2FuQmluZCgpIGNvbnN0IHsgcmV0dXJuIG1fb3JpZ2luICE9IEluc3BlY3Rvcjo6VHlw
ZUJ1aWxkZXI6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6VXNlckFnZW50ICYmIG1fb3JpZ2luICE9
IEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6VXNlcjsgfQog
ICAgIEluc3BlY3RvckNTU0lkIHJ1bGVPclN0eWxlSWQoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5
bGUpIGNvbnN0OwpAQCAtMjQ4LDcgKzI0OCw3IEBAIHByaXZhdGU6CiAgICAgSW5zcGVjdG9yUGFn
ZUFnZW50KiBtX3BhZ2VBZ2VudDsKICAgICBTdHJpbmcgbV9pZDsKICAgICBSZWZQdHI8Q1NTU3R5
bGVTaGVldD4gbV9wYWdlU3R5bGVTaGVldDsKLSAgICBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpD
U1M6OlN0eWxlU2hlZXRPcmlnaW46OkVudW0gbV9vcmlnaW47CisgICAgSW5zcGVjdG9yOjpUeXBl
QnVpbGRlcjo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luIG1fb3JpZ2luOwogICAgIFN0cmluZyBtX2Rv
Y3VtZW50VVJMOwogICAgIGJvb2wgbV9pc1JldmFsaWRhdGluZzsKICAgICBQYXJzZWRTdHlsZVNo
ZWV0KiBtX3BhcnNlZFN0eWxlU2hlZXQ7CkBAIC0yNTksMTQgKzI1OSwxNCBAQCBwcml2YXRlOgog
CiBjbGFzcyBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGUgOiBwdWJsaWMgSW5zcGVj
dG9yU3R5bGVTaGVldCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9y
U3R5bGVTaGVldEZvcklubGluZVN0eWxlPiBjcmVhdGUoSW5zcGVjdG9yUGFnZUFnZW50KiwgY29u
c3QgU3RyaW5nJiBpZCwgUGFzc1JlZlB0cjxFbGVtZW50PiwgSW5zcGVjdG9yOjpUeXBlQnVpbGRl
cjo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luOjpFbnVtLCBMaXN0ZW5lciopOworICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZT4gY3JlYXRlKEluc3Bl
Y3RvclBhZ2VBZ2VudCosIGNvbnN0IFN0cmluZyYgaWQsIFBhc3NSZWZQdHI8RWxlbWVudD4sIElu
c3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNTUzo6U3R5bGVTaGVldE9yaWdpbiwgTGlzdGVuZXIqKTsK
IAogICAgIHZvaWQgZGlkTW9kaWZ5RWxlbWVudEF0dHJpYnV0ZSgpOwogICAgIHZpcnR1YWwgYm9v
bCBnZXRUZXh0KFN0cmluZyogcmVzdWx0KSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIENT
U1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlRm9ySWQoY29uc3QgSW5zcGVjdG9yQ1NTSWQmIGlkKSBj
b25zdCBvdmVycmlkZSB7IEFTU0VSVF9VTlVTRUQoaWQsICFpZC5vcmRpbmFsKCkpOyByZXR1cm4g
aW5saW5lU3R5bGUoKTsgfQogCiBwcm90ZWN0ZWQ6Ci0gICAgSW5zcGVjdG9yU3R5bGVTaGVldEZv
cklubGluZVN0eWxlKEluc3BlY3RvclBhZ2VBZ2VudCosIGNvbnN0IFN0cmluZyYgaWQsIFBhc3NS
ZWZQdHI8RWxlbWVudD4sIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNTUzo6U3R5bGVTaGVldE9y
aWdpbjo6RW51bSwgTGlzdGVuZXIqKTsKKyAgICBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5l
U3R5bGUoSW5zcGVjdG9yUGFnZUFnZW50KiwgY29uc3QgU3RyaW5nJiBpZCwgUGFzc1JlZlB0cjxF
bGVtZW50PiwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luLCBM
aXN0ZW5lciopOwogCiAgICAgdmlydHVhbCBEb2N1bWVudCogb3duZXJEb2N1bWVudCgpIGNvbnN0
IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgUmVmUHRyPENTU1J1bGVTb3VyY2VEYXRhPiBydWxlU291
cmNlRGF0YUZvcihDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSkgY29uc3Qgb3ZlcnJpZGUgeyBB
U1NFUlRfVU5VU0VEKHN0eWxlLCBzdHlsZSA9PSBpbmxpbmVTdHlsZSgpKTsgcmV0dXJuIG1fcnVs
ZVNvdXJjZURhdGE7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JUaW1lbGluZUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JUaW1lbGluZUFnZW50LmNwcAppbmRleCAyNDI2OTc0ZjQ3MDZhNzFiZjk3ZjlkMjQyNWM3M2Nk
NDI5OTk0YTE0Li5hY2U1NjNmZTYyOTEzZmNhZWUwMjNiYzc1MmVkMTFmOTc2MmQyNTE0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclRpbWVsaW5lQWdlbnQu
Y3BwCkBAIC01NTQsNyArNTU0LDcgQEAgdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpicmVh
a3BvaW50QWN0aW9uUHJvYmUoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEkKICAgICBhcHBl
bmRSZWNvcmQoVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVQcm9iZVNhbXBsZURhdGEoYWN0
aW9uLCBoaXRDb3VudCksIFRpbWVsaW5lUmVjb3JkVHlwZTo6UHJvYmVTYW1wbGUsIGZhbHNlLCBm
cmFtZUZyb21FeGVjU3RhdGUoZXhlYykpOwogfQogCi1zdGF0aWMgSW5zcGVjdG9yOjpUeXBlQnVp
bGRlcjo6VGltZWxpbmU6OkV2ZW50VHlwZTo6RW51bSB0b1Byb3RvY29sKFRpbWVsaW5lUmVjb3Jk
VHlwZSB0eXBlKQorc3RhdGljIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlRpbWVsaW5lOjpFdmVu
dFR5cGUgdG9Qcm90b2NvbChUaW1lbGluZVJlY29yZFR5cGUgdHlwZSkKIHsKICAgICBzd2l0Y2gg
KHR5cGUpIHsKICAgICBjYXNlIFRpbWVsaW5lUmVjb3JkVHlwZTo6RXZlbnREaXNwYXRjaDoKQEAg
LTY0Niw3ICs2NDYsNyBAQCB2b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OmFkZFJlY29yZFRv
VGltZWxpbmUoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBycAogewogICAgIHBycFJlY29y
ZC0+c2V0U3RyaW5nKCJ0eXBlIiwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Z2V0V2ViRW51bUNv
bnN0YW50VmFsdWUodG9Qcm90b2NvbCh0eXBlKSkpOwogCi0gICAgUmVmUHRyPEluc3BlY3Rvcjo6
VHlwZUJ1aWxkZXI6OlRpbWVsaW5lOjpUaW1lbGluZUV2ZW50PiByZWNvcmQgPSBJbnNwZWN0b3I6
OlR5cGVCdWlsZGVyOjpUaW1lbGluZTo6VGltZWxpbmVFdmVudDo6cnVudGltZUNhc3QocHJwUmVj
b3JkKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6VGltZWxpbmU6OlRpbWVs
aW5lRXZlbnQ+IHJlY29yZCA9IEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6
VGltZWxpbmU6OlRpbWVsaW5lRXZlbnQ+OjpydW50aW1lQ2FzdChwcnBSZWNvcmQpOwogCiAgICAg
aWYgKG1fcmVjb3JkU3RhY2suaXNFbXB0eSgpKQogICAgICAgICBzZW5kRXZlbnQocmVjb3JkLnJl
bGVhc2UoKSk7CkBAIC03MTQsNyArNzE0LDcgQEAgdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50
OjpzZW5kRXZlbnQoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGV2ZW50KQogICAgICAgICBy
ZXR1cm47CiAKICAgICAvLyBGSVhNRTogcnVudGltZUNhc3QgaXMgYSBoYWNrLiBXZSBkbyBpdCBi
ZWNhdXNlIHdlIGNhbid0IGJ1aWxkIFRpbWVsaW5lRXZlbnQgZGlyZWN0bHkgbm93LgotICAgIFJl
ZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpUaW1lbGluZTo6VGltZWxpbmVFdmVudD4gcmVj
b3JkQ2hlY2tlZCA9IEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlRpbWVsaW5lOjpUaW1lbGluZUV2
ZW50OjpydW50aW1lQ2FzdChldmVudCk7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxk
ZXI6OlRpbWVsaW5lOjpUaW1lbGluZUV2ZW50PiByZWNvcmRDaGVja2VkID0gQmluZGluZ1RyYWl0
czxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpUaW1lbGluZTo6VGltZWxpbmVFdmVudD46OnJ1bnRp
bWVDYXN0KGV2ZW50KTsKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+ZXZlbnRSZWNvcmRlZChy
ZWNvcmRDaGVja2VkLnJlbGVhc2UoKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9wcm90b2NvbC9DU1MuanNvbiBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9w
cm90b2NvbC9DU1MuanNvbgppbmRleCBjYTkwY2Y3NDFiZjZjMWI4OTM2ODdhZmUxZjYwZTA0ZTQw
MmRjODRjLi45YzViMjc1NDVlYjliY2E3OGFkOWUyZTNlY2FmNjAyNDljYmZjNjAxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvQ1NTLmpzb24KKysrIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL3Byb3RvY29sL0NTUy5qc29uCkBAIC0xNjMsNiArMTYzLDEy
IEBACiAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiQ1NTIHN0eWxlIHJlcHJlc2VudGF0aW9u
LiIKICAgICAgICAgfSwKICAgICAgICAgeworICAgICAgICAgICAgImlkIjogIkNTU1Byb3BlcnR5
U3RhdHVzIiwKKwkgICAgInR5cGUiOiAic3RyaW5nIiwKKyAgICAgICAgICAgICJlbnVtIjogWyJh
Y3RpdmUiLCAiaW5hY3RpdmUiLCAiZGlzYWJsZWQiLCAic3R5bGUiXSwKKyAgICAgICAgICAgICJk
ZXNjcmlwdGlvbiI6ICJUaGUgcHJvcGVydHkgc3RhdHVzOiBcImFjdGl2ZVwiIGlmIHRoZSBwcm9w
ZXJ0eSBpcyBlZmZlY3RpdmUgaW4gdGhlIHN0eWxlLCBcImluYWN0aXZlXCIgaWYgdGhlIHByb3Bl
cnR5IGlzIG92ZXJyaWRkZW4gYnkgYSBzYW1lLW5hbWVkIHByb3BlcnR5IGluIHRoaXMgc3R5bGUg
bGF0ZXIgb24sIFwiZGlzYWJsZWRcIiBpZiB0aGUgcHJvcGVydHkgaXMgZGlzYWJsZWQgYnkgdGhl
IHVzZXIsIFwic3R5bGVcIiAoaW1wbGllZCBpZiBhYnNlbnQpIGlmIHRoZSBwcm9wZXJ0eSBpcyBy
ZXBvcnRlZCBieSB0aGUgYnJvd3NlciByYXRoZXIgdGhhbiBieSB0aGUgQ1NTIHNvdXJjZSBwYXJz
ZXIuIgorICAgICAgICB9LAorICAgICAgICB7CiAgICAgICAgICAgICAiaWQiOiAiQ1NTUHJvcGVy
dHkiLAogICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKICAgICAgICAgICAgICJwcm9wZXJ0
aWVzIjogWwpAQCAtMTcyLDcgKzE3OCw3IEBACiAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJp
bXBsaWNpdCIsICJ0eXBlIjogImJvb2xlYW4iLCAib3B0aW9uYWwiOiB0cnVlLCAiZGVzY3JpcHRp
b24iOiAiV2hldGhlciB0aGUgcHJvcGVydHkgaXMgaW1wbGljaXQgKGltcGxpZXMgPGNvZGU+ZmFs
c2U8L2NvZGU+IGlmIGFic2VudCkuIiB9LAogICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidGV4
dCIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IHRydWUsICJkZXNjcmlwdGlvbiI6ICJU
aGUgZnVsbCBwcm9wZXJ0eSB0ZXh0IGFzIHNwZWNpZmllZCBpbiB0aGUgc3R5bGUuIiB9LAogICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAicGFyc2VkT2siLCAidHlwZSI6ICJib29sZWFuIiwgIm9w
dGlvbmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9uIjogIldoZXRoZXIgdGhlIHByb3BlcnR5IGlzIHVu
ZGVyc3Rvb2QgYnkgdGhlIGJyb3dzZXIgKGltcGxpZXMgPGNvZGU+dHJ1ZTwvY29kZT4gaWYgYWJz
ZW50KS4iIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzdGF0dXMiLCAidHlwZSI6ICJz
dHJpbmciLCAiZW51bSI6IFsiYWN0aXZlIiwgImluYWN0aXZlIiwgImRpc2FibGVkIiwgInN0eWxl
Il0sICJvcHRpb25hbCI6IHRydWUsICJkZXNjcmlwdGlvbiI6ICJUaGUgcHJvcGVydHkgc3RhdHVz
OiBcImFjdGl2ZVwiIGlmIHRoZSBwcm9wZXJ0eSBpcyBlZmZlY3RpdmUgaW4gdGhlIHN0eWxlLCBc
ImluYWN0aXZlXCIgaWYgdGhlIHByb3BlcnR5IGlzIG92ZXJyaWRkZW4gYnkgYSBzYW1lLW5hbWVk
IHByb3BlcnR5IGluIHRoaXMgc3R5bGUgbGF0ZXIgb24sIFwiZGlzYWJsZWRcIiBpZiB0aGUgcHJv
cGVydHkgaXMgZGlzYWJsZWQgYnkgdGhlIHVzZXIsIFwic3R5bGVcIiAoaW1wbGllZCBpZiBhYnNl
bnQpIGlmIHRoZSBwcm9wZXJ0eSBpcyByZXBvcnRlZCBieSB0aGUgYnJvd3NlciByYXRoZXIgdGhh
biBieSB0aGUgQ1NTIHNvdXJjZSBwYXJzZXIuIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAic3RhdHVzIiwgIiRyZWYiOiAiQ1NTUHJvcGVydHlTdGF0dXMiLCAib3B0aW9uYWwiOiB0cnVl
LCAiZGVzY3JpcHRpb24iOiAiV2hldGhlciB0aGUgcHJvcGVydHkgaXMgYWN0aXZlIG9yIGRpc2Fi
bGVkLiIgfSwKICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInJhbmdlIiwgIiRyZWYiOiAiU291
cmNlUmFuZ2UiLCAib3B0aW9uYWwiOiB0cnVlLCAiZGVzY3JpcHRpb24iOiAiVGhlIGVudGlyZSBw
cm9wZXJ0eSByYW5nZSBpbiB0aGUgZW5jbG9zaW5nIHN0eWxlIGRlY2xhcmF0aW9uIChpZiBhdmFp
bGFibGUpLiIgfQogICAgICAgICAgICAgXSwKICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJD
U1Mgc3R5bGUgZWZmZWN0aXZlIHZpc3VhbCBkaW1lbnNpb25zIGFuZCBzb3VyY2Ugb2Zmc2V0cy4i
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvUGFnZS5qc29u
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL3Byb3RvY29sL1BhZ2UuanNvbgppbmRleCAzYWZk
YmMwY2QzZDI3ZDUxNjRkMjZlOGJkMzJjNGQ3NmZkZmRkMjc1Li44OGE3NmM0NmYyYmVmY2RhNGRi
MWE0NTA0ZjcyZjJlMjJkNjcxNTAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvcHJvdG9jb2wvUGFnZS5qc29uCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9wcm90
b2NvbC9QYWdlLmpzb24KQEAgLTI5LDI2ICsyOSwyNSBAQAogICAgICAgICAgICAgXQogICAgICAg
ICB9LAogICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiRnJhbWVSZXNvdXJjZSIsCisgICAg
ICAgICAgICAidHlwZSI6ICJvYmplY3QiLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCisg
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ1cmwiLCAidHlwZSI6ICJzdHJpbmciLCAiZGVzY3Jp
cHRpb24iOiAiUmVzb3VyY2UgVVJMLiIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInR5
cGUiLCAiJHJlZiI6ICJSZXNvdXJjZVR5cGUiLCAiZGVzY3JpcHRpb24iOiAiVHlwZSBvZiB0aGlz
IHJlc291cmNlLiIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm1pbWVUeXBlIiwgInR5
cGUiOiAic3RyaW5nIiwgImRlc2NyaXB0aW9uIjogIlJlc291cmNlIG1pbWVUeXBlIGFzIGRldGVy
bWluZWQgYnkgdGhlIGJyb3dzZXIuIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZmFp
bGVkIiwgInR5cGUiOiAiYm9vbGVhbiIsICJvcHRpb25hbCI6IHRydWUsICJkZXNjcmlwdGlvbiI6
ICJUcnVlIGlmIHRoZSByZXNvdXJjZSBmYWlsZWQgdG8gbG9hZC4iIH0sCisgICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJjYW5jZWxlZCIsICJ0eXBlIjogImJvb2xlYW4iLCAib3B0aW9uYWwiOiB0
cnVlLCAiZGVzY3JpcHRpb24iOiAiVHJ1ZSBpZiB0aGUgcmVzb3VyY2Ugd2FzIGNhbmNlbGVkIGR1
cmluZyBsb2FkaW5nLiIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNvdXJjZU1hcFVS
TCIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IHRydWUsICJkZXNjcmlwdGlvbiI6ICJV
Ukwgb2Ygc291cmNlIG1hcCBhc3NvY2lhdGVkIHdpdGggdGhpcyByZXNvdXJjZSAoaWYgYW55KS4i
IH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgewogICAgICAgICAgICAgImlk
IjogIkZyYW1lUmVzb3VyY2VUcmVlIiwKICAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCiAg
ICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiSW5mb3JtYXRpb24gYWJvdXQgdGhlIEZyYW1lIGhp
ZXJhcmNoeSBhbG9uZyB3aXRoIHRoZWlyIGNhY2hlZCByZXNvdXJjZXMuIiwKICAgICAgICAgICAg
ICJwcm9wZXJ0aWVzIjogWwogICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZnJhbWUiLCAiJHJl
ZiI6ICJGcmFtZSIsICJkZXNjcmlwdGlvbiI6ICJGcmFtZSBpbmZvcm1hdGlvbiBmb3IgdGhpcyB0
cmVlIGl0ZW0uIiB9LAogICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY2hpbGRGcmFtZXMiLCAi
dHlwZSI6ICJhcnJheSIsICJvcHRpb25hbCI6IHRydWUsICJpdGVtcyI6IHsgIiRyZWYiOiAiRnJh
bWVSZXNvdXJjZVRyZWUiIH0sICJkZXNjcmlwdGlvbiI6ICJDaGlsZCBmcmFtZXMuIiB9LAotICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAicmVzb3VyY2VzIiwgInR5cGUiOiAiYXJyYXkiLAotICAg
ICAgICAgICAgICAgICAgICAiaXRlbXMiOiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAidHlw
ZSI6ICJvYmplY3QiLAotICAgICAgICAgICAgICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ1cmwiLCAidHlwZSI6ICJzdHJp
bmciLCAiZGVzY3JpcHRpb24iOiAiUmVzb3VyY2UgVVJMLiIgfSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogInR5cGUiLCAiJHJlZiI6ICJSZXNvdXJjZVR5cGUiLCAiZGVz
Y3JpcHRpb24iOiAiVHlwZSBvZiB0aGlzIHJlc291cmNlLiIgfSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogIm1pbWVUeXBlIiwgInR5cGUiOiAic3RyaW5nIiwgImRlc2Ny
aXB0aW9uIjogIlJlc291cmNlIG1pbWVUeXBlIGFzIGRldGVybWluZWQgYnkgdGhlIGJyb3dzZXIu
IiB9LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZmFpbGVkIiwgInR5
cGUiOiAiYm9vbGVhbiIsICJvcHRpb25hbCI6IHRydWUsICJkZXNjcmlwdGlvbiI6ICJUcnVlIGlm
IHRoZSByZXNvdXJjZSBmYWlsZWQgdG8gbG9hZC4iIH0sCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJjYW5jZWxlZCIsICJ0eXBlIjogImJvb2xlYW4iLCAib3B0aW9uYWwi
OiB0cnVlLCAiZGVzY3JpcHRpb24iOiAiVHJ1ZSBpZiB0aGUgcmVzb3VyY2Ugd2FzIGNhbmNlbGVk
IGR1cmluZyBsb2FkaW5nLiIgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICJuYW1l
IjogInNvdXJjZU1hcFVSTCIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IHRydWUsICJk
ZXNjcmlwdGlvbiI6ICJVUkwgb2Ygc291cmNlIG1hcCBhc3NvY2lhdGVkIHdpdGggdGhpcyByZXNv
dXJjZSAoaWYgYW55KS4iIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIF0KLSAgICAgICAgICAg
ICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkluZm9ybWF0
aW9uIGFib3V0IGZyYW1lIHJlc291cmNlcy4iCi0gICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAicmVzb3VyY2VzIiwgInR5cGUiOiAiYXJyYXkiLCAiaXRlbXMiOiB7
ICIkcmVmIjogIkZyYW1lUmVzb3VyY2UiIH0sICJkZXNjcmlwdGlvbiI6ICJJbmZvcm1hdGlvbiBh
Ym91dCBmcmFtZSByZXNvdXJjZXMuIiB9CiAgICAgICAgICAgICBdCiAgICAgICAgIH0sCiAgICAg
ICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9WZXJzaW9ucy9JbnNwZWN0
b3ItaU9TLTYuMC5qc29uIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1ZlcnNpb25zL0luc3BlY3Rv
ci1pT1MtNi4wLmpzb24KaW5kZXggMTQ4Mzc4MWJhNTBiMTgxMWQ3ZDZjYWZjZDUwYTQxMTRhOWFj
OWQwNS4uMzUwMjQ1ZmY4YjY5ZjA4NTJmNDAxMDFhZDFkN2Y4NTkzMTEwYzdiMCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1ZlcnNpb25zL0luc3BlY3Rvci1pT1MtNi4wLmpzb24K
KysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1ZlcnNpb25zL0luc3BlY3Rvci1pT1MtNi4wLmpz
b24KQEAgLTY4LDI1ICs2OCwyNCBAQAogICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgIH0s
CiAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgImlkIjogIkZyYW1lUmVzb3VyY2UiLAor
ICAgICAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCisgICAgICAgICAgICAgICAgInByb3Bl
cnRpZXMiOiBbCisgICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidXJsIiwgInR5cGUiOiAi
c3RyaW5nIiwgImRlc2NyaXB0aW9uIjogIlJlc291cmNlIFVSTC4iIH0sCisgICAgICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAidHlwZSIsICIkcmVmIjogIlJlc291cmNlVHlwZSIsICJkZXNjcmlw
dGlvbiI6ICJUeXBlIG9mIHRoaXMgcmVzb3VyY2UuIiB9LAorICAgICAgICAgICAgICAgICAgICB7
ICJuYW1lIjogIm1pbWVUeXBlIiwgInR5cGUiOiAic3RyaW5nIiwgImRlc2NyaXB0aW9uIjogIlJl
c291cmNlIG1pbWVUeXBlIGFzIGRldGVybWluZWQgYnkgdGhlIGJyb3dzZXIuIiB9LAorICAgICAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogImZhaWxlZCIsICJ0eXBlIjogImJvb2xlYW4iLCAib3B0
aW9uYWwiOiB0cnVlLCAiZGVzY3JpcHRpb24iOiAiVHJ1ZSBpZiB0aGUgcmVzb3VyY2UgZmFpbGVk
IHRvIGxvYWQuIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNhbmNlbGVkIiwg
InR5cGUiOiAiYm9vbGVhbiIsICJvcHRpb25hbCI6IHRydWUsICJkZXNjcmlwdGlvbiI6ICJUcnVl
IGlmIHRoZSByZXNvdXJjZSB3YXMgY2FuY2VsZWQgZHVyaW5nIGxvYWRpbmcuIiB9CisgICAgICAg
ICAgICAgICAgXQorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
ICAiaWQiOiAiRnJhbWVSZXNvdXJjZVRyZWUiLAogICAgICAgICAgICAgICAgICJ0eXBlIjogIm9i
amVjdCIsCiAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkluZm9ybWF0aW9uIGFib3V0
IHRoZSBGcmFtZSBoaWVyYXJjaHkgYWxvbmcgd2l0aCB0aGVpciBjYWNoZWQgcmVzb3VyY2VzLiIs
CiAgICAgICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCiAgICAgICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAiZnJhbWUiLCAiJHJlZiI6ICJGcmFtZSIsICJkZXNjcmlwdGlvbiI6ICJGcmFtZSBp
bmZvcm1hdGlvbiBmb3IgdGhpcyB0cmVlIGl0ZW0uIiB9LAogICAgICAgICAgICAgICAgICAgICB7
ICJuYW1lIjogImNoaWxkRnJhbWVzIiwgInR5cGUiOiAiYXJyYXkiLCAib3B0aW9uYWwiOiB0cnVl
LCAiaXRlbXMiOiB7ICIkcmVmIjogIkZyYW1lUmVzb3VyY2VUcmVlIiB9LCAiZGVzY3JpcHRpb24i
OiAiQ2hpbGQgZnJhbWVzLiIgfSwKLSAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJyZXNv
dXJjZXMiLCAidHlwZSI6ICJhcnJheSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAiaXRlbXMi
OiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAicHJvcGVydGllcyI6IFsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ1cmwiLCAidHlwZSI6ICJzdHJpbmciLCAiZGVzY3Jp
cHRpb24iOiAiUmVzb3VyY2UgVVJMLiIgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJ0eXBlIiwgIiRyZWYiOiAiUmVzb3VyY2VUeXBlIiwgImRlc2NyaXB0aW9u
IjogIlR5cGUgb2YgdGhpcyByZXNvdXJjZS4iIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAibWltZVR5cGUiLCAidHlwZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRp
b24iOiAiUmVzb3VyY2UgbWltZVR5cGUgYXMgZGV0ZXJtaW5lZCBieSB0aGUgYnJvd3Nlci4iIH0s
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZmFpbGVkIiwgInR5
cGUiOiAiYm9vbGVhbiIsICJvcHRpb25hbCI6IHRydWUsICJkZXNjcmlwdGlvbiI6ICJUcnVlIGlm
IHRoZSByZXNvdXJjZSBmYWlsZWQgdG8gbG9hZC4iIH0sCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAiY2FuY2VsZWQiLCAidHlwZSI6ICJib29sZWFuIiwgIm9wdGlv
bmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9uIjogIlRydWUgaWYgdGhlIHJlc291cmNlIHdhcyBjYW5j
ZWxlZCBkdXJpbmcgbG9hZGluZy4iIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCi0g
ICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgImRlc2Ny
aXB0aW9uIjogIkluZm9ybWF0aW9uIGFib3V0IGZyYW1lIHJlc291cmNlcy4iCi0gICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJyZXNvdXJjZXMiLCAi
dHlwZSI6ICJhcnJheSIsICJpdGVtcyI6IHsgIiRyZWYiOiAiRnJhbWVSZXNvdXJjZSIgfSwgImRl
c2NyaXB0aW9uIjogIkluZm9ybWF0aW9uIGFib3V0IGZyYW1lIHJlc291cmNlcy4iIH0KICAgICAg
ICAgICAgICAgICBdCiAgICAgICAgICAgICB9LAogICAgICAgICAgICAgewpAQCAtMTU4Nyw3ICsx
NTg2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJuYW1lIiwgInR5cGUiOiAi
c3RyaW5nIiwgImRlc2NyaXB0aW9uIjogIkNvbXB1dGVkIHN0eWxlIHByb3BlcnR5IG5hbWUuIiB9
LAogICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInZhbHVlIiwgInR5cGUiOiAic3RyaW5n
IiwgImRlc2NyaXB0aW9uIjogIkNvbXB1dGVkIHN0eWxlIHByb3BlcnR5IHZhbHVlLiIgfQogICAg
ICAgICAgICAgICAgIF0KLSAgICAgICAgICAgIH0sICAgICAgICAgICAgCisgICAgICAgICAgICB9
LAogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICJpZCI6ICJDU1NTdHlsZSIsCiAgICAg
ICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKQEAgLTE2MDMsNiArMTYwMiwxMiBAQAogICAg
ICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJDU1Mgc3R5bGUgcmVwcmVzZW50YXRpb24uIgog
ICAgICAgICAgICAgfSwKICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAiaWQiOiAiQ1NT
UHJvcGVydHlTdGF0dXMiLAorICAgICAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCisgICAg
ICAgICAgICAgICAgImVudW0iOiBbImFjdGl2ZSIsICJpbmFjdGl2ZSIsICJkaXNhYmxlZCIsICJz
dHlsZSJdLAorICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJUaGUgcHJvcGVydHkgc3Rh
dHVzOiBcImFjdGl2ZVwiIChpbXBsaWVkIGlmIGFic2VudCkgaWYgdGhlIHByb3BlcnR5IGlzIGVm
ZmVjdGl2ZSBpbiB0aGUgc3R5bGUsIFwiaW5hY3RpdmVcIiBpZiB0aGUgcHJvcGVydHkgaXMgb3Zl
cnJpZGRlbiBieSBhIHNhbWUtbmFtZWQgcHJvcGVydHkgaW4gdGhpcyBzdHlsZSBsYXRlciBvbiwg
XCJkaXNhYmxlZFwiIGlmIHRoZSBwcm9wZXJ0eSBpcyBkaXNhYmxlZCBieSB0aGUgdXNlciwgXCJz
dHlsZVwiIGlmIHRoZSBwcm9wZXJ0eSBpcyByZXBvcnRlZCBieSB0aGUgYnJvd3NlciByYXRoZXIg
dGhhbiBieSB0aGUgQ1NTIHNvdXJjZSBwYXJzZXIuIgorICAgICAgICAgICAgfSwKKyAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICAiaWQiOiAiQ1NTUHJvcGVydHkiLAogICAgICAgICAgICAg
ICAgICJ0eXBlIjogIm9iamVjdCIsCiAgICAgICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCkBA
IC0xNjEyLDcgKzE2MTcsNyBAQAogICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogImltcGxp
Y2l0IiwgInR5cGUiOiAiYm9vbGVhbiIsICJvcHRpb25hbCI6IHRydWUsICJkZXNjcmlwdGlvbiI6
ICJXaGV0aGVyIHRoZSBwcm9wZXJ0eSBpcyBpbXBsaWNpdCAoaW1wbGllcyA8Y29kZT5mYWxzZTwv
Y29kZT4gaWYgYWJzZW50KS4iIH0sCiAgICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidGV4
dCIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IHRydWUsICJkZXNjcmlwdGlvbiI6ICJU
aGUgZnVsbCBwcm9wZXJ0eSB0ZXh0IGFzIHNwZWNpZmllZCBpbiB0aGUgc3R5bGUuIiB9LAogICAg
ICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBhcnNlZE9rIiwgInR5cGUiOiAiYm9vbGVhbiIs
ICJvcHRpb25hbCI6IHRydWUsICJkZXNjcmlwdGlvbiI6ICJXaGV0aGVyIHRoZSBwcm9wZXJ0eSBp
cyB1bmRlcnN0b29kIGJ5IHRoZSBicm93c2VyIChpbXBsaWVzIDxjb2RlPnRydWU8L2NvZGU+IGlm
IGFic2VudCkuIiB9LAotICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInN0YXR1cyIsICJ0
eXBlIjogInN0cmluZyIsICJlbnVtIjogWyJhY3RpdmUiLCAiaW5hY3RpdmUiLCAiZGlzYWJsZWQi
LCAic3R5bGUiXSwgIm9wdGlvbmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9uIjogIlRoZSBwcm9wZXJ0
eSBzdGF0dXM6IFwiYWN0aXZlXCIgKGltcGxpZWQgaWYgYWJzZW50KSBpZiB0aGUgcHJvcGVydHkg
aXMgZWZmZWN0aXZlIGluIHRoZSBzdHlsZSwgXCJpbmFjdGl2ZVwiIGlmIHRoZSBwcm9wZXJ0eSBp
cyBvdmVycmlkZGVuIGJ5IGEgc2FtZS1uYW1lZCBwcm9wZXJ0eSBpbiB0aGlzIHN0eWxlIGxhdGVy
IG9uLCBcImRpc2FibGVkXCIgaWYgdGhlIHByb3BlcnR5IGlzIGRpc2FibGVkIGJ5IHRoZSB1c2Vy
LCBcInN0eWxlXCIgaWYgdGhlIHByb3BlcnR5IGlzIHJlcG9ydGVkIGJ5IHRoZSBicm93c2VyIHJh
dGhlciB0aGFuIGJ5IHRoZSBDU1Mgc291cmNlIHBhcnNlci4iIH0sCisgICAgICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAic3RhdHVzIiwgIiRyZWYiOiAiQ1NTUHJvcGVydHlTdGF0dXMiLCAib3B0
aW9uYWwiOiB0cnVlLCAiZGVzY3JpcHRpb24iOiAiV2hldGhlciB0aGUgcHJvcGVydHkgaXMgYWN0
aXZlIG9yIGRpc2FibGVkLiIgfSwKICAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzaG9y
dGhhbmROYW1lIiwgInR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjogdHJ1ZSwgImRlc2NyaXB0
aW9uIjogIlRoZSByZWxhdGVkIHNob3J0aGFuZCBwcm9wZXJ0eSBuYW1lIChhYnNlbnQgaWYgdGhp
cyBwcm9wZXJ0eSBpcyBub3QgYSBsb25naGFuZCkuIiB9LAogICAgICAgICAgICAgICAgICAgICB7
ICJuYW1lIjogInJhbmdlIiwgIiRyZWYiOiAiU291cmNlUmFuZ2UiLCAib3B0aW9uYWwiOiB0cnVl
LCAiZGVzY3JpcHRpb24iOiAiVGhlIGVudGlyZSBwcm9wZXJ0eSByYW5nZSBpbiB0aGUgZW5jbG9z
aW5nIHN0eWxlIGRlY2xhcmF0aW9uIChpZiBhdmFpbGFibGUpLiIgfQogICAgICAgICAgICAgICAg
IF0sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVmVyc2lvbnMvSW5zcGVjdG9y
LWlPUy03LjAuanNvbiBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9WZXJzaW9ucy9JbnNwZWN0b3It
aU9TLTcuMC5qc29uCmluZGV4IGQwNTMyMDliNjI5Mzk4ZDZjMDg5NzMyY2MyZGJiYWVlMjE3OWM1
YzAuLjY4YWUxYjUwNzE3NWQyNDFmNmQ5NjcwM2EyYWI0YWU1YmFkYzhkZTggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9WZXJzaW9ucy9JbnNwZWN0b3ItaU9TLTcuMC5qc29uCisr
KyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9WZXJzaW9ucy9JbnNwZWN0b3ItaU9TLTcuMC5qc29u
CkBAIC02NSwyNiArNjUsMjUgQEAKICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICB9LAog
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJpZCI6ICJGcmFtZVJlc291cmNlIiwKKyAg
ICAgICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAorICAgICAgICAgICAgICAgICJwcm9wZXJ0
aWVzIjogWworICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInVybCIsICJ0eXBlIjogInN0
cmluZyIsICJkZXNjcmlwdGlvbiI6ICJSZXNvdXJjZSBVUkwuIiB9LAorICAgICAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogInR5cGUiLCAiJHJlZiI6ICJSZXNvdXJjZVR5cGUiLCAiZGVzY3JpcHRp
b24iOiAiVHlwZSBvZiB0aGlzIHJlc291cmNlLiIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJtaW1lVHlwZSIsICJ0eXBlIjogInN0cmluZyIsICJkZXNjcmlwdGlvbiI6ICJSZXNv
dXJjZSBtaW1lVHlwZSBhcyBkZXRlcm1pbmVkIGJ5IHRoZSBicm93c2VyLiIgfSwKKyAgICAgICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJmYWlsZWQiLCAidHlwZSI6ICJib29sZWFuIiwgIm9wdGlv
bmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9uIjogIlRydWUgaWYgdGhlIHJlc291cmNlIGZhaWxlZCB0
byBsb2FkLiIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjYW5jZWxlZCIsICJ0
eXBlIjogImJvb2xlYW4iLCAib3B0aW9uYWwiOiB0cnVlLCAiZGVzY3JpcHRpb24iOiAiVHJ1ZSBp
ZiB0aGUgcmVzb3VyY2Ugd2FzIGNhbmNlbGVkIGR1cmluZyBsb2FkaW5nLiIgfSwKKyAgICAgICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJzb3VyY2VNYXBVUkwiLCAidHlwZSI6ICJzdHJpbmciLCAi
b3B0aW9uYWwiOiB0cnVlLCAiZGVzY3JpcHRpb24iOiAiVVJMIG9mIHNvdXJjZSBtYXAgYXNzb2Np
YXRlZCB3aXRoIHRoaXMgcmVzb3VyY2UgKGlmIGFueSkuIiB9CisgICAgICAgICAgICAgICAgXQor
ICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAiaWQiOiAiRnJh
bWVSZXNvdXJjZVRyZWUiLAogICAgICAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCiAgICAg
ICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkluZm9ybWF0aW9uIGFib3V0IHRoZSBGcmFtZSBo
aWVyYXJjaHkgYWxvbmcgd2l0aCB0aGVpciBjYWNoZWQgcmVzb3VyY2VzLiIsCiAgICAgICAgICAg
ICAgICAgInByb3BlcnRpZXMiOiBbCiAgICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZnJh
bWUiLCAiJHJlZiI6ICJGcmFtZSIsICJkZXNjcmlwdGlvbiI6ICJGcmFtZSBpbmZvcm1hdGlvbiBm
b3IgdGhpcyB0cmVlIGl0ZW0uIiB9LAogICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNo
aWxkRnJhbWVzIiwgInR5cGUiOiAiYXJyYXkiLCAib3B0aW9uYWwiOiB0cnVlLCAiaXRlbXMiOiB7
ICIkcmVmIjogIkZyYW1lUmVzb3VyY2VUcmVlIiB9LCAiZGVzY3JpcHRpb24iOiAiQ2hpbGQgZnJh
bWVzLiIgfSwKLSAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJyZXNvdXJjZXMiLCAidHlw
ZSI6ICJhcnJheSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAiaXRlbXMiOiB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAicHJvcGVydGllcyI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJ1cmwiLCAidHlwZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRpb24iOiAiUmVz
b3VyY2UgVVJMLiIgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJ0eXBlIiwgIiRyZWYiOiAiUmVzb3VyY2VUeXBlIiwgImRlc2NyaXB0aW9uIjogIlR5cGUgb2Yg
dGhpcyByZXNvdXJjZS4iIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAibWltZVR5cGUiLCAidHlwZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRpb24iOiAiUmVzb3Vy
Y2UgbWltZVR5cGUgYXMgZGV0ZXJtaW5lZCBieSB0aGUgYnJvd3Nlci4iIH0sCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZmFpbGVkIiwgInR5cGUiOiAiYm9vbGVh
biIsICJvcHRpb25hbCI6IHRydWUsICJkZXNjcmlwdGlvbiI6ICJUcnVlIGlmIHRoZSByZXNvdXJj
ZSBmYWlsZWQgdG8gbG9hZC4iIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAiY2FuY2VsZWQiLCAidHlwZSI6ICJib29sZWFuIiwgIm9wdGlvbmFsIjogdHJ1ZSwg
ImRlc2NyaXB0aW9uIjogIlRydWUgaWYgdGhlIHJlc291cmNlIHdhcyBjYW5jZWxlZCBkdXJpbmcg
bG9hZGluZy4iIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
c291cmNlTWFwVVJMIiwgInR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjogdHJ1ZSwgImRlc2Ny
aXB0aW9uIjogIlVSTCBvZiBzb3VyY2UgbWFwIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHJlc291cmNl
IChpZiBhbnkpLiIgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KLSAgICAgICAgICAg
ICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAi
SW5mb3JtYXRpb24gYWJvdXQgZnJhbWUgcmVzb3VyY2VzLiIKLSAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInJlc291cmNlcyIsICJ0eXBlIjogImFy
cmF5IiwgIml0ZW1zIjogeyAiJHJlZiI6ICJGcmFtZVJlc291cmNlIiB9LCAiZGVzY3JpcHRpb24i
OiAiSW5mb3JtYXRpb24gYWJvdXQgZnJhbWUgcmVzb3VyY2VzLiIgfQogICAgICAgICAgICAgICAg
IF0KICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICB7CkBAIC0xOTE3LDYgKzE5MTYsMTIgQEAK
ICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiQ1NTIHN0eWxlIHJlcHJlc2VudGF0aW9u
LiIKICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgImlkIjog
IkNTU1Byb3BlcnR5U3RhdHVzIiwKKyAgICAgICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAor
ICAgICAgICAgICAgICAgICJlbnVtIjogWyJhY3RpdmUiLCAiaW5hY3RpdmUiLCAiZGlzYWJsZWQi
LCAic3R5bGUiXSwKKyAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVGhlIHByb3BlcnR5
IHN0YXR1czogXCJhY3RpdmVcIiAoaW1wbGllZCBpZiBhYnNlbnQpIGlmIHRoZSBwcm9wZXJ0eSBp
cyBlZmZlY3RpdmUgaW4gdGhlIHN0eWxlLCBcImluYWN0aXZlXCIgaWYgdGhlIHByb3BlcnR5IGlz
IG92ZXJyaWRkZW4gYnkgYSBzYW1lLW5hbWVkIHByb3BlcnR5IGluIHRoaXMgc3R5bGUgbGF0ZXIg
b24sIFwiZGlzYWJsZWRcIiBpZiB0aGUgcHJvcGVydHkgaXMgZGlzYWJsZWQgYnkgdGhlIHVzZXIs
IFwic3R5bGVcIiBpZiB0aGUgcHJvcGVydHkgaXMgcmVwb3J0ZWQgYnkgdGhlIGJyb3dzZXIgcmF0
aGVyIHRoYW4gYnkgdGhlIENTUyBzb3VyY2UgcGFyc2VyLiIKKyAgICAgICAgICAgIH0sCisgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgImlkIjogIkNTU1Byb3BlcnR5IiwKICAgICAgICAg
ICAgICAgICAidHlwZSI6ICJvYmplY3QiLAogICAgICAgICAgICAgICAgICJwcm9wZXJ0aWVzIjog
WwpAQCAtMTkyNiw3ICsxOTMxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJp
bXBsaWNpdCIsICJ0eXBlIjogImJvb2xlYW4iLCAib3B0aW9uYWwiOiB0cnVlLCAiZGVzY3JpcHRp
b24iOiAiV2hldGhlciB0aGUgcHJvcGVydHkgaXMgaW1wbGljaXQgKGltcGxpZXMgPGNvZGU+ZmFs
c2U8L2NvZGU+IGlmIGFic2VudCkuIiB9LAogICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjog
InRleHQiLCAidHlwZSI6ICJzdHJpbmciLCAib3B0aW9uYWwiOiB0cnVlLCAiZGVzY3JpcHRpb24i
OiAiVGhlIGZ1bGwgcHJvcGVydHkgdGV4dCBhcyBzcGVjaWZpZWQgaW4gdGhlIHN0eWxlLiIgfSwK
ICAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwYXJzZWRPayIsICJ0eXBlIjogImJvb2xl
YW4iLCAib3B0aW9uYWwiOiB0cnVlLCAiZGVzY3JpcHRpb24iOiAiV2hldGhlciB0aGUgcHJvcGVy
dHkgaXMgdW5kZXJzdG9vZCBieSB0aGUgYnJvd3NlciAoaW1wbGllcyA8Y29kZT50cnVlPC9jb2Rl
PiBpZiBhYnNlbnQpLiIgfSwKLSAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzdGF0dXMi
LCAidHlwZSI6ICJzdHJpbmciLCAiZW51bSI6IFsiYWN0aXZlIiwgImluYWN0aXZlIiwgImRpc2Fi
bGVkIiwgInN0eWxlIl0sICJvcHRpb25hbCI6IHRydWUsICJkZXNjcmlwdGlvbiI6ICJUaGUgcHJv
cGVydHkgc3RhdHVzOiBcImFjdGl2ZVwiIGlmIHRoZSBwcm9wZXJ0eSBpcyBlZmZlY3RpdmUgaW4g
dGhlIHN0eWxlLCBcImluYWN0aXZlXCIgaWYgdGhlIHByb3BlcnR5IGlzIG92ZXJyaWRkZW4gYnkg
YSBzYW1lLW5hbWVkIHByb3BlcnR5IGluIHRoaXMgc3R5bGUgbGF0ZXIgb24sIFwiZGlzYWJsZWRc
IiBpZiB0aGUgcHJvcGVydHkgaXMgZGlzYWJsZWQgYnkgdGhlIHVzZXIsIFwic3R5bGVcIiAoaW1w
bGllZCBpZiBhYnNlbnQpIGlmIHRoZSBwcm9wZXJ0eSBpcyByZXBvcnRlZCBieSB0aGUgYnJvd3Nl
ciByYXRoZXIgdGhhbiBieSB0aGUgQ1NTIHNvdXJjZSBwYXJzZXIuIiB9LAorICAgICAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogInN0YXR1cyIsICIkcmVmIjogIkNTU1Byb3BlcnR5U3RhdHVzIiwg
Im9wdGlvbmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9uIjogIldoZXRoZXIgdGhlIHByb3BlcnR5IGlz
IGFjdGl2ZSBvciBkaXNhYmxlZC4iIH0sCiAgICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
cmFuZ2UiLCAiJHJlZiI6ICJTb3VyY2VSYW5nZSIsICJvcHRpb25hbCI6IHRydWUsICJkZXNjcmlw
dGlvbiI6ICJUaGUgZW50aXJlIHByb3BlcnR5IHJhbmdlIGluIHRoZSBlbmNsb3Npbmcgc3R5bGUg
ZGVjbGFyYXRpb24gKGlmIGF2YWlsYWJsZSkuIiB9CiAgICAgICAgICAgICAgICAgXSwKICAgICAg
ICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiQ1NTIHN0eWxlIGVmZmVjdGl2ZSB2aXN1YWwgZGlt
ZW5zaW9ucyBhbmQgc291cmNlIG9mZnNldHMuIgpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9n
IGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IGY5NjhkNWU0MDY1MzIwNjYxMDVlMjZiNzM1NmEzMzE0
YWNkNDU5ZTcuLmY4YWEyY2VmYzdmOTNjYmQ5Njg5NmUzYTdhMzM0ODhkMjYzMzVmYzIgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0
NCBAQAorMjAxNC0wOC0xNCAgQnJpYW4gSi4gQnVyZyAgPGJ1cmdAY3Mud2FzaGluZ3Rvbi5lZHU+
CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogcmV3cml0ZSBDb2RlR2VuZXJhdG9ySW5zcGVjdG9y
IHRvIGJlIG1vZHVsYXIgYW5kIHRlc3RhYmxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMzE1OTYKKworICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGgg
UGVjb3Jhcm8uCisKKyAgICAgICAgKiBTY3JpcHRzL3J1bi1pbnNwZWN0b3ItZ2VuZXJhdG9yLXRl
c3RzOiBBZGRlZC4KKyAgICAgICAgKG1haW4pOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkv
aW5zcGVjdG9yL19faW5pdF9fLnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5
L2luc3BlY3Rvci9tYWluLnB5OiBBZGRlZC4KKyAgICAgICAgKEluc3BlY3RvckdlbmVyYXRvclRl
c3RzKToKKyAgICAgICAgKEluc3BlY3RvckdlbmVyYXRvclRlc3RzLl9faW5pdF9fKToKKyAgICAg
ICAgKEluc3BlY3RvckdlbmVyYXRvclRlc3RzLmdlbmVyYXRlX2Zyb21fanNvbik6CisgICAgICAg
IChJbnNwZWN0b3JHZW5lcmF0b3JUZXN0cy53cml0ZV9lcnJvcl9maWxlKToKKyAgICAgICAgKElu
c3BlY3RvckdlbmVyYXRvclRlc3RzLmRldGVjdF9jaGFuZ2VzKToKKyAgICAgICAgKEluc3BlY3Rv
ckdlbmVyYXRvclRlc3RzLnJ1bl90ZXN0cyk6CisgICAgICAgIChJbnNwZWN0b3JHZW5lcmF0b3JU
ZXN0cy5tYWluKToKKworMjAxNC0wOC0wOSAgQnJpYW4gSi4gQnVyZyAgPGJ1cmdAY3Mud2FzaGlu
Z3Rvbi5lZHU+CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogcmV3cml0ZSBDb2RlR2VuZXJhdG9y
SW5zcGVjdG9yIHRvIGJlIG1vZHVsYXIgYW5kIHRlc3RhYmxlCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzE1OTYKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgYSB3cmFwcGVyIHNjcmlwdCBmb3IgcnVu
bmluZyBpbnNwZWN0b3IgYmluZGluZ3MgZ2VuZXJhdG9yIHRlc3RzLgorICAgICAgICBJdCBpcyBh
ZGFwdGVkIGZyb20gdGhlIERPTSBiaW5kaW5ncyBhbmQgcmVwbGF5IGdlbmVyYXRvciB0ZXN0IHNj
cmlwdHMuCisKKyAgICAgICAgKiBTY3JpcHRzL3J1bi1pbnNwZWN0b3ItZ2VuZXJhdG9yLXRlc3Rz
OiBBZGRlZC4KKyAgICAgICAgKG1haW4pOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvaW5z
cGVjdG9yL19faW5pdF9fLnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2lu
c3BlY3Rvci9tYWluLnB5OiBBZGRlZC4KKyAgICAgICAgKEluc3BlY3RvckdlbmVyYXRvclRlc3Rz
KToKKyAgICAgICAgKEluc3BlY3RvckdlbmVyYXRvclRlc3RzLl9faW5pdF9fKToKKyAgICAgICAg
KEluc3BlY3RvckdlbmVyYXRvclRlc3RzLmdlbmVyYXRlX2Zyb21fanNvbik6CisgICAgICAgIChJ
bnNwZWN0b3JHZW5lcmF0b3JUZXN0cy53cml0ZV9lcnJvcl9maWxlKToKKyAgICAgICAgKEluc3Bl
Y3RvckdlbmVyYXRvclRlc3RzLmRldGVjdF9jaGFuZ2VzKToKKyAgICAgICAgKEluc3BlY3Rvckdl
bmVyYXRvclRlc3RzLnJ1bl90ZXN0cyk6CisgICAgICAgIChJbnNwZWN0b3JHZW5lcmF0b3JUZXN0
cy5tYWluKToKKwogMjAxNC0wOC0xNCAgWmFuIERvYmVyc2VrICA8emRvYmVyc2VrQGlnYWxpYS5j
b20+CiAKICAgICAgICAgSW5pdGlhbGl6ZSBhIHNlcGFyYXRlIHZhcmlhYmxlIChUZXN0V1RGX1NP
VVJDRVMpIHdpdGggdGhlIGxpc3Qgb2YgZmlsZXMKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMv
cnVuLWluc3BlY3Rvci1nZW5lcmF0b3ItdGVzdHMgYi9Ub29scy9TY3JpcHRzL3J1bi1pbnNwZWN0
b3ItZ2VuZXJhdG9yLXRlc3RzCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFhYWIxODAwYmNhNmY3ZThhMzQ5NmU1OTE4
NDIxZWVhZTJkMzhkODIKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3J1bi1pbnNw
ZWN0b3ItZ2VuZXJhdG9yLXRlc3RzCkBAIC0wLDAgKzEsNDIgQEAKKyMhL3Vzci9iaW4vZW52IHB5
dGhvbgorIyBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisj
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisj
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisjIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0IHN5cwor
ZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtIGltcG9ydCBleGVjdXRpdmUKKworZGVmIG1haW4o
YXJndik6CisgICAgIiIiUnVucyByZXBsYXkgaW5wdXQgY29kZSBnZW5lcmF0b3Igb24gdGVzdCBz
cGVjaWZpY2F0aW9uIGZpbGVzIGFuZCBjb21wYXJlcworICAgIHRoZSByZXN1bHRzIHdpdGggcmVm
ZXJlbmNlIGZpbGVzLgorCisgICAgT3B0aW9uczoKKyAgICAgICAtLXJlc2V0LXJlc3VsdHM6IE92
ZXJ3cml0ZXMgdGhlIHJlZmVyZW5jZSBmaWxlcyB3aXRoIHRoZSBnZW5lcmF0ZWQgcmVzdWx0cy4K
KworICAgICIiIgorICAgIHJlc2V0X3Jlc3VsdHMgPSAiLS1yZXNldC1yZXN1bHRzIiBpbiBhcmd2
CisKKyAgICBmcm9tIHdlYmtpdHB5Lmluc3BlY3Rvci5tYWluIGltcG9ydCBJbnNwZWN0b3JHZW5l
cmF0b3JUZXN0cworICAgIHJldHVybiBJbnNwZWN0b3JHZW5lcmF0b3JUZXN0cyhyZXNldF9yZXN1
bHRzLCBleGVjdXRpdmUuRXhlY3V0aXZlKCkpLm1haW4oKQorCitpZiBfX25hbWVfXyA9PSAnX19t
YWluX18nOgorICAgIHN5cy5leGl0KG1haW4oc3lzLmFyZ3YpKQpkaWZmIC0tZ2l0IGEvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9pbnNwZWN0b3IvX19pbml0X18ucHkgYi9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L2luc3BlY3Rvci9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lZjY1YmVlNWJiNzdlOTZl
YmM3Y2Q5YzQ3NjQwNjkwZmJkYThhYzE5Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9pbnNwZWN0b3IvX19pbml0X18ucHkKQEAgLTAsMCArMSBAQAorIyBSZXF1aXJl
ZCBmb3IgUHl0aG9uIHRvIHNlYXJjaCB0aGlzIGRpcmVjdG9yeSBmb3IgbW9kdWxlIGZpbGVzCmRp
ZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2luc3BlY3Rvci9tYWluLnB5IGIvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9pbnNwZWN0b3IvbWFpbi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43NjlmMDQx
MmZjNjMwMzZhY2NhNzRjZjc1OWM4NzRlNTdjYjFkZWFkCi0tLSAvZGV2L251bGwKKysrIGIvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9pbnNwZWN0b3IvbWFpbi5weQpAQCAtMCwwICsxLDEzNCBAQAor
IyBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMg
Q29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMg
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIworIyAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTICJBUworIyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKKyMgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBCisjIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorIyBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitp
bXBvcnQgb3MKK2ltcG9ydCBvcy5wYXRoCitpbXBvcnQgc2h1dGlsCitpbXBvcnQgc3lzCitpbXBv
cnQgdGVtcGZpbGUKK2Zyb20gd2Via2l0cHkuY29tbW9uLmNoZWNrb3V0LnNjbS5kZXRlY3Rpb24g
aW1wb3J0IGRldGVjdF9zY21fc3lzdGVtCitmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uZXhl
Y3V0aXZlIGltcG9ydCBTY3JpcHRFcnJvcgorCisKK2NsYXNzIEluc3BlY3RvckdlbmVyYXRvclRl
c3RzOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJlc2V0X3Jlc3VsdHMsIGV4ZWN1dGl2ZSk6
CisgICAgICAgIHNlbGYucmVzZXRfcmVzdWx0cyA9IHJlc2V0X3Jlc3VsdHMKKyAgICAgICAgc2Vs
Zi5leGVjdXRpdmUgPSBleGVjdXRpdmUKKworICAgIGRlZiBnZW5lcmF0ZV9mcm9tX2pzb24oc2Vs
ZiwganNvbl9maWxlLCBvdXRwdXRfZGlyZWN0b3J5KToKKyAgICAgICAgY21kID0gWydweXRob24n
LAorICAgICAgICAgICAgICAgJ0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weScsCisgICAgICAgICAgICAgICAnLS1v
dXRwdXREaXInLCBvdXRwdXRfZGlyZWN0b3J5LAorICAgICAgICAgICAgICAgJy0tZm9yY2UnLAor
ICAgICAgICAgICAgICAgJy0tZnJhbWV3b3JrJywgJ1Rlc3QnLAorICAgICAgICAgICAgICAgJy0t
dGVzdCcsCisgICAgICAgICAgICAgICBqc29uX2ZpbGVdCisKKyAgICAgICAgZXhpdF9jb2RlID0g
MAorICAgICAgICB0cnk6CisgICAgICAgICAgICBzdGRlcnJfb3V0cHV0ID0gc2VsZi5leGVjdXRp
dmUucnVuX2NvbW1hbmQoY21kKQorICAgICAgICAgICAgaWYgc3RkZXJyX291dHB1dDoKKyAgICAg
ICAgICAgICAgICBzZWxmLndyaXRlX2Vycm9yX2ZpbGUoanNvbl9maWxlLCBvdXRwdXRfZGlyZWN0
b3J5LCBzdGRlcnJfb3V0cHV0KQorICAgICAgICBleGNlcHQgU2NyaXB0RXJyb3IsIGU6CisgICAg
ICAgICAgICBwcmludCBlLm91dHB1dAorICAgICAgICAgICAgZXhpdF9jb2RlID0gZS5leGl0X2Nv
ZGUKKyAgICAgICAgcmV0dXJuIGV4aXRfY29kZQorCisgICAgZGVmIHdyaXRlX2Vycm9yX2ZpbGUo
c2VsZiwgaW5wdXRfZmlsZXBhdGgsIG91dHB1dF9kaXJlY3RvcnksIGVycm9yX291dHB1dCk6Cisg
ICAgICAgIG91dHB1dF9maWxlcGF0aCA9IG9zLnBhdGguam9pbihvdXRwdXRfZGlyZWN0b3J5LCBv
cy5wYXRoLmJhc2VuYW1lKGlucHV0X2ZpbGVwYXRoKSArICctZXJyb3InKQorCisgICAgICAgIHdp
dGggb3BlbihvdXRwdXRfZmlsZXBhdGgsICJ3IikgYXMgb3V0cHV0X2ZpbGU6CisgICAgICAgICAg
ICBvdXRwdXRfZmlsZS53cml0ZShlcnJvcl9vdXRwdXQpCisKKyAgICBkZWYgZGV0ZWN0X2NoYW5n
ZXMoc2VsZiwgd29ya19kaXJlY3RvcnksIHJlZmVyZW5jZV9kaXJlY3RvcnkpOgorICAgICAgICBj
aGFuZ2VzX2ZvdW5kID0gRmFsc2UKKyAgICAgICAgZm9yIG91dHB1dF9maWxlIGluIG9zLmxpc3Rk
aXIod29ya19kaXJlY3RvcnkpOgorICAgICAgICAgICAgY21kID0gWydkaWZmJywKKyAgICAgICAg
ICAgICAgICAgICAnLXUnLAorICAgICAgICAgICAgICAgICAgICctTicsCisgICAgICAgICAgICAg
ICAgICAgb3MucGF0aC5qb2luKHJlZmVyZW5jZV9kaXJlY3RvcnksIG91dHB1dF9maWxlKSwKKyAg
ICAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4od29ya19kaXJlY3RvcnksIG91dHB1dF9maWxl
KV0KKworICAgICAgICAgICAgZXhpdF9jb2RlID0gMAorICAgICAgICAgICAgdHJ5OgorICAgICAg
ICAgICAgICAgIG91dHB1dCA9IHNlbGYuZXhlY3V0aXZlLnJ1bl9jb21tYW5kKGNtZCkKKyAgICAg
ICAgICAgIGV4Y2VwdCBTY3JpcHRFcnJvciwgZToKKyAgICAgICAgICAgICAgICBvdXRwdXQgPSBl
Lm91dHB1dAorICAgICAgICAgICAgICAgIGV4aXRfY29kZSA9IGUuZXhpdF9jb2RlCisKKyAgICAg
ICAgICAgIGlmIGV4aXRfY29kZSBvciBvdXRwdXQ6CisgICAgICAgICAgICAgICAgcHJpbnQgJ0ZB
SUw6ICVzJyAlIG91dHB1dF9maWxlCisgICAgICAgICAgICAgICAgcHJpbnQgb3V0cHV0CisgICAg
ICAgICAgICAgICAgY2hhbmdlc19mb3VuZCA9IFRydWUKKyAgICAgICAgICAgIGVsc2U6CisgICAg
ICAgICAgICAgICAgcHJpbnQgJ1BBU1M6ICVzJyAlIG91dHB1dF9maWxlCisgICAgICAgIHJldHVy
biBjaGFuZ2VzX2ZvdW5kCisKKyAgICBkZWYgcnVuX3Rlc3RzKHNlbGYsIGlucHV0X2RpcmVjdG9y
eSwgcmVmZXJlbmNlX2RpcmVjdG9yeSk6CisgICAgICAgIHdvcmtfZGlyZWN0b3J5ID0gcmVmZXJl
bmNlX2RpcmVjdG9yeQorCisgICAgICAgIHBhc3NlZCA9IFRydWUKKyAgICAgICAgZm9yIGlucHV0
X2ZpbGUgaW4gb3MubGlzdGRpcihpbnB1dF9kaXJlY3RvcnkpOgorICAgICAgICAgICAgKG5hbWUs
IGV4dGVuc2lvbikgPSBvcy5wYXRoLnNwbGl0ZXh0KGlucHV0X2ZpbGUpCisgICAgICAgICAgICBp
ZiBleHRlbnNpb24gIT0gJy5qc29uJzoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAg
ICAgICAgIyBHZW5lcmF0ZSBvdXRwdXQgaW50byB0aGUgd29yayBkaXJlY3RvcnkgKGVpdGhlciB0
aGUgZ2l2ZW4gb25lIG9yIGEKKyAgICAgICAgICAgICMgdGVtcCBvbmUgaWYgbm90IHJlc2V0X3Jl
c3VsdHMgaXMgcGVyZm9ybWVkKQorICAgICAgICAgICAgaWYgbm90IHNlbGYucmVzZXRfcmVzdWx0
czoKKyAgICAgICAgICAgICAgICB3b3JrX2RpcmVjdG9yeSA9IHRlbXBmaWxlLm1rZHRlbXAoKQor
CisgICAgICAgICAgICBpZiBzZWxmLmdlbmVyYXRlX2Zyb21fanNvbihvcy5wYXRoLmpvaW4oaW5w
dXRfZGlyZWN0b3J5LCBpbnB1dF9maWxlKSwgd29ya19kaXJlY3RvcnkpOgorICAgICAgICAgICAg
ICAgIHBhc3NlZCA9IEZhbHNlCisKKyAgICAgICAgICAgIGlmIHNlbGYucmVzZXRfcmVzdWx0czoK
KyAgICAgICAgICAgICAgICBwcmludCAiUmVzZXQgcmVzdWx0cyBmb3IgdGVzdDogJXMiICUgKGlu
cHV0X2ZpbGUpCisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgIyBEZXRl
Y3QgY2hhbmdlcworICAgICAgICAgICAgaWYgc2VsZi5kZXRlY3RfY2hhbmdlcyh3b3JrX2RpcmVj
dG9yeSwgcmVmZXJlbmNlX2RpcmVjdG9yeSk6CisgICAgICAgICAgICAgICAgcGFzc2VkID0gRmFs
c2UKKyAgICAgICAgICAgIHNodXRpbC5ybXRyZWUod29ya19kaXJlY3RvcnkpCisKKyAgICAgICAg
cmV0dXJuIHBhc3NlZAorCisgICAgZGVmIG1haW4oc2VsZik6CisgICAgICAgIGN1cnJlbnRfc2Nt
ID0gZGV0ZWN0X3NjbV9zeXN0ZW0ob3MuY3VyZGlyKQorICAgICAgICBvcy5jaGRpcihvcy5wYXRo
LmpvaW4oY3VycmVudF9zY20uY2hlY2tvdXRfcm9vdCwgJ1NvdXJjZScpKQorCisgICAgICAgIGFs
bF90ZXN0c19wYXNzZWQgPSBUcnVlCisKKyAgICAgICAgaW5wdXRfZGlyZWN0b3J5ID0gb3MucGF0
aC5qb2luKCdKYXZhU2NyaXB0Q29yZScsICdpbnNwZWN0b3InLCAnc2NyaXB0cycsICd0ZXN0cycp
CisgICAgICAgIHJlZmVyZW5jZV9kaXJlY3RvcnkgPSBvcy5wYXRoLmpvaW4oJ0phdmFTY3JpcHRD
b3JlJywgJ2luc3BlY3RvcicsICdzY3JpcHRzJywgJ3Rlc3RzJywgJ2V4cGVjdGVkJykKKyAgICAg
ICAgaWYgbm90IHNlbGYucnVuX3Rlc3RzKGlucHV0X2RpcmVjdG9yeSwgcmVmZXJlbmNlX2RpcmVj
dG9yeSk6CisgICAgICAgICAgICBhbGxfdGVzdHNfcGFzc2VkID0gRmFsc2UKKworICAgICAgICBw
cmludCAnJworICAgICAgICBpZiBhbGxfdGVzdHNfcGFzc2VkOgorICAgICAgICAgICAgcHJpbnQg
J0FsbCB0ZXN0cyBQQVNTIScKKyAgICAgICAgICAgIHJldHVybiAwCisgICAgICAgIGVsc2U6Cisg
ICAgICAgICAgICBwcmludCAnU29tZSB0ZXN0cyBGQUlMISAoVG8gdXBkYXRlIHRoZSByZWZlcmVu
Y2UgZmlsZXMsIGV4ZWN1dGUgInJ1bi1pbnNwZWN0b3ItZ2VuZXJhdG9yLXRlc3RzIC0tcmVzZXQt
cmVzdWx0cyIpJworICAgICAgICAgICAgcmV0dXJuIC0xCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>236640</attachid>
            <date>2014-08-14 17:27:35 -0700</date>
            <delta_ts>2014-08-15 12:11:47 -0700</delta_ts>
            <desc>Fix for GTK build (take 2)</desc>
            <filename>bug-131596-20140814172754.patch</filename>
            <type>text/plain</type>
            <size>716543</size>
            <attacher name="Brian Burg">burg</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTcyNjA5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA1
NTBlZDkyZjg3ZmRhYjI3ZjQ4MzBlMjU2ODk2MjA5Njc4NzZjYzA2Li41YWJjZTBkMDNjNGNmNTVh
ZjJkOTYwOGNmMmQ5YmZmODg3NGVjN2MzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzODYgQEAKKzIwMTQtMDgtMTQgIEJyaWFuIEouIEJ1cmcgIDxidXJnQGNzLndhc2hpbmd0
b24uZWR1PgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IHJld3JpdGUgQ29kZUdlbmVyYXRvcklu
c3BlY3RvciB0byBiZSBtb2R1bGFyIGFuZCB0ZXN0YWJsZQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMxNTk2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Sm9zZXBoIFBlY29yYXJvLgorCisgICAgICAgIFJlcGxhY2UgQ29kZUdlbmVyYXRvckluc3BlY3Rv
ci5weSB3aXRoIGdlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weS4KKyAgICAg
ICAgVGhlIG5ldyBnZW5lcmF0b3IgZGVjb3VwbGVzIHBhcnNpbmcgYW5kIHR5cGVjaGVja2luZyBh
IG1vZGVsIG9mIHRoZSBwcm90b2NvbCBmcm9tCisgICAgICAgIGNvZGUgZ2VuZXJhdGlvbi4gRWFj
aCBnZW5lcmF0ZWQgZmlsZSBpcyBjcmVhdGVkIGJ5IGEgZGlmZmVyZW50IHN1YmNsYXNzIG9mIEdl
bmVyYXRvci4KKyAgICAgICAgSGVscGVyIG1ldGhvZHMgdG8gY29tcHV0ZSB2YXJpb3VzIHR5cGUg
c2lnbmF0dXJlcyBhcmUgc2hhcmVkIGFtb25nIGdlbmVyYXRvcnMuCisKKyAgICAgICAgVGhpcyBw
YXRjaCBpbnRyb2R1Y2VzIGEgdGVzdCBoYXJuZXNzIGFuZCBhIHRlc3Qgc3VpdGUgdGhhdCBjb3Zl
cnMgYWxsIGZ1bmN0aW9uYWxpdHkuCisKKyAgICAgICAgQXNpZGUgZnJvbSBob29raW5nIHVwIHRo
ZSBuZXcgaW5zcGVjdG9yIGJpbmRpbmdzIGdlbmVyYXRvciB0byB0aGUgYnVpbGQgc3lzdGVtLAor
ICAgICAgICB0aGVyZSBhcmUgYSBmZXcgY29taW5nbGVkIGNoYW5nZXMgdGhhdCB3b3VsZCBiZSBw
YWluZnVsIHRvIHNwbGl0IGZyb20gdGhlIG1haW4KKyAgICAgICAgcGF0Y2g6CisKKyAgICAgICAg
Q29udmVydCBwcm90b2NvbCBlbnVtZXJhdGlvbiB0eXBlcyBmcm9tIHN0cnVjdC1uYW1lc3BhY2Vk
IGVudW1zIHRvIEMrKyBzY29wZWQgZW51bXMuCisKKyAgICAgICAgTW92ZSBhbGwgcnVudGltZUNh
c3QoKSwgYXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoKSwgYW5kIFJ1bnRpbWVDYXN0SGVscGVy
IG1ldGhvZHMgdG8gc3RhdGljCisgICAgICAgIG1ldGhvZHMgb2YgQmluZGluZ1RyYWl0cyBzcGVj
aWFsaXphdGlvbnMuCisKKyAgICAgICAgVG9nZXRoZXIsIHRoZXNlIGNoYW5nZXMgcmVkdWNlIGR1
cGxpY2F0aW9uIGFuZCBtYWtlIGl0IHBvc3NpYmxlIHRvIGZvcndhcmQtZGVjbGFyZQorICAgICAg
ICBhbGwgcHJvdG9jb2wgZW51bSBhbmQgb2JqZWN0IHR5cGVzLCByZWR1Y2luZyB3ZWlyZCBvcmRl
cmluZyBkZXBlbmRlbmNpZXMgYmV0d2VlbiBkb21haW5zLgorCisgICAgICAgICogQ01ha2VMaXN0
cy50eHQ6CisgICAgICAgICogRGVyaXZlZFNvdXJjZXMubWFrZToKKyAgICAgICAgKiBKYXZhU2Ny
aXB0Q29yZS52Y3hwcm9qL2NvcHktZmlsZXMuY21kOgorICAgICAgICAqIEphdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogaW5zcGVjdG9yL0NvbnNvbGVN
ZXNzYWdlLmNwcDogQ29udmVydCB0byBzY29wZWQgZW51bXMuCisgICAgICAgIChJbnNwZWN0b3I6
Om1lc3NhZ2VTb3VyY2VWYWx1ZSk6CisgICAgICAgIChJbnNwZWN0b3I6Om1lc3NhZ2VUeXBlVmFs
dWUpOgorICAgICAgICAoSW5zcGVjdG9yOjptZXNzYWdlTGV2ZWxWYWx1ZSk6CisgICAgICAgICog
aW5zcGVjdG9yL0luamVjdGVkU2NyaXB0LmNwcDogQ29udmVydCB0byBzY29wZWQgZW51bXMgYW5k
IEJpbmRpbmdUcmFpdHMuCisgICAgICAgIChJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0OjpnZXRG
dW5jdGlvbkRldGFpbHMpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdDo6Z2V0
UHJvcGVydGllcyk6CisgICAgICAgIChJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0OjpnZXRJbnRl
cm5hbFByb3BlcnRpZXMpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdDo6d3Jh
cENhbGxGcmFtZXMpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdDo6d3JhcE9i
amVjdCk6CisgICAgICAgIChJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0Ojp3cmFwVGFibGUpOgor
ICAgICAgICAqIGluc3BlY3Rvci9JbmplY3RlZFNjcmlwdEJhc2UuY3BwOiBDb252ZXJ0IEluc3Bl
Y3RvclZhbHVlOjpUeXBlIHRvIGEgc2NvcGVkIGVudW0uCisgICAgICAgIChJbnNwZWN0b3I6Oklu
amVjdGVkU2NyaXB0QmFzZTo6bWFrZUV2YWxDYWxsKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5q
ZWN0ZWRTY3JpcHRNYW5hZ2VyLmNwcDoKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3Jp
cHRNYW5hZ2VyOjppbmplY3RlZFNjcmlwdEZvck9iamVjdElkKToKKyAgICAgICAgKiBpbnNwZWN0
b3IvSW5zcGVjdG9yVHlwZUJ1aWxkZXIuaDoKKyAgICAgICAgKEluc3BlY3Rvcjo6VHlwZUJ1aWxk
ZXI6OkFycmF5OjpjcmVhdGUpOgorICAgICAgICAoSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6U3Ry
dWN0SXRlbVRyYWl0czo6cHVzaFJlZlB0cik6CisgICAgICAgIChJbnNwZWN0b3I6OlR5cGVCdWls
ZGVyOjpBcnJheUl0ZW1IZWxwZXI8U3RyaW5nPjo6VHJhaXRzOjpwdXNoUmF3KToKKyAgICAgICAg
KEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5SXRlbUhlbHBlcjxpbnQ+OjpUcmFpdHM6OnB1
c2hSYXcpOgorICAgICAgICAoSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXlJdGVtSGVscGVy
PGRvdWJsZT46OlRyYWl0czo6cHVzaFJhdyk6CisgICAgICAgIChJbnNwZWN0b3I6OlR5cGVCdWls
ZGVyOjpBcnJheUl0ZW1IZWxwZXI8Ym9vbD46OlRyYWl0czo6cHVzaFJhdyk6CisgICAgICAgIChJ
bnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheUl0ZW1IZWxwZXI8SW5zcGVjdG9yVmFsdWU+OjpU
cmFpdHM6OnB1c2hSZWZQdHIpOgorICAgICAgICAoSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJy
YXlJdGVtSGVscGVyPEluc3BlY3Rvck9iamVjdD46OlRyYWl0czo6cHVzaFJlZlB0cik6CisgICAg
ICAgIChJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheUl0ZW1IZWxwZXI8SW5zcGVjdG9yQXJy
YXk+OjpUcmFpdHM6OnB1c2hSZWZQdHIpOgorICAgICAgICAoSW5zcGVjdG9yOjpUeXBlQnVpbGRl
cjo6UHJpbWl0aXZlQmluZGluZ1RyYWl0czo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUpOgor
ICAgICAgICAoSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QmluZGluZ1RyYWl0czxUeXBlQnVpbGRl
cjo6QXJyYXk8VD4+OjpydW50aW1lQ2FzdCk6CisgICAgICAgIChJbnNwZWN0b3I6OlR5cGVCdWls
ZGVyOjpCaW5kaW5nVHJhaXRzPFR5cGVCdWlsZGVyOjpBcnJheTxUPj46OmFzc2VydFZhbHVlSGFz
RXhwZWN0ZWRUeXBlKToKKyAgICAgICAgKEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkJpbmRpbmdU
cmFpdHM8SW5zcGVjdG9yVmFsdWU+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZSk6CisgICAg
ICAgIChJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpCaW5kaW5nVHJhaXRzPGludD46OmFzc2VydFZh
bHVlSGFzRXhwZWN0ZWRUeXBlKToKKyAgICAgICAgKEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkV4
YWN0bHlJbnQ6OkV4YWN0bHlJbnQpOiBEZWxldGVkLiBJdCB3YXMgbm90IHVzZWQuCisgICAgICAg
IChJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpFeGFjdGx5SW50OjpvcGVyYXRvciBpbnQpOiBEZWxl
dGVkLgorICAgICAgICAoSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6RXhhY3RseUludDo6Y2FzdF90
b19pbnQpOiBEZWxldGVkLgorICAgICAgICAoSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6RXhhY3Rs
eUludDo6Y2FzdF90b19pbnQ8aW50Pik6IERlbGV0ZWQuCisgICAgICAgIChJbnNwZWN0b3I6OlR5
cGVCdWlsZGVyOjppbnQ+KTogRGVsZXRlZC4KKyAgICAgICAgKEluc3BlY3Rvcjo6VHlwZUJ1aWxk
ZXI6OlJ1bnRpbWVDYXN0SGVscGVyOjphc3NlcnRUeXBlKTogRGVsZXRlZC4KKyAgICAgICAgKElu
c3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlJ1bnRpbWVDYXN0SGVscGVyOjphc3NlcnRBbnkpOiBEZWxl
dGVkLgorICAgICAgICAoSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UnVudGltZUNhc3RIZWxwZXI6
OmFzc2VydEludCk6IERlbGV0ZWQuCisgICAgICAgIChJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpB
cnJheTo6cnVudGltZUNhc3QpOiBEZWxldGVkLgorICAgICAgICAoSW5zcGVjdG9yOjpUeXBlQnVp
bGRlcjo6QXJyYXk6OmFzc2VydENvcnJlY3RWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgIChJbnNw
ZWN0b3I6OlR5cGVCdWlsZGVyOjpTdHJ1Y3RJdGVtVHJhaXRzOjphc3NlcnRDb3JyZWN0VmFsdWUp
OiBEZWxldGVkLgorICAgICAgICAoSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXlJdGVtSGVs
cGVyPFN0cmluZz46OlRyYWl0czo6YXNzZXJ0Q29ycmVjdFZhbHVlKTogRGVsZXRlZC4KKyAgICAg
ICAgKEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5SXRlbUhlbHBlcjxpbnQ+OjpUcmFpdHM6
OmFzc2VydENvcnJlY3RWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgIChJbnNwZWN0b3I6OlR5cGVC
dWlsZGVyOjpBcnJheUl0ZW1IZWxwZXI8ZG91YmxlPjo6VHJhaXRzOjphc3NlcnRDb3JyZWN0VmFs
dWUpOiBEZWxldGVkLgorICAgICAgICAoSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXlJdGVt
SGVscGVyPGJvb2w+OjpUcmFpdHM6OmFzc2VydENvcnJlY3RWYWx1ZSk6IERlbGV0ZWQuCisgICAg
ICAgIChJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheUl0ZW1IZWxwZXI8SW5zcGVjdG9yVmFs
dWU+OjpUcmFpdHM6OmFzc2VydENvcnJlY3RWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgIChJbnNw
ZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheUl0ZW1IZWxwZXI8SW5zcGVjdG9yT2JqZWN0Pjo6VHJh
aXRzOjphc3NlcnRDb3JyZWN0VmFsdWUpOiBEZWxldGVkLgorICAgICAgICAoSW5zcGVjdG9yOjpU
eXBlQnVpbGRlcjo6QXJyYXlJdGVtSGVscGVyPEluc3BlY3RvckFycmF5Pjo6VHJhaXRzOjphc3Nl
cnRDb3JyZWN0VmFsdWUpOiBEZWxldGVkLgorICAgICAgICAoSW5zcGVjdG9yOjpUeXBlQnVpbGRl
cjo6QXJyYXlJdGVtSGVscGVyPFR5cGVCdWlsZGVyOjpBcnJheTxUPj46OlRyYWl0czo6YXNzZXJ0
Q29ycmVjdFZhbHVlKTogRGVsZXRlZC4KKworICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JW
YWx1ZXMuY3BwOiBDb252ZXJ0IEluc3BlY3RvclZhbHVlOjpUeXBlIHRvIGEgc2NvcGVkIGVudW0u
CisgICAgICAgIChJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlOjp3cml0ZUpTT04pOgorICAgICAg
ICAoSW5zcGVjdG9yOjpJbnNwZWN0b3JCYXNpY1ZhbHVlOjphc0Jvb2xlYW4pOgorICAgICAgICAo
SW5zcGVjdG9yOjpJbnNwZWN0b3JCYXNpY1ZhbHVlOjphc051bWJlcik6CisgICAgICAgIChJbnNw
ZWN0b3I6Okluc3BlY3RvckJhc2ljVmFsdWU6OndyaXRlSlNPTik6CisgICAgICAgIChJbnNwZWN0
b3I6Okluc3BlY3RvclN0cmluZzo6d3JpdGVKU09OKToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5z
cGVjdG9yT2JqZWN0QmFzZTo6SW5zcGVjdG9yT2JqZWN0QmFzZSk6CisgICAgICAgIChJbnNwZWN0
b3I6Okluc3BlY3Rvck9iamVjdEJhc2U6OnNldEFycmF5KTogVGFrZSBJbnNwZWN0b3JBcnJheUJh
c2UuCisgICAgICAgIChJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdEJhc2U6OnNldE9iamVjdCk6
IFRha2UgSW5zcGVjdG9yT2JqZWN0QmFzZS4KKyAgICAgICAgKEluc3BlY3Rvcjo6SW5zcGVjdG9y
QXJyYXlCYXNlOjpJbnNwZWN0b3JBcnJheUJhc2UpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNw
ZWN0b3JWYWx1ZXMuaDoKKworICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRGVi
dWdnZXJBZ2VudC5jcHA6IENvbnZlcnQgdG8gc2NvcGVkIGVudW1zLgorICAgICAgICAoSW5zcGVj
dG9yOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzY2hlZHVsZVBhdXNlT25OZXh0U3RhdGVtZW50
KToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6YnJlYWtQcm9n
cmFtKToKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQu
aDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclJ1bnRpbWVBZ2VudC5jcHA6
CisgICAgICAgIChJbnNwZWN0b3I6Okluc3BlY3RvclJ1bnRpbWVBZ2VudDo6cGFyc2UpOgorICAg
ICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUnVudGltZUFnZW50Lmg6CisKKyAgICAg
ICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5OiBSZW1vdmVk
LgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vX19pbml0X18ucHk6IEFkZGVk
LgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfYmFja2VuZF9j
b21tYW5kcy5weTogQWRkZWQuCisgICAgICAgIChCYWNrZW5kQ29tbWFuZHNHZW5lcmF0b3IpOgor
ICAgICAgICAoQmFja2VuZENvbW1hbmRzR2VuZXJhdG9yLl9faW5pdF9fKToKKyAgICAgICAgKEJh
Y2tlbmRDb21tYW5kc0dlbmVyYXRvci5tb2RlbCk6CisgICAgICAgIChCYWNrZW5kQ29tbWFuZHNH
ZW5lcmF0b3Iub3V0cHV0X2ZpbGVuYW1lKToKKyAgICAgICAgKEJhY2tlbmRDb21tYW5kc0dlbmVy
YXRvci5nZW5lcmF0ZV9saWNlbnNlKToKKyAgICAgICAgKEJhY2tlbmRDb21tYW5kc0dlbmVyYXRv
ci5nZW5lcmF0ZV9vdXRwdXQpOgorICAgICAgICAoQmFja2VuZENvbW1hbmRzR2VuZXJhdG9yLmdl
bmVyYXRlX2RvbWFpbik6CisgICAgICAgIChCYWNrZW5kQ29tbWFuZHNHZW5lcmF0b3IuZ2VuZXJh
dGVfZG9tYWluLmlzX2Fub255bW91c19lbnVtX21lbWJlcik6CisgICAgICAgIChCYWNrZW5kQ29t
bWFuZHNHZW5lcmF0b3IuZ2VuZXJhdGVfZG9tYWluLmdlbmVyYXRlX3BhcmFtZXRlcl9vYmplY3Qp
OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfYmFja2VuZF9k
aXNwYXRjaGVyX2hlYWRlci5weTogQWRkZWQuCisgICAgICAgIChCYWNrZW5kRGlzcGF0Y2hlckhl
YWRlckdlbmVyYXRvcik6CisgICAgICAgIChCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRv
ci5fX2luaXRfXyk6CisgICAgICAgIChCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvci5t
b2RlbCk6CisgICAgICAgIChCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvci5vdXRwdXRf
ZmlsZW5hbWUpOgorICAgICAgICAoQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IuZ2Vu
ZXJhdGVfbGljZW5zZSk6CisgICAgICAgIChCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRv
ci5nZW5lcmF0ZV9vdXRwdXQpOgorICAgICAgICAoQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5l
cmF0b3IuZ2VuZXJhdGVfb3V0cHV0LmZvcik6CisgICAgICAgIChCYWNrZW5kRGlzcGF0Y2hlckhl
YWRlckdlbmVyYXRvci5fZ2VuZXJhdGVfaGFuZGxlcl9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbik6
CisgICAgICAgIChCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvci5fZ2VuZXJhdGVfYW5v
bnltb3VzX2VudW1fZm9yX3BhcmFtZXRlcik6CisgICAgICAgIChCYWNrZW5kRGlzcGF0Y2hlckhl
YWRlckdlbmVyYXRvci5fZ2VuZXJhdGVfaGFuZGxlcl9kZWNsYXJhdGlvbl9mb3JfY29tbWFuZCk6
CisgICAgICAgIChCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvci5fZ2VuZXJhdGVfYXN5
bmNfaGFuZGxlcl9kZWNsYXJhdGlvbl9mb3JfY29tbWFuZCk6CisgICAgICAgIChCYWNrZW5kRGlz
cGF0Y2hlckhlYWRlckdlbmVyYXRvci5fZ2VuZXJhdGVfZGlzcGF0Y2hlcl9kZWNsYXJhdGlvbnNf
Zm9yX2RvbWFpbik6CisgICAgICAgIChCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvci5f
Z2VuZXJhdGVfZGlzcGF0Y2hlcl9kZWNsYXJhdGlvbl9mb3JfY29tbWFuZCk6CisgICAgICAgICog
aW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaW1w
bGVtZW50YXRpb24ucHk6IEFkZGVkLgorICAgICAgICAoQmFja2VuZERpc3BhdGNoZXJJbXBsZW1l
bnRhdGlvbkdlbmVyYXRvcik6CisgICAgICAgIChCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0
aW9uR2VuZXJhdG9yLl9faW5pdF9fKToKKyAgICAgICAgKEJhY2tlbmREaXNwYXRjaGVySW1wbGVt
ZW50YXRpb25HZW5lcmF0b3IubW9kZWwpOgorICAgICAgICAoQmFja2VuZERpc3BhdGNoZXJJbXBs
ZW1lbnRhdGlvbkdlbmVyYXRvci5vdXRwdXRfZmlsZW5hbWUpOgorICAgICAgICAoQmFja2VuZERp
c3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5nZW5lcmF0ZV9saWNlbnNlKToKKyAgICAg
ICAgKEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IuZ2VuZXJhdGVfb3V0
cHV0KToKKyAgICAgICAgKEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3Iu
X2dlbmVyYXRlX2hhbmRsZXJfY2xhc3NfZGVzdHJ1Y3Rvcl9mb3JfZG9tYWluKToKKyAgICAgICAg
KEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX2Rpc3Bh
dGNoZXJfaW1wbGVtZW50YXRpb25zX2Zvcl9kb21haW4pOgorICAgICAgICAoQmFja2VuZERpc3Bh
dGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfc21hbGxfZGlzcGF0Y2hlcl9z
d2l0Y2hfaW1wbGVtZW50YXRpb25fZm9yX2RvbWFpbik6CisgICAgICAgIChCYWNrZW5kRGlzcGF0
Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9sYXJnZV9kaXNwYXRjaGVyX3N3
aXRjaF9pbXBsZW1lbnRhdGlvbl9mb3JfZG9tYWluKToKKyAgICAgICAgKEJhY2tlbmREaXNwYXRj
aGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX2FzeW5jX2Rpc3BhdGNoZXJfY2xh
c3NfZm9yX2RvbWFpbik6CisgICAgICAgIChCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9u
R2VuZXJhdG9yLl9nZW5lcmF0ZV9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uX2Zvcl9jb21tYW5k
KToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2Zyb250ZW5k
X2Rpc3BhdGNoZXJfaGVhZGVyLnB5OiBBZGRlZC4KKyAgICAgICAgKEZyb250ZW5kRGlzcGF0Y2hl
ckhlYWRlckdlbmVyYXRvcik6CisgICAgICAgIChGcm9udGVuZERpc3BhdGNoZXJIZWFkZXJHZW5l
cmF0b3IuX19pbml0X18pOgorICAgICAgICAoRnJvbnRlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJh
dG9yLm1vZGVsKToKKyAgICAgICAgKEZyb250ZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvci5v
dXRwdXRfZmlsZW5hbWUpOgorICAgICAgICAoRnJvbnRlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJh
dG9yLmdlbmVyYXRlX2xpY2Vuc2UpOgorICAgICAgICAoRnJvbnRlbmREaXNwYXRjaGVySGVhZGVy
R2VuZXJhdG9yLmdlbmVyYXRlX291dHB1dCk6CisgICAgICAgIChGcm9udGVuZERpc3BhdGNoZXJI
ZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRlX2Fub255bW91c19lbnVtX2Zvcl9wYXJhbWV0ZXIpOgor
ICAgICAgICAoRnJvbnRlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yLl9nZW5lcmF0ZV9kaXNw
YXRjaGVyX2RlY2xhcmF0aW9uc19mb3JfZG9tYWluKToKKyAgICAgICAgKEZyb250ZW5kRGlzcGF0
Y2hlckhlYWRlckdlbmVyYXRvci5fZ2VuZXJhdGVfZGlzcGF0Y2hlcl9kZWNsYXJhdGlvbl9mb3Jf
ZXZlbnQpOgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfZnJv
bnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weTogQWRkZWQuCisgICAgICAgIChGcm9u
dGVuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcik6CisgICAgICAgIChGcm9udGVu
ZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fX2luaXRfXyk6CisgICAgICAgIChG
cm9udGVuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5tb2RlbCk6CisgICAgICAg
IChGcm9udGVuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5vdXRwdXRfZmlsZW5h
bWUpOgorICAgICAgICAoRnJvbnRlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3Iu
Z2VuZXJhdGVfbGljZW5zZSk6CisgICAgICAgIChGcm9udGVuZERpc3BhdGNoZXJJbXBsZW1lbnRh
dGlvbkdlbmVyYXRvci5nZW5lcmF0ZV9vdXRwdXQpOgorICAgICAgICAoRnJvbnRlbmREaXNwYXRj
aGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX2Rpc3BhdGNoZXJfaW1wbGVtZW50
YXRpb25zX2Zvcl9kb21haW4pOgorICAgICAgICAoRnJvbnRlbmREaXNwYXRjaGVySW1wbGVtZW50
YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb25fZm9yX2V2
ZW50KToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX3R5cGVf
YnVpbGRlcl9oZWFkZXIucHk6IEFkZGVkLgorICAgICAgICAoVHlwZUJ1aWxkZXJIZWFkZXJHZW5l
cmF0b3IpOgorICAgICAgICAoVHlwZUJ1aWxkZXJIZWFkZXJHZW5lcmF0b3IuX19pbml0X18pOgor
ICAgICAgICAoVHlwZUJ1aWxkZXJIZWFkZXJHZW5lcmF0b3IubW9kZWwpOgorICAgICAgICAoVHlw
ZUJ1aWxkZXJIZWFkZXJHZW5lcmF0b3Iub3V0cHV0X2ZpbGVuYW1lKToKKyAgICAgICAgKFR5cGVC
dWlsZGVySGVhZGVyR2VuZXJhdG9yLmdlbmVyYXRlX2xpY2Vuc2UpOgorICAgICAgICAoVHlwZUJ1
aWxkZXJIZWFkZXJHZW5lcmF0b3IuZ2VuZXJhdGVfb3V0cHV0KToKKyAgICAgICAgKFR5cGVCdWls
ZGVySGVhZGVyR2VuZXJhdG9yLl9nZW5lcmF0ZV9mb3J3YXJkX2RlY2xhcmF0aW9ucyk6CisgICAg
ICAgIChfZ2VuZXJhdGVfdHlwZWRlZnMpOgorICAgICAgICAoX2dlbmVyYXRlX3R5cGVkZWZzX2Zv
cl9kb21haW4pOgorICAgICAgICAoX2dlbmVyYXRlX2J1aWxkZXJzX2Zvcl9kb21haW4pOgorICAg
ICAgICAoX2dlbmVyYXRlX2NsYXNzX2Zvcl9vYmplY3RfZGVjbGFyYXRpb24pOgorICAgICAgICAo
X2dlbmVyYXRlX3N0cnVjdF9mb3JfZW51bV9kZWNsYXJhdGlvbik6CisgICAgICAgIChfZ2VuZXJh
dGVfc3RydWN0X2Zvcl9hbm9ueW1vdXNfZW51bV9tZW1iZXIpOgorICAgICAgICAoX2dlbmVyYXRl
X3N0cnVjdF9mb3JfYW5vbnltb3VzX2VudW1fbWVtYmVyLmFwcGx5X2luZGVudGF0aW9uKToKKyAg
ICAgICAgKF9nZW5lcmF0ZV9zdHJ1Y3RfZm9yX2VudW1fdHlwZSk6CisgICAgICAgIChfZ2VuZXJh
dGVfYnVpbGRlcl9zdGF0ZV9lbnVtKToKKyAgICAgICAgKF9nZW5lcmF0ZV9idWlsZGVyX3NldHRl
cl9mb3JfbWVtYmVyKToKKyAgICAgICAgKF9nZW5lcmF0ZV91bmNoZWNrZWRfc2V0dGVyX2Zvcl9t
ZW1iZXIpOgorICAgICAgICAoX2dlbmVyYXRlX2ZvcndhcmRfZGVjbGFyYXRpb25zX2Zvcl9iaW5k
aW5nX3RyYWl0cyk6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0
ZV90eXBlX2J1aWxkZXJfaW1wbGVtZW50YXRpb24ucHk6IEFkZGVkLgorICAgICAgICAoVHlwZUJ1
aWxkZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcik6CisgICAgICAgIChUeXBlQnVpbGRlckltcGxl
bWVudGF0aW9uR2VuZXJhdG9yLl9faW5pdF9fKToKKyAgICAgICAgKFR5cGVCdWlsZGVySW1wbGVt
ZW50YXRpb25HZW5lcmF0b3IubW9kZWwpOgorICAgICAgICAoVHlwZUJ1aWxkZXJJbXBsZW1lbnRh
dGlvbkdlbmVyYXRvci5vdXRwdXRfZmlsZW5hbWUpOgorICAgICAgICAoVHlwZUJ1aWxkZXJJbXBs
ZW1lbnRhdGlvbkdlbmVyYXRvci5nZW5lcmF0ZV9saWNlbnNlKToKKyAgICAgICAgKFR5cGVCdWls
ZGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IuZ2VuZXJhdGVfb3V0cHV0KToKKyAgICAgICAgKFR5
cGVCdWlsZGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX2VudW1fbWFwcGluZyk6
CisgICAgICAgIChUeXBlQnVpbGRlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9v
cGVuX2ZpZWxkX25hbWVzKToKKyAgICAgICAgKFR5cGVCdWlsZGVySW1wbGVtZW50YXRpb25HZW5l
cmF0b3IuX2dlbmVyYXRlX2J1aWxkZXJzX2Zvcl9kb21haW4pOgorICAgICAgICAoVHlwZUJ1aWxk
ZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfcnVudGltZV9jYXN0X2Zvcl9vYmpl
Y3RfZGVjbGFyYXRpb24pOgorICAgICAgICAoVHlwZUJ1aWxkZXJJbXBsZW1lbnRhdGlvbkdlbmVy
YXRvci5fZ2VuZXJhdGVfYXNzZXJ0aW9uX2Zvcl9vYmplY3RfZGVjbGFyYXRpb24pOgorICAgICAg
ICAoVHlwZUJ1aWxkZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfYXNzZXJ0aW9u
X2Zvcl9lbnVtKToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRv
ci5weTogQWRkZWQuCisgICAgICAgICh1Y2ZpcnN0KToKKyAgICAgICAgKEdlbmVyYXRvcik6Cisg
ICAgICAgIChHZW5lcmF0b3IuX19pbml0X18pOgorICAgICAgICAoR2VuZXJhdG9yLm1vZGVsKToK
KyAgICAgICAgKEdlbmVyYXRvci5nZW5lcmF0ZV9saWNlbnNlKToKKyAgICAgICAgKEdlbmVyYXRv
ci5kb21haW5zX3RvX2dlbmVyYXRlKToKKyAgICAgICAgKEdlbmVyYXRvci5nZW5lcmF0ZV9vdXRw
dXQpOgorICAgICAgICAoR2VuZXJhdG9yLm91dHB1dF9maWxlbmFtZSk6CisgICAgICAgIChHZW5l
cmF0b3IuZW5jb2RpbmdfZm9yX2VudW1fdmFsdWUpOgorICAgICAgICAoR2VuZXJhdG9yLmFzc2ln
bmVkX2VudW1fdmFsdWVzKToKKyAgICAgICAgKEdlbmVyYXRvci50eXBlX25lZWRzX3J1bnRpbWVf
Y2FzdHMpOgorICAgICAgICAoR2VuZXJhdG9yLnR5cGVfaGFzX29wZW5fZmllbGRzKToKKyAgICAg
ICAgKEdlbmVyYXRvci50eXBlX25lZWRzX3NoYXBlX2Fzc2VydGlvbnMpOgorICAgICAgICAoR2Vu
ZXJhdG9yLmNhbGN1bGF0ZV90eXBlc19yZXF1aXJpbmdfc2hhcGVfYXNzZXJ0aW9ucyk6CisgICAg
ICAgIChHZW5lcmF0b3IuY2FsY3VsYXRlX3R5cGVzX3JlcXVpcmluZ19zaGFwZV9hc3NlcnRpb25z
LmdhdGhlcl90cmFuc2l0aXZlbHlfcmVmZXJlbmNlZF90eXBlcyk6CisgICAgICAgIChHZW5lcmF0
b3IuX3RyYXZlcnNlX2FuZF9hc3NpZ25fZW51bV92YWx1ZXMpOgorICAgICAgICAoR2VuZXJhdG9y
Ll9hc3NpZ25fZW5jb2RpbmdfZm9yX2VudW1fdmFsdWUpOgorICAgICAgICAoR2VuZXJhdG9yLndy
YXBfd2l0aF9ndWFyZF9mb3JfZG9tYWluKToKKyAgICAgICAgKEdlbmVyYXRvci5zdHlsaXplZF9u
YW1lX2Zvcl9lbnVtX3ZhbHVlKToKKyAgICAgICAgKEdlbmVyYXRvci5zdHlsaXplZF9uYW1lX2Zv
cl9lbnVtX3ZhbHVlLnJlcGxhY2VDYWxsYmFjayk6CisgICAgICAgIChHZW5lcmF0b3Iua2V5ZWRf
Z2V0X21ldGhvZF9mb3JfdHlwZSk6CisgICAgICAgIChHZW5lcmF0b3Iua2V5ZWRfc2V0X21ldGhv
ZF9mb3JfdHlwZSk6CisgICAgICAgIChHZW5lcmF0b3IudHlwZV9idWlsZGVyX3N0cmluZ19mb3Jf
dHlwZSk6CisgICAgICAgIChHZW5lcmF0b3IudHlwZV9idWlsZGVyX3N0cmluZ19mb3JfdHlwZV9t
ZW1iZXIpOgorICAgICAgICAoR2VuZXJhdG9yLnR5cGVfc3RyaW5nX2Zvcl91bmNoZWNrZWRfZm9y
bWFsX2luX3BhcmFtZXRlcik6CisgICAgICAgIChHZW5lcmF0b3IudHlwZV9zdHJpbmdfZm9yX2No
ZWNrZWRfZm9ybWFsX2V2ZW50X3BhcmFtZXRlcik6CisgICAgICAgIChHZW5lcmF0b3IudHlwZV9z
dHJpbmdfZm9yX3R5cGVfbWVtYmVyKToKKyAgICAgICAgKEdlbmVyYXRvci50eXBlX3N0cmluZ19m
b3JfdHlwZV93aXRoX25hbWUpOgorICAgICAgICAoR2VuZXJhdG9yLnR5cGVfc3RyaW5nX2Zvcl9m
b3JtYWxfb3V0X3BhcmFtZXRlcik6CisgICAgICAgIChHZW5lcmF0b3IudHlwZV9zdHJpbmdfZm9y
X2Zvcm1hbF9hc3luY19wYXJhbWV0ZXIpOgorICAgICAgICAoR2VuZXJhdG9yLnR5cGVfc3RyaW5n
X2Zvcl9zdGFja19pbl9wYXJhbWV0ZXIpOgorICAgICAgICAoR2VuZXJhdG9yLnR5cGVfc3RyaW5n
X2Zvcl9zdGFja19vdXRfcGFyYW1ldGVyKToKKyAgICAgICAgKEdlbmVyYXRvci5hc3NlcnRpb25f
bWV0aG9kX2Zvcl90eXBlX21lbWJlcik6CisgICAgICAgIChHZW5lcmF0b3IuYXNzZXJ0aW9uX21l
dGhvZF9mb3JfdHlwZV9tZW1iZXIuYXNzZXJ0aW9uX21ldGhvZF9mb3JfdHlwZSk6CisgICAgICAg
IChHZW5lcmF0b3IuY3BwX25hbWVfZm9yX3ByaW1pdGl2ZV90eXBlKToKKyAgICAgICAgKEdlbmVy
YXRvci5qc19uYW1lX2Zvcl9wYXJhbWV0ZXJfdHlwZSk6CisgICAgICAgIChHZW5lcmF0b3Iuc2hv
dWxkX3VzZV93cmFwcGVyX2Zvcl9yZXR1cm5fdHlwZSk6CisgICAgICAgIChHZW5lcmF0b3Iuc2hv
dWxkX3Bhc3NfYnlfY29weV9mb3JfcmV0dXJuX3R5cGUpOgorICAgICAgICAqIGluc3BlY3Rvci9z
Y3JpcHRzL2NvZGVnZW4vZ2VuZXJhdG9yX3RlbXBsYXRlcy5weTogQWRkZWQuCisgICAgICAgIChH
ZW5lcmF0b3JUZW1wbGF0ZXMpOgorICAgICAgICAodm9pZCk6CisgICAgICAgIChIYXNoTWFwKToK
KyAgICAgICAgKEJ1aWxkZXIpOgorICAgICAgICAoSW5zcGVjdG9yKToKKyAgICAgICAgKiBpbnNw
ZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL21vZGVscy5weTogQWRkZWQuCisgICAgICAgICh1Y2ZpcnN0
KToKKyAgICAgICAgKFBhcnNlRXhjZXB0aW9uKToKKyAgICAgICAgKFR5cGVjaGVja0V4Y2VwdGlv
bik6CisgICAgICAgIChGcmFtZXdvcmspOgorICAgICAgICAoRnJhbWV3b3JrLl9faW5pdF9fKToK
KyAgICAgICAgKEZyYW1ld29yay5zZXR0aW5nKToKKyAgICAgICAgKEZyYW1ld29yay5mcm9tU3Ry
aW5nKToKKyAgICAgICAgKEZyYW1ld29ya3MpOgorICAgICAgICAoVHlwZVJlZmVyZW5jZSk6Cisg
ICAgICAgIChUeXBlUmVmZXJlbmNlLl9faW5pdF9fKToKKyAgICAgICAgKFR5cGVSZWZlcmVuY2Uu
cmVmZXJlbmNlZF9uYW1lKToKKyAgICAgICAgKFR5cGUpOgorICAgICAgICAoVHlwZS5fX2luaXRf
Xyk6CisgICAgICAgIChUeXBlLl9fZXFfXyk6CisgICAgICAgIChUeXBlLl9faGFzaF9fKToKKyAg
ICAgICAgKFR5cGUucmF3X25hbWUpOgorICAgICAgICAoVHlwZS5pc19lbnVtKToKKyAgICAgICAg
KFR5cGUudHlwZV9kb21haW4pOgorICAgICAgICAoVHlwZS5xdWFsaWZpZWRfbmFtZSk6CisgICAg
ICAgIChUeXBlLnJlc29sdmVfdHlwZV9yZWZlcmVuY2VzKToKKyAgICAgICAgKFByaW1pdGl2ZVR5
cGUpOgorICAgICAgICAoUHJpbWl0aXZlVHlwZS5fX2luaXRfXyk6CisgICAgICAgIChQcmltaXRp
dmVUeXBlLl9fcmVwcl9fKToKKyAgICAgICAgKFByaW1pdGl2ZVR5cGUudHlwZV9kb21haW4pOgor
ICAgICAgICAoUHJpbWl0aXZlVHlwZS5xdWFsaWZpZWRfbmFtZSk6CisgICAgICAgIChBbGlhc2Vk
VHlwZSk6CisgICAgICAgIChBbGlhc2VkVHlwZS5fX2luaXRfXyk6CisgICAgICAgIChBbGlhc2Vk
VHlwZS5fX3JlcHJfXyk6CisgICAgICAgIChBbGlhc2VkVHlwZS5pc19lbnVtKToKKyAgICAgICAg
KEFsaWFzZWRUeXBlLnR5cGVfZG9tYWluKToKKyAgICAgICAgKEFsaWFzZWRUeXBlLnF1YWxpZmll
ZF9uYW1lKToKKyAgICAgICAgKEFsaWFzZWRUeXBlLnJlc29sdmVfdHlwZV9yZWZlcmVuY2VzKToK
KyAgICAgICAgKEVudW1UeXBlKToKKyAgICAgICAgKEVudW1UeXBlLl9faW5pdF9fKToKKyAgICAg
ICAgKEVudW1UeXBlLl9fcmVwcl9fKToKKyAgICAgICAgKEVudW1UeXBlLmlzX2VudW0pOgorICAg
ICAgICAoRW51bVR5cGUudHlwZV9kb21haW4pOgorICAgICAgICAoRW51bVR5cGUuZW51bV92YWx1
ZXMpOgorICAgICAgICAoRW51bVR5cGUucXVhbGlmaWVkX25hbWUpOgorICAgICAgICAoRW51bVR5
cGUucmVzb2x2ZV90eXBlX3JlZmVyZW5jZXMpOgorICAgICAgICAoQXJyYXlUeXBlKToKKyAgICAg
ICAgKEFycmF5VHlwZS5fX2luaXRfXyk6CisgICAgICAgIChBcnJheVR5cGUuX19yZXByX18pOgor
ICAgICAgICAoQXJyYXlUeXBlLnR5cGVfZG9tYWluKToKKyAgICAgICAgKEFycmF5VHlwZS5xdWFs
aWZpZWRfbmFtZSk6CisgICAgICAgIChBcnJheVR5cGUucmVzb2x2ZV90eXBlX3JlZmVyZW5jZXMp
OgorICAgICAgICAoT2JqZWN0VHlwZSk6CisgICAgICAgIChPYmplY3RUeXBlLl9faW5pdF9fKToK
KyAgICAgICAgKE9iamVjdFR5cGUuX19yZXByX18pOgorICAgICAgICAoT2JqZWN0VHlwZS50eXBl
X2RvbWFpbik6CisgICAgICAgIChPYmplY3RUeXBlLnF1YWxpZmllZF9uYW1lKToKKyAgICAgICAg
KGNoZWNrX2Zvcl9yZXF1aXJlZF9wcm9wZXJ0aWVzKToKKyAgICAgICAgKFByb3RvY29sKToKKyAg
ICAgICAgKFByb3RvY29sLl9faW5pdF9fKToKKyAgICAgICAgKFByb3RvY29sLnBhcnNlX3NwZWNp
ZmljYXRpb24pOgorICAgICAgICAoUHJvdG9jb2wucGFyc2VfZG9tYWluKToKKyAgICAgICAgKFBy
b3RvY29sLnBhcnNlX3R5cGVfZGVjbGFyYXRpb24pOgorICAgICAgICAoUHJvdG9jb2wucGFyc2Vf
dHlwZV9tZW1iZXIpOgorICAgICAgICAoUHJvdG9jb2wucGFyc2VfY29tbWFuZCk6CisgICAgICAg
IChQcm90b2NvbC5wYXJzZV9ldmVudCk6CisgICAgICAgIChQcm90b2NvbC5wYXJzZV9jYWxsX29y
X3JldHVybl9wYXJhbWV0ZXIpOgorICAgICAgICAoUHJvdG9jb2wucmVzb2x2ZV90eXBlcyk6Cisg
ICAgICAgIChQcm90b2NvbC5sb29rdXBfdHlwZV9mb3JfZGVjbGFyYXRpb24pOgorICAgICAgICAo
UHJvdG9jb2wubG9va3VwX3R5cGVfcmVmZXJlbmNlKToKKyAgICAgICAgKERvbWFpbik6CisgICAg
ICAgIChEb21haW4uX19pbml0X18pOgorICAgICAgICAoRG9tYWluLnJlc29sdmVfdHlwZV9yZWZl
cmVuY2VzKToKKyAgICAgICAgKERvbWFpbnMpOgorICAgICAgICAoVHlwZURlY2xhcmF0aW9uKToK
KyAgICAgICAgKFR5cGVEZWNsYXJhdGlvbi5fX2luaXRfXyk6CisgICAgICAgIChUeXBlRGVjbGFy
YXRpb24ucmVzb2x2ZV90eXBlX3JlZmVyZW5jZXMpOgorICAgICAgICAoVHlwZU1lbWJlcik6Cisg
ICAgICAgIChUeXBlTWVtYmVyLl9faW5pdF9fKToKKyAgICAgICAgKFR5cGVNZW1iZXIucmVzb2x2
ZV90eXBlX3JlZmVyZW5jZXMpOgorICAgICAgICAoUGFyYW1ldGVyKToKKyAgICAgICAgKFBhcmFt
ZXRlci5fX2luaXRfXyk6CisgICAgICAgIChQYXJhbWV0ZXIucmVzb2x2ZV90eXBlX3JlZmVyZW5j
ZXMpOgorICAgICAgICAoQ29tbWFuZCk6CisgICAgICAgIChDb21tYW5kLl9faW5pdF9fKToKKyAg
ICAgICAgKENvbW1hbmQucmVzb2x2ZV90eXBlX3JlZmVyZW5jZXMpOgorICAgICAgICAoRXZlbnQp
OgorICAgICAgICAoRXZlbnQuX19pbml0X18pOgorICAgICAgICAoRXZlbnQucmVzb2x2ZV90eXBl
X3JlZmVyZW5jZXMpOgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weTogQWRkZWQuCisgICAgICAgIChJbmNyZW1lbnRhbEZp
bGVXcml0ZXIpOgorICAgICAgICAoSW5jcmVtZW50YWxGaWxlV3JpdGVyLl9faW5pdF9fKToKKyAg
ICAgICAgKEluY3JlbWVudGFsRmlsZVdyaXRlci53cml0ZSk6CisgICAgICAgIChJbmNyZW1lbnRh
bEZpbGVXcml0ZXIuY2xvc2UpOgorICAgICAgICAoZ2VuZXJhdGVfZnJvbV9zcGVjaWZpY2F0aW9u
KToKKyAgICAgICAgKGdlbmVyYXRlX2Zyb21fc3BlY2lmaWNhdGlvbi5sb2FkX3NwZWNpZmljYXRp
b24pOgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2NvbW1hbmRzLXdpdGgtYXN5
bmMtYXR0cmlidXRlLmpzb246IEFkZGVkLgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2NvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uOiBB
ZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9kb21haW5zLXdpdGgtdmFy
eWluZy1jb21tYW5kLXNpemVzLmpzb246IEFkZGVkLgorICAgICAgICAqIGluc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2V2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbjogQWRkZWQuCisg
ICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1h
c3luYy1hdHRyaWJ1dGUuanNvbi1yZXN1bHQ6IEFkZGVkLgorICAgICAgICAqIGluc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2NvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4t
cGFyYW1ldGVycy5qc29uLXJlc3VsdDogQWRkZWQuCisgICAgICAgICogaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZXhwZWN0ZWQvZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29u
LXJlc3VsdDogQWRkZWQuCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0
ZWQvZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uLXJlc3VsdDogQWRkZWQuCisg
ICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1kdXBsaWNhdGUtdHlwZS1k
ZWNsYXJhdGlvbnMuanNvbi1lcnJvcjogQWRkZWQuCisgICAgICAgICogaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZmFpbC1vbi1lbnVtLXdpdGgtbm8tdmFsdWVzLmpzb24tZXJyb3I6IEFkZGVkLgor
ICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tdHlwZS1kZWNsYXJhdGlv
bi11c2luZy10eXBlLXJlZmVyZW5jZS5qc29uLWVycm9yOiBBZGRlZC4KKyAgICAgICAgKiBpbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLXR5cGUtd2l0aC1sb3dlcmNhc2UtbmFtZS5qc29u
LWVycm9yOiBBZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9u
LXVua25vd24tdHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1kZWNsYXJhdGlvbi5qc29uLWVycm9yOiBB
ZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLXVua25vd24t
dHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1tZW1iZXIuanNvbi1lcnJvcjogQWRkZWQuCisgICAgICAg
ICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvc2FtZS10eXBlLWlkLWRpZmZlcmVu
dC1kb21haW4uanNvbi1yZXN1bHQ6IEFkZGVkLgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5q
c29uLXJlc3VsdDogQWRkZWQuCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhw
ZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24tcmVzdWx0OiBBZGRlZC4KKyAg
ICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9u
LWVudW0tdHlwZS5qc29uLXJlc3VsdDogQWRkZWQuCisgICAgICAgICogaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uLXJlc3Vs
dDogQWRkZWQuCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlw
ZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uLXJlc3VsdDogQWRkZWQuCisgICAgICAgICog
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1kdXBsaWNhdGUtdHlwZS1kZWNsYXJhdGlv
bnMuanNvbjogQWRkZWQuCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1v
bi1lbnVtLXdpdGgtbm8tdmFsdWVzLmpzb246IEFkZGVkLgorICAgICAgICAqIGluc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2ZhaWwtb24tdHlwZS1kZWNsYXJhdGlvbi11c2luZy10eXBlLXJlZmVyZW5j
ZS5qc29uOiBBZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9u
LXR5cGUtd2l0aC1sb3dlcmNhc2UtbmFtZS5qc29uOiBBZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1k
ZWNsYXJhdGlvbi5qc29uOiBBZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1tZW1iZXIuanNvbjogQWRk
ZWQuCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvc2FtZS10eXBlLWlkLWRpZmZl
cmVudC1kb21haW4uanNvbjogQWRkZWQuCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb246IEFkZGVkLgor
ICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3R5cGUtZGVjbGFyYXRpb24tYXJyYXkt
dHlwZS5qc29uOiBBZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy90eXBl
LWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uOiBBZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy90eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb246IEFkZGVkLgor
ICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3R5cGUtcmVxdWlyaW5nLXJ1bnRpbWUt
Y2FzdHMuanNvbjogQWRkZWQuCisKKzIwMTQtMDgtMTEgIEJyaWFuIEouIEJ1cmcgIDxidXJnQGNz
Lndhc2hpbmd0b24uZWR1PgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IHVzZSB0eXBlIGJ1aWxk
ZXJzIHRvIGNvbnN0cnVjdCBoaWdoIGZpZGVsaXR5IHR5cGUgaW5mb3JtYXRpb24gcGF5bG9hZHMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNTgwMwor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIER1ZSB0byBz
b21lIHR5cG9zIGluIHRoZSBwcm90b2NvbCBmaWxlLCB0aGUgY29kZSBoYWQgd29ya2VkIHdpdGgg
cmF3IG9iamVjdHMKKyAgICAgICAgcmF0aGVyIHRoYW4gd2l0aCB0eXBlIGJ1aWxkZXJzLiBDb252
ZXJ0IHRvIHVzaW5nIGJ1aWxkZXJzLgorCisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNw
ZWN0b3JSdW50aW1lQWdlbnQuY3BwOgorICAgICAgICAoSW5zcGVjdG9yOjpJbnNwZWN0b3JSdW50
aW1lQWdlbnQ6OmdldFJ1bnRpbWVUeXBlc0ZvclZhcmlhYmxlc0F0T2Zmc2V0cyk6CisgICAgICAg
ICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JSdW50aW1lQWdlbnQuaDoKKyAgICAgICAgKiBp
bnNwZWN0b3IvcHJvdG9jb2wvUnVudGltZS5qc29uOiBGaXggJ2l0ZW0nIGZvciAnaXRlbXMnOyB0
cnVlIGZvciAndHJ1ZScuCisgICAgICAgICogcnVudGltZS9IaWdoRmlkZWxpdHlUeXBlUHJvZmls
ZXIuY3BwOgorICAgICAgICAoSlNDOjpIaWdoRmlkZWxpdHlUeXBlUHJvZmlsZXI6OmdldFR5cGVz
Rm9yVmFyaWFibGVBdE9mZnNldEZvckluc3BlY3Rvcik6CisgICAgICAgICogcnVudGltZS9IaWdo
RmlkZWxpdHlUeXBlUHJvZmlsZXIuaDoKKyAgICAgICAgKiBydW50aW1lL1R5cGVTZXQuY3BwOgor
ICAgICAgICAoSlNDOjpUeXBlU2V0OjphbGxTdHJ1Y3R1cmVSZXByZXNlbnRhdGlvbnMpOgorICAg
ICAgICAoSlNDOjpTdHJ1Y3R1cmVTaGFwZTo6c3RyaW5nUmVwcmVzZW50YXRpb24pOgorICAgICAg
ICAoSlNDOjpTdHJ1Y3R1cmVTaGFwZTo6aW5zcGVjdG9yUmVwcmVzZW50YXRpb24pOgorICAgICAg
ICAqIHJ1bnRpbWUvVHlwZVNldC5oOgorCiAyMDE0LTA4LTE0ICBPbGl2ZXIgSHVudCAgPG9saXZl
ckBhcHBsZS5jb20+CiAKICAgICAgICAgVXBkYXRlIHNjb3BlIHJlc29sdXRpb24gdG8gYXNzdW1l
IHRoYXQgdGhlIHBhcmVudCBhY3RpdmF0aW9uIGlzIGFsd2F5cyB0aGVyZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4
IDQ1ZGZkM2JmNzQ4MGJjYTFiNWU4NjgwOTRhMDQ3ZDQ5YzlkNjBiM2MuLmIxMjY4ODRlNDY4ODM4
NmQ2YjViNTdmY2NiYmJlMTlkNGRiYjFkMjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw4OCBAQAor
MjAxNC0wOC0xNCAgQnJpYW4gSi4gQnVyZyAgPGJ1cmdAY3Mud2FzaGluZ3Rvbi5lZHU+CisKKyAg
ICAgICAgV2ViIEluc3BlY3RvcjogcmV3cml0ZSBDb2RlR2VuZXJhdG9ySW5zcGVjdG9yIHRvIGJl
IG1vZHVsYXIgYW5kIHRlc3RhYmxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMzE1OTYKKworICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jh
cm8uCisKKyAgICAgICAgQXNpZGUgZnJvbSBob29raW5nIHVwIHRoZSBuZXcgaW5zcGVjdG9yIGJp
bmRpbmdzIGdlbmVyYXRvciB0byB0aGUgYnVpbGQgc3lzdGVtLAorICAgICAgICB0aGVyZSBhcmUg
YSBmZXcgY29taW5nbGVkIGNoYW5nZXMgdGhhdCB3b3VsZCBiZSBwYWluZnVsIHRvIHNwbGl0IGZy
b20gdGhlIG1haW4KKyAgICAgICAgcGF0Y2guIFRvZ2V0aGVyLCB0aGVzZSBjaGFuZ2VzIG1ha2Ug
aXQgcG9zc2libGUgdG8gZm9yd2FyZC1kZWNsYXJlIGFsbCBwcm90b2NvbAorICAgICAgICBlbnVt
ZXJhdGlvbnMgYXMgc2NvcGVkIGVudW1zLCByZWR1Y2luZyB3ZWlyZCBvcmRlcmluZyBkZXBlbmRl
bmNpZXMgYmV0d2VlbiBkb21haW5zLgorCisgICAgICAgIEFsbCBydW50aW1lQ2FzdCgpIG1ldGhv
ZHMgYXJlIG5vdyBzdGF0aWMgbWV0aG9kcyBvZiBCaW5kaW5nVHJhaXRzIHNwZWNpYWxpemF0aW9u
cywKKyAgICAgICAgcmF0aGVyIHRoYW4gYXMgc3RhdGljIG1ldGhvZHMgb2YgdGhlIHR5cGUgYnVp
bGRlciBjbGFzc2VzLgorCisgICAgICAgIEFsbCBwcm90b2NvbCBlbnVtZXJhdGlvbiB0eXBlcyBh
cmUgc2NvcGVkIGVudW1zIHJhdGhlciB0aGFuIHN0cnVjdC1uYW1lc3BhY2VkIGVudW1zLgorCisg
ICAgICAgIFJlbW92ZSBzb21lIGltcGxpY2l0IHByb3RvY29sIHR5cGUgYW5kIGVudW1lcmF0aW9u
IGRlZmluaXRpb25zIGJlY2F1c2UgdGhleSB0cmlnZ2VyCisgICAgICAgIGNvbXBpbGVyIGJ1Z3Mg
b3IgaW50cm9kdWNlIHVubmVjZXNzYXJ5IGNvbXBsZXhpdHkgaW4gdGhlIGJpbmRpbmdzIGdlbmVy
YXRvci4KKworICAgICAgICBObyBuZXcgdGVzdHMsIG5vIGJlaGF2aW9yIGNoYW5nZWQuCisKKyAg
ICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy5tYWtlOiBV
cGRhdGUgc2NyaXB0IGRlcGVuZGVuY2llcyBhbmQgdGhlIGJpbmRpbmdzIGdlbmVyYXRvciBzY3Jp
cHQgbmFtZS4KKworICAgICAgICAqIGluc3BlY3Rvci9Db21tYW5kTGluZUFQSUhvc3QuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q29tbWFuZExpbmVBUElIb3N0OjppbnNwZWN0SW1wbCk6IENvbnZl
cnQgdG8gQmluZGluZ1RyYWl0cy4KKworICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDU1NB
Z2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NBZ2VudDo6ZGV0ZWN0T3Jp
Z2luKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU0FnZW50OjpidWlsZEFycmF5Rm9y
UmVnaW9ucyk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50Lmg6CisgICAg
ICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckRPTUFnZW50OjpidWlsZE9iamVjdEZvckFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVz
KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvclBhZ2VBZ2VudDo6cmVzb3VyY2VUeXBlSnNvbik6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JQYWdlQWdlbnQ6OmNhY2hlZFJlc291cmNlVHlwZUpzb24pOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUGFnZUFnZW50OjpnZXRTY3JpcHRFeGVjdXRpb25T
dGF0dXMpOiBDb252ZXJ0IHRvIHNjb3BlZCBlbnVtcy4KKworICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yUGFnZUFnZW50OjpidWlsZE9iamVjdEZvckZyYW1lVHJlZSk6IEV4dHJhY3QgRnJhbWVS
ZXNvdXJjZVRyZWU6OlJlc291cmNlcworICAgICAgICBpbnRvIGl0cyBvd24gZXhwbGljaXRseS1k
ZWZpbmVkIG9iamVjdCB0eXBlLiBUaGUgbmV3IGdlbmVyYXRvciBkb2VzIG5vdCBzdXBwb3J0IGlt
cGxpY2l0bHkKKyAgICAgICAgZGVmaW5pbmcgb2JqZWN0IHR5cGVzIGFzIGVsZW1lbnRzIG9mIGFy
cmF5cy4KKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50Lmg6CisgICAgICAg
ICogaW5zcGVjdG9yL0luc3BlY3RvclJlcGxheUFnZW50LmNwcDogRGlzYW1iaWd1YXRlIGJldHdl
ZW4gaW50ZXJuYWwgYW5kIHByb3RvY29sIHR5cGVzLgorICAgICAgICAoV2ViQ29yZTo6YnVpbGRJ
bnNwZWN0b3JPYmplY3RGb3JTZXNzaW9uU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6YnVpbGRJ
bnNwZWN0b3JPYmplY3RGb3JTZWdtZW50U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yUmVwbGF5QWdlbnQ6OnNlc3Npb25TdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JSZXBsYXlBZ2VudDo6ZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvclJlcGxheUFnZW50OjpmcmFtZU5hdmlnYXRlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JSZXBsYXlBZ2VudDo6ZnJhbWVEZXRhY2hlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JSZXBsYXlBZ2VudDo6d2lsbERpc3BhdGNoRXZlbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5zcGVjdG9yUmVwbGF5QWdlbnQ6OnN0YXJ0Q2FwdHVyaW5nKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvclJlcGxheUFnZW50OjpzdG9wQ2FwdHVyaW5nKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvclJlcGxheUFnZW50OjpyZXBsYXlUb1Bvc2l0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclJlcGxheUFnZW50OjpyZXBsYXlUb0NvbXBsZXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUmVwbGF5QWdlbnQ6OnBhdXNlUGxheWJhY2sp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUmVwbGF5QWdlbnQ6OmNhbmNlbFBsYXliYWNr
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclJlcGxheUFnZW50Ojpzd2l0Y2hTZXNzaW9u
KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclJlcGxheUFnZW50OjppbnNlcnRTZXNzaW9u
U2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JSZXBsYXlBZ2VudDo6cmVtb3Zl
U2Vzc2lvblNlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUmVwbGF5QWdlbnQ6
OmN1cnJlbnRSZXBsYXlTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JSZXBsYXlB
Z2VudDo6Z2V0QXZhaWxhYmxlU2Vzc2lvbnMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
UmVwbGF5QWdlbnQ6OmdldFNlc3Npb25EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
clJlcGxheUFnZW50OjpnZXRTZWdtZW50RGF0YSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3Bl
Y3RvclJlcGxheUFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNl
QWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6d2ls
bFNlbmRSZXF1ZXN0KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5j
cHA6IENvbnZlcnQgdG8gc2NvcGVkIGVudW1zLiBFeHRyYWN0IENTU1Byb3BlcnR5OjpTdGF0dXMK
KyAgICAgICAgYmVjYXVzZSBzY29wZWQgZW51bXMgZGVmaW5lZCBpbiBhIGNsYXNzIHNjb3BlIHRy
aWdnZXIgY29tcGlsZXIgYnVncyBpbiBHQ0MgNC44LgorICAgICAgICAoV2ViQ29yZTo6YnVpbGRN
ZWRpYU9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZTo6c3R5bGVXaXRo
UHJvcGVydGllcyk6IFdvcmsgYXJvdW5kIGNvbXBpbGVyIGRpc2FncmVlbWVudHMuCisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZVNoZWV0OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yU3R5bGVTaGVldDo6SW5zcGVjdG9yU3R5bGVTaGVldCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU6Okluc3BlY3Rv
clN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rv
clN0eWxlU2hlZXQuaDoKKworICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JUaW1lbGluZUFn
ZW50LmNwcDogQ29udmVydCB0byBzY29wZWQgZW51bXMgYW5kIEJpbmRpbmdUcmFpdHMuCisgICAg
ICAgIChXZWJDb3JlOjp0b1Byb3RvY29sKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclRp
bWVsaW5lQWdlbnQ6OmFkZFJlY29yZFRvVGltZWxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yVGltZWxpbmVBZ2VudDo6c2VuZEV2ZW50KToKKworICAgICAgICAqIGluc3BlY3Rvci9w
cm90b2NvbC9DU1MuanNvbjogRXh0cmFjdCBDU1NQcm9wZXJ0eTo6U3RhdHVzLgorICAgICAgICAq
IGluc3BlY3Rvci9wcm90b2NvbC9QYWdlLmpzb246IEV4dHJhY3QgRnJhbWVSZXNvdXJjZVRyZWU6
OlJlc291cmNlcy4KKwogMjAxNC0wOC0xNCAgQnJlbnQgRnVsZ2hhbSAgPGJmdWxnaGFtQGFwcGxl
LmNvbT4KIAogICAgICAgICBbV2luXSBDb3JyZWN0IGJ1aWxkIHdoZW4gRGVyaXZlZFNvdXJjZXMg
bG9jYXRpb24gbm90IHN1cHBsaWVkIGJ5IGJ1aWxkIGVudmlyb25tZW50CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViSW5zcGVjdG9yVUkvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkluc3BlY3RvclVJL0No
YW5nZUxvZwppbmRleCAwODRhNWU2Mzg1ZDI1ZmExYmFjNzc5ZmE3YmU2ODNhZDNkMTdiZTRkLi5k
OTVkZDJlYWQ3OTQ0NmJhOWE0OWM5MzliZGQwNDAzNjY3NjNmMDJiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViSW5zcGVjdG9yVUkvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxNC0wOC0xNCAgQnJpYW4gSi4gQnVyZyAgPGJ1
cmdAY3Mud2FzaGluZ3Rvbi5lZHU+CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogcmV3cml0ZSBD
b2RlR2VuZXJhdG9ySW5zcGVjdG9yIHRvIGJlIG1vZHVsYXIgYW5kIHRlc3RhYmxlCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzE1OTYKKworICAgICAg
ICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCisKKyAgICAgICAgQWxzbyBhcHBseSB0eXBl
IGV4dHJhY3Rpb24gcmVmYWN0b3JpbmdzIHRvIG9sZCBwcm90b2NvbCB2ZXJzaW9ucyBmb3IgY29u
c2lzdGVuY3kuCisKKyAgICAgICAgKiBWZXJzaW9ucy9JbnNwZWN0b3ItaU9TLTYuMC5qc29uOgor
ICAgICAgICAqIFZlcnNpb25zL0luc3BlY3Rvci1pT1MtNy4wLmpzb246CisKIDIwMTQtMDgtMTQg
IEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWIgSW5z
cGVjdG9yOiBBdm9pZCByZS1iaW5kaW5nIHRoZSBzYW1lIGZ1bmN0aW9uIG92ZXIgYW5kIG92ZXIK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCBhODdlOGIyZTU5YmNiMGUyOTNl
MjFhNWIyNTgwN2UzYzcwMzVlZGZhLi44MTVhMjJiMWQyYjAxNDQ5OTgyYmFjYjM3NGNhYzcxMzg1
ZGIwMzM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC05MDcsNiArOTA3
LDIxIEBAIEFERF9TT1VSQ0VfREVQRU5ERU5DSUVTKCR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElS
fS9wYXJzZXIvTGV4ZXIuY3BwICR7REVSSVZFRF9TCiAKIHNldChKYXZhU2NyaXB0Q29yZV9JTlNQ
RUNUT1JfU0NSSVBUU19ESVIgIiR7SkFWQVNDUklQVENPUkVfRElSfS9pbnNwZWN0b3Ivc2NyaXB0
cyIpCiAKK3NldChKYXZhU2NyaXB0Q29yZV9JTlNQRUNUT1JfUFJPVE9DT0xfU0NSSVBUUworICAg
ICR7SmF2YVNjcmlwdENvcmVfSU5TUEVDVE9SX1NDUklQVFNfRElSfS9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKyAgICAke0phdmFTY3JpcHRDb3JlX0lOU1BFQ1RPUl9T
Q1JJUFRTX0RJUn0vY29kZWdlbi9nZW5lcmF0ZV9iYWNrZW5kX2NvbW1hbmRzLnB5CisgICAgJHtK
YXZhU2NyaXB0Q29yZV9JTlNQRUNUT1JfU0NSSVBUU19ESVJ9L2NvZGVnZW4vZ2VuZXJhdGVfYmFj
a2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weQorICAgICR7SmF2YVNjcmlwdENvcmVfSU5TUEVDVE9S
X1NDUklQVFNfRElSfS9jb2RlZ2VuL2dlbmVyYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1l
bnRhdGlvbi5weQorICAgICR7SmF2YVNjcmlwdENvcmVfSU5TUEVDVE9SX1NDUklQVFNfRElSfS9j
b2RlZ2VuL2dlbmVyYXRlX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5CisgICAgJHtKYXZh
U2NyaXB0Q29yZV9JTlNQRUNUT1JfU0NSSVBUU19ESVJ9L2NvZGVnZW4vZ2VuZXJhdGVfZnJvbnRl
bmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQorICAgICR7SmF2YVNjcmlwdENvcmVfSU5T
UEVDVE9SX1NDUklQVFNfRElSfS9jb2RlZ2VuL2dlbmVyYXRlX3R5cGVfYnVpbGRlcl9oZWFkZXIu
cHkKKyAgICAke0phdmFTY3JpcHRDb3JlX0lOU1BFQ1RPUl9TQ1JJUFRTX0RJUn0vY29kZWdlbi9n
ZW5lcmF0ZV90eXBlX2J1aWxkZXJfaW1wbGVtZW50YXRpb24ucHkKKyAgICAke0phdmFTY3JpcHRD
b3JlX0lOU1BFQ1RPUl9TQ1JJUFRTX0RJUn0vY29kZWdlbi9nZW5lcmF0b3IucHkKKyAgICAke0ph
dmFTY3JpcHRDb3JlX0lOU1BFQ1RPUl9TQ1JJUFRTX0RJUn0vY29kZWdlbi9nZW5lcmF0b3JfdGVt
cGxhdGVzLnB5CisgICAgJHtKYXZhU2NyaXB0Q29yZV9JTlNQRUNUT1JfU0NSSVBUU19ESVJ9L2Nv
ZGVnZW4vX19pbml0X18ucHkKKyAgICAke0phdmFTY3JpcHRDb3JlX0lOU1BFQ1RPUl9TQ1JJUFRT
X0RJUn0vY29kZWdlbi9tb2RlbHMucHkKKykKKwogc2V0KEphdmFTY3JpcHRDb3JlX0lOU1BFQ1RP
Ul9ET01BSU5TCiAgICAgJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L2luc3BlY3Rvci9wcm90b2NvbC9D
b25zb2xlLmpzb24KICAgICAke0pBVkFTQ1JJUFRDT1JFX0RJUn0vaW5zcGVjdG9yL3Byb3RvY29s
L0RlYnVnZ2VyLmpzb24KQEAgLTkzMyw5ICs5NDgsOCBAQCBhZGRfY3VzdG9tX2NvbW1hbmQoCiAg
ICAgICAgICAgICR7REVSSVZFRF9TT1VSQ0VTX0pBVkFTQ1JJUFRDT1JFX0RJUn0vaW5zcGVjdG9y
L0luc3BlY3RvckpTVHlwZUJ1aWxkZXJzLmgKICAgICAgICAgICAgJHtERVJJVkVEX1NPVVJDRVNf
V0VCSU5TUEVDVE9SVUlfRElSfS9Vc2VySW50ZXJmYWNlL1Byb3RvY29sL0luc3BlY3RvckpTQmFj
a2VuZENvbW1hbmRzLmpzCiAgICAgTUFJTl9ERVBFTkRFTkNZICR7REVSSVZFRF9TT1VSQ0VTX0pB
VkFTQ1JJUFRDT1JFX0RJUn0vSW5zcGVjdG9ySlMuanNvbgotICAgIERFUEVORFMgJHtKYXZhU2Ny
aXB0Q29yZV9JTlNQRUNUT1JfU0NSSVBUU19ESVJ9L0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkK
LSAgICAgICAgICAgICR7SmF2YVNjcmlwdENvcmVfSU5TUEVDVE9SX1NDUklQVFNfRElSfS9Db2Rl
R2VuZXJhdG9ySW5zcGVjdG9yU3RyaW5ncy5weQotICAgIENPTU1BTkQgJHtQWVRIT05fRVhFQ1VU
QUJMRX0gJHtKYXZhU2NyaXB0Q29yZV9JTlNQRUNUT1JfU0NSSVBUU19ESVJ9L0NvZGVHZW5lcmF0
b3JJbnNwZWN0b3IucHkgJHtERVJJVkVEX1NPVVJDRVNfSkFWQVNDUklQVENPUkVfRElSfS9JbnNw
ZWN0b3JKUy5qc29uIC0tb3V0cHV0X2hfZGlyICIke0RFUklWRURfU09VUkNFU19KQVZBU0NSSVBU
Q09SRV9ESVJ9L2luc3BlY3RvciIgLS1vdXRwdXRfY3BwX2RpciAiJHtERVJJVkVEX1NPVVJDRVNf
SkFWQVNDUklQVENPUkVfRElSfS9pbnNwZWN0b3IiIC0tb3V0cHV0X2pzX2RpciAiJHtERVJJVkVE
X1NPVVJDRVNfV0VCSU5TUEVDVE9SVUlfRElSfS9Vc2VySW50ZXJmYWNlL1Byb3RvY29sIiAtLW91
dHB1dF90eXBlIEphdmFTY3JpcHQgLS13cml0ZV9hbHdheXMKKyAgICBERVBFTkRTICR7SmF2YVNj
cmlwdENvcmVfSU5TUEVDVE9SX1BST1RPQ09MX1NDUklQVFN9CisgICAgQ09NTUFORCAke1BZVEhP
Tl9FWEVDVVRBQkxFfSAke0phdmFTY3JpcHRDb3JlX0lOU1BFQ1RPUl9TQ1JJUFRTX0RJUn0vZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5IC0tb3V0cHV0RGlyICIke0RFUklW
RURfU09VUkNFU19KQVZBU0NSSVBUQ09SRV9ESVJ9IiAtLWZyYW1ld29yayBKYXZhU2NyaXB0Q29y
ZSAke0RFUklWRURfU09VUkNFU19KQVZBU0NSSVBUQ09SRV9ESVJ9L0luc3BlY3RvckpTLmpzb24g
JiYgbWtkaXIgLXAgJHtERVJJVkVEX1NPVVJDRVNfSkFWQVNDUklQVENPUkVfRElSfS9pbnNwZWN0
b3IgJiYgY3AgJHtERVJJVkVEX1NPVVJDRVNfSkFWQVNDUklQVENPUkVfRElSfS9JbnNwZWN0b3JK
U0JhY2tlbmREaXNwYXRjaGVycy5oICR7REVSSVZFRF9TT1VSQ0VTX0pBVkFTQ1JJUFRDT1JFX0RJ
Un0vSW5zcGVjdG9ySlNCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwICR7REVSSVZFRF9TT1VSQ0VTX0pB
VkFTQ1JJUFRDT1JFX0RJUn0vSW5zcGVjdG9ySlNGcm9udGVuZERpc3BhdGNoZXJzLmggJHtERVJJ
VkVEX1NPVVJDRVNfSkFWQVNDUklQVENPUkVfRElSfS9JbnNwZWN0b3JKU0Zyb250ZW5kRGlzcGF0
Y2hlcnMuY3BwICR7REVSSVZFRF9TT1VSQ0VTX0pBVkFTQ1JJUFRDT1JFX0RJUn0vSW5zcGVjdG9y
SlNUeXBlQnVpbGRlcnMuaCAke0RFUklWRURfU09VUkNFU19KQVZBU0NSSVBUQ09SRV9ESVJ9L0lu
c3BlY3RvckpTVHlwZUJ1aWxkZXJzLmNwcCAke0RFUklWRURfU09VUkNFU19KQVZBU0NSSVBUQ09S
RV9ESVJ9L2luc3BlY3RvciAmJiBta2RpciAtcCAke0RFUklWRURfU09VUkNFU19XRUJJTlNQRUNU
T1JVSV9ESVJ9L1VzZXJJbnRlcmZhY2UvUHJvdG9jb2wgJiYgY3AgJHtERVJJVkVEX1NPVVJDRVNf
SkFWQVNDUklQVENPUkVfRElSfS9JbnNwZWN0b3JKU0JhY2tlbmRDb21tYW5kcy5qcyAke0RFUklW
RURfU09VUkNFU19XRUJJTlNQRUNUT1JVSV9ESVJ9L1VzZXJJbnRlcmZhY2UvUHJvdG9jb2wKICAg
ICBWRVJCQVRJTSkKIGZpbGUoTUFLRV9ESVJFQ1RPUlkgJHtERVJJVkVEX1NPVVJDRVNfSkFWQVND
UklQVENPUkVfRElSfS9pbnNwZWN0b3IpCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRT
b3VyY2VzLm1ha2UKaW5kZXggY2MzMDdkN2U3NDc5YjliZjkwYThhM2VmYmYxM2M5ODczYTM4ODNi
OC4uZDMzYzk1MThmYzI5MjgxYzQ0YjA3MjhlYTE4NGE2NjFhODRjOTY0ZCAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKQEAgLTEyMiw4ICsxMjIsMTkgQEAgSU5T
UEVDVE9SX0RPTUFJTlMgPSBcCiAjCiAKIElOU1BFQ1RPUl9HRU5FUkFUT1JfU0NSSVBUUyA9IFwK
LQkkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3Ivc2NyaXB0cy9Db2RlR2VuZXJhdG9ySW5zcGVj
dG9yLnB5IFwKLQkkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3Ivc2NyaXB0cy9Db2RlR2VuZXJh
dG9ySW5zcGVjdG9yU3RyaW5ncy5weSBcCisJJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3Nj
cmlwdHMvY29kZWdlbi9fX2luaXRfXy5weSBcCisJJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9y
L3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9iYWNrZW5kX2NvbW1hbmRzLnB5IFwKKwkkKEphdmFT
Y3JpcHRDb3JlKS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2JhY2tlbmRfZGlz
cGF0Y2hlcl9oZWFkZXIucHkgXAorCSQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9zY3JpcHRz
L2NvZGVnZW4vZ2VuZXJhdGVfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5IFwK
KwkkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2Zy
b250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5IFwKKwkkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0
b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50
YXRpb24ucHkgXAorCSQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4v
Z2VuZXJhdGVfdHlwZV9idWlsZGVyX2hlYWRlci5weSBcCisJJChKYXZhU2NyaXB0Q29yZSkvaW5z
cGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV90eXBlX2J1aWxkZXJfaW1wbGVtZW50YXRp
b24ucHkgXAorCSQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2Vu
ZXJhdG9yX3RlbXBsYXRlcy5weSBcCisJJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3Njcmlw
dHMvY29kZWdlbi9nZW5lcmF0b3IucHkgXAorCSQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9z
Y3JpcHRzL2NvZGVnZW4vbW9kZWxzLnB5IFwKKwkkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3Iv
c2NyaXB0cy9nZW5lcmF0ZS1jb21iaW5lZC1pbnNwZWN0b3ItanNvbi5weSBcCisJJChKYXZhU2Ny
aXB0Q29yZSkvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5IFwKICMKIAogYWxsIDogXApAQCAtMTQ0LDcgKzE1NSw3IEBAIEluc3BlY3RvckpT
Lmpzb24gOiBpbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1jb21iaW5lZC1pbnNwZWN0b3ItanNv
bi5weSAkKElOU1BFCiAKICMgSW5zcGVjdG9yIEJhY2tlbmQgRGlzcGF0Y2hlcnMsIEZyb250ZW5k
IERpc3BhdGNoZXJzLCBUeXBlIEJ1aWxkZXJzCiBJbnNwZWN0b3JKU0Zyb250ZW5kRGlzcGF0Y2hl
cnMuaCA6IEluc3BlY3RvckpTLmpzb24gJChJTlNQRUNUT1JfR0VORVJBVE9SX1NDUklQVFMpCi0J
JChQWVRIT04pICQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9zY3JpcHRzL0NvZGVHZW5lcmF0
b3JJbnNwZWN0b3IucHkgLi9JbnNwZWN0b3JKUy5qc29uIC0tb3V0cHV0X2hfZGlyIC4gLS1vdXRw
dXRfY3BwX2RpciAuIC0tb3V0cHV0X2pzX2RpciAuIC0tb3V0cHV0X3R5cGUgSmF2YVNjcmlwdAor
CSQoUFlUSE9OKSAkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkgLS1mcmFtZXdvcmsgSmF2YVNjcmlwdENvcmUg
LS1vdXRwdXREaXIgLiAuL0luc3BlY3RvckpTLmpzb24KIAogSW5qZWN0ZWRTY3JpcHRTb3VyY2Uu
aCA6IGluc3BlY3Rvci9JbmplY3RlZFNjcmlwdFNvdXJjZS5qcyAkKEphdmFTY3JpcHRDb3JlKS9p
bnNwZWN0b3Ivc2NyaXB0cy9qc21pbi5weSAkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3Ivc2Ny
aXB0cy94eGQucGwKIAllY2hvICIvLyMgc291cmNlVVJMPV9fV2ViSW5zcGVjdG9ySW5qZWN0ZWRT
Y3JpcHRfXyIgPiAuL0luamVjdGVkU2NyaXB0U291cmNlLm1pbi5qcwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovY29weS1maWxlcy5jbWQg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9jb3B5LWZpbGVz
LmNtZAppbmRleCA0NjU1ZThjZDNkNmNhNzk2OWIwMGVkN2RlOWVlZGI5OTEzY2I1NTc1Li5lYjg0
YmMxOGZmNDNkMmM3OGI1MjIyYWVlNGViZWRhNWZiMGE3YTBlIDEwMDc1NQotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9jb3B5LWZpbGVzLmNtZAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9jb3B5LWZpbGVz
LmNtZApAQCAtNjQsNiArNjQsNyBAQCBmb3IgJSVkIGluICgKIGVjaG8gQ29weWluZyBJbnNwZWN0
b3Igc2NyaXB0cyBhcyBpZiB0aGV5IHdlcmUgcHJpdmF0ZSBoZWFkZXJzLi4uDQogZm9yICUlZCBp
biAoDQogICAgIGluc3BlY3RvclxzY3JpcHRzDQorCWluc3BlY3RvclxzY3JpcHRzXGNvZGVnZW4N
CiApIGRvICgNCiAgICAgeGNvcHkgL3kgL2QgLi5cJSVkXCogIiVQcml2YXRlSGVhZGVyc0RpcmVj
dG9yeSUiID5OVUwNCiApDQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAzYjZkMmRj
NmJlOTc5YjBmYzI5MjY1ZTAzMTBiMGMyNDQ0ZjVmMDliLi43OTEyYjQ1M2NlOGNiM2U2ZWFkZDhm
MDUxZWJkOGIxZmFlOWFmODVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTYz
NSw4ICsxNjM1LDYgQEAKIAkJQTUzMjQzOEExODU2ODMzNTAwMkVENjkyIC8qIEluc3BlY3RvckpT
RnJvbnRlbmREaXNwYXRjaGVycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTUzMjQzODQxODU2ODMxNzAwMkVENjkyIC8qIEluc3BlY3RvckpTRnJvbnRl
bmREaXNwYXRjaGVycy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCUE1MzI0MzhCMTg1NjgzMzUwMDJFRDY5MiAvKiBJbnNwZWN0b3JKU1R5cGVCdWls
ZGVycy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
NTMyNDM4NTE4NTY4MzE3MDAyRUQ2OTIgLyogSW5zcGVjdG9ySlNUeXBlQnVpbGRlcnMuY3BwICov
OyB9OwogCQlBNTMyNDM4QzE4NTY4MzM1MDAyRUQ2OTIgLyogSW5zcGVjdG9ySlNUeXBlQnVpbGRl
cnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1MzI0
Mzg2MTg1NjgzMTcwMDJFRDY5MiAvKiBJbnNwZWN0b3JKU1R5cGVCdWlsZGVycy5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUE1MzI0MzkyMTg1Njk3
MDkwMDJFRDY5MiAvKiBDb2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5IGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTUzMjQzOEYxODU2OTZFNjAwMkVENjkyIC8q
IENvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkgKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKLQkJQTUzMjQzOTMxODU2OTcwOTAwMkVENjkyIC8qIENvZGVHZW5l
cmF0b3JJbnNwZWN0b3JTdHJpbmdzLnB5IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTUzMjQzOTAxODU2OTZFNjAwMkVENjkyIC8qIENvZGVHZW5lcmF0b3JJ
bnNwZWN0b3JTdHJpbmdzLnB5ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCUE1MzI0Mzk0MTg1Njk3MDkwMDJFRDY5MiAvKiBnZW5lcmF0ZS1jb21iaW5l
ZC1pbnNwZWN0b3ItanNvbi5weSBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEE1MzI0MzkxMTg1Njk2RTYwMDJFRDY5MiAvKiBnZW5lcmF0ZS1jb21iaW5lZC1p
bnNwZWN0b3ItanNvbi5weSAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQlBNTMyNDM5ODE4NTZBNDg5MDAyRUQ2OTIgLyogSW5zcGVjdG9ySlMuanNvbiBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1MzI0Mzk1MTg1
NkE0NzUwMDJFRDY5MiAvKiBJbnNwZWN0b3JKUy5qc29uICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE1M0NFMDg1MThCQzFBNTYwMEJFREY3NiAvKiBD
b25zb2xlUHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEE1M0NFMDgxMThCQzFBNTYwMEJFREY3NiAvKiBDb25zb2xlUHJvdG90eXBlLmNw
cCAqLzsgfTsKQEAgLTIwNjIsNiArMjA2MCwxNyBAQAogCQlDMkZDQUUxMjE3QTlDMjRFMDAzNEM3
MzUgLyogQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEMyRkNBRTBFMTdBOUMyNEUwMDM0QzczNSAvKiBCeXRl
Y29kZUxpdmVuZXNzQW5hbHlzaXMuY3BwICovOyB9OwogCQlDMkZDQUUxMzE3QTlDMjRFMDAzNEM3
MzUgLyogQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMkZDQUUwRjE3QTlDMjRFMDAzNEM3MzUgLyogQnl0ZWNv
ZGVMaXZlbmVzc0FuYWx5c2lzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJQzJGRTE4QTQxNkJBRUM0MDAwQUYzMDYxIC8qIFN0cnVjdHVyZVJhcmVE
YXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMkZF
MThBMzE2QkFFQzQwMDBBRjMwNjEgLyogU3RydWN0dXJlUmFyZURhdGEuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlDNDcwM0NDMDE5Mjg0NDk2MDAx
M0ZCRUEgLyogZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5IGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzQ3MDNDQkYxOTI4NDQ5NjAw
MTNGQkVBIC8qIGdlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weSAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlDNDcwM0NDRTE5Mjg0
NENDMDAxM0ZCRUEgLyogZ2VuZXJhdGVfYmFja2VuZF9jb21tYW5kcy5weSBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM0NzAzQ0MzMTkyODQ0Q0MwMDEzRkJF
QSAvKiBnZW5lcmF0ZV9iYWNrZW5kX2NvbW1hbmRzLnB5ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUM0NzAzQ0NGMTkyODQ0Q0MwMDEzRkJFQSAvKiBn
ZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5IGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzQ3MDNDQzQxOTI4NDRDQzAwMTNGQkVBIC8qIGdl
bmVyYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkgKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQzQ3MDNDRDAxOTI4NDRDQzAwMTNGQkVBIC8q
IGdlbmVyYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM0NzAzQ0M1MTkyODQ0Q0MwMDEz
RkJFQSAvKiBnZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkgKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQzQ3MDNDRDEx
OTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRlX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzQ3MDNDQzYx
OTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRlX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUM0NzAz
Q0QyMTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0ZV9mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxl
bWVudGF0aW9uLnB5IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQzQ3MDNDQzcxOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRlX2Zyb250ZW5kX2Rpc3BhdGNo
ZXJfaW1wbGVtZW50YXRpb24ucHkgKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKKwkJQzQ3MDNDRDMxOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRlX3R5cGVf
YnVpbGRlcl9oZWFkZXIucHkgaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBDNDcwM0NDODE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJhdGVfdHlwZV9idWlsZGVy
X2hlYWRlci5weSAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OworCQlDNDcwM0NENDE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJhdGVfdHlwZV9idWlsZGVyX2lt
cGxlbWVudGF0aW9uLnB5IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQzQ3MDNDQzkxOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRlX3R5cGVfYnVpbGRlcl9p
bXBsZW1lbnRhdGlvbi5weSAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OworCQlDNDcwM0NENTE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJhdG9yX3RlbXBsYXRl
cy5weSBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM0NzAz
Q0NBMTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0b3JfdGVtcGxhdGVzLnB5ICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUM0NzAzQ0Q2MTkyODQ0Q0Mw
MDEzRkJFQSAvKiBnZW5lcmF0b3IucHkgaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBDNDcwM0NDQjE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJhdG9yLnB5ICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUM0NzAzQ0Q3
MTkyODQ0Q0MwMDEzRkJFQSAvKiBtb2RlbHMucHkgaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBDNDcwM0NDQzE5Mjg0NENDMDAxM0ZCRUEgLyogbW9kZWxzLnB5
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUUxMjRB
OEY3MEU1NTU3NzUwMDMwOTFGMSAvKiBPcGFxdWVKU1N0cmluZy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTEyNEE4RjUwRTU1NTc3NTAwMzA5MUYxIC8q
IE9wYXF1ZUpTU3RyaW5nLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJRTEyNEE4RjgwRTU1NTc3NTAwMzA5MUYxIC8qIE9wYXF1ZUpTU3RyaW5nLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxMjRBOEY2
MEU1NTU3NzUwMDMwOTFGMSAvKiBPcGFxdWVKU1N0cmluZy5jcHAgKi87IH07CiAJCUUxOEUzQTU5
MERGOTI3OEMwMEQ5MEIzNCAvKiBWTS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBFMThFM0E1NzBERjkyNzhDMDBEOTBCMzQgLyogVk0uY3BwICovOyB9
OwpAQCAtMzMxMiw4ICszMzIxLDYgQEAKIAkJQTUzMjQzODUxODU2ODMxNzAwMkVENjkyIC8qIElu
c3BlY3RvckpTVHlwZUJ1aWxkZXJzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluc3BlY3RvckpT
VHlwZUJ1aWxkZXJzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTUzMjQzODYx
ODU2ODMxNzAwMkVENjkyIC8qIEluc3BlY3RvckpTVHlwZUJ1aWxkZXJzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEluc3BlY3RvckpTVHlwZUJ1aWxkZXJzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUE1MzI0MzhEMTg1Njk2Q0EwMDJFRDY5MiAvKiBwcm90b2NvbCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IGZvbGRlcjsgcGF0aCA9IHByb3RvY29s
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBNTMyNDM4RjE4NTY5NkU2MDAyRUQ2OTIg
LyogQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuc2NyaXB0LnB5dGhv
bjsgcGF0aCA9IENvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHk7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCUE1MzI0MzkwMTg1Njk2RTYwMDJFRDY5MiAvKiBDb2RlR2VuZXJhdG9ySW5zcGVj
dG9yU3RyaW5ncy5weSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuc2NyaXB0LnB5dGhvbjsgcGF0aCA9IENvZGVH
ZW5lcmF0b3JJbnNwZWN0b3JTdHJpbmdzLnB5OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlBNTMyNDM5MTE4NTY5NkU2MDAyRUQ2OTIgLyogZ2VuZXJhdGUtY29tYmluZWQtaW5zcGVjdG9y
LWpzb24ucHkgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnNjcmlwdC5weXRob247IHBhdGggPSAiZ2VuZXJhdGUt
Y29tYmluZWQtaW5zcGVjdG9yLWpzb24ucHkiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlBNTMyNDM5NTE4NTZBNDc1MDAyRUQ2OTIgLyogSW5zcGVjdG9ySlMuanNvbiAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHRleHQuanNvbjsgcGF0aCA9IEluc3BlY3RvckpTLmpzb247IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUE1MzI0Mzk2MTg1NkE0NzUwMDJFRDY5MiAvKiBJbnNwZWN0b3JKU0JhY2tlbmRD
b21tYW5kcy5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgcGF0aCA9IEluc3Bl
Y3RvckpTQmFja2VuZENvbW1hbmRzLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
MzcyOSw2ICszNzM2LDE4IEBACiAJCUMyRkNBRTBFMTdBOUMyNEUwMDM0QzczNSAvKiBCeXRlY29k
ZUxpdmVuZXNzQW5hbHlzaXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQzJGQ0FFMEYxN0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNp
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCeXRlY29kZUxpdmVuZXNzQW5h
bHlzaXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQzJGRTE4QTMxNkJBRUM0MDAw
QUYzMDYxIC8qIFN0cnVjdHVyZVJhcmVEYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFN0cnVjdHVyZVJhcmVEYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUM0NzAzQ0JGMTkyODQ0OTYwMDEzRkJFQSAvKiBnZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnNjcmlwdC5weXRob247IHBhdGggPSAiZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Ijsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJQzQ3MDNDQzIxOTI4NDRDQzAwMTNGQkVBIC8qIF9faW5pdF9fLnB5ICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gdGV4dC5zY3JpcHQucHl0aG9uOyBuYW1lID0gX19pbml0X18ucHk7IHBhdGggPSBfX2luaXRf
Xy5weTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzQ3MDNDQzMxOTI4NDRDQzAwMTNG
QkVBIC8qIGdlbmVyYXRlX2JhY2tlbmRfY29tbWFuZHMucHkgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnNjcmlw
dC5weXRob247IG5hbWUgPSBnZW5lcmF0ZV9iYWNrZW5kX2NvbW1hbmRzLnB5OyBwYXRoID0gZ2Vu
ZXJhdGVfYmFja2VuZF9jb21tYW5kcy5weTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
QzQ3MDNDQzQxOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9o
ZWFkZXIucHkgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnNjcmlwdC5weXRob247IG5hbWUgPSBnZW5lcmF0ZV9i
YWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5OyBwYXRoID0gZ2VuZXJhdGVfYmFja2VuZF9kaXNw
YXRjaGVyX2hlYWRlci5weTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzQ3MDNDQzUx
OTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRh
dGlvbi5weSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHRleHQuc2NyaXB0LnB5dGhvbjsgbmFtZSA9IGdlbmVyYXRlX2Jh
Y2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weTsgcGF0aCA9IGdlbmVyYXRlX2JhY2tl
bmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQzQ3MDNDQzYxOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRlX2Zyb250ZW5kX2Rpc3Bh
dGNoZXJfaGVhZGVyLnB5ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5zY3JpcHQucHl0aG9uOyBuYW1lID0gZ2Vu
ZXJhdGVfZnJvbnRlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHk7IHBhdGggPSBnZW5lcmF0ZV9mcm9u
dGVuZF9kaXNwYXRjaGVyX2hlYWRlci5weTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
QzQ3MDNDQzcxOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRlX2Zyb250ZW5kX2Rpc3BhdGNoZXJf
aW1wbGVtZW50YXRpb24ucHkgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnNjcmlwdC5weXRob247IG5hbWUgPSBn
ZW5lcmF0ZV9mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5OyBwYXRoID0gZ2Vu
ZXJhdGVfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJQzQ3MDNDQzgxOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRlX3R5
cGVfYnVpbGRlcl9oZWFkZXIucHkgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnNjcmlwdC5weXRob247IG5hbWUg
PSBnZW5lcmF0ZV90eXBlX2J1aWxkZXJfaGVhZGVyLnB5OyBwYXRoID0gZ2VuZXJhdGVfdHlwZV9i
dWlsZGVyX2hlYWRlci5weTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzQ3MDNDQzkx
OTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRlX3R5cGVfYnVpbGRlcl9pbXBsZW1lbnRhdGlvbi5w
eSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHRleHQuc2NyaXB0LnB5dGhvbjsgbmFtZSA9IGdlbmVyYXRlX3R5cGVfYnVp
bGRlcl9pbXBsZW1lbnRhdGlvbi5weTsgcGF0aCA9IGdlbmVyYXRlX3R5cGVfYnVpbGRlcl9pbXBs
ZW1lbnRhdGlvbi5weTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzQ3MDNDQ0ExOTI4
NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRvcl90ZW1wbGF0ZXMucHkgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnNj
cmlwdC5weXRob247IG5hbWUgPSBnZW5lcmF0b3JfdGVtcGxhdGVzLnB5OyBwYXRoID0gZ2VuZXJh
dG9yX3RlbXBsYXRlcy5weTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzQ3MDNDQ0Ix
OTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRvci5weSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuc2NyaXB0LnB5
dGhvbjsgbmFtZSA9IGdlbmVyYXRvci5weTsgcGF0aCA9IGdlbmVyYXRvci5weTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQzQ3MDNDQ0MxOTI4NDRDQzAwMTNGQkVBIC8qIG1vZGVscy5w
eSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHRleHQuc2NyaXB0LnB5dGhvbjsgbmFtZSA9IG1vZGVscy5weTsgcGF0aCA9
IG1vZGVscy5weTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDIxMjAyMjgwQUQ0MzEw
QzAwRUQ3OUI2IC8qIERhdGVDb252ZXJzaW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBEYXRlQ29udmVyc2lvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUQyMTIwMjI5MEFENDMxMEMwMEVENzlCNiAvKiBEYXRlQ29udmVyc2lvbi5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGF0ZUNvbnZlcnNpb24uaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTEyNEE4RjUwRTU1NTc3NTAwMzA5MUYxIC8qIE9wYXF1ZUpT
U3RyaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE9wYXF1ZUpTU3RyaW5n
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01NTc4LDEwICs1NTk3LDEwIEBACiAJ
CUE1MzI0MzhFMTg1Njk2Q0UwMDJFRDY5MiAvKiBzY3JpcHRzICovID0gewogCQkJaXNhID0gUEJY
R3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQlBNTMyNDM4RjE4NTY5NkU2MDAyRUQ2OTIgLyog
Q29kZUdlbmVyYXRvckluc3BlY3Rvci5weSAqLywKLQkJCQlBNTMyNDM5MDE4NTY5NkU2MDAyRUQ2
OTIgLyogQ29kZUdlbmVyYXRvckluc3BlY3RvclN0cmluZ3MucHkgKi8sCisJCQkJQzQ3MDNDQzEx
OTI4NDRBNDAwMTNGQkVBIC8qIGNvZGVnZW4gKi8sCiAJCQkJQTU4NDBFMjYxODdDOTgwNzAwODQz
QjEwIC8qIGNzc21pbi5weSAqLywKIAkJCQlBNTMyNDM5MTE4NTY5NkU2MDAyRUQ2OTIgLyogZ2Vu
ZXJhdGUtY29tYmluZWQtaW5zcGVjdG9yLWpzb24ucHkgKi8sCisJCQkJQzQ3MDNDQkYxOTI4NDQ5
NjAwMTNGQkVBIC8qIGdlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weSAqLywK
IAkJCQlBNTg0MEUyODE4N0NBNUI4MDA4NDNCMTAgLyogaW5saW5lLWFuZC1taW5pZnktc3R5bGVz
aGVldHMtYW5kLXNjcmlwdHMucHkgKi8sCiAJCQkJQTUxM0U1QzQxODVGOTJEQzAwN0U5NUFEIC8q
IGpzbWluLnB5ICovLAogCQkJCUE1MTNFNUM1MTg1RjkyRjAwMDdFOTVBRCAvKiB4eGQucGwgKi8s
CkBAIC01Njk5LDYgKzU3MTgsMjQgQEAKIAkJCXBhdGggPSBidWlsdGluczsKIAkJCXNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7CiAJCX07CisJCUM0NzAzQ0MxMTkyODQ0QTQwMDEzRkJFQSAvKiBjb2Rl
Z2VuICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQlDNDcw
M0NDMjE5Mjg0NENDMDAxM0ZCRUEgLyogX19pbml0X18ucHkgKi8sCisJCQkJQzQ3MDNDQzMxOTI4
NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRlX2JhY2tlbmRfY29tbWFuZHMucHkgKi8sCisJCQkJQzQ3
MDNDQzQxOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFk
ZXIucHkgKi8sCisJCQkJQzQ3MDNDQzUxOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRlX2JhY2tl
bmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSAqLywKKwkJCQlDNDcwM0NDNjE5Mjg0NEND
MDAxM0ZCRUEgLyogZ2VuZXJhdGVfZnJvbnRlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkgKi8sCisJ
CQkJQzQ3MDNDQzcxOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRlX2Zyb250ZW5kX2Rpc3BhdGNo
ZXJfaW1wbGVtZW50YXRpb24ucHkgKi8sCisJCQkJQzQ3MDNDQzgxOTI4NDRDQzAwMTNGQkVBIC8q
IGdlbmVyYXRlX3R5cGVfYnVpbGRlcl9oZWFkZXIucHkgKi8sCisJCQkJQzQ3MDNDQzkxOTI4NDRD
QzAwMTNGQkVBIC8qIGdlbmVyYXRlX3R5cGVfYnVpbGRlcl9pbXBsZW1lbnRhdGlvbi5weSAqLywK
KwkJCQlDNDcwM0NDQTE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJhdG9yX3RlbXBsYXRlcy5weSAq
LywKKwkJCQlDNDcwM0NDQjE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJhdG9yLnB5ICovLAorCQkJ
CUM0NzAzQ0NDMTkyODQ0Q0MwMDEzRkJFQSAvKiBtb2RlbHMucHkgKi8sCisJCQkpOworCQkJcGF0
aCA9IGNvZGVnZW47CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogLyogRW5kIFBC
WEdyb3VwIHNlY3Rpb24gKi8KIAogLyogQmVnaW4gUEJYSGVhZGVyc0J1aWxkUGhhc2Ugc2VjdGlv
biAqLwpAQCAtNTk4Nyw2ICs2MDI0LDE5IEBACiAJCQkJMkFBQkNERTcxOEVGMjk0MjAwMDAyMDk2
IC8qIEdDTG9nZ2luZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkU1MjQ4RjkxOTE0NDJEOTAwQjdG
REU0IC8qIFZhcmlhYmxlV2F0Y2hwb2ludFNldElubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUMyREE3NzgzMThFMjU5OTkwMDY2RkNCNiAvKiBIZWFwSW5saW5lcy5oIGluIEhlYWRlcnMgKi8s
CisJCQkJQTUzMjQzOTQxODU2OTcwOTAwMkVENjkyIC8qIGdlbmVyYXRlLWNvbWJpbmVkLWluc3Bl
Y3Rvci1qc29uLnB5IGluIEhlYWRlcnMgKi8sCisJCQkJQTU4NDBFMjcxODdDOTgxRTAwODQzQjEw
IC8qIGNzc21pbi5weSBpbiBIZWFkZXJzICovLAorCQkJCUM0NzAzQ0QzMTkyODQ0Q0MwMDEzRkJF
QSAvKiBnZW5lcmF0ZV90eXBlX2J1aWxkZXJfaGVhZGVyLnB5IGluIEhlYWRlcnMgKi8sCisJCQkJ
QzQ3MDNDRDIxOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRlX2Zyb250ZW5kX2Rpc3BhdGNoZXJf
aW1wbGVtZW50YXRpb24ucHkgaW4gSGVhZGVycyAqLywKKwkJCQlDNDcwM0NEMTE5Mjg0NENDMDAx
M0ZCRUEgLyogZ2VuZXJhdGVfZnJvbnRlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkgaW4gSGVhZGVy
cyAqLywKKwkJCQlDNDcwM0NENTE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJhdG9yX3RlbXBsYXRl
cy5weSBpbiBIZWFkZXJzICovLAorCQkJCUM0NzAzQ0Q2MTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5l
cmF0b3IucHkgaW4gSGVhZGVycyAqLywKKwkJCQlDNDcwM0NDRjE5Mjg0NENDMDAxM0ZCRUEgLyog
Z2VuZXJhdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weSBpbiBIZWFkZXJzICovLAorCQkJ
CUM0NzAzQ0MwMTkyODQ0OTYwMDEzRkJFQSAvKiBnZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkgaW4gSGVhZGVycyAqLywKKwkJCQlDNDcwM0NEMDE5Mjg0NENDMDAxM0ZCRUEg
LyogZ2VuZXJhdGVfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5IGluIEhlYWRl
cnMgKi8sCisJCQkJQzQ3MDNDQ0UxOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRlX2JhY2tlbmRf
Y29tbWFuZHMucHkgaW4gSGVhZGVycyAqLywKKwkJCQlDNDcwM0NENDE5Mjg0NENDMDAxM0ZCRUEg
LyogZ2VuZXJhdGVfdHlwZV9idWlsZGVyX2ltcGxlbWVudGF0aW9uLnB5IGluIEhlYWRlcnMgKi8s
CisJCQkJQzQ3MDNDRDcxOTI4NDRDQzAwMTNGQkVBIC8qIG1vZGVscy5weSBpbiBIZWFkZXJzICov
LAogCQkJCTJBQUNFNjNEMThDQTVBMDMwMEVEMDE5MSAvKiBHQ0FjdGl2aXR5Q2FsbGJhY2suaCBp
biBIZWFkZXJzICovLAogCQkJCTJBODM2Mzg2MThEN0QwRUUwMDAwRUJDQyAvKiBFZGVuR0NBY3Rp
dml0eUNhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQkyQTgzNjM4QTE4RDdEMEZFMDAwMEVC
Q0MgLyogRnVsbEdDQWN0aXZpdHlDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCkBAIC02MDQ2LDgg
KzYwOTYsNiBAQAogCQkJCTBGRDhBMzE0MTdENDMyNkMwMENBMkM0MCAvKiBDb2RlQmxvY2tTZXQu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGOTZFQkIzMTY2NzZFRjYwMDhCQURFMyAvKiBDb2RlQmxv
Y2tXaXRoSklUVHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc3RjE4MjIxNjQwODhCMjAwNjQw
QTQ3IC8qIENvZGVDYWNoZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQTUzMjQzOTIxODU2OTcwOTAw
MkVENjkyIC8qIENvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkgaW4gSGVhZGVycyAqLywKLQkJCQlB
NTMyNDM5MzE4NTY5NzA5MDAyRUQ2OTIgLyogQ29kZUdlbmVyYXRvckluc3BlY3RvclN0cmluZ3Mu
cHkgaW4gSGVhZGVycyAqLywKIAkJCQk4NkUxMTZCMTBGRTc1QUM4MDBCNTEyQkMgLyogQ29kZUxv
Y2F0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkJEN0U2OTE0NDc5OTk2MDA0ODEzMTUgLyog
Q29kZU9yaWdpbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyMUMyN0QxNEJFNzI3QTAwQURDNjRC
IC8qIENvZGVTcGVjaWFsaXphdGlvbktpbmQuaCBpbiBIZWFkZXJzICovLApAQCAtNjA3OCw3ICs2
MTI2LDYgQEAKIAkJCQlDMjE4RDE0MDE2NTVDRkQ1MDA2MkJCODEgLyogQ29weVdvcmtMaXN0Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQkyQTY4Mjk1QjE4NzVGODA1MDBCNkMzRTIgLyogQ29weVdyaXRl
QmFycmllci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNURFNkU1QjMwRTE3MjhFQzAwMTgwNDA3IC8q
IGNyZWF0ZV9oYXNoX3RhYmxlIGluIEhlYWRlcnMgKi8sCi0JCQkJQTU4NDBFMjcxODdDOTgxRTAw
ODQzQjEwIC8qIGNzc21pbi5weSBpbiBIZWFkZXJzICovLAogCQkJCTBGNDI2QTRCMTQ2MENENkUw
MDEzMUY4RiAvKiBEYXRhRm9ybWF0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZERjE3QjZC
NUFCMDBBN0FFM0YgLyogRGF0YVZpZXcuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRDIwMzRBMEUx
NzEzNUUwMDJDN0U4MiAvKiBEYXRlQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLApAQCAtNjMx
OSw3ICs2MzY2LDYgQEAKIAkJCQkwRjJCNjZBRjE3QjZCNTQ1MDBBN0FFM0YgLyogR0NJbmNvbWlu
Z1JlZkNvdW50ZWRTZXRJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMjIzOUQxQjE2MjYy
QkREMDA1QUM1RkQgLyogR0NUaHJlYWQuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyMTEyMkUyMTVE
RDlBQjMwMDc5MEUzQSAvKiBHQ1RocmVhZFNoYXJlZERhdGEuaCBpbiBIZWFkZXJzICovLAotCQkJ
CUE1MzI0Mzk0MTg1Njk3MDkwMDJFRDY5MiAvKiBnZW5lcmF0ZS1jb21iaW5lZC1pbnNwZWN0b3It
anNvbi5weSBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NkUwMTdCNkI1QUIwMEE3QUUzRiAvKiBH
ZW5lcmljVHlwZWRBcnJheVZpZXcuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMUZFNTFDMTkyMkEz
QkMwMDY5ODdDNSAvKiBBYm9ydFJlYXNvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RTEx
N0I2QjVBQjAwQTdBRTNGIC8qIEdlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaCBpbiBIZWFk
ZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9Db25z
b2xlTWVzc2FnZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0NvbnNvbGVN
ZXNzYWdlLmNwcAppbmRleCA0MDc5MGJmNWQ5ZTU5MWJlMGUzNWY2MmE0NTE4NzhiY2Q1NzJjN2Y2
Li4wMjAzYmMxYTlmNzM2YjQ4ZmMyMWVjMTFjOGUzYjQ5NTA5ZDEwOTU5IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0NvbnNvbGVNZXNzYWdlLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0NvbnNvbGVNZXNzYWdlLmNwcApAQCAtMTMx
LDcgKzEzMSw3IEBAIHZvaWQgQ29uc29sZU1lc3NhZ2U6OmF1dG9nZW5lcmF0ZU1ldGFkYXRhKEpT
Qzo6RXhlY1N0YXRlKiBzdGF0ZSkKICAgICB9CiB9CiAKLXN0YXRpYyBJbnNwZWN0b3I6OlR5cGVC
dWlsZGVyOjpDb25zb2xlOjpDb25zb2xlTWVzc2FnZTo6U291cmNlOjpFbnVtIG1lc3NhZ2VTb3Vy
Y2VWYWx1ZShNZXNzYWdlU291cmNlIHNvdXJjZSkKK3N0YXRpYyBJbnNwZWN0b3I6OlR5cGVCdWls
ZGVyOjpDb25zb2xlOjpDb25zb2xlTWVzc2FnZTo6U291cmNlIG1lc3NhZ2VTb3VyY2VWYWx1ZShN
ZXNzYWdlU291cmNlIHNvdXJjZSkKIHsKICAgICBzd2l0Y2ggKHNvdXJjZSkgewogICAgIGNhc2Ug
TWVzc2FnZVNvdXJjZTo6WE1MOiByZXR1cm4gSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q29uc29s
ZTo6Q29uc29sZU1lc3NhZ2U6OlNvdXJjZTo6WE1MOwpAQCAtMTQ4LDcgKzE0OCw3IEBAIHN0YXRp
YyBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDb25zb2xlOjpDb25zb2xlTWVzc2FnZTo6U291cmNl
OjpFbnVtIG1lc3NhZ2VTb3VyCiAgICAgcmV0dXJuIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNv
bnNvbGU6OkNvbnNvbGVNZXNzYWdlOjpTb3VyY2U6Ok90aGVyOwogfQogCi1zdGF0aWMgSW5zcGVj
dG9yOjpUeXBlQnVpbGRlcjo6Q29uc29sZTo6Q29uc29sZU1lc3NhZ2U6OlR5cGU6OkVudW0gbWVz
c2FnZVR5cGVWYWx1ZShNZXNzYWdlVHlwZSB0eXBlKQorc3RhdGljIEluc3BlY3Rvcjo6VHlwZUJ1
aWxkZXI6OkNvbnNvbGU6OkNvbnNvbGVNZXNzYWdlOjpUeXBlIG1lc3NhZ2VUeXBlVmFsdWUoTWVz
c2FnZVR5cGUgdHlwZSkKIHsKICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICBjYXNlIE1lc3NhZ2VU
eXBlOjpMb2c6IHJldHVybiBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDb25zb2xlOjpDb25zb2xl
TWVzc2FnZTo6VHlwZTo6TG9nOwpAQCAtMTY4LDcgKzE2OCw3IEBAIHN0YXRpYyBJbnNwZWN0b3I6
OlR5cGVCdWlsZGVyOjpDb25zb2xlOjpDb25zb2xlTWVzc2FnZTo6VHlwZTo6RW51bSBtZXNzYWdl
VHlwZVZhCiAgICAgcmV0dXJuIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNvbnNvbGU6OkNvbnNv
bGVNZXNzYWdlOjpUeXBlOjpMb2c7CiB9CiAKLXN0YXRpYyBJbnNwZWN0b3I6OlR5cGVCdWlsZGVy
OjpDb25zb2xlOjpDb25zb2xlTWVzc2FnZTo6TGV2ZWw6OkVudW0gbWVzc2FnZUxldmVsVmFsdWUo
TWVzc2FnZUxldmVsIGxldmVsKQorc3RhdGljIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNvbnNv
bGU6OkNvbnNvbGVNZXNzYWdlOjpMZXZlbCBtZXNzYWdlTGV2ZWxWYWx1ZShNZXNzYWdlTGV2ZWwg
bGV2ZWwpCiB7CiAgICAgc3dpdGNoIChsZXZlbCkgewogICAgIGNhc2UgTWVzc2FnZUxldmVsOjpM
b2c6IHJldHVybiBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDb25zb2xlOjpDb25zb2xlTWVzc2Fn
ZTo6TGV2ZWw6OkxvZzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3IvSW5qZWN0ZWRTY3JpcHQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9J
bmplY3RlZFNjcmlwdC5jcHAKaW5kZXggNzg1ZGFkMGFjODhlNGU3MGQ5ODVmNjA5ODgwNWVkYzQ1
YmFmNjhmMS4uZTVhMjYyMmRkZWIxNDUyZmU5MmJjYTQ2YTgwNDU5Yjk5YmFkNDA4YSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdC5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdC5jcHAK
QEAgLTEwMCwxMyArMTAwLDEzIEBAIHZvaWQgSW5qZWN0ZWRTY3JpcHQ6OmdldEZ1bmN0aW9uRGV0
YWlscyhFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYKIAogICAgIFJlZlB0
cjxJbnNwZWN0b3JWYWx1ZT4gcmVzdWx0VmFsdWU7CiAgICAgbWFrZUNhbGwoZnVuY3Rpb24sICZy
ZXN1bHRWYWx1ZSk7Ci0gICAgaWYgKCFyZXN1bHRWYWx1ZSB8fCByZXN1bHRWYWx1ZS0+dHlwZSgp
ICE9IEluc3BlY3RvclZhbHVlOjpUeXBlT2JqZWN0KSB7CisgICAgaWYgKCFyZXN1bHRWYWx1ZSB8
fCByZXN1bHRWYWx1ZS0+dHlwZSgpICE9IEluc3BlY3RvclZhbHVlOjpUeXBlOjpPYmplY3QpIHsK
ICAgICAgICAgaWYgKCFyZXN1bHRWYWx1ZS0+YXNTdHJpbmcoZXJyb3JTdHJpbmcpKQogICAgICAg
ICAgICAgKmVycm9yU3RyaW5nID0gQVNDSUlMaXRlcmFsKCJJbnRlcm5hbCBlcnJvciIpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgKnJlc3VsdCA9IEluc3BlY3Rvcjo6VHlwZUJ1aWxk
ZXI6OkRlYnVnZ2VyOjpGdW5jdGlvbkRldGFpbHM6OnJ1bnRpbWVDYXN0KHJlc3VsdFZhbHVlKTsK
KyAgICAqcmVzdWx0ID0gQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpEZWJ1
Z2dlcjo6RnVuY3Rpb25EZXRhaWxzPjo6cnVudGltZUNhc3QocmVzdWx0VmFsdWUpOwogfQogCiB2
b2lkIEluamVjdGVkU2NyaXB0OjpnZXRQcm9wZXJ0aWVzKEVycm9yU3RyaW5nKiBlcnJvclN0cmlu
ZywgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwgYm9vbCBvd25Qcm9wZXJ0aWVzLCBSZWZQdHI8QXJy
YXk8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UnVudGltZTo6UHJvcGVydHlEZXNjcmlwdG9yPj4q
IHByb3BlcnRpZXMpCkBAIC0xMTcsMTIgKzExNywxMiBAQCB2b2lkIEluamVjdGVkU2NyaXB0Ojpn
ZXRQcm9wZXJ0aWVzKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBvYmpl
YwogCiAgICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiByZXN1bHQ7CiAgICAgbWFrZUNhbGwoZnVu
Y3Rpb24sICZyZXN1bHQpOwotICAgIGlmICghcmVzdWx0IHx8IHJlc3VsdC0+dHlwZSgpICE9IElu
c3BlY3RvclZhbHVlOjpUeXBlQXJyYXkpIHsKKyAgICBpZiAoIXJlc3VsdCB8fCByZXN1bHQtPnR5
cGUoKSAhPSBJbnNwZWN0b3JWYWx1ZTo6VHlwZTo6QXJyYXkpIHsKICAgICAgICAgKmVycm9yU3Ry
aW5nID0gQVNDSUlMaXRlcmFsKCJJbnRlcm5hbCBlcnJvciIpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCi0gICAgKnByb3BlcnRpZXMgPSBBcnJheTxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpS
dW50aW1lOjpQcm9wZXJ0eURlc2NyaXB0b3I+OjpydW50aW1lQ2FzdChyZXN1bHQpOworICAgICpw
cm9wZXJ0aWVzID0gQmluZGluZ1RyYWl0czxBcnJheTxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpS
dW50aW1lOjpQcm9wZXJ0eURlc2NyaXB0b3I+Pjo6cnVudGltZUNhc3QocmVzdWx0KTsKIH0KIAog
dm9pZCBJbmplY3RlZFNjcmlwdDo6Z2V0SW50ZXJuYWxQcm9wZXJ0aWVzKEVycm9yU3RyaW5nKiBl
cnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwgUmVmUHRyPEFycmF5PEluc3BlY3Rv
cjo6VHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OkludGVybmFsUHJvcGVydHlEZXNjcmlwdG9yPj4qIHBy
b3BlcnRpZXMpCkBAIC0xMzIsMTIgKzEzMiwxMiBAQCB2b2lkIEluamVjdGVkU2NyaXB0OjpnZXRJ
bnRlcm5hbFByb3BlcnRpZXMoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbgog
CiAgICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiByZXN1bHQ7CiAgICAgbWFrZUNhbGwoZnVuY3Rp
b24sICZyZXN1bHQpOwotICAgIGlmICghcmVzdWx0IHx8IHJlc3VsdC0+dHlwZSgpICE9IEluc3Bl
Y3RvclZhbHVlOjpUeXBlQXJyYXkpIHsKKyAgICBpZiAoIXJlc3VsdCB8fCByZXN1bHQtPnR5cGUo
KSAhPSBJbnNwZWN0b3JWYWx1ZTo6VHlwZTo6QXJyYXkpIHsKICAgICAgICAgKmVycm9yU3RyaW5n
ID0gQVNDSUlMaXRlcmFsKCJJbnRlcm5hbCBlcnJvciIpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgUmVmUHRyPEFycmF5PEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlJ1bnRpbWU6Oklu
dGVybmFsUHJvcGVydHlEZXNjcmlwdG9yPj4gYXJyYXkgPSBBcnJheTxJbnNwZWN0b3I6OlR5cGVC
dWlsZGVyOjpSdW50aW1lOjpJbnRlcm5hbFByb3BlcnR5RGVzY3JpcHRvcj46OnJ1bnRpbWVDYXN0
KHJlc3VsdCk7CisgICAgYXV0byBhcnJheSA9IEJpbmRpbmdUcmFpdHM8QXJyYXk8SW5zcGVjdG9y
OjpUeXBlQnVpbGRlcjo6UnVudGltZTo6SW50ZXJuYWxQcm9wZXJ0eURlc2NyaXB0b3I+Pjo6cnVu
dGltZUNhc3QocmVzdWx0KTsKICAgICBpZiAoYXJyYXktPmxlbmd0aCgpID4gMCkKICAgICAgICAg
KnByb3BlcnRpZXMgPSBhcnJheTsKIH0KQEAgLTE1Miw4ICsxNTIsOCBAQCBQYXNzUmVmUHRyPEFy
cmF5PEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpDYWxsRnJhbWU+PiBJbmplY3Rl
ZFNjcmlwdDo6dwogICAgIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIGNhbGxGcmFtZXNWYWx1ZSA9
IGNhbGxGdW5jdGlvbldpdGhFdmFsRW5hYmxlZChmdW5jdGlvbiwgaGFkRXhjZXB0aW9uKTsKICAg
ICBBU1NFUlQoIWhhZEV4Y2VwdGlvbik7CiAgICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiByZXN1
bHQgPSBjYWxsRnJhbWVzVmFsdWUudG9JbnNwZWN0b3JWYWx1ZShzY3JpcHRTdGF0ZSgpKTsKLSAg
ICBpZiAocmVzdWx0LT50eXBlKCkgPT0gSW5zcGVjdG9yVmFsdWU6OlR5cGVBcnJheSkKLSAgICAg
ICAgcmV0dXJuIEFycmF5PEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpDYWxsRnJh
bWU+OjpydW50aW1lQ2FzdChyZXN1bHQpOworICAgIGlmIChyZXN1bHQtPnR5cGUoKSA9PSBJbnNw
ZWN0b3JWYWx1ZTo6VHlwZTo6QXJyYXkpCisgICAgICAgIHJldHVybiBCaW5kaW5nVHJhaXRzPEFy
cmF5PEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpDYWxsRnJhbWU+Pjo6cnVudGlt
ZUNhc3QocmVzdWx0KTsKIAogICAgIHJldHVybiBBcnJheTxJbnNwZWN0b3I6OlR5cGVCdWlsZGVy
OjpEZWJ1Z2dlcjo6Q2FsbEZyYW1lPjo6Y3JlYXRlKCk7CiB9CkBAIC0xNzMsNyArMTczLDcgQEAg
UGFzc1JlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+
IEluamVjdGVkU2NyaXB0Ojp3cmFwT2IKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByYXdSZXN1bHQgPSByLnRvSW5zcGVjdG9yVmFsdWUoc2Ny
aXB0U3RhdGUoKSktPmFzT2JqZWN0KCk7Ci0gICAgcmV0dXJuIEluc3BlY3Rvcjo6VHlwZUJ1aWxk
ZXI6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdDo6cnVudGltZUNhc3QocmF3UmVzdWx0KTsKKyAgICBy
ZXR1cm4gQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpSdW50aW1lOjpSZW1v
dGVPYmplY3Q+OjpydW50aW1lQ2FzdChyYXdSZXN1bHQpOwogfQogCiBQYXNzUmVmUHRyPEluc3Bl
Y3Rvcjo6VHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4gSW5qZWN0ZWRTY3JpcHQ6
OndyYXBUYWJsZShjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYgdGFibGUsIGNvbnN0IERl
cHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBjb2x1bW5zKSBjb25zdApAQCAtMTkzLDcgKzE5Myw3IEBA
IFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UnVudGltZTo6UmVtb3RlT2JqZWN0
PiBJbmplY3RlZFNjcmlwdDo6d3JhcFRhCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmF3UmVzdWx0ID0gci50b0luc3BlY3RvclZhbHVlKHNj
cmlwdFN0YXRlKCkpLT5hc09iamVjdCgpOwotICAgIHJldHVybiBJbnNwZWN0b3I6OlR5cGVCdWls
ZGVyOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q6OnJ1bnRpbWVDYXN0KHJhd1Jlc3VsdCk7CisgICAg
cmV0dXJuIEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UnVudGltZTo6UmVt
b3RlT2JqZWN0Pjo6cnVudGltZUNhc3QocmF3UmVzdWx0KTsKIH0KIAogRGVwcmVjYXRlZDo6U2Ny
aXB0VmFsdWUgSW5qZWN0ZWRTY3JpcHQ6OmZpbmRPYmplY3RCeUlkKGNvbnN0IFN0cmluZyYgb2Jq
ZWN0SWQpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L0luamVjdGVkU2NyaXB0QmFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L0luamVjdGVkU2NyaXB0QmFzZS5jcHAKaW5kZXggZDk1NjFlMWY0YTc4NmY5NjU1MGUyMmRhYTM0
MjM3ZWM5M2FlY2YxYi4uZmUxMGQ2YzRiZmJhZmJmMjg2Y2MzYThkMzVjOWM1OGRkNTQyNGMxYiAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlw
dEJhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRT
Y3JpcHRCYXNlLmNwcApAQCAtMTI4LDcgKzEyOCw3IEBAIHZvaWQgSW5qZWN0ZWRTY3JpcHRCYXNl
OjptYWtlRXZhbENhbGwoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBEZXByZWNhdGVkOjpTY3Jp
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAocmVzdWx0LT50eXBlKCkgPT0gSW5z
cGVjdG9yVmFsdWU6OlR5cGVTdHJpbmcpIHsKKyAgICBpZiAocmVzdWx0LT50eXBlKCkgPT0gSW5z
cGVjdG9yVmFsdWU6OlR5cGU6OlN0cmluZykgewogICAgICAgICByZXN1bHQtPmFzU3RyaW5nKGVy
cm9yU3RyaW5nKTsKICAgICAgICAgQVNTRVJUKGVycm9yU3RyaW5nLT5sZW5ndGgoKSk7CiAgICAg
ICAgIHJldHVybjsKQEAgLTE0Nyw3ICsxNDcsNyBAQCB2b2lkIEluamVjdGVkU2NyaXB0QmFzZTo6
bWFrZUV2YWxDYWxsKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgRGVwcmVjYXRlZDo6U2NyaQog
ICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgKm9iamVjdFJlc3VsdCA9IFR5cGVCdWlsZGVy
OjpSdW50aW1lOjpSZW1vdGVPYmplY3Q6OnJ1bnRpbWVDYXN0KHJlc3VsdE9iaik7CisgICAgKm9i
amVjdFJlc3VsdCA9IEJpbmRpbmdUcmFpdHM8VHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OlJlbW90ZU9i
amVjdD46OnJ1bnRpbWVDYXN0KHJlc3VsdE9iaik7CiAgICAgKndhc1Rocm93biA9IHdhc1Rocm93
blZhbDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9J
bmplY3RlZFNjcmlwdE1hbmFnZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9JbmplY3RlZFNjcmlwdE1hbmFnZXIuY3BwCmluZGV4IGVmMGQ5YTM3NDczNGQyNTY0ZWMwYzgx
YjYzODRkNmM3ZDAzNGVhMWQuLjQ1MTczZmM4MzdiYWUwZTIwNjQxN2MzNTUxMTE5MmU1NDY2Mzhj
YjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRT
Y3JpcHRNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0lu
amVjdGVkU2NyaXB0TWFuYWdlci5jcHAKQEAgLTk1LDcgKzk1LDcgQEAgaW50IEluamVjdGVkU2Ny
aXB0TWFuYWdlcjo6aW5qZWN0ZWRTY3JpcHRJZEZvcihFeGVjU3RhdGUqIHNjcmlwdFN0YXRlKQog
SW5qZWN0ZWRTY3JpcHQgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOjppbmplY3RlZFNjcmlwdEZvck9i
amVjdElkKGNvbnN0IFN0cmluZyYgb2JqZWN0SWQpCiB7CiAgICAgUmVmUHRyPEluc3BlY3RvclZh
bHVlPiBwYXJzZWRPYmplY3RJZCA9IEluc3BlY3RvclZhbHVlOjpwYXJzZUpTT04ob2JqZWN0SWQp
OwotICAgIGlmIChwYXJzZWRPYmplY3RJZCAmJiBwYXJzZWRPYmplY3RJZC0+dHlwZSgpID09IElu
c3BlY3RvclZhbHVlOjpUeXBlT2JqZWN0KSB7CisgICAgaWYgKHBhcnNlZE9iamVjdElkICYmIHBh
cnNlZE9iamVjdElkLT50eXBlKCkgPT0gSW5zcGVjdG9yVmFsdWU6OlR5cGU6Ok9iamVjdCkgewog
ICAgICAgICBsb25nIGluamVjdGVkU2NyaXB0SWQgPSAwOwogICAgICAgICBib29sIHN1Y2Nlc3Mg
PSBwYXJzZWRPYmplY3RJZC0+YXNPYmplY3QoKS0+Z2V0TnVtYmVyKEFTQ0lJTGl0ZXJhbCgiaW5q
ZWN0ZWRTY3JpcHRJZCIpLCAmaW5qZWN0ZWRTY3JpcHRJZCk7CiAgICAgICAgIGlmIChzdWNjZXNz
KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JU
eXBlQnVpbGRlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JU
eXBlQnVpbGRlci5oCmluZGV4IDhlYTc2ZWM5MGM2MGUwNzc2MTc5NWMxYzE0Nzk1MmQ0Nzg2OGZl
NTguLjUzOWY3ODIxMjAwM2ZmNTQwMWVjYjYzOWRkNWMzZTExYWUxYWJiOTAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVHlwZUJ1aWxkZXIuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvclR5cGVCdWlsZGVy
LmgKQEAgLTYzLDU0ICs2Myw2IEBAIHByaXZhdGU6CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
T3B0T3V0cHV0KTsKIH07CiAKLQotLy8gQSBzbWFsbCB0cmFuc2llbnQgd3JhcHBlciBhcm91bmQg
aW50IHR5cGUsIHRoYXQgY2FuIGJlIHVzZWQgYXMgYSBmdW5jaXRvbiBwYXJhbWV0ZXIgdHlwZQot
Ly8gY2xldmVybHkgZGlzYWxsb3dpbmcgQysrIGltcGxpY2l0IGNhc3RzIGZyb20gZmxvYXQgb3Ig
ZG91YmxlLgotY2xhc3MgRXhhY3RseUludCB7Ci1wdWJsaWM6Ci0gICAgdGVtcGxhdGU8dHlwZW5h
bWUgVD4KLSAgICBFeGFjdGx5SW50KFQgdCkgOiBtX3ZhbHVlKGNhc3RfdG9faW50PFQ+KHQpKSB7
IH0KLSAgICBFeGFjdGx5SW50KCkgeyB9Ci0KLSAgICBvcGVyYXRvciBpbnQoKSB7IHJldHVybiBt
X3ZhbHVlOyB9Ci0KLXByaXZhdGU6Ci0gICAgaW50IG1fdmFsdWU7Ci0KLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgotICAgIHN0YXRpYyBpbnQgY2FzdF90b19pbnQoVCkgeyByZXR1cm4gVDo6ZGVm
YXVsdF9jYXNlX2Nhc3RfaXNfbm90X3N1cHBvcnRlZCgpOyB9Ci19OwotCi10ZW1wbGF0ZTw+Ci1p
bmxpbmUgaW50IEV4YWN0bHlJbnQ6OmNhc3RfdG9faW50PGludD4oaW50IGkpIHsgcmV0dXJuIGk7
IH0KLQotdGVtcGxhdGU8PgotaW5saW5lIGludCBFeGFjdGx5SW50OjpjYXN0X3RvX2ludDx1bnNp
Z25lZCBpbnQ+KHVuc2lnbmVkIGludCBpKSB7IHJldHVybiBpOyB9Ci0KLSNpZiAhQVNTRVJUX0RJ
U0FCTEVECi1jbGFzcyBSdW50aW1lQ2FzdEhlbHBlciB7Ci1wdWJsaWM6Ci0gICAgdGVtcGxhdGU8
SW5zcGVjdG9yVmFsdWU6OlR5cGUgVFlQRT4KLSAgICBzdGF0aWMgdm9pZCBhc3NlcnRUeXBlKElu
c3BlY3RvclZhbHVlKiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVCh2YWx1ZS0+dHlwZSgp
ID09IFRZUEUpOwotICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIGFzc2VydEFueShJbnNwZWN0b3JW
YWx1ZSopCi0gICAgewotICAgIH0KLQotICAgIHN0YXRpYyB2b2lkIGFzc2VydEludChJbnNwZWN0
b3JWYWx1ZSogdmFsdWUpCi0gICAgewotICAgICAgICBkb3VibGUgdjsKLSAgICAgICAgYm9vbCBj
YXN0UmVzID0gdmFsdWUtPmFzTnVtYmVyKCZ2KTsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChjYXN0
UmVzLCBjYXN0UmVzKTsKLSAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PGRvdWJsZT4oc3RhdGlj
X2Nhc3Q8aW50Pih2KSkgPT0gdik7Ci0gICAgfQotfTsKLSNlbmRpZgotCi0KIC8vIFRoaXMgY2xh
c3MgcHJvdmlkZXMgIlRyYWl0cyIgdHlwZSBmb3IgdGhlIGlucHV0IHR5cGUgVC4gSXQgaXMgcHJv
Z3JhbW1lZCB1c2luZyBDKysgdGVtcGxhdGUgc3BlY2lhbGl6YXRpb24KIC8vIHRlY2huaXF1ZS4g
QnkgZGVmYXVsdCBpdCBzaW1wbHkgdGFrZXMgIkl0ZW1UcmFpdHMiIHR5cGUgZnJvbSBULCBidXQg
aXQgZG9lc24ndCB3b3JrIHdpdGggdGhlIGJhc2UgdHlwZXMuCiB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgpAQCAtMTQ0LDI5ICs5Niw2IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgQXJyYXk8VD4oKSk7CiAgICAgfQotCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8QXJy
YXk8VD4+IHJ1bnRpbWVDYXN0KFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHZhbHVlKQotICAg
IHsKLSAgICAgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBhcnJheTsKLSAgICAgICAgYm9vbCBj
YXN0UmVzID0gdmFsdWUtPmFzQXJyYXkoJmFycmF5KTsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChj
YXN0UmVzLCBjYXN0UmVzKTsKLSNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgICAgIGFzc2VydENv
cnJlY3RWYWx1ZShhcnJheS5nZXQoKSk7Ci0jZW5kaWYgLy8gIUFTU0VSVF9ESVNBQkxFRAotICAg
ICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoQXJyYXk8VD4pID09IHNpemVvZihJbnNwZWN0b3JB
cnJheSksIHR5cGVfY2FzdF9wcm9ibGVtKTsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEFy
cmF5PFQ+Kj4oc3RhdGljX2Nhc3Q8SW5zcGVjdG9yQXJyYXlCYXNlKj4oYXJyYXkuZ2V0KCkpKTsK
LSAgICB9Ci0KLSNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgc3RhdGljIHZvaWQgYXNzZXJ0Q29y
cmVjdFZhbHVlKEluc3BlY3RvclZhbHVlKiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIFJlZlB0cjxJ
bnNwZWN0b3JBcnJheT4gYXJyYXk7Ci0gICAgICAgIGJvb2wgY2FzdFJlcyA9IHZhbHVlLT5hc0Fy
cmF5KCZhcnJheSk7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQoY2FzdFJlcywgY2FzdFJlcyk7Ci0g
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhcnJheS0+bGVuZ3RoKCk7IGkrKykKLSAg
ICAgICAgICAgIEFycmF5SXRlbUhlbHBlcjxUPjo6VHJhaXRzOjp0ZW1wbGF0ZSBhc3NlcnRDb3Jy
ZWN0VmFsdWU8VD4oYXJyYXktPmdldChpKS5nZXQoKSk7Ci0gICAgfQotI2VuZGlmIC8vICFBU1NF
UlRfRElTQUJMRUQKIH07CiAKIHN0cnVjdCBTdHJ1Y3RJdGVtVHJhaXRzIHsKQEAgLTE3NCwxNCAr
MTAzLDYgQEAgc3RydWN0IFN0cnVjdEl0ZW1UcmFpdHMgewogICAgIHsKICAgICAgICAgYXJyYXkt
PnB1c2hWYWx1ZSh2YWx1ZSk7CiAgICAgfQotCi0jaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgc3RhdGljIHZvaWQgYXNzZXJ0Q29ycmVjdFZhbHVlKElu
c3BlY3RvclZhbHVlKiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIFQ6OmFzc2VydENvcnJlY3RWYWx1
ZSh2YWx1ZSk7Ci0gICAgfQotI2VuZGlmIC8vICFBU1NFUlRfRElTQUJMRUQKIH07CiAKIHRlbXBs
YXRlPD4KQEAgLTE5MSwxNCArMTEyLDYgQEAgc3RydWN0IEFycmF5SXRlbUhlbHBlcjxTdHJpbmc+
IHsKICAgICAgICAgewogICAgICAgICAgICAgYXJyYXktPnB1c2hTdHJpbmcodmFsdWUpOwogICAg
ICAgICB9Ci0KLSNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+Ci0gICAgICAgIHN0YXRpYyB2b2lkIGFzc2VydENvcnJlY3RWYWx1ZShJbnNwZWN0b3JWYWx1
ZSogdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFJ1bnRpbWVDYXN0SGVscGVyOjphc3Nl
cnRUeXBlPEluc3BlY3RvclZhbHVlOjpUeXBlU3RyaW5nPih2YWx1ZSk7Ci0gICAgICAgIH0KLSNl
bmRpZiAvLyAhQVNTRVJUX0RJU0FCTEVECiAgICAgfTsKIH07CiAKQEAgLTIwOSwxNCArMTIyLDYg
QEAgc3RydWN0IEFycmF5SXRlbUhlbHBlcjxpbnQ+IHsKICAgICAgICAgewogICAgICAgICAgICAg
YXJyYXktPnB1c2hJbnQodmFsdWUpOwogICAgICAgICB9Ci0KLSNpZiAhQVNTRVJUX0RJU0FCTEVE
Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgICAgIHN0YXRpYyB2b2lkIGFzc2Vy
dENvcnJlY3RWYWx1ZShJbnNwZWN0b3JWYWx1ZSogdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIFJ1bnRpbWVDYXN0SGVscGVyOjphc3NlcnRJbnQodmFsdWUpOwotICAgICAgICB9Ci0jZW5k
aWYgLy8gIUFTU0VSVF9ESVNBQkxFRAogICAgIH07CiB9OwogCkBAIC0yMjcsMTQgKzEzMiw2IEBA
IHN0cnVjdCBBcnJheUl0ZW1IZWxwZXI8ZG91YmxlPiB7CiAgICAgICAgIHsKICAgICAgICAgICAg
IGFycmF5LT5wdXNoTnVtYmVyKHZhbHVlKTsKICAgICAgICAgfQotCi0jaWYgIUFTU0VSVF9ESVNB
QkxFRAotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgICAgICBzdGF0aWMgdm9pZCBh
c3NlcnRDb3JyZWN0VmFsdWUoSW5zcGVjdG9yVmFsdWUqIHZhbHVlKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBSdW50aW1lQ2FzdEhlbHBlcjo6YXNzZXJ0VHlwZTxJbnNwZWN0b3JWYWx1ZTo6VHlw
ZU51bWJlcj4odmFsdWUpOwotICAgICAgICB9Ci0jZW5kaWYgLy8gIUFTU0VSVF9ESVNBQkxFRAog
ICAgIH07CiB9OwogCkBAIC0yNDUsMTQgKzE0Miw2IEBAIHN0cnVjdCBBcnJheUl0ZW1IZWxwZXI8
Ym9vbD4gewogICAgICAgICB7CiAgICAgICAgICAgICBhcnJheS0+cHVzaEJvb2xlYW4odmFsdWUp
OwogICAgICAgICB9Ci0KLSNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+Ci0gICAgICAgIHN0YXRpYyB2b2lkIGFzc2VydENvcnJlY3RWYWx1ZShJbnNwZWN0
b3JWYWx1ZSogdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFJ1bnRpbWVDYXN0SGVscGVy
Ojphc3NlcnRUeXBlPEluc3BlY3RvclZhbHVlOjpUeXBlQm9vbGVhbj4odmFsdWUpOwotICAgICAg
ICB9Ci0jZW5kaWYgLy8gIUFTU0VSVF9ESVNBQkxFRAogICAgIH07CiB9OwogCkBAIC0yNjMsMTQg
KzE1Miw2IEBAIHN0cnVjdCBBcnJheUl0ZW1IZWxwZXI8SW5zcGVjdG9yVmFsdWU+IHsKICAgICAg
ICAgewogICAgICAgICAgICAgYXJyYXktPnB1c2hWYWx1ZSh2YWx1ZSk7CiAgICAgICAgIH0KLQot
I2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICAg
ICAgc3RhdGljIHZvaWQgYXNzZXJ0Q29ycmVjdFZhbHVlKEluc3BlY3RvclZhbHVlKiB2YWx1ZSkK
LSAgICAgICAgewotICAgICAgICAgICAgUnVudGltZUNhc3RIZWxwZXI6OmFzc2VydEFueSh2YWx1
ZSk7Ci0gICAgICAgIH0KLSNlbmRpZiAvLyAhQVNTRVJUX0RJU0FCTEVECiAgICAgfTsKIH07CiAK
QEAgLTI4MSwxNCArMTYyLDYgQEAgc3RydWN0IEFycmF5SXRlbUhlbHBlcjxJbnNwZWN0b3JPYmpl
Y3Q+IHsKICAgICAgICAgewogICAgICAgICAgICAgYXJyYXktPnB1c2hWYWx1ZSh2YWx1ZSk7CiAg
ICAgICAgIH0KLQotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVD4KLSAgICAgICAgc3RhdGljIHZvaWQgYXNzZXJ0Q29ycmVjdFZhbHVlKEluc3BlY3RvclZh
bHVlKiB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgUnVudGltZUNhc3RIZWxwZXI6OmFz
c2VydFR5cGU8SW5zcGVjdG9yVmFsdWU6OlR5cGVPYmplY3Q+KHZhbHVlKTsKLSAgICAgICAgfQot
I2VuZGlmIC8vICFBU1NFUlRfRElTQUJMRUQKICAgICB9OwogfTsKIApAQCAtMjk5LDE0ICsxNzIs
NiBAQCBzdHJ1Y3QgQXJyYXlJdGVtSGVscGVyPEluc3BlY3RvckFycmF5PiB7CiAgICAgICAgIHsK
ICAgICAgICAgICAgIGFycmF5LT5wdXNoQXJyYXkodmFsdWUpOwogICAgICAgICB9Ci0KLSNpZiAh
QVNTRVJUX0RJU0FCTEVECi0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgICAgIHN0
YXRpYyB2b2lkIGFzc2VydENvcnJlY3RWYWx1ZShJbnNwZWN0b3JWYWx1ZSogdmFsdWUpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIFJ1bnRpbWVDYXN0SGVscGVyOjphc3NlcnRUeXBlPEluc3BlY3Rv
clZhbHVlOjpUeXBlQXJyYXk+KHZhbHVlKTsKLSAgICAgICAgfQotI2VuZGlmIC8vICFBU1NFUlRf
RElTQUJMRUQKICAgICB9OwogfTsKIApAQCAtMzE3LDE5ICsxODIsOTIgQEAgc3RydWN0IEFycmF5
SXRlbUhlbHBlcjxUeXBlQnVpbGRlcjo6QXJyYXk8VD4+IHsKICAgICAgICAgewogICAgICAgICAg
ICAgYXJyYXktPnB1c2hWYWx1ZSh2YWx1ZSk7CiAgICAgICAgIH0KKyAgICB9OworfTsKKworLy8g
SGVscGVyIG1ldGhvZHMgZm9yIFR5cGVCdWlsZGVyIGFuZCBvdGhlciBJbnNwZWN0b3IgdHlwZXMg
YXJlIHByb3ZpZGVkIGJ5CisvLyBzcGVjaWFsaXphdGlvbnMgb2YgQmluZGluZ1RyYWl0czxUPi4g
U29tZSBhcmUgZ2VuZXJhdGVkIGZvciBwcm90b2NvbCB0eXBlcy4KIAordGVtcGxhdGU8dHlwZW5h
bWUgVD4KK3N0cnVjdCBCaW5kaW5nVHJhaXRzIHsKKyAgICB0eXBlZGVmIFQgQmluZGluZ1R5cGU7
CisKKyAgICBzdGF0aWMgSW5zcGVjdG9yVmFsdWU6OlR5cGUgdHlwZVRhZygpOworICAgIHN0YXRp
YyBQYXNzUmVmUHRyPFQ+IHJ1bnRpbWVDYXN0KFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0Pik7
CiAjaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBTPgotICAg
ICAgICBzdGF0aWMgdm9pZCBhc3NlcnRDb3JyZWN0VmFsdWUoSW5zcGVjdG9yVmFsdWUqIHZhbHVl
KQotICAgICAgICB7Ci0gICAgICAgICAgICBTOjphc3NlcnRDb3JyZWN0VmFsdWUodmFsdWUpOwot
ICAgICAgICB9CisgICAgc3RhdGljIHZvaWQgYXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSW5z
cGVjdG9yVmFsdWUqKTsKKyNlbmRpZiAvLyAhQVNTRVJUX0RJU0FCTEVECit9OworCit0ZW1wbGF0
ZTxJbnNwZWN0b3JWYWx1ZTo6VHlwZSBUWVBFPgorc3RydWN0IFByaW1pdGl2ZUJpbmRpbmdUcmFp
dHMgeworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICBzdGF0aWMgdm9pZCBhc3NlcnRWYWx1ZUhh
c0V4cGVjdGVkVHlwZShJbnNwZWN0b3JWYWx1ZSogdmFsdWUpCisgICAgeworICAgICAgICBBU1NF
UlQodmFsdWUtPnR5cGUoKSA9PSBUWVBFKTsKKyAgICB9CisjZW5kaWYgLy8gIUFTU0VSVF9ESVNB
QkxFRAorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0cnVjdCBCaW5kaW5nVHJhaXRzPFR5
cGVCdWlsZGVyOjpBcnJheTxUPj4geworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEFycmF5PFQ+PiBy
dW50aW1lQ2FzdChQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJyYXk7CisgICAgICAgIGJvb2wgY2FzdFJlcyA9
IHZhbHVlLT5hc0FycmF5KCZhcnJheSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoY2FzdFJlcywg
Y2FzdFJlcyk7CisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgICAgICBhc3NlcnRWYWx1ZUhhc0V4
cGVjdGVkVHlwZShhcnJheS5nZXQoKSk7CisjZW5kaWYgLy8gIUFTU0VSVF9ESVNBQkxFRAorICAg
ICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoQXJyYXk8VD4pID09IHNpemVvZihJbnNwZWN0b3JB
cnJheSksIHR5cGVfY2FzdF9wcm9ibGVtKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEFy
cmF5PFQ+Kj4oc3RhdGljX2Nhc3Q8SW5zcGVjdG9yQXJyYXlCYXNlKj4oYXJyYXkuZ2V0KCkpKTsK
KyAgICB9CisKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgc3RhdGljIHZvaWQgYXNzZXJ0VmFs
dWVIYXNFeHBlY3RlZFR5cGUoSW5zcGVjdG9yVmFsdWUqIHZhbHVlKQorICAgIHsKKyAgICAgICAg
UmVmUHRyPEluc3BlY3RvckFycmF5PiBhcnJheTsKKyAgICAgICAgYm9vbCBjYXN0UmVzID0gdmFs
dWUtPmFzQXJyYXkoJmFycmF5KTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChjYXN0UmVzLCBjYXN0
UmVzKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFycmF5LT5sZW5ndGgoKTsg
aSsrKQorICAgICAgICAgICAgQmluZGluZ1RyYWl0czxUPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3Rl
ZFR5cGUoYXJyYXktPmdldChpKS5nZXQoKSk7CisgICAgfQorI2VuZGlmIC8vICFBU1NFUlRfRElT
QUJMRUQKK307CisKK3RlbXBsYXRlPD4KK3N0cnVjdCBCaW5kaW5nVHJhaXRzPEluc3BlY3RvclZh
bHVlPiB7CisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgIHN0YXRpYyB2b2lkIGFzc2VydFZhbHVl
SGFzRXhwZWN0ZWRUeXBlKEluc3BlY3RvclZhbHVlKikKKyAgICB7CisgICAgfQorI2VuZGlmIC8v
ICFBU1NFUlRfRElTQUJMRUQKK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEJpbmRpbmdUcmFpdHM8
SW5zcGVjdG9yQXJyYXk+IDogcHVibGljIFByaW1pdGl2ZUJpbmRpbmdUcmFpdHM8SW5zcGVjdG9y
VmFsdWU6OlR5cGU6OkFycmF5PiB7IH07Cit0ZW1wbGF0ZTw+IHN0cnVjdCBCaW5kaW5nVHJhaXRz
PEluc3BlY3Rvck9iamVjdD4gOiBwdWJsaWMgUHJpbWl0aXZlQmluZGluZ1RyYWl0czxJbnNwZWN0
b3JWYWx1ZTo6VHlwZTo6T2JqZWN0PiB7IH07Cit0ZW1wbGF0ZTw+IHN0cnVjdCBCaW5kaW5nVHJh
aXRzPFN0cmluZz4gOiBwdWJsaWMgUHJpbWl0aXZlQmluZGluZ1RyYWl0czxJbnNwZWN0b3JWYWx1
ZTo6VHlwZTo6U3RyaW5nPiB7IH07Cit0ZW1wbGF0ZTw+IHN0cnVjdCBCaW5kaW5nVHJhaXRzPGJv
b2w+IDogcHVibGljIFByaW1pdGl2ZUJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yVmFsdWU6OlR5cGU6
OkJvb2xlYW4+IHsgfTsKK3RlbXBsYXRlPD4gc3RydWN0IEJpbmRpbmdUcmFpdHM8ZG91YmxlPiA6
IHB1YmxpYyBQcmltaXRpdmVCaW5kaW5nVHJhaXRzPEluc3BlY3RvclZhbHVlOjpUeXBlOjpOdW1i
ZXI+IHsgfTsKKworLy8gRklYTUU6IEFkZCBhbiBJbnNwZWN0b3I6OlR5cGUgdGFnIGZvciBpbnQg
c28gd2UgY2FuIHJlbW92ZSB0aGlzIHNwZWNpYWwgY2FzZS4KK3RlbXBsYXRlPD4KK3N0cnVjdCBC
aW5kaW5nVHJhaXRzPGludD4geworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICBzdGF0aWMgdm9p
ZCBhc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShJbnNwZWN0b3JWYWx1ZSogdmFsdWUpCisgICAg
eworICAgICAgICBkb3VibGUgdjsKKyAgICAgICAgYm9vbCBjYXN0UmVzID0gdmFsdWUtPmFzTnVt
YmVyKCZ2KTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChjYXN0UmVzLCBjYXN0UmVzKTsKKyAgICAg
ICAgQVNTRVJUKHN0YXRpY19jYXN0PGRvdWJsZT4oc3RhdGljX2Nhc3Q8aW50Pih2KSkgPT0gdik7
CisgICAgfQogI2VuZGlmIC8vICFBU1NFUlRfRElTQUJMRUQKLSAgICB9OwogfTsKIAogfSAvLyBu
YW1lc3BhY2UgVHlwZUJ1aWxkZXIKIAordXNpbmcgVHlwZUJ1aWxkZXI6OkJpbmRpbmdUcmFpdHM7
CisKIH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgogCiAjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RP
UikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
VmFsdWVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFs
dWVzLmNwcAppbmRleCAxOTJmYjZjOWQ5MDkyNGU2MTdjNWQzMmM1ZDJlM2JiOWZjY2QzZTFhLi5l
MmQwMzVkYzA5YTFiYmQ4NWYxN2FhMDEwOGUyMDE4NjE1ZjlhMmQ1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuY3BwCkBAIC01Nzks
MTMgKzU3OSwxMyBAQCBTdHJpbmcgSW5zcGVjdG9yVmFsdWU6OnRvSlNPTlN0cmluZygpIGNvbnN0
CiAKIHZvaWQgSW5zcGVjdG9yVmFsdWU6OndyaXRlSlNPTihTdHJpbmdCdWlsZGVyKiBvdXRwdXQp
IGNvbnN0CiB7Ci0gICAgQVNTRVJUKG1fdHlwZSA9PSBUeXBlTnVsbCk7CisgICAgQVNTRVJUKG1f
dHlwZSA9PSBUeXBlOjpOdWxsKTsKICAgICBvdXRwdXQtPmFwcGVuZChudWxsU3RyaW5nLCA0KTsK
IH0KIAogYm9vbCBJbnNwZWN0b3JCYXNpY1ZhbHVlOjphc0Jvb2xlYW4oYm9vbCogb3V0cHV0KSBj
b25zdAogewotICAgIGlmICh0eXBlKCkgIT0gVHlwZUJvb2xlYW4pCisgICAgaWYgKHR5cGUoKSAh
PSBUeXBlOjpCb29sZWFuKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgKm91dHB1dCA9IG1f
Ym9vbFZhbHVlOwogICAgIHJldHVybiB0cnVlOwpAQCAtNTkzLDcgKzU5Myw3IEBAIGJvb2wgSW5z
cGVjdG9yQmFzaWNWYWx1ZTo6YXNCb29sZWFuKGJvb2wqIG91dHB1dCkgY29uc3QKIAogYm9vbCBJ
bnNwZWN0b3JCYXNpY1ZhbHVlOjphc051bWJlcihkb3VibGUqIG91dHB1dCkgY29uc3QKIHsKLSAg
ICBpZiAodHlwZSgpICE9IFR5cGVOdW1iZXIpCisgICAgaWYgKHR5cGUoKSAhPSBUeXBlOjpOdW1i
ZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAqb3V0cHV0ID0gbV9kb3VibGVWYWx1ZTsK
ICAgICByZXR1cm4gdHJ1ZTsKQEAgLTYwMSw3ICs2MDEsNyBAQCBib29sIEluc3BlY3RvckJhc2lj
VmFsdWU6OmFzTnVtYmVyKGRvdWJsZSogb3V0cHV0KSBjb25zdAogCiBib29sIEluc3BlY3RvckJh
c2ljVmFsdWU6OmFzTnVtYmVyKGZsb2F0KiBvdXRwdXQpIGNvbnN0CiB7Ci0gICAgaWYgKHR5cGUo
KSAhPSBUeXBlTnVtYmVyKQorICAgIGlmICh0eXBlKCkgIT0gVHlwZTo6TnVtYmVyKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgKm91dHB1dCA9IHN0YXRpY19jYXN0PGZsb2F0PihtX2RvdWJs
ZVZhbHVlKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTYwOSw3ICs2MDksNyBAQCBib29sIEluc3Bl
Y3RvckJhc2ljVmFsdWU6OmFzTnVtYmVyKGZsb2F0KiBvdXRwdXQpIGNvbnN0CiAKIGJvb2wgSW5z
cGVjdG9yQmFzaWNWYWx1ZTo6YXNOdW1iZXIoaW50KiBvdXRwdXQpIGNvbnN0CiB7Ci0gICAgaWYg
KHR5cGUoKSAhPSBUeXBlTnVtYmVyKQorICAgIGlmICh0eXBlKCkgIT0gVHlwZTo6TnVtYmVyKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgKm91dHB1dCA9IHN0YXRpY19jYXN0PGludD4obV9k
b3VibGVWYWx1ZSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC02MTcsNyArNjE3LDcgQEAgYm9vbCBJ
bnNwZWN0b3JCYXNpY1ZhbHVlOjphc051bWJlcihpbnQqIG91dHB1dCkgY29uc3QKIAogYm9vbCBJ
bnNwZWN0b3JCYXNpY1ZhbHVlOjphc051bWJlcih1bnNpZ25lZCogb3V0cHV0KSBjb25zdAogewot
ICAgIGlmICh0eXBlKCkgIT0gVHlwZU51bWJlcikKKyAgICBpZiAodHlwZSgpICE9IFR5cGU6Ok51
bWJlcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICpvdXRwdXQgPSBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4obV9kb3VibGVWYWx1ZSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC02MjUsNyArNjI1
LDcgQEAgYm9vbCBJbnNwZWN0b3JCYXNpY1ZhbHVlOjphc051bWJlcih1bnNpZ25lZCogb3V0cHV0
KSBjb25zdAogCiBib29sIEluc3BlY3RvckJhc2ljVmFsdWU6OmFzTnVtYmVyKGxvbmcqIG91dHB1
dCkgY29uc3QKIHsKLSAgICBpZiAodHlwZSgpICE9IFR5cGVOdW1iZXIpCisgICAgaWYgKHR5cGUo
KSAhPSBUeXBlOjpOdW1iZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAqb3V0cHV0ID0g
c3RhdGljX2Nhc3Q8bG9uZz4obV9kb3VibGVWYWx1ZSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC02
MzMsNyArNjMzLDcgQEAgYm9vbCBJbnNwZWN0b3JCYXNpY1ZhbHVlOjphc051bWJlcihsb25nKiBv
dXRwdXQpIGNvbnN0CiAKIGJvb2wgSW5zcGVjdG9yQmFzaWNWYWx1ZTo6YXNOdW1iZXIobG9uZyBs
b25nKiBvdXRwdXQpIGNvbnN0CiB7Ci0gICAgaWYgKHR5cGUoKSAhPSBUeXBlTnVtYmVyKQorICAg
IGlmICh0eXBlKCkgIT0gVHlwZTo6TnVtYmVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
Km91dHB1dCA9IHN0YXRpY19jYXN0PGxvbmcgbG9uZz4obV9kb3VibGVWYWx1ZSk7CiAgICAgcmV0
dXJuIHRydWU7CkBAIC02NDEsNyArNjQxLDcgQEAgYm9vbCBJbnNwZWN0b3JCYXNpY1ZhbHVlOjph
c051bWJlcihsb25nIGxvbmcqIG91dHB1dCkgY29uc3QKIAogYm9vbCBJbnNwZWN0b3JCYXNpY1Zh
bHVlOjphc051bWJlcih1bnNpZ25lZCBsb25nKiBvdXRwdXQpIGNvbnN0CiB7Ci0gICAgaWYgKHR5
cGUoKSAhPSBUeXBlTnVtYmVyKQorICAgIGlmICh0eXBlKCkgIT0gVHlwZTo6TnVtYmVyKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgKm91dHB1dCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGxv
bmc+KG1fZG91YmxlVmFsdWUpOwogICAgIHJldHVybiB0cnVlOwpAQCAtNjQ5LDcgKzY0OSw3IEBA
IGJvb2wgSW5zcGVjdG9yQmFzaWNWYWx1ZTo6YXNOdW1iZXIodW5zaWduZWQgbG9uZyogb3V0cHV0
KSBjb25zdAogCiBib29sIEluc3BlY3RvckJhc2ljVmFsdWU6OmFzTnVtYmVyKHVuc2lnbmVkIGxv
bmcgbG9uZyogb3V0cHV0KSBjb25zdAogewotICAgIGlmICh0eXBlKCkgIT0gVHlwZU51bWJlcikK
KyAgICBpZiAodHlwZSgpICE9IFR5cGU6Ok51bWJlcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICpvdXRwdXQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KG1fZG91YmxlVmFs
dWUpOwogICAgIHJldHVybiB0cnVlOwpAQCAtNjU3LDEzICs2NTcsMTMgQEAgYm9vbCBJbnNwZWN0
b3JCYXNpY1ZhbHVlOjphc051bWJlcih1bnNpZ25lZCBsb25nIGxvbmcqIG91dHB1dCkgY29uc3QK
IAogdm9pZCBJbnNwZWN0b3JCYXNpY1ZhbHVlOjp3cml0ZUpTT04oU3RyaW5nQnVpbGRlciogb3V0
cHV0KSBjb25zdAogewotICAgIEFTU0VSVCh0eXBlKCkgPT0gVHlwZUJvb2xlYW4gfHwgdHlwZSgp
ID09IFR5cGVOdW1iZXIpOwotICAgIGlmICh0eXBlKCkgPT0gVHlwZUJvb2xlYW4pIHsKKyAgICBB
U1NFUlQodHlwZSgpID09IFR5cGU6OkJvb2xlYW4gfHwgdHlwZSgpID09IFR5cGU6Ok51bWJlcik7
CisgICAgaWYgKHR5cGUoKSA9PSBUeXBlOjpCb29sZWFuKSB7CiAgICAgICAgIGlmIChtX2Jvb2xW
YWx1ZSkKICAgICAgICAgICAgIG91dHB1dC0+YXBwZW5kKHRydWVTdHJpbmcsIDQpOwogICAgICAg
ICBlbHNlCiAgICAgICAgICAgICBvdXRwdXQtPmFwcGVuZChmYWxzZVN0cmluZywgNSk7Ci0gICAg
fSBlbHNlIGlmICh0eXBlKCkgPT0gVHlwZU51bWJlcikgeworICAgIH0gZWxzZSBpZiAodHlwZSgp
ID09IFR5cGU6Ok51bWJlcikgewogICAgICAgICBOdW1iZXJUb0xTdHJpbmdCdWZmZXIgYnVmZmVy
OwogICAgICAgICBpZiAoIXN0ZDo6aXNmaW5pdGUobV9kb3VibGVWYWx1ZSkpIHsKICAgICAgICAg
ICAgIG91dHB1dC0+YXBwZW5kKG51bGxTdHJpbmcsIDQpOwpAQCAtNjkzLDcgKzY5Myw3IEBAIGJv
b2wgSW5zcGVjdG9yU3RyaW5nOjphc1N0cmluZyhTdHJpbmcqIG91dHB1dCkgY29uc3QKIAogdm9p
ZCBJbnNwZWN0b3JTdHJpbmc6OndyaXRlSlNPTihTdHJpbmdCdWlsZGVyKiBvdXRwdXQpIGNvbnN0
CiB7Ci0gICAgQVNTRVJUKHR5cGUoKSA9PSBUeXBlU3RyaW5nKTsKKyAgICBBU1NFUlQodHlwZSgp
ID09IFR5cGU6OlN0cmluZyk7CiAgICAgZG91YmxlUXVvdGVTdHJpbmcobV9zdHJpbmdWYWx1ZSwg
b3V0cHV0KTsKIH0KIApAQCAtNzg2LDcgKzc4Niw3IEBAIHZvaWQgSW5zcGVjdG9yT2JqZWN0QmFz
ZTo6d3JpdGVKU09OKFN0cmluZ0J1aWxkZXIqIG91dHB1dCkgY29uc3QKIH0KIAogSW5zcGVjdG9y
T2JqZWN0QmFzZTo6SW5zcGVjdG9yT2JqZWN0QmFzZSgpCi0gICAgOiBJbnNwZWN0b3JWYWx1ZShU
eXBlT2JqZWN0KQorICAgIDogSW5zcGVjdG9yVmFsdWUoVHlwZTo6T2JqZWN0KQogICAgICwgbV9k
YXRhKCkKICAgICAsIG1fb3JkZXIoKQogewpAQCAtODIxLDcgKzgyMSw3IEBAIHZvaWQgSW5zcGVj
dG9yQXJyYXlCYXNlOjp3cml0ZUpTT04oU3RyaW5nQnVpbGRlciogb3V0cHV0KSBjb25zdAogfQog
CiBJbnNwZWN0b3JBcnJheUJhc2U6Okluc3BlY3RvckFycmF5QmFzZSgpCi0gICAgOiBJbnNwZWN0
b3JWYWx1ZShUeXBlQXJyYXkpCisgICAgOiBJbnNwZWN0b3JWYWx1ZShUeXBlOjpBcnJheSkKICAg
ICAsIG1fZGF0YSgpCiB7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL0luc3BlY3RvclZhbHVlcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JWYWx1ZXMuaAppbmRleCAzYjg2MTY2NGRhMzM3OWRlYjU2ODliYzAwMTM0ZGUy
NmViYTY3M2RhLi45N2NiODhiZjFjYzM5ZTE2Y2M3NTkxOWUzYThmMmU4MGI1OTczNmYwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmgK
QEAgLTQxLDI5ICs0MSwzMiBAQAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKIGNsYXNzIEluc3Bl
Y3RvckFycmF5OworY2xhc3MgSW5zcGVjdG9yQXJyYXlCYXNlOwogY2xhc3MgSW5zcGVjdG9yT2Jq
ZWN0OworY2xhc3MgSW5zcGVjdG9yT2JqZWN0QmFzZTsKIAogY2xhc3MgSlNfRVhQT1JUX1BSSVZB
VEUgSW5zcGVjdG9yVmFsdWUgOiBwdWJsaWMgUmVmQ291bnRlZDxJbnNwZWN0b3JWYWx1ZT4gewog
cHVibGljOgogICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4RGVwdGggPSAxMDAwOwogCi0gICAgSW5z
cGVjdG9yVmFsdWUoKSA6IG1fdHlwZShUeXBlTnVsbCkgeyB9CisgICAgSW5zcGVjdG9yVmFsdWUo
KQorICAgICAgICA6IG1fdHlwZShUeXBlOjpOdWxsKSB7IH0KICAgICB2aXJ0dWFsIH5JbnNwZWN0
b3JWYWx1ZSgpIHsgfQogCiAgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IG51
bGwoKTsKIAotICAgIHR5cGVkZWYgZW51bSB7Ci0gICAgICAgIFR5cGVOdWxsID0gMCwKLSAgICAg
ICAgVHlwZUJvb2xlYW4sCi0gICAgICAgIFR5cGVOdW1iZXIsCi0gICAgICAgIFR5cGVTdHJpbmcs
Ci0gICAgICAgIFR5cGVPYmplY3QsCi0gICAgICAgIFR5cGVBcnJheQotICAgIH0gVHlwZTsKKyAg
ICBlbnVtIGNsYXNzIFR5cGUgeworICAgICAgICBOdWxsID0gMCwKKyAgICAgICAgQm9vbGVhbiwK
KyAgICAgICAgTnVtYmVyLAorICAgICAgICBTdHJpbmcsCisgICAgICAgIE9iamVjdCwKKyAgICAg
ICAgQXJyYXkKKyAgICB9OwogCiAgICAgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBl
OyB9CiAKLSAgICBib29sIGlzTnVsbCgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSA9PSBUeXBlTnVs
bDsgfQorICAgIGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1cm4gbV90eXBlID09IFR5cGU6Ok51
bGw7IH0KIAogICAgIHZpcnR1YWwgYm9vbCBhc0Jvb2xlYW4oYm9vbCogb3V0cHV0KSBjb25zdDsK
ICAgICB2aXJ0dWFsIGJvb2wgYXNOdW1iZXIoZG91YmxlKiBvdXRwdXQpIGNvbnN0OwpAQCAtMTEz
LDkgKzExNiwxNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHdyaXRlSlNPTihTdHJpbmdC
dWlsZGVyKiBvdXRwdXQpIGNvbnN0IG92ZXJyaWRlOwogCiBwcml2YXRlOgotICAgIGV4cGxpY2l0
IEluc3BlY3RvckJhc2ljVmFsdWUoYm9vbCB2YWx1ZSkgOiBJbnNwZWN0b3JWYWx1ZShUeXBlQm9v
bGVhbiksIG1fYm9vbFZhbHVlKHZhbHVlKSB7IH0KLSAgICBleHBsaWNpdCBJbnNwZWN0b3JCYXNp
Y1ZhbHVlKGludCB2YWx1ZSkgOiBJbnNwZWN0b3JWYWx1ZShUeXBlTnVtYmVyKSwgbV9kb3VibGVW
YWx1ZSgoZG91YmxlKXZhbHVlKSB7IH0KLSAgICBleHBsaWNpdCBJbnNwZWN0b3JCYXNpY1ZhbHVl
KGRvdWJsZSB2YWx1ZSkgOiBJbnNwZWN0b3JWYWx1ZShUeXBlTnVtYmVyKSwgbV9kb3VibGVWYWx1
ZSh2YWx1ZSkgeyB9CisgICAgZXhwbGljaXQgSW5zcGVjdG9yQmFzaWNWYWx1ZShib29sIHZhbHVl
KQorICAgICAgICA6IEluc3BlY3RvclZhbHVlKFR5cGU6OkJvb2xlYW4pCisgICAgICAgICwgbV9i
b29sVmFsdWUodmFsdWUpIHsgfQorCisgICAgZXhwbGljaXQgSW5zcGVjdG9yQmFzaWNWYWx1ZShp
bnQgdmFsdWUpCisgICAgICAgIDogSW5zcGVjdG9yVmFsdWUoVHlwZTo6TnVtYmVyKQorICAgICAg
ICAsIG1fZG91YmxlVmFsdWUoc3RhdGljX2Nhc3Q8ZG91YmxlPih2YWx1ZSkpIHsgfQorCisgICAg
ZXhwbGljaXQgSW5zcGVjdG9yQmFzaWNWYWx1ZShkb3VibGUgdmFsdWUpCisgICAgICAgIDogSW5z
cGVjdG9yVmFsdWUoVHlwZTo6TnVtYmVyKQorICAgICAgICAsIG1fZG91YmxlVmFsdWUodmFsdWUp
IHsgfQogCiAgICAgdW5pb24gewogICAgICAgICBib29sIG1fYm9vbFZhbHVlOwpAQCAtMTMzLDgg
KzE0NCwxMyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHdyaXRlSlNPTihTdHJpbmdCdWls
ZGVyKiBvdXRwdXQpIGNvbnN0IG92ZXJyaWRlOwogCiBwcml2YXRlOgotICAgIGV4cGxpY2l0IElu
c3BlY3RvclN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKSA6IEluc3BlY3RvclZhbHVlKFR5cGVT
dHJpbmcpLCBtX3N0cmluZ1ZhbHVlKHZhbHVlKSB7IH0KLSAgICBleHBsaWNpdCBJbnNwZWN0b3JT
dHJpbmcoY29uc3QgY2hhciogdmFsdWUpIDogSW5zcGVjdG9yVmFsdWUoVHlwZVN0cmluZyksIG1f
c3RyaW5nVmFsdWUodmFsdWUpIHsgfQorICAgIGV4cGxpY2l0IEluc3BlY3RvclN0cmluZyhjb25z
dCBTdHJpbmcmIHZhbHVlKQorICAgICAgICA6IEluc3BlY3RvclZhbHVlKFR5cGU6OlN0cmluZykK
KyAgICAgICAgLCBtX3N0cmluZ1ZhbHVlKHZhbHVlKSB7IH0KKworICAgIGV4cGxpY2l0IEluc3Bl
Y3RvclN0cmluZyhjb25zdCBjaGFyKiB2YWx1ZSkKKyAgICAgICAgOiBJbnNwZWN0b3JWYWx1ZShU
eXBlOjpTdHJpbmcpCisgICAgICAgICwgbV9zdHJpbmdWYWx1ZSh2YWx1ZSkgeyB9CiAKICAgICBT
dHJpbmcgbV9zdHJpbmdWYWx1ZTsKIH07CkBAIC0xNTksOCArMTc1LDggQEAgcHJvdGVjdGVkOgog
ICAgIHZvaWQgc2V0TnVtYmVyKGNvbnN0IFN0cmluZyYgbmFtZSwgZG91YmxlKTsKICAgICB2b2lk
IHNldFN0cmluZyhjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYpOwogICAgIHZvaWQg
c2V0VmFsdWUoY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPik7
Ci0gICAgdm9pZCBzZXRPYmplY3QoY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4pOwotICAgIHZvaWQgc2V0QXJyYXkoY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNz
UmVmUHRyPEluc3BlY3RvckFycmF5Pik7CisgICAgdm9pZCBzZXRPYmplY3QoY29uc3QgU3RyaW5n
JiBuYW1lLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdEJhc2U+KTsKKyAgICB2b2lkIHNldEFy
cmF5KGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheUJhc2U+KTsK
IAogICAgIGl0ZXJhdG9yIGZpbmQoY29uc3QgU3RyaW5nJiBuYW1lKTsKICAgICBjb25zdF9pdGVy
YXRvciBmaW5kKGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3Q7CkBAIC0zMTcsMTQgKzMzMywxNCBA
QCBpbmxpbmUgdm9pZCBJbnNwZWN0b3JPYmplY3RCYXNlOjpzZXRWYWx1ZShjb25zdCBTdHJpbmcm
IG5hbWUsIFBhc3NSZWZQdHI8SW5zcGVjdAogICAgICAgICBtX29yZGVyLmFwcGVuZChuYW1lKTsK
IH0KIAotaW5saW5lIHZvaWQgSW5zcGVjdG9yT2JqZWN0QmFzZTo6c2V0T2JqZWN0KGNvbnN0IFN0
cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQoraW5saW5lIHZv
aWQgSW5zcGVjdG9yT2JqZWN0QmFzZTo6c2V0T2JqZWN0KGNvbnN0IFN0cmluZyYgbmFtZSwgUGFz
c1JlZlB0cjxJbnNwZWN0b3JPYmplY3RCYXNlPiB2YWx1ZSkKIHsKICAgICBBU1NFUlQodmFsdWUp
OwogICAgIGlmIChtX2RhdGEuc2V0KG5hbWUsIHZhbHVlKS5pc05ld0VudHJ5KQogICAgICAgICBt
X29yZGVyLmFwcGVuZChuYW1lKTsKIH0KIAotaW5saW5lIHZvaWQgSW5zcGVjdG9yT2JqZWN0QmFz
ZTo6c2V0QXJyYXkoY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5
PiB2YWx1ZSkKK2lubGluZSB2b2lkIEluc3BlY3Rvck9iamVjdEJhc2U6OnNldEFycmF5KGNvbnN0
IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheUJhc2U+IHZhbHVlKQogewog
ICAgIEFTU0VSVCh2YWx1ZSk7CiAgICAgaWYgKG1fZGF0YS5zZXQobmFtZSwgdmFsdWUpLmlzTmV3
RW50cnkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50
cy9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3IvYWdlbnRzL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwCmluZGV4IDUwOTZhNmM5OWQy
YTkxMjA0MzhjNjhmZGM4ODc1OGY2Y2JmYWViOWYuLjVlMWI2NDY0NjNkZjU1MWU4MmQ0NTk1N2I1
YWY3Yzk2MGZlYzI1ZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3IvYWdlbnRzL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwCkBAIC00
MjksNyArNDI5LDcgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpnZXRGdW5jdGlvbkRl
dGFpbHMoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBjb25zdAogICAgIGluamVjdGVkU2NyaXB0
LmdldEZ1bmN0aW9uRGV0YWlscyhlcnJvclN0cmluZywgZnVuY3Rpb25JZCwgJmRldGFpbHMpOwog
fQogCi12b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNjaGVkdWxlUGF1c2VPbk5leHRTdGF0
ZW1lbnQoSW5zcGVjdG9yRGVidWdnZXJGcm9udGVuZERpc3BhdGNoZXI6OlJlYXNvbjo6RW51bSBi
cmVha1JlYXNvbiwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGRhdGEpCit2b2lkIEluc3Bl
Y3RvckRlYnVnZ2VyQWdlbnQ6OnNjaGVkdWxlUGF1c2VPbk5leHRTdGF0ZW1lbnQoSW5zcGVjdG9y
RGVidWdnZXJGcm9udGVuZERpc3BhdGNoZXI6OlJlYXNvbiBicmVha1JlYXNvbiwgUGFzc1JlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IGRhdGEpCiB7CiAgICAgaWYgKG1famF2YVNjcmlwdFBhdXNlU2No
ZWR1bGVkKQogICAgICAgICByZXR1cm47CkBAIC02ODAsNyArNjgwLDcgQEAgdm9pZCBJbnNwZWN0
b3JEZWJ1Z2dlckFnZW50OjpkaWRDb250aW51ZSgpCiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXIt
PnJlc3VtZWQoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpicmVha1Byb2dy
YW0oSW5zcGVjdG9yRGVidWdnZXJGcm9udGVuZERpc3BhdGNoZXI6OlJlYXNvbjo6RW51bSBicmVh
a1JlYXNvbiwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGRhdGEpCit2b2lkIEluc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQ6OmJyZWFrUHJvZ3JhbShJbnNwZWN0b3JEZWJ1Z2dlckZyb250ZW5kRGlz
cGF0Y2hlcjo6UmVhc29uIGJyZWFrUmVhc29uLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
ZGF0YSkKIHsKICAgICBtX2JyZWFrUmVhc29uID0gYnJlYWtSZWFzb247CiAgICAgbV9icmVha0F1
eERhdGEgPSBkYXRhOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9hZ2VudHMvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5oCmluZGV4IGViMjI3MGE5
Y2UyNDI4MTNmOWQ0ZWU1NTkwMGZmODNhOTk2ZjQwNmIuLjg0N2U3OGI2MGY1ZGNjZjk2OWZiM2Qw
MTEzZWQyNTIzZWEwMjdkM2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3IvYWdlbnRzL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmgKQEAgLTkx
LDkgKzkxLDkgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgaGFuZGxlQ29uc29sZUFzc2VydCgp
OwogCi0gICAgdm9pZCBzY2hlZHVsZVBhdXNlT25OZXh0U3RhdGVtZW50KEluc3BlY3RvckRlYnVn
Z2VyRnJvbnRlbmREaXNwYXRjaGVyOjpSZWFzb246OkVudW0gYnJlYWtSZWFzb24sIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBkYXRhKTsKKyAgICB2b2lkIHNjaGVkdWxlUGF1c2VPbk5leHRT
dGF0ZW1lbnQoSW5zcGVjdG9yRGVidWdnZXJGcm9udGVuZERpc3BhdGNoZXI6OlJlYXNvbiBicmVh
a1JlYXNvbiwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGRhdGEpOwogICAgIHZvaWQgY2Fu
Y2VsUGF1c2VPbk5leHRTdGF0ZW1lbnQoKTsKLSAgICB2b2lkIGJyZWFrUHJvZ3JhbShJbnNwZWN0
b3JEZWJ1Z2dlckZyb250ZW5kRGlzcGF0Y2hlcjo6UmVhc29uOjpFbnVtIGJyZWFrUmVhc29uLCBQ
YXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZGF0YSk7CisgICAgdm9pZCBicmVha1Byb2dyYW0o
SW5zcGVjdG9yRGVidWdnZXJGcm9udGVuZERpc3BhdGNoZXI6OlJlYXNvbiBicmVha1JlYXNvbiwg
UGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGRhdGEpOwogICAgIHZvaWQgc2NyaXB0RXhlY3V0
aW9uQmxvY2tlZEJ5Q1NQKGNvbnN0IFN0cmluZyYgZGlyZWN0aXZlVGV4dCk7CiAKICAgICBjbGFz
cyBMaXN0ZW5lciB7CkBAIC0xNTksNyArMTU5LDcgQEAgcHJpdmF0ZToKICAgICBCcmVha3BvaW50
SWRlbnRpZmllclRvRGVidWdTZXJ2ZXJCcmVha3BvaW50SURzTWFwIG1fYnJlYWtwb2ludElkZW50
aWZpZXJUb0RlYnVnU2VydmVyQnJlYWtwb2ludElEczsKICAgICBCcmVha3BvaW50SWRlbnRpZmll
clRvQnJlYWtwb2ludE1hcCBtX2phdmFTY3JpcHRCcmVha3BvaW50czsKICAgICBKU0M6OkJyZWFr
cG9pbnRJRCBtX2NvbnRpbnVlVG9Mb2NhdGlvbkJyZWFrcG9pbnRJRDsKLSAgICBJbnNwZWN0b3JE
ZWJ1Z2dlckZyb250ZW5kRGlzcGF0Y2hlcjo6UmVhc29uOjpFbnVtIG1fYnJlYWtSZWFzb247Cisg
ICAgSW5zcGVjdG9yRGVidWdnZXJGcm9udGVuZERpc3BhdGNoZXI6OlJlYXNvbiBtX2JyZWFrUmVh
c29uOwogICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fYnJlYWtBdXhEYXRhOwogICAgIGJv
b2wgbV9lbmFibGVkOwogICAgIGJvb2wgbV9qYXZhU2NyaXB0UGF1c2VTY2hlZHVsZWQ7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JS
dW50aW1lQWdlbnQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9yUnVudGltZUFnZW50LmNwcAppbmRleCAwYmJiOTBiOTA3NjVlODQxOGZiNmEyMWQ0
MjJjMDBlZTMzM2JkYzVhLi45NDBiOGJkNTA2OWFiMDM3YjAzMzhjNmExZTMwYmZlMWQwZTQ2MDQ1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNw
ZWN0b3JSdW50aW1lQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3IvYWdlbnRzL0luc3BlY3RvclJ1bnRpbWVBZ2VudC5jcHAKQEAgLTg1LDcgKzg1LDcgQEAgc3Rh
dGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UnVudGltZTo6RXJyb3JSYW5n
ZT4gYnVpbGRFcnJvclJhbmdlT2IKICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKIH0KIAot
dm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OnBhcnNlKEVycm9yU3RyaW5nKiwgY29uc3QgU3Ry
aW5nJiBleHByZXNzaW9uLCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpSdW50aW1lOjpTeW50YXhF
cnJvclR5cGU6OkVudW0qIHJlc3VsdCwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6T3B0T3V0cHV0
PFN0cmluZz4qIG1lc3NhZ2UsIFJlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpSdW50aW1l
OjpFcnJvclJhbmdlPiYgcmFuZ2UpCit2b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6cGFyc2Uo
RXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIEluc3BlY3Rvcjo6VHlwZUJ1
aWxkZXI6OlJ1bnRpbWU6OlN5bnRheEVycm9yVHlwZSogcmVzdWx0LCBJbnNwZWN0b3I6OlR5cGVC
dWlsZGVyOjpPcHRPdXRwdXQ8U3RyaW5nPiogbWVzc2FnZSwgUmVmUHRyPEluc3BlY3Rvcjo6VHlw
ZUJ1aWxkZXI6OlJ1bnRpbWU6OkVycm9yUmFuZ2U+JiByYW5nZSkKIHsKICAgICBWTSYgdm0gPSBn
bG9iYWxWTSgpOwogICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclJ1bnRpbWVBZ2VudC5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUnVudGlt
ZUFnZW50LmgKaW5kZXggMTE1NTBkMDY4NGVhZWY3Nzg5ZWRhOWZkNWI4MGNkODFjYmQ2N2ZiYi4u
NTJlNjNiYzg1Zjg1MWUwNjBhNjQ5MmY3NGQ3NTkzMzc3ZjZmZWFhNCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUnVudGltZUFnZW50
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9y
UnVudGltZUFnZW50LmgKQEAgLTU5LDcgKzU5LDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2
b2lkIGVuYWJsZShFcnJvclN0cmluZyopIG92ZXJyaWRlIHsgbV9lbmFibGVkID0gdHJ1ZTsgfQog
ICAgIHZpcnR1YWwgdm9pZCBkaXNhYmxlKEVycm9yU3RyaW5nKikgb3ZlcnJpZGUgeyBtX2VuYWJs
ZWQgPSBmYWxzZTsgfQotICAgIHZpcnR1YWwgdm9pZCBwYXJzZShFcnJvclN0cmluZyosIGNvbnN0
IFN0cmluZyYgZXhwcmVzc2lvbiwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UnVudGltZTo6U3lu
dGF4RXJyb3JUeXBlOjpFbnVtKiByZXN1bHQsIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6Ok9wdE91
dHB1dDxTdHJpbmc+KiBtZXNzYWdlLCBSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UnVu
dGltZTo6RXJyb3JSYW5nZT4mKSBvdmVycmlkZSBmaW5hbDsKKyAgICB2aXJ0dWFsIHZvaWQgcGFy
c2UoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIEluc3BlY3Rvcjo6VHlw
ZUJ1aWxkZXI6OlJ1bnRpbWU6OlN5bnRheEVycm9yVHlwZSogcmVzdWx0LCBJbnNwZWN0b3I6OlR5
cGVCdWlsZGVyOjpPcHRPdXRwdXQ8U3RyaW5nPiogbWVzc2FnZSwgUmVmUHRyPEluc3BlY3Rvcjo6
VHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OkVycm9yUmFuZ2U+Jikgb3ZlcnJpZGUgZmluYWw7CiAgICAg
dmlydHVhbCB2b2lkIGV2YWx1YXRlKEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBleHByZXNz
aW9uLCBjb25zdCBTdHJpbmcqIG9iamVjdEdyb3VwLCBjb25zdCBib29sKiBpbmNsdWRlQ29tbWFu
ZExpbmVBUEksIGNvbnN0IGJvb2wqIGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29s
ZSwgY29uc3QgaW50KiBleGVjdXRpb25Db250ZXh0SWQsIGNvbnN0IGJvb2wqIHJldHVybkJ5VmFs
dWUsIGNvbnN0IGJvb2wqIGdlbmVyYXRlUHJldmlldywgUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1
aWxkZXI6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3VsdCwgSW5zcGVjdG9yOjpUeXBlQnVp
bGRlcjo6T3B0T3V0cHV0PGJvb2w+KiB3YXNUaHJvd24pIG92ZXJyaWRlIGZpbmFsOwogICAgIHZp
cnR1YWwgdm9pZCBjYWxsRnVuY3Rpb25PbihFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgb2Jq
ZWN0SWQsIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6
SW5zcGVjdG9yQXJyYXk+KiBvcHRpb25hbEFyZ3VtZW50cywgY29uc3QgYm9vbCogZG9Ob3RQYXVz
ZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xlLCBjb25zdCBib29sKiByZXR1cm5CeVZhbHVlLCBj
b25zdCBib29sKiBnZW5lcmF0ZVByZXZpZXcsIFJlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVy
OjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiByZXN1bHQsIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6
Ok9wdE91dHB1dDxib29sPiogd2FzVGhyb3duKSBvdmVycmlkZSBmaW5hbDsKICAgICB2aXJ0dWFs
IHZvaWQgcmVsZWFzZU9iamVjdChFcnJvclN0cmluZyosIGNvbnN0IEVycm9yU3RyaW5nJiBvYmpl
Y3RJZCkgb3ZlcnJpZGUgZmluYWw7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weSBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5CmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA5MWZhOGM5YzJkN2I5NDk5Y2IwOGQ1ZWZhNDJh
OTIyNDkyNjUzMTg0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9Db2RlR2VuZXJhdG9y
SW5zcGVjdG9yLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMjYxNCArMCwwIEBACi0jIS91c3IvYmlu
L2VudiBweXRob24KLSMgQ29weXJpZ2h0IChjKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0jIENvcHlyaWdodCAoYykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSMgQ29weXJpZ2h0IChjKSAyMDEzIEFwcGxlIEluYy4gQWxsIFJpZ2h0
cyBSZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSMgbWV0OgotIwot
IyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotIyBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0j
IGRpc3RyaWJ1dGlvbi4KLSMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cwotIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotIyB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotIwotIyBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0j
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCi0jIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotIyBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
LSMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0jIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLWltcG9ydCBvcy5wYXRoCi1pbXBvcnQg
c3lzCi1pbXBvcnQgc3RyaW5nCi1pbXBvcnQgb3B0cGFyc2UKLWltcG9ydCByZQotdHJ5OgotICAg
IGltcG9ydCBqc29uCi1leGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgaW1wb3J0IHNpbXBsZWpzb24g
YXMganNvbgotCi1pbXBvcnQgQ29kZUdlbmVyYXRvckluc3BlY3RvclN0cmluZ3MKLQotCi1ET01B
SU5fREVGSU5FX05BTUVfTUFQID0gewotICAgICJEYXRhYmFzZSI6ICJTUUxfREFUQUJBU0UiLAot
ICAgICJJbmRleGVkREIiOiAiSU5ERVhFRF9EQVRBQkFTRSIsCi0gICAgIlJlcGxheSI6ICJXRUJf
UkVQTEFZIiwKLX0KLQotCi0jIE1hbnVhbGx5LWZpbGxlZCBtYXAgb2YgdHlwZSBuYW1lIHJlcGxh
Y2VtZW50cy4KLVRZUEVfTkFNRV9GSVhfTUFQID0gewotICAgICJSR0JBIjogIlJnYmEiLCAgIyBS
R0JBIGlzIHJlcG9ydGVkIHRvIGJlIGNvbmZsaWN0aW5nIHdpdGggYSBkZWZpbmUgbmFtZSBpbiBX
aW5kb3dzIENFLgotICAgICIiOiAiRW1wdHkiLAotfQotCi0KLVRZUEVTX1dJVEhfUlVOVElNRV9D
QVNUX1NFVCA9IGZyb3plbnNldChbIlJ1bnRpbWUuUmVtb3RlT2JqZWN0IiwgIlJ1bnRpbWUuUHJv
cGVydHlEZXNjcmlwdG9yIiwgIlJ1bnRpbWUuSW50ZXJuYWxQcm9wZXJ0eURlc2NyaXB0b3IiLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRGVidWdnZXIuRnVuY3Rp
b25EZXRhaWxzIiwgIkRlYnVnZ2VyLkNhbGxGcmFtZSIsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJDYW52YXMuVHJhY2VMb2ciLCAiQ2FudmFzLlJlc291cmNlSW5m
byIsICJDYW52YXMuUmVzb3VyY2VTdGF0ZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICMgVGhpcyBzaG91bGQgYmUgYSB0ZW1wb3JhcnkgaGFjay4gVGltZWxpbmVF
dmVudCBzaG91bGQgYmUgY3JlYXRlZCB2aWEgZ2VuZXJhdGVkIEMrKyBBUEkuCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUaW1lbGluZS5UaW1lbGluZUV2ZW50Il0p
Ci0KLVRZUEVTX1dJVEhfT1BFTl9GSUVMRF9MSVNUX1NFVCA9IGZyb3plbnNldChbIlRpbWVsaW5l
LlRpbWVsaW5lRXZlbnQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAjIEluc3BlY3RvclN0eWxlU2hlZXQgbm90IG9ubHkgY3JlYXRlcyB0aGlzIHByb3BlcnR5
IGJ1dCB3YW50cyB0byByZWFkIGl0IGFuZCBtb2RpZnkgaXQuCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJDU1MuQ1NTUHJvcGVydHkiLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEluc3BlY3RvclJlc291cmNlQWdlbnQg
bmVlZHMgdG8gdXBkYXRlIG1pbWUtdHlwZS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIk5ldHdvcmsuUmVzcG9uc2UiXSkKLQotRVhBQ1RMWV9JTlRfU1VQUE9S
VEVEID0gRmFsc2UKLQotSU5TUEVDVE9SX1RZUEVTX0dFTkVSQVRPUl9DT05GSUdfTUFQID0gewot
ICAgICJKYXZhU2NyaXB0IjogewotICAgICAgICAicHJlZml4IjogIkpTIiwKLSAgICAgICAgInR5
cGVidWlsZGVyX2RlcGVuZGVuY3kiOiAiIiwKLSAgICAgICAgImV4cG9ydF9tYWNybyI6ICJKU19F
WFBPUlRfUFJJVkFURSIsCi0gICAgfSwKLSAgICAiV2ViIjogewotICAgICAgICAicHJlZml4Ijog
IldlYiIsCi0gICAgICAgICJ0eXBlYnVpbGRlcl9kZXBlbmRlbmN5IjogIiNpbmNsdWRlIDxpbnNw
ZWN0b3IvSW5zcGVjdG9ySlNUeXBlQnVpbGRlcnMuaD4iLAotICAgICAgICAiZXhwb3J0X21hY3Jv
IjogIiIsCi0gICAgfSwKLX0KLQotY21kbGluZV9wYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJz
ZXIodXNhZ2U9InVzYWdlOiAlcHJvZyBbb3B0aW9uc10gPEluc3BlY3Rvci5qc29uPiIpCi1jbWRs
aW5lX3BhcnNlci5hZGRfb3B0aW9uKCItLW91dHB1dF9oX2RpciIpCi1jbWRsaW5lX3BhcnNlci5h
ZGRfb3B0aW9uKCItLW91dHB1dF9jcHBfZGlyIikKLWNtZGxpbmVfcGFyc2VyLmFkZF9vcHRpb24o
Ii0tb3V0cHV0X2pzX2RpciIpCi1jbWRsaW5lX3BhcnNlci5hZGRfb3B0aW9uKCItLW91dHB1dF90
eXBlIikgICMgSmF2YVNjcmlwdCwgV2ViCi1jbWRsaW5lX3BhcnNlci5hZGRfb3B0aW9uKCItLXdy
aXRlX2Fsd2F5cyIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIpCi1jbWRsaW5lX3BhcnNlci5hZGRfb3B0
aW9uKCItLW5vX3ZlcmlmaWNhdGlvbiIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIpCi0KLXRyeToKLSAg
ICBhcmdfb3B0aW9ucywgYXJnX3ZhbHVlcyA9IGNtZGxpbmVfcGFyc2VyLnBhcnNlX2FyZ3MoKQot
ICAgIGlmIChsZW4oYXJnX3ZhbHVlcykgPCAxKToKLSAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJB
dCBsZWFzdCBvbmUgcGxhaW4gYXJndW1lbnQgZXhwZWN0ZWQiKQotCi0gICAgaW5wdXRfanNvbl9m
aWxlbmFtZSA9IGFyZ192YWx1ZXNbMF0KLSAgICBkZXBlbmRlbmN5X2pzb25fZmlsZW5hbWVzID0g
YXJnX3ZhbHVlc1sxOl0KLQotICAgIG91dHB1dF9oZWFkZXJfZGlybmFtZSA9IGFyZ19vcHRpb25z
Lm91dHB1dF9oX2RpcgotICAgIG91dHB1dF9jcHBfZGlybmFtZSA9IGFyZ19vcHRpb25zLm91dHB1
dF9jcHBfZGlyCi0gICAgb3V0cHV0X2pzX2Rpcm5hbWUgPSBhcmdfb3B0aW9ucy5vdXRwdXRfanNf
ZGlyCi0gICAgb3V0cHV0X3R5cGUgPSBhcmdfb3B0aW9ucy5vdXRwdXRfdHlwZQotCi0gICAgd3Jp
dGVfYWx3YXlzID0gYXJnX29wdGlvbnMud3JpdGVfYWx3YXlzCi0gICAgdmVyaWZpY2F0aW9uID0g
bm90IGFyZ19vcHRpb25zLm5vX3ZlcmlmaWNhdGlvbgotICAgIGlmIG5vdCBvdXRwdXRfaGVhZGVy
X2Rpcm5hbWU6Ci0gICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiT3V0cHV0IC5oIGRpcmVjdG9yeSBt
dXN0IGJlIHNwZWNpZmllZCIpCi0gICAgaWYgbm90IG91dHB1dF9jcHBfZGlybmFtZToKLSAgICAg
ICAgcmFpc2UgRXhjZXB0aW9uKCJPdXRwdXQgLmNwcCBkaXJlY3RvcnkgbXVzdCBiZSBzcGVjaWZp
ZWQiKQotICAgIGlmIG5vdCBvdXRwdXRfanNfZGlybmFtZToKLSAgICAgICAgcmFpc2UgRXhjZXB0
aW9uKCJPdXRwdXQgLmpzIGRpcmVjdG9yeSBtdXN0IGJlIHNwZWNpZmllZCIpCi0gICAgaWYgb3V0
cHV0X3R5cGUgbm90IGluIElOU1BFQ1RPUl9UWVBFU19HRU5FUkFUT1JfQ09ORklHX01BUC5rZXlz
KCk6Ci0gICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiVW5rbm93biBvdXRwdXQgdHlwZS4gQWxsb3dl
ZCB0eXBlcyBhcmU6ICVzIiAlIElOU1BFQ1RPUl9UWVBFU19HRU5FUkFUT1JfQ09ORklHX01BUC5r
ZXlzKCkpCi1leGNlcHQgRXhjZXB0aW9uOgotICAgICMgV29yayB3aXRoIHB5dGhvbiAyIGFuZCAz
IGh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvcHkzay9ob3d0by9weXBvcnRpbmcuaHRtbAotICAgIGV4
YyA9IHN5cy5leGNfaW5mbygpWzFdCi0gICAgc3lzLnN0ZGVyci53cml0ZSgiRmFpbGVkIHRvIHBh
cnNlIGNvbW1hbmQtbGluZSBhcmd1bWVudHM6ICVzXG5cbiIgJSBleGMpCi0gICAgc3lzLnN0ZGVy
ci53cml0ZSgiVXNhZ2U6IDxzY3JpcHQ+IEluc3BlY3Rvci5qc29uIC0tb3V0cHV0X2hfZGlyIDxv
dXRwdXRfaGVhZGVyX2Rpcj4gLS1vdXRwdXRfY3BwX2RpciA8b3V0cHV0X2NwcF9kaXI+IC0tb3V0
cHV0X2pzX2RpciA8b3V0cHV0X2pzX2Rpcj4gWy0td3JpdGVfYWx3YXlzXSBbLS1ub192ZXJpZmlj
YXRpb25dXG4iKQotICAgIGV4aXQoMSkKLQotCi1kZWYgZGFzaF90b19jYW1lbGNhc2Uod29yZCk6
Ci0gICAgcmV0dXJuICcnLmpvaW4oeC5jYXBpdGFsaXplKCkgb3IgJy0nIGZvciB4IGluIHdvcmQu
c3BsaXQoJy0nKSkKLQotCi1kZWYgZml4X2NhbWVsX2Nhc2UobmFtZSk6Ci0gICAgcmVmaW5lZCA9
IHJlLnN1YihyJy0oXHcpJywgbGFtYmRhIHBhdDogcGF0Lmdyb3VwKDEpLnVwcGVyKCksIG5hbWUp
Ci0gICAgcmVmaW5lZCA9IHRvX3RpdGxlX2Nhc2UocmVmaW5lZCkKLSAgICByZXR1cm4gcmUuc3Vi
KHInKD9pKUhUTUx8WE1MfFdNTHxBUEl8R0N8WEhSfERPTXxDU1MnLCBsYW1iZGEgcGF0OiBwYXQu
Z3JvdXAoMCkudXBwZXIoKSwgcmVmaW5lZCkKLQotCi1kZWYgdG9fdGl0bGVfY2FzZShuYW1lKToK
LSAgICByZXR1cm4gbmFtZVs6MV0udXBwZXIoKSArIG5hbWVbMTpdCi0KLQotY2xhc3MgQ2FwaXRh
bGl6ZXI6Ci0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBsb3dlcl9jYW1lbF9jYXNlX3RvX3Vw
cGVyKHN0cik6Ci0gICAgICAgIGlmIGxlbihzdHIpID4gMCBhbmQgc3RyWzBdLmlzbG93ZXIoKToK
LSAgICAgICAgICAgIHN0ciA9IHN0clswXS51cHBlcigpICsgc3RyWzE6XQotICAgICAgICByZXR1
cm4gc3RyCi0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIHVwcGVyX2NhbWVsX2Nhc2VfdG9f
bG93ZXIoc3RyKToKLSAgICAgICAgcG9zID0gMAotICAgICAgICB3aGlsZSBwb3MgPCBsZW4oc3Ry
KSBhbmQgc3RyW3Bvc10uaXN1cHBlcigpOgotICAgICAgICAgICAgcG9zICs9IDEKLSAgICAgICAg
aWYgcG9zID09IDA6Ci0gICAgICAgICAgICByZXR1cm4gc3RyCi0gICAgICAgIGlmIHBvcyA9PSAx
OgotICAgICAgICAgICAgcmV0dXJuIHN0clswXS5sb3dlcigpICsgc3RyWzE6XQotICAgICAgICBp
ZiBwb3MgPCBsZW4oc3RyKToKLSAgICAgICAgICAgIHBvcyAtPSAxCi0gICAgICAgIHBvc3NpYmxl
X2FiYnJldmlhdGlvbiA9IHN0clswOnBvc10KLSAgICAgICAgaWYgcG9zc2libGVfYWJicmV2aWF0
aW9uIG5vdCBpbiBDYXBpdGFsaXplci5BQkJSRVZJQVRJT046Ci0gICAgICAgICAgICByYWlzZSBF
eGNlcHRpb24oIlVua25vd24gYWJicmV2aWF0aW9uICVzIiAlIHBvc3NpYmxlX2FiYnJldmlhdGlv
bikKLSAgICAgICAgc3RyID0gcG9zc2libGVfYWJicmV2aWF0aW9uLmxvd2VyKCkgKyBzdHJbcG9z
Ol0KLSAgICAgICAgcmV0dXJuIHN0cgotCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBjYW1l
bF9jYXNlX3RvX2NhcGl0YWxpemVkX3dpdGhfdW5kZXJzY29yZXMoc3RyKToKLSAgICAgICAgaWYg
bGVuKHN0cikgPT0gMDoKLSAgICAgICAgICAgIHJldHVybiBzdHIKLSAgICAgICAgb3V0cHV0ID0g
Q2FwaXRhbGl6ZXIuc3BsaXRfY2FtZWxfY2FzZV8oc3RyKQotICAgICAgICByZXR1cm4gIl8iLmpv
aW4ob3V0cHV0KS51cHBlcigpCi0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIHNwbGl0X2Nh
bWVsX2Nhc2VfKHN0cik6Ci0gICAgICAgIG91dHB1dCA9IFtdCi0gICAgICAgIHBvc19iZWluZyA9
IDAKLSAgICAgICAgcG9zID0gMQotICAgICAgICBoYXNfb25lbGV0dGVyID0gRmFsc2UKLSAgICAg
ICAgd2hpbGUgcG9zIDwgbGVuKHN0cik6Ci0gICAgICAgICAgICBpZiBzdHJbcG9zXS5pc3VwcGVy
KCk6Ci0gICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZChzdHJbcG9zX2JlaW5nOnBvc10udXBw
ZXIoKSkKLSAgICAgICAgICAgICAgICBpZiBwb3MgLSBwb3NfYmVpbmcgPT0gMToKLSAgICAgICAg
ICAgICAgICAgICAgaGFzX29uZWxldHRlciA9IFRydWUKLSAgICAgICAgICAgICAgICBwb3NfYmVp
bmcgPSBwb3MKLSAgICAgICAgICAgIHBvcyArPSAxCi0gICAgICAgIG91dHB1dC5hcHBlbmQoc3Ry
W3Bvc19iZWluZzpdKQotICAgICAgICBpZiBoYXNfb25lbGV0dGVyOgotICAgICAgICAgICAgYXJy
YXlfcG9zID0gMAotICAgICAgICAgICAgd2hpbGUgYXJyYXlfcG9zIDwgbGVuKG91dHB1dCkgLSAx
OgotICAgICAgICAgICAgICAgIGlmIGxlbihvdXRwdXRbYXJyYXlfcG9zXSkgPT0gMToKLSAgICAg
ICAgICAgICAgICAgICAgYXJyYXlfcG9zX2VuZCA9IGFycmF5X3BvcyArIDEKLSAgICAgICAgICAg
ICAgICAgICAgd2hpbGUgYXJyYXlfcG9zX2VuZCA8IGxlbihvdXRwdXQpIGFuZCBsZW4ob3V0cHV0
W2FycmF5X3Bvc19lbmRdKSA9PSAxOgotICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlfcG9z
X2VuZCArPSAxCi0gICAgICAgICAgICAgICAgICAgIGlmIGFycmF5X3Bvc19lbmQgLSBhcnJheV9w
b3MgPiAxOgotICAgICAgICAgICAgICAgICAgICAgICAgcG9zc2libGVfYWJicmV2aWF0aW9uID0g
IiIuam9pbihvdXRwdXRbYXJyYXlfcG9zOmFycmF5X3Bvc19lbmRdKQotICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgcG9zc2libGVfYWJicmV2aWF0aW9uLnVwcGVyKCkgaW4gQ2FwaXRhbGl6ZXIu
QUJCUkVWSUFUSU9OOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dFthcnJheV9w
b3M6YXJyYXlfcG9zX2VuZF0gPSBbcG9zc2libGVfYWJicmV2aWF0aW9uXQotICAgICAgICAgICAg
ICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheV9wb3Mg
PSBhcnJheV9wb3NfZW5kIC0gMQotICAgICAgICAgICAgICAgIGFycmF5X3BvcyArPSAxCi0gICAg
ICAgIHJldHVybiBvdXRwdXQKLQotICAgIEFCQlJFVklBVElPTiA9IGZyb3plbnNldChbIlhIUiIs
ICJET00iLCAiQ1NTIl0pCi0KLVZBTElEQVRPUl9JRkRFRl9OQU1FID0gIiFBU1NFUlRfRElTQUJM
RUQiCi0KLQotY2xhc3MgRG9tYWluTmFtZUZpeGVzOgotICAgIEBjbGFzc21ldGhvZAotICAgIGRl
ZiBnZXRfZml4ZWRfZGF0YShjbHMsIGRvbWFpbl9uYW1lKToKLSAgICAgICAgZmllbGRfbmFtZV9y
ZXMgPSBDYXBpdGFsaXplci51cHBlcl9jYW1lbF9jYXNlX3RvX2xvd2VyKGRvbWFpbl9uYW1lKSAr
ICJBZ2VudCIKLQotICAgICAgICBjbGFzcyBSZXMob2JqZWN0KToKLSAgICAgICAgICAgIHNraXBf
anNfYmluZCA9IGRvbWFpbl9uYW1lIGluIGNscy5za2lwX2pzX2JpbmRfZG9tYWlucwotCi0gICAg
ICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICBkZWYgZ2V0X2d1YXJkKCk6Ci0gICAg
ICAgICAgICAgICAgaWYgZG9tYWluX25hbWUgaW4gRE9NQUlOX0RFRklORV9OQU1FX01BUDoKLSAg
ICAgICAgICAgICAgICAgICAgZGVmaW5lX25hbWUgPSBET01BSU5fREVGSU5FX05BTUVfTUFQW2Rv
bWFpbl9uYW1lXQotCi0gICAgICAgICAgICAgICAgICAgIGNsYXNzIEd1YXJkOgotICAgICAgICAg
ICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgICAgICAgICAgICAgZGVm
IGdlbmVyYXRlX29wZW4ob3V0cHV0KToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRw
dXQuYXBwZW5kKCIjaWYgRU5BQkxFKCVzKVxuIiAlIGRlZmluZV9uYW1lKQotCi0gICAgICAgICAg
ICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWYg
Z2VuZXJhdGVfY2xvc2Uob3V0cHV0KToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRw
dXQuYXBwZW5kKCIjZW5kaWYgLy8gRU5BQkxFKCVzKVxuIiAlIGRlZmluZV9uYW1lKQotCi0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBHdWFyZAotCi0gICAgICAgIHJldHVybiBSZXMKLQotICAg
IHNraXBfanNfYmluZF9kb21haW5zID0gc2V0KFsiRE9NRGVidWdnZXIiXSkKLQotCi1jbGFzcyBS
YXdUeXBlcyhvYmplY3QpOgotICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgZ2V0KGpzb25fdHlw
ZSk6Ci0gICAgICAgIGlmIGpzb25fdHlwZSA9PSAiYm9vbGVhbiI6Ci0gICAgICAgICAgICByZXR1
cm4gUmF3VHlwZXMuQm9vbAotICAgICAgICBlbGlmIGpzb25fdHlwZSA9PSAic3RyaW5nIjoKLSAg
ICAgICAgICAgIHJldHVybiBSYXdUeXBlcy5TdHJpbmcKLSAgICAgICAgZWxpZiBqc29uX3R5cGUg
PT0gImFycmF5IjoKLSAgICAgICAgICAgIHJldHVybiBSYXdUeXBlcy5BcnJheQotICAgICAgICBl
bGlmIGpzb25fdHlwZSA9PSAib2JqZWN0IjoKLSAgICAgICAgICAgIHJldHVybiBSYXdUeXBlcy5P
YmplY3QKLSAgICAgICAgZWxpZiBqc29uX3R5cGUgPT0gImludGVnZXIiOgotICAgICAgICAgICAg
cmV0dXJuIFJhd1R5cGVzLkludAotICAgICAgICBlbGlmIGpzb25fdHlwZSA9PSAibnVtYmVyIjoK
LSAgICAgICAgICAgIHJldHVybiBSYXdUeXBlcy5OdW1iZXIKLSAgICAgICAgZWxpZiBqc29uX3R5
cGUgPT0gImFueSI6Ci0gICAgICAgICAgICByZXR1cm4gUmF3VHlwZXMuQW55Ci0gICAgICAgIGVs
c2U6Ci0gICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIlVua25vd24gdHlwZTogJXMiICUganNv
bl90eXBlKQotCi0gICAgIyBGb3Igb3V0cHV0IHBhcmFtZXRlciBhbGwgdmFsdWVzIGFyZSBwYXNz
ZWQgYnkgcG9pbnRlciBleGNlcHQgUmVmUHRyLWJhc2VkIHR5cGVzLgotICAgIGNsYXNzIE91dHB1
dFBhc3NNb2RlbDoKLSAgICAgICAgY2xhc3MgQnlQb2ludGVyOgotICAgICAgICAgICAgQHN0YXRp
Y21ldGhvZAotICAgICAgICAgICAgZGVmIGdldF9hcmd1bWVudF9wcmVmaXgoKToKLSAgICAgICAg
ICAgICAgICByZXR1cm4gIiYiCi0KLSAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAg
ICAgIGRlZiBnZXRfcGFyYW1ldGVyX3R5cGVfc3VmZml4KCk6Ci0gICAgICAgICAgICAgICAgcmV0
dXJuICIqIgotCi0gICAgICAgIGNsYXNzIEJ5UmVmZXJlbmNlOgotICAgICAgICAgICAgQHN0YXRp
Y21ldGhvZAotICAgICAgICAgICAgZGVmIGdldF9hcmd1bWVudF9wcmVmaXgoKToKLSAgICAgICAg
ICAgICAgICByZXR1cm4gIiIKLQotICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAg
ICAgZGVmIGdldF9wYXJhbWV0ZXJfdHlwZV9zdWZmaXgoKToKLSAgICAgICAgICAgICAgICByZXR1
cm4gIiYiCi0KLSAgICBjbGFzcyBCYXNlVHlwZShvYmplY3QpOgotICAgICAgICBuZWVkX2ludGVy
bmFsX3J1bnRpbWVfY2FzdF8gPSBGYWxzZQotCi0gICAgICAgIEBjbGFzc21ldGhvZAotICAgICAg
ICBkZWYgcmVxdWVzdF9yYXdfaW50ZXJuYWxfcnVudGltZV9jYXN0KGNscyk6Ci0gICAgICAgICAg
ICBpZiBub3QgY2xzLm5lZWRfaW50ZXJuYWxfcnVudGltZV9jYXN0XzoKLSAgICAgICAgICAgICAg
ICBjbHMubmVlZF9pbnRlcm5hbF9ydW50aW1lX2Nhc3RfID0gVHJ1ZQotCi0gICAgICAgIEBjbGFz
c21ldGhvZAotICAgICAgICBkZWYgZ2V0X3Jhd192YWxpZGF0b3JfY2FsbF90ZXh0KGNscyk6Ci0g
ICAgICAgICAgICByZXR1cm4gIlJ1bnRpbWVDYXN0SGVscGVyOjphc3NlcnRUeXBlPEluc3BlY3Rv
cjo6SW5zcGVjdG9yVmFsdWU6OlR5cGUlcz4iICUgY2xzLmdldF92YWxpZGF0ZV9tZXRob2RfcGFy
YW1zKCkudGVtcGxhdGVfdHlwZQotCi0gICAgY2xhc3MgU3RyaW5nKEJhc2VUeXBlKToKLSAgICAg
ICAgQHN0YXRpY21ldGhvZAotICAgICAgICBkZWYgZ2V0X2dldHRlcl9uYW1lKCk6Ci0gICAgICAg
ICAgICByZXR1cm4gIlN0cmluZyIKLQotICAgICAgICBnZXRfc2V0dGVyX25hbWUgPSBnZXRfZ2V0
dGVyX25hbWUKLQotICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgIGRlZiBnZXRfY19pbml0
aWFsaXplcigpOgotICAgICAgICAgICAgcmV0dXJuICJcIlwiIgotCi0gICAgICAgIEBzdGF0aWNt
ZXRob2QKLSAgICAgICAgZGVmIGdldF9qc19iaW5kX3R5cGUoKToKLSAgICAgICAgICAgIHJldHVy
biAic3RyaW5nIgotCi0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGdldF92YWxp
ZGF0ZV9tZXRob2RfcGFyYW1zKCk6Ci0gICAgICAgICAgICBjbGFzcyBWYWxpZGF0ZU1ldGhvZFBh
cmFtczoKLSAgICAgICAgICAgICAgICB0ZW1wbGF0ZV90eXBlID0gIlN0cmluZyIKLSAgICAgICAg
ICAgIHJldHVybiBWYWxpZGF0ZU1ldGhvZFBhcmFtcwotCi0gICAgICAgIEBzdGF0aWNtZXRob2QK
LSAgICAgICAgZGVmIGdldF9vdXRwdXRfcGFzc19tb2RlbCgpOgotICAgICAgICAgICAgcmV0dXJu
IFJhd1R5cGVzLk91dHB1dFBhc3NNb2RlbC5CeVBvaW50ZXIKLQotICAgICAgICBAc3RhdGljbWV0
aG9kCi0gICAgICAgIGRlZiBpc19oZWF2eV92YWx1ZSgpOgotICAgICAgICAgICAgcmV0dXJuIFRy
dWUKLQotICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgIGRlZiBnZXRfYXJyYXlfaXRlbV9y
YXdfY190eXBlX3RleHQoKToKLSAgICAgICAgICAgIHJldHVybiAiU3RyaW5nIgotCi0gICAgICAg
IEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGdldF9yYXdfdHlwZV9tb2RlbCgpOgotICAgICAg
ICAgICAgcmV0dXJuIFR5cGVNb2RlbC5TdHJpbmcKLQotICAgIGNsYXNzIEludChCYXNlVHlwZSk6
Ci0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGdldF9nZXR0ZXJfbmFtZSgpOgot
ICAgICAgICAgICAgcmV0dXJuICJJbnQiCi0KLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAg
ICBkZWYgZ2V0X3NldHRlcl9uYW1lKCk6Ci0gICAgICAgICAgICByZXR1cm4gIk51bWJlciIKLQot
ICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgIGRlZiBnZXRfY19pbml0aWFsaXplcigpOgot
ICAgICAgICAgICAgcmV0dXJuICIwIgotCi0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAg
ZGVmIGdldF9qc19iaW5kX3R5cGUoKToKLSAgICAgICAgICAgIHJldHVybiAibnVtYmVyIgotCi0g
ICAgICAgIEBjbGFzc21ldGhvZAotICAgICAgICBkZWYgZ2V0X3Jhd192YWxpZGF0b3JfY2FsbF90
ZXh0KGNscyk6Ci0gICAgICAgICAgICByZXR1cm4gIlJ1bnRpbWVDYXN0SGVscGVyOjphc3NlcnRJ
bnQiCi0KLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBkZWYgZ2V0X291dHB1dF9wYXNz
X21vZGVsKCk6Ci0gICAgICAgICAgICByZXR1cm4gUmF3VHlwZXMuT3V0cHV0UGFzc01vZGVsLkJ5
UG9pbnRlcgotCi0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGlzX2hlYXZ5X3Zh
bHVlKCk6Ci0gICAgICAgICAgICByZXR1cm4gRmFsc2UKLQotICAgICAgICBAc3RhdGljbWV0aG9k
Ci0gICAgICAgIGRlZiBnZXRfYXJyYXlfaXRlbV9yYXdfY190eXBlX3RleHQoKToKLSAgICAgICAg
ICAgIHJldHVybiAiaW50IgotCi0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGdl
dF9yYXdfdHlwZV9tb2RlbCgpOgotICAgICAgICAgICAgcmV0dXJuIFR5cGVNb2RlbC5JbnQKLQot
ICAgIGNsYXNzIE51bWJlcihCYXNlVHlwZSk6Ci0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAg
ICAgZGVmIGdldF9nZXR0ZXJfbmFtZSgpOgotICAgICAgICAgICAgcmV0dXJuICJEb3VibGUiCi0K
LSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBkZWYgZ2V0X3NldHRlcl9uYW1lKCk6Ci0g
ICAgICAgICAgICByZXR1cm4gIk51bWJlciIKLQotICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAg
ICAgIGRlZiBnZXRfY19pbml0aWFsaXplcigpOgotICAgICAgICAgICAgcmV0dXJuICIwIgotCi0g
ICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGdldF9qc19iaW5kX3R5cGUoKToKLSAg
ICAgICAgICAgIHJldHVybiAibnVtYmVyIgotCi0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAg
ICAgZGVmIGdldF92YWxpZGF0ZV9tZXRob2RfcGFyYW1zKCk6Ci0gICAgICAgICAgICBjbGFzcyBW
YWxpZGF0ZU1ldGhvZFBhcmFtczoKLSAgICAgICAgICAgICAgICB0ZW1wbGF0ZV90eXBlID0gIk51
bWJlciIKLSAgICAgICAgICAgIHJldHVybiBWYWxpZGF0ZU1ldGhvZFBhcmFtcwotCi0gICAgICAg
IEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGdldF9vdXRwdXRfcGFzc19tb2RlbCgpOgotICAg
ICAgICAgICAgcmV0dXJuIFJhd1R5cGVzLk91dHB1dFBhc3NNb2RlbC5CeVBvaW50ZXIKLQotICAg
ICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgIGRlZiBpc19oZWF2eV92YWx1ZSgpOgotICAgICAg
ICAgICAgcmV0dXJuIEZhbHNlCi0KLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBkZWYg
Z2V0X2FycmF5X2l0ZW1fcmF3X2NfdHlwZV90ZXh0KCk6Ci0gICAgICAgICAgICByZXR1cm4gImRv
dWJsZSIKLQotICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgIGRlZiBnZXRfcmF3X3R5cGVf
bW9kZWwoKToKLSAgICAgICAgICAgIHJldHVybiBUeXBlTW9kZWwuTnVtYmVyCi0KLSAgICBjbGFz
cyBCb29sKEJhc2VUeXBlKToKLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBkZWYgZ2V0
X2dldHRlcl9uYW1lKCk6Ci0gICAgICAgICAgICByZXR1cm4gIkJvb2xlYW4iCi0KLSAgICAgICAg
Z2V0X3NldHRlcl9uYW1lID0gZ2V0X2dldHRlcl9uYW1lCi0KLSAgICAgICAgQHN0YXRpY21ldGhv
ZAotICAgICAgICBkZWYgZ2V0X2NfaW5pdGlhbGl6ZXIoKToKLSAgICAgICAgICAgIHJldHVybiAi
ZmFsc2UiCi0KLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBkZWYgZ2V0X2pzX2JpbmRf
dHlwZSgpOgotICAgICAgICAgICAgcmV0dXJuICJib29sZWFuIgotCi0gICAgICAgIEBzdGF0aWNt
ZXRob2QKLSAgICAgICAgZGVmIGdldF92YWxpZGF0ZV9tZXRob2RfcGFyYW1zKCk6Ci0gICAgICAg
ICAgICBjbGFzcyBWYWxpZGF0ZU1ldGhvZFBhcmFtczoKLSAgICAgICAgICAgICAgICB0ZW1wbGF0
ZV90eXBlID0gIkJvb2xlYW4iCi0gICAgICAgICAgICByZXR1cm4gVmFsaWRhdGVNZXRob2RQYXJh
bXMKLQotICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgIGRlZiBnZXRfb3V0cHV0X3Bhc3Nf
bW9kZWwoKToKLSAgICAgICAgICAgIHJldHVybiBSYXdUeXBlcy5PdXRwdXRQYXNzTW9kZWwuQnlQ
b2ludGVyCi0KLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBkZWYgaXNfaGVhdnlfdmFs
dWUoKToKLSAgICAgICAgICAgIHJldHVybiBGYWxzZQotCi0gICAgICAgIEBzdGF0aWNtZXRob2QK
LSAgICAgICAgZGVmIGdldF9hcnJheV9pdGVtX3Jhd19jX3R5cGVfdGV4dCgpOgotICAgICAgICAg
ICAgcmV0dXJuICJib29sIgotCi0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGdl
dF9yYXdfdHlwZV9tb2RlbCgpOgotICAgICAgICAgICAgcmV0dXJuIFR5cGVNb2RlbC5Cb29sCi0K
LSAgICBjbGFzcyBPYmplY3QoQmFzZVR5cGUpOgotICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAg
ICAgIGRlZiBnZXRfZ2V0dGVyX25hbWUoKToKLSAgICAgICAgICAgIHJldHVybiAiT2JqZWN0Igot
Ci0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGdldF9zZXR0ZXJfbmFtZSgpOgot
ICAgICAgICAgICAgcmV0dXJuICJWYWx1ZSIKLQotICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAg
ICAgIGRlZiBnZXRfY19pbml0aWFsaXplcigpOgotICAgICAgICAgICAgcmV0dXJuICJJbnNwZWN0
b3JPYmplY3Q6OmNyZWF0ZSgpIgotCi0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVm
IGdldF9qc19iaW5kX3R5cGUoKToKLSAgICAgICAgICAgIHJldHVybiAib2JqZWN0IgotCi0gICAg
ICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGdldF9vdXRwdXRfYXJndW1lbnRfcHJlZml4
KCk6Ci0gICAgICAgICAgICByZXR1cm4gIiIKLQotICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAg
ICAgIGRlZiBnZXRfdmFsaWRhdGVfbWV0aG9kX3BhcmFtcygpOgotICAgICAgICAgICAgY2xhc3Mg
VmFsaWRhdGVNZXRob2RQYXJhbXM6Ci0gICAgICAgICAgICAgICAgdGVtcGxhdGVfdHlwZSA9ICJP
YmplY3QiCi0gICAgICAgICAgICByZXR1cm4gVmFsaWRhdGVNZXRob2RQYXJhbXMKLQotICAgICAg
ICBAc3RhdGljbWV0aG9kCi0gICAgICAgIGRlZiBnZXRfb3V0cHV0X3Bhc3NfbW9kZWwoKToKLSAg
ICAgICAgICAgIHJldHVybiBSYXdUeXBlcy5PdXRwdXRQYXNzTW9kZWwuQnlSZWZlcmVuY2UKLQot
ICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgIGRlZiBpc19oZWF2eV92YWx1ZSgpOgotICAg
ICAgICAgICAgcmV0dXJuIFRydWUKLQotICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgIGRl
ZiBnZXRfYXJyYXlfaXRlbV9yYXdfY190eXBlX3RleHQoKToKLSAgICAgICAgICAgIHJldHVybiAi
SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QiCi0KLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAg
ICAgICBkZWYgZ2V0X3Jhd190eXBlX21vZGVsKCk6Ci0gICAgICAgICAgICByZXR1cm4gVHlwZU1v
ZGVsLk9iamVjdAotCi0gICAgY2xhc3MgQW55KEJhc2VUeXBlKToKLSAgICAgICAgQHN0YXRpY21l
dGhvZAotICAgICAgICBkZWYgZ2V0X2dldHRlcl9uYW1lKCk6Ci0gICAgICAgICAgICByZXR1cm4g
IlZhbHVlIgotCi0gICAgICAgIGdldF9zZXR0ZXJfbmFtZSA9IGdldF9nZXR0ZXJfbmFtZQotCi0g
ICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGdldF9jX2luaXRpYWxpemVyKCk6Ci0g
ICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIlVuc3VwcG9ydGVkIikKLQotICAgICAgICBAc3Rh
dGljbWV0aG9kCi0gICAgICAgIGRlZiBnZXRfanNfYmluZF90eXBlKCk6Ci0gICAgICAgICAgICBy
YWlzZSBFeGNlcHRpb24oIlVuc3VwcG9ydGVkIikKLQotICAgICAgICBAc3RhdGljbWV0aG9kCi0g
ICAgICAgIGRlZiBnZXRfcmF3X3ZhbGlkYXRvcl9jYWxsX3RleHQoKToKLSAgICAgICAgICAgIHJl
dHVybiAiUnVudGltZUNhc3RIZWxwZXI6OmFzc2VydEFueSIKLQotICAgICAgICBAc3RhdGljbWV0
aG9kCi0gICAgICAgIGRlZiBnZXRfb3V0cHV0X3Bhc3NfbW9kZWwoKToKLSAgICAgICAgICAgIHJl
dHVybiBSYXdUeXBlcy5PdXRwdXRQYXNzTW9kZWwuQnlSZWZlcmVuY2UKLQotICAgICAgICBAc3Rh
dGljbWV0aG9kCi0gICAgICAgIGRlZiBpc19oZWF2eV92YWx1ZSgpOgotICAgICAgICAgICAgcmV0
dXJuIFRydWUKLQotICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgIGRlZiBnZXRfYXJyYXlf
aXRlbV9yYXdfY190eXBlX3RleHQoKToKLSAgICAgICAgICAgIHJldHVybiAiSW5zcGVjdG9yOjpJ
bnNwZWN0b3JWYWx1ZSIKLQotICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgIGRlZiBnZXRf
cmF3X3R5cGVfbW9kZWwoKToKLSAgICAgICAgICAgIHJldHVybiBUeXBlTW9kZWwuQW55Ci0KLSAg
ICBjbGFzcyBBcnJheShCYXNlVHlwZSk6Ci0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAg
ZGVmIGdldF9nZXR0ZXJfbmFtZSgpOgotICAgICAgICAgICAgcmV0dXJuICJBcnJheSIKLQotICAg
ICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgIGRlZiBnZXRfc2V0dGVyX25hbWUoKToKLSAgICAg
ICAgICAgIHJldHVybiAiVmFsdWUiCi0KLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBk
ZWYgZ2V0X2NfaW5pdGlhbGl6ZXIoKToKLSAgICAgICAgICAgIHJldHVybiAiSW5zcGVjdG9yQXJy
YXk6OmNyZWF0ZSgpIgotCi0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGdldF9q
c19iaW5kX3R5cGUoKToKLSAgICAgICAgICAgIHJldHVybiAib2JqZWN0IgotCi0gICAgICAgIEBz
dGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGdldF9vdXRwdXRfYXJndW1lbnRfcHJlZml4KCk6Ci0g
ICAgICAgICAgICByZXR1cm4gIiIKLQotICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgIGRl
ZiBnZXRfdmFsaWRhdGVfbWV0aG9kX3BhcmFtcygpOgotICAgICAgICAgICAgY2xhc3MgVmFsaWRh
dGVNZXRob2RQYXJhbXM6Ci0gICAgICAgICAgICAgICAgdGVtcGxhdGVfdHlwZSA9ICJBcnJheSIK
LSAgICAgICAgICAgIHJldHVybiBWYWxpZGF0ZU1ldGhvZFBhcmFtcwotCi0gICAgICAgIEBzdGF0
aWNtZXRob2QKLSAgICAgICAgZGVmIGdldF9vdXRwdXRfcGFzc19tb2RlbCgpOgotICAgICAgICAg
ICAgcmV0dXJuIFJhd1R5cGVzLk91dHB1dFBhc3NNb2RlbC5CeVJlZmVyZW5jZQotCi0gICAgICAg
IEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGlzX2hlYXZ5X3ZhbHVlKCk6Ci0gICAgICAgICAg
ICByZXR1cm4gVHJ1ZQotCi0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGdldF9h
cnJheV9pdGVtX3Jhd19jX3R5cGVfdGV4dCgpOgotICAgICAgICAgICAgcmV0dXJuICJJbnNwZWN0
b3I6Okluc3BlY3RvckFycmF5IgotCi0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVm
IGdldF9yYXdfdHlwZV9tb2RlbCgpOgotICAgICAgICAgICAgcmV0dXJuIFR5cGVNb2RlbC5BcnJh
eQotCi0KLWRlZiByZXBsYWNlX3JpZ2h0X3NoaWZ0KGlucHV0X3N0cik6Ci0gICAgcmV0dXJuIGlu
cHV0X3N0ci5yZXBsYWNlKCI+PiIsICI+ID4iKQotCi0KLWNsYXNzIENvbW1hbmRSZXR1cm5QYXNz
TW9kZWw6Ci0gICAgY2xhc3MgQnlSZWZlcmVuY2U6Ci0gICAgICAgIGRlZiBfX2luaXRfXyhzZWxm
LCB2YXJfdHlwZSwgc2V0X2NvbmRpdGlvbik6Ci0gICAgICAgICAgICBzZWxmLnZhcl90eXBlID0g
dmFyX3R5cGUKLSAgICAgICAgICAgIHNlbGYuc2V0X2NvbmRpdGlvbiA9IHNldF9jb25kaXRpb24K
LQotICAgICAgICBkZWYgZ2V0X3JldHVybl92YXJfdHlwZShzZWxmKToKLSAgICAgICAgICAgIHJl
dHVybiBzZWxmLnZhcl90eXBlCi0KLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBkZWYg
Z2V0X291dHB1dF9hcmd1bWVudF9wcmVmaXgoKToKLSAgICAgICAgICAgIHJldHVybiAiIgotCi0g
ICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGdldF9vdXRwdXRfdG9fcmF3X2V4cHJl
c3Npb24oKToKLSAgICAgICAgICAgIHJldHVybiAiJXMiCi0KLSAgICAgICAgZGVmIGdldF9vdXRw
dXRfcGFyYW1ldGVyX3R5cGUoc2VsZik6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi52YXJfdHlw
ZSArICImIgotCi0gICAgICAgIGRlZiBnZXRfc2V0X3JldHVybl9jb25kaXRpb24oc2VsZik6Ci0g
ICAgICAgICAgICByZXR1cm4gc2VsZi5zZXRfY29uZGl0aW9uCi0KLSAgICBjbGFzcyBCeVBvaW50
ZXI6Ci0gICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2YXJfdHlwZSk6Ci0gICAgICAgICAgICBz
ZWxmLnZhcl90eXBlID0gdmFyX3R5cGUKLQotICAgICAgICBkZWYgZ2V0X3JldHVybl92YXJfdHlw
ZShzZWxmKToKLSAgICAgICAgICAgIHJldHVybiBzZWxmLnZhcl90eXBlCi0KLSAgICAgICAgQHN0
YXRpY21ldGhvZAotICAgICAgICBkZWYgZ2V0X291dHB1dF9hcmd1bWVudF9wcmVmaXgoKToKLSAg
ICAgICAgICAgIHJldHVybiAiJiIKLQotICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgIGRl
ZiBnZXRfb3V0cHV0X3RvX3Jhd19leHByZXNzaW9uKCk6Ci0gICAgICAgICAgICByZXR1cm4gIiVz
IgotCi0gICAgICAgIGRlZiBnZXRfb3V0cHV0X3BhcmFtZXRlcl90eXBlKHNlbGYpOgotICAgICAg
ICAgICAgcmV0dXJuIHNlbGYudmFyX3R5cGUgKyAiKiIKLQotICAgICAgICBAc3RhdGljbWV0aG9k
Ci0gICAgICAgIGRlZiBnZXRfc2V0X3JldHVybl9jb25kaXRpb24oKToKLSAgICAgICAgICAgIHJl
dHVybiBOb25lCi0KLSAgICBjbGFzcyBPcHRPdXRwdXQ6Ci0gICAgICAgIGRlZiBfX2luaXRfXyhz
ZWxmLCB2YXJfdHlwZSk6Ci0gICAgICAgICAgICBzZWxmLnZhcl90eXBlID0gdmFyX3R5cGUKLQot
ICAgICAgICBkZWYgZ2V0X3JldHVybl92YXJfdHlwZShzZWxmKToKLSAgICAgICAgICAgIHJldHVy
biAiSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6T3B0T3V0cHV0PCVzPiIgJSBzZWxmLnZhcl90eXBl
Ci0KLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBkZWYgZ2V0X291dHB1dF9hcmd1bWVu
dF9wcmVmaXgoKToKLSAgICAgICAgICAgIHJldHVybiAiJiIKLQotICAgICAgICBAc3RhdGljbWV0
aG9kCi0gICAgICAgIGRlZiBnZXRfb3V0cHV0X3RvX3Jhd19leHByZXNzaW9uKCk6Ci0gICAgICAg
ICAgICByZXR1cm4gIiVzLmdldFZhbHVlKCkiCi0KLSAgICAgICAgZGVmIGdldF9vdXRwdXRfcGFy
YW1ldGVyX3R5cGUoc2VsZik6Ci0gICAgICAgICAgICByZXR1cm4gIkluc3BlY3Rvcjo6VHlwZUJ1
aWxkZXI6Ok9wdE91dHB1dDwlcz4qIiAlIHNlbGYudmFyX3R5cGUKLQotICAgICAgICBAc3RhdGlj
bWV0aG9kCi0gICAgICAgIGRlZiBnZXRfc2V0X3JldHVybl9jb25kaXRpb24oKToKLSAgICAgICAg
ICAgIHJldHVybiAiJXMuaXNBc3NpZ25lZCgpIgotCi0KLWNsYXNzIFR5cGVNb2RlbDoKLSAgICBj
bGFzcyBSZWZQdHJCYXNlZChvYmplY3QpOgotICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgY2xh
c3NfbmFtZSk6Ci0gICAgICAgICAgICBzZWxmLmNsYXNzX25hbWUgPSBjbGFzc19uYW1lCi0gICAg
ICAgICAgICBzZWxmLm9wdGlvbmFsID0gRmFsc2UKLQotICAgICAgICBkZWYgZ2V0X29wdGlvbmFs
KHNlbGYpOgotICAgICAgICAgICAgcmVzdWx0ID0gVHlwZU1vZGVsLlJlZlB0ckJhc2VkKHNlbGYu
Y2xhc3NfbmFtZSkKLSAgICAgICAgICAgIHJlc3VsdC5vcHRpb25hbCA9IFRydWUKLSAgICAgICAg
ICAgIHJldHVybiByZXN1bHQKLQotICAgICAgICBkZWYgZ2V0X2NvbW1hbmRfcmV0dXJuX3Bhc3Nf
bW9kZWwoc2VsZik6Ci0gICAgICAgICAgICBpZiBzZWxmLm9wdGlvbmFsOgotICAgICAgICAgICAg
ICAgIHNldF9jb25kaXRpb24gPSAiJXMiCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAg
ICAgIHNldF9jb25kaXRpb24gPSBOb25lCi0gICAgICAgICAgICByZXR1cm4gQ29tbWFuZFJldHVy
blBhc3NNb2RlbC5CeVJlZmVyZW5jZShyZXBsYWNlX3JpZ2h0X3NoaWZ0KCJSZWZQdHI8JXM+IiAl
IHNlbGYuY2xhc3NfbmFtZSksIHNldF9jb25kaXRpb24pCi0KLSAgICAgICAgZGVmIGdldF9pbnB1
dF9wYXJhbV90eXBlX3RleHQoc2VsZik6Ci0gICAgICAgICAgICByZXR1cm4gcmVwbGFjZV9yaWdo
dF9zaGlmdCgiUGFzc1JlZlB0cjwlcz4iICUgc2VsZi5jbGFzc19uYW1lKQotCi0gICAgICAgIEBz
dGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGdldF9ldmVudF9zZXR0ZXJfZXhwcmVzc2lvbl9wYXR0
ZXJuKCk6Ci0gICAgICAgICAgICByZXR1cm4gIiVzIgotCi0gICAgY2xhc3MgRW51bShvYmplY3Qp
OgotICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgYmFzZV90eXBlX25hbWUpOgotICAgICAgICAg
ICAgc2VsZi50eXBlX25hbWUgPSBiYXNlX3R5cGVfbmFtZSArICI6OkVudW0iCi0KLSAgICAgICAg
ZGVmIGdldF9vcHRpb25hbChiYXNlX3NlbGYpOgotICAgICAgICAgICAgY2xhc3MgRW51bU9wdGlv
bmFsOgotICAgICAgICAgICAgICAgIEBjbGFzc21ldGhvZAotICAgICAgICAgICAgICAgIGRlZiBn
ZXRfb3B0aW9uYWwoY2xzKToKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNscwotCi0gICAg
ICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgICAgIGRlZiBnZXRfY29tbWFu
ZF9yZXR1cm5fcGFzc19tb2RlbCgpOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ29tbWFu
ZFJldHVyblBhc3NNb2RlbC5PcHRPdXRwdXQoYmFzZV9zZWxmLnR5cGVfbmFtZSkKLQotICAgICAg
ICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgICAgICBkZWYgZ2V0X2lucHV0X3Bh
cmFtX3R5cGVfdGV4dCgpOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gYmFzZV9zZWxmLnR5
cGVfbmFtZSArICIqIgotCi0gICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAg
ICAgICAgIGRlZiBnZXRfZXZlbnRfc2V0dGVyX2V4cHJlc3Npb25fcGF0dGVybigpOgotICAgICAg
ICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIlRPRE8iKQotICAgICAgICAgICAgcmV0dXJu
IEVudW1PcHRpb25hbAotCi0gICAgICAgIGRlZiBnZXRfY29tbWFuZF9yZXR1cm5fcGFzc19tb2Rl
bChzZWxmKToKLSAgICAgICAgICAgIHJldHVybiBDb21tYW5kUmV0dXJuUGFzc01vZGVsLkJ5UG9p
bnRlcihzZWxmLnR5cGVfbmFtZSkKLQotICAgICAgICBkZWYgZ2V0X2lucHV0X3BhcmFtX3R5cGVf
dGV4dChzZWxmKToKLSAgICAgICAgICAgIHJldHVybiBzZWxmLnR5cGVfbmFtZQotCi0gICAgICAg
IEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGdldF9ldmVudF9zZXR0ZXJfZXhwcmVzc2lvbl9w
YXR0ZXJuKCk6Ci0gICAgICAgICAgICByZXR1cm4gIiVzIgotCi0gICAgY2xhc3MgVmFsdWVUeXBl
KG9iamVjdCk6Ci0gICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0eXBlX25hbWUsIGlzX2hlYXZ5
KToKLSAgICAgICAgICAgIHNlbGYudHlwZV9uYW1lID0gdHlwZV9uYW1lCi0gICAgICAgICAgICBz
ZWxmLmlzX2hlYXZ5ID0gaXNfaGVhdnkKLQotICAgICAgICBkZWYgZ2V0X29wdGlvbmFsKHNlbGYp
OgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuVmFsdWVPcHRpb25hbChzZWxmKQotCi0gICAgICAg
IGRlZiBnZXRfY29tbWFuZF9yZXR1cm5fcGFzc19tb2RlbChzZWxmKToKLSAgICAgICAgICAgIHJl
dHVybiBDb21tYW5kUmV0dXJuUGFzc01vZGVsLkJ5UG9pbnRlcihzZWxmLnR5cGVfbmFtZSkKLQot
ICAgICAgICBkZWYgZ2V0X2lucHV0X3BhcmFtX3R5cGVfdGV4dChzZWxmKToKLSAgICAgICAgICAg
IGlmIHNlbGYuaXNfaGVhdnk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJjb25zdCAlcyYiICUg
c2VsZi50eXBlX25hbWUKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IHNlbGYudHlwZV9uYW1lCi0KLSAgICAgICAgZGVmIGdldF9vcHRfb3V0cHV0X3R5cGVfKHNlbGYp
OgotICAgICAgICAgICAgcmV0dXJuIHNlbGYudHlwZV9uYW1lCi0KLSAgICAgICAgQHN0YXRpY21l
dGhvZAotICAgICAgICBkZWYgZ2V0X2V2ZW50X3NldHRlcl9leHByZXNzaW9uX3BhdHRlcm4oKToK
LSAgICAgICAgICAgIHJldHVybiAiJXMiCi0KLSAgICAgICAgY2xhc3MgVmFsdWVPcHRpb25hbDoK
LSAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBiYXNlKToKLSAgICAgICAgICAgICAgICBz
ZWxmLmJhc2UgPSBiYXNlCi0KLSAgICAgICAgICAgIGRlZiBnZXRfb3B0aW9uYWwoc2VsZik6Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYKLQotICAgICAgICAgICAgZGVmIGdldF9jb21tYW5k
X3JldHVybl9wYXNzX21vZGVsKHNlbGYpOgotICAgICAgICAgICAgICAgIHJldHVybiBDb21tYW5k
UmV0dXJuUGFzc01vZGVsLk9wdE91dHB1dChzZWxmLmJhc2UuZ2V0X29wdF9vdXRwdXRfdHlwZV8o
KSkKLQotICAgICAgICAgICAgZGVmIGdldF9pbnB1dF9wYXJhbV90eXBlX3RleHQoc2VsZik6Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuICJjb25zdCAlcyogY29uc3QiICUgc2VsZi5iYXNlLnR5cGVf
bmFtZQotCi0gICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICBkZWYgZ2V0X2V2
ZW50X3NldHRlcl9leHByZXNzaW9uX3BhdHRlcm4oKToKLSAgICAgICAgICAgICAgICByZXR1cm4g
IiolcyIKLQotICAgIGNsYXNzIEV4YWN0bHlJbnQoVmFsdWVUeXBlKToKLSAgICAgICAgZGVmIF9f
aW5pdF9fKHNlbGYpOgotICAgICAgICAgICAgVHlwZU1vZGVsLlZhbHVlVHlwZS5fX2luaXRfXyhz
ZWxmLCAiaW50IiwgRmFsc2UpCi0KLSAgICAgICAgZGVmIGdldF9pbnB1dF9wYXJhbV90eXBlX3Rl
eHQoc2VsZik6Ci0gICAgICAgICAgICByZXR1cm4gIkluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkV4
YWN0bHlJbnQiCi0KLSAgICAgICAgZGVmIGdldF9vcHRfb3V0cHV0X3R5cGVfKHNlbGYpOgotICAg
ICAgICAgICAgcmV0dXJuICJJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpFeGFjdGx5SW50IgotCi0g
ICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIGluaXRfY2xhc3MoY2xzKToKLSAgICAgICAgY2xzLkJv
b2wgPSBjbHMuVmFsdWVUeXBlKCJib29sIiwgRmFsc2UpCi0gICAgICAgIGlmIEVYQUNUTFlfSU5U
X1NVUFBPUlRFRDoKLSAgICAgICAgICAgIGNscy5JbnQgPSBjbHMuRXhhY3RseUludCgpCi0gICAg
ICAgIGVsc2U6Ci0gICAgICAgICAgICBjbHMuSW50ID0gY2xzLlZhbHVlVHlwZSgiaW50IiwgRmFs
c2UpCi0gICAgICAgIGNscy5OdW1iZXIgPSBjbHMuVmFsdWVUeXBlKCJkb3VibGUiLCBGYWxzZSkK
LSAgICAgICAgY2xzLlN0cmluZyA9IGNscy5WYWx1ZVR5cGUoIlN0cmluZyIsIFRydWUsKQotICAg
ICAgICBjbHMuT2JqZWN0ID0gY2xzLlJlZlB0ckJhc2VkKCJJbnNwZWN0b3I6Okluc3BlY3Rvck9i
amVjdCIpCi0gICAgICAgIGNscy5BcnJheSA9IGNscy5SZWZQdHJCYXNlZCgiSW5zcGVjdG9yOjpJ
bnNwZWN0b3JBcnJheSIpCi0gICAgICAgIGNscy5BbnkgPSBjbHMuUmVmUHRyQmFzZWQoIkluc3Bl
Y3Rvcjo6SW5zcGVjdG9yVmFsdWUiKQotCi1UeXBlTW9kZWwuaW5pdF9jbGFzcygpCi0KLQotIyBD
b2xsZWN0aW9uIG9mIEluc3BlY3Rvck9iamVjdCBjbGFzcyBtZXRob2RzIHRoYXQgYXJlIGxpa2Vs
eSB0byBiZSBvdmVybG9hZGVkIGluIGdlbmVyYXRlZCBjbGFzcy4KLSMgV2UgbXVzdCBleHBsaWNp
dGx5IGltcG9ydCBhbGwgb3ZlcmxvYWRlZCBtZXRob2RzIG9yIHRoZXkgd29uJ3QgYmUgYXZhaWxh
YmxlIHRvIHVzZXIuCi1JTlNQRUNUT1JfT0JKRUNUX1NFVFRFUl9OQU1FUyA9IGZyb3plbnNldChb
InNldFZhbHVlIiwgInNldEJvb2xlYW4iLCAic2V0TnVtYmVyIiwgInNldFN0cmluZyIsICJzZXRW
YWx1ZSIsICJzZXRPYmplY3QiLCAic2V0QXJyYXkiXSkKLQotCi1kZWYgZml4X3R5cGVfbmFtZShq
c29uX25hbWUpOgotICAgIGlmIGpzb25fbmFtZSBpbiBUWVBFX05BTUVfRklYX01BUDoKLSAgICAg
ICAgZml4ZWQgPSBUWVBFX05BTUVfRklYX01BUFtqc29uX25hbWVdCi0KLSAgICAgICAgY2xhc3Mg
UmVzdWx0KG9iamVjdCk6Ci0gICAgICAgICAgICBjbGFzc19uYW1lID0gZml4ZWQKLQotICAgICAg
ICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgZGVmIG91dHB1dF9jb21tZW50KHdyaXRl
cik6Ci0gICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIi8vIFR5cGUgb3JpZ2luYWxseSB3
YXMgbmFtZWQgJyVzJy5cbiIgJSBqc29uX25hbWUpCi0gICAgZWxzZToKLQotICAgICAgICBjbGFz
cyBSZXN1bHQob2JqZWN0KToKLSAgICAgICAgICAgIGNsYXNzX25hbWUgPSBqc29uX25hbWUKLQot
ICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgZGVmIG91dHB1dF9jb21tZW50
KHdyaXRlcik6Ci0gICAgICAgICAgICAgICAgcGFzcwotCi0gICAgcmV0dXJuIFJlc3VsdAotCi0K
LWNsYXNzIFdyaXRlcjoKLSAgICBkZWYgX19pbml0X18oc2VsZiwgb3V0cHV0LCBpbmRlbnQpOgot
ICAgICAgICBzZWxmLm91dHB1dCA9IG91dHB1dAotICAgICAgICBzZWxmLmluZGVudCA9IGluZGVu
dAotCi0gICAgZGVmIG5ld2xpbmUoc2VsZiwgc3RyKToKLSAgICAgICAgaWYgKHNlbGYuaW5kZW50
KToKLSAgICAgICAgICAgIHNlbGYub3V0cHV0LmFwcGVuZChzZWxmLmluZGVudCkKLSAgICAgICAg
c2VsZi5vdXRwdXQuYXBwZW5kKHN0cikKLQotICAgIGRlZiBhcHBlbmQoc2VsZiwgc3RyKToKLSAg
ICAgICAgc2VsZi5vdXRwdXQuYXBwZW5kKHN0cikKLQotICAgIGRlZiBuZXdsaW5lX211bHRpbGlu
ZShzZWxmLCBzdHIpOgotICAgICAgICBwYXJ0cyA9IHN0ci5zcGxpdCgnXG4nKQotICAgICAgICBz
ZWxmLm5ld2xpbmUocGFydHNbMF0pCi0gICAgICAgIGZvciBwIGluIHBhcnRzWzE6XToKLSAgICAg
ICAgICAgIHNlbGYub3V0cHV0LmFwcGVuZCgnXG4nKQotICAgICAgICAgICAgaWYgcDoKLSAgICAg
ICAgICAgICAgICBzZWxmLm5ld2xpbmUocCkKLQotICAgIGRlZiBhcHBlbmRfbXVsdGlsaW5lKHNl
bGYsIHN0cik6Ci0gICAgICAgIHBhcnRzID0gc3RyLnNwbGl0KCdcbicpCi0gICAgICAgIHNlbGYu
YXBwZW5kKHBhcnRzWzBdKQotICAgICAgICBmb3IgcCBpbiBwYXJ0c1sxOl06Ci0gICAgICAgICAg
ICBzZWxmLm91dHB1dC5hcHBlbmQoJ1xuJykKLSAgICAgICAgICAgIGlmIHA6Ci0gICAgICAgICAg
ICAgICAgc2VsZi5uZXdsaW5lKHApCi0KLSAgICBkZWYgZ2V0X2luZGVudChzZWxmKToKLSAgICAg
ICAgcmV0dXJuIHNlbGYuaW5kZW50Ci0KLSAgICBkZWYgZ2V0X2luZGVudGVkKHNlbGYsIGFkZGl0
aW9uYWxfaW5kZW50KToKLSAgICAgICAgcmV0dXJuIFdyaXRlcihzZWxmLm91dHB1dCwgc2VsZi5p
bmRlbnQgKyBhZGRpdGlvbmFsX2luZGVudCkKLQotICAgIGRlZiBpbnNlcnRfd3JpdGVyKHNlbGYs
IGFkZGl0aW9uYWxfaW5kZW50KToKLSAgICAgICAgbmV3X291dHB1dCA9IFtdCi0gICAgICAgIHNl
bGYub3V0cHV0LmFwcGVuZChuZXdfb3V0cHV0KQotICAgICAgICByZXR1cm4gV3JpdGVyKG5ld19v
dXRwdXQsIHNlbGYuaW5kZW50ICsgYWRkaXRpb25hbF9pbmRlbnQpCi0KLQotY2xhc3MgRW51bUNv
bnN0YW50czoKLSAgICBtYXBfID0ge30KLSAgICBjb25zdGFudHNfID0gW10KLQotICAgIEBjbGFz
c21ldGhvZAotICAgIGRlZiBhZGRfY29uc3RhbnQoY2xzLCB2YWx1ZSk6Ci0gICAgICAgIGlmIHZh
bHVlIGluIGNscy5tYXBfOgotICAgICAgICAgICAgcmV0dXJuIGNscy5tYXBfW3ZhbHVlXQotICAg
ICAgICBlbHNlOgotICAgICAgICAgICAgcG9zID0gbGVuKGNscy5tYXBfKQotICAgICAgICAgICAg
Y2xzLm1hcF9bdmFsdWVdID0gcG9zCi0gICAgICAgICAgICBjbHMuY29uc3RhbnRzXy5hcHBlbmQo
dmFsdWUpCi0gICAgICAgICAgICByZXR1cm4gcG9zCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBk
ZWYgZ2V0X2VudW1fY29uc3RhbnRfY29kZShjbHMpOgotICAgICAgICBvdXRwdXQgPSBbXQotICAg
ICAgICBmb3IgaXRlbSBpbiBjbHMuY29uc3RhbnRzXzoKLSAgICAgICAgICAgIG91dHB1dC5hcHBl
bmQoIiAgICBcIiIgKyBpdGVtICsgIlwiIikKLSAgICAgICAgcmV0dXJuICIsXG4iLmpvaW4ob3V0
cHV0KSArICJcbiIKLQotCi0jIFR5cGVidWlsZGVyIGNvZGUgaXMgZ2VuZXJhdGVkIGluIHNldmVy
YWwgcGFzc2VzOiBmaXJzdCB0eXBlZGVmcywgdGhlbiBvdGhlciBjbGFzc2VzLgotIyBNYW51YWwg
cGFzcyBtYW5hZ2VtZW50IGlzIG5lZWRlZCBiZWNhdXNlIHdlIGNhbm5vdCBoYXZlIGZvcndhcmQg
ZGVjbGFyYXRpb25zIGZvciB0eXBlZGVmcy4KLWNsYXNzIFR5cGVCdWlsZGVyUGFzczoKLSAgICBU
WVBFREVGID0gInR5cGVkZWYiCi0gICAgTUFJTiA9ICJtYWluIgotCi0KLWNsYXNzIFR5cGVCaW5k
aW5nczoKLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIGNyZWF0ZV9uYW1lZF90eXBlX2RlY2xh
cmF0aW9uKGpzb25fdHlwYWJsZSwgY29udGV4dF9kb21haW5fbmFtZSwgdHlwZV9kYXRhKToKLSAg
ICAgICAganNvbl90eXBlID0gdHlwZV9kYXRhLmdldF9qc29uX3R5cGUoKQotCi0gICAgICAgIGNs
YXNzIEhlbHBlcjoKLSAgICAgICAgICAgIGlzX2FkX2hvYyA9IEZhbHNlCi0gICAgICAgICAgICBm
dWxsX25hbWVfcHJlZml4X2Zvcl91c2UgPSAiSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6IiArIGNv
bnRleHRfZG9tYWluX25hbWUgKyAiOjoiCi0gICAgICAgICAgICBmdWxsX25hbWVfcHJlZml4X2Zv
cl9pbXBsID0gIkluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OiIgKyBjb250ZXh0X2RvbWFpbl9uYW1l
ICsgIjo6IgotCi0gICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICBkZWYgd3Jp
dGVfZG9jKHdyaXRlcik6Ci0gICAgICAgICAgICAgICAgaWYgImRlc2NyaXB0aW9uIiBpbiBqc29u
X3R5cGU6Ci0gICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCIvKiAiKQotICAgICAg
ICAgICAgICAgICAgICB3cml0ZXIuYXBwZW5kKGpzb25fdHlwZVsiZGVzY3JpcHRpb24iXSkKLSAg
ICAgICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVuZCgiICovXG4iKQotCi0gICAgICAgICAgICBA
c3RhdGljbWV0aG9kCi0gICAgICAgICAgICBkZWYgYWRkX3RvX2ZvcndhcmRfbGlzdGVuZXIoZm9y
d2FyZF9saXN0ZW5lcik6Ci0gICAgICAgICAgICAgICAgZm9yd2FyZF9saXN0ZW5lci5hZGRfdHlw
ZV9kYXRhKHR5cGVfZGF0YSkKLQotCi0gICAgICAgIGZpeGVkX3R5cGVfbmFtZSA9IGZpeF90eXBl
X25hbWUoanNvbl90eXBlWyJpZCJdKQotICAgICAgICByZXR1cm4gVHlwZUJpbmRpbmdzLmNyZWF0
ZV90eXBlX2RlY2xhcmF0aW9uXyhqc29uX3R5cGFibGUsIGNvbnRleHRfZG9tYWluX25hbWUsIGZp
eGVkX3R5cGVfbmFtZSwgSGVscGVyKQotCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBjcmVh
dGVfYWRfaG9jX3R5cGVfZGVjbGFyYXRpb24oanNvbl90eXBhYmxlLCBjb250ZXh0X2RvbWFpbl9u
YW1lLCBhZF9ob2NfdHlwZV9jb250ZXh0KToKLSAgICAgICAgY2xhc3MgSGVscGVyOgotICAgICAg
ICAgICAgaXNfYWRfaG9jID0gVHJ1ZQotICAgICAgICAgICAgZnVsbF9uYW1lX3ByZWZpeF9mb3Jf
dXNlID0gYWRfaG9jX3R5cGVfY29udGV4dC5jb250YWluZXJfcmVsYXRpdmVfbmFtZV9wcmVmaXgK
LSAgICAgICAgICAgIGZ1bGxfbmFtZV9wcmVmaXhfZm9yX2ltcGwgPSBhZF9ob2NfdHlwZV9jb250
ZXh0LmNvbnRhaW5lcl9mdWxsX25hbWVfcHJlZml4Ci0KLSAgICAgICAgICAgIEBzdGF0aWNtZXRo
b2QKLSAgICAgICAgICAgIGRlZiB3cml0ZV9kb2Mod3JpdGVyKToKLSAgICAgICAgICAgICAgICBw
YXNzCi0KLSAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgIGRlZiBhZGRfdG9f
Zm9yd2FyZF9saXN0ZW5lcihmb3J3YXJkX2xpc3RlbmVyKToKLSAgICAgICAgICAgICAgICBwYXNz
Ci0gICAgICAgIGZpeGVkX3R5cGVfbmFtZSA9IGFkX2hvY190eXBlX2NvbnRleHQuZ2V0X3R5cGVf
bmFtZV9maXgoKQotICAgICAgICByZXR1cm4gVHlwZUJpbmRpbmdzLmNyZWF0ZV90eXBlX2RlY2xh
cmF0aW9uXyhqc29uX3R5cGFibGUsIGNvbnRleHRfZG9tYWluX25hbWUsIGZpeGVkX3R5cGVfbmFt
ZSwgSGVscGVyKQotCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBjcmVhdGVfdHlwZV9kZWNs
YXJhdGlvbl8oanNvbl90eXBhYmxlLCBjb250ZXh0X2RvbWFpbl9uYW1lLCBmaXhlZF90eXBlX25h
bWUsIGhlbHBlcik6Ci0gICAgICAgIGlmIGpzb25fdHlwYWJsZVsidHlwZSJdID09ICJzdHJpbmci
OgotICAgICAgICAgICAgaWYgImVudW0iIGluIGpzb25fdHlwYWJsZToKLQotICAgICAgICAgICAg
ICAgIGNsYXNzIEVudW1CaW5kaW5nOgotICAgICAgICAgICAgICAgICAgICBuZWVkX3VzZXJfcnVu
dGltZV9jYXN0XyA9IEZhbHNlCi0gICAgICAgICAgICAgICAgICAgIG5lZWRfaW50ZXJuYWxfcnVu
dGltZV9jYXN0XyA9IEZhbHNlCi0KLSAgICAgICAgICAgICAgICAgICAgQGNsYXNzbWV0aG9kCi0g
ICAgICAgICAgICAgICAgICAgIGRlZiByZXNvbHZlX2lubmVyKGNscywgcmVzb2x2ZV9jb250ZXh0
KToKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKLQotICAgICAgICAgICAgICAgICAgICBA
Y2xhc3NtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgZGVmIHJlcXVlc3RfdXNlcl9ydW50aW1l
X2Nhc3QoY2xzLCByZXF1ZXN0KToKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIHJlcXVlc3Q6
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xzLm5lZWRfdXNlcl9ydW50aW1lX2Nhc3Rf
ID0gVHJ1ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QuYWNrbm93bGVkZ2Uo
KQotCi0gICAgICAgICAgICAgICAgICAgIEBjbGFzc21ldGhvZAotICAgICAgICAgICAgICAgICAg
ICBkZWYgcmVxdWVzdF9pbnRlcm5hbF9ydW50aW1lX2Nhc3QoY2xzKToKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGNscy5uZWVkX2ludGVybmFsX3J1bnRpbWVfY2FzdF8gPSBUcnVlCi0KLSAgICAg
ICAgICAgICAgICAgICAgQGNsYXNzbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgIGRlZiBnZXRf
Y29kZV9nZW5lcmF0b3IoZW51bV9iaW5kaW5nX2Nscyk6Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAjRklYTUU6IGdlbmVyYXRlIGFkLWhvYyBlbnVtcyB0b28gb25jZSB3ZSBmaWd1cmUgb3V0IGhv
dyB0byBiZXR0ZXIgaW1wbGVtZW50IHRoZW0gaW4gQysrLgotICAgICAgICAgICAgICAgICAgICAg
ICAgY29tbWVudF9vdXQgPSBoZWxwZXIuaXNfYWRfaG9jCi0KLSAgICAgICAgICAgICAgICAgICAg
ICAgIGNsYXNzIENvZGVHZW5lcmF0b3I6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQHN0
YXRpY21ldGhvZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBnZW5lcmF0ZV90eXBl
X2J1aWxkZXIod3JpdGVyLCBnZW5lcmF0ZV9jb250ZXh0KToKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZW51bSA9IGpzb25fdHlwYWJsZVsiZW51bSJdCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGhlbHBlci53cml0ZV9kb2Mod3JpdGVyKQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBlbnVtX25hbWUgPSBmaXhlZF90eXBlX25hbWUuY2xhc3NfbmFtZQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXhlZF90eXBlX25hbWUub3V0cHV0X2Nv
bW1lbnQod3JpdGVyKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3
bGluZSgic3RydWN0ICIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5h
cHBlbmQoZW51bV9uYW1lKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIu
YXBwZW5kKCIge1xuIikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5l
d2xpbmUoIiAgICBlbnVtIEVudW0ge1xuIikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZm9yIGVudW1faXRlbSBpbiBlbnVtOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZW51bV9wb3MgPSBFbnVtQ29uc3RhbnRzLmFkZF9jb25zdGFudChlbnVtX2l0ZW0pCi0K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1fY19uYW1lID0gZml4X2Nh
bWVsX2Nhc2UoZW51bV9pdGVtKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgaXRlbV9jX25hbWUgaW4gVFlQRV9OQU1FX0ZJWF9NQVA6Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaXRlbV9jX25hbWUgPSBUWVBFX05BTUVfRklYX01BUFtpdGVt
X2NfbmFtZV0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXds
aW5lKCIgICAgICAgICIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0
ZXIuYXBwZW5kKGl0ZW1fY19uYW1lKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgd3JpdGVyLmFwcGVuZCgiID0gIikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHdyaXRlci5hcHBlbmQoIiVzIiAlIGVudW1fcG9zKQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVuZCgiLFxuIikKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIiAgICB9O1xuIikKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgZW51bV9iaW5kaW5nX2Nscy5uZWVkX3VzZXJfcnVudGltZV9jYXN0
XzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigi
Tm90IHlldCBpbXBsZW1lbnRlZCIpCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgZW51bV9iaW5kaW5nX2Nscy5uZWVkX2ludGVybmFsX3J1bnRpbWVfY2FzdF86Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuYXBwZW5kKCIjaWYgJXNcbiIgJSBW
QUxJREFUT1JfSUZERUZfTkFNRSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHdyaXRlci5uZXdsaW5lKCIgICAgc3RhdGljIHZvaWQgYXNzZXJ0Q29ycmVjdFZhbHVlKEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yVmFsdWUqIHZhbHVlKTtcbiIpCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB3cml0ZXIuYXBwZW5kKCIjZW5kaWYgIC8vICVzXG4iICUgVkFMSURBVE9S
X0lGREVGX05BTUUpCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlk
YXRvcl93cml0ZXIgPSBnZW5lcmF0ZV9jb250ZXh0LnZhbGlkYXRvcl93cml0ZXIKLQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9tYWluX2ZpeGVzID0gRG9tYWluTmFtZUZp
eGVzLmdldF9maXhlZF9kYXRhKGNvbnRleHRfZG9tYWluX25hbWUpCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBkb21haW5fZ3VhcmQgPSBkb21haW5fZml4ZXMuZ2V0X2d1YXJk
KCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGRvbWFpbl9ndWFyZDoK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb21haW5fZ3VhcmQuZ2Vu
ZXJhdGVfb3Blbih2YWxpZGF0b3Jfd3JpdGVyKQotCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoInZvaWQgJXMlczo6YXNzZXJ0Q29y
cmVjdFZhbHVlKEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUqIHZhbHVlKVxuIiAlIChoZWxwZXIu
ZnVsbF9uYW1lX3ByZWZpeF9mb3JfaW1wbCwgZW51bV9uYW1lKSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgie1xuIikKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgi
ICAgIFdURjo6U3RyaW5nIHM7XG4iKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCIgICAgYm9vbCBjYXN0X3JlcyA9IHZhbHVlLT5h
c1N0cmluZygmcyk7XG4iKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFs
aWRhdG9yX3dyaXRlci5uZXdsaW5lKCIgICAgQVNTRVJUKGNhc3RfcmVzKTtcbiIpCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBsZW4oZW51bSkgPiAwOgotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvbl9saXN0ID0gW10KLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgZW51bV9pdGVtIGluIGVudW06
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW1fcG9zID0g
RW51bUNvbnN0YW50cy5hZGRfY29uc3RhbnQoZW51bV9pdGVtKQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25kaXRpb25fbGlzdC5hcHBlbmQoInMgPT0gXCIl
c1wiIiAlIGVudW1faXRlbSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIiAgICBBU1NFUlQoJXMpO1xuIiAlICIgfHwgIi5q
b2luKGNvbmRpdGlvbl9saXN0KSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgifVxuIikKLQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgZG9tYWluX2d1YXJkOgotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGRvbWFpbl9ndWFyZC5nZW5lcmF0ZV9jbG9zZSh2YWxpZGF0b3Jfd3Jp
dGVyKQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3Jp
dGVyLm5ld2xpbmUoIlxuXG4iKQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdy
aXRlci5uZXdsaW5lKCJ9OyAvLyBzdHJ1Y3QgIikKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgd3JpdGVyLmFwcGVuZChlbnVtX25hbWUpCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHdyaXRlci5hcHBlbmQoIlxuIikKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWYgcmVnaXN0ZXJf
dXNlKGZvcndhcmRfbGlzdGVuZXIpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
YXNzCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZGVmIGdldF9nZW5lcmF0ZV9wYXNzX2lkKCk6Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBUeXBlQnVpbGRlclBhc3MuTUFJTgotCi0g
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ29kZUdlbmVyYXRvcgotCi0gICAgICAgICAg
ICAgICAgICAgIEBjbGFzc21ldGhvZAotICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X3ZhbGlk
YXRvcl9jYWxsX3RleHQoY2xzKToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBoZWxw
ZXIuZnVsbF9uYW1lX3ByZWZpeF9mb3JfdXNlICsgZml4ZWRfdHlwZV9uYW1lLmNsYXNzX25hbWUg
KyAiOjphc3NlcnRDb3JyZWN0VmFsdWUiCi0KLSAgICAgICAgICAgICAgICAgICAgQGNsYXNzbWV0
aG9kCi0gICAgICAgICAgICAgICAgICAgIGRlZiBnZXRfYXJyYXlfaXRlbV9jX3R5cGVfdGV4dChj
bHMpOgotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhlbHBlci5mdWxsX25hbWVfcHJl
Zml4X2Zvcl91c2UgKyBmaXhlZF90eXBlX25hbWUuY2xhc3NfbmFtZSArICI6OkVudW0iCi0KLSAg
ICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgICAgICAgICBkZWYg
Z2V0X3NldHRlcl92YWx1ZV9leHByZXNzaW9uX3BhdHRlcm4oKToKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiAiSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Z2V0JXNFbnVtQ29uc3RhbnRW
YWx1ZSglcykiCi0KLSAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAg
ICAgICAgICAgICBkZWYgcmVkdWNlX3RvX3Jhd190eXBlKCk6Ci0gICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gUmF3VHlwZXMuU3RyaW5nCi0KLSAgICAgICAgICAgICAgICAgICAgQHN0YXRp
Y21ldGhvZAotICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X3R5cGVfbW9kZWwoKToKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBUeXBlTW9kZWwuRW51bShoZWxwZXIuZnVsbF9uYW1l
X3ByZWZpeF9mb3JfdXNlICsgZml4ZWRfdHlwZV9uYW1lLmNsYXNzX25hbWUpCi0KLSAgICAgICAg
ICAgICAgICByZXR1cm4gRW51bUJpbmRpbmcKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAg
ICAgICAgaWYgaGVscGVyLmlzX2FkX2hvYzoKLQotICAgICAgICAgICAgICAgICAgICBjbGFzcyBQ
bGFpblN0cmluZzoKLSAgICAgICAgICAgICAgICAgICAgICAgIEBjbGFzc21ldGhvZAotICAgICAg
ICAgICAgICAgICAgICAgICAgZGVmIHJlc29sdmVfaW5uZXIoY2xzLCByZXNvbHZlX2NvbnRleHQp
OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKLQotICAgICAgICAgICAgICAgICAg
ICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgICAgICAgICAgICAgZGVmIHJlcXVlc3Rf
dXNlcl9ydW50aW1lX2Nhc3QocmVxdWVzdCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmFpc2UgRXhjZXB0aW9uKCJVbnN1cHBvcnRlZCIpCi0KLSAgICAgICAgICAgICAgICAgICAgICAg
IEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlZiByZXF1ZXN0X2ludGVy
bmFsX3J1bnRpbWVfY2FzdCgpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKLQot
ICAgICAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgICAgICAg
ICAgICAgZGVmIGdldF9jb2RlX2dlbmVyYXRvcigpOgotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBOb25lCi0KLSAgICAgICAgICAgICAgICAgICAgICAgIEBjbGFzc21ldGhvZAot
ICAgICAgICAgICAgICAgICAgICAgICAgZGVmIGdldF92YWxpZGF0b3JfY2FsbF90ZXh0KGNscyk6
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJhd1R5cGVzLlN0cmluZy5nZXRf
cmF3X3ZhbGlkYXRvcl9jYWxsX3RleHQoKQotCi0gICAgICAgICAgICAgICAgICAgICAgICBAc3Rh
dGljbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWYgcmVkdWNlX3RvX3Jhd190eXBl
KCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJhd1R5cGVzLlN0cmluZwot
Ci0gICAgICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICAgICAg
ICAgICAgICBkZWYgZ2V0X3R5cGVfbW9kZWwoKToKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gVHlwZU1vZGVsLlN0cmluZwotCi0gICAgICAgICAgICAgICAgICAgICAgICBAc3Rh
dGljbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X3NldHRlcl92YWx1ZV9l
eHByZXNzaW9uX3BhdHRlcm4oKToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
Tm9uZQotCi0gICAgICAgICAgICAgICAgICAgICAgICBAY2xhc3NtZXRob2QKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGRlZiBnZXRfYXJyYXlfaXRlbV9jX3R5cGVfdGV4dChjbHMpOgotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjbHMucmVkdWNlX3RvX3Jhd190eXBlKCkuZ2V0
X2FycmF5X2l0ZW1fcmF3X2NfdHlwZV90ZXh0KCkKLQotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gUGxhaW5TdHJpbmcKLQotICAgICAgICAgICAgICAgIGVsc2U6Ci0KLSAgICAgICAgICAgICAg
ICAgICAgY2xhc3MgVHlwZWRlZlN0cmluZzoKLSAgICAgICAgICAgICAgICAgICAgICAgIEBjbGFz
c21ldGhvZAotICAgICAgICAgICAgICAgICAgICAgICAgZGVmIHJlc29sdmVfaW5uZXIoY2xzLCBy
ZXNvbHZlX2NvbnRleHQpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKLQotICAg
ICAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgICAgICAgICAg
ICAgZGVmIHJlcXVlc3RfdXNlcl9ydW50aW1lX2Nhc3QocmVxdWVzdCk6Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJVbnN1cHBvcnRlZCIpCi0KLSAgICAgICAg
ICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgICAgIGRl
ZiByZXF1ZXN0X2ludGVybmFsX3J1bnRpbWVfY2FzdCgpOgotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFJhd1R5cGVzLlN0cmluZy5yZXF1ZXN0X3Jhd19pbnRlcm5hbF9ydW50aW1lX2Nhc3Qo
KQotCi0gICAgICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICAg
ICAgICAgICAgICBkZWYgZ2V0X2NvZGVfZ2VuZXJhdG9yKCk6Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY2xhc3MgQ29kZUdlbmVyYXRvcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWYg
Z2VuZXJhdGVfdHlwZV9idWlsZGVyKHdyaXRlciwgZ2VuZXJhdGVfY29udGV4dCk6Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwZXIud3JpdGVfZG9jKHdyaXRlcikKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpeGVkX3R5cGVfbmFtZS5vdXRwdXRf
Y29tbWVudCh3cml0ZXIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0
ZXIubmV3bGluZSgidHlwZWRlZiBTdHJpbmcgIikKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHdyaXRlci5hcHBlbmQoZml4ZWRfdHlwZV9uYW1lLmNsYXNzX25hbWUpCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuYXBwZW5kKCI7XG5cbiIpCi0K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkZWYgcmVnaXN0ZXJfdXNlKGZvcndhcmRfbGlzdGVuZXIp
OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzcwotCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZGVmIGdldF9nZW5lcmF0ZV9wYXNzX2lkKCk6Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHlwZUJ1aWxkZXJQYXNzLlRZUEVERUYKLQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBDb2RlR2VuZXJhdG9yCi0KLSAgICAgICAg
ICAgICAgICAgICAgICAgIEBjbGFzc21ldGhvZAotICAgICAgICAgICAgICAgICAgICAgICAgZGVm
IGdldF92YWxpZGF0b3JfY2FsbF90ZXh0KGNscyk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIFJhd1R5cGVzLlN0cmluZy5nZXRfcmF3X3ZhbGlkYXRvcl9jYWxsX3RleHQoKQot
Ci0gICAgICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICAgICAg
ICAgICAgICBkZWYgcmVkdWNlX3RvX3Jhd190eXBlKCk6Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIFJhd1R5cGVzLlN0cmluZwotCi0gICAgICAgICAgICAgICAgICAgICAgICBA
c3RhdGljbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X3R5cGVfbW9kZWwo
KToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHlwZU1vZGVsLlZhbHVlVHlw
ZSgiJXMlcyIgJSAoaGVscGVyLmZ1bGxfbmFtZV9wcmVmaXhfZm9yX3VzZSwgZml4ZWRfdHlwZV9u
YW1lLmNsYXNzX25hbWUpLCBUcnVlKQotCi0gICAgICAgICAgICAgICAgICAgICAgICBAc3RhdGlj
bWV0aG9kCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X3NldHRlcl92YWx1ZV9leHBy
ZXNzaW9uX3BhdHRlcm4oKToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9u
ZQotCi0gICAgICAgICAgICAgICAgICAgICAgICBAY2xhc3NtZXRob2QKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGRlZiBnZXRfYXJyYXlfaXRlbV9jX3R5cGVfdGV4dChjbHMpOgotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiAiY29uc3QgJXMlcyYiICUgKGhlbHBlci5mdWxsX25h
bWVfcHJlZml4X2Zvcl91c2UsIGZpeGVkX3R5cGVfbmFtZS5jbGFzc19uYW1lKQotCi0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBUeXBlZGVmU3RyaW5nCi0KLSAgICAgICAgZWxpZiBqc29uX3R5
cGFibGVbInR5cGUiXSA9PSAiaW50ZWdlciI6Ci0gICAgICAgICAgICAgICAgaWYgaGVscGVyLmlz
X2FkX2hvYzoKLQotICAgICAgICAgICAgICAgICAgICBjbGFzcyBQbGFpbkludGVnZXI6Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBAY2xhc3NtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgICAg
IGRlZiByZXNvbHZlX2lubmVyKGNscywgcmVzb2x2ZV9jb250ZXh0KToKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwYXNzCi0KLSAgICAgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRo
b2QKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlZiByZXF1ZXN0X3VzZXJfcnVudGltZV9jYXN0
KHJlcXVlc3QpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigi
VW5zdXBwb3J0ZWQiKQotCi0gICAgICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0g
ICAgICAgICAgICAgICAgICAgICAgICBkZWYgcmVxdWVzdF9pbnRlcm5hbF9ydW50aW1lX2Nhc3Qo
KToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCi0KLSAgICAgICAgICAgICAgICAg
ICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBnZXRfY29k
ZV9nZW5lcmF0b3IoKToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQot
Ci0gICAgICAgICAgICAgICAgICAgICAgICBAY2xhc3NtZXRob2QKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGRlZiBnZXRfdmFsaWRhdG9yX2NhbGxfdGV4dChjbHMpOgotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBSYXdUeXBlcy5JbnQuZ2V0X3Jhd192YWxpZGF0b3JfY2FsbF90
ZXh0KCkKLQotICAgICAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAg
ICAgICAgICAgICAgICAgZGVmIHJlZHVjZV90b19yYXdfdHlwZSgpOgotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBSYXdUeXBlcy5JbnQKLQotICAgICAgICAgICAgICAgICAgICAg
ICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgICAgICAgICAgICAgZGVmIGdldF90eXBlX21v
ZGVsKCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFR5cGVNb2RlbC5JbnQK
LQotICAgICAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgICAg
ICAgICAgICAgZGVmIGdldF9zZXR0ZXJfdmFsdWVfZXhwcmVzc2lvbl9wYXR0ZXJuKCk6Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKLQotICAgICAgICAgICAgICAgICAg
ICAgICAgQGNsYXNzbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X2FycmF5
X2l0ZW1fY190eXBlX3RleHQoY2xzKToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gY2xzLnJlZHVjZV90b19yYXdfdHlwZSgpLmdldF9hcnJheV9pdGVtX3Jhd19jX3R5cGVfdGV4
dCgpCi0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFBsYWluSW50ZWdlcgotCi0gICAgICAg
ICAgICAgICAgZWxzZToKLQotICAgICAgICAgICAgICAgICAgICBjbGFzcyBUeXBlZGVmSW50ZWdl
cjoKLSAgICAgICAgICAgICAgICAgICAgICAgIEBjbGFzc21ldGhvZAotICAgICAgICAgICAgICAg
ICAgICAgICAgZGVmIHJlc29sdmVfaW5uZXIoY2xzLCByZXNvbHZlX2NvbnRleHQpOgotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHBhc3MKLQotICAgICAgICAgICAgICAgICAgICAgICAgQHN0
YXRpY21ldGhvZAotICAgICAgICAgICAgICAgICAgICAgICAgZGVmIHJlcXVlc3RfdXNlcl9ydW50
aW1lX2Nhc3QocmVxdWVzdCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgRXhj
ZXB0aW9uKCJVbnN1cHBvcnRlZCIpCi0KLSAgICAgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNt
ZXRob2QKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlZiByZXF1ZXN0X2ludGVybmFsX3J1bnRp
bWVfY2FzdCgpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJhd1R5cGVzLkludC5yZXF1
ZXN0X3Jhd19pbnRlcm5hbF9ydW50aW1lX2Nhc3QoKQotCi0gICAgICAgICAgICAgICAgICAgICAg
ICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X2NvZGVfZ2Vu
ZXJhdG9yKCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3MgQ29kZUdlbmVyYXRv
cjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBkZWYgZ2VuZXJhdGVfdHlwZV9idWlsZGVyKHdyaXRl
ciwgZ2VuZXJhdGVfY29udGV4dCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBoZWxwZXIud3JpdGVfZG9jKHdyaXRlcikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZpeGVkX3R5cGVfbmFtZS5vdXRwdXRfY29tbWVudCh3cml0ZXIpCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3bGluZSgidHlwZWRlZiBpbnQgIikK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5hcHBlbmQoZml4ZWRf
dHlwZV9uYW1lLmNsYXNzX25hbWUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB3cml0ZXIuYXBwZW5kKCI7XG5cbiIpCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWYgcmVn
aXN0ZXJfdXNlKGZvcndhcmRfbGlzdGVuZXIpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcGFzcwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNt
ZXRob2QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmIGdldF9nZW5lcmF0ZV9w
YXNzX2lkKCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHlw
ZUJ1aWxkZXJQYXNzLlRZUEVERUYKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBDb2RlR2VuZXJhdG9yCi0KLSAgICAgICAgICAgICAgICAgICAgICAgIEBjbGFzc21ldGhvZAot
ICAgICAgICAgICAgICAgICAgICAgICAgZGVmIGdldF92YWxpZGF0b3JfY2FsbF90ZXh0KGNscyk6
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJhd1R5cGVzLkludC5nZXRfcmF3
X3ZhbGlkYXRvcl9jYWxsX3RleHQoKQotCi0gICAgICAgICAgICAgICAgICAgICAgICBAc3RhdGlj
bWV0aG9kCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWYgcmVkdWNlX3RvX3Jhd190eXBlKCk6
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJhd1R5cGVzLkludAotCi0gICAg
ICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgICAg
ICBkZWYgZ2V0X3R5cGVfbW9kZWwoKToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gVHlwZU1vZGVsLkludAotCi0gICAgICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9k
Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X3NldHRlcl92YWx1ZV9leHByZXNzaW9u
X3BhdHRlcm4oKToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQotCi0g
ICAgICAgICAgICAgICAgICAgICAgICBAY2xhc3NtZXRob2QKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGRlZiBnZXRfYXJyYXlfaXRlbV9jX3R5cGVfdGV4dChjbHMpOgotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBoZWxwZXIuZnVsbF9uYW1lX3ByZWZpeF9mb3JfdXNlICsgZml4
ZWRfdHlwZV9uYW1lLmNsYXNzX25hbWUKLQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHlw
ZWRlZkludGVnZXIKLQotICAgICAgICBlbGlmIGpzb25fdHlwYWJsZVsidHlwZSJdID09ICJvYmpl
Y3QiOgotICAgICAgICAgICAgaWYgInByb3BlcnRpZXMiIGluIGpzb25fdHlwYWJsZToKLQotICAg
ICAgICAgICAgICAgIGNsYXNzIENsYXNzQmluZGluZzoKLSAgICAgICAgICAgICAgICAgICAgcmVz
b2x2ZV9kYXRhXyA9IE5vbmUKLSAgICAgICAgICAgICAgICAgICAgbmVlZF91c2VyX3J1bnRpbWVf
Y2FzdF8gPSBGYWxzZQotICAgICAgICAgICAgICAgICAgICBuZWVkX2ludGVybmFsX3J1bnRpbWVf
Y2FzdF8gPSBGYWxzZQotCi0gICAgICAgICAgICAgICAgICAgIEBjbGFzc21ldGhvZAotICAgICAg
ICAgICAgICAgICAgICBkZWYgcmVzb2x2ZV9pbm5lcihjbHMsIHJlc29sdmVfY29udGV4dCk6Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBpZiBjbHMucmVzb2x2ZV9kYXRhXzoKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4KLQotICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVy
dGllcyA9IGpzb25fdHlwYWJsZVsicHJvcGVydGllcyJdCi0gICAgICAgICAgICAgICAgICAgICAg
ICBtYWluID0gW10KLSAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbmFsID0gW10KLQotICAg
ICAgICAgICAgICAgICAgICAgICAgYWRfaG9jX3R5cGVfbGlzdCA9IFtdCi0KLSAgICAgICAgICAg
ICAgICAgICAgICAgIGZvciBwcm9wIGluIHByb3BlcnRpZXM6Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcHJvcF9uYW1lID0gcHJvcFsibmFtZSJdCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYWRfaG9jX3R5cGVfY29udGV4dCA9IGNscy5BZEhvY1R5cGVDb250ZXh0SW1wbChwcm9w
X25hbWUsIGZpeGVkX3R5cGVfbmFtZS5jbGFzc19uYW1lLCByZXNvbHZlX2NvbnRleHQsIGFkX2hv
Y190eXBlX2xpc3QsIGhlbHBlci5mdWxsX25hbWVfcHJlZml4X2Zvcl9pbXBsKQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJpbmRpbmcgPSByZXNvbHZlX3BhcmFtX3R5cGUocHJvcCwgY29u
dGV4dF9kb21haW5fbmFtZSwgYWRfaG9jX3R5cGVfY29udGV4dCkKLQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvZGVfZ2VuZXJhdG9yID0gYmluZGluZy5nZXRfY29kZV9nZW5lcmF0b3Io
KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGNvZGVfZ2VuZXJhdG9yOgotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlX2dlbmVyYXRvci5yZWdpc3Rlcl91c2UocmVz
b2x2ZV9jb250ZXh0LmZvcndhcmRfbGlzdGVuZXIpCi0KLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjbGFzcyBQcm9wZXJ0eURhdGE6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHBhcmFtX3R5cGVfYmluZGluZyA9IGJpbmRpbmcKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcCA9IHByb3AKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHByb3AuZ2V0
KCJvcHRpb25hbCIpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25hbC5h
cHBlbmQoUHJvcGVydHlEYXRhKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1haW4uYXBwZW5kKFByb3BlcnR5RGF0YSkK
LQotICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3MgUmVzb2x2ZURhdGE6Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbWFpbl9wcm9wZXJ0aWVzID0gbWFpbgotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG9wdGlvbmFsX3Byb3BlcnRpZXMgPSBvcHRpb25hbAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGFkX2hvY190eXBlcyA9IGFkX2hvY190eXBlX2xpc3QKLQotICAgICAg
ICAgICAgICAgICAgICAgICAgY2xzLnJlc29sdmVfZGF0YV8gPSBSZXNvbHZlRGF0YQotCi0gICAg
ICAgICAgICAgICAgICAgICAgICBmb3IgYWRfaG9jIGluIGFkX2hvY190eXBlX2xpc3Q6Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYWRfaG9jLnJlc29sdmVfaW5uZXIocmVzb2x2ZV9jb250
ZXh0KQotCi0gICAgICAgICAgICAgICAgICAgIEBjbGFzc21ldGhvZAotICAgICAgICAgICAgICAg
ICAgICBkZWYgcmVxdWVzdF91c2VyX3J1bnRpbWVfY2FzdChjbHMsIHJlcXVlc3QpOgotICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgbm90IHJlcXVlc3Q6Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuCi0gICAgICAgICAgICAgICAgICAgICAgICBjbHMubmVlZF91c2VyX3J1bnRp
bWVfY2FzdF8gPSBUcnVlCi0gICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LmFja25vd2xl
ZGdlKCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNscy5yZXF1ZXN0X2ludGVybmFsX3J1bnRp
bWVfY2FzdCgpCi0KLSAgICAgICAgICAgICAgICAgICAgQGNsYXNzbWV0aG9kCi0gICAgICAgICAg
ICAgICAgICAgIGRlZiByZXF1ZXN0X2ludGVybmFsX3J1bnRpbWVfY2FzdChjbHMpOgotICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgY2xzLm5lZWRfaW50ZXJuYWxfcnVudGltZV9jYXN0XzoKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4KLSAgICAgICAgICAgICAgICAgICAgICAg
IGNscy5uZWVkX2ludGVybmFsX3J1bnRpbWVfY2FzdF8gPSBUcnVlCi0gICAgICAgICAgICAgICAg
ICAgICAgICBmb3IgcCBpbiBjbHMucmVzb2x2ZV9kYXRhXy5tYWluX3Byb3BlcnRpZXM6Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcC5wYXJhbV90eXBlX2JpbmRpbmcucmVxdWVzdF9pbnRl
cm5hbF9ydW50aW1lX2Nhc3QoKQotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHAgaW4gY2xz
LnJlc29sdmVfZGF0YV8ub3B0aW9uYWxfcHJvcGVydGllczoKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwLnBhcmFtX3R5cGVfYmluZGluZy5yZXF1ZXN0X2ludGVybmFsX3J1bnRpbWVfY2Fz
dCgpCi0KLSAgICAgICAgICAgICAgICAgICAgQGNsYXNzbWV0aG9kCi0gICAgICAgICAgICAgICAg
ICAgIGRlZiBnZXRfY29kZV9nZW5lcmF0b3IoY2xhc3NfYmluZGluZ19jbHMpOgotICAgICAgICAg
ICAgICAgICAgICAgICAgY2xhc3MgQ29kZUdlbmVyYXRvcjoKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBAY2xhc3NtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWYgZ2Vu
ZXJhdGVfdHlwZV9idWlsZGVyKGNscywgd3JpdGVyLCBnZW5lcmF0ZV9jb250ZXh0KToKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZV9kYXRhID0gY2xhc3NfYmluZGluZ19j
bHMucmVzb2x2ZV9kYXRhXwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwZXIu
d3JpdGVfZG9jKHdyaXRlcikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3Nf
bmFtZSA9IGZpeGVkX3R5cGVfbmFtZS5jbGFzc19uYW1lCi0KLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaXNfb3Blbl90eXBlID0gKGNvbnRleHRfZG9tYWluX25hbWUgKyAiLiIgKyBj
bGFzc19uYW1lKSBpbiBUWVBFU19XSVRIX09QRU5fRklFTERfTElTVF9TRVQKLQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmaXhlZF90eXBlX25hbWUub3V0cHV0X2NvbW1lbnQod3Jp
dGVyKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3bGluZSgiY2xh
c3MgIikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVuZChjbGFz
c19uYW1lKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuYXBwZW5kKCIg
OiBwdWJsaWMgIikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgaXNfb3Blbl90
eXBlOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVuZCgi
SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QiKQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLmFw
cGVuZCgiSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3RCYXNlIikKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVuZCgiIHtcbiIpCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCJwdWJsaWM6XG4iKQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBhZF9ob2NfdHlwZV93cml0ZXIgPSB3cml0ZXIuaW5zZXJ0X3dyaXRl
cigiICAgICIpCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGFkX2hvY190
eXBlIGluIHJlc29sdmVfZGF0YS5hZF9ob2NfdHlwZXM6Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb2RlX2dlbmVyYXRvciA9IGFkX2hvY190eXBlLmdldF9jb2RlX2dlbmVy
YXRvcigpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBjb2RlX2dlbmVy
YXRvcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlX2dlbmVy
YXRvci5nZW5lcmF0ZV90eXBlX2J1aWxkZXIoYWRfaG9jX3R5cGVfd3JpdGVyLCBnZW5lcmF0ZV9j
b250ZXh0KQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5l
X211bHRpbGluZSgKLSIiIiAgICBlbnVtIHsKLSAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAotIiIi
KQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX2VudW1faXRlbXMgPSBb
XQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBsZW4ocmVzb2x2ZV9kYXRhLm1h
aW5fcHJvcGVydGllcykgPiAwOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cG9zID0gMAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHByb3BfZGF0
YSBpbiByZXNvbHZlX2RhdGEubWFpbl9wcm9wZXJ0aWVzOgotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGl0ZW1fbmFtZSA9IENhcGl0YWxpemVyLmxvd2VyX2NhbWVsX2Nh
c2VfdG9fdXBwZXIocHJvcF9kYXRhLnBbIm5hbWUiXSkgKyAiU2V0IgotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX2VudW1faXRlbXMuYXBwZW5kKGl0ZW1fbmFt
ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3bGlu
ZSgiICAgICAgICAlcyA9IDEgPDwgJXMsXG4iICUgKGl0ZW1fbmFtZSwgcG9zKSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3MgKz0gMQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYWxsX2ZpZWxkc19zZXRfdmFsdWUgPSAiKCIgKyAoIiB8ICIu
am9pbihzdGF0ZV9lbnVtX2l0ZW1zKSkgKyAiKSIKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbF9maWVs
ZHNfc2V0X3ZhbHVlID0gIjAiCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3Jp
dGVyLm5ld2xpbmVfbXVsdGlsaW5lKENvZGVHZW5lcmF0b3JJbnNwZWN0b3JTdHJpbmdzLmNsYXNz
X2JpbmRpbmdfYnVpbGRlcl9wYXJ0XzEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICUgKGFsbF9maWVsZHNfc2V0X3ZhbHVlLCBjbGFzc19u
YW1lLCBjbGFzc19uYW1lKSkKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3Mg
PSAwCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBwcm9wX2RhdGEgaW4gcmVz
b2x2ZV9kYXRhLm1haW5fcHJvcGVydGllczoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHByb3BfbmFtZSA9IHByb3BfZGF0YS5wWyJuYW1lIl0KLQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcGFyYW1fdHlwZV9iaW5kaW5nID0gcHJvcF9kYXRhLnBhcmFt
X3R5cGVfYmluZGluZwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1f
cmF3X3R5cGUgPSBwYXJhbV90eXBlX2JpbmRpbmcucmVkdWNlX3RvX3Jhd190eXBlKCkKLQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmVfbXVsdGlsaW5l
KENvZGVHZW5lcmF0b3JJbnNwZWN0b3JTdHJpbmdzLmNsYXNzX2JpbmRpbmdfYnVpbGRlcl9wYXJ0
XzIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChzdGF0ZV9lbnVt
X2l0ZW1zW3Bvc10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Q2FwaXRhbGl6ZXIubG93ZXJfY2FtZWxfY2FzZV90b191cHBlcihwcm9wX25hbWUpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtX3R5cGVfYmluZGluZy5n
ZXRfdHlwZV9tb2RlbCgpLmdldF9pbnB1dF9wYXJhbV90eXBlX3RleHQoKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV9lbnVtX2l0ZW1zW3Bvc10sIHBy
b3BfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJh
bV9yYXdfdHlwZS5nZXRfc2V0dGVyX25hbWUoKSwgcHJvcF9uYW1lLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdF9zZXR0ZXJfdmFsdWVfZXhwcmVzc2lv
bihwYXJhbV90eXBlX2JpbmRpbmcsICJ2YWx1ZSIpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0YXRlX2VudW1faXRlbXNbcG9zXSkpCi0KLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHBvcyArPSAxCi0KLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmVfbXVsdGlsaW5lKENvZGVHZW5lcmF0b3JJbnNwZWN0
b3JTdHJpbmdzLmNsYXNzX2JpbmRpbmdfYnVpbGRlcl9wYXJ0XzMKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKGNsYXNzX25hbWUsIGNs
YXNzX25hbWUsIGNsYXNzX25hbWUsIGNsYXNzX25hbWUsIGNsYXNzX25hbWUpKQotCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCIgICAgLypcbiIpCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCIgICAgICogU3ludGhl
dGljIGNvbnN0cnVjdG9yOlxuIikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3Jp
dGVyLm5ld2xpbmUoIiAgICAgKiBSZWZQdHI8JXM+IHJlc3VsdCA9ICVzOjpjcmVhdGUoKSIgJSAo
Y2xhc3NfbmFtZSwgY2xhc3NfbmFtZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZvciBwcm9wX2RhdGEgaW4gcmVzb2x2ZV9kYXRhLm1haW5fcHJvcGVydGllczoKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5hcHBlbmRfbXVsdGlsaW5lKCJcbiAg
ICAgKiAgICAgLnNldCVzKC4uLikiICUgQ2FwaXRhbGl6ZXIubG93ZXJfY2FtZWxfY2FzZV90b191
cHBlcihwcm9wX2RhdGEucFsibmFtZSJdKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgd3JpdGVyLmFwcGVuZF9tdWx0aWxpbmUoIjtcbiAgICAgKi9cbiIpCi0KLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmVfbXVsdGlsaW5lKENvZGVHZW5lcmF0
b3JJbnNwZWN0b3JTdHJpbmdzLmNsYXNzX2JpbmRpbmdfYnVpbGRlcl9wYXJ0XzQpCi0KLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIiAgICB0eXBlZGVmIElu
c3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlN0cnVjdEl0ZW1UcmFpdHMgSXRlbVRyYWl0cztcbiIpCi0K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHByb3BfZGF0YSBpbiByZXNvbHZl
X2RhdGEub3B0aW9uYWxfcHJvcGVydGllczoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHByb3BfbmFtZSA9IHByb3BfZGF0YS5wWyJuYW1lIl0KLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHBhcmFtX3R5cGVfYmluZGluZyA9IHByb3BfZGF0YS5wYXJhbV90
eXBlX2JpbmRpbmcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldHRlcl9u
YW1lID0gInNldCVzIiAlIENhcGl0YWxpemVyLmxvd2VyX2NhbWVsX2Nhc2VfdG9fdXBwZXIocHJv
cF9uYW1lKQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuYXBw
ZW5kX211bHRpbGluZSgiXG4gICAgdm9pZCAlcyIgJSBzZXR0ZXJfbmFtZSkKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5hcHBlbmQoIiglcyB2YWx1ZSlcbiIgJSBw
YXJhbV90eXBlX2JpbmRpbmcuZ2V0X3R5cGVfbW9kZWwoKS5nZXRfaW5wdXRfcGFyYW1fdHlwZV90
ZXh0KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3bGlu
ZSgiICAgIHtcbiIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIu
bmV3bGluZSgiICAgICAgICB0aGlzLT5zZXQlcyhBU0NJSUxpdGVyYWwoXCIlc1wiKSwgJXMpO1xu
IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKHBhcmFtX3R5cGVf
YmluZGluZy5yZWR1Y2VfdG9fcmF3X3R5cGUoKS5nZXRfc2V0dGVyX25hbWUoKSwgcHJvcF9kYXRh
LnBbIm5hbWUiXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm
b3JtYXRfc2V0dGVyX3ZhbHVlX2V4cHJlc3Npb24ocGFyYW1fdHlwZV9iaW5kaW5nLCAidmFsdWUi
KSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3bGluZSgi
ICAgIH1cbiIpCi0KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2V0
dGVyX25hbWUgaW4gSU5TUEVDVE9SX09CSkVDVF9TRVRURVJfTkFNRVM6Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIiAgICB1c2luZyBJbnNw
ZWN0b3I6Okluc3BlY3Rvck9iamVjdEJhc2U6OiVzO1xuXG4iICUgc2V0dGVyX25hbWUpCi0KLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgY2xhc3NfYmluZGluZ19jbHMubmVlZF91
c2VyX3J1bnRpbWVfY2FzdF86Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3
cml0ZXIubmV3bGluZSgiICAgIHN0YXRpYyBQYXNzUmVmUHRyPCVzPiBydW50aW1lQ2FzdChQYXNz
UmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+IHZhbHVlKVxuIiAlIGNsYXNzX25hbWUp
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3bGluZSgiICAg
IHtcbiIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3bGlu
ZSgiICAgICAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IG9iamVjdDtcbiIp
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3bGluZSgiICAg
ICAgICBib29sIGNhc3RSZXMgPSB2YWx1ZS0+YXNPYmplY3QoJm9iamVjdCk7XG4iKQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIiAgICAgICAgQVNT
RVJUX1VOVVNFRChjYXN0UmVzLCBjYXN0UmVzKTtcbiIpCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB3cml0ZXIuYXBwZW5kKCIjaWYgJXNcbiIgJSBWQUxJREFUT1JfSUZERUZf
TkFNRSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5l
KCIgICAgICAgIGFzc2VydENvcnJlY3RWYWx1ZShvYmplY3QuZ2V0KCkpO1xuIikKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5hcHBlbmQoIiNlbmRpZiAgLy8gJXNc
biIgJSBWQUxJREFUT1JfSUZERUZfTkFNRSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHdyaXRlci5uZXdsaW5lKCIgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZiglcykg
PT0gc2l6ZW9mKEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0QmFzZSksIHR5cGVfY2FzdF9wcm9i
bGVtKTtcbiIgJSBjbGFzc19uYW1lKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgd3JpdGVyLm5ld2xpbmUoIiAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PCVzKj4oc3RhdGlj
X2Nhc3Q8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3RCYXNlKj4ob2JqZWN0LmdldCgpKSk7XG4i
ICUgY2xhc3NfbmFtZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRl
ci5uZXdsaW5lKCIgICAgfVxuIikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHdyaXRlci5hcHBlbmQoIlxuIikKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiBjbGFzc19iaW5kaW5nX2Nscy5uZWVkX2ludGVybmFsX3J1bnRpbWVfY2FzdF86Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuYXBwZW5kKCIjaWYgJXNcbiIgJSBW
QUxJREFUT1JfSUZERUZfTkFNRSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHdyaXRlci5uZXdsaW5lKCIgICAgc3RhdGljICVzIHZvaWQgYXNzZXJ0Q29ycmVjdFZhbHVlKElu
c3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUqIHZhbHVlKTtcbiIgJSBJTlNQRUNUT1JfVFlQRVNfR0VO
RVJBVE9SX0NPTkZJR19NQVBbb3V0cHV0X3R5cGVdWyJleHBvcnRfbWFjcm8iXSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5hcHBlbmQoIiNlbmRpZiAgLy8gJXNc
biIgJSBWQUxJREFUT1JfSUZERUZfTkFNRSkKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY2xvc2VkX2ZpZWxkX3NldCA9IChjb250ZXh0X2RvbWFpbl9uYW1lICsgIi4iICsg
Y2xhc3NfbmFtZSkgbm90IGluIFRZUEVTX1dJVEhfT1BFTl9GSUVMRF9MSVNUX1NFVAotCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyID0gZ2VuZXJh
dGVfY29udGV4dC52YWxpZGF0b3Jfd3JpdGVyCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRvbWFpbl9maXhlcyA9IERvbWFpbk5hbWVGaXhlcy5nZXRfZml4ZWRfZGF0YShj
b250ZXh0X2RvbWFpbl9uYW1lKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZG9tYWluX2d1YXJkID0gZG9tYWluX2ZpeGVzLmdldF9ndWFyZCgpCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiBkb21haW5fZ3VhcmQ6Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZG9tYWluX2d1YXJkLmdlbmVyYXRlX29wZW4odmFsaWRhdG9y
X3dyaXRlcikKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9y
X3dyaXRlci5uZXdsaW5lKCJ2b2lkICVzJXM6OmFzc2VydENvcnJlY3RWYWx1ZShJbnNwZWN0b3I6
Okluc3BlY3RvclZhbHVlKiB2YWx1ZSlcbiIgJSAoaGVscGVyLmZ1bGxfbmFtZV9wcmVmaXhfZm9y
X2ltcGwsIGNsYXNzX25hbWUpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCJ7XG4iKQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCIgICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gb2JqZWN0O1xuIikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgiICAgIGJvb2wgY2FzdFJlcyA9IHZhbHVlLT5hc09i
amVjdCgmb2JqZWN0KTtcbiIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIiAgICBBU1NFUlRfVU5VU0VEKGNhc3RSZXMsIGNhc3RS
ZXMpO1xuIikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBwcm9wX2Rh
dGEgaW4gcmVzb2x2ZV9kYXRhLm1haW5fcHJvcGVydGllczoKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIiAgICB7XG4iKQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0X25hbWUgPSAiJXNQb3Mi
ICUgcHJvcF9kYXRhLnBbIm5hbWUiXQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgiICAgICAgICBJbnNwZWN0b3JPYmplY3Q6
Oml0ZXJhdG9yICVzO1xuIiAlIGl0X25hbWUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCIgICAgICAgICVzID0gb2JqZWN0
LT5maW5kKFwiJXNcIik7XG4iICUgKGl0X25hbWUsIHByb3BfZGF0YS5wWyJuYW1lIl0pKQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3
bGluZSgiICAgICAgICBBU1NFUlQoJXMgIT0gb2JqZWN0LT5lbmQoKSk7XG4iICUgaXRfbmFtZSkK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVy
Lm5ld2xpbmUoIiAgICAgICAgJXMoJXMtPnZhbHVlLmdldCgpKTtcbiIgJSAocHJvcF9kYXRhLnBh
cmFtX3R5cGVfYmluZGluZy5nZXRfdmFsaWRhdG9yX2NhbGxfdGV4dCgpLCBpdF9uYW1lKSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5l
d2xpbmUoIiAgICB9XG4iKQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiBjbG9zZWRfZmllbGRfc2V0OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgiICAgIGludCBmb3VuZFByb3BlcnRpZXNDb3Vu
dCA9ICVzO1xuIiAlIGxlbihyZXNvbHZlX2RhdGEubWFpbl9wcm9wZXJ0aWVzKSkKLQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHByb3BfZGF0YSBpbiByZXNvbHZlX2Rh
dGEub3B0aW9uYWxfcHJvcGVydGllczoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIiAgICB7XG4iKQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0X25hbWUgPSAiJXNQb3MiICUgcHJvcF9kYXRh
LnBbIm5hbWUiXQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlk
YXRvcl93cml0ZXIubmV3bGluZSgiICAgICAgICBJbnNwZWN0b3JPYmplY3Q6Oml0ZXJhdG9yICVz
O1xuIiAlIGl0X25hbWUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCIgICAgICAgICVzID0gb2JqZWN0LT5maW5kKFwiJXNc
Iik7XG4iICUgKGl0X25hbWUsIHByb3BfZGF0YS5wWyJuYW1lIl0pKQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgiICAgICAg
ICBpZiAoJXMgIT0gb2JqZWN0LT5lbmQoKSkge1xuIiAlIGl0X25hbWUpCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCIgICAg
ICAgICAgICAlcyglcy0+dmFsdWUuZ2V0KCkpO1xuIiAlIChwcm9wX2RhdGEucGFyYW1fdHlwZV9i
aW5kaW5nLmdldF92YWxpZGF0b3JfY2FsbF90ZXh0KCksIGl0X25hbWUpKQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGNsb3NlZF9maWVsZF9zZXQ6Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3
bGluZSgiICAgICAgICAgICAgKytmb3VuZFByb3BlcnRpZXNDb3VudDtcbiIpCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCIg
ICAgICAgIH1cbiIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFs
aWRhdG9yX3dyaXRlci5uZXdsaW5lKCIgICAgfVxuIikKLQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgY2xvc2VkX2ZpZWxkX3NldDoKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIiAgICBpZiAoZm91
bmRQcm9wZXJ0aWVzQ291bnQgIT0gb2JqZWN0LT5zaXplKCkpXG4iKQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgiICAgICAg
ICBGQVRBTChcIlVuZXhwZWN0ZWQgcHJvcGVydGllcyBpbiBvYmplY3Q6ICVzXFxuXCIsIG9iamVj
dC0+dG9KU09OU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpO1xuIikKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgifVxuIikKLQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgZG9tYWluX2d1YXJkOgotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbWFpbl9ndWFyZC5nZW5lcmF0ZV9j
bG9zZSh2YWxpZGF0b3Jfd3JpdGVyKQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIlxuXG4iKQotCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIGlzX29wZW5fdHlwZToKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNwcF93cml0ZXIgPSBnZW5lcmF0ZV9jb250ZXh0LmNwcF93cml0ZXIKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5hcHBlbmQoIlxuIikKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCIgICAgLy8g
UHJvcGVydHkgbmFtZXMgZm9yIHR5cGUgZ2VuZXJhdGVkIGFzIG9wZW4uXG4iKQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHByb3BfZGF0YSBpbiByZXNvbHZlX2RhdGEu
bWFpbl9wcm9wZXJ0aWVzICsgcmVzb2x2ZV9kYXRhLm9wdGlvbmFsX3Byb3BlcnRpZXM6Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcF9uYW1lID0gcHJvcF9kYXRh
LnBbIm5hbWUiXQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3Bf
ZmllbGRfbmFtZSA9IENhcGl0YWxpemVyLmxvd2VyX2NhbWVsX2Nhc2VfdG9fdXBwZXIocHJvcF9u
YW1lKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXds
aW5lKCIgICAgc3RhdGljIGNvbnN0IGNoYXIqICVzO1xuIiAlIChwcm9wX2ZpZWxkX25hbWUpKQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNwcF93cml0ZXIubmV3bGlu
ZSgiY29uc3QgY2hhciogJXMlczo6JXMgPSBcIiVzXCI7XG4iICUgKGhlbHBlci5mdWxsX25hbWVf
cHJlZml4X2Zvcl9pbXBsLCBjbGFzc19uYW1lLCBwcm9wX2ZpZWxkX25hbWUsIHByb3BfbmFtZSkp
Ci0KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3bGluZSgifTtc
blxuIikKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkZWYgZ2VuZXJhdGVfZm9yd2FyZF9kZWNsYXJhdGlvbih3
cml0ZXIpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc19uYW1lID0gZml4
ZWRfdHlwZV9uYW1lLmNsYXNzX25hbWUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
d3JpdGVyLm5ld2xpbmUoImNsYXNzICIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHdyaXRlci5hcHBlbmQoY2xhc3NfbmFtZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgd3JpdGVyLmFwcGVuZCgiO1xuIikKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBz
dGF0aWNtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWYgcmVnaXN0ZXJfdXNl
KGZvcndhcmRfbGlzdGVuZXIpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxw
ZXIuYWRkX3RvX2ZvcndhcmRfbGlzdGVuZXIoZm9yd2FyZF9saXN0ZW5lcikKLQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkZWYgZ2V0X2dlbmVyYXRlX3Bhc3NfaWQoKToKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIFR5cGVCdWlsZGVyUGFzcy5NQUlOCi0KLSAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBDb2RlR2VuZXJhdG9yCi0KLSAgICAgICAgICAgICAgICAgICAgQHN0YXRp
Y21ldGhvZAotICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X3ZhbGlkYXRvcl9jYWxsX3RleHQo
KToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBoZWxwZXIuZnVsbF9uYW1lX3ByZWZp
eF9mb3JfdXNlICsgZml4ZWRfdHlwZV9uYW1lLmNsYXNzX25hbWUgKyAiOjphc3NlcnRDb3JyZWN0
VmFsdWUiCi0KLSAgICAgICAgICAgICAgICAgICAgQGNsYXNzbWV0aG9kCi0gICAgICAgICAgICAg
ICAgICAgIGRlZiBnZXRfYXJyYXlfaXRlbV9jX3R5cGVfdGV4dChjbHMpOgotICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGhlbHBlci5mdWxsX25hbWVfcHJlZml4X2Zvcl91c2UgKyBmaXhl
ZF90eXBlX25hbWUuY2xhc3NfbmFtZQotCi0gICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRo
b2QKLSAgICAgICAgICAgICAgICAgICAgZGVmIGdldF9zZXR0ZXJfdmFsdWVfZXhwcmVzc2lvbl9w
YXR0ZXJuKCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQotCi0gICAgICAg
ICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgZGVmIHJlZHVj
ZV90b19yYXdfdHlwZSgpOgotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJhd1R5cGVz
Lk9iamVjdAotCi0gICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAg
ICAgICAgICAgZGVmIGdldF90eXBlX21vZGVsKCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gVHlwZU1vZGVsLlJlZlB0ckJhc2VkKGhlbHBlci5mdWxsX25hbWVfcHJlZml4X2Zvcl91
c2UgKyBmaXhlZF90eXBlX25hbWUuY2xhc3NfbmFtZSkKLQotICAgICAgICAgICAgICAgICAgICBj
bGFzcyBBZEhvY1R5cGVDb250ZXh0SW1wbDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBf
X2luaXRfXyhzZWxmLCBwcm9wZXJ0eV9uYW1lLCBjbGFzc19uYW1lLCByZXNvbHZlX2NvbnRleHQs
IGFkX2hvY190eXBlX2xpc3QsIHBhcmVudF9mdWxsX25hbWVfcHJlZml4KToKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzZWxmLnByb3BlcnR5X25hbWUgPSBwcm9wZXJ0eV9uYW1lCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jbGFzc19uYW1lID0gY2xhc3NfbmFtZQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucmVzb2x2ZV9jb250ZXh0ID0gcmVzb2x2ZV9j
b250ZXh0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hZF9ob2NfdHlwZV9saXN0
ID0gYWRfaG9jX3R5cGVfbGlzdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY29u
dGFpbmVyX2Z1bGxfbmFtZV9wcmVmaXggPSBwYXJlbnRfZnVsbF9uYW1lX3ByZWZpeCArIGNsYXNz
X25hbWUgKyAiOjoiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jb250YWluZXJf
cmVsYXRpdmVfbmFtZV9wcmVmaXggPSAiIgotCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWYg
Z2V0X3R5cGVfbmFtZV9maXgoc2VsZik6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xh
c3MgTmFtZUZpeDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NfbmFtZSA9
IENhcGl0YWxpemVyLmxvd2VyX2NhbWVsX2Nhc2VfdG9fdXBwZXIoc2VsZi5wcm9wZXJ0eV9uYW1l
KQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmIG91dHB1dF9jb21tZW50KHdyaXRlcik6Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3bGluZSgiLy8gTmFt
ZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAnJXMnIHdoaWxlIGdlbmVyYXRpbmcgJXMuXG4iICUgKHNl
bGYucHJvcGVydHlfbmFtZSwgc2VsZi5jbGFzc19uYW1lKSkKLQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBOYW1lRml4Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBh
ZGRfdHlwZShzZWxmLCBiaW5kaW5nKToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxm
LmFkX2hvY190eXBlX2xpc3QuYXBwZW5kKGJpbmRpbmcpCi0KLSAgICAgICAgICAgICAgICByZXR1
cm4gQ2xhc3NCaW5kaW5nCi0gICAgICAgICAgICBlbHNlOgotCi0gICAgICAgICAgICAgICAgY2xh
c3MgUGxhaW5PYmplY3RCaW5kaW5nOgotICAgICAgICAgICAgICAgICAgICBAY2xhc3NtZXRob2QK
LSAgICAgICAgICAgICAgICAgICAgZGVmIHJlc29sdmVfaW5uZXIoY2xzLCByZXNvbHZlX2NvbnRl
eHQpOgotICAgICAgICAgICAgICAgICAgICAgICAgcGFzcwotCi0gICAgICAgICAgICAgICAgICAg
IEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgZGVmIHJlcXVlc3RfdXNlcl9ydW50
aW1lX2Nhc3QocmVxdWVzdCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBwYXNzCi0KLSAgICAg
ICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgICAgICAgICBkZWYgcmVx
dWVzdF9pbnRlcm5hbF9ydW50aW1lX2Nhc3QoKToKLSAgICAgICAgICAgICAgICAgICAgICAgIFJh
d1R5cGVzLk9iamVjdC5yZXF1ZXN0X3Jhd19pbnRlcm5hbF9ydW50aW1lX2Nhc3QoKQotCi0gICAg
ICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgZGVmIGdl
dF9jb2RlX2dlbmVyYXRvcigpOgotICAgICAgICAgICAgICAgICAgICAgICAgcGFzcwotCi0gICAg
ICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgZGVmIGdl
dF92YWxpZGF0b3JfY2FsbF90ZXh0KCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
IlJ1bnRpbWVDYXN0SGVscGVyOjphc3NlcnRUeXBlPEluc3BlY3RvclZhbHVlOjpUeXBlT2JqZWN0
PiIKLQotICAgICAgICAgICAgICAgICAgICBAY2xhc3NtZXRob2QKLSAgICAgICAgICAgICAgICAg
ICAgZGVmIGdldF9hcnJheV9pdGVtX2NfdHlwZV90ZXh0KGNscyk6Ci0gICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gY2xzLnJlZHVjZV90b19yYXdfdHlwZSgpLmdldF9hcnJheV9pdGVtX3Jh
d19jX3R5cGVfdGV4dCgpCi0KLSAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAg
ICAgICAgICAgICAgICAgICBkZWYgZ2V0X3NldHRlcl92YWx1ZV9leHByZXNzaW9uX3BhdHRlcm4o
KToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb25lCi0KLSAgICAgICAgICAgICAg
ICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgICAgICAgICBkZWYgcmVkdWNlX3RvX3Jh
d190eXBlKCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmF3VHlwZXMuT2JqZWN0
Ci0KLSAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgICAgICAg
ICBkZWYgZ2V0X3R5cGVfbW9kZWwoKToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBU
eXBlTW9kZWwuT2JqZWN0Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gUGxhaW5PYmplY3RCaW5k
aW5nCi0gICAgICAgIGVsaWYganNvbl90eXBhYmxlWyJ0eXBlIl0gPT0gImFycmF5IjoKLSAgICAg
ICAgICAgIGlmICJpdGVtcyIgaW4ganNvbl90eXBhYmxlOgotCi0gICAgICAgICAgICAgICAgYWRf
aG9jX3R5cGVzID0gW10KLQotICAgICAgICAgICAgICAgIGNsYXNzIEFkSG9jVHlwZUNvbnRleHQ6
Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcl9mdWxsX25hbWVfcHJlZml4ID0gIjxub3Qg
eWV0IGRlZmluZWQ+IgotICAgICAgICAgICAgICAgICAgICBjb250YWluZXJfcmVsYXRpdmVfbmFt
ZV9wcmVmaXggPSAiIgotCi0gICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAg
ICAgICAgICAgICAgICAgZGVmIGdldF90eXBlX25hbWVfZml4KCk6Ci0gICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZml4ZWRfdHlwZV9uYW1lCi0KLSAgICAgICAgICAgICAgICAgICAgQHN0
YXRpY21ldGhvZAotICAgICAgICAgICAgICAgICAgICBkZWYgYWRkX3R5cGUoYmluZGluZyk6Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBhZF9ob2NfdHlwZXMuYXBwZW5kKGJpbmRpbmcpCi0KLSAg
ICAgICAgICAgICAgICBpdGVtX2JpbmRpbmcgPSByZXNvbHZlX3BhcmFtX3R5cGUoanNvbl90eXBh
YmxlWyJpdGVtcyJdLCBjb250ZXh0X2RvbWFpbl9uYW1lLCBBZEhvY1R5cGVDb250ZXh0KQotCi0g
ICAgICAgICAgICAgICAgY2xhc3MgQXJyYXlCaW5kaW5nOgotICAgICAgICAgICAgICAgICAgICBy
ZXNvbHZlX2RhdGFfID0gTm9uZQotICAgICAgICAgICAgICAgICAgICBuZWVkX2ludGVybmFsX3J1
bnRpbWVfY2FzdF8gPSBGYWxzZQotCi0gICAgICAgICAgICAgICAgICAgIEBjbGFzc21ldGhvZAot
ICAgICAgICAgICAgICAgICAgICBkZWYgcmVzb2x2ZV9pbm5lcihjbHMsIHJlc29sdmVfY29udGV4
dCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiBjbHMucmVzb2x2ZV9kYXRhXzoKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4KLQotICAgICAgICAgICAgICAgICAgICAgICAg
Y2xhc3MgUmVzb2x2ZURhdGE6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbV90eXBl
X2JpbmRpbmcgPSBpdGVtX2JpbmRpbmcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZF9o
b2NfdHlwZV9saXN0ID0gYWRfaG9jX3R5cGVzCi0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNs
cy5yZXNvbHZlX2RhdGFfID0gUmVzb2x2ZURhdGEKLQotICAgICAgICAgICAgICAgICAgICAgICAg
Zm9yIHQgaW4gYWRfaG9jX3R5cGVzOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQucmVz
b2x2ZV9pbm5lcihyZXNvbHZlX2NvbnRleHQpCi0KLSAgICAgICAgICAgICAgICAgICAgQGNsYXNz
bWV0aG9kCi0gICAgICAgICAgICAgICAgICAgIGRlZiByZXF1ZXN0X3VzZXJfcnVudGltZV9jYXN0
KGNscywgcmVxdWVzdCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24o
Ik5vdCBpbXBsZW1lbnRlZCB5ZXQiKQotCi0gICAgICAgICAgICAgICAgICAgIEBjbGFzc21ldGhv
ZAotICAgICAgICAgICAgICAgICAgICBkZWYgcmVxdWVzdF9pbnRlcm5hbF9ydW50aW1lX2Nhc3Qo
Y2xzKToKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIGNscy5uZWVkX2ludGVybmFsX3J1bnRp
bWVfY2FzdF86Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgICAg
ICAgICAgICAgICAgICBjbHMubmVlZF9pbnRlcm5hbF9ydW50aW1lX2Nhc3RfID0gVHJ1ZQotICAg
ICAgICAgICAgICAgICAgICAgICAgY2xzLnJlc29sdmVfZGF0YV8uaXRlbV90eXBlX2JpbmRpbmcu
cmVxdWVzdF9pbnRlcm5hbF9ydW50aW1lX2Nhc3QoKQotCi0gICAgICAgICAgICAgICAgICAgIEBj
bGFzc21ldGhvZAotICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X2NvZGVfZ2VuZXJhdG9yKGFy
cmF5X2JpbmRpbmdfY2xzKToKLQotICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3MgQ29kZUdl
bmVyYXRvcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZGVmIGdlbmVyYXRlX3R5cGVfYnVpbGRlcih3cml0ZXIs
IGdlbmVyYXRlX2NvbnRleHQpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZF9o
b2NfdHlwZV93cml0ZXIgPSB3cml0ZXIKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXNvbHZlX2RhdGEgPSBhcnJheV9iaW5kaW5nX2Nscy5yZXNvbHZlX2RhdGFfCi0KLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGFkX2hvY190eXBlIGluIHJlc29sdmVfZGF0
YS5hZF9ob2NfdHlwZV9saXN0OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29kZV9nZW5lcmF0b3IgPSBhZF9ob2NfdHlwZS5nZXRfY29kZV9nZW5lcmF0b3IoKQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgY29kZV9nZW5lcmF0b3I6Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZV9nZW5lcmF0b3IuZ2VuZXJhdGVf
dHlwZV9idWlsZGVyKGFkX2hvY190eXBlX3dyaXRlciwgZ2VuZXJhdGVfY29udGV4dCkKLQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkZWYgZ2VuZXJhdGVfZm9yd2FyZF9kZWNsYXJhdGlvbih3cml0ZXIpOgotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCi0KLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmIHJl
Z2lzdGVyX3VzZShmb3J3YXJkX2xpc3RlbmVyKToKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaXRlbV9jb2RlX2dlbmVyYXRvciA9IGl0ZW1fYmluZGluZy5nZXRfY29kZV9nZW5lcmF0
b3IoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBpdGVtX2NvZGVfZ2VuZXJh
dG9yOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbV9jb2RlX2dlbmVy
YXRvci5yZWdpc3Rlcl91c2UoZm9yd2FyZF9saXN0ZW5lcikKLQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWYg
Z2V0X2dlbmVyYXRlX3Bhc3NfaWQoKToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIFR5cGVCdWlsZGVyUGFzcy5NQUlOCi0KLSAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBDb2RlR2VuZXJhdG9yCi0KLSAgICAgICAgICAgICAgICAgICAgQGNsYXNzbWV0aG9kCi0g
ICAgICAgICAgICAgICAgICAgIGRlZiBnZXRfdmFsaWRhdG9yX2NhbGxfdGV4dChjbHMpOgotICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNscy5nZXRfYXJyYXlfaXRlbV9jX3R5cGVfdGV4
dCgpICsgIjo6YXNzZXJ0Q29ycmVjdFZhbHVlIgotCi0gICAgICAgICAgICAgICAgICAgIEBjbGFz
c21ldGhvZAotICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X2FycmF5X2l0ZW1fY190eXBlX3Rl
eHQoY2xzKToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXBsYWNlX3JpZ2h0X3No
aWZ0KCJJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheTwlcz4iICUgY2xzLnJlc29sdmVfZGF0
YV8uaXRlbV90eXBlX2JpbmRpbmcuZ2V0X2FycmF5X2l0ZW1fY190eXBlX3RleHQoKSkKLQotICAg
ICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgIGRlZiBn
ZXRfc2V0dGVyX3ZhbHVlX2V4cHJlc3Npb25fcGF0dGVybigpOgotICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIE5vbmUKLQotICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0g
ICAgICAgICAgICAgICAgICAgIGRlZiByZWR1Y2VfdG9fcmF3X3R5cGUoKToKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBSYXdUeXBlcy5BcnJheQotCi0gICAgICAgICAgICAgICAgICAg
IEBjbGFzc21ldGhvZAotICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X3R5cGVfbW9kZWwoY2xz
KToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBUeXBlTW9kZWwuUmVmUHRyQmFzZWQo
Y2xzLmdldF9hcnJheV9pdGVtX2NfdHlwZV90ZXh0KCkpCi0KLSAgICAgICAgICAgICAgICByZXR1
cm4gQXJyYXlCaW5kaW5nCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICMgRmFs
bC10aHJvdWdoIHRvIHJhdyB0eXBlLgotICAgICAgICAgICAgICAgIHBhc3MKLQotICAgICAgICBy
YXdfdHlwZSA9IFJhd1R5cGVzLmdldChqc29uX3R5cGFibGVbInR5cGUiXSkKLQotICAgICAgICBy
ZXR1cm4gUmF3VHlwZUJpbmRpbmcocmF3X3R5cGUpCi0KLQotY2xhc3MgUmF3VHlwZUJpbmRpbmc6
Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHJhd190eXBlKToKLSAgICAgICAgc2VsZi5yYXdfdHlw
ZV8gPSByYXdfdHlwZQotCi0gICAgZGVmIHJlc29sdmVfaW5uZXIoc2VsZiwgcmVzb2x2ZV9jb250
ZXh0KToKLSAgICAgICAgcGFzcwotCi0gICAgZGVmIHJlcXVlc3RfdXNlcl9ydW50aW1lX2Nhc3Qo
c2VsZiwgcmVxdWVzdCk6Ci0gICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiVW5zdXBwb3J0ZWQiKQot
Ci0gICAgZGVmIHJlcXVlc3RfaW50ZXJuYWxfcnVudGltZV9jYXN0KHNlbGYpOgotICAgICAgICBz
ZWxmLnJhd190eXBlXy5yZXF1ZXN0X3Jhd19pbnRlcm5hbF9ydW50aW1lX2Nhc3QoKQotCi0gICAg
ZGVmIGdldF9jb2RlX2dlbmVyYXRvcihzZWxmKToKLSAgICAgICAgcmV0dXJuIE5vbmUKLQotICAg
IGRlZiBnZXRfdmFsaWRhdG9yX2NhbGxfdGV4dChzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYu
cmF3X3R5cGVfLmdldF9yYXdfdmFsaWRhdG9yX2NhbGxfdGV4dCgpCi0KLSAgICBkZWYgZ2V0X2Fy
cmF5X2l0ZW1fY190eXBlX3RleHQoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLnJhd190eXBl
Xy5nZXRfYXJyYXlfaXRlbV9yYXdfY190eXBlX3RleHQoKQotCi0gICAgZGVmIGdldF9zZXR0ZXJf
dmFsdWVfZXhwcmVzc2lvbl9wYXR0ZXJuKHNlbGYpOgotICAgICAgICByZXR1cm4gTm9uZQotCi0g
ICAgZGVmIHJlZHVjZV90b19yYXdfdHlwZShzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYucmF3
X3R5cGVfCi0KLSAgICBkZWYgZ2V0X3R5cGVfbW9kZWwoc2VsZik6Ci0gICAgICAgIHJldHVybiBz
ZWxmLnJhd190eXBlXy5nZXRfcmF3X3R5cGVfbW9kZWwoKQotCi0KLWNsYXNzIFR5cGVEYXRhKG9i
amVjdCk6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGpzb25fdHlwZSwganNvbl9kb21haW4sIGRv
bWFpbl9kYXRhKToKLSAgICAgICAgc2VsZi5qc29uX3R5cGVfID0ganNvbl90eXBlCi0gICAgICAg
IHNlbGYuanNvbl9kb21haW5fID0ganNvbl9kb21haW4KLSAgICAgICAgc2VsZi5kb21haW5fZGF0
YV8gPSBkb21haW5fZGF0YQotCi0gICAgICAgIGlmICJ0eXBlIiBub3QgaW4ganNvbl90eXBlOgot
ICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJVbmtub3duIHR5cGUiKQotCi0gICAgICAgIGpz
b25fdHlwZV9uYW1lID0ganNvbl90eXBlWyJ0eXBlIl0KLSAgICAgICAgc2VsZi5yYXdfdHlwZV8g
PSBSYXdUeXBlcy5nZXQoanNvbl90eXBlX25hbWUpCi0gICAgICAgIHNlbGYuYmluZGluZ19iZWlu
Z19yZXNvbHZlZF8gPSBGYWxzZQotICAgICAgICBzZWxmLmJpbmRpbmdfID0gTm9uZQotCi0gICAg
ZGVmIGdldF9yYXdfdHlwZShzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYucmF3X3R5cGVfCi0K
LSAgICBkZWYgZ2V0X2JpbmRpbmcoc2VsZik6Ci0gICAgICAgIGlmIG5vdCBzZWxmLmJpbmRpbmdf
OgotICAgICAgICAgICAgaWYgc2VsZi5iaW5kaW5nX2JlaW5nX3Jlc29sdmVkXzoKLSAgICAgICAg
ICAgICAgICByYWlzZSBFeGNlcHRpb24oIlR5cGUgJXMgaXMgYWxyZWFkeSBiZWluZyByZXNvbHZl
ZCIgJSBzZWxmLmpzb25fdHlwZV9bInR5cGUiXSkKLSAgICAgICAgICAgICMgUmVzb2x2ZSBvbmx5
IGxhemlseSwgYmVjYXVzZSByZXNvbHZpbmcgb25lIG5hbWVkIHR5cGUgbWF5IHJlcXVpcmUgcmVz
b2x2aW5nIHNvbWUgb3RoZXIgbmFtZWQgdHlwZS4KLSAgICAgICAgICAgIHNlbGYuYmluZGluZ19i
ZWluZ19yZXNvbHZlZF8gPSBUcnVlCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAg
c2VsZi5iaW5kaW5nXyA9IFR5cGVCaW5kaW5ncy5jcmVhdGVfbmFtZWRfdHlwZV9kZWNsYXJhdGlv
bihzZWxmLmpzb25fdHlwZV8sIHNlbGYuanNvbl9kb21haW5fWyJkb21haW4iXSwgc2VsZikKLSAg
ICAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgc2VsZi5iaW5kaW5nX2JlaW5nX3Jl
c29sdmVkXyA9IEZhbHNlCi0KLSAgICAgICAgcmV0dXJuIHNlbGYuYmluZGluZ18KLQotICAgIGRl
ZiBnZXRfanNvbl90eXBlKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5qc29uX3R5cGVfCi0K
LSAgICBkZWYgZ2V0X25hbWUoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLmpzb25fdHlwZV9b
ImlkIl0KLQotICAgIGRlZiBnZXRfZG9tYWluX25hbWUoc2VsZik6Ci0gICAgICAgIHJldHVybiBz
ZWxmLmpzb25fZG9tYWluX1siZG9tYWluIl0KLQotCi1jbGFzcyBEb21haW5EYXRhOgotICAgIGRl
ZiBfX2luaXRfXyhzZWxmLCBqc29uX2RvbWFpbik6Ci0gICAgICAgIHNlbGYuanNvbl9kb21haW4g
PSBqc29uX2RvbWFpbgotICAgICAgICBzZWxmLnR5cGVzXyA9IFtdCi0KLSAgICBkZWYgYWRkX3R5
cGUoc2VsZiwgdHlwZV9kYXRhKToKLSAgICAgICAgc2VsZi50eXBlc18uYXBwZW5kKHR5cGVfZGF0
YSkKLQotICAgIGRlZiBuYW1lKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5qc29uX2RvbWFp
blsiZG9tYWluIl0KLQotICAgIGRlZiB0eXBlcyhzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYu
dHlwZXNfCi0KLQotY2xhc3MgVHlwZU1hcDoKLSAgICBkZWYgX19pbml0X18oc2VsZiwgYXBpLCBk
ZXBlbmRlbmN5X2FwaSk6Ci0gICAgICAgIHNlbGYubWFwXyA9IHt9Ci0gICAgICAgIHNlbGYuZG9t
YWluc18gPSBbXQotICAgICAgICBzZWxmLmRvbWFpbnNfdG9fZ2VuZXJhdGVfID0gW10KLSAgICAg
ICAgZm9yIGpzb25fZG9tYWluIGluIGFwaVsiZG9tYWlucyJdOgotICAgICAgICAgICAgc2VsZi5h
ZGRfZG9tYWluKGpzb25fZG9tYWluLCBUcnVlKQotICAgICAgICBmb3IganNvbl9kb21haW4gaW4g
ZGVwZW5kZW5jeV9hcGlbImRvbWFpbnMiXToKLSAgICAgICAgICAgIHNlbGYuYWRkX2RvbWFpbihq
c29uX2RvbWFpbiwgRmFsc2UpCi0KLSAgICBkZWYgYWRkX2RvbWFpbihzZWxmLCBqc29uX2RvbWFp
biwgc2hvdWxkX2dlbmVyYXRlKToKLSAgICAgICAgZG9tYWluX25hbWUgPSBqc29uX2RvbWFpblsi
ZG9tYWluIl0KLQotICAgICAgICBkb21haW5fbWFwID0ge30KLSAgICAgICAgc2VsZi5tYXBfW2Rv
bWFpbl9uYW1lXSA9IGRvbWFpbl9tYXAKLQotICAgICAgICBkb21haW5fZGF0YSA9IERvbWFpbkRh
dGEoanNvbl9kb21haW4pCi0gICAgICAgIHNlbGYuZG9tYWluc18uYXBwZW5kKGRvbWFpbl9kYXRh
KQotCi0gICAgICAgIGlmIHNob3VsZF9nZW5lcmF0ZToKLSAgICAgICAgICAgICMgRklYTUU6IFRo
ZSBvcmRlciBvZiB0eXBlcyBzaG91bGQgbm90IG1hdHRlci4gVGhlIGdlbmVyYXRlZCBjb2RlIHNo
b3VsZCB3b3JrIHJlZ2FyZGxlc3Mgb2YgdGhlIG9yZGVyIG9mIHR5cGVzLgotICAgICAgICAgICAg
aWYgZG9tYWluX25hbWUgPT0gIlBhZ2UiOgotICAgICAgICAgICAgICAgIHNlbGYuZG9tYWluc190
b19nZW5lcmF0ZV8uaW5zZXJ0KDAsIGRvbWFpbl9kYXRhKQotICAgICAgICAgICAgZWxzZToKLSAg
ICAgICAgICAgICAgICBzZWxmLmRvbWFpbnNfdG9fZ2VuZXJhdGVfLmFwcGVuZChkb21haW5fZGF0
YSkKLQotICAgICAgICBpZiAidHlwZXMiIGluIGpzb25fZG9tYWluOgotICAgICAgICAgICAgZm9y
IGpzb25fdHlwZSBpbiBqc29uX2RvbWFpblsidHlwZXMiXToKLSAgICAgICAgICAgICAgICB0eXBl
X25hbWUgPSBqc29uX3R5cGVbImlkIl0KLSAgICAgICAgICAgICAgICB0eXBlX2RhdGEgPSBUeXBl
RGF0YShqc29uX3R5cGUsIGpzb25fZG9tYWluLCBkb21haW5fZGF0YSkKLSAgICAgICAgICAgICAg
ICBkb21haW5fbWFwW3R5cGVfbmFtZV0gPSB0eXBlX2RhdGEKLSAgICAgICAgICAgICAgICBkb21h
aW5fZGF0YS5hZGRfdHlwZSh0eXBlX2RhdGEpCi0KLSAgICBkZWYgZG9tYWlucyhzZWxmKToKLSAg
ICAgICAgcmV0dXJuIHNlbGYuZG9tYWluc18KLQotICAgIGRlZiBkb21haW5zX3RvX2dlbmVyYXRl
KHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5kb21haW5zX3RvX2dlbmVyYXRlXwotCi0gICAg
ZGVmIGdldChzZWxmLCBkb21haW5fbmFtZSwgdHlwZV9uYW1lKToKLSAgICAgICAgcmV0dXJuIHNl
bGYubWFwX1tkb21haW5fbmFtZV1bdHlwZV9uYW1lXQotCi0KLWRlZiByZXNvbHZlX3BhcmFtX3R5
cGUoanNvbl9wYXJhbWV0ZXIsIHNjb3BlX2RvbWFpbl9uYW1lLCBhZF9ob2NfdHlwZV9jb250ZXh0
KToKLSAgICBpZiAiJHJlZiIgaW4ganNvbl9wYXJhbWV0ZXI6Ci0gICAgICAgIGpzb25fcmVmID0g
anNvbl9wYXJhbWV0ZXJbIiRyZWYiXQotICAgICAgICB0eXBlX2RhdGEgPSBnZXRfcmVmX2RhdGEo
anNvbl9yZWYsIHNjb3BlX2RvbWFpbl9uYW1lKQotICAgICAgICByZXR1cm4gdHlwZV9kYXRhLmdl
dF9iaW5kaW5nKCkKLSAgICBlbGlmICJ0eXBlIiBpbiBqc29uX3BhcmFtZXRlcjoKLSAgICAgICAg
cmVzdWx0ID0gVHlwZUJpbmRpbmdzLmNyZWF0ZV9hZF9ob2NfdHlwZV9kZWNsYXJhdGlvbihqc29u
X3BhcmFtZXRlciwgc2NvcGVfZG9tYWluX25hbWUsIGFkX2hvY190eXBlX2NvbnRleHQpCi0gICAg
ICAgIGFkX2hvY190eXBlX2NvbnRleHQuYWRkX3R5cGUocmVzdWx0KQotICAgICAgICByZXR1cm4g
cmVzdWx0Ci0gICAgZWxzZToKLSAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJVbmtub3duIHR5cGUi
KQotCi0KLWRlZiByZXNvbHZlX3BhcmFtX3Jhd190eXBlKGpzb25fcGFyYW1ldGVyLCBzY29wZV9k
b21haW5fbmFtZSk6Ci0gICAgaWYgIiRyZWYiIGluIGpzb25fcGFyYW1ldGVyOgotICAgICAgICBq
c29uX3JlZiA9IGpzb25fcGFyYW1ldGVyWyIkcmVmIl0KLSAgICAgICAgdHlwZV9kYXRhID0gZ2V0
X3JlZl9kYXRhKGpzb25fcmVmLCBzY29wZV9kb21haW5fbmFtZSkKLSAgICAgICAgcmV0dXJuIHR5
cGVfZGF0YS5nZXRfcmF3X3R5cGUoKQotICAgIGVsaWYgInR5cGUiIGluIGpzb25fcGFyYW1ldGVy
OgotICAgICAgICBqc29uX3R5cGUgPSBqc29uX3BhcmFtZXRlclsidHlwZSJdCi0gICAgICAgIHJl
dHVybiBSYXdUeXBlcy5nZXQoanNvbl90eXBlKQotICAgIGVsc2U6Ci0gICAgICAgIHJhaXNlIEV4
Y2VwdGlvbigiVW5rbm93biB0eXBlIikKLQotCi1kZWYgZ2V0X3JlZl9kYXRhKGpzb25fcmVmLCBz
Y29wZV9kb21haW5fbmFtZSk6Ci0gICAgZG90X3BvcyA9IGpzb25fcmVmLmZpbmQoIi4iKQotICAg
IGlmIGRvdF9wb3MgPT0gLTE6Ci0gICAgICAgIGRvbWFpbl9uYW1lID0gc2NvcGVfZG9tYWluX25h
bWUKLSAgICAgICAgdHlwZV9uYW1lID0ganNvbl9yZWYKLSAgICBlbHNlOgotICAgICAgICBkb21h
aW5fbmFtZSA9IGpzb25fcmVmWzpkb3RfcG9zXQotICAgICAgICB0eXBlX25hbWUgPSBqc29uX3Jl
Zltkb3RfcG9zICsgMTpdCi0KLSAgICByZXR1cm4gdHlwZV9tYXAuZ2V0KGRvbWFpbl9uYW1lLCB0
eXBlX25hbWUpCi0KLQotaW5wdXRfZmlsZSA9IG9wZW4oaW5wdXRfanNvbl9maWxlbmFtZSwgInIi
KQotanNvbl9zdHJpbmcgPSBpbnB1dF9maWxlLnJlYWQoKQotanNvbl9hcGkgPSBqc29uLmxvYWRz
KGpzb25fc3RyaW5nKQotaW5wdXRfZmlsZS5jbG9zZSgpCi1pZiBub3QgImRvbWFpbnMiIGluIGpz
b25fYXBpOgotICAgIGpzb25fYXBpID0geyJkb21haW5zIjogW2pzb25fYXBpXX0KLQotZGVwZW5k
ZW5jeV9hcGkgPSB7ImRvbWFpbnMiOiBbXX0KLWZvciBkZXBlbmRlbmN5X2pzb25fZmlsZW5hbWUg
aW4gZGVwZW5kZW5jeV9qc29uX2ZpbGVuYW1lczoKLSAgICBkZXBlbmRlbmN5X2lucHV0X2ZpbGUg
PSBvcGVuKGRlcGVuZGVuY3lfanNvbl9maWxlbmFtZSwgInIiKQotICAgIGRlcGVuZGVuY3lfanNv
bl9zdHJpbmcgPSBkZXBlbmRlbmN5X2lucHV0X2ZpbGUucmVhZCgpCi0gICAgZGVwZW5kZW5jeV9q
c29uX2FwaSA9IGpzb24ubG9hZHMoZGVwZW5kZW5jeV9qc29uX3N0cmluZykKLSAgICBkZXBlbmRl
bmN5X2lucHV0X2ZpbGUuY2xvc2UoKQotICAgIGlmIG5vdCAiZG9tYWlucyIgaW4gZGVwZW5kZW5j
eV9qc29uX2FwaToKLSAgICAgICAgZGVwZW5kZW5jeV9qc29uX2FwaSA9IHsiZG9tYWlucyI6IFtk
ZXBlbmRlbmN5X2pzb25fYXBpXX0KLSAgICBkZXBlbmRlbmN5X2FwaVsiZG9tYWlucyJdICs9IGRl
cGVuZGVuY3lfanNvbl9hcGlbImRvbWFpbnMiXQotCi0KLWNsYXNzIFRlbXBsYXRlczoKLSAgICBk
ZWYgZ2V0X3RoaXNfc2NyaXB0X3BhdGhfKGFic29sdXRlX3BhdGgpOgotICAgICAgICBhYnNvbHV0
ZV9wYXRoID0gb3MucGF0aC5hYnNwYXRoKGFic29sdXRlX3BhdGgpCi0gICAgICAgIGNvbXBvbmVu
dHMgPSBbXQotCi0gICAgICAgIGRlZiBmaWxsX3JlY3Vyc2l2ZShwYXRoX3BhcnQsIGRlcHRoKToK
LSAgICAgICAgICAgIGlmIGRlcHRoIDw9IDAgb3IgcGF0aF9wYXJ0ID09ICcvJzoKLSAgICAgICAg
ICAgICAgICByZXR1cm4KLSAgICAgICAgICAgIGZpbGxfcmVjdXJzaXZlKG9zLnBhdGguZGlybmFt
ZShwYXRoX3BhcnQpLCBkZXB0aCAtIDEpCi0gICAgICAgICAgICBjb21wb25lbnRzLmFwcGVuZChv
cy5wYXRoLmJhc2VuYW1lKHBhdGhfcGFydCkpCi0KLSAgICAgICAgIyBUeXBpY2FsIHBhdGggaXMg
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5Ci0gICAg
ICAgICMgTGV0J3MgdGFrZSA0IGNvbXBvbmVudHMgZnJvbSB0aGUgcmVhbCBwYXRoIHRoZW4uCi0g
ICAgICAgIGZpbGxfcmVjdXJzaXZlKGFic29sdXRlX3BhdGgsIDQpCi0KLSAgICAgICAgcmV0dXJu
ICIvIi5qb2luKGNvbXBvbmVudHMpCi0KLSAgICBmaWxlX2hlYWRlcl8gPSAoIi8vIEZpbGUgaXMg
Z2VuZXJhdGVkIGJ5ICVzXG5cbiIgJSBnZXRfdGhpc19zY3JpcHRfcGF0aF8oc3lzLmFyZ3ZbMF0p
ICsKLSIiIi8vIENvcHlyaWdodCAoYykgMjAxMyBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2
ZWQuCi0vLyBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgotIiIiKQotCi0gICAgZnJvbnRlbmRfZG9tYWluX2NsYXNzID0gc3RyaW5nLlRlbXBsYXRl
KENvZGVHZW5lcmF0b3JJbnNwZWN0b3JTdHJpbmdzLmZyb250ZW5kX2RvbWFpbl9jbGFzcykKLSAg
ICBiYWNrZW5kX2Rpc3BhdGNoZXJfY29uc3RydWN0b3IgPSBzdHJpbmcuVGVtcGxhdGUoQ29kZUdl
bmVyYXRvckluc3BlY3RvclN0cmluZ3MuYmFja2VuZF9kaXNwYXRjaGVyX2NvbnN0cnVjdG9yKQot
ICAgIGJhY2tlbmRfZGlzcGF0Y2hlcl9kaXNwYXRjaF9tZXRob2QgPSBzdHJpbmcuVGVtcGxhdGUo
Q29kZUdlbmVyYXRvckluc3BlY3RvclN0cmluZ3MuYmFja2VuZF9kaXNwYXRjaGVyX2Rpc3BhdGNo
X21ldGhvZCkKLSAgICBiYWNrZW5kX2Rpc3BhdGNoZXJfZGlzcGF0Y2hfbWV0aG9kX3NpbXBsZSA9
IHN0cmluZy5UZW1wbGF0ZShDb2RlR2VuZXJhdG9ySW5zcGVjdG9yU3RyaW5ncy5iYWNrZW5kX2Rp
c3BhdGNoZXJfZGlzcGF0Y2hfbWV0aG9kX3NpbXBsZSkKLSAgICBiYWNrZW5kX21ldGhvZCA9IHN0
cmluZy5UZW1wbGF0ZShDb2RlR2VuZXJhdG9ySW5zcGVjdG9yU3RyaW5ncy5iYWNrZW5kX21ldGhv
ZCkKLSAgICBmcm9udGVuZF9tZXRob2QgPSBzdHJpbmcuVGVtcGxhdGUoQ29kZUdlbmVyYXRvcklu
c3BlY3RvclN0cmluZ3MuZnJvbnRlbmRfbWV0aG9kKQotICAgIGNhbGxiYWNrX21ldGhvZCA9IHN0
cmluZy5UZW1wbGF0ZShDb2RlR2VuZXJhdG9ySW5zcGVjdG9yU3RyaW5ncy5jYWxsYmFja19tZXRo
b2QpCi0gICAgZnJvbnRlbmRfaCA9IHN0cmluZy5UZW1wbGF0ZShmaWxlX2hlYWRlcl8gKyBDb2Rl
R2VuZXJhdG9ySW5zcGVjdG9yU3RyaW5ncy5mcm9udGVuZF9oKQotICAgIGJhY2tlbmRfaCA9IHN0
cmluZy5UZW1wbGF0ZShmaWxlX2hlYWRlcl8gKyBDb2RlR2VuZXJhdG9ySW5zcGVjdG9yU3RyaW5n
cy5iYWNrZW5kX2gpCi0gICAgYmFja2VuZF9jcHAgPSBzdHJpbmcuVGVtcGxhdGUoZmlsZV9oZWFk
ZXJfICsgQ29kZUdlbmVyYXRvckluc3BlY3RvclN0cmluZ3MuYmFja2VuZF9jcHApCi0gICAgZnJv
bnRlbmRfY3BwID0gc3RyaW5nLlRlbXBsYXRlKGZpbGVfaGVhZGVyXyArIENvZGVHZW5lcmF0b3JJ
bnNwZWN0b3JTdHJpbmdzLmZyb250ZW5kX2NwcCkKLSAgICB0eXBlYnVpbGRlcl9oID0gc3RyaW5n
LlRlbXBsYXRlKGZpbGVfaGVhZGVyXyArIENvZGVHZW5lcmF0b3JJbnNwZWN0b3JTdHJpbmdzLnR5
cGVidWlsZGVyX2gpCi0gICAgdHlwZWJ1aWxkZXJfY3BwID0gc3RyaW5nLlRlbXBsYXRlKGZpbGVf
aGVhZGVyXyArIENvZGVHZW5lcmF0b3JJbnNwZWN0b3JTdHJpbmdzLnR5cGVidWlsZGVyX2NwcCkK
LSAgICBiYWNrZW5kX2pzID0gc3RyaW5nLlRlbXBsYXRlKGZpbGVfaGVhZGVyXyArIENvZGVHZW5l
cmF0b3JJbnNwZWN0b3JTdHJpbmdzLmJhY2tlbmRfanMpCi0gICAgcGFyYW1fY29udGFpbmVyX2Fj
Y2Vzc19jb2RlID0gQ29kZUdlbmVyYXRvckluc3BlY3RvclN0cmluZ3MucGFyYW1fY29udGFpbmVy
X2FjY2Vzc19jb2RlCi0KLQotCi0KLQotdHlwZV9tYXAgPSBUeXBlTWFwKGpzb25fYXBpLCBkZXBl
bmRlbmN5X2FwaSkKLQotCi1jbGFzcyBOZWVkUnVudGltZUNhc3RSZXF1ZXN0OgotICAgIGRlZiBf
X2luaXRfXyhzZWxmKToKLSAgICAgICAgc2VsZi5hY2tfID0gTm9uZQotCi0gICAgZGVmIGFja25v
d2xlZGdlKHNlbGYpOgotICAgICAgICBzZWxmLmFja18gPSBUcnVlCi0KLSAgICBkZWYgaXNfYWNr
bm93bGVkZ2VkKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5hY2tfCi0KLQotZGVmIHJlc29s
dmVfYWxsX3R5cGVzKCk6Ci0gICAgcnVudGltZV9jYXN0X2dlbmVyYXRlX3JlcXVlc3RzID0ge30K
LSAgICBmb3IgdHlwZV9uYW1lIGluIFRZUEVTX1dJVEhfUlVOVElNRV9DQVNUX1NFVDoKLSAgICAg
ICAgcnVudGltZV9jYXN0X2dlbmVyYXRlX3JlcXVlc3RzW3R5cGVfbmFtZV0gPSBOZWVkUnVudGlt
ZUNhc3RSZXF1ZXN0KCkKLQotICAgIGNsYXNzIEZvcndhcmRMaXN0ZW5lcjoKLSAgICAgICAgdHlw
ZV9kYXRhX3NldCA9IHNldCgpCi0gICAgICAgIGFscmVhZHlfZGVjbGFyZWRfc2V0ID0gc2V0KCkK
LQotICAgICAgICBAY2xhc3NtZXRob2QKLSAgICAgICAgZGVmIGFkZF90eXBlX2RhdGEoY2xzLCB0
eXBlX2RhdGEpOgotICAgICAgICAgICAgaWYgdHlwZV9kYXRhIG5vdCBpbiBjbHMuYWxyZWFkeV9k
ZWNsYXJlZF9zZXQ6Ci0gICAgICAgICAgICAgICAgY2xzLnR5cGVfZGF0YV9zZXQuYWRkKHR5cGVf
ZGF0YSkKLQotICAgIGNsYXNzIFJlc29sdmVDb250ZXh0OgotICAgICAgICBmb3J3YXJkX2xpc3Rl
bmVyID0gRm9yd2FyZExpc3RlbmVyCi0KLSAgICBmb3IgZG9tYWluX2RhdGEgaW4gdHlwZV9tYXAu
ZG9tYWlucygpOgotICAgICAgICBmb3IgdHlwZV9kYXRhIGluIGRvbWFpbl9kYXRhLnR5cGVzKCk6
Ci0gICAgICAgICAgICBiaW5kaW5nID0gdHlwZV9kYXRhLmdldF9iaW5kaW5nKCkKLSAgICAgICAg
ICAgIGJpbmRpbmcucmVzb2x2ZV9pbm5lcihSZXNvbHZlQ29udGV4dCkKLSAgICAgICAgICAgICMg
RG8gbm90IGdlbmVyYXRlIGZvcndhcmRzIGZvciB0aGlzIHR5cGUgYW55IGxvbmdlci4KLSAgICAg
ICAgICAgIEZvcndhcmRMaXN0ZW5lci5hbHJlYWR5X2RlY2xhcmVkX3NldC5hZGQodHlwZV9kYXRh
KQotCi0gICAgZm9yIGRvbWFpbl9kYXRhIGluIHR5cGVfbWFwLmRvbWFpbnMoKToKLSAgICAgICAg
Zm9yIHR5cGVfZGF0YSBpbiBkb21haW5fZGF0YS50eXBlcygpOgotICAgICAgICAgICAgZnVsbF90
eXBlX25hbWUgPSAiJXMuJXMiICUgKHR5cGVfZGF0YS5nZXRfZG9tYWluX25hbWUoKSwgdHlwZV9k
YXRhLmdldF9uYW1lKCkpCi0gICAgICAgICAgICByZXF1ZXN0ID0gcnVudGltZV9jYXN0X2dlbmVy
YXRlX3JlcXVlc3RzLnBvcChmdWxsX3R5cGVfbmFtZSwgTm9uZSkKLSAgICAgICAgICAgIGJpbmRp
bmcgPSB0eXBlX2RhdGEuZ2V0X2JpbmRpbmcoKQotICAgICAgICAgICAgaWYgcmVxdWVzdDoKLSAg
ICAgICAgICAgICAgICBiaW5kaW5nLnJlcXVlc3RfdXNlcl9ydW50aW1lX2Nhc3QocmVxdWVzdCkK
LQotICAgICAgICAgICAgaWYgcmVxdWVzdCBhbmQgbm90IHJlcXVlc3QuaXNfYWNrbm93bGVkZ2Vk
KCk6Ci0gICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJGYWlsZWQgdG8gZ2VuZXJhdGUg
cnVudGltZUNhc3QgaW4gIiArIGZ1bGxfdHlwZV9uYW1lKQotCi0gICAgIyBGSVhNRTogVGhpcyBh
c3N1bWVzIGFsbCB0aGUgZG9tYWlucyBhcmUgcHJvY2Vzc2VkIGF0IG9uY2UuIENoYW5nZSB0aGlz
IHZlcmlmaWNhdGlvbgotICAgICMgdG8gb25seSB2ZXJpZnkgcnVudGltZSBjYXN0cyBmb3IgdGhl
IGRvbWFpbnMgYmVpbmcgZ2VuZXJhdGVkLgotICAgICMgaWYgdmVyaWZpY2F0aW9uOgotICAgICMg
ICAgIGZvciBmdWxsX3R5cGVfbmFtZSBpbiBydW50aW1lX2Nhc3RfZ2VuZXJhdGVfcmVxdWVzdHM6
Ci0gICAgIyAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiRmFpbGVkIHRvIGdlbmVyYXRlIHJ1bnRp
bWVDYXN0LiBUeXBlICIgKyBmdWxsX3R5cGVfbmFtZSArICIgbm90IGZvdW5kIikKLQotICAgIHJl
dHVybiBGb3J3YXJkTGlzdGVuZXIKLQotCi1nbG9iYWxfZm9yd2FyZF9saXN0ZW5lciA9IHJlc29s
dmVfYWxsX3R5cGVzKCkKLQotCi1kZWYgZ2V0X2Fubm90YXRlZF90eXBlX3RleHQocmF3X3R5cGUs
IGFubm90YXRlZF90eXBlKToKLSAgICBpZiBhbm5vdGF0ZWRfdHlwZSAhPSByYXdfdHlwZToKLSAg
ICAgICAgcmV0dXJuICIvKiVzKi8gJXMiICUgKGFubm90YXRlZF90eXBlLCByYXdfdHlwZSkKLSAg
ICBlbHNlOgotICAgICAgICByZXR1cm4gcmF3X3R5cGUKLQotCi1kZWYgZm9ybWF0X3NldHRlcl92
YWx1ZV9leHByZXNzaW9uKHBhcmFtX3R5cGVfYmluZGluZywgdmFsdWVfcmVmKToKLSAgICBwYXR0
ZXJuID0gcGFyYW1fdHlwZV9iaW5kaW5nLmdldF9zZXR0ZXJfdmFsdWVfZXhwcmVzc2lvbl9wYXR0
ZXJuKCkKLSAgICBpZiBwYXR0ZXJuOgotICAgICAgICByZXR1cm4gcGF0dGVybiAlIChJTlNQRUNU
T1JfVFlQRVNfR0VORVJBVE9SX0NPTkZJR19NQVBbb3V0cHV0X3R5cGVdWyJwcmVmaXgiXSwgdmFs
dWVfcmVmKQotICAgIGVsc2U6Ci0gICAgICAgIHJldHVybiB2YWx1ZV9yZWYKLQotCi1jbGFzcyBH
ZW5lcmF0b3I6Ci0gICAgZnJvbnRlbmRfZG9tYWluX2NsYXNzX2xpbmVzID0gW10KLQotICAgIGJh
Y2tlbmRfbWV0aG9kX2ltcGxlbWVudGF0aW9uX2xpc3QgPSBbXQotICAgIGZyb250ZW5kX21ldGhv
ZF9saXN0ID0gW10KLSAgICBiYWNrZW5kX2pzX2RvbWFpbl9pbml0aWFsaXplcl9saXN0ID0gW10K
LQotICAgIGJhY2tlbmRfaGFuZGxlcl9pbnRlcmZhY2VfbGlzdCA9IFtdCi0gICAgYmFja2VuZF9o
YW5kbGVyX2ltcGxlbWVudGF0aW9uX2xpc3QgPSBbXQotICAgIGJhY2tlbmRfZGlzcGF0Y2hlcl9p
bnRlcmZhY2VfbGlzdCA9IFtdCi0gICAgdHlwZV9idWlsZGVyX2ZyYWdtZW50cyA9IFtdCi0gICAg
dHlwZV9idWlsZGVyX2ZvcndhcmRzID0gW10KLSAgICB2YWxpZGF0b3JfaW1wbF9saXN0ID0gW10K
LSAgICB0eXBlX2J1aWxkZXJfaW1wbF9saXN0ID0gW10KLQotCi0gICAgQHN0YXRpY21ldGhvZAot
ICAgIGRlZiBnbygpOgotICAgICAgICBHZW5lcmF0b3IucHJvY2Vzc190eXBlcyh0eXBlX21hcCkK
LQotICAgICAgICBmaXJzdF9jeWNsZV9ndWFyZGFibGVfbGlzdF9saXN0ID0gWwotICAgICAgICAg
ICAgR2VuZXJhdG9yLmJhY2tlbmRfbWV0aG9kX2ltcGxlbWVudGF0aW9uX2xpc3QsCi0gICAgICAg
ICAgICBHZW5lcmF0b3IuYmFja2VuZF9oYW5kbGVyX2ludGVyZmFjZV9saXN0LAotICAgICAgICAg
ICAgR2VuZXJhdG9yLmJhY2tlbmRfaGFuZGxlcl9pbXBsZW1lbnRhdGlvbl9saXN0LAotICAgICAg
ICAgICAgR2VuZXJhdG9yLmJhY2tlbmRfZGlzcGF0Y2hlcl9pbnRlcmZhY2VfbGlzdF0KLQotICAg
ICAgICBmb3IganNvbl9kb21haW4gaW4ganNvbl9hcGlbImRvbWFpbnMiXToKLSAgICAgICAgICAg
IGRvbWFpbl9uYW1lID0ganNvbl9kb21haW5bImRvbWFpbiJdCi0gICAgICAgICAgICBkb21haW5f
bmFtZV9sb3dlciA9IGRvbWFpbl9uYW1lLmxvd2VyKCkKLQotICAgICAgICAgICAgZG9tYWluX2Zp
eGVzID0gRG9tYWluTmFtZUZpeGVzLmdldF9maXhlZF9kYXRhKGRvbWFpbl9uYW1lKQotCi0gICAg
ICAgICAgICBkb21haW5fZ3VhcmQgPSBkb21haW5fZml4ZXMuZ2V0X2d1YXJkKCkKLQotICAgICAg
ICAgICAgaWYgZG9tYWluX2d1YXJkOgotICAgICAgICAgICAgICAgIGZvciBsIGluIGZpcnN0X2N5
Y2xlX2d1YXJkYWJsZV9saXN0X2xpc3Q6Ci0gICAgICAgICAgICAgICAgICAgIGRvbWFpbl9ndWFy
ZC5nZW5lcmF0ZV9vcGVuKGwpCi0KLSAgICAgICAgICAgIGZyb250ZW5kX21ldGhvZF9kZWNsYXJh
dGlvbl9saW5lcyA9IFtdCi0KLSAgICAgICAgICAgIGlmICgiY29tbWFuZHMiIGluIGpzb25fZG9t
YWluIG9yICJldmVudHMiIGluIGpzb25fZG9tYWluKToKLSAgICAgICAgICAgICAgICBHZW5lcmF0
b3IuYmFja2VuZF9qc19kb21haW5faW5pdGlhbGl6ZXJfbGlzdC5hcHBlbmQoIi8vICVzLlxuIiAl
IGRvbWFpbl9uYW1lKQotICAgICAgICAgICAgICAgIGlmIG5vdCBkb21haW5fZml4ZXMuc2tpcF9q
c19iaW5kOgotICAgICAgICAgICAgICAgICAgICBHZW5lcmF0b3IuYmFja2VuZF9qc19kb21haW5f
aW5pdGlhbGl6ZXJfbGlzdC5hcHBlbmQoIkluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXIlc0Rpc3Bh
dGNoZXIgPSBJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluRGlzcGF0Y2hlci5iaW5kKElu
c3BlY3RvckJhY2tlbmQsIFwiJXNcIik7XG4iICUgKGRvbWFpbl9uYW1lLCBkb21haW5fbmFtZSkp
Ci0KLSAgICAgICAgICAgIGlmICJ0eXBlcyIgaW4ganNvbl9kb21haW46Ci0gICAgICAgICAgICAg
ICAgZm9yIGpzb25fdHlwZSBpbiBqc29uX2RvbWFpblsidHlwZXMiXToKLSAgICAgICAgICAgICAg
ICAgICAgaWYgInR5cGUiIGluIGpzb25fdHlwZSBhbmQganNvbl90eXBlWyJ0eXBlIl0gPT0gInN0
cmluZyIgYW5kICJlbnVtIiBpbiBqc29uX3R5cGU6Ci0gICAgICAgICAgICAgICAgICAgICAgICBl
bnVtX25hbWUgPSAiJXMuJXMiICUgKGRvbWFpbl9uYW1lLCBqc29uX3R5cGVbImlkIl0pCi0gICAg
ICAgICAgICAgICAgICAgICAgICBHZW5lcmF0b3IucHJvY2Vzc19lbnVtKGpzb25fdHlwZSwgZW51
bV9uYW1lKQotICAgICAgICAgICAgICAgICAgICBlbGlmIGpzb25fdHlwZVsidHlwZSJdID09ICJv
YmplY3QiOgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgInByb3BlcnRpZXMiIGluIGpzb25f
dHlwZToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IganNvbl9wcm9wZXJ0eSBpbiBq
c29uX3R5cGVbInByb3BlcnRpZXMiXToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgInR5cGUiIGluIGpzb25fcHJvcGVydHkgYW5kIGpzb25fcHJvcGVydHlbInR5cGUiXSA9PSAi
c3RyaW5nIiBhbmQgImVudW0iIGluIGpzb25fcHJvcGVydHk6Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBlbnVtX25hbWUgPSAiJXMuJXMlcyIgJSAoZG9tYWluX25hbWUsIGpz
b25fdHlwZVsiaWQiXSwgdG9fdGl0bGVfY2FzZShqc29uX3Byb3BlcnR5WyJuYW1lIl0pKQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2VuZXJhdG9yLnByb2Nlc3NfZW51bShq
c29uX3Byb3BlcnR5LCBlbnVtX25hbWUpCi0KLSAgICAgICAgICAgIGlmICJldmVudHMiIGluIGpz
b25fZG9tYWluOgotICAgICAgICAgICAgICAgIGlmIGRvbWFpbl9ndWFyZDoKLSAgICAgICAgICAg
ICAgICAgICAgZG9tYWluX2d1YXJkLmdlbmVyYXRlX29wZW4oR2VuZXJhdG9yLmZyb250ZW5kX21l
dGhvZF9saXN0KQotICAgICAgICAgICAgICAgICAgICBkb21haW5fZ3VhcmQuZ2VuZXJhdGVfb3Bl
bihHZW5lcmF0b3IuZnJvbnRlbmRfZG9tYWluX2NsYXNzX2xpbmVzKQotCi0gICAgICAgICAgICAg
ICAgZm9yIGpzb25fZXZlbnQgaW4ganNvbl9kb21haW5bImV2ZW50cyJdOgotICAgICAgICAgICAg
ICAgICAgICBHZW5lcmF0b3IucHJvY2Vzc19ldmVudChqc29uX2V2ZW50LCBkb21haW5fbmFtZSwg
ZnJvbnRlbmRfbWV0aG9kX2RlY2xhcmF0aW9uX2xpbmVzKQotCi0gICAgICAgICAgICAgICAgR2Vu
ZXJhdG9yLmZyb250ZW5kX2RvbWFpbl9jbGFzc19saW5lcy5hcHBlbmQoVGVtcGxhdGVzLmZyb250
ZW5kX2RvbWFpbl9jbGFzcy5zdWJzdGl0dXRlKE5vbmUsCi0gICAgICAgICAgICAgICAgICAgIGV4
cG9ydE1hY3JvPUlOU1BFQ1RPUl9UWVBFU19HRU5FUkFUT1JfQ09ORklHX01BUFtvdXRwdXRfdHlw
ZV1bImV4cG9ydF9tYWNybyJdLAotICAgICAgICAgICAgICAgICAgICBkb21haW5DbGFzc05hbWU9
Ikluc3BlY3RvciVzRnJvbnRlbmREaXNwYXRjaGVyIiAlIGRvbWFpbl9uYW1lLAotICAgICAgICAg
ICAgICAgICAgICBmcm9udGVuZERvbWFpbk1ldGhvZERlY2xhcmF0aW9ucz0iIi5qb2luKGZsYXR0
ZW5fbGlzdChmcm9udGVuZF9tZXRob2RfZGVjbGFyYXRpb25fbGluZXMpKSkpCi0KLSAgICAgICAg
ICAgICAgICBpZiBkb21haW5fZ3VhcmQ6Ci0gICAgICAgICAgICAgICAgICAgIGRvbWFpbl9ndWFy
ZC5nZW5lcmF0ZV9jbG9zZShHZW5lcmF0b3IuZnJvbnRlbmRfbWV0aG9kX2xpc3QpCi0gICAgICAg
ICAgICAgICAgICAgIGRvbWFpbl9ndWFyZC5nZW5lcmF0ZV9jbG9zZShHZW5lcmF0b3IuZnJvbnRl
bmRfZG9tYWluX2NsYXNzX2xpbmVzKQotCi0gICAgICAgICAgICBkaXNwYXRjaGVyX25hbWUgPSAi
SW5zcGVjdG9yIiArIENhcGl0YWxpemVyLmxvd2VyX2NhbWVsX2Nhc2VfdG9fdXBwZXIoZG9tYWlu
X25hbWUpICsgIkJhY2tlbmREaXNwYXRjaGVyIgotICAgICAgICAgICAgYWdlbnRfaW50ZXJmYWNl
X25hbWUgPSBkaXNwYXRjaGVyX25hbWUgKyAiSGFuZGxlciIKLQotICAgICAgICAgICAgaWYgImNv
bW1hbmRzIiBpbiBqc29uX2RvbWFpbjoKLSAgICAgICAgICAgICAgICBHZW5lcmF0b3IuYmFja2Vu
ZF9kaXNwYXRjaGVyX2ludGVyZmFjZV9saXN0LmFwcGVuZCgiY2xhc3MgJXMgJXMgZmluYWwgOiBw
dWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7
XG4iICUgKElOU1BFQ1RPUl9UWVBFU19HRU5FUkFUT1JfQ09ORklHX01BUFtvdXRwdXRfdHlwZV1b
ImV4cG9ydF9tYWNybyJdLCBkaXNwYXRjaGVyX25hbWUpKQotICAgICAgICAgICAgICAgIEdlbmVy
YXRvci5iYWNrZW5kX2Rpc3BhdGNoZXJfaW50ZXJmYWNlX2xpc3QuYXBwZW5kKCJwdWJsaWM6XG4i
KQotICAgICAgICAgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX2Rpc3BhdGNoZXJfaW50ZXJmYWNl
X2xpc3QuYXBwZW5kKCIgICAgc3RhdGljIFBhc3NSZWZQdHI8JXM+IGNyZWF0ZShJbnNwZWN0b3I6
Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiwgJXMqKTtcbiIgJSAoZGlzcGF0Y2hlcl9uYW1l
LCBhZ2VudF9pbnRlcmZhY2VfbmFtZSkpCi0gICAgICAgICAgICAgICAgR2VuZXJhdG9yLmJhY2tl
bmRfZGlzcGF0Y2hlcl9pbnRlcmZhY2VfbGlzdC5hcHBlbmQoIiAgICB2aXJ0dWFsIHZvaWQgZGlz
cGF0Y2gobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBQYXNzUmVmUHRyPEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBtZXNzYWdlKSBvdmVycmlkZTtcbiIpCi0gICAgICAgICAg
ICAgICAgR2VuZXJhdG9yLmJhY2tlbmRfZGlzcGF0Y2hlcl9pbnRlcmZhY2VfbGlzdC5hcHBlbmQo
InByaXZhdGU6XG4iKQotCi0gICAgICAgICAgICAgICAgR2VuZXJhdG9yLmJhY2tlbmRfaGFuZGxl
cl9pbnRlcmZhY2VfbGlzdC5hcHBlbmQoImNsYXNzICVzICVzIHtcbiIgJSAoSU5TUEVDVE9SX1RZ
UEVTX0dFTkVSQVRPUl9DT05GSUdfTUFQW291dHB1dF90eXBlXVsiZXhwb3J0X21hY3JvIl0sIGFn
ZW50X2ludGVyZmFjZV9uYW1lKSkKLSAgICAgICAgICAgICAgICBHZW5lcmF0b3IuYmFja2VuZF9o
YW5kbGVyX2ludGVyZmFjZV9saXN0LmFwcGVuZCgicHVibGljOlxuIikKLQotICAgICAgICAgICAg
ICAgIGJhY2tlbmRfbWV0aG9kX2NvdW50ID0gbGVuKEdlbmVyYXRvci5iYWNrZW5kX21ldGhvZF9p
bXBsZW1lbnRhdGlvbl9saXN0KQotCi0gICAgICAgICAgICAgICAgZGlzcGF0Y2hlcl9pZl9jaGFp
biA9IFtdCi0gICAgICAgICAgICAgICAgZGlzcGF0Y2hlcl9jb21tYW5kc19saXN0ID0gW10KLSAg
ICAgICAgICAgICAgICBmb3IganNvbl9jb21tYW5kIGluIGpzb25fZG9tYWluWyJjb21tYW5kcyJd
OgotICAgICAgICAgICAgICAgICAgICBHZW5lcmF0b3IucHJvY2Vzc19jb21tYW5kKGpzb25fY29t
bWFuZCwgZG9tYWluX25hbWUsIGFnZW50X2ludGVyZmFjZV9uYW1lLCBkaXNwYXRjaGVyX25hbWUs
IGRpc3BhdGNoZXJfaWZfY2hhaW4sIGRpc3BhdGNoZXJfY29tbWFuZHNfbGlzdCkKLQotICAgICAg
ICAgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX2hhbmRsZXJfaW50ZXJmYWNlX2xpc3QuYXBwZW5k
KCJwcm90ZWN0ZWQ6XG4iKQotICAgICAgICAgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX2hhbmRs
ZXJfaW50ZXJmYWNlX2xpc3QuYXBwZW5kKCIgICAgdmlydHVhbCB+JXMoKTtcbiIgJSBhZ2VudF9p
bnRlcmZhY2VfbmFtZSkKLSAgICAgICAgICAgICAgICBHZW5lcmF0b3IuYmFja2VuZF9oYW5kbGVy
X2ludGVyZmFjZV9saXN0LmFwcGVuZCgifTtcblxuIikKLQotICAgICAgICAgICAgICAgIEdlbmVy
YXRvci5iYWNrZW5kX2hhbmRsZXJfaW1wbGVtZW50YXRpb25fbGlzdC5hcHBlbmQoIiVzOjp+JXMo
KSB7IH1cbiIgJSAoYWdlbnRfaW50ZXJmYWNlX25hbWUsIGFnZW50X2ludGVyZmFjZV9uYW1lKSkK
LQotICAgICAgICAgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX2Rpc3BhdGNoZXJfaW50ZXJmYWNl
X2xpc3QuYXBwZW5kKCJwcml2YXRlOlxuIikKLSAgICAgICAgICAgICAgICBHZW5lcmF0b3IuYmFj
a2VuZF9kaXNwYXRjaGVyX2ludGVyZmFjZV9saXN0LmFwcGVuZCgiICAgICVzKEluc3BlY3Rvcjo6
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqLCAlcyopO1xuIiAlIChkaXNwYXRjaGVyX25hbWUs
IGFnZW50X2ludGVyZmFjZV9uYW1lKSkKLSAgICAgICAgICAgICAgICBHZW5lcmF0b3IuYmFja2Vu
ZF9kaXNwYXRjaGVyX2ludGVyZmFjZV9saXN0LmFwcGVuZCgiICAgICVzKiBtX2FnZW50O1xuIiAl
IGFnZW50X2ludGVyZmFjZV9uYW1lKQotICAgICAgICAgICAgICAgIEdlbmVyYXRvci5iYWNrZW5k
X2Rpc3BhdGNoZXJfaW50ZXJmYWNlX2xpc3QuYXBwZW5kKCJ9O1xuXG4iKQotCi0gICAgICAgICAg
ICAgICAgR2VuZXJhdG9yLmJhY2tlbmRfbWV0aG9kX2ltcGxlbWVudGF0aW9uX2xpc3QuaW5zZXJ0
KGJhY2tlbmRfbWV0aG9kX2NvdW50LCBUZW1wbGF0ZXMuYmFja2VuZF9kaXNwYXRjaGVyX2NvbnN0
cnVjdG9yLnN1YnN0aXR1dGUoTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgZG9tYWluTmFtZT1k
b21haW5fbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hlck5hbWU9ZGlzcGF0Y2hl
cl9uYW1lLAotICAgICAgICAgICAgICAgICAgICBhZ2VudE5hbWU9YWdlbnRfaW50ZXJmYWNlX25h
bWUpKQotCi0gICAgICAgICAgICAgICAgaWYgbGVuKGpzb25fZG9tYWluWyJjb21tYW5kcyJdKSA8
PSA1OgotICAgICAgICAgICAgICAgICAgICBHZW5lcmF0b3IuYmFja2VuZF9tZXRob2RfaW1wbGVt
ZW50YXRpb25fbGlzdC5pbnNlcnQoYmFja2VuZF9tZXRob2RfY291bnQgKyAxLCBUZW1wbGF0ZXMu
YmFja2VuZF9kaXNwYXRjaGVyX2Rpc3BhdGNoX21ldGhvZF9zaW1wbGUuc3Vic3RpdHV0ZShOb25l
LAotICAgICAgICAgICAgICAgICAgICAgICAgZG9tYWluTmFtZT1kb21haW5fbmFtZSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoZXJOYW1lPWRpc3BhdGNoZXJfbmFtZSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGlmQ2hhaW49IlxuIi5qb2luKGRpc3BhdGNoZXJfaWZfY2hhaW4p
KSkKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBHZW5lcmF0b3Iu
YmFja2VuZF9tZXRob2RfaW1wbGVtZW50YXRpb25fbGlzdC5pbnNlcnQoYmFja2VuZF9tZXRob2Rf
Y291bnQgKyAxLCBUZW1wbGF0ZXMuYmFja2VuZF9kaXNwYXRjaGVyX2Rpc3BhdGNoX21ldGhvZC5z
dWJzdGl0dXRlKE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICBkb21haW5OYW1lPWRvbWFp
bl9uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hlck5hbWU9ZGlzcGF0Y2hl
cl9uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hlckNvbW1hbmRzPSJcbiIu
am9pbihkaXNwYXRjaGVyX2NvbW1hbmRzX2xpc3QpKSkKLQotICAgICAgICAgICAgICAgIGlmIGRv
bWFpbl9ndWFyZDoKLSAgICAgICAgICAgICAgICAgICAgZm9yIGwgaW4gcmV2ZXJzZWQoZmlyc3Rf
Y3ljbGVfZ3VhcmRhYmxlX2xpc3RfbGlzdCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBkb21h
aW5fZ3VhcmQuZ2VuZXJhdGVfY2xvc2UobCkKLSAgICAgICAgICAgICAgICBHZW5lcmF0b3IuYmFj
a2VuZF9qc19kb21haW5faW5pdGlhbGl6ZXJfbGlzdC5hcHBlbmQoIlxuIikKLQotICAgIEBzdGF0
aWNtZXRob2QKLSAgICBkZWYgcHJvY2Vzc19lbnVtKGpzb25fZW51bSwgZW51bV9uYW1lKToKLSAg
ICAgICAgZW51bV9tZW1iZXJzID0gW10KLSAgICAgICAgZm9yIG1lbWJlciBpbiBqc29uX2VudW1b
ImVudW0iXToKLSAgICAgICAgICAgIGVudW1fbWVtYmVycy5hcHBlbmQoIiVzOiBcIiVzXCIiICUg
KGZpeF9jYW1lbF9jYXNlKG1lbWJlciksIG1lbWJlcikpCi0KLSAgICAgICAgR2VuZXJhdG9yLmJh
Y2tlbmRfanNfZG9tYWluX2luaXRpYWxpemVyX2xpc3QuYXBwZW5kKCJJbnNwZWN0b3JCYWNrZW5k
LnJlZ2lzdGVyRW51bShcIiVzXCIsIHslc30pO1xuIiAlICgKLSAgICAgICAgICAgIGVudW1fbmFt
ZSwgIiwgIi5qb2luKGVudW1fbWVtYmVycykpKQotCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRl
ZiBwcm9jZXNzX2V2ZW50KGpzb25fZXZlbnQsIGRvbWFpbl9uYW1lLCBmcm9udGVuZF9tZXRob2Rf
ZGVjbGFyYXRpb25fbGluZXMpOgotICAgICAgICBldmVudF9uYW1lID0ganNvbl9ldmVudFsibmFt
ZSJdCi0KLSAgICAgICAgYWRfaG9jX3R5cGVfb3V0cHV0ID0gW10KLSAgICAgICAgZnJvbnRlbmRf
bWV0aG9kX2RlY2xhcmF0aW9uX2xpbmVzLmFwcGVuZChhZF9ob2NfdHlwZV9vdXRwdXQpCi0gICAg
ICAgIGFkX2hvY190eXBlX3dyaXRlciA9IFdyaXRlcihhZF9ob2NfdHlwZV9vdXRwdXQsICIgICAg
ICAgICIpCi0KLSAgICAgICAgZGVjbF9wYXJhbWV0ZXJfbGlzdCA9IFtdCi0KLSAgICAgICAganNv
bl9wYXJhbWV0ZXJzID0ganNvbl9ldmVudC5nZXQoInBhcmFtZXRlcnMiKQotICAgICAgICBHZW5l
cmF0b3IuZ2VuZXJhdGVfc2VuZF9tZXRob2QoanNvbl9wYXJhbWV0ZXJzLCBldmVudF9uYW1lLCBk
b21haW5fbmFtZSwgYWRfaG9jX3R5cGVfd3JpdGVyLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZGVjbF9wYXJhbWV0ZXJfbGlzdCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEdlbmVyYXRvci5FdmVudE1ldGhvZFN0cnVjdFRlbXBsYXRlLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2VuZXJhdG9yLmZyb250ZW5k
X21ldGhvZF9saXN0LCBUZW1wbGF0ZXMuZnJvbnRlbmRfbWV0aG9kLCB7ImV2ZW50TmFtZSI6IGV2
ZW50X25hbWV9KQotCi0gICAgICAgIGJhY2tlbmRfanNfZXZlbnRfcGFyYW1fbGlzdCA9IFtdCi0g
ICAgICAgIGlmIGpzb25fcGFyYW1ldGVyczoKLSAgICAgICAgICAgIGZvciBwYXJhbWV0ZXIgaW4g
anNvbl9wYXJhbWV0ZXJzOgotICAgICAgICAgICAgICAgIHBhcmFtZXRlcl9uYW1lID0gcGFyYW1l
dGVyWyJuYW1lIl0KLSAgICAgICAgICAgICAgICBiYWNrZW5kX2pzX2V2ZW50X3BhcmFtX2xpc3Qu
YXBwZW5kKCJcIiVzXCIiICUgcGFyYW1ldGVyX25hbWUpCi0KLSAgICAgICAgZnJvbnRlbmRfbWV0
aG9kX2RlY2xhcmF0aW9uX2xpbmVzLmFwcGVuZCgKLSAgICAgICAgICAgICIgICAgdm9pZCAlcygl
cyk7XG4iICUgKGV2ZW50X25hbWUsICIsICIuam9pbihkZWNsX3BhcmFtZXRlcl9saXN0KSkpCi0K
LSAgICAgICAgR2VuZXJhdG9yLmJhY2tlbmRfanNfZG9tYWluX2luaXRpYWxpemVyX2xpc3QuYXBw
ZW5kKCJJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRXZlbnQoXCIlcy4lc1wiLCBbJXNdKTtcbiIg
JSAoCi0gICAgICAgICAgICBkb21haW5fbmFtZSwgZXZlbnRfbmFtZSwgIiwgIi5qb2luKGJhY2tl
bmRfanNfZXZlbnRfcGFyYW1fbGlzdCkpKQotCi0gICAgY2xhc3MgRXZlbnRNZXRob2RTdHJ1Y3RU
ZW1wbGF0ZToKLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBkZWYgYXBwZW5kX3Byb2xv
ZyhsaW5lX2xpc3QpOgotICAgICAgICAgICAgbGluZV9saXN0LmFwcGVuZCgiICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7
XG4iKQotCi0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGFwcGVuZF9lcGlsb2co
bGluZV9saXN0KToKLSAgICAgICAgICAgIGxpbmVfbGlzdC5hcHBlbmQoIiAgICBqc29uTWVzc2Fn
ZS0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbChcInBhcmFtc1wiKSwgcGFyYW1zT2JqZWN0KTtcbiIp
Ci0KLSAgICAgICAgY29udGFpbmVyX25hbWUgPSAicGFyYW1zT2JqZWN0IgotCi0gICAgQHN0YXRp
Y21ldGhvZAotICAgIGRlZiBwcm9jZXNzX2NvbW1hbmQoanNvbl9jb21tYW5kLCBkb21haW5fbmFt
ZSwgYWdlbnRfaW50ZXJmYWNlX25hbWUsIGRpc3BhdGNoZXJfbmFtZSwgZGlzcGF0Y2hlcl9pZl9j
aGFpbiwgZGlzcGF0Y2hlcl9jb21tYW5kc19saXN0KToKLSAgICAgICAganNvbl9jb21tYW5kX25h
bWUgPSBqc29uX2NvbW1hbmRbIm5hbWUiXQotCi0gICAgICAgIGFkX2hvY190eXBlX291dHB1dCA9
IFtdCi0gICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX2hhbmRsZXJfaW50ZXJmYWNlX2xpc3QuYXBw
ZW5kKGFkX2hvY190eXBlX291dHB1dCkKLSAgICAgICAgYWRfaG9jX3R5cGVfd3JpdGVyID0gV3Jp
dGVyKGFkX2hvY190eXBlX291dHB1dCwgIiAgICAiKQotCi0gICAgICAgIEdlbmVyYXRvci5iYWNr
ZW5kX2Rpc3BhdGNoZXJfaW50ZXJmYWNlX2xpc3QuYXBwZW5kKCIgICAgdm9pZCAlcyhsb25nIGNh
bGxJZCwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpO1xuIiAlIGpz
b25fY29tbWFuZF9uYW1lKQotCi0gICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX2hhbmRsZXJfaW50
ZXJmYWNlX2xpc3QuYXBwZW5kKCIgICAgdmlydHVhbCB2b2lkICVzKEVycm9yU3RyaW5nKiIgJSBq
c29uX2NvbW1hbmRfbmFtZSkKLQotICAgICAgICBpZiBub3QgZGlzcGF0Y2hlcl9pZl9jaGFpbjoK
LSAgICAgICAgICAgIGRpc3BhdGNoZXJfaWZfY2hhaW4uYXBwZW5kKCIgICAgaWYgKG1ldGhvZCA9
PSBcIiVzXCIpIiAlIGpzb25fY29tbWFuZF9uYW1lKQotICAgICAgICBlbHNlOgotICAgICAgICAg
ICAgZGlzcGF0Y2hlcl9pZl9jaGFpbi5hcHBlbmQoIiAgICBlbHNlIGlmIChtZXRob2QgPT0gXCIl
c1wiKSIgJSBqc29uX2NvbW1hbmRfbmFtZSkKLSAgICAgICAgZGlzcGF0Y2hlcl9pZl9jaGFpbi5h
cHBlbmQoIiAgICAgICAgJXMoY2FsbElkLCAqbWVzc2FnZS5nZXQoKSk7IiAlIGpzb25fY29tbWFu
ZF9uYW1lKQotICAgICAgICBkaXNwYXRjaGVyX2NvbW1hbmRzX2xpc3QuYXBwZW5kKCIgICAgICAg
ICAgICB7IFwiJXNcIiwgJiVzOjolcyB9LCIgJSAoanNvbl9jb21tYW5kX25hbWUsIGRpc3BhdGNo
ZXJfbmFtZSwganNvbl9jb21tYW5kX25hbWUpKQotCi0gICAgICAgIG1ldGhvZF9pbl9wYXJhbXNf
aGFuZGxpbmcgPSBbXQotICAgICAgICBtZXRob2RfZGlzcGF0Y2hfaGFuZGxpbmcgPSBbXQotICAg
ICAgICBtZXRob2Rfb3V0X3BhcmFtc19oYW5kbGluZyA9IFtdCi0gICAgICAgIG1ldGhvZF9lbmRp
bmdfaGFuZGxpbmcgPSBbXQotICAgICAgICBtZXRob2RfcmVxdWVzdF9tZXNzYWdlX3BhcmFtX25h
bWUgPSAiIgotICAgICAgICBhZ2VudF9jYWxsX3BhcmFtX2xpc3QgPSBbXQotICAgICAgICBqc19w
YXJhbWV0ZXJzX3RleHQgPSAiIgotICAgICAgICBpZiAicGFyYW1ldGVycyIgaW4ganNvbl9jb21t
YW5kOgotICAgICAgICAgICAganNvbl9wYXJhbXMgPSBqc29uX2NvbW1hbmRbInBhcmFtZXRlcnMi
XQotICAgICAgICAgICAgbWV0aG9kX3JlcXVlc3RfbWVzc2FnZV9wYXJhbV9uYW1lID0gIiBtZXNz
YWdlIgotICAgICAgICAgICAgbWV0aG9kX2luX3BhcmFtc19oYW5kbGluZy5hcHBlbmQoIiAgICBS
ZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNy
ZWF0ZSgpO1xuIikKLSAgICAgICAgICAgIG1ldGhvZF9pbl9wYXJhbXNfaGFuZGxpbmcuYXBwZW5k
KCIgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gbWVzc2FnZS5n
ZXRPYmplY3QoQVNDSUlMaXRlcmFsKFwicGFyYW1zXCIpKTtcbiIpCi0gICAgICAgICAgICBtZXRo
b2RfaW5fcGFyYW1zX2hhbmRsaW5nLmFwcGVuZCgiICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1z
Q29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpO1xuIikKLSAgICAgICAgICAgIG1l
dGhvZF9pbl9wYXJhbXNfaGFuZGxpbmcuYXBwZW5kKCIgICAgSW5zcGVjdG9yQXJyYXkqIHByb3Rv
Y29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7XG4iKQotICAgICAgICAgICAganNf
cGFyYW1fbGlzdCA9IFtdCi0KLSAgICAgICAgICAgIGZvciBqc29uX3BhcmFtZXRlciBpbiBqc29u
X3BhcmFtczoKLSAgICAgICAgICAgICAgICBqc29uX3BhcmFtX25hbWUgPSBqc29uX3BhcmFtZXRl
clsibmFtZSJdCi0gICAgICAgICAgICAgICAgcGFyYW1fcmF3X3R5cGUgPSByZXNvbHZlX3BhcmFt
X3Jhd190eXBlKGpzb25fcGFyYW1ldGVyLCBkb21haW5fbmFtZSkKLQotICAgICAgICAgICAgICAg
IGdldHRlcl9uYW1lID0gcGFyYW1fcmF3X3R5cGUuZ2V0X2dldHRlcl9uYW1lKCkKLQotICAgICAg
ICAgICAgICAgIG9wdGlvbmFsID0ganNvbl9wYXJhbWV0ZXIuZ2V0KCJvcHRpb25hbCIpCi0KLSAg
ICAgICAgICAgICAgICBub25fb3B0aW9uYWxfdHlwZV9tb2RlbCA9IHBhcmFtX3Jhd190eXBlLmdl
dF9yYXdfdHlwZV9tb2RlbCgpCi0gICAgICAgICAgICAgICAgaWYgb3B0aW9uYWw6Ci0gICAgICAg
ICAgICAgICAgICAgIHR5cGVfbW9kZWwgPSBub25fb3B0aW9uYWxfdHlwZV9tb2RlbC5nZXRfb3B0
aW9uYWwoKQotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIHR5cGVf
bW9kZWwgPSBub25fb3B0aW9uYWxfdHlwZV9tb2RlbAotCi0gICAgICAgICAgICAgICAgaWYgb3B0
aW9uYWw6Ci0gICAgICAgICAgICAgICAgICAgIGNvZGUgPSAoIiAgICBib29sICVzX3ZhbHVlRm91
bmQgPSBmYWxzZTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICVzIGluXyVz
ID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldCVzKHBhcmFtc0NvbnRhaW5lclB0ciwg
QVNDSUlMaXRlcmFsKFwiJXNcIiksICYlc192YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0cik7
XG4iICUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIChqc29uX3BhcmFtX25hbWUsIG5vbl9v
cHRpb25hbF90eXBlX21vZGVsLmdldF9jb21tYW5kX3JldHVybl9wYXNzX21vZGVsKCkuZ2V0X3Jl
dHVybl92YXJfdHlwZSgpLCBqc29uX3BhcmFtX25hbWUsIGdldHRlcl9uYW1lLCBqc29uX3BhcmFt
X25hbWUsIGpzb25fcGFyYW1fbmFtZSkpCi0gICAgICAgICAgICAgICAgICAgIHBhcmFtID0gIiwg
JXNfdmFsdWVGb3VuZCA/ICZpbl8lcyA6IG51bGxwdHIiICUgKGpzb25fcGFyYW1fbmFtZSwganNv
bl9wYXJhbV9uYW1lKQotICAgICAgICAgICAgICAgICAgICAjIEZJWE1FOiBwYXNzIG9wdGlvbmFs
IHJlZnB0ci12YWx1ZXMgYXMgUGFzc1JlZlB0cgotICAgICAgICAgICAgICAgICAgICBmb3JtYWxf
cGFyYW1fdHlwZV9wYXR0ZXJuID0gImNvbnN0ICVzKiIKLSAgICAgICAgICAgICAgICBlbHNlOgot
ICAgICAgICAgICAgICAgICAgICBjb2RlID0gKCIgICAgJXMgaW5fJXMgPSBJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlcjo6Z2V0JXMocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoXCIl
c1wiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnNQdHIpO1xuIiAlCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKG5vbl9vcHRpb25hbF90eXBlX21vZGVsLmdldF9jb21tYW5kX3JldHVybl9w
YXNzX21vZGVsKCkuZ2V0X3JldHVybl92YXJfdHlwZSgpLCBqc29uX3BhcmFtX25hbWUsIGdldHRl
cl9uYW1lLCBqc29uX3BhcmFtX25hbWUpKQotICAgICAgICAgICAgICAgICAgICBwYXJhbSA9ICIs
IGluXyVzIiAlIGpzb25fcGFyYW1fbmFtZQotICAgICAgICAgICAgICAgICAgICAjIEZJWE1FOiBw
YXNzIG5vdC1vcHRpb25hbCByZWZwdHItdmFsdWVzIGFzIE5vbk51bGxQYXNzUmVmUHRyCi0gICAg
ICAgICAgICAgICAgICAgIGlmIHBhcmFtX3Jhd190eXBlLmlzX2hlYXZ5X3ZhbHVlKCk6Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBmb3JtYWxfcGFyYW1fdHlwZV9wYXR0ZXJuID0gImNvbnN0ICVz
JiIKLSAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAgIGZv
cm1hbF9wYXJhbV90eXBlX3BhdHRlcm4gPSAiJXMiCi0KLSAgICAgICAgICAgICAgICBtZXRob2Rf
aW5fcGFyYW1zX2hhbmRsaW5nLmFwcGVuZChjb2RlKQotICAgICAgICAgICAgICAgIGFnZW50X2Nh
bGxfcGFyYW1fbGlzdC5hcHBlbmQocGFyYW0pCi0gICAgICAgICAgICAgICAgR2VuZXJhdG9yLmJh
Y2tlbmRfaGFuZGxlcl9pbnRlcmZhY2VfbGlzdC5hcHBlbmQoIiwgJXMgaW5fJXMiICUgKGZvcm1h
bF9wYXJhbV90eXBlX3BhdHRlcm4gJSBub25fb3B0aW9uYWxfdHlwZV9tb2RlbC5nZXRfY29tbWFu
ZF9yZXR1cm5fcGFzc19tb2RlbCgpLmdldF9yZXR1cm5fdmFyX3R5cGUoKSwganNvbl9wYXJhbV9u
YW1lKSkKLQotICAgICAgICAgICAgICAgIGpzX2JpbmRfdHlwZSA9IHBhcmFtX3Jhd190eXBlLmdl
dF9qc19iaW5kX3R5cGUoKQotICAgICAgICAgICAgICAgIGpzX3BhcmFtX3RleHQgPSAie1wibmFt
ZVwiOiBcIiVzXCIsIFwidHlwZVwiOiBcIiVzXCIsIFwib3B0aW9uYWxcIjogJXN9IiAlICgKLSAg
ICAgICAgICAgICAgICAgICAganNvbl9wYXJhbV9uYW1lLAotICAgICAgICAgICAgICAgICAgICBq
c19iaW5kX3R5cGUsCi0gICAgICAgICAgICAgICAgICAgICgidHJ1ZSIgaWYgKCJvcHRpb25hbCIg
aW4ganNvbl9wYXJhbWV0ZXIgYW5kIGpzb25fcGFyYW1ldGVyWyJvcHRpb25hbCJdKSBlbHNlICJm
YWxzZSIpKQotCi0gICAgICAgICAgICAgICAganNfcGFyYW1fbGlzdC5hcHBlbmQoanNfcGFyYW1f
dGV4dCkKLQotICAgICAgICAgICAgbWV0aG9kX2luX3BhcmFtc19oYW5kbGluZy5hcHBlbmQoIiAg
ICBpZiAocHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7XG4iKQotICAgICAgICAgICAgbWV0aG9k
X2luX3BhcmFtc19oYW5kbGluZy5hcHBlbmQoIiAgICAgICAgU3RyaW5nIGVycm9yTWVzc2FnZSA9
IFN0cmluZzo6Zm9ybWF0KFwiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclJXMnIGNhbid0IGJl
IHByb2Nlc3NlZFwiLCBcIiVzLiVzXCIpO1xuIiAlIChkb21haW5fbmFtZSwganNvbl9jb21tYW5k
X25hbWUpKQotICAgICAgICAgICAgbWV0aG9kX2luX3BhcmFtc19oYW5kbGluZy5hcHBlbmQoIiAg
ICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElkLCBJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFtcywgZXJyb3JNZXNzYWdlLCBw
cm90b2NvbEVycm9ycy5yZWxlYXNlKCkpO1xuIikKLSAgICAgICAgICAgIG1ldGhvZF9pbl9wYXJh
bXNfaGFuZGxpbmcuYXBwZW5kKCIgICAgICAgIHJldHVybjtcbiIpCi0gICAgICAgICAgICBtZXRo
b2RfaW5fcGFyYW1zX2hhbmRsaW5nLmFwcGVuZCgiICAgIH1cbiIpCi0gICAgICAgICAgICBtZXRo
b2RfaW5fcGFyYW1zX2hhbmRsaW5nLmFwcGVuZCgiXG4iKQotCi0gICAgICAgICAgICBqc19wYXJh
bWV0ZXJzX3RleHQgPSAiLCAiLmpvaW4oanNfcGFyYW1fbGlzdCkKLQotICAgICAgICBtZXRob2Rf
ZGlzcGF0Y2hfaGFuZGxpbmcuYXBwZW5kKCIgICAgRXJyb3JTdHJpbmcgZXJyb3I7XG4iKQotICAg
ICAgICBtZXRob2RfZGlzcGF0Y2hfaGFuZGxpbmcuYXBwZW5kKCIgICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTtcbiIpCi0KLSAgICAg
ICAgaWYganNvbl9jb21tYW5kLmdldCgiYXN5bmMiKSA9PSBUcnVlOgotICAgICAgICAgICAgY2Fs
bGJhY2tfbmFtZSA9IENhcGl0YWxpemVyLmxvd2VyX2NhbWVsX2Nhc2VfdG9fdXBwZXIoanNvbl9j
b21tYW5kX25hbWUpICsgIkNhbGxiYWNrIgotCi0gICAgICAgICAgICBjYWxsYmFja19vdXRwdXQg
PSBbXQotICAgICAgICAgICAgY2FsbGJhY2tfd3JpdGVyID0gV3JpdGVyKGNhbGxiYWNrX291dHB1
dCwgYWRfaG9jX3R5cGVfd3JpdGVyLmdldF9pbmRlbnQoKSkKLQotICAgICAgICAgICAgZGVjbF9w
YXJhbWV0ZXJfbGlzdCA9IFtdCi0gICAgICAgICAgICBHZW5lcmF0b3IuZ2VuZXJhdGVfc2VuZF9t
ZXRob2QoanNvbl9jb21tYW5kLmdldCgicmV0dXJucyIpLCBqc29uX2NvbW1hbmRfbmFtZSwgZG9t
YWluX25hbWUsIGFkX2hvY190eXBlX3dyaXRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkZWNsX3BhcmFtZXRlcl9saXN0LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdlbmVyYXRvci5DYWxsYmFja01ldGhvZFN0cnVjdFRl
bXBsYXRlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdlbmVy
YXRvci5iYWNrZW5kX21ldGhvZF9pbXBsZW1lbnRhdGlvbl9saXN0LCBUZW1wbGF0ZXMuY2FsbGJh
Y2tfbWV0aG9kLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsi
Y2FsbGJhY2tOYW1lIjogY2FsbGJhY2tfbmFtZSwgImhhbmRsZXJOYW1lIjogYWdlbnRfaW50ZXJm
YWNlX25hbWV9KQotCi0gICAgICAgICAgICBjYWxsYmFja193cml0ZXIubmV3bGluZSgiY2xhc3Mg
IiArIGNhbGxiYWNrX25hbWUgKyAiIDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZSB7XG4iKQotICAgICAgICAgICAgY2FsbGJhY2tfd3Jp
dGVyLm5ld2xpbmUoInB1YmxpYzpcbiIpCi0gICAgICAgICAgICBjYWxsYmFja193cml0ZXIubmV3
bGluZSgiICAgICIgKyBjYWxsYmFja19uYW1lICsgIihQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXI+LCBpbnQgaWQpO1xuIikKLSAgICAgICAgICAgIGNhbGxi
YWNrX3dyaXRlci5uZXdsaW5lKCIgICAgdm9pZCBzZW5kU3VjY2VzcygiICsgIiwgIi5qb2luKGRl
Y2xfcGFyYW1ldGVyX2xpc3QpICsgIik7XG4iKQotICAgICAgICAgICAgY2FsbGJhY2tfd3JpdGVy
Lm5ld2xpbmUoIn07XG4iKQotCi0gICAgICAgICAgICBhZF9ob2NfdHlwZV9vdXRwdXQuYXBwZW5k
KGNhbGxiYWNrX291dHB1dCkKLQotICAgICAgICAgICAgbWV0aG9kX2Rpc3BhdGNoX2hhbmRsaW5n
LmFwcGVuZCgiICAgIFJlZlB0cjwlczo6JXM+IGNhbGxiYWNrID0gYWRvcHRSZWYobmV3ICVzOjol
cyhtX2JhY2tlbmREaXNwYXRjaGVyLGNhbGxJZCkpO1xuIiAlIChhZ2VudF9pbnRlcmZhY2VfbmFt
ZSwgY2FsbGJhY2tfbmFtZSwgYWdlbnRfaW50ZXJmYWNlX25hbWUsIGNhbGxiYWNrX25hbWUpKQot
ICAgICAgICAgICAgbWV0aG9kX2VuZGluZ19oYW5kbGluZy5hcHBlbmQoIiAgICBpZiAoZXJyb3Iu
bGVuZ3RoKCkpIHtcbiIpCi0gICAgICAgICAgICBtZXRob2RfZW5kaW5nX2hhbmRsaW5nLmFwcGVu
ZCgiICAgICAgICBjYWxsYmFjay0+ZGlzYWJsZSgpO1xuIikKLSAgICAgICAgICAgIG1ldGhvZF9l
bmRpbmdfaGFuZGxpbmcuYXBwZW5kKCIgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9y
dFByb3RvY29sRXJyb3IoJmNhbGxJZCwgSW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTtcbiIpCi0gICAgICAgICAgICBtZXRob2RfZW5kaW5n
X2hhbmRsaW5nLmFwcGVuZCgiICAgICAgICByZXR1cm47XG4iKQotICAgICAgICAgICAgbWV0aG9k
X2VuZGluZ19oYW5kbGluZy5hcHBlbmQoIiAgICB9IikKLQotICAgICAgICAgICAgYWdlbnRfY2Fs
bF9wYXJhbV9saXN0LmFwcGVuZCgiLCBjYWxsYmFjayIpCi0gICAgICAgICAgICBHZW5lcmF0b3Iu
YmFja2VuZF9oYW5kbGVyX2ludGVyZmFjZV9saXN0LmFwcGVuZCgiLCBQYXNzUmVmUHRyPCVzPiBj
YWxsYmFjayIgJSBjYWxsYmFja19uYW1lKQotICAgICAgICBlbGlmICJyZXR1cm5zIiBpbiBqc29u
X2NvbW1hbmQ6Ci0gICAgICAgICAgICBoYXNfbXVsdGlwbGVfcmV0dXJucyA9IGxlbihqc29uX2Nv
bW1hbmRbInJldHVybnMiXSkgPiAxCi0gICAgICAgICAgICBpZiBoYXNfbXVsdGlwbGVfcmV0dXJu
czoKLSAgICAgICAgICAgICAgICBtZXRob2Rfb3V0X3BhcmFtc19oYW5kbGluZy5hcHBlbmQoIiAg
ICBpZiAoIWVycm9yLmxlbmd0aCgpKSB7XG4iKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAg
ICAgICAgICBtZXRob2Rfb3V0X3BhcmFtc19oYW5kbGluZy5hcHBlbmQoIiAgICBpZiAoIWVycm9y
Lmxlbmd0aCgpKVxuIikKLQotICAgICAgICAgICAgZm9yIGpzb25fcmV0dXJuIGluIGpzb25fY29t
bWFuZFsicmV0dXJucyJdOgotCi0gICAgICAgICAgICAgICAganNvbl9yZXR1cm5fbmFtZSA9IGpz
b25fcmV0dXJuWyJuYW1lIl0KLQotICAgICAgICAgICAgICAgIG9wdGlvbmFsID0gYm9vbChqc29u
X3JldHVybi5nZXQoIm9wdGlvbmFsIikpCi0KLSAgICAgICAgICAgICAgICByZXR1cm5fdHlwZV9i
aW5kaW5nID0gR2VuZXJhdG9yLnJlc29sdmVfdHlwZV9hbmRfZ2VuZXJhdGVfYWRfaG9jKGpzb25f
cmV0dXJuLCBqc29uX2NvbW1hbmRfbmFtZSwgZG9tYWluX25hbWUsIGFkX2hvY190eXBlX3dyaXRl
ciwgYWdlbnRfaW50ZXJmYWNlX25hbWUgKyAiOjoiKQotCi0gICAgICAgICAgICAgICAgcmF3X3R5
cGUgPSByZXR1cm5fdHlwZV9iaW5kaW5nLnJlZHVjZV90b19yYXdfdHlwZSgpCi0gICAgICAgICAg
ICAgICAgc2V0dGVyX3R5cGUgPSByYXdfdHlwZS5nZXRfc2V0dGVyX25hbWUoKQotICAgICAgICAg
ICAgICAgIGluaXRpYWxpemVyID0gcmF3X3R5cGUuZ2V0X2NfaW5pdGlhbGl6ZXIoKQotCi0gICAg
ICAgICAgICAgICAgdHlwZV9tb2RlbCA9IHJldHVybl90eXBlX2JpbmRpbmcuZ2V0X3R5cGVfbW9k
ZWwoKQotICAgICAgICAgICAgICAgIGlmIG9wdGlvbmFsOgotICAgICAgICAgICAgICAgICAgICB0
eXBlX21vZGVsID0gdHlwZV9tb2RlbC5nZXRfb3B0aW9uYWwoKQotCi0gICAgICAgICAgICAgICAg
Y29kZSA9ICIgICAgJXMgb3V0XyVzO1xuIiAlICh0eXBlX21vZGVsLmdldF9jb21tYW5kX3JldHVy
bl9wYXNzX21vZGVsKCkuZ2V0X3JldHVybl92YXJfdHlwZSgpLCBqc29uX3JldHVybl9uYW1lKQot
ICAgICAgICAgICAgICAgIHBhcmFtID0gIiwgJXNvdXRfJXMiICUgKHR5cGVfbW9kZWwuZ2V0X2Nv
bW1hbmRfcmV0dXJuX3Bhc3NfbW9kZWwoKS5nZXRfb3V0cHV0X2FyZ3VtZW50X3ByZWZpeCgpLCBq
c29uX3JldHVybl9uYW1lKQotICAgICAgICAgICAgICAgIHZhcl9uYW1lID0gIm91dF8lcyIgJSBq
c29uX3JldHVybl9uYW1lCi0gICAgICAgICAgICAgICAgc2V0dGVyX2FyZ3VtZW50ID0gdHlwZV9t
b2RlbC5nZXRfY29tbWFuZF9yZXR1cm5fcGFzc19tb2RlbCgpLmdldF9vdXRwdXRfdG9fcmF3X2V4
cHJlc3Npb24oKSAlIHZhcl9uYW1lCi0gICAgICAgICAgICAgICAgaWYgcmV0dXJuX3R5cGVfYmlu
ZGluZy5nZXRfc2V0dGVyX3ZhbHVlX2V4cHJlc3Npb25fcGF0dGVybigpOgotICAgICAgICAgICAg
ICAgICAgICBzZXR0ZXJfYXJndW1lbnQgPSByZXR1cm5fdHlwZV9iaW5kaW5nLmdldF9zZXR0ZXJf
dmFsdWVfZXhwcmVzc2lvbl9wYXR0ZXJuKCkgJSAoSU5TUEVDVE9SX1RZUEVTX0dFTkVSQVRPUl9D
T05GSUdfTUFQW291dHB1dF90eXBlXVsicHJlZml4Il0sIHNldHRlcl9hcmd1bWVudCkKLQotICAg
ICAgICAgICAgICAgIGNvb2sgPSAiICAgICAgICByZXN1bHQtPnNldCVzKEFTQ0lJTGl0ZXJhbChc
IiVzXCIpLCAlcyk7XG4iICUgKHNldHRlcl90eXBlLCBqc29uX3JldHVybl9uYW1lLCBzZXR0ZXJf
YXJndW1lbnQpCi0KLSAgICAgICAgICAgICAgICBzZXRfY29uZGl0aW9uX3BhdHRlcm4gPSB0eXBl
X21vZGVsLmdldF9jb21tYW5kX3JldHVybl9wYXNzX21vZGVsKCkuZ2V0X3NldF9yZXR1cm5fY29u
ZGl0aW9uKCkKLSAgICAgICAgICAgICAgICBpZiBzZXRfY29uZGl0aW9uX3BhdHRlcm46Ci0gICAg
ICAgICAgICAgICAgICAgIGNvb2sgPSAoIiAgICAgICAgaWYgKCVzKVxuICAgICIgJSAoc2V0X2Nv
bmRpdGlvbl9wYXR0ZXJuICUgdmFyX25hbWUpKSArIGNvb2sKLSAgICAgICAgICAgICAgICBhbm5v
dGF0ZWRfdHlwZSA9IHR5cGVfbW9kZWwuZ2V0X2NvbW1hbmRfcmV0dXJuX3Bhc3NfbW9kZWwoKS5n
ZXRfb3V0cHV0X3BhcmFtZXRlcl90eXBlKCkKLQotICAgICAgICAgICAgICAgIHBhcmFtX25hbWUg
PSAib3V0XyVzIiAlIGpzb25fcmV0dXJuX25hbWUKLSAgICAgICAgICAgICAgICBpZiBvcHRpb25h
bDoKLSAgICAgICAgICAgICAgICAgICAgcGFyYW1fbmFtZSA9ICJvcHRfIiArIHBhcmFtX25hbWUK
LQotICAgICAgICAgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX2hhbmRsZXJfaW50ZXJmYWNlX2xp
c3QuYXBwZW5kKCIsICVzICVzIiAlIChhbm5vdGF0ZWRfdHlwZSwgcGFyYW1fbmFtZSkpCi0gICAg
ICAgICAgICAgICAgbWV0aG9kX291dF9wYXJhbXNfaGFuZGxpbmcuYXBwZW5kKGNvb2spCi0gICAg
ICAgICAgICAgICAgbWV0aG9kX2Rpc3BhdGNoX2hhbmRsaW5nLmFwcGVuZChjb2RlKQotCi0gICAg
ICAgICAgICAgICAgYWdlbnRfY2FsbF9wYXJhbV9saXN0LmFwcGVuZChwYXJhbSkKLQotICAgICAg
ICAgICAgaWYgaGFzX211bHRpcGxlX3JldHVybnM6Ci0gICAgICAgICAgICAgICAgbWV0aG9kX291
dF9wYXJhbXNfaGFuZGxpbmcuYXBwZW5kKCIgICAgfVxuIikKLSAgICAgICAgICAgIG1ldGhvZF9v
dXRfcGFyYW1zX2hhbmRsaW5nLmFwcGVuZCgiXG4iKQotCi0gICAgICAgIG1ldGhvZF9kaXNwYXRj
aF9oYW5kbGluZy5hcHBlbmQoIiAgICBtX2FnZW50LT4lcygmZXJyb3Ilcyk7XG4iICUgKGpzb25f
Y29tbWFuZF9uYW1lLCAiIi5qb2luKGFnZW50X2NhbGxfcGFyYW1fbGlzdCkpKQotICAgICAgICBt
ZXRob2RfZGlzcGF0Y2hfaGFuZGxpbmcuYXBwZW5kKCJcbiIpCi0KLSAgICAgICAgaWYgbm90IG1l
dGhvZF9lbmRpbmdfaGFuZGxpbmc6Ci0gICAgICAgICAgICBtZXRob2RfZW5kaW5nX2hhbmRsaW5n
LmFwcGVuZCgiICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIHJl
c3VsdC5yZWxlYXNlKCksIGVycm9yKTsiKQotCi0gICAgICAgIGJhY2tlbmRfanNfcmVwbHlfcGFy
YW1fbGlzdCA9IFtdCi0gICAgICAgIGlmICJyZXR1cm5zIiBpbiBqc29uX2NvbW1hbmQ6Ci0gICAg
ICAgICAgICBmb3IganNvbl9yZXR1cm4gaW4ganNvbl9jb21tYW5kWyJyZXR1cm5zIl06Ci0gICAg
ICAgICAgICAgICAganNvbl9yZXR1cm5fbmFtZSA9IGpzb25fcmV0dXJuWyJuYW1lIl0KLSAgICAg
ICAgICAgICAgICBiYWNrZW5kX2pzX3JlcGx5X3BhcmFtX2xpc3QuYXBwZW5kKCJcIiVzXCIiICUg
anNvbl9yZXR1cm5fbmFtZSkKLQotICAgICAgICBqc19yZXBseV9saXN0ID0gIlslc10iICUgIiwg
Ii5qb2luKGJhY2tlbmRfanNfcmVwbHlfcGFyYW1fbGlzdCkKLQotICAgICAgICBHZW5lcmF0b3Iu
YmFja2VuZF9tZXRob2RfaW1wbGVtZW50YXRpb25fbGlzdC5hcHBlbmQoVGVtcGxhdGVzLmJhY2tl
bmRfbWV0aG9kLnN1YnN0aXR1dGUoTm9uZSwKLSAgICAgICAgICAgIGRpc3BhdGNoZXJOYW1lPWRp
c3BhdGNoZXJfbmFtZSwKLSAgICAgICAgICAgIG1ldGhvZE5hbWU9anNvbl9jb21tYW5kX25hbWUs
Ci0gICAgICAgICAgICByZXF1ZXN0TWVzc2FnZU9iamVjdD1tZXRob2RfcmVxdWVzdF9tZXNzYWdl
X3BhcmFtX25hbWUsCi0gICAgICAgICAgICBtZXRob2RJblBhcmFtZXRlcnNIYW5kbGluZz0iIi5q
b2luKG1ldGhvZF9pbl9wYXJhbXNfaGFuZGxpbmcpLAotICAgICAgICAgICAgbWV0aG9kRGlzcGF0
Y2hIYW5kbGluZz0iIi5qb2luKG1ldGhvZF9kaXNwYXRjaF9oYW5kbGluZyksCi0gICAgICAgICAg
ICBtZXRob2RPdXRQYXJhbWV0ZXJzSGFuZGxpbmc9IiIuam9pbihtZXRob2Rfb3V0X3BhcmFtc19o
YW5kbGluZyksCi0gICAgICAgICAgICBtZXRob2RFbmRpbmdIYW5kbGluZz0iIi5qb2luKG1ldGhv
ZF9lbmRpbmdfaGFuZGxpbmcpKSkKLQotICAgICAgICBHZW5lcmF0b3IuYmFja2VuZF9qc19kb21h
aW5faW5pdGlhbGl6ZXJfbGlzdC5hcHBlbmQoIkluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21t
YW5kKFwiJXMuJXNcIiwgWyVzXSwgJXMpO1xuIiAlIChkb21haW5fbmFtZSwganNvbl9jb21tYW5k
X25hbWUsIGpzX3BhcmFtZXRlcnNfdGV4dCwganNfcmVwbHlfbGlzdCkpCi0gICAgICAgIEdlbmVy
YXRvci5iYWNrZW5kX2hhbmRsZXJfaW50ZXJmYWNlX2xpc3QuYXBwZW5kKCIpID0gMDtcbiIpCi0K
LSAgICBjbGFzcyBDYWxsYmFja01ldGhvZFN0cnVjdFRlbXBsYXRlOgotICAgICAgICBAc3RhdGlj
bWV0aG9kCi0gICAgICAgIGRlZiBhcHBlbmRfcHJvbG9nKGxpbmVfbGlzdCk6Ci0gICAgICAgICAg
ICBwYXNzCi0KLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBkZWYgYXBwZW5kX2VwaWxv
ZyhsaW5lX2xpc3QpOgotICAgICAgICAgICAgcGFzcwotCi0gICAgICAgIGNvbnRhaW5lcl9uYW1l
ID0gImpzb25NZXNzYWdlIgotCi0gICAgIyBHZW5lcmF0ZXMgY29tbW9uIGNvZGUgZm9yIGV2ZW50
IHNlbmRpbmcgYW5kIGNhbGxiYWNrIHJlc3BvbnNlIGRhdGEgc2VuZGluZy4KLSAgICBAc3RhdGlj
bWV0aG9kCi0gICAgZGVmIGdlbmVyYXRlX3NlbmRfbWV0aG9kKHBhcmFtZXRlcnMsIGV2ZW50X25h
bWUsIGRvbWFpbl9uYW1lLCBhZF9ob2NfdHlwZV93cml0ZXIsIGRlY2xfcGFyYW1ldGVyX2xpc3Qs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZF9zdHJ1Y3RfdGVtcGxhdGUsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRvcl9tZXRob2RfbGlzdCwgbWV0aG9k
X3RlbXBsYXRlLCB0ZW1wbGF0ZV9wYXJhbXMpOgotICAgICAgICBtZXRob2RfbGluZV9saXN0ID0g
W10KLSAgICAgICAgaWYgcGFyYW1ldGVyczoKLSAgICAgICAgICAgIG1ldGhvZF9zdHJ1Y3RfdGVt
cGxhdGUuYXBwZW5kX3Byb2xvZyhtZXRob2RfbGluZV9saXN0KQotICAgICAgICAgICAgZm9yIGpz
b25fcGFyYW1ldGVyIGluIHBhcmFtZXRlcnM6Ci0gICAgICAgICAgICAgICAgcGFyYW1ldGVyX25h
bWUgPSBqc29uX3BhcmFtZXRlclsibmFtZSJdCi0KLSAgICAgICAgICAgICAgICBwYXJhbV90eXBl
X2JpbmRpbmcgPSBHZW5lcmF0b3IucmVzb2x2ZV90eXBlX2FuZF9nZW5lcmF0ZV9hZF9ob2MoanNv
bl9wYXJhbWV0ZXIsIGV2ZW50X25hbWUsIGRvbWFpbl9uYW1lLCBhZF9ob2NfdHlwZV93cml0ZXIs
ICIiKQotCi0gICAgICAgICAgICAgICAgcmF3X3R5cGUgPSBwYXJhbV90eXBlX2JpbmRpbmcucmVk
dWNlX3RvX3Jhd190eXBlKCkKLSAgICAgICAgICAgICAgICByYXdfdHlwZV9iaW5kaW5nID0gUmF3
VHlwZUJpbmRpbmcocmF3X3R5cGUpCi0KLSAgICAgICAgICAgICAgICBvcHRpb25hbCA9IGJvb2wo
anNvbl9wYXJhbWV0ZXIuZ2V0KCJvcHRpb25hbCIpKQotCi0gICAgICAgICAgICAgICAgc2V0dGVy
X3R5cGUgPSByYXdfdHlwZS5nZXRfc2V0dGVyX25hbWUoKQotCi0gICAgICAgICAgICAgICAgdHlw
ZV9tb2RlbCA9IHBhcmFtX3R5cGVfYmluZGluZy5nZXRfdHlwZV9tb2RlbCgpCi0gICAgICAgICAg
ICAgICAgcmF3X3R5cGVfbW9kZWwgPSByYXdfdHlwZV9iaW5kaW5nLmdldF90eXBlX21vZGVsKCkK
LSAgICAgICAgICAgICAgICBpZiBvcHRpb25hbDoKLSAgICAgICAgICAgICAgICAgICAgdHlwZV9t
b2RlbCA9IHR5cGVfbW9kZWwuZ2V0X29wdGlvbmFsKCkKLSAgICAgICAgICAgICAgICAgICAgcmF3
X3R5cGVfbW9kZWwgPSByYXdfdHlwZV9tb2RlbC5nZXRfb3B0aW9uYWwoKQotCi0gICAgICAgICAg
ICAgICAgYW5ub3RhdGVkX3R5cGUgPSB0eXBlX21vZGVsLmdldF9pbnB1dF9wYXJhbV90eXBlX3Rl
eHQoKQotICAgICAgICAgICAgICAgIG1vZGVfdHlwZV9iaW5kaW5nID0gcGFyYW1fdHlwZV9iaW5k
aW5nCi0KLSAgICAgICAgICAgICAgICBkZWNsX3BhcmFtZXRlcl9saXN0LmFwcGVuZCgiJXMgJXMi
ICUgKGFubm90YXRlZF90eXBlLCBwYXJhbWV0ZXJfbmFtZSkpCi0KLSAgICAgICAgICAgICAgICBz
ZXR0ZXJfYXJndW1lbnQgPSByYXdfdHlwZV9tb2RlbC5nZXRfZXZlbnRfc2V0dGVyX2V4cHJlc3Np
b25fcGF0dGVybigpICUgcGFyYW1ldGVyX25hbWUKLSAgICAgICAgICAgICAgICBpZiBtb2RlX3R5
cGVfYmluZGluZy5nZXRfc2V0dGVyX3ZhbHVlX2V4cHJlc3Npb25fcGF0dGVybigpOgotICAgICAg
ICAgICAgICAgICAgICBzZXR0ZXJfYXJndW1lbnQgPSBtb2RlX3R5cGVfYmluZGluZy5nZXRfc2V0
dGVyX3ZhbHVlX2V4cHJlc3Npb25fcGF0dGVybigpICUgKElOU1BFQ1RPUl9UWVBFU19HRU5FUkFU
T1JfQ09ORklHX01BUFtvdXRwdXRfdHlwZV1bInByZWZpeCJdLCBzZXR0ZXJfYXJndW1lbnQpCi0K
LSAgICAgICAgICAgICAgICBzZXR0ZXJfY29kZSA9ICIgICAgJXMtPnNldCVzKEFTQ0lJTGl0ZXJh
bChcIiVzXCIpLCAlcyk7XG4iICUgKG1ldGhvZF9zdHJ1Y3RfdGVtcGxhdGUuY29udGFpbmVyX25h
bWUsIHNldHRlcl90eXBlLCBwYXJhbWV0ZXJfbmFtZSwgc2V0dGVyX2FyZ3VtZW50KQotICAgICAg
ICAgICAgICAgIGlmIG9wdGlvbmFsOgotICAgICAgICAgICAgICAgICAgICBzZXR0ZXJfY29kZSA9
ICgiICAgIGlmICglcylcbiAgICAiICUgcGFyYW1ldGVyX25hbWUpICsgc2V0dGVyX2NvZGUKLSAg
ICAgICAgICAgICAgICBtZXRob2RfbGluZV9saXN0LmFwcGVuZChzZXR0ZXJfY29kZSkKLQotICAg
ICAgICAgICAgbWV0aG9kX3N0cnVjdF90ZW1wbGF0ZS5hcHBlbmRfZXBpbG9nKG1ldGhvZF9saW5l
X2xpc3QpCi0KLSAgICAgICAgZ2VuZXJhdG9yX21ldGhvZF9saXN0LmFwcGVuZChtZXRob2RfdGVt
cGxhdGUuc3Vic3RpdHV0ZShOb25lLAotICAgICAgICAgICAgZG9tYWluTmFtZT1kb21haW5fbmFt
ZSwKLSAgICAgICAgICAgIHBhcmFtZXRlcnM9IiwgIi5qb2luKGRlY2xfcGFyYW1ldGVyX2xpc3Qp
LAotICAgICAgICAgICAgY29kZT0iIi5qb2luKG1ldGhvZF9saW5lX2xpc3QpLCAqKnRlbXBsYXRl
X3BhcmFtcykpCi0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIHJlc29sdmVfdHlwZV9hbmRf
Z2VuZXJhdGVfYWRfaG9jKGpzb25fcGFyYW0sIG1ldGhvZF9uYW1lLCBkb21haW5fbmFtZSwgYWRf
aG9jX3R5cGVfd3JpdGVyLCBjb250YWluZXJfcmVsYXRpdmVfbmFtZV9wcmVmaXhfcGFyYW0pOgot
ICAgICAgICBwYXJhbV9uYW1lID0ganNvbl9wYXJhbVsibmFtZSJdCi0gICAgICAgIGFkX2hvY190
eXBlX2xpc3QgPSBbXQotCi0gICAgICAgIGNsYXNzIEFkSG9jVHlwZUNvbnRleHQ6Ci0gICAgICAg
ICAgICBjb250YWluZXJfZnVsbF9uYW1lX3ByZWZpeCA9ICI8bm90IHlldCBkZWZpbmVkPiIKLSAg
ICAgICAgICAgIGNvbnRhaW5lcl9yZWxhdGl2ZV9uYW1lX3ByZWZpeCA9IGNvbnRhaW5lcl9yZWxh
dGl2ZV9uYW1lX3ByZWZpeF9wYXJhbQotCi0gICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAg
ICAgICAgICBkZWYgZ2V0X3R5cGVfbmFtZV9maXgoKToKLSAgICAgICAgICAgICAgICBjbGFzcyBO
YW1lRml4OgotICAgICAgICAgICAgICAgICAgICBjbGFzc19uYW1lID0gQ2FwaXRhbGl6ZXIubG93
ZXJfY2FtZWxfY2FzZV90b191cHBlcihwYXJhbV9uYW1lKQotCi0gICAgICAgICAgICAgICAgICAg
IEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgZGVmIG91dHB1dF9jb21tZW50KHdy
aXRlcik6Ci0gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3bGluZSgiLy8gTmFtZWQg
YWZ0ZXIgcGFyYW1ldGVyICclcycgd2hpbGUgZ2VuZXJhdGluZyBjb21tYW5kL2V2ZW50ICVzLlxu
IiAlIChwYXJhbV9uYW1lLCBtZXRob2RfbmFtZSkpCi0KLSAgICAgICAgICAgICAgICByZXR1cm4g
TmFtZUZpeAotCi0gICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICBkZWYgYWRk
X3R5cGUoYmluZGluZyk6Ci0gICAgICAgICAgICAgICAgYWRfaG9jX3R5cGVfbGlzdC5hcHBlbmQo
YmluZGluZykKLQotICAgICAgICB0eXBlX2JpbmRpbmcgPSByZXNvbHZlX3BhcmFtX3R5cGUoanNv
bl9wYXJhbSwgZG9tYWluX25hbWUsIEFkSG9jVHlwZUNvbnRleHQpCi0KLSAgICAgICAgY2xhc3Mg
SW50ZXJmYWNlRm9yd2FyZExpc3RlbmVyOgotICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAg
ICAgICAgICAgZGVmIGFkZF90eXBlX2RhdGEodHlwZV9kYXRhKToKLSAgICAgICAgICAgICAgICBw
YXNzCi0KLSAgICAgICAgY2xhc3MgSW50ZXJmYWNlUmVzb2x2ZUNvbnRleHQ6Ci0gICAgICAgICAg
ICBmb3J3YXJkX2xpc3RlbmVyID0gSW50ZXJmYWNlRm9yd2FyZExpc3RlbmVyCi0KLSAgICAgICAg
Zm9yIHR5cGUgaW4gYWRfaG9jX3R5cGVfbGlzdDoKLSAgICAgICAgICAgIHR5cGUucmVzb2x2ZV9p
bm5lcihJbnRlcmZhY2VSZXNvbHZlQ29udGV4dCkKLQotICAgICAgICBjbGFzcyBJbnRlcmZhY2VH
ZW5lcmF0ZUNvbnRleHQ6Ci0gICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyID0gIm5vdCBzdXBw
b3J0ZWQgaW4gSW50ZXJmYWNlR2VuZXJhdGVDb250ZXh0IgotICAgICAgICAgICAgY3BwX3dyaXRl
ciA9IHZhbGlkYXRvcl93cml0ZXIKLQotICAgICAgICBmb3IgdHlwZSBpbiBhZF9ob2NfdHlwZV9s
aXN0OgotICAgICAgICAgICAgZ2VuZXJhdG9yID0gdHlwZS5nZXRfY29kZV9nZW5lcmF0b3IoKQot
ICAgICAgICAgICAgaWYgZ2VuZXJhdG9yOgotICAgICAgICAgICAgICAgIGdlbmVyYXRvci5nZW5l
cmF0ZV90eXBlX2J1aWxkZXIoYWRfaG9jX3R5cGVfd3JpdGVyLCBJbnRlcmZhY2VHZW5lcmF0ZUNv
bnRleHQpCi0KLSAgICAgICAgcmV0dXJuIHR5cGVfYmluZGluZwotCi0gICAgQHN0YXRpY21ldGhv
ZAotICAgIGRlZiBwcm9jZXNzX3R5cGVzKHR5cGVfbWFwKToKLSAgICAgICAgb3V0cHV0ID0gR2Vu
ZXJhdG9yLnR5cGVfYnVpbGRlcl9mcmFnbWVudHMKLQotICAgICAgICBjbGFzcyBHZW5lcmF0ZUNv
bnRleHQ6Ci0gICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyID0gV3JpdGVyKEdlbmVyYXRvci52
YWxpZGF0b3JfaW1wbF9saXN0LCAiIikKLSAgICAgICAgICAgIGNwcF93cml0ZXIgPSBXcml0ZXIo
R2VuZXJhdG9yLnR5cGVfYnVpbGRlcl9pbXBsX2xpc3QsICIiKQotCi0gICAgICAgIGRlZiBnZW5l
cmF0ZV9hbGxfZG9tYWluc19jb2RlKG91dCwgdHlwZV9kYXRhX2NhbGxiYWNrKToKLSAgICAgICAg
ICAgIHdyaXRlciA9IFdyaXRlcihvdXQsICIiKQotICAgICAgICAgICAgZm9yIGRvbWFpbl9kYXRh
IGluIHR5cGVfbWFwLmRvbWFpbnNfdG9fZ2VuZXJhdGUoKToKLSAgICAgICAgICAgICAgICBkb21h
aW5fZml4ZXMgPSBEb21haW5OYW1lRml4ZXMuZ2V0X2ZpeGVkX2RhdGEoZG9tYWluX2RhdGEubmFt
ZSgpKQotICAgICAgICAgICAgICAgIGRvbWFpbl9ndWFyZCA9IGRvbWFpbl9maXhlcy5nZXRfZ3Vh
cmQoKQotCi0gICAgICAgICAgICAgICAgbmFtZXNwYWNlX2RlY2xhcmVkID0gW10KLQotICAgICAg
ICAgICAgICAgIGRlZiBuYW1lc3BhY2VfbGF6eV9nZW5lcmF0b3IoKToKLSAgICAgICAgICAgICAg
ICAgICAgaWYgbm90IG5hbWVzcGFjZV9kZWNsYXJlZDoKLSAgICAgICAgICAgICAgICAgICAgICAg
IGlmIGRvbWFpbl9ndWFyZDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb21haW5fZ3Vh
cmQuZ2VuZXJhdGVfb3BlbihvdXQpCi0gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3
bGluZSgibmFtZXNwYWNlICIpCi0gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuYXBwZW5k
KGRvbWFpbl9kYXRhLm5hbWUoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5hcHBl
bmQoIiB7XG4iKQotICAgICAgICAgICAgICAgICAgICAgICAgIyBXaGF0IGlzIGEgYmV0dGVyIHdh
eSB0byBjaGFuZ2UgdmFsdWUgZnJvbSBvdXRlciBzY29wZT8KLSAgICAgICAgICAgICAgICAgICAg
ICAgIG5hbWVzcGFjZV9kZWNsYXJlZC5hcHBlbmQoVHJ1ZSkKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHdyaXRlcgotCi0gICAgICAgICAgICAgICAgZm9yIHR5cGVfZGF0YSBpbiBkb21haW5f
ZGF0YS50eXBlcygpOgotICAgICAgICAgICAgICAgICAgICB0eXBlX2RhdGFfY2FsbGJhY2sodHlw
ZV9kYXRhLCBuYW1lc3BhY2VfbGF6eV9nZW5lcmF0b3IpCi0KLSAgICAgICAgICAgICAgICBpZiBu
YW1lc3BhY2VfZGVjbGFyZWQ6Ci0gICAgICAgICAgICAgICAgICAgIHdyaXRlci5hcHBlbmQoIn0g
Ly8gIikKLSAgICAgICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVuZChkb21haW5fZGF0YS5uYW1l
KCkpCi0gICAgICAgICAgICAgICAgICAgIHdyaXRlci5hcHBlbmQoIlxuXG4iKQotCi0gICAgICAg
ICAgICAgICAgICAgIGlmIGRvbWFpbl9ndWFyZDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGRv
bWFpbl9ndWFyZC5nZW5lcmF0ZV9jbG9zZShvdXQpCi0KLSAgICAgICAgZGVmIGNyZWF0ZV90eXBl
X2J1aWxkZXJfY2FsbGVyKGdlbmVyYXRlX3Bhc3NfaWQpOgotICAgICAgICAgICAgZGVmIGNhbGxf
dHlwZV9idWlsZGVyKHR5cGVfZGF0YSwgd3JpdGVyX2dldHRlcik6Ci0gICAgICAgICAgICAgICAg
Y29kZV9nZW5lcmF0b3IgPSB0eXBlX2RhdGEuZ2V0X2JpbmRpbmcoKS5nZXRfY29kZV9nZW5lcmF0
b3IoKQotICAgICAgICAgICAgICAgIGlmIGNvZGVfZ2VuZXJhdG9yIGFuZCBnZW5lcmF0ZV9wYXNz
X2lkID09IGNvZGVfZ2VuZXJhdG9yLmdldF9nZW5lcmF0ZV9wYXNzX2lkKCk6Ci0gICAgICAgICAg
ICAgICAgICAgIHdyaXRlciA9IHdyaXRlcl9nZXR0ZXIoKQotCi0gICAgICAgICAgICAgICAgICAg
IGNvZGVfZ2VuZXJhdG9yLmdlbmVyYXRlX3R5cGVfYnVpbGRlcih3cml0ZXIsIEdlbmVyYXRlQ29u
dGV4dCkKLSAgICAgICAgICAgIHJldHVybiBjYWxsX3R5cGVfYnVpbGRlcgotCi0gICAgICAgIGdl
bmVyYXRlX2FsbF9kb21haW5zX2NvZGUob3V0cHV0LCBjcmVhdGVfdHlwZV9idWlsZGVyX2NhbGxl
cihUeXBlQnVpbGRlclBhc3MuTUFJTikpCi0KLSAgICAgICAgR2VuZXJhdG9yLnR5cGVfYnVpbGRl
cl9mb3J3YXJkcy5hcHBlbmQoIi8vIEZvcndhcmQgZGVjbGFyYXRpb25zLlxuIikKLQotICAgICAg
ICBkZWYgZ2VuZXJhdGVfZm9yd2FyZF9jYWxsYmFjayh0eXBlX2RhdGEsIHdyaXRlcl9nZXR0ZXIp
OgotICAgICAgICAgICAgaWYgdHlwZV9kYXRhIGluIGdsb2JhbF9mb3J3YXJkX2xpc3RlbmVyLnR5
cGVfZGF0YV9zZXQ6Ci0gICAgICAgICAgICAgICAgYmluZGluZyA9IHR5cGVfZGF0YS5nZXRfYmlu
ZGluZygpCi0gICAgICAgICAgICAgICAgYmluZGluZy5nZXRfY29kZV9nZW5lcmF0b3IoKS5nZW5l
cmF0ZV9mb3J3YXJkX2RlY2xhcmF0aW9uKHdyaXRlcl9nZXR0ZXIoKSkKLSAgICAgICAgZ2VuZXJh
dGVfYWxsX2RvbWFpbnNfY29kZShHZW5lcmF0b3IudHlwZV9idWlsZGVyX2ZvcndhcmRzLCBnZW5l
cmF0ZV9mb3J3YXJkX2NhbGxiYWNrKQotCi0gICAgICAgIEdlbmVyYXRvci50eXBlX2J1aWxkZXJf
Zm9yd2FyZHMuYXBwZW5kKCIvLyBFbmQgb2YgZm9yd2FyZCBkZWNsYXJhdGlvbnMuXG5cbiIpCi0K
LSAgICAgICAgR2VuZXJhdG9yLnR5cGVfYnVpbGRlcl9mb3J3YXJkcy5hcHBlbmQoIi8vIFR5cGVk
ZWZzLlxuIikKLQotICAgICAgICBnZW5lcmF0ZV9hbGxfZG9tYWluc19jb2RlKEdlbmVyYXRvci50
eXBlX2J1aWxkZXJfZm9yd2FyZHMsIGNyZWF0ZV90eXBlX2J1aWxkZXJfY2FsbGVyKFR5cGVCdWls
ZGVyUGFzcy5UWVBFREVGKSkKLQotICAgICAgICBHZW5lcmF0b3IudHlwZV9idWlsZGVyX2Zvcndh
cmRzLmFwcGVuZCgiLy8gRW5kIG9mIHR5cGVkZWZzLlxuXG4iKQotCi0KLWRlZiBmbGF0dGVuX2xp
c3QoaW5wdXQpOgotICAgIHJlcyA9IFtdCi0KLSAgICBkZWYgZmlsbF9yZWN1cnNpdmUobCk6Ci0g
ICAgICAgIGZvciBpdGVtIGluIGw6Ci0gICAgICAgICAgICBpZiBpc2luc3RhbmNlKGl0ZW0sIGxp
c3QpOgotICAgICAgICAgICAgICAgIGZpbGxfcmVjdXJzaXZlKGl0ZW0pCi0gICAgICAgICAgICBl
bHNlOgotICAgICAgICAgICAgICAgIHJlcy5hcHBlbmQoaXRlbSkKLSAgICBmaWxsX3JlY3Vyc2l2
ZShpbnB1dCkKLSAgICByZXR1cm4gcmVzCi0KLQotIyBBIHdyaXRlciB0aGF0IG9ubHkgdXBkYXRl
cyBmaWxlIGlmIGl0IGFjdHVhbGx5IGNoYW5nZWQgdG8gYmV0dGVyIHN1cHBvcnQgaW5jcmVtZW50
YWwgYnVpbGQuCi1jbGFzcyBTbWFydE91dHB1dDoKLSAgICBkZWYgX19pbml0X18oc2VsZiwgZmls
ZV9uYW1lKToKLSAgICAgICAgc2VsZi5maWxlX25hbWVfID0gZmlsZV9uYW1lCi0gICAgICAgIHNl
bGYub3V0cHV0XyA9ICIiCi0KLSAgICBkZWYgd3JpdGUoc2VsZiwgdGV4dCk6Ci0gICAgICAgIHNl
bGYub3V0cHV0XyArPSB0ZXh0Ci0KLSAgICBkZWYgY2xvc2Uoc2VsZik6Ci0gICAgICAgIHRleHRf
Y2hhbmdlZCA9IFRydWUKLSAgICAgICAgc2VsZi5vdXRwdXRfID0gc2VsZi5vdXRwdXRfLnJzdHJp
cCgpICsgIlxuIgotCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHJlYWRfZmlsZSA9IG9wZW4o
c2VsZi5maWxlX25hbWVfLCAiciIpCi0gICAgICAgICAgICBvbGRfdGV4dCA9IHJlYWRfZmlsZS5y
ZWFkKCkKLSAgICAgICAgICAgIHJlYWRfZmlsZS5jbG9zZSgpCi0gICAgICAgICAgICB0ZXh0X2No
YW5nZWQgPSBvbGRfdGV4dCAhPSBzZWxmLm91dHB1dF8KLSAgICAgICAgZXhjZXB0OgotICAgICAg
ICAgICAgIyBJZ25vcmUsIGp1c3Qgb3ZlcndyaXRlIGJ5IGRlZmF1bHQKLSAgICAgICAgICAgIHBh
c3MKLQotICAgICAgICBpZiB0ZXh0X2NoYW5nZWQgb3Igd3JpdGVfYWx3YXlzOgotICAgICAgICAg
ICAgb3V0X2ZpbGUgPSBvcGVuKHNlbGYuZmlsZV9uYW1lXywgInciKQotICAgICAgICAgICAgb3V0
X2ZpbGUud3JpdGUoc2VsZi5vdXRwdXRfKQotICAgICAgICAgICAgb3V0X2ZpbGUuY2xvc2UoKQot
Ci0KLUdlbmVyYXRvci5nbygpCi0KLW91dHB1dF9maWxlX25hbWVfcHJlZml4ID0gSU5TUEVDVE9S
X1RZUEVTX0dFTkVSQVRPUl9DT05GSUdfTUFQW291dHB1dF90eXBlXVsicHJlZml4Il0KLQotYmFj
a2VuZF9oX2ZpbGUgPSBTbWFydE91dHB1dChvdXRwdXRfaGVhZGVyX2Rpcm5hbWUgKyAoIi9JbnNw
ZWN0b3Ilc0JhY2tlbmREaXNwYXRjaGVycy5oIiAlIG91dHB1dF9maWxlX25hbWVfcHJlZml4KSkK
LWJhY2tlbmRfY3BwX2ZpbGUgPSBTbWFydE91dHB1dChvdXRwdXRfY3BwX2Rpcm5hbWUgKyAoIi9J
bnNwZWN0b3Ilc0JhY2tlbmREaXNwYXRjaGVycy5jcHAiICUgb3V0cHV0X2ZpbGVfbmFtZV9wcmVm
aXgpKQotCi1mcm9udGVuZF9oX2ZpbGUgPSBTbWFydE91dHB1dChvdXRwdXRfaGVhZGVyX2Rpcm5h
bWUgKyAoIi9JbnNwZWN0b3Ilc0Zyb250ZW5kRGlzcGF0Y2hlcnMuaCIgJSBvdXRwdXRfZmlsZV9u
YW1lX3ByZWZpeCkpCi1mcm9udGVuZF9jcHBfZmlsZSA9IFNtYXJ0T3V0cHV0KG91dHB1dF9jcHBf
ZGlybmFtZSArICgiL0luc3BlY3RvciVzRnJvbnRlbmREaXNwYXRjaGVycy5jcHAiICUgb3V0cHV0
X2ZpbGVfbmFtZV9wcmVmaXgpKQotCi10eXBlYnVpbGRlcl9oX2ZpbGUgPSBTbWFydE91dHB1dChv
dXRwdXRfaGVhZGVyX2Rpcm5hbWUgKyAoIi9JbnNwZWN0b3Ilc1R5cGVCdWlsZGVycy5oIiAlIG91
dHB1dF9maWxlX25hbWVfcHJlZml4KSkKLXR5cGVidWlsZGVyX2NwcF9maWxlID0gU21hcnRPdXRw
dXQob3V0cHV0X2NwcF9kaXJuYW1lICsgKCIvSW5zcGVjdG9yJXNUeXBlQnVpbGRlcnMuY3BwIiAl
IG91dHB1dF9maWxlX25hbWVfcHJlZml4KSkKLQotYmFja2VuZF9qc19maWxlID0gU21hcnRPdXRw
dXQob3V0cHV0X2pzX2Rpcm5hbWUgKyAoIi9JbnNwZWN0b3Ilc0JhY2tlbmRDb21tYW5kcy5qcyIg
JSBvdXRwdXRfZmlsZV9uYW1lX3ByZWZpeCkpCi0KLQotYmFja2VuZF9oX2ZpbGUud3JpdGUoVGVt
cGxhdGVzLmJhY2tlbmRfaC5zdWJzdGl0dXRlKE5vbmUsCi0gICAgb3V0cHV0RmlsZU5hbWVQcmVm
aXg9b3V0cHV0X2ZpbGVfbmFtZV9wcmVmaXgsCi0gICAgaGFuZGxlckludGVyZmFjZXM9IiIuam9p
bihmbGF0dGVuX2xpc3QoR2VuZXJhdG9yLmJhY2tlbmRfaGFuZGxlcl9pbnRlcmZhY2VfbGlzdCkp
LAotICAgIGRpc3BhdGNoZXJJbnRlcmZhY2VzPSIiLmpvaW4oZmxhdHRlbl9saXN0KEdlbmVyYXRv
ci5iYWNrZW5kX2Rpc3BhdGNoZXJfaW50ZXJmYWNlX2xpc3QpKSkpCi0KLWJhY2tlbmRfY3BwX2Zp
bGUud3JpdGUoVGVtcGxhdGVzLmJhY2tlbmRfY3BwLnN1YnN0aXR1dGUoTm9uZSwKLSAgICBvdXRw
dXRGaWxlTmFtZVByZWZpeD1vdXRwdXRfZmlsZV9uYW1lX3ByZWZpeCwKLSAgICBoYW5kbGVySW1w
bGVtZW50YXRpb25zPSIiLmpvaW4oZmxhdHRlbl9saXN0KEdlbmVyYXRvci5iYWNrZW5kX2hhbmRs
ZXJfaW1wbGVtZW50YXRpb25fbGlzdCkpLAotICAgIG1ldGhvZHM9IlxuIi5qb2luKEdlbmVyYXRv
ci5iYWNrZW5kX21ldGhvZF9pbXBsZW1lbnRhdGlvbl9saXN0KSkpCi0KLWZyb250ZW5kX2hfZmls
ZS53cml0ZShUZW1wbGF0ZXMuZnJvbnRlbmRfaC5zdWJzdGl0dXRlKE5vbmUsCi0gICAgb3V0cHV0
RmlsZU5hbWVQcmVmaXg9b3V0cHV0X2ZpbGVfbmFtZV9wcmVmaXgsCi0gICAgZG9tYWluQ2xhc3NM
aXN0PSIiLmpvaW4oR2VuZXJhdG9yLmZyb250ZW5kX2RvbWFpbl9jbGFzc19saW5lcykpKQotCi1m
cm9udGVuZF9jcHBfZmlsZS53cml0ZShUZW1wbGF0ZXMuZnJvbnRlbmRfY3BwLnN1YnN0aXR1dGUo
Tm9uZSwKLSAgICBvdXRwdXRGaWxlTmFtZVByZWZpeD1vdXRwdXRfZmlsZV9uYW1lX3ByZWZpeCwK
LSAgICBtZXRob2RzPSJcbiIuam9pbihHZW5lcmF0b3IuZnJvbnRlbmRfbWV0aG9kX2xpc3QpKSkK
LQotdHlwZWJ1aWxkZXJfaF9maWxlLndyaXRlKFRlbXBsYXRlcy50eXBlYnVpbGRlcl9oLnN1YnN0
aXR1dGUoTm9uZSwKLSAgICBvdXRwdXRGaWxlTmFtZVByZWZpeD1vdXRwdXRfZmlsZV9uYW1lX3By
ZWZpeCwKLSAgICB0eXBlQnVpbGRlckRlcGVuZGVuY2llcz1JTlNQRUNUT1JfVFlQRVNfR0VORVJB
VE9SX0NPTkZJR19NQVBbb3V0cHV0X3R5cGVdWyJ0eXBlYnVpbGRlcl9kZXBlbmRlbmN5Il0sCi0g
ICAgZXhwb3J0TWFjcm89SU5TUEVDVE9SX1RZUEVTX0dFTkVSQVRPUl9DT05GSUdfTUFQW291dHB1
dF90eXBlXVsiZXhwb3J0X21hY3JvIl0sCi0gICAgdHlwZUJ1aWxkZXJzPSIiLmpvaW4oZmxhdHRl
bl9saXN0KEdlbmVyYXRvci50eXBlX2J1aWxkZXJfZnJhZ21lbnRzKSksCi0gICAgZm9yd2FyZHM9
IiIuam9pbihHZW5lcmF0b3IudHlwZV9idWlsZGVyX2ZvcndhcmRzKSwKLSAgICB2YWxpZGF0b3JJ
ZmRlZk5hbWU9VkFMSURBVE9SX0lGREVGX05BTUUpKQotCi10eXBlYnVpbGRlcl9jcHBfZmlsZS53
cml0ZShUZW1wbGF0ZXMudHlwZWJ1aWxkZXJfY3BwLnN1YnN0aXR1dGUoTm9uZSwKLSAgICBvdXRw
dXRGaWxlTmFtZVByZWZpeD1vdXRwdXRfZmlsZV9uYW1lX3ByZWZpeCwKLSAgICBlbnVtQ29uc3Rh
bnRWYWx1ZXM9RW51bUNvbnN0YW50cy5nZXRfZW51bV9jb25zdGFudF9jb2RlKCksCi0gICAgaW1w
bENvZGU9IiIuam9pbihmbGF0dGVuX2xpc3QoR2VuZXJhdG9yLnR5cGVfYnVpbGRlcl9pbXBsX2xp
c3QpKSwKLSAgICB2YWxpZGF0b3JDb2RlPSIiLmpvaW4oZmxhdHRlbl9saXN0KEdlbmVyYXRvci52
YWxpZGF0b3JfaW1wbF9saXN0KSksCi0gICAgdmFsaWRhdG9ySWZkZWZOYW1lPVZBTElEQVRPUl9J
RkRFRl9OQU1FKSkKLQotYmFja2VuZF9qc19maWxlLndyaXRlKFRlbXBsYXRlcy5iYWNrZW5kX2pz
LnN1YnN0aXR1dGUoTm9uZSwKLSAgICBkb21haW5Jbml0aWFsaXplcnM9IiIuam9pbihHZW5lcmF0
b3IuYmFja2VuZF9qc19kb21haW5faW5pdGlhbGl6ZXJfbGlzdCkpKQotCi1iYWNrZW5kX2hfZmls
ZS5jbG9zZSgpCi1iYWNrZW5kX2NwcF9maWxlLmNsb3NlKCkKLQotZnJvbnRlbmRfaF9maWxlLmNs
b3NlKCkKLWZyb250ZW5kX2NwcF9maWxlLmNsb3NlKCkKLQotdHlwZWJ1aWxkZXJfaF9maWxlLmNs
b3NlKCkKLXR5cGVidWlsZGVyX2NwcF9maWxlLmNsb3NlKCkKLQotYmFja2VuZF9qc19maWxlLmNs
b3NlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yU3RyaW5ncy5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yU3RyaW5ncy5weQpkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjc2Mzc0NDE2MGI4NGZmZDJjMzc3NTlhNDNkYmQz
M2RmMDE0NWE0NC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvQ29kZUdlbmVyYXRvcklu
c3BlY3RvclN0cmluZ3MucHkKKysrIC9kZXYvbnVsbApAQCAtMSwzNDggKzAsMCBAQAotIyBDb3B5
cmlnaHQgKGMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMgQ29weXJp
Z2h0IChjKSAyMDEzIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKLSMgbWV0OgotIwotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0j
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKLSMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0jIGRpc3RyaWJ1dGlvbi4KLSMgICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotIyBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQotIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0jICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0jIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgotIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAotIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKLSMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCi0jIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSMgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0jIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0KLSMgVGhpcyBmaWxlIGNvbnRhaW5zIHN0cmluZyByZXNvdXJjZXMgZm9yIENvZGVH
ZW5lcmF0b3JJbnNwZWN0b3IuCi0jIEl0cyBzeW50YXggaXMgYSBQeXRob24gc3ludGF4IHN1YnNl
dCwgc3VpdGFibGUgZm9yIG1hbnVhbCBwYXJzaW5nLgotCi1mcm9udGVuZF9kb21haW5fY2xhc3Mg
PSAoCi0iIiJjbGFzcyAke2V4cG9ydE1hY3JvfSAke2RvbWFpbkNsYXNzTmFtZX0gewotcHVibGlj
OgotICAgICR7ZG9tYWluQ2xhc3NOYW1lfShJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbCkgOiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbChpbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwpIHsgfQotJHtmcm9udGVuZERvbWFpbk1ldGhvZERlY2xhcmF0aW9u
c31wcml2YXRlOgotICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogbV9pbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWw7Ci19OwotCi0iIiIpCi0KLWJhY2tlbmRfZGlzcGF0Y2hlcl9jb25zdHJ1Y3Rv
ciA9ICgKLSIiIlBhc3NSZWZQdHI8JHtkaXNwYXRjaGVyTmFtZX0+ICR7ZGlzcGF0Y2hlck5hbWV9
OjpjcmVhdGUoSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyLCAk
e2FnZW50TmFtZX0qIGFnZW50KQotewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgJHtkaXNwYXRj
aGVyTmFtZX0oYmFja2VuZERpc3BhdGNoZXIsIGFnZW50KSk7Ci19Ci0KLSR7ZGlzcGF0Y2hlck5h
bWV9Ojoke2Rpc3BhdGNoZXJOYW1lfShJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciogYmFja2Vu
ZERpc3BhdGNoZXIsICR7YWdlbnROYW1lfSogYWdlbnQpCi0gICAgOiBJbnNwZWN0b3JTdXBwbGVt
ZW50YWxCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlcikKLSAgICAsIG1fYWdlbnQo
YWdlbnQpCi17Ci0gICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRjaGVyRm9y
RG9tYWluKEFTQ0lJTGl0ZXJhbCgiJHtkb21haW5OYW1lfSIpLCB0aGlzKTsKLX0KLSIiIikKLQot
YmFja2VuZF9kaXNwYXRjaGVyX2Rpc3BhdGNoX21ldGhvZF9zaW1wbGUgPSAoCi0iIiJ2b2lkICR7
ZGlzcGF0Y2hlck5hbWV9OjpkaXNwYXRjaChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBtZXRo
b2QsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtZXNzYWdlKQotewotICAgIFJlZjwke2Rp
c3BhdGNoZXJOYW1lfT4gcHJvdGVjdCgqdGhpcyk7Ci0KLSR7aWZDaGFpbn0KLSAgICBlbHNlCi0g
ICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwg
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCBTdHJpbmcoIiciKSAr
ICIke2RvbWFpbk5hbWV9IiArICcuJyArIG1ldGhvZCArICInIHdhcyBub3QgZm91bmQiKTsKLX0K
LSIiIikKLQotYmFja2VuZF9kaXNwYXRjaGVyX2Rpc3BhdGNoX21ldGhvZCA9ICgKLSIiInZvaWQg
JHtkaXNwYXRjaGVyTmFtZX06OmRpc3BhdGNoKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIG1l
dGhvZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1lc3NhZ2UpCi17Ci0gICAgUmVmPCR7
ZGlzcGF0Y2hlck5hbWV9PiBwcm90ZWN0KCp0aGlzKTsKLQotICAgIHR5cGVkZWYgdm9pZCAoJHtk
aXNwYXRjaGVyTmFtZX06OipDYWxsSGFuZGxlcikobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rv
cjo6SW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsKLSAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5n
LCBDYWxsSGFuZGxlcj4gRGlzcGF0Y2hNYXA7Ci0gICAgREVQUkVDQVRFRF9ERUZJTkVfU1RBVElD
X0xPQ0FMKERpc3BhdGNoTWFwLCBkaXNwYXRjaE1hcCwgKCkpOwotICAgIGlmIChkaXNwYXRjaE1h
cC5pc0VtcHR5KCkpIHsKLSAgICAgICAgc3RhdGljIGNvbnN0IHN0cnVjdCBNZXRob2RUYWJsZSB7
Ci0gICAgICAgICAgICBjb25zdCBjaGFyKiBuYW1lOwotICAgICAgICAgICAgQ2FsbEhhbmRsZXIg
aGFuZGxlcjsKLSAgICAgICAgfSBjb21tYW5kc1tdID0gewotJHtkaXNwYXRjaGVyQ29tbWFuZHN9
Ci0gICAgICAgIH07Ci0gICAgICAgIHNpemVfdCBsZW5ndGggPSBXVEZfQVJSQVlfTEVOR1RIKGNv
bW1hbmRzKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkKLSAg
ICAgICAgICAgIGRpc3BhdGNoTWFwLmFkZChjb21tYW5kc1tpXS5uYW1lLCBjb21tYW5kc1tpXS5o
YW5kbGVyKTsKLSAgICB9Ci0KLSAgICBIYXNoTWFwPFN0cmluZywgQ2FsbEhhbmRsZXI+OjppdGVy
YXRvciBpdCA9IGRpc3BhdGNoTWFwLmZpbmQobWV0aG9kKTsKLSAgICBpZiAoaXQgPT0gZGlzcGF0
Y2hNYXAuZW5kKCkpIHsKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9j
b2xFcnJvcigmY2FsbElkLCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91
bmQsIFN0cmluZygiJyIpICsgIiR7ZG9tYWluTmFtZX0iICsgJy4nICsgbWV0aG9kICsgIicgd2Fz
IG5vdCBmb3VuZCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgKCgqdGhpcykuKml0
LT52YWx1ZSkoY2FsbElkLCAqbWVzc2FnZS5nZXQoKSk7Ci19Ci0iIiIpCi0KLWJhY2tlbmRfbWV0
aG9kID0gKAotIiIidm9pZCAke2Rpc3BhdGNoZXJOYW1lfTo6JHttZXRob2ROYW1lfShsb25nIGNh
bGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiR7cmVxdWVzdE1lc3NhZ2VPYmplY3R9KQotewot
JHttZXRob2RJblBhcmFtZXRlcnNIYW5kbGluZ30ke21ldGhvZERpc3BhdGNoSGFuZGxpbmd9JHtt
ZXRob2RPdXRQYXJhbWV0ZXJzSGFuZGxpbmd9JHttZXRob2RFbmRpbmdIYW5kbGluZ30KLX0KLSIi
IikKLQotZnJvbnRlbmRfbWV0aG9kID0gKCIiInZvaWQgSW5zcGVjdG9yJHtkb21haW5OYW1lfUZy
b250ZW5kRGlzcGF0Y2hlcjo6JHtldmVudE5hbWV9KCR7cGFyYW1ldGVyc30pCi17Ci0gICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4ganNvbk1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0
ZSgpOwotICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJtZXRob2QiKSwg
QVNDSUlMaXRlcmFsKCIke2RvbWFpbk5hbWV9LiR7ZXZlbnROYW1lfSIpKTsKLSR7Y29kZX0KLSAg
ICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGpzb25N
ZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Ci19Ci0iIiIpCi0KLWNhbGxiYWNrX21ldGhvZCA9ICgK
LSIiIiR7aGFuZGxlck5hbWV9Ojoke2NhbGxiYWNrTmFtZX06OiR7Y2FsbGJhY2tOYW1lfShQYXNz
UmVmUHRyPEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiBiYWNrZW5kRGlzcGF0Y2hlciwgaW50
IGlkKSA6IEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFz
ZShiYWNrZW5kRGlzcGF0Y2hlciwgaWQpIHsgfQotCi12b2lkICR7aGFuZGxlck5hbWV9Ojoke2Nh
bGxiYWNrTmFtZX06OnNlbmRTdWNjZXNzKCR7cGFyYW1ldGVyc30pCi17Ci0gICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4ganNvbk1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwot
JHtjb2RlfSAgICBzZW5kSWZBY3RpdmUoanNvbk1lc3NhZ2UsIEVycm9yU3RyaW5nKCkpOwotfQot
IiIiKQotCi1mcm9udGVuZF9oID0gKAotIiIiI2lmbmRlZiBJbnNwZWN0b3Ike291dHB1dEZpbGVO
YW1lUHJlZml4fUZyb250ZW5kRGlzcGF0Y2hlcnNfaAotI2RlZmluZSBJbnNwZWN0b3Ike291dHB1
dEZpbGVOYW1lUHJlZml4fUZyb250ZW5kRGlzcGF0Y2hlcnNfaAotCi0jaW5jbHVkZSAiSW5zcGVj
dG9yJHtvdXRwdXRGaWxlTmFtZVByZWZpeH1UeXBlQnVpbGRlcnMuaCIKLSNpbmNsdWRlIDxpbnNw
ZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLmg+Ci0jaW5jbHVkZSA8aW5zcGVjdG9yL0lu
c3BlY3RvclZhbHVlcy5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi0jaWYgRU5B
QkxFKElOU1BFQ1RPUikKLQotJHtkb21haW5DbGFzc0xpc3R9Ci0KLSNlbmRpZiAvLyBFTkFCTEUo
SU5TUEVDVE9SKQotCi19IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotI2VuZGlmIC8vICFkZWZp
bmVkKEluc3BlY3RvciR7b3V0cHV0RmlsZU5hbWVQcmVmaXh9RnJvbnRlbmREaXNwYXRjaGVyc19o
KQotIiIiKQotCi1iYWNrZW5kX2ggPSAoCi0iIiIjaWZuZGVmIEluc3BlY3RvciR7b3V0cHV0Rmls
ZU5hbWVQcmVmaXh9QmFja2VuZERpc3BhdGNoZXJzX2gKLSNkZWZpbmUgSW5zcGVjdG9yJHtvdXRw
dXRGaWxlTmFtZVByZWZpeH1CYWNrZW5kRGlzcGF0Y2hlcnNfaAotCi0jaWYgRU5BQkxFKElOU1BF
Q1RPUikKLQotI2luY2x1ZGUgIkluc3BlY3RvciR7b3V0cHV0RmlsZU5hbWVQcmVmaXh9VHlwZUJ1
aWxkZXJzLmgiCi0jaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
Lmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLXR5cGVkZWYgU3RyaW5nIEVycm9y
U3RyaW5nOwotCi0ke2hhbmRsZXJJbnRlcmZhY2VzfQotCi0ke2Rpc3BhdGNoZXJJbnRlcmZhY2Vz
fQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9S
KQotCi0jZW5kaWYgLy8gIWRlZmluZWQoSW5zcGVjdG9yJHtvdXRwdXRGaWxlTmFtZVByZWZpeH1C
YWNrZW5kRGlzcGF0Y2hlcnNfaCkKLSIiIikKLQotYmFja2VuZF9jcHAgPSAoCi0iIiIKLSNpbmNs
dWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShJTlNQRUNUT1IpCi0KLSNpbmNsdWRlICJJbnNw
ZWN0b3Ike291dHB1dEZpbGVOYW1lUHJlZml4fUJhY2tlbmREaXNwYXRjaGVycy5oIgotCi0jaW5j
bHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oPgotI2luY2x1ZGUgPGlu
c3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+
Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3Ig
ewotCi0ke2hhbmRsZXJJbXBsZW1lbnRhdGlvbnN9Ci0KLSR7bWV0aG9kc30KLX0gLy8gbmFtZXNw
YWNlIEluc3BlY3RvcgotCi0jZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKLSIiIikKLQotZnJv
bnRlbmRfY3BwID0gKAotIiIiCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShJ
TlNQRUNUT1IpCi0KLSNpbmNsdWRlICJJbnNwZWN0b3Ike291dHB1dEZpbGVOYW1lUHJlZml4fUZy
b250ZW5kRGlzcGF0Y2hlcnMuaCIKLQotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLSNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0K
LSR7bWV0aG9kc30KLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSNlbmRpZiAvLyBFTkFC
TEUoSU5TUEVDVE9SKQotIiIiKQotCi10eXBlYnVpbGRlcl9oID0gKAotIiIiCi0jaWZuZGVmIElu
c3BlY3RvciR7b3V0cHV0RmlsZU5hbWVQcmVmaXh9VHlwZUJ1aWxkZXJzX2gKLSNkZWZpbmUgSW5z
cGVjdG9yJHtvdXRwdXRGaWxlTmFtZVByZWZpeH1UeXBlQnVpbGRlcnNfaAotCi0jaWYgRU5BQkxF
KElOU1BFQ1RPUikKLQotI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JUeXBlQnVpbGRlci5o
PgotJHt0eXBlQnVpbGRlckRlcGVuZGVuY2llc30KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5o
PgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3Igewot
Ci1uYW1lc3BhY2UgVHlwZUJ1aWxkZXIgewotCi0ke2ZvcndhcmRzfQotCi0ke2V4cG9ydE1hY3Jv
fSBTdHJpbmcgZ2V0JHtvdXRwdXRGaWxlTmFtZVByZWZpeH1FbnVtQ29uc3RhbnRWYWx1ZShpbnQg
Y29kZSk7Ci0KLSR7dHlwZUJ1aWxkZXJzfQotfSAvLyBuYW1lc3BhY2UgVHlwZUJ1aWxkZXIKLQot
fSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQot
Ci0jZW5kaWYgLy8gIWRlZmluZWQoSW5zcGVjdG9yJHtvdXRwdXRGaWxlTmFtZVByZWZpeH1UeXBl
QnVpbGRlcnNfaCkKLQotIiIiKQotCi10eXBlYnVpbGRlcl9jcHAgPSAoCi0iIiIKLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkluc3BlY3RvciR7b3V0cHV0RmlsZU5hbWVQcmVmaXh9
VHlwZUJ1aWxkZXJzLmgiCi0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SKQotCi0jaW5jbHVkZSA8d3Rm
L3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQotbmFtZXNwYWNlIFR5
cGVCdWlsZGVyIHsKLQotc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGVudW1fY29uc3RhbnRfdmFs
dWVzW10gPSB7Ci0ke2VudW1Db25zdGFudFZhbHVlc319OwotCi1TdHJpbmcgZ2V0JHtvdXRwdXRG
aWxlTmFtZVByZWZpeH1FbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSkgewotICAgIHJldHVybiBl
bnVtX2NvbnN0YW50X3ZhbHVlc1tjb2RlXTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgVHlwZUJ1aWxk
ZXIKLQotJHtpbXBsQ29kZX0KLQotI2lmICR7dmFsaWRhdG9ySWZkZWZOYW1lfQotCi0ke3ZhbGlk
YXRvckNvZGV9Ci0KLSNlbmRpZiAvLyAke3ZhbGlkYXRvcklmZGVmTmFtZX0KLQotfSAvLyBuYW1l
c3BhY2UgSW5zcGVjdG9yCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQotIiIiKQotCi1i
YWNrZW5kX2pzID0gKAotIiIiCi0KLSR7ZG9tYWluSW5pdGlhbGl6ZXJzfQotIiIiKQotCi1wYXJh
bV9jb250YWluZXJfYWNjZXNzX2NvZGUgPSAiIiIKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBwYXJhbXNDb250YWluZXIgPSBtZXNzYWdlLmdldE9iamVjdCgicGFyYW1zIik7Ci0gICAgSW5z
cGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7
Ci0gICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMu
Z2V0KCk7Ci0iIiIKLQotY2xhc3NfYmluZGluZ19idWlsZGVyX3BhcnRfMSA9ICgKLSIiIiAgICAg
ICAgQWxsRmllbGRzU2V0ID0gJXMKLSAgICB9OwotCi0gICAgdGVtcGxhdGU8aW50IFNUQVRFPgot
ICAgIGNsYXNzIEJ1aWxkZXIgewotICAgIHByaXZhdGU6Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0
b3I6Okluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7Ci0KLSAgICAgICAgdGVtcGxhdGU8aW50IFNU
RVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKLSAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRo
aXMpOwotICAgICAgICB9Ci0KLSAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPC8qJXMqL0luc3Bl
Y3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBwdHIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2lu
aXRfc3RhdGUpOwotICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7Ci0gICAgICAgIH0KLSAgICAg
ICAgZnJpZW5kIGNsYXNzICVzOwotICAgIHB1YmxpYzoKLSIiIikKLQotY2xhc3NfYmluZGluZ19i
dWlsZGVyX3BhcnRfMiA9ICgiIiIKLSAgICAgICAgQnVpbGRlcjxTVEFURSB8ICVzPiYgc2V0JXMo
JXMgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUg
JiAlcyksIHByb3BlcnR5XyVzX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5z
ZXQlcyhBU0NJSUxpdGVyYWwoIiVzIiksICVzKTsKLSAgICAgICAgICAgIHJldHVybiBjYXN0U3Rh
dGU8JXM+KCk7Ci0gICAgICAgIH0KLSIiIikKLQotY2xhc3NfYmluZGluZ19idWlsZGVyX3BhcnRf
MyA9ICgiIiIKLSAgICAgICAgb3BlcmF0b3IgUmVmUHRyPCVzPiYgKCkKLSAgICAgICAgewotICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNf
bm90X3JlYWR5KTsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZiglcykgPT0gc2l6
ZW9mKEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0KSwgY2Fubm90X2Nhc3QpOwotICAgICAgICAg
ICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjwlcz4qPigmbV9yZXN1bHQpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgUGFzc1JlZlB0cjwlcz4gcmVsZWFzZSgpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiBSZWZQdHI8JXM+KCp0aGlzKS5yZWxlYXNlKCk7Ci0gICAgICAgIH0K
LSAgICB9OwotCi0iIiIpCi0KLWNsYXNzX2JpbmRpbmdfYnVpbGRlcl9wYXJ0XzQgPSAoCi0iIiIg
ICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCi0gICAgewotICAgICAgICBy
ZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q6OmNy
ZWF0ZSgpKTsKLSAgICB9Ci0iIiIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9fX2luaXRfXy5weSBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBi
NzYxMThjZTVlZTI5Zjg0Y2Q1NTBlOTg0MjE4MGE0ZWIzNDk3M2EKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9fX2luaXRf
Xy5weQpAQCAtMCwwICsxLDEyIEBACisjIFJlcXVpcmVkIGZvciBQeXRob24gdG8gc2VhcmNoIHRo
aXMgZGlyZWN0b3J5IGZvciBtb2R1bGUgZmlsZXMKKworZnJvbSBtb2RlbHMgaW1wb3J0ICoKK2Zy
b20gZ2VuZXJhdG9yIGltcG9ydCAqCisKK2Zyb20gZ2VuZXJhdGVfYmFja2VuZF9jb21tYW5kcyBp
bXBvcnQgKgorZnJvbSBnZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyIGltcG9ydCAq
Citmcm9tIGdlbmVyYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbiBpbXBvcnQg
KgorZnJvbSBnZW5lcmF0ZV9mcm9udGVuZF9kaXNwYXRjaGVyX2hlYWRlciBpbXBvcnQgKgorZnJv
bSBnZW5lcmF0ZV9mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uIGltcG9ydCAqCitm
cm9tIGdlbmVyYXRlX3R5cGVfYnVpbGRlcl9oZWFkZXIgaW1wb3J0ICoKK2Zyb20gZ2VuZXJhdGVf
dHlwZV9idWlsZGVyX2ltcGxlbWVudGF0aW9uIGltcG9ydCAqCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9iYWNrZW5k
X2NvbW1hbmRzLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2Nv
ZGVnZW4vZ2VuZXJhdGVfYmFja2VuZF9jb21tYW5kcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44YTgwNWYzZmEw
MzYxM2U1OWM5ZDc3ZGM2NjgxNzU5NWIyYTQ1Yjg3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfYmFja2Vu
ZF9jb21tYW5kcy5weQpAQCAtMCwwICsxLDExNyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisj
CisjIENvcHlyaWdodCAoYykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisj
IENvcHlyaWdodCAoYykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisjIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisj
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisKK2lt
cG9ydCBsb2dnaW5nCitpbXBvcnQgc3RyaW5nCitmcm9tIHN0cmluZyBpbXBvcnQgVGVtcGxhdGUK
KworZnJvbSBnZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvciwgdWNmaXJzdAorZnJvbSBnZW5lcmF0
b3JfdGVtcGxhdGVzIGltcG9ydCBHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgVGVtcGxhdGVzCitmcm9t
IG1vZGVscyBpbXBvcnQgRW51bVR5cGUKKworbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2Jh
bCcpCisKKworY2xhc3MgQmFja2VuZENvbW1hbmRzR2VuZXJhdG9yKEdlbmVyYXRvcik6CisgICAg
ZGVmIF9faW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0aCk6CisgICAgICAgIEdlbmVy
YXRvci5fX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpCisKKyAgICBkZWYgb3V0
cHV0X2ZpbGVuYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gIkluc3BlY3RvciVzQmFja2VuZENv
bW1hbmRzLmpzIiAlIHNlbGYubW9kZWwoKS5mcmFtZXdvcmsuc2V0dGluZygncHJlZml4JykKKwor
ICAgIGRlZiBkb21haW5zX3RvX2dlbmVyYXRlKHNlbGYpOgorICAgICAgICBkZWYgc2hvdWxkX2dl
bmVyYXRlX2RvbWFpbihkb21haW4pOgorICAgICAgICAgICAgZG9tYWluX2VudW1fdHlwZXMgPSBm
aWx0ZXIobGFtYmRhIGRlY2xhcmF0aW9uOiBpc2luc3RhbmNlKGRlY2xhcmF0aW9uLnR5cGUsIEVu
dW1UeXBlKSwgZG9tYWluLnR5cGVfZGVjbGFyYXRpb25zKQorICAgICAgICAgICAgcmV0dXJuIGxl
bihkb21haW4uY29tbWFuZHMpID4gMCBvciBsZW4oZG9tYWluLmV2ZW50cykgPiAwIG9yIGxlbihk
b21haW5fZW51bV90eXBlcykgPiAwCisKKyAgICAgICAgcmV0dXJuIGZpbHRlcihzaG91bGRfZ2Vu
ZXJhdGVfZG9tYWluLCBHZW5lcmF0b3IuZG9tYWluc190b19nZW5lcmF0ZShzZWxmKSkKKworICAg
IGRlZiBnZW5lcmF0ZV9vdXRwdXQoc2VsZik6CisgICAgICAgIHNlY3Rpb25zID0gW10KKyAgICAg
ICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfbGljZW5zZSgpKQorICAgICAgICBzZWN0
aW9ucy5leHRlbmQobWFwKHNlbGYuZ2VuZXJhdGVfZG9tYWluLCBzZWxmLmRvbWFpbnNfdG9fZ2Vu
ZXJhdGUoKSkpCisgICAgICAgIHJldHVybiAiXG5cbiIuam9pbihzZWN0aW9ucykKKworICAgIGRl
ZiBnZW5lcmF0ZV9kb21haW4oc2VsZiwgZG9tYWluKToKKyAgICAgICAgbGluZXMgPSBbXQorICAg
ICAgICBhcmdzID0geworICAgICAgICAgICAgJ2RvbWFpbic6IGRvbWFpbi5kb21haW5fbmFtZQor
ICAgICAgICB9CisKKyAgICAgICAgbGluZXMuYXBwZW5kKCcvLyAlKGRvbWFpbilzLicgJSBhcmdz
KQorCisgICAgICAgIGhhc19hc3luY19jb21tYW5kcyA9IGFueShtYXAobGFtYmRhIGNvbW1hbmQ6
IGNvbW1hbmQuaXNfYXN5bmMsIGRvbWFpbi5jb21tYW5kcykpCisgICAgICAgIGlmIGxlbihkb21h
aW4uZXZlbnRzKSA+IDAgb3IgaGFzX2FzeW5jX2NvbW1hbmRzOgorICAgICAgICAgICAgbGluZXMu
YXBwZW5kKCdJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyJShkb21haW4pc0Rpc3BhdGNoZXIgPSBJ
bnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluRGlzcGF0Y2hlci5iaW5kKEluc3BlY3RvckJh
Y2tlbmQsICIlKGRvbWFpbilzIik7JyAlIGFyZ3MpCisKKyAgICAgICAgZm9yIGRlY2xhcmF0aW9u
IGluIGRvbWFpbi50eXBlX2RlY2xhcmF0aW9uczoKKyAgICAgICAgICAgIGlmIGRlY2xhcmF0aW9u
LnR5cGUuaXNfZW51bSgpOgorICAgICAgICAgICAgICAgIGVudW1fYXJncyA9IHsKKyAgICAgICAg
ICAgICAgICAgICAgJ2RvbWFpbic6IGRvbWFpbi5kb21haW5fbmFtZSwKKyAgICAgICAgICAgICAg
ICAgICAgJ2VudW1OYW1lJzogZGVjbGFyYXRpb24udHlwZV9uYW1lLAorICAgICAgICAgICAgICAg
ICAgICAnZW51bU1hcCc6ICIsICIuam9pbihbJyVzOiAiJXMiJyAlIChHZW5lcmF0b3Iuc3R5bGl6
ZWRfbmFtZV9mb3JfZW51bV92YWx1ZShlbnVtX3ZhbHVlKSwgZW51bV92YWx1ZSkgZm9yIGVudW1f
dmFsdWUgaW4gZGVjbGFyYXRpb24udHlwZS5lbnVtX3ZhbHVlcygpXSkKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCdJbnNwZWN0b3JCYWNrZW5kLnJlZ2lz
dGVyRW51bSgiJShkb21haW4pcy4lKGVudW1OYW1lKXMiLCB7JShlbnVtTWFwKXN9KTsnICUgZW51
bV9hcmdzKQorCisgICAgICAgICAgICBkZWYgaXNfYW5vbnltb3VzX2VudW1fbWVtYmVyKHR5cGVf
bWVtYmVyKToKKyAgICAgICAgICAgICAgICByZXR1cm4gaXNpbnN0YW5jZSh0eXBlX21lbWJlci50
eXBlLCBFbnVtVHlwZSkgYW5kIHR5cGVfbWVtYmVyLnR5cGUuaXNfYW5vbnltb3VzCisKKyAgICAg
ICAgICAgIGZvciBfbWVtYmVyIGluIGZpbHRlcihpc19hbm9ueW1vdXNfZW51bV9tZW1iZXIsIGRl
Y2xhcmF0aW9uLnR5cGVfbWVtYmVycyk6CisgICAgICAgICAgICAgICAgZW51bV9hcmdzID0gewor
ICAgICAgICAgICAgICAgICAgICAnZG9tYWluJzogZG9tYWluLmRvbWFpbl9uYW1lLAorICAgICAg
ICAgICAgICAgICAgICAnZW51bU5hbWUnOiAnJXMlcycgJSAoZGVjbGFyYXRpb24udHlwZV9uYW1l
LCB1Y2ZpcnN0KF9tZW1iZXIubWVtYmVyX25hbWUpKSwKKyAgICAgICAgICAgICAgICAgICAgJ2Vu
dW1NYXAnOiAiLCAiLmpvaW4oWyclczogIiVzIicgJSAoR2VuZXJhdG9yLnN0eWxpemVkX25hbWVf
Zm9yX2VudW1fdmFsdWUoZW51bV92YWx1ZSksIGVudW1fdmFsdWUpIGZvciBlbnVtX3ZhbHVlIGlu
IF9tZW1iZXIudHlwZS5lbnVtX3ZhbHVlcygpXSkKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgbGluZXMuYXBwZW5kKCdJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRW51bSgiJShk
b21haW4pcy4lKGVudW1OYW1lKXMiLCB7JShlbnVtTWFwKXN9KTsnICUgZW51bV9hcmdzKQorCisg
ICAgICAgIGZvciBldmVudCBpbiBkb21haW4uZXZlbnRzOgorICAgICAgICAgICAgZXZlbnRfYXJn
cyA9IHsKKyAgICAgICAgICAgICAgICAnZG9tYWluJzogZG9tYWluLmRvbWFpbl9uYW1lLAorICAg
ICAgICAgICAgICAgICdldmVudE5hbWUnOiBldmVudC5ldmVudF9uYW1lLAorICAgICAgICAgICAg
ICAgICdwYXJhbXMnOiAiLCAiLmpvaW4oWyciJXMiJyAlIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFt
ZSBmb3IgcGFyYW1ldGVyIGluIGV2ZW50LmV2ZW50X3BhcmFtZXRlcnNdKQorICAgICAgICAgICAg
fQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCdJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRXZl
bnQoIiUoZG9tYWluKXMuJShldmVudE5hbWUpcyIsIFslKHBhcmFtcylzXSk7JyAlIGV2ZW50X2Fy
Z3MpCisKKyAgICAgICAgZm9yIGNvbW1hbmQgaW4gZG9tYWluLmNvbW1hbmRzOgorCisgICAgICAg
ICAgICBkZWYgZ2VuZXJhdGVfcGFyYW1ldGVyX29iamVjdChwYXJhbWV0ZXIpOgorICAgICAgICAg
ICAgICAgIG9wdGlvbmFsX3N0cmluZyA9ICJ0cnVlIiBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwg
ZWxzZSAiZmFsc2UiCisgICAgICAgICAgICAgICAgcGFpcnMgPSBbXQorICAgICAgICAgICAgICAg
IHBhaXJzLmFwcGVuZCgnIm5hbWUiOiAiJXMiJyAlIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkK
KyAgICAgICAgICAgICAgICBwYWlycy5hcHBlbmQoJyJ0eXBlIjogIiVzIicgJSBHZW5lcmF0b3Iu
anNfbmFtZV9mb3JfcGFyYW1ldGVyX3R5cGUocGFyYW1ldGVyLnR5cGUpKQorICAgICAgICAgICAg
ICAgIHBhaXJzLmFwcGVuZCgnIm9wdGlvbmFsIjogJXMnICUgb3B0aW9uYWxfc3RyaW5nKQorICAg
ICAgICAgICAgICAgIHJldHVybiAieyVzfSIgJSAiLCAiLmpvaW4ocGFpcnMpCisKKyAgICAgICAg
ICAgIGNvbW1hbmRfYXJncyA9IHsKKyAgICAgICAgICAgICAgICAnZG9tYWluJzogZG9tYWluLmRv
bWFpbl9uYW1lLAorICAgICAgICAgICAgICAgICdjb21tYW5kTmFtZSc6IGNvbW1hbmQuY29tbWFu
ZF9uYW1lLAorICAgICAgICAgICAgICAgICdjYWxsUGFyYW1zJzogIiwgIi5qb2luKFtnZW5lcmF0
ZV9wYXJhbWV0ZXJfb2JqZWN0KHBhcmFtZXRlcikgZm9yIHBhcmFtZXRlciBpbiBjb21tYW5kLmNh
bGxfcGFyYW1ldGVyc10pLAorICAgICAgICAgICAgICAgICdyZXR1cm5QYXJhbXMnOiAiLCAiLmpv
aW4oWyciJXMiJyAlIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSBmb3IgcGFyYW1ldGVyIGluIGNv
bW1hbmQucmV0dXJuX3BhcmFtZXRlcnNdKSwKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGxp
bmVzLmFwcGVuZCgnSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIiUoZG9tYWluKXMu
JShjb21tYW5kTmFtZSlzIiwgWyUoY2FsbFBhcmFtcylzXSwgWyUocmV0dXJuUGFyYW1zKXNdKTsn
ICUgY29tbWFuZF9hcmdzKQorCisgICAgICAgIHJldHVybiAiXG4iLmpvaW4obGluZXMpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9n
ZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5IGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfYmFja2VuZF9kaXNwYXRjaGVy
X2hlYWRlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yNmY0YjM5ZDAzYWU1YmMzYTQzYzY0MzE0ZWI4MDJiNDIy
N2Y5OTg3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weQpA
QCAtMCwwICsxLDE4MSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAo
YykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoYykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisj
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisj
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisjIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisKK2ltcG9ydCBsb2dnaW5nCitp
bXBvcnQgcmUKK2ltcG9ydCBzdHJpbmcKK2Zyb20gc3RyaW5nIGltcG9ydCBUZW1wbGF0ZQorCitm
cm9tIGdlbmVyYXRvciBpbXBvcnQgR2VuZXJhdG9yLCB1Y2ZpcnN0Citmcm9tIGdlbmVyYXRvcl90
ZW1wbGF0ZXMgaW1wb3J0IEdlbmVyYXRvclRlbXBsYXRlcyBhcyBUZW1wbGF0ZXMKK2Zyb20gbW9k
ZWxzIGltcG9ydCBFbnVtVHlwZQorCitsb2cgPSBsb2dnaW5nLmdldExvZ2dlcignZ2xvYmFsJykK
KworCitjbGFzcyBCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvcihHZW5lcmF0b3IpOgor
ICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpOgorICAgICAgICBH
ZW5lcmF0b3IuX19pbml0X18oc2VsZiwgbW9kZWwsIGlucHV0X2ZpbGVwYXRoKQorCisgICAgZGVm
IG91dHB1dF9maWxlbmFtZShzZWxmKToKKyAgICAgICAgcmV0dXJuICJJbnNwZWN0b3Ilc0JhY2tl
bmREaXNwYXRjaGVycy5oIiAlIHNlbGYubW9kZWwoKS5mcmFtZXdvcmsuc2V0dGluZygncHJlZml4
JykKKworICAgIGRlZiBkb21haW5zX3RvX2dlbmVyYXRlKHNlbGYpOgorICAgICAgICByZXR1cm4g
ZmlsdGVyKGxhbWJkYSBkb21haW46IGxlbihkb21haW4uY29tbWFuZHMpID4gMCwgR2VuZXJhdG9y
LmRvbWFpbnNfdG9fZ2VuZXJhdGUoc2VsZikpCisKKyAgICBkZWYgZ2VuZXJhdGVfb3V0cHV0KHNl
bGYpOgorICAgICAgICBoZWFkZXJzID0gWworICAgICAgICAgICAgJyJJbnNwZWN0b3Ilc1R5cGVC
dWlsZGVycy5oIicgJSBzZWxmLm1vZGVsKCkuZnJhbWV3b3JrLnNldHRpbmcoJ3ByZWZpeCcpLAor
ICAgICAgICAgICAgJzxpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4nLAor
ICAgICAgICAgICAgJzx3dGYvUGFzc1JlZlB0ci5oPicsCisgICAgICAgICAgICAnPHd0Zi90ZXh0
L1dURlN0cmluZy5oPiddCisKKyAgICAgICAgdHlwZWRlZnMgPSBbKCdTdHJpbmcnLCAnRXJyb3JT
dHJpbmcnKV0KKworICAgICAgICBoZWFkZXJfYXJncyA9IHsKKyAgICAgICAgICAgICdoZWFkZXJH
dWFyZFN0cmluZyc6IHJlLnN1YignXFcrJywgJ18nLCBzZWxmLm91dHB1dF9maWxlbmFtZSgpKSwK
KyAgICAgICAgICAgICdpbmNsdWRlcyc6ICdcbicuam9pbihbJyNpbmNsdWRlICcgKyBoZWFkZXIg
Zm9yIGhlYWRlciBpbiBoZWFkZXJzXSksCisgICAgICAgICAgICAndHlwZWRlZnMnOiAnXG4nLmpv
aW4oWyd0eXBlZGVmICVzICVzOycgJSB0eXBlZGVmIGZvciB0eXBlZGVmIGluIHR5cGVkZWZzXSks
CisgICAgICAgICAgICAnaW5wdXRGaWxlbmFtZSc6IHNlbGYuX2lucHV0X2ZpbGVwYXRoCisgICAg
ICAgIH0KKworICAgICAgICBzZWN0aW9ucyA9IFtdCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChz
ZWxmLmdlbmVyYXRlX2xpY2Vuc2UoKSkKKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRl
KFRlbXBsYXRlcy5DcHBIZWFkZXJQcmVsdWRlKS5zdWJzdGl0dXRlKE5vbmUsICoqaGVhZGVyX2Fy
Z3MpKQorICAgICAgICBzZWN0aW9ucy5leHRlbmQobWFwKHNlbGYuX2dlbmVyYXRlX2hhbmRsZXJf
ZGVjbGFyYXRpb25zX2Zvcl9kb21haW4sIHNlbGYuZG9tYWluc190b19nZW5lcmF0ZSgpKSkKKyAg
ICAgICAgc2VjdGlvbnMuZXh0ZW5kKG1hcChzZWxmLl9nZW5lcmF0ZV9kaXNwYXRjaGVyX2RlY2xh
cmF0aW9uc19mb3JfZG9tYWluLCBzZWxmLmRvbWFpbnNfdG9fZ2VuZXJhdGUoKSkpCisgICAgICAg
IHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMuQ3BwSGVhZGVyUG9zdGx1ZGUpLnN1
YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCisgICAgICAgIHJldHVybiAiXG5cbiIuam9p
bihzZWN0aW9ucykKKworICAgICMgUHJpdmF0ZSBtZXRob2RzLgorCisgICAgZGVmIF9nZW5lcmF0
ZV9oYW5kbGVyX2RlY2xhcmF0aW9uc19mb3JfZG9tYWluKHNlbGYsIGRvbWFpbik6CisgICAgICAg
IGNsYXNzQ29tcG9uZW50cyA9IFsnY2xhc3MnXQorICAgICAgICBleHBvcnRNYWNybyA9IHNlbGYu
bW9kZWwoKS5mcmFtZXdvcmsuc2V0dGluZygnZXhwb3J0X21hY3JvJywgTm9uZSkKKyAgICAgICAg
aWYgZXhwb3J0TWFjcm8gaXMgbm90IE5vbmU6CisgICAgICAgICAgICBjbGFzc0NvbXBvbmVudHMu
YXBwZW5kKGV4cG9ydE1hY3JvKQorCisgICAgICAgIHVzZWRfZW51bV9uYW1lcyA9IHNldCgpCisK
KyAgICAgICAgY29tbWFuZF9kZWNsYXJhdGlvbnMgPSBbXQorICAgICAgICBmb3IgY29tbWFuZCBp
biBkb21haW4uY29tbWFuZHM6CisgICAgICAgICAgICBjb21tYW5kX2RlY2xhcmF0aW9ucy5hcHBl
bmQoc2VsZi5fZ2VuZXJhdGVfaGFuZGxlcl9kZWNsYXJhdGlvbl9mb3JfY29tbWFuZChjb21tYW5k
LCB1c2VkX2VudW1fbmFtZXMpKQorCisgICAgICAgIGhhbmRsZXJfYXJncyA9IHsKKyAgICAgICAg
ICAgICdjbGFzc0FuZEV4cG9ydE1hY3JvJzogIiAiLmpvaW4oY2xhc3NDb21wb25lbnRzKSwKKyAg
ICAgICAgICAgICdkb21haW5OYW1lJzogZG9tYWluLmRvbWFpbl9uYW1lLAorICAgICAgICAgICAg
J2NvbW1hbmREZWNsYXJhdGlvbnMnOiAiXG4iLmpvaW4oY29tbWFuZF9kZWNsYXJhdGlvbnMpCisg
ICAgICAgIH0KKworICAgICAgICByZXR1cm4gR2VuZXJhdG9yLndyYXBfd2l0aF9ndWFyZF9mb3Jf
ZG9tYWluKGRvbWFpbiwgVGVtcGxhdGUoVGVtcGxhdGVzLkJhY2tlbmREaXNwYXRjaGVySGVhZGVy
RG9tYWluSGFuZGxlckRlY2xhcmF0aW9uKS5zdWJzdGl0dXRlKE5vbmUsICoqaGFuZGxlcl9hcmdz
KSkKKworICAgIGRlZiBfZ2VuZXJhdGVfYW5vbnltb3VzX2VudW1fZm9yX3BhcmFtZXRlcihzZWxm
LCBwYXJhbWV0ZXIsIGNvbW1hbmQpOgorICAgICAgICBlbnVtX2FyZ3MgPSB7CisgICAgICAgICAg
ICAncGFyYW1ldGVyTmFtZSc6IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwKKyAgICAgICAgICAg
ICdjb21tYW5kTmFtZSc6IGNvbW1hbmQuY29tbWFuZF9uYW1lCisgICAgICAgIH0KKworICAgICAg
ICBsaW5lcyA9IFtdCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIC8vIE5hbWVkIGFmdGVyIHBh
cmFtZXRlciBcJyUocGFyYW1ldGVyTmFtZSlzXCcgd2hpbGUgZ2VuZXJhdGluZyBjb21tYW5kL2V2
ZW50ICUoY29tbWFuZE5hbWUpcy4nICUgZW51bV9hcmdzKQorICAgICAgICBsaW5lcy5hcHBlbmQo
JyAgICBlbnVtIGNsYXNzICVzIHsnICUgdWNmaXJzdChwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUp
KQorICAgICAgICBmb3IgZW51bV92YWx1ZSBpbiBwYXJhbWV0ZXIudHlwZS5lbnVtX3ZhbHVlcygp
OgorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgICVzID0gJWQsJyAlIChHZW5lcmF0
b3Iuc3R5bGl6ZWRfbmFtZV9mb3JfZW51bV92YWx1ZShlbnVtX3ZhbHVlKSwgc2VsZi5lbmNvZGlu
Z19mb3JfZW51bV92YWx1ZShlbnVtX3ZhbHVlKSkpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAg
IH07IC8vIGVudW0gY2xhc3MgJXMnICUgdWNmaXJzdChwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUp
KQorICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQorCisgICAgZGVmIF9nZW5lcmF0ZV9o
YW5kbGVyX2RlY2xhcmF0aW9uX2Zvcl9jb21tYW5kKHNlbGYsIGNvbW1hbmQsIHVzZWRfZW51bV9u
YW1lcyk6CisgICAgICAgIGlmIGNvbW1hbmQuaXNfYXN5bmM6CisgICAgICAgICAgICByZXR1cm4g
c2VsZi5fZ2VuZXJhdGVfYXN5bmNfaGFuZGxlcl9kZWNsYXJhdGlvbl9mb3JfY29tbWFuZChjb21t
YW5kKQorCisgICAgICAgIGxpbmVzID0gW10KKyAgICAgICAgcGFyYW1ldGVycyA9IFsnRXJyb3JT
dHJpbmcqJ10KKyAgICAgICAgZm9yIF9wYXJhbWV0ZXIgaW4gY29tbWFuZC5jYWxsX3BhcmFtZXRl
cnM6CisgICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZCgiJXMgaW5fJXMiICUgKEdlbmVyYXRv
ci50eXBlX3N0cmluZ19mb3JfdW5jaGVja2VkX2Zvcm1hbF9pbl9wYXJhbWV0ZXIoX3BhcmFtZXRl
ciksIF9wYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpKQorCisgICAgICAgICAgICBpZiBpc2luc3Rh
bmNlKF9wYXJhbWV0ZXIudHlwZSwgRW51bVR5cGUpIGFuZCBfcGFyYW1ldGVyLnBhcmFtZXRlcl9u
YW1lIG5vdCBpbiB1c2VkX2VudW1fbmFtZXM6CisgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5k
KHNlbGYuX2dlbmVyYXRlX2Fub255bW91c19lbnVtX2Zvcl9wYXJhbWV0ZXIoX3BhcmFtZXRlciwg
Y29tbWFuZCkpCisgICAgICAgICAgICAgICAgdXNlZF9lbnVtX25hbWVzLmFkZChfcGFyYW1ldGVy
LnBhcmFtZXRlcl9uYW1lKQorCisgICAgICAgIGZvciBfcGFyYW1ldGVyIGluIGNvbW1hbmQucmV0
dXJuX3BhcmFtZXRlcnM6CisgICAgICAgICAgICBwYXJhbWV0ZXJfbmFtZSA9ICdvdXRfJyArIF9w
YXJhbWV0ZXIucGFyYW1ldGVyX25hbWUKKyAgICAgICAgICAgIGlmIF9wYXJhbWV0ZXIuaXNfb3B0
aW9uYWw6CisgICAgICAgICAgICAgICAgcGFyYW1ldGVyX25hbWUgPSAnb3B0XycgKyBwYXJhbWV0
ZXJfbmFtZQorICAgICAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoIiVzICVzIiAlIChHZW5lcmF0
b3IudHlwZV9zdHJpbmdfZm9yX2Zvcm1hbF9vdXRfcGFyYW1ldGVyKF9wYXJhbWV0ZXIpLCBwYXJh
bWV0ZXJfbmFtZSkpCisKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoX3BhcmFtZXRlci50eXBl
LCBFbnVtVHlwZSkgYW5kIF9wYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUgbm90IGluIHVzZWRfZW51
bV9uYW1lczoKKyAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYW5v
bnltb3VzX2VudW1fZm9yX3BhcmFtZXRlcihfcGFyYW1ldGVyLCBjb21tYW5kKSkKKyAgICAgICAg
ICAgICAgICB1c2VkX2VudW1fbmFtZXMuYWRkKF9wYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpCisK
KyAgICAgICAgY29tbWFuZF9hcmdzID0geworICAgICAgICAgICAgJ2NvbW1hbmROYW1lJzogY29t
bWFuZC5jb21tYW5kX25hbWUsCisgICAgICAgICAgICAncGFyYW1ldGVycyc6ICIsICIuam9pbihw
YXJhbWV0ZXJzKQorICAgICAgICB9CisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIHZpcnR1YWwg
dm9pZCAlKGNvbW1hbmROYW1lKXMoJShwYXJhbWV0ZXJzKXMpID0gMDsnICUgY29tbWFuZF9hcmdz
KQorICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQorCisgICAgZGVmIF9nZW5lcmF0ZV9h
c3luY19oYW5kbGVyX2RlY2xhcmF0aW9uX2Zvcl9jb21tYW5kKHNlbGYsIGNvbW1hbmQpOgorICAg
ICAgICBjYWxsYmFja05hbWUgPSAiJXNDYWxsYmFjayIgJSB1Y2ZpcnN0KGNvbW1hbmQuY29tbWFu
ZF9uYW1lKQorCisgICAgICAgIGluX3BhcmFtZXRlcnMgPSBbJ0Vycm9yU3RyaW5nKiddCisgICAg
ICAgIGZvciBfcGFyYW1ldGVyIGluIGNvbW1hbmQuY2FsbF9wYXJhbWV0ZXJzOgorICAgICAgICAg
ICAgaW5fcGFyYW1ldGVycy5hcHBlbmQoIiVzIGluXyVzIiAlIChHZW5lcmF0b3IudHlwZV9zdHJp
bmdfZm9yX3VuY2hlY2tlZF9mb3JtYWxfaW5fcGFyYW1ldGVyKF9wYXJhbWV0ZXIpLCBfcGFyYW1l
dGVyLnBhcmFtZXRlcl9uYW1lKSkKKyAgICAgICAgaW5fcGFyYW1ldGVycy5hcHBlbmQoIlBhc3NS
ZWZQdHI8JXM+IGNhbGxiYWNrIiAlIGNhbGxiYWNrTmFtZSkKKworICAgICAgICBvdXRfcGFyYW1l
dGVycyA9IFtdCisgICAgICAgIGZvciBfcGFyYW1ldGVyIGluIGNvbW1hbmQucmV0dXJuX3BhcmFt
ZXRlcnM6CisgICAgICAgICAgICBvdXRfcGFyYW1ldGVycy5hcHBlbmQoIiVzICVzIiAlIChHZW5l
cmF0b3IudHlwZV9zdHJpbmdfZm9yX2Zvcm1hbF9hc3luY19wYXJhbWV0ZXIoX3BhcmFtZXRlciks
IF9wYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpKQorCisgICAgICAgIGNvbW1hbmRfYXJncyA9IHsK
KyAgICAgICAgICAgICdjYWxsYmFja05hbWUnOiBjYWxsYmFja05hbWUsCisgICAgICAgICAgICAn
Y29tbWFuZE5hbWUnOiBjb21tYW5kLmNvbW1hbmRfbmFtZSwKKyAgICAgICAgICAgICdpblBhcmFt
ZXRlcnMnOiAiLCAiLmpvaW4oaW5fcGFyYW1ldGVycyksCisgICAgICAgICAgICAnb3V0UGFyYW1l
dGVycyc6ICIsICIuam9pbihvdXRfcGFyYW1ldGVycyksCisgICAgICAgIH0KKworICAgICAgICBy
ZXR1cm4gVGVtcGxhdGUoVGVtcGxhdGVzLkJhY2tlbmREaXNwYXRjaGVySGVhZGVyQXN5bmNDb21t
YW5kRGVjbGFyYXRpb24pLnN1YnN0aXR1dGUoTm9uZSwgKipjb21tYW5kX2FyZ3MpCisKKyAgICBk
ZWYgX2dlbmVyYXRlX2Rpc3BhdGNoZXJfZGVjbGFyYXRpb25zX2Zvcl9kb21haW4oc2VsZiwgZG9t
YWluKToKKyAgICAgICAgY2xhc3NDb21wb25lbnRzID0gWydjbGFzcyddCisgICAgICAgIGV4cG9y
dE1hY3JvID0gc2VsZi5tb2RlbCgpLmZyYW1ld29yay5zZXR0aW5nKCdleHBvcnRfbWFjcm8nLCBO
b25lKQorICAgICAgICBpZiBleHBvcnRNYWNybyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGNs
YXNzQ29tcG9uZW50cy5hcHBlbmQoZXhwb3J0TWFjcm8pCisKKyAgICAgICAgZGVjbGFyYXRpb25z
ID0gW10KKyAgICAgICAgaWYgbGVuKGRvbWFpbi5jb21tYW5kcykgPiAwOgorICAgICAgICAgICAg
ZGVjbGFyYXRpb25zLmFwcGVuZCgncHJpdmF0ZTonKQorICAgICAgICBkZWNsYXJhdGlvbnMuZXh0
ZW5kKG1hcChzZWxmLl9nZW5lcmF0ZV9kaXNwYXRjaGVyX2RlY2xhcmF0aW9uX2Zvcl9jb21tYW5k
LCBkb21haW4uY29tbWFuZHMpKQorCisgICAgICAgIGhhbmRsZXJfYXJncyA9IHsKKyAgICAgICAg
ICAgICdjbGFzc0FuZEV4cG9ydE1hY3JvJzogIiAiLmpvaW4oY2xhc3NDb21wb25lbnRzKSwKKyAg
ICAgICAgICAgICdkb21haW5OYW1lJzogZG9tYWluLmRvbWFpbl9uYW1lLAorICAgICAgICAgICAg
J2NvbW1hbmREZWNsYXJhdGlvbnMnOiAiXG4iLmpvaW4oZGVjbGFyYXRpb25zKQorICAgICAgICB9
CisKKyAgICAgICAgcmV0dXJuIEdlbmVyYXRvci53cmFwX3dpdGhfZ3VhcmRfZm9yX2RvbWFpbihk
b21haW4sIFRlbXBsYXRlKFRlbXBsYXRlcy5CYWNrZW5kRGlzcGF0Y2hlckhlYWRlckRvbWFpbkRp
c3BhdGNoZXJEZWNsYXJhdGlvbikuc3Vic3RpdHV0ZShOb25lLCAqKmhhbmRsZXJfYXJncykpCisK
KyAgICBkZWYgX2dlbmVyYXRlX2Rpc3BhdGNoZXJfZGVjbGFyYXRpb25fZm9yX2NvbW1hbmQoc2Vs
ZiwgY29tbWFuZCk6CisgICAgICAgIHJldHVybiAiICAgIHZvaWQgJXMobG9uZyBjYWxsSWQsIGNv
bnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsiICUgY29tbWFuZC5jb21t
YW5kX25hbWUKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5w
eSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVy
YXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44N2Ey
YjhmZTJkYWIxOWQ3YzFhMTQ0NTRiNGM2YTIxNDM5ZGYzMjgyCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVf
YmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5CkBAIC0wLDAgKzEsMjY5IEBACisj
IS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE0IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChjKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisj
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworIyBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisKKworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBzdHJpbmcKK2Zyb20g
c3RyaW5nIGltcG9ydCBUZW1wbGF0ZQorCitmcm9tIGdlbmVyYXRvciBpbXBvcnQgR2VuZXJhdG9y
LCB1Y2ZpcnN0Citmcm9tIGdlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IEdlbmVyYXRvclRlbXBs
YXRlcyBhcyBUZW1wbGF0ZXMKK2Zyb20gbW9kZWxzIGltcG9ydCBPYmplY3RUeXBlLCBBcnJheVR5
cGUKKworbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2JhbCcpCisKKworY2xhc3MgQmFja2Vu
ZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihHZW5lcmF0b3IpOgorICAgIGRlZiBf
X2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpOgorICAgICAgICBHZW5lcmF0b3Iu
X19pbml0X18oc2VsZiwgbW9kZWwsIGlucHV0X2ZpbGVwYXRoKQorCisgICAgZGVmIG91dHB1dF9m
aWxlbmFtZShzZWxmKToKKyAgICAgICAgcmV0dXJuICJJbnNwZWN0b3Ilc0JhY2tlbmREaXNwYXRj
aGVycy5jcHAiICUgc2VsZi5tb2RlbCgpLmZyYW1ld29yay5zZXR0aW5nKCdwcmVmaXgnKQorCisg
ICAgZGVmIGRvbWFpbnNfdG9fZ2VuZXJhdGUoc2VsZik6CisgICAgICAgIHJldHVybiBmaWx0ZXIo
bGFtYmRhIGRvbWFpbjogbGVuKGRvbWFpbi5jb21tYW5kcykgPiAwLCBHZW5lcmF0b3IuZG9tYWlu
c190b19nZW5lcmF0ZShzZWxmKSkKKworICAgIGRlZiBnZW5lcmF0ZV9vdXRwdXQoc2VsZik6Cisg
ICAgICAgIHNlY29uZGFyeV9oZWFkZXJzID0gWworICAgICAgICAgICAgJzxpbnNwZWN0b3IvSW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsLmg+JywKKyAgICAgICAgICAgICc8aW5zcGVjdG9yL0luc3Bl
Y3RvclZhbHVlcy5oPicsCisgICAgICAgICAgICAnPHd0Zi90ZXh0L0NTdHJpbmcuaD4nXQorCisg
ICAgICAgIGhlYWRlcl9hcmdzID0geworICAgICAgICAgICAgJ3ByaW1hcnlJbmNsdWRlJzogJyJJ
bnNwZWN0b3Ilc0JhY2tlbmREaXNwYXRjaGVycy5oIicgJSBzZWxmLm1vZGVsKCkuZnJhbWV3b3Jr
LnNldHRpbmcoJ3ByZWZpeCcpLAorICAgICAgICAgICAgJ3NlY29uZGFyeUluY2x1ZGVzJzogIlxu
Ii5qb2luKFsnI2luY2x1ZGUgJXMnICUgaGVhZGVyIGZvciBoZWFkZXIgaW4gc2Vjb25kYXJ5X2hl
YWRlcnNdKSwKKyAgICAgICAgICAgICdpbnB1dEZpbGVuYW1lJzogc2VsZi5faW5wdXRfZmlsZXBh
dGgKKyAgICAgICAgfQorCisgICAgICAgIHNlY3Rpb25zID0gW10KKyAgICAgICAgc2VjdGlvbnMu
YXBwZW5kKHNlbGYuZ2VuZXJhdGVfbGljZW5zZSgpKQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQo
VGVtcGxhdGUoVGVtcGxhdGVzLkNwcEltcGxlbWVudGF0aW9uUHJlbHVkZSkuc3Vic3RpdHV0ZShO
b25lLCAqKmhlYWRlcl9hcmdzKSkKKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKCJcbiIuam9pbiht
YXAoc2VsZi5fZ2VuZXJhdGVfaGFuZGxlcl9jbGFzc19kZXN0cnVjdG9yX2Zvcl9kb21haW4sIHNl
bGYuZG9tYWluc190b19nZW5lcmF0ZSgpKSkpCisgICAgICAgIHNlY3Rpb25zLmV4dGVuZChtYXAo
c2VsZi5fZ2VuZXJhdGVfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbnNfZm9yX2RvbWFpbiwgc2Vs
Zi5kb21haW5zX3RvX2dlbmVyYXRlKCkpKQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxh
dGUoVGVtcGxhdGVzLkNwcEltcGxlbWVudGF0aW9uUG9zdGx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwg
KipoZWFkZXJfYXJncykpCisgICAgICAgIHJldHVybiAiXG5cbiIuam9pbihzZWN0aW9ucykKKwor
ICAgICMgUHJpdmF0ZSBtZXRob2RzLgorCisgICAgZGVmIF9nZW5lcmF0ZV9oYW5kbGVyX2NsYXNz
X2Rlc3RydWN0b3JfZm9yX2RvbWFpbihzZWxmLCBkb21haW4pOgorICAgICAgICBkZXN0cnVjdG9y
X2FyZ3MgPSB7CisgICAgICAgICAgICAnZG9tYWluTmFtZSc6IGRvbWFpbi5kb21haW5fbmFtZQor
ICAgICAgICB9CisgICAgICAgIGRlc3RydWN0b3IgPSAnSW5zcGVjdG9yJShkb21haW5OYW1lKXNC
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6On5JbnNwZWN0b3IlKGRvbWFpbk5hbWUpc0JhY2tlbmRE
aXNwYXRjaGVySGFuZGxlcigpIHsgfScgJSBkZXN0cnVjdG9yX2FyZ3MKKyAgICAgICAgcmV0dXJu
IEdlbmVyYXRvci53cmFwX3dpdGhfZ3VhcmRfZm9yX2RvbWFpbihkb21haW4sIGRlc3RydWN0b3Ip
CisKKyAgICBkZWYgX2dlbmVyYXRlX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb25zX2Zvcl9kb21h
aW4oc2VsZiwgZG9tYWluKToKKyAgICAgICAgaW1wbGVtZW50YXRpb25zID0gW10KKworICAgICAg
ICBjb25zdHJ1Y3Rvcl9hcmdzID0geworICAgICAgICAgICAgJ2RvbWFpbk5hbWUnOiBkb21haW4u
ZG9tYWluX25hbWUsCisgICAgICAgIH0KKyAgICAgICAgaW1wbGVtZW50YXRpb25zLmFwcGVuZChU
ZW1wbGF0ZShUZW1wbGF0ZXMuQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkRvbWFpbkNv
bnN0cnVjdG9yKS5zdWJzdGl0dXRlKE5vbmUsICoqY29uc3RydWN0b3JfYXJncykpCisKKyAgICAg
ICAgaWYgbGVuKGRvbWFpbi5jb21tYW5kcykgPD0gNToKKyAgICAgICAgICAgIGltcGxlbWVudGF0
aW9ucy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfc21hbGxfZGlzcGF0Y2hlcl9zd2l0Y2hfaW1wbGVt
ZW50YXRpb25fZm9yX2RvbWFpbihkb21haW4pKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAg
aW1wbGVtZW50YXRpb25zLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9sYXJnZV9kaXNwYXRjaGVyX3N3
aXRjaF9pbXBsZW1lbnRhdGlvbl9mb3JfZG9tYWluKGRvbWFpbikpCisKKyAgICAgICAgZm9yIGNv
bW1hbmQgaW4gZG9tYWluLmNvbW1hbmRzOgorICAgICAgICAgICAgaWYgY29tbWFuZC5pc19hc3lu
YzoKKyAgICAgICAgICAgICAgICBpbXBsZW1lbnRhdGlvbnMuYXBwZW5kKHNlbGYuX2dlbmVyYXRl
X2FzeW5jX2Rpc3BhdGNoZXJfY2xhc3NfZm9yX2RvbWFpbihjb21tYW5kLCBkb21haW4pKQorICAg
ICAgICAgICAgaW1wbGVtZW50YXRpb25zLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9kaXNwYXRjaGVy
X2ltcGxlbWVudGF0aW9uX2Zvcl9jb21tYW5kKGNvbW1hbmQsIGRvbWFpbikpCisKKyAgICAgICAg
cmV0dXJuIEdlbmVyYXRvci53cmFwX3dpdGhfZ3VhcmRfZm9yX2RvbWFpbihkb21haW4sICJcblxu
Ii5qb2luKGltcGxlbWVudGF0aW9ucykpCisKKyAgICBkZWYgX2dlbmVyYXRlX3NtYWxsX2Rpc3Bh
dGNoZXJfc3dpdGNoX2ltcGxlbWVudGF0aW9uX2Zvcl9kb21haW4oc2VsZiwgZG9tYWluKToKKyAg
ICAgICAgY2FzZXMgPSBbXQorICAgICAgICBjYXNlcy5hcHBlbmQoJyAgICBpZiAobWV0aG9kID09
ICIlcyIpJyAlIGRvbWFpbi5jb21tYW5kc1swXS5jb21tYW5kX25hbWUpCisgICAgICAgIGNhc2Vz
LmFwcGVuZCgnICAgICAgICAlcyhjYWxsSWQsICptZXNzYWdlLmdldCgpKTsnICUgZG9tYWluLmNv
bW1hbmRzWzBdLmNvbW1hbmRfbmFtZSkKKyAgICAgICAgZm9yIGNvbW1hbmQgaW4gZG9tYWluLmNv
bW1hbmRzWzE6XToKKyAgICAgICAgICAgIGNhc2VzLmFwcGVuZCgnICAgIGVsc2UgaWYgKG1ldGhv
ZCA9PSAiJXMiKScgJSBjb21tYW5kLmNvbW1hbmRfbmFtZSkKKyAgICAgICAgICAgIGNhc2VzLmFw
cGVuZCgnICAgICAgICAlcyhjYWxsSWQsICptZXNzYWdlLmdldCgpKTsnICUgY29tbWFuZC5jb21t
YW5kX25hbWUpCisKKyAgICAgICAgc3dpdGNoX2FyZ3MgPSB7CisgICAgICAgICAgICAnZG9tYWlu
TmFtZSc6IGRvbWFpbi5kb21haW5fbmFtZSwKKyAgICAgICAgICAgICdkaXNwYXRjaENhc2VzJzog
IlxuIi5qb2luKGNhc2VzKQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIFRlbXBsYXRlKFRl
bXBsYXRlcy5CYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uU21hbGxTd2l0Y2gpLnN1YnN0
aXR1dGUoTm9uZSwgKipzd2l0Y2hfYXJncykKKworICAgIGRlZiBfZ2VuZXJhdGVfbGFyZ2VfZGlz
cGF0Y2hlcl9zd2l0Y2hfaW1wbGVtZW50YXRpb25fZm9yX2RvbWFpbihzZWxmLCBkb21haW4pOgor
ICAgICAgICBjYXNlcyA9IFtdCisgICAgICAgIGZvciBjb21tYW5kIGluIGRvbWFpbi5jb21tYW5k
czoKKyAgICAgICAgICAgIGFyZ3MgPSB7CisgICAgICAgICAgICAgICAgJ2RvbWFpbk5hbWUnOiBk
b21haW4uZG9tYWluX25hbWUsCisgICAgICAgICAgICAgICAgJ2NvbW1hbmROYW1lJzogY29tbWFu
ZC5jb21tYW5kX25hbWUKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2VzLmFwcGVuZCgn
ICAgICAgICAgICAgeyAiJShjb21tYW5kTmFtZSlzIiwgJkluc3BlY3RvciUoZG9tYWluTmFtZSlz
QmFja2VuZERpc3BhdGNoZXI6OiUoY29tbWFuZE5hbWUpcyB9LCcgJSBhcmdzKQorCisgICAgICAg
IHN3aXRjaF9hcmdzID0geworICAgICAgICAgICAgJ2RvbWFpbk5hbWUnOiBkb21haW4uZG9tYWlu
X25hbWUsCisgICAgICAgICAgICAnZGlzcGF0Y2hDYXNlcyc6ICJcbiIuam9pbihjYXNlcykKKyAg
ICAgICAgfQorCisgICAgICAgIHJldHVybiBUZW1wbGF0ZShUZW1wbGF0ZXMuQmFja2VuZERpc3Bh
dGNoZXJJbXBsZW1lbnRhdGlvbkxhcmdlU3dpdGNoKS5zdWJzdGl0dXRlKE5vbmUsICoqc3dpdGNo
X2FyZ3MpCisKKyAgICBkZWYgX2dlbmVyYXRlX2FzeW5jX2Rpc3BhdGNoZXJfY2xhc3NfZm9yX2Rv
bWFpbihzZWxmLCBjb21tYW5kLCBkb21haW4pOgorICAgICAgICBvdXRfcGFyYW1ldGVyX2Fzc2ln
bm1lbnRzID0gW10KKyAgICAgICAgZm9ybWFsX3BhcmFtZXRlcnMgPSBbXQorCisgICAgICAgIGZv
ciBwYXJhbWV0ZXIgaW4gY29tbWFuZC5yZXR1cm5fcGFyYW1ldGVyczoKKyAgICAgICAgICAgIHBh
cmFtX2FyZ3MgPSB7CisgICAgICAgICAgICAgICAgJ2ZyYW1ld29ya1ByZWZpeCc6IHNlbGYubW9k
ZWwoKS5mcmFtZXdvcmsuc2V0dGluZygncHJlZml4JyksCisgICAgICAgICAgICAgICAgJ2tleWVk
U2V0TWV0aG9kJzogR2VuZXJhdG9yLmtleWVkX3NldF9tZXRob2RfZm9yX3R5cGUocGFyYW1ldGVy
LnR5cGUpLAorICAgICAgICAgICAgICAgICdwYXJhbWV0ZXJOYW1lJzogcGFyYW1ldGVyLnBhcmFt
ZXRlcl9uYW1lLAorICAgICAgICAgICAgICAgICdwYXJhbWV0ZXJUeXBlJzogR2VuZXJhdG9yLnR5
cGVfc3RyaW5nX2Zvcl9zdGFja19pbl9wYXJhbWV0ZXIocGFyYW1ldGVyKSwKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgZm9ybWFsX3BhcmFtZXRlcnMuYXBwZW5kKCclcyAlcycgJSAoR2Vu
ZXJhdG9yLnR5cGVfc3RyaW5nX2Zvcl9mb3JtYWxfYXN5bmNfcGFyYW1ldGVyKHBhcmFtZXRlciks
IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkpCisKKyAgICAgICAgICAgIGlmIHBhcmFtZXRlci5p
c19vcHRpb25hbDoKKyAgICAgICAgICAgICAgICBpZiBHZW5lcmF0b3Iuc2hvdWxkX3VzZV93cmFw
cGVyX2Zvcl9yZXR1cm5fdHlwZShwYXJhbWV0ZXIudHlwZSk6CisgICAgICAgICAgICAgICAgICAg
IG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAgaWYgKCUocGFyYW1ldGVyTmFt
ZSlzLmlzQXNzaWduZWQoKSknICUgcGFyYW1fYXJncykKKyAgICAgICAgICAgICAgICAgICAgb3V0
X3BhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICAgICAganNvbk1lc3NhZ2UtPiUoa2V5
ZWRTZXRNZXRob2QpcyhBU0NJSUxpdGVyYWwoIiUocGFyYW1ldGVyTmFtZSlzIiksICUocGFyYW1l
dGVyTmFtZSlzLmdldFZhbHVlKCkpOycgJSBwYXJhbV9hcmdzKQorICAgICAgICAgICAgICAgIGVs
c2U6CisgICAgICAgICAgICAgICAgICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5k
KCcgICAgaWYgKCUocGFyYW1ldGVyTmFtZSlzKScgJSBwYXJhbV9hcmdzKQorICAgICAgICAgICAg
ICAgICAgICBvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgICAgICBqc29uTWVz
c2FnZS0+JShrZXllZFNldE1ldGhvZClzKEFTQ0lJTGl0ZXJhbCgiJShwYXJhbWV0ZXJOYW1lKXMi
KSwgJShwYXJhbWV0ZXJOYW1lKXMpOycgJSBwYXJhbV9hcmdzKQorICAgICAgICAgICAgZWxpZiBw
YXJhbWV0ZXIudHlwZS5pc19lbnVtKCk6CisgICAgICAgICAgICAgICAgb3V0X3BhcmFtZXRlcl9h
c3NpZ25tZW50cy5hcHBlbmQoJyAgICBqc29uTWVzc2FnZS0+JShrZXllZFNldE1ldGhvZClzKEFT
Q0lJTGl0ZXJhbCgiJShwYXJhbWV0ZXJOYW1lKXMiKSwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6
Z2V0JShmcmFtZXdvcmtQcmVmaXgpc0VudW1Db25zdGFudFZhbHVlKCUocGFyYW1ldGVyTmFtZSlz
KSk7JyAlIHBhcmFtX2FyZ3MpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG91
dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAganNvbk1lc3NhZ2UtPiUoa2V5ZWRT
ZXRNZXRob2QpcyhBU0NJSUxpdGVyYWwoIiUocGFyYW1ldGVyTmFtZSlzIiksICUocGFyYW1ldGVy
TmFtZSlzKTsnICUgcGFyYW1fYXJncykKKworICAgICAgICBhc3luY19hcmdzID0geworICAgICAg
ICAgICAgJ2RvbWFpbk5hbWUnOiBkb21haW4uZG9tYWluX25hbWUsCisgICAgICAgICAgICAnY2Fs
bGJhY2tOYW1lJzogdWNmaXJzdChjb21tYW5kLmNvbW1hbmRfbmFtZSkgKyAnQ2FsbGJhY2snLAor
ICAgICAgICAgICAgJ2Zvcm1hbFBhcmFtZXRlcnMnOiAiLCAiLmpvaW4oZm9ybWFsX3BhcmFtZXRl
cnMpLAorICAgICAgICAgICAgJ291dFBhcmFtZXRlckFzc2lnbm1lbnRzJzogIlxuIi5qb2luKG91
dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMpCisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFRlbXBs
YXRlKFRlbXBsYXRlcy5CYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uQXN5bmNDb21tYW5k
KS5zdWJzdGl0dXRlKE5vbmUsICoqYXN5bmNfYXJncykKKworICAgIGRlZiBfZ2VuZXJhdGVfZGlz
cGF0Y2hlcl9pbXBsZW1lbnRhdGlvbl9mb3JfY29tbWFuZChzZWxmLCBjb21tYW5kLCBkb21haW4p
OgorICAgICAgICBpbl9wYXJhbWV0ZXJfZGVjbGFyYXRpb25zID0gW10KKyAgICAgICAgb3V0X3Bh
cmFtZXRlcl9kZWNsYXJhdGlvbnMgPSBbXQorICAgICAgICBvdXRfcGFyYW1ldGVyX2Fzc2lnbm1l
bnRzID0gW10KKyAgICAgICAgbWV0aG9kX3BhcmFtZXRlcnMgPSBbJyZlcnJvciddCisKKyAgICAg
ICAgZm9yIHBhcmFtZXRlciBpbiBjb21tYW5kLmNhbGxfcGFyYW1ldGVyczoKKyAgICAgICAgICAg
IG91dF9zdWNjZXNzX2FyZ3VtZW50ID0gJ251bGxwdHInCisgICAgICAgICAgICBpZiBwYXJhbWV0
ZXIuaXNfb3B0aW9uYWw6CisgICAgICAgICAgICAgICAgb3V0X3N1Y2Nlc3NfYXJndW1lbnQgPSAn
JiVzX3ZhbHVlRm91bmQnICUgcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lCisgICAgICAgICAgICAg
ICAgaW5fcGFyYW1ldGVyX2RlY2xhcmF0aW9ucy5hcHBlbmQoJyAgICBib29sICVzX3ZhbHVlRm91
bmQgPSBmYWxzZTsnICUgcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKQorCisgICAgICAgICAgICBw
YXJhbV9hcmdzID0geworICAgICAgICAgICAgICAgICdwYXJhbWV0ZXJUeXBlJzogR2VuZXJhdG9y
LnR5cGVfc3RyaW5nX2Zvcl9zdGFja19pbl9wYXJhbWV0ZXIocGFyYW1ldGVyKSwKKyAgICAgICAg
ICAgICAgICAncGFyYW1ldGVyTmFtZSc6IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwKKyAgICAg
ICAgICAgICAgICAna2V5ZWRHZXRNZXRob2QnOiBHZW5lcmF0b3Iua2V5ZWRfZ2V0X21ldGhvZF9m
b3JfdHlwZShwYXJhbWV0ZXIudHlwZSksCisgICAgICAgICAgICAgICAgJ3N1Y2Nlc3NPdXRQYXJh
bSc6IG91dF9zdWNjZXNzX2FyZ3VtZW50CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlu
X3BhcmFtZXRlcl9kZWNsYXJhdGlvbnMuYXBwZW5kKCcgICAgJShwYXJhbWV0ZXJUeXBlKXMgaW5f
JShwYXJhbWV0ZXJOYW1lKXMgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6JShrZXllZEdl
dE1ldGhvZClzKHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCIlKHBhcmFtZXRlck5h
bWUpcyIpLCAlKHN1Y2Nlc3NPdXRQYXJhbSlzLCBwcm90b2NvbEVycm9yc1B0cik7JyAlIHBhcmFt
X2FyZ3MpCisKKyAgICAgICAgICAgIGlmIHBhcmFtZXRlci5pc19vcHRpb25hbDoKKyAgICAgICAg
ICAgICAgICBtZXRob2RfcGFyYW1ldGVycy5hcHBlbmQoJyUocGFyYW1ldGVyTmFtZSlzX3ZhbHVl
Rm91bmQgPyAmaW5fJShwYXJhbWV0ZXJOYW1lKXMgOiBudWxscHRyJyAlIHBhcmFtX2FyZ3MpCisg
ICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG1ldGhvZF9wYXJhbWV0ZXJzLmFwcGVu
ZCgnaW5fJyArIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkKKworICAgICAgICBpZiBjb21tYW5k
LmlzX2FzeW5jOgorICAgICAgICAgICAgYXN5bmNfYXJncyA9IHsKKyAgICAgICAgICAgICAgICAn
ZG9tYWluTmFtZSc6IGRvbWFpbi5kb21haW5fbmFtZSwKKyAgICAgICAgICAgICAgICAnY2FsbGJh
Y2tOYW1lJzogdWNmaXJzdChjb21tYW5kLmNvbW1hbmRfbmFtZSkgKyAnQ2FsbGJhY2snCisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5k
KCcgICAgICAgIGNhbGxiYWNrLT5kaXNhYmxlKCk7JykKKyAgICAgICAgICAgIG91dF9wYXJhbWV0
ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9y
dFByb3RvY29sRXJyb3IoJmNhbGxJZCwgSW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsnKQorICAgICAgICAgICAgb3V0X3BhcmFtZXRlcl9h
c3NpZ25tZW50cy5hcHBlbmQoJyAgICAgICAgcmV0dXJuOycpCisgICAgICAgICAgICBtZXRob2Rf
cGFyYW1ldGVycy5hcHBlbmQoJ2NhbGxiYWNrJykKKworICAgICAgICBlbHNlOgorICAgICAgICAg
ICAgZm9yIHBhcmFtZXRlciBpbiBjb21tYW5kLnJldHVybl9wYXJhbWV0ZXJzOgorICAgICAgICAg
ICAgICAgIHBhcmFtX2FyZ3MgPSB7CisgICAgICAgICAgICAgICAgICAgICdwYXJhbWV0ZXJUeXBl
JzogR2VuZXJhdG9yLnR5cGVfc3RyaW5nX2Zvcl9zdGFja19vdXRfcGFyYW1ldGVyKHBhcmFtZXRl
ciksCisgICAgICAgICAgICAgICAgICAgICdwYXJhbWV0ZXJOYW1lJzogcGFyYW1ldGVyLnBhcmFt
ZXRlcl9uYW1lLAorICAgICAgICAgICAgICAgICAgICAna2V5ZWRTZXRNZXRob2QnOiBHZW5lcmF0
b3Iua2V5ZWRfc2V0X21ldGhvZF9mb3JfdHlwZShwYXJhbWV0ZXIudHlwZSksCisgICAgICAgICAg
ICAgICAgICAgICdmcmFtZXdvcmtQcmVmaXgnOiBzZWxmLm1vZGVsKCkuZnJhbWV3b3JrLnNldHRp
bmcoJ3ByZWZpeCcpCisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgb3V0X3Bh
cmFtZXRlcl9kZWNsYXJhdGlvbnMuYXBwZW5kKCcgICAgJShwYXJhbWV0ZXJUeXBlKXMgb3V0XyUo
cGFyYW1ldGVyTmFtZSlzOycgJSBwYXJhbV9hcmdzKQorICAgICAgICAgICAgICAgIGlmIHBhcmFt
ZXRlci5pc19vcHRpb25hbDoKKyAgICAgICAgICAgICAgICAgICAgaWYgR2VuZXJhdG9yLnNob3Vs
ZF91c2Vfd3JhcHBlcl9mb3JfcmV0dXJuX3R5cGUocGFyYW1ldGVyLnR5cGUpOgorICAgICAgICAg
ICAgICAgICAgICAgICAgb3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICAgICAg
aWYgKG91dF8lKHBhcmFtZXRlck5hbWUpcy5pc0Fzc2lnbmVkKCkpJyAlIHBhcmFtX2FyZ3MpCisg
ICAgICAgICAgICAgICAgICAgICAgICBvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRzLmFwcGVuZCgn
ICAgICAgICAgICAgcmVzdWx0LT4lKGtleWVkU2V0TWV0aG9kKXMoQVNDSUlMaXRlcmFsKCIlKHBh
cmFtZXRlck5hbWUpcyIpLCBvdXRfJShwYXJhbWV0ZXJOYW1lKXMuZ2V0VmFsdWUoKSk7JyAlIHBh
cmFtX2FyZ3MpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAg
ICAgICBvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgICAgICBpZiAob3V0XyUo
cGFyYW1ldGVyTmFtZSlzKScgJSBwYXJhbV9hcmdzKQorICAgICAgICAgICAgICAgICAgICAgICAg
b3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICAgICAgICAgIHJlc3VsdC0+JShr
ZXllZFNldE1ldGhvZClzKEFTQ0lJTGl0ZXJhbCgiJShwYXJhbWV0ZXJOYW1lKXMiKSwgb3V0XyUo
cGFyYW1ldGVyTmFtZSlzKTsnICUgcGFyYW1fYXJncykKKyAgICAgICAgICAgICAgICBlbGlmIHBh
cmFtZXRlci50eXBlLmlzX2VudW0oKToKKyAgICAgICAgICAgICAgICAgICAgb3V0X3BhcmFtZXRl
cl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICAgICAgcmVzdWx0LT4lKGtleWVkU2V0TWV0aG9kKXMo
QVNDSUlMaXRlcmFsKCIlKHBhcmFtZXRlck5hbWUpcyIpLCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVy
OjpnZXQlKGZyYW1ld29ya1ByZWZpeClzRW51bUNvbnN0YW50VmFsdWUob3V0XyUocGFyYW1ldGVy
TmFtZSlzKSk7JyAlIHBhcmFtX2FyZ3MpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAg
ICAgICAgICAgICAgb3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICAgICAgcmVz
dWx0LT4lKGtleWVkU2V0TWV0aG9kKXMoQVNDSUlMaXRlcmFsKCIlKHBhcmFtZXRlck5hbWUpcyIp
LCBvdXRfJShwYXJhbWV0ZXJOYW1lKXMpOycgJSBwYXJhbV9hcmdzKQorCisgICAgICAgICAgICAg
ICAgaWYgR2VuZXJhdG9yLnNob3VsZF9wYXNzX2J5X2NvcHlfZm9yX3JldHVybl90eXBlKHBhcmFt
ZXRlci50eXBlKToKKyAgICAgICAgICAgICAgICAgICAgbWV0aG9kX3BhcmFtZXRlcnMuYXBwZW5k
KCdvdXRfJyArIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkKKyAgICAgICAgICAgICAgICBlbHNl
OgorICAgICAgICAgICAgICAgICAgICBtZXRob2RfcGFyYW1ldGVycy5hcHBlbmQoJyZvdXRfJyAr
IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkKKworICAgICAgICBjb21tYW5kX2FyZ3MgPSB7Cisg
ICAgICAgICAgICAnZG9tYWluTmFtZSc6IGRvbWFpbi5kb21haW5fbmFtZSwKKyAgICAgICAgICAg
ICdjYWxsYmFja05hbWUnOiAnJXNDYWxsYmFjaycgJSB1Y2ZpcnN0KGNvbW1hbmQuY29tbWFuZF9u
YW1lKSwKKyAgICAgICAgICAgICdjb21tYW5kTmFtZSc6IGNvbW1hbmQuY29tbWFuZF9uYW1lLAor
ICAgICAgICAgICAgJ2luUGFyYW1ldGVyRGVjbGFyYXRpb25zJzogIlxuIi5qb2luKGluX3BhcmFt
ZXRlcl9kZWNsYXJhdGlvbnMpLAorICAgICAgICAgICAgJ2ludm9jYXRpb25QYXJhbWV0ZXJzJzog
IiwgIi5qb2luKG1ldGhvZF9wYXJhbWV0ZXJzKQorICAgICAgICB9CisKKyAgICAgICAgbGluZXMg
PSBbXQorICAgICAgICBpZiBsZW4oY29tbWFuZC5jYWxsX3BhcmFtZXRlcnMpID09IDA6CisgICAg
ICAgICAgICBsaW5lcy5hcHBlbmQoJ3ZvaWQgSW5zcGVjdG9yJShkb21haW5OYW1lKXNCYWNrZW5k
RGlzcGF0Y2hlcjo6JShjb21tYW5kTmFtZSlzKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JP
YmplY3QmKScgJSBjb21tYW5kX2FyZ3MpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsaW5l
cy5hcHBlbmQoJ3ZvaWQgSW5zcGVjdG9yJShkb21haW5OYW1lKXNCYWNrZW5kRGlzcGF0Y2hlcjo6
JShjb21tYW5kTmFtZSlzKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmIG1lc3Nh
Z2UpJyAlIGNvbW1hbmRfYXJncykKKyAgICAgICAgbGluZXMuYXBwZW5kKCd7JykKKworICAgICAg
ICBpZiBsZW4oY29tbWFuZC5jYWxsX3BhcmFtZXRlcnMpID4gMDoKKyAgICAgICAgICAgIGxpbmVz
LmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMuQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlv
blByZXBhcmVDb21tYW5kQXJndW1lbnRzKS5zdWJzdGl0dXRlKE5vbmUsICoqY29tbWFuZF9hcmdz
KSkKKworICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBFcnJvclN0cmluZyBlcnJvcjsnKQorICAg
ICAgICBsaW5lcy5hcHBlbmQoJyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJ
bnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOycpCisgICAgICAgIGlmIGNvbW1hbmQuaXNfYXN5bmM6
CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBSZWZQdHI8SW5zcGVjdG9yJShkb21haW5O
YW1lKXNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OiUoY2FsbGJhY2tOYW1lKXM+IGNhbGxiYWNr
ID0gYWRvcHRSZWYobmV3IEluc3BlY3RvciUoZG9tYWluTmFtZSlzQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyOjolKGNhbGxiYWNrTmFtZSlzKG1fYmFja2VuZERpc3BhdGNoZXIsY2FsbElkKSk7JyAl
IGNvbW1hbmRfYXJncykKKyAgICAgICAgaWYgbGVuKGNvbW1hbmQucmV0dXJuX3BhcmFtZXRlcnMp
ID4gMDoKKyAgICAgICAgICAgIGxpbmVzLmV4dGVuZChvdXRfcGFyYW1ldGVyX2RlY2xhcmF0aW9u
cykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgbV9hZ2VudC0+JShjb21tYW5kTmFtZSlzKCUo
aW52b2NhdGlvblBhcmFtZXRlcnMpcyk7JyAlIGNvbW1hbmRfYXJncykKKyAgICAgICAgbGluZXMu
YXBwZW5kKCcnKQorICAgICAgICBpZiBjb21tYW5kLmlzX2FzeW5jOgorICAgICAgICAgICAgbGlu
ZXMuYXBwZW5kKCcgICAgaWYgKGVycm9yLmxlbmd0aCgpKSB7JykKKyAgICAgICAgICAgIGxpbmVz
LmV4dGVuZChvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRzKQorICAgICAgICAgICAgbGluZXMuYXBw
ZW5kKCcgICAgfScpCisgICAgICAgIGVsaWYgbGVuKGNvbW1hbmQucmV0dXJuX3BhcmFtZXRlcnMp
ID4gMToKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGlmICghZXJyb3IubGVuZ3RoKCkp
IHsnKQorICAgICAgICAgICAgbGluZXMuZXh0ZW5kKG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMp
CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICB9JykKKyAgICAgICAgZWxpZiBsZW4oY29t
bWFuZC5yZXR1cm5fcGFyYW1ldGVycykgPT0gMToKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgn
ICAgIGlmICghZXJyb3IubGVuZ3RoKCkpJykKKyAgICAgICAgICAgIGxpbmVzLmV4dGVuZChvdXRf
cGFyYW1ldGVyX2Fzc2lnbm1lbnRzKQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcnKQorCisg
ICAgICAgIGlmIG5vdCBjb21tYW5kLmlzX2FzeW5jOgorICAgICAgICAgICAgbGluZXMuYXBwZW5k
KCcgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJl
bGVhc2UoKSwgZXJyb3IpOycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnfScpCisgICAgICAgIHJl
dHVybiAiXG4iLmpvaW4obGluZXMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9mcm9udGVuZF9kaXNwYXRjaGVyX2hl
YWRlci5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2Vu
L2dlbmVyYXRlX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNjNjY5
ZTYyMzBmNjkxNTc3NmQzMWNkNDI1MGFiMTk5MDlkNmRhZTgKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9m
cm9udGVuZF9kaXNwYXRjaGVyX2hlYWRlci5weQpAQCAtMCwwICsxLDExOCBAQAorIyEvdXNyL2Jp
bi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoYykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMg
YXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyMgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisjIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorCisKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgcmUKK2ltcG9ydCBzdHJpbmcKK2Zy
b20gc3RyaW5nIGltcG9ydCBUZW1wbGF0ZQorCitmcm9tIG1vZGVscyBpbXBvcnQgRW51bVR5cGUK
K2Zyb20gZ2VuZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IsIHVjZmlyc3QKK2Zyb20gZ2VuZXJhdG9y
X3RlbXBsYXRlcyBpbXBvcnQgR2VuZXJhdG9yVGVtcGxhdGVzIGFzIFRlbXBsYXRlcworCitsb2cg
PSBsb2dnaW5nLmdldExvZ2dlcignZ2xvYmFsJykKKworCitjbGFzcyBGcm9udGVuZERpc3BhdGNo
ZXJIZWFkZXJHZW5lcmF0b3IoR2VuZXJhdG9yKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbW9k
ZWwsIGlucHV0X2ZpbGVwYXRoKToKKyAgICAgICAgR2VuZXJhdG9yLl9faW5pdF9fKHNlbGYsIG1v
ZGVsLCBpbnB1dF9maWxlcGF0aCkKKworICAgIGRlZiBvdXRwdXRfZmlsZW5hbWUoc2VsZik6Cisg
ICAgICAgIHJldHVybiAiSW5zcGVjdG9yJXNGcm9udGVuZERpc3BhdGNoZXJzLmgiICUgc2VsZi5t
b2RlbCgpLmZyYW1ld29yay5zZXR0aW5nKCdwcmVmaXgnKQorCisgICAgZGVmIGRvbWFpbnNfdG9f
Z2VuZXJhdGUoc2VsZik6CisgICAgICAgIHJldHVybiBmaWx0ZXIobGFtYmRhIGRvbWFpbjogbGVu
KGRvbWFpbi5ldmVudHMpID4gMCwgR2VuZXJhdG9yLmRvbWFpbnNfdG9fZ2VuZXJhdGUoc2VsZikp
CisKKyAgICBkZWYgZ2VuZXJhdGVfb3V0cHV0KHNlbGYpOgorICAgICAgICBoZWFkZXJzID0gWwor
ICAgICAgICAgICAgJyJJbnNwZWN0b3Ilc1R5cGVCdWlsZGVycy5oIicgJSBzZWxmLm1vZGVsKCku
ZnJhbWV3b3JrLnNldHRpbmcoJ3ByZWZpeCcpLAorICAgICAgICAgICAgJzxpbnNwZWN0b3IvSW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsLmg+JywKKyAgICAgICAgICAgICc8aW5zcGVjdG9yL0luc3Bl
Y3RvclZhbHVlcy5oPicsCisgICAgICAgICAgICAnPHd0Zi9QYXNzUmVmUHRyLmg+JywKKyAgICAg
ICAgICAgICc8d3RmL3RleHQvV1RGU3RyaW5nLmg+J10KKworICAgICAgICBoZWFkZXJfYXJncyA9
IHsKKyAgICAgICAgICAgICdoZWFkZXJHdWFyZFN0cmluZyc6IHJlLnN1YignXFcrJywgJ18nLCBz
ZWxmLm91dHB1dF9maWxlbmFtZSgpKSwKKyAgICAgICAgICAgICdpbmNsdWRlcyc6ICdcbicuam9p
bihbJyNpbmNsdWRlICcgKyBoZWFkZXIgZm9yIGhlYWRlciBpbiBoZWFkZXJzXSksCisgICAgICAg
ICAgICAndHlwZWRlZnMnOiAnJywKKyAgICAgICAgICAgICdpbnB1dEZpbGVuYW1lJzogc2VsZi5f
aW5wdXRfZmlsZXBhdGgKKyAgICAgICAgfQorCisgICAgICAgIHNlY3Rpb25zID0gW10KKyAgICAg
ICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfbGljZW5zZSgpKQorICAgICAgICBzZWN0
aW9ucy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVzLkNwcEhlYWRlclByZWx1ZGUpLnN1YnN0aXR1
dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCisgICAgICAgIHNlY3Rpb25zLmV4dGVuZChtYXAoc2Vs
Zi5fZ2VuZXJhdGVfZGlzcGF0Y2hlcl9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbiwgc2VsZi5kb21h
aW5zX3RvX2dlbmVyYXRlKCkpKQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoVGVt
cGxhdGVzLkNwcEhlYWRlclBvc3RsdWRlKS5zdWJzdGl0dXRlKE5vbmUsICoqaGVhZGVyX2FyZ3Mp
KQorICAgICAgICByZXR1cm4gIlxuXG4iLmpvaW4oc2VjdGlvbnMpCisKKyAgICAjIFByaXZhdGUg
bWV0aG9kcy4KKworICAgIGRlZiBfZ2VuZXJhdGVfYW5vbnltb3VzX2VudW1fZm9yX3BhcmFtZXRl
cihzZWxmLCBwYXJhbWV0ZXIsIGV2ZW50KToKKyAgICAgICAgZW51bV9hcmdzID0geworICAgICAg
ICAgICAgJ3BhcmFtZXRlck5hbWUnOiBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUsCisgICAgICAg
ICAgICAnZXZlbnROYW1lJzogZXZlbnQuZXZlbnRfbmFtZQorICAgICAgICB9CisKKyAgICAgICAg
bGluZXMgPSBbXQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgLy8gTmFtZWQgYWZ0ZXIg
cGFyYW1ldGVyIFwnJShwYXJhbWV0ZXJOYW1lKXNcJyB3aGlsZSBnZW5lcmF0aW5nIGNvbW1hbmQv
ZXZlbnQgJShldmVudE5hbWUpcy4nICUgZW51bV9hcmdzKQorICAgICAgICBsaW5lcy5hcHBlbmQo
JyAgICAgICAgZW51bSBjbGFzcyAlcyB7JyAlIHVjZmlyc3QocGFyYW1ldGVyLnBhcmFtZXRlcl9u
YW1lKSkKKyAgICAgICAgZm9yIGVudW1fdmFsdWUgaW4gcGFyYW1ldGVyLnR5cGUuZW51bV92YWx1
ZXMoKToKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICAgICAgJXMgPSAlZCwnICUg
KEdlbmVyYXRvci5zdHlsaXplZF9uYW1lX2Zvcl9lbnVtX3ZhbHVlKGVudW1fdmFsdWUpLCBzZWxm
LmVuY29kaW5nX2Zvcl9lbnVtX3ZhbHVlKGVudW1fdmFsdWUpKSkKKyAgICAgICAgbGluZXMuYXBw
ZW5kKCcgICAgICAgIH07IC8vIGVudW0gY2xhc3MgJXMnICUgdWNmaXJzdChwYXJhbWV0ZXIucGFy
YW1ldGVyX25hbWUpKQorICAgICAgICByZXR1cm4gIlxuIi5qb2luKGxpbmVzKQorCisgICAgZGVm
IF9nZW5lcmF0ZV9kaXNwYXRjaGVyX2RlY2xhcmF0aW9uc19mb3JfZG9tYWluKHNlbGYsIGRvbWFp
bik6CisgICAgICAgIGNsYXNzQ29tcG9uZW50cyA9IFsnY2xhc3MnXQorICAgICAgICBleHBvcnRN
YWNybyA9IHNlbGYubW9kZWwoKS5mcmFtZXdvcmsuc2V0dGluZygnZXhwb3J0X21hY3JvJywgTm9u
ZSkKKyAgICAgICAgaWYgZXhwb3J0TWFjcm8gaXMgbm90IE5vbmU6CisgICAgICAgICAgICBjbGFz
c0NvbXBvbmVudHMuYXBwZW5kKGV4cG9ydE1hY3JvKQorCisgICAgICAgIHVzZWRfZW51bV9uYW1l
cyA9IHNldChbXSkKKworICAgICAgICBldmVudF9kZWNsYXJhdGlvbnMgPSBbXQorICAgICAgICBm
b3IgZXZlbnQgaW4gZG9tYWluLmV2ZW50czoKKyAgICAgICAgICAgIGV2ZW50X2RlY2xhcmF0aW9u
cy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfZGlzcGF0Y2hlcl9kZWNsYXJhdGlvbl9mb3JfZXZlbnQo
ZXZlbnQsIGRvbWFpbiwgdXNlZF9lbnVtX25hbWVzKSkKKworICAgICAgICBoYW5kbGVyX2FyZ3Mg
PSB7CisgICAgICAgICAgICAnY2xhc3NBbmRFeHBvcnRNYWNybyc6ICIgIi5qb2luKGNsYXNzQ29t
cG9uZW50cyksCisgICAgICAgICAgICAnZG9tYWluTmFtZSc6IGRvbWFpbi5kb21haW5fbmFtZSwK
KyAgICAgICAgICAgICdldmVudERlY2xhcmF0aW9ucyc6ICJcbiIuam9pbihldmVudF9kZWNsYXJh
dGlvbnMpCisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gR2VuZXJhdG9yLndyYXBfd2l0aF9n
dWFyZF9mb3JfZG9tYWluKGRvbWFpbiwgVGVtcGxhdGUoVGVtcGxhdGVzLkZyb250ZW5kRGlzcGF0
Y2hlckRvbWFpbkRpc3BhdGNoZXJEZWNsYXJhdGlvbikuc3Vic3RpdHV0ZShOb25lLCAqKmhhbmRs
ZXJfYXJncykpCisKKyAgICBkZWYgX2dlbmVyYXRlX2Rpc3BhdGNoZXJfZGVjbGFyYXRpb25fZm9y
X2V2ZW50KHNlbGYsIGV2ZW50LCBkb21haW4sIHVzZWRfZW51bV9uYW1lcyk6CisgICAgICAgIGZv
cm1hbF9wYXJhbWV0ZXJzID0gW10KKyAgICAgICAgbGluZXMgPSBbXQorICAgICAgICBmb3IgcGFy
YW1ldGVyIGluIGV2ZW50LmV2ZW50X3BhcmFtZXRlcnM6CisgICAgICAgICAgICBmb3JtYWxfcGFy
YW1ldGVycy5hcHBlbmQoJyVzICVzJyAlIChHZW5lcmF0b3IudHlwZV9zdHJpbmdfZm9yX2NoZWNr
ZWRfZm9ybWFsX2V2ZW50X3BhcmFtZXRlcihwYXJhbWV0ZXIpLCBwYXJhbWV0ZXIucGFyYW1ldGVy
X25hbWUpKQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShwYXJhbWV0ZXIudHlwZSwgRW51bVR5
cGUpIGFuZCBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUgbm90IGluIHVzZWRfZW51bV9uYW1lczoK
KyAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYW5vbnltb3VzX2Vu
dW1fZm9yX3BhcmFtZXRlcihwYXJhbWV0ZXIsIGV2ZW50KSkKKyAgICAgICAgICAgICAgICB1c2Vk
X2VudW1fbmFtZXMuYWRkKHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkKKworICAgICAgICBsaW5l
cy5hcHBlbmQoIiAgICB2b2lkICVzKCVzKTsiICUgKGV2ZW50LmV2ZW50X25hbWUsICIsICIuam9p
bihmb3JtYWxfcGFyYW1ldGVycykpKQorICAgICAgICByZXR1cm4gIlxuIi5qb2luKGxpbmVzKQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVn
ZW4vZ2VuZXJhdGVfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2Zyb250
ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjRlNWE2ODNmYjIx
Y2E5MGFmMzM0NTQyZGRkNmJiMDc2ZmNmNjU3NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2Zyb250ZW5k
X2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkKQEAgLTAsMCArMSwxMjIgQEAKKyMhL3Vzci9i
aW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKGMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisj
IGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisjIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworIyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisjIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKworCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IHN0cmluZworZnJvbSBzdHJpbmcg
aW1wb3J0IFRlbXBsYXRlCisKK2Zyb20gZ2VuZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IsIHVjZmly
c3QKK2Zyb20gZ2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgR2VuZXJhdG9yVGVtcGxhdGVzIGFz
IFRlbXBsYXRlcworZnJvbSBtb2RlbHMgaW1wb3J0IE9iamVjdFR5cGUsIEFycmF5VHlwZQorCits
b2cgPSBsb2dnaW5nLmdldExvZ2dlcignZ2xvYmFsJykKKworCitjbGFzcyBGcm9udGVuZERpc3Bh
dGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihHZW5lcmF0b3IpOgorICAgIGRlZiBfX2luaXRf
XyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpOgorICAgICAgICBHZW5lcmF0b3IuX19pbml0
X18oc2VsZiwgbW9kZWwsIGlucHV0X2ZpbGVwYXRoKQorCisgICAgZGVmIG91dHB1dF9maWxlbmFt
ZShzZWxmKToKKyAgICAgICAgcmV0dXJuICJJbnNwZWN0b3Ilc0Zyb250ZW5kRGlzcGF0Y2hlcnMu
Y3BwIiAlIHNlbGYubW9kZWwoKS5mcmFtZXdvcmsuc2V0dGluZygncHJlZml4JykKKworICAgIGRl
ZiBkb21haW5zX3RvX2dlbmVyYXRlKHNlbGYpOgorICAgICAgICByZXR1cm4gZmlsdGVyKGxhbWJk
YSBkb21haW46IGxlbihkb21haW4uZXZlbnRzKSA+IDAsIEdlbmVyYXRvci5kb21haW5zX3RvX2dl
bmVyYXRlKHNlbGYpKQorCisgICAgZGVmIGdlbmVyYXRlX291dHB1dChzZWxmKToKKyAgICAgICAg
c2Vjb25kYXJ5X2hlYWRlcnMgPSBbJzx3dGYvdGV4dC9DU3RyaW5nLmg+J10KKworICAgICAgICBo
ZWFkZXJfYXJncyA9IHsKKyAgICAgICAgICAgICdwcmltYXJ5SW5jbHVkZSc6ICciSW5zcGVjdG9y
JXNGcm9udGVuZERpc3BhdGNoZXJzLmgiJyAlIHNlbGYubW9kZWwoKS5mcmFtZXdvcmsuc2V0dGlu
ZygncHJlZml4JyksCisgICAgICAgICAgICAnc2Vjb25kYXJ5SW5jbHVkZXMnOiAiXG4iLmpvaW4o
WycjaW5jbHVkZSAlcycgJSBoZWFkZXIgZm9yIGhlYWRlciBpbiBzZWNvbmRhcnlfaGVhZGVyc10p
LAorICAgICAgICAgICAgJ2lucHV0RmlsZW5hbWUnOiBzZWxmLl9pbnB1dF9maWxlcGF0aAorICAg
ICAgICB9CisKKyAgICAgICAgc2VjdGlvbnMgPSBbXQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQo
c2VsZi5nZW5lcmF0ZV9saWNlbnNlKCkpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0
ZShUZW1wbGF0ZXMuQ3BwSW1wbGVtZW50YXRpb25QcmVsdWRlKS5zdWJzdGl0dXRlKE5vbmUsICoq
aGVhZGVyX2FyZ3MpKQorICAgICAgICBzZWN0aW9ucy5leHRlbmQobWFwKHNlbGYuX2dlbmVyYXRl
X2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb25zX2Zvcl9kb21haW4sIHNlbGYuZG9tYWluc190b19n
ZW5lcmF0ZSgpKSkKKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKFRlbXBsYXRlcy5D
cHBJbXBsZW1lbnRhdGlvblBvc3RsdWRlKS5zdWJzdGl0dXRlKE5vbmUsICoqaGVhZGVyX2FyZ3Mp
KQorICAgICAgICByZXR1cm4gIlxuXG4iLmpvaW4oc2VjdGlvbnMpCisKKyAgICAjIFByaXZhdGUg
bWV0aG9kcy4KKworICAgIGRlZiBfZ2VuZXJhdGVfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbnNf
Zm9yX2RvbWFpbihzZWxmLCBkb21haW4pOgorICAgICAgICBpbXBsZW1lbnRhdGlvbnMgPSBbXQor
ICAgICAgICBmb3IgZXZlbnQgaW4gZG9tYWluLmV2ZW50czoKKyAgICAgICAgICAgIGltcGxlbWVu
dGF0aW9ucy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbl9m
b3JfZXZlbnQoZXZlbnQsIGRvbWFpbikpCisKKyAgICAgICAgcmV0dXJuIEdlbmVyYXRvci53cmFw
X3dpdGhfZ3VhcmRfZm9yX2RvbWFpbihkb21haW4sICJcblxuIi5qb2luKGltcGxlbWVudGF0aW9u
cykpCisKKyAgICBkZWYgX2dlbmVyYXRlX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb25fZm9yX2V2
ZW50KHNlbGYsIGV2ZW50LCBkb21haW4pOgorICAgICAgICBsaW5lcyA9IFtdCisgICAgICAgIHBh
cmFtZXRlcl9hc3NpZ25tZW50cyA9IFtdCisgICAgICAgIGZvcm1hbF9wYXJhbWV0ZXJzID0gW10K
KworICAgICAgICBmb3IgcGFyYW1ldGVyIGluIGV2ZW50LmV2ZW50X3BhcmFtZXRlcnM6CisKKyAg
ICAgICAgICAgIHBhcmFtZXRlcl92YWx1ZSA9IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZQorICAg
ICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsIGFuZCBub3QgR2VuZXJhdG9yLnNob3Vs
ZF9wYXNzX2J5X2NvcHlfZm9yX3JldHVybl90eXBlKHBhcmFtZXRlci50eXBlKToKKyAgICAgICAg
ICAgICAgICBwYXJhbWV0ZXJfdmFsdWUgPSAnKicgKyBwYXJhbWV0ZXJfdmFsdWUKKyAgICAgICAg
ICAgIGlmIHBhcmFtZXRlci50eXBlLmlzX2VudW0oKToKKyAgICAgICAgICAgICAgICBmcmFtZXdv
cmtfcHJlZml4ID0gc2VsZi5tb2RlbCgpLmZyYW1ld29yay5zZXR0aW5nKCdwcmVmaXgnKQorICAg
ICAgICAgICAgICAgIHBhcmFtZXRlcl92YWx1ZSA9ICdJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpn
ZXQlc0VudW1Db25zdGFudFZhbHVlKCVzKScgJSAoZnJhbWV3b3JrX3ByZWZpeCwgcGFyYW1ldGVy
X3ZhbHVlKQorCisgICAgICAgICAgICBwYXJhbWV0ZXJfYXJncyA9IHsKKyAgICAgICAgICAgICAg
ICAncGFyYW1ldGVyVHlwZSc6IEdlbmVyYXRvci50eXBlX3N0cmluZ19mb3Jfc3RhY2tfb3V0X3Bh
cmFtZXRlcihwYXJhbWV0ZXIpLAorICAgICAgICAgICAgICAgICdwYXJhbWV0ZXJOYW1lJzogcGFy
YW1ldGVyLnBhcmFtZXRlcl9uYW1lLAorICAgICAgICAgICAgICAgICdwYXJhbWV0ZXJWYWx1ZSc6
IHBhcmFtZXRlcl92YWx1ZSwKKyAgICAgICAgICAgICAgICAna2V5ZWRTZXRNZXRob2QnOiBHZW5l
cmF0b3Iua2V5ZWRfc2V0X21ldGhvZF9mb3JfdHlwZShwYXJhbWV0ZXIudHlwZSksCisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGlmIHBhcmFtZXRlci5pc19vcHRpb25hbDoKKyAgICAgICAg
ICAgICAgICBwYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAgaWYgKCUocGFyYW1ldGVy
TmFtZSlzKScgJSBwYXJhbWV0ZXJfYXJncykKKyAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfYXNz
aWdubWVudHMuYXBwZW5kKCcgICAgICAgIHBhcmFtc09iamVjdC0+JShrZXllZFNldE1ldGhvZClz
KEFTQ0lJTGl0ZXJhbCgiJShwYXJhbWV0ZXJOYW1lKXMiKSwgJShwYXJhbWV0ZXJWYWx1ZSlzKTsn
ICUgcGFyYW1ldGVyX2FyZ3MpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHBh
cmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICBwYXJhbXNPYmplY3QtPiUoa2V5ZWRTZXRN
ZXRob2QpcyhBU0NJSUxpdGVyYWwoIiUocGFyYW1ldGVyTmFtZSlzIiksICUocGFyYW1ldGVyVmFs
dWUpcyk7JyAlIHBhcmFtZXRlcl9hcmdzKQorCisgICAgICAgICAgICBmb3JtYWxfcGFyYW1ldGVy
cy5hcHBlbmQoJyVzICVzJyAlIChHZW5lcmF0b3IudHlwZV9zdHJpbmdfZm9yX2NoZWNrZWRfZm9y
bWFsX2V2ZW50X3BhcmFtZXRlcihwYXJhbWV0ZXIpLCBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUp
KQorCisgICAgICAgIGV2ZW50X2FyZ3MgPSB7CisgICAgICAgICAgICAnZG9tYWluTmFtZSc6IGRv
bWFpbi5kb21haW5fbmFtZSwKKyAgICAgICAgICAgICdldmVudE5hbWUnOiBldmVudC5ldmVudF9u
YW1lLAorICAgICAgICAgICAgJ2Zvcm1hbFBhcmFtZXRlcnMnOiAiLCAiLmpvaW4oZm9ybWFsX3Bh
cmFtZXRlcnMpCisgICAgICAgIH0KKworICAgICAgICBsaW5lcy5hcHBlbmQoJ3ZvaWQgSW5zcGVj
dG9yJShkb21haW5OYW1lKXNGcm9udGVuZERpc3BhdGNoZXI6OiUoZXZlbnROYW1lKXMoJShmb3Jt
YWxQYXJhbWV0ZXJzKXMpJyAlIGV2ZW50X2FyZ3MpCisgICAgICAgIGxpbmVzLmFwcGVuZCgneycp
CisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGpzb25N
ZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsnKQorICAgICAgICBsaW5lcy5hcHBl
bmQoJyAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgibWV0aG9kIiksIEFT
Q0lJTGl0ZXJhbCgiJShkb21haW5OYW1lKXMuJShldmVudE5hbWUpcyIpKTsnICUgZXZlbnRfYXJn
cykKKworICAgICAgICBpZiBsZW4ocGFyYW1ldGVyX2Fzc2lnbm1lbnRzKSA+IDA6CisgICAgICAg
ICAgICBsaW5lcy5hcHBlbmQoJyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmpl
Y3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOycpCisgICAgICAgICAgICBsaW5lcy5leHRl
bmQocGFyYW1ldGVyX2Fzc2lnbm1lbnRzKQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAg
anNvbk1lc3NhZ2UtPnNldE9iamVjdChBU0NJSUxpdGVyYWwoInBhcmFtcyIpLCBwYXJhbXNPYmpl
Y3QpOycpCisKKyAgICAgICAgbGluZXMuYXBwZW5kKCcnKQorICAgICAgICBsaW5lcy5hcHBlbmQo
JyAgICBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGpz
b25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7JykKKyAgICAgICAgbGluZXMuYXBwZW5kKCd9JykK
KyAgICAgICAgcmV0dXJuICJcbiIuam9pbihsaW5lcykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX3R5cGVfYnVpbGRl
cl9oZWFkZXIucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29k
ZWdlbi9nZW5lcmF0ZV90eXBlX2J1aWxkZXJfaGVhZGVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjczMDk1ZDRi
NjYwMWJkZDEwNDNiNDZjYWNkNWVmNGY2MDFlMTRmYTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV90eXBl
X2J1aWxkZXJfaGVhZGVyLnB5CkBAIC0wLDAgKzEsMzQ1IEBACisjIS91c3IvYmluL2VudiBweXRo
b24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyMgQ29weXJpZ2h0IChjKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0Ogor
IyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworIyBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyMgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisK
KworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCByZQoraW1wb3J0IHN0cmluZworZnJvbSBzdHJpbmcg
aW1wb3J0IFRlbXBsYXRlCisKK2Zyb20gZ2VuZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IsIHVjZmly
c3QKK2Zyb20gZ2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgR2VuZXJhdG9yVGVtcGxhdGVzIGFz
IFRlbXBsYXRlcworZnJvbSBtb2RlbHMgaW1wb3J0IEVudW1UeXBlLCBPYmplY3RUeXBlLCBQcmlt
aXRpdmVUeXBlLCBBbGlhc2VkVHlwZSwgQXJyYXlUeXBlLCBGcmFtZXdvcmtzCisKK2xvZyA9IGxv
Z2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQorCisKK2NsYXNzIFR5cGVCdWlsZGVySGVhZGVyR2Vu
ZXJhdG9yKEdlbmVyYXRvcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9m
aWxlcGF0aCk6CisgICAgICAgIEdlbmVyYXRvci5fX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRf
ZmlsZXBhdGgpCisKKyAgICBkZWYgb3V0cHV0X2ZpbGVuYW1lKHNlbGYpOgorICAgICAgICByZXR1
cm4gIkluc3BlY3RvciVzVHlwZUJ1aWxkZXJzLmgiICUgc2VsZi5tb2RlbCgpLmZyYW1ld29yay5z
ZXR0aW5nKCdwcmVmaXgnKQorCisgICAgZGVmIGdlbmVyYXRlX291dHB1dChzZWxmKToKKyAgICAg
ICAgZG9tYWlucyA9IHNlbGYuZG9tYWluc190b19nZW5lcmF0ZSgpCisgICAgICAgIHNlbGYuY2Fs
Y3VsYXRlX3R5cGVzX3JlcXVpcmluZ19zaGFwZV9hc3NlcnRpb25zKGRvbWFpbnMpCisKKyAgICAg
ICAgaGVhZGVycyA9IHNldChbCisgICAgICAgICAgICAnPGluc3BlY3Rvci9JbnNwZWN0b3JUeXBl
QnVpbGRlci5oPicsCisgICAgICAgICAgICAnPHd0Zi9Bc3NlcnRpb25zLmg+JywKKyAgICAgICAg
ICAgICc8d3RmL1Bhc3NSZWZQdHIuaD4nCisgICAgICAgIF0pCisKKyAgICAgICAgaWYgc2VsZi5t
b2RlbCgpLmZyYW1ld29yayBpcyBub3QgRnJhbWV3b3Jrcy5KYXZhU2NyaXB0Q29yZToKKyAgICAg
ICAgICAgIGhlYWRlcnMuYWRkKCc8aW5zcGVjdG9yL0luc3BlY3RvckpTVHlwZUJ1aWxkZXJzLmg+
JykKKworICAgICAgICBleHBvcnRfbWFjcm8gPSBzZWxmLm1vZGVsKCkuZnJhbWV3b3JrLnNldHRp
bmcoJ2V4cG9ydF9tYWNybycsIE5vbmUpCisgICAgICAgIGZyYW1ld29ya19wcmVmaXggPSBzZWxm
Lm1vZGVsKCkuZnJhbWV3b3JrLnNldHRpbmcoJ3ByZWZpeCcpCisKKyAgICAgICAgaGVhZGVyX2Fy
Z3MgPSB7CisgICAgICAgICAgICAnaGVhZGVyR3VhcmRTdHJpbmcnOiByZS5zdWIoJ1xXKycsICdf
Jywgc2VsZi5vdXRwdXRfZmlsZW5hbWUoKSksCisgICAgICAgICAgICAnaW5jbHVkZXMnOiAnXG4n
LmpvaW4oWycjaW5jbHVkZSAnICsgaGVhZGVyIGZvciBoZWFkZXIgaW4gc29ydGVkKGhlYWRlcnMp
XSksCisgICAgICAgICAgICAndHlwZWRlZnMnOiAnJywKKyAgICAgICAgICAgICdpbnB1dEZpbGVu
YW1lJzogc2VsZi5faW5wdXRfZmlsZXBhdGgKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybl90
eXBlID0gWydTdHJpbmcnXQorICAgICAgICBpZiBleHBvcnRfbWFjcm8gaXMgbm90IE5vbmU6Cisg
ICAgICAgICAgICByZXR1cm5fdHlwZVs6MF0gPSBbZXhwb3J0X21hY3JvXQorCisgICAgICAgIHNl
Y3Rpb25zID0gW10KKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuZ2VuZXJhdGVfbGljZW5z
ZSgpKQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVzLkNwcEhlYWRl
clByZWx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCisgICAgICAgIHNlY3Rp
b25zLmFwcGVuZCgnbmFtZXNwYWNlIFR5cGVCdWlsZGVyIHsnKQorICAgICAgICBzZWN0aW9ucy5h
cHBlbmQoc2VsZi5fZ2VuZXJhdGVfZm9yd2FyZF9kZWNsYXJhdGlvbnMoZG9tYWlucykpCisgICAg
ICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV90eXBlZGVmcyhkb21haW5zKSkKKyAg
ICAgICAgc2VjdGlvbnMuYXBwZW5kKCclcyBnZXQlc0VudW1Db25zdGFudFZhbHVlKGludCBjb2Rl
KTsnICUgKCcgJy5qb2luKHJldHVybl90eXBlKSwgZnJhbWV3b3JrX3ByZWZpeCkpCisgICAgICAg
IHNlY3Rpb25zLmFwcGVuZCgnXG4nLmpvaW4oWworICAgICAgICAgICAgJ3RlbXBsYXRlPHR5cGVu
YW1lIFQ+ICVzIGdldCVzRW51bUNvbnN0YW50VmFsdWUoVCBlbnVtVmFsdWUpJyAlICgnICcuam9p
bihyZXR1cm5fdHlwZSksIGZyYW1ld29ya19wcmVmaXgpLAorICAgICAgICAgICAgJ3snLAorICAg
ICAgICAgICAgJyAgICByZXR1cm4gZ2V0JXNFbnVtQ29uc3RhbnRWYWx1ZShzdGF0aWNfY2FzdDxp
bnQ+KGVudW1WYWx1ZSkpOycgJSBmcmFtZXdvcmtfcHJlZml4LAorICAgICAgICAgICAgJ30nXSkp
CisKKyAgICAgICAgYnVpbGRlcl9zZWN0aW9ucyA9IG1hcChzZWxmLl9nZW5lcmF0ZV9idWlsZGVy
c19mb3JfZG9tYWluLCBkb21haW5zKQorICAgICAgICBzZWN0aW9ucy5leHRlbmQoZmlsdGVyKGxh
bWJkYSBzZWN0aW9uOiBsZW4oc2VjdGlvbikgPiAwLCBidWlsZGVyX3NlY3Rpb25zKSkKKyAgICAg
ICAgc2VjdGlvbnMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2ZvcndhcmRfZGVjbGFyYXRpb25zX2Zv
cl9iaW5kaW5nX3RyYWl0cygpKQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoJ30gLy8gbmFtZXNw
YWNlIFR5cGVCdWlsZGVyJykKKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKFRlbXBs
YXRlcy5DcHBIZWFkZXJQb3N0bHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRlcl9hcmdzKSkK
KyAgICAgICAgcmV0dXJuICJcblxuIi5qb2luKHNlY3Rpb25zKQorCisgICAgIyBQcml2YXRlIG1l
dGhvZHMuCisKKyAgICAjIEZJWE1FOiBtb3ZlIGJ1aWxkZXJzIG91dCBvZiBjbGFzc2VzLCB1bmNv
bW1lbnQgZm9yd2FyZCBkZWNsYXJhdGlvbgorCisgICAgZGVmIF9nZW5lcmF0ZV9mb3J3YXJkX2Rl
Y2xhcmF0aW9ucyhzZWxmLCBkb21haW5zKToKKyAgICAgICAgc2VjdGlvbnMgPSBbXQorCisgICAg
ICAgIGZvciBkb21haW4gaW4gZG9tYWluczoKKyAgICAgICAgICAgIGRlY2xhcmF0aW9uX3R5cGVz
ID0gW2RlY2wudHlwZSBmb3IgZGVjbCBpbiBkb21haW4udHlwZV9kZWNsYXJhdGlvbnNdCisgICAg
ICAgICAgICBvYmplY3RfdHlwZXMgPSBmaWx0ZXIobGFtYmRhIF90eXBlOiBpc2luc3RhbmNlKF90
eXBlLCBPYmplY3RUeXBlKSwgZGVjbGFyYXRpb25fdHlwZXMpCisgICAgICAgICAgICBlbnVtX3R5
cGVzID0gZmlsdGVyKGxhbWJkYSBfdHlwZTogaXNpbnN0YW5jZShfdHlwZSwgRW51bVR5cGUpLCBk
ZWNsYXJhdGlvbl90eXBlcykKKyAgICAgICAgICAgIGlmIGxlbihvYmplY3RfdHlwZXMpICsgbGVu
KGVudW1fdHlwZXMpID09IDA6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAg
ICAgZG9tYWluX2xpbmVzID0gW10KKyAgICAgICAgICAgIGRvbWFpbl9saW5lcy5hcHBlbmQoJ25h
bWVzcGFjZSAlcyB7JyAlIGRvbWFpbi5kb21haW5fbmFtZSkKKworICAgICAgICAgICAgb2JqZWN0
X3R5cGVfbmFtZXMgPSBbX3R5cGUucmF3X25hbWUoKSBmb3IgX3R5cGUgaW4gb2JqZWN0X3R5cGVz
XQorICAgICAgICAgICAgZW51bV90eXBlX25hbWVzID0gW190eXBlLnJhd19uYW1lKCkgZm9yIF90
eXBlIGluIGVudW1fdHlwZXNdCisKKyAgICAgICAgICAgICMgRm9yd2FyZC1kZWNsYXJlIGFsbCBj
bGFzc2VzIHNvIHRoZSB0eXBlIGJ1aWxkZXJzIHdvbid0IGJyZWFrIGlmIHJlYXJyYW5nZWQuCisg
ICAgICAgICAgICBkb21haW5fbGluZXMuZXh0ZW5kKCdjbGFzcyAlczsnICUgbmFtZSBmb3IgbmFt
ZSBpbiBzb3J0ZWQob2JqZWN0X3R5cGVfbmFtZXMpKQorICAgICAgICAgICAgZG9tYWluX2xpbmVz
LmV4dGVuZCgnZW51bSBjbGFzcyAlczsnICUgbmFtZSBmb3IgbmFtZSBpbiBzb3J0ZWQoZW51bV90
eXBlX25hbWVzKSkKKyAgICAgICAgICAgIGRvbWFpbl9saW5lcy5hcHBlbmQoJ30gLy8gJXMnICUg
ZG9tYWluLmRvbWFpbl9uYW1lKQorICAgICAgICAgICAgc2VjdGlvbnMuYXBwZW5kKEdlbmVyYXRv
ci53cmFwX3dpdGhfZ3VhcmRfZm9yX2RvbWFpbihkb21haW4sICdcbicuam9pbihkb21haW5fbGlu
ZXMpKSkKKworICAgICAgICBpZiBsZW4oc2VjdGlvbnMpID09IDA6CisgICAgICAgICAgICByZXR1
cm4gJycKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiAiIiIvLyBGb3J3YXJkIGRl
Y2xhcmF0aW9ucy4KKyVzCisvLyBFbmQgb2YgZm9yd2FyZCBkZWNsYXJhdGlvbnMuCisiIiIgJSAn
XG5cbicuam9pbihzZWN0aW9ucykKKworICAgIGRlZiBfZ2VuZXJhdGVfdHlwZWRlZnMoc2VsZiwg
ZG9tYWlucyk6CisgICAgICAgIHNlY3Rpb25zID0gbWFwKHNlbGYuX2dlbmVyYXRlX3R5cGVkZWZz
X2Zvcl9kb21haW4sIGRvbWFpbnMpCisgICAgICAgIHNlY3Rpb25zID0gZmlsdGVyKGxhbWJkYSB0
ZXh0OiBsZW4odGV4dCkgPiAwLCBzZWN0aW9ucykKKworICAgICAgICBpZiBsZW4oc2VjdGlvbnMp
ID09IDA6CisgICAgICAgICAgICByZXR1cm4gJycKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAg
IHJldHVybiAiIiIvLyBUeXBlZGVmcy4KKyVzCisvLyBFbmQgb2YgdHlwZWRlZnMuIiIiICUgJ1xu
XG4nLmpvaW4oc2VjdGlvbnMpCisKKyAgICBkZWYgX2dlbmVyYXRlX3R5cGVkZWZzX2Zvcl9kb21h
aW4oc2VsZiwgZG9tYWluKToKKyAgICAgICAgcHJpbWl0aXZlX2RlY2xhcmF0aW9ucyA9IGZpbHRl
cihsYW1iZGEgZGVjbDogaXNpbnN0YW5jZShkZWNsLnR5cGUsIEFsaWFzZWRUeXBlKSwgZG9tYWlu
LnR5cGVfZGVjbGFyYXRpb25zKQorICAgICAgICBpZiBsZW4ocHJpbWl0aXZlX2RlY2xhcmF0aW9u
cykgPT0gMDoKKyAgICAgICAgICAgIHJldHVybiAnJworCisgICAgICAgIHNlY3Rpb25zID0gW10K
KyAgICAgICAgZm9yIGRlY2xhcmF0aW9uIGluIHByaW1pdGl2ZV9kZWNsYXJhdGlvbnM6CisgICAg
ICAgICAgICBwcmltaXRpdmVfbmFtZSA9IEdlbmVyYXRvci5jcHBfbmFtZV9mb3JfcHJpbWl0aXZl
X3R5cGUoZGVjbGFyYXRpb24udHlwZS5hbGlhc2VkX3R5cGUpCisgICAgICAgICAgICB0eXBlZGVm
X2xpbmVzID0gW10KKyAgICAgICAgICAgIGlmIGxlbihkZWNsYXJhdGlvbi5kZXNjcmlwdGlvbikg
PiAwOgorICAgICAgICAgICAgICAgIHR5cGVkZWZfbGluZXMuYXBwZW5kKCcvKiAlcyAqLycgJSBk
ZWNsYXJhdGlvbi5kZXNjcmlwdGlvbikKKyAgICAgICAgICAgIHR5cGVkZWZfbGluZXMuYXBwZW5k
KCd0eXBlZGVmICVzICVzOycgJSAocHJpbWl0aXZlX25hbWUsIGRlY2xhcmF0aW9uLnR5cGVfbmFt
ZSkpCisgICAgICAgICAgICBzZWN0aW9ucy5hcHBlbmQoJ1xuJy5qb2luKHR5cGVkZWZfbGluZXMp
KQorCisgICAgICAgIGxpbmVzID0gW10KKyAgICAgICAgbGluZXMuYXBwZW5kKCduYW1lc3BhY2Ug
JXMgeycgJSBkb21haW4uZG9tYWluX25hbWUpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnXG5cbicu
am9pbihzZWN0aW9ucykpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnfSAvLyAlcycgJSBkb21haW4u
ZG9tYWluX25hbWUpCisgICAgICAgIHJldHVybiBHZW5lcmF0b3Iud3JhcF93aXRoX2d1YXJkX2Zv
cl9kb21haW4oZG9tYWluLCAnXG4nLmpvaW4obGluZXMpKQorCisgICAgZGVmIF9nZW5lcmF0ZV9i
dWlsZGVyc19mb3JfZG9tYWluKHNlbGYsIGRvbWFpbik6CisgICAgICAgIHNlY3Rpb25zID0gW10K
KworICAgICAgICBmb3IgdHlwZV9kZWNsYXJhdGlvbiBpbiBkb21haW4udHlwZV9kZWNsYXJhdGlv
bnM6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHR5cGVfZGVjbGFyYXRpb24udHlwZSwgRW51
bVR5cGUpOgorICAgICAgICAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9z
dHJ1Y3RfZm9yX2VudW1fZGVjbGFyYXRpb24odHlwZV9kZWNsYXJhdGlvbikpCisgICAgICAgICAg
ICBlbGlmIGlzaW5zdGFuY2UodHlwZV9kZWNsYXJhdGlvbi50eXBlLCBPYmplY3RUeXBlKToKKyAg
ICAgICAgICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfY2xhc3NfZm9yX29i
amVjdF9kZWNsYXJhdGlvbih0eXBlX2RlY2xhcmF0aW9uLCBkb21haW4pKQorCisgICAgICAgIHNl
Y3Rpb25zID0gZmlsdGVyKGxhbWJkYSBzZWN0aW9uOiBsZW4oc2VjdGlvbikgPiAwLCBzZWN0aW9u
cykKKyAgICAgICAgaWYgbGVuKHNlY3Rpb25zKSA9PSAwOgorICAgICAgICAgICAgcmV0dXJuICcn
CisKKyAgICAgICAgbGluZXMgPSBbXQorICAgICAgICBsaW5lcy5hcHBlbmQoJ25hbWVzcGFjZSAl
cyB7JyAlIGRvbWFpbi5kb21haW5fbmFtZSkKKyAgICAgICAgbGluZXMuYXBwZW5kKCdcbicuam9p
bihzZWN0aW9ucykpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnfSAvLyAlcycgJSBkb21haW4uZG9t
YWluX25hbWUpCisgICAgICAgIHJldHVybiBHZW5lcmF0b3Iud3JhcF93aXRoX2d1YXJkX2Zvcl9k
b21haW4oZG9tYWluLCAnXG4nLmpvaW4obGluZXMpKQorCisgICAgZGVmIF9nZW5lcmF0ZV9jbGFz
c19mb3Jfb2JqZWN0X2RlY2xhcmF0aW9uKHNlbGYsIHR5cGVfZGVjbGFyYXRpb24sIGRvbWFpbik6
CisgICAgICAgIGlmIGxlbih0eXBlX2RlY2xhcmF0aW9uLnR5cGVfbWVtYmVycykgPT0gMDoKKyAg
ICAgICAgICAgIHJldHVybiAnJworCisgICAgICAgIGVudW1fbWVtYmVycyA9IGZpbHRlcihsYW1i
ZGEgbWVtYmVyOiBpc2luc3RhbmNlKG1lbWJlci50eXBlLCBFbnVtVHlwZSkgYW5kIG1lbWJlci50
eXBlLmlzX2Fub255bW91cywgdHlwZV9kZWNsYXJhdGlvbi50eXBlX21lbWJlcnMpCisgICAgICAg
IHJlcXVpcmVkX21lbWJlcnMgPSBmaWx0ZXIobGFtYmRhIG1lbWJlcjogbm90IG1lbWJlci5pc19v
cHRpb25hbCwgdHlwZV9kZWNsYXJhdGlvbi50eXBlX21lbWJlcnMpCisgICAgICAgIG9wdGlvbmFs
X21lbWJlcnMgPSBmaWx0ZXIobGFtYmRhIG1lbWJlcjogbWVtYmVyLmlzX29wdGlvbmFsLCB0eXBl
X2RlY2xhcmF0aW9uLnR5cGVfbWVtYmVycykKKyAgICAgICAgb2JqZWN0X25hbWUgPSB0eXBlX2Rl
Y2xhcmF0aW9uLnR5cGVfbmFtZQorCisgICAgICAgIGxpbmVzID0gW10KKyAgICAgICAgaWYgbGVu
KHR5cGVfZGVjbGFyYXRpb24uZGVzY3JpcHRpb24pID4gMDoKKyAgICAgICAgICAgIGxpbmVzLmFw
cGVuZCgnLyogJXMgKi8nICUgdHlwZV9kZWNsYXJhdGlvbi5kZXNjcmlwdGlvbikKKyAgICAgICAg
YmFzZV9jbGFzcyA9ICdJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCcKKyAgICAgICAgaWYgbm90
IEdlbmVyYXRvci50eXBlX2hhc19vcGVuX2ZpZWxkcyh0eXBlX2RlY2xhcmF0aW9uLnR5cGUpOgor
ICAgICAgICAgICAgYmFzZV9jbGFzcyA9IGJhc2VfY2xhc3MgKyAnQmFzZScKKyAgICAgICAgbGlu
ZXMuYXBwZW5kKCdjbGFzcyAlcyA6IHB1YmxpYyAlcyB7JyAlIChvYmplY3RfbmFtZSwgYmFzZV9j
bGFzcykpCisgICAgICAgIGxpbmVzLmFwcGVuZCgncHVibGljOicpCisgICAgICAgIGZvciBlbnVt
X21lbWJlciBpbiBlbnVtX21lbWJlcnM6CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAv
LyBOYW1lZCBhZnRlciBwcm9wZXJ0eSBuYW1lIFwnJXNcJyB3aGlsZSBnZW5lcmF0aW5nICVzLicg
JSAoZW51bV9tZW1iZXIubWVtYmVyX25hbWUsIG9iamVjdF9uYW1lKSkKKyAgICAgICAgICAgIGxp
bmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9zdHJ1Y3RfZm9yX2Fub255bW91c19lbnVtX21lbWJl
cihlbnVtX21lbWJlcikpCisgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9idWls
ZGVyX3N0YXRlX2VudW0odHlwZV9kZWNsYXJhdGlvbikpCisKKyAgICAgICAgY29uc3RydWN0b3Jf
ZXhhbXBsZSA9IFtdCisgICAgICAgIGNvbnN0cnVjdG9yX2V4YW1wbGUuYXBwZW5kKCcgICAgICog
UmVmUHRyPCVzPiByZXN1bHQgPSAlczo6Y3JlYXRlKCknICUgKG9iamVjdF9uYW1lLCBvYmplY3Rf
bmFtZSkpCisgICAgICAgIGZvciBtZW1iZXIgaW4gcmVxdWlyZWRfbWVtYmVyczoKKyAgICAgICAg
ICAgIGNvbnN0cnVjdG9yX2V4YW1wbGUuYXBwZW5kKCcgICAgICogICAgIC5zZXQlcyguLi4pJyAl
IHVjZmlyc3QobWVtYmVyLm1lbWJlcl9uYW1lKSkKKworICAgICAgICBidWlsZGVyX2FyZ3MgPSB7
CisgICAgICAgICAgICAnb2JqZWN0VHlwZSc6IG9iamVjdF9uYW1lLAorICAgICAgICAgICAgJ2Nv
bnN0cnVjdG9yRXhhbXBsZSc6ICdcbicuam9pbihjb25zdHJ1Y3Rvcl9leGFtcGxlKSArICc7JywK
KyAgICAgICAgfQorCisgICAgICAgIGxpbmVzLmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMuVHlw
ZUJ1aWxkZXJEZWNsYXJhdGlvblByZWx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipidWlsZGVyX2Fy
Z3MpKQorICAgICAgICBmb3IgdHlwZV9tZW1iZXIgaW4gcmVxdWlyZWRfbWVtYmVyczoKKyAgICAg
ICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9idWlsZGVyX3NldHRlcl9mb3JfbWVt
YmVyKHR5cGVfbWVtYmVyLCBkb21haW4pKQorICAgICAgICBsaW5lcy5hcHBlbmQoVGVtcGxhdGUo
VGVtcGxhdGVzLlR5cGVCdWlsZGVyRGVjbGFyYXRpb25Qb3N0bHVkZSkuc3Vic3RpdHV0ZShOb25l
LCAqKmJ1aWxkZXJfYXJncykpCisgICAgICAgIGZvciBtZW1iZXIgaW4gb3B0aW9uYWxfbWVtYmVy
czoKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV91bmNoZWNrZWRfc2V0
dGVyX2Zvcl9tZW1iZXIobWVtYmVyLCBkb21haW4pKQorCisgICAgICAgIGlmIEdlbmVyYXRvci50
eXBlX2hhc19vcGVuX2ZpZWxkcyh0eXBlX2RlY2xhcmF0aW9uLnR5cGUpOgorICAgICAgICAgICAg
bGluZXMuYXBwZW5kKCcnKQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgLy8gUHJvcGVy
dHkgbmFtZXMgZm9yIHR5cGUgZ2VuZXJhdGVkIGFzIG9wZW4uJykKKyAgICAgICAgICAgIGZvciB0
eXBlX21lbWJlciBpbiB0eXBlX2RlY2xhcmF0aW9uLnR5cGVfbWVtYmVyczoKKyAgICAgICAgICAg
ICAgICBsaW5lcy5hcHBlbmQoJyAgICBzdGF0aWMgY29uc3QgY2hhciogJXM7JyAlIHVjZmlyc3Qo
dHlwZV9tZW1iZXIubWVtYmVyX25hbWUpKQorCisgICAgICAgIGxpbmVzLmFwcGVuZCgnfTsnKQor
ICAgICAgICBsaW5lcy5hcHBlbmQoJycpCisgICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMp
CisKKyAgICBkZWYgX2dlbmVyYXRlX3N0cnVjdF9mb3JfZW51bV9kZWNsYXJhdGlvbihzZWxmLCBl
bnVtX2RlY2xhcmF0aW9uKToKKyAgICAgICAgbGluZXMgPSBbXQorICAgICAgICBsaW5lcy5hcHBl
bmQoJy8qICVzICovJyAlIGVudW1fZGVjbGFyYXRpb24uZGVzY3JpcHRpb24pCisgICAgICAgIGxp
bmVzLmV4dGVuZChzZWxmLl9nZW5lcmF0ZV9zdHJ1Y3RfZm9yX2VudW1fdHlwZShlbnVtX2RlY2xh
cmF0aW9uLnR5cGVfbmFtZSwgZW51bV9kZWNsYXJhdGlvbi50eXBlKSkKKyAgICAgICAgcmV0dXJu
ICdcbicuam9pbihsaW5lcykKKworICAgIGRlZiBfZ2VuZXJhdGVfc3RydWN0X2Zvcl9hbm9ueW1v
dXNfZW51bV9tZW1iZXIoc2VsZiwgZW51bV9tZW1iZXIpOgorICAgICAgICBkZWYgYXBwbHlfaW5k
ZW50YXRpb24obGluZSk6CisgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoKCcjJywgJy8q
JywgJyovJywgJy8vJykpIG9yIGxlbihsaW5lKSBpcyAwOgorICAgICAgICAgICAgICAgIHJldHVy
biBsaW5lCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiAnICAgICcg
KyBsaW5lCisKKyAgICAgICAgaW5kZW50ZWRfbGluZXMgPSBtYXAoYXBwbHlfaW5kZW50YXRpb24s
IHNlbGYuX2dlbmVyYXRlX3N0cnVjdF9mb3JfZW51bV90eXBlKGVudW1fbWVtYmVyLm1lbWJlcl9u
YW1lLCBlbnVtX21lbWJlci50eXBlKSkKKyAgICAgICAgcmV0dXJuICdcbicuam9pbihpbmRlbnRl
ZF9saW5lcykKKworICAgIGRlZiBfZ2VuZXJhdGVfc3RydWN0X2Zvcl9lbnVtX3R5cGUoc2VsZiwg
ZW51bV9uYW1lLCBlbnVtX3R5cGUpOgorICAgICAgICBsaW5lcyA9IFtdCisgICAgICAgIGVudW1f
bmFtZSA9IHVjZmlyc3QoZW51bV9uYW1lKQorICAgICAgICBsaW5lcy5hcHBlbmQoJ2VudW0gY2xh
c3MgJXMgeycgJSBlbnVtX25hbWUpCisgICAgICAgIGZvciBlbnVtX3ZhbHVlIGluIGVudW1fdHlw
ZS5lbnVtX3ZhbHVlcygpOgorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgJXMgPSAlcywn
ICUgKEdlbmVyYXRvci5zdHlsaXplZF9uYW1lX2Zvcl9lbnVtX3ZhbHVlKGVudW1fdmFsdWUpLCBz
ZWxmLmVuY29kaW5nX2Zvcl9lbnVtX3ZhbHVlKGVudW1fdmFsdWUpKSkKKyAgICAgICAgbGluZXMu
YXBwZW5kKCd9OyAvLyBlbnVtIGNsYXNzICVzJyAlIGVudW1fbmFtZSkKKyAgICAgICAgcmV0dXJu
IGxpbmVzICAjIFRoZSBjYWxsZXIgbWF5IHdhbnQgdG8gYWRqdXN0IGluZGVudGF0aW9uLCBzbyBk
b24ndCBqb2luIHRoZXNlIGxpbmVzLgorCisgICAgZGVmIF9nZW5lcmF0ZV9idWlsZGVyX3N0YXRl
X2VudW0oc2VsZiwgdHlwZV9kZWNsYXJhdGlvbik6CisgICAgICAgIGxpbmVzID0gW10KKyAgICAg
ICAgcmVxdWlyZWRfbWVtYmVycyA9IGZpbHRlcihsYW1iZGEgbWVtYmVyOiBub3QgbWVtYmVyLmlz
X29wdGlvbmFsLCB0eXBlX2RlY2xhcmF0aW9uLnR5cGVfbWVtYmVycykKKyAgICAgICAgZW51bV92
YWx1ZXMgPSBbXQorCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGVudW0geycpCisgICAgICAg
IGxpbmVzLmFwcGVuZCgnICAgICAgICBOb0ZpZWxkc1NldCA9IDAsJykKKyAgICAgICAgZm9yIGkg
aW4gcmFuZ2UobGVuKHJlcXVpcmVkX21lbWJlcnMpKToKKyAgICAgICAgICAgIGVudW1fdmFsdWUg
PSAiJXNTZXQiICUgdWNmaXJzdChyZXF1aXJlZF9tZW1iZXJzW2ldLm1lbWJlcl9uYW1lKQorICAg
ICAgICAgICAgZW51bV92YWx1ZXMuYXBwZW5kKGVudW1fdmFsdWUpCisgICAgICAgICAgICBsaW5l
cy5hcHBlbmQoJyAgICAgICAgJXMgPSAxIDw8ICVkLCcgJSAoZW51bV92YWx1ZSwgaSkpCisgICAg
ICAgIGlmIGxlbihlbnVtX3ZhbHVlcykgPiAwOgorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcg
ICAgICAgIEFsbEZpZWxkc1NldCA9ICglcyknICUgJyB8ICcuam9pbihlbnVtX3ZhbHVlcykpCisg
ICAgICAgIGVsc2U6CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgQWxsRmllbGRz
U2V0ID0gMCcpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIH07JykKKyAgICAgICAgbGluZXMu
YXBwZW5kKCcnKQorICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQorCisgICAgZGVmIF9n
ZW5lcmF0ZV9idWlsZGVyX3NldHRlcl9mb3JfbWVtYmVyKHNlbGYsIHR5cGVfbWVtYmVyLCBkb21h
aW4pOgorICAgICAgICBzZXR0ZXJfYXJncyA9IHsKKyAgICAgICAgICAgICdjYW1lbE5hbWUnOiB1
Y2ZpcnN0KHR5cGVfbWVtYmVyLm1lbWJlcl9uYW1lKSwKKyAgICAgICAgICAgICdmcmFtZXdvcmtQ
cmVmaXgnOiBzZWxmLm1vZGVsKCkuZnJhbWV3b3JrLnNldHRpbmcoJ3ByZWZpeCcpLAorICAgICAg
ICAgICAgJ2tleWVkU2V0JzogR2VuZXJhdG9yLmtleWVkX3NldF9tZXRob2RfZm9yX3R5cGUodHlw
ZV9tZW1iZXIudHlwZSksCisgICAgICAgICAgICAnbmFtZSc6IHR5cGVfbWVtYmVyLm1lbWJlcl9u
YW1lLAorICAgICAgICAgICAgJ3BhcmFtZXRlclR5cGUnOiBHZW5lcmF0b3IudHlwZV9zdHJpbmdf
Zm9yX3R5cGVfbWVtYmVyKHR5cGVfbWVtYmVyKQorICAgICAgICB9CisKKyAgICAgICAgbGluZXMg
PSBbXQorICAgICAgICBsaW5lcy5hcHBlbmQoJycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAg
ICAgICBCdWlsZGVyPFNUQVRFIHwgJShjYW1lbE5hbWUpc1NldD4mIHNldCUoY2FtZWxOYW1lKXMo
JShwYXJhbWV0ZXJUeXBlKXMgdmFsdWUpJyAlIHNldHRlcl9hcmdzKQorICAgICAgICBsaW5lcy5h
cHBlbmQoJyAgICAgICAgeycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoIShTVEFURSAmICUoY2FtZWxOYW1lKXNTZXQpLCBwcm9wZXJ0eV8lKG5hbWUp
c19hbHJlYWR5X3NldCk7JyAlIHNldHRlcl9hcmdzKQorCisgICAgICAgIGlmIGlzaW5zdGFuY2Uo
dHlwZV9tZW1iZXIudHlwZSwgRW51bVR5cGUpOgorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcg
ICAgICAgICAgICBtX3Jlc3VsdC0+JShrZXllZFNldClzKEFTQ0lJTGl0ZXJhbCgiJShuYW1lKXMi
KSwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Z2V0JShmcmFtZXdvcmtQcmVmaXgpc0VudW1Db25z
dGFudFZhbHVlKHN0YXRpY19jYXN0PGludD4odmFsdWUpKSk7JyAlIHNldHRlcl9hcmdzKQorICAg
ICAgICBlbHNlOgorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgICAgICBtX3Jlc3Vs
dC0+JShrZXllZFNldClzKEFTQ0lJTGl0ZXJhbCgiJShuYW1lKXMiKSwgdmFsdWUpOycgJSBzZXR0
ZXJfYXJncykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgICAgICByZXR1cm4gY2FzdFN0
YXRlPCUoY2FtZWxOYW1lKXNTZXQ+KCk7JyAlIHNldHRlcl9hcmdzKQorICAgICAgICBsaW5lcy5h
cHBlbmQoJyAgICAgICAgfScpCisgICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCisKKyAg
ICBkZWYgX2dlbmVyYXRlX3VuY2hlY2tlZF9zZXR0ZXJfZm9yX21lbWJlcihzZWxmLCB0eXBlX21l
bWJlciwgZG9tYWluKToKKyAgICAgICAgc2V0dGVyX2FyZ3MgPSB7CisgICAgICAgICAgICAnY2Ft
ZWxOYW1lJzogdWNmaXJzdCh0eXBlX21lbWJlci5tZW1iZXJfbmFtZSksCisgICAgICAgICAgICAn
ZnJhbWV3b3JrUHJlZml4Jzogc2VsZi5tb2RlbCgpLmZyYW1ld29yay5zZXR0aW5nKCdwcmVmaXgn
KSwKKyAgICAgICAgICAgICdrZXllZFNldCc6IEdlbmVyYXRvci5rZXllZF9zZXRfbWV0aG9kX2Zv
cl90eXBlKHR5cGVfbWVtYmVyLnR5cGUpLAorICAgICAgICAgICAgJ25hbWUnOiB0eXBlX21lbWJl
ci5tZW1iZXJfbmFtZSwKKyAgICAgICAgICAgICdwYXJhbWV0ZXJUeXBlJzogR2VuZXJhdG9yLnR5
cGVfc3RyaW5nX2Zvcl90eXBlX21lbWJlcih0eXBlX21lbWJlcikKKyAgICAgICAgfQorCisgICAg
ICAgIGxpbmVzID0gW10KKyAgICAgICAgbGluZXMuYXBwZW5kKCcnKQorICAgICAgICBsaW5lcy5h
cHBlbmQoJyAgICB2b2lkIHNldCUoY2FtZWxOYW1lKXMoJShwYXJhbWV0ZXJUeXBlKXMgdmFsdWUp
JyAlIHNldHRlcl9hcmdzKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICB7JykKKyAgICAgICAg
aWYgaXNpbnN0YW5jZSh0eXBlX21lbWJlci50eXBlLCBFbnVtVHlwZSk6CisgICAgICAgICAgICBs
aW5lcy5hcHBlbmQoJyAgICAgICAgSW5zcGVjdG9yT2JqZWN0QmFzZTo6JShrZXllZFNldClzKEFT
Q0lJTGl0ZXJhbCgiJShuYW1lKXMiKSwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Z2V0JShmcmFt
ZXdvcmtQcmVmaXgpc0VudW1Db25zdGFudFZhbHVlKHN0YXRpY19jYXN0PGludD4odmFsdWUpKSk7
JyAlIHNldHRlcl9hcmdzKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbGluZXMuYXBwZW5k
KCcgICAgICAgIEluc3BlY3Rvck9iamVjdEJhc2U6OiUoa2V5ZWRTZXQpcyhBU0NJSUxpdGVyYWwo
IiUobmFtZSlzIiksIHZhbHVlKTsnICUgc2V0dGVyX2FyZ3MpCisgICAgICAgIGxpbmVzLmFwcGVu
ZCgnICAgIH0nKQorICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQorCisgICAgZGVmIF9n
ZW5lcmF0ZV9mb3J3YXJkX2RlY2xhcmF0aW9uc19mb3JfYmluZGluZ190cmFpdHMoc2VsZik6Cisg
ICAgICAgICMgQSBsaXN0IG9mIChidWlsZGVyX3R5cGUsIG5lZWRzX3J1bnRpbWVfY2FzdCkKKyAg
ICAgICAgdHlwZV9hcmd1bWVudHMgPSBbXQorCisgICAgICAgIGZvciBkb21haW4gaW4gc2VsZi5k
b21haW5zX3RvX2dlbmVyYXRlKCk6CisgICAgICAgICAgICBkZWNsYXJhdGlvbnNfdG9fZ2VuZXJh
dGUgPSBmaWx0ZXIobGFtYmRhIGRlY2w6IHNlbGYudHlwZV9uZWVkc19zaGFwZV9hc3NlcnRpb25z
KGRlY2wudHlwZSksIGRvbWFpbi50eXBlX2RlY2xhcmF0aW9ucykKKworICAgICAgICAgICAgZm9y
IHR5cGVfZGVjbGFyYXRpb24gaW4gZGVjbGFyYXRpb25zX3RvX2dlbmVyYXRlOgorICAgICAgICAg
ICAgICAgIGZvciB0eXBlX21lbWJlciBpbiB0eXBlX2RlY2xhcmF0aW9uLnR5cGVfbWVtYmVyczoK
KyAgICAgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh0eXBlX21lbWJlci50eXBlLCBFbnVt
VHlwZSk6CisgICAgICAgICAgICAgICAgICAgICAgICB0eXBlX2FyZ3VtZW50cy5hcHBlbmQoKEdl
bmVyYXRvci50eXBlX2J1aWxkZXJfc3RyaW5nX2Zvcl90eXBlX21lbWJlcih0eXBlX21lbWJlciwg
dHlwZV9kZWNsYXJhdGlvbiksIEZhbHNlKSkKKworICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFu
Y2UodHlwZV9kZWNsYXJhdGlvbi50eXBlLCBPYmplY3RUeXBlKToKKyAgICAgICAgICAgICAgICAg
ICAgdHlwZV9hcmd1bWVudHMuYXBwZW5kKChHZW5lcmF0b3IudHlwZV9idWlsZGVyX3N0cmluZ19m
b3JfdHlwZSh0eXBlX2RlY2xhcmF0aW9uLnR5cGUpLCBHZW5lcmF0b3IudHlwZV9uZWVkc19ydW50
aW1lX2Nhc3RzKHR5cGVfZGVjbGFyYXRpb24udHlwZSkpKQorCisgICAgICAgIHN0cnVjdF9rZXl3
b3JkcyA9IFsnc3RydWN0J10KKyAgICAgICAgZnVuY3Rpb25fa2V5d29yZHMgPSBbJ3N0YXRpYyB2
b2lkJ10KKyAgICAgICAgZXhwb3J0X21hY3JvID0gc2VsZi5tb2RlbCgpLmZyYW1ld29yay5zZXR0
aW5nKCdleHBvcnRfbWFjcm8nLCBOb25lKQorICAgICAgICBpZiBleHBvcnRfbWFjcm8gaXMgbm90
IE5vbmU6CisgICAgICAgICAgICBzdHJ1Y3Rfa2V5d29yZHMuYXBwZW5kKGV4cG9ydF9tYWNybykK
KyAgICAgICAgICAgIGZ1bmN0aW9uX2tleXdvcmRzWzE6MV0gPSBbZXhwb3J0X21hY3JvXQorCisg
ICAgICAgIGxpbmVzID0gW10KKyAgICAgICAgZm9yIGFyZ3VtZW50IGluIHR5cGVfYXJndW1lbnRz
OgorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCd0ZW1wbGF0ZTw+ICVzIEJpbmRpbmdUcmFpdHM8
JXM+IHsnICUgKCcgJy5qb2luKHN0cnVjdF9rZXl3b3JkcyksIGFyZ3VtZW50WzBdKSkKKyAgICAg
ICAgICAgIGlmIGFyZ3VtZW50WzFdOgorICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnc3Rh
dGljIFBhc3NSZWZQdHI8JXM+IHJ1bnRpbWVDYXN0KFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNw
ZWN0b3JWYWx1ZT4gdmFsdWUpOycgJSBhcmd1bWVudFswXSkKKyAgICAgICAgICAgIGxpbmVzLmFw
cGVuZCgnI2lmICFBU1NFUlRfRElTQUJMRUQnKQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcl
cyBhc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlKik7
JyAlICcgJy5qb2luKGZ1bmN0aW9uX2tleXdvcmRzKSkKKyAgICAgICAgICAgIGxpbmVzLmFwcGVu
ZCgnI2VuZGlmIC8vICFBU1NFUlRfRElTQUJMRUQnKQorICAgICAgICAgICAgbGluZXMuYXBwZW5k
KCd9OycpCisgICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV90eXBl
X2J1aWxkZXJfaW1wbGVtZW50YXRpb24ucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV90eXBlX2J1aWxkZXJfaW1wbGVtZW50YXRpb24u
cHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uYzY5MmFhOGFiOTNjMTExNmQwOGQxZDhmYjJlZWE4ZmJlMzBiNDEwMQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9jb2RlZ2VuL2dlbmVyYXRlX3R5cGVfYnVpbGRlcl9pbXBsZW1lbnRhdGlvbi5weQpAQCAtMCww
ICsxLDE4NCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoYykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisjIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisj
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyMgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQg
c3RyaW5nCitmcm9tIHN0cmluZyBpbXBvcnQgVGVtcGxhdGUKKworZnJvbSBnZW5lcmF0b3IgaW1w
b3J0IEdlbmVyYXRvciwgdWNmaXJzdAorZnJvbSBnZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBH
ZW5lcmF0b3JUZW1wbGF0ZXMgYXMgVGVtcGxhdGVzCitmcm9tIG1vZGVscyBpbXBvcnQgQWxpYXNl
ZFR5cGUsIEFycmF5VHlwZSwgRW51bVR5cGUsIE9iamVjdFR5cGUKKworbG9nID0gbG9nZ2luZy5n
ZXRMb2dnZXIoJ2dsb2JhbCcpCisKKworY2xhc3MgVHlwZUJ1aWxkZXJJbXBsZW1lbnRhdGlvbkdl
bmVyYXRvcihHZW5lcmF0b3IpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRf
ZmlsZXBhdGgpOgorICAgICAgICBHZW5lcmF0b3IuX19pbml0X18oc2VsZiwgbW9kZWwsIGlucHV0
X2ZpbGVwYXRoKQorCisgICAgZGVmIG91dHB1dF9maWxlbmFtZShzZWxmKToKKyAgICAgICAgcmV0
dXJuICJJbnNwZWN0b3Ilc1R5cGVCdWlsZGVycy5jcHAiICUgc2VsZi5tb2RlbCgpLmZyYW1ld29y
ay5zZXR0aW5nKCdwcmVmaXgnKQorCisgICAgZGVmIGdlbmVyYXRlX291dHB1dChzZWxmKToKKyAg
ICAgICAgZG9tYWlucyA9IHNlbGYuZG9tYWluc190b19nZW5lcmF0ZSgpCisgICAgICAgIHNlbGYu
Y2FsY3VsYXRlX3R5cGVzX3JlcXVpcmluZ19zaGFwZV9hc3NlcnRpb25zKGRvbWFpbnMpCisKKyAg
ICAgICAgc2Vjb25kYXJ5X2hlYWRlcnMgPSBbJzx3dGYvdGV4dC9DU3RyaW5nLmg+J10KKworICAg
ICAgICBoZWFkZXJfYXJncyA9IHsKKyAgICAgICAgICAgICdwcmltYXJ5SW5jbHVkZSc6ICciSW5z
cGVjdG9yJXNUeXBlQnVpbGRlcnMuaCInICUgc2VsZi5tb2RlbCgpLmZyYW1ld29yay5zZXR0aW5n
KCdwcmVmaXgnKSwKKyAgICAgICAgICAgICdzZWNvbmRhcnlJbmNsdWRlcyc6ICJcbiIuam9pbihb
JyNpbmNsdWRlICVzJyAlIGhlYWRlciBmb3IgaGVhZGVyIGluIHNlY29uZGFyeV9oZWFkZXJzXSks
CisgICAgICAgICAgICAnaW5wdXRGaWxlbmFtZSc6IHNlbGYuX2lucHV0X2ZpbGVwYXRoCisgICAg
ICAgIH0KKworICAgICAgICBzZWN0aW9ucyA9IFtdCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChz
ZWxmLmdlbmVyYXRlX2xpY2Vuc2UoKSkKKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRl
KFRlbXBsYXRlcy5DcHBJbXBsZW1lbnRhdGlvblByZWx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipo
ZWFkZXJfYXJncykpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZCgnbmFtZXNwYWNlIFR5cGVCdWls
ZGVyIHsnKQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfZW51bV9tYXBw
aW5nKCkpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9vcGVuX2ZpZWxk
X25hbWVzKCkpCisgICAgICAgIGJ1aWxkZXJfc2VjdGlvbnMgPSBtYXAoc2VsZi5fZ2VuZXJhdGVf
YnVpbGRlcnNfZm9yX2RvbWFpbiwgZG9tYWlucykKKyAgICAgICAgc2VjdGlvbnMuZXh0ZW5kKGZp
bHRlcihsYW1iZGEgc2VjdGlvbjogbGVuKHNlY3Rpb24pID4gMCwgYnVpbGRlcl9zZWN0aW9ucykp
CisgICAgICAgIHNlY3Rpb25zLmFwcGVuZCgnfSAvLyBuYW1lc3BhY2UgVHlwZUJ1aWxkZXInKQor
ICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVzLkNwcEltcGxlbWVudGF0
aW9uUG9zdGx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCisKKyAgICAgICAg
cmV0dXJuICJcblxuIi5qb2luKHNlY3Rpb25zKQorCisgICAgIyBQcml2YXRlIG1ldGhvZHMuCisK
KyAgICBkZWYgX2dlbmVyYXRlX2VudW1fbWFwcGluZyhzZWxmKToKKyAgICAgICAgZnJhbWV3b3Jr
X3ByZWZpeCA9IHNlbGYubW9kZWwoKS5mcmFtZXdvcmsuc2V0dGluZygncHJlZml4JykKKyAgICAg
ICAgbGluZXMgPSBbXQorCisgICAgICAgIGxpbmVzLmFwcGVuZCgnc3RhdGljIGNvbnN0IGNoYXIq
IGNvbnN0IGVudW1fY29uc3RhbnRfdmFsdWVzW10gPSB7JykKKyAgICAgICAgbGluZXMuZXh0ZW5k
KFsnICAgICIlcyIsJyAlIGVudW1fdmFsdWUgZm9yIGVudW1fdmFsdWUgaW4gc2VsZi5hc3NpZ25l
ZF9lbnVtX3ZhbHVlcygpXSkKKyAgICAgICAgbGluZXMuYXBwZW5kKCd9OycpCisgICAgICAgIGxp
bmVzLmFwcGVuZCgnJykKKyAgICAgICAgbGluZXMuYXBwZW5kKCdTdHJpbmcgZ2V0JXNFbnVtQ29u
c3RhbnRWYWx1ZShpbnQgY29kZSkgeycgJSBmcmFtZXdvcmtfcHJlZml4KQorICAgICAgICBsaW5l
cy5hcHBlbmQoJyAgICByZXR1cm4gZW51bV9jb25zdGFudF92YWx1ZXNbY29kZV07JykKKyAgICAg
ICAgbGluZXMuYXBwZW5kKCd9JykKKworICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQor
CisgICAgZGVmIF9nZW5lcmF0ZV9vcGVuX2ZpZWxkX25hbWVzKHNlbGYpOgorICAgICAgICBsaW5l
cyA9IFtdCisgICAgICAgIGZvciBkb21haW4gaW4gc2VsZi5kb21haW5zX3RvX2dlbmVyYXRlKCk6
CisgICAgICAgICAgICBmb3IgdHlwZV9kZWNsYXJhdGlvbiBpbiBmaWx0ZXIobGFtYmRhIGRlY2w6
IEdlbmVyYXRvci50eXBlX2hhc19vcGVuX2ZpZWxkcyhkZWNsLnR5cGUpLCBkb21haW4udHlwZV9k
ZWNsYXJhdGlvbnMpOgorICAgICAgICAgICAgICAgIGZvciB0eXBlX21lbWJlciBpbiBzb3J0ZWQo
dHlwZV9kZWNsYXJhdGlvbi50eXBlX21lbWJlcnMsIGtleT1sYW1iZGEgbWVtYmVyOiBtZW1iZXIu
bWVtYmVyX25hbWUpOgorICAgICAgICAgICAgICAgICAgICBmaWVsZF9uYW1lID0gJzo6Jy5qb2lu
KFsnSW5zcGVjdG9yJywgJ1R5cGVCdWlsZGVyJywgZG9tYWluLmRvbWFpbl9uYW1lLCB1Y2ZpcnN0
KHR5cGVfZGVjbGFyYXRpb24udHlwZV9uYW1lKSwgdWNmaXJzdCh0eXBlX21lbWJlci5tZW1iZXJf
bmFtZSldKQorICAgICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ2NvbnN0IGNoYXIqICVz
ID0gIiVzIjsnICUgKGZpZWxkX25hbWUsIHR5cGVfbWVtYmVyLm1lbWJlcl9uYW1lKSkKKworICAg
ICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQorCisgICAgZGVmIF9nZW5lcmF0ZV9idWlsZGVy
c19mb3JfZG9tYWluKHNlbGYsIGRvbWFpbik6CisgICAgICAgIHNlY3Rpb25zID0gW10KKyAgICAg
ICAgZGVjbGFyYXRpb25zX3RvX2dlbmVyYXRlID0gZmlsdGVyKGxhbWJkYSBkZWNsOiBzZWxmLnR5
cGVfbmVlZHNfc2hhcGVfYXNzZXJ0aW9ucyhkZWNsLnR5cGUpLCBkb21haW4udHlwZV9kZWNsYXJh
dGlvbnMpCisKKyAgICAgICAgZm9yIHR5cGVfZGVjbGFyYXRpb24gaW4gZGVjbGFyYXRpb25zX3Rv
X2dlbmVyYXRlOgorICAgICAgICAgICAgZm9yIHR5cGVfbWVtYmVyIGluIHR5cGVfZGVjbGFyYXRp
b24udHlwZV9tZW1iZXJzOgorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodHlwZV9tZW1i
ZXIudHlwZSwgRW51bVR5cGUpOgorICAgICAgICAgICAgICAgICAgICBzZWN0aW9ucy5hcHBlbmQo
c2VsZi5fZ2VuZXJhdGVfYXNzZXJ0aW9uX2Zvcl9lbnVtKHR5cGVfbWVtYmVyLCB0eXBlX2RlY2xh
cmF0aW9uKSkKKworICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh0eXBlX2RlY2xhcmF0aW9uLnR5
cGUsIE9iamVjdFR5cGUpOgorICAgICAgICAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLl9n
ZW5lcmF0ZV9hc3NlcnRpb25fZm9yX29iamVjdF9kZWNsYXJhdGlvbih0eXBlX2RlY2xhcmF0aW9u
KSkKKyAgICAgICAgICAgICAgICBpZiBHZW5lcmF0b3IudHlwZV9uZWVkc19ydW50aW1lX2Nhc3Rz
KHR5cGVfZGVjbGFyYXRpb24udHlwZSk6CisgICAgICAgICAgICAgICAgICAgIHNlY3Rpb25zLmFw
cGVuZChzZWxmLl9nZW5lcmF0ZV9ydW50aW1lX2Nhc3RfZm9yX29iamVjdF9kZWNsYXJhdGlvbih0
eXBlX2RlY2xhcmF0aW9uKSkKKworICAgICAgICByZXR1cm4gJ1xuXG4nLmpvaW4oc2VjdGlvbnMp
CisKKyAgICBkZWYgX2dlbmVyYXRlX3J1bnRpbWVfY2FzdF9mb3Jfb2JqZWN0X2RlY2xhcmF0aW9u
KHNlbGYsIG9iamVjdF9kZWNsYXJhdGlvbik6CisgICAgICAgIGFyZ3MgPSB7CisgICAgICAgICAg
ICAnb2JqZWN0VHlwZSc6IEdlbmVyYXRvci50eXBlX2J1aWxkZXJfc3RyaW5nX2Zvcl90eXBlKG9i
amVjdF9kZWNsYXJhdGlvbi50eXBlKQorICAgICAgICB9CisgICAgICAgIHJldHVybiBUZW1wbGF0
ZShUZW1wbGF0ZXMuVHlwZUJ1aWxkZXJPYmplY3RSdW50aW1lQ2FzdCkuc3Vic3RpdHV0ZShOb25l
LCAqKmFyZ3MpCisKKyAgICBkZWYgX2dlbmVyYXRlX2Fzc2VydGlvbl9mb3Jfb2JqZWN0X2RlY2xh
cmF0aW9uKHNlbGYsIG9iamVjdF9kZWNsYXJhdGlvbik6CisgICAgICAgIHJlcXVpcmVkX21lbWJl
cnMgPSBmaWx0ZXIobGFtYmRhIG1lbWJlcjogbm90IG1lbWJlci5pc19vcHRpb25hbCwgb2JqZWN0
X2RlY2xhcmF0aW9uLnR5cGVfbWVtYmVycykKKyAgICAgICAgb3B0aW9uYWxfbWVtYmVycyA9IGZp
bHRlcihsYW1iZGEgbWVtYmVyOiBtZW1iZXIuaXNfb3B0aW9uYWwsIG9iamVjdF9kZWNsYXJhdGlv
bi50eXBlX21lbWJlcnMpCisgICAgICAgIHNob3VsZF9jb3VudF9wcm9wZXJ0aWVzID0gbm90IEdl
bmVyYXRvci50eXBlX2hhc19vcGVuX2ZpZWxkcyhvYmplY3RfZGVjbGFyYXRpb24udHlwZSkKKyAg
ICAgICAgbGluZXMgPSBbXQorCisgICAgICAgIGxpbmVzLmFwcGVuZCgnI2lmICFBU1NFUlRfRElT
QUJMRUQnKQorICAgICAgICBsaW5lcy5hcHBlbmQoJ3ZvaWQgQmluZGluZ1RyYWl0czwlcz46OmFz
c2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUqIHZhbHVl
KScgJSAoR2VuZXJhdG9yLnR5cGVfYnVpbGRlcl9zdHJpbmdfZm9yX3R5cGUob2JqZWN0X2RlY2xh
cmF0aW9uLnR5cGUpKSkKKyAgICAgICAgbGluZXMuYXBwZW5kKCIiInsKKyAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBvYmplY3Q7CisgICAgYm9vbCBjYXN0UmVzID0gdmFsdWUtPmFzT2JqZWN0
KCZvYmplY3QpOworICAgIEFTU0VSVF9VTlVTRUQoY2FzdFJlcywgY2FzdFJlcyk7IiIiKQorICAg
ICAgICBmb3IgdHlwZV9tZW1iZXIgaW4gcmVxdWlyZWRfbWVtYmVyczoKKyAgICAgICAgICAgIGFy
Z3MgPSB7CisgICAgICAgICAgICAgICAgJ21lbWJlck5hbWUnOiB0eXBlX21lbWJlci5tZW1iZXJf
bmFtZSwKKyAgICAgICAgICAgICAgICAnYXNzZXJ0TWV0aG9kJzogR2VuZXJhdG9yLmFzc2VydGlv
bl9tZXRob2RfZm9yX3R5cGVfbWVtYmVyKHR5cGVfbWVtYmVyLCBvYmplY3RfZGVjbGFyYXRpb24p
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgiIiIgICAgeworICAg
ICAgICBJbnNwZWN0b3JPYmplY3Q6Oml0ZXJhdG9yICUobWVtYmVyTmFtZSlzUG9zID0gb2JqZWN0
LT5maW5kKEFTQ0lJTGl0ZXJhbCgiJShtZW1iZXJOYW1lKXMiKSk7CisgICAgICAgIEFTU0VSVCgl
KG1lbWJlck5hbWUpc1BvcyAhPSBvYmplY3QtPmVuZCgpKTsKKyAgICAgICAgJShhc3NlcnRNZXRo
b2QpcyglKG1lbWJlck5hbWUpc1Bvcy0+dmFsdWUuZ2V0KCkpOworICAgIH0iIiIgJSBhcmdzKQor
CisgICAgICAgIGlmIHNob3VsZF9jb3VudF9wcm9wZXJ0aWVzOgorICAgICAgICAgICAgbGluZXMu
YXBwZW5kKCcnKQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgaW50IGZvdW5kUHJvcGVy
dGllc0NvdW50ID0gJXM7JyAlIGxlbihyZXF1aXJlZF9tZW1iZXJzKSkKKworICAgICAgICBmb3Ig
dHlwZV9tZW1iZXIgaW4gb3B0aW9uYWxfbWVtYmVyczoKKyAgICAgICAgICAgIGFyZ3MgPSB7Cisg
ICAgICAgICAgICAgICAgJ21lbWJlck5hbWUnOiB0eXBlX21lbWJlci5tZW1iZXJfbmFtZSwKKyAg
ICAgICAgICAgICAgICAnYXNzZXJ0TWV0aG9kJzogR2VuZXJhdG9yLmFzc2VydGlvbl9tZXRob2Rf
Zm9yX3R5cGVfbWVtYmVyKHR5cGVfbWVtYmVyLCBvYmplY3RfZGVjbGFyYXRpb24pCisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgiIiIgICAgeworICAgICAgICBJbnNw
ZWN0b3JPYmplY3Q6Oml0ZXJhdG9yICUobWVtYmVyTmFtZSlzUG9zID0gb2JqZWN0LT5maW5kKEFT
Q0lJTGl0ZXJhbCgiJShtZW1iZXJOYW1lKXMiKSk7CisgICAgICAgIGlmICglKG1lbWJlck5hbWUp
c1BvcyAhPSBvYmplY3QtPmVuZCgpKSB7CisgICAgICAgICAgICAlKGFzc2VydE1ldGhvZClzKCUo
bWVtYmVyTmFtZSlzUG9zLT52YWx1ZS5nZXQoKSk7IiIiICUgYXJncykKKworICAgICAgICAgICAg
aWYgc2hvdWxkX2NvdW50X3Byb3BlcnRpZXM6CisgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5k
KCcgICAgICAgICAgICArK2ZvdW5kUHJvcGVydGllc0NvdW50OycpCisgICAgICAgICAgICBsaW5l
cy5hcHBlbmQoJyAgICAgICAgfScpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICB9JykK
KworICAgICAgICBpZiBzaG91bGRfY291bnRfcHJvcGVydGllczoKKyAgICAgICAgICAgIGxpbmVz
LmFwcGVuZCgnICAgIGlmIChmb3VuZFByb3BlcnRpZXNDb3VudCAhPSBvYmplY3QtPnNpemUoKSkn
KQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIEZBVEFMKCJVbmV4cGVjdGVkIHBy
b3BlcnRpZXMgaW4gb2JqZWN0OiAlc1xcbiIsIG9iamVjdC0+dG9KU09OU3RyaW5nKCkuYXNjaWko
KS5kYXRhKCkpOycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnfScpCisgICAgICAgIGxpbmVzLmFw
cGVuZCgnI2VuZGlmIC8vICFBU1NFUlRfRElTQUJMRUQnKQorICAgICAgICByZXR1cm4gJ1xuJy5q
b2luKGxpbmVzKQorCisgICAgZGVmIF9nZW5lcmF0ZV9hc3NlcnRpb25fZm9yX2VudW0oc2VsZiwg
ZW51bV9tZW1iZXIsIG9iamVjdF9kZWNsYXJhdGlvbik6CisgICAgICAgIGxpbmVzID0gW10KKyAg
ICAgICAgbGluZXMuYXBwZW5kKCcjaWYgIUFTU0VSVF9ESVNBQkxFRCcpCisgICAgICAgIGxpbmVz
LmFwcGVuZCgndm9pZCAlcyhJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlKiB2YWx1ZSknICUgR2Vu
ZXJhdG9yLmFzc2VydGlvbl9tZXRob2RfZm9yX3R5cGVfbWVtYmVyKGVudW1fbWVtYmVyLCBvYmpl
Y3RfZGVjbGFyYXRpb24pKQorICAgICAgICBsaW5lcy5hcHBlbmQoJ3snKQorICAgICAgICBsaW5l
cy5hcHBlbmQoJyAgICBTdHJpbmcgczsnKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBib29s
IGNhc3RfcmVzID0gdmFsdWUtPmFzU3RyaW5nKCZzKTsnKQorICAgICAgICBsaW5lcy5hcHBlbmQo
JyAgICBBU1NFUlQoY2FzdF9yZXMpOycpCisKKyAgICAgICAgYXNzZXJ0X2NvbmRpdGlvbiA9ICcg
fHwgJy5qb2luKFsncyA9PSAiJXMiJyAlIGVudW1fdmFsdWUgZm9yIGVudW1fdmFsdWUgaW4gZW51
bV9tZW1iZXIudHlwZS5lbnVtX3ZhbHVlcygpXSkKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAg
QVNTRVJUKCVzKTsnICUgYXNzZXJ0X2NvbmRpdGlvbikKKyAgICAgICAgbGluZXMuYXBwZW5kKCd9
JykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcjZW5kaWYgLy8gIUFTU0VSVF9ESVNBQkxFRCcpCisK
KyAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRvci5weSBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRvci5weQpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi43MTQ0YjhhYWI4ZmExNGMzODk0YmFhMzIxN2E0ZjVlYTBmNzdiOTBkCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2Nv
ZGVnZW4vZ2VuZXJhdG9yLnB5CkBAIC0wLDAgKzEsNDk3IEBACisjIS91c3IvYmluL2VudiBweXRo
b24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyMgQ29weXJpZ2h0IChjKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0Ogor
IyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworIyBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyMgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisK
K2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgb3MucGF0aAoraW1wb3J0IHJlCitmcm9tIHN0cmluZyBp
bXBvcnQgVGVtcGxhdGUKKworZnJvbSBnZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBHZW5lcmF0
b3JUZW1wbGF0ZXMgYXMgVGVtcGxhdGVzCitmcm9tIG1vZGVscyBpbXBvcnQgUHJpbWl0aXZlVHlw
ZSwgT2JqZWN0VHlwZSwgQXJyYXlUeXBlLCBFbnVtVHlwZSwgQWxpYXNlZFR5cGUKKworbG9nID0g
bG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2JhbCcpCisKKworZGVmIHVjZmlyc3Qoc3RyKToKKyAgICBy
ZXR1cm4gc3RyWzoxXS51cHBlcigpICsgc3RyWzE6XQorCitfUFJJTUlUSVZFX1RPX0NQUF9OQU1F
X01BUCA9IHsKKyAgICAnYm9vbGVhbic6ICdib29sJywKKyAgICAnaW50ZWdlcic6ICdpbnQnLAor
ICAgICdudW1iZXInOiAnZG91YmxlJywKKyAgICAnc3RyaW5nJzogJ1N0cmluZycsCisgICAgJ29i
amVjdCc6ICdJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCcsCisgICAgJ2FueSc6ICdJbnNwZWN0
b3I6Okluc3BlY3RvclZhbHVlJworfQorCisjIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBjb252ZXJ0
ZWQgaW50byBhIHByb3BlcnR5IG9uIHRoZSBkb21haW4gaW4gSlNPTi4KK19ET01BSU5fVE9fQ1BQ
X0dVQVJEX01BUCA9IHsKKyAgICAnRGF0YWJhc2UnOiAiRU5BQkxFKFNRTF9EQVRBQkFTRSkiLAor
ICAgICdJbmRleGVkREInOiAiRU5BQkxFKElOREVYRURfREFUQUJBU0UpIiwKKyAgICAnUmVwbGF5
JzogIkVOQUJMRShXRUJfUkVQTEFZKSIsCit9CisKK19BTFdBWVNfVVBQRVJDQVNFRF9FTlVNX1ZB
TFVFX1NVQlNUUklOR1MgPSBzZXQoWydBUEknLCAnQ1NTJywgJ0RPTScsICdIVE1MJywgJ1hIUics
ICdYTUwnXSkKKworIyBUaGVzZSBvYmplY3RzIGFyZSBidWlsdCBtYW51YWxseSBieSBjcmVhdGlu
ZyBhbmQgc2V0dGluZyBJbnNwZWN0b3JWYWx1ZXMuCisjIEJlZm9yZSBzZW5kaW5nIHRoZXNlIG92
ZXIgdGhlIHByb3RvY29sLCB0aGVpciBzaGFwZXMgYXJlIGNoZWNrZWQgYWdhaW5zdCB0aGUgc3Bl
Y2lmaWNhdGlvbi4KKyMgU28sIGFueSB0eXBlcyByZWZlcmVuY2VkIGJ5IHRoZXNlIHR5cGVzIHJl
cXVpcmUgZGVidWctb25seSBhc3NlcnRpb25zIHRoYXQgY2hlY2sgdmFsdWVzLgorIyBDYWxjdWxh
dGluZyBuZWNlc3NhcnkgYXNzZXJ0aW9ucyBpcyBhbm5veWluZywgYW5kIGFkZHMgYSBsb3Qgb2Yg
Y29tcGxleGl0eSB0byB0aGUgZ2VuZXJhdG9yLgorCisjIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBj
b252ZXJ0ZWQgaW50byBhIHByb3BlcnR5IGluIEpTT04uCitfVFlQRVNfTkVFRElOR19SVU5USU1F
X0NBU1RTID0gc2V0KFsKKyAgICAiUnVudGltZS5SZW1vdGVPYmplY3QiLAorICAgICJSdW50aW1l
LlByb3BlcnR5RGVzY3JpcHRvciIsCisgICAgIlJ1bnRpbWUuSW50ZXJuYWxQcm9wZXJ0eURlc2Ny
aXB0b3IiLAorICAgICJEZWJ1Z2dlci5GdW5jdGlvbkRldGFpbHMiLAorICAgICJEZWJ1Z2dlci5D
YWxsRnJhbWUiLAorICAgICJDYW52YXMuVHJhY2VMb2ciLAorICAgICJDYW52YXMuUmVzb3VyY2VJ
bmZvIiwKKyAgICAiQ2FudmFzLlJlc291cmNlU3RhdGUiLAorICAgICMgVGhpcyBzaG91bGQgYmUg
YSB0ZW1wb3JhcnkgaGFjay4gVGltZWxpbmVFdmVudCBzaG91bGQgYmUgY3JlYXRlZCB2aWEgZ2Vu
ZXJhdGVkIEMrKyBBUEkuCisgICAgIlRpbWVsaW5lLlRpbWVsaW5lRXZlbnQiLAorICAgICMgRm9y
IHRlc3RpbmcgcHVycG9zZXMgb25seS4KKyAgICAiVGVzdC5UeXBlTmVlZGluZ0Nhc3QiCitdKQor
CisjIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBjb252ZXJ0ZWQgaW50byBhIHByb3BlcnR5IGluIEpT
T04uCitfVFlQRVNfV0lUSF9PUEVOX0ZJRUxEUyA9IHNldChbCisgICAgIlRpbWVsaW5lLlRpbWVs
aW5lRXZlbnQiLAorICAgICMgSW5zcGVjdG9yU3R5bGVTaGVldCBub3Qgb25seSBjcmVhdGVzIHRo
aXMgcHJvcGVydHkgYnV0IHdhbnRzIHRvIHJlYWQgaXQgYW5kIG1vZGlmeSBpdC4KKyAgICAiQ1NT
LkNTU1Byb3BlcnR5IiwKKyAgICAjIEluc3BlY3RvclJlc291cmNlQWdlbnQgbmVlZHMgdG8gdXBk
YXRlIG1pbWUtdHlwZS4KKyAgICAiTmV0d29yay5SZXNwb25zZSIsCisgICAgIyBGb3IgdGVzdGlu
ZyBwdXJwb3NlcyBvbmx5LgorICAgICJUZXN0Lk9wZW5QYXJhbWV0ZXJCdW5kbGUiCitdKQorCisK
K2NsYXNzIEdlbmVyYXRvcjoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbW9kZWwsIGlucHV0X2Zp
bGVwYXRoKToKKyAgICAgICAgc2VsZi5fbW9kZWwgPSBtb2RlbAorICAgICAgICBzZWxmLl9pbnB1
dF9maWxlcGF0aCA9IGlucHV0X2ZpbGVwYXRoCisKKyAgICBkZWYgbW9kZWwoc2VsZik6CisgICAg
ICAgIHJldHVybiBzZWxmLl9tb2RlbAorCisgICAgZGVmIGdlbmVyYXRlX2xpY2Vuc2Uoc2VsZik6
CisgICAgICAgIHJldHVybiBUZW1wbGF0ZShUZW1wbGF0ZXMuQ29weXJpZ2h0QmxvY2spLnN1YnN0
aXR1dGUoTm9uZSwgaW5wdXRGaWxlbmFtZT1vcy5wYXRoLmJhc2VuYW1lKHNlbGYuX2lucHV0X2Zp
bGVwYXRoKSkKKworICAgICMgVGhlc2UgbWV0aG9kcyBhcmUgb3ZlcnJpZGRlbiBieSBzdWJjbGFz
c2VzLgorICAgIGRlZiBkb21haW5zX3RvX2dlbmVyYXRlKHNlbGYpOgorICAgICAgICByZXR1cm4g
ZmlsdGVyKGxhbWJkYSBkb21haW46IG5vdCBkb21haW4uaXNfc3VwcGxlbWVudGFsLCBzZWxmLm1v
ZGVsKCkuZG9tYWlucykKKworICAgIGRlZiBnZW5lcmF0ZV9vdXRwdXQoc2VsZik6CisgICAgICAg
IHBhc3MKKworICAgIGRlZiBvdXRwdXRfZmlsZW5hbWUoc2VsZik6CisgICAgICAgIHBhc3MKKwor
ICAgIGRlZiBlbmNvZGluZ19mb3JfZW51bV92YWx1ZShzZWxmLCBlbnVtX3ZhbHVlKToKKyAgICAg
ICAgaWYgbm90IGhhc2F0dHIoc2VsZiwgIl9hc3NpZ25lZF9lbnVtX3ZhbHVlcyIpOgorICAgICAg
ICAgICAgc2VsZi5fdHJhdmVyc2VfYW5kX2Fzc2lnbl9lbnVtX3ZhbHVlcygpCisKKyAgICAgICAg
cmV0dXJuIHNlbGYuX2VudW1fdmFsdWVfZW5jb2RpbmdzW2VudW1fdmFsdWVdCisKKyAgICBkZWYg
YXNzaWduZWRfZW51bV92YWx1ZXMoc2VsZik6CisgICAgICAgIGlmIG5vdCBoYXNhdHRyKHNlbGYs
ICJfYXNzaWduZWRfZW51bV92YWx1ZXMiKToKKyAgICAgICAgICAgIHNlbGYuX3RyYXZlcnNlX2Fu
ZF9hc3NpZ25fZW51bV92YWx1ZXMoKQorCisgICAgICAgIHJldHVybiBzZWxmLl9hc3NpZ25lZF9l
bnVtX3ZhbHVlc1s6XSAgIyBTbGljZS4KKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgdHlw
ZV9uZWVkc19ydW50aW1lX2Nhc3RzKF90eXBlKToKKyAgICAgICAgcmV0dXJuIF90eXBlLnF1YWxp
ZmllZF9uYW1lKCkgaW4gX1RZUEVTX05FRURJTkdfUlVOVElNRV9DQVNUUworCisgICAgQHN0YXRp
Y21ldGhvZAorICAgIGRlZiB0eXBlX2hhc19vcGVuX2ZpZWxkcyhfdHlwZSk6CisgICAgICAgIHJl
dHVybiBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpIGluIF9UWVBFU19XSVRIX09QRU5fRklFTERTCisK
KyAgICBkZWYgdHlwZV9uZWVkc19zaGFwZV9hc3NlcnRpb25zKHNlbGYsIF90eXBlKToKKyAgICAg
ICAgaWYgbm90IGhhc2F0dHIoc2VsZiwgIl90eXBlc19uZWVkaW5nX3NoYXBlX2Fzc2VydGlvbnMi
KToKKyAgICAgICAgICAgIHNlbGYuY2FsY3VsYXRlX3R5cGVzX3JlcXVpcmluZ19zaGFwZV9hc3Nl
cnRpb25zKHNlbGYubW9kZWwoKS5kb21haW5zKQorCisgICAgICAgIHJldHVybiBfdHlwZSBpbiBz
ZWxmLl90eXBlc19uZWVkaW5nX3NoYXBlX2Fzc2VydGlvbnMKKworICAgICMgVG8gcmVzdHJpY3Qg
dGhlIGRvbWFpbnMgb3ZlciB3aGljaCB3ZSBjb21wdXRlIHR5cGVzIG5lZWRpbmcgYXNzZXJ0aW9u
cywgY2FsbCB0aGlzIG1ldGhvZAorICAgICMgYmVmb3JlIGdlbmVyYXRpbmcgYW55IG91dHB1dCB3
aXRoIHRoZSBkZXNpcmVkIGRvbWFpbnMgcGFyYW1ldGVyLiBUaGUgY29tcHV0ZWQKKyAgICAjIHNl
dCBvZiB0eXBlcyB3aWxsIG5vdCBiZSBhdXRvbWF0aWNhbGx5IHJlZ2VuZXJhdGVkIG9uIHN1YnNl
cXVlbnQgY2FsbHMgdG8KKyAgICAjIEdlbmVyYXRvci50eXBlc19uZWVkaW5nX3NoYXBlX2Fzc2Vy
dGlvbnMoKS4KKyAgICBkZWYgY2FsY3VsYXRlX3R5cGVzX3JlcXVpcmluZ19zaGFwZV9hc3NlcnRp
b25zKHNlbGYsIGRvbWFpbnMpOgorICAgICAgICBkb21haW5fbmFtZXMgPSBtYXAobGFtYmRhIGRv
bWFpbjogZG9tYWluLmRvbWFpbl9uYW1lLCBkb21haW5zKQorICAgICAgICBsb2cuZGVidWcoIj4g
Q2FsY3VsYXRpbmcgdHlwZXMgdGhhdCBuZWVkIHNoYXBlIGFzc2VydGlvbnMgKGVsaWdpYmxlIGRv
bWFpbnM6ICVzKSIgJSAiLCAiLmpvaW4oZG9tYWluX25hbWVzKSkKKworICAgICAgICAjIE11dGF0
ZXMgdGhlIHBhc3NlZC1pbiBzZXQ7IHRoaXMgc2ltcGxpZmllcyBjaGVja3MgdG8gcHJldmVudCBp
bmZpbml0ZSByZWN1cnNpb24uCisgICAgICAgIGRlZiBnYXRoZXJfdHJhbnNpdGl2ZWx5X3JlZmVy
ZW5jZWRfdHlwZXMoX3R5cGUsIGdhdGhlcmVkX3R5cGVzKToKKyAgICAgICAgICAgIGlmIF90eXBl
IGluIGdhdGhlcmVkX3R5cGVzOgorICAgICAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICAg
ICBpZiBpc2luc3RhbmNlKF90eXBlLCBPYmplY3RUeXBlKToKKyAgICAgICAgICAgICAgICBsb2cu
ZGVidWcoIj4gQWRkaW5nIHR5cGUgJXMgdG8gbGlzdCBvZiB0eXBlcyBuZWVkaW5nIHNoYXBlIGFz
c2VydGlvbnMuIiAlIF90eXBlLnF1YWxpZmllZF9uYW1lKCkpCisgICAgICAgICAgICAgICAgZ2F0
aGVyZWRfdHlwZXMuYWRkKF90eXBlKQorICAgICAgICAgICAgICAgIGZvciB0eXBlX21lbWJlciBp
biBfdHlwZS5tZW1iZXJzOgorICAgICAgICAgICAgICAgICAgICBnYXRoZXJfdHJhbnNpdGl2ZWx5
X3JlZmVyZW5jZWRfdHlwZXModHlwZV9tZW1iZXIudHlwZSwgZ2F0aGVyZWRfdHlwZXMpCisgICAg
ICAgICAgICBlbGlmIGlzaW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKToKKyAgICAgICAgICAgICAg
ICBsb2cuZGVidWcoIj4gQWRkaW5nIHR5cGUgJXMgdG8gbGlzdCBvZiB0eXBlcyBuZWVkaW5nIHNo
YXBlIGFzc2VydGlvbnMuIiAlIF90eXBlLnF1YWxpZmllZF9uYW1lKCkpCisgICAgICAgICAgICAg
ICAgZ2F0aGVyZWRfdHlwZXMuYWRkKF90eXBlKQorICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNl
KF90eXBlLCBBbGlhc2VkVHlwZSk6CisgICAgICAgICAgICAgICAgZ2F0aGVyX3RyYW5zaXRpdmVs
eV9yZWZlcmVuY2VkX3R5cGVzKF90eXBlLmFsaWFzZWRfdHlwZSwgZ2F0aGVyZWRfdHlwZXMpCisg
ICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2UoX3R5cGUsIEFycmF5VHlwZSk6CisgICAgICAgICAg
ICAgICAgZ2F0aGVyX3RyYW5zaXRpdmVseV9yZWZlcmVuY2VkX3R5cGVzKF90eXBlLmVsZW1lbnRf
dHlwZSwgZ2F0aGVyZWRfdHlwZXMpCisKKyAgICAgICAgZm91bmRfdHlwZXMgPSBzZXQoKQorICAg
ICAgICBmb3IgZG9tYWluIGluIGRvbWFpbnM6CisgICAgICAgICAgICBmb3IgZGVjbGFyYXRpb24g
aW4gZG9tYWluLnR5cGVfZGVjbGFyYXRpb25zOgorICAgICAgICAgICAgICAgIGlmIGRlY2xhcmF0
aW9uLnR5cGUucXVhbGlmaWVkX25hbWUoKSBpbiBfVFlQRVNfTkVFRElOR19SVU5USU1FX0NBU1RT
OgorICAgICAgICAgICAgICAgICAgICBsb2cuZGVidWcoIj4gR2F0aGVyaW5nIHR5cGVzIHJlZmVy
ZW5jZWQgYnkgJXMgdG8gZ2VuZXJhdGUgc2hhcGUgYXNzZXJ0aW9ucy4iICUgZGVjbGFyYXRpb24u
dHlwZS5xdWFsaWZpZWRfbmFtZSgpKQorICAgICAgICAgICAgICAgICAgICBnYXRoZXJfdHJhbnNp
dGl2ZWx5X3JlZmVyZW5jZWRfdHlwZXMoZGVjbGFyYXRpb24udHlwZSwgZm91bmRfdHlwZXMpCisK
KyAgICAgICAgc2VsZi5fdHlwZXNfbmVlZGluZ19zaGFwZV9hc3NlcnRpb25zID0gZm91bmRfdHlw
ZXMKKworICAgICMgUHJpdmF0ZSBoZWxwZXIgaW5zdGFuY2UgbWV0aG9kcy4KKyAgICBkZWYgX3Ry
YXZlcnNlX2FuZF9hc3NpZ25fZW51bV92YWx1ZXMoc2VsZik6CisgICAgICAgIHNlbGYuX2VudW1f
dmFsdWVfZW5jb2RpbmdzID0ge30KKyAgICAgICAgc2VsZi5fYXNzaWduZWRfZW51bV92YWx1ZXMg
PSBbXQorICAgICAgICBhbGxfdHlwZXMgPSBbXQorCisgICAgICAgIGRvbWFpbnMgPSBzZWxmLmRv
bWFpbnNfdG9fZ2VuZXJhdGUoKQorCisgICAgICAgIGZvciBkb21haW4gaW4gZG9tYWluczoKKyAg
ICAgICAgICAgIGZvciB0eXBlX2RlY2xhcmF0aW9uIGluIGRvbWFpbi50eXBlX2RlY2xhcmF0aW9u
czoKKyAgICAgICAgICAgICAgICBhbGxfdHlwZXMuYXBwZW5kKHR5cGVfZGVjbGFyYXRpb24udHlw
ZSkKKyAgICAgICAgICAgICAgICBmb3IgdHlwZV9tZW1iZXIgaW4gdHlwZV9kZWNsYXJhdGlvbi50
eXBlX21lbWJlcnM6CisgICAgICAgICAgICAgICAgICAgIGFsbF90eXBlcy5hcHBlbmQodHlwZV9t
ZW1iZXIudHlwZSkKKworICAgICAgICBmb3IgZG9tYWluIGluIGRvbWFpbnM6CisgICAgICAgICAg
ICBmb3IgZXZlbnQgaW4gZG9tYWluLmV2ZW50czoKKyAgICAgICAgICAgICAgICBhbGxfdHlwZXMu
ZXh0ZW5kKFtwYXJhbWV0ZXIudHlwZSBmb3IgcGFyYW1ldGVyIGluIGV2ZW50LmV2ZW50X3BhcmFt
ZXRlcnNdKQorCisgICAgICAgIGZvciBkb21haW4gaW4gZG9tYWluczoKKyAgICAgICAgICAgIGZv
ciBjb21tYW5kIGluIGRvbWFpbi5jb21tYW5kczoKKyAgICAgICAgICAgICAgICBhbGxfdHlwZXMu
ZXh0ZW5kKFtwYXJhbWV0ZXIudHlwZSBmb3IgcGFyYW1ldGVyIGluIGNvbW1hbmQuY2FsbF9wYXJh
bWV0ZXJzXSkKKyAgICAgICAgICAgICAgICBhbGxfdHlwZXMuZXh0ZW5kKFtwYXJhbWV0ZXIudHlw
ZSBmb3IgcGFyYW1ldGVyIGluIGNvbW1hbmQucmV0dXJuX3BhcmFtZXRlcnNdKQorCisgICAgICAg
IGZvciBfdHlwZSBpbiBhbGxfdHlwZXM6CisgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShf
dHlwZSwgRW51bVR5cGUpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBt
YXAoc2VsZi5fYXNzaWduX2VuY29kaW5nX2Zvcl9lbnVtX3ZhbHVlLCBfdHlwZS5lbnVtX3ZhbHVl
cygpKQorCisgICAgZGVmIF9hc3NpZ25fZW5jb2RpbmdfZm9yX2VudW1fdmFsdWUoc2VsZiwgZW51
bV92YWx1ZSk6CisgICAgICAgIGlmIGVudW1fdmFsdWUgaW4gc2VsZi5fZW51bV92YWx1ZV9lbmNv
ZGluZ3M6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBzZWxmLl9lbnVtX3ZhbHVlX2Vu
Y29kaW5nc1tlbnVtX3ZhbHVlXSA9IGxlbihzZWxmLl9hc3NpZ25lZF9lbnVtX3ZhbHVlcykKKyAg
ICAgICAgc2VsZi5fYXNzaWduZWRfZW51bV92YWx1ZXMuYXBwZW5kKGVudW1fdmFsdWUpCisKKyAg
ICAjIE1pc2NlbGxhbmVvdXMgdGV4dCBtYW5pcHVsYXRpb24gcm91dGluZXMuCisgICAgQHN0YXRp
Y21ldGhvZAorICAgIGRlZiB3cmFwX3dpdGhfZ3VhcmRfZm9yX2RvbWFpbihkb21haW4sIHRleHQp
OgorICAgICAgICBndWFyZCA9IF9ET01BSU5fVE9fQ1BQX0dVQVJEX01BUC5nZXQoZG9tYWluLmRv
bWFpbl9uYW1lKQorICAgICAgICBpZiBndWFyZCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGxp
bmVzID0gWworICAgICAgICAgICAgICAgICcjaWYgJXMnICUgZ3VhcmQsCisgICAgICAgICAgICAg
ICAgdGV4dCwKKyAgICAgICAgICAgICAgICAnI2VuZGlmIC8vICVzJyAlIGd1YXJkCisgICAgICAg
ICAgICAgICAgXQorICAgICAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKKyAgICAgICAg
ZWxzZToKKyAgICAgICAgICAgIHJldHVybiB0ZXh0CisKKyAgICBAc3RhdGljbWV0aG9kCisgICAg
ZGVmIHN0eWxpemVkX25hbWVfZm9yX2VudW1fdmFsdWUoZW51bV92YWx1ZSk6CisgICAgICAgIHJl
Z2V4ID0gJyglcyknICUgInwiLmpvaW4oX0FMV0FZU19VUFBFUkNBU0VEX0VOVU1fVkFMVUVfU1VC
U1RSSU5HUykKKworICAgICAgICBkZWYgcmVwbGFjZUNhbGxiYWNrKG1hdGNoKToKKyAgICAgICAg
ICAgIHJldHVybiBtYXRjaC5ncm91cCgxKS51cHBlcigpCisKKyAgICAgICAgIyBTcGxpdCBvbiBo
eXBoZW4sIGludHJvZHVjZSBjYW1lbGNhc2UsIGFuZCBmb3JjZSB1cHBlcmNhc2luZyBvZiBhY3Jv
bnltcy4KKyAgICAgICAgc3Vid29yZHMgPSBtYXAodWNmaXJzdCwgZW51bV92YWx1ZS5zcGxpdCgn
LScpKQorICAgICAgICAjIFRoZSBkb3VibGUtY2FsbCBpcyBmb3IgYmFja3dhcmRzIGNvbXBhdGli
aWxpdHkgd2l0aCBQeXRob24gMi42LCB3aGljaCBsYWNrcyBhIGZsYWdzIGFyZ3VtZW50IGZvciBy
ZS5zdWIuCisgICAgICAgIHJldHVybiByZS5zdWIocmUuY29tcGlsZShyZWdleCwgcmUuSUdOT1JF
Q0FTRSksIHJlcGxhY2VDYWxsYmFjaywgIiIuam9pbihzdWJ3b3JkcykpCisKKyAgICBAc3RhdGlj
bWV0aG9kCisgICAgZGVmIGtleWVkX2dldF9tZXRob2RfZm9yX3R5cGUoX3R5cGUpOgorICAgICAg
ICBpZiBpc2luc3RhbmNlKF90eXBlLCBPYmplY3RUeXBlKToKKyAgICAgICAgICAgIHJldHVybiAn
Z2V0T2JqZWN0JworICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBBcnJheVR5cGUpOgorICAg
ICAgICAgICAgcmV0dXJuICdnZXRBcnJheScKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwg
UHJpbWl0aXZlVHlwZSk6CisgICAgICAgICAgICBpZiBfdHlwZS5yYXdfbmFtZSgpIGlzICdpbnRl
Z2VyJzoKKyAgICAgICAgICAgICAgICByZXR1cm4gJ2dldEludCcKKyAgICAgICAgICAgIGVsc2U6
CisgICAgICAgICAgICAgICAgcmV0dXJuICdnZXQnICsgdWNmaXJzdChfdHlwZS5yYXdfbmFtZSgp
KQorICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBBbGlhc2VkVHlwZSk6CisgICAgICAgICAg
ICByZXR1cm4gR2VuZXJhdG9yLmtleWVkX2dldF9tZXRob2RfZm9yX3R5cGUoX3R5cGUuYWxpYXNl
ZF90eXBlKQorICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBFbnVtVHlwZSk6CisgICAgICAg
ICAgICByZXR1cm4gR2VuZXJhdG9yLmtleWVkX2dldF9tZXRob2RfZm9yX3R5cGUoX3R5cGUucHJp
bWl0aXZlX3R5cGUpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGtleWVkX3NldF9tZXRo
b2RfZm9yX3R5cGUoX3R5cGUpOgorICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBPYmplY3RU
eXBlKToKKyAgICAgICAgICAgIHJldHVybiAnc2V0T2JqZWN0JworICAgICAgICBpZiBpc2luc3Rh
bmNlKF90eXBlLCBBcnJheVR5cGUpOgorICAgICAgICAgICAgcmV0dXJuICdzZXRBcnJheScKKyAg
ICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgUHJpbWl0aXZlVHlwZSk6CisgICAgICAgICAgICBp
ZiBfdHlwZS5yYXdfbmFtZSgpIGluIFsnaW50ZWdlcicsICdudW1iZXInXToKKyAgICAgICAgICAg
ICAgICByZXR1cm4gJ3NldE51bWJlcicKKyAgICAgICAgICAgIGVsaWYgX3R5cGUucmF3X25hbWUo
KSBpbiBbJ2FueSddOgorICAgICAgICAgICAgICAgIHJldHVybiAnc2V0VmFsdWUnCisgICAgICAg
ICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiAnc2V0JyArIHVjZmlyc3QoX3R5cGUu
cmF3X25hbWUoKSkKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgQWxpYXNlZFR5cGUpOgor
ICAgICAgICAgICAgcmV0dXJuIEdlbmVyYXRvci5rZXllZF9zZXRfbWV0aG9kX2Zvcl90eXBlKF90
eXBlLmFsaWFzZWRfdHlwZSkKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgRW51bVR5cGUp
OgorICAgICAgICAgICAgcmV0dXJuIEdlbmVyYXRvci5rZXllZF9zZXRfbWV0aG9kX2Zvcl90eXBl
KF90eXBlLnByaW1pdGl2ZV90eXBlKQorCisgICAgIyBHZW5lcmF0ZSB0eXBlIHJlcHJlc2VudGF0
aW9ucyBmb3IgdmFyaW91cyBzaXR1YXRpb25zLgorICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYg
dHlwZV9idWlsZGVyX3N0cmluZ19mb3JfdHlwZShfdHlwZSk6CisgICAgICAgIGlmIGlzaW5zdGFu
Y2UoX3R5cGUsIE9iamVjdFR5cGUpIGFuZCBsZW4oX3R5cGUubWVtYmVycykgPT0gMDoKKyAgICAg
ICAgICAgIHJldHVybiAnSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QnCisgICAgICAgIGlmIGlz
aW5zdGFuY2UoX3R5cGUsIChPYmplY3RUeXBlLCBBbGlhc2VkVHlwZSwgRW51bVR5cGUpKToKKyAg
ICAgICAgICAgIHJldHVybiAnSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6JXM6OiVzJyAlIChfdHlw
ZS50eXBlX2RvbWFpbigpLmRvbWFpbl9uYW1lLCBfdHlwZS5yYXdfbmFtZSgpKQorICAgICAgICBp
ZiBpc2luc3RhbmNlKF90eXBlLCBBcnJheVR5cGUpOgorICAgICAgICAgICAgcmV0dXJuICdJbnNw
ZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheTwlcz4nICUgR2VuZXJhdG9yLnR5cGVfYnVpbGRlcl9z
dHJpbmdfZm9yX3R5cGUoX3R5cGUuZWxlbWVudF90eXBlKQorICAgICAgICBpZiBpc2luc3RhbmNl
KF90eXBlLCBQcmltaXRpdmVUeXBlKToKKyAgICAgICAgICAgIHJldHVybiBHZW5lcmF0b3IuY3Bw
X25hbWVfZm9yX3ByaW1pdGl2ZV90eXBlKF90eXBlKQorCisgICAgQHN0YXRpY21ldGhvZAorICAg
IGRlZiB0eXBlX2J1aWxkZXJfc3RyaW5nX2Zvcl90eXBlX21lbWJlcih0eXBlX21lbWJlciwgb2Jq
ZWN0X2RlY2xhcmF0aW9uKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZSh0eXBlX21lbWJlci50eXBl
LCBFbnVtVHlwZSkgYW5kIHR5cGVfbWVtYmVyLnR5cGUuaXNfYW5vbnltb3VzOgorICAgICAgICAg
ICAgcmV0dXJuICc6Oicuam9pbihbR2VuZXJhdG9yLnR5cGVfYnVpbGRlcl9zdHJpbmdfZm9yX3R5
cGUob2JqZWN0X2RlY2xhcmF0aW9uLnR5cGUpLCB1Y2ZpcnN0KHR5cGVfbWVtYmVyLm1lbWJlcl9u
YW1lKV0pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gR2VuZXJhdG9yLnR5cGVf
YnVpbGRlcl9zdHJpbmdfZm9yX3R5cGUodHlwZV9tZW1iZXIudHlwZSkKKworICAgIEBzdGF0aWNt
ZXRob2QKKyAgICBkZWYgdHlwZV9zdHJpbmdfZm9yX3VuY2hlY2tlZF9mb3JtYWxfaW5fcGFyYW1l
dGVyKHBhcmFtZXRlcik6CisgICAgICAgIF90eXBlID0gcGFyYW1ldGVyLnR5cGUKKyAgICAgICAg
aWYgaXNpbnN0YW5jZShfdHlwZSwgQWxpYXNlZFR5cGUpOgorICAgICAgICAgICAgX3R5cGUgPSBf
dHlwZS5hbGlhc2VkX3R5cGUgICMgRmFsbCB0aHJvdWdoIHRvIGVudW0gb3IgcHJpbWl0aXZlLgor
CisgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKToKKyAgICAgICAgICAgIF90
eXBlID0gX3R5cGUucHJpbWl0aXZlX3R5cGUgICMgRmFsbCB0aHJvdWdoIHRvIHByaW1pdGl2ZS4K
KworICAgICAgICBzaWdpbCA9ICcqJyBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwgZWxzZSAnJicK
KyAgICAgICAgIyBUaGlzIGhhbmRsZXMgdGhlICdhbnknIHR5cGUgYW5kIG9iamVjdHMgd2l0aCBk
ZWZpbmVkIHByb3BlcnRpZXMuCisgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIE9iamVjdFR5
cGUpIG9yIF90eXBlLnF1YWxpZmllZF9uYW1lKCkgaXMgJ29iamVjdCc6CisgICAgICAgICAgICBy
ZXR1cm4gJ2NvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4nICsgc2lnaWwK
KyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgQXJyYXlUeXBlKToKKyAgICAgICAgICAgIHJl
dHVybiAnY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXk+JyArIHNpZ2lsCisg
ICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIFByaW1pdGl2ZVR5cGUpOgorICAgICAgICAgICAg
Y3BwX25hbWUgPSBHZW5lcmF0b3IuY3BwX25hbWVfZm9yX3ByaW1pdGl2ZV90eXBlKF90eXBlKQor
ICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAgIHJl
dHVybiAnY29uc3QgJXMqJyAlIGNwcF9uYW1lCisgICAgICAgICAgICBlbGlmIF90eXBlLnJhd19u
YW1lKCkgaW4gWydzdHJpbmcnXToKKyAgICAgICAgICAgICAgICByZXR1cm4gJ2NvbnN0ICVzJicg
JSBjcHBfbmFtZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gY3Bw
X25hbWUKKworICAgICAgICByZXR1cm4gInVua25vd25fdW5jaGVja2VkX2Zvcm1hbF9pbl9wYXJh
bWV0ZXJfdHlwZSIKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgdHlwZV9zdHJpbmdfZm9y
X2NoZWNrZWRfZm9ybWFsX2V2ZW50X3BhcmFtZXRlcihwYXJhbWV0ZXIpOgorICAgICAgICByZXR1
cm4gR2VuZXJhdG9yLnR5cGVfc3RyaW5nX2Zvcl90eXBlX3dpdGhfbmFtZShwYXJhbWV0ZXIudHlw
ZSwgcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lLCBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwpCisKKyAg
ICBAc3RhdGljbWV0aG9kCisgICAgZGVmIHR5cGVfc3RyaW5nX2Zvcl90eXBlX21lbWJlcihtZW1i
ZXIpOgorICAgICAgICByZXR1cm4gR2VuZXJhdG9yLnR5cGVfc3RyaW5nX2Zvcl90eXBlX3dpdGhf
bmFtZShtZW1iZXIudHlwZSwgbWVtYmVyLm1lbWJlcl9uYW1lLCBGYWxzZSkKKworICAgIEBzdGF0
aWNtZXRob2QKKyAgICBkZWYgdHlwZV9zdHJpbmdfZm9yX3R5cGVfd2l0aF9uYW1lKF90eXBlLCB0
eXBlX25hbWUsIGlzX29wdGlvbmFsKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgKEFy
cmF5VHlwZSwgT2JqZWN0VHlwZSkpOgorICAgICAgICAgICAgcmV0dXJuICdQYXNzUmVmUHRyPCVz
PicgJSBHZW5lcmF0b3IudHlwZV9idWlsZGVyX3N0cmluZ19mb3JfdHlwZShfdHlwZSkKKyAgICAg
ICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgQWxpYXNlZFR5cGUpOgorICAgICAgICAgICAgYnVpbGRl
cl90eXBlID0gR2VuZXJhdG9yLnR5cGVfYnVpbGRlcl9zdHJpbmdfZm9yX3R5cGUoX3R5cGUpCisg
ICAgICAgICAgICBpZiBpc19vcHRpb25hbDoKKyAgICAgICAgICAgICAgICByZXR1cm4gJ2NvbnN0
ICVzKiBjb25zdCcgJSBidWlsZGVyX3R5cGUKKyAgICAgICAgICAgIGVsaWYgX3R5cGUuYWxpYXNl
ZF90eXBlLnF1YWxpZmllZF9uYW1lKCkgaW4gWydpbnRlZ2VyJywgJ251bWJlciddOgorICAgICAg
ICAgICAgICAgIHJldHVybiBHZW5lcmF0b3IuY3BwX25hbWVfZm9yX3ByaW1pdGl2ZV90eXBlKF90
eXBlLmFsaWFzZWRfdHlwZSkKKyAgICAgICAgICAgIGVsaWYgX3R5cGUuYWxpYXNlZF90eXBlLnF1
YWxpZmllZF9uYW1lKCkgaW4gWydzdHJpbmcnXToKKyAgICAgICAgICAgICAgICByZXR1cm4gJ2Nv
bnN0ICVzJicgJSBidWlsZGVyX3R5cGUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGJ1aWxkZXJfdHlwZQorICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBQcmlt
aXRpdmVUeXBlKToKKyAgICAgICAgICAgIGNwcF9uYW1lID0gR2VuZXJhdG9yLmNwcF9uYW1lX2Zv
cl9wcmltaXRpdmVfdHlwZShfdHlwZSkKKyAgICAgICAgICAgIGlmIF90eXBlLnF1YWxpZmllZF9u
YW1lKCkgaW4gWydvYmplY3QnXToKKyAgICAgICAgICAgICAgICByZXR1cm4gJ1Bhc3NSZWZQdHI8
SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+JworICAgICAgICAgICAgZWxpZiBfdHlwZS5xdWFs
aWZpZWRfbmFtZSgpIGluIFsnYW55J106CisgICAgICAgICAgICAgICAgcmV0dXJuICdQYXNzUmVm
UHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+JworICAgICAgICAgICAgZWxpZiBpc19vcHRp
b25hbDoKKyAgICAgICAgICAgICAgICByZXR1cm4gJ2NvbnN0ICVzKiBjb25zdCcgJSBjcHBfbmFt
ZQorICAgICAgICAgICAgZWxpZiBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpIGluIFsnc3RyaW5nJ106
CisgICAgICAgICAgICAgICAgcmV0dXJuICdjb25zdCAlcyYnICUgY3BwX25hbWUKKyAgICAgICAg
ICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIGNwcF9uYW1lCisgICAgICAgIGlmIGlz
aW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKToKKyAgICAgICAgICAgIGlmIF90eXBlLmlzX2Fub255
bW91czoKKyAgICAgICAgICAgICAgICBlbnVtX3R5cGVfbmFtZSA9IHVjZmlyc3QodHlwZV9uYW1l
KQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBlbnVtX3R5cGVfbmFtZSA9ICdJ
bnNwZWN0b3I6OlR5cGVCdWlsZGVyOjolczo6JXMnICUgKF90eXBlLnR5cGVfZG9tYWluKCkuZG9t
YWluX25hbWUsIF90eXBlLnJhd19uYW1lKCkpCisKKyAgICAgICAgICAgIGlmIGlzX29wdGlvbmFs
OgorICAgICAgICAgICAgICAgIHJldHVybiAnJXMqJyAlIGVudW1fdHlwZV9uYW1lCisgICAgICAg
ICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiAnJXMnICUgZW51bV90eXBlX25hbWUK
KworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgdHlwZV9zdHJpbmdfZm9yX2Zvcm1hbF9vdXRf
cGFyYW1ldGVyKHBhcmFtZXRlcik6CisgICAgICAgIF90eXBlID0gcGFyYW1ldGVyLnR5cGUKKwor
ICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBBbGlhc2VkVHlwZSk6CisgICAgICAgICAgICBf
dHlwZSA9IF90eXBlLmFsaWFzZWRfdHlwZSAgIyBGYWxsIHRocm91Z2guCisKKyAgICAgICAgaWYg
aXNpbnN0YW5jZShfdHlwZSwgKE9iamVjdFR5cGUsIEFycmF5VHlwZSkpOgorICAgICAgICAgICAg
cmV0dXJuICdSZWZQdHI8JXM+JicgJSBHZW5lcmF0b3IudHlwZV9idWlsZGVyX3N0cmluZ19mb3Jf
dHlwZShfdHlwZSkKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgUHJpbWl0aXZlVHlwZSk6
CisgICAgICAgICAgICBjcHBfbmFtZSA9IEdlbmVyYXRvci5jcHBfbmFtZV9mb3JfcHJpbWl0aXZl
X3R5cGUoX3R5cGUpCisgICAgICAgICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6CisgICAg
ICAgICAgICAgICAgcmV0dXJuICJJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8JXM+
KiIgJSBjcHBfbmFtZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4g
JyVzKicgJSBjcHBfbmFtZQorICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBFbnVtVHlwZSk6
CisgICAgICAgICAgICBpZiBfdHlwZS5pc19hbm9ueW1vdXM6CisgICAgICAgICAgICAgICAgcmV0
dXJuICdJbnNwZWN0b3Ilc0JhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6JXMqJyAlIChfdHlwZS50
eXBlX2RvbWFpbigpLmRvbWFpbl9uYW1lLCB1Y2ZpcnN0KHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFt
ZSkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiAnSW5zcGVjdG9y
OjpUeXBlQnVpbGRlcjo6JXM6OiVzKicgJSAoX3R5cGUudHlwZV9kb21haW4oKS5kb21haW5fbmFt
ZSwgX3R5cGUucmF3X25hbWUoKSkKKworICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJ1bmtub3du
IGZvcm1hbCBvdXQgcGFyYW1ldGVyIHR5cGUuIikKKworICAgICMgRklYTUU6IHRoaXMgaXMgb25s
eSBzbGlnaHRseSBkaWZmZXJlbnQgZnJvbSBvdXQgcGFyYW1ldGVyczsgdGhleSBjb3VsZCBiZSB1
bmlmaWVkLgorICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgdHlwZV9zdHJpbmdfZm9yX2Zvcm1h
bF9hc3luY19wYXJhbWV0ZXIocGFyYW1ldGVyKToKKyAgICAgICAgX3R5cGUgPSBwYXJhbWV0ZXIu
dHlwZQorICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBBbGlhc2VkVHlwZSk6CisgICAgICAg
ICAgICBfdHlwZSA9IF90eXBlLmFsaWFzZWRfdHlwZSAgIyBGYWxsIHRocm91Z2guCisKKyAgICAg
ICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgRW51bVR5cGUpOgorICAgICAgICAgICAgX3R5cGUgPSBf
dHlwZS5wcmltaXRpdmVfdHlwZSAgIyBGYWxsIHRocm91Z2guCisKKyAgICAgICAgaWYgaXNpbnN0
YW5jZShfdHlwZSwgKE9iamVjdFR5cGUsIEFycmF5VHlwZSkpOgorICAgICAgICAgICAgcmV0dXJu
ICdQYXNzUmVmUHRyPCVzPicgJSBHZW5lcmF0b3IudHlwZV9idWlsZGVyX3N0cmluZ19mb3JfdHlw
ZShfdHlwZSkKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgUHJpbWl0aXZlVHlwZSk6Cisg
ICAgICAgICAgICBjcHBfbmFtZSA9IEdlbmVyYXRvci5jcHBfbmFtZV9mb3JfcHJpbWl0aXZlX3R5
cGUoX3R5cGUpCisgICAgICAgICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6CisgICAgICAg
ICAgICAgICAgcmV0dXJuICJJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8JXM+KiIg
JSBjcHBfbmFtZQorICAgICAgICAgICAgZWxpZiBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpIGluIFsn
aW50ZWdlcicsICdudW1iZXInXToKKyAgICAgICAgICAgICAgICByZXR1cm4gR2VuZXJhdG9yLmNw
cF9uYW1lX2Zvcl9wcmltaXRpdmVfdHlwZShfdHlwZSkKKyAgICAgICAgICAgIGVsaWYgX3R5cGUu
cXVhbGlmaWVkX25hbWUoKSBpbiBbJ3N0cmluZyddOgorICAgICAgICAgICAgICAgIHJldHVybiAn
Y29uc3QgJXMmJyAlIGNwcF9uYW1lCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAg
IHJldHVybiBjcHBfbmFtZQorCisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIlVua25vd24gZm9y
bWFsIGFzeW5jIHBhcmFtZXRlciB0eXBlLiIpCisKKyAgICAjIEluLXBhcmFtZXRlcnMgZG9uJ3Qg
dXNlIGJ1aWxkZXIgdHlwZXMsIGJlY2F1c2UgdGhleSBjb3VsZCBiZSBwYXNzZWQKKyAgICAjICJv
cGVuIHR5cGVzIiB0aGF0IGFyZSBtYW51YWxseSBjb25zdHJ1Y3RlZCBvdXQgb2YgSW5zcGVjdG9y
T2JqZWN0cy4KKworICAgICMgRklYTUU6IE9ubHkgcGFyYW1ldGVycyB0aGF0IGFyZSBhY3R1YWxs
eSBvcGVuIHR5cGVzIHNob3VsZCBuZWVkIG5vbi1idWlsZGVyIHBhcmFtZXRlciB0eXBlcy4KKyAg
ICBAc3RhdGljbWV0aG9kCisgICAgZGVmIHR5cGVfc3RyaW5nX2Zvcl9zdGFja19pbl9wYXJhbWV0
ZXIocGFyYW1ldGVyKToKKyAgICAgICAgX3R5cGUgPSBwYXJhbWV0ZXIudHlwZQorICAgICAgICBp
ZiBpc2luc3RhbmNlKF90eXBlLCBBbGlhc2VkVHlwZSk6CisgICAgICAgICAgICBfdHlwZSA9IF90
eXBlLmFsaWFzZWRfdHlwZSAgIyBGYWxsIHRocm91Z2guCisKKyAgICAgICAgaWYgaXNpbnN0YW5j
ZShfdHlwZSwgRW51bVR5cGUpOgorICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5wcmltaXRpdmVf
dHlwZSAgIyBGYWxsIHRocm91Z2guCisKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgT2Jq
ZWN0VHlwZSk6CisgICAgICAgICAgICByZXR1cm4gIlJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rv
ck9iamVjdD4iCisgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEFycmF5VHlwZSk6CisgICAg
ICAgICAgICByZXR1cm4gIlJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5PiIKKyAgICAg
ICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgUHJpbWl0aXZlVHlwZSk6CisgICAgICAgICAgICBjcHBf
bmFtZSA9IEdlbmVyYXRvci5jcHBfbmFtZV9mb3JfcHJpbWl0aXZlX3R5cGUoX3R5cGUpCisgICAg
ICAgICAgICBpZiBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpIGluIFsnYW55JywgJ29iamVjdCddOgor
ICAgICAgICAgICAgICAgIHJldHVybiAiUmVmUHRyPCVzPiIgJSBHZW5lcmF0b3IuY3BwX25hbWVf
Zm9yX3ByaW1pdGl2ZV90eXBlKF90eXBlKQorICAgICAgICAgICAgZWxpZiBwYXJhbWV0ZXIuaXNf
b3B0aW9uYWwgYW5kIF90eXBlLnF1YWxpZmllZF9uYW1lKCkgbm90IGluIFsnYm9vbGVhbicsICdz
dHJpbmcnLCAnaW50ZWdlciddOgorICAgICAgICAgICAgICAgIHJldHVybiAiSW5zcGVjdG9yOjpU
eXBlQnVpbGRlcjo6T3B0T3V0cHV0PCVzPiIgJSBjcHBfbmFtZQorICAgICAgICAgICAgZWxzZToK
KyAgICAgICAgICAgICAgICByZXR1cm4gY3BwX25hbWUKKworICAgIEBzdGF0aWNtZXRob2QKKyAg
ICBkZWYgdHlwZV9zdHJpbmdfZm9yX3N0YWNrX291dF9wYXJhbWV0ZXIocGFyYW1ldGVyKToKKyAg
ICAgICAgX3R5cGUgPSBwYXJhbWV0ZXIudHlwZQorICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBl
LCAoQXJyYXlUeXBlLCBPYmplY3RUeXBlKSk6CisgICAgICAgICAgICByZXR1cm4gJ1JlZlB0cjwl
cz4nICUgR2VuZXJhdG9yLnR5cGVfYnVpbGRlcl9zdHJpbmdfZm9yX3R5cGUoX3R5cGUpCisgICAg
ICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEFsaWFzZWRUeXBlKToKKyAgICAgICAgICAgIGJ1aWxk
ZXJfdHlwZSA9IEdlbmVyYXRvci50eXBlX2J1aWxkZXJfc3RyaW5nX2Zvcl90eXBlKF90eXBlKQor
ICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAgIHJl
dHVybiAiSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6T3B0T3V0cHV0PCVzPiIgJSBidWlsZGVyX3R5
cGUKKyAgICAgICAgICAgIHJldHVybiAnJXMnICUgYnVpbGRlcl90eXBlCisgICAgICAgIGlmIGlz
aW5zdGFuY2UoX3R5cGUsIFByaW1pdGl2ZVR5cGUpOgorICAgICAgICAgICAgY3BwX25hbWUgPSBH
ZW5lcmF0b3IuY3BwX25hbWVfZm9yX3ByaW1pdGl2ZV90eXBlKF90eXBlKQorICAgICAgICAgICAg
aWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAgIHJldHVybiAiSW5zcGVj
dG9yOjpUeXBlQnVpbGRlcjo6T3B0T3V0cHV0PCVzPiIgJSBjcHBfbmFtZQorICAgICAgICAgICAg
ZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gY3BwX25hbWUKKyAgICAgICAgaWYgaXNpbnN0
YW5jZShfdHlwZSwgRW51bVR5cGUpOgorICAgICAgICAgICAgaWYgX3R5cGUuaXNfYW5vbnltb3Vz
OgorICAgICAgICAgICAgICAgIHJldHVybiAnSW5zcGVjdG9yJXNCYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXI6OiVzJyAlIChfdHlwZS50eXBlX2RvbWFpbigpLmRvbWFpbl9uYW1lLCB1Y2ZpcnN0KHBh
cmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAg
ICAgIHJldHVybiAnSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6JXM6OiVzJyAlIChfdHlwZS50eXBl
X2RvbWFpbigpLmRvbWFpbl9uYW1lLCBfdHlwZS5yYXdfbmFtZSgpKQorCisgICAgQHN0YXRpY21l
dGhvZAorICAgIGRlZiBhc3NlcnRpb25fbWV0aG9kX2Zvcl90eXBlX21lbWJlcih0eXBlX21lbWJl
ciwgb2JqZWN0X2RlY2xhcmF0aW9uKToKKworICAgICAgICBkZWYgYXNzZXJ0aW9uX21ldGhvZF9m
b3JfdHlwZShfdHlwZSk6CisgICAgICAgICAgICByZXR1cm4gJ0JpbmRpbmdUcmFpdHM8JXM+Ojph
c3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZScgJSBHZW5lcmF0b3IudHlwZV9idWlsZGVyX3N0cmlu
Z19mb3JfdHlwZShfdHlwZSkKKworICAgICAgICBpZiBpc2luc3RhbmNlKHR5cGVfbWVtYmVyLnR5
cGUsIEFsaWFzZWRUeXBlKToKKyAgICAgICAgICAgIHJldHVybiBhc3NlcnRpb25fbWV0aG9kX2Zv
cl90eXBlKHR5cGVfbWVtYmVyLnR5cGUuYWxpYXNlZF90eXBlKQorICAgICAgICBpZiBpc2luc3Rh
bmNlKHR5cGVfbWVtYmVyLnR5cGUsIEVudW1UeXBlKSBhbmQgdHlwZV9tZW1iZXIudHlwZS5pc19h
bm9ueW1vdXM6CisgICAgICAgICAgICByZXR1cm4gJ0JpbmRpbmdUcmFpdHM8JXM+Ojphc3NlcnRW
YWx1ZUhhc0V4cGVjdGVkVHlwZScgJSBHZW5lcmF0b3IudHlwZV9idWlsZGVyX3N0cmluZ19mb3Jf
dHlwZV9tZW1iZXIodHlwZV9tZW1iZXIsIG9iamVjdF9kZWNsYXJhdGlvbikKKworICAgICAgICBy
ZXR1cm4gYXNzZXJ0aW9uX21ldGhvZF9mb3JfdHlwZSh0eXBlX21lbWJlci50eXBlKQorCisgICAg
QHN0YXRpY21ldGhvZAorICAgIGRlZiBjcHBfbmFtZV9mb3JfcHJpbWl0aXZlX3R5cGUoX3R5cGUp
OgorICAgICAgICByZXR1cm4gX1BSSU1JVElWRV9UT19DUFBfTkFNRV9NQVAuZ2V0KF90eXBlLnJh
d19uYW1lKCkpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGpzX25hbWVfZm9yX3BhcmFt
ZXRlcl90eXBlKF90eXBlKToKKyAgICAgICAgX3R5cGUgPSBfdHlwZQorICAgICAgICBpZiBpc2lu
c3RhbmNlKF90eXBlLCBBbGlhc2VkVHlwZSk6CisgICAgICAgICAgICBfdHlwZSA9IF90eXBlLmFs
aWFzZWRfdHlwZSAgIyBGYWxsIHRocm91Z2guCisgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUs
IEVudW1UeXBlKToKKyAgICAgICAgICAgIF90eXBlID0gX3R5cGUucHJpbWl0aXZlX3R5cGUgICMg
RmFsbCB0aHJvdWdoLgorCisgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIChBcnJheVR5cGUs
IE9iamVjdFR5cGUpKToKKyAgICAgICAgICAgIHJldHVybiAnb2JqZWN0JworICAgICAgICBpZiBp
c2luc3RhbmNlKF90eXBlLCBQcmltaXRpdmVUeXBlKToKKyAgICAgICAgICAgIGlmIF90eXBlLnF1
YWxpZmllZF9uYW1lKCkgaW4gWydvYmplY3QnLCAnYW55J106CisgICAgICAgICAgICAgICAgcmV0
dXJuICdvYmplY3QnCisgICAgICAgICAgICBlbGlmIF90eXBlLnF1YWxpZmllZF9uYW1lKCkgaW4g
WydpbnRlZ2VyJywgJ251bWJlciddOgorICAgICAgICAgICAgICAgIHJldHVybiAnbnVtYmVyJwor
ICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gX3R5cGUucXVhbGlmaWVk
X25hbWUoKQorCisgICAgIyBEZWNpZGUgd2hldGhlciBjZXJ0YWluIGhlbHBlcnMgYXJlIG5lY2Vz
c2FyeSBpbiBhIHNpdHVhdGlvbi4KKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIHNob3VsZF91
c2Vfd3JhcHBlcl9mb3JfcmV0dXJuX3R5cGUoX3R5cGUpOgorICAgICAgICByZXR1cm4gbm90IGlz
aW5zdGFuY2UoX3R5cGUsIChBcnJheVR5cGUsIE9iamVjdFR5cGUpKQorCisgICAgQHN0YXRpY21l
dGhvZAorICAgIGRlZiBzaG91bGRfcGFzc19ieV9jb3B5X2Zvcl9yZXR1cm5fdHlwZShfdHlwZSk6
CisgICAgICAgIHJldHVybiBpc2luc3RhbmNlKF90eXBlLCAoQXJyYXlUeXBlLCBPYmplY3RUeXBl
KSkgb3IgKGlzaW5zdGFuY2UoX3R5cGUsIChQcmltaXRpdmVUeXBlKSkgYW5kIF90eXBlLnF1YWxp
ZmllZF9uYW1lKCkgPT0gIm9iamVjdCIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0b3JfdGVtcGxhdGVzLnB5IGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdG9yX3Rl
bXBsYXRlcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wYWE4NTNlY2E0YjQzMDlkMzM2YWZmNjY3NWU4MDMxODg1
NzJmYmZhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdG9yX3RlbXBsYXRlcy5weQpAQCAtMCwwICsxLDI2NiBA
QAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoYykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisjIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyMgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorCisjIEdlbmVyYXRvciB0ZW1wbGF0ZXMsIHdoaWNoIGNhbiBi
ZSBmaWxsZWQgd2l0aCBzdHJpbmcuVGVtcGxhdGUuCisjIEZvbGxvd2luZyBhcmUgY2xhc3NlcyB0
aGF0IGZpbGwgdGhlIHRlbXBsYXRlcyBmcm9tIHRoZSB0eXBlY2hlY2tlZCBtb2RlbC4KKworCitj
bGFzcyBHZW5lcmF0b3JUZW1wbGF0ZXM6CisgICAgQ29weXJpZ2h0QmxvY2sgPSAoCisgICAgIiIi
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSAke2lucHV0RmlsZW5hbWV9CisvLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29k
ZWdlbi9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkiIiIpCisKKyAgICBD
cHBIZWFkZXJQcmVsdWRlID0gKAorICAgICIiIiNpZm5kZWYgJHtoZWFkZXJHdWFyZFN0cmluZ30K
KyNkZWZpbmUgJHtoZWFkZXJHdWFyZFN0cmluZ30KKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisK
KyR7aW5jbHVkZXN9CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCiske3R5cGVkZWZzfSIiIikK
KworICAgIENwcEhlYWRlclBvc3RsdWRlID0gKAorICAgICIiIn0gLy8gbmFtZXNwYWNlIEluc3Bl
Y3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKworI2VuZGlmIC8vICFkZWZpbmVk
KCR7aGVhZGVyR3VhcmRTdHJpbmd9KSIiIikKKworICAgIENwcEltcGxlbWVudGF0aW9uUHJlbHVk
ZSA9ICgKKyAgICAiIiIjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAke3ByaW1hcnlJbmNs
dWRlfQorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworJHtzZWNvbmRhcnlJbmNsdWRlc30KKwor
bmFtZXNwYWNlIEluc3BlY3RvciB7IiIiKQorCisgICAgQ3BwSW1wbGVtZW50YXRpb25Qb3N0bHVk
ZSA9ICgKKyAgICAiIiJ9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJM
RShJTlNQRUNUT1IpCisiIiIpCisKKyAgICBCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckRvbWFpbkhh
bmRsZXJEZWNsYXJhdGlvbiA9ICgKKyAgICAiIiIke2NsYXNzQW5kRXhwb3J0TWFjcm99IEluc3Bl
Y3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgeworcHVibGljOgorJHtj
b21tYW5kRGVjbGFyYXRpb25zfQorcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgfkluc3BlY3RvciR7
ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKTsKK307IiIiKQorCisgICAgQmFj
a2VuZERpc3BhdGNoZXJIZWFkZXJEb21haW5EaXNwYXRjaGVyRGVjbGFyYXRpb24gPSAoCisgICAg
IiIiJHtjbGFzc0FuZEV4cG9ydE1hY3JvfSBJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERp
c3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JTdXBwbGVtZW50YWxC
YWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVj
dG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUoSW5zcGVjdG9yOjpJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciosIEluc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlz
cGF0Y2hlckhhbmRsZXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2gobG9uZyBjYWxsSWQs
IGNvbnN0IFN0cmluZyYgbWV0aG9kLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2Jq
ZWN0PiBtZXNzYWdlKSBvdmVycmlkZTsKKyR7Y29tbWFuZERlY2xhcmF0aW9uc30KK3ByaXZhdGU6
CisgICAgSW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyKEluc3BlY3Rvcjo6
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqLCBJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyKik7CisgICAgSW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmRE
aXNwYXRjaGVySGFuZGxlciogbV9hZ2VudDsKK307IiIiKQorCisgICAgQmFja2VuZERpc3BhdGNo
ZXJIZWFkZXJBc3luY0NvbW1hbmREZWNsYXJhdGlvbiA9ICgKKyAgICAiIiIgICAgY2xhc3MgJHtj
YWxsYmFja05hbWV9IDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXI6OkNhbGxiYWNrQmFzZSB7CisgICAgcHVibGljOgorICAgICAgICAke2NhbGxiYWNrTmFtZX0o
UGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiwgaW50IGlk
KTsKKyAgICAgICAgdm9pZCBzZW5kU3VjY2Vzcygke291dFBhcmFtZXRlcnN9KTsKKyAgICB9Owor
ICAgIHZpcnR1YWwgdm9pZCAke2NvbW1hbmROYW1lfSgke2luUGFyYW1ldGVyc30pID0gMDsiIiIp
CisKKyAgICBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uU21hbGxTd2l0Y2ggPSAoCisg
ICAgIiIidm9pZCBJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXI6OmRpc3Bh
dGNoKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUGFzc1JlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IG1lc3NhZ2UpCit7CisgICAgUmVmPEluc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNr
ZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7CisKKyR7ZGlzcGF0Y2hDYXNlc30KKyAgICBl
bHNlCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoJmNh
bGxJZCwgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCBTdHJpbmco
IiciKSArICIke2RvbWFpbk5hbWV9IiArICcuJyArIG1ldGhvZCArICInIHdhcyBub3QgZm91bmQi
KTsKK30iIiIpCisKKyAgICBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uTGFyZ2VTd2l0
Y2ggPSAoCisiIiJ2b2lkIEluc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcjo6
ZGlzcGF0Y2gobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBQYXNzUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gbWVzc2FnZSkKK3sKKyAgICBSZWY8SW5zcGVjdG9yJHtkb21haW5OYW1l
fUJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKKworICAgIHR5cGVkZWYgdm9pZCAo
SW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyOjoqQ2FsbEhhbmRsZXIpKGxv
bmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7Cisg
ICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgQ2FsbEhhbmRsZXI+IERpc3BhdGNoTWFwOworICAg
IERFUFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NBTChEaXNwYXRjaE1hcCwgZGlzcGF0Y2hNYXAs
ICgpKTsKKyAgICBpZiAoZGlzcGF0Y2hNYXAuaXNFbXB0eSgpKSB7CisgICAgICAgIHN0YXRpYyBj
b25zdCBzdHJ1Y3QgTWV0aG9kVGFibGUgeworICAgICAgICAgICAgY29uc3QgY2hhciogbmFtZTsK
KyAgICAgICAgICAgIENhbGxIYW5kbGVyIGhhbmRsZXI7CisgICAgICAgIH0gY29tbWFuZHNbXSA9
IHsKKyR7ZGlzcGF0Y2hDYXNlc30KKyAgICAgICAgfTsKKyAgICAgICAgc2l6ZV90IGxlbmd0aCA9
IFdURl9BUlJBWV9MRU5HVEgoY29tbWFuZHMpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGxlbmd0aDsgKytpKQorICAgICAgICAgICAgZGlzcGF0Y2hNYXAuYWRkKGNvbW1hbmRzW2ld
Lm5hbWUsIGNvbW1hbmRzW2ldLmhhbmRsZXIpOworICAgIH0KKworICAgIEhhc2hNYXA8U3RyaW5n
LCBDYWxsSGFuZGxlcj46Oml0ZXJhdG9yIGl0ID0gZGlzcGF0Y2hNYXAuZmluZChtZXRob2QpOwor
ICAgIGlmIChpdCA9PSBkaXNwYXRjaE1hcC5lbmQoKSkgeworICAgICAgICBtX2JhY2tlbmREaXNw
YXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIEluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgU3RyaW5nKCInIikgKyAiJHtkb21haW5OYW1lfSIgKyAn
LicgKyBtZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICAoKCp0aGlzKS4qaXQtPnZhbHVlKShjYWxsSWQsICptZXNzYWdlLmdldCgpKTsKK30i
IiIpCisKKyAgICBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uRG9tYWluQ29uc3RydWN0
b3IgPSAoCisgICAgIiIiUGFzc1JlZlB0cjxJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERp
c3BhdGNoZXI+IEluc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRl
KEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlciwgSW5zcGVjdG9y
JHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCit7CisgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXIo
YmFja2VuZERpc3BhdGNoZXIsIGFnZW50KSk7Cit9CisKK0luc3BlY3RvciR7ZG9tYWluTmFtZX1C
YWNrZW5kRGlzcGF0Y2hlcjo6SW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVy
KEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlciwgSW5zcGVjdG9y
JHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCisgICAgOiBJbnNw
ZWN0b3JTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlcikKKyAg
ICAsIG1fYWdlbnQoYWdlbnQpCit7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJE
aXNwYXRjaGVyRm9yRG9tYWluKEFTQ0lJTGl0ZXJhbCgiJHtkb21haW5OYW1lfSIpLCB0aGlzKTsK
K30iIiIpCisKKyAgICBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uUHJlcGFyZUNvbW1h
bmRBcmd1bWVudHMgPSAoCisiIiIgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVy
cm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBwYXJhbXNDb250YWluZXIgPSBtZXNzYWdlLmdldE9iamVjdChBU0NJSUxpdGVyYWwoInBh
cmFtcyIpKTsKKyAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFt
c0NvbnRhaW5lci5nZXQoKTsKKyAgICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIg
PSBwcm90b2NvbEVycm9ycy5nZXQoKTsKKyR7aW5QYXJhbWV0ZXJEZWNsYXJhdGlvbnN9CisgICAg
aWYgKHByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgeworICAgICAgICBTdHJpbmcgZXJyb3JNZXNz
YWdlID0gU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCBcJyVzXCcgY2Fu
J3QgYmUgcHJvY2Vzc2VkIiwgIiR7ZG9tYWluTmFtZX0uJHtjb21tYW5kTmFtZX0iKTsKKyAgICAg
ICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElkLCBJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFtcywgZXJyb3JNZXNzYWdlLCBwcm90
b2NvbEVycm9ycy5yZWxlYXNlKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorIiIiKQorCisg
ICAgQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkFzeW5jQ29tbWFuZCA9ICgKKyIiIklu
c3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OiR7Y2FsbGJhY2tO
YW1lfTo6JHtjYWxsYmFja05hbWV9KFBhc3NSZWZQdHI8SW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXI+IGJhY2tlbmREaXNwYXRjaGVyLCBpbnQgaWQpIDogSW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlKGJhY2tlbmREaXNwYXRjaGVyLCBpZCkgeyB9CisK
K3ZvaWQgSW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6JHtj
YWxsYmFja05hbWV9OjpzZW5kU3VjY2Vzcygke2Zvcm1hbFBhcmFtZXRlcnN9KQoreworICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGpzb25NZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsKKyR7b3V0UGFyYW1ldGVyQXNzaWdubWVudHN9CisgICAgc2VuZElmQWN0aXZlKGpzb25N
ZXNzYWdlLCBFcnJvclN0cmluZygpKTsKK30iIiIpCisKKyAgICBGcm9udGVuZERpc3BhdGNoZXJE
b21haW5EaXNwYXRjaGVyRGVjbGFyYXRpb24gPSAoCisiIiIke2NsYXNzQW5kRXhwb3J0TWFjcm99
IEluc3BlY3RvciR7ZG9tYWluTmFtZX1Gcm9udGVuZERpc3BhdGNoZXIgeworcHVibGljOgorICAg
IEluc3BlY3RvciR7ZG9tYWluTmFtZX1Gcm9udGVuZERpc3BhdGNoZXIoSW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIDogbV9pbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IH0KKyR7ZXZlbnREZWNsYXJhdGlv
bnN9Citwcml2YXRlOgorICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogbV9pbnNwZWN0b3JG
cm9udGVuZENoYW5uZWw7Cit9OyIiIikKKworICAgIFR5cGVCdWlsZGVyRGVjbGFyYXRpb25QcmVs
dWRlID0gKAorIiIiICAgIHRlbXBsYXRlPGludCBTVEFURT4KKyAgICBjbGFzcyBCdWlsZGVyIHsK
KyAgICBwcml2YXRlOgorICAgICAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+
IG1fcmVzdWx0OworCisgICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwg
U1RFUD4mIGNhc3RTdGF0ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAqcmVpbnRl
cnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKKyAgICAgICAgfQorCisg
ICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjwvKiR7b2JqZWN0VHlwZX0qL0luc3BlY3Rvcjo6SW5z
cGVjdG9yT2JqZWN0PiBwdHIpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUp
OworICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CisgICAgICAgIH0KKyAgICAgICAgZnJpZW5k
IGNsYXNzICR7b2JqZWN0VHlwZX07CisgICAgcHVibGljOiIiIikKKworICAgIFR5cGVCdWlsZGVy
RGVjbGFyYXRpb25Qb3N0bHVkZSA9ICgKKyIiIgorICAgICAgICBvcGVyYXRvciBSZWZQdHI8JHtv
YmplY3RUeXBlfT4mICgpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNU
QVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CisgICAgICAgICAgICBD
T01QSUxFX0FTU0VSVChzaXplb2YoJHtvYmplY3RUeXBlfSkgPT0gc2l6ZW9mKEluc3BlY3Rvcjo6
SW5zcGVjdG9yT2JqZWN0KSwgY2Fubm90X2Nhc3QpOworICAgICAgICAgICAgcmV0dXJuICpyZWlu
dGVycHJldF9jYXN0PFJlZlB0cjwke29iamVjdFR5cGV9Pio+KCZtX3Jlc3VsdCk7CisgICAgICAg
IH0KKworICAgICAgICBQYXNzUmVmUHRyPCR7b2JqZWN0VHlwZX0+IHJlbGVhc2UoKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gUmVmUHRyPCR7b2JqZWN0VHlwZX0+KCp0aGlzKS5yZWxl
YXNlKCk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgLyoKKyAgICAgKiBTeW50aGV0aWMgY29u
c3RydWN0b3I6Ciske2NvbnN0cnVjdG9yRXhhbXBsZX0KKyAgICAgKi8KKyAgICBzdGF0aWMgQnVp
bGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBCdWlsZGVy
PE5vRmllbGRzU2V0PihJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkpOworICAg
IH0KKyAgICB0eXBlZGVmIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlN0cnVjdEl0ZW1UcmFpdHMg
SXRlbVRyYWl0czsiIiIpCisKKyAgICBUeXBlQnVpbGRlck9iamVjdFJ1bnRpbWVDYXN0ID0gKAor
IiIiUGFzc1JlZlB0cjwke29iamVjdFR5cGV9PiBCaW5kaW5nVHJhaXRzPCR7b2JqZWN0VHlwZX0+
OjpydW50aW1lQ2FzdChQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+IHZhbHVl
KQoreworICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gb2JqZWN0OworICAg
IGJvb2wgY2FzdFJlcyA9IHZhbHVlLT5hc09iamVjdCgmb2JqZWN0KTsKKyAgICBBU1NFUlRfVU5V
U0VEKGNhc3RSZXMsIGNhc3RSZXMpOworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICBCaW5kaW5n
VHJhaXRzPCR7b2JqZWN0VHlwZX0+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShvYmplY3Qu
Z2V0KCkpOworI2VuZGlmICAvLyAhQVNTRVJUX0RJU0FCTEVECisgICAgQ09NUElMRV9BU1NFUlQo
c2l6ZW9mKCR7b2JqZWN0VHlwZX0pID09IHNpemVvZihJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVj
dEJhc2UpLCB0eXBlX2Nhc3RfcHJvYmxlbSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PCR7b2Jq
ZWN0VHlwZX0qPihzdGF0aWNfY2FzdDxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdEJhc2UqPihv
YmplY3QuZ2V0KCkpKTsKK30KKyIiIgorKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vbW9kZWxzLnB5IGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vbW9kZWxzLnB5Cm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRh
YzAyZmJjYmVhMTU1YjdiY2UzZmEyZjFhNDY2MTAwOTZiMmIxZTMKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9tb2RlbHMu
cHkKQEAgLTAsMCArMSw1ODAgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmln
aHQgKGMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQg
KGMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
IworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
IworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisjIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0IGxvZ2dpbmcK
KworbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2JhbCcpCisKKworZGVmIHVjZmlyc3Qoc3Ry
KToKKyAgICByZXR1cm4gc3RyWzoxXS51cHBlcigpICsgc3RyWzE6XQorCisKK19GUkFNRVdPUktf
Q09ORklHX01BUCA9IHsKKyAgICAiR2xvYmFsIjogeworICAgICAgICAicHJlZml4IjogIiIsCisg
ICAgfSwKKworICAgICJXVEYiOiB7CisgICAgICAgICJwcmVmaXgiOiAiV1RGIiwKKyAgICB9LAor
ICAgICJKYXZhU2NyaXB0Q29yZSI6IHsKKyAgICAgICAgInByZWZpeCI6ICJKUyIsCisgICAgICAg
ICJleHBvcnRfbWFjcm8iOiAiSlNfRVhQT1JUX1BSSVZBVEUiCisgICAgfSwKKyAgICAiV2ViQ29y
ZSI6IHsKKyAgICAgICAgInByZWZpeCI6ICJXZWIiLAorICAgIH0sCisgICAgIyBVc2VkIGZvciBj
b2RlIGdlbmVyYXRvciB0ZXN0cy4KKyAgICAiVGVzdCI6IHsKKyAgICAgICAgInByZWZpeCI6ICJU
ZXN0IiwKKyAgICB9Cit9CisKKworIyBGSVhNRTogVGhlc2Ugc2hvdWxkIGJlIGNvbnZlcnRlZCBp
bnRvIEpTT04gcHJvcGVydGllcywgb3IgcmVuYW1lZC4KK19UWVBFU19ORUVESU5HX1JFTkFNRV9X
T1JLQVJPVU5EUyA9IHsKKyAgICAnUkdCQSc6ICdSZ2JhJywgIyBSR0JBIGlzIHJlcG9ydGVkIHRv
IGJlIGNvbmZsaWN0aW5nIHdpdGggYSBkZWZpbmUgbmFtZSBpbiBXaW5kb3dzIENFLgorICAgICMg
Rm9yIHRlc3Rpbmcgb25seS4KKyAgICAnVW5wbGVhc2FudE5hbWUnOiAnSGFwcHlOYW1lJworfQor
CisKK2NsYXNzIFBhcnNlRXhjZXB0aW9uKEV4Y2VwdGlvbik6CisgICAgcGFzcworCisKK2NsYXNz
IFR5cGVjaGVja0V4Y2VwdGlvbihFeGNlcHRpb24pOgorICAgIHBhc3MKKworCitjbGFzcyBGcmFt
ZXdvcms6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUpOgorICAgICAgICBzZWxmLl9zZXR0
aW5ncyA9IF9GUkFNRVdPUktfQ09ORklHX01BUFtuYW1lXQorICAgICAgICBzZWxmLm5hbWUgPSBu
YW1lCisKKyAgICBkZWYgc2V0dGluZyhzZWxmLCBrZXksIGRlZmF1bHQ9JycpOgorICAgICAgICBy
ZXR1cm4gc2VsZi5fc2V0dGluZ3MuZ2V0KGtleSwgZGVmYXVsdCkKKworICAgIEBzdGF0aWNtZXRo
b2QKKyAgICBkZWYgZnJvbVN0cmluZyhmcmFtZXdvcmtTdHJpbmcpOgorICAgICAgICBpZiBmcmFt
ZXdvcmtTdHJpbmcgPT0gIkdsb2JhbCI6CisgICAgICAgICAgICByZXR1cm4gRnJhbWV3b3Jrcy5H
bG9iYWwKKworICAgICAgICBpZiBmcmFtZXdvcmtTdHJpbmcgPT0gIldURiI6CisgICAgICAgICAg
ICByZXR1cm4gRnJhbWV3b3Jrcy5XVEYKKworICAgICAgICBpZiBmcmFtZXdvcmtTdHJpbmcgPT0g
IkphdmFTY3JpcHRDb3JlIjoKKyAgICAgICAgICAgIHJldHVybiBGcmFtZXdvcmtzLkphdmFTY3Jp
cHRDb3JlCisKKyAgICAgICAgaWYgZnJhbWV3b3JrU3RyaW5nID09ICJXZWJDb3JlIjoKKyAgICAg
ICAgICAgIHJldHVybiBGcmFtZXdvcmtzLldlYkNvcmUKKworICAgICAgICBpZiBmcmFtZXdvcmtT
dHJpbmcgPT0gIlRlc3QiOgorICAgICAgICAgICAgcmV0dXJuIEZyYW1ld29ya3MuVGVzdAorCisg
ICAgICAgIHJhaXNlIFBhcnNlRXhjZXB0aW9uKCJVbmtub3duIGZyYW1ld29yazogJXMiICUgZnJh
bWV3b3JrU3RyaW5nKQorCisKK2NsYXNzIEZyYW1ld29ya3M6CisgICAgR2xvYmFsID0gRnJhbWV3
b3JrKCJHbG9iYWwiKQorICAgIFdURiA9IEZyYW1ld29yaygiV1RGIikKKyAgICBKYXZhU2NyaXB0
Q29yZSA9IEZyYW1ld29yaygiSmF2YVNjcmlwdENvcmUiKQorICAgIFdlYkNvcmUgPSBGcmFtZXdv
cmsoIldlYkNvcmUiKQorICAgIFRlc3QgPSBGcmFtZXdvcmsoIlRlc3QiKQorCisKK2NsYXNzIFR5
cGVSZWZlcmVuY2U6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHR5cGVfa2luZCwgcmVmZXJlbmNl
ZF90eXBlX25hbWUsIGVudW1fdmFsdWVzLCBhcnJheV9pdGVtcyk6CisgICAgICAgIHNlbGYudHlw
ZV9raW5kID0gdHlwZV9raW5kCisgICAgICAgIHNlbGYucmVmZXJlbmNlZF90eXBlX25hbWUgPSBf
VFlQRVNfTkVFRElOR19SRU5BTUVfV09SS0FST1VORFMuZ2V0KHJlZmVyZW5jZWRfdHlwZV9uYW1l
LCByZWZlcmVuY2VkX3R5cGVfbmFtZSkKKyAgICAgICAgc2VsZi5lbnVtX3ZhbHVlcyA9IGVudW1f
dmFsdWVzCisgICAgICAgIGlmIGFycmF5X2l0ZW1zIGlzIE5vbmU6CisgICAgICAgICAgICBzZWxm
LmFycmF5X3R5cGVfcmVmID0gTm9uZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5h
cnJheV90eXBlX3JlZiA9IFR5cGVSZWZlcmVuY2UoYXJyYXlfaXRlbXMuZ2V0KCd0eXBlJyksIGFy
cmF5X2l0ZW1zLmdldCgnJHJlZicpLCBhcnJheV9pdGVtcy5nZXQoJ2VudW0nKSwgYXJyYXlfaXRl
bXMuZ2V0KCdpdGVtcycpKQorCisgICAgICAgIGlmIHR5cGVfa2luZCBpcyBub3QgTm9uZSBhbmQg
cmVmZXJlbmNlZF90eXBlX25hbWUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICByYWlzZSBQYXJz
ZUV4Y2VwdGlvbigiVHlwZSByZWZlcmVuY2UgY2Fubm90IGhhdmUgYm90aCAndHlwZScgYW5kICck
cmVmJyBrZXlzLiIpCisKKyAgICAgICAgaWYgdHlwZV9raW5kID09ICJhcnJheSIgYW5kIGFycmF5
X2l0ZW1zIGlzIE5vbmU6CisgICAgICAgICAgICByYWlzZSBQYXJzZUV4Y2VwdGlvbigiVHlwZSBy
ZWZlcmVuY2Ugd2l0aCB0eXBlICdhcnJheScgbXVzdCBoYXZlIGtleSAnaXRlbXMnIHRvIGRlZmlu
ZSBhcnJheSBlbGVtZW50IHR5cGUuIikKKworICAgICAgICBpZiBlbnVtX3ZhbHVlcyBpcyBub3Qg
Tm9uZSBhbmQgbGVuKGVudW1fdmFsdWVzKSA9PSAwOgorICAgICAgICAgICAgcmFpc2UgUGFyc2VF
eGNlcHRpb24oIlR5cGUgcmVmZXJlbmNlIHdpdGggZW51bSB2YWx1ZXMgbXVzdCBoYXZlIGF0IGxl
YXN0IG9uZSBlbnVtIHZhbHVlLiIpCisKKyAgICBkZWYgcmVmZXJlbmNlZF9uYW1lKHNlbGYpOgor
ICAgICAgICBpZiBzZWxmLnJlZmVyZW5jZWRfdHlwZV9uYW1lIGlzIG5vdCBOb25lOgorICAgICAg
ICAgICAgcmV0dXJuIHNlbGYucmVmZXJlbmNlZF90eXBlX25hbWUKKyAgICAgICAgZWxzZToKKyAg
ICAgICAgICAgIHJldHVybiBzZWxmLnR5cGVfa2luZCAgIyBpbnRlZ2VyLCBzdHJpbmcsIG51bWJl
ciwgYm9vbGVhbiwgZW51bSwgb2JqZWN0LCBhcnJheQorCisKK2NsYXNzIFR5cGU6CisgICAgZGVm
IF9faW5pdF9fKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90
aGVyKToKKyAgICAgICAgcmV0dXJuIHNlbGYucXVhbGlmaWVkX25hbWUoKSA9PSBvdGhlci5xdWFs
aWZpZWRfbmFtZSgpCisKKyAgICBkZWYgX19oYXNoX18oc2VsZik6CisgICAgICAgIHJldHVybiBz
ZWxmLnF1YWxpZmllZF9uYW1lKCkuX19oYXNoX18oKQorCisgICAgZGVmIHJhd19uYW1lKHNlbGYp
OgorICAgICAgICByZXR1cm4gX1RZUEVTX05FRURJTkdfUkVOQU1FX1dPUktBUk9VTkRTLmdldChz
ZWxmLl9uYW1lLCBzZWxmLl9uYW1lKQorCisgICAgIyBUaGVzZSBtZXRob2RzIHNob3VsZCBiZSBv
dmVycmlkZGVuIGJ5IHN1YmNsYXNzZXMuCisgICAgZGVmIGlzX2VudW0oc2VsZik6CisgICAgICAg
IHJldHVybiBGYWxzZQorCisgICAgZGVmIHR5cGVfZG9tYWluKHNlbGYpOgorICAgICAgICBwYXNz
CisKKyAgICBkZWYgcXVhbGlmaWVkX25hbWUoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgICMg
VGhpcyBpcyB1c2VkIHRvIHJlc29sdmUgbmVzdGVkIHR5cGVzIGFmdGVyIGluc3RhbmNlcyBhcmUg
Y3JlYXRlZC4KKyAgICBkZWYgcmVzb2x2ZV90eXBlX3JlZmVyZW5jZXMoc2VsZiwgcHJvdG9jb2wp
OgorICAgICAgICBwYXNzCisKKworY2xhc3MgUHJpbWl0aXZlVHlwZShUeXBlKToKKyAgICBkZWYg
X19pbml0X18oc2VsZiwgbmFtZSk6CisgICAgICAgIHNlbGYuX25hbWUgPSBuYW1lCisKKyAgICBk
ZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAnUHJpbWl0aXZlVHlwZVslc10nICUg
c2VsZi5xdWFsaWZpZWRfbmFtZSgpCisKKyAgICBkZWYgdHlwZV9kb21haW4oc2VsZik6CisgICAg
ICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgcXVhbGlmaWVkX25hbWUoc2VsZik6CisgICAgICAg
IHJldHVybiBzZWxmLnJhd19uYW1lKCkKKworCitjbGFzcyBBbGlhc2VkVHlwZShUeXBlKToKKyAg
ICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwgZG9tYWluLCBhbGlhc2VkX3R5cGVfcmVmKToKKyAg
ICAgICAgc2VsZi5fbmFtZSA9IG5hbWUKKyAgICAgICAgc2VsZi5fZG9tYWluID0gZG9tYWluCisg
ICAgICAgIHNlbGYuX2FsaWFzZWRfdHlwZV9yZWYgPSBhbGlhc2VkX3R5cGVfcmVmCisgICAgICAg
IHNlbGYuYWxpYXNlZF90eXBlID0gTm9uZQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAg
ICAgICBpZiBzZWxmLmFsaWFzZWRfdHlwZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJldHVy
biAnQWxpYXNlZFR5cGVbJXMgLT4gJXJdJyAlIChzZWxmLnF1YWxpZmllZF9uYW1lKCksIHNlbGYu
YWxpYXNlZF90eXBlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuICdBbGlhc2Vk
VHlwZVslcyAtPiAodW5yZXNvbHZlZCldJyAlIHNlbGYucXVhbGlmaWVkX25hbWUoKQorCisgICAg
ZGVmIGlzX2VudW0oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmFsaWFzZWRfdHlwZS5pc19l
bnVtKCkKKworICAgIGRlZiB0eXBlX2RvbWFpbihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYu
X2RvbWFpbgorCisgICAgZGVmIHF1YWxpZmllZF9uYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4g
ICIuIi5qb2luKFtzZWxmLnR5cGVfZG9tYWluKCkuZG9tYWluX25hbWUsIHNlbGYucmF3X25hbWUo
KV0pCisKKyAgICBkZWYgcmVzb2x2ZV90eXBlX3JlZmVyZW5jZXMoc2VsZiwgcHJvdG9jb2wpOgor
ICAgICAgICBpZiBzZWxmLmFsaWFzZWRfdHlwZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJl
dHVybgorCisgICAgICAgIHNlbGYuYWxpYXNlZF90eXBlID0gcHJvdG9jb2wubG9va3VwX3R5cGVf
cmVmZXJlbmNlKHNlbGYuX2FsaWFzZWRfdHlwZV9yZWYsIHNlbGYudHlwZV9kb21haW4oKSkKKyAg
ICAgICAgbG9nLmRlYnVnKCI8IFJlc29sdmVkIHR5cGUgcmVmZXJlbmNlIGZvciBhbGlhc2VkIHR5
cGUgaW4gJXM6ICVzIiAlIChzZWxmLnF1YWxpZmllZF9uYW1lKCksIHNlbGYuYWxpYXNlZF90eXBl
LnF1YWxpZmllZF9uYW1lKCkpKQorCisKK2NsYXNzIEVudW1UeXBlKFR5cGUpOgorICAgIGRlZiBf
X2luaXRfXyhzZWxmLCBuYW1lLCBkb21haW4sIHZhbHVlcywgcHJpbWl0aXZlX3R5cGVfcmVmLCBp
c19hbm9ueW1vdXM9RmFsc2UpOgorICAgICAgICBzZWxmLl9uYW1lID0gbmFtZQorICAgICAgICBz
ZWxmLl9kb21haW4gPSBkb21haW4KKyAgICAgICAgc2VsZi5fdmFsdWVzID0gdmFsdWVzCisgICAg
ICAgIHNlbGYuX3ByaW1pdGl2ZV90eXBlX3JlZiA9IHByaW1pdGl2ZV90eXBlX3JlZgorICAgICAg
ICBzZWxmLnByaW1pdGl2ZV90eXBlID0gTm9uZQorICAgICAgICBzZWxmLmlzX2Fub255bW91cyA9
IGlzX2Fub255bW91cworCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4g
J0VudW1UeXBlW3ZhbHVlX3R5cGU9JXM7IHZhbHVlcz0lc10nICUgKHNlbGYucXVhbGlmaWVkX25h
bWUoKSwgJywgJy5qb2luKG1hcChzdHIsIHNlbGYuZW51bV92YWx1ZXMoKSkpKQorCisgICAgZGVm
IGlzX2VudW0oc2VsZik6CisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgdHlwZV9kb21h
aW4oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9kb21haW4KKworICAgIGRlZiBlbnVtX3Zh
bHVlcyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3ZhbHVlcworCisgICAgZGVmIHF1YWxp
ZmllZF9uYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gICIuIi5qb2luKFtzZWxmLnR5cGVfZG9t
YWluKCkuZG9tYWluX25hbWUsIHNlbGYucmF3X25hbWUoKV0pCisKKyAgICBkZWYgcmVzb2x2ZV90
eXBlX3JlZmVyZW5jZXMoc2VsZiwgcHJvdG9jb2wpOgorICAgICAgICBpZiBzZWxmLnByaW1pdGl2
ZV90eXBlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgc2VsZi5w
cmltaXRpdmVfdHlwZSA9IHByb3RvY29sLmxvb2t1cF90eXBlX3JlZmVyZW5jZShzZWxmLl9wcmlt
aXRpdmVfdHlwZV9yZWYsIERvbWFpbnMuR0xPQkFMKQorICAgICAgICBsb2cuZGVidWcoIjwgUmVz
b2x2ZWQgdHlwZSByZWZlcmVuY2UgZm9yIGVudW0gdHlwZSBpbiAlczogJXMiICUgKHNlbGYucXVh
bGlmaWVkX25hbWUoKSwgc2VsZi5wcmltaXRpdmVfdHlwZS5xdWFsaWZpZWRfbmFtZSgpKSkKKyAg
ICAgICAgbG9nLmRlYnVnKCI8PCBlbnVtIHZhbHVlczogJXMiICUgc2VsZi5lbnVtX3ZhbHVlcygp
KQorCisKK2NsYXNzIEFycmF5VHlwZShUeXBlKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZWxl
bWVudF90eXBlX3JlZiwgZG9tYWluKToKKyAgICAgICAgc2VsZi5fZG9tYWluID0gZG9tYWluCisg
ICAgICAgIHNlbGYuX2VsZW1lbnRfdHlwZV9yZWYgPSBlbGVtZW50X3R5cGVfcmVmCisgICAgICAg
IHNlbGYuZWxlbWVudF90eXBlID0gTm9uZQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAg
ICAgICBpZiBzZWxmLmVsZW1lbnRfdHlwZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJldHVy
biAnQXJyYXlUeXBlW2VsZW1lbnRfdHlwZT0lcl0nICUgc2VsZi5lbGVtZW50X3R5cGUKKyAgICAg
ICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiAnQXJyYXlUeXBlW2VsZW1lbnRfdHlwZT0odW5y
ZXNvbHZlZCldJworCisgICAgZGVmIHR5cGVfZG9tYWluKHNlbGYpOgorICAgICAgICByZXR1cm4g
c2VsZi5fZG9tYWluCisKKyAgICBkZWYgcXVhbGlmaWVkX25hbWUoc2VsZik6CisgICAgICAgIHJl
dHVybiAgIi4iLmpvaW4oWyJhcnJheSIsIHNlbGYuZWxlbWVudF90eXBlLnF1YWxpZmllZF9uYW1l
KCldKQorCisgICAgZGVmIHJlc29sdmVfdHlwZV9yZWZlcmVuY2VzKHNlbGYsIHByb3RvY29sKToK
KyAgICAgICAgaWYgc2VsZi5lbGVtZW50X3R5cGUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBy
ZXR1cm4KKworICAgICAgICBzZWxmLmVsZW1lbnRfdHlwZSA9IHByb3RvY29sLmxvb2t1cF90eXBl
X3JlZmVyZW5jZShzZWxmLl9lbGVtZW50X3R5cGVfcmVmLCBzZWxmLnR5cGVfZG9tYWluKCkpCisg
ICAgICAgIGxvZy5kZWJ1ZygiPCBSZXNvbHZlZCB0eXBlIHJlZmVyZW5jZSBmb3IgZWxlbWVudCB0
eXBlIGluICVzOiAlcyIgJSAoc2VsZi5xdWFsaWZpZWRfbmFtZSgpLCBzZWxmLmVsZW1lbnRfdHlw
ZS5xdWFsaWZpZWRfbmFtZSgpKSkKKworCitjbGFzcyBPYmplY3RUeXBlKFR5cGUpOgorICAgIGRl
ZiBfX2luaXRfXyhzZWxmLCBuYW1lLCBkb21haW4sIG1lbWJlcnMpOgorICAgICAgICBzZWxmLl9u
YW1lID0gbmFtZQorICAgICAgICBzZWxmLl9kb21haW4gPSBkb21haW4KKyAgICAgICAgc2VsZi5t
ZW1iZXJzID0gbWVtYmVycworCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1
cm4gJ09iamVjdFR5cGVbJXNdJyAlIHNlbGYucXVhbGlmaWVkX25hbWUoKQorCisgICAgZGVmIHR5
cGVfZG9tYWluKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fZG9tYWluCisKKyAgICBkZWYg
cXVhbGlmaWVkX25hbWUoc2VsZik6CisgICAgICAgIHJldHVybiAgIi4iLmpvaW4oW3NlbGYudHlw
ZV9kb21haW4oKS5kb21haW5fbmFtZSwgc2VsZi5yYXdfbmFtZSgpXSkKKworCitkZWYgY2hlY2tf
Zm9yX3JlcXVpcmVkX3Byb3BlcnRpZXMocHJvcHMsIG9iaiwgd2hhdCk6CisgICAgZm9yIHByb3Ag
aW4gcHJvcHM6CisgICAgICAgIGlmIHByb3Agbm90IGluIG9iajoKKyAgICAgICAgICAgIHJhaXNl
IFBhcnNlRXhjZXB0aW9uKCJXaGVuIHBhcnNpbmcgJXMsIHJlcXVpcmVkIHByb3BlcnR5IG1pc3Np
bmc6ICVzIiAlICh3aGF0LCBwcm9wKSkKKworCitjbGFzcyBQcm90b2NvbDoKKyAgICBkZWYgX19p
bml0X18oc2VsZiwgZnJhbWV3b3JrX25hbWUpOgorICAgICAgICBzZWxmLmRvbWFpbnMgPSBbXQor
ICAgICAgICBzZWxmLnR5cGVzX2J5X25hbWUgPSB7fQorICAgICAgICBzZWxmLmZyYW1ld29yayA9
IEZyYW1ld29yay5mcm9tU3RyaW5nKGZyYW1ld29ya19uYW1lKQorCisgICAgZGVmIHBhcnNlX3Nw
ZWNpZmljYXRpb24oc2VsZiwganNvbiwgaXNTdXBwbGVtZW50YWwpOgorICAgICAgICBsb2cuZGVi
dWcoInBhcnNlIHRvcGxldmVsIikKKworICAgICAgICBpZiBpc2luc3RhbmNlKGpzb24sIGRpY3Qp
IGFuZCAnZG9tYWlucycgaW4ganNvbjoKKyAgICAgICAgICAgIGpzb24gPSBqc29uWydkb21haW5z
J10KKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoanNvbiwgbGlzdCk6CisgICAgICAgICAgICBq
c29uID0gW2pzb25dCisKKyAgICAgICAgZm9yIGRvbWFpbiBpbiBqc29uOgorICAgICAgICAgICAg
c2VsZi5wYXJzZV9kb21haW4oZG9tYWluLCBpc1N1cHBsZW1lbnRhbCkKKworICAgIGRlZiBwYXJz
ZV9kb21haW4oc2VsZiwganNvbiwgaXNTdXBwbGVtZW50YWwpOgorICAgICAgICBjaGVja19mb3Jf
cmVxdWlyZWRfcHJvcGVydGllcyhbJ2RvbWFpbiddLCBqc29uLCAiZG9tYWluIikKKyAgICAgICAg
bG9nLmRlYnVnKCJwYXJzZSBkb21haW4gIiArIGpzb25bJ2RvbWFpbiddKQorCisgICAgICAgIHR5
cGVzID0gW10KKyAgICAgICAgY29tbWFuZHMgPSBbXQorICAgICAgICBldmVudHMgPSBbXQorCisg
ICAgICAgIGlmICd0eXBlcycgaW4ganNvbjoKKyAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNl
KGpzb25bJ3R5cGVzJ10sIGxpc3QpOgorICAgICAgICAgICAgICAgIHJhaXNlIFBhcnNlRXhjZXB0
aW9uKCJNYWxmb3JtZWQgZG9tYWluIHNwZWNpZmljYXRpb246IHR5cGVzIGlzIG5vdCBhbiBhcnJh
eSIpCisgICAgICAgICAgICB0eXBlcy5leHRlbmQoW3NlbGYucGFyc2VfdHlwZV9kZWNsYXJhdGlv
bihkZWNsYXJhdGlvbikgZm9yIGRlY2xhcmF0aW9uIGluIGpzb25bJ3R5cGVzJ11dKQorCisgICAg
ICAgIGlmICdjb21tYW5kcycgaW4ganNvbjoKKyAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNl
KGpzb25bJ2NvbW1hbmRzJ10sIGxpc3QpOgorICAgICAgICAgICAgICAgIHJhaXNlIFBhcnNlRXhj
ZXB0aW9uKCJNYWxmb3JtZWQgZG9tYWluIHNwZWNpZmljYXRpb246IGNvbW1hbmRzIGlzIG5vdCBh
biBhcnJheSIpCisgICAgICAgICAgICBjb21tYW5kcy5leHRlbmQoW3NlbGYucGFyc2VfY29tbWFu
ZChjb21tYW5kKSBmb3IgY29tbWFuZCBpbiBqc29uWydjb21tYW5kcyddXSkKKworICAgICAgICBp
ZiAnZXZlbnRzJyBpbiBqc29uOgorICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoanNvblsn
ZXZlbnRzJ10sIGxpc3QpOgorICAgICAgICAgICAgICAgIHJhaXNlIFBhcnNlRXhjZXB0aW9uKCJN
YWxmb3JtZWQgZG9tYWluIHNwZWNpZmljYXRpb246IGV2ZW50cyBpcyBub3QgYW4gYXJyYXkiKQor
ICAgICAgICAgICAgZXZlbnRzLmV4dGVuZChbc2VsZi5wYXJzZV9ldmVudChldmVudCkgZm9yIGV2
ZW50IGluIGpzb25bJ2V2ZW50cyddXSkKKworICAgICAgICBzZWxmLmRvbWFpbnMuYXBwZW5kKERv
bWFpbihqc29uWydkb21haW4nXSwganNvbi5nZXQoJ2Rlc2NyaXB0aW9uJywgIiIpLCBpc1N1cHBs
ZW1lbnRhbCwgdHlwZXMsIGNvbW1hbmRzLCBldmVudHMpKQorCisgICAgZGVmIHBhcnNlX3R5cGVf
ZGVjbGFyYXRpb24oc2VsZiwganNvbik6CisgICAgICAgIGNoZWNrX2Zvcl9yZXF1aXJlZF9wcm9w
ZXJ0aWVzKFsnaWQnLCAndHlwZSddLCBqc29uLCAidHlwZSIpCisgICAgICAgIGxvZy5kZWJ1Zygi
cGFyc2UgdHlwZSAlcyIgJSBqc29uWydpZCddKQorCisgICAgICAgIHR5cGVfbWVtYmVycyA9IFtd
CisKKyAgICAgICAgaWYgJ3Byb3BlcnRpZXMnIGluIGpzb246CisgICAgICAgICAgICBpZiBub3Qg
aXNpbnN0YW5jZShqc29uWydwcm9wZXJ0aWVzJ10sIGxpc3QpOgorICAgICAgICAgICAgICAgIHJh
aXNlIFBhcnNlRXhjZXB0aW9uKCJNYWxmb3JtZWQgdHlwZSBzcGVjaWZpY2F0aW9uOiBwcm9wZXJ0
aWVzIGlzIG5vdCBhbiBhcnJheSIpCisgICAgICAgICAgICB0eXBlX21lbWJlcnMuZXh0ZW5kKFtz
ZWxmLnBhcnNlX3R5cGVfbWVtYmVyKG1lbWJlcikgZm9yIG1lbWJlciBpbiBqc29uWydwcm9wZXJ0
aWVzJ11dKQorCisgICAgICAgIHR5cGVfcmVmID0gVHlwZVJlZmVyZW5jZShqc29uWyd0eXBlJ10s
IGpzb24uZ2V0KCckcmVmJyksIGpzb24uZ2V0KCdlbnVtJyksIGpzb24uZ2V0KCdpdGVtcycpKQor
ICAgICAgICByZXR1cm4gVHlwZURlY2xhcmF0aW9uKGpzb25bJ2lkJ10sIHR5cGVfcmVmLCBqc29u
LmdldCgiZGVzY3JpcHRpb24iLCAiIiksIHR5cGVfbWVtYmVycykKKworICAgIGRlZiBwYXJzZV90
eXBlX21lbWJlcihzZWxmLCBqc29uKToKKyAgICAgICAgY2hlY2tfZm9yX3JlcXVpcmVkX3Byb3Bl
cnRpZXMoWyduYW1lJ10sIGpzb24sICJ0eXBlIG1lbWJlciIpCisgICAgICAgIGxvZy5kZWJ1Zygi
cGFyc2UgdHlwZSBtZW1iZXIgJXMiICUganNvblsnbmFtZSddKQorCisgICAgICAgIHR5cGVfcmVm
ID0gVHlwZVJlZmVyZW5jZShqc29uLmdldCgndHlwZScpLCBqc29uLmdldCgnJHJlZicpLCBqc29u
LmdldCgnZW51bScpLCBqc29uLmdldCgnaXRlbXMnKSkKKyAgICAgICAgcmV0dXJuIFR5cGVNZW1i
ZXIoanNvblsnbmFtZSddLCB0eXBlX3JlZiwganNvbi5nZXQoJ29wdGlvbmFsJywgRmFsc2UpLCBq
c29uLmdldCgnZGVzY3JpcHRpb24nLCAiIikpCisKKyAgICBkZWYgcGFyc2VfY29tbWFuZChzZWxm
LCBqc29uKToKKyAgICAgICAgY2hlY2tfZm9yX3JlcXVpcmVkX3Byb3BlcnRpZXMoWyduYW1lJ10s
IGpzb24sICJjb21tYW5kIikKKyAgICAgICAgbG9nLmRlYnVnKCJwYXJzZSBjb21tYW5kICVzIiAl
IGpzb25bJ25hbWUnXSkKKworICAgICAgICBjYWxsX3BhcmFtZXRlcnMgPSBbXQorICAgICAgICBy
ZXR1cm5fcGFyYW1ldGVycyA9IFtdCisKKyAgICAgICAgaWYgJ3BhcmFtZXRlcnMnIGluIGpzb246
CisgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShqc29uWydwYXJhbWV0ZXJzJ10sIGxpc3Qp
OgorICAgICAgICAgICAgICAgIHJhaXNlIFBhcnNlRXhjZXB0aW9uKCJNYWxmb3JtZWQgY29tbWFu
ZCBzcGVjaWZpY2F0aW9uOiBwYXJhbWV0ZXJzIGlzIG5vdCBhbiBhcnJheSIpCisgICAgICAgICAg
ICBjYWxsX3BhcmFtZXRlcnMuZXh0ZW5kKFtzZWxmLnBhcnNlX2NhbGxfb3JfcmV0dXJuX3BhcmFt
ZXRlcihwYXJhbWV0ZXIpIGZvciBwYXJhbWV0ZXIgaW4ganNvblsncGFyYW1ldGVycyddXSkKKwor
ICAgICAgICBpZiAncmV0dXJucycgaW4ganNvbjoKKyAgICAgICAgICAgIGlmIG5vdCBpc2luc3Rh
bmNlKGpzb25bJ3JldHVybnMnXSwgbGlzdCk6CisgICAgICAgICAgICAgICAgcmFpc2UgUGFyc2VF
eGNlcHRpb24oIk1hbGZvcm1lZCBjb21tYW5kIHNwZWNpZmljYXRpb246IHJldHVybnMgaXMgbm90
IGFuIGFycmF5IikKKyAgICAgICAgICAgIHJldHVybl9wYXJhbWV0ZXJzLmV4dGVuZChbc2VsZi5w
YXJzZV9jYWxsX29yX3JldHVybl9wYXJhbWV0ZXIocGFyYW1ldGVyKSBmb3IgcGFyYW1ldGVyIGlu
IGpzb25bJ3JldHVybnMnXV0pCisKKyAgICAgICAgcmV0dXJuIENvbW1hbmQoanNvblsnbmFtZSdd
LCBjYWxsX3BhcmFtZXRlcnMsIHJldHVybl9wYXJhbWV0ZXJzLCBqc29uLmdldCgnZGVzY3JpcHRp
b24nLCAiIiksIGpzb24uZ2V0KCdhc3luYycsIEZhbHNlKSkKKworICAgIGRlZiBwYXJzZV9ldmVu
dChzZWxmLCBqc29uKToKKyAgICAgICAgY2hlY2tfZm9yX3JlcXVpcmVkX3Byb3BlcnRpZXMoWydu
YW1lJ10sIGpzb24sICJldmVudCIpCisgICAgICAgIGxvZy5kZWJ1ZygicGFyc2UgZXZlbnQgJXMi
ICUganNvblsnbmFtZSddKQorCisgICAgICAgIGV2ZW50X3BhcmFtZXRlcnMgPSBbXQorCisgICAg
ICAgIGlmICdwYXJhbWV0ZXJzJyBpbiBqc29uOgorICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFu
Y2UoanNvblsncGFyYW1ldGVycyddLCBsaXN0KToKKyAgICAgICAgICAgICAgICByYWlzZSBQYXJz
ZUV4Y2VwdGlvbigiTWFsZm9ybWVkIGV2ZW50IHNwZWNpZmljYXRpb246IHBhcmFtZXRlcnMgaXMg
bm90IGFuIGFycmF5IikKKyAgICAgICAgICAgIGV2ZW50X3BhcmFtZXRlcnMuZXh0ZW5kKFtzZWxm
LnBhcnNlX2NhbGxfb3JfcmV0dXJuX3BhcmFtZXRlcihwYXJhbWV0ZXIpIGZvciBwYXJhbWV0ZXIg
aW4ganNvblsncGFyYW1ldGVycyddXSkKKworICAgICAgICByZXR1cm4gRXZlbnQoanNvblsnbmFt
ZSddLCBldmVudF9wYXJhbWV0ZXJzLCBqc29uLmdldCgnZGVzY3JpcHRpb24nLCAiIikpCisKKyAg
ICBkZWYgcGFyc2VfY2FsbF9vcl9yZXR1cm5fcGFyYW1ldGVyKHNlbGYsIGpzb24pOgorICAgICAg
ICBjaGVja19mb3JfcmVxdWlyZWRfcHJvcGVydGllcyhbJ25hbWUnXSwganNvbiwgInBhcmFtZXRl
ciIpCisgICAgICAgIGxvZy5kZWJ1ZygicGFyc2UgcGFyYW1ldGVyICVzIiAlIGpzb25bJ25hbWUn
XSkKKworICAgICAgICB0eXBlX3JlZiA9IFR5cGVSZWZlcmVuY2UoanNvbi5nZXQoJ3R5cGUnKSwg
anNvbi5nZXQoJyRyZWYnKSwganNvbi5nZXQoJ2VudW0nKSwganNvbi5nZXQoJ2l0ZW1zJykpCisg
ICAgICAgIHJldHVybiBQYXJhbWV0ZXIoanNvblsnbmFtZSddLCB0eXBlX3JlZiwganNvbi5nZXQo
J29wdGlvbmFsJywgRmFsc2UpLCBqc29uLmdldCgnZGVzY3JpcHRpb24nLCAiIikpCisKKyAgICBk
ZWYgcmVzb2x2ZV90eXBlcyhzZWxmKToKKyAgICAgICAgcXVhbGlmaWVkX2RlY2xhcmVkX3R5cGVf
bmFtZXMgPSBzZXQoWydib29sZWFuJywgJ3N0cmluZycsICdpbnRlZ2VyJywgJ251bWJlcicsICdl
bnVtJywgJ2FycmF5JywgJ29iamVjdCcsICdhbnknXSkKKworICAgICAgICBzZWxmLnR5cGVzX2J5
X25hbWVbJ3N0cmluZyddID0gUHJpbWl0aXZlVHlwZSgnc3RyaW5nJykKKyAgICAgICAgZm9yIF9w
cmltaXRpdmVfdHlwZSBpbiBbJ2Jvb2xlYW4nLCAnaW50ZWdlcicsICdudW1iZXInXToKKyAgICAg
ICAgICAgIHNlbGYudHlwZXNfYnlfbmFtZVtfcHJpbWl0aXZlX3R5cGVdID0gUHJpbWl0aXZlVHlw
ZShfcHJpbWl0aXZlX3R5cGUpCisgICAgICAgIGZvciBfb2JqZWN0X3R5cGUgaW4gWydhbnknLCAn
b2JqZWN0J106CisgICAgICAgICAgICBzZWxmLnR5cGVzX2J5X25hbWVbX29iamVjdF90eXBlXSA9
IFByaW1pdGl2ZVR5cGUoX29iamVjdF90eXBlKQorCisgICAgICAgICMgR2F0aGVyIHF1YWxpZmll
ZCB0eXBlIG5hbWVzIGZyb20gdHlwZSBkZWNsYXJhdGlvbnMgaW4gZWFjaCBkb21haW4uCisgICAg
ICAgIGZvciBkb21haW4gaW4gc2VsZi5kb21haW5zOgorICAgICAgICAgICAgZm9yIGRlY2xhcmF0
aW9uIGluIGRvbWFpbi50eXBlX2RlY2xhcmF0aW9uczoKKyAgICAgICAgICAgICAgICAjIEJhc2lj
IHNhbml0eSBjaGVja2luZy4KKyAgICAgICAgICAgICAgICBpZiBkZWNsYXJhdGlvbi50eXBlX3Jl
Zi5yZWZlcmVuY2VkX3R5cGVfbmFtZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAg
cmFpc2UgVHlwZWNoZWNrRXhjZXB0aW9uKCJUeXBlIGRlY2xhcmF0aW9ucyBtdXN0IG5hbWUgYSBi
YXNlIHR5cGUsIG5vdCBhIHR5cGUgcmVmZXJlbmNlLiIpCisKKyAgICAgICAgICAgICAgICAjIEZp
bmQgZHVwbGljYXRlIHF1YWxpZmllZCB0eXBlIG5hbWVzLgorICAgICAgICAgICAgICAgIHF1YWxp
ZmllZF90eXBlX25hbWUgPSAiLiIuam9pbihbZG9tYWluLmRvbWFpbl9uYW1lLCBkZWNsYXJhdGlv
bi50eXBlX25hbWVdKQorICAgICAgICAgICAgICAgIGlmIHF1YWxpZmllZF90eXBlX25hbWUgaW4g
cXVhbGlmaWVkX2RlY2xhcmVkX3R5cGVfbmFtZXM6CisgICAgICAgICAgICAgICAgICAgIHJhaXNl
IFR5cGVjaGVja0V4Y2VwdGlvbigiRHVwbGljYXRlIHR5cGUgZGVjbGFyYXRpb246ICVzIiAlIHF1
YWxpZmllZF90eXBlX25hbWUpCisKKyAgICAgICAgICAgICAgICBxdWFsaWZpZWRfZGVjbGFyZWRf
dHlwZV9uYW1lcy5hZGQocXVhbGlmaWVkX3R5cGVfbmFtZSkKKworICAgICAgICAgICAgICAgIHR5
cGVfaW5zdGFuY2UgPSBOb25lCisKKyAgICAgICAgICAgICAgICBraW5kID0gZGVjbGFyYXRpb24u
dHlwZV9yZWYudHlwZV9raW5kCisgICAgICAgICAgICAgICAgaWYgZGVjbGFyYXRpb24udHlwZV9y
ZWYuZW51bV92YWx1ZXMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHByaW1pdGl2
ZV90eXBlX3JlZiA9IFR5cGVSZWZlcmVuY2UoZGVjbGFyYXRpb24udHlwZV9yZWYudHlwZV9raW5k
LCBOb25lLCBOb25lLCBOb25lKQorICAgICAgICAgICAgICAgICAgICB0eXBlX2luc3RhbmNlID0g
RW51bVR5cGUoZGVjbGFyYXRpb24udHlwZV9uYW1lLCBkb21haW4sIGRlY2xhcmF0aW9uLnR5cGVf
cmVmLmVudW1fdmFsdWVzLCBwcmltaXRpdmVfdHlwZV9yZWYpCisgICAgICAgICAgICAgICAgZWxp
ZiBraW5kID09ICJhcnJheSI6CisgICAgICAgICAgICAgICAgICAgIHR5cGVfaW5zdGFuY2UgPSBB
cnJheVR5cGUoZGVjbGFyYXRpb24udHlwZV9yZWYuYXJyYXlfdHlwZV9yZWYsIGRvbWFpbikKKyAg
ICAgICAgICAgICAgICBlbGlmIGtpbmQgPT0gIm9iamVjdCI6CisgICAgICAgICAgICAgICAgICAg
IHR5cGVfaW5zdGFuY2UgPSBPYmplY3RUeXBlKGRlY2xhcmF0aW9uLnR5cGVfbmFtZSwgZG9tYWlu
LCBkZWNsYXJhdGlvbi50eXBlX21lbWJlcnMpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAg
ICAgICAgICAgICAgICAgdHlwZV9pbnN0YW5jZSA9IEFsaWFzZWRUeXBlKGRlY2xhcmF0aW9uLnR5
cGVfbmFtZSwgZG9tYWluLCBkZWNsYXJhdGlvbi50eXBlX3JlZikKKworICAgICAgICAgICAgICAg
IGxvZy5kZWJ1ZygiPCBDcmVhdGVkIGZyZXNoIHR5cGUgJXIgZm9yIGRlY2xhcmF0aW9uICVzIiAl
ICh0eXBlX2luc3RhbmNlLCBxdWFsaWZpZWRfdHlwZV9uYW1lKSkKKyAgICAgICAgICAgICAgICBz
ZWxmLnR5cGVzX2J5X25hbWVbcXVhbGlmaWVkX3R5cGVfbmFtZV0gPSB0eXBlX2luc3RhbmNlCisK
KyAgICAgICAgIyBSZXNvbHZlIGFsbCB0eXBlIHJlZmVyZW5jZXMgcmVjdXJzaXZlbHkuCisgICAg
ICAgIGZvciBkb21haW4gaW4gc2VsZi5kb21haW5zOgorICAgICAgICAgICAgZG9tYWluLnJlc29s
dmVfdHlwZV9yZWZlcmVuY2VzKHNlbGYpCisKKyAgICBkZWYgbG9va3VwX3R5cGVfZm9yX2RlY2xh
cmF0aW9uKHNlbGYsIGRlY2xhcmF0aW9uLCBkb21haW4pOgorICAgICAgICAjIFRoaXMgd2lsbCBv
bmx5IG1hdGNoIGEgdHlwZSBkZWZpbmVkIGluIHRoZSBzYW1lIGRvbWFpbiwgd2hlcmUgcHJlZml4
ZXMgYXJlbid0IHJlcXVpcmVkLgorICAgICAgICBxdWFsaWZpZWRfbmFtZSA9ICIuIi5qb2luKFtk
b21haW4uZG9tYWluX25hbWUsIGRlY2xhcmF0aW9uLnR5cGVfbmFtZV0pCisgICAgICAgIGlmIHF1
YWxpZmllZF9uYW1lIGluIHNlbGYudHlwZXNfYnlfbmFtZToKKyAgICAgICAgICAgIGZvdW5kX3R5
cGUgPSBzZWxmLnR5cGVzX2J5X25hbWVbcXVhbGlmaWVkX25hbWVdCisgICAgICAgICAgICBmb3Vu
ZF90eXBlLnJlc29sdmVfdHlwZV9yZWZlcmVuY2VzKHNlbGYpCisgICAgICAgICAgICByZXR1cm4g
Zm91bmRfdHlwZQorCisgICAgICAgIHJhaXNlIFR5cGVjaGVja0V4Y2VwdGlvbigiTG9va3VwIGZh
aWxlZCBmb3IgdHlwZSBkZWNsYXJhdGlvbjogJXMgKHJlZmVyZW5jZWQgZnJvbSBkb21haW46ICVz
KSIgJSAoZGVjbGFyYXRpb24udHlwZV9uYW1lLCBkb21haW4uZG9tYWluX25hbWUpKQorCisgICAg
ZGVmIGxvb2t1cF90eXBlX3JlZmVyZW5jZShzZWxmLCB0eXBlX3JlZiwgZG9tYWluKToKKyAgICAg
ICAgIyBJZiByZWZlcmVuY2UgaXMgdG8gYW4gYW5vbnltb3VzIGFycmF5IHR5cGUsIGNyZWF0ZSBh
IGZyZXNoIGluc3RhbmNlLgorICAgICAgICBpZiB0eXBlX3JlZi50eXBlX2tpbmQgPT0gImFycmF5
IjoKKyAgICAgICAgICAgIHR5cGVfaW5zdGFuY2UgPSBBcnJheVR5cGUodHlwZV9yZWYuYXJyYXlf
dHlwZV9yZWYsIGRvbWFpbikKKyAgICAgICAgICAgIHR5cGVfaW5zdGFuY2UucmVzb2x2ZV90eXBl
X3JlZmVyZW5jZXMoc2VsZikKKyAgICAgICAgICAgIGxvZy5kZWJ1ZygiPCBDcmVhdGVkIGZyZXNo
IHR5cGUgaW5zdGFuY2UgZm9yIGFub255bW91cyBhcnJheSB0eXBlOiAlcyIgJSB0eXBlX2luc3Rh
bmNlLnF1YWxpZmllZF9uYW1lKCkpCisgICAgICAgICAgICByZXR1cm4gdHlwZV9pbnN0YW5jZQor
CisgICAgICAgICMgSWYgcmVmZXJlbmNlIGlzIHRvIGFuIGFub255bW91cyBlbnVtIHR5cGUsIGNy
ZWF0ZSBhIGZyZXNoIGluc3RhbmNlLgorICAgICAgICBpZiB0eXBlX3JlZi5lbnVtX3ZhbHVlcyBp
cyBub3QgTm9uZToKKyAgICAgICAgICAgICMgV2UgbmVlZCB0byBjcmVhdGUgYSB0eXBlIHJlZmVy
ZW5jZSB3aXRob3V0IGVudW0gdmFsdWVzIGFzIHRoZSBlbnVtJ3MgbmVzdGVkIHR5cGUuCisgICAg
ICAgICAgICBwcmltaXRpdmVfdHlwZV9yZWYgPSBUeXBlUmVmZXJlbmNlKHR5cGVfcmVmLnR5cGVf
a2luZCwgTm9uZSwgTm9uZSwgTm9uZSkKKyAgICAgICAgICAgIHR5cGVfaW5zdGFuY2UgPSBFbnVt
VHlwZSgiKGFub255bW91cykiLCBkb21haW4sIHR5cGVfcmVmLmVudW1fdmFsdWVzLCBwcmltaXRp
dmVfdHlwZV9yZWYsIFRydWUpCisgICAgICAgICAgICB0eXBlX2luc3RhbmNlLnJlc29sdmVfdHlw
ZV9yZWZlcmVuY2VzKHNlbGYpCisgICAgICAgICAgICBsb2cuZGVidWcoIjwgQ3JlYXRlZCBmcmVz
aCB0eXBlIGluc3RhbmNlIGZvciBhbm9ueW1vdXMgZW51bSB0eXBlOiAlcyIgJSB0eXBlX2luc3Rh
bmNlLnF1YWxpZmllZF9uYW1lKCkpCisgICAgICAgICAgICByZXR1cm4gdHlwZV9pbnN0YW5jZQor
CisgICAgICAgICMgVGhpcyB3aWxsIG1hdGNoIHdoZW4gcmVmZXJlbmNpbmcgYSB0eXBlIGRlZmlu
ZWQgaW4gdGhlIHNhbWUgZG9tYWluLCB3aGVyZSBwcmVmaXhlcyBhcmVuJ3QgcmVxdWlyZWQuCisg
ICAgICAgIHF1YWxpZmllZF9uYW1lID0gIi4iLmpvaW4oW2RvbWFpbi5kb21haW5fbmFtZSwgdHlw
ZV9yZWYucmVmZXJlbmNlZF9uYW1lKCldKQorICAgICAgICBpZiBxdWFsaWZpZWRfbmFtZSBpbiBz
ZWxmLnR5cGVzX2J5X25hbWU6CisgICAgICAgICAgICBmb3VuZF90eXBlID0gc2VsZi50eXBlc19i
eV9uYW1lW3F1YWxpZmllZF9uYW1lXQorICAgICAgICAgICAgZm91bmRfdHlwZS5yZXNvbHZlX3R5
cGVfcmVmZXJlbmNlcyhzZWxmKQorICAgICAgICAgICAgbG9nLmRlYnVnKCI8IExvb2t1cCBzdWNj
ZWVkZWQgZm9yIHVucXVhbGlmaWVkIHR5cGU6ICVzIiAlIGZvdW5kX3R5cGUucXVhbGlmaWVkX25h
bWUoKSkKKyAgICAgICAgICAgIHJldHVybiBmb3VuZF90eXBlCisKKyAgICAgICAgIyBUaGlzIHdp
bGwgbWF0Y2ggcHJpbWl0aXZlIHR5cGVzIGFuZCBmdWxseS1xdWFsaWZpZWQgdHlwZXMgZnJvbSBh
IGRpZmZlcmVudCBkb21haW4uCisgICAgICAgIGlmIHR5cGVfcmVmLnJlZmVyZW5jZWRfbmFtZSgp
IGluIHNlbGYudHlwZXNfYnlfbmFtZToKKyAgICAgICAgICAgIGZvdW5kX3R5cGUgPSBzZWxmLnR5
cGVzX2J5X25hbWVbdHlwZV9yZWYucmVmZXJlbmNlZF9uYW1lKCldCisgICAgICAgICAgICBmb3Vu
ZF90eXBlLnJlc29sdmVfdHlwZV9yZWZlcmVuY2VzKHNlbGYpCisgICAgICAgICAgICBsb2cuZGVi
dWcoIjwgTG9va3VwIHN1Y2NlZWRlZCBmb3IgcHJpbWl0aXZlIG9yIHF1YWxpZmllZCB0eXBlOiAl
cyIgJSBmb3VuZF90eXBlLnF1YWxpZmllZF9uYW1lKCkpCisgICAgICAgICAgICByZXR1cm4gZm91
bmRfdHlwZQorCisgICAgICAgIHJhaXNlIFR5cGVjaGVja0V4Y2VwdGlvbigiTG9va3VwIGZhaWxl
ZCBmb3IgdHlwZSByZWZlcmVuY2U6ICVzIChyZWZlcmVuY2VkIGZyb20gZG9tYWluOiAlcykiICUg
KHR5cGVfcmVmLnJlZmVyZW5jZWRfbmFtZSgpLCBkb21haW4uZG9tYWluX25hbWUpKQorCisKK2Ns
YXNzIERvbWFpbjoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZG9tYWluX25hbWUsIGRlc2NyaXB0
aW9uLCBpc1N1cHBsZW1lbnRhbCwgdHlwZV9kZWNsYXJhdGlvbnMsIGNvbW1hbmRzLCBldmVudHMp
OgorICAgICAgICBzZWxmLmRvbWFpbl9uYW1lID0gZG9tYWluX25hbWUKKyAgICAgICAgc2VsZi5k
ZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uCisgICAgICAgIHNlbGYuaXNfc3VwcGxlbWVudGFsID0g
aXNTdXBwbGVtZW50YWwKKyAgICAgICAgc2VsZi50eXBlX2RlY2xhcmF0aW9ucyA9IHR5cGVfZGVj
bGFyYXRpb25zCisgICAgICAgIHNlbGYuY29tbWFuZHMgPSBjb21tYW5kcworICAgICAgICBzZWxm
LmV2ZW50cyA9IGV2ZW50cworCisgICAgZGVmIHJlc29sdmVfdHlwZV9yZWZlcmVuY2VzKHNlbGYs
IHByb3RvY29sKToKKyAgICAgICAgbG9nLmRlYnVnKCI+IFJlc29sdmluZyB0eXBlIGRlY2xhcmF0
aW9ucyBmb3IgZG9tYWluOiAlcyIgJSBzZWxmLmRvbWFpbl9uYW1lKQorICAgICAgICBmb3IgZGVj
bGFyYXRpb24gaW4gc2VsZi50eXBlX2RlY2xhcmF0aW9uczoKKyAgICAgICAgICAgIGRlY2xhcmF0
aW9uLnJlc29sdmVfdHlwZV9yZWZlcmVuY2VzKHByb3RvY29sLCBzZWxmKQorCisgICAgICAgIGxv
Zy5kZWJ1ZygiPiBSZXNvbHZpbmcgdHlwZXMgaW4gY29tbWFuZHMgZm9yIGRvbWFpbjogJXMiICUg
c2VsZi5kb21haW5fbmFtZSkKKyAgICAgICAgZm9yIGNvbW1hbmQgaW4gc2VsZi5jb21tYW5kczoK
KyAgICAgICAgICAgIGNvbW1hbmQucmVzb2x2ZV90eXBlX3JlZmVyZW5jZXMocHJvdG9jb2wsIHNl
bGYpCisKKyAgICAgICAgbG9nLmRlYnVnKCI+IFJlc29sdmluZyB0eXBlcyBpbiBldmVudHMgZm9y
IGRvbWFpbjogJXMiICUgc2VsZi5kb21haW5fbmFtZSkKKyAgICAgICAgZm9yIGV2ZW50IGluIHNl
bGYuZXZlbnRzOgorICAgICAgICAgICAgZXZlbnQucmVzb2x2ZV90eXBlX3JlZmVyZW5jZXMocHJv
dG9jb2wsIHNlbGYpCisKKworY2xhc3MgRG9tYWluczoKKyAgICBHTE9CQUwgPSBEb21haW4oIiIs
ICJUaGUgZ2xvYmFsIGRvbWFpbiwgaW4gd2hpY2ggcHJpbWl0aXZlIHR5cGVzIGFyZSBpbXBsaWNp
dGx5IGRlY2xhcmVkLiIsIFRydWUsIFtdLCBbXSwgW10pCisKKworY2xhc3MgVHlwZURlY2xhcmF0
aW9uOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0eXBlX25hbWUsIHR5cGVfcmVmLCBkZXNjcmlw
dGlvbiwgdHlwZV9tZW1iZXJzKToKKyAgICAgICAgc2VsZi50eXBlX25hbWUgPSBfVFlQRVNfTkVF
RElOR19SRU5BTUVfV09SS0FST1VORFMuZ2V0KHR5cGVfbmFtZSwgdHlwZV9uYW1lKQorICAgICAg
ICBzZWxmLnR5cGVfcmVmID0gdHlwZV9yZWYKKyAgICAgICAgc2VsZi5kZXNjcmlwdGlvbiA9IGRl
c2NyaXB0aW9uCisgICAgICAgIHNlbGYudHlwZV9tZW1iZXJzID0gdHlwZV9tZW1iZXJzCisKKyAg
ICAgICAgaWYgc2VsZi50eXBlX25hbWUgIT0gdWNmaXJzdChzZWxmLnR5cGVfbmFtZSk6CisgICAg
ICAgICAgICByYWlzZSBQYXJzZUV4Y2VwdGlvbigiVHlwZXMgbXVzdCBiZWdpbiB3aXRoIGFuIHVw
cGVyY2FzZSBjaGFyYWN0ZXIuIikKKworICAgIGRlZiByZXNvbHZlX3R5cGVfcmVmZXJlbmNlcyhz
ZWxmLCBwcm90b2NvbCwgZG9tYWluKToKKyAgICAgICAgbG9nLmRlYnVnKCI+PiBSZXNvbHZpbmcg
dHlwZSByZWZlcmVuY2VzIGZvciB0eXBlIGRlY2xhcmF0aW9uOiAlcyIgJSBzZWxmLnR5cGVfbmFt
ZSkKKyAgICAgICAgc2VsZi50eXBlID0gcHJvdG9jb2wubG9va3VwX3R5cGVfZm9yX2RlY2xhcmF0
aW9uKHNlbGYsIGRvbWFpbikKKyAgICAgICAgZm9yIG1lbWJlciBpbiBzZWxmLnR5cGVfbWVtYmVy
czoKKyAgICAgICAgICAgIG1lbWJlci5yZXNvbHZlX3R5cGVfcmVmZXJlbmNlcyhwcm90b2NvbCwg
ZG9tYWluKQorCisKK2NsYXNzIFR5cGVNZW1iZXI6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1l
bWJlcl9uYW1lLCB0eXBlX3JlZiwgaXNfb3B0aW9uYWwsIGRlc2NyaXB0aW9uKToKKyAgICAgICAg
c2VsZi5tZW1iZXJfbmFtZSA9IG1lbWJlcl9uYW1lCisgICAgICAgIHNlbGYudHlwZV9yZWYgPSB0
eXBlX3JlZgorICAgICAgICBzZWxmLmlzX29wdGlvbmFsID0gaXNfb3B0aW9uYWwKKyAgICAgICAg
c2VsZi5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uCisKKyAgICAgICAgaWYgc2VsZi5pc19vcHRp
b25hbCBub3QgaW4gW1RydWUsIEZhbHNlXToKKyAgICAgICAgICAgIHJhaXNlIFBhcnNlRXhjZXB0
aW9uKCJUaGUgJ29wdGlvbmFsJyBmbGFnIGZvciBhIHR5cGUgbWVtYmVyIG11c3QgYmUgYSBib29s
ZWFuIGxpdGVyYWwuIikKKworICAgIGRlZiByZXNvbHZlX3R5cGVfcmVmZXJlbmNlcyhzZWxmLCBw
cm90b2NvbCwgZG9tYWluKToKKyAgICAgICAgbG9nLmRlYnVnKCI+Pj4gUmVzb2x2aW5nIHR5cGUg
cmVmZXJlbmNlcyBmb3IgdHlwZSBtZW1iZXI6ICVzIiAlIHNlbGYubWVtYmVyX25hbWUpCisgICAg
ICAgIHNlbGYudHlwZSA9IHByb3RvY29sLmxvb2t1cF90eXBlX3JlZmVyZW5jZShzZWxmLnR5cGVf
cmVmLCBkb21haW4pCisKKworY2xhc3MgUGFyYW1ldGVyOgorICAgIGRlZiBfX2luaXRfXyhzZWxm
LCBwYXJhbWV0ZXJfbmFtZSwgdHlwZV9yZWYsIGlzX29wdGlvbmFsLCBkZXNjcmlwdGlvbik6Cisg
ICAgICAgIHNlbGYucGFyYW1ldGVyX25hbWUgPSBwYXJhbWV0ZXJfbmFtZQorICAgICAgICBzZWxm
LnR5cGVfcmVmID0gdHlwZV9yZWYKKyAgICAgICAgc2VsZi5pc19vcHRpb25hbCA9IGlzX29wdGlv
bmFsCisgICAgICAgIHNlbGYuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbgorCisgICAgICAgIGlm
IHNlbGYuaXNfb3B0aW9uYWwgbm90IGluIFtUcnVlLCBGYWxzZV06CisgICAgICAgICAgICByYWlz
ZSBQYXJzZUV4Y2VwdGlvbigiVGhlICdvcHRpb25hbCcgZmxhZyBmb3IgYSBwYXJhbWV0ZXIgbXVz
dCBiZSBhIGJvb2xlYW4gbGl0ZXJhbC4iKQorCisgICAgZGVmIHJlc29sdmVfdHlwZV9yZWZlcmVu
Y2VzKHNlbGYsIHByb3RvY29sLCBkb21haW4pOgorICAgICAgICBsb2cuZGVidWcoIj4+PiBSZXNv
bHZpbmcgdHlwZSByZWZlcmVuY2VzIGZvciBwYXJhbWV0ZXI6ICVzIiAlIHNlbGYucGFyYW1ldGVy
X25hbWUpCisgICAgICAgIHNlbGYudHlwZSA9IHByb3RvY29sLmxvb2t1cF90eXBlX3JlZmVyZW5j
ZShzZWxmLnR5cGVfcmVmLCBkb21haW4pCisKKworY2xhc3MgQ29tbWFuZDoKKyAgICBkZWYgX19p
bml0X18oc2VsZiwgY29tbWFuZF9uYW1lLCBjYWxsX3BhcmFtZXRlcnMsIHJldHVybl9wYXJhbWV0
ZXJzLCBkZXNjcmlwdGlvbiwgaXNfYXN5bmMpOgorICAgICAgICBzZWxmLmNvbW1hbmRfbmFtZSA9
IGNvbW1hbmRfbmFtZQorICAgICAgICBzZWxmLmNhbGxfcGFyYW1ldGVycyA9IGNhbGxfcGFyYW1l
dGVycworICAgICAgICBzZWxmLnJldHVybl9wYXJhbWV0ZXJzID0gcmV0dXJuX3BhcmFtZXRlcnMK
KyAgICAgICAgc2VsZi5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uCisgICAgICAgIHNlbGYuaXNf
YXN5bmMgPSBpc19hc3luYworCisgICAgZGVmIHJlc29sdmVfdHlwZV9yZWZlcmVuY2VzKHNlbGYs
IHByb3RvY29sLCBkb21haW4pOgorICAgICAgICBsb2cuZGVidWcoIj4+IFJlc29sdmluZyB0eXBl
IHJlZmVyZW5jZXMgZm9yIGNhbGwgcGFyYW1ldGVycyBpbiBjb21tYW5kOiAlcyIgJSBzZWxmLmNv
bW1hbmRfbmFtZSkKKyAgICAgICAgZm9yIHBhcmFtZXRlciBpbiBzZWxmLmNhbGxfcGFyYW1ldGVy
czoKKyAgICAgICAgICAgIHBhcmFtZXRlci5yZXNvbHZlX3R5cGVfcmVmZXJlbmNlcyhwcm90b2Nv
bCwgZG9tYWluKQorCisgICAgICAgIGxvZy5kZWJ1ZygiPj4gUmVzb2x2aW5nIHR5cGUgcmVmZXJl
bmNlcyBmb3IgcmV0dXJuIHBhcmFtZXRlcnMgaW4gY29tbWFuZDogJXMiICUgc2VsZi5jb21tYW5k
X25hbWUpCisgICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gc2VsZi5yZXR1cm5fcGFyYW1ldGVyczoK
KyAgICAgICAgICAgIHBhcmFtZXRlci5yZXNvbHZlX3R5cGVfcmVmZXJlbmNlcyhwcm90b2NvbCwg
ZG9tYWluKQorCisKK2NsYXNzIEV2ZW50OgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBldmVudF9u
YW1lLCBldmVudF9wYXJhbWV0ZXJzLCBkZXNjcmlwdGlvbik6CisgICAgICAgIHNlbGYuZXZlbnRf
bmFtZSA9IGV2ZW50X25hbWUKKyAgICAgICAgc2VsZi5ldmVudF9wYXJhbWV0ZXJzID0gZXZlbnRf
cGFyYW1ldGVycworICAgICAgICBzZWxmLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb24KKworICAg
IGRlZiByZXNvbHZlX3R5cGVfcmVmZXJlbmNlcyhzZWxmLCBwcm90b2NvbCwgZG9tYWluKToKKyAg
ICAgICAgbG9nLmRlYnVnKCI+PiBSZXNvbHZpbmcgdHlwZSByZWZlcmVuY2VzIGZvciBwYXJhbWV0
ZXJzIGluIGV2ZW50OiAlcyIgJSBzZWxmLmV2ZW50X25hbWUpCisgICAgICAgIGZvciBwYXJhbWV0
ZXIgaW4gc2VsZi5ldmVudF9wYXJhbWV0ZXJzOgorICAgICAgICAgICAgcGFyYW1ldGVyLnJlc29s
dmVfdHlwZV9yZWZlcmVuY2VzKHByb3RvY29sLCBkb21haW4pCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQpuZXcgZmlsZSBtb2RlIDEw
MDc1NQppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yZmQ2
ZGZiZTczZGEzZmU0ZjJlMWE0YzNkMWVhYjQ1NWQ4NzhjZTZiCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQpAQCAtMCwwICsxLDE4NiBAQAorIyEvdXNyL2Jpbi9lbnYg
cHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisjIENvcHlyaWdodCAoYykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1l
dDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyMgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisj
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisjIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorCisjIFRoaXMgc2NyaXB0IGdlbmVyYXRlcyBKUyBhbmQgQysrIGJpbmRpbmdzIGZvciB0aGUg
aW5zcGVjdG9yIHByb3RvY29sLgorIyBHZW5lcmF0b3JzIGZvciBpbmRpdmlkdWFsIGZpbGVzIGFy
ZSBsb2NhdGVkIGluIHRoZSBjb2RlZ2VuLyBkaXJlY3RvcnkuCisKK2ltcG9ydCBvcy5wYXRoCitp
bXBvcnQgcmUKK2ltcG9ydCBzeXMKK2ltcG9ydCBzdHJpbmcKK2Zyb20gc3RyaW5nIGltcG9ydCBU
ZW1wbGF0ZQoraW1wb3J0IG9wdHBhcnNlCitpbXBvcnQgbG9nZ2luZworCit0cnk6CisgICAgaW1w
b3J0IGpzb24KK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBpbXBvcnQgc2ltcGxlanNvbiBhcyBq
c29uCisKK3RyeToKKyAgICBmcm9tIGNvZGVnZW4gaW1wb3J0ICoKKworIyBXaGVuIGNvcHlpbmcg
Z2VuZXJhdG9yIGZpbGVzIHRvIEphdmFTY3JpcHRDb3JlJ3MgcHJpdmF0ZSBoZWFkZXJzIG9uIE1h
YywKKyMgdGhlIGNvZGVnZW4vIG1vZHVsZSBkaXJlY3RvcnkgaXMgZmxhdHRlbmVkLiBTbywgaW1w
b3J0IGRpcmVjdGx5LgorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIGltcG9ydCBtb2RlbHMKKyAg
ICBmcm9tIG1vZGVscyBpbXBvcnQgKgorICAgIGZyb20gZ2VuZXJhdG9yIGltcG9ydCAqCisKKyAg
ICBmcm9tIGdlbmVyYXRlX2JhY2tlbmRfY29tbWFuZHMgaW1wb3J0ICoKKyAgICBmcm9tIGdlbmVy
YXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIgaW1wb3J0ICoKKyAgICBmcm9tIGdlbmVyYXRl
X2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbiBpbXBvcnQgKgorICAgIGZyb20gZ2Vu
ZXJhdGVfZnJvbnRlbmRfZGlzcGF0Y2hlcl9oZWFkZXIgaW1wb3J0ICoKKyAgICBmcm9tIGdlbmVy
YXRlX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24gaW1wb3J0ICoKKyAgICBmcm9t
IGdlbmVyYXRlX3R5cGVfYnVpbGRlcl9oZWFkZXIgaW1wb3J0ICoKKyAgICBmcm9tIGdlbmVyYXRl
X3R5cGVfYnVpbGRlcl9pbXBsZW1lbnRhdGlvbiBpbXBvcnQgKgorCisKK2xvZ2dpbmcuYmFzaWND
b25maWcoZm9ybWF0PSclKGxldmVsbmFtZSlzOiAlKG1lc3NhZ2UpcycsIGxldmVsPWxvZ2dpbmcu
RVJST1IpCitsb2cgPSBsb2dnaW5nLmdldExvZ2dlcignZ2xvYmFsJykKKworCisjIEEgd3JpdGVy
IHRoYXQgb25seSB1cGRhdGVzIGZpbGUgaWYgaXQgYWN0dWFsbHkgY2hhbmdlZC4KK2NsYXNzIElu
Y3JlbWVudGFsRmlsZVdyaXRlcjoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZXBhdGgsIGZv
cmNlX291dHB1dCk6CisgICAgICAgIHNlbGYuX2ZpbGVwYXRoID0gZmlsZXBhdGgKKyAgICAgICAg
c2VsZi5fb3V0cHV0ID0gIiIKKyAgICAgICAgc2VsZi5mb3JjZV9vdXRwdXQgPSBmb3JjZV9vdXRw
dXQKKworICAgIGRlZiB3cml0ZShzZWxmLCB0ZXh0KToKKyAgICAgICAgc2VsZi5fb3V0cHV0ICs9
IHRleHQKKworICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgdGV4dF9jaGFuZ2VkID0gVHJ1
ZQorICAgICAgICBzZWxmLl9vdXRwdXQgPSBzZWxmLl9vdXRwdXQucnN0cmlwKCkgKyAiXG4iCisK
KyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgc2VsZi5mb3JjZV9vdXRwdXQ6CisgICAgICAg
ICAgICAgICAgcmFpc2UKKworICAgICAgICAgICAgcmVhZF9maWxlID0gb3BlbihzZWxmLl9maWxl
cGF0aCwgInIiKQorICAgICAgICAgICAgb2xkX3RleHQgPSByZWFkX2ZpbGUucmVhZCgpCisgICAg
ICAgICAgICByZWFkX2ZpbGUuY2xvc2UoKQorICAgICAgICAgICAgdGV4dF9jaGFuZ2VkID0gb2xk
X3RleHQgIT0gc2VsZi5fb3V0cHV0CisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICMgSWdu
b3JlLCBqdXN0IG92ZXJ3cml0ZSBieSBkZWZhdWx0CisgICAgICAgICAgICBwYXNzCisKKyAgICAg
ICAgaWYgdGV4dF9jaGFuZ2VkIG9yIHNlbGYuZm9yY2Vfb3V0cHV0OgorICAgICAgICAgICAgb3V0
X2ZpbGUgPSBvcGVuKHNlbGYuX2ZpbGVwYXRoLCAidyIpCisgICAgICAgICAgICBvdXRfZmlsZS53
cml0ZShzZWxmLl9vdXRwdXQpCisgICAgICAgICAgICBvdXRfZmlsZS5jbG9zZSgpCisKKworZGVm
IGdlbmVyYXRlX2Zyb21fc3BlY2lmaWNhdGlvbihwcmltYXJ5X3NwZWNpZmljYXRpb25fZmlsZXBh
dGg9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VwcGxlbWVudGFsX3Nw
ZWNpZmljYXRpb25fZmlsZXBhdGhzPVtdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25jYXRlbmF0ZV9vdXRwdXQ9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG91dHB1dF9kaXJwYXRoPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZvcmNlX291dHB1dD1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJh
bWV3b3JrX25hbWU9IiIpOgorCisgICAgZGVmIGxvYWRfc3BlY2lmaWNhdGlvbihwcm90b2NvbCwg
ZmlsZXBhdGgsIGlzU3VwcGxlbWVudGFsPUZhbHNlKToKKyAgICAgICAgdHJ5OgorICAgICAgICAg
ICAgd2l0aCBvcGVuKGZpbGVwYXRoLCAiciIpIGFzIGlucHV0X2ZpbGU6CisgICAgICAgICAgICAg
ICAgcGFyc2VkX2pzb24gPSBqc29uLmxvYWQoaW5wdXRfZmlsZSkKKyAgICAgICAgICAgICAgICBw
cm90b2NvbC5wYXJzZV9zcGVjaWZpY2F0aW9uKHBhcnNlZF9qc29uLCBpc1N1cHBsZW1lbnRhbCkK
KyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IgYXMgZToKKyAgICAgICAgICAgIHJhaXNlIEV4Y2Vw
dGlvbigiRXJyb3IgcGFyc2luZyB2YWxpZCBKU09OIGluIGZpbGU6ICIgKyBmaWxlcGF0aCkKKwor
ICAgIHByb3RvY29sID0gbW9kZWxzLlByb3RvY29sKGZyYW1ld29ya19uYW1lKQorICAgIGZvciBz
cGVjaWZpY2F0aW9uIGluIHN1cHBsZW1lbnRhbF9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRoczoKKyAg
ICAgICAgbG9hZF9zcGVjaWZpY2F0aW9uKHByb3RvY29sLCBzcGVjaWZpY2F0aW9uLCBpc1N1cHBs
ZW1lbnRhbD1UcnVlKQorICAgIGxvYWRfc3BlY2lmaWNhdGlvbihwcm90b2NvbCwgcHJpbWFyeV9z
cGVjaWZpY2F0aW9uX2ZpbGVwYXRoLCBpc1N1cHBsZW1lbnRhbD1GYWxzZSkKKworICAgIHByb3Rv
Y29sLnJlc29sdmVfdHlwZXMoKQorCisgICAgZ2VuZXJhdG9ycyA9IFtdCisgICAgZ2VuZXJhdG9y
cy5hcHBlbmQoQmFja2VuZENvbW1hbmRzR2VuZXJhdG9yKHByb3RvY29sLCBwcmltYXJ5X3NwZWNp
ZmljYXRpb25fZmlsZXBhdGgpKQorICAgIGdlbmVyYXRvcnMuYXBwZW5kKEJhY2tlbmREaXNwYXRj
aGVySGVhZGVyR2VuZXJhdG9yKHByb3RvY29sLCBwcmltYXJ5X3NwZWNpZmljYXRpb25fZmlsZXBh
dGgpKQorICAgIGdlbmVyYXRvcnMuYXBwZW5kKEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRp
b25HZW5lcmF0b3IocHJvdG9jb2wsIHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aCkpCisg
ICAgZ2VuZXJhdG9ycy5hcHBlbmQoRnJvbnRlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yKHBy
b3RvY29sLCBwcmltYXJ5X3NwZWNpZmljYXRpb25fZmlsZXBhdGgpKQorICAgIGdlbmVyYXRvcnMu
YXBwZW5kKEZyb250ZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKHByb3RvY29s
LCBwcmltYXJ5X3NwZWNpZmljYXRpb25fZmlsZXBhdGgpKQorICAgIGdlbmVyYXRvcnMuYXBwZW5k
KFR5cGVCdWlsZGVySGVhZGVyR2VuZXJhdG9yKHByb3RvY29sLCBwcmltYXJ5X3NwZWNpZmljYXRp
b25fZmlsZXBhdGgpKQorICAgIGdlbmVyYXRvcnMuYXBwZW5kKFR5cGVCdWlsZGVySW1wbGVtZW50
YXRpb25HZW5lcmF0b3IocHJvdG9jb2wsIHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aCkp
CisKKyAgICBzaW5nbGVfb3V0cHV0X2ZpbGVfY29udGVudHMgPSBbXQorCisgICAgZm9yIGdlbmVy
YXRvciBpbiBnZW5lcmF0b3JzOgorICAgICAgICBvdXRwdXQgPSBnZW5lcmF0b3IuZ2VuZXJhdGVf
b3V0cHV0KCkKKyAgICAgICAgaWYgY29uY2F0ZW5hdGVfb3V0cHV0OgorICAgICAgICAgICAgc2lu
Z2xlX291dHB1dF9maWxlX2NvbnRlbnRzLmFwcGVuZCgnIyMjIEJlZ2luIEZpbGU6ICVzJyAlIGdl
bmVyYXRvci5vdXRwdXRfZmlsZW5hbWUoKSkKKyAgICAgICAgICAgIHNpbmdsZV9vdXRwdXRfZmls
ZV9jb250ZW50cy5hcHBlbmQob3V0cHV0KQorICAgICAgICAgICAgc2luZ2xlX291dHB1dF9maWxl
X2NvbnRlbnRzLmFwcGVuZCgnIyMjIEVuZCBGaWxlOiAlcycgJSBnZW5lcmF0b3Iub3V0cHV0X2Zp
bGVuYW1lKCkpCisgICAgICAgICAgICBzaW5nbGVfb3V0cHV0X2ZpbGVfY29udGVudHMuYXBwZW5k
KCcnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgb3V0cHV0X2ZpbGUgPSBJbmNyZW1lbnRh
bEZpbGVXcml0ZXIob3MucGF0aC5qb2luKG91dHB1dF9kaXJwYXRoLCBnZW5lcmF0b3Iub3V0cHV0
X2ZpbGVuYW1lKCkpLCBmb3JjZV9vdXRwdXQpCisgICAgICAgICAgICBvdXRwdXRfZmlsZS53cml0
ZShvdXRwdXQpCisgICAgICAgICAgICBvdXRwdXRfZmlsZS5jbG9zZSgpCisKKyAgICBpZiBjb25j
YXRlbmF0ZV9vdXRwdXQ6CisgICAgICAgIGZpbGVuYW1lID0gb3MucGF0aC5qb2luKG9zLnBhdGgu
YmFzZW5hbWUocHJpbWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRoKSArICctcmVzdWx0JykKKyAg
ICAgICAgb3V0cHV0X2ZpbGUgPSBJbmNyZW1lbnRhbEZpbGVXcml0ZXIob3MucGF0aC5qb2luKG91
dHB1dF9kaXJwYXRoLCBmaWxlbmFtZSksIGZvcmNlX291dHB1dCkKKyAgICAgICAgb3V0cHV0X2Zp
bGUud3JpdGUoJ1xuJy5qb2luKHNpbmdsZV9vdXRwdXRfZmlsZV9jb250ZW50cykpCisgICAgICAg
IG91dHB1dF9maWxlLmNsb3NlKCkKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAg
IGFsbG93ZWRfZnJhbWV3b3JrX25hbWVzID0gWydXVEYnLCAnSmF2YVNjcmlwdENvcmUnLCAnV2Vi
Q29yZScsICdXZWJLaXQnLCAnV2ViS2l0MicsICdUZXN0J10KKyAgICBjbGlfcGFyc2VyID0gb3B0
cGFyc2UuT3B0aW9uUGFyc2VyKHVzYWdlPSJ1c2FnZTogJXByb2cgW29wdGlvbnNdIFByaW1hcnlQ
cm90b2NvbC5qc29uIFtTdXBwbGVtZW50YWxQcm90b2NvbC5qc29uIC4uLl0iKQorICAgIGNsaV9w
YXJzZXIuYWRkX29wdGlvbigiLW8iLCAiLS1vdXRwdXREaXIiLCBoZWxwPSJEaXJlY3Rvcnkgd2hl
cmUgZ2VuZXJhdGVkIGZpbGVzIHNob3VsZCBiZSB3cml0dGVuLiIpCisgICAgY2xpX3BhcnNlci5h
ZGRfb3B0aW9uKCItLWZyYW1ld29yayIsIHR5cGU9ImNob2ljZSIsIGNob2ljZXM9YWxsb3dlZF9m
cmFtZXdvcmtfbmFtZXMsIGhlbHA9IlRoZSBmcmFtZXdvcmsgdGhhdCB0aGUgcHJpbWFyeSBzcGVj
aWZpY2F0aW9uIGJlbG9uZ3MgdG8uIikKKyAgICBjbGlfcGFyc2VyLmFkZF9vcHRpb24oIi0tZm9y
Y2UiLCBhY3Rpb249InN0b3JlX3RydWUiLCBoZWxwPSJGb3JjZSBvdXRwdXQgb2YgZ2VuZXJhdGVk
IHNjcmlwdHMsIGV2ZW4gaWYgbm90aGluZyBjaGFuZ2VkLiIpCisgICAgY2xpX3BhcnNlci5hZGRf
b3B0aW9uKCItdiIsICItLWRlYnVnIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwgaGVscD0iTG9nIGV4
dHJhIG91dHB1dCBmb3IgZGVidWdnaW5nIHRoZSBnZW5lcmF0b3IgaXRzZWxmLiIpCisgICAgY2xp
X3BhcnNlci5hZGRfb3B0aW9uKCItdCIsICItLXRlc3QiLCBhY3Rpb249InN0b3JlX3RydWUiLCBo
ZWxwPSJFbmFibGUgdGVzdCBtb2RlLiBVc2UgdW5pcXVlIG91dHB1dCBmaWxlbmFtZXMgY3JlYXRl
ZCBieSBwcmVwZW5kaW5nIHRoZSBpbnB1dCBmaWxlbmFtZS4iKQorCisgICAgb3B0aW9ucyA9IE5v
bmUKKworICAgIGFyZ19vcHRpb25zLCBhcmdfdmFsdWVzID0gY2xpX3BhcnNlci5wYXJzZV9hcmdz
KCkKKyAgICBpZiAobGVuKGFyZ192YWx1ZXMpIDwgMSk6CisgICAgICAgIHJhaXNlIFBhcnNlRXhj
ZXB0aW9uKCJBdCBsZWFzdCBvbmUgcGxhaW4gYXJndW1lbnQgZXhwZWN0ZWQiKQorCisgICAgaWYg
bm90IGFyZ19vcHRpb25zLm91dHB1dERpcjoKKyAgICAgICAgcmFpc2UgUGFyc2VFeGNlcHRpb24o
Ik1pc3Npbmcgb3V0cHV0IGRpcmVjdG9yeSIpCisKKyAgICBpZiBhcmdfb3B0aW9ucy5kZWJ1ZzoK
KyAgICAgICAgbG9nLnNldExldmVsKGxvZ2dpbmcuREVCVUcpCisKKyAgICBvcHRpb25zID0gewor
ICAgICAgICAncHJpbWFyeV9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRoJzogYXJnX3ZhbHVlc1swXSwK
KyAgICAgICAgJ3N1cHBsZW1lbnRhbF9zcGVjaWZpY2F0aW9uX2ZpbGVwYXRocyc6IGFyZ192YWx1
ZXNbMTpdLAorICAgICAgICAnb3V0cHV0X2RpcnBhdGgnOiBhcmdfb3B0aW9ucy5vdXRwdXREaXIs
CisgICAgICAgICdjb25jYXRlbmF0ZV9vdXRwdXQnOiBhcmdfb3B0aW9ucy50ZXN0LAorICAgICAg
ICAnZnJhbWV3b3JrX25hbWUnOiBhcmdfb3B0aW9ucy5mcmFtZXdvcmssCisgICAgICAgICdmb3Jj
ZV9vdXRwdXQnOiBhcmdfb3B0aW9ucy5mb3JjZQorICAgIH0KKworICAgIHRyeToKKyAgICAgICAg
Z2VuZXJhdGVfZnJvbV9zcGVjaWZpY2F0aW9uKCoqb3B0aW9ucykKKyAgICBleGNlcHQgKFBhcnNl
RXhjZXB0aW9uLCBUeXBlY2hlY2tFeGNlcHRpb24pIGFzIGU6CisgICAgICAgIGlmIGFyZ19vcHRp
b25zLnRlc3Q6CisgICAgICAgICAgICBsb2cuZXJyb3IoZS5tZXNzYWdlKQorICAgICAgICBlbHNl
OgorICAgICAgICAgICAgcmFpc2UgICMgRm9yY2UgdGhlIGJ1aWxkIHRvIGZhaWwuCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvY29tbWFu
ZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9jb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjU2MWI1Y2VhYjE0YzdhYzM3ZWU1MWE5YmQ3YzkyMDNmYzViYWIxMGIKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgpAQCAtMCwwICsxLDEwMCBAQAor
eworICAgICJkb21haW4iOiAiRGF0YWJhc2UiLAorICAgICJ0eXBlcyI6IFsKKyAgICAgICAgewor
ICAgICAgICAgICAgImlkIjogIkRhdGFiYXNlSWQiLAorICAgICAgICAgICAgInR5cGUiOiAiaW50
ZWdlciIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5pcXVlIGlkZW50aWZpZXIgb2Yg
RGF0YWJhc2Ugb2JqZWN0LiIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlk
IjogIlByaW1hcnlDb2xvcnMiLAorICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKKyAgICAg
ICAgICAgICJlbnVtIjogWyJyZWQiLCAiZ3JlZW4iLCAiYmx1ZSJdCisgICAgICAgIH0sCisgICAg
ICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJFcnJvciIsCisgICAgICAgICAgICAidHlwZSI6ICJv
YmplY3QiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkRhdGFiYXNlIGVycm9yLiIsCisg
ICAgICAgICAgICAicHJvcGVydGllcyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm1l
c3NhZ2UiLCAidHlwZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRpb24iOiAiRXJyb3IgbWVzc2FnZS4i
IH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2RlIiwgInR5cGUiOiAiaW50ZWdlciIs
ICJkZXNjcmlwdGlvbiI6ICJFcnJvciBjb2RlLiIgfQorICAgICAgICAgICAgXQorICAgICAgICB9
CisgICAgXSwKKyAgICAiY29tbWFuZHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1l
IjogImV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMiLAorICAgICAgICAgICAgInBh
cmFtZXRlcnMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJkYXRhYmFzZUlkIiwgIiRy
ZWYiOiAiRGF0YWJhc2VJZCIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInF1ZXJ5Iiwg
InR5cGUiOiAic3RyaW5nIiB9CisgICAgICAgICAgICBdLAorICAgICAgICAgICAgInJldHVybnMi
OiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogImFy
cmF5IiwgIm9wdGlvbmFsIjogdHJ1ZSwgIml0ZW1zIjogeyAidHlwZSI6ICJzdHJpbmciIH0gfSwK
KyAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm5vdGVzIiwgInR5cGUiOiAic3RyaW5nIiwgIm9w
dGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidGltZXN0YW1wIiwg
InR5cGUiOiAibnVtYmVyIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAidmFsdWVzIiwgInR5cGUiOiAib2JqZWN0IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAor
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicGF5bG9hZCIsICJ0eXBlIjogImFueSIsICJvcHRp
b25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImRhdGFiYXNlSWQiLCAi
JHJlZiI6ICJEYXRhYmFzZUlkIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAic3FsRXJyb3IiLCAiJHJlZiI6ICJFcnJvciIsICJvcHRpb25hbCI6IHRydWUg
fSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNjcmVlbkNvbG9yIiwgIiRyZWYiOiAiUHJp
bWFyeUNvbG9ycyIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1l
IjogInByaW50Q29sb3IiLCAidHlwZSI6ICJzdHJpbmciLCAiZW51bSI6IFsiY3lhbiIsICJtYWdl
bnRhIiwgInllbGxvdyIsICJibGFjayJdLCAib3B0aW9uYWwiOiB0cnVlIH0KKyAgICAgICAgICAg
IF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiZXhlY3V0ZVNR
TEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMiLAorICAgICAgICAgICAgImFzeW5jIjogdHJ1ZSwK
KyAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
ZGF0YWJhc2VJZCIsICIkcmVmIjogIkRhdGFiYXNlSWQiIH0sCisgICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJxdWVyeSIsICJ0eXBlIjogInN0cmluZyIgfQorICAgICAgICAgICAgXSwKKyAgICAg
ICAgICAgICJyZXR1cm5zIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29sdW1uTmFt
ZXMiLCAidHlwZSI6ICJhcnJheSIsICJvcHRpb25hbCI6IHRydWUsICJpdGVtcyI6IHsgInR5cGUi
OiAic3RyaW5nIiB9IH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJub3RlcyIsICJ0eXBl
IjogInN0cmluZyIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1l
IjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogInZhbHVlcyIsICJ0eXBlIjogIm9iamVjdCIsICJvcHRp
b25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBheWxvYWQiLCAidHlw
ZSI6ICJhbnkiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJkYXRhYmFzZUlkIiwgIiRyZWYiOiAiRGF0YWJhc2VJZCIsICJvcHRpb25hbCI6IHRydWUgfSwK
KyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNxbEVycm9yIiwgIiRyZWYiOiAiRXJyb3IiLCAi
b3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzY3JlZW5Db2xv
ciIsICIkcmVmIjogIlByaW1hcnlDb2xvcnMiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJwcmludENvbG9yIiwgInR5cGUiOiAic3RyaW5nIiwgImVudW0i
OiBbImN5YW4iLCAibWFnZW50YSIsICJ5ZWxsb3ciLCAiYmxhY2siXSwgIm9wdGlvbmFsIjogdHJ1
ZSB9CisgICAgICAgICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJu
YW1lIjogImV4ZWN1dGVTUUxTeW5jIiwKKyAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWworICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAiZGF0YWJhc2VJZCIsICIkcmVmIjogIkRhdGFiYXNlSWQi
IH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJxdWVyeSIsICJ0eXBlIjogInN0cmluZyIg
fQorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICJyZXR1cm5zIjogWworICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJhcnJheSIsICJpdGVtcyI6IHsg
InR5cGUiOiAic3RyaW5nIiB9IH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJub3RlcyIs
ICJ0eXBlIjogInN0cmluZyIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRpbWVzdGFt
cCIsICJ0eXBlIjogIm51bWJlciIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInZhbHVl
cyIsICJ0eXBlIjogIm9iamVjdCIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBheWxv
YWQiLCAidHlwZSI6ICJhbnkiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJkYXRhYmFz
ZUlkIiwgIiRyZWYiOiAiRGF0YWJhc2VJZCIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjog
InNxbEVycm9yIiwgIiRyZWYiOiAiRXJyb3IiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJzY3JlZW5Db2xvciIsICIkcmVmIjogIlByaW1hcnlDb2xvcnMiIH0sCisgICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJwcmludENvbG9yIiwgInR5cGUiOiAic3RyaW5nIiwgImVudW0iOiBbImN5
YW4iLCAibWFnZW50YSIsICJ5ZWxsb3ciLCAiYmxhY2siXSB9CisgICAgICAgICAgICBdCisgICAg
ICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImV4ZWN1dGVTUUxBc3luYyIs
CisgICAgICAgICAgICAiYXN5bmMiOiB0cnVlLAorICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBb
CisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJkYXRhYmFzZUlkIiwgIiRyZWYiOiAiRGF0YWJh
c2VJZCIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInF1ZXJ5IiwgInR5cGUiOiAic3Ry
aW5nIiB9CisgICAgICAgICAgICBdLAorICAgICAgICAgICAgInJldHVybnMiOiBbCisgICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogImFycmF5IiwgIml0ZW1z
IjogeyAidHlwZSI6ICJzdHJpbmciIH0gfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm5v
dGVzIiwgInR5cGUiOiAic3RyaW5nIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidGlt
ZXN0YW1wIiwgInR5cGUiOiAibnVtYmVyIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
dmFsdWVzIiwgInR5cGUiOiAib2JqZWN0IiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
cGF5bG9hZCIsICJ0eXBlIjogImFueSIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImRh
dGFiYXNlSWQiLCAiJHJlZiI6ICJEYXRhYmFzZUlkIiB9LAorICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAic3FsRXJyb3IiLCAiJHJlZiI6ICJFcnJvciIgfSwKKyAgICAgICAgICAgICAgICB7ICJu
YW1lIjogInNjcmVlbkNvbG9yIiwgIiRyZWYiOiAiUHJpbWFyeUNvbG9ycyIgfSwKKyAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogInByaW50Q29sb3IiLCAidHlwZSI6ICJzdHJpbmciLCAiZW51bSI6
IFsiY3lhbiIsICJtYWdlbnRhIiwgInllbGxvdyIsICJibGFjayJdIH0KKyAgICAgICAgICAgIF0K
KyAgICAgICAgfQorICAgIF0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9jb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJu
LXBhcmFtZXRlcnMuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9jb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNv
bgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4zODU2MWU3MzQ1NzU1N2I5NTBjYWJjY2RjMmU5OWE5YTNjMTkzNDBjCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2NvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29u
CkBAIC0wLDAgKzEsNzYgQEAKK3sKKyAgICAiZG9tYWluIjogIkRhdGFiYXNlIiwKKyAgICAidHlw
ZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJEYXRhYmFzZUlkIiwKKyAgICAg
ICAgICAgICJ0eXBlIjogImludGVnZXIiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVu
aXF1ZSBpZGVudGlmaWVyIG9mIERhdGFiYXNlIG9iamVjdC4iCisgICAgICAgIH0sCisgICAgICAg
IHsKKyAgICAgICAgICAgICJpZCI6ICJQcmltYXJ5Q29sb3JzIiwKKyAgICAgICAgICAgICJ0eXBl
IjogInN0cmluZyIsCisgICAgICAgICAgICAiZW51bSI6IFsicmVkIiwgImdyZWVuIiwgImJsdWUi
XQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiRXJyb3IiLAorICAg
ICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJE
YXRhYmFzZSBlcnJvci4iLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCisgICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJtZXNzYWdlIiwgInR5cGUiOiAic3RyaW5nIiwgImRlc2NyaXB0aW9u
IjogIkVycm9yIG1lc3NhZ2UuIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29kZSIs
ICJ0eXBlIjogImludGVnZXIiLCAiZGVzY3JpcHRpb24iOiAiRXJyb3IgY29kZS4iIH0KKyAgICAg
ICAgICAgIF0KKyAgICAgICAgfQorICAgIF0sCisgICAgImNvbW1hbmRzIjogWworICAgICAgICB7
CisgICAgICAgICAgICAibmFtZSI6ICJleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzIiwKKyAg
ICAgICAgICAgICJwYXJhbWV0ZXJzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29s
dW1uTmFtZXMiLCAidHlwZSI6ICJhcnJheSIsICJvcHRpb25hbCI6IHRydWUsICJpdGVtcyI6IHsg
InR5cGUiOiAic3RyaW5nIiB9IH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJub3RlcyIs
ICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7
ICJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciIsICJvcHRpb25hbCI6IHRydWUg
fSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInZhbHVlcyIsICJ0eXBlIjogIm9iamVjdCIs
ICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBheWxvYWQi
LCAidHlwZSI6ICJhbnkiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJkYXRhYmFzZUlkIiwgIiRyZWYiOiAiRGF0YWJhc2VJZCIsICJvcHRpb25hbCI6IHRy
dWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNxbEVycm9yIiwgIiRyZWYiOiAiRXJy
b3IiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzY3Jl
ZW5Db2xvciIsICIkcmVmIjogIlByaW1hcnlDb2xvcnMiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisg
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwcmludENvbG9yIiwgInR5cGUiOiAic3RyaW5nIiwg
ImVudW0iOiBbImN5YW4iLCAibWFnZW50YSIsICJ5ZWxsb3ciLCAiYmxhY2siXSwgIm9wdGlvbmFs
IjogdHJ1ZSB9CisgICAgICAgICAgICBdLAorICAgICAgICAgICAgInJldHVybnMiOiBbCisgICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogImFycmF5IiwgIm9w
dGlvbmFsIjogdHJ1ZSwgIml0ZW1zIjogeyAidHlwZSI6ICJzdHJpbmciIH0gfSwKKyAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogIm5vdGVzIiwgInR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjog
dHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidGltZXN0YW1wIiwgInR5cGUiOiAi
bnVtYmVyIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
dmFsdWVzIiwgInR5cGUiOiAib2JqZWN0IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAicGF5bG9hZCIsICJ0eXBlIjogImFueSIsICJvcHRpb25hbCI6IHRy
dWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImRhdGFiYXNlSWQiLCAiJHJlZiI6ICJE
YXRhYmFzZUlkIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAic3FsRXJyb3IiLCAiJHJlZiI6ICJFcnJvciIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogInNjcmVlbkNvbG9yIiwgIiRyZWYiOiAiUHJpbWFyeUNvbG9y
cyIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInByaW50
Q29sb3IiLCAidHlwZSI6ICJzdHJpbmciLCAiZW51bSI6IFsiY3lhbiIsICJtYWdlbnRhIiwgInll
bGxvdyIsICJibGFjayJdLCAib3B0aW9uYWwiOiB0cnVlIH0KKyAgICAgICAgICAgIF0KKyAgICAg
ICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiZXhlY3V0ZU5vT3B0aW9uYWxQ
YXJhbWV0ZXJzIiwKKyAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWworICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJhcnJheSIsICJpdGVtcyI6IHsgInR5
cGUiOiAic3RyaW5nIiB9IH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJub3RlcyIsICJ0
eXBlIjogInN0cmluZyIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRpbWVzdGFtcCIs
ICJ0eXBlIjogIm51bWJlciIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInZhbHVlcyIs
ICJ0eXBlIjogIm9iamVjdCIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBheWxvYWQi
LCAidHlwZSI6ICJhbnkiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJkYXRhYmFzZUlk
IiwgIiRyZWYiOiAiRGF0YWJhc2VJZCIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNx
bEVycm9yIiwgIiRyZWYiOiAiRXJyb3IiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJz
Y3JlZW5Db2xvciIsICIkcmVmIjogIlByaW1hcnlDb2xvcnMiIH0sCisgICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJwcmludENvbG9yIiwgInR5cGUiOiAic3RyaW5nIiwgImVudW0iOiBbImN5YW4i
LCAibWFnZW50YSIsICJ5ZWxsb3ciLCAiYmxhY2siXSB9CisgICAgICAgICAgICBdLAorICAgICAg
ICAgICAgInJldHVybnMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2x1bW5OYW1l
cyIsICJ0eXBlIjogImFycmF5IiwgIml0ZW1zIjogeyAidHlwZSI6ICJzdHJpbmciIH0gfSwKKyAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogIm5vdGVzIiwgInR5cGUiOiAic3RyaW5nIiB9LAorICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAidGltZXN0YW1wIiwgInR5cGUiOiAibnVtYmVyIiB9LAor
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidmFsdWVzIiwgInR5cGUiOiAib2JqZWN0IiB9LAor
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicGF5bG9hZCIsICJ0eXBlIjogImFueSIgfSwKKyAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogImRhdGFiYXNlSWQiLCAiJHJlZiI6ICJEYXRhYmFzZUlk
IiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic3FsRXJyb3IiLCAiJHJlZiI6ICJFcnJv
ciIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNjcmVlbkNvbG9yIiwgIiRyZWYiOiAi
UHJpbWFyeUNvbG9ycyIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInByaW50Q29sb3Ii
LCAidHlwZSI6ICJzdHJpbmciLCAiZW51bSI6IFsiY3lhbiIsICJtYWdlbnRhIiwgInllbGxvdyIs
ICJibGFjayJdIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0KK30KZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9kb21haW5z
LXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXpl
cy5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjk0YThlY2IxNzZkM2I4ZWM5YmY5NjY3NmU2M2NlYTA1MTQ2NmI4
NjgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCkBAIC0w
LDAgKzEsNTQgQEAKK1sKK3sKKyAgICAiZG9tYWluIjogIk5ldHdvcmsxIiwKKyAgICAiY29tbWFu
ZHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImxvYWRSZXNvdXJjZTEiLAor
ICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkxvYWRzIGEgcmVzb3VyY2UgaW4gdGhlIGNvbnRl
eHQgb2YgYSBmcmFtZSBvbiB0aGUgaW5zcGVjdGVkIHBhZ2Ugd2l0aG91dCBjcm9zcyBvcmlnaW4g
Y2hlY2tzLiIKKyAgICAgICAgfQorICAgIF0KK30sCit7CisgICAgImRvbWFpbiI6ICJOZXR3b3Jr
MiIsCisgICAgInR5cGVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiTG9hZGVy
SWQiLAorICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKKyAgICAgICAgICAgICJkZXNjcmlw
dGlvbiI6ICJVbmlxdWUgbG9hZGVyIGlkZW50aWZpZXIuIgorICAgICAgICB9CisgICAgXQorfSwK
K3sKKyAgICAiZG9tYWluIjogIk5ldHdvcmszIiwKKyAgICAiY29tbWFuZHMiOiBbCisgICAgICAg
IHsKKyAgICAgICAgICAgICJuYW1lIjogImxvYWRSZXNvdXJjZTEiLAorICAgICAgICAgICAgImRl
c2NyaXB0aW9uIjogIkxvYWRzIGEgcmVzb3VyY2UgaW4gdGhlIGNvbnRleHQgb2YgYSBmcmFtZSBv
biB0aGUgaW5zcGVjdGVkIHBhZ2Ugd2l0aG91dCBjcm9zcyBvcmlnaW4gY2hlY2tzLiIKKyAgICAg
ICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAibG9hZFJlc291cmNlMiIsCisg
ICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiTG9hZHMgYSByZXNvdXJjZSBpbiB0aGUgY29udGV4
dCBvZiBhIGZyYW1lIG9uIHRoZSBpbnNwZWN0ZWQgcGFnZSB3aXRob3V0IGNyb3NzIG9yaWdpbiBj
aGVja3MuIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJsb2Fk
UmVzb3VyY2UzIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJMb2FkcyBhIHJlc291cmNl
IGluIHRoZSBjb250ZXh0IG9mIGEgZnJhbWUgb24gdGhlIGluc3BlY3RlZCBwYWdlIHdpdGhvdXQg
Y3Jvc3Mgb3JpZ2luIGNoZWNrcy4iCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAg
ICJuYW1lIjogImxvYWRSZXNvdXJjZTQiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkxv
YWRzIGEgcmVzb3VyY2UgaW4gdGhlIGNvbnRleHQgb2YgYSBmcmFtZSBvbiB0aGUgaW5zcGVjdGVk
IHBhZ2Ugd2l0aG91dCBjcm9zcyBvcmlnaW4gY2hlY2tzLiIKKyAgICAgICAgfSwKKyAgICAgICAg
eworICAgICAgICAgICAgIm5hbWUiOiAibG9hZFJlc291cmNlNSIsCisgICAgICAgICAgICAiZGVz
Y3JpcHRpb24iOiAiTG9hZHMgYSByZXNvdXJjZSBpbiB0aGUgY29udGV4dCBvZiBhIGZyYW1lIG9u
IHRoZSBpbnNwZWN0ZWQgcGFnZSB3aXRob3V0IGNyb3NzIG9yaWdpbiBjaGVja3MuIgorICAgICAg
ICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJsb2FkUmVzb3VyY2U2IiwKKyAg
ICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJMb2FkcyBhIHJlc291cmNlIGluIHRoZSBjb250ZXh0
IG9mIGEgZnJhbWUgb24gdGhlIGluc3BlY3RlZCBwYWdlIHdpdGhvdXQgY3Jvc3Mgb3JpZ2luIGNo
ZWNrcy4iCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImxvYWRS
ZXNvdXJjZTciLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkxvYWRzIGEgcmVzb3VyY2Ug
aW4gdGhlIGNvbnRleHQgb2YgYSBmcmFtZSBvbiB0aGUgaW5zcGVjdGVkIHBhZ2Ugd2l0aG91dCBj
cm9zcyBvcmlnaW4gY2hlY2tzLiIKKyAgICAgICAgfQorICAgIF0KK30KK10KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9ldmVudHMtd2l0
aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjVlZmM3Y2IzMTliMGIzNmZhOTVjNDcxNDAzMDUzNzc4NjI0YWZjMTMKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uCkBAIC0wLDAgKzEsNTIgQEAK
K3sKKyAgICAiZG9tYWluIjogIkRhdGFiYXNlIiwKKyAgICAidHlwZXMiOiBbCisgICAgICAgIHsK
KyAgICAgICAgICAgICJpZCI6ICJEYXRhYmFzZUlkIiwKKyAgICAgICAgICAgICJ0eXBlIjogInN0
cmluZyIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5pcXVlIGlkZW50aWZpZXIgb2Yg
RGF0YWJhc2Ugb2JqZWN0LiIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlk
IjogIlByaW1hcnlDb2xvcnMiLAorICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKKyAgICAg
ICAgICAgICJ2YWx1ZXMiOiBbInJlZCIsICJncmVlbiIsICJibHVlIl0KKyAgICAgICAgfSwKKyAg
ICAgICAgeworICAgICAgICAgICAgImlkIjogIkVycm9yIiwKKyAgICAgICAgICAgICJ0eXBlIjog
Im9iamVjdCIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiRGF0YWJhc2UgZXJyb3IuIiwK
KyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
bWVzc2FnZSIsICJ0eXBlIjogInN0cmluZyIsICJkZXNjcmlwdGlvbiI6ICJFcnJvciBtZXNzYWdl
LiIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvZGUiLCAidHlwZSI6ICJpbnRlZ2Vy
IiwgImRlc2NyaXB0aW9uIjogIkVycm9yIGNvZGUuIiB9CisgICAgICAgICAgICBdCisgICAgICAg
IH0KKyAgICBdLAorICAgICJldmVudHMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1l
IjogImRpZEV4ZWN1dGVPcHRpb25hbFBhcmFtZXRlcnMiLAorICAgICAgICAgICAgInBhcmFtZXRl
cnMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjog
ImFycmF5IiwgIm9wdGlvbmFsIjogdHJ1ZSwgIml0ZW1zIjogeyAidHlwZSI6ICJzdHJpbmciIH0g
fSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm5vdGVzIiwgInR5cGUiOiAic3RyaW5nIiwg
Im9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidGltZXN0YW1w
IiwgInR5cGUiOiAibnVtYmVyIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAidmFsdWVzIiwgInR5cGUiOiAib2JqZWN0IiwgIm9wdGlvbmFsIjogdHJ1ZSB9
LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicGF5bG9hZCIsICJ0eXBlIjogImFueSIsICJv
cHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNxbEVycm9yIiwg
IiRyZWYiOiAiRXJyb3IiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJzY3JlZW5Db2xvciIsICIkcmVmIjogIlByaW1hcnlDb2xvcnMiLCAib3B0aW9uYWwi
OiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwcmludENvbG9yIiwgInR5cGUi
OiAic3RyaW5nIiwgInZhbHVlcyI6IFsiY3lhbiIsICJtYWdlbnRhIiwgInllbGxvdyIsICJibGFj
ayJdLCAib3B0aW9uYWwiOiB0cnVlIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAg
ICAgeworICAgICAgICAgICAgIm5hbWUiOiAiZGlkRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJz
IiwKKyAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJhcnJheSIsICJpdGVtcyI6IHsgInR5cGUiOiAic3Ry
aW5nIiB9IH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0
cmluZyIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjog
Im51bWJlciIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInZhbHVlcyIsICJ0eXBlIjog
Im9iamVjdCIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBheWxvYWQiLCAidHlwZSI6
ICJhbnkiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzcWxFcnJvciIsICIkcmVmIjog
IkVycm9yIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic2NyZWVuQ29sb3IiLCAiJHJl
ZiI6ICJQcmltYXJ5Q29sb3JzIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicHJpbnRD
b2xvciIsICJ0eXBlIjogInN0cmluZyIsICJ2YWx1ZXMiOiBbImN5YW4iLCAibWFnZW50YSIsICJ5
ZWxsb3ciLCAiYmxhY2siXSB9CisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdCit9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
ZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbi1yZXN1bHQgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvY29tbWFu
ZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbi1yZXN1bHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTViN2NhZTQy
YjY5YTJhNzFiOTk0OWVjMGNiZjkzNDU1MDEzMWEyMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9jb21tYW5k
cy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uLXJlc3VsdApAQCAtMCwwICsxLDczOCBAQAorIyMj
IEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kQ29tbWFuZHMuanMKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNv
bgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2NvZGVnZW4vZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKy8v
IERhdGFiYXNlLgorSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRhdGFiYXNlRGlzcGF0Y2hlciA9
IEluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW5EaXNwYXRjaGVyLmJpbmQoSW5zcGVjdG9y
QmFja2VuZCwgIkRhdGFiYXNlIik7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRW51bSgiRGF0
YWJhc2UuUHJpbWFyeUNvbG9ycyIsIHtSZWQ6ICJyZWQiLCBHcmVlbjogImdyZWVuIiwgQmx1ZTog
ImJsdWUifSk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiRGF0YWJhc2UuZXhl
Y3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyIsIFt7Im5hbWUiOiAiZGF0YWJhc2VJZCIs
ICJ0eXBlIjogIm51bWJlciIsICJvcHRpb25hbCI6IGZhbHNlfSwgeyJuYW1lIjogInF1ZXJ5Iiwg
InR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjogZmFsc2V9XSwgWyJjb2x1bW5OYW1lcyIsICJu
b3RlcyIsICJ0aW1lc3RhbXAiLCAidmFsdWVzIiwgInBheWxvYWQiLCAiZGF0YWJhc2VJZCIsICJz
cWxFcnJvciIsICJzY3JlZW5Db2xvciIsICJwcmludENvbG9yIl0pOworSW5zcGVjdG9yQmFja2Vu
ZC5yZWdpc3RlckNvbW1hbmQoIkRhdGFiYXNlLmV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJu
VmFsdWVzIiwgW3sibmFtZSI6ICJkYXRhYmFzZUlkIiwgInR5cGUiOiAibnVtYmVyIiwgIm9wdGlv
bmFsIjogZmFsc2V9LCB7Im5hbWUiOiAicXVlcnkiLCAidHlwZSI6ICJzdHJpbmciLCAib3B0aW9u
YWwiOiBmYWxzZX1dLCBbImNvbHVtbk5hbWVzIiwgIm5vdGVzIiwgInRpbWVzdGFtcCIsICJ2YWx1
ZXMiLCAicGF5bG9hZCIsICJkYXRhYmFzZUlkIiwgInNxbEVycm9yIiwgInNjcmVlbkNvbG9yIiwg
InByaW50Q29sb3IiXSk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiRGF0YWJh
c2UuZXhlY3V0ZVNRTFN5bmMiLCBbeyJuYW1lIjogImRhdGFiYXNlSWQiLCAidHlwZSI6ICJudW1i
ZXIiLCAib3B0aW9uYWwiOiBmYWxzZX0sIHsibmFtZSI6ICJxdWVyeSIsICJ0eXBlIjogInN0cmlu
ZyIsICJvcHRpb25hbCI6IGZhbHNlfV0sIFsiY29sdW1uTmFtZXMiLCAibm90ZXMiLCAidGltZXN0
YW1wIiwgInZhbHVlcyIsICJwYXlsb2FkIiwgImRhdGFiYXNlSWQiLCAic3FsRXJyb3IiLCAic2Ny
ZWVuQ29sb3IiLCAicHJpbnRDb2xvciJdKTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21t
YW5kKCJEYXRhYmFzZS5leGVjdXRlU1FMQXN5bmMiLCBbeyJuYW1lIjogImRhdGFiYXNlSWQiLCAi
dHlwZSI6ICJudW1iZXIiLCAib3B0aW9uYWwiOiBmYWxzZX0sIHsibmFtZSI6ICJxdWVyeSIsICJ0
eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IGZhbHNlfV0sIFsiY29sdW1uTmFtZXMiLCAibm90
ZXMiLCAidGltZXN0YW1wIiwgInZhbHVlcyIsICJwYXlsb2FkIiwgImRhdGFiYXNlSWQiLCAic3Fs
RXJyb3IiLCAic2NyZWVuQ29sb3IiLCAicHJpbnRDb2xvciJdKTsKKyMjIyBFbmQgRmlsZTogSW5z
cGVjdG9yVGVzdEJhY2tlbmRDb21tYW5kcy5qcworCisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9y
VGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIGNvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaWZuZGVmIEluc3BlY3RvclRlc3RC
YWNrZW5kRGlzcGF0Y2hlcnNfaAorI2RlZmluZSBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNo
ZXJzX2gKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRlICJJbnNwZWN0b3JUZXN0
VHlwZUJ1aWxkZXJzLmgiCisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3R5cGVkZWYgU3RyaW5n
IEVycm9yU3RyaW5nOworCisjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKK2NsYXNzIEluc3BlY3Rv
ckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKK3B1YmxpYzoKKyAgICAvLyBOYW1l
ZCBhZnRlciBwYXJhbWV0ZXIgJ3NjcmVlbkNvbG9yJyB3aGlsZSBnZW5lcmF0aW5nIGNvbW1hbmQv
ZXZlbnQgZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcy4KKyAgICBlbnVtIGNsYXNz
IFNjcmVlbkNvbG9yIHsKKyAgICAgICAgUmVkID0gMCwKKyAgICAgICAgR3JlZW4gPSAxLAorICAg
ICAgICBCbHVlID0gMiwKKyAgICB9OyAvLyBlbnVtIGNsYXNzIFNjcmVlbkNvbG9yCisgICAgLy8g
TmFtZWQgYWZ0ZXIgcGFyYW1ldGVyICdwcmludENvbG9yJyB3aGlsZSBnZW5lcmF0aW5nIGNvbW1h
bmQvZXZlbnQgZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcy4KKyAgICBlbnVtIGNs
YXNzIFByaW50Q29sb3IgeworICAgICAgICBDeWFuID0gMywKKyAgICAgICAgTWFnZW50YSA9IDQs
CisgICAgICAgIFllbGxvdyA9IDUsCisgICAgICAgIEJsYWNrID0gNiwKKyAgICB9OyAvLyBlbnVt
IGNsYXNzIFByaW50Q29sb3IKKyAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNRTFN5bmNPcHRpb25h
bFJldHVyblZhbHVlcyhFcnJvclN0cmluZyosIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJp
bmcmIGluX3F1ZXJ5LCBSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk8U3RyaW5n
Pj4mIG9wdF9vdXRfY29sdW1uTmFtZXMsIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6Ok9wdE91dHB1
dDxTdHJpbmc+KiBvcHRfb3V0X25vdGVzLCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpPcHRPdXRw
dXQ8ZG91YmxlPiogb3B0X291dF90aW1lc3RhbXAsIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6Ok9w
dE91dHB1dDxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4qIG9wdF9vdXRfdmFsdWVzLCBJbnNw
ZWN0b3I6OlR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4q
IG9wdF9vdXRfcGF5bG9hZCwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6T3B0T3V0cHV0PGludD4q
IG9wdF9vdXRfZGF0YWJhc2VJZCwgUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkRhdGFi
YXNlOjpFcnJvcj4mIG9wdF9vdXRfc3FsRXJyb3IsIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkRh
dGFiYXNlOjpQcmltYXJ5Q29sb3JzKiBvcHRfb3V0X3NjcmVlbkNvbG9yLCBJbnNwZWN0b3JEYXRh
YmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UHJpbnRDb2xvciogb3B0X291dF9wcmludENv
bG9yKSA9IDA7CisgICAgY2xhc3MgRXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXND
YWxsYmFjayA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpD
YWxsYmFja0Jhc2UgeworICAgIHB1YmxpYzoKKyAgICAgICAgRXhlY3V0ZVNRTEFzeW5jT3B0aW9u
YWxSZXR1cm5WYWx1ZXNDYWxsYmFjayhQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXI+LCBpbnQgaWQpOworICAgICAgICB2b2lkIHNlbmRTdWNjZXNzKFBhc3NS
ZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk8U3RyaW5nPj4gY29sdW1uTmFtZXMs
IEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6Ok9wdE91dHB1dDxTdHJpbmc+KiBub3RlcywgSW5zcGVj
dG9yOjpUeXBlQnVpbGRlcjo6T3B0T3V0cHV0PGRvdWJsZT4qIHRpbWVzdGFtcCwgSW5zcGVjdG9y
OjpUeXBlQnVpbGRlcjo6T3B0T3V0cHV0PEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiogdmFs
dWVzLCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8SW5zcGVjdG9yOjpJbnNwZWN0
b3JWYWx1ZT4qIHBheWxvYWQsIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6Ok9wdE91dHB1dDxpbnQ+
KiBkYXRhYmFzZUlkLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkRhdGFiYXNl
OjpFcnJvcj4gc3FsRXJyb3IsIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6Ok9wdE91dHB1dDxTdHJp
bmc+KiBzY3JlZW5Db2xvciwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6T3B0T3V0cHV0PFN0cmlu
Zz4qIHByaW50Q29sb3IpOworICAgIH07CisgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVTUUxBc3lu
Y09wdGlvbmFsUmV0dXJuVmFsdWVzKEVycm9yU3RyaW5nKiwgaW50IGluX2RhdGFiYXNlSWQsIGNv
bnN0IFN0cmluZyYgaW5fcXVlcnksIFBhc3NSZWZQdHI8RXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxS
ZXR1cm5WYWx1ZXNDYWxsYmFjaz4gY2FsbGJhY2spID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZXhl
Y3V0ZVNRTFN5bmMoRXJyb3JTdHJpbmcqLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5n
JiBpbl9xdWVyeSwgUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5PFN0cmluZz4+
JiBvdXRfY29sdW1uTmFtZXMsIFN0cmluZyogb3V0X25vdGVzLCBkb3VibGUqIG91dF90aW1lc3Rh
bXAsIEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0KiBvdXRfdmFsdWVzLCBJbnNwZWN0b3I6Oklu
c3BlY3RvclZhbHVlKiBvdXRfcGF5bG9hZCwgaW50KiBvdXRfZGF0YWJhc2VJZCwgUmVmUHRyPElu
c3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkRhdGFiYXNlOjpFcnJvcj4mIG91dF9zcWxFcnJvciwgSW5z
cGVjdG9yOjpUeXBlQnVpbGRlcjo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMqIG91dF9zY3JlZW5D
b2xvciwgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29s
b3IqIG91dF9wcmludENvbG9yKSA9IDA7CisgICAgY2xhc3MgRXhlY3V0ZVNRTEFzeW5jQ2FsbGJh
Y2sgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJh
Y2tCYXNlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIEV4ZWN1dGVTUUxBc3luY0NhbGxiYWNrKFBh
c3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4sIGludCBpZCk7
CisgICAgICAgIHZvaWQgc2VuZFN1Y2Nlc3MoUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWls
ZGVyOjpBcnJheTxTdHJpbmc+PiBjb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBub3RlcywgZG91
YmxlIHRpbWVzdGFtcCwgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QgdmFsdWVzLCBJbnNwZWN0
b3I6Okluc3BlY3RvclZhbHVlIHBheWxvYWQsIGludCBkYXRhYmFzZUlkLCBQYXNzUmVmUHRyPElu
c3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkRhdGFiYXNlOjpFcnJvcj4gc3FsRXJyb3IsIGNvbnN0IFN0
cmluZyYgc2NyZWVuQ29sb3IsIGNvbnN0IFN0cmluZyYgcHJpbnRDb2xvcik7CisgICAgfTsKKyAg
ICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNRTEFzeW5jKEVycm9yU3RyaW5nKiwgaW50IGluX2RhdGFi
YXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnksIFBhc3NSZWZQdHI8RXhlY3V0ZVNRTEFzeW5j
Q2FsbGJhY2s+IGNhbGxiYWNrKSA9IDA7Citwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB+SW5zcGVj
dG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKTsKK307CisjZW5kaWYgLy8gRU5B
QkxFKFNRTF9EQVRBQkFTRSkKKworI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCitjbGFzcyBJbnNw
ZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEluc3BlY3Rvcjo6
SW5zcGVjdG9yU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHN0
YXRpYyBQYXNzUmVmUHRyPEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0
ZShJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiwgSW5zcGVjdG9yRGF0YWJh
c2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2go
bG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6
SW5zcGVjdG9yT2JqZWN0PiBtZXNzYWdlKSBvdmVycmlkZTsKK3ByaXZhdGU6CisgICAgdm9pZCBl
eGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgY2FsbElkLCBjb25zdCBJbnNw
ZWN0b3I6Okluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7CisgICAgdm9pZCBleGVjdXRlU1FMQXN5
bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yOjpJbnNw
ZWN0b3JPYmplY3QmIG1lc3NhZ2UpOworICAgIHZvaWQgZXhlY3V0ZVNRTFN5bmMobG9uZyBjYWxs
SWQsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsKKyAgICB2b2lk
IGV4ZWN1dGVTUUxBc3luYyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JP
YmplY3QmIG1lc3NhZ2UpOworcHJpdmF0ZToKKyAgICBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmRE
aXNwYXRjaGVyKEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqLCBJbnNwZWN0
b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOworICAgIEluc3BlY3RvckRhdGFi
YXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBtX2FnZW50OworfTsKKyNlbmRpZiAvLyBFTkFC
TEUoU1FMX0RBVEFCQVNFKQorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8v
IEVOQUJMRShJTlNQRUNUT1IpCisKKyNlbmRpZiAvLyAhZGVmaW5lZChJbnNwZWN0b3JUZXN0QmFj
a2VuZERpc3BhdGNoZXJzX2gpCisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kRGlz
cGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRj
aGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0
aC1hc3luYy1hdHRyaWJ1dGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnNwZWN0
b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisj
aW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oPgorI2luY2x1ZGUg
PGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5n
Lmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkK
K0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjp+SW5zcGVjdG9yRGF0
YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKSB7IH0KKyNlbmRpZiAvLyBFTkFCTEUoU1FM
X0RBVEFCQVNFKQorCisjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKK1Bhc3NSZWZQdHI8SW5zcGVj
dG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcj4gSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlz
cGF0Y2hlcjo6Y3JlYXRlKEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0
Y2hlciwgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQor
eworICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0
Y2hlcihiYWNrZW5kRGlzcGF0Y2hlciwgYWdlbnQpKTsKK30KKworSW5zcGVjdG9yRGF0YWJhc2VC
YWNrZW5kRGlzcGF0Y2hlcjo6SW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcihJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIsIEluc3BlY3RvckRhdGFi
YXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKKyAgICA6IEluc3BlY3RvclN1cHBs
ZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyKQorICAgICwgbV9hZ2Vu
dChhZ2VudCkKK3sKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJG
b3JEb21haW4oQVNDSUlMaXRlcmFsKCJEYXRhYmFzZSIpLCB0aGlzKTsKK30KKwordm9pZCBJbnNw
ZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIGNhbGxJZCwgY29u
c3QgU3RyaW5nJiBtZXRob2QsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtZXNzYWdlKQor
eworICAgIFJlZjxJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0
aGlzKTsKKworICAgIGlmIChtZXRob2QgPT0gImV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5W
YWx1ZXMiKQorICAgICAgICBleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGNhbGxJ
ZCwgKm1lc3NhZ2UuZ2V0KCkpOworICAgIGVsc2UgaWYgKG1ldGhvZCA9PSAiZXhlY3V0ZVNRTEFz
eW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMiKQorICAgICAgICBleGVjdXRlU1FMQXN5bmNPcHRpb25h
bFJldHVyblZhbHVlcyhjYWxsSWQsICptZXNzYWdlLmdldCgpKTsKKyAgICBlbHNlIGlmIChtZXRo
b2QgPT0gImV4ZWN1dGVTUUxTeW5jIikKKyAgICAgICAgZXhlY3V0ZVNRTFN5bmMoY2FsbElkLCAq
bWVzc2FnZS5nZXQoKSk7CisgICAgZWxzZSBpZiAobWV0aG9kID09ICJleGVjdXRlU1FMQXN5bmMi
KQorICAgICAgICBleGVjdXRlU1FMQXN5bmMoY2FsbElkLCAqbWVzc2FnZS5nZXQoKSk7CisgICAg
ZWxzZQorICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKCZj
YWxsSWQsIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgU3RyaW5n
KCInIikgKyAiRGF0YWJhc2UiICsgJy4nICsgbWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOwor
fQorCit2b2lkIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxT
eW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVj
dCYgbWVzc2FnZSkKK3sKKyAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3Jz
ID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHBhcmFtc0NvbnRhaW5lciA9IG1lc3NhZ2UuZ2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicGFyYW1z
IikpOworICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29u
dGFpbmVyLmdldCgpOworICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHBy
b3RvY29sRXJyb3JzLmdldCgpOworICAgIGludCBpbl9kYXRhYmFzZUlkID0gSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXI6OmdldEludChwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgi
ZGF0YWJhc2VJZCIpLCBudWxscHRyLCBwcm90b2NvbEVycm9yc1B0cik7CisgICAgU3RyaW5nIGlu
X3F1ZXJ5ID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldFN0cmluZyhwYXJhbXNDb250
YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgicXVlcnkiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnNQ
dHIpOworICAgIGlmIChwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKKyAgICAgICAgU3RyaW5n
IGVycm9yTWVzc2FnZSA9IFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2Qg
JyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiRGF0YWJhc2UuZXhlY3V0ZVNRTFN5bmNPcHRpb25h
bFJldHVyblZhbHVlcyIpOworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90
b2NvbEVycm9yKCZjYWxsSWQsIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFy
YW1zLCBlcnJvck1lc3NhZ2UsIHByb3RvY29sRXJyb3JzLnJlbGVhc2UoKSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBFcnJvclN0cmluZyBlcnJvcjsKKyAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZlB0
cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheTxTdHJpbmc+PiBvdXRfY29sdW1uTmFtZXM7
CisgICAgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6T3B0T3V0cHV0PFN0cmluZz4gb3V0X25vdGVz
OworICAgIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6Ok9wdE91dHB1dDxkb3VibGU+IG91dF90aW1l
c3RhbXA7CisgICAgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6T3B0T3V0cHV0PEluc3BlY3Rvcjo6
SW5zcGVjdG9yT2JqZWN0PiBvdXRfdmFsdWVzOworICAgIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6
Ok9wdE91dHB1dDxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiBvdXRfcGF5bG9hZDsKKyAgICBJ
bnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6
RGF0YWJhc2U6OkRhdGFiYXNlSWQ+IG91dF9kYXRhYmFzZUlkOworICAgIFJlZlB0cjxJbnNwZWN0
b3I6OlR5cGVCdWlsZGVyOjpEYXRhYmFzZTo6RXJyb3I+IG91dF9zcWxFcnJvcjsKKyAgICBJbnNw
ZWN0b3I6OlR5cGVCdWlsZGVyOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyBvdXRfc2NyZWVuQ29s
b3I7CisgICAgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50
Q29sb3Igb3V0X3ByaW50Q29sb3I7CisgICAgbV9hZ2VudC0+ZXhlY3V0ZVNRTFN5bmNPcHRpb25h
bFJldHVyblZhbHVlcygmZXJyb3IsIGluX2RhdGFiYXNlSWQsIGluX3F1ZXJ5LCBvdXRfY29sdW1u
TmFtZXMsICZvdXRfbm90ZXMsICZvdXRfdGltZXN0YW1wLCBvdXRfdmFsdWVzLCAmb3V0X3BheWxv
YWQsICZvdXRfZGF0YWJhc2VJZCwgb3V0X3NxbEVycm9yLCAmb3V0X3NjcmVlbkNvbG9yLCAmb3V0
X3ByaW50Q29sb3IpOworCisgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkgeworICAgICAgICBpZiAo
b3V0X2NvbHVtbk5hbWVzKQorICAgICAgICAgICAgcmVzdWx0LT5zZXRBcnJheShBU0NJSUxpdGVy
YWwoImNvbHVtbk5hbWVzIiksIG91dF9jb2x1bW5OYW1lcyk7CisgICAgICAgIGlmIChvdXRfbm90
ZXMuaXNBc3NpZ25lZCgpKQorICAgICAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoQVNDSUlMaXRl
cmFsKCJub3RlcyIpLCBvdXRfbm90ZXMuZ2V0VmFsdWUoKSk7CisgICAgICAgIGlmIChvdXRfdGlt
ZXN0YW1wLmlzQXNzaWduZWQoKSkKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0TnVtYmVyKEFTQ0lJ
TGl0ZXJhbCgidGltZXN0YW1wIiksIG91dF90aW1lc3RhbXAuZ2V0VmFsdWUoKSk7CisgICAgICAg
IGlmIChvdXRfdmFsdWVzLmlzQXNzaWduZWQoKSkKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0T2Jq
ZWN0KEFTQ0lJTGl0ZXJhbCgidmFsdWVzIiksIG91dF92YWx1ZXMuZ2V0VmFsdWUoKSk7CisgICAg
ICAgIGlmIChvdXRfcGF5bG9hZC5pc0Fzc2lnbmVkKCkpCisgICAgICAgICAgICByZXN1bHQtPnNl
dFZhbHVlKEFTQ0lJTGl0ZXJhbCgicGF5bG9hZCIpLCBvdXRfcGF5bG9hZC5nZXRWYWx1ZSgpKTsK
KyAgICAgICAgaWYgKG91dF9kYXRhYmFzZUlkLmlzQXNzaWduZWQoKSkKKyAgICAgICAgICAgIHJl
c3VsdC0+c2V0TnVtYmVyKEFTQ0lJTGl0ZXJhbCgiZGF0YWJhc2VJZCIpLCBvdXRfZGF0YWJhc2VJ
ZC5nZXRWYWx1ZSgpKTsKKyAgICAgICAgaWYgKG91dF9zcWxFcnJvcikKKyAgICAgICAgICAgIHJl
c3VsdC0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgic3FsRXJyb3IiKSwgb3V0X3NxbEVycm9yKTsK
KyAgICAgICAgaWYgKG91dF9zY3JlZW5Db2xvci5pc0Fzc2lnbmVkKCkpCisgICAgICAgICAgICBy
ZXN1bHQtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInNjcmVlbkNvbG9yIiksIG91dF9zY3JlZW5D
b2xvci5nZXRWYWx1ZSgpKTsKKyAgICAgICAgaWYgKG91dF9wcmludENvbG9yLmlzQXNzaWduZWQo
KSkKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgicHJpbnRDb2xv
ciIpLCBvdXRfcHJpbnRDb2xvci5nZXRWYWx1ZSgpKTsKKyAgICB9CisgICAgbV9iYWNrZW5kRGlz
cGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgZXJyb3IpOwor
fQorCitJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNR
TEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNDYWxsYmFjazo6RXhlY3V0ZVNRTEFzeW5jT3B0aW9u
YWxSZXR1cm5WYWx1ZXNDYWxsYmFjayhQYXNzUmVmUHRyPEluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyPiBiYWNrZW5kRGlzcGF0Y2hlciwgaW50IGlkKSA6IEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZShiYWNrZW5kRGlzcGF0Y2hlciwgaWQpIHsgfQor
Cit2b2lkIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRl
U1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc0NhbGxiYWNrOjpzZW5kU3VjY2VzcyhQYXNzUmVm
UHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5PFN0cmluZz4+IGNvbHVtbk5hbWVzLCBJ
bnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8U3RyaW5nPiogbm90ZXMsIEluc3BlY3Rv
cjo6VHlwZUJ1aWxkZXI6Ok9wdE91dHB1dDxkb3VibGU+KiB0aW1lc3RhbXAsIEluc3BlY3Rvcjo6
VHlwZUJ1aWxkZXI6Ok9wdE91dHB1dDxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4qIHZhbHVl
cywgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6T3B0T3V0cHV0PEluc3BlY3Rvcjo6SW5zcGVjdG9y
VmFsdWU+KiBwYXlsb2FkLCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8aW50Piog
ZGF0YWJhc2VJZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpEYXRhYmFzZTo6
RXJyb3I+IHNxbEVycm9yLCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8U3RyaW5n
Piogc2NyZWVuQ29sb3IsIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6Ok9wdE91dHB1dDxTdHJpbmc+
KiBwcmludENvbG9yKQoreworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGpzb25NZXNzYWdl
ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBpZiAoY29sdW1uTmFtZXMpCisgICAg
ICAgIGpzb25NZXNzYWdlLT5zZXRBcnJheShBU0NJSUxpdGVyYWwoImNvbHVtbk5hbWVzIiksIGNv
bHVtbk5hbWVzKTsKKyAgICBpZiAobm90ZXMuaXNBc3NpZ25lZCgpKQorICAgICAgICBqc29uTWVz
c2FnZS0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgibm90ZXMiKSwgbm90ZXMuZ2V0VmFsdWUoKSk7
CisgICAgaWYgKHRpbWVzdGFtcC5pc0Fzc2lnbmVkKCkpCisgICAgICAgIGpzb25NZXNzYWdlLT5z
ZXROdW1iZXIoQVNDSUlMaXRlcmFsKCJ0aW1lc3RhbXAiKSwgdGltZXN0YW1wLmdldFZhbHVlKCkp
OworICAgIGlmICh2YWx1ZXMuaXNBc3NpZ25lZCgpKQorICAgICAgICBqc29uTWVzc2FnZS0+c2V0
T2JqZWN0KEFTQ0lJTGl0ZXJhbCgidmFsdWVzIiksIHZhbHVlcy5nZXRWYWx1ZSgpKTsKKyAgICBp
ZiAocGF5bG9hZC5pc0Fzc2lnbmVkKCkpCisgICAgICAgIGpzb25NZXNzYWdlLT5zZXRWYWx1ZShB
U0NJSUxpdGVyYWwoInBheWxvYWQiKSwgcGF5bG9hZC5nZXRWYWx1ZSgpKTsKKyAgICBpZiAoZGF0
YWJhc2VJZC5pc0Fzc2lnbmVkKCkpCisgICAgICAgIGpzb25NZXNzYWdlLT5zZXROdW1iZXIoQVND
SUlMaXRlcmFsKCJkYXRhYmFzZUlkIiksIGRhdGFiYXNlSWQuZ2V0VmFsdWUoKSk7CisgICAgaWYg
KHNxbEVycm9yKQorICAgICAgICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgi
c3FsRXJyb3IiKSwgc3FsRXJyb3IpOworICAgIGlmIChzY3JlZW5Db2xvci5pc0Fzc2lnbmVkKCkp
CisgICAgICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJzY3JlZW5Db2xv
ciIpLCBzY3JlZW5Db2xvci5nZXRWYWx1ZSgpKTsKKyAgICBpZiAocHJpbnRDb2xvci5pc0Fzc2ln
bmVkKCkpCisgICAgICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJwcmlu
dENvbG9yIiksIHByaW50Q29sb3IuZ2V0VmFsdWUoKSk7CisgICAgc2VuZElmQWN0aXZlKGpzb25N
ZXNzYWdlLCBFcnJvclN0cmluZygpKTsKK30KKwordm9pZCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tl
bmREaXNwYXRjaGVyOjpleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIGNh
bGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKQoreworICAgIFJlZlB0cjxJbnNw
ZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7Cisg
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gbWVzc2FnZS5nZXRP
YmplY3QoQVNDSUlMaXRlcmFsKCJwYXJhbXMiKSk7CisgICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJh
bXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CisgICAgSW5zcGVjdG9yQXJy
YXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CisgICAgaW50IGlu
X2RhdGFiYXNlSWQgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0SW50KHBhcmFtc0Nv
bnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJkYXRhYmFzZUlkIiksIG51bGxwdHIsIHByb3RvY29s
RXJyb3JzUHRyKTsKKyAgICBTdHJpbmcgaW5fcXVlcnkgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlcjo6Z2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJxdWVyeSIp
LCBudWxscHRyLCBwcm90b2NvbEVycm9yc1B0cik7CisgICAgaWYgKHByb3RvY29sRXJyb3JzLT5s
ZW5ndGgoKSkgeworICAgICAgICBTdHJpbmcgZXJyb3JNZXNzYWdlID0gU3RyaW5nOjpmb3JtYXQo
IlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJEYXRh
YmFzZS5leGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyIpOworICAgICAgICBtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIEluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCBlcnJvck1lc3NhZ2UsIHByb3RvY29sRXJy
b3JzLnJlbGVhc2UoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBFcnJvclN0cmlu
ZyBlcnJvcjsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JP
YmplY3Q6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNDYWxsYmFj
az4gY2FsbGJhY2sgPSBhZG9wdFJlZihuZXcgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXI6OkV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJhY2so
bV9iYWNrZW5kRGlzcGF0Y2hlcixjYWxsSWQpKTsKKyAgICBtX2FnZW50LT5leGVjdXRlU1FMQXN5
bmNPcHRpb25hbFJldHVyblZhbHVlcygmZXJyb3IsIGluX2RhdGFiYXNlSWQsIGluX3F1ZXJ5LCBj
YWxsYmFjayk7CisKKyAgICBpZiAoZXJyb3IubGVuZ3RoKCkpIHsKKyAgICAgICAgY2FsbGJhY2st
PmRpc2FibGUoKTsKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xF
cnJvcigmY2FsbElkLCBJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2
ZXJFcnJvciwgZXJyb3IpOworICAgICAgICByZXR1cm47CisgICAgfQorfQorCit2b2lkIEluc3Bl
Y3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxTeW5jKGxvbmcgY2FsbElk
LCBjb25zdCBJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpCit7CisgICAgUmVmUHRyPEluc3BlY3Rv
ckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKKyAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSBtZXNzYWdlLmdldE9iamVj
dChBU0NJSUxpdGVyYWwoInBhcmFtcyIpKTsKKyAgICBJbnNwZWN0b3JPYmplY3QqIHBhcmFtc0Nv
bnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKKyAgICBJbnNwZWN0b3JBcnJheSog
cHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKKyAgICBpbnQgaW5fZGF0
YWJhc2VJZCA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRJbnQocGFyYW1zQ29udGFp
bmVyUHRyLCBBU0NJSUxpdGVyYWwoImRhdGFiYXNlSWQiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJv
cnNQdHIpOworICAgIFN0cmluZyBpbl9xdWVyeSA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
OjpnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoInF1ZXJ5IiksIG51
bGxwdHIsIHByb3RvY29sRXJyb3JzUHRyKTsKKyAgICBpZiAocHJvdG9jb2xFcnJvcnMtPmxlbmd0
aCgpKSB7CisgICAgICAgIFN0cmluZyBlcnJvck1lc3NhZ2UgPSBTdHJpbmc6OmZvcm1hdCgiU29t
ZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkRhdGFiYXNl
LmV4ZWN1dGVTUUxTeW5jIik7CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFBy
b3RvY29sRXJyb3IoJmNhbGxJZCwgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkludmFsaWRQ
YXJhbXMsIGVycm9yTWVzc2FnZSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIEVycm9yU3RyaW5nIGVycm9yOworICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVm
UHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5PFN0cmluZz4+IG91dF9jb2x1bW5OYW1l
czsKKyAgICBTdHJpbmcgb3V0X25vdGVzOworICAgIGRvdWJsZSBvdXRfdGltZXN0YW1wOworICAg
IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0IG91dF92YWx1ZXM7CisgICAgSW5zcGVjdG9yOjpJ
bnNwZWN0b3JWYWx1ZSBvdXRfcGF5bG9hZDsKKyAgICBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpE
YXRhYmFzZTo6RGF0YWJhc2VJZCBvdXRfZGF0YWJhc2VJZDsKKyAgICBSZWZQdHI8SW5zcGVjdG9y
OjpUeXBlQnVpbGRlcjo6RGF0YWJhc2U6OkVycm9yPiBvdXRfc3FsRXJyb3I7CisgICAgSW5zcGVj
dG9yOjpUeXBlQnVpbGRlcjo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMgb3V0X3NjcmVlbkNvbG9y
OworICAgIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQcmludENv
bG9yIG91dF9wcmludENvbG9yOworICAgIG1fYWdlbnQtPmV4ZWN1dGVTUUxTeW5jKCZlcnJvciwg
aW5fZGF0YWJhc2VJZCwgaW5fcXVlcnksIG91dF9jb2x1bW5OYW1lcywgJm91dF9ub3RlcywgJm91
dF90aW1lc3RhbXAsIG91dF92YWx1ZXMsICZvdXRfcGF5bG9hZCwgJm91dF9kYXRhYmFzZUlkLCBv
dXRfc3FsRXJyb3IsICZvdXRfc2NyZWVuQ29sb3IsICZvdXRfcHJpbnRDb2xvcik7CisKKyAgICBp
ZiAoIWVycm9yLmxlbmd0aCgpKSB7CisgICAgICAgIHJlc3VsdC0+c2V0QXJyYXkoQVNDSUlMaXRl
cmFsKCJjb2x1bW5OYW1lcyIpLCBvdXRfY29sdW1uTmFtZXMpOworICAgICAgICByZXN1bHQtPnNl
dFN0cmluZyhBU0NJSUxpdGVyYWwoIm5vdGVzIiksIG91dF9ub3Rlcyk7CisgICAgICAgIHJlc3Vs
dC0+c2V0TnVtYmVyKEFTQ0lJTGl0ZXJhbCgidGltZXN0YW1wIiksIG91dF90aW1lc3RhbXApOwor
ICAgICAgICByZXN1bHQtPnNldE9iamVjdChBU0NJSUxpdGVyYWwoInZhbHVlcyIpLCBvdXRfdmFs
dWVzKTsKKyAgICAgICAgcmVzdWx0LT5zZXRWYWx1ZShBU0NJSUxpdGVyYWwoInBheWxvYWQiKSwg
b3V0X3BheWxvYWQpOworICAgICAgICByZXN1bHQtPnNldE51bWJlcihBU0NJSUxpdGVyYWwoImRh
dGFiYXNlSWQiKSwgb3V0X2RhdGFiYXNlSWQpOworICAgICAgICByZXN1bHQtPnNldE9iamVjdChB
U0NJSUxpdGVyYWwoInNxbEVycm9yIiksIG91dF9zcWxFcnJvcik7CisgICAgICAgIHJlc3VsdC0+
c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgic2NyZWVuQ29sb3IiKSwgSW5zcGVjdG9yOjpUeXBlQnVp
bGRlcjo6Z2V0VGVzdEVudW1Db25zdGFudFZhbHVlKG91dF9zY3JlZW5Db2xvcikpOworICAgICAg
ICByZXN1bHQtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInByaW50Q29sb3IiKSwgSW5zcGVjdG9y
OjpUeXBlQnVpbGRlcjo6Z2V0VGVzdEVudW1Db25zdGFudFZhbHVlKG91dF9wcmludENvbG9yKSk7
CisgICAgfQorICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIHJl
c3VsdC5yZWxlYXNlKCksIGVycm9yKTsKK30KKworSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlz
cGF0Y2hlckhhbmRsZXI6OkV4ZWN1dGVTUUxBc3luY0NhbGxiYWNrOjpFeGVjdXRlU1FMQXN5bmND
YWxsYmFjayhQYXNzUmVmUHRyPEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiBiYWNrZW5kRGlz
cGF0Y2hlciwgaW50IGlkKSA6IEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6
OkNhbGxiYWNrQmFzZShiYWNrZW5kRGlzcGF0Y2hlciwgaWQpIHsgfQorCit2b2lkIEluc3BlY3Rv
ckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNDYWxsYmFj
azo6c2VuZFN1Y2Nlc3MoUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheTxT
dHJpbmc+PiBjb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBub3RlcywgZG91YmxlIHRpbWVzdGFt
cCwgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QgdmFsdWVzLCBJbnNwZWN0b3I6Okluc3BlY3Rv
clZhbHVlIHBheWxvYWQsIGludCBkYXRhYmFzZUlkLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6VHlw
ZUJ1aWxkZXI6OkRhdGFiYXNlOjpFcnJvcj4gc3FsRXJyb3IsIGNvbnN0IFN0cmluZyYgc2NyZWVu
Q29sb3IsIGNvbnN0IFN0cmluZyYgcHJpbnRDb2xvcikKK3sKKyAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBqc29uTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAganNv
bk1lc3NhZ2UtPnNldEFycmF5KEFTQ0lJTGl0ZXJhbCgiY29sdW1uTmFtZXMiKSwgY29sdW1uTmFt
ZXMpOworICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJub3RlcyIpLCBu
b3Rlcyk7CisgICAganNvbk1lc3NhZ2UtPnNldE51bWJlcihBU0NJSUxpdGVyYWwoInRpbWVzdGFt
cCIpLCB0aW1lc3RhbXApOworICAgIGpzb25NZXNzYWdlLT5zZXRPYmplY3QoQVNDSUlMaXRlcmFs
KCJ2YWx1ZXMiKSwgdmFsdWVzKTsKKyAgICBqc29uTWVzc2FnZS0+c2V0VmFsdWUoQVNDSUlMaXRl
cmFsKCJwYXlsb2FkIiksIHBheWxvYWQpOworICAgIGpzb25NZXNzYWdlLT5zZXROdW1iZXIoQVND
SUlMaXRlcmFsKCJkYXRhYmFzZUlkIiksIGRhdGFiYXNlSWQpOworICAgIGpzb25NZXNzYWdlLT5z
ZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJzcWxFcnJvciIpLCBzcWxFcnJvcik7CisgICAganNvbk1l
c3NhZ2UtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInNjcmVlbkNvbG9yIiksIEluc3BlY3Rvcjo6
VHlwZUJ1aWxkZXI6OmdldFRlc3RFbnVtQ29uc3RhbnRWYWx1ZShzY3JlZW5Db2xvcikpOworICAg
IGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJwcmludENvbG9yIiksIEluc3Bl
Y3Rvcjo6VHlwZUJ1aWxkZXI6OmdldFRlc3RFbnVtQ29uc3RhbnRWYWx1ZShwcmludENvbG9yKSk7
CisgICAgc2VuZElmQWN0aXZlKGpzb25NZXNzYWdlLCBFcnJvclN0cmluZygpKTsKK30KKwordm9p
ZCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FMQXN5bmMobG9u
ZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSkKK3sKKyAgICBSZWZQdHI8
SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgp
OworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IG1lc3NhZ2Uu
Z2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicGFyYW1zIikpOworICAgIEluc3BlY3Rvck9iamVjdCog
cGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOworICAgIEluc3BlY3Rv
ckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOworICAgIGlu
dCBpbl9kYXRhYmFzZUlkID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldEludChwYXJh
bXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgiZGF0YWJhc2VJZCIpLCBudWxscHRyLCBwcm90
b2NvbEVycm9yc1B0cik7CisgICAgU3RyaW5nIGluX3F1ZXJ5ID0gSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXI6OmdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgicXVl
cnkiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnNQdHIpOworICAgIGlmIChwcm90b2NvbEVycm9y
cy0+bGVuZ3RoKCkpIHsKKyAgICAgICAgU3RyaW5nIGVycm9yTWVzc2FnZSA9IFN0cmluZzo6Zm9y
bWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAi
RGF0YWJhc2UuZXhlY3V0ZVNRTEFzeW5jIik7CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXIt
PnJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6
OkludmFsaWRQYXJhbXMsIGVycm9yTWVzc2FnZSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEVycm9yU3RyaW5nIGVycm9yOworICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7
CisgICAgUmVmUHRyPEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpF
eGVjdXRlU1FMQXN5bmNDYWxsYmFjaz4gY2FsbGJhY2sgPSBhZG9wdFJlZihuZXcgSW5zcGVjdG9y
RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkV4ZWN1dGVTUUxBc3luY0NhbGxiYWNr
KG1fYmFja2VuZERpc3BhdGNoZXIsY2FsbElkKSk7CisgICAgbV9hZ2VudC0+ZXhlY3V0ZVNRTEFz
eW5jKCZlcnJvciwgaW5fZGF0YWJhc2VJZCwgaW5fcXVlcnksIGNhbGxiYWNrKTsKKworICAgIGlm
IChlcnJvci5sZW5ndGgoKSkgeworICAgICAgICBjYWxsYmFjay0+ZGlzYWJsZSgpOworICAgICAg
ICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9Cit9CisjZW5kaWYgLy8gRU5BQkxFKFNRTF9EQVRBQkFTRSkK
KworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9S
KQorCisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisK
KyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmli
dXRlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQorCisjaWZuZGVmIEluc3BlY3RvclRlc3RGcm9udGVuZERpc3BhdGNoZXJzX2gKKyNkZWZpbmUg
SW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnNfaAorCisjaWYgRU5BQkxFKElOU1BFQ1RP
UikKKworI2luY2x1ZGUgIkluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuaCIKKyNpbmNsdWRlIDxp
bnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLmg+CisjaW5jbHVkZSA8aW5zcGVjdG9y
L0luc3BlY3RvclZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKwor
fSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQor
CisjZW5kaWYgLy8gIWRlZmluZWQoSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnNfaCkK
KyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMg
QmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBh
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRl
Lmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlz
cGF0Y2hlcnMuaCIKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit9IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyMjIyBFbmQgRmlsZTog
SW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBJ
bnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgorLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpZm5kZWYgSW5zcGVjdG9yVGVz
dFR5cGVCdWlsZGVyc19oCisjZGVmaW5lIEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnNfaAorCisj
aWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JKU1R5
cGVCdWlsZGVycy5oPgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JUeXBlQnVpbGRlci5o
PgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIu
aD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCituYW1lc3BhY2UgVHlwZUJ1aWxkZXIg
eworCisvLyBGb3J3YXJkIGRlY2xhcmF0aW9ucy4KKyNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQor
bmFtZXNwYWNlIERhdGFiYXNlIHsKK2NsYXNzIEVycm9yOworZW51bSBjbGFzcyBQcmltYXJ5Q29s
b3JzOworfSAvLyBEYXRhYmFzZQorI2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0UpCisvLyBF
bmQgb2YgZm9yd2FyZCBkZWNsYXJhdGlvbnMuCisKKworLy8gVHlwZWRlZnMuCisjaWYgRU5BQkxF
KFNRTF9EQVRBQkFTRSkKK25hbWVzcGFjZSBEYXRhYmFzZSB7CisvKiBVbmlxdWUgaWRlbnRpZmll
ciBvZiBEYXRhYmFzZSBvYmplY3QuICovCit0eXBlZGVmIGludCBEYXRhYmFzZUlkOworfSAvLyBE
YXRhYmFzZQorI2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0UpCisvLyBFbmQgb2YgdHlwZWRl
ZnMuCisKK1N0cmluZyBnZXRUZXN0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpOworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBTdHJpbmcgZ2V0VGVzdEVudW1Db25zdGFudFZhbHVlKFQgZW51bVZh
bHVlKQoreworICAgIHJldHVybiBnZXRUZXN0RW51bUNvbnN0YW50VmFsdWUoc3RhdGljX2Nhc3Q8
aW50PihlbnVtVmFsdWUpKTsKK30KKworI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCituYW1lc3Bh
Y2UgRGF0YWJhc2UgeworLyogICovCitlbnVtIGNsYXNzIFByaW1hcnlDb2xvcnMgeworICAgIFJl
ZCA9IDAsCisgICAgR3JlZW4gPSAxLAorICAgIEJsdWUgPSAyLAorfTsgLy8gZW51bSBjbGFzcyBQ
cmltYXJ5Q29sb3JzCisvKiBEYXRhYmFzZSBlcnJvci4gKi8KK2NsYXNzIEVycm9yIDogcHVibGlj
IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0QmFzZSB7CitwdWJsaWM6CisgICAgZW51bSB7Cisg
ICAgICAgIE5vRmllbGRzU2V0ID0gMCwKKyAgICAgICAgTWVzc2FnZVNldCA9IDEgPDwgMCwKKyAg
ICAgICAgQ29kZVNldCA9IDEgPDwgMSwKKyAgICAgICAgQWxsRmllbGRzU2V0ID0gKE1lc3NhZ2VT
ZXQgfCBDb2RlU2V0KQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CisgICAgY2xh
c3MgQnVpbGRlciB7CisgICAgcHJpdmF0ZToKKyAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5z
cGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKKworICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVp
bGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7Cisg
ICAgICAgIH0KKworICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8LypFcnJvciovSW5zcGVjdG9y
OjpJbnNwZWN0b3JPYmplY3Q+IHB0cikKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9z
dGF0ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKKyAgICAgICAgfQorICAgICAgICBm
cmllbmQgY2xhc3MgRXJyb3I7CisgICAgcHVibGljOgorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUg
fCBNZXNzYWdlU2V0PiYgc2V0TWVzc2FnZShjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgICAgICB7
CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTWVzc2FnZVNldCksIHByb3Bl
cnR5X21lc3NhZ2VfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmlu
ZyhBU0NJSUxpdGVyYWwoIm1lc3NhZ2UiKSwgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNh
c3RTdGF0ZTxNZXNzYWdlU2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcjxTVEFU
RSB8IENvZGVTZXQ+JiBzZXRDb2RlKGludCB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoIShTVEFURSAmIENvZGVTZXQpLCBwcm9wZXJ0eV9jb2RlX2FscmVhZHlf
c2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoQVNDSUlMaXRlcmFsKCJjb2Rl
IiksIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q29kZVNldD4oKTsKKyAg
ICAgICAgfQorCisgICAgICAgIG9wZXJhdG9yIFJlZlB0cjxFcnJvcj4mICgpCisgICAgICAgIHsK
KyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0
X2lzX25vdF9yZWFkeSk7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoRXJyb3Ip
ID09IHNpemVvZihJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCksIGNhbm5vdF9jYXN0KTsKKyAg
ICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8RXJyb3I+Kj4oJm1fcmVz
dWx0KTsKKyAgICAgICAgfQorCisgICAgICAgIFBhc3NSZWZQdHI8RXJyb3I+IHJlbGVhc2UoKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gUmVmUHRyPEVycm9yPigqdGhpcykucmVsZWFz
ZSgpOworICAgICAgICB9CisgICAgfTsKKworICAgIC8qCisgICAgICogU3ludGhldGljIGNvbnN0
cnVjdG9yOgorICAgICAqIFJlZlB0cjxFcnJvcj4gcmVzdWx0ID0gRXJyb3I6OmNyZWF0ZSgpCisg
ICAgICogICAgIC5zZXRNZXNzYWdlKC4uLikKKyAgICAgKiAgICAgLnNldENvZGUoLi4uKTsKKyAg
ICAgKi8KKyAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihJbnNwZWN0b3I6Okluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCkpOworICAgIH0KKyAgICB0eXBlZGVmIEluc3BlY3Rvcjo6VHlwZUJ1aWxk
ZXI6OlN0cnVjdEl0ZW1UcmFpdHMgSXRlbVRyYWl0czsKK307CisKK30gLy8gRGF0YWJhc2UKKyNl
bmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQorCisKKworfSAvLyBuYW1lc3BhY2UgVHlwZUJ1
aWxkZXIKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5T
UEVDVE9SKQorCisjZW5kaWYgLy8gIWRlZmluZWQoSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVyc19o
KQorIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmgKKworIyMjIEJlZ2lu
IEZpbGU6IEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24KKy8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2Rl
Z2VuL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5oIgorCisjaWYg
RU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFt
ZXNwYWNlIEluc3BlY3RvciB7CisKK25hbWVzcGFjZSBUeXBlQnVpbGRlciB7CisKK3N0YXRpYyBj
b25zdCBjaGFyKiBjb25zdCBlbnVtX2NvbnN0YW50X3ZhbHVlc1tdID0geworICAgICJyZWQiLAor
ICAgICJncmVlbiIsCisgICAgImJsdWUiLAorICAgICJjeWFuIiwKKyAgICAibWFnZW50YSIsCisg
ICAgInllbGxvdyIsCisgICAgImJsYWNrIiwKK307CisKK1N0cmluZyBnZXRUZXN0RW51bUNvbnN0
YW50VmFsdWUoaW50IGNvZGUpIHsKKyAgICByZXR1cm4gZW51bV9jb25zdGFudF92YWx1ZXNbY29k
ZV07Cit9CisKKworCit9IC8vIG5hbWVzcGFjZSBUeXBlQnVpbGRlcgorCit9IC8vIG5hbWVzcGFj
ZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyMjIyBFbmQgRmls
ZTogSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9jb21tYW5kcy13aXRo
LW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvY29tbWFuZHMtd2l0
aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0Cm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjQ3NTllMjFmYTMxMTIxYjVjMDY0ZDJhNGFmN2RiNTM3Mjg2NTRjOTYKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0
ZWQvY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24tcmVz
dWx0CkBAIC0wLDAgKzEsNjQ1IEBACisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdEJhY2tl
bmRDb21tYW5kcy5qcworLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5k
cy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKy8vIERhdGFiYXNlLgorSW5z
cGVjdG9yQmFja2VuZC5yZWdpc3RlckVudW0oIkRhdGFiYXNlLlByaW1hcnlDb2xvcnMiLCB7UmVk
OiAicmVkIiwgR3JlZW46ICJncmVlbiIsIEJsdWU6ICJibHVlIn0pOworSW5zcGVjdG9yQmFja2Vu
ZC5yZWdpc3RlckNvbW1hbmQoIkRhdGFiYXNlLmV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMi
LCBbeyJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAib2JqZWN0IiwgIm9wdGlvbmFsIjog
dHJ1ZX0sIHsibmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IHRy
dWV9LCB7Im5hbWUiOiAidGltZXN0YW1wIiwgInR5cGUiOiAibnVtYmVyIiwgIm9wdGlvbmFsIjog
dHJ1ZX0sIHsibmFtZSI6ICJ2YWx1ZXMiLCAidHlwZSI6ICJvYmplY3QiLCAib3B0aW9uYWwiOiB0
cnVlfSwgeyJuYW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJvYmplY3QiLCAib3B0aW9uYWwiOiB0
cnVlfSwgeyJuYW1lIjogImRhdGFiYXNlSWQiLCAidHlwZSI6ICJudW1iZXIiLCAib3B0aW9uYWwi
OiB0cnVlfSwgeyJuYW1lIjogInNxbEVycm9yIiwgInR5cGUiOiAib2JqZWN0IiwgIm9wdGlvbmFs
IjogdHJ1ZX0sIHsibmFtZSI6ICJzY3JlZW5Db2xvciIsICJ0eXBlIjogInN0cmluZyIsICJvcHRp
b25hbCI6IHRydWV9LCB7Im5hbWUiOiAicHJpbnRDb2xvciIsICJ0eXBlIjogInN0cmluZyIsICJv
cHRpb25hbCI6IHRydWV9XSwgWyJjb2x1bW5OYW1lcyIsICJub3RlcyIsICJ0aW1lc3RhbXAiLCAi
dmFsdWVzIiwgInBheWxvYWQiLCAiZGF0YWJhc2VJZCIsICJzcWxFcnJvciIsICJzY3JlZW5Db2xv
ciIsICJwcmludENvbG9yIl0pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIkRh
dGFiYXNlLmV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyIsIFt7Im5hbWUiOiAiY29sdW1uTmFt
ZXMiLCAidHlwZSI6ICJvYmplY3QiLCAib3B0aW9uYWwiOiBmYWxzZX0sIHsibmFtZSI6ICJub3Rl
cyIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IGZhbHNlfSwgeyJuYW1lIjogInRpbWVz
dGFtcCIsICJ0eXBlIjogIm51bWJlciIsICJvcHRpb25hbCI6IGZhbHNlfSwgeyJuYW1lIjogInZh
bHVlcyIsICJ0eXBlIjogIm9iamVjdCIsICJvcHRpb25hbCI6IGZhbHNlfSwgeyJuYW1lIjogInBh
eWxvYWQiLCAidHlwZSI6ICJvYmplY3QiLCAib3B0aW9uYWwiOiBmYWxzZX0sIHsibmFtZSI6ICJk
YXRhYmFzZUlkIiwgInR5cGUiOiAibnVtYmVyIiwgIm9wdGlvbmFsIjogZmFsc2V9LCB7Im5hbWUi
OiAic3FsRXJyb3IiLCAidHlwZSI6ICJvYmplY3QiLCAib3B0aW9uYWwiOiBmYWxzZX0sIHsibmFt
ZSI6ICJzY3JlZW5Db2xvciIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IGZhbHNlfSwg
eyJuYW1lIjogInByaW50Q29sb3IiLCAidHlwZSI6ICJzdHJpbmciLCAib3B0aW9uYWwiOiBmYWxz
ZX1dLCBbImNvbHVtbk5hbWVzIiwgIm5vdGVzIiwgInRpbWVzdGFtcCIsICJ2YWx1ZXMiLCAicGF5
bG9hZCIsICJkYXRhYmFzZUlkIiwgInNxbEVycm9yIiwgInNjcmVlbkNvbG9yIiwgInByaW50Q29s
b3IiXSk7CisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kQ29tbWFuZHMuanMKKwor
IyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwt
cmV0dXJuLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisKKyNpZm5kZWYgSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVy
c19oCisjZGVmaW5lIEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnNfaAorCisjaWYgRU5B
QkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUgIkluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuaCIK
KyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNs
dWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgor
CituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisK
KyNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQorY2xhc3MgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5k
RGlzcGF0Y2hlckhhbmRsZXIgeworcHVibGljOgorICAgIC8vIE5hbWVkIGFmdGVyIHBhcmFtZXRl
ciAnc2NyZWVuQ29sb3InIHdoaWxlIGdlbmVyYXRpbmcgY29tbWFuZC9ldmVudCBleGVjdXRlQWxs
T3B0aW9uYWxQYXJhbWV0ZXJzLgorICAgIGVudW0gY2xhc3MgU2NyZWVuQ29sb3IgeworICAgICAg
ICBSZWQgPSAwLAorICAgICAgICBHcmVlbiA9IDEsCisgICAgICAgIEJsdWUgPSAyLAorICAgIH07
IC8vIGVudW0gY2xhc3MgU2NyZWVuQ29sb3IKKyAgICAvLyBOYW1lZCBhZnRlciBwYXJhbWV0ZXIg
J3ByaW50Q29sb3InIHdoaWxlIGdlbmVyYXRpbmcgY29tbWFuZC9ldmVudCBleGVjdXRlQWxsT3B0
aW9uYWxQYXJhbWV0ZXJzLgorICAgIGVudW0gY2xhc3MgUHJpbnRDb2xvciB7CisgICAgICAgIEN5
YW4gPSAzLAorICAgICAgICBNYWdlbnRhID0gNCwKKyAgICAgICAgWWVsbG93ID0gNSwKKyAgICAg
ICAgQmxhY2sgPSA2LAorICAgIH07IC8vIGVudW0gY2xhc3MgUHJpbnRDb2xvcgorICAgIHZpcnR1
YWwgdm9pZCBleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKEVycm9yU3RyaW5nKiwgY29uc3Qg
UmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXk+KiBpbl9jb2x1bW5OYW1lcywgY29uc3Qg
U3RyaW5nKiBpbl9ub3RlcywgY29uc3QgZG91YmxlKiBpbl90aW1lc3RhbXAsIGNvbnN0IFJlZlB0
cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4qIGluX3ZhbHVlcywgY29uc3QgSW5zcGVjdG9y
OjpJbnNwZWN0b3JWYWx1ZSogaW5fcGF5bG9hZCwgY29uc3QgaW50KiBpbl9kYXRhYmFzZUlkLCBj
b25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+KiBpbl9zcWxFcnJvciwgY29u
c3QgU3RyaW5nKiBpbl9zY3JlZW5Db2xvciwgY29uc3QgU3RyaW5nKiBpbl9wcmludENvbG9yLCBS
ZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk8U3RyaW5nPj4mIG9wdF9vdXRfY29s
dW1uTmFtZXMsIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6Ok9wdE91dHB1dDxTdHJpbmc+KiBvcHRf
b3V0X25vdGVzLCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8ZG91YmxlPiogb3B0
X291dF90aW1lc3RhbXAsIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6Ok9wdE91dHB1dDxJbnNwZWN0
b3I6Okluc3BlY3Rvck9iamVjdD4qIG9wdF9vdXRfdmFsdWVzLCBJbnNwZWN0b3I6OlR5cGVCdWls
ZGVyOjpPcHRPdXRwdXQ8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4qIG9wdF9vdXRfcGF5bG9h
ZCwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6T3B0T3V0cHV0PGludD4qIG9wdF9vdXRfZGF0YWJh
c2VJZCwgUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkRhdGFiYXNlOjpFcnJvcj4mIG9w
dF9vdXRfc3FsRXJyb3IsIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkRhdGFiYXNlOjpQcmltYXJ5
Q29sb3JzKiBvcHRfb3V0X3NjcmVlbkNvbG9yLCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVySGFuZGxlcjo6UHJpbnRDb2xvciogb3B0X291dF9wcmludENvbG9yKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIGV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhFcnJvclN0cmluZyosIGNv
bnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5PiYgaW5fY29sdW1uTmFtZXMsIGNv
bnN0IFN0cmluZyYgaW5fbm90ZXMsIGRvdWJsZSBpbl90aW1lc3RhbXAsIGNvbnN0IFJlZlB0cjxJ
bnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4mIGluX3ZhbHVlcywgSW5zcGVjdG9yOjpJbnNwZWN0
b3JWYWx1ZSBpbl9wYXlsb2FkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgUmVmUHRyPEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYgaW5fc3FsRXJyb3IsIGNvbnN0IFN0cmluZyYgaW5fc2Ny
ZWVuQ29sb3IsIGNvbnN0IFN0cmluZyYgaW5fcHJpbnRDb2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6
VHlwZUJ1aWxkZXI6OkFycmF5PFN0cmluZz4+JiBvdXRfY29sdW1uTmFtZXMsIFN0cmluZyogb3V0
X25vdGVzLCBkb3VibGUqIG91dF90aW1lc3RhbXAsIEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0
KiBvdXRfdmFsdWVzLCBJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlKiBvdXRfcGF5bG9hZCwgaW50
KiBvdXRfZGF0YWJhc2VJZCwgUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkRhdGFiYXNl
OjpFcnJvcj4mIG91dF9zcWxFcnJvciwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6RGF0YWJhc2U6
OlByaW1hcnlDb2xvcnMqIG91dF9zY3JlZW5Db2xvciwgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5k
RGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3IqIG91dF9wcmludENvbG9yKSA9IDA7Citwcm90
ZWN0ZWQ6CisgICAgdmlydHVhbCB+SW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXIoKTsKK307CisjZW5kaWYgLy8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKKworI2lmIEVOQUJM
RShTUUxfREFUQUJBU0UpCitjbGFzcyBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVy
IGZpbmFsIDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yU3VwcGxlbWVudGFsQmFja2VuZERp
c3BhdGNoZXIgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3RvckRhdGFi
YXNlQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyKiwgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsK
KyAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2gobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgbWV0
aG9kLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBtZXNzYWdlKSBvdmVy
cmlkZTsKK3ByaXZhdGU6CisgICAgdm9pZCBleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKGxv
bmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7Cisg
ICAgdm9pZCBleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMobG9uZyBjYWxsSWQsIGNvbnN0IElu
c3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsKK3ByaXZhdGU6CisgICAgSW5zcGVj
dG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcihJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyKiwgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsK
KyAgICBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogbV9hZ2VudDsK
K307CisjZW5kaWYgLy8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKKworfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorCisjZW5kaWYgLy8gIWRlZmlu
ZWQoSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVyc19oKQorIyMjIEVuZCBGaWxlOiBJbnNw
ZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IEluc3BlY3Rv
clRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIGNvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29u
CisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvY29kZWdlbi9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hl
cnMuaCIKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsLmg+CisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclZh
bHVlcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3Bl
Y3RvciB7CisKKyNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQorSW5zcGVjdG9yRGF0YWJhc2VCYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXI6On5JbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVy
SGFuZGxlcigpIHsgfQorI2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0UpCisKKyNpZiBFTkFC
TEUoU1FMX0RBVEFCQVNFKQorUGFzc1JlZlB0cjxJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVyPiBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUoSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyLCBJbnNwZWN0b3JEYXRhYmFz
ZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCit7CisgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVy
LCBhZ2VudCkpOworfQorCitJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpJbnNw
ZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
KiBiYWNrZW5kRGlzcGF0Y2hlciwgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXIqIGFnZW50KQorICAgIDogSW5zcGVjdG9yU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNo
ZXIoYmFja2VuZERpc3BhdGNoZXIpCisgICAgLCBtX2FnZW50KGFnZW50KQoreworICAgIG1fYmFj
a2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbihBU0NJSUxpdGVyYWwo
IkRhdGFiYXNlIiksIHRoaXMpOworfQorCit2b2lkIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERp
c3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUGFz
c1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1lc3NhZ2UpCit7CisgICAgUmVmPEluc3BlY3RvckRh
dGFiYXNlQmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOworCisgICAgaWYgKG1ldGhv
ZCA9PSAiZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyIpCisgICAgICAgIGV4ZWN1dGVBbGxP
cHRpb25hbFBhcmFtZXRlcnMoY2FsbElkLCAqbWVzc2FnZS5nZXQoKSk7CisgICAgZWxzZSBpZiAo
bWV0aG9kID09ICJleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMiKQorICAgICAgICBleGVjdXRl
Tm9PcHRpb25hbFBhcmFtZXRlcnMoY2FsbElkLCAqbWVzc2FnZS5nZXQoKSk7CisgICAgZWxzZQor
ICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQs
IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgU3RyaW5nKCInIikg
KyAiRGF0YWJhc2UiICsgJy4nICsgbWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOworfQorCit2
b2lkIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVBbGxPcHRpb25h
bFBhcmFtZXRlcnMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSkK
K3sKKyAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9y
QXJyYXk6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRh
aW5lciA9IG1lc3NhZ2UuZ2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicGFyYW1zIikpOworICAgIElu
c3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgp
OworICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3Jz
LmdldCgpOworICAgIGJvb2wgY29sdW1uTmFtZXNfdmFsdWVGb3VuZCA9IGZhbHNlOworICAgIFJl
ZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5PiBpbl9jb2x1bW5OYW1lcyA9IEluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyOjpnZXRBcnJheShwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0
ZXJhbCgiY29sdW1uTmFtZXMiKSwgJmNvbHVtbk5hbWVzX3ZhbHVlRm91bmQsIHByb3RvY29sRXJy
b3JzUHRyKTsKKyAgICBib29sIG5vdGVzX3ZhbHVlRm91bmQgPSBmYWxzZTsKKyAgICBTdHJpbmcg
aW5fbm90ZXMgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0U3RyaW5nKHBhcmFtc0Nv
bnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJub3RlcyIpLCAmbm90ZXNfdmFsdWVGb3VuZCwgcHJv
dG9jb2xFcnJvcnNQdHIpOworICAgIGJvb2wgdGltZXN0YW1wX3ZhbHVlRm91bmQgPSBmYWxzZTsK
KyAgICBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8ZG91YmxlPiBpbl90aW1lc3Rh
bXAgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0TnVtYmVyKHBhcmFtc0NvbnRhaW5l
clB0ciwgQVNDSUlMaXRlcmFsKCJ0aW1lc3RhbXAiKSwgJnRpbWVzdGFtcF92YWx1ZUZvdW5kLCBw
cm90b2NvbEVycm9yc1B0cik7CisgICAgYm9vbCB2YWx1ZXNfdmFsdWVGb3VuZCA9IGZhbHNlOwor
ICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gaW5fdmFsdWVzID0gSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXI6OmdldE9iamVjdChwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJ
TGl0ZXJhbCgidmFsdWVzIiksICZ2YWx1ZXNfdmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJvcnNQdHIp
OworICAgIGJvb2wgcGF5bG9hZF92YWx1ZUZvdW5kID0gZmFsc2U7CisgICAgUmVmUHRyPEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yVmFsdWU+IGluX3BheWxvYWQgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlcjo6Z2V0QW55KHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJwYXlsb2FkIiks
ICZwYXlsb2FkX3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRyKTsKKyAgICBib29sIGRhdGFi
YXNlSWRfdmFsdWVGb3VuZCA9IGZhbHNlOworICAgIGludCBpbl9kYXRhYmFzZUlkID0gSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXI6OmdldEludChwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0
ZXJhbCgiZGF0YWJhc2VJZCIpLCAmZGF0YWJhc2VJZF92YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9y
c1B0cik7CisgICAgYm9vbCBzcWxFcnJvcl92YWx1ZUZvdW5kID0gZmFsc2U7CisgICAgUmVmUHRy
PEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBpbl9zcWxFcnJvciA9IEluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyOjpnZXRPYmplY3QocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwo
InNxbEVycm9yIiksICZzcWxFcnJvcl92YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0cik7Cisg
ICAgYm9vbCBzY3JlZW5Db2xvcl92YWx1ZUZvdW5kID0gZmFsc2U7CisgICAgU3RyaW5nIGluX3Nj
cmVlbkNvbG9yID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldFN0cmluZyhwYXJhbXND
b250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgic2NyZWVuQ29sb3IiKSwgJnNjcmVlbkNvbG9yX3Zh
bHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRyKTsKKyAgICBib29sIHByaW50Q29sb3JfdmFsdWVG
b3VuZCA9IGZhbHNlOworICAgIFN0cmluZyBpbl9wcmludENvbG9yID0gSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXI6OmdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgi
cHJpbnRDb2xvciIpLCAmcHJpbnRDb2xvcl92YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0cik7
CisgICAgaWYgKHByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgeworICAgICAgICBTdHJpbmcgZXJy
b3JNZXNzYWdlID0gU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMn
IGNhbid0IGJlIHByb2Nlc3NlZCIsICJEYXRhYmFzZS5leGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0
ZXJzIik7CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3Io
JmNhbGxJZCwgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkludmFsaWRQYXJhbXMsIGVycm9y
TWVzc2FnZSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIEVycm9yU3RyaW5nIGVycm9yOworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPEluc3BlY3Rv
cjo6VHlwZUJ1aWxkZXI6OkFycmF5PFN0cmluZz4+IG91dF9jb2x1bW5OYW1lczsKKyAgICBJbnNw
ZWN0b3I6OlR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8U3RyaW5nPiBvdXRfbm90ZXM7CisgICAgSW5z
cGVjdG9yOjpUeXBlQnVpbGRlcjo6T3B0T3V0cHV0PGRvdWJsZT4gb3V0X3RpbWVzdGFtcDsKKyAg
ICBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8SW5zcGVjdG9yOjpJbnNwZWN0b3JP
YmplY3Q+IG91dF92YWx1ZXM7CisgICAgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6T3B0T3V0cHV0
PEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+IG91dF9wYXlsb2FkOworICAgIEluc3BlY3Rvcjo6
VHlwZUJ1aWxkZXI6Ok9wdE91dHB1dDxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpEYXRhYmFzZTo6
RGF0YWJhc2VJZD4gb3V0X2RhdGFiYXNlSWQ7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1
aWxkZXI6OkRhdGFiYXNlOjpFcnJvcj4gb3V0X3NxbEVycm9yOworICAgIEluc3BlY3Rvcjo6VHlw
ZUJ1aWxkZXI6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzIG91dF9zY3JlZW5Db2xvcjsKKyAgICBJ
bnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UHJpbnRDb2xvciBvdXRf
cHJpbnRDb2xvcjsKKyAgICBtX2FnZW50LT5leGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKCZl
cnJvciwgY29sdW1uTmFtZXNfdmFsdWVGb3VuZCA/ICZpbl9jb2x1bW5OYW1lcyA6IG51bGxwdHIs
IG5vdGVzX3ZhbHVlRm91bmQgPyAmaW5fbm90ZXMgOiBudWxscHRyLCB0aW1lc3RhbXBfdmFsdWVG
b3VuZCA/ICZpbl90aW1lc3RhbXAgOiBudWxscHRyLCB2YWx1ZXNfdmFsdWVGb3VuZCA/ICZpbl92
YWx1ZXMgOiBudWxscHRyLCBwYXlsb2FkX3ZhbHVlRm91bmQgPyAmaW5fcGF5bG9hZCA6IG51bGxw
dHIsIGRhdGFiYXNlSWRfdmFsdWVGb3VuZCA/ICZpbl9kYXRhYmFzZUlkIDogbnVsbHB0ciwgc3Fs
RXJyb3JfdmFsdWVGb3VuZCA/ICZpbl9zcWxFcnJvciA6IG51bGxwdHIsIHNjcmVlbkNvbG9yX3Zh
bHVlRm91bmQgPyAmaW5fc2NyZWVuQ29sb3IgOiBudWxscHRyLCBwcmludENvbG9yX3ZhbHVlRm91
bmQgPyAmaW5fcHJpbnRDb2xvciA6IG51bGxwdHIsIG91dF9jb2x1bW5OYW1lcywgJm91dF9ub3Rl
cywgJm91dF90aW1lc3RhbXAsIG91dF92YWx1ZXMsICZvdXRfcGF5bG9hZCwgJm91dF9kYXRhYmFz
ZUlkLCBvdXRfc3FsRXJyb3IsICZvdXRfc2NyZWVuQ29sb3IsICZvdXRfcHJpbnRDb2xvcik7CisK
KyAgICBpZiAoIWVycm9yLmxlbmd0aCgpKSB7CisgICAgICAgIGlmIChvdXRfY29sdW1uTmFtZXMp
CisgICAgICAgICAgICByZXN1bHQtPnNldEFycmF5KEFTQ0lJTGl0ZXJhbCgiY29sdW1uTmFtZXMi
KSwgb3V0X2NvbHVtbk5hbWVzKTsKKyAgICAgICAgaWYgKG91dF9ub3Rlcy5pc0Fzc2lnbmVkKCkp
CisgICAgICAgICAgICByZXN1bHQtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoIm5vdGVzIiksIG91
dF9ub3Rlcy5nZXRWYWx1ZSgpKTsKKyAgICAgICAgaWYgKG91dF90aW1lc3RhbXAuaXNBc3NpZ25l
ZCgpKQorICAgICAgICAgICAgcmVzdWx0LT5zZXROdW1iZXIoQVNDSUlMaXRlcmFsKCJ0aW1lc3Rh
bXAiKSwgb3V0X3RpbWVzdGFtcC5nZXRWYWx1ZSgpKTsKKyAgICAgICAgaWYgKG91dF92YWx1ZXMu
aXNBc3NpZ25lZCgpKQorICAgICAgICAgICAgcmVzdWx0LT5zZXRPYmplY3QoQVNDSUlMaXRlcmFs
KCJ2YWx1ZXMiKSwgb3V0X3ZhbHVlcy5nZXRWYWx1ZSgpKTsKKyAgICAgICAgaWYgKG91dF9wYXls
b2FkLmlzQXNzaWduZWQoKSkKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0VmFsdWUoQVNDSUlMaXRl
cmFsKCJwYXlsb2FkIiksIG91dF9wYXlsb2FkLmdldFZhbHVlKCkpOworICAgICAgICBpZiAob3V0
X2RhdGFiYXNlSWQuaXNBc3NpZ25lZCgpKQorICAgICAgICAgICAgcmVzdWx0LT5zZXROdW1iZXIo
QVNDSUlMaXRlcmFsKCJkYXRhYmFzZUlkIiksIG91dF9kYXRhYmFzZUlkLmdldFZhbHVlKCkpOwor
ICAgICAgICBpZiAob3V0X3NxbEVycm9yKQorICAgICAgICAgICAgcmVzdWx0LT5zZXRPYmplY3Qo
QVNDSUlMaXRlcmFsKCJzcWxFcnJvciIpLCBvdXRfc3FsRXJyb3IpOworICAgICAgICBpZiAob3V0
X3NjcmVlbkNvbG9yLmlzQXNzaWduZWQoKSkKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5n
KEFTQ0lJTGl0ZXJhbCgic2NyZWVuQ29sb3IiKSwgb3V0X3NjcmVlbkNvbG9yLmdldFZhbHVlKCkp
OworICAgICAgICBpZiAob3V0X3ByaW50Q29sb3IuaXNBc3NpZ25lZCgpKQorICAgICAgICAgICAg
cmVzdWx0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJwcmludENvbG9yIiksIG91dF9wcmludENv
bG9yLmdldFZhbHVlKCkpOworICAgIH0KKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVz
cG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBlcnJvcik7Cit9CisKK3ZvaWQgSW5zcGVj
dG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJz
KGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpCit7CisgICAgUmVm
UHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5OjpjcmVh
dGUoKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIgPSBtZXNz
YWdlLmdldE9iamVjdChBU0NJSUxpdGVyYWwoInBhcmFtcyIpKTsKKyAgICBJbnNwZWN0b3JPYmpl
Y3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKKyAgICBJbnNw
ZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQoKTsKKyAg
ICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheT4gaW5fY29sdW1uTmFtZXMgPSBJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0QXJyYXkocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJ
SUxpdGVyYWwoImNvbHVtbk5hbWVzIiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzUHRyKTsKKyAg
ICBTdHJpbmcgaW5fbm90ZXMgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0U3RyaW5n
KHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJub3RlcyIpLCBudWxscHRyLCBwcm90
b2NvbEVycm9yc1B0cik7CisgICAgZG91YmxlIGluX3RpbWVzdGFtcCA9IEluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyOjpnZXROdW1iZXIocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwo
InRpbWVzdGFtcCIpLCBudWxscHRyLCBwcm90b2NvbEVycm9yc1B0cik7CisgICAgUmVmUHRyPElu
c3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBpbl92YWx1ZXMgPSBJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlcjo6Z2V0T2JqZWN0KHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJ2YWx1
ZXMiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnNQdHIpOworICAgIFJlZlB0cjxJbnNwZWN0b3I6
Okluc3BlY3RvclZhbHVlPiBpbl9wYXlsb2FkID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6
OmdldEFueShwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgicGF5bG9hZCIpLCBudWxs
cHRyLCBwcm90b2NvbEVycm9yc1B0cik7CisgICAgaW50IGluX2RhdGFiYXNlSWQgPSBJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0SW50KHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRl
cmFsKCJkYXRhYmFzZUlkIiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzUHRyKTsKKyAgICBSZWZQ
dHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IGluX3NxbEVycm9yID0gSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXI6OmdldE9iamVjdChwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJh
bCgic3FsRXJyb3IiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnNQdHIpOworICAgIFN0cmluZyBp
bl9zY3JlZW5Db2xvciA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRTdHJpbmcocGFy
YW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoInNjcmVlbkNvbG9yIiksIG51bGxwdHIsIHBy
b3RvY29sRXJyb3JzUHRyKTsKKyAgICBTdHJpbmcgaW5fcHJpbnRDb2xvciA9IEluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyOjpnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVy
YWwoInByaW50Q29sb3IiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnNQdHIpOworICAgIGlmIChw
cm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKKyAgICAgICAgU3RyaW5nIGVycm9yTWVzc2FnZSA9
IFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBw
cm9jZXNzZWQiLCAiRGF0YWJhc2UuZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzIik7CisgICAg
ICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkludmFsaWRQYXJhbXMsIGVycm9yTWVzc2FnZSwgcHJv
dG9jb2xFcnJvcnMucmVsZWFzZSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEVy
cm9yU3RyaW5nIGVycm9yOworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IElu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxk
ZXI6OkFycmF5PFN0cmluZz4+IG91dF9jb2x1bW5OYW1lczsKKyAgICBTdHJpbmcgb3V0X25vdGVz
OworICAgIGRvdWJsZSBvdXRfdGltZXN0YW1wOworICAgIEluc3BlY3Rvcjo6SW5zcGVjdG9yT2Jq
ZWN0IG91dF92YWx1ZXM7CisgICAgSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSBvdXRfcGF5bG9h
ZDsKKyAgICBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpEYXRhYmFzZTo6RGF0YWJhc2VJZCBvdXRf
ZGF0YWJhc2VJZDsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6RGF0YWJhc2U6
OkVycm9yPiBvdXRfc3FsRXJyb3I7CisgICAgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6RGF0YWJh
c2U6OlByaW1hcnlDb2xvcnMgb3V0X3NjcmVlbkNvbG9yOworICAgIEluc3BlY3RvckRhdGFiYXNl
QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQcmludENvbG9yIG91dF9wcmludENvbG9yOworICAg
IG1fYWdlbnQtPmV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycygmZXJyb3IsIGluX2NvbHVtbk5h
bWVzLCBpbl9ub3RlcywgaW5fdGltZXN0YW1wLCBpbl92YWx1ZXMsIGluX3BheWxvYWQsIGluX2Rh
dGFiYXNlSWQsIGluX3NxbEVycm9yLCBpbl9zY3JlZW5Db2xvciwgaW5fcHJpbnRDb2xvciwgb3V0
X2NvbHVtbk5hbWVzLCAmb3V0X25vdGVzLCAmb3V0X3RpbWVzdGFtcCwgb3V0X3ZhbHVlcywgJm91
dF9wYXlsb2FkLCAmb3V0X2RhdGFiYXNlSWQsIG91dF9zcWxFcnJvciwgJm91dF9zY3JlZW5Db2xv
ciwgJm91dF9wcmludENvbG9yKTsKKworICAgIGlmICghZXJyb3IubGVuZ3RoKCkpIHsKKyAgICAg
ICAgcmVzdWx0LT5zZXRBcnJheShBU0NJSUxpdGVyYWwoImNvbHVtbk5hbWVzIiksIG91dF9jb2x1
bW5OYW1lcyk7CisgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgibm90ZXMi
KSwgb3V0X25vdGVzKTsKKyAgICAgICAgcmVzdWx0LT5zZXROdW1iZXIoQVNDSUlMaXRlcmFsKCJ0
aW1lc3RhbXAiKSwgb3V0X3RpbWVzdGFtcCk7CisgICAgICAgIHJlc3VsdC0+c2V0T2JqZWN0KEFT
Q0lJTGl0ZXJhbCgidmFsdWVzIiksIG91dF92YWx1ZXMpOworICAgICAgICByZXN1bHQtPnNldFZh
bHVlKEFTQ0lJTGl0ZXJhbCgicGF5bG9hZCIpLCBvdXRfcGF5bG9hZCk7CisgICAgICAgIHJlc3Vs
dC0+c2V0TnVtYmVyKEFTQ0lJTGl0ZXJhbCgiZGF0YWJhc2VJZCIpLCBvdXRfZGF0YWJhc2VJZCk7
CisgICAgICAgIHJlc3VsdC0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgic3FsRXJyb3IiKSwgb3V0
X3NxbEVycm9yKTsKKyAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJzY3Jl
ZW5Db2xvciIpLCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpnZXRUZXN0RW51bUNvbnN0YW50VmFs
dWUob3V0X3NjcmVlbkNvbG9yKSk7CisgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKEFTQ0lJTGl0
ZXJhbCgicHJpbnRDb2xvciIpLCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpnZXRUZXN0RW51bUNv
bnN0YW50VmFsdWUob3V0X3ByaW50Q29sb3IpKTsKKyAgICB9CisgICAgbV9iYWNrZW5kRGlzcGF0
Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgZXJyb3IpOworfQor
I2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0UpCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rv
cgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKworIyMjIEVuZCBGaWxlOiBJbnNwZWN0
b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9y
VGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
Ky8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBjb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgor
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2NvZGVnZW4vZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpZm5k
ZWYgSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnNfaAorI2RlZmluZSBJbnNwZWN0b3JU
ZXN0RnJvbnRlbmREaXNwYXRjaGVyc19oCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5j
bHVkZSAiSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5oIgorI2luY2x1ZGUgPGluc3BlY3Rvci9J
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4KKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9y
VmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCit9IC8vIG5hbWVz
cGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyNlbmRpZiAv
LyAhZGVmaW5lZChJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVyc19oKQorIyMjIEVuZCBG
aWxlOiBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxl
OiBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJh
bWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yVGVzdEZyb250
ZW5kRGlzcGF0Y2hlcnMuaCIKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRlIDx3
dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit9IC8vIG5hbWVz
cGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyMjIyBFbmQg
RmlsZTogSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBG
aWxlOiBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
MywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJz
Lmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQor
CisjaWZuZGVmIEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnNfaAorI2RlZmluZSBJbnNwZWN0b3JU
ZXN0VHlwZUJ1aWxkZXJzX2gKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRlIDxp
bnNwZWN0b3IvSW5zcGVjdG9ySlNUeXBlQnVpbGRlcnMuaD4KKyNpbmNsdWRlIDxpbnNwZWN0b3Iv
SW5zcGVjdG9yVHlwZUJ1aWxkZXIuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2lu
Y2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKwor
bmFtZXNwYWNlIFR5cGVCdWlsZGVyIHsKKworLy8gRm9yd2FyZCBkZWNsYXJhdGlvbnMuCisjaWYg
RU5BQkxFKFNRTF9EQVRBQkFTRSkKK25hbWVzcGFjZSBEYXRhYmFzZSB7CitjbGFzcyBFcnJvcjsK
K2VudW0gY2xhc3MgUHJpbWFyeUNvbG9yczsKK30gLy8gRGF0YWJhc2UKKyNlbmRpZiAvLyBFTkFC
TEUoU1FMX0RBVEFCQVNFKQorLy8gRW5kIG9mIGZvcndhcmQgZGVjbGFyYXRpb25zLgorCisKKy8v
IFR5cGVkZWZzLgorI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCituYW1lc3BhY2UgRGF0YWJhc2Ug
eworLyogVW5pcXVlIGlkZW50aWZpZXIgb2YgRGF0YWJhc2Ugb2JqZWN0LiAqLwordHlwZWRlZiBp
bnQgRGF0YWJhc2VJZDsKK30gLy8gRGF0YWJhc2UKKyNlbmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFC
QVNFKQorLy8gRW5kIG9mIHR5cGVkZWZzLgorCitTdHJpbmcgZ2V0VGVzdEVudW1Db25zdGFudFZh
bHVlKGludCBjb2RlKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gU3RyaW5nIGdldFRlc3RFbnVt
Q29uc3RhbnRWYWx1ZShUIGVudW1WYWx1ZSkKK3sKKyAgICByZXR1cm4gZ2V0VGVzdEVudW1Db25z
dGFudFZhbHVlKHN0YXRpY19jYXN0PGludD4oZW51bVZhbHVlKSk7Cit9CisKKyNpZiBFTkFCTEUo
U1FMX0RBVEFCQVNFKQorbmFtZXNwYWNlIERhdGFiYXNlIHsKKy8qICAqLworZW51bSBjbGFzcyBQ
cmltYXJ5Q29sb3JzIHsKKyAgICBSZWQgPSAwLAorICAgIEdyZWVuID0gMSwKKyAgICBCbHVlID0g
MiwKK307IC8vIGVudW0gY2xhc3MgUHJpbWFyeUNvbG9ycworLyogRGF0YWJhc2UgZXJyb3IuICov
CitjbGFzcyBFcnJvciA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdEJhc2Ugewor
cHVibGljOgorICAgIGVudW0geworICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCisgICAgICAgIE1l
c3NhZ2VTZXQgPSAxIDw8IDAsCisgICAgICAgIENvZGVTZXQgPSAxIDw8IDEsCisgICAgICAgIEFs
bEZpZWxkc1NldCA9IChNZXNzYWdlU2V0IHwgQ29kZVNldCkKKyAgICB9OworCisgICAgdGVtcGxh
dGU8aW50IFNUQVRFPgorICAgIGNsYXNzIEJ1aWxkZXIgeworICAgIHByaXZhdGU6CisgICAgICAg
IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CisKKyAgICAgICAg
dGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RB
VEUgfCBTVEVQPio+KHRoaXMpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcihQYXNzUmVm
UHRyPC8qRXJyb3IqL0luc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBwdHIpCisgICAgICAgIHsK
KyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVy
X2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOworICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7
CisgICAgICAgIH0KKyAgICAgICAgZnJpZW5kIGNsYXNzIEVycm9yOworICAgIHB1YmxpYzoKKwor
ICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTWVzc2FnZVNldD4mIHNldE1lc3NhZ2UoY29uc3QgU3Ry
aW5nJiB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFU
RSAmIE1lc3NhZ2VTZXQpLCBwcm9wZXJ0eV9tZXNzYWdlX2FscmVhZHlfc2V0KTsKKyAgICAgICAg
ICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJtZXNzYWdlIiksIHZhbHVlKTsK
KyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TWVzc2FnZVNldD4oKTsKKyAgICAgICAgfQor
CisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDb2RlU2V0PiYgc2V0Q29kZShpbnQgdmFsdWUpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBDb2RlU2V0KSwg
cHJvcGVydHlfY29kZV9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVt
YmVyKEFTQ0lJTGl0ZXJhbCgiY29kZSIpLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2Fz
dFN0YXRlPENvZGVTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBvcGVyYXRvciBSZWZQdHI8
RXJyb3I+JiAoKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9
PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOworICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoc2l6ZW9mKEVycm9yKSA9PSBzaXplb2YoSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmpl
Y3QpLCBjYW5ub3RfY2FzdCk7CisgICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8
UmVmUHRyPEVycm9yPio+KCZtX3Jlc3VsdCk7CisgICAgICAgIH0KKworICAgICAgICBQYXNzUmVm
UHRyPEVycm9yPiByZWxlYXNlKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIFJlZlB0
cjxFcnJvcj4oKnRoaXMpLnJlbGVhc2UoKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICAvKgor
ICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKKyAgICAgKiBSZWZQdHI8RXJyb3I+IHJlc3Vs
dCA9IEVycm9yOjpjcmVhdGUoKQorICAgICAqICAgICAuc2V0TWVzc2FnZSguLi4pCisgICAgICog
ICAgIC5zZXRDb2RlKC4uLik7CisgICAgICovCisgICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNT
ZXQ+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4o
SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpKTsKKyAgICB9CisgICAgdHlwZWRl
ZiBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpTdHJ1Y3RJdGVtVHJhaXRzIEl0ZW1UcmFpdHM7Cit9
OworCit9IC8vIERhdGFiYXNlCisjZW5kaWYgLy8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKKworCisK
K30gLy8gbmFtZXNwYWNlIFR5cGVCdWlsZGVyCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgor
CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKworI2VuZGlmIC8vICFkZWZpbmVkKEluc3Bl
Y3RvclRlc3RUeXBlQnVpbGRlcnNfaCkKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdFR5cGVC
dWlsZGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmNw
cAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9wdGlv
bmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmgiCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQor
CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsK
KworbmFtZXNwYWNlIFR5cGVCdWlsZGVyIHsKKworc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGVu
dW1fY29uc3RhbnRfdmFsdWVzW10gPSB7CisgICAgInJlZCIsCisgICAgImdyZWVuIiwKKyAgICAi
Ymx1ZSIsCisgICAgImN5YW4iLAorICAgICJtYWdlbnRhIiwKKyAgICAieWVsbG93IiwKKyAgICAi
YmxhY2siLAorfTsKKworU3RyaW5nIGdldFRlc3RFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSkg
eworICAgIHJldHVybiBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb2RlXTsKK30KKworCisKK30gLy8g
bmFtZXNwYWNlIFR5cGVCdWlsZGVyCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5k
aWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0VHlw
ZUJ1aWxkZXJzLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2RvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6
ZXMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZXhwZWN0ZWQvZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uLXJl
c3VsdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi44NGYxNGIzMWY5NGZlZGZlZTI0YTkxZTRhMDJiYWE1Yjk4Yzc4MzA1
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2V4cGVjdGVkL2RvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNv
bi1yZXN1bHQKQEAgLTAsMCArMSw1NjYgQEAKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0
QmFja2VuZENvbW1hbmRzLmpzCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRv
bWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKy8vIE5ldHdvcmsxLgorSW5zcGVjdG9y
QmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIk5ldHdvcmsxLmxvYWRSZXNvdXJjZTEiLCBbXSwgW10p
OworCisvLyBOZXR3b3JrMy4KK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJOZXR3
b3JrMy5sb2FkUmVzb3VyY2UxIiwgW10sIFtdKTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJD
b21tYW5kKCJOZXR3b3JrMy5sb2FkUmVzb3VyY2UyIiwgW10sIFtdKTsKK0luc3BlY3RvckJhY2tl
bmQucmVnaXN0ZXJDb21tYW5kKCJOZXR3b3JrMy5sb2FkUmVzb3VyY2UzIiwgW10sIFtdKTsKK0lu
c3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJOZXR3b3JrMy5sb2FkUmVzb3VyY2U0Iiwg
W10sIFtdKTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJOZXR3b3JrMy5sb2Fk
UmVzb3VyY2U1IiwgW10sIFtdKTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJO
ZXR3b3JrMy5sb2FkUmVzb3VyY2U2IiwgW10sIFtdKTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0
ZXJDb21tYW5kKCJOZXR3b3JrMy5sb2FkUmVzb3VyY2U3IiwgW10sIFtdKTsKKyMjIyBFbmQgRmls
ZTogSW5zcGVjdG9yVGVzdEJhY2tlbmRDb21tYW5kcy5qcworCisjIyMgQmVnaW4gRmlsZTogSW5z
cGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMs
IDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIGRvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbgorLy8gYnkg
dGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVn
ZW4vZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpZm5kZWYgSW5z
cGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVyc19oCisjZGVmaW5lIEluc3BlY3RvclRlc3RCYWNr
ZW5kRGlzcGF0Y2hlcnNfaAorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUgIklu
c3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuaCIKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordHlw
ZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKK2NsYXNzIEluc3BlY3Rvck5ldHdvcmsxQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291
cmNlMShFcnJvclN0cmluZyopID0gMDsKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIH5JbnNwZWN0
b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpOworfTsKKworY2xhc3MgSW5zcGVj
dG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgeworcHVibGljOgorICAgIHZpcnR1
YWwgdm9pZCBsb2FkUmVzb3VyY2UxKEVycm9yU3RyaW5nKikgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCBsb2FkUmVzb3VyY2UyKEVycm9yU3RyaW5nKikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBsb2Fk
UmVzb3VyY2UzKEVycm9yU3RyaW5nKikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3Vy
Y2U0KEVycm9yU3RyaW5nKikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2U1KEVy
cm9yU3RyaW5nKikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2U2KEVycm9yU3Ry
aW5nKikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2U3KEVycm9yU3RyaW5nKikg
PSAwOworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgfkluc3BlY3Rvck5ldHdvcmszQmFja2VuZERp
c3BhdGNoZXJIYW5kbGVyKCk7Cit9OworCitjbGFzcyBJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmRE
aXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yU3VwcGxlbWVudGFs
QmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3Bl
Y3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShJbnNwZWN0b3I6Okluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyKiwgSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2gobG9uZyBjYWxsSWQsIGNvbnN0IFN0
cmluZyYgbWV0aG9kLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBtZXNz
YWdlKSBvdmVycmlkZTsKK3ByaXZhdGU6CisgICAgdm9pZCBsb2FkUmVzb3VyY2UxKGxvbmcgY2Fs
bElkLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7Citwcml2YXRl
OgorICAgIEluc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIoSW5zcGVjdG9yOjpJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciosIEluc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNo
ZXJIYW5kbGVyKik7CisgICAgSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXIqIG1fYWdlbnQ7Cit9OworCitjbGFzcyBJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRj
aGVyIGZpbmFsIDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yU3VwcGxlbWVudGFsQmFja2Vu
ZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvck5l
dHdvcmszQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyKiwgSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIq
KTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2gobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYg
bWV0aG9kLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBtZXNzYWdlKSBv
dmVycmlkZTsKK3ByaXZhdGU6CisgICAgdm9pZCBsb2FkUmVzb3VyY2UxKGxvbmcgY2FsbElkLCBj
b25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7CisgICAgdm9pZCBsb2Fk
UmVzb3VyY2UyKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCYg
bWVzc2FnZSk7CisgICAgdm9pZCBsb2FkUmVzb3VyY2UzKGxvbmcgY2FsbElkLCBjb25zdCBJbnNw
ZWN0b3I6Okluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7CisgICAgdm9pZCBsb2FkUmVzb3VyY2U0
KGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7
CisgICAgdm9pZCBsb2FkUmVzb3VyY2U1KGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3I6Oklu
c3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7CisgICAgdm9pZCBsb2FkUmVzb3VyY2U2KGxvbmcgY2Fs
bElkLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7CisgICAgdm9p
ZCBsb2FkUmVzb3VyY2U3KGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9i
amVjdCYgbWVzc2FnZSk7Citwcml2YXRlOgorICAgIEluc3BlY3Rvck5ldHdvcmszQmFja2VuZERp
c3BhdGNoZXIoSW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciosIEluc3BlY3Rv
ck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7CisgICAgSW5zcGVjdG9yTmV0d29y
azNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIG1fYWdlbnQ7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyNlbmRpZiAvLyAh
ZGVmaW5lZChJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzX2gpCisjIyMgRW5kIEZpbGU6
IEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogSW5z
cGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
MywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCisvLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29k
ZWdlbi9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIK
KworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsLmg+CisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5o
PgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7
CisKK0luc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjp+SW5zcGVjdG9y
TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKSB7IH0KK0luc3BlY3Rvck5ldHdvcmsz
QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjp+SW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXIoKSB7IH0KKworUGFzc1JlZlB0cjxJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmRE
aXNwYXRjaGVyPiBJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUoSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyLCBJbnNwZWN0b3JOZXR3
b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCit7CisgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRj
aGVyLCBhZ2VudCkpOworfQorCitJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpJ
bnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyKEluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyKiBiYWNrZW5kRGlzcGF0Y2hlciwgSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXIqIGFnZW50KQorICAgIDogSW5zcGVjdG9yU3VwcGxlbWVudGFsQmFja2VuZERpc3Bh
dGNoZXIoYmFja2VuZERpc3BhdGNoZXIpCisgICAgLCBtX2FnZW50KGFnZW50KQoreworICAgIG1f
YmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbihBU0NJSUxpdGVy
YWwoIk5ldHdvcmsxIiksIHRoaXMpOworfQorCit2b2lkIEluc3BlY3Rvck5ldHdvcmsxQmFja2Vu
ZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwg
UGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1lc3NhZ2UpCit7CisgICAgUmVmPEluc3BlY3Rv
ck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOworCisgICAgaWYgKG1l
dGhvZCA9PSAibG9hZFJlc291cmNlMSIpCisgICAgICAgIGxvYWRSZXNvdXJjZTEoY2FsbElkLCAq
bWVzc2FnZS5nZXQoKSk7CisgICAgZWxzZQorICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5y
ZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpN
ZXRob2ROb3RGb3VuZCwgU3RyaW5nKCInIikgKyAiTmV0d29yazEiICsgJy4nICsgbWV0aG9kICsg
Iicgd2FzIG5vdCBmb3VuZCIpOworfQorCit2b2lkIEluc3BlY3Rvck5ldHdvcmsxQmFja2VuZERp
c3BhdGNoZXI6OmxvYWRSZXNvdXJjZTEobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVj
dCYpCit7CisgICAgRXJyb3JTdHJpbmcgZXJyb3I7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBtX2FnZW50LT5sb2Fk
UmVzb3VyY2UxKCZlcnJvcik7CisKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9u
c2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBlcnJvcik7Cit9CisKK1Bhc3NSZWZQdHI8SW5z
cGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcj4gSW5zcGVjdG9yTmV0d29yazNCYWNrZW5k
RGlzcGF0Y2hlcjo6Y3JlYXRlKEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlz
cGF0Y2hlciwgSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50
KQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlz
cGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlciwgYWdlbnQpKTsKK30KKworSW5zcGVjdG9yTmV0d29y
azNCYWNrZW5kRGlzcGF0Y2hlcjo6SW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcihJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIsIEluc3BlY3Rvck5l
dHdvcmszQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKKyAgICA6IEluc3BlY3RvclN1
cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyKQorICAgICwgbV9h
Z2VudChhZ2VudCkKK3sKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNo
ZXJGb3JEb21haW4oQVNDSUlMaXRlcmFsKCJOZXR3b3JrMyIpLCB0aGlzKTsKK30KKwordm9pZCBJ
bnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIGNhbGxJZCwg
Y29uc3QgU3RyaW5nJiBtZXRob2QsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtZXNzYWdl
KQoreworICAgIFJlZjxJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0
KCp0aGlzKTsKKworICAgIHR5cGVkZWYgdm9pZCAoSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlz
cGF0Y2hlcjo6KkNhbGxIYW5kbGVyKShsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yOjpJbnNw
ZWN0b3JPYmplY3QmIG1lc3NhZ2UpOworICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIENhbGxI
YW5kbGVyPiBEaXNwYXRjaE1hcDsKKyAgICBERVBSRUNBVEVEX0RFRklORV9TVEFUSUNfTE9DQUwo
RGlzcGF0Y2hNYXAsIGRpc3BhdGNoTWFwLCAoKSk7CisgICAgaWYgKGRpc3BhdGNoTWFwLmlzRW1w
dHkoKSkgeworICAgICAgICBzdGF0aWMgY29uc3Qgc3RydWN0IE1ldGhvZFRhYmxlIHsKKyAgICAg
ICAgICAgIGNvbnN0IGNoYXIqIG5hbWU7CisgICAgICAgICAgICBDYWxsSGFuZGxlciBoYW5kbGVy
OworICAgICAgICB9IGNvbW1hbmRzW10gPSB7CisgICAgICAgICAgICB7ICJsb2FkUmVzb3VyY2Ux
IiwgJkluc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTEgfSwK
KyAgICAgICAgICAgIHsgImxvYWRSZXNvdXJjZTIiLCAmSW5zcGVjdG9yTmV0d29yazNCYWNrZW5k
RGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMiB9LAorICAgICAgICAgICAgeyAibG9hZFJlc291cmNl
MyIsICZJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UzIH0s
CisgICAgICAgICAgICB7ICJsb2FkUmVzb3VyY2U0IiwgJkluc3BlY3Rvck5ldHdvcmszQmFja2Vu
ZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTQgfSwKKyAgICAgICAgICAgIHsgImxvYWRSZXNvdXJj
ZTUiLCAmSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNSB9
LAorICAgICAgICAgICAgeyAibG9hZFJlc291cmNlNiIsICZJbnNwZWN0b3JOZXR3b3JrM0JhY2tl
bmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U2IH0sCisgICAgICAgICAgICB7ICJsb2FkUmVzb3Vy
Y2U3IiwgJkluc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTcg
fSwKKyAgICAgICAgfTsKKyAgICAgICAgc2l6ZV90IGxlbmd0aCA9IFdURl9BUlJBWV9MRU5HVEgo
Y29tbWFuZHMpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQor
ICAgICAgICAgICAgZGlzcGF0Y2hNYXAuYWRkKGNvbW1hbmRzW2ldLm5hbWUsIGNvbW1hbmRzW2ld
LmhhbmRsZXIpOworICAgIH0KKworICAgIEhhc2hNYXA8U3RyaW5nLCBDYWxsSGFuZGxlcj46Oml0
ZXJhdG9yIGl0ID0gZGlzcGF0Y2hNYXAuZmluZChtZXRob2QpOworICAgIGlmIChpdCA9PSBkaXNw
YXRjaE1hcC5lbmQoKSkgeworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90
b2NvbEVycm9yKCZjYWxsSWQsIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RG
b3VuZCwgU3RyaW5nKCInIikgKyAiTmV0d29yazMiICsgJy4nICsgbWV0aG9kICsgIicgd2FzIG5v
dCBmb3VuZCIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgKCgqdGhpcykuKml0LT52
YWx1ZSkoY2FsbElkLCAqbWVzc2FnZS5nZXQoKSk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yTmV0d29y
azNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMShsb25nIGNhbGxJZCwgY29uc3QgSW5z
cGVjdG9yT2JqZWN0JikKK3sKKyAgICBFcnJvclN0cmluZyBlcnJvcjsKKyAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIG1f
YWdlbnQtPmxvYWRSZXNvdXJjZTEoJmVycm9yKTsKKworICAgIG1fYmFja2VuZERpc3BhdGNoZXIt
PnNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIGVycm9yKTsKK30KKwordm9p
ZCBJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UyKGxvbmcg
Y2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmKQoreworICAgIEVycm9yU3RyaW5nIGVycm9y
OworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6
Y3JlYXRlKCk7CisgICAgbV9hZ2VudC0+bG9hZFJlc291cmNlMigmZXJyb3IpOworCisgICAgbV9i
YWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwg
ZXJyb3IpOworfQorCit2b2lkIEluc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6Omxv
YWRSZXNvdXJjZTMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYpCit7CisgICAg
RXJyb3JTdHJpbmcgZXJyb3I7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0g
SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBtX2FnZW50LT5sb2FkUmVzb3VyY2UzKCZl
cnJvcik7CisKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElkLCBy
ZXN1bHQucmVsZWFzZSgpLCBlcnJvcik7Cit9CisKK3ZvaWQgSW5zcGVjdG9yTmV0d29yazNCYWNr
ZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNChsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9y
T2JqZWN0JikKK3sKKyAgICBFcnJvclN0cmluZyBlcnJvcjsKKyAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIG1fYWdlbnQt
PmxvYWRSZXNvdXJjZTQoJmVycm9yKTsKKworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRS
ZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIGVycm9yKTsKK30KKwordm9pZCBJbnNw
ZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U1KGxvbmcgY2FsbElk
LCBjb25zdCBJbnNwZWN0b3JPYmplY3QmKQoreworICAgIEVycm9yU3RyaW5nIGVycm9yOworICAg
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCk7CisgICAgbV9hZ2VudC0+bG9hZFJlc291cmNlNSgmZXJyb3IpOworCisgICAgbV9iYWNrZW5k
RGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgZXJyb3Ip
OworfQorCit2b2lkIEluc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNv
dXJjZTYobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYpCit7CisgICAgRXJyb3JT
dHJpbmcgZXJyb3I7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVj
dG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBtX2FnZW50LT5sb2FkUmVzb3VyY2U2KCZlcnJvcik7
CisKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQu
cmVsZWFzZSgpLCBlcnJvcik7Cit9CisKK3ZvaWQgSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlz
cGF0Y2hlcjo6bG9hZFJlc291cmNlNyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0
JikKK3sKKyAgICBFcnJvclN0cmluZyBlcnJvcjsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIG1fYWdlbnQtPmxvYWRS
ZXNvdXJjZTcoJmVycm9yKTsKKworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25z
ZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIGVycm9yKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorCisjIyMgRW5kIEZpbGU6
IEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBJ
bnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIGRvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbgorLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2Nv
ZGVnZW4vZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpZm5kZWYg
SW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnNfaAorI2RlZmluZSBJbnNwZWN0b3JUZXN0
RnJvbnRlbmREaXNwYXRjaGVyc19oCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVk
ZSAiSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5oIgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwuaD4KKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFs
dWVzLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCit9IC8vIG5hbWVzcGFj
ZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyNlbmRpZiAvLyAh
ZGVmaW5lZChJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVyc19oKQorIyMjIEVuZCBGaWxl
OiBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBJ
bnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCisv
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Y29kZWdlbi9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkluc3BlY3RvclRlc3RGcm9udGVuZERpc3BhdGNoZXJz
LmgiCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
CisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorCisjIyMgRW5kIEZpbGU6IEluc3BlY3Rv
clRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9y
VGVzdFR5cGVCdWlsZGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRv
bWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpZm5kZWYgSW5zcGVjdG9yVGVzdFR5
cGVCdWlsZGVyc19oCisjZGVmaW5lIEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnNfaAorCisjaWYg
RU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JKU1R5cGVC
dWlsZGVycy5oPgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JUeXBlQnVpbGRlci5oPgor
I2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4K
KworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCituYW1lc3BhY2UgVHlwZUJ1aWxkZXIgewor
CisKKworLy8gVHlwZWRlZnMuCituYW1lc3BhY2UgTmV0d29yazIgeworLyogVW5pcXVlIGxvYWRl
ciBpZGVudGlmaWVyLiAqLwordHlwZWRlZiBTdHJpbmcgTG9hZGVySWQ7Cit9IC8vIE5ldHdvcmsy
CisvLyBFbmQgb2YgdHlwZWRlZnMuCisKK1N0cmluZyBnZXRUZXN0RW51bUNvbnN0YW50VmFsdWUo
aW50IGNvZGUpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBTdHJpbmcgZ2V0VGVzdEVudW1Db25z
dGFudFZhbHVlKFQgZW51bVZhbHVlKQoreworICAgIHJldHVybiBnZXRUZXN0RW51bUNvbnN0YW50
VmFsdWUoc3RhdGljX2Nhc3Q8aW50PihlbnVtVmFsdWUpKTsKK30KKworCisKK30gLy8gbmFtZXNw
YWNlIFR5cGVCdWlsZGVyCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8g
RU5BQkxFKElOU1BFQ1RPUikKKworI2VuZGlmIC8vICFkZWZpbmVkKEluc3BlY3RvclRlc3RUeXBl
QnVpbGRlcnNfaCkKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5oCisK
KyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmNwcAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNp
emVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yVGVzdFR5cGVCdWls
ZGVycy5oIgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK25hbWVzcGFjZSBUeXBlQnVpbGRl
ciB7CisKK3N0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBlbnVtX2NvbnN0YW50X3ZhbHVlc1tdID0g
eworfTsKKworU3RyaW5nIGdldFRlc3RFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSkgeworICAg
IHJldHVybiBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb2RlXTsKK30KKworCisKK30gLy8gbmFtZXNw
YWNlIFR5cGVCdWlsZGVyCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8g
RU5BQkxFKElOU1BFQ1RPUikKKworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxk
ZXJzLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2V4cGVjdGVkL2V2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbi1y
ZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhw
ZWN0ZWQvZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uLXJlc3VsdApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5iNGIxMTYzZDBjOGY1YjAwMDI5ZDE5ODdlYTM5YThmM2U1OTcwYzhhCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4
cGVjdGVkL2V2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbi1yZXN1bHQKQEAgLTAs
MCArMSw1MTEgQEAKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0QmFja2VuZENvbW1hbmRz
LmpzCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlv
bmFsLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5CisKKy8vIERhdGFiYXNlLgorSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRh
dGFiYXNlRGlzcGF0Y2hlciA9IEluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW5EaXNwYXRj
aGVyLmJpbmQoSW5zcGVjdG9yQmFja2VuZCwgIkRhdGFiYXNlIik7CitJbnNwZWN0b3JCYWNrZW5k
LnJlZ2lzdGVyRXZlbnQoIkRhdGFiYXNlLmRpZEV4ZWN1dGVPcHRpb25hbFBhcmFtZXRlcnMiLCBb
ImNvbHVtbk5hbWVzIiwgIm5vdGVzIiwgInRpbWVzdGFtcCIsICJ2YWx1ZXMiLCAicGF5bG9hZCIs
ICJzcWxFcnJvciIsICJzY3JlZW5Db2xvciIsICJwcmludENvbG9yIl0pOworSW5zcGVjdG9yQmFj
a2VuZC5yZWdpc3RlckV2ZW50KCJEYXRhYmFzZS5kaWRFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRl
cnMiLCBbImNvbHVtbk5hbWVzIiwgIm5vdGVzIiwgInRpbWVzdGFtcCIsICJ2YWx1ZXMiLCAicGF5
bG9hZCIsICJzcWxFcnJvciIsICJzY3JlZW5Db2xvciIsICJwcmludENvbG9yIl0pOworIyMjIEVu
ZCBGaWxlOiBJbnNwZWN0b3JUZXN0QmFja2VuZENvbW1hbmRzLmpzCisKKyMjIyBCZWdpbiBGaWxl
OiBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uCisvLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29k
ZWdlbi9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2lmbmRlZiBJ
bnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzX2gKKyNkZWZpbmUgSW5zcGVjdG9yVGVzdEJh
Y2tlbmREaXNwYXRjaGVyc19oCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSAi
SW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5oIgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0
eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisK
KyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorCisjZW5kaWYgLy8gIWRlZmluZWQoSW5zcGVj
dG9yVGVzdEJhY2tlbmREaXNwYXRjaGVyc19oKQorIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0
QmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RCYWNr
ZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2
ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCisKKyNpZiBFTkFCTEUoSU5T
UEVDVE9SKQorCisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5o
PgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYv
dGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworfSAvLyBuYW1l
c3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorCisjIyMgRW5k
IEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBG
aWxlOiBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbgor
Ly8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2NvZGVnZW4vZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpZm5k
ZWYgSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnNfaAorI2RlZmluZSBJbnNwZWN0b3JU
ZXN0RnJvbnRlbmREaXNwYXRjaGVyc19oCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5j
bHVkZSAiSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5oIgorI2luY2x1ZGUgPGluc3BlY3Rvci9J
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4KKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9y
VmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCisjaWYgRU5BQkxF
KFNRTF9EQVRBQkFTRSkKK2NsYXNzIEluc3BlY3RvckRhdGFiYXNlRnJvbnRlbmREaXNwYXRjaGVy
IHsKK3B1YmxpYzoKKyAgICBJbnNwZWN0b3JEYXRhYmFzZUZyb250ZW5kRGlzcGF0Y2hlcihJbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgOiBtX2luc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbChpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgfQorICAgIHZv
aWQgZGlkRXhlY3V0ZU9wdGlvbmFsUGFyYW1ldGVycyhQYXNzUmVmUHRyPEluc3BlY3Rvcjo6VHlw
ZUJ1aWxkZXI6OkFycmF5PFN0cmluZz4+IGNvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcqIGNvbnN0
IG5vdGVzLCBjb25zdCBkb3VibGUqIGNvbnN0IHRpbWVzdGFtcCwgUGFzc1JlZlB0cjxJbnNwZWN0
b3I6Okluc3BlY3Rvck9iamVjdD4gdmFsdWVzLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVj
dG9yVmFsdWU+IHBheWxvYWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6RGF0
YWJhc2U6OkVycm9yPiBzcWxFcnJvciwgY29uc3QgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6RGF0
YWJhc2U6OlByaW1hcnlDb2xvcnMqIGNvbnN0IHNjcmVlbkNvbG9yLCBjb25zdCBTdHJpbmcqIGNv
bnN0IHByaW50Q29sb3IpOworICAgIHZvaWQgZGlkRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJz
KFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk8U3RyaW5nPj4gY29sdW1u
TmFtZXMsIGNvbnN0IFN0cmluZyYgbm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIFBhc3NSZWZQdHI8
SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IHZhbHVlcywgUGFzc1JlZlB0cjxJbnNwZWN0b3I6
Okluc3BlY3RvclZhbHVlPiBwYXlsb2FkLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxk
ZXI6OkRhdGFiYXNlOjpFcnJvcj4gc3FsRXJyb3IsIGNvbnN0IEluc3BlY3Rvcjo6VHlwZUJ1aWxk
ZXI6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzJiBzY3JlZW5Db2xvciwgY29uc3QgU3RyaW5nJiBw
cmludENvbG9yKTsKK3ByaXZhdGU6CisgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2lu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKK307CisjZW5kaWYgLy8gRU5BQkxFKFNRTF9EQVRBQkFT
RSkKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVD
VE9SKQorCisjZW5kaWYgLy8gIWRlZmluZWQoSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hl
cnNfaCkKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAor
CisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBh
cmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JUZXN0RnJv
bnRlbmREaXNwYXRjaGVycy5oIgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUg
PHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKyNpZiBFTkFC
TEUoU1FMX0RBVEFCQVNFKQordm9pZCBJbnNwZWN0b3JEYXRhYmFzZUZyb250ZW5kRGlzcGF0Y2hl
cjo6ZGlkRXhlY3V0ZU9wdGlvbmFsUGFyYW1ldGVycyhQYXNzUmVmUHRyPEluc3BlY3Rvcjo6VHlw
ZUJ1aWxkZXI6OkFycmF5PFN0cmluZz4+IGNvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcqIGNvbnN0
IG5vdGVzLCBjb25zdCBkb3VibGUqIGNvbnN0IHRpbWVzdGFtcCwgUGFzc1JlZlB0cjxJbnNwZWN0
b3I6Okluc3BlY3Rvck9iamVjdD4gdmFsdWVzLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVj
dG9yVmFsdWU+IHBheWxvYWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6RGF0
YWJhc2U6OkVycm9yPiBzcWxFcnJvciwgY29uc3QgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6RGF0
YWJhc2U6OlByaW1hcnlDb2xvcnMqIGNvbnN0IHNjcmVlbkNvbG9yLCBjb25zdCBTdHJpbmcqIGNv
bnN0IHByaW50Q29sb3IpCit7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4ganNvbk1lc3Nh
Z2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIGpzb25NZXNzYWdlLT5zZXRTdHJp
bmcoQVNDSUlMaXRlcmFsKCJtZXRob2QiKSwgQVNDSUlMaXRlcmFsKCJEYXRhYmFzZS5kaWRFeGVj
dXRlT3B0aW9uYWxQYXJhbWV0ZXJzIikpOworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBh
cmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgaWYgKGNvbHVtbk5h
bWVzKQorICAgICAgICBwYXJhbXNPYmplY3QtPnNldEFycmF5KEFTQ0lJTGl0ZXJhbCgiY29sdW1u
TmFtZXMiKSwgY29sdW1uTmFtZXMpOworICAgIGlmIChub3RlcykKKyAgICAgICAgcGFyYW1zT2Jq
ZWN0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJub3RlcyIpLCAqbm90ZXMpOworICAgIGlmICh0
aW1lc3RhbXApCisgICAgICAgIHBhcmFtc09iamVjdC0+c2V0TnVtYmVyKEFTQ0lJTGl0ZXJhbCgi
dGltZXN0YW1wIiksICp0aW1lc3RhbXApOworICAgIGlmICh2YWx1ZXMpCisgICAgICAgIHBhcmFt
c09iamVjdC0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgidmFsdWVzIiksIHZhbHVlcyk7CisgICAg
aWYgKHBheWxvYWQpCisgICAgICAgIHBhcmFtc09iamVjdC0+c2V0VmFsdWUoQVNDSUlMaXRlcmFs
KCJwYXlsb2FkIiksICpwYXlsb2FkKTsKKyAgICBpZiAoc3FsRXJyb3IpCisgICAgICAgIHBhcmFt
c09iamVjdC0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgic3FsRXJyb3IiKSwgc3FsRXJyb3IpOwor
ICAgIGlmIChzY3JlZW5Db2xvcikKKyAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoQVND
SUlMaXRlcmFsKCJzY3JlZW5Db2xvciIpLCAqc2NyZWVuQ29sb3IpOworICAgIGlmIChwcmludENv
bG9yKQorICAgICAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInByaW50
Q29sb3IiKSwgKnByaW50Q29sb3IpOworICAgIGpzb25NZXNzYWdlLT5zZXRPYmplY3QoQVNDSUlM
aXRlcmFsKCJwYXJhbXMiKSwgcGFyYW1zT2JqZWN0KTsKKworICAgIG1faW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmlu
ZygpKTsKK30KKwordm9pZCBJbnNwZWN0b3JEYXRhYmFzZUZyb250ZW5kRGlzcGF0Y2hlcjo6ZGlk
RXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVp
bGRlcjo6QXJyYXk8U3RyaW5nPj4gY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgbm90ZXMsIGRv
dWJsZSB0aW1lc3RhbXAsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IHZh
bHVlcywgUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiBwYXlsb2FkLCBQYXNz
UmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkRhdGFiYXNlOjpFcnJvcj4gc3FsRXJyb3Is
IGNvbnN0IEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzJiBz
Y3JlZW5Db2xvciwgY29uc3QgU3RyaW5nJiBwcmludENvbG9yKQoreworICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IGpzb25NZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAg
ICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgibWV0aG9kIiksIEFTQ0lJTGl0
ZXJhbCgiRGF0YWJhc2UuZGlkRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzIikpOworICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc09iamVjdCA9IEluc3BlY3Rvck9iamVjdDo6Y3Jl
YXRlKCk7CisgICAgcGFyYW1zT2JqZWN0LT5zZXRBcnJheShBU0NJSUxpdGVyYWwoImNvbHVtbk5h
bWVzIiksIGNvbHVtbk5hbWVzKTsKKyAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZyhBU0NJSUxp
dGVyYWwoIm5vdGVzIiksIG5vdGVzKTsKKyAgICBwYXJhbXNPYmplY3QtPnNldE51bWJlcihBU0NJ
SUxpdGVyYWwoInRpbWVzdGFtcCIpLCB0aW1lc3RhbXApOworICAgIHBhcmFtc09iamVjdC0+c2V0
T2JqZWN0KEFTQ0lJTGl0ZXJhbCgidmFsdWVzIiksIHZhbHVlcyk7CisgICAgcGFyYW1zT2JqZWN0
LT5zZXRWYWx1ZShBU0NJSUxpdGVyYWwoInBheWxvYWQiKSwgcGF5bG9hZCk7CisgICAgcGFyYW1z
T2JqZWN0LT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJzcWxFcnJvciIpLCBzcWxFcnJvcik7Cisg
ICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJzY3JlZW5Db2xvciIpLCBz
Y3JlZW5Db2xvcik7CisgICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJw
cmludENvbG9yIiksIHByaW50Q29sb3IpOworICAgIGpzb25NZXNzYWdlLT5zZXRPYmplY3QoQVND
SUlMaXRlcmFsKCJwYXJhbXMiKSwgcGFyYW1zT2JqZWN0KTsKKworICAgIG1faW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0
cmluZygpKTsKK30KKyNlbmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQorCit9IC8vIG5hbWVz
cGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyMjIyBFbmQg
RmlsZTogSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBG
aWxlOiBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
MywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uCisvLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdl
bi9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2lmbmRlZiBJbnNw
ZWN0b3JUZXN0VHlwZUJ1aWxkZXJzX2gKKyNkZWZpbmUgSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVy
c19oCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3Bl
Y3RvckpTVHlwZUJ1aWxkZXJzLmg+CisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclR5cGVC
dWlsZGVyLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvUGFz
c1JlZlB0ci5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKK25hbWVzcGFjZSBUeXBl
QnVpbGRlciB7CisKKy8vIEZvcndhcmQgZGVjbGFyYXRpb25zLgorI2lmIEVOQUJMRShTUUxfREFU
QUJBU0UpCituYW1lc3BhY2UgRGF0YWJhc2UgeworY2xhc3MgRXJyb3I7Cit9IC8vIERhdGFiYXNl
CisjZW5kaWYgLy8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKKy8vIEVuZCBvZiBmb3J3YXJkIGRlY2xh
cmF0aW9ucy4KKworCisvLyBUeXBlZGVmcy4KKyNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQorbmFt
ZXNwYWNlIERhdGFiYXNlIHsKKy8qIFVuaXF1ZSBpZGVudGlmaWVyIG9mIERhdGFiYXNlIG9iamVj
dC4gKi8KK3R5cGVkZWYgU3RyaW5nIERhdGFiYXNlSWQ7CisKK3R5cGVkZWYgU3RyaW5nIFByaW1h
cnlDb2xvcnM7Cit9IC8vIERhdGFiYXNlCisjZW5kaWYgLy8gRU5BQkxFKFNRTF9EQVRBQkFTRSkK
Ky8vIEVuZCBvZiB0eXBlZGVmcy4KKworU3RyaW5nIGdldFRlc3RFbnVtQ29uc3RhbnRWYWx1ZShp
bnQgY29kZSk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IFN0cmluZyBnZXRUZXN0RW51bUNvbnN0
YW50VmFsdWUoVCBlbnVtVmFsdWUpCit7CisgICAgcmV0dXJuIGdldFRlc3RFbnVtQ29uc3RhbnRW
YWx1ZShzdGF0aWNfY2FzdDxpbnQ+KGVudW1WYWx1ZSkpOworfQorCisjaWYgRU5BQkxFKFNRTF9E
QVRBQkFTRSkKK25hbWVzcGFjZSBEYXRhYmFzZSB7CisvKiBEYXRhYmFzZSBlcnJvci4gKi8KK2Ns
YXNzIEVycm9yIDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0QmFzZSB7CitwdWJs
aWM6CisgICAgZW51bSB7CisgICAgICAgIE5vRmllbGRzU2V0ID0gMCwKKyAgICAgICAgTWVzc2Fn
ZVNldCA9IDEgPDwgMCwKKyAgICAgICAgQ29kZVNldCA9IDEgPDwgMSwKKyAgICAgICAgQWxsRmll
bGRzU2V0ID0gKE1lc3NhZ2VTZXQgfCBDb2RlU2V0KQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTxp
bnQgU1RBVEU+CisgICAgY2xhc3MgQnVpbGRlciB7CisgICAgcHJpdmF0ZToKKyAgICAgICAgUmVm
UHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKKworICAgICAgICB0ZW1w
bGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8
IFNURVA+Kj4odGhpcyk7CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8
LypFcnJvciovSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IHB0cikKKyAgICAgICAgeworICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3Jl
YXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKKyAg
ICAgICAgfQorICAgICAgICBmcmllbmQgY2xhc3MgRXJyb3I7CisgICAgcHVibGljOgorCisgICAg
ICAgIEJ1aWxkZXI8U1RBVEUgfCBNZXNzYWdlU2V0PiYgc2V0TWVzc2FnZShjb25zdCBTdHJpbmcm
IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYg
TWVzc2FnZVNldCksIHByb3BlcnR5X21lc3NhZ2VfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAg
bV9yZXN1bHQtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoIm1lc3NhZ2UiKSwgdmFsdWUpOworICAg
ICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxNZXNzYWdlU2V0PigpOworICAgICAgICB9CisKKyAg
ICAgICAgQnVpbGRlcjxTVEFURSB8IENvZGVTZXQ+JiBzZXRDb2RlKGludCB2YWx1ZSkKKyAgICAg
ICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIENvZGVTZXQpLCBwcm9w
ZXJ0eV9jb2RlX2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIo
QVNDSUlMaXRlcmFsKCJjb2RlIiksIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3Rh
dGU8Q29kZVNldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIG9wZXJhdG9yIFJlZlB0cjxFcnJv
cj4mICgpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFs
bEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CisgICAgICAgICAgICBDT01QSUxFX0FT
U0VSVChzaXplb2YoRXJyb3IpID09IHNpemVvZihJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCks
IGNhbm5vdF9jYXN0KTsKKyAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQ
dHI8RXJyb3I+Kj4oJm1fcmVzdWx0KTsKKyAgICAgICAgfQorCisgICAgICAgIFBhc3NSZWZQdHI8
RXJyb3I+IHJlbGVhc2UoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gUmVmUHRyPEVy
cm9yPigqdGhpcykucmVsZWFzZSgpOworICAgICAgICB9CisgICAgfTsKKworICAgIC8qCisgICAg
ICogU3ludGhldGljIGNvbnN0cnVjdG9yOgorICAgICAqIFJlZlB0cjxFcnJvcj4gcmVzdWx0ID0g
RXJyb3I6OmNyZWF0ZSgpCisgICAgICogICAgIC5zZXRNZXNzYWdlKC4uLikKKyAgICAgKiAgICAg
LnNldENvZGUoLi4uKTsKKyAgICAgKi8KKyAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4g
Y3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihJbnNw
ZWN0b3I6Okluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkpOworICAgIH0KKyAgICB0eXBlZGVmIElu
c3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlN0cnVjdEl0ZW1UcmFpdHMgSXRlbVRyYWl0czsKK307CisK
K30gLy8gRGF0YWJhc2UKKyNlbmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQorCisKKworfSAv
LyBuYW1lc3BhY2UgVHlwZUJ1aWxkZXIKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNl
bmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorCisjZW5kaWYgLy8gIWRlZmluZWQoSW5zcGVjdG9y
VGVzdFR5cGVCdWlsZGVyc19oKQorIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxk
ZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuY3BwCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJ
dCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGV2ZW50cy13aXRoLW9wdGlvbmFsLXBh
cmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JUZXN0VHlw
ZUJ1aWxkZXJzLmgiCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSA8d3RmL3Rl
eHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworbmFtZXNwYWNlIFR5cGVC
dWlsZGVyIHsKKworc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGVudW1fY29uc3RhbnRfdmFsdWVz
W10gPSB7Cit9OworCitTdHJpbmcgZ2V0VGVzdEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKSB7
CisgICAgcmV0dXJuIGVudW1fY29uc3RhbnRfdmFsdWVzW2NvZGVdOworfQorCisKKworfSAvLyBu
YW1lc3BhY2UgVHlwZUJ1aWxkZXIKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRp
ZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorCisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RUeXBl
QnVpbGRlcnMuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1kdXBsaWNhdGUtdHlwZS1kZWNsYXJhdGlv
bnMuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWR1cGxpY2F0ZS10eXBlLWRlY2xhcmF0aW9ucy5qc29uLWVy
cm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjQ0N2NkZjhlMjhlODU2NjEwYTI2ZjgxNTQ5NDNmMzZjZjhiN2QxZjQK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1kdXBsaWNhdGUtdHlwZS1kZWNsYXJhdGlvbnMuanNv
bi1lcnJvcgpAQCAtMCwwICsxIEBACitFUlJPUjogRHVwbGljYXRlIHR5cGUgZGVjbGFyYXRpb246
IFJ1bnRpbWUuUmVtb3RlT2JqZWN0SWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWVudW0td2l0aC1uby12
YWx1ZXMuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWVudW0td2l0aC1uby12YWx1ZXMuanNvbi1lcnJvcgpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4yNjU1YzJiOTA3ZTAyZTNlODRjYjNmNjZmYTFmNThlMTNkOWI3YjUzCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2V4cGVjdGVkL2ZhaWwtb24tZW51bS13aXRoLW5vLXZhbHVlcy5qc29uLWVycm9yCkBAIC0w
LDAgKzEgQEAKK0VSUk9SOiBUeXBlIHJlZmVyZW5jZSB3aXRoIGVudW0gdmFsdWVzIG11c3QgaGF2
ZSBhdCBsZWFzdCBvbmUgZW51bSB2YWx1ZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLXN0cmluZy10eXBl
ZC1vcHRpb25hbC1wYXJhbWV0ZXItZmxhZy5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tc3RyaW5nLXR5cGVk
LW9wdGlvbmFsLXBhcmFtZXRlci1mbGFnLmpzb24tZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTdiMmFmMGU0
N2U5M2Y4MDQ5Nzk0NDQ3MjU3ZGYzMjcyM2YwNjgyNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9u
LXN0cmluZy10eXBlZC1vcHRpb25hbC1wYXJhbWV0ZXItZmxhZy5qc29uLWVycm9yCkBAIC0wLDAg
KzEgQEAKK0VSUk9SOiBUaGUgJ29wdGlvbmFsJyBmbGFnIGZvciBhIHBhcmFtZXRlciBtdXN0IGJl
IGEgYm9vbGVhbiBsaXRlcmFsLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tc3RyaW5nLXR5cGVkLW9wdGlv
bmFsLXR5cGUtbWVtYmVyLmpzb24tZXJyb3IgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1zdHJpbmctdHlwZWQtb3B0aW9uYWwt
dHlwZS1tZW1iZXIuanNvbi1lcnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44NmRmMzc1MGMxYTc3OTc4OTNjYmZi
N2UyODc2ZDkyY2NlY2MyZjkxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tc3RyaW5nLXR5cGVk
LW9wdGlvbmFsLXR5cGUtbWVtYmVyLmpzb24tZXJyb3IKQEAgLTAsMCArMSBAQAorRVJST1I6IFRo
ZSAnb3B0aW9uYWwnIGZsYWcgZm9yIGEgdHlwZSBtZW1iZXIgbXVzdCBiZSBhIGJvb2xlYW4gbGl0
ZXJhbC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLXR5cGUtZGVjbGFyYXRpb24tdXNpbmctdHlwZS1yZWZl
cmVuY2UuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLXR5cGUtZGVjbGFyYXRpb24tdXNpbmctdHlwZS1yZWZl
cmVuY2UuanNvbi1lcnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40MmY1NzUzYTQzOTYxNDRlYjU2NmM1YzU5Njhk
MDQ5YWVjNjE4MmRiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tdHlwZS1kZWNsYXJhdGlvbi11
c2luZy10eXBlLXJlZmVyZW5jZS5qc29uLWVycm9yCkBAIC0wLDAgKzEgQEAKK0VSUk9SOiBUeXBl
IHJlZmVyZW5jZSBjYW5ub3QgaGF2ZSBib3RoICd0eXBlJyBhbmQgJyRyZWYnIGtleXMuCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhw
ZWN0ZWQvZmFpbC1vbi10eXBlLXdpdGgtbG93ZXJjYXNlLW5hbWUuanNvbi1lcnJvciBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9u
LXR5cGUtd2l0aC1sb3dlcmNhc2UtbmFtZS5qc29uLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRlNDYyMjUw
YzBhZjgwYTE3OWUwNmFhZjQ1ZDIxZWI1NDZkYjg4MTQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1v
bi10eXBlLXdpdGgtbG93ZXJjYXNlLW5hbWUuanNvbi1lcnJvcgpAQCAtMCwwICsxIEBACitFUlJP
UjogVHlwZXMgbXVzdCBiZWdpbiB3aXRoIGFuIHVwcGVyY2FzZSBjaGFyYWN0ZXIuCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0
ZWQvZmFpbC1vbi11bmtub3duLXR5cGUtcmVmZXJlbmNlLWluLXR5cGUtZGVjbGFyYXRpb24uanNv
bi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9l
eHBlY3RlZC9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1kZWNsYXJhdGlv
bi5qc29uLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQzYzc4MmQ4OWRiNTY1ZDcyNGU3NTQwZTMyZWRjZmRi
ZDc5YTJmNzMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi11bmtub3duLXR5cGUtcmVmZXJlbmNl
LWluLXR5cGUtZGVjbGFyYXRpb24uanNvbi1lcnJvcgpAQCAtMCwwICsxIEBACitFUlJPUjogTG9v
a3VwIGZhaWxlZCBmb3IgdHlwZSByZWZlcmVuY2U6IGRyYWdvbiAocmVmZXJlbmNlZCBmcm9tIGRv
bWFpbjogUnVudGltZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2Ut
aW4tdHlwZS1tZW1iZXIuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2Ut
aW4tdHlwZS1tZW1iZXIuanNvbi1lcnJvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mYWY2NjcyY2JlZjA5NjMwZmQ5
YmU4ZmZhZGFjZTEyYzU2MTFjY2E4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tdW5rbm93bi10
eXBlLXJlZmVyZW5jZS1pbi10eXBlLW1lbWJlci5qc29uLWVycm9yCkBAIC0wLDAgKzEgQEAKK0VS
Uk9SOiBMb29rdXAgZmFpbGVkIGZvciB0eXBlIHJlZmVyZW5jZTogQ29sb3IgKHJlZmVyZW5jZWQg
ZnJvbSBkb21haW46IEZhbnRhc3kpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvc2FtZS10eXBlLWlkLWRpZmZlcmVudC1k
b21haW4uanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZXhwZWN0ZWQvc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbi1yZXN1
bHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMWFmZGM1ODc5MTYxZDg5ZmM4NzIwM2JmNjkyMDM2MWFkYzliYWI5Mwot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9leHBlY3RlZC9zYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uLXJlc3Vs
dApAQCAtMCwwICsxLDM3MCBAQAorIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5k
Q29tbWFuZHMuanMKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2FtZS10eXBl
LWlkLWRpZmZlcmVudC1kb21haW4uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5CisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kQ29t
bWFuZHMuanMKKworIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hl
cnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlm
ZmVyZW50LWRvbWFpbi5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKKworI2lmbmRlZiBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzX2gK
KyNkZWZpbmUgSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVyc19oCisKKyNpZiBFTkFCTEUo
SU5TUEVDVE9SKQorCisjaW5jbHVkZSAiSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5oIgorI2lu
Y2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUg
PHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25h
bWVzcGFjZSBJbnNwZWN0b3IgeworCit0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKworfSAv
LyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorCisj
ZW5kaWYgLy8gIWRlZmluZWQoSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVyc19oKQorIyMj
IEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2lu
IEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24K
Ky8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9jb2RlZ2VuL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVy
cy5oIgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwuaD4KKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFs
dWVzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVj
dG9yIHsKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxF
KElOU1BFQ1RPUikKKworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNo
ZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hl
cnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMg
RklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlm
ZmVyZW50LWRvbWFpbi5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKKworI2lmbmRlZiBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVyc19o
CisjZGVmaW5lIEluc3BlY3RvclRlc3RGcm9udGVuZERpc3BhdGNoZXJzX2gKKworI2lmIEVOQUJM
RShJTlNQRUNUT1IpCisKKyNpbmNsdWRlICJJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmgiCisj
aW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oPgorI2luY2x1ZGUg
PGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5o
PgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9y
IHsKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElO
U1BFQ1RPUikKKworI2VuZGlmIC8vICFkZWZpbmVkKEluc3BlY3RvclRlc3RGcm9udGVuZERpc3Bh
dGNoZXJzX2gpCisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RGcm9udGVuZERpc3BhdGNoZXJz
LmgKKworIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNw
cAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVy
ZW50LWRvbWFpbi5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkluc3BlY3RvclRlc3RG
cm9udGVuZERpc3BhdGNoZXJzLmgiCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVk
ZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworfSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorCisjIyMg
RW5kIEZpbGU6IEluc3BlY3RvclRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVn
aW4gRmlsZTogSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5oCisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIHNhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24KKy8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2Rl
Z2VuL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaWZuZGVmIElu
c3BlY3RvclRlc3RUeXBlQnVpbGRlcnNfaAorI2RlZmluZSBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxk
ZXJzX2gKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5z
cGVjdG9ySlNUeXBlQnVpbGRlcnMuaD4KKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVHlw
ZUJ1aWxkZXIuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9Q
YXNzUmVmUHRyLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworbmFtZXNwYWNlIFR5
cGVCdWlsZGVyIHsKKworCisKKy8vIFR5cGVkZWZzLgorbmFtZXNwYWNlIFJ1bnRpbWUgeworLyog
VW5pcXVlIG9iamVjdCBpZGVudGlmaWVyLiAqLwordHlwZWRlZiBTdHJpbmcgUmVtb3RlT2JqZWN0
SWQ7Cit9IC8vIFJ1bnRpbWUKKworbmFtZXNwYWNlIFJ1bnRpbWUyIHsKKy8qIFVuaXF1ZSBvYmpl
Y3QgaWRlbnRpZmllci4gKi8KK3R5cGVkZWYgU3RyaW5nIFJlbW90ZU9iamVjdElkOworfSAvLyBS
dW50aW1lMgorLy8gRW5kIG9mIHR5cGVkZWZzLgorCitTdHJpbmcgZ2V0VGVzdEVudW1Db25zdGFu
dFZhbHVlKGludCBjb2RlKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gU3RyaW5nIGdldFRlc3RF
bnVtQ29uc3RhbnRWYWx1ZShUIGVudW1WYWx1ZSkKK3sKKyAgICByZXR1cm4gZ2V0VGVzdEVudW1D
b25zdGFudFZhbHVlKHN0YXRpY19jYXN0PGludD4oZW51bVZhbHVlKSk7Cit9CisKKworCit9IC8v
IG5hbWVzcGFjZSBUeXBlQnVpbGRlcgorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2Vu
ZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyNlbmRpZiAvLyAhZGVmaW5lZChJbnNwZWN0b3JU
ZXN0VHlwZUJ1aWxkZXJzX2gpCisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RUeXBlQnVpbGRl
cnMuaAorCisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5jcHAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2FtZS10eXBlLWlkLWRpZmZlcmVudC1k
b21haW4uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JUZXN0VHlwZUJ1
aWxkZXJzLmgiCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworbmFtZXNwYWNlIFR5cGVCdWls
ZGVyIHsKKworc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGVudW1fY29uc3RhbnRfdmFsdWVzW10g
PSB7Cit9OworCitTdHJpbmcgZ2V0VGVzdEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKSB7Cisg
ICAgcmV0dXJuIGVudW1fY29uc3RhbnRfdmFsdWVzW2NvZGVdOworfQorCisKKworfSAvLyBuYW1l
c3BhY2UgVHlwZUJ1aWxkZXIKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAv
LyBFTkFCTEUoSU5TUEVDVE9SKQorCisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RUeXBlQnVp
bGRlcnMuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZXhwZWN0ZWQvc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24t
cmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4
cGVjdGVkL3NoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uLXJlc3VsdApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5lMjAzN2RjMzcyYjVjZDhlZDkyYWY1NmQ0MGU1ZDFmOGIzZmIyNmM1Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4
cGVjdGVkL3NoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uLXJlc3VsdApAQCAtMCww
ICsxLDQ0NiBAQAorIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kQ29tbWFuZHMu
anMKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93ZWQtb3B0aW9uYWwt
dHlwZS1zZXR0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQorIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0QmFja2VuZENvbW1hbmRzLmpz
CisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1z
ZXR0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQorCisjaWZuZGVmIEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnNfaAorI2RlZmlu
ZSBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzX2gKKworI2lmIEVOQUJMRShJTlNQRUNU
T1IpCisKKyNpbmNsdWRlICJJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmgiCisjaW5jbHVkZSA8
aW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8d3RmL1Bh
c3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNl
IEluc3BlY3RvciB7CisKK3R5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCit9IC8vIG5hbWVz
cGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyNlbmRpZiAv
LyAhZGVmaW5lZChJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzX2gpCisjIyMgRW5kIEZp
bGU6IEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTog
SW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KKy8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2Rl
Z2VuL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgor
CisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwuaD4KKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsK
KworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BF
Q1RPUikKKworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNw
cAorCisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaGFkb3dlZC1vcHRpb25hbC10eXBl
LXNldHRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5CisKKyNpZm5kZWYgSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnNfaAorI2Rl
ZmluZSBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVyc19oCisKKyNpZiBFTkFCTEUoSU5T
UEVDVE9SKQorCisjaW5jbHVkZSAiSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5oIgorI2luY2x1
ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4KKyNpbmNsdWRlIDxpbnNw
ZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisK
KworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNU
T1IpCisKKyNlbmRpZiAvLyAhZGVmaW5lZChJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVy
c19oKQorIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisK
KyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1z
ZXR0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yVGVzdEZyb250
ZW5kRGlzcGF0Y2hlcnMuaCIKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRlIDx3
dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit9IC8vIG5hbWVz
cGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyMjIyBFbmQg
RmlsZTogSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBG
aWxlOiBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
MywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KKy8vIGJ5IHRo
ZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2Vu
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaWZuZGVmIEluc3Bl
Y3RvclRlc3RUeXBlQnVpbGRlcnNfaAorI2RlZmluZSBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJz
X2gKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVj
dG9ySlNUeXBlQnVpbGRlcnMuaD4KKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVHlwZUJ1
aWxkZXIuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9QYXNz
UmVmUHRyLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworbmFtZXNwYWNlIFR5cGVC
dWlsZGVyIHsKKworLy8gRm9yd2FyZCBkZWNsYXJhdGlvbnMuCituYW1lc3BhY2UgUnVudGltZSB7
CitjbGFzcyBLZXlQYXRoOworfSAvLyBSdW50aW1lCisvLyBFbmQgb2YgZm9yd2FyZCBkZWNsYXJh
dGlvbnMuCisKKworCisKK1N0cmluZyBnZXRUZXN0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUp
OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBTdHJpbmcgZ2V0VGVzdEVudW1Db25zdGFudFZhbHVl
KFQgZW51bVZhbHVlKQoreworICAgIHJldHVybiBnZXRUZXN0RW51bUNvbnN0YW50VmFsdWUoc3Rh
dGljX2Nhc3Q8aW50PihlbnVtVmFsdWUpKTsKK30KKworbmFtZXNwYWNlIFJ1bnRpbWUgeworLyog
S2V5IHBhdGguICovCitjbGFzcyBLZXlQYXRoIDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9y
T2JqZWN0QmFzZSB7CitwdWJsaWM6CisgICAgLy8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAn
dHlwZScgd2hpbGUgZ2VuZXJhdGluZyBLZXlQYXRoLgorICAgIGVudW0gY2xhc3MgVHlwZSB7Cisg
ICAgICAgIE51bGwgPSAwLAorICAgICAgICBTdHJpbmcgPSAxLAorICAgICAgICBBcnJheSA9IDIs
CisgICAgfTsgLy8gZW51bSBjbGFzcyBUeXBlCisgICAgZW51bSB7CisgICAgICAgIE5vRmllbGRz
U2V0ID0gMCwKKyAgICAgICAgVHlwZVNldCA9IDEgPDwgMCwKKyAgICAgICAgQWxsRmllbGRzU2V0
ID0gKFR5cGVTZXQpCisgICAgfTsKKworICAgIHRlbXBsYXRlPGludCBTVEFURT4KKyAgICBjbGFz
cyBCdWlsZGVyIHsKKyAgICBwcml2YXRlOgorICAgICAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNw
ZWN0b3JPYmplY3Q+IG1fcmVzdWx0OworCisgICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWls
ZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKKyAg
ICAgICAgfQorCisgICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjwvKktleVBhdGgqL0luc3BlY3Rv
cjo6SW5zcGVjdG9yT2JqZWN0PiBwdHIpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRf
c3RhdGUpOworICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CisgICAgICAgIH0KKyAgICAgICAg
ZnJpZW5kIGNsYXNzIEtleVBhdGg7CisgICAgcHVibGljOgorCisgICAgICAgIEJ1aWxkZXI8U1RB
VEUgfCBUeXBlU2V0PiYgc2V0VHlwZShUeXBlIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVHlwZVNldCksIHByb3BlcnR5X3R5cGVfYWxyZWFk
eV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInR5
cGUiKSwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Z2V0VGVzdEVudW1Db25zdGFudFZhbHVlKHN0
YXRpY19jYXN0PGludD4odmFsdWUpKSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFR5
cGVTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBvcGVyYXRvciBSZWZQdHI8S2V5UGF0aD4m
ICgpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZp
ZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VS
VChzaXplb2YoS2V5UGF0aCkgPT0gc2l6ZW9mKEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0KSwg
Y2Fubm90X2Nhc3QpOworICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0
cjxLZXlQYXRoPio+KCZtX3Jlc3VsdCk7CisgICAgICAgIH0KKworICAgICAgICBQYXNzUmVmUHRy
PEtleVBhdGg+IHJlbGVhc2UoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gUmVmUHRy
PEtleVBhdGg+KCp0aGlzKS5yZWxlYXNlKCk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgLyoK
KyAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CisgICAgICogUmVmUHRyPEtleVBhdGg+IHJl
c3VsdCA9IEtleVBhdGg6OmNyZWF0ZSgpCisgICAgICogICAgIC5zZXRUeXBlKC4uLik7CisgICAg
ICovCisgICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCisgICAgeworICAg
ICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmpl
Y3Q6OmNyZWF0ZSgpKTsKKyAgICB9CisgICAgdHlwZWRlZiBJbnNwZWN0b3I6OlR5cGVCdWlsZGVy
OjpTdHJ1Y3RJdGVtVHJhaXRzIEl0ZW1UcmFpdHM7CisKKyAgICB2b2lkIHNldFN0cmluZyhjb25z
dCBTdHJpbmcmIHZhbHVlKQorICAgIHsKKyAgICAgICAgSW5zcGVjdG9yT2JqZWN0QmFzZTo6c2V0
U3RyaW5nKEFTQ0lJTGl0ZXJhbCgic3RyaW5nIiksIHZhbHVlKTsKKyAgICB9CisKKyAgICB2b2lk
IHNldEFycmF5KFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk8U3RyaW5n
Pj4gdmFsdWUpCisgICAgeworICAgICAgICBJbnNwZWN0b3JPYmplY3RCYXNlOjpzZXRBcnJheShB
U0NJSUxpdGVyYWwoImFycmF5IiksIHZhbHVlKTsKKyAgICB9Cit9OworCit9IC8vIFJ1bnRpbWUK
KworCisKK30gLy8gbmFtZXNwYWNlIFR5cGVCdWlsZGVyCisKK30gLy8gbmFtZXNwYWNlIEluc3Bl
Y3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKworI2VuZGlmIC8vICFkZWZpbmVk
KEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnNfaCkKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVz
dFR5cGVCdWlsZGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxk
ZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaGFkb3dlZC1vcHRp
b25hbC10eXBlLXNldHRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnNwZWN0
b3JUZXN0VHlwZUJ1aWxkZXJzLmgiCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVk
ZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworbmFtZXNw
YWNlIFR5cGVCdWlsZGVyIHsKKworc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGVudW1fY29uc3Rh
bnRfdmFsdWVzW10gPSB7CisgICAgIm51bGwiLAorICAgICJzdHJpbmciLAorICAgICJhcnJheSIs
Cit9OworCitTdHJpbmcgZ2V0VGVzdEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKSB7CisgICAg
cmV0dXJuIGVudW1fY29uc3RhbnRfdmFsdWVzW2NvZGVdOworfQorCisKKworfSAvLyBuYW1lc3Bh
Y2UgVHlwZUJ1aWxkZXIKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBF
TkFCTEUoSU5TUEVDVE9SKQorCisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RUeXBlQnVpbGRl
cnMuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBl
Lmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29u
LXJlc3VsdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi45OWFmZTEwNjhiMjI2MTVlZGZlMTUxZDVjMTcwMmMwYjQxZjk2
MTE5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUt
dHlwZS5qc29uLXJlc3VsdApAQCAtMCwwICsxLDM2NSBAQAorIyMjIEJlZ2luIEZpbGU6IEluc3Bl
Y3RvclRlc3RCYWNrZW5kQ29tbWFuZHMuanMKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24KKy8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2Rl
Z2VuL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorIyMjIEVuZCBGaWxl
OiBJbnNwZWN0b3JUZXN0QmFja2VuZENvbW1hbmRzLmpzCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNw
ZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywg
MjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24KKy8v
IGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9j
b2RlZ2VuL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaWZuZGVm
IEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnNfaAorI2RlZmluZSBJbnNwZWN0b3JUZXN0
QmFja2VuZERpc3BhdGNoZXJzX2gKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRl
ICJJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmgiCisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisK
K3R5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
KworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyNlbmRpZiAvLyAhZGVmaW5lZChJbnNw
ZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzX2gpCisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRl
c3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdEJh
Y2tlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
dHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24KKy8vIGJ5IHRoZSBz
Y3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaWYg
RU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwuaD4KKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW5j
bHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisK
K30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikK
KworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorCisj
IyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJp
bWl0aXZlLXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5CisKKyNpZm5kZWYgSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnNfaAor
I2RlZmluZSBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVyc19oCisKKyNpZiBFTkFCTEUo
SU5TUEVDVE9SKQorCisjaW5jbHVkZSAiSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5oIgorI2lu
Y2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4KKyNpbmNsdWRlIDxp
bnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7
CisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQ
RUNUT1IpCisKKyNlbmRpZiAvLyAhZGVmaW5lZChJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRj
aGVyc19oKQorIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5o
CisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlh
c2VkLXByaW1pdGl2ZS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW5zcGVj
dG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisK
KyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3Igewor
Cit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1Ip
CisKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisK
KyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmgKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2
ZS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQorCisjaWZuZGVmIEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnNfaAorI2RlZmluZSBJbnNw
ZWN0b3JUZXN0VHlwZUJ1aWxkZXJzX2gKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNs
dWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9ySlNUeXBlQnVpbGRlcnMuaD4KKyNpbmNsdWRlIDxpbnNw
ZWN0b3IvSW5zcGVjdG9yVHlwZUJ1aWxkZXIuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5o
PgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3Igewor
CisKKworbmFtZXNwYWNlIFR5cGVCdWlsZGVyIHsKKworCisKKy8vIFR5cGVkZWZzLgorbmFtZXNw
YWNlIFJ1bnRpbWUgeworLyogVW5pcXVlIG9iamVjdCBpZGVudGlmaWVyLiAqLwordHlwZWRlZiBp
bnQgUmVtb3RlT2JqZWN0SWQ7Cit9IC8vIFJ1bnRpbWUKKy8vIEVuZCBvZiB0eXBlZGVmcy4KKwor
U3RyaW5nIGdldFRlc3RFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSk7CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+IFN0cmluZyBnZXRUZXN0RW51bUNvbnN0YW50VmFsdWUoVCBlbnVtVmFsdWUpCit7
CisgICAgcmV0dXJuIGdldFRlc3RFbnVtQ29uc3RhbnRWYWx1ZShzdGF0aWNfY2FzdDxpbnQ+KGVu
dW1WYWx1ZSkpOworfQorCisKKworfSAvLyBuYW1lc3BhY2UgVHlwZUJ1aWxkZXIKKworfSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorCisjZW5k
aWYgLy8gIWRlZmluZWQoSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVyc19oKQorIyMjIEVuZCBGaWxl
OiBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IEluc3BlY3Rv
clRlc3RUeXBlQnVpbGRlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IHR5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uCisvLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuaCIKKworI2lmIEVOQUJM
RShJTlNQRUNUT1IpCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFj
ZSBJbnNwZWN0b3IgeworCituYW1lc3BhY2UgVHlwZUJ1aWxkZXIgeworCitzdGF0aWMgY29uc3Qg
Y2hhciogY29uc3QgZW51bV9jb25zdGFudF92YWx1ZXNbXSA9IHsKK307CisKK1N0cmluZyBnZXRU
ZXN0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpIHsKKyAgICByZXR1cm4gZW51bV9jb25zdGFu
dF92YWx1ZXNbY29kZV07Cit9CisKKworCit9IC8vIG5hbWVzcGFjZSBUeXBlQnVpbGRlcgorCit9
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisK
KyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5jcHAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90
eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1h
cnJheS10eXBlLmpzb24tcmVzdWx0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ2M2JmMmI5YTg0ZGRkOWMxYmY1N2Ex
NjA2NTBjMzRiOGM1NmQ5YWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1hcnJh
eS10eXBlLmpzb24tcmVzdWx0CkBAIC0wLDAgKzEsMzg4IEBACisjIyMgQmVnaW4gRmlsZTogSW5z
cGVjdG9yVGVzdEJhY2tlbmRDb21tYW5kcy5qcworLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlw
dDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJh
dGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKy8vIERlYnVnZ2VyLgorSW5zcGVj
dG9yQmFja2VuZC5yZWdpc3RlckVudW0oIkRlYnVnZ2VyLlJlYXNvbiIsIHtEaWVkOiAiRGllZCIs
IEZhaW50ZWQ6ICJGYWludGVkIiwgSHVuZ3J5OiAiSHVuZ3J5In0pOworIyMjIEVuZCBGaWxlOiBJ
bnNwZWN0b3JUZXN0QmFja2VuZENvbW1hbmRzLmpzCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0
b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRl
LWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaWZuZGVmIEluc3BlY3RvclRlc3RC
YWNrZW5kRGlzcGF0Y2hlcnNfaAorI2RlZmluZSBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNo
ZXJzX2gKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRlICJJbnNwZWN0b3JUZXN0
VHlwZUJ1aWxkZXJzLmgiCisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3R5cGVkZWYgU3RyaW5n
IEVycm9yU3RyaW5nOworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVO
QUJMRShJTlNQRUNUT1IpCisKKyNlbmRpZiAvLyAhZGVmaW5lZChJbnNwZWN0b3JUZXN0QmFja2Vu
ZERpc3BhdGNoZXJzX2gpCisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0
Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVy
cy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlv
bi1hcnJheS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yVGVz
dEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1
ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4KKyNpbmNsdWRlIDxpbnNw
ZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgor
CituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgor
CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JU
ZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVz
dEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSB0eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpZm5kZWYgSW5zcGVjdG9yVGVzdEZyb250
ZW5kRGlzcGF0Y2hlcnNfaAorI2RlZmluZSBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVy
c19oCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSAiSW5zcGVjdG9yVGVzdFR5
cGVCdWlsZGVycy5oIgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwuaD4KKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW5jbHVkZSA8
d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFt
ZXNwYWNlIEluc3BlY3RvciB7CisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2Vu
ZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyNlbmRpZiAvLyAhZGVmaW5lZChJbnNwZWN0b3JU
ZXN0RnJvbnRlbmREaXNwYXRjaGVyc19oKQorIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0RnJv
bnRlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0RnJvbnRl
bmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlw
ZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
SW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKKworI2lmIEVOQUJMRShJTlNQRUNU
T1IpCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0
b3IgeworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQ
RUNUT1IpCisKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMu
Y3BwCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmgKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBl
Lmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQor
CisjaWZuZGVmIEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnNfaAorI2RlZmluZSBJbnNwZWN0b3JU
ZXN0VHlwZUJ1aWxkZXJzX2gKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRlIDxp
bnNwZWN0b3IvSW5zcGVjdG9ySlNUeXBlQnVpbGRlcnMuaD4KKyNpbmNsdWRlIDxpbnNwZWN0b3Iv
SW5zcGVjdG9yVHlwZUJ1aWxkZXIuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2lu
Y2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKwor
bmFtZXNwYWNlIFR5cGVCdWlsZGVyIHsKKworLy8gRm9yd2FyZCBkZWNsYXJhdGlvbnMuCituYW1l
c3BhY2UgRGVidWdnZXIgeworZW51bSBjbGFzcyBSZWFzb247Cit9IC8vIERlYnVnZ2VyCisvLyBF
bmQgb2YgZm9yd2FyZCBkZWNsYXJhdGlvbnMuCisKKworLy8gVHlwZWRlZnMuCituYW1lc3BhY2Ug
RGVidWdnZXIgewordHlwZWRlZiBpbnQgQnJlYWtwb2ludElkOworfSAvLyBEZWJ1Z2dlcgorCitu
YW1lc3BhY2UgUnVudGltZSB7Cit0eXBlZGVmIGludCBPYmplY3RJZDsKK30gLy8gUnVudGltZQor
Ly8gRW5kIG9mIHR5cGVkZWZzLgorCitTdHJpbmcgZ2V0VGVzdEVudW1Db25zdGFudFZhbHVlKGlu
dCBjb2RlKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gU3RyaW5nIGdldFRlc3RFbnVtQ29uc3Rh
bnRWYWx1ZShUIGVudW1WYWx1ZSkKK3sKKyAgICByZXR1cm4gZ2V0VGVzdEVudW1Db25zdGFudFZh
bHVlKHN0YXRpY19jYXN0PGludD4oZW51bVZhbHVlKSk7Cit9CisKK25hbWVzcGFjZSBEZWJ1Z2dl
ciB7CisvKiAgKi8KK2VudW0gY2xhc3MgUmVhc29uIHsKKyAgICBEaWVkID0gMCwKKyAgICBGYWlu
dGVkID0gMSwKKyAgICBIdW5ncnkgPSAyLAorfTsgLy8gZW51bSBjbGFzcyBSZWFzb24KK30gLy8g
RGVidWdnZXIKKworCisKK30gLy8gbmFtZXNwYWNlIFR5cGVCdWlsZGVyCisKK30gLy8gbmFtZXNw
YWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKworI2VuZGlmIC8v
ICFkZWZpbmVkKEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnNfaCkKKyMjIyBFbmQgRmlsZTogSW5z
cGVjdG9yVGVzdFR5cGVCdWlsZGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0
VHlwZUJ1aWxkZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBl
LWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJ
bnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmgiCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisj
aW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwor
bmFtZXNwYWNlIFR5cGVCdWlsZGVyIHsKKworc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGVudW1f
Y29uc3RhbnRfdmFsdWVzW10gPSB7CisgICAgIkRpZWQiLAorICAgICJGYWludGVkIiwKKyAgICAi
SHVuZ3J5IiwKK307CisKK1N0cmluZyBnZXRUZXN0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUp
IHsKKyAgICByZXR1cm4gZW51bV9jb25zdGFudF92YWx1ZXNbY29kZV07Cit9CisKKworCit9IC8v
IG5hbWVzcGFjZSBUeXBlQnVpbGRlcgorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2Vu
ZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdFR5
cGVCdWlsZGVycy5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29u
LXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9l
eHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uLXJlc3VsdApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5lNWQyZmIwZmU1MTk2NDU2YjdlNTZmMjI2ZTBjYWMyNjliYjhmN2VjCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVj
dGVkL3R5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24tcmVzdWx0CkBAIC0wLDAgKzEsMzk0
IEBACisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdEJhY2tlbmRDb21tYW5kcy5qcworLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlw
ZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
KworLy8gUnVudGltZS4KK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFbnVtKCJSdW50aW1lLkZh
cm1BbmltYWxzIiwge1BpZ3M6ICJQaWdzIiwgQ293czogIkNvd3MiLCBDYXRzOiAiQ2F0cyIsIEhl
bnM6ICJIZW5zIn0pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckVudW0oIlJ1bnRpbWUuVHdv
TGVnZ2VkQW5pbWFscyIsIHtEdWNrczogIkR1Y2tzIiwgSGVuczogIkhlbnMiLCBDcm93czogIkNy
b3dzIiwgRmxhbWluZ29zOiAiRmxhbWluZ29zIn0pOworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JU
ZXN0QmFja2VuZENvbW1hbmRzLmpzCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0QmFj
a2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlw
ZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpZm5kZWYgSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNw
YXRjaGVyc19oCisjZGVmaW5lIEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnNfaAorCisj
aWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUgIkluc3BlY3RvclRlc3RUeXBlQnVpbGRl
cnMuaCIKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4K
KyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJp
bmc7CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BF
Q1RPUikKKworI2VuZGlmIC8vICFkZWZpbmVkKEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hl
cnNfaCkKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisK
KyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlw
ZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkluc3BlY3RvclRlc3RCYWNrZW5kRGlz
cGF0Y2hlcnMuaCIKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRlIDxpbnNwZWN0
b3IvSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLmg+CisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3Bl
Y3RvclZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNl
IEluc3BlY3RvciB7CisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8v
IEVOQUJMRShJTlNQRUNUT1IpCisKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdEJhY2tlbmRE
aXNwYXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RGcm9udGVuZERp
c3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNs
YXJhdGlvbi1lbnVtLXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisKKyNpZm5kZWYgSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hl
cnNfaAorI2RlZmluZSBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVyc19oCisKKyNpZiBF
TkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSAiSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5o
IgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4KKyNpbmNs
dWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQ
dHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3Bl
Y3RvciB7CisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJM
RShJTlNQRUNUT1IpCisKKyNlbmRpZiAvLyAhZGVmaW5lZChJbnNwZWN0b3JUZXN0RnJvbnRlbmRE
aXNwYXRjaGVyc19oKQorIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRj
aGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVy
cy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlv
bi1lbnVtLXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJp
bmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JUZXN0
RnJvbnRlbmREaXNwYXRjaGVycy5oIgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK30gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKworIyMj
IEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJl
Z2luIEZpbGU6IEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuaAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uCisvLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdl
bi9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2lmbmRlZiBJbnNw
ZWN0b3JUZXN0VHlwZUJ1aWxkZXJzX2gKKyNkZWZpbmUgSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVy
c19oCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3Bl
Y3RvckpTVHlwZUJ1aWxkZXJzLmg+CisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclR5cGVC
dWlsZGVyLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvUGFz
c1JlZlB0ci5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKK25hbWVzcGFjZSBUeXBl
QnVpbGRlciB7CisKKy8vIEZvcndhcmQgZGVjbGFyYXRpb25zLgorbmFtZXNwYWNlIFJ1bnRpbWUg
eworZW51bSBjbGFzcyBGYXJtQW5pbWFsczsKK2VudW0gY2xhc3MgVHdvTGVnZ2VkQW5pbWFsczsK
K30gLy8gUnVudGltZQorLy8gRW5kIG9mIGZvcndhcmQgZGVjbGFyYXRpb25zLgorCisKKworCitT
dHJpbmcgZ2V0VGVzdEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKTsKKwordGVtcGxhdGU8dHlw
ZW5hbWUgVD4gU3RyaW5nIGdldFRlc3RFbnVtQ29uc3RhbnRWYWx1ZShUIGVudW1WYWx1ZSkKK3sK
KyAgICByZXR1cm4gZ2V0VGVzdEVudW1Db25zdGFudFZhbHVlKHN0YXRpY19jYXN0PGludD4oZW51
bVZhbHVlKSk7Cit9CisKK25hbWVzcGFjZSBSdW50aW1lIHsKKy8qICAqLworZW51bSBjbGFzcyBG
YXJtQW5pbWFscyB7CisgICAgUGlncyA9IDAsCisgICAgQ293cyA9IDEsCisgICAgQ2F0cyA9IDIs
CisgICAgSGVucyA9IDMsCit9OyAvLyBlbnVtIGNsYXNzIEZhcm1BbmltYWxzCisvKiAgKi8KK2Vu
dW0gY2xhc3MgVHdvTGVnZ2VkQW5pbWFscyB7CisgICAgRHVja3MgPSA0LAorICAgIEhlbnMgPSAz
LAorICAgIENyb3dzID0gNSwKKyAgICBGbGFtaW5nb3MgPSA2LAorfTsgLy8gZW51bSBjbGFzcyBU
d29MZWdnZWRBbmltYWxzCit9IC8vIFJ1bnRpbWUKKworCisKK30gLy8gbmFtZXNwYWNlIFR5cGVC
dWlsZGVyCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElO
U1BFQ1RPUikKKworI2VuZGlmIC8vICFkZWZpbmVkKEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnNf
aCkKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5oCisKKyMjIyBCZWdp
biBGaWxlOiBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uCisvLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdl
bi9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuaCIKKworI2lmIEVO
QUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVz
cGFjZSBJbnNwZWN0b3IgeworCituYW1lc3BhY2UgVHlwZUJ1aWxkZXIgeworCitzdGF0aWMgY29u
c3QgY2hhciogY29uc3QgZW51bV9jb25zdGFudF92YWx1ZXNbXSA9IHsKKyAgICAiUGlncyIsCisg
ICAgIkNvd3MiLAorICAgICJDYXRzIiwKKyAgICAiSGVucyIsCisgICAgIkR1Y2tzIiwKKyAgICAi
Q3Jvd3MiLAorICAgICJGbGFtaW5nb3MiLAorfTsKKworU3RyaW5nIGdldFRlc3RFbnVtQ29uc3Rh
bnRWYWx1ZShpbnQgY29kZSkgeworICAgIHJldHVybiBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb2Rl
XTsKK30KKworCisKK30gLy8gbmFtZXNwYWNlIFR5cGVCdWlsZGVyCisKK30gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKworIyMjIEVuZCBGaWxl
OiBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRp
b24tb2JqZWN0LXR5cGUuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5q
c29uLXJlc3VsdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yZThjY2ZlODMxNDljNDIwYjRmZjczYjYwOTc1ZGRjZTFi
YzhjOWRhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNv
bi1yZXN1bHQKQEAgLTAsMCArMSw5MDAgQEAKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0
QmFja2VuZENvbW1hbmRzLmpzCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5
cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKy8vIFRlc3QuCitJbnNwZWN0b3JCYWNrZW5kLnJl
Z2lzdGVyQ29tbWFuZCgiVGVzdC5hdHRlbXB0Q3Vyc2UiLCBbeyJuYW1lIjogImN1cnNlIiwgInR5
cGUiOiAib2JqZWN0IiwgIm9wdGlvbmFsIjogZmFsc2V9XSwgWyJjZW5zb3JlZEN1cnNlIl0pOwor
IyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0QmFja2VuZENvbW1hbmRzLmpzCisKKyMjIyBCZWdp
biBGaWxlOiBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCisv
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Y29kZWdlbi9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2lmbmRl
ZiBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzX2gKKyNkZWZpbmUgSW5zcGVjdG9yVGVz
dEJhY2tlbmREaXNwYXRjaGVyc19oCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVk
ZSAiSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5oIgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3Igewor
Cit0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKworY2xhc3MgSW5zcGVjdG9yVGVzdEJhY2tl
bmREaXNwYXRjaGVySGFuZGxlciB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIGF0dGVtcHRD
dXJzZShFcnJvclN0cmluZyosIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVj
dD4mIGluX2N1cnNlLCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8U3RyaW5nPiog
b3B0X291dF9jZW5zb3JlZEN1cnNlKSA9IDA7Citwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB+SW5z
cGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpOworfTsKKworY2xhc3MgSW5zcGVj
dG9yVGVzdEJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVj
dG9yU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEluc3BlY3Rv
cjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqLCBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3Bh
dGNoZXJIYW5kbGVyKik7CisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoKGxvbmcgY2FsbElkLCBj
b25zdCBTdHJpbmcmIG1ldGhvZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVj
dD4gbWVzc2FnZSkgb3ZlcnJpZGU7Citwcml2YXRlOgorICAgIHZvaWQgYXR0ZW1wdEN1cnNlKGxv
bmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7Citw
cml2YXRlOgorICAgIEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcihJbnNwZWN0b3I6Oklu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiwgSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVy
SGFuZGxlciopOworICAgIEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIG1f
YWdlbnQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJM
RShJTlNQRUNUT1IpCisKKyNlbmRpZiAvLyAhZGVmaW5lZChJbnNwZWN0b3JUZXN0QmFja2VuZERp
c3BhdGNoZXJzX2gpCisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hl
cnMuaAorCisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVycy5j
cHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJ
TEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1v
YmplY3QtdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkluc3BlY3RvclRlc3RC
YWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRl
IDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLmg+CisjaW5jbHVkZSA8aW5zcGVj
dG9yL0luc3BlY3RvclZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKwor
bmFtZXNwYWNlIEluc3BlY3RvciB7CisKK0luc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXI6On5JbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCkgeyB9CisKK1Bh
c3NSZWZQdHI8SW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVyPiBJbnNwZWN0b3JUZXN0QmFj
a2VuZERpc3BhdGNoZXI6OmNyZWF0ZShJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciogYmFja2Vu
ZERpc3BhdGNoZXIsIEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50
KQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRj
aGVyKGJhY2tlbmREaXNwYXRjaGVyLCBhZ2VudCkpOworfQorCitJbnNwZWN0b3JUZXN0QmFja2Vu
ZERpc3BhdGNoZXI6Okluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcihJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIsIEluc3BlY3RvclRlc3RCYWNrZW5kRGlz
cGF0Y2hlckhhbmRsZXIqIGFnZW50KQorICAgIDogSW5zcGVjdG9yU3VwcGxlbWVudGFsQmFja2Vu
ZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIpCisgICAgLCBtX2FnZW50KGFnZW50KQorewor
ICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbihBU0NJ
SUxpdGVyYWwoIlRlc3QiKSwgdGhpcyk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yVGVzdEJhY2tlbmRE
aXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFBh
c3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtZXNzYWdlKQoreworICAgIFJlZjxJbnNwZWN0b3JU
ZXN0QmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOworCisgICAgaWYgKG1ldGhvZCA9
PSAiYXR0ZW1wdEN1cnNlIikKKyAgICAgICAgYXR0ZW1wdEN1cnNlKGNhbGxJZCwgKm1lc3NhZ2Uu
Z2V0KCkpOworICAgIGVsc2UKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJv
dG9jb2xFcnJvcigmY2FsbElkLCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90
Rm91bmQsIFN0cmluZygiJyIpICsgIlRlc3QiICsgJy4nICsgbWV0aG9kICsgIicgd2FzIG5vdCBm
b3VuZCIpOworfQorCit2b2lkIEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcjo6YXR0ZW1w
dEN1cnNlKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpCit7Cisg
ICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5
OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIg
PSBtZXNzYWdlLmdldE9iamVjdChBU0NJSUxpdGVyYWwoInBhcmFtcyIpKTsKKyAgICBJbnNwZWN0
b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKKyAg
ICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQo
KTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IGluX2N1cnNlID0gSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldE9iamVjdChwYXJhbXNDb250YWluZXJQdHIsIEFT
Q0lJTGl0ZXJhbCgiY3Vyc2UiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnNQdHIpOworICAgIGlm
IChwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKKyAgICAgICAgU3RyaW5nIGVycm9yTWVzc2Fn
ZSA9IFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBi
ZSBwcm9jZXNzZWQiLCAiVGVzdC5hdHRlbXB0Q3Vyc2UiKTsKKyAgICAgICAgbV9iYWNrZW5kRGlz
cGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElkLCBJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlcjo6SW52YWxpZFBhcmFtcywgZXJyb3JNZXNzYWdlLCBwcm90b2NvbEVycm9ycy5yZWxl
YXNlKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgRXJyb3JTdHJpbmcgZXJyb3I7
CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0Ojpj
cmVhdGUoKTsKKyAgICBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8U3RyaW5nPiBv
dXRfY2Vuc29yZWRDdXJzZTsKKyAgICBtX2FnZW50LT5hdHRlbXB0Q3Vyc2UoJmVycm9yLCBpbl9j
dXJzZSwgJm91dF9jZW5zb3JlZEN1cnNlKTsKKworICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCisg
ICAgICAgIGlmIChvdXRfY2Vuc29yZWRDdXJzZS5pc0Fzc2lnbmVkKCkpCisgICAgICAgICAgICBy
ZXN1bHQtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoImNlbnNvcmVkQ3Vyc2UiKSwgb3V0X2NlbnNv
cmVkQ3Vyc2UuZ2V0VmFsdWUoKSk7CisKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVz
cG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgpLCBlcnJvcik7Cit9CisKK30gLy8gbmFtZXNw
YWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKworIyMjIEVuZCBG
aWxlOiBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmls
ZTogSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24KKy8vIGJ5
IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2Rl
Z2VuL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaWZuZGVmIElu
c3BlY3RvclRlc3RGcm9udGVuZERpc3BhdGNoZXJzX2gKKyNkZWZpbmUgSW5zcGVjdG9yVGVzdEZy
b250ZW5kRGlzcGF0Y2hlcnNfaAorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUg
Ikluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuaCIKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsLmg+CisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVl
cy5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorCisjZW5kaWYgLy8gIWRl
ZmluZWQoSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnNfaCkKKyMjIyBFbmQgRmlsZTog
SW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogSW5z
cGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbgorLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4v
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgorCisj
aWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKwor
bmFtZXNwYWNlIEluc3BlY3RvciB7CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5k
aWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0RnJv
bnRlbmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RUeXBl
QnVpbGRlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xh
cmF0aW9uLW9iamVjdC10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90
b2NvbC1iaW5kaW5ncy5weQorCisjaWZuZGVmIEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnNfaAor
I2RlZmluZSBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzX2gKKworI2lmIEVOQUJMRShJTlNQRUNU
T1IpCisKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9ySlNUeXBlQnVpbGRlcnMuaD4KKyNp
bmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVHlwZUJ1aWxkZXIuaD4KKyNpbmNsdWRlIDx3dGYv
QXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisKK25hbWVzcGFjZSBJ
bnNwZWN0b3IgeworCisKKworbmFtZXNwYWNlIFR5cGVCdWlsZGVyIHsKKworLy8gRm9yd2FyZCBk
ZWNsYXJhdGlvbnMuCisjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKK25hbWVzcGFjZSBEYXRhYmFz
ZSB7CitjbGFzcyBEdW1teU9iamVjdDsKK2NsYXNzIEVycm9yOworY2xhc3MgT2JqZWN0V2l0aFBy
b3BlcnR5TmFtZUNvbmZsaWN0czsKK2NsYXNzIE9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlOworY2xh
c3MgUGFyYW1ldGVyQnVuZGxlOworfSAvLyBEYXRhYmFzZQorI2VuZGlmIC8vIEVOQUJMRShTUUxf
REFUQUJBU0UpCisKK25hbWVzcGFjZSBUZXN0IHsKK2NsYXNzIEhhcHB5TmFtZTsKK2NsYXNzIFBh
cmFtZXRlckJ1bmRsZTsKK30gLy8gVGVzdAorLy8gRW5kIG9mIGZvcndhcmQgZGVjbGFyYXRpb25z
LgorCisKKworCitTdHJpbmcgZ2V0VGVzdEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKTsKKwor
dGVtcGxhdGU8dHlwZW5hbWUgVD4gU3RyaW5nIGdldFRlc3RFbnVtQ29uc3RhbnRWYWx1ZShUIGVu
dW1WYWx1ZSkKK3sKKyAgICByZXR1cm4gZ2V0VGVzdEVudW1Db25zdGFudFZhbHVlKHN0YXRpY19j
YXN0PGludD4oZW51bVZhbHVlKSk7Cit9CisKKyNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQorbmFt
ZXNwYWNlIERhdGFiYXNlIHsKKy8qIERhdGFiYXNlIGVycm9yLiAqLworY2xhc3MgRXJyb3IgOiBw
dWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3RCYXNlIHsKK3B1YmxpYzoKKyAgICBlbnVt
IHsKKyAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAorICAgICAgICBNZXNzYWdlU2V0ID0gMSA8PCAw
LAorICAgICAgICBDb2RlU2V0ID0gMSA8PCAxLAorICAgICAgICBBbGxGaWVsZHNTZXQgPSAoTWVz
c2FnZVNldCB8IENvZGVTZXQpCisgICAgfTsKKworICAgIHRlbXBsYXRlPGludCBTVEFURT4KKyAg
ICBjbGFzcyBCdWlsZGVyIHsKKyAgICBwcml2YXRlOgorICAgICAgICBSZWZQdHI8SW5zcGVjdG9y
OjpJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OworCisgICAgICAgIHRlbXBsYXRlPGludCBTVEVQ
PiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlz
KTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjwvKkVycm9yKi9JbnNw
ZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gcHRyKQorICAgICAgICB7CisgICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9p
bml0X3N0YXRlKTsKKyAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOworICAgICAgICB9CisgICAg
ICAgIGZyaWVuZCBjbGFzcyBFcnJvcjsKKyAgICBwdWJsaWM6CisKKyAgICAgICAgQnVpbGRlcjxT
VEFURSB8IE1lc3NhZ2VTZXQ+JiBzZXRNZXNzYWdlKGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBNZXNzYWdlU2V0KSwg
cHJvcGVydHlfbWVzc2FnZV9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0
U3RyaW5nKEFTQ0lJTGl0ZXJhbCgibWVzc2FnZSIpLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1
cm4gY2FzdFN0YXRlPE1lc3NhZ2VTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVy
PFNUQVRFIHwgQ29kZVNldD4mIHNldENvZGUoaW50IHZhbHVlKQorICAgICAgICB7CisgICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQ29kZVNldCksIHByb3BlcnR5X2NvZGVfYWxy
ZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcihBU0NJSUxpdGVyYWwo
ImNvZGUiKSwgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxDb2RlU2V0Pigp
OworICAgICAgICB9CisKKyAgICAgICAgb3BlcmF0b3IgUmVmUHRyPEVycm9yPiYgKCkKKyAgICAg
ICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCBy
ZXN1bHRfaXNfbm90X3JlYWR5KTsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihF
cnJvcikgPT0gc2l6ZW9mKEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0KSwgY2Fubm90X2Nhc3Qp
OworICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxFcnJvcj4qPigm
bV9yZXN1bHQpOworICAgICAgICB9CisKKyAgICAgICAgUGFzc1JlZlB0cjxFcnJvcj4gcmVsZWFz
ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBSZWZQdHI8RXJyb3I+KCp0aGlzKS5y
ZWxlYXNlKCk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgLyoKKyAgICAgKiBTeW50aGV0aWMg
Y29uc3RydWN0b3I6CisgICAgICogUmVmUHRyPEVycm9yPiByZXN1bHQgPSBFcnJvcjo6Y3JlYXRl
KCkKKyAgICAgKiAgICAgLnNldE1lc3NhZ2UoLi4uKQorICAgICAqICAgICAuc2V0Q29kZSguLi4p
OworICAgICAqLworICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEluc3BlY3Rvcjo6SW5zcGVj
dG9yT2JqZWN0OjpjcmVhdGUoKSk7CisgICAgfQorICAgIHR5cGVkZWYgSW5zcGVjdG9yOjpUeXBl
QnVpbGRlcjo6U3RydWN0SXRlbVRyYWl0cyBJdGVtVHJhaXRzOworfTsKKworY2xhc3MgT3B0aW9u
YWxQYXJhbWV0ZXJCdW5kbGUgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3RCYXNl
IHsKK3B1YmxpYzoKKyAgICBlbnVtIHsKKyAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAorICAgICAg
ICBBbGxGaWVsZHNTZXQgPSAwCisgICAgfTsKKworICAgIHRlbXBsYXRlPGludCBTVEFURT4KKyAg
ICBjbGFzcyBCdWlsZGVyIHsKKyAgICBwcml2YXRlOgorICAgICAgICBSZWZQdHI8SW5zcGVjdG9y
OjpJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OworCisgICAgICAgIHRlbXBsYXRlPGludCBTVEVQ
PiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlz
KTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjwvKk9wdGlvbmFsUGFy
YW1ldGVyQnVuZGxlKi9JbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gcHRyKQorICAgICAgICB7
CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRl
cl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKKyAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRy
OworICAgICAgICB9CisgICAgICAgIGZyaWVuZCBjbGFzcyBPcHRpb25hbFBhcmFtZXRlckJ1bmRs
ZTsKKyAgICBwdWJsaWM6CisKKyAgICAgICAgb3BlcmF0b3IgUmVmUHRyPE9wdGlvbmFsUGFyYW1l
dGVyQnVuZGxlPiYgKCkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RB
VEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKKyAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKHNpemVvZihPcHRpb25hbFBhcmFtZXRlckJ1bmRsZSkgPT0gc2l6ZW9mKElu
c3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0KSwgY2Fubm90X2Nhc3QpOworICAgICAgICAgICAgcmV0
dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxPcHRpb25hbFBhcmFtZXRlckJ1bmRsZT4qPigm
bV9yZXN1bHQpOworICAgICAgICB9CisKKyAgICAgICAgUGFzc1JlZlB0cjxPcHRpb25hbFBhcmFt
ZXRlckJ1bmRsZT4gcmVsZWFzZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBSZWZQ
dHI8T3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU+KCp0aGlzKS5yZWxlYXNlKCk7CisgICAgICAgIH0K
KyAgICB9OworCisgICAgLyoKKyAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CisgICAgICog
UmVmUHRyPE9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlPiByZXN1bHQgPSBPcHRpb25hbFBhcmFtZXRl
ckJ1bmRsZTo6Y3JlYXRlKCk7CisgICAgICovCisgICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNT
ZXQ+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4o
SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpKTsKKyAgICB9CisgICAgdHlwZWRl
ZiBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpTdHJ1Y3RJdGVtVHJhaXRzIEl0ZW1UcmFpdHM7CisK
KyAgICB2b2lkIHNldENvbHVtbk5hbWVzKFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRl
cjo6QXJyYXk8U3RyaW5nPj4gdmFsdWUpCisgICAgeworICAgICAgICBJbnNwZWN0b3JPYmplY3RC
YXNlOjpzZXRBcnJheShBU0NJSUxpdGVyYWwoImNvbHVtbk5hbWVzIiksIHZhbHVlKTsKKyAgICB9
CisKKyAgICB2b2lkIHNldE5vdGVzKGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgeworICAgICAg
ICBJbnNwZWN0b3JPYmplY3RCYXNlOjpzZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJub3RlcyIpLCB2
YWx1ZSk7CisgICAgfQorCisgICAgdm9pZCBzZXRUaW1lc3RhbXAoZG91YmxlIHZhbHVlKQorICAg
IHsKKyAgICAgICAgSW5zcGVjdG9yT2JqZWN0QmFzZTo6c2V0TnVtYmVyKEFTQ0lJTGl0ZXJhbCgi
dGltZXN0YW1wIiksIHZhbHVlKTsKKyAgICB9CisKKyAgICB2b2lkIHNldFZhbHVlcyhQYXNzUmVm
UHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKKyAgICB7CisgICAgICAgIElu
c3BlY3Rvck9iamVjdEJhc2U6OnNldE9iamVjdChBU0NJSUxpdGVyYWwoInZhbHVlcyIpLCB2YWx1
ZSk7CisgICAgfQorCisgICAgdm9pZCBzZXRQYXlsb2FkKFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJ
bnNwZWN0b3JWYWx1ZT4gdmFsdWUpCisgICAgeworICAgICAgICBJbnNwZWN0b3JPYmplY3RCYXNl
OjpzZXRWYWx1ZShBU0NJSUxpdGVyYWwoInBheWxvYWQiKSwgdmFsdWUpOworICAgIH0KKworICAg
IHZvaWQgc2V0RXJyb3IoUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpEYXRhYmFz
ZTo6RXJyb3I+IHZhbHVlKQorICAgIHsKKyAgICAgICAgSW5zcGVjdG9yT2JqZWN0QmFzZTo6c2V0
T2JqZWN0KEFTQ0lJTGl0ZXJhbCgiZXJyb3IiKSwgdmFsdWUpOworICAgIH0KK307CisKK2NsYXNz
IFBhcmFtZXRlckJ1bmRsZSA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdEJhc2Ug
eworcHVibGljOgorICAgIGVudW0geworICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCisgICAgICAg
IENvbHVtbk5hbWVzU2V0ID0gMSA8PCAwLAorICAgICAgICBOb3Rlc1NldCA9IDEgPDwgMSwKKyAg
ICAgICAgVGltZXN0YW1wU2V0ID0gMSA8PCAyLAorICAgICAgICBWYWx1ZXNTZXQgPSAxIDw8IDMs
CisgICAgICAgIFBheWxvYWRTZXQgPSAxIDw8IDQsCisgICAgICAgIEVycm9yU2V0ID0gMSA8PCA1
LAorICAgICAgICBBbGxGaWVsZHNTZXQgPSAoQ29sdW1uTmFtZXNTZXQgfCBOb3Rlc1NldCB8IFRp
bWVzdGFtcFNldCB8IFZhbHVlc1NldCB8IFBheWxvYWRTZXQgfCBFcnJvclNldCkKKyAgICB9Owor
CisgICAgdGVtcGxhdGU8aW50IFNUQVRFPgorICAgIGNsYXNzIEJ1aWxkZXIgeworICAgIHByaXZh
dGU6CisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7
CisKKyAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2Fz
dFN0YXRlKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0
PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOworICAgICAgICB9CisKKyAgICAgICAgQnVp
bGRlcihQYXNzUmVmUHRyPC8qUGFyYW1ldGVyQnVuZGxlKi9JbnNwZWN0b3I6Okluc3BlY3Rvck9i
amVjdD4gcHRyKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9
PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKKyAgICAg
ICAgICAgIG1fcmVzdWx0ID0gcHRyOworICAgICAgICB9CisgICAgICAgIGZyaWVuZCBjbGFzcyBQ
YXJhbWV0ZXJCdW5kbGU7CisgICAgcHVibGljOgorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBD
b2x1bW5OYW1lc1NldD4mIHNldENvbHVtbk5hbWVzKFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpUeXBl
QnVpbGRlcjo6QXJyYXk8U3RyaW5nPj4gdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBDb2x1bW5OYW1lc1NldCksIHByb3BlcnR5X2NvbHVtbk5h
bWVzX2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRBcnJheShBU0NJSUxp
dGVyYWwoImNvbHVtbk5hbWVzIiksIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3Rh
dGU8Q29sdW1uTmFtZXNTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyPFNUQVRF
IHwgTm90ZXNTZXQ+JiBzZXROb3Rlcyhjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgICAgICB7Cisg
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTm90ZXNTZXQpLCBwcm9wZXJ0eV9u
b3Rlc19hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKEFTQ0lJ
TGl0ZXJhbCgibm90ZXMiKSwgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxO
b3Rlc1NldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBUaW1lc3Rh
bXBTZXQ+JiBzZXRUaW1lc3RhbXAoZG91YmxlIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVGltZXN0YW1wU2V0KSwgcHJvcGVydHlfdGltZXN0
YW1wX2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoQVNDSUlM
aXRlcmFsKCJ0aW1lc3RhbXAiKSwgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0
ZTxUaW1lc3RhbXBTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwg
VmFsdWVzU2V0PiYgc2V0VmFsdWVzKFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmpl
Y3Q+IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRF
ICYgVmFsdWVzU2V0KSwgcHJvcGVydHlfdmFsdWVzX2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAg
IG1fcmVzdWx0LT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJ2YWx1ZXMiKSwgdmFsdWUpOworICAg
ICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxWYWx1ZXNTZXQ+KCk7CisgICAgICAgIH0KKworICAg
ICAgICBCdWlsZGVyPFNUQVRFIHwgUGF5bG9hZFNldD4mIHNldFBheWxvYWQoUGFzc1JlZlB0cjxJ
bnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoIShTVEFURSAmIFBheWxvYWRTZXQpLCBwcm9wZXJ0eV9wYXlsb2FkX2Fs
cmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRWYWx1ZShBU0NJSUxpdGVyYWwo
InBheWxvYWQiKSwgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxQYXlsb2Fk
U2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IEVycm9yU2V0PiYg
c2V0RXJyb3IoUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpEYXRhYmFzZTo6RXJy
b3I+IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRF
ICYgRXJyb3JTZXQpLCBwcm9wZXJ0eV9lcnJvcl9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBt
X3Jlc3VsdC0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgiZXJyb3IiKSwgdmFsdWUpOworICAgICAg
ICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxFcnJvclNldD4oKTsKKyAgICAgICAgfQorCisgICAgICAg
IG9wZXJhdG9yIFJlZlB0cjxQYXJhbWV0ZXJCdW5kbGU+JiAoKQorICAgICAgICB7CisgICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3Rf
cmVhZHkpOworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKFBhcmFtZXRlckJ1bmRs
ZSkgPT0gc2l6ZW9mKEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0KSwgY2Fubm90X2Nhc3QpOwor
ICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxQYXJhbWV0ZXJCdW5k
bGU+Kj4oJm1fcmVzdWx0KTsKKyAgICAgICAgfQorCisgICAgICAgIFBhc3NSZWZQdHI8UGFyYW1l
dGVyQnVuZGxlPiByZWxlYXNlKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIFJlZlB0
cjxQYXJhbWV0ZXJCdW5kbGU+KCp0aGlzKS5yZWxlYXNlKCk7CisgICAgICAgIH0KKyAgICB9Owor
CisgICAgLyoKKyAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CisgICAgICogUmVmUHRyPFBh
cmFtZXRlckJ1bmRsZT4gcmVzdWx0ID0gUGFyYW1ldGVyQnVuZGxlOjpjcmVhdGUoKQorICAgICAq
ICAgICAuc2V0Q29sdW1uTmFtZXMoLi4uKQorICAgICAqICAgICAuc2V0Tm90ZXMoLi4uKQorICAg
ICAqICAgICAuc2V0VGltZXN0YW1wKC4uLikKKyAgICAgKiAgICAgLnNldFZhbHVlcyguLi4pCisg
ICAgICogICAgIC5zZXRQYXlsb2FkKC4uLikKKyAgICAgKiAgICAgLnNldEVycm9yKC4uLik7Cisg
ICAgICovCisgICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCisgICAgewor
ICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSW5zcGVjdG9yOjpJbnNwZWN0b3JP
YmplY3Q6OmNyZWF0ZSgpKTsKKyAgICB9CisgICAgdHlwZWRlZiBJbnNwZWN0b3I6OlR5cGVCdWls
ZGVyOjpTdHJ1Y3RJdGVtVHJhaXRzIEl0ZW1UcmFpdHM7Cit9OworCisvKiBDb25mbGljdGVkIG5h
bWVzIG1heSBjYXVzZSBnZW5lcmF0ZWQgZ2V0dGVycy9zZXR0ZXJzIHRvIGNsYXNoIHdpdGggYnVp
bHQtaW4gSW5zcGVjdG9yT2JqZWN0IG1ldGhvZHMuICovCitjbGFzcyBPYmplY3RXaXRoUHJvcGVy
dHlOYW1lQ29uZmxpY3RzIDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0QmFzZSB7
CitwdWJsaWM6CisgICAgZW51bSB7CisgICAgICAgIE5vRmllbGRzU2V0ID0gMCwKKyAgICAgICAg
SW50ZWdlclNldCA9IDEgPDwgMCwKKyAgICAgICAgQXJyYXlTZXQgPSAxIDw8IDEsCisgICAgICAg
IFN0cmluZ1NldCA9IDEgPDwgMiwKKyAgICAgICAgVmFsdWVTZXQgPSAxIDw8IDMsCisgICAgICAg
IE9iamVjdFNldCA9IDEgPDwgNCwKKyAgICAgICAgQWxsRmllbGRzU2V0ID0gKEludGVnZXJTZXQg
fCBBcnJheVNldCB8IFN0cmluZ1NldCB8IFZhbHVlU2V0IHwgT2JqZWN0U2V0KQorICAgIH07CisK
KyAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CisgICAgY2xhc3MgQnVpbGRlciB7CisgICAgcHJpdmF0
ZToKKyAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsK
KworICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0
U3RhdGUoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8
QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CisgICAgICAgIH0KKworICAgICAgICBCdWls
ZGVyKFBhc3NSZWZQdHI8LypPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzKi9JbnNwZWN0
b3I6Okluc3BlY3Rvck9iamVjdD4gcHRyKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxF
X0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0
X3N0YXRlKTsKKyAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOworICAgICAgICB9CisgICAgICAg
IGZyaWVuZCBjbGFzcyBPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzOworICAgIHB1Ymxp
YzoKKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgSW50ZWdlclNldD4mIHNldEludGVnZXIoY29u
c3QgU3RyaW5nJiB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
IShTVEFURSAmIEludGVnZXJTZXQpLCBwcm9wZXJ0eV9pbnRlZ2VyX2FscmVhZHlfc2V0KTsKKyAg
ICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJpbnRlZ2VyIiksIHZh
bHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8SW50ZWdlclNldD4oKTsKKyAgICAg
ICAgfQorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBBcnJheVNldD4mIHNldEFycmF5KGNvbnN0
IFN0cmluZyYgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEo
U1RBVEUgJiBBcnJheVNldCksIHByb3BlcnR5X2FycmF5X2FscmVhZHlfc2V0KTsKKyAgICAgICAg
ICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJhcnJheSIpLCB2YWx1ZSk7Cisg
ICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEFycmF5U2V0PigpOworICAgICAgICB9CisKKyAg
ICAgICAgQnVpbGRlcjxTVEFURSB8IFN0cmluZ1NldD4mIHNldFN0cmluZyhjb25zdCBTdHJpbmcm
IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYg
U3RyaW5nU2V0KSwgcHJvcGVydHlfc3RyaW5nX2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1f
cmVzdWx0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJzdHJpbmciKSwgdmFsdWUpOworICAgICAg
ICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxTdHJpbmdTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAg
ICBCdWlsZGVyPFNUQVRFIHwgVmFsdWVTZXQ+JiBzZXRWYWx1ZShjb25zdCBTdHJpbmcmIHZhbHVl
KQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVmFsdWVT
ZXQpLCBwcm9wZXJ0eV92YWx1ZV9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+
c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgidmFsdWUiKSwgdmFsdWUpOworICAgICAgICAgICAgcmV0
dXJuIGNhc3RTdGF0ZTxWYWx1ZVNldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBPYmplY3RTZXQ+JiBzZXRPYmplY3QoY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICAg
ICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE9iamVjdFNldCksIHBy
b3BlcnR5X29iamVjdF9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3Ry
aW5nKEFTQ0lJTGl0ZXJhbCgib2JqZWN0IiksIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBj
YXN0U3RhdGU8T2JqZWN0U2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgb3BlcmF0b3IgUmVm
UHRyPE9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHM+JiAoKQorICAgICAgICB7CisgICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19u
b3RfcmVhZHkpOworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKE9iamVjdFdpdGhQ
cm9wZXJ0eU5hbWVDb25mbGljdHMpID09IHNpemVvZihJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVj
dCksIGNhbm5vdF9jYXN0KTsKKyAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxS
ZWZQdHI8T2JqZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0cz4qPigmbV9yZXN1bHQpOworICAg
ICAgICB9CisKKyAgICAgICAgUGFzc1JlZlB0cjxPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxp
Y3RzPiByZWxlYXNlKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxPYmpl
Y3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzPigqdGhpcykucmVsZWFzZSgpOworICAgICAgICB9
CisgICAgfTsKKworICAgIC8qCisgICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgorICAgICAq
IFJlZlB0cjxPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzPiByZXN1bHQgPSBPYmplY3RX
aXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzOjpjcmVhdGUoKQorICAgICAqICAgICAuc2V0SW50ZWdl
ciguLi4pCisgICAgICogICAgIC5zZXRBcnJheSguLi4pCisgICAgICogICAgIC5zZXRTdHJpbmco
Li4uKQorICAgICAqICAgICAuc2V0VmFsdWUoLi4uKQorICAgICAqICAgICAuc2V0T2JqZWN0KC4u
Lik7CisgICAgICovCisgICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCisg
ICAgeworICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSW5zcGVjdG9yOjpJbnNw
ZWN0b3JPYmplY3Q6OmNyZWF0ZSgpKTsKKyAgICB9CisgICAgdHlwZWRlZiBJbnNwZWN0b3I6OlR5
cGVCdWlsZGVyOjpTdHJ1Y3RJdGVtVHJhaXRzIEl0ZW1UcmFpdHM7Cit9OworCit9IC8vIERhdGFi
YXNlCisjZW5kaWYgLy8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKKworbmFtZXNwYWNlIFRlc3Qgewor
Y2xhc3MgUGFyYW1ldGVyQnVuZGxlIDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0
QmFzZSB7CitwdWJsaWM6CisgICAgZW51bSB7CisgICAgICAgIE5vRmllbGRzU2V0ID0gMCwKKyAg
ICAgICAgQ29sdW1uTmFtZXNTZXQgPSAxIDw8IDAsCisgICAgICAgIE5vdGVzU2V0ID0gMSA8PCAx
LAorICAgICAgICBUaW1lc3RhbXBTZXQgPSAxIDw8IDIsCisgICAgICAgIFZhbHVlc1NldCA9IDEg
PDwgMywKKyAgICAgICAgUGF5bG9hZFNldCA9IDEgPDwgNCwKKyAgICAgICAgRXJyb3JTZXQgPSAx
IDw8IDUsCisgICAgICAgIEFsbEZpZWxkc1NldCA9IChDb2x1bW5OYW1lc1NldCB8IE5vdGVzU2V0
IHwgVGltZXN0YW1wU2V0IHwgVmFsdWVzU2V0IHwgUGF5bG9hZFNldCB8IEVycm9yU2V0KQorICAg
IH07CisKKyAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CisgICAgY2xhc3MgQnVpbGRlciB7CisgICAg
cHJpdmF0ZToKKyAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBtX3Jl
c3VsdDsKKworICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+
JiBjYXN0U3RhdGUoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0
X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CisgICAgICAgIH0KKworICAgICAg
ICBCdWlsZGVyKFBhc3NSZWZQdHI8LypQYXJhbWV0ZXJCdW5kbGUqL0luc3BlY3Rvcjo6SW5zcGVj
dG9yT2JqZWN0PiBwdHIpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNU
QVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwor
ICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CisgICAgICAgIH0KKyAgICAgICAgZnJpZW5kIGNs
YXNzIFBhcmFtZXRlckJ1bmRsZTsKKyAgICBwdWJsaWM6CisKKyAgICAgICAgQnVpbGRlcjxTVEFU
RSB8IENvbHVtbk5hbWVzU2V0PiYgc2V0Q29sdW1uTmFtZXMoUGFzc1JlZlB0cjxJbnNwZWN0b3I6
OlR5cGVCdWlsZGVyOjpBcnJheTxTdHJpbmc+PiB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIENvbHVtbk5hbWVzU2V0KSwgcHJvcGVydHlfY29s
dW1uTmFtZXNfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldEFycmF5KEFT
Q0lJTGl0ZXJhbCgiY29sdW1uTmFtZXMiKSwgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNh
c3RTdGF0ZTxDb2x1bW5OYW1lc1NldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBOb3Rlc1NldD4mIHNldE5vdGVzKGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgICAg
IHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBOb3Rlc1NldCksIHByb3Bl
cnR5X25vdGVzX2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmco
QVNDSUlMaXRlcmFsKCJub3RlcyIpLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0
YXRlPE5vdGVzU2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IFRp
bWVzdGFtcFNldD4mIHNldFRpbWVzdGFtcChkb3VibGUgdmFsdWUpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBUaW1lc3RhbXBTZXQpLCBwcm9wZXJ0eV90
aW1lc3RhbXBfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcihB
U0NJSUxpdGVyYWwoInRpbWVzdGFtcCIpLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2Fz
dFN0YXRlPFRpbWVzdGFtcFNldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXI8U1RB
VEUgfCBWYWx1ZXNTZXQ+JiBzZXRWYWx1ZXMoUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rv
ck9iamVjdD4gdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEo
U1RBVEUgJiBWYWx1ZXNTZXQpLCBwcm9wZXJ0eV92YWx1ZXNfYWxyZWFkeV9zZXQpOworICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldE9iamVjdChBU0NJSUxpdGVyYWwoInZhbHVlcyIpLCB2YWx1ZSk7
CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFZhbHVlc1NldD4oKTsKKyAgICAgICAgfQor
CisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBQYXlsb2FkU2V0PiYgc2V0UGF5bG9hZChQYXNzUmVm
UHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+IHZhbHVlKQorICAgICAgICB7CisgICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgUGF5bG9hZFNldCksIHByb3BlcnR5X3BheWxv
YWRfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldFZhbHVlKEFTQ0lJTGl0
ZXJhbCgicGF5bG9hZCIpLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFBh
eWxvYWRTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgRXJyb3JT
ZXQ+JiBzZXRFcnJvcihQYXNzUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkRhdGFiYXNl
OjpFcnJvcj4gdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEo
U1RBVEUgJiBFcnJvclNldCksIHByb3BlcnR5X2Vycm9yX2FscmVhZHlfc2V0KTsKKyAgICAgICAg
ICAgIG1fcmVzdWx0LT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJlcnJvciIpLCB2YWx1ZSk7Cisg
ICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEVycm9yU2V0PigpOworICAgICAgICB9CisKKyAg
ICAgICAgb3BlcmF0b3IgUmVmUHRyPFBhcmFtZXRlckJ1bmRsZT4mICgpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lz
X25vdF9yZWFkeSk7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoUGFyYW1ldGVy
QnVuZGxlKSA9PSBzaXplb2YoSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QpLCBjYW5ub3RfY2Fz
dCk7CisgICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPFBhcmFtZXRl
ckJ1bmRsZT4qPigmbV9yZXN1bHQpOworICAgICAgICB9CisKKyAgICAgICAgUGFzc1JlZlB0cjxQ
YXJhbWV0ZXJCdW5kbGU+IHJlbGVhc2UoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
UmVmUHRyPFBhcmFtZXRlckJ1bmRsZT4oKnRoaXMpLnJlbGVhc2UoKTsKKyAgICAgICAgfQorICAg
IH07CisKKyAgICAvKgorICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKKyAgICAgKiBSZWZQ
dHI8UGFyYW1ldGVyQnVuZGxlPiByZXN1bHQgPSBQYXJhbWV0ZXJCdW5kbGU6OmNyZWF0ZSgpCisg
ICAgICogICAgIC5zZXRDb2x1bW5OYW1lcyguLi4pCisgICAgICogICAgIC5zZXROb3RlcyguLi4p
CisgICAgICogICAgIC5zZXRUaW1lc3RhbXAoLi4uKQorICAgICAqICAgICAuc2V0VmFsdWVzKC4u
LikKKyAgICAgKiAgICAgLnNldFBheWxvYWQoLi4uKQorICAgICAqICAgICAuc2V0RXJyb3IoLi4u
KTsKKyAgICAgKi8KKyAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihJbnNwZWN0b3I6Okluc3Bl
Y3Rvck9iamVjdDo6Y3JlYXRlKCkpOworICAgIH0KKyAgICB0eXBlZGVmIEluc3BlY3Rvcjo6VHlw
ZUJ1aWxkZXI6OlN0cnVjdEl0ZW1UcmFpdHMgSXRlbVRyYWl0czsKK307CisKK30gLy8gVGVzdAor
CisKKworfSAvLyBuYW1lc3BhY2UgVHlwZUJ1aWxkZXIKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVj
dG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorCisjZW5kaWYgLy8gIWRlZmluZWQo
SW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVyc19oKQorIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0
VHlwZUJ1aWxkZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RUeXBlQnVpbGRl
cnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRp
b24tb2JqZWN0LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JU
ZXN0VHlwZUJ1aWxkZXJzLmgiCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSA8
d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworbmFtZXNwYWNl
IFR5cGVCdWlsZGVyIHsKKworc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGVudW1fY29uc3RhbnRf
dmFsdWVzW10gPSB7Cit9OworCitTdHJpbmcgZ2V0VGVzdEVudW1Db25zdGFudFZhbHVlKGludCBj
b2RlKSB7CisgICAgcmV0dXJuIGVudW1fY29uc3RhbnRfdmFsdWVzW2NvZGVdOworfQorCisKKwor
fSAvLyBuYW1lc3BhY2UgVHlwZUJ1aWxkZXIKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisK
KyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorCisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRl
c3RUeXBlQnVpbGRlcnMuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0
cy5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9leHBlY3RlZC90eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24tcmVzdWx0Cm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjA1NmY1MjMyMmI0MDdkMzdiOTI5MWQxYjFkYThjYjEyNWE0MzE4ZjEKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZXhwZWN0ZWQvdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uLXJlc3VsdApAQCAt
MCwwICsxLDcyNyBAQAorIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kQ29tbWFu
ZHMuanMKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1yZXF1aXJpbmct
cnVudGltZS1jYXN0cy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkKKworLy8gVGVzdC4KK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFbnVtKCJU
ZXN0LlVuY2FzdGVkQW5pbWFscyIsIHtQaWdzOiAiUGlncyIsIENvd3M6ICJDb3dzIiwgQ2F0czog
IkNhdHMiLCBIZW5zOiAiSGVucyJ9KTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFbnVtKCJU
ZXN0LkNhc3RlZEFuaW1hbHMiLCB7RHVja3M6ICJEdWNrcyIsIEhlbnM6ICJIZW5zIiwgQ3Jvd3M6
ICJDcm93cyIsIEZsYW1pbmdvczogIkZsYW1pbmdvcyJ9KTsKKyMjIyBFbmQgRmlsZTogSW5zcGVj
dG9yVGVzdEJhY2tlbmRDb21tYW5kcy5qcworCisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVz
dEJhY2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IHR5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGUtaW5z
cGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpZm5kZWYgSW5zcGVjdG9yVGVzdEJhY2tl
bmREaXNwYXRjaGVyc19oCisjZGVmaW5lIEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnNf
aAorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUgIkluc3BlY3RvclRlc3RUeXBl
QnVpbGRlcnMuaCIKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordHlwZWRlZiBTdHJpbmcgRXJy
b3JTdHJpbmc7CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxF
KElOU1BFQ1RPUikKKworI2VuZGlmIC8vICFkZWZpbmVkKEluc3BlY3RvclRlc3RCYWNrZW5kRGlz
cGF0Y2hlcnNfaCkKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVy
cy5oCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNw
cAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50
aW1lLWNhc3RzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yVGVzdEJh
Y2tlbmREaXNwYXRjaGVycy5oIgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUg
PGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4KKyNpbmNsdWRlIDxpbnNwZWN0
b3IvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCitu
YW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisj
ZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0
QmFja2VuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdEZy
b250ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0
eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaWZuZGVmIEluc3BlY3RvclRlc3RGcm9udGVu
ZERpc3BhdGNoZXJzX2gKKyNkZWZpbmUgSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnNf
aAorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUgIkluc3BlY3RvclRlc3RUeXBl
QnVpbGRlcnMuaCIKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
Lmg+CisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPgorI2luY2x1ZGUgPHd0
Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVz
cGFjZSBJbnNwZWN0b3IgeworCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRp
ZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorCisjZW5kaWYgLy8gIWRlZmluZWQoSW5zcGVjdG9yVGVz
dEZyb250ZW5kRGlzcGF0Y2hlcnNfaCkKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdEZyb250
ZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdEZyb250ZW5k
RGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUt
cmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJ
bnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgorCisjaWYgRU5BQkxFKElOU1BFQ1RP
UikKKworI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3Rv
ciB7CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BF
Q1RPUikKKworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5j
cHAKKworIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuaAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3Rz
Lmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQor
CisjaWZuZGVmIEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnNfaAorI2RlZmluZSBJbnNwZWN0b3JU
ZXN0VHlwZUJ1aWxkZXJzX2gKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRlIDxp
bnNwZWN0b3IvSW5zcGVjdG9ySlNUeXBlQnVpbGRlcnMuaD4KKyNpbmNsdWRlIDxpbnNwZWN0b3Iv
SW5zcGVjdG9yVHlwZUJ1aWxkZXIuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2lu
Y2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKwor
bmFtZXNwYWNlIFR5cGVCdWlsZGVyIHsKKworLy8gRm9yd2FyZCBkZWNsYXJhdGlvbnMuCituYW1l
c3BhY2UgVGVzdCB7CitjbGFzcyBSZWN1cnNpdmVPYmplY3QxOworY2xhc3MgUmVjdXJzaXZlT2Jq
ZWN0MjsKK2NsYXNzIFR5cGVOZWVkaW5nQ2FzdDsKK2VudW0gY2xhc3MgQ2FzdGVkQW5pbWFsczsK
K2VudW0gY2xhc3MgVW5jYXN0ZWRBbmltYWxzOworfSAvLyBUZXN0CisvLyBFbmQgb2YgZm9yd2Fy
ZCBkZWNsYXJhdGlvbnMuCisKKworLy8gVHlwZWRlZnMuCituYW1lc3BhY2UgVGVzdCB7Cit0eXBl
ZGVmIGludCBDYXN0ZWRPYmplY3RJZDsKKwordHlwZWRlZiBpbnQgVW5jYXN0ZWRPYmplY3RJZDsK
K30gLy8gVGVzdAorLy8gRW5kIG9mIHR5cGVkZWZzLgorCitTdHJpbmcgZ2V0VGVzdEVudW1Db25z
dGFudFZhbHVlKGludCBjb2RlKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gU3RyaW5nIGdldFRl
c3RFbnVtQ29uc3RhbnRWYWx1ZShUIGVudW1WYWx1ZSkKK3sKKyAgICByZXR1cm4gZ2V0VGVzdEVu
dW1Db25zdGFudFZhbHVlKHN0YXRpY19jYXN0PGludD4oZW51bVZhbHVlKSk7Cit9CisKK25hbWVz
cGFjZSBUZXN0IHsKKy8qIEEgZHVtbXkgdHlwZSB0aGF0IHJlcXVpcmVzIHJ1bnRpbWUgY2FzdHMs
IGFuZCBmb3JjZXMgbm9uLXByaW1pdGl2ZSByZWZlcmVuY2VkIHR5cGVzIHRvIGFsc28gZW1pdCBy
dW50aW1lIGNhc3QgaGVscGVycy4gKi8KK2NsYXNzIFR5cGVOZWVkaW5nQ2FzdCA6IHB1YmxpYyBJ
bnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdEJhc2UgeworcHVibGljOgorICAgIGVudW0geworICAg
ICAgICBOb0ZpZWxkc1NldCA9IDAsCisgICAgICAgIFN0cmluZ1NldCA9IDEgPDwgMCwKKyAgICAg
ICAgTnVtYmVyU2V0ID0gMSA8PCAxLAorICAgICAgICBBbmltYWxzU2V0ID0gMSA8PCAyLAorICAg
ICAgICBJZFNldCA9IDEgPDwgMywKKyAgICAgICAgVHJlZVNldCA9IDEgPDwgNCwKKyAgICAgICAg
QWxsRmllbGRzU2V0ID0gKFN0cmluZ1NldCB8IE51bWJlclNldCB8IEFuaW1hbHNTZXQgfCBJZFNl
dCB8IFRyZWVTZXQpCisgICAgfTsKKworICAgIHRlbXBsYXRlPGludCBTVEFURT4KKyAgICBjbGFz
cyBCdWlsZGVyIHsKKyAgICBwcml2YXRlOgorICAgICAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNw
ZWN0b3JPYmplY3Q+IG1fcmVzdWx0OworCisgICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWls
ZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKKyAg
ICAgICAgfQorCisgICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjwvKlR5cGVOZWVkaW5nQ2FzdCov
SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IHB0cikKKyAgICAgICAgeworICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9u
b25faW5pdF9zdGF0ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKKyAgICAgICAgfQor
ICAgICAgICBmcmllbmQgY2xhc3MgVHlwZU5lZWRpbmdDYXN0OworICAgIHB1YmxpYzoKKworICAg
ICAgICBCdWlsZGVyPFNUQVRFIHwgU3RyaW5nU2V0PiYgc2V0U3RyaW5nKGNvbnN0IFN0cmluZyYg
dmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBT
dHJpbmdTZXQpLCBwcm9wZXJ0eV9zdHJpbmdfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9y
ZXN1bHQtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInN0cmluZyIpLCB2YWx1ZSk7CisgICAgICAg
ICAgICByZXR1cm4gY2FzdFN0YXRlPFN0cmluZ1NldD4oKTsKKyAgICAgICAgfQorCisgICAgICAg
IEJ1aWxkZXI8U1RBVEUgfCBOdW1iZXJTZXQ+JiBzZXROdW1iZXIoaW50IHZhbHVlKQorICAgICAg
ICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTnVtYmVyU2V0KSwgcHJv
cGVydHlfbnVtYmVyX2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1i
ZXIoQVNDSUlMaXRlcmFsKCJudW1iZXIiKSwgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNh
c3RTdGF0ZTxOdW1iZXJTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyPFNUQVRF
IHwgQW5pbWFsc1NldD4mIHNldEFuaW1hbHMoSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6VGVzdDo6
Q2FzdGVkQW5pbWFscyB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoIShTVEFURSAmIEFuaW1hbHNTZXQpLCBwcm9wZXJ0eV9hbmltYWxzX2FscmVhZHlfc2V0KTsK
KyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJhbmltYWxzIiks
IEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OmdldFRlc3RFbnVtQ29uc3RhbnRWYWx1ZShzdGF0aWNf
Y2FzdDxpbnQ+KHZhbHVlKSkpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxBbmltYWxz
U2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IElkU2V0PiYgc2V0
SWQoaW50IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNU
QVRFICYgSWRTZXQpLCBwcm9wZXJ0eV9pZF9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jl
c3VsdC0+c2V0TnVtYmVyKEFTQ0lJTGl0ZXJhbCgiaWQiKSwgdmFsdWUpOworICAgICAgICAgICAg
cmV0dXJuIGNhc3RTdGF0ZTxJZFNldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBUcmVlU2V0PiYgc2V0VHJlZShQYXNzUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxk
ZXI6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDE+IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVHJlZVNldCksIHByb3BlcnR5X3RyZWVfYWxyZWFk
eV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldE9iamVjdChBU0NJSUxpdGVyYWwoInRy
ZWUiKSwgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxUcmVlU2V0PigpOwor
ICAgICAgICB9CisKKyAgICAgICAgb3BlcmF0b3IgUmVmUHRyPFR5cGVOZWVkaW5nQ2FzdD4mICgp
CisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxk
c1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChz
aXplb2YoVHlwZU5lZWRpbmdDYXN0KSA9PSBzaXplb2YoSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmpl
Y3QpLCBjYW5ub3RfY2FzdCk7CisgICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8
UmVmUHRyPFR5cGVOZWVkaW5nQ2FzdD4qPigmbV9yZXN1bHQpOworICAgICAgICB9CisKKyAgICAg
ICAgUGFzc1JlZlB0cjxUeXBlTmVlZGluZ0Nhc3Q+IHJlbGVhc2UoKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gUmVmUHRyPFR5cGVOZWVkaW5nQ2FzdD4oKnRoaXMpLnJlbGVhc2UoKTsK
KyAgICAgICAgfQorICAgIH07CisKKyAgICAvKgorICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3Rv
cjoKKyAgICAgKiBSZWZQdHI8VHlwZU5lZWRpbmdDYXN0PiByZXN1bHQgPSBUeXBlTmVlZGluZ0Nh
c3Q6OmNyZWF0ZSgpCisgICAgICogICAgIC5zZXRTdHJpbmcoLi4uKQorICAgICAqICAgICAuc2V0
TnVtYmVyKC4uLikKKyAgICAgKiAgICAgLnNldEFuaW1hbHMoLi4uKQorICAgICAqICAgICAuc2V0
SWQoLi4uKQorICAgICAqICAgICAuc2V0VHJlZSguLi4pOworICAgICAqLworICAgIHN0YXRpYyBC
dWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEJ1aWxk
ZXI8Tm9GaWVsZHNTZXQ+KEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7Cisg
ICAgfQorICAgIHR5cGVkZWYgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6U3RydWN0SXRlbVRyYWl0
cyBJdGVtVHJhaXRzOworfTsKKworLyogICovCitlbnVtIGNsYXNzIFVuY2FzdGVkQW5pbWFscyB7
CisgICAgUGlncyA9IDQsCisgICAgQ293cyA9IDUsCisgICAgQ2F0cyA9IDYsCisgICAgSGVucyA9
IDEsCit9OyAvLyBlbnVtIGNsYXNzIFVuY2FzdGVkQW5pbWFscworLyogICovCitlbnVtIGNsYXNz
IENhc3RlZEFuaW1hbHMgeworICAgIER1Y2tzID0gMCwKKyAgICBIZW5zID0gMSwKKyAgICBDcm93
cyA9IDIsCisgICAgRmxhbWluZ29zID0gMywKK307IC8vIGVudW0gY2xhc3MgQ2FzdGVkQW5pbWFs
cworY2xhc3MgUmVjdXJzaXZlT2JqZWN0MSA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3BlY3Rvck9i
amVjdEJhc2UgeworcHVibGljOgorICAgIGVudW0geworICAgICAgICBOb0ZpZWxkc1NldCA9IDAs
CisgICAgICAgIEFsbEZpZWxkc1NldCA9IDAKKyAgICB9OworCisgICAgdGVtcGxhdGU8aW50IFNU
QVRFPgorICAgIGNsYXNzIEJ1aWxkZXIgeworICAgIHByaXZhdGU6CisgICAgICAgIFJlZlB0cjxJ
bnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CisKKyAgICAgICAgdGVtcGxhdGU8
aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQ
Pio+KHRoaXMpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPC8qUmVj
dXJzaXZlT2JqZWN0MSovSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IHB0cikKKyAgICAgICAg
eworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxk
ZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdCA9IHB0
cjsKKyAgICAgICAgfQorICAgICAgICBmcmllbmQgY2xhc3MgUmVjdXJzaXZlT2JqZWN0MTsKKyAg
ICBwdWJsaWM6CisKKyAgICAgICAgb3BlcmF0b3IgUmVmUHRyPFJlY3Vyc2l2ZU9iamVjdDE+JiAo
KQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVs
ZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
c2l6ZW9mKFJlY3Vyc2l2ZU9iamVjdDEpID09IHNpemVvZihJbnNwZWN0b3I6Okluc3BlY3Rvck9i
amVjdCksIGNhbm5vdF9jYXN0KTsKKyAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2Fz
dDxSZWZQdHI8UmVjdXJzaXZlT2JqZWN0MT4qPigmbV9yZXN1bHQpOworICAgICAgICB9CisKKyAg
ICAgICAgUGFzc1JlZlB0cjxSZWN1cnNpdmVPYmplY3QxPiByZWxlYXNlKCkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxSZWN1cnNpdmVPYmplY3QxPigqdGhpcykucmVsZWFz
ZSgpOworICAgICAgICB9CisgICAgfTsKKworICAgIC8qCisgICAgICogU3ludGhldGljIGNvbnN0
cnVjdG9yOgorICAgICAqIFJlZlB0cjxSZWN1cnNpdmVPYmplY3QxPiByZXN1bHQgPSBSZWN1cnNp
dmVPYmplY3QxOjpjcmVhdGUoKTsKKyAgICAgKi8KKyAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxk
c1NldD4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0
PihJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkpOworICAgIH0KKyAgICB0eXBl
ZGVmIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlN0cnVjdEl0ZW1UcmFpdHMgSXRlbVRyYWl0czsK
KworICAgIHZvaWQgc2V0T2JqKFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6VGVz
dDo6UmVjdXJzaXZlT2JqZWN0Mj4gdmFsdWUpCisgICAgeworICAgICAgICBJbnNwZWN0b3JPYmpl
Y3RCYXNlOjpzZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJvYmoiKSwgdmFsdWUpOworICAgIH0KK307
CisKK2NsYXNzIFJlY3Vyc2l2ZU9iamVjdDIgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JP
YmplY3RCYXNlIHsKK3B1YmxpYzoKKyAgICBlbnVtIHsKKyAgICAgICAgTm9GaWVsZHNTZXQgPSAw
LAorICAgICAgICBBbGxGaWVsZHNTZXQgPSAwCisgICAgfTsKKworICAgIHRlbXBsYXRlPGludCBT
VEFURT4KKyAgICBjbGFzcyBCdWlsZGVyIHsKKyAgICBwcml2YXRlOgorICAgICAgICBSZWZQdHI8
SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OworCisgICAgICAgIHRlbXBsYXRl
PGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RF
UD4qPih0aGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjwvKlJl
Y3Vyc2l2ZU9iamVjdDIqL0luc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBwdHIpCisgICAgICAg
IHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWls
ZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOworICAgICAgICAgICAgbV9yZXN1bHQgPSBw
dHI7CisgICAgICAgIH0KKyAgICAgICAgZnJpZW5kIGNsYXNzIFJlY3Vyc2l2ZU9iamVjdDI7Cisg
ICAgcHVibGljOgorCisgICAgICAgIG9wZXJhdG9yIFJlZlB0cjxSZWN1cnNpdmVPYmplY3QyPiYg
KCkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmll
bGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KHNpemVvZihSZWN1cnNpdmVPYmplY3QyKSA9PSBzaXplb2YoSW5zcGVjdG9yOjpJbnNwZWN0b3JP
YmplY3QpLCBjYW5ub3RfY2FzdCk7CisgICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nh
c3Q8UmVmUHRyPFJlY3Vyc2l2ZU9iamVjdDI+Kj4oJm1fcmVzdWx0KTsKKyAgICAgICAgfQorCisg
ICAgICAgIFBhc3NSZWZQdHI8UmVjdXJzaXZlT2JqZWN0Mj4gcmVsZWFzZSgpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBSZWZQdHI8UmVjdXJzaXZlT2JqZWN0Mj4oKnRoaXMpLnJlbGVh
c2UoKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICAvKgorICAgICAqIFN5bnRoZXRpYyBjb25z
dHJ1Y3RvcjoKKyAgICAgKiBSZWZQdHI8UmVjdXJzaXZlT2JqZWN0Mj4gcmVzdWx0ID0gUmVjdXJz
aXZlT2JqZWN0Mjo6Y3JlYXRlKCk7CisgICAgICovCisgICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVs
ZHNTZXQ+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1Nl
dD4oSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpKTsKKyAgICB9CisgICAgdHlw
ZWRlZiBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpTdHJ1Y3RJdGVtVHJhaXRzIEl0ZW1UcmFpdHM7
CisKKyAgICB2b2lkIHNldE9iaihQYXNzUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlRl
c3Q6OlJlY3Vyc2l2ZU9iamVjdDE+IHZhbHVlKQorICAgIHsKKyAgICAgICAgSW5zcGVjdG9yT2Jq
ZWN0QmFzZTo6c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgib2JqIiksIHZhbHVlKTsKKyAgICB9Cit9
OworCit9IC8vIFRlc3QKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQmluZGluZ1RyYWl0czxJbnNwZWN0
b3I6OlR5cGVCdWlsZGVyOjpUZXN0OjpDYXN0ZWRBbmltYWxzPiB7CisjaWYgIUFTU0VSVF9ESVNB
QkxFRAorc3RhdGljIHZvaWQgYXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSW5zcGVjdG9yOjpJ
bnNwZWN0b3JWYWx1ZSopOworI2VuZGlmIC8vICFBU1NFUlRfRElTQUJMRUQKK307Cit0ZW1wbGF0
ZTw+IHN0cnVjdCBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlRlc3Q6OlR5
cGVOZWVkaW5nQ2FzdD4geworc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRl
cjo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0PiBydW50aW1lQ2FzdChQYXNzUmVmUHRyPEluc3BlY3Rv
cjo6SW5zcGVjdG9yVmFsdWU+IHZhbHVlKTsKKyNpZiAhQVNTRVJUX0RJU0FCTEVECitzdGF0aWMg
dm9pZCBhc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVl
Kik7CisjZW5kaWYgLy8gIUFTU0VSVF9ESVNBQkxFRAorfTsKK3RlbXBsYXRlPD4gc3RydWN0IEJp
bmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0
MT4geworI2lmICFBU1NFUlRfRElTQUJMRUQKK3N0YXRpYyB2b2lkIGFzc2VydFZhbHVlSGFzRXhw
ZWN0ZWRUeXBlKEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUqKTsKKyNlbmRpZiAvLyAhQVNTRVJU
X0RJU0FCTEVECit9OwordGVtcGxhdGU8PiBzdHJ1Y3QgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6
OlR5cGVCdWlsZGVyOjpUZXN0OjpSZWN1cnNpdmVPYmplY3QyPiB7CisjaWYgIUFTU0VSVF9ESVNB
QkxFRAorc3RhdGljIHZvaWQgYXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSW5zcGVjdG9yOjpJ
bnNwZWN0b3JWYWx1ZSopOworI2VuZGlmIC8vICFBU1NFUlRfRElTQUJMRUQKK307CisKK30gLy8g
bmFtZXNwYWNlIFR5cGVCdWlsZGVyCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5k
aWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKworI2VuZGlmIC8vICFkZWZpbmVkKEluc3BlY3RvclRl
c3RUeXBlQnVpbGRlcnNfaCkKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVy
cy5oCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmNwcAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLXJlcXVpcmluZy1ydW50aW1lLWNh
c3RzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yVGVzdFR5cGVCdWls
ZGVycy5oIgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK25hbWVzcGFjZSBUeXBlQnVpbGRl
ciB7CisKK3N0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBlbnVtX2NvbnN0YW50X3ZhbHVlc1tdID0g
eworICAgICJEdWNrcyIsCisgICAgIkhlbnMiLAorICAgICJDcm93cyIsCisgICAgIkZsYW1pbmdv
cyIsCisgICAgIlBpZ3MiLAorICAgICJDb3dzIiwKKyAgICAiQ2F0cyIsCit9OworCitTdHJpbmcg
Z2V0VGVzdEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKSB7CisgICAgcmV0dXJuIGVudW1fY29u
c3RhbnRfdmFsdWVzW2NvZGVdOworfQorCisKKworI2lmICFBU1NFUlRfRElTQUJMRUQKK3ZvaWQg
QmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpUZXN0OjpDYXN0ZWRBbmltYWxz
Pjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSog
dmFsdWUpCit7CisgICAgU3RyaW5nIHM7CisgICAgYm9vbCBjYXN0X3JlcyA9IHZhbHVlLT5hc1N0
cmluZygmcyk7CisgICAgQVNTRVJUKGNhc3RfcmVzKTsKKyAgICBBU1NFUlQocyA9PSAiRHVja3Mi
IHx8IHMgPT0gIkhlbnMiIHx8IHMgPT0gIkNyb3dzIiB8fCBzID09ICJGbGFtaW5nb3MiKTsKK30K
KyNlbmRpZiAvLyAhQVNTRVJUX0RJU0FCTEVECisKKyNpZiAhQVNTRVJUX0RJU0FCTEVECit2b2lk
IEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6VGVzdDo6VHlwZU5lZWRpbmdD
YXN0Pjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1
ZSogdmFsdWUpCit7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gb2JqZWN0OworICAgIGJv
b2wgY2FzdFJlcyA9IHZhbHVlLT5hc09iamVjdCgmb2JqZWN0KTsKKyAgICBBU1NFUlRfVU5VU0VE
KGNhc3RSZXMsIGNhc3RSZXMpOworICAgIHsKKyAgICAgICAgSW5zcGVjdG9yT2JqZWN0OjppdGVy
YXRvciBzdHJpbmdQb3MgPSBvYmplY3QtPmZpbmQoQVNDSUlMaXRlcmFsKCJzdHJpbmciKSk7Cisg
ICAgICAgIEFTU0VSVChzdHJpbmdQb3MgIT0gb2JqZWN0LT5lbmQoKSk7CisgICAgICAgIEJpbmRp
bmdUcmFpdHM8U3RyaW5nPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoc3RyaW5nUG9zLT52
YWx1ZS5nZXQoKSk7CisgICAgfQorICAgIHsKKyAgICAgICAgSW5zcGVjdG9yT2JqZWN0OjppdGVy
YXRvciBudW1iZXJQb3MgPSBvYmplY3QtPmZpbmQoQVNDSUlMaXRlcmFsKCJudW1iZXIiKSk7Cisg
ICAgICAgIEFTU0VSVChudW1iZXJQb3MgIT0gb2JqZWN0LT5lbmQoKSk7CisgICAgICAgIEJpbmRp
bmdUcmFpdHM8aW50Pjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUobnVtYmVyUG9zLT52YWx1
ZS5nZXQoKSk7CisgICAgfQorICAgIHsKKyAgICAgICAgSW5zcGVjdG9yT2JqZWN0OjppdGVyYXRv
ciBhbmltYWxzUG9zID0gb2JqZWN0LT5maW5kKEFTQ0lJTGl0ZXJhbCgiYW5pbWFscyIpKTsKKyAg
ICAgICAgQVNTRVJUKGFuaW1hbHNQb3MgIT0gb2JqZWN0LT5lbmQoKSk7CisgICAgICAgIEJpbmRp
bmdUcmFpdHM8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6VGVzdDo6Q2FzdGVkQW5pbWFscz46OmFz
c2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKGFuaW1hbHNQb3MtPnZhbHVlLmdldCgpKTsKKyAgICB9
CisgICAgeworICAgICAgICBJbnNwZWN0b3JPYmplY3Q6Oml0ZXJhdG9yIGlkUG9zID0gb2JqZWN0
LT5maW5kKEFTQ0lJTGl0ZXJhbCgiaWQiKSk7CisgICAgICAgIEFTU0VSVChpZFBvcyAhPSBvYmpl
Y3QtPmVuZCgpKTsKKyAgICAgICAgQmluZGluZ1RyYWl0czxpbnQ+Ojphc3NlcnRWYWx1ZUhhc0V4
cGVjdGVkVHlwZShpZFBvcy0+dmFsdWUuZ2V0KCkpOworICAgIH0KKyAgICB7CisgICAgICAgIElu
c3BlY3Rvck9iamVjdDo6aXRlcmF0b3IgdHJlZVBvcyA9IG9iamVjdC0+ZmluZChBU0NJSUxpdGVy
YWwoInRyZWUiKSk7CisgICAgICAgIEFTU0VSVCh0cmVlUG9zICE9IG9iamVjdC0+ZW5kKCkpOwor
ICAgICAgICBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlRlc3Q6OlJlY3Vy
c2l2ZU9iamVjdDE+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZSh0cmVlUG9zLT52YWx1ZS5n
ZXQoKSk7CisgICAgfQorCisgICAgaW50IGZvdW5kUHJvcGVydGllc0NvdW50ID0gNTsKKyAgICBp
ZiAoZm91bmRQcm9wZXJ0aWVzQ291bnQgIT0gb2JqZWN0LT5zaXplKCkpCisgICAgICAgIEZBVEFM
KCJVbmV4cGVjdGVkIHByb3BlcnRpZXMgaW4gb2JqZWN0OiAlc1xuIiwgb2JqZWN0LT50b0pTT05T
dHJpbmcoKS5hc2NpaSgpLmRhdGEoKSk7Cit9CisjZW5kaWYgLy8gIUFTU0VSVF9ESVNBQkxFRAor
CitQYXNzUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlRlc3Q6OlR5cGVOZWVkaW5nQ2Fz
dD4gQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpUZXN0OjpUeXBlTmVlZGlu
Z0Nhc3Q+OjpydW50aW1lQ2FzdChQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+
IHZhbHVlKQoreworICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gb2JqZWN0
OworICAgIGJvb2wgY2FzdFJlcyA9IHZhbHVlLT5hc09iamVjdCgmb2JqZWN0KTsKKyAgICBBU1NF
UlRfVU5VU0VEKGNhc3RSZXMsIGNhc3RSZXMpOworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICBC
aW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlRlc3Q6OlR5cGVOZWVkaW5nQ2Fz
dD46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKG9iamVjdC5nZXQoKSk7CisjZW5kaWYgIC8v
ICFBU1NFUlRfRElTQUJMRUQKKyAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoSW5zcGVjdG9yOjpU
eXBlQnVpbGRlcjo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0KSA9PSBzaXplb2YoSW5zcGVjdG9yOjpJ
bnNwZWN0b3JPYmplY3RCYXNlKSwgdHlwZV9jYXN0X3Byb2JsZW0pOworICAgIHJldHVybiBzdGF0
aWNfY2FzdDxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3QqPihz
dGF0aWNfY2FzdDxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdEJhc2UqPihvYmplY3QuZ2V0KCkp
KTsKK30KKworCisjaWYgIUFTU0VSVF9ESVNBQkxFRAordm9pZCBCaW5kaW5nVHJhaXRzPEluc3Bl
Y3Rvcjo6VHlwZUJ1aWxkZXI6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDE+Ojphc3NlcnRWYWx1ZUhh
c0V4cGVjdGVkVHlwZShJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlKiB2YWx1ZSkKK3sKKyAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBvYmplY3Q7CisgICAgYm9vbCBjYXN0UmVzID0gdmFsdWUt
PmFzT2JqZWN0KCZvYmplY3QpOworICAgIEFTU0VSVF9VTlVTRUQoY2FzdFJlcywgY2FzdFJlcyk7
CisKKyAgICBpbnQgZm91bmRQcm9wZXJ0aWVzQ291bnQgPSAwOworICAgIHsKKyAgICAgICAgSW5z
cGVjdG9yT2JqZWN0OjppdGVyYXRvciBvYmpQb3MgPSBvYmplY3QtPmZpbmQoQVNDSUlMaXRlcmFs
KCJvYmoiKSk7CisgICAgICAgIGlmIChvYmpQb3MgIT0gb2JqZWN0LT5lbmQoKSkgeworICAgICAg
ICAgICAgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpUZXN0OjpSZWN1cnNp
dmVPYmplY3QyPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUob2JqUG9zLT52YWx1ZS5nZXQo
KSk7CisgICAgICAgICAgICArK2ZvdW5kUHJvcGVydGllc0NvdW50OworICAgICAgICB9CisgICAg
fQorICAgIGlmIChmb3VuZFByb3BlcnRpZXNDb3VudCAhPSBvYmplY3QtPnNpemUoKSkKKyAgICAg
ICAgRkFUQUwoIlVuZXhwZWN0ZWQgcHJvcGVydGllcyBpbiBvYmplY3Q6ICVzXG4iLCBvYmplY3Qt
PnRvSlNPTlN0cmluZygpLmFzY2lpKCkuZGF0YSgpKTsKK30KKyNlbmRpZiAvLyAhQVNTRVJUX0RJ
U0FCTEVECisKKyNpZiAhQVNTRVJUX0RJU0FCTEVECit2b2lkIEJpbmRpbmdUcmFpdHM8SW5zcGVj
dG9yOjpUeXBlQnVpbGRlcjo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0Mj46OmFzc2VydFZhbHVlSGFz
RXhwZWN0ZWRUeXBlKEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUqIHZhbHVlKQoreworICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG9iamVjdDsKKyAgICBib29sIGNhc3RSZXMgPSB2YWx1ZS0+
YXNPYmplY3QoJm9iamVjdCk7CisgICAgQVNTRVJUX1VOVVNFRChjYXN0UmVzLCBjYXN0UmVzKTsK
KworICAgIGludCBmb3VuZFByb3BlcnRpZXNDb3VudCA9IDA7CisgICAgeworICAgICAgICBJbnNw
ZWN0b3JPYmplY3Q6Oml0ZXJhdG9yIG9ialBvcyA9IG9iamVjdC0+ZmluZChBU0NJSUxpdGVyYWwo
Im9iaiIpKTsKKyAgICAgICAgaWYgKG9ialBvcyAhPSBvYmplY3QtPmVuZCgpKSB7CisgICAgICAg
ICAgICBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlRlc3Q6OlJlY3Vyc2l2
ZU9iamVjdDE+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShvYmpQb3MtPnZhbHVlLmdldCgp
KTsKKyAgICAgICAgICAgICsrZm91bmRQcm9wZXJ0aWVzQ291bnQ7CisgICAgICAgIH0KKyAgICB9
CisgICAgaWYgKGZvdW5kUHJvcGVydGllc0NvdW50ICE9IG9iamVjdC0+c2l6ZSgpKQorICAgICAg
ICBGQVRBTCgiVW5leHBlY3RlZCBwcm9wZXJ0aWVzIGluIG9iamVjdDogJXNcbiIsIG9iamVjdC0+
dG9KU09OU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOworfQorI2VuZGlmIC8vICFBU1NFUlRfRElT
QUJMRUQKKworfSAvLyBuYW1lc3BhY2UgVHlwZUJ1aWxkZXIKKworfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorCisjIyMgRW5kIEZpbGU6IElu
c3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1kdXBsaWNhdGUtdHlwZS1kZWNs
YXJhdGlvbnMuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9mYWlsLW9uLWR1cGxpY2F0ZS10eXBlLWRlY2xhcmF0aW9ucy5qc29uCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjcwMmZjNmEzMjcwYTY0NmE0NTA0NDdmZGMwNDAxMzk5NWE5NDJiZjAKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1v
bi1kdXBsaWNhdGUtdHlwZS1kZWNsYXJhdGlvbnMuanNvbgpAQCAtMCwwICsxLDE1IEBACit7Cisg
ICAgImRvbWFpbiI6ICJSdW50aW1lIiwKKyAgICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAg
ICAgICAgICJpZCI6ICJSZW1vdGVPYmplY3RJZCIsCisgICAgICAgICAgICAidHlwZSI6ICJzdHJp
bmciLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBvYmplY3QgaWRlbnRpZmll
ci4iCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJSZW1vdGVPYmpl
Y3RJZCIsCisgICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAorICAgICAgICAgICAgImRlc2Ny
aXB0aW9uIjogIlVuaXF1ZSBvYmplY3QgaWRlbnRpZmllci4iCisgICAgICAgIH0KKyAgICBdCit9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZmFpbC1vbi1lbnVtLXdpdGgtbm8tdmFsdWVzLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1lbnVtLXdpdGgtbm8tdmFsdWVzLmpz
b24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMjMyYTdjMzI0OWE0MGJkNDQ3ZTE5YTkyYThlNTY5MzBkM2Y4NTk1Nwot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9mYWlsLW9uLWVudW0td2l0aC1uby12YWx1ZXMuanNvbgpAQCAtMCwwICsxLDEwIEBA
Cit7CisgICAgImRvbWFpbiI6ICJEYXRhYmFzZSIsCisgICAgInR5cGVzIjogWworICAgICAgICB7
CisgICAgICAgICAgICAiaWQiOiAiUHJpbWFyeUNvbG9ycyIsCisgICAgICAgICAgICAidHlwZSI6
ICJzdHJpbmciLAorICAgICAgICAgICAgImVudW0iOiBbXQorICAgICAgICB9CisgICAgXQorfQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2ZhaWwtb24tc3RyaW5nLXR5cGVkLW9wdGlvbmFsLXBhcmFtZXRlci1mbGFnLmpzb24gYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1zdHJpbmct
dHlwZWQtb3B0aW9uYWwtcGFyYW1ldGVyLWZsYWcuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40MDEyYzc5YjZi
MzhjMjFkZmY2MDdmZWM5ZWU5MGIyODAzMTBmOTA4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tc3RyaW5nLXR5
cGVkLW9wdGlvbmFsLXBhcmFtZXRlci1mbGFnLmpzb24KQEAgLTAsMCArMSwxOCBAQAoreworICAg
ICJkb21haW4iOiAiRGF0YWJhc2UiLAorICAgICJ0eXBlcyI6IFsKKyAgICAgICAgeworICAgICAg
ICAgICAgImlkIjogIkRhdGFiYXNlSWQiLAorICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwK
KyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUgaWRlbnRpZmllciBvZiBEYXRhYmFz
ZSBvYmplY3QuIgorICAgICAgICB9CisgICAgXSwKKyAgICAiZXZlbnRzIjogWworICAgICAgICB7
CisgICAgICAgICAgICAibmFtZSI6ICJkaWRFeGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJzIiwKKyAg
ICAgICAgICAgICJwYXJhbWV0ZXJzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29s
dW1uTmFtZXMiLCAidHlwZSI6ICJzdHJpbmciLCAib3B0aW9uYWwiOiAidHJ1ZSIgfQorICAgICAg
ICAgICAgXQorICAgICAgICB9CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tc3RyaW5nLXR5cGVkLW9wdGlv
bmFsLXR5cGUtbWVtYmVyLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZmFpbC1vbi1zdHJpbmctdHlwZWQtb3B0aW9uYWwtdHlwZS1tZW1iZXIuanNv
bgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5jYTNlZjI4YThmODgxNGNjNjE3ZmI1ZDViYzIxMzA2ZDBhYWQ0ZmQwCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2ZhaWwtb24tc3RyaW5nLXR5cGVkLW9wdGlvbmFsLXR5cGUtbWVtYmVyLmpzb24KQEAg
LTAsMCArMSwxNiBAQAorWworeworICAgICJkb21haW4iOiAiRGF0YWJhc2UiLAorICAgICJ0eXBl
cyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIkVycm9yIiwKKyAgICAgICAgICAg
ICJ0eXBlIjogIm9iamVjdCIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiRGF0YWJhc2Ug
ZXJyb3IuIiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWworICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAibWVzc2FnZSIsICJ0eXBlIjogInN0cmluZyIsICJkZXNjcmlwdGlvbiI6ICJFcnJv
ciBtZXNzYWdlLiIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvZGUiLCAidHlwZSI6
ICJpbnRlZ2VyIiwgImRlc2NyaXB0aW9uIjogIkVycm9yIGNvZGUuIiwgIm9wdGlvbmFsIjogImZh
bHNlIiB9CisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdCit9CitdCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi10
eXBlLWRlY2xhcmF0aW9uLXVzaW5nLXR5cGUtcmVmZXJlbmNlLmpzb24gYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi10eXBlLWRlY2xhcmF0aW9u
LXVzaW5nLXR5cGUtcmVmZXJlbmNlLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTliNzU5MGNjYzZmNmJjMzQ0
M2E0YTI4M2NhNmZjY2ZkZjMyNzczNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLXR5cGUtZGVjbGFyYXRpb24t
dXNpbmctdHlwZS1yZWZlcmVuY2UuanNvbgpAQCAtMCwwICsxLDEzIEBACitbCit7CisgICAgImRv
bWFpbiI6ICJSdW50aW1lIiwKKyAgICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAg
ICJpZCI6ICJSZW1vdGVPYmplY3RJZCIsCisgICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAor
ICAgICAgICAgICAgIiRyZWYiOiAiU29tZVR5cGUiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9u
IjogIlVuaXF1ZSBvYmplY3QgaWRlbnRpZmllci4iCisgICAgICAgIH0KKyAgICBdCit9CitdCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
ZmFpbC1vbi10eXBlLXdpdGgtbG93ZXJjYXNlLW5hbWUuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLXR5cGUtd2l0aC1sb3dlcmNhc2Ut
bmFtZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjUzMTkwMWU0YTlhZDk5MzZiMDFiYmFlZDk3YTFkNGRhMzQ4
NDc4YjAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZmFpbC1vbi10eXBlLXdpdGgtbG93ZXJjYXNlLW5hbWUuanNvbgpAQCAt
MCwwICsxLDEwIEBACit7CisgICAgImRvbWFpbiI6ICJEYXRhYmFzZSIsCisgICAgInR5cGVzIjog
WworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiZGF0YWJhc2VJZCIsCisgICAgICAgICAg
ICAidHlwZSI6ICJpbnRlZ2VyIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUg
aWRlbnRpZmllciBvZiBEYXRhYmFzZSBvYmplY3QuIgorICAgICAgICB9CisgICAgXQorfQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2Zh
aWwtb24tdW5rbm93bi10eXBlLXJlZmVyZW5jZS1pbi10eXBlLWRlY2xhcmF0aW9uLmpzb24gYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi11bmtu
b3duLXR5cGUtcmVmZXJlbmNlLWluLXR5cGUtZGVjbGFyYXRpb24uanNvbgpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5k
Njg4N2EyNzQxMTkwMGE4MGQ1MGYwMDNlYWMzNmMxM2E5OWZhZTU4Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24t
dW5rbm93bi10eXBlLXJlZmVyZW5jZS1pbi10eXBlLWRlY2xhcmF0aW9uLmpzb24KQEAgLTAsMCAr
MSwxMiBAQAorWworeworICAgICJkb21haW4iOiAiUnVudGltZSIsCisgICAgInR5cGVzIjogWwor
ICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiUmVtb3RlT2JqZWN0SWQiLAorICAgICAgICAg
ICAgInR5cGUiOiAiZHJhZ29uIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUg
b2JqZWN0IGlkZW50aWZpZXIuIgorICAgICAgICB9CisgICAgXQorfQorXQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tdW5r
bm93bi10eXBlLXJlZmVyZW5jZS1pbi10eXBlLW1lbWJlci5qc29uIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVy
ZW5jZS1pbi10eXBlLW1lbWJlci5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI4MTdkYjUwNDRkYzFmMjg1NTcw
MDhjMWYxNzYxZjFiMDY4ZjRjZTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi11bmtub3duLXR5cGUtcmVmZXJl
bmNlLWluLXR5cGUtbWVtYmVyLmpzb24KQEAgLTAsMCArMSwxNSBAQAorWworeworICAgICJkb21h
aW4iOiAiRmFudGFzeSIsCisgICAgInR5cGVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAi
aWQiOiAiRHJhZ29uRWdnIiwKKyAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCisgICAgICAg
ICAgICAiZGVzY3JpcHRpb24iOiAiQSBkcmFnb24gZWdnLiIsCisgICAgICAgICAgICAicHJvcGVy
dGllcyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbG9yIiwgIiRyZWYiOiAiQ29s
b3IiIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0KK30KK10KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9zYW1lLXR5cGUt
aWQtZGlmZmVyZW50LWRvbWFpbi5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL3NhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24KbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uM2JmNGRmZjVjY2MyOWQwZThjMWZhNGIyZGQzMjgzZTc3MTYzMmM3ZAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9z
YW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCkBAIC0wLDAgKzEsMjIgQEAKK1sKK3sK
KyAgICAiZG9tYWluIjogIlJ1bnRpbWUiLAorICAgICJ0eXBlcyI6IFsKKyAgICAgICAgeworICAg
ICAgICAgICAgImlkIjogIlJlbW90ZU9iamVjdElkIiwKKyAgICAgICAgICAgICJ0eXBlIjogInN0
cmluZyIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5pcXVlIG9iamVjdCBpZGVudGlm
aWVyLiIKKyAgICAgICAgfQorICAgIF0KK30sCit7CisgICAgImRvbWFpbiI6ICJSdW50aW1lMiIs
CisgICAgInR5cGVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiUmVtb3RlT2Jq
ZWN0SWQiLAorICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKKyAgICAgICAgICAgICJkZXNj
cmlwdGlvbiI6ICJVbmlxdWUgb2JqZWN0IGlkZW50aWZpZXIuIgorICAgICAgICB9CisgICAgXQor
fQorXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL3NoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3NoYWRvd2VkLW9wdGlvbmFsLXR5cGUt
c2V0dGVycy5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjIwYTBjMTU1Mjc1MGY2MjgyODhjZmY0MTkzOTZiZDZm
NmFmNzQ5ZmUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KQEAg
LTAsMCArMSwzMSBAQAoreworICAgICJkb21haW4iOiAiUnVudGltZSIsCisgICAgInR5cGVzIjog
WworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiS2V5UGF0aCIsCisgICAgICAgICAgICAi
dHlwZSI6ICJvYmplY3QiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIktleSBwYXRoLiIs
CisgICAgICAgICAgICAicHJvcGVydGllcyI6IFsKKyAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgICJuYW1lIjogInR5cGUiLAorICAgICAgICAgICAgICAgICAgICAidHlwZSI6
ICJzdHJpbmciLAorICAgICAgICAgICAgICAgICAgICAiZW51bSI6IFsibnVsbCIsICJzdHJpbmci
LCAiYXJyYXkiXSwKKyAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIktleSBwYXRo
IHR5cGUuIgorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICAibmFtZSI6ICJzdHJpbmciLAorICAgICAgICAgICAgICAgICAgICAidHlwZSI6
ICJzdHJpbmciLAorICAgICAgICAgICAgICAgICAgICAib3B0aW9uYWwiOiB0cnVlLAorICAgICAg
ICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiU3RyaW5nIHZhbHVlLiIKKyAgICAgICAgICAg
ICAgICB9LAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAi
YXJyYXkiLAorICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJhcnJheSIsCisgICAgICAgICAg
ICAgICAgICAgICJvcHRpb25hbCI6IHRydWUsCisgICAgICAgICAgICAgICAgICAgICJpdGVtcyI6
IHsgInR5cGUiOiAic3RyaW5nIiB9LAorICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24i
OiAiQXJyYXkgdmFsdWUuIgorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF0KKyAgICAg
ICAgfQorICAgIF0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy90eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUu
anNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy90eXBl
LWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbgpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jYmM5
ZDUzOTQ3OGRiNDk1Yzk2MDY3ZWNkNTRhOTViZTUyZjhkMDcwCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3R5cGUtZGVjbGFy
YXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uCkBAIC0wLDAgKzEsMTAgQEAKK3sKKyAg
ICAiZG9tYWluIjogIlJ1bnRpbWUiLAorICAgICJ0eXBlcyI6IFsKKyAgICAgICAgeworICAgICAg
ICAgICAgImlkIjogIlJlbW90ZU9iamVjdElkIiwKKyAgICAgICAgICAgICJ0eXBlIjogImludGVn
ZXIiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBvYmplY3QgaWRlbnRpZmll
ci4iCisgICAgICAgIH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpz
b24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvdHlwZS1k
ZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2ZiMDhiZDk0MGI2NGZiNjYw
Mzk2NWNlMWIwNGQzZmM5NzQ5ZWE5MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy90eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5
cGUuanNvbgpAQCAtMCwwICsxLDUwIEBACitbCit7CisgICAgImRvbWFpbiI6ICJEZWJ1Z2dlciIs
CisgICAgInR5cGVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiQnJlYWtwb2lu
dElkIiwKKyAgICAgICAgICAgICJ0eXBlIjogImludGVnZXIiCisgICAgICAgIH0sCisgICAgICAg
IHsKKyAgICAgICAgICAgICJpZCI6ICJSZWFzb24iLAorICAgICAgICAgICAgInR5cGUiOiAic3Ry
aW5nIiwKKyAgICAgICAgICAgICJlbnVtIjogWyJEaWVkIiwgIkZhaW50ZWQiLCAiSHVuZ3J5Il0K
KyAgICAgICAgfQorICAgIF0KK30sCit7CisgICAgImRvbWFpbiI6ICJSdW50aW1lIiwKKyAgICAi
dHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJPYmplY3RJZCIsCisgICAg
ICAgICAgICAidHlwZSI6ICJpbnRlZ2VyIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAg
ICAgICAiaWQiOiAiTHVja3lOdW1iZXJzIiwKKyAgICAgICAgICAgICJ0eXBlIjogImFycmF5IiwK
KyAgICAgICAgICAgICJpdGVtcyI6IHsgInR5cGUiOiAiaW50ZWdlciIgfQorICAgICAgICB9LAor
ICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiQmFieU5hbWVzIiwKKyAgICAgICAgICAgICJ0
eXBlIjogImFycmF5IiwKKyAgICAgICAgICAgICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9
CisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJOZXdPYmplY3RzIiwK
KyAgICAgICAgICAgICJ0eXBlIjogImFycmF5IiwKKyAgICAgICAgICAgICJpdGVtcyI6IHsgIiRy
ZWYiOiAiT2JqZWN0SWQiIH0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlk
IjogIk9sZE9iamVjdHMiLAorICAgICAgICAgICAgInR5cGUiOiAiYXJyYXkiLAorICAgICAgICAg
ICAgIml0ZW1zIjogeyAiJHJlZiI6ICJEZWJ1Z2dlci5CcmVha3BvaW50SWQiIH0KKyAgICAgICAg
fSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIlN0b3BSZWFzb25zIiwKKyAgICAgICAg
ICAgICJ0eXBlIjogImFycmF5IiwKKyAgICAgICAgICAgICJpdGVtcyI6IHsgIiRyZWYiOiAiRGVi
dWdnZXIuUmVhc29uIiB9CisgICAgICAgIH0KKyAgICBdCit9CitdCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvdHlwZS1kZWNsYXJhdGlv
bi1lbnVtLXR5cGUuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy90eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjlmMGFl
ZTljOTFiOTVhYmFmMzg3ZTcyYTkxYTMzMzhiNTc5ZGE5YWEKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvdHlwZS1kZWNsYXJh
dGlvbi1lbnVtLXR5cGUuanNvbgpAQCAtMCwwICsxLDE1IEBACit7CisgICAgImRvbWFpbiI6ICJS
dW50aW1lIiwKKyAgICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJG
YXJtQW5pbWFscyIsCisgICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAorICAgICAgICAgICAg
ImVudW0iOiBbIlBpZ3MiLCAiQ293cyIsICJDYXRzIiwgIkhlbnMiXQorICAgICAgICB9LAorICAg
ICAgICB7CisgICAgICAgICAgICAiaWQiOiAiVHdvTGVnZ2VkQW5pbWFscyIsCisgICAgICAgICAg
ICAidHlwZSI6ICJzdHJpbmciLAorICAgICAgICAgICAgImVudW0iOiBbIkR1Y2tzIiwgIkhlbnMi
LCAiQ3Jvd3MiLCAiRmxhbWluZ29zIl0KKyAgICAgICAgfQorICAgIF0KK30KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy90eXBlLWRlY2xh
cmF0aW9uLW9iamVjdC10eXBlLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjZmNTdhZDJjZjVmNzhiYzY1NGRmODFhOTNkYmI1NjA2OWQxNWE0MzEKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvdHlw
ZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCkBAIC0wLDAgKzEsOTcgQEAKK1sKK3sKKyAg
ICAiZG9tYWluIjogIkRhdGFiYXNlIiwKKyAgICAiZGVzY3JpcHRpb24iOiAiVGVzdCB0eXBlIGJ1
aWxkZXIgZ2VuZXJhdGlvbiBvZiB2YXJpb3VzIG9iamVjdCB0eXBlcy4iLAorICAgICJ0eXBlcyI6
IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIkVycm9yIiwKKyAgICAgICAgICAgICJ0
eXBlIjogIm9iamVjdCIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiRGF0YWJhc2UgZXJy
b3IuIiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWworICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAibWVzc2FnZSIsICJ0eXBlIjogInN0cmluZyIsICJkZXNjcmlwdGlvbiI6ICJFcnJvciBt
ZXNzYWdlLiIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvZGUiLCAidHlwZSI6ICJp
bnRlZ2VyIiwgImRlc2NyaXB0aW9uIjogIkVycm9yIGNvZGUuIiB9CisgICAgICAgICAgICBdCisg
ICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJPcHRpb25hbFBhcmFtZXRl
ckJ1bmRsZSIsCisgICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAorICAgICAgICAgICAgInBy
b3BlcnRpZXMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0
eXBlIjogImFycmF5IiwgIm9wdGlvbmFsIjogdHJ1ZSwgIml0ZW1zIjogeyAidHlwZSI6ICJzdHJp
bmciIH0gfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm5vdGVzIiwgInR5cGUiOiAic3Ry
aW5nIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidGlt
ZXN0YW1wIiwgInR5cGUiOiAibnVtYmVyIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAidmFsdWVzIiwgInR5cGUiOiAib2JqZWN0IiwgIm9wdGlvbmFsIjog
dHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicGF5bG9hZCIsICJ0eXBlIjogImFu
eSIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImVycm9y
IiwgIiRyZWYiOiAiRXJyb3IiLCAib3B0aW9uYWwiOiB0cnVlIH0KKyAgICAgICAgICAgIF0KKyAg
ICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIlBhcmFtZXRlckJ1bmRsZSIs
CisgICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAorICAgICAgICAgICAgInByb3BlcnRpZXMi
OiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogImFy
cmF5IiwgIml0ZW1zIjogeyAidHlwZSI6ICJzdHJpbmciIH0gfSwKKyAgICAgICAgICAgICAgICB7
ICJuYW1lIjogIm5vdGVzIiwgInR5cGUiOiAic3RyaW5nIiB9LAorICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAidGltZXN0YW1wIiwgInR5cGUiOiAibnVtYmVyIiB9LAorICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAidmFsdWVzIiwgInR5cGUiOiAib2JqZWN0IiB9LAorICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAicGF5bG9hZCIsICJ0eXBlIjogImFueSIgfSwKKyAgICAgICAgICAgICAgICB7
ICJuYW1lIjogImVycm9yIiwgIiRyZWYiOiAiRXJyb3IiIH0KKyAgICAgICAgICAgIF0KKyAgICAg
ICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIk9iamVjdFdpdGhQcm9wZXJ0eU5h
bWVDb25mbGljdHMiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkNvbmZsaWN0ZWQgbmFt
ZXMgbWF5IGNhdXNlIGdlbmVyYXRlZCBnZXR0ZXJzL3NldHRlcnMgdG8gY2xhc2ggd2l0aCBidWls
dC1pbiBJbnNwZWN0b3JPYmplY3QgbWV0aG9kcy4iLAorICAgICAgICAgICAgInR5cGUiOiAib2Jq
ZWN0IiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWworICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAiaW50ZWdlciIsICJ0eXBlIjogInN0cmluZyIgfSwKKyAgICAgICAgICAgICAgICB7ICJu
YW1lIjogImFycmF5IiwgInR5cGUiOiAic3RyaW5nIiB9LAorICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAic3RyaW5nIiwgInR5cGUiOiAic3RyaW5nIiB9LAorICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAidmFsdWUiLCAidHlwZSI6ICJzdHJpbmciIH0sCisgICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJvYmplY3QiLCAidHlwZSI6ICJzdHJpbmciIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAg
fSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIkR1bW15T2JqZWN0IiwKKyAgICAgICAg
ICAgICJkZXNjcmlwdGlvbiI6ICJBbiBvcGVuIG9iamVjdCB0aGF0IGRvZXNuJ3QgaGF2ZSBhbnkg
cHJlZGVmaW5lZCBmaWVsZHMuIiwKKyAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIKKyAgICAg
ICAgfQorICAgIF0KK30sCit7CisgICAgImRvbWFpbiI6ICJUZXN0IiwKKyAgICAiZGVzY3JpcHRp
b24iOiAiVGVzdCB0aGUgZ2VuZXJhdGlvbiBvZiBzcGVjaWFsIGJlaGF2aW9ycyB0aGF0IG9ubHkg
YXBwbHkgdG8gc3BlY2lmaWMgY2xhc3Nlcy4iLAorICAgICJ0eXBlcyI6IFsKKyAgICAgICAgewor
ICAgICAgICAgICAgImlkIjogIlVucGxlYXNhbnROYW1lIiwKKyAgICAgICAgICAgICJkZXNjcmlw
dGlvbiI6ICJUaGlzIHR5cGUgc2hvdWxkIGJlIHJlbmFtZWQgdG8gSGFwcHlOYW1lIiwKKyAgICAg
ICAgICAgICJ0eXBlIjogIm9iamVjdCIsCisgICAgICAgICAgICAibWVtYmVycyI6IFsKKyAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogIm5vdGVzIiwgInR5cGUiOiAic3RyaW5nIiB9LAorICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAidGltZXN0YW1wIiwgInR5cGUiOiAibnVtYmVyIiB9LAorICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAidmFsdWVzIiwgInR5cGUiOiAib2JqZWN0IiB9CisgICAg
ICAgICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJQYXJh
bWV0ZXJCdW5kbGUiLAorICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKKyAgICAgICAgICAg
ICJwcm9wZXJ0aWVzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29sdW1uTmFtZXMi
LCAidHlwZSI6ICJhcnJheSIsICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9IH0sCisgICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJub3RlcyIsICJ0eXBlIjogInN0cmluZyIgfSwKKyAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogInRpbWVzdGFtcCIsICJ0eXBlIjogIm51bWJlciIgfSwKKyAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogInZhbHVlcyIsICJ0eXBlIjogIm9iamVjdCIgfSwKKyAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogInBheWxvYWQiLCAidHlwZSI6ICJhbnkiIH0sCisgICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJlcnJvciIsICIkcmVmIjogIkRhdGFiYXNlLkVycm9yIiB9
CisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdLAorICAgICJjb21tYW5kcyI6IFsKKyAg
ICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiYXR0ZW1wdEN1cnNlIiwKKyAgICAgICAgICAg
ICJwYXJhbWV0ZXJzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY3Vyc2UiLCAiJHJl
ZiI6ICJVbnBsZWFzYW50TmFtZSIgfQorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICJyZXR1
cm5zIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY2Vuc29yZWRDdXJzZSIsICJ0eXBl
IjogInN0cmluZyIsICJvcHRpb25hbCI6IHRydWUgfQorICAgICAgICAgICAgXQorICAgICAgICB9
CisgICAgXQorfQorXQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL3R5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbiBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy90eXBlLXJlcXVpcmluZy1y
dW50aW1lLWNhc3RzLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODNkOTRiZTg5N2QyMmNjMDU4YmI2NDZmZWNk
OWE0NzMwMzdiNmI5MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy90eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24K
QEAgLTAsMCArMSw1MSBAQAorWworeworICAgICJkb21haW4iOiAiVGVzdCIsCisgICAgInR5cGVz
IjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiVHlwZU5lZWRpbmdDYXN0IiwKKyAg
ICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAi
QSBkdW1teSB0eXBlIHRoYXQgcmVxdWlyZXMgcnVudGltZSBjYXN0cywgYW5kIGZvcmNlcyBub24t
cHJpbWl0aXZlIHJlZmVyZW5jZWQgdHlwZXMgdG8gYWxzbyBlbWl0IHJ1bnRpbWUgY2FzdCBoZWxw
ZXJzLiIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IFsKKyAgICAgICAgICAgICAgICB7ICJu
YW1lIjogInN0cmluZyIsICJ0eXBlIjogInN0cmluZyIsICJkZXNjcmlwdGlvbiI6ICJTdHJpbmcg
bWVtYmVyLiIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm51bWJlciIsICJ0eXBlIjog
ImludGVnZXIiLCAiZGVzY3JpcHRpb24iOiAiTnVtYmVyIG1lbWJlci4iIH0sCisgICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJhbmltYWxzIiwgIiRyZWYiOiAiQ2FzdGVkQW5pbWFscyIsICJkZXNj
cmlwdGlvbiI6ICJFbnVtIG1lbWJlci4iIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJp
ZCIsICIkcmVmIjogIkNhc3RlZE9iamVjdElkIiwgImRlc2NyaXB0aW9uIjogIkFsaWFzZWQgbWVt
YmVyLiIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInRyZWUiLCAiJHJlZiI6ICJSZWN1
cnNpdmVPYmplY3QxIiwgImRlc2NyaXB0aW9uIjogIlJlY3Vyc2l2ZSBvYmplY3QgbWVtYmVyLiIg
fQorICAgICAgICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQi
OiAiQ2FzdGVkT2JqZWN0SWQiLAorICAgICAgICAgICAgInR5cGUiOiAiaW50ZWdlciIKKyAgICAg
ICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIlVuY2FzdGVkT2JqZWN0SWQiLAor
ICAgICAgICAgICAgInR5cGUiOiAiaW50ZWdlciIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAg
ICAgICAgICAgImlkIjogIlVuY2FzdGVkQW5pbWFscyIsCisgICAgICAgICAgICAidHlwZSI6ICJz
dHJpbmciLAorICAgICAgICAgICAgImVudW0iOiBbIlBpZ3MiLCAiQ293cyIsICJDYXRzIiwgIkhl
bnMiXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiQ2FzdGVkQW5p
bWFscyIsCisgICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAorICAgICAgICAgICAgImVudW0i
OiBbIkR1Y2tzIiwgIkhlbnMiLCAiQ3Jvd3MiLCAiRmxhbWluZ29zIl0KKyAgICAgICAgfSwKKyAg
ICAgICAgeworICAgICAgICAgICAgImlkIjogIlJlY3Vyc2l2ZU9iamVjdDEiLAorICAgICAgICAg
ICAgInR5cGUiOiAib2JqZWN0IiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWworICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAib2JqIiwgIiRyZWYiOiAiUmVjdXJzaXZlT2JqZWN0MiIsICJv
cHRpb25hbCI6IHRydWUgfQorICAgICAgICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7Cisg
ICAgICAgICAgICAiaWQiOiAiUmVjdXJzaXZlT2JqZWN0MiIsCisgICAgICAgICAgICAidHlwZSI6
ICJvYmplY3QiLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCisgICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJvYmoiLCAiJHJlZiI6ICJSZWN1cnNpdmVPYmplY3QxIiwgIm9wdGlvbmFsIjog
dHJ1ZSB9CisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdCit9CitdCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlz
dHMudHh0CmluZGV4IGY1NmYwZWQwN2M2NTExODQ0OTM4Yzc2YWQ4NjRiZmRkYzMyYWI2NDcuLmNl
MTU4MWRkOTU5MjI5YWJiMTg3ZGRkZWJiZTBiYTBkYzE3ZjcyNTggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMu
dHh0CkBAIC03ODcsNiArNzg3LDIxIEBAIHNldChXZWJDb3JlX0lETF9GSUxFUwogCiBzZXQoV2Vi
Q29yZV9JTlNQRUNUT1JfU0NSSVBUU19ESVIgIiR7SkFWQVNDUklQVENPUkVfRElSfS9pbnNwZWN0
b3Ivc2NyaXB0cyIpCiAKK3NldChXZWJDb3JlX0lOU1BFQ1RPUl9QUk9UT0NPTF9TQ1JJUFRTCisg
ICAgJHtXZWJDb3JlX0lOU1BFQ1RPUl9TQ1JJUFRTX0RJUn0vZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5CisgICAgJHtXZWJDb3JlX0lOU1BFQ1RPUl9TQ1JJUFRTX0RJUn0v
Y29kZWdlbi9nZW5lcmF0ZV9iYWNrZW5kX2NvbW1hbmRzLnB5CisgICAgJHtXZWJDb3JlX0lOU1BF
Q1RPUl9TQ1JJUFRTX0RJUn0vY29kZWdlbi9nZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVh
ZGVyLnB5CisgICAgJHtXZWJDb3JlX0lOU1BFQ1RPUl9TQ1JJUFRTX0RJUn0vY29kZWdlbi9nZW5l
cmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkKKyAgICAke1dlYkNvcmVf
SU5TUEVDVE9SX1NDUklQVFNfRElSfS9jb2RlZ2VuL2dlbmVyYXRlX2Zyb250ZW5kX2Rpc3BhdGNo
ZXJfaGVhZGVyLnB5CisgICAgJHtXZWJDb3JlX0lOU1BFQ1RPUl9TQ1JJUFRTX0RJUn0vY29kZWdl
bi9nZW5lcmF0ZV9mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5CisgICAgJHtX
ZWJDb3JlX0lOU1BFQ1RPUl9TQ1JJUFRTX0RJUn0vY29kZWdlbi9nZW5lcmF0ZV90eXBlX2J1aWxk
ZXJfaGVhZGVyLnB5CisgICAgJHtXZWJDb3JlX0lOU1BFQ1RPUl9TQ1JJUFRTX0RJUn0vY29kZWdl
bi9nZW5lcmF0ZV90eXBlX2J1aWxkZXJfaW1wbGVtZW50YXRpb24ucHkKKyAgICAke1dlYkNvcmVf
SU5TUEVDVE9SX1NDUklQVFNfRElSfS9jb2RlZ2VuL2dlbmVyYXRvci5weQorICAgICR7V2ViQ29y
ZV9JTlNQRUNUT1JfU0NSSVBUU19ESVJ9L2NvZGVnZW4vZ2VuZXJhdG9yX3RlbXBsYXRlcy5weQor
ICAgICR7V2ViQ29yZV9JTlNQRUNUT1JfU0NSSVBUU19ESVJ9L2NvZGVnZW4vX19pbml0X18ucHkK
KyAgICAke1dlYkNvcmVfSU5TUEVDVE9SX1NDUklQVFNfRElSfS9jb2RlZ2VuL21vZGVscy5weQor
KQorCiBzZXQoV2ViQ29yZV9JTlNQRUNUT1JfRE9NQUlOUwogICAgICR7V0VCQ09SRV9ESVJ9L2lu
c3BlY3Rvci9wcm90b2NvbC9BcHBsaWNhdGlvbkNhY2hlLmpzb24KICAgICAke1dFQkNPUkVfRElS
fS9pbnNwZWN0b3IvcHJvdG9jb2wvQ1NTLmpzb24KQEAgLTMyNjQsNyArMzI3OSw3IEBAIGFkZF9j
dXN0b21fY29tbWFuZCgKICAgICBDT01NQU5EICR7UFlUSE9OX0VYRUNVVEFCTEV9ICR7V2ViQ29y
ZV9JTlNQRUNUT1JfU0NSSVBUU19ESVJ9L2dlbmVyYXRlLWNvbWJpbmVkLWluc3BlY3Rvci1qc29u
LnB5ICR7V2ViQ29yZV9JTlNQRUNUT1JfRE9NQUlOU30gPiAke0RFUklWRURfU09VUkNFU19XRUJD
T1JFX0RJUn0vSW5zcGVjdG9yV2ViLmpzb24KICAgICBWRVJCQVRJTSkKIAotIyBBbGwgV2ViIElu
c3BlY3RvciBnZW5lcmF0ZWQgZmlsZXMgYXJlIGNyZWF0ZWQgd2l0aCB0aGlzIG9uZSBjYWxsIHRv
IENvZGVHZW5lcmF0b3JJbnNwZWN0b3IucG0KKyMgQWxsIFdlYiBJbnNwZWN0b3IgZ2VuZXJhdGVk
IGZpbGVzIGFyZSBjcmVhdGVkIHdpdGggdGhpcyBvbmUgY2FsbCB0byBnZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKIGFkZF9jdXN0b21fY29tbWFuZCgKICAgICBPVVRQVVQg
JHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L0luc3BlY3RvcldlYkJhY2tlbmREaXNwYXRj
aGVycy5jcHAKICAgICAgICAgICAgJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L0luc3Bl
Y3RvcldlYkJhY2tlbmREaXNwYXRjaGVycy5oCkBAIC0zMjc0LDExICszMjg5LDkgQEAgYWRkX2N1
c3RvbV9jb21tYW5kKAogICAgICAgICAgICAke0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0v
SW5zcGVjdG9yV2ViVHlwZUJ1aWxkZXJzLmgKICAgICAgICAgICAgJHtERVJJVkVEX1NPVVJDRVNf
V0VCSU5TUEVDVE9SVUlfRElSfS9Vc2VySW50ZXJmYWNlL1Byb3RvY29sL0luc3BlY3RvcldlYkJh
Y2tlbmRDb21tYW5kcy5qcwogICAgIE1BSU5fREVQRU5ERU5DWSAke0RFUklWRURfU09VUkNFU19X
RUJDT1JFX0RJUn0vSW5zcGVjdG9yV2ViLmpzb24KLSAgICBERVBFTkRTICR7V2ViQ29yZV9JTlNQ
RUNUT1JfU0NSSVBUU19ESVJ9L0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKLSAgICAgICAgICAg
ICR7V2ViQ29yZV9JTlNQRUNUT1JfU0NSSVBUU19ESVJ9L0NvZGVHZW5lcmF0b3JJbnNwZWN0b3JT
dHJpbmdzLnB5CisgICAgREVQRU5EUyAke1dlYkNvcmVfSU5TUEVDVE9SX1BST1RPQ09MX1NDUklQ
VFN9CiAgICAgICAgICAgICAke0RFUklWRURfU09VUkNFU19KQVZBU0NSSVBUQ09SRV9ESVJ9L0lu
c3BlY3RvckpTLmpzb24KLSAgICAgICAgICAgICR7REVSSVZFRF9TT1VSQ0VTX0pBVkFTQ1JJUFRD
T1JFX0RJUn0vaW5zcGVjdG9yL0luc3BlY3RvckpTVHlwZUJ1aWxkZXJzLmgKLSAgICBDT01NQU5E
ICR7UFlUSE9OX0VYRUNVVEFCTEV9ICR7V2ViQ29yZV9JTlNQRUNUT1JfU0NSSVBUU19ESVJ9L0Nv
ZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkgJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L0lu
c3BlY3RvcldlYi5qc29uICR7REVSSVZFRF9TT1VSQ0VTX0pBVkFTQ1JJUFRDT1JFX0RJUn0vSW5z
cGVjdG9ySlMuanNvbiAtLW91dHB1dF9oX2RpciAiJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9E
SVJ9IiAtLW91dHB1dF9jcHBfZGlyICIke0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0iIC0t
b3V0cHV0X2pzX2RpciAiJHtERVJJVkVEX1NPVVJDRVNfV0VCSU5TUEVDVE9SVUlfRElSfS9Vc2Vy
SW50ZXJmYWNlL1Byb3RvY29sIiAtLW91dHB1dF90eXBlIFdlYiAtLXdyaXRlX2Fsd2F5cworICAg
IENPTU1BTkQgJHtQWVRIT05fRVhFQ1VUQUJMRX0gJHtXZWJDb3JlX0lOU1BFQ1RPUl9TQ1JJUFRT
X0RJUn0vZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5IC0tb3V0cHV0RGly
ICIke0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0iIC0tZnJhbWV3b3JrIFdlYkNvcmUgJHtE
RVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L0luc3BlY3RvcldlYi5qc29uICR7REVSSVZFRF9T
T1VSQ0VTX0pBVkFTQ1JJUFRDT1JFX0RJUn0vSW5zcGVjdG9ySlMuanNvbiAmJiBjcCAke0RFUklW
RURfU09VUkNFU19XRUJDT1JFX0RJUn0vSW5zcGVjdG9yV2ViQmFja2VuZENvbW1hbmRzLmpzICR7
REVSSVZFRF9TT1VSQ0VTX1dFQklOU1BFQ1RPUlVJX0RJUn0vVXNlckludGVyZmFjZS9Qcm90b2Nv
bAogICAgIFZFUkJBVElNKQogCiBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UgYi9Tb3VyY2UvV2ViQ29yZS9E
ZXJpdmVkU291cmNlcy5tYWtlCmluZGV4IGU0MTc1YTg5N2UzZGRmYWQ4ZDMyOGM4NzQ2NmU5ZWZj
MjJmOTFkMjguLmE5Y2Y2YzIxZWEyM2ZlNWExYjFmNjdmYjVmNGYzNjk4OTU1ZTNmNDggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKKysrIGIvU291cmNlL1dl
YkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQpAQCAtMTE1MSw4ICsxMTUxLDE4IEBAIGlmZXEgKCQo
ZmluZHN0cmluZyBFTkFCTEVfV0VCX1JFUExBWSwkKEZFQVRVUkVfREVGSU5FUykpLCBFTkFCTEVf
V0VCX1JFUExBWSkKIGVuZGlmCiAKIElOU1BFQ1RPUl9HRU5FUkFUT1JfU0NSSVBUUyA9IFwKLQkk
KEluc3BlY3RvclNjcmlwdHMpL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkgXAotCSQoSW5zcGVj
dG9yU2NyaXB0cykvQ29kZUdlbmVyYXRvckluc3BlY3RvclN0cmluZ3MucHkgXAorICAgICQoSW5z
cGVjdG9yU2NyaXB0cykvZ2VuZXJhdGVfYmFja2VuZF9jb21tYW5kcy5weSBcCisgICAgJChJbnNw
ZWN0b3JTY3JpcHRzKS9nZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5IFwKKyAg
ICAkKEluc3BlY3RvclNjcmlwdHMpL2dlbmVyYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1l
bnRhdGlvbi5weSBcCisgICAgJChJbnNwZWN0b3JTY3JpcHRzKS9nZW5lcmF0ZV9mcm9udGVuZF9k
aXNwYXRjaGVyX2hlYWRlci5weSBcCisgICAgJChJbnNwZWN0b3JTY3JpcHRzKS9nZW5lcmF0ZV9m
cm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5IFwKKyAgICAkKEluc3BlY3RvclNj
cmlwdHMpL2dlbmVyYXRlX3R5cGVfYnVpbGRlcl9oZWFkZXIucHkgXAorICAgICQoSW5zcGVjdG9y
U2NyaXB0cykvZ2VuZXJhdGVfdHlwZV9idWlsZGVyX2ltcGxlbWVudGF0aW9uLnB5IFwKKyAgICAk
KEluc3BlY3RvclNjcmlwdHMpL2dlbmVyYXRvcl90ZW1wbGF0ZXMucHkgXAorICAgICQoSW5zcGVj
dG9yU2NyaXB0cykvZ2VuZXJhdG9yLnB5IFwKKyAgICAkKEluc3BlY3RvclNjcmlwdHMpL2dlbmVy
YXRlLWNvbWJpbmVkLWluc3BlY3Rvci1qc29uLnB5IFwKKyAgICAkKEluc3BlY3RvclNjcmlwdHMp
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weSBcCisgICAgJChJbnNwZWN0
b3JTY3JpcHRzKS9tb2RlbHMucHkgXAogIwogCiBhbGwgOiBJbnNwZWN0b3JXZWIuanNvbgpAQCAt
MTE3MCw3ICsxMTgwLDcgQEAgSW5zcGVjdG9yV2ViLmpzb24gOiAkKEluc3BlY3RvclNjcmlwdHMp
L2dlbmVyYXRlLWNvbWJpbmVkLWluc3BlY3Rvci1qc29uLnB5ICQoSU4KIGFsbCA6IEluc3BlY3Rv
cldlYkZyb250ZW5kRGlzcGF0Y2hlcnMuaAogCiBJbnNwZWN0b3JXZWJGcm9udGVuZERpc3BhdGNo
ZXJzLmggOiBJbnNwZWN0b3JXZWIuanNvbiAkKEluc3BlY3RvclNjcmlwdHMpL0luc3BlY3RvckpT
Lmpzb24gJChJTlNQRUNUT1JfR0VORVJBVE9SX1NDUklQVFMpCi0JJChQWVRIT04pICQoSW5zcGVj
dG9yU2NyaXB0cykvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weSAuL0luc3BlY3RvcldlYi5qc29u
ICQoSW5zcGVjdG9yU2NyaXB0cykvSW5zcGVjdG9ySlMuanNvbiAtLW91dHB1dF9oX2RpciAuIC0t
b3V0cHV0X2NwcF9kaXIgLiAtLW91dHB1dF9qc19kaXIgLiAtLW91dHB1dF90eXBlIFdlYgorCSQo
UFlUSE9OKSAkKEluc3BlY3RvclNjcmlwdHMpL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weSAtLWZyYW1ld29yayBXZWJDb3JlIC0tb3V0cHV0RGlyIC4gLi9JbnNwZWN0b3JX
ZWIuanNvbiAkKEluc3BlY3RvclNjcmlwdHMpL0luc3BlY3RvckpTLmpzb24KIAogYWxsIDogSW5z
cGVjdG9yT3ZlcmxheVBhZ2UuaAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvQ29tbWFuZExpbmVBUElIb3N0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db21t
YW5kTGluZUFQSUhvc3QuY3BwCmluZGV4IDU3YjkyMWFlZDljZDRhZDUzZTk1YjE0Y2IxYzkzNmQ2
NGExMGU0ODEuLmI2OGI0Y2U5ZDI5Yjc5MGEzMjljZjIyODRhMzZiNTY2Y2RiOTJjMGUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db21tYW5kTGluZUFQSUhvc3QuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db21tYW5kTGluZUFQSUhvc3QuY3BwCkBAIC05
NSw3ICs5NSw3IEBAIHZvaWQgQ29tbWFuZExpbmVBUElIb3N0OjpkaXNjb25uZWN0KCkKIHZvaWQg
Q29tbWFuZExpbmVBUElIb3N0OjppbnNwZWN0SW1wbChQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVl
PiBvYmplY3QsIFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IGhpbnRzKQogewogICAgIGlmICht
X2luc3BlY3RvckFnZW50KSB7Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVy
OjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+IHJlbW90ZU9iamVjdCA9IEluc3BlY3Rvcjo6VHlwZUJ1
aWxkZXI6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdDo6cnVudGltZUNhc3Qob2JqZWN0KTsKKyAgICAg
ICAgUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4g
cmVtb3RlT2JqZWN0ID0gQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpSdW50
aW1lOjpSZW1vdGVPYmplY3Q+OjpydW50aW1lQ2FzdChvYmplY3QpOwogICAgICAgICBtX2luc3Bl
Y3RvckFnZW50LT5pbnNwZWN0KHJlbW90ZU9iamVjdCwgaGludHMtPmFzT2JqZWN0KCkpOwogICAg
IH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NB
Z2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3Bw
CmluZGV4IDMwNWE5OTU0ZGYxYTk3ZjFjMGMwNzFkODRmNzQ5MTBhYTAwZDZmOGMuLjE2OWQzN2Ni
MmUyNzRlNjFlYjAxMmY0MjcxMTA5ODliZTllMTQzMDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNwcApAQCAtMTAwMCw5ICsxMDAwLDkgQEAgSW5z
cGVjdG9yU3R5bGVTaGVldCogSW5zcGVjdG9yQ1NTQWdlbnQ6OmFzc2VydFN0eWxlU2hlZXRGb3JJ
ZChFcnJvclN0cmluZyogZXJyb3IKICAgICByZXR1cm4gaXQtPnZhbHVlLmdldCgpOwogfQogCi1J
bnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW46OkVudW0gSW5zcGVj
dG9yQ1NTQWdlbnQ6OmRldGVjdE9yaWdpbihDU1NTdHlsZVNoZWV0KiBwYWdlU3R5bGVTaGVldCwg
RG9jdW1lbnQqIG93bmVyRG9jdW1lbnQpCitJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDU1M6OlN0
eWxlU2hlZXRPcmlnaW4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmRldGVjdE9yaWdpbihDU1NTdHlsZVNo
ZWV0KiBwYWdlU3R5bGVTaGVldCwgRG9jdW1lbnQqIG93bmVyRG9jdW1lbnQpCiB7Ci0gICAgSW5z
cGVjdG9yOjpUeXBlQnVpbGRlcjo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luOjpFbnVtIG9yaWdpbiA9
IEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6UmVndWxhcjsK
KyAgICBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW4gb3JpZ2lu
ID0gSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luOjpSZWd1bGFy
OwogICAgIGlmIChwYWdlU3R5bGVTaGVldCAmJiAhcGFnZVN0eWxlU2hlZXQtPm93bmVyTm9kZSgp
ICYmIHBhZ2VTdHlsZVNoZWV0LT5ocmVmKCkuaXNFbXB0eSgpKQogICAgICAgICBvcmlnaW4gPSBJ
bnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW46OlVzZXJBZ2VudDsK
ICAgICBlbHNlIGlmIChwYWdlU3R5bGVTaGVldCAmJiBwYWdlU3R5bGVTaGVldC0+b3duZXJOb2Rl
KCkgJiYgcGFnZVN0eWxlU2hlZXQtPm93bmVyTm9kZSgpLT5ub2RlTmFtZSgpID09ICIjZG9jdW1l
bnQiKQpAQCAtMTEwNiw3ICsxMTA2LDcgQEAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWls
ZGVyOjpBcnJheTxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDU1M6OlJlZ2lvbj4+IEkKICAgICBS
ZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk8SW5zcGVjdG9yOjpUeXBlQnVpbGRl
cjo6Q1NTOjpSZWdpb24+PiByZWdpb25zID0gSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk8
SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q1NTOjpSZWdpb24+OjpjcmVhdGUoKTsKIAogICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCByZWdpb25MaXN0LT5sZW5ndGgoKTsgKytpKSB7Ci0gICAg
ICAgIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNTUzo6UmVnaW9uOjpSZWdpb25PdmVyc2V0OjpF
bnVtIHJlZ2lvbk92ZXJzZXQ7CisgICAgICAgIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNTUzo6
UmVnaW9uOjpSZWdpb25PdmVyc2V0IHJlZ2lvbk92ZXJzZXQ7CiAKICAgICAgICAgc3dpdGNoICh0
b0VsZW1lbnQocmVnaW9uTGlzdC0+aXRlbShpKSktPnJlZ2lvbk92ZXJzZXRTdGF0ZSgpKSB7CiAg
ICAgICAgIGNhc2UgUmVnaW9uRml0OgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckNTU0FnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yQ1NTQWdlbnQuaAppbmRleCAzNjUyMzdmMDM2YTZjZjZiYmUxYTVmNTMzNzRiNzVjZTUyNjA3
OGYyLi4xNzU1ZDcyMGMzMTVlMmVkOGMxZGE2MDRmMjA1ZjZiYmRlOWQwMTVlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuaApAQCAtMTQ5LDcgKzE0OSw3
IEBAIHByaXZhdGU6CiAgICAgSW5zcGVjdG9yU3R5bGVTaGVldCogYmluZFN0eWxlU2hlZXQoQ1NT
U3R5bGVTaGVldCopOwogICAgIEluc3BlY3RvclN0eWxlU2hlZXQqIHZpYUluc3BlY3RvclN0eWxl
U2hlZXQoRG9jdW1lbnQqLCBib29sIGNyZWF0ZUlmQWJzZW50KTsKICAgICBJbnNwZWN0b3JTdHls
ZVNoZWV0KiBhc3NlcnRTdHlsZVNoZWV0Rm9ySWQoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcm
KTsKLSAgICBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW46OkVu
dW0gZGV0ZWN0T3JpZ2luKENTU1N0eWxlU2hlZXQqIHBhZ2VTdHlsZVNoZWV0LCBEb2N1bWVudCog
b3duZXJEb2N1bWVudCk7CisgICAgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q1NTOjpTdHlsZVNo
ZWV0T3JpZ2luIGRldGVjdE9yaWdpbihDU1NTdHlsZVNoZWV0KiBwYWdlU3R5bGVTaGVldCwgRG9j
dW1lbnQqIG93bmVyRG9jdW1lbnQpOwogCiAgICAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlR5cGVC
dWlsZGVyOjpDU1M6OkNTU1J1bGU+IGJ1aWxkT2JqZWN0Rm9yUnVsZShTdHlsZVJ1bGUqLCBTdHls
ZVJlc29sdmVyJik7CiAgICAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDU1M6
OkNTU1J1bGU+IGJ1aWxkT2JqZWN0Rm9yUnVsZShDU1NTdHlsZVJ1bGUqKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCmluZGV4IGFmZWVlOTQzNzE0
M2ViYTgyYTExZGFjODFjYjhkZWJhNWE3MGU1NGEuLmIyY2I0YzY0MGQ2NWVmNTQzNTgzNmZmZjU3
ZTNlNDNjNzA3ZjYxYzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JET01BZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckRPTUFnZW50LmNwcApAQCAtMTQ0NSw3ICsxNDQ1LDcgQEAgUGFzc1JlZlB0cjxUeXBlQnVpbGRl
cjo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllcz4gSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxk
T2IKIAogICAgIE5vZGUqIGFjdGl2ZURlc2NlbmRhbnROb2RlID0gbnVsbHB0cjsKICAgICBib29s
IGJ1c3kgPSBmYWxzZTsKLSAgICBUeXBlQnVpbGRlcjo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVy
dGllczo6Q2hlY2tlZDo6RW51bSBjaGVja2VkID0gVHlwZUJ1aWxkZXI6OkRPTTo6QWNjZXNzaWJp
bGl0eVByb3BlcnRpZXM6OkNoZWNrZWQ6OkZhbHNlOworICAgIFR5cGVCdWlsZGVyOjpET006OkFj
Y2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpDaGVja2VkIGNoZWNrZWQgPSBUeXBlQnVpbGRlcjo6RE9N
OjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6Q2hlY2tlZDo6RmFsc2U7CiAgICAgUmVmUHRyPElu
c3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5PGludD4+IGNoaWxkTm9kZUlkczsKICAgICBSZWZQ
dHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk8aW50Pj4gY29udHJvbGxlZE5vZGVJZHM7
CiAgICAgYm9vbCBleGlzdHMgPSBmYWxzZTsKQEAgLTE0NTUsMTIgKzE0NTUsMTIgQEAgUGFzc1Jl
ZlB0cjxUeXBlQnVpbGRlcjo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllcz4gSW5zcGVjdG9y
RE9NQWdlbnQ6OmJ1aWxkT2IKICAgICBib29sIGZvY3VzZWQgPSBmYWxzZTsKICAgICBib29sIGln
bm9yZWQgPSB0cnVlOwogICAgIGJvb2wgaWdub3JlZEJ5RGVmYXVsdCA9IGZhbHNlOwotICAgIFR5
cGVCdWlsZGVyOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpJbnZhbGlkOjpFbnVtIGlu
dmFsaWQgPSBUeXBlQnVpbGRlcjo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6SW52YWxp
ZDo6RmFsc2U7CisgICAgVHlwZUJ1aWxkZXI6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6
OkludmFsaWQgaW52YWxpZCA9IFR5cGVCdWlsZGVyOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0
aWVzOjpJbnZhbGlkOjpGYWxzZTsKICAgICBib29sIGhpZGRlbiA9IGZhbHNlOwogICAgIFN0cmlu
ZyBsYWJlbDsKICAgICBib29sIGxpdmVSZWdpb25BdG9taWMgPSBmYWxzZTsKICAgICBSZWZQdHI8
SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk8U3RyaW5nPj4gbGl2ZVJlZ2lvblJlbGV2YW50
OwotICAgIFR5cGVCdWlsZGVyOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpMaXZlUmVn
aW9uU3RhdHVzOjpFbnVtIGxpdmVSZWdpb25TdGF0dXMgPSBUeXBlQnVpbGRlcjo6RE9NOjpBY2Nl
c3NpYmlsaXR5UHJvcGVydGllczo6TGl2ZVJlZ2lvblN0YXR1czo6T2ZmOworICAgIFR5cGVCdWls
ZGVyOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpMaXZlUmVnaW9uU3RhdHVzIGxpdmVS
ZWdpb25TdGF0dXMgPSBUeXBlQnVpbGRlcjo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6
TGl2ZVJlZ2lvblN0YXR1czo6T2ZmOwogICAgIE5vZGUqIG1vdXNlRXZlbnROb2RlID0gbnVsbHB0
cjsKICAgICBSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk8aW50Pj4gb3duZWRO
b2RlSWRzOwogICAgIE5vZGUqIHBhcmVudE5vZGUgPSBudWxscHRyOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcAppbmRleCA0NWJmMGVlZTg0NmY3
NzA5ZWQ0MmUyNzRmZDExN2Y5NjQ4MjQxOGRlLi4yOGJiOTE5N2Y3YzBmMDExYzA4YzllMTRmOWZj
YTA2ODYyYTg0YjE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yUGFnZUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
UGFnZUFnZW50LmNwcApAQCAtMjg3LDcgKzI4Nyw3IEBAIENhY2hlZFJlc291cmNlKiBJbnNwZWN0
b3JQYWdlQWdlbnQ6OmNhY2hlZFJlc291cmNlKEZyYW1lKiBmcmFtZSwgY29uc3QgVVJMJiB1cmwp
CiAgICAgcmV0dXJuIGNhY2hlZFJlc291cmNlOwogfQogCi1JbnNwZWN0b3I6OlR5cGVCdWlsZGVy
OjpQYWdlOjpSZXNvdXJjZVR5cGU6OkVudW0gSW5zcGVjdG9yUGFnZUFnZW50OjpyZXNvdXJjZVR5
cGVKc29uKEluc3BlY3RvclBhZ2VBZ2VudDo6UmVzb3VyY2VUeXBlIHJlc291cmNlVHlwZSkKK0lu
c3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlBhZ2U6OlJlc291cmNlVHlwZSBJbnNwZWN0b3JQYWdlQWdl
bnQ6OnJlc291cmNlVHlwZUpzb24oSW5zcGVjdG9yUGFnZUFnZW50OjpSZXNvdXJjZVR5cGUgcmVz
b3VyY2VUeXBlKQogewogICAgIHN3aXRjaCAocmVzb3VyY2VUeXBlKSB7CiAgICAgY2FzZSBEb2N1
bWVudFJlc291cmNlOgpAQCAtMzM1LDcgKzMzNSw3IEBAIEluc3BlY3RvclBhZ2VBZ2VudDo6UmVz
b3VyY2VUeXBlIEluc3BlY3RvclBhZ2VBZ2VudDo6Y2FjaGVkUmVzb3VyY2VUeXBlKGNvbnN0IENh
CiAgICAgcmV0dXJuIEluc3BlY3RvclBhZ2VBZ2VudDo6T3RoZXJSZXNvdXJjZTsKIH0KIAotSW5z
cGVjdG9yOjpUeXBlQnVpbGRlcjo6UGFnZTo6UmVzb3VyY2VUeXBlOjpFbnVtIEluc3BlY3RvclBh
Z2VBZ2VudDo6Y2FjaGVkUmVzb3VyY2VUeXBlSnNvbihjb25zdCBDYWNoZWRSZXNvdXJjZSYgY2Fj
aGVkUmVzb3VyY2UpCitJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpQYWdlOjpSZXNvdXJjZVR5cGUg
SW5zcGVjdG9yUGFnZUFnZW50OjpjYWNoZWRSZXNvdXJjZVR5cGVKc29uKGNvbnN0IENhY2hlZFJl
c291cmNlJiBjYWNoZWRSZXNvdXJjZSkKIHsKICAgICByZXR1cm4gcmVzb3VyY2VUeXBlSnNvbihj
YWNoZWRSZXNvdXJjZVR5cGUoY2FjaGVkUmVzb3VyY2UpKTsKIH0KQEAgLTcwNiw3ICs3MDYsNyBA
QCB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6c2V0Q29udGludW91c1BhaW50aW5nRW5hYmxlZChF
cnJvclN0cmluZyosIGJvb2wgZW5hYmxlZAogICAgICAgICBtYWluRnJhbWUoKS0+dmlldygpLT5p
bnZhbGlkYXRlKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpnZXRTY3JpcHRFeGVj
dXRpb25TdGF0dXMoRXJyb3JTdHJpbmcqLCBJbnNwZWN0b3JQYWdlQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyOjpSZXN1bHQ6OkVudW0qIHN0YXR1cykKK3ZvaWQgSW5zcGVjdG9yUGFnZUFnZW50Ojpn
ZXRTY3JpcHRFeGVjdXRpb25TdGF0dXMoRXJyb3JTdHJpbmcqLCBJbnNwZWN0b3JQYWdlQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyOjpSZXN1bHQqIHN0YXR1cykKIHsKICAgICBib29sIGRpc2FibGVk
QnlTY3JpcHRDb250cm9sbGVyID0gZmFsc2U7CiAgICAgYm9vbCBkaXNhYmxlZEluU2V0dGluZ3Mg
PSBmYWxzZTsKQEAgLTk2MywxMyArOTYzLDEzIEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpUeXBl
QnVpbGRlcjo6UGFnZTo6RnJhbWU+IEluc3BlY3RvclBhZ2VBZ2VudDo6YnVpbGRPYmplY3RGCiBQ
YXNzUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlBhZ2U6OkZyYW1lUmVzb3VyY2VUcmVl
PiBJbnNwZWN0b3JQYWdlQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yRnJhbWVUcmVlKEZyYW1lKiBmcmFt
ZSkKIHsKICAgICBSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UGFnZTo6RnJhbWU+IGZy
YW1lT2JqZWN0ID0gYnVpbGRPYmplY3RGb3JGcmFtZShmcmFtZSk7Ci0gICAgUmVmUHRyPEluc3Bl
Y3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5PEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlBhZ2U6OkZy
YW1lUmVzb3VyY2VUcmVlOjpSZXNvdXJjZXM+PiBzdWJyZXNvdXJjZXMgPSBJbnNwZWN0b3I6OlR5
cGVCdWlsZGVyOjpBcnJheTxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpQYWdlOjpGcmFtZVJlc291
cmNlVHJlZTo6UmVzb3VyY2VzPjo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6VHlw
ZUJ1aWxkZXI6OkFycmF5PEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlBhZ2U6OkZyYW1lUmVzb3Vy
Y2U+PiBzdWJyZXNvdXJjZXMgPSBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheTxJbnNwZWN0
b3I6OlR5cGVCdWlsZGVyOjpQYWdlOjpGcmFtZVJlc291cmNlPjo6Y3JlYXRlKCk7CiAgICAgUmVm
UHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlBhZ2U6OkZyYW1lUmVzb3VyY2VUcmVlPiByZXN1
bHQgPSBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpQYWdlOjpGcmFtZVJlc291cmNlVHJlZTo6Y3Jl
YXRlKCkKICAgICAgICAgIC5zZXRGcmFtZShmcmFtZU9iamVjdCkKICAgICAgICAgIC5zZXRSZXNv
dXJjZXMoc3VicmVzb3VyY2VzKTsKIAogICAgIGZvciAoYXV0byogY2FjaGVkUmVzb3VyY2UgOiBj
YWNoZWRSZXNvdXJjZXNGb3JGcmFtZShmcmFtZSkpIHsKLSAgICAgICAgUmVmUHRyPEluc3BlY3Rv
cjo6VHlwZUJ1aWxkZXI6OlBhZ2U6OkZyYW1lUmVzb3VyY2VUcmVlOjpSZXNvdXJjZXM+IHJlc291
cmNlT2JqZWN0ID0gSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UGFnZTo6RnJhbWVSZXNvdXJjZVRy
ZWU6OlJlc291cmNlczo6Y3JlYXRlKCkKKyAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1
aWxkZXI6OlBhZ2U6OkZyYW1lUmVzb3VyY2U+IHJlc291cmNlT2JqZWN0ID0gSW5zcGVjdG9yOjpU
eXBlQnVpbGRlcjo6UGFnZTo6RnJhbWVSZXNvdXJjZTo6Y3JlYXRlKCkKICAgICAgICAgICAgIC5z
ZXRVcmwoY2FjaGVkUmVzb3VyY2UtPnVybCgpKQogICAgICAgICAgICAgLnNldFR5cGUoY2FjaGVk
UmVzb3VyY2VUeXBlSnNvbigqY2FjaGVkUmVzb3VyY2UpKQogICAgICAgICAgICAgLnNldE1pbWVU
eXBlKGNhY2hlZFJlc291cmNlLT5yZXNwb25zZSgpLm1pbWVUeXBlKCkpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5oIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5oCmluZGV4IGNhNGZmMmYwMDNjZWJh
OTgxNjhkMDc3OTkzMzRjNWZiZDVjOWEzMTEuLjlmODdkMjI5ZDQzNjcwOTZmMjg2MDM4MWVmMjNk
M2IyMjUzMTk0YjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JQYWdlQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFn
ZUFnZW50LmgKQEAgLTkwLDkgKzkwLDkgQEAgcHVibGljOgogCiAgICAgc3RhdGljIFBhc3NSZWZQ
dHI8U2hhcmVkQnVmZmVyPiByZXNvdXJjZURhdGEoRnJhbWUqLCBjb25zdCBVUkwmLCBTdHJpbmcq
IHRleHRFbmNvZGluZ05hbWUpOwogICAgIHN0YXRpYyBDYWNoZWRSZXNvdXJjZSogY2FjaGVkUmVz
b3VyY2UoRnJhbWUqLCBjb25zdCBVUkwmKTsKLSAgICBzdGF0aWMgSW5zcGVjdG9yOjpUeXBlQnVp
bGRlcjo6UGFnZTo6UmVzb3VyY2VUeXBlOjpFbnVtIHJlc291cmNlVHlwZUpzb24oUmVzb3VyY2VU
eXBlKTsKKyAgICBzdGF0aWMgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UGFnZTo6UmVzb3VyY2VU
eXBlIHJlc291cmNlVHlwZUpzb24oUmVzb3VyY2VUeXBlKTsKICAgICBzdGF0aWMgUmVzb3VyY2VU
eXBlIGNhY2hlZFJlc291cmNlVHlwZShjb25zdCBDYWNoZWRSZXNvdXJjZSYpOwotICAgIHN0YXRp
YyBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpQYWdlOjpSZXNvdXJjZVR5cGU6OkVudW0gY2FjaGVk
UmVzb3VyY2VUeXBlSnNvbihjb25zdCBDYWNoZWRSZXNvdXJjZSYpOworICAgIHN0YXRpYyBJbnNw
ZWN0b3I6OlR5cGVCdWlsZGVyOjpQYWdlOjpSZXNvdXJjZVR5cGUgY2FjaGVkUmVzb3VyY2VUeXBl
SnNvbihjb25zdCBDYWNoZWRSZXNvdXJjZSYpOwogCiAgICAgLy8gUGFnZSBBUEkgZm9yIEluc3Bl
Y3RvckZyb250ZW5kCiAgICAgdmlydHVhbCB2b2lkIGVuYWJsZShFcnJvclN0cmluZyopIG92ZXJy
aWRlOwpAQCAtMTE1LDcgKzExNSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0U2hv
d0ZQU0NvdW50ZXIoRXJyb3JTdHJpbmcqLCBib29sIHNob3cpIG92ZXJyaWRlOwogICAgIHZpcnR1
YWwgdm9pZCBjYW5Db250aW51b3VzbHlQYWludChFcnJvclN0cmluZyosIGJvb2wqKSBvdmVycmlk
ZTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGludW91c1BhaW50aW5nRW5hYmxlZChFcnJvclN0
cmluZyosIGJvb2wgZW5hYmxlZCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGdldFNjcmlw
dEV4ZWN1dGlvblN0YXR1cyhFcnJvclN0cmluZyosIEluc3BlY3Rvcjo6SW5zcGVjdG9yUGFnZUJh
Y2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UmVzdWx0OjpFbnVtKikgb3ZlcnJpZGU7CisgICAgdmly
dHVhbCB2b2lkIGdldFNjcmlwdEV4ZWN1dGlvblN0YXR1cyhFcnJvclN0cmluZyosIEluc3BlY3Rv
cjo6SW5zcGVjdG9yUGFnZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UmVzdWx0Kikgb3ZlcnJp
ZGU7CiAgICAgdmlydHVhbCB2b2lkIHNldFNjcmlwdEV4ZWN1dGlvbkRpc2FibGVkKEVycm9yU3Ry
aW5nKiwgYm9vbCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHNldFRvdWNoRW11bGF0aW9u
RW5hYmxlZChFcnJvclN0cmluZyosIGJvb2wpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBz
ZXRFbXVsYXRlZE1lZGlhKEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJikgb3ZlcnJpZGU7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVwbGF5QWdlbnQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJlcGxheUFnZW50LmNwcApp
bmRleCBkZjA4MThlODdmMGE3NDAwYjBhNjFlMzE3YzQyMGQ3ZjkwNTBhNjE2Li5mNDgwYzU0MDcz
YzAwMjc1NDRlZmE0OGM5ZmFiNWUxYzE0ZGEyZjRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVwbGF5QWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JSZXBsYXlBZ2VudC5jcHAKQEAgLTkwLDIyICs5MCwyMiBAQCBz
dGF0aWMgUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6UmVwbGF5OjpSZXBsYXlTZXNzaW9uPiBidWls
ZEluc3BlY3Rvck9iamVjdEZvclNlcwogICAgIHJldHVybiBzZXNzaW9uT2JqZWN0LnJlbGVhc2Uo
KTsKIH0KIAotc3RhdGljIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlJlcGxheTo6U2Vzc2lvblN0
YXRlOjpFbnVtIGJ1aWxkSW5zcGVjdG9yT2JqZWN0Rm9yU2Vzc2lvblN0YXRlKFNlc3Npb25TdGF0
ZSBzZXNzaW9uU3RhdGUpCitzdGF0aWMgVHlwZUJ1aWxkZXI6OlJlcGxheTo6U2Vzc2lvblN0YXRl
IGJ1aWxkSW5zcGVjdG9yT2JqZWN0Rm9yU2Vzc2lvblN0YXRlKFdlYkNvcmU6OlNlc3Npb25TdGF0
ZSBzZXNzaW9uU3RhdGUpCiB7CiAgICAgc3dpdGNoIChzZXNzaW9uU3RhdGUpIHsKLSAgICBjYXNl
IFNlc3Npb25TdGF0ZTo6Q2FwdHVyaW5nOiByZXR1cm4gSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6
UmVwbGF5OjpTZXNzaW9uU3RhdGU6OkNhcHR1cmluZzsKLSAgICBjYXNlIFNlc3Npb25TdGF0ZTo6
SW5hY3RpdmU6IHJldHVybiBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpSZXBsYXk6OlNlc3Npb25T
dGF0ZTo6SW5hY3RpdmU7Ci0gICAgY2FzZSBTZXNzaW9uU3RhdGU6OlJlcGxheWluZzogcmV0dXJu
IEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlJlcGxheTo6U2Vzc2lvblN0YXRlOjpSZXBsYXlpbmc7
CisgICAgY2FzZSBXZWJDb3JlOjpTZXNzaW9uU3RhdGU6OkNhcHR1cmluZzogcmV0dXJuIFR5cGVC
dWlsZGVyOjpSZXBsYXk6OlNlc3Npb25TdGF0ZTo6Q2FwdHVyaW5nOworICAgIGNhc2UgV2ViQ29y
ZTo6U2Vzc2lvblN0YXRlOjpJbmFjdGl2ZTogcmV0dXJuIFR5cGVCdWlsZGVyOjpSZXBsYXk6OlNl
c3Npb25TdGF0ZTo6SW5hY3RpdmU7CisgICAgY2FzZSBXZWJDb3JlOjpTZXNzaW9uU3RhdGU6OlJl
cGxheWluZzogcmV0dXJuIFR5cGVCdWlsZGVyOjpSZXBsYXk6OlNlc3Npb25TdGF0ZTo6UmVwbGF5
aW5nOwogICAgIH0KIH0KIAotc3RhdGljIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlJlcGxheTo6
U2VnbWVudFN0YXRlOjpFbnVtIGJ1aWxkSW5zcGVjdG9yT2JqZWN0Rm9yU2VnbWVudFN0YXRlKFNl
Z21lbnRTdGF0ZSBzZWdtZW50U3RhdGUpCitzdGF0aWMgVHlwZUJ1aWxkZXI6OlJlcGxheTo6U2Vn
bWVudFN0YXRlIGJ1aWxkSW5zcGVjdG9yT2JqZWN0Rm9yU2VnbWVudFN0YXRlKFdlYkNvcmU6OlNl
Z21lbnRTdGF0ZSBzZWdtZW50U3RhdGUpCiB7CiAgICAgc3dpdGNoIChzZWdtZW50U3RhdGUpIHsK
LSAgICBjYXNlIFNlZ21lbnRTdGF0ZTo6QXBwZW5kaW5nOiByZXR1cm4gSW5zcGVjdG9yOjpUeXBl
QnVpbGRlcjo6UmVwbGF5OjpTZWdtZW50U3RhdGU6OkFwcGVuZGluZzsKLSAgICBjYXNlIFNlZ21l
bnRTdGF0ZTo6VW5sb2FkZWQ6IHJldHVybiBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpSZXBsYXk6
OlNlZ21lbnRTdGF0ZTo6VW5sb2FkZWQ7Ci0gICAgY2FzZSBTZWdtZW50U3RhdGU6OkxvYWRlZDog
cmV0dXJuIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlJlcGxheTo6U2VnbWVudFN0YXRlOjpMb2Fk
ZWQ7Ci0gICAgY2FzZSBTZWdtZW50U3RhdGU6OkRpc3BhdGNoaW5nOiByZXR1cm4gSW5zcGVjdG9y
OjpUeXBlQnVpbGRlcjo6UmVwbGF5OjpTZWdtZW50U3RhdGU6OkRpc3BhdGNoaW5nOworICAgIGNh
c2UgV2ViQ29yZTo6U2VnbWVudFN0YXRlOjpBcHBlbmRpbmc6IHJldHVybiBUeXBlQnVpbGRlcjo6
UmVwbGF5OjpTZWdtZW50U3RhdGU6OkFwcGVuZGluZzsKKyAgICBjYXNlIFdlYkNvcmU6OlNlZ21l
bnRTdGF0ZTo6VW5sb2FkZWQ6IHJldHVybiBUeXBlQnVpbGRlcjo6UmVwbGF5OjpTZWdtZW50U3Rh
dGU6OlVubG9hZGVkOworICAgIGNhc2UgV2ViQ29yZTo6U2VnbWVudFN0YXRlOjpMb2FkZWQ6IHJl
dHVybiBUeXBlQnVpbGRlcjo6UmVwbGF5OjpTZWdtZW50U3RhdGU6OkxvYWRlZDsKKyAgICBjYXNl
IFdlYkNvcmU6OlNlZ21lbnRTdGF0ZTo6RGlzcGF0Y2hpbmc6IHJldHVybiBUeXBlQnVpbGRlcjo6
UmVwbGF5OjpTZWdtZW50U3RhdGU6OkRpc3BhdGNoaW5nOwogICAgIH0KIH0KIApAQCAtMTY4LDcg
KzE2OCw3IEBAIEluc3BlY3RvclJlcGxheUFnZW50Ojp+SW5zcGVjdG9yUmVwbGF5QWdlbnQoKQog
ICAgIEFTU0VSVCghbV9zZWdtZW50c01hcC5zaXplKCkpOwogfQogCi1TZXNzaW9uU3RhdGUgSW5z
cGVjdG9yUmVwbGF5QWdlbnQ6OnNlc3Npb25TdGF0ZSgpIGNvbnN0CitXZWJDb3JlOjpTZXNzaW9u
U3RhdGUgSW5zcGVjdG9yUmVwbGF5QWdlbnQ6OnNlc3Npb25TdGF0ZSgpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIG1fcGFnZS5yZXBsYXlDb250cm9sbGVyKCkuc2Vzc2lvblN0YXRlKCk7CiB9CkBAIC0x
NzksNyArMTc5LDcgQEAgdm9pZCBJbnNwZWN0b3JSZXBsYXlBZ2VudDo6ZGlkQ3JlYXRlRnJvbnRl
bmRBbmRCYWNrZW5kKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCoKICAgICBtX2JhY2tlbmREaXNw
YXRjaGVyID0gSW5zcGVjdG9yUmVwbGF5QmFja2VuZERpc3BhdGNoZXI6OmNyZWF0ZShiYWNrZW5k
RGlzcGF0Y2hlciwgdGhpcyk7CiAKICAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMtPnNldEluc3Bl
Y3RvclJlcGxheUFnZW50KHRoaXMpOwotICAgIEFTU0VSVChzZXNzaW9uU3RhdGUoKSA9PSBTZXNz
aW9uU3RhdGU6OkluYWN0aXZlKTsKKyAgICBBU1NFUlQoc2Vzc2lvblN0YXRlKCkgPT0gV2ViQ29y
ZTo6U2Vzc2lvblN0YXRlOjpJbmFjdGl2ZSk7CiAKICAgICAvLyBLZWVwIHRyYWNrIG9mIHRoZSAo
ZGVmYXVsdCkgc2Vzc2lvbiBjdXJyZW50bHkgbG9hZGVkIGJ5IFJlcGxheUNvbnRyb2xsZXIsCiAg
ICAgLy8gYW5kIGFueSBzZWdtZW50cyB3aXRoaW4gdGhlIHNlc3Npb24uCkBAIC0yMDQsMTkgKzIw
NCwxOSBAQCB2b2lkIEluc3BlY3RvclJlcGxheUFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5k
QmFja2VuZChJbnNwZWN0b3JEaXNjb25uZWN0UmVhcwogCiB2b2lkIEluc3BlY3RvclJlcGxheUFn
ZW50OjpmcmFtZU5hdmlnYXRlZChEb2N1bWVudExvYWRlciogbG9hZGVyKQogewotICAgIGlmIChz
ZXNzaW9uU3RhdGUoKSAhPSBTZXNzaW9uU3RhdGU6OkluYWN0aXZlKQorICAgIGlmIChzZXNzaW9u
U3RhdGUoKSAhPSBXZWJDb3JlOjpTZXNzaW9uU3RhdGU6OkluYWN0aXZlKQogICAgICAgICBtX3Bh
Z2UucmVwbGF5Q29udHJvbGxlcigpLmZyYW1lTmF2aWdhdGVkKGxvYWRlcik7CiB9CiAKIHZvaWQg
SW5zcGVjdG9yUmVwbGF5QWdlbnQ6OmZyYW1lRGV0YWNoZWQoRnJhbWUqIGZyYW1lKQogewotICAg
IGlmIChzZXNzaW9uU3RhdGUoKSAhPSBTZXNzaW9uU3RhdGU6OkluYWN0aXZlKQorICAgIGlmIChz
ZXNzaW9uU3RhdGUoKSAhPSBXZWJDb3JlOjpTZXNzaW9uU3RhdGU6OkluYWN0aXZlKQogICAgICAg
ICBtX3BhZ2UucmVwbGF5Q29udHJvbGxlcigpLmZyYW1lRGV0YWNoZWQoZnJhbWUpOwogfQogCiB2
b2lkIEluc3BlY3RvclJlcGxheUFnZW50Ojp3aWxsRGlzcGF0Y2hFdmVudChjb25zdCBFdmVudCYg
ZXZlbnQsIEZyYW1lKiBmcmFtZSkKIHsKLSAgICBpZiAoc2Vzc2lvblN0YXRlKCkgIT0gU2Vzc2lv
blN0YXRlOjpJbmFjdGl2ZSkKKyAgICBpZiAoc2Vzc2lvblN0YXRlKCkgIT0gV2ViQ29yZTo6U2Vz
c2lvblN0YXRlOjpJbmFjdGl2ZSkKICAgICAgICAgbV9wYWdlLnJlcGxheUNvbnRyb2xsZXIoKS53
aWxsRGlzcGF0Y2hFdmVudChldmVudCwgZnJhbWUpOwogfQogCkBAIC0zMTksNyArMzE5LDcgQEAg
dm9pZCBJbnNwZWN0b3JSZXBsYXlBZ2VudDo6cGxheWJhY2tGaW5pc2hlZCgpCiAKIHZvaWQgSW5z
cGVjdG9yUmVwbGF5QWdlbnQ6OnN0YXJ0Q2FwdHVyaW5nKEVycm9yU3RyaW5nKiBlcnJvclN0cmlu
ZykKIHsKLSAgICBpZiAoc2Vzc2lvblN0YXRlKCkgIT0gU2Vzc2lvblN0YXRlOjpJbmFjdGl2ZSkg
eworICAgIGlmIChzZXNzaW9uU3RhdGUoKSAhPSBXZWJDb3JlOjpTZXNzaW9uU3RhdGU6OkluYWN0
aXZlKSB7CiAgICAgICAgICplcnJvclN0cmluZyA9IEFTQ0lJTGl0ZXJhbCgiQ2FuJ3Qgc3RhcnQg
Y2FwdHVyaW5nIGlmIHRoZSBzZXNzaW9uIGlzIGFscmVhZHkgY2FwdHVyaW5nIG9yIHJlcGxheWlu
Zy4iKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTMyOSw3ICszMjksNyBAQCB2b2lkIElu
c3BlY3RvclJlcGxheUFnZW50OjpzdGFydENhcHR1cmluZyhFcnJvclN0cmluZyogZXJyb3JTdHJp
bmcpCiAKIHZvaWQgSW5zcGVjdG9yUmVwbGF5QWdlbnQ6OnN0b3BDYXB0dXJpbmcoRXJyb3JTdHJp
bmcqIGVycm9yU3RyaW5nKQogewotICAgIGlmIChzZXNzaW9uU3RhdGUoKSAhPSBTZXNzaW9uU3Rh
dGU6OkNhcHR1cmluZykgeworICAgIGlmIChzZXNzaW9uU3RhdGUoKSAhPSBXZWJDb3JlOjpTZXNz
aW9uU3RhdGU6OkNhcHR1cmluZykgewogICAgICAgICAqZXJyb3JTdHJpbmcgPSBBU0NJSUxpdGVy
YWwoIkNhbid0IHN0b3AgY2FwdHVyaW5nIGlmIGNhcHR1cmUgaXMgbm90IGluIHByb2dyZXNzLiIp
OwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMzUwLDcgKzM1MCw3IEBAIHZvaWQgSW5zcGVj
dG9yUmVwbGF5QWdlbnQ6OnJlcGxheVRvUG9zaXRpb24oRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5n
LCBjb25zdCBSZWZQCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoc2Vzc2lvblN0
YXRlKCkgPT0gU2Vzc2lvblN0YXRlOjpDYXB0dXJpbmcpIHsKKyAgICBpZiAoc2Vzc2lvblN0YXRl
KCkgPT0gV2ViQ29yZTo6U2Vzc2lvblN0YXRlOjpDYXB0dXJpbmcpIHsKICAgICAgICAgKmVycm9y
U3RyaW5nID0gQVNDSUlMaXRlcmFsKCJDYW4ndCBzdGFydCByZXBsYXkgd2hpbGUgY2FwdHVyZSBp
cyBpbiBwcm9ncmVzcy4iKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTM2MCw3ICszNjAs
NyBAQCB2b2lkIEluc3BlY3RvclJlcGxheUFnZW50OjpyZXBsYXlUb1Bvc2l0aW9uKEVycm9yU3Ry
aW5nKiBlcnJvclN0cmluZywgY29uc3QgUmVmUAogCiB2b2lkIEluc3BlY3RvclJlcGxheUFnZW50
OjpyZXBsYXlUb0NvbXBsZXRpb24oRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBib29sIGZhc3RS
ZXBsYXkpCiB7Ci0gICAgaWYgKHNlc3Npb25TdGF0ZSgpID09IFNlc3Npb25TdGF0ZTo6Q2FwdHVy
aW5nKSB7CisgICAgaWYgKHNlc3Npb25TdGF0ZSgpID09IFdlYkNvcmU6OlNlc3Npb25TdGF0ZTo6
Q2FwdHVyaW5nKSB7CiAgICAgICAgICplcnJvclN0cmluZyA9IEFTQ0lJTGl0ZXJhbCgiQ2FuJ3Qg
c3RhcnQgcmVwbGF5IHdoaWxlIGNhcHR1cmUgaXMgaW4gcHJvZ3Jlc3MuIik7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CkBAIC0zNzAsNyArMzcwLDcgQEAgdm9pZCBJbnNwZWN0b3JSZXBsYXlBZ2Vu
dDo6cmVwbGF5VG9Db21wbGV0aW9uKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgYm9vbCBmYXMK
IAogdm9pZCBJbnNwZWN0b3JSZXBsYXlBZ2VudDo6cGF1c2VQbGF5YmFjayhFcnJvclN0cmluZyog
ZXJyb3JTdHJpbmcpCiB7Ci0gICAgaWYgKHNlc3Npb25TdGF0ZSgpICE9IFNlc3Npb25TdGF0ZTo6
UmVwbGF5aW5nKSB7CisgICAgaWYgKHNlc3Npb25TdGF0ZSgpICE9IFdlYkNvcmU6OlNlc3Npb25T
dGF0ZTo6UmVwbGF5aW5nKSB7CiAgICAgICAgICplcnJvclN0cmluZyA9IEFTQ0lJTGl0ZXJhbCgi
Q2FuJ3QgcGF1c2UgcGxheWJhY2sgaWYgcGxheWJhY2sgaXMgbm90IGluIHByb2dyZXNzLiIpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMzgwLDcgKzM4MCw3IEBAIHZvaWQgSW5zcGVjdG9y
UmVwbGF5QWdlbnQ6OnBhdXNlUGxheWJhY2soRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nKQogCiB2
b2lkIEluc3BlY3RvclJlcGxheUFnZW50OjpjYW5jZWxQbGF5YmFjayhFcnJvclN0cmluZyogZXJy
b3JTdHJpbmcpCiB7Ci0gICAgaWYgKHNlc3Npb25TdGF0ZSgpID09IFNlc3Npb25TdGF0ZTo6Q2Fw
dHVyaW5nKSB7CisgICAgaWYgKHNlc3Npb25TdGF0ZSgpID09IFdlYkNvcmU6OlNlc3Npb25TdGF0
ZTo6Q2FwdHVyaW5nKSB7CiAgICAgICAgICplcnJvclN0cmluZyA9IEFTQ0lJTGl0ZXJhbCgiQ2Fu
J3QgY2FuY2VsIHBsYXliYWNrIGlmIGNhcHR1cmUgaXMgaW4gcHJvZ3Jlc3MuIik7CiAgICAgICAg
IHJldHVybjsKICAgICB9CkBAIC0zODgsMTEgKzM4OCwxMSBAQCB2b2lkIEluc3BlY3RvclJlcGxh
eUFnZW50OjpjYW5jZWxQbGF5YmFjayhFcnJvclN0cmluZyogZXJyb3JTdHJpbmcpCiAgICAgbV9w
YWdlLnJlcGxheUNvbnRyb2xsZXIoKS5jYW5jZWxQbGF5YmFjaygpOwogfQogCi12b2lkIEluc3Bl
Y3RvclJlcGxheUFnZW50Ojpzd2l0Y2hTZXNzaW9uKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywg
U2Vzc2lvbklkZW50aWZpZXIgaWRlbnRpZmllcikKK3ZvaWQgSW5zcGVjdG9yUmVwbGF5QWdlbnQ6
OnN3aXRjaFNlc3Npb24oRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBUeXBlQnVpbGRlcjo6UmVw
bGF5OjpTZXNzaW9uSWRlbnRpZmllciBpZGVudGlmaWVyKQogewogICAgIEFTU0VSVChpZGVudGlm
aWVyID4gMCk7CiAKLSAgICBpZiAoc2Vzc2lvblN0YXRlKCkgIT0gU2Vzc2lvblN0YXRlOjpJbmFj
dGl2ZSkgeworICAgIGlmIChzZXNzaW9uU3RhdGUoKSAhPSBXZWJDb3JlOjpTZXNzaW9uU3RhdGU6
OkluYWN0aXZlKSB7CiAgICAgICAgICplcnJvclN0cmluZyA9IEFTQ0lJTGl0ZXJhbCgiQ2FuJ3Qg
c3dpdGNoIHNlc3Npb25zIHVubGVzcyB0aGUgc2Vzc2lvbiBpcyBuZWl0aGVyIGNhcHR1cmluZyBv
ciByZXBsYXlpbmcuIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC00MDQsNyArNDA0LDcg
QEAgdm9pZCBJbnNwZWN0b3JSZXBsYXlBZ2VudDo6c3dpdGNoU2Vzc2lvbihFcnJvclN0cmluZyog
ZXJyb3JTdHJpbmcsIFNlc3Npb25JZGVudGkKICAgICBtX3BhZ2UucmVwbGF5Q29udHJvbGxlcigp
LnN3aXRjaFNlc3Npb24oc2Vzc2lvbik7CiB9CiAKLXZvaWQgSW5zcGVjdG9yUmVwbGF5QWdlbnQ6
Omluc2VydFNlc3Npb25TZWdtZW50KEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgU2Vzc2lvbklk
ZW50aWZpZXIgc2Vzc2lvbklkZW50aWZpZXIsIFNlZ21lbnRJZGVudGlmaWVyIHNlZ21lbnRJZGVu
dGlmaWVyLCBpbnQgc2VnbWVudEluZGV4KQordm9pZCBJbnNwZWN0b3JSZXBsYXlBZ2VudDo6aW5z
ZXJ0U2Vzc2lvblNlZ21lbnQoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBUeXBlQnVpbGRlcjo6
UmVwbGF5OjpTZXNzaW9uSWRlbnRpZmllciBzZXNzaW9uSWRlbnRpZmllciwgU2VnbWVudElkZW50
aWZpZXIgc2VnbWVudElkZW50aWZpZXIsIGludCBzZWdtZW50SW5kZXgpCiB7CiAgICAgQVNTRVJU
KHNlc3Npb25JZGVudGlmaWVyID4gMCk7CiAgICAgQVNTRVJUKHNlZ21lbnRJZGVudGlmaWVyID4g
MCk7CkBAIC00MjEsNyArNDIxLDcgQEAgdm9pZCBJbnNwZWN0b3JSZXBsYXlBZ2VudDo6aW5zZXJ0
U2Vzc2lvblNlZ21lbnQoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBTZXNzaW8KICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAotICAgIGlmIChzZXNzaW9uID09IG1fcGFnZS5yZXBsYXlDb250cm9s
bGVyKCkubG9hZGVkU2Vzc2lvbigpICYmIHNlc3Npb25TdGF0ZSgpICE9IFNlc3Npb25TdGF0ZTo6
SW5hY3RpdmUpIHsKKyAgICBpZiAoc2Vzc2lvbiA9PSBtX3BhZ2UucmVwbGF5Q29udHJvbGxlcigp
LmxvYWRlZFNlc3Npb24oKSAmJiBzZXNzaW9uU3RhdGUoKSAhPSBXZWJDb3JlOjpTZXNzaW9uU3Rh
dGU6OkluYWN0aXZlKSB7CiAgICAgICAgICplcnJvclN0cmluZyA9IEFTQ0lJTGl0ZXJhbCgiQ2Fu
J3QgbW9kaWZ5IGEgbG9hZGVkIHNlc3Npb24gdW5sZXNzIHRoZSBzZXNzaW9uIGlzIGluYWN0aXZl
LiIpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtNDMwLDcgKzQzMCw3IEBAIHZvaWQgSW5z
cGVjdG9yUmVwbGF5QWdlbnQ6Omluc2VydFNlc3Npb25TZWdtZW50KEVycm9yU3RyaW5nKiBlcnJv
clN0cmluZywgU2Vzc2lvCiAgICAgc2Vzc2lvbk1vZGlmaWVkKHNlc3Npb24pOwogfQogCi12b2lk
IEluc3BlY3RvclJlcGxheUFnZW50OjpyZW1vdmVTZXNzaW9uU2VnbWVudChFcnJvclN0cmluZyog
ZXJyb3JTdHJpbmcsIFNlc3Npb25JZGVudGlmaWVyIGlkZW50aWZpZXIsIGludCBzZWdtZW50SW5k
ZXgpCit2b2lkIEluc3BlY3RvclJlcGxheUFnZW50OjpyZW1vdmVTZXNzaW9uU2VnbWVudChFcnJv
clN0cmluZyogZXJyb3JTdHJpbmcsIFR5cGVCdWlsZGVyOjpSZXBsYXk6OlNlc3Npb25JZGVudGlm
aWVyIGlkZW50aWZpZXIsIGludCBzZWdtZW50SW5kZXgpCiB7CiAgICAgQVNTRVJUKGlkZW50aWZp
ZXIgPiAwKTsKICAgICBBU1NFUlQoc2VnbWVudEluZGV4ID49IDApOwpAQCAtNDQ1LDcgKzQ0NSw3
IEBAIHZvaWQgSW5zcGVjdG9yUmVwbGF5QWdlbnQ6OnJlbW92ZVNlc3Npb25TZWdtZW50KEVycm9y
U3RyaW5nKiBlcnJvclN0cmluZywgU2Vzc2lvCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAg
ICBpZiAoc2Vzc2lvbiA9PSBtX3BhZ2UucmVwbGF5Q29udHJvbGxlcigpLmxvYWRlZFNlc3Npb24o
KSAmJiBzZXNzaW9uU3RhdGUoKSAhPSBTZXNzaW9uU3RhdGU6OkluYWN0aXZlKSB7CisgICAgaWYg
KHNlc3Npb24gPT0gbV9wYWdlLnJlcGxheUNvbnRyb2xsZXIoKS5sb2FkZWRTZXNzaW9uKCkgJiYg
c2Vzc2lvblN0YXRlKCkgIT0gV2ViQ29yZTo6U2Vzc2lvblN0YXRlOjpJbmFjdGl2ZSkgewogICAg
ICAgICAqZXJyb3JTdHJpbmcgPSBBU0NJSUxpdGVyYWwoIkNhbid0IG1vZGlmeSBhIGxvYWRlZCBz
ZXNzaW9uIHVubGVzcyB0aGUgc2Vzc2lvbiBpcyBpbmFjdGl2ZS4iKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KQEAgLTQ4MCw3ICs0ODAsNyBAQCBQYXNzUmVmUHRyPFJlcGxheVNlc3Npb25TZWdt
ZW50PiBJbnNwZWN0b3JSZXBsYXlBZ2VudDo6ZmluZFNlZ21lbnQoRXJyb3JTdHJpbmcqCiAgICAg
cmV0dXJuIGl0LT52YWx1ZTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSZXBsYXlBZ2VudDo6Y3VycmVu
dFJlcGxheVN0YXRlKEVycm9yU3RyaW5nKiwgU2Vzc2lvbklkZW50aWZpZXIqIHNlc3Npb25JZGVu
dGlmaWVyLCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8aW50Piogc2VnbWVudElk
ZW50aWZpZXIsIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlJlcGxheTo6U2Vzc2lvblN0YXRlOjpF
bnVtKiBzZXNzaW9uU3RhdGUsIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlJlcGxheTo6U2VnbWVu
dFN0YXRlOjpFbnVtKiBzZWdtZW50U3RhdGUsIFJlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVy
OjpSZXBsYXk6OlJlcGxheVBvc2l0aW9uPiYgcmVwbGF5UG9zaXRpb24pCit2b2lkIEluc3BlY3Rv
clJlcGxheUFnZW50OjpjdXJyZW50UmVwbGF5U3RhdGUoRXJyb3JTdHJpbmcqLCBUeXBlQnVpbGRl
cjo6UmVwbGF5OjpTZXNzaW9uSWRlbnRpZmllciogc2Vzc2lvbklkZW50aWZpZXIsIFR5cGVCdWls
ZGVyOjpPcHRPdXRwdXQ8VHlwZUJ1aWxkZXI6OlJlcGxheTo6U2VnbWVudElkZW50aWZpZXI+KiBz
ZWdtZW50SWRlbnRpZmllciwgVHlwZUJ1aWxkZXI6OlJlcGxheTo6U2Vzc2lvblN0YXRlKiBzZXNz
aW9uU3RhdGUsIFR5cGVCdWlsZGVyOjpSZXBsYXk6OlNlZ21lbnRTdGF0ZSogc2VnbWVudFN0YXRl
LCBSZWZQdHI8VHlwZUJ1aWxkZXI6OlJlcGxheTo6UmVwbGF5UG9zaXRpb24+JiByZXBsYXlQb3Np
dGlvbikKIHsKICAgICAqc2Vzc2lvblN0YXRlID0gYnVpbGRJbnNwZWN0b3JPYmplY3RGb3JTZXNz
aW9uU3RhdGUobV9wYWdlLnJlcGxheUNvbnRyb2xsZXIoKS5zZXNzaW9uU3RhdGUoKSk7CiAgICAg
KnNlZ21lbnRTdGF0ZSA9IGJ1aWxkSW5zcGVjdG9yT2JqZWN0Rm9yU2VnbWVudFN0YXRlKG1fcGFn
ZS5yZXBsYXlDb250cm9sbGVyKCkuc2VnbWVudFN0YXRlKCkpOwpAQCAtNDkyLDE0ICs0OTIsMTQg
QEAgdm9pZCBJbnNwZWN0b3JSZXBsYXlBZ2VudDo6Y3VycmVudFJlcGxheVN0YXRlKEVycm9yU3Ry
aW5nKiwgU2Vzc2lvbklkZW50aWZpZXIqIHMKICAgICByZXBsYXlQb3NpdGlvbiA9IGJ1aWxkSW5z
cGVjdG9yT2JqZWN0Rm9yUG9zaXRpb24obV9wYWdlLnJlcGxheUNvbnRyb2xsZXIoKS5jdXJyZW50
UG9zaXRpb24oKSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yUmVwbGF5QWdlbnQ6OmdldEF2YWlsYWJs
ZVNlc3Npb25zKEVycm9yU3RyaW5nKiwgUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFy
cmF5PFNlc3Npb25JZGVudGlmaWVyPj4mIHNlc3Npb25zTGlzdCkKK3ZvaWQgSW5zcGVjdG9yUmVw
bGF5QWdlbnQ6OmdldEF2YWlsYWJsZVNlc3Npb25zKEVycm9yU3RyaW5nKiwgUmVmUHRyPFR5cGVC
dWlsZGVyOjpBcnJheTxTZXNzaW9uSWRlbnRpZmllcj4+JiBzZXNzaW9uc0xpc3QpCiB7Ci0gICAg
c2Vzc2lvbnNMaXN0ID0gVHlwZUJ1aWxkZXI6OkFycmF5PFNlc3Npb25JZGVudGlmaWVyPjo6Y3Jl
YXRlKCk7CisgICAgc2Vzc2lvbnNMaXN0ID0gVHlwZUJ1aWxkZXI6OkFycmF5PFR5cGVCdWlsZGVy
OjpSZXBsYXk6OlNlc3Npb25JZGVudGlmaWVyPjo6Y3JlYXRlKCk7CiAgICAgZm9yIChhdXRvJiBw
YWlyIDogbV9zZXNzaW9uc01hcCkKICAgICAgICAgc2Vzc2lvbnNMaXN0LT5hZGRJdGVtKHBhaXIu
a2V5KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSZXBsYXlBZ2VudDo6Z2V0U2Vzc2lvbkRhdGEoRXJy
b3JTdHJpbmcqIGVycm9yU3RyaW5nLCBTZXNzaW9uSWRlbnRpZmllciBpZGVudGlmaWVyLCBSZWZQ
dHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UmVwbGF5OjpSZXBsYXlTZXNzaW9uPiYgc2VyaWFs
aXplZE9iamVjdCkKK3ZvaWQgSW5zcGVjdG9yUmVwbGF5QWdlbnQ6OmdldFNlc3Npb25EYXRhKEVy
cm9yU3RyaW5nKiBlcnJvclN0cmluZywgVHlwZUJ1aWxkZXI6OlJlcGxheTo6U2Vzc2lvbklkZW50
aWZpZXIgaWRlbnRpZmllciwgUmVmUHRyPFR5cGVCdWlsZGVyOjpSZXBsYXk6OlJlcGxheVNlc3Np
b24+JiBzZXJpYWxpemVkT2JqZWN0KQogewogICAgIFJlZlB0cjxSZXBsYXlTZXNzaW9uPiBzZXNz
aW9uID0gZmluZFNlc3Npb24oZXJyb3JTdHJpbmcsIGlkZW50aWZpZXIpOwogICAgIGlmICghc2Vz
c2lvbikgewpAQCAtNTEwLDcgKzUxMCw3IEBAIHZvaWQgSW5zcGVjdG9yUmVwbGF5QWdlbnQ6Omdl
dFNlc3Npb25EYXRhKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgU2Vzc2lvbklkZW50CiAgICAg
c2VyaWFsaXplZE9iamVjdCA9IGJ1aWxkSW5zcGVjdG9yT2JqZWN0Rm9yU2Vzc2lvbihzZXNzaW9u
KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSZXBsYXlBZ2VudDo6Z2V0U2VnbWVudERhdGEoRXJyb3JT
dHJpbmcqIGVycm9yU3RyaW5nLCBTZWdtZW50SWRlbnRpZmllciBpZGVudGlmaWVyLCBSZWZQdHI8
SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UmVwbGF5OjpTZXNzaW9uU2VnbWVudD4mIHNlcmlhbGl6
ZWRPYmplY3QpCit2b2lkIEluc3BlY3RvclJlcGxheUFnZW50OjpnZXRTZWdtZW50RGF0YShFcnJv
clN0cmluZyogZXJyb3JTdHJpbmcsIFR5cGVCdWlsZGVyOjpSZXBsYXk6OlNlZ21lbnRJZGVudGlm
aWVyIGlkZW50aWZpZXIsIFJlZlB0cjxUeXBlQnVpbGRlcjo6UmVwbGF5OjpTZXNzaW9uU2VnbWVu
dD4mIHNlcmlhbGl6ZWRPYmplY3QpCiB7CiAgICAgUmVmUHRyPFJlcGxheVNlc3Npb25TZWdtZW50
PiBzZWdtZW50ID0gZmluZFNlZ21lbnQoZXJyb3JTdHJpbmcsIGlkZW50aWZpZXIpOwogICAgIGlm
ICghc2VnbWVudCkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvclJlcGxheUFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVw
bGF5QWdlbnQuaAppbmRleCA2OWMxNGI2NTU0NGM4MjMxNzkyNDVhYzQ4MGRjZDQzZGMzNjFmMzBm
Li5mN2JjZTZmNGNmYjA5YWY0ZDQyZGMxNmYyMTMzYjI1ZjU4Nzk0MWI0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVwbGF5QWdlbnQuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVwbGF5QWdlbnQuaApAQCAtMTAxLDE4ICsx
MDEsMTggQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBjYW5jZWxQbGF5YmFjayhFcnJvclN0
cmluZyopIG92ZXJyaWRlOwogCiAgICAgdmlydHVhbCB2b2lkIHN3aXRjaFNlc3Npb24oRXJyb3JT
dHJpbmcqLCBTZXNzaW9uSWRlbnRpZmllcikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGlu
c2VydFNlc3Npb25TZWdtZW50KEVycm9yU3RyaW5nKiwgU2Vzc2lvbklkZW50aWZpZXIsIFNlZ21l
bnRJZGVudGlmaWVyLCBpbnQgc2VnbWVudEluZGV4KSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZv
aWQgcmVtb3ZlU2Vzc2lvblNlZ21lbnQoRXJyb3JTdHJpbmcqLCBTZXNzaW9uSWRlbnRpZmllciwg
aW50IHNlZ21lbnRJbmRleCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGluc2VydFNlc3Np
b25TZWdtZW50KEVycm9yU3RyaW5nKiwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UmVwbGF5OjpT
ZXNzaW9uSWRlbnRpZmllciwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UmVwbGF5OjpTZWdtZW50
SWRlbnRpZmllciwgaW50IHNlZ21lbnRJbmRleCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lk
IHJlbW92ZVNlc3Npb25TZWdtZW50KEVycm9yU3RyaW5nKiwgSW5zcGVjdG9yOjpUeXBlQnVpbGRl
cjo6UmVwbGF5OjpTZXNzaW9uSWRlbnRpZmllciwgaW50IHNlZ21lbnRJbmRleCkgb3ZlcnJpZGU7
CiAKLSAgICB2aXJ0dWFsIHZvaWQgY3VycmVudFJlcGxheVN0YXRlKEVycm9yU3RyaW5nKiwgU2Vz
c2lvbklkZW50aWZpZXIqLCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8aW50Piog
c2VnbWVudElkZW50aWZpZXIsIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlJlcGxheTo6U2Vzc2lv
blN0YXRlOjpFbnVtKiBzZXNzaW9uU3RhdGUsIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlJlcGxh
eTo6U2VnbWVudFN0YXRlOjpFbnVtKiBzZWdtZW50U3RhdGUsIFJlZlB0cjxJbnNwZWN0b3I6OlR5
cGVCdWlsZGVyOjpSZXBsYXk6OlJlcGxheVBvc2l0aW9uPiYpIG92ZXJyaWRlOwotICAgIHZpcnR1
YWwgdm9pZCBnZXRBdmFpbGFibGVTZXNzaW9ucyhFcnJvclN0cmluZyosIFJlZlB0cjxJbnNwZWN0
b3I6OlR5cGVCdWlsZGVyOjpBcnJheTxTZXNzaW9uSWRlbnRpZmllcj4+Jikgb3ZlcnJpZGU7Ci0g
ICAgdmlydHVhbCB2b2lkIGdldFNlc3Npb25EYXRhKEVycm9yU3RyaW5nKiwgU2Vzc2lvbklkZW50
aWZpZXIsIFJlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpSZXBsYXk6OlJlcGxheVNlc3Np
b24+Jikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGdldFNlZ21lbnREYXRhKEVycm9yU3Ry
aW5nKiwgU2VnbWVudElkZW50aWZpZXIsIFJlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpS
ZXBsYXk6OlNlc3Npb25TZWdtZW50PiYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBjdXJy
ZW50UmVwbGF5U3RhdGUoRXJyb3JTdHJpbmcqLCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpSZXBs
YXk6OlNlc3Npb25JZGVudGlmaWVyKiwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6T3B0T3V0cHV0
PEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlJlcGxheTo6U2VnbWVudElkZW50aWZpZXI+KiwgSW5z
cGVjdG9yOjpUeXBlQnVpbGRlcjo6UmVwbGF5OjpTZXNzaW9uU3RhdGUqLCBJbnNwZWN0b3I6OlR5
cGVCdWlsZGVyOjpSZXBsYXk6OlNlZ21lbnRTdGF0ZSogc2VnbWVudFN0YXRlLCBSZWZQdHI8SW5z
cGVjdG9yOjpUeXBlQnVpbGRlcjo6UmVwbGF5OjpSZXBsYXlQb3NpdGlvbj4mKSBvdmVycmlkZTsK
KyAgICB2aXJ0dWFsIHZvaWQgZ2V0QXZhaWxhYmxlU2Vzc2lvbnMoRXJyb3JTdHJpbmcqLCBSZWZQ
dHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6
UmVwbGF5OjpTZXNzaW9uSWRlbnRpZmllcj4+Jikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lk
IGdldFNlc3Npb25EYXRhKEVycm9yU3RyaW5nKiwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UmVw
bGF5OjpTZXNzaW9uSWRlbnRpZmllciwgUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlJl
cGxheTo6UmVwbGF5U2Vzc2lvbj4mKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0U2Vn
bWVudERhdGEoRXJyb3JTdHJpbmcqLCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpSZXBsYXk6OlNl
Z21lbnRJZGVudGlmaWVyLCBSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UmVwbGF5OjpT
ZXNzaW9uU2VnbWVudD4mKSBvdmVycmlkZTsKIAogcHJpdmF0ZToKICAgICBQYXNzUmVmUHRyPFJl
cGxheVNlc3Npb24+IGZpbmRTZXNzaW9uKEVycm9yU3RyaW5nKiwgU2Vzc2lvbklkZW50aWZpZXIp
OwogICAgIFBhc3NSZWZQdHI8UmVwbGF5U2Vzc2lvblNlZ21lbnQ+IGZpbmRTZWdtZW50KEVycm9y
U3RyaW5nKiwgU2VnbWVudElkZW50aWZpZXIpOwotICAgIFNlc3Npb25TdGF0ZSBzZXNzaW9uU3Rh
dGUoKSBjb25zdDsKKyAgICBXZWJDb3JlOjpTZXNzaW9uU3RhdGUgc2Vzc2lvblN0YXRlKCkgY29u
c3Q7CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JSZXBsYXlGcm9u
dGVuZERpc3BhdGNoZXI+IG1fZnJvbnRlbmREaXNwYXRjaGVyOwogICAgIFJlZlB0cjxJbnNwZWN0
b3I6Okluc3BlY3RvclJlcGxheUJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVy
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNl
QWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlQWdl
bnQuY3BwCmluZGV4IGE0NzAzMGQyZGYxNzNiMDVlMGYxYWE4MzI4NjE3ZDAxOGYwZmYwMTAuLmI0
NjhmMzU1Njk5NGY2NjlhNjA4MzJhYWE5ZmUxOTVjMDVjMGQyNDMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZUFnZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2VBZ2VudC5jcHAKQEAgLTMxNyw3
ICszMTcsNyBAQCB2b2lkIEluc3BlY3RvclJlc291cmNlQWdlbnQ6OndpbGxTZW5kUmVxdWVzdCh1
bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIERvY3VtZW50TAogICAgICAgICByZXF1ZXN0LnNldEhU
VFBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFtZTo6Q2FjaGVDb250cm9sLCAibm8tY2FjaGUiKTsK
ICAgICB9CiAKLSAgICBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpQYWdlOjpSZXNvdXJjZVR5cGU6
OkVudW0gcmVzb3VyY2VUeXBlID0gSW5zcGVjdG9yUGFnZUFnZW50OjpyZXNvdXJjZVR5cGVKc29u
KHR5cGUpOworICAgIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlBhZ2U6OlJlc291cmNlVHlwZSBy
ZXNvdXJjZVR5cGUgPSBJbnNwZWN0b3JQYWdlQWdlbnQ6OnJlc291cmNlVHlwZUpzb24odHlwZSk7
CiAKICAgICBSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6TmV0d29yazo6SW5pdGlhdG9y
PiBpbml0aWF0b3JPYmplY3QgPSBidWlsZEluaXRpYXRvck9iamVjdChsb2FkZXItPmZyYW1lKCkg
PyBsb2FkZXItPmZyYW1lKCktPmRvY3VtZW50KCkgOiBudWxscHRyKTsKICAgICBtX2Zyb250ZW5k
RGlzcGF0Y2hlci0+cmVxdWVzdFdpbGxCZVNlbnQocmVxdWVzdElkLCBtX3BhZ2VBZ2VudC0+ZnJh
bWVJZChsb2FkZXItPmZyYW1lKCkpLCBtX3BhZ2VBZ2VudC0+bG9hZGVySWQobG9hZGVyKSwgbG9h
ZGVyLT51cmwoKS5zdHJpbmcoKSwgYnVpbGRPYmplY3RGb3JSZXNvdXJjZVJlcXVlc3QocmVxdWVz
dCksIGN1cnJlbnRUaW1lKCksIGluaXRpYXRvck9iamVjdCwgYnVpbGRPYmplY3RGb3JSZXNvdXJj
ZVJlc3BvbnNlKHJlZGlyZWN0UmVzcG9uc2UsIGxvYWRlciksIHR5cGUgIT0gSW5zcGVjdG9yUGFn
ZUFnZW50OjpPdGhlclJlc291cmNlID8gJnJlc291cmNlVHlwZSA6IG51bGxwdHIpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwCmluZGV4IGMz
ODgzNzc4N2E2YzFmMmYzZWZiM2RkYjkxZWY3MjU1NDg1YTlkMTguLjhmMmI4MmI3ZjZiNGJmYTI5
MDk2MzcxYWUyYTBkYTA2N2U3Zjg5NDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHAKQEAgLTE2Niw3ICsxNjYsNyBAQCBzdGF0aWMgUGFz
c1JlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDU1M6OlNvdXJjZVJhbmdlPiBidWlsZFNv
dXJjZVJhbmdlT2JqZQogc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6
Q1NTOjpDU1NNZWRpYT4gYnVpbGRNZWRpYU9iamVjdChjb25zdCBNZWRpYUxpc3QqIG1lZGlhLCBN
ZWRpYUxpc3RTb3VyY2UgbWVkaWFMaXN0U291cmNlLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCkK
IHsKICAgICAvLyBNYWtlIGNlcnRhaW4gY29tcGlsZXJzIGhhcHB5IGJ5IGluaXRpYWxpemluZyB8
c291cmNlfCB1cC1mcm9udC4KLSAgICBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDU1M6OkNTU01l
ZGlhOjpTb3VyY2U6OkVudW0gc291cmNlID0gSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q1NTOjpD
U1NNZWRpYTo6U291cmNlOjpJbmxpbmVTaGVldDsKKyAgICBJbnNwZWN0b3I6OlR5cGVCdWlsZGVy
OjpDU1M6OkNTU01lZGlhOjpTb3VyY2Ugc291cmNlID0gSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6
Q1NTOjpDU1NNZWRpYTo6U291cmNlOjpJbmxpbmVTaGVldDsKICAgICBzd2l0Y2ggKG1lZGlhTGlz
dFNvdXJjZSkgewogICAgIGNhc2UgTWVkaWFMaXN0U291cmNlTWVkaWFSdWxlOgogICAgICAgICBz
b3VyY2UgPSBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDU1M6OkNTU01lZGlhOjpTb3VyY2U6Ok1l
ZGlhUnVsZTsKQEAgLTUyOCw3ICs1MjgsMTMgQEAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlR5cGVC
dWlsZGVyOjpDU1M6OkNTU1N0eWxlPiBJbnNwZWN0b3JTdHlsZTo6c3R5bGVXaXRoUHJvcGUKICAg
ICAgICAgY29uc3QgQ1NTUHJvcGVydHlTb3VyY2VEYXRhJiBwcm9wZXJ0eUVudHJ5ID0gaXQtPnNv
dXJjZURhdGE7CiAgICAgICAgIGNvbnN0IFN0cmluZyYgbmFtZSA9IHByb3BlcnR5RW50cnkubmFt
ZTsKIAotICAgICAgICBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDU1M6OkNTU1Byb3BlcnR5OjpT
dGF0dXM6OkVudW0gc3RhdHVzID0gaXQtPmRpc2FibGVkID8gSW5zcGVjdG9yOjpUeXBlQnVpbGRl
cjo6Q1NTOjpDU1NQcm9wZXJ0eTo6U3RhdHVzOjpEaXNhYmxlZCA6IEluc3BlY3Rvcjo6VHlwZUJ1
aWxkZXI6OkNTUzo6Q1NTUHJvcGVydHk6OlN0YXR1czo6QWN0aXZlOworICAgICAgICAvLyBWaXN1
YWwgU3R1ZGlvIGRpc2FncmVlcyB3aXRoIG90aGVyIGNvbXBpbGVycyBhcyB0byB3aGV0aGVyICdj
bGFzcycgaXMgbmVlZGVkIGhlcmUuCisjaWYgQ09NUElMRVIoTVNWQykKKyAgICAgICAgZW51bSBj
bGFzcyBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDU1M6OkNTU1Byb3BlcnR5U3RhdHVzIHN0YXR1
czsKKyNlbHNlCisgICAgICAgIGVudW0gSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q1NTOjpDU1NQ
cm9wZXJ0eVN0YXR1cyBzdGF0dXM7CisjZW5kaWYKKyAgICAgICAgc3RhdHVzID0gaXQtPmRpc2Fi
bGVkID8gSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q1NTOjpDU1NQcm9wZXJ0eVN0YXR1czo6RGlz
YWJsZWQgOiBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDU1M6OkNTU1Byb3BlcnR5U3RhdHVzOjpB
Y3RpdmU7CiAKICAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNTUzo6Q1NT
UHJvcGVydHk+IHByb3BlcnR5ID0gSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q1NTOjpDU1NQcm9w
ZXJ0eTo6Y3JlYXRlKCkKICAgICAgICAgICAgIC5zZXROYW1lKG5hbWUubG93ZXIoKSkKQEAgLTU3
MSw5ICs1NzcsOSBAQCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNTUzo6Q1NT
U3R5bGU+IEluc3BlY3RvclN0eWxlOjpzdHlsZVdpdGhQcm9wZQogICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKHN1Y2Nlc3NTdGF0dXMgJiYgcHJldmlvdXNTdGF0dXMgIT0gImluYWN0aXZlIikg
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0eUVudHJ5LmltcG9ydGFu
dCB8fCAhc3VjY2Vzc1ByaW9yaXR5KSAvLyBQcmlvcml0eSBub3Qgc2V0ID09ICJub3QgaW1wb3J0
YW50Ii4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvdWxkSW5hY3RpdmF0ZSA9
IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoc3RhdHVzID09IElu
c3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTUHJvcGVydHk6OlN0YXR1czo6QWN0aXZlKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoc3RhdHVzID09IEluc3BlY3Rv
cjo6VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTUHJvcGVydHlTdGF0dXM6OkFjdGl2ZSkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJbmFjdGl2YXRlIGEgbm9uLWltcG9ydGFudCBw
cm9wZXJ0eSBmb2xsb3dpbmcgdGhlIHNhbWUtbmFtZWQgaW1wb3J0YW50IHByb3BlcnR5LgotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSBJbnNwZWN0b3I6OlR5cGVCdWls
ZGVyOjpDU1M6OkNTU1Byb3BlcnR5OjpTdGF0dXM6OkluYWN0aXZlOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzdGF0dXMgPSBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDU1M6OkNT
U1Byb3BlcnR5U3RhdHVzOjpJbmFjdGl2ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7
CkBAIC01ODYsNyArNTkyLDcgQEAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpD
U1M6OkNTU1N0eWxlPiBJbnNwZWN0b3JTdHlsZTo6c3R5bGVXaXRoUHJvcGUKICAgICAgICAgICAg
ICAgICAgICAgcHJvcGVydHlOYW1lVG9QcmV2aW91c0FjdGl2ZVByb3BlcnR5LnNldChjYW5vbmlj
YWxQcm9wZXJ0eU5hbWUsIHByb3BlcnR5KTsKIAogICAgICAgICAgICAgICAgIGlmIChzaG91bGRJ
bmFjdGl2YXRlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGFjdGl2ZUl0LT52YWx1ZS0+c2V0U3Rh
dHVzKEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTUHJvcGVydHk6OlN0YXR1czo6SW5h
Y3RpdmUpOworICAgICAgICAgICAgICAgICAgICBhY3RpdmVJdC0+dmFsdWUtPnNldFN0YXR1cyhJ
bnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDU1M6OkNTU1Byb3BlcnR5U3RhdHVzOjpJbmFjdGl2ZSk7
CiAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZVRvUHJldmlvdXNBY3RpdmVQcm9wZXJ0
eS5zZXQoY2Fub25pY2FsUHJvcGVydHlOYW1lLCBwcm9wZXJ0eSk7CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgfSBlbHNlIHsKQEAgLTU5NCw3ICs2MDAsNyBAQCBQYXNzUmVmUHRyPElu
c3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTU3R5bGU+IEluc3BlY3RvclN0eWxlOjpzdHls
ZVdpdGhQcm9wZQogICAgICAgICAgICAgICAgIC8vIERlZmF1bHQgImltcGxpY2l0IiA9PSBmYWxz
ZS4KICAgICAgICAgICAgICAgICBpZiAoaW1wbGljaXQpCiAgICAgICAgICAgICAgICAgICAgIHBy
b3BlcnR5LT5zZXRJbXBsaWNpdCh0cnVlKTsKLSAgICAgICAgICAgICAgICBzdGF0dXMgPSBJbnNw
ZWN0b3I6OlR5cGVCdWlsZGVyOjpDU1M6OkNTU1Byb3BlcnR5OjpTdGF0dXM6OlN0eWxlOworICAg
ICAgICAgICAgICAgIHN0YXR1cyA9IEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTUHJv
cGVydHlTdGF0dXM6OlN0eWxlOwogCiAgICAgICAgICAgICAgICAgU3RyaW5nIHNob3J0aGFuZCA9
IG1fc3R5bGUtPmdldFByb3BlcnR5U2hvcnRoYW5kKG5hbWUpOwogICAgICAgICAgICAgICAgIGlm
ICghc2hvcnRoYW5kLmlzRW1wdHkoKSkgewpAQCAtNjEwLDcgKzYxNiw3IEBAIFBhc3NSZWZQdHI8
SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q1NTOjpDU1NTdHlsZT4gSW5zcGVjdG9yU3R5bGU6OnN0
eWxlV2l0aFByb3BlCiAgICAgICAgIH0KIAogICAgICAgICAvLyBEZWZhdWx0ICJzdGF0dXMiID09
ICJzdHlsZSIuCi0gICAgICAgIGlmIChzdGF0dXMgIT0gSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6
Q1NTOjpDU1NQcm9wZXJ0eTo6U3RhdHVzOjpTdHlsZSkKKyAgICAgICAgaWYgKHN0YXR1cyAhPSBJ
bnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDU1M6OkNTU1Byb3BlcnR5U3RhdHVzOjpTdHlsZSkKICAg
ICAgICAgICAgIHByb3BlcnR5LT5zZXRTdGF0dXMoc3RhdHVzKTsKICAgICB9CiAKQEAgLTc0OSw3
ICs3NTUsNyBAQCBOZXdMaW5lQW5kV2hpdGVzcGFjZSYgSW5zcGVjdG9yU3R5bGU6Om5ld0xpbmVB
bmRXaGl0ZXNwYWNlRGVsaW1pdGVycygpIGNvbnN0CiAgICAgcmV0dXJuIG1fZm9ybWF0OwogfQog
Ci1QYXNzUmVmUHRyPEluc3BlY3RvclN0eWxlU2hlZXQ+IEluc3BlY3RvclN0eWxlU2hlZXQ6OmNy
ZWF0ZShJbnNwZWN0b3JQYWdlQWdlbnQqIHBhZ2VBZ2VudCwgY29uc3QgU3RyaW5nJiBpZCwgUGFz
c1JlZlB0cjxDU1NTdHlsZVNoZWV0PiBwYWdlU3R5bGVTaGVldCwgSW5zcGVjdG9yOjpUeXBlQnVp
bGRlcjo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luOjpFbnVtIG9yaWdpbiwgY29uc3QgU3RyaW5nJiBk
b2N1bWVudFVSTCwgTGlzdGVuZXIqIGxpc3RlbmVyKQorUGFzc1JlZlB0cjxJbnNwZWN0b3JTdHls
ZVNoZWV0PiBJbnNwZWN0b3JTdHlsZVNoZWV0OjpjcmVhdGUoSW5zcGVjdG9yUGFnZUFnZW50KiBw
YWdlQWdlbnQsIGNvbnN0IFN0cmluZyYgaWQsIFBhc3NSZWZQdHI8Q1NTU3R5bGVTaGVldD4gcGFn
ZVN0eWxlU2hlZXQsIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNTUzo6U3R5bGVTaGVldE9yaWdp
biBvcmlnaW4sIGNvbnN0IFN0cmluZyYgZG9jdW1lbnRVUkwsIExpc3RlbmVyKiBsaXN0ZW5lcikK
IHsKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEluc3BlY3RvclN0eWxlU2hlZXQocGFnZUFnZW50
LCBpZCwgcGFnZVN0eWxlU2hlZXQsIG9yaWdpbiwgZG9jdW1lbnRVUkwsIGxpc3RlbmVyKSk7CiB9
CkBAIC03NjIsNyArNzY4LDcgQEAgU3RyaW5nIEluc3BlY3RvclN0eWxlU2hlZXQ6OnN0eWxlU2hl
ZXRVUkwoQ1NTU3R5bGVTaGVldCogcGFnZVN0eWxlU2hlZXQpCiAgICAgcmV0dXJuIGVtcHR5U3Ry
aW5nKCk7CiB9CiAKLUluc3BlY3RvclN0eWxlU2hlZXQ6Okluc3BlY3RvclN0eWxlU2hlZXQoSW5z
cGVjdG9yUGFnZUFnZW50KiBwYWdlQWdlbnQsIGNvbnN0IFN0cmluZyYgaWQsIFBhc3NSZWZQdHI8
Q1NTU3R5bGVTaGVldD4gcGFnZVN0eWxlU2hlZXQsIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNT
Uzo6U3R5bGVTaGVldE9yaWdpbjo6RW51bSBvcmlnaW4sIGNvbnN0IFN0cmluZyYgZG9jdW1lbnRV
UkwsIExpc3RlbmVyKiBsaXN0ZW5lcikKK0luc3BlY3RvclN0eWxlU2hlZXQ6Okluc3BlY3RvclN0
eWxlU2hlZXQoSW5zcGVjdG9yUGFnZUFnZW50KiBwYWdlQWdlbnQsIGNvbnN0IFN0cmluZyYgaWQs
IFBhc3NSZWZQdHI8Q1NTU3R5bGVTaGVldD4gcGFnZVN0eWxlU2hlZXQsIEluc3BlY3Rvcjo6VHlw
ZUJ1aWxkZXI6OkNTUzo6U3R5bGVTaGVldE9yaWdpbiBvcmlnaW4sIGNvbnN0IFN0cmluZyYgZG9j
dW1lbnRVUkwsIExpc3RlbmVyKiBsaXN0ZW5lcikKICAgICA6IG1fcGFnZUFnZW50KHBhZ2VBZ2Vu
dCkKICAgICAsIG1faWQoaWQpCiAgICAgLCBtX3BhZ2VTdHlsZVNoZWV0KHBhZ2VTdHlsZVNoZWV0
KQpAQCAtMTQyNiwxMiArMTQzMiwxMiBAQCB2b2lkIEluc3BlY3RvclN0eWxlU2hlZXQ6OmNvbGxl
Y3RGbGF0UnVsZXMoUGFzc1JlZlB0cjxDU1NSdWxlTGlzdD4gcnVsZUxpc3QsIENTUwogICAgIH0K
IH0KIAotUGFzc1JlZlB0cjxJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU+IEluc3Bl
Y3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZTo6Y3JlYXRlKEluc3BlY3RvclBhZ2VBZ2VudCog
cGFnZUFnZW50LCBjb25zdCBTdHJpbmcmIGlkLCBQYXNzUmVmUHRyPEVsZW1lbnQ+IGVsZW1lbnQs
IEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6RW51bSBvcmln
aW4sIExpc3RlbmVyKiBsaXN0ZW5lcikKK1Bhc3NSZWZQdHI8SW5zcGVjdG9yU3R5bGVTaGVldEZv
cklubGluZVN0eWxlPiBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU6OmNyZWF0ZShJ
bnNwZWN0b3JQYWdlQWdlbnQqIHBhZ2VBZ2VudCwgY29uc3QgU3RyaW5nJiBpZCwgUGFzc1JlZlB0
cjxFbGVtZW50PiBlbGVtZW50LCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDU1M6OlN0eWxlU2hl
ZXRPcmlnaW4gb3JpZ2luLCBMaXN0ZW5lciogbGlzdGVuZXIpCiB7CiAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGUocGFnZUFnZW50LCBpZCwg
ZWxlbWVudCwgb3JpZ2luLCBsaXN0ZW5lcikpOwogfQogCi1JbnNwZWN0b3JTdHlsZVNoZWV0Rm9y
SW5saW5lU3R5bGU6Okluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZShJbnNwZWN0b3JQ
YWdlQWdlbnQqIHBhZ2VBZ2VudCwgY29uc3QgU3RyaW5nJiBpZCwgUGFzc1JlZlB0cjxFbGVtZW50
PiBlbGVtZW50LCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW46
OkVudW0gb3JpZ2luLCBMaXN0ZW5lciogbGlzdGVuZXIpCitJbnNwZWN0b3JTdHlsZVNoZWV0Rm9y
SW5saW5lU3R5bGU6Okluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZShJbnNwZWN0b3JQ
YWdlQWdlbnQqIHBhZ2VBZ2VudCwgY29uc3QgU3RyaW5nJiBpZCwgUGFzc1JlZlB0cjxFbGVtZW50
PiBlbGVtZW50LCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW4g
b3JpZ2luLCBMaXN0ZW5lciogbGlzdGVuZXIpCiAgICAgOiBJbnNwZWN0b3JTdHlsZVNoZWV0KHBh
Z2VBZ2VudCwgaWQsIG51bGxwdHIsIG9yaWdpbiwgIiIsIGxpc3RlbmVyKQogICAgICwgbV9lbGVt
ZW50KGVsZW1lbnQpCiAgICAgLCBtX3J1bGVTb3VyY2VEYXRhKG51bGxwdHIpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5oIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuaAppbmRleCA4YjE5MWZlMDg0
MzliNWY4ZTc3YTI3NTk1OTdlNjMzZGE5OWUwZjRmLi4wY2E1YTUzYWVlNWMzODMzZmY5ODViOWIx
MzU3OTQzMDk4NzIwNTZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yU3R5bGVTaGVldC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JTdHlsZVNoZWV0LmgKQEAgLTE4MSw3ICsxODEsNyBAQCBwdWJsaWM6CiAgICAgfTsKIAogICAg
IHR5cGVkZWYgSGFzaE1hcDxDU1NTdHlsZURlY2xhcmF0aW9uKiwgUmVmUHRyPEluc3BlY3RvclN0
eWxlPj4gSW5zcGVjdG9yU3R5bGVNYXA7Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9y
U3R5bGVTaGVldD4gY3JlYXRlKEluc3BlY3RvclBhZ2VBZ2VudCosIGNvbnN0IFN0cmluZyYgaWQs
IFBhc3NSZWZQdHI8Q1NTU3R5bGVTaGVldD4gcGFnZVN0eWxlU2hlZXQsIEluc3BlY3Rvcjo6VHlw
ZUJ1aWxkZXI6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6RW51bSwgY29uc3QgU3RyaW5nJiBkb2N1
bWVudFVSTCwgTGlzdGVuZXIqKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JTdHls
ZVNoZWV0PiBjcmVhdGUoSW5zcGVjdG9yUGFnZUFnZW50KiwgY29uc3QgU3RyaW5nJiBpZCwgUGFz
c1JlZlB0cjxDU1NTdHlsZVNoZWV0PiBwYWdlU3R5bGVTaGVldCwgSW5zcGVjdG9yOjpUeXBlQnVp
bGRlcjo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luLCBjb25zdCBTdHJpbmcmIGRvY3VtZW50VVJMLCBM
aXN0ZW5lciopOwogICAgIHN0YXRpYyBTdHJpbmcgc3R5bGVTaGVldFVSTChDU1NTdHlsZVNoZWV0
KiBwYWdlU3R5bGVTaGVldCk7CiAKICAgICB2aXJ0dWFsIH5JbnNwZWN0b3JTdHlsZVNoZWV0KCk7
CkBAIC0yMTIsNyArMjEyLDcgQEAgcHVibGljOgogICAgIEluc3BlY3RvckNTU0lkIHN0eWxlSWQo
Q1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUpIGNvbnN0IHsgcmV0dXJuIHJ1bGVPclN0eWxlSWQo
c3R5bGUpOyB9CiAKIHByb3RlY3RlZDoKLSAgICBJbnNwZWN0b3JTdHlsZVNoZWV0KEluc3BlY3Rv
clBhZ2VBZ2VudCosIGNvbnN0IFN0cmluZyYgaWQsIFBhc3NSZWZQdHI8Q1NTU3R5bGVTaGVldD4g
cGFnZVN0eWxlU2hlZXQsIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNTUzo6U3R5bGVTaGVldE9y
aWdpbjo6RW51bSwgY29uc3QgU3RyaW5nJiBkb2N1bWVudFVSTCwgTGlzdGVuZXIqKTsKKyAgICBJ
bnNwZWN0b3JTdHlsZVNoZWV0KEluc3BlY3RvclBhZ2VBZ2VudCosIGNvbnN0IFN0cmluZyYgaWQs
IFBhc3NSZWZQdHI8Q1NTU3R5bGVTaGVldD4gcGFnZVN0eWxlU2hlZXQsIEluc3BlY3Rvcjo6VHlw
ZUJ1aWxkZXI6OkNTUzo6U3R5bGVTaGVldE9yaWdpbiwgY29uc3QgU3RyaW5nJiBkb2N1bWVudFVS
TCwgTGlzdGVuZXIqKTsKIAogICAgIGJvb2wgY2FuQmluZCgpIGNvbnN0IHsgcmV0dXJuIG1fb3Jp
Z2luICE9IEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6VXNl
ckFnZW50ICYmIG1fb3JpZ2luICE9IEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNTUzo6U3R5bGVT
aGVldE9yaWdpbjo6VXNlcjsgfQogICAgIEluc3BlY3RvckNTU0lkIHJ1bGVPclN0eWxlSWQoQ1NT
U3R5bGVEZWNsYXJhdGlvbiogc3R5bGUpIGNvbnN0OwpAQCAtMjQ4LDcgKzI0OCw3IEBAIHByaXZh
dGU6CiAgICAgSW5zcGVjdG9yUGFnZUFnZW50KiBtX3BhZ2VBZ2VudDsKICAgICBTdHJpbmcgbV9p
ZDsKICAgICBSZWZQdHI8Q1NTU3R5bGVTaGVldD4gbV9wYWdlU3R5bGVTaGVldDsKLSAgICBJbnNw
ZWN0b3I6OlR5cGVCdWlsZGVyOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW46OkVudW0gbV9vcmlnaW47
CisgICAgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luIG1fb3Jp
Z2luOwogICAgIFN0cmluZyBtX2RvY3VtZW50VVJMOwogICAgIGJvb2wgbV9pc1JldmFsaWRhdGlu
ZzsKICAgICBQYXJzZWRTdHlsZVNoZWV0KiBtX3BhcnNlZFN0eWxlU2hlZXQ7CkBAIC0yNTksMTQg
KzI1OSwxNCBAQCBwcml2YXRlOgogCiBjbGFzcyBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5l
U3R5bGUgOiBwdWJsaWMgSW5zcGVjdG9yU3R5bGVTaGVldCB7CiBwdWJsaWM6Ci0gICAgc3RhdGlj
IFBhc3NSZWZQdHI8SW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlPiBjcmVhdGUoSW5z
cGVjdG9yUGFnZUFnZW50KiwgY29uc3QgU3RyaW5nJiBpZCwgUGFzc1JlZlB0cjxFbGVtZW50Piwg
SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luOjpFbnVtLCBMaXN0
ZW5lciopOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxp
bmVTdHlsZT4gY3JlYXRlKEluc3BlY3RvclBhZ2VBZ2VudCosIGNvbnN0IFN0cmluZyYgaWQsIFBh
c3NSZWZQdHI8RWxlbWVudD4sIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNTUzo6U3R5bGVTaGVl
dE9yaWdpbiwgTGlzdGVuZXIqKTsKIAogICAgIHZvaWQgZGlkTW9kaWZ5RWxlbWVudEF0dHJpYnV0
ZSgpOwogICAgIHZpcnR1YWwgYm9vbCBnZXRUZXh0KFN0cmluZyogcmVzdWx0KSBjb25zdCBvdmVy
cmlkZTsKICAgICB2aXJ0dWFsIENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlRm9ySWQoY29uc3Qg
SW5zcGVjdG9yQ1NTSWQmIGlkKSBjb25zdCBvdmVycmlkZSB7IEFTU0VSVF9VTlVTRUQoaWQsICFp
ZC5vcmRpbmFsKCkpOyByZXR1cm4gaW5saW5lU3R5bGUoKTsgfQogCiBwcm90ZWN0ZWQ6Ci0gICAg
SW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlKEluc3BlY3RvclBhZ2VBZ2VudCosIGNv
bnN0IFN0cmluZyYgaWQsIFBhc3NSZWZQdHI8RWxlbWVudD4sIEluc3BlY3Rvcjo6VHlwZUJ1aWxk
ZXI6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6RW51bSwgTGlzdGVuZXIqKTsKKyAgICBJbnNwZWN0
b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGUoSW5zcGVjdG9yUGFnZUFnZW50KiwgY29uc3QgU3Ry
aW5nJiBpZCwgUGFzc1JlZlB0cjxFbGVtZW50PiwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q1NT
OjpTdHlsZVNoZWV0T3JpZ2luLCBMaXN0ZW5lciopOwogCiAgICAgdmlydHVhbCBEb2N1bWVudCog
b3duZXJEb2N1bWVudCgpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgUmVmUHRyPENTU1J1
bGVTb3VyY2VEYXRhPiBydWxlU291cmNlRGF0YUZvcihDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHls
ZSkgY29uc3Qgb3ZlcnJpZGUgeyBBU1NFUlRfVU5VU0VEKHN0eWxlLCBzdHlsZSA9PSBpbmxpbmVT
dHlsZSgpKTsgcmV0dXJuIG1fcnVsZVNvdXJjZURhdGE7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JUaW1lbGluZUFnZW50LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JUaW1lbGluZUFnZW50LmNwcAppbmRleCAyNDI2OTc0ZjQ3
MDZhNzFiZjk3ZjlkMjQyNWM3M2NkNDI5OTk0YTE0Li5hY2U1NjNmZTYyOTEzZmNhZWUwMjNiYzc1
MmVkMTFmOTc2MmQyNTE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yVGltZWxpbmVBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvclRpbWVsaW5lQWdlbnQuY3BwCkBAIC01NTQsNyArNTU0LDcgQEAgdm9pZCBJbnNwZWN0
b3JUaW1lbGluZUFnZW50OjpicmVha3BvaW50QWN0aW9uUHJvYmUoSlNDOjpFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IEkKICAgICBhcHBlbmRSZWNvcmQoVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVh
dGVQcm9iZVNhbXBsZURhdGEoYWN0aW9uLCBoaXRDb3VudCksIFRpbWVsaW5lUmVjb3JkVHlwZTo6
UHJvYmVTYW1wbGUsIGZhbHNlLCBmcmFtZUZyb21FeGVjU3RhdGUoZXhlYykpOwogfQogCi1zdGF0
aWMgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6VGltZWxpbmU6OkV2ZW50VHlwZTo6RW51bSB0b1By
b3RvY29sKFRpbWVsaW5lUmVjb3JkVHlwZSB0eXBlKQorc3RhdGljIEluc3BlY3Rvcjo6VHlwZUJ1
aWxkZXI6OlRpbWVsaW5lOjpFdmVudFR5cGUgdG9Qcm90b2NvbChUaW1lbGluZVJlY29yZFR5cGUg
dHlwZSkKIHsKICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICBjYXNlIFRpbWVsaW5lUmVjb3JkVHlw
ZTo6RXZlbnREaXNwYXRjaDoKQEAgLTY0Niw3ICs2NDYsNyBAQCB2b2lkIEluc3BlY3RvclRpbWVs
aW5lQWdlbnQ6OmFkZFJlY29yZFRvVGltZWxpbmUoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHBycAogewogICAgIHBycFJlY29yZC0+c2V0U3RyaW5nKCJ0eXBlIiwgSW5zcGVjdG9yOjpUeXBl
QnVpbGRlcjo6Z2V0V2ViRW51bUNvbnN0YW50VmFsdWUodG9Qcm90b2NvbCh0eXBlKSkpOwogCi0g
ICAgUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlRpbWVsaW5lOjpUaW1lbGluZUV2ZW50
PiByZWNvcmQgPSBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpUaW1lbGluZTo6VGltZWxpbmVFdmVu
dDo6cnVudGltZUNhc3QocHJwUmVjb3JkKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVp
bGRlcjo6VGltZWxpbmU6OlRpbWVsaW5lRXZlbnQ+IHJlY29yZCA9IEJpbmRpbmdUcmFpdHM8SW5z
cGVjdG9yOjpUeXBlQnVpbGRlcjo6VGltZWxpbmU6OlRpbWVsaW5lRXZlbnQ+OjpydW50aW1lQ2Fz
dChwcnBSZWNvcmQpOwogCiAgICAgaWYgKG1fcmVjb3JkU3RhY2suaXNFbXB0eSgpKQogICAgICAg
ICBzZW5kRXZlbnQocmVjb3JkLnJlbGVhc2UoKSk7CkBAIC03MTQsNyArNzE0LDcgQEAgdm9pZCBJ
bnNwZWN0b3JUaW1lbGluZUFnZW50OjpzZW5kRXZlbnQoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IGV2ZW50KQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBGSVhNRTogcnVudGltZUNhc3Qg
aXMgYSBoYWNrLiBXZSBkbyBpdCBiZWNhdXNlIHdlIGNhbid0IGJ1aWxkIFRpbWVsaW5lRXZlbnQg
ZGlyZWN0bHkgbm93LgotICAgIFJlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpUaW1lbGlu
ZTo6VGltZWxpbmVFdmVudD4gcmVjb3JkQ2hlY2tlZCA9IEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6
OlRpbWVsaW5lOjpUaW1lbGluZUV2ZW50OjpydW50aW1lQ2FzdChldmVudCk7CisgICAgUmVmUHRy
PEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlRpbWVsaW5lOjpUaW1lbGluZUV2ZW50PiByZWNvcmRD
aGVja2VkID0gQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpUaW1lbGluZTo6
VGltZWxpbmVFdmVudD46OnJ1bnRpbWVDYXN0KGV2ZW50KTsKICAgICBtX2Zyb250ZW5kRGlzcGF0
Y2hlci0+ZXZlbnRSZWNvcmRlZChyZWNvcmRDaGVja2VkLnJlbGVhc2UoKSk7CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9DU1MuanNvbiBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9DU1MuanNvbgppbmRleCBjYTkwY2Y3NDFiZjZj
MWI4OTM2ODdhZmUxZjYwZTA0ZTQwMmRjODRjLi45YzViMjc1NDVlYjliY2E3OGFkOWUyZTNlY2Fm
NjAyNDljYmZjNjAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvcHJvdG9j
b2wvQ1NTLmpzb24KKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL3Byb3RvY29sL0NTUy5q
c29uCkBAIC0xNjMsNiArMTYzLDEyIEBACiAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiQ1NT
IHN0eWxlIHJlcHJlc2VudGF0aW9uLiIKICAgICAgICAgfSwKICAgICAgICAgeworICAgICAgICAg
ICAgImlkIjogIkNTU1Byb3BlcnR5U3RhdHVzIiwKKwkgICAgInR5cGUiOiAic3RyaW5nIiwKKyAg
ICAgICAgICAgICJlbnVtIjogWyJhY3RpdmUiLCAiaW5hY3RpdmUiLCAiZGlzYWJsZWQiLCAic3R5
bGUiXSwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJUaGUgcHJvcGVydHkgc3RhdHVzOiBc
ImFjdGl2ZVwiIGlmIHRoZSBwcm9wZXJ0eSBpcyBlZmZlY3RpdmUgaW4gdGhlIHN0eWxlLCBcImlu
YWN0aXZlXCIgaWYgdGhlIHByb3BlcnR5IGlzIG92ZXJyaWRkZW4gYnkgYSBzYW1lLW5hbWVkIHBy
b3BlcnR5IGluIHRoaXMgc3R5bGUgbGF0ZXIgb24sIFwiZGlzYWJsZWRcIiBpZiB0aGUgcHJvcGVy
dHkgaXMgZGlzYWJsZWQgYnkgdGhlIHVzZXIsIFwic3R5bGVcIiAoaW1wbGllZCBpZiBhYnNlbnQp
IGlmIHRoZSBwcm9wZXJ0eSBpcyByZXBvcnRlZCBieSB0aGUgYnJvd3NlciByYXRoZXIgdGhhbiBi
eSB0aGUgQ1NTIHNvdXJjZSBwYXJzZXIuIgorICAgICAgICB9LAorICAgICAgICB7CiAgICAgICAg
ICAgICAiaWQiOiAiQ1NTUHJvcGVydHkiLAogICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwK
ICAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWwpAQCAtMTcyLDcgKzE3OCw3IEBACiAgICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJpbXBsaWNpdCIsICJ0eXBlIjogImJvb2xlYW4iLCAib3B0aW9u
YWwiOiB0cnVlLCAiZGVzY3JpcHRpb24iOiAiV2hldGhlciB0aGUgcHJvcGVydHkgaXMgaW1wbGlj
aXQgKGltcGxpZXMgPGNvZGU+ZmFsc2U8L2NvZGU+IGlmIGFic2VudCkuIiB9LAogICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAidGV4dCIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IHRy
dWUsICJkZXNjcmlwdGlvbiI6ICJUaGUgZnVsbCBwcm9wZXJ0eSB0ZXh0IGFzIHNwZWNpZmllZCBp
biB0aGUgc3R5bGUuIiB9LAogICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicGFyc2VkT2siLCAi
dHlwZSI6ICJib29sZWFuIiwgIm9wdGlvbmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9uIjogIldoZXRo
ZXIgdGhlIHByb3BlcnR5IGlzIHVuZGVyc3Rvb2QgYnkgdGhlIGJyb3dzZXIgKGltcGxpZXMgPGNv
ZGU+dHJ1ZTwvY29kZT4gaWYgYWJzZW50KS4iIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJzdGF0dXMiLCAidHlwZSI6ICJzdHJpbmciLCAiZW51bSI6IFsiYWN0aXZlIiwgImluYWN0aXZl
IiwgImRpc2FibGVkIiwgInN0eWxlIl0sICJvcHRpb25hbCI6IHRydWUsICJkZXNjcmlwdGlvbiI6
ICJUaGUgcHJvcGVydHkgc3RhdHVzOiBcImFjdGl2ZVwiIGlmIHRoZSBwcm9wZXJ0eSBpcyBlZmZl
Y3RpdmUgaW4gdGhlIHN0eWxlLCBcImluYWN0aXZlXCIgaWYgdGhlIHByb3BlcnR5IGlzIG92ZXJy
aWRkZW4gYnkgYSBzYW1lLW5hbWVkIHByb3BlcnR5IGluIHRoaXMgc3R5bGUgbGF0ZXIgb24sIFwi
ZGlzYWJsZWRcIiBpZiB0aGUgcHJvcGVydHkgaXMgZGlzYWJsZWQgYnkgdGhlIHVzZXIsIFwic3R5
bGVcIiAoaW1wbGllZCBpZiBhYnNlbnQpIGlmIHRoZSBwcm9wZXJ0eSBpcyByZXBvcnRlZCBieSB0
aGUgYnJvd3NlciByYXRoZXIgdGhhbiBieSB0aGUgQ1NTIHNvdXJjZSBwYXJzZXIuIiB9LAorICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAic3RhdHVzIiwgIiRyZWYiOiAiQ1NTUHJvcGVydHlTdGF0
dXMiLCAib3B0aW9uYWwiOiB0cnVlLCAiZGVzY3JpcHRpb24iOiAiV2hldGhlciB0aGUgcHJvcGVy
dHkgaXMgYWN0aXZlIG9yIGRpc2FibGVkLiIgfSwKICAgICAgICAgICAgICAgICB7ICJuYW1lIjog
InJhbmdlIiwgIiRyZWYiOiAiU291cmNlUmFuZ2UiLCAib3B0aW9uYWwiOiB0cnVlLCAiZGVzY3Jp
cHRpb24iOiAiVGhlIGVudGlyZSBwcm9wZXJ0eSByYW5nZSBpbiB0aGUgZW5jbG9zaW5nIHN0eWxl
IGRlY2xhcmF0aW9uIChpZiBhdmFpbGFibGUpLiIgfQogICAgICAgICAgICAgXSwKICAgICAgICAg
ICAgICJkZXNjcmlwdGlvbiI6ICJDU1Mgc3R5bGUgZWZmZWN0aXZlIHZpc3VhbCBkaW1lbnNpb25z
IGFuZCBzb3VyY2Ugb2Zmc2V0cy4iCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvcHJvdG9jb2wvUGFnZS5qc29uIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL3Byb3RvY29s
L1BhZ2UuanNvbgppbmRleCAzYWZkYmMwY2QzZDI3ZDUxNjRkMjZlOGJkMzJjNGQ3NmZkZmRkMjc1
Li44OGE3NmM0NmYyYmVmY2RhNGRiMWE0NTA0ZjcyZjJlMjJkNjcxNTAwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvUGFnZS5qc29uCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9QYWdlLmpzb24KQEAgLTI5LDI2ICsyOSwyNSBAQAog
ICAgICAgICAgICAgXQogICAgICAgICB9LAogICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAi
RnJhbWVSZXNvdXJjZSIsCisgICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAorICAgICAgICAg
ICAgInByb3BlcnRpZXMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ1cmwiLCAidHlw
ZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRpb24iOiAiUmVzb3VyY2UgVVJMLiIgfSwKKyAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogInR5cGUiLCAiJHJlZiI6ICJSZXNvdXJjZVR5cGUiLCAiZGVzY3Jp
cHRpb24iOiAiVHlwZSBvZiB0aGlzIHJlc291cmNlLiIgfSwKKyAgICAgICAgICAgICAgICB7ICJu
YW1lIjogIm1pbWVUeXBlIiwgInR5cGUiOiAic3RyaW5nIiwgImRlc2NyaXB0aW9uIjogIlJlc291
cmNlIG1pbWVUeXBlIGFzIGRldGVybWluZWQgYnkgdGhlIGJyb3dzZXIuIiB9LAorICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAiZmFpbGVkIiwgInR5cGUiOiAiYm9vbGVhbiIsICJvcHRpb25hbCI6
IHRydWUsICJkZXNjcmlwdGlvbiI6ICJUcnVlIGlmIHRoZSByZXNvdXJjZSBmYWlsZWQgdG8gbG9h
ZC4iIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjYW5jZWxlZCIsICJ0eXBlIjogImJv
b2xlYW4iLCAib3B0aW9uYWwiOiB0cnVlLCAiZGVzY3JpcHRpb24iOiAiVHJ1ZSBpZiB0aGUgcmVz
b3VyY2Ugd2FzIGNhbmNlbGVkIGR1cmluZyBsb2FkaW5nLiIgfSwKKyAgICAgICAgICAgICAgICB7
ICJuYW1lIjogInNvdXJjZU1hcFVSTCIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IHRy
dWUsICJkZXNjcmlwdGlvbiI6ICJVUkwgb2Ygc291cmNlIG1hcCBhc3NvY2lhdGVkIHdpdGggdGhp
cyByZXNvdXJjZSAoaWYgYW55KS4iIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAg
ICAgewogICAgICAgICAgICAgImlkIjogIkZyYW1lUmVzb3VyY2VUcmVlIiwKICAgICAgICAgICAg
ICJ0eXBlIjogIm9iamVjdCIsCiAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiSW5mb3JtYXRp
b24gYWJvdXQgdGhlIEZyYW1lIGhpZXJhcmNoeSBhbG9uZyB3aXRoIHRoZWlyIGNhY2hlZCByZXNv
dXJjZXMuIiwKICAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWwogICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAiZnJhbWUiLCAiJHJlZiI6ICJGcmFtZSIsICJkZXNjcmlwdGlvbiI6ICJGcmFtZSBp
bmZvcm1hdGlvbiBmb3IgdGhpcyB0cmVlIGl0ZW0uIiB9LAogICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAiY2hpbGRGcmFtZXMiLCAidHlwZSI6ICJhcnJheSIsICJvcHRpb25hbCI6IHRydWUsICJp
dGVtcyI6IHsgIiRyZWYiOiAiRnJhbWVSZXNvdXJjZVRyZWUiIH0sICJkZXNjcmlwdGlvbiI6ICJD
aGlsZCBmcmFtZXMuIiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicmVzb3VyY2VzIiwg
InR5cGUiOiAiYXJyYXkiLAotICAgICAgICAgICAgICAgICAgICAiaXRlbXMiOiB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAotICAgICAgICAgICAgICAgICAgICAg
ICAgInByb3BlcnRpZXMiOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJ1cmwiLCAidHlwZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRpb24iOiAiUmVzb3VyY2UgVVJMLiIg
fSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInR5cGUiLCAiJHJlZiI6
ICJSZXNvdXJjZVR5cGUiLCAiZGVzY3JpcHRpb24iOiAiVHlwZSBvZiB0aGlzIHJlc291cmNlLiIg
fSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm1pbWVUeXBlIiwgInR5
cGUiOiAic3RyaW5nIiwgImRlc2NyaXB0aW9uIjogIlJlc291cmNlIG1pbWVUeXBlIGFzIGRldGVy
bWluZWQgYnkgdGhlIGJyb3dzZXIuIiB9LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAiZmFpbGVkIiwgInR5cGUiOiAiYm9vbGVhbiIsICJvcHRpb25hbCI6IHRydWUsICJk
ZXNjcmlwdGlvbiI6ICJUcnVlIGlmIHRoZSByZXNvdXJjZSBmYWlsZWQgdG8gbG9hZC4iIH0sCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjYW5jZWxlZCIsICJ0eXBlIjog
ImJvb2xlYW4iLCAib3B0aW9uYWwiOiB0cnVlLCAiZGVzY3JpcHRpb24iOiAiVHJ1ZSBpZiB0aGUg
cmVzb3VyY2Ugd2FzIGNhbmNlbGVkIGR1cmluZyBsb2FkaW5nLiIgfSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogInNvdXJjZU1hcFVSTCIsICJ0eXBlIjogInN0cmluZyIs
ICJvcHRpb25hbCI6IHRydWUsICJkZXNjcmlwdGlvbiI6ICJVUkwgb2Ygc291cmNlIG1hcCBhc3Nv
Y2lhdGVkIHdpdGggdGhpcyByZXNvdXJjZSAoaWYgYW55KS4iIH0KLSAgICAgICAgICAgICAgICAg
ICAgICAgIF0KLSAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgImRl
c2NyaXB0aW9uIjogIkluZm9ybWF0aW9uIGFib3V0IGZyYW1lIHJlc291cmNlcy4iCi0gICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicmVzb3VyY2VzIiwgInR5cGUi
OiAiYXJyYXkiLCAiaXRlbXMiOiB7ICIkcmVmIjogIkZyYW1lUmVzb3VyY2UiIH0sICJkZXNjcmlw
dGlvbiI6ICJJbmZvcm1hdGlvbiBhYm91dCBmcmFtZSByZXNvdXJjZXMuIiB9CiAgICAgICAgICAg
ICBdCiAgICAgICAgIH0sCiAgICAgICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0
b3JVSS9WZXJzaW9ucy9JbnNwZWN0b3ItaU9TLTYuMC5qc29uIGIvU291cmNlL1dlYkluc3BlY3Rv
clVJL1ZlcnNpb25zL0luc3BlY3Rvci1pT1MtNi4wLmpzb24KaW5kZXggMTQ4Mzc4MWJhNTBiMTgx
MWQ3ZDZjYWZjZDUwYTQxMTRhOWFjOWQwNS4uMzUwMjQ1ZmY4YjY5ZjA4NTJmNDAxMDFhZDFkN2Y4
NTkzMTEwYzdiMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1ZlcnNpb25zL0lu
c3BlY3Rvci1pT1MtNi4wLmpzb24KKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1ZlcnNpb25z
L0luc3BlY3Rvci1pT1MtNi4wLmpzb24KQEAgLTY4LDI1ICs2OCwyNCBAQAogICAgICAgICAgICAg
ICAgIF0KICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgImlk
IjogIkZyYW1lUmVzb3VyY2UiLAorICAgICAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCisg
ICAgICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCisgICAgICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAidXJsIiwgInR5cGUiOiAic3RyaW5nIiwgImRlc2NyaXB0aW9uIjogIlJlc291cmNlIFVS
TC4iIH0sCisgICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidHlwZSIsICIkcmVmIjogIlJl
c291cmNlVHlwZSIsICJkZXNjcmlwdGlvbiI6ICJUeXBlIG9mIHRoaXMgcmVzb3VyY2UuIiB9LAor
ICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm1pbWVUeXBlIiwgInR5cGUiOiAic3RyaW5n
IiwgImRlc2NyaXB0aW9uIjogIlJlc291cmNlIG1pbWVUeXBlIGFzIGRldGVybWluZWQgYnkgdGhl
IGJyb3dzZXIuIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogImZhaWxlZCIsICJ0
eXBlIjogImJvb2xlYW4iLCAib3B0aW9uYWwiOiB0cnVlLCAiZGVzY3JpcHRpb24iOiAiVHJ1ZSBp
ZiB0aGUgcmVzb3VyY2UgZmFpbGVkIHRvIGxvYWQuIiB9LAorICAgICAgICAgICAgICAgICAgICB7
ICJuYW1lIjogImNhbmNlbGVkIiwgInR5cGUiOiAiYm9vbGVhbiIsICJvcHRpb25hbCI6IHRydWUs
ICJkZXNjcmlwdGlvbiI6ICJUcnVlIGlmIHRoZSByZXNvdXJjZSB3YXMgY2FuY2VsZWQgZHVyaW5n
IGxvYWRpbmcuIiB9CisgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgfSwKKyAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICAiaWQiOiAiRnJhbWVSZXNvdXJjZVRyZWUiLAogICAgICAg
ICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCiAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9u
IjogIkluZm9ybWF0aW9uIGFib3V0IHRoZSBGcmFtZSBoaWVyYXJjaHkgYWxvbmcgd2l0aCB0aGVp
ciBjYWNoZWQgcmVzb3VyY2VzLiIsCiAgICAgICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCiAg
ICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZnJhbWUiLCAiJHJlZiI6ICJGcmFtZSIsICJk
ZXNjcmlwdGlvbiI6ICJGcmFtZSBpbmZvcm1hdGlvbiBmb3IgdGhpcyB0cmVlIGl0ZW0uIiB9LAog
ICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNoaWxkRnJhbWVzIiwgInR5cGUiOiAiYXJy
YXkiLCAib3B0aW9uYWwiOiB0cnVlLCAiaXRlbXMiOiB7ICIkcmVmIjogIkZyYW1lUmVzb3VyY2VU
cmVlIiB9LCAiZGVzY3JpcHRpb24iOiAiQ2hpbGQgZnJhbWVzLiIgfSwKLSAgICAgICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJyZXNvdXJjZXMiLCAidHlwZSI6ICJhcnJheSIsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAiaXRlbXMiOiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5
cGUiOiAib2JqZWN0IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHJvcGVydGllcyI6
IFsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ1cmwiLCAidHlw
ZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRpb24iOiAiUmVzb3VyY2UgVVJMLiIgfSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0eXBlIiwgIiRyZWYiOiAiUmVzb3Vy
Y2VUeXBlIiwgImRlc2NyaXB0aW9uIjogIlR5cGUgb2YgdGhpcyByZXNvdXJjZS4iIH0sCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibWltZVR5cGUiLCAidHlwZSI6
ICJzdHJpbmciLCAiZGVzY3JpcHRpb24iOiAiUmVzb3VyY2UgbWltZVR5cGUgYXMgZGV0ZXJtaW5l
ZCBieSB0aGUgYnJvd3Nlci4iIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAiZmFpbGVkIiwgInR5cGUiOiAiYm9vbGVhbiIsICJvcHRpb25hbCI6IHRydWUsICJk
ZXNjcmlwdGlvbiI6ICJUcnVlIGlmIHRoZSByZXNvdXJjZSBmYWlsZWQgdG8gbG9hZC4iIH0sCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY2FuY2VsZWQiLCAidHlw
ZSI6ICJib29sZWFuIiwgIm9wdGlvbmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9uIjogIlRydWUgaWYg
dGhlIHJlc291cmNlIHdhcyBjYW5jZWxlZCBkdXJpbmcgbG9hZGluZy4iIH0KLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBdCi0gICAgICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAg
ICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkluZm9ybWF0aW9uIGFib3V0IGZyYW1lIHJl
c291cmNlcy4iCi0gICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJyZXNvdXJjZXMiLCAidHlwZSI6ICJhcnJheSIsICJpdGVtcyI6IHsgIiRyZWYiOiAi
RnJhbWVSZXNvdXJjZSIgfSwgImRlc2NyaXB0aW9uIjogIkluZm9ybWF0aW9uIGFib3V0IGZyYW1l
IHJlc291cmNlcy4iIH0KICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICB9LAogICAgICAg
ICAgICAgewpAQCAtMTU4Nyw3ICsxNTg2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJuYW1lIiwgInR5cGUiOiAic3RyaW5nIiwgImRlc2NyaXB0aW9uIjogIkNvbXB1dGVkIHN0
eWxlIHByb3BlcnR5IG5hbWUuIiB9LAogICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInZh
bHVlIiwgInR5cGUiOiAic3RyaW5nIiwgImRlc2NyaXB0aW9uIjogIkNvbXB1dGVkIHN0eWxlIHBy
b3BlcnR5IHZhbHVlLiIgfQogICAgICAgICAgICAgICAgIF0KLSAgICAgICAgICAgIH0sICAgICAg
ICAgICAgCisgICAgICAgICAgICB9LAogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICJp
ZCI6ICJDU1NTdHlsZSIsCiAgICAgICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKQEAgLTE2
MDMsNiArMTYwMiwxMiBAQAogICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJDU1Mgc3R5
bGUgcmVwcmVzZW50YXRpb24uIgogICAgICAgICAgICAgfSwKICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAiaWQiOiAiQ1NTUHJvcGVydHlTdGF0dXMiLAorICAgICAgICAgICAgICAgICJ0
eXBlIjogInN0cmluZyIsCisgICAgICAgICAgICAgICAgImVudW0iOiBbImFjdGl2ZSIsICJpbmFj
dGl2ZSIsICJkaXNhYmxlZCIsICJzdHlsZSJdLAorICAgICAgICAgICAgICAgICJkZXNjcmlwdGlv
biI6ICJUaGUgcHJvcGVydHkgc3RhdHVzOiBcImFjdGl2ZVwiIChpbXBsaWVkIGlmIGFic2VudCkg
aWYgdGhlIHByb3BlcnR5IGlzIGVmZmVjdGl2ZSBpbiB0aGUgc3R5bGUsIFwiaW5hY3RpdmVcIiBp
ZiB0aGUgcHJvcGVydHkgaXMgb3ZlcnJpZGRlbiBieSBhIHNhbWUtbmFtZWQgcHJvcGVydHkgaW4g
dGhpcyBzdHlsZSBsYXRlciBvbiwgXCJkaXNhYmxlZFwiIGlmIHRoZSBwcm9wZXJ0eSBpcyBkaXNh
YmxlZCBieSB0aGUgdXNlciwgXCJzdHlsZVwiIGlmIHRoZSBwcm9wZXJ0eSBpcyByZXBvcnRlZCBi
eSB0aGUgYnJvd3NlciByYXRoZXIgdGhhbiBieSB0aGUgQ1NTIHNvdXJjZSBwYXJzZXIuIgorICAg
ICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAiaWQiOiAiQ1NTUHJv
cGVydHkiLAogICAgICAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCiAgICAgICAgICAgICAg
ICAgInByb3BlcnRpZXMiOiBbCkBAIC0xNjEyLDcgKzE2MTcsNyBAQAogICAgICAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogImltcGxpY2l0IiwgInR5cGUiOiAiYm9vbGVhbiIsICJvcHRpb25hbCI6
IHRydWUsICJkZXNjcmlwdGlvbiI6ICJXaGV0aGVyIHRoZSBwcm9wZXJ0eSBpcyBpbXBsaWNpdCAo
aW1wbGllcyA8Y29kZT5mYWxzZTwvY29kZT4gaWYgYWJzZW50KS4iIH0sCiAgICAgICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAidGV4dCIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IHRy
dWUsICJkZXNjcmlwdGlvbiI6ICJUaGUgZnVsbCBwcm9wZXJ0eSB0ZXh0IGFzIHNwZWNpZmllZCBp
biB0aGUgc3R5bGUuIiB9LAogICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBhcnNlZE9r
IiwgInR5cGUiOiAiYm9vbGVhbiIsICJvcHRpb25hbCI6IHRydWUsICJkZXNjcmlwdGlvbiI6ICJX
aGV0aGVyIHRoZSBwcm9wZXJ0eSBpcyB1bmRlcnN0b29kIGJ5IHRoZSBicm93c2VyIChpbXBsaWVz
IDxjb2RlPnRydWU8L2NvZGU+IGlmIGFic2VudCkuIiB9LAotICAgICAgICAgICAgICAgICAgICB7
ICJuYW1lIjogInN0YXR1cyIsICJ0eXBlIjogInN0cmluZyIsICJlbnVtIjogWyJhY3RpdmUiLCAi
aW5hY3RpdmUiLCAiZGlzYWJsZWQiLCAic3R5bGUiXSwgIm9wdGlvbmFsIjogdHJ1ZSwgImRlc2Ny
aXB0aW9uIjogIlRoZSBwcm9wZXJ0eSBzdGF0dXM6IFwiYWN0aXZlXCIgKGltcGxpZWQgaWYgYWJz
ZW50KSBpZiB0aGUgcHJvcGVydHkgaXMgZWZmZWN0aXZlIGluIHRoZSBzdHlsZSwgXCJpbmFjdGl2
ZVwiIGlmIHRoZSBwcm9wZXJ0eSBpcyBvdmVycmlkZGVuIGJ5IGEgc2FtZS1uYW1lZCBwcm9wZXJ0
eSBpbiB0aGlzIHN0eWxlIGxhdGVyIG9uLCBcImRpc2FibGVkXCIgaWYgdGhlIHByb3BlcnR5IGlz
IGRpc2FibGVkIGJ5IHRoZSB1c2VyLCBcInN0eWxlXCIgaWYgdGhlIHByb3BlcnR5IGlzIHJlcG9y
dGVkIGJ5IHRoZSBicm93c2VyIHJhdGhlciB0aGFuIGJ5IHRoZSBDU1Mgc291cmNlIHBhcnNlci4i
IH0sCisgICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic3RhdHVzIiwgIiRyZWYiOiAiQ1NT
UHJvcGVydHlTdGF0dXMiLCAib3B0aW9uYWwiOiB0cnVlLCAiZGVzY3JpcHRpb24iOiAiV2hldGhl
ciB0aGUgcHJvcGVydHkgaXMgYWN0aXZlIG9yIGRpc2FibGVkLiIgfSwKICAgICAgICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJzaG9ydGhhbmROYW1lIiwgInR5cGUiOiAic3RyaW5nIiwgIm9wdGlv
bmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9uIjogIlRoZSByZWxhdGVkIHNob3J0aGFuZCBwcm9wZXJ0
eSBuYW1lIChhYnNlbnQgaWYgdGhpcyBwcm9wZXJ0eSBpcyBub3QgYSBsb25naGFuZCkuIiB9LAog
ICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInJhbmdlIiwgIiRyZWYiOiAiU291cmNlUmFu
Z2UiLCAib3B0aW9uYWwiOiB0cnVlLCAiZGVzY3JpcHRpb24iOiAiVGhlIGVudGlyZSBwcm9wZXJ0
eSByYW5nZSBpbiB0aGUgZW5jbG9zaW5nIHN0eWxlIGRlY2xhcmF0aW9uIChpZiBhdmFpbGFibGUp
LiIgfQogICAgICAgICAgICAgICAgIF0sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvVmVyc2lvbnMvSW5zcGVjdG9yLWlPUy03LjAuanNvbiBiL1NvdXJjZS9XZWJJbnNwZWN0b3JV
SS9WZXJzaW9ucy9JbnNwZWN0b3ItaU9TLTcuMC5qc29uCmluZGV4IGQwNTMyMDliNjI5Mzk4ZDZj
MDg5NzMyY2MyZGJiYWVlMjE3OWM1YzAuLjY4YWUxYjUwNzE3NWQyNDFmNmQ5NjcwM2EyYWI0YWU1
YmFkYzhkZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9WZXJzaW9ucy9JbnNw
ZWN0b3ItaU9TLTcuMC5qc29uCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9WZXJzaW9ucy9J
bnNwZWN0b3ItaU9TLTcuMC5qc29uCkBAIC02NSwyNiArNjUsMjUgQEAKICAgICAgICAgICAgICAg
ICBdCiAgICAgICAgICAgICB9LAogICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICJpZCI6
ICJGcmFtZVJlc291cmNlIiwKKyAgICAgICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAorICAg
ICAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWworICAgICAgICAgICAgICAgICAgICB7ICJuYW1l
IjogInVybCIsICJ0eXBlIjogInN0cmluZyIsICJkZXNjcmlwdGlvbiI6ICJSZXNvdXJjZSBVUkwu
IiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInR5cGUiLCAiJHJlZiI6ICJSZXNv
dXJjZVR5cGUiLCAiZGVzY3JpcHRpb24iOiAiVHlwZSBvZiB0aGlzIHJlc291cmNlLiIgfSwKKyAg
ICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJtaW1lVHlwZSIsICJ0eXBlIjogInN0cmluZyIs
ICJkZXNjcmlwdGlvbiI6ICJSZXNvdXJjZSBtaW1lVHlwZSBhcyBkZXRlcm1pbmVkIGJ5IHRoZSBi
cm93c2VyLiIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJmYWlsZWQiLCAidHlw
ZSI6ICJib29sZWFuIiwgIm9wdGlvbmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9uIjogIlRydWUgaWYg
dGhlIHJlc291cmNlIGZhaWxlZCB0byBsb2FkLiIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJjYW5jZWxlZCIsICJ0eXBlIjogImJvb2xlYW4iLCAib3B0aW9uYWwiOiB0cnVlLCAi
ZGVzY3JpcHRpb24iOiAiVHJ1ZSBpZiB0aGUgcmVzb3VyY2Ugd2FzIGNhbmNlbGVkIGR1cmluZyBs
b2FkaW5nLiIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzb3VyY2VNYXBVUkwi
LCAidHlwZSI6ICJzdHJpbmciLCAib3B0aW9uYWwiOiB0cnVlLCAiZGVzY3JpcHRpb24iOiAiVVJM
IG9mIHNvdXJjZSBtYXAgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcmVzb3VyY2UgKGlmIGFueSkuIiB9
CisgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgICAiaWQiOiAiRnJhbWVSZXNvdXJjZVRyZWUiLAogICAgICAgICAgICAgICAgICJ0
eXBlIjogIm9iamVjdCIsCiAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkluZm9ybWF0
aW9uIGFib3V0IHRoZSBGcmFtZSBoaWVyYXJjaHkgYWxvbmcgd2l0aCB0aGVpciBjYWNoZWQgcmVz
b3VyY2VzLiIsCiAgICAgICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCiAgICAgICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAiZnJhbWUiLCAiJHJlZiI6ICJGcmFtZSIsICJkZXNjcmlwdGlvbiI6
ICJGcmFtZSBpbmZvcm1hdGlvbiBmb3IgdGhpcyB0cmVlIGl0ZW0uIiB9LAogICAgICAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogImNoaWxkRnJhbWVzIiwgInR5cGUiOiAiYXJyYXkiLCAib3B0aW9u
YWwiOiB0cnVlLCAiaXRlbXMiOiB7ICIkcmVmIjogIkZyYW1lUmVzb3VyY2VUcmVlIiB9LCAiZGVz
Y3JpcHRpb24iOiAiQ2hpbGQgZnJhbWVzLiIgfSwKLSAgICAgICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJyZXNvdXJjZXMiLCAidHlwZSI6ICJhcnJheSIsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAiaXRlbXMiOiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0
IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHJvcGVydGllcyI6IFsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ1cmwiLCAidHlwZSI6ICJzdHJpbmci
LCAiZGVzY3JpcHRpb24iOiAiUmVzb3VyY2UgVVJMLiIgfSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJ0eXBlIiwgIiRyZWYiOiAiUmVzb3VyY2VUeXBlIiwgImRl
c2NyaXB0aW9uIjogIlR5cGUgb2YgdGhpcyByZXNvdXJjZS4iIH0sCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibWltZVR5cGUiLCAidHlwZSI6ICJzdHJpbmciLCAi
ZGVzY3JpcHRpb24iOiAiUmVzb3VyY2UgbWltZVR5cGUgYXMgZGV0ZXJtaW5lZCBieSB0aGUgYnJv
d3Nlci4iIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZmFp
bGVkIiwgInR5cGUiOiAiYm9vbGVhbiIsICJvcHRpb25hbCI6IHRydWUsICJkZXNjcmlwdGlvbiI6
ICJUcnVlIGlmIHRoZSByZXNvdXJjZSBmYWlsZWQgdG8gbG9hZC4iIH0sCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY2FuY2VsZWQiLCAidHlwZSI6ICJib29sZWFu
IiwgIm9wdGlvbmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9uIjogIlRydWUgaWYgdGhlIHJlc291cmNl
IHdhcyBjYW5jZWxlZCBkdXJpbmcgbG9hZGluZy4iIH0sCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAic291cmNlTWFwVVJMIiwgInR5cGUiOiAic3RyaW5nIiwgIm9w
dGlvbmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9uIjogIlVSTCBvZiBzb3VyY2UgbWFwIGFzc29jaWF0
ZWQgd2l0aCB0aGlzIHJlc291cmNlIChpZiBhbnkpLiIgfQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAg
ICAgICAiZGVzY3JpcHRpb24iOiAiSW5mb3JtYXRpb24gYWJvdXQgZnJhbWUgcmVzb3VyY2VzLiIK
LSAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInJl
c291cmNlcyIsICJ0eXBlIjogImFycmF5IiwgIml0ZW1zIjogeyAiJHJlZiI6ICJGcmFtZVJlc291
cmNlIiB9LCAiZGVzY3JpcHRpb24iOiAiSW5mb3JtYXRpb24gYWJvdXQgZnJhbWUgcmVzb3VyY2Vz
LiIgfQogICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICB7CkBA
IC0xOTE3LDYgKzE5MTYsMTIgQEAKICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiQ1NT
IHN0eWxlIHJlcHJlc2VudGF0aW9uLiIKICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgImlkIjogIkNTU1Byb3BlcnR5U3RhdHVzIiwKKyAgICAgICAgICAgICAg
ICAidHlwZSI6ICJzdHJpbmciLAorICAgICAgICAgICAgICAgICJlbnVtIjogWyJhY3RpdmUiLCAi
aW5hY3RpdmUiLCAiZGlzYWJsZWQiLCAic3R5bGUiXSwKKyAgICAgICAgICAgICAgICAiZGVzY3Jp
cHRpb24iOiAiVGhlIHByb3BlcnR5IHN0YXR1czogXCJhY3RpdmVcIiAoaW1wbGllZCBpZiBhYnNl
bnQpIGlmIHRoZSBwcm9wZXJ0eSBpcyBlZmZlY3RpdmUgaW4gdGhlIHN0eWxlLCBcImluYWN0aXZl
XCIgaWYgdGhlIHByb3BlcnR5IGlzIG92ZXJyaWRkZW4gYnkgYSBzYW1lLW5hbWVkIHByb3BlcnR5
IGluIHRoaXMgc3R5bGUgbGF0ZXIgb24sIFwiZGlzYWJsZWRcIiBpZiB0aGUgcHJvcGVydHkgaXMg
ZGlzYWJsZWQgYnkgdGhlIHVzZXIsIFwic3R5bGVcIiBpZiB0aGUgcHJvcGVydHkgaXMgcmVwb3J0
ZWQgYnkgdGhlIGJyb3dzZXIgcmF0aGVyIHRoYW4gYnkgdGhlIENTUyBzb3VyY2UgcGFyc2VyLiIK
KyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgImlkIjogIkNT
U1Byb3BlcnR5IiwKICAgICAgICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAogICAgICAgICAg
ICAgICAgICJwcm9wZXJ0aWVzIjogWwpAQCAtMTkyNiw3ICsxOTMxLDcgQEAKICAgICAgICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJpbXBsaWNpdCIsICJ0eXBlIjogImJvb2xlYW4iLCAib3B0aW9u
YWwiOiB0cnVlLCAiZGVzY3JpcHRpb24iOiAiV2hldGhlciB0aGUgcHJvcGVydHkgaXMgaW1wbGlj
aXQgKGltcGxpZXMgPGNvZGU+ZmFsc2U8L2NvZGU+IGlmIGFic2VudCkuIiB9LAogICAgICAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogInRleHQiLCAidHlwZSI6ICJzdHJpbmciLCAib3B0aW9uYWwi
OiB0cnVlLCAiZGVzY3JpcHRpb24iOiAiVGhlIGZ1bGwgcHJvcGVydHkgdGV4dCBhcyBzcGVjaWZp
ZWQgaW4gdGhlIHN0eWxlLiIgfSwKICAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwYXJz
ZWRPayIsICJ0eXBlIjogImJvb2xlYW4iLCAib3B0aW9uYWwiOiB0cnVlLCAiZGVzY3JpcHRpb24i
OiAiV2hldGhlciB0aGUgcHJvcGVydHkgaXMgdW5kZXJzdG9vZCBieSB0aGUgYnJvd3NlciAoaW1w
bGllcyA8Y29kZT50cnVlPC9jb2RlPiBpZiBhYnNlbnQpLiIgfSwKLSAgICAgICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJzdGF0dXMiLCAidHlwZSI6ICJzdHJpbmciLCAiZW51bSI6IFsiYWN0aXZl
IiwgImluYWN0aXZlIiwgImRpc2FibGVkIiwgInN0eWxlIl0sICJvcHRpb25hbCI6IHRydWUsICJk
ZXNjcmlwdGlvbiI6ICJUaGUgcHJvcGVydHkgc3RhdHVzOiBcImFjdGl2ZVwiIGlmIHRoZSBwcm9w
ZXJ0eSBpcyBlZmZlY3RpdmUgaW4gdGhlIHN0eWxlLCBcImluYWN0aXZlXCIgaWYgdGhlIHByb3Bl
cnR5IGlzIG92ZXJyaWRkZW4gYnkgYSBzYW1lLW5hbWVkIHByb3BlcnR5IGluIHRoaXMgc3R5bGUg
bGF0ZXIgb24sIFwiZGlzYWJsZWRcIiBpZiB0aGUgcHJvcGVydHkgaXMgZGlzYWJsZWQgYnkgdGhl
IHVzZXIsIFwic3R5bGVcIiAoaW1wbGllZCBpZiBhYnNlbnQpIGlmIHRoZSBwcm9wZXJ0eSBpcyBy
ZXBvcnRlZCBieSB0aGUgYnJvd3NlciByYXRoZXIgdGhhbiBieSB0aGUgQ1NTIHNvdXJjZSBwYXJz
ZXIuIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInN0YXR1cyIsICIkcmVmIjog
IkNTU1Byb3BlcnR5U3RhdHVzIiwgIm9wdGlvbmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9uIjogIldo
ZXRoZXIgdGhlIHByb3BlcnR5IGlzIGFjdGl2ZSBvciBkaXNhYmxlZC4iIH0sCiAgICAgICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAicmFuZ2UiLCAiJHJlZiI6ICJTb3VyY2VSYW5nZSIsICJvcHRp
b25hbCI6IHRydWUsICJkZXNjcmlwdGlvbiI6ICJUaGUgZW50aXJlIHByb3BlcnR5IHJhbmdlIGlu
IHRoZSBlbmNsb3Npbmcgc3R5bGUgZGVjbGFyYXRpb24gKGlmIGF2YWlsYWJsZSkuIiB9CiAgICAg
ICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiQ1NTIHN0eWxl
IGVmZmVjdGl2ZSB2aXN1YWwgZGltZW5zaW9ucyBhbmQgc291cmNlIG9mZnNldHMuIgpkaWZmIC0t
Z2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDM4ZmFjNjMyOGVm
YTVhODcyYTVkNTBiNDI1ODI0YWFjZTMxMjg0NDguLjc3MDVhMTYwZWE0YzRjYmYzNGEyMzA3ZTdl
M2NkYzgyZDQ1N2NkYmEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9D
aGFuZ2VMb2cKQEAgLTEsMyArMSw0NCBAQAorMjAxNC0wOC0xNCAgQnJpYW4gSi4gQnVyZyAgPGJ1
cmdAY3Mud2FzaGluZ3Rvbi5lZHU+CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogcmV3cml0ZSBD
b2RlR2VuZXJhdG9ySW5zcGVjdG9yIHRvIGJlIG1vZHVsYXIgYW5kIHRlc3RhYmxlCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzE1OTYKKworICAgICAg
ICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8uCisKKyAgICAgICAgKiBTY3JpcHRzL3J1bi1p
bnNwZWN0b3ItZ2VuZXJhdG9yLXRlc3RzOiBBZGRlZC4KKyAgICAgICAgKG1haW4pOgorICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkvaW5zcGVjdG9yL19faW5pdF9fLnB5OiBBZGRlZC4KKyAgICAg
ICAgKiBTY3JpcHRzL3dlYmtpdHB5L2luc3BlY3Rvci9tYWluLnB5OiBBZGRlZC4KKyAgICAgICAg
KEluc3BlY3RvckdlbmVyYXRvclRlc3RzKToKKyAgICAgICAgKEluc3BlY3RvckdlbmVyYXRvclRl
c3RzLl9faW5pdF9fKToKKyAgICAgICAgKEluc3BlY3RvckdlbmVyYXRvclRlc3RzLmdlbmVyYXRl
X2Zyb21fanNvbik6CisgICAgICAgIChJbnNwZWN0b3JHZW5lcmF0b3JUZXN0cy53cml0ZV9lcnJv
cl9maWxlKToKKyAgICAgICAgKEluc3BlY3RvckdlbmVyYXRvclRlc3RzLmRldGVjdF9jaGFuZ2Vz
KToKKyAgICAgICAgKEluc3BlY3RvckdlbmVyYXRvclRlc3RzLnJ1bl90ZXN0cyk6CisgICAgICAg
IChJbnNwZWN0b3JHZW5lcmF0b3JUZXN0cy5tYWluKToKKworMjAxNC0wOC0wOSAgQnJpYW4gSi4g
QnVyZyAgPGJ1cmdAY3Mud2FzaGluZ3Rvbi5lZHU+CisKKyAgICAgICAgV2ViIEluc3BlY3Rvcjog
cmV3cml0ZSBDb2RlR2VuZXJhdG9ySW5zcGVjdG9yIHRvIGJlIG1vZHVsYXIgYW5kIHRlc3RhYmxl
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzE1OTYK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgYSB3
cmFwcGVyIHNjcmlwdCBmb3IgcnVubmluZyBpbnNwZWN0b3IgYmluZGluZ3MgZ2VuZXJhdG9yIHRl
c3RzLgorICAgICAgICBJdCBpcyBhZGFwdGVkIGZyb20gdGhlIERPTSBiaW5kaW5ncyBhbmQgcmVw
bGF5IGdlbmVyYXRvciB0ZXN0IHNjcmlwdHMuCisKKyAgICAgICAgKiBTY3JpcHRzL3J1bi1pbnNw
ZWN0b3ItZ2VuZXJhdG9yLXRlc3RzOiBBZGRlZC4KKyAgICAgICAgKG1haW4pOgorICAgICAgICAq
IFNjcmlwdHMvd2Via2l0cHkvaW5zcGVjdG9yL19faW5pdF9fLnB5OiBBZGRlZC4KKyAgICAgICAg
KiBTY3JpcHRzL3dlYmtpdHB5L2luc3BlY3Rvci9tYWluLnB5OiBBZGRlZC4KKyAgICAgICAgKElu
c3BlY3RvckdlbmVyYXRvclRlc3RzKToKKyAgICAgICAgKEluc3BlY3RvckdlbmVyYXRvclRlc3Rz
Ll9faW5pdF9fKToKKyAgICAgICAgKEluc3BlY3RvckdlbmVyYXRvclRlc3RzLmdlbmVyYXRlX2Zy
b21fanNvbik6CisgICAgICAgIChJbnNwZWN0b3JHZW5lcmF0b3JUZXN0cy53cml0ZV9lcnJvcl9m
aWxlKToKKyAgICAgICAgKEluc3BlY3RvckdlbmVyYXRvclRlc3RzLmRldGVjdF9jaGFuZ2VzKToK
KyAgICAgICAgKEluc3BlY3RvckdlbmVyYXRvclRlc3RzLnJ1bl90ZXN0cyk6CisgICAgICAgIChJ
bnNwZWN0b3JHZW5lcmF0b3JUZXN0cy5tYWluKToKKwogMjAxNC0wOC0xNCAgQnJlbnQgRnVsZ2hh
bSAgPGJmdWxnaGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBbV2luXSBFeHRlbmQgYXV0by12ZXJz
aW9uIGFuZCB2ZXJzaW9uLXN0YW1wIGZvciBSQ19Qcm9qZWN0QnVpbGRWZXJzaW9uCmRpZmYgLS1n
aXQgYS9Ub29scy9TY3JpcHRzL3J1bi1pbnNwZWN0b3ItZ2VuZXJhdG9yLXRlc3RzIGIvVG9vbHMv
U2NyaXB0cy9ydW4taW5zcGVjdG9yLWdlbmVyYXRvci10ZXN0cwpuZXcgZmlsZSBtb2RlIDEwMDc1
NQppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hYWFiMTgw
MGJjYTZmN2U4YTM0OTZlNTkxODQyMWVlYWUyZDM4ZDgyCi0tLSAvZGV2L251bGwKKysrIGIvVG9v
bHMvU2NyaXB0cy9ydW4taW5zcGVjdG9yLWdlbmVyYXRvci10ZXN0cwpAQCAtMCwwICsxLDQyIEBA
CisjIS91c3IvYmluL2VudiBweXRob24KKyMgQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUg
bWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworIyBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisKK2ltcG9ydCBzeXMKK2Zyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbSBpbXBvcnQgZXhl
Y3V0aXZlCisKK2RlZiBtYWluKGFyZ3YpOgorICAgICIiIlJ1bnMgcmVwbGF5IGlucHV0IGNvZGUg
Z2VuZXJhdG9yIG9uIHRlc3Qgc3BlY2lmaWNhdGlvbiBmaWxlcyBhbmQgY29tcGFyZXMKKyAgICB0
aGUgcmVzdWx0cyB3aXRoIHJlZmVyZW5jZSBmaWxlcy4KKworICAgIE9wdGlvbnM6CisgICAgICAg
LS1yZXNldC1yZXN1bHRzOiBPdmVyd3JpdGVzIHRoZSByZWZlcmVuY2UgZmlsZXMgd2l0aCB0aGUg
Z2VuZXJhdGVkIHJlc3VsdHMuCisKKyAgICAiIiIKKyAgICByZXNldF9yZXN1bHRzID0gIi0tcmVz
ZXQtcmVzdWx0cyIgaW4gYXJndgorCisgICAgZnJvbSB3ZWJraXRweS5pbnNwZWN0b3IubWFpbiBp
bXBvcnQgSW5zcGVjdG9yR2VuZXJhdG9yVGVzdHMKKyAgICByZXR1cm4gSW5zcGVjdG9yR2VuZXJh
dG9yVGVzdHMocmVzZXRfcmVzdWx0cywgZXhlY3V0aXZlLkV4ZWN1dGl2ZSgpKS5tYWluKCkKKwor
aWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBzeXMuZXhpdChtYWluKHN5cy5hcmd2KSkK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvaW5zcGVjdG9yL19faW5pdF9fLnB5
IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9pbnNwZWN0b3IvX19pbml0X18ucHkKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uZWY2NWJlZTViYjc3ZTk2ZWJjN2NkOWM0NzY0MDY5MGZiZGE4YWMxOQotLS0gL2Rldi9udWxs
CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvaW5zcGVjdG9yL19faW5pdF9fLnB5CkBAIC0w
LDAgKzEgQEAKKyMgUmVxdWlyZWQgZm9yIFB5dGhvbiB0byBzZWFyY2ggdGhpcyBkaXJlY3Rvcnkg
Zm9yIG1vZHVsZSBmaWxlcwpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9pbnNw
ZWN0b3IvbWFpbi5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvaW5zcGVjdG9yL21haW4ucHkK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNzY5ZjA0MTJmYzYzMDM2YWNjYTc0Y2Y3NTljODc0ZTU3Y2IxZGVhZAotLS0g
L2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvaW5zcGVjdG9yL21haW4ucHkK
QEAgLTAsMCArMSwxMzQgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMK
KyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMKKyMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
CisjIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQQorIyBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKworaW1wb3J0IG9zCitpbXBvcnQgb3MucGF0aAoraW1wb3J0IHNodXRp
bAoraW1wb3J0IHN5cworaW1wb3J0IHRlbXBmaWxlCitmcm9tIHdlYmtpdHB5LmNvbW1vbi5jaGVj
a291dC5zY20uZGV0ZWN0aW9uIGltcG9ydCBkZXRlY3Rfc2NtX3N5c3RlbQorZnJvbSB3ZWJraXRw
eS5jb21tb24uc3lzdGVtLmV4ZWN1dGl2ZSBpbXBvcnQgU2NyaXB0RXJyb3IKKworCitjbGFzcyBJ
bnNwZWN0b3JHZW5lcmF0b3JUZXN0czoKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCByZXNldF9y
ZXN1bHRzLCBleGVjdXRpdmUpOgorICAgICAgICBzZWxmLnJlc2V0X3Jlc3VsdHMgPSByZXNldF9y
ZXN1bHRzCisgICAgICAgIHNlbGYuZXhlY3V0aXZlID0gZXhlY3V0aXZlCisKKyAgICBkZWYgZ2Vu
ZXJhdGVfZnJvbV9qc29uKHNlbGYsIGpzb25fZmlsZSwgb3V0cHV0X2RpcmVjdG9yeSk6CisgICAg
ICAgIGNtZCA9IFsncHl0aG9uJywKKyAgICAgICAgICAgICAgICdKYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHknLAor
ICAgICAgICAgICAgICAgJy0tb3V0cHV0RGlyJywgb3V0cHV0X2RpcmVjdG9yeSwKKyAgICAgICAg
ICAgICAgICctLWZvcmNlJywKKyAgICAgICAgICAgICAgICctLWZyYW1ld29yaycsICdUZXN0JywK
KyAgICAgICAgICAgICAgICctLXRlc3QnLAorICAgICAgICAgICAgICAganNvbl9maWxlXQorCisg
ICAgICAgIGV4aXRfY29kZSA9IDAKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc3RkZXJyX291
dHB1dCA9IHNlbGYuZXhlY3V0aXZlLnJ1bl9jb21tYW5kKGNtZCkKKyAgICAgICAgICAgIGlmIHN0
ZGVycl9vdXRwdXQ6CisgICAgICAgICAgICAgICAgc2VsZi53cml0ZV9lcnJvcl9maWxlKGpzb25f
ZmlsZSwgb3V0cHV0X2RpcmVjdG9yeSwgc3RkZXJyX291dHB1dCkKKyAgICAgICAgZXhjZXB0IFNj
cmlwdEVycm9yLCBlOgorICAgICAgICAgICAgcHJpbnQgZS5vdXRwdXQKKyAgICAgICAgICAgIGV4
aXRfY29kZSA9IGUuZXhpdF9jb2RlCisgICAgICAgIHJldHVybiBleGl0X2NvZGUKKworICAgIGRl
ZiB3cml0ZV9lcnJvcl9maWxlKHNlbGYsIGlucHV0X2ZpbGVwYXRoLCBvdXRwdXRfZGlyZWN0b3J5
LCBlcnJvcl9vdXRwdXQpOgorICAgICAgICBvdXRwdXRfZmlsZXBhdGggPSBvcy5wYXRoLmpvaW4o
b3V0cHV0X2RpcmVjdG9yeSwgb3MucGF0aC5iYXNlbmFtZShpbnB1dF9maWxlcGF0aCkgKyAnLWVy
cm9yJykKKworICAgICAgICB3aXRoIG9wZW4ob3V0cHV0X2ZpbGVwYXRoLCAidyIpIGFzIG91dHB1
dF9maWxlOgorICAgICAgICAgICAgb3V0cHV0X2ZpbGUud3JpdGUoZXJyb3Jfb3V0cHV0KQorCisg
ICAgZGVmIGRldGVjdF9jaGFuZ2VzKHNlbGYsIHdvcmtfZGlyZWN0b3J5LCByZWZlcmVuY2VfZGly
ZWN0b3J5KToKKyAgICAgICAgY2hhbmdlc19mb3VuZCA9IEZhbHNlCisgICAgICAgIGZvciBvdXRw
dXRfZmlsZSBpbiBvcy5saXN0ZGlyKHdvcmtfZGlyZWN0b3J5KToKKyAgICAgICAgICAgIGNtZCA9
IFsnZGlmZicsCisgICAgICAgICAgICAgICAgICAgJy11JywKKyAgICAgICAgICAgICAgICAgICAn
LU4nLAorICAgICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihyZWZlcmVuY2VfZGlyZWN0b3J5
LCBvdXRwdXRfZmlsZSksCisgICAgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKHdvcmtfZGly
ZWN0b3J5LCBvdXRwdXRfZmlsZSldCisKKyAgICAgICAgICAgIGV4aXRfY29kZSA9IDAKKyAgICAg
ICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBvdXRwdXQgPSBzZWxmLmV4ZWN1dGl2ZS5ydW5f
Y29tbWFuZChjbWQpCisgICAgICAgICAgICBleGNlcHQgU2NyaXB0RXJyb3IsIGU6CisgICAgICAg
ICAgICAgICAgb3V0cHV0ID0gZS5vdXRwdXQKKyAgICAgICAgICAgICAgICBleGl0X2NvZGUgPSBl
LmV4aXRfY29kZQorCisgICAgICAgICAgICBpZiBleGl0X2NvZGUgb3Igb3V0cHV0OgorICAgICAg
ICAgICAgICAgIHByaW50ICdGQUlMOiAlcycgJSBvdXRwdXRfZmlsZQorICAgICAgICAgICAgICAg
IHByaW50IG91dHB1dAorICAgICAgICAgICAgICAgIGNoYW5nZXNfZm91bmQgPSBUcnVlCisgICAg
ICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHByaW50ICdQQVNTOiAlcycgJSBvdXRwdXRf
ZmlsZQorICAgICAgICByZXR1cm4gY2hhbmdlc19mb3VuZAorCisgICAgZGVmIHJ1bl90ZXN0cyhz
ZWxmLCBpbnB1dF9kaXJlY3RvcnksIHJlZmVyZW5jZV9kaXJlY3RvcnkpOgorICAgICAgICB3b3Jr
X2RpcmVjdG9yeSA9IHJlZmVyZW5jZV9kaXJlY3RvcnkKKworICAgICAgICBwYXNzZWQgPSBUcnVl
CisgICAgICAgIGZvciBpbnB1dF9maWxlIGluIG9zLmxpc3RkaXIoaW5wdXRfZGlyZWN0b3J5KToK
KyAgICAgICAgICAgIChuYW1lLCBleHRlbnNpb24pID0gb3MucGF0aC5zcGxpdGV4dChpbnB1dF9m
aWxlKQorICAgICAgICAgICAgaWYgZXh0ZW5zaW9uICE9ICcuanNvbic6CisgICAgICAgICAgICAg
ICAgY29udGludWUKKyAgICAgICAgICAgICMgR2VuZXJhdGUgb3V0cHV0IGludG8gdGhlIHdvcmsg
ZGlyZWN0b3J5IChlaXRoZXIgdGhlIGdpdmVuIG9uZSBvciBhCisgICAgICAgICAgICAjIHRlbXAg
b25lIGlmIG5vdCByZXNldF9yZXN1bHRzIGlzIHBlcmZvcm1lZCkKKyAgICAgICAgICAgIGlmIG5v
dCBzZWxmLnJlc2V0X3Jlc3VsdHM6CisgICAgICAgICAgICAgICAgd29ya19kaXJlY3RvcnkgPSB0
ZW1wZmlsZS5ta2R0ZW1wKCkKKworICAgICAgICAgICAgaWYgc2VsZi5nZW5lcmF0ZV9mcm9tX2pz
b24ob3MucGF0aC5qb2luKGlucHV0X2RpcmVjdG9yeSwgaW5wdXRfZmlsZSksIHdvcmtfZGlyZWN0
b3J5KToKKyAgICAgICAgICAgICAgICBwYXNzZWQgPSBGYWxzZQorCisgICAgICAgICAgICBpZiBz
ZWxmLnJlc2V0X3Jlc3VsdHM6CisgICAgICAgICAgICAgICAgcHJpbnQgIlJlc2V0IHJlc3VsdHMg
Zm9yIHRlc3Q6ICVzIiAlIChpbnB1dF9maWxlKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisK
KyAgICAgICAgICAgICMgRGV0ZWN0IGNoYW5nZXMKKyAgICAgICAgICAgIGlmIHNlbGYuZGV0ZWN0
X2NoYW5nZXMod29ya19kaXJlY3RvcnksIHJlZmVyZW5jZV9kaXJlY3RvcnkpOgorICAgICAgICAg
ICAgICAgIHBhc3NlZCA9IEZhbHNlCisgICAgICAgICAgICBzaHV0aWwucm10cmVlKHdvcmtfZGly
ZWN0b3J5KQorCisgICAgICAgIHJldHVybiBwYXNzZWQKKworICAgIGRlZiBtYWluKHNlbGYpOgor
ICAgICAgICBjdXJyZW50X3NjbSA9IGRldGVjdF9zY21fc3lzdGVtKG9zLmN1cmRpcikKKyAgICAg
ICAgb3MuY2hkaXIob3MucGF0aC5qb2luKGN1cnJlbnRfc2NtLmNoZWNrb3V0X3Jvb3QsICdTb3Vy
Y2UnKSkKKworICAgICAgICBhbGxfdGVzdHNfcGFzc2VkID0gVHJ1ZQorCisgICAgICAgIGlucHV0
X2RpcmVjdG9yeSA9IG9zLnBhdGguam9pbignSmF2YVNjcmlwdENvcmUnLCAnaW5zcGVjdG9yJywg
J3NjcmlwdHMnLCAndGVzdHMnKQorICAgICAgICByZWZlcmVuY2VfZGlyZWN0b3J5ID0gb3MucGF0
aC5qb2luKCdKYXZhU2NyaXB0Q29yZScsICdpbnNwZWN0b3InLCAnc2NyaXB0cycsICd0ZXN0cycs
ICdleHBlY3RlZCcpCisgICAgICAgIGlmIG5vdCBzZWxmLnJ1bl90ZXN0cyhpbnB1dF9kaXJlY3Rv
cnksIHJlZmVyZW5jZV9kaXJlY3RvcnkpOgorICAgICAgICAgICAgYWxsX3Rlc3RzX3Bhc3NlZCA9
IEZhbHNlCisKKyAgICAgICAgcHJpbnQgJycKKyAgICAgICAgaWYgYWxsX3Rlc3RzX3Bhc3NlZDoK
KyAgICAgICAgICAgIHByaW50ICdBbGwgdGVzdHMgUEFTUyEnCisgICAgICAgICAgICByZXR1cm4g
MAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJpbnQgJ1NvbWUgdGVzdHMgRkFJTCEgKFRv
IHVwZGF0ZSB0aGUgcmVmZXJlbmNlIGZpbGVzLCBleGVjdXRlICJydW4taW5zcGVjdG9yLWdlbmVy
YXRvci10ZXN0cyAtLXJlc2V0LXJlc3VsdHMiKScKKyAgICAgICAgICAgIHJldHVybiAtMQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>236668</attachid>
            <date>2014-08-15 12:11:56 -0700</date>
            <delta_ts>2015-09-14 10:47:34 -0700</delta_ts>
            <desc>Fix Windows build issues</desc>
            <filename>bug-131596-20140815121217.patch</filename>
            <type>text/plain</type>
            <size>1219981</size>
            <attacher name="Brian Burg">burg</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTcyNjE0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA4
OTFlMmRkNTJhNmU4MDRiZGE2NzVlYzJkNTU1YTg5MDFjYTdhNGYxLi5kMzRmZTFkZjhlZjhiMmJm
ZDE1NjNjMjE2MGRmYjBhNjRlZmEzM2U4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzODggQEAKKzIwMTQtMDgtMTQgIEJyaWFuIEouIEJ1cmcgIDxidXJnQGNzLndhc2hpbmd0
b24uZWR1PgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IHJld3JpdGUgQ29kZUdlbmVyYXRvcklu
c3BlY3RvciB0byBiZSBtb2R1bGFyIGFuZCB0ZXN0YWJsZQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMxNTk2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Sm9zZXBoIFBlY29yYXJvLgorCisgICAgICAgIFJlcGxhY2UgQ29kZUdlbmVyYXRvckluc3BlY3Rv
ci5weSB3aXRoIGdlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weS4KKyAgICAg
ICAgVGhlIG5ldyBnZW5lcmF0b3IgZGVjb3VwbGVzIHBhcnNpbmcgYW5kIHR5cGVjaGVja2luZyBh
IG1vZGVsIG9mIHRoZSBwcm90b2NvbCBmcm9tCisgICAgICAgIGNvZGUgZ2VuZXJhdGlvbi4gRWFj
aCBnZW5lcmF0ZWQgZmlsZSBpcyBjcmVhdGVkIGJ5IGEgZGlmZmVyZW50IHN1YmNsYXNzIG9mIEdl
bmVyYXRvci4KKyAgICAgICAgSGVscGVyIG1ldGhvZHMgdG8gY29tcHV0ZSB2YXJpb3VzIHR5cGUg
c2lnbmF0dXJlcyBhcmUgc2hhcmVkIGFtb25nIGdlbmVyYXRvcnMuCisKKyAgICAgICAgVGhpcyBw
YXRjaCBpbnRyb2R1Y2VzIGEgdGVzdCBoYXJuZXNzIGFuZCBhIHRlc3Qgc3VpdGUgdGhhdCBjb3Zl
cnMgYWxsIGZ1bmN0aW9uYWxpdHkuCisKKyAgICAgICAgQXNpZGUgZnJvbSBob29raW5nIHVwIHRo
ZSBuZXcgaW5zcGVjdG9yIGJpbmRpbmdzIGdlbmVyYXRvciB0byB0aGUgYnVpbGQgc3lzdGVtLAor
ICAgICAgICB0aGVyZSBhcmUgYSBmZXcgY29taW5nbGVkIGNoYW5nZXMgdGhhdCB3b3VsZCBiZSBw
YWluZnVsIHRvIHNwbGl0IGZyb20gdGhlIG1haW4KKyAgICAgICAgcGF0Y2g6CisKKyAgICAgICAg
Q29udmVydCBwcm90b2NvbCBlbnVtZXJhdGlvbiB0eXBlcyBmcm9tIHN0cnVjdC1uYW1lc3BhY2Vk
IGVudW1zIHRvIEMrKyBzY29wZWQgZW51bXMuCisKKyAgICAgICAgTW92ZSBhbGwgcnVudGltZUNh
c3QoKSwgYXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoKSwgYW5kIFJ1bnRpbWVDYXN0SGVscGVy
IG1ldGhvZHMgdG8gc3RhdGljCisgICAgICAgIG1ldGhvZHMgb2YgQmluZGluZ1RyYWl0cyBzcGVj
aWFsaXphdGlvbnMuCisKKyAgICAgICAgVG9nZXRoZXIsIHRoZXNlIGNoYW5nZXMgcmVkdWNlIGR1
cGxpY2F0aW9uIGFuZCBtYWtlIGl0IHBvc3NpYmxlIHRvIGZvcndhcmQtZGVjbGFyZQorICAgICAg
ICBhbGwgcHJvdG9jb2wgZW51bSBhbmQgb2JqZWN0IHR5cGVzLCByZWR1Y2luZyB3ZWlyZCBvcmRl
cmluZyBkZXBlbmRlbmNpZXMgYmV0d2VlbiBkb21haW5zLgorCisgICAgICAgICogQ01ha2VMaXN0
cy50eHQ6CisgICAgICAgICogRGVyaXZlZFNvdXJjZXMubWFrZToKKyAgICAgICAgKiBKYXZhU2Ny
aXB0Q29yZS52Y3hwcm9qL2NvcHktZmlsZXMuY21kOgorICAgICAgICAqIEphdmFTY3JpcHRDb3Jl
LnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvajoKKwkJKiBKYXZhU2NyaXB0Q29yZS52Y3hw
cm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVyczogQWRkIGluc3BlY3RvciBzY3JpcHRz
IHRvIHNvbHV0aW9uIGZpbHRlcnMuCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBpbnNwZWN0b3IvQ29uc29sZU1lc3NhZ2UuY3Bw
OiBDb252ZXJ0IHRvIHNjb3BlZCBlbnVtcy4KKyAgICAgICAgKEluc3BlY3Rvcjo6bWVzc2FnZVNv
dXJjZVZhbHVlKToKKyAgICAgICAgKEluc3BlY3Rvcjo6bWVzc2FnZVR5cGVWYWx1ZSk6CisgICAg
ICAgIChJbnNwZWN0b3I6Om1lc3NhZ2VMZXZlbFZhbHVlKToKKyAgICAgICAgKiBpbnNwZWN0b3Iv
SW5qZWN0ZWRTY3JpcHQuY3BwOiBDb252ZXJ0IHRvIHNjb3BlZCBlbnVtcyBhbmQgQmluZGluZ1Ry
YWl0cy4KKyAgICAgICAgKEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHQ6OmdldEZ1bmN0aW9uRGV0
YWlscyk6CisgICAgICAgIChJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0OjpnZXRQcm9wZXJ0aWVz
KToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHQ6OmdldEludGVybmFsUHJvcGVy
dGllcyk6CisgICAgICAgIChJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0Ojp3cmFwQ2FsbEZyYW1l
cyk6CisgICAgICAgIChJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0Ojp3cmFwT2JqZWN0KToKKyAg
ICAgICAgKEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHQ6OndyYXBUYWJsZSk6CisgICAgICAgICog
aW5zcGVjdG9yL0luamVjdGVkU2NyaXB0QmFzZS5jcHA6IENvbnZlcnQgSW5zcGVjdG9yVmFsdWU6
OlR5cGUgdG8gYSBzY29wZWQgZW51bS4KKyAgICAgICAgKEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3Jp
cHRCYXNlOjptYWtlRXZhbENhbGwpOgorICAgICAgICAqIGluc3BlY3Rvci9JbmplY3RlZFNjcmlw
dE1hbmFnZXIuY3BwOgorICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdE1hbmFnZXI6
OmluamVjdGVkU2NyaXB0Rm9yT2JqZWN0SWQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0
b3JUeXBlQnVpbGRlci5oOgorICAgICAgICAoSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk6
OmNyZWF0ZSk6CisgICAgICAgIChJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpTdHJ1Y3RJdGVtVHJh
aXRzOjpwdXNoUmVmUHRyKToKKyAgICAgICAgKEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5
SXRlbUhlbHBlcjxTdHJpbmc+OjpUcmFpdHM6OnB1c2hSYXcpOgorICAgICAgICAoSW5zcGVjdG9y
OjpUeXBlQnVpbGRlcjo6QXJyYXlJdGVtSGVscGVyPGludD46OlRyYWl0czo6cHVzaFJhdyk6Cisg
ICAgICAgIChJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheUl0ZW1IZWxwZXI8ZG91YmxlPjo6
VHJhaXRzOjpwdXNoUmF3KToKKyAgICAgICAgKEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5
SXRlbUhlbHBlcjxib29sPjo6VHJhaXRzOjpwdXNoUmF3KToKKyAgICAgICAgKEluc3BlY3Rvcjo6
VHlwZUJ1aWxkZXI6OkFycmF5SXRlbUhlbHBlcjxJbnNwZWN0b3JWYWx1ZT46OlRyYWl0czo6cHVz
aFJlZlB0cik6CisgICAgICAgIChJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheUl0ZW1IZWxw
ZXI8SW5zcGVjdG9yT2JqZWN0Pjo6VHJhaXRzOjpwdXNoUmVmUHRyKToKKyAgICAgICAgKEluc3Bl
Y3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5SXRlbUhlbHBlcjxJbnNwZWN0b3JBcnJheT46OlRyYWl0
czo6cHVzaFJlZlB0cik6CisgICAgICAgIChJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpQcmltaXRp
dmVCaW5kaW5nVHJhaXRzOjphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZSk6CisgICAgICAgIChJ
bnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpCaW5kaW5nVHJhaXRzPFR5cGVCdWlsZGVyOjpBcnJheTxU
Pj46OnJ1bnRpbWVDYXN0KToKKyAgICAgICAgKEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkJpbmRp
bmdUcmFpdHM8VHlwZUJ1aWxkZXI6OkFycmF5PFQ+Pjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5
cGUpOgorICAgICAgICAoSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QmluZGluZ1RyYWl0czxJbnNw
ZWN0b3JWYWx1ZT46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKToKKyAgICAgICAgKEluc3Bl
Y3Rvcjo6VHlwZUJ1aWxkZXI6OkJpbmRpbmdUcmFpdHM8aW50Pjo6YXNzZXJ0VmFsdWVIYXNFeHBl
Y3RlZFR5cGUpOgorICAgICAgICAoSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6RXhhY3RseUludDo6
RXhhY3RseUludCk6IERlbGV0ZWQuIEl0IHdhcyBub3QgdXNlZC4KKyAgICAgICAgKEluc3BlY3Rv
cjo6VHlwZUJ1aWxkZXI6OkV4YWN0bHlJbnQ6Om9wZXJhdG9yIGludCk6IERlbGV0ZWQuCisgICAg
ICAgIChJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpFeGFjdGx5SW50OjpjYXN0X3RvX2ludCk6IERl
bGV0ZWQuCisgICAgICAgIChJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpFeGFjdGx5SW50OjpjYXN0
X3RvX2ludDxpbnQ+KTogRGVsZXRlZC4KKyAgICAgICAgKEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6
OmludD4pOiBEZWxldGVkLgorICAgICAgICAoSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UnVudGlt
ZUNhc3RIZWxwZXI6OmFzc2VydFR5cGUpOiBEZWxldGVkLgorICAgICAgICAoSW5zcGVjdG9yOjpU
eXBlQnVpbGRlcjo6UnVudGltZUNhc3RIZWxwZXI6OmFzc2VydEFueSk6IERlbGV0ZWQuCisgICAg
ICAgIChJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpSdW50aW1lQ2FzdEhlbHBlcjo6YXNzZXJ0SW50
KTogRGVsZXRlZC4KKyAgICAgICAgKEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5OjpydW50
aW1lQ2FzdCk6IERlbGV0ZWQuCisgICAgICAgIChJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJh
eTo6YXNzZXJ0Q29ycmVjdFZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAgKEluc3BlY3Rvcjo6VHlw
ZUJ1aWxkZXI6OlN0cnVjdEl0ZW1UcmFpdHM6OmFzc2VydENvcnJlY3RWYWx1ZSk6IERlbGV0ZWQu
CisgICAgICAgIChJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheUl0ZW1IZWxwZXI8U3RyaW5n
Pjo6VHJhaXRzOjphc3NlcnRDb3JyZWN0VmFsdWUpOiBEZWxldGVkLgorICAgICAgICAoSW5zcGVj
dG9yOjpUeXBlQnVpbGRlcjo6QXJyYXlJdGVtSGVscGVyPGludD46OlRyYWl0czo6YXNzZXJ0Q29y
cmVjdFZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAgKEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFy
cmF5SXRlbUhlbHBlcjxkb3VibGU+OjpUcmFpdHM6OmFzc2VydENvcnJlY3RWYWx1ZSk6IERlbGV0
ZWQuCisgICAgICAgIChJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheUl0ZW1IZWxwZXI8Ym9v
bD46OlRyYWl0czo6YXNzZXJ0Q29ycmVjdFZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAgKEluc3Bl
Y3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5SXRlbUhlbHBlcjxJbnNwZWN0b3JWYWx1ZT46OlRyYWl0
czo6YXNzZXJ0Q29ycmVjdFZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAgKEluc3BlY3Rvcjo6VHlw
ZUJ1aWxkZXI6OkFycmF5SXRlbUhlbHBlcjxJbnNwZWN0b3JPYmplY3Q+OjpUcmFpdHM6OmFzc2Vy
dENvcnJlY3RWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgIChJbnNwZWN0b3I6OlR5cGVCdWlsZGVy
OjpBcnJheUl0ZW1IZWxwZXI8SW5zcGVjdG9yQXJyYXk+OjpUcmFpdHM6OmFzc2VydENvcnJlY3RW
YWx1ZSk6IERlbGV0ZWQuCisgICAgICAgIChJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheUl0
ZW1IZWxwZXI8VHlwZUJ1aWxkZXI6OkFycmF5PFQ+Pjo6VHJhaXRzOjphc3NlcnRDb3JyZWN0VmFs
dWUpOiBEZWxldGVkLgorCisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5jcHA6
IENvbnZlcnQgSW5zcGVjdG9yVmFsdWU6OlR5cGUgdG8gYSBzY29wZWQgZW51bS4KKyAgICAgICAg
KEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU6OndyaXRlSlNPTik6CisgICAgICAgIChJbnNwZWN0
b3I6Okluc3BlY3RvckJhc2ljVmFsdWU6OmFzQm9vbGVhbik6CisgICAgICAgIChJbnNwZWN0b3I6
Okluc3BlY3RvckJhc2ljVmFsdWU6OmFzTnVtYmVyKToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5z
cGVjdG9yQmFzaWNWYWx1ZTo6d3JpdGVKU09OKToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5zcGVj
dG9yU3RyaW5nOjp3cml0ZUpTT04pOgorICAgICAgICAoSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmpl
Y3RCYXNlOjpJbnNwZWN0b3JPYmplY3RCYXNlKToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5zcGVj
dG9yT2JqZWN0QmFzZTo6c2V0QXJyYXkpOiBUYWtlIEluc3BlY3RvckFycmF5QmFzZS4KKyAgICAg
ICAgKEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0QmFzZTo6c2V0T2JqZWN0KTogVGFrZSBJbnNw
ZWN0b3JPYmplY3RCYXNlLgorICAgICAgICAoSW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheUJhc2U6
Okluc3BlY3RvckFycmF5QmFzZSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclZhbHVl
cy5oOgorCisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50
LmNwcDogQ29udmVydCB0byBzY29wZWQgZW51bXMuCisgICAgICAgIChJbnNwZWN0b3I6Okluc3Bl
Y3RvckRlYnVnZ2VyQWdlbnQ6OnNjaGVkdWxlUGF1c2VPbk5leHRTdGF0ZW1lbnQpOgorICAgICAg
ICAoSW5zcGVjdG9yOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpicmVha1Byb2dyYW0pOgorICAg
ICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5oOgorICAgICAg
ICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUnVudGltZUFnZW50LmNwcDoKKyAgICAgICAg
KEluc3BlY3Rvcjo6SW5zcGVjdG9yUnVudGltZUFnZW50OjpwYXJzZSk6CisgICAgICAgICogaW5z
cGVjdG9yL2FnZW50cy9JbnNwZWN0b3JSdW50aW1lQWdlbnQuaDoKKworICAgICAgICAqIGluc3Bl
Y3Rvci9zY3JpcHRzL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHk6IFJlbW92ZWQuCisgICAgICAg
ICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9fX2luaXRfXy5weTogQWRkZWQuCisgICAgICAg
ICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9iYWNrZW5kX2NvbW1hbmRzLnB5
OiBBZGRlZC4KKyAgICAgICAgKEJhY2tlbmRDb21tYW5kc0dlbmVyYXRvcik6CisgICAgICAgIChC
YWNrZW5kQ29tbWFuZHNHZW5lcmF0b3IuX19pbml0X18pOgorICAgICAgICAoQmFja2VuZENvbW1h
bmRzR2VuZXJhdG9yLm1vZGVsKToKKyAgICAgICAgKEJhY2tlbmRDb21tYW5kc0dlbmVyYXRvci5v
dXRwdXRfZmlsZW5hbWUpOgorICAgICAgICAoQmFja2VuZENvbW1hbmRzR2VuZXJhdG9yLmdlbmVy
YXRlX2xpY2Vuc2UpOgorICAgICAgICAoQmFja2VuZENvbW1hbmRzR2VuZXJhdG9yLmdlbmVyYXRl
X291dHB1dCk6CisgICAgICAgIChCYWNrZW5kQ29tbWFuZHNHZW5lcmF0b3IuZ2VuZXJhdGVfZG9t
YWluKToKKyAgICAgICAgKEJhY2tlbmRDb21tYW5kc0dlbmVyYXRvci5nZW5lcmF0ZV9kb21haW4u
aXNfYW5vbnltb3VzX2VudW1fbWVtYmVyKToKKyAgICAgICAgKEJhY2tlbmRDb21tYW5kc0dlbmVy
YXRvci5nZW5lcmF0ZV9kb21haW4uZ2VuZXJhdGVfcGFyYW1ldGVyX29iamVjdCk6CisgICAgICAg
ICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJf
aGVhZGVyLnB5OiBBZGRlZC4KKyAgICAgICAgKEJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJh
dG9yKToKKyAgICAgICAgKEJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yLl9faW5pdF9f
KToKKyAgICAgICAgKEJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yLm1vZGVsKToKKyAg
ICAgICAgKEJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yLm91dHB1dF9maWxlbmFtZSk6
CisgICAgICAgIChCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvci5nZW5lcmF0ZV9saWNl
bnNlKToKKyAgICAgICAgKEJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yLmdlbmVyYXRl
X291dHB1dCk6CisgICAgICAgIChCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvci5nZW5l
cmF0ZV9vdXRwdXQuZm9yKToKKyAgICAgICAgKEJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJh
dG9yLl9nZW5lcmF0ZV9oYW5kbGVyX2RlY2xhcmF0aW9uc19mb3JfZG9tYWluKToKKyAgICAgICAg
KEJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yLl9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51
bV9mb3JfcGFyYW1ldGVyKToKKyAgICAgICAgKEJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJh
dG9yLl9nZW5lcmF0ZV9oYW5kbGVyX2RlY2xhcmF0aW9uX2Zvcl9jb21tYW5kKToKKyAgICAgICAg
KEJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yLl9nZW5lcmF0ZV9hc3luY19oYW5kbGVy
X2RlY2xhcmF0aW9uX2Zvcl9jb21tYW5kKToKKyAgICAgICAgKEJhY2tlbmREaXNwYXRjaGVySGVh
ZGVyR2VuZXJhdG9yLl9nZW5lcmF0ZV9kaXNwYXRjaGVyX2RlY2xhcmF0aW9uc19mb3JfZG9tYWlu
KToKKyAgICAgICAgKEJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yLl9nZW5lcmF0ZV9k
aXNwYXRjaGVyX2RlY2xhcmF0aW9uX2Zvcl9jb21tYW5kKToKKyAgICAgICAgKiBpbnNwZWN0b3Iv
c2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlv
bi5weTogQWRkZWQuCisgICAgICAgIChCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2Vu
ZXJhdG9yKToKKyAgICAgICAgKEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0
b3IuX19pbml0X18pOgorICAgICAgICAoQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdl
bmVyYXRvci5tb2RlbCk6CisgICAgICAgIChCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9u
R2VuZXJhdG9yLm91dHB1dF9maWxlbmFtZSk6CisgICAgICAgIChCYWNrZW5kRGlzcGF0Y2hlcklt
cGxlbWVudGF0aW9uR2VuZXJhdG9yLmdlbmVyYXRlX2xpY2Vuc2UpOgorICAgICAgICAoQmFja2Vu
ZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5nZW5lcmF0ZV9vdXRwdXQpOgorICAg
ICAgICAoQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVf
aGFuZGxlcl9jbGFzc19kZXN0cnVjdG9yX2Zvcl9kb21haW4pOgorICAgICAgICAoQmFja2VuZERp
c3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfZGlzcGF0Y2hlcl9pbXBs
ZW1lbnRhdGlvbnNfZm9yX2RvbWFpbik6CisgICAgICAgIChCYWNrZW5kRGlzcGF0Y2hlckltcGxl
bWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9zbWFsbF9kaXNwYXRjaGVyX3N3aXRjaF9pbXBs
ZW1lbnRhdGlvbl9mb3JfZG9tYWluKToKKyAgICAgICAgKEJhY2tlbmREaXNwYXRjaGVySW1wbGVt
ZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX2xhcmdlX2Rpc3BhdGNoZXJfc3dpdGNoX2ltcGxl
bWVudGF0aW9uX2Zvcl9kb21haW4pOgorICAgICAgICAoQmFja2VuZERpc3BhdGNoZXJJbXBsZW1l
bnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfYXN5bmNfZGlzcGF0Y2hlcl9jbGFzc19mb3JfZG9t
YWluKToKKyAgICAgICAgKEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3Iu
X2dlbmVyYXRlX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb25fZm9yX2NvbW1hbmQpOgorICAgICAg
ICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfZnJvbnRlbmRfZGlzcGF0Y2hl
cl9oZWFkZXIucHk6IEFkZGVkLgorICAgICAgICAoRnJvbnRlbmREaXNwYXRjaGVySGVhZGVyR2Vu
ZXJhdG9yKToKKyAgICAgICAgKEZyb250ZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvci5fX2lu
aXRfXyk6CisgICAgICAgIChGcm9udGVuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IubW9kZWwp
OgorICAgICAgICAoRnJvbnRlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yLm91dHB1dF9maWxl
bmFtZSk6CisgICAgICAgIChGcm9udGVuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IuZ2VuZXJh
dGVfbGljZW5zZSk6CisgICAgICAgIChGcm9udGVuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3Iu
Z2VuZXJhdGVfb3V0cHV0KToKKyAgICAgICAgKEZyb250ZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVy
YXRvci5fZ2VuZXJhdGVfYW5vbnltb3VzX2VudW1fZm9yX3BhcmFtZXRlcik6CisgICAgICAgIChG
cm9udGVuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRlX2Rpc3BhdGNoZXJfZGVj
bGFyYXRpb25zX2Zvcl9kb21haW4pOgorICAgICAgICAoRnJvbnRlbmREaXNwYXRjaGVySGVhZGVy
R2VuZXJhdG9yLl9nZW5lcmF0ZV9kaXNwYXRjaGVyX2RlY2xhcmF0aW9uX2Zvcl9ldmVudCk6Cisg
ICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9mcm9udGVuZF9kaXNw
YXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5OiBBZGRlZC4KKyAgICAgICAgKEZyb250ZW5kRGlzcGF0
Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKToKKyAgICAgICAgKEZyb250ZW5kRGlzcGF0Y2hl
ckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9faW5pdF9fKToKKyAgICAgICAgKEZyb250ZW5kRGlz
cGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLm1vZGVsKToKKyAgICAgICAgKEZyb250ZW5k
RGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLm91dHB1dF9maWxlbmFtZSk6CisgICAg
ICAgIChGcm9udGVuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5nZW5lcmF0ZV9s
aWNlbnNlKToKKyAgICAgICAgKEZyb250ZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJh
dG9yLmdlbmVyYXRlX291dHB1dCk6CisgICAgICAgIChGcm9udGVuZERpc3BhdGNoZXJJbXBsZW1l
bnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbnNfZm9y
X2RvbWFpbik6CisgICAgICAgIChGcm9udGVuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVy
YXRvci5fZ2VuZXJhdGVfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbl9mb3JfZXZlbnQpOgorICAg
ICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfdHlwZV9idWlsZGVyX2hl
YWRlci5weTogQWRkZWQuCisgICAgICAgIChUeXBlQnVpbGRlckhlYWRlckdlbmVyYXRvcik6Cisg
ICAgICAgIChUeXBlQnVpbGRlckhlYWRlckdlbmVyYXRvci5fX2luaXRfXyk6CisgICAgICAgIChU
eXBlQnVpbGRlckhlYWRlckdlbmVyYXRvci5tb2RlbCk6CisgICAgICAgIChUeXBlQnVpbGRlckhl
YWRlckdlbmVyYXRvci5vdXRwdXRfZmlsZW5hbWUpOgorICAgICAgICAoVHlwZUJ1aWxkZXJIZWFk
ZXJHZW5lcmF0b3IuZ2VuZXJhdGVfbGljZW5zZSk6CisgICAgICAgIChUeXBlQnVpbGRlckhlYWRl
ckdlbmVyYXRvci5nZW5lcmF0ZV9vdXRwdXQpOgorICAgICAgICAoVHlwZUJ1aWxkZXJIZWFkZXJH
ZW5lcmF0b3IuX2dlbmVyYXRlX2ZvcndhcmRfZGVjbGFyYXRpb25zKToKKyAgICAgICAgKF9nZW5l
cmF0ZV90eXBlZGVmcyk6CisgICAgICAgIChfZ2VuZXJhdGVfdHlwZWRlZnNfZm9yX2RvbWFpbik6
CisgICAgICAgIChfZ2VuZXJhdGVfYnVpbGRlcnNfZm9yX2RvbWFpbik6CisgICAgICAgIChfZ2Vu
ZXJhdGVfY2xhc3NfZm9yX29iamVjdF9kZWNsYXJhdGlvbik6CisgICAgICAgIChfZ2VuZXJhdGVf
c3RydWN0X2Zvcl9lbnVtX2RlY2xhcmF0aW9uKToKKyAgICAgICAgKF9nZW5lcmF0ZV9zdHJ1Y3Rf
Zm9yX2Fub255bW91c19lbnVtX21lbWJlcik6CisgICAgICAgIChfZ2VuZXJhdGVfc3RydWN0X2Zv
cl9hbm9ueW1vdXNfZW51bV9tZW1iZXIuYXBwbHlfaW5kZW50YXRpb24pOgorICAgICAgICAoX2dl
bmVyYXRlX3N0cnVjdF9mb3JfZW51bV90eXBlKToKKyAgICAgICAgKF9nZW5lcmF0ZV9idWlsZGVy
X3N0YXRlX2VudW0pOgorICAgICAgICAoX2dlbmVyYXRlX2J1aWxkZXJfc2V0dGVyX2Zvcl9tZW1i
ZXIpOgorICAgICAgICAoX2dlbmVyYXRlX3VuY2hlY2tlZF9zZXR0ZXJfZm9yX21lbWJlcik6Cisg
ICAgICAgIChfZ2VuZXJhdGVfZm9yd2FyZF9kZWNsYXJhdGlvbnNfZm9yX2JpbmRpbmdfdHJhaXRz
KToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX3R5cGVfYnVp
bGRlcl9pbXBsZW1lbnRhdGlvbi5weTogQWRkZWQuCisgICAgICAgIChUeXBlQnVpbGRlckltcGxl
bWVudGF0aW9uR2VuZXJhdG9yKToKKyAgICAgICAgKFR5cGVCdWlsZGVySW1wbGVtZW50YXRpb25H
ZW5lcmF0b3IuX19pbml0X18pOgorICAgICAgICAoVHlwZUJ1aWxkZXJJbXBsZW1lbnRhdGlvbkdl
bmVyYXRvci5tb2RlbCk6CisgICAgICAgIChUeXBlQnVpbGRlckltcGxlbWVudGF0aW9uR2VuZXJh
dG9yLm91dHB1dF9maWxlbmFtZSk6CisgICAgICAgIChUeXBlQnVpbGRlckltcGxlbWVudGF0aW9u
R2VuZXJhdG9yLmdlbmVyYXRlX2xpY2Vuc2UpOgorICAgICAgICAoVHlwZUJ1aWxkZXJJbXBsZW1l
bnRhdGlvbkdlbmVyYXRvci5nZW5lcmF0ZV9vdXRwdXQpOgorICAgICAgICAoVHlwZUJ1aWxkZXJJ
bXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfZW51bV9tYXBwaW5nKToKKyAgICAgICAg
KFR5cGVCdWlsZGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX29wZW5fZmllbGRf
bmFtZXMpOgorICAgICAgICAoVHlwZUJ1aWxkZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2Vu
ZXJhdGVfYnVpbGRlcnNfZm9yX2RvbWFpbik6CisgICAgICAgIChUeXBlQnVpbGRlckltcGxlbWVu
dGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9ydW50aW1lX2Nhc3RfZm9yX29iamVjdF9kZWNsYXJh
dGlvbik6CisgICAgICAgIChUeXBlQnVpbGRlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5l
cmF0ZV9hc3NlcnRpb25fZm9yX29iamVjdF9kZWNsYXJhdGlvbik6CisgICAgICAgIChUeXBlQnVp
bGRlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9hc3NlcnRpb25fZm9yX2VudW0p
OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdG9yLnB5OiBBZGRl
ZC4KKyAgICAgICAgKHVjZmlyc3QpOgorICAgICAgICAoR2VuZXJhdG9yKToKKyAgICAgICAgKEdl
bmVyYXRvci5fX2luaXRfXyk6CisgICAgICAgIChHZW5lcmF0b3IubW9kZWwpOgorICAgICAgICAo
R2VuZXJhdG9yLmdlbmVyYXRlX2xpY2Vuc2UpOgorICAgICAgICAoR2VuZXJhdG9yLmRvbWFpbnNf
dG9fZ2VuZXJhdGUpOgorICAgICAgICAoR2VuZXJhdG9yLmdlbmVyYXRlX291dHB1dCk6CisgICAg
ICAgIChHZW5lcmF0b3Iub3V0cHV0X2ZpbGVuYW1lKToKKyAgICAgICAgKEdlbmVyYXRvci5lbmNv
ZGluZ19mb3JfZW51bV92YWx1ZSk6CisgICAgICAgIChHZW5lcmF0b3IuYXNzaWduZWRfZW51bV92
YWx1ZXMpOgorICAgICAgICAoR2VuZXJhdG9yLnR5cGVfbmVlZHNfcnVudGltZV9jYXN0cyk6Cisg
ICAgICAgIChHZW5lcmF0b3IudHlwZV9oYXNfb3Blbl9maWVsZHMpOgorICAgICAgICAoR2VuZXJh
dG9yLnR5cGVfbmVlZHNfc2hhcGVfYXNzZXJ0aW9ucyk6CisgICAgICAgIChHZW5lcmF0b3IuY2Fs
Y3VsYXRlX3R5cGVzX3JlcXVpcmluZ19zaGFwZV9hc3NlcnRpb25zKToKKyAgICAgICAgKEdlbmVy
YXRvci5jYWxjdWxhdGVfdHlwZXNfcmVxdWlyaW5nX3NoYXBlX2Fzc2VydGlvbnMuZ2F0aGVyX3Ry
YW5zaXRpdmVseV9yZWZlcmVuY2VkX3R5cGVzKToKKyAgICAgICAgKEdlbmVyYXRvci5fdHJhdmVy
c2VfYW5kX2Fzc2lnbl9lbnVtX3ZhbHVlcyk6CisgICAgICAgIChHZW5lcmF0b3IuX2Fzc2lnbl9l
bmNvZGluZ19mb3JfZW51bV92YWx1ZSk6CisgICAgICAgIChHZW5lcmF0b3Iud3JhcF93aXRoX2d1
YXJkX2Zvcl9kb21haW4pOgorICAgICAgICAoR2VuZXJhdG9yLnN0eWxpemVkX25hbWVfZm9yX2Vu
dW1fdmFsdWUpOgorICAgICAgICAoR2VuZXJhdG9yLnN0eWxpemVkX25hbWVfZm9yX2VudW1fdmFs
dWUucmVwbGFjZUNhbGxiYWNrKToKKyAgICAgICAgKEdlbmVyYXRvci5rZXllZF9nZXRfbWV0aG9k
X2Zvcl90eXBlKToKKyAgICAgICAgKEdlbmVyYXRvci5rZXllZF9zZXRfbWV0aG9kX2Zvcl90eXBl
KToKKyAgICAgICAgKEdlbmVyYXRvci50eXBlX2J1aWxkZXJfc3RyaW5nX2Zvcl90eXBlKToKKyAg
ICAgICAgKEdlbmVyYXRvci50eXBlX2J1aWxkZXJfc3RyaW5nX2Zvcl90eXBlX21lbWJlcik6Cisg
ICAgICAgIChHZW5lcmF0b3IudHlwZV9zdHJpbmdfZm9yX3VuY2hlY2tlZF9mb3JtYWxfaW5fcGFy
YW1ldGVyKToKKyAgICAgICAgKEdlbmVyYXRvci50eXBlX3N0cmluZ19mb3JfY2hlY2tlZF9mb3Jt
YWxfZXZlbnRfcGFyYW1ldGVyKToKKyAgICAgICAgKEdlbmVyYXRvci50eXBlX3N0cmluZ19mb3Jf
dHlwZV9tZW1iZXIpOgorICAgICAgICAoR2VuZXJhdG9yLnR5cGVfc3RyaW5nX2Zvcl90eXBlX3dp
dGhfbmFtZSk6CisgICAgICAgIChHZW5lcmF0b3IudHlwZV9zdHJpbmdfZm9yX2Zvcm1hbF9vdXRf
cGFyYW1ldGVyKToKKyAgICAgICAgKEdlbmVyYXRvci50eXBlX3N0cmluZ19mb3JfZm9ybWFsX2Fz
eW5jX3BhcmFtZXRlcik6CisgICAgICAgIChHZW5lcmF0b3IudHlwZV9zdHJpbmdfZm9yX3N0YWNr
X2luX3BhcmFtZXRlcik6CisgICAgICAgIChHZW5lcmF0b3IudHlwZV9zdHJpbmdfZm9yX3N0YWNr
X291dF9wYXJhbWV0ZXIpOgorICAgICAgICAoR2VuZXJhdG9yLmFzc2VydGlvbl9tZXRob2RfZm9y
X3R5cGVfbWVtYmVyKToKKyAgICAgICAgKEdlbmVyYXRvci5hc3NlcnRpb25fbWV0aG9kX2Zvcl90
eXBlX21lbWJlci5hc3NlcnRpb25fbWV0aG9kX2Zvcl90eXBlKToKKyAgICAgICAgKEdlbmVyYXRv
ci5jcHBfbmFtZV9mb3JfcHJpbWl0aXZlX3R5cGUpOgorICAgICAgICAoR2VuZXJhdG9yLmpzX25h
bWVfZm9yX3BhcmFtZXRlcl90eXBlKToKKyAgICAgICAgKEdlbmVyYXRvci5zaG91bGRfdXNlX3dy
YXBwZXJfZm9yX3JldHVybl90eXBlKToKKyAgICAgICAgKEdlbmVyYXRvci5zaG91bGRfcGFzc19i
eV9jb3B5X2Zvcl9yZXR1cm5fdHlwZSk6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29k
ZWdlbi9nZW5lcmF0b3JfdGVtcGxhdGVzLnB5OiBBZGRlZC4KKyAgICAgICAgKEdlbmVyYXRvclRl
bXBsYXRlcyk6CisgICAgICAgICh2b2lkKToKKyAgICAgICAgKEhhc2hNYXApOgorICAgICAgICAo
QnVpbGRlcik6CisgICAgICAgIChJbnNwZWN0b3IpOgorICAgICAgICAqIGluc3BlY3Rvci9zY3Jp
cHRzL2NvZGVnZW4vbW9kZWxzLnB5OiBBZGRlZC4KKyAgICAgICAgKHVjZmlyc3QpOgorICAgICAg
ICAoUGFyc2VFeGNlcHRpb24pOgorICAgICAgICAoVHlwZWNoZWNrRXhjZXB0aW9uKToKKyAgICAg
ICAgKEZyYW1ld29yayk6CisgICAgICAgIChGcmFtZXdvcmsuX19pbml0X18pOgorICAgICAgICAo
RnJhbWV3b3JrLnNldHRpbmcpOgorICAgICAgICAoRnJhbWV3b3JrLmZyb21TdHJpbmcpOgorICAg
ICAgICAoRnJhbWV3b3Jrcyk6CisgICAgICAgIChUeXBlUmVmZXJlbmNlKToKKyAgICAgICAgKFR5
cGVSZWZlcmVuY2UuX19pbml0X18pOgorICAgICAgICAoVHlwZVJlZmVyZW5jZS5yZWZlcmVuY2Vk
X25hbWUpOgorICAgICAgICAoVHlwZSk6CisgICAgICAgIChUeXBlLl9faW5pdF9fKToKKyAgICAg
ICAgKFR5cGUuX19lcV9fKToKKyAgICAgICAgKFR5cGUuX19oYXNoX18pOgorICAgICAgICAoVHlw
ZS5yYXdfbmFtZSk6CisgICAgICAgIChUeXBlLmlzX2VudW0pOgorICAgICAgICAoVHlwZS50eXBl
X2RvbWFpbik6CisgICAgICAgIChUeXBlLnF1YWxpZmllZF9uYW1lKToKKyAgICAgICAgKFR5cGUu
cmVzb2x2ZV90eXBlX3JlZmVyZW5jZXMpOgorICAgICAgICAoUHJpbWl0aXZlVHlwZSk6CisgICAg
ICAgIChQcmltaXRpdmVUeXBlLl9faW5pdF9fKToKKyAgICAgICAgKFByaW1pdGl2ZVR5cGUuX19y
ZXByX18pOgorICAgICAgICAoUHJpbWl0aXZlVHlwZS50eXBlX2RvbWFpbik6CisgICAgICAgIChQ
cmltaXRpdmVUeXBlLnF1YWxpZmllZF9uYW1lKToKKyAgICAgICAgKEFsaWFzZWRUeXBlKToKKyAg
ICAgICAgKEFsaWFzZWRUeXBlLl9faW5pdF9fKToKKyAgICAgICAgKEFsaWFzZWRUeXBlLl9fcmVw
cl9fKToKKyAgICAgICAgKEFsaWFzZWRUeXBlLmlzX2VudW0pOgorICAgICAgICAoQWxpYXNlZFR5
cGUudHlwZV9kb21haW4pOgorICAgICAgICAoQWxpYXNlZFR5cGUucXVhbGlmaWVkX25hbWUpOgor
ICAgICAgICAoQWxpYXNlZFR5cGUucmVzb2x2ZV90eXBlX3JlZmVyZW5jZXMpOgorICAgICAgICAo
RW51bVR5cGUpOgorICAgICAgICAoRW51bVR5cGUuX19pbml0X18pOgorICAgICAgICAoRW51bVR5
cGUuX19yZXByX18pOgorICAgICAgICAoRW51bVR5cGUuaXNfZW51bSk6CisgICAgICAgIChFbnVt
VHlwZS50eXBlX2RvbWFpbik6CisgICAgICAgIChFbnVtVHlwZS5lbnVtX3ZhbHVlcyk6CisgICAg
ICAgIChFbnVtVHlwZS5xdWFsaWZpZWRfbmFtZSk6CisgICAgICAgIChFbnVtVHlwZS5yZXNvbHZl
X3R5cGVfcmVmZXJlbmNlcyk6CisgICAgICAgIChBcnJheVR5cGUpOgorICAgICAgICAoQXJyYXlU
eXBlLl9faW5pdF9fKToKKyAgICAgICAgKEFycmF5VHlwZS5fX3JlcHJfXyk6CisgICAgICAgIChB
cnJheVR5cGUudHlwZV9kb21haW4pOgorICAgICAgICAoQXJyYXlUeXBlLnF1YWxpZmllZF9uYW1l
KToKKyAgICAgICAgKEFycmF5VHlwZS5yZXNvbHZlX3R5cGVfcmVmZXJlbmNlcyk6CisgICAgICAg
IChPYmplY3RUeXBlKToKKyAgICAgICAgKE9iamVjdFR5cGUuX19pbml0X18pOgorICAgICAgICAo
T2JqZWN0VHlwZS5fX3JlcHJfXyk6CisgICAgICAgIChPYmplY3RUeXBlLnR5cGVfZG9tYWluKToK
KyAgICAgICAgKE9iamVjdFR5cGUucXVhbGlmaWVkX25hbWUpOgorICAgICAgICAoY2hlY2tfZm9y
X3JlcXVpcmVkX3Byb3BlcnRpZXMpOgorICAgICAgICAoUHJvdG9jb2wpOgorICAgICAgICAoUHJv
dG9jb2wuX19pbml0X18pOgorICAgICAgICAoUHJvdG9jb2wucGFyc2Vfc3BlY2lmaWNhdGlvbik6
CisgICAgICAgIChQcm90b2NvbC5wYXJzZV9kb21haW4pOgorICAgICAgICAoUHJvdG9jb2wucGFy
c2VfdHlwZV9kZWNsYXJhdGlvbik6CisgICAgICAgIChQcm90b2NvbC5wYXJzZV90eXBlX21lbWJl
cik6CisgICAgICAgIChQcm90b2NvbC5wYXJzZV9jb21tYW5kKToKKyAgICAgICAgKFByb3RvY29s
LnBhcnNlX2V2ZW50KToKKyAgICAgICAgKFByb3RvY29sLnBhcnNlX2NhbGxfb3JfcmV0dXJuX3Bh
cmFtZXRlcik6CisgICAgICAgIChQcm90b2NvbC5yZXNvbHZlX3R5cGVzKToKKyAgICAgICAgKFBy
b3RvY29sLmxvb2t1cF90eXBlX2Zvcl9kZWNsYXJhdGlvbik6CisgICAgICAgIChQcm90b2NvbC5s
b29rdXBfdHlwZV9yZWZlcmVuY2UpOgorICAgICAgICAoRG9tYWluKToKKyAgICAgICAgKERvbWFp
bi5fX2luaXRfXyk6CisgICAgICAgIChEb21haW4ucmVzb2x2ZV90eXBlX3JlZmVyZW5jZXMpOgor
ICAgICAgICAoRG9tYWlucyk6CisgICAgICAgIChUeXBlRGVjbGFyYXRpb24pOgorICAgICAgICAo
VHlwZURlY2xhcmF0aW9uLl9faW5pdF9fKToKKyAgICAgICAgKFR5cGVEZWNsYXJhdGlvbi5yZXNv
bHZlX3R5cGVfcmVmZXJlbmNlcyk6CisgICAgICAgIChUeXBlTWVtYmVyKToKKyAgICAgICAgKFR5
cGVNZW1iZXIuX19pbml0X18pOgorICAgICAgICAoVHlwZU1lbWJlci5yZXNvbHZlX3R5cGVfcmVm
ZXJlbmNlcyk6CisgICAgICAgIChQYXJhbWV0ZXIpOgorICAgICAgICAoUGFyYW1ldGVyLl9faW5p
dF9fKToKKyAgICAgICAgKFBhcmFtZXRlci5yZXNvbHZlX3R5cGVfcmVmZXJlbmNlcyk6CisgICAg
ICAgIChDb21tYW5kKToKKyAgICAgICAgKENvbW1hbmQuX19pbml0X18pOgorICAgICAgICAoQ29t
bWFuZC5yZXNvbHZlX3R5cGVfcmVmZXJlbmNlcyk6CisgICAgICAgIChFdmVudCk6CisgICAgICAg
IChFdmVudC5fX2luaXRfXyk6CisgICAgICAgIChFdmVudC5yZXNvbHZlX3R5cGVfcmVmZXJlbmNl
cyk6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5OiBBZGRlZC4KKyAgICAgICAgKEluY3JlbWVudGFsRmlsZVdyaXRlcik6
CisgICAgICAgIChJbmNyZW1lbnRhbEZpbGVXcml0ZXIuX19pbml0X18pOgorICAgICAgICAoSW5j
cmVtZW50YWxGaWxlV3JpdGVyLndyaXRlKToKKyAgICAgICAgKEluY3JlbWVudGFsRmlsZVdyaXRl
ci5jbG9zZSk6CisgICAgICAgIChnZW5lcmF0ZV9mcm9tX3NwZWNpZmljYXRpb24pOgorICAgICAg
ICAoZ2VuZXJhdGVfZnJvbV9zcGVjaWZpY2F0aW9uLmxvYWRfc3BlY2lmaWNhdGlvbik6CisgICAg
ICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1
dGUuanNvbjogQWRkZWQuCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvY29tbWFu
ZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb246IEFkZGVkLgorICAg
ICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2RvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1h
bmQtc2l6ZXMuanNvbjogQWRkZWQuCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
ZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uOiBBZGRlZC4KKyAgICAgICAgKiBp
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9jb21tYW5kcy13aXRoLWFzeW5jLWF0dHJp
YnV0ZS5qc29uLXJlc3VsdDogQWRkZWQuCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJz
Lmpzb24tcmVzdWx0OiBBZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9l
eHBlY3RlZC9kb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24tcmVzdWx0OiBB
ZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9ldmVudHMt
d2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0OiBBZGRlZC4KKyAgICAgICAgKiBp
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWR1cGxpY2F0ZS10eXBlLWRlY2xhcmF0aW9u
cy5qc29uLWVycm9yOiBBZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9m
YWlsLW9uLWVudW0td2l0aC1uby12YWx1ZXMuanNvbi1lcnJvcjogQWRkZWQuCisgICAgICAgICog
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi10eXBlLWRlY2xhcmF0aW9uLXVzaW5nLXR5
cGUtcmVmZXJlbmNlLmpzb24tZXJyb3I6IEFkZGVkLgorICAgICAgICAqIGluc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2ZhaWwtb24tdHlwZS13aXRoLWxvd2VyY2FzZS1uYW1lLmpzb24tZXJyb3I6IEFk
ZGVkLgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tdW5rbm93bi10
eXBlLXJlZmVyZW5jZS1pbi10eXBlLWRlY2xhcmF0aW9uLmpzb24tZXJyb3I6IEFkZGVkLgorICAg
ICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVy
ZW5jZS1pbi10eXBlLW1lbWJlci5qc29uLWVycm9yOiBBZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9zYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5q
c29uLXJlc3VsdDogQWRkZWQuCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhw
ZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24tcmVzdWx0
OiBBZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBl
LWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbi1yZXN1bHQ6IEFkZGVkLgorICAgICAgICAqIGlu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tZW51bS10eXBl
Lmpzb24tcmVzdWx0OiBBZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9l
eHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24tcmVzdWx0OiBBZGRlZC4K
KyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLXJlcXVpcmlu
Zy1ydW50aW1lLWNhc3RzLmpzb24tcmVzdWx0OiBBZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9mYWlsLW9uLWR1cGxpY2F0ZS10eXBlLWRlY2xhcmF0aW9ucy5qc29uOiBB
ZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWVudW0td2l0
aC1uby12YWx1ZXMuanNvbjogQWRkZWQuCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZmFpbC1vbi10eXBlLWRlY2xhcmF0aW9uLXVzaW5nLXR5cGUtcmVmZXJlbmNlLmpzb246IEFk
ZGVkLgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tdHlwZS13aXRo
LWxvd2VyY2FzZS1uYW1lLmpzb246IEFkZGVkLgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2ZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVyZW5jZS1pbi10eXBlLWRlY2xhcmF0aW9u
Lmpzb246IEFkZGVkLgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24t
dW5rbm93bi10eXBlLXJlZmVyZW5jZS1pbi10eXBlLW1lbWJlci5qc29uOiBBZGRlZC4KKyAgICAg
ICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9zYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFp
bi5qc29uOiBBZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy90eXBlLWRl
Y2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbjogQWRkZWQuCisgICAgICAgICog
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb246
IEFkZGVkLgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3R5cGUtZGVjbGFyYXRp
b24tZW51bS10eXBlLmpzb246IEFkZGVkLgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL3R5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbjogQWRkZWQuCisgICAgICAgICog
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29u
OiBBZGRlZC4KKworMjAxNC0wOC0xMSAgQnJpYW4gSi4gQnVyZyAgPGJ1cmdAY3Mud2FzaGluZ3Rv
bi5lZHU+CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogdXNlIHR5cGUgYnVpbGRlcnMgdG8gY29u
c3RydWN0IGhpZ2ggZmlkZWxpdHkgdHlwZSBpbmZvcm1hdGlvbiBwYXlsb2FkcworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM1ODAzCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRHVlIHRvIHNvbWUgdHlwb3Mg
aW4gdGhlIHByb3RvY29sIGZpbGUsIHRoZSBjb2RlIGhhZCB3b3JrZWQgd2l0aCByYXcgb2JqZWN0
cworICAgICAgICByYXRoZXIgdGhhbiB3aXRoIHR5cGUgYnVpbGRlcnMuIENvbnZlcnQgdG8gdXNp
bmcgYnVpbGRlcnMuCisKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclJ1bnRp
bWVBZ2VudC5jcHA6CisgICAgICAgIChJbnNwZWN0b3I6Okluc3BlY3RvclJ1bnRpbWVBZ2VudDo6
Z2V0UnVudGltZVR5cGVzRm9yVmFyaWFibGVzQXRPZmZzZXRzKToKKyAgICAgICAgKiBpbnNwZWN0
b3IvYWdlbnRzL0luc3BlY3RvclJ1bnRpbWVBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9w
cm90b2NvbC9SdW50aW1lLmpzb246IEZpeCAnaXRlbScgZm9yICdpdGVtcyc7IHRydWUgZm9yICd0
cnVlJy4KKyAgICAgICAgKiBydW50aW1lL0hpZ2hGaWRlbGl0eVR5cGVQcm9maWxlci5jcHA6Cisg
ICAgICAgIChKU0M6OkhpZ2hGaWRlbGl0eVR5cGVQcm9maWxlcjo6Z2V0VHlwZXNGb3JWYXJpYWJs
ZUF0T2Zmc2V0Rm9ySW5zcGVjdG9yKToKKyAgICAgICAgKiBydW50aW1lL0hpZ2hGaWRlbGl0eVR5
cGVQcm9maWxlci5oOgorICAgICAgICAqIHJ1bnRpbWUvVHlwZVNldC5jcHA6CisgICAgICAgIChK
U0M6OlR5cGVTZXQ6OmFsbFN0cnVjdHVyZVJlcHJlc2VudGF0aW9ucyk6CisgICAgICAgIChKU0M6
OlN0cnVjdHVyZVNoYXBlOjpzdHJpbmdSZXByZXNlbnRhdGlvbik6CisgICAgICAgIChKU0M6OlN0
cnVjdHVyZVNoYXBlOjppbnNwZWN0b3JSZXByZXNlbnRhdGlvbik6CisgICAgICAgICogcnVudGlt
ZS9UeXBlU2V0Lmg6CisKIDIwMTQtMDgtMTQgIFNhYW0gQmFyYXRpICA8c2JhcmF0aUBhcHBsZS5j
b20+CiAKICAgICAgICAgQWxsb3cgaGlnaCBmaWRlbGl0eSB0eXBlIHByb2ZpbGluZyB0byBiZSBl
bmFibGVkIGFuZCBkaXNhYmxlZC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA4MjM4NWE1OWVlNjc1ZTcyOGE4YzE5
YWY4MjE2MmJmZTgxYTMwZTYyLi4wMDIxYjg2ZDJjMGY0MTBlMTU4MGRjMTkyZmQ3MWQ3Zjg2NjU0
NTZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODggQEAKKzIwMTQtMDgtMTQgIEJyaWFuIEouIEJ1
cmcgIDxidXJnQGNzLndhc2hpbmd0b24uZWR1PgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IHJl
d3JpdGUgQ29kZUdlbmVyYXRvckluc3BlY3RvciB0byBiZSBtb2R1bGFyIGFuZCB0ZXN0YWJsZQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMxNTk2CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgorCisgICAgICAgIEFzaWRlIGZy
b20gaG9va2luZyB1cCB0aGUgbmV3IGluc3BlY3RvciBiaW5kaW5ncyBnZW5lcmF0b3IgdG8gdGhl
IGJ1aWxkIHN5c3RlbSwKKyAgICAgICAgdGhlcmUgYXJlIGEgZmV3IGNvbWluZ2xlZCBjaGFuZ2Vz
IHRoYXQgd291bGQgYmUgcGFpbmZ1bCB0byBzcGxpdCBmcm9tIHRoZSBtYWluCisgICAgICAgIHBh
dGNoLiBUb2dldGhlciwgdGhlc2UgY2hhbmdlcyBtYWtlIGl0IHBvc3NpYmxlIHRvIGZvcndhcmQt
ZGVjbGFyZSBhbGwgcHJvdG9jb2wKKyAgICAgICAgZW51bWVyYXRpb25zIGFzIHNjb3BlZCBlbnVt
cywgcmVkdWNpbmcgd2VpcmQgb3JkZXJpbmcgZGVwZW5kZW5jaWVzIGJldHdlZW4gZG9tYWlucy4K
KworICAgICAgICBBbGwgcnVudGltZUNhc3QoKSBtZXRob2RzIGFyZSBub3cgc3RhdGljIG1ldGhv
ZHMgb2YgQmluZGluZ1RyYWl0cyBzcGVjaWFsaXphdGlvbnMsCisgICAgICAgIHJhdGhlciB0aGFu
IGFzIHN0YXRpYyBtZXRob2RzIG9mIHRoZSB0eXBlIGJ1aWxkZXIgY2xhc3Nlcy4KKworICAgICAg
ICBBbGwgcHJvdG9jb2wgZW51bWVyYXRpb24gdHlwZXMgYXJlIHNjb3BlZCBlbnVtcyByYXRoZXIg
dGhhbiBzdHJ1Y3QtbmFtZXNwYWNlZCBlbnVtcy4KKworICAgICAgICBSZW1vdmUgc29tZSBpbXBs
aWNpdCBwcm90b2NvbCB0eXBlIGFuZCBlbnVtZXJhdGlvbiBkZWZpbml0aW9ucyBiZWNhdXNlIHRo
ZXkgdHJpZ2dlcgorICAgICAgICBjb21waWxlciBidWdzIG9yIGludHJvZHVjZSB1bm5lY2Vzc2Fy
eSBjb21wbGV4aXR5IGluIHRoZSBiaW5kaW5ncyBnZW5lcmF0b3IuCisKKyAgICAgICAgTm8gbmV3
IHRlc3RzLCBubyBiZWhhdmlvciBjaGFuZ2VkLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6
CisgICAgICAgICogRGVyaXZlZFNvdXJjZXMubWFrZTogVXBkYXRlIHNjcmlwdCBkZXBlbmRlbmNp
ZXMgYW5kIHRoZSBiaW5kaW5ncyBnZW5lcmF0b3Igc2NyaXB0IG5hbWUuCisKKyAgICAgICAgKiBp
bnNwZWN0b3IvQ29tbWFuZExpbmVBUElIb3N0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbW1h
bmRMaW5lQVBJSG9zdDo6aW5zcGVjdEltcGwpOiBDb252ZXJ0IHRvIEJpbmRpbmdUcmFpdHMuCisK
KyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yQ1NTQWdlbnQ6OmRldGVjdE9yaWdpbik6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JDU1NBZ2VudDo6YnVpbGRBcnJheUZvclJlZ2lvbnMpOgorICAgICAgICAqIGlu
c3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0
b3JET01BZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6YnVp
bGRPYmplY3RGb3JBY2Nlc3NpYmlsaXR5UHJvcGVydGllcyk6CisgICAgICAgICogaW5zcGVjdG9y
L0luc3BlY3RvclBhZ2VBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JQYWdl
QWdlbnQ6OnJlc291cmNlVHlwZUpzb24pOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUGFn
ZUFnZW50OjpjYWNoZWRSZXNvdXJjZVR5cGVKc29uKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvclBhZ2VBZ2VudDo6Z2V0U2NyaXB0RXhlY3V0aW9uU3RhdHVzKTogQ29udmVydCB0byBzY29w
ZWQgZW51bXMuCisKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclBhZ2VBZ2VudDo6YnVpbGRP
YmplY3RGb3JGcmFtZVRyZWUpOiBFeHRyYWN0IEZyYW1lUmVzb3VyY2VUcmVlOjpSZXNvdXJjZXMK
KyAgICAgICAgaW50byBpdHMgb3duIGV4cGxpY2l0bHktZGVmaW5lZCBvYmplY3QgdHlwZS4gVGhl
IG5ldyBnZW5lcmF0b3IgZG9lcyBub3Qgc3VwcG9ydCBpbXBsaWNpdGx5CisgICAgICAgIGRlZmlu
aW5nIG9iamVjdCB0eXBlcyBhcyBlbGVtZW50cyBvZiBhcnJheXMuCisgICAgICAgICogaW5zcGVj
dG9yL0luc3BlY3RvclBhZ2VBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JS
ZXBsYXlBZ2VudC5jcHA6IERpc2FtYmlndWF0ZSBiZXR3ZWVuIGludGVybmFsIGFuZCBwcm90b2Nv
bCB0eXBlcy4KKyAgICAgICAgKFdlYkNvcmU6OmJ1aWxkSW5zcGVjdG9yT2JqZWN0Rm9yU2Vzc2lv
blN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OmJ1aWxkSW5zcGVjdG9yT2JqZWN0Rm9yU2VnbWVu
dFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclJlcGxheUFnZW50OjpzZXNzaW9u
U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUmVwbGF5QWdlbnQ6OmRpZENyZWF0
ZUZyb250ZW5kQW5kQmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JSZXBsYXlB
Z2VudDo6ZnJhbWVOYXZpZ2F0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUmVwbGF5
QWdlbnQ6OmZyYW1lRGV0YWNoZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUmVwbGF5
QWdlbnQ6OndpbGxEaXNwYXRjaEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclJl
cGxheUFnZW50OjpzdGFydENhcHR1cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JS
ZXBsYXlBZ2VudDo6c3RvcENhcHR1cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JS
ZXBsYXlBZ2VudDo6cmVwbGF5VG9Qb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JSZXBsYXlBZ2VudDo6cmVwbGF5VG9Db21wbGV0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvclJlcGxheUFnZW50OjpwYXVzZVBsYXliYWNrKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvclJlcGxheUFnZW50OjpjYW5jZWxQbGF5YmFjayk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JSZXBsYXlBZ2VudDo6c3dpdGNoU2Vzc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JSZXBsYXlBZ2VudDo6aW5zZXJ0U2Vzc2lvblNlZ21lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yUmVwbGF5QWdlbnQ6OnJlbW92ZVNlc3Npb25TZWdtZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvclJlcGxheUFnZW50OjpjdXJyZW50UmVwbGF5U3RhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yUmVwbGF5QWdlbnQ6OmdldEF2YWlsYWJsZVNlc3Np
b25zKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclJlcGxheUFnZW50OjpnZXRTZXNzaW9u
RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JSZXBsYXlBZ2VudDo6Z2V0U2VnbWVu
dERhdGEpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JSZXBsYXlBZ2VudC5oOgorICAg
ICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZUFnZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvclJlc291cmNlQWdlbnQ6OndpbGxTZW5kUmVxdWVzdCk6CisgICAgICAg
ICogaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwOiBDb252ZXJ0IHRvIHNjb3BlZCBl
bnVtcy4gRXh0cmFjdCBDU1NQcm9wZXJ0eTo6U3RhdHVzCisgICAgICAgIGJlY2F1c2Ugc2NvcGVk
IGVudW1zIGRlZmluZWQgaW4gYSBjbGFzcyBzY29wZSB0cmlnZ2VyIGNvbXBpbGVyIGJ1Z3MgaW4g
R0NDIDQuOC4KKyAgICAgICAgKFdlYkNvcmU6OmJ1aWxkTWVkaWFPYmplY3QpOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yU3R5bGU6OnN0eWxlV2l0aFByb3BlcnRpZXMpOiBXb3JrIGFyb3Vu
ZCBjb21waWxlciBkaXNhZ3JlZW1lbnRzLgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5
bGVTaGVldDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0eWxlU2hlZXQ6
Okluc3BlY3RvclN0eWxlU2hlZXQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGVT
aGVldEZvcklubGluZVN0eWxlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
U3R5bGVTaGVldEZvcklubGluZVN0eWxlOjpJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5
bGUpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0Lmg6CisKKyAgICAg
ICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5jcHA6IENvbnZlcnQgdG8gc2Nv
cGVkIGVudW1zIGFuZCBCaW5kaW5nVHJhaXRzLgorICAgICAgICAoV2ViQ29yZTo6dG9Qcm90b2Nv
bCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JUaW1lbGluZUFnZW50OjphZGRSZWNvcmRU
b1RpbWVsaW5lKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OnNl
bmRFdmVudCk6CisKKyAgICAgICAgKiBpbnNwZWN0b3IvcHJvdG9jb2wvQ1NTLmpzb246IEV4dHJh
Y3QgQ1NTUHJvcGVydHk6OlN0YXR1cy4KKyAgICAgICAgKiBpbnNwZWN0b3IvcHJvdG9jb2wvUGFn
ZS5qc29uOiBFeHRyYWN0IEZyYW1lUmVzb3VyY2VUcmVlOjpSZXNvdXJjZXMuCisKIDIwMTQtMDgt
MTQgIFNhYW0gQmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CiAKICAgICAgICAgQWxsb3cgaGln
aCBmaWRlbGl0eSB0eXBlIHByb2ZpbGluZyB0byBiZSBlbmFibGVkIGFuZCBkaXNhYmxlZC4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViSW5z
cGVjdG9yVUkvQ2hhbmdlTG9nCmluZGV4IDA4NGE1ZTYzODVkMjVmYTFiYWM3NzlmYTdiZTY4M2Fk
M2QxN2JlNGQuLmQ5NWRkMmVhZDc5NDQ2YmE5YTQ5YzkzOWJkZDA0MDM2Njc2M2YwMmIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYklu
c3BlY3RvclVJL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDE0LTA4LTE0ICBCcmlhbiBK
LiBCdXJnICA8YnVyZ0Bjcy53YXNoaW5ndG9uLmVkdT4KKworICAgICAgICBXZWIgSW5zcGVjdG9y
OiByZXdyaXRlIENvZGVHZW5lcmF0b3JJbnNwZWN0b3IgdG8gYmUgbW9kdWxhciBhbmQgdGVzdGFi
bGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMTU5
NgorCisgICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KKworICAgICAgICBBbHNv
IGFwcGx5IHR5cGUgZXh0cmFjdGlvbiByZWZhY3RvcmluZ3MgdG8gb2xkIHByb3RvY29sIHZlcnNp
b25zIGZvciBjb25zaXN0ZW5jeS4KKworICAgICAgICAqIFZlcnNpb25zL0luc3BlY3Rvci1pT1Mt
Ni4wLmpzb246CisgICAgICAgICogVmVyc2lvbnMvSW5zcGVjdG9yLWlPUy03LjAuanNvbjoKKwog
MjAxNC0wOC0xNCAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgogCiAgICAg
ICAgIFdlYiBJbnNwZWN0b3I6IEF2b2lkIHJlLWJpbmRpbmcgdGhlIHNhbWUgZnVuY3Rpb24gb3Zl
ciBhbmQgb3ZlcgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMu
dHh0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IGE4N2U4YjJl
NTliY2IwZTI5M2UyMWE1YjI1ODA3ZTNjNzAzNWVkZmEuLjgxNWEyMmIxZDJiMDE0NDk5ODJiYWNi
Mzc0Y2FjNzEzODVkYjAzMzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFr
ZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKQEAg
LTkwNyw2ICs5MDcsMjEgQEAgQUREX1NPVVJDRV9ERVBFTkRFTkNJRVMoJHtDTUFLRV9DVVJSRU5U
X1NPVVJDRV9ESVJ9L3BhcnNlci9MZXhlci5jcHAgJHtERVJJVkVEX1MKIAogc2V0KEphdmFTY3Jp
cHRDb3JlX0lOU1BFQ1RPUl9TQ1JJUFRTX0RJUiAiJHtKQVZBU0NSSVBUQ09SRV9ESVJ9L2luc3Bl
Y3Rvci9zY3JpcHRzIikKIAorc2V0KEphdmFTY3JpcHRDb3JlX0lOU1BFQ1RPUl9QUk9UT0NPTF9T
Q1JJUFRTCisgICAgJHtKYXZhU2NyaXB0Q29yZV9JTlNQRUNUT1JfU0NSSVBUU19ESVJ9L2dlbmVy
YXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorICAgICR7SmF2YVNjcmlwdENvcmVf
SU5TUEVDVE9SX1NDUklQVFNfRElSfS9jb2RlZ2VuL2dlbmVyYXRlX2JhY2tlbmRfY29tbWFuZHMu
cHkKKyAgICAke0phdmFTY3JpcHRDb3JlX0lOU1BFQ1RPUl9TQ1JJUFRTX0RJUn0vY29kZWdlbi9n
ZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5CisgICAgJHtKYXZhU2NyaXB0Q29y
ZV9JTlNQRUNUT1JfU0NSSVBUU19ESVJ9L2NvZGVnZW4vZ2VuZXJhdGVfYmFja2VuZF9kaXNwYXRj
aGVyX2ltcGxlbWVudGF0aW9uLnB5CisgICAgJHtKYXZhU2NyaXB0Q29yZV9JTlNQRUNUT1JfU0NS
SVBUU19ESVJ9L2NvZGVnZW4vZ2VuZXJhdGVfZnJvbnRlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkK
KyAgICAke0phdmFTY3JpcHRDb3JlX0lOU1BFQ1RPUl9TQ1JJUFRTX0RJUn0vY29kZWdlbi9nZW5l
cmF0ZV9mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5CisgICAgJHtKYXZhU2Ny
aXB0Q29yZV9JTlNQRUNUT1JfU0NSSVBUU19ESVJ9L2NvZGVnZW4vZ2VuZXJhdGVfdHlwZV9idWls
ZGVyX2hlYWRlci5weQorICAgICR7SmF2YVNjcmlwdENvcmVfSU5TUEVDVE9SX1NDUklQVFNfRElS
fS9jb2RlZ2VuL2dlbmVyYXRlX3R5cGVfYnVpbGRlcl9pbXBsZW1lbnRhdGlvbi5weQorICAgICR7
SmF2YVNjcmlwdENvcmVfSU5TUEVDVE9SX1NDUklQVFNfRElSfS9jb2RlZ2VuL2dlbmVyYXRvci5w
eQorICAgICR7SmF2YVNjcmlwdENvcmVfSU5TUEVDVE9SX1NDUklQVFNfRElSfS9jb2RlZ2VuL2dl
bmVyYXRvcl90ZW1wbGF0ZXMucHkKKyAgICAke0phdmFTY3JpcHRDb3JlX0lOU1BFQ1RPUl9TQ1JJ
UFRTX0RJUn0vY29kZWdlbi9fX2luaXRfXy5weQorICAgICR7SmF2YVNjcmlwdENvcmVfSU5TUEVD
VE9SX1NDUklQVFNfRElSfS9jb2RlZ2VuL21vZGVscy5weQorKQorCiBzZXQoSmF2YVNjcmlwdENv
cmVfSU5TUEVDVE9SX0RPTUFJTlMKICAgICAke0pBVkFTQ1JJUFRDT1JFX0RJUn0vaW5zcGVjdG9y
L3Byb3RvY29sL0NvbnNvbGUuanNvbgogICAgICR7SkFWQVNDUklQVENPUkVfRElSfS9pbnNwZWN0
b3IvcHJvdG9jb2wvRGVidWdnZXIuanNvbgpAQCAtOTMzLDkgKzk0OCw4IEBAIGFkZF9jdXN0b21f
Y29tbWFuZCgKICAgICAgICAgICAgJHtERVJJVkVEX1NPVVJDRVNfSkFWQVNDUklQVENPUkVfRElS
fS9pbnNwZWN0b3IvSW5zcGVjdG9ySlNUeXBlQnVpbGRlcnMuaAogICAgICAgICAgICAke0RFUklW
RURfU09VUkNFU19XRUJJTlNQRUNUT1JVSV9ESVJ9L1VzZXJJbnRlcmZhY2UvUHJvdG9jb2wvSW5z
cGVjdG9ySlNCYWNrZW5kQ29tbWFuZHMuanMKICAgICBNQUlOX0RFUEVOREVOQ1kgJHtERVJJVkVE
X1NPVVJDRVNfSkFWQVNDUklQVENPUkVfRElSfS9JbnNwZWN0b3JKUy5qc29uCi0gICAgREVQRU5E
UyAke0phdmFTY3JpcHRDb3JlX0lOU1BFQ1RPUl9TQ1JJUFRTX0RJUn0vQ29kZUdlbmVyYXRvcklu
c3BlY3Rvci5weQotICAgICAgICAgICAgJHtKYXZhU2NyaXB0Q29yZV9JTlNQRUNUT1JfU0NSSVBU
U19ESVJ9L0NvZGVHZW5lcmF0b3JJbnNwZWN0b3JTdHJpbmdzLnB5Ci0gICAgQ09NTUFORCAke1BZ
VEhPTl9FWEVDVVRBQkxFfSAke0phdmFTY3JpcHRDb3JlX0lOU1BFQ1RPUl9TQ1JJUFRTX0RJUn0v
Q29kZUdlbmVyYXRvckluc3BlY3Rvci5weSAke0RFUklWRURfU09VUkNFU19KQVZBU0NSSVBUQ09S
RV9ESVJ9L0luc3BlY3RvckpTLmpzb24gLS1vdXRwdXRfaF9kaXIgIiR7REVSSVZFRF9TT1VSQ0VT
X0pBVkFTQ1JJUFRDT1JFX0RJUn0vaW5zcGVjdG9yIiAtLW91dHB1dF9jcHBfZGlyICIke0RFUklW
RURfU09VUkNFU19KQVZBU0NSSVBUQ09SRV9ESVJ9L2luc3BlY3RvciIgLS1vdXRwdXRfanNfZGly
ICIke0RFUklWRURfU09VUkNFU19XRUJJTlNQRUNUT1JVSV9ESVJ9L1VzZXJJbnRlcmZhY2UvUHJv
dG9jb2wiIC0tb3V0cHV0X3R5cGUgSmF2YVNjcmlwdCAtLXdyaXRlX2Fsd2F5cworICAgIERFUEVO
RFMgJHtKYXZhU2NyaXB0Q29yZV9JTlNQRUNUT1JfUFJPVE9DT0xfU0NSSVBUU30KKyAgICBDT01N
QU5EICR7UFlUSE9OX0VYRUNVVEFCTEV9ICR7SmF2YVNjcmlwdENvcmVfSU5TUEVDVE9SX1NDUklQ
VFNfRElSfS9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkgLS1vdXRwdXRE
aXIgIiR7REVSSVZFRF9TT1VSQ0VTX0pBVkFTQ1JJUFRDT1JFX0RJUn0iIC0tZnJhbWV3b3JrIEph
dmFTY3JpcHRDb3JlICR7REVSSVZFRF9TT1VSQ0VTX0pBVkFTQ1JJUFRDT1JFX0RJUn0vSW5zcGVj
dG9ySlMuanNvbiAmJiBta2RpciAtcCAke0RFUklWRURfU09VUkNFU19KQVZBU0NSSVBUQ09SRV9E
SVJ9L2luc3BlY3RvciAmJiBjcCAke0RFUklWRURfU09VUkNFU19KQVZBU0NSSVBUQ09SRV9ESVJ9
L0luc3BlY3RvckpTQmFja2VuZERpc3BhdGNoZXJzLmggJHtERVJJVkVEX1NPVVJDRVNfSkFWQVND
UklQVENPUkVfRElSfS9JbnNwZWN0b3JKU0JhY2tlbmREaXNwYXRjaGVycy5jcHAgJHtERVJJVkVE
X1NPVVJDRVNfSkFWQVNDUklQVENPUkVfRElSfS9JbnNwZWN0b3JKU0Zyb250ZW5kRGlzcGF0Y2hl
cnMuaCAke0RFUklWRURfU09VUkNFU19KQVZBU0NSSVBUQ09SRV9ESVJ9L0luc3BlY3RvckpTRnJv
bnRlbmREaXNwYXRjaGVycy5jcHAgJHtERVJJVkVEX1NPVVJDRVNfSkFWQVNDUklQVENPUkVfRElS
fS9JbnNwZWN0b3JKU1R5cGVCdWlsZGVycy5oICR7REVSSVZFRF9TT1VSQ0VTX0pBVkFTQ1JJUFRD
T1JFX0RJUn0vSW5zcGVjdG9ySlNUeXBlQnVpbGRlcnMuY3BwICR7REVSSVZFRF9TT1VSQ0VTX0pB
VkFTQ1JJUFRDT1JFX0RJUn0vaW5zcGVjdG9yICYmIG1rZGlyIC1wICR7REVSSVZFRF9TT1VSQ0VT
X1dFQklOU1BFQ1RPUlVJX0RJUn0vVXNlckludGVyZmFjZS9Qcm90b2NvbCAmJiBjcCAke0RFUklW
RURfU09VUkNFU19KQVZBU0NSSVBUQ09SRV9ESVJ9L0luc3BlY3RvckpTQmFja2VuZENvbW1hbmRz
LmpzICR7REVSSVZFRF9TT1VSQ0VTX1dFQklOU1BFQ1RPUlVJX0RJUn0vVXNlckludGVyZmFjZS9Q
cm90b2NvbAogICAgIFZFUkJBVElNKQogZmlsZShNQUtFX0RJUkVDVE9SWSAke0RFUklWRURfU09V
UkNFU19KQVZBU0NSSVBUQ09SRV9ESVJ9L2luc3BlY3RvcikKIApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvRGVyaXZlZFNvdXJjZXMubWFrZQppbmRleCBjYzMwN2Q3ZTc0NzliOWJmOTBhOGEzZWZiZjEz
Yzk4NzNhMzg4M2I4Li5kMzNjOTUxOGZjMjkyODFjNDRiMDcyOGVhMTg0YTY2MWE4NGM5NjRkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQpAQCAtMTIyLDggKzEy
MiwxOSBAQCBJTlNQRUNUT1JfRE9NQUlOUyA9IFwKICMKIAogSU5TUEVDVE9SX0dFTkVSQVRPUl9T
Q1JJUFRTID0gXAotCSQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9zY3JpcHRzL0NvZGVHZW5l
cmF0b3JJbnNwZWN0b3IucHkgXAotCSQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9zY3JpcHRz
L0NvZGVHZW5lcmF0b3JJbnNwZWN0b3JTdHJpbmdzLnB5IFwKKwkkKEphdmFTY3JpcHRDb3JlKS9p
bnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL19faW5pdF9fLnB5IFwKKwkkKEphdmFTY3JpcHRDb3Jl
KS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2JhY2tlbmRfY29tbWFuZHMucHkg
XAorCSQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVf
YmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weSBcCisJJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVj
dG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50
YXRpb24ucHkgXAorCSQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4v
Z2VuZXJhdGVfZnJvbnRlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkgXAorCSQoSmF2YVNjcmlwdENv
cmUpL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfZnJvbnRlbmRfZGlzcGF0Y2hl
cl9pbXBsZW1lbnRhdGlvbi5weSBcCisJJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3Njcmlw
dHMvY29kZWdlbi9nZW5lcmF0ZV90eXBlX2J1aWxkZXJfaGVhZGVyLnB5IFwKKwkkKEphdmFTY3Jp
cHRDb3JlKS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX3R5cGVfYnVpbGRlcl9p
bXBsZW1lbnRhdGlvbi5weSBcCisJJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3NjcmlwdHMv
Y29kZWdlbi9nZW5lcmF0b3JfdGVtcGxhdGVzLnB5IFwKKwkkKEphdmFTY3JpcHRDb3JlKS9pbnNw
ZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRvci5weSBcCisJJChKYXZhU2NyaXB0Q29yZSkv
aW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9tb2RlbHMucHkgXAorCSQoSmF2YVNjcmlwdENvcmUp
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWNvbWJpbmVkLWluc3BlY3Rvci1qc29uLnB5IFwK
KwkkKEphdmFTY3JpcHRDb3JlKS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkgXAogIwogCiBhbGwgOiBcCkBAIC0xNDQsNyArMTU1LDcgQEAg
SW5zcGVjdG9ySlMuanNvbiA6IGluc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWNvbWJpbmVkLWlu
c3BlY3Rvci1qc29uLnB5ICQoSU5TUEUKIAogIyBJbnNwZWN0b3IgQmFja2VuZCBEaXNwYXRjaGVy
cywgRnJvbnRlbmQgRGlzcGF0Y2hlcnMsIFR5cGUgQnVpbGRlcnMKIEluc3BlY3RvckpTRnJvbnRl
bmREaXNwYXRjaGVycy5oIDogSW5zcGVjdG9ySlMuanNvbiAkKElOU1BFQ1RPUl9HRU5FUkFUT1Jf
U0NSSVBUUykKLQkkKFBZVEhPTikgJChKYXZhU2NyaXB0Q29yZSkvaW5zcGVjdG9yL3NjcmlwdHMv
Q29kZUdlbmVyYXRvckluc3BlY3Rvci5weSAuL0luc3BlY3RvckpTLmpzb24gLS1vdXRwdXRfaF9k
aXIgLiAtLW91dHB1dF9jcHBfZGlyIC4gLS1vdXRwdXRfanNfZGlyIC4gLS1vdXRwdXRfdHlwZSBK
YXZhU2NyaXB0CisJJChQWVRIT04pICQoSmF2YVNjcmlwdENvcmUpL2luc3BlY3Rvci9zY3JpcHRz
L2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weSAtLWZyYW1ld29yayBKYXZh
U2NyaXB0Q29yZSAtLW91dHB1dERpciAuIC4vSW5zcGVjdG9ySlMuanNvbgogCiBJbmplY3RlZFNj
cmlwdFNvdXJjZS5oIDogaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0U291cmNlLmpzICQoSmF2YVNj
cmlwdENvcmUpL2luc3BlY3Rvci9zY3JpcHRzL2pzbWluLnB5ICQoSmF2YVNjcmlwdENvcmUpL2lu
c3BlY3Rvci9zY3JpcHRzL3h4ZC5wbAogCWVjaG8gIi8vIyBzb3VyY2VVUkw9X19XZWJJbnNwZWN0
b3JJbmplY3RlZFNjcmlwdF9fIiA+IC4vSW5qZWN0ZWRTY3JpcHRTb3VyY2UubWluLmpzCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZh
U2NyaXB0Q29yZS52Y3hwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
LnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagppbmRleCAzYWJjNmI0YmFmNDEzNGM0Nzk1
M2ZhZWJjMjU2MDQ0NmJkZjIxNTdjLi41NTc3MDMzMTlkNDQyYTdiMDFmNDEyOTNlNGFjNjBjZWM0
N2JiZmM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
dmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oKQEAgLTEsMTY0
OSArMSwxNzA0IEBACi3vu788P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/Pgot
PFByb2plY3QgRGVmYXVsdFRhcmdldHM9IkJ1aWxkIiBUb29sc1ZlcnNpb249IjEyLjAiIHhtbG5z
PSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgot
ICA8SXRlbUdyb3VwIExhYmVsPSJQcm9qZWN0Q29uZmlndXJhdGlvbnMiPgotICAgIDxQcm9qZWN0
Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z1N1ZmZpeHxXaW4zMiI+Ci0gICAgICA8Q29uZmln
dXJhdGlvbj5EZWJ1Z1N1ZmZpeDwvQ29uZmlndXJhdGlvbj4KLSAgICAgIDxQbGF0Zm9ybT5XaW4z
MjwvUGxhdGZvcm0+Ci0gICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KLSAgICA8UHJvamVjdENv
bmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWdTdWZmaXh8eDY0Ij4KLSAgICAgIDxDb25maWd1cmF0
aW9uPkRlYnVnU3VmZml4PC9Db25maWd1cmF0aW9uPgotICAgICAgPFBsYXRmb3JtPng2NDwvUGxh
dGZvcm0+Ci0gICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KLSAgICA8UHJvamVjdENvbmZpZ3Vy
YXRpb24gSW5jbHVkZT0iRGVidWdfV2luQ2Fpcm98V2luMzIiPgotICAgICAgPENvbmZpZ3VyYXRp
b24+RGVidWdfV2luQ2Fpcm88L0NvbmZpZ3VyYXRpb24+Ci0gICAgICA8UGxhdGZvcm0+V2luMzI8
L1BsYXRmb3JtPgotICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+Ci0gICAgPFByb2plY3RDb25m
aWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnX1dpbkNhaXJvfHg2NCI+Ci0gICAgICA8Q29uZmlndXJh
dGlvbj5EZWJ1Z19XaW5DYWlybzwvQ29uZmlndXJhdGlvbj4KLSAgICAgIDxQbGF0Zm9ybT54NjQ8
L1BsYXRmb3JtPgotICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+Ci0gICAgPFByb2plY3RDb25m
aWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfFdpbjMyIj4KLSAgICAgIDxDb25maWd1cmF0aW9uPkRl
YnVnPC9Db25maWd1cmF0aW9uPgotICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4KLSAg
ICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgotICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNs
dWRlPSJEZWJ1Z3x4NjQiPgotICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0NvbmZpZ3VyYXRp
b24+Ci0gICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4KLSAgICA8L1Byb2plY3RDb25maWd1
cmF0aW9uPgotICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJQcm9kdWN0aW9ufFdp
bjMyIj4KLSAgICAgIDxDb25maWd1cmF0aW9uPlByb2R1Y3Rpb248L0NvbmZpZ3VyYXRpb24+Ci0g
ICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPgotICAgIDwvUHJvamVjdENvbmZpZ3VyYXRp
b24+Ci0gICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlByb2R1Y3Rpb258eDY0Ij4K
LSAgICAgIDxDb25maWd1cmF0aW9uPlByb2R1Y3Rpb248L0NvbmZpZ3VyYXRpb24+Ci0gICAgICA8
UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4KLSAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgotICAg
IDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlX1dpbkNhaXJvfFdpbjMyIj4K
LSAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2VfV2luQ2Fpcm88L0NvbmZpZ3VyYXRpb24+Ci0g
ICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPgotICAgIDwvUHJvamVjdENvbmZpZ3VyYXRp
b24+Ci0gICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2VfV2luQ2Fpcm98
eDY0Ij4KLSAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2VfV2luQ2Fpcm88L0NvbmZpZ3VyYXRp
b24+Ci0gICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4KLSAgICA8L1Byb2plY3RDb25maWd1
cmF0aW9uPgotICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfFdpbjMy
Ij4KLSAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+Ci0gICAgICA8
UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPgotICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+Ci0g
ICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8eDY0Ij4KLSAgICAgIDxD
b25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+Ci0gICAgICA8UGxhdGZvcm0+eDY0
PC9QbGF0Zm9ybT4KLSAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPgotICA8L0l0ZW1Hcm91cD4K
LSAgPFByb3BlcnR5R3JvdXAgTGFiZWw9Ikdsb2JhbHMiPgotICAgIDxQcm9qZWN0R3VpZD57MjI0
MTNENDEtM0ExOC00MkI3LTkyQTgtQ0VEQzZDRTg2OTIwfTwvUHJvamVjdEd1aWQ+Ci0gICAgPEtl
eXdvcmQ+V2luMzJQcm9qPC9LZXl3b3JkPgotICAgIDxSb290TmFtZXNwYWNlPkphdmFTY3JpcHRD
b3JlMjwvUm9vdE5hbWVzcGFjZT4KLSAgICA8UHJvamVjdE5hbWU+SmF2YVNjcmlwdENvcmU8L1By
b2plY3ROYW1lPgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxJbXBvcnQgUHJvamVjdD0iJChWQ1Rh
cmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLkRlZmF1bHQucHJvcHMiIC8+Ci0gIDxQcm9wZXJ0eUdy
b3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2lu
MzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPFVzZURlYnVnTGlicmFyaWVzPnRydWU8
L1VzZURlYnVnTGlicmFyaWVzPgotICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVy
U2V0PgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlv
blR5cGU+Ci0gICAgPFBsYXRmb3JtVG9vbHNldD52MTIwX3hwPC9QbGF0Zm9ybVRvb2xzZXQ+Ci0g
IDwvUHJvcGVydHlHcm91cD4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1
cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+
Ci0gICAgPFVzZURlYnVnTGlicmFyaWVzPnRydWU8L1VzZURlYnVnTGlicmFyaWVzPgotICAgIDxD
aGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgotICAgIDxDb25maWd1cmF0aW9uVHlw
ZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPFBsYXRmb3JtVG9vbHNl
dD52MTIwPC9QbGF0Zm9ybVRvb2xzZXQ+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPFByb3BlcnR5
R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z19X
aW5DYWlyb3xXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8VXNlRGVidWdMaWJy
YXJpZXM+dHJ1ZTwvVXNlRGVidWdMaWJyYXJpZXM+Ci0gICAgPENoYXJhY3RlclNldD5Vbmljb2Rl
PC9DaGFyYWN0ZXJTZXQ+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9D
b25maWd1cmF0aW9uVHlwZT4KLSAgICA8UGxhdGZvcm1Ub29sc2V0PnYxMjBfeHA8L1BsYXRmb3Jt
VG9vbHNldD4KLSAgPC9Qcm9wZXJ0eUdyb3VwPgotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249
IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnX1dpbkNhaXJvfHg2NCciIExh
YmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8VXNlRGVidWdMaWJyYXJpZXM+dHJ1ZTwvVXNlRGVi
dWdMaWJyYXJpZXM+Ci0gICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+Ci0g
ICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4K
LSAgICA8UGxhdGZvcm1Ub29sc2V0PnYxMjBfeHA8L1BsYXRmb3JtVG9vbHNldD4KLSAgPC9Qcm9w
ZXJ0eUdyb3VwPgotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24p
fCQoUGxhdGZvcm0pJz09J0RlYnVnU3VmZml4fFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24i
PgotICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz50cnVlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KLSAgICA8
Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KLSAgICA8Q29uZmlndXJhdGlvblR5
cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxQbGF0Zm9ybVRvb2xz
ZXQ+djEyMF94cDwvUGxhdGZvcm1Ub29sc2V0PgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxQcm9w
ZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVi
dWdTdWZmaXh8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxVc2VEZWJ1Z0xpYnJh
cmllcz50cnVlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KLSAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8
L0NoYXJhY3RlclNldD4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0Nv
bmZpZ3VyYXRpb25UeXBlPgotICAgIDxQbGF0Zm9ybVRvb2xzZXQ+djEyMDwvUGxhdGZvcm1Ub29s
c2V0PgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQo
Q29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIExhYmVsPSJDb25m
aWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZp
Z3VyYXRpb25UeXBlPgotICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz5mYWxzZTwvVXNlRGVidWdMaWJy
YXJpZXM+Ci0gICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+Ci0gICAgPFBs
YXRmb3JtVG9vbHNldD52MTIwX3hwPC9QbGF0Zm9ybVRvb2xzZXQ+Ci0gIDwvUHJvcGVydHlHcm91
cD4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRm
b3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmln
dXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxVc2VE
ZWJ1Z0xpYnJhcmllcz5mYWxzZTwvVXNlRGVidWdMaWJyYXJpZXM+Ci0gICAgPENoYXJhY3RlclNl
dD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+Ci0gICAgPFBsYXRmb3JtVG9vbHNldD52MTIwPC9QbGF0
Zm9ybVRvb2xzZXQ+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0
aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlX1dpbkNhaXJvfFdp
bjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5h
bWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPFVzZURlYnVnTGlicmFyaWVzPmZh
bHNlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KLSAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJh
Y3RlclNldD4KLSAgICA8UGxhdGZvcm1Ub29sc2V0PnYxMjBfeHA8L1BsYXRmb3JtVG9vbHNldD4K
LSAgPC9Qcm9wZXJ0eUdyb3VwPgotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZp
Z3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VfV2luQ2Fpcm98eDY0JyIgTGFiZWw9IkNv
bmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29u
ZmlndXJhdGlvblR5cGU+Ci0gICAgPFVzZURlYnVnTGlicmFyaWVzPmZhbHNlPC9Vc2VEZWJ1Z0xp
YnJhcmllcz4KLSAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KLSAgICA8
UGxhdGZvcm1Ub29sc2V0PnYxMjBfeHA8L1BsYXRmb3JtVG9vbHNldD4KLSAgPC9Qcm9wZXJ0eUdy
b3VwPgotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxh
dGZvcm0pJz09J1Byb2R1Y3Rpb258V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAg
PENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KLSAg
ICA8VXNlRGVidWdMaWJyYXJpZXM+ZmFsc2U8L1VzZURlYnVnTGlicmFyaWVzPgotICAgIDxDaGFy
YWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgotICAgIDxQbGF0Zm9ybVRvb2xzZXQ+djEy
MF94cDwvUGxhdGZvcm1Ub29sc2V0PgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxQcm9wZXJ0eUdy
b3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUHJvZHVjdGlv
bnx4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5
bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8VXNlRGVidWdMaWJyYXJpZXM+
ZmFsc2U8L1VzZURlYnVnTGlicmFyaWVzPgotICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hh
cmFjdGVyU2V0PgotICAgIDxQbGF0Zm9ybVRvb2xzZXQ+djEyMDwvUGxhdGZvcm1Ub29sc2V0Pgot
ICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxN
aWNyb3NvZnQuQ3BwLnByb3BzIiAvPgotICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblNl
dHRpbmdzIj4KLSAgICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcQnVpbGRDdXN0
b21pemF0aW9uc1xtYXNtLnByb3BzIiAvPgotICA8L0ltcG9ydEdyb3VwPgotICA8SW1wb3J0R3Jv
dXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQo
UGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJS
b290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0i
ZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJv
cHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVj
dD0iSmF2YVNjcmlwdENvcmVEZWJ1Zy5wcm9wcyIgLz4KLSAgPC9JbXBvcnRHcm91cD4KLSAgPElt
cG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVi
dWd8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KLSAgICA8SW1wb3J0IFByb2plY3Q9IiQo
VXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0
aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNl
ci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQ
cm9qZWN0PSJKYXZhU2NyaXB0Q29yZURlYnVnLnByb3BzIiAvPgotICA8L0ltcG9ydEdyb3VwPgot
ICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9
PSdEZWJ1Z19XaW5DYWlyb3xXaW4zMiciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+Ci0gICAgPElt
cG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVz
ZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3Bw
LiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAv
PgotICAgIDxJbXBvcnQgUHJvamVjdD0iSmF2YVNjcmlwdENvcmVEZWJ1Z0NGTGl0ZS5wcm9wcyIg
Lz4KLSAgPC9JbXBvcnRHcm91cD4KLSAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmln
dXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWdfV2luQ2Fpcm98eDY0JyIgTGFiZWw9IlByb3Bl
cnR5U2hlZXRzIj4KLSAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29m
dC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJv
b3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9j
YWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJKYXZhU2NyaXB0Q29y
ZURlYnVnQ0ZMaXRlLnByb3BzIiAvPgotICA8L0ltcG9ydEdyb3VwPgotICA8SW1wb3J0R3JvdXAg
Q29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z1N1ZmZpeHxX
aW4zMiciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSIkKFVz
ZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlv
bj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIu
cHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJv
amVjdD0iSmF2YVNjcmlwdENvcmVEZWJ1Zy5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9
IiQoV2ViS2l0X0xpYnJhcmllcylcdG9vbHNcdnNwcm9wc1xkZWJ1Z3N1ZmZpeC5wcm9wcyIgLz4K
LSAgPC9JbXBvcnRHcm91cD4KLSAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJh
dGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWdTdWZmaXh8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hl
ZXRzIj4KLSAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAu
JChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIp
XE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBE
YXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJKYXZhU2NyaXB0Q29yZURlYnVn
LnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0iJChXZWJLaXRfTGlicmFyaWVzKVx0b29s
c1x2c3Byb3BzXGRlYnVnc3VmZml4LnByb3BzIiAvPgotICA8L0ltcG9ydEdyb3VwPgotICA8SW1w
b3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIiBDb25kaXRpb249IickKENvbmZpZ3VyYXRp
b24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KLSAgICA8SW1wb3J0IFByb2plY3Q9
IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29u
ZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSku
dXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9y
dCBQcm9qZWN0PSJKYXZhU2NyaXB0Q29yZVJlbGVhc2UucHJvcHMiIC8+Ci0gIDwvSW1wb3J0R3Jv
dXA+Ci0gIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZv
cm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KLSAgICA8SW1wb3J0
IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5w
cm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQ
bGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0g
ICAgPEltcG9ydCBQcm9qZWN0PSJKYXZhU2NyaXB0Q29yZVJlbGVhc2UucHJvcHMiIC8+Ci0gIDwv
SW1wb3J0R3JvdXA+Ci0gIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24p
fCQoUGxhdGZvcm0pJz09J1JlbGVhc2VfV2luQ2Fpcm98V2luMzInIiBMYWJlbD0iUHJvcGVydHlT
aGVldHMiPgotICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNw
cC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERp
cilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFw
cERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9IkphdmFTY3JpcHRDb3JlUmVs
ZWFzZUNGTGl0ZS5wcm9wcyIgLz4KLSAgPC9JbXBvcnRHcm91cD4KLSAgPEltcG9ydEdyb3VwIENv
bmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZV9XaW5DYWly
b3x4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgotICAgIDxJbXBvcnQgUHJvamVjdD0iJChV
c2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRp
b249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2Vy
LnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFBy
b2plY3Q9IkphdmFTY3JpcHRDb3JlUmVsZWFzZUNGTGl0ZS5wcm9wcyIgLz4KLSAgPC9JbXBvcnRH
cm91cD4KLSAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0
Zm9ybSknPT0nUHJvZHVjdGlvbnxXaW4zMiciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+Ci0gICAg
PEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0p
LnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQu
Q3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3Jt
IiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0iSmF2YVNjcmlwdENvcmVQcm9kdWN0aW9uLnByb3Bz
IiAvPgotICA8L0ltcG9ydEdyb3VwPgotICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25m
aWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQcm9kdWN0aW9ufHg2NCciIExhYmVsPSJQcm9wZXJ0
eVNoZWV0cyI+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQu
Q3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290
RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2Fs
QXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0iSmF2YVNjcmlwdENvcmVQ
cm9kdWN0aW9uLnByb3BzIiAvPgotICA8L0ltcG9ydEdyb3VwPgotICA8UHJvcGVydHlHcm91cCBM
YWJlbD0iVXNlck1hY3JvcyIgLz4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25m
aWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciIC8+Ci0gIDxQcm9wZXJ0eUdy
b3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0
JyIgLz4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBs
YXRmb3JtKSc9PSdEZWJ1Z19XaW5DYWlyb3xXaW4zMiciIC8+Ci0gIDxQcm9wZXJ0eUdyb3VwIENv
bmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWdfV2luQ2Fpcm98
eDY0JyIgLz4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwk
KFBsYXRmb3JtKSc9PSdEZWJ1Z1N1ZmZpeHxXaW4zMiciIC8+Ci0gIDxQcm9wZXJ0eUdyb3VwIENv
bmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWdTdWZmaXh8eDY0
JyIgLz4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBs
YXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgLz4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9u
PSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIC8+Ci0gIDxQ
cm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0n
UmVsZWFzZV9XaW5DYWlyb3xXaW4zMiciIC8+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0i
JyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZV9XaW5DYWlyb3x4NjQnIiAv
PgotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZv
cm0pJz09J1Byb2R1Y3Rpb258V2luMzInIiAvPgotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249
IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1Byb2R1Y3Rpb258eDY0JyIgLz4KLSAg
PEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRm
b3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgotICAgIDxDbENvbXBpbGU+Ci0gICAgICA8UHJlY29tcGls
ZWRIZWFkZXI+Ci0gICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgotICAgIDwvQ2xDb21waWxlPgot
ICAgIDxMaW5rIC8+Ci0gIDwvSXRlbURlZmluaXRpb25Hcm91cD4KLSAgPEl0ZW1EZWZpbml0aW9u
R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4
NjQnIj4KLSAgICA8Q2xDb21waWxlPgotICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgotICAgICAg
PC9QcmVjb21waWxlZEhlYWRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8TGluayAvPgotICA8
L0l0ZW1EZWZpbml0aW9uR3JvdXA+Ci0gIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0i
JyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWdfV2luQ2Fpcm98V2luMzInIj4K
LSAgICA8Q2xDb21waWxlPgotICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgotICAgICAgPC9QcmVj
b21waWxlZEhlYWRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8TGluayAvPgotICA8L0l0ZW1E
ZWZpbml0aW9uR3JvdXA+Ci0gIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29u
ZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWdfV2luQ2Fpcm98eDY0JyI+Ci0gICAgPENs
Q29tcGlsZT4KLSAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KLSAgICAgIDwvUHJlY29tcGlsZWRI
ZWFkZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPExpbmsgLz4KLSAgPC9JdGVtRGVmaW5pdGlv
bkdyb3VwPgotICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRp
b24pfCQoUGxhdGZvcm0pJz09J0RlYnVnU3VmZml4fFdpbjMyJyI+Ci0gICAgPENsQ29tcGlsZT4K
LSAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4KLSAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+Ci0g
ICAgPC9DbENvbXBpbGU+Ci0gICAgPExpbmsgLz4KLSAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgot
ICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxh
dGZvcm0pJz09J0RlYnVnU3VmZml4fHg2NCciPgotICAgIDxDbENvbXBpbGU+Ci0gICAgICA8UHJl
Y29tcGlsZWRIZWFkZXI+Ci0gICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgotICAgIDwvQ2xDb21w
aWxlPgotICAgIDxMaW5rIC8+Ci0gIDwvSXRlbURlZmluaXRpb25Hcm91cD4KLSAgPEl0ZW1EZWZp
bml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdS
ZWxlYXNlfFdpbjMyJyI+Ci0gICAgPENsQ29tcGlsZT4KLSAgICAgIDxQcmVjb21waWxlZEhlYWRl
cj4KLSAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPExp
bmsgLz4KLSAgICA8TGluayAvPgotICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+Ci0gIDxJdGVtRGVm
aW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0n
UmVsZWFzZXx4NjQnIj4KLSAgICA8Q2xDb21waWxlPgotICAgICAgPFByZWNvbXBpbGVkSGVhZGVy
PgotICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8TGlu
ayAvPgotICAgIDxMaW5rIC8+Ci0gIDwvSXRlbURlZmluaXRpb25Hcm91cD4KLSAgPEl0ZW1EZWZp
bml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdS
ZWxlYXNlX1dpbkNhaXJvfFdpbjMyJyI+Ci0gICAgPENsQ29tcGlsZT4KLSAgICAgIDxQcmVjb21w
aWxlZEhlYWRlcj4KLSAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+Ci0gICAgPC9DbENvbXBpbGU+
Ci0gICAgPExpbmsgLz4KLSAgICA8TGluayAvPgotICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+Ci0g
IDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0
Zm9ybSknPT0nUmVsZWFzZV9XaW5DYWlyb3x4NjQnIj4KLSAgICA8Q2xDb21waWxlPgotICAgICAg
PFByZWNvbXBpbGVkSGVhZGVyPgotICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KLSAgICA8L0Ns
Q29tcGlsZT4KLSAgICA8TGluayAvPgotICAgIDxMaW5rIC8+Ci0gIDwvSXRlbURlZmluaXRpb25H
cm91cD4KLSAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9u
KXwkKFBsYXRmb3JtKSc9PSdQcm9kdWN0aW9ufFdpbjMyJyI+Ci0gICAgPENsQ29tcGlsZT4KLSAg
ICAgIDxQcmVjb21waWxlZEhlYWRlcj4KLSAgICAgIDwvUHJlY29tcGlsZWRIZWFkZXI+Ci0gICAg
PC9DbENvbXBpbGU+Ci0gICAgPExpbmsgLz4KLSAgICA8TGluayAvPgotICA8L0l0ZW1EZWZpbml0
aW9uR3JvdXA+Ci0gIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJh
dGlvbil8JChQbGF0Zm9ybSknPT0nUHJvZHVjdGlvbnx4NjQnIj4KLSAgICA8Q2xDb21waWxlPgot
ICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgotICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KLSAg
ICA8L0NsQ29tcGlsZT4KLSAgICA8TGluayAvPgotICAgIDxMaW5rIC8+Ci0gIDwvSXRlbURlZmlu
aXRpb25Hcm91cD4KLSAgPEl0ZW1Hcm91cD4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXEFQ
SVxKU0Jhc2UuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cQVBJXEpTQ2FsbGJh
Y2tDb25zdHJ1Y3Rvci5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxBUElcSlND
YWxsYmFja0Z1bmN0aW9uLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXEFQSVxK
U0NhbGxiYWNrT2JqZWN0LmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXEFQSVxK
U0NsYXNzUmVmLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXEFQSVxKU0NvbnRl
eHRSZWYuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cQVBJXEpTQ1Rlc3RSdW5u
ZXJVdGlscy5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxBUElcSlNPYmplY3RS
ZWYuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cQVBJXEpTU2NyaXB0UmVmLmNw
cCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXEFQSVxKU1N0cmluZ1JlZi5jcHAiIC8+
Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxBUElcSlNTdHJpbmdSZWZCU1RSLmNwcCIgLz4K
LSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXEFQSVxKU1N0cmluZ1JlZkNGLmNwcCIgLz4KLSAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXEFQSVxKU1ZhbHVlUmVmLmNwcCIgLz4KLSAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXEFQSVxKU1dlYWtPYmplY3RNYXBSZWZQcml2YXRlLmNwcCIgLz4K
LSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXEFQSVxPcGFxdWVKU1N0cmluZy5jcHAiIC8+Ci0g
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxhc3NlbWJsZXJcTGlua0J1ZmZlci5jcHAiIC8+Ci0g
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxhc3NlbWJsZXJcTWFjcm9Bc3NlbWJsZXIuY3BwIiAv
PgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cQVBJXEpTQ1Rlc3RSdW5uZXJVdGlscy5oIiAv
PgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYXNzZW1ibGVyXE1hY3JvQXNzZW1ibGVyWDg2
Q29tbW9uLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJpbmRpbmdzXFNjcmlw
dEZ1bmN0aW9uQ2FsbC5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxiaW5kaW5n
c1xTY3JpcHRPYmplY3QuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYmluZGlu
Z3NcU2NyaXB0VmFsdWUuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYnVpbHRp
bnNcQnVpbHRpbkV4ZWN1dGFibGVzLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XGJ5dGVjb2RlXEFycmF5QWxsb2NhdGlvblByb2ZpbGUuY3BwIiAvPgotICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5cYnl0ZWNvZGVcQXJyYXlQcm9maWxlLmNwcCIgLz4KLSAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXEJ5dGVjb2RlQmFzaWNCbG9jay5jcHAiIC8+Ci0gICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuY3Bw
IiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcQ2FsbExpbmtJbmZvLmNw
cCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXENhbGxMaW5rU3RhdHVz
LmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXENvZGVCbG9jay5j
cHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxDb2RlQmxvY2tIYXNo
LmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXENvZGVCbG9ja0pl
dHRpc29uaW5nV2F0Y2hwb2ludC5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxi
eXRlY29kZVxDb2RlT3JpZ2luLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5
dGVjb2RlXENvZGVUeXBlLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVj
b2RlXENvbXBsZXhHZXRTdGF0dXMuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
Ynl0ZWNvZGVcQ29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxieXRlY29kZVxEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwIiAvPgot
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcREZHRXhpdFByb2ZpbGUuY3BwIiAv
PgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcRXhlY3V0aW9uQ291bnRlci5j
cHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxFeGl0S2luZC5jcHAi
IC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxFeGl0aW5nSklUVHlwZS5j
cHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxHZXRCeUlkU3RhdHVz
LmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXEdldEJ5SWRWYXJp
YW50LmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXElubGluZUNh
bGxGcmFtZVNldC5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxK
dW1wVGFibGUuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcTGF6
eU9wZXJhbmRWYWx1ZVByb2ZpbGUuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
Ynl0ZWNvZGVcTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5jcHAiIC8+Ci0gICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxPcGNvZGUuY3BwIiAvPgotICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5cYnl0ZWNvZGVcUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5jcHAiIC8+Ci0gICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmNw
cCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFByZWNpc2VKdW1wVGFy
Z2V0cy5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxQdXRCeUlk
U3RhdHVzLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFB1dEJ5
SWRWYXJpYW50LmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFJl
ZHVjZVdoaXRlc3BhY2UuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNv
ZGVcU2FtcGxpbmdUb29sLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVj
b2RlXFNwZWNpYWxQb2ludGVyLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5
dGVjb2RlXFNwZWN1bGF0ZWRUeXBlLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XGJ5dGVjb2RlXFN0cnVjdHVyZVNldC5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxieXRlY29kZVxTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50LmNwcCIgLz4KLSAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFN0cnVjdHVyZVN0dWJJbmZvLmNwcCIgLz4K
LSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFRvVGhpc1N0YXR1cy5jcHAiIC8+
Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxVbmxpbmtlZENvZGVCbG9jay5j
cHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxVbmxpbmtlZEluc3Ry
dWN0aW9uU3RyZWFtLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2Rl
XFZhbHVlUmVjb3ZlcnkuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNv
ZGVcVmFyaWFibGVXYXRjaHBvaW50U2V0LmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXGJ5dGVjb2RlXFdhdGNocG9pbnQuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5cYnl0ZWNvbXBpbGVyXEJ5dGVjb2RlR2VuZXJhdG9yLmNwcCIgLz4KLSAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXGJ5dGVjb21waWxlclxOb2Rlc0NvZGVnZW4uY3BwIiAvPgotICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5cZGVidWdnZXJcRGVidWdnZXIuY3BwIiAvPgotICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5cZGVidWdnZXJcRGVidWdnZXJDYWxsRnJhbWUuY3BwIiAvPgotICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5cZGVidWdnZXJcRGVidWdnZXJTY29wZS5jcHAiIC8+Ci0gICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHQWJzdHJhY3RIZWFwLmNwcCIgLz4KLSAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdBYnN0cmFjdFZhbHVlLmNwcCIgLz4KLSAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNl
LmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdBcml0aE1vZGUuY3Bw
IiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0FycmF5TW9kZS5jcHAiIC8+
Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5j
cHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHQXZhaWxhYmlsaXR5LmNw
cCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdCYWNrd2FyZHNQcm9wYWdh
dGlvblBoYXNlLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdCYXNp
Y0Jsb2NrLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdCaW5hcnlT
d2l0Y2guY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0Jsb2NrSW5z
ZXJ0aW9uU2V0LmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdCeXRl
Q29kZVBhcnNlci5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHQ2Fw
YWJpbGl0aWVzLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdDRkFQ
aGFzZS5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHQ0ZHU2ltcGxp
ZmljYXRpb25QaGFzZS5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZH
Q2xvYmJlcml6ZS5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHQ2xv
YmJlclNldC5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHQ29tbW9u
LmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdDb21tb25EYXRhLmNw
cCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdDb21waWxhdGlvbktleS5j
cHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHQ29tcGlsYXRpb25Nb2Rl
LmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdDb25zdGFudEZvbGRp
bmdQaGFzZS5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHQ1BTUmV0
aHJlYWRpbmdQaGFzZS5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZH
Q3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxkZmdcREZHQ1NFUGhhc2UuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
ZGZnXERGR0RDRVBoYXNlLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xE
RkdEZXNpcmVkSWRlbnRpZmllcnMuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
ZGZnXERGR0Rlc2lyZWRUcmFuc2l0aW9ucy5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxkZmdcREZHRGVzaXJlZFdhdGNocG9pbnRzLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXGRmZ1xERkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMuY3BwIiAvPgotICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0Rlc2lyZWRXcml0ZUJhcnJpZXJzLmNwcCIgLz4KLSAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdEaXNhc3NlbWJsZXIuY3BwIiAvPgotICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0RvZXNHQy5jcHAiIC8+Ci0gICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHRG9taW5hdG9ycy5jcHAiIC8+Ci0gICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxkZmdcREZHRHJpdmVyLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXGRmZ1xERkdFZGdlLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRm
Z1xERkdGYWlsZWRGaW5hbGl6ZXIuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
ZGZnXERGR0ZpbmFsaXplci5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdc
REZHRml4dXBQaGFzZS5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZH
Rmx1c2hlZEF0LmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdGbHVz
aEZvcm1hdC5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHRnJvemVu
VmFsdWUuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0Z1bmN0aW9u
V2hpdGVsaXN0LmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdHcmFw
aC5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHR3JhcGhTYWZlcG9p
bnQuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0hlYXBMb2NhdGlv
bi5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHSW5QbGFjZUFic3Ry
YWN0U3RhdGUuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0ludGVn
ZXJDaGVja0NvbWJpbmluZ1BoYXNlLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XGRmZ1xERkdJbnZhbGlkYXRpb25Qb2ludEluamVjdGlvblBoYXNlLmNwcCIgLz4KLSAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdKSVRDb2RlLmNwcCIgLz4KLSAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXGRmZ1xERkdKSVRDb21waWxlci5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxkZmdcREZHSklURmluYWxpemVyLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXGRmZ1xERkdKdW1wUmVwbGFjZW1lbnQuY3BwIiAvPgotICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5cZGZnXERGR0xhenlKU1ZhbHVlLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXGRmZ1xERkdMSUNNUGhhc2UuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cZGZnXERGR0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5jcHAiIC8+Ci0gICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxkZmdcREZHTG9uZ0xpdmVkU3RhdGUuY3BwIiAvPgotICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5cZGZnXERGR0xvb3BQcmVIZWFkZXJDcmVhdGlvblBoYXNlLmNwcCIgLz4K
LSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdNYXlFeGl0LmNwcCIgLz4KLSAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdNaW5pZmllZE5vZGUuY3BwIiAvPgotICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR05hdHVyYWxMb29wcy5jcHAiIC8+Ci0gICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHTm9kZS5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxkZmdcREZHTm9kZUZsYWdzLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXGRmZ1xERkdPcGVyYXRpb25zLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXGRmZ1xERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcCIgLz4KLSAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdPU1JFbnRyeS5jcHAiIC8+Ci0gICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxkZmdcREZHT1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2UuY3BwIiAvPgot
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR09TUkV4aXQuY3BwIiAvPgotICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR09TUkV4aXRCYXNlLmNwcCIgLz4KLSAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdPU1JFeGl0Q29tcGlsZXIuY3BwIiAvPgotICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR09TUkV4aXRDb21waWxlcjMyXzY0LmNwcCIgLz4K
LSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdPU1JFeGl0Q29tcGlsZXI2NC5jcHAi
IC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHT1NSRXhpdENvbXBpbGVyQ29t
bW9uLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdPU1JFeGl0SnVt
cFBsYWNlaG9sZGVyLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdP
U1JFeGl0UHJlcGFyYXRpb24uY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZn
XERGR1BoYW50b21DYW5vbmljYWxpemF0aW9uUGhhc2UuY3BwIiAvPgotICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5cZGZnXERGR1BoYW50b21SZW1vdmFsUGhhc2UuY3BwIiAvPgotICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1BoYXNlLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXGRmZ1xERkdQbGFuLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XGRmZ1xERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwIiAvPgotICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5cZGZnXERGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcCIgLz4KLSAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQdXJlVmFsdWUuY3BwIiAvPgotICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1Jlc3VycmVjdGlvbkZvclZhbGlkYXRpb25QaGFz
ZS5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHU2FmZXBvaW50LmNw
cCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdTcGVjdWxhdGl2ZUpJVC5j
cHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHU3BlY3VsYXRpdmVKSVQz
Ml82NC5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHU3BlY3VsYXRp
dmVKSVQ2NC5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHU1NBQ29u
dmVyc2lvblBoYXNlLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdT
U0FMb3dlcmluZ1BoYXNlLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xE
RkdTdGFja0xheW91dFBoYXNlLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRm
Z1xERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5jcHAiIC8+Ci0gICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHU3RvcmVCYXJyaWVyRWxpc2lvblBoYXNlLmNwcCIg
Lz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdTdHJlbmd0aFJlZHVjdGlvblBo
YXNlLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdTdHJ1Y3R1cmVB
YnN0cmFjdFZhbHVlLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdU
aHJlYWREYXRhLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdUaHVu
a3MuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1RpZXJVcENoZWNr
SW5qZWN0aW9uUGhhc2UuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERG
R1RvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcCIgLz4KLSAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXGRmZ1xERkdUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNh
bGxiYWNrLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdUcmFuc2l0
aW9uLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdUeXBlQ2hlY2tI
b2lzdGluZ1BoYXNlLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdV
bmlmaWNhdGlvblBoYXNlLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xE
RkdVc2VLaW5kLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdWYWxp
ZGF0ZS5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHVmFsdWVTb3Vy
Y2UuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1ZhbHVlU3RyZW5n
dGguY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1ZhcmlhYmxlQWNj
ZXNzRGF0YS5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHVmFyaWFi
bGVBY2Nlc3NEYXRhRHVtcC5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdc
REZHVmFyaWFibGVFdmVudC5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdc
REZHVmFyaWFibGVFdmVudFN0cmVhbS5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxkZmdcREZHVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlLmNwcCIgLz4KLSAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdXYXRjaHBvaW50Q29sbGVjdGlvblBoYXNlLmNwcCIg
Lz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdXYXRjaGFibGVTdHJ1Y3R1cmVX
YXRjaGluZ1BoYXNlLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdX
b3JrbGlzdC5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkaXNhc3NlbWJsZXJc
RGlzYXNzZW1ibGVyLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRpc2Fzc2Vt
YmxlclxMTFZNRGlzYXNzZW1ibGVyLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XGRpc2Fzc2VtYmxlclxYODZEaXNhc3NlbWJsZXIuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5cZnRsXEZUTEFic3RyYWN0SGVhcC5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxmdGxcRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5jcHAiIC8+Ci0gICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxmdGxcRlRMQXZhaWxhYmxlUmVjb3ZlcnkuY3BwIiAvPgotICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5cZnRsXEZUTENhcGFiaWxpdGllcy5jcHAiIC8+Ci0gICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxmdGxcRlRMQ29tbW9uVmFsdWVzLmNwcCIgLz4KLSAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXGZ0bFxGVExDb21waWxlLmNwcCIgLz4KLSAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXGZ0bFxGVExEYXRhU2VjdGlvbi5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxmdGxcRlRMRFdBUkZEZWJ1Z0xpbmVJbmZvLmNwcCIgLz4KLSAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXGZ0bFxGVExEV0FSRlJlZ2lzdGVyLmNwcCIgLz4KLSAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXGZ0bFxGVExFeGl0QXJndW1lbnQuY3BwIiAvPgotICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5cZnRsXEZUTEV4aXRBcmd1bWVudEZvck9wZXJhbmQuY3BwIiAvPgotICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZnRsXEZUTEV4aXRUaHVua0dlbmVyYXRvci5jcHAiIC8+
Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxmdGxcRlRMRXhpdFZhbHVlLmNwcCIgLz4KLSAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGZ0bFxGVExGYWlsLmNwcCIgLz4KLSAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXGZ0bFxGVExGb3JPU1JFbnRyeUpJVENvZGUuY3BwIiAvPgotICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5cZnRsXEZUTElubGluZUNhY2hlU2l6ZS5jcHAiIC8+Ci0gICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxmdGxcRlRMSW50cmluc2ljUmVwb3NpdG9yeS5jcHAiIC8+
Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxmdGxcRlRMSklUQ29kZS5jcHAiIC8+Ci0gICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxmdGxcRlRMSklURmluYWxpemVyLmNwcCIgLz4KLSAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGZ0bFxGVExKU0NhbGwuY3BwIiAvPgotICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5cZnRsXEZUTExpbmsuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cZnRsXEZUTExvY2F0aW9uLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XGZ0bFxGVExMb3dlckRGR1RvTExWTS5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxmdGxcRlRMT1NSRW50cnkuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZnRs
XEZUTE9TUkV4aXQuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZnRsXEZUTE9T
UkV4aXRDb21waWxlci5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxmdGxcRlRM
T3V0cHV0LmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGZ0bFxGVExSZWNvdmVy
eU9wY29kZS5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxmdGxcRlRMUmVnaXN0
ZXJBdE9mZnNldC5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxmdGxcRlRMU2F2
ZVJlc3RvcmUuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZnRsXEZUTFNsb3dQ
YXRoQ2FsbC5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxmdGxcRlRMU2xvd1Bh
dGhDYWxsS2V5LmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGZ0bFxGVExTdGFj
a01hcHMuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZnRsXEZUTFN0YXRlLmNw
cCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGZ0bFxGVExUaHVua3MuY3BwIiAvPgot
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZnRsXEZUTFVud2luZEluZm8uY3BwIiAvPgotICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZnRsXEZUTFZhbHVlRm9ybWF0LmNwcCIgLz4KLSAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGZ0bFxGVExWYWx1ZVJhbmdlLmNwcCIgLz4KLSAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXGhlYXBcQmxvY2tBbGxvY2F0b3IuY3BwIiAvPgotICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5caGVhcFxDb2RlQmxvY2tTZXQuY3BwIiAvPgotICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5caGVhcFxDb25zZXJ2YXRpdmVSb290cy5jcHAiIC8+Ci0gICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxoZWFwXENvcGllZFNwYWNlLmNwcCIgLz4KLSAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXGhlYXBcQ29weVZpc2l0b3IuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5caGVhcFxEZWZlckdDLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XGhlYXBcRWRlbkdDQWN0aXZpdHlDYWxsYmFjay5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxoZWFwXEZ1bGxHQ0FjdGl2aXR5Q2FsbGJhY2suY3BwIiAvPgotICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5caGVhcFxHQ0FjdGl2aXR5Q2FsbGJhY2suY3BwIiAvPgotICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5caGVhcFxHQ0xvZ2dpbmcuY3BwIiAvPgotICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5caGVhcFxHQ1RocmVhZC5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxoZWFwXEdDVGhyZWFkU2hhcmVkRGF0YS5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxoZWFwXEhhbmRsZVNldC5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxoZWFwXEhhbmRsZVN0YWNrLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGhl
YXBcSGVhcC5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxoZWFwXEhlYXBTdGF0
aXN0aWNzLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGhlYXBcSGVhcFRpbWVy
LmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGhlYXBcSW5jcmVtZW50YWxTd2Vl
cGVyLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGhlYXBcSklUU3R1YlJvdXRp
bmVTZXQuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caGVhcFxNYWNoaW5lU3Rh
Y2tNYXJrZXIuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caGVhcFxNYXJrZWRB
bGxvY2F0b3IuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caGVhcFxNYXJrZWRC
bG9jay5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxoZWFwXE1hcmtlZFNwYWNl
LmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGhlYXBcTWFya1N0YWNrLmNwcCIg
Lz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGhlYXBcU2xvdFZpc2l0b3IuY3BwIiAvPgot
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caGVhcFxTdXBlclJlZ2lvbi5jcHAiIC8+Ci0gICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxoZWFwXFdlYWsuY3BwIiAvPgotICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5caGVhcFxXZWFrQmxvY2suY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5caGVhcFxXZWFrSGFuZGxlT3duZXIuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5caGVhcFxXZWFrU2V0LmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGhl
YXBcV3JpdGVCYXJyaWVyQnVmZmVyLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XGhlYXBcV3JpdGVCYXJyaWVyU3VwcG9ydC5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxpbnNwZWN0b3JcQ29uc29sZU1lc3NhZ2UuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5caW5zcGVjdG9yXENvbnRlbnRTZWFyY2hVdGlsaXRpZXMuY3BwIiAvPgotICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXElkZW50aWZpZXJzRmFjdG9yeS5jcHAiIC8+
Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcSW5qZWN0ZWRTY3JpcHQuY3Bw
IiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXEluamVjdGVkU2NyaXB0
QmFzZS5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcSW5qZWN0
ZWRTY3JpcHRIb3N0LmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGluc3BlY3Rv
clxJbmplY3RlZFNjcmlwdE1hbmFnZXIuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5caW5zcGVjdG9yXEluamVjdGVkU2NyaXB0TW9kdWxlLmNwcCIgLz4KLSAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXGluc3BlY3RvclxJbnNwZWN0b3JBZ2VudFJlZ2lzdHJ5LmNwcCIgLz4KLSAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGluc3BlY3RvclxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlci5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcSW5zcGVj
dG9yVmFsdWVzLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGluc3BlY3RvclxK
U0luamVjdGVkU2NyaXB0SG9zdC5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxp
bnNwZWN0b3JcSlNJbmplY3RlZFNjcmlwdEhvc3RQcm90b3R5cGUuY3BwIiAvPgotICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXEpTSmF2YVNjcmlwdENhbGxGcmFtZS5jcHAiIC8+
Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcSlNKYXZhU2NyaXB0Q2FsbEZy
YW1lUHJvdG90eXBlLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGluc3BlY3Rv
clxKYXZhU2NyaXB0Q2FsbEZyYW1lLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XGluc3BlY3RvclxTY3JpcHRBcmd1bWVudHMuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5caW5zcGVjdG9yXFNjcmlwdENhbGxGcmFtZS5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxpbnNwZWN0b3JcU2NyaXB0Q2FsbFN0YWNrLmNwcCIgLz4KLSAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXGluc3BlY3RvclxTY3JpcHRDYWxsU3RhY2tGYWN0b3J5LmNwcCIgLz4K
LSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGluc3BlY3RvclxTY3JpcHREZWJ1Z1NlcnZlci5j
cHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcYWdlbnRzXEluc3Bl
Y3RvckFnZW50LmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxh
Z2VudHNcSW5zcGVjdG9yQ29uc29sZUFnZW50LmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXGluc3BlY3RvclxhZ2VudHNcSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHAiIC8+Ci0g
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcYWdlbnRzXEluc3BlY3RvclByb2Zp
bGVyQWdlbnQuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGFn
ZW50c1xJbnNwZWN0b3JSdW50aW1lQWdlbnQuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5caW50ZXJwcmV0ZXJcQWJzdHJhY3RQQy5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxpbnRlcnByZXRlclxDYWxsRnJhbWUuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5caW50ZXJwcmV0ZXJcSW50ZXJwcmV0ZXIuY3BwIiAvPgotICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5caW50ZXJwcmV0ZXJcSlNTdGFjay5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxpbnRlcnByZXRlclxQcm90b0NhbGxGcmFtZS5jcHAiIC8+Ci0gICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxpbnRlcnByZXRlclxTdGFja1Zpc2l0b3IuY3BwIiAvPgotICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5caW50ZXJwcmV0ZXJcVk1JbnNwZWN0b3IuY3BwIiAvPgotICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caml0XEFjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lLmNw
cCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxBcml0eUNoZWNrRmFpbFJldHVy
blRodW5rcy5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxqaXRcQXNzZW1ibHlI
ZWxwZXJzLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxDbG9zdXJlQ2Fs
bFN0dWJSb3V0aW5lLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxFeGVj
dXRhYmxlQWxsb2NhdG9yLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxH
Q0F3YXJlSklUU3R1YlJvdXRpbmUuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
aml0XEhvc3RDYWxsUmV0dXJuVmFsdWUuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5caml0XEpJVC5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxqaXRcSklUQXJp
dGhtZXRpYy5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxqaXRcSklUQXJpdGht
ZXRpYzMyXzY0LmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxKSVRDYWxs
LmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxKSVRDYWxsMzJfNjQuY3Bw
IiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caml0XEpJVENvZGUuY3BwIiAvPgotICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caml0XEpJVERpc2Fzc2VtYmxlci5jcHAiIC8+Ci0gICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxqaXRcSklURXhjZXB0aW9ucy5jcHAiIC8+Ci0gICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxqaXRcSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwIiAvPgot
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caml0XEpJVE9wY29kZXMuY3BwIiAvPgotICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5caml0XEpJVE9wY29kZXMzMl82NC5jcHAiIC8+Ci0gICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxqaXRcSklUT3BlcmF0aW9ucy5jcHAiIC8+Ci0gICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxqaXRcSklUT3BlcmF0aW9uc01TVkM2NC5jcHAiIC8+Ci0gICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxqaXRcSklUUHJvcGVydHlBY2Nlc3MuY3BwIiAvPgotICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5caml0XEpJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwIiAvPgot
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caml0XEpJVFN0dWJSb3V0aW5lLmNwcCIgLz4KLSAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxKSVRTdHVicy5jcHAiIC8+Ci0gICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxqaXRcSklUVGh1bmtzLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXGppdFxKSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAiIC8+
Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxqaXRcUmVnLmNwcCIgLz4KLSAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXGppdFxSZWdpc3RlclByZXNlcnZhdGlvbldyYXBwZXJHZW5lcmF0b3Iu
Y3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caml0XFJlcGF0Y2guY3BwIiAvPgot
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caml0XFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5j
cHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxqaXRcVGh1bmtHZW5lcmF0b3JzLmNw
cCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGxsaW50XExMSW50Q0xvb3AuY3BwIiAv
PgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cbGxpbnRcTExJbnREYXRhLmNwcCIgLz4KLSAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGxsaW50XExMSW50RW50cnlwb2ludC5jcHAiIC8+Ci0g
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxsbGludFxMTEludEV4Y2VwdGlvbnMuY3BwIiAvPgot
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cbGxpbnRcTExJbnRPZmZzZXRzRXh0cmFjdG9yLmNw
cCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGxsaW50XExMSW50U2xvd1BhdGhzLmNw
cCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGxsaW50XExMSW50VGh1bmtzLmNwcCIg
Lz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGxsaW50XExvd0xldmVsSW50ZXJwcmV0ZXIu
Y3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cbGx2bVxJbml0aWFsaXplTExWTS5j
cHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxsbHZtXEluaXRpYWxpemVMTFZNV2lu
LmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGxsdm1cTExWTUFQSS5jcHAiIC8+
Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwYXJzZXJcTGV4ZXIuY3BwIiAvPgotICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5ccGFyc2VyXE5vZGVzLmNwcCIgLz4KLSAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXHBhcnNlclxQYXJzZXIuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5ccGFyc2VyXFBhcnNlckFyZW5hLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXHBhcnNlclxTb3VyY2VDb2RlLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XHBhcnNlclxTb3VyY2VQcm92aWRlci5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxwYXJzZXJcU291cmNlUHJvdmlkZXJDYWNoZS5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxwcm9maWxlclxMZWdhY3lQcm9maWxlci5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxwcm9maWxlclxQcm9maWxlLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXHByb2ZpbGVyXFByb2ZpbGVHZW5lcmF0b3IuY3BwIiAvPgotICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5ccHJvZmlsZXJcUHJvZmlsZU5vZGUuY3BwIiAvPgotICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5ccHJvZmlsZXJcUHJvZmlsZXJCeXRlY29kZS5jcHAiIC8+Ci0gICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxwcm9maWxlclxQcm9maWxlckJ5dGVjb2Rlcy5jcHAiIC8+Ci0gICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwcm9maWxlclxQcm9maWxlckJ5dGVjb2RlU2VxdWVuY2Uu
Y3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccHJvZmlsZXJcUHJvZmlsZXJDb21w
aWxhdGlvbi5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwcm9maWxlclxQcm9m
aWxlckNvbXBpbGF0aW9uS2luZC5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxw
cm9maWxlclxQcm9maWxlckNvbXBpbGVkQnl0ZWNvZGUuY3BwIiAvPgotICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5ccHJvZmlsZXJcUHJvZmlsZXJEYXRhYmFzZS5jcHAiIC8+Ci0gICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxwcm9maWxlclxQcm9maWxlckpldHRpc29uUmVhc29uLmNwcCIgLz4K
LSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHByb2ZpbGVyXFByb2ZpbGVyT3JpZ2luLmNwcCIg
Lz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHByb2ZpbGVyXFByb2ZpbGVyT3JpZ2luU3Rh
Y2suY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccHJvZmlsZXJcUHJvZmlsZXJP
U1JFeGl0LmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHByb2ZpbGVyXFByb2Zp
bGVyT1NSRXhpdFNpdGUuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccHJvZmls
ZXJcUHJvZmlsZXJQcm9maWxlZEJ5dGVjb2Rlcy5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxydW50aW1lXEFyZ0xpc3QuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5ccnVudGltZVxBcmd1bWVudHMuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
cnVudGltZVxBcmd1bWVudHNJdGVyYXRvckNvbnN0cnVjdG9yLmNwcCIgLz4KLSAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcQXJndW1lbnRzSXRlcmF0b3JQcm90b3R5cGUuY3BwIiAv
PgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxBcnJheUJ1ZmZlci5jcHAiIC8+
Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEFycmF5QnVmZmVyTmV1dGVyaW5n
V2F0Y2hwb2ludC5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEFy
cmF5QnVmZmVyVmlldy5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1l
XEFycmF5Q29uc3RydWN0b3IuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVu
dGltZVxBcnJheUl0ZXJhdG9yQ29uc3RydWN0b3IuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5ccnVudGltZVxBcnJheUl0ZXJhdG9yUHJvdG90eXBlLmNwcCIgLz4KLSAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcQXJyYXlQcm90b3R5cGUuY3BwIiAvPgotICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxCb29sZWFuQ29uc3RydWN0b3IuY3BwIiAvPgot
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxCb29sZWFuT2JqZWN0LmNwcCIgLz4K
LSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcQm9vbGVhblByb3RvdHlwZS5jcHAi
IC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXENhbGxEYXRhLmNwcCIgLz4K
LSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcQ29kZUNhY2hlLmNwcCIgLz4KLSAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcQ29kZVNwZWNpYWxpemF0aW9uS2luZC5j
cHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXENvbW1vbklkZW50aWZp
ZXJzLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcQ29tbW9uU2xv
d1BhdGhzLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcQ29tbW9u
U2xvd1BhdGhzRXhjZXB0aW9ucy5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxy
dW50aW1lXENvbXBpbGF0aW9uUmVzdWx0LmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXHJ1bnRpbWVcQ29tcGxldGlvbi5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxydW50aW1lXENvbnNvbGVDbGllbnQuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5ccnVudGltZVxDb25zb2xlUHJvdG90eXBlLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXHJ1bnRpbWVcQ29uc3RydWN0RGF0YS5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxydW50aW1lXEN1c3RvbUdldHRlclNldHRlci5jcHAiIC8+Ci0gICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxydW50aW1lXERhdGFWaWV3LmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXHJ1bnRpbWVcRGF0ZUNvbnN0cnVjdG9yLmNwcCIgLz4KLSAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRGF0ZUNvbnZlcnNpb24uY3BwIiAvPgotICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5ccnVudGltZVxEYXRlSW5zdGFuY2UuY3BwIiAvPgotICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5ccnVudGltZVxEYXRlUHJvdG90eXBlLmNwcCIgLz4KLSAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRHVtcENvbnRleHQuY3BwIiAvPgotICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5ccnVudGltZVxFcnJvci5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxydW50aW1lXEVycm9yQ29uc3RydWN0b3IuY3BwIiAvPgotICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5ccnVudGltZVxFcnJvckhhbmRsaW5nU2NvcGUuY3BwIiAvPgotICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxFcnJvckluc3RhbmNlLmNwcCIgLz4KLSAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRXJyb3JQcm90b3R5cGUuY3BwIiAvPgotICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxFeGNlcHRpb25GdXp6LmNwcCIgLz4KLSAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRXhjZXB0aW9uSGVscGVycy5jcHAiIC8+Ci0g
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEV4ZWN1dGFibGUuY3BwIiAvPgotICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxGdW5jdGlvbkNvbnN0cnVjdG9yLmNwcCIg
Lz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRnVuY3Rpb25FeGVjdXRhYmxl
RHVtcC5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEZ1bmN0aW9u
SGFzRXhlY3V0ZWRDYWNoZS5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50
aW1lXEZ1bmN0aW9uUHJvdG90eXBlLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XHJ1bnRpbWVcR2V0dGVyU2V0dGVyLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XHJ1bnRpbWVcSGlnaEZpZGVsaXR5TG9nLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXHJ1bnRpbWVcSGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVyLmNwcCIgLz4KLSAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSWRlbnRpZmllci5jcHAiIC8+Ci0gICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxydW50aW1lXEluZGV4aW5nVHlwZS5jcHAiIC8+Ci0gICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxydW50aW1lXEluaXRpYWxpemVUaHJlYWRpbmcuY3BwIiAvPgotICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmNwcCIg
Lz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSW50ZXJuYWxGdW5jdGlvbi5j
cHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTQVBJVmFsdWVXcmFw
cGVyLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNBY3RpdmF0
aW9uLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNBcmd1bWVu
dHNJdGVyYXRvci5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEpT
QXJyYXkuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU0FycmF5
SXRlcmF0b3IuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU0Fy
cmF5QnVmZmVyLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNB
cnJheUJ1ZmZlckNvbnN0cnVjdG9yLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XHJ1bnRpbWVcSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxydW50aW1lXEpTQXJyYXlCdWZmZXJWaWV3LmNwcCIgLz4KLSAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNCb3VuZEZ1bmN0aW9uLmNwcCIgLz4KLSAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNDSlNWYWx1ZS5jcHAiIC8+Ci0gICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTQ2VsbC5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxydW50aW1lXEpTQ29uc29sZS5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxydW50aW1lXEpTRGF0YVZpZXcuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5ccnVudGltZVxKU0RhdGFWaWV3UHJvdG90eXBlLmNwcCIgLz4KLSAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNEYXRlTWF0aC5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxydW50aW1lXEpTRnVuY3Rpb24uY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5ccnVudGltZVxKU0dsb2JhbE9iamVjdC5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxydW50aW1lXEpTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcCIgLz4KLSAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNMb2NrLmNwcCIgLz4KLSAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNNYXAuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5ccnVudGltZVxKU01hcEl0ZXJhdG9yLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXHJ1bnRpbWVcSlNOYW1lU2NvcGUuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5ccnVudGltZVxKU05vdEFuT2JqZWN0LmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXHJ1bnRpbWVcSlNPTk9iamVjdC5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxydW50aW1lXEpTT2JqZWN0LmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXHJ1bnRpbWVcSlNQcm9taXNlLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XHJ1bnRpbWVcSlNQcm9taXNlQ29uc3RydWN0b3IuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5ccnVudGltZVxKU1Byb21pc2VEZWZlcnJlZC5jcHAiIC8+Ci0gICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTUHJvbWlzZUZ1bmN0aW9ucy5jcHAiIC8+Ci0gICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTUHJvbWlzZVJlYWN0aW9uLmNwcCIgLz4KLSAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNQcm9taXNlUHJvdG90eXBlLmNwcCIg
Lz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNQcm94
eS5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTU2NvcGUuY3Bw
IiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU1NlZ21lbnRlZFZhcmlh
YmxlT2JqZWN0LmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNT
ZXQuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU1NldEl0ZXJh
dG9yLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNTdHJpbmcu
Y3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU1N0cmluZ0pvaW5l
ci5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTU3ltYm9sVGFi
bGVPYmplY3QuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU1R5
cGVkQXJyYXlDb25zdHJ1Y3RvcnMuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
cnVudGltZVxKU1R5cGVkQXJyYXlQcm90b3R5cGVzLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXHJ1bnRpbWVcSlNUeXBlZEFycmF5cy5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxydW50aW1lXEpTVmFyaWFibGVPYmplY3QuY3BwIiAvPgotICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU1dlYWtNYXAuY3BwIiAvPgotICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5ccnVudGltZVxKU1dpdGhTY29wZS5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxydW50aW1lXEpTV3JhcHBlck9iamVjdC5jcHAiIC8+Ci0gICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxydW50aW1lXExpdGVyYWxQYXJzZXIuY3BwIiAvPgotICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5ccnVudGltZVxMb29rdXAuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5ccnVudGltZVxNYXBDb25zdHJ1Y3Rvci5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxydW50aW1lXE1hcERhdGEuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5ccnVudGltZVxNYXBJdGVyYXRvckNvbnN0cnVjdG9yLmNwcCIgLz4KLSAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcTWFwSXRlcmF0b3JQcm90b3R5cGUuY3BwIiAvPgotICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxNYXBQcm90b3R5cGUuY3BwIiAvPgotICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxNYXRoT2JqZWN0LmNwcCIgLz4KLSAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcTWVtb3J5U3RhdGlzdGljcy5jcHAiIC8+Ci0g
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXE5hbWVDb25zdHJ1Y3Rvci5jcHAiIC8+
Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXE5hbWVJbnN0YW5jZS5jcHAiIC8+
Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXE5hbWVQcm90b3R5cGUuY3BwIiAv
PgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxOYXRpdmVFcnJvckNvbnN0cnVj
dG9yLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcTmF0aXZlRXJy
b3JQcm90b3R5cGUuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxO
dW1iZXJDb25zdHJ1Y3Rvci5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50
aW1lXE51bWJlck9iamVjdC5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50
aW1lXE51bWJlclByb3RvdHlwZS5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxy
dW50aW1lXE9iamVjdENvbnN0cnVjdG9yLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXHJ1bnRpbWVcT2JqZWN0UHJvdG90eXBlLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXHJ1bnRpbWVcT3BlcmF0aW9ucy5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxydW50aW1lXE9wdGlvbnMuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
cnVudGltZVxQcm9wZXJ0eURlc2NyaXB0b3IuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5ccnVudGltZVxQcm9wZXJ0eU5hbWVBcnJheS5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxydW50aW1lXFByb3BlcnR5U2xvdC5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxydW50aW1lXFByb3BlcnR5VGFibGUuY3BwIiAvPgotICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5ccnVudGltZVxQcm90b3R5cGVNYXAuY3BwIiAvPgotICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5ccnVudGltZVxSZWdFeHAuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5ccnVudGltZVxSZWdFeHBDYWNoZS5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxydW50aW1lXFJlZ0V4cENhY2hlZFJlc3VsdC5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxydW50aW1lXFJlZ0V4cENvbnN0cnVjdG9yLmNwcCIgLz4KLSAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcUmVnRXhwTWF0Y2hlc0FycmF5LmNwcCIgLz4KLSAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcUmVnRXhwT2JqZWN0LmNwcCIgLz4KLSAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcUmVnRXhwUHJvdG90eXBlLmNwcCIgLz4KLSAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcU2FtcGxpbmdDb3VudGVyLmNwcCIgLz4K
LSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcU2V0Q29uc3RydWN0b3IuY3BwIiAv
PgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxTZXRJdGVyYXRvckNvbnN0cnVj
dG9yLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcU2V0SXRlcmF0
b3JQcm90b3R5cGUuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxT
ZXRQcm90b3R5cGUuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxT
aW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxydW50aW1lXFNtYWxsU3RyaW5ncy5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxydW50aW1lXFNwYXJzZUFycmF5VmFsdWVNYXAuY3BwIiAvPgotICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5ccnVudGltZVxTdHJpY3RFdmFsQWN0aXZhdGlvbi5jcHAiIC8+Ci0gICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXFN0cmluZ0NvbnN0cnVjdG9yLmNwcCIgLz4KLSAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcU3RyaW5nT2JqZWN0LmNwcCIgLz4KLSAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcU3RyaW5nUHJvdG90eXBlLmNwcCIgLz4K
LSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcU3RyaW5nUmVjdXJzaW9uQ2hlY2tl
ci5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXFN0cnVjdHVyZS5j
cHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXFN0cnVjdHVyZUNoYWlu
LmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcU3RydWN0dXJlSURU
YWJsZS5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXFN0cnVjdHVy
ZVJhcmVEYXRhLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcU3lt
Ym9sVGFibGUuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxUZXN0
UnVubmVyVXRpbHMuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxU
eXBlZEFycmF5Q29udHJvbGxlci5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxy
dW50aW1lXFR5cGVkQXJyYXlUeXBlLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XHJ1bnRpbWVcVHlwZUxvY2F0aW9uQ2FjaGUuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5ccnVudGltZVxUeXBlU2V0LmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XHJ1bnRpbWVcVk0uY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxW
TUVudHJ5U2NvcGUuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxX
YXRjaGRvZy5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXFdhdGNo
ZG9nTm9uZS5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXFdlYWtN
YXBDb25zdHJ1Y3Rvci5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1l
XFdlYWtNYXBEYXRhLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVc
V2Vha01hcFByb3RvdHlwZS5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlx0b29s
c1xDb2RlUHJvZmlsZS5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlx0b29sc1xD
b2RlUHJvZmlsaW5nLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHlhcnJcUmVn
dWxhckV4cHJlc3Npb24uY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ceWFyclxZ
YXJyQ2Fub25pY2FsaXplVUNTMi5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlx5
YXJyXFlhcnJJbnRlcnByZXRlci5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlx5
YXJyXFlhcnJKSVQuY3BwIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ceWFyclxZYXJy
UGF0dGVybi5jcHAiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlx5YXJyXFlhcnJTeW50
YXhDaGVja2VyLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQoQ29uZmlndXJhdGlv
bkJ1aWxkRGlyKVxvYmokKFBsYXRmb3JtQXJjaGl0ZWN0dXJlKVwkKFByb2plY3ROYW1lKVxEZXJp
dmVkU291cmNlc1xJbnNwZWN0b3JKU0JhY2tlbmREaXNwYXRjaGVycy5jcHAiIC8+Ci0gICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIkKENvbmZpZ3VyYXRpb25CdWlsZERpcilcb2JqJChQbGF0Zm9ybUFy
Y2hpdGVjdHVyZSlcJChQcm9qZWN0TmFtZSlcRGVyaXZlZFNvdXJjZXNcSW5zcGVjdG9ySlNGcm9u
dGVuZERpc3BhdGNoZXJzLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQoQ29uZmln
dXJhdGlvbkJ1aWxkRGlyKVxvYmokKFBsYXRmb3JtQXJjaGl0ZWN0dXJlKVwkKFByb2plY3ROYW1l
KVxEZXJpdmVkU291cmNlc1xJbnNwZWN0b3JKU1R5cGVCdWlsZGVycy5jcHAiIC8+Ci0gICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIkKENvbmZpZ3VyYXRpb25CdWlsZERpcilcb2JqJChQbGF0Zm9ybUFy
Y2hpdGVjdHVyZSlcJChQcm9qZWN0TmFtZSlcRGVyaXZlZFNvdXJjZXNcSlNDQnVpbHRpbnMuY3Bw
IiAvPgotICA8L0l0ZW1Hcm91cD4KLSAgPEl0ZW1Hcm91cD4KLSAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9IiQoQ29uZmlndXJhdGlvbkJ1aWxkRGlyKVxvYmokKFBsYXRmb3JtQXJjaGl0ZWN0dXJlKVwk
KFByb2plY3ROYW1lKVxEZXJpdmVkU291cmNlc1xBcnJheUNvbnN0cnVjdG9yLmx1dC5oIiAvPgot
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChDb25maWd1cmF0aW9uQnVpbGREaXIpXG9iaiQoUGxh
dGZvcm1BcmNoaXRlY3R1cmUpXCQoUHJvamVjdE5hbWUpXERlcml2ZWRTb3VyY2VzXEFycmF5UHJv
dG90eXBlLmx1dC5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChDb25maWd1cmF0aW9u
QnVpbGREaXIpXG9iaiQoUGxhdGZvcm1BcmNoaXRlY3R1cmUpXCQoUHJvamVjdE5hbWUpXERlcml2
ZWRTb3VyY2VzXEJvb2xlYW5Qcm90b3R5cGUubHV0LmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIkKENvbmZpZ3VyYXRpb25CdWlsZERpcilcb2JqJChQbGF0Zm9ybUFyY2hpdGVjdHVyZSlc
JChQcm9qZWN0TmFtZSlcRGVyaXZlZFNvdXJjZXNcRGF0ZUNvbnN0cnVjdG9yLmx1dC5oIiAvPgot
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChDb25maWd1cmF0aW9uQnVpbGREaXIpXG9iaiQoUGxh
dGZvcm1BcmNoaXRlY3R1cmUpXCQoUHJvamVjdE5hbWUpXERlcml2ZWRTb3VyY2VzXERhdGVQcm90
b3R5cGUubHV0LmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKENvbmZpZ3VyYXRpb25C
dWlsZERpcilcb2JqJChQbGF0Zm9ybUFyY2hpdGVjdHVyZSlcJChQcm9qZWN0TmFtZSlcRGVyaXZl
ZFNvdXJjZXNcRXJyb3JQcm90b3R5cGUubHV0LmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIkKENvbmZpZ3VyYXRpb25CdWlsZERpcilcb2JqJChQbGF0Zm9ybUFyY2hpdGVjdHVyZSlcJChQ
cm9qZWN0TmFtZSlcRGVyaXZlZFNvdXJjZXNcSGVhZGVyRGV0ZWN0aW9uLmgiIC8+Ci0gICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIkKENvbmZpZ3VyYXRpb25CdWlsZERpcilcb2JqJChQbGF0Zm9ybUFy
Y2hpdGVjdHVyZSlcJChQcm9qZWN0TmFtZSlcRGVyaXZlZFNvdXJjZXNcSW5qZWN0ZWRTY3JpcHRT
b3VyY2UuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoQ29uZmlndXJhdGlvbkJ1aWxk
RGlyKVxvYmokKFBsYXRmb3JtQXJjaGl0ZWN0dXJlKVwkKFByb2plY3ROYW1lKVxEZXJpdmVkU291
cmNlc1xJbnNwZWN0b3JKU0JhY2tlbmREaXNwYXRjaGVycy5oIiAvPgotICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iJChDb25maWd1cmF0aW9uQnVpbGREaXIpXG9iaiQoUGxhdGZvcm1BcmNoaXRlY3R1
cmUpXCQoUHJvamVjdE5hbWUpXERlcml2ZWRTb3VyY2VzXEluc3BlY3RvckpTRnJvbnRlbmREaXNw
YXRjaGVycy5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChDb25maWd1cmF0aW9uQnVp
bGREaXIpXG9iaiQoUGxhdGZvcm1BcmNoaXRlY3R1cmUpXCQoUHJvamVjdE5hbWUpXERlcml2ZWRT
b3VyY2VzXEluc3BlY3RvckpTVHlwZUJ1aWxkZXJzLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIkKENvbmZpZ3VyYXRpb25CdWlsZERpcilcb2JqJChQbGF0Zm9ybUFyY2hpdGVjdHVyZSlc
JChQcm9qZWN0TmFtZSlcRGVyaXZlZFNvdXJjZXNcSlNEYXRhVmlld1Byb3RvdHlwZS5sdXQuaCIg
Lz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoQ29uZmlndXJhdGlvbkJ1aWxkRGlyKVxvYmok
KFBsYXRmb3JtQXJjaGl0ZWN0dXJlKVwkKFByb2plY3ROYW1lKVxEZXJpdmVkU291cmNlc1xKU0ds
b2JhbE9iamVjdC5sdXQuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoQ29uZmlndXJh
dGlvbkJ1aWxkRGlyKVxvYmokKFBsYXRmb3JtQXJjaGl0ZWN0dXJlKVwkKFByb2plY3ROYW1lKVxE
ZXJpdmVkU291cmNlc1xKU09OT2JqZWN0Lmx1dC5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iJChDb25maWd1cmF0aW9uQnVpbGREaXIpXG9iaiQoUGxhdGZvcm1BcmNoaXRlY3R1cmUpXCQo
UHJvamVjdE5hbWUpXERlcml2ZWRTb3VyY2VzXEpTUHJvbWlzZUNvbnN0cnVjdG9yLmx1dC5oIiAv
PgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChDb25maWd1cmF0aW9uQnVpbGREaXIpXG9iaiQo
UGxhdGZvcm1BcmNoaXRlY3R1cmUpXCQoUHJvamVjdE5hbWUpXERlcml2ZWRTb3VyY2VzXEpTUHJv
bWlzZVByb3RvdHlwZS5sdXQuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoQ29uZmln
dXJhdGlvbkJ1aWxkRGlyKVxvYmokKFBsYXRmb3JtQXJjaGl0ZWN0dXJlKVwkKFByb2plY3ROYW1l
KVxEZXJpdmVkU291cmNlc1xLZXl3b3JkTG9va3VwLmx1dC5oIiAvPgotICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iJChDb25maWd1cmF0aW9uQnVpbGREaXIpXG9iaiQoUGxhdGZvcm1BcmNoaXRlY3R1
cmUpXCQoUHJvamVjdE5hbWUpXERlcml2ZWRTb3VyY2VzXExleGVyLmx1dC5oIiAvPgotICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iJChDb25maWd1cmF0aW9uQnVpbGREaXIpXG9iaiQoUGxhdGZvcm1B
cmNoaXRlY3R1cmUpXCQoUHJvamVjdE5hbWUpXERlcml2ZWRTb3VyY2VzXE5hbWVQcm90b3R5cGUu
bHV0LmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKENvbmZpZ3VyYXRpb25CdWlsZERp
cilcb2JqJChQbGF0Zm9ybUFyY2hpdGVjdHVyZSlcJChQcm9qZWN0TmFtZSlcRGVyaXZlZFNvdXJj
ZXNcTnVtYmVyQ29uc3RydWN0b3IubHV0LmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIk
KENvbmZpZ3VyYXRpb25CdWlsZERpcilcb2JqJChQbGF0Zm9ybUFyY2hpdGVjdHVyZSlcJChQcm9q
ZWN0TmFtZSlcRGVyaXZlZFNvdXJjZXNcTnVtYmVyUHJvdG90eXBlLmx1dC5oIiAvPgotICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iJChDb25maWd1cmF0aW9uQnVpbGREaXIpXG9iaiQoUGxhdGZvcm1B
cmNoaXRlY3R1cmUpXCQoUHJvamVjdE5hbWUpXERlcml2ZWRTb3VyY2VzXE9iamVjdENvbnN0cnVj
dG9yLmx1dC5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChDb25maWd1cmF0aW9uQnVp
bGREaXIpXG9iaiQoUGxhdGZvcm1BcmNoaXRlY3R1cmUpXCQoUHJvamVjdE5hbWUpXERlcml2ZWRT
b3VyY2VzXFJlZ0V4cENvbnN0cnVjdG9yLmx1dC5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iJChDb25maWd1cmF0aW9uQnVpbGREaXIpXG9iaiQoUGxhdGZvcm1BcmNoaXRlY3R1cmUpXCQo
UHJvamVjdE5hbWUpXERlcml2ZWRTb3VyY2VzXFJlZ0V4cEppdFRhYmxlcy5oIiAvPgotICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iJChDb25maWd1cmF0aW9uQnVpbGREaXIpXG9iaiQoUGxhdGZvcm1B
cmNoaXRlY3R1cmUpXCQoUHJvamVjdE5hbWUpXERlcml2ZWRTb3VyY2VzXFJlZ0V4cE9iamVjdC5s
dXQuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoQ29uZmlndXJhdGlvbkJ1aWxkRGly
KVxvYmokKFBsYXRmb3JtQXJjaGl0ZWN0dXJlKVwkKFByb2plY3ROYW1lKVxEZXJpdmVkU291cmNl
c1xSZWdFeHBQcm90b3R5cGUubHV0LmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKENv
bmZpZ3VyYXRpb25CdWlsZERpcilcb2JqJChQbGF0Zm9ybUFyY2hpdGVjdHVyZSlcJChQcm9qZWN0
TmFtZSlcRGVyaXZlZFNvdXJjZXNcU3RyaW5nQ29uc3RydWN0b3IubHV0LmgiIC8+Ci0gICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIkKENvbmZpZ3VyYXRpb25CdWlsZERpcilcb2JqJChQbGF0Zm9ybUFy
Y2hpdGVjdHVyZSlcJChQcm9qZWN0TmFtZSlcRGVyaXZlZFNvdXJjZXNcSlNDQnVpbHRpbnMuaCIg
Lz4KLSAgPC9JdGVtR3JvdXA+Ci0gIDxJdGVtR3JvdXA+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxBUElcQVBJQ2FsbGJhY2tGdW5jdGlvbi5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cQVBJXEFQSUNhc3QuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXEFQSVxK
YXZhU2NyaXB0LmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxBUElcSmF2YVNjcmlw
dENvcmUuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXEFQSVxKU0FQSVdyYXBwZXJP
YmplY3QuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXEFQSVxKU0Jhc2UuaCIgLz4K
LSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXEFQSVxKU0Jhc2VQcml2YXRlLmgiIC8+Ci0gICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxBUElcSlNDYWxsYmFja0NvbnN0cnVjdG9yLmgiIC8+Ci0g
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxBUElcSlNDYWxsYmFja0Z1bmN0aW9uLmgiIC8+Ci0g
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxBUElcSlNDYWxsYmFja09iamVjdC5oIiAvPgotICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cQVBJXEpTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaCIg
Lz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXEFQSVxKU0NsYXNzUmVmLmgiIC8+Ci0gICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxBUElcSlNDb250ZXh0LmgiIC8+Ci0gICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxBUElcSlNDb250ZXh0SW50ZXJuYWwuaCIgLz4KLSAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXEFQSVxKU0NvbnRleHRSZWYuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXEFQSVxKU0NvbnRleHRSZWZQcml2YXRlLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxBUElcSlNFeHBvcnQuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXEFQ
SVxKU09iamVjdFJlZi5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cQVBJXEpTT2Jq
ZWN0UmVmUHJpdmF0ZS5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cQVBJXEpTUmV0
YWluUHRyLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxBUElcSlNTY3JpcHRSZWZQ
cml2YXRlLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxBUElcSlNTdHJpbmdSZWYu
aCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXEFQSVxKU1N0cmluZ1JlZkJTVFIuaCIg
Lz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXEFQSVxKU1N0cmluZ1JlZkNGLmgiIC8+Ci0g
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxBUElcSlNWYWx1ZS5oIiAvPgotICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cQVBJXEpTVmFsdWVJbnRlcm5hbC5oIiAvPgotICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5cQVBJXEpTVmFsdWVSZWYuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXEFQSVxKU1dlYWtPYmplY3RNYXBSZWZJbnRlcm5hbC5oIiAvPgotICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5cQVBJXEpTV2Vha09iamVjdE1hcFJlZlByaXZhdGUuaCIgLz4KLSAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXEFQSVxKU1dyYXBwZXJNYXAuaCIgLz4KLSAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXEFQSVxPcGFxdWVKU1N0cmluZy5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cQVBJXFdlYktpdEF2YWlsYWJpbGl0eS5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cYXNzZW1ibGVyXEFib3J0UmVhc29uLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxhc3NlbWJsZXJcQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oIiAvPgotICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cYXNzZW1ibGVyXEFzc2VtYmxlckJ1ZmZlci5oIiAvPgotICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cYXNzZW1ibGVyXENvZGVMb2NhdGlvbi5oIiAvPgotICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cYXNzZW1ibGVyXExpbmtCdWZmZXIuaCIgLz4KLSAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXGFzc2VtYmxlclxNYWNyb0Fzc2VtYmxlci5oIiAvPgotICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cYXNzZW1ibGVyXE1hY3JvQXNzZW1ibGVyWDg2LmgiIC8+Ci0g
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxhc3NlbWJsZXJcTWFjcm9Bc3NlbWJsZXJYODZDb21t
b24uaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGFzc2VtYmxlclxNYWNyb0Fzc2Vt
Ymxlclg4Nl82NC5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYXNzZW1ibGVyXE1h
eEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxhc3NlbWJsZXJcUmVwYXRjaEJ1ZmZlci5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cYXNzZW1ibGVyXFg4NkFzc2VtYmxlci5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cYmluZGluZ3NcU2NyaXB0RnVuY3Rpb25DYWxsLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxiaW5kaW5nc1xTY3JpcHRPYmplY3QuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXGJpbmRpbmdzXFNjcmlwdFZhbHVlLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxidWlsdGluc1xCdWlsdGluRXhlY3V0YWJsZXMuaCIgLz4KLSAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXEFycmF5QWxsb2NhdGlvblByb2ZpbGUuaCIgLz4KLSAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXEFycmF5UHJvZmlsZS5oIiAvPgotICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcQnlWYWxJbmZvLmgiIC8+Ci0gICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxCeXRlY29kZUJhc2ljQmxvY2suaCIgLz4KLSAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5o
IiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcQnl0ZWNvZGVVc2VEZWYu
aCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXENhbGxMaW5rSW5mby5o
IiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcQ2FsbExpbmtTdGF0dXMu
aCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXENhbGxSZXR1cm5PZmZz
ZXRUb0J5dGVjb2RlT2Zmc2V0LmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRl
Y29kZVxDb2RlQmxvY2suaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2Rl
XENvZGVCbG9ja0hhc2guaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2Rl
XENvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludC5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cYnl0ZWNvZGVcQ29kZUJsb2NrV2l0aEpJVFR5cGUuaCIgLz4KLSAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXENvZGVPcmlnaW4uaCIgLz4KLSAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXENvZGVUeXBlLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxieXRlY29kZVxDb21tZW50LmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxieXRlY29kZVxDb21wbGV4R2V0U3RhdHVzLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxieXRlY29kZVxDb25zdGFudFN0cnVjdHVyZUNoZWNrLmgiIC8+Ci0gICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxieXRlY29kZVxEYXRhRm9ybWF0LmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxieXRlY29kZVxEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCIgLz4KLSAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXERGR0V4aXRQcm9maWxlLmgiIC8+Ci0g
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxFdmFsQ29kZUNhY2hlLmgiIC8+Ci0g
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxFeGVjdXRpb25Db3VudGVyLmgiIC8+
Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxFeGl0S2luZC5oIiAvPgotICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcRXhwcmVzc2lvblJhbmdlSW5mby5oIiAv
PgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcR2V0QnlJZFN0YXR1cy5oIiAv
PgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcR2V0QnlJZFZhcmlhbnQuaCIg
Lz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXEhhbmRsZXJJbmZvLmgiIC8+
Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxJbmxpbmVDYWxsRnJhbWVTZXQu
aCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXEluc3RydWN0aW9uLmgi
IC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxKdW1wVGFibGUuaCIgLz4K
LSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXExhenlPcGVyYW5kVmFsdWVQcm9m
aWxlLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxMTEludENhbGxM
aW5rSW5mby5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcTWV0aG9k
T2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
Ynl0ZWNvZGVcT3Bjb2RlLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29k
ZVxPcGVyYW5kcy5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcUG9s
eW1vcnBoaWNHZXRCeUlkTGlzdC5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0
ZWNvZGVcUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cYnl0ZWNvZGVcUHJlY2lzZUp1bXBUYXJnZXRzLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxieXRlY29kZVxQdXRCeUlkU3RhdHVzLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxieXRlY29kZVxQdXRCeUlkVmFyaWFudC5oIiAvPgotICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5cYnl0ZWNvZGVcUHV0S2luZC5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cYnl0ZWNvZGVcUmVkdWNlV2hpdGVzcGFjZS5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cYnl0ZWNvZGVcU2FtcGxpbmdUb29sLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxieXRlY29kZVxTcGVjaWFsUG9pbnRlci5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cYnl0ZWNvZGVcU3BlY3VsYXRlZFR5cGUuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXGJ5dGVjb2RlXFN0cnVjdHVyZVNldC5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cYnl0ZWNvZGVcU3RydWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5oIiAvPgot
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcU3RydWN0dXJlU3R1YkluZm8uaCIg
Lz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFRvVGhpc1N0YXR1cy5oIiAv
PgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcVHlwZUxvY2F0aW9uLmgiIC8+
Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxVbmxpbmtlZENvZGVCbG9jay5o
IiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcVW5saW5rZWRJbnN0cnVj
dGlvblN0cmVhbS5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcVmFs
dWVQcm9maWxlLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxWYWx1
ZVJlY292ZXJ5LmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxWYXJp
YWJsZVdhdGNocG9pbnRTZXQuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVj
b2RlXFZpcnR1YWxSZWdpc3Rlci5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0
ZWNvZGVcV2F0Y2hwb2ludC5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNv
bXBpbGVyXEJ5dGVjb2RlR2VuZXJhdG9yLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxieXRlY29tcGlsZXJcTGFiZWwuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5
dGVjb21waWxlclxMYWJlbFNjb3BlLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxi
eXRlY29tcGlsZXJcUmVnaXN0ZXJJRC5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
Y29uZmlnLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZWJ1Z2dlclxCcmVha3Bv
aW50LmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZWJ1Z2dlclxEZWJ1Z2dlci5o
IiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGVidWdnZXJcRGVidWdnZXJDYWxsRnJh
bWUuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRlYnVnZ2VyXERlYnVnZ2VyUHJp
bWl0aXZlcy5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGVidWdnZXJcRGVidWdn
ZXJTY29wZS5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0Fic3RyYWN0
SGVhcC5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0Fic3RyYWN0SW50
ZXJwcmV0ZXIuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdBYnN0cmFj
dEludGVycHJldGVySW5saW5lcy5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZn
XERGR0Fic3RyYWN0VmFsdWUuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xE
RkdBZGphY2VuY3lMaXN0LmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZH
QWxsb2NhdG9yLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHQW5hbHlz
aXMuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdBcmd1bWVudFBvc2l0
aW9uLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHQXJndW1lbnRzU2lt
cGxpZmljYXRpb25QaGFzZS5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERG
R0FycmF5aWZ5U2xvd1BhdGhHZW5lcmF0b3IuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXGRmZ1xERkdBcml0aE1vZGUuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRm
Z1xERkdBcnJheU1vZGUuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdB
dFRhaWxBYnN0cmFjdFN0YXRlLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdc
REZHQXZhaWxhYmlsaXR5LmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZH
QmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5cZGZnXERGR0Jhc2ljQmxvY2suaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRm
Z1xERkdCYXNpY0Jsb2NrSW5saW5lcy5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
ZGZnXERGR0JpbmFyeVN3aXRjaC5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZn
XERGR0Jsb2NrSW5zZXJ0aW9uU2V0LmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxk
ZmdcREZHQnJhbmNoRGlyZWN0aW9uLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxk
ZmdcREZHQnl0ZUNvZGVQYXJzZXIuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRm
Z1xERkdDYWxsQXJyYXlBbGxvY2F0b3JTbG93UGF0aEdlbmVyYXRvci5oIiAvPgotICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0NhcGFiaWxpdGllcy5oIiAvPgotICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0NDYWxsSGVscGVycy5oIiAvPgotICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5cZGZnXERGR0NGQVBoYXNlLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxkZmdcREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5oIiAvPgotICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5cZGZnXERGR0Nsb2JiZXJpemUuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGRmZ1xERkdDbG9iYmVyU2V0LmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxkZmdcREZHQ29tbW9uLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZH
Q29tbW9uRGF0YS5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0NvbXBp
bGF0aW9uS2V5LmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHQ29tcGls
YXRpb25Nb2RlLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHQ29uc3Rh
bnRGb2xkaW5nUGhhc2UuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdD
UFNSZXRocmVhZGluZ1BoYXNlLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdc
REZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cZGZnXERGR0NTRVBoYXNlLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxk
ZmdcREZHRENFUGhhc2UuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdE
ZXNpcmVkSWRlbnRpZmllcnMuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xE
RkdEZXNpcmVkVHJhbnNpdGlvbnMuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRm
Z1xERkdEZXNpcmVkV2F0Y2hwb2ludHMuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGRmZ1xERkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGRmZ1xERkdEZXNpcmVkV3JpdGVCYXJyaWVycy5oIiAvPgotICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5cZGZnXERGR0Rpc2Fzc2VtYmxlci5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cZGZnXERGR0RvZXNHQy5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
ZGZnXERGR0RvbWluYXRvcnMuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xE
RkdEb3VibGVGb3JtYXRTdGF0ZS5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZn
XERGR0RyaXZlci5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0VkZ2Uu
aCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdFZGdlRG9taW5hdGVzLmgi
IC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHRWRnZVVzZXNTdHJ1Y3R1cmUu
aCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdGYWlsZWRGaW5hbGl6ZXIu
aCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdGaWx0cmF0aW9uUmVzdWx0
LmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHRmluYWxpemVyLmgiIC8+
Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHRml4dXBQaGFzZS5oIiAvPgotICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0ZsdXNoZWRBdC5oIiAvPgotICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0ZsdXNoRm9ybWF0LmgiIC8+Ci0gICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxkZmdcREZHRlBSSW5mby5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cZGZnXERGR0Zyb3plblZhbHVlLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxkZmdcREZHRnVuY3Rpb25XaGl0ZWxpc3QuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXGRmZ1xERkdHZW5lcmF0aW9uSW5mby5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5cZGZnXERGR0dQUkluZm8uaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xE
RkdHcmFwaC5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0dyYXBoU2Fm
ZXBvaW50LmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHSGVhcExvY2F0
aW9uLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHSW5QbGFjZUFic3Ry
YWN0U3RhdGUuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdJbnNlcnRp
b25TZXQuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdJbnRlZ2VyQ2hl
Y2tDb21iaW5pbmdQaGFzZS5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERG
R0ludmFsaWRhdGlvblBvaW50SW5qZWN0aW9uUGhhc2UuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXGRmZ1xERkdKSVRDb2RlLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxkZmdcREZHSklUQ29tcGlsZXIuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRm
Z1xERkdKSVRGaW5hbGl6ZXIuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xE
RkdKdW1wUmVwbGFjZW1lbnQuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xE
RkdMYXp5SlNWYWx1ZS5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0xJ
Q01QaGFzZS5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0xpdmVuZXNz
QW5hbHlzaXNQaGFzZS5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0xv
bmdMaXZlZFN0YXRlLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHTG9v
cFByZUhlYWRlckNyZWF0aW9uUGhhc2UuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGRmZ1xERkdNYXlFeGl0LmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZH
TWVyZ2VNb2RlLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHTWluaWZp
ZWRHcmFwaC5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR01pbmlmaWVk
SUQuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdNaW5pZmllZE5vZGUu
aCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdOYXR1cmFsTG9vcHMuaCIg
Lz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdOb2RlLmgiIC8+Ci0gICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHTm9kZUFsbG9jYXRvci5oIiAvPgotICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR05vZGVGbGFncy5oIiAvPgotICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5cZGZnXERGR05vZGVPcmlnaW4uaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGRmZ1xERkdOb2RlVHlwZS5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
ZGZnXERGR09wZXJhdGlvbnMuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xE
RkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxkZmdcREZHT1NSRW50cnkuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGRmZ1xERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5oIiAvPgotICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5cZGZnXERGR09TUkV4aXQuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXGRmZ1xERkdPU1JFeGl0QmFzZS5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
ZGZnXERGR09TUkV4aXRDb21waWxhdGlvbkluZm8uaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGRmZ1xERkdPU1JFeGl0Q29tcGlsZXIuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGRmZ1xERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uaCIgLz4KLSAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXGRmZ1xERkdPU1JFeGl0SnVtcFBsYWNlaG9sZGVyLmgiIC8+Ci0gICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHT1NSRXhpdFByZXBhcmF0aW9uLmgiIC8+Ci0gICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHUGhhbnRvbUNhbm9uaWNhbGl6YXRpb25QaGFz
ZS5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1BoYW50b21SZW1vdmFs
UGhhc2UuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQaGFzZS5oIiAv
PgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1BsYW4uaCIgLz4KLSAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuaCIgLz4K
LSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25Q
aGFzZS5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1B1cmVWYWx1ZS5o
IiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1JlZ2lzdGVyQmFuay5oIiAv
PgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1JlZ2lzdGVyU2V0LmgiIC8+Ci0g
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHUmVzdXJyZWN0aW9uRm9yVmFsaWRhdGlv
blBoYXNlLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHU2FmZVRvRXhl
Y3V0ZS5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1NhZmVwb2ludC5o
IiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1NhbmVTdHJpbmdHZXRCeVZh
bFNsb3dQYXRoR2VuZXJhdG9yLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdc
REZHU2Nhbm5hYmxlLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHU2Nv
cmVCb2FyZC5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1NjcmF0Y2hS
ZWdpc3RlckFsbG9jYXRvci5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERG
R1NpbGVudFJlZ2lzdGVyU2F2ZVBsYW4uaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGRmZ1xERkdTbG93UGF0aEdlbmVyYXRvci5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5cZGZnXERGR1NwZWN1bGF0aXZlSklULmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxkZmdcREZHU1NBQ29udmVyc2lvblBoYXNlLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxkZmdcREZHU1NBTG93ZXJpbmdQaGFzZS5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cZGZnXERGR1N0YWNrTGF5b3V0UGhhc2UuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGRmZ1xERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5oIiAvPgot
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1N0b3JlQmFycmllckVsaXNpb25QaGFz
ZS5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1N0cmVuZ3RoUmVkdWN0
aW9uUGhhc2UuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdTdHJ1Y3R1
cmVBYnN0cmFjdFZhbHVlLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZH
U3RydWN0dXJlQ2xvYmJlclN0YXRlLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxk
ZmdcREZHVGhyZWFkRGF0YS5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERG
R1RodW5rcy5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1RpZXJVcENo
ZWNrSW5qZWN0aW9uUGhhc2UuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xE
RkdUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oIiAvPgotICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5cZGZnXERGR1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2Fs
bGJhY2suaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdUcmFuc2l0aW9u
LmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHVHlwZUNoZWNrSG9pc3Rp
bmdQaGFzZS5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1VuaWZpY2F0
aW9uUGhhc2UuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdVc2VLaW5k
LmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHVmFsaWRhdGUuaCIgLz4K
LSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdWYWx1ZVJlY292ZXJ5T3ZlcnJpZGUu
aCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdWYWx1ZVNvdXJjZS5oIiAv
PgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1ZhbHVlU3RyZW5ndGguaCIgLz4K
LSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaCIg
Lz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdWYXJpYWJsZUFjY2Vzc0RhdGFE
dW1wLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHVmFyaWFibGVFdmVu
dC5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1ZhcmlhYmxlRXZlbnRT
dHJlYW0uaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdWYXJpYWRpY0Z1
bmN0aW9uLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHVmlydHVhbFJl
Z2lzdGVyQWxsb2NhdGlvblBoYXNlLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxk
ZmdcREZHV2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmdQaGFzZS5oIiAvPgotICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1dhdGNocG9pbnRDb2xsZWN0aW9uUGhhc2UuaCIgLz4KLSAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdXb3JrbGlzdC5oIiAvPgotICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cZGlzYXNzZW1ibGVyXERpc2Fzc2VtYmxlci5oIiAvPgotICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cZGlzYXNzZW1ibGVyXExMVk1EaXNhc3NlbWJsZXIuaCIgLz4K
LSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGZ0bFxGVExBYmJyZXZpYXRlZFR5cGVzLmgiIC8+
Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxmdGxcRlRMQWJicmV2aWF0aW9ucy5oIiAvPgot
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZnRsXEZUTEFic3RyYWN0SGVhcC5oIiAvPgotICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZnRsXEZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuaCIg
Lz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGZ0bFxGVExBdmFpbGFibGVSZWNvdmVyeS5o
IiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZnRsXEZUTENhcGFiaWxpdGllcy5oIiAv
PgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZnRsXEZUTENvbW1vblZhbHVlcy5oIiAvPgot
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZnRsXEZUTENvbXBpbGUuaCIgLz4KLSAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXGZ0bFxGVExEYXRhU2VjdGlvbi5oIiAvPgotICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cZnRsXEZUTERXQVJGRGVidWdMaW5lSW5mby5oIiAvPgotICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cZnRsXEZUTERXQVJGUmVnaXN0ZXIuaCIgLz4KLSAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGZ0bFxGVExFeGl0QXJndW1lbnQuaCIgLz4KLSAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXGZ0bFxGVExFeGl0QXJndW1lbnRGb3JPcGVyYW5kLmgiIC8+Ci0gICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxmdGxcRlRMRXhpdEFyZ3VtZW50TGlzdC5oIiAvPgotICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cZnRsXEZUTEV4aXRUaHVua0dlbmVyYXRvci5oIiAvPgotICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZnRsXEZUTEV4aXRWYWx1ZS5oIiAvPgotICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cZnRsXEZUTEZhaWwuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGZ0bFxGVExGb3JtYXR0ZWRWYWx1ZS5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cZnRsXEZUTEZvck9TUkVudHJ5SklUQ29kZS5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cZnRsXEZUTEdlbmVyYXRlZEZ1bmN0aW9uLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxmdGxcRlRMSW5saW5lQ2FjaGVEZXNjcmlwdG9yLmgiIC8+Ci0gICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxmdGxcRlRMSW5saW5lQ2FjaGVTaXplLmgiIC8+Ci0gICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxmdGxcRlRMSW50cmluc2ljUmVwb3NpdG9yeS5oIiAvPgotICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cZnRsXEZUTEpJVENvZGUuaCIgLz4KLSAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXGZ0bFxGVExKSVRGaW5hbGl6ZXIuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXGZ0bFxGVExKU0NhbGwuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGZ0bFxGVExMaW5rLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxmdGxcRlRMTG9j
YXRpb24uaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGZ0bFxGVExMb3dlckRGR1Rv
TExWTS5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZnRsXEZUTExvd2VyZWROb2Rl
VmFsdWUuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGZ0bFxGVExPU1JFbnRyeS5o
IiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZnRsXEZUTE9TUkV4aXQuaCIgLz4KLSAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGZ0bFxGVExPU1JFeGl0Q29tcGlsYXRpb25JbmZvLmgi
IC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxmdGxcRlRMT1NSRXhpdENvbXBpbGVyLmgi
IC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxmdGxcRlRMT3V0cHV0LmgiIC8+Ci0gICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxmdGxcRlRMUmVjb3ZlcnlPcGNvZGUuaCIgLz4KLSAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGZ0bFxGVExSZWdpc3RlckF0T2Zmc2V0LmgiIC8+Ci0gICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxmdGxcRlRMU2F2ZVJlc3RvcmUuaCIgLz4KLSAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXGZ0bFxGVExTbG93UGF0aENhbGwuaCIgLz4KLSAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGZ0bFxGVExTbG93UGF0aENhbGxLZXkuaCIgLz4KLSAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGZ0bFxGVExTdGFja01hcHMuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXGZ0bFxGVExTdGF0ZS5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
ZnRsXEZUTFN3aXRjaENhc2UuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGZ0bFxG
VExUaHVua3MuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGZ0bFxGVExUeXBlZFBv
aW50ZXIuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGZ0bFxGVExVbndpbmRJbmZv
LmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxmdGxcRlRMVmFsdWVGb3JtYXQuaCIg
Lz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGZ0bFxGVExWYWx1ZUZyb21CbG9jay5oIiAv
PgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZnRsXEZUTFZhbHVlUmFuZ2UuaCIgLz4KLSAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGZ0bFxGVExXZWlnaHQuaCIgLz4KLSAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGZ0bFxGVExXZWlnaHRlZFRhcmdldC5oIiAvPgotICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5caGVhcFxCbG9ja0FsbG9jYXRvci5oIiAvPgotICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5caGVhcFxDb2RlQmxvY2tTZXQuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGhlYXBcQ29uc2VydmF0aXZlUm9vdHMuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGhlYXBcQ29waWVkQWxsb2NhdG9yLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxoZWFwXENvcGllZEJsb2NrLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxo
ZWFwXENvcGllZEJsb2NrSW5saW5lcy5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
aGVhcFxDb3BpZWRTcGFjZS5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caGVhcFxD
b3BpZWRTcGFjZUlubGluZXMuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBc
Q29weVRva2VuLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXENvcHlWaXNp
dG9yLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXENvcHlWaXNpdG9ySW5s
aW5lcy5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caGVhcFxDb3B5V29ya0xpc3Qu
aCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcQ29weVdyaXRlQmFycmllci5o
IiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caGVhcFxEZWZlckdDLmgiIC8+Ci0gICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXERlbGF5ZWRSZWxlYXNlU2NvcGUuaCIgLz4KLSAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcRWRlbkdDQWN0aXZpdHlDYWxsYmFjay5oIiAv
PgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caGVhcFxGdWxsR0NBY3Rpdml0eUNhbGxiYWNr
LmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXEdDQWN0aXZpdHlDYWxsYmFj
ay5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caGVhcFxHQ0xvZ2dpbmcuaCIgLz4K
LSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcR0NTZWdtZW50ZWRBcnJheS5oIiAvPgot
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caGVhcFxHQ1NlZ21lbnRlZEFycmF5SW5saW5lcy5o
IiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caGVhcFxHQ0Fzc2VydGlvbnMuaCIgLz4K
LSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcR0NUaHJlYWQuaCIgLz4KLSAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcR0NUaHJlYWRTaGFyZWREYXRhLmgiIC8+Ci0gICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXEhhbmRsZS5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5caGVhcFxIYW5kbGVCbG9jay5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5caGVhcFxIYW5kbGVCbG9ja0lubGluZXMuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXGhlYXBcSGFuZGxlU2V0LmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFw
XEhhbmRsZVN0YWNrLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXEhhbmRs
ZVR5cGVzLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXEhlYXAuaCIgLz4K
LSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcSGVhcEJsb2NrLmgiIC8+Ci0gICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXEhlYXBJbmxpbmVzLmgiIC8+Ci0gICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxoZWFwXEhlYXBPcGVyYXRpb24uaCIgLz4KLSAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXGhlYXBcSGVhcFJvb3RWaXNpdG9yLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxoZWFwXEhlYXBTdGF0aXN0aWNzLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxoZWFwXEhlYXBUaW1lci5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caGVh
cFxJbmNyZW1lbnRhbFN3ZWVwZXIuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhl
YXBcSklUU3R1YlJvdXRpbmVTZXQuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhl
YXBcTGlzdGFibGVIYW5kbGVyLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFw
XExvY2FsLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXExvY2FsU2NvcGUu
aCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcTWFjaGluZVN0YWNrTWFya2Vy
LmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXE1hcmtlZEFsbG9jYXRvci5o
IiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caGVhcFxNYXJrZWRCbG9jay5oIiAvPgot
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caGVhcFxNYXJrZWRCbG9ja1NldC5oIiAvPgotICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caGVhcFxNYXJrZWRTcGFjZS5oIiAvPgotICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5caGVhcFxNYXJrU3RhY2suaCIgLz4KLSAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXGhlYXBcUmVjdXJzaXZlQWxsb2NhdGlvblNjb3BlLmgiIC8+Ci0gICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxoZWFwXFJlZ2lvbi5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5caGVhcFxTbG90VmlzaXRvci5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
aGVhcFxTbG90VmlzaXRvcklubGluZXMuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGhlYXBcU3Ryb25nLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXFN0cm9u
Z0lubGluZXMuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcU3VwZXJSZWdp
b24uaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcVGlueUJsb29tRmlsdGVy
LmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXFVuY29uZGl0aW9uYWxGaW5h
bGl6ZXIuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcV2Vhay5oIiAvPgot
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caGVhcFxXZWFrQmxvY2suaCIgLz4KLSAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcV2Vha0hhbmRsZU93bmVyLmgiIC8+Ci0gICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxoZWFwXFdlYWtJbXBsLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxoZWFwXFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIuaCIgLz4KLSAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXGhlYXBcV2Vha1NldC5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5caGVhcFxXZWFrU2V0SW5saW5lcy5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
aGVhcFxXcml0ZUJhcnJpZXJCdWZmZXIuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGhlYXBcV3JpdGVCYXJyaWVyU3VwcG9ydC5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5caW5zcGVjdG9yXENvbnNvbGVNZXNzYWdlLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxpbnNwZWN0b3JcQ29udGVudFNlYXJjaFV0aWxpdGllcy5oIiAvPgotICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXElkZW50aWZpZXJzRmFjdG9yeS5oIiAvPgotICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXEluamVjdGVkU2NyaXB0LmgiIC8+Ci0gICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcSW5qZWN0ZWRTY3JpcHRCYXNlLmgiIC8+
Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcSW5qZWN0ZWRTY3JpcHRIb3N0
LmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcSW5qZWN0ZWRTY3Jp
cHRNYW5hZ2VyLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcSW5q
ZWN0ZWRTY3JpcHRNb2R1bGUuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGluc3Bl
Y3RvclxJbnNwZWN0b3JBZ2VudEJhc2UuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGluc3BlY3RvclxJbnNwZWN0b3JBZ2VudFJlZ2lzdHJ5LmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxpbnNwZWN0b3JcSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaCIgLz4KLSAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGluc3BlY3RvclxJbnNwZWN0b3JFbnZpcm9ubWVudC5o
IiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXEluc3BlY3RvckZyb250
ZW5kQ2hhbm5lbC5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXElu
c3BlY3RvclR5cGVCdWlsZGVyLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxpbnNw
ZWN0b3JcSW5zcGVjdG9yVmFsdWVzLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxp
bnNwZWN0b3JcSlNJbmplY3RlZFNjcmlwdEhvc3QuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGluc3BlY3RvclxKU0luamVjdGVkU2NyaXB0SG9zdFByb3RvdHlwZS5oIiAvPgotICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXEpTSmF2YVNjcmlwdENhbGxGcmFtZS5o
IiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXEpTSmF2YVNjcmlwdENh
bGxGcmFtZVByb3RvdHlwZS5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caW5zcGVj
dG9yXEphdmFTY3JpcHRDYWxsRnJhbWUuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGluc3BlY3RvclxTY3JpcHRBcmd1bWVudHMuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXGluc3BlY3RvclxTY3JpcHRCcmVha3BvaW50LmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxpbnNwZWN0b3JcU2NyaXB0Q2FsbEZyYW1lLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxpbnNwZWN0b3JcU2NyaXB0Q2FsbFN0YWNrLmgiIC8+Ci0gICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcU2NyaXB0Q2FsbFN0YWNrRmFjdG9yeS5oIiAvPgotICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXFNjcmlwdERlYnVnTGlzdGVuZXIuaCIg
Lz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGluc3BlY3RvclxTY3JpcHREZWJ1Z1NlcnZl
ci5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGFnZW50c1xJbnNw
ZWN0b3JBZ2VudC5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGFn
ZW50c1xJbnNwZWN0b3JDb25zb2xlQWdlbnQuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXGluc3BlY3RvclxhZ2VudHNcSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5oIiAvPgotICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGFnZW50c1xJbnNwZWN0b3JQcm9maWxlckFn
ZW50LmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcYWdlbnRzXElu
c3BlY3RvclJ1bnRpbWVBZ2VudC5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caW50
ZXJwcmV0ZXJcQWJzdHJhY3RQQy5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caW50
ZXJwcmV0ZXJcQ2FjaGVkQ2FsbC5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caW50
ZXJwcmV0ZXJcQ2FsbEZyYW1lLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxpbnRl
cnByZXRlclxDYWxsRnJhbWVJbmxpbmVzLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxpbnRlcnByZXRlclxDYWxsRnJhbWVDbG9zdXJlLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxpbnRlcnByZXRlclxJbnRlcnByZXRlci5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5caW50ZXJwcmV0ZXJcSlNTdGFjay5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5caW50ZXJwcmV0ZXJcSlNTdGFja0lubGluZXMuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXGludGVycHJldGVyXFByb3RvQ2FsbEZyYW1lLmgiIC8+Ci0gICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxpbnRlcnByZXRlclxSZWdpc3Rlci5oIiAvPgotICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5caW50ZXJwcmV0ZXJcU3RhY2tWaXNpdG9yLmgiIC8+Ci0gICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxpbnRlcnByZXRlclxWTUluc3BlY3Rvci5oIiAvPgotICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5caml0XEFjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lLmgiIC8+Ci0gICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcQXJpdHlDaGVja0ZhaWxSZXR1cm5UaHVua3MuaCIg
Lz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxBc3NlbWJseUhlbHBlcnMuaCIgLz4K
LSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxDQ2FsbEhlbHBlcnMuaCIgLz4KLSAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxDbG9zdXJlQ2FsbFN0dWJSb3V0aW5lLmgiIC8+Ci0g
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcQ29tcGFjdEpJVENvZGVNYXAuaCIgLz4KLSAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxFeGVjdXRhYmxlQWxsb2NhdG9yLmgiIC8+Ci0g
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcRlBSSW5mby5oIiAvPgotICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5caml0XEdDQXdhcmVKSVRTdHViUm91dGluZS5oIiAvPgotICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5caml0XEdQUkluZm8uaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGppdFxIb3N0Q2FsbFJldHVyblZhbHVlLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxqaXRcSklULmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcSklU
Q29kZS5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caml0XEpJVENvbXBpbGF0aW9u
RWZmb3J0LmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcSklURGlzYXNzZW1i
bGVyLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcSklURXhjZXB0aW9ucy5o
IiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caml0XEpJVElubGluZUNhY2hlR2VuZXJh
dG9yLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcSklUSW5saW5lcy5oIiAv
PgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caml0XEpJVE9wZXJhdGlvbnMuaCIgLz4KLSAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxKSVRTdHViUm91dGluZS5oIiAvPgotICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5caml0XEpJVFN0dWJzLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxqaXRcSklUU3R1YnNYODYuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXGppdFxKSVRTdHVic1g4NkNvbW1vbi5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5caml0XEpJVFN0dWJzWDg2XzY0LmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxq
aXRcSklUVGh1bmtzLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcSklUVG9E
RkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGppdFxKSVRXcml0ZUJhcnJpZXIuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXGppdFxKU0ludGVyZmFjZUpJVC5oIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
aml0XFJlZ2lzdGVyU2V0LmNwcCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxS
ZWcuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxSZWdpc3RlclByZXNlcnZh
dGlvbldyYXBwZXJHZW5lcmF0b3IuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGpp
dFxSZWdpc3RlclNldC5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caml0XFJlcGF0
Y2guaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxTY3JhdGNoUmVnaXN0ZXJB
bGxvY2F0b3IuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxTcGVjaWFsaXpl
ZFRodW5rSklULmgiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxqaXRcVGVtcFJlZ2lz
dGVyU2V0LmNwcCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxUZW1wUmVnaXN0
ZXJTZXQuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxUaHVua0dlbmVyYXRv
ci5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caml0XFRodW5rR2VuZXJhdG9ycy5o
IiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caml0XFVudXNlZFBvaW50ZXIuaCIgLz4K
LSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGxsaW50XExMSW50Q0xvb3AuaCIgLz4KLSAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGxsaW50XExMSW50Q29tbW9uLmgiIC8+Ci0gICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxsbGludFxMTEludERhdGEuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXGxsaW50XExMSW50RW50cnlwb2ludC5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cbGxpbnRcTExJbnRFeGNlcHRpb25zLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxsbGludFxMTEludE9mZmxpbmVBc21Db25maWcuaCIgLz4KLSAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXGxsaW50XExMSW50T3Bjb2RlLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxsbGludFxMTEludFNsb3dQYXRocy5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cbGxpbnRcTExJbnRUaHVua3MuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGxsaW50XExvd0xldmVsSW50ZXJwcmV0ZXIuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXGxsdm1cSW5pdGlhbGl6ZUxMVk0uaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGxsdm1cTExWTUFQSS5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cbGx2bVxMTFZN
QVBJRnVuY3Rpb25zLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxsbHZtXExMVk1I
ZWFkZXJzLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwYXJzZXJcQVNUQnVpbGRl
ci5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGFyc2VyXExleGVyLmgiIC8+Ci0g
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwYXJzZXJcTm9kZUNvbnN0cnVjdG9ycy5oIiAvPgot
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGFyc2VyXE5vZGVJbmZvLmgiIC8+Ci0gICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxwYXJzZXJcTm9kZXMuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXHBhcnNlclxQYXJzZXIuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XHBhcnNlclxQYXJzZXJBcmVuYS5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGFy
c2VyXFBhcnNlck1vZGVzLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwYXJzZXJc
UGFyc2VyVG9rZW5zLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwYXJzZXJcUmVz
dWx0VHlwZS5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGFyc2VyXFNvdXJjZUNv
ZGUuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBhcnNlclxTb3VyY2VQcm92aWRl
ci5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGFyc2VyXFNvdXJjZVByb3ZpZGVy
Q2FjaGUuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBhcnNlclxTb3VyY2VQcm92
aWRlckNhY2hlSXRlbS5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGFyc2VyXFN5
bnRheENoZWNrZXIuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHByb2ZpbGVyXENh
bGxJZGVudGlmaWVyLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwcm9maWxlclxM
ZWdhY3lQcm9maWxlci5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccHJvZmlsZXJc
UHJvZmlsZS5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccHJvZmlsZXJcUHJvZmls
ZUdlbmVyYXRvci5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccHJvZmlsZXJcUHJv
ZmlsZU5vZGUuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHByb2ZpbGVyXFByb2Zp
bGVyQnl0ZWNvZGUuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHByb2ZpbGVyXFBy
b2ZpbGVyQnl0ZWNvZGVzLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwcm9maWxl
clxQcm9maWxlckJ5dGVjb2RlU2VxdWVuY2UuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXHByb2ZpbGVyXFByb2ZpbGVyQ29tcGlsYXRpb24uaCIgLz4KLSAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXHByb2ZpbGVyXFByb2ZpbGVyQ29tcGlsYXRpb25LaW5kLmgiIC8+Ci0gICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxwcm9maWxlclxQcm9maWxlckNvbXBpbGVkQnl0ZWNvZGUuaCIg
Lz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHByb2ZpbGVyXFByb2ZpbGVyRGF0YWJhc2Uu
aCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHByb2ZpbGVyXFByb2ZpbGVyRXhlY3V0
aW9uQ291bnRlci5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccHJvZmlsZXJcUHJv
ZmlsZXJKZXR0aXNvblJlYXNvbi5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccHJv
ZmlsZXJcUHJvZmlsZXJPcmlnaW4uaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBy
b2ZpbGVyXFByb2ZpbGVyT3JpZ2luU3RhY2suaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXHByb2ZpbGVyXFByb2ZpbGVyT1NSRXhpdC5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5ccHJvZmlsZXJcUHJvZmlsZXJPU1JFeGl0U2l0ZS5oIiAvPgotICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5ccHJvZmlsZXJcUHJvZmlsZXJQcm9maWxlZEJ5dGVjb2Rlcy5oIiAvPgotICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxBcmdMaXN0LmgiIC8+Ci0gICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEFyZ3VtZW50cy5oIiAvPgotICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5ccnVudGltZVxBcnJheUJ1ZmZlci5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5ccnVudGltZVxBcnJheUJ1ZmZlck5ldXRlcmluZ1dhdGNocG9pbnQuaCIgLz4KLSAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcQXJyYXlCdWZmZXJWaWV3LmgiIC8+Ci0g
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEFycmF5Q29uc3RydWN0b3IuaCIgLz4K
LSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcQXJyYXlDb252ZW50aW9ucy5oIiAv
PgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxBcnJheUl0ZXJhdG9yQ29uc3Ry
dWN0b3IuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcQXJyYXlJdGVy
YXRvclByb3RvdHlwZS5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxB
cnJheVByb3RvdHlwZS5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxB
cnJheVN0b3JhZ2UuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcQmF0
Y2hlZFRyYW5zaXRpb25PcHRpbWl6ZXIuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XHJ1bnRpbWVcQmlnSW50ZWdlci5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVu
dGltZVxCb29sZWFuQ29uc3RydWN0b3IuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XHJ1bnRpbWVcQm9vbGVhbk9iamVjdC5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
cnVudGltZVxCb29sZWFuUHJvdG90eXBlLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxydW50aW1lXEJ1dHRlcmZseS5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVu
dGltZVxCdXR0ZXJmbHlJbmxpbmVzLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxy
dW50aW1lXENhbGxEYXRhLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1l
XENsYXNzSW5mby5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxDb2Rl
Q2FjaGUuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcQ29kZVNwZWNp
YWxpemF0aW9uS2luZC5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxD
b21tb25JZGVudGlmaWVycy5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGlt
ZVxDb21tb25TbG93UGF0aHMuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRp
bWVcQ29tbW9uU2xvd1BhdGhzRXhjZXB0aW9ucy5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5ccnVudGltZVxDb21waWxhdGlvblJlc3VsdC5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5ccnVudGltZVxDb21wbGV0aW9uLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxydW50aW1lXENvbnNvbGVDbGllbnQuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXHJ1bnRpbWVcQ29uc29sZVByb3RvdHlwZS5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5ccnVudGltZVxDb25zb2xlVHlwZXMuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXHJ1bnRpbWVcQ29uc3RhbnRNb2RlLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxydW50aW1lXENvbnN0cnVjdERhdGEuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XHJ1bnRpbWVcQ3VzdG9tR2V0dGVyU2V0dGVyLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxydW50aW1lXERhdGFWaWV3LmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxy
dW50aW1lXERhdGVDb25zdHJ1Y3Rvci5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
cnVudGltZVxEYXRlQ29udmVyc2lvbi5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
cnVudGltZVxEYXRlSW5zdGFuY2UuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1
bnRpbWVcRGF0ZUluc3RhbmNlQ2FjaGUuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XHJ1bnRpbWVcRGF0ZVByb3RvdHlwZS5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
cnVudGltZVxEdW1wQ29udGV4dC5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVu
dGltZVxFbnVtZXJhdGlvbk1vZGUuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1
bnRpbWVcRXJyb3IuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRXJy
b3JDb25zdHJ1Y3Rvci5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxF
cnJvckhhbmRsaW5nU2NvcGUuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRp
bWVcRXJyb3JJbnN0YW5jZS5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGlt
ZVxFcnJvclByb3RvdHlwZS5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGlt
ZVxFeGNlcHRpb25GdXp6LmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1l
XEV4Y2VwdGlvbkhlbHBlcnMuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRp
bWVcRXhlY3V0YWJsZS5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxG
bG9hdDMyQXJyYXkuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRmxv
YXQ2NEFycmF5LmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEZ1bmN0
aW9uQ29uc3RydWN0b3IuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVc
RnVuY3Rpb25FeGVjdXRhYmxlRHVtcC5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
cnVudGltZVxGdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXHJ1bnRpbWVcRnVuY3Rpb25Qcm90b3R5cGUuaCIgLz4KLSAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXHJ1bnRpbWVcR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgiIC8+Ci0gICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEdlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMu
aCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcR2V0dGVyU2V0dGVyLmgi
IC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEhpZ2hGaWRlbGl0eUxvZy5o
IiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxIaWdoRmlkZWxpdHlUeXBl
UHJvZmlsZXIuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSWRlbnRp
Zmllci5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxJbmRleGluZ0hl
YWRlci5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxJbmRleGluZ0hl
YWRlcklubGluZXMuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSW5k
ZXhpbmdUeXBlLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEluaXRp
YWxpemVUaHJlYWRpbmcuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVc
SW50MTZBcnJheS5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxJbnQz
MkFycmF5LmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEludDhBcnJh
eS5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxJbnRlbmRlZFN0cnVj
dHVyZUNoYWluLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEludGVy
bmFsRnVuY3Rpb24uaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSW50
cmluc2ljLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTQVBJVmFs
dWVXcmFwcGVyLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTQWN0
aXZhdGlvbi5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU0FyZ3Vt
ZW50c0l0ZXJhdG9yLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpT
QXJyYXkuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNBcnJheUJ1
ZmZlci5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU0FycmF5QnVm
ZmVyQ29uc3RydWN0b3IuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVc
SlNBcnJheUJ1ZmZlclByb3RvdHlwZS5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
cnVudGltZVxKU0FycmF5QnVmZmVyVmlldy5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5ccnVudGltZVxKU0FycmF5QnVmZmVyVmlld0lubGluZXMuaCIgLz4KLSAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNBcnJheUl0ZXJhdG9yLmgiIC8+Ci0gICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTQm91bmRGdW5jdGlvbi5oIiAvPgotICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU0NJbmxpbmVzLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxydW50aW1lXEpTQ0pTVmFsdWUuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXHJ1bnRpbWVcSlNDSlNWYWx1ZUlubGluZXMuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXHJ1bnRpbWVcSlNDZWxsLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxydW50aW1lXEpTQ29uc29sZS5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVu
dGltZVxKU0RhdGFWaWV3LmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1l
XEpTRGF0YVZpZXdQcm90b3R5cGUuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1
bnRpbWVcSlNEYXRlTWF0aC5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGlt
ZVxKU0Rlc3RydWN0aWJsZU9iamVjdC5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
cnVudGltZVxKU0V4cG9ydE1hY3Jvcy5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
cnVudGltZVxKU0Zsb2F0MzJBcnJheS5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
cnVudGltZVxKU0Zsb2F0NjRBcnJheS5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
cnVudGltZVxKU0Z1bmN0aW9uLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50
aW1lXEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxydW50aW1lXEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IuaCIgLz4KLSAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNHZW5lcmljVHlwZWRBcnJheVZpZXdD
b25zdHJ1Y3RvcklubGluZXMuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRp
bWVcSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxydW50aW1lXEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLmgiIC8+
Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTR2VuZXJpY1R5cGVkQXJyYXlW
aWV3UHJvdG90eXBlSW5saW5lcy5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVu
dGltZVxKU0dsb2JhbE9iamVjdC5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVu
dGltZVxKU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5ccnVudGltZVxKU0ludDE2QXJyYXkuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXHJ1bnRpbWVcSlNJbnQzMkFycmF5LmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxydW50aW1lXEpTSW50OEFycmF5LmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxy
dW50aW1lXEpTTG9jay5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxK
U01hcC5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU01hcEl0ZXJh
dG9yLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTTmFtZVNjb3Bl
LmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTTm90QW5PYmplY3Qu
aCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNPTk9iamVjdC5oIiAv
PgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU09iamVjdC5oIiAvPgotICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU1Byb21pc2UuaCIgLz4KLSAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNQcm9taXNlQ29uc3RydWN0b3IuaCIgLz4KLSAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNQcm9taXNlRGVmZXJyZWQuaCIgLz4K
LSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNQcm9taXNlRnVuY3Rpb25zLmgi
IC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTUHJvbWlzZVJlYWN0aW9u
LmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTUHJvbWlzZVByb3Rv
dHlwZS5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3IuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVc
SlNQcm94eS5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU1Njb3Bl
LmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTU2VnbWVudGVkVmFy
aWFibGVPYmplY3QuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNT
ZXQuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNTZXRJdGVyYXRv
ci5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU1N0cmluZy5oIiAv
PgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU1N0cmluZ0J1aWxkZXIuaCIg
Lz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNTdHJpbmdKb2luZXIuaCIg
Lz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNTeW1ib2xUYWJsZU9iamVj
dC5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU1R5cGUuaCIgLz4K
LSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNUeXBlSW5mby5oIiAvPgotICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnMu
aCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNUeXBlZEFycmF5UHJv
dG90eXBlcy5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU1R5cGVk
QXJyYXlzLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTVWludDE2
QXJyYXkuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNVaW50MzJB
cnJheS5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU1VpbnQ4QXJy
YXkuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNVaW50OENsYW1w
ZWRBcnJheS5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU1Zhcmlh
YmxlT2JqZWN0LmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTV2Vh
a01hcC5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU1dpdGhTY29w
ZS5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU1dyYXBwZXJPYmpl
Y3QuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcTGl0ZXJhbFBhcnNl
ci5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxMb29rdXAuaCIgLz4K
LSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcTWFwQ29uc3RydWN0b3IuaCIgLz4K
LSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcTWFwRGF0YS5oIiAvPgotICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxNYXBJdGVyYXRvckNvbnN0cnVjdG9yLmgiIC8+
Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXE1hcEl0ZXJhdG9yUHJvdG90eXBl
LmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXE1hcFByb3RvdHlwZS5o
IiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxNYXRjaFJlc3VsdC5oIiAv
PgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxNYXRoT2JqZWN0LmgiIC8+Ci0g
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXE1lbW9yeVN0YXRpc3RpY3MuaCIgLz4K
LSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcTWljcm90YXNrLmgiIC8+Ci0gICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXE5hbWVDb25zdHJ1Y3Rvci5oIiAvPgotICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxOYW1lSW5zdGFuY2UuaCIgLz4KLSAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcTmFtZVByb3RvdHlwZS5oIiAvPgotICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxOYXRpdmVFcnJvckNvbnN0cnVjdG9yLmgiIC8+
Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXE5hdGl2ZUVycm9yUHJvdG90eXBl
LmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXE51bWJlckNvbnN0cnVj
dG9yLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXE51bWJlck9iamVj
dC5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxOdW1iZXJQcm90b3R5
cGUuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcTnVtZXJpY1N0cmlu
Z3MuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcT2JqZWN0Q29uc3Ry
dWN0b3IuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcT2JqZWN0UHJv
dG90eXBlLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXE9wZXJhdGlv
bnMuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcT3B0aW9ucy5oIiAv
PgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxQcml2YXRlTmFtZS5oIiAvPgot
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxQcm9wZXJ0eURlc2NyaXB0b3IuaCIg
Lz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcUHJvcGVydHlNYXBIYXNoVGFi
bGUuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcUHJvcGVydHlOYW1l
LmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXFByb3BlcnR5TmFtZUFy
cmF5LmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXFByb3BlcnR5T2Zm
c2V0LmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXFByb3BlcnR5U2xv
dC5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxQcm9wZXJ0eVN0b3Jh
Z2UuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcUHJvdGVjdC5oIiAv
PgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxQcm90b3R5cGVNYXAuaCIgLz4K
LSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcUHV0RGlyZWN0SW5kZXhNb2RlLmgi
IC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXFB1dFByb3BlcnR5U2xvdC5o
IiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxSZWdFeHAuaCIgLz4KLSAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcUmVnRXhwQ2FjaGUuaCIgLz4KLSAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcUmVnRXhwQ2FjaGVkUmVzdWx0LmgiIC8+Ci0g
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXFJlZ0V4cENvbnN0cnVjdG9yLmgiIC8+
Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXFJlZ0V4cEtleS5oIiAvPgotICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxSZWdFeHBNYXRjaGVzQXJyYXkuaCIgLz4K
LSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcUmVnRXhwT2JqZWN0LmgiIC8+Ci0g
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXFJlZ0V4cFByb3RvdHlwZS5oIiAvPgot
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxSZWplY3QuaCIgLz4KLSAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcU2FtcGxpbmdDb3VudGVyLmgiIC8+Ci0gICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXFNldENvbnN0cnVjdG9yLmgiIC8+Ci0gICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXFNldEl0ZXJhdG9yQ29uc3RydWN0b3IuaCIgLz4K
LSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcU2V0SXRlcmF0b3JQcm90b3R5cGUu
aCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcU2V0UHJvdG90eXBlLmgi
IC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXFNpbXBsZVR5cGVkQXJyYXlD
b250cm9sbGVyLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXFNtYWxs
U3RyaW5ncy5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxTcGFyc2VB
cnJheVZhbHVlTWFwLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXFN0
YWNrQWxpZ25tZW50LmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXFN0
cmljdEV2YWxBY3RpdmF0aW9uLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50
aW1lXFN0cmluZ0NvbnN0cnVjdG9yLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxy
dW50aW1lXFN0cmluZ09iamVjdC5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVu
dGltZVxTdHJpbmdQcm90b3R5cGUuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1
bnRpbWVcU3RyaW5nUmVjdXJzaW9uQ2hlY2tlci5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5ccnVudGltZVxTdHJ1Y3R1cmUuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XHJ1bnRpbWVcU3RydWN0dXJlQ2hhaW4uaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XHJ1bnRpbWVcU3RydWN0dXJlSURCbG9iLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxydW50aW1lXFN0cnVjdHVyZUlEVGFibGUuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXHJ1bnRpbWVcU3RydWN0dXJlUmFyZURhdGEuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXHJ1bnRpbWVcU3RydWN0dXJlUmFyZURhdGFJbmxpbmVzLmgiIC8+Ci0gICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXFN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZS5oIiAvPgot
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxTeW1ib2xUYWJsZS5oIiAvPgotICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxUZXN0UnVubmVyVXRpbHMuaCIgLz4KLSAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcVHJhY2luZy5oIiAvPgotICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxUb05hdGl2ZUZyb21WYWx1ZS5oIiAvPgotICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxUeXBlZEFycmF5QWRhcHRvcnMuaCIgLz4KLSAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcVHlwZWRBcnJheUNvbnRyb2xsZXIuaCIg
Lz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcVHlwZWRBcnJheUlubGluZXMu
aCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcVHlwZWRBcnJheVR5cGUu
aCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcVHlwZUxvY2F0aW9uQ2Fj
aGUuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcVHlwZVNldC5oIiAv
PgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxUeXBlZEFycmF5cy5oIiAvPgot
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxVaW50MTZBcnJheS5oIiAvPgotICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxVaW50MTZXaXRoRnJhY3Rpb24uaCIgLz4K
LSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcVWludDMyQXJyYXkuaCIgLz4KLSAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcVWludDhBcnJheS5oIiAvPgotICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxWTS5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5ccnVudGltZVxWTUVudHJ5U2NvcGUuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXHJ1bnRpbWVcV2F0Y2hkb2cuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XHJ1bnRpbWVcV2Vha0dDTWFwLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50
aW1lXFdlYWtNYXBDb25zdHJ1Y3Rvci5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
cnVudGltZVxXZWFrTWFwRGF0YS5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVu
dGltZVxXZWFrTWFwUHJvdG90eXBlLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxy
dW50aW1lXFdlYWtSYW5kb20uaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRp
bWVcV3JpdGVCYXJyaWVyLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1l
XFdyaXRlQmFycmllcklubGluZXMuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHRv
b2xzXENvZGVQcm9maWxlLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx0b29sc1xD
b2RlUHJvZmlsaW5nLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx0b29sc1xQcm9m
aWxlVHJlZU5vZGUuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHRvb2xzXFRpZXJl
ZE1NYXBBcnJheS5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ceWFyclxSZWd1bGFy
RXhwcmVzc2lvbi5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ceWFyclxZYXJyLmgi
IC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx5YXJyXFlhcnJDYW5vbmljYWxpemVVQ1My
LmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx5YXJyXFlhcnJJbnRlcnByZXRlci5o
IiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ceWFyclxZYXJySklULmgiIC8+Ci0gICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlx5YXJyXFlhcnJQYXJzZXIuaCIgLz4KLSAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXHlhcnJcWWFyclBhdHRlcm4uaCIgLz4KLSAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXHlhcnJcWWFyclN5bnRheENoZWNrZXIuaCIgLz4KLSAgPC9JdGVtR3JvdXA+Ci0g
IDxJdGVtR3JvdXA+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcQnl0ZWNvZGVMaXN0
Lmpzb24iIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iSmF2YVNjcmlwdENvcmVQb3N0QnVpbGQuY21k
Ij4KLSAgICAgIDxGaWxlVHlwZT5Eb2N1bWVudDwvRmlsZVR5cGU+Ci0gICAgPC9Ob25lPgotICAg
IDxOb25lIEluY2x1ZGU9IkphdmFTY3JpcHRDb3JlUHJlQnVpbGQuY21kIj4KLSAgICAgIDxGaWxl
VHlwZT5Eb2N1bWVudDwvRmlsZVR5cGU+Ci0gICAgPC9Ob25lPgotICAgIDxOb25lIEluY2x1ZGU9
IkphdmFTY3JpcHRDb3JlUHJlTGluay5jbWQiPgotICAgICAgPEZpbGVUeXBlPkRvY3VtZW50PC9G
aWxlVHlwZT4KLSAgICA8L05vbmU+Ci0gIDwvSXRlbUdyb3VwPgotICA8SXRlbUdyb3VwPgotICAg
IDxNQVNNIEluY2x1ZGU9IiQoQ29uZmlndXJhdGlvbkJ1aWxkRGlyKVxvYmokKFBsYXRmb3JtQXJj
aGl0ZWN0dXJlKVwkKFByb2plY3ROYW1lKVxEZXJpdmVkU291cmNlc1xMb3dMZXZlbEludGVycHJl
dGVyV2luLmFzbSI+Ci0gICAgICA8VXNlU2FmZUV4Y2VwdGlvbkhhbmRsZXJzIENvbmRpdGlvbj0i
JyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPnRydWU8L1Vz
ZVNhZmVFeGNlcHRpb25IYW5kbGVycz4KLSAgICAgIDxVc2VTYWZlRXhjZXB0aW9uSGFuZGxlcnMg
Q29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQcm9kdWN0aW9ufFdp
bjMyJyI+dHJ1ZTwvVXNlU2FmZUV4Y2VwdGlvbkhhbmRsZXJzPgotICAgICAgPFVzZVNhZmVFeGNl
cHRpb25IYW5kbGVycyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09
J0RlYnVnfFdpbjMyJyI+dHJ1ZTwvVXNlU2FmZUV4Y2VwdGlvbkhhbmRsZXJzPgotICAgICAgPFVz
ZVNhZmVFeGNlcHRpb25IYW5kbGVycyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxh
dGZvcm0pJz09J0RlYnVnU3VmZml4fFdpbjMyJyI+dHJ1ZTwvVXNlU2FmZUV4Y2VwdGlvbkhhbmRs
ZXJzPgotICAgICAgPFVzZVNhZmVFeGNlcHRpb25IYW5kbGVycyBDb25kaXRpb249IickKENvbmZp
Z3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnX1dpbkNhaXJvfFdpbjMyJyI+dHJ1ZTwvVXNl
U2FmZUV4Y2VwdGlvbkhhbmRsZXJzPgotICAgICAgPFVzZVNhZmVFeGNlcHRpb25IYW5kbGVycyBD
b25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VfV2luQ2Fp
cm98V2luMzInIj50cnVlPC9Vc2VTYWZlRXhjZXB0aW9uSGFuZGxlcnM+Ci0gICAgPC9NQVNNPgot
ICAgIDxNQVNNIEluY2x1ZGU9Ii4uXGppdFxKSVRTdHVic01TVkM2NC5hc20iPgotICAgICAgPEV4
Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSkn
PT0nRGVidWdfV2luQ2Fpcm98V2luMzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KLSAgICAg
IDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZv
cm0pJz09J0RlYnVnfFdpbjMyJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+Ci0gICAgICA8RXhj
bHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9
PSdEZWJ1Z1N1ZmZpeHxXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgotICAgICAgPEV4
Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSkn
PT0nUmVsZWFzZV9XaW5DYWlyb3xXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgotICAg
ICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0
Zm9ybSknPT0nUHJvZHVjdGlvbnxXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgotICAg
ICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0
Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgotICAgIDwv
TUFTTT4KLSAgPC9JdGVtR3JvdXA+Ci0gIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRo
KVxNaWNyb3NvZnQuQ3BwLnRhcmdldHMiIC8+Ci0gIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5z
aW9uVGFyZ2V0cyI+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXEJ1aWxk
Q3VzdG9taXphdGlvbnNcbWFzbS50YXJnZXRzIiAvPgotICA8L0ltcG9ydEdyb3VwPgor77u/PD94
bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCis8UHJvamVjdCBEZWZhdWx0VGFy
Z2V0cz0iQnVpbGQiIFRvb2xzVmVyc2lvbj0iMTIuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1p
Y3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+DQorICA8SXRlbUdyb3VwIExhYmVs
PSJQcm9qZWN0Q29uZmlndXJhdGlvbnMiPg0KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5j
bHVkZT0iRGVidWdTdWZmaXh8V2luMzIiPg0KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnU3Vm
Zml4PC9Db25maWd1cmF0aW9uPg0KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+DQor
ICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+DQorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJ
bmNsdWRlPSJEZWJ1Z1N1ZmZpeHx4NjQiPg0KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnU3Vm
Zml4PC9Db25maWd1cmF0aW9uPg0KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPg0KKyAg
ICA8L1Byb2plY3RDb25maWd1cmF0aW9uPg0KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5j
bHVkZT0iRGVidWdfV2luQ2Fpcm98V2luMzIiPg0KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVn
X1dpbkNhaXJvPC9Db25maWd1cmF0aW9uPg0KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZv
cm0+DQorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+DQorICAgIDxQcm9qZWN0Q29uZmlndXJh
dGlvbiBJbmNsdWRlPSJEZWJ1Z19XaW5DYWlyb3x4NjQiPg0KKyAgICAgIDxDb25maWd1cmF0aW9u
PkRlYnVnX1dpbkNhaXJvPC9Db25maWd1cmF0aW9uPg0KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1Bs
YXRmb3JtPg0KKyAgICA8L1Byb2plY3RDb25maWd1cmF0aW9uPg0KKyAgICA8UHJvamVjdENvbmZp
Z3VyYXRpb24gSW5jbHVkZT0iRGVidWd8V2luMzIiPg0KKyAgICAgIDxDb25maWd1cmF0aW9uPkRl
YnVnPC9Db25maWd1cmF0aW9uPg0KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+DQor
ICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+DQorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJ
bmNsdWRlPSJEZWJ1Z3x4NjQiPg0KKyAgICAgIDxDb25maWd1cmF0aW9uPkRlYnVnPC9Db25maWd1
cmF0aW9uPg0KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPg0KKyAgICA8L1Byb2plY3RD
b25maWd1cmF0aW9uPg0KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUHJvZHVj
dGlvbnxXaW4zMiI+DQorICAgICAgPENvbmZpZ3VyYXRpb24+UHJvZHVjdGlvbjwvQ29uZmlndXJh
dGlvbj4NCisgICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPg0KKyAgICA8L1Byb2plY3RD
b25maWd1cmF0aW9uPg0KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUHJvZHVj
dGlvbnx4NjQiPg0KKyAgICAgIDxDb25maWd1cmF0aW9uPlByb2R1Y3Rpb248L0NvbmZpZ3VyYXRp
b24+DQorICAgICAgPFBsYXRmb3JtPng2NDwvUGxhdGZvcm0+DQorICAgIDwvUHJvamVjdENvbmZp
Z3VyYXRpb24+DQorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlX1dp
bkNhaXJvfFdpbjMyIj4NCisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlX1dpbkNhaXJvPC9D
b25maWd1cmF0aW9uPg0KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+DQorICAgIDwv
UHJvamVjdENvbmZpZ3VyYXRpb24+DQorICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRl
PSJSZWxlYXNlX1dpbkNhaXJvfHg2NCI+DQorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZV9X
aW5DYWlybzwvQ29uZmlndXJhdGlvbj4NCisgICAgICA8UGxhdGZvcm0+eDY0PC9QbGF0Zm9ybT4N
CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4NCisgICAgPFByb2plY3RDb25maWd1cmF0aW9u
IEluY2x1ZGU9IlJlbGVhc2V8V2luMzIiPg0KKyAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8
L0NvbmZpZ3VyYXRpb24+DQorICAgICAgPFBsYXRmb3JtPldpbjMyPC9QbGF0Zm9ybT4NCisgICAg
PC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4NCisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1
ZGU9IlJlbGVhc2V8eDY0Ij4NCisgICAgICA8Q29uZmlndXJhdGlvbj5SZWxlYXNlPC9Db25maWd1
cmF0aW9uPg0KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPg0KKyAgICA8L1Byb2plY3RD
b25maWd1cmF0aW9uPg0KKyAgPC9JdGVtR3JvdXA+DQorICA8UHJvcGVydHlHcm91cCBMYWJlbD0i
R2xvYmFscyI+DQorICAgIDxQcm9qZWN0R3VpZD57MjI0MTNENDEtM0ExOC00MkI3LTkyQTgtQ0VE
QzZDRTg2OTIwfTwvUHJvamVjdEd1aWQ+DQorICAgIDxLZXl3b3JkPldpbjMyUHJvajwvS2V5d29y
ZD4NCisgICAgPFJvb3ROYW1lc3BhY2U+SmF2YVNjcmlwdENvcmUyPC9Sb290TmFtZXNwYWNlPg0K
KyAgICA8UHJvamVjdE5hbWU+SmF2YVNjcmlwdENvcmU8L1Byb2plY3ROYW1lPg0KKyAgPC9Qcm9w
ZXJ0eUdyb3VwPg0KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29m
dC5DcHAuRGVmYXVsdC5wcm9wcyIgLz4NCisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQo
Q29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiBMYWJlbD0iQ29uZmln
dXJhdGlvbiI+DQorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz50cnVlPC9Vc2VEZWJ1Z0xpYnJhcmll
cz4NCisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+DQorICAgIDxDb25m
aWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+DQorICAgIDxQ
bGF0Zm9ybVRvb2xzZXQ+djEyMF94cDwvUGxhdGZvcm1Ub29sc2V0Pg0KKyAgPC9Qcm9wZXJ0eUdy
b3VwPg0KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBs
YXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+DQorICAgIDxVc2VE
ZWJ1Z0xpYnJhcmllcz50cnVlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4NCisgICAgPENoYXJhY3RlclNl
dD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+DQorICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWlj
TGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+DQorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+djEyMDwv
UGxhdGZvcm1Ub29sc2V0Pg0KKyAgPC9Qcm9wZXJ0eUdyb3VwPg0KKyAgPFByb3BlcnR5R3JvdXAg
Q29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z19XaW5DYWly
b3xXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4NCisgICAgPFVzZURlYnVnTGlicmFyaWVz
PnRydWU8L1VzZURlYnVnTGlicmFyaWVzPg0KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0No
YXJhY3RlclNldD4NCisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25m
aWd1cmF0aW9uVHlwZT4NCisgICAgPFBsYXRmb3JtVG9vbHNldD52MTIwX3hwPC9QbGF0Zm9ybVRv
b2xzZXQ+DQorICA8L1Byb3BlcnR5R3JvdXA+DQorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249
IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnX1dpbkNhaXJvfHg2NCciIExh
YmVsPSJDb25maWd1cmF0aW9uIj4NCisgICAgPFVzZURlYnVnTGlicmFyaWVzPnRydWU8L1VzZURl
YnVnTGlicmFyaWVzPg0KKyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4N
CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlw
ZT4NCisgICAgPFBsYXRmb3JtVG9vbHNldD52MTIwX3hwPC9QbGF0Zm9ybVRvb2xzZXQ+DQorICA8
L1Byb3BlcnR5R3JvdXA+DQorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3Vy
YXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnU3VmZml4fFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3Vy
YXRpb24iPg0KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+dHJ1ZTwvVXNlRGVidWdMaWJyYXJpZXM+
DQorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0Pg0KKyAgICA8Q29uZmln
dXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPg0KKyAgICA8UGxh
dGZvcm1Ub29sc2V0PnYxMjBfeHA8L1BsYXRmb3JtVG9vbHNldD4NCisgIDwvUHJvcGVydHlHcm91
cD4NCisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0
Zm9ybSknPT0nRGVidWdTdWZmaXh8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPg0KKyAgICA8
VXNlRGVidWdMaWJyYXJpZXM+dHJ1ZTwvVXNlRGVidWdMaWJyYXJpZXM+DQorICAgIDxDaGFyYWN0
ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0Pg0KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+RHlu
YW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPg0KKyAgICA8UGxhdGZvcm1Ub29sc2V0PnYx
MjA8L1BsYXRmb3JtVG9vbHNldD4NCisgIDwvUHJvcGVydHlHcm91cD4NCisgIDxQcm9wZXJ0eUdy
b3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxX
aW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4NCisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5
bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4NCisgICAgPFVzZURlYnVnTGlicmFyaWVz
PmZhbHNlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4NCisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9D
aGFyYWN0ZXJTZXQ+DQorICAgIDxQbGF0Zm9ybVRvb2xzZXQ+djEyMF94cDwvUGxhdGZvcm1Ub29s
c2V0Pg0KKyAgPC9Qcm9wZXJ0eUdyb3VwPg0KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSIn
JChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJDb25m
aWd1cmF0aW9uIj4NCisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25m
aWd1cmF0aW9uVHlwZT4NCisgICAgPFVzZURlYnVnTGlicmFyaWVzPmZhbHNlPC9Vc2VEZWJ1Z0xp
YnJhcmllcz4NCisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+DQorICAg
IDxQbGF0Zm9ybVRvb2xzZXQ+djEyMDwvUGxhdGZvcm1Ub29sc2V0Pg0KKyAgPC9Qcm9wZXJ0eUdy
b3VwPg0KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBs
YXRmb3JtKSc9PSdSZWxlYXNlX1dpbkNhaXJvfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24i
Pg0KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25U
eXBlPg0KKyAgICA8VXNlRGVidWdMaWJyYXJpZXM+ZmFsc2U8L1VzZURlYnVnTGlicmFyaWVzPg0K
KyAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4NCisgICAgPFBsYXRmb3Jt
VG9vbHNldD52MTIwX3hwPC9QbGF0Zm9ybVRvb2xzZXQ+DQorICA8L1Byb3BlcnR5R3JvdXA+DQor
ICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0p
Jz09J1JlbGVhc2VfV2luQ2Fpcm98eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPg0KKyAgICA8
Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPg0KKyAg
ICA8VXNlRGVidWdMaWJyYXJpZXM+ZmFsc2U8L1VzZURlYnVnTGlicmFyaWVzPg0KKyAgICA8Q2hh
cmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4NCisgICAgPFBsYXRmb3JtVG9vbHNldD52
MTIwX3hwPC9QbGF0Zm9ybVRvb2xzZXQ+DQorICA8L1Byb3BlcnR5R3JvdXA+DQorICA8UHJvcGVy
dHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1Byb2R1
Y3Rpb258V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+DQorICAgIDxDb25maWd1cmF0aW9u
VHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+DQorICAgIDxVc2VEZWJ1Z0xp
YnJhcmllcz5mYWxzZTwvVXNlRGVidWdMaWJyYXJpZXM+DQorICAgIDxDaGFyYWN0ZXJTZXQ+VW5p
Y29kZTwvQ2hhcmFjdGVyU2V0Pg0KKyAgICA8UGxhdGZvcm1Ub29sc2V0PnYxMjBfeHA8L1BsYXRm
b3JtVG9vbHNldD4NCisgIDwvUHJvcGVydHlHcm91cD4NCisgIDxQcm9wZXJ0eUdyb3VwIENvbmRp
dGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUHJvZHVjdGlvbnx4NjQnIiBM
YWJlbD0iQ29uZmlndXJhdGlvbiI+DQorICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGli
cmFyeTwvQ29uZmlndXJhdGlvblR5cGU+DQorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz5mYWxzZTwv
VXNlRGVidWdMaWJyYXJpZXM+DQorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVy
U2V0Pg0KKyAgICA8UGxhdGZvcm1Ub29sc2V0PnYxMjA8L1BsYXRmb3JtVG9vbHNldD4NCisgIDwv
UHJvcGVydHlHcm91cD4NCisgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNy
b3NvZnQuQ3BwLnByb3BzIiAvPg0KKyAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25TZXR0
aW5ncyI+DQorICAgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxCdWlsZEN1c3Rv
bWl6YXRpb25zXG1hc20ucHJvcHMiIC8+DQorICA8L0ltcG9ydEdyb3VwPg0KKyAgPEltcG9ydEdy
b3VwIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwk
KFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPg0KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNl
clJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9u
PSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5w
cm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+DQorICAgIDxJbXBvcnQgUHJv
amVjdD0iSmF2YVNjcmlwdENvcmVEZWJ1Zy5wcm9wcyIgLz4NCisgIDwvSW1wb3J0R3JvdXA+DQor
ICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9
PSdEZWJ1Z3x4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPg0KKyAgICA8SW1wb3J0IFByb2pl
Y3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIg
Q29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9y
bSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+DQorICAgIDxJ
bXBvcnQgUHJvamVjdD0iSmF2YVNjcmlwdENvcmVEZWJ1Zy5wcm9wcyIgLz4NCisgIDwvSW1wb3J0
R3JvdXA+DQorICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBs
YXRmb3JtKSc9PSdEZWJ1Z19XaW5DYWlyb3xXaW4zMiciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+
DQorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBs
YXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWlj
cm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQ
bGF0Zm9ybSIgLz4NCisgICAgPEltcG9ydCBQcm9qZWN0PSJKYXZhU2NyaXB0Q29yZURlYnVnQ0ZM
aXRlLnByb3BzIiAvPg0KKyAgPC9JbXBvcnRHcm91cD4NCisgIDxJbXBvcnRHcm91cCBDb25kaXRp
b249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnX1dpbkNhaXJvfHg2NCci
IExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+DQorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9v
dERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4
aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3Bz
JykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4NCisgICAgPEltcG9ydCBQcm9qZWN0
PSJKYXZhU2NyaXB0Q29yZURlYnVnQ0ZMaXRlLnByb3BzIiAvPg0KKyAgPC9JbXBvcnRHcm91cD4N
CisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0p
Jz09J0RlYnVnU3VmZml4fFdpbjMyJyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4NCisgICAgPElt
cG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVz
ZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3Bw
LiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAv
Pg0KKyAgICA8SW1wb3J0IFByb2plY3Q9IkphdmFTY3JpcHRDb3JlRGVidWcucHJvcHMiIC8+DQor
ICAgIDxJbXBvcnQgUHJvamVjdD0iJChXZWJLaXRfTGlicmFyaWVzKVx0b29sc1x2c3Byb3BzXGRl
YnVnc3VmZml4LnByb3BzIiAvPg0KKyAgPC9JbXBvcnRHcm91cD4NCisgIDxJbXBvcnRHcm91cCBD
b25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnU3VmZml4fHg2
NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+DQorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2Vy
Um9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249
ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnBy
b3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4NCisgICAgPEltcG9ydCBQcm9q
ZWN0PSJKYXZhU2NyaXB0Q29yZURlYnVnLnByb3BzIiAvPg0KKyAgICA8SW1wb3J0IFByb2plY3Q9
IiQoV2ViS2l0X0xpYnJhcmllcylcdG9vbHNcdnNwcm9wc1xkZWJ1Z3N1ZmZpeC5wcm9wcyIgLz4N
CisgIDwvSW1wb3J0R3JvdXA+DQorICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRz
IiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2lu
MzInIj4NCisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3Bw
LiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGly
KVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBw
RGF0YVBsYXRmb3JtIiAvPg0KKyAgICA8SW1wb3J0IFByb2plY3Q9IkphdmFTY3JpcHRDb3JlUmVs
ZWFzZS5wcm9wcyIgLz4NCisgIDwvSW1wb3J0R3JvdXA+DQorICA8SW1wb3J0R3JvdXAgQ29uZGl0
aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVs
PSJQcm9wZXJ0eVNoZWV0cyI+DQorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilc
TWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygn
JChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExh
YmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4NCisgICAgPEltcG9ydCBQcm9qZWN0PSJKYXZh
U2NyaXB0Q29yZVJlbGVhc2UucHJvcHMiIC8+DQorICA8L0ltcG9ydEdyb3VwPg0KKyAgPEltcG9y
dEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFz
ZV9XaW5DYWlyb3xXaW4zMiciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+DQorICAgIDxJbXBvcnQg
UHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnBy
b3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBs
YXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4NCisg
ICAgPEltcG9ydCBQcm9qZWN0PSJKYXZhU2NyaXB0Q29yZVJlbGVhc2VDRkxpdGUucHJvcHMiIC8+
DQorICA8L0ltcG9ydEdyb3VwPg0KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmln
dXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZV9XaW5DYWlyb3x4NjQnIiBMYWJlbD0iUHJv
cGVydHlTaGVldHMiPg0KKyAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jv
c29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNl
clJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0i
TG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+DQorICAgIDxJbXBvcnQgUHJvamVjdD0iSmF2YVNjcmlw
dENvcmVSZWxlYXNlQ0ZMaXRlLnByb3BzIiAvPg0KKyAgPC9JbXBvcnRHcm91cD4NCisgIDxJbXBv
cnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1Byb2R1
Y3Rpb258V2luMzInIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPg0KKyAgICA8SW1wb3J0IFByb2pl
Y3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIg
Q29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9y
bSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+DQorICAgIDxJ
bXBvcnQgUHJvamVjdD0iSmF2YVNjcmlwdENvcmVQcm9kdWN0aW9uLnByb3BzIiAvPg0KKyAgPC9J
bXBvcnRHcm91cD4NCisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24p
fCQoUGxhdGZvcm0pJz09J1Byb2R1Y3Rpb258eDY0JyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4N
CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxh
dGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNy
b3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBs
YXRmb3JtIiAvPg0KKyAgICA8SW1wb3J0IFByb2plY3Q9IkphdmFTY3JpcHRDb3JlUHJvZHVjdGlv
bi5wcm9wcyIgLz4NCisgIDwvSW1wb3J0R3JvdXA+DQorICA8UHJvcGVydHlHcm91cCBMYWJlbD0i
VXNlck1hY3JvcyIgLz4NCisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJh
dGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiAvPg0KKyAgPFByb3BlcnR5R3JvdXAg
Q29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIiAv
Pg0KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRm
b3JtKSc9PSdEZWJ1Z19XaW5DYWlyb3xXaW4zMiciIC8+DQorICA8UHJvcGVydHlHcm91cCBDb25k
aXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnX1dpbkNhaXJvfHg2
NCciIC8+DQorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQo
UGxhdGZvcm0pJz09J0RlYnVnU3VmZml4fFdpbjMyJyIgLz4NCisgIDxQcm9wZXJ0eUdyb3VwIENv
bmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWdTdWZmaXh8eDY0
JyIgLz4NCisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQ
bGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIC8+DQorICA8UHJvcGVydHlHcm91cCBDb25kaXRp
b249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgLz4NCisg
IDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSkn
PT0nUmVsZWFzZV9XaW5DYWlyb3xXaW4zMiciIC8+DQorICA8UHJvcGVydHlHcm91cCBDb25kaXRp
b249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VfV2luQ2Fpcm98eDY0
JyIgLz4NCisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQ
bGF0Zm9ybSknPT0nUHJvZHVjdGlvbnxXaW4zMiciIC8+DQorICA8UHJvcGVydHlHcm91cCBDb25k
aXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1Byb2R1Y3Rpb258eDY0JyIg
Lz4NCisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8
JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4NCisgICAgPENsQ29tcGlsZT4NCisgICAgICA8
UHJlY29tcGlsZWRIZWFkZXI+DQorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4NCisgICAgPC9D
bENvbXBpbGU+DQorICAgIDxMaW5rIC8+DQorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+DQorICA8
SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZv
cm0pJz09J0RlYnVnfHg2NCciPg0KKyAgICA8Q2xDb21waWxlPg0KKyAgICAgIDxQcmVjb21waWxl
ZEhlYWRlcj4NCisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPg0KKyAgICA8L0NsQ29tcGlsZT4N
CisgICAgPExpbmsgLz4NCisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4NCisgIDxJdGVtRGVmaW5p
dGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVi
dWdfV2luQ2Fpcm98V2luMzInIj4NCisgICAgPENsQ29tcGlsZT4NCisgICAgICA8UHJlY29tcGls
ZWRIZWFkZXI+DQorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4NCisgICAgPC9DbENvbXBpbGU+
DQorICAgIDxMaW5rIC8+DQorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+DQorICA8SXRlbURlZmlu
aXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0Rl
YnVnX1dpbkNhaXJvfHg2NCciPg0KKyAgICA8Q2xDb21waWxlPg0KKyAgICAgIDxQcmVjb21waWxl
ZEhlYWRlcj4NCisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPg0KKyAgICA8L0NsQ29tcGlsZT4N
CisgICAgPExpbmsgLz4NCisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4NCisgIDxJdGVtRGVmaW5p
dGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVi
dWdTdWZmaXh8V2luMzInIj4NCisgICAgPENsQ29tcGlsZT4NCisgICAgICA8UHJlY29tcGlsZWRI
ZWFkZXI+DQorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4NCisgICAgPC9DbENvbXBpbGU+DQor
ICAgIDxMaW5rIC8+DQorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+DQorICA8SXRlbURlZmluaXRp
b25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVn
U3VmZml4fHg2NCciPg0KKyAgICA8Q2xDb21waWxlPg0KKyAgICAgIDxQcmVjb21waWxlZEhlYWRl
cj4NCisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAg
PExpbmsgLz4NCisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4NCisgIDxJdGVtRGVmaW5pdGlvbkdy
b3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxX
aW4zMiciPg0KKyAgICA8Q2xDb21waWxlPg0KKyAgICAgIDxQcmVjb21waWxlZEhlYWRlcj4NCisg
ICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPExpbmsg
Lz4NCisgICAgPExpbmsgLz4NCisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4NCisgIDxJdGVtRGVm
aW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0n
UmVsZWFzZXx4NjQnIj4NCisgICAgPENsQ29tcGlsZT4NCisgICAgICA8UHJlY29tcGlsZWRIZWFk
ZXI+DQorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4NCisgICAgPC9DbENvbXBpbGU+DQorICAg
IDxMaW5rIC8+DQorICAgIDxMaW5rIC8+DQorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+DQorICA8
SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZv
cm0pJz09J1JlbGVhc2VfV2luQ2Fpcm98V2luMzInIj4NCisgICAgPENsQ29tcGlsZT4NCisgICAg
ICA8UHJlY29tcGlsZWRIZWFkZXI+DQorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4NCisgICAg
PC9DbENvbXBpbGU+DQorICAgIDxMaW5rIC8+DQorICAgIDxMaW5rIC8+DQorICA8L0l0ZW1EZWZp
bml0aW9uR3JvdXA+DQorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZp
Z3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2VfV2luQ2Fpcm98eDY0JyI+DQorICAgIDxD
bENvbXBpbGU+DQorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPg0KKyAgICAgIDwvUHJlY29tcGls
ZWRIZWFkZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8TGluayAvPg0KKyAgICA8TGluayAv
Pg0KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPg0KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29u
ZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQcm9kdWN0aW9ufFdpbjMy
JyI+DQorICAgIDxDbENvbXBpbGU+DQorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPg0KKyAgICAg
IDwvUHJlY29tcGlsZWRIZWFkZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8TGluayAvPg0K
KyAgICA8TGluayAvPg0KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPg0KKyAgPEl0ZW1EZWZpbml0
aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQcm9k
dWN0aW9ufHg2NCciPg0KKyAgICA8Q2xDb21waWxlPg0KKyAgICAgIDxQcmVjb21waWxlZEhlYWRl
cj4NCisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAg
PExpbmsgLz4NCisgICAgPExpbmsgLz4NCisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4NCisgIDxJ
dGVtR3JvdXA+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cQVBJXEpTQmFzZS5jcHAiIC8+
DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cQVBJXEpTQ2FsbGJhY2tDb25zdHJ1Y3Rvci5j
cHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cQVBJXEpTQ2FsbGJhY2tGdW5jdGlv
bi5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cQVBJXEpTQ2FsbGJhY2tPYmpl
Y3QuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXEFQSVxKU0NsYXNzUmVmLmNw
cCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxBUElcSlNDb250ZXh0UmVmLmNwcCIg
Lz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxBUElcSlNDVGVzdFJ1bm5lclV0aWxzLmNw
cCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxBUElcSlNPYmplY3RSZWYuY3BwIiAv
Pg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXEFQSVxKU1NjcmlwdFJlZi5jcHAiIC8+DQor
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cQVBJXEpTU3RyaW5nUmVmLmNwcCIgLz4NCisgICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxBUElcSlNTdHJpbmdSZWZCU1RSLmNwcCIgLz4NCisgICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxBUElcSlNTdHJpbmdSZWZDRi5jcHAiIC8+DQorICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5cQVBJXEpTVmFsdWVSZWYuY3BwIiAvPg0KKyAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXEFQSVxKU1dlYWtPYmplY3RNYXBSZWZQcml2YXRlLmNwcCIgLz4NCisg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxBUElcT3BhcXVlSlNTdHJpbmcuY3BwIiAvPg0KKyAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGFzc2VtYmxlclxMaW5rQnVmZmVyLmNwcCIgLz4NCisg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxhc3NlbWJsZXJcTWFjcm9Bc3NlbWJsZXIuY3BwIiAv
Pg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXEFQSVxKU0NUZXN0UnVubmVyVXRpbHMuaCIg
Lz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxhc3NlbWJsZXJcTWFjcm9Bc3NlbWJsZXJY
ODZDb21tb24uY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJpbmRpbmdzXFNj
cmlwdEZ1bmN0aW9uQ2FsbC5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYmlu
ZGluZ3NcU2NyaXB0T2JqZWN0LmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxi
aW5kaW5nc1xTY3JpcHRWYWx1ZS5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
YnVpbHRpbnNcQnVpbHRpbkV4ZWN1dGFibGVzLmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxieXRlY29kZVxBcnJheUFsbG9jYXRpb25Qcm9maWxlLmNwcCIgLz4NCisgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxBcnJheVByb2ZpbGUuY3BwIiAvPg0KKyAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXEJ5dGVjb2RlQmFzaWNCbG9jay5jcHAiIC8+
DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcQnl0ZWNvZGVMaXZlbmVzc0Fu
YWx5c2lzLmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxDYWxs
TGlua0luZm8uY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXENh
bGxMaW5rU3RhdHVzLmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29k
ZVxDb2RlQmxvY2suY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2Rl
XENvZGVCbG9ja0hhc2guY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVj
b2RlXENvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludC5jcHAiIC8+DQorICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcQ29kZU9yaWdpbi5jcHAiIC8+DQorICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcQ29kZVR5cGUuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXENvbXBsZXhHZXRTdGF0dXMuY3BwIiAvPg0KKyAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXENvbnN0YW50U3RydWN0dXJlQ2hlY2suY3BwIiAv
Pg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXERlZmVycmVkQ29tcGlsYXRp
b25DYWxsYmFjay5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVc
REZHRXhpdFByb2ZpbGUuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVj
b2RlXEV4ZWN1dGlvbkNvdW50ZXIuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XGJ5dGVjb2RlXEV4aXRLaW5kLmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxi
eXRlY29kZVxFeGl0aW5nSklUVHlwZS5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5cYnl0ZWNvZGVcR2V0QnlJZFN0YXR1cy5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cYnl0ZWNvZGVcR2V0QnlJZFZhcmlhbnQuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXGJ5dGVjb2RlXElubGluZUNhbGxGcmFtZVNldC5jcHAiIC8+DQorICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcSnVtcFRhYmxlLmNwcCIgLz4NCisgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5jcHAiIC8+
DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcTWV0aG9kT2ZHZXR0aW5nQVZh
bHVlUHJvZmlsZS5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVc
T3Bjb2RlLmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxQb2x5
bW9ycGhpY0dldEJ5SWRMaXN0LmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxi
eXRlY29kZVxQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxieXRlY29kZVxQcmVjaXNlSnVtcFRhcmdldHMuY3BwIiAvPg0KKyAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFB1dEJ5SWRTdGF0dXMuY3BwIiAvPg0KKyAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFB1dEJ5SWRWYXJpYW50LmNwcCIgLz4NCisg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxSZWR1Y2VXaGl0ZXNwYWNlLmNwcCIg
Lz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxTYW1wbGluZ1Rvb2wuY3Bw
IiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFNwZWNpYWxQb2ludGVy
LmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxTcGVjdWxhdGVk
VHlwZS5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcU3RydWN0
dXJlU2V0LmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxTdHJ1
Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50LmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxieXRlY29kZVxTdHJ1Y3R1cmVTdHViSW5mby5jcHAiIC8+DQorICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcVG9UaGlzU3RhdHVzLmNwcCIgLz4NCisgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxVbmxpbmtlZENvZGVCbG9jay5jcHAiIC8+DQorICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcVW5saW5rZWRJbnN0cnVjdGlvblN0cmVh
bS5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcVmFsdWVSZWNv
dmVyeS5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcVmFyaWFi
bGVXYXRjaHBvaW50U2V0LmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRl
Y29kZVxXYXRjaHBvaW50LmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRl
Y29tcGlsZXJcQnl0ZWNvZGVHZW5lcmF0b3IuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXGJ5dGVjb21waWxlclxOb2Rlc0NvZGVnZW4uY3BwIiAvPg0KKyAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXGRlYnVnZ2VyXERlYnVnZ2VyLmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxkZWJ1Z2dlclxEZWJ1Z2dlckNhbGxGcmFtZS5jcHAiIC8+DQorICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5cZGVidWdnZXJcRGVidWdnZXJTY29wZS5jcHAiIC8+DQorICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0Fic3RyYWN0SGVhcC5jcHAiIC8+DQorICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0Fic3RyYWN0VmFsdWUuY3BwIiAvPg0KKyAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNl
LmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHQXJpdGhNb2RlLmNw
cCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHQXJyYXlNb2RlLmNwcCIg
Lz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHQXRUYWlsQWJzdHJhY3RTdGF0
ZS5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0F2YWlsYWJpbGl0
eS5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0JhY2t3YXJkc1By
b3BhZ2F0aW9uUGhhc2UuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xE
RkdCYXNpY0Jsb2NrLmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZH
QmluYXJ5U3dpdGNoLmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZH
QmxvY2tJbnNlcnRpb25TZXQuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRm
Z1xERkdCeXRlQ29kZVBhcnNlci5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
ZGZnXERGR0NhcGFiaWxpdGllcy5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
ZGZnXERGR0NGQVBoYXNlLmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdc
REZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cZGZnXERGR0Nsb2JiZXJpemUuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXGRmZ1xERkdDbG9iYmVyU2V0LmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxkZmdcREZHQ29tbW9uLmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdc
REZHQ29tbW9uRGF0YS5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERG
R0NvbXBpbGF0aW9uS2V5LmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdc
REZHQ29tcGlsYXRpb25Nb2RlLmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxk
ZmdcREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXGRmZ1xERkdDUFNSZXRocmVhZGluZ1BoYXNlLmNwcCIgLz4NCisgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxkZmdcREZHQ3JpdGljYWxFZGdlQnJlYWtpbmdQaGFzZS5jcHAiIC8+DQor
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0NTRVBoYXNlLmNwcCIgLz4NCisgICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHRENFUGhhc2UuY3BwIiAvPg0KKyAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdEZXNpcmVkSWRlbnRpZmllcnMuY3BwIiAvPg0KKyAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdEZXNpcmVkVHJhbnNpdGlvbnMuY3BwIiAv
Pg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdEZXNpcmVkV2F0Y2hwb2ludHMu
Y3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdEZXNpcmVkV2Vha1Jl
ZmVyZW5jZXMuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdEZXNp
cmVkV3JpdGVCYXJyaWVycy5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZn
XERGR0Rpc2Fzc2VtYmxlci5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZn
XERGR0RvZXNHQy5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0Rv
bWluYXRvcnMuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdEcml2
ZXIuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdFZGdlLmNwcCIg
Lz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHRmFpbGVkRmluYWxpemVyLmNw
cCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHRmluYWxpemVyLmNwcCIg
Lz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHRml4dXBQaGFzZS5jcHAiIC8+
DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0ZsdXNoZWRBdC5jcHAiIC8+DQor
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0ZsdXNoRm9ybWF0LmNwcCIgLz4NCisg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHRnJvemVuVmFsdWUuY3BwIiAvPg0KKyAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdGdW5jdGlvbldoaXRlbGlzdC5jcHAiIC8+
DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0dyYXBoLmNwcCIgLz4NCisgICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHR3JhcGhTYWZlcG9pbnQuY3BwIiAvPg0KKyAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdIZWFwTG9jYXRpb24uY3BwIiAvPg0KKyAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAi
IC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0ludGVnZXJDaGVja0NvbWJp
bmluZ1BoYXNlLmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHSW52
YWxpZGF0aW9uUG9pbnRJbmplY3Rpb25QaGFzZS5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5cZGZnXERGR0pJVENvZGUuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXGRmZ1xERkdKSVRDb21waWxlci5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5cZGZnXERGR0pJVEZpbmFsaXplci5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5cZGZnXERGR0p1bXBSZXBsYWNlbWVudC5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cZGZnXERGR0xhenlKU1ZhbHVlLmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxkZmdcREZHTElDTVBoYXNlLmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxkZmdcREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxkZmdcREZHTG9uZ0xpdmVkU3RhdGUuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXGRmZ1xERkdMb29wUHJlSGVhZGVyQ3JlYXRpb25QaGFzZS5jcHAiIC8+DQor
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR01heUV4aXQuY3BwIiAvPg0KKyAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdNaW5pZmllZE5vZGUuY3BwIiAvPg0KKyAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdOYXR1cmFsTG9vcHMuY3BwIiAvPg0KKyAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdOb2RlLmNwcCIgLz4NCisgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxkZmdcREZHTm9kZUZsYWdzLmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxkZmdcREZHT3BlcmF0aW9ucy5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5cZGZnXERGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwIiAvPg0KKyAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdPU1JFbnRyeS5jcHAiIC8+DQorICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmNw
cCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHT1NSRXhpdC5jcHAiIC8+
DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR09TUkV4aXRCYXNlLmNwcCIgLz4N
CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHT1NSRXhpdENvbXBpbGVyLmNwcCIg
Lz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHT1NSRXhpdENvbXBpbGVyMzJf
NjQuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdPU1JFeGl0Q29t
cGlsZXI2NC5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR09TUkV4
aXRDb21waWxlckNvbW1vbi5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZn
XERGR09TUkV4aXRKdW1wUGxhY2Vob2xkZXIuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXGRmZ1xERkdPU1JFeGl0UHJlcGFyYXRpb24uY3BwIiAvPg0KKyAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXGRmZ1xERkdQaGFudG9tQ2Fub25pY2FsaXphdGlvblBoYXNlLmNwcCIgLz4N
CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHUGhhbnRvbVJlbW92YWxQaGFzZS5j
cHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1BoYXNlLmNwcCIgLz4N
CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHUGxhbi5jcHAiIC8+DQorICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5jcHAi
IC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1ByZWRpY3Rpb25Qcm9wYWdh
dGlvblBoYXNlLmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHUHVy
ZVZhbHVlLmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHUmVzdXJy
ZWN0aW9uRm9yVmFsaWRhdGlvblBoYXNlLmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxkZmdcREZHU2FmZXBvaW50LmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxkZmdcREZHU3BlY3VsYXRpdmVKSVQuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXGRmZ1xERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxkZmdcREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAiIC8+DQorICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5cZGZnXERGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAiIC8+DQorICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1NTQUxvd2VyaW5nUGhhc2UuY3BwIiAvPg0KKyAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdTdGFja0xheW91dFBoYXNlLmNwcCIgLz4N
CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHU3RhdGljRXhlY3V0aW9uQ291bnRF
c3RpbWF0aW9uUGhhc2UuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xE
RkdTdG9yZUJhcnJpZXJFbGlzaW9uUGhhc2UuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXGRmZ1xERkdTdHJlbmd0aFJlZHVjdGlvblBoYXNlLmNwcCIgLz4NCisgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5jcHAiIC8+DQor
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1RocmVhZERhdGEuY3BwIiAvPg0KKyAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdUaHVua3MuY3BwIiAvPg0KKyAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdUaWVyVXBDaGVja0luamVjdGlvblBoYXNlLmNwcCIg
Lz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHVG9GVExEZWZlcnJlZENvbXBp
bGF0aW9uQ2FsbGJhY2suY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xE
RkdUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcCIgLz4NCisg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHVHJhbnNpdGlvbi5jcHAiIC8+DQorICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuY3Bw
IiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdVbmlmaWNhdGlvblBoYXNl
LmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHVXNlS2luZC5jcHAi
IC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1ZhbGlkYXRlLmNwcCIgLz4N
CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHVmFsdWVTb3VyY2UuY3BwIiAvPg0K
KyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdWYWx1ZVN0cmVuZ3RoLmNwcCIgLz4N
CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHVmFyaWFibGVBY2Nlc3NEYXRhLmNw
cCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHVmFyaWFibGVBY2Nlc3NE
YXRhRHVtcC5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1Zhcmlh
YmxlRXZlbnQuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdWYXJp
YWJsZUV2ZW50U3RyZWFtLmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdc
REZHVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlLmNwcCIgLz4NCisgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxkZmdcREZHV2F0Y2hwb2ludENvbGxlY3Rpb25QaGFzZS5jcHAiIC8+DQor
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1dhdGNoYWJsZVN0cnVjdHVyZVdhdGNo
aW5nUGhhc2UuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdXb3Jr
bGlzdC5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGlzYXNzZW1ibGVyXERp
c2Fzc2VtYmxlci5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGlzYXNzZW1i
bGVyXExMVk1EaXNhc3NlbWJsZXIuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XGRpc2Fzc2VtYmxlclxYODZEaXNhc3NlbWJsZXIuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXGZ0bFxGVExBYnN0cmFjdEhlYXAuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXGZ0bFxGVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmNwcCIgLz4NCisgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxmdGxcRlRMQXZhaWxhYmxlUmVjb3ZlcnkuY3BwIiAvPg0KKyAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGZ0bFxGVExDYXBhYmlsaXRpZXMuY3BwIiAvPg0KKyAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGZ0bFxGVExDb21tb25WYWx1ZXMuY3BwIiAvPg0KKyAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGZ0bFxGVExDb21waWxlLmNwcCIgLz4NCisgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxmdGxcRlRMRGF0YVNlY3Rpb24uY3BwIiAvPg0KKyAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXGZ0bFxGVExEV0FSRkRlYnVnTGluZUluZm8uY3BwIiAvPg0KKyAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGZ0bFxGVExEV0FSRlJlZ2lzdGVyLmNwcCIgLz4NCisg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxmdGxcRlRMRXhpdEFyZ3VtZW50LmNwcCIgLz4NCisg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxmdGxcRlRMRXhpdEFyZ3VtZW50Rm9yT3BlcmFuZC5j
cHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZnRsXEZUTEV4aXRUaHVua0dlbmVy
YXRvci5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZnRsXEZUTEV4aXRWYWx1
ZS5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZnRsXEZUTEZhaWwuY3BwIiAv
Pg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGZ0bFxGVExGb3JPU1JFbnRyeUpJVENvZGUu
Y3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGZ0bFxGVExJbmxpbmVDYWNoZVNp
emUuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGZ0bFxGVExJbnRyaW5zaWNS
ZXBvc2l0b3J5LmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxmdGxcRlRMSklU
Q29kZS5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZnRsXEZUTEpJVEZpbmFs
aXplci5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZnRsXEZUTEpTQ2FsbC5j
cHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZnRsXEZUTExpbmsuY3BwIiAvPg0K
KyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGZ0bFxGVExMb2NhdGlvbi5jcHAiIC8+DQorICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZnRsXEZUTExvd2VyREZHVG9MTFZNLmNwcCIgLz4NCisg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxmdGxcRlRMT1NSRW50cnkuY3BwIiAvPg0KKyAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGZ0bFxGVExPU1JFeGl0LmNwcCIgLz4NCisgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxmdGxcRlRMT1NSRXhpdENvbXBpbGVyLmNwcCIgLz4NCisgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxmdGxcRlRMT3V0cHV0LmNwcCIgLz4NCisgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxmdGxcRlRMUmVjb3ZlcnlPcGNvZGUuY3BwIiAvPg0KKyAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXGZ0bFxGVExSZWdpc3RlckF0T2Zmc2V0LmNwcCIgLz4NCisgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxmdGxcRlRMU2F2ZVJlc3RvcmUuY3BwIiAvPg0KKyAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXGZ0bFxGVExTbG93UGF0aENhbGwuY3BwIiAvPg0KKyAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXGZ0bFxGVExTbG93UGF0aENhbGxLZXkuY3BwIiAvPg0KKyAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGZ0bFxGVExTdGFja01hcHMuY3BwIiAvPg0KKyAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXGZ0bFxGVExTdGF0ZS5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5cZnRsXEZUTFRodW5rcy5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cZnRsXEZUTFVud2luZEluZm8uY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXGZ0bFxGVExWYWx1ZUZvcm1hdC5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5cZnRsXEZUTFZhbHVlUmFuZ2UuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XGhlYXBcQmxvY2tBbGxvY2F0b3IuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XGhlYXBcQ29kZUJsb2NrU2V0LmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxo
ZWFwXENvbnNlcnZhdGl2ZVJvb3RzLmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxoZWFwXENvcGllZFNwYWNlLmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxo
ZWFwXENvcHlWaXNpdG9yLmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxoZWFw
XERlZmVyR0MuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGhlYXBcRWRlbkdD
QWN0aXZpdHlDYWxsYmFjay5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caGVh
cFxGdWxsR0NBY3Rpdml0eUNhbGxiYWNrLmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxoZWFwXEdDQWN0aXZpdHlDYWxsYmFjay5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5caGVhcFxHQ0xvZ2dpbmcuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXGhlYXBcR0NUaHJlYWQuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGhl
YXBcR0NUaHJlYWRTaGFyZWREYXRhLmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxoZWFwXEhhbmRsZVNldC5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caGVh
cFxIYW5kbGVTdGFjay5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caGVhcFxI
ZWFwLmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxoZWFwXEhlYXBTdGF0aXN0
aWNzLmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxoZWFwXEhlYXBUaW1lci5j
cHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caGVhcFxJbmNyZW1lbnRhbFN3ZWVw
ZXIuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGhlYXBcSklUU3R1YlJvdXRp
bmVTZXQuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGhlYXBcTWFjaGluZVN0
YWNrTWFya2VyLmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxoZWFwXE1hcmtl
ZEFsbG9jYXRvci5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caGVhcFxNYXJr
ZWRCbG9jay5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caGVhcFxNYXJrZWRT
cGFjZS5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caGVhcFxNYXJrU3RhY2su
Y3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGhlYXBcU2xvdFZpc2l0b3IuY3Bw
IiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGhlYXBcU3VwZXJSZWdpb24uY3BwIiAv
Pg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGhlYXBcV2Vhay5jcHAiIC8+DQorICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5caGVhcFxXZWFrQmxvY2suY3BwIiAvPg0KKyAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXGhlYXBcV2Vha0hhbmRsZU93bmVyLmNwcCIgLz4NCisgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxoZWFwXFdlYWtTZXQuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXGhlYXBcV3JpdGVCYXJyaWVyQnVmZmVyLmNwcCIgLz4NCisgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxoZWFwXFdyaXRlQmFycmllclN1cHBvcnQuY3BwIiAvPg0KKyAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXGluc3BlY3RvclxDb25zb2xlTWVzc2FnZS5jcHAiIC8+DQorICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXENvbnRlbnRTZWFyY2hVdGlsaXRpZXMu
Y3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGluc3BlY3RvclxJZGVudGlmaWVy
c0ZhY3RvcnkuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGluc3BlY3RvclxJ
bmplY3RlZFNjcmlwdC5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caW5zcGVj
dG9yXEluamVjdGVkU2NyaXB0QmFzZS5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5caW5zcGVjdG9yXEluamVjdGVkU2NyaXB0SG9zdC5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5caW5zcGVjdG9yXEluamVjdGVkU2NyaXB0TWFuYWdlci5jcHAiIC8+DQorICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXEluamVjdGVkU2NyaXB0TW9kdWxlLmNw
cCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcSW5zcGVjdG9yQWdl
bnRSZWdpc3RyeS5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caW5zcGVjdG9y
XEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxpbnNwZWN0b3JcSW5zcGVjdG9yVmFsdWVzLmNwcCIgLz4NCisgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcSlNJbmplY3RlZFNjcmlwdEhvc3QuY3BwIiAvPg0KKyAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGluc3BlY3RvclxKU0luamVjdGVkU2NyaXB0SG9zdFBy
b3RvdHlwZS5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXEpT
SmF2YVNjcmlwdENhbGxGcmFtZS5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
aW5zcGVjdG9yXEpTSmF2YVNjcmlwdENhbGxGcmFtZVByb3RvdHlwZS5jcHAiIC8+DQorICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXEphdmFTY3JpcHRDYWxsRnJhbWUuY3BwIiAv
Pg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGluc3BlY3RvclxTY3JpcHRBcmd1bWVudHMu
Y3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGluc3BlY3RvclxTY3JpcHRDYWxs
RnJhbWUuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGluc3BlY3RvclxTY3Jp
cHRDYWxsU3RhY2suY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGluc3BlY3Rv
clxTY3JpcHRDYWxsU3RhY2tGYWN0b3J5LmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxpbnNwZWN0b3JcU2NyaXB0RGVidWdTZXJ2ZXIuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXGluc3BlY3RvclxhZ2VudHNcSW5zcGVjdG9yQWdlbnQuY3BwIiAvPg0KKyAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGluc3BlY3RvclxhZ2VudHNcSW5zcGVjdG9yQ29uc29s
ZUFnZW50LmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcYWdl
bnRzXEluc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXGluc3BlY3RvclxhZ2VudHNcSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5jcHAiIC8+DQor
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGFnZW50c1xJbnNwZWN0b3JSdW50
aW1lQWdlbnQuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGludGVycHJldGVy
XEFic3RyYWN0UEMuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGludGVycHJl
dGVyXENhbGxGcmFtZS5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caW50ZXJw
cmV0ZXJcSW50ZXJwcmV0ZXIuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGlu
dGVycHJldGVyXEpTU3RhY2suY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGlu
dGVycHJldGVyXFByb3RvQ2FsbEZyYW1lLmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxpbnRlcnByZXRlclxTdGFja1Zpc2l0b3IuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXGludGVycHJldGVyXFZNSW5zcGVjdG9yLmNwcCIgLz4NCisgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxqaXRcQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUuY3BwIiAvPg0KKyAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxBcml0eUNoZWNrRmFpbFJldHVyblRodW5rcy5j
cHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caml0XEFzc2VtYmx5SGVscGVycy5j
cHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caml0XENsb3N1cmVDYWxsU3R1YlJv
dXRpbmUuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxFeGVjdXRhYmxl
QWxsb2NhdG9yLmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxqaXRcR0NBd2Fy
ZUpJVFN0dWJSb3V0aW5lLmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxqaXRc
SG9zdENhbGxSZXR1cm5WYWx1ZS5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
aml0XEpJVC5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caml0XEpJVEFyaXRo
bWV0aWMuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxKSVRBcml0aG1l
dGljMzJfNjQuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxKSVRDYWxs
LmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxqaXRcSklUQ2FsbDMyXzY0LmNw
cCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxqaXRcSklUQ29kZS5jcHAiIC8+DQor
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caml0XEpJVERpc2Fzc2VtYmxlci5jcHAiIC8+DQor
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caml0XEpJVEV4Y2VwdGlvbnMuY3BwIiAvPg0KKyAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxKSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHAi
IC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caml0XEpJVE9wY29kZXMuY3BwIiAvPg0K
KyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxKSVRPcGNvZGVzMzJfNjQuY3BwIiAvPg0K
KyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxKSVRPcGVyYXRpb25zLmNwcCIgLz4NCisg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxqaXRcSklUT3BlcmF0aW9uc01TVkM2NC5jcHAiIC8+
DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caml0XEpJVFByb3BlcnR5QWNjZXNzLmNwcCIg
Lz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxqaXRcSklUUHJvcGVydHlBY2Nlc3MzMl82
NC5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caml0XEpJVFN0dWJSb3V0aW5l
LmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxqaXRcSklUU3R1YnMuY3BwIiAv
Pg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxKSVRUaHVua3MuY3BwIiAvPg0KKyAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxKSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25D
YWxsYmFjay5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caml0XFJlZy5jcHAi
IC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caml0XFJlZ2lzdGVyUHJlc2VydmF0aW9u
V3JhcHBlckdlbmVyYXRvci5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caml0
XFJlcGF0Y2guY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxTY3JhdGNo
UmVnaXN0ZXJBbGxvY2F0b3IuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGpp
dFxUaHVua0dlbmVyYXRvcnMuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGxs
aW50XExMSW50Q0xvb3AuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGxsaW50
XExMSW50RGF0YS5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cbGxpbnRcTExJ
bnRFbnRyeXBvaW50LmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxsbGludFxM
TEludEV4Y2VwdGlvbnMuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGxsaW50
XExMSW50T2Zmc2V0c0V4dHJhY3Rvci5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5cbGxpbnRcTExJbnRTbG93UGF0aHMuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXGxsaW50XExMSW50VGh1bmtzLmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxsbGludFxMb3dMZXZlbEludGVycHJldGVyLmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxsbHZtXEluaXRpYWxpemVMTFZNLmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxsbHZtXEluaXRpYWxpemVMTFZNV2luLmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxsbHZtXExMVk1BUEkuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXHBhcnNlclxMZXhlci5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGFy
c2VyXE5vZGVzLmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwYXJzZXJcUGFy
c2VyLmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwYXJzZXJcUGFyc2VyQXJl
bmEuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBhcnNlclxTb3VyY2VDb2Rl
LmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwYXJzZXJcU291cmNlUHJvdmlk
ZXIuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBhcnNlclxTb3VyY2VQcm92
aWRlckNhY2hlLmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwcm9maWxlclxM
ZWdhY3lQcm9maWxlci5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccHJvZmls
ZXJcUHJvZmlsZS5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccHJvZmlsZXJc
UHJvZmlsZUdlbmVyYXRvci5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccHJv
ZmlsZXJcUHJvZmlsZU5vZGUuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBy
b2ZpbGVyXFByb2ZpbGVyQnl0ZWNvZGUuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXHByb2ZpbGVyXFByb2ZpbGVyQnl0ZWNvZGVzLmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxwcm9maWxlclxQcm9maWxlckJ5dGVjb2RlU2VxdWVuY2UuY3BwIiAvPg0KKyAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHByb2ZpbGVyXFByb2ZpbGVyQ29tcGlsYXRpb24uY3Bw
IiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHByb2ZpbGVyXFByb2ZpbGVyQ29tcGls
YXRpb25LaW5kLmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwcm9maWxlclxQ
cm9maWxlckNvbXBpbGVkQnl0ZWNvZGUuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXHByb2ZpbGVyXFByb2ZpbGVyRGF0YWJhc2UuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXHByb2ZpbGVyXFByb2ZpbGVySmV0dGlzb25SZWFzb24uY3BwIiAvPg0KKyAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHByb2ZpbGVyXFByb2ZpbGVyT3JpZ2luLmNwcCIgLz4NCisg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwcm9maWxlclxQcm9maWxlck9yaWdpblN0YWNrLmNw
cCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwcm9maWxlclxQcm9maWxlck9TUkV4
aXQuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHByb2ZpbGVyXFByb2ZpbGVy
T1NSRXhpdFNpdGUuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHByb2ZpbGVy
XFByb2ZpbGVyUHJvZmlsZWRCeXRlY29kZXMuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXHJ1bnRpbWVcQXJnTGlzdC5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5ccnVudGltZVxBcmd1bWVudHMuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XHJ1bnRpbWVcQXJndW1lbnRzSXRlcmF0b3JDb25zdHJ1Y3Rvci5jcHAiIC8+DQorICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxBcmd1bWVudHNJdGVyYXRvclByb3RvdHlwZS5jcHAi
IC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxBcnJheUJ1ZmZlci5jcHAi
IC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxBcnJheUJ1ZmZlck5ldXRl
cmluZ1dhdGNocG9pbnQuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRp
bWVcQXJyYXlCdWZmZXJWaWV3LmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxy
dW50aW1lXEFycmF5Q29uc3RydWN0b3IuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXHJ1bnRpbWVcQXJyYXlJdGVyYXRvckNvbnN0cnVjdG9yLmNwcCIgLz4NCisgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEFycmF5SXRlcmF0b3JQcm90b3R5cGUuY3BwIiAvPg0K
KyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcQXJyYXlQcm90b3R5cGUuY3BwIiAv
Pg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcQm9vbGVhbkNvbnN0cnVjdG9y
LmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEJvb2xlYW5PYmpl
Y3QuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcQm9vbGVhblBy
b3RvdHlwZS5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxDYWxs
RGF0YS5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxDb2RlQ2Fj
aGUuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcQ29kZVNwZWNp
YWxpemF0aW9uS2luZC5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGlt
ZVxDb21tb25JZGVudGlmaWVycy5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
cnVudGltZVxDb21tb25TbG93UGF0aHMuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXHJ1bnRpbWVcQ29tbW9uU2xvd1BhdGhzRXhjZXB0aW9ucy5jcHAiIC8+DQorICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxDb21waWxhdGlvblJlc3VsdC5jcHAiIC8+DQorICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxDb21wbGV0aW9uLmNwcCIgLz4NCisgICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXENvbnNvbGVDbGllbnQuY3BwIiAvPg0KKyAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcQ29uc29sZVByb3RvdHlwZS5jcHAiIC8+
DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxDb25zdHJ1Y3REYXRhLmNwcCIg
Lz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEN1c3RvbUdldHRlclNldHRl
ci5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxEYXRhVmlldy5j
cHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxEYXRlQ29uc3RydWN0
b3IuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRGF0ZUNvbnZl
cnNpb24uY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRGF0ZUlu
c3RhbmNlLmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXERhdGVQ
cm90b3R5cGUuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRHVt
cENvbnRleHQuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRXJy
b3IuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRXJyb3JDb25z
dHJ1Y3Rvci5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxFcnJv
ckhhbmRsaW5nU2NvcGUuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRp
bWVcRXJyb3JJbnN0YW5jZS5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVu
dGltZVxFcnJvclByb3RvdHlwZS5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
cnVudGltZVxFeGNlcHRpb25GdXp6LmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxydW50aW1lXEV4Y2VwdGlvbkhlbHBlcnMuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXHJ1bnRpbWVcRXhlY3V0YWJsZS5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5ccnVudGltZVxGdW5jdGlvbkNvbnN0cnVjdG9yLmNwcCIgLz4NCisgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxydW50aW1lXEZ1bmN0aW9uRXhlY3V0YWJsZUR1bXAuY3BwIiAvPg0KKyAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRnVuY3Rpb25IYXNFeGVjdXRlZENhY2hl
LmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEZ1bmN0aW9uUHJv
dG90eXBlLmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEdldHRl
clNldHRlci5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxIaWdo
RmlkZWxpdHlMb2cuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVc
SGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVyLmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxydW50aW1lXElkZW50aWZpZXIuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXHJ1bnRpbWVcSW5kZXhpbmdUeXBlLmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxydW50aW1lXEluaXRpYWxpemVUaHJlYWRpbmcuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5jcHAiIC8+DQorICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxJbnRlcm5hbEZ1bmN0aW9uLmNwcCIgLz4N
CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTQVBJVmFsdWVXcmFwcGVyLmNw
cCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTQWN0aXZhdGlvbi5j
cHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU0FyZ3VtZW50c0l0
ZXJhdG9yLmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTQXJy
YXkuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNBcnJheUl0
ZXJhdG9yLmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTQXJy
YXlCdWZmZXIuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNB
cnJheUJ1ZmZlckNvbnN0cnVjdG9yLmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxydW50aW1lXEpTQXJyYXlCdWZmZXJQcm90b3R5cGUuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNBcnJheUJ1ZmZlclZpZXcuY3BwIiAvPg0KKyAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNCb3VuZEZ1bmN0aW9uLmNwcCIgLz4NCisgICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTQ0pTVmFsdWUuY3BwIiAvPg0KKyAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNDZWxsLmNwcCIgLz4NCisgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTQ29uc29sZS5jcHAiIC8+DQorICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU0RhdGFWaWV3LmNwcCIgLz4NCisgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTRGF0YVZpZXdQcm90b3R5cGUuY3BwIiAvPg0KKyAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNEYXRlTWF0aC5jcHAiIC8+DQorICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU0Z1bmN0aW9uLmNwcCIgLz4NCisgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTR2xvYmFsT2JqZWN0LmNwcCIgLz4NCisgICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNw
cCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTTG9jay5jcHAiIC8+
DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU01hcC5jcHAiIC8+DQorICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU01hcEl0ZXJhdG9yLmNwcCIgLz4NCisg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTTmFtZVNjb3BlLmNwcCIgLz4NCisg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTTm90QW5PYmplY3QuY3BwIiAvPg0K
KyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNPTk9iamVjdC5jcHAiIC8+DQor
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU09iamVjdC5jcHAiIC8+DQorICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU1Byb21pc2UuY3BwIiAvPg0KKyAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNQcm9taXNlQ29uc3RydWN0b3IuY3BwIiAv
Pg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNQcm9taXNlRGVmZXJyZWQu
Y3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNQcm9taXNlRnVu
Y3Rpb25zLmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTUHJv
bWlzZVJlYWN0aW9uLmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1l
XEpTUHJvbWlzZVByb3RvdHlwZS5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
cnVudGltZVxKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNQcm94eS5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5ccnVudGltZVxKU1Njb3BlLmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxydW50aW1lXEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuY3BwIiAvPg0KKyAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNTZXQuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNTZXRJdGVyYXRvci5jcHAiIC8+DQorICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU1N0cmluZy5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5ccnVudGltZVxKU1N0cmluZ0pvaW5lci5jcHAiIC8+DQorICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU1N5bWJvbFRhYmxlT2JqZWN0LmNwcCIgLz4NCisgICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTVHlwZWRBcnJheUNvbnN0cnVjdG9ycy5j
cHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU1R5cGVkQXJyYXlQ
cm90b3R5cGVzLmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEpT
VHlwZWRBcnJheXMuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVc
SlNWYXJpYWJsZU9iamVjdC5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVu
dGltZVxKU1dlYWtNYXAuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRp
bWVcSlNXaXRoU2NvcGUuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRp
bWVcSlNXcmFwcGVyT2JqZWN0LmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxy
dW50aW1lXExpdGVyYWxQYXJzZXIuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XHJ1bnRpbWVcTG9va3VwLmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50
aW1lXE1hcENvbnN0cnVjdG9yLmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxy
dW50aW1lXE1hcERhdGEuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRp
bWVcTWFwSXRlcmF0b3JDb25zdHJ1Y3Rvci5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5ccnVudGltZVxNYXBJdGVyYXRvclByb3RvdHlwZS5jcHAiIC8+DQorICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5ccnVudGltZVxNYXBQcm90b3R5cGUuY3BwIiAvPg0KKyAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcTWF0aE9iamVjdC5jcHAiIC8+DQorICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5ccnVudGltZVxNZW1vcnlTdGF0aXN0aWNzLmNwcCIgLz4NCisgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXE5hbWVDb25zdHJ1Y3Rvci5jcHAiIC8+DQorICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxOYW1lSW5zdGFuY2UuY3BwIiAvPg0KKyAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcTmFtZVByb3RvdHlwZS5jcHAiIC8+DQor
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxOYXRpdmVFcnJvckNvbnN0cnVjdG9y
LmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXE5hdGl2ZUVycm9y
UHJvdG90eXBlLmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXE51
bWJlckNvbnN0cnVjdG9yLmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50
aW1lXE51bWJlck9iamVjdC5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVu
dGltZVxOdW1iZXJQcm90b3R5cGUuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XHJ1bnRpbWVcT2JqZWN0Q29uc3RydWN0b3IuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXHJ1bnRpbWVcT2JqZWN0UHJvdG90eXBlLmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxydW50aW1lXE9wZXJhdGlvbnMuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXHJ1bnRpbWVcT3B0aW9ucy5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5ccnVudGltZVxQcm9wZXJ0eURlc2NyaXB0b3IuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXHJ1bnRpbWVcUHJvcGVydHlOYW1lQXJyYXkuY3BwIiAvPg0KKyAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcUHJvcGVydHlTbG90LmNwcCIgLz4NCisgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXFByb3BlcnR5VGFibGUuY3BwIiAvPg0KKyAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcUHJvdG90eXBlTWFwLmNwcCIgLz4NCisgICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXFJlZ0V4cC5jcHAiIC8+DQorICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxSZWdFeHBDYWNoZS5jcHAiIC8+DQorICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxSZWdFeHBDYWNoZWRSZXN1bHQuY3BwIiAvPg0KKyAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcUmVnRXhwQ29uc3RydWN0b3IuY3BwIiAv
Pg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcUmVnRXhwTWF0Y2hlc0FycmF5
LmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXFJlZ0V4cE9iamVj
dC5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxSZWdFeHBQcm90
b3R5cGUuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcU2FtcGxp
bmdDb3VudGVyLmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXFNl
dENvbnN0cnVjdG9yLmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1l
XFNldEl0ZXJhdG9yQ29uc3RydWN0b3IuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXHJ1bnRpbWVcU2V0SXRlcmF0b3JQcm90b3R5cGUuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXHJ1bnRpbWVcU2V0UHJvdG90eXBlLmNwcCIgLz4NCisgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxydW50aW1lXFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcCIgLz4N
CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXFNtYWxsU3RyaW5ncy5jcHAiIC8+
DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxTcGFyc2VBcnJheVZhbHVlTWFw
LmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXFN0cmljdEV2YWxB
Y3RpdmF0aW9uLmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXFN0
cmluZ0NvbnN0cnVjdG9yLmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50
aW1lXFN0cmluZ09iamVjdC5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVu
dGltZVxTdHJpbmdQcm90b3R5cGUuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XHJ1bnRpbWVcU3RyaW5nUmVjdXJzaW9uQ2hlY2tlci5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5ccnVudGltZVxTdHJ1Y3R1cmUuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXHJ1bnRpbWVcU3RydWN0dXJlQ2hhaW4uY3BwIiAvPg0KKyAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXHJ1bnRpbWVcU3RydWN0dXJlSURUYWJsZS5jcHAiIC8+DQorICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxTdHJ1Y3R1cmVSYXJlRGF0YS5jcHAiIC8+DQorICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxTeW1ib2xUYWJsZS5jcHAiIC8+DQorICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxUZXN0UnVubmVyVXRpbHMuY3BwIiAvPg0K
KyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcVHlwZWRBcnJheUNvbnRyb2xsZXIu
Y3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcVHlwZWRBcnJheVR5
cGUuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcVHlwZUxvY2F0
aW9uQ2FjaGUuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcVHlw
ZVNldC5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxWTS5jcHAi
IC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxWTUVudHJ5U2NvcGUuY3Bw
IiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcV2F0Y2hkb2cuY3BwIiAv
Pg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcV2F0Y2hkb2dOb25lLmNwcCIg
Lz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXFdlYWtNYXBDb25zdHJ1Y3Rv
ci5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxXZWFrTWFwRGF0
YS5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxXZWFrTWFwUHJv
dG90eXBlLmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlx0b29sc1xDb2RlUHJv
ZmlsZS5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cdG9vbHNcQ29kZVByb2Zp
bGluZy5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ceWFyclxSZWd1bGFyRXhw
cmVzc2lvbi5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ceWFyclxZYXJyQ2Fu
b25pY2FsaXplVUNTMi5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ceWFyclxZ
YXJySW50ZXJwcmV0ZXIuY3BwIiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHlhcnJc
WWFyckpJVC5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ceWFyclxZYXJyUGF0
dGVybi5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ceWFyclxZYXJyU3ludGF4
Q2hlY2tlci5jcHAiIC8+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iJChDb25maWd1cmF0aW9u
QnVpbGREaXIpXG9iaiQoUGxhdGZvcm1BcmNoaXRlY3R1cmUpXCQoUHJvamVjdE5hbWUpXERlcml2
ZWRTb3VyY2VzXEluc3BlY3RvckpTQmFja2VuZERpc3BhdGNoZXJzLmNwcCIgLz4NCisgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIkKENvbmZpZ3VyYXRpb25CdWlsZERpcilcb2JqJChQbGF0Zm9ybUFy
Y2hpdGVjdHVyZSlcJChQcm9qZWN0TmFtZSlcRGVyaXZlZFNvdXJjZXNcSW5zcGVjdG9ySlNGcm9u
dGVuZERpc3BhdGNoZXJzLmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKENvbmZp
Z3VyYXRpb25CdWlsZERpcilcb2JqJChQbGF0Zm9ybUFyY2hpdGVjdHVyZSlcJChQcm9qZWN0TmFt
ZSlcRGVyaXZlZFNvdXJjZXNcSW5zcGVjdG9ySlNUeXBlQnVpbGRlcnMuY3BwIiAvPg0KKyAgICA8
Q2xDb21waWxlIEluY2x1ZGU9IiQoQ29uZmlndXJhdGlvbkJ1aWxkRGlyKVxvYmokKFBsYXRmb3Jt
QXJjaGl0ZWN0dXJlKVwkKFByb2plY3ROYW1lKVxEZXJpdmVkU291cmNlc1xKU0NCdWlsdGlucy5j
cHAiIC8+DQorICA8L0l0ZW1Hcm91cD4NCisgIDxJdGVtR3JvdXA+DQorICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iJChDb25maWd1cmF0aW9uQnVpbGREaXIpXG9iaiQoUGxhdGZvcm1BcmNoaXRlY3R1
cmUpXCQoUHJvamVjdE5hbWUpXERlcml2ZWRTb3VyY2VzXEFycmF5Q29uc3RydWN0b3IubHV0Lmgi
IC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChDb25maWd1cmF0aW9uQnVpbGREaXIpXG9i
aiQoUGxhdGZvcm1BcmNoaXRlY3R1cmUpXCQoUHJvamVjdE5hbWUpXERlcml2ZWRTb3VyY2VzXEFy
cmF5UHJvdG90eXBlLmx1dC5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoQ29uZmln
dXJhdGlvbkJ1aWxkRGlyKVxvYmokKFBsYXRmb3JtQXJjaGl0ZWN0dXJlKVwkKFByb2plY3ROYW1l
KVxEZXJpdmVkU291cmNlc1xCb29sZWFuUHJvdG90eXBlLmx1dC5oIiAvPg0KKyAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9IiQoQ29uZmlndXJhdGlvbkJ1aWxkRGlyKVxvYmokKFBsYXRmb3JtQXJjaGl0
ZWN0dXJlKVwkKFByb2plY3ROYW1lKVxEZXJpdmVkU291cmNlc1xEYXRlQ29uc3RydWN0b3IubHV0
LmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChDb25maWd1cmF0aW9uQnVpbGREaXIp
XG9iaiQoUGxhdGZvcm1BcmNoaXRlY3R1cmUpXCQoUHJvamVjdE5hbWUpXERlcml2ZWRTb3VyY2Vz
XERhdGVQcm90b3R5cGUubHV0LmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChDb25m
aWd1cmF0aW9uQnVpbGREaXIpXG9iaiQoUGxhdGZvcm1BcmNoaXRlY3R1cmUpXCQoUHJvamVjdE5h
bWUpXERlcml2ZWRTb3VyY2VzXEVycm9yUHJvdG90eXBlLmx1dC5oIiAvPg0KKyAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9IiQoQ29uZmlndXJhdGlvbkJ1aWxkRGlyKVxvYmokKFBsYXRmb3JtQXJjaGl0
ZWN0dXJlKVwkKFByb2plY3ROYW1lKVxEZXJpdmVkU291cmNlc1xIZWFkZXJEZXRlY3Rpb24uaCIg
Lz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKENvbmZpZ3VyYXRpb25CdWlsZERpcilcb2Jq
JChQbGF0Zm9ybUFyY2hpdGVjdHVyZSlcJChQcm9qZWN0TmFtZSlcRGVyaXZlZFNvdXJjZXNcSW5q
ZWN0ZWRTY3JpcHRTb3VyY2UuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKENvbmZp
Z3VyYXRpb25CdWlsZERpcilcb2JqJChQbGF0Zm9ybUFyY2hpdGVjdHVyZSlcJChQcm9qZWN0TmFt
ZSlcRGVyaXZlZFNvdXJjZXNcSW5zcGVjdG9ySlNCYWNrZW5kRGlzcGF0Y2hlcnMuaCIgLz4NCisg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKENvbmZpZ3VyYXRpb25CdWlsZERpcilcb2JqJChQbGF0
Zm9ybUFyY2hpdGVjdHVyZSlcJChQcm9qZWN0TmFtZSlcRGVyaXZlZFNvdXJjZXNcSW5zcGVjdG9y
SlNGcm9udGVuZERpc3BhdGNoZXJzLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChD
b25maWd1cmF0aW9uQnVpbGREaXIpXG9iaiQoUGxhdGZvcm1BcmNoaXRlY3R1cmUpXCQoUHJvamVj
dE5hbWUpXERlcml2ZWRTb3VyY2VzXEluc3BlY3RvckpTVHlwZUJ1aWxkZXJzLmgiIC8+DQorICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iJChDb25maWd1cmF0aW9uQnVpbGREaXIpXG9iaiQoUGxhdGZv
cm1BcmNoaXRlY3R1cmUpXCQoUHJvamVjdE5hbWUpXERlcml2ZWRTb3VyY2VzXEpTRGF0YVZpZXdQ
cm90b3R5cGUubHV0LmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChDb25maWd1cmF0
aW9uQnVpbGREaXIpXG9iaiQoUGxhdGZvcm1BcmNoaXRlY3R1cmUpXCQoUHJvamVjdE5hbWUpXERl
cml2ZWRTb3VyY2VzXEpTR2xvYmFsT2JqZWN0Lmx1dC5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9IiQoQ29uZmlndXJhdGlvbkJ1aWxkRGlyKVxvYmokKFBsYXRmb3JtQXJjaGl0ZWN0dXJl
KVwkKFByb2plY3ROYW1lKVxEZXJpdmVkU291cmNlc1xKU09OT2JqZWN0Lmx1dC5oIiAvPg0KKyAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoQ29uZmlndXJhdGlvbkJ1aWxkRGlyKVxvYmokKFBsYXRm
b3JtQXJjaGl0ZWN0dXJlKVwkKFByb2plY3ROYW1lKVxEZXJpdmVkU291cmNlc1xKU1Byb21pc2VD
b25zdHJ1Y3Rvci5sdXQuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKENvbmZpZ3Vy
YXRpb25CdWlsZERpcilcb2JqJChQbGF0Zm9ybUFyY2hpdGVjdHVyZSlcJChQcm9qZWN0TmFtZSlc
RGVyaXZlZFNvdXJjZXNcSlNQcm9taXNlUHJvdG90eXBlLmx1dC5oIiAvPg0KKyAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9IiQoQ29uZmlndXJhdGlvbkJ1aWxkRGlyKVxvYmokKFBsYXRmb3JtQXJjaGl0
ZWN0dXJlKVwkKFByb2plY3ROYW1lKVxEZXJpdmVkU291cmNlc1xLZXl3b3JkTG9va3VwLmx1dC5o
IiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoQ29uZmlndXJhdGlvbkJ1aWxkRGlyKVxv
YmokKFBsYXRmb3JtQXJjaGl0ZWN0dXJlKVwkKFByb2plY3ROYW1lKVxEZXJpdmVkU291cmNlc1xM
ZXhlci5sdXQuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKENvbmZpZ3VyYXRpb25C
dWlsZERpcilcb2JqJChQbGF0Zm9ybUFyY2hpdGVjdHVyZSlcJChQcm9qZWN0TmFtZSlcRGVyaXZl
ZFNvdXJjZXNcTmFtZVByb3RvdHlwZS5sdXQuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIkKENvbmZpZ3VyYXRpb25CdWlsZERpcilcb2JqJChQbGF0Zm9ybUFyY2hpdGVjdHVyZSlcJChQ
cm9qZWN0TmFtZSlcRGVyaXZlZFNvdXJjZXNcTnVtYmVyQ29uc3RydWN0b3IubHV0LmgiIC8+DQor
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChDb25maWd1cmF0aW9uQnVpbGREaXIpXG9iaiQoUGxh
dGZvcm1BcmNoaXRlY3R1cmUpXCQoUHJvamVjdE5hbWUpXERlcml2ZWRTb3VyY2VzXE51bWJlclBy
b3RvdHlwZS5sdXQuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKENvbmZpZ3VyYXRp
b25CdWlsZERpcilcb2JqJChQbGF0Zm9ybUFyY2hpdGVjdHVyZSlcJChQcm9qZWN0TmFtZSlcRGVy
aXZlZFNvdXJjZXNcT2JqZWN0Q29uc3RydWN0b3IubHV0LmgiIC8+DQorICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iJChDb25maWd1cmF0aW9uQnVpbGREaXIpXG9iaiQoUGxhdGZvcm1BcmNoaXRlY3R1
cmUpXCQoUHJvamVjdE5hbWUpXERlcml2ZWRTb3VyY2VzXFJlZ0V4cENvbnN0cnVjdG9yLmx1dC5o
IiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoQ29uZmlndXJhdGlvbkJ1aWxkRGlyKVxv
YmokKFBsYXRmb3JtQXJjaGl0ZWN0dXJlKVwkKFByb2plY3ROYW1lKVxEZXJpdmVkU291cmNlc1xS
ZWdFeHBKaXRUYWJsZXMuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKENvbmZpZ3Vy
YXRpb25CdWlsZERpcilcb2JqJChQbGF0Zm9ybUFyY2hpdGVjdHVyZSlcJChQcm9qZWN0TmFtZSlc
RGVyaXZlZFNvdXJjZXNcUmVnRXhwT2JqZWN0Lmx1dC5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9IiQoQ29uZmlndXJhdGlvbkJ1aWxkRGlyKVxvYmokKFBsYXRmb3JtQXJjaGl0ZWN0dXJl
KVwkKFByb2plY3ROYW1lKVxEZXJpdmVkU291cmNlc1xSZWdFeHBQcm90b3R5cGUubHV0LmgiIC8+
DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChDb25maWd1cmF0aW9uQnVpbGREaXIpXG9iaiQo
UGxhdGZvcm1BcmNoaXRlY3R1cmUpXCQoUHJvamVjdE5hbWUpXERlcml2ZWRTb3VyY2VzXFN0cmlu
Z0NvbnN0cnVjdG9yLmx1dC5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoQ29uZmln
dXJhdGlvbkJ1aWxkRGlyKVxvYmokKFBsYXRmb3JtQXJjaGl0ZWN0dXJlKVwkKFByb2plY3ROYW1l
KVxEZXJpdmVkU291cmNlc1xKU0NCdWlsdGlucy5oIiAvPg0KKyAgPC9JdGVtR3JvdXA+DQorICA8
SXRlbUdyb3VwPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXEFQSVxBUElDYWxsYmFja0Z1
bmN0aW9uLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cQVBJXEFQSUNhc3QuaCIg
Lz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxBUElcSmF2YVNjcmlwdC5oIiAvPg0KKyAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXEFQSVxKYXZhU2NyaXB0Q29yZS5oIiAvPg0KKyAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXEFQSVxKU0FQSVdyYXBwZXJPYmplY3QuaCIgLz4NCisgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxBUElcSlNCYXNlLmgiIC8+DQorICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5cQVBJXEpTQmFzZVByaXZhdGUuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxBUElcSlNDYWxsYmFja0NvbnN0cnVjdG9yLmgiIC8+DQorICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5cQVBJXEpTQ2FsbGJhY2tGdW5jdGlvbi5oIiAvPg0KKyAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXEFQSVxKU0NhbGxiYWNrT2JqZWN0LmgiIC8+DQorICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5cQVBJXEpTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaCIgLz4NCisgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxBUElcSlNDbGFzc1JlZi5oIiAvPg0KKyAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXEFQSVxKU0NvbnRleHQuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxBUElcSlNDb250ZXh0SW50ZXJuYWwuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxBUElcSlNDb250ZXh0UmVmLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
QVBJXEpTQ29udGV4dFJlZlByaXZhdGUuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxBUElcSlNFeHBvcnQuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxBUElcSlNP
YmplY3RSZWYuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxBUElcSlNPYmplY3RS
ZWZQcml2YXRlLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cQVBJXEpTUmV0YWlu
UHRyLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cQVBJXEpTU2NyaXB0UmVmUHJp
dmF0ZS5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXEFQSVxKU1N0cmluZ1JlZi5o
IiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXEFQSVxKU1N0cmluZ1JlZkJTVFIuaCIg
Lz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxBUElcSlNTdHJpbmdSZWZDRi5oIiAvPg0K
KyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXEFQSVxKU1ZhbHVlLmgiIC8+DQorICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cQVBJXEpTVmFsdWVJbnRlcm5hbC5oIiAvPg0KKyAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXEFQSVxKU1ZhbHVlUmVmLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cQVBJXEpTV2Vha09iamVjdE1hcFJlZkludGVybmFsLmgiIC8+DQorICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cQVBJXEpTV2Vha09iamVjdE1hcFJlZlByaXZhdGUuaCIgLz4NCisg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxBUElcSlNXcmFwcGVyTWFwLmgiIC8+DQorICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cQVBJXE9wYXF1ZUpTU3RyaW5nLmgiIC8+DQorICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cQVBJXFdlYktpdEF2YWlsYWJpbGl0eS5oIiAvPg0KKyAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXGFzc2VtYmxlclxBYm9ydFJlYXNvbi5oIiAvPg0KKyAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXGFzc2VtYmxlclxBYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgiIC8+
DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYXNzZW1ibGVyXEFzc2VtYmxlckJ1ZmZlci5o
IiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGFzc2VtYmxlclxDb2RlTG9jYXRpb24u
aCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxhc3NlbWJsZXJcTGlua0J1ZmZlci5o
IiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGFzc2VtYmxlclxNYWNyb0Fzc2VtYmxl
ci5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGFzc2VtYmxlclxNYWNyb0Fzc2Vt
Ymxlclg4Ni5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGFzc2VtYmxlclxNYWNy
b0Fzc2VtYmxlclg4NkNvbW1vbi5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGFz
c2VtYmxlclxNYWNyb0Fzc2VtYmxlclg4Nl82NC5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGFzc2VtYmxlclxNYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbC5oIiAvPg0KKyAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGFzc2VtYmxlclxSZXBhdGNoQnVmZmVyLmgiIC8+DQor
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYXNzZW1ibGVyXFg4NkFzc2VtYmxlci5oIiAvPg0K
KyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJpbmRpbmdzXFNjcmlwdEZ1bmN0aW9uQ2FsbC5o
IiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJpbmRpbmdzXFNjcmlwdE9iamVjdC5o
IiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJpbmRpbmdzXFNjcmlwdFZhbHVlLmgi
IC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnVpbHRpbnNcQnVpbHRpbkV4ZWN1dGFi
bGVzLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcQXJyYXlBbGxv
Y2F0aW9uUHJvZmlsZS5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2Rl
XEFycmF5UHJvZmlsZS5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2Rl
XEJ5VmFsSW5mby5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXEJ5
dGVjb2RlQmFzaWNCbG9jay5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVj
b2RlXEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGJ5dGVjb2RlXEJ5dGVjb2RlVXNlRGVmLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cYnl0ZWNvZGVcQ2FsbExpbmtJbmZvLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cYnl0ZWNvZGVcQ2FsbExpbmtTdGF0dXMuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxieXRlY29kZVxDYWxsUmV0dXJuT2Zmc2V0VG9CeXRlY29kZU9mZnNldC5oIiAv
Pg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXENvZGVCbG9jay5oIiAvPg0K
KyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXENvZGVCbG9ja0hhc2guaCIgLz4N
CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxDb2RlQmxvY2tKZXR0aXNvbmlu
Z1dhdGNocG9pbnQuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxD
b2RlQmxvY2tXaXRoSklUVHlwZS5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5
dGVjb2RlXENvZGVPcmlnaW4uaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRl
Y29kZVxDb2RlVHlwZS5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2Rl
XENvbW1lbnQuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxDb21w
bGV4R2V0U3RhdHVzLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVc
Q29uc3RhbnRTdHJ1Y3R1cmVDaGVjay5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGJ5dGVjb2RlXERhdGFGb3JtYXQuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxi
eXRlY29kZVxEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCIgLz4NCisgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxieXRlY29kZVxERkdFeGl0UHJvZmlsZS5oIiAvPg0KKyAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXEV2YWxDb2RlQ2FjaGUuaCIgLz4NCisgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxFeGVjdXRpb25Db3VudGVyLmgiIC8+DQorICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcRXhpdEtpbmQuaCIgLz4NCisgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxFeHByZXNzaW9uUmFuZ2VJbmZvLmgiIC8+DQorICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcR2V0QnlJZFN0YXR1cy5oIiAvPg0KKyAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXEdldEJ5SWRWYXJpYW50LmgiIC8+DQor
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcSGFuZGxlckluZm8uaCIgLz4NCisg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxJbmxpbmVDYWxsRnJhbWVTZXQuaCIg
Lz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxJbnN0cnVjdGlvbi5oIiAv
Pg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXEp1bXBUYWJsZS5oIiAvPg0K
KyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXExhenlPcGVyYW5kVmFsdWVQcm9m
aWxlLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcTExJbnRDYWxs
TGlua0luZm8uaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxNZXRo
b2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5cYnl0ZWNvZGVcT3Bjb2RlLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0
ZWNvZGVcT3BlcmFuZHMuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29k
ZVxQb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5cYnl0ZWNvZGVcUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5oIiAvPg0KKyAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFByZWNpc2VKdW1wVGFyZ2V0cy5oIiAvPg0KKyAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFB1dEJ5SWRTdGF0dXMuaCIgLz4NCisgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxQdXRCeUlkVmFyaWFudC5oIiAvPg0KKyAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFB1dEtpbmQuaCIgLz4NCisgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxSZWR1Y2VXaGl0ZXNwYWNlLmgiIC8+DQorICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcU2FtcGxpbmdUb29sLmgiIC8+DQorICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcU3BlY2lhbFBvaW50ZXIuaCIgLz4NCisgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxTcGVjdWxhdGVkVHlwZS5oIiAvPg0KKyAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFN0cnVjdHVyZVNldC5oIiAvPg0KKyAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dh
dGNocG9pbnQuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxTdHJ1
Y3R1cmVTdHViSW5mby5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2Rl
XFRvVGhpc1N0YXR1cy5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2Rl
XFR5cGVMb2NhdGlvbi5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2Rl
XFVubGlua2VkQ29kZUJsb2NrLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0
ZWNvZGVcVW5saW5rZWRJbnN0cnVjdGlvblN0cmVhbS5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXGJ5dGVjb2RlXFZhbHVlUHJvZmlsZS5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXGJ5dGVjb2RlXFZhbHVlUmVjb3ZlcnkuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxieXRlY29kZVxWYXJpYWJsZVdhdGNocG9pbnRTZXQuaCIgLz4NCisgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxWaXJ0dWFsUmVnaXN0ZXIuaCIgLz4NCisgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxXYXRjaHBvaW50LmgiIC8+DQorICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvbXBpbGVyXEJ5dGVjb2RlR2VuZXJhdG9yLmgiIC8+
DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvbXBpbGVyXExhYmVsLmgiIC8+DQor
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvbXBpbGVyXExhYmVsU2NvcGUuaCIgLz4N
CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29tcGlsZXJcUmVnaXN0ZXJJRC5oIiAv
Pg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGNvbmZpZy5oIiAvPg0KKyAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGRlYnVnZ2VyXEJyZWFrcG9pbnQuaCIgLz4NCisgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxkZWJ1Z2dlclxEZWJ1Z2dlci5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXGRlYnVnZ2VyXERlYnVnZ2VyQ2FsbEZyYW1lLmgiIC8+DQorICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cZGVidWdnZXJcRGVidWdnZXJQcmltaXRpdmVzLmgiIC8+DQorICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cZGVidWdnZXJcRGVidWdnZXJTY29wZS5oIiAvPg0KKyAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdBYnN0cmFjdEhlYXAuaCIgLz4NCisgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHQWJzdHJhY3RJbnRlcnByZXRlci5oIiAvPg0KKyAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdBYnN0cmFjdEludGVycHJldGVySW5saW5l
cy5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdBYnN0cmFjdFZhbHVl
LmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0FkamFjZW5jeUxpc3Qu
aCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHQWxsb2NhdG9yLmgiIC8+
DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0FuYWx5c2lzLmgiIC8+DQorICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0FyZ3VtZW50UG9zaXRpb24uaCIgLz4NCisg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25Q
aGFzZS5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdBcnJheWlmeVNs
b3dQYXRoR2VuZXJhdG9yLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERG
R0FyaXRoTW9kZS5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdBcnJh
eU1vZGUuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHQXRUYWlsQWJz
dHJhY3RTdGF0ZS5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdBdmFp
bGFiaWxpdHkuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHQmFja3dh
cmRzUHJvcGFnYXRpb25QaGFzZS5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRm
Z1xERkdCYXNpY0Jsb2NrLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERG
R0Jhc2ljQmxvY2tJbmxpbmVzLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZn
XERGR0JpbmFyeVN3aXRjaC5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xE
RkdCbG9ja0luc2VydGlvblNldC5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRm
Z1xERkdCcmFuY2hEaXJlY3Rpb24uaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxk
ZmdcREZHQnl0ZUNvZGVQYXJzZXIuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxk
ZmdcREZHQ2FsbEFycmF5QWxsb2NhdG9yU2xvd1BhdGhHZW5lcmF0b3IuaCIgLz4NCisgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHQ2FwYWJpbGl0aWVzLmgiIC8+DQorICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0NDYWxsSGVscGVycy5oIiAvPg0KKyAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdDRkFQaGFzZS5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXGRmZ1xERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmgiIC8+DQorICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0Nsb2JiZXJpemUuaCIgLz4NCisgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxkZmdcREZHQ2xvYmJlclNldC5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXGRmZ1xERkdDb21tb24uaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxkZmdcREZHQ29tbW9uRGF0YS5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRm
Z1xERkdDb21waWxhdGlvbktleS5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRm
Z1xERkdDb21waWxhdGlvbk1vZGUuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxk
ZmdcREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxkZmdcREZHQ1BTUmV0aHJlYWRpbmdQaGFzZS5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXGRmZ1xERkdDcml0aWNhbEVkZ2VCcmVha2luZ1BoYXNlLmgiIC8+DQorICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0NTRVBoYXNlLmgiIC8+DQorICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0RDRVBoYXNlLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cZGZnXERGR0Rlc2lyZWRJZGVudGlmaWVycy5oIiAvPg0KKyAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXGRmZ1xERkdEZXNpcmVkVHJhbnNpdGlvbnMuaCIgLz4NCisgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHRGVzaXJlZFdhdGNocG9pbnRzLmgiIC8+DQorICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0Rlc2lyZWRXZWFrUmVmZXJlbmNlcy5oIiAvPg0K
KyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdEZXNpcmVkV3JpdGVCYXJyaWVycy5o
IiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdEaXNhc3NlbWJsZXIuaCIg
Lz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHRG9lc0dDLmgiIC8+DQorICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0RvbWluYXRvcnMuaCIgLz4NCisgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHRG91YmxlRm9ybWF0U3RhdGUuaCIgLz4NCisgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHRHJpdmVyLmgiIC8+DQorICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0VkZ2UuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxkZmdcREZHRWRnZURvbWluYXRlcy5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXGRmZ1xERkdFZGdlVXNlc1N0cnVjdHVyZS5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGRmZ1xERkdGYWlsZWRGaW5hbGl6ZXIuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxkZmdcREZHRmlsdHJhdGlvblJlc3VsdC5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXGRmZ1xERkdGaW5hbGl6ZXIuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxkZmdcREZHRml4dXBQaGFzZS5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGRmZ1xERkdGbHVzaGVkQXQuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdc
REZHRmx1c2hGb3JtYXQuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZH
RlBSSW5mby5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdGcm96ZW5W
YWx1ZS5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdGdW5jdGlvbldo
aXRlbGlzdC5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdHZW5lcmF0
aW9uSW5mby5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdHUFJJbmZv
LmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0dyYXBoLmgiIC8+DQor
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0dyYXBoU2FmZXBvaW50LmgiIC8+DQor
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0hlYXBMb2NhdGlvbi5oIiAvPg0KKyAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5oIiAv
Pg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdJbnNlcnRpb25TZXQuaCIgLz4N
CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHSW50ZWdlckNoZWNrQ29tYmluaW5n
UGhhc2UuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHSW52YWxpZGF0
aW9uUG9pbnRJbmplY3Rpb25QaGFzZS5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGRmZ1xERkdKSVRDb2RlLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERG
R0pJVENvbXBpbGVyLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0pJ
VEZpbmFsaXplci5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdKdW1w
UmVwbGFjZW1lbnQuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHTGF6
eUpTVmFsdWUuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHTElDTVBo
YXNlLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0xpdmVuZXNzQW5h
bHlzaXNQaGFzZS5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdMb25n
TGl2ZWRTdGF0ZS5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdMb29w
UHJlSGVhZGVyQ3JlYXRpb25QaGFzZS5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGRmZ1xERkdNYXlFeGl0LmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERG
R01lcmdlTW9kZS5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdNaW5p
ZmllZEdyYXBoLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR01pbmlm
aWVkSUQuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHTWluaWZpZWRO
b2RlLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR05hdHVyYWxMb29w
cy5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdOb2RlLmgiIC8+DQor
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR05vZGVBbGxvY2F0b3IuaCIgLz4NCisg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHTm9kZUZsYWdzLmgiIC8+DQorICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR05vZGVPcmlnaW4uaCIgLz4NCisgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHTm9kZVR5cGUuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxkZmdcREZHT3BlcmF0aW9ucy5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGRmZ1xERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmgiIC8+DQorICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR09TUkVudHJ5LmgiIC8+DQorICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cZGZnXERGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmgiIC8+DQor
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR09TUkV4aXQuaCIgLz4NCisgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHT1NSRXhpdEJhc2UuaCIgLz4NCisgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHT1NSRXhpdENvbXBpbGF0aW9uSW5mby5oIiAvPg0KKyAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdPU1JFeGl0Q29tcGlsZXIuaCIgLz4NCisg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmgi
IC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR09TUkV4aXRKdW1wUGxhY2Vo
b2xkZXIuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHT1NSRXhpdFBy
ZXBhcmF0aW9uLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1BoYW50
b21DYW5vbmljYWxpemF0aW9uUGhhc2UuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxkZmdcREZHUGhhbnRvbVJlbW92YWxQaGFzZS5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGRmZ1xERkdQaGFzZS5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRm
Z1xERkdQbGFuLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1ByZWRp
Y3Rpb25JbmplY3Rpb25QaGFzZS5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRm
Z1xERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXGRmZ1xERkdQdXJlVmFsdWUuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxkZmdcREZHUmVnaXN0ZXJCYW5rLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5cZGZnXERGR1JlZ2lzdGVyU2V0LmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
ZGZnXERGR1Jlc3VycmVjdGlvbkZvclZhbGlkYXRpb25QaGFzZS5oIiAvPg0KKyAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdTYWZlVG9FeGVjdXRlLmgiIC8+DQorICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1NhZmVwb2ludC5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXGRmZ1xERkdTYW5lU3RyaW5nR2V0QnlWYWxTbG93UGF0aEdlbmVyYXRvci5oIiAv
Pg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdTY2FubmFibGUuaCIgLz4NCisg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHU2NvcmVCb2FyZC5oIiAvPg0KKyAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCIg
Lz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHU2lsZW50UmVnaXN0ZXJTYXZl
UGxhbi5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdTbG93UGF0aEdl
bmVyYXRvci5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdTcGVjdWxh
dGl2ZUpJVC5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdTU0FDb252
ZXJzaW9uUGhhc2UuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHU1NB
TG93ZXJpbmdQaGFzZS5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdT
dGFja0xheW91dFBoYXNlLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERG
R1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmgiIC8+DQorICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1N0b3JlQmFycmllckVsaXNpb25QaGFzZS5oIiAvPg0KKyAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdTdHJlbmd0aFJlZHVjdGlvblBoYXNlLmgi
IC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1N0cnVjdHVyZUFic3RyYWN0
VmFsdWUuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHU3RydWN0dXJl
Q2xvYmJlclN0YXRlLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1Ro
cmVhZERhdGEuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHVGh1bmtz
LmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1RpZXJVcENoZWNrSW5q
ZWN0aW9uUGhhc2UuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHVG9G
VExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxkZmdcREZHVG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFj
ay5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdUcmFuc2l0aW9uLmgi
IC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1R5cGVDaGVja0hvaXN0aW5n
UGhhc2UuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHVW5pZmljYXRp
b25QaGFzZS5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdVc2VLaW5k
LmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1ZhbGlkYXRlLmgiIC8+
DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1ZhbHVlUmVjb3ZlcnlPdmVycmlk
ZS5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdWYWx1ZVNvdXJjZS5o
IiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdWYWx1ZVN0cmVuZ3RoLmgi
IC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1ZhcmlhYmxlQWNjZXNzRGF0
YS5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdWYXJpYWJsZUFjY2Vz
c0RhdGFEdW1wLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1Zhcmlh
YmxlRXZlbnQuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHVmFyaWFi
bGVFdmVudFN0cmVhbS5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdW
YXJpYWRpY0Z1bmN0aW9uLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERG
R1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZS5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXGRmZ1xERkdXYXRjaGFibGVTdHJ1Y3R1cmVXYXRjaGluZ1BoYXNlLmgiIC8+DQor
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1dhdGNocG9pbnRDb2xsZWN0aW9uUGhh
c2UuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHV29ya2xpc3QuaCIg
Lz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkaXNhc3NlbWJsZXJcRGlzYXNzZW1ibGVy
LmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGlzYXNzZW1ibGVyXExMVk1EaXNh
c3NlbWJsZXIuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxmdGxcRlRMQWJicmV2
aWF0ZWRUeXBlcy5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGZ0bFxGVExBYmJy
ZXZpYXRpb25zLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZnRsXEZUTEFic3Ry
YWN0SGVhcC5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGZ0bFxGVExBYnN0cmFj
dEhlYXBSZXBvc2l0b3J5LmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZnRsXEZU
TEF2YWlsYWJsZVJlY292ZXJ5LmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZnRs
XEZUTENhcGFiaWxpdGllcy5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGZ0bFxG
VExDb21tb25WYWx1ZXMuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxmdGxcRlRM
Q29tcGlsZS5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGZ0bFxGVExEYXRhU2Vj
dGlvbi5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGZ0bFxGVExEV0FSRkRlYnVn
TGluZUluZm8uaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxmdGxcRlRMRFdBUkZS
ZWdpc3Rlci5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGZ0bFxGVExFeGl0QXJn
dW1lbnQuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxmdGxcRlRMRXhpdEFyZ3Vt
ZW50Rm9yT3BlcmFuZC5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGZ0bFxGVExF
eGl0QXJndW1lbnRMaXN0LmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZnRsXEZU
TEV4aXRUaHVua0dlbmVyYXRvci5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGZ0
bFxGVExFeGl0VmFsdWUuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxmdGxcRlRM
RmFpbC5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGZ0bFxGVExGb3JtYXR0ZWRW
YWx1ZS5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGZ0bFxGVExGb3JPU1JFbnRy
eUpJVENvZGUuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxmdGxcRlRMR2VuZXJh
dGVkRnVuY3Rpb24uaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxmdGxcRlRMSW5s
aW5lQ2FjaGVEZXNjcmlwdG9yLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZnRs
XEZUTElubGluZUNhY2hlU2l6ZS5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGZ0
bFxGVExJbnRyaW5zaWNSZXBvc2l0b3J5LmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5cZnRsXEZUTEpJVENvZGUuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxmdGxc
RlRMSklURmluYWxpemVyLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZnRsXEZU
TEpTQ2FsbC5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGZ0bFxGVExMaW5rLmgi
IC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZnRsXEZUTExvY2F0aW9uLmgiIC8+DQor
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZnRsXEZUTExvd2VyREZHVG9MTFZNLmgiIC8+DQor
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZnRsXEZUTExvd2VyZWROb2RlVmFsdWUuaCIgLz4N
CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxmdGxcRlRMT1NSRW50cnkuaCIgLz4NCisgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxmdGxcRlRMT1NSRXhpdC5oIiAvPg0KKyAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGZ0bFxGVExPU1JFeGl0Q29tcGlsYXRpb25JbmZvLmgiIC8+DQorICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZnRsXEZUTE9TUkV4aXRDb21waWxlci5oIiAvPg0KKyAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGZ0bFxGVExPdXRwdXQuaCIgLz4NCisgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxmdGxcRlRMUmVjb3ZlcnlPcGNvZGUuaCIgLz4NCisgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxmdGxcRlRMUmVnaXN0ZXJBdE9mZnNldC5oIiAvPg0KKyAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXGZ0bFxGVExTYXZlUmVzdG9yZS5oIiAvPg0KKyAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGZ0bFxGVExTbG93UGF0aENhbGwuaCIgLz4NCisgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxmdGxcRlRMU2xvd1BhdGhDYWxsS2V5LmgiIC8+DQorICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cZnRsXEZUTFN0YWNrTWFwcy5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXGZ0bFxGVExTdGF0ZS5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGZ0bFxGVExTd2l0Y2hDYXNlLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZnRs
XEZUTFRodW5rcy5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGZ0bFxGVExUeXBl
ZFBvaW50ZXIuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxmdGxcRlRMVW53aW5k
SW5mby5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGZ0bFxGVExWYWx1ZUZvcm1h
dC5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGZ0bFxGVExWYWx1ZUZyb21CbG9j
ay5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGZ0bFxGVExWYWx1ZVJhbmdlLmgi
IC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZnRsXEZUTFdlaWdodC5oIiAvPg0KKyAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGZ0bFxGVExXZWlnaHRlZFRhcmdldC5oIiAvPg0KKyAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcQmxvY2tBbGxvY2F0b3IuaCIgLz4NCisgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXENvZGVCbG9ja1NldC5oIiAvPg0KKyAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcQ29uc2VydmF0aXZlUm9vdHMuaCIgLz4NCisgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXENvcGllZEFsbG9jYXRvci5oIiAvPg0KKyAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcQ29waWVkQmxvY2suaCIgLz4NCisgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxoZWFwXENvcGllZEJsb2NrSW5saW5lcy5oIiAvPg0KKyAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGhlYXBcQ29waWVkU3BhY2UuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxoZWFwXENvcGllZFNwYWNlSW5saW5lcy5oIiAvPg0KKyAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXGhlYXBcQ29weVRva2VuLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5caGVhcFxDb3B5VmlzaXRvci5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGhlYXBcQ29weVZpc2l0b3JJbmxpbmVzLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5caGVhcFxDb3B5V29ya0xpc3QuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxo
ZWFwXENvcHlXcml0ZUJhcnJpZXIuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxo
ZWFwXERlZmVyR0MuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXERlbGF5
ZWRSZWxlYXNlU2NvcGUuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXEVk
ZW5HQ0FjdGl2aXR5Q2FsbGJhY2suaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxo
ZWFwXEZ1bGxHQ0FjdGl2aXR5Q2FsbGJhY2suaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxoZWFwXEdDQWN0aXZpdHlDYWxsYmFjay5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGhlYXBcR0NMb2dnaW5nLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
aGVhcFxHQ1NlZ21lbnRlZEFycmF5LmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
aGVhcFxHQ1NlZ21lbnRlZEFycmF5SW5saW5lcy5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGhlYXBcR0NBc3NlcnRpb25zLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5caGVhcFxHQ1RocmVhZC5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBc
R0NUaHJlYWRTaGFyZWREYXRhLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caGVh
cFxIYW5kbGUuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXEhhbmRsZUJs
b2NrLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caGVhcFxIYW5kbGVCbG9ja0lu
bGluZXMuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXEhhbmRsZVNldC5o
IiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcSGFuZGxlU3RhY2suaCIgLz4N
CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXEhhbmRsZVR5cGVzLmgiIC8+DQorICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caGVhcFxIZWFwLmgiIC8+DQorICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5caGVhcFxIZWFwQmxvY2suaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxoZWFwXEhlYXBJbmxpbmVzLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
aGVhcFxIZWFwT3BlcmF0aW9uLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caGVh
cFxIZWFwUm9vdFZpc2l0b3IuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFw
XEhlYXBTdGF0aXN0aWNzLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caGVhcFxI
ZWFwVGltZXIuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXEluY3JlbWVu
dGFsU3dlZXBlci5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcSklUU3R1
YlJvdXRpbmVTZXQuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXExpc3Rh
YmxlSGFuZGxlci5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcTG9jYWwu
aCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXExvY2FsU2NvcGUuaCIgLz4N
CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXE1hY2hpbmVTdGFja01hcmtlci5oIiAv
Pg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcTWFya2VkQWxsb2NhdG9yLmgiIC8+
DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caGVhcFxNYXJrZWRCbG9jay5oIiAvPg0KKyAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcTWFya2VkQmxvY2tTZXQuaCIgLz4NCisgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXE1hcmtlZFNwYWNlLmgiIC8+DQorICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5caGVhcFxNYXJrU3RhY2suaCIgLz4NCisgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxoZWFwXFJlY3Vyc2l2ZUFsbG9jYXRpb25TY29wZS5oIiAvPg0KKyAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcUmVnaW9uLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5caGVhcFxTbG90VmlzaXRvci5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXGhlYXBcU2xvdFZpc2l0b3JJbmxpbmVzLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5caGVhcFxTdHJvbmcuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFw
XFN0cm9uZ0lubGluZXMuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXFN1
cGVyUmVnaW9uLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caGVhcFxUaW55Qmxv
b21GaWx0ZXIuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXFVuY29uZGl0
aW9uYWxGaW5hbGl6ZXIuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXFdl
YWsuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXFdlYWtCbG9jay5oIiAv
Pg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcV2Vha0hhbmRsZU93bmVyLmgiIC8+
DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caGVhcFxXZWFrSW1wbC5oIiAvPg0KKyAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcV2Vha1JlZmVyZW5jZUhhcnZlc3Rlci5oIiAvPg0K
KyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcV2Vha1NldC5oIiAvPg0KKyAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcV2Vha1NldElubGluZXMuaCIgLz4NCisgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxoZWFwXFdyaXRlQmFycmllckJ1ZmZlci5oIiAvPg0KKyAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcV3JpdGVCYXJyaWVyU3VwcG9ydC5oIiAvPg0KKyAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGluc3BlY3RvclxDb25zb2xlTWVzc2FnZS5oIiAvPg0KKyAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGluc3BlY3RvclxDb250ZW50U2VhcmNoVXRpbGl0aWVz
LmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXElkZW50aWZpZXJz
RmFjdG9yeS5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGluc3BlY3RvclxJbmpl
Y3RlZFNjcmlwdC5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGluc3BlY3RvclxJ
bmplY3RlZFNjcmlwdEJhc2UuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxpbnNw
ZWN0b3JcSW5qZWN0ZWRTY3JpcHRIb3N0LmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5caW5zcGVjdG9yXEluamVjdGVkU2NyaXB0TWFuYWdlci5oIiAvPg0KKyAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXGluc3BlY3RvclxJbmplY3RlZFNjcmlwdE1vZHVsZS5oIiAvPg0KKyAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGluc3BlY3RvclxJbnNwZWN0b3JBZ2VudEJhc2UuaCIgLz4N
CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcSW5zcGVjdG9yQWdlbnRSZWdp
c3RyeS5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGluc3BlY3RvclxJbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlci5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGlu
c3BlY3RvclxJbnNwZWN0b3JFbnZpcm9ubWVudC5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGluc3BlY3RvclxJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaCIgLz4NCisgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcSW5zcGVjdG9yVHlwZUJ1aWxkZXIuaCIgLz4N
CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcSW5zcGVjdG9yVmFsdWVzLmgi
IC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXEpTSW5qZWN0ZWRTY3Jp
cHRIb3N0LmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXEpTSW5q
ZWN0ZWRTY3JpcHRIb3N0UHJvdG90eXBlLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5caW5zcGVjdG9yXEpTSmF2YVNjcmlwdENhbGxGcmFtZS5oIiAvPg0KKyAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXGluc3BlY3RvclxKU0phdmFTY3JpcHRDYWxsRnJhbWVQcm90b3R5cGUuaCIg
Lz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcSmF2YVNjcmlwdENhbGxG
cmFtZS5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGluc3BlY3RvclxTY3JpcHRB
cmd1bWVudHMuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcU2Ny
aXB0QnJlYWtwb2ludC5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGluc3BlY3Rv
clxTY3JpcHRDYWxsRnJhbWUuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxpbnNw
ZWN0b3JcU2NyaXB0Q2FsbFN0YWNrLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
aW5zcGVjdG9yXFNjcmlwdENhbGxTdGFja0ZhY3RvcnkuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxpbnNwZWN0b3JcU2NyaXB0RGVidWdMaXN0ZW5lci5oIiAvPg0KKyAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXGluc3BlY3RvclxTY3JpcHREZWJ1Z1NlcnZlci5oIiAvPg0KKyAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGluc3BlY3RvclxhZ2VudHNcSW5zcGVjdG9yQWdlbnQu
aCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcYWdlbnRzXEluc3Bl
Y3RvckNvbnNvbGVBZ2VudC5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGluc3Bl
Y3RvclxhZ2VudHNcSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5oIiAvPg0KKyAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXGluc3BlY3RvclxhZ2VudHNcSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5oIiAv
Pg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGluc3BlY3RvclxhZ2VudHNcSW5zcGVjdG9y
UnVudGltZUFnZW50LmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caW50ZXJwcmV0
ZXJcQWJzdHJhY3RQQy5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGludGVycHJl
dGVyXENhY2hlZENhbGwuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxpbnRlcnBy
ZXRlclxDYWxsRnJhbWUuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxpbnRlcnBy
ZXRlclxDYWxsRnJhbWVJbmxpbmVzLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
aW50ZXJwcmV0ZXJcQ2FsbEZyYW1lQ2xvc3VyZS5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGludGVycHJldGVyXEludGVycHJldGVyLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5caW50ZXJwcmV0ZXJcSlNTdGFjay5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGludGVycHJldGVyXEpTU3RhY2tJbmxpbmVzLmgiIC8+DQorICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5caW50ZXJwcmV0ZXJcUHJvdG9DYWxsRnJhbWUuaCIgLz4NCisgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxpbnRlcnByZXRlclxSZWdpc3Rlci5oIiAvPg0KKyAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGludGVycHJldGVyXFN0YWNrVmlzaXRvci5oIiAvPg0KKyAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXGludGVycHJldGVyXFZNSW5zcGVjdG9yLmgiIC8+DQorICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5caml0XEFjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lLmgiIC8+
DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caml0XEFyaXR5Q2hlY2tGYWlsUmV0dXJuVGh1
bmtzLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caml0XEFzc2VtYmx5SGVscGVy
cy5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxDQ2FsbEhlbHBlcnMuaCIg
Lz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcQ2xvc3VyZUNhbGxTdHViUm91dGlu
ZS5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxDb21wYWN0SklUQ29kZU1h
cC5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxFeGVjdXRhYmxlQWxsb2Nh
dG9yLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caml0XEZQUkluZm8uaCIgLz4N
CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmgi
IC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caml0XEdQUkluZm8uaCIgLz4NCisgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcSG9zdENhbGxSZXR1cm5WYWx1ZS5oIiAvPg0KKyAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxKSVQuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxqaXRcSklUQ29kZS5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGppdFxKSVRDb21waWxhdGlvbkVmZm9ydC5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXGppdFxKSVREaXNhc3NlbWJsZXIuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxqaXRcSklURXhjZXB0aW9ucy5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGpp
dFxKSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXGppdFxKSVRJbmxpbmVzLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caml0
XEpJVE9wZXJhdGlvbnMuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcSklU
U3R1YlJvdXRpbmUuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcSklUU3R1
YnMuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcSklUU3R1YnNYODYuaCIg
Lz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcSklUU3R1YnNYODZDb21tb24uaCIg
Lz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcSklUU3R1YnNYODZfNjQuaCIgLz4N
CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcSklUVGh1bmtzLmgiIC8+DQorICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5caml0XEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxi
YWNrLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caml0XEpJVFdyaXRlQmFycmll
ci5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxKU0ludGVyZmFjZUpJVC5o
IiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxSZWdpc3RlclNldC5jcHAiIC8+
DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caml0XFJlZy5oIiAvPg0KKyAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGppdFxSZWdpc3RlclByZXNlcnZhdGlvbldyYXBwZXJHZW5lcmF0b3Iu
aCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcUmVnaXN0ZXJTZXQuaCIgLz4N
CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcUmVwYXRjaC5oIiAvPg0KKyAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCIgLz4NCisg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcU3BlY2lhbGl6ZWRUaHVua0pJVC5oIiAvPg0K
KyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxUZW1wUmVnaXN0ZXJTZXQuY3BwIiAvPg0K
KyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxUZW1wUmVnaXN0ZXJTZXQuaCIgLz4NCisg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcVGh1bmtHZW5lcmF0b3IuaCIgLz4NCisgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcVGh1bmtHZW5lcmF0b3JzLmgiIC8+DQorICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5caml0XFVudXNlZFBvaW50ZXIuaCIgLz4NCisgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxsbGludFxMTEludENMb29wLmgiIC8+DQorICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5cbGxpbnRcTExJbnRDb21tb24uaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxsbGludFxMTEludERhdGEuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxsbGludFxMTEludEVudHJ5cG9pbnQuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxsbGludFxMTEludEV4Y2VwdGlvbnMuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxsbGludFxMTEludE9mZmxpbmVBc21Db25maWcuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxsbGludFxMTEludE9wY29kZS5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXGxsaW50XExMSW50U2xvd1BhdGhzLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5cbGxpbnRcTExJbnRUaHVua3MuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxs
bGludFxMb3dMZXZlbEludGVycHJldGVyLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5cbGx2bVxJbml0aWFsaXplTExWTS5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGxsdm1cTExWTUFQSS5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGxsdm1cTExW
TUFQSUZ1bmN0aW9ucy5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGxsdm1cTExW
TUhlYWRlcnMuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwYXJzZXJcQVNUQnVp
bGRlci5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBhcnNlclxMZXhlci5oIiAv
Pg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBhcnNlclxOb2RlQ29uc3RydWN0b3JzLmgi
IC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGFyc2VyXE5vZGVJbmZvLmgiIC8+DQor
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGFyc2VyXE5vZGVzLmgiIC8+DQorICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5ccGFyc2VyXFBhcnNlci5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXHBhcnNlclxQYXJzZXJBcmVuYS5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXHBhcnNlclxQYXJzZXJNb2Rlcy5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXHBhcnNlclxQYXJzZXJUb2tlbnMuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxwYXJzZXJcUmVzdWx0VHlwZS5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBh
cnNlclxTb3VyY2VDb2RlLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGFyc2Vy
XFNvdXJjZVByb3ZpZGVyLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGFyc2Vy
XFNvdXJjZVByb3ZpZGVyQ2FjaGUuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxw
YXJzZXJcU291cmNlUHJvdmlkZXJDYWNoZUl0ZW0uaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxwYXJzZXJcU3ludGF4Q2hlY2tlci5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXHByb2ZpbGVyXENhbGxJZGVudGlmaWVyLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5ccHJvZmlsZXJcTGVnYWN5UHJvZmlsZXIuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxwcm9maWxlclxQcm9maWxlLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5ccHJvZmlsZXJcUHJvZmlsZUdlbmVyYXRvci5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXHByb2ZpbGVyXFByb2ZpbGVOb2RlLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5ccHJvZmlsZXJcUHJvZmlsZXJCeXRlY29kZS5oIiAvPg0KKyAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXHByb2ZpbGVyXFByb2ZpbGVyQnl0ZWNvZGVzLmgiIC8+DQorICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5ccHJvZmlsZXJcUHJvZmlsZXJCeXRlY29kZVNlcXVlbmNlLmgiIC8+
DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccHJvZmlsZXJcUHJvZmlsZXJDb21waWxhdGlv
bi5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHByb2ZpbGVyXFByb2ZpbGVyQ29t
cGlsYXRpb25LaW5kLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccHJvZmlsZXJc
UHJvZmlsZXJDb21waWxlZEJ5dGVjb2RlLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5ccHJvZmlsZXJcUHJvZmlsZXJEYXRhYmFzZS5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXHByb2ZpbGVyXFByb2ZpbGVyRXhlY3V0aW9uQ291bnRlci5oIiAvPg0KKyAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXHByb2ZpbGVyXFByb2ZpbGVySmV0dGlzb25SZWFzb24uaCIgLz4N
CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwcm9maWxlclxQcm9maWxlck9yaWdpbi5oIiAv
Pg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHByb2ZpbGVyXFByb2ZpbGVyT3JpZ2luU3Rh
Y2suaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwcm9maWxlclxQcm9maWxlck9T
UkV4aXQuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwcm9maWxlclxQcm9maWxl
ck9TUkV4aXRTaXRlLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccHJvZmlsZXJc
UHJvZmlsZXJQcm9maWxlZEJ5dGVjb2Rlcy5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXHJ1bnRpbWVcQXJnTGlzdC5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1
bnRpbWVcQXJndW1lbnRzLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGlt
ZVxBcnJheUJ1ZmZlci5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVc
QXJyYXlCdWZmZXJOZXV0ZXJpbmdXYXRjaHBvaW50LmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5ccnVudGltZVxBcnJheUJ1ZmZlclZpZXcuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxydW50aW1lXEFycmF5Q29uc3RydWN0b3IuaCIgLz4NCisgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxydW50aW1lXEFycmF5Q29udmVudGlvbnMuaCIgLz4NCisgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEFycmF5SXRlcmF0b3JDb25zdHJ1Y3Rvci5oIiAvPg0K
KyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcQXJyYXlJdGVyYXRvclByb3RvdHlw
ZS5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcQXJyYXlQcm90b3R5
cGUuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEFycmF5U3RvcmFn
ZS5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcQmF0Y2hlZFRyYW5z
aXRpb25PcHRpbWl6ZXIuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1l
XEJpZ0ludGVnZXIuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEJv
b2xlYW5Db25zdHJ1Y3Rvci5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRp
bWVcQm9vbGVhbk9iamVjdC5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRp
bWVcQm9vbGVhblByb3RvdHlwZS5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1
bnRpbWVcQnV0dGVyZmx5LmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGlt
ZVxCdXR0ZXJmbHlJbmxpbmVzLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVu
dGltZVxDYWxsRGF0YS5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVc
Q2xhc3NJbmZvLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxDb2Rl
Q2FjaGUuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXENvZGVTcGVj
aWFsaXphdGlvbktpbmQuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1l
XENvbW1vbklkZW50aWZpZXJzLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVu
dGltZVxDb21tb25TbG93UGF0aHMuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxy
dW50aW1lXENvbW1vblNsb3dQYXRoc0V4Y2VwdGlvbnMuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxydW50aW1lXENvbXBpbGF0aW9uUmVzdWx0LmgiIC8+DQorICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxDb21wbGV0aW9uLmgiIC8+DQorICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5ccnVudGltZVxDb25zb2xlQ2xpZW50LmgiIC8+DQorICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5ccnVudGltZVxDb25zb2xlUHJvdG90eXBlLmgiIC8+DQorICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxDb25zb2xlVHlwZXMuaCIgLz4NCisgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxydW50aW1lXENvbnN0YW50TW9kZS5oIiAvPg0KKyAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXHJ1bnRpbWVcQ29uc3RydWN0RGF0YS5oIiAvPg0KKyAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXHJ1bnRpbWVcQ3VzdG9tR2V0dGVyU2V0dGVyLmgiIC8+DQorICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxEYXRhVmlldy5oIiAvPg0KKyAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRGF0ZUNvbnN0cnVjdG9yLmgiIC8+DQorICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxEYXRlQ29udmVyc2lvbi5oIiAvPg0KKyAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRGF0ZUluc3RhbmNlLmgiIC8+DQorICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxEYXRlSW5zdGFuY2VDYWNoZS5oIiAvPg0KKyAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRGF0ZVByb3RvdHlwZS5oIiAvPg0KKyAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRHVtcENvbnRleHQuaCIgLz4NCisgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEVudW1lcmF0aW9uTW9kZS5oIiAvPg0KKyAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRXJyb3IuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxydW50aW1lXEVycm9yQ29uc3RydWN0b3IuaCIgLz4NCisgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxydW50aW1lXEVycm9ySGFuZGxpbmdTY29wZS5oIiAvPg0KKyAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRXJyb3JJbnN0YW5jZS5oIiAvPg0KKyAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRXJyb3JQcm90b3R5cGUuaCIgLz4NCisgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEV4Y2VwdGlvbkZ1enouaCIgLz4NCisgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEV4Y2VwdGlvbkhlbHBlcnMuaCIgLz4NCisgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEV4ZWN1dGFibGUuaCIgLz4NCisgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEZsb2F0MzJBcnJheS5oIiAvPg0KKyAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRmxvYXQ2NEFycmF5LmgiIC8+DQorICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxGdW5jdGlvbkNvbnN0cnVjdG9yLmgiIC8+DQorICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxGdW5jdGlvbkV4ZWN1dGFibGVEdW1wLmgi
IC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxGdW5jdGlvbkhhc0V4ZWN1
dGVkQ2FjaGUuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEZ1bmN0
aW9uUHJvdG90eXBlLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxH
ZW5lcmljVHlwZWRBcnJheVZpZXcuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxy
dW50aW1lXEdlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaCIgLz4NCisgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxydW50aW1lXEdldHRlclNldHRlci5oIiAvPg0KKyAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSGlnaEZpZGVsaXR5TG9nLmgiIC8+DQorICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxIaWdoRmlkZWxpdHlUeXBlUHJvZmlsZXIuaCIgLz4NCisg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXElkZW50aWZpZXIuaCIgLz4NCisgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEluZGV4aW5nSGVhZGVyLmgiIC8+DQorICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxJbmRleGluZ0hlYWRlcklubGluZXMuaCIg
Lz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEluZGV4aW5nVHlwZS5oIiAv
Pg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSW5pdGlhbGl6ZVRocmVhZGlu
Zy5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSW50MTZBcnJheS5o
IiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSW50MzJBcnJheS5oIiAv
Pg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSW50OEFycmF5LmgiIC8+DQor
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxJbnRlbmRlZFN0cnVjdHVyZUNoYWlu
LmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxJbnRlcm5hbEZ1bmN0
aW9uLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxJbnRyaW5zaWMu
aCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTQVBJVmFsdWVXcmFw
cGVyLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU0FjdGl2YXRp
b24uaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTQXJndW1lbnRz
SXRlcmF0b3IuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTQXJy
YXkuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTQXJyYXlCdWZm
ZXIuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTQXJyYXlCdWZm
ZXJDb25zdHJ1Y3Rvci5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVc
SlNBcnJheUJ1ZmZlclByb3RvdHlwZS5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XHJ1bnRpbWVcSlNBcnJheUJ1ZmZlclZpZXcuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxydW50aW1lXEpTQXJyYXlCdWZmZXJWaWV3SW5saW5lcy5oIiAvPg0KKyAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNBcnJheUl0ZXJhdG9yLmgiIC8+DQorICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU0JvdW5kRnVuY3Rpb24uaCIgLz4NCisgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTQ0lubGluZXMuaCIgLz4NCisgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTQ0pTVmFsdWUuaCIgLz4NCisgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTQ0pTVmFsdWVJbmxpbmVzLmgiIC8+DQorICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU0NlbGwuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxydW50aW1lXEpTQ29uc29sZS5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXHJ1bnRpbWVcSlNEYXRhVmlldy5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXHJ1bnRpbWVcSlNEYXRhVmlld1Byb3RvdHlwZS5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXHJ1bnRpbWVcSlNEYXRlTWF0aC5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXHJ1bnRpbWVcSlNEZXN0cnVjdGlibGVPYmplY3QuaCIgLz4NCisgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTRXhwb3J0TWFjcm9zLmgiIC8+DQorICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU0Zsb2F0MzJBcnJheS5oIiAvPg0KKyAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNGbG9hdDY0QXJyYXkuaCIgLz4NCisgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTRnVuY3Rpb24uaCIgLz4NCisgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmgiIC8+DQorICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0Nv
bnN0cnVjdG9yLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU0dl
bmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lcy5oIiAvPg0KKyAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgi
IC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU0dlbmVyaWNUeXBlZEFy
cmF5Vmlld1Byb3RvdHlwZS5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRp
bWVcSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGVJbmxpbmVzLmgiIC8+DQorICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU0dsb2JhbE9iamVjdC5oIiAvPg0KKyAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuaCIg
Lz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTSW50MTZBcnJheS5oIiAv
Pg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNJbnQzMkFycmF5LmgiIC8+
DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU0ludDhBcnJheS5oIiAvPg0K
KyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNMb2NrLmgiIC8+DQorICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU01hcC5oIiAvPg0KKyAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNNYXBJdGVyYXRvci5oIiAvPg0KKyAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNOYW1lU2NvcGUuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxydW50aW1lXEpTTm90QW5PYmplY3QuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxydW50aW1lXEpTT05PYmplY3QuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxydW50aW1lXEpTT2JqZWN0LmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5ccnVudGltZVxKU1Byb21pc2UuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxy
dW50aW1lXEpTUHJvbWlzZUNvbnN0cnVjdG9yLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5ccnVudGltZVxKU1Byb21pc2VEZWZlcnJlZC5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXHJ1bnRpbWVcSlNQcm9taXNlRnVuY3Rpb25zLmgiIC8+DQorICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU1Byb21pc2VSZWFjdGlvbi5oIiAvPg0KKyAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNQcm9taXNlUHJvdG90eXBlLmgiIC8+DQorICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3Iu
aCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTUHJveHkuaCIgLz4N
CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTU2NvcGUuaCIgLz4NCisgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3Qu
aCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTU2V0LmgiIC8+DQor
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU1NldEl0ZXJhdG9yLmgiIC8+DQor
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU1N0cmluZy5oIiAvPg0KKyAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNTdHJpbmdCdWlsZGVyLmgiIC8+DQorICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU1N0cmluZ0pvaW5lci5oIiAvPg0KKyAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNTeW1ib2xUYWJsZU9iamVjdC5oIiAv
Pg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNUeXBlLmgiIC8+DQorICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU1R5cGVJbmZvLmgiIC8+DQorICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnMuaCIg
Lz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTVHlwZWRBcnJheVByb3Rv
dHlwZXMuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTVHlwZWRB
cnJheXMuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTVWludDE2
QXJyYXkuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTVWludDMy
QXJyYXkuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTVWludDhB
cnJheS5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNVaW50OENs
YW1wZWRBcnJheS5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNW
YXJpYWJsZU9iamVjdC5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVc
SlNXZWFrTWFwLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU1dp
dGhTY29wZS5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNXcmFw
cGVyT2JqZWN0LmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxMaXRl
cmFsUGFyc2VyLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxMb29r
dXAuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXE1hcENvbnN0cnVj
dG9yLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxNYXBEYXRhLmgi
IC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxNYXBJdGVyYXRvckNvbnN0
cnVjdG9yLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxNYXBJdGVy
YXRvclByb3RvdHlwZS5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVc
TWFwUHJvdG90eXBlLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxN
YXRjaFJlc3VsdC5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcTWF0
aE9iamVjdC5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcTWVtb3J5
U3RhdGlzdGljcy5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcTWlj
cm90YXNrLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxOYW1lQ29u
c3RydWN0b3IuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXE5hbWVJ
bnN0YW5jZS5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcTmFtZVBy
b3RvdHlwZS5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcTmF0aXZl
RXJyb3JDb25zdHJ1Y3Rvci5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRp
bWVcTmF0aXZlRXJyb3JQcm90b3R5cGUuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxydW50aW1lXE51bWJlckNvbnN0cnVjdG9yLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5ccnVudGltZVxOdW1iZXJPYmplY3QuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxydW50aW1lXE51bWJlclByb3RvdHlwZS5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXHJ1bnRpbWVcTnVtZXJpY1N0cmluZ3MuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxydW50aW1lXE9iamVjdENvbnN0cnVjdG9yLmgiIC8+DQorICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5ccnVudGltZVxPYmplY3RQcm90b3R5cGUuaCIgLz4NCisgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxydW50aW1lXE9wZXJhdGlvbnMuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxydW50aW1lXE9wdGlvbnMuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxydW50aW1lXFByaXZhdGVOYW1lLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5ccnVudGltZVxQcm9wZXJ0eURlc2NyaXB0b3IuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxydW50aW1lXFByb3BlcnR5TWFwSGFzaFRhYmxlLmgiIC8+DQorICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxQcm9wZXJ0eU5hbWUuaCIgLz4NCisgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxydW50aW1lXFByb3BlcnR5TmFtZUFycmF5LmgiIC8+DQorICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxQcm9wZXJ0eU9mZnNldC5oIiAvPg0KKyAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcUHJvcGVydHlTbG90LmgiIC8+DQorICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxQcm9wZXJ0eVN0b3JhZ2UuaCIgLz4NCisgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXFByb3RlY3QuaCIgLz4NCisgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxydW50aW1lXFByb3RvdHlwZU1hcC5oIiAvPg0KKyAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXHJ1bnRpbWVcUHV0RGlyZWN0SW5kZXhNb2RlLmgiIC8+DQorICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxQdXRQcm9wZXJ0eVNsb3QuaCIgLz4NCisgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXFJlZ0V4cC5oIiAvPg0KKyAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXHJ1bnRpbWVcUmVnRXhwQ2FjaGUuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxydW50aW1lXFJlZ0V4cENhY2hlZFJlc3VsdC5oIiAvPg0KKyAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcUmVnRXhwQ29uc3RydWN0b3IuaCIgLz4NCisgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXFJlZ0V4cEtleS5oIiAvPg0KKyAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcUmVnRXhwTWF0Y2hlc0FycmF5LmgiIC8+DQorICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxSZWdFeHBPYmplY3QuaCIgLz4NCisgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXFJlZ0V4cFByb3RvdHlwZS5oIiAvPg0KKyAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcUmVqZWN0LmgiIC8+DQorICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxTYW1wbGluZ0NvdW50ZXIuaCIgLz4NCisgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXFNldENvbnN0cnVjdG9yLmgiIC8+DQorICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxTZXRJdGVyYXRvckNvbnN0cnVjdG9yLmgiIC8+DQor
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxTZXRJdGVyYXRvclByb3RvdHlwZS5o
IiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcU2V0UHJvdG90eXBlLmgi
IC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxTaW1wbGVUeXBlZEFycmF5
Q29udHJvbGxlci5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcU21h
bGxTdHJpbmdzLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxTcGFy
c2VBcnJheVZhbHVlTWFwLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGlt
ZVxTdGFja0FsaWdubWVudC5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRp
bWVcU3RyaWN0RXZhbEFjdGl2YXRpb24uaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxydW50aW1lXFN0cmluZ0NvbnN0cnVjdG9yLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5ccnVudGltZVxTdHJpbmdPYmplY3QuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxydW50aW1lXFN0cmluZ1Byb3RvdHlwZS5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXHJ1bnRpbWVcU3RyaW5nUmVjdXJzaW9uQ2hlY2tlci5oIiAvPg0KKyAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcU3RydWN0dXJlLmgiIC8+DQorICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5ccnVudGltZVxTdHJ1Y3R1cmVDaGFpbi5oIiAvPg0KKyAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXHJ1bnRpbWVcU3RydWN0dXJlSURCbG9iLmgiIC8+DQorICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxTdHJ1Y3R1cmVJRFRhYmxlLmgiIC8+DQorICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxTdHJ1Y3R1cmVSYXJlRGF0YS5oIiAvPg0KKyAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcU3RydWN0dXJlUmFyZURhdGFJbmxpbmVzLmgi
IC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxTdHJ1Y3R1cmVUcmFuc2l0
aW9uVGFibGUuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXFN5bWJv
bFRhYmxlLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxUZXN0UnVu
bmVyVXRpbHMuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXFRyYWNp
bmcuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXFRvTmF0aXZlRnJv
bVZhbHVlLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxUeXBlZEFy
cmF5QWRhcHRvcnMuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXFR5
cGVkQXJyYXlDb250cm9sbGVyLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVu
dGltZVxUeXBlZEFycmF5SW5saW5lcy5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XHJ1bnRpbWVcVHlwZWRBcnJheVR5cGUuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxydW50aW1lXFR5cGVMb2NhdGlvbkNhY2hlLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5ccnVudGltZVxUeXBlU2V0LmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
cnVudGltZVxUeXBlZEFycmF5cy5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1
bnRpbWVcVWludDE2QXJyYXkuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50
aW1lXFVpbnQxNldpdGhGcmFjdGlvbi5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XHJ1bnRpbWVcVWludDMyQXJyYXkuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxy
dW50aW1lXFVpbnQ4QXJyYXkuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50
aW1lXFZNLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxWTUVudHJ5
U2NvcGUuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXFdhdGNoZG9n
LmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxXZWFrR0NNYXAuaCIg
Lz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXFdlYWtNYXBDb25zdHJ1Y3Rv
ci5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcV2Vha01hcERhdGEu
aCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXFdlYWtNYXBQcm90b3R5
cGUuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXFdlYWtSYW5kb20u
aCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXFdyaXRlQmFycmllci5o
IiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcV3JpdGVCYXJyaWVySW5s
aW5lcy5oIiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHRvb2xzXENvZGVQcm9maWxl
LmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cdG9vbHNcQ29kZVByb2ZpbGluZy5o
IiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHRvb2xzXFByb2ZpbGVUcmVlTm9kZS5o
IiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHRvb2xzXFRpZXJlZE1NYXBBcnJheS5o
IiAvPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHlhcnJcUmVndWxhckV4cHJlc3Npb24u
aCIgLz4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx5YXJyXFlhcnIuaCIgLz4NCisgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlx5YXJyXFlhcnJDYW5vbmljYWxpemVVQ1MyLmgiIC8+DQor
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ceWFyclxZYXJySW50ZXJwcmV0ZXIuaCIgLz4NCisg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx5YXJyXFlhcnJKSVQuaCIgLz4NCisgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlx5YXJyXFlhcnJQYXJzZXIuaCIgLz4NCisgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlx5YXJyXFlhcnJQYXR0ZXJuLmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5ceWFyclxZYXJyU3ludGF4Q2hlY2tlci5oIiAvPg0KKyAgPC9JdGVtR3JvdXA+DQorICA8
SXRlbUdyb3VwPg0KKyAgICA8Tm9uZSBJbmNsdWRlPSIuLlxieXRlY29kZVxCeXRlY29kZUxpc3Qu
anNvbiIgLz4NCisgICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXHNjcmlwdHNcY29kZWdl
blxnZW5lcmF0ZV9iYWNrZW5kX2NvbW1hbmRzLnB5IiAvPg0KKyAgICA8Tm9uZSBJbmNsdWRlPSIu
LlxpbnNwZWN0b3Jcc2NyaXB0c1xjb2RlZ2VuXGdlbmVyYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9o
ZWFkZXIucHkiIC8+DQorICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3RvclxzY3JpcHRzXGNv
ZGVnZW5cZ2VuZXJhdGVfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5IiAvPg0K
KyAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3Jcc2NyaXB0c1xjb2RlZ2VuXGdlbmVyYXRl
X2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5IiAvPg0KKyAgICA8Tm9uZSBJbmNsdWRlPSIu
LlxpbnNwZWN0b3Jcc2NyaXB0c1xjb2RlZ2VuXGdlbmVyYXRlX2Zyb250ZW5kX2Rpc3BhdGNoZXJf
aW1wbGVtZW50YXRpb24ucHkiIC8+DQorICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rvclxz
Y3JpcHRzXGNvZGVnZW5cZ2VuZXJhdGVfdHlwZV9idWlsZGVyX2hlYWRlci5weSIgLz4NCisgICAg
PE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXHNjcmlwdHNcY29kZWdlblxnZW5lcmF0ZV90eXBl
X2J1aWxkZXJfaW1wbGVtZW50YXRpb24ucHkiIC8+DQorICAgIDxOb25lIEluY2x1ZGU9Ii4uXGlu
c3BlY3RvclxzY3JpcHRzXGNvZGVnZW5cZ2VuZXJhdG9yLnB5IiAvPg0KKyAgICA8Tm9uZSBJbmNs
dWRlPSIuLlxpbnNwZWN0b3Jcc2NyaXB0c1xjb2RlZ2VuXGdlbmVyYXRvcl90ZW1wbGF0ZXMucHki
IC8+DQorICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3RvclxzY3JpcHRzXGNvZGVnZW5cbW9k
ZWxzLnB5IiAvPg0KKyAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3Jcc2NyaXB0c1xjb2Rl
Z2VuXF9faW5pdF9fLnB5IiAvPg0KKyAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3Jcc2Ny
aXB0c1xjc3NtaW4ucHkiIC8+DQorICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3RvclxzY3Jp
cHRzXGdlbmVyYXRlLWNvbWJpbmVkLWluc3BlY3Rvci1qc29uLnB5IiAvPg0KKyAgICA8Tm9uZSBJ
bmNsdWRlPSIuLlxpbnNwZWN0b3Jcc2NyaXB0c1xnZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wt
YmluZGluZ3MucHkiIC8+DQorICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3RvclxzY3JpcHRz
XGlubGluZS1hbmQtbWluaWZ5LXN0eWxlc2hlZXRzLWFuZC1zY3JpcHRzLnB5IiAvPg0KKyAgICA8
Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3Jcc2NyaXB0c1xqc21pbi5weSIgLz4NCisgICAgPE5v
bmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXHNjcmlwdHNcdGVzdHNcY29tbWFuZHMtd2l0aC1hc3lu
Yy1hdHRyaWJ1dGUuanNvbiIgLz4NCisgICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXHNj
cmlwdHNcdGVzdHNcY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJz
Lmpzb24iIC8+DQorICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3RvclxzY3JpcHRzXHRlc3Rz
XGRvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbiIgLz4NCisgICAgPE5vbmUg
SW5jbHVkZT0iLi5caW5zcGVjdG9yXHNjcmlwdHNcdGVzdHNcZXZlbnRzLXdpdGgtb3B0aW9uYWwt
cGFyYW1ldGVycy5qc29uIiAvPg0KKyAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3Jcc2Ny
aXB0c1x0ZXN0c1xleHBlY3RlZFxjb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uLXJl
c3VsdCIgLz4NCisgICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXHNjcmlwdHNcdGVzdHNc
ZXhwZWN0ZWRcY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpz
b24tcmVzdWx0IiAvPg0KKyAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3Jcc2NyaXB0c1x0
ZXN0c1xleHBlY3RlZFxkb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24tcmVz
dWx0IiAvPg0KKyAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3Jcc2NyaXB0c1x0ZXN0c1xl
eHBlY3RlZFxldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0IiAvPg0K
KyAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3Jcc2NyaXB0c1x0ZXN0c1xleHBlY3RlZFxm
YWlsLW9uLWR1cGxpY2F0ZS10eXBlLWRlY2xhcmF0aW9ucy5qc29uLWVycm9yIiAvPg0KKyAgICA8
Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3Jcc2NyaXB0c1x0ZXN0c1xleHBlY3RlZFxmYWlsLW9u
LWVudW0td2l0aC1uby12YWx1ZXMuanNvbi1lcnJvciIgLz4NCisgICAgPE5vbmUgSW5jbHVkZT0i
Li5caW5zcGVjdG9yXHNjcmlwdHNcdGVzdHNcZXhwZWN0ZWRcZmFpbC1vbi1zdHJpbmctdHlwZWQt
b3B0aW9uYWwtcGFyYW1ldGVyLWZsYWcuanNvbi1lcnJvciIgLz4NCisgICAgPE5vbmUgSW5jbHVk
ZT0iLi5caW5zcGVjdG9yXHNjcmlwdHNcdGVzdHNcZXhwZWN0ZWRcZmFpbC1vbi1zdHJpbmctdHlw
ZWQtb3B0aW9uYWwtdHlwZS1tZW1iZXIuanNvbi1lcnJvciIgLz4NCisgICAgPE5vbmUgSW5jbHVk
ZT0iLi5caW5zcGVjdG9yXHNjcmlwdHNcdGVzdHNcZXhwZWN0ZWRcZmFpbC1vbi10eXBlLWRlY2xh
cmF0aW9uLXVzaW5nLXR5cGUtcmVmZXJlbmNlLmpzb24tZXJyb3IiIC8+DQorICAgIDxOb25lIElu
Y2x1ZGU9Ii4uXGluc3BlY3RvclxzY3JpcHRzXHRlc3RzXGV4cGVjdGVkXGZhaWwtb24tdHlwZS13
aXRoLWxvd2VyY2FzZS1uYW1lLmpzb24tZXJyb3IiIC8+DQorICAgIDxOb25lIEluY2x1ZGU9Ii4u
XGluc3BlY3RvclxzY3JpcHRzXHRlc3RzXGV4cGVjdGVkXGZhaWwtb24tdW5rbm93bi10eXBlLXJl
ZmVyZW5jZS1pbi10eXBlLWRlY2xhcmF0aW9uLmpzb24tZXJyb3IiIC8+DQorICAgIDxOb25lIElu
Y2x1ZGU9Ii4uXGluc3BlY3RvclxzY3JpcHRzXHRlc3RzXGV4cGVjdGVkXGZhaWwtb24tdW5rbm93
bi10eXBlLXJlZmVyZW5jZS1pbi10eXBlLW1lbWJlci5qc29uLWVycm9yIiAvPg0KKyAgICA8Tm9u
ZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3Jcc2NyaXB0c1x0ZXN0c1xleHBlY3RlZFxzYW1lLXR5cGUt
aWQtZGlmZmVyZW50LWRvbWFpbi5qc29uLXJlc3VsdCIgLz4NCisgICAgPE5vbmUgSW5jbHVkZT0i
Li5caW5zcGVjdG9yXHNjcmlwdHNcdGVzdHNcZXhwZWN0ZWRcc2hhZG93ZWQtb3B0aW9uYWwtdHlw
ZS1zZXR0ZXJzLmpzb24tcmVzdWx0IiAvPg0KKyAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0
b3Jcc2NyaXB0c1x0ZXN0c1xleHBlY3RlZFx0eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0
aXZlLXR5cGUuanNvbi1yZXN1bHQiIC8+DQorICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3Rv
clxzY3JpcHRzXHRlc3RzXGV4cGVjdGVkXHR5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29u
LXJlc3VsdCIgLz4NCisgICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXHNjcmlwdHNcdGVz
dHNcZXhwZWN0ZWRcdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbi1yZXN1bHQiIC8+DQor
ICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3RvclxzY3JpcHRzXHRlc3RzXGV4cGVjdGVkXHR5
cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbi1yZXN1bHQiIC8+DQorICAgIDxOb25lIElu
Y2x1ZGU9Ii4uXGluc3BlY3RvclxzY3JpcHRzXHRlc3RzXGV4cGVjdGVkXHR5cGUtcmVxdWlyaW5n
LXJ1bnRpbWUtY2FzdHMuanNvbi1yZXN1bHQiIC8+DQorICAgIDxOb25lIEluY2x1ZGU9Ii4uXGlu
c3BlY3RvclxzY3JpcHRzXHRlc3RzXGZhaWwtb24tZHVwbGljYXRlLXR5cGUtZGVjbGFyYXRpb25z
Lmpzb24iIC8+DQorICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3RvclxzY3JpcHRzXHRlc3Rz
XGZhaWwtb24tZW51bS13aXRoLW5vLXZhbHVlcy5qc29uIiAvPg0KKyAgICA8Tm9uZSBJbmNsdWRl
PSIuLlxpbnNwZWN0b3Jcc2NyaXB0c1x0ZXN0c1xmYWlsLW9uLXN0cmluZy10eXBlZC1vcHRpb25h
bC1wYXJhbWV0ZXItZmxhZy5qc29uIiAvPg0KKyAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0
b3Jcc2NyaXB0c1x0ZXN0c1xmYWlsLW9uLXN0cmluZy10eXBlZC1vcHRpb25hbC10eXBlLW1lbWJl
ci5qc29uIiAvPg0KKyAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3Jcc2NyaXB0c1x0ZXN0
c1xmYWlsLW9uLXR5cGUtZGVjbGFyYXRpb24tdXNpbmctdHlwZS1yZWZlcmVuY2UuanNvbiIgLz4N
CisgICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXHNjcmlwdHNcdGVzdHNcZmFpbC1vbi10
eXBlLXdpdGgtbG93ZXJjYXNlLW5hbWUuanNvbiIgLz4NCisgICAgPE5vbmUgSW5jbHVkZT0iLi5c
aW5zcGVjdG9yXHNjcmlwdHNcdGVzdHNcZmFpbC1vbi11bmtub3duLXR5cGUtcmVmZXJlbmNlLWlu
LXR5cGUtZGVjbGFyYXRpb24uanNvbiIgLz4NCisgICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVj
dG9yXHNjcmlwdHNcdGVzdHNcZmFpbC1vbi11bmtub3duLXR5cGUtcmVmZXJlbmNlLWluLXR5cGUt
bWVtYmVyLmpzb24iIC8+DQorICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3RvclxzY3JpcHRz
XHRlc3RzXHNhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24iIC8+DQorICAgIDxOb25l
IEluY2x1ZGU9Ii4uXGluc3BlY3RvclxzY3JpcHRzXHRlc3RzXHNoYWRvd2VkLW9wdGlvbmFsLXR5
cGUtc2V0dGVycy5qc29uIiAvPg0KKyAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3Jcc2Ny
aXB0c1x0ZXN0c1x0eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbiIg
Lz4NCisgICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXHNjcmlwdHNcdGVzdHNcdHlwZS1k
ZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24iIC8+DQorICAgIDxOb25lIEluY2x1ZGU9Ii4uXGlu
c3BlY3RvclxzY3JpcHRzXHRlc3RzXHR5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24iIC8+
DQorICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3RvclxzY3JpcHRzXHRlc3RzXHR5cGUtZGVj
bGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbiIgLz4NCisgICAgPE5vbmUgSW5jbHVkZT0iLi5caW5z
cGVjdG9yXHNjcmlwdHNcdGVzdHNcdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uIiAv
Pg0KKyAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3Jcc2NyaXB0c1x4eGQucGwiIC8+DQor
ICAgIDxOb25lIEluY2x1ZGU9IkphdmFTY3JpcHRDb3JlUG9zdEJ1aWxkLmNtZCI+DQorICAgICAg
PEZpbGVUeXBlPkRvY3VtZW50PC9GaWxlVHlwZT4NCisgICAgPC9Ob25lPg0KKyAgICA8Tm9uZSBJ
bmNsdWRlPSJKYXZhU2NyaXB0Q29yZVByZUJ1aWxkLmNtZCI+DQorICAgICAgPEZpbGVUeXBlPkRv
Y3VtZW50PC9GaWxlVHlwZT4NCisgICAgPC9Ob25lPg0KKyAgICA8Tm9uZSBJbmNsdWRlPSJKYXZh
U2NyaXB0Q29yZVByZUxpbmsuY21kIj4NCisgICAgICA8RmlsZVR5cGU+RG9jdW1lbnQ8L0ZpbGVU
eXBlPg0KKyAgICA8L05vbmU+DQorICA8L0l0ZW1Hcm91cD4NCisgIDxJdGVtR3JvdXA+DQorICAg
IDxNQVNNIEluY2x1ZGU9IiQoQ29uZmlndXJhdGlvbkJ1aWxkRGlyKVxvYmokKFBsYXRmb3JtQXJj
aGl0ZWN0dXJlKVwkKFByb2plY3ROYW1lKVxEZXJpdmVkU291cmNlc1xMb3dMZXZlbEludGVycHJl
dGVyV2luLmFzbSI+DQorICAgICAgPFVzZVNhZmVFeGNlcHRpb25IYW5kbGVycyBDb25kaXRpb249
IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj50cnVlPC9V
c2VTYWZlRXhjZXB0aW9uSGFuZGxlcnM+DQorICAgICAgPFVzZVNhZmVFeGNlcHRpb25IYW5kbGVy
cyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1Byb2R1Y3Rpb258
V2luMzInIj50cnVlPC9Vc2VTYWZlRXhjZXB0aW9uSGFuZGxlcnM+DQorICAgICAgPFVzZVNhZmVF
eGNlcHRpb25IYW5kbGVycyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0p
Jz09J0RlYnVnfFdpbjMyJyI+dHJ1ZTwvVXNlU2FmZUV4Y2VwdGlvbkhhbmRsZXJzPg0KKyAgICAg
IDxVc2VTYWZlRXhjZXB0aW9uSGFuZGxlcnMgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwk
KFBsYXRmb3JtKSc9PSdEZWJ1Z1N1ZmZpeHxXaW4zMiciPnRydWU8L1VzZVNhZmVFeGNlcHRpb25I
YW5kbGVycz4NCisgICAgICA8VXNlU2FmZUV4Y2VwdGlvbkhhbmRsZXJzIENvbmRpdGlvbj0iJyQo
Q29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWdfV2luQ2Fpcm98V2luMzInIj50cnVl
PC9Vc2VTYWZlRXhjZXB0aW9uSGFuZGxlcnM+DQorICAgICAgPFVzZVNhZmVFeGNlcHRpb25IYW5k
bGVycyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2Vf
V2luQ2Fpcm98V2luMzInIj50cnVlPC9Vc2VTYWZlRXhjZXB0aW9uSGFuZGxlcnM+DQorICAgIDwv
TUFTTT4NCisgICAgPE1BU00gSW5jbHVkZT0iLi5caml0XEpJVFN0dWJzTVNWQzY0LmFzbSI+DQor
ICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQ
bGF0Zm9ybSknPT0nRGVidWdfV2luQ2Fpcm98V2luMzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWls
ZD4NCisgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9u
KXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPg0K
KyAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQo
UGxhdGZvcm0pJz09J0RlYnVnU3VmZml4fFdpbjMyJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+
DQorICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8
JChQbGF0Zm9ybSknPT0nUmVsZWFzZV9XaW5DYWlyb3xXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJv
bUJ1aWxkPg0KKyAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3Vy
YXRpb24pfCQoUGxhdGZvcm0pJz09J1Byb2R1Y3Rpb258V2luMzInIj50cnVlPC9FeGNsdWRlZEZy
b21CdWlsZD4NCisgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1
cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+dHJ1ZTwvRXhjbHVkZWRGcm9t
QnVpbGQ+DQorICAgIDwvTUFTTT4NCisgIDwvSXRlbUdyb3VwPg0KKyAgPEltcG9ydCBQcm9qZWN0
PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAudGFyZ2V0cyIgLz4NCisgIDxJbXBvcnRH
cm91cCBMYWJlbD0iRXh0ZW5zaW9uVGFyZ2V0cyI+DQorICAgIDxJbXBvcnQgUHJvamVjdD0iJChW
Q1RhcmdldHNQYXRoKVxCdWlsZEN1c3RvbWl6YXRpb25zXG1hc20udGFyZ2V0cyIgLz4NCisgIDwv
SW1wb3J0R3JvdXA+DQogPC9Qcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0ph
dmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVycyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVycwppbmRleCA0
ZjRhOWJhZTViOTlkNWZjZTQxODVlNzIxZGU3MWY0NDNkMDE0OWUxLi5iY2ZmY2Y1ODZmNjE2ZTVh
MTU1NWM4N2ViNDBhOGE0MjNmODY2MDU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnMK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNj
cmlwdENvcmUudmN4cHJvai5maWx0ZXJzCkBAIC0xLDQwNTMgKzEsNDIzMCBAQAot77u/PD94bWwg
dmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTxQcm9qZWN0IFRvb2xzVmVyc2lvbj0i
NC4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWls
ZC8yMDAzIj4KLSAgPEl0ZW1Hcm91cD4KLSAgICA8RmlsdGVyIEluY2x1ZGU9ImFzc2VtYmxlciI+
Ci0gICAgICA8VW5pcXVlSWRlbnRpZmllcj57NDI5NzgzYTEtNWQ2YS00MDE5LWFkMWEtZGRiMmM5
OGY5YjZjfTwvVW5pcXVlSWRlbnRpZmllcj4KLSAgICA8L0ZpbHRlcj4KLSAgICA8RmlsdGVyIElu
Y2x1ZGU9ImJpbmRpbmdzIj4KLSAgICAgIDxVbmlxdWVJZGVudGlmaWVyPnswYmFjZTEyMy00NTgy
LWVlYmMtOTMxNC03ODE5YjM3NmMxOTh9PC9VbmlxdWVJZGVudGlmaWVyPgotICAgIDwvRmlsdGVy
PgotICAgIDxGaWx0ZXIgSW5jbHVkZT0iYnVpbHRpbnMiPgotICAgICAgPFVuaXF1ZUlkZW50aWZp
ZXI+ezNiOWQ3MmE1LTEzNWItNDNiMy1hNTI0LWM2ZDJiOWQyOWQzNX08L1VuaXF1ZUlkZW50aWZp
ZXI+Ci0gICAgPC9GaWx0ZXI+Ci0gICAgPEZpbHRlciBJbmNsdWRlPSJieXRlY29kZSI+Ci0gICAg
ICA8VW5pcXVlSWRlbnRpZmllcj57NzY2MDg4YTAtMTIxNi00ODU0LWFhNDMtNTYwYzVlMjgzNjY4
fTwvVW5pcXVlSWRlbnRpZmllcj4KLSAgICA8L0ZpbHRlcj4KLSAgICA8RmlsdGVyIEluY2x1ZGU9
ImJ5dGVjb2RlY29tcGlsZXIiPgotICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+e2JkZGQxNTNlLThj
NTMtNDUxNS1hYjllLTVkOTAxNjg2YmQ0Zn08L1VuaXF1ZUlkZW50aWZpZXI+Ci0gICAgPC9GaWx0
ZXI+Ci0gICAgPEZpbHRlciBJbmNsdWRlPSJkZWJ1Z2dlciI+Ci0gICAgICA8VW5pcXVlSWRlbnRp
Zmllcj57NmUwY2IzNTgtMmZlNy00NmE0LThlZmQtZjY2NDljZWU2MzcwfTwvVW5pcXVlSWRlbnRp
Zmllcj4KLSAgICA8L0ZpbHRlcj4KLSAgICA8RmlsdGVyIEluY2x1ZGU9IkRlcml2ZWQgU291cmNl
cyI+Ci0gICAgICA8VW5pcXVlSWRlbnRpZmllcj57OWY3NDY5YmItNzgzMy00Mjc5LThkMjgtMmZj
NzFjNjMyNTUyfTwvVW5pcXVlSWRlbnRpZmllcj4KLSAgICA8L0ZpbHRlcj4KLSAgICA8RmlsdGVy
IEluY2x1ZGU9ImRmZyI+Ci0gICAgICA8VW5pcXVlSWRlbnRpZmllcj57NmM4MjUzOWQtNDBkMi00
NWE1LWE2NjMtODM0OWMyMTQxYjFhfTwvVW5pcXVlSWRlbnRpZmllcj4KLSAgICA8L0ZpbHRlcj4K
LSAgICA8RmlsdGVyIEluY2x1ZGU9ImRpc2Fzc2VtYmxlciI+Ci0gICAgICA8VW5pcXVlSWRlbnRp
Zmllcj57OTQwZjc0OWItYTE4OS00NWJlLTgzYjktYjRlNzRlY2YxNDg2fTwvVW5pcXVlSWRlbnRp
Zmllcj4KLSAgICA8L0ZpbHRlcj4KLSAgICA8RmlsdGVyIEluY2x1ZGU9ImhlYXAiPgotICAgICAg
PFVuaXF1ZUlkZW50aWZpZXI+e2JkNDllNWNmLTk1ZDYtNDE1MS1iMjg2LTg4MzdjY2QzNDdmYX08
L1VuaXF1ZUlkZW50aWZpZXI+Ci0gICAgPC9GaWx0ZXI+Ci0gICAgPEZpbHRlciBJbmNsdWRlPSJp
bnNwZWN0b3IiPgotICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+ezA5YWUwOWRhLTEyMzktMDBlYS04
ZGZlLTkwODdhZTEyM2JiZX08L1VuaXF1ZUlkZW50aWZpZXI+Ci0gICAgPC9GaWx0ZXI+Ci0gICAg
PEZpbHRlciBJbmNsdWRlPSJpbnRlcnByZXRlciI+Ci0gICAgICA8VW5pcXVlSWRlbnRpZmllcj57
MTBkOTdlYTMtMmFmOS00ODljLWE1NGUtZDY5ZWYyZTRjYTBhfTwvVW5pcXVlSWRlbnRpZmllcj4K
LSAgICA8L0ZpbHRlcj4KLSAgICA8RmlsdGVyIEluY2x1ZGU9ImppdCI+Ci0gICAgICA8VW5pcXVl
SWRlbnRpZmllcj57OTRkN2ViNjQtM2U1MS00MDA4LTg1MzYtMGJjYjY3NjhiYTlmfTwvVW5pcXVl
SWRlbnRpZmllcj4KLSAgICA8L0ZpbHRlcj4KLSAgICA8RmlsdGVyIEluY2x1ZGU9ImxsaW50Ij4K
LSAgICAgIDxVbmlxdWVJZGVudGlmaWVyPns2M2UzZGQ5Mi03ZWE5LTQ3MjMtYjA5OS02Yzc5YTkz
OWRlYzB9PC9VbmlxdWVJZGVudGlmaWVyPgotICAgIDwvRmlsdGVyPgotICAgIDxGaWx0ZXIgSW5j
bHVkZT0icGFyc2VyIj4KLSAgICAgIDxVbmlxdWVJZGVudGlmaWVyPntlNmEwMjZhNC0xNTZhLTRh
NTktOWUzZi1lOGI1NGU2NjU4NDF9PC9VbmlxdWVJZGVudGlmaWVyPgotICAgIDwvRmlsdGVyPgot
ICAgIDxGaWx0ZXIgSW5jbHVkZT0icHJvZmlsZXIiPgotICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+
ezM1MWRjYmQyLWU0N2UtNDQ2Ny04NjA5LTUzYWNmY2U3MmY5MX08L1VuaXF1ZUlkZW50aWZpZXI+
Ci0gICAgPC9GaWx0ZXI+Ci0gICAgPEZpbHRlciBJbmNsdWRlPSJydW50aW1lIj4KLSAgICAgIDxV
bmlxdWVJZGVudGlmaWVyPnszYjlkNzJhNS0xMzViLTQzYjMtYTUyNC1jNmQyYjlkMjlkMzR9PC9V
bmlxdWVJZGVudGlmaWVyPgotICAgIDwvRmlsdGVyPgotICAgIDxGaWx0ZXIgSW5jbHVkZT0idG9v
bHMiPgotICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+ezAzZWRhM2VjLWJjYjItNDQ3NC1iMWIzLTY5
YWQ3NzE4NDZhNH08L1VuaXF1ZUlkZW50aWZpZXI+Ci0gICAgPC9GaWx0ZXI+Ci0gICAgPEZpbHRl
ciBJbmNsdWRlPSJ5YXJyIj4KLSAgICAgIDxVbmlxdWVJZGVudGlmaWVyPntmYWM1MjY2Ni04NDJl
LTRkMDItOWQ1Zi04NDRmNTRkY2E1Zjd9PC9VbmlxdWVJZGVudGlmaWVyPgotICAgIDwvRmlsdGVy
PgotICAgIDxGaWx0ZXIgSW5jbHVkZT0iQVBJIj4KLSAgICAgIDxVbmlxdWVJZGVudGlmaWVyPns5
ZWQwYmM2ZS03MzcyLTQ3OTUtOTY1MS05MTdjOWUwNWM2NDF9PC9VbmlxdWVJZGVudGlmaWVyPgot
ICAgIDwvRmlsdGVyPgotICAgIDxGaWx0ZXIgSW5jbHVkZT0iZnRsIj4KLSAgICAgIDxVbmlxdWVJ
ZGVudGlmaWVyPns1MjUyYWRjOS1mMjZhLTRmNzYtYTA3OS1mNjIyMmIzM2U0Yjh9PC9VbmlxdWVJ
ZGVudGlmaWVyPgotICAgIDwvRmlsdGVyPgotICAgIDxGaWx0ZXIgSW5jbHVkZT0ibGx2bSI+Ci0g
ICAgICA8VW5pcXVlSWRlbnRpZmllcj57ODUyZTk0MTUtMjQ1Yy00MDEyLWFlYjgtMzhjYTllZmI3
M2I4fTwvVW5pcXVlSWRlbnRpZmllcj4KLSAgICA8L0ZpbHRlcj4KLSAgPC9JdGVtR3JvdXA+Ci0g
IDxJdGVtR3JvdXA+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxBUElcSlNCYXNlLmNwcCI+
Ci0gICAgICA8RmlsdGVyPkFQSTwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5cQVBJXEpTQ2FsbGJhY2tDb25zdHJ1Y3Rvci5jcHAiPgotICAgICAg
PEZpbHRlcj5BUEk8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXEFQSVxKU0NhbGxiYWNrRnVuY3Rpb24uY3BwIj4KLSAgICAgIDxGaWx0ZXI+QVBJ
PC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxB
UElcSlNDYWxsYmFja09iamVjdC5jcHAiPgotICAgICAgPEZpbHRlcj5BUEk8L0ZpbHRlcj4KLSAg
ICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXEFQSVxKU0NsYXNzUmVm
LmNwcCI+Ci0gICAgICA8RmlsdGVyPkFQSTwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cQVBJXEpTQ29udGV4dFJlZi5jcHAiPgotICAgICAgPEZp
bHRlcj5BUEk8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXEFQSVxKU09iamVjdFJlZi5jcHAiPgotICAgICAgPEZpbHRlcj5BUEk8L0ZpbHRlcj4K
LSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXEFQSVxKU1Njcmlw
dFJlZi5jcHAiPgotICAgICAgPEZpbHRlcj5BUEk8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4K
LSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXEFQSVxKU1N0cmluZ1JlZi5jcHAiPgotICAgICAg
PEZpbHRlcj5BUEk8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXEFQSVxKU1N0cmluZ1JlZkJTVFIuY3BwIj4KLSAgICAgIDxGaWx0ZXI+QVBJPC9G
aWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxBUElc
SlNTdHJpbmdSZWZDRi5jcHAiPgotICAgICAgPEZpbHRlcj5BUEk8L0ZpbHRlcj4KLSAgICA8L0Ns
Q29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXEFQSVxKU1ZhbHVlUmVmLmNwcCI+
Ci0gICAgICA8RmlsdGVyPkFQSTwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5cQVBJXEpTV2Vha09iamVjdE1hcFJlZlByaXZhdGUuY3BwIj4KLSAg
ICAgIDxGaWx0ZXI+QVBJPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxBUElcT3BhcXVlSlNTdHJpbmcuY3BwIj4KLSAgICAgIDxGaWx0ZXI+QVBJ
PC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxh
c3NlbWJsZXJcTGlua0J1ZmZlci5jcHAiPgotICAgICAgPEZpbHRlcj5hc3NlbWJsZXI8L0ZpbHRl
cj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGFzc2VtYmxl
clxNYWNyb0Fzc2VtYmxlci5jcHAiPgotICAgICAgPEZpbHRlcj5hc3NlbWJsZXI8L0ZpbHRlcj4K
LSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ1aWx0aW5zXEJ1
aWx0aW5FeGVjdXRhYmxlcy5jcHAiPgotICAgICAgPEZpbHRlcj5idWlsdGluczwvRmlsdGVyPgot
ICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcQXJy
YXlBbGxvY2F0aW9uUHJvZmlsZS5jcHAiPgotICAgICAgPEZpbHRlcj5ieXRlY29kZTwvRmlsdGVy
PgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVc
QXJyYXlQcm9maWxlLmNwcCI+Ci0gICAgICA8RmlsdGVyPmJ5dGVjb2RlPC9GaWx0ZXI+Ci0gICAg
PC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxCeXRlY29k
ZUJhc2ljQmxvY2suY3BwIj4KLSAgICAgIDxGaWx0ZXI+Ynl0ZWNvZGU8L0ZpbHRlcj4KLSAgICA8
L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXEJ5dGVjb2Rl
TGl2ZW5lc3NBbmFseXNpcy5jcHAiPgotICAgICAgPEZpbHRlcj5ieXRlY29kZTwvRmlsdGVyPgot
ICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcQ2Fs
bExpbmtJbmZvLmNwcCI+Ci0gICAgICA8RmlsdGVyPmJ5dGVjb2RlPC9GaWx0ZXI+Ci0gICAgPC9D
bENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxDYWxsTGlua1N0
YXR1cy5jcHAiPgotICAgICAgPEZpbHRlcj5ieXRlY29kZTwvRmlsdGVyPgotICAgIDwvQ2xDb21w
aWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcQ29kZUJsb2NrLmNwcCI+
Ci0gICAgICA8RmlsdGVyPmJ5dGVjb2RlPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxDb2RlQmxvY2tIYXNoLmNwcCI+Ci0gICAg
ICA8RmlsdGVyPmJ5dGVjb2RlPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxDb2RlT3JpZ2luLmNwcCI+Ci0gICAgICA8RmlsdGVy
PmJ5dGVjb2RlPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxieXRlY29kZVxDb2RlVHlwZS5jcHAiPgotICAgICAgPEZpbHRlcj5ieXRlY29kZTwv
RmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0
ZWNvZGVcRXhlY3V0aW9uQ291bnRlci5jcHAiPgotICAgICAgPEZpbHRlcj5ieXRlY29kZTwvRmls
dGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNv
ZGVcRXhpdEtpbmQuY3BwIj4KLSAgICAgIDxGaWx0ZXI+Ynl0ZWNvZGU8L0ZpbHRlcj4KLSAgICA8
L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXEdldEJ5SWRT
dGF0dXMuY3BwIj4KLSAgICAgIDxGaWx0ZXI+Ynl0ZWNvZGU8L0ZpbHRlcj4KLSAgICA8L0NsQ29t
cGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXEp1bXBUYWJsZS5jcHAi
PgotICAgICAgPEZpbHRlcj5ieXRlY29kZTwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUu
Y3BwIj4KLSAgICAgIDxGaWx0ZXI+Ynl0ZWNvZGU8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4K
LSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXE1ldGhvZE9mR2V0dGluZ0FWYWx1
ZVByb2ZpbGUuY3BwIj4KLSAgICAgIDxGaWx0ZXI+Ynl0ZWNvZGU8L0ZpbHRlcj4KLSAgICA8L0Ns
Q29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXE9wY29kZS5jcHAi
PgotICAgICAgPEZpbHRlcj5ieXRlY29kZTwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5j
cHAiPgotICAgICAgPEZpbHRlcj5ieXRlY29kZTwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgot
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcUHV0QnlJZFN0YXR1cy5jcHAiPgot
ICAgICAgPEZpbHRlcj5ieXRlY29kZTwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcUmVkdWNlV2hpdGVzcGFjZS5jcHAiPgotICAg
ICAgPEZpbHRlcj5ieXRlY29kZTwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcU2FtcGxpbmdUb29sLmNwcCI+Ci0gICAgICA8Rmls
dGVyPmJ5dGVjb2RlPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxieXRlY29kZVxTcGVjaWFsUG9pbnRlci5jcHAiPgotICAgICAgPEZpbHRlcj5i
eXRlY29kZTwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cYnl0ZWNvZGVcU3BlY3VsYXRlZFR5cGUuY3BwIj4KLSAgICAgIDxGaWx0ZXI+Ynl0ZWNv
ZGU8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XGJ5dGVjb2RlXFN0cnVjdHVyZVN0dWJDbGVhcmluZ1dhdGNocG9pbnQuY3BwIj4KLSAgICAgIDxG
aWx0ZXI+Ynl0ZWNvZGU8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFN0cnVjdHVyZVN0dWJJbmZvLmNwcCI+Ci0gICAgICA8Rmls
dGVyPmJ5dGVjb2RlPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxieXRlY29kZVxVbmxpbmtlZENvZGVCbG9jay5jcHAiPgotICAgICAgPEZpbHRl
cj5ieXRlY29kZTwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5cYnl0ZWNvZGVcVW5saW5rZWRJbnN0cnVjdGlvblN0cmVhbS5jcHAiPgotICAgICAg
PEZpbHRlcj5ieXRlY29kZTwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcV2F0Y2hwb2ludC5jcHAiPgotICAgICAgPEZpbHRlcj5i
eXRlY29kZTwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cYnl0ZWNvbXBpbGVyXEJ5dGVjb2RlR2VuZXJhdG9yLmNwcCI+Ci0gICAgICA8RmlsdGVy
PmJ5dGVjb2RlY29tcGlsZXI8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb21waWxlclxOb2Rlc0NvZGVnZW4uY3BwIj4KLSAgICAgIDxG
aWx0ZXI+Ynl0ZWNvZGVjb21waWxlcjwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5cZGVidWdnZXJcRGVidWdnZXIuY3BwIj4KLSAgICAgIDxGaWx0
ZXI+ZGVidWdnZXI8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXGRlYnVnZ2VyXERlYnVnZ2VyQ2FsbEZyYW1lLmNwcCI+Ci0gICAgICA8RmlsdGVy
PmRlYnVnZ2VyPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxkZWJ1Z2dlclxEZWJ1Z2dlclNjb3BlLmNwcCI+Ci0gICAgICA8RmlsdGVyPmRlYnVn
Z2VyPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxkaXNhc3NlbWJsZXJcRGlzYXNzZW1ibGVyLmNwcCI+Ci0gICAgICA8RmlsdGVyPmRpc2Fzc2Vt
YmxlcjwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5caGVhcFxCbG9ja0FsbG9jYXRvci5jcHAiPgotICAgICAgPEZpbHRlcj5oZWFwPC9GaWx0ZXI+
Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxoZWFwXENvbnNl
cnZhdGl2ZVJvb3RzLmNwcCI+Ci0gICAgICA8RmlsdGVyPmhlYXA8L0ZpbHRlcj4KLSAgICA8L0Ns
Q29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGhlYXBcQ29waWVkU3BhY2UuY3Bw
Ij4KLSAgICAgIDxGaWx0ZXI+aGVhcDwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5caGVhcFxDb3B5VmlzaXRvci5jcHAiPgotICAgICAgPEZpbHRl
cj5oZWFwPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxoZWFwXEVkZW5HQ0FjdGl2aXR5Q2FsbGJhY2suY3BwIj4KLSAgICAgIDxGaWx0ZXI+aGVh
cDwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
aGVhcFxGdWxsR0NBY3Rpdml0eUNhbGxiYWNrLmNwcCI+Ci0gICAgICA8RmlsdGVyPmhlYXA8L0Zp
bHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGhlYXBc
R0NBY3Rpdml0eUNhbGxiYWNrLmNwcCI+Ci0gICAgICA8RmlsdGVyPmhlYXA8L0ZpbHRlcj4KLSAg
ICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGhlYXBcR0NMb2dnaW5n
LmNwcCI+Ci0gICAgICA8RmlsdGVyPmhlYXA8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGhlYXBcR0NUaHJlYWQuY3BwIj4KLSAgICAgIDxGaWx0
ZXI+aGVhcDwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5caGVhcFxHQ1RocmVhZFNoYXJlZERhdGEuY3BwIj4KLSAgICAgIDxGaWx0ZXI+aGVhcDwv
RmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caGVh
cFxIYW5kbGVTZXQuY3BwIj4KLSAgICAgIDxGaWx0ZXI+aGVhcDwvRmlsdGVyPgotICAgIDwvQ2xD
b21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caGVhcFxIYW5kbGVTdGFjay5jcHAi
PgotICAgICAgPEZpbHRlcj5oZWFwPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxoZWFwXEhlYXAuY3BwIj4KLSAgICAgIDxGaWx0ZXI+aGVhcDwv
RmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caGVh
cFxIZWFwU3RhdGlzdGljcy5jcHAiPgotICAgICAgPEZpbHRlcj5oZWFwPC9GaWx0ZXI+Ci0gICAg
PC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxoZWFwXEhlYXBUaW1lci5j
cHAiPgotICAgICAgPEZpbHRlcj5oZWFwPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxoZWFwXEluY3JlbWVudGFsU3dlZXBlci5jcHAiPgotICAg
ICAgPEZpbHRlcj5oZWFwPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxoZWFwXEpJVFN0dWJSb3V0aW5lU2V0LmNwcCI+Ci0gICAgICA8RmlsdGVy
PmhlYXA8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXGhlYXBcTWFjaGluZVN0YWNrTWFya2VyLmNwcCI+Ci0gICAgICA8RmlsdGVyPmhlYXA8L0Zp
bHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGhlYXBc
TWFya2VkQWxsb2NhdG9yLmNwcCI+Ci0gICAgICA8RmlsdGVyPmhlYXA8L0ZpbHRlcj4KLSAgICA8
L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGhlYXBcTWFya2VkQmxvY2su
Y3BwIj4KLSAgICAgIDxGaWx0ZXI+aGVhcDwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caGVhcFxNYXJrZWRTcGFjZS5jcHAiPgotICAgICAgPEZp
bHRlcj5oZWFwPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxoZWFwXE1hcmtTdGFjay5jcHAiPgotICAgICAgPEZpbHRlcj5oZWFwPC9GaWx0ZXI+
Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxoZWFwXFNsb3RW
aXNpdG9yLmNwcCI+Ci0gICAgICA8RmlsdGVyPmhlYXA8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGls
ZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGhlYXBcU3VwZXJSZWdpb24uY3BwIj4KLSAg
ICAgIDxGaWx0ZXI+aGVhcDwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5caGVhcFxXZWFrLmNwcCI+Ci0gICAgICA8RmlsdGVyPmhlYXA8L0ZpbHRl
cj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGhlYXBcV2Vh
a0Jsb2NrLmNwcCI+Ci0gICAgICA8RmlsdGVyPmhlYXA8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGls
ZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGhlYXBcV2Vha0hhbmRsZU93bmVyLmNwcCI+
Ci0gICAgICA8RmlsdGVyPmhlYXA8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXGhlYXBcV2Vha1NldC5jcHAiPgotICAgICAgPEZpbHRlcj5oZWFw
PC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxo
ZWFwXFdyaXRlQmFycmllckJ1ZmZlci5jcHAiPgotICAgICAgPEZpbHRlcj5oZWFwPC9GaWx0ZXI+
Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxoZWFwXFdyaXRl
QmFycmllclN1cHBvcnQuY3BwIj4KLSAgICAgIDxGaWx0ZXI+aGVhcDwvRmlsdGVyPgotICAgIDwv
Q2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXENvbnRlbnRT
ZWFyY2hVdGlsaXRpZXMuY3BwIj4KLSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yPC9GaWx0ZXI+Ci0g
ICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcSW5z
cGVjdG9yQWdlbnRSZWdpc3RyeS5jcHAiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0b3I8L0ZpbHRl
cj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGluc3BlY3Rv
clxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5jcHAiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0
b3I8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XGluc3BlY3RvclxJbnNwZWN0b3JWYWx1ZXMuY3BwIj4KLSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9y
PC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxp
bnNwZWN0b3JcYWdlbnRzXEluc3BlY3RvckFnZW50LmNwcCI+Ci0gICAgICA8RmlsdGVyPmluc3Bl
Y3RvcjwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5caW5zcGVjdG9yXGFnZW50c1xJbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcCI+Ci0gICAgICA8
RmlsdGVyPmluc3BlY3RvcjwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGFnZW50c1xJbnNwZWN0b3JQcm9maWxlckFnZW50LmNw
cCI+Ci0gICAgICA8RmlsdGVyPmluc3BlY3RvcjwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgot
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGFnZW50c1xJbnNwZWN0b3JSdW50
aW1lQWdlbnQuY3BwIj4KLSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yPC9GaWx0ZXI+Ci0gICAgPC9D
bENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxpbnRlcnByZXRlclxBYnN0cmFj
dFBDLmNwcCI+Ci0gICAgICA8RmlsdGVyPmludGVycHJldGVyPC9GaWx0ZXI+Ci0gICAgPC9DbENv
bXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxpbnRlcnByZXRlclxDYWxsRnJhbWUu
Y3BwIj4KLSAgICAgIDxGaWx0ZXI+aW50ZXJwcmV0ZXI8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGls
ZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGludGVycHJldGVyXEludGVycHJldGVyLmNw
cCI+Ci0gICAgICA8RmlsdGVyPmludGVycHJldGVyPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+
Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxpbnRlcnByZXRlclxKU1N0YWNrLmNwcCI+Ci0g
ICAgICA8RmlsdGVyPmludGVycHJldGVyPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxpbnRlcnByZXRlclxQcm90b0NhbGxGcmFtZS5jcHAiPgot
ICAgICAgPEZpbHRlcj5pbnRlcnByZXRlcjwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caW50ZXJwcmV0ZXJcU3RhY2tWaXNpdG9yLmNwcCI+Ci0g
ICAgICA8RmlsdGVyPmludGVycHJldGVyPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxpbnRlcnByZXRlclxWTUluc3BlY3Rvci5jcHAiPgotICAg
ICAgPEZpbHRlcj5pbnRlcnByZXRlcjwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5caml0XENsb3N1cmVDYWxsU3R1YlJvdXRpbmUuY3BwIj4KLSAg
ICAgIDxGaWx0ZXI+aml0PC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxqaXRcRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAiPgotICAgICAgPEZpbHRl
cj5qaXQ8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXGppdFxHQ0F3YXJlSklUU3R1YlJvdXRpbmUuY3BwIj4KLSAgICAgIDxGaWx0ZXI+aml0PC9G
aWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxqaXRc
SG9zdENhbGxSZXR1cm5WYWx1ZS5jcHAiPgotICAgICAgPEZpbHRlcj5qaXQ8L0ZpbHRlcj4KLSAg
ICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxKSVQuY3BwIj4K
LSAgICAgIDxGaWx0ZXI+aml0PC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxqaXRcSklUQXJpdGhtZXRpYy5jcHAiPgotICAgICAgPEZpbHRlcj5q
aXQ8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XGppdFxKSVRBcml0aG1ldGljMzJfNjQuY3BwIj4KLSAgICAgIDxGaWx0ZXI+aml0PC9GaWx0ZXI+
Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxqaXRcSklUQ2Fs
bC5jcHAiPgotICAgICAgPEZpbHRlcj5qaXQ8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxKSVRDYWxsMzJfNjQuY3BwIj4KLSAgICAgIDxG
aWx0ZXI+aml0PC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxqaXRcSklUQ29kZS5jcHAiPgotICAgICAgPEZpbHRlcj5qaXQ8L0ZpbHRlcj4KLSAg
ICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxKSVREaXNhc3Nl
bWJsZXIuY3BwIj4KLSAgICAgIDxGaWx0ZXI+aml0PC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+
Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxqaXRcSklURXhjZXB0aW9ucy5jcHAiPgotICAg
ICAgPEZpbHRlcj5qaXQ8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXGppdFxKSVRPcGNvZGVzLmNwcCI+Ci0gICAgICA8RmlsdGVyPmppdDwvRmls
dGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caml0XEpJ
VE9wY29kZXMzMl82NC5jcHAiPgotICAgICAgPEZpbHRlcj5qaXQ8L0ZpbHRlcj4KLSAgICA8L0Ns
Q29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxKSVRQcm9wZXJ0eUFjY2Vz
cy5jcHAiPgotICAgICAgPEZpbHRlcj5qaXQ8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxKSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcCI+
Ci0gICAgICA8RmlsdGVyPmppdDwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5caml0XEpJVFN0dWJSb3V0aW5lLmNwcCI+Ci0gICAgICA8RmlsdGVy
PmppdDwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5caml0XEpJVFN0dWJzLmNwcCI+Ci0gICAgICA8RmlsdGVyPmppdDwvRmlsdGVyPgotICAgIDwv
Q2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caml0XEpJVFRodW5rcy5jcHAi
PgotICAgICAgPEZpbHRlcj5qaXQ8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXGppdFxUaHVua0dlbmVyYXRvcnMuY3BwIj4KLSAgICAgIDxGaWx0
ZXI+aml0PC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxsbGludFxMTEludENMb29wLmNwcCI+Ci0gICAgICA8RmlsdGVyPmxsaW50PC9GaWx0ZXI+
Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxsbGludFxMTElu
dERhdGEuY3BwIj4KLSAgICAgIDxGaWx0ZXI+bGxpbnQ8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGls
ZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGxsaW50XExMSW50RXhjZXB0aW9ucy5jcHAi
PgotICAgICAgPEZpbHRlcj5sbGludDwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5cbGxpbnRcTExJbnRPZmZzZXRzRXh0cmFjdG9yLmNwcCI+Ci0g
ICAgICA8RmlsdGVyPmxsaW50PC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxsbGludFxMTEludFNsb3dQYXRocy5jcHAiPgotICAgICAgPEZpbHRl
cj5sbGludDwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cbGxpbnRcTExJbnRUaHVua3MuY3BwIj4KLSAgICAgIDxGaWx0ZXI+bGxpbnQ8L0ZpbHRl
cj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGxsaW50XExv
d0xldmVsSW50ZXJwcmV0ZXIuY3BwIj4KLSAgICAgIDxGaWx0ZXI+bGxpbnQ8L0ZpbHRlcj4KLSAg
ICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBhcnNlclxMZXhlci5j
cHAiPgotICAgICAgPEZpbHRlcj5wYXJzZXI8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBhcnNlclxOb2Rlcy5jcHAiPgotICAgICAgPEZpbHRl
cj5wYXJzZXI8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXHBhcnNlclxQYXJzZXIuY3BwIj4KLSAgICAgIDxGaWx0ZXI+cGFyc2VyPC9GaWx0ZXI+
Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwYXJzZXJcUGFy
c2VyQXJlbmEuY3BwIj4KLSAgICAgIDxGaWx0ZXI+cGFyc2VyPC9GaWx0ZXI+Ci0gICAgPC9DbENv
bXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwYXJzZXJcU291cmNlUHJvdmlkZXJD
YWNoZS5jcHAiPgotICAgICAgPEZpbHRlcj5wYXJzZXI8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGls
ZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHByb2ZpbGVyXExlZ2FjeVByb2ZpbGVyLmNw
cCI+Ci0gICAgICA8RmlsdGVyPnByb2ZpbGVyPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0g
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwcm9maWxlclxQcm9maWxlLmNwcCI+Ci0gICAgICA8
RmlsdGVyPnByb2ZpbGVyPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxwcm9maWxlclxQcm9maWxlR2VuZXJhdG9yLmNwcCI+Ci0gICAgICA8Rmls
dGVyPnByb2ZpbGVyPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxwcm9maWxlclxQcm9maWxlTm9kZS5jcHAiPgotICAgICAgPEZpbHRlcj5wcm9m
aWxlcjwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5ccHJvZmlsZXJcUHJvZmlsZXJCeXRlY29kZS5jcHAiPgotICAgICAgPEZpbHRlcj5wcm9maWxl
cjwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
cHJvZmlsZXJcUHJvZmlsZXJCeXRlY29kZXMuY3BwIj4KLSAgICAgIDxGaWx0ZXI+cHJvZmlsZXI8
L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBy
b2ZpbGVyXFByb2ZpbGVyQnl0ZWNvZGVTZXF1ZW5jZS5jcHAiPgotICAgICAgPEZpbHRlcj5wcm9m
aWxlcjwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5ccHJvZmlsZXJcUHJvZmlsZXJDb21waWxhdGlvbi5jcHAiPgotICAgICAgPEZpbHRlcj5wcm9m
aWxlcjwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5ccHJvZmlsZXJcUHJvZmlsZXJDb21waWxhdGlvbktpbmQuY3BwIj4KLSAgICAgIDxGaWx0ZXI+
cHJvZmlsZXI8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXHByb2ZpbGVyXFByb2ZpbGVyQ29tcGlsZWRCeXRlY29kZS5jcHAiPgotICAgICAgPEZp
bHRlcj5wcm9maWxlcjwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5ccHJvZmlsZXJcUHJvZmlsZXJEYXRhYmFzZS5jcHAiPgotICAgICAgPEZpbHRl
cj5wcm9maWxlcjwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5ccHJvZmlsZXJcUHJvZmlsZXJPcmlnaW4uY3BwIj4KLSAgICAgIDxGaWx0ZXI+cHJv
ZmlsZXI8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXHByb2ZpbGVyXFByb2ZpbGVyT3JpZ2luU3RhY2suY3BwIj4KLSAgICAgIDxGaWx0ZXI+cHJv
ZmlsZXI8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXHByb2ZpbGVyXFByb2ZpbGVyT1NSRXhpdC5jcHAiPgotICAgICAgPEZpbHRlcj5wcm9maWxl
cjwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
cHJvZmlsZXJcUHJvZmlsZXJPU1JFeGl0U2l0ZS5jcHAiPgotICAgICAgPEZpbHRlcj5wcm9maWxl
cjwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
cHJvZmlsZXJcUHJvZmlsZXJQcm9maWxlZEJ5dGVjb2Rlcy5jcHAiPgotICAgICAgPEZpbHRlcj5w
cm9maWxlcjwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5ccnVudGltZVxBcnJheUJ1ZmZlci5jcHAiPgotICAgICAgPEZpbHRlcj5ydW50aW1lPC9G
aWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50
aW1lXEFycmF5QnVmZmVyVmlldy5jcHAiPgotICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+
Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEFy
Z0xpc3QuY3BwIj4KLSAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPgotICAgIDwvQ2xDb21w
aWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxBcmd1bWVudHMuY3BwIj4K
LSAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxBcnJheUNvbnN0cnVjdG9yLmNwcCI+Ci0gICAg
ICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcQXJyYXlQcm90b3R5cGUuY3BwIj4KLSAgICAgIDxGaWx0
ZXI+cnVudGltZTwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5ccnVudGltZVxCb29sZWFuQ29uc3RydWN0b3IuY3BwIj4KLSAgICAgIDxGaWx0ZXI+
cnVudGltZTwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5ccnVudGltZVxCb29sZWFuT2JqZWN0LmNwcCI+Ci0gICAgICA8RmlsdGVyPnJ1bnRpbWU8
L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1
bnRpbWVcQm9vbGVhblByb3RvdHlwZS5jcHAiPgotICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0
ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1l
XENhbGxEYXRhLmNwcCI+Ci0gICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KLSAgICA8L0Ns
Q29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcQ29kZUNhY2hlLmNw
cCI+Ci0gICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcQ29kZVNwZWNpYWxpemF0aW9uS2luZC5j
cHAiPgotICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0g
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXENvbW1vbklkZW50aWZpZXJzLmNwcCI+
Ci0gICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcQ29tcGxldGlvbi5jcHAiPgotICAgICAgPEZp
bHRlcj5ydW50aW1lPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxydW50aW1lXENvbnNvbGVDbGllbnQuY3BwIj4KLSAgICAgIDxGaWx0ZXI+cnVu
dGltZTwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5ccnVudGltZVxDb25zb2xlUHJvdG90eXBlLmNwcCI+Ci0gICAgICA8RmlsdGVyPnJ1bnRpbWU8
L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1
bnRpbWVcQ29uc3RydWN0RGF0YS5jcHAiPgotICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+
Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEN1
c3RvbUdldHRlclNldHRlci5jcHAiPgotICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+Ci0g
ICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXERhdGVD
b25zdHJ1Y3Rvci5jcHAiPgotICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+Ci0gICAgPC9D
bENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXERhdGVDb252ZXJz
aW9uLmNwcCI+Ci0gICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGls
ZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRGF0ZUluc3RhbmNlLmNwcCI+
Ci0gICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRGF0ZVByb3RvdHlwZS5jcHAiPgotICAgICAg
PEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxydW50aW1lXEVycm9yLmNwcCI+Ci0gICAgICA8RmlsdGVyPnJ1bnRpbWU8
L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1
bnRpbWVcRXJyb3JDb25zdHJ1Y3Rvci5jcHAiPgotICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0
ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1l
XEVycm9ySGFuZGxpbmdTY29wZS5jcHAiPgotICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+
Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEVy
cm9ySW5zdGFuY2UuY3BwIj4KLSAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPgotICAgIDwv
Q2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxFcnJvclByb3Rv
dHlwZS5jcHAiPgotICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBp
bGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEV4Y2VwdGlvbkhlbHBlcnMu
Y3BwIj4KLSAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgot
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxFeGVjdXRhYmxlLmNwcCI+Ci0gICAg
ICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRnVuY3Rpb25Db25zdHJ1Y3Rvci5jcHAiPgotICAgICAg
PEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxydW50aW1lXEZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZS5jcHAiPgotICAg
ICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEZ1bmN0aW9uUHJvdG90eXBlLmNwcCI+Ci0gICAgICA8
RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXHJ1bnRpbWVcR2V0dGVyU2V0dGVyLmNwcCI+Ci0gICAgICA8RmlsdGVyPnJ1
bnRpbWU8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXHJ1bnRpbWVcSGlnaEZpZGVsaXR5TG9nLmNwcCI+Ci0gICAgICA8RmlsdGVyPnJ1bnRpbWU8
L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1
bnRpbWVcSGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVyLmNwcCI+Ci0gICAgICA8RmlsdGVyPnJ1bnRp
bWU8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XHJ1bnRpbWVcSWRlbnRpZmllci5jcHAiPgotICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+
Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXElu
ZGV4aW5nVHlwZS5jcHAiPgotICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+Ci0gICAgPC9D
bENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEluaXRpYWxpemVU
aHJlYWRpbmcuY3BwIj4KLSAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPgotICAgIDwvQ2xD
b21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxJbnRlcm5hbEZ1bmN0
aW9uLmNwcCI+Ci0gICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGls
ZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNBY3RpdmF0aW9uLmNwcCI+
Ci0gICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNBUElWYWx1ZVdyYXBwZXIuY3BwIj4KLSAg
ICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU0FycmF5LmNwcCI+Ci0gICAgICA8RmlsdGVyPnJ1
bnRpbWU8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXHJ1bnRpbWVcSlNCb3VuZEZ1bmN0aW9uLmNwcCI+Ci0gICAgICA8RmlsdGVyPnJ1bnRpbWU8
L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1
bnRpbWVcSlNDZWxsLmNwcCI+Ci0gICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KLSAgICA8
L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNDb25zb2xl
LmNwcCI+Ci0gICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4K
LSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNEYXRlTWF0aC5jcHAiPgotICAg
ICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTRnVuY3Rpb24uY3BwIj4KLSAgICAgIDxGaWx0ZXI+
cnVudGltZTwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5ccnVudGltZVxKU0dsb2JhbE9iamVjdC5jcHAiPgotICAgICAgPEZpbHRlcj5ydW50aW1l
PC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxy
dW50aW1lXEpTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcCI+Ci0gICAgICA8RmlsdGVyPnJ1bnRp
bWU8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XHJ1bnRpbWVcSlNMb2NrLmNwcCI+Ci0gICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KLSAg
ICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNNYXAu
Y3BwIj4KLSAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgot
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU05hbWVTY29wZS5jcHAiPgotICAg
ICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTTm90QW5PYmplY3QuY3BwIj4KLSAgICAgIDxGaWx0
ZXI+cnVudGltZTwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5ccnVudGltZVxKU09iamVjdC5jcHAiPgotICAgICAgPEZpbHRlcj5ydW50aW1lPC9G
aWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50
aW1lXEpTT05PYmplY3QuY3BwIj4KLSAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPgotICAg
IDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3IuY3BwIj4KLSAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPgot
ICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU1By
b3h5LmNwcCI+Ci0gICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGls
ZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNTY29wZS5jcHAiPgotICAg
ICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTU2V0LmNwcCI+Ci0gICAgICA8RmlsdGVyPnJ1bnRp
bWU8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XHJ1bnRpbWVcSlNTZXRJdGVyYXRvci5jcHAiPgotICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0
ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1l
XEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuY3BwIj4KLSAgICAgIDxGaWx0ZXI+cnVudGltZTwv
RmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVu
dGltZVxKU1N0cmluZy5jcHAiPgotICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+Ci0gICAg
PC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTU3RyaW5n
Sm9pbmVyLmNwcCI+Ci0gICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KLSAgICA8L0NsQ29t
cGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNTeW1ib2xUYWJsZU9i
amVjdC5jcHAiPgotICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBp
bGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTVmFyaWFibGVPYmplY3Qu
Y3BwIj4KLSAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgot
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU1dpdGhTY29wZS5jcHAiPgotICAg
ICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTV2Vha01hcC5jcHAiPgotICAgICAgPEZpbHRlcj5y
dW50aW1lPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxydW50aW1lXEpTV3JhcHBlck9iamVjdC5jcHAiPgotICAgICAgPEZpbHRlcj5ydW50aW1l
PC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxy
dW50aW1lXExpdGVyYWxQYXJzZXIuY3BwIj4KLSAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVy
PgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxM
b29rdXAuY3BwIj4KLSAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPgotICAgIDwvQ2xDb21w
aWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxNYXBQcm90b3R5cGUuY3Bw
Ij4KLSAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxNYXBEYXRhLmNwcCI+Ci0gICAgICA8Rmls
dGVyPnJ1bnRpbWU8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXHJ1bnRpbWVcTWFwQ29uc3RydWN0b3IuY3BwIj4KLSAgICAgIDxGaWx0ZXI+cnVu
dGltZTwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5ccnVudGltZVxNYXRoT2JqZWN0LmNwcCI+Ci0gICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRl
cj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVc
TmFtZUNvbnN0cnVjdG9yLmNwcCI+Ci0gICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KLSAg
ICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcTmFtZUlu
c3RhbmNlLmNwcCI+Ci0gICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KLSAgICA8L0NsQ29t
cGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcTmFtZVByb3RvdHlwZS5j
cHAiPgotICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0g
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXE5hdGl2ZUVycm9yQ29uc3RydWN0b3Iu
Y3BwIj4KLSAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgot
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxOYXRpdmVFcnJvclByb3RvdHlwZS5j
cHAiPgotICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0g
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXE51bWJlckNvbnN0cnVjdG9yLmNwcCI+
Ci0gICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcTnVtYmVyT2JqZWN0LmNwcCI+Ci0gICAgICA8
RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXHJ1bnRpbWVcTnVtYmVyUHJvdG90eXBlLmNwcCI+Ci0gICAgICA8RmlsdGVy
PnJ1bnRpbWU8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXHJ1bnRpbWVcT2JqZWN0Q29uc3RydWN0b3IuY3BwIj4KLSAgICAgIDxGaWx0ZXI+cnVu
dGltZTwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5ccnVudGltZVxPYmplY3RQcm90b3R5cGUuY3BwIj4KLSAgICAgIDxGaWx0ZXI+cnVudGltZTwv
RmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVu
dGltZVxPcGVyYXRpb25zLmNwcCI+Ci0gICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KLSAg
ICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcT3B0aW9u
cy5jcHAiPgotICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+
Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXFByb3BlcnR5RGVzY3JpcHRvci5j
cHAiPgotICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0g
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXFByb3BlcnR5TmFtZUFycmF5LmNwcCI+
Ci0gICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcUHJvcGVydHlTbG90LmNwcCI+Ci0gICAgICA8
RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXHJ1bnRpbWVcUmVnRXhwLmNwcCI+Ci0gICAgICA8RmlsdGVyPnJ1bnRpbWU8
L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1
bnRpbWVcUmVnRXhwQ2FjaGUuY3BwIj4KLSAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPgot
ICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxSZWdF
eHBDYWNoZWRSZXN1bHQuY3BwIj4KLSAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPgotICAg
IDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxSZWdFeHBD
b25zdHJ1Y3Rvci5jcHAiPgotICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+Ci0gICAgPC9D
bENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXFJlZ0V4cE1hdGNo
ZXNBcnJheS5jcHAiPgotICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+Ci0gICAgPC9DbENv
bXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXFJlZ0V4cE9iamVjdC5j
cHAiPgotICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0g
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXFJlZ0V4cFByb3RvdHlwZS5jcHAiPgot
ICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXFNhbXBsaW5nQ291bnRlci5jcHAiPgotICAgICAg
PEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxydW50aW1lXFNtYWxsU3RyaW5ncy5jcHAiPgotICAgICAgPEZpbHRlcj5y
dW50aW1lPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxydW50aW1lXFNldFByb3RvdHlwZS5jcHAiPgotICAgICAgPEZpbHRlcj5ydW50aW1lPC9G
aWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50
aW1lXFNldEl0ZXJhdG9yUHJvdG90eXBlLmNwcCI+Ci0gICAgICA8RmlsdGVyPnJ1bnRpbWU8L0Zp
bHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRp
bWVcU2V0SXRlcmF0b3JDb25zdHJ1Y3Rvci5jcHAiPgotICAgICAgPEZpbHRlcj5ydW50aW1lPC9G
aWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50
aW1lXFNldENvbnN0cnVjdG9yLmNwcCI+Ci0gICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4K
LSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcU2V0
SXRlcmF0b3JDb25zdHJ1Y3Rvci5jcHAiPgotICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+
Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXFNw
YXJzZUFycmF5VmFsdWVNYXAuY3BwIj4KLSAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPgot
ICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxTdHJp
Y3RFdmFsQWN0aXZhdGlvbi5jcHAiPgotICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+Ci0g
ICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXFN0cmlu
Z0NvbnN0cnVjdG9yLmNwcCI+Ci0gICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KLSAgICA8
L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcU3RyaW5nT2Jq
ZWN0LmNwcCI+Ci0gICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGls
ZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcU3RyaW5nUHJvdG90eXBlLmNw
cCI+Ci0gICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcU3RyaW5nUmVjdXJzaW9uQ2hlY2tlci5j
cHAiPgotICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0g
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXFN0cnVjdHVyZS5jcHAiPgotICAgICAg
PEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxydW50aW1lXFN0cnVjdHVyZUNoYWluLmNwcCI+Ci0gICAgICA8RmlsdGVy
PnJ1bnRpbWU8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXHJ1bnRpbWVcU3RydWN0dXJlSURUYWJsZS5jcHAiPgotICAgICAgPEZpbHRlcj5ydW50
aW1lPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxydW50aW1lXFN5bWJvbFRhYmxlLmNwcCI+Ci0gICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRl
cj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVc
VHlwZUxvY2F0aW9uQ2FjaGUuY3BwIj4KLSAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPgot
ICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxUeXBl
U2V0LmNwcCI+Ci0gICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGls
ZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcV2F0Y2hkb2cuY3BwIj4KLSAg
ICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxXYXRjaGRvZ05vbmUuY3BwIj4KLSAgICAgIDxGaWx0
ZXI+cnVudGltZTwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5cdG9vbHNcQ29kZVByb2ZpbGUuY3BwIj4KLSAgICAgIDxGaWx0ZXI+dG9vbHM8L0Zp
bHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHRvb2xz
XENvZGVQcm9maWxpbmcuY3BwIj4KLSAgICAgIDxGaWx0ZXI+dG9vbHM8L0ZpbHRlcj4KLSAgICA8
L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHlhcnJcUmVndWxhckV4cHJl
c3Npb24uY3BwIj4KLSAgICAgIDxGaWx0ZXI+eWFycjwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxl
PgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ceWFyclxZYXJyQ2Fub25pY2FsaXplVUNTMi5j
cHAiPgotICAgICAgPEZpbHRlcj55YXJyPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlx5YXJyXFlhcnJJbnRlcnByZXRlci5jcHAiPgotICAgICAg
PEZpbHRlcj55YXJyPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlx5YXJyXFlhcnJKSVQuY3BwIj4KLSAgICAgIDxGaWx0ZXI+eWFycjwvRmlsdGVy
PgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ceWFyclxZYXJy
UGF0dGVybi5jcHAiPgotICAgICAgPEZpbHRlcj55YXJyPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBp
bGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlx5YXJyXFlhcnJTeW50YXhDaGVja2VyLmNw
cCI+Ci0gICAgICA8RmlsdGVyPnlhcnI8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcUHJvdG90eXBlTWFwLmNwcCI+Ci0gICAgICA8
RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNDSlNWYWx1ZS5jcHAiPgotICAgICAgPEZpbHRlcj5ydW50
aW1lPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxydW50aW1lXFN0cnVjdHVyZVJhcmVEYXRhLmNwcCI+Ci0gICAgICA8RmlsdGVyPnJ1bnRpbWU8
L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBh
cnNlclxTb3VyY2VQcm92aWRlci5jcHAiPgotICAgICAgPEZpbHRlcj5wYXJzZXI8L0ZpbHRlcj4K
LSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcUHJv
cGVydHlUYWJsZS5jcHAiPgotICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+Ci0gICAgPC9D
bENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXFZNLmNwcCI+Ci0g
ICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcVk1FbnRyeVNjb3BlLmNwcCI+Ci0gICAgICA8Rmls
dGVyPnJ1bnRpbWU8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXHBhcnNlclxTb3VyY2VDb2RlLmNwcCI+Ci0gICAgICA8RmlsdGVyPnBhcnNlcjwv
RmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVu
dGltZVxJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmNwcCI+Ci0gICAgICA8RmlsdGVyPnJ1bnRpbWU8
L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1
bnRpbWVcQ29tbW9uU2xvd1BhdGhzRXhjZXB0aW9ucy5jcHAiPgotICAgICAgPEZpbHRlcj5ydW50
aW1lPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxydW50aW1lXENvbW1vblNsb3dQYXRocy5jcHAiPgotICAgICAgPEZpbHRlcj5ydW50aW1lPC9G
aWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxBUElc
SlNDVGVzdFJ1bm5lclV0aWxzLmNwcCI+Ci0gICAgICA8RmlsdGVyPkFQSTwvRmlsdGVyPgotICAg
IDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU0FycmF5
QnVmZmVyLmNwcCI+Ci0gICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KLSAgICA8L0NsQ29t
cGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNBcnJheUJ1ZmZlckNv
bnN0cnVjdG9yLmNwcCI+Ci0gICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KLSAgICA8L0Ns
Q29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNBcnJheUJ1ZmZl
clByb3RvdHlwZS5jcHAiPgotICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+Ci0gICAgPC9D
bENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTQXJyYXlCdWZm
ZXJWaWV3LmNwcCI+Ci0gICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KLSAgICA8L0NsQ29t
cGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcVHlwZWRBcnJheUNvbnRy
b2xsZXIuY3BwIj4KLSAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPgotICAgIDwvQ2xDb21w
aWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxUeXBlZEFycmF5VHlwZS5j
cHAiPgotICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0g
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTVHlwZWRBcnJheUNvbnN0cnVjdG9y
cy5jcHAiPgotICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+
Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTVHlwZWRBcnJheVByb3RvdHlw
ZXMuY3BwIj4KLSAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxl
PgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU1R5cGVkQXJyYXlzLmNwcCI+
Ci0gICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRGF0YVZpZXcuY3BwIj4KLSAgICAgIDxGaWx0
ZXI+cnVudGltZTwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5ccnVudGltZVxKU0RhdGFWaWV3LmNwcCI+Ci0gICAgICA8RmlsdGVyPnJ1bnRpbWU8
L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1
bnRpbWVcSlNEYXRhVmlld1Byb3RvdHlwZS5jcHAiPgotICAgICAgPEZpbHRlcj5ydW50aW1lPC9G
aWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50
aW1lXFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcCI+Ci0gICAgICA8RmlsdGVyPnJ1bnRp
bWU8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XHJ1bnRpbWVcSlNQcm9taXNlLmNwcCI+Ci0gICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4K
LSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNQ
cm9taXNlQ29uc3RydWN0b3IuY3BwIj4KLSAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPgot
ICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU1By
b21pc2VEZWZlcnJlZC5jcHAiPgotICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+Ci0gICAg
PC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTUHJvbWlz
ZUZ1bmN0aW9ucy5jcHAiPgotICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+Ci0gICAgPC9D
bENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTUHJvbWlzZVJl
YWN0aW9uLmNwcCI+Ci0gICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KLSAgICA8L0NsQ29t
cGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNQcm9taXNlUHJvdG90
eXBlLmNwcCI+Ci0gICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGls
ZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcV2Vha01hcENvbnN0cnVjdG9y
LmNwcCI+Ci0gICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4K
LSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcV2Vha01hcERhdGEuY3BwIj4KLSAg
ICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxXZWFrTWFwUHJvdG90eXBlLmNwcCI+Ci0gICAgICA8
RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXGhlYXBcQ29kZUJsb2NrU2V0LmNwcCI+Ci0gICAgICA8RmlsdGVyPmhlYXA8
L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGhl
YXBcRGVmZXJHQy5jcHAiPgotICAgICAgPEZpbHRlcj5oZWFwPC9GaWx0ZXI+Ci0gICAgPC9DbENv
bXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxEZWZlcnJlZENvbXBp
bGF0aW9uQ2FsbGJhY2suY3BwIj4KLSAgICAgIDxGaWx0ZXI+Ynl0ZWNvZGU8L0ZpbHRlcj4KLSAg
ICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdDb21waWxh
dGlvbktleS5jcHAiPgotICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGls
ZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdEcml2ZXIuY3BwIj4KLSAgICAg
IDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxkZmdcREZHQ29tcGlsYXRpb25Nb2RlLmNwcCI+Ci0gICAgICA8RmlsdGVyPmRm
ZzwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
aml0XEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcCI+Ci0gICAgICA8Rmls
dGVyPmppdDwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cbGxpbnRcTExJbnRFbnRyeXBvaW50LmNwcCI+Ci0gICAgICA8RmlsdGVyPmxsaW50PC9G
aWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdc
REZHQWJzdHJhY3RIZWFwLmNwcCI+Ci0gICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPgotICAgIDwv
Q2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0Fic3RyYWN0VmFs
dWUuY3BwIj4KLSAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0g
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25Q
aGFzZS5jcHAiPgotICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4K
LSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdBcnJheU1vZGUuY3BwIj4KLSAgICAg
IDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxkZmdcREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5jcHAiPgotICAgICAgPEZpbHRl
cj5kZmc8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXGRmZ1xERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcCI+Ci0gICAgICA8RmlsdGVy
PmRmZzwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5cZGZnXERGR0Jhc2ljQmxvY2suY3BwIj4KLSAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+Ci0g
ICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHQmluYXJ5
U3dpdGNoLmNwcCI+Ci0gICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxl
PgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0Jsb2NrSW5zZXJ0aW9uU2V0LmNw
cCI+Ci0gICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0J5dGVDb2RlUGFyc2VyLmNwcCI+Ci0gICAgICA8
RmlsdGVyPmRmZzwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5cZGZnXERGR0NhcGFiaWxpdGllcy5jcHAiPgotICAgICAgPEZpbHRlcj5kZmc8L0Zp
bHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xE
RkdDRkFQaGFzZS5jcHAiPgotICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4KLSAgICA8L0NsQ29t
cGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdDRkdTaW1wbGlmaWNhdGlv
blBoYXNlLmNwcCI+Ci0gICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxl
PgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0Nsb2JiZXJpemUuY3BwIj4KLSAg
ICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxkZmdcREZHQ2xvYmJlclNldC5jcHAiPgotICAgICAgPEZpbHRlcj5kZmc8
L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRm
Z1xERkdDb21tb24uY3BwIj4KLSAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+Ci0gICAgPC9DbENv
bXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHQ29tbW9uRGF0YS5jcHAi
PgotICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAiPgotICAg
ICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXGRmZ1xERkdDUFNSZXRocmVhZGluZ1BoYXNlLmNwcCI+Ci0gICAgICA8Rmls
dGVyPmRmZzwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cZGZnXERGR0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuY3BwIj4KLSAgICAgIDxGaWx0
ZXI+ZGZnPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxkZmdcREZHQ1NFUGhhc2UuY3BwIj4KLSAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+Ci0g
ICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHRENFUGhh
c2UuY3BwIj4KLSAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0g
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHRGVzaXJlZElkZW50aWZpZXJzLmNwcCI+
Ci0gICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0Rlc2lyZWRUcmFuc2l0aW9ucy5jcHAiPgotICAgICAg
PEZpbHRlcj5kZmc8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXGRmZ1xERkdEZXNpcmVkV2F0Y2hwb2ludHMuY3BwIj4KLSAgICAgIDxGaWx0ZXI+
ZGZnPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxkZmdcREZHRGVzaXJlZFdlYWtSZWZlcmVuY2VzLmNwcCI+Ci0gICAgICA8RmlsdGVyPmRmZzwv
RmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZn
XERGR0Rlc2lyZWRXcml0ZUJhcnJpZXJzLmNwcCI+Ci0gICAgICA8RmlsdGVyPmRmZzwvRmlsdGVy
PgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0Rp
c2Fzc2VtYmxlci5jcHAiPgotICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4KLSAgICA8L0NsQ29t
cGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdEb21pbmF0b3JzLmNwcCI+
Ci0gICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0VkZ2UuY3BwIj4KLSAgICAgIDxGaWx0ZXI+ZGZnPC9G
aWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdc
REZHRmFpbGVkRmluYWxpemVyLmNwcCI+Ci0gICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPgotICAg
IDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0ZpbmFsaXpl
ci5jcHAiPgotICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdGaXh1cFBoYXNlLmNwcCI+Ci0gICAgICA8
RmlsdGVyPmRmZzwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5cZGZnXERGR0ZsdXNoZWRBdC5jcHAiPgotICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRl
cj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdG
bHVzaEZvcm1hdC5jcHAiPgotICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4KLSAgICA8L0NsQ29t
cGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdGdW5jdGlvbldoaXRlbGlz
dC5jcHAiPgotICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdHcmFwaC5jcHAiPgotICAgICAgPEZpbHRl
cj5kZmc8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXGRmZ1xERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAiPgotICAgICAgPEZpbHRlcj5kZmc8
L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRm
Z1xERkdJbnZhbGlkYXRpb25Qb2ludEluamVjdGlvblBoYXNlLmNwcCI+Ci0gICAgICA8RmlsdGVy
PmRmZzwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5cZGZnXERGR0pJVENvZGUuY3BwIj4KLSAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+Ci0gICAg
PC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHSklUQ29tcGls
ZXIuY3BwIj4KLSAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0g
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHSklURmluYWxpemVyLmNwcCI+Ci0gICAg
ICA8RmlsdGVyPmRmZzwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5cZGZnXERGR0p1bXBSZXBsYWNlbWVudC5jcHAiPgotICAgICAgPEZpbHRlcj5k
Zmc8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XGRmZ1xERkdMYXp5SlNWYWx1ZS5jcHAiPgotICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4KLSAg
ICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdMSUNNUGhh
c2UuY3BwIj4KLSAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0g
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmNw
cCI+Ci0gICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0xvbmdMaXZlZFN0YXRlLmNwcCI+Ci0gICAgICA8
RmlsdGVyPmRmZzwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5cZGZnXERGR0xvb3BQcmVIZWFkZXJDcmVhdGlvblBoYXNlLmNwcCI+Ci0gICAgICA8
RmlsdGVyPmRmZzwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5cZGZnXERGR01pbmlmaWVkTm9kZS5jcHAiPgotICAgICAgPEZpbHRlcj5kZmc8L0Zp
bHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xE
RkdOYXR1cmFsTG9vcHMuY3BwIj4KLSAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+Ci0gICAgPC9D
bENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHTm9kZS5jcHAiPgot
ICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdOb2RlRmxhZ3MuY3BwIj4KLSAgICAgIDxGaWx0ZXI+ZGZn
PC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxk
ZmdcREZHT3BlcmF0aW9ucy5jcHAiPgotICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4KLSAgICA8
L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdPU1JBdmFpbGFi
aWxpdHlBbmFseXNpc1BoYXNlLmNwcCI+Ci0gICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPgotICAg
IDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR09TUkVudHJ5
LmNwcCI+Ci0gICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNl
LmNwcCI+Ci0gICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR09TUkV4aXQuY3BwIj4KLSAgICAgIDxGaWx0
ZXI+ZGZnPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxkZmdcREZHT1NSRXhpdEJhc2UuY3BwIj4KLSAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+
Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHT1NS
RXhpdENvbXBpbGVyLmNwcCI+Ci0gICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPgotICAgIDwvQ2xD
b21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR09TUkV4aXRDb21waWxl
cjMyXzY0LmNwcCI+Ci0gICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxl
PgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR09TUkV4aXRDb21waWxlcjY0LmNw
cCI+Ci0gICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAiPgot
ICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdPU1JFeGl0SnVtcFBsYWNlaG9sZGVyLmNwcCI+Ci0gICAg
ICA8RmlsdGVyPmRmZzwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5cZGZnXERGR09TUkV4aXRQcmVwYXJhdGlvbi5jcHAiPgotICAgICAgPEZpbHRl
cj5kZmc8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXGRmZ1xERkdQaGFudG9tQ2Fub25pY2FsaXphdGlvblBoYXNlLmNwcCI+Ci0gICAgICA8Rmls
dGVyPmRmZzwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cZGZnXERGR1BoYXNlLmNwcCI+Ci0gICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPgotICAg
IDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1BsYW4uY3Bw
Ij4KLSAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmNwcCI+
Ci0gICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcCI+
Ci0gICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1NwZWN1bGF0aXZlSklULmNwcCI+Ci0gICAgICA8Rmls
dGVyPmRmZzwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cZGZnXERGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwIj4KLSAgICAgIDxGaWx0ZXI+ZGZn
PC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxk
ZmdcREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAiPgotICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4K
LSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdTU0FD
b252ZXJzaW9uUGhhc2UuY3BwIj4KLSAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+Ci0gICAgPC9D
bENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHU3RhY2tMYXlvdXRQ
aGFzZS5jcHAiPgotICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4K
LSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdTdG9yZUJhcnJpZXJFbGlzaW9uUGhh
c2UuY3BwIj4KLSAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0g
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHVGh1bmtzLmNwcCI+Ci0gICAgICA8Rmls
dGVyPmRmZzwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cZGZnXERGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuY3BwIj4KLSAgICAgIDxGaWx0
ZXI+ZGZnPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxkZmdcREZHVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwIj4KLSAgICAg
IDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxkZmdcREZHVG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxs
YmFjay5jcHAiPgotICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4K
LSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNl
LmNwcCI+Ci0gICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1VuaWZpY2F0aW9uUGhhc2UuY3BwIj4KLSAg
ICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxkZmdcREZHVXNlS2luZC5jcHAiPgotICAgICAgPEZpbHRlcj5kZmc8L0Zp
bHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xE
RkdWYWxpZGF0ZS5jcHAiPgotICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4KLSAgICA8L0NsQ29t
cGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdWYWx1ZVNvdXJjZS5jcHAi
PgotICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmNwcCI+Ci0g
ICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5cZGZnXERGR1ZhcmlhYmxlRXZlbnQuY3BwIj4KLSAgICAgIDxGaWx0ZXI+
ZGZnPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxkZmdcREZHVmFyaWFibGVFdmVudFN0cmVhbS5jcHAiPgotICAgICAgPEZpbHRlcj5kZmc8L0Zp
bHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xE
RkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2UuY3BwIj4KLSAgICAgIDxGaWx0ZXI+ZGZn
PC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxk
ZmdcREZHV2F0Y2hwb2ludENvbGxlY3Rpb25QaGFzZS5jcHAiPgotICAgICAgPEZpbHRlcj5kZmc8
L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRm
Z1xERkdXb3JrbGlzdC5jcHAiPgotICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4KLSAgICA8L0Ns
Q29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXERGR0V4aXRQcm9m
aWxlLmNwcCI+Ci0gICAgICA8RmlsdGVyPmJ5dGVjb2RlPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBp
bGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxQcmVjaXNlSnVtcFRhcmdl
dHMuY3BwIj4KLSAgICAgIDxGaWx0ZXI+Ynl0ZWNvZGU8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGls
ZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRHVtcENvbnRleHQuY3BwIj4K
LSAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxGdW5jdGlvbkV4ZWN1dGFibGVEdW1wLmNwcCI+
Ci0gICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcQ29tcGlsYXRpb25SZXN1bHQuY3BwIj4KLSAg
ICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxBcnJheUl0ZXJhdG9yQ29uc3RydWN0b3IuY3BwIj4K
LSAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxBcnJheUl0ZXJhdG9yUHJvdG90eXBlLmNwcCI+
Ci0gICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcQXJndW1lbnRzSXRlcmF0b3JDb25zdHJ1Y3Rv
ci5jcHAiPgotICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+
Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEFyZ3VtZW50c0l0ZXJhdG9yUHJv
dG90eXBlLmNwcCI+Ci0gICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KLSAgICA8L0NsQ29t
cGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcTWFwSXRlcmF0b3JDb25z
dHJ1Y3Rvci5jcHAiPgotICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+Ci0gICAgPC9DbENv
bXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXE1hcEl0ZXJhdG9yUHJv
dG90eXBlLmNwcCI+Ci0gICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KLSAgICA8L0NsQ29t
cGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxBc3NlbWJseUhlbHBlcnMuY3Bw
Ij4KLSAgICAgIDxGaWx0ZXI+aml0PC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTQXJyYXlJdGVyYXRvci5jcHAiPgotICAgICAg
PEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTQXJndW1lbnRzSXRlcmF0b3IuY3BwIj4KLSAgICAgIDxG
aWx0ZXI+cnVudGltZTwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5ccnVudGltZVxKU01hcEl0ZXJhdG9yLmNwcCI+Ci0gICAgICA8RmlsdGVyPnJ1
bnRpbWU8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXGppdFxSZXBhdGNoLmNwcCI+Ci0gICAgICA8RmlsdGVyPmppdDwvRmlsdGVyPgotICAgIDwv
Q2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcSW5saW5lQ2Fs
bEZyYW1lU2V0LmNwcCI+Ci0gICAgICA8RmlsdGVyPmJ5dGVjb2RlPC9GaWx0ZXI+Ci0gICAgPC9D
bENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxqaXRcSklUT3BlcmF0aW9ucy5j
cHAiPgotICAgICAgPEZpbHRlcj5qaXQ8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxKSVRPcGVyYXRpb25zTVNWQzY0LmNwcCI+Ci0gICAg
ICA8RmlsdGVyPmppdDwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5ccnVudGltZVxUZXN0UnVubmVyVXRpbHMuY3BwIj4KLSAgICAgIDxGaWx0ZXI+
cnVudGltZTwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cYnl0ZWNvZGVcVmFsdWVSZWNvdmVyeS5jcHAiPgotICAgICAgPEZpbHRlcj5ieXRlY29k
ZTwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
aml0XFJlZ2lzdGVyU2V0LmNwcCI+Ci0gICAgICA8RmlsdGVyPmppdDwvRmlsdGVyPgotICAgIDwv
Q2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caml0XFRlbXBSZWdpc3RlclNl
dC5jcHAiPgotICAgICAgPEZpbHRlcj5qaXQ8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxKSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHAi
PgotICAgICAgPEZpbHRlcj5qaXQ8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdBdmFpbGFiaWxpdHkuY3BwIj4KLSAgICAgIDxGaWx0
ZXI+ZGZnPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxkZmdcREZHUmVzdXJyZWN0aW9uRm9yVmFsaWRhdGlvblBoYXNlLmNwcCI+Ci0gICAgICA8
RmlsdGVyPmRmZzwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5cYnl0ZWNvZGVcQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmNwcCI+Ci0g
ICAgICA8RmlsdGVyPmJ5dGVjb2RlPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxiaW5kaW5nc1xTY3JpcHRWYWx1ZS5jcHAiPgotICAgICAgPEZp
bHRlcj5iaW5kaW5nczwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5cYmluZGluZ3NcU2NyaXB0RnVuY3Rpb25DYWxsLmNwcCI+Ci0gICAgICA8Rmls
dGVyPmJpbmRpbmdzPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxiaW5kaW5nc1xTY3JpcHRPYmplY3QuY3BwIj4KLSAgICAgIDxGaWx0ZXI+Ymlu
ZGluZ3M8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXGRmZ1xERkdTU0FMb3dlcmluZ1BoYXNlLmNwcCI+Ci0gICAgICA8RmlsdGVyPmRmZzwvRmls
dGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERG
R1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuY3BwIj4KLSAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+
Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEFy
cmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludC5jcHAiPgotICAgICAgPEZpbHRlcj5ydW50aW1l
PC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKENv
bmZpZ3VyYXRpb25CdWlsZERpcilcb2JqJChQbGF0Zm9ybUFyY2hpdGVjdHVyZSlcJChQcm9qZWN0
TmFtZSlcRGVyaXZlZFNvdXJjZXNcSW5zcGVjdG9ySlNCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwIj4K
LSAgICAgIDxGaWx0ZXI+RGVyaXZlZCBTb3VyY2VzPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+
Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKENvbmZpZ3VyYXRpb25CdWlsZERpcilcb2JqJChQ
bGF0Zm9ybUFyY2hpdGVjdHVyZSlcJChQcm9qZWN0TmFtZSlcRGVyaXZlZFNvdXJjZXNcSW5zcGVj
dG9ySlNGcm9udGVuZERpc3BhdGNoZXJzLmNwcCI+Ci0gICAgICA8RmlsdGVyPkRlcml2ZWQgU291
cmNlczwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
JChDb25maWd1cmF0aW9uQnVpbGREaXIpXG9iaiQoUGxhdGZvcm1BcmNoaXRlY3R1cmUpXCQoUHJv
amVjdE5hbWUpXERlcml2ZWRTb3VyY2VzXEluc3BlY3RvckpTVHlwZUJ1aWxkZXJzLmNwcCI+Ci0g
ICAgICA8RmlsdGVyPkRlcml2ZWQgU291cmNlczwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgot
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caml0XEFyaXR5Q2hlY2tGYWlsUmV0dXJuVGh1bmtz
LmNwcCI+Ci0gICAgICA8RmlsdGVyPmppdDwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caml0XFJlZ2lzdGVyUHJlc2VydmF0aW9uV3JhcHBlckdl
bmVyYXRvci5jcHAiPgotICAgICAgPEZpbHRlcj5qaXQ8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGls
ZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9IiQoQ29uZmlndXJhdGlvbkJ1aWxkRGlyKVxvYmok
KFBsYXRmb3JtQXJjaGl0ZWN0dXJlKVwkKFByb2plY3ROYW1lKVxEZXJpdmVkU291cmNlc1xKU0NC
dWlsdGlucy5jcHAiPgotICAgICAgPEZpbHRlcj5EZXJpdmVkIFNvdXJjZXM8L0ZpbHRlcj4KLSAg
ICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGZ0bFxGVExBYnN0cmFj
dEhlYXAuY3BwIj4KLSAgICAgIDxGaWx0ZXI+ZnRsPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+
Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxmdGxcRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9y
eS5jcHAiPgotICAgICAgPEZpbHRlcj5mdGw8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGZ0bFxGVExBdmFpbGFibGVSZWNvdmVyeS5jcHAiPgot
ICAgICAgPEZpbHRlcj5mdGw8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXGZ0bFxGVExDYXBhYmlsaXRpZXMuY3BwIj4KLSAgICAgIDxGaWx0ZXI+
ZnRsPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxmdGxcRlRMQ29tbW9uVmFsdWVzLmNwcCI+Ci0gICAgICA8RmlsdGVyPmZ0bDwvRmlsdGVyPgot
ICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZnRsXEZUTENvbXBp
bGUuY3BwIj4KLSAgICAgIDxGaWx0ZXI+ZnRsPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0g
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxmdGxcRlRMRGF0YVNlY3Rpb24uY3BwIj4KLSAgICAg
IDxGaWx0ZXI+ZnRsPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxmdGxcRlRMRFdBUkZEZWJ1Z0xpbmVJbmZvLmNwcCI+Ci0gICAgICA8RmlsdGVy
PmZ0bDwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5cZnRsXEZUTERXQVJGUmVnaXN0ZXIuY3BwIj4KLSAgICAgIDxGaWx0ZXI+ZnRsPC9GaWx0ZXI+
Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxmdGxcRlRMRXhp
dEFyZ3VtZW50LmNwcCI+Ci0gICAgICA8RmlsdGVyPmZ0bDwvRmlsdGVyPgotICAgIDwvQ2xDb21w
aWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZnRsXEZUTEV4aXRBcmd1bWVudEZvck9w
ZXJhbmQuY3BwIj4KLSAgICAgIDxGaWx0ZXI+ZnRsPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+
Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxmdGxcRlRMRXhpdFRodW5rR2VuZXJhdG9yLmNw
cCI+Ci0gICAgICA8RmlsdGVyPmZ0bDwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5cZnRsXEZUTEV4aXRWYWx1ZS5jcHAiPgotICAgICAgPEZpbHRl
cj5mdGw8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXGZ0bFxGVExGYWlsLmNwcCI+Ci0gICAgICA8RmlsdGVyPmZ0bDwvRmlsdGVyPgotICAgIDwv
Q2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZnRsXEZUTEZvck9TUkVudHJ5
SklUQ29kZS5jcHAiPgotICAgICAgPEZpbHRlcj5mdGw8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGls
ZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGZ0bFxGVExJbmxpbmVDYWNoZVNpemUuY3Bw
Ij4KLSAgICAgIDxGaWx0ZXI+ZnRsPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxmdGxcRlRMSW50cmluc2ljUmVwb3NpdG9yeS5jcHAiPgotICAg
ICAgPEZpbHRlcj5mdGw8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXGZ0bFxGVExKSVRDb2RlLmNwcCI+Ci0gICAgICA8RmlsdGVyPmZ0bDwvRmls
dGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZnRsXEZU
TEpJVEZpbmFsaXplci5jcHAiPgotICAgICAgPEZpbHRlcj5mdGw8L0ZpbHRlcj4KLSAgICA8L0Ns
Q29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGZ0bFxGVExKU0NhbGwuY3BwIj4K
LSAgICAgIDxGaWx0ZXI+ZnRsPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxmdGxcRlRMTGluay5jcHAiPgotICAgICAgPEZpbHRlcj5mdGw8L0Zp
bHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGZ0bFxG
VExMb2NhdGlvbi5jcHAiPgotICAgICAgPEZpbHRlcj5mdGw8L0ZpbHRlcj4KLSAgICA8L0NsQ29t
cGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGZ0bFxGVExMb3dlckRGR1RvTExWTS5j
cHAiPgotICAgICAgPEZpbHRlcj5mdGw8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGZ0bFxGVExPU1JFbnRyeS5jcHAiPgotICAgICAgPEZpbHRl
cj5mdGw8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXGZ0bFxGVExPU1JFeGl0LmNwcCI+Ci0gICAgICA8RmlsdGVyPmZ0bDwvRmlsdGVyPgotICAg
IDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZnRsXEZUTE9TUkV4aXRD
b21waWxlci5jcHAiPgotICAgICAgPEZpbHRlcj5mdGw8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGls
ZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGZ0bFxGVExPdXRwdXQuY3BwIj4KLSAgICAg
IDxGaWx0ZXI+ZnRsPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxmdGxcRlRMUmVjb3ZlcnlPcGNvZGUuY3BwIj4KLSAgICAgIDxGaWx0ZXI+ZnRs
PC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxm
dGxcRlRMUmVnaXN0ZXJBdE9mZnNldC5jcHAiPgotICAgICAgPEZpbHRlcj5mdGw8L0ZpbHRlcj4K
LSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGZ0bFxGVExTYXZl
UmVzdG9yZS5jcHAiPgotICAgICAgPEZpbHRlcj5mdGw8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGls
ZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGZ0bFxGVExTbG93UGF0aENhbGwuY3BwIj4K
LSAgICAgIDxGaWx0ZXI+ZnRsPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxmdGxcRlRMU2xvd1BhdGhDYWxsS2V5LmNwcCI+Ci0gICAgICA8Rmls
dGVyPmZ0bDwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cZnRsXEZUTFN0YWNrTWFwcy5jcHAiPgotICAgICAgPEZpbHRlcj5mdGw8L0ZpbHRlcj4K
LSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGZ0bFxGVExTdGF0
ZS5jcHAiPgotICAgICAgPEZpbHRlcj5mdGw8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGZ0bFxGVExUaHVua3MuY3BwIj4KLSAgICAgIDxGaWx0
ZXI+ZnRsPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxmdGxcRlRMVW53aW5kSW5mby5jcHAiPgotICAgICAgPEZpbHRlcj5mdGw8L0ZpbHRlcj4K
LSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGZ0bFxGVExWYWx1
ZUZvcm1hdC5jcHAiPgotICAgICAgPEZpbHRlcj5mdGw8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGls
ZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGZ0bFxGVExWYWx1ZVJhbmdlLmNwcCI+Ci0g
ICAgICA8RmlsdGVyPmZ0bDwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5cZGlzYXNzZW1ibGVyXFg4NkRpc2Fzc2VtYmxlci5jcHAiPgotICAgICAg
PEZpbHRlcj5kaXNhc3NlbWJsZXI8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXGRpc2Fzc2VtYmxlclxMTFZNRGlzYXNzZW1ibGVyLmNwcCI+Ci0g
ICAgICA8RmlsdGVyPmRpc2Fzc2VtYmxlcjwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cbGx2bVxJbml0aWFsaXplTExWTS5jcHAiPgotICAgICAg
PEZpbHRlcj5sbHZtPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxsbHZtXEluaXRpYWxpemVMTFZNV2luLmNwcCI+Ci0gICAgICA8RmlsdGVyPmxs
dm08L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XGxsdm1cTExWTUFQSS5jcHAiPgotICAgICAgPEZpbHRlcj5sbHZtPC9GaWx0ZXI+Ci0gICAgPC9D
bENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxqaXRcQWNjZXNzb3JDYWxsSklU
U3R1YlJvdXRpbmUuY3BwIj4KLSAgICAgIDxGaWx0ZXI+aml0PC9GaWx0ZXI+Ci0gICAgPC9DbENv
bXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcQ29uc29sZU1lc3Nh
Z2UuY3BwIj4KLSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBp
bGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHQXJpdGhNb2RlLmNwcCI+Ci0g
ICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5cZGZnXERGR0dyYXBoU2FmZXBvaW50LmNwcCI+Ci0gICAgICA8RmlsdGVy
PmRmZzwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5cZGZnXERGR0ludGVnZXJDaGVja0NvbWJpbmluZ1BoYXNlLmNwcCI+Ci0gICAgICA8RmlsdGVy
PmRmZzwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5cZGZnXERGR1NhZmVwb2ludC5jcHAiPgotICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4KLSAg
ICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdTdGF0aWNF
eGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5jcHAiPgotICAgICAgPEZpbHRlcj5kZmc8L0Zp
bHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xE
RkdUaHJlYWREYXRhLmNwcCI+Ci0gICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPgotICAgIDwvQ2xD
b21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1ZhcmlhYmxlQWNjZXNz
RGF0YS5jcHAiPgotICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4K
LSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXEdldEJ5SWRWYXJpYW50LmNwcCI+
Ci0gICAgICA8RmlsdGVyPmJ5dGVjb2RlPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcSWRlbnRpZmllcnNGYWN0b3J5LmNwcCI+
Ci0gICAgICA8RmlsdGVyPmluc3BlY3RvcjwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcRXhpdGluZ0pJVFR5cGUuY3BwIj4KLSAg
ICAgIDxGaWx0ZXI+Ynl0ZWNvZGU8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXGluc3BlY3RvclxJbmplY3RlZFNjcmlwdC5jcHAiPgotICAgICAg
PEZpbHRlcj5pbnNwZWN0b3I8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXGluc3BlY3RvclxJbmplY3RlZFNjcmlwdEJhc2UuY3BwIj4KLSAgICAg
IDxGaWx0ZXI+aW5zcGVjdG9yPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcSW5qZWN0ZWRTY3JpcHRIb3N0LmNwcCI+Ci0gICAg
ICA8RmlsdGVyPmluc3BlY3RvcjwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXEluamVjdGVkU2NyaXB0TWFuYWdlci5jcHAiPgot
ICAgICAgPEZpbHRlcj5pbnNwZWN0b3I8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGluc3BlY3RvclxJbmplY3RlZFNjcmlwdE1vZHVsZS5jcHAi
PgotICAgICAgPEZpbHRlcj5pbnNwZWN0b3I8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGluc3BlY3RvclxhZ2VudHNcSW5zcGVjdG9yQ29uc29s
ZUFnZW50LmNwcCI+Ci0gICAgICA8RmlsdGVyPmluc3BlY3RvcjwvRmlsdGVyPgotICAgIDwvQ2xD
b21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXEphdmFTY3JpcHRD
YWxsRnJhbWUuY3BwIj4KLSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yPC9GaWx0ZXI+Ci0gICAgPC9D
bENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcSlNJbmplY3Rl
ZFNjcmlwdEhvc3QuY3BwIj4KLSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yPC9GaWx0ZXI+Ci0gICAg
PC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcSlNJbmpl
Y3RlZFNjcmlwdEhvc3RQcm90b3R5cGUuY3BwIj4KLSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yPC9G
aWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxpbnNw
ZWN0b3JcSlNKYXZhU2NyaXB0Q2FsbEZyYW1lLmNwcCI+Ci0gICAgICA8RmlsdGVyPmluc3BlY3Rv
cjwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
aW5zcGVjdG9yXEpTSmF2YVNjcmlwdENhbGxGcmFtZVByb3RvdHlwZS5jcHAiPgotICAgICAgPEZp
bHRlcj5pbnNwZWN0b3I8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFBvbHltb3JwaGljR2V0QnlJZExpc3QuY3BwIj4KLSAgICAg
IDxGaWx0ZXI+Ynl0ZWNvZGU8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXHByb2ZpbGVyXFByb2ZpbGVySmV0dGlzb25SZWFzb24uY3BwIj4KLSAg
ICAgIDxGaWx0ZXI+cHJvZmlsZXI8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFB1dEJ5SWRWYXJpYW50LmNwcCI+Ci0gICAgICA8
RmlsdGVyPmJ5dGVjb2RlPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxqaXRcU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmNwcCI+Ci0gICAgICA8
RmlsdGVyPmppdDwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5caW5zcGVjdG9yXFNjcmlwdEFyZ3VtZW50cy5jcHAiPgotICAgICAgPEZpbHRlcj5p
bnNwZWN0b3I8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXGppdFxSZWcuY3BwIj4KLSAgICAgIDxGaWx0ZXI+aml0PC9GaWx0ZXI+Ci0gICAgPC9D
bENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcU2NyaXB0Q2Fs
bEZyYW1lLmNwcCI+Ci0gICAgICA8RmlsdGVyPmluc3BlY3RvcjwvRmlsdGVyPgotICAgIDwvQ2xD
b21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXFNjcmlwdENhbGxT
dGFjay5jcHAiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0b3I8L0ZpbHRlcj4KLSAgICA8L0NsQ29t
cGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGluc3BlY3RvclxTY3JpcHRDYWxsU3Rh
Y2tGYWN0b3J5LmNwcCI+Ci0gICAgICA8RmlsdGVyPmluc3BlY3RvcjwvRmlsdGVyPgotICAgIDwv
Q2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXFNjcmlwdERl
YnVnU2VydmVyLmNwcCI+Ci0gICAgICA8RmlsdGVyPmluc3BlY3RvcjwvRmlsdGVyPgotICAgIDwv
Q2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxNZW1vcnlTdGF0
aXN0aWNzLmNwcCI+Ci0gICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KLSAgICA8L0NsQ29t
cGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXENvbXBsZXhHZXRTdGF0
dXMuY3BwIj4KLSAgICAgIDxGaWx0ZXI+Ynl0ZWNvZGU8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGls
ZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXENvbnN0YW50U3RydWN0dXJl
Q2hlY2suY3BwIj4KLSAgICAgIDxGaWx0ZXI+Ynl0ZWNvZGU8L0ZpbHRlcj4KLSAgICA8L0NsQ29t
cGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdEb2VzR0MuY3BwIj4KLSAg
ICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxkZmdcREZHRnJvemVuVmFsdWUuY3BwIj4KLSAgICAgIDxGaWx0ZXI+ZGZn
PC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxk
ZmdcREZHSGVhcExvY2F0aW9uLmNwcCI+Ci0gICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPgotICAg
IDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR01heUV4aXQu
Y3BwIj4KLSAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHUGhhbnRvbVJlbW92YWxQaGFzZS5jcHAiPgot
ICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQdXJlVmFsdWUuY3BwIj4KLSAgICAgIDxGaWx0ZXI+ZGZn
PC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxk
ZmdcREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5jcHAiPgotICAgICAgPEZpbHRlcj5kZmc8L0Zp
bHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xE
RkdUcmFuc2l0aW9uLmNwcCI+Ci0gICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPgotICAgIDwvQ2xD
b21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1ZhbHVlU3RyZW5ndGgu
Y3BwIj4KLSAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHV2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmdQ
aGFzZS5jcHAiPgotICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4K
LSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRXhjZXB0aW9uRnV6ei5jcHAiPgot
ICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxTdHJ1Y3R1cmVTZXQuY3BwIj4KLSAgICAgIDxG
aWx0ZXI+Ynl0ZWNvZGU8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFRvVGhpc1N0YXR1cy5jcHAiPgotICAgICAgPEZpbHRlcj5i
eXRlY29kZTwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cYnl0ZWNvZGVcVmFyaWFibGVXYXRjaHBvaW50U2V0LmNwcCI+Ci0gICAgICA8RmlsdGVy
PmJ5dGVjb2RlPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gIDwvSXRlbUdyb3VwPgotICA8
SXRlbUdyb3VwPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cQVBJXEFQSUNhbGxiYWNrRnVu
Y3Rpb24uaCI+Ci0gICAgICA8RmlsdGVyPkFQSTwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgot
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cQVBJXEFQSUNhc3QuaCI+Ci0gICAgICA8RmlsdGVy
PkFQSTwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5cQVBJXEphdmFTY3JpcHQuaCI+Ci0gICAgICA8RmlsdGVyPkFQSTwvRmlsdGVyPgotICAgIDwv
Q2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cQVBJXEphdmFTY3JpcHRDb3Jl
LmgiPgotICAgICAgPEZpbHRlcj5BUEk8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXEFQSVxKU0Jhc2UuaCI+Ci0gICAgICA8RmlsdGVyPkFQSTwv
RmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cQVBJ
XEpTQmFzZVByaXZhdGUuaCI+Ci0gICAgICA8RmlsdGVyPkFQSTwvRmlsdGVyPgotICAgIDwvQ2xJ
bmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cQVBJXEpTQ2FsbGJhY2tDb25zdHJ1
Y3Rvci5oIj4KLSAgICAgIDxGaWx0ZXI+QVBJPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0g
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxBUElcSlNDYWxsYmFja0Z1bmN0aW9uLmgiPgotICAg
ICAgPEZpbHRlcj5BUEk8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXEFQSVxKU0NhbGxiYWNrT2JqZWN0LmgiPgotICAgICAgPEZpbHRlcj5BUEk8
L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXEFQ
SVxKU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmgiPgotICAgICAgPEZpbHRlcj5BUEk8L0ZpbHRl
cj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXEFQSVxKU0Ns
YXNzUmVmLmgiPgotICAgICAgPEZpbHRlcj5BUEk8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4K
LSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXEFQSVxKU0NvbnRleHQuaCI+Ci0gICAgICA8Rmls
dGVyPkFQSTwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cQVBJXEpTQ29udGV4dEludGVybmFsLmgiPgotICAgICAgPEZpbHRlcj5BUEk8L0ZpbHRl
cj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXEFQSVxKU0Nv
bnRleHRSZWYuaCI+Ci0gICAgICA8RmlsdGVyPkFQSTwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRl
PgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cQVBJXEpTQ29udGV4dFJlZlByaXZhdGUuaCI+
Ci0gICAgICA8RmlsdGVyPkFQSTwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cQVBJXEpTRXhwb3J0LmgiPgotICAgICAgPEZpbHRlcj5BUEk8L0Zp
bHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXEFQSVxK
U09iamVjdFJlZi5oIj4KLSAgICAgIDxGaWx0ZXI+QVBJPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1
ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxBUElcSlNPYmplY3RSZWZQcml2YXRlLmgi
PgotICAgICAgPEZpbHRlcj5BUEk8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXEFQSVxKU1JldGFpblB0ci5oIj4KLSAgICAgIDxGaWx0ZXI+QVBJ
PC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxB
UElcSlNTY3JpcHRSZWZQcml2YXRlLmgiPgotICAgICAgPEZpbHRlcj5BUEk8L0ZpbHRlcj4KLSAg
ICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXEFQSVxKU1N0cmluZ1Jl
Zi5oIj4KLSAgICAgIDxGaWx0ZXI+QVBJPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxBUElcSlNTdHJpbmdSZWZCU1RSLmgiPgotICAgICAgPEZp
bHRlcj5BUEk8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXEFQSVxKU1N0cmluZ1JlZkNGLmgiPgotICAgICAgPEZpbHRlcj5BUEk8L0ZpbHRlcj4K
LSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXEFQSVxKU1ZhbHVl
SW50ZXJuYWwuaCI+Ci0gICAgICA8RmlsdGVyPkFQSTwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRl
PgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cQVBJXEpTVmFsdWVSZWYuaCI+Ci0gICAgICA8
RmlsdGVyPkFQSTwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cQVBJXEpTV2Vha09iamVjdE1hcFJlZkludGVybmFsLmgiPgotICAgICAgPEZpbHRl
cj5BUEk8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXEFQSVxKU1dlYWtPYmplY3RNYXBSZWZQcml2YXRlLmgiPgotICAgICAgPEZpbHRlcj5BUEk8
L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXEFQ
SVxKU1dyYXBwZXJNYXAuaCI+Ci0gICAgICA8RmlsdGVyPkFQSTwvRmlsdGVyPgotICAgIDwvQ2xJ
bmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cQVBJXE9wYXF1ZUpTU3RyaW5nLmgi
PgotICAgICAgPEZpbHRlcj5BUEk8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXEFQSVxXZWJLaXRBdmFpbGFiaWxpdHkuaCI+Ci0gICAgICA8Rmls
dGVyPkFQSTwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cYXNzZW1ibGVyXEFic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaCI+Ci0gICAgICA8RmlsdGVy
PmFzc2VtYmxlcjwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cYXNzZW1ibGVyXEFzc2VtYmxlckJ1ZmZlci5oIj4KLSAgICAgIDxGaWx0ZXI+YXNz
ZW1ibGVyPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxhc3NlbWJsZXJcQ29kZUxvY2F0aW9uLmgiPgotICAgICAgPEZpbHRlcj5hc3NlbWJsZXI8
L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGFz
c2VtYmxlclxMaW5rQnVmZmVyLmgiPgotICAgICAgPEZpbHRlcj5hc3NlbWJsZXI8L0ZpbHRlcj4K
LSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGFzc2VtYmxlclxN
YWNyb0Fzc2VtYmxlci5oIj4KLSAgICAgIDxGaWx0ZXI+YXNzZW1ibGVyPC9GaWx0ZXI+Ci0gICAg
PC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxhc3NlbWJsZXJcTWFjcm9B
c3NlbWJsZXJYODYuaCI+Ci0gICAgICA8RmlsdGVyPmFzc2VtYmxlcjwvRmlsdGVyPgotICAgIDwv
Q2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYXNzZW1ibGVyXE1hY3JvQXNz
ZW1ibGVyWDg2Q29tbW9uLmgiPgotICAgICAgPEZpbHRlcj5hc3NlbWJsZXI8L0ZpbHRlcj4KLSAg
ICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGFzc2VtYmxlclxNYWNy
b0Fzc2VtYmxlclg4Nl82NC5oIj4KLSAgICAgIDxGaWx0ZXI+YXNzZW1ibGVyPC9GaWx0ZXI+Ci0g
ICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxhc3NlbWJsZXJcTWF4
RnJhbWVFeHRlbnRGb3JTbG93UGF0aENhbGwuaCI+Ci0gICAgICA8RmlsdGVyPmFzc2VtYmxlcjwv
RmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYXNz
ZW1ibGVyXFJlcGF0Y2hCdWZmZXIuaCI+Ci0gICAgICA8RmlsdGVyPmFzc2VtYmxlcjwvRmlsdGVy
PgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYXNzZW1ibGVy
XFg4NkFzc2VtYmxlci5oIj4KLSAgICAgIDxGaWx0ZXI+YXNzZW1ibGVyPC9GaWx0ZXI+Ci0gICAg
PC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxidWlsdGluc1xCdWlsdGlu
RXhlY3V0YWJsZXMuaCI+Ci0gICAgICA8RmlsdGVyPmJ1aWx0aW5zPC9GaWx0ZXI+Ci0gICAgPC9D
bEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxBcnJheUFsbG9j
YXRpb25Qcm9maWxlLmgiPgotICAgICAgPEZpbHRlcj5ieXRlY29kZTwvRmlsdGVyPgotICAgIDwv
Q2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcQXJyYXlQcm9m
aWxlLmgiPgotICAgICAgPEZpbHRlcj5ieXRlY29kZTwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRl
PgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcQnlWYWxJbmZvLmgiPgotICAg
ICAgPEZpbHRlcj5ieXRlY29kZTwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcQnl0ZWNvZGVCYXNpY0Jsb2NrLmgiPgotICAgICAg
PEZpbHRlcj5ieXRlY29kZTwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmgiPgotICAg
ICAgPEZpbHRlcj5ieXRlY29kZTwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcQ2FsbExpbmtJbmZvLmgiPgotICAgICAgPEZpbHRl
cj5ieXRlY29kZTwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cYnl0ZWNvZGVcQ2FsbExpbmtTdGF0dXMuaCI+Ci0gICAgICA8RmlsdGVyPmJ5dGVj
b2RlPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxieXRlY29kZVxDYWxsUmV0dXJuT2Zmc2V0VG9CeXRlY29kZU9mZnNldC5oIj4KLSAgICAgIDxG
aWx0ZXI+Ynl0ZWNvZGU8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXENvZGVCbG9jay5oIj4KLSAgICAgIDxGaWx0ZXI+Ynl0ZWNv
ZGU8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGJ5dGVjb2RlXENvZGVCbG9ja0hhc2guaCI+Ci0gICAgICA8RmlsdGVyPmJ5dGVjb2RlPC9GaWx0
ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29k
ZVxDb2RlQmxvY2tXaXRoSklUVHlwZS5oIj4KLSAgICAgIDxGaWx0ZXI+Ynl0ZWNvZGU8L0ZpbHRl
cj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2Rl
XENvZGVPcmlnaW4uaCI+Ci0gICAgICA8RmlsdGVyPmJ5dGVjb2RlPC9GaWx0ZXI+Ci0gICAgPC9D
bEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxDb2RlVHlwZS5o
Ij4KLSAgICAgIDxGaWx0ZXI+Ynl0ZWNvZGU8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXENvbW1lbnQuaCI+Ci0gICAgICA8Rmls
dGVyPmJ5dGVjb2RlPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxieXRlY29kZVxFdmFsQ29kZUNhY2hlLmgiPgotICAgICAgPEZpbHRlcj5ieXRl
Y29kZTwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5cYnl0ZWNvZGVcRXhlY3V0aW9uQ291bnRlci5oIj4KLSAgICAgIDxGaWx0ZXI+Ynl0ZWNvZGU8
L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5
dGVjb2RlXEV4aXRLaW5kLmgiPgotICAgICAgPEZpbHRlcj5ieXRlY29kZTwvRmlsdGVyPgotICAg
IDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcRXhwcmVz
c2lvblJhbmdlSW5mby5oIj4KLSAgICAgIDxGaWx0ZXI+Ynl0ZWNvZGU8L0ZpbHRlcj4KLSAgICA8
L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXEdldEJ5SWRT
dGF0dXMuaCI+Ci0gICAgICA8RmlsdGVyPmJ5dGVjb2RlPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1
ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxIYW5kbGVySW5mby5oIj4K
LSAgICAgIDxGaWx0ZXI+Ynl0ZWNvZGU8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXEluc3RydWN0aW9uLmgiPgotICAgICAgPEZp
bHRlcj5ieXRlY29kZTwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5cYnl0ZWNvZGVcSnVtcFRhYmxlLmgiPgotICAgICAgPEZpbHRlcj5ieXRlY29k
ZTwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
Ynl0ZWNvZGVcTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuaCI+Ci0gICAgICA8RmlsdGVyPmJ5dGVj
b2RlPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxieXRlY29kZVxMTEludENhbGxMaW5rSW5mby5oIj4KLSAgICAgIDxGaWx0ZXI+Ynl0ZWNvZGU8
L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5
dGVjb2RlXE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuaCI+Ci0gICAgICA8RmlsdGVyPmJ5
dGVjb2RlPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxieXRlY29kZVxPcGNvZGUuaCI+Ci0gICAgICA8RmlsdGVyPmJ5dGVjb2RlPC9GaWx0ZXI+
Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxP
cGVyYW5kcy5oIj4KLSAgICAgIDxGaWx0ZXI+Ynl0ZWNvZGU8L0ZpbHRlcj4KLSAgICA8L0NsSW5j
bHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFBvbHltb3JwaGljUHV0
QnlJZExpc3QuaCI+Ci0gICAgICA8RmlsdGVyPmJ5dGVjb2RlPC9GaWx0ZXI+Ci0gICAgPC9DbElu
Y2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxQdXRCeUlkU3RhdHVz
LmgiPgotICAgICAgPEZpbHRlcj5ieXRlY29kZTwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgot
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcUHV0S2luZC5oIj4KLSAgICAgIDxG
aWx0ZXI+Ynl0ZWNvZGU8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFJlZHVjZVdoaXRlc3BhY2UuaCI+Ci0gICAgICA8RmlsdGVy
PmJ5dGVjb2RlPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxieXRlY29kZVxTYW1wbGluZ1Rvb2wuaCI+Ci0gICAgICA8RmlsdGVyPmJ5dGVjb2Rl
PC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxi
eXRlY29kZVxTcGVjaWFsUG9pbnRlci5oIj4KLSAgICAgIDxGaWx0ZXI+Ynl0ZWNvZGU8L0ZpbHRl
cj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2Rl
XFNwZWN1bGF0ZWRUeXBlLmgiPgotICAgICAgPEZpbHRlcj5ieXRlY29kZTwvRmlsdGVyPgotICAg
IDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcU3RydWN0
dXJlU2V0LmgiPgotICAgICAgPEZpbHRlcj5ieXRlY29kZTwvRmlsdGVyPgotICAgIDwvQ2xJbmNs
dWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcU3RydWN0dXJlU3R1YkNs
ZWFyaW5nV2F0Y2hwb2ludC5oIj4KLSAgICAgIDxGaWx0ZXI+Ynl0ZWNvZGU8L0ZpbHRlcj4KLSAg
ICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFN0cnVj
dHVyZVN0dWJJbmZvLmgiPgotICAgICAgPEZpbHRlcj5ieXRlY29kZTwvRmlsdGVyPgotICAgIDwv
Q2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcVHlwZUxvY2F0
aW9uLmgiPgotICAgICAgPEZpbHRlcj5ieXRlY29kZTwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRl
PgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcVW5saW5rZWRDb2RlQmxvY2su
aCI+Ci0gICAgICA8RmlsdGVyPmJ5dGVjb2RlPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0g
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxVbmxpbmtlZEluc3RydWN0aW9uU3Ry
ZWFtLmgiPgotICAgICAgPEZpbHRlcj5ieXRlY29kZTwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRl
PgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcVmFsdWVQcm9maWxlLmgiPgot
ICAgICAgPEZpbHRlcj5ieXRlY29kZTwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcVmFsdWVSZWNvdmVyeS5oIj4KLSAgICAgIDxG
aWx0ZXI+Ynl0ZWNvZGU8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFZpcnR1YWxSZWdpc3Rlci5oIj4KLSAgICAgIDxGaWx0ZXI+
Ynl0ZWNvZGU8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGJ5dGVjb2RlXFdhdGNocG9pbnQuaCI+Ci0gICAgICA8RmlsdGVyPmJ5dGVjb2RlPC9G
aWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRl
Y29tcGlsZXJcQnl0ZWNvZGVHZW5lcmF0b3IuaCI+Ci0gICAgICA8RmlsdGVyPmJ5dGVjb2RlY29t
cGlsZXI8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXGJ5dGVjb21waWxlclxMYWJlbC5oIj4KLSAgICAgIDxGaWx0ZXI+Ynl0ZWNvZGVjb21waWxl
cjwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
Ynl0ZWNvbXBpbGVyXExhYmVsU2NvcGUuaCI+Ci0gICAgICA8RmlsdGVyPmJ5dGVjb2RlY29tcGls
ZXI8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGJ5dGVjb21waWxlclxSZWdpc3RlcklELmgiPgotICAgICAgPEZpbHRlcj5ieXRlY29kZWNvbXBp
bGVyPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxkZWJ1Z2dlclxCcmVha3BvaW50LmgiPgotICAgICAgPEZpbHRlcj5kZWJ1Z2dlcjwvRmlsdGVy
PgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGVidWdnZXJc
RGVidWdnZXIuaCI+Ci0gICAgICA8RmlsdGVyPmRlYnVnZ2VyPC9GaWx0ZXI+Ci0gICAgPC9DbElu
Y2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZWJ1Z2dlclxEZWJ1Z2dlckNhbGxG
cmFtZS5oIj4KLSAgICAgIDxGaWx0ZXI+ZGVidWdnZXI8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVk
ZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRlYnVnZ2VyXERlYnVnZ2VyUHJpbWl0aXZl
cy5oIj4KLSAgICAgIDxGaWx0ZXI+ZGVidWdnZXI8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4K
LSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRlYnVnZ2VyXERlYnVnZ2VyU2NvcGUuaCI+Ci0g
ICAgICA8RmlsdGVyPmRlYnVnZ2VyPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHRHJpdmVyLmgiPgotICAgICAgPEZpbHRlcj5kZmc8
L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRm
Z1xERkdPU1JFbnRyeS5oIj4KLSAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+Ci0gICAgPC9DbElu
Y2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkaXNhc3NlbWJsZXJcRGlzYXNzZW1i
bGVyLmgiPgotICAgICAgPEZpbHRlcj5kaXNhc3NlbWJsZXI8L0ZpbHRlcj4KLSAgICA8L0NsSW5j
bHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcQmxvY2tBbGxvY2F0b3IuaCI+
Ci0gICAgICA8RmlsdGVyPmhlYXA8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcQ29uc2VydmF0aXZlUm9vdHMuaCI+Ci0gICAgICA8Rmls
dGVyPmhlYXA8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGhlYXBcQ29waWVkQWxsb2NhdG9yLmgiPgotICAgICAgPEZpbHRlcj5oZWFwPC9GaWx0
ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXENv
cGllZEJsb2NrLmgiPgotICAgICAgPEZpbHRlcj5oZWFwPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1
ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXENvcGllZEJsb2NrSW5saW5lcy5o
Ij4KLSAgICAgIDxGaWx0ZXI+aGVhcDwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5caGVhcFxDb3BpZWRTcGFjZS5oIj4KLSAgICAgIDxGaWx0ZXI+
aGVhcDwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5caGVhcFxDb3BpZWRTcGFjZUlubGluZXMuaCI+Ci0gICAgICA8RmlsdGVyPmhlYXA8L0ZpbHRl
cj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcQ29w
eVZpc2l0b3IuaCI+Ci0gICAgICA8RmlsdGVyPmhlYXA8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVk
ZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcQ29weVZpc2l0b3JJbmxpbmVzLmgi
PgotICAgICAgPEZpbHRlcj5oZWFwPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXENvcHlXb3JrTGlzdC5oIj4KLSAgICAgIDxGaWx0ZXI+
aGVhcDwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5caGVhcFxDb3B5V3JpdGVCYXJyaWVyLmgiPgotICAgICAgPEZpbHRlcj5oZWFwPC9GaWx0ZXI+
Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXERlZmVy
R0MuaCI+Ci0gICAgICA8RmlsdGVyPmhlYXA8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcRWRlbkdDQWN0aXZpdHlDYWxsYmFjay5oIj4K
LSAgICAgIDxGaWx0ZXI+aGVhcDwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5caGVhcFxGdWxsR0NBY3Rpdml0eUNhbGxiYWNrLmgiPgotICAgICAg
PEZpbHRlcj5oZWFwPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxoZWFwXEdDQWN0aXZpdHlDYWxsYmFjay5oIj4KLSAgICAgIDxGaWx0ZXI+aGVh
cDwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
aGVhcFxHQ0xvZ2dpbmcuaCI+Ci0gICAgICA8RmlsdGVyPmhlYXA8L0ZpbHRlcj4KLSAgICA8L0Ns
SW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcR0NTZWdtZW50ZWRBcnJh
eS5oIj4KLSAgICAgIDxGaWx0ZXI+aGVhcDwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caGVhcFxHQ1NlZ21lbnRlZEFycmF5SW5saW5lcy5oIj4K
LSAgICAgIDxGaWx0ZXI+aGVhcDwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5caGVhcFxHQ0Fzc2VydGlvbnMuaCI+Ci0gICAgICA8RmlsdGVyPmhl
YXA8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGhlYXBcR0NUaHJlYWQuaCI+Ci0gICAgICA8RmlsdGVyPmhlYXA8L0ZpbHRlcj4KLSAgICA8L0Ns
SW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcR0NUaHJlYWRTaGFyZWRE
YXRhLmgiPgotICAgICAgPEZpbHRlcj5oZWFwPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0g
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXEhhbmRsZS5oIj4KLSAgICAgIDxGaWx0ZXI+
aGVhcDwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5caGVhcFxIYW5kbGVCbG9jay5oIj4KLSAgICAgIDxGaWx0ZXI+aGVhcDwvRmlsdGVyPgotICAg
IDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caGVhcFxIYW5kbGVCbG9j
a0lubGluZXMuaCI+Ci0gICAgICA8RmlsdGVyPmhlYXA8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVk
ZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcSGFuZGxlU2V0LmgiPgotICAgICAg
PEZpbHRlcj5oZWFwPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxoZWFwXEhhbmRsZVN0YWNrLmgiPgotICAgICAgPEZpbHRlcj5oZWFwPC9GaWx0
ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXEhh
bmRsZVR5cGVzLmgiPgotICAgICAgPEZpbHRlcj5oZWFwPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1
ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXEhlYXAuaCI+Ci0gICAgICA8Rmls
dGVyPmhlYXA8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGhlYXBcSGVhcEJsb2NrLmgiPgotICAgICAgPEZpbHRlcj5oZWFwPC9GaWx0ZXI+Ci0g
ICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXEhlYXBJbmxp
bmVzLmgiPgotICAgICAgPEZpbHRlcj5oZWFwPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0g
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXEhlYXBPcGVyYXRpb24uaCI+Ci0gICAgICA8
RmlsdGVyPmhlYXA8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXGhlYXBcSGVhcFJvb3RWaXNpdG9yLmgiPgotICAgICAgPEZpbHRlcj5oZWFwPC9G
aWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFw
XEhlYXBTdGF0aXN0aWNzLmgiPgotICAgICAgPEZpbHRlcj5oZWFwPC9GaWx0ZXI+Ci0gICAgPC9D
bEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXEhlYXBUaW1lci5oIj4K
LSAgICAgIDxGaWx0ZXI+aGVhcDwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5caGVhcFxJbmNyZW1lbnRhbFN3ZWVwZXIuaCI+Ci0gICAgICA8Rmls
dGVyPmhlYXA8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGhlYXBcSklUU3R1YlJvdXRpbmVTZXQuaCI+Ci0gICAgICA8RmlsdGVyPmhlYXA8L0Zp
bHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBc
TGlzdGFibGVIYW5kbGVyLmgiPgotICAgICAgPEZpbHRlcj5oZWFwPC9GaWx0ZXI+Ci0gICAgPC9D
bEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXExvY2FsLmgiPgotICAg
ICAgPEZpbHRlcj5oZWFwPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxoZWFwXExvY2FsU2NvcGUuaCI+Ci0gICAgICA8RmlsdGVyPmhlYXA8L0Zp
bHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBc
TWFjaGluZVN0YWNrTWFya2VyLmgiPgotICAgICAgPEZpbHRlcj5oZWFwPC9GaWx0ZXI+Ci0gICAg
PC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXE1hcmtlZEFsbG9j
YXRvci5oIj4KLSAgICAgIDxGaWx0ZXI+aGVhcDwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgot
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caGVhcFxNYXJrZWRCbG9jay5oIj4KLSAgICAgIDxG
aWx0ZXI+aGVhcDwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5caGVhcFxNYXJrZWRCbG9ja1NldC5oIj4KLSAgICAgIDxGaWx0ZXI+aGVhcDwvRmls
dGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caGVhcFxN
YXJrZWRTcGFjZS5oIj4KLSAgICAgIDxGaWx0ZXI+aGVhcDwvRmlsdGVyPgotICAgIDwvQ2xJbmNs
dWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caGVhcFxNYXJrU3RhY2suaCI+Ci0gICAg
ICA8RmlsdGVyPmhlYXA8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXGhlYXBcUmVjdXJzaXZlQWxsb2NhdGlvblNjb3BlLmgiPgotICAgICAgPEZp
bHRlcj5oZWFwPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxoZWFwXFJlZ2lvbi5oIj4KLSAgICAgIDxGaWx0ZXI+aGVhcDwvRmlsdGVyPgotICAg
IDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caGVhcFxTbG90VmlzaXRv
ci5oIj4KLSAgICAgIDxGaWx0ZXI+aGVhcDwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caGVhcFxTbG90VmlzaXRvcklubGluZXMuaCI+Ci0gICAg
ICA8RmlsdGVyPmhlYXA8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXGhlYXBcU3Ryb25nLmgiPgotICAgICAgPEZpbHRlcj5oZWFwPC9GaWx0ZXI+
Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXFN0cm9u
Z0lubGluZXMuaCI+Ci0gICAgICA8RmlsdGVyPmhlYXA8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVk
ZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcU3VwZXJSZWdpb24uaCI+Ci0gICAg
ICA8RmlsdGVyPmhlYXA8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXGhlYXBcVGlueUJsb29tRmlsdGVyLmgiPgotICAgICAgPEZpbHRlcj5oZWFw
PC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxo
ZWFwXFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIuaCI+Ci0gICAgICA8RmlsdGVyPmhlYXA8L0ZpbHRl
cj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcV2Vh
ay5oIj4KLSAgICAgIDxGaWx0ZXI+aGVhcDwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caGVhcFxXZWFrQmxvY2suaCI+Ci0gICAgICA8RmlsdGVy
PmhlYXA8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXGhlYXBcV2Vha0hhbmRsZU93bmVyLmgiPgotICAgICAgPEZpbHRlcj5oZWFwPC9GaWx0ZXI+
Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXFdlYWtJ
bXBsLmgiPgotICAgICAgPEZpbHRlcj5oZWFwPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0g
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIuaCI+
Ci0gICAgICA8RmlsdGVyPmhlYXA8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcV2Vha1NldC5oIj4KLSAgICAgIDxGaWx0ZXI+aGVhcDwv
RmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caGVh
cFxXZWFrU2V0SW5saW5lcy5oIj4KLSAgICAgIDxGaWx0ZXI+aGVhcDwvRmlsdGVyPgotICAgIDwv
Q2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caGVhcFxXcml0ZUJhcnJpZXJC
dWZmZXIuaCI+Ci0gICAgICA8RmlsdGVyPmhlYXA8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4K
LSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcV3JpdGVCYXJyaWVyU3VwcG9ydC5oIj4K
LSAgICAgIDxGaWx0ZXI+aGVhcDwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXENvbnRlbnRTZWFyY2hVdGlsaXRpZXMuaCI+Ci0g
ICAgICA8RmlsdGVyPmluc3BlY3RvcjwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXEluc3BlY3RvckFnZW50QmFzZS5oIj4KLSAg
ICAgIDxGaWx0ZXI+aW5zcGVjdG9yPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcSW5zcGVjdG9yQWdlbnRSZWdpc3RyeS5oIj4K
LSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXIuaCI+Ci0gICAgICA8RmlsdGVyPmluc3BlY3RvcjwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRl
PgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXEluc3BlY3RvckZyb250ZW5k
Q2hhbm5lbC5oIj4KLSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yPC9GaWx0ZXI+Ci0gICAgPC9DbElu
Y2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcSW5zcGVjdG9yVHlw
ZUJ1aWxkZXIuaCI+Ci0gICAgICA8RmlsdGVyPmluc3BlY3RvcjwvRmlsdGVyPgotICAgIDwvQ2xJ
bmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXEluc3BlY3RvclZh
bHVlcy5oIj4KLSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1
ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcYWdlbnRzXEluc3BlY3Rv
ckFnZW50LmgiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0b3I8L0ZpbHRlcj4KLSAgICA8L0NsSW5j
bHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGluc3BlY3RvclxhZ2VudHNcSW5zcGVj
dG9yRGVidWdnZXJBZ2VudC5oIj4KLSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yPC9GaWx0ZXI+Ci0g
ICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcYWdl
bnRzXEluc3BlY3RvclByb2ZpbGVyQWdlbnQuaCI+Ci0gICAgICA8RmlsdGVyPmluc3BlY3Rvcjwv
RmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caW5z
cGVjdG9yXGFnZW50c1xJbnNwZWN0b3JSdW50aW1lQWdlbnQuaCI+Ci0gICAgICA8RmlsdGVyPmlu
c3BlY3RvcjwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5caW50ZXJwcmV0ZXJcQWJzdHJhY3RQQy5oIj4KLSAgICAgIDxGaWx0ZXI+aW50ZXJwcmV0
ZXI8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGludGVycHJldGVyXENhY2hlZENhbGwuaCI+Ci0gICAgICA8RmlsdGVyPmludGVycHJldGVyPC9G
aWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxpbnRl
cnByZXRlclxDYWxsRnJhbWUuaCI+Ci0gICAgICA8RmlsdGVyPmludGVycHJldGVyPC9GaWx0ZXI+
Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxpbnRlcnByZXRl
clxDYWxsRnJhbWVJbmxpbmVzLmgiPgotICAgICAgPEZpbHRlcj5pbnRlcnByZXRlcjwvRmlsdGVy
PgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caW50ZXJwcmV0
ZXJcQ2FsbEZyYW1lQ2xvc3VyZS5oIj4KLSAgICAgIDxGaWx0ZXI+aW50ZXJwcmV0ZXI8L0ZpbHRl
cj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGludGVycHJl
dGVyXEludGVycHJldGVyLmgiPgotICAgICAgPEZpbHRlcj5pbnRlcnByZXRlcjwvRmlsdGVyPgot
ICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caW50ZXJwcmV0ZXJc
SlNTdGFjay5oIj4KLSAgICAgIDxGaWx0ZXI+aW50ZXJwcmV0ZXI8L0ZpbHRlcj4KLSAgICA8L0Ns
SW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGludGVycHJldGVyXEpTU3RhY2tJ
bmxpbmVzLmgiPgotICAgICAgPEZpbHRlcj5pbnRlcnByZXRlcjwvRmlsdGVyPgotICAgIDwvQ2xJ
bmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caW50ZXJwcmV0ZXJcUHJvdG9DYWxs
RnJhbWUuaCI+Ci0gICAgICA8RmlsdGVyPmludGVycHJldGVyPC9GaWx0ZXI+Ci0gICAgPC9DbElu
Y2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxpbnRlcnByZXRlclxSZWdpc3Rlci5o
Ij4KLSAgICAgIDxGaWx0ZXI+aW50ZXJwcmV0ZXI8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4K
LSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGludGVycHJldGVyXFN0YWNrVmlzaXRvci5oIj4K
LSAgICAgIDxGaWx0ZXI+aW50ZXJwcmV0ZXI8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGludGVycHJldGVyXFZNSW5zcGVjdG9yLmgiPgotICAg
ICAgPEZpbHRlcj5pbnRlcnByZXRlcjwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5caml0XENsb3N1cmVDYWxsU3R1YlJvdXRpbmUuaCI+Ci0gICAg
ICA8RmlsdGVyPmppdDwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5caml0XENvbXBhY3RKSVRDb2RlTWFwLmgiPgotICAgICAgPEZpbHRlcj5qaXQ8
L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGpp
dFxFeGVjdXRhYmxlQWxsb2NhdG9yLmgiPgotICAgICAgPEZpbHRlcj5qaXQ8L0ZpbHRlcj4KLSAg
ICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxHQ0F3YXJlSklU
U3R1YlJvdXRpbmUuaCI+Ci0gICAgICA8RmlsdGVyPmppdDwvRmlsdGVyPgotICAgIDwvQ2xJbmNs
dWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caml0XEhvc3RDYWxsUmV0dXJuVmFsdWUu
aCI+Ci0gICAgICA8RmlsdGVyPmppdDwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5caml0XEpJVC5oIj4KLSAgICAgIDxGaWx0ZXI+aml0PC9GaWx0
ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcSklU
Q29kZS5oIj4KLSAgICAgIDxGaWx0ZXI+aml0PC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0g
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcSklUQ29tcGlsYXRpb25FZmZvcnQuaCI+Ci0g
ICAgICA8RmlsdGVyPmppdDwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5caml0XEpJVERpc2Fzc2VtYmxlci5oIj4KLSAgICAgIDxGaWx0ZXI+aml0
PC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxq
aXRcSklURXhjZXB0aW9ucy5oIj4KLSAgICAgIDxGaWx0ZXI+aml0PC9GaWx0ZXI+Ci0gICAgPC9D
bEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcSklUSW5saW5lcy5oIj4K
LSAgICAgIDxGaWx0ZXI+aml0PC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxqaXRcSklUU3R1YlJvdXRpbmUuaCI+Ci0gICAgICA8RmlsdGVyPmpp
dDwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
aml0XEpJVFN0dWJzLmgiPgotICAgICAgPEZpbHRlcj5qaXQ8L0ZpbHRlcj4KLSAgICA8L0NsSW5j
bHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxKSVRTdHVic1g4Ni5oIj4KLSAg
ICAgIDxGaWx0ZXI+aml0PC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxqaXRcSklUU3R1YnNYODZDb21tb24uaCI+Ci0gICAgICA8RmlsdGVyPmpp
dDwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
aml0XEpJVFN0dWJzWDg2XzY0LmgiPgotICAgICAgPEZpbHRlcj5qaXQ8L0ZpbHRlcj4KLSAgICA8
L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxKSVRUaHVua3MuaCI+
Ci0gICAgICA8RmlsdGVyPmppdDwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5caml0XEpJVFdyaXRlQmFycmllci5oIj4KLSAgICAgIDxGaWx0ZXI+
aml0PC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxqaXRcSlNJbnRlcmZhY2VKSVQuaCI+Ci0gICAgICA8RmlsdGVyPmppdDwvRmlsdGVyPgotICAg
IDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caml0XFNwZWNpYWxpemVk
VGh1bmtKSVQuaCI+Ci0gICAgICA8RmlsdGVyPmppdDwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRl
PgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caml0XFRodW5rR2VuZXJhdG9yLmgiPgotICAg
ICAgPEZpbHRlcj5qaXQ8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXGppdFxUaHVua0dlbmVyYXRvcnMuaCI+Ci0gICAgICA8RmlsdGVyPmppdDwv
RmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caml0
XFVudXNlZFBvaW50ZXIuaCI+Ci0gICAgICA8RmlsdGVyPmppdDwvRmlsdGVyPgotICAgIDwvQ2xJ
bmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cbGxpbnRcTExJbnRDTG9vcC5oIj4K
LSAgICAgIDxGaWx0ZXI+bGxpbnQ8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXGxsaW50XExMSW50Q29tbW9uLmgiPgotICAgICAgPEZpbHRlcj5s
bGludDwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5cbGxpbnRcTExJbnREYXRhLmgiPgotICAgICAgPEZpbHRlcj5sbGludDwvRmlsdGVyPgotICAg
IDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cbGxpbnRcTExJbnRFeGNl
cHRpb25zLmgiPgotICAgICAgPEZpbHRlcj5sbGludDwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRl
PgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cbGxpbnRcTExJbnRPZmZsaW5lQXNtQ29uZmln
LmgiPgotICAgICAgPEZpbHRlcj5sbGludDwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cbGxpbnRcTExJbnRPcGNvZGUuaCI+Ci0gICAgICA8Rmls
dGVyPmxsaW50PC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxsbGludFxMTEludFNsb3dQYXRocy5oIj4KLSAgICAgIDxGaWx0ZXI+bGxpbnQ8L0Zp
bHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGxsaW50
XExMSW50VGh1bmtzLmgiPgotICAgICAgPEZpbHRlcj5sbGludDwvRmlsdGVyPgotICAgIDwvQ2xJ
bmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cbGxpbnRcTG93TGV2ZWxJbnRlcnBy
ZXRlci5oIj4KLSAgICAgIDxGaWx0ZXI+bGxpbnQ8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4K
LSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBhcnNlclxBU1RCdWlsZGVyLmgiPgotICAgICAg
PEZpbHRlcj5wYXJzZXI8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXHBhcnNlclxMZXhlci5oIj4KLSAgICAgIDxGaWx0ZXI+cGFyc2VyPC9GaWx0
ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwYXJzZXJc
Tm9kZUNvbnN0cnVjdG9ycy5oIj4KLSAgICAgIDxGaWx0ZXI+cGFyc2VyPC9GaWx0ZXI+Ci0gICAg
PC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwYXJzZXJcTm9kZUluZm8u
aCI+Ci0gICAgICA8RmlsdGVyPnBhcnNlcjwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGFyc2VyXE5vZGVzLmgiPgotICAgICAgPEZpbHRlcj5w
YXJzZXI8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXHBhcnNlclxQYXJzZXIuaCI+Ci0gICAgICA8RmlsdGVyPnBhcnNlcjwvRmlsdGVyPgotICAg
IDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGFyc2VyXFBhcnNlckFy
ZW5hLmgiPgotICAgICAgPEZpbHRlcj5wYXJzZXI8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4K
LSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBhcnNlclxQYXJzZXJNb2Rlcy5oIj4KLSAgICAg
IDxGaWx0ZXI+cGFyc2VyPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxwYXJzZXJcUGFyc2VyVG9rZW5zLmgiPgotICAgICAgPEZpbHRlcj5wYXJz
ZXI8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XHBhcnNlclxSZXN1bHRUeXBlLmgiPgotICAgICAgPEZpbHRlcj5wYXJzZXI8L0ZpbHRlcj4KLSAg
ICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBhcnNlclxTb3VyY2VD
b2RlLmgiPgotICAgICAgPEZpbHRlcj5wYXJzZXI8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4K
LSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBhcnNlclxTb3VyY2VQcm92aWRlci5oIj4KLSAg
ICAgIDxGaWx0ZXI+cGFyc2VyPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxwYXJzZXJcU291cmNlUHJvdmlkZXJDYWNoZS5oIj4KLSAgICAgIDxG
aWx0ZXI+cGFyc2VyPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxwYXJzZXJcU291cmNlUHJvdmlkZXJDYWNoZUl0ZW0uaCI+Ci0gICAgICA8Rmls
dGVyPnBhcnNlcjwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5ccGFyc2VyXFN5bnRheENoZWNrZXIuaCI+Ci0gICAgICA8RmlsdGVyPnBhcnNlcjwv
RmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccHJv
ZmlsZXJcQ2FsbElkZW50aWZpZXIuaCI+Ci0gICAgICA8RmlsdGVyPnByb2ZpbGVyPC9GaWx0ZXI+
Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwcm9maWxlclxM
ZWdhY3lQcm9maWxlci5oIj4KLSAgICAgIDxGaWx0ZXI+cHJvZmlsZXI8L0ZpbHRlcj4KLSAgICA8
L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHByb2ZpbGVyXFByb2ZpbGUu
aCI+Ci0gICAgICA8RmlsdGVyPnByb2ZpbGVyPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0g
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwcm9maWxlclxQcm9maWxlR2VuZXJhdG9yLmgiPgot
ICAgICAgPEZpbHRlcj5wcm9maWxlcjwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5ccHJvZmlsZXJcUHJvZmlsZU5vZGUuaCI+Ci0gICAgICA8Rmls
dGVyPnByb2ZpbGVyPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxwcm9maWxlclxQcm9maWxlckJ5dGVjb2RlLmgiPgotICAgICAgPEZpbHRlcj5w
cm9maWxlcjwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5ccHJvZmlsZXJcUHJvZmlsZXJCeXRlY29kZXMuaCI+Ci0gICAgICA8RmlsdGVyPnByb2Zp
bGVyPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
Llxwcm9maWxlclxQcm9maWxlckJ5dGVjb2RlU2VxdWVuY2UuaCI+Ci0gICAgICA8RmlsdGVyPnBy
b2ZpbGVyPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxwcm9maWxlclxQcm9maWxlckNvbXBpbGF0aW9uLmgiPgotICAgICAgPEZpbHRlcj5wcm9m
aWxlcjwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5ccHJvZmlsZXJcUHJvZmlsZXJDb21waWxhdGlvbktpbmQuaCI+Ci0gICAgICA8RmlsdGVyPnBy
b2ZpbGVyPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxwcm9maWxlclxQcm9maWxlckNvbXBpbGVkQnl0ZWNvZGUuaCI+Ci0gICAgICA8RmlsdGVy
PnByb2ZpbGVyPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxwcm9maWxlclxQcm9maWxlckRhdGFiYXNlLmgiPgotICAgICAgPEZpbHRlcj5wcm9m
aWxlcjwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5ccHJvZmlsZXJcUHJvZmlsZXJFeGVjdXRpb25Db3VudGVyLmgiPgotICAgICAgPEZpbHRlcj5w
cm9maWxlcjwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5ccHJvZmlsZXJcUHJvZmlsZXJPcmlnaW4uaCI+Ci0gICAgICA8RmlsdGVyPnByb2ZpbGVy
PC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxw
cm9maWxlclxQcm9maWxlck9yaWdpblN0YWNrLmgiPgotICAgICAgPEZpbHRlcj5wcm9maWxlcjwv
RmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccHJv
ZmlsZXJcUHJvZmlsZXJPU1JFeGl0LmgiPgotICAgICAgPEZpbHRlcj5wcm9maWxlcjwvRmlsdGVy
PgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccHJvZmlsZXJc
UHJvZmlsZXJPU1JFeGl0U2l0ZS5oIj4KLSAgICAgIDxGaWx0ZXI+cHJvZmlsZXI8L0ZpbHRlcj4K
LSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHByb2ZpbGVyXFBy
b2ZpbGVyUHJvZmlsZWRCeXRlY29kZXMuaCI+Ci0gICAgICA8RmlsdGVyPnByb2ZpbGVyPC9GaWx0
ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1l
XEFyZ0xpc3QuaCI+Ci0gICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KLSAgICA8L0NsSW5j
bHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcQXJndW1lbnRzLmgiPgot
ICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEFycmF5Q29uc3RydWN0b3IuaCI+Ci0gICAgICA8
RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXHJ1bnRpbWVcQXJyYXlDb252ZW50aW9ucy5oIj4KLSAgICAgIDxGaWx0ZXI+
cnVudGltZTwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5ccnVudGltZVxBcnJheVByb3RvdHlwZS5oIj4KLSAgICAgIDxGaWx0ZXI+cnVudGltZTwv
RmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVu
dGltZVxBcnJheVN0b3JhZ2UuaCI+Ci0gICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KLSAg
ICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcQmF0Y2hl
ZFRyYW5zaXRpb25PcHRpbWl6ZXIuaCI+Ci0gICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4K
LSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcQmln
SW50ZWdlci5oIj4KLSAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPgotICAgIDwvQ2xJbmNs
dWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxCb29sZWFuQ29uc3RydWN0
b3IuaCI+Ci0gICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4K
LSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcQm9vbGVhbk9iamVjdC5oIj4KLSAg
ICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxCb29sZWFuUHJvdG90eXBlLmgiPgotICAgICAgPEZp
bHRlcj5ydW50aW1lPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxydW50aW1lXEJ1dHRlcmZseS5oIj4KLSAgICAgIDxGaWx0ZXI+cnVudGltZTwv
RmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVu
dGltZVxCdXR0ZXJmbHlJbmxpbmVzLmgiPgotICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+
Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXENh
bGxEYXRhLmgiPgotICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1
ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXENsYXNzSW5mby5oIj4KLSAg
ICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxDb2RlQ2FjaGUuaCI+Ci0gICAgICA8RmlsdGVyPnJ1
bnRpbWU8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXHJ1bnRpbWVcQ29kZVNwZWNpYWxpemF0aW9uS2luZC5oIj4KLSAgICAgIDxGaWx0ZXI+cnVu
dGltZTwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5ccnVudGltZVxDb21tb25JZGVudGlmaWVycy5oIj4KLSAgICAgIDxGaWx0ZXI+cnVudGltZTwv
RmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVu
dGltZVxDb21tb25TbG93UGF0aHMuaCI+Ci0gICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4K
LSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcQ29t
cGxldGlvbi5oIj4KLSAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPgotICAgIDwvQ2xJbmNs
dWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxDb25zb2xlQ2xpZW50Lmgi
PgotICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXENvbnNvbGVQcm90b3R5cGUuaCI+Ci0gICAg
ICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcQ29uc29sZVR5cGVzLmgiPgotICAgICAgPEZpbHRlcj5y
dW50aW1lPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxydW50aW1lXENvbnN0cnVjdERhdGEuaCI+Ci0gICAgICA8RmlsdGVyPnJ1bnRpbWU8L0Zp
bHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRp
bWVcQ3VzdG9tR2V0dGVyU2V0dGVyLmgiPgotICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+
Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXERh
dGVDb25zdHJ1Y3Rvci5oIj4KLSAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPgotICAgIDwv
Q2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxEYXRlQ29udmVy
c2lvbi5oIj4KLSAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRl
PgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxEYXRlSW5zdGFuY2UuaCI+Ci0g
ICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRGF0ZUluc3RhbmNlQ2FjaGUuaCI+Ci0gICAgICA8
RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRGF0ZVByb3RvdHlwZS5oIj4KLSAgICAgIDxGaWx0ZXI+cnVu
dGltZTwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5ccnVudGltZVxFbnVtZXJhdGlvbk1vZGUuaCI+Ci0gICAgICA8RmlsdGVyPnJ1bnRpbWU8L0Zp
bHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRp
bWVcRXJyb3IuaCI+Ci0gICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KLSAgICA8L0NsSW5j
bHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRXJyb3JDb25zdHJ1Y3Rv
ci5oIj4KLSAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgot
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxFcnJvckhhbmRsaW5nU2NvcGUuaCI+
Ci0gICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRXJyb3JJbnN0YW5jZS5oIj4KLSAgICAgIDxG
aWx0ZXI+cnVudGltZTwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5ccnVudGltZVxFcnJvclByb3RvdHlwZS5oIj4KLSAgICAgIDxGaWx0ZXI+cnVu
dGltZTwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5ccnVudGltZVxFeGNlcHRpb25IZWxwZXJzLmgiPgotICAgICAgPEZpbHRlcj5ydW50aW1lPC9G
aWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50
aW1lXEV4ZWN1dGFibGUuaCI+Ci0gICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KLSAgICA8
L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRnVuY3Rpb25D
b25zdHJ1Y3Rvci5oIj4KLSAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPgotICAgIDwvQ2xJ
bmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxGdW5jdGlvbkhhc0V4
ZWN1dGVkQ2FjaGUuaCI+Ci0gICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KLSAgICA8L0Ns
SW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRnVuY3Rpb25Qcm90
b3R5cGUuaCI+Ci0gICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVk
ZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcR2V0dGVyU2V0dGVyLmgiPgot
ICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEhpZ2hGaWRlbGl0eUxvZy5oIj4KLSAgICAgIDxG
aWx0ZXI+cnVudGltZTwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5ccnVudGltZVxIaWdoRmlkZWxpdHlUeXBlUHJvZmlsZXIuaCI+Ci0gICAgICA8
RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSWRlbnRpZmllci5oIj4KLSAgICAgIDxGaWx0ZXI+cnVudGlt
ZTwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
cnVudGltZVxJbmRleGluZ0hlYWRlci5oIj4KLSAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVy
PgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxJ
bmRleGluZ0hlYWRlcklubGluZXMuaCI+Ci0gICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4K
LSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSW5k
ZXhpbmdUeXBlLmgiPgotICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+Ci0gICAgPC9DbElu
Y2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEluaXRpYWxpemVUaHJl
YWRpbmcuaCI+Ci0gICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVk
ZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSW50ZXJuYWxGdW5jdGlvbi5o
Ij4KLSAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxJbnRyaW5zaWMuaCI+Ci0gICAgICA8Rmls
dGVyPnJ1bnRpbWU8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXHJ1bnRpbWVcSlNBY3RpdmF0aW9uLmgiPgotICAgICAgPEZpbHRlcj5ydW50aW1l
PC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxy
dW50aW1lXEpTQVBJVmFsdWVXcmFwcGVyLmgiPgotICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0
ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1l
XEpTQXJyYXkuaCI+Ci0gICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KLSAgICA8L0NsSW5j
bHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNCb3VuZEZ1bmN0aW9u
LmgiPgotICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0g
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTQ2VsbC5oIj4KLSAgICAgIDxGaWx0
ZXI+cnVudGltZTwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5ccnVudGltZVxKU0NvbnNvbGUuaCI+Ci0gICAgICA8RmlsdGVyPnJ1bnRpbWU8L0Zp
bHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRp
bWVcSlNEYXRlTWF0aC5oIj4KLSAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPgotICAgIDwv
Q2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU0Rlc3RydWN0
aWJsZU9iamVjdC5oIj4KLSAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPgotICAgIDwvQ2xJ
bmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU0V4cG9ydE1hY3Jv
cy5oIj4KLSAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgot
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU0Z1bmN0aW9uLmgiPgotICAgICAg
PEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTR2xvYmFsT2JqZWN0LmgiPgotICAgICAgPEZpbHRlcj5y
dW50aW1lPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxydW50aW1lXEpTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmgiPgotICAgICAgPEZpbHRlcj5y
dW50aW1lPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxydW50aW1lXEpTTG9jay5oIj4KLSAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPgot
ICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU05h
bWVTY29wZS5oIj4KLSAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPgotICAgIDwvQ2xJbmNs
dWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU05vdEFuT2JqZWN0Lmgi
PgotICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTT2JqZWN0LmgiPgotICAgICAgPEZpbHRl
cj5ydW50aW1lPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxydW50aW1lXEpTT05PYmplY3QuaCI+Ci0gICAgICA8RmlsdGVyPnJ1bnRpbWU8L0Zp
bHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRp
bWVcSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgiPgotICAgICAgPEZpbHRlcj5ydW50aW1lPC9G
aWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50
aW1lXEpTUHJveHkuaCI+Ci0gICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KLSAgICA8L0Ns
SW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNTY29wZS5oIj4K
LSAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0Lmgi
PgotICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTU3RyaW5nLmgiPgotICAgICAgPEZpbHRl
cj5ydW50aW1lPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxydW50aW1lXEpTU3RyaW5nQnVpbGRlci5oIj4KLSAgICAgIDxGaWx0ZXI+cnVudGlt
ZTwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
cnVudGltZVxKU1N0cmluZ0pvaW5lci5oIj4KLSAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVy
PgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxK
U1N5bWJvbFRhYmxlT2JqZWN0LmgiPgotICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+Ci0g
ICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTVHlw
ZS5oIj4KLSAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgot
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU1R5cGVJbmZvLmgiPgotICAgICAg
PEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTVmFyaWFibGVPYmplY3QuaCI+Ci0gICAgICA8RmlsdGVy
PnJ1bnRpbWU8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXHJ1bnRpbWVcSlNXaXRoU2NvcGUuaCI+Ci0gICAgICA8RmlsdGVyPnJ1bnRpbWU8L0Zp
bHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRp
bWVcSlNXcmFwcGVyT2JqZWN0LmgiPgotICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+Ci0g
ICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXExpdGVy
YWxQYXJzZXIuaCI+Ci0gICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KLSAgICA8L0NsSW5j
bHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcTG9va3VwLmgiPgotICAg
ICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXE1hdGNoUmVzdWx0LmgiPgotICAgICAgPEZpbHRlcj5y
dW50aW1lPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxydW50aW1lXE1hdGhPYmplY3QuaCI+Ci0gICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRl
cj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVc
TmFtZUNvbnN0cnVjdG9yLmgiPgotICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+Ci0gICAg
PC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXE5hbWVJbnN0
YW5jZS5oIj4KLSAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRl
PgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxOYW1lUHJvdG90eXBlLmgiPgot
ICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXE5hdGl2ZUVycm9yQ29uc3RydWN0b3IuaCI+Ci0g
ICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcTmF0aXZlRXJyb3JQcm90b3R5cGUuaCI+Ci0gICAg
ICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcTnVtYmVyQ29uc3RydWN0b3IuaCI+Ci0gICAgICA8Rmls
dGVyPnJ1bnRpbWU8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXHJ1bnRpbWVcTnVtYmVyT2JqZWN0LmgiPgotICAgICAgPEZpbHRlcj5ydW50aW1l
PC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxy
dW50aW1lXE51bWJlclByb3RvdHlwZS5oIj4KLSAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVy
PgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxO
dW1lcmljU3RyaW5ncy5oIj4KLSAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPgotICAgIDwv
Q2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxPYmplY3RDb25z
dHJ1Y3Rvci5oIj4KLSAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPgotICAgIDwvQ2xJbmNs
dWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxPYmplY3RQcm90b3R5cGUu
aCI+Ci0gICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcT3BlcmF0aW9ucy5oIj4KLSAgICAgIDxG
aWx0ZXI+cnVudGltZTwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5ccnVudGltZVxPcHRpb25zLmgiPgotICAgICAgPEZpbHRlcj5ydW50aW1lPC9G
aWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50
aW1lXFByaXZhdGVOYW1lLmgiPgotICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+Ci0gICAg
PC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXFByb3BlcnR5
RGVzY3JpcHRvci5oIj4KLSAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPgotICAgIDwvQ2xJ
bmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxQcm9wZXJ0eU1hcEhh
c2hUYWJsZS5oIj4KLSAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPgotICAgIDwvQ2xJbmNs
dWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxQcm9wZXJ0eU5hbWUuaCI+
Ci0gICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcUHJvcGVydHlOYW1lQXJyYXkuaCI+Ci0gICAg
ICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcUHJvcGVydHlPZmZzZXQuaCI+Ci0gICAgICA8RmlsdGVy
PnJ1bnRpbWU8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXHJ1bnRpbWVcUHJvcGVydHlTbG90LmgiPgotICAgICAgPEZpbHRlcj5ydW50aW1lPC9G
aWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50
aW1lXFByb3BlcnR5U3RvcmFnZS5oIj4KLSAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPgot
ICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxQcm90
ZWN0LmgiPgotICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+
Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXFB1dERpcmVjdEluZGV4TW9kZS5o
Ij4KLSAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxQdXRQcm9wZXJ0eVNsb3QuaCI+Ci0gICAg
ICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcUmVnRXhwLmgiPgotICAgICAgPEZpbHRlcj5ydW50aW1l
PC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxy
dW50aW1lXFJlZ0V4cENhY2hlLmgiPgotICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+Ci0g
ICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXFJlZ0V4
cENhY2hlZFJlc3VsdC5oIj4KLSAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPgotICAgIDwv
Q2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxSZWdFeHBDb25z
dHJ1Y3Rvci5oIj4KLSAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPgotICAgIDwvQ2xJbmNs
dWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxSZWdFeHBLZXkuaCI+Ci0g
ICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcUmVnRXhwTWF0Y2hlc0FycmF5LmgiPgotICAgICAg
PEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxydW50aW1lXFJlZ0V4cE9iamVjdC5oIj4KLSAgICAgIDxGaWx0ZXI+cnVu
dGltZTwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5ccnVudGltZVxSZWdFeHBQcm90b3R5cGUuaCI+Ci0gICAgICA8RmlsdGVyPnJ1bnRpbWU8L0Zp
bHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRp
bWVcUmVqZWN0LmgiPgotICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+Ci0gICAgPC9DbElu
Y2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXFNhbXBsaW5nQ291bnRl
ci5oIj4KLSAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgot
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxTbWFsbFN0cmluZ3MuaCI+Ci0gICAg
ICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcU3BhcnNlQXJyYXlWYWx1ZU1hcC5oIj4KLSAgICAgIDxG
aWx0ZXI+cnVudGltZTwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5ccnVudGltZVxTdHJpY3RFdmFsQWN0aXZhdGlvbi5oIj4KLSAgICAgIDxGaWx0
ZXI+cnVudGltZTwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5ccnVudGltZVxTdHJpbmdDb25zdHJ1Y3Rvci5oIj4KLSAgICAgIDxGaWx0ZXI+cnVu
dGltZTwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5ccnVudGltZVxTdHJpbmdPYmplY3QuaCI+Ci0gICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRl
cj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVc
U3RyaW5nUHJvdG90eXBlLmgiPgotICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+Ci0gICAg
PC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXFN0cmluZ1Jl
Y3Vyc2lvbkNoZWNrZXIuaCI+Ci0gICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KLSAgICA8
L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcU3RydWN0dXJl
LmgiPgotICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0g
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXFN0cnVjdHVyZUNoYWluLmgiPgotICAg
ICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXFN0cnVjdHVyZUlEQmxvYi5oIj4KLSAgICAgIDxGaWx0
ZXI+cnVudGltZTwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5ccnVudGltZVxTdHJ1Y3R1cmVJRFRhYmxlLmgiPgotICAgICAgPEZpbHRlcj5ydW50
aW1lPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxydW50aW1lXFN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZS5oIj4KLSAgICAgIDxGaWx0ZXI+cnVu
dGltZTwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5ccnVudGltZVxTeW1ib2xUYWJsZS5oIj4KLSAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVy
PgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxU
cmFjaW5nLmgiPgotICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1
ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXFR5cGVMb2NhdGlvbkNhY2hl
LmgiPgotICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0g
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXFR5cGVTZXQuaCI+Ci0gICAgICA8Rmls
dGVyPnJ1bnRpbWU8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXHJ1bnRpbWVcVWludDE2V2l0aEZyYWN0aW9uLmgiPgotICAgICAgPEZpbHRlcj5y
dW50aW1lPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxydW50aW1lXFdhdGNoZG9nLmgiPgotICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+
Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXFdl
YWtHQ01hcC5oIj4KLSAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPgotICAgIDwvQ2xJbmNs
dWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxXZWFrUmFuZG9tLmgiPgot
ICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXFdyaXRlQmFycmllci5oIj4KLSAgICAgIDxGaWx0
ZXI+cnVudGltZTwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5ccnVudGltZVxXcml0ZUJhcnJpZXJJbmxpbmVzLmgiPgotICAgICAgPEZpbHRlcj5y
dW50aW1lPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlx0b29sc1xDb2RlUHJvZmlsZS5oIj4KLSAgICAgIDxGaWx0ZXI+dG9vbHM8L0ZpbHRlcj4K
LSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHRvb2xzXENvZGVQ
cm9maWxpbmcuaCI+Ci0gICAgICA8RmlsdGVyPnRvb2xzPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1
ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx0b29sc1xQcm9maWxlVHJlZU5vZGUuaCI+
Ci0gICAgICA8RmlsdGVyPnRvb2xzPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlx0b29sc1xUaWVyZWRNTWFwQXJyYXkuaCI+Ci0gICAgICA8Rmls
dGVyPnRvb2xzPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlx5YXJyXFlhcnIuaCI+Ci0gICAgICA8RmlsdGVyPnlhcnI8L0ZpbHRlcj4KLSAgICA8
L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHlhcnJcUmVndWxhckV4cHJl
c3Npb24uaCI+Ci0gICAgICA8RmlsdGVyPnlhcnI8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4K
LSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHlhcnJcWWFyckNhbm9uaWNhbGl6ZVVDUzIuaCI+
Ci0gICAgICA8RmlsdGVyPnlhcnI8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXHlhcnJcWWFyckludGVycHJldGVyLmgiPgotICAgICAgPEZpbHRl
cj55YXJyPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlx5YXJyXFlhcnJKSVQuaCI+Ci0gICAgICA8RmlsdGVyPnlhcnI8L0ZpbHRlcj4KLSAgICA8
L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHlhcnJcWWFyclBhcnNlci5o
Ij4KLSAgICAgIDxGaWx0ZXI+eWFycjwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5ceWFyclxZYXJyUGF0dGVybi5oIj4KLSAgICAgIDxGaWx0ZXI+
eWFycjwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5ceWFyclxZYXJyU3ludGF4Q2hlY2tlci5oIj4KLSAgICAgIDxGaWx0ZXI+eWFycjwvRmlsdGVy
PgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cY29uZmlnLmgi
IC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXFByb3RvdHlwZU1hcC5oIj4K
LSAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cQVBJXEpTVmFsdWUuaCI+Ci0gICAgICA8RmlsdGVyPkFQSTwv
RmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVu
dGltZVxKU0NKU1ZhbHVlLmgiPgotICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+Ci0gICAg
PC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTQ0pTVmFs
dWVJbmxpbmVzLmgiPgotICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+Ci0gICAgPC9DbElu
Y2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxEYXRhRm9ybWF0Lmgi
PgotICAgICAgPEZpbHRlcj5ieXRlY29kZTwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxTdHJ1Y3R1cmVSYXJlRGF0YS5oIj4KLSAg
ICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxTdHJ1Y3R1cmVSYXJlRGF0YUlubGluZXMuaCI+Ci0g
ICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXEFQSVxKU0FQSVdyYXBwZXJPYmplY3QuaCI+Ci0gICAgICA8Rmls
dGVyPkFQSTwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iJChDb25maWd1cmF0aW9uQnVpbGREaXIpXG9iaiQoUGxhdGZvcm1BcmNoaXRlY3R1cmUpXCQo
UHJvamVjdE5hbWUpXERlcml2ZWRTb3VyY2VzXEJvb2xlYW5Qcm90b3R5cGUubHV0LmgiPgotICAg
ICAgPEZpbHRlcj5EZXJpdmVkIFNvdXJjZXM8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoQ29uZmlndXJhdGlvbkJ1aWxkRGlyKVxvYmokKFBsYXRm
b3JtQXJjaGl0ZWN0dXJlKVwkKFByb2plY3ROYW1lKVxEZXJpdmVkU291cmNlc1xEYXRlUHJvdG90
eXBlLmx1dC5oIj4KLSAgICAgIDxGaWx0ZXI+RGVyaXZlZCBTb3VyY2VzPC9GaWx0ZXI+Ci0gICAg
PC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKENvbmZpZ3VyYXRpb25CdWls
ZERpcilcb2JqJChQbGF0Zm9ybUFyY2hpdGVjdHVyZSlcJChQcm9qZWN0TmFtZSlcRGVyaXZlZFNv
dXJjZXNcRXJyb3JQcm90b3R5cGUubHV0LmgiPgotICAgICAgPEZpbHRlcj5EZXJpdmVkIFNvdXJj
ZXM8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQo
Q29uZmlndXJhdGlvbkJ1aWxkRGlyKVxvYmokKFBsYXRmb3JtQXJjaGl0ZWN0dXJlKVwkKFByb2pl
Y3ROYW1lKVxEZXJpdmVkU291cmNlc1xIZWFkZXJEZXRlY3Rpb24uaCI+Ci0gICAgICA8RmlsdGVy
PkRlcml2ZWQgU291cmNlczwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iJChDb25maWd1cmF0aW9uQnVpbGREaXIpXG9iaiQoUGxhdGZvcm1BcmNoaXRl
Y3R1cmUpXCQoUHJvamVjdE5hbWUpXERlcml2ZWRTb3VyY2VzXEluc3BlY3RvckpTQmFja2VuZERp
c3BhdGNoZXJzLmgiPgotICAgICAgPEZpbHRlcj5EZXJpdmVkIFNvdXJjZXM8L0ZpbHRlcj4KLSAg
ICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoQ29uZmlndXJhdGlvbkJ1
aWxkRGlyKVxvYmokKFBsYXRmb3JtQXJjaGl0ZWN0dXJlKVwkKFByb2plY3ROYW1lKVxEZXJpdmVk
U291cmNlc1xJbnNwZWN0b3JKU0Zyb250ZW5kRGlzcGF0Y2hlcnMuaCI+Ci0gICAgICA8RmlsdGVy
PkRlcml2ZWQgU291cmNlczwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iJChDb25maWd1cmF0aW9uQnVpbGREaXIpXG9iaiQoUGxhdGZvcm1BcmNoaXRl
Y3R1cmUpXCQoUHJvamVjdE5hbWUpXERlcml2ZWRTb3VyY2VzXEluc3BlY3RvckpTVHlwZUJ1aWxk
ZXJzLmgiPgotICAgICAgPEZpbHRlcj5EZXJpdmVkIFNvdXJjZXM8L0ZpbHRlcj4KLSAgICA8L0Ns
SW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoQ29uZmlndXJhdGlvbkJ1aWxkRGly
KVxvYmokKFBsYXRmb3JtQXJjaGl0ZWN0dXJlKVwkKFByb2plY3ROYW1lKVxEZXJpdmVkU291cmNl
c1xKU0dsb2JhbE9iamVjdC5sdXQuaCI+Ci0gICAgICA8RmlsdGVyPkRlcml2ZWQgU291cmNlczwv
RmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChDb25m
aWd1cmF0aW9uQnVpbGREaXIpXG9iaiQoUGxhdGZvcm1BcmNoaXRlY3R1cmUpXCQoUHJvamVjdE5h
bWUpXERlcml2ZWRTb3VyY2VzXEpTT05PYmplY3QubHV0LmgiPgotICAgICAgPEZpbHRlcj5EZXJp
dmVkIFNvdXJjZXM8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9IiQoQ29uZmlndXJhdGlvbkJ1aWxkRGlyKVxvYmokKFBsYXRmb3JtQXJjaGl0ZWN0dXJl
KVwkKFByb2plY3ROYW1lKVxEZXJpdmVkU291cmNlc1xMZXhlci5sdXQuaCI+Ci0gICAgICA8Rmls
dGVyPkRlcml2ZWQgU291cmNlczwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iJChDb25maWd1cmF0aW9uQnVpbGREaXIpXG9iaiQoUGxhdGZvcm1BcmNo
aXRlY3R1cmUpXCQoUHJvamVjdE5hbWUpXERlcml2ZWRTb3VyY2VzXE51bWJlckNvbnN0cnVjdG9y
Lmx1dC5oIj4KLSAgICAgIDxGaWx0ZXI+RGVyaXZlZCBTb3VyY2VzPC9GaWx0ZXI+Ci0gICAgPC9D
bEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKENvbmZpZ3VyYXRpb25CdWlsZERp
cilcb2JqJChQbGF0Zm9ybUFyY2hpdGVjdHVyZSlcJChQcm9qZWN0TmFtZSlcRGVyaXZlZFNvdXJj
ZXNcT2JqZWN0Q29uc3RydWN0b3IubHV0LmgiPgotICAgICAgPEZpbHRlcj5EZXJpdmVkIFNvdXJj
ZXM8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQo
Q29uZmlndXJhdGlvbkJ1aWxkRGlyKVxvYmokKFBsYXRmb3JtQXJjaGl0ZWN0dXJlKVwkKFByb2pl
Y3ROYW1lKVxEZXJpdmVkU291cmNlc1xSZWdFeHBDb25zdHJ1Y3Rvci5sdXQuaCI+Ci0gICAgICA8
RmlsdGVyPkRlcml2ZWQgU291cmNlczwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iJChDb25maWd1cmF0aW9uQnVpbGREaXIpXG9iaiQoUGxhdGZvcm1B
cmNoaXRlY3R1cmUpXCQoUHJvamVjdE5hbWUpXERlcml2ZWRTb3VyY2VzXE51bWJlclByb3RvdHlw
ZS5sdXQuaCI+Ci0gICAgICA8RmlsdGVyPkRlcml2ZWQgU291cmNlczwvRmlsdGVyPgotICAgIDwv
Q2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChDb25maWd1cmF0aW9uQnVpbGRE
aXIpXG9iaiQoUGxhdGZvcm1BcmNoaXRlY3R1cmUpXCQoUHJvamVjdE5hbWUpXERlcml2ZWRTb3Vy
Y2VzXFJlZ0V4cEppdFRhYmxlcy5oIj4KLSAgICAgIDxGaWx0ZXI+RGVyaXZlZCBTb3VyY2VzPC9G
aWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKENvbmZp
Z3VyYXRpb25CdWlsZERpcilcb2JqJChQbGF0Zm9ybUFyY2hpdGVjdHVyZSlcJChQcm9qZWN0TmFt
ZSlcRGVyaXZlZFNvdXJjZXNcUmVnRXhwUHJvdG90eXBlLmx1dC5oIj4KLSAgICAgIDxGaWx0ZXI+
RGVyaXZlZCBTb3VyY2VzPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIkKENvbmZpZ3VyYXRpb25CdWlsZERpcilcb2JqJChQbGF0Zm9ybUFyY2hpdGVj
dHVyZSlcJChQcm9qZWN0TmFtZSlcRGVyaXZlZFNvdXJjZXNcU3RyaW5nQ29uc3RydWN0b3IubHV0
LmgiPgotICAgICAgPEZpbHRlcj5EZXJpdmVkIFNvdXJjZXM8L0ZpbHRlcj4KLSAgICA8L0NsSW5j
bHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoQ29uZmlndXJhdGlvbkJ1aWxkRGlyKVxv
YmokKFBsYXRmb3JtQXJjaGl0ZWN0dXJlKVwkKFByb2plY3ROYW1lKVxEZXJpdmVkU291cmNlc1xB
cnJheVByb3RvdHlwZS5sdXQuaCI+Ci0gICAgICA8RmlsdGVyPkRlcml2ZWQgU291cmNlczwvRmls
dGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChDb25maWd1
cmF0aW9uQnVpbGREaXIpXG9iaiQoUGxhdGZvcm1BcmNoaXRlY3R1cmUpXCQoUHJvamVjdE5hbWUp
XERlcml2ZWRTb3VyY2VzXEpTQ0J1aWx0aW5zLmgiPgotICAgICAgPEZpbHRlcj5EZXJpdmVkIFNv
dXJjZXM8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXHJ1bnRpbWVcVk0uaCI+Ci0gICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KLSAgICA8
L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcVk1FbnRyeVNj
b3BlLmgiPgotICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+
Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxhc3NlbWJsZXJcTWFjcm9Bc3NlbWJsZXJYODZD
b21tb24uY3BwIj4KLSAgICAgIDxGaWx0ZXI+YXNzZW1ibGVyPC9GaWx0ZXI+Ci0gICAgPC9DbElu
Y2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEludGVuZGVkU3RydWN0
dXJlQ2hhaW4uaCI+Ci0gICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KLSAgICA8L0NsSW5j
bHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcQ29tbW9uU2xvd1BhdGhz
RXhjZXB0aW9ucy5oIj4KLSAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPgotICAgIDwvQ2xJ
bmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cQVBJXEpTQ1Rlc3RSdW5uZXJVdGls
cy5oIj4KLSAgICAgIDxGaWx0ZXI+QVBJPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEFycmF5QnVmZmVyLmgiPgotICAgICAgPEZp
bHRlcj5ydW50aW1lPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxydW50aW1lXEFycmF5QnVmZmVyVmlldy5oIj4KLSAgICAgIDxGaWx0ZXI+cnVu
dGltZTwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5caGVhcFxDb3B5VG9rZW4uaCI+Ci0gICAgICA8RmlsdGVyPmhlYXA8L0ZpbHRlcj4KLSAgICA8
L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNBcnJheUJ1
ZmZlckNvbnN0cnVjdG9yLmgiPgotICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+Ci0gICAg
PC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTQXJyYXlC
dWZmZXIuaCI+Ci0gICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVk
ZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNBcnJheUJ1ZmZlclZpZXcu
aCI+Ci0gICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5o
Ij4KLSAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU0FycmF5QnVmZmVyVmlld0lubGluZXMu
aCI+Ci0gICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNHZW5lcmljVHlwZWRBcnJheVZpZXcu
aCI+Ci0gICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQ
cm90b3R5cGVJbmxpbmVzLmgiPgotICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+Ci0gICAg
PC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IuaCI+Ci0gICAgICA8RmlsdGVyPnJ1bnRpbWU8L0Zp
bHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRp
bWVcSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcklubGluZXMuaCI+Ci0gICAgICA8
RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgiPgot
ICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90
eXBlLmgiPgotICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+
Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTUHJvbWlzZS5oIj4KLSAgICAg
IDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU1Byb21pc2VDb25zdHJ1Y3Rvci5oIj4KLSAgICAgIDxG
aWx0ZXI+cnVudGltZTwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5ccnVudGltZVxKU1Byb21pc2VEZWZlcnJlZC5oIj4KLSAgICAgIDxGaWx0ZXI+
cnVudGltZTwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5ccnVudGltZVxKU1Byb21pc2VGdW5jdGlvbnMuaCI+Ci0gICAgICA8RmlsdGVyPnJ1bnRp
bWU8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XHJ1bnRpbWVcSlNQcm9taXNlUmVhY3Rpb24uaCI+Ci0gICAgICA8RmlsdGVyPnJ1bnRpbWU8L0Zp
bHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRp
bWVcSlNQcm9taXNlUHJvdG90eXBlLmgiPgotICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+
Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpT
SW50OEFycmF5LmgiPgotICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+Ci0gICAgPC9DbElu
Y2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTRmxvYXQzMkFycmF5
LmgiPgotICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0g
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTRmxvYXQ2NEFycmF5LmgiPgotICAg
ICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTSW50MTZBcnJheS5oIj4KLSAgICAgIDxGaWx0ZXI+
cnVudGltZTwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5ccnVudGltZVxKU0ludDMyQXJyYXkuaCI+Ci0gICAgICA8RmlsdGVyPnJ1bnRpbWU8L0Zp
bHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRp
bWVcVWludDhBcnJheS5oIj4KLSAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPgotICAgIDwv
Q2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxVaW50MTZBcnJh
eS5oIj4KLSAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgot
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxVaW50MzJBcnJheS5oIj4KLSAgICAg
IDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxUeXBlZEFycmF5VHlwZS5oIj4KLSAgICAgIDxGaWx0ZXI+
cnVudGltZTwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5ccnVudGltZVxUeXBlZEFycmF5QWRhcHRvcnMuaCI+Ci0gICAgICA8RmlsdGVyPnJ1bnRp
bWU8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XHJ1bnRpbWVcVHlwZWRBcnJheUNvbnRyb2xsZXIuaCI+Ci0gICAgICA8RmlsdGVyPnJ1bnRpbWU8
L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1
bnRpbWVcVHlwZWRBcnJheUlubGluZXMuaCI+Ci0gICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRl
cj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVc
VHlwZWRBcnJheXMuaCI+Ci0gICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KLSAgICA8L0Ns
SW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNVaW50OENsYW1w
ZWRBcnJheS5oIj4KLSAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPgotICAgIDwvQ2xJbmNs
dWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU1R5cGVkQXJyYXlDb25z
dHJ1Y3RvcnMuaCI+Ci0gICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KLSAgICA8L0NsSW5j
bHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNUeXBlZEFycmF5UHJv
dG90eXBlcy5oIj4KLSAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPgotICAgIDwvQ2xJbmNs
dWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU1R5cGVkQXJyYXlzLmgi
PgotICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTVWludDE2QXJyYXkuaCI+Ci0gICAgICA8
RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNVaW50MzJBcnJheS5oIj4KLSAgICAgIDxGaWx0ZXI+cnVu
dGltZTwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5ccnVudGltZVxKU1VpbnQ4QXJyYXkuaCI+Ci0gICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRl
cj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVc
RmxvYXQzMkFycmF5LmgiPgotICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+Ci0gICAgPC9D
bEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEZsb2F0NjRBcnJh
eS5oIj4KLSAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgot
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxJbnQxNkFycmF5LmgiPgotICAgICAg
PEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxydW50aW1lXEludDMyQXJyYXkuaCI+Ci0gICAgICA8RmlsdGVyPnJ1bnRp
bWU8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XHJ1bnRpbWVcSW50OEFycmF5LmgiPgotICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+Ci0g
ICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXERhdGFW
aWV3LmgiPgotICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+
Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXFNpbXBsZVR5cGVkQXJyYXlDb250
cm9sbGVyLmgiPgotICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1
ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTRGF0YVZpZXcuaCI+Ci0g
ICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNEYXRhVmlld1Byb3RvdHlwZS5oIj4KLSAgICAg
IDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iJChDb25maWd1cmF0aW9uQnVpbGREaXIpXG9iaiQoUGxhdGZvcm1BcmNoaXRl
Y3R1cmUpXCQoUHJvamVjdE5hbWUpXERlcml2ZWRTb3VyY2VzXEpTRGF0YVZpZXdQcm90b3R5cGUu
bHV0LmgiPgotICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+
Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEdlbmVyaWNUeXBlZEFycmF5Vmll
d0lubGluZXMuaCI+Ci0gICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KLSAgICA8L0NsSW5j
bHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcR2VuZXJpY1R5cGVkQXJy
YXlWaWV3LmgiPgotICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1
ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXFRvTmF0aXZlRnJvbVZhbHVl
LmgiPgotICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0g
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKENvbmZpZ3VyYXRpb25CdWlsZERpcilcb2JqJChQbGF0
Zm9ybUFyY2hpdGVjdHVyZSlcJChQcm9qZWN0TmFtZSlcRGVyaXZlZFNvdXJjZXNcQXJyYXlDb25z
dHJ1Y3Rvci5sdXQuaCI+Ci0gICAgICA8RmlsdGVyPkRlcml2ZWQgU291cmNlczwvRmlsdGVyPgot
ICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChDb25maWd1cmF0aW9u
QnVpbGREaXIpXG9iaiQoUGxhdGZvcm1BcmNoaXRlY3R1cmUpXCQoUHJvamVjdE5hbWUpXERlcml2
ZWRTb3VyY2VzXERhdGVDb25zdHJ1Y3Rvci5sdXQuaCI+Ci0gICAgICA8RmlsdGVyPkRlcml2ZWQg
U291cmNlczwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iJChDb25maWd1cmF0aW9uQnVpbGREaXIpXG9iaiQoUGxhdGZvcm1BcmNoaXRlY3R1cmUpXCQo
UHJvamVjdE5hbWUpXERlcml2ZWRTb3VyY2VzXEpTUHJvbWlzZUNvbnN0cnVjdG9yLmx1dC5oIj4K
LSAgICAgIDxGaWx0ZXI+RGVyaXZlZCBTb3VyY2VzPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+
Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKENvbmZpZ3VyYXRpb25CdWlsZERpcilcb2JqJChQ
bGF0Zm9ybUFyY2hpdGVjdHVyZSlcJChQcm9qZWN0TmFtZSlcRGVyaXZlZFNvdXJjZXNcSlNQcm9t
aXNlUHJvdG90eXBlLmx1dC5oIj4KLSAgICAgIDxGaWx0ZXI+RGVyaXZlZCBTb3VyY2VzPC9GaWx0
ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKENvbmZpZ3Vy
YXRpb25CdWlsZERpcilcb2JqJChQbGF0Zm9ybUFyY2hpdGVjdHVyZSlcJChQcm9qZWN0TmFtZSlc
RGVyaXZlZFNvdXJjZXNcS2V5d29yZExvb2t1cC5sdXQuaCI+Ci0gICAgICA8RmlsdGVyPkRlcml2
ZWQgU291cmNlczwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iJChDb25maWd1cmF0aW9uQnVpbGREaXIpXG9iaiQoUGxhdGZvcm1BcmNoaXRlY3R1cmUp
XCQoUHJvamVjdE5hbWUpXERlcml2ZWRTb3VyY2VzXFJlZ0V4cE9iamVjdC5sdXQuaCI+Ci0gICAg
ICA8RmlsdGVyPkRlcml2ZWQgU291cmNlczwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iJChDb25maWd1cmF0aW9uQnVpbGREaXIpXG9iaiQoUGxhdGZv
cm1BcmNoaXRlY3R1cmUpXCQoUHJvamVjdE5hbWUpXERlcml2ZWRTb3VyY2VzXE5hbWVQcm90b3R5
cGUubHV0LmgiPgotICAgICAgPEZpbHRlcj5EZXJpdmVkIFNvdXJjZXM8L0ZpbHRlcj4KLSAgICA8
L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcQ29kZUJsb2NrU2V0
LmgiPgotICAgICAgPEZpbHRlcj5oZWFwPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJh
Y2suaCI+Ci0gICAgICA8RmlsdGVyPmJ5dGVjb2RlPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+
Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHQ29tcGlsYXRpb25LZXkuaCI+Ci0g
ICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0NvbXBpbGF0aW9uTW9kZS5oIj4KLSAgICAgIDxGaWx0ZXI+
ZGZnPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxqaXRcSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCI+Ci0gICAgICA8Rmls
dGVyPmppdDwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5ccnVudGltZVxKU01hcC5oIj4KLSAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPgot
ICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU1Nl
dC5oIj4KLSAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgot
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU1NldEl0ZXJhdG9yLmgiPgotICAg
ICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxsbGludFxMTEludEVudHJ5cG9pbnQuaCI+Ci0gICAgICA8RmlsdGVy
PmxsaW50PC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxydW50aW1lXE1hcENvbnN0cnVjdG9yLmgiPgotICAgICAgPEZpbHRlcj5ydW50aW1lPC9G
aWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50
aW1lXE1hcERhdGEuaCI+Ci0gICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KLSAgICA8L0Ns
SW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcU2V0UHJvdG90eXBl
LmgiPgotICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0g
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXFNldEl0ZXJhdG9yUHJvdG90eXBlLmgi
PgotICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXE1hcFByb3RvdHlwZS5oIj4KLSAgICAgIDxG
aWx0ZXI+cnVudGltZTwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5ccnVudGltZVxTZXRDb25zdHJ1Y3Rvci5oIj4KLSAgICAgIDxGaWx0ZXI+cnVu
dGltZTwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5ccnVudGltZVxTZXRJdGVyYXRvckNvbnN0cnVjdG9yLmgiPgotICAgICAgPEZpbHRlcj5ydW50
aW1lPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxkZmdcREZHQWJzdHJhY3RIZWFwLmgiPgotICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4KLSAg
ICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdBYnN0cmFj
dEludGVycHJldGVyLmgiPgotICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4KLSAgICA8L0NsSW5j
bHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdBYnN0cmFjdEludGVycHJl
dGVySW5saW5lcy5oIj4KLSAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1
ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHQWJzdHJhY3RWYWx1ZS5oIj4K
LSAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHQWRqYWNlbmN5TGlzdC5oIj4KLSAgICAgIDxGaWx0ZXI+
ZGZnPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxkZmdcREZHQWxsb2NhdG9yLmgiPgotICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4KLSAgICA8
L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdBbmFseXNpcy5o
Ij4KLSAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHQXJndW1lbnRQb3NpdGlvbi5oIj4KLSAgICAgIDxG
aWx0ZXI+ZGZnPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxkZmdcREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5oIj4KLSAgICAgIDxG
aWx0ZXI+ZGZnPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxkZmdcREZHQXJyYXlpZnlTbG93UGF0aEdlbmVyYXRvci5oIj4KLSAgICAgIDxGaWx0
ZXI+ZGZnPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxkZmdcREZHQXJyYXlNb2RlLmgiPgotICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4KLSAg
ICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdBdFRhaWxB
YnN0cmFjdFN0YXRlLmgiPgotICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4KLSAgICA8L0NsSW5j
bHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdCYWNrd2FyZHNQcm9wYWdh
dGlvblBoYXNlLmgiPgotICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVk
ZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdCYXNpY0Jsb2NrLmgiPgotICAg
ICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXGRmZ1xERkdCYXNpY0Jsb2NrSW5saW5lcy5oIj4KLSAgICAgIDxGaWx0ZXI+
ZGZnPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxkZmdcREZHQmluYXJ5U3dpdGNoLmgiPgotICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4KLSAg
ICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdCbG9ja0lu
c2VydGlvblNldC5oIj4KLSAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1
ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHQnJhbmNoRGlyZWN0aW9uLmgi
PgotICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdCeXRlQ29kZVBhcnNlci5oIj4KLSAgICAgIDxGaWx0
ZXI+ZGZnPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxkZmdcREZHQ2FsbEFycmF5QWxsb2NhdG9yU2xvd1BhdGhHZW5lcmF0b3IuaCI+Ci0gICAg
ICA8RmlsdGVyPmRmZzwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5cZGZnXERGR0NhcGFiaWxpdGllcy5oIj4KLSAgICAgIDxGaWx0ZXI+ZGZnPC9G
aWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdc
REZHQ0NhbGxIZWxwZXJzLmgiPgotICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4KLSAgICA8L0Ns
SW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdDRkFQaGFzZS5oIj4K
LSAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5oIj4KLSAgICAg
IDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxkZmdcREZHQ2xvYmJlcml6ZS5oIj4KLSAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0
ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZH
Q2xvYmJlclNldC5oIj4KLSAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1
ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHQ29tbW9uLmgiPgotICAgICAg
PEZpbHRlcj5kZmc8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXGRmZ1xERkdDb21tb25EYXRhLmgiPgotICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRl
cj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdD
b25zdGFudEZvbGRpbmdQaGFzZS5oIj4KLSAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+Ci0gICAg
PC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHQ1BTUmV0aHJl
YWRpbmdQaGFzZS5oIj4KLSAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1
ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHQ3JpdGljYWxFZGdlQnJlYWtp
bmdQaGFzZS5oIj4KLSAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+
Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHQ1NFUGhhc2UuaCI+Ci0gICAgICA8
RmlsdGVyPmRmZzwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cZGZnXERGR0RDRVBoYXNlLmgiPgotICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4K
LSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdEZXNp
cmVkSWRlbnRpZmllcnMuaCI+Ci0gICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPgotICAgIDwvQ2xJ
bmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0Rlc2lyZWRUcmFuc2l0
aW9ucy5oIj4KLSAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0g
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHRGVzaXJlZFdhdGNocG9pbnRzLmgiPgot
ICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMuaCI+Ci0gICAgICA8
RmlsdGVyPmRmZzwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cZGZnXERGR0Rlc2lyZWRXcml0ZUJhcnJpZXJzLmgiPgotICAgICAgPEZpbHRlcj5k
Zmc8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGRmZ1xERkdEaXNhc3NlbWJsZXIuaCI+Ci0gICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPgotICAg
IDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0RvbWluYXRv
cnMuaCI+Ci0gICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0RvdWJsZUZvcm1hdFN0YXRlLmgiPgotICAg
ICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXGRmZ1xERkdFZGdlLmgiPgotICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4K
LSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdFZGdl
RG9taW5hdGVzLmgiPgotICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVk
ZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdFZGdlVXNlc1N0cnVjdHVyZS5o
Ij4KLSAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHRmFpbGVkRmluYWxpemVyLmgiPgotICAgICAgPEZp
bHRlcj5kZmc8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGRmZ1xERkdGaWx0cmF0aW9uUmVzdWx0LmgiPgotICAgICAgPEZpbHRlcj5kZmc8L0Zp
bHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xE
RkdGaW5hbGl6ZXIuaCI+Ci0gICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPgotICAgIDwvQ2xJbmNs
dWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0ZpeHVwUGhhc2UuaCI+Ci0g
ICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0ZsdXNoZWRBdC5oIj4KLSAgICAgIDxGaWx0ZXI+ZGZnPC9G
aWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdc
REZHRmx1c2hGb3JtYXQuaCI+Ci0gICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPgotICAgIDwvQ2xJ
bmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0ZQUkluZm8uaCI+Ci0g
ICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0Z1bmN0aW9uV2hpdGVsaXN0LmgiPgotICAgICAgPEZpbHRl
cj5kZmc8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXGRmZ1xERkdHZW5lcmF0aW9uSW5mby5oIj4KLSAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+
Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHR1BS
SW5mby5oIj4KLSAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0g
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHR3JhcGguaCI+Ci0gICAgICA8RmlsdGVy
PmRmZzwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5cZGZnXERGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmgiPgotICAgICAgPEZpbHRlcj5kZmc8L0Zp
bHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xE
RkdJbnZhbGlkYXRpb25Qb2ludEluamVjdGlvblBoYXNlLmgiPgotICAgICAgPEZpbHRlcj5kZmc8
L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRm
Z1xERkdJbnNlcnRpb25TZXQuaCI+Ci0gICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPgotICAgIDwv
Q2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0pJVENvZGUuaCI+
Ci0gICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0pJVENvbXBpbGVyLmgiPgotICAgICAgPEZpbHRlcj5k
Zmc8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGRmZ1xERkdKSVRGaW5hbGl6ZXIuaCI+Ci0gICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPgotICAg
IDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0p1bXBSZXBs
YWNlbWVudC5oIj4KLSAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+
Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHTGF6eUpTVmFsdWUuaCI+Ci0gICAg
ICA8RmlsdGVyPmRmZzwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5cZGZnXERGR0xJQ01QaGFzZS5oIj4KLSAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0
ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZH
TGl2ZW5lc3NBbmFseXNpc1BoYXNlLmgiPgotICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4KLSAg
ICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdMb25nTGl2
ZWRTdGF0ZS5oIj4KLSAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+
Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHTG9vcFByZUhlYWRlckNyZWF0aW9u
UGhhc2UuaCI+Ci0gICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgot
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR01lcmdlTW9kZS5oIj4KLSAgICAgIDxG
aWx0ZXI+ZGZnPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxkZmdcREZHTWluaWZpZWRHcmFwaC5oIj4KLSAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0
ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZH
TWluaWZpZWRJRC5oIj4KLSAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1
ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHTWluaWZpZWROb2RlLmgiPgot
ICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdOYXR1cmFsTG9vcHMuaCI+Ci0gICAgICA8RmlsdGVyPmRm
ZzwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
ZGZnXERGR05vZGUuaCI+Ci0gICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPgotICAgIDwvQ2xJbmNs
dWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR05vZGVBbGxvY2F0b3IuaCI+
Ci0gICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR05vZGVGbGFncy5oIj4KLSAgICAgIDxGaWx0ZXI+ZGZn
PC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxk
ZmdcREZHTm9kZVR5cGUuaCI+Ci0gICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPgotICAgIDwvQ2xJ
bmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR09wZXJhdGlvbnMuaCI+
Ci0gICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuaCI+
Ci0gICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmgiPgot
ICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdPU1JFeGl0LmgiPgotICAgICAgPEZpbHRlcj5kZmc8L0Zp
bHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xE
RkdPU1JFeGl0QmFzZS5oIj4KLSAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+Ci0gICAgPC9DbElu
Y2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHT1NSRXhpdENvbXBpbGF0
aW9uSW5mby5oIj4KLSAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+
Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHT1NSRXhpdENvbXBpbGVyLmgiPgot
ICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uaCI+Ci0gICAgICA8
RmlsdGVyPmRmZzwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cZGZnXERGR09TUkV4aXRKdW1wUGxhY2Vob2xkZXIuaCI+Ci0gICAgICA8RmlsdGVy
PmRmZzwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5cZGZnXERGR09TUkV4aXRQcmVwYXJhdGlvbi5oIj4KLSAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0
ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZH
UGhhbnRvbUNhbm9uaWNhbGl6YXRpb25QaGFzZS5oIj4KLSAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0
ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZH
UGhhc2UuaCI+Ci0gICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgot
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1BsYW4uaCI+Ci0gICAgICA8RmlsdGVy
PmRmZzwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5cZGZnXERGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5oIj4KLSAgICAgIDxGaWx0ZXI+ZGZn
PC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxk
ZmdcREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuaCI+Ci0gICAgICA8RmlsdGVyPmRmZzwv
RmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZn
XERGR1JlZ2lzdGVyQmFuay5oIj4KLSAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+Ci0gICAgPC9D
bEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHUmVnaXN0ZXJTZXQu
aCI+Ci0gICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1NhZmVUb0V4ZWN1dGUuaCI+Ci0gICAgICA8Rmls
dGVyPmRmZzwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cZGZnXERGR1NhbmVTdHJpbmdHZXRCeVZhbFNsb3dQYXRoR2VuZXJhdG9yLmgiPgotICAg
ICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXGRmZ1xERkdTY29yZUJvYXJkLmgiPgotICAgICAgPEZpbHRlcj5kZmc8L0Zp
bHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xE
RkdTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCI+Ci0gICAgICA8RmlsdGVyPmRmZzwvRmlsdGVy
PgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1Np
bGVudFJlZ2lzdGVyU2F2ZVBsYW4uaCI+Ci0gICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPgotICAg
IDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1Nsb3dQYXRo
R2VuZXJhdG9yLmgiPgotICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVk
ZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdTcGVjdWxhdGl2ZUpJVC5oIj4K
LSAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHU1NBQ29udmVyc2lvblBoYXNlLmgiPgotICAgICAgPEZp
bHRlcj5kZmc8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGRmZ1xERkdTdGFja0xheW91dFBoYXNlLmgiPgotICAgICAgPEZpbHRlcj5kZmc8L0Zp
bHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xE
RkdTdG9yZUJhcnJpZXJFbGlzaW9uUGhhc2UuaCI+Ci0gICAgICA8RmlsdGVyPmRmZzwvRmlsdGVy
PgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1N0
cnVjdHVyZUFic3RyYWN0VmFsdWUuaCI+Ci0gICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPgotICAg
IDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1RodW5rcy5o
Ij4KLSAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5oIj4K
LSAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2su
aCI+Ci0gICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBp
bGF0aW9uQ2FsbGJhY2suaCI+Ci0gICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPgotICAgIDwvQ2xJ
bmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1R5cGVDaGVja0hvaXN0
aW5nUGhhc2UuaCI+Ci0gICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRl
PgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1VuaWZpY2F0aW9uUGhhc2UuaCI+
Ci0gICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1VzZUtpbmQuaCI+Ci0gICAgICA8RmlsdGVyPmRmZzwv
RmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZn
XERGR1ZhbGlkYXRlLmgiPgotICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4KLSAgICA8L0NsSW5j
bHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdWYWx1ZVJlY292ZXJ5T3Zl
cnJpZGUuaCI+Ci0gICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgot
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1ZhbHVlU291cmNlLmgiPgotICAgICAg
PEZpbHRlcj5kZmc8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXGRmZ1xERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaCI+Ci0gICAgICA8RmlsdGVyPmRm
ZzwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
ZGZnXERGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuaCI+Ci0gICAgICA8RmlsdGVyPmRmZzwvRmls
dGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERG
R1ZhcmlhYmxlRXZlbnQuaCI+Ci0gICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPgotICAgIDwvQ2xJ
bmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1ZhcmlhYmxlRXZlbnRT
dHJlYW0uaCI+Ci0gICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgot
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1ZhcmlhZGljRnVuY3Rpb24uaCI+Ci0g
ICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZS5oIj4K
LSAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHV2F0Y2hwb2ludENvbGxlY3Rpb25QaGFzZS5oIj4KLSAg
ICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxkZmdcREZHV29ya2xpc3QuaCI+Ci0gICAgICA8RmlsdGVyPmRmZzwvRmls
dGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNv
ZGVcREZHRXhpdFByb2ZpbGUuaCI+Ci0gICAgICA8RmlsdGVyPmJ5dGVjb2RlPC9GaWx0ZXI+Ci0g
ICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxQcmVj
aXNlSnVtcFRhcmdldHMuaCI+Ci0gICAgICA8RmlsdGVyPmJ5dGVjb2RlPC9GaWx0ZXI+Ci0gICAg
PC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXER1bXBDb250
ZXh0LmgiPgotICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+
Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEZ1bmN0aW9uRXhlY3V0YWJsZUR1
bXAuaCI+Ci0gICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4K
LSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcQ29tcGlsYXRpb25SZXN1bHQuaCI+
Ci0gICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcQXJyYXlJdGVyYXRvclByb3RvdHlwZS5oIj4K
LSAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxBcnJheUl0ZXJhdG9yQ29uc3RydWN0b3IuaCI+
Ci0gICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcTWFwSXRlcmF0b3JQcm90b3R5cGUuaCI+Ci0g
ICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcTWFwSXRlcmF0b3JDb25zdHJ1Y3Rvci5oIj4KLSAg
ICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxNaWNyb3Rhc2suaCI+Ci0gICAgICA8RmlsdGVyPnJ1
bnRpbWU8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXGppdFxBc3NlbWJseUhlbHBlcnMuaCI+Ci0gICAgICA8RmlsdGVyPmppdDwvRmlsdGVyPgot
ICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caml0XENDYWxsSGVs
cGVycy5oIj4KLSAgICAgIDxGaWx0ZXI+aml0PC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0g
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXFdlYWtNYXBQcm90b3R5cGUuaCI+Ci0g
ICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcV2Vha01hcERhdGEuaCI+Ci0gICAgICA8RmlsdGVy
PnJ1bnRpbWU8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXHJ1bnRpbWVcV2Vha01hcENvbnN0cnVjdG9yLmgiPgotICAgICAgPEZpbHRlcj5ydW50
aW1lPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxydW50aW1lXEpTV2Vha01hcC5oIj4KLSAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPgot
ICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU0Fy
cmF5SXRlcmF0b3IuaCI+Ci0gICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KLSAgICA8L0Ns
SW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNBcmd1bWVudHNJ
dGVyYXRvci5oIj4KLSAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPgotICAgIDwvQ2xJbmNs
dWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU01hcEl0ZXJhdG9yLmgi
PgotICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcUmVwYXRjaC5oIj4KLSAgICAgIDxGaWx0ZXI+aml0
PC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxq
aXRcUmVnaXN0ZXJTZXQuaCI+Ci0gICAgICA8RmlsdGVyPmppdDwvRmlsdGVyPgotICAgIDwvQ2xJ
bmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcSW5saW5lQ2FsbEZy
YW1lU2V0LmgiPgotICAgICAgPEZpbHRlcj5ieXRlY29kZTwvRmlsdGVyPgotICAgIDwvQ2xJbmNs
dWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caml0XEpJVE9wZXJhdGlvbnMuaCI+Ci0g
ICAgICA8RmlsdGVyPmppdDwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5caml0XEdQUkluZm8uaCI+Ci0gICAgICA8RmlsdGVyPmppdDwvRmlsdGVy
PgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caml0XEZQUklu
Zm8uaCI+Ci0gICAgICA8RmlsdGVyPmppdDwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caml0XFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5oIj4K
LSAgICAgIDxGaWx0ZXI+aml0PC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXFRlc3RSdW5uZXJVdGlscy5oIj4KLSAgICAgIDxGaWx0
ZXI+cnVudGltZTwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5caml0XFRlbXBSZWdpc3RlclNldC5oIj4KLSAgICAgIDxGaWx0ZXI+aml0PC9GaWx0
ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcSklU
SW5saW5lQ2FjaGVHZW5lcmF0b3IuaCI+Ci0gICAgICA8RmlsdGVyPmppdDwvRmlsdGVyPgotICAg
IDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1Jlc3VycmVj
dGlvbkZvclZhbGlkYXRpb25QaGFzZS5oIj4KLSAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+Ci0g
ICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHQXZhaWxh
YmlsaXR5LmgiPgotICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4K
LSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXEJ5dGVjb2RlVXNlRGVmLmgiPgot
ICAgICAgPEZpbHRlcj5ieXRlY29kZTwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBv
aW50LmgiPgotICAgICAgPEZpbHRlcj5ieXRlY29kZTwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRl
PgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxTdGFja0FsaWdubWVudC5oIj4K
LSAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5caGVhcFxEZWxheWVkUmVsZWFzZVNjb3BlLmgiPgotICAgICAg
PEZpbHRlcj5oZWFwPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxieXRlY29kZVxWYXJpYWJsZVdhdGNocG9pbnRTZXQuaCI+Ci0gICAgICA8Rmls
dGVyPmJ5dGVjb2RlPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxiaW5kaW5nc1xTY3JpcHRGdW5jdGlvbkNhbGwuaCI+Ci0gICAgICA8RmlsdGVy
PmJpbmRpbmdzPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxiaW5kaW5nc1xTY3JpcHRPYmplY3QuaCI+Ci0gICAgICA8RmlsdGVyPmJpbmRpbmdz
PC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxi
aW5kaW5nc1xTY3JpcHRWYWx1ZS5oIj4KLSAgICAgIDxGaWx0ZXI+YmluZGluZ3M8L0ZpbHRlcj4K
LSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdTdHJl
bmd0aFJlZHVjdGlvblBoYXNlLmgiPgotICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4KLSAgICA8
L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdTU0FMb3dlcmlu
Z1BoYXNlLmgiPgotICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4K
LSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcQXJyYXlCdWZmZXJOZXV0ZXJpbmdX
YXRjaHBvaW50LmgiPgotICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+Ci0gICAgPC9DbElu
Y2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXENvbnN0YW50TW9kZS5o
Ij4KLSAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iJChDb25maWd1cmF0aW9uQnVpbGREaXIpXG9iaiQoUGxhdGZv
cm1BcmNoaXRlY3R1cmUpXCQoUHJvamVjdE5hbWUpXERlcml2ZWRTb3VyY2VzXEpTRGF0YVZpZXdQ
cm90b3R5cGUubHV0LmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcQXJpdHlD
aGVja0ZhaWxSZXR1cm5UaHVua3MuaCI+Ci0gICAgICA8RmlsdGVyPmppdDwvRmlsdGVyPgotICAg
IDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caml0XFJlZ2lzdGVyUHJl
c2VydmF0aW9uV3JhcHBlckdlbmVyYXRvci5oIj4KLSAgICAgIDxGaWx0ZXI+aml0PC9GaWx0ZXI+
Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxmdGxcRlRMQWJi
cmV2aWF0ZWRUeXBlcy5oIj4KLSAgICAgIDxGaWx0ZXI+ZnRsPC9GaWx0ZXI+Ci0gICAgPC9DbElu
Y2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxmdGxcRlRMQWJicmV2aWF0aW9ucy5o
Ij4KLSAgICAgIDxGaWx0ZXI+ZnRsPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxmdGxcRlRMQWJzdHJhY3RIZWFwLmgiPgotICAgICAgPEZpbHRl
cj5mdGw8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXGZ0bFxGVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgiPgotICAgICAgPEZpbHRlcj5mdGw8
L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGZ0
bFxGVExBdmFpbGFibGVSZWNvdmVyeS5oIj4KLSAgICAgIDxGaWx0ZXI+ZnRsPC9GaWx0ZXI+Ci0g
ICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxmdGxcRlRMQ2FwYWJp
bGl0aWVzLmgiPgotICAgICAgPEZpbHRlcj5mdGw8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4K
LSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGZ0bFxGVExDb21tb25WYWx1ZXMuaCI+Ci0gICAg
ICA8RmlsdGVyPmZ0bDwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5cZnRsXEZUTENvbXBpbGUuaCI+Ci0gICAgICA8RmlsdGVyPmZ0bDwvRmlsdGVy
PgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZnRsXEZUTERh
dGFTZWN0aW9uLmgiPgotICAgICAgPEZpbHRlcj5mdGw8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVk
ZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGZ0bFxGVExEV0FSRkRlYnVnTGluZUluZm8u
aCI+Ci0gICAgICA8RmlsdGVyPmZ0bDwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cZnRsXEZUTERXQVJGUmVnaXN0ZXIuaCI+Ci0gICAgICA8Rmls
dGVyPmZ0bDwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cZnRsXEZUTEV4aXRBcmd1bWVudC5oIj4KLSAgICAgIDxGaWx0ZXI+ZnRsPC9GaWx0ZXI+
Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxmdGxcRlRMRXhp
dEFyZ3VtZW50Rm9yT3BlcmFuZC5oIj4KLSAgICAgIDxGaWx0ZXI+ZnRsPC9GaWx0ZXI+Ci0gICAg
PC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxmdGxcRlRMRXhpdEFyZ3Vt
ZW50TGlzdC5oIj4KLSAgICAgIDxGaWx0ZXI+ZnRsPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+
Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxmdGxcRlRMRXhpdFRodW5rR2VuZXJhdG9yLmgi
PgotICAgICAgPEZpbHRlcj5mdGw8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXGZ0bFxGVExFeGl0VmFsdWUuaCI+Ci0gICAgICA8RmlsdGVyPmZ0
bDwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
ZnRsXEZUTEZhaWwuaCI+Ci0gICAgICA8RmlsdGVyPmZ0bDwvRmlsdGVyPgotICAgIDwvQ2xJbmNs
dWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZnRsXEZUTEZvcm1hdHRlZFZhbHVlLmgi
PgotICAgICAgPEZpbHRlcj5mdGw8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXGZ0bFxGVExGb3JPU1JFbnRyeUpJVENvZGUuaCI+Ci0gICAgICA8
RmlsdGVyPmZ0bDwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cZnRsXEZUTEdlbmVyYXRlZEZ1bmN0aW9uLmgiPgotICAgICAgPEZpbHRlcj5mdGw8
L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGZ0
bFxGVExJbmxpbmVDYWNoZURlc2NyaXB0b3IuaCI+Ci0gICAgICA8RmlsdGVyPmZ0bDwvRmlsdGVy
PgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZnRsXEZUTElu
bGluZUNhY2hlU2l6ZS5oIj4KLSAgICAgIDxGaWx0ZXI+ZnRsPC9GaWx0ZXI+Ci0gICAgPC9DbElu
Y2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxmdGxcRlRMSW50cmluc2ljUmVwb3Np
dG9yeS5oIj4KLSAgICAgIDxGaWx0ZXI+ZnRsPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0g
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxmdGxcRlRMSklUQ29kZS5oIj4KLSAgICAgIDxGaWx0
ZXI+ZnRsPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxmdGxcRlRMSklURmluYWxpemVyLmgiPgotICAgICAgPEZpbHRlcj5mdGw8L0ZpbHRlcj4K
LSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGZ0bFxGVExKU0Nh
bGwuaCI+Ci0gICAgICA8RmlsdGVyPmZ0bDwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZnRsXEZUTExpbmsuaCI+Ci0gICAgICA8RmlsdGVyPmZ0
bDwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
ZnRsXEZUTExvY2F0aW9uLmgiPgotICAgICAgPEZpbHRlcj5mdGw8L0ZpbHRlcj4KLSAgICA8L0Ns
SW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGZ0bFxGVExMb3dlckRGR1RvTExW
TS5oIj4KLSAgICAgIDxGaWx0ZXI+ZnRsPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxmdGxcRlRMTG93ZXJlZE5vZGVWYWx1ZS5oIj4KLSAgICAg
IDxGaWx0ZXI+ZnRsPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxmdGxcRlRMT1NSRW50cnkuaCI+Ci0gICAgICA8RmlsdGVyPmZ0bDwvRmlsdGVy
PgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZnRsXEZUTE9T
UkV4aXQuaCI+Ci0gICAgICA8RmlsdGVyPmZ0bDwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgot
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZnRsXEZUTE9TUkV4aXRDb21waWxhdGlvbkluZm8u
aCI+Ci0gICAgICA8RmlsdGVyPmZ0bDwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cZnRsXEZUTE9TUkV4aXRDb21waWxlci5oIj4KLSAgICAgIDxG
aWx0ZXI+ZnRsPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxmdGxcRlRMT3V0cHV0LmgiPgotICAgICAgPEZpbHRlcj5mdGw8L0ZpbHRlcj4KLSAg
ICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGZ0bFxGVExSZWNvdmVy
eU9wY29kZS5oIj4KLSAgICAgIDxGaWx0ZXI+ZnRsPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+
Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxmdGxcRlRMUmVnaXN0ZXJBdE9mZnNldC5oIj4K
LSAgICAgIDxGaWx0ZXI+ZnRsPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxmdGxcRlRMU2F2ZVJlc3RvcmUuaCI+Ci0gICAgICA8RmlsdGVyPmZ0
bDwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
ZnRsXEZUTFNsb3dQYXRoQ2FsbC5oIj4KLSAgICAgIDxGaWx0ZXI+ZnRsPC9GaWx0ZXI+Ci0gICAg
PC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxmdGxcRlRMU2xvd1BhdGhD
YWxsS2V5LmgiPgotICAgICAgPEZpbHRlcj5mdGw8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4K
LSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGZ0bFxGVExTdGFja01hcHMuaCI+Ci0gICAgICA8
RmlsdGVyPmZ0bDwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cZnRsXEZUTFN0YXRlLmgiPgotICAgICAgPEZpbHRlcj5mdGw8L0ZpbHRlcj4KLSAg
ICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGZ0bFxGVExTd2l0Y2hD
YXNlLmgiPgotICAgICAgPEZpbHRlcj5mdGw8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGZ0bFxGVExUaHVua3MuaCI+Ci0gICAgICA8RmlsdGVy
PmZ0bDwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5cZnRsXEZUTFR5cGVkUG9pbnRlci5oIj4KLSAgICAgIDxGaWx0ZXI+ZnRsPC9GaWx0ZXI+Ci0g
ICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxmdGxcRlRMVW53aW5k
SW5mby5oIj4KLSAgICAgIDxGaWx0ZXI+ZnRsPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0g
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxmdGxcRlRMVmFsdWVGb3JtYXQuaCI+Ci0gICAgICA8
RmlsdGVyPmZ0bDwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cZnRsXEZUTFZhbHVlRnJvbUJsb2NrLmgiPgotICAgICAgPEZpbHRlcj5mdGw8L0Zp
bHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGZ0bFxG
VExWYWx1ZVJhbmdlLmgiPgotICAgICAgPEZpbHRlcj5mdGw8L0ZpbHRlcj4KLSAgICA8L0NsSW5j
bHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGZ0bFxGVExXZWlnaHQuaCI+Ci0gICAg
ICA8RmlsdGVyPmZ0bDwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5cZnRsXEZUTFdlaWdodGVkVGFyZ2V0LmgiPgotICAgICAgPEZpbHRlcj5mdGw8
L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRp
c2Fzc2VtYmxlclxMTFZNRGlzYXNzZW1ibGVyLmgiPgotICAgICAgPEZpbHRlcj5kaXNhc3NlbWJs
ZXI8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGxsdm1cSW5pdGlhbGl6ZUxMVk0uaCI+Ci0gICAgICA8RmlsdGVyPmxsdm08L0ZpbHRlcj4KLSAg
ICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGxsdm1cTExWTUFQSS5o
Ij4KLSAgICAgIDxGaWx0ZXI+bGx2bTwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cbGx2bVxMTFZNQVBJRnVuY3Rpb25zLmgiPgotICAgICAgPEZp
bHRlcj5sbHZtPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxsbHZtXExMVk1IZWFkZXJzLmgiPgotICAgICAgPEZpbHRlcj5sbHZtPC9GaWx0ZXI+
Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcQWNjZXNz
b3JDYWxsSklUU3R1YlJvdXRpbmUuaCI+Ci0gICAgICA8RmlsdGVyPmppdDwvRmlsdGVyPgotICAg
IDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYXNzZW1ibGVyXEFib3J0
UmVhc29uLmgiPgotICAgICAgPEZpbHRlcj5hc3NlbWJsZXI8L0ZpbHRlcj4KLSAgICA8L0NsSW5j
bHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGluc3BlY3RvclxDb25zb2xlTWVzc2Fn
ZS5oIj4KLSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+
Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHQXJpdGhNb2RlLmgiPgotICAgICAg
PEZpbHRlcj5kZmc8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXGRmZ1xERkdHcmFwaFNhZmVwb2ludC5oIj4KLSAgICAgIDxGaWx0ZXI+ZGZnPC9G
aWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdc
REZHSW50ZWdlckNoZWNrQ29tYmluaW5nUGhhc2UuaCI+Ci0gICAgICA8RmlsdGVyPmRmZzwvRmls
dGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERG
R05vZGVPcmlnaW4uaCI+Ci0gICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPgotICAgIDwvQ2xJbmNs
dWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1NhZmVwb2ludC5oIj4KLSAg
ICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxkZmdcREZHU2Nhbm5hYmxlLmgiPgotICAgICAgPEZpbHRlcj5kZmc8L0Zp
bHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xE
RkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5oIj4KLSAgICAgIDxGaWx0ZXI+
ZGZnPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxkZmdcREZHVGhyZWFkRGF0YS5oIj4KLSAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+Ci0gICAg
PC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxHZXRCeUlk
VmFyaWFudC5oIj4KLSAgICAgIDxGaWx0ZXI+Ynl0ZWNvZGU8L0ZpbHRlcj4KLSAgICA8L0NsSW5j
bHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGluc3BlY3RvclxJZGVudGlmaWVyc0Zh
Y3RvcnkuaCI+Ci0gICAgICA8RmlsdGVyPmluc3BlY3RvcjwvRmlsdGVyPgotICAgIDwvQ2xJbmNs
dWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXEluamVjdGVkU2NyaXB0
TW9kdWxlLmgiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0b3I8L0ZpbHRlcj4KLSAgICA8L0NsSW5j
bHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGluc3BlY3RvclxJbmplY3RlZFNjcmlw
dC5oIj4KLSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+
Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcSW5qZWN0ZWRTY3JpcHRCYXNl
LmgiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0b3I8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4K
LSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGluc3BlY3RvclxJbmplY3RlZFNjcmlwdEhvc3Qu
aCI+Ci0gICAgICA8RmlsdGVyPmluc3BlY3RvcjwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgot
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXEluamVjdGVkU2NyaXB0TWFuYWdl
ci5oIj4KLSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+
Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKENvbmZpZ3VyYXRpb25CdWlsZERpcilcb2JqJChQ
bGF0Zm9ybUFyY2hpdGVjdHVyZSlcJChQcm9qZWN0TmFtZSlcRGVyaXZlZFNvdXJjZXNcSW5qZWN0
ZWRTY3JpcHRTb3VyY2UuaCI+Ci0gICAgICA8RmlsdGVyPkRlcml2ZWQgU291cmNlczwvRmlsdGVy
PgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caW5zcGVjdG9y
XGFnZW50c1xJbnNwZWN0b3JDb25zb2xlQWdlbnQuaCI+Ci0gICAgICA8RmlsdGVyPmluc3BlY3Rv
cjwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
aW5zcGVjdG9yXEluc3BlY3RvckVudmlyb25tZW50LmgiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0
b3I8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGluc3BlY3RvclxKYXZhU2NyaXB0Q2FsbEZyYW1lLmgiPgotICAgICAgPEZpbHRlcj5pbnNwZWN0
b3I8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGluc3BlY3RvclxKU0luamVjdGVkU2NyaXB0SG9zdC5oIj4KLSAgICAgIDxGaWx0ZXI+aW5zcGVj
dG9yPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxpbnNwZWN0b3JcSlNJbmplY3RlZFNjcmlwdEhvc3RQcm90b3R5cGUuaCI+Ci0gICAgICA8Rmls
dGVyPmluc3BlY3RvcjwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5caW5zcGVjdG9yXEpTSmF2YVNjcmlwdENhbGxGcmFtZVByb3RvdHlwZS5oIj4K
LSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcSlNKYXZhU2NyaXB0Q2FsbEZyYW1lLmgi
PgotICAgICAgPEZpbHRlcj5pbnNwZWN0b3I8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNDSW5saW5lcy5oIj4KLSAgICAgIDxG
aWx0ZXI+cnVudGltZTwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5cYnl0ZWNvZGVcUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5oIj4KLSAgICAgIDxG
aWx0ZXI+Ynl0ZWNvZGU8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXHByb2ZpbGVyXFByb2ZpbGVySmV0dGlzb25SZWFzb24uaCI+Ci0gICAgICA8
RmlsdGVyPnByb2ZpbGVyPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxieXRlY29kZVxQdXRCeUlkVmFyaWFudC5oIj4KLSAgICAgIDxGaWx0ZXI+
Ynl0ZWNvZGU8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGluc3BlY3RvclxTY3JpcHRBcmd1bWVudHMuaCI+Ci0gICAgICA8RmlsdGVyPmluc3Bl
Y3RvcjwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5caml0XFJlZy5oIj4KLSAgICAgIDxGaWx0ZXI+aml0PC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1
ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcU2NyaXB0QnJlYWtwb2lu
dC5oIj4KLSAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+
Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcU2NyaXB0Q2FsbFN0YWNrLmgi
PgotICAgICAgPEZpbHRlcj5pbnNwZWN0b3I8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGluc3BlY3RvclxTY3JpcHRDYWxsRnJhbWUuaCI+Ci0g
ICAgICA8RmlsdGVyPmluc3BlY3RvcjwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXFNjcmlwdENhbGxTdGFja0ZhY3RvcnkuaCI+
Ci0gICAgICA8RmlsdGVyPmluc3BlY3RvcjwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXFNjcmlwdERlYnVnU2VydmVyLmgiPgot
ICAgICAgPEZpbHRlcj5pbnNwZWN0b3I8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGluc3BlY3RvclxTY3JpcHREZWJ1Z0xpc3RlbmVyLmgiPgot
ICAgICAgPEZpbHRlcj5pbnNwZWN0b3I8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcTWVtb3J5U3RhdGlzdGljcy5oIj4KLSAgICAg
IDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcQ29tcGxleEdldFN0YXR1cy5oIj4KLSAgICAgIDxGaWx0
ZXI+Ynl0ZWNvZGU8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXGJ5dGVjb2RlXENvbnN0YW50U3RydWN0dXJlQ2hlY2suaCI+Ci0gICAgICA8Rmls
dGVyPmJ5dGVjb2RlPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxkZmdcREZHRG9lc0dDLmgiPgotICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4K
LSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdGcm96
ZW5WYWx1ZS5oIj4KLSAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+
Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHSGVhcExvY2F0aW9uLmgiPgotICAg
ICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXGRmZ1xERkdNYXlFeGl0LmgiPgotICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRl
cj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQ
aGFudG9tUmVtb3ZhbFBoYXNlLmgiPgotICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4KLSAgICA8
L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQdXJlVmFsdWUu
aCI+Ci0gICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1N0cnVjdHVyZUNsb2JiZXJTdGF0ZS5oIj4KLSAg
ICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxkZmdcREZHVHJhbnNpdGlvbi5oIj4KLSAgICAgIDxGaWx0ZXI+ZGZnPC9G
aWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdc
REZHVmFsdWVTdHJlbmd0aC5oIj4KLSAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+Ci0gICAgPC9D
bEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHV2F0Y2hhYmxlU3Ry
dWN0dXJlV2F0Y2hpbmdQaGFzZS5oIj4KLSAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+Ci0gICAg
PC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEV4Y2VwdGlv
bkZ1enouaCI+Ci0gICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVk
ZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFRvVGhpc1N0YXR1cy5oIj4K
LSAgICAgIDxGaWx0ZXI+Ynl0ZWNvZGU8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgPC9J
dGVtR3JvdXA+Ci0gIDxJdGVtR3JvdXA+Ci0gICAgPE5vbmUgSW5jbHVkZT0iSmF2YVNjcmlwdENv
cmVQcmVMaW5rLmNtZCIgLz4KLSAgICA8Tm9uZSBJbmNsdWRlPSJKYXZhU2NyaXB0Q29yZVBvc3RC
dWlsZC5jbWQiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iSmF2YVNjcmlwdENvcmVQcmVCdWlsZC5j
bWQiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcQnl0ZWNvZGVMaXN0Lmpzb24i
PgotICAgICAgPEZpbHRlcj5ieXRlY29kZTwvRmlsdGVyPgotICAgIDwvTm9uZT4KLSAgPC9JdGVt
R3JvdXA+Ci0gIDxJdGVtR3JvdXA+Ci0gICAgPE1BU00gSW5jbHVkZT0iJChDb25maWd1cmF0aW9u
QnVpbGREaXIpXG9iaiQoUGxhdGZvcm1BcmNoaXRlY3R1cmUpXCQoUHJvamVjdE5hbWUpXERlcml2
ZWRTb3VyY2VzXExvd0xldmVsSW50ZXJwcmV0ZXJXaW4uYXNtIj4KLSAgICAgIDxGaWx0ZXI+RGVy
aXZlZCBTb3VyY2VzPC9GaWx0ZXI+Ci0gICAgPC9NQVNNPgotICAgIDxNQVNNIEluY2x1ZGU9Ii4u
XGppdFxKSVRTdHVic01TVkM2NC5hc20iPgotICAgICAgPEZpbHRlcj5qaXQ8L0ZpbHRlcj4KLSAg
ICA8L01BU00+Ci0gIDwvSXRlbUdyb3VwPgor77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGlu
Zz0idXRmLTgiPz4NCis8UHJvamVjdCBUb29sc1ZlcnNpb249IjQuMCIgeG1sbnM9Imh0dHA6Ly9z
Y2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+DQorICA8SXRlbUdy
b3VwPg0KKyAgICA8RmlsdGVyIEluY2x1ZGU9ImFzc2VtYmxlciI+DQorICAgICAgPFVuaXF1ZUlk
ZW50aWZpZXI+ezQyOTc4M2ExLTVkNmEtNDAxOS1hZDFhLWRkYjJjOThmOWI2Y308L1VuaXF1ZUlk
ZW50aWZpZXI+DQorICAgIDwvRmlsdGVyPg0KKyAgICA8RmlsdGVyIEluY2x1ZGU9ImJpbmRpbmdz
Ij4NCisgICAgICA8VW5pcXVlSWRlbnRpZmllcj57MGJhY2UxMjMtNDU4Mi1lZWJjLTkzMTQtNzgx
OWIzNzZjMTk4fTwvVW5pcXVlSWRlbnRpZmllcj4NCisgICAgPC9GaWx0ZXI+DQorICAgIDxGaWx0
ZXIgSW5jbHVkZT0iYnVpbHRpbnMiPg0KKyAgICAgIDxVbmlxdWVJZGVudGlmaWVyPnszYjlkNzJh
NS0xMzViLTQzYjMtYTUyNC1jNmQyYjlkMjlkMzV9PC9VbmlxdWVJZGVudGlmaWVyPg0KKyAgICA8
L0ZpbHRlcj4NCisgICAgPEZpbHRlciBJbmNsdWRlPSJieXRlY29kZSI+DQorICAgICAgPFVuaXF1
ZUlkZW50aWZpZXI+ezc2NjA4OGEwLTEyMTYtNDg1NC1hYTQzLTU2MGM1ZTI4MzY2OH08L1VuaXF1
ZUlkZW50aWZpZXI+DQorICAgIDwvRmlsdGVyPg0KKyAgICA8RmlsdGVyIEluY2x1ZGU9ImJ5dGVj
b2RlY29tcGlsZXIiPg0KKyAgICAgIDxVbmlxdWVJZGVudGlmaWVyPntiZGRkMTUzZS04YzUzLTQ1
MTUtYWI5ZS01ZDkwMTY4NmJkNGZ9PC9VbmlxdWVJZGVudGlmaWVyPg0KKyAgICA8L0ZpbHRlcj4N
CisgICAgPEZpbHRlciBJbmNsdWRlPSJkZWJ1Z2dlciI+DQorICAgICAgPFVuaXF1ZUlkZW50aWZp
ZXI+ezZlMGNiMzU4LTJmZTctNDZhNC04ZWZkLWY2NjQ5Y2VlNjM3MH08L1VuaXF1ZUlkZW50aWZp
ZXI+DQorICAgIDwvRmlsdGVyPg0KKyAgICA8RmlsdGVyIEluY2x1ZGU9IkRlcml2ZWQgU291cmNl
cyI+DQorICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+ezlmNzQ2OWJiLTc4MzMtNDI3OS04ZDI4LTJm
YzcxYzYzMjU1Mn08L1VuaXF1ZUlkZW50aWZpZXI+DQorICAgIDwvRmlsdGVyPg0KKyAgICA8Rmls
dGVyIEluY2x1ZGU9ImRmZyI+DQorICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+ezZjODI1MzlkLTQw
ZDItNDVhNS1hNjYzLTgzNDljMjE0MWIxYX08L1VuaXF1ZUlkZW50aWZpZXI+DQorICAgIDwvRmls
dGVyPg0KKyAgICA8RmlsdGVyIEluY2x1ZGU9ImRpc2Fzc2VtYmxlciI+DQorICAgICAgPFVuaXF1
ZUlkZW50aWZpZXI+ezk0MGY3NDliLWExODktNDViZS04M2I5LWI0ZTc0ZWNmMTQ4Nn08L1VuaXF1
ZUlkZW50aWZpZXI+DQorICAgIDwvRmlsdGVyPg0KKyAgICA8RmlsdGVyIEluY2x1ZGU9ImhlYXAi
Pg0KKyAgICAgIDxVbmlxdWVJZGVudGlmaWVyPntiZDQ5ZTVjZi05NWQ2LTQxNTEtYjI4Ni04ODM3
Y2NkMzQ3ZmF9PC9VbmlxdWVJZGVudGlmaWVyPg0KKyAgICA8L0ZpbHRlcj4NCisgICAgPEZpbHRl
ciBJbmNsdWRlPSJpbnNwZWN0b3IiPg0KKyAgICAgIDxVbmlxdWVJZGVudGlmaWVyPnswOWFlMDlk
YS0xMjM5LTAwZWEtOGRmZS05MDg3YWUxMjNiYmV9PC9VbmlxdWVJZGVudGlmaWVyPg0KKyAgICA8
L0ZpbHRlcj4NCisgICAgPEZpbHRlciBJbmNsdWRlPSJpbnRlcnByZXRlciI+DQorICAgICAgPFVu
aXF1ZUlkZW50aWZpZXI+ezEwZDk3ZWEzLTJhZjktNDg5Yy1hNTRlLWQ2OWVmMmU0Y2EwYX08L1Vu
aXF1ZUlkZW50aWZpZXI+DQorICAgIDwvRmlsdGVyPg0KKyAgICA8RmlsdGVyIEluY2x1ZGU9Impp
dCI+DQorICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+ezk0ZDdlYjY0LTNlNTEtNDAwOC04NTM2LTBi
Y2I2NzY4YmE5Zn08L1VuaXF1ZUlkZW50aWZpZXI+DQorICAgIDwvRmlsdGVyPg0KKyAgICA8Rmls
dGVyIEluY2x1ZGU9ImxsaW50Ij4NCisgICAgICA8VW5pcXVlSWRlbnRpZmllcj57NjNlM2RkOTIt
N2VhOS00NzIzLWIwOTktNmM3OWE5MzlkZWMwfTwvVW5pcXVlSWRlbnRpZmllcj4NCisgICAgPC9G
aWx0ZXI+DQorICAgIDxGaWx0ZXIgSW5jbHVkZT0icGFyc2VyIj4NCisgICAgICA8VW5pcXVlSWRl
bnRpZmllcj57ZTZhMDI2YTQtMTU2YS00YTU5LTllM2YtZThiNTRlNjY1ODQxfTwvVW5pcXVlSWRl
bnRpZmllcj4NCisgICAgPC9GaWx0ZXI+DQorICAgIDxGaWx0ZXIgSW5jbHVkZT0icHJvZmlsZXIi
Pg0KKyAgICAgIDxVbmlxdWVJZGVudGlmaWVyPnszNTFkY2JkMi1lNDdlLTQ0NjctODYwOS01M2Fj
ZmNlNzJmOTF9PC9VbmlxdWVJZGVudGlmaWVyPg0KKyAgICA8L0ZpbHRlcj4NCisgICAgPEZpbHRl
ciBJbmNsdWRlPSJydW50aW1lIj4NCisgICAgICA8VW5pcXVlSWRlbnRpZmllcj57M2I5ZDcyYTUt
MTM1Yi00M2IzLWE1MjQtYzZkMmI5ZDI5ZDM0fTwvVW5pcXVlSWRlbnRpZmllcj4NCisgICAgPC9G
aWx0ZXI+DQorICAgIDxGaWx0ZXIgSW5jbHVkZT0idG9vbHMiPg0KKyAgICAgIDxVbmlxdWVJZGVu
dGlmaWVyPnswM2VkYTNlYy1iY2IyLTQ0NzQtYjFiMy02OWFkNzcxODQ2YTR9PC9VbmlxdWVJZGVu
dGlmaWVyPg0KKyAgICA8L0ZpbHRlcj4NCisgICAgPEZpbHRlciBJbmNsdWRlPSJ5YXJyIj4NCisg
ICAgICA8VW5pcXVlSWRlbnRpZmllcj57ZmFjNTI2NjYtODQyZS00ZDAyLTlkNWYtODQ0ZjU0ZGNh
NWY3fTwvVW5pcXVlSWRlbnRpZmllcj4NCisgICAgPC9GaWx0ZXI+DQorICAgIDxGaWx0ZXIgSW5j
bHVkZT0iQVBJIj4NCisgICAgICA8VW5pcXVlSWRlbnRpZmllcj57OWVkMGJjNmUtNzM3Mi00Nzk1
LTk2NTEtOTE3YzllMDVjNjQxfTwvVW5pcXVlSWRlbnRpZmllcj4NCisgICAgPC9GaWx0ZXI+DQor
ICAgIDxGaWx0ZXIgSW5jbHVkZT0iZnRsIj4NCisgICAgICA8VW5pcXVlSWRlbnRpZmllcj57NTI1
MmFkYzktZjI2YS00Zjc2LWEwNzktZjYyMjJiMzNlNGI4fTwvVW5pcXVlSWRlbnRpZmllcj4NCisg
ICAgPC9GaWx0ZXI+DQorICAgIDxGaWx0ZXIgSW5jbHVkZT0ibGx2bSI+DQorICAgICAgPFVuaXF1
ZUlkZW50aWZpZXI+ezg1MmU5NDE1LTI0NWMtNDAxMi1hZWI4LTM4Y2E5ZWZiNzNiOH08L1VuaXF1
ZUlkZW50aWZpZXI+DQorICAgIDwvRmlsdGVyPg0KKyAgICA8RmlsdGVyIEluY2x1ZGU9Imluc3Bl
Y3RvclxzY3JpcHRzIj4NCisgICAgICA8VW5pcXVlSWRlbnRpZmllcj57YTI5ZDI3YzAtMmMzNC00
ODJiLTg3Y2MtMjFlN2VmMjkwYzg4fTwvVW5pcXVlSWRlbnRpZmllcj4NCisgICAgPC9GaWx0ZXI+
DQorICAgIDxGaWx0ZXIgSW5jbHVkZT0iaW5zcGVjdG9yXHNjcmlwdHNcY29kZWdlbiI+DQorICAg
ICAgPFVuaXF1ZUlkZW50aWZpZXI+ezE3ZTMwNGU4LWMwZTgtNGIxOC04OGZhLTYyYjg2ZWJhOTk1
OX08L1VuaXF1ZUlkZW50aWZpZXI+DQorICAgIDwvRmlsdGVyPg0KKyAgICA8RmlsdGVyIEluY2x1
ZGU9Imluc3BlY3RvclxzY3JpcHRzXHRlc3RzIj4NCisgICAgICA8VW5pcXVlSWRlbnRpZmllcj57
MGEwMzRjOTctMzk0Ny00N2M0LTgwODUtMmRkYzhhYTFhZGUwfTwvVW5pcXVlSWRlbnRpZmllcj4N
CisgICAgPC9GaWx0ZXI+DQorICAgIDxGaWx0ZXIgSW5jbHVkZT0iaW5zcGVjdG9yXHNjcmlwdHNc
dGVzdHNcZXhwZWN0ZWQiPg0KKyAgICAgIDxVbmlxdWVJZGVudGlmaWVyPns2YmU5ZDM2Ny0wMDkx
LTRlYmItYjk2Yy00ZWY4Mzc5MDM2MmJ9PC9VbmlxdWVJZGVudGlmaWVyPg0KKyAgICA8L0ZpbHRl
cj4NCisgIDwvSXRlbUdyb3VwPg0KKyAgPEl0ZW1Hcm91cD4NCisgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxBUElcSlNCYXNlLmNwcCI+DQorICAgICAgPEZpbHRlcj5BUEk8L0ZpbHRlcj4NCisg
ICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cQVBJXEpTQ2FsbGJh
Y2tDb25zdHJ1Y3Rvci5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+QVBJPC9GaWx0ZXI+DQorICAgIDwv
Q2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXEFQSVxKU0NhbGxiYWNrRnVu
Y3Rpb24uY3BwIj4NCisgICAgICA8RmlsdGVyPkFQSTwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGls
ZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxBUElcSlNDYWxsYmFja09iamVjdC5jcHAi
Pg0KKyAgICAgIDxGaWx0ZXI+QVBJPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXEFQSVxKU0NsYXNzUmVmLmNwcCI+DQorICAgICAgPEZpbHRl
cj5BUEk8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cQVBJXEpTQ29udGV4dFJlZi5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+QVBJPC9GaWx0ZXI+
DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXEFQSVxKU09i
amVjdFJlZi5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+QVBJPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21w
aWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXEFQSVxKU1NjcmlwdFJlZi5jcHAiPg0K
KyAgICAgIDxGaWx0ZXI+QVBJPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXEFQSVxKU1N0cmluZ1JlZi5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+
QVBJPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXEFQSVxKU1N0cmluZ1JlZkJTVFIuY3BwIj4NCisgICAgICA8RmlsdGVyPkFQSTwvRmlsdGVy
Pg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxBUElcSlNT
dHJpbmdSZWZDRi5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+QVBJPC9GaWx0ZXI+DQorICAgIDwvQ2xD
b21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXEFQSVxKU1ZhbHVlUmVmLmNwcCI+
DQorICAgICAgPEZpbHRlcj5BUEk8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5cQVBJXEpTV2Vha09iamVjdE1hcFJlZlByaXZhdGUuY3BwIj4N
CisgICAgICA8RmlsdGVyPkFQSTwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxBUElcT3BhcXVlSlNTdHJpbmcuY3BwIj4NCisgICAgICA8Rmls
dGVyPkFQSTwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxhc3NlbWJsZXJcTGlua0J1ZmZlci5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+YXNzZW1i
bGVyPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXGFzc2VtYmxlclxNYWNyb0Fzc2VtYmxlci5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+YXNzZW1i
bGVyPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXGJ1aWx0aW5zXEJ1aWx0aW5FeGVjdXRhYmxlcy5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+YnVp
bHRpbnM8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cYnl0ZWNvZGVcQXJyYXlBbGxvY2F0aW9uUHJvZmlsZS5jcHAiPg0KKyAgICAgIDxGaWx0
ZXI+Ynl0ZWNvZGU8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5cYnl0ZWNvZGVcQXJyYXlQcm9maWxlLmNwcCI+DQorICAgICAgPEZpbHRlcj5i
eXRlY29kZTwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxieXRlY29kZVxCeXRlY29kZUJhc2ljQmxvY2suY3BwIj4NCisgICAgICA8RmlsdGVy
PmJ5dGVjb2RlPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXGJ5dGVjb2RlXEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5jcHAiPg0KKyAgICAg
IDxGaWx0ZXI+Ynl0ZWNvZGU8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcQ2FsbExpbmtJbmZvLmNwcCI+DQorICAgICAgPEZp
bHRlcj5ieXRlY29kZTwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxieXRlY29kZVxDYWxsTGlua1N0YXR1cy5jcHAiPg0KKyAgICAgIDxGaWx0
ZXI+Ynl0ZWNvZGU8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5cYnl0ZWNvZGVcQ29kZUJsb2NrLmNwcCI+DQorICAgICAgPEZpbHRlcj5ieXRl
Y29kZTwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxieXRlY29kZVxDb2RlQmxvY2tIYXNoLmNwcCI+DQorICAgICAgPEZpbHRlcj5ieXRlY29k
ZTwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxieXRlY29kZVxDb2RlT3JpZ2luLmNwcCI+DQorICAgICAgPEZpbHRlcj5ieXRlY29kZTwvRmls
dGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRl
Y29kZVxDb2RlVHlwZS5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+Ynl0ZWNvZGU8L0ZpbHRlcj4NCisg
ICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcRXhl
Y3V0aW9uQ291bnRlci5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+Ynl0ZWNvZGU8L0ZpbHRlcj4NCisg
ICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcRXhp
dEtpbmQuY3BwIj4NCisgICAgICA8RmlsdGVyPmJ5dGVjb2RlPC9GaWx0ZXI+DQorICAgIDwvQ2xD
b21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXEdldEJ5SWRTdGF0
dXMuY3BwIj4NCisgICAgICA8RmlsdGVyPmJ5dGVjb2RlPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21w
aWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXEp1bXBUYWJsZS5jcHAi
Pg0KKyAgICAgIDxGaWx0ZXI+Ynl0ZWNvZGU8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQor
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcTGF6eU9wZXJhbmRWYWx1ZVByb2Zp
bGUuY3BwIj4NCisgICAgICA8RmlsdGVyPmJ5dGVjb2RlPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21w
aWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXE1ldGhvZE9mR2V0dGlu
Z0FWYWx1ZVByb2ZpbGUuY3BwIj4NCisgICAgICA8RmlsdGVyPmJ5dGVjb2RlPC9GaWx0ZXI+DQor
ICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXE9w
Y29kZS5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+Ynl0ZWNvZGU8L0ZpbHRlcj4NCisgICAgPC9DbENv
bXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcUG9seW1vcnBoaWNQ
dXRCeUlkTGlzdC5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+Ynl0ZWNvZGU8L0ZpbHRlcj4NCisgICAg
PC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcUHV0QnlJ
ZFN0YXR1cy5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+Ynl0ZWNvZGU8L0ZpbHRlcj4NCisgICAgPC9D
bENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcUmVkdWNlV2hp
dGVzcGFjZS5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+Ynl0ZWNvZGU8L0ZpbHRlcj4NCisgICAgPC9D
bENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcU2FtcGxpbmdU
b29sLmNwcCI+DQorICAgICAgPEZpbHRlcj5ieXRlY29kZTwvRmlsdGVyPg0KKyAgICA8L0NsQ29t
cGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxTcGVjaWFsUG9pbnRl
ci5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+Ynl0ZWNvZGU8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBp
bGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcU3BlY3VsYXRlZFR5cGUu
Y3BwIj4NCisgICAgICA8RmlsdGVyPmJ5dGVjb2RlPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxl
Pg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFN0cnVjdHVyZVN0dWJDbGVh
cmluZ1dhdGNocG9pbnQuY3BwIj4NCisgICAgICA8RmlsdGVyPmJ5dGVjb2RlPC9GaWx0ZXI+DQor
ICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFN0
cnVjdHVyZVN0dWJJbmZvLmNwcCI+DQorICAgICAgPEZpbHRlcj5ieXRlY29kZTwvRmlsdGVyPg0K
KyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxV
bmxpbmtlZENvZGVCbG9jay5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+Ynl0ZWNvZGU8L0ZpbHRlcj4N
CisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVc
VW5saW5rZWRJbnN0cnVjdGlvblN0cmVhbS5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+Ynl0ZWNvZGU8
L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
Ynl0ZWNvZGVcV2F0Y2hwb2ludC5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+Ynl0ZWNvZGU8L0ZpbHRl
cj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNv
bXBpbGVyXEJ5dGVjb2RlR2VuZXJhdG9yLmNwcCI+DQorICAgICAgPEZpbHRlcj5ieXRlY29kZWNv
bXBpbGVyPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXGJ5dGVjb21waWxlclxOb2Rlc0NvZGVnZW4uY3BwIj4NCisgICAgICA8RmlsdGVyPmJ5
dGVjb2RlY29tcGlsZXI8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5cZGVidWdnZXJcRGVidWdnZXIuY3BwIj4NCisgICAgICA8RmlsdGVyPmRl
YnVnZ2VyPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXGRlYnVnZ2VyXERlYnVnZ2VyQ2FsbEZyYW1lLmNwcCI+DQorICAgICAgPEZpbHRlcj5k
ZWJ1Z2dlcjwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxkZWJ1Z2dlclxEZWJ1Z2dlclNjb3BlLmNwcCI+DQorICAgICAgPEZpbHRlcj5kZWJ1
Z2dlcjwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxkaXNhc3NlbWJsZXJcRGlzYXNzZW1ibGVyLmNwcCI+DQorICAgICAgPEZpbHRlcj5kaXNh
c3NlbWJsZXI8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5caGVhcFxCbG9ja0FsbG9jYXRvci5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+aGVhcDwv
RmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxo
ZWFwXENvbnNlcnZhdGl2ZVJvb3RzLmNwcCI+DQorICAgICAgPEZpbHRlcj5oZWFwPC9GaWx0ZXI+
DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGhlYXBcQ29w
aWVkU3BhY2UuY3BwIj4NCisgICAgICA8RmlsdGVyPmhlYXA8L0ZpbHRlcj4NCisgICAgPC9DbENv
bXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caGVhcFxDb3B5VmlzaXRvci5jcHAi
Pg0KKyAgICAgIDxGaWx0ZXI+aGVhcDwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxoZWFwXEVkZW5HQ0FjdGl2aXR5Q2FsbGJhY2suY3BwIj4N
CisgICAgICA8RmlsdGVyPmhlYXA8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5caGVhcFxGdWxsR0NBY3Rpdml0eUNhbGxiYWNrLmNwcCI+DQor
ICAgICAgPEZpbHRlcj5oZWFwPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXGhlYXBcR0NBY3Rpdml0eUNhbGxiYWNrLmNwcCI+DQorICAgICAg
PEZpbHRlcj5oZWFwPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXGhlYXBcR0NMb2dnaW5nLmNwcCI+DQorICAgICAgPEZpbHRlcj5oZWFwPC9G
aWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGhl
YXBcR0NUaHJlYWQuY3BwIj4NCisgICAgICA8RmlsdGVyPmhlYXA8L0ZpbHRlcj4NCisgICAgPC9D
bENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caGVhcFxHQ1RocmVhZFNoYXJl
ZERhdGEuY3BwIj4NCisgICAgICA8RmlsdGVyPmhlYXA8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBp
bGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caGVhcFxIYW5kbGVTZXQuY3BwIj4NCisg
ICAgICA8RmlsdGVyPmhlYXA8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5caGVhcFxIYW5kbGVTdGFjay5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+
aGVhcDwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxoZWFwXEhlYXAuY3BwIj4NCisgICAgICA8RmlsdGVyPmhlYXA8L0ZpbHRlcj4NCisgICAg
PC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caGVhcFxIZWFwU3RhdGlz
dGljcy5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+aGVhcDwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGls
ZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxoZWFwXEhlYXBUaW1lci5jcHAiPg0KKyAg
ICAgIDxGaWx0ZXI+aGVhcDwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxoZWFwXEluY3JlbWVudGFsU3dlZXBlci5jcHAiPg0KKyAgICAgIDxG
aWx0ZXI+aGVhcDwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxoZWFwXEpJVFN0dWJSb3V0aW5lU2V0LmNwcCI+DQorICAgICAgPEZpbHRlcj5o
ZWFwPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXGhlYXBcTWFjaGluZVN0YWNrTWFya2VyLmNwcCI+DQorICAgICAgPEZpbHRlcj5oZWFwPC9G
aWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGhl
YXBcTWFya2VkQWxsb2NhdG9yLmNwcCI+DQorICAgICAgPEZpbHRlcj5oZWFwPC9GaWx0ZXI+DQor
ICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGhlYXBcTWFya2Vk
QmxvY2suY3BwIj4NCisgICAgICA8RmlsdGVyPmhlYXA8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBp
bGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caGVhcFxNYXJrZWRTcGFjZS5jcHAiPg0K
KyAgICAgIDxGaWx0ZXI+aGVhcDwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxoZWFwXE1hcmtTdGFjay5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+
aGVhcDwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxoZWFwXFNsb3RWaXNpdG9yLmNwcCI+DQorICAgICAgPEZpbHRlcj5oZWFwPC9GaWx0ZXI+
DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGhlYXBcU3Vw
ZXJSZWdpb24uY3BwIj4NCisgICAgICA8RmlsdGVyPmhlYXA8L0ZpbHRlcj4NCisgICAgPC9DbENv
bXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caGVhcFxXZWFrLmNwcCI+DQorICAg
ICAgPEZpbHRlcj5oZWFwPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXGhlYXBcV2Vha0Jsb2NrLmNwcCI+DQorICAgICAgPEZpbHRlcj5oZWFw
PC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XGhlYXBcV2Vha0hhbmRsZU93bmVyLmNwcCI+DQorICAgICAgPEZpbHRlcj5oZWFwPC9GaWx0ZXI+
DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGhlYXBcV2Vh
a1NldC5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+aGVhcDwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGls
ZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxoZWFwXFdyaXRlQmFycmllckJ1ZmZlci5j
cHAiPg0KKyAgICAgIDxGaWx0ZXI+aGVhcDwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxoZWFwXFdyaXRlQmFycmllclN1cHBvcnQuY3BwIj4N
CisgICAgICA8RmlsdGVyPmhlYXA8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXENvbnRlbnRTZWFyY2hVdGlsaXRpZXMuY3Bw
Ij4NCisgICAgICA8RmlsdGVyPmluc3BlY3RvcjwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4N
CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcSW5zcGVjdG9yQWdlbnRSZWdp
c3RyeS5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yPC9GaWx0ZXI+DQorICAgIDwvQ2xD
b21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGluc3BlY3RvclxJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlci5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yPC9GaWx0ZXI+
DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGluc3BlY3Rv
clxJbnNwZWN0b3JWYWx1ZXMuY3BwIj4NCisgICAgICA8RmlsdGVyPmluc3BlY3RvcjwvRmlsdGVy
Pg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxpbnNwZWN0
b3JcYWdlbnRzXEluc3BlY3RvckFnZW50LmNwcCI+DQorICAgICAgPEZpbHRlcj5pbnNwZWN0b3I8
L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
aW5zcGVjdG9yXGFnZW50c1xJbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcCI+DQorICAgICAgPEZp
bHRlcj5pbnNwZWN0b3I8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGFnZW50c1xJbnNwZWN0b3JQcm9maWxlckFnZW50LmNw
cCI+DQorICAgICAgPEZpbHRlcj5pbnNwZWN0b3I8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+
DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXGFnZW50c1xJbnNwZWN0b3JS
dW50aW1lQWdlbnQuY3BwIj4NCisgICAgICA8RmlsdGVyPmluc3BlY3RvcjwvRmlsdGVyPg0KKyAg
ICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxpbnRlcnByZXRlclxB
YnN0cmFjdFBDLmNwcCI+DQorICAgICAgPEZpbHRlcj5pbnRlcnByZXRlcjwvRmlsdGVyPg0KKyAg
ICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxpbnRlcnByZXRlclxD
YWxsRnJhbWUuY3BwIj4NCisgICAgICA8RmlsdGVyPmludGVycHJldGVyPC9GaWx0ZXI+DQorICAg
IDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGludGVycHJldGVyXElu
dGVycHJldGVyLmNwcCI+DQorICAgICAgPEZpbHRlcj5pbnRlcnByZXRlcjwvRmlsdGVyPg0KKyAg
ICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxpbnRlcnByZXRlclxK
U1N0YWNrLmNwcCI+DQorICAgICAgPEZpbHRlcj5pbnRlcnByZXRlcjwvRmlsdGVyPg0KKyAgICA8
L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxpbnRlcnByZXRlclxQcm90
b0NhbGxGcmFtZS5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+aW50ZXJwcmV0ZXI8L0ZpbHRlcj4NCisg
ICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caW50ZXJwcmV0ZXJc
U3RhY2tWaXNpdG9yLmNwcCI+DQorICAgICAgPEZpbHRlcj5pbnRlcnByZXRlcjwvRmlsdGVyPg0K
KyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxpbnRlcnByZXRl
clxWTUluc3BlY3Rvci5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+aW50ZXJwcmV0ZXI8L0ZpbHRlcj4N
CisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caml0XENsb3N1
cmVDYWxsU3R1YlJvdXRpbmUuY3BwIj4NCisgICAgICA8RmlsdGVyPmppdDwvRmlsdGVyPg0KKyAg
ICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxqaXRcRXhlY3V0YWJs
ZUFsbG9jYXRvci5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+aml0PC9GaWx0ZXI+DQorICAgIDwvQ2xD
b21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxHQ0F3YXJlSklUU3R1YlJv
dXRpbmUuY3BwIj4NCisgICAgICA8RmlsdGVyPmppdDwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGls
ZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxqaXRcSG9zdENhbGxSZXR1cm5WYWx1ZS5j
cHAiPg0KKyAgICAgIDxGaWx0ZXI+aml0PC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxKSVQuY3BwIj4NCisgICAgICA8RmlsdGVyPmpp
dDwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxqaXRcSklUQXJpdGhtZXRpYy5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+aml0PC9GaWx0ZXI+DQor
ICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxKSVRBcml0
aG1ldGljMzJfNjQuY3BwIj4NCisgICAgICA8RmlsdGVyPmppdDwvRmlsdGVyPg0KKyAgICA8L0Ns
Q29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxqaXRcSklUQ2FsbC5jcHAiPg0K
KyAgICAgIDxGaWx0ZXI+aml0PC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXGppdFxKSVRDYWxsMzJfNjQuY3BwIj4NCisgICAgICA8RmlsdGVy
PmppdDwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxqaXRcSklUQ29kZS5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+aml0PC9GaWx0ZXI+DQorICAg
IDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxKSVREaXNhc3Nl
bWJsZXIuY3BwIj4NCisgICAgICA8RmlsdGVyPmppdDwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGls
ZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxqaXRcSklURXhjZXB0aW9ucy5jcHAiPg0K
KyAgICAgIDxGaWx0ZXI+aml0PC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXGppdFxKSVRPcGNvZGVzLmNwcCI+DQorICAgICAgPEZpbHRlcj5q
aXQ8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5caml0XEpJVE9wY29kZXMzMl82NC5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+aml0PC9GaWx0ZXI+
DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxKSVRQ
cm9wZXJ0eUFjY2Vzcy5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+aml0PC9GaWx0ZXI+DQorICAgIDwv
Q2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxKSVRQcm9wZXJ0eUFj
Y2VzczMyXzY0LmNwcCI+DQorICAgICAgPEZpbHRlcj5qaXQ8L0ZpbHRlcj4NCisgICAgPC9DbENv
bXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caml0XEpJVFN0dWJSb3V0aW5lLmNw
cCI+DQorICAgICAgPEZpbHRlcj5qaXQ8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQorICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caml0XEpJVFN0dWJzLmNwcCI+DQorICAgICAgPEZpbHRl
cj5qaXQ8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5caml0XEpJVFRodW5rcy5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+aml0PC9GaWx0ZXI+DQor
ICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxUaHVua0dl
bmVyYXRvcnMuY3BwIj4NCisgICAgICA8RmlsdGVyPmppdDwvRmlsdGVyPg0KKyAgICA8L0NsQ29t
cGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxsbGludFxMTEludENMb29wLmNwcCI+
DQorICAgICAgPEZpbHRlcj5sbGludDwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxsbGludFxMTEludERhdGEuY3BwIj4NCisgICAgICA8Rmls
dGVyPmxsaW50PC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXGxsaW50XExMSW50RXhjZXB0aW9ucy5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+bGxp
bnQ8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5cbGxpbnRcTExJbnRPZmZzZXRzRXh0cmFjdG9yLmNwcCI+DQorICAgICAgPEZpbHRlcj5sbGlu
dDwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxsbGludFxMTEludFNsb3dQYXRocy5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+bGxpbnQ8L0ZpbHRl
cj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cbGxpbnRc
TExJbnRUaHVua3MuY3BwIj4NCisgICAgICA8RmlsdGVyPmxsaW50PC9GaWx0ZXI+DQorICAgIDwv
Q2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGxsaW50XExvd0xldmVsSW50
ZXJwcmV0ZXIuY3BwIj4NCisgICAgICA8RmlsdGVyPmxsaW50PC9GaWx0ZXI+DQorICAgIDwvQ2xD
b21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBhcnNlclxMZXhlci5jcHAiPg0K
KyAgICAgIDxGaWx0ZXI+cGFyc2VyPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBhcnNlclxOb2Rlcy5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+
cGFyc2VyPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXHBhcnNlclxQYXJzZXIuY3BwIj4NCisgICAgICA8RmlsdGVyPnBhcnNlcjwvRmlsdGVy
Pg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwYXJzZXJc
UGFyc2VyQXJlbmEuY3BwIj4NCisgICAgICA8RmlsdGVyPnBhcnNlcjwvRmlsdGVyPg0KKyAgICA8
L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwYXJzZXJcU291cmNlUHJv
dmlkZXJDYWNoZS5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+cGFyc2VyPC9GaWx0ZXI+DQorICAgIDwv
Q2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHByb2ZpbGVyXExlZ2FjeVBy
b2ZpbGVyLmNwcCI+DQorICAgICAgPEZpbHRlcj5wcm9maWxlcjwvRmlsdGVyPg0KKyAgICA8L0Ns
Q29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwcm9maWxlclxQcm9maWxlLmNw
cCI+DQorICAgICAgPEZpbHRlcj5wcm9maWxlcjwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4N
CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwcm9maWxlclxQcm9maWxlR2VuZXJhdG9yLmNw
cCI+DQorICAgICAgPEZpbHRlcj5wcm9maWxlcjwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4N
CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwcm9maWxlclxQcm9maWxlTm9kZS5jcHAiPg0K
KyAgICAgIDxGaWx0ZXI+cHJvZmlsZXI8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQorICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccHJvZmlsZXJcUHJvZmlsZXJCeXRlY29kZS5jcHAiPg0K
KyAgICAgIDxGaWx0ZXI+cHJvZmlsZXI8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQorICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccHJvZmlsZXJcUHJvZmlsZXJCeXRlY29kZXMuY3BwIj4N
CisgICAgICA8RmlsdGVyPnByb2ZpbGVyPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHByb2ZpbGVyXFByb2ZpbGVyQnl0ZWNvZGVTZXF1ZW5j
ZS5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+cHJvZmlsZXI8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBp
bGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccHJvZmlsZXJcUHJvZmlsZXJDb21waWxh
dGlvbi5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+cHJvZmlsZXI8L0ZpbHRlcj4NCisgICAgPC9DbENv
bXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccHJvZmlsZXJcUHJvZmlsZXJDb21w
aWxhdGlvbktpbmQuY3BwIj4NCisgICAgICA8RmlsdGVyPnByb2ZpbGVyPC9GaWx0ZXI+DQorICAg
IDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHByb2ZpbGVyXFByb2Zp
bGVyQ29tcGlsZWRCeXRlY29kZS5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+cHJvZmlsZXI8L0ZpbHRl
cj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccHJvZmls
ZXJcUHJvZmlsZXJEYXRhYmFzZS5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+cHJvZmlsZXI8L0ZpbHRl
cj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccHJvZmls
ZXJcUHJvZmlsZXJPcmlnaW4uY3BwIj4NCisgICAgICA8RmlsdGVyPnByb2ZpbGVyPC9GaWx0ZXI+
DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHByb2ZpbGVy
XFByb2ZpbGVyT3JpZ2luU3RhY2suY3BwIj4NCisgICAgICA8RmlsdGVyPnByb2ZpbGVyPC9GaWx0
ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHByb2Zp
bGVyXFByb2ZpbGVyT1NSRXhpdC5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+cHJvZmlsZXI8L0ZpbHRl
cj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccHJvZmls
ZXJcUHJvZmlsZXJPU1JFeGl0U2l0ZS5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+cHJvZmlsZXI8L0Zp
bHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccHJv
ZmlsZXJcUHJvZmlsZXJQcm9maWxlZEJ5dGVjb2Rlcy5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+cHJv
ZmlsZXI8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5ccnVudGltZVxBcnJheUJ1ZmZlci5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+cnVudGltZTwv
RmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxy
dW50aW1lXEFycmF5QnVmZmVyVmlldy5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmls
dGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50
aW1lXEFyZ0xpc3QuY3BwIj4NCisgICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4NCisgICAg
PC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxBcmd1bWVu
dHMuY3BwIj4NCisgICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBp
bGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxBcnJheUNvbnN0cnVjdG9y
LmNwcCI+DQorICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxl
Pg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcQXJyYXlQcm90b3R5cGUuY3Bw
Ij4NCisgICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQor
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxCb29sZWFuQ29uc3RydWN0b3IuY3Bw
Ij4NCisgICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQor
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxCb29sZWFuT2JqZWN0LmNwcCI+DQor
ICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcQm9vbGVhblByb3RvdHlwZS5jcHAiPg0KKyAg
ICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXENhbGxEYXRhLmNwcCI+DQorICAgICAgPEZpbHRl
cj5ydW50aW1lPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXHJ1bnRpbWVcQ29kZUNhY2hlLmNwcCI+DQorICAgICAgPEZpbHRlcj5ydW50aW1l
PC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XHJ1bnRpbWVcQ29kZVNwZWNpYWxpemF0aW9uS2luZC5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+cnVu
dGltZTwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxydW50aW1lXENvbW1vbklkZW50aWZpZXJzLmNwcCI+DQorICAgICAgPEZpbHRlcj5ydW50
aW1lPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXHJ1bnRpbWVcQ29tcGxldGlvbi5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmls
dGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50
aW1lXENvbnNvbGVDbGllbnQuY3BwIj4NCisgICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4N
CisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxD
b25zb2xlUHJvdG90eXBlLmNwcCI+DQorICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+DQor
ICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcQ29u
c3RydWN0RGF0YS5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPg0KKyAgICA8
L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEN1c3RvbUdl
dHRlclNldHRlci5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPg0KKyAgICA8
L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXERhdGVDb25z
dHJ1Y3Rvci5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPg0KKyAgICA8L0Ns
Q29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXERhdGVDb252ZXJz
aW9uLmNwcCI+DQorICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21w
aWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRGF0ZUluc3RhbmNlLmNw
cCI+DQorICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0K
KyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRGF0ZVByb3RvdHlwZS5jcHAiPg0K
KyAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEVycm9yLmNwcCI+DQorICAgICAgPEZpbHRl
cj5ydW50aW1lPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXHJ1bnRpbWVcRXJyb3JDb25zdHJ1Y3Rvci5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+
cnVudGltZTwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxydW50aW1lXEVycm9ySGFuZGxpbmdTY29wZS5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+
cnVudGltZTwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxydW50aW1lXEVycm9ySW5zdGFuY2UuY3BwIj4NCisgICAgICA8RmlsdGVyPnJ1bnRp
bWU8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5ccnVudGltZVxFcnJvclByb3RvdHlwZS5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+cnVudGltZTwv
RmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxy
dW50aW1lXEV4Y2VwdGlvbkhlbHBlcnMuY3BwIj4NCisgICAgICA8RmlsdGVyPnJ1bnRpbWU8L0Zp
bHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVu
dGltZVxFeGVjdXRhYmxlLmNwcCI+DQorICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+DQor
ICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRnVu
Y3Rpb25Db25zdHJ1Y3Rvci5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPg0K
KyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEZ1
bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZS5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmls
dGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50
aW1lXEZ1bmN0aW9uUHJvdG90eXBlLmNwcCI+DQorICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0
ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRp
bWVcR2V0dGVyU2V0dGVyLmNwcCI+DQorICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+DQor
ICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSGln
aEZpZGVsaXR5TG9nLmNwcCI+DQorICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+DQorICAg
IDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSGlnaEZp
ZGVsaXR5VHlwZVByb2ZpbGVyLmNwcCI+DQorICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+
DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVc
SWRlbnRpZmllci5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPg0KKyAgICA8
L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEluZGV4aW5n
VHlwZS5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPg0KKyAgICA8L0NsQ29t
cGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEluaXRpYWxpemVUaHJl
YWRpbmcuY3BwIj4NCisgICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4NCisgICAgPC9DbENv
bXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxJbnRlcm5hbEZ1bmN0
aW9uLmNwcCI+DQorICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21w
aWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNBY3RpdmF0aW9uLmNw
cCI+DQorICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0K
KyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNBUElWYWx1ZVdyYXBwZXIuY3Bw
Ij4NCisgICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQor
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU0FycmF5LmNwcCI+DQorICAgICAg
PEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNCb3VuZEZ1bmN0aW9uLmNwcCI+DQorICAgICAgPEZp
bHRlcj5ydW50aW1lPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNDZWxsLmNwcCI+DQorICAgICAgPEZpbHRlcj5ydW50aW1l
PC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XHJ1bnRpbWVcSlNDb25zb2xlLmNwcCI+DQorICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+
DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVc
SlNEYXRlTWF0aC5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPg0KKyAgICA8
L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTRnVuY3Rp
b24uY3BwIj4NCisgICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBp
bGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU0dsb2JhbE9iamVjdC5j
cHAiPg0KKyAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4N
CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTR2xvYmFsT2JqZWN0RnVuY3Rp
b25zLmNwcCI+DQorICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21w
aWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNMb2NrLmNwcCI+DQor
ICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNNYXAuY3BwIj4NCisgICAgICA8RmlsdGVy
PnJ1bnRpbWU8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5ccnVudGltZVxKU05hbWVTY29wZS5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+cnVudGlt
ZTwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxydW50aW1lXEpTTm90QW5PYmplY3QuY3BwIj4NCisgICAgICA8RmlsdGVyPnJ1bnRpbWU8L0Zp
bHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVu
dGltZVxKU09iamVjdC5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPg0KKyAg
ICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTT05P
YmplY3QuY3BwIj4NCisgICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4NCisgICAgPC9DbENv
bXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3IuY3BwIj4NCisgICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4NCisgICAg
PC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU1Byb3h5
LmNwcCI+DQorICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxl
Pg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNTY29wZS5jcHAiPg0KKyAg
ICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTU2V0LmNwcCI+DQorICAgICAgPEZpbHRlcj5y
dW50aW1lPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXHJ1bnRpbWVcSlNTZXRJdGVyYXRvci5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+cnVudGlt
ZTwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxydW50aW1lXEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuY3BwIj4NCisgICAgICA8RmlsdGVy
PnJ1bnRpbWU8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5ccnVudGltZVxKU1N0cmluZy5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+cnVudGltZTwv
RmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxy
dW50aW1lXEpTU3RyaW5nSm9pbmVyLmNwcCI+DQorICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0
ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRp
bWVcSlNTeW1ib2xUYWJsZU9iamVjdC5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmls
dGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50
aW1lXEpTVmFyaWFibGVPYmplY3QuY3BwIj4NCisgICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRl
cj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGlt
ZVxKU1dpdGhTY29wZS5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPg0KKyAg
ICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTV2Vh
a01hcC5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPg0KKyAgICA8L0NsQ29t
cGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTV3JhcHBlck9iamVj
dC5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGls
ZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXExpdGVyYWxQYXJzZXIuY3Bw
Ij4NCisgICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQor
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxMb29rdXAuY3BwIj4NCisgICAgICA8
RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5ccnVudGltZVxNYXBQcm90b3R5cGUuY3BwIj4NCisgICAgICA8RmlsdGVy
PnJ1bnRpbWU8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5ccnVudGltZVxNYXBEYXRhLmNwcCI+DQorICAgICAgPEZpbHRlcj5ydW50aW1lPC9G
aWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1
bnRpbWVcTWFwQ29uc3RydWN0b3IuY3BwIj4NCisgICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRl
cj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGlt
ZVxNYXRoT2JqZWN0LmNwcCI+DQorICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+DQorICAg
IDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcTmFtZUNv
bnN0cnVjdG9yLmNwcCI+DQorICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+DQorICAgIDwv
Q2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcTmFtZUluc3Rh
bmNlLmNwcCI+DQorICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21w
aWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcTmFtZVByb3RvdHlwZS5j
cHAiPg0KKyAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4N
CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXE5hdGl2ZUVycm9yQ29uc3RydWN0
b3IuY3BwIj4NCisgICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBp
bGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxOYXRpdmVFcnJvclByb3Rv
dHlwZS5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPg0KKyAgICA8L0NsQ29t
cGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXE51bWJlckNvbnN0cnVj
dG9yLmNwcCI+DQorICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21w
aWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcTnVtYmVyT2JqZWN0LmNw
cCI+DQorICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0K
KyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcTnVtYmVyUHJvdG90eXBlLmNwcCI+
DQorICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcT2JqZWN0Q29uc3RydWN0b3IuY3BwIj4N
CisgICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQorICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxPYmplY3RQcm90b3R5cGUuY3BwIj4NCisg
ICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxPcGVyYXRpb25zLmNwcCI+DQorICAgICAgPEZp
bHRlcj5ydW50aW1lPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXHJ1bnRpbWVcT3B0aW9ucy5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+cnVudGlt
ZTwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxydW50aW1lXFByb3BlcnR5RGVzY3JpcHRvci5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+cnVudGlt
ZTwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxydW50aW1lXFByb3BlcnR5TmFtZUFycmF5LmNwcCI+DQorICAgICAgPEZpbHRlcj5ydW50aW1l
PC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XHJ1bnRpbWVcUHJvcGVydHlTbG90LmNwcCI+DQorICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0
ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRp
bWVcUmVnRXhwLmNwcCI+DQorICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+DQorICAgIDwv
Q2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcUmVnRXhwQ2Fj
aGUuY3BwIj4NCisgICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBp
bGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxSZWdFeHBDYWNoZWRSZXN1
bHQuY3BwIj4NCisgICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBp
bGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxSZWdFeHBDb25zdHJ1Y3Rv
ci5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGls
ZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXFJlZ0V4cE1hdGNoZXNBcnJh
eS5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGls
ZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXFJlZ0V4cE9iamVjdC5jcHAi
Pg0KKyAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXFJlZ0V4cFByb3RvdHlwZS5jcHAiPg0K
KyAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXFNhbXBsaW5nQ291bnRlci5jcHAiPg0KKyAg
ICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXFNtYWxsU3RyaW5ncy5jcHAiPg0KKyAgICAgIDxG
aWx0ZXI+cnVudGltZTwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxydW50aW1lXFNldFByb3RvdHlwZS5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+
cnVudGltZTwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxydW50aW1lXFNldEl0ZXJhdG9yUHJvdG90eXBlLmNwcCI+DQorICAgICAgPEZpbHRl
cj5ydW50aW1lPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXHJ1bnRpbWVcU2V0SXRlcmF0b3JDb25zdHJ1Y3Rvci5jcHAiPg0KKyAgICAgIDxG
aWx0ZXI+cnVudGltZTwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxydW50aW1lXFNldENvbnN0cnVjdG9yLmNwcCI+DQorICAgICAgPEZpbHRl
cj5ydW50aW1lPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXHJ1bnRpbWVcU2V0SXRlcmF0b3JDb25zdHJ1Y3Rvci5jcHAiPg0KKyAgICAgIDxG
aWx0ZXI+cnVudGltZTwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxydW50aW1lXFNwYXJzZUFycmF5VmFsdWVNYXAuY3BwIj4NCisgICAgICA8
RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5ccnVudGltZVxTdHJpY3RFdmFsQWN0aXZhdGlvbi5jcHAiPg0KKyAgICAg
IDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXFN0cmluZ0NvbnN0cnVjdG9yLmNwcCI+DQorICAgICAg
PEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcU3RyaW5nT2JqZWN0LmNwcCI+DQorICAgICAgPEZpbHRl
cj5ydW50aW1lPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXHJ1bnRpbWVcU3RyaW5nUHJvdG90eXBlLmNwcCI+DQorICAgICAgPEZpbHRlcj5y
dW50aW1lPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXHJ1bnRpbWVcU3RyaW5nUmVjdXJzaW9uQ2hlY2tlci5jcHAiPg0KKyAgICAgIDxGaWx0
ZXI+cnVudGltZTwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxydW50aW1lXFN0cnVjdHVyZS5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+cnVudGlt
ZTwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxydW50aW1lXFN0cnVjdHVyZUNoYWluLmNwcCI+DQorICAgICAgPEZpbHRlcj5ydW50aW1lPC9G
aWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1
bnRpbWVcU3RydWN0dXJlSURUYWJsZS5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmls
dGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50
aW1lXFN5bWJvbFRhYmxlLmNwcCI+DQorICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+DQor
ICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcVHlw
ZUxvY2F0aW9uQ2FjaGUuY3BwIj4NCisgICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4NCisg
ICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxUeXBl
U2V0LmNwcCI+DQorICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21w
aWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcV2F0Y2hkb2cuY3BwIj4N
CisgICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQorICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxXYXRjaGRvZ05vbmUuY3BwIj4NCisgICAg
ICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5cdG9vbHNcQ29kZVByb2ZpbGUuY3BwIj4NCisgICAgICA8RmlsdGVy
PnRvb2xzPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXHRvb2xzXENvZGVQcm9maWxpbmcuY3BwIj4NCisgICAgICA8RmlsdGVyPnRvb2xzPC9G
aWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHlh
cnJcUmVndWxhckV4cHJlc3Npb24uY3BwIj4NCisgICAgICA8RmlsdGVyPnlhcnI8L0ZpbHRlcj4N
CisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ceWFyclxZYXJy
Q2Fub25pY2FsaXplVUNTMi5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+eWFycjwvRmlsdGVyPg0KKyAg
ICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlx5YXJyXFlhcnJJbnRl
cnByZXRlci5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+eWFycjwvRmlsdGVyPg0KKyAgICA8L0NsQ29t
cGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlx5YXJyXFlhcnJKSVQuY3BwIj4NCisg
ICAgICA8RmlsdGVyPnlhcnI8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5ceWFyclxZYXJyUGF0dGVybi5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+
eWFycjwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlx5YXJyXFlhcnJTeW50YXhDaGVja2VyLmNwcCI+DQorICAgICAgPEZpbHRlcj55YXJyPC9G
aWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1
bnRpbWVcUHJvdG90eXBlTWFwLmNwcCI+DQorICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+
DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVc
SlNDSlNWYWx1ZS5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPg0KKyAgICA8
L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXFN0cnVjdHVy
ZVJhcmVEYXRhLmNwcCI+DQorICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+DQorICAgIDwv
Q2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBhcnNlclxTb3VyY2VQcm92
aWRlci5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+cGFyc2VyPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21w
aWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcUHJvcGVydHlUYWJsZS5j
cHAiPg0KKyAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4N
CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXFZNLmNwcCI+DQorICAgICAgPEZp
bHRlcj5ydW50aW1lPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXHJ1bnRpbWVcVk1FbnRyeVNjb3BlLmNwcCI+DQorICAgICAgPEZpbHRlcj5y
dW50aW1lPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXHBhcnNlclxTb3VyY2VDb2RlLmNwcCI+DQorICAgICAgPEZpbHRlcj5wYXJzZXI8L0Zp
bHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVu
dGltZVxJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmNwcCI+DQorICAgICAgPEZpbHRlcj5ydW50aW1l
PC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XHJ1bnRpbWVcQ29tbW9uU2xvd1BhdGhzRXhjZXB0aW9ucy5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+
cnVudGltZTwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxydW50aW1lXENvbW1vblNsb3dQYXRocy5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+cnVu
dGltZTwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxBUElcSlNDVGVzdFJ1bm5lclV0aWxzLmNwcCI+DQorICAgICAgPEZpbHRlcj5BUEk8L0Zp
bHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVu
dGltZVxKU0FycmF5QnVmZmVyLmNwcCI+DQorICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+
DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVc
SlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmNwcCI+DQorICAgICAgPEZpbHRlcj5ydW50aW1lPC9G
aWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1
bnRpbWVcSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+cnVudGlt
ZTwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxydW50aW1lXEpTQXJyYXlCdWZmZXJWaWV3LmNwcCI+DQorICAgICAgPEZpbHRlcj5ydW50aW1l
PC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XHJ1bnRpbWVcVHlwZWRBcnJheUNvbnRyb2xsZXIuY3BwIj4NCisgICAgICA8RmlsdGVyPnJ1bnRp
bWU8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5ccnVudGltZVxUeXBlZEFycmF5VHlwZS5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+cnVudGltZTwv
RmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxy
dW50aW1lXEpTVHlwZWRBcnJheUNvbnN0cnVjdG9ycy5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+cnVu
dGltZTwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxydW50aW1lXEpTVHlwZWRBcnJheVByb3RvdHlwZXMuY3BwIj4NCisgICAgICA8RmlsdGVy
PnJ1bnRpbWU8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5ccnVudGltZVxKU1R5cGVkQXJyYXlzLmNwcCI+DQorICAgICAgPEZpbHRlcj5ydW50
aW1lPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXHJ1bnRpbWVcRGF0YVZpZXcuY3BwIj4NCisgICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRl
cj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGlt
ZVxKU0RhdGFWaWV3LmNwcCI+DQorICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+DQorICAg
IDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNEYXRh
Vmlld1Byb3RvdHlwZS5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPg0KKyAg
ICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXFNpbXBs
ZVR5cGVkQXJyYXlDb250cm9sbGVyLmNwcCI+DQorICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0
ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRp
bWVcSlNQcm9taXNlLmNwcCI+DQorICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+DQorICAg
IDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNQcm9t
aXNlQ29uc3RydWN0b3IuY3BwIj4NCisgICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4NCisg
ICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU1By
b21pc2VEZWZlcnJlZC5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPg0KKyAg
ICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTUHJv
bWlzZUZ1bmN0aW9ucy5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPg0KKyAg
ICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTUHJv
bWlzZVJlYWN0aW9uLmNwcCI+DQorICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+DQorICAg
IDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNQcm9t
aXNlUHJvdG90eXBlLmNwcCI+DQorICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+DQorICAg
IDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcV2Vha01h
cENvbnN0cnVjdG9yLmNwcCI+DQorICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+DQorICAg
IDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcV2Vha01h
cERhdGEuY3BwIj4NCisgICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4NCisgICAgPC9DbENv
bXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxXZWFrTWFwUHJvdG90
eXBlLmNwcCI+DQorICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21w
aWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGhlYXBcQ29kZUJsb2NrU2V0LmNwcCI+
DQorICAgICAgPEZpbHRlcj5oZWFwPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGhlYXBcRGVmZXJHQy5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+
aGVhcDwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxieXRlY29kZVxEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwIj4NCisgICAgICA8
RmlsdGVyPmJ5dGVjb2RlPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdDb21waWxhdGlvbktleS5jcHAiPg0KKyAgICAgIDxGaWx0
ZXI+ZGZnPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXGRmZ1xERkdEcml2ZXIuY3BwIj4NCisgICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPg0K
KyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHQ29t
cGlsYXRpb25Nb2RlLmNwcCI+DQorICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4NCisgICAgPC9D
bENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caml0XEpJVFRvREZHRGVmZXJy
ZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcCI+DQorICAgICAgPEZpbHRlcj5qaXQ8L0ZpbHRlcj4N
CisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cbGxpbnRcTExJ
bnRFbnRyeXBvaW50LmNwcCI+DQorICAgICAgPEZpbHRlcj5sbGludDwvRmlsdGVyPg0KKyAgICA8
L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHQWJzdHJhY3RI
ZWFwLmNwcCI+DQorICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+
DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0Fic3RyYWN0VmFsdWUuY3BwIj4N
CisgICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5j
cHAiPg0KKyAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdBcnJheU1vZGUuY3BwIj4NCisgICAgICA8
RmlsdGVyPmRmZzwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxkZmdcREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5jcHAiPg0KKyAgICAgIDxGaWx0
ZXI+ZGZnPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXGRmZ1xERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcCI+DQorICAgICAgPEZp
bHRlcj5kZmc8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5cZGZnXERGR0Jhc2ljQmxvY2suY3BwIj4NCisgICAgICA8RmlsdGVyPmRmZzwvRmls
dGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdc
REZHQmluYXJ5U3dpdGNoLmNwcCI+DQorICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4NCisgICAg
PC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0Jsb2NrSW5z
ZXJ0aW9uU2V0LmNwcCI+DQorICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4NCisgICAgPC9DbENv
bXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0J5dGVDb2RlUGFyc2Vy
LmNwcCI+DQorICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQor
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0NhcGFiaWxpdGllcy5jcHAiPg0KKyAg
ICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdDRkFQaGFzZS5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+ZGZn
PC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XGRmZ1xERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcCI+DQorICAgICAgPEZpbHRlcj5kZmc8
L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
ZGZnXERGR0Nsb2JiZXJpemUuY3BwIj4NCisgICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPg0KKyAg
ICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHQ2xvYmJl
clNldC5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxl
Pg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdDb21tb24uY3BwIj4NCisgICAg
ICA8RmlsdGVyPmRmZzwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxkZmdcREZHQ29tbW9uRGF0YS5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+ZGZn
PC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XGRmZ1xERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+ZGZnPC9G
aWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRm
Z1xERkdDUFNSZXRocmVhZGluZ1BoYXNlLmNwcCI+DQorICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRl
cj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERG
R0NyaXRpY2FsRWRnZUJyZWFraW5nUGhhc2UuY3BwIj4NCisgICAgICA8RmlsdGVyPmRmZzwvRmls
dGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdc
REZHQ1NFUGhhc2UuY3BwIj4NCisgICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPg0KKyAgICA8L0Ns
Q29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHRENFUGhhc2UuY3Bw
Ij4NCisgICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHRGVzaXJlZElkZW50aWZpZXJzLmNwcCI+DQor
ICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0Rlc2lyZWRUcmFuc2l0aW9ucy5jcHAiPg0KKyAgICAg
IDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXGRmZ1xERkdEZXNpcmVkV2F0Y2hwb2ludHMuY3BwIj4NCisgICAgICA8Rmls
dGVyPmRmZzwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxkZmdcREZHRGVzaXJlZFdlYWtSZWZlcmVuY2VzLmNwcCI+DQorICAgICAgPEZpbHRl
cj5kZmc8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cZGZnXERGR0Rlc2lyZWRXcml0ZUJhcnJpZXJzLmNwcCI+DQorICAgICAgPEZpbHRlcj5k
Zmc8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5cZGZnXERGR0Rpc2Fzc2VtYmxlci5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+
DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdE
b21pbmF0b3JzLmNwcCI+DQorICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4NCisgICAgPC9DbENv
bXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0VkZ2UuY3BwIj4NCisg
ICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHRmFpbGVkRmluYWxpemVyLmNwcCI+DQorICAgICAgPEZp
bHRlcj5kZmc8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5cZGZnXERGR0ZpbmFsaXplci5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0
ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xE
RkdGaXh1cFBoYXNlLmNwcCI+DQorICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4NCisgICAgPC9D
bENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0ZsdXNoZWRBdC5j
cHAiPg0KKyAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdGbHVzaEZvcm1hdC5jcHAiPg0KKyAgICAg
IDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXGRmZ1xERkdGdW5jdGlvbldoaXRlbGlzdC5jcHAiPg0KKyAgICAgIDxGaWx0
ZXI+ZGZnPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXGRmZ1xERkdHcmFwaC5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+DQor
ICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdJblBs
YWNlQWJzdHJhY3RTdGF0ZS5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+DQorICAg
IDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdJbnZhbGlk
YXRpb25Qb2ludEluamVjdGlvblBoYXNlLmNwcCI+DQorICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRl
cj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERG
R0pJVENvZGUuY3BwIj4NCisgICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPg0KKyAgICA8L0NsQ29t
cGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHSklUQ29tcGlsZXIuY3Bw
Ij4NCisgICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHSklURmluYWxpemVyLmNwcCI+DQorICAgICAg
PEZpbHRlcj5kZmc8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5cZGZnXERGR0p1bXBSZXBsYWNlbWVudC5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+
ZGZnPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXGRmZ1xERkdMYXp5SlNWYWx1ZS5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+
DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdM
SUNNUGhhc2UuY3BwIj4NCisgICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPg0KKyAgICA8L0NsQ29t
cGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHTGl2ZW5lc3NBbmFseXNp
c1BoYXNlLmNwcCI+DQorICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBp
bGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0xvbmdMaXZlZFN0YXRlLmNw
cCI+DQorICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQorICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0xvb3BQcmVIZWFkZXJDcmVhdGlvblBoYXNl
LmNwcCI+DQorICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQor
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR01pbmlmaWVkTm9kZS5jcHAiPg0KKyAg
ICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdOYXR1cmFsTG9vcHMuY3BwIj4NCisgICAgICA8RmlsdGVy
PmRmZzwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxkZmdcREZHTm9kZS5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+DQorICAg
IDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdOb2RlRmxh
Z3MuY3BwIj4NCisgICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4N
CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHT3BlcmF0aW9ucy5jcHAiPg0KKyAg
ICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcCI+
DQorICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR09TUkVudHJ5LmNwcCI+DQorICAgICAgPEZpbHRl
cj5kZmc8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cZGZnXERGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmNwcCI+DQorICAgICAgPEZp
bHRlcj5kZmc8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5cZGZnXERGR09TUkV4aXQuY3BwIj4NCisgICAgICA8RmlsdGVyPmRmZzwvRmlsdGVy
Pg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZH
T1NSRXhpdEJhc2UuY3BwIj4NCisgICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPg0KKyAgICA8L0Ns
Q29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHT1NSRXhpdENvbXBp
bGVyLmNwcCI+DQorICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+
DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR09TUkV4aXRDb21waWxlcjMyXzY0
LmNwcCI+DQorICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQor
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR09TUkV4aXRDb21waWxlcjY0LmNwcCI+
DQorICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAiPg0K
KyAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdPU1JFeGl0SnVtcFBsYWNlaG9sZGVyLmNwcCI+DQor
ICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR09TUkV4aXRQcmVwYXJhdGlvbi5jcHAiPg0KKyAgICAg
IDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXGRmZ1xERkdQaGFudG9tQ2Fub25pY2FsaXphdGlvblBoYXNlLmNwcCI+DQor
ICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1BoYXNlLmNwcCI+DQorICAgICAgPEZpbHRlcj5kZmc8
L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
ZGZnXERGR1BsYW4uY3BwIj4NCisgICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPg0KKyAgICA8L0Ns
Q29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHUHJlZGljdGlvbklu
amVjdGlvblBoYXNlLmNwcCI+DQorICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4NCisgICAgPC9D
bENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1ByZWRpY3Rpb25Q
cm9wYWdhdGlvblBoYXNlLmNwcCI+DQorICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4NCisgICAg
PC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1NwZWN1bGF0
aXZlSklULmNwcCI+DQorICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBp
bGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1NwZWN1bGF0aXZlSklUMzJf
NjQuY3BwIj4NCisgICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4N
CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAi
Pg0KKyAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwIj4NCisg
ICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHU3RhY2tMYXlvdXRQaGFzZS5jcHAiPg0KKyAgICAgIDxG
aWx0ZXI+ZGZnPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXGRmZ1xERkdTdG9yZUJhcnJpZXJFbGlzaW9uUGhhc2UuY3BwIj4NCisgICAgICA8
RmlsdGVyPmRmZzwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxkZmdcREZHVGh1bmtzLmNwcCI+DQorICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRl
cj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERG
R1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuY3BwIj4NCisgICAgICA8RmlsdGVyPmRmZzwvRmls
dGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdc
REZHVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwIj4NCisgICAgICA8RmlsdGVy
PmRmZzwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxkZmdcREZHVG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5j
cHAiPg0KKyAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmNw
cCI+DQorICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQorICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1VuaWZpY2F0aW9uUGhhc2UuY3BwIj4NCisg
ICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHVXNlS2luZC5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+ZGZn
PC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XGRmZ1xERkdWYWxpZGF0ZS5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+DQorICAg
IDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdWYWx1ZVNv
dXJjZS5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxl
Pg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdWYXJpYWJsZUFjY2Vzc0RhdGFE
dW1wLmNwcCI+DQorICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+
DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1ZhcmlhYmxlRXZlbnQuY3BwIj4N
CisgICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHVmFyaWFibGVFdmVudFN0cmVhbS5jcHAiPg0KKyAg
ICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2UuY3Bw
Ij4NCisgICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHV2F0Y2hwb2ludENvbGxlY3Rpb25QaGFzZS5j
cHAiPg0KKyAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdXb3JrbGlzdC5jcHAiPg0KKyAgICAgIDxG
aWx0ZXI+ZGZnPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXGJ5dGVjb2RlXERGR0V4aXRQcm9maWxlLmNwcCI+DQorICAgICAgPEZpbHRlcj5i
eXRlY29kZTwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxieXRlY29kZVxQcmVjaXNlSnVtcFRhcmdldHMuY3BwIj4NCisgICAgICA8RmlsdGVy
PmJ5dGVjb2RlPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXHJ1bnRpbWVcRHVtcENvbnRleHQuY3BwIj4NCisgICAgICA8RmlsdGVyPnJ1bnRp
bWU8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5ccnVudGltZVxGdW5jdGlvbkV4ZWN1dGFibGVEdW1wLmNwcCI+DQorICAgICAgPEZpbHRlcj5y
dW50aW1lPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXHJ1bnRpbWVcQ29tcGlsYXRpb25SZXN1bHQuY3BwIj4NCisgICAgICA8RmlsdGVyPnJ1
bnRpbWU8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5ccnVudGltZVxBcnJheUl0ZXJhdG9yQ29uc3RydWN0b3IuY3BwIj4NCisgICAgICA8Rmls
dGVyPnJ1bnRpbWU8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5ccnVudGltZVxBcnJheUl0ZXJhdG9yUHJvdG90eXBlLmNwcCI+DQorICAgICAg
PEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcQXJndW1lbnRzSXRlcmF0b3JDb25zdHJ1Y3Rvci5jcHAi
Pg0KKyAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEFyZ3VtZW50c0l0ZXJhdG9yUHJvdG90
eXBlLmNwcCI+DQorICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21w
aWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcTWFwSXRlcmF0b3JDb25z
dHJ1Y3Rvci5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPg0KKyAgICA8L0Ns
Q29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXE1hcEl0ZXJhdG9y
UHJvdG90eXBlLmNwcCI+DQorICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+DQorICAgIDwv
Q2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxBc3NlbWJseUhlbHBl
cnMuY3BwIj4NCisgICAgICA8RmlsdGVyPmppdDwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4N
CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTQXJyYXlJdGVyYXRvci5jcHAi
Pg0KKyAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTQXJndW1lbnRzSXRlcmF0b3IuY3Bw
Ij4NCisgICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQor
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU01hcEl0ZXJhdG9yLmNwcCI+DQor
ICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxSZXBhdGNoLmNwcCI+DQorICAgICAgPEZpbHRlcj5q
aXQ8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5cYnl0ZWNvZGVcSW5saW5lQ2FsbEZyYW1lU2V0LmNwcCI+DQorICAgICAgPEZpbHRlcj5ieXRl
Y29kZTwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxqaXRcSklUT3BlcmF0aW9ucy5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+aml0PC9GaWx0ZXI+
DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxKSVRP
cGVyYXRpb25zTVNWQzY0LmNwcCI+DQorICAgICAgPEZpbHRlcj5qaXQ8L0ZpbHRlcj4NCisgICAg
PC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxUZXN0UnVu
bmVyVXRpbHMuY3BwIj4NCisgICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4NCisgICAgPC9D
bENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcVmFsdWVSZWNv
dmVyeS5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+Ynl0ZWNvZGU8L0ZpbHRlcj4NCisgICAgPC9DbENv
bXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caml0XFJlZ2lzdGVyU2V0LmNwcCI+
DQorICAgICAgPEZpbHRlcj5qaXQ8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5caml0XFRlbXBSZWdpc3RlclNldC5jcHAiPg0KKyAgICAgIDxG
aWx0ZXI+aml0PC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXGppdFxKSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5jcHAiPg0KKyAgICAgIDxGaWx0
ZXI+aml0PC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXGRmZ1xERkdBdmFpbGFiaWxpdHkuY3BwIj4NCisgICAgICA8RmlsdGVyPmRmZzwvRmls
dGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdc
REZHUmVzdXJyZWN0aW9uRm9yVmFsaWRhdGlvblBoYXNlLmNwcCI+DQorICAgICAgPEZpbHRlcj5k
Zmc8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5cYnl0ZWNvZGVcQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmNwcCI+DQorICAgICAg
PEZpbHRlcj5ieXRlY29kZTwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxiaW5kaW5nc1xTY3JpcHRWYWx1ZS5jcHAiPg0KKyAgICAgIDxGaWx0
ZXI+YmluZGluZ3M8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5cYmluZGluZ3NcU2NyaXB0RnVuY3Rpb25DYWxsLmNwcCI+DQorICAgICAgPEZp
bHRlcj5iaW5kaW5nczwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxiaW5kaW5nc1xTY3JpcHRPYmplY3QuY3BwIj4NCisgICAgICA8RmlsdGVy
PmJpbmRpbmdzPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXGRmZ1xERkdTU0FMb3dlcmluZ1BoYXNlLmNwcCI+DQorICAgICAgPEZpbHRlcj5k
Zmc8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5cZGZnXERGR1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuY3BwIj4NCisgICAgICA8RmlsdGVyPmRm
ZzwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxydW50aW1lXEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludC5jcHAiPg0KKyAgICAgIDxG
aWx0ZXI+cnVudGltZTwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIkKENvbmZpZ3VyYXRpb25CdWlsZERpcilcb2JqJChQbGF0Zm9ybUFyY2hpdGVj
dHVyZSlcJChQcm9qZWN0TmFtZSlcRGVyaXZlZFNvdXJjZXNcSW5zcGVjdG9ySlNCYWNrZW5kRGlz
cGF0Y2hlcnMuY3BwIj4NCisgICAgICA8RmlsdGVyPkRlcml2ZWQgU291cmNlczwvRmlsdGVyPg0K
KyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIkKENvbmZpZ3VyYXRp
b25CdWlsZERpcilcb2JqJChQbGF0Zm9ybUFyY2hpdGVjdHVyZSlcJChQcm9qZWN0TmFtZSlcRGVy
aXZlZFNvdXJjZXNcSW5zcGVjdG9ySlNGcm9udGVuZERpc3BhdGNoZXJzLmNwcCI+DQorICAgICAg
PEZpbHRlcj5EZXJpdmVkIFNvdXJjZXM8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQorICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iJChDb25maWd1cmF0aW9uQnVpbGREaXIpXG9iaiQoUGxhdGZv
cm1BcmNoaXRlY3R1cmUpXCQoUHJvamVjdE5hbWUpXERlcml2ZWRTb3VyY2VzXEluc3BlY3RvckpT
VHlwZUJ1aWxkZXJzLmNwcCI+DQorICAgICAgPEZpbHRlcj5EZXJpdmVkIFNvdXJjZXM8L0ZpbHRl
cj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caml0XEFy
aXR5Q2hlY2tGYWlsUmV0dXJuVGh1bmtzLmNwcCI+DQorICAgICAgPEZpbHRlcj5qaXQ8L0ZpbHRl
cj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caml0XFJl
Z2lzdGVyUHJlc2VydmF0aW9uV3JhcHBlckdlbmVyYXRvci5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+
aml0PC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9
IiQoQ29uZmlndXJhdGlvbkJ1aWxkRGlyKVxvYmokKFBsYXRmb3JtQXJjaGl0ZWN0dXJlKVwkKFBy
b2plY3ROYW1lKVxEZXJpdmVkU291cmNlc1xKU0NCdWlsdGlucy5jcHAiPg0KKyAgICAgIDxGaWx0
ZXI+RGVyaXZlZCBTb3VyY2VzPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXGZ0bFxGVExBYnN0cmFjdEhlYXAuY3BwIj4NCisgICAgICA8Rmls
dGVyPmZ0bDwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxmdGxcRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5jcHAiPg0KKyAgICAgIDxGaWx0
ZXI+ZnRsPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXGZ0bFxGVExBdmFpbGFibGVSZWNvdmVyeS5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+ZnRs
PC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XGZ0bFxGVExDYXBhYmlsaXRpZXMuY3BwIj4NCisgICAgICA8RmlsdGVyPmZ0bDwvRmlsdGVyPg0K
KyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxmdGxcRlRMQ29t
bW9uVmFsdWVzLmNwcCI+DQorICAgICAgPEZpbHRlcj5mdGw8L0ZpbHRlcj4NCisgICAgPC9DbENv
bXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZnRsXEZUTENvbXBpbGUuY3BwIj4N
CisgICAgICA8RmlsdGVyPmZ0bDwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxmdGxcRlRMRGF0YVNlY3Rpb24uY3BwIj4NCisgICAgICA8Rmls
dGVyPmZ0bDwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxmdGxcRlRMRFdBUkZEZWJ1Z0xpbmVJbmZvLmNwcCI+DQorICAgICAgPEZpbHRlcj5m
dGw8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5cZnRsXEZUTERXQVJGUmVnaXN0ZXIuY3BwIj4NCisgICAgICA8RmlsdGVyPmZ0bDwvRmlsdGVy
Pg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxmdGxcRlRM
RXhpdEFyZ3VtZW50LmNwcCI+DQorICAgICAgPEZpbHRlcj5mdGw8L0ZpbHRlcj4NCisgICAgPC9D
bENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZnRsXEZUTEV4aXRBcmd1bWVu
dEZvck9wZXJhbmQuY3BwIj4NCisgICAgICA8RmlsdGVyPmZ0bDwvRmlsdGVyPg0KKyAgICA8L0Ns
Q29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxmdGxcRlRMRXhpdFRodW5rR2Vu
ZXJhdG9yLmNwcCI+DQorICAgICAgPEZpbHRlcj5mdGw8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBp
bGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZnRsXEZUTEV4aXRWYWx1ZS5jcHAiPg0K
KyAgICAgIDxGaWx0ZXI+ZnRsPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXGZ0bFxGVExGYWlsLmNwcCI+DQorICAgICAgPEZpbHRlcj5mdGw8
L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
ZnRsXEZUTEZvck9TUkVudHJ5SklUQ29kZS5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+ZnRsPC9GaWx0
ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGZ0bFxG
VExJbmxpbmVDYWNoZVNpemUuY3BwIj4NCisgICAgICA8RmlsdGVyPmZ0bDwvRmlsdGVyPg0KKyAg
ICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxmdGxcRlRMSW50cmlu
c2ljUmVwb3NpdG9yeS5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+ZnRsPC9GaWx0ZXI+DQorICAgIDwv
Q2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGZ0bFxGVExKSVRDb2RlLmNw
cCI+DQorICAgICAgPEZpbHRlcj5mdGw8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQorICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZnRsXEZUTEpJVEZpbmFsaXplci5jcHAiPg0KKyAgICAg
IDxGaWx0ZXI+ZnRsPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXGZ0bFxGVExKU0NhbGwuY3BwIj4NCisgICAgICA8RmlsdGVyPmZ0bDwvRmls
dGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxmdGxc
RlRMTGluay5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+ZnRsPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21w
aWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGZ0bFxGVExMb2NhdGlvbi5jcHAiPg0K
KyAgICAgIDxGaWx0ZXI+ZnRsPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXGZ0bFxGVExMb3dlckRGR1RvTExWTS5jcHAiPg0KKyAgICAgIDxG
aWx0ZXI+ZnRsPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXGZ0bFxGVExPU1JFbnRyeS5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+ZnRsPC9GaWx0
ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGZ0bFxG
VExPU1JFeGl0LmNwcCI+DQorICAgICAgPEZpbHRlcj5mdGw8L0ZpbHRlcj4NCisgICAgPC9DbENv
bXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZnRsXEZUTE9TUkV4aXRDb21waWxl
ci5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+ZnRsPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0K
KyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGZ0bFxGVExPdXRwdXQuY3BwIj4NCisgICAgICA8
RmlsdGVyPmZ0bDwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxmdGxcRlRMUmVjb3ZlcnlPcGNvZGUuY3BwIj4NCisgICAgICA8RmlsdGVyPmZ0
bDwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxmdGxcRlRMUmVnaXN0ZXJBdE9mZnNldC5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+ZnRsPC9GaWx0
ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGZ0bFxG
VExTYXZlUmVzdG9yZS5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+ZnRsPC9GaWx0ZXI+DQorICAgIDwv
Q2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGZ0bFxGVExTbG93UGF0aENh
bGwuY3BwIj4NCisgICAgICA8RmlsdGVyPmZ0bDwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4N
CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxmdGxcRlRMU2xvd1BhdGhDYWxsS2V5LmNwcCI+
DQorICAgICAgPEZpbHRlcj5mdGw8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5cZnRsXEZUTFN0YWNrTWFwcy5jcHAiPg0KKyAgICAgIDxGaWx0
ZXI+ZnRsPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXGZ0bFxGVExTdGF0ZS5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+ZnRsPC9GaWx0ZXI+DQor
ICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGZ0bFxGVExUaHVu
a3MuY3BwIj4NCisgICAgICA8RmlsdGVyPmZ0bDwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4N
CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxmdGxcRlRMVW53aW5kSW5mby5jcHAiPg0KKyAg
ICAgIDxGaWx0ZXI+ZnRsPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXGZ0bFxGVExWYWx1ZUZvcm1hdC5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+
ZnRsPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXGZ0bFxGVExWYWx1ZVJhbmdlLmNwcCI+DQorICAgICAgPEZpbHRlcj5mdGw8L0ZpbHRlcj4N
CisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGlzYXNzZW1i
bGVyXFg4NkRpc2Fzc2VtYmxlci5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+ZGlzYXNzZW1ibGVyPC9G
aWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRp
c2Fzc2VtYmxlclxMTFZNRGlzYXNzZW1ibGVyLmNwcCI+DQorICAgICAgPEZpbHRlcj5kaXNhc3Nl
bWJsZXI8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cbGx2bVxJbml0aWFsaXplTExWTS5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+bGx2bTwvRmls
dGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxsbHZt
XEluaXRpYWxpemVMTFZNV2luLmNwcCI+DQorICAgICAgPEZpbHRlcj5sbHZtPC9GaWx0ZXI+DQor
ICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGxsdm1cTExWTUFQ
SS5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+bGx2bTwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4N
CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxqaXRcQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRp
bmUuY3BwIj4NCisgICAgICA8RmlsdGVyPmppdDwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4N
CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcQ29uc29sZU1lc3NhZ2UuY3Bw
Ij4NCisgICAgICA8RmlsdGVyPmluc3BlY3RvcjwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4N
CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHQXJpdGhNb2RlLmNwcCI+DQorICAg
ICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5cZGZnXERGR0dyYXBoU2FmZXBvaW50LmNwcCI+DQorICAgICAgPEZpbHRl
cj5kZmc8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cZGZnXERGR0ludGVnZXJDaGVja0NvbWJpbmluZ1BoYXNlLmNwcCI+DQorICAgICAgPEZp
bHRlcj5kZmc8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5cZGZnXERGR1NhZmVwb2ludC5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0
ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xE
RkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5jcHAiPg0KKyAgICAgIDxGaWx0
ZXI+ZGZnPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXGRmZ1xERkdUaHJlYWREYXRhLmNwcCI+DQorICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRl
cj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERG
R1ZhcmlhYmxlQWNjZXNzRGF0YS5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+DQor
ICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXEdl
dEJ5SWRWYXJpYW50LmNwcCI+DQorICAgICAgPEZpbHRlcj5ieXRlY29kZTwvRmlsdGVyPg0KKyAg
ICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcSWRl
bnRpZmllcnNGYWN0b3J5LmNwcCI+DQorICAgICAgPEZpbHRlcj5pbnNwZWN0b3I8L0ZpbHRlcj4N
CisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVc
RXhpdGluZ0pJVFR5cGUuY3BwIj4NCisgICAgICA8RmlsdGVyPmJ5dGVjb2RlPC9GaWx0ZXI+DQor
ICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGluc3BlY3RvclxJ
bmplY3RlZFNjcmlwdC5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yPC9GaWx0ZXI+DQor
ICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGluc3BlY3RvclxJ
bmplY3RlZFNjcmlwdEJhc2UuY3BwIj4NCisgICAgICA8RmlsdGVyPmluc3BlY3RvcjwvRmlsdGVy
Pg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxpbnNwZWN0
b3JcSW5qZWN0ZWRTY3JpcHRIb3N0LmNwcCI+DQorICAgICAgPEZpbHRlcj5pbnNwZWN0b3I8L0Zp
bHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caW5z
cGVjdG9yXEluamVjdGVkU2NyaXB0TWFuYWdlci5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+aW5zcGVj
dG9yPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXGluc3BlY3RvclxJbmplY3RlZFNjcmlwdE1vZHVsZS5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+
aW5zcGVjdG9yPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXGluc3BlY3RvclxhZ2VudHNcSW5zcGVjdG9yQ29uc29sZUFnZW50LmNwcCI+DQor
ICAgICAgPEZpbHRlcj5pbnNwZWN0b3I8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQorICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXEphdmFTY3JpcHRDYWxsRnJhbWUuY3Bw
Ij4NCisgICAgICA8RmlsdGVyPmluc3BlY3RvcjwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4N
CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcSlNJbmplY3RlZFNjcmlwdEhv
c3QuY3BwIj4NCisgICAgICA8RmlsdGVyPmluc3BlY3RvcjwvRmlsdGVyPg0KKyAgICA8L0NsQ29t
cGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcSlNJbmplY3RlZFNj
cmlwdEhvc3RQcm90b3R5cGUuY3BwIj4NCisgICAgICA8RmlsdGVyPmluc3BlY3RvcjwvRmlsdGVy
Pg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxpbnNwZWN0
b3JcSlNKYXZhU2NyaXB0Q2FsbEZyYW1lLmNwcCI+DQorICAgICAgPEZpbHRlcj5pbnNwZWN0b3I8
L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
aW5zcGVjdG9yXEpTSmF2YVNjcmlwdENhbGxGcmFtZVByb3RvdHlwZS5jcHAiPg0KKyAgICAgIDxG
aWx0ZXI+aW5zcGVjdG9yPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFBvbHltb3JwaGljR2V0QnlJZExpc3QuY3BwIj4NCisg
ICAgICA8RmlsdGVyPmJ5dGVjb2RlPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHByb2ZpbGVyXFByb2ZpbGVySmV0dGlzb25SZWFzb24uY3Bw
Ij4NCisgICAgICA8RmlsdGVyPnByb2ZpbGVyPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0K
KyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFB1dEJ5SWRWYXJpYW50LmNwcCI+
DQorICAgICAgPEZpbHRlcj5ieXRlY29kZTwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxqaXRcU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmNw
cCI+DQorICAgICAgPEZpbHRlcj5qaXQ8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQorICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXFNjcmlwdEFyZ3VtZW50cy5jcHAiPg0K
KyAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGppdFxSZWcuY3BwIj4NCisgICAgICA8RmlsdGVyPmpp
dDwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxpbnNwZWN0b3JcU2NyaXB0Q2FsbEZyYW1lLmNwcCI+DQorICAgICAgPEZpbHRlcj5pbnNwZWN0
b3I8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5caW5zcGVjdG9yXFNjcmlwdENhbGxTdGFjay5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+aW5zcGVj
dG9yPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXGluc3BlY3RvclxTY3JpcHRDYWxsU3RhY2tGYWN0b3J5LmNwcCI+DQorICAgICAgPEZpbHRl
cj5pbnNwZWN0b3I8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5caW5zcGVjdG9yXFNjcmlwdERlYnVnU2VydmVyLmNwcCI+DQorICAgICAgPEZp
bHRlcj5pbnNwZWN0b3I8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5ccnVudGltZVxNZW1vcnlTdGF0aXN0aWNzLmNwcCI+DQorICAgICAgPEZp
bHRlcj5ydW50aW1lPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXENvbXBsZXhHZXRTdGF0dXMuY3BwIj4NCisgICAgICA8Rmls
dGVyPmJ5dGVjb2RlPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXENvbnN0YW50U3RydWN0dXJlQ2hlY2suY3BwIj4NCisgICAg
ICA8RmlsdGVyPmJ5dGVjb2RlPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdEb2VzR0MuY3BwIj4NCisgICAgICA8RmlsdGVyPmRm
ZzwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxkZmdcREZHRnJvemVuVmFsdWUuY3BwIj4NCisgICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPg0K
KyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHSGVh
cExvY2F0aW9uLmNwcCI+DQorICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4NCisgICAgPC9DbENv
bXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR01heUV4aXQuY3BwIj4N
CisgICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHUGhhbnRvbVJlbW92YWxQaGFzZS5jcHAiPg0KKyAg
ICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQdXJlVmFsdWUuY3BwIj4NCisgICAgICA8RmlsdGVyPmRm
ZzwvRmlsdGVyPg0KKyAgICA8L0NsQ29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxkZmdcREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+ZGZn
PC9GaWx0ZXI+DQorICAgIDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XGRmZ1xERkdUcmFuc2l0aW9uLmNwcCI+DQorICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4NCisg
ICAgPC9DbENvbXBpbGU+DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1ZhbHVl
U3RyZW5ndGguY3BwIj4NCisgICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPg0KKyAgICA8L0NsQ29t
cGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHV2F0Y2hhYmxlU3RydWN0
dXJlV2F0Y2hpbmdQaGFzZS5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+DQorICAg
IDwvQ2xDb21waWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRXhjZXB0
aW9uRnV6ei5jcHAiPg0KKyAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPg0KKyAgICA8L0Ns
Q29tcGlsZT4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxTdHJ1Y3R1cmVT
ZXQuY3BwIj4NCisgICAgICA8RmlsdGVyPmJ5dGVjb2RlPC9GaWx0ZXI+DQorICAgIDwvQ2xDb21w
aWxlPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFRvVGhpc1N0YXR1cy5j
cHAiPg0KKyAgICAgIDxGaWx0ZXI+Ynl0ZWNvZGU8L0ZpbHRlcj4NCisgICAgPC9DbENvbXBpbGU+
DQorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcVmFyaWFibGVXYXRjaHBvaW50
U2V0LmNwcCI+DQorICAgICAgPEZpbHRlcj5ieXRlY29kZTwvRmlsdGVyPg0KKyAgICA8L0NsQ29t
cGlsZT4NCisgIDwvSXRlbUdyb3VwPg0KKyAgPEl0ZW1Hcm91cD4NCisgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxBUElcQVBJQ2FsbGJhY2tGdW5jdGlvbi5oIj4NCisgICAgICA8RmlsdGVyPkFQ
STwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxBUElcQVBJQ2FzdC5oIj4NCisgICAgICA8RmlsdGVyPkFQSTwvRmlsdGVyPg0KKyAgICA8L0Ns
SW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxBUElcSmF2YVNjcmlwdC5oIj4N
CisgICAgICA8RmlsdGVyPkFQSTwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxBUElcSmF2YVNjcmlwdENvcmUuaCI+DQorICAgICAgPEZpbHRl
cj5BUEk8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cQVBJXEpTQmFzZS5oIj4NCisgICAgICA8RmlsdGVyPkFQSTwvRmlsdGVyPg0KKyAgICA8
L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxBUElcSlNCYXNlUHJpdmF0
ZS5oIj4NCisgICAgICA8RmlsdGVyPkFQSTwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxBUElcSlNDYWxsYmFja0NvbnN0cnVjdG9yLmgiPg0K
KyAgICAgIDxGaWx0ZXI+QVBJPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXEFQSVxKU0NhbGxiYWNrRnVuY3Rpb24uaCI+DQorICAgICAgPEZp
bHRlcj5BUEk8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cQVBJXEpTQ2FsbGJhY2tPYmplY3QuaCI+DQorICAgICAgPEZpbHRlcj5BUEk8L0Zp
bHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cQVBJ
XEpTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaCI+DQorICAgICAgPEZpbHRlcj5BUEk8L0ZpbHRl
cj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cQVBJXEpT
Q2xhc3NSZWYuaCI+DQorICAgICAgPEZpbHRlcj5BUEk8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1
ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cQVBJXEpTQ29udGV4dC5oIj4NCisgICAg
ICA8RmlsdGVyPkFQSTwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxBUElcSlNDb250ZXh0SW50ZXJuYWwuaCI+DQorICAgICAgPEZpbHRlcj5B
UEk8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5cQVBJXEpTQ29udGV4dFJlZi5oIj4NCisgICAgICA8RmlsdGVyPkFQSTwvRmlsdGVyPg0KKyAg
ICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxBUElcSlNDb250ZXh0
UmVmUHJpdmF0ZS5oIj4NCisgICAgICA8RmlsdGVyPkFQSTwvRmlsdGVyPg0KKyAgICA8L0NsSW5j
bHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxBUElcSlNFeHBvcnQuaCI+DQorICAg
ICAgPEZpbHRlcj5BUEk8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cQVBJXEpTT2JqZWN0UmVmLmgiPg0KKyAgICAgIDxGaWx0ZXI+QVBJPC9G
aWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXEFQ
SVxKU09iamVjdFJlZlByaXZhdGUuaCI+DQorICAgICAgPEZpbHRlcj5BUEk8L0ZpbHRlcj4NCisg
ICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cQVBJXEpTUmV0YWlu
UHRyLmgiPg0KKyAgICAgIDxGaWx0ZXI+QVBJPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0K
KyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXEFQSVxKU1NjcmlwdFJlZlByaXZhdGUuaCI+DQor
ICAgICAgPEZpbHRlcj5BUEk8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cQVBJXEpTU3RyaW5nUmVmLmgiPg0KKyAgICAgIDxGaWx0ZXI+QVBJ
PC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XEFQSVxKU1N0cmluZ1JlZkJTVFIuaCI+DQorICAgICAgPEZpbHRlcj5BUEk8L0ZpbHRlcj4NCisg
ICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cQVBJXEpTU3RyaW5n
UmVmQ0YuaCI+DQorICAgICAgPEZpbHRlcj5BUEk8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+
DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cQVBJXEpTVmFsdWVJbnRlcm5hbC5oIj4NCisg
ICAgICA8RmlsdGVyPkFQSTwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxBUElcSlNWYWx1ZVJlZi5oIj4NCisgICAgICA8RmlsdGVyPkFQSTwv
RmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxB
UElcSlNXZWFrT2JqZWN0TWFwUmVmSW50ZXJuYWwuaCI+DQorICAgICAgPEZpbHRlcj5BUEk8L0Zp
bHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cQVBJ
XEpTV2Vha09iamVjdE1hcFJlZlByaXZhdGUuaCI+DQorICAgICAgPEZpbHRlcj5BUEk8L0ZpbHRl
cj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cQVBJXEpT
V3JhcHBlck1hcC5oIj4NCisgICAgICA8RmlsdGVyPkFQSTwvRmlsdGVyPg0KKyAgICA8L0NsSW5j
bHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxBUElcT3BhcXVlSlNTdHJpbmcuaCI+
DQorICAgICAgPEZpbHRlcj5BUEk8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cQVBJXFdlYktpdEF2YWlsYWJpbGl0eS5oIj4NCisgICAgICA8
RmlsdGVyPkFQSTwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxhc3NlbWJsZXJcQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oIj4NCisgICAgICA8
RmlsdGVyPmFzc2VtYmxlcjwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxhc3NlbWJsZXJcQXNzZW1ibGVyQnVmZmVyLmgiPg0KKyAgICAgIDxG
aWx0ZXI+YXNzZW1ibGVyPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGFzc2VtYmxlclxDb2RlTG9jYXRpb24uaCI+DQorICAgICAgPEZpbHRl
cj5hc3NlbWJsZXI8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5cYXNzZW1ibGVyXExpbmtCdWZmZXIuaCI+DQorICAgICAgPEZpbHRlcj5hc3Nl
bWJsZXI8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cYXNzZW1ibGVyXE1hY3JvQXNzZW1ibGVyLmgiPg0KKyAgICAgIDxGaWx0ZXI+YXNzZW1i
bGVyPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXGFzc2VtYmxlclxNYWNyb0Fzc2VtYmxlclg4Ni5oIj4NCisgICAgICA8RmlsdGVyPmFzc2Vt
YmxlcjwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxhc3NlbWJsZXJcTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaCI+DQorICAgICAgPEZpbHRl
cj5hc3NlbWJsZXI8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5cYXNzZW1ibGVyXE1hY3JvQXNzZW1ibGVyWDg2XzY0LmgiPg0KKyAgICAgIDxG
aWx0ZXI+YXNzZW1ibGVyPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGFzc2VtYmxlclxNYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbC5o
Ij4NCisgICAgICA8RmlsdGVyPmFzc2VtYmxlcjwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4N
CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxhc3NlbWJsZXJcUmVwYXRjaEJ1ZmZlci5oIj4N
CisgICAgICA8RmlsdGVyPmFzc2VtYmxlcjwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxhc3NlbWJsZXJcWDg2QXNzZW1ibGVyLmgiPg0KKyAg
ICAgIDxGaWx0ZXI+YXNzZW1ibGVyPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ1aWx0aW5zXEJ1aWx0aW5FeGVjdXRhYmxlcy5oIj4NCisg
ICAgICA8RmlsdGVyPmJ1aWx0aW5zPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXEFycmF5QWxsb2NhdGlvblByb2ZpbGUuaCI+
DQorICAgICAgPEZpbHRlcj5ieXRlY29kZTwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxBcnJheVByb2ZpbGUuaCI+DQorICAg
ICAgPEZpbHRlcj5ieXRlY29kZTwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxCeVZhbEluZm8uaCI+DQorICAgICAgPEZpbHRl
cj5ieXRlY29kZTwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxieXRlY29kZVxCeXRlY29kZUJhc2ljQmxvY2suaCI+DQorICAgICAgPEZpbHRl
cj5ieXRlY29kZTwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxieXRlY29kZVxCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCI+DQorICAgICAg
PEZpbHRlcj5ieXRlY29kZTwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxDYWxsTGlua0luZm8uaCI+DQorICAgICAgPEZpbHRl
cj5ieXRlY29kZTwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxieXRlY29kZVxDYWxsTGlua1N0YXR1cy5oIj4NCisgICAgICA8RmlsdGVyPmJ5
dGVjb2RlPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGJ5dGVjb2RlXENhbGxSZXR1cm5PZmZzZXRUb0J5dGVjb2RlT2Zmc2V0LmgiPg0KKyAg
ICAgIDxGaWx0ZXI+Ynl0ZWNvZGU8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcQ29kZUJsb2NrLmgiPg0KKyAgICAgIDxGaWx0
ZXI+Ynl0ZWNvZGU8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5cYnl0ZWNvZGVcQ29kZUJsb2NrSGFzaC5oIj4NCisgICAgICA8RmlsdGVyPmJ5
dGVjb2RlPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGJ5dGVjb2RlXENvZGVCbG9ja1dpdGhKSVRUeXBlLmgiPg0KKyAgICAgIDxGaWx0ZXI+
Ynl0ZWNvZGU8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cYnl0ZWNvZGVcQ29kZU9yaWdpbi5oIj4NCisgICAgICA8RmlsdGVyPmJ5dGVjb2Rl
PC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGJ5dGVjb2RlXENvZGVUeXBlLmgiPg0KKyAgICAgIDxGaWx0ZXI+Ynl0ZWNvZGU8L0ZpbHRlcj4N
CisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVc
Q29tbWVudC5oIj4NCisgICAgICA8RmlsdGVyPmJ5dGVjb2RlPC9GaWx0ZXI+DQorICAgIDwvQ2xJ
bmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXEV2YWxDb2RlQ2Fj
aGUuaCI+DQorICAgICAgPEZpbHRlcj5ieXRlY29kZTwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVk
ZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxFeGVjdXRpb25Db3VudGVy
LmgiPg0KKyAgICAgIDxGaWx0ZXI+Ynl0ZWNvZGU8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+
DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcRXhpdEtpbmQuaCI+DQorICAg
ICAgPEZpbHRlcj5ieXRlY29kZTwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxFeHByZXNzaW9uUmFuZ2VJbmZvLmgiPg0KKyAg
ICAgIDxGaWx0ZXI+Ynl0ZWNvZGU8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcR2V0QnlJZFN0YXR1cy5oIj4NCisgICAgICA8
RmlsdGVyPmJ5dGVjb2RlPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXEhhbmRsZXJJbmZvLmgiPg0KKyAgICAgIDxGaWx0ZXI+
Ynl0ZWNvZGU8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cYnl0ZWNvZGVcSW5zdHJ1Y3Rpb24uaCI+DQorICAgICAgPEZpbHRlcj5ieXRlY29k
ZTwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxieXRlY29kZVxKdW1wVGFibGUuaCI+DQorICAgICAgPEZpbHRlcj5ieXRlY29kZTwvRmlsdGVy
Pg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29k
ZVxMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5oIj4NCisgICAgICA8RmlsdGVyPmJ5dGVjb2RlPC9G
aWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5
dGVjb2RlXExMSW50Q2FsbExpbmtJbmZvLmgiPg0KKyAgICAgIDxGaWx0ZXI+Ynl0ZWNvZGU8L0Zp
bHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0
ZWNvZGVcTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5oIj4NCisgICAgICA8RmlsdGVyPmJ5
dGVjb2RlPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGJ5dGVjb2RlXE9wY29kZS5oIj4NCisgICAgICA8RmlsdGVyPmJ5dGVjb2RlPC9GaWx0
ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVj
b2RlXE9wZXJhbmRzLmgiPg0KKyAgICAgIDxGaWx0ZXI+Ynl0ZWNvZGU8L0ZpbHRlcj4NCisgICAg
PC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcUG9seW1v
cnBoaWNQdXRCeUlkTGlzdC5oIj4NCisgICAgICA8RmlsdGVyPmJ5dGVjb2RlPC9GaWx0ZXI+DQor
ICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFB1
dEJ5SWRTdGF0dXMuaCI+DQorICAgICAgPEZpbHRlcj5ieXRlY29kZTwvRmlsdGVyPg0KKyAgICA8
L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxQdXRLaW5k
LmgiPg0KKyAgICAgIDxGaWx0ZXI+Ynl0ZWNvZGU8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+
DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcUmVkdWNlV2hpdGVzcGFjZS5o
Ij4NCisgICAgICA8RmlsdGVyPmJ5dGVjb2RlPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0K
KyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFNhbXBsaW5nVG9vbC5oIj4NCisg
ICAgICA8RmlsdGVyPmJ5dGVjb2RlPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFNwZWNpYWxQb2ludGVyLmgiPg0KKyAgICAg
IDxGaWx0ZXI+Ynl0ZWNvZGU8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcU3BlY3VsYXRlZFR5cGUuaCI+DQorICAgICAgPEZp
bHRlcj5ieXRlY29kZTwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxieXRlY29kZVxTdHJ1Y3R1cmVTZXQuaCI+DQorICAgICAgPEZpbHRlcj5i
eXRlY29kZTwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxieXRlY29kZVxTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50LmgiPg0KKyAg
ICAgIDxGaWx0ZXI+Ynl0ZWNvZGU8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcU3RydWN0dXJlU3R1YkluZm8uaCI+DQorICAg
ICAgPEZpbHRlcj5ieXRlY29kZTwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxUeXBlTG9jYXRpb24uaCI+DQorICAgICAgPEZp
bHRlcj5ieXRlY29kZTwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxieXRlY29kZVxVbmxpbmtlZENvZGVCbG9jay5oIj4NCisgICAgICA8Rmls
dGVyPmJ5dGVjb2RlPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFVubGlua2VkSW5zdHJ1Y3Rpb25TdHJlYW0uaCI+DQorICAg
ICAgPEZpbHRlcj5ieXRlY29kZTwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxWYWx1ZVByb2ZpbGUuaCI+DQorICAgICAgPEZp
bHRlcj5ieXRlY29kZTwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxieXRlY29kZVxWYWx1ZVJlY292ZXJ5LmgiPg0KKyAgICAgIDxGaWx0ZXI+
Ynl0ZWNvZGU8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cYnl0ZWNvZGVcVmlydHVhbFJlZ2lzdGVyLmgiPg0KKyAgICAgIDxGaWx0ZXI+Ynl0
ZWNvZGU8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cYnl0ZWNvZGVcV2F0Y2hwb2ludC5oIj4NCisgICAgICA8RmlsdGVyPmJ5dGVjb2RlPC9G
aWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5
dGVjb21waWxlclxCeXRlY29kZUdlbmVyYXRvci5oIj4NCisgICAgICA8RmlsdGVyPmJ5dGVjb2Rl
Y29tcGlsZXI8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cYnl0ZWNvbXBpbGVyXExhYmVsLmgiPg0KKyAgICAgIDxGaWx0ZXI+Ynl0ZWNvZGVj
b21waWxlcjwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxieXRlY29tcGlsZXJcTGFiZWxTY29wZS5oIj4NCisgICAgICA8RmlsdGVyPmJ5dGVj
b2RlY29tcGlsZXI8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5cYnl0ZWNvbXBpbGVyXFJlZ2lzdGVySUQuaCI+DQorICAgICAgPEZpbHRlcj5i
eXRlY29kZWNvbXBpbGVyPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGRlYnVnZ2VyXEJyZWFrcG9pbnQuaCI+DQorICAgICAgPEZpbHRlcj5k
ZWJ1Z2dlcjwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxkZWJ1Z2dlclxEZWJ1Z2dlci5oIj4NCisgICAgICA8RmlsdGVyPmRlYnVnZ2VyPC9G
aWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRl
YnVnZ2VyXERlYnVnZ2VyQ2FsbEZyYW1lLmgiPg0KKyAgICAgIDxGaWx0ZXI+ZGVidWdnZXI8L0Zp
bHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGVi
dWdnZXJcRGVidWdnZXJQcmltaXRpdmVzLmgiPg0KKyAgICAgIDxGaWx0ZXI+ZGVidWdnZXI8L0Zp
bHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGVi
dWdnZXJcRGVidWdnZXJTY29wZS5oIj4NCisgICAgICA8RmlsdGVyPmRlYnVnZ2VyPC9GaWx0ZXI+
DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdE
cml2ZXIuaCI+DQorICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+
DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR09TUkVudHJ5LmgiPg0KKyAgICAg
IDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXGRpc2Fzc2VtYmxlclxEaXNhc3NlbWJsZXIuaCI+DQorICAgICAgPEZpbHRl
cj5kaXNhc3NlbWJsZXI8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5caGVhcFxCbG9ja0FsbG9jYXRvci5oIj4NCisgICAgICA8RmlsdGVyPmhl
YXA8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5caGVhcFxDb25zZXJ2YXRpdmVSb290cy5oIj4NCisgICAgICA8RmlsdGVyPmhlYXA8L0ZpbHRl
cj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caGVhcFxD
b3BpZWRBbGxvY2F0b3IuaCI+DQorICAgICAgPEZpbHRlcj5oZWFwPC9GaWx0ZXI+DQorICAgIDwv
Q2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcQ29waWVkQmxvY2su
aCI+DQorICAgICAgPEZpbHRlcj5oZWFwPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcQ29waWVkQmxvY2tJbmxpbmVzLmgiPg0KKyAg
ICAgIDxGaWx0ZXI+aGVhcDwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxoZWFwXENvcGllZFNwYWNlLmgiPg0KKyAgICAgIDxGaWx0ZXI+aGVh
cDwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxoZWFwXENvcGllZFNwYWNlSW5saW5lcy5oIj4NCisgICAgICA8RmlsdGVyPmhlYXA8L0ZpbHRl
cj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caGVhcFxD
b3B5VmlzaXRvci5oIj4NCisgICAgICA8RmlsdGVyPmhlYXA8L0ZpbHRlcj4NCisgICAgPC9DbElu
Y2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caGVhcFxDb3B5VmlzaXRvcklubGlu
ZXMuaCI+DQorICAgICAgPEZpbHRlcj5oZWFwPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0K
KyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcQ29weVdvcmtMaXN0LmgiPg0KKyAgICAg
IDxGaWx0ZXI+aGVhcDwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxoZWFwXENvcHlXcml0ZUJhcnJpZXIuaCI+DQorICAgICAgPEZpbHRlcj5o
ZWFwPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXGhlYXBcRGVmZXJHQy5oIj4NCisgICAgICA8RmlsdGVyPmhlYXA8L0ZpbHRlcj4NCisgICAg
PC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caGVhcFxFZGVuR0NBY3Rp
dml0eUNhbGxiYWNrLmgiPg0KKyAgICAgIDxGaWx0ZXI+aGVhcDwvRmlsdGVyPg0KKyAgICA8L0Ns
SW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXEZ1bGxHQ0FjdGl2aXR5
Q2FsbGJhY2suaCI+DQorICAgICAgPEZpbHRlcj5oZWFwPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNs
dWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcR0NBY3Rpdml0eUNhbGxiYWNr
LmgiPg0KKyAgICAgIDxGaWx0ZXI+aGVhcDwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXEdDTG9nZ2luZy5oIj4NCisgICAgICA8Rmls
dGVyPmhlYXA8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5caGVhcFxHQ1NlZ21lbnRlZEFycmF5LmgiPg0KKyAgICAgIDxGaWx0ZXI+aGVhcDwv
RmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxo
ZWFwXEdDU2VnbWVudGVkQXJyYXlJbmxpbmVzLmgiPg0KKyAgICAgIDxGaWx0ZXI+aGVhcDwvRmls
dGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFw
XEdDQXNzZXJ0aW9ucy5oIj4NCisgICAgICA8RmlsdGVyPmhlYXA8L0ZpbHRlcj4NCisgICAgPC9D
bEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caGVhcFxHQ1RocmVhZC5oIj4N
CisgICAgICA8RmlsdGVyPmhlYXA8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5caGVhcFxHQ1RocmVhZFNoYXJlZERhdGEuaCI+DQorICAgICAg
PEZpbHRlcj5oZWFwPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXGhlYXBcSGFuZGxlLmgiPg0KKyAgICAgIDxGaWx0ZXI+aGVhcDwvRmlsdGVy
Pg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXEhh
bmRsZUJsb2NrLmgiPg0KKyAgICAgIDxGaWx0ZXI+aGVhcDwvRmlsdGVyPg0KKyAgICA8L0NsSW5j
bHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXEhhbmRsZUJsb2NrSW5saW5l
cy5oIj4NCisgICAgICA8RmlsdGVyPmhlYXA8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQor
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caGVhcFxIYW5kbGVTZXQuaCI+DQorICAgICAgPEZp
bHRlcj5oZWFwPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXGhlYXBcSGFuZGxlU3RhY2suaCI+DQorICAgICAgPEZpbHRlcj5oZWFwPC9GaWx0
ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBc
SGFuZGxlVHlwZXMuaCI+DQorICAgICAgPEZpbHRlcj5oZWFwPC9GaWx0ZXI+DQorICAgIDwvQ2xJ
bmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcSGVhcC5oIj4NCisgICAg
ICA8RmlsdGVyPmhlYXA8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5caGVhcFxIZWFwQmxvY2suaCI+DQorICAgICAgPEZpbHRlcj5oZWFwPC9G
aWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhl
YXBcSGVhcElubGluZXMuaCI+DQorICAgICAgPEZpbHRlcj5oZWFwPC9GaWx0ZXI+DQorICAgIDwv
Q2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcSGVhcE9wZXJhdGlv
bi5oIj4NCisgICAgICA8RmlsdGVyPmhlYXA8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQor
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caGVhcFxIZWFwUm9vdFZpc2l0b3IuaCI+DQorICAg
ICAgPEZpbHRlcj5oZWFwPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGhlYXBcSGVhcFN0YXRpc3RpY3MuaCI+DQorICAgICAgPEZpbHRlcj5o
ZWFwPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXGhlYXBcSGVhcFRpbWVyLmgiPg0KKyAgICAgIDxGaWx0ZXI+aGVhcDwvRmlsdGVyPg0KKyAg
ICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXEluY3JlbWVu
dGFsU3dlZXBlci5oIj4NCisgICAgICA8RmlsdGVyPmhlYXA8L0ZpbHRlcj4NCisgICAgPC9DbElu
Y2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caGVhcFxKSVRTdHViUm91dGluZVNl
dC5oIj4NCisgICAgICA8RmlsdGVyPmhlYXA8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQor
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caGVhcFxMaXN0YWJsZUhhbmRsZXIuaCI+DQorICAg
ICAgPEZpbHRlcj5oZWFwPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGhlYXBcTG9jYWwuaCI+DQorICAgICAgPEZpbHRlcj5oZWFwPC9GaWx0
ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBc
TG9jYWxTY29wZS5oIj4NCisgICAgICA8RmlsdGVyPmhlYXA8L0ZpbHRlcj4NCisgICAgPC9DbElu
Y2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caGVhcFxNYWNoaW5lU3RhY2tNYXJr
ZXIuaCI+DQorICAgICAgPEZpbHRlcj5oZWFwPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0K
KyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcTWFya2VkQWxsb2NhdG9yLmgiPg0KKyAg
ICAgIDxGaWx0ZXI+aGVhcDwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxoZWFwXE1hcmtlZEJsb2NrLmgiPg0KKyAgICAgIDxGaWx0ZXI+aGVh
cDwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxoZWFwXE1hcmtlZEJsb2NrU2V0LmgiPg0KKyAgICAgIDxGaWx0ZXI+aGVhcDwvRmlsdGVyPg0K
KyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXE1hcmtl
ZFNwYWNlLmgiPg0KKyAgICAgIDxGaWx0ZXI+aGVhcDwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVk
ZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXE1hcmtTdGFjay5oIj4NCisgICAg
ICA8RmlsdGVyPmhlYXA8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5caGVhcFxSZWN1cnNpdmVBbGxvY2F0aW9uU2NvcGUuaCI+DQorICAgICAg
PEZpbHRlcj5oZWFwPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXGhlYXBcUmVnaW9uLmgiPg0KKyAgICAgIDxGaWx0ZXI+aGVhcDwvRmlsdGVy
Pg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXFNs
b3RWaXNpdG9yLmgiPg0KKyAgICAgIDxGaWx0ZXI+aGVhcDwvRmlsdGVyPg0KKyAgICA8L0NsSW5j
bHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXFNsb3RWaXNpdG9ySW5saW5l
cy5oIj4NCisgICAgICA8RmlsdGVyPmhlYXA8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQor
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caGVhcFxTdHJvbmcuaCI+DQorICAgICAgPEZpbHRl
cj5oZWFwPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGhlYXBcU3Ryb25nSW5saW5lcy5oIj4NCisgICAgICA8RmlsdGVyPmhlYXA8L0ZpbHRl
cj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caGVhcFxT
dXBlclJlZ2lvbi5oIj4NCisgICAgICA8RmlsdGVyPmhlYXA8L0ZpbHRlcj4NCisgICAgPC9DbElu
Y2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caGVhcFxUaW55Qmxvb21GaWx0ZXIu
aCI+DQorICAgICAgPEZpbHRlcj5oZWFwPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcVW5jb25kaXRpb25hbEZpbmFsaXplci5oIj4N
CisgICAgICA8RmlsdGVyPmhlYXA8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5caGVhcFxXZWFrLmgiPg0KKyAgICAgIDxGaWx0ZXI+aGVhcDwv
RmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxo
ZWFwXFdlYWtCbG9jay5oIj4NCisgICAgICA8RmlsdGVyPmhlYXA8L0ZpbHRlcj4NCisgICAgPC9D
bEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caGVhcFxXZWFrSGFuZGxlT3du
ZXIuaCI+DQorICAgICAgPEZpbHRlcj5oZWFwPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0K
KyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGhlYXBcV2Vha0ltcGwuaCI+DQorICAgICAgPEZp
bHRlcj5oZWFwPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXGhlYXBcV2Vha1JlZmVyZW5jZUhhcnZlc3Rlci5oIj4NCisgICAgICA8RmlsdGVy
PmhlYXA8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5caGVhcFxXZWFrU2V0LmgiPg0KKyAgICAgIDxGaWx0ZXI+aGVhcDwvRmlsdGVyPg0KKyAg
ICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXFdlYWtTZXRJ
bmxpbmVzLmgiPg0KKyAgICAgIDxGaWx0ZXI+aGVhcDwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVk
ZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxoZWFwXFdyaXRlQmFycmllckJ1ZmZlci5o
Ij4NCisgICAgICA8RmlsdGVyPmhlYXA8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caGVhcFxXcml0ZUJhcnJpZXJTdXBwb3J0LmgiPg0KKyAg
ICAgIDxGaWx0ZXI+aGVhcDwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcQ29udGVudFNlYXJjaFV0aWxpdGllcy5oIj4NCisg
ICAgICA8RmlsdGVyPmluc3BlY3RvcjwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcSW5zcGVjdG9yQWdlbnRCYXNlLmgiPg0K
KyAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGluc3BlY3RvclxJbnNwZWN0b3JBZ2VudFJlZ2lzdHJ5
LmgiPg0KKyAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRl
Pg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGluc3BlY3RvclxJbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlci5oIj4NCisgICAgICA8RmlsdGVyPmluc3BlY3RvcjwvRmlsdGVyPg0KKyAgICA8
L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcSW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsLmgiPg0KKyAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yPC9GaWx0ZXI+
DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGluc3BlY3Rv
clxJbnNwZWN0b3JUeXBlQnVpbGRlci5oIj4NCisgICAgICA8RmlsdGVyPmluc3BlY3RvcjwvRmls
dGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxpbnNw
ZWN0b3JcSW5zcGVjdG9yVmFsdWVzLmgiPg0KKyAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yPC9GaWx0
ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGluc3Bl
Y3RvclxhZ2VudHNcSW5zcGVjdG9yQWdlbnQuaCI+DQorICAgICAgPEZpbHRlcj5pbnNwZWN0b3I8
L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
aW5zcGVjdG9yXGFnZW50c1xJbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmgiPg0KKyAgICAgIDxGaWx0
ZXI+aW5zcGVjdG9yPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXGluc3BlY3RvclxhZ2VudHNcSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5oIj4N
CisgICAgICA8RmlsdGVyPmluc3BlY3RvcjwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcYWdlbnRzXEluc3BlY3RvclJ1bnRp
bWVBZ2VudC5oIj4NCisgICAgICA8RmlsdGVyPmluc3BlY3RvcjwvRmlsdGVyPg0KKyAgICA8L0Ns
SW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxpbnRlcnByZXRlclxBYnN0cmFj
dFBDLmgiPg0KKyAgICAgIDxGaWx0ZXI+aW50ZXJwcmV0ZXI8L0ZpbHRlcj4NCisgICAgPC9DbElu
Y2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caW50ZXJwcmV0ZXJcQ2FjaGVkQ2Fs
bC5oIj4NCisgICAgICA8RmlsdGVyPmludGVycHJldGVyPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNs
dWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGludGVycHJldGVyXENhbGxGcmFtZS5o
Ij4NCisgICAgICA8RmlsdGVyPmludGVycHJldGVyPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRl
Pg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGludGVycHJldGVyXENhbGxGcmFtZUlubGlu
ZXMuaCI+DQorICAgICAgPEZpbHRlcj5pbnRlcnByZXRlcjwvRmlsdGVyPg0KKyAgICA8L0NsSW5j
bHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxpbnRlcnByZXRlclxDYWxsRnJhbWVD
bG9zdXJlLmgiPg0KKyAgICAgIDxGaWx0ZXI+aW50ZXJwcmV0ZXI8L0ZpbHRlcj4NCisgICAgPC9D
bEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caW50ZXJwcmV0ZXJcSW50ZXJw
cmV0ZXIuaCI+DQorICAgICAgPEZpbHRlcj5pbnRlcnByZXRlcjwvRmlsdGVyPg0KKyAgICA8L0Ns
SW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxpbnRlcnByZXRlclxKU1N0YWNr
LmgiPg0KKyAgICAgIDxGaWx0ZXI+aW50ZXJwcmV0ZXI8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1
ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caW50ZXJwcmV0ZXJcSlNTdGFja0lubGlu
ZXMuaCI+DQorICAgICAgPEZpbHRlcj5pbnRlcnByZXRlcjwvRmlsdGVyPg0KKyAgICA8L0NsSW5j
bHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxpbnRlcnByZXRlclxQcm90b0NhbGxG
cmFtZS5oIj4NCisgICAgICA8RmlsdGVyPmludGVycHJldGVyPC9GaWx0ZXI+DQorICAgIDwvQ2xJ
bmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGludGVycHJldGVyXFJlZ2lzdGVy
LmgiPg0KKyAgICAgIDxGaWx0ZXI+aW50ZXJwcmV0ZXI8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1
ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caW50ZXJwcmV0ZXJcU3RhY2tWaXNpdG9y
LmgiPg0KKyAgICAgIDxGaWx0ZXI+aW50ZXJwcmV0ZXI8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1
ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caW50ZXJwcmV0ZXJcVk1JbnNwZWN0b3Iu
aCI+DQorICAgICAgPEZpbHRlcj5pbnRlcnByZXRlcjwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVk
ZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcQ2xvc3VyZUNhbGxTdHViUm91dGlu
ZS5oIj4NCisgICAgICA8RmlsdGVyPmppdDwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcQ29tcGFjdEpJVENvZGVNYXAuaCI+DQorICAg
ICAgPEZpbHRlcj5qaXQ8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5caml0XEV4ZWN1dGFibGVBbGxvY2F0b3IuaCI+DQorICAgICAgPEZpbHRl
cj5qaXQ8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5caml0XEdDQXdhcmVKSVRTdHViUm91dGluZS5oIj4NCisgICAgICA8RmlsdGVyPmppdDwv
RmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxq
aXRcSG9zdENhbGxSZXR1cm5WYWx1ZS5oIj4NCisgICAgICA8RmlsdGVyPmppdDwvRmlsdGVyPg0K
KyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcSklULmgi
Pg0KKyAgICAgIDxGaWx0ZXI+aml0PC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxKSVRDb2RlLmgiPg0KKyAgICAgIDxGaWx0ZXI+aml0
PC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGppdFxKSVRDb21waWxhdGlvbkVmZm9ydC5oIj4NCisgICAgICA8RmlsdGVyPmppdDwvRmlsdGVy
Pg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcSklU
RGlzYXNzZW1ibGVyLmgiPg0KKyAgICAgIDxGaWx0ZXI+aml0PC9GaWx0ZXI+DQorICAgIDwvQ2xJ
bmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxKSVRFeGNlcHRpb25zLmgi
Pg0KKyAgICAgIDxGaWx0ZXI+aml0PC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxKSVRJbmxpbmVzLmgiPg0KKyAgICAgIDxGaWx0ZXI+
aml0PC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXGppdFxKSVRTdHViUm91dGluZS5oIj4NCisgICAgICA8RmlsdGVyPmppdDwvRmlsdGVyPg0K
KyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcSklUU3R1
YnMuaCI+DQorICAgICAgPEZpbHRlcj5qaXQ8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQor
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caml0XEpJVFN0dWJzWDg2LmgiPg0KKyAgICAgIDxG
aWx0ZXI+aml0PC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXGppdFxKSVRTdHVic1g4NkNvbW1vbi5oIj4NCisgICAgICA8RmlsdGVyPmppdDwv
RmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxq
aXRcSklUU3R1YnNYODZfNjQuaCI+DQorICAgICAgPEZpbHRlcj5qaXQ8L0ZpbHRlcj4NCisgICAg
PC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caml0XEpJVFRodW5rcy5o
Ij4NCisgICAgICA8RmlsdGVyPmppdDwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcSklUV3JpdGVCYXJyaWVyLmgiPg0KKyAgICAgIDxG
aWx0ZXI+aml0PC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXGppdFxKU0ludGVyZmFjZUpJVC5oIj4NCisgICAgICA8RmlsdGVyPmppdDwvRmls
dGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRc
U3BlY2lhbGl6ZWRUaHVua0pJVC5oIj4NCisgICAgICA8RmlsdGVyPmppdDwvRmlsdGVyPg0KKyAg
ICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcVGh1bmtHZW5l
cmF0b3IuaCI+DQorICAgICAgPEZpbHRlcj5qaXQ8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+
DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caml0XFRodW5rR2VuZXJhdG9ycy5oIj4NCisg
ICAgICA8RmlsdGVyPmppdDwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxqaXRcVW51c2VkUG9pbnRlci5oIj4NCisgICAgICA8RmlsdGVyPmpp
dDwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxsbGludFxMTEludENMb29wLmgiPg0KKyAgICAgIDxGaWx0ZXI+bGxpbnQ8L0ZpbHRlcj4NCisg
ICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cbGxpbnRcTExJbnRD
b21tb24uaCI+DQorICAgICAgPEZpbHRlcj5sbGludDwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVk
ZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxsbGludFxMTEludERhdGEuaCI+DQorICAg
ICAgPEZpbHRlcj5sbGludDwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxsbGludFxMTEludEV4Y2VwdGlvbnMuaCI+DQorICAgICAgPEZpbHRl
cj5sbGludDwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxsbGludFxMTEludE9mZmxpbmVBc21Db25maWcuaCI+DQorICAgICAgPEZpbHRlcj5s
bGludDwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxsbGludFxMTEludE9wY29kZS5oIj4NCisgICAgICA8RmlsdGVyPmxsaW50PC9GaWx0ZXI+
DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGxsaW50XExM
SW50U2xvd1BhdGhzLmgiPg0KKyAgICAgIDxGaWx0ZXI+bGxpbnQ8L0ZpbHRlcj4NCisgICAgPC9D
bEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cbGxpbnRcTExJbnRUaHVua3Mu
aCI+DQorICAgICAgPEZpbHRlcj5sbGludDwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxsbGludFxMb3dMZXZlbEludGVycHJldGVyLmgiPg0K
KyAgICAgIDxGaWx0ZXI+bGxpbnQ8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5ccGFyc2VyXEFTVEJ1aWxkZXIuaCI+DQorICAgICAgPEZpbHRl
cj5wYXJzZXI8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5ccGFyc2VyXExleGVyLmgiPg0KKyAgICAgIDxGaWx0ZXI+cGFyc2VyPC9GaWx0ZXI+
DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBhcnNlclxO
b2RlQ29uc3RydWN0b3JzLmgiPg0KKyAgICAgIDxGaWx0ZXI+cGFyc2VyPC9GaWx0ZXI+DQorICAg
IDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBhcnNlclxOb2RlSW5m
by5oIj4NCisgICAgICA8RmlsdGVyPnBhcnNlcjwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4N
CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwYXJzZXJcTm9kZXMuaCI+DQorICAgICAgPEZp
bHRlcj5wYXJzZXI8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5ccGFyc2VyXFBhcnNlci5oIj4NCisgICAgICA8RmlsdGVyPnBhcnNlcjwvRmls
dGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwYXJz
ZXJcUGFyc2VyQXJlbmEuaCI+DQorICAgICAgPEZpbHRlcj5wYXJzZXI8L0ZpbHRlcj4NCisgICAg
PC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGFyc2VyXFBhcnNlck1v
ZGVzLmgiPg0KKyAgICAgIDxGaWx0ZXI+cGFyc2VyPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRl
Pg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBhcnNlclxQYXJzZXJUb2tlbnMuaCI+DQor
ICAgICAgPEZpbHRlcj5wYXJzZXI8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5ccGFyc2VyXFJlc3VsdFR5cGUuaCI+DQorICAgICAgPEZpbHRl
cj5wYXJzZXI8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5ccGFyc2VyXFNvdXJjZUNvZGUuaCI+DQorICAgICAgPEZpbHRlcj5wYXJzZXI8L0Zp
bHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccGFy
c2VyXFNvdXJjZVByb3ZpZGVyLmgiPg0KKyAgICAgIDxGaWx0ZXI+cGFyc2VyPC9GaWx0ZXI+DQor
ICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBhcnNlclxTb3Vy
Y2VQcm92aWRlckNhY2hlLmgiPg0KKyAgICAgIDxGaWx0ZXI+cGFyc2VyPC9GaWx0ZXI+DQorICAg
IDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHBhcnNlclxTb3VyY2VQ
cm92aWRlckNhY2hlSXRlbS5oIj4NCisgICAgICA8RmlsdGVyPnBhcnNlcjwvRmlsdGVyPg0KKyAg
ICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwYXJzZXJcU3ludGF4
Q2hlY2tlci5oIj4NCisgICAgICA8RmlsdGVyPnBhcnNlcjwvRmlsdGVyPg0KKyAgICA8L0NsSW5j
bHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwcm9maWxlclxDYWxsSWRlbnRpZmll
ci5oIj4NCisgICAgICA8RmlsdGVyPnByb2ZpbGVyPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRl
Pg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHByb2ZpbGVyXExlZ2FjeVByb2ZpbGVyLmgi
Pg0KKyAgICAgIDxGaWx0ZXI+cHJvZmlsZXI8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQor
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccHJvZmlsZXJcUHJvZmlsZS5oIj4NCisgICAgICA8
RmlsdGVyPnByb2ZpbGVyPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXHByb2ZpbGVyXFByb2ZpbGVHZW5lcmF0b3IuaCI+DQorICAgICAgPEZp
bHRlcj5wcm9maWxlcjwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxwcm9maWxlclxQcm9maWxlTm9kZS5oIj4NCisgICAgICA8RmlsdGVyPnBy
b2ZpbGVyPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXHByb2ZpbGVyXFByb2ZpbGVyQnl0ZWNvZGUuaCI+DQorICAgICAgPEZpbHRlcj5wcm9m
aWxlcjwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxwcm9maWxlclxQcm9maWxlckJ5dGVjb2Rlcy5oIj4NCisgICAgICA8RmlsdGVyPnByb2Zp
bGVyPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXHByb2ZpbGVyXFByb2ZpbGVyQnl0ZWNvZGVTZXF1ZW5jZS5oIj4NCisgICAgICA8RmlsdGVy
PnByb2ZpbGVyPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXHByb2ZpbGVyXFByb2ZpbGVyQ29tcGlsYXRpb24uaCI+DQorICAgICAgPEZpbHRl
cj5wcm9maWxlcjwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxwcm9maWxlclxQcm9maWxlckNvbXBpbGF0aW9uS2luZC5oIj4NCisgICAgICA8
RmlsdGVyPnByb2ZpbGVyPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXHByb2ZpbGVyXFByb2ZpbGVyQ29tcGlsZWRCeXRlY29kZS5oIj4NCisg
ICAgICA8RmlsdGVyPnByb2ZpbGVyPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHByb2ZpbGVyXFByb2ZpbGVyRGF0YWJhc2UuaCI+DQorICAg
ICAgPEZpbHRlcj5wcm9maWxlcjwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxwcm9maWxlclxQcm9maWxlckV4ZWN1dGlvbkNvdW50ZXIuaCI+
DQorICAgICAgPEZpbHRlcj5wcm9maWxlcjwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwcm9maWxlclxQcm9maWxlck9yaWdpbi5oIj4NCisg
ICAgICA8RmlsdGVyPnByb2ZpbGVyPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHByb2ZpbGVyXFByb2ZpbGVyT3JpZ2luU3RhY2suaCI+DQor
ICAgICAgPEZpbHRlcj5wcm9maWxlcjwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwcm9maWxlclxQcm9maWxlck9TUkV4aXQuaCI+DQorICAg
ICAgPEZpbHRlcj5wcm9maWxlcjwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxwcm9maWxlclxQcm9maWxlck9TUkV4aXRTaXRlLmgiPg0KKyAg
ICAgIDxGaWx0ZXI+cHJvZmlsZXI8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5ccHJvZmlsZXJcUHJvZmlsZXJQcm9maWxlZEJ5dGVjb2Rlcy5o
Ij4NCisgICAgICA8RmlsdGVyPnByb2ZpbGVyPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0K
KyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcQXJnTGlzdC5oIj4NCisgICAgICA8
RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxBcmd1bWVudHMuaCI+DQorICAgICAgPEZpbHRlcj5ydW50
aW1lPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXHJ1bnRpbWVcQXJyYXlDb25zdHJ1Y3Rvci5oIj4NCisgICAgICA8RmlsdGVyPnJ1bnRpbWU8
L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
cnVudGltZVxBcnJheUNvbnZlbnRpb25zLmgiPg0KKyAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmls
dGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50
aW1lXEFycmF5UHJvdG90eXBlLmgiPg0KKyAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPg0K
KyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEFy
cmF5U3RvcmFnZS5oIj4NCisgICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4NCisgICAgPC9D
bEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxCYXRjaGVkVHJh
bnNpdGlvbk9wdGltaXplci5oIj4NCisgICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4NCisg
ICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxCaWdJ
bnRlZ2VyLmgiPg0KKyAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPg0KKyAgICA8L0NsSW5j
bHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEJvb2xlYW5Db25zdHJ1
Y3Rvci5oIj4NCisgICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1
ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxCb29sZWFuT2JqZWN0Lmgi
Pg0KKyAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEJvb2xlYW5Qcm90b3R5cGUuaCI+DQor
ICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcQnV0dGVyZmx5LmgiPg0KKyAgICAgIDxGaWx0
ZXI+cnVudGltZTwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxydW50aW1lXEJ1dHRlcmZseUlubGluZXMuaCI+DQorICAgICAgPEZpbHRlcj5y
dW50aW1lPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXHJ1bnRpbWVcQ2FsbERhdGEuaCI+DQorICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0
ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRp
bWVcQ2xhc3NJbmZvLmgiPg0KKyAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPg0KKyAgICA8
L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXENvZGVDYWNo
ZS5oIj4NCisgICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+
DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxDb2RlU3BlY2lhbGl6YXRpb25L
aW5kLmgiPg0KKyAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVk
ZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXENvbW1vbklkZW50aWZpZXJz
LmgiPg0KKyAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4N
CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXENvbW1vblNsb3dQYXRocy5oIj4N
CisgICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxDb21wbGV0aW9uLmgiPg0KKyAgICAgIDxG
aWx0ZXI+cnVudGltZTwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxydW50aW1lXENvbnNvbGVDbGllbnQuaCI+DQorICAgICAgPEZpbHRlcj5y
dW50aW1lPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXHJ1bnRpbWVcQ29uc29sZVByb3RvdHlwZS5oIj4NCisgICAgICA8RmlsdGVyPnJ1bnRp
bWU8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5ccnVudGltZVxDb25zb2xlVHlwZXMuaCI+DQorICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0
ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRp
bWVcQ29uc3RydWN0RGF0YS5oIj4NCisgICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4NCisg
ICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxDdXN0
b21HZXR0ZXJTZXR0ZXIuaCI+DQorICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+DQorICAg
IDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRGF0ZUNv
bnN0cnVjdG9yLmgiPg0KKyAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPg0KKyAgICA8L0Ns
SW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXERhdGVDb252ZXJz
aW9uLmgiPg0KKyAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVk
ZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXERhdGVJbnN0YW5jZS5oIj4N
CisgICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxEYXRlSW5zdGFuY2VDYWNoZS5oIj4NCisg
ICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxEYXRlUHJvdG90eXBlLmgiPg0KKyAgICAgIDxG
aWx0ZXI+cnVudGltZTwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxydW50aW1lXEVudW1lcmF0aW9uTW9kZS5oIj4NCisgICAgICA8RmlsdGVy
PnJ1bnRpbWU8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5ccnVudGltZVxFcnJvci5oIj4NCisgICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRl
cj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGlt
ZVxFcnJvckNvbnN0cnVjdG9yLmgiPg0KKyAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPg0K
KyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEVy
cm9ySGFuZGxpbmdTY29wZS5oIj4NCisgICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4NCisg
ICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxFcnJv
ckluc3RhbmNlLmgiPg0KKyAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPg0KKyAgICA8L0Ns
SW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEVycm9yUHJvdG90
eXBlLmgiPg0KKyAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVk
ZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEV4Y2VwdGlvbkhlbHBlcnMu
aCI+DQorICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0K
KyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRXhlY3V0YWJsZS5oIj4NCisgICAg
ICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxGdW5jdGlvbkNvbnN0cnVjdG9yLmgiPg0KKyAgICAg
IDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZS5oIj4NCisg
ICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxGdW5jdGlvblByb3RvdHlwZS5oIj4NCisgICAg
ICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxHZXR0ZXJTZXR0ZXIuaCI+DQorICAgICAgPEZpbHRl
cj5ydW50aW1lPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXHJ1bnRpbWVcSGlnaEZpZGVsaXR5TG9nLmgiPg0KKyAgICAgIDxGaWx0ZXI+cnVu
dGltZTwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxydW50aW1lXEhpZ2hGaWRlbGl0eVR5cGVQcm9maWxlci5oIj4NCisgICAgICA8RmlsdGVy
PnJ1bnRpbWU8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5ccnVudGltZVxJZGVudGlmaWVyLmgiPg0KKyAgICAgIDxGaWx0ZXI+cnVudGltZTwv
RmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxy
dW50aW1lXEluZGV4aW5nSGVhZGVyLmgiPg0KKyAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVy
Pg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1l
XEluZGV4aW5nSGVhZGVySW5saW5lcy5oIj4NCisgICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRl
cj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGlt
ZVxJbmRleGluZ1R5cGUuaCI+DQorICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+DQorICAg
IDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSW5pdGlh
bGl6ZVRocmVhZGluZy5oIj4NCisgICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4NCisgICAg
PC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxJbnRlcm5h
bEZ1bmN0aW9uLmgiPg0KKyAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPg0KKyAgICA8L0Ns
SW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEludHJpbnNpYy5o
Ij4NCisgICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQor
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU0FjdGl2YXRpb24uaCI+DQorICAg
ICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNBUElWYWx1ZVdyYXBwZXIuaCI+DQorICAgICAg
PEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNBcnJheS5oIj4NCisgICAgICA8RmlsdGVyPnJ1bnRp
bWU8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5ccnVudGltZVxKU0JvdW5kRnVuY3Rpb24uaCI+DQorICAgICAgPEZpbHRlcj5ydW50aW1lPC9G
aWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1
bnRpbWVcSlNDZWxsLmgiPg0KKyAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPg0KKyAgICA8
L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTQ29uc29s
ZS5oIj4NCisgICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+
DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU0RhdGVNYXRoLmgiPg0KKyAg
ICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTRGVzdHJ1Y3RpYmxlT2JqZWN0LmgiPg0KKyAg
ICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTRXhwb3J0TWFjcm9zLmgiPg0KKyAgICAgIDxG
aWx0ZXI+cnVudGltZTwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTRnVuY3Rpb24uaCI+DQorICAgICAgPEZpbHRlcj5ydW50
aW1lPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXHJ1bnRpbWVcSlNHbG9iYWxPYmplY3QuaCI+DQorICAgICAgPEZpbHRlcj5ydW50aW1lPC9G
aWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1
bnRpbWVcSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuaCI+DQorICAgICAgPEZpbHRlcj5ydW50aW1l
PC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XHJ1bnRpbWVcSlNMb2NrLmgiPg0KKyAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPg0KKyAg
ICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTTmFt
ZVNjb3BlLmgiPg0KKyAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPg0KKyAgICA8L0NsSW5j
bHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTTm90QW5PYmplY3Qu
aCI+DQorICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0K
KyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNPYmplY3QuaCI+DQorICAgICAg
PEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNPTk9iamVjdC5oIj4NCisgICAgICA8RmlsdGVyPnJ1
bnRpbWU8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5ccnVudGltZVxKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaCI+DQorICAgICAgPEZpbHRl
cj5ydW50aW1lPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXHJ1bnRpbWVcSlNQcm94eS5oIj4NCisgICAgICA8RmlsdGVyPnJ1bnRpbWU8L0Zp
bHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVu
dGltZVxKU1Njb3BlLmgiPg0KKyAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPg0KKyAgICA8
L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTU2VnbWVu
dGVkVmFyaWFibGVPYmplY3QuaCI+DQorICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+DQor
ICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNT
dHJpbmcuaCI+DQorICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNs
dWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNTdHJpbmdCdWlsZGVy
LmgiPg0KKyAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4N
CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTU3RyaW5nSm9pbmVyLmgiPg0K
KyAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTU3ltYm9sVGFibGVPYmplY3QuaCI+DQor
ICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNUeXBlLmgiPg0KKyAgICAgIDxGaWx0ZXI+
cnVudGltZTwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxydW50aW1lXEpTVHlwZUluZm8uaCI+DQorICAgICAgPEZpbHRlcj5ydW50aW1lPC9G
aWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1
bnRpbWVcSlNWYXJpYWJsZU9iamVjdC5oIj4NCisgICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRl
cj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGlt
ZVxKU1dpdGhTY29wZS5oIj4NCisgICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4NCisgICAg
PC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU1dyYXBw
ZXJPYmplY3QuaCI+DQorICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+DQorICAgIDwvQ2xJ
bmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcTGl0ZXJhbFBhcnNl
ci5oIj4NCisgICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+
DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxMb29rdXAuaCI+DQorICAgICAg
PEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcTWF0Y2hSZXN1bHQuaCI+DQorICAgICAgPEZpbHRlcj5y
dW50aW1lPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXHJ1bnRpbWVcTWF0aE9iamVjdC5oIj4NCisgICAgICA8RmlsdGVyPnJ1bnRpbWU8L0Zp
bHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVu
dGltZVxOYW1lQ29uc3RydWN0b3IuaCI+DQorICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+
DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVc
TmFtZUluc3RhbmNlLmgiPg0KKyAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPg0KKyAgICA8
L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXE5hbWVQcm90
b3R5cGUuaCI+DQorICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNs
dWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcTmF0aXZlRXJyb3JDb25z
dHJ1Y3Rvci5oIj4NCisgICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4NCisgICAgPC9DbElu
Y2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxOYXRpdmVFcnJvclBy
b3RvdHlwZS5oIj4NCisgICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4NCisgICAgPC9DbElu
Y2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxOdW1iZXJDb25zdHJ1
Y3Rvci5oIj4NCisgICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1
ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxOdW1iZXJPYmplY3QuaCI+
DQorICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcTnVtYmVyUHJvdG90eXBlLmgiPg0KKyAg
ICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXE51bWVyaWNTdHJpbmdzLmgiPg0KKyAgICAgIDxG
aWx0ZXI+cnVudGltZTwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxydW50aW1lXE9iamVjdENvbnN0cnVjdG9yLmgiPg0KKyAgICAgIDxGaWx0
ZXI+cnVudGltZTwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxydW50aW1lXE9iamVjdFByb3RvdHlwZS5oIj4NCisgICAgICA8RmlsdGVyPnJ1
bnRpbWU8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5ccnVudGltZVxPcGVyYXRpb25zLmgiPg0KKyAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmls
dGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50
aW1lXE9wdGlvbnMuaCI+DQorICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+DQorICAgIDwv
Q2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcUHJpdmF0ZU5h
bWUuaCI+DQorICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRl
Pg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcUHJvcGVydHlEZXNjcmlwdG9y
LmgiPg0KKyAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4N
CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXFByb3BlcnR5TWFwSGFzaFRhYmxl
LmgiPg0KKyAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4N
CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXFByb3BlcnR5TmFtZS5oIj4NCisg
ICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxQcm9wZXJ0eU5hbWVBcnJheS5oIj4NCisgICAg
ICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxQcm9wZXJ0eU9mZnNldC5oIj4NCisgICAgICA8Rmls
dGVyPnJ1bnRpbWU8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5ccnVudGltZVxQcm9wZXJ0eVNsb3QuaCI+DQorICAgICAgPEZpbHRlcj5ydW50
aW1lPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXHJ1bnRpbWVcUHJvcGVydHlTdG9yYWdlLmgiPg0KKyAgICAgIDxGaWx0ZXI+cnVudGltZTwv
RmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxy
dW50aW1lXFByb3RlY3QuaCI+DQorICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+DQorICAg
IDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcUHV0RGly
ZWN0SW5kZXhNb2RlLmgiPg0KKyAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPg0KKyAgICA8
L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXFB1dFByb3Bl
cnR5U2xvdC5oIj4NCisgICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4NCisgICAgPC9DbElu
Y2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxSZWdFeHAuaCI+DQor
ICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcUmVnRXhwQ2FjaGUuaCI+DQorICAgICAgPEZp
bHRlcj5ydW50aW1lPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXHJ1bnRpbWVcUmVnRXhwQ2FjaGVkUmVzdWx0LmgiPg0KKyAgICAgIDxGaWx0
ZXI+cnVudGltZTwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxydW50aW1lXFJlZ0V4cENvbnN0cnVjdG9yLmgiPg0KKyAgICAgIDxGaWx0ZXI+
cnVudGltZTwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxydW50aW1lXFJlZ0V4cEtleS5oIj4NCisgICAgICA8RmlsdGVyPnJ1bnRpbWU8L0Zp
bHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVu
dGltZVxSZWdFeHBNYXRjaGVzQXJyYXkuaCI+DQorICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0
ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRp
bWVcUmVnRXhwT2JqZWN0LmgiPg0KKyAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPg0KKyAg
ICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXFJlZ0V4
cFByb3RvdHlwZS5oIj4NCisgICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4NCisgICAgPC9D
bEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxSZWplY3QuaCI+
DQorICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcU2FtcGxpbmdDb3VudGVyLmgiPg0KKyAg
ICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXFNtYWxsU3RyaW5ncy5oIj4NCisgICAgICA8Rmls
dGVyPnJ1bnRpbWU8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5ccnVudGltZVxTcGFyc2VBcnJheVZhbHVlTWFwLmgiPg0KKyAgICAgIDxGaWx0
ZXI+cnVudGltZTwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxydW50aW1lXFN0cmljdEV2YWxBY3RpdmF0aW9uLmgiPg0KKyAgICAgIDxGaWx0
ZXI+cnVudGltZTwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxydW50aW1lXFN0cmluZ0NvbnN0cnVjdG9yLmgiPg0KKyAgICAgIDxGaWx0ZXI+
cnVudGltZTwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxydW50aW1lXFN0cmluZ09iamVjdC5oIj4NCisgICAgICA8RmlsdGVyPnJ1bnRpbWU8
L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
cnVudGltZVxTdHJpbmdQcm90b3R5cGUuaCI+DQorICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0
ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRp
bWVcU3RyaW5nUmVjdXJzaW9uQ2hlY2tlci5oIj4NCisgICAgICA8RmlsdGVyPnJ1bnRpbWU8L0Zp
bHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVu
dGltZVxTdHJ1Y3R1cmUuaCI+DQorICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+DQorICAg
IDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcU3RydWN0
dXJlQ2hhaW4uaCI+DQorICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+DQorICAgIDwvQ2xJ
bmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcU3RydWN0dXJlSURC
bG9iLmgiPg0KKyAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVk
ZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXFN0cnVjdHVyZUlEVGFibGUu
aCI+DQorICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0K
KyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcU3RydWN0dXJlVHJhbnNpdGlvblRh
YmxlLmgiPg0KKyAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVk
ZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXFN5bWJvbFRhYmxlLmgiPg0K
KyAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXFRyYWNpbmcuaCI+DQorICAgICAgPEZpbHRl
cj5ydW50aW1lPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXHJ1bnRpbWVcVHlwZUxvY2F0aW9uQ2FjaGUuaCI+DQorICAgICAgPEZpbHRlcj5y
dW50aW1lPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXHJ1bnRpbWVcVHlwZVNldC5oIj4NCisgICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRl
cj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGlt
ZVxVaW50MTZXaXRoRnJhY3Rpb24uaCI+DQorICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+
DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVc
V2F0Y2hkb2cuaCI+DQorICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+DQorICAgIDwvQ2xJ
bmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcV2Vha0dDTWFwLmgi
Pg0KKyAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXFdlYWtSYW5kb20uaCI+DQorICAgICAg
PEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcV3JpdGVCYXJyaWVyLmgiPg0KKyAgICAgIDxGaWx0ZXI+
cnVudGltZTwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxydW50aW1lXFdyaXRlQmFycmllcklubGluZXMuaCI+DQorICAgICAgPEZpbHRlcj5y
dW50aW1lPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXHRvb2xzXENvZGVQcm9maWxlLmgiPg0KKyAgICAgIDxGaWx0ZXI+dG9vbHM8L0ZpbHRl
cj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cdG9vbHNc
Q29kZVByb2ZpbGluZy5oIj4NCisgICAgICA8RmlsdGVyPnRvb2xzPC9GaWx0ZXI+DQorICAgIDwv
Q2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHRvb2xzXFByb2ZpbGVUcmVl
Tm9kZS5oIj4NCisgICAgICA8RmlsdGVyPnRvb2xzPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRl
Pg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHRvb2xzXFRpZXJlZE1NYXBBcnJheS5oIj4N
CisgICAgICA8RmlsdGVyPnRvb2xzPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHlhcnJcWWFyci5oIj4NCisgICAgICA8RmlsdGVyPnlhcnI8
L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
eWFyclxSZWd1bGFyRXhwcmVzc2lvbi5oIj4NCisgICAgICA8RmlsdGVyPnlhcnI8L0ZpbHRlcj4N
CisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ceWFyclxZYXJy
Q2Fub25pY2FsaXplVUNTMi5oIj4NCisgICAgICA8RmlsdGVyPnlhcnI8L0ZpbHRlcj4NCisgICAg
PC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ceWFyclxZYXJySW50ZXJw
cmV0ZXIuaCI+DQorICAgICAgPEZpbHRlcj55YXJyPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRl
Pg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHlhcnJcWWFyckpJVC5oIj4NCisgICAgICA8
RmlsdGVyPnlhcnI8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5ceWFyclxZYXJyUGFyc2VyLmgiPg0KKyAgICAgIDxGaWx0ZXI+eWFycjwvRmls
dGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx5YXJy
XFlhcnJQYXR0ZXJuLmgiPg0KKyAgICAgIDxGaWx0ZXI+eWFycjwvRmlsdGVyPg0KKyAgICA8L0Ns
SW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx5YXJyXFlhcnJTeW50YXhDaGVj
a2VyLmgiPg0KKyAgICAgIDxGaWx0ZXI+eWFycjwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4N
CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxjb25maWcuaCIgLz4NCisgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxydW50aW1lXFByb3RvdHlwZU1hcC5oIj4NCisgICAgICA8RmlsdGVyPnJ1
bnRpbWU8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cQVBJXEpTVmFsdWUuaCI+DQorICAgICAgPEZpbHRlcj5BUEk8L0ZpbHRlcj4NCisgICAg
PC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU0NKU1Zh
bHVlLmgiPg0KKyAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVk
ZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTQ0pTVmFsdWVJbmxpbmVz
LmgiPg0KKyAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4N
CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxEYXRhRm9ybWF0LmgiPg0KKyAg
ICAgIDxGaWx0ZXI+Ynl0ZWNvZGU8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxTdHJ1Y3R1cmVSYXJlRGF0YS5oIj4NCisgICAg
ICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxTdHJ1Y3R1cmVSYXJlRGF0YUlubGluZXMuaCI+DQor
ICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXEFQSVxKU0FQSVdyYXBwZXJPYmplY3QuaCI+DQorICAgICAg
PEZpbHRlcj5BUEk8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iJChDb25maWd1cmF0aW9uQnVpbGREaXIpXG9iaiQoUGxhdGZvcm1BcmNoaXRlY3R1
cmUpXCQoUHJvamVjdE5hbWUpXERlcml2ZWRTb3VyY2VzXEJvb2xlYW5Qcm90b3R5cGUubHV0Lmgi
Pg0KKyAgICAgIDxGaWx0ZXI+RGVyaXZlZCBTb3VyY2VzPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNs
dWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoQ29uZmlndXJhdGlvbkJ1aWxkRGlyKVxv
YmokKFBsYXRmb3JtQXJjaGl0ZWN0dXJlKVwkKFByb2plY3ROYW1lKVxEZXJpdmVkU291cmNlc1xE
YXRlUHJvdG90eXBlLmx1dC5oIj4NCisgICAgICA8RmlsdGVyPkRlcml2ZWQgU291cmNlczwvRmls
dGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKENvbmZp
Z3VyYXRpb25CdWlsZERpcilcb2JqJChQbGF0Zm9ybUFyY2hpdGVjdHVyZSlcJChQcm9qZWN0TmFt
ZSlcRGVyaXZlZFNvdXJjZXNcRXJyb3JQcm90b3R5cGUubHV0LmgiPg0KKyAgICAgIDxGaWx0ZXI+
RGVyaXZlZCBTb3VyY2VzPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9IiQoQ29uZmlndXJhdGlvbkJ1aWxkRGlyKVxvYmokKFBsYXRmb3JtQXJjaGl0
ZWN0dXJlKVwkKFByb2plY3ROYW1lKVxEZXJpdmVkU291cmNlc1xIZWFkZXJEZXRlY3Rpb24uaCI+
DQorICAgICAgPEZpbHRlcj5EZXJpdmVkIFNvdXJjZXM8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1
ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChDb25maWd1cmF0aW9uQnVpbGREaXIpXG9i
aiQoUGxhdGZvcm1BcmNoaXRlY3R1cmUpXCQoUHJvamVjdE5hbWUpXERlcml2ZWRTb3VyY2VzXElu
c3BlY3RvckpTQmFja2VuZERpc3BhdGNoZXJzLmgiPg0KKyAgICAgIDxGaWx0ZXI+RGVyaXZlZCBT
b3VyY2VzPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9IiQoQ29uZmlndXJhdGlvbkJ1aWxkRGlyKVxvYmokKFBsYXRmb3JtQXJjaGl0ZWN0dXJlKVwk
KFByb2plY3ROYW1lKVxEZXJpdmVkU291cmNlc1xJbnNwZWN0b3JKU0Zyb250ZW5kRGlzcGF0Y2hl
cnMuaCI+DQorICAgICAgPEZpbHRlcj5EZXJpdmVkIFNvdXJjZXM8L0ZpbHRlcj4NCisgICAgPC9D
bEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChDb25maWd1cmF0aW9uQnVpbGRE
aXIpXG9iaiQoUGxhdGZvcm1BcmNoaXRlY3R1cmUpXCQoUHJvamVjdE5hbWUpXERlcml2ZWRTb3Vy
Y2VzXEluc3BlY3RvckpTVHlwZUJ1aWxkZXJzLmgiPg0KKyAgICAgIDxGaWx0ZXI+RGVyaXZlZCBT
b3VyY2VzPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9IiQoQ29uZmlndXJhdGlvbkJ1aWxkRGlyKVxvYmokKFBsYXRmb3JtQXJjaGl0ZWN0dXJlKVwk
KFByb2plY3ROYW1lKVxEZXJpdmVkU291cmNlc1xKU0dsb2JhbE9iamVjdC5sdXQuaCI+DQorICAg
ICAgPEZpbHRlcj5EZXJpdmVkIFNvdXJjZXM8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQor
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChDb25maWd1cmF0aW9uQnVpbGREaXIpXG9iaiQoUGxh
dGZvcm1BcmNoaXRlY3R1cmUpXCQoUHJvamVjdE5hbWUpXERlcml2ZWRTb3VyY2VzXEpTT05PYmpl
Y3QubHV0LmgiPg0KKyAgICAgIDxGaWx0ZXI+RGVyaXZlZCBTb3VyY2VzPC9GaWx0ZXI+DQorICAg
IDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoQ29uZmlndXJhdGlvbkJ1
aWxkRGlyKVxvYmokKFBsYXRmb3JtQXJjaGl0ZWN0dXJlKVwkKFByb2plY3ROYW1lKVxEZXJpdmVk
U291cmNlc1xMZXhlci5sdXQuaCI+DQorICAgICAgPEZpbHRlcj5EZXJpdmVkIFNvdXJjZXM8L0Zp
bHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChDb25m
aWd1cmF0aW9uQnVpbGREaXIpXG9iaiQoUGxhdGZvcm1BcmNoaXRlY3R1cmUpXCQoUHJvamVjdE5h
bWUpXERlcml2ZWRTb3VyY2VzXE51bWJlckNvbnN0cnVjdG9yLmx1dC5oIj4NCisgICAgICA8Rmls
dGVyPkRlcml2ZWQgU291cmNlczwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIkKENvbmZpZ3VyYXRpb25CdWlsZERpcilcb2JqJChQbGF0Zm9ybUFy
Y2hpdGVjdHVyZSlcJChQcm9qZWN0TmFtZSlcRGVyaXZlZFNvdXJjZXNcT2JqZWN0Q29uc3RydWN0
b3IubHV0LmgiPg0KKyAgICAgIDxGaWx0ZXI+RGVyaXZlZCBTb3VyY2VzPC9GaWx0ZXI+DQorICAg
IDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoQ29uZmlndXJhdGlvbkJ1
aWxkRGlyKVxvYmokKFBsYXRmb3JtQXJjaGl0ZWN0dXJlKVwkKFByb2plY3ROYW1lKVxEZXJpdmVk
U291cmNlc1xSZWdFeHBDb25zdHJ1Y3Rvci5sdXQuaCI+DQorICAgICAgPEZpbHRlcj5EZXJpdmVk
IFNvdXJjZXM8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iJChDb25maWd1cmF0aW9uQnVpbGREaXIpXG9iaiQoUGxhdGZvcm1BcmNoaXRlY3R1cmUp
XCQoUHJvamVjdE5hbWUpXERlcml2ZWRTb3VyY2VzXE51bWJlclByb3RvdHlwZS5sdXQuaCI+DQor
ICAgICAgPEZpbHRlcj5EZXJpdmVkIFNvdXJjZXM8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+
DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChDb25maWd1cmF0aW9uQnVpbGREaXIpXG9iaiQo
UGxhdGZvcm1BcmNoaXRlY3R1cmUpXCQoUHJvamVjdE5hbWUpXERlcml2ZWRTb3VyY2VzXFJlZ0V4
cEppdFRhYmxlcy5oIj4NCisgICAgICA8RmlsdGVyPkRlcml2ZWQgU291cmNlczwvRmlsdGVyPg0K
KyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKENvbmZpZ3VyYXRp
b25CdWlsZERpcilcb2JqJChQbGF0Zm9ybUFyY2hpdGVjdHVyZSlcJChQcm9qZWN0TmFtZSlcRGVy
aXZlZFNvdXJjZXNcUmVnRXhwUHJvdG90eXBlLmx1dC5oIj4NCisgICAgICA8RmlsdGVyPkRlcml2
ZWQgU291cmNlczwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIkKENvbmZpZ3VyYXRpb25CdWlsZERpcilcb2JqJChQbGF0Zm9ybUFyY2hpdGVjdHVy
ZSlcJChQcm9qZWN0TmFtZSlcRGVyaXZlZFNvdXJjZXNcU3RyaW5nQ29uc3RydWN0b3IubHV0Lmgi
Pg0KKyAgICAgIDxGaWx0ZXI+RGVyaXZlZCBTb3VyY2VzPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNs
dWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoQ29uZmlndXJhdGlvbkJ1aWxkRGlyKVxv
YmokKFBsYXRmb3JtQXJjaGl0ZWN0dXJlKVwkKFByb2plY3ROYW1lKVxEZXJpdmVkU291cmNlc1xB
cnJheVByb3RvdHlwZS5sdXQuaCI+DQorICAgICAgPEZpbHRlcj5EZXJpdmVkIFNvdXJjZXM8L0Zp
bHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChDb25m
aWd1cmF0aW9uQnVpbGREaXIpXG9iaiQoUGxhdGZvcm1BcmNoaXRlY3R1cmUpXCQoUHJvamVjdE5h
bWUpXERlcml2ZWRTb3VyY2VzXEpTQ0J1aWx0aW5zLmgiPg0KKyAgICAgIDxGaWx0ZXI+RGVyaXZl
ZCBTb3VyY2VzPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXHJ1bnRpbWVcVk0uaCI+DQorICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+
DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVc
Vk1FbnRyeVNjb3BlLmgiPg0KKyAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPg0KKyAgICA8
L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxhc3NlbWJsZXJcTWFjcm9B
c3NlbWJsZXJYODZDb21tb24uY3BwIj4NCisgICAgICA8RmlsdGVyPmFzc2VtYmxlcjwvRmlsdGVy
Pg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1l
XEludGVuZGVkU3RydWN0dXJlQ2hhaW4uaCI+DQorICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0
ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRp
bWVcQ29tbW9uU2xvd1BhdGhzRXhjZXB0aW9ucy5oIj4NCisgICAgICA8RmlsdGVyPnJ1bnRpbWU8
L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
QVBJXEpTQ1Rlc3RSdW5uZXJVdGlscy5oIj4NCisgICAgICA8RmlsdGVyPkFQSTwvRmlsdGVyPg0K
KyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEFy
cmF5QnVmZmVyLmgiPg0KKyAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPg0KKyAgICA8L0Ns
SW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEFycmF5QnVmZmVy
Vmlldy5oIj4NCisgICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1
ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caGVhcFxDb3B5VG9rZW4uaCI+DQorICAg
ICAgPEZpbHRlcj5oZWFwPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNBcnJheUJ1ZmZlckNvbnN0cnVjdG9yLmgiPg0KKyAg
ICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTQXJyYXlCdWZmZXIuaCI+DQorICAgICAgPEZp
bHRlcj5ydW50aW1lPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNBcnJheUJ1ZmZlclZpZXcuaCI+DQorICAgICAgPEZpbHRl
cj5ydW50aW1lPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXHJ1bnRpbWVcSlNBcnJheUJ1ZmZlclByb3RvdHlwZS5oIj4NCisgICAgICA8Rmls
dGVyPnJ1bnRpbWU8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5ccnVudGltZVxKU0FycmF5QnVmZmVyVmlld0lubGluZXMuaCI+DQorICAgICAg
PEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaCI+DQorICAg
ICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5
cGVJbmxpbmVzLmgiPg0KKyAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPg0KKyAgICA8L0Ns
SW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IuaCI+DQorICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0
ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRp
bWVcSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcklubGluZXMuaCI+DQorICAgICAg
PEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgi
Pg0KKyAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
UHJvdG90eXBlLmgiPg0KKyAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPg0KKyAgICA8L0Ns
SW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTUHJvbWlzZS5o
Ij4NCisgICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQor
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU1Byb21pc2VDb25zdHJ1Y3Rvci5o
Ij4NCisgICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQor
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU1Byb21pc2VEZWZlcnJlZC5oIj4N
CisgICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU1Byb21pc2VGdW5jdGlvbnMuaCI+DQor
ICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNQcm9taXNlUmVhY3Rpb24uaCI+DQorICAg
ICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNQcm9taXNlUHJvdG90eXBlLmgiPg0KKyAgICAg
IDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTSW50OEFycmF5LmgiPg0KKyAgICAgIDxGaWx0ZXI+
cnVudGltZTwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxydW50aW1lXEpTRmxvYXQzMkFycmF5LmgiPg0KKyAgICAgIDxGaWx0ZXI+cnVudGlt
ZTwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxydW50aW1lXEpTRmxvYXQ2NEFycmF5LmgiPg0KKyAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmls
dGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50
aW1lXEpTSW50MTZBcnJheS5oIj4NCisgICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4NCisg
ICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU0lu
dDMyQXJyYXkuaCI+DQorICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+DQorICAgIDwvQ2xJ
bmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcVWludDhBcnJheS5o
Ij4NCisgICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQor
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxVaW50MTZBcnJheS5oIj4NCisgICAg
ICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxVaW50MzJBcnJheS5oIj4NCisgICAgICA8RmlsdGVy
PnJ1bnRpbWU8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5ccnVudGltZVxUeXBlZEFycmF5VHlwZS5oIj4NCisgICAgICA8RmlsdGVyPnJ1bnRp
bWU8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5ccnVudGltZVxUeXBlZEFycmF5QWRhcHRvcnMuaCI+DQorICAgICAgPEZpbHRlcj5ydW50aW1l
PC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XHJ1bnRpbWVcVHlwZWRBcnJheUNvbnRyb2xsZXIuaCI+DQorICAgICAgPEZpbHRlcj5ydW50aW1l
PC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XHJ1bnRpbWVcVHlwZWRBcnJheUlubGluZXMuaCI+DQorICAgICAgPEZpbHRlcj5ydW50aW1lPC9G
aWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1
bnRpbWVcVHlwZWRBcnJheXMuaCI+DQorICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+DQor
ICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNV
aW50OENsYW1wZWRBcnJheS5oIj4NCisgICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4NCisg
ICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU1R5
cGVkQXJyYXlDb25zdHJ1Y3RvcnMuaCI+DQorICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+
DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVc
SlNUeXBlZEFycmF5UHJvdG90eXBlcy5oIj4NCisgICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRl
cj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGlt
ZVxKU1R5cGVkQXJyYXlzLmgiPg0KKyAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPg0KKyAg
ICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTVWlu
dDE2QXJyYXkuaCI+DQorICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+DQorICAgIDwvQ2xJ
bmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNVaW50MzJBcnJh
eS5oIj4NCisgICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+
DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU1VpbnQ4QXJyYXkuaCI+DQor
ICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcRmxvYXQzMkFycmF5LmgiPg0KKyAgICAgIDxG
aWx0ZXI+cnVudGltZTwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxydW50aW1lXEZsb2F0NjRBcnJheS5oIj4NCisgICAgICA8RmlsdGVyPnJ1
bnRpbWU8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5ccnVudGltZVxJbnQxNkFycmF5LmgiPg0KKyAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmls
dGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50
aW1lXEludDMyQXJyYXkuaCI+DQorICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+DQorICAg
IDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSW50OEFy
cmF5LmgiPg0KKyAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVk
ZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXERhdGFWaWV3LmgiPg0KKyAg
ICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmgi
Pg0KKyAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTRGF0YVZpZXcuaCI+DQorICAgICAg
PEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNEYXRhVmlld1Byb3RvdHlwZS5oIj4NCisgICAgICA8
RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iJChDb25maWd1cmF0aW9uQnVpbGREaXIpXG9iaiQoUGxhdGZvcm1BcmNoaXRl
Y3R1cmUpXCQoUHJvamVjdE5hbWUpXERlcml2ZWRTb3VyY2VzXEpTRGF0YVZpZXdQcm90b3R5cGUu
bHV0LmgiPg0KKyAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVk
ZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEdlbmVyaWNUeXBlZEFycmF5
Vmlld0lubGluZXMuaCI+DQorICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+DQorICAgIDwv
Q2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcR2VuZXJpY1R5
cGVkQXJyYXlWaWV3LmgiPg0KKyAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPg0KKyAgICA8
L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXFRvTmF0aXZl
RnJvbVZhbHVlLmgiPg0KKyAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPg0KKyAgICA8L0Ns
SW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKENvbmZpZ3VyYXRpb25CdWlsZERp
cilcb2JqJChQbGF0Zm9ybUFyY2hpdGVjdHVyZSlcJChQcm9qZWN0TmFtZSlcRGVyaXZlZFNvdXJj
ZXNcQXJyYXlDb25zdHJ1Y3Rvci5sdXQuaCI+DQorICAgICAgPEZpbHRlcj5EZXJpdmVkIFNvdXJj
ZXM8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
JChDb25maWd1cmF0aW9uQnVpbGREaXIpXG9iaiQoUGxhdGZvcm1BcmNoaXRlY3R1cmUpXCQoUHJv
amVjdE5hbWUpXERlcml2ZWRTb3VyY2VzXERhdGVDb25zdHJ1Y3Rvci5sdXQuaCI+DQorICAgICAg
PEZpbHRlcj5EZXJpdmVkIFNvdXJjZXM8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iJChDb25maWd1cmF0aW9uQnVpbGREaXIpXG9iaiQoUGxhdGZv
cm1BcmNoaXRlY3R1cmUpXCQoUHJvamVjdE5hbWUpXERlcml2ZWRTb3VyY2VzXEpTUHJvbWlzZUNv
bnN0cnVjdG9yLmx1dC5oIj4NCisgICAgICA8RmlsdGVyPkRlcml2ZWQgU291cmNlczwvRmlsdGVy
Pg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKENvbmZpZ3Vy
YXRpb25CdWlsZERpcilcb2JqJChQbGF0Zm9ybUFyY2hpdGVjdHVyZSlcJChQcm9qZWN0TmFtZSlc
RGVyaXZlZFNvdXJjZXNcSlNQcm9taXNlUHJvdG90eXBlLmx1dC5oIj4NCisgICAgICA8RmlsdGVy
PkRlcml2ZWQgU291cmNlczwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIkKENvbmZpZ3VyYXRpb25CdWlsZERpcilcb2JqJChQbGF0Zm9ybUFyY2hp
dGVjdHVyZSlcJChQcm9qZWN0TmFtZSlcRGVyaXZlZFNvdXJjZXNcS2V5d29yZExvb2t1cC5sdXQu
aCI+DQorICAgICAgPEZpbHRlcj5EZXJpdmVkIFNvdXJjZXM8L0ZpbHRlcj4NCisgICAgPC9DbElu
Y2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChDb25maWd1cmF0aW9uQnVpbGREaXIp
XG9iaiQoUGxhdGZvcm1BcmNoaXRlY3R1cmUpXCQoUHJvamVjdE5hbWUpXERlcml2ZWRTb3VyY2Vz
XFJlZ0V4cE9iamVjdC5sdXQuaCI+DQorICAgICAgPEZpbHRlcj5EZXJpdmVkIFNvdXJjZXM8L0Zp
bHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChDb25m
aWd1cmF0aW9uQnVpbGREaXIpXG9iaiQoUGxhdGZvcm1BcmNoaXRlY3R1cmUpXCQoUHJvamVjdE5h
bWUpXERlcml2ZWRTb3VyY2VzXE5hbWVQcm90b3R5cGUubHV0LmgiPg0KKyAgICAgIDxGaWx0ZXI+
RGVyaXZlZCBTb3VyY2VzPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGhlYXBcQ29kZUJsb2NrU2V0LmgiPg0KKyAgICAgIDxGaWx0ZXI+aGVh
cDwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxieXRlY29kZVxEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCI+DQorICAgICAgPEZpbHRl
cj5ieXRlY29kZTwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxkZmdcREZHQ29tcGlsYXRpb25LZXkuaCI+DQorICAgICAgPEZpbHRlcj5kZmc8
L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
ZGZnXERGR0NvbXBpbGF0aW9uTW9kZS5oIj4NCisgICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPg0K
KyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcSklUVG9E
RkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCI+DQorICAgICAgPEZpbHRlcj5qaXQ8L0Zp
bHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVu
dGltZVxKU01hcC5oIj4NCisgICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4NCisgICAgPC9D
bEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU1NldC5oIj4N
CisgICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU1NldEl0ZXJhdG9yLmgiPg0KKyAgICAg
IDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxsbGludFxMTEludEVudHJ5cG9pbnQuaCI+DQorICAgICAgPEZpbHRl
cj5sbGludDwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxydW50aW1lXE1hcENvbnN0cnVjdG9yLmgiPg0KKyAgICAgIDxGaWx0ZXI+cnVudGlt
ZTwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxydW50aW1lXE1hcERhdGEuaCI+DQorICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+DQor
ICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcU2V0
UHJvdG90eXBlLmgiPg0KKyAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPg0KKyAgICA8L0Ns
SW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXFNldEl0ZXJhdG9y
UHJvdG90eXBlLmgiPg0KKyAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPg0KKyAgICA8L0Ns
SW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXE1hcFByb3RvdHlw
ZS5oIj4NCisgICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+
DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxTZXRDb25zdHJ1Y3Rvci5oIj4N
CisgICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxTZXRJdGVyYXRvckNvbnN0cnVjdG9yLmgi
Pg0KKyAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHQWJzdHJhY3RIZWFwLmgiPg0KKyAgICAg
IDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXGRmZ1xERkdBYnN0cmFjdEludGVycHJldGVyLmgiPg0KKyAgICAgIDxGaWx0
ZXI+ZGZnPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGRmZ1xERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oIj4NCisgICAgICA8Rmls
dGVyPmRmZzwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxkZmdcREZHQWJzdHJhY3RWYWx1ZS5oIj4NCisgICAgICA8RmlsdGVyPmRmZzwvRmls
dGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdc
REZHQWRqYWNlbmN5TGlzdC5oIj4NCisgICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPg0KKyAgICA8
L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHQWxsb2NhdG9y
LmgiPg0KKyAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdBbmFseXNpcy5oIj4NCisgICAgICA8Rmls
dGVyPmRmZzwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxkZmdcREZHQXJndW1lbnRQb3NpdGlvbi5oIj4NCisgICAgICA8RmlsdGVyPmRmZzwv
RmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxk
ZmdcREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5oIj4NCisgICAgICA8RmlsdGVyPmRm
ZzwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxkZmdcREZHQXJyYXlpZnlTbG93UGF0aEdlbmVyYXRvci5oIj4NCisgICAgICA8RmlsdGVyPmRm
ZzwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxkZmdcREZHQXJyYXlNb2RlLmgiPg0KKyAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+DQorICAg
IDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdBdFRhaWxB
YnN0cmFjdFN0YXRlLmgiPg0KKyAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+DQorICAgIDwvQ2xJ
bmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdCYWNrd2FyZHNQcm9w
YWdhdGlvblBoYXNlLmgiPg0KKyAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+DQorICAgIDwvQ2xJ
bmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdCYXNpY0Jsb2NrLmgi
Pg0KKyAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdCYXNpY0Jsb2NrSW5saW5lcy5oIj4NCisgICAg
ICA8RmlsdGVyPmRmZzwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxkZmdcREZHQmluYXJ5U3dpdGNoLmgiPg0KKyAgICAgIDxGaWx0ZXI+ZGZn
PC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGRmZ1xERkdCbG9ja0luc2VydGlvblNldC5oIj4NCisgICAgICA8RmlsdGVyPmRmZzwvRmlsdGVy
Pg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZH
QnJhbmNoRGlyZWN0aW9uLmgiPg0KKyAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+DQorICAgIDwv
Q2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdCeXRlQ29kZVBh
cnNlci5oIj4NCisgICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4N
CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHQ2FsbEFycmF5QWxsb2NhdG9yU2xv
d1BhdGhHZW5lcmF0b3IuaCI+DQorICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4NCisgICAgPC9D
bEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0NhcGFiaWxpdGll
cy5oIj4NCisgICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHQ0NhbGxIZWxwZXJzLmgiPg0KKyAgICAg
IDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXGRmZ1xERkdDRkFQaGFzZS5oIj4NCisgICAgICA8RmlsdGVyPmRmZzwvRmls
dGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdc
REZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5oIj4NCisgICAgICA8RmlsdGVyPmRmZzwvRmlsdGVy
Pg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZH
Q2xvYmJlcml6ZS5oIj4NCisgICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPg0KKyAgICA8L0NsSW5j
bHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHQ2xvYmJlclNldC5oIj4N
CisgICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHQ29tbW9uLmgiPg0KKyAgICAgIDxGaWx0ZXI+ZGZn
PC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGRmZ1xERkdDb21tb25EYXRhLmgiPg0KKyAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+DQorICAg
IDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdDb25zdGFu
dEZvbGRpbmdQaGFzZS5oIj4NCisgICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPg0KKyAgICA8L0Ns
SW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHQ1BTUmV0aHJlYWRp
bmdQaGFzZS5oIj4NCisgICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVk
ZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHQ3JpdGljYWxFZGdlQnJlYWtp
bmdQaGFzZS5oIj4NCisgICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVk
ZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHQ1NFUGhhc2UuaCI+DQorICAg
ICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0RDRVBoYXNlLmgiPg0KKyAgICAgIDxGaWx0ZXI+ZGZnPC9G
aWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRm
Z1xERkdEZXNpcmVkSWRlbnRpZmllcnMuaCI+DQorICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4N
CisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0Rl
c2lyZWRUcmFuc2l0aW9ucy5oIj4NCisgICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPg0KKyAgICA8
L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHRGVzaXJlZFdh
dGNocG9pbnRzLmgiPg0KKyAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNs
dWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdEZXNpcmVkV2Vha1JlZmVy
ZW5jZXMuaCI+DQorICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+
DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0Rlc2lyZWRXcml0ZUJhcnJpZXJz
LmgiPg0KKyAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdEaXNhc3NlbWJsZXIuaCI+DQorICAgICAg
PEZpbHRlcj5kZmc8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5cZGZnXERGR0RvbWluYXRvcnMuaCI+DQorICAgICAgPEZpbHRlcj5kZmc8L0Zp
bHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZn
XERGR0RvdWJsZUZvcm1hdFN0YXRlLmgiPg0KKyAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+DQor
ICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdFZGdl
LmgiPg0KKyAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdFZGdlRG9taW5hdGVzLmgiPg0KKyAgICAg
IDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXGRmZ1xERkdFZGdlVXNlc1N0cnVjdHVyZS5oIj4NCisgICAgICA8RmlsdGVy
PmRmZzwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxkZmdcREZHRmFpbGVkRmluYWxpemVyLmgiPg0KKyAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0
ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xE
RkdGaWx0cmF0aW9uUmVzdWx0LmgiPg0KKyAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+DQorICAg
IDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdGaW5hbGl6
ZXIuaCI+DQorICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQor
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0ZpeHVwUGhhc2UuaCI+DQorICAgICAg
PEZpbHRlcj5kZmc8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5cZGZnXERGR0ZsdXNoZWRBdC5oIj4NCisgICAgICA8RmlsdGVyPmRmZzwvRmls
dGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdc
REZHRmx1c2hGb3JtYXQuaCI+DQorICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4NCisgICAgPC9D
bEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0ZQUkluZm8uaCI+
DQorICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0Z1bmN0aW9uV2hpdGVsaXN0LmgiPg0KKyAgICAg
IDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXGRmZ1xERkdHZW5lcmF0aW9uSW5mby5oIj4NCisgICAgICA8RmlsdGVyPmRm
ZzwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxkZmdcREZHR1BSSW5mby5oIj4NCisgICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPg0KKyAgICA8
L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHR3JhcGguaCI+
DQorICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmgiPg0KKyAg
ICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdJbnZhbGlkYXRpb25Qb2ludEluamVjdGlvblBoYXNlLmgi
Pg0KKyAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdJbnNlcnRpb25TZXQuaCI+DQorICAgICAgPEZp
bHRlcj5kZmc8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cZGZnXERGR0pJVENvZGUuaCI+DQorICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4N
CisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0pJ
VENvbXBpbGVyLmgiPg0KKyAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNs
dWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdKSVRGaW5hbGl6ZXIuaCI+
DQorICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0p1bXBSZXBsYWNlbWVudC5oIj4NCisgICAgICA8
RmlsdGVyPmRmZzwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxkZmdcREZHTGF6eUpTVmFsdWUuaCI+DQorICAgICAgPEZpbHRlcj5kZmc8L0Zp
bHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZn
XERGR0xJQ01QaGFzZS5oIj4NCisgICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPg0KKyAgICA8L0Ns
SW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHTGl2ZW5lc3NBbmFs
eXNpc1BoYXNlLmgiPg0KKyAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNs
dWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdMb25nTGl2ZWRTdGF0ZS5o
Ij4NCisgICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHTG9vcFByZUhlYWRlckNyZWF0aW9uUGhhc2Uu
aCI+DQorICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR01lcmdlTW9kZS5oIj4NCisgICAgICA8Rmls
dGVyPmRmZzwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxkZmdcREZHTWluaWZpZWRHcmFwaC5oIj4NCisgICAgICA8RmlsdGVyPmRmZzwvRmls
dGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdc
REZHTWluaWZpZWRJRC5oIj4NCisgICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPg0KKyAgICA8L0Ns
SW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHTWluaWZpZWROb2Rl
LmgiPg0KKyAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdOYXR1cmFsTG9vcHMuaCI+DQorICAgICAg
PEZpbHRlcj5kZmc8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5cZGZnXERGR05vZGUuaCI+DQorICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4N
CisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR05v
ZGVBbGxvY2F0b3IuaCI+DQorICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4NCisgICAgPC9DbElu
Y2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR05vZGVGbGFncy5oIj4N
CisgICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHTm9kZVR5cGUuaCI+DQorICAgICAgPEZpbHRlcj5k
Zmc8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5cZGZnXERGR09wZXJhdGlvbnMuaCI+DQorICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4NCisg
ICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR09TUkF2
YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuaCI+DQorICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4N
CisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR09T
UkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmgiPg0KKyAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+
DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdP
U1JFeGl0LmgiPg0KKyAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRl
Pg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdPU1JFeGl0QmFzZS5oIj4NCisg
ICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHT1NSRXhpdENvbXBpbGF0aW9uSW5mby5oIj4NCisgICAg
ICA8RmlsdGVyPmRmZzwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxkZmdcREZHT1NSRXhpdENvbXBpbGVyLmgiPg0KKyAgICAgIDxGaWx0ZXI+
ZGZnPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXGRmZ1xERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uaCI+DQorICAgICAgPEZpbHRlcj5kZmc8
L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
ZGZnXERGR09TUkV4aXRKdW1wUGxhY2Vob2xkZXIuaCI+DQorICAgICAgPEZpbHRlcj5kZmc8L0Zp
bHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZn
XERGR09TUkV4aXRQcmVwYXJhdGlvbi5oIj4NCisgICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPg0K
KyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHUGhh
bnRvbUNhbm9uaWNhbGl6YXRpb25QaGFzZS5oIj4NCisgICAgICA8RmlsdGVyPmRmZzwvRmlsdGVy
Pg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZH
UGhhc2UuaCI+DQorICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+
DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1BsYW4uaCI+DQorICAgICAgPEZp
bHRlcj5kZmc8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cZGZnXERGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5oIj4NCisgICAgICA8Rmls
dGVyPmRmZzwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxkZmdcREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuaCI+DQorICAgICAgPEZp
bHRlcj5kZmc8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cZGZnXERGR1JlZ2lzdGVyQmFuay5oIj4NCisgICAgICA8RmlsdGVyPmRmZzwvRmls
dGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdc
REZHUmVnaXN0ZXJTZXQuaCI+DQorICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4NCisgICAgPC9D
bEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1NhZmVUb0V4ZWN1
dGUuaCI+DQorICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQor
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1NhbmVTdHJpbmdHZXRCeVZhbFNsb3dQ
YXRoR2VuZXJhdG9yLmgiPg0KKyAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+DQorICAgIDwvQ2xJ
bmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdTY29yZUJvYXJkLmgi
Pg0KKyAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCI+
DQorICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1NpbGVudFJlZ2lzdGVyU2F2ZVBsYW4uaCI+DQor
ICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1Nsb3dQYXRoR2VuZXJhdG9yLmgiPg0KKyAgICAgIDxG
aWx0ZXI+ZGZnPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXGRmZ1xERkdTcGVjdWxhdGl2ZUpJVC5oIj4NCisgICAgICA8RmlsdGVyPmRmZzwv
RmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxk
ZmdcREZHU1NBQ29udmVyc2lvblBoYXNlLmgiPg0KKyAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+
DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdT
dGFja0xheW91dFBoYXNlLmgiPg0KKyAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+DQorICAgIDwv
Q2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdTdG9yZUJhcnJp
ZXJFbGlzaW9uUGhhc2UuaCI+DQorICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4NCisgICAgPC9D
bEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1N0cnVjdHVyZUFi
c3RyYWN0VmFsdWUuaCI+DQorICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4NCisgICAgPC9DbElu
Y2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1RodW5rcy5oIj4NCisg
ICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5oIj4NCisg
ICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2su
aCI+DQorICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENv
bXBpbGF0aW9uQ2FsbGJhY2suaCI+DQorICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4NCisgICAg
PC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1R5cGVDaGVj
a0hvaXN0aW5nUGhhc2UuaCI+DQorICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4NCisgICAgPC9D
bEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1VuaWZpY2F0aW9u
UGhhc2UuaCI+DQorICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+
DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1VzZUtpbmQuaCI+DQorICAgICAg
PEZpbHRlcj5kZmc8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5cZGZnXERGR1ZhbGlkYXRlLmgiPg0KKyAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0
ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xE
RkdWYWx1ZVJlY292ZXJ5T3ZlcnJpZGUuaCI+DQorICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4N
CisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1Zh
bHVlU291cmNlLmgiPg0KKyAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNs
dWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdWYXJpYWJsZUFjY2Vzc0Rh
dGEuaCI+DQorICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQor
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAu
aCI+DQorICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1ZhcmlhYmxlRXZlbnQuaCI+DQorICAgICAg
PEZpbHRlcj5kZmc8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5cZGZnXERGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uaCI+DQorICAgICAgPEZpbHRl
cj5kZmc8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cZGZnXERGR1ZhcmlhZGljRnVuY3Rpb24uaCI+DQorICAgICAgPEZpbHRlcj5kZmc8L0Zp
bHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZn
XERGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZS5oIj4NCisgICAgICA8RmlsdGVyPmRm
ZzwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxkZmdcREZHV2F0Y2hwb2ludENvbGxlY3Rpb25QaGFzZS5oIj4NCisgICAgICA8RmlsdGVyPmRm
ZzwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxkZmdcREZHV29ya2xpc3QuaCI+DQorICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4NCisgICAg
PC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcREZHRXhp
dFByb2ZpbGUuaCI+DQorICAgICAgPEZpbHRlcj5ieXRlY29kZTwvRmlsdGVyPg0KKyAgICA8L0Ns
SW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxQcmVjaXNlSnVt
cFRhcmdldHMuaCI+DQorICAgICAgPEZpbHRlcj5ieXRlY29kZTwvRmlsdGVyPg0KKyAgICA8L0Ns
SW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXER1bXBDb250ZXh0
LmgiPg0KKyAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4N
CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEZ1bmN0aW9uRXhlY3V0YWJsZUR1
bXAuaCI+DQorICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRl
Pg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcQ29tcGlsYXRpb25SZXN1bHQu
aCI+DQorICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0K
KyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcQXJyYXlJdGVyYXRvclByb3RvdHlw
ZS5oIj4NCisgICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+
DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxBcnJheUl0ZXJhdG9yQ29uc3Ry
dWN0b3IuaCI+DQorICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNs
dWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcTWFwSXRlcmF0b3JQcm90
b3R5cGUuaCI+DQorICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNs
dWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcTWFwSXRlcmF0b3JDb25z
dHJ1Y3Rvci5oIj4NCisgICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4NCisgICAgPC9DbElu
Y2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxNaWNyb3Rhc2suaCI+
DQorICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxBc3NlbWJseUhlbHBlcnMuaCI+DQorICAgICAg
PEZpbHRlcj5qaXQ8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5caml0XENDYWxsSGVscGVycy5oIj4NCisgICAgICA8RmlsdGVyPmppdDwvRmls
dGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50
aW1lXFdlYWtNYXBQcm90b3R5cGUuaCI+DQorICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+
DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVc
V2Vha01hcERhdGEuaCI+DQorICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+DQorICAgIDwv
Q2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcV2Vha01hcENv
bnN0cnVjdG9yLmgiPg0KKyAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPg0KKyAgICA8L0Ns
SW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTV2Vha01hcC5o
Ij4NCisgICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQor
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU0FycmF5SXRlcmF0b3IuaCI+DQor
ICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNBcmd1bWVudHNJdGVyYXRvci5oIj4NCisg
ICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU01hcEl0ZXJhdG9yLmgiPg0KKyAgICAgIDxG
aWx0ZXI+cnVudGltZTwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxqaXRcUmVwYXRjaC5oIj4NCisgICAgICA8RmlsdGVyPmppdDwvRmlsdGVy
Pg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxqaXRcUmVn
aXN0ZXJTZXQuaCI+DQorICAgICAgPEZpbHRlcj5qaXQ8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1
ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcSW5saW5lQ2FsbEZyYW1l
U2V0LmgiPg0KKyAgICAgIDxGaWx0ZXI+Ynl0ZWNvZGU8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1
ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caml0XEpJVE9wZXJhdGlvbnMuaCI+DQor
ICAgICAgPEZpbHRlcj5qaXQ8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5caml0XEdQUkluZm8uaCI+DQorICAgICAgPEZpbHRlcj5qaXQ8L0Zp
bHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caml0
XEZQUkluZm8uaCI+DQorICAgICAgPEZpbHRlcj5qaXQ8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1
ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caml0XFNjcmF0Y2hSZWdpc3RlckFsbG9j
YXRvci5oIj4NCisgICAgICA8RmlsdGVyPmppdDwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4N
CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXFRlc3RSdW5uZXJVdGlscy5oIj4N
CisgICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caml0XFRlbXBSZWdpc3RlclNldC5oIj4NCisgICAgICA8
RmlsdGVyPmppdDwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxqaXRcSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuaCI+DQorICAgICAgPEZpbHRl
cj5qaXQ8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cZGZnXERGR1Jlc3VycmVjdGlvbkZvclZhbGlkYXRpb25QaGFzZS5oIj4NCisgICAgICA8
RmlsdGVyPmRmZzwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxkZmdcREZHQXZhaWxhYmlsaXR5LmgiPg0KKyAgICAgIDxGaWx0ZXI+ZGZnPC9G
aWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5
dGVjb2RlXEJ5dGVjb2RlVXNlRGVmLmgiPg0KKyAgICAgIDxGaWx0ZXI+Ynl0ZWNvZGU8L0ZpbHRl
cj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNv
ZGVcQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmgiPg0KKyAgICAgIDxGaWx0ZXI+Ynl0
ZWNvZGU8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5ccnVudGltZVxTdGFja0FsaWdubWVudC5oIj4NCisgICAgICA8RmlsdGVyPnJ1bnRpbWU8
L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
aGVhcFxEZWxheWVkUmVsZWFzZVNjb3BlLmgiPg0KKyAgICAgIDxGaWx0ZXI+aGVhcDwvRmlsdGVy
Pg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29k
ZVxWYXJpYWJsZVdhdGNocG9pbnRTZXQuaCI+DQorICAgICAgPEZpbHRlcj5ieXRlY29kZTwvRmls
dGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxiaW5k
aW5nc1xTY3JpcHRGdW5jdGlvbkNhbGwuaCI+DQorICAgICAgPEZpbHRlcj5iaW5kaW5nczwvRmls
dGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxiaW5k
aW5nc1xTY3JpcHRPYmplY3QuaCI+DQorICAgICAgPEZpbHRlcj5iaW5kaW5nczwvRmlsdGVyPg0K
KyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxiaW5kaW5nc1xT
Y3JpcHRWYWx1ZS5oIj4NCisgICAgICA8RmlsdGVyPmJpbmRpbmdzPC9GaWx0ZXI+DQorICAgIDwv
Q2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdTdHJlbmd0aFJl
ZHVjdGlvblBoYXNlLmgiPg0KKyAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+DQorICAgIDwvQ2xJ
bmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdTU0FMb3dlcmluZ1Bo
YXNlLmgiPg0KKyAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0K
KyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcQXJyYXlCdWZmZXJOZXV0ZXJpbmdX
YXRjaHBvaW50LmgiPg0KKyAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPg0KKyAgICA8L0Ns
SW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXENvbnN0YW50TW9k
ZS5oIj4NCisgICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+
DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChDb25maWd1cmF0aW9uQnVpbGREaXIpXG9iaiQo
UGxhdGZvcm1BcmNoaXRlY3R1cmUpXCQoUHJvamVjdE5hbWUpXERlcml2ZWRTb3VyY2VzXEpTRGF0
YVZpZXdQcm90b3R5cGUubHV0LmgiIC8+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caml0
XEFyaXR5Q2hlY2tGYWlsUmV0dXJuVGh1bmtzLmgiPg0KKyAgICAgIDxGaWx0ZXI+aml0PC9GaWx0
ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxS
ZWdpc3RlclByZXNlcnZhdGlvbldyYXBwZXJHZW5lcmF0b3IuaCI+DQorICAgICAgPEZpbHRlcj5q
aXQ8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5cZnRsXEZUTEFiYnJldmlhdGVkVHlwZXMuaCI+DQorICAgICAgPEZpbHRlcj5mdGw8L0ZpbHRl
cj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZnRsXEZU
TEFiYnJldmlhdGlvbnMuaCI+DQorICAgICAgPEZpbHRlcj5mdGw8L0ZpbHRlcj4NCisgICAgPC9D
bEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZnRsXEZUTEFic3RyYWN0SGVh
cC5oIj4NCisgICAgICA8RmlsdGVyPmZ0bDwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxmdGxcRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5o
Ij4NCisgICAgICA8RmlsdGVyPmZ0bDwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxmdGxcRlRMQXZhaWxhYmxlUmVjb3ZlcnkuaCI+DQorICAg
ICAgPEZpbHRlcj5mdGw8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cZnRsXEZUTENhcGFiaWxpdGllcy5oIj4NCisgICAgICA8RmlsdGVyPmZ0
bDwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxmdGxcRlRMQ29tbW9uVmFsdWVzLmgiPg0KKyAgICAgIDxGaWx0ZXI+ZnRsPC9GaWx0ZXI+DQor
ICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGZ0bFxGVExDb21w
aWxlLmgiPg0KKyAgICAgIDxGaWx0ZXI+ZnRsPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0K
KyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGZ0bFxGVExEYXRhU2VjdGlvbi5oIj4NCisgICAg
ICA8RmlsdGVyPmZ0bDwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxmdGxcRlRMRFdBUkZEZWJ1Z0xpbmVJbmZvLmgiPg0KKyAgICAgIDxGaWx0
ZXI+ZnRsPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGZ0bFxGVExEV0FSRlJlZ2lzdGVyLmgiPg0KKyAgICAgIDxGaWx0ZXI+ZnRsPC9GaWx0
ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGZ0bFxG
VExFeGl0QXJndW1lbnQuaCI+DQorICAgICAgPEZpbHRlcj5mdGw8L0ZpbHRlcj4NCisgICAgPC9D
bEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZnRsXEZUTEV4aXRBcmd1bWVu
dEZvck9wZXJhbmQuaCI+DQorICAgICAgPEZpbHRlcj5mdGw8L0ZpbHRlcj4NCisgICAgPC9DbElu
Y2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZnRsXEZUTEV4aXRBcmd1bWVudExp
c3QuaCI+DQorICAgICAgPEZpbHRlcj5mdGw8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQor
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZnRsXEZUTEV4aXRUaHVua0dlbmVyYXRvci5oIj4N
CisgICAgICA8RmlsdGVyPmZ0bDwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxmdGxcRlRMRXhpdFZhbHVlLmgiPg0KKyAgICAgIDxGaWx0ZXI+
ZnRsPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXGZ0bFxGVExGYWlsLmgiPg0KKyAgICAgIDxGaWx0ZXI+ZnRsPC9GaWx0ZXI+DQorICAgIDwv
Q2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGZ0bFxGVExGb3JtYXR0ZWRW
YWx1ZS5oIj4NCisgICAgICA8RmlsdGVyPmZ0bDwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4N
CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxmdGxcRlRMRm9yT1NSRW50cnlKSVRDb2RlLmgi
Pg0KKyAgICAgIDxGaWx0ZXI+ZnRsPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGZ0bFxGVExHZW5lcmF0ZWRGdW5jdGlvbi5oIj4NCisgICAg
ICA8RmlsdGVyPmZ0bDwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxmdGxcRlRMSW5saW5lQ2FjaGVEZXNjcmlwdG9yLmgiPg0KKyAgICAgIDxG
aWx0ZXI+ZnRsPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXGZ0bFxGVExJbmxpbmVDYWNoZVNpemUuaCI+DQorICAgICAgPEZpbHRlcj5mdGw8
L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
ZnRsXEZUTEludHJpbnNpY1JlcG9zaXRvcnkuaCI+DQorICAgICAgPEZpbHRlcj5mdGw8L0ZpbHRl
cj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZnRsXEZU
TEpJVENvZGUuaCI+DQorICAgICAgPEZpbHRlcj5mdGw8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1
ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZnRsXEZUTEpJVEZpbmFsaXplci5oIj4N
CisgICAgICA8RmlsdGVyPmZ0bDwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxmdGxcRlRMSlNDYWxsLmgiPg0KKyAgICAgIDxGaWx0ZXI+ZnRs
PC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGZ0bFxGVExMaW5rLmgiPg0KKyAgICAgIDxGaWx0ZXI+ZnRsPC9GaWx0ZXI+DQorICAgIDwvQ2xJ
bmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGZ0bFxGVExMb2NhdGlvbi5oIj4N
CisgICAgICA8RmlsdGVyPmZ0bDwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxmdGxcRlRMTG93ZXJERkdUb0xMVk0uaCI+DQorICAgICAgPEZp
bHRlcj5mdGw8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cZnRsXEZUTExvd2VyZWROb2RlVmFsdWUuaCI+DQorICAgICAgPEZpbHRlcj5mdGw8
L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
ZnRsXEZUTE9TUkVudHJ5LmgiPg0KKyAgICAgIDxGaWx0ZXI+ZnRsPC9GaWx0ZXI+DQorICAgIDwv
Q2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGZ0bFxGVExPU1JFeGl0Lmgi
Pg0KKyAgICAgIDxGaWx0ZXI+ZnRsPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGZ0bFxGVExPU1JFeGl0Q29tcGlsYXRpb25JbmZvLmgiPg0K
KyAgICAgIDxGaWx0ZXI+ZnRsPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXGZ0bFxGVExPU1JFeGl0Q29tcGlsZXIuaCI+DQorICAgICAgPEZp
bHRlcj5mdGw8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cZnRsXEZUTE91dHB1dC5oIj4NCisgICAgICA8RmlsdGVyPmZ0bDwvRmlsdGVyPg0K
KyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxmdGxcRlRMUmVj
b3ZlcnlPcGNvZGUuaCI+DQorICAgICAgPEZpbHRlcj5mdGw8L0ZpbHRlcj4NCisgICAgPC9DbElu
Y2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZnRsXEZUTFJlZ2lzdGVyQXRPZmZz
ZXQuaCI+DQorICAgICAgPEZpbHRlcj5mdGw8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQor
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZnRsXEZUTFNhdmVSZXN0b3JlLmgiPg0KKyAgICAg
IDxGaWx0ZXI+ZnRsPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXGZ0bFxGVExTbG93UGF0aENhbGwuaCI+DQorICAgICAgPEZpbHRlcj5mdGw8
L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
ZnRsXEZUTFNsb3dQYXRoQ2FsbEtleS5oIj4NCisgICAgICA8RmlsdGVyPmZ0bDwvRmlsdGVyPg0K
KyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxmdGxcRlRMU3Rh
Y2tNYXBzLmgiPg0KKyAgICAgIDxGaWx0ZXI+ZnRsPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRl
Pg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGZ0bFxGVExTdGF0ZS5oIj4NCisgICAgICA8
RmlsdGVyPmZ0bDwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxmdGxcRlRMU3dpdGNoQ2FzZS5oIj4NCisgICAgICA8RmlsdGVyPmZ0bDwvRmls
dGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxmdGxc
RlRMVGh1bmtzLmgiPg0KKyAgICAgIDxGaWx0ZXI+ZnRsPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNs
dWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGZ0bFxGVExUeXBlZFBvaW50ZXIuaCI+
DQorICAgICAgPEZpbHRlcj5mdGw8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cZnRsXEZUTFVud2luZEluZm8uaCI+DQorICAgICAgPEZpbHRl
cj5mdGw8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5cZnRsXEZUTFZhbHVlRm9ybWF0LmgiPg0KKyAgICAgIDxGaWx0ZXI+ZnRsPC9GaWx0ZXI+
DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGZ0bFxGVExW
YWx1ZUZyb21CbG9jay5oIj4NCisgICAgICA8RmlsdGVyPmZ0bDwvRmlsdGVyPg0KKyAgICA8L0Ns
SW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxmdGxcRlRMVmFsdWVSYW5nZS5o
Ij4NCisgICAgICA8RmlsdGVyPmZ0bDwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxmdGxcRlRMV2VpZ2h0LmgiPg0KKyAgICAgIDxGaWx0ZXI+
ZnRsPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXGZ0bFxGVExXZWlnaHRlZFRhcmdldC5oIj4NCisgICAgICA8RmlsdGVyPmZ0bDwvRmlsdGVy
Pg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkaXNhc3Nl
bWJsZXJcTExWTURpc2Fzc2VtYmxlci5oIj4NCisgICAgICA8RmlsdGVyPmRpc2Fzc2VtYmxlcjwv
RmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxs
bHZtXEluaXRpYWxpemVMTFZNLmgiPg0KKyAgICAgIDxGaWx0ZXI+bGx2bTwvRmlsdGVyPg0KKyAg
ICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxsbHZtXExMVk1BUEku
aCI+DQorICAgICAgPEZpbHRlcj5sbHZtPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGxsdm1cTExWTUFQSUZ1bmN0aW9ucy5oIj4NCisgICAg
ICA8RmlsdGVyPmxsdm08L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cbGx2bVxMTFZNSGVhZGVycy5oIj4NCisgICAgICA8RmlsdGVyPmxsdm08
L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
aml0XEFjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lLmgiPg0KKyAgICAgIDxGaWx0ZXI+aml0PC9G
aWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGFz
c2VtYmxlclxBYm9ydFJlYXNvbi5oIj4NCisgICAgICA8RmlsdGVyPmFzc2VtYmxlcjwvRmlsdGVy
Pg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxpbnNwZWN0
b3JcQ29uc29sZU1lc3NhZ2UuaCI+DQorICAgICAgPEZpbHRlcj5pbnNwZWN0b3I8L0ZpbHRlcj4N
CisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0Fy
aXRoTW9kZS5oIj4NCisgICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVk
ZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHR3JhcGhTYWZlcG9pbnQuaCI+
DQorICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0ludGVnZXJDaGVja0NvbWJpbmluZ1BoYXNlLmgi
Pg0KKyAgICAgIDxGaWx0ZXI+ZGZnPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdOb2RlT3JpZ2luLmgiPg0KKyAgICAgIDxGaWx0
ZXI+ZGZnPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGRmZ1xERkdTYWZlcG9pbnQuaCI+DQorICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4N
CisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1Nj
YW5uYWJsZS5oIj4NCisgICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVk
ZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHU3RhdGljRXhlY3V0aW9uQ291
bnRFc3RpbWF0aW9uUGhhc2UuaCI+DQorICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4NCisgICAg
PC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1RocmVhZERh
dGEuaCI+DQorICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQor
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcR2V0QnlJZFZhcmlhbnQuaCI+DQor
ICAgICAgPEZpbHRlcj5ieXRlY29kZTwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcSWRlbnRpZmllcnNGYWN0b3J5LmgiPg0K
KyAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGluc3BlY3RvclxJbmplY3RlZFNjcmlwdE1vZHVsZS5o
Ij4NCisgICAgICA8RmlsdGVyPmluc3BlY3RvcjwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4N
CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcSW5qZWN0ZWRTY3JpcHQuaCI+
DQorICAgICAgPEZpbHRlcj5pbnNwZWN0b3I8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQor
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXEluamVjdGVkU2NyaXB0QmFzZS5o
Ij4NCisgICAgICA8RmlsdGVyPmluc3BlY3RvcjwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4N
CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcSW5qZWN0ZWRTY3JpcHRIb3N0
LmgiPg0KKyAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRl
Pg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGluc3BlY3RvclxJbmplY3RlZFNjcmlwdE1h
bmFnZXIuaCI+DQorICAgICAgPEZpbHRlcj5pbnNwZWN0b3I8L0ZpbHRlcj4NCisgICAgPC9DbElu
Y2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChDb25maWd1cmF0aW9uQnVpbGREaXIp
XG9iaiQoUGxhdGZvcm1BcmNoaXRlY3R1cmUpXCQoUHJvamVjdE5hbWUpXERlcml2ZWRTb3VyY2Vz
XEluamVjdGVkU2NyaXB0U291cmNlLmgiPg0KKyAgICAgIDxGaWx0ZXI+RGVyaXZlZCBTb3VyY2Vz
PC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGluc3BlY3RvclxhZ2VudHNcSW5zcGVjdG9yQ29uc29sZUFnZW50LmgiPg0KKyAgICAgIDxGaWx0
ZXI+aW5zcGVjdG9yPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9Ii4uXGluc3BlY3RvclxJbnNwZWN0b3JFbnZpcm9ubWVudC5oIj4NCisgICAgICA8
RmlsdGVyPmluc3BlY3RvcjwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcSmF2YVNjcmlwdENhbGxGcmFtZS5oIj4NCisgICAg
ICA8RmlsdGVyPmluc3BlY3RvcjwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcSlNJbmplY3RlZFNjcmlwdEhvc3QuaCI+DQor
ICAgICAgPEZpbHRlcj5pbnNwZWN0b3I8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXEpTSW5qZWN0ZWRTY3JpcHRIb3N0UHJv
dG90eXBlLmgiPg0KKyAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yPC9GaWx0ZXI+DQorICAgIDwvQ2xJ
bmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGluc3BlY3RvclxKU0phdmFTY3Jp
cHRDYWxsRnJhbWVQcm90b3R5cGUuaCI+DQorICAgICAgPEZpbHRlcj5pbnNwZWN0b3I8L0ZpbHRl
cj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caW5zcGVj
dG9yXEpTSmF2YVNjcmlwdENhbGxGcmFtZS5oIj4NCisgICAgICA8RmlsdGVyPmluc3BlY3Rvcjwv
RmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxy
dW50aW1lXEpTQ0lubGluZXMuaCI+DQorICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+DQor
ICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFBv
bHltb3JwaGljR2V0QnlJZExpc3QuaCI+DQorICAgICAgPEZpbHRlcj5ieXRlY29kZTwvRmlsdGVy
Pg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxwcm9maWxl
clxQcm9maWxlckpldHRpc29uUmVhc29uLmgiPg0KKyAgICAgIDxGaWx0ZXI+cHJvZmlsZXI8L0Zp
bHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0
ZWNvZGVcUHV0QnlJZFZhcmlhbnQuaCI+DQorICAgICAgPEZpbHRlcj5ieXRlY29kZTwvRmlsdGVy
Pg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxpbnNwZWN0
b3JcU2NyaXB0QXJndW1lbnRzLmgiPg0KKyAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yPC9GaWx0ZXI+
DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGppdFxSZWcu
aCI+DQorICAgICAgPEZpbHRlcj5qaXQ8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXFNjcmlwdEJyZWFrcG9pbnQuaCI+DQor
ICAgICAgPEZpbHRlcj5pbnNwZWN0b3I8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXFNjcmlwdENhbGxTdGFjay5oIj4NCisg
ICAgICA8RmlsdGVyPmluc3BlY3RvcjwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcU2NyaXB0Q2FsbEZyYW1lLmgiPg0KKyAg
ICAgIDxGaWx0ZXI+aW5zcGVjdG9yPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGluc3BlY3RvclxTY3JpcHRDYWxsU3RhY2tGYWN0b3J5Lmgi
Pg0KKyAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0K
KyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGluc3BlY3RvclxTY3JpcHREZWJ1Z1NlcnZlci5o
Ij4NCisgICAgICA8RmlsdGVyPmluc3BlY3RvcjwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4N
CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3JcU2NyaXB0RGVidWdMaXN0ZW5l
ci5oIj4NCisgICAgICA8RmlsdGVyPmluc3BlY3RvcjwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVk
ZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXE1lbW9yeVN0YXRpc3RpY3Mu
aCI+DQorICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0K
KyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXENvbXBsZXhHZXRTdGF0dXMuaCI+
DQorICAgICAgPEZpbHRlcj5ieXRlY29kZTwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxDb25zdGFudFN0cnVjdHVyZUNoZWNr
LmgiPg0KKyAgICAgIDxGaWx0ZXI+Ynl0ZWNvZGU8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+
DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0RvZXNHQy5oIj4NCisgICAgICA8
RmlsdGVyPmRmZzwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxkZmdcREZHRnJvemVuVmFsdWUuaCI+DQorICAgICAgPEZpbHRlcj5kZmc8L0Zp
bHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZn
XERGR0hlYXBMb2NhdGlvbi5oIj4NCisgICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPg0KKyAgICA8
L0NsSW5jbHVkZT4NCisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHTWF5RXhpdC5o
Ij4NCisgICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHUGhhbnRvbVJlbW92YWxQaGFzZS5oIj4NCisg
ICAgICA8RmlsdGVyPmRmZzwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHUHVyZVZhbHVlLmgiPg0KKyAgICAgIDxGaWx0ZXI+ZGZn
PC9GaWx0ZXI+DQorICAgIDwvQ2xJbmNsdWRlPg0KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGRmZ1xERkdTdHJ1Y3R1cmVDbG9iYmVyU3RhdGUuaCI+DQorICAgICAgPEZpbHRlcj5kZmc8L0Zp
bHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZn
XERGR1RyYW5zaXRpb24uaCI+DQorICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4NCisgICAgPC9D
bEluY2x1ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1ZhbHVlU3RyZW5n
dGguaCI+DQorICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1ZGU+DQor
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1dhdGNoYWJsZVN0cnVjdHVyZVdhdGNo
aW5nUGhhc2UuaCI+DQorICAgICAgPEZpbHRlcj5kZmc8L0ZpbHRlcj4NCisgICAgPC9DbEluY2x1
ZGU+DQorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxFeGNlcHRpb25GdXp6Lmgi
Pg0KKyAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxUb1RoaXNTdGF0dXMuaCI+DQorICAg
ICAgPEZpbHRlcj5ieXRlY29kZTwvRmlsdGVyPg0KKyAgICA8L0NsSW5jbHVkZT4NCisgIDwvSXRl
bUdyb3VwPg0KKyAgPEl0ZW1Hcm91cD4NCisgICAgPE5vbmUgSW5jbHVkZT0iSmF2YVNjcmlwdENv
cmVQcmVMaW5rLmNtZCIgLz4NCisgICAgPE5vbmUgSW5jbHVkZT0iSmF2YVNjcmlwdENvcmVQb3N0
QnVpbGQuY21kIiAvPg0KKyAgICA8Tm9uZSBJbmNsdWRlPSJKYXZhU2NyaXB0Q29yZVByZUJ1aWxk
LmNtZCIgLz4NCisgICAgPE5vbmUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcQnl0ZWNvZGVMaXN0Lmpz
b24iPg0KKyAgICAgIDxGaWx0ZXI+Ynl0ZWNvZGU8L0ZpbHRlcj4NCisgICAgPC9Ob25lPg0KKyAg
ICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3Jcc2NyaXB0c1xjc3NtaW4ucHkiPg0KKyAgICAg
IDxGaWx0ZXI+aW5zcGVjdG9yXHNjcmlwdHM8L0ZpbHRlcj4NCisgICAgPC9Ob25lPg0KKyAgICA8
Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3Jcc2NyaXB0c1xnZW5lcmF0ZS1jb21iaW5lZC1pbnNw
ZWN0b3ItanNvbi5weSI+DQorICAgICAgPEZpbHRlcj5pbnNwZWN0b3Jcc2NyaXB0czwvRmlsdGVy
Pg0KKyAgICA8L05vbmU+DQorICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3RvclxzY3JpcHRz
XGdlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weSI+DQorICAgICAgPEZpbHRl
cj5pbnNwZWN0b3Jcc2NyaXB0czwvRmlsdGVyPg0KKyAgICA8L05vbmU+DQorICAgIDxOb25lIElu
Y2x1ZGU9Ii4uXGluc3BlY3RvclxzY3JpcHRzXGlubGluZS1hbmQtbWluaWZ5LXN0eWxlc2hlZXRz
LWFuZC1zY3JpcHRzLnB5Ij4NCisgICAgICA8RmlsdGVyPmluc3BlY3RvclxzY3JpcHRzPC9GaWx0
ZXI+DQorICAgIDwvTm9uZT4NCisgICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXHNjcmlw
dHNcanNtaW4ucHkiPg0KKyAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXHNjcmlwdHM8L0ZpbHRlcj4N
CisgICAgPC9Ob25lPg0KKyAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3Jcc2NyaXB0c1x4
eGQucGwiPg0KKyAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXHNjcmlwdHM8L0ZpbHRlcj4NCisgICAg
PC9Ob25lPg0KKyAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3Jcc2NyaXB0c1xjb2RlZ2Vu
XF9faW5pdF9fLnB5Ij4NCisgICAgICA8RmlsdGVyPmluc3BlY3RvclxzY3JpcHRzXGNvZGVnZW48
L0ZpbHRlcj4NCisgICAgPC9Ob25lPg0KKyAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3Jc
c2NyaXB0c1xjb2RlZ2VuXGdlbmVyYXRlX2JhY2tlbmRfY29tbWFuZHMucHkiPg0KKyAgICAgIDxG
aWx0ZXI+aW5zcGVjdG9yXHNjcmlwdHNcY29kZWdlbjwvRmlsdGVyPg0KKyAgICA8L05vbmU+DQor
ICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3RvclxzY3JpcHRzXGNvZGVnZW5cZ2VuZXJhdGVf
YmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weSI+DQorICAgICAgPEZpbHRlcj5pbnNwZWN0b3Jc
c2NyaXB0c1xjb2RlZ2VuPC9GaWx0ZXI+DQorICAgIDwvTm9uZT4NCisgICAgPE5vbmUgSW5jbHVk
ZT0iLi5caW5zcGVjdG9yXHNjcmlwdHNcY29kZWdlblxnZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNo
ZXJfaW1wbGVtZW50YXRpb24ucHkiPg0KKyAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXHNjcmlwdHNc
Y29kZWdlbjwvRmlsdGVyPg0KKyAgICA8L05vbmU+DQorICAgIDxOb25lIEluY2x1ZGU9Ii4uXGlu
c3BlY3RvclxzY3JpcHRzXGNvZGVnZW5cZ2VuZXJhdGVfZnJvbnRlbmRfZGlzcGF0Y2hlcl9oZWFk
ZXIucHkiPg0KKyAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXHNjcmlwdHNcY29kZWdlbjwvRmlsdGVy
Pg0KKyAgICA8L05vbmU+DQorICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3RvclxzY3JpcHRz
XGNvZGVnZW5cZ2VuZXJhdGVfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSI+
DQorICAgICAgPEZpbHRlcj5pbnNwZWN0b3Jcc2NyaXB0c1xjb2RlZ2VuPC9GaWx0ZXI+DQorICAg
IDwvTm9uZT4NCisgICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXHNjcmlwdHNcY29kZWdl
blxnZW5lcmF0ZV90eXBlX2J1aWxkZXJfaGVhZGVyLnB5Ij4NCisgICAgICA8RmlsdGVyPmluc3Bl
Y3RvclxzY3JpcHRzXGNvZGVnZW48L0ZpbHRlcj4NCisgICAgPC9Ob25lPg0KKyAgICA8Tm9uZSBJ
bmNsdWRlPSIuLlxpbnNwZWN0b3Jcc2NyaXB0c1xjb2RlZ2VuXGdlbmVyYXRlX3R5cGVfYnVpbGRl
cl9pbXBsZW1lbnRhdGlvbi5weSI+DQorICAgICAgPEZpbHRlcj5pbnNwZWN0b3Jcc2NyaXB0c1xj
b2RlZ2VuPC9GaWx0ZXI+DQorICAgIDwvTm9uZT4NCisgICAgPE5vbmUgSW5jbHVkZT0iLi5caW5z
cGVjdG9yXHNjcmlwdHNcY29kZWdlblxnZW5lcmF0b3IucHkiPg0KKyAgICAgIDxGaWx0ZXI+aW5z
cGVjdG9yXHNjcmlwdHNcY29kZWdlbjwvRmlsdGVyPg0KKyAgICA8L05vbmU+DQorICAgIDxOb25l
IEluY2x1ZGU9Ii4uXGluc3BlY3RvclxzY3JpcHRzXGNvZGVnZW5cZ2VuZXJhdG9yX3RlbXBsYXRl
cy5weSI+DQorICAgICAgPEZpbHRlcj5pbnNwZWN0b3Jcc2NyaXB0c1xjb2RlZ2VuPC9GaWx0ZXI+
DQorICAgIDwvTm9uZT4NCisgICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXHNjcmlwdHNc
Y29kZWdlblxtb2RlbHMucHkiPg0KKyAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXHNjcmlwdHNcY29k
ZWdlbjwvRmlsdGVyPg0KKyAgICA8L05vbmU+DQorICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3Bl
Y3RvclxzY3JpcHRzXHRlc3RzXGV4cGVjdGVkXGNvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRl
Lmpzb24tcmVzdWx0Ij4NCisgICAgICA8RmlsdGVyPmluc3BlY3RvclxzY3JpcHRzXHRlc3RzXGV4
cGVjdGVkPC9GaWx0ZXI+DQorICAgIDwvTm9uZT4NCisgICAgPE5vbmUgSW5jbHVkZT0iLi5caW5z
cGVjdG9yXHNjcmlwdHNcdGVzdHNcZXhwZWN0ZWRcY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxs
LXJldHVybi1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0Ij4NCisgICAgICA8RmlsdGVyPmluc3BlY3Rv
clxzY3JpcHRzXHRlc3RzXGV4cGVjdGVkPC9GaWx0ZXI+DQorICAgIDwvTm9uZT4NCisgICAgPE5v
bmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXHNjcmlwdHNcdGVzdHNcZXhwZWN0ZWRcZG9tYWlucy13
aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uLXJlc3VsdCI+DQorICAgICAgPEZpbHRlcj5p
bnNwZWN0b3Jcc2NyaXB0c1x0ZXN0c1xleHBlY3RlZDwvRmlsdGVyPg0KKyAgICA8L05vbmU+DQor
ICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3RvclxzY3JpcHRzXHRlc3RzXGV4cGVjdGVkXGV2
ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbi1yZXN1bHQiPg0KKyAgICAgIDxGaWx0
ZXI+aW5zcGVjdG9yXHNjcmlwdHNcdGVzdHNcZXhwZWN0ZWQ8L0ZpbHRlcj4NCisgICAgPC9Ob25l
Pg0KKyAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3Jcc2NyaXB0c1x0ZXN0c1xleHBlY3Rl
ZFxmYWlsLW9uLWR1cGxpY2F0ZS10eXBlLWRlY2xhcmF0aW9ucy5qc29uLWVycm9yIj4NCisgICAg
ICA8RmlsdGVyPmluc3BlY3RvclxzY3JpcHRzXHRlc3RzXGV4cGVjdGVkPC9GaWx0ZXI+DQorICAg
IDwvTm9uZT4NCisgICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXHNjcmlwdHNcdGVzdHNc
ZXhwZWN0ZWRcZmFpbC1vbi1lbnVtLXdpdGgtbm8tdmFsdWVzLmpzb24tZXJyb3IiPg0KKyAgICAg
IDxGaWx0ZXI+aW5zcGVjdG9yXHNjcmlwdHNcdGVzdHNcZXhwZWN0ZWQ8L0ZpbHRlcj4NCisgICAg
PC9Ob25lPg0KKyAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3Jcc2NyaXB0c1x0ZXN0c1xl
eHBlY3RlZFxmYWlsLW9uLXN0cmluZy10eXBlZC1vcHRpb25hbC1wYXJhbWV0ZXItZmxhZy5qc29u
LWVycm9yIj4NCisgICAgICA8RmlsdGVyPmluc3BlY3RvclxzY3JpcHRzXHRlc3RzXGV4cGVjdGVk
PC9GaWx0ZXI+DQorICAgIDwvTm9uZT4NCisgICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9y
XHNjcmlwdHNcdGVzdHNcZXhwZWN0ZWRcZmFpbC1vbi1zdHJpbmctdHlwZWQtb3B0aW9uYWwtdHlw
ZS1tZW1iZXIuanNvbi1lcnJvciI+DQorICAgICAgPEZpbHRlcj5pbnNwZWN0b3Jcc2NyaXB0c1x0
ZXN0c1xleHBlY3RlZDwvRmlsdGVyPg0KKyAgICA8L05vbmU+DQorICAgIDxOb25lIEluY2x1ZGU9
Ii4uXGluc3BlY3RvclxzY3JpcHRzXHRlc3RzXGV4cGVjdGVkXGZhaWwtb24tdHlwZS1kZWNsYXJh
dGlvbi11c2luZy10eXBlLXJlZmVyZW5jZS5qc29uLWVycm9yIj4NCisgICAgICA8RmlsdGVyPmlu
c3BlY3RvclxzY3JpcHRzXHRlc3RzXGV4cGVjdGVkPC9GaWx0ZXI+DQorICAgIDwvTm9uZT4NCisg
ICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXHNjcmlwdHNcdGVzdHNcZXhwZWN0ZWRcZmFp
bC1vbi10eXBlLXdpdGgtbG93ZXJjYXNlLW5hbWUuanNvbi1lcnJvciI+DQorICAgICAgPEZpbHRl
cj5pbnNwZWN0b3Jcc2NyaXB0c1x0ZXN0c1xleHBlY3RlZDwvRmlsdGVyPg0KKyAgICA8L05vbmU+
DQorICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3RvclxzY3JpcHRzXHRlc3RzXGV4cGVjdGVk
XGZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVyZW5jZS1pbi10eXBlLWRlY2xhcmF0aW9uLmpzb24t
ZXJyb3IiPg0KKyAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXHNjcmlwdHNcdGVzdHNcZXhwZWN0ZWQ8
L0ZpbHRlcj4NCisgICAgPC9Ob25lPg0KKyAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3Jc
c2NyaXB0c1x0ZXN0c1xleHBlY3RlZFxmYWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2UtaW4t
dHlwZS1tZW1iZXIuanNvbi1lcnJvciI+DQorICAgICAgPEZpbHRlcj5pbnNwZWN0b3Jcc2NyaXB0
c1x0ZXN0c1xleHBlY3RlZDwvRmlsdGVyPg0KKyAgICA8L05vbmU+DQorICAgIDxOb25lIEluY2x1
ZGU9Ii4uXGluc3BlY3RvclxzY3JpcHRzXHRlc3RzXGV4cGVjdGVkXHNhbWUtdHlwZS1pZC1kaWZm
ZXJlbnQtZG9tYWluLmpzb24tcmVzdWx0Ij4NCisgICAgICA8RmlsdGVyPmluc3BlY3RvclxzY3Jp
cHRzXHRlc3RzXGV4cGVjdGVkPC9GaWx0ZXI+DQorICAgIDwvTm9uZT4NCisgICAgPE5vbmUgSW5j
bHVkZT0iLi5caW5zcGVjdG9yXHNjcmlwdHNcdGVzdHNcZXhwZWN0ZWRcc2hhZG93ZWQtb3B0aW9u
YWwtdHlwZS1zZXR0ZXJzLmpzb24tcmVzdWx0Ij4NCisgICAgICA8RmlsdGVyPmluc3BlY3Rvclxz
Y3JpcHRzXHRlc3RzXGV4cGVjdGVkPC9GaWx0ZXI+DQorICAgIDwvTm9uZT4NCisgICAgPE5vbmUg
SW5jbHVkZT0iLi5caW5zcGVjdG9yXHNjcmlwdHNcdGVzdHNcZXhwZWN0ZWRcdHlwZS1kZWNsYXJh
dGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24tcmVzdWx0Ij4NCisgICAgICA8RmlsdGVy
Pmluc3BlY3RvclxzY3JpcHRzXHRlc3RzXGV4cGVjdGVkPC9GaWx0ZXI+DQorICAgIDwvTm9uZT4N
CisgICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXHNjcmlwdHNcdGVzdHNcZXhwZWN0ZWRc
dHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24tcmVzdWx0Ij4NCisgICAgICA8RmlsdGVy
Pmluc3BlY3RvclxzY3JpcHRzXHRlc3RzXGV4cGVjdGVkPC9GaWx0ZXI+DQorICAgIDwvTm9uZT4N
CisgICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXHNjcmlwdHNcdGVzdHNcZXhwZWN0ZWRc
dHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbi1yZXN1bHQiPg0KKyAgICAgIDxGaWx0ZXI+
aW5zcGVjdG9yXHNjcmlwdHNcdGVzdHNcZXhwZWN0ZWQ8L0ZpbHRlcj4NCisgICAgPC9Ob25lPg0K
KyAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3Jcc2NyaXB0c1x0ZXN0c1xleHBlY3RlZFx0
eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24tcmVzdWx0Ij4NCisgICAgICA8RmlsdGVy
Pmluc3BlY3RvclxzY3JpcHRzXHRlc3RzXGV4cGVjdGVkPC9GaWx0ZXI+DQorICAgIDwvTm9uZT4N
CisgICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXHNjcmlwdHNcdGVzdHNcZXhwZWN0ZWRc
dHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uLXJlc3VsdCI+DQorICAgICAgPEZpbHRl
cj5pbnNwZWN0b3Jcc2NyaXB0c1x0ZXN0c1xleHBlY3RlZDwvRmlsdGVyPg0KKyAgICA8L05vbmU+
DQorICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3RvclxzY3JpcHRzXHRlc3RzXGNvbW1hbmRz
LXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24iPg0KKyAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXHNj
cmlwdHNcdGVzdHM8L0ZpbHRlcj4NCisgICAgPC9Ob25lPg0KKyAgICA8Tm9uZSBJbmNsdWRlPSIu
LlxpbnNwZWN0b3Jcc2NyaXB0c1x0ZXN0c1xjb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0
dXJuLXBhcmFtZXRlcnMuanNvbiI+DQorICAgICAgPEZpbHRlcj5pbnNwZWN0b3Jcc2NyaXB0c1x0
ZXN0czwvRmlsdGVyPg0KKyAgICA8L05vbmU+DQorICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3Bl
Y3RvclxzY3JpcHRzXHRlc3RzXGRvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNv
biI+DQorICAgICAgPEZpbHRlcj5pbnNwZWN0b3Jcc2NyaXB0c1x0ZXN0czwvRmlsdGVyPg0KKyAg
ICA8L05vbmU+DQorICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3RvclxzY3JpcHRzXHRlc3Rz
XGV2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbiI+DQorICAgICAgPEZpbHRlcj5p
bnNwZWN0b3Jcc2NyaXB0c1x0ZXN0czwvRmlsdGVyPg0KKyAgICA8L05vbmU+DQorICAgIDxOb25l
IEluY2x1ZGU9Ii4uXGluc3BlY3RvclxzY3JpcHRzXHRlc3RzXGZhaWwtb24tZHVwbGljYXRlLXR5
cGUtZGVjbGFyYXRpb25zLmpzb24iPg0KKyAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXHNjcmlwdHNc
dGVzdHM8L0ZpbHRlcj4NCisgICAgPC9Ob25lPg0KKyAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNw
ZWN0b3Jcc2NyaXB0c1x0ZXN0c1xmYWlsLW9uLWVudW0td2l0aC1uby12YWx1ZXMuanNvbiI+DQor
ICAgICAgPEZpbHRlcj5pbnNwZWN0b3Jcc2NyaXB0c1x0ZXN0czwvRmlsdGVyPg0KKyAgICA8L05v
bmU+DQorICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3RvclxzY3JpcHRzXHRlc3RzXGZhaWwt
b24tc3RyaW5nLXR5cGVkLW9wdGlvbmFsLXBhcmFtZXRlci1mbGFnLmpzb24iPg0KKyAgICAgIDxG
aWx0ZXI+aW5zcGVjdG9yXHNjcmlwdHNcdGVzdHM8L0ZpbHRlcj4NCisgICAgPC9Ob25lPg0KKyAg
ICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3Jcc2NyaXB0c1x0ZXN0c1xmYWlsLW9uLXN0cmlu
Zy10eXBlZC1vcHRpb25hbC10eXBlLW1lbWJlci5qc29uIj4NCisgICAgICA8RmlsdGVyPmluc3Bl
Y3RvclxzY3JpcHRzXHRlc3RzPC9GaWx0ZXI+DQorICAgIDwvTm9uZT4NCisgICAgPE5vbmUgSW5j
bHVkZT0iLi5caW5zcGVjdG9yXHNjcmlwdHNcdGVzdHNcZmFpbC1vbi10eXBlLWRlY2xhcmF0aW9u
LXVzaW5nLXR5cGUtcmVmZXJlbmNlLmpzb24iPg0KKyAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXHNj
cmlwdHNcdGVzdHM8L0ZpbHRlcj4NCisgICAgPC9Ob25lPg0KKyAgICA8Tm9uZSBJbmNsdWRlPSIu
LlxpbnNwZWN0b3Jcc2NyaXB0c1x0ZXN0c1xmYWlsLW9uLXR5cGUtd2l0aC1sb3dlcmNhc2UtbmFt
ZS5qc29uIj4NCisgICAgICA8RmlsdGVyPmluc3BlY3RvclxzY3JpcHRzXHRlc3RzPC9GaWx0ZXI+
DQorICAgIDwvTm9uZT4NCisgICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXHNjcmlwdHNc
dGVzdHNcZmFpbC1vbi11bmtub3duLXR5cGUtcmVmZXJlbmNlLWluLXR5cGUtZGVjbGFyYXRpb24u
anNvbiI+DQorICAgICAgPEZpbHRlcj5pbnNwZWN0b3Jcc2NyaXB0c1x0ZXN0czwvRmlsdGVyPg0K
KyAgICA8L05vbmU+DQorICAgIDxOb25lIEluY2x1ZGU9Ii4uXGluc3BlY3RvclxzY3JpcHRzXHRl
c3RzXGZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVyZW5jZS1pbi10eXBlLW1lbWJlci5qc29uIj4N
CisgICAgICA8RmlsdGVyPmluc3BlY3RvclxzY3JpcHRzXHRlc3RzPC9GaWx0ZXI+DQorICAgIDwv
Tm9uZT4NCisgICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXHNjcmlwdHNcdGVzdHNcc2Ft
ZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbiI+DQorICAgICAgPEZpbHRlcj5pbnNwZWN0
b3Jcc2NyaXB0c1x0ZXN0czwvRmlsdGVyPg0KKyAgICA8L05vbmU+DQorICAgIDxOb25lIEluY2x1
ZGU9Ii4uXGluc3BlY3RvclxzY3JpcHRzXHRlc3RzXHNoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0
dGVycy5qc29uIj4NCisgICAgICA8RmlsdGVyPmluc3BlY3RvclxzY3JpcHRzXHRlc3RzPC9GaWx0
ZXI+DQorICAgIDwvTm9uZT4NCisgICAgPE5vbmUgSW5jbHVkZT0iLi5caW5zcGVjdG9yXHNjcmlw
dHNcdGVzdHNcdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24iPg0K
KyAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXHNjcmlwdHNcdGVzdHM8L0ZpbHRlcj4NCisgICAgPC9O
b25lPg0KKyAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3Jcc2NyaXB0c1x0ZXN0c1x0eXBl
LWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbiI+DQorICAgICAgPEZpbHRlcj5pbnNwZWN0b3Jc
c2NyaXB0c1x0ZXN0czwvRmlsdGVyPg0KKyAgICA8L05vbmU+DQorICAgIDxOb25lIEluY2x1ZGU9
Ii4uXGluc3BlY3RvclxzY3JpcHRzXHRlc3RzXHR5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpz
b24iPg0KKyAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXHNjcmlwdHNcdGVzdHM8L0ZpbHRlcj4NCisg
ICAgPC9Ob25lPg0KKyAgICA8Tm9uZSBJbmNsdWRlPSIuLlxpbnNwZWN0b3Jcc2NyaXB0c1x0ZXN0
c1x0eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24iPg0KKyAgICAgIDxGaWx0ZXI+aW5z
cGVjdG9yXHNjcmlwdHNcdGVzdHM8L0ZpbHRlcj4NCisgICAgPC9Ob25lPg0KKyAgICA8Tm9uZSBJ
bmNsdWRlPSIuLlxpbnNwZWN0b3Jcc2NyaXB0c1x0ZXN0c1x0eXBlLXJlcXVpcmluZy1ydW50aW1l
LWNhc3RzLmpzb24iPg0KKyAgICAgIDxGaWx0ZXI+aW5zcGVjdG9yXHNjcmlwdHNcdGVzdHM8L0Zp
bHRlcj4NCisgICAgPC9Ob25lPg0KKyAgPC9JdGVtR3JvdXA+DQorICA8SXRlbUdyb3VwPg0KKyAg
ICA8TUFTTSBJbmNsdWRlPSIkKENvbmZpZ3VyYXRpb25CdWlsZERpcilcb2JqJChQbGF0Zm9ybUFy
Y2hpdGVjdHVyZSlcJChQcm9qZWN0TmFtZSlcRGVyaXZlZFNvdXJjZXNcTG93TGV2ZWxJbnRlcnBy
ZXRlcldpbi5hc20iPg0KKyAgICAgIDxGaWx0ZXI+RGVyaXZlZCBTb3VyY2VzPC9GaWx0ZXI+DQor
ICAgIDwvTUFTTT4NCisgICAgPE1BU00gSW5jbHVkZT0iLi5caml0XEpJVFN0dWJzTVNWQzY0LmFz
bSI+DQorICAgICAgPEZpbHRlcj5qaXQ8L0ZpbHRlcj4NCisgICAgPC9NQVNNPg0KKyAgPC9JdGVt
R3JvdXA+DQogPC9Qcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL2NvcHktZmls
ZXMuY21kIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovY29w
eS1maWxlcy5jbWQKaW5kZXggNDY1NWU4Y2QzZDZjYTc5NjliMDBlZDdkZTllZWRiOTkxM2NiNTU3
NS4uZWI4NGJjMThmZjQzZDJjNzhiNTIyMmFlZTRlYmVkYTVmYjBhN2EwZSAxMDA3NTUKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovY29weS1maWxlcy5j
bWQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovY29w
eS1maWxlcy5jbWQKQEAgLTY0LDYgKzY0LDcgQEAgZm9yICUlZCBpbiAoCiBlY2hvIENvcHlpbmcg
SW5zcGVjdG9yIHNjcmlwdHMgYXMgaWYgdGhleSB3ZXJlIHByaXZhdGUgaGVhZGVycy4uLg0KIGZv
ciAlJWQgaW4gKA0KICAgICBpbnNwZWN0b3Jcc2NyaXB0cw0KKwlpbnNwZWN0b3Jcc2NyaXB0c1xj
b2RlZ2VuDQogKSBkbyAoDQogICAgIHhjb3B5IC95IC9kIC4uXCUlZFwqICIlUHJpdmF0ZUhlYWRl
cnNEaXJlY3RvcnklIiA+TlVMDQogKQ0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXgg
M2I2ZDJkYzZiZTk3OWIwZmMyOTI2NWUwMzEwYjBjMjQ0NGY1ZjA5Yi4uNzkxMmI0NTNjZThjYjNl
NmVhZGQ4ZjA1MWViZDhiMWZhZTlhZjg1ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
QEAgLTE2MzUsOCArMTYzNSw2IEBACiAJCUE1MzI0MzhBMTg1NjgzMzUwMDJFRDY5MiAvKiBJbnNw
ZWN0b3JKU0Zyb250ZW5kRGlzcGF0Y2hlcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEE1MzI0Mzg0MTg1NjgzMTcwMDJFRDY5MiAvKiBJbnNwZWN0b3JK
U0Zyb250ZW5kRGlzcGF0Y2hlcnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQlBNTMyNDM4QjE4NTY4MzM1MDAyRUQ2OTIgLyogSW5zcGVjdG9ySlNU
eXBlQnVpbGRlcnMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTUzMjQzODUxODU2ODMxNzAwMkVENjkyIC8qIEluc3BlY3RvckpTVHlwZUJ1aWxkZXJz
LmNwcCAqLzsgfTsKIAkJQTUzMjQzOEMxODU2ODMzNTAwMkVENjkyIC8qIEluc3BlY3RvckpTVHlw
ZUJ1aWxkZXJzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBNTMyNDM4NjE4NTY4MzE3MDAyRUQ2OTIgLyogSW5zcGVjdG9ySlNUeXBlQnVpbGRlcnMuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlBNTMyNDM5
MjE4NTY5NzA5MDAyRUQ2OTIgLyogQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weSBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1MzI0MzhGMTg1Njk2RTYwMDJF
RDY5MiAvKiBDb2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUE1MzI0MzkzMTg1Njk3MDkwMDJFRDY5MiAvKiBD
b2RlR2VuZXJhdG9ySW5zcGVjdG9yU3RyaW5ncy5weSBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE1MzI0MzkwMTg1Njk2RTYwMDJFRDY5MiAvKiBDb2RlR2Vu
ZXJhdG9ySW5zcGVjdG9yU3RyaW5ncy5weSAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQlBNTMyNDM5NDE4NTY5NzA5MDAyRUQ2OTIgLyogZ2VuZXJhdGUt
Y29tYmluZWQtaW5zcGVjdG9yLWpzb24ucHkgaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBNTMyNDM5MTE4NTY5NkU2MDAyRUQ2OTIgLyogZ2VuZXJhdGUtY29t
YmluZWQtaW5zcGVjdG9yLWpzb24ucHkgKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJQTUzMjQzOTgxODU2QTQ4OTAwMkVENjkyIC8qIEluc3BlY3RvckpT
Lmpzb24gaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNTMy
NDM5NTE4NTZBNDc1MDAyRUQ2OTIgLyogSW5zcGVjdG9ySlMuanNvbiAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBNTNDRTA4NTE4QkMxQTU2MDBCRURG
NzYgLyogQ29uc29sZVByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBNTNDRTA4MTE4QkMxQTU2MDBCRURGNzYgLyogQ29uc29sZVByb3Rv
dHlwZS5jcHAgKi87IH07CkBAIC0yMDYyLDYgKzIwNjAsMTcgQEAKIAkJQzJGQ0FFMTIxN0E5QzI0
RTAwMzRDNzM1IC8qIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDMkZDQUUwRTE3QTlDMjRFMDAzNEM3MzUg
LyogQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmNwcCAqLzsgfTsKIAkJQzJGQ0FFMTMxN0E5QzI0
RTAwMzRDNzM1IC8qIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzJGQ0FFMEYxN0E5QzI0RTAwMzRDNzM1IC8q
IEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCUMyRkUxOEE0MTZCQUVDNDAwMEFGMzA2MSAvKiBTdHJ1Y3R1
cmVSYXJlRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQzJGRTE4QTMxNkJBRUM0MDAwQUYzMDYxIC8qIFN0cnVjdHVyZVJhcmVEYXRhLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQzQ3MDNDQzAxOTI4
NDQ5NjAwMTNGQkVBIC8qIGdlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weSBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM0NzAzQ0JGMTky
ODQ0OTYwMDEzRkJFQSAvKiBnZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQzQ3MDND
Q0UxOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRlX2JhY2tlbmRfY29tbWFuZHMucHkgaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNDcwM0NDMzE5Mjg0NEND
MDAxM0ZCRUEgLyogZ2VuZXJhdGVfYmFja2VuZF9jb21tYW5kcy5weSAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlDNDcwM0NDRjE5Mjg0NENDMDAxM0ZC
RUEgLyogZ2VuZXJhdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weSBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM0NzAzQ0M0MTkyODQ0Q0MwMDEzRkJF
QSAvKiBnZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5ICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUM0NzAzQ0QwMTkyODQ0Q0MwMDEz
RkJFQSAvKiBnZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkgaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDNDcwM0NDNTE5Mjg0
NENDMDAxM0ZCRUEgLyogZ2VuZXJhdGVfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9u
LnB5ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUM0
NzAzQ0QxMTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0ZV9mcm9udGVuZF9kaXNwYXRjaGVyX2hl
YWRlci5weSBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM0
NzAzQ0M2MTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0ZV9mcm9udGVuZF9kaXNwYXRjaGVyX2hl
YWRlci5weSAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQlDNDcwM0NEMjE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJhdGVfZnJvbnRlbmRfZGlzcGF0Y2hl
cl9pbXBsZW1lbnRhdGlvbi5weSBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEM0NzAzQ0M3MTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0ZV9mcm9udGVuZF9k
aXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CisJCUM0NzAzQ0QzMTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0
ZV90eXBlX2J1aWxkZXJfaGVhZGVyLnB5IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQzQ3MDNDQzgxOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRlX3R5cGVf
YnVpbGRlcl9oZWFkZXIucHkgKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJQzQ3MDNDRDQxOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRlX3R5cGVfYnVp
bGRlcl9pbXBsZW1lbnRhdGlvbi5weSBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEM0NzAzQ0M5MTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0ZV90eXBlX2J1
aWxkZXJfaW1wbGVtZW50YXRpb24ucHkgKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJQzQ3MDNDRDUxOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRvcl90
ZW1wbGF0ZXMucHkgaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBDNDcwM0NDQTE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJhdG9yX3RlbXBsYXRlcy5weSAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlDNDcwM0NENjE5
Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJhdG9yLnB5IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQzQ3MDNDQ0IxOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRv
ci5weSAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlD
NDcwM0NENzE5Mjg0NENDMDAxM0ZCRUEgLyogbW9kZWxzLnB5IGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzQ3MDNDQ0MxOTI4NDRDQzAwMTNGQkVBIC8qIG1v
ZGVscy5weSAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQlFMTI0QThGNzBFNTU1Nzc1MDAzMDkxRjEgLyogT3BhcXVlSlNTdHJpbmcuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxMjRBOEY1MEU1NTU3NzUwMDMw
OTFGMSAvKiBPcGFxdWVKU1N0cmluZy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCUUxMjRBOEY4MEU1NTU3NzUwMDMwOTFGMSAvKiBPcGFxdWVKU1N0
cmluZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBF
MTI0QThGNjBFNTU1Nzc1MDAzMDkxRjEgLyogT3BhcXVlSlNTdHJpbmcuY3BwICovOyB9OwogCQlF
MThFM0E1OTBERjkyNzhDMDBEOTBCMzQgLyogVk0uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE4RTNBNTcwREY5Mjc4QzAwRDkwQjM0IC8qIFZNLmNw
cCAqLzsgfTsKQEAgLTMzMTIsOCArMzMyMSw2IEBACiAJCUE1MzI0Mzg1MTg1NjgzMTcwMDJFRDY5
MiAvKiBJbnNwZWN0b3JKU1R5cGVCdWlsZGVycy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbnNw
ZWN0b3JKU1R5cGVCdWlsZGVycy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE1
MzI0Mzg2MTg1NjgzMTcwMDJFRDY5MiAvKiBJbnNwZWN0b3JKU1R5cGVCdWlsZGVycy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBJbnNwZWN0b3JKU1R5cGVCdWlsZGVycy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlBNTMyNDM4RDE4NTY5NkNBMDAyRUQ2OTIgLyogcHJvdG9jb2wgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBmb2xkZXI7IHBhdGggPSBw
cm90b2NvbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTUzMjQzOEYxODU2OTZFNjAw
MkVENjkyIC8qIENvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnNjcmlw
dC5weXRob247IHBhdGggPSBDb2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5OyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQlBNTMyNDM5MDE4NTY5NkU2MDAyRUQ2OTIgLyogQ29kZUdlbmVyYXRv
ckluc3BlY3RvclN0cmluZ3MucHkgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnNjcmlwdC5weXRob247IHBhdGgg
PSBDb2RlR2VuZXJhdG9ySW5zcGVjdG9yU3RyaW5ncy5weTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQTUzMjQzOTExODU2OTZFNjAwMkVENjkyIC8qIGdlbmVyYXRlLWNvbWJpbmVkLWlu
c3BlY3Rvci1qc29uLnB5ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5zY3JpcHQucHl0aG9uOyBwYXRoID0gImdl
bmVyYXRlLWNvbWJpbmVkLWluc3BlY3Rvci1qc29uLnB5Ijsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQTUzMjQzOTUxODU2QTQ3NTAwMkVENjkyIC8qIEluc3BlY3RvckpTLmpzb24gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSB0ZXh0Lmpzb247IHBhdGggPSBJbnNwZWN0b3JKUy5qc29uOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlBNTMyNDM5NjE4NTZBNDc1MDAyRUQ2OTIgLyogSW5zcGVjdG9ySlNC
YWNrZW5kQ29tbWFuZHMuanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7IHBhdGgg
PSBJbnNwZWN0b3JKU0JhY2tlbmRDb21tYW5kcy5qczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTM3MjksNiArMzczNiwxOCBAQAogCQlDMkZDQUUwRTE3QTlDMjRFMDAzNEM3MzUgLyog
Qnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUMyRkNBRTBGMTdBOUMyNEUwMDM0QzczNSAvKiBCeXRlY29kZUxpdmVuZXNz
QW5hbHlzaXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQnl0ZWNvZGVMaXZl
bmVzc0FuYWx5c2lzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUMyRkUxOEEzMTZC
QUVDNDAwMEFGMzA2MSAvKiBTdHJ1Y3R1cmVSYXJlRGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBTdHJ1Y3R1cmVSYXJlRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlDNDcwM0NCRjE5Mjg0NDk2MDAxM0ZCRUEgLyogZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5zY3JpcHQucHl0aG9uOyBwYXRoID0g
ImdlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weSI7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUM0NzAzQ0MyMTkyODQ0Q0MwMDEzRkJFQSAvKiBfX2luaXRfXy5weSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHRleHQuc2NyaXB0LnB5dGhvbjsgbmFtZSA9IF9faW5pdF9fLnB5OyBwYXRoID0g
X19pbml0X18ucHk7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUM0NzAzQ0MzMTkyODQ0
Q0MwMDEzRkJFQSAvKiBnZW5lcmF0ZV9iYWNrZW5kX2NvbW1hbmRzLnB5ICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4
dC5zY3JpcHQucHl0aG9uOyBuYW1lID0gZ2VuZXJhdGVfYmFja2VuZF9jb21tYW5kcy5weTsgcGF0
aCA9IGdlbmVyYXRlX2JhY2tlbmRfY29tbWFuZHMucHk7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUM0NzAzQ0M0MTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0ZV9iYWNrZW5kX2Rpc3Bh
dGNoZXJfaGVhZGVyLnB5ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5zY3JpcHQucHl0aG9uOyBuYW1lID0gZ2Vu
ZXJhdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weTsgcGF0aCA9IGdlbmVyYXRlX2JhY2tl
bmRfZGlzcGF0Y2hlcl9oZWFkZXIucHk7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUM0
NzAzQ0M1MTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaW1w
bGVtZW50YXRpb24ucHkgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnNjcmlwdC5weXRob247IG5hbWUgPSBnZW5l
cmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHk7IHBhdGggPSBnZW5lcmF0
ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHk7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUM0NzAzQ0M2MTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0ZV9mcm9udGVu
ZF9kaXNwYXRjaGVyX2hlYWRlci5weSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQuc2NyaXB0LnB5dGhvbjsgbmFt
ZSA9IGdlbmVyYXRlX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5OyBwYXRoID0gZ2VuZXJh
dGVfZnJvbnRlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHk7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUM0NzAzQ0M3MTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0ZV9mcm9udGVuZF9kaXNw
YXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5zY3JpcHQucHl0aG9uOyBu
YW1lID0gZ2VuZXJhdGVfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weTsgcGF0
aCA9IGdlbmVyYXRlX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHk7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUM0NzAzQ0M4MTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5l
cmF0ZV90eXBlX2J1aWxkZXJfaGVhZGVyLnB5ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5zY3JpcHQucHl0aG9u
OyBuYW1lID0gZ2VuZXJhdGVfdHlwZV9idWlsZGVyX2hlYWRlci5weTsgcGF0aCA9IGdlbmVyYXRl
X3R5cGVfYnVpbGRlcl9oZWFkZXIucHk7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUM0
NzAzQ0M5MTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0ZV90eXBlX2J1aWxkZXJfaW1wbGVtZW50
YXRpb24ucHkgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnNjcmlwdC5weXRob247IG5hbWUgPSBnZW5lcmF0ZV90
eXBlX2J1aWxkZXJfaW1wbGVtZW50YXRpb24ucHk7IHBhdGggPSBnZW5lcmF0ZV90eXBlX2J1aWxk
ZXJfaW1wbGVtZW50YXRpb24ucHk7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUM0NzAz
Q0NBMTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0b3JfdGVtcGxhdGVzLnB5ICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
dGV4dC5zY3JpcHQucHl0aG9uOyBuYW1lID0gZ2VuZXJhdG9yX3RlbXBsYXRlcy5weTsgcGF0aCA9
IGdlbmVyYXRvcl90ZW1wbGF0ZXMucHk7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUM0
NzAzQ0NCMTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0b3IucHkgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnNj
cmlwdC5weXRob247IG5hbWUgPSBnZW5lcmF0b3IucHk7IHBhdGggPSBnZW5lcmF0b3IucHk7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUM0NzAzQ0NDMTkyODQ0Q0MwMDEzRkJFQSAvKiBt
b2RlbHMucHkgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnNjcmlwdC5weXRob247IG5hbWUgPSBtb2RlbHMucHk7
IHBhdGggPSBtb2RlbHMucHk7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQyMTIwMjI4
MEFENDMxMEMwMEVENzlCNiAvKiBEYXRlQ29udmVyc2lvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gRGF0ZUNvbnZlcnNpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlEMjEyMDIyOTBBRDQzMTBDMDBFRDc5QjYgLyogRGF0ZUNvbnZlcnNpb24u
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERhdGVDb252ZXJzaW9uLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxMjRBOEY1MEU1NTU3NzUwMDMwOTFGMSAvKiBP
cGFxdWVKU1N0cmluZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBPcGFxdWVK
U1N0cmluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTU3OCwxMCArNTU5Nywx
MCBAQAogCQlBNTMyNDM4RTE4NTY5NkNFMDAyRUQ2OTIgLyogc2NyaXB0cyAqLyA9IHsKIAkJCWlz
YSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJQTUzMjQzOEYxODU2OTZFNjAwMkVE
NjkyIC8qIENvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkgKi8sCi0JCQkJQTUzMjQzOTAxODU2OTZF
NjAwMkVENjkyIC8qIENvZGVHZW5lcmF0b3JJbnNwZWN0b3JTdHJpbmdzLnB5ICovLAorCQkJCUM0
NzAzQ0MxMTkyODQ0QTQwMDEzRkJFQSAvKiBjb2RlZ2VuICovLAogCQkJCUE1ODQwRTI2MTg3Qzk4
MDcwMDg0M0IxMCAvKiBjc3NtaW4ucHkgKi8sCiAJCQkJQTUzMjQzOTExODU2OTZFNjAwMkVENjky
IC8qIGdlbmVyYXRlLWNvbWJpbmVkLWluc3BlY3Rvci1qc29uLnB5ICovLAorCQkJCUM0NzAzQ0JG
MTkyODQ0OTYwMDEzRkJFQSAvKiBnZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkgKi8sCiAJCQkJQTU4NDBFMjgxODdDQTVCODAwODQzQjEwIC8qIGlubGluZS1hbmQtbWluaWZ5
LXN0eWxlc2hlZXRzLWFuZC1zY3JpcHRzLnB5ICovLAogCQkJCUE1MTNFNUM0MTg1RjkyREMwMDdF
OTVBRCAvKiBqc21pbi5weSAqLywKIAkJCQlBNTEzRTVDNTE4NUY5MkYwMDA3RTk1QUQgLyogeHhk
LnBsICovLApAQCAtNTY5OSw2ICs1NzE4LDI0IEBACiAJCQlwYXRoID0gYnVpbHRpbnM7CiAJCQlz
b3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OworCQlDNDcwM0NDMTE5Mjg0NEE0MDAxM0ZCRUEg
LyogY29kZWdlbiAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJ
CQkJQzQ3MDNDQzIxOTI4NDRDQzAwMTNGQkVBIC8qIF9faW5pdF9fLnB5ICovLAorCQkJCUM0NzAz
Q0MzMTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0ZV9iYWNrZW5kX2NvbW1hbmRzLnB5ICovLAor
CQkJCUM0NzAzQ0M0MTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNo
ZXJfaGVhZGVyLnB5ICovLAorCQkJCUM0NzAzQ0M1MTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0
ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkgKi8sCisJCQkJQzQ3MDNDQzYx
OTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRlX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5
ICovLAorCQkJCUM0NzAzQ0M3MTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0ZV9mcm9udGVuZF9k
aXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5ICovLAorCQkJCUM0NzAzQ0M4MTkyODQ0Q0MwMDEz
RkJFQSAvKiBnZW5lcmF0ZV90eXBlX2J1aWxkZXJfaGVhZGVyLnB5ICovLAorCQkJCUM0NzAzQ0M5
MTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0ZV90eXBlX2J1aWxkZXJfaW1wbGVtZW50YXRpb24u
cHkgKi8sCisJCQkJQzQ3MDNDQ0ExOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRvcl90ZW1wbGF0
ZXMucHkgKi8sCisJCQkJQzQ3MDNDQ0IxOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRvci5weSAq
LywKKwkJCQlDNDcwM0NDQzE5Mjg0NENDMDAxM0ZCRUEgLyogbW9kZWxzLnB5ICovLAorCQkJKTsK
KwkJCXBhdGggPSBjb2RlZ2VuOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKIC8q
IEVuZCBQQlhHcm91cCBzZWN0aW9uICovCiAKIC8qIEJlZ2luIFBCWEhlYWRlcnNCdWlsZFBoYXNl
IHNlY3Rpb24gKi8KQEAgLTU5ODcsNiArNjAyNCwxOSBAQAogCQkJCTJBQUJDREU3MThFRjI5NDIw
MDAwMjA5NiAvKiBHQ0xvZ2dpbmcuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFNTI0OEY5MTkxNDQy
RDkwMEI3RkRFNCAvKiBWYXJpYWJsZVdhdGNocG9pbnRTZXRJbmxpbmVzLmggaW4gSGVhZGVycyAq
LywKIAkJCQlDMkRBNzc4MzE4RTI1OTk5MDA2NkZDQjYgLyogSGVhcElubGluZXMuaCBpbiBIZWFk
ZXJzICovLAorCQkJCUE1MzI0Mzk0MTg1Njk3MDkwMDJFRDY5MiAvKiBnZW5lcmF0ZS1jb21iaW5l
ZC1pbnNwZWN0b3ItanNvbi5weSBpbiBIZWFkZXJzICovLAorCQkJCUE1ODQwRTI3MTg3Qzk4MUUw
MDg0M0IxMCAvKiBjc3NtaW4ucHkgaW4gSGVhZGVycyAqLywKKwkJCQlDNDcwM0NEMzE5Mjg0NEND
MDAxM0ZCRUEgLyogZ2VuZXJhdGVfdHlwZV9idWlsZGVyX2hlYWRlci5weSBpbiBIZWFkZXJzICov
LAorCQkJCUM0NzAzQ0QyMTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0ZV9mcm9udGVuZF9kaXNw
YXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5IGluIEhlYWRlcnMgKi8sCisJCQkJQzQ3MDNDRDExOTI4
NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRlX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5IGlu
IEhlYWRlcnMgKi8sCisJCQkJQzQ3MDNDRDUxOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRvcl90
ZW1wbGF0ZXMucHkgaW4gSGVhZGVycyAqLywKKwkJCQlDNDcwM0NENjE5Mjg0NENDMDAxM0ZCRUEg
LyogZ2VuZXJhdG9yLnB5IGluIEhlYWRlcnMgKi8sCisJCQkJQzQ3MDNDQ0YxOTI4NDRDQzAwMTNG
QkVBIC8qIGdlbmVyYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkgaW4gSGVhZGVycyAq
LywKKwkJCQlDNDcwM0NDMDE5Mjg0NDk2MDAxM0ZCRUEgLyogZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5IGluIEhlYWRlcnMgKi8sCisJCQkJQzQ3MDNDRDAxOTI4NDRDQzAw
MTNGQkVBIC8qIGdlbmVyYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSBp
biBIZWFkZXJzICovLAorCQkJCUM0NzAzQ0NFMTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0ZV9i
YWNrZW5kX2NvbW1hbmRzLnB5IGluIEhlYWRlcnMgKi8sCisJCQkJQzQ3MDNDRDQxOTI4NDRDQzAw
MTNGQkVBIC8qIGdlbmVyYXRlX3R5cGVfYnVpbGRlcl9pbXBsZW1lbnRhdGlvbi5weSBpbiBIZWFk
ZXJzICovLAorCQkJCUM0NzAzQ0Q3MTkyODQ0Q0MwMDEzRkJFQSAvKiBtb2RlbHMucHkgaW4gSGVh
ZGVycyAqLywKIAkJCQkyQUFDRTYzRDE4Q0E1QTAzMDBFRDAxOTEgLyogR0NBY3Rpdml0eUNhbGxi
YWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQkyQTgzNjM4NjE4RDdEMEVFMDAwMEVCQ0MgLyogRWRl
bkdDQWN0aXZpdHlDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkE4MzYzOEExOEQ3RDBG
RTAwMDBFQkNDIC8qIEZ1bGxHQ0FjdGl2aXR5Q2FsbGJhY2suaCBpbiBIZWFkZXJzICovLApAQCAt
NjA0Niw4ICs2MDk2LDYgQEAKIAkJCQkwRkQ4QTMxNDE3RDQzMjZDMDBDQTJDNDAgLyogQ29kZUJs
b2NrU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjk2RUJCMzE2Njc2RUY2MDA4QkFERTMgLyog
Q29kZUJsb2NrV2l0aEpJVFR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3N0YxODIyMTY0MDg4
QjIwMDY0MEE0NyAvKiBDb2RlQ2FjaGUuaCBpbiBIZWFkZXJzICovLAotCQkJCUE1MzI0MzkyMTg1
Njk3MDkwMDJFRDY5MiAvKiBDb2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5IGluIEhlYWRlcnMgKi8s
Ci0JCQkJQTUzMjQzOTMxODU2OTcwOTAwMkVENjkyIC8qIENvZGVHZW5lcmF0b3JJbnNwZWN0b3JT
dHJpbmdzLnB5IGluIEhlYWRlcnMgKi8sCiAJCQkJODZFMTE2QjEwRkU3NUFDODAwQjUxMkJDIC8q
IENvZGVMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCRDdFNjkxNDQ3OTk5NjAwNDgx
MzE1IC8qIENvZGVPcmlnaW4uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjFDMjdEMTRCRTcyN0Ew
MEFEQzY0QiAvKiBDb2RlU3BlY2lhbGl6YXRpb25LaW5kLmggaW4gSGVhZGVycyAqLywKQEAgLTYw
NzgsNyArNjEyNiw2IEBACiAJCQkJQzIxOEQxNDAxNjU1Q0ZENTAwNjJCQjgxIC8qIENvcHlXb3Jr
TGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkE2ODI5NUIxODc1RjgwNTAwQjZDM0UyIC8qIENv
cHlXcml0ZUJhcnJpZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTVERTZFNUIzMEUxNzI4RUMwMDE4
MDQwNyAvKiBjcmVhdGVfaGFzaF90YWJsZSBpbiBIZWFkZXJzICovLAotCQkJCUE1ODQwRTI3MTg3
Qzk4MUUwMDg0M0IxMCAvKiBjc3NtaW4ucHkgaW4gSGVhZGVycyAqLywKIAkJCQkwRjQyNkE0QjE0
NjBDRDZFMDAxMzFGOEYgLyogRGF0YUZvcm1hdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2
REYxN0I2QjVBQjAwQTdBRTNGIC8qIERhdGFWaWV3LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0Qy
MDM0QTBFMTcxMzVFMDAyQzdFODIgLyogRGF0ZUNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywK
QEAgLTYzMTksNyArNjM2Niw2IEBACiAJCQkJMEYyQjY2QUYxN0I2QjU0NTAwQTdBRTNGIC8qIEdD
SW5jb21pbmdSZWZDb3VudGVkU2V0SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzIyMzlE
MUIxNjI2MkJERDAwNUFDNUZEIC8qIEdDVGhyZWFkLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMjEx
MjJFMjE1REQ5QUIzMDA3OTBFM0EgLyogR0NUaHJlYWRTaGFyZWREYXRhLmggaW4gSGVhZGVycyAq
LywKLQkJCQlBNTMyNDM5NDE4NTY5NzA5MDAyRUQ2OTIgLyogZ2VuZXJhdGUtY29tYmluZWQtaW5z
cGVjdG9yLWpzb24ucHkgaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZFMDE3QjZCNUFCMDBBN0FF
M0YgLyogR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjFGRTUx
QzE5MjJBM0JDMDA2OTg3QzUgLyogQWJvcnRSZWFzb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
MkI2NkUxMTdCNkI1QUIwMEE3QUUzRiAvKiBHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmgg
aW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3IvQ29uc29sZU1lc3NhZ2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9D
b25zb2xlTWVzc2FnZS5jcHAKaW5kZXggNDA3OTBiZjVkOWU1OTFiZTBlMzVmNjJhNDUxODc4YmNk
NTcyYzdmNi4uMDIwM2JjMWE5ZjczNmI0OGZjMjFlYzExYzhlM2I0OTUwOWQxMDk1OSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9Db25zb2xlTWVzc2FnZS5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9Db25zb2xlTWVzc2FnZS5jcHAK
QEAgLTEzMSw3ICsxMzEsNyBAQCB2b2lkIENvbnNvbGVNZXNzYWdlOjphdXRvZ2VuZXJhdGVNZXRh
ZGF0YShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUpCiAgICAgfQogfQogCi1zdGF0aWMgSW5zcGVjdG9y
OjpUeXBlQnVpbGRlcjo6Q29uc29sZTo6Q29uc29sZU1lc3NhZ2U6OlNvdXJjZTo6RW51bSBtZXNz
YWdlU291cmNlVmFsdWUoTWVzc2FnZVNvdXJjZSBzb3VyY2UpCitzdGF0aWMgSW5zcGVjdG9yOjpU
eXBlQnVpbGRlcjo6Q29uc29sZTo6Q29uc29sZU1lc3NhZ2U6OlNvdXJjZSBtZXNzYWdlU291cmNl
VmFsdWUoTWVzc2FnZVNvdXJjZSBzb3VyY2UpCiB7CiAgICAgc3dpdGNoIChzb3VyY2UpIHsKICAg
ICBjYXNlIE1lc3NhZ2VTb3VyY2U6OlhNTDogcmV0dXJuIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6
OkNvbnNvbGU6OkNvbnNvbGVNZXNzYWdlOjpTb3VyY2U6OlhNTDsKQEAgLTE0OCw3ICsxNDgsNyBA
QCBzdGF0aWMgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q29uc29sZTo6Q29uc29sZU1lc3NhZ2U6
OlNvdXJjZTo6RW51bSBtZXNzYWdlU291cgogICAgIHJldHVybiBJbnNwZWN0b3I6OlR5cGVCdWls
ZGVyOjpDb25zb2xlOjpDb25zb2xlTWVzc2FnZTo6U291cmNlOjpPdGhlcjsKIH0KIAotc3RhdGlj
IEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNvbnNvbGU6OkNvbnNvbGVNZXNzYWdlOjpUeXBlOjpF
bnVtIG1lc3NhZ2VUeXBlVmFsdWUoTWVzc2FnZVR5cGUgdHlwZSkKK3N0YXRpYyBJbnNwZWN0b3I6
OlR5cGVCdWlsZGVyOjpDb25zb2xlOjpDb25zb2xlTWVzc2FnZTo6VHlwZSBtZXNzYWdlVHlwZVZh
bHVlKE1lc3NhZ2VUeXBlIHR5cGUpCiB7CiAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgY2FzZSBN
ZXNzYWdlVHlwZTo6TG9nOiByZXR1cm4gSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q29uc29sZTo6
Q29uc29sZU1lc3NhZ2U6OlR5cGU6OkxvZzsKQEAgLTE2OCw3ICsxNjgsNyBAQCBzdGF0aWMgSW5z
cGVjdG9yOjpUeXBlQnVpbGRlcjo6Q29uc29sZTo6Q29uc29sZU1lc3NhZ2U6OlR5cGU6OkVudW0g
bWVzc2FnZVR5cGVWYQogICAgIHJldHVybiBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDb25zb2xl
OjpDb25zb2xlTWVzc2FnZTo6VHlwZTo6TG9nOwogfQogCi1zdGF0aWMgSW5zcGVjdG9yOjpUeXBl
QnVpbGRlcjo6Q29uc29sZTo6Q29uc29sZU1lc3NhZ2U6OkxldmVsOjpFbnVtIG1lc3NhZ2VMZXZl
bFZhbHVlKE1lc3NhZ2VMZXZlbCBsZXZlbCkKK3N0YXRpYyBJbnNwZWN0b3I6OlR5cGVCdWlsZGVy
OjpDb25zb2xlOjpDb25zb2xlTWVzc2FnZTo6TGV2ZWwgbWVzc2FnZUxldmVsVmFsdWUoTWVzc2Fn
ZUxldmVsIGxldmVsKQogewogICAgIHN3aXRjaCAobGV2ZWwpIHsKICAgICBjYXNlIE1lc3NhZ2VM
ZXZlbDo6TG9nOiByZXR1cm4gSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q29uc29sZTo6Q29uc29s
ZU1lc3NhZ2U6OkxldmVsOjpMb2c7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL0luamVjdGVkU2NyaXB0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3IvSW5qZWN0ZWRTY3JpcHQuY3BwCmluZGV4IDc4NWRhZDBhYzg4ZTRlNzBkOTg1ZjYwOTg4
MDVlZGM0NWJhZjY4ZjEuLmU1YTI2MjJkZGViMTQ1MmZlOTJiY2E0NmE4MDQ1OWI5OWJhZDQwOGEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3Jp
cHQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3Jp
cHQuY3BwCkBAIC0xMDAsMTMgKzEwMCwxMyBAQCB2b2lkIEluamVjdGVkU2NyaXB0OjpnZXRGdW5j
dGlvbkRldGFpbHMoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmCiAKICAg
ICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHJlc3VsdFZhbHVlOwogICAgIG1ha2VDYWxsKGZ1bmN0
aW9uLCAmcmVzdWx0VmFsdWUpOwotICAgIGlmICghcmVzdWx0VmFsdWUgfHwgcmVzdWx0VmFsdWUt
PnR5cGUoKSAhPSBJbnNwZWN0b3JWYWx1ZTo6VHlwZU9iamVjdCkgeworICAgIGlmICghcmVzdWx0
VmFsdWUgfHwgcmVzdWx0VmFsdWUtPnR5cGUoKSAhPSBJbnNwZWN0b3JWYWx1ZTo6VHlwZTo6T2Jq
ZWN0KSB7CiAgICAgICAgIGlmICghcmVzdWx0VmFsdWUtPmFzU3RyaW5nKGVycm9yU3RyaW5nKSkK
ICAgICAgICAgICAgICplcnJvclN0cmluZyA9IEFTQ0lJTGl0ZXJhbCgiSW50ZXJuYWwgZXJyb3Ii
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgICpyZXN1bHQgPSBJbnNwZWN0b3I6OlR5
cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6RnVuY3Rpb25EZXRhaWxzOjpydW50aW1lQ2FzdChyZXN1bHRW
YWx1ZSk7CisgICAgKnJlc3VsdCA9IEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpUeXBlQnVpbGRl
cjo6RGVidWdnZXI6OkZ1bmN0aW9uRGV0YWlscz46OnJ1bnRpbWVDYXN0KHJlc3VsdFZhbHVlKTsK
IH0KIAogdm9pZCBJbmplY3RlZFNjcmlwdDo6Z2V0UHJvcGVydGllcyhFcnJvclN0cmluZyogZXJy
b3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsIGJvb2wgb3duUHJvcGVydGllcywgUmVm
UHRyPEFycmF5PEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OlByb3BlcnR5RGVzY3Jp
cHRvcj4+KiBwcm9wZXJ0aWVzKQpAQCAtMTE3LDEyICsxMTcsMTIgQEAgdm9pZCBJbmplY3RlZFNj
cmlwdDo6Z2V0UHJvcGVydGllcyhFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmlu
ZyYgb2JqZWMKIAogICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gcmVzdWx0OwogICAgIG1ha2VD
YWxsKGZ1bmN0aW9uLCAmcmVzdWx0KTsKLSAgICBpZiAoIXJlc3VsdCB8fCByZXN1bHQtPnR5cGUo
KSAhPSBJbnNwZWN0b3JWYWx1ZTo6VHlwZUFycmF5KSB7CisgICAgaWYgKCFyZXN1bHQgfHwgcmVz
dWx0LT50eXBlKCkgIT0gSW5zcGVjdG9yVmFsdWU6OlR5cGU6OkFycmF5KSB7CiAgICAgICAgICpl
cnJvclN0cmluZyA9IEFTQ0lJTGl0ZXJhbCgiSW50ZXJuYWwgZXJyb3IiKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAotICAgICpwcm9wZXJ0aWVzID0gQXJyYXk8SW5zcGVjdG9yOjpUeXBlQnVp
bGRlcjo6UnVudGltZTo6UHJvcGVydHlEZXNjcmlwdG9yPjo6cnVudGltZUNhc3QocmVzdWx0KTsK
KyAgICAqcHJvcGVydGllcyA9IEJpbmRpbmdUcmFpdHM8QXJyYXk8SW5zcGVjdG9yOjpUeXBlQnVp
bGRlcjo6UnVudGltZTo6UHJvcGVydHlEZXNjcmlwdG9yPj46OnJ1bnRpbWVDYXN0KHJlc3VsdCk7
CiB9CiAKIHZvaWQgSW5qZWN0ZWRTY3JpcHQ6OmdldEludGVybmFsUHJvcGVydGllcyhFcnJvclN0
cmluZyogZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsIFJlZlB0cjxBcnJheTxJ
bnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpSdW50aW1lOjpJbnRlcm5hbFByb3BlcnR5RGVzY3JpcHRv
cj4+KiBwcm9wZXJ0aWVzKQpAQCAtMTMyLDEyICsxMzIsMTIgQEAgdm9pZCBJbmplY3RlZFNjcmlw
dDo6Z2V0SW50ZXJuYWxQcm9wZXJ0aWVzKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgY29uc3Qg
U3RyaW4KIAogICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gcmVzdWx0OwogICAgIG1ha2VDYWxs
KGZ1bmN0aW9uLCAmcmVzdWx0KTsKLSAgICBpZiAoIXJlc3VsdCB8fCByZXN1bHQtPnR5cGUoKSAh
PSBJbnNwZWN0b3JWYWx1ZTo6VHlwZUFycmF5KSB7CisgICAgaWYgKCFyZXN1bHQgfHwgcmVzdWx0
LT50eXBlKCkgIT0gSW5zcGVjdG9yVmFsdWU6OlR5cGU6OkFycmF5KSB7CiAgICAgICAgICplcnJv
clN0cmluZyA9IEFTQ0lJTGl0ZXJhbCgiSW50ZXJuYWwgZXJyb3IiKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIFJlZlB0cjxBcnJheTxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpSdW50
aW1lOjpJbnRlcm5hbFByb3BlcnR5RGVzY3JpcHRvcj4+IGFycmF5ID0gQXJyYXk8SW5zcGVjdG9y
OjpUeXBlQnVpbGRlcjo6UnVudGltZTo6SW50ZXJuYWxQcm9wZXJ0eURlc2NyaXB0b3I+OjpydW50
aW1lQ2FzdChyZXN1bHQpOworICAgIGF1dG8gYXJyYXkgPSBCaW5kaW5nVHJhaXRzPEFycmF5PElu
c3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OkludGVybmFsUHJvcGVydHlEZXNjcmlwdG9y
Pj46OnJ1bnRpbWVDYXN0KHJlc3VsdCk7CiAgICAgaWYgKGFycmF5LT5sZW5ndGgoKSA+IDApCiAg
ICAgICAgICpwcm9wZXJ0aWVzID0gYXJyYXk7CiB9CkBAIC0xNTIsOCArMTUyLDggQEAgUGFzc1Jl
ZlB0cjxBcnJheTxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6Q2FsbEZyYW1lPj4g
SW5qZWN0ZWRTY3JpcHQ6OncKICAgICBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSBjYWxsRnJhbWVz
VmFsdWUgPSBjYWxsRnVuY3Rpb25XaXRoRXZhbEVuYWJsZWQoZnVuY3Rpb24sIGhhZEV4Y2VwdGlv
bik7CiAgICAgQVNTRVJUKCFoYWRFeGNlcHRpb24pOwogICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1
ZT4gcmVzdWx0ID0gY2FsbEZyYW1lc1ZhbHVlLnRvSW5zcGVjdG9yVmFsdWUoc2NyaXB0U3RhdGUo
KSk7Ci0gICAgaWYgKHJlc3VsdC0+dHlwZSgpID09IEluc3BlY3RvclZhbHVlOjpUeXBlQXJyYXkp
Ci0gICAgICAgIHJldHVybiBBcnJheTxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6
Q2FsbEZyYW1lPjo6cnVudGltZUNhc3QocmVzdWx0KTsKKyAgICBpZiAocmVzdWx0LT50eXBlKCkg
PT0gSW5zcGVjdG9yVmFsdWU6OlR5cGU6OkFycmF5KQorICAgICAgICByZXR1cm4gQmluZGluZ1Ry
YWl0czxBcnJheTxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6Q2FsbEZyYW1lPj46
OnJ1bnRpbWVDYXN0KHJlc3VsdCk7CiAKICAgICByZXR1cm4gQXJyYXk8SW5zcGVjdG9yOjpUeXBl
QnVpbGRlcjo6RGVidWdnZXI6OkNhbGxGcmFtZT46OmNyZWF0ZSgpOwogfQpAQCAtMTczLDcgKzE3
Myw3IEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UnVudGltZTo6UmVtb3Rl
T2JqZWN0PiBJbmplY3RlZFNjcmlwdDo6d3JhcE9iCiAgICAgICAgIHJldHVybiBudWxscHRyOwog
CiAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmF3UmVzdWx0ID0gci50b0luc3BlY3RvclZh
bHVlKHNjcmlwdFN0YXRlKCkpLT5hc09iamVjdCgpOwotICAgIHJldHVybiBJbnNwZWN0b3I6OlR5
cGVCdWlsZGVyOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q6OnJ1bnRpbWVDYXN0KHJhd1Jlc3VsdCk7
CisgICAgcmV0dXJuIEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UnVudGlt
ZTo6UmVtb3RlT2JqZWN0Pjo6cnVudGltZUNhc3QocmF3UmVzdWx0KTsKIH0KIAogUGFzc1JlZlB0
cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+IEluamVjdGVk
U2NyaXB0Ojp3cmFwVGFibGUoY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIHRhYmxlLCBj
b25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYgY29sdW1ucykgY29uc3QKQEAgLTE5Myw3ICsx
OTMsNyBAQCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OlJlbW90
ZU9iamVjdD4gSW5qZWN0ZWRTY3JpcHQ6OndyYXBUYQogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
IAogICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJhd1Jlc3VsdCA9IHIudG9JbnNwZWN0b3JW
YWx1ZShzY3JpcHRTdGF0ZSgpKS0+YXNPYmplY3QoKTsKLSAgICByZXR1cm4gSW5zcGVjdG9yOjpU
eXBlQnVpbGRlcjo6UnVudGltZTo6UmVtb3RlT2JqZWN0OjpydW50aW1lQ2FzdChyYXdSZXN1bHQp
OworICAgIHJldHVybiBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlJ1bnRp
bWU6OlJlbW90ZU9iamVjdD46OnJ1bnRpbWVDYXN0KHJhd1Jlc3VsdCk7CiB9CiAKIERlcHJlY2F0
ZWQ6OlNjcmlwdFZhbHVlIEluamVjdGVkU2NyaXB0OjpmaW5kT2JqZWN0QnlJZChjb25zdCBTdHJp
bmcmIG9iamVjdElkKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9JbmplY3RlZFNjcmlwdEJhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9JbmplY3RlZFNjcmlwdEJhc2UuY3BwCmluZGV4IGQ5NTYxZTFmNGE3ODZmOTY1NTBl
MjJkYWEzNDIzN2VjOTNhZWNmMWIuLmZlMTBkNmM0YmZiYWZiZjI4NmNjM2E4ZDM1YzljNThkZDU0
MjRjMWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0
ZWRTY3JpcHRCYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0lu
amVjdGVkU2NyaXB0QmFzZS5jcHAKQEAgLTEyOCw3ICsxMjgsNyBAQCB2b2lkIEluamVjdGVkU2Ny
aXB0QmFzZTo6bWFrZUV2YWxDYWxsKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgRGVwcmVjYXRl
ZDo6U2NyaQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKHJlc3VsdC0+dHlwZSgp
ID09IEluc3BlY3RvclZhbHVlOjpUeXBlU3RyaW5nKSB7CisgICAgaWYgKHJlc3VsdC0+dHlwZSgp
ID09IEluc3BlY3RvclZhbHVlOjpUeXBlOjpTdHJpbmcpIHsKICAgICAgICAgcmVzdWx0LT5hc1N0
cmluZyhlcnJvclN0cmluZyk7CiAgICAgICAgIEFTU0VSVChlcnJvclN0cmluZy0+bGVuZ3RoKCkp
OwogICAgICAgICByZXR1cm47CkBAIC0xNDcsNyArMTQ3LDcgQEAgdm9pZCBJbmplY3RlZFNjcmlw
dEJhc2U6Om1ha2VFdmFsQ2FsbChFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIERlcHJlY2F0ZWQ6
OlNjcmkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgICpvYmplY3RSZXN1bHQgPSBUeXBl
QnVpbGRlcjo6UnVudGltZTo6UmVtb3RlT2JqZWN0OjpydW50aW1lQ2FzdChyZXN1bHRPYmopOwor
ICAgICpvYmplY3RSZXN1bHQgPSBCaW5kaW5nVHJhaXRzPFR5cGVCdWlsZGVyOjpSdW50aW1lOjpS
ZW1vdGVPYmplY3Q+OjpydW50aW1lQ2FzdChyZXN1bHRPYmopOwogICAgICp3YXNUaHJvd24gPSB3
YXNUaHJvd25WYWw7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3IvSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmNwcAppbmRleCBlZjBkOWEzNzQ3MzRkMjU2
NGVjMGM4MWI2Mzg0ZDZjN2QwMzRlYTFkLi40NTE3M2ZjODM3YmFlMGUyMDY0MTdjMzU1MTExOTJl
NTQ2NjM4Y2I5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0lu
amVjdGVkU2NyaXB0TWFuYWdlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9JbmplY3RlZFNjcmlwdE1hbmFnZXIuY3BwCkBAIC05NSw3ICs5NSw3IEBAIGludCBJbmpl
Y3RlZFNjcmlwdE1hbmFnZXI6OmluamVjdGVkU2NyaXB0SWRGb3IoRXhlY1N0YXRlKiBzY3JpcHRT
dGF0ZSkKIEluamVjdGVkU2NyaXB0IEluamVjdGVkU2NyaXB0TWFuYWdlcjo6aW5qZWN0ZWRTY3Jp
cHRGb3JPYmplY3RJZChjb25zdCBTdHJpbmcmIG9iamVjdElkKQogewogICAgIFJlZlB0cjxJbnNw
ZWN0b3JWYWx1ZT4gcGFyc2VkT2JqZWN0SWQgPSBJbnNwZWN0b3JWYWx1ZTo6cGFyc2VKU09OKG9i
amVjdElkKTsKLSAgICBpZiAocGFyc2VkT2JqZWN0SWQgJiYgcGFyc2VkT2JqZWN0SWQtPnR5cGUo
KSA9PSBJbnNwZWN0b3JWYWx1ZTo6VHlwZU9iamVjdCkgeworICAgIGlmIChwYXJzZWRPYmplY3RJ
ZCAmJiBwYXJzZWRPYmplY3RJZC0+dHlwZSgpID09IEluc3BlY3RvclZhbHVlOjpUeXBlOjpPYmpl
Y3QpIHsKICAgICAgICAgbG9uZyBpbmplY3RlZFNjcmlwdElkID0gMDsKICAgICAgICAgYm9vbCBz
dWNjZXNzID0gcGFyc2VkT2JqZWN0SWQtPmFzT2JqZWN0KCktPmdldE51bWJlcihBU0NJSUxpdGVy
YWwoImluamVjdGVkU2NyaXB0SWQiKSwgJmluamVjdGVkU2NyaXB0SWQpOwogICAgICAgICBpZiAo
c3VjY2VzcykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yVHlwZUJ1aWxkZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yVHlwZUJ1aWxkZXIuaAppbmRleCA4ZWE3NmVjOTBjNjBlMDc3NjE3OTVjMWMxNDc5NTJk
NDc4NjhmZTU4Li41MzlmNzgyMTIwMDNmZjU0MDFlY2I2MzlkZDVjM2UxMWFlMWFiYjkwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvclR5cGVCdWls
ZGVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JUeXBl
QnVpbGRlci5oCkBAIC02Myw1NCArNjMsNiBAQCBwcml2YXRlOgogICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKE9wdE91dHB1dCk7CiB9OwogCi0KLS8vIEEgc21hbGwgdHJhbnNpZW50IHdyYXBwZXIg
YXJvdW5kIGludCB0eXBlLCB0aGF0IGNhbiBiZSB1c2VkIGFzIGEgZnVuY2l0b24gcGFyYW1ldGVy
IHR5cGUKLS8vIGNsZXZlcmx5IGRpc2FsbG93aW5nIEMrKyBpbXBsaWNpdCBjYXN0cyBmcm9tIGZs
b2F0IG9yIGRvdWJsZS4KLWNsYXNzIEV4YWN0bHlJbnQgewotcHVibGljOgotICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+Ci0gICAgRXhhY3RseUludChUIHQpIDogbV92YWx1ZShjYXN0X3RvX2ludDxU
Pih0KSkgeyB9Ci0gICAgRXhhY3RseUludCgpIHsgfQotCi0gICAgb3BlcmF0b3IgaW50KCkgeyBy
ZXR1cm4gbV92YWx1ZTsgfQotCi1wcml2YXRlOgotICAgIGludCBtX3ZhbHVlOwotCi0gICAgdGVt
cGxhdGU8dHlwZW5hbWUgVD4KLSAgICBzdGF0aWMgaW50IGNhc3RfdG9faW50KFQpIHsgcmV0dXJu
IFQ6OmRlZmF1bHRfY2FzZV9jYXN0X2lzX25vdF9zdXBwb3J0ZWQoKTsgfQotfTsKLQotdGVtcGxh
dGU8PgotaW5saW5lIGludCBFeGFjdGx5SW50OjpjYXN0X3RvX2ludDxpbnQ+KGludCBpKSB7IHJl
dHVybiBpOyB9Ci0KLXRlbXBsYXRlPD4KLWlubGluZSBpbnQgRXhhY3RseUludDo6Y2FzdF90b19p
bnQ8dW5zaWduZWQgaW50Pih1bnNpZ25lZCBpbnQgaSkgeyByZXR1cm4gaTsgfQotCi0jaWYgIUFT
U0VSVF9ESVNBQkxFRAotY2xhc3MgUnVudGltZUNhc3RIZWxwZXIgewotcHVibGljOgotICAgIHRl
bXBsYXRlPEluc3BlY3RvclZhbHVlOjpUeXBlIFRZUEU+Ci0gICAgc3RhdGljIHZvaWQgYXNzZXJ0
VHlwZShJbnNwZWN0b3JWYWx1ZSogdmFsdWUpCi0gICAgewotICAgICAgICBBU1NFUlQodmFsdWUt
PnR5cGUoKSA9PSBUWVBFKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCBhc3NlcnRBbnkoSW5z
cGVjdG9yVmFsdWUqKQotICAgIHsKLSAgICB9Ci0KLSAgICBzdGF0aWMgdm9pZCBhc3NlcnRJbnQo
SW5zcGVjdG9yVmFsdWUqIHZhbHVlKQotICAgIHsKLSAgICAgICAgZG91YmxlIHY7Ci0gICAgICAg
IGJvb2wgY2FzdFJlcyA9IHZhbHVlLT5hc051bWJlcigmdik7Ci0gICAgICAgIEFTU0VSVF9VTlVT
RUQoY2FzdFJlcywgY2FzdFJlcyk7Ci0gICAgICAgIEFTU0VSVChzdGF0aWNfY2FzdDxkb3VibGU+
KHN0YXRpY19jYXN0PGludD4odikpID09IHYpOwotICAgIH0KLX07Ci0jZW5kaWYKLQotCiAvLyBU
aGlzIGNsYXNzIHByb3ZpZGVzICJUcmFpdHMiIHR5cGUgZm9yIHRoZSBpbnB1dCB0eXBlIFQuIEl0
IGlzIHByb2dyYW1tZWQgdXNpbmcgQysrIHRlbXBsYXRlIHNwZWNpYWxpemF0aW9uCiAvLyB0ZWNo
bmlxdWUuIEJ5IGRlZmF1bHQgaXQgc2ltcGx5IHRha2VzICJJdGVtVHJhaXRzIiB0eXBlIGZyb20g
VCwgYnV0IGl0IGRvZXNuJ3Qgd29yayB3aXRoIHRoZSBiYXNlIHR5cGVzLgogdGVtcGxhdGU8dHlw
ZW5hbWUgVD4KQEAgLTE0NCwyOSArOTYsNiBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IEFycmF5PFQ+KCkpOwogICAgIH0KLQotICAgIHN0YXRpYyBQYXNzUmVm
UHRyPEFycmF5PFQ+PiBydW50aW1lQ2FzdChQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiB2YWx1
ZSkKLSAgICB7Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJyYXk7Ci0gICAgICAg
IGJvb2wgY2FzdFJlcyA9IHZhbHVlLT5hc0FycmF5KCZhcnJheSk7Ci0gICAgICAgIEFTU0VSVF9V
TlVTRUQoY2FzdFJlcywgY2FzdFJlcyk7Ci0jaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgICAgICBh
c3NlcnRDb3JyZWN0VmFsdWUoYXJyYXkuZ2V0KCkpOwotI2VuZGlmIC8vICFBU1NFUlRfRElTQUJM
RUQKLSAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKEFycmF5PFQ+KSA9PSBzaXplb2YoSW5z
cGVjdG9yQXJyYXkpLCB0eXBlX2Nhc3RfcHJvYmxlbSk7Ci0gICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxBcnJheTxUPio+KHN0YXRpY19jYXN0PEluc3BlY3RvckFycmF5QmFzZSo+KGFycmF5Lmdl
dCgpKSk7Ci0gICAgfQotCi0jaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgIHN0YXRpYyB2b2lkIGFz
c2VydENvcnJlY3RWYWx1ZShJbnNwZWN0b3JWYWx1ZSogdmFsdWUpCi0gICAgewotICAgICAgICBS
ZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFycmF5OwotICAgICAgICBib29sIGNhc3RSZXMgPSB2YWx1
ZS0+YXNBcnJheSgmYXJyYXkpOwotICAgICAgICBBU1NFUlRfVU5VU0VEKGNhc3RSZXMsIGNhc3RS
ZXMpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXJyYXktPmxlbmd0aCgpOyBp
KyspCi0gICAgICAgICAgICBBcnJheUl0ZW1IZWxwZXI8VD46OlRyYWl0czo6dGVtcGxhdGUgYXNz
ZXJ0Q29ycmVjdFZhbHVlPFQ+KGFycmF5LT5nZXQoaSkuZ2V0KCkpOwotICAgIH0KLSNlbmRpZiAv
LyAhQVNTRVJUX0RJU0FCTEVECiB9OwogCiBzdHJ1Y3QgU3RydWN0SXRlbVRyYWl0cyB7CkBAIC0x
NzQsMTQgKzEwMyw2IEBAIHN0cnVjdCBTdHJ1Y3RJdGVtVHJhaXRzIHsKICAgICB7CiAgICAgICAg
IGFycmF5LT5wdXNoVmFsdWUodmFsdWUpOwogICAgIH0KLQotI2lmICFBU1NFUlRfRElTQUJMRUQK
LSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIHN0YXRpYyB2b2lkIGFzc2VydENvcnJlY3RW
YWx1ZShJbnNwZWN0b3JWYWx1ZSogdmFsdWUpCi0gICAgewotICAgICAgICBUOjphc3NlcnRDb3Jy
ZWN0VmFsdWUodmFsdWUpOwotICAgIH0KLSNlbmRpZiAvLyAhQVNTRVJUX0RJU0FCTEVECiB9Owog
CiB0ZW1wbGF0ZTw+CkBAIC0xOTEsMTQgKzExMiw2IEBAIHN0cnVjdCBBcnJheUl0ZW1IZWxwZXI8
U3RyaW5nPiB7CiAgICAgICAgIHsKICAgICAgICAgICAgIGFycmF5LT5wdXNoU3RyaW5nKHZhbHVl
KTsKICAgICAgICAgfQotCi0jaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgotICAgICAgICBzdGF0aWMgdm9pZCBhc3NlcnRDb3JyZWN0VmFsdWUoSW5zcGVj
dG9yVmFsdWUqIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBSdW50aW1lQ2FzdEhlbHBl
cjo6YXNzZXJ0VHlwZTxJbnNwZWN0b3JWYWx1ZTo6VHlwZVN0cmluZz4odmFsdWUpOwotICAgICAg
ICB9Ci0jZW5kaWYgLy8gIUFTU0VSVF9ESVNBQkxFRAogICAgIH07CiB9OwogCkBAIC0yMDksMTQg
KzEyMiw2IEBAIHN0cnVjdCBBcnJheUl0ZW1IZWxwZXI8aW50PiB7CiAgICAgICAgIHsKICAgICAg
ICAgICAgIGFycmF5LT5wdXNoSW50KHZhbHVlKTsKICAgICAgICAgfQotCi0jaWYgIUFTU0VSVF9E
SVNBQkxFRAotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgICAgICBzdGF0aWMgdm9p
ZCBhc3NlcnRDb3JyZWN0VmFsdWUoSW5zcGVjdG9yVmFsdWUqIHZhbHVlKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBSdW50aW1lQ2FzdEhlbHBlcjo6YXNzZXJ0SW50KHZhbHVlKTsKLSAgICAgICAg
fQotI2VuZGlmIC8vICFBU1NFUlRfRElTQUJMRUQKICAgICB9OwogfTsKIApAQCAtMjI3LDE0ICsx
MzIsNiBAQCBzdHJ1Y3QgQXJyYXlJdGVtSGVscGVyPGRvdWJsZT4gewogICAgICAgICB7CiAgICAg
ICAgICAgICBhcnJheS0+cHVzaE51bWJlcih2YWx1ZSk7CiAgICAgICAgIH0KLQotI2lmICFBU1NF
UlRfRElTQUJMRUQKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICAgICAgc3RhdGlj
IHZvaWQgYXNzZXJ0Q29ycmVjdFZhbHVlKEluc3BlY3RvclZhbHVlKiB2YWx1ZSkKLSAgICAgICAg
ewotICAgICAgICAgICAgUnVudGltZUNhc3RIZWxwZXI6OmFzc2VydFR5cGU8SW5zcGVjdG9yVmFs
dWU6OlR5cGVOdW1iZXI+KHZhbHVlKTsKLSAgICAgICAgfQotI2VuZGlmIC8vICFBU1NFUlRfRElT
QUJMRUQKICAgICB9OwogfTsKIApAQCAtMjQ1LDE0ICsxNDIsNiBAQCBzdHJ1Y3QgQXJyYXlJdGVt
SGVscGVyPGJvb2w+IHsKICAgICAgICAgewogICAgICAgICAgICAgYXJyYXktPnB1c2hCb29sZWFu
KHZhbHVlKTsKICAgICAgICAgfQotCi0jaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPgotICAgICAgICBzdGF0aWMgdm9pZCBhc3NlcnRDb3JyZWN0VmFsdWUo
SW5zcGVjdG9yVmFsdWUqIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBSdW50aW1lQ2Fz
dEhlbHBlcjo6YXNzZXJ0VHlwZTxJbnNwZWN0b3JWYWx1ZTo6VHlwZUJvb2xlYW4+KHZhbHVlKTsK
LSAgICAgICAgfQotI2VuZGlmIC8vICFBU1NFUlRfRElTQUJMRUQKICAgICB9OwogfTsKIApAQCAt
MjYzLDE0ICsxNTIsNiBAQCBzdHJ1Y3QgQXJyYXlJdGVtSGVscGVyPEluc3BlY3RvclZhbHVlPiB7
CiAgICAgICAgIHsKICAgICAgICAgICAgIGFycmF5LT5wdXNoVmFsdWUodmFsdWUpOwogICAgICAg
ICB9Ci0KLSNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
Ci0gICAgICAgIHN0YXRpYyB2b2lkIGFzc2VydENvcnJlY3RWYWx1ZShJbnNwZWN0b3JWYWx1ZSog
dmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFJ1bnRpbWVDYXN0SGVscGVyOjphc3NlcnRB
bnkodmFsdWUpOwotICAgICAgICB9Ci0jZW5kaWYgLy8gIUFTU0VSVF9ESVNBQkxFRAogICAgIH07
CiB9OwogCkBAIC0yODEsMTQgKzE2Miw2IEBAIHN0cnVjdCBBcnJheUl0ZW1IZWxwZXI8SW5zcGVj
dG9yT2JqZWN0PiB7CiAgICAgICAgIHsKICAgICAgICAgICAgIGFycmF5LT5wdXNoVmFsdWUodmFs
dWUpOwogICAgICAgICB9Ci0KLSNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+Ci0gICAgICAgIHN0YXRpYyB2b2lkIGFzc2VydENvcnJlY3RWYWx1ZShJbnNw
ZWN0b3JWYWx1ZSogdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIFJ1bnRpbWVDYXN0SGVs
cGVyOjphc3NlcnRUeXBlPEluc3BlY3RvclZhbHVlOjpUeXBlT2JqZWN0Pih2YWx1ZSk7Ci0gICAg
ICAgIH0KLSNlbmRpZiAvLyAhQVNTRVJUX0RJU0FCTEVECiAgICAgfTsKIH07CiAKQEAgLTI5OSwx
NCArMTcyLDYgQEAgc3RydWN0IEFycmF5SXRlbUhlbHBlcjxJbnNwZWN0b3JBcnJheT4gewogICAg
ICAgICB7CiAgICAgICAgICAgICBhcnJheS0+cHVzaEFycmF5KHZhbHVlKTsKICAgICAgICAgfQot
Ci0jaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAg
ICAgICBzdGF0aWMgdm9pZCBhc3NlcnRDb3JyZWN0VmFsdWUoSW5zcGVjdG9yVmFsdWUqIHZhbHVl
KQotICAgICAgICB7Ci0gICAgICAgICAgICBSdW50aW1lQ2FzdEhlbHBlcjo6YXNzZXJ0VHlwZTxJ
bnNwZWN0b3JWYWx1ZTo6VHlwZUFycmF5Pih2YWx1ZSk7Ci0gICAgICAgIH0KLSNlbmRpZiAvLyAh
QVNTRVJUX0RJU0FCTEVECiAgICAgfTsKIH07CiAKQEAgLTMxNywxOSArMTgyLDkyIEBAIHN0cnVj
dCBBcnJheUl0ZW1IZWxwZXI8VHlwZUJ1aWxkZXI6OkFycmF5PFQ+PiB7CiAgICAgICAgIHsKICAg
ICAgICAgICAgIGFycmF5LT5wdXNoVmFsdWUodmFsdWUpOwogICAgICAgICB9CisgICAgfTsKK307
CisKKy8vIEhlbHBlciBtZXRob2RzIGZvciBUeXBlQnVpbGRlciBhbmQgb3RoZXIgSW5zcGVjdG9y
IHR5cGVzIGFyZSBwcm92aWRlZCBieQorLy8gc3BlY2lhbGl6YXRpb25zIG9mIEJpbmRpbmdUcmFp
dHM8VD4uIFNvbWUgYXJlIGdlbmVyYXRlZCBmb3IgcHJvdG9jb2wgdHlwZXMuCiAKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+CitzdHJ1Y3QgQmluZGluZ1RyYWl0cyB7CisgICAgdHlwZWRlZiBUIEJpbmRp
bmdUeXBlOworCisgICAgc3RhdGljIEluc3BlY3RvclZhbHVlOjpUeXBlIHR5cGVUYWcoKTsKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxUPiBydW50aW1lQ2FzdChQYXNzUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4pOwogI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
Uz4KLSAgICAgICAgc3RhdGljIHZvaWQgYXNzZXJ0Q29ycmVjdFZhbHVlKEluc3BlY3RvclZhbHVl
KiB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgUzo6YXNzZXJ0Q29ycmVjdFZhbHVlKHZh
bHVlKTsKLSAgICAgICAgfQorICAgIHN0YXRpYyB2b2lkIGFzc2VydFZhbHVlSGFzRXhwZWN0ZWRU
eXBlKEluc3BlY3RvclZhbHVlKik7CisjZW5kaWYgLy8gIUFTU0VSVF9ESVNBQkxFRAorfTsKKwor
dGVtcGxhdGU8SW5zcGVjdG9yVmFsdWU6OlR5cGUgVFlQRT4KK3N0cnVjdCBQcmltaXRpdmVCaW5k
aW5nVHJhaXRzIHsKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgc3RhdGljIHZvaWQgYXNzZXJ0
VmFsdWVIYXNFeHBlY3RlZFR5cGUoSW5zcGVjdG9yVmFsdWUqIHZhbHVlKQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKHZhbHVlLT50eXBlKCkgPT0gVFlQRSk7CisgICAgfQorI2VuZGlmIC8vICFBU1NF
UlRfRElTQUJMRUQKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgQmluZGluZ1Ry
YWl0czxUeXBlQnVpbGRlcjo6QXJyYXk8VD4+IHsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxBcnJh
eTxUPj4gcnVudGltZUNhc3QoUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gdmFsdWUpCisgICAg
eworICAgICAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGFycmF5OworICAgICAgICBib29sIGNh
c3RSZXMgPSB2YWx1ZS0+YXNBcnJheSgmYXJyYXkpOworICAgICAgICBBU1NFUlRfVU5VU0VEKGNh
c3RSZXMsIGNhc3RSZXMpOworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICAgICAgYXNzZXJ0VmFs
dWVIYXNFeHBlY3RlZFR5cGUoYXJyYXkuZ2V0KCkpOworI2VuZGlmIC8vICFBU1NFUlRfRElTQUJM
RUQKKyAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKEFycmF5PFQ+KSA9PSBzaXplb2YoSW5z
cGVjdG9yQXJyYXkpLCB0eXBlX2Nhc3RfcHJvYmxlbSk7CisgICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxBcnJheTxUPio+KHN0YXRpY19jYXN0PEluc3BlY3RvckFycmF5QmFzZSo+KGFycmF5Lmdl
dCgpKSk7CisgICAgfQorCisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgIHN0YXRpYyB2b2lkIGFz
c2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKEluc3BlY3RvclZhbHVlKiB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gYXJyYXk7CisgICAgICAgIGJvb2wgY2FzdFJl
cyA9IHZhbHVlLT5hc0FycmF5KCZhcnJheSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoY2FzdFJl
cywgY2FzdFJlcyk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhcnJheS0+bGVu
Z3RoKCk7IGkrKykKKyAgICAgICAgICAgIEJpbmRpbmdUcmFpdHM8VD46OmFzc2VydFZhbHVlSGFz
RXhwZWN0ZWRUeXBlKGFycmF5LT5nZXQoaSkuZ2V0KCkpOworICAgIH0KKyNlbmRpZiAvLyAhQVNT
RVJUX0RJU0FCTEVECit9OworCit0ZW1wbGF0ZTw+CitzdHJ1Y3QgQmluZGluZ1RyYWl0czxJbnNw
ZWN0b3JWYWx1ZT4geworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICBzdGF0aWMgdm9pZCBhc3Nl
cnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShJbnNwZWN0b3JWYWx1ZSopCisgICAgeworICAgIH0KKyNl
bmRpZiAvLyAhQVNTRVJUX0RJU0FCTEVECit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBCaW5kaW5n
VHJhaXRzPEluc3BlY3RvckFycmF5PiA6IHB1YmxpYyBQcmltaXRpdmVCaW5kaW5nVHJhaXRzPElu
c3BlY3RvclZhbHVlOjpUeXBlOjpBcnJheT4geyB9OwordGVtcGxhdGU8PiBzdHJ1Y3QgQmluZGlu
Z1RyYWl0czxJbnNwZWN0b3JPYmplY3Q+IDogcHVibGljIFByaW1pdGl2ZUJpbmRpbmdUcmFpdHM8
SW5zcGVjdG9yVmFsdWU6OlR5cGU6Ok9iamVjdD4geyB9OwordGVtcGxhdGU8PiBzdHJ1Y3QgQmlu
ZGluZ1RyYWl0czxTdHJpbmc+IDogcHVibGljIFByaW1pdGl2ZUJpbmRpbmdUcmFpdHM8SW5zcGVj
dG9yVmFsdWU6OlR5cGU6OlN0cmluZz4geyB9OwordGVtcGxhdGU8PiBzdHJ1Y3QgQmluZGluZ1Ry
YWl0czxib29sPiA6IHB1YmxpYyBQcmltaXRpdmVCaW5kaW5nVHJhaXRzPEluc3BlY3RvclZhbHVl
OjpUeXBlOjpCb29sZWFuPiB7IH07Cit0ZW1wbGF0ZTw+IHN0cnVjdCBCaW5kaW5nVHJhaXRzPGRv
dWJsZT4gOiBwdWJsaWMgUHJpbWl0aXZlQmluZGluZ1RyYWl0czxJbnNwZWN0b3JWYWx1ZTo6VHlw
ZTo6TnVtYmVyPiB7IH07CisKKy8vIEZJWE1FOiBBZGQgYW4gSW5zcGVjdG9yOjpUeXBlIHRhZyBm
b3IgaW50IHNvIHdlIGNhbiByZW1vdmUgdGhpcyBzcGVjaWFsIGNhc2UuCit0ZW1wbGF0ZTw+Citz
dHJ1Y3QgQmluZGluZ1RyYWl0czxpbnQ+IHsKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAgc3Rh
dGljIHZvaWQgYXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSW5zcGVjdG9yVmFsdWUqIHZhbHVl
KQorICAgIHsKKyAgICAgICAgZG91YmxlIHY7CisgICAgICAgIGJvb2wgY2FzdFJlcyA9IHZhbHVl
LT5hc051bWJlcigmdik7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoY2FzdFJlcywgY2FzdFJlcyk7
CisgICAgICAgIEFTU0VSVChzdGF0aWNfY2FzdDxkb3VibGU+KHN0YXRpY19jYXN0PGludD4odikp
ID09IHYpOworICAgIH0KICNlbmRpZiAvLyAhQVNTRVJUX0RJU0FCTEVECi0gICAgfTsKIH07CiAK
IH0gLy8gbmFtZXNwYWNlIFR5cGVCdWlsZGVyCiAKK3VzaW5nIFR5cGVCdWlsZGVyOjpCaW5kaW5n
VHJhaXRzOworCiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKIAogI2VuZGlmIC8vIEVOQUJMRShJ
TlNQRUNUT1IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvclZhbHVlcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvclZhbHVlcy5jcHAKaW5kZXggMTkyZmI2YzlkOTA5MjRlNjE3YzVkMzJjNWQyZTNiYjlmY2Nk
M2UxYS4uZTJkMDM1ZGMwOWExYmJkODVmMTdhYTAxMDhlMjAxODYxNWY5YTJkNSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmNwcApA
QCAtNTc5LDEzICs1NzksMTMgQEAgU3RyaW5nIEluc3BlY3RvclZhbHVlOjp0b0pTT05TdHJpbmco
KSBjb25zdAogCiB2b2lkIEluc3BlY3RvclZhbHVlOjp3cml0ZUpTT04oU3RyaW5nQnVpbGRlciog
b3V0cHV0KSBjb25zdAogewotICAgIEFTU0VSVChtX3R5cGUgPT0gVHlwZU51bGwpOworICAgIEFT
U0VSVChtX3R5cGUgPT0gVHlwZTo6TnVsbCk7CiAgICAgb3V0cHV0LT5hcHBlbmQobnVsbFN0cmlu
ZywgNCk7CiB9CiAKIGJvb2wgSW5zcGVjdG9yQmFzaWNWYWx1ZTo6YXNCb29sZWFuKGJvb2wqIG91
dHB1dCkgY29uc3QKIHsKLSAgICBpZiAodHlwZSgpICE9IFR5cGVCb29sZWFuKQorICAgIGlmICh0
eXBlKCkgIT0gVHlwZTo6Qm9vbGVhbikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICpvdXRw
dXQgPSBtX2Jvb2xWYWx1ZTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTU5Myw3ICs1OTMsNyBAQCBi
b29sIEluc3BlY3RvckJhc2ljVmFsdWU6OmFzQm9vbGVhbihib29sKiBvdXRwdXQpIGNvbnN0CiAK
IGJvb2wgSW5zcGVjdG9yQmFzaWNWYWx1ZTo6YXNOdW1iZXIoZG91YmxlKiBvdXRwdXQpIGNvbnN0
CiB7Ci0gICAgaWYgKHR5cGUoKSAhPSBUeXBlTnVtYmVyKQorICAgIGlmICh0eXBlKCkgIT0gVHlw
ZTo6TnVtYmVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgKm91dHB1dCA9IG1fZG91Ymxl
VmFsdWU7CiAgICAgcmV0dXJuIHRydWU7CkBAIC02MDEsNyArNjAxLDcgQEAgYm9vbCBJbnNwZWN0
b3JCYXNpY1ZhbHVlOjphc051bWJlcihkb3VibGUqIG91dHB1dCkgY29uc3QKIAogYm9vbCBJbnNw
ZWN0b3JCYXNpY1ZhbHVlOjphc051bWJlcihmbG9hdCogb3V0cHV0KSBjb25zdAogewotICAgIGlm
ICh0eXBlKCkgIT0gVHlwZU51bWJlcikKKyAgICBpZiAodHlwZSgpICE9IFR5cGU6Ok51bWJlcikK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICpvdXRwdXQgPSBzdGF0aWNfY2FzdDxmbG9hdD4o
bV9kb3VibGVWYWx1ZSk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC02MDksNyArNjA5LDcgQEAgYm9v
bCBJbnNwZWN0b3JCYXNpY1ZhbHVlOjphc051bWJlcihmbG9hdCogb3V0cHV0KSBjb25zdAogCiBi
b29sIEluc3BlY3RvckJhc2ljVmFsdWU6OmFzTnVtYmVyKGludCogb3V0cHV0KSBjb25zdAogewot
ICAgIGlmICh0eXBlKCkgIT0gVHlwZU51bWJlcikKKyAgICBpZiAodHlwZSgpICE9IFR5cGU6Ok51
bWJlcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICpvdXRwdXQgPSBzdGF0aWNfY2FzdDxp
bnQ+KG1fZG91YmxlVmFsdWUpOwogICAgIHJldHVybiB0cnVlOwpAQCAtNjE3LDcgKzYxNyw3IEBA
IGJvb2wgSW5zcGVjdG9yQmFzaWNWYWx1ZTo6YXNOdW1iZXIoaW50KiBvdXRwdXQpIGNvbnN0CiAK
IGJvb2wgSW5zcGVjdG9yQmFzaWNWYWx1ZTo6YXNOdW1iZXIodW5zaWduZWQqIG91dHB1dCkgY29u
c3QKIHsKLSAgICBpZiAodHlwZSgpICE9IFR5cGVOdW1iZXIpCisgICAgaWYgKHR5cGUoKSAhPSBU
eXBlOjpOdW1iZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAqb3V0cHV0ID0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KG1fZG91YmxlVmFsdWUpOwogICAgIHJldHVybiB0cnVlOwpAQCAtNjI1
LDcgKzYyNSw3IEBAIGJvb2wgSW5zcGVjdG9yQmFzaWNWYWx1ZTo6YXNOdW1iZXIodW5zaWduZWQq
IG91dHB1dCkgY29uc3QKIAogYm9vbCBJbnNwZWN0b3JCYXNpY1ZhbHVlOjphc051bWJlcihsb25n
KiBvdXRwdXQpIGNvbnN0CiB7Ci0gICAgaWYgKHR5cGUoKSAhPSBUeXBlTnVtYmVyKQorICAgIGlm
ICh0eXBlKCkgIT0gVHlwZTo6TnVtYmVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgKm91
dHB1dCA9IHN0YXRpY19jYXN0PGxvbmc+KG1fZG91YmxlVmFsdWUpOwogICAgIHJldHVybiB0cnVl
OwpAQCAtNjMzLDcgKzYzMyw3IEBAIGJvb2wgSW5zcGVjdG9yQmFzaWNWYWx1ZTo6YXNOdW1iZXIo
bG9uZyogb3V0cHV0KSBjb25zdAogCiBib29sIEluc3BlY3RvckJhc2ljVmFsdWU6OmFzTnVtYmVy
KGxvbmcgbG9uZyogb3V0cHV0KSBjb25zdAogewotICAgIGlmICh0eXBlKCkgIT0gVHlwZU51bWJl
cikKKyAgICBpZiAodHlwZSgpICE9IFR5cGU6Ok51bWJlcikKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICpvdXRwdXQgPSBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KG1fZG91YmxlVmFsdWUpOwog
ICAgIHJldHVybiB0cnVlOwpAQCAtNjQxLDcgKzY0MSw3IEBAIGJvb2wgSW5zcGVjdG9yQmFzaWNW
YWx1ZTo6YXNOdW1iZXIobG9uZyBsb25nKiBvdXRwdXQpIGNvbnN0CiAKIGJvb2wgSW5zcGVjdG9y
QmFzaWNWYWx1ZTo6YXNOdW1iZXIodW5zaWduZWQgbG9uZyogb3V0cHV0KSBjb25zdAogewotICAg
IGlmICh0eXBlKCkgIT0gVHlwZU51bWJlcikKKyAgICBpZiAodHlwZSgpICE9IFR5cGU6Ok51bWJl
cikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICpvdXRwdXQgPSBzdGF0aWNfY2FzdDx1bnNp
Z25lZCBsb25nPihtX2RvdWJsZVZhbHVlKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTY0OSw3ICs2
NDksNyBAQCBib29sIEluc3BlY3RvckJhc2ljVmFsdWU6OmFzTnVtYmVyKHVuc2lnbmVkIGxvbmcq
IG91dHB1dCkgY29uc3QKIAogYm9vbCBJbnNwZWN0b3JCYXNpY1ZhbHVlOjphc051bWJlcih1bnNp
Z25lZCBsb25nIGxvbmcqIG91dHB1dCkgY29uc3QKIHsKLSAgICBpZiAodHlwZSgpICE9IFR5cGVO
dW1iZXIpCisgICAgaWYgKHR5cGUoKSAhPSBUeXBlOjpOdW1iZXIpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAqb3V0cHV0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPihtX2Rv
dWJsZVZhbHVlKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTY1NywxMyArNjU3LDEzIEBAIGJvb2wg
SW5zcGVjdG9yQmFzaWNWYWx1ZTo6YXNOdW1iZXIodW5zaWduZWQgbG9uZyBsb25nKiBvdXRwdXQp
IGNvbnN0CiAKIHZvaWQgSW5zcGVjdG9yQmFzaWNWYWx1ZTo6d3JpdGVKU09OKFN0cmluZ0J1aWxk
ZXIqIG91dHB1dCkgY29uc3QKIHsKLSAgICBBU1NFUlQodHlwZSgpID09IFR5cGVCb29sZWFuIHx8
IHR5cGUoKSA9PSBUeXBlTnVtYmVyKTsKLSAgICBpZiAodHlwZSgpID09IFR5cGVCb29sZWFuKSB7
CisgICAgQVNTRVJUKHR5cGUoKSA9PSBUeXBlOjpCb29sZWFuIHx8IHR5cGUoKSA9PSBUeXBlOjpO
dW1iZXIpOworICAgIGlmICh0eXBlKCkgPT0gVHlwZTo6Qm9vbGVhbikgewogICAgICAgICBpZiAo
bV9ib29sVmFsdWUpCiAgICAgICAgICAgICBvdXRwdXQtPmFwcGVuZCh0cnVlU3RyaW5nLCA0KTsK
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgb3V0cHV0LT5hcHBlbmQoZmFsc2VTdHJpbmcsIDUp
OwotICAgIH0gZWxzZSBpZiAodHlwZSgpID09IFR5cGVOdW1iZXIpIHsKKyAgICB9IGVsc2UgaWYg
KHR5cGUoKSA9PSBUeXBlOjpOdW1iZXIpIHsKICAgICAgICAgTnVtYmVyVG9MU3RyaW5nQnVmZmVy
IGJ1ZmZlcjsKICAgICAgICAgaWYgKCFzdGQ6OmlzZmluaXRlKG1fZG91YmxlVmFsdWUpKSB7CiAg
ICAgICAgICAgICBvdXRwdXQtPmFwcGVuZChudWxsU3RyaW5nLCA0KTsKQEAgLTY5Myw3ICs2OTMs
NyBAQCBib29sIEluc3BlY3RvclN0cmluZzo6YXNTdHJpbmcoU3RyaW5nKiBvdXRwdXQpIGNvbnN0
CiAKIHZvaWQgSW5zcGVjdG9yU3RyaW5nOjp3cml0ZUpTT04oU3RyaW5nQnVpbGRlciogb3V0cHV0
KSBjb25zdAogewotICAgIEFTU0VSVCh0eXBlKCkgPT0gVHlwZVN0cmluZyk7CisgICAgQVNTRVJU
KHR5cGUoKSA9PSBUeXBlOjpTdHJpbmcpOwogICAgIGRvdWJsZVF1b3RlU3RyaW5nKG1fc3RyaW5n
VmFsdWUsIG91dHB1dCk7CiB9CiAKQEAgLTc4Niw3ICs3ODYsNyBAQCB2b2lkIEluc3BlY3Rvck9i
amVjdEJhc2U6OndyaXRlSlNPTihTdHJpbmdCdWlsZGVyKiBvdXRwdXQpIGNvbnN0CiB9CiAKIElu
c3BlY3Rvck9iamVjdEJhc2U6Okluc3BlY3Rvck9iamVjdEJhc2UoKQotICAgIDogSW5zcGVjdG9y
VmFsdWUoVHlwZU9iamVjdCkKKyAgICA6IEluc3BlY3RvclZhbHVlKFR5cGU6Ok9iamVjdCkKICAg
ICAsIG1fZGF0YSgpCiAgICAgLCBtX29yZGVyKCkKIHsKQEAgLTgyMSw3ICs4MjEsNyBAQCB2b2lk
IEluc3BlY3RvckFycmF5QmFzZTo6d3JpdGVKU09OKFN0cmluZ0J1aWxkZXIqIG91dHB1dCkgY29u
c3QKIH0KIAogSW5zcGVjdG9yQXJyYXlCYXNlOjpJbnNwZWN0b3JBcnJheUJhc2UoKQotICAgIDog
SW5zcGVjdG9yVmFsdWUoVHlwZUFycmF5KQorICAgIDogSW5zcGVjdG9yVmFsdWUoVHlwZTo6QXJy
YXkpCiAgICAgLCBtX2RhdGEoKQogewogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmgKaW5kZXggM2I4NjE2NjRkYTMzNzlkZWI1Njg5YmMw
MDEzNGRlMjZlYmE2NzNkYS4uOTdjYjg4YmYxY2MzOWUxNmNjNzU5MTllM2E4ZjJlODBiNTk3MzZm
MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JW
YWx1ZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZh
bHVlcy5oCkBAIC00MSwyOSArNDEsMzIgQEAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCiBjbGFz
cyBJbnNwZWN0b3JBcnJheTsKK2NsYXNzIEluc3BlY3RvckFycmF5QmFzZTsKIGNsYXNzIEluc3Bl
Y3Rvck9iamVjdDsKK2NsYXNzIEluc3BlY3Rvck9iamVjdEJhc2U7CiAKIGNsYXNzIEpTX0VYUE9S
VF9QUklWQVRFIEluc3BlY3RvclZhbHVlIDogcHVibGljIFJlZkNvdW50ZWQ8SW5zcGVjdG9yVmFs
dWU+IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3QgaW50IG1heERlcHRoID0gMTAwMDsKIAot
ICAgIEluc3BlY3RvclZhbHVlKCkgOiBtX3R5cGUoVHlwZU51bGwpIHsgfQorICAgIEluc3BlY3Rv
clZhbHVlKCkKKyAgICAgICAgOiBtX3R5cGUoVHlwZTo6TnVsbCkgeyB9CiAgICAgdmlydHVhbCB+
SW5zcGVjdG9yVmFsdWUoKSB7IH0KIAogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3RvclZh
bHVlPiBudWxsKCk7CiAKLSAgICB0eXBlZGVmIGVudW0gewotICAgICAgICBUeXBlTnVsbCA9IDAs
Ci0gICAgICAgIFR5cGVCb29sZWFuLAotICAgICAgICBUeXBlTnVtYmVyLAotICAgICAgICBUeXBl
U3RyaW5nLAotICAgICAgICBUeXBlT2JqZWN0LAotICAgICAgICBUeXBlQXJyYXkKLSAgICB9IFR5
cGU7CisgICAgZW51bSBjbGFzcyBUeXBlIHsKKyAgICAgICAgTnVsbCA9IDAsCisgICAgICAgIEJv
b2xlYW4sCisgICAgICAgIE51bWJlciwKKyAgICAgICAgU3RyaW5nLAorICAgICAgICBPYmplY3Qs
CisgICAgICAgIEFycmF5CisgICAgfTsKIAogICAgIFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJu
IG1fdHlwZTsgfQogCi0gICAgYm9vbCBpc051bGwoKSBjb25zdCB7IHJldHVybiBtX3R5cGUgPT0g
VHlwZU51bGw7IH0KKyAgICBib29sIGlzTnVsbCgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSA9PSBU
eXBlOjpOdWxsOyB9CiAKICAgICB2aXJ0dWFsIGJvb2wgYXNCb29sZWFuKGJvb2wqIG91dHB1dCkg
Y29uc3Q7CiAgICAgdmlydHVhbCBib29sIGFzTnVtYmVyKGRvdWJsZSogb3V0cHV0KSBjb25zdDsK
QEAgLTExMyw5ICsxMTYsMTcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCB3cml0ZUpTT04o
U3RyaW5nQnVpbGRlciogb3V0cHV0KSBjb25zdCBvdmVycmlkZTsKIAogcHJpdmF0ZToKLSAgICBl
eHBsaWNpdCBJbnNwZWN0b3JCYXNpY1ZhbHVlKGJvb2wgdmFsdWUpIDogSW5zcGVjdG9yVmFsdWUo
VHlwZUJvb2xlYW4pLCBtX2Jvb2xWYWx1ZSh2YWx1ZSkgeyB9Ci0gICAgZXhwbGljaXQgSW5zcGVj
dG9yQmFzaWNWYWx1ZShpbnQgdmFsdWUpIDogSW5zcGVjdG9yVmFsdWUoVHlwZU51bWJlciksIG1f
ZG91YmxlVmFsdWUoKGRvdWJsZSl2YWx1ZSkgeyB9Ci0gICAgZXhwbGljaXQgSW5zcGVjdG9yQmFz
aWNWYWx1ZShkb3VibGUgdmFsdWUpIDogSW5zcGVjdG9yVmFsdWUoVHlwZU51bWJlciksIG1fZG91
YmxlVmFsdWUodmFsdWUpIHsgfQorICAgIGV4cGxpY2l0IEluc3BlY3RvckJhc2ljVmFsdWUoYm9v
bCB2YWx1ZSkKKyAgICAgICAgOiBJbnNwZWN0b3JWYWx1ZShUeXBlOjpCb29sZWFuKQorICAgICAg
ICAsIG1fYm9vbFZhbHVlKHZhbHVlKSB7IH0KKworICAgIGV4cGxpY2l0IEluc3BlY3RvckJhc2lj
VmFsdWUoaW50IHZhbHVlKQorICAgICAgICA6IEluc3BlY3RvclZhbHVlKFR5cGU6Ok51bWJlcikK
KyAgICAgICAgLCBtX2RvdWJsZVZhbHVlKHN0YXRpY19jYXN0PGRvdWJsZT4odmFsdWUpKSB7IH0K
KworICAgIGV4cGxpY2l0IEluc3BlY3RvckJhc2ljVmFsdWUoZG91YmxlIHZhbHVlKQorICAgICAg
ICA6IEluc3BlY3RvclZhbHVlKFR5cGU6Ok51bWJlcikKKyAgICAgICAgLCBtX2RvdWJsZVZhbHVl
KHZhbHVlKSB7IH0KIAogICAgIHVuaW9uIHsKICAgICAgICAgYm9vbCBtX2Jvb2xWYWx1ZTsKQEAg
LTEzMyw4ICsxNDQsMTMgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCB3cml0ZUpTT04oU3Ry
aW5nQnVpbGRlciogb3V0cHV0KSBjb25zdCBvdmVycmlkZTsKIAogcHJpdmF0ZToKLSAgICBleHBs
aWNpdCBJbnNwZWN0b3JTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkgOiBJbnNwZWN0b3JWYWx1
ZShUeXBlU3RyaW5nKSwgbV9zdHJpbmdWYWx1ZSh2YWx1ZSkgeyB9Ci0gICAgZXhwbGljaXQgSW5z
cGVjdG9yU3RyaW5nKGNvbnN0IGNoYXIqIHZhbHVlKSA6IEluc3BlY3RvclZhbHVlKFR5cGVTdHJp
bmcpLCBtX3N0cmluZ1ZhbHVlKHZhbHVlKSB7IH0KKyAgICBleHBsaWNpdCBJbnNwZWN0b3JTdHJp
bmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICAgICAgOiBJbnNwZWN0b3JWYWx1ZShUeXBlOjpT
dHJpbmcpCisgICAgICAgICwgbV9zdHJpbmdWYWx1ZSh2YWx1ZSkgeyB9CisKKyAgICBleHBsaWNp
dCBJbnNwZWN0b3JTdHJpbmcoY29uc3QgY2hhciogdmFsdWUpCisgICAgICAgIDogSW5zcGVjdG9y
VmFsdWUoVHlwZTo6U3RyaW5nKQorICAgICAgICAsIG1fc3RyaW5nVmFsdWUodmFsdWUpIHsgfQog
CiAgICAgU3RyaW5nIG1fc3RyaW5nVmFsdWU7CiB9OwpAQCAtMTU5LDggKzE3NSw4IEBAIHByb3Rl
Y3RlZDoKICAgICB2b2lkIHNldE51bWJlcihjb25zdCBTdHJpbmcmIG5hbWUsIGRvdWJsZSk7CiAg
ICAgdm9pZCBzZXRTdHJpbmcoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmKTsKICAg
ICB2b2lkIHNldFZhbHVlKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJbnNwZWN0b3JW
YWx1ZT4pOwotICAgIHZvaWQgc2V0T2JqZWN0KGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+KTsKLSAgICB2b2lkIHNldEFycmF5KGNvbnN0IFN0cmluZyYgbmFt
ZSwgUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4pOworICAgIHZvaWQgc2V0T2JqZWN0KGNvbnN0
IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3RCYXNlPik7CisgICAgdm9p
ZCBzZXRBcnJheShjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXlC
YXNlPik7CiAKICAgICBpdGVyYXRvciBmaW5kKGNvbnN0IFN0cmluZyYgbmFtZSk7CiAgICAgY29u
c3RfaXRlcmF0b3IgZmluZChjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0OwpAQCAtMzE3LDE0ICsz
MzMsMTQgQEAgaW5saW5lIHZvaWQgSW5zcGVjdG9yT2JqZWN0QmFzZTo6c2V0VmFsdWUoY29uc3Qg
U3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPEluc3BlY3QKICAgICAgICAgbV9vcmRlci5hcHBlbmQo
bmFtZSk7CiB9CiAKLWlubGluZSB2b2lkIEluc3BlY3Rvck9iamVjdEJhc2U6OnNldE9iamVjdChj
b25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKK2lu
bGluZSB2b2lkIEluc3BlY3Rvck9iamVjdEJhc2U6OnNldE9iamVjdChjb25zdCBTdHJpbmcmIG5h
bWUsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0QmFzZT4gdmFsdWUpCiB7CiAgICAgQVNTRVJU
KHZhbHVlKTsKICAgICBpZiAobV9kYXRhLnNldChuYW1lLCB2YWx1ZSkuaXNOZXdFbnRyeSkKICAg
ICAgICAgbV9vcmRlci5hcHBlbmQobmFtZSk7CiB9CiAKLWlubGluZSB2b2lkIEluc3BlY3Rvck9i
amVjdEJhc2U6OnNldEFycmF5KGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJbnNwZWN0
b3JBcnJheT4gdmFsdWUpCitpbmxpbmUgdm9pZCBJbnNwZWN0b3JPYmplY3RCYXNlOjpzZXRBcnJh
eShjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXlCYXNlPiB2YWx1
ZSkKIHsKICAgICBBU1NFUlQodmFsdWUpOwogICAgIGlmIChtX2RhdGEuc2V0KG5hbWUsIHZhbHVl
KS5pc05ld0VudHJ5KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9hZ2VudHMvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcAppbmRleCA1MDk2
YTZjOTlkMmE5MTIwNDM4YzY4ZmRjODg3NThmNmNiZmFlYjlmLi41ZTFiNjQ2NDYzZGY1NTFlODJk
NDU5NTdiNWFmN2M5NjBmZWMyNWVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNw
cApAQCAtNDI5LDcgKzQyOSw3IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6Z2V0RnVu
Y3Rpb25EZXRhaWxzKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgY29uc3QKICAgICBpbmplY3Rl
ZFNjcmlwdC5nZXRGdW5jdGlvbkRldGFpbHMoZXJyb3JTdHJpbmcsIGZ1bmN0aW9uSWQsICZkZXRh
aWxzKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzY2hlZHVsZVBhdXNlT25O
ZXh0U3RhdGVtZW50KEluc3BlY3RvckRlYnVnZ2VyRnJvbnRlbmREaXNwYXRjaGVyOjpSZWFzb246
OkVudW0gYnJlYWtSZWFzb24sIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBkYXRhKQordm9p
ZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzY2hlZHVsZVBhdXNlT25OZXh0U3RhdGVtZW50KElu
c3BlY3RvckRlYnVnZ2VyRnJvbnRlbmREaXNwYXRjaGVyOjpSZWFzb24gYnJlYWtSZWFzb24sIFBh
c3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBkYXRhKQogewogICAgIGlmIChtX2phdmFTY3JpcHRQ
YXVzZVNjaGVkdWxlZCkKICAgICAgICAgcmV0dXJuOwpAQCAtNjgwLDcgKzY4MCw3IEBAIHZvaWQg
SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlkQ29udGludWUoKQogICAgIG1fZnJvbnRlbmREaXNw
YXRjaGVyLT5yZXN1bWVkKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6YnJl
YWtQcm9ncmFtKEluc3BlY3RvckRlYnVnZ2VyRnJvbnRlbmREaXNwYXRjaGVyOjpSZWFzb246OkVu
dW0gYnJlYWtSZWFzb24sIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBkYXRhKQordm9pZCBJ
bnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpicmVha1Byb2dyYW0oSW5zcGVjdG9yRGVidWdnZXJGcm9u
dGVuZERpc3BhdGNoZXI6OlJlYXNvbiBicmVha1JlYXNvbiwgUGFzc1JlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IGRhdGEpCiB7CiAgICAgbV9icmVha1JlYXNvbiA9IGJyZWFrUmVhc29uOwogICAgIG1f
YnJlYWtBdXhEYXRhID0gZGF0YTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuaAppbmRleCBl
YjIyNzBhOWNlMjQyODEzZjlkNGVlNTU5MDBmZjgzYTk5NmY0MDZiLi44NDdlNzhiNjBmNWRjY2Y5
NjlmYjNkMDExM2VkMjUyM2VhMDI3ZDNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5o
CkBAIC05MSw5ICs5MSw5IEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIGhhbmRsZUNvbnNvbGVB
c3NlcnQoKTsKIAotICAgIHZvaWQgc2NoZWR1bGVQYXVzZU9uTmV4dFN0YXRlbWVudChJbnNwZWN0
b3JEZWJ1Z2dlckZyb250ZW5kRGlzcGF0Y2hlcjo6UmVhc29uOjpFbnVtIGJyZWFrUmVhc29uLCBQ
YXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZGF0YSk7CisgICAgdm9pZCBzY2hlZHVsZVBhdXNl
T25OZXh0U3RhdGVtZW50KEluc3BlY3RvckRlYnVnZ2VyRnJvbnRlbmREaXNwYXRjaGVyOjpSZWFz
b24gYnJlYWtSZWFzb24sIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBkYXRhKTsKICAgICB2
b2lkIGNhbmNlbFBhdXNlT25OZXh0U3RhdGVtZW50KCk7Ci0gICAgdm9pZCBicmVha1Byb2dyYW0o
SW5zcGVjdG9yRGVidWdnZXJGcm9udGVuZERpc3BhdGNoZXI6OlJlYXNvbjo6RW51bSBicmVha1Jl
YXNvbiwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGRhdGEpOworICAgIHZvaWQgYnJlYWtQ
cm9ncmFtKEluc3BlY3RvckRlYnVnZ2VyRnJvbnRlbmREaXNwYXRjaGVyOjpSZWFzb24gYnJlYWtS
ZWFzb24sIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBkYXRhKTsKICAgICB2b2lkIHNjcmlw
dEV4ZWN1dGlvbkJsb2NrZWRCeUNTUChjb25zdCBTdHJpbmcmIGRpcmVjdGl2ZVRleHQpOwogCiAg
ICAgY2xhc3MgTGlzdGVuZXIgewpAQCAtMTU5LDcgKzE1OSw3IEBAIHByaXZhdGU6CiAgICAgQnJl
YWtwb2ludElkZW50aWZpZXJUb0RlYnVnU2VydmVyQnJlYWtwb2ludElEc01hcCBtX2JyZWFrcG9p
bnRJZGVudGlmaWVyVG9EZWJ1Z1NlcnZlckJyZWFrcG9pbnRJRHM7CiAgICAgQnJlYWtwb2ludElk
ZW50aWZpZXJUb0JyZWFrcG9pbnRNYXAgbV9qYXZhU2NyaXB0QnJlYWtwb2ludHM7CiAgICAgSlND
OjpCcmVha3BvaW50SUQgbV9jb250aW51ZVRvTG9jYXRpb25CcmVha3BvaW50SUQ7Ci0gICAgSW5z
cGVjdG9yRGVidWdnZXJGcm9udGVuZERpc3BhdGNoZXI6OlJlYXNvbjo6RW51bSBtX2JyZWFrUmVh
c29uOworICAgIEluc3BlY3RvckRlYnVnZ2VyRnJvbnRlbmREaXNwYXRjaGVyOjpSZWFzb24gbV9i
cmVha1JlYXNvbjsKICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX2JyZWFrQXV4RGF0YTsK
ICAgICBib29sIG1fZW5hYmxlZDsKICAgICBib29sIG1famF2YVNjcmlwdFBhdXNlU2NoZWR1bGVk
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5z
cGVjdG9yUnVudGltZUFnZW50LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
YWdlbnRzL0luc3BlY3RvclJ1bnRpbWVBZ2VudC5jcHAKaW5kZXggOWQ1MTE2MzAyMWRlYjk1NGQz
ZWM0Mjk0MjJkYjAxYzViMWM2MjQ2MS4uMjAwNzUwYjkxZTMyNDMwMzBjMDg1YTk3NWIwNWY4NWMx
YmM1OGJmZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2Vu
dHMvSW5zcGVjdG9yUnVudGltZUFnZW50LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JSdW50aW1lQWdlbnQuY3BwCkBAIC04OCw3ICs4OCw3
IEBAIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OkVy
cm9yUmFuZ2U+IGJ1aWxkRXJyb3JSYW5nZU9iCiAgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7
CiB9CiAKLXZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50OjpwYXJzZShFcnJvclN0cmluZyosIGNv
bnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UnVudGltZTo6
U3ludGF4RXJyb3JUeXBlOjpFbnVtKiByZXN1bHQsIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6Ok9w
dE91dHB1dDxTdHJpbmc+KiBtZXNzYWdlLCBSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6
UnVudGltZTo6RXJyb3JSYW5nZT4mIHJhbmdlKQordm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6
OnBhcnNlKEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBJbnNwZWN0b3I6
OlR5cGVCdWlsZGVyOjpSdW50aW1lOjpTeW50YXhFcnJvclR5cGUqIHJlc3VsdCwgSW5zcGVjdG9y
OjpUeXBlQnVpbGRlcjo6T3B0T3V0cHV0PFN0cmluZz4qIG1lc3NhZ2UsIFJlZlB0cjxJbnNwZWN0
b3I6OlR5cGVCdWlsZGVyOjpSdW50aW1lOjpFcnJvclJhbmdlPiYgcmFuZ2UpCiB7CiAgICAgVk0m
IHZtID0gZ2xvYmFsVk0oKTsKICAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JSdW50aW1l
QWdlbnQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rv
clJ1bnRpbWVBZ2VudC5oCmluZGV4IDIzOWJlYTA5MDFhZGI0NTU5NGFlNDRmNjA3Yjc2N2U2YTAx
MTAxNjguLjRhYWZjYTYyZjI5NGY3MzhmM2EzYjAxZWY0YjZmMTIyNjNiZGM0YjIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclJ1bnRp
bWVBZ2VudC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0lu
c3BlY3RvclJ1bnRpbWVBZ2VudC5oCkBAIC02MSw3ICs2MSw3IEBAIHB1YmxpYzoKIAogICAgIHZp
cnR1YWwgdm9pZCBlbmFibGUoRXJyb3JTdHJpbmcqKSBvdmVycmlkZSB7IG1fZW5hYmxlZCA9IHRy
dWU7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGlzYWJsZShFcnJvclN0cmluZyopIG92ZXJyaWRlIHsg
bV9lbmFibGVkID0gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIHZvaWQgcGFyc2UoRXJyb3JTdHJpbmcq
LCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlJ1bnRp
bWU6OlN5bnRheEVycm9yVHlwZTo6RW51bSogcmVzdWx0LCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVy
OjpPcHRPdXRwdXQ8U3RyaW5nPiogbWVzc2FnZSwgUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxk
ZXI6OlJ1bnRpbWU6OkVycm9yUmFuZ2U+Jikgb3ZlcnJpZGUgZmluYWw7CisgICAgdmlydHVhbCB2
b2lkIHBhcnNlKEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBJbnNwZWN0
b3I6OlR5cGVCdWlsZGVyOjpSdW50aW1lOjpTeW50YXhFcnJvclR5cGUqIHJlc3VsdCwgSW5zcGVj
dG9yOjpUeXBlQnVpbGRlcjo6T3B0T3V0cHV0PFN0cmluZz4qIG1lc3NhZ2UsIFJlZlB0cjxJbnNw
ZWN0b3I6OlR5cGVCdWlsZGVyOjpSdW50aW1lOjpFcnJvclJhbmdlPiYpIG92ZXJyaWRlIGZpbmFs
OwogICAgIHZpcnR1YWwgdm9pZCBldmFsdWF0ZShFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYg
ZXhwcmVzc2lvbiwgY29uc3QgU3RyaW5nKiBvYmplY3RHcm91cCwgY29uc3QgYm9vbCogaW5jbHVk
ZUNvbW1hbmRMaW5lQVBJLCBjb25zdCBib29sKiBkb05vdFBhdXNlT25FeGNlcHRpb25zQW5kTXV0
ZUNvbnNvbGUsIGNvbnN0IGludCogZXhlY3V0aW9uQ29udGV4dElkLCBjb25zdCBib29sKiByZXR1
cm5CeVZhbHVlLCBjb25zdCBib29sKiBnZW5lcmF0ZVByZXZpZXcsIFJlZlB0cjxJbnNwZWN0b3I6
OlR5cGVCdWlsZGVyOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiByZXN1bHQsIEluc3BlY3Rvcjo6
VHlwZUJ1aWxkZXI6Ok9wdE91dHB1dDxib29sPiogd2FzVGhyb3duKSBvdmVycmlkZSBmaW5hbDsK
ICAgICB2aXJ0dWFsIHZvaWQgY2FsbEZ1bmN0aW9uT24oRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJp
bmcmIG9iamVjdElkLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIGNvbnN0IFJlZlB0cjxJbnNw
ZWN0b3I6Okluc3BlY3RvckFycmF5Piogb3B0aW9uYWxBcmd1bWVudHMsIGNvbnN0IGJvb2wqIGRv
Tm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29sZSwgY29uc3QgYm9vbCogcmV0dXJuQnlW
YWx1ZSwgY29uc3QgYm9vbCogZ2VuZXJhdGVQcmV2aWV3LCBSZWZQdHI8SW5zcGVjdG9yOjpUeXBl
QnVpbGRlcjo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0LCBJbnNwZWN0b3I6OlR5cGVC
dWlsZGVyOjpPcHRPdXRwdXQ8Ym9vbD4qIHdhc1Rocm93bikgb3ZlcnJpZGUgZmluYWw7CiAgICAg
dmlydHVhbCB2b2lkIHJlbGVhc2VPYmplY3QoRXJyb3JTdHJpbmcqLCBjb25zdCBFcnJvclN0cmlu
ZyYgb2JqZWN0SWQpIG92ZXJyaWRlIGZpbmFsOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvQ29kZUdlbmVyYXRvckluc3BlY3Rv
ci5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggOTFmYThjOWMyZDdiOTQ5OWNiMDhk
NWVmYTQyYTkyMjQ5MjY1MzE4NC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvQ29kZUdl
bmVyYXRvckluc3BlY3Rvci5weQorKysgL2Rldi9udWxsCkBAIC0xLDI2MTQgKzAsMCBAQAotIyEv
dXNyL2Jpbi9lbnYgcHl0aG9uCi0jIENvcHlyaWdodCAoYykgMjAxMSBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotIyBDb3B5cmlnaHQgKGMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jIENvcHlyaWdodCAoYykgMjAxMyBBcHBsZSBJbmMuIEFs
bCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0jIG1l
dDoKLSMKLSMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0jIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSMg
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQotIyBkaXN0cmlidXRpb24uCi0jICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSMgdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSMKLSMgVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUwotIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAotIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSMgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSMgT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCi0jIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKLSMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0jIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotIyBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0jIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi1pbXBvcnQgb3MucGF0aAot
aW1wb3J0IHN5cwotaW1wb3J0IHN0cmluZwotaW1wb3J0IG9wdHBhcnNlCi1pbXBvcnQgcmUKLXRy
eToKLSAgICBpbXBvcnQganNvbgotZXhjZXB0IEltcG9ydEVycm9yOgotICAgIGltcG9ydCBzaW1w
bGVqc29uIGFzIGpzb24KLQotaW1wb3J0IENvZGVHZW5lcmF0b3JJbnNwZWN0b3JTdHJpbmdzCi0K
LQotRE9NQUlOX0RFRklORV9OQU1FX01BUCA9IHsKLSAgICAiRGF0YWJhc2UiOiAiU1FMX0RBVEFC
QVNFIiwKLSAgICAiSW5kZXhlZERCIjogIklOREVYRURfREFUQUJBU0UiLAotICAgICJSZXBsYXki
OiAiV0VCX1JFUExBWSIsCi19Ci0KLQotIyBNYW51YWxseS1maWxsZWQgbWFwIG9mIHR5cGUgbmFt
ZSByZXBsYWNlbWVudHMuCi1UWVBFX05BTUVfRklYX01BUCA9IHsKLSAgICAiUkdCQSI6ICJSZ2Jh
IiwgICMgUkdCQSBpcyByZXBvcnRlZCB0byBiZSBjb25mbGljdGluZyB3aXRoIGEgZGVmaW5lIG5h
bWUgaW4gV2luZG93cyBDRS4KLSAgICAiIjogIkVtcHR5IiwKLX0KLQotCi1UWVBFU19XSVRIX1JV
TlRJTUVfQ0FTVF9TRVQgPSBmcm96ZW5zZXQoWyJSdW50aW1lLlJlbW90ZU9iamVjdCIsICJSdW50
aW1lLlByb3BlcnR5RGVzY3JpcHRvciIsICJSdW50aW1lLkludGVybmFsUHJvcGVydHlEZXNjcmlw
dG9yIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkRlYnVnZ2Vy
LkZ1bmN0aW9uRGV0YWlscyIsICJEZWJ1Z2dlci5DYWxsRnJhbWUiLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAiQ2FudmFzLlRyYWNlTG9nIiwgIkNhbnZhcy5SZXNv
dXJjZUluZm8iLCAiQ2FudmFzLlJlc291cmNlU3RhdGUiLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAjIFRoaXMgc2hvdWxkIGJlIGEgdGVtcG9yYXJ5IGhhY2suIFRp
bWVsaW5lRXZlbnQgc2hvdWxkIGJlIGNyZWF0ZWQgdmlhIGdlbmVyYXRlZCBDKysgQVBJLgotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGltZWxpbmUuVGltZWxpbmVF
dmVudCJdKQotCi1UWVBFU19XSVRIX09QRU5fRklFTERfTElTVF9TRVQgPSBmcm96ZW5zZXQoWyJU
aW1lbGluZS5UaW1lbGluZUV2ZW50IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIyBJbnNwZWN0b3JTdHlsZVNoZWV0IG5vdCBvbmx5IGNyZWF0ZXMgdGhpcyBw
cm9wZXJ0eSBidXQgd2FudHMgdG8gcmVhZCBpdCBhbmQgbW9kaWZ5IGl0LgotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ1NTLkNTU1Byb3BlcnR5IiwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBJbnNwZWN0b3JSZXNvdXJj
ZUFnZW50IG5lZWRzIHRvIHVwZGF0ZSBtaW1lLXR5cGUuCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJOZXR3b3JrLlJlc3BvbnNlIl0pCi0KLUVYQUNUTFlfSU5U
X1NVUFBPUlRFRCA9IEZhbHNlCi0KLUlOU1BFQ1RPUl9UWVBFU19HRU5FUkFUT1JfQ09ORklHX01B
UCA9IHsKLSAgICAiSmF2YVNjcmlwdCI6IHsKLSAgICAgICAgInByZWZpeCI6ICJKUyIsCi0gICAg
ICAgICJ0eXBlYnVpbGRlcl9kZXBlbmRlbmN5IjogIiIsCi0gICAgICAgICJleHBvcnRfbWFjcm8i
OiAiSlNfRVhQT1JUX1BSSVZBVEUiLAotICAgIH0sCi0gICAgIldlYiI6IHsKLSAgICAgICAgInBy
ZWZpeCI6ICJXZWIiLAotICAgICAgICAidHlwZWJ1aWxkZXJfZGVwZW5kZW5jeSI6ICIjaW5jbHVk
ZSA8aW5zcGVjdG9yL0luc3BlY3RvckpTVHlwZUJ1aWxkZXJzLmg+IiwKLSAgICAgICAgImV4cG9y
dF9tYWNybyI6ICIiLAotICAgIH0sCi19Ci0KLWNtZGxpbmVfcGFyc2VyID0gb3B0cGFyc2UuT3B0
aW9uUGFyc2VyKHVzYWdlPSJ1c2FnZTogJXByb2cgW29wdGlvbnNdIDxJbnNwZWN0b3IuanNvbj4i
KQotY21kbGluZV9wYXJzZXIuYWRkX29wdGlvbigiLS1vdXRwdXRfaF9kaXIiKQotY21kbGluZV9w
YXJzZXIuYWRkX29wdGlvbigiLS1vdXRwdXRfY3BwX2RpciIpCi1jbWRsaW5lX3BhcnNlci5hZGRf
b3B0aW9uKCItLW91dHB1dF9qc19kaXIiKQotY21kbGluZV9wYXJzZXIuYWRkX29wdGlvbigiLS1v
dXRwdXRfdHlwZSIpICAjIEphdmFTY3JpcHQsIFdlYgotY21kbGluZV9wYXJzZXIuYWRkX29wdGlv
bigiLS13cml0ZV9hbHdheXMiLCBhY3Rpb249InN0b3JlX3RydWUiKQotY21kbGluZV9wYXJzZXIu
YWRkX29wdGlvbigiLS1ub192ZXJpZmljYXRpb24iLCBhY3Rpb249InN0b3JlX3RydWUiKQotCi10
cnk6Ci0gICAgYXJnX29wdGlvbnMsIGFyZ192YWx1ZXMgPSBjbWRsaW5lX3BhcnNlci5wYXJzZV9h
cmdzKCkKLSAgICBpZiAobGVuKGFyZ192YWx1ZXMpIDwgMSk6Ci0gICAgICAgIHJhaXNlIEV4Y2Vw
dGlvbigiQXQgbGVhc3Qgb25lIHBsYWluIGFyZ3VtZW50IGV4cGVjdGVkIikKLQotICAgIGlucHV0
X2pzb25fZmlsZW5hbWUgPSBhcmdfdmFsdWVzWzBdCi0gICAgZGVwZW5kZW5jeV9qc29uX2ZpbGVu
YW1lcyA9IGFyZ192YWx1ZXNbMTpdCi0KLSAgICBvdXRwdXRfaGVhZGVyX2Rpcm5hbWUgPSBhcmdf
b3B0aW9ucy5vdXRwdXRfaF9kaXIKLSAgICBvdXRwdXRfY3BwX2Rpcm5hbWUgPSBhcmdfb3B0aW9u
cy5vdXRwdXRfY3BwX2RpcgotICAgIG91dHB1dF9qc19kaXJuYW1lID0gYXJnX29wdGlvbnMub3V0
cHV0X2pzX2RpcgotICAgIG91dHB1dF90eXBlID0gYXJnX29wdGlvbnMub3V0cHV0X3R5cGUKLQot
ICAgIHdyaXRlX2Fsd2F5cyA9IGFyZ19vcHRpb25zLndyaXRlX2Fsd2F5cwotICAgIHZlcmlmaWNh
dGlvbiA9IG5vdCBhcmdfb3B0aW9ucy5ub192ZXJpZmljYXRpb24KLSAgICBpZiBub3Qgb3V0cHV0
X2hlYWRlcl9kaXJuYW1lOgotICAgICAgICByYWlzZSBFeGNlcHRpb24oIk91dHB1dCAuaCBkaXJl
Y3RvcnkgbXVzdCBiZSBzcGVjaWZpZWQiKQotICAgIGlmIG5vdCBvdXRwdXRfY3BwX2Rpcm5hbWU6
Ci0gICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiT3V0cHV0IC5jcHAgZGlyZWN0b3J5IG11c3QgYmUg
c3BlY2lmaWVkIikKLSAgICBpZiBub3Qgb3V0cHV0X2pzX2Rpcm5hbWU6Ci0gICAgICAgIHJhaXNl
IEV4Y2VwdGlvbigiT3V0cHV0IC5qcyBkaXJlY3RvcnkgbXVzdCBiZSBzcGVjaWZpZWQiKQotICAg
IGlmIG91dHB1dF90eXBlIG5vdCBpbiBJTlNQRUNUT1JfVFlQRVNfR0VORVJBVE9SX0NPTkZJR19N
QVAua2V5cygpOgotICAgICAgICByYWlzZSBFeGNlcHRpb24oIlVua25vd24gb3V0cHV0IHR5cGUu
IEFsbG93ZWQgdHlwZXMgYXJlOiAlcyIgJSBJTlNQRUNUT1JfVFlQRVNfR0VORVJBVE9SX0NPTkZJ
R19NQVAua2V5cygpKQotZXhjZXB0IEV4Y2VwdGlvbjoKLSAgICAjIFdvcmsgd2l0aCBweXRob24g
MiBhbmQgMyBodHRwOi8vZG9jcy5weXRob24ub3JnL3B5M2svaG93dG8vcHlwb3J0aW5nLmh0bWwK
LSAgICBleGMgPSBzeXMuZXhjX2luZm8oKVsxXQotICAgIHN5cy5zdGRlcnIud3JpdGUoIkZhaWxl
ZCB0byBwYXJzZSBjb21tYW5kLWxpbmUgYXJndW1lbnRzOiAlc1xuXG4iICUgZXhjKQotICAgIHN5
cy5zdGRlcnIud3JpdGUoIlVzYWdlOiA8c2NyaXB0PiBJbnNwZWN0b3IuanNvbiAtLW91dHB1dF9o
X2RpciA8b3V0cHV0X2hlYWRlcl9kaXI+IC0tb3V0cHV0X2NwcF9kaXIgPG91dHB1dF9jcHBfZGly
PiAtLW91dHB1dF9qc19kaXIgPG91dHB1dF9qc19kaXI+IFstLXdyaXRlX2Fsd2F5c10gWy0tbm9f
dmVyaWZpY2F0aW9uXVxuIikKLSAgICBleGl0KDEpCi0KLQotZGVmIGRhc2hfdG9fY2FtZWxjYXNl
KHdvcmQpOgotICAgIHJldHVybiAnJy5qb2luKHguY2FwaXRhbGl6ZSgpIG9yICctJyBmb3IgeCBp
biB3b3JkLnNwbGl0KCctJykpCi0KLQotZGVmIGZpeF9jYW1lbF9jYXNlKG5hbWUpOgotICAgIHJl
ZmluZWQgPSByZS5zdWIocictKFx3KScsIGxhbWJkYSBwYXQ6IHBhdC5ncm91cCgxKS51cHBlcigp
LCBuYW1lKQotICAgIHJlZmluZWQgPSB0b190aXRsZV9jYXNlKHJlZmluZWQpCi0gICAgcmV0dXJu
IHJlLnN1YihyJyg/aSlIVE1MfFhNTHxXTUx8QVBJfEdDfFhIUnxET018Q1NTJywgbGFtYmRhIHBh
dDogcGF0Lmdyb3VwKDApLnVwcGVyKCksIHJlZmluZWQpCi0KLQotZGVmIHRvX3RpdGxlX2Nhc2Uo
bmFtZSk6Ci0gICAgcmV0dXJuIG5hbWVbOjFdLnVwcGVyKCkgKyBuYW1lWzE6XQotCi0KLWNsYXNz
IENhcGl0YWxpemVyOgotICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgbG93ZXJfY2FtZWxfY2Fz
ZV90b191cHBlcihzdHIpOgotICAgICAgICBpZiBsZW4oc3RyKSA+IDAgYW5kIHN0clswXS5pc2xv
d2VyKCk6Ci0gICAgICAgICAgICBzdHIgPSBzdHJbMF0udXBwZXIoKSArIHN0clsxOl0KLSAgICAg
ICAgcmV0dXJuIHN0cgotCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiB1cHBlcl9jYW1lbF9j
YXNlX3RvX2xvd2VyKHN0cik6Ci0gICAgICAgIHBvcyA9IDAKLSAgICAgICAgd2hpbGUgcG9zIDwg
bGVuKHN0cikgYW5kIHN0cltwb3NdLmlzdXBwZXIoKToKLSAgICAgICAgICAgIHBvcyArPSAxCi0g
ICAgICAgIGlmIHBvcyA9PSAwOgotICAgICAgICAgICAgcmV0dXJuIHN0cgotICAgICAgICBpZiBw
b3MgPT0gMToKLSAgICAgICAgICAgIHJldHVybiBzdHJbMF0ubG93ZXIoKSArIHN0clsxOl0KLSAg
ICAgICAgaWYgcG9zIDwgbGVuKHN0cik6Ci0gICAgICAgICAgICBwb3MgLT0gMQotICAgICAgICBw
b3NzaWJsZV9hYmJyZXZpYXRpb24gPSBzdHJbMDpwb3NdCi0gICAgICAgIGlmIHBvc3NpYmxlX2Fi
YnJldmlhdGlvbiBub3QgaW4gQ2FwaXRhbGl6ZXIuQUJCUkVWSUFUSU9OOgotICAgICAgICAgICAg
cmFpc2UgRXhjZXB0aW9uKCJVbmtub3duIGFiYnJldmlhdGlvbiAlcyIgJSBwb3NzaWJsZV9hYmJy
ZXZpYXRpb24pCi0gICAgICAgIHN0ciA9IHBvc3NpYmxlX2FiYnJldmlhdGlvbi5sb3dlcigpICsg
c3RyW3BvczpdCi0gICAgICAgIHJldHVybiBzdHIKLQotICAgIEBzdGF0aWNtZXRob2QKLSAgICBk
ZWYgY2FtZWxfY2FzZV90b19jYXBpdGFsaXplZF93aXRoX3VuZGVyc2NvcmVzKHN0cik6Ci0gICAg
ICAgIGlmIGxlbihzdHIpID09IDA6Ci0gICAgICAgICAgICByZXR1cm4gc3RyCi0gICAgICAgIG91
dHB1dCA9IENhcGl0YWxpemVyLnNwbGl0X2NhbWVsX2Nhc2VfKHN0cikKLSAgICAgICAgcmV0dXJu
ICJfIi5qb2luKG91dHB1dCkudXBwZXIoKQotCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBz
cGxpdF9jYW1lbF9jYXNlXyhzdHIpOgotICAgICAgICBvdXRwdXQgPSBbXQotICAgICAgICBwb3Nf
YmVpbmcgPSAwCi0gICAgICAgIHBvcyA9IDEKLSAgICAgICAgaGFzX29uZWxldHRlciA9IEZhbHNl
Ci0gICAgICAgIHdoaWxlIHBvcyA8IGxlbihzdHIpOgotICAgICAgICAgICAgaWYgc3RyW3Bvc10u
aXN1cHBlcigpOgotICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoc3RyW3Bvc19iZWluZzpw
b3NdLnVwcGVyKCkpCi0gICAgICAgICAgICAgICAgaWYgcG9zIC0gcG9zX2JlaW5nID09IDE6Ci0g
ICAgICAgICAgICAgICAgICAgIGhhc19vbmVsZXR0ZXIgPSBUcnVlCi0gICAgICAgICAgICAgICAg
cG9zX2JlaW5nID0gcG9zCi0gICAgICAgICAgICBwb3MgKz0gMQotICAgICAgICBvdXRwdXQuYXBw
ZW5kKHN0cltwb3NfYmVpbmc6XSkKLSAgICAgICAgaWYgaGFzX29uZWxldHRlcjoKLSAgICAgICAg
ICAgIGFycmF5X3BvcyA9IDAKLSAgICAgICAgICAgIHdoaWxlIGFycmF5X3BvcyA8IGxlbihvdXRw
dXQpIC0gMToKLSAgICAgICAgICAgICAgICBpZiBsZW4ob3V0cHV0W2FycmF5X3Bvc10pID09IDE6
Ci0gICAgICAgICAgICAgICAgICAgIGFycmF5X3Bvc19lbmQgPSBhcnJheV9wb3MgKyAxCi0gICAg
ICAgICAgICAgICAgICAgIHdoaWxlIGFycmF5X3Bvc19lbmQgPCBsZW4ob3V0cHV0KSBhbmQgbGVu
KG91dHB1dFthcnJheV9wb3NfZW5kXSkgPT0gMToKLSAgICAgICAgICAgICAgICAgICAgICAgIGFy
cmF5X3Bvc19lbmQgKz0gMQotICAgICAgICAgICAgICAgICAgICBpZiBhcnJheV9wb3NfZW5kIC0g
YXJyYXlfcG9zID4gMToKLSAgICAgICAgICAgICAgICAgICAgICAgIHBvc3NpYmxlX2FiYnJldmlh
dGlvbiA9ICIiLmpvaW4ob3V0cHV0W2FycmF5X3BvczphcnJheV9wb3NfZW5kXSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIHBvc3NpYmxlX2FiYnJldmlhdGlvbi51cHBlcigpIGluIENhcGl0
YWxpemVyLkFCQlJFVklBVElPTjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRb
YXJyYXlfcG9zOmFycmF5X3Bvc19lbmRdID0gW3Bvc3NpYmxlX2FiYnJldmlhdGlvbl0KLSAgICAg
ICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJy
YXlfcG9zID0gYXJyYXlfcG9zX2VuZCAtIDEKLSAgICAgICAgICAgICAgICBhcnJheV9wb3MgKz0g
MQotICAgICAgICByZXR1cm4gb3V0cHV0Ci0KLSAgICBBQkJSRVZJQVRJT04gPSBmcm96ZW5zZXQo
WyJYSFIiLCAiRE9NIiwgIkNTUyJdKQotCi1WQUxJREFUT1JfSUZERUZfTkFNRSA9ICIhQVNTRVJU
X0RJU0FCTEVEIgotCi0KLWNsYXNzIERvbWFpbk5hbWVGaXhlczoKLSAgICBAY2xhc3NtZXRob2QK
LSAgICBkZWYgZ2V0X2ZpeGVkX2RhdGEoY2xzLCBkb21haW5fbmFtZSk6Ci0gICAgICAgIGZpZWxk
X25hbWVfcmVzID0gQ2FwaXRhbGl6ZXIudXBwZXJfY2FtZWxfY2FzZV90b19sb3dlcihkb21haW5f
bmFtZSkgKyAiQWdlbnQiCi0KLSAgICAgICAgY2xhc3MgUmVzKG9iamVjdCk6Ci0gICAgICAgICAg
ICBza2lwX2pzX2JpbmQgPSBkb21haW5fbmFtZSBpbiBjbHMuc2tpcF9qc19iaW5kX2RvbWFpbnMK
LQotICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgZGVmIGdldF9ndWFyZCgp
OgotICAgICAgICAgICAgICAgIGlmIGRvbWFpbl9uYW1lIGluIERPTUFJTl9ERUZJTkVfTkFNRV9N
QVA6Ci0gICAgICAgICAgICAgICAgICAgIGRlZmluZV9uYW1lID0gRE9NQUlOX0RFRklORV9OQU1F
X01BUFtkb21haW5fbmFtZV0KLQotICAgICAgICAgICAgICAgICAgICBjbGFzcyBHdWFyZDoKLSAg
ICAgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGRlZiBnZW5lcmF0ZV9vcGVuKG91dHB1dCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgb3V0cHV0LmFwcGVuZCgiI2lmIEVOQUJMRSglcylcbiIgJSBkZWZpbmVfbmFtZSkKLQotICAg
ICAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgICAgICAgICAg
ICAgZGVmIGdlbmVyYXRlX2Nsb3NlKG91dHB1dCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgb3V0cHV0LmFwcGVuZCgiI2VuZGlmIC8vIEVOQUJMRSglcylcbiIgJSBkZWZpbmVfbmFtZSkK
LQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gR3VhcmQKLQotICAgICAgICByZXR1cm4gUmVz
Ci0KLSAgICBza2lwX2pzX2JpbmRfZG9tYWlucyA9IHNldChbIkRPTURlYnVnZ2VyIl0pCi0KLQot
Y2xhc3MgUmF3VHlwZXMob2JqZWN0KToKLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIGdldChq
c29uX3R5cGUpOgotICAgICAgICBpZiBqc29uX3R5cGUgPT0gImJvb2xlYW4iOgotICAgICAgICAg
ICAgcmV0dXJuIFJhd1R5cGVzLkJvb2wKLSAgICAgICAgZWxpZiBqc29uX3R5cGUgPT0gInN0cmlu
ZyI6Ci0gICAgICAgICAgICByZXR1cm4gUmF3VHlwZXMuU3RyaW5nCi0gICAgICAgIGVsaWYganNv
bl90eXBlID09ICJhcnJheSI6Ci0gICAgICAgICAgICByZXR1cm4gUmF3VHlwZXMuQXJyYXkKLSAg
ICAgICAgZWxpZiBqc29uX3R5cGUgPT0gIm9iamVjdCI6Ci0gICAgICAgICAgICByZXR1cm4gUmF3
VHlwZXMuT2JqZWN0Ci0gICAgICAgIGVsaWYganNvbl90eXBlID09ICJpbnRlZ2VyIjoKLSAgICAg
ICAgICAgIHJldHVybiBSYXdUeXBlcy5JbnQKLSAgICAgICAgZWxpZiBqc29uX3R5cGUgPT0gIm51
bWJlciI6Ci0gICAgICAgICAgICByZXR1cm4gUmF3VHlwZXMuTnVtYmVyCi0gICAgICAgIGVsaWYg
anNvbl90eXBlID09ICJhbnkiOgotICAgICAgICAgICAgcmV0dXJuIFJhd1R5cGVzLkFueQotICAg
ICAgICBlbHNlOgotICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJVbmtub3duIHR5cGU6ICVz
IiAlIGpzb25fdHlwZSkKLQotICAgICMgRm9yIG91dHB1dCBwYXJhbWV0ZXIgYWxsIHZhbHVlcyBh
cmUgcGFzc2VkIGJ5IHBvaW50ZXIgZXhjZXB0IFJlZlB0ci1iYXNlZCB0eXBlcy4KLSAgICBjbGFz
cyBPdXRwdXRQYXNzTW9kZWw6Ci0gICAgICAgIGNsYXNzIEJ5UG9pbnRlcjoKLSAgICAgICAgICAg
IEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgIGRlZiBnZXRfYXJndW1lbnRfcHJlZml4KCk6Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuICImIgotCi0gICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0g
ICAgICAgICAgICBkZWYgZ2V0X3BhcmFtZXRlcl90eXBlX3N1ZmZpeCgpOgotICAgICAgICAgICAg
ICAgIHJldHVybiAiKiIKLQotICAgICAgICBjbGFzcyBCeVJlZmVyZW5jZToKLSAgICAgICAgICAg
IEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgIGRlZiBnZXRfYXJndW1lbnRfcHJlZml4KCk6Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuICIiCi0KLSAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAg
ICAgICAgICAgIGRlZiBnZXRfcGFyYW1ldGVyX3R5cGVfc3VmZml4KCk6Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuICImIgotCi0gICAgY2xhc3MgQmFzZVR5cGUob2JqZWN0KToKLSAgICAgICAgbmVl
ZF9pbnRlcm5hbF9ydW50aW1lX2Nhc3RfID0gRmFsc2UKLQotICAgICAgICBAY2xhc3NtZXRob2QK
LSAgICAgICAgZGVmIHJlcXVlc3RfcmF3X2ludGVybmFsX3J1bnRpbWVfY2FzdChjbHMpOgotICAg
ICAgICAgICAgaWYgbm90IGNscy5uZWVkX2ludGVybmFsX3J1bnRpbWVfY2FzdF86Ci0gICAgICAg
ICAgICAgICAgY2xzLm5lZWRfaW50ZXJuYWxfcnVudGltZV9jYXN0XyA9IFRydWUKLQotICAgICAg
ICBAY2xhc3NtZXRob2QKLSAgICAgICAgZGVmIGdldF9yYXdfdmFsaWRhdG9yX2NhbGxfdGV4dChj
bHMpOgotICAgICAgICAgICAgcmV0dXJuICJSdW50aW1lQ2FzdEhlbHBlcjo6YXNzZXJ0VHlwZTxJ
bnNwZWN0b3I6Okluc3BlY3RvclZhbHVlOjpUeXBlJXM+IiAlIGNscy5nZXRfdmFsaWRhdGVfbWV0
aG9kX3BhcmFtcygpLnRlbXBsYXRlX3R5cGUKLQotICAgIGNsYXNzIFN0cmluZyhCYXNlVHlwZSk6
Ci0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGdldF9nZXR0ZXJfbmFtZSgpOgot
ICAgICAgICAgICAgcmV0dXJuICJTdHJpbmciCi0KLSAgICAgICAgZ2V0X3NldHRlcl9uYW1lID0g
Z2V0X2dldHRlcl9uYW1lCi0KLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBkZWYgZ2V0
X2NfaW5pdGlhbGl6ZXIoKToKLSAgICAgICAgICAgIHJldHVybiAiXCJcIiIKLQotICAgICAgICBA
c3RhdGljbWV0aG9kCi0gICAgICAgIGRlZiBnZXRfanNfYmluZF90eXBlKCk6Ci0gICAgICAgICAg
ICByZXR1cm4gInN0cmluZyIKLQotICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgIGRlZiBn
ZXRfdmFsaWRhdGVfbWV0aG9kX3BhcmFtcygpOgotICAgICAgICAgICAgY2xhc3MgVmFsaWRhdGVN
ZXRob2RQYXJhbXM6Ci0gICAgICAgICAgICAgICAgdGVtcGxhdGVfdHlwZSA9ICJTdHJpbmciCi0g
ICAgICAgICAgICByZXR1cm4gVmFsaWRhdGVNZXRob2RQYXJhbXMKLQotICAgICAgICBAc3RhdGlj
bWV0aG9kCi0gICAgICAgIGRlZiBnZXRfb3V0cHV0X3Bhc3NfbW9kZWwoKToKLSAgICAgICAgICAg
IHJldHVybiBSYXdUeXBlcy5PdXRwdXRQYXNzTW9kZWwuQnlQb2ludGVyCi0KLSAgICAgICAgQHN0
YXRpY21ldGhvZAotICAgICAgICBkZWYgaXNfaGVhdnlfdmFsdWUoKToKLSAgICAgICAgICAgIHJl
dHVybiBUcnVlCi0KLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBkZWYgZ2V0X2FycmF5
X2l0ZW1fcmF3X2NfdHlwZV90ZXh0KCk6Ci0gICAgICAgICAgICByZXR1cm4gIlN0cmluZyIKLQot
ICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgIGRlZiBnZXRfcmF3X3R5cGVfbW9kZWwoKToK
LSAgICAgICAgICAgIHJldHVybiBUeXBlTW9kZWwuU3RyaW5nCi0KLSAgICBjbGFzcyBJbnQoQmFz
ZVR5cGUpOgotICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgIGRlZiBnZXRfZ2V0dGVyX25h
bWUoKToKLSAgICAgICAgICAgIHJldHVybiAiSW50IgotCi0gICAgICAgIEBzdGF0aWNtZXRob2QK
LSAgICAgICAgZGVmIGdldF9zZXR0ZXJfbmFtZSgpOgotICAgICAgICAgICAgcmV0dXJuICJOdW1i
ZXIiCi0KLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBkZWYgZ2V0X2NfaW5pdGlhbGl6
ZXIoKToKLSAgICAgICAgICAgIHJldHVybiAiMCIKLQotICAgICAgICBAc3RhdGljbWV0aG9kCi0g
ICAgICAgIGRlZiBnZXRfanNfYmluZF90eXBlKCk6Ci0gICAgICAgICAgICByZXR1cm4gIm51bWJl
ciIKLQotICAgICAgICBAY2xhc3NtZXRob2QKLSAgICAgICAgZGVmIGdldF9yYXdfdmFsaWRhdG9y
X2NhbGxfdGV4dChjbHMpOgotICAgICAgICAgICAgcmV0dXJuICJSdW50aW1lQ2FzdEhlbHBlcjo6
YXNzZXJ0SW50IgotCi0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGdldF9vdXRw
dXRfcGFzc19tb2RlbCgpOgotICAgICAgICAgICAgcmV0dXJuIFJhd1R5cGVzLk91dHB1dFBhc3NN
b2RlbC5CeVBvaW50ZXIKLQotICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgIGRlZiBpc19o
ZWF2eV92YWx1ZSgpOgotICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0KLSAgICAgICAgQHN0YXRp
Y21ldGhvZAotICAgICAgICBkZWYgZ2V0X2FycmF5X2l0ZW1fcmF3X2NfdHlwZV90ZXh0KCk6Ci0g
ICAgICAgICAgICByZXR1cm4gImludCIKLQotICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAg
IGRlZiBnZXRfcmF3X3R5cGVfbW9kZWwoKToKLSAgICAgICAgICAgIHJldHVybiBUeXBlTW9kZWwu
SW50Ci0KLSAgICBjbGFzcyBOdW1iZXIoQmFzZVR5cGUpOgotICAgICAgICBAc3RhdGljbWV0aG9k
Ci0gICAgICAgIGRlZiBnZXRfZ2V0dGVyX25hbWUoKToKLSAgICAgICAgICAgIHJldHVybiAiRG91
YmxlIgotCi0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGdldF9zZXR0ZXJfbmFt
ZSgpOgotICAgICAgICAgICAgcmV0dXJuICJOdW1iZXIiCi0KLSAgICAgICAgQHN0YXRpY21ldGhv
ZAotICAgICAgICBkZWYgZ2V0X2NfaW5pdGlhbGl6ZXIoKToKLSAgICAgICAgICAgIHJldHVybiAi
MCIKLQotICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgIGRlZiBnZXRfanNfYmluZF90eXBl
KCk6Ci0gICAgICAgICAgICByZXR1cm4gIm51bWJlciIKLQotICAgICAgICBAc3RhdGljbWV0aG9k
Ci0gICAgICAgIGRlZiBnZXRfdmFsaWRhdGVfbWV0aG9kX3BhcmFtcygpOgotICAgICAgICAgICAg
Y2xhc3MgVmFsaWRhdGVNZXRob2RQYXJhbXM6Ci0gICAgICAgICAgICAgICAgdGVtcGxhdGVfdHlw
ZSA9ICJOdW1iZXIiCi0gICAgICAgICAgICByZXR1cm4gVmFsaWRhdGVNZXRob2RQYXJhbXMKLQot
ICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgIGRlZiBnZXRfb3V0cHV0X3Bhc3NfbW9kZWwo
KToKLSAgICAgICAgICAgIHJldHVybiBSYXdUeXBlcy5PdXRwdXRQYXNzTW9kZWwuQnlQb2ludGVy
Ci0KLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBkZWYgaXNfaGVhdnlfdmFsdWUoKToK
LSAgICAgICAgICAgIHJldHVybiBGYWxzZQotCi0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAg
ICAgZGVmIGdldF9hcnJheV9pdGVtX3Jhd19jX3R5cGVfdGV4dCgpOgotICAgICAgICAgICAgcmV0
dXJuICJkb3VibGUiCi0KLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBkZWYgZ2V0X3Jh
d190eXBlX21vZGVsKCk6Ci0gICAgICAgICAgICByZXR1cm4gVHlwZU1vZGVsLk51bWJlcgotCi0g
ICAgY2xhc3MgQm9vbChCYXNlVHlwZSk6Ci0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAg
ZGVmIGdldF9nZXR0ZXJfbmFtZSgpOgotICAgICAgICAgICAgcmV0dXJuICJCb29sZWFuIgotCi0g
ICAgICAgIGdldF9zZXR0ZXJfbmFtZSA9IGdldF9nZXR0ZXJfbmFtZQotCi0gICAgICAgIEBzdGF0
aWNtZXRob2QKLSAgICAgICAgZGVmIGdldF9jX2luaXRpYWxpemVyKCk6Ci0gICAgICAgICAgICBy
ZXR1cm4gImZhbHNlIgotCi0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGdldF9q
c19iaW5kX3R5cGUoKToKLSAgICAgICAgICAgIHJldHVybiAiYm9vbGVhbiIKLQotICAgICAgICBA
c3RhdGljbWV0aG9kCi0gICAgICAgIGRlZiBnZXRfdmFsaWRhdGVfbWV0aG9kX3BhcmFtcygpOgot
ICAgICAgICAgICAgY2xhc3MgVmFsaWRhdGVNZXRob2RQYXJhbXM6Ci0gICAgICAgICAgICAgICAg
dGVtcGxhdGVfdHlwZSA9ICJCb29sZWFuIgotICAgICAgICAgICAgcmV0dXJuIFZhbGlkYXRlTWV0
aG9kUGFyYW1zCi0KLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBkZWYgZ2V0X291dHB1
dF9wYXNzX21vZGVsKCk6Ci0gICAgICAgICAgICByZXR1cm4gUmF3VHlwZXMuT3V0cHV0UGFzc01v
ZGVsLkJ5UG9pbnRlcgotCi0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGlzX2hl
YXZ5X3ZhbHVlKCk6Ci0gICAgICAgICAgICByZXR1cm4gRmFsc2UKLQotICAgICAgICBAc3RhdGlj
bWV0aG9kCi0gICAgICAgIGRlZiBnZXRfYXJyYXlfaXRlbV9yYXdfY190eXBlX3RleHQoKToKLSAg
ICAgICAgICAgIHJldHVybiAiYm9vbCIKLQotICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAg
IGRlZiBnZXRfcmF3X3R5cGVfbW9kZWwoKToKLSAgICAgICAgICAgIHJldHVybiBUeXBlTW9kZWwu
Qm9vbAotCi0gICAgY2xhc3MgT2JqZWN0KEJhc2VUeXBlKToKLSAgICAgICAgQHN0YXRpY21ldGhv
ZAotICAgICAgICBkZWYgZ2V0X2dldHRlcl9uYW1lKCk6Ci0gICAgICAgICAgICByZXR1cm4gIk9i
amVjdCIKLQotICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgIGRlZiBnZXRfc2V0dGVyX25h
bWUoKToKLSAgICAgICAgICAgIHJldHVybiAiVmFsdWUiCi0KLSAgICAgICAgQHN0YXRpY21ldGhv
ZAotICAgICAgICBkZWYgZ2V0X2NfaW5pdGlhbGl6ZXIoKToKLSAgICAgICAgICAgIHJldHVybiAi
SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSIKLQotICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAg
ICAgIGRlZiBnZXRfanNfYmluZF90eXBlKCk6Ci0gICAgICAgICAgICByZXR1cm4gIm9iamVjdCIK
LQotICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgIGRlZiBnZXRfb3V0cHV0X2FyZ3VtZW50
X3ByZWZpeCgpOgotICAgICAgICAgICAgcmV0dXJuICIiCi0KLSAgICAgICAgQHN0YXRpY21ldGhv
ZAotICAgICAgICBkZWYgZ2V0X3ZhbGlkYXRlX21ldGhvZF9wYXJhbXMoKToKLSAgICAgICAgICAg
IGNsYXNzIFZhbGlkYXRlTWV0aG9kUGFyYW1zOgotICAgICAgICAgICAgICAgIHRlbXBsYXRlX3R5
cGUgPSAiT2JqZWN0IgotICAgICAgICAgICAgcmV0dXJuIFZhbGlkYXRlTWV0aG9kUGFyYW1zCi0K
LSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBkZWYgZ2V0X291dHB1dF9wYXNzX21vZGVs
KCk6Ci0gICAgICAgICAgICByZXR1cm4gUmF3VHlwZXMuT3V0cHV0UGFzc01vZGVsLkJ5UmVmZXJl
bmNlCi0KLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBkZWYgaXNfaGVhdnlfdmFsdWUo
KToKLSAgICAgICAgICAgIHJldHVybiBUcnVlCi0KLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAg
ICAgICBkZWYgZ2V0X2FycmF5X2l0ZW1fcmF3X2NfdHlwZV90ZXh0KCk6Ci0gICAgICAgICAgICBy
ZXR1cm4gIkluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0IgotCi0gICAgICAgIEBzdGF0aWNtZXRo
b2QKLSAgICAgICAgZGVmIGdldF9yYXdfdHlwZV9tb2RlbCgpOgotICAgICAgICAgICAgcmV0dXJu
IFR5cGVNb2RlbC5PYmplY3QKLQotICAgIGNsYXNzIEFueShCYXNlVHlwZSk6Ci0gICAgICAgIEBz
dGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGdldF9nZXR0ZXJfbmFtZSgpOgotICAgICAgICAgICAg
cmV0dXJuICJWYWx1ZSIKLQotICAgICAgICBnZXRfc2V0dGVyX25hbWUgPSBnZXRfZ2V0dGVyX25h
bWUKLQotICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgIGRlZiBnZXRfY19pbml0aWFsaXpl
cigpOgotICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJVbnN1cHBvcnRlZCIpCi0KLSAgICAg
ICAgQHN0YXRpY21ldGhvZAotICAgICAgICBkZWYgZ2V0X2pzX2JpbmRfdHlwZSgpOgotICAgICAg
ICAgICAgcmFpc2UgRXhjZXB0aW9uKCJVbnN1cHBvcnRlZCIpCi0KLSAgICAgICAgQHN0YXRpY21l
dGhvZAotICAgICAgICBkZWYgZ2V0X3Jhd192YWxpZGF0b3JfY2FsbF90ZXh0KCk6Ci0gICAgICAg
ICAgICByZXR1cm4gIlJ1bnRpbWVDYXN0SGVscGVyOjphc3NlcnRBbnkiCi0KLSAgICAgICAgQHN0
YXRpY21ldGhvZAotICAgICAgICBkZWYgZ2V0X291dHB1dF9wYXNzX21vZGVsKCk6Ci0gICAgICAg
ICAgICByZXR1cm4gUmF3VHlwZXMuT3V0cHV0UGFzc01vZGVsLkJ5UmVmZXJlbmNlCi0KLSAgICAg
ICAgQHN0YXRpY21ldGhvZAotICAgICAgICBkZWYgaXNfaGVhdnlfdmFsdWUoKToKLSAgICAgICAg
ICAgIHJldHVybiBUcnVlCi0KLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBkZWYgZ2V0
X2FycmF5X2l0ZW1fcmF3X2NfdHlwZV90ZXh0KCk6Ci0gICAgICAgICAgICByZXR1cm4gIkluc3Bl
Y3Rvcjo6SW5zcGVjdG9yVmFsdWUiCi0KLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBk
ZWYgZ2V0X3Jhd190eXBlX21vZGVsKCk6Ci0gICAgICAgICAgICByZXR1cm4gVHlwZU1vZGVsLkFu
eQotCi0gICAgY2xhc3MgQXJyYXkoQmFzZVR5cGUpOgotICAgICAgICBAc3RhdGljbWV0aG9kCi0g
ICAgICAgIGRlZiBnZXRfZ2V0dGVyX25hbWUoKToKLSAgICAgICAgICAgIHJldHVybiAiQXJyYXki
Ci0KLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBkZWYgZ2V0X3NldHRlcl9uYW1lKCk6
Ci0gICAgICAgICAgICByZXR1cm4gIlZhbHVlIgotCi0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAg
ICAgICAgZGVmIGdldF9jX2luaXRpYWxpemVyKCk6Ci0gICAgICAgICAgICByZXR1cm4gIkluc3Bl
Y3RvckFycmF5OjpjcmVhdGUoKSIKLQotICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgIGRl
ZiBnZXRfanNfYmluZF90eXBlKCk6Ci0gICAgICAgICAgICByZXR1cm4gIm9iamVjdCIKLQotICAg
ICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgIGRlZiBnZXRfb3V0cHV0X2FyZ3VtZW50X3ByZWZp
eCgpOgotICAgICAgICAgICAgcmV0dXJuICIiCi0KLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAg
ICAgICBkZWYgZ2V0X3ZhbGlkYXRlX21ldGhvZF9wYXJhbXMoKToKLSAgICAgICAgICAgIGNsYXNz
IFZhbGlkYXRlTWV0aG9kUGFyYW1zOgotICAgICAgICAgICAgICAgIHRlbXBsYXRlX3R5cGUgPSAi
QXJyYXkiCi0gICAgICAgICAgICByZXR1cm4gVmFsaWRhdGVNZXRob2RQYXJhbXMKLQotICAgICAg
ICBAc3RhdGljbWV0aG9kCi0gICAgICAgIGRlZiBnZXRfb3V0cHV0X3Bhc3NfbW9kZWwoKToKLSAg
ICAgICAgICAgIHJldHVybiBSYXdUeXBlcy5PdXRwdXRQYXNzTW9kZWwuQnlSZWZlcmVuY2UKLQot
ICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgIGRlZiBpc19oZWF2eV92YWx1ZSgpOgotICAg
ICAgICAgICAgcmV0dXJuIFRydWUKLQotICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgIGRl
ZiBnZXRfYXJyYXlfaXRlbV9yYXdfY190eXBlX3RleHQoKToKLSAgICAgICAgICAgIHJldHVybiAi
SW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheSIKLQotICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAg
ICAgIGRlZiBnZXRfcmF3X3R5cGVfbW9kZWwoKToKLSAgICAgICAgICAgIHJldHVybiBUeXBlTW9k
ZWwuQXJyYXkKLQotCi1kZWYgcmVwbGFjZV9yaWdodF9zaGlmdChpbnB1dF9zdHIpOgotICAgIHJl
dHVybiBpbnB1dF9zdHIucmVwbGFjZSgiPj4iLCAiPiA+IikKLQotCi1jbGFzcyBDb21tYW5kUmV0
dXJuUGFzc01vZGVsOgotICAgIGNsYXNzIEJ5UmVmZXJlbmNlOgotICAgICAgICBkZWYgX19pbml0
X18oc2VsZiwgdmFyX3R5cGUsIHNldF9jb25kaXRpb24pOgotICAgICAgICAgICAgc2VsZi52YXJf
dHlwZSA9IHZhcl90eXBlCi0gICAgICAgICAgICBzZWxmLnNldF9jb25kaXRpb24gPSBzZXRfY29u
ZGl0aW9uCi0KLSAgICAgICAgZGVmIGdldF9yZXR1cm5fdmFyX3R5cGUoc2VsZik6Ci0gICAgICAg
ICAgICByZXR1cm4gc2VsZi52YXJfdHlwZQotCi0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAg
ICAgZGVmIGdldF9vdXRwdXRfYXJndW1lbnRfcHJlZml4KCk6Ci0gICAgICAgICAgICByZXR1cm4g
IiIKLQotICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgIGRlZiBnZXRfb3V0cHV0X3RvX3Jh
d19leHByZXNzaW9uKCk6Ci0gICAgICAgICAgICByZXR1cm4gIiVzIgotCi0gICAgICAgIGRlZiBn
ZXRfb3V0cHV0X3BhcmFtZXRlcl90eXBlKHNlbGYpOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYu
dmFyX3R5cGUgKyAiJiIKLQotICAgICAgICBkZWYgZ2V0X3NldF9yZXR1cm5fY29uZGl0aW9uKHNl
bGYpOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuc2V0X2NvbmRpdGlvbgotCi0gICAgY2xhc3Mg
QnlQb2ludGVyOgotICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgdmFyX3R5cGUpOgotICAgICAg
ICAgICAgc2VsZi52YXJfdHlwZSA9IHZhcl90eXBlCi0KLSAgICAgICAgZGVmIGdldF9yZXR1cm5f
dmFyX3R5cGUoc2VsZik6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi52YXJfdHlwZQotCi0gICAg
ICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGdldF9vdXRwdXRfYXJndW1lbnRfcHJlZml4
KCk6Ci0gICAgICAgICAgICByZXR1cm4gIiYiCi0KLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAg
ICAgICBkZWYgZ2V0X291dHB1dF90b19yYXdfZXhwcmVzc2lvbigpOgotICAgICAgICAgICAgcmV0
dXJuICIlcyIKLQotICAgICAgICBkZWYgZ2V0X291dHB1dF9wYXJhbWV0ZXJfdHlwZShzZWxmKToK
LSAgICAgICAgICAgIHJldHVybiBzZWxmLnZhcl90eXBlICsgIioiCi0KLSAgICAgICAgQHN0YXRp
Y21ldGhvZAotICAgICAgICBkZWYgZ2V0X3NldF9yZXR1cm5fY29uZGl0aW9uKCk6Ci0gICAgICAg
ICAgICByZXR1cm4gTm9uZQotCi0gICAgY2xhc3MgT3B0T3V0cHV0OgotICAgICAgICBkZWYgX19p
bml0X18oc2VsZiwgdmFyX3R5cGUpOgotICAgICAgICAgICAgc2VsZi52YXJfdHlwZSA9IHZhcl90
eXBlCi0KLSAgICAgICAgZGVmIGdldF9yZXR1cm5fdmFyX3R5cGUoc2VsZik6Ci0gICAgICAgICAg
ICByZXR1cm4gIkluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6Ok9wdE91dHB1dDwlcz4iICUgc2VsZi52
YXJfdHlwZQotCi0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGdldF9vdXRwdXRf
YXJndW1lbnRfcHJlZml4KCk6Ci0gICAgICAgICAgICByZXR1cm4gIiYiCi0KLSAgICAgICAgQHN0
YXRpY21ldGhvZAotICAgICAgICBkZWYgZ2V0X291dHB1dF90b19yYXdfZXhwcmVzc2lvbigpOgot
ICAgICAgICAgICAgcmV0dXJuICIlcy5nZXRWYWx1ZSgpIgotCi0gICAgICAgIGRlZiBnZXRfb3V0
cHV0X3BhcmFtZXRlcl90eXBlKHNlbGYpOgotICAgICAgICAgICAgcmV0dXJuICJJbnNwZWN0b3I6
OlR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8JXM+KiIgJSBzZWxmLnZhcl90eXBlCi0KLSAgICAgICAg
QHN0YXRpY21ldGhvZAotICAgICAgICBkZWYgZ2V0X3NldF9yZXR1cm5fY29uZGl0aW9uKCk6Ci0g
ICAgICAgICAgICByZXR1cm4gIiVzLmlzQXNzaWduZWQoKSIKLQotCi1jbGFzcyBUeXBlTW9kZWw6
Ci0gICAgY2xhc3MgUmVmUHRyQmFzZWQob2JqZWN0KToKLSAgICAgICAgZGVmIF9faW5pdF9fKHNl
bGYsIGNsYXNzX25hbWUpOgotICAgICAgICAgICAgc2VsZi5jbGFzc19uYW1lID0gY2xhc3NfbmFt
ZQotICAgICAgICAgICAgc2VsZi5vcHRpb25hbCA9IEZhbHNlCi0KLSAgICAgICAgZGVmIGdldF9v
cHRpb25hbChzZWxmKToKLSAgICAgICAgICAgIHJlc3VsdCA9IFR5cGVNb2RlbC5SZWZQdHJCYXNl
ZChzZWxmLmNsYXNzX25hbWUpCi0gICAgICAgICAgICByZXN1bHQub3B0aW9uYWwgPSBUcnVlCi0g
ICAgICAgICAgICByZXR1cm4gcmVzdWx0Ci0KLSAgICAgICAgZGVmIGdldF9jb21tYW5kX3JldHVy
bl9wYXNzX21vZGVsKHNlbGYpOgotICAgICAgICAgICAgaWYgc2VsZi5vcHRpb25hbDoKLSAgICAg
ICAgICAgICAgICBzZXRfY29uZGl0aW9uID0gIiVzIgotICAgICAgICAgICAgZWxzZToKLSAgICAg
ICAgICAgICAgICBzZXRfY29uZGl0aW9uID0gTm9uZQotICAgICAgICAgICAgcmV0dXJuIENvbW1h
bmRSZXR1cm5QYXNzTW9kZWwuQnlSZWZlcmVuY2UocmVwbGFjZV9yaWdodF9zaGlmdCgiUmVmUHRy
PCVzPiIgJSBzZWxmLmNsYXNzX25hbWUpLCBzZXRfY29uZGl0aW9uKQotCi0gICAgICAgIGRlZiBn
ZXRfaW5wdXRfcGFyYW1fdHlwZV90ZXh0KHNlbGYpOgotICAgICAgICAgICAgcmV0dXJuIHJlcGxh
Y2VfcmlnaHRfc2hpZnQoIlBhc3NSZWZQdHI8JXM+IiAlIHNlbGYuY2xhc3NfbmFtZSkKLQotICAg
ICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgIGRlZiBnZXRfZXZlbnRfc2V0dGVyX2V4cHJlc3Np
b25fcGF0dGVybigpOgotICAgICAgICAgICAgcmV0dXJuICIlcyIKLQotICAgIGNsYXNzIEVudW0o
b2JqZWN0KToKLSAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGJhc2VfdHlwZV9uYW1lKToKLSAg
ICAgICAgICAgIHNlbGYudHlwZV9uYW1lID0gYmFzZV90eXBlX25hbWUgKyAiOjpFbnVtIgotCi0g
ICAgICAgIGRlZiBnZXRfb3B0aW9uYWwoYmFzZV9zZWxmKToKLSAgICAgICAgICAgIGNsYXNzIEVu
dW1PcHRpb25hbDoKLSAgICAgICAgICAgICAgICBAY2xhc3NtZXRob2QKLSAgICAgICAgICAgICAg
ICBkZWYgZ2V0X29wdGlvbmFsKGNscyk6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBjbHMK
LQotICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgICAgICBkZWYgZ2V0
X2NvbW1hbmRfcmV0dXJuX3Bhc3NfbW9kZWwoKToKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IENvbW1hbmRSZXR1cm5QYXNzTW9kZWwuT3B0T3V0cHV0KGJhc2Vfc2VsZi50eXBlX25hbWUpCi0K
LSAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICAgICAgZGVmIGdldF9p
bnB1dF9wYXJhbV90eXBlX3RleHQoKToKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJhc2Vf
c2VsZi50eXBlX25hbWUgKyAiKiIKLQotICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAg
ICAgICAgICAgICAgICBkZWYgZ2V0X2V2ZW50X3NldHRlcl9leHByZXNzaW9uX3BhdHRlcm4oKToK
LSAgICAgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJUT0RPIikKLSAgICAgICAgICAg
IHJldHVybiBFbnVtT3B0aW9uYWwKLQotICAgICAgICBkZWYgZ2V0X2NvbW1hbmRfcmV0dXJuX3Bh
c3NfbW9kZWwoc2VsZik6Ci0gICAgICAgICAgICByZXR1cm4gQ29tbWFuZFJldHVyblBhc3NNb2Rl
bC5CeVBvaW50ZXIoc2VsZi50eXBlX25hbWUpCi0KLSAgICAgICAgZGVmIGdldF9pbnB1dF9wYXJh
bV90eXBlX3RleHQoc2VsZik6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi50eXBlX25hbWUKLQot
ICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgIGRlZiBnZXRfZXZlbnRfc2V0dGVyX2V4cHJl
c3Npb25fcGF0dGVybigpOgotICAgICAgICAgICAgcmV0dXJuICIlcyIKLQotICAgIGNsYXNzIFZh
bHVlVHlwZShvYmplY3QpOgotICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgdHlwZV9uYW1lLCBp
c19oZWF2eSk6Ci0gICAgICAgICAgICBzZWxmLnR5cGVfbmFtZSA9IHR5cGVfbmFtZQotICAgICAg
ICAgICAgc2VsZi5pc19oZWF2eSA9IGlzX2hlYXZ5Ci0KLSAgICAgICAgZGVmIGdldF9vcHRpb25h
bChzZWxmKToKLSAgICAgICAgICAgIHJldHVybiBzZWxmLlZhbHVlT3B0aW9uYWwoc2VsZikKLQot
ICAgICAgICBkZWYgZ2V0X2NvbW1hbmRfcmV0dXJuX3Bhc3NfbW9kZWwoc2VsZik6Ci0gICAgICAg
ICAgICByZXR1cm4gQ29tbWFuZFJldHVyblBhc3NNb2RlbC5CeVBvaW50ZXIoc2VsZi50eXBlX25h
bWUpCi0KLSAgICAgICAgZGVmIGdldF9pbnB1dF9wYXJhbV90eXBlX3RleHQoc2VsZik6Ci0gICAg
ICAgICAgICBpZiBzZWxmLmlzX2hlYXZ5OgotICAgICAgICAgICAgICAgIHJldHVybiAiY29uc3Qg
JXMmIiAlIHNlbGYudHlwZV9uYW1lCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAg
IHJldHVybiBzZWxmLnR5cGVfbmFtZQotCi0gICAgICAgIGRlZiBnZXRfb3B0X291dHB1dF90eXBl
XyhzZWxmKToKLSAgICAgICAgICAgIHJldHVybiBzZWxmLnR5cGVfbmFtZQotCi0gICAgICAgIEBz
dGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGdldF9ldmVudF9zZXR0ZXJfZXhwcmVzc2lvbl9wYXR0
ZXJuKCk6Ci0gICAgICAgICAgICByZXR1cm4gIiVzIgotCi0gICAgICAgIGNsYXNzIFZhbHVlT3B0
aW9uYWw6Ci0gICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgYmFzZSk6Ci0gICAgICAgICAg
ICAgICAgc2VsZi5iYXNlID0gYmFzZQotCi0gICAgICAgICAgICBkZWYgZ2V0X29wdGlvbmFsKHNl
bGYpOgotICAgICAgICAgICAgICAgIHJldHVybiBzZWxmCi0KLSAgICAgICAgICAgIGRlZiBnZXRf
Y29tbWFuZF9yZXR1cm5fcGFzc19tb2RlbChzZWxmKToKLSAgICAgICAgICAgICAgICByZXR1cm4g
Q29tbWFuZFJldHVyblBhc3NNb2RlbC5PcHRPdXRwdXQoc2VsZi5iYXNlLmdldF9vcHRfb3V0cHV0
X3R5cGVfKCkpCi0KLSAgICAgICAgICAgIGRlZiBnZXRfaW5wdXRfcGFyYW1fdHlwZV90ZXh0KHNl
bGYpOgotICAgICAgICAgICAgICAgIHJldHVybiAiY29uc3QgJXMqIGNvbnN0IiAlIHNlbGYuYmFz
ZS50eXBlX25hbWUKLQotICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgZGVm
IGdldF9ldmVudF9zZXR0ZXJfZXhwcmVzc2lvbl9wYXR0ZXJuKCk6Ci0gICAgICAgICAgICAgICAg
cmV0dXJuICIqJXMiCi0KLSAgICBjbGFzcyBFeGFjdGx5SW50KFZhbHVlVHlwZSk6Ci0gICAgICAg
IGRlZiBfX2luaXRfXyhzZWxmKToKLSAgICAgICAgICAgIFR5cGVNb2RlbC5WYWx1ZVR5cGUuX19p
bml0X18oc2VsZiwgImludCIsIEZhbHNlKQotCi0gICAgICAgIGRlZiBnZXRfaW5wdXRfcGFyYW1f
dHlwZV90ZXh0KHNlbGYpOgotICAgICAgICAgICAgcmV0dXJuICJJbnNwZWN0b3I6OlR5cGVCdWls
ZGVyOjpFeGFjdGx5SW50IgotCi0gICAgICAgIGRlZiBnZXRfb3B0X291dHB1dF90eXBlXyhzZWxm
KToKLSAgICAgICAgICAgIHJldHVybiAiSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6RXhhY3RseUlu
dCIKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBpbml0X2NsYXNzKGNscyk6Ci0gICAgICAg
IGNscy5Cb29sID0gY2xzLlZhbHVlVHlwZSgiYm9vbCIsIEZhbHNlKQotICAgICAgICBpZiBFWEFD
VExZX0lOVF9TVVBQT1JURUQ6Ci0gICAgICAgICAgICBjbHMuSW50ID0gY2xzLkV4YWN0bHlJbnQo
KQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgY2xzLkludCA9IGNscy5WYWx1ZVR5cGUoImlu
dCIsIEZhbHNlKQotICAgICAgICBjbHMuTnVtYmVyID0gY2xzLlZhbHVlVHlwZSgiZG91YmxlIiwg
RmFsc2UpCi0gICAgICAgIGNscy5TdHJpbmcgPSBjbHMuVmFsdWVUeXBlKCJTdHJpbmciLCBUcnVl
LCkKLSAgICAgICAgY2xzLk9iamVjdCA9IGNscy5SZWZQdHJCYXNlZCgiSW5zcGVjdG9yOjpJbnNw
ZWN0b3JPYmplY3QiKQotICAgICAgICBjbHMuQXJyYXkgPSBjbHMuUmVmUHRyQmFzZWQoIkluc3Bl
Y3Rvcjo6SW5zcGVjdG9yQXJyYXkiKQotICAgICAgICBjbHMuQW55ID0gY2xzLlJlZlB0ckJhc2Vk
KCJJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlIikKLQotVHlwZU1vZGVsLmluaXRfY2xhc3MoKQot
Ci0KLSMgQ29sbGVjdGlvbiBvZiBJbnNwZWN0b3JPYmplY3QgY2xhc3MgbWV0aG9kcyB0aGF0IGFy
ZSBsaWtlbHkgdG8gYmUgb3ZlcmxvYWRlZCBpbiBnZW5lcmF0ZWQgY2xhc3MuCi0jIFdlIG11c3Qg
ZXhwbGljaXRseSBpbXBvcnQgYWxsIG92ZXJsb2FkZWQgbWV0aG9kcyBvciB0aGV5IHdvbid0IGJl
IGF2YWlsYWJsZSB0byB1c2VyLgotSU5TUEVDVE9SX09CSkVDVF9TRVRURVJfTkFNRVMgPSBmcm96
ZW5zZXQoWyJzZXRWYWx1ZSIsICJzZXRCb29sZWFuIiwgInNldE51bWJlciIsICJzZXRTdHJpbmci
LCAic2V0VmFsdWUiLCAic2V0T2JqZWN0IiwgInNldEFycmF5Il0pCi0KLQotZGVmIGZpeF90eXBl
X25hbWUoanNvbl9uYW1lKToKLSAgICBpZiBqc29uX25hbWUgaW4gVFlQRV9OQU1FX0ZJWF9NQVA6
Ci0gICAgICAgIGZpeGVkID0gVFlQRV9OQU1FX0ZJWF9NQVBbanNvbl9uYW1lXQotCi0gICAgICAg
IGNsYXNzIFJlc3VsdChvYmplY3QpOgotICAgICAgICAgICAgY2xhc3NfbmFtZSA9IGZpeGVkCi0K
LSAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgIGRlZiBvdXRwdXRfY29tbWVu
dCh3cml0ZXIpOgotICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCIvLyBUeXBlIG9yaWdp
bmFsbHkgd2FzIG5hbWVkICclcycuXG4iICUganNvbl9uYW1lKQotICAgIGVsc2U6Ci0KLSAgICAg
ICAgY2xhc3MgUmVzdWx0KG9iamVjdCk6Ci0gICAgICAgICAgICBjbGFzc19uYW1lID0ganNvbl9u
YW1lCi0KLSAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgIGRlZiBvdXRwdXRf
Y29tbWVudCh3cml0ZXIpOgotICAgICAgICAgICAgICAgIHBhc3MKLQotICAgIHJldHVybiBSZXN1
bHQKLQotCi1jbGFzcyBXcml0ZXI6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG91dHB1dCwgaW5k
ZW50KToKLSAgICAgICAgc2VsZi5vdXRwdXQgPSBvdXRwdXQKLSAgICAgICAgc2VsZi5pbmRlbnQg
PSBpbmRlbnQKLQotICAgIGRlZiBuZXdsaW5lKHNlbGYsIHN0cik6Ci0gICAgICAgIGlmIChzZWxm
LmluZGVudCk6Ci0gICAgICAgICAgICBzZWxmLm91dHB1dC5hcHBlbmQoc2VsZi5pbmRlbnQpCi0g
ICAgICAgIHNlbGYub3V0cHV0LmFwcGVuZChzdHIpCi0KLSAgICBkZWYgYXBwZW5kKHNlbGYsIHN0
cik6Ci0gICAgICAgIHNlbGYub3V0cHV0LmFwcGVuZChzdHIpCi0KLSAgICBkZWYgbmV3bGluZV9t
dWx0aWxpbmUoc2VsZiwgc3RyKToKLSAgICAgICAgcGFydHMgPSBzdHIuc3BsaXQoJ1xuJykKLSAg
ICAgICAgc2VsZi5uZXdsaW5lKHBhcnRzWzBdKQotICAgICAgICBmb3IgcCBpbiBwYXJ0c1sxOl06
Ci0gICAgICAgICAgICBzZWxmLm91dHB1dC5hcHBlbmQoJ1xuJykKLSAgICAgICAgICAgIGlmIHA6
Ci0gICAgICAgICAgICAgICAgc2VsZi5uZXdsaW5lKHApCi0KLSAgICBkZWYgYXBwZW5kX211bHRp
bGluZShzZWxmLCBzdHIpOgotICAgICAgICBwYXJ0cyA9IHN0ci5zcGxpdCgnXG4nKQotICAgICAg
ICBzZWxmLmFwcGVuZChwYXJ0c1swXSkKLSAgICAgICAgZm9yIHAgaW4gcGFydHNbMTpdOgotICAg
ICAgICAgICAgc2VsZi5vdXRwdXQuYXBwZW5kKCdcbicpCi0gICAgICAgICAgICBpZiBwOgotICAg
ICAgICAgICAgICAgIHNlbGYubmV3bGluZShwKQotCi0gICAgZGVmIGdldF9pbmRlbnQoc2VsZik6
Ci0gICAgICAgIHJldHVybiBzZWxmLmluZGVudAotCi0gICAgZGVmIGdldF9pbmRlbnRlZChzZWxm
LCBhZGRpdGlvbmFsX2luZGVudCk6Ci0gICAgICAgIHJldHVybiBXcml0ZXIoc2VsZi5vdXRwdXQs
IHNlbGYuaW5kZW50ICsgYWRkaXRpb25hbF9pbmRlbnQpCi0KLSAgICBkZWYgaW5zZXJ0X3dyaXRl
cihzZWxmLCBhZGRpdGlvbmFsX2luZGVudCk6Ci0gICAgICAgIG5ld19vdXRwdXQgPSBbXQotICAg
ICAgICBzZWxmLm91dHB1dC5hcHBlbmQobmV3X291dHB1dCkKLSAgICAgICAgcmV0dXJuIFdyaXRl
cihuZXdfb3V0cHV0LCBzZWxmLmluZGVudCArIGFkZGl0aW9uYWxfaW5kZW50KQotCi0KLWNsYXNz
IEVudW1Db25zdGFudHM6Ci0gICAgbWFwXyA9IHt9Ci0gICAgY29uc3RhbnRzXyA9IFtdCi0KLSAg
ICBAY2xhc3NtZXRob2QKLSAgICBkZWYgYWRkX2NvbnN0YW50KGNscywgdmFsdWUpOgotICAgICAg
ICBpZiB2YWx1ZSBpbiBjbHMubWFwXzoKLSAgICAgICAgICAgIHJldHVybiBjbHMubWFwX1t2YWx1
ZV0KLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHBvcyA9IGxlbihjbHMubWFwXykKLSAgICAg
ICAgICAgIGNscy5tYXBfW3ZhbHVlXSA9IHBvcwotICAgICAgICAgICAgY2xzLmNvbnN0YW50c18u
YXBwZW5kKHZhbHVlKQotICAgICAgICAgICAgcmV0dXJuIHBvcwotCi0gICAgQGNsYXNzbWV0aG9k
Ci0gICAgZGVmIGdldF9lbnVtX2NvbnN0YW50X2NvZGUoY2xzKToKLSAgICAgICAgb3V0cHV0ID0g
W10KLSAgICAgICAgZm9yIGl0ZW0gaW4gY2xzLmNvbnN0YW50c186Ci0gICAgICAgICAgICBvdXRw
dXQuYXBwZW5kKCIgICAgXCIiICsgaXRlbSArICJcIiIpCi0gICAgICAgIHJldHVybiAiLFxuIi5q
b2luKG91dHB1dCkgKyAiXG4iCi0KLQotIyBUeXBlYnVpbGRlciBjb2RlIGlzIGdlbmVyYXRlZCBp
biBzZXZlcmFsIHBhc3NlczogZmlyc3QgdHlwZWRlZnMsIHRoZW4gb3RoZXIgY2xhc3Nlcy4KLSMg
TWFudWFsIHBhc3MgbWFuYWdlbWVudCBpcyBuZWVkZWQgYmVjYXVzZSB3ZSBjYW5ub3QgaGF2ZSBm
b3J3YXJkIGRlY2xhcmF0aW9ucyBmb3IgdHlwZWRlZnMuCi1jbGFzcyBUeXBlQnVpbGRlclBhc3M6
Ci0gICAgVFlQRURFRiA9ICJ0eXBlZGVmIgotICAgIE1BSU4gPSAibWFpbiIKLQotCi1jbGFzcyBU
eXBlQmluZGluZ3M6Ci0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBjcmVhdGVfbmFtZWRfdHlw
ZV9kZWNsYXJhdGlvbihqc29uX3R5cGFibGUsIGNvbnRleHRfZG9tYWluX25hbWUsIHR5cGVfZGF0
YSk6Ci0gICAgICAgIGpzb25fdHlwZSA9IHR5cGVfZGF0YS5nZXRfanNvbl90eXBlKCkKLQotICAg
ICAgICBjbGFzcyBIZWxwZXI6Ci0gICAgICAgICAgICBpc19hZF9ob2MgPSBGYWxzZQotICAgICAg
ICAgICAgZnVsbF9uYW1lX3ByZWZpeF9mb3JfdXNlID0gIkluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6
OiIgKyBjb250ZXh0X2RvbWFpbl9uYW1lICsgIjo6IgotICAgICAgICAgICAgZnVsbF9uYW1lX3By
ZWZpeF9mb3JfaW1wbCA9ICJJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjoiICsgY29udGV4dF9kb21h
aW5fbmFtZSArICI6OiIKLQotICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAg
ZGVmIHdyaXRlX2RvYyh3cml0ZXIpOgotICAgICAgICAgICAgICAgIGlmICJkZXNjcmlwdGlvbiIg
aW4ganNvbl90eXBlOgotICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3bGluZSgiLyogIikK
LSAgICAgICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVuZChqc29uX3R5cGVbImRlc2NyaXB0aW9u
Il0pCi0gICAgICAgICAgICAgICAgICAgIHdyaXRlci5hcHBlbmQoIiAqL1xuIikKLQotICAgICAg
ICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgZGVmIGFkZF90b19mb3J3YXJkX2xpc3Rl
bmVyKGZvcndhcmRfbGlzdGVuZXIpOgotICAgICAgICAgICAgICAgIGZvcndhcmRfbGlzdGVuZXIu
YWRkX3R5cGVfZGF0YSh0eXBlX2RhdGEpCi0KLQotICAgICAgICBmaXhlZF90eXBlX25hbWUgPSBm
aXhfdHlwZV9uYW1lKGpzb25fdHlwZVsiaWQiXSkKLSAgICAgICAgcmV0dXJuIFR5cGVCaW5kaW5n
cy5jcmVhdGVfdHlwZV9kZWNsYXJhdGlvbl8oanNvbl90eXBhYmxlLCBjb250ZXh0X2RvbWFpbl9u
YW1lLCBmaXhlZF90eXBlX25hbWUsIEhlbHBlcikKLQotICAgIEBzdGF0aWNtZXRob2QKLSAgICBk
ZWYgY3JlYXRlX2FkX2hvY190eXBlX2RlY2xhcmF0aW9uKGpzb25fdHlwYWJsZSwgY29udGV4dF9k
b21haW5fbmFtZSwgYWRfaG9jX3R5cGVfY29udGV4dCk6Ci0gICAgICAgIGNsYXNzIEhlbHBlcjoK
LSAgICAgICAgICAgIGlzX2FkX2hvYyA9IFRydWUKLSAgICAgICAgICAgIGZ1bGxfbmFtZV9wcmVm
aXhfZm9yX3VzZSA9IGFkX2hvY190eXBlX2NvbnRleHQuY29udGFpbmVyX3JlbGF0aXZlX25hbWVf
cHJlZml4Ci0gICAgICAgICAgICBmdWxsX25hbWVfcHJlZml4X2Zvcl9pbXBsID0gYWRfaG9jX3R5
cGVfY29udGV4dC5jb250YWluZXJfZnVsbF9uYW1lX3ByZWZpeAotCi0gICAgICAgICAgICBAc3Rh
dGljbWV0aG9kCi0gICAgICAgICAgICBkZWYgd3JpdGVfZG9jKHdyaXRlcik6Ci0gICAgICAgICAg
ICAgICAgcGFzcwotCi0gICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICBkZWYg
YWRkX3RvX2ZvcndhcmRfbGlzdGVuZXIoZm9yd2FyZF9saXN0ZW5lcik6Ci0gICAgICAgICAgICAg
ICAgcGFzcwotICAgICAgICBmaXhlZF90eXBlX25hbWUgPSBhZF9ob2NfdHlwZV9jb250ZXh0Lmdl
dF90eXBlX25hbWVfZml4KCkKLSAgICAgICAgcmV0dXJuIFR5cGVCaW5kaW5ncy5jcmVhdGVfdHlw
ZV9kZWNsYXJhdGlvbl8oanNvbl90eXBhYmxlLCBjb250ZXh0X2RvbWFpbl9uYW1lLCBmaXhlZF90
eXBlX25hbWUsIEhlbHBlcikKLQotICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgY3JlYXRlX3R5
cGVfZGVjbGFyYXRpb25fKGpzb25fdHlwYWJsZSwgY29udGV4dF9kb21haW5fbmFtZSwgZml4ZWRf
dHlwZV9uYW1lLCBoZWxwZXIpOgotICAgICAgICBpZiBqc29uX3R5cGFibGVbInR5cGUiXSA9PSAi
c3RyaW5nIjoKLSAgICAgICAgICAgIGlmICJlbnVtIiBpbiBqc29uX3R5cGFibGU6Ci0KLSAgICAg
ICAgICAgICAgICBjbGFzcyBFbnVtQmluZGluZzoKLSAgICAgICAgICAgICAgICAgICAgbmVlZF91
c2VyX3J1bnRpbWVfY2FzdF8gPSBGYWxzZQotICAgICAgICAgICAgICAgICAgICBuZWVkX2ludGVy
bmFsX3J1bnRpbWVfY2FzdF8gPSBGYWxzZQotCi0gICAgICAgICAgICAgICAgICAgIEBjbGFzc21l
dGhvZAotICAgICAgICAgICAgICAgICAgICBkZWYgcmVzb2x2ZV9pbm5lcihjbHMsIHJlc29sdmVf
Y29udGV4dCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBwYXNzCi0KLSAgICAgICAgICAgICAg
ICAgICAgQGNsYXNzbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgIGRlZiByZXF1ZXN0X3VzZXJf
cnVudGltZV9jYXN0KGNscywgcmVxdWVzdCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiBy
ZXF1ZXN0OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNscy5uZWVkX3VzZXJfcnVudGlt
ZV9jYXN0XyA9IFRydWUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LmFja25v
d2xlZGdlKCkKLQotICAgICAgICAgICAgICAgICAgICBAY2xhc3NtZXRob2QKLSAgICAgICAgICAg
ICAgICAgICAgZGVmIHJlcXVlc3RfaW50ZXJuYWxfcnVudGltZV9jYXN0KGNscyk6Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBjbHMubmVlZF9pbnRlcm5hbF9ydW50aW1lX2Nhc3RfID0gVHJ1ZQot
Ci0gICAgICAgICAgICAgICAgICAgIEBjbGFzc21ldGhvZAotICAgICAgICAgICAgICAgICAgICBk
ZWYgZ2V0X2NvZGVfZ2VuZXJhdG9yKGVudW1fYmluZGluZ19jbHMpOgotICAgICAgICAgICAgICAg
ICAgICAgICAgI0ZJWE1FOiBnZW5lcmF0ZSBhZC1ob2MgZW51bXMgdG9vIG9uY2Ugd2UgZmlndXJl
IG91dCBob3cgdG8gYmV0dGVyIGltcGxlbWVudCB0aGVtIGluIEMrKy4KLSAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbW1lbnRfb3V0ID0gaGVscGVyLmlzX2FkX2hvYwotCi0gICAgICAgICAgICAg
ICAgICAgICAgICBjbGFzcyBDb2RlR2VuZXJhdG9yOgotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWYgZ2VuZXJh
dGVfdHlwZV9idWlsZGVyKHdyaXRlciwgZ2VuZXJhdGVfY29udGV4dCk6Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGVudW0gPSBqc29uX3R5cGFibGVbImVudW0iXQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBoZWxwZXIud3JpdGVfZG9jKHdyaXRlcikKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZW51bV9uYW1lID0gZml4ZWRfdHlwZV9uYW1lLmNsYXNz
X25hbWUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZml4ZWRfdHlwZV9uYW1lLm91
dHB1dF9jb21tZW50KHdyaXRlcikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3Jp
dGVyLm5ld2xpbmUoInN0cnVjdCAiKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3
cml0ZXIuYXBwZW5kKGVudW1fbmFtZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
d3JpdGVyLmFwcGVuZCgiIHtcbiIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdy
aXRlci5uZXdsaW5lKCIgICAgZW51bSBFbnVtIHtcbiIpCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGZvciBlbnVtX2l0ZW0gaW4gZW51bToKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGVudW1fcG9zID0gRW51bUNvbnN0YW50cy5hZGRfY29uc3RhbnQoZW51bV9p
dGVtKQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtX2NfbmFtZSA9
IGZpeF9jYW1lbF9jYXNlKGVudW1faXRlbSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIGl0ZW1fY19uYW1lIGluIFRZUEVfTkFNRV9GSVhfTUFQOgotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1fY19uYW1lID0gVFlQRV9OQU1FX0ZJWF9N
QVBbaXRlbV9jX25hbWVdCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0
ZXIubmV3bGluZSgiICAgICAgICAiKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgd3JpdGVyLmFwcGVuZChpdGVtX2NfbmFtZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHdyaXRlci5hcHBlbmQoIiA9ICIpCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB3cml0ZXIuYXBwZW5kKCIlcyIgJSBlbnVtX3BvcykKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5hcHBlbmQoIixcbiIpCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCIgICAgfTtcbiIpCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIGVudW1fYmluZGluZ19jbHMubmVlZF91c2VyX3J1bnRp
bWVfY2FzdF86Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBFeGNl
cHRpb24oIk5vdCB5ZXQgaW1wbGVtZW50ZWQiKQotCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIGVudW1fYmluZGluZ19jbHMubmVlZF9pbnRlcm5hbF9ydW50aW1lX2Nhc3RfOgot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVuZCgiI2lmICVz
XG4iICUgVkFMSURBVE9SX0lGREVGX05BTUUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB3cml0ZXIubmV3bGluZSgiICAgIHN0YXRpYyB2b2lkIGFzc2VydENvcnJlY3RWYWx1
ZShJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlKiB2YWx1ZSk7XG4iKQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVuZCgiI2VuZGlmICAvLyAlc1xuIiAlIFZB
TElEQVRPUl9JRkRFRl9OQU1FKQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2YWxpZGF0b3Jfd3JpdGVyID0gZ2VuZXJhdGVfY29udGV4dC52YWxpZGF0b3Jfd3JpdGVyCi0K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbWFpbl9maXhlcyA9IERvbWFp
bk5hbWVGaXhlcy5nZXRfZml4ZWRfZGF0YShjb250ZXh0X2RvbWFpbl9uYW1lKQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9tYWluX2d1YXJkID0gZG9tYWluX2ZpeGVzLmdl
dF9ndWFyZCgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBkb21haW5f
Z3VhcmQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9tYWluX2d1
YXJkLmdlbmVyYXRlX29wZW4odmFsaWRhdG9yX3dyaXRlcikKLQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCJ2b2lkICVzJXM6OmFz
c2VydENvcnJlY3RWYWx1ZShJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlKiB2YWx1ZSlcbiIgJSAo
aGVscGVyLmZ1bGxfbmFtZV9wcmVmaXhfZm9yX2ltcGwsIGVudW1fbmFtZSkpCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIntcbiIp
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5l
d2xpbmUoIiAgICBXVEY6OlN0cmluZyBzO1xuIikKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgiICAgIGJvb2wgY2FzdF9yZXMgPSB2
YWx1ZS0+YXNTdHJpbmcoJnMpO1xuIikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgiICAgIEFTU0VSVChjYXN0X3Jlcyk7XG4iKQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbGVuKGVudW0pID4gMDoKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25kaXRpb25fbGlzdCA9IFtd
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGVudW1faXRlbSBp
biBlbnVtOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVt
X3BvcyA9IEVudW1Db25zdGFudHMuYWRkX2NvbnN0YW50KGVudW1faXRlbSkKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uX2xpc3QuYXBwZW5kKCJz
ID09IFwiJXNcIiIgJSBlbnVtX2l0ZW0pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCIgICAgQVNTRVJUKCVzKTtcbiIgJSAi
IHx8ICIuam9pbihjb25kaXRpb25fbGlzdCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIn1cbiIpCi0KLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIGRvbWFpbl9ndWFyZDoKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkb21haW5fZ3VhcmQuZ2VuZXJhdGVfY2xvc2UodmFsaWRh
dG9yX3dyaXRlcikKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRh
dG9yX3dyaXRlci5uZXdsaW5lKCJcblxuIikKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB3cml0ZXIubmV3bGluZSgifTsgLy8gc3RydWN0ICIpCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHdyaXRlci5hcHBlbmQoZW51bV9uYW1lKQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB3cml0ZXIuYXBwZW5kKCJcbiIpCi0KLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmIHJl
Z2lzdGVyX3VzZShmb3J3YXJkX2xpc3RlbmVyKToKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcGFzcwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBnZXRfZ2VuZXJhdGVfcGFzc19pZCgpOgot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHlwZUJ1aWxkZXJQYXNzLk1B
SU4KLQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENvZGVHZW5lcmF0b3IKLQotICAg
ICAgICAgICAgICAgICAgICBAY2xhc3NtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgZGVmIGdl
dF92YWxpZGF0b3JfY2FsbF90ZXh0KGNscyk6Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gaGVscGVyLmZ1bGxfbmFtZV9wcmVmaXhfZm9yX3VzZSArIGZpeGVkX3R5cGVfbmFtZS5jbGFz
c19uYW1lICsgIjo6YXNzZXJ0Q29ycmVjdFZhbHVlIgotCi0gICAgICAgICAgICAgICAgICAgIEBj
bGFzc21ldGhvZAotICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X2FycmF5X2l0ZW1fY190eXBl
X3RleHQoY2xzKToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBoZWxwZXIuZnVsbF9u
YW1lX3ByZWZpeF9mb3JfdXNlICsgZml4ZWRfdHlwZV9uYW1lLmNsYXNzX25hbWUgKyAiOjpFbnVt
IgotCi0gICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgICAgICAg
ICAgZGVmIGdldF9zZXR0ZXJfdmFsdWVfZXhwcmVzc2lvbl9wYXR0ZXJuKCk6Ci0gICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gIkluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OmdldCVzRW51bUNv
bnN0YW50VmFsdWUoJXMpIgotCi0gICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAg
ICAgICAgICAgICAgICAgICAgZGVmIHJlZHVjZV90b19yYXdfdHlwZSgpOgotICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIFJhd1R5cGVzLlN0cmluZwotCi0gICAgICAgICAgICAgICAgICAg
IEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgZGVmIGdldF90eXBlX21vZGVsKCk6
Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHlwZU1vZGVsLkVudW0oaGVscGVyLmZ1
bGxfbmFtZV9wcmVmaXhfZm9yX3VzZSArIGZpeGVkX3R5cGVfbmFtZS5jbGFzc19uYW1lKQotCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIEVudW1CaW5kaW5nCi0gICAgICAgICAgICBlbHNlOgotICAg
ICAgICAgICAgICAgIGlmIGhlbHBlci5pc19hZF9ob2M6Ci0KLSAgICAgICAgICAgICAgICAgICAg
Y2xhc3MgUGxhaW5TdHJpbmc6Ci0gICAgICAgICAgICAgICAgICAgICAgICBAY2xhc3NtZXRob2QK
LSAgICAgICAgICAgICAgICAgICAgICAgIGRlZiByZXNvbHZlX2lubmVyKGNscywgcmVzb2x2ZV9j
b250ZXh0KToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCi0KLSAgICAgICAgICAg
ICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBy
ZXF1ZXN0X3VzZXJfcnVudGltZV9jYXN0KHJlcXVlc3QpOgotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiVW5zdXBwb3J0ZWQiKQotCi0gICAgICAgICAgICAgICAg
ICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWYgcmVxdWVz
dF9pbnRlcm5hbF9ydW50aW1lX2Nhc3QoKToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
YXNzCi0KLSAgICAgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGRlZiBnZXRfY29kZV9nZW5lcmF0b3IoKToKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gTm9uZQotCi0gICAgICAgICAgICAgICAgICAgICAgICBAY2xhc3Nt
ZXRob2QKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBnZXRfdmFsaWRhdG9yX2NhbGxfdGV4
dChjbHMpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSYXdUeXBlcy5TdHJp
bmcuZ2V0X3Jhd192YWxpZGF0b3JfY2FsbF90ZXh0KCkKLQotICAgICAgICAgICAgICAgICAgICAg
ICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgICAgICAgICAgICAgZGVmIHJlZHVjZV90b19y
YXdfdHlwZSgpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSYXdUeXBlcy5T
dHJpbmcKLQotICAgICAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAg
ICAgICAgICAgICAgICAgZGVmIGdldF90eXBlX21vZGVsKCk6Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIFR5cGVNb2RlbC5TdHJpbmcKLQotICAgICAgICAgICAgICAgICAgICAg
ICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgICAgICAgICAgICAgZGVmIGdldF9zZXR0ZXJf
dmFsdWVfZXhwcmVzc2lvbl9wYXR0ZXJuKCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIE5vbmUKLQotICAgICAgICAgICAgICAgICAgICAgICAgQGNsYXNzbWV0aG9kCi0gICAg
ICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X2FycmF5X2l0ZW1fY190eXBlX3RleHQoY2xzKToK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2xzLnJlZHVjZV90b19yYXdfdHlw
ZSgpLmdldF9hcnJheV9pdGVtX3Jhd19jX3R5cGVfdGV4dCgpCi0KLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIFBsYWluU3RyaW5nCi0KLSAgICAgICAgICAgICAgICBlbHNlOgotCi0gICAgICAg
ICAgICAgICAgICAgIGNsYXNzIFR5cGVkZWZTdHJpbmc6Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBAY2xhc3NtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlZiByZXNvbHZlX2lubmVy
KGNscywgcmVzb2x2ZV9jb250ZXh0KToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNz
Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGRlZiByZXF1ZXN0X3VzZXJfcnVudGltZV9jYXN0KHJlcXVlc3QpOgotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiVW5zdXBwb3J0ZWQiKQotCi0g
ICAgICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICAgICAgICAg
ICAgICBkZWYgcmVxdWVzdF9pbnRlcm5hbF9ydW50aW1lX2Nhc3QoKToKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBSYXdUeXBlcy5TdHJpbmcucmVxdWVzdF9yYXdfaW50ZXJuYWxfcnVudGlt
ZV9jYXN0KCkKLQotICAgICAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAg
ICAgICAgICAgICAgICAgICAgZGVmIGdldF9jb2RlX2dlbmVyYXRvcigpOgotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNsYXNzIENvZGVHZW5lcmF0b3I6Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZGVmIGdlbmVyYXRlX3R5cGVfYnVpbGRlcih3cml0ZXIsIGdlbmVyYXRlX2NvbnRleHQpOgot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscGVyLndyaXRlX2RvYyh3cml0
ZXIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXhlZF90eXBlX25hbWUu
b3V0cHV0X2NvbW1lbnQod3JpdGVyKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgd3JpdGVyLm5ld2xpbmUoInR5cGVkZWYgU3RyaW5nICIpCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB3cml0ZXIuYXBwZW5kKGZpeGVkX3R5cGVfbmFtZS5jbGFzc19uYW1l
KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVuZCgiO1xu
XG4iKQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmIHJlZ2lzdGVyX3VzZShmb3J3YXJkX2xp
c3RlbmVyKToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKLQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRlZiBnZXRfZ2VuZXJhdGVfcGFzc19pZCgpOgotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFR5cGVCdWlsZGVyUGFzcy5UWVBFREVG
Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ29kZUdlbmVyYXRvcgotCi0g
ICAgICAgICAgICAgICAgICAgICAgICBAY2xhc3NtZXRob2QKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGRlZiBnZXRfdmFsaWRhdG9yX2NhbGxfdGV4dChjbHMpOgotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBSYXdUeXBlcy5TdHJpbmcuZ2V0X3Jhd192YWxpZGF0b3JfY2FsbF90
ZXh0KCkKLQotICAgICAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAg
ICAgICAgICAgICAgICAgZGVmIHJlZHVjZV90b19yYXdfdHlwZSgpOgotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBSYXdUeXBlcy5TdHJpbmcKLQotICAgICAgICAgICAgICAgICAg
ICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgICAgICAgICAgICAgZGVmIGdldF90eXBl
X21vZGVsKCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFR5cGVNb2RlbC5W
YWx1ZVR5cGUoIiVzJXMiICUgKGhlbHBlci5mdWxsX25hbWVfcHJlZml4X2Zvcl91c2UsIGZpeGVk
X3R5cGVfbmFtZS5jbGFzc19uYW1lKSwgVHJ1ZSkKLQotICAgICAgICAgICAgICAgICAgICAgICAg
QHN0YXRpY21ldGhvZAotICAgICAgICAgICAgICAgICAgICAgICAgZGVmIGdldF9zZXR0ZXJfdmFs
dWVfZXhwcmVzc2lvbl9wYXR0ZXJuKCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIE5vbmUKLQotICAgICAgICAgICAgICAgICAgICAgICAgQGNsYXNzbWV0aG9kCi0gICAgICAg
ICAgICAgICAgICAgICAgICBkZWYgZ2V0X2FycmF5X2l0ZW1fY190eXBlX3RleHQoY2xzKToKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gImNvbnN0ICVzJXMmIiAlIChoZWxwZXIu
ZnVsbF9uYW1lX3ByZWZpeF9mb3JfdXNlLCBmaXhlZF90eXBlX25hbWUuY2xhc3NfbmFtZSkKLQot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHlwZWRlZlN0cmluZwotCi0gICAgICAgIGVsaWYg
anNvbl90eXBhYmxlWyJ0eXBlIl0gPT0gImludGVnZXIiOgotICAgICAgICAgICAgICAgIGlmIGhl
bHBlci5pc19hZF9ob2M6Ci0KLSAgICAgICAgICAgICAgICAgICAgY2xhc3MgUGxhaW5JbnRlZ2Vy
OgotICAgICAgICAgICAgICAgICAgICAgICAgQGNsYXNzbWV0aG9kCi0gICAgICAgICAgICAgICAg
ICAgICAgICBkZWYgcmVzb2x2ZV9pbm5lcihjbHMsIHJlc29sdmVfY29udGV4dCk6Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcGFzcwotCi0gICAgICAgICAgICAgICAgICAgICAgICBAc3Rh
dGljbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWYgcmVxdWVzdF91c2VyX3J1bnRp
bWVfY2FzdChyZXF1ZXN0KToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBFeGNl
cHRpb24oIlVuc3VwcG9ydGVkIikKLQotICAgICAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21l
dGhvZAotICAgICAgICAgICAgICAgICAgICAgICAgZGVmIHJlcXVlc3RfaW50ZXJuYWxfcnVudGlt
ZV9jYXN0KCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzcwotCi0gICAgICAgICAg
ICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWYg
Z2V0X2NvZGVfZ2VuZXJhdG9yKCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IE5vbmUKLQotICAgICAgICAgICAgICAgICAgICAgICAgQGNsYXNzbWV0aG9kCi0gICAgICAgICAg
ICAgICAgICAgICAgICBkZWYgZ2V0X3ZhbGlkYXRvcl9jYWxsX3RleHQoY2xzKToKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmF3VHlwZXMuSW50LmdldF9yYXdfdmFsaWRhdG9y
X2NhbGxfdGV4dCgpCi0KLSAgICAgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGRlZiByZWR1Y2VfdG9fcmF3X3R5cGUoKToKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmF3VHlwZXMuSW50Ci0KLSAgICAgICAgICAgICAg
ICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBnZXRf
dHlwZV9tb2RlbCgpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBUeXBlTW9k
ZWwuSW50Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGRlZiBnZXRfc2V0dGVyX3ZhbHVlX2V4cHJlc3Npb25fcGF0dGVybigp
OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb25lCi0KLSAgICAgICAgICAg
ICAgICAgICAgICAgIEBjbGFzc21ldGhvZAotICAgICAgICAgICAgICAgICAgICAgICAgZGVmIGdl
dF9hcnJheV9pdGVtX2NfdHlwZV90ZXh0KGNscyk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGNscy5yZWR1Y2VfdG9fcmF3X3R5cGUoKS5nZXRfYXJyYXlfaXRlbV9yYXdfY190
eXBlX3RleHQoKQotCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBQbGFpbkludGVnZXIKLQot
ICAgICAgICAgICAgICAgIGVsc2U6Ci0KLSAgICAgICAgICAgICAgICAgICAgY2xhc3MgVHlwZWRl
ZkludGVnZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICBAY2xhc3NtZXRob2QKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGRlZiByZXNvbHZlX2lubmVyKGNscywgcmVzb2x2ZV9jb250ZXh0KToK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCi0KLSAgICAgICAgICAgICAgICAgICAg
ICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlZiByZXF1ZXN0X3Vz
ZXJfcnVudGltZV9jYXN0KHJlcXVlc3QpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJh
aXNlIEV4Y2VwdGlvbigiVW5zdXBwb3J0ZWQiKQotCi0gICAgICAgICAgICAgICAgICAgICAgICBA
c3RhdGljbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWYgcmVxdWVzdF9pbnRlcm5h
bF9ydW50aW1lX2Nhc3QoKToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBSYXdUeXBlcy5J
bnQucmVxdWVzdF9yYXdfaW50ZXJuYWxfcnVudGltZV9jYXN0KCkKLQotICAgICAgICAgICAgICAg
ICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgICAgICAgICAgICAgZGVmIGdldF9j
b2RlX2dlbmVyYXRvcigpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzIENvZGVH
ZW5lcmF0b3I6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmIGdlbmVyYXRlX3R5cGVfYnVpbGRl
cih3cml0ZXIsIGdlbmVyYXRlX2NvbnRleHQpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaGVscGVyLndyaXRlX2RvYyh3cml0ZXIpCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmaXhlZF90eXBlX25hbWUub3V0cHV0X2NvbW1lbnQod3JpdGVyKQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoInR5cGVkZWYg
aW50ICIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuYXBwZW5k
KGZpeGVkX3R5cGVfbmFtZS5jbGFzc19uYW1lKQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgd3JpdGVyLmFwcGVuZCgiO1xuXG4iKQotCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZGVmIHJlZ2lzdGVyX3VzZShmb3J3YXJkX2xpc3RlbmVyKToKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHBhc3MKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBA
c3RhdGljbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBnZXRfZ2Vu
ZXJhdGVfcGFzc19pZCgpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIFR5cGVCdWlsZGVyUGFzcy5UWVBFREVGCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gQ29kZUdlbmVyYXRvcgotCi0gICAgICAgICAgICAgICAgICAgICAgICBAY2xhc3Nt
ZXRob2QKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBnZXRfdmFsaWRhdG9yX2NhbGxfdGV4
dChjbHMpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSYXdUeXBlcy5JbnQu
Z2V0X3Jhd192YWxpZGF0b3JfY2FsbF90ZXh0KCkKLQotICAgICAgICAgICAgICAgICAgICAgICAg
QHN0YXRpY21ldGhvZAotICAgICAgICAgICAgICAgICAgICAgICAgZGVmIHJlZHVjZV90b19yYXdf
dHlwZSgpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSYXdUeXBlcy5JbnQK
LQotICAgICAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgICAg
ICAgICAgICAgZGVmIGdldF90eXBlX21vZGVsKCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIFR5cGVNb2RlbC5JbnQKLQotICAgICAgICAgICAgICAgICAgICAgICAgQHN0YXRp
Y21ldGhvZAotICAgICAgICAgICAgICAgICAgICAgICAgZGVmIGdldF9zZXR0ZXJfdmFsdWVfZXhw
cmVzc2lvbl9wYXR0ZXJuKCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5v
bmUKLQotICAgICAgICAgICAgICAgICAgICAgICAgQGNsYXNzbWV0aG9kCi0gICAgICAgICAgICAg
ICAgICAgICAgICBkZWYgZ2V0X2FycmF5X2l0ZW1fY190eXBlX3RleHQoY2xzKToKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gaGVscGVyLmZ1bGxfbmFtZV9wcmVmaXhfZm9yX3Vz
ZSArIGZpeGVkX3R5cGVfbmFtZS5jbGFzc19uYW1lCi0KLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIFR5cGVkZWZJbnRlZ2VyCi0KLSAgICAgICAgZWxpZiBqc29uX3R5cGFibGVbInR5cGUiXSA9
PSAib2JqZWN0IjoKLSAgICAgICAgICAgIGlmICJwcm9wZXJ0aWVzIiBpbiBqc29uX3R5cGFibGU6
Ci0KLSAgICAgICAgICAgICAgICBjbGFzcyBDbGFzc0JpbmRpbmc6Ci0gICAgICAgICAgICAgICAg
ICAgIHJlc29sdmVfZGF0YV8gPSBOb25lCi0gICAgICAgICAgICAgICAgICAgIG5lZWRfdXNlcl9y
dW50aW1lX2Nhc3RfID0gRmFsc2UKLSAgICAgICAgICAgICAgICAgICAgbmVlZF9pbnRlcm5hbF9y
dW50aW1lX2Nhc3RfID0gRmFsc2UKLQotICAgICAgICAgICAgICAgICAgICBAY2xhc3NtZXRob2QK
LSAgICAgICAgICAgICAgICAgICAgZGVmIHJlc29sdmVfaW5uZXIoY2xzLCByZXNvbHZlX2NvbnRl
eHQpOgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgY2xzLnJlc29sdmVfZGF0YV86Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuCi0KLSAgICAgICAgICAgICAgICAgICAgICAg
IHByb3BlcnRpZXMgPSBqc29uX3R5cGFibGVbInByb3BlcnRpZXMiXQotICAgICAgICAgICAgICAg
ICAgICAgICAgbWFpbiA9IFtdCi0gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25hbCA9IFtd
Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGFkX2hvY190eXBlX2xpc3QgPSBbXQotCi0gICAg
ICAgICAgICAgICAgICAgICAgICBmb3IgcHJvcCBpbiBwcm9wZXJ0aWVzOgotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHByb3BfbmFtZSA9IHByb3BbIm5hbWUiXQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGFkX2hvY190eXBlX2NvbnRleHQgPSBjbHMuQWRIb2NUeXBlQ29udGV4dElt
cGwocHJvcF9uYW1lLCBmaXhlZF90eXBlX25hbWUuY2xhc3NfbmFtZSwgcmVzb2x2ZV9jb250ZXh0
LCBhZF9ob2NfdHlwZV9saXN0LCBoZWxwZXIuZnVsbF9uYW1lX3ByZWZpeF9mb3JfaW1wbCkKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBiaW5kaW5nID0gcmVzb2x2ZV9wYXJhbV90eXBlKHBy
b3AsIGNvbnRleHRfZG9tYWluX25hbWUsIGFkX2hvY190eXBlX2NvbnRleHQpCi0KLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb2RlX2dlbmVyYXRvciA9IGJpbmRpbmcuZ2V0X2NvZGVfZ2Vu
ZXJhdG9yKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBjb2RlX2dlbmVyYXRvcjoK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZV9nZW5lcmF0b3IucmVnaXN0ZXJf
dXNlKHJlc29sdmVfY29udGV4dC5mb3J3YXJkX2xpc3RlbmVyKQotCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY2xhc3MgUHJvcGVydHlEYXRhOgotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwYXJhbV90eXBlX2JpbmRpbmcgPSBiaW5kaW5nCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHAgPSBwcm9wCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBw
cm9wLmdldCgib3B0aW9uYWwiKToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0
aW9uYWwuYXBwZW5kKFByb3BlcnR5RGF0YSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBl
bHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWluLmFwcGVuZChQcm9wZXJ0
eURhdGEpCi0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzIFJlc29sdmVEYXRhOgotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1haW5fcHJvcGVydGllcyA9IG1haW4KLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBvcHRpb25hbF9wcm9wZXJ0aWVzID0gb3B0aW9uYWwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBhZF9ob2NfdHlwZXMgPSBhZF9ob2NfdHlwZV9saXN0Ci0K
LSAgICAgICAgICAgICAgICAgICAgICAgIGNscy5yZXNvbHZlX2RhdGFfID0gUmVzb2x2ZURhdGEK
LQotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGFkX2hvYyBpbiBhZF9ob2NfdHlwZV9saXN0
OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkX2hvYy5yZXNvbHZlX2lubmVyKHJlc29s
dmVfY29udGV4dCkKLQotICAgICAgICAgICAgICAgICAgICBAY2xhc3NtZXRob2QKLSAgICAgICAg
ICAgICAgICAgICAgZGVmIHJlcXVlc3RfdXNlcl9ydW50aW1lX2Nhc3QoY2xzLCByZXF1ZXN0KToK
LSAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCByZXF1ZXN0OgotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybgotICAgICAgICAgICAgICAgICAgICAgICAgY2xzLm5lZWRfdXNl
cl9ydW50aW1lX2Nhc3RfID0gVHJ1ZQotICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5h
Y2tub3dsZWRnZSgpCi0gICAgICAgICAgICAgICAgICAgICAgICBjbHMucmVxdWVzdF9pbnRlcm5h
bF9ydW50aW1lX2Nhc3QoKQotCi0gICAgICAgICAgICAgICAgICAgIEBjbGFzc21ldGhvZAotICAg
ICAgICAgICAgICAgICAgICBkZWYgcmVxdWVzdF9pbnRlcm5hbF9ydW50aW1lX2Nhc3QoY2xzKToK
LSAgICAgICAgICAgICAgICAgICAgICAgIGlmIGNscy5uZWVkX2ludGVybmFsX3J1bnRpbWVfY2Fz
dF86Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgICAgICAgICAg
ICAgICAgICBjbHMubmVlZF9pbnRlcm5hbF9ydW50aW1lX2Nhc3RfID0gVHJ1ZQotICAgICAgICAg
ICAgICAgICAgICAgICAgZm9yIHAgaW4gY2xzLnJlc29sdmVfZGF0YV8ubWFpbl9wcm9wZXJ0aWVz
OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAucGFyYW1fdHlwZV9iaW5kaW5nLnJlcXVl
c3RfaW50ZXJuYWxfcnVudGltZV9jYXN0KCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciBw
IGluIGNscy5yZXNvbHZlX2RhdGFfLm9wdGlvbmFsX3Byb3BlcnRpZXM6Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcC5wYXJhbV90eXBlX2JpbmRpbmcucmVxdWVzdF9pbnRlcm5hbF9ydW50
aW1lX2Nhc3QoKQotCi0gICAgICAgICAgICAgICAgICAgIEBjbGFzc21ldGhvZAotICAgICAgICAg
ICAgICAgICAgICBkZWYgZ2V0X2NvZGVfZ2VuZXJhdG9yKGNsYXNzX2JpbmRpbmdfY2xzKToKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGNsYXNzIENvZGVHZW5lcmF0b3I6Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQGNsYXNzbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZGVmIGdlbmVyYXRlX3R5cGVfYnVpbGRlcihjbHMsIHdyaXRlciwgZ2VuZXJhdGVfY29udGV4dCk6
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmVfZGF0YSA9IGNsYXNzX2Jp
bmRpbmdfY2xzLnJlc29sdmVfZGF0YV8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aGVscGVyLndyaXRlX2RvYyh3cml0ZXIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNsYXNzX25hbWUgPSBmaXhlZF90eXBlX25hbWUuY2xhc3NfbmFtZQotCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlzX29wZW5fdHlwZSA9IChjb250ZXh0X2RvbWFpbl9uYW1lICsg
Ii4iICsgY2xhc3NfbmFtZSkgaW4gVFlQRVNfV0lUSF9PUEVOX0ZJRUxEX0xJU1RfU0VUCi0KLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZml4ZWRfdHlwZV9uYW1lLm91dHB1dF9jb21t
ZW50KHdyaXRlcikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xp
bmUoImNsYXNzICIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5hcHBl
bmQoY2xhc3NfbmFtZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLmFw
cGVuZCgiIDogcHVibGljICIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGlz
X29wZW5fdHlwZToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5h
cHBlbmQoIkluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0IikKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdy
aXRlci5hcHBlbmQoIkluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0QmFzZSIpCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5hcHBlbmQoIiB7XG4iKQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3bGluZSgicHVibGljOlxuIikKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYWRfaG9jX3R5cGVfd3JpdGVyID0gd3JpdGVyLmluc2Vy
dF93cml0ZXIoIiAgICAiKQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBh
ZF9ob2NfdHlwZSBpbiByZXNvbHZlX2RhdGEuYWRfaG9jX3R5cGVzOgotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29kZV9nZW5lcmF0b3IgPSBhZF9ob2NfdHlwZS5nZXRfY29k
ZV9nZW5lcmF0b3IoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgY29k
ZV9nZW5lcmF0b3I6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29k
ZV9nZW5lcmF0b3IuZ2VuZXJhdGVfdHlwZV9idWlsZGVyKGFkX2hvY190eXBlX3dyaXRlciwgZ2Vu
ZXJhdGVfY29udGV4dCkKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIu
bmV3bGluZV9tdWx0aWxpbmUoCi0iIiIgICAgZW51bSB7Ci0gICAgICAgIE5vRmllbGRzU2V0ID0g
MCwKLSIiIikKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV9lbnVtX2l0
ZW1zID0gW10KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbGVuKHJlc29sdmVf
ZGF0YS5tYWluX3Byb3BlcnRpZXMpID4gMDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHBvcyA9IDAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBw
cm9wX2RhdGEgaW4gcmVzb2x2ZV9kYXRhLm1haW5fcHJvcGVydGllczoKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtX25hbWUgPSBDYXBpdGFsaXplci5sb3dlcl9j
YW1lbF9jYXNlX3RvX3VwcGVyKHByb3BfZGF0YS5wWyJuYW1lIl0pICsgIlNldCIKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV9lbnVtX2l0ZW1zLmFwcGVuZChp
dGVtX25hbWUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVy
Lm5ld2xpbmUoIiAgICAgICAgJXMgPSAxIDw8ICVzLFxuIiAlIChpdGVtX25hbWUsIHBvcykpCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zICs9IDEKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbF9maWVsZHNfc2V0X3ZhbHVlID0gIigiICsg
KCIgfCAiLmpvaW4oc3RhdGVfZW51bV9pdGVtcykpICsgIikiCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBh
bGxfZmllbGRzX3NldF92YWx1ZSA9ICIwIgotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHdyaXRlci5uZXdsaW5lX211bHRpbGluZShDb2RlR2VuZXJhdG9ySW5zcGVjdG9yU3RyaW5n
cy5jbGFzc19iaW5kaW5nX2J1aWxkZXJfcGFydF8xCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChhbGxfZmllbGRzX3NldF92YWx1ZSwg
Y2xhc3NfbmFtZSwgY2xhc3NfbmFtZSkpCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcG9zID0gMAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgcHJvcF9kYXRh
IGluIHJlc29sdmVfZGF0YS5tYWluX3Byb3BlcnRpZXM6Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwcm9wX25hbWUgPSBwcm9wX2RhdGEucFsibmFtZSJdCi0KLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtX3R5cGVfYmluZGluZyA9IHByb3BfZGF0
YS5wYXJhbV90eXBlX2JpbmRpbmcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHBhcmFtX3Jhd190eXBlID0gcGFyYW1fdHlwZV9iaW5kaW5nLnJlZHVjZV90b19yYXdfdHlwZSgp
Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lX211
bHRpbGluZShDb2RlR2VuZXJhdG9ySW5zcGVjdG9yU3RyaW5ncy5jbGFzc19iaW5kaW5nX2J1aWxk
ZXJfcGFydF8yCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAoc3Rh
dGVfZW51bV9pdGVtc1twb3NdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIENhcGl0YWxpemVyLmxvd2VyX2NhbWVsX2Nhc2VfdG9fdXBwZXIocHJvcF9uYW1lKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbV90eXBlX2Jp
bmRpbmcuZ2V0X3R5cGVfbW9kZWwoKS5nZXRfaW5wdXRfcGFyYW1fdHlwZV90ZXh0KCksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVfZW51bV9pdGVtc1tw
b3NdLCBwcm9wX25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcGFyYW1fcmF3X3R5cGUuZ2V0X3NldHRlcl9uYW1lKCksIHByb3BfbmFtZSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXRfc2V0dGVyX3ZhbHVlX2V4
cHJlc3Npb24ocGFyYW1fdHlwZV9iaW5kaW5nLCAidmFsdWUiKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV9lbnVtX2l0ZW1zW3Bvc10pKQotCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3MgKz0gMQotCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lX211bHRpbGluZShDb2RlR2VuZXJhdG9y
SW5zcGVjdG9yU3RyaW5ncy5jbGFzc19iaW5kaW5nX2J1aWxkZXJfcGFydF8zCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChjbGFzc19u
YW1lLCBjbGFzc19uYW1lLCBjbGFzc19uYW1lLCBjbGFzc19uYW1lLCBjbGFzc19uYW1lKSkKLQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3bGluZSgiICAgIC8qXG4i
KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3bGluZSgiICAgICAq
IFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjpcbiIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHdyaXRlci5uZXdsaW5lKCIgICAgICogUmVmUHRyPCVzPiByZXN1bHQgPSAlczo6Y3JlYXRl
KCkiICUgKGNsYXNzX25hbWUsIGNsYXNzX25hbWUpKQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBmb3IgcHJvcF9kYXRhIGluIHJlc29sdmVfZGF0YS5tYWluX3Byb3BlcnRpZXM6Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuYXBwZW5kX211bHRpbGlu
ZSgiXG4gICAgICogICAgIC5zZXQlcyguLi4pIiAlIENhcGl0YWxpemVyLmxvd2VyX2NhbWVsX2Nh
c2VfdG9fdXBwZXIocHJvcF9kYXRhLnBbIm5hbWUiXSkpCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHdyaXRlci5hcHBlbmRfbXVsdGlsaW5lKCI7XG4gICAgICovXG4iKQotCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lX211bHRpbGluZShDb2Rl
R2VuZXJhdG9ySW5zcGVjdG9yU3RyaW5ncy5jbGFzc19iaW5kaW5nX2J1aWxkZXJfcGFydF80KQot
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCIgICAgdHlw
ZWRlZiBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpTdHJ1Y3RJdGVtVHJhaXRzIEl0ZW1UcmFpdHM7
XG4iKQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBwcm9wX2RhdGEgaW4g
cmVzb2x2ZV9kYXRhLm9wdGlvbmFsX3Byb3BlcnRpZXM6Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwcm9wX25hbWUgPSBwcm9wX2RhdGEucFsibmFtZSJdCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbV90eXBlX2JpbmRpbmcgPSBwcm9wX2RhdGEu
cGFyYW1fdHlwZV9iaW5kaW5nCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
ZXR0ZXJfbmFtZSA9ICJzZXQlcyIgJSBDYXBpdGFsaXplci5sb3dlcl9jYW1lbF9jYXNlX3RvX3Vw
cGVyKHByb3BfbmFtZSkKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3Jp
dGVyLmFwcGVuZF9tdWx0aWxpbmUoIlxuICAgIHZvaWQgJXMiICUgc2V0dGVyX25hbWUpCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuYXBwZW5kKCIoJXMgdmFsdWUp
XG4iICUgcGFyYW1fdHlwZV9iaW5kaW5nLmdldF90eXBlX21vZGVsKCkuZ2V0X2lucHV0X3BhcmFt
X3R5cGVfdGV4dCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVy
Lm5ld2xpbmUoIiAgICB7XG4iKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
d3JpdGVyLm5ld2xpbmUoIiAgICAgICAgdGhpcy0+c2V0JXMoQVNDSUlMaXRlcmFsKFwiJXNcIiks
ICVzKTtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChwYXJh
bV90eXBlX2JpbmRpbmcucmVkdWNlX3RvX3Jhd190eXBlKCkuZ2V0X3NldHRlcl9uYW1lKCksIHBy
b3BfZGF0YS5wWyJuYW1lIl0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZm9ybWF0X3NldHRlcl92YWx1ZV9leHByZXNzaW9uKHBhcmFtX3R5cGVfYmluZGluZywg
InZhbHVlIikpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5l
d2xpbmUoIiAgICB9XG4iKQotCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmIHNldHRlcl9uYW1lIGluIElOU1BFQ1RPUl9PQkpFQ1RfU0VUVEVSX05BTUVTOgotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCIgICAgdXNp
bmcgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3RCYXNlOjolcztcblxuIiAlIHNldHRlcl9uYW1l
KQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGNsYXNzX2JpbmRpbmdfY2xz
Lm5lZWRfdXNlcl9ydW50aW1lX2Nhc3RfOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgd3JpdGVyLm5ld2xpbmUoIiAgICBzdGF0aWMgUGFzc1JlZlB0cjwlcz4gcnVudGltZUNh
c3QoUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiB2YWx1ZSlcbiIgJSBjbGFz
c19uYW1lKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xp
bmUoIiAgICB7XG4iKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVy
Lm5ld2xpbmUoIiAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBvYmpl
Y3Q7XG4iKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xp
bmUoIiAgICAgICAgYm9vbCBjYXN0UmVzID0gdmFsdWUtPmFzT2JqZWN0KCZvYmplY3QpO1xuIikK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCIgICAg
ICAgIEFTU0VSVF9VTlVTRUQoY2FzdFJlcywgY2FzdFJlcyk7XG4iKQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVuZCgiI2lmICVzXG4iICUgVkFMSURBVE9S
X0lGREVGX05BTUUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIu
bmV3bGluZSgiICAgICAgICBhc3NlcnRDb3JyZWN0VmFsdWUob2JqZWN0LmdldCgpKTtcbiIpCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuYXBwZW5kKCIjZW5kaWYg
IC8vICVzXG4iICUgVkFMSURBVE9SX0lGREVGX05BTUUpCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB3cml0ZXIubmV3bGluZSgiICAgICAgICBDT01QSUxFX0FTU0VSVChzaXpl
b2YoJXMpID09IHNpemVvZihJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdEJhc2UpLCB0eXBlX2Nh
c3RfcHJvYmxlbSk7XG4iICUgY2xhc3NfbmFtZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCIgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDwlcyo+
KHN0YXRpY19jYXN0PEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0QmFzZSo+KG9iamVjdC5nZXQo
KSkpO1xuIiAlIGNsYXNzX25hbWUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB3cml0ZXIubmV3bGluZSgiICAgIH1cbiIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB3cml0ZXIuYXBwZW5kKCJcbiIpCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgY2xhc3NfYmluZGluZ19jbHMubmVlZF9pbnRlcm5hbF9ydW50aW1lX2Nhc3RfOgot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVuZCgiI2lmICVz
XG4iICUgVkFMSURBVE9SX0lGREVGX05BTUUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB3cml0ZXIubmV3bGluZSgiICAgIHN0YXRpYyAlcyB2b2lkIGFzc2VydENvcnJlY3RW
YWx1ZShJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlKiB2YWx1ZSk7XG4iICUgSU5TUEVDVE9SX1RZ
UEVTX0dFTkVSQVRPUl9DT05GSUdfTUFQW291dHB1dF90eXBlXVsiZXhwb3J0X21hY3JvIl0pCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuYXBwZW5kKCIjZW5kaWYg
IC8vICVzXG4iICUgVkFMSURBVE9SX0lGREVGX05BTUUpCi0KLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNsb3NlZF9maWVsZF9zZXQgPSAoY29udGV4dF9kb21haW5fbmFtZSAr
ICIuIiArIGNsYXNzX25hbWUpIG5vdCBpbiBUWVBFU19XSVRIX09QRU5fRklFTERfTElTVF9TRVQK
LQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlciA9
IGdlbmVyYXRlX2NvbnRleHQudmFsaWRhdG9yX3dyaXRlcgotCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkb21haW5fZml4ZXMgPSBEb21haW5OYW1lRml4ZXMuZ2V0X2ZpeGVk
X2RhdGEoY29udGV4dF9kb21haW5fbmFtZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRvbWFpbl9ndWFyZCA9IGRvbWFpbl9maXhlcy5nZXRfZ3VhcmQoKQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgZG9tYWluX2d1YXJkOgotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbWFpbl9ndWFyZC5nZW5lcmF0ZV9vcGVuKHZh
bGlkYXRvcl93cml0ZXIpCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZh
bGlkYXRvcl93cml0ZXIubmV3bGluZSgidm9pZCAlcyVzOjphc3NlcnRDb3JyZWN0VmFsdWUoSW5z
cGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSogdmFsdWUpXG4iICUgKGhlbHBlci5mdWxsX25hbWVfcHJl
Zml4X2Zvcl9pbXBsLCBjbGFzc19uYW1lKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgie1xuIikKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgiICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IG9iamVjdDtcbiIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIiAgICBib29sIGNhc3RSZXMgPSB2YWx1
ZS0+YXNPYmplY3QoJm9iamVjdCk7XG4iKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCIgICAgQVNTRVJUX1VOVVNFRChjYXN0UmVz
LCBjYXN0UmVzKTtcbiIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3Ig
cHJvcF9kYXRhIGluIHJlc29sdmVfZGF0YS5tYWluX3Byb3BlcnRpZXM6Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCIgICAg
e1xuIikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdF9uYW1lID0g
IiVzUG9zIiAlIHByb3BfZGF0YS5wWyJuYW1lIl0KLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIiAgICAgICAgSW5zcGVjdG9y
T2JqZWN0OjppdGVyYXRvciAlcztcbiIgJSBpdF9uYW1lKQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgiICAgICAgICAlcyA9
IG9iamVjdC0+ZmluZChcIiVzXCIpO1xuIiAlIChpdF9uYW1lLCBwcm9wX2RhdGEucFsibmFtZSJd
KSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3Jp
dGVyLm5ld2xpbmUoIiAgICAgICAgQVNTRVJUKCVzICE9IG9iamVjdC0+ZW5kKCkpO1xuIiAlIGl0
X25hbWUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9y
X3dyaXRlci5uZXdsaW5lKCIgICAgICAgICVzKCVzLT52YWx1ZS5nZXQoKSk7XG4iICUgKHByb3Bf
ZGF0YS5wYXJhbV90eXBlX2JpbmRpbmcuZ2V0X3ZhbGlkYXRvcl9jYWxsX3RleHQoKSwgaXRfbmFt
ZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dy
aXRlci5uZXdsaW5lKCIgICAgfVxuIikKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgY2xvc2VkX2ZpZWxkX3NldDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIiAgICBpbnQgZm91bmRQcm9wZXJ0
aWVzQ291bnQgPSAlcztcbiIgJSBsZW4ocmVzb2x2ZV9kYXRhLm1haW5fcHJvcGVydGllcykpCi0K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBwcm9wX2RhdGEgaW4gcmVz
b2x2ZV9kYXRhLm9wdGlvbmFsX3Byb3BlcnRpZXM6Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCIgICAge1xuIikKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdF9uYW1lID0gIiVzUG9zIiAlIHBy
b3BfZGF0YS5wWyJuYW1lIl0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIiAgICAgICAgSW5zcGVjdG9yT2JqZWN0OjppdGVy
YXRvciAlcztcbiIgJSBpdF9uYW1lKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgiICAgICAgICAlcyA9IG9iamVjdC0+Zmlu
ZChcIiVzXCIpO1xuIiAlIChpdF9uYW1lLCBwcm9wX2RhdGEucFsibmFtZSJdKSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUo
IiAgICAgICAgaWYgKCVzICE9IG9iamVjdC0+ZW5kKCkpIHtcbiIgJSBpdF9uYW1lKQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGlu
ZSgiICAgICAgICAgICAgJXMoJXMtPnZhbHVlLmdldCgpKTtcbiIgJSAocHJvcF9kYXRhLnBhcmFt
X3R5cGVfYmluZGluZy5nZXRfdmFsaWRhdG9yX2NhbGxfdGV4dCgpLCBpdF9uYW1lKSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBjbG9zZWRfZmllbGRfc2V0Ogot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3Jp
dGVyLm5ld2xpbmUoIiAgICAgICAgICAgICsrZm91bmRQcm9wZXJ0aWVzQ291bnQ7XG4iKQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcl93cml0ZXIubmV3
bGluZSgiICAgICAgICB9XG4iKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZhbGlkYXRvcl93cml0ZXIubmV3bGluZSgiICAgIH1cbiIpCi0KLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIGNsb3NlZF9maWVsZF9zZXQ6Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCIgICAg
aWYgKGZvdW5kUHJvcGVydGllc0NvdW50ICE9IG9iamVjdC0+c2l6ZSgpKVxuIikKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUo
IiAgICAgICAgRkFUQUwoXCJVbmV4cGVjdGVkIHByb3BlcnRpZXMgaW4gb2JqZWN0OiAlc1xcblwi
LCBvYmplY3QtPnRvSlNPTlN0cmluZygpLmFzY2lpKCkuZGF0YSgpKTtcbiIpCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3Jfd3JpdGVyLm5ld2xpbmUoIn1cbiIp
Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGRvbWFpbl9ndWFyZDoK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb21haW5fZ3VhcmQuZ2Vu
ZXJhdGVfY2xvc2UodmFsaWRhdG9yX3dyaXRlcikKLQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlci5uZXdsaW5lKCJcblxuIikKLQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiBpc19vcGVuX3R5cGU6Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjcHBfd3JpdGVyID0gZ2VuZXJhdGVfY29udGV4dC5jcHBfd3Jp
dGVyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuYXBwZW5kKCJc
biIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3bGluZSgi
ICAgIC8vIFByb3BlcnR5IG5hbWVzIGZvciB0eXBlIGdlbmVyYXRlZCBhcyBvcGVuLlxuIikKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBwcm9wX2RhdGEgaW4gcmVzb2x2
ZV9kYXRhLm1haW5fcHJvcGVydGllcyArIHJlc29sdmVfZGF0YS5vcHRpb25hbF9wcm9wZXJ0aWVz
OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BfbmFtZSA9IHBy
b3BfZGF0YS5wWyJuYW1lIl0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwcm9wX2ZpZWxkX25hbWUgPSBDYXBpdGFsaXplci5sb3dlcl9jYW1lbF9jYXNlX3RvX3VwcGVy
KHByb3BfbmFtZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0
ZXIubmV3bGluZSgiICAgIHN0YXRpYyBjb25zdCBjaGFyKiAlcztcbiIgJSAocHJvcF9maWVsZF9u
YW1lKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcHBfd3JpdGVy
Lm5ld2xpbmUoImNvbnN0IGNoYXIqICVzJXM6OiVzID0gXCIlc1wiO1xuIiAlIChoZWxwZXIuZnVs
bF9uYW1lX3ByZWZpeF9mb3JfaW1wbCwgY2xhc3NfbmFtZSwgcHJvcF9maWVsZF9uYW1lLCBwcm9w
X25hbWUpKQotCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xp
bmUoIn07XG5cbiIpCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9k
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmIGdlbmVyYXRlX2ZvcndhcmRfZGVjbGFy
YXRpb24od3JpdGVyKToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NfbmFt
ZSA9IGZpeGVkX3R5cGVfbmFtZS5jbGFzc19uYW1lCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHdyaXRlci5uZXdsaW5lKCJjbGFzcyAiKQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB3cml0ZXIuYXBwZW5kKGNsYXNzX25hbWUpCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHdyaXRlci5hcHBlbmQoIjtcbiIpCi0KLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmIHJlZ2lz
dGVyX3VzZShmb3J3YXJkX2xpc3RlbmVyKToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaGVscGVyLmFkZF90b19mb3J3YXJkX2xpc3RlbmVyKGZvcndhcmRfbGlzdGVuZXIpCi0KLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZGVmIGdldF9nZW5lcmF0ZV9wYXNzX2lkKCk6Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBUeXBlQnVpbGRlclBhc3MuTUFJTgotCi0gICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gQ29kZUdlbmVyYXRvcgotCi0gICAgICAgICAgICAgICAgICAg
IEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgZGVmIGdldF92YWxpZGF0b3JfY2Fs
bF90ZXh0KCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaGVscGVyLmZ1bGxfbmFt
ZV9wcmVmaXhfZm9yX3VzZSArIGZpeGVkX3R5cGVfbmFtZS5jbGFzc19uYW1lICsgIjo6YXNzZXJ0
Q29ycmVjdFZhbHVlIgotCi0gICAgICAgICAgICAgICAgICAgIEBjbGFzc21ldGhvZAotICAgICAg
ICAgICAgICAgICAgICBkZWYgZ2V0X2FycmF5X2l0ZW1fY190eXBlX3RleHQoY2xzKToKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBoZWxwZXIuZnVsbF9uYW1lX3ByZWZpeF9mb3JfdXNl
ICsgZml4ZWRfdHlwZV9uYW1lLmNsYXNzX25hbWUKLQotICAgICAgICAgICAgICAgICAgICBAc3Rh
dGljbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgIGRlZiBnZXRfc2V0dGVyX3ZhbHVlX2V4cHJl
c3Npb25fcGF0dGVybigpOgotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKLQot
ICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgIGRl
ZiByZWR1Y2VfdG9fcmF3X3R5cGUoKToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBS
YXdUeXBlcy5PYmplY3QKLQotICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAg
ICAgICAgICAgICAgICAgIGRlZiBnZXRfdHlwZV9tb2RlbCgpOgotICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIFR5cGVNb2RlbC5SZWZQdHJCYXNlZChoZWxwZXIuZnVsbF9uYW1lX3ByZWZp
eF9mb3JfdXNlICsgZml4ZWRfdHlwZV9uYW1lLmNsYXNzX25hbWUpCi0KLSAgICAgICAgICAgICAg
ICAgICAgY2xhc3MgQWRIb2NUeXBlQ29udGV4dEltcGw6Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBkZWYgX19pbml0X18oc2VsZiwgcHJvcGVydHlfbmFtZSwgY2xhc3NfbmFtZSwgcmVzb2x2ZV9j
b250ZXh0LCBhZF9ob2NfdHlwZV9saXN0LCBwYXJlbnRfZnVsbF9uYW1lX3ByZWZpeCk6Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wcm9wZXJ0eV9uYW1lID0gcHJvcGVydHlfbmFt
ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY2xhc3NfbmFtZSA9IGNsYXNzX25h
bWUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnJlc29sdmVfY29udGV4dCA9IHJl
c29sdmVfY29udGV4dAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYWRfaG9jX3R5
cGVfbGlzdCA9IGFkX2hvY190eXBlX2xpc3QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
ZWxmLmNvbnRhaW5lcl9mdWxsX25hbWVfcHJlZml4ID0gcGFyZW50X2Z1bGxfbmFtZV9wcmVmaXgg
KyBjbGFzc19uYW1lICsgIjo6IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY29u
dGFpbmVyX3JlbGF0aXZlX25hbWVfcHJlZml4ID0gIiIKLQotICAgICAgICAgICAgICAgICAgICAg
ICAgZGVmIGdldF90eXBlX25hbWVfZml4KHNlbGYpOgotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNsYXNzIE5hbWVGaXg6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNz
X25hbWUgPSBDYXBpdGFsaXplci5sb3dlcl9jYW1lbF9jYXNlX3RvX3VwcGVyKHNlbGYucHJvcGVy
dHlfbmFtZSkKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9k
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBvdXRwdXRfY29tbWVudCh3cml0
ZXIpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUo
Ii8vIE5hbWVkIGFmdGVyIHByb3BlcnR5IG5hbWUgJyVzJyB3aGlsZSBnZW5lcmF0aW5nICVzLlxu
IiAlIChzZWxmLnByb3BlcnR5X25hbWUsIHNlbGYuY2xhc3NfbmFtZSkpCi0KLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gTmFtZUZpeAotCi0gICAgICAgICAgICAgICAgICAgICAg
ICBkZWYgYWRkX3R5cGUoc2VsZiwgYmluZGluZyk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2VsZi5hZF9ob2NfdHlwZV9saXN0LmFwcGVuZChiaW5kaW5nKQotCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIENsYXNzQmluZGluZwotICAgICAgICAgICAgZWxzZToKLQotICAgICAgICAgICAg
ICAgIGNsYXNzIFBsYWluT2JqZWN0QmluZGluZzoKLSAgICAgICAgICAgICAgICAgICAgQGNsYXNz
bWV0aG9kCi0gICAgICAgICAgICAgICAgICAgIGRlZiByZXNvbHZlX2lubmVyKGNscywgcmVzb2x2
ZV9jb250ZXh0KToKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKLQotICAgICAgICAgICAg
ICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgIGRlZiByZXF1ZXN0X3Vz
ZXJfcnVudGltZV9jYXN0KHJlcXVlc3QpOgotICAgICAgICAgICAgICAgICAgICAgICAgcGFzcwot
Ci0gICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgICAgICAgICAg
ZGVmIHJlcXVlc3RfaW50ZXJuYWxfcnVudGltZV9jYXN0KCk6Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBSYXdUeXBlcy5PYmplY3QucmVxdWVzdF9yYXdfaW50ZXJuYWxfcnVudGltZV9jYXN0KCkK
LQotICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICAgICAgICAg
IGRlZiBnZXRfY29kZV9nZW5lcmF0b3IoKToKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MK
LQotICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICAgICAgICAg
IGRlZiBnZXRfdmFsaWRhdG9yX2NhbGxfdGV4dCgpOgotICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuICJSdW50aW1lQ2FzdEhlbHBlcjo6YXNzZXJ0VHlwZTxJbnNwZWN0b3JWYWx1ZTo6VHlw
ZU9iamVjdD4iCi0KLSAgICAgICAgICAgICAgICAgICAgQGNsYXNzbWV0aG9kCi0gICAgICAgICAg
ICAgICAgICAgIGRlZiBnZXRfYXJyYXlfaXRlbV9jX3R5cGVfdGV4dChjbHMpOgotICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGNscy5yZWR1Y2VfdG9fcmF3X3R5cGUoKS5nZXRfYXJyYXlf
aXRlbV9yYXdfY190eXBlX3RleHQoKQotCi0gICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRo
b2QKLSAgICAgICAgICAgICAgICAgICAgZGVmIGdldF9zZXR0ZXJfdmFsdWVfZXhwcmVzc2lvbl9w
YXR0ZXJuKCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQotCi0gICAgICAg
ICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgZGVmIHJlZHVj
ZV90b19yYXdfdHlwZSgpOgotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJhd1R5cGVz
Lk9iamVjdAotCi0gICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAg
ICAgICAgICAgZGVmIGdldF90eXBlX21vZGVsKCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gVHlwZU1vZGVsLk9iamVjdAotCi0gICAgICAgICAgICAgICAgcmV0dXJuIFBsYWluT2Jq
ZWN0QmluZGluZwotICAgICAgICBlbGlmIGpzb25fdHlwYWJsZVsidHlwZSJdID09ICJhcnJheSI6
Ci0gICAgICAgICAgICBpZiAiaXRlbXMiIGluIGpzb25fdHlwYWJsZToKLQotICAgICAgICAgICAg
ICAgIGFkX2hvY190eXBlcyA9IFtdCi0KLSAgICAgICAgICAgICAgICBjbGFzcyBBZEhvY1R5cGVD
b250ZXh0OgotICAgICAgICAgICAgICAgICAgICBjb250YWluZXJfZnVsbF9uYW1lX3ByZWZpeCA9
ICI8bm90IHlldCBkZWZpbmVkPiIKLSAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyX3JlbGF0
aXZlX25hbWVfcHJlZml4ID0gIiIKLQotICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9k
Ci0gICAgICAgICAgICAgICAgICAgIGRlZiBnZXRfdHlwZV9uYW1lX2ZpeCgpOgotICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZpeGVkX3R5cGVfbmFtZQotCi0gICAgICAgICAgICAgICAg
ICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgZGVmIGFkZF90eXBlKGJpbmRp
bmcpOgotICAgICAgICAgICAgICAgICAgICAgICAgYWRfaG9jX3R5cGVzLmFwcGVuZChiaW5kaW5n
KQotCi0gICAgICAgICAgICAgICAgaXRlbV9iaW5kaW5nID0gcmVzb2x2ZV9wYXJhbV90eXBlKGpz
b25fdHlwYWJsZVsiaXRlbXMiXSwgY29udGV4dF9kb21haW5fbmFtZSwgQWRIb2NUeXBlQ29udGV4
dCkKLQotICAgICAgICAgICAgICAgIGNsYXNzIEFycmF5QmluZGluZzoKLSAgICAgICAgICAgICAg
ICAgICAgcmVzb2x2ZV9kYXRhXyA9IE5vbmUKLSAgICAgICAgICAgICAgICAgICAgbmVlZF9pbnRl
cm5hbF9ydW50aW1lX2Nhc3RfID0gRmFsc2UKLQotICAgICAgICAgICAgICAgICAgICBAY2xhc3Nt
ZXRob2QKLSAgICAgICAgICAgICAgICAgICAgZGVmIHJlc29sdmVfaW5uZXIoY2xzLCByZXNvbHZl
X2NvbnRleHQpOgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgY2xzLnJlc29sdmVfZGF0YV86
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuCi0KLSAgICAgICAgICAgICAgICAg
ICAgICAgIGNsYXNzIFJlc29sdmVEYXRhOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0
ZW1fdHlwZV9iaW5kaW5nID0gaXRlbV9iaW5kaW5nCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYWRfaG9jX3R5cGVfbGlzdCA9IGFkX2hvY190eXBlcwotCi0gICAgICAgICAgICAgICAgICAg
ICAgICBjbHMucmVzb2x2ZV9kYXRhXyA9IFJlc29sdmVEYXRhCi0KLSAgICAgICAgICAgICAgICAg
ICAgICAgIGZvciB0IGluIGFkX2hvY190eXBlczoKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0LnJlc29sdmVfaW5uZXIocmVzb2x2ZV9jb250ZXh0KQotCi0gICAgICAgICAgICAgICAgICAg
IEBjbGFzc21ldGhvZAotICAgICAgICAgICAgICAgICAgICBkZWYgcmVxdWVzdF91c2VyX3J1bnRp
bWVfY2FzdChjbHMsIHJlcXVlc3QpOgotICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgRXhj
ZXB0aW9uKCJOb3QgaW1wbGVtZW50ZWQgeWV0IikKLQotICAgICAgICAgICAgICAgICAgICBAY2xh
c3NtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgZGVmIHJlcXVlc3RfaW50ZXJuYWxfcnVudGlt
ZV9jYXN0KGNscyk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiBjbHMubmVlZF9pbnRlcm5h
bF9ydW50aW1lX2Nhc3RfOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybgotICAg
ICAgICAgICAgICAgICAgICAgICAgY2xzLm5lZWRfaW50ZXJuYWxfcnVudGltZV9jYXN0XyA9IFRy
dWUKLSAgICAgICAgICAgICAgICAgICAgICAgIGNscy5yZXNvbHZlX2RhdGFfLml0ZW1fdHlwZV9i
aW5kaW5nLnJlcXVlc3RfaW50ZXJuYWxfcnVudGltZV9jYXN0KCkKLQotICAgICAgICAgICAgICAg
ICAgICBAY2xhc3NtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgZGVmIGdldF9jb2RlX2dlbmVy
YXRvcihhcnJheV9iaW5kaW5nX2Nscyk6Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNz
IENvZGVHZW5lcmF0b3I6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhv
ZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBnZW5lcmF0ZV90eXBlX2J1aWxkZXIo
d3JpdGVyLCBnZW5lcmF0ZV9jb250ZXh0KToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYWRfaG9jX3R5cGVfd3JpdGVyID0gd3JpdGVyCi0KLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmVzb2x2ZV9kYXRhID0gYXJyYXlfYmluZGluZ19jbHMucmVzb2x2ZV9kYXRhXwot
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBhZF9ob2NfdHlwZSBpbiByZXNv
bHZlX2RhdGEuYWRfaG9jX3R5cGVfbGlzdDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvZGVfZ2VuZXJhdG9yID0gYWRfaG9jX3R5cGUuZ2V0X2NvZGVfZ2VuZXJhdG9yKCkK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGNvZGVfZ2VuZXJhdG9yOgot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVfZ2VuZXJhdG9yLmdl
bmVyYXRlX3R5cGVfYnVpbGRlcihhZF9ob2NfdHlwZV93cml0ZXIsIGdlbmVyYXRlX2NvbnRleHQp
Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZGVmIGdlbmVyYXRlX2ZvcndhcmRfZGVjbGFyYXRpb24od3JpdGVy
KToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzcwotCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGRlZiByZWdpc3Rlcl91c2UoZm9yd2FyZF9saXN0ZW5lcik6Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGl0ZW1fY29kZV9nZW5lcmF0b3IgPSBpdGVtX2JpbmRpbmcuZ2V0X2NvZGVf
Z2VuZXJhdG9yKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgaXRlbV9jb2Rl
X2dlbmVyYXRvcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1fY29k
ZV9nZW5lcmF0b3IucmVnaXN0ZXJfdXNlKGZvcndhcmRfbGlzdGVuZXIpCi0KLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZGVmIGdldF9nZW5lcmF0ZV9wYXNzX2lkKCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBUeXBlQnVpbGRlclBhc3MuTUFJTgotCi0gICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gQ29kZUdlbmVyYXRvcgotCi0gICAgICAgICAgICAgICAgICAgIEBjbGFzc21l
dGhvZAotICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X3ZhbGlkYXRvcl9jYWxsX3RleHQoY2xz
KToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjbHMuZ2V0X2FycmF5X2l0ZW1fY190
eXBlX3RleHQoKSArICI6OmFzc2VydENvcnJlY3RWYWx1ZSIKLQotICAgICAgICAgICAgICAgICAg
ICBAY2xhc3NtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgZGVmIGdldF9hcnJheV9pdGVtX2Nf
dHlwZV90ZXh0KGNscyk6Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVwbGFjZV9y
aWdodF9zaGlmdCgiSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk8JXM+IiAlIGNscy5yZXNv
bHZlX2RhdGFfLml0ZW1fdHlwZV9iaW5kaW5nLmdldF9hcnJheV9pdGVtX2NfdHlwZV90ZXh0KCkp
Ci0KLSAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgICAgICAg
ICBkZWYgZ2V0X3NldHRlcl92YWx1ZV9leHByZXNzaW9uX3BhdHRlcm4oKToKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBOb25lCi0KLSAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21l
dGhvZAotICAgICAgICAgICAgICAgICAgICBkZWYgcmVkdWNlX3RvX3Jhd190eXBlKCk6Ci0gICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmF3VHlwZXMuQXJyYXkKLQotICAgICAgICAgICAg
ICAgICAgICBAY2xhc3NtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgZGVmIGdldF90eXBlX21v
ZGVsKGNscyk6Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHlwZU1vZGVsLlJlZlB0
ckJhc2VkKGNscy5nZXRfYXJyYXlfaXRlbV9jX3R5cGVfdGV4dCgpKQotCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIEFycmF5QmluZGluZwotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAg
ICAjIEZhbGwtdGhyb3VnaCB0byByYXcgdHlwZS4KLSAgICAgICAgICAgICAgICBwYXNzCi0KLSAg
ICAgICAgcmF3X3R5cGUgPSBSYXdUeXBlcy5nZXQoanNvbl90eXBhYmxlWyJ0eXBlIl0pCi0KLSAg
ICAgICAgcmV0dXJuIFJhd1R5cGVCaW5kaW5nKHJhd190eXBlKQotCi0KLWNsYXNzIFJhd1R5cGVC
aW5kaW5nOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCByYXdfdHlwZSk6Ci0gICAgICAgIHNlbGYu
cmF3X3R5cGVfID0gcmF3X3R5cGUKLQotICAgIGRlZiByZXNvbHZlX2lubmVyKHNlbGYsIHJlc29s
dmVfY29udGV4dCk6Ci0gICAgICAgIHBhc3MKLQotICAgIGRlZiByZXF1ZXN0X3VzZXJfcnVudGlt
ZV9jYXN0KHNlbGYsIHJlcXVlc3QpOgotICAgICAgICByYWlzZSBFeGNlcHRpb24oIlVuc3VwcG9y
dGVkIikKLQotICAgIGRlZiByZXF1ZXN0X2ludGVybmFsX3J1bnRpbWVfY2FzdChzZWxmKToKLSAg
ICAgICAgc2VsZi5yYXdfdHlwZV8ucmVxdWVzdF9yYXdfaW50ZXJuYWxfcnVudGltZV9jYXN0KCkK
LQotICAgIGRlZiBnZXRfY29kZV9nZW5lcmF0b3Ioc2VsZik6Ci0gICAgICAgIHJldHVybiBOb25l
Ci0KLSAgICBkZWYgZ2V0X3ZhbGlkYXRvcl9jYWxsX3RleHQoc2VsZik6Ci0gICAgICAgIHJldHVy
biBzZWxmLnJhd190eXBlXy5nZXRfcmF3X3ZhbGlkYXRvcl9jYWxsX3RleHQoKQotCi0gICAgZGVm
IGdldF9hcnJheV9pdGVtX2NfdHlwZV90ZXh0KHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5y
YXdfdHlwZV8uZ2V0X2FycmF5X2l0ZW1fcmF3X2NfdHlwZV90ZXh0KCkKLQotICAgIGRlZiBnZXRf
c2V0dGVyX3ZhbHVlX2V4cHJlc3Npb25fcGF0dGVybihzZWxmKToKLSAgICAgICAgcmV0dXJuIE5v
bmUKLQotICAgIGRlZiByZWR1Y2VfdG9fcmF3X3R5cGUoc2VsZik6Ci0gICAgICAgIHJldHVybiBz
ZWxmLnJhd190eXBlXwotCi0gICAgZGVmIGdldF90eXBlX21vZGVsKHNlbGYpOgotICAgICAgICBy
ZXR1cm4gc2VsZi5yYXdfdHlwZV8uZ2V0X3Jhd190eXBlX21vZGVsKCkKLQotCi1jbGFzcyBUeXBl
RGF0YShvYmplY3QpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBqc29uX3R5cGUsIGpzb25fZG9t
YWluLCBkb21haW5fZGF0YSk6Ci0gICAgICAgIHNlbGYuanNvbl90eXBlXyA9IGpzb25fdHlwZQot
ICAgICAgICBzZWxmLmpzb25fZG9tYWluXyA9IGpzb25fZG9tYWluCi0gICAgICAgIHNlbGYuZG9t
YWluX2RhdGFfID0gZG9tYWluX2RhdGEKLQotICAgICAgICBpZiAidHlwZSIgbm90IGluIGpzb25f
dHlwZToKLSAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiVW5rbm93biB0eXBlIikKLQotICAg
ICAgICBqc29uX3R5cGVfbmFtZSA9IGpzb25fdHlwZVsidHlwZSJdCi0gICAgICAgIHNlbGYucmF3
X3R5cGVfID0gUmF3VHlwZXMuZ2V0KGpzb25fdHlwZV9uYW1lKQotICAgICAgICBzZWxmLmJpbmRp
bmdfYmVpbmdfcmVzb2x2ZWRfID0gRmFsc2UKLSAgICAgICAgc2VsZi5iaW5kaW5nXyA9IE5vbmUK
LQotICAgIGRlZiBnZXRfcmF3X3R5cGUoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLnJhd190
eXBlXwotCi0gICAgZGVmIGdldF9iaW5kaW5nKHNlbGYpOgotICAgICAgICBpZiBub3Qgc2VsZi5i
aW5kaW5nXzoKLSAgICAgICAgICAgIGlmIHNlbGYuYmluZGluZ19iZWluZ19yZXNvbHZlZF86Ci0g
ICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJUeXBlICVzIGlzIGFscmVhZHkgYmVpbmcg
cmVzb2x2ZWQiICUgc2VsZi5qc29uX3R5cGVfWyJ0eXBlIl0pCi0gICAgICAgICAgICAjIFJlc29s
dmUgb25seSBsYXppbHksIGJlY2F1c2UgcmVzb2x2aW5nIG9uZSBuYW1lZCB0eXBlIG1heSByZXF1
aXJlIHJlc29sdmluZyBzb21lIG90aGVyIG5hbWVkIHR5cGUuCi0gICAgICAgICAgICBzZWxmLmJp
bmRpbmdfYmVpbmdfcmVzb2x2ZWRfID0gVHJ1ZQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAg
ICAgICAgIHNlbGYuYmluZGluZ18gPSBUeXBlQmluZGluZ3MuY3JlYXRlX25hbWVkX3R5cGVfZGVj
bGFyYXRpb24oc2VsZi5qc29uX3R5cGVfLCBzZWxmLmpzb25fZG9tYWluX1siZG9tYWluIl0sIHNl
bGYpCi0gICAgICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgICAgIHNlbGYuYmluZGluZ19i
ZWluZ19yZXNvbHZlZF8gPSBGYWxzZQotCi0gICAgICAgIHJldHVybiBzZWxmLmJpbmRpbmdfCi0K
LSAgICBkZWYgZ2V0X2pzb25fdHlwZShzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuanNvbl90
eXBlXwotCi0gICAgZGVmIGdldF9uYW1lKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5qc29u
X3R5cGVfWyJpZCJdCi0KLSAgICBkZWYgZ2V0X2RvbWFpbl9uYW1lKHNlbGYpOgotICAgICAgICBy
ZXR1cm4gc2VsZi5qc29uX2RvbWFpbl9bImRvbWFpbiJdCi0KLQotY2xhc3MgRG9tYWluRGF0YToK
LSAgICBkZWYgX19pbml0X18oc2VsZiwganNvbl9kb21haW4pOgotICAgICAgICBzZWxmLmpzb25f
ZG9tYWluID0ganNvbl9kb21haW4KLSAgICAgICAgc2VsZi50eXBlc18gPSBbXQotCi0gICAgZGVm
IGFkZF90eXBlKHNlbGYsIHR5cGVfZGF0YSk6Ci0gICAgICAgIHNlbGYudHlwZXNfLmFwcGVuZCh0
eXBlX2RhdGEpCi0KLSAgICBkZWYgbmFtZShzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuanNv
bl9kb21haW5bImRvbWFpbiJdCi0KLSAgICBkZWYgdHlwZXMoc2VsZik6Ci0gICAgICAgIHJldHVy
biBzZWxmLnR5cGVzXwotCi0KLWNsYXNzIFR5cGVNYXA6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYs
IGFwaSwgZGVwZW5kZW5jeV9hcGkpOgotICAgICAgICBzZWxmLm1hcF8gPSB7fQotICAgICAgICBz
ZWxmLmRvbWFpbnNfID0gW10KLSAgICAgICAgc2VsZi5kb21haW5zX3RvX2dlbmVyYXRlXyA9IFtd
Ci0gICAgICAgIGZvciBqc29uX2RvbWFpbiBpbiBhcGlbImRvbWFpbnMiXToKLSAgICAgICAgICAg
IHNlbGYuYWRkX2RvbWFpbihqc29uX2RvbWFpbiwgVHJ1ZSkKLSAgICAgICAgZm9yIGpzb25fZG9t
YWluIGluIGRlcGVuZGVuY3lfYXBpWyJkb21haW5zIl06Ci0gICAgICAgICAgICBzZWxmLmFkZF9k
b21haW4oanNvbl9kb21haW4sIEZhbHNlKQotCi0gICAgZGVmIGFkZF9kb21haW4oc2VsZiwganNv
bl9kb21haW4sIHNob3VsZF9nZW5lcmF0ZSk6Ci0gICAgICAgIGRvbWFpbl9uYW1lID0ganNvbl9k
b21haW5bImRvbWFpbiJdCi0KLSAgICAgICAgZG9tYWluX21hcCA9IHt9Ci0gICAgICAgIHNlbGYu
bWFwX1tkb21haW5fbmFtZV0gPSBkb21haW5fbWFwCi0KLSAgICAgICAgZG9tYWluX2RhdGEgPSBE
b21haW5EYXRhKGpzb25fZG9tYWluKQotICAgICAgICBzZWxmLmRvbWFpbnNfLmFwcGVuZChkb21h
aW5fZGF0YSkKLQotICAgICAgICBpZiBzaG91bGRfZ2VuZXJhdGU6Ci0gICAgICAgICAgICAjIEZJ
WE1FOiBUaGUgb3JkZXIgb2YgdHlwZXMgc2hvdWxkIG5vdCBtYXR0ZXIuIFRoZSBnZW5lcmF0ZWQg
Y29kZSBzaG91bGQgd29yayByZWdhcmRsZXNzIG9mIHRoZSBvcmRlciBvZiB0eXBlcy4KLSAgICAg
ICAgICAgIGlmIGRvbWFpbl9uYW1lID09ICJQYWdlIjoKLSAgICAgICAgICAgICAgICBzZWxmLmRv
bWFpbnNfdG9fZ2VuZXJhdGVfLmluc2VydCgwLCBkb21haW5fZGF0YSkKLSAgICAgICAgICAgIGVs
c2U6Ci0gICAgICAgICAgICAgICAgc2VsZi5kb21haW5zX3RvX2dlbmVyYXRlXy5hcHBlbmQoZG9t
YWluX2RhdGEpCi0KLSAgICAgICAgaWYgInR5cGVzIiBpbiBqc29uX2RvbWFpbjoKLSAgICAgICAg
ICAgIGZvciBqc29uX3R5cGUgaW4ganNvbl9kb21haW5bInR5cGVzIl06Ci0gICAgICAgICAgICAg
ICAgdHlwZV9uYW1lID0ganNvbl90eXBlWyJpZCJdCi0gICAgICAgICAgICAgICAgdHlwZV9kYXRh
ID0gVHlwZURhdGEoanNvbl90eXBlLCBqc29uX2RvbWFpbiwgZG9tYWluX2RhdGEpCi0gICAgICAg
ICAgICAgICAgZG9tYWluX21hcFt0eXBlX25hbWVdID0gdHlwZV9kYXRhCi0gICAgICAgICAgICAg
ICAgZG9tYWluX2RhdGEuYWRkX3R5cGUodHlwZV9kYXRhKQotCi0gICAgZGVmIGRvbWFpbnMoc2Vs
Zik6Ci0gICAgICAgIHJldHVybiBzZWxmLmRvbWFpbnNfCi0KLSAgICBkZWYgZG9tYWluc190b19n
ZW5lcmF0ZShzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuZG9tYWluc190b19nZW5lcmF0ZV8K
LQotICAgIGRlZiBnZXQoc2VsZiwgZG9tYWluX25hbWUsIHR5cGVfbmFtZSk6Ci0gICAgICAgIHJl
dHVybiBzZWxmLm1hcF9bZG9tYWluX25hbWVdW3R5cGVfbmFtZV0KLQotCi1kZWYgcmVzb2x2ZV9w
YXJhbV90eXBlKGpzb25fcGFyYW1ldGVyLCBzY29wZV9kb21haW5fbmFtZSwgYWRfaG9jX3R5cGVf
Y29udGV4dCk6Ci0gICAgaWYgIiRyZWYiIGluIGpzb25fcGFyYW1ldGVyOgotICAgICAgICBqc29u
X3JlZiA9IGpzb25fcGFyYW1ldGVyWyIkcmVmIl0KLSAgICAgICAgdHlwZV9kYXRhID0gZ2V0X3Jl
Zl9kYXRhKGpzb25fcmVmLCBzY29wZV9kb21haW5fbmFtZSkKLSAgICAgICAgcmV0dXJuIHR5cGVf
ZGF0YS5nZXRfYmluZGluZygpCi0gICAgZWxpZiAidHlwZSIgaW4ganNvbl9wYXJhbWV0ZXI6Ci0g
ICAgICAgIHJlc3VsdCA9IFR5cGVCaW5kaW5ncy5jcmVhdGVfYWRfaG9jX3R5cGVfZGVjbGFyYXRp
b24oanNvbl9wYXJhbWV0ZXIsIHNjb3BlX2RvbWFpbl9uYW1lLCBhZF9ob2NfdHlwZV9jb250ZXh0
KQotICAgICAgICBhZF9ob2NfdHlwZV9jb250ZXh0LmFkZF90eXBlKHJlc3VsdCkKLSAgICAgICAg
cmV0dXJuIHJlc3VsdAotICAgIGVsc2U6Ci0gICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiVW5rbm93
biB0eXBlIikKLQotCi1kZWYgcmVzb2x2ZV9wYXJhbV9yYXdfdHlwZShqc29uX3BhcmFtZXRlciwg
c2NvcGVfZG9tYWluX25hbWUpOgotICAgIGlmICIkcmVmIiBpbiBqc29uX3BhcmFtZXRlcjoKLSAg
ICAgICAganNvbl9yZWYgPSBqc29uX3BhcmFtZXRlclsiJHJlZiJdCi0gICAgICAgIHR5cGVfZGF0
YSA9IGdldF9yZWZfZGF0YShqc29uX3JlZiwgc2NvcGVfZG9tYWluX25hbWUpCi0gICAgICAgIHJl
dHVybiB0eXBlX2RhdGEuZ2V0X3Jhd190eXBlKCkKLSAgICBlbGlmICJ0eXBlIiBpbiBqc29uX3Bh
cmFtZXRlcjoKLSAgICAgICAganNvbl90eXBlID0ganNvbl9wYXJhbWV0ZXJbInR5cGUiXQotICAg
ICAgICByZXR1cm4gUmF3VHlwZXMuZ2V0KGpzb25fdHlwZSkKLSAgICBlbHNlOgotICAgICAgICBy
YWlzZSBFeGNlcHRpb24oIlVua25vd24gdHlwZSIpCi0KLQotZGVmIGdldF9yZWZfZGF0YShqc29u
X3JlZiwgc2NvcGVfZG9tYWluX25hbWUpOgotICAgIGRvdF9wb3MgPSBqc29uX3JlZi5maW5kKCIu
IikKLSAgICBpZiBkb3RfcG9zID09IC0xOgotICAgICAgICBkb21haW5fbmFtZSA9IHNjb3BlX2Rv
bWFpbl9uYW1lCi0gICAgICAgIHR5cGVfbmFtZSA9IGpzb25fcmVmCi0gICAgZWxzZToKLSAgICAg
ICAgZG9tYWluX25hbWUgPSBqc29uX3JlZls6ZG90X3Bvc10KLSAgICAgICAgdHlwZV9uYW1lID0g
anNvbl9yZWZbZG90X3BvcyArIDE6XQotCi0gICAgcmV0dXJuIHR5cGVfbWFwLmdldChkb21haW5f
bmFtZSwgdHlwZV9uYW1lKQotCi0KLWlucHV0X2ZpbGUgPSBvcGVuKGlucHV0X2pzb25fZmlsZW5h
bWUsICJyIikKLWpzb25fc3RyaW5nID0gaW5wdXRfZmlsZS5yZWFkKCkKLWpzb25fYXBpID0ganNv
bi5sb2Fkcyhqc29uX3N0cmluZykKLWlucHV0X2ZpbGUuY2xvc2UoKQotaWYgbm90ICJkb21haW5z
IiBpbiBqc29uX2FwaToKLSAgICBqc29uX2FwaSA9IHsiZG9tYWlucyI6IFtqc29uX2FwaV19Ci0K
LWRlcGVuZGVuY3lfYXBpID0geyJkb21haW5zIjogW119Ci1mb3IgZGVwZW5kZW5jeV9qc29uX2Zp
bGVuYW1lIGluIGRlcGVuZGVuY3lfanNvbl9maWxlbmFtZXM6Ci0gICAgZGVwZW5kZW5jeV9pbnB1
dF9maWxlID0gb3BlbihkZXBlbmRlbmN5X2pzb25fZmlsZW5hbWUsICJyIikKLSAgICBkZXBlbmRl
bmN5X2pzb25fc3RyaW5nID0gZGVwZW5kZW5jeV9pbnB1dF9maWxlLnJlYWQoKQotICAgIGRlcGVu
ZGVuY3lfanNvbl9hcGkgPSBqc29uLmxvYWRzKGRlcGVuZGVuY3lfanNvbl9zdHJpbmcpCi0gICAg
ZGVwZW5kZW5jeV9pbnB1dF9maWxlLmNsb3NlKCkKLSAgICBpZiBub3QgImRvbWFpbnMiIGluIGRl
cGVuZGVuY3lfanNvbl9hcGk6Ci0gICAgICAgIGRlcGVuZGVuY3lfanNvbl9hcGkgPSB7ImRvbWFp
bnMiOiBbZGVwZW5kZW5jeV9qc29uX2FwaV19Ci0gICAgZGVwZW5kZW5jeV9hcGlbImRvbWFpbnMi
XSArPSBkZXBlbmRlbmN5X2pzb25fYXBpWyJkb21haW5zIl0KLQotCi1jbGFzcyBUZW1wbGF0ZXM6
Ci0gICAgZGVmIGdldF90aGlzX3NjcmlwdF9wYXRoXyhhYnNvbHV0ZV9wYXRoKToKLSAgICAgICAg
YWJzb2x1dGVfcGF0aCA9IG9zLnBhdGguYWJzcGF0aChhYnNvbHV0ZV9wYXRoKQotICAgICAgICBj
b21wb25lbnRzID0gW10KLQotICAgICAgICBkZWYgZmlsbF9yZWN1cnNpdmUocGF0aF9wYXJ0LCBk
ZXB0aCk6Ci0gICAgICAgICAgICBpZiBkZXB0aCA8PSAwIG9yIHBhdGhfcGFydCA9PSAnLyc6Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgICAgICBmaWxsX3JlY3Vyc2l2ZShvcy5wYXRo
LmRpcm5hbWUocGF0aF9wYXJ0KSwgZGVwdGggLSAxKQotICAgICAgICAgICAgY29tcG9uZW50cy5h
cHBlbmQob3MucGF0aC5iYXNlbmFtZShwYXRoX3BhcnQpKQotCi0gICAgICAgICMgVHlwaWNhbCBw
YXRoIGlzIC9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5w
eQotICAgICAgICAjIExldCdzIHRha2UgNCBjb21wb25lbnRzIGZyb20gdGhlIHJlYWwgcGF0aCB0
aGVuLgotICAgICAgICBmaWxsX3JlY3Vyc2l2ZShhYnNvbHV0ZV9wYXRoLCA0KQotCi0gICAgICAg
IHJldHVybiAiLyIuam9pbihjb21wb25lbnRzKQotCi0gICAgZmlsZV9oZWFkZXJfID0gKCIvLyBG
aWxlIGlzIGdlbmVyYXRlZCBieSAlc1xuXG4iICUgZ2V0X3RoaXNfc2NyaXB0X3BhdGhfKHN5cy5h
cmd2WzBdKSArCi0iIiIvLyBDb3B5cmlnaHQgKGMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgUmlnaHRz
IFJlc2VydmVkLgotLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KLSIiIikKLQotICAgIGZyb250ZW5kX2RvbWFpbl9jbGFzcyA9IHN0cmluZy5U
ZW1wbGF0ZShDb2RlR2VuZXJhdG9ySW5zcGVjdG9yU3RyaW5ncy5mcm9udGVuZF9kb21haW5fY2xh
c3MpCi0gICAgYmFja2VuZF9kaXNwYXRjaGVyX2NvbnN0cnVjdG9yID0gc3RyaW5nLlRlbXBsYXRl
KENvZGVHZW5lcmF0b3JJbnNwZWN0b3JTdHJpbmdzLmJhY2tlbmRfZGlzcGF0Y2hlcl9jb25zdHJ1
Y3RvcikKLSAgICBiYWNrZW5kX2Rpc3BhdGNoZXJfZGlzcGF0Y2hfbWV0aG9kID0gc3RyaW5nLlRl
bXBsYXRlKENvZGVHZW5lcmF0b3JJbnNwZWN0b3JTdHJpbmdzLmJhY2tlbmRfZGlzcGF0Y2hlcl9k
aXNwYXRjaF9tZXRob2QpCi0gICAgYmFja2VuZF9kaXNwYXRjaGVyX2Rpc3BhdGNoX21ldGhvZF9z
aW1wbGUgPSBzdHJpbmcuVGVtcGxhdGUoQ29kZUdlbmVyYXRvckluc3BlY3RvclN0cmluZ3MuYmFj
a2VuZF9kaXNwYXRjaGVyX2Rpc3BhdGNoX21ldGhvZF9zaW1wbGUpCi0gICAgYmFja2VuZF9tZXRo
b2QgPSBzdHJpbmcuVGVtcGxhdGUoQ29kZUdlbmVyYXRvckluc3BlY3RvclN0cmluZ3MuYmFja2Vu
ZF9tZXRob2QpCi0gICAgZnJvbnRlbmRfbWV0aG9kID0gc3RyaW5nLlRlbXBsYXRlKENvZGVHZW5l
cmF0b3JJbnNwZWN0b3JTdHJpbmdzLmZyb250ZW5kX21ldGhvZCkKLSAgICBjYWxsYmFja19tZXRo
b2QgPSBzdHJpbmcuVGVtcGxhdGUoQ29kZUdlbmVyYXRvckluc3BlY3RvclN0cmluZ3MuY2FsbGJh
Y2tfbWV0aG9kKQotICAgIGZyb250ZW5kX2ggPSBzdHJpbmcuVGVtcGxhdGUoZmlsZV9oZWFkZXJf
ICsgQ29kZUdlbmVyYXRvckluc3BlY3RvclN0cmluZ3MuZnJvbnRlbmRfaCkKLSAgICBiYWNrZW5k
X2ggPSBzdHJpbmcuVGVtcGxhdGUoZmlsZV9oZWFkZXJfICsgQ29kZUdlbmVyYXRvckluc3BlY3Rv
clN0cmluZ3MuYmFja2VuZF9oKQotICAgIGJhY2tlbmRfY3BwID0gc3RyaW5nLlRlbXBsYXRlKGZp
bGVfaGVhZGVyXyArIENvZGVHZW5lcmF0b3JJbnNwZWN0b3JTdHJpbmdzLmJhY2tlbmRfY3BwKQot
ICAgIGZyb250ZW5kX2NwcCA9IHN0cmluZy5UZW1wbGF0ZShmaWxlX2hlYWRlcl8gKyBDb2RlR2Vu
ZXJhdG9ySW5zcGVjdG9yU3RyaW5ncy5mcm9udGVuZF9jcHApCi0gICAgdHlwZWJ1aWxkZXJfaCA9
IHN0cmluZy5UZW1wbGF0ZShmaWxlX2hlYWRlcl8gKyBDb2RlR2VuZXJhdG9ySW5zcGVjdG9yU3Ry
aW5ncy50eXBlYnVpbGRlcl9oKQotICAgIHR5cGVidWlsZGVyX2NwcCA9IHN0cmluZy5UZW1wbGF0
ZShmaWxlX2hlYWRlcl8gKyBDb2RlR2VuZXJhdG9ySW5zcGVjdG9yU3RyaW5ncy50eXBlYnVpbGRl
cl9jcHApCi0gICAgYmFja2VuZF9qcyA9IHN0cmluZy5UZW1wbGF0ZShmaWxlX2hlYWRlcl8gKyBD
b2RlR2VuZXJhdG9ySW5zcGVjdG9yU3RyaW5ncy5iYWNrZW5kX2pzKQotICAgIHBhcmFtX2NvbnRh
aW5lcl9hY2Nlc3NfY29kZSA9IENvZGVHZW5lcmF0b3JJbnNwZWN0b3JTdHJpbmdzLnBhcmFtX2Nv
bnRhaW5lcl9hY2Nlc3NfY29kZQotCi0KLQotCi0KLXR5cGVfbWFwID0gVHlwZU1hcChqc29uX2Fw
aSwgZGVwZW5kZW5jeV9hcGkpCi0KLQotY2xhc3MgTmVlZFJ1bnRpbWVDYXN0UmVxdWVzdDoKLSAg
ICBkZWYgX19pbml0X18oc2VsZik6Ci0gICAgICAgIHNlbGYuYWNrXyA9IE5vbmUKLQotICAgIGRl
ZiBhY2tub3dsZWRnZShzZWxmKToKLSAgICAgICAgc2VsZi5hY2tfID0gVHJ1ZQotCi0gICAgZGVm
IGlzX2Fja25vd2xlZGdlZChzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuYWNrXwotCi0KLWRl
ZiByZXNvbHZlX2FsbF90eXBlcygpOgotICAgIHJ1bnRpbWVfY2FzdF9nZW5lcmF0ZV9yZXF1ZXN0
cyA9IHt9Ci0gICAgZm9yIHR5cGVfbmFtZSBpbiBUWVBFU19XSVRIX1JVTlRJTUVfQ0FTVF9TRVQ6
Ci0gICAgICAgIHJ1bnRpbWVfY2FzdF9nZW5lcmF0ZV9yZXF1ZXN0c1t0eXBlX25hbWVdID0gTmVl
ZFJ1bnRpbWVDYXN0UmVxdWVzdCgpCi0KLSAgICBjbGFzcyBGb3J3YXJkTGlzdGVuZXI6Ci0gICAg
ICAgIHR5cGVfZGF0YV9zZXQgPSBzZXQoKQotICAgICAgICBhbHJlYWR5X2RlY2xhcmVkX3NldCA9
IHNldCgpCi0KLSAgICAgICAgQGNsYXNzbWV0aG9kCi0gICAgICAgIGRlZiBhZGRfdHlwZV9kYXRh
KGNscywgdHlwZV9kYXRhKToKLSAgICAgICAgICAgIGlmIHR5cGVfZGF0YSBub3QgaW4gY2xzLmFs
cmVhZHlfZGVjbGFyZWRfc2V0OgotICAgICAgICAgICAgICAgIGNscy50eXBlX2RhdGFfc2V0LmFk
ZCh0eXBlX2RhdGEpCi0KLSAgICBjbGFzcyBSZXNvbHZlQ29udGV4dDoKLSAgICAgICAgZm9yd2Fy
ZF9saXN0ZW5lciA9IEZvcndhcmRMaXN0ZW5lcgotCi0gICAgZm9yIGRvbWFpbl9kYXRhIGluIHR5
cGVfbWFwLmRvbWFpbnMoKToKLSAgICAgICAgZm9yIHR5cGVfZGF0YSBpbiBkb21haW5fZGF0YS50
eXBlcygpOgotICAgICAgICAgICAgYmluZGluZyA9IHR5cGVfZGF0YS5nZXRfYmluZGluZygpCi0g
ICAgICAgICAgICBiaW5kaW5nLnJlc29sdmVfaW5uZXIoUmVzb2x2ZUNvbnRleHQpCi0gICAgICAg
ICAgICAjIERvIG5vdCBnZW5lcmF0ZSBmb3J3YXJkcyBmb3IgdGhpcyB0eXBlIGFueSBsb25nZXIu
Ci0gICAgICAgICAgICBGb3J3YXJkTGlzdGVuZXIuYWxyZWFkeV9kZWNsYXJlZF9zZXQuYWRkKHR5
cGVfZGF0YSkKLQotICAgIGZvciBkb21haW5fZGF0YSBpbiB0eXBlX21hcC5kb21haW5zKCk6Ci0g
ICAgICAgIGZvciB0eXBlX2RhdGEgaW4gZG9tYWluX2RhdGEudHlwZXMoKToKLSAgICAgICAgICAg
IGZ1bGxfdHlwZV9uYW1lID0gIiVzLiVzIiAlICh0eXBlX2RhdGEuZ2V0X2RvbWFpbl9uYW1lKCks
IHR5cGVfZGF0YS5nZXRfbmFtZSgpKQotICAgICAgICAgICAgcmVxdWVzdCA9IHJ1bnRpbWVfY2Fz
dF9nZW5lcmF0ZV9yZXF1ZXN0cy5wb3AoZnVsbF90eXBlX25hbWUsIE5vbmUpCi0gICAgICAgICAg
ICBiaW5kaW5nID0gdHlwZV9kYXRhLmdldF9iaW5kaW5nKCkKLSAgICAgICAgICAgIGlmIHJlcXVl
c3Q6Ci0gICAgICAgICAgICAgICAgYmluZGluZy5yZXF1ZXN0X3VzZXJfcnVudGltZV9jYXN0KHJl
cXVlc3QpCi0KLSAgICAgICAgICAgIGlmIHJlcXVlc3QgYW5kIG5vdCByZXF1ZXN0LmlzX2Fja25v
d2xlZGdlZCgpOgotICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiRmFpbGVkIHRvIGdl
bmVyYXRlIHJ1bnRpbWVDYXN0IGluICIgKyBmdWxsX3R5cGVfbmFtZSkKLQotICAgICMgRklYTUU6
IFRoaXMgYXNzdW1lcyBhbGwgdGhlIGRvbWFpbnMgYXJlIHByb2Nlc3NlZCBhdCBvbmNlLiBDaGFu
Z2UgdGhpcyB2ZXJpZmljYXRpb24KLSAgICAjIHRvIG9ubHkgdmVyaWZ5IHJ1bnRpbWUgY2FzdHMg
Zm9yIHRoZSBkb21haW5zIGJlaW5nIGdlbmVyYXRlZC4KLSAgICAjIGlmIHZlcmlmaWNhdGlvbjoK
LSAgICAjICAgICBmb3IgZnVsbF90eXBlX25hbWUgaW4gcnVudGltZV9jYXN0X2dlbmVyYXRlX3Jl
cXVlc3RzOgotICAgICMgICAgICAgICByYWlzZSBFeGNlcHRpb24oIkZhaWxlZCB0byBnZW5lcmF0
ZSBydW50aW1lQ2FzdC4gVHlwZSAiICsgZnVsbF90eXBlX25hbWUgKyAiIG5vdCBmb3VuZCIpCi0K
LSAgICByZXR1cm4gRm9yd2FyZExpc3RlbmVyCi0KLQotZ2xvYmFsX2ZvcndhcmRfbGlzdGVuZXIg
PSByZXNvbHZlX2FsbF90eXBlcygpCi0KLQotZGVmIGdldF9hbm5vdGF0ZWRfdHlwZV90ZXh0KHJh
d190eXBlLCBhbm5vdGF0ZWRfdHlwZSk6Ci0gICAgaWYgYW5ub3RhdGVkX3R5cGUgIT0gcmF3X3R5
cGU6Ci0gICAgICAgIHJldHVybiAiLyolcyovICVzIiAlIChhbm5vdGF0ZWRfdHlwZSwgcmF3X3R5
cGUpCi0gICAgZWxzZToKLSAgICAgICAgcmV0dXJuIHJhd190eXBlCi0KLQotZGVmIGZvcm1hdF9z
ZXR0ZXJfdmFsdWVfZXhwcmVzc2lvbihwYXJhbV90eXBlX2JpbmRpbmcsIHZhbHVlX3JlZik6Ci0g
ICAgcGF0dGVybiA9IHBhcmFtX3R5cGVfYmluZGluZy5nZXRfc2V0dGVyX3ZhbHVlX2V4cHJlc3Np
b25fcGF0dGVybigpCi0gICAgaWYgcGF0dGVybjoKLSAgICAgICAgcmV0dXJuIHBhdHRlcm4gJSAo
SU5TUEVDVE9SX1RZUEVTX0dFTkVSQVRPUl9DT05GSUdfTUFQW291dHB1dF90eXBlXVsicHJlZml4
Il0sIHZhbHVlX3JlZikKLSAgICBlbHNlOgotICAgICAgICByZXR1cm4gdmFsdWVfcmVmCi0KLQot
Y2xhc3MgR2VuZXJhdG9yOgotICAgIGZyb250ZW5kX2RvbWFpbl9jbGFzc19saW5lcyA9IFtdCi0K
LSAgICBiYWNrZW5kX21ldGhvZF9pbXBsZW1lbnRhdGlvbl9saXN0ID0gW10KLSAgICBmcm9udGVu
ZF9tZXRob2RfbGlzdCA9IFtdCi0gICAgYmFja2VuZF9qc19kb21haW5faW5pdGlhbGl6ZXJfbGlz
dCA9IFtdCi0KLSAgICBiYWNrZW5kX2hhbmRsZXJfaW50ZXJmYWNlX2xpc3QgPSBbXQotICAgIGJh
Y2tlbmRfaGFuZGxlcl9pbXBsZW1lbnRhdGlvbl9saXN0ID0gW10KLSAgICBiYWNrZW5kX2Rpc3Bh
dGNoZXJfaW50ZXJmYWNlX2xpc3QgPSBbXQotICAgIHR5cGVfYnVpbGRlcl9mcmFnbWVudHMgPSBb
XQotICAgIHR5cGVfYnVpbGRlcl9mb3J3YXJkcyA9IFtdCi0gICAgdmFsaWRhdG9yX2ltcGxfbGlz
dCA9IFtdCi0gICAgdHlwZV9idWlsZGVyX2ltcGxfbGlzdCA9IFtdCi0KLQotICAgIEBzdGF0aWNt
ZXRob2QKLSAgICBkZWYgZ28oKToKLSAgICAgICAgR2VuZXJhdG9yLnByb2Nlc3NfdHlwZXModHlw
ZV9tYXApCi0KLSAgICAgICAgZmlyc3RfY3ljbGVfZ3VhcmRhYmxlX2xpc3RfbGlzdCA9IFsKLSAg
ICAgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX21ldGhvZF9pbXBsZW1lbnRhdGlvbl9saXN0LAot
ICAgICAgICAgICAgR2VuZXJhdG9yLmJhY2tlbmRfaGFuZGxlcl9pbnRlcmZhY2VfbGlzdCwKLSAg
ICAgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX2hhbmRsZXJfaW1wbGVtZW50YXRpb25fbGlzdCwK
LSAgICAgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX2Rpc3BhdGNoZXJfaW50ZXJmYWNlX2xpc3Rd
Ci0KLSAgICAgICAgZm9yIGpzb25fZG9tYWluIGluIGpzb25fYXBpWyJkb21haW5zIl06Ci0gICAg
ICAgICAgICBkb21haW5fbmFtZSA9IGpzb25fZG9tYWluWyJkb21haW4iXQotICAgICAgICAgICAg
ZG9tYWluX25hbWVfbG93ZXIgPSBkb21haW5fbmFtZS5sb3dlcigpCi0KLSAgICAgICAgICAgIGRv
bWFpbl9maXhlcyA9IERvbWFpbk5hbWVGaXhlcy5nZXRfZml4ZWRfZGF0YShkb21haW5fbmFtZSkK
LQotICAgICAgICAgICAgZG9tYWluX2d1YXJkID0gZG9tYWluX2ZpeGVzLmdldF9ndWFyZCgpCi0K
LSAgICAgICAgICAgIGlmIGRvbWFpbl9ndWFyZDoKLSAgICAgICAgICAgICAgICBmb3IgbCBpbiBm
aXJzdF9jeWNsZV9ndWFyZGFibGVfbGlzdF9saXN0OgotICAgICAgICAgICAgICAgICAgICBkb21h
aW5fZ3VhcmQuZ2VuZXJhdGVfb3BlbihsKQotCi0gICAgICAgICAgICBmcm9udGVuZF9tZXRob2Rf
ZGVjbGFyYXRpb25fbGluZXMgPSBbXQotCi0gICAgICAgICAgICBpZiAoImNvbW1hbmRzIiBpbiBq
c29uX2RvbWFpbiBvciAiZXZlbnRzIiBpbiBqc29uX2RvbWFpbik6Ci0gICAgICAgICAgICAgICAg
R2VuZXJhdG9yLmJhY2tlbmRfanNfZG9tYWluX2luaXRpYWxpemVyX2xpc3QuYXBwZW5kKCIvLyAl
cy5cbiIgJSBkb21haW5fbmFtZSkKLSAgICAgICAgICAgICAgICBpZiBub3QgZG9tYWluX2ZpeGVz
LnNraXBfanNfYmluZDoKLSAgICAgICAgICAgICAgICAgICAgR2VuZXJhdG9yLmJhY2tlbmRfanNf
ZG9tYWluX2luaXRpYWxpemVyX2xpc3QuYXBwZW5kKCJJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVy
JXNEaXNwYXRjaGVyID0gSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbkRpc3BhdGNoZXIu
YmluZChJbnNwZWN0b3JCYWNrZW5kLCBcIiVzXCIpO1xuIiAlIChkb21haW5fbmFtZSwgZG9tYWlu
X25hbWUpKQotCi0gICAgICAgICAgICBpZiAidHlwZXMiIGluIGpzb25fZG9tYWluOgotICAgICAg
ICAgICAgICAgIGZvciBqc29uX3R5cGUgaW4ganNvbl9kb21haW5bInR5cGVzIl06Ci0gICAgICAg
ICAgICAgICAgICAgIGlmICJ0eXBlIiBpbiBqc29uX3R5cGUgYW5kIGpzb25fdHlwZVsidHlwZSJd
ID09ICJzdHJpbmciIGFuZCAiZW51bSIgaW4ganNvbl90eXBlOgotICAgICAgICAgICAgICAgICAg
ICAgICAgZW51bV9uYW1lID0gIiVzLiVzIiAlIChkb21haW5fbmFtZSwganNvbl90eXBlWyJpZCJd
KQotICAgICAgICAgICAgICAgICAgICAgICAgR2VuZXJhdG9yLnByb2Nlc3NfZW51bShqc29uX3R5
cGUsIGVudW1fbmFtZSkKLSAgICAgICAgICAgICAgICAgICAgZWxpZiBqc29uX3R5cGVbInR5cGUi
XSA9PSAib2JqZWN0IjoKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICJwcm9wZXJ0aWVzIiBp
biBqc29uX3R5cGU6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGpzb25fcHJvcGVy
dHkgaW4ganNvbl90eXBlWyJwcm9wZXJ0aWVzIl06Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICJ0eXBlIiBpbiBqc29uX3Byb3BlcnR5IGFuZCBqc29uX3Byb3BlcnR5WyJ0eXBl
Il0gPT0gInN0cmluZyIgYW5kICJlbnVtIiBpbiBqc29uX3Byb3BlcnR5OgotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZW51bV9uYW1lID0gIiVzLiVzJXMiICUgKGRvbWFpbl9u
YW1lLCBqc29uX3R5cGVbImlkIl0sIHRvX3RpdGxlX2Nhc2UoanNvbl9wcm9wZXJ0eVsibmFtZSJd
KSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdlbmVyYXRvci5wcm9jZXNz
X2VudW0oanNvbl9wcm9wZXJ0eSwgZW51bV9uYW1lKQotCi0gICAgICAgICAgICBpZiAiZXZlbnRz
IiBpbiBqc29uX2RvbWFpbjoKLSAgICAgICAgICAgICAgICBpZiBkb21haW5fZ3VhcmQ6Ci0gICAg
ICAgICAgICAgICAgICAgIGRvbWFpbl9ndWFyZC5nZW5lcmF0ZV9vcGVuKEdlbmVyYXRvci5mcm9u
dGVuZF9tZXRob2RfbGlzdCkKLSAgICAgICAgICAgICAgICAgICAgZG9tYWluX2d1YXJkLmdlbmVy
YXRlX29wZW4oR2VuZXJhdG9yLmZyb250ZW5kX2RvbWFpbl9jbGFzc19saW5lcykKLQotICAgICAg
ICAgICAgICAgIGZvciBqc29uX2V2ZW50IGluIGpzb25fZG9tYWluWyJldmVudHMiXToKLSAgICAg
ICAgICAgICAgICAgICAgR2VuZXJhdG9yLnByb2Nlc3NfZXZlbnQoanNvbl9ldmVudCwgZG9tYWlu
X25hbWUsIGZyb250ZW5kX21ldGhvZF9kZWNsYXJhdGlvbl9saW5lcykKLQotICAgICAgICAgICAg
ICAgIEdlbmVyYXRvci5mcm9udGVuZF9kb21haW5fY2xhc3NfbGluZXMuYXBwZW5kKFRlbXBsYXRl
cy5mcm9udGVuZF9kb21haW5fY2xhc3Muc3Vic3RpdHV0ZShOb25lLAotICAgICAgICAgICAgICAg
ICAgICBleHBvcnRNYWNybz1JTlNQRUNUT1JfVFlQRVNfR0VORVJBVE9SX0NPTkZJR19NQVBbb3V0
cHV0X3R5cGVdWyJleHBvcnRfbWFjcm8iXSwKLSAgICAgICAgICAgICAgICAgICAgZG9tYWluQ2xh
c3NOYW1lPSJJbnNwZWN0b3Ilc0Zyb250ZW5kRGlzcGF0Y2hlciIgJSBkb21haW5fbmFtZSwKLSAg
ICAgICAgICAgICAgICAgICAgZnJvbnRlbmREb21haW5NZXRob2REZWNsYXJhdGlvbnM9IiIuam9p
bihmbGF0dGVuX2xpc3QoZnJvbnRlbmRfbWV0aG9kX2RlY2xhcmF0aW9uX2xpbmVzKSkpKQotCi0g
ICAgICAgICAgICAgICAgaWYgZG9tYWluX2d1YXJkOgotICAgICAgICAgICAgICAgICAgICBkb21h
aW5fZ3VhcmQuZ2VuZXJhdGVfY2xvc2UoR2VuZXJhdG9yLmZyb250ZW5kX21ldGhvZF9saXN0KQot
ICAgICAgICAgICAgICAgICAgICBkb21haW5fZ3VhcmQuZ2VuZXJhdGVfY2xvc2UoR2VuZXJhdG9y
LmZyb250ZW5kX2RvbWFpbl9jbGFzc19saW5lcykKLQotICAgICAgICAgICAgZGlzcGF0Y2hlcl9u
YW1lID0gIkluc3BlY3RvciIgKyBDYXBpdGFsaXplci5sb3dlcl9jYW1lbF9jYXNlX3RvX3VwcGVy
KGRvbWFpbl9uYW1lKSArICJCYWNrZW5kRGlzcGF0Y2hlciIKLSAgICAgICAgICAgIGFnZW50X2lu
dGVyZmFjZV9uYW1lID0gZGlzcGF0Y2hlcl9uYW1lICsgIkhhbmRsZXIiCi0KLSAgICAgICAgICAg
IGlmICJjb21tYW5kcyIgaW4ganNvbl9kb21haW46Ci0gICAgICAgICAgICAgICAgR2VuZXJhdG9y
LmJhY2tlbmRfZGlzcGF0Y2hlcl9pbnRlcmZhY2VfbGlzdC5hcHBlbmQoImNsYXNzICVzICVzIGZp
bmFsIDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yU3VwcGxlbWVudGFsQmFja2VuZERpc3Bh
dGNoZXIge1xuIiAlIChJTlNQRUNUT1JfVFlQRVNfR0VORVJBVE9SX0NPTkZJR19NQVBbb3V0cHV0
X3R5cGVdWyJleHBvcnRfbWFjcm8iXSwgZGlzcGF0Y2hlcl9uYW1lKSkKLSAgICAgICAgICAgICAg
ICBHZW5lcmF0b3IuYmFja2VuZF9kaXNwYXRjaGVyX2ludGVyZmFjZV9saXN0LmFwcGVuZCgicHVi
bGljOlxuIikKLSAgICAgICAgICAgICAgICBHZW5lcmF0b3IuYmFja2VuZF9kaXNwYXRjaGVyX2lu
dGVyZmFjZV9saXN0LmFwcGVuZCgiICAgIHN0YXRpYyBQYXNzUmVmUHRyPCVzPiBjcmVhdGUoSW5z
cGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciosICVzKik7XG4iICUgKGRpc3BhdGNo
ZXJfbmFtZSwgYWdlbnRfaW50ZXJmYWNlX25hbWUpKQotICAgICAgICAgICAgICAgIEdlbmVyYXRv
ci5iYWNrZW5kX2Rpc3BhdGNoZXJfaW50ZXJmYWNlX2xpc3QuYXBwZW5kKCIgICAgdmlydHVhbCB2
b2lkIGRpc3BhdGNoKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUGFzc1JlZlB0
cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gbWVzc2FnZSkgb3ZlcnJpZGU7XG4iKQotICAg
ICAgICAgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX2Rpc3BhdGNoZXJfaW50ZXJmYWNlX2xpc3Qu
YXBwZW5kKCJwcml2YXRlOlxuIikKLQotICAgICAgICAgICAgICAgIEdlbmVyYXRvci5iYWNrZW5k
X2hhbmRsZXJfaW50ZXJmYWNlX2xpc3QuYXBwZW5kKCJjbGFzcyAlcyAlcyB7XG4iICUgKElOU1BF
Q1RPUl9UWVBFU19HRU5FUkFUT1JfQ09ORklHX01BUFtvdXRwdXRfdHlwZV1bImV4cG9ydF9tYWNy
byJdLCBhZ2VudF9pbnRlcmZhY2VfbmFtZSkpCi0gICAgICAgICAgICAgICAgR2VuZXJhdG9yLmJh
Y2tlbmRfaGFuZGxlcl9pbnRlcmZhY2VfbGlzdC5hcHBlbmQoInB1YmxpYzpcbiIpCi0KLSAgICAg
ICAgICAgICAgICBiYWNrZW5kX21ldGhvZF9jb3VudCA9IGxlbihHZW5lcmF0b3IuYmFja2VuZF9t
ZXRob2RfaW1wbGVtZW50YXRpb25fbGlzdCkKLQotICAgICAgICAgICAgICAgIGRpc3BhdGNoZXJf
aWZfY2hhaW4gPSBbXQotICAgICAgICAgICAgICAgIGRpc3BhdGNoZXJfY29tbWFuZHNfbGlzdCA9
IFtdCi0gICAgICAgICAgICAgICAgZm9yIGpzb25fY29tbWFuZCBpbiBqc29uX2RvbWFpblsiY29t
bWFuZHMiXToKLSAgICAgICAgICAgICAgICAgICAgR2VuZXJhdG9yLnByb2Nlc3NfY29tbWFuZChq
c29uX2NvbW1hbmQsIGRvbWFpbl9uYW1lLCBhZ2VudF9pbnRlcmZhY2VfbmFtZSwgZGlzcGF0Y2hl
cl9uYW1lLCBkaXNwYXRjaGVyX2lmX2NoYWluLCBkaXNwYXRjaGVyX2NvbW1hbmRzX2xpc3QpCi0K
LSAgICAgICAgICAgICAgICBHZW5lcmF0b3IuYmFja2VuZF9oYW5kbGVyX2ludGVyZmFjZV9saXN0
LmFwcGVuZCgicHJvdGVjdGVkOlxuIikKLSAgICAgICAgICAgICAgICBHZW5lcmF0b3IuYmFja2Vu
ZF9oYW5kbGVyX2ludGVyZmFjZV9saXN0LmFwcGVuZCgiICAgIHZpcnR1YWwgfiVzKCk7XG4iICUg
YWdlbnRfaW50ZXJmYWNlX25hbWUpCi0gICAgICAgICAgICAgICAgR2VuZXJhdG9yLmJhY2tlbmRf
aGFuZGxlcl9pbnRlcmZhY2VfbGlzdC5hcHBlbmQoIn07XG5cbiIpCi0KLSAgICAgICAgICAgICAg
ICBHZW5lcmF0b3IuYmFja2VuZF9oYW5kbGVyX2ltcGxlbWVudGF0aW9uX2xpc3QuYXBwZW5kKCIl
czo6fiVzKCkgeyB9XG4iICUgKGFnZW50X2ludGVyZmFjZV9uYW1lLCBhZ2VudF9pbnRlcmZhY2Vf
bmFtZSkpCi0KLSAgICAgICAgICAgICAgICBHZW5lcmF0b3IuYmFja2VuZF9kaXNwYXRjaGVyX2lu
dGVyZmFjZV9saXN0LmFwcGVuZCgicHJpdmF0ZTpcbiIpCi0gICAgICAgICAgICAgICAgR2VuZXJh
dG9yLmJhY2tlbmRfZGlzcGF0Y2hlcl9pbnRlcmZhY2VfbGlzdC5hcHBlbmQoIiAgICAlcyhJbnNw
ZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiwgJXMqKTtcbiIgJSAoZGlzcGF0Y2hl
cl9uYW1lLCBhZ2VudF9pbnRlcmZhY2VfbmFtZSkpCi0gICAgICAgICAgICAgICAgR2VuZXJhdG9y
LmJhY2tlbmRfZGlzcGF0Y2hlcl9pbnRlcmZhY2VfbGlzdC5hcHBlbmQoIiAgICAlcyogbV9hZ2Vu
dDtcbiIgJSBhZ2VudF9pbnRlcmZhY2VfbmFtZSkKLSAgICAgICAgICAgICAgICBHZW5lcmF0b3Iu
YmFja2VuZF9kaXNwYXRjaGVyX2ludGVyZmFjZV9saXN0LmFwcGVuZCgifTtcblxuIikKLQotICAg
ICAgICAgICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX21ldGhvZF9pbXBsZW1lbnRhdGlvbl9saXN0
Lmluc2VydChiYWNrZW5kX21ldGhvZF9jb3VudCwgVGVtcGxhdGVzLmJhY2tlbmRfZGlzcGF0Y2hl
cl9jb25zdHJ1Y3Rvci5zdWJzdGl0dXRlKE5vbmUsCi0gICAgICAgICAgICAgICAgICAgIGRvbWFp
bk5hbWU9ZG9tYWluX25hbWUsCi0gICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoZXJOYW1lPWRp
c3BhdGNoZXJfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgYWdlbnROYW1lPWFnZW50X2ludGVy
ZmFjZV9uYW1lKSkKLQotICAgICAgICAgICAgICAgIGlmIGxlbihqc29uX2RvbWFpblsiY29tbWFu
ZHMiXSkgPD0gNToKLSAgICAgICAgICAgICAgICAgICAgR2VuZXJhdG9yLmJhY2tlbmRfbWV0aG9k
X2ltcGxlbWVudGF0aW9uX2xpc3QuaW5zZXJ0KGJhY2tlbmRfbWV0aG9kX2NvdW50ICsgMSwgVGVt
cGxhdGVzLmJhY2tlbmRfZGlzcGF0Y2hlcl9kaXNwYXRjaF9tZXRob2Rfc2ltcGxlLnN1YnN0aXR1
dGUoTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGRvbWFpbk5hbWU9ZG9tYWluX25hbWUs
Ci0gICAgICAgICAgICAgICAgICAgICAgICBkaXNwYXRjaGVyTmFtZT1kaXNwYXRjaGVyX25hbWUs
Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZkNoYWluPSJcbiIuam9pbihkaXNwYXRjaGVyX2lm
X2NoYWluKSkpCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgR2Vu
ZXJhdG9yLmJhY2tlbmRfbWV0aG9kX2ltcGxlbWVudGF0aW9uX2xpc3QuaW5zZXJ0KGJhY2tlbmRf
bWV0aG9kX2NvdW50ICsgMSwgVGVtcGxhdGVzLmJhY2tlbmRfZGlzcGF0Y2hlcl9kaXNwYXRjaF9t
ZXRob2Quc3Vic3RpdHV0ZShOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgZG9tYWluTmFt
ZT1kb21haW5fbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoZXJOYW1lPWRp
c3BhdGNoZXJfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BhdGNoZXJDb21tYW5k
cz0iXG4iLmpvaW4oZGlzcGF0Y2hlcl9jb21tYW5kc19saXN0KSkpCi0KLSAgICAgICAgICAgICAg
ICBpZiBkb21haW5fZ3VhcmQ6Ci0gICAgICAgICAgICAgICAgICAgIGZvciBsIGluIHJldmVyc2Vk
KGZpcnN0X2N5Y2xlX2d1YXJkYWJsZV9saXN0X2xpc3QpOgotICAgICAgICAgICAgICAgICAgICAg
ICAgZG9tYWluX2d1YXJkLmdlbmVyYXRlX2Nsb3NlKGwpCi0gICAgICAgICAgICAgICAgR2VuZXJh
dG9yLmJhY2tlbmRfanNfZG9tYWluX2luaXRpYWxpemVyX2xpc3QuYXBwZW5kKCJcbiIpCi0KLSAg
ICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIHByb2Nlc3NfZW51bShqc29uX2VudW0sIGVudW1fbmFt
ZSk6Ci0gICAgICAgIGVudW1fbWVtYmVycyA9IFtdCi0gICAgICAgIGZvciBtZW1iZXIgaW4ganNv
bl9lbnVtWyJlbnVtIl06Ci0gICAgICAgICAgICBlbnVtX21lbWJlcnMuYXBwZW5kKCIlczogXCIl
c1wiIiAlIChmaXhfY2FtZWxfY2FzZShtZW1iZXIpLCBtZW1iZXIpKQotCi0gICAgICAgIEdlbmVy
YXRvci5iYWNrZW5kX2pzX2RvbWFpbl9pbml0aWFsaXplcl9saXN0LmFwcGVuZCgiSW5zcGVjdG9y
QmFja2VuZC5yZWdpc3RlckVudW0oXCIlc1wiLCB7JXN9KTtcbiIgJSAoCi0gICAgICAgICAgICBl
bnVtX25hbWUsICIsICIuam9pbihlbnVtX21lbWJlcnMpKSkKLQotICAgIEBzdGF0aWNtZXRob2QK
LSAgICBkZWYgcHJvY2Vzc19ldmVudChqc29uX2V2ZW50LCBkb21haW5fbmFtZSwgZnJvbnRlbmRf
bWV0aG9kX2RlY2xhcmF0aW9uX2xpbmVzKToKLSAgICAgICAgZXZlbnRfbmFtZSA9IGpzb25fZXZl
bnRbIm5hbWUiXQotCi0gICAgICAgIGFkX2hvY190eXBlX291dHB1dCA9IFtdCi0gICAgICAgIGZy
b250ZW5kX21ldGhvZF9kZWNsYXJhdGlvbl9saW5lcy5hcHBlbmQoYWRfaG9jX3R5cGVfb3V0cHV0
KQotICAgICAgICBhZF9ob2NfdHlwZV93cml0ZXIgPSBXcml0ZXIoYWRfaG9jX3R5cGVfb3V0cHV0
LCAiICAgICAgICAiKQotCi0gICAgICAgIGRlY2xfcGFyYW1ldGVyX2xpc3QgPSBbXQotCi0gICAg
ICAgIGpzb25fcGFyYW1ldGVycyA9IGpzb25fZXZlbnQuZ2V0KCJwYXJhbWV0ZXJzIikKLSAgICAg
ICAgR2VuZXJhdG9yLmdlbmVyYXRlX3NlbmRfbWV0aG9kKGpzb25fcGFyYW1ldGVycywgZXZlbnRf
bmFtZSwgZG9tYWluX25hbWUsIGFkX2hvY190eXBlX3dyaXRlciwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRlY2xfcGFyYW1ldGVyX2xpc3QsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHZW5lcmF0b3IuRXZlbnRNZXRob2RTdHJ1Y3RUZW1w
bGF0ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdlbmVyYXRvci5m
cm9udGVuZF9tZXRob2RfbGlzdCwgVGVtcGxhdGVzLmZyb250ZW5kX21ldGhvZCwgeyJldmVudE5h
bWUiOiBldmVudF9uYW1lfSkKLQotICAgICAgICBiYWNrZW5kX2pzX2V2ZW50X3BhcmFtX2xpc3Qg
PSBbXQotICAgICAgICBpZiBqc29uX3BhcmFtZXRlcnM6Ci0gICAgICAgICAgICBmb3IgcGFyYW1l
dGVyIGluIGpzb25fcGFyYW1ldGVyczoKLSAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfbmFtZSA9
IHBhcmFtZXRlclsibmFtZSJdCi0gICAgICAgICAgICAgICAgYmFja2VuZF9qc19ldmVudF9wYXJh
bV9saXN0LmFwcGVuZCgiXCIlc1wiIiAlIHBhcmFtZXRlcl9uYW1lKQotCi0gICAgICAgIGZyb250
ZW5kX21ldGhvZF9kZWNsYXJhdGlvbl9saW5lcy5hcHBlbmQoCi0gICAgICAgICAgICAiICAgIHZv
aWQgJXMoJXMpO1xuIiAlIChldmVudF9uYW1lLCAiLCAiLmpvaW4oZGVjbF9wYXJhbWV0ZXJfbGlz
dCkpKQotCi0gICAgICAgIEdlbmVyYXRvci5iYWNrZW5kX2pzX2RvbWFpbl9pbml0aWFsaXplcl9s
aXN0LmFwcGVuZCgiSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckV2ZW50KFwiJXMuJXNcIiwgWyVz
XSk7XG4iICUgKAotICAgICAgICAgICAgZG9tYWluX25hbWUsIGV2ZW50X25hbWUsICIsICIuam9p
bihiYWNrZW5kX2pzX2V2ZW50X3BhcmFtX2xpc3QpKSkKLQotICAgIGNsYXNzIEV2ZW50TWV0aG9k
U3RydWN0VGVtcGxhdGU6Ci0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGFwcGVu
ZF9wcm9sb2cobGluZV9saXN0KToKLSAgICAgICAgICAgIGxpbmVfbGlzdC5hcHBlbmQoIiAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNPYmplY3QgPSBJbnNwZWN0b3JPYmplY3Q6OmNy
ZWF0ZSgpO1xuIikKLQotICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgIGRlZiBhcHBlbmRf
ZXBpbG9nKGxpbmVfbGlzdCk6Ci0gICAgICAgICAgICBsaW5lX2xpc3QuYXBwZW5kKCIgICAganNv
bk1lc3NhZ2UtPnNldE9iamVjdChBU0NJSUxpdGVyYWwoXCJwYXJhbXNcIiksIHBhcmFtc09iamVj
dCk7XG4iKQotCi0gICAgICAgIGNvbnRhaW5lcl9uYW1lID0gInBhcmFtc09iamVjdCIKLQotICAg
IEBzdGF0aWNtZXRob2QKLSAgICBkZWYgcHJvY2Vzc19jb21tYW5kKGpzb25fY29tbWFuZCwgZG9t
YWluX25hbWUsIGFnZW50X2ludGVyZmFjZV9uYW1lLCBkaXNwYXRjaGVyX25hbWUsIGRpc3BhdGNo
ZXJfaWZfY2hhaW4sIGRpc3BhdGNoZXJfY29tbWFuZHNfbGlzdCk6Ci0gICAgICAgIGpzb25fY29t
bWFuZF9uYW1lID0ganNvbl9jb21tYW5kWyJuYW1lIl0KLQotICAgICAgICBhZF9ob2NfdHlwZV9v
dXRwdXQgPSBbXQotICAgICAgICBHZW5lcmF0b3IuYmFja2VuZF9oYW5kbGVyX2ludGVyZmFjZV9s
aXN0LmFwcGVuZChhZF9ob2NfdHlwZV9vdXRwdXQpCi0gICAgICAgIGFkX2hvY190eXBlX3dyaXRl
ciA9IFdyaXRlcihhZF9ob2NfdHlwZV9vdXRwdXQsICIgICAgIikKLQotICAgICAgICBHZW5lcmF0
b3IuYmFja2VuZF9kaXNwYXRjaGVyX2ludGVyZmFjZV9saXN0LmFwcGVuZCgiICAgIHZvaWQgJXMo
bG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTtc
biIgJSBqc29uX2NvbW1hbmRfbmFtZSkKLQotICAgICAgICBHZW5lcmF0b3IuYmFja2VuZF9oYW5k
bGVyX2ludGVyZmFjZV9saXN0LmFwcGVuZCgiICAgIHZpcnR1YWwgdm9pZCAlcyhFcnJvclN0cmlu
ZyoiICUganNvbl9jb21tYW5kX25hbWUpCi0KLSAgICAgICAgaWYgbm90IGRpc3BhdGNoZXJfaWZf
Y2hhaW46Ci0gICAgICAgICAgICBkaXNwYXRjaGVyX2lmX2NoYWluLmFwcGVuZCgiICAgIGlmICht
ZXRob2QgPT0gXCIlc1wiKSIgJSBqc29uX2NvbW1hbmRfbmFtZSkKLSAgICAgICAgZWxzZToKLSAg
ICAgICAgICAgIGRpc3BhdGNoZXJfaWZfY2hhaW4uYXBwZW5kKCIgICAgZWxzZSBpZiAobWV0aG9k
ID09IFwiJXNcIikiICUganNvbl9jb21tYW5kX25hbWUpCi0gICAgICAgIGRpc3BhdGNoZXJfaWZf
Y2hhaW4uYXBwZW5kKCIgICAgICAgICVzKGNhbGxJZCwgKm1lc3NhZ2UuZ2V0KCkpOyIgJSBqc29u
X2NvbW1hbmRfbmFtZSkKLSAgICAgICAgZGlzcGF0Y2hlcl9jb21tYW5kc19saXN0LmFwcGVuZCgi
ICAgICAgICAgICAgeyBcIiVzXCIsICYlczo6JXMgfSwiICUgKGpzb25fY29tbWFuZF9uYW1lLCBk
aXNwYXRjaGVyX25hbWUsIGpzb25fY29tbWFuZF9uYW1lKSkKLQotICAgICAgICBtZXRob2RfaW5f
cGFyYW1zX2hhbmRsaW5nID0gW10KLSAgICAgICAgbWV0aG9kX2Rpc3BhdGNoX2hhbmRsaW5nID0g
W10KLSAgICAgICAgbWV0aG9kX291dF9wYXJhbXNfaGFuZGxpbmcgPSBbXQotICAgICAgICBtZXRo
b2RfZW5kaW5nX2hhbmRsaW5nID0gW10KLSAgICAgICAgbWV0aG9kX3JlcXVlc3RfbWVzc2FnZV9w
YXJhbV9uYW1lID0gIiIKLSAgICAgICAgYWdlbnRfY2FsbF9wYXJhbV9saXN0ID0gW10KLSAgICAg
ICAganNfcGFyYW1ldGVyc190ZXh0ID0gIiIKLSAgICAgICAgaWYgInBhcmFtZXRlcnMiIGluIGpz
b25fY29tbWFuZDoKLSAgICAgICAgICAgIGpzb25fcGFyYW1zID0ganNvbl9jb21tYW5kWyJwYXJh
bWV0ZXJzIl0KLSAgICAgICAgICAgIG1ldGhvZF9yZXF1ZXN0X21lc3NhZ2VfcGFyYW1fbmFtZSA9
ICIgbWVzc2FnZSIKLSAgICAgICAgICAgIG1ldGhvZF9pbl9wYXJhbXNfaGFuZGxpbmcuYXBwZW5k
KCIgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFy
cmF5OjpjcmVhdGUoKTtcbiIpCi0gICAgICAgICAgICBtZXRob2RfaW5fcGFyYW1zX2hhbmRsaW5n
LmFwcGVuZCgiICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IG1l
c3NhZ2UuZ2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbChcInBhcmFtc1wiKSk7XG4iKQotICAgICAgICAg
ICAgbWV0aG9kX2luX3BhcmFtc19oYW5kbGluZy5hcHBlbmQoIiAgICBJbnNwZWN0b3JPYmplY3Qq
IHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTtcbiIpCi0gICAgICAg
ICAgICBtZXRob2RfaW5fcGFyYW1zX2hhbmRsaW5nLmFwcGVuZCgiICAgIEluc3BlY3RvckFycmF5
KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpO1xuIikKLSAgICAgICAg
ICAgIGpzX3BhcmFtX2xpc3QgPSBbXQotCi0gICAgICAgICAgICBmb3IganNvbl9wYXJhbWV0ZXIg
aW4ganNvbl9wYXJhbXM6Ci0gICAgICAgICAgICAgICAganNvbl9wYXJhbV9uYW1lID0ganNvbl9w
YXJhbWV0ZXJbIm5hbWUiXQotICAgICAgICAgICAgICAgIHBhcmFtX3Jhd190eXBlID0gcmVzb2x2
ZV9wYXJhbV9yYXdfdHlwZShqc29uX3BhcmFtZXRlciwgZG9tYWluX25hbWUpCi0KLSAgICAgICAg
ICAgICAgICBnZXR0ZXJfbmFtZSA9IHBhcmFtX3Jhd190eXBlLmdldF9nZXR0ZXJfbmFtZSgpCi0K
LSAgICAgICAgICAgICAgICBvcHRpb25hbCA9IGpzb25fcGFyYW1ldGVyLmdldCgib3B0aW9uYWwi
KQotCi0gICAgICAgICAgICAgICAgbm9uX29wdGlvbmFsX3R5cGVfbW9kZWwgPSBwYXJhbV9yYXdf
dHlwZS5nZXRfcmF3X3R5cGVfbW9kZWwoKQotICAgICAgICAgICAgICAgIGlmIG9wdGlvbmFsOgot
ICAgICAgICAgICAgICAgICAgICB0eXBlX21vZGVsID0gbm9uX29wdGlvbmFsX3R5cGVfbW9kZWwu
Z2V0X29wdGlvbmFsKCkKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAg
ICB0eXBlX21vZGVsID0gbm9uX29wdGlvbmFsX3R5cGVfbW9kZWwKLQotICAgICAgICAgICAgICAg
IGlmIG9wdGlvbmFsOgotICAgICAgICAgICAgICAgICAgICBjb2RlID0gKCIgICAgYm9vbCAlc192
YWx1ZUZvdW5kID0gZmFsc2U7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAl
cyBpbl8lcyA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXQlcyhwYXJhbXNDb250YWlu
ZXJQdHIsIEFTQ0lJTGl0ZXJhbChcIiVzXCIpLCAmJXNfdmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJv
cnNQdHIpO1xuIiAlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAoanNvbl9wYXJhbV9uYW1l
LCBub25fb3B0aW9uYWxfdHlwZV9tb2RlbC5nZXRfY29tbWFuZF9yZXR1cm5fcGFzc19tb2RlbCgp
LmdldF9yZXR1cm5fdmFyX3R5cGUoKSwganNvbl9wYXJhbV9uYW1lLCBnZXR0ZXJfbmFtZSwganNv
bl9wYXJhbV9uYW1lLCBqc29uX3BhcmFtX25hbWUpKQotICAgICAgICAgICAgICAgICAgICBwYXJh
bSA9ICIsICVzX3ZhbHVlRm91bmQgPyAmaW5fJXMgOiBudWxscHRyIiAlIChqc29uX3BhcmFtX25h
bWUsIGpzb25fcGFyYW1fbmFtZSkKLSAgICAgICAgICAgICAgICAgICAgIyBGSVhNRTogcGFzcyBv
cHRpb25hbCByZWZwdHItdmFsdWVzIGFzIFBhc3NSZWZQdHIKLSAgICAgICAgICAgICAgICAgICAg
Zm9ybWFsX3BhcmFtX3R5cGVfcGF0dGVybiA9ICJjb25zdCAlcyoiCi0gICAgICAgICAgICAgICAg
ZWxzZToKLSAgICAgICAgICAgICAgICAgICAgY29kZSA9ICgiICAgICVzIGluXyVzID0gSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXI6OmdldCVzKHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRl
cmFsKFwiJXNcIiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzUHRyKTtcbiIgJQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIChub25fb3B0aW9uYWxfdHlwZV9tb2RlbC5nZXRfY29tbWFuZF9y
ZXR1cm5fcGFzc19tb2RlbCgpLmdldF9yZXR1cm5fdmFyX3R5cGUoKSwganNvbl9wYXJhbV9uYW1l
LCBnZXR0ZXJfbmFtZSwganNvbl9wYXJhbV9uYW1lKSkKLSAgICAgICAgICAgICAgICAgICAgcGFy
YW0gPSAiLCBpbl8lcyIgJSBqc29uX3BhcmFtX25hbWUKLSAgICAgICAgICAgICAgICAgICAgIyBG
SVhNRTogcGFzcyBub3Qtb3B0aW9uYWwgcmVmcHRyLXZhbHVlcyBhcyBOb25OdWxsUGFzc1JlZlB0
cgotICAgICAgICAgICAgICAgICAgICBpZiBwYXJhbV9yYXdfdHlwZS5pc19oZWF2eV92YWx1ZSgp
OgotICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWFsX3BhcmFtX3R5cGVfcGF0dGVybiA9ICJj
b25zdCAlcyYiCi0gICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBmb3JtYWxfcGFyYW1fdHlwZV9wYXR0ZXJuID0gIiVzIgotCi0gICAgICAgICAgICAgICAg
bWV0aG9kX2luX3BhcmFtc19oYW5kbGluZy5hcHBlbmQoY29kZSkKLSAgICAgICAgICAgICAgICBh
Z2VudF9jYWxsX3BhcmFtX2xpc3QuYXBwZW5kKHBhcmFtKQotICAgICAgICAgICAgICAgIEdlbmVy
YXRvci5iYWNrZW5kX2hhbmRsZXJfaW50ZXJmYWNlX2xpc3QuYXBwZW5kKCIsICVzIGluXyVzIiAl
IChmb3JtYWxfcGFyYW1fdHlwZV9wYXR0ZXJuICUgbm9uX29wdGlvbmFsX3R5cGVfbW9kZWwuZ2V0
X2NvbW1hbmRfcmV0dXJuX3Bhc3NfbW9kZWwoKS5nZXRfcmV0dXJuX3Zhcl90eXBlKCksIGpzb25f
cGFyYW1fbmFtZSkpCi0KLSAgICAgICAgICAgICAgICBqc19iaW5kX3R5cGUgPSBwYXJhbV9yYXdf
dHlwZS5nZXRfanNfYmluZF90eXBlKCkKLSAgICAgICAgICAgICAgICBqc19wYXJhbV90ZXh0ID0g
IntcIm5hbWVcIjogXCIlc1wiLCBcInR5cGVcIjogXCIlc1wiLCBcIm9wdGlvbmFsXCI6ICVzfSIg
JSAoCi0gICAgICAgICAgICAgICAgICAgIGpzb25fcGFyYW1fbmFtZSwKLSAgICAgICAgICAgICAg
ICAgICAganNfYmluZF90eXBlLAotICAgICAgICAgICAgICAgICAgICAoInRydWUiIGlmICgib3B0
aW9uYWwiIGluIGpzb25fcGFyYW1ldGVyIGFuZCBqc29uX3BhcmFtZXRlclsib3B0aW9uYWwiXSkg
ZWxzZSAiZmFsc2UiKSkKLQotICAgICAgICAgICAgICAgIGpzX3BhcmFtX2xpc3QuYXBwZW5kKGpz
X3BhcmFtX3RleHQpCi0KLSAgICAgICAgICAgIG1ldGhvZF9pbl9wYXJhbXNfaGFuZGxpbmcuYXBw
ZW5kKCIgICAgaWYgKHByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkge1xuIikKLSAgICAgICAgICAg
IG1ldGhvZF9pbl9wYXJhbXNfaGFuZGxpbmcuYXBwZW5kKCIgICAgICAgIFN0cmluZyBlcnJvck1l
c3NhZ2UgPSBTdHJpbmc6OmZvcm1hdChcIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJSVzJyBj
YW4ndCBiZSBwcm9jZXNzZWRcIiwgXCIlcy4lc1wiKTtcbiIgJSAoZG9tYWluX25hbWUsIGpzb25f
Y29tbWFuZF9uYW1lKSkKLSAgICAgICAgICAgIG1ldGhvZF9pbl9wYXJhbXNfaGFuZGxpbmcuYXBw
ZW5kKCIgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoJmNh
bGxJZCwgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkludmFsaWRQYXJhbXMsIGVycm9yTWVz
c2FnZSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpKTtcbiIpCi0gICAgICAgICAgICBtZXRob2Rf
aW5fcGFyYW1zX2hhbmRsaW5nLmFwcGVuZCgiICAgICAgICByZXR1cm47XG4iKQotICAgICAgICAg
ICAgbWV0aG9kX2luX3BhcmFtc19oYW5kbGluZy5hcHBlbmQoIiAgICB9XG4iKQotICAgICAgICAg
ICAgbWV0aG9kX2luX3BhcmFtc19oYW5kbGluZy5hcHBlbmQoIlxuIikKLQotICAgICAgICAgICAg
anNfcGFyYW1ldGVyc190ZXh0ID0gIiwgIi5qb2luKGpzX3BhcmFtX2xpc3QpCi0KLSAgICAgICAg
bWV0aG9kX2Rpc3BhdGNoX2hhbmRsaW5nLmFwcGVuZCgiICAgIEVycm9yU3RyaW5nIGVycm9yO1xu
IikKLSAgICAgICAgbWV0aG9kX2Rpc3BhdGNoX2hhbmRsaW5nLmFwcGVuZCgiICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7XG4iKQot
Ci0gICAgICAgIGlmIGpzb25fY29tbWFuZC5nZXQoImFzeW5jIikgPT0gVHJ1ZToKLSAgICAgICAg
ICAgIGNhbGxiYWNrX25hbWUgPSBDYXBpdGFsaXplci5sb3dlcl9jYW1lbF9jYXNlX3RvX3VwcGVy
KGpzb25fY29tbWFuZF9uYW1lKSArICJDYWxsYmFjayIKLQotICAgICAgICAgICAgY2FsbGJhY2tf
b3V0cHV0ID0gW10KLSAgICAgICAgICAgIGNhbGxiYWNrX3dyaXRlciA9IFdyaXRlcihjYWxsYmFj
a19vdXRwdXQsIGFkX2hvY190eXBlX3dyaXRlci5nZXRfaW5kZW50KCkpCi0KLSAgICAgICAgICAg
IGRlY2xfcGFyYW1ldGVyX2xpc3QgPSBbXQotICAgICAgICAgICAgR2VuZXJhdG9yLmdlbmVyYXRl
X3NlbmRfbWV0aG9kKGpzb25fY29tbWFuZC5nZXQoInJldHVybnMiKSwganNvbl9jb21tYW5kX25h
bWUsIGRvbWFpbl9uYW1lLCBhZF9ob2NfdHlwZV93cml0ZXIsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZGVjbF9wYXJhbWV0ZXJfbGlzdCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHZW5lcmF0b3IuQ2FsbGJhY2tNZXRob2RT
dHJ1Y3RUZW1wbGF0ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBHZW5lcmF0b3IuYmFja2VuZF9tZXRob2RfaW1wbGVtZW50YXRpb25fbGlzdCwgVGVtcGxhdGVz
LmNhbGxiYWNrX21ldGhvZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB7ImNhbGxiYWNrTmFtZSI6IGNhbGxiYWNrX25hbWUsICJoYW5kbGVyTmFtZSI6IGFnZW50
X2ludGVyZmFjZV9uYW1lfSkKLQotICAgICAgICAgICAgY2FsbGJhY2tfd3JpdGVyLm5ld2xpbmUo
ImNsYXNzICIgKyBjYWxsYmFja19uYW1lICsgIiA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2Uge1xuIikKLSAgICAgICAgICAgIGNhbGxi
YWNrX3dyaXRlci5uZXdsaW5lKCJwdWJsaWM6XG4iKQotICAgICAgICAgICAgY2FsbGJhY2tfd3Jp
dGVyLm5ld2xpbmUoIiAgICAiICsgY2FsbGJhY2tfbmFtZSArICIoUGFzc1JlZlB0cjxJbnNwZWN0
b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyPiwgaW50IGlkKTtcbiIpCi0gICAgICAgICAg
ICBjYWxsYmFja193cml0ZXIubmV3bGluZSgiICAgIHZvaWQgc2VuZFN1Y2Nlc3MoIiArICIsICIu
am9pbihkZWNsX3BhcmFtZXRlcl9saXN0KSArICIpO1xuIikKLSAgICAgICAgICAgIGNhbGxiYWNr
X3dyaXRlci5uZXdsaW5lKCJ9O1xuIikKLQotICAgICAgICAgICAgYWRfaG9jX3R5cGVfb3V0cHV0
LmFwcGVuZChjYWxsYmFja19vdXRwdXQpCi0KLSAgICAgICAgICAgIG1ldGhvZF9kaXNwYXRjaF9o
YW5kbGluZy5hcHBlbmQoIiAgICBSZWZQdHI8JXM6OiVzPiBjYWxsYmFjayA9IGFkb3B0UmVmKG5l
dyAlczo6JXMobV9iYWNrZW5kRGlzcGF0Y2hlcixjYWxsSWQpKTtcbiIgJSAoYWdlbnRfaW50ZXJm
YWNlX25hbWUsIGNhbGxiYWNrX25hbWUsIGFnZW50X2ludGVyZmFjZV9uYW1lLCBjYWxsYmFja19u
YW1lKSkKLSAgICAgICAgICAgIG1ldGhvZF9lbmRpbmdfaGFuZGxpbmcuYXBwZW5kKCIgICAgaWYg
KGVycm9yLmxlbmd0aCgpKSB7XG4iKQotICAgICAgICAgICAgbWV0aG9kX2VuZGluZ19oYW5kbGlu
Zy5hcHBlbmQoIiAgICAgICAgY2FsbGJhY2stPmRpc2FibGUoKTtcbiIpCi0gICAgICAgICAgICBt
ZXRob2RfZW5kaW5nX2hhbmRsaW5nLmFwcGVuZCgiICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVy
LT5yZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7XG4iKQotICAgICAgICAgICAgbWV0aG9k
X2VuZGluZ19oYW5kbGluZy5hcHBlbmQoIiAgICAgICAgcmV0dXJuO1xuIikKLSAgICAgICAgICAg
IG1ldGhvZF9lbmRpbmdfaGFuZGxpbmcuYXBwZW5kKCIgICAgfSIpCi0KLSAgICAgICAgICAgIGFn
ZW50X2NhbGxfcGFyYW1fbGlzdC5hcHBlbmQoIiwgY2FsbGJhY2siKQotICAgICAgICAgICAgR2Vu
ZXJhdG9yLmJhY2tlbmRfaGFuZGxlcl9pbnRlcmZhY2VfbGlzdC5hcHBlbmQoIiwgUGFzc1JlZlB0
cjwlcz4gY2FsbGJhY2siICUgY2FsbGJhY2tfbmFtZSkKLSAgICAgICAgZWxpZiAicmV0dXJucyIg
aW4ganNvbl9jb21tYW5kOgotICAgICAgICAgICAgaGFzX211bHRpcGxlX3JldHVybnMgPSBsZW4o
anNvbl9jb21tYW5kWyJyZXR1cm5zIl0pID4gMQotICAgICAgICAgICAgaWYgaGFzX211bHRpcGxl
X3JldHVybnM6Ci0gICAgICAgICAgICAgICAgbWV0aG9kX291dF9wYXJhbXNfaGFuZGxpbmcuYXBw
ZW5kKCIgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkge1xuIikKLSAgICAgICAgICAgIGVsc2U6Ci0g
ICAgICAgICAgICAgICAgbWV0aG9kX291dF9wYXJhbXNfaGFuZGxpbmcuYXBwZW5kKCIgICAgaWYg
KCFlcnJvci5sZW5ndGgoKSlcbiIpCi0KLSAgICAgICAgICAgIGZvciBqc29uX3JldHVybiBpbiBq
c29uX2NvbW1hbmRbInJldHVybnMiXToKLQotICAgICAgICAgICAgICAgIGpzb25fcmV0dXJuX25h
bWUgPSBqc29uX3JldHVyblsibmFtZSJdCi0KLSAgICAgICAgICAgICAgICBvcHRpb25hbCA9IGJv
b2woanNvbl9yZXR1cm4uZ2V0KCJvcHRpb25hbCIpKQotCi0gICAgICAgICAgICAgICAgcmV0dXJu
X3R5cGVfYmluZGluZyA9IEdlbmVyYXRvci5yZXNvbHZlX3R5cGVfYW5kX2dlbmVyYXRlX2FkX2hv
Yyhqc29uX3JldHVybiwganNvbl9jb21tYW5kX25hbWUsIGRvbWFpbl9uYW1lLCBhZF9ob2NfdHlw
ZV93cml0ZXIsIGFnZW50X2ludGVyZmFjZV9uYW1lICsgIjo6IikKLQotICAgICAgICAgICAgICAg
IHJhd190eXBlID0gcmV0dXJuX3R5cGVfYmluZGluZy5yZWR1Y2VfdG9fcmF3X3R5cGUoKQotICAg
ICAgICAgICAgICAgIHNldHRlcl90eXBlID0gcmF3X3R5cGUuZ2V0X3NldHRlcl9uYW1lKCkKLSAg
ICAgICAgICAgICAgICBpbml0aWFsaXplciA9IHJhd190eXBlLmdldF9jX2luaXRpYWxpemVyKCkK
LQotICAgICAgICAgICAgICAgIHR5cGVfbW9kZWwgPSByZXR1cm5fdHlwZV9iaW5kaW5nLmdldF90
eXBlX21vZGVsKCkKLSAgICAgICAgICAgICAgICBpZiBvcHRpb25hbDoKLSAgICAgICAgICAgICAg
ICAgICAgdHlwZV9tb2RlbCA9IHR5cGVfbW9kZWwuZ2V0X29wdGlvbmFsKCkKLQotICAgICAgICAg
ICAgICAgIGNvZGUgPSAiICAgICVzIG91dF8lcztcbiIgJSAodHlwZV9tb2RlbC5nZXRfY29tbWFu
ZF9yZXR1cm5fcGFzc19tb2RlbCgpLmdldF9yZXR1cm5fdmFyX3R5cGUoKSwganNvbl9yZXR1cm5f
bmFtZSkKLSAgICAgICAgICAgICAgICBwYXJhbSA9ICIsICVzb3V0XyVzIiAlICh0eXBlX21vZGVs
LmdldF9jb21tYW5kX3JldHVybl9wYXNzX21vZGVsKCkuZ2V0X291dHB1dF9hcmd1bWVudF9wcmVm
aXgoKSwganNvbl9yZXR1cm5fbmFtZSkKLSAgICAgICAgICAgICAgICB2YXJfbmFtZSA9ICJvdXRf
JXMiICUganNvbl9yZXR1cm5fbmFtZQotICAgICAgICAgICAgICAgIHNldHRlcl9hcmd1bWVudCA9
IHR5cGVfbW9kZWwuZ2V0X2NvbW1hbmRfcmV0dXJuX3Bhc3NfbW9kZWwoKS5nZXRfb3V0cHV0X3Rv
X3Jhd19leHByZXNzaW9uKCkgJSB2YXJfbmFtZQotICAgICAgICAgICAgICAgIGlmIHJldHVybl90
eXBlX2JpbmRpbmcuZ2V0X3NldHRlcl92YWx1ZV9leHByZXNzaW9uX3BhdHRlcm4oKToKLSAgICAg
ICAgICAgICAgICAgICAgc2V0dGVyX2FyZ3VtZW50ID0gcmV0dXJuX3R5cGVfYmluZGluZy5nZXRf
c2V0dGVyX3ZhbHVlX2V4cHJlc3Npb25fcGF0dGVybigpICUgKElOU1BFQ1RPUl9UWVBFU19HRU5F
UkFUT1JfQ09ORklHX01BUFtvdXRwdXRfdHlwZV1bInByZWZpeCJdLCBzZXR0ZXJfYXJndW1lbnQp
Ci0KLSAgICAgICAgICAgICAgICBjb29rID0gIiAgICAgICAgcmVzdWx0LT5zZXQlcyhBU0NJSUxp
dGVyYWwoXCIlc1wiKSwgJXMpO1xuIiAlIChzZXR0ZXJfdHlwZSwganNvbl9yZXR1cm5fbmFtZSwg
c2V0dGVyX2FyZ3VtZW50KQotCi0gICAgICAgICAgICAgICAgc2V0X2NvbmRpdGlvbl9wYXR0ZXJu
ID0gdHlwZV9tb2RlbC5nZXRfY29tbWFuZF9yZXR1cm5fcGFzc19tb2RlbCgpLmdldF9zZXRfcmV0
dXJuX2NvbmRpdGlvbigpCi0gICAgICAgICAgICAgICAgaWYgc2V0X2NvbmRpdGlvbl9wYXR0ZXJu
OgotICAgICAgICAgICAgICAgICAgICBjb29rID0gKCIgICAgICAgIGlmICglcylcbiAgICAiICUg
KHNldF9jb25kaXRpb25fcGF0dGVybiAlIHZhcl9uYW1lKSkgKyBjb29rCi0gICAgICAgICAgICAg
ICAgYW5ub3RhdGVkX3R5cGUgPSB0eXBlX21vZGVsLmdldF9jb21tYW5kX3JldHVybl9wYXNzX21v
ZGVsKCkuZ2V0X291dHB1dF9wYXJhbWV0ZXJfdHlwZSgpCi0KLSAgICAgICAgICAgICAgICBwYXJh
bV9uYW1lID0gIm91dF8lcyIgJSBqc29uX3JldHVybl9uYW1lCi0gICAgICAgICAgICAgICAgaWYg
b3B0aW9uYWw6Ci0gICAgICAgICAgICAgICAgICAgIHBhcmFtX25hbWUgPSAib3B0XyIgKyBwYXJh
bV9uYW1lCi0KLSAgICAgICAgICAgICAgICBHZW5lcmF0b3IuYmFja2VuZF9oYW5kbGVyX2ludGVy
ZmFjZV9saXN0LmFwcGVuZCgiLCAlcyAlcyIgJSAoYW5ub3RhdGVkX3R5cGUsIHBhcmFtX25hbWUp
KQotICAgICAgICAgICAgICAgIG1ldGhvZF9vdXRfcGFyYW1zX2hhbmRsaW5nLmFwcGVuZChjb29r
KQotICAgICAgICAgICAgICAgIG1ldGhvZF9kaXNwYXRjaF9oYW5kbGluZy5hcHBlbmQoY29kZSkK
LQotICAgICAgICAgICAgICAgIGFnZW50X2NhbGxfcGFyYW1fbGlzdC5hcHBlbmQocGFyYW0pCi0K
LSAgICAgICAgICAgIGlmIGhhc19tdWx0aXBsZV9yZXR1cm5zOgotICAgICAgICAgICAgICAgIG1l
dGhvZF9vdXRfcGFyYW1zX2hhbmRsaW5nLmFwcGVuZCgiICAgIH1cbiIpCi0gICAgICAgICAgICBt
ZXRob2Rfb3V0X3BhcmFtc19oYW5kbGluZy5hcHBlbmQoIlxuIikKLQotICAgICAgICBtZXRob2Rf
ZGlzcGF0Y2hfaGFuZGxpbmcuYXBwZW5kKCIgICAgbV9hZ2VudC0+JXMoJmVycm9yJXMpO1xuIiAl
IChqc29uX2NvbW1hbmRfbmFtZSwgIiIuam9pbihhZ2VudF9jYWxsX3BhcmFtX2xpc3QpKSkKLSAg
ICAgICAgbWV0aG9kX2Rpc3BhdGNoX2hhbmRsaW5nLmFwcGVuZCgiXG4iKQotCi0gICAgICAgIGlm
IG5vdCBtZXRob2RfZW5kaW5nX2hhbmRsaW5nOgotICAgICAgICAgICAgbWV0aG9kX2VuZGluZ19o
YW5kbGluZy5hcHBlbmQoIiAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2Fs
bElkLCByZXN1bHQucmVsZWFzZSgpLCBlcnJvcik7IikKLQotICAgICAgICBiYWNrZW5kX2pzX3Jl
cGx5X3BhcmFtX2xpc3QgPSBbXQotICAgICAgICBpZiAicmV0dXJucyIgaW4ganNvbl9jb21tYW5k
OgotICAgICAgICAgICAgZm9yIGpzb25fcmV0dXJuIGluIGpzb25fY29tbWFuZFsicmV0dXJucyJd
OgotICAgICAgICAgICAgICAgIGpzb25fcmV0dXJuX25hbWUgPSBqc29uX3JldHVyblsibmFtZSJd
Ci0gICAgICAgICAgICAgICAgYmFja2VuZF9qc19yZXBseV9wYXJhbV9saXN0LmFwcGVuZCgiXCIl
c1wiIiAlIGpzb25fcmV0dXJuX25hbWUpCi0KLSAgICAgICAganNfcmVwbHlfbGlzdCA9ICJbJXNd
IiAlICIsICIuam9pbihiYWNrZW5kX2pzX3JlcGx5X3BhcmFtX2xpc3QpCi0KLSAgICAgICAgR2Vu
ZXJhdG9yLmJhY2tlbmRfbWV0aG9kX2ltcGxlbWVudGF0aW9uX2xpc3QuYXBwZW5kKFRlbXBsYXRl
cy5iYWNrZW5kX21ldGhvZC5zdWJzdGl0dXRlKE5vbmUsCi0gICAgICAgICAgICBkaXNwYXRjaGVy
TmFtZT1kaXNwYXRjaGVyX25hbWUsCi0gICAgICAgICAgICBtZXRob2ROYW1lPWpzb25fY29tbWFu
ZF9uYW1lLAotICAgICAgICAgICAgcmVxdWVzdE1lc3NhZ2VPYmplY3Q9bWV0aG9kX3JlcXVlc3Rf
bWVzc2FnZV9wYXJhbV9uYW1lLAotICAgICAgICAgICAgbWV0aG9kSW5QYXJhbWV0ZXJzSGFuZGxp
bmc9IiIuam9pbihtZXRob2RfaW5fcGFyYW1zX2hhbmRsaW5nKSwKLSAgICAgICAgICAgIG1ldGhv
ZERpc3BhdGNoSGFuZGxpbmc9IiIuam9pbihtZXRob2RfZGlzcGF0Y2hfaGFuZGxpbmcpLAotICAg
ICAgICAgICAgbWV0aG9kT3V0UGFyYW1ldGVyc0hhbmRsaW5nPSIiLmpvaW4obWV0aG9kX291dF9w
YXJhbXNfaGFuZGxpbmcpLAotICAgICAgICAgICAgbWV0aG9kRW5kaW5nSGFuZGxpbmc9IiIuam9p
bihtZXRob2RfZW5kaW5nX2hhbmRsaW5nKSkpCi0KLSAgICAgICAgR2VuZXJhdG9yLmJhY2tlbmRf
anNfZG9tYWluX2luaXRpYWxpemVyX2xpc3QuYXBwZW5kKCJJbnNwZWN0b3JCYWNrZW5kLnJlZ2lz
dGVyQ29tbWFuZChcIiVzLiVzXCIsIFslc10sICVzKTtcbiIgJSAoZG9tYWluX25hbWUsIGpzb25f
Y29tbWFuZF9uYW1lLCBqc19wYXJhbWV0ZXJzX3RleHQsIGpzX3JlcGx5X2xpc3QpKQotICAgICAg
ICBHZW5lcmF0b3IuYmFja2VuZF9oYW5kbGVyX2ludGVyZmFjZV9saXN0LmFwcGVuZCgiKSA9IDA7
XG4iKQotCi0gICAgY2xhc3MgQ2FsbGJhY2tNZXRob2RTdHJ1Y3RUZW1wbGF0ZToKLSAgICAgICAg
QHN0YXRpY21ldGhvZAotICAgICAgICBkZWYgYXBwZW5kX3Byb2xvZyhsaW5lX2xpc3QpOgotICAg
ICAgICAgICAgcGFzcwotCi0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGFwcGVu
ZF9lcGlsb2cobGluZV9saXN0KToKLSAgICAgICAgICAgIHBhc3MKLQotICAgICAgICBjb250YWlu
ZXJfbmFtZSA9ICJqc29uTWVzc2FnZSIKLQotICAgICMgR2VuZXJhdGVzIGNvbW1vbiBjb2RlIGZv
ciBldmVudCBzZW5kaW5nIGFuZCBjYWxsYmFjayByZXNwb25zZSBkYXRhIHNlbmRpbmcuCi0gICAg
QHN0YXRpY21ldGhvZAotICAgIGRlZiBnZW5lcmF0ZV9zZW5kX21ldGhvZChwYXJhbWV0ZXJzLCBl
dmVudF9uYW1lLCBkb21haW5fbmFtZSwgYWRfaG9jX3R5cGVfd3JpdGVyLCBkZWNsX3BhcmFtZXRl
cl9saXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Rfc3RydWN0X3RlbXBs
YXRlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0b3JfbWV0aG9kX2xpc3Qs
IG1ldGhvZF90ZW1wbGF0ZSwgdGVtcGxhdGVfcGFyYW1zKToKLSAgICAgICAgbWV0aG9kX2xpbmVf
bGlzdCA9IFtdCi0gICAgICAgIGlmIHBhcmFtZXRlcnM6Ci0gICAgICAgICAgICBtZXRob2Rfc3Ry
dWN0X3RlbXBsYXRlLmFwcGVuZF9wcm9sb2cobWV0aG9kX2xpbmVfbGlzdCkKLSAgICAgICAgICAg
IGZvciBqc29uX3BhcmFtZXRlciBpbiBwYXJhbWV0ZXJzOgotICAgICAgICAgICAgICAgIHBhcmFt
ZXRlcl9uYW1lID0ganNvbl9wYXJhbWV0ZXJbIm5hbWUiXQotCi0gICAgICAgICAgICAgICAgcGFy
YW1fdHlwZV9iaW5kaW5nID0gR2VuZXJhdG9yLnJlc29sdmVfdHlwZV9hbmRfZ2VuZXJhdGVfYWRf
aG9jKGpzb25fcGFyYW1ldGVyLCBldmVudF9uYW1lLCBkb21haW5fbmFtZSwgYWRfaG9jX3R5cGVf
d3JpdGVyLCAiIikKLQotICAgICAgICAgICAgICAgIHJhd190eXBlID0gcGFyYW1fdHlwZV9iaW5k
aW5nLnJlZHVjZV90b19yYXdfdHlwZSgpCi0gICAgICAgICAgICAgICAgcmF3X3R5cGVfYmluZGlu
ZyA9IFJhd1R5cGVCaW5kaW5nKHJhd190eXBlKQotCi0gICAgICAgICAgICAgICAgb3B0aW9uYWwg
PSBib29sKGpzb25fcGFyYW1ldGVyLmdldCgib3B0aW9uYWwiKSkKLQotICAgICAgICAgICAgICAg
IHNldHRlcl90eXBlID0gcmF3X3R5cGUuZ2V0X3NldHRlcl9uYW1lKCkKLQotICAgICAgICAgICAg
ICAgIHR5cGVfbW9kZWwgPSBwYXJhbV90eXBlX2JpbmRpbmcuZ2V0X3R5cGVfbW9kZWwoKQotICAg
ICAgICAgICAgICAgIHJhd190eXBlX21vZGVsID0gcmF3X3R5cGVfYmluZGluZy5nZXRfdHlwZV9t
b2RlbCgpCi0gICAgICAgICAgICAgICAgaWYgb3B0aW9uYWw6Ci0gICAgICAgICAgICAgICAgICAg
IHR5cGVfbW9kZWwgPSB0eXBlX21vZGVsLmdldF9vcHRpb25hbCgpCi0gICAgICAgICAgICAgICAg
ICAgIHJhd190eXBlX21vZGVsID0gcmF3X3R5cGVfbW9kZWwuZ2V0X29wdGlvbmFsKCkKLQotICAg
ICAgICAgICAgICAgIGFubm90YXRlZF90eXBlID0gdHlwZV9tb2RlbC5nZXRfaW5wdXRfcGFyYW1f
dHlwZV90ZXh0KCkKLSAgICAgICAgICAgICAgICBtb2RlX3R5cGVfYmluZGluZyA9IHBhcmFtX3R5
cGVfYmluZGluZwotCi0gICAgICAgICAgICAgICAgZGVjbF9wYXJhbWV0ZXJfbGlzdC5hcHBlbmQo
IiVzICVzIiAlIChhbm5vdGF0ZWRfdHlwZSwgcGFyYW1ldGVyX25hbWUpKQotCi0gICAgICAgICAg
ICAgICAgc2V0dGVyX2FyZ3VtZW50ID0gcmF3X3R5cGVfbW9kZWwuZ2V0X2V2ZW50X3NldHRlcl9l
eHByZXNzaW9uX3BhdHRlcm4oKSAlIHBhcmFtZXRlcl9uYW1lCi0gICAgICAgICAgICAgICAgaWYg
bW9kZV90eXBlX2JpbmRpbmcuZ2V0X3NldHRlcl92YWx1ZV9leHByZXNzaW9uX3BhdHRlcm4oKToK
LSAgICAgICAgICAgICAgICAgICAgc2V0dGVyX2FyZ3VtZW50ID0gbW9kZV90eXBlX2JpbmRpbmcu
Z2V0X3NldHRlcl92YWx1ZV9leHByZXNzaW9uX3BhdHRlcm4oKSAlIChJTlNQRUNUT1JfVFlQRVNf
R0VORVJBVE9SX0NPTkZJR19NQVBbb3V0cHV0X3R5cGVdWyJwcmVmaXgiXSwgc2V0dGVyX2FyZ3Vt
ZW50KQotCi0gICAgICAgICAgICAgICAgc2V0dGVyX2NvZGUgPSAiICAgICVzLT5zZXQlcyhBU0NJ
SUxpdGVyYWwoXCIlc1wiKSwgJXMpO1xuIiAlIChtZXRob2Rfc3RydWN0X3RlbXBsYXRlLmNvbnRh
aW5lcl9uYW1lLCBzZXR0ZXJfdHlwZSwgcGFyYW1ldGVyX25hbWUsIHNldHRlcl9hcmd1bWVudCkK
LSAgICAgICAgICAgICAgICBpZiBvcHRpb25hbDoKLSAgICAgICAgICAgICAgICAgICAgc2V0dGVy
X2NvZGUgPSAoIiAgICBpZiAoJXMpXG4gICAgIiAlIHBhcmFtZXRlcl9uYW1lKSArIHNldHRlcl9j
b2RlCi0gICAgICAgICAgICAgICAgbWV0aG9kX2xpbmVfbGlzdC5hcHBlbmQoc2V0dGVyX2NvZGUp
Ci0KLSAgICAgICAgICAgIG1ldGhvZF9zdHJ1Y3RfdGVtcGxhdGUuYXBwZW5kX2VwaWxvZyhtZXRo
b2RfbGluZV9saXN0KQotCi0gICAgICAgIGdlbmVyYXRvcl9tZXRob2RfbGlzdC5hcHBlbmQobWV0
aG9kX3RlbXBsYXRlLnN1YnN0aXR1dGUoTm9uZSwKLSAgICAgICAgICAgIGRvbWFpbk5hbWU9ZG9t
YWluX25hbWUsCi0gICAgICAgICAgICBwYXJhbWV0ZXJzPSIsICIuam9pbihkZWNsX3BhcmFtZXRl
cl9saXN0KSwKLSAgICAgICAgICAgIGNvZGU9IiIuam9pbihtZXRob2RfbGluZV9saXN0KSwgKip0
ZW1wbGF0ZV9wYXJhbXMpKQotCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiByZXNvbHZlX3R5
cGVfYW5kX2dlbmVyYXRlX2FkX2hvYyhqc29uX3BhcmFtLCBtZXRob2RfbmFtZSwgZG9tYWluX25h
bWUsIGFkX2hvY190eXBlX3dyaXRlciwgY29udGFpbmVyX3JlbGF0aXZlX25hbWVfcHJlZml4X3Bh
cmFtKToKLSAgICAgICAgcGFyYW1fbmFtZSA9IGpzb25fcGFyYW1bIm5hbWUiXQotICAgICAgICBh
ZF9ob2NfdHlwZV9saXN0ID0gW10KLQotICAgICAgICBjbGFzcyBBZEhvY1R5cGVDb250ZXh0Ogot
ICAgICAgICAgICAgY29udGFpbmVyX2Z1bGxfbmFtZV9wcmVmaXggPSAiPG5vdCB5ZXQgZGVmaW5l
ZD4iCi0gICAgICAgICAgICBjb250YWluZXJfcmVsYXRpdmVfbmFtZV9wcmVmaXggPSBjb250YWlu
ZXJfcmVsYXRpdmVfbmFtZV9wcmVmaXhfcGFyYW0KLQotICAgICAgICAgICAgQHN0YXRpY21ldGhv
ZAotICAgICAgICAgICAgZGVmIGdldF90eXBlX25hbWVfZml4KCk6Ci0gICAgICAgICAgICAgICAg
Y2xhc3MgTmFtZUZpeDoKLSAgICAgICAgICAgICAgICAgICAgY2xhc3NfbmFtZSA9IENhcGl0YWxp
emVyLmxvd2VyX2NhbWVsX2Nhc2VfdG9fdXBwZXIocGFyYW1fbmFtZSkKLQotICAgICAgICAgICAg
ICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgIGRlZiBvdXRwdXRfY29t
bWVudCh3cml0ZXIpOgotICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIi8v
IE5hbWVkIGFmdGVyIHBhcmFtZXRlciAnJXMnIHdoaWxlIGdlbmVyYXRpbmcgY29tbWFuZC9ldmVu
dCAlcy5cbiIgJSAocGFyYW1fbmFtZSwgbWV0aG9kX25hbWUpKQotCi0gICAgICAgICAgICAgICAg
cmV0dXJuIE5hbWVGaXgKLQotICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAg
ZGVmIGFkZF90eXBlKGJpbmRpbmcpOgotICAgICAgICAgICAgICAgIGFkX2hvY190eXBlX2xpc3Qu
YXBwZW5kKGJpbmRpbmcpCi0KLSAgICAgICAgdHlwZV9iaW5kaW5nID0gcmVzb2x2ZV9wYXJhbV90
eXBlKGpzb25fcGFyYW0sIGRvbWFpbl9uYW1lLCBBZEhvY1R5cGVDb250ZXh0KQotCi0gICAgICAg
IGNsYXNzIEludGVyZmFjZUZvcndhcmRMaXN0ZW5lcjoKLSAgICAgICAgICAgIEBzdGF0aWNtZXRo
b2QKLSAgICAgICAgICAgIGRlZiBhZGRfdHlwZV9kYXRhKHR5cGVfZGF0YSk6Ci0gICAgICAgICAg
ICAgICAgcGFzcwotCi0gICAgICAgIGNsYXNzIEludGVyZmFjZVJlc29sdmVDb250ZXh0OgotICAg
ICAgICAgICAgZm9yd2FyZF9saXN0ZW5lciA9IEludGVyZmFjZUZvcndhcmRMaXN0ZW5lcgotCi0g
ICAgICAgIGZvciB0eXBlIGluIGFkX2hvY190eXBlX2xpc3Q6Ci0gICAgICAgICAgICB0eXBlLnJl
c29sdmVfaW5uZXIoSW50ZXJmYWNlUmVzb2x2ZUNvbnRleHQpCi0KLSAgICAgICAgY2xhc3MgSW50
ZXJmYWNlR2VuZXJhdGVDb250ZXh0OgotICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlciA9ICJu
b3Qgc3VwcG9ydGVkIGluIEludGVyZmFjZUdlbmVyYXRlQ29udGV4dCIKLSAgICAgICAgICAgIGNw
cF93cml0ZXIgPSB2YWxpZGF0b3Jfd3JpdGVyCi0KLSAgICAgICAgZm9yIHR5cGUgaW4gYWRfaG9j
X3R5cGVfbGlzdDoKLSAgICAgICAgICAgIGdlbmVyYXRvciA9IHR5cGUuZ2V0X2NvZGVfZ2VuZXJh
dG9yKCkKLSAgICAgICAgICAgIGlmIGdlbmVyYXRvcjoKLSAgICAgICAgICAgICAgICBnZW5lcmF0
b3IuZ2VuZXJhdGVfdHlwZV9idWlsZGVyKGFkX2hvY190eXBlX3dyaXRlciwgSW50ZXJmYWNlR2Vu
ZXJhdGVDb250ZXh0KQotCi0gICAgICAgIHJldHVybiB0eXBlX2JpbmRpbmcKLQotICAgIEBzdGF0
aWNtZXRob2QKLSAgICBkZWYgcHJvY2Vzc190eXBlcyh0eXBlX21hcCk6Ci0gICAgICAgIG91dHB1
dCA9IEdlbmVyYXRvci50eXBlX2J1aWxkZXJfZnJhZ21lbnRzCi0KLSAgICAgICAgY2xhc3MgR2Vu
ZXJhdGVDb250ZXh0OgotICAgICAgICAgICAgdmFsaWRhdG9yX3dyaXRlciA9IFdyaXRlcihHZW5l
cmF0b3IudmFsaWRhdG9yX2ltcGxfbGlzdCwgIiIpCi0gICAgICAgICAgICBjcHBfd3JpdGVyID0g
V3JpdGVyKEdlbmVyYXRvci50eXBlX2J1aWxkZXJfaW1wbF9saXN0LCAiIikKLQotICAgICAgICBk
ZWYgZ2VuZXJhdGVfYWxsX2RvbWFpbnNfY29kZShvdXQsIHR5cGVfZGF0YV9jYWxsYmFjayk6Ci0g
ICAgICAgICAgICB3cml0ZXIgPSBXcml0ZXIob3V0LCAiIikKLSAgICAgICAgICAgIGZvciBkb21h
aW5fZGF0YSBpbiB0eXBlX21hcC5kb21haW5zX3RvX2dlbmVyYXRlKCk6Ci0gICAgICAgICAgICAg
ICAgZG9tYWluX2ZpeGVzID0gRG9tYWluTmFtZUZpeGVzLmdldF9maXhlZF9kYXRhKGRvbWFpbl9k
YXRhLm5hbWUoKSkKLSAgICAgICAgICAgICAgICBkb21haW5fZ3VhcmQgPSBkb21haW5fZml4ZXMu
Z2V0X2d1YXJkKCkKLQotICAgICAgICAgICAgICAgIG5hbWVzcGFjZV9kZWNsYXJlZCA9IFtdCi0K
LSAgICAgICAgICAgICAgICBkZWYgbmFtZXNwYWNlX2xhenlfZ2VuZXJhdG9yKCk6Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIG5vdCBuYW1lc3BhY2VfZGVjbGFyZWQ6Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBpZiBkb21haW5fZ3VhcmQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9t
YWluX2d1YXJkLmdlbmVyYXRlX29wZW4ob3V0KQotICAgICAgICAgICAgICAgICAgICAgICAgd3Jp
dGVyLm5ld2xpbmUoIm5hbWVzcGFjZSAiKQotICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVy
LmFwcGVuZChkb21haW5fZGF0YS5uYW1lKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICB3cml0
ZXIuYXBwZW5kKCIge1xuIikKLSAgICAgICAgICAgICAgICAgICAgICAgICMgV2hhdCBpcyBhIGJl
dHRlciB3YXkgdG8gY2hhbmdlIHZhbHVlIGZyb20gb3V0ZXIgc2NvcGU/Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBuYW1lc3BhY2VfZGVjbGFyZWQuYXBwZW5kKFRydWUpCi0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiB3cml0ZXIKLQotICAgICAgICAgICAgICAgIGZvciB0eXBlX2RhdGEgaW4g
ZG9tYWluX2RhdGEudHlwZXMoKToKLSAgICAgICAgICAgICAgICAgICAgdHlwZV9kYXRhX2NhbGxi
YWNrKHR5cGVfZGF0YSwgbmFtZXNwYWNlX2xhenlfZ2VuZXJhdG9yKQotCi0gICAgICAgICAgICAg
ICAgaWYgbmFtZXNwYWNlX2RlY2xhcmVkOgotICAgICAgICAgICAgICAgICAgICB3cml0ZXIuYXBw
ZW5kKCJ9IC8vICIpCi0gICAgICAgICAgICAgICAgICAgIHdyaXRlci5hcHBlbmQoZG9tYWluX2Rh
dGEubmFtZSgpKQotICAgICAgICAgICAgICAgICAgICB3cml0ZXIuYXBwZW5kKCJcblxuIikKLQot
ICAgICAgICAgICAgICAgICAgICBpZiBkb21haW5fZ3VhcmQ6Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBkb21haW5fZ3VhcmQuZ2VuZXJhdGVfY2xvc2Uob3V0KQotCi0gICAgICAgIGRlZiBjcmVh
dGVfdHlwZV9idWlsZGVyX2NhbGxlcihnZW5lcmF0ZV9wYXNzX2lkKToKLSAgICAgICAgICAgIGRl
ZiBjYWxsX3R5cGVfYnVpbGRlcih0eXBlX2RhdGEsIHdyaXRlcl9nZXR0ZXIpOgotICAgICAgICAg
ICAgICAgIGNvZGVfZ2VuZXJhdG9yID0gdHlwZV9kYXRhLmdldF9iaW5kaW5nKCkuZ2V0X2NvZGVf
Z2VuZXJhdG9yKCkKLSAgICAgICAgICAgICAgICBpZiBjb2RlX2dlbmVyYXRvciBhbmQgZ2VuZXJh
dGVfcGFzc19pZCA9PSBjb2RlX2dlbmVyYXRvci5nZXRfZ2VuZXJhdGVfcGFzc19pZCgpOgotICAg
ICAgICAgICAgICAgICAgICB3cml0ZXIgPSB3cml0ZXJfZ2V0dGVyKCkKLQotICAgICAgICAgICAg
ICAgICAgICBjb2RlX2dlbmVyYXRvci5nZW5lcmF0ZV90eXBlX2J1aWxkZXIod3JpdGVyLCBHZW5l
cmF0ZUNvbnRleHQpCi0gICAgICAgICAgICByZXR1cm4gY2FsbF90eXBlX2J1aWxkZXIKLQotICAg
ICAgICBnZW5lcmF0ZV9hbGxfZG9tYWluc19jb2RlKG91dHB1dCwgY3JlYXRlX3R5cGVfYnVpbGRl
cl9jYWxsZXIoVHlwZUJ1aWxkZXJQYXNzLk1BSU4pKQotCi0gICAgICAgIEdlbmVyYXRvci50eXBl
X2J1aWxkZXJfZm9yd2FyZHMuYXBwZW5kKCIvLyBGb3J3YXJkIGRlY2xhcmF0aW9ucy5cbiIpCi0K
LSAgICAgICAgZGVmIGdlbmVyYXRlX2ZvcndhcmRfY2FsbGJhY2sodHlwZV9kYXRhLCB3cml0ZXJf
Z2V0dGVyKToKLSAgICAgICAgICAgIGlmIHR5cGVfZGF0YSBpbiBnbG9iYWxfZm9yd2FyZF9saXN0
ZW5lci50eXBlX2RhdGFfc2V0OgotICAgICAgICAgICAgICAgIGJpbmRpbmcgPSB0eXBlX2RhdGEu
Z2V0X2JpbmRpbmcoKQotICAgICAgICAgICAgICAgIGJpbmRpbmcuZ2V0X2NvZGVfZ2VuZXJhdG9y
KCkuZ2VuZXJhdGVfZm9yd2FyZF9kZWNsYXJhdGlvbih3cml0ZXJfZ2V0dGVyKCkpCi0gICAgICAg
IGdlbmVyYXRlX2FsbF9kb21haW5zX2NvZGUoR2VuZXJhdG9yLnR5cGVfYnVpbGRlcl9mb3J3YXJk
cywgZ2VuZXJhdGVfZm9yd2FyZF9jYWxsYmFjaykKLQotICAgICAgICBHZW5lcmF0b3IudHlwZV9i
dWlsZGVyX2ZvcndhcmRzLmFwcGVuZCgiLy8gRW5kIG9mIGZvcndhcmQgZGVjbGFyYXRpb25zLlxu
XG4iKQotCi0gICAgICAgIEdlbmVyYXRvci50eXBlX2J1aWxkZXJfZm9yd2FyZHMuYXBwZW5kKCIv
LyBUeXBlZGVmcy5cbiIpCi0KLSAgICAgICAgZ2VuZXJhdGVfYWxsX2RvbWFpbnNfY29kZShHZW5l
cmF0b3IudHlwZV9idWlsZGVyX2ZvcndhcmRzLCBjcmVhdGVfdHlwZV9idWlsZGVyX2NhbGxlcihU
eXBlQnVpbGRlclBhc3MuVFlQRURFRikpCi0KLSAgICAgICAgR2VuZXJhdG9yLnR5cGVfYnVpbGRl
cl9mb3J3YXJkcy5hcHBlbmQoIi8vIEVuZCBvZiB0eXBlZGVmcy5cblxuIikKLQotCi1kZWYgZmxh
dHRlbl9saXN0KGlucHV0KToKLSAgICByZXMgPSBbXQotCi0gICAgZGVmIGZpbGxfcmVjdXJzaXZl
KGwpOgotICAgICAgICBmb3IgaXRlbSBpbiBsOgotICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShp
dGVtLCBsaXN0KToKLSAgICAgICAgICAgICAgICBmaWxsX3JlY3Vyc2l2ZShpdGVtKQotICAgICAg
ICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByZXMuYXBwZW5kKGl0ZW0pCi0gICAgZmlsbF9y
ZWN1cnNpdmUoaW5wdXQpCi0gICAgcmV0dXJuIHJlcwotCi0KLSMgQSB3cml0ZXIgdGhhdCBvbmx5
IHVwZGF0ZXMgZmlsZSBpZiBpdCBhY3R1YWxseSBjaGFuZ2VkIHRvIGJldHRlciBzdXBwb3J0IGlu
Y3JlbWVudGFsIGJ1aWxkLgotY2xhc3MgU21hcnRPdXRwdXQ6Ci0gICAgZGVmIF9faW5pdF9fKHNl
bGYsIGZpbGVfbmFtZSk6Ci0gICAgICAgIHNlbGYuZmlsZV9uYW1lXyA9IGZpbGVfbmFtZQotICAg
ICAgICBzZWxmLm91dHB1dF8gPSAiIgotCi0gICAgZGVmIHdyaXRlKHNlbGYsIHRleHQpOgotICAg
ICAgICBzZWxmLm91dHB1dF8gKz0gdGV4dAotCi0gICAgZGVmIGNsb3NlKHNlbGYpOgotICAgICAg
ICB0ZXh0X2NoYW5nZWQgPSBUcnVlCi0gICAgICAgIHNlbGYub3V0cHV0XyA9IHNlbGYub3V0cHV0
Xy5yc3RyaXAoKSArICJcbiIKLQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICByZWFkX2ZpbGUg
PSBvcGVuKHNlbGYuZmlsZV9uYW1lXywgInIiKQotICAgICAgICAgICAgb2xkX3RleHQgPSByZWFk
X2ZpbGUucmVhZCgpCi0gICAgICAgICAgICByZWFkX2ZpbGUuY2xvc2UoKQotICAgICAgICAgICAg
dGV4dF9jaGFuZ2VkID0gb2xkX3RleHQgIT0gc2VsZi5vdXRwdXRfCi0gICAgICAgIGV4Y2VwdDoK
LSAgICAgICAgICAgICMgSWdub3JlLCBqdXN0IG92ZXJ3cml0ZSBieSBkZWZhdWx0Ci0gICAgICAg
ICAgICBwYXNzCi0KLSAgICAgICAgaWYgdGV4dF9jaGFuZ2VkIG9yIHdyaXRlX2Fsd2F5czoKLSAg
ICAgICAgICAgIG91dF9maWxlID0gb3BlbihzZWxmLmZpbGVfbmFtZV8sICJ3IikKLSAgICAgICAg
ICAgIG91dF9maWxlLndyaXRlKHNlbGYub3V0cHV0XykKLSAgICAgICAgICAgIG91dF9maWxlLmNs
b3NlKCkKLQotCi1HZW5lcmF0b3IuZ28oKQotCi1vdXRwdXRfZmlsZV9uYW1lX3ByZWZpeCA9IElO
U1BFQ1RPUl9UWVBFU19HRU5FUkFUT1JfQ09ORklHX01BUFtvdXRwdXRfdHlwZV1bInByZWZpeCJd
Ci0KLWJhY2tlbmRfaF9maWxlID0gU21hcnRPdXRwdXQob3V0cHV0X2hlYWRlcl9kaXJuYW1lICsg
KCIvSW5zcGVjdG9yJXNCYWNrZW5kRGlzcGF0Y2hlcnMuaCIgJSBvdXRwdXRfZmlsZV9uYW1lX3By
ZWZpeCkpCi1iYWNrZW5kX2NwcF9maWxlID0gU21hcnRPdXRwdXQob3V0cHV0X2NwcF9kaXJuYW1l
ICsgKCIvSW5zcGVjdG9yJXNCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwIiAlIG91dHB1dF9maWxlX25h
bWVfcHJlZml4KSkKLQotZnJvbnRlbmRfaF9maWxlID0gU21hcnRPdXRwdXQob3V0cHV0X2hlYWRl
cl9kaXJuYW1lICsgKCIvSW5zcGVjdG9yJXNGcm9udGVuZERpc3BhdGNoZXJzLmgiICUgb3V0cHV0
X2ZpbGVfbmFtZV9wcmVmaXgpKQotZnJvbnRlbmRfY3BwX2ZpbGUgPSBTbWFydE91dHB1dChvdXRw
dXRfY3BwX2Rpcm5hbWUgKyAoIi9JbnNwZWN0b3Ilc0Zyb250ZW5kRGlzcGF0Y2hlcnMuY3BwIiAl
IG91dHB1dF9maWxlX25hbWVfcHJlZml4KSkKLQotdHlwZWJ1aWxkZXJfaF9maWxlID0gU21hcnRP
dXRwdXQob3V0cHV0X2hlYWRlcl9kaXJuYW1lICsgKCIvSW5zcGVjdG9yJXNUeXBlQnVpbGRlcnMu
aCIgJSBvdXRwdXRfZmlsZV9uYW1lX3ByZWZpeCkpCi10eXBlYnVpbGRlcl9jcHBfZmlsZSA9IFNt
YXJ0T3V0cHV0KG91dHB1dF9jcHBfZGlybmFtZSArICgiL0luc3BlY3RvciVzVHlwZUJ1aWxkZXJz
LmNwcCIgJSBvdXRwdXRfZmlsZV9uYW1lX3ByZWZpeCkpCi0KLWJhY2tlbmRfanNfZmlsZSA9IFNt
YXJ0T3V0cHV0KG91dHB1dF9qc19kaXJuYW1lICsgKCIvSW5zcGVjdG9yJXNCYWNrZW5kQ29tbWFu
ZHMuanMiICUgb3V0cHV0X2ZpbGVfbmFtZV9wcmVmaXgpKQotCi0KLWJhY2tlbmRfaF9maWxlLndy
aXRlKFRlbXBsYXRlcy5iYWNrZW5kX2guc3Vic3RpdHV0ZShOb25lLAotICAgIG91dHB1dEZpbGVO
YW1lUHJlZml4PW91dHB1dF9maWxlX25hbWVfcHJlZml4LAotICAgIGhhbmRsZXJJbnRlcmZhY2Vz
PSIiLmpvaW4oZmxhdHRlbl9saXN0KEdlbmVyYXRvci5iYWNrZW5kX2hhbmRsZXJfaW50ZXJmYWNl
X2xpc3QpKSwKLSAgICBkaXNwYXRjaGVySW50ZXJmYWNlcz0iIi5qb2luKGZsYXR0ZW5fbGlzdChH
ZW5lcmF0b3IuYmFja2VuZF9kaXNwYXRjaGVyX2ludGVyZmFjZV9saXN0KSkpKQotCi1iYWNrZW5k
X2NwcF9maWxlLndyaXRlKFRlbXBsYXRlcy5iYWNrZW5kX2NwcC5zdWJzdGl0dXRlKE5vbmUsCi0g
ICAgb3V0cHV0RmlsZU5hbWVQcmVmaXg9b3V0cHV0X2ZpbGVfbmFtZV9wcmVmaXgsCi0gICAgaGFu
ZGxlckltcGxlbWVudGF0aW9ucz0iIi5qb2luKGZsYXR0ZW5fbGlzdChHZW5lcmF0b3IuYmFja2Vu
ZF9oYW5kbGVyX2ltcGxlbWVudGF0aW9uX2xpc3QpKSwKLSAgICBtZXRob2RzPSJcbiIuam9pbihH
ZW5lcmF0b3IuYmFja2VuZF9tZXRob2RfaW1wbGVtZW50YXRpb25fbGlzdCkpKQotCi1mcm9udGVu
ZF9oX2ZpbGUud3JpdGUoVGVtcGxhdGVzLmZyb250ZW5kX2guc3Vic3RpdHV0ZShOb25lLAotICAg
IG91dHB1dEZpbGVOYW1lUHJlZml4PW91dHB1dF9maWxlX25hbWVfcHJlZml4LAotICAgIGRvbWFp
bkNsYXNzTGlzdD0iIi5qb2luKEdlbmVyYXRvci5mcm9udGVuZF9kb21haW5fY2xhc3NfbGluZXMp
KSkKLQotZnJvbnRlbmRfY3BwX2ZpbGUud3JpdGUoVGVtcGxhdGVzLmZyb250ZW5kX2NwcC5zdWJz
dGl0dXRlKE5vbmUsCi0gICAgb3V0cHV0RmlsZU5hbWVQcmVmaXg9b3V0cHV0X2ZpbGVfbmFtZV9w
cmVmaXgsCi0gICAgbWV0aG9kcz0iXG4iLmpvaW4oR2VuZXJhdG9yLmZyb250ZW5kX21ldGhvZF9s
aXN0KSkpCi0KLXR5cGVidWlsZGVyX2hfZmlsZS53cml0ZShUZW1wbGF0ZXMudHlwZWJ1aWxkZXJf
aC5zdWJzdGl0dXRlKE5vbmUsCi0gICAgb3V0cHV0RmlsZU5hbWVQcmVmaXg9b3V0cHV0X2ZpbGVf
bmFtZV9wcmVmaXgsCi0gICAgdHlwZUJ1aWxkZXJEZXBlbmRlbmNpZXM9SU5TUEVDVE9SX1RZUEVT
X0dFTkVSQVRPUl9DT05GSUdfTUFQW291dHB1dF90eXBlXVsidHlwZWJ1aWxkZXJfZGVwZW5kZW5j
eSJdLAotICAgIGV4cG9ydE1hY3JvPUlOU1BFQ1RPUl9UWVBFU19HRU5FUkFUT1JfQ09ORklHX01B
UFtvdXRwdXRfdHlwZV1bImV4cG9ydF9tYWNybyJdLAotICAgIHR5cGVCdWlsZGVycz0iIi5qb2lu
KGZsYXR0ZW5fbGlzdChHZW5lcmF0b3IudHlwZV9idWlsZGVyX2ZyYWdtZW50cykpLAotICAgIGZv
cndhcmRzPSIiLmpvaW4oR2VuZXJhdG9yLnR5cGVfYnVpbGRlcl9mb3J3YXJkcyksCi0gICAgdmFs
aWRhdG9ySWZkZWZOYW1lPVZBTElEQVRPUl9JRkRFRl9OQU1FKSkKLQotdHlwZWJ1aWxkZXJfY3Bw
X2ZpbGUud3JpdGUoVGVtcGxhdGVzLnR5cGVidWlsZGVyX2NwcC5zdWJzdGl0dXRlKE5vbmUsCi0g
ICAgb3V0cHV0RmlsZU5hbWVQcmVmaXg9b3V0cHV0X2ZpbGVfbmFtZV9wcmVmaXgsCi0gICAgZW51
bUNvbnN0YW50VmFsdWVzPUVudW1Db25zdGFudHMuZ2V0X2VudW1fY29uc3RhbnRfY29kZSgpLAot
ICAgIGltcGxDb2RlPSIiLmpvaW4oZmxhdHRlbl9saXN0KEdlbmVyYXRvci50eXBlX2J1aWxkZXJf
aW1wbF9saXN0KSksCi0gICAgdmFsaWRhdG9yQ29kZT0iIi5qb2luKGZsYXR0ZW5fbGlzdChHZW5l
cmF0b3IudmFsaWRhdG9yX2ltcGxfbGlzdCkpLAotICAgIHZhbGlkYXRvcklmZGVmTmFtZT1WQUxJ
REFUT1JfSUZERUZfTkFNRSkpCi0KLWJhY2tlbmRfanNfZmlsZS53cml0ZShUZW1wbGF0ZXMuYmFj
a2VuZF9qcy5zdWJzdGl0dXRlKE5vbmUsCi0gICAgZG9tYWluSW5pdGlhbGl6ZXJzPSIiLmpvaW4o
R2VuZXJhdG9yLmJhY2tlbmRfanNfZG9tYWluX2luaXRpYWxpemVyX2xpc3QpKSkKLQotYmFja2Vu
ZF9oX2ZpbGUuY2xvc2UoKQotYmFja2VuZF9jcHBfZmlsZS5jbG9zZSgpCi0KLWZyb250ZW5kX2hf
ZmlsZS5jbG9zZSgpCi1mcm9udGVuZF9jcHBfZmlsZS5jbG9zZSgpCi0KLXR5cGVidWlsZGVyX2hf
ZmlsZS5jbG9zZSgpCi10eXBlYnVpbGRlcl9jcHBfZmlsZS5jbG9zZSgpCi0KLWJhY2tlbmRfanNf
ZmlsZS5jbG9zZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvQ29kZUdlbmVyYXRvckluc3BlY3RvclN0cmluZ3MucHkgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvQ29kZUdlbmVyYXRvckluc3BlY3RvclN0cmluZ3Mu
cHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3NjM3NDQxNjBiODRmZmQyYzM3NzU5
YTQzZGJkMzNkZjAxNDVhNDQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL0NvZGVHZW5l
cmF0b3JJbnNwZWN0b3JTdHJpbmdzLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMzQ4ICswLDAgQEAK
LSMgQ29weXJpZ2h0IChjKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0j
IENvcHlyaWdodCAoYykgMjAxMyBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jCi0j
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0jIG1ldDoKLSMKLSMgICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCi0jIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotIyBkaXN0cmlidXRpb24uCi0j
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKLSMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KLSMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotIyAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotIyBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKLSMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0jIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSMgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCi0jIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0jIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
IyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotCi0jIFRoaXMgZmlsZSBjb250YWlucyBzdHJpbmcgcmVzb3VyY2VzIGZv
ciBDb2RlR2VuZXJhdG9ySW5zcGVjdG9yLgotIyBJdHMgc3ludGF4IGlzIGEgUHl0aG9uIHN5bnRh
eCBzdWJzZXQsIHN1aXRhYmxlIGZvciBtYW51YWwgcGFyc2luZy4KLQotZnJvbnRlbmRfZG9tYWlu
X2NsYXNzID0gKAotIiIiY2xhc3MgJHtleHBvcnRNYWNyb30gJHtkb21haW5DbGFzc05hbWV9IHsK
LXB1YmxpYzoKLSAgICAke2RvbWFpbkNsYXNzTmFtZX0oSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
KiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIDogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwo
aW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IH0KLSR7ZnJvbnRlbmREb21haW5NZXRob2REZWNs
YXJhdGlvbnN9cHJpdmF0ZToKLSAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIG1faW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsOwotfTsKLQotIiIiKQotCi1iYWNrZW5kX2Rpc3BhdGNoZXJfY29u
c3RydWN0b3IgPSAoCi0iIiJQYXNzUmVmUHRyPCR7ZGlzcGF0Y2hlck5hbWV9PiAke2Rpc3BhdGNo
ZXJOYW1lfTo6Y3JlYXRlKEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0
Y2hlciwgJHthZ2VudE5hbWV9KiBhZ2VudCkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3ICR7
ZGlzcGF0Y2hlck5hbWV9KGJhY2tlbmREaXNwYXRjaGVyLCBhZ2VudCkpOwotfQotCi0ke2Rpc3Bh
dGNoZXJOYW1lfTo6JHtkaXNwYXRjaGVyTmFtZX0oSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIq
IGJhY2tlbmREaXNwYXRjaGVyLCAke2FnZW50TmFtZX0qIGFnZW50KQotICAgIDogSW5zcGVjdG9y
U3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIpCi0gICAgLCBt
X2FnZW50KGFnZW50KQotewotICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0
Y2hlckZvckRvbWFpbihBU0NJSUxpdGVyYWwoIiR7ZG9tYWluTmFtZX0iKSwgdGhpcyk7Ci19Ci0i
IiIpCi0KLWJhY2tlbmRfZGlzcGF0Y2hlcl9kaXNwYXRjaF9tZXRob2Rfc2ltcGxlID0gKAotIiIi
dm9pZCAke2Rpc3BhdGNoZXJOYW1lfTo6ZGlzcGF0Y2gobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmlu
ZyYgbWV0aG9kLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbWVzc2FnZSkKLXsKLSAgICBS
ZWY8JHtkaXNwYXRjaGVyTmFtZX0+IHByb3RlY3QoKnRoaXMpOwotCi0ke2lmQ2hhaW59Ci0gICAg
ZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKCZj
YWxsSWQsIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgU3RyaW5n
KCInIikgKyAiJHtkb21haW5OYW1lfSIgKyAnLicgKyBtZXRob2QgKyAiJyB3YXMgbm90IGZvdW5k
Iik7Ci19Ci0iIiIpCi0KLWJhY2tlbmRfZGlzcGF0Y2hlcl9kaXNwYXRjaF9tZXRob2QgPSAoCi0i
IiJ2b2lkICR7ZGlzcGF0Y2hlck5hbWV9OjpkaXNwYXRjaChsb25nIGNhbGxJZCwgY29uc3QgU3Ry
aW5nJiBtZXRob2QsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtZXNzYWdlKQotewotICAg
IFJlZjwke2Rpc3BhdGNoZXJOYW1lfT4gcHJvdGVjdCgqdGhpcyk7Ci0KLSAgICB0eXBlZGVmIHZv
aWQgKCR7ZGlzcGF0Y2hlck5hbWV9OjoqQ2FsbEhhbmRsZXIpKGxvbmcgY2FsbElkLCBjb25zdCBJ
bnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7Ci0gICAgdHlwZWRlZiBIYXNoTWFw
PFN0cmluZywgQ2FsbEhhbmRsZXI+IERpc3BhdGNoTWFwOwotICAgIERFUFJFQ0FURURfREVGSU5F
X1NUQVRJQ19MT0NBTChEaXNwYXRjaE1hcCwgZGlzcGF0Y2hNYXAsICgpKTsKLSAgICBpZiAoZGlz
cGF0Y2hNYXAuaXNFbXB0eSgpKSB7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBzdHJ1Y3QgTWV0aG9k
VGFibGUgewotICAgICAgICAgICAgY29uc3QgY2hhciogbmFtZTsKLSAgICAgICAgICAgIENhbGxI
YW5kbGVyIGhhbmRsZXI7Ci0gICAgICAgIH0gY29tbWFuZHNbXSA9IHsKLSR7ZGlzcGF0Y2hlckNv
bW1hbmRzfQotICAgICAgICB9OwotICAgICAgICBzaXplX3QgbGVuZ3RoID0gV1RGX0FSUkFZX0xF
TkdUSChjb21tYW5kcyk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyAr
K2kpCi0gICAgICAgICAgICBkaXNwYXRjaE1hcC5hZGQoY29tbWFuZHNbaV0ubmFtZSwgY29tbWFu
ZHNbaV0uaGFuZGxlcik7Ci0gICAgfQotCi0gICAgSGFzaE1hcDxTdHJpbmcsIENhbGxIYW5kbGVy
Pjo6aXRlcmF0b3IgaXQgPSBkaXNwYXRjaE1hcC5maW5kKG1ldGhvZCk7Ci0gICAgaWYgKGl0ID09
IGRpc3BhdGNoTWFwLmVuZCgpKSB7Ci0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9y
dFByb3RvY29sRXJyb3IoJmNhbGxJZCwgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhv
ZE5vdEZvdW5kLCBTdHJpbmcoIiciKSArICIke2RvbWFpbk5hbWV9IiArICcuJyArIG1ldGhvZCAr
ICInIHdhcyBub3QgZm91bmQiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgICgoKnRo
aXMpLippdC0+dmFsdWUpKGNhbGxJZCwgKm1lc3NhZ2UuZ2V0KCkpOwotfQotIiIiKQotCi1iYWNr
ZW5kX21ldGhvZCA9ICgKLSIiInZvaWQgJHtkaXNwYXRjaGVyTmFtZX06OiR7bWV0aG9kTmFtZX0o
bG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYke3JlcXVlc3RNZXNzYWdlT2JqZWN0
fSkKLXsKLSR7bWV0aG9kSW5QYXJhbWV0ZXJzSGFuZGxpbmd9JHttZXRob2REaXNwYXRjaEhhbmRs
aW5nfSR7bWV0aG9kT3V0UGFyYW1ldGVyc0hhbmRsaW5nfSR7bWV0aG9kRW5kaW5nSGFuZGxpbmd9
Ci19Ci0iIiIpCi0KLWZyb250ZW5kX21ldGhvZCA9ICgiIiJ2b2lkIEluc3BlY3RvciR7ZG9tYWlu
TmFtZX1Gcm9udGVuZERpc3BhdGNoZXI6OiR7ZXZlbnROYW1lfSgke3BhcmFtZXRlcnN9KQotewot
ICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGpzb25NZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0
OjpjcmVhdGUoKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgibWV0
aG9kIiksIEFTQ0lJTGl0ZXJhbCgiJHtkb21haW5OYW1lfS4ke2V2ZW50TmFtZX0iKSk7Ci0ke2Nv
ZGV9Ci0gICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVu
ZChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwotfQotIiIiKQotCi1jYWxsYmFja19tZXRo
b2QgPSAoCi0iIiIke2hhbmRsZXJOYW1lfTo6JHtjYWxsYmFja05hbWV9Ojoke2NhbGxiYWNrTmFt
ZX0oUGFzc1JlZlB0cjxJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4gYmFja2VuZERpc3BhdGNo
ZXIsIGludCBpZCkgOiBJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpDYWxs
YmFja0Jhc2UoYmFja2VuZERpc3BhdGNoZXIsIGlkKSB7IH0KLQotdm9pZCAke2hhbmRsZXJOYW1l
fTo6JHtjYWxsYmFja05hbWV9OjpzZW5kU3VjY2Vzcygke3BhcmFtZXRlcnN9KQotewotICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGpzb25NZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsKLSR7Y29kZX0gICAgc2VuZElmQWN0aXZlKGpzb25NZXNzYWdlLCBFcnJvclN0cmluZygp
KTsKLX0KLSIiIikKLQotZnJvbnRlbmRfaCA9ICgKLSIiIiNpZm5kZWYgSW5zcGVjdG9yJHtvdXRw
dXRGaWxlTmFtZVByZWZpeH1Gcm9udGVuZERpc3BhdGNoZXJzX2gKLSNkZWZpbmUgSW5zcGVjdG9y
JHtvdXRwdXRGaWxlTmFtZVByZWZpeH1Gcm9udGVuZERpc3BhdGNoZXJzX2gKLQotI2luY2x1ZGUg
Ikluc3BlY3RvciR7b3V0cHV0RmlsZU5hbWVQcmVmaXh9VHlwZUJ1aWxkZXJzLmgiCi0jaW5jbHVk
ZSA8aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oPgotI2luY2x1ZGUgPGluc3Bl
Y3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5zcGVjdG9yIHsKLQot
I2lmIEVOQUJMRShJTlNQRUNUT1IpCi0KLSR7ZG9tYWluQ2xhc3NMaXN0fQotCi0jZW5kaWYgLy8g
RU5BQkxFKElOU1BFQ1RPUikKLQotfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCi0KLSNlbmRpZiAv
LyAhZGVmaW5lZChJbnNwZWN0b3Ike291dHB1dEZpbGVOYW1lUHJlZml4fUZyb250ZW5kRGlzcGF0
Y2hlcnNfaCkKLSIiIikKLQotYmFja2VuZF9oID0gKAotIiIiI2lmbmRlZiBJbnNwZWN0b3Ike291
dHB1dEZpbGVOYW1lUHJlZml4fUJhY2tlbmREaXNwYXRjaGVyc19oCi0jZGVmaW5lIEluc3BlY3Rv
ciR7b3V0cHV0RmlsZU5hbWVQcmVmaXh9QmFja2VuZERpc3BhdGNoZXJzX2gKLQotI2lmIEVOQUJM
RShJTlNQRUNUT1IpCi0KLSNpbmNsdWRlICJJbnNwZWN0b3Ike291dHB1dEZpbGVOYW1lUHJlZml4
fVR5cGVCdWlsZGVycy5oIgotI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlci5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0b3IgewotCi10eXBlZGVmIFN0cmlu
ZyBFcnJvclN0cmluZzsKLQotJHtoYW5kbGVySW50ZXJmYWNlc30KLQotJHtkaXNwYXRjaGVySW50
ZXJmYWNlc30KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jZW5kaWYgLy8gRU5BQkxFKElO
U1BFQ1RPUikKLQotI2VuZGlmIC8vICFkZWZpbmVkKEluc3BlY3RvciR7b3V0cHV0RmlsZU5hbWVQ
cmVmaXh9QmFja2VuZERpc3BhdGNoZXJzX2gpCi0iIiIpCi0KLWJhY2tlbmRfY3BwID0gKAotIiIi
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SKQotCi0jaW5jbHVk
ZSAiSW5zcGVjdG9yJHtvdXRwdXRGaWxlTmFtZVByZWZpeH1CYWNrZW5kRGlzcGF0Y2hlcnMuaCIK
LQotI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4KLSNpbmNs
dWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgSW5z
cGVjdG9yIHsKLQotJHtoYW5kbGVySW1wbGVtZW50YXRpb25zfQotCi0ke21ldGhvZHN9Ci19IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKLQotI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCi0iIiIp
Ci0KLWZyb250ZW5kX2NwcCA9ICgKLSIiIgotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBF
TkFCTEUoSU5TUEVDVE9SKQotCi0jaW5jbHVkZSAiSW5zcGVjdG9yJHtvdXRwdXRGaWxlTmFtZVBy
ZWZpeH1Gcm9udGVuZERpc3BhdGNoZXJzLmgiCi0KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5n
Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJbnNwZWN0
b3IgewotCi0ke21ldGhvZHN9Ci0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jZW5kaWYg
Ly8gRU5BQkxFKElOU1BFQ1RPUikKLSIiIikKLQotdHlwZWJ1aWxkZXJfaCA9ICgKLSIiIgotI2lm
bmRlZiBJbnNwZWN0b3Ike291dHB1dEZpbGVOYW1lUHJlZml4fVR5cGVCdWlsZGVyc19oCi0jZGVm
aW5lIEluc3BlY3RvciR7b3V0cHV0RmlsZU5hbWVQcmVmaXh9VHlwZUJ1aWxkZXJzX2gKLQotI2lm
IEVOQUJMRShJTlNQRUNUT1IpCi0KLSNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVHlwZUJ1
aWxkZXIuaD4KLSR7dHlwZUJ1aWxkZXJEZXBlbmRlbmNpZXN9Ci0jaW5jbHVkZSA8d3RmL0Fzc2Vy
dGlvbnMuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotCi1uYW1lc3BhY2UgSW5zcGVj
dG9yIHsKLQotbmFtZXNwYWNlIFR5cGVCdWlsZGVyIHsKLQotJHtmb3J3YXJkc30KLQotJHtleHBv
cnRNYWNyb30gU3RyaW5nIGdldCR7b3V0cHV0RmlsZU5hbWVQcmVmaXh9RW51bUNvbnN0YW50VmFs
dWUoaW50IGNvZGUpOwotCi0ke3R5cGVCdWlsZGVyc30KLX0gLy8gbmFtZXNwYWNlIFR5cGVCdWls
ZGVyCi0KLX0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jZW5kaWYgLy8gRU5BQkxFKElOU1BF
Q1RPUikKLQotI2VuZGlmIC8vICFkZWZpbmVkKEluc3BlY3RvciR7b3V0cHV0RmlsZU5hbWVQcmVm
aXh9VHlwZUJ1aWxkZXJzX2gpCi0KLSIiIikKLQotdHlwZWJ1aWxkZXJfY3BwID0gKAotIiIiCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJbnNwZWN0b3Ike291dHB1dEZpbGVOYW1l
UHJlZml4fVR5cGVCdWlsZGVycy5oIgotCi0jaWYgRU5BQkxFKElOU1BFQ1RPUikKLQotI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIEluc3BlY3RvciB7Ci0KLW5hbWVz
cGFjZSBUeXBlQnVpbGRlciB7Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBlbnVtX2NvbnN0
YW50X3ZhbHVlc1tdID0gewotJHtlbnVtQ29uc3RhbnRWYWx1ZXN9fTsKLQotU3RyaW5nIGdldCR7
b3V0cHV0RmlsZU5hbWVQcmVmaXh9RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpIHsKLSAgICBy
ZXR1cm4gZW51bV9jb25zdGFudF92YWx1ZXNbY29kZV07Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFR5
cGVCdWlsZGVyCi0KLSR7aW1wbENvZGV9Ci0KLSNpZiAke3ZhbGlkYXRvcklmZGVmTmFtZX0KLQot
JHt2YWxpZGF0b3JDb2RlfQotCi0jZW5kaWYgLy8gJHt2YWxpZGF0b3JJZmRlZk5hbWV9Ci0KLX0g
Ly8gbmFtZXNwYWNlIEluc3BlY3RvcgotCi0jZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKLSIi
IikKLQotYmFja2VuZF9qcyA9ICgKLSIiIgotCi0ke2RvbWFpbkluaXRpYWxpemVyc30KLSIiIikK
LQotcGFyYW1fY29udGFpbmVyX2FjY2Vzc19jb2RlID0gIiIiCi0gICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gbWVzc2FnZS5nZXRPYmplY3QoInBhcmFtcyIpOwot
ICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVy
LmdldCgpOwotICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29s
RXJyb3JzLmdldCgpOwotIiIiCi0KLWNsYXNzX2JpbmRpbmdfYnVpbGRlcl9wYXJ0XzEgPSAoCi0i
IiIgICAgICAgIEFsbEZpZWxkc1NldCA9ICVzCi0gICAgfTsKLQotICAgIHRlbXBsYXRlPGludCBT
VEFURT4KLSAgICBjbGFzcyBCdWlsZGVyIHsKLSAgICBwcml2YXRlOgotICAgICAgICBSZWZQdHI8
SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwotCi0gICAgICAgIHRlbXBsYXRl
PGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RF
UD4qPih0aGlzKTsKLSAgICAgICAgfQotCi0gICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjwvKiVz
Ki9JbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gcHRyKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2lu
X25vbl9pbml0X3N0YXRlKTsKLSAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwotICAgICAgICB9
Ci0gICAgICAgIGZyaWVuZCBjbGFzcyAlczsKLSAgICBwdWJsaWM6Ci0iIiIpCi0KLWNsYXNzX2Jp
bmRpbmdfYnVpbGRlcl9wYXJ0XzIgPSAoIiIiCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCAlcz4m
IHNldCVzKCVzIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVCgh
KFNUQVRFICYgJXMpLCBwcm9wZXJ0eV8lc19hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jl
c3VsdC0+c2V0JXMoQVNDSUlMaXRlcmFsKCIlcyIpLCAlcyk7Ci0gICAgICAgICAgICByZXR1cm4g
Y2FzdFN0YXRlPCVzPigpOwotICAgICAgICB9Ci0iIiIpCi0KLWNsYXNzX2JpbmRpbmdfYnVpbGRl
cl9wYXJ0XzMgPSAoIiIiCi0gICAgICAgIG9wZXJhdG9yIFJlZlB0cjwlcz4mICgpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVz
dWx0X2lzX25vdF9yZWFkeSk7Ci0gICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoJXMp
ID09IHNpemVvZihJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCksIGNhbm5vdF9jYXN0KTsKLSAg
ICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8JXM+Kj4oJm1fcmVzdWx0
KTsKLSAgICAgICAgfQotCi0gICAgICAgIFBhc3NSZWZQdHI8JXM+IHJlbGVhc2UoKQotICAgICAg
ICB7Ci0gICAgICAgICAgICByZXR1cm4gUmVmUHRyPCVzPigqdGhpcykucmVsZWFzZSgpOwotICAg
ICAgICB9Ci0gICAgfTsKLQotIiIiKQotCi1jbGFzc19iaW5kaW5nX2J1aWxkZXJfcGFydF80ID0g
KAotIiIiICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEluc3BlY3Rvcjo6SW5zcGVjdG9yT2Jq
ZWN0OjpjcmVhdGUoKSk7Ci0gICAgfQotIiIiKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vX19pbml0X18ucHkgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9fX2luaXRfXy5weQpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4wYjc2MTE4Y2U1ZWUyOWY4NGNkNTUwZTk4NDIxODBhNGViMzQ5NzNhCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4v
X19pbml0X18ucHkKQEAgLTAsMCArMSwxMiBAQAorIyBSZXF1aXJlZCBmb3IgUHl0aG9uIHRvIHNl
YXJjaCB0aGlzIGRpcmVjdG9yeSBmb3IgbW9kdWxlIGZpbGVzCisKK2Zyb20gbW9kZWxzIGltcG9y
dCAqCitmcm9tIGdlbmVyYXRvciBpbXBvcnQgKgorCitmcm9tIGdlbmVyYXRlX2JhY2tlbmRfY29t
bWFuZHMgaW1wb3J0ICoKK2Zyb20gZ2VuZXJhdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlciBp
bXBvcnQgKgorZnJvbSBnZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24g
aW1wb3J0ICoKK2Zyb20gZ2VuZXJhdGVfZnJvbnRlbmRfZGlzcGF0Y2hlcl9oZWFkZXIgaW1wb3J0
ICoKK2Zyb20gZ2VuZXJhdGVfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbiBpbXBv
cnQgKgorZnJvbSBnZW5lcmF0ZV90eXBlX2J1aWxkZXJfaGVhZGVyIGltcG9ydCAqCitmcm9tIGdl
bmVyYXRlX3R5cGVfYnVpbGRlcl9pbXBsZW1lbnRhdGlvbiBpbXBvcnQgKgpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVf
YmFja2VuZF9jb21tYW5kcy5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2JhY2tlbmRfY29tbWFuZHMucHkKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGE4
MDVmM2ZhMDM2MTNlNTljOWQ3N2RjNjY4MTc1OTViMmE0NWI4NwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRl
X2JhY2tlbmRfY29tbWFuZHMucHkKQEAgLTAsMCArMSwxMTcgQEAKKyMhL3Vzci9iaW4vZW52IHB5
dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorIyBDb3B5cmlnaHQgKGMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6
CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
IyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisjIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KworCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IHN0cmluZworZnJvbSBzdHJpbmcgaW1wb3J0IFRl
bXBsYXRlCisKK2Zyb20gZ2VuZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IsIHVjZmlyc3QKK2Zyb20g
Z2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgR2VuZXJhdG9yVGVtcGxhdGVzIGFzIFRlbXBsYXRl
cworZnJvbSBtb2RlbHMgaW1wb3J0IEVudW1UeXBlCisKK2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2Vy
KCdnbG9iYWwnKQorCisKK2NsYXNzIEJhY2tlbmRDb21tYW5kc0dlbmVyYXRvcihHZW5lcmF0b3Ip
OgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpOgorICAgICAg
ICBHZW5lcmF0b3IuX19pbml0X18oc2VsZiwgbW9kZWwsIGlucHV0X2ZpbGVwYXRoKQorCisgICAg
ZGVmIG91dHB1dF9maWxlbmFtZShzZWxmKToKKyAgICAgICAgcmV0dXJuICJJbnNwZWN0b3Ilc0Jh
Y2tlbmRDb21tYW5kcy5qcyIgJSBzZWxmLm1vZGVsKCkuZnJhbWV3b3JrLnNldHRpbmcoJ3ByZWZp
eCcpCisKKyAgICBkZWYgZG9tYWluc190b19nZW5lcmF0ZShzZWxmKToKKyAgICAgICAgZGVmIHNo
b3VsZF9nZW5lcmF0ZV9kb21haW4oZG9tYWluKToKKyAgICAgICAgICAgIGRvbWFpbl9lbnVtX3R5
cGVzID0gZmlsdGVyKGxhbWJkYSBkZWNsYXJhdGlvbjogaXNpbnN0YW5jZShkZWNsYXJhdGlvbi50
eXBlLCBFbnVtVHlwZSksIGRvbWFpbi50eXBlX2RlY2xhcmF0aW9ucykKKyAgICAgICAgICAgIHJl
dHVybiBsZW4oZG9tYWluLmNvbW1hbmRzKSA+IDAgb3IgbGVuKGRvbWFpbi5ldmVudHMpID4gMCBv
ciBsZW4oZG9tYWluX2VudW1fdHlwZXMpID4gMAorCisgICAgICAgIHJldHVybiBmaWx0ZXIoc2hv
dWxkX2dlbmVyYXRlX2RvbWFpbiwgR2VuZXJhdG9yLmRvbWFpbnNfdG9fZ2VuZXJhdGUoc2VsZikp
CisKKyAgICBkZWYgZ2VuZXJhdGVfb3V0cHV0KHNlbGYpOgorICAgICAgICBzZWN0aW9ucyA9IFtd
CisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLmdlbmVyYXRlX2xpY2Vuc2UoKSkKKyAgICAg
ICAgc2VjdGlvbnMuZXh0ZW5kKG1hcChzZWxmLmdlbmVyYXRlX2RvbWFpbiwgc2VsZi5kb21haW5z
X3RvX2dlbmVyYXRlKCkpKQorICAgICAgICByZXR1cm4gIlxuXG4iLmpvaW4oc2VjdGlvbnMpCisK
KyAgICBkZWYgZ2VuZXJhdGVfZG9tYWluKHNlbGYsIGRvbWFpbik6CisgICAgICAgIGxpbmVzID0g
W10KKyAgICAgICAgYXJncyA9IHsKKyAgICAgICAgICAgICdkb21haW4nOiBkb21haW4uZG9tYWlu
X25hbWUKKyAgICAgICAgfQorCisgICAgICAgIGxpbmVzLmFwcGVuZCgnLy8gJShkb21haW4pcy4n
ICUgYXJncykKKworICAgICAgICBoYXNfYXN5bmNfY29tbWFuZHMgPSBhbnkobWFwKGxhbWJkYSBj
b21tYW5kOiBjb21tYW5kLmlzX2FzeW5jLCBkb21haW4uY29tbWFuZHMpKQorICAgICAgICBpZiBs
ZW4oZG9tYWluLmV2ZW50cykgPiAwIG9yIGhhc19hc3luY19jb21tYW5kczoKKyAgICAgICAgICAg
IGxpbmVzLmFwcGVuZCgnSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlciUoZG9tYWluKXNEaXNwYXRj
aGVyID0gSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbkRpc3BhdGNoZXIuYmluZChJbnNw
ZWN0b3JCYWNrZW5kLCAiJShkb21haW4pcyIpOycgJSBhcmdzKQorCisgICAgICAgIGZvciBkZWNs
YXJhdGlvbiBpbiBkb21haW4udHlwZV9kZWNsYXJhdGlvbnM6CisgICAgICAgICAgICBpZiBkZWNs
YXJhdGlvbi50eXBlLmlzX2VudW0oKToKKyAgICAgICAgICAgICAgICBlbnVtX2FyZ3MgPSB7Cisg
ICAgICAgICAgICAgICAgICAgICdkb21haW4nOiBkb21haW4uZG9tYWluX25hbWUsCisgICAgICAg
ICAgICAgICAgICAgICdlbnVtTmFtZSc6IGRlY2xhcmF0aW9uLnR5cGVfbmFtZSwKKyAgICAgICAg
ICAgICAgICAgICAgJ2VudW1NYXAnOiAiLCAiLmpvaW4oWyclczogIiVzIicgJSAoR2VuZXJhdG9y
LnN0eWxpemVkX25hbWVfZm9yX2VudW1fdmFsdWUoZW51bV92YWx1ZSksIGVudW1fdmFsdWUpIGZv
ciBlbnVtX3ZhbHVlIGluIGRlY2xhcmF0aW9uLnR5cGUuZW51bV92YWx1ZXMoKV0pCisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnSW5zcGVjdG9yQmFja2Vu
ZC5yZWdpc3RlckVudW0oIiUoZG9tYWluKXMuJShlbnVtTmFtZSlzIiwgeyUoZW51bU1hcClzfSk7
JyAlIGVudW1fYXJncykKKworICAgICAgICAgICAgZGVmIGlzX2Fub255bW91c19lbnVtX21lbWJl
cih0eXBlX21lbWJlcik6CisgICAgICAgICAgICAgICAgcmV0dXJuIGlzaW5zdGFuY2UodHlwZV9t
ZW1iZXIudHlwZSwgRW51bVR5cGUpIGFuZCB0eXBlX21lbWJlci50eXBlLmlzX2Fub255bW91cwor
CisgICAgICAgICAgICBmb3IgX21lbWJlciBpbiBmaWx0ZXIoaXNfYW5vbnltb3VzX2VudW1fbWVt
YmVyLCBkZWNsYXJhdGlvbi50eXBlX21lbWJlcnMpOgorICAgICAgICAgICAgICAgIGVudW1fYXJn
cyA9IHsKKyAgICAgICAgICAgICAgICAgICAgJ2RvbWFpbic6IGRvbWFpbi5kb21haW5fbmFtZSwK
KyAgICAgICAgICAgICAgICAgICAgJ2VudW1OYW1lJzogJyVzJXMnICUgKGRlY2xhcmF0aW9uLnR5
cGVfbmFtZSwgdWNmaXJzdChfbWVtYmVyLm1lbWJlcl9uYW1lKSksCisgICAgICAgICAgICAgICAg
ICAgICdlbnVtTWFwJzogIiwgIi5qb2luKFsnJXM6ICIlcyInICUgKEdlbmVyYXRvci5zdHlsaXpl
ZF9uYW1lX2Zvcl9lbnVtX3ZhbHVlKGVudW1fdmFsdWUpLCBlbnVtX3ZhbHVlKSBmb3IgZW51bV92
YWx1ZSBpbiBfbWVtYmVyLnR5cGUuZW51bV92YWx1ZXMoKV0pCisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckVu
dW0oIiUoZG9tYWluKXMuJShlbnVtTmFtZSlzIiwgeyUoZW51bU1hcClzfSk7JyAlIGVudW1fYXJn
cykKKworICAgICAgICBmb3IgZXZlbnQgaW4gZG9tYWluLmV2ZW50czoKKyAgICAgICAgICAgIGV2
ZW50X2FyZ3MgPSB7CisgICAgICAgICAgICAgICAgJ2RvbWFpbic6IGRvbWFpbi5kb21haW5fbmFt
ZSwKKyAgICAgICAgICAgICAgICAnZXZlbnROYW1lJzogZXZlbnQuZXZlbnRfbmFtZSwKKyAgICAg
ICAgICAgICAgICAncGFyYW1zJzogIiwgIi5qb2luKFsnIiVzIicgJSBwYXJhbWV0ZXIucGFyYW1l
dGVyX25hbWUgZm9yIHBhcmFtZXRlciBpbiBldmVudC5ldmVudF9wYXJhbWV0ZXJzXSkKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnSW5zcGVjdG9yQmFja2VuZC5yZWdp
c3RlckV2ZW50KCIlKGRvbWFpbilzLiUoZXZlbnROYW1lKXMiLCBbJShwYXJhbXMpc10pOycgJSBl
dmVudF9hcmdzKQorCisgICAgICAgIGZvciBjb21tYW5kIGluIGRvbWFpbi5jb21tYW5kczoKKwor
ICAgICAgICAgICAgZGVmIGdlbmVyYXRlX3BhcmFtZXRlcl9vYmplY3QocGFyYW1ldGVyKToKKyAg
ICAgICAgICAgICAgICBvcHRpb25hbF9zdHJpbmcgPSAidHJ1ZSIgaWYgcGFyYW1ldGVyLmlzX29w
dGlvbmFsIGVsc2UgImZhbHNlIgorICAgICAgICAgICAgICAgIHBhaXJzID0gW10KKyAgICAgICAg
ICAgICAgICBwYWlycy5hcHBlbmQoJyJuYW1lIjogIiVzIicgJSBwYXJhbWV0ZXIucGFyYW1ldGVy
X25hbWUpCisgICAgICAgICAgICAgICAgcGFpcnMuYXBwZW5kKCcidHlwZSI6ICIlcyInICUgR2Vu
ZXJhdG9yLmpzX25hbWVfZm9yX3BhcmFtZXRlcl90eXBlKHBhcmFtZXRlci50eXBlKSkKKyAgICAg
ICAgICAgICAgICBwYWlycy5hcHBlbmQoJyJvcHRpb25hbCI6ICVzJyAlIG9wdGlvbmFsX3N0cmlu
ZykKKyAgICAgICAgICAgICAgICByZXR1cm4gInslc30iICUgIiwgIi5qb2luKHBhaXJzKQorCisg
ICAgICAgICAgICBjb21tYW5kX2FyZ3MgPSB7CisgICAgICAgICAgICAgICAgJ2RvbWFpbic6IGRv
bWFpbi5kb21haW5fbmFtZSwKKyAgICAgICAgICAgICAgICAnY29tbWFuZE5hbWUnOiBjb21tYW5k
LmNvbW1hbmRfbmFtZSwKKyAgICAgICAgICAgICAgICAnY2FsbFBhcmFtcyc6ICIsICIuam9pbihb
Z2VuZXJhdGVfcGFyYW1ldGVyX29iamVjdChwYXJhbWV0ZXIpIGZvciBwYXJhbWV0ZXIgaW4gY29t
bWFuZC5jYWxsX3BhcmFtZXRlcnNdKSwKKyAgICAgICAgICAgICAgICAncmV0dXJuUGFyYW1zJzog
IiwgIi5qb2luKFsnIiVzIicgJSBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUgZm9yIHBhcmFtZXRl
ciBpbiBjb21tYW5kLnJldHVybl9wYXJhbWV0ZXJzXSksCisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBsaW5lcy5hcHBlbmQoJ0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCIlKGRv
bWFpbilzLiUoY29tbWFuZE5hbWUpcyIsIFslKGNhbGxQYXJhbXMpc10sIFslKHJldHVyblBhcmFt
cylzXSk7JyAlIGNvbW1hbmRfYXJncykKKworICAgICAgICByZXR1cm4gIlxuIi5qb2luKGxpbmVz
KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2Nv
ZGVnZW4vZ2VuZXJhdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weSBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2JhY2tlbmRfZGlz
cGF0Y2hlcl9oZWFkZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjZmNGIzOWQwM2FlNWJjM2E0M2M2NDMxNGVi
ODAyYjQyMjdmOTk4NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFk
ZXIucHkKQEAgLTAsMCArMSwxODEgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5
cmlnaHQgKGMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmln
aHQgKGMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisj
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisj
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisjIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworCitpbXBvcnQgbG9n
Z2luZworaW1wb3J0IHJlCitpbXBvcnQgc3RyaW5nCitmcm9tIHN0cmluZyBpbXBvcnQgVGVtcGxh
dGUKKworZnJvbSBnZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvciwgdWNmaXJzdAorZnJvbSBnZW5l
cmF0b3JfdGVtcGxhdGVzIGltcG9ydCBHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgVGVtcGxhdGVzCitm
cm9tIG1vZGVscyBpbXBvcnQgRW51bVR5cGUKKworbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2ds
b2JhbCcpCisKKworY2xhc3MgQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IoR2VuZXJh
dG9yKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbW9kZWwsIGlucHV0X2ZpbGVwYXRoKToKKyAg
ICAgICAgR2VuZXJhdG9yLl9faW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0aCkKKwor
ICAgIGRlZiBvdXRwdXRfZmlsZW5hbWUoc2VsZik6CisgICAgICAgIHJldHVybiAiSW5zcGVjdG9y
JXNCYWNrZW5kRGlzcGF0Y2hlcnMuaCIgJSBzZWxmLm1vZGVsKCkuZnJhbWV3b3JrLnNldHRpbmco
J3ByZWZpeCcpCisKKyAgICBkZWYgZG9tYWluc190b19nZW5lcmF0ZShzZWxmKToKKyAgICAgICAg
cmV0dXJuIGZpbHRlcihsYW1iZGEgZG9tYWluOiBsZW4oZG9tYWluLmNvbW1hbmRzKSA+IDAsIEdl
bmVyYXRvci5kb21haW5zX3RvX2dlbmVyYXRlKHNlbGYpKQorCisgICAgZGVmIGdlbmVyYXRlX291
dHB1dChzZWxmKToKKyAgICAgICAgaGVhZGVycyA9IFsKKyAgICAgICAgICAgICciSW5zcGVjdG9y
JXNUeXBlQnVpbGRlcnMuaCInICUgc2VsZi5tb2RlbCgpLmZyYW1ld29yay5zZXR0aW5nKCdwcmVm
aXgnKSwKKyAgICAgICAgICAgICc8aW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
Lmg+JywKKyAgICAgICAgICAgICc8d3RmL1Bhc3NSZWZQdHIuaD4nLAorICAgICAgICAgICAgJzx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4nXQorCisgICAgICAgIHR5cGVkZWZzID0gWygnU3RyaW5nJywg
J0Vycm9yU3RyaW5nJyldCisKKyAgICAgICAgaGVhZGVyX2FyZ3MgPSB7CisgICAgICAgICAgICAn
aGVhZGVyR3VhcmRTdHJpbmcnOiByZS5zdWIoJ1xXKycsICdfJywgc2VsZi5vdXRwdXRfZmlsZW5h
bWUoKSksCisgICAgICAgICAgICAnaW5jbHVkZXMnOiAnXG4nLmpvaW4oWycjaW5jbHVkZSAnICsg
aGVhZGVyIGZvciBoZWFkZXIgaW4gaGVhZGVyc10pLAorICAgICAgICAgICAgJ3R5cGVkZWZzJzog
J1xuJy5qb2luKFsndHlwZWRlZiAlcyAlczsnICUgdHlwZWRlZiBmb3IgdHlwZWRlZiBpbiB0eXBl
ZGVmc10pLAorICAgICAgICAgICAgJ2lucHV0RmlsZW5hbWUnOiBzZWxmLl9pbnB1dF9maWxlcGF0
aAorICAgICAgICB9CisKKyAgICAgICAgc2VjdGlvbnMgPSBbXQorICAgICAgICBzZWN0aW9ucy5h
cHBlbmQoc2VsZi5nZW5lcmF0ZV9saWNlbnNlKCkpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChU
ZW1wbGF0ZShUZW1wbGF0ZXMuQ3BwSGVhZGVyUHJlbHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhl
YWRlcl9hcmdzKSkKKyAgICAgICAgc2VjdGlvbnMuZXh0ZW5kKG1hcChzZWxmLl9nZW5lcmF0ZV9o
YW5kbGVyX2RlY2xhcmF0aW9uc19mb3JfZG9tYWluLCBzZWxmLmRvbWFpbnNfdG9fZ2VuZXJhdGUo
KSkpCisgICAgICAgIHNlY3Rpb25zLmV4dGVuZChtYXAoc2VsZi5fZ2VuZXJhdGVfZGlzcGF0Y2hl
cl9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbiwgc2VsZi5kb21haW5zX3RvX2dlbmVyYXRlKCkpKQor
ICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVzLkNwcEhlYWRlclBvc3Rs
dWRlKS5zdWJzdGl0dXRlKE5vbmUsICoqaGVhZGVyX2FyZ3MpKQorICAgICAgICByZXR1cm4gIlxu
XG4iLmpvaW4oc2VjdGlvbnMpCisKKyAgICAjIFByaXZhdGUgbWV0aG9kcy4KKworICAgIGRlZiBf
Z2VuZXJhdGVfaGFuZGxlcl9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbihzZWxmLCBkb21haW4pOgor
ICAgICAgICBjbGFzc0NvbXBvbmVudHMgPSBbJ2NsYXNzJ10KKyAgICAgICAgZXhwb3J0TWFjcm8g
PSBzZWxmLm1vZGVsKCkuZnJhbWV3b3JrLnNldHRpbmcoJ2V4cG9ydF9tYWNybycsIE5vbmUpCisg
ICAgICAgIGlmIGV4cG9ydE1hY3JvIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgY2xhc3NDb21w
b25lbnRzLmFwcGVuZChleHBvcnRNYWNybykKKworICAgICAgICB1c2VkX2VudW1fbmFtZXMgPSBz
ZXQoKQorCisgICAgICAgIGNvbW1hbmRfZGVjbGFyYXRpb25zID0gW10KKyAgICAgICAgZm9yIGNv
bW1hbmQgaW4gZG9tYWluLmNvbW1hbmRzOgorICAgICAgICAgICAgY29tbWFuZF9kZWNsYXJhdGlv
bnMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2hhbmRsZXJfZGVjbGFyYXRpb25fZm9yX2NvbW1hbmQo
Y29tbWFuZCwgdXNlZF9lbnVtX25hbWVzKSkKKworICAgICAgICBoYW5kbGVyX2FyZ3MgPSB7Cisg
ICAgICAgICAgICAnY2xhc3NBbmRFeHBvcnRNYWNybyc6ICIgIi5qb2luKGNsYXNzQ29tcG9uZW50
cyksCisgICAgICAgICAgICAnZG9tYWluTmFtZSc6IGRvbWFpbi5kb21haW5fbmFtZSwKKyAgICAg
ICAgICAgICdjb21tYW5kRGVjbGFyYXRpb25zJzogIlxuIi5qb2luKGNvbW1hbmRfZGVjbGFyYXRp
b25zKQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIEdlbmVyYXRvci53cmFwX3dpdGhfZ3Vh
cmRfZm9yX2RvbWFpbihkb21haW4sIFRlbXBsYXRlKFRlbXBsYXRlcy5CYWNrZW5kRGlzcGF0Y2hl
ckhlYWRlckRvbWFpbkhhbmRsZXJEZWNsYXJhdGlvbikuc3Vic3RpdHV0ZShOb25lLCAqKmhhbmRs
ZXJfYXJncykpCisKKyAgICBkZWYgX2dlbmVyYXRlX2Fub255bW91c19lbnVtX2Zvcl9wYXJhbWV0
ZXIoc2VsZiwgcGFyYW1ldGVyLCBjb21tYW5kKToKKyAgICAgICAgZW51bV9hcmdzID0geworICAg
ICAgICAgICAgJ3BhcmFtZXRlck5hbWUnOiBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUsCisgICAg
ICAgICAgICAnY29tbWFuZE5hbWUnOiBjb21tYW5kLmNvbW1hbmRfbmFtZQorICAgICAgICB9CisK
KyAgICAgICAgbGluZXMgPSBbXQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAvLyBOYW1lZCBh
ZnRlciBwYXJhbWV0ZXIgXCclKHBhcmFtZXRlck5hbWUpc1wnIHdoaWxlIGdlbmVyYXRpbmcgY29t
bWFuZC9ldmVudCAlKGNvbW1hbmROYW1lKXMuJyAlIGVudW1fYXJncykKKyAgICAgICAgbGluZXMu
YXBwZW5kKCcgICAgZW51bSBjbGFzcyAlcyB7JyAlIHVjZmlyc3QocGFyYW1ldGVyLnBhcmFtZXRl
cl9uYW1lKSkKKyAgICAgICAgZm9yIGVudW1fdmFsdWUgaW4gcGFyYW1ldGVyLnR5cGUuZW51bV92
YWx1ZXMoKToKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICAlcyA9ICVkLCcgJSAo
R2VuZXJhdG9yLnN0eWxpemVkX25hbWVfZm9yX2VudW1fdmFsdWUoZW51bV92YWx1ZSksIHNlbGYu
ZW5jb2RpbmdfZm9yX2VudW1fdmFsdWUoZW51bV92YWx1ZSkpKQorICAgICAgICBsaW5lcy5hcHBl
bmQoJyAgICB9OyAvLyBlbnVtIGNsYXNzICVzJyAlIHVjZmlyc3QocGFyYW1ldGVyLnBhcmFtZXRl
cl9uYW1lKSkKKyAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKKworICAgIGRlZiBfZ2Vu
ZXJhdGVfaGFuZGxlcl9kZWNsYXJhdGlvbl9mb3JfY29tbWFuZChzZWxmLCBjb21tYW5kLCB1c2Vk
X2VudW1fbmFtZXMpOgorICAgICAgICBpZiBjb21tYW5kLmlzX2FzeW5jOgorICAgICAgICAgICAg
cmV0dXJuIHNlbGYuX2dlbmVyYXRlX2FzeW5jX2hhbmRsZXJfZGVjbGFyYXRpb25fZm9yX2NvbW1h
bmQoY29tbWFuZCkKKworICAgICAgICBsaW5lcyA9IFtdCisgICAgICAgIHBhcmFtZXRlcnMgPSBb
J0Vycm9yU3RyaW5nKiddCisgICAgICAgIGZvciBfcGFyYW1ldGVyIGluIGNvbW1hbmQuY2FsbF9w
YXJhbWV0ZXJzOgorICAgICAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoIiVzIGluXyVzIiAlIChH
ZW5lcmF0b3IudHlwZV9zdHJpbmdfZm9yX3VuY2hlY2tlZF9mb3JtYWxfaW5fcGFyYW1ldGVyKF9w
YXJhbWV0ZXIpLCBfcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKSkKKworICAgICAgICAgICAgaWYg
aXNpbnN0YW5jZShfcGFyYW1ldGVyLnR5cGUsIEVudW1UeXBlKSBhbmQgX3BhcmFtZXRlci5wYXJh
bWV0ZXJfbmFtZSBub3QgaW4gdXNlZF9lbnVtX25hbWVzOgorICAgICAgICAgICAgICAgIGxpbmVz
LmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9mb3JfcGFyYW1ldGVyKF9wYXJh
bWV0ZXIsIGNvbW1hbmQpKQorICAgICAgICAgICAgICAgIHVzZWRfZW51bV9uYW1lcy5hZGQoX3Bh
cmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkKKworICAgICAgICBmb3IgX3BhcmFtZXRlciBpbiBjb21t
YW5kLnJldHVybl9wYXJhbWV0ZXJzOgorICAgICAgICAgICAgcGFyYW1ldGVyX25hbWUgPSAnb3V0
XycgKyBfcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lCisgICAgICAgICAgICBpZiBfcGFyYW1ldGVy
LmlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAgIHBhcmFtZXRlcl9uYW1lID0gJ29wdF8nICsg
cGFyYW1ldGVyX25hbWUKKyAgICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKCIlcyAlcyIgJSAo
R2VuZXJhdG9yLnR5cGVfc3RyaW5nX2Zvcl9mb3JtYWxfb3V0X3BhcmFtZXRlcihfcGFyYW1ldGVy
KSwgcGFyYW1ldGVyX25hbWUpKQorCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKF9wYXJhbWV0
ZXIudHlwZSwgRW51bVR5cGUpIGFuZCBfcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lIG5vdCBpbiB1
c2VkX2VudW1fbmFtZXM6CisgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVy
YXRlX2Fub255bW91c19lbnVtX2Zvcl9wYXJhbWV0ZXIoX3BhcmFtZXRlciwgY29tbWFuZCkpCisg
ICAgICAgICAgICAgICAgdXNlZF9lbnVtX25hbWVzLmFkZChfcGFyYW1ldGVyLnBhcmFtZXRlcl9u
YW1lKQorCisgICAgICAgIGNvbW1hbmRfYXJncyA9IHsKKyAgICAgICAgICAgICdjb21tYW5kTmFt
ZSc6IGNvbW1hbmQuY29tbWFuZF9uYW1lLAorICAgICAgICAgICAgJ3BhcmFtZXRlcnMnOiAiLCAi
LmpvaW4ocGFyYW1ldGVycykKKyAgICAgICAgfQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICB2
aXJ0dWFsIHZvaWQgJShjb21tYW5kTmFtZSlzKCUocGFyYW1ldGVycylzKSA9IDA7JyAlIGNvbW1h
bmRfYXJncykKKyAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKKworICAgIGRlZiBfZ2Vu
ZXJhdGVfYXN5bmNfaGFuZGxlcl9kZWNsYXJhdGlvbl9mb3JfY29tbWFuZChzZWxmLCBjb21tYW5k
KToKKyAgICAgICAgY2FsbGJhY2tOYW1lID0gIiVzQ2FsbGJhY2siICUgdWNmaXJzdChjb21tYW5k
LmNvbW1hbmRfbmFtZSkKKworICAgICAgICBpbl9wYXJhbWV0ZXJzID0gWydFcnJvclN0cmluZyon
XQorICAgICAgICBmb3IgX3BhcmFtZXRlciBpbiBjb21tYW5kLmNhbGxfcGFyYW1ldGVyczoKKyAg
ICAgICAgICAgIGluX3BhcmFtZXRlcnMuYXBwZW5kKCIlcyBpbl8lcyIgJSAoR2VuZXJhdG9yLnR5
cGVfc3RyaW5nX2Zvcl91bmNoZWNrZWRfZm9ybWFsX2luX3BhcmFtZXRlcihfcGFyYW1ldGVyKSwg
X3BhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkpCisgICAgICAgIGluX3BhcmFtZXRlcnMuYXBwZW5k
KCJQYXNzUmVmUHRyPCVzPiBjYWxsYmFjayIgJSBjYWxsYmFja05hbWUpCisKKyAgICAgICAgb3V0
X3BhcmFtZXRlcnMgPSBbXQorICAgICAgICBmb3IgX3BhcmFtZXRlciBpbiBjb21tYW5kLnJldHVy
bl9wYXJhbWV0ZXJzOgorICAgICAgICAgICAgb3V0X3BhcmFtZXRlcnMuYXBwZW5kKCIlcyAlcyIg
JSAoR2VuZXJhdG9yLnR5cGVfc3RyaW5nX2Zvcl9mb3JtYWxfYXN5bmNfcGFyYW1ldGVyKF9wYXJh
bWV0ZXIpLCBfcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKSkKKworICAgICAgICBjb21tYW5kX2Fy
Z3MgPSB7CisgICAgICAgICAgICAnY2FsbGJhY2tOYW1lJzogY2FsbGJhY2tOYW1lLAorICAgICAg
ICAgICAgJ2NvbW1hbmROYW1lJzogY29tbWFuZC5jb21tYW5kX25hbWUsCisgICAgICAgICAgICAn
aW5QYXJhbWV0ZXJzJzogIiwgIi5qb2luKGluX3BhcmFtZXRlcnMpLAorICAgICAgICAgICAgJ291
dFBhcmFtZXRlcnMnOiAiLCAiLmpvaW4ob3V0X3BhcmFtZXRlcnMpLAorICAgICAgICB9CisKKyAg
ICAgICAgcmV0dXJuIFRlbXBsYXRlKFRlbXBsYXRlcy5CYWNrZW5kRGlzcGF0Y2hlckhlYWRlckFz
eW5jQ29tbWFuZERlY2xhcmF0aW9uKS5zdWJzdGl0dXRlKE5vbmUsICoqY29tbWFuZF9hcmdzKQor
CisgICAgZGVmIF9nZW5lcmF0ZV9kaXNwYXRjaGVyX2RlY2xhcmF0aW9uc19mb3JfZG9tYWluKHNl
bGYsIGRvbWFpbik6CisgICAgICAgIGNsYXNzQ29tcG9uZW50cyA9IFsnY2xhc3MnXQorICAgICAg
ICBleHBvcnRNYWNybyA9IHNlbGYubW9kZWwoKS5mcmFtZXdvcmsuc2V0dGluZygnZXhwb3J0X21h
Y3JvJywgTm9uZSkKKyAgICAgICAgaWYgZXhwb3J0TWFjcm8gaXMgbm90IE5vbmU6CisgICAgICAg
ICAgICBjbGFzc0NvbXBvbmVudHMuYXBwZW5kKGV4cG9ydE1hY3JvKQorCisgICAgICAgIGRlY2xh
cmF0aW9ucyA9IFtdCisgICAgICAgIGlmIGxlbihkb21haW4uY29tbWFuZHMpID4gMDoKKyAgICAg
ICAgICAgIGRlY2xhcmF0aW9ucy5hcHBlbmQoJ3ByaXZhdGU6JykKKyAgICAgICAgZGVjbGFyYXRp
b25zLmV4dGVuZChtYXAoc2VsZi5fZ2VuZXJhdGVfZGlzcGF0Y2hlcl9kZWNsYXJhdGlvbl9mb3Jf
Y29tbWFuZCwgZG9tYWluLmNvbW1hbmRzKSkKKworICAgICAgICBoYW5kbGVyX2FyZ3MgPSB7Cisg
ICAgICAgICAgICAnY2xhc3NBbmRFeHBvcnRNYWNybyc6ICIgIi5qb2luKGNsYXNzQ29tcG9uZW50
cyksCisgICAgICAgICAgICAnZG9tYWluTmFtZSc6IGRvbWFpbi5kb21haW5fbmFtZSwKKyAgICAg
ICAgICAgICdjb21tYW5kRGVjbGFyYXRpb25zJzogIlxuIi5qb2luKGRlY2xhcmF0aW9ucykKKyAg
ICAgICAgfQorCisgICAgICAgIHJldHVybiBHZW5lcmF0b3Iud3JhcF93aXRoX2d1YXJkX2Zvcl9k
b21haW4oZG9tYWluLCBUZW1wbGF0ZShUZW1wbGF0ZXMuQmFja2VuZERpc3BhdGNoZXJIZWFkZXJE
b21haW5EaXNwYXRjaGVyRGVjbGFyYXRpb24pLnN1YnN0aXR1dGUoTm9uZSwgKipoYW5kbGVyX2Fy
Z3MpKQorCisgICAgZGVmIF9nZW5lcmF0ZV9kaXNwYXRjaGVyX2RlY2xhcmF0aW9uX2Zvcl9jb21t
YW5kKHNlbGYsIGNvbW1hbmQpOgorICAgICAgICByZXR1cm4gIiAgICB2b2lkICVzKGxvbmcgY2Fs
bElkLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7IiAlIGNvbW1h
bmQuY29tbWFuZF9uYW1lCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50
YXRpb24ucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdl
bi9nZW5lcmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uODdhMmI4ZmUyZGFiMTlkN2MxYTE0NDU0YjRjNmEyMTQzOWRmMzI4MgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dl
bmVyYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQpAQCAtMCwwICsxLDI2
OSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoYykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
IyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisj
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyMgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgc3RyaW5n
Citmcm9tIHN0cmluZyBpbXBvcnQgVGVtcGxhdGUKKworZnJvbSBnZW5lcmF0b3IgaW1wb3J0IEdl
bmVyYXRvciwgdWNmaXJzdAorZnJvbSBnZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBHZW5lcmF0
b3JUZW1wbGF0ZXMgYXMgVGVtcGxhdGVzCitmcm9tIG1vZGVscyBpbXBvcnQgT2JqZWN0VHlwZSwg
QXJyYXlUeXBlCisKK2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQorCisKK2NsYXNz
IEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IoR2VuZXJhdG9yKToKKyAg
ICBkZWYgX19pbml0X18oc2VsZiwgbW9kZWwsIGlucHV0X2ZpbGVwYXRoKToKKyAgICAgICAgR2Vu
ZXJhdG9yLl9faW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0aCkKKworICAgIGRlZiBv
dXRwdXRfZmlsZW5hbWUoc2VsZik6CisgICAgICAgIHJldHVybiAiSW5zcGVjdG9yJXNCYWNrZW5k
RGlzcGF0Y2hlcnMuY3BwIiAlIHNlbGYubW9kZWwoKS5mcmFtZXdvcmsuc2V0dGluZygncHJlZml4
JykKKworICAgIGRlZiBkb21haW5zX3RvX2dlbmVyYXRlKHNlbGYpOgorICAgICAgICByZXR1cm4g
ZmlsdGVyKGxhbWJkYSBkb21haW46IGxlbihkb21haW4uY29tbWFuZHMpID4gMCwgR2VuZXJhdG9y
LmRvbWFpbnNfdG9fZ2VuZXJhdGUoc2VsZikpCisKKyAgICBkZWYgZ2VuZXJhdGVfb3V0cHV0KHNl
bGYpOgorICAgICAgICBzZWNvbmRhcnlfaGVhZGVycyA9IFsKKyAgICAgICAgICAgICc8aW5zcGVj
dG9yL0luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oPicsCisgICAgICAgICAgICAnPGluc3BlY3Rv
ci9JbnNwZWN0b3JWYWx1ZXMuaD4nLAorICAgICAgICAgICAgJzx3dGYvdGV4dC9DU3RyaW5nLmg+
J10KKworICAgICAgICBoZWFkZXJfYXJncyA9IHsKKyAgICAgICAgICAgICdwcmltYXJ5SW5jbHVk
ZSc6ICciSW5zcGVjdG9yJXNCYWNrZW5kRGlzcGF0Y2hlcnMuaCInICUgc2VsZi5tb2RlbCgpLmZy
YW1ld29yay5zZXR0aW5nKCdwcmVmaXgnKSwKKyAgICAgICAgICAgICdzZWNvbmRhcnlJbmNsdWRl
cyc6ICJcbiIuam9pbihbJyNpbmNsdWRlICVzJyAlIGhlYWRlciBmb3IgaGVhZGVyIGluIHNlY29u
ZGFyeV9oZWFkZXJzXSksCisgICAgICAgICAgICAnaW5wdXRGaWxlbmFtZSc6IHNlbGYuX2lucHV0
X2ZpbGVwYXRoCisgICAgICAgIH0KKworICAgICAgICBzZWN0aW9ucyA9IFtdCisgICAgICAgIHNl
Y3Rpb25zLmFwcGVuZChzZWxmLmdlbmVyYXRlX2xpY2Vuc2UoKSkKKyAgICAgICAgc2VjdGlvbnMu
YXBwZW5kKFRlbXBsYXRlKFRlbXBsYXRlcy5DcHBJbXBsZW1lbnRhdGlvblByZWx1ZGUpLnN1YnN0
aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZCgiXG4i
LmpvaW4obWFwKHNlbGYuX2dlbmVyYXRlX2hhbmRsZXJfY2xhc3NfZGVzdHJ1Y3Rvcl9mb3JfZG9t
YWluLCBzZWxmLmRvbWFpbnNfdG9fZ2VuZXJhdGUoKSkpKQorICAgICAgICBzZWN0aW9ucy5leHRl
bmQobWFwKHNlbGYuX2dlbmVyYXRlX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb25zX2Zvcl9kb21h
aW4sIHNlbGYuZG9tYWluc190b19nZW5lcmF0ZSgpKSkKKyAgICAgICAgc2VjdGlvbnMuYXBwZW5k
KFRlbXBsYXRlKFRlbXBsYXRlcy5DcHBJbXBsZW1lbnRhdGlvblBvc3RsdWRlKS5zdWJzdGl0dXRl
KE5vbmUsICoqaGVhZGVyX2FyZ3MpKQorICAgICAgICByZXR1cm4gIlxuXG4iLmpvaW4oc2VjdGlv
bnMpCisKKyAgICAjIFByaXZhdGUgbWV0aG9kcy4KKworICAgIGRlZiBfZ2VuZXJhdGVfaGFuZGxl
cl9jbGFzc19kZXN0cnVjdG9yX2Zvcl9kb21haW4oc2VsZiwgZG9tYWluKToKKyAgICAgICAgZGVz
dHJ1Y3Rvcl9hcmdzID0geworICAgICAgICAgICAgJ2RvbWFpbk5hbWUnOiBkb21haW4uZG9tYWlu
X25hbWUKKyAgICAgICAgfQorICAgICAgICBkZXN0cnVjdG9yID0gJ0luc3BlY3RvciUoZG9tYWlu
TmFtZSlzQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjp+SW5zcGVjdG9yJShkb21haW5OYW1lKXNC
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKSB7IH0nICUgZGVzdHJ1Y3Rvcl9hcmdzCisgICAgICAg
IHJldHVybiBHZW5lcmF0b3Iud3JhcF93aXRoX2d1YXJkX2Zvcl9kb21haW4oZG9tYWluLCBkZXN0
cnVjdG9yKQorCisgICAgZGVmIF9nZW5lcmF0ZV9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uc19m
b3JfZG9tYWluKHNlbGYsIGRvbWFpbik6CisgICAgICAgIGltcGxlbWVudGF0aW9ucyA9IFtdCisK
KyAgICAgICAgY29uc3RydWN0b3JfYXJncyA9IHsKKyAgICAgICAgICAgICdkb21haW5OYW1lJzog
ZG9tYWluLmRvbWFpbl9uYW1lLAorICAgICAgICB9CisgICAgICAgIGltcGxlbWVudGF0aW9ucy5h
cHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVzLkJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25E
b21haW5Db25zdHJ1Y3Rvcikuc3Vic3RpdHV0ZShOb25lLCAqKmNvbnN0cnVjdG9yX2FyZ3MpKQor
CisgICAgICAgIGlmIGxlbihkb21haW4uY29tbWFuZHMpIDw9IDU6CisgICAgICAgICAgICBpbXBs
ZW1lbnRhdGlvbnMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX3NtYWxsX2Rpc3BhdGNoZXJfc3dpdGNo
X2ltcGxlbWVudGF0aW9uX2Zvcl9kb21haW4oZG9tYWluKSkKKyAgICAgICAgZWxzZToKKyAgICAg
ICAgICAgIGltcGxlbWVudGF0aW9ucy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfbGFyZ2VfZGlzcGF0
Y2hlcl9zd2l0Y2hfaW1wbGVtZW50YXRpb25fZm9yX2RvbWFpbihkb21haW4pKQorCisgICAgICAg
IGZvciBjb21tYW5kIGluIGRvbWFpbi5jb21tYW5kczoKKyAgICAgICAgICAgIGlmIGNvbW1hbmQu
aXNfYXN5bmM6CisgICAgICAgICAgICAgICAgaW1wbGVtZW50YXRpb25zLmFwcGVuZChzZWxmLl9n
ZW5lcmF0ZV9hc3luY19kaXNwYXRjaGVyX2NsYXNzX2Zvcl9kb21haW4oY29tbWFuZCwgZG9tYWlu
KSkKKyAgICAgICAgICAgIGltcGxlbWVudGF0aW9ucy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfZGlz
cGF0Y2hlcl9pbXBsZW1lbnRhdGlvbl9mb3JfY29tbWFuZChjb21tYW5kLCBkb21haW4pKQorCisg
ICAgICAgIHJldHVybiBHZW5lcmF0b3Iud3JhcF93aXRoX2d1YXJkX2Zvcl9kb21haW4oZG9tYWlu
LCAiXG5cbiIuam9pbihpbXBsZW1lbnRhdGlvbnMpKQorCisgICAgZGVmIF9nZW5lcmF0ZV9zbWFs
bF9kaXNwYXRjaGVyX3N3aXRjaF9pbXBsZW1lbnRhdGlvbl9mb3JfZG9tYWluKHNlbGYsIGRvbWFp
bik6CisgICAgICAgIGNhc2VzID0gW10KKyAgICAgICAgY2FzZXMuYXBwZW5kKCcgICAgaWYgKG1l
dGhvZCA9PSAiJXMiKScgJSBkb21haW4uY29tbWFuZHNbMF0uY29tbWFuZF9uYW1lKQorICAgICAg
ICBjYXNlcy5hcHBlbmQoJyAgICAgICAgJXMoY2FsbElkLCAqbWVzc2FnZS5nZXQoKSk7JyAlIGRv
bWFpbi5jb21tYW5kc1swXS5jb21tYW5kX25hbWUpCisgICAgICAgIGZvciBjb21tYW5kIGluIGRv
bWFpbi5jb21tYW5kc1sxOl06CisgICAgICAgICAgICBjYXNlcy5hcHBlbmQoJyAgICBlbHNlIGlm
IChtZXRob2QgPT0gIiVzIiknICUgY29tbWFuZC5jb21tYW5kX25hbWUpCisgICAgICAgICAgICBj
YXNlcy5hcHBlbmQoJyAgICAgICAgJXMoY2FsbElkLCAqbWVzc2FnZS5nZXQoKSk7JyAlIGNvbW1h
bmQuY29tbWFuZF9uYW1lKQorCisgICAgICAgIHN3aXRjaF9hcmdzID0geworICAgICAgICAgICAg
J2RvbWFpbk5hbWUnOiBkb21haW4uZG9tYWluX25hbWUsCisgICAgICAgICAgICAnZGlzcGF0Y2hD
YXNlcyc6ICJcbiIuam9pbihjYXNlcykKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBUZW1w
bGF0ZShUZW1wbGF0ZXMuQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvblNtYWxsU3dpdGNo
KS5zdWJzdGl0dXRlKE5vbmUsICoqc3dpdGNoX2FyZ3MpCisKKyAgICBkZWYgX2dlbmVyYXRlX2xh
cmdlX2Rpc3BhdGNoZXJfc3dpdGNoX2ltcGxlbWVudGF0aW9uX2Zvcl9kb21haW4oc2VsZiwgZG9t
YWluKToKKyAgICAgICAgY2FzZXMgPSBbXQorICAgICAgICBmb3IgY29tbWFuZCBpbiBkb21haW4u
Y29tbWFuZHM6CisgICAgICAgICAgICBhcmdzID0geworICAgICAgICAgICAgICAgICdkb21haW5O
YW1lJzogZG9tYWluLmRvbWFpbl9uYW1lLAorICAgICAgICAgICAgICAgICdjb21tYW5kTmFtZSc6
IGNvbW1hbmQuY29tbWFuZF9uYW1lCisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlcy5h
cHBlbmQoJyAgICAgICAgICAgIHsgIiUoY29tbWFuZE5hbWUpcyIsICZJbnNwZWN0b3IlKGRvbWFp
bk5hbWUpc0JhY2tlbmREaXNwYXRjaGVyOjolKGNvbW1hbmROYW1lKXMgfSwnICUgYXJncykKKwor
ICAgICAgICBzd2l0Y2hfYXJncyA9IHsKKyAgICAgICAgICAgICdkb21haW5OYW1lJzogZG9tYWlu
LmRvbWFpbl9uYW1lLAorICAgICAgICAgICAgJ2Rpc3BhdGNoQ2FzZXMnOiAiXG4iLmpvaW4oY2Fz
ZXMpCisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gVGVtcGxhdGUoVGVtcGxhdGVzLkJhY2tl
bmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25MYXJnZVN3aXRjaCkuc3Vic3RpdHV0ZShOb25lLCAq
KnN3aXRjaF9hcmdzKQorCisgICAgZGVmIF9nZW5lcmF0ZV9hc3luY19kaXNwYXRjaGVyX2NsYXNz
X2Zvcl9kb21haW4oc2VsZiwgY29tbWFuZCwgZG9tYWluKToKKyAgICAgICAgb3V0X3BhcmFtZXRl
cl9hc3NpZ25tZW50cyA9IFtdCisgICAgICAgIGZvcm1hbF9wYXJhbWV0ZXJzID0gW10KKworICAg
ICAgICBmb3IgcGFyYW1ldGVyIGluIGNvbW1hbmQucmV0dXJuX3BhcmFtZXRlcnM6CisgICAgICAg
ICAgICBwYXJhbV9hcmdzID0geworICAgICAgICAgICAgICAgICdmcmFtZXdvcmtQcmVmaXgnOiBz
ZWxmLm1vZGVsKCkuZnJhbWV3b3JrLnNldHRpbmcoJ3ByZWZpeCcpLAorICAgICAgICAgICAgICAg
ICdrZXllZFNldE1ldGhvZCc6IEdlbmVyYXRvci5rZXllZF9zZXRfbWV0aG9kX2Zvcl90eXBlKHBh
cmFtZXRlci50eXBlKSwKKyAgICAgICAgICAgICAgICAncGFyYW1ldGVyTmFtZSc6IHBhcmFtZXRl
ci5wYXJhbWV0ZXJfbmFtZSwKKyAgICAgICAgICAgICAgICAncGFyYW1ldGVyVHlwZSc6IEdlbmVy
YXRvci50eXBlX3N0cmluZ19mb3Jfc3RhY2tfaW5fcGFyYW1ldGVyKHBhcmFtZXRlciksCisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGZvcm1hbF9wYXJhbWV0ZXJzLmFwcGVuZCgnJXMgJXMn
ICUgKEdlbmVyYXRvci50eXBlX3N0cmluZ19mb3JfZm9ybWFsX2FzeW5jX3BhcmFtZXRlcihwYXJh
bWV0ZXIpLCBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpKQorCisgICAgICAgICAgICBpZiBwYXJh
bWV0ZXIuaXNfb3B0aW9uYWw6CisgICAgICAgICAgICAgICAgaWYgR2VuZXJhdG9yLnNob3VsZF91
c2Vfd3JhcHBlcl9mb3JfcmV0dXJuX3R5cGUocGFyYW1ldGVyLnR5cGUpOgorICAgICAgICAgICAg
ICAgICAgICBvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgIGlmICglKHBhcmFt
ZXRlck5hbWUpcy5pc0Fzc2lnbmVkKCkpJyAlIHBhcmFtX2FyZ3MpCisgICAgICAgICAgICAgICAg
ICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAgICAgIGpzb25NZXNzYWdl
LT4lKGtleWVkU2V0TWV0aG9kKXMoQVNDSUlMaXRlcmFsKCIlKHBhcmFtZXRlck5hbWUpcyIpLCAl
KHBhcmFtZXRlck5hbWUpcy5nZXRWYWx1ZSgpKTsnICUgcGFyYW1fYXJncykKKyAgICAgICAgICAg
ICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRz
LmFwcGVuZCgnICAgIGlmICglKHBhcmFtZXRlck5hbWUpcyknICUgcGFyYW1fYXJncykKKyAgICAg
ICAgICAgICAgICAgICAgb3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICAgICAg
anNvbk1lc3NhZ2UtPiUoa2V5ZWRTZXRNZXRob2QpcyhBU0NJSUxpdGVyYWwoIiUocGFyYW1ldGVy
TmFtZSlzIiksICUocGFyYW1ldGVyTmFtZSlzKTsnICUgcGFyYW1fYXJncykKKyAgICAgICAgICAg
IGVsaWYgcGFyYW1ldGVyLnR5cGUuaXNfZW51bSgpOgorICAgICAgICAgICAgICAgIG91dF9wYXJh
bWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAganNvbk1lc3NhZ2UtPiUoa2V5ZWRTZXRNZXRo
b2QpcyhBU0NJSUxpdGVyYWwoIiUocGFyYW1ldGVyTmFtZSlzIiksIEluc3BlY3Rvcjo6VHlwZUJ1
aWxkZXI6OmdldCUoZnJhbWV3b3JrUHJlZml4KXNFbnVtQ29uc3RhbnRWYWx1ZSglKHBhcmFtZXRl
ck5hbWUpcykpOycgJSBwYXJhbV9hcmdzKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAg
ICAgICBvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgIGpzb25NZXNzYWdlLT4l
KGtleWVkU2V0TWV0aG9kKXMoQVNDSUlMaXRlcmFsKCIlKHBhcmFtZXRlck5hbWUpcyIpLCAlKHBh
cmFtZXRlck5hbWUpcyk7JyAlIHBhcmFtX2FyZ3MpCisKKyAgICAgICAgYXN5bmNfYXJncyA9IHsK
KyAgICAgICAgICAgICdkb21haW5OYW1lJzogZG9tYWluLmRvbWFpbl9uYW1lLAorICAgICAgICAg
ICAgJ2NhbGxiYWNrTmFtZSc6IHVjZmlyc3QoY29tbWFuZC5jb21tYW5kX25hbWUpICsgJ0NhbGxi
YWNrJywKKyAgICAgICAgICAgICdmb3JtYWxQYXJhbWV0ZXJzJzogIiwgIi5qb2luKGZvcm1hbF9w
YXJhbWV0ZXJzKSwKKyAgICAgICAgICAgICdvdXRQYXJhbWV0ZXJBc3NpZ25tZW50cyc6ICJcbiIu
am9pbihvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRzKQorICAgICAgICB9CisgICAgICAgIHJldHVy
biBUZW1wbGF0ZShUZW1wbGF0ZXMuQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkFzeW5j
Q29tbWFuZCkuc3Vic3RpdHV0ZShOb25lLCAqKmFzeW5jX2FyZ3MpCisKKyAgICBkZWYgX2dlbmVy
YXRlX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb25fZm9yX2NvbW1hbmQoc2VsZiwgY29tbWFuZCwg
ZG9tYWluKToKKyAgICAgICAgaW5fcGFyYW1ldGVyX2RlY2xhcmF0aW9ucyA9IFtdCisgICAgICAg
IG91dF9wYXJhbWV0ZXJfZGVjbGFyYXRpb25zID0gW10KKyAgICAgICAgb3V0X3BhcmFtZXRlcl9h
c3NpZ25tZW50cyA9IFtdCisgICAgICAgIG1ldGhvZF9wYXJhbWV0ZXJzID0gWycmZXJyb3InXQor
CisgICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gY29tbWFuZC5jYWxsX3BhcmFtZXRlcnM6CisgICAg
ICAgICAgICBvdXRfc3VjY2Vzc19hcmd1bWVudCA9ICdudWxscHRyJworICAgICAgICAgICAgaWYg
cGFyYW1ldGVyLmlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAgIG91dF9zdWNjZXNzX2FyZ3Vt
ZW50ID0gJyYlc192YWx1ZUZvdW5kJyAlIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZQorICAgICAg
ICAgICAgICAgIGluX3BhcmFtZXRlcl9kZWNsYXJhdGlvbnMuYXBwZW5kKCcgICAgYm9vbCAlc192
YWx1ZUZvdW5kID0gZmFsc2U7JyAlIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkKKworICAgICAg
ICAgICAgcGFyYW1fYXJncyA9IHsKKyAgICAgICAgICAgICAgICAncGFyYW1ldGVyVHlwZSc6IEdl
bmVyYXRvci50eXBlX3N0cmluZ19mb3Jfc3RhY2tfaW5fcGFyYW1ldGVyKHBhcmFtZXRlciksCisg
ICAgICAgICAgICAgICAgJ3BhcmFtZXRlck5hbWUnOiBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUs
CisgICAgICAgICAgICAgICAgJ2tleWVkR2V0TWV0aG9kJzogR2VuZXJhdG9yLmtleWVkX2dldF9t
ZXRob2RfZm9yX3R5cGUocGFyYW1ldGVyLnR5cGUpLAorICAgICAgICAgICAgICAgICdzdWNjZXNz
T3V0UGFyYW0nOiBvdXRfc3VjY2Vzc19hcmd1bWVudAorICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBpbl9wYXJhbWV0ZXJfZGVjbGFyYXRpb25zLmFwcGVuZCgnICAgICUocGFyYW1ldGVyVHlw
ZSlzIGluXyUocGFyYW1ldGVyTmFtZSlzID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OiUo
a2V5ZWRHZXRNZXRob2QpcyhwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgiJShwYXJh
bWV0ZXJOYW1lKXMiKSwgJShzdWNjZXNzT3V0UGFyYW0pcywgcHJvdG9jb2xFcnJvcnNQdHIpOycg
JSBwYXJhbV9hcmdzKQorCisgICAgICAgICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6Cisg
ICAgICAgICAgICAgICAgbWV0aG9kX3BhcmFtZXRlcnMuYXBwZW5kKCclKHBhcmFtZXRlck5hbWUp
c192YWx1ZUZvdW5kID8gJmluXyUocGFyYW1ldGVyTmFtZSlzIDogbnVsbHB0cicgJSBwYXJhbV9h
cmdzKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBtZXRob2RfcGFyYW1ldGVy
cy5hcHBlbmQoJ2luXycgKyBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpCisKKyAgICAgICAgaWYg
Y29tbWFuZC5pc19hc3luYzoKKyAgICAgICAgICAgIGFzeW5jX2FyZ3MgPSB7CisgICAgICAgICAg
ICAgICAgJ2RvbWFpbk5hbWUnOiBkb21haW4uZG9tYWluX25hbWUsCisgICAgICAgICAgICAgICAg
J2NhbGxiYWNrTmFtZSc6IHVjZmlyc3QoY29tbWFuZC5jb21tYW5kX25hbWUpICsgJ0NhbGxiYWNr
JworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRz
LmFwcGVuZCgnICAgICAgICBjYWxsYmFjay0+ZGlzYWJsZSgpOycpCisgICAgICAgICAgICBvdXRf
cGFyYW1ldGVyX2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVy
LT5yZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7JykKKyAgICAgICAgICAgIG91dF9wYXJh
bWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAgICAgIHJldHVybjsnKQorICAgICAgICAgICAg
bWV0aG9kX3BhcmFtZXRlcnMuYXBwZW5kKCdjYWxsYmFjaycpCisKKyAgICAgICAgZWxzZToKKyAg
ICAgICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gY29tbWFuZC5yZXR1cm5fcGFyYW1ldGVyczoKKyAg
ICAgICAgICAgICAgICBwYXJhbV9hcmdzID0geworICAgICAgICAgICAgICAgICAgICAncGFyYW1l
dGVyVHlwZSc6IEdlbmVyYXRvci50eXBlX3N0cmluZ19mb3Jfc3RhY2tfb3V0X3BhcmFtZXRlcihw
YXJhbWV0ZXIpLAorICAgICAgICAgICAgICAgICAgICAncGFyYW1ldGVyTmFtZSc6IHBhcmFtZXRl
ci5wYXJhbWV0ZXJfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgJ2tleWVkU2V0TWV0aG9kJzog
R2VuZXJhdG9yLmtleWVkX3NldF9tZXRob2RfZm9yX3R5cGUocGFyYW1ldGVyLnR5cGUpLAorICAg
ICAgICAgICAgICAgICAgICAnZnJhbWV3b3JrUHJlZml4Jzogc2VsZi5tb2RlbCgpLmZyYW1ld29y
ay5zZXR0aW5nKCdwcmVmaXgnKQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
IG91dF9wYXJhbWV0ZXJfZGVjbGFyYXRpb25zLmFwcGVuZCgnICAgICUocGFyYW1ldGVyVHlwZSlz
IG91dF8lKHBhcmFtZXRlck5hbWUpczsnICUgcGFyYW1fYXJncykKKyAgICAgICAgICAgICAgICBp
ZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6CisgICAgICAgICAgICAgICAgICAgIGlmIEdlbmVyYXRv
ci5zaG91bGRfdXNlX3dyYXBwZXJfZm9yX3JldHVybl90eXBlKHBhcmFtZXRlci50eXBlKToKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcg
ICAgICAgIGlmIChvdXRfJShwYXJhbWV0ZXJOYW1lKXMuaXNBc3NpZ25lZCgpKScgJSBwYXJhbV9h
cmdzKQorICAgICAgICAgICAgICAgICAgICAgICAgb3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cy5h
cHBlbmQoJyAgICAgICAgICAgIHJlc3VsdC0+JShrZXllZFNldE1ldGhvZClzKEFTQ0lJTGl0ZXJh
bCgiJShwYXJhbWV0ZXJOYW1lKXMiKSwgb3V0XyUocGFyYW1ldGVyTmFtZSlzLmdldFZhbHVlKCkp
OycgJSBwYXJhbV9hcmdzKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAg
ICAgICAgICAgICAgb3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICAgICAgaWYg
KG91dF8lKHBhcmFtZXRlck5hbWUpcyknICUgcGFyYW1fYXJncykKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAgICAgICAgICByZXN1
bHQtPiUoa2V5ZWRTZXRNZXRob2QpcyhBU0NJSUxpdGVyYWwoIiUocGFyYW1ldGVyTmFtZSlzIiks
IG91dF8lKHBhcmFtZXRlck5hbWUpcyk7JyAlIHBhcmFtX2FyZ3MpCisgICAgICAgICAgICAgICAg
ZWxpZiBwYXJhbWV0ZXIudHlwZS5pc19lbnVtKCk6CisgICAgICAgICAgICAgICAgICAgIG91dF9w
YXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAgICAgIHJlc3VsdC0+JShrZXllZFNldE1l
dGhvZClzKEFTQ0lJTGl0ZXJhbCgiJShwYXJhbWV0ZXJOYW1lKXMiKSwgSW5zcGVjdG9yOjpUeXBl
QnVpbGRlcjo6Z2V0JShmcmFtZXdvcmtQcmVmaXgpc0VudW1Db25zdGFudFZhbHVlKG91dF8lKHBh
cmFtZXRlck5hbWUpcykpOycgJSBwYXJhbV9hcmdzKQorICAgICAgICAgICAgICAgIGVsc2U6Cisg
ICAgICAgICAgICAgICAgICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAg
ICAgIHJlc3VsdC0+JShrZXllZFNldE1ldGhvZClzKEFTQ0lJTGl0ZXJhbCgiJShwYXJhbWV0ZXJO
YW1lKXMiKSwgb3V0XyUocGFyYW1ldGVyTmFtZSlzKTsnICUgcGFyYW1fYXJncykKKworICAgICAg
ICAgICAgICAgIGlmIEdlbmVyYXRvci5zaG91bGRfcGFzc19ieV9jb3B5X2Zvcl9yZXR1cm5fdHlw
ZShwYXJhbWV0ZXIudHlwZSk6CisgICAgICAgICAgICAgICAgICAgIG1ldGhvZF9wYXJhbWV0ZXJz
LmFwcGVuZCgnb3V0XycgKyBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpCisgICAgICAgICAgICAg
ICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgbWV0aG9kX3BhcmFtZXRlcnMuYXBwZW5kKCcm
b3V0XycgKyBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpCisKKyAgICAgICAgY29tbWFuZF9hcmdz
ID0geworICAgICAgICAgICAgJ2RvbWFpbk5hbWUnOiBkb21haW4uZG9tYWluX25hbWUsCisgICAg
ICAgICAgICAnY2FsbGJhY2tOYW1lJzogJyVzQ2FsbGJhY2snICUgdWNmaXJzdChjb21tYW5kLmNv
bW1hbmRfbmFtZSksCisgICAgICAgICAgICAnY29tbWFuZE5hbWUnOiBjb21tYW5kLmNvbW1hbmRf
bmFtZSwKKyAgICAgICAgICAgICdpblBhcmFtZXRlckRlY2xhcmF0aW9ucyc6ICJcbiIuam9pbihp
bl9wYXJhbWV0ZXJfZGVjbGFyYXRpb25zKSwKKyAgICAgICAgICAgICdpbnZvY2F0aW9uUGFyYW1l
dGVycyc6ICIsICIuam9pbihtZXRob2RfcGFyYW1ldGVycykKKyAgICAgICAgfQorCisgICAgICAg
IGxpbmVzID0gW10KKyAgICAgICAgaWYgbGVuKGNvbW1hbmQuY2FsbF9wYXJhbWV0ZXJzKSA9PSAw
OgorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCd2b2lkIEluc3BlY3RvciUoZG9tYWluTmFtZSlz
QmFja2VuZERpc3BhdGNoZXI6OiUoY29tbWFuZE5hbWUpcyhsb25nIGNhbGxJZCwgY29uc3QgSW5z
cGVjdG9yT2JqZWN0JiknICUgY29tbWFuZF9hcmdzKQorICAgICAgICBlbHNlOgorICAgICAgICAg
ICAgbGluZXMuYXBwZW5kKCd2b2lkIEluc3BlY3RvciUoZG9tYWluTmFtZSlzQmFja2VuZERpc3Bh
dGNoZXI6OiUoY29tbWFuZE5hbWUpcyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0
JiBtZXNzYWdlKScgJSBjb21tYW5kX2FyZ3MpCisgICAgICAgIGxpbmVzLmFwcGVuZCgneycpCisK
KyAgICAgICAgaWYgbGVuKGNvbW1hbmQuY2FsbF9wYXJhbWV0ZXJzKSA+IDA6CisgICAgICAgICAg
ICBsaW5lcy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVzLkJhY2tlbmREaXNwYXRjaGVySW1wbGVt
ZW50YXRpb25QcmVwYXJlQ29tbWFuZEFyZ3VtZW50cykuc3Vic3RpdHV0ZShOb25lLCAqKmNvbW1h
bmRfYXJncykpCisKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgRXJyb3JTdHJpbmcgZXJyb3I7
JykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVz
dWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsnKQorICAgICAgICBpZiBjb21tYW5kLmlz
X2FzeW5jOgorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgUmVmUHRyPEluc3BlY3RvciUo
ZG9tYWluTmFtZSlzQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjolKGNhbGxiYWNrTmFtZSlzPiBj
YWxsYmFjayA9IGFkb3B0UmVmKG5ldyBJbnNwZWN0b3IlKGRvbWFpbk5hbWUpc0JhY2tlbmREaXNw
YXRjaGVySGFuZGxlcjo6JShjYWxsYmFja05hbWUpcyhtX2JhY2tlbmREaXNwYXRjaGVyLGNhbGxJ
ZCkpOycgJSBjb21tYW5kX2FyZ3MpCisgICAgICAgIGlmIGxlbihjb21tYW5kLnJldHVybl9wYXJh
bWV0ZXJzKSA+IDA6CisgICAgICAgICAgICBsaW5lcy5leHRlbmQob3V0X3BhcmFtZXRlcl9kZWNs
YXJhdGlvbnMpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIG1fYWdlbnQtPiUoY29tbWFuZE5h
bWUpcyglKGludm9jYXRpb25QYXJhbWV0ZXJzKXMpOycgJSBjb21tYW5kX2FyZ3MpCisgICAgICAg
IGxpbmVzLmFwcGVuZCgnJykKKyAgICAgICAgaWYgY29tbWFuZC5pc19hc3luYzoKKyAgICAgICAg
ICAgIGxpbmVzLmFwcGVuZCgnICAgIGlmIChlcnJvci5sZW5ndGgoKSkgeycpCisgICAgICAgICAg
ICBsaW5lcy5leHRlbmQob3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cykKKyAgICAgICAgICAgIGxp
bmVzLmFwcGVuZCgnICAgIH0nKQorICAgICAgICBlbGlmIGxlbihjb21tYW5kLnJldHVybl9wYXJh
bWV0ZXJzKSA+IDE6CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBpZiAoIWVycm9yLmxl
bmd0aCgpKSB7JykKKyAgICAgICAgICAgIGxpbmVzLmV4dGVuZChvdXRfcGFyYW1ldGVyX2Fzc2ln
bm1lbnRzKQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgfScpCisgICAgICAgIGVsaWYg
bGVuKGNvbW1hbmQucmV0dXJuX3BhcmFtZXRlcnMpID09IDE6CisgICAgICAgICAgICBsaW5lcy5h
cHBlbmQoJyAgICBpZiAoIWVycm9yLmxlbmd0aCgpKScpCisgICAgICAgICAgICBsaW5lcy5leHRl
bmQob3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cykKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgn
JykKKworICAgICAgICBpZiBub3QgY29tbWFuZC5pc19hc3luYzoKKyAgICAgICAgICAgIGxpbmVz
LmFwcGVuZCgnICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIHJl
c3VsdC5yZWxlYXNlKCksIGVycm9yKTsnKQorICAgICAgICBsaW5lcy5hcHBlbmQoJ30nKQorICAg
ICAgICByZXR1cm4gIlxuIi5qb2luKGxpbmVzKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfZnJvbnRlbmRfZGlzcGF0
Y2hlcl9oZWFkZXIucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Y29kZWdlbi9nZW5lcmF0ZV9mcm9udGVuZF9kaXNwYXRjaGVyX2hlYWRlci5weQpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4zYzY2OWU2MjMwZjY5MTU3NzZkMzFjZDQyNTBhYjE5OTA5ZDZkYWU4Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2Vu
ZXJhdGVfZnJvbnRlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkKQEAgLTAsMCArMSwxMTggQEAKKyMh
L3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5cmlnaHQgKGMpIDIwMTQgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKGMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisjIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworIyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisjIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKworCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IHJlCitpbXBvcnQgc3Ry
aW5nCitmcm9tIHN0cmluZyBpbXBvcnQgVGVtcGxhdGUKKworZnJvbSBtb2RlbHMgaW1wb3J0IEVu
dW1UeXBlCitmcm9tIGdlbmVyYXRvciBpbXBvcnQgR2VuZXJhdG9yLCB1Y2ZpcnN0Citmcm9tIGdl
bmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IEdlbmVyYXRvclRlbXBsYXRlcyBhcyBUZW1wbGF0ZXMK
KworbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2JhbCcpCisKKworY2xhc3MgRnJvbnRlbmRE
aXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yKEdlbmVyYXRvcik6CisgICAgZGVmIF9faW5pdF9fKHNl
bGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0aCk6CisgICAgICAgIEdlbmVyYXRvci5fX2luaXRfXyhz
ZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpCisKKyAgICBkZWYgb3V0cHV0X2ZpbGVuYW1lKHNl
bGYpOgorICAgICAgICByZXR1cm4gIkluc3BlY3RvciVzRnJvbnRlbmREaXNwYXRjaGVycy5oIiAl
IHNlbGYubW9kZWwoKS5mcmFtZXdvcmsuc2V0dGluZygncHJlZml4JykKKworICAgIGRlZiBkb21h
aW5zX3RvX2dlbmVyYXRlKHNlbGYpOgorICAgICAgICByZXR1cm4gZmlsdGVyKGxhbWJkYSBkb21h
aW46IGxlbihkb21haW4uZXZlbnRzKSA+IDAsIEdlbmVyYXRvci5kb21haW5zX3RvX2dlbmVyYXRl
KHNlbGYpKQorCisgICAgZGVmIGdlbmVyYXRlX291dHB1dChzZWxmKToKKyAgICAgICAgaGVhZGVy
cyA9IFsKKyAgICAgICAgICAgICciSW5zcGVjdG9yJXNUeXBlQnVpbGRlcnMuaCInICUgc2VsZi5t
b2RlbCgpLmZyYW1ld29yay5zZXR0aW5nKCdwcmVmaXgnKSwKKyAgICAgICAgICAgICc8aW5zcGVj
dG9yL0luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oPicsCisgICAgICAgICAgICAnPGluc3BlY3Rv
ci9JbnNwZWN0b3JWYWx1ZXMuaD4nLAorICAgICAgICAgICAgJzx3dGYvUGFzc1JlZlB0ci5oPics
CisgICAgICAgICAgICAnPHd0Zi90ZXh0L1dURlN0cmluZy5oPiddCisKKyAgICAgICAgaGVhZGVy
X2FyZ3MgPSB7CisgICAgICAgICAgICAnaGVhZGVyR3VhcmRTdHJpbmcnOiByZS5zdWIoJ1xXKycs
ICdfJywgc2VsZi5vdXRwdXRfZmlsZW5hbWUoKSksCisgICAgICAgICAgICAnaW5jbHVkZXMnOiAn
XG4nLmpvaW4oWycjaW5jbHVkZSAnICsgaGVhZGVyIGZvciBoZWFkZXIgaW4gaGVhZGVyc10pLAor
ICAgICAgICAgICAgJ3R5cGVkZWZzJzogJycsCisgICAgICAgICAgICAnaW5wdXRGaWxlbmFtZSc6
IHNlbGYuX2lucHV0X2ZpbGVwYXRoCisgICAgICAgIH0KKworICAgICAgICBzZWN0aW9ucyA9IFtd
CisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLmdlbmVyYXRlX2xpY2Vuc2UoKSkKKyAgICAg
ICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKFRlbXBsYXRlcy5DcHBIZWFkZXJQcmVsdWRlKS5z
dWJzdGl0dXRlKE5vbmUsICoqaGVhZGVyX2FyZ3MpKQorICAgICAgICBzZWN0aW9ucy5leHRlbmQo
bWFwKHNlbGYuX2dlbmVyYXRlX2Rpc3BhdGNoZXJfZGVjbGFyYXRpb25zX2Zvcl9kb21haW4sIHNl
bGYuZG9tYWluc190b19nZW5lcmF0ZSgpKSkKKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBs
YXRlKFRlbXBsYXRlcy5DcHBIZWFkZXJQb3N0bHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRl
cl9hcmdzKSkKKyAgICAgICAgcmV0dXJuICJcblxuIi5qb2luKHNlY3Rpb25zKQorCisgICAgIyBQ
cml2YXRlIG1ldGhvZHMuCisKKyAgICBkZWYgX2dlbmVyYXRlX2Fub255bW91c19lbnVtX2Zvcl9w
YXJhbWV0ZXIoc2VsZiwgcGFyYW1ldGVyLCBldmVudCk6CisgICAgICAgIGVudW1fYXJncyA9IHsK
KyAgICAgICAgICAgICdwYXJhbWV0ZXJOYW1lJzogcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lLAor
ICAgICAgICAgICAgJ2V2ZW50TmFtZSc6IGV2ZW50LmV2ZW50X25hbWUKKyAgICAgICAgfQorCisg
ICAgICAgIGxpbmVzID0gW10KKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIC8vIE5hbWVk
IGFmdGVyIHBhcmFtZXRlciBcJyUocGFyYW1ldGVyTmFtZSlzXCcgd2hpbGUgZ2VuZXJhdGluZyBj
b21tYW5kL2V2ZW50ICUoZXZlbnROYW1lKXMuJyAlIGVudW1fYXJncykKKyAgICAgICAgbGluZXMu
YXBwZW5kKCcgICAgICAgIGVudW0gY2xhc3MgJXMgeycgJSB1Y2ZpcnN0KHBhcmFtZXRlci5wYXJh
bWV0ZXJfbmFtZSkpCisgICAgICAgIGZvciBlbnVtX3ZhbHVlIGluIHBhcmFtZXRlci50eXBlLmVu
dW1fdmFsdWVzKCk6CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgICAgICVzID0g
JWQsJyAlIChHZW5lcmF0b3Iuc3R5bGl6ZWRfbmFtZV9mb3JfZW51bV92YWx1ZShlbnVtX3ZhbHVl
KSwgc2VsZi5lbmNvZGluZ19mb3JfZW51bV92YWx1ZShlbnVtX3ZhbHVlKSkpCisgICAgICAgIGxp
bmVzLmFwcGVuZCgnICAgICAgICB9OyAvLyBlbnVtIGNsYXNzICVzJyAlIHVjZmlyc3QocGFyYW1l
dGVyLnBhcmFtZXRlcl9uYW1lKSkKKyAgICAgICAgcmV0dXJuICJcbiIuam9pbihsaW5lcykKKwor
ICAgIGRlZiBfZ2VuZXJhdGVfZGlzcGF0Y2hlcl9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbihzZWxm
LCBkb21haW4pOgorICAgICAgICBjbGFzc0NvbXBvbmVudHMgPSBbJ2NsYXNzJ10KKyAgICAgICAg
ZXhwb3J0TWFjcm8gPSBzZWxmLm1vZGVsKCkuZnJhbWV3b3JrLnNldHRpbmcoJ2V4cG9ydF9tYWNy
bycsIE5vbmUpCisgICAgICAgIGlmIGV4cG9ydE1hY3JvIGlzIG5vdCBOb25lOgorICAgICAgICAg
ICAgY2xhc3NDb21wb25lbnRzLmFwcGVuZChleHBvcnRNYWNybykKKworICAgICAgICB1c2VkX2Vu
dW1fbmFtZXMgPSBzZXQoW10pCisKKyAgICAgICAgZXZlbnRfZGVjbGFyYXRpb25zID0gW10KKyAg
ICAgICAgZm9yIGV2ZW50IGluIGRvbWFpbi5ldmVudHM6CisgICAgICAgICAgICBldmVudF9kZWNs
YXJhdGlvbnMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2Rpc3BhdGNoZXJfZGVjbGFyYXRpb25fZm9y
X2V2ZW50KGV2ZW50LCBkb21haW4sIHVzZWRfZW51bV9uYW1lcykpCisKKyAgICAgICAgaGFuZGxl
cl9hcmdzID0geworICAgICAgICAgICAgJ2NsYXNzQW5kRXhwb3J0TWFjcm8nOiAiICIuam9pbihj
bGFzc0NvbXBvbmVudHMpLAorICAgICAgICAgICAgJ2RvbWFpbk5hbWUnOiBkb21haW4uZG9tYWlu
X25hbWUsCisgICAgICAgICAgICAnZXZlbnREZWNsYXJhdGlvbnMnOiAiXG4iLmpvaW4oZXZlbnRf
ZGVjbGFyYXRpb25zKQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIEdlbmVyYXRvci53cmFw
X3dpdGhfZ3VhcmRfZm9yX2RvbWFpbihkb21haW4sIFRlbXBsYXRlKFRlbXBsYXRlcy5Gcm9udGVu
ZERpc3BhdGNoZXJEb21haW5EaXNwYXRjaGVyRGVjbGFyYXRpb24pLnN1YnN0aXR1dGUoTm9uZSwg
KipoYW5kbGVyX2FyZ3MpKQorCisgICAgZGVmIF9nZW5lcmF0ZV9kaXNwYXRjaGVyX2RlY2xhcmF0
aW9uX2Zvcl9ldmVudChzZWxmLCBldmVudCwgZG9tYWluLCB1c2VkX2VudW1fbmFtZXMpOgorICAg
ICAgICBmb3JtYWxfcGFyYW1ldGVycyA9IFtdCisgICAgICAgIGxpbmVzID0gW10KKyAgICAgICAg
Zm9yIHBhcmFtZXRlciBpbiBldmVudC5ldmVudF9wYXJhbWV0ZXJzOgorICAgICAgICAgICAgZm9y
bWFsX3BhcmFtZXRlcnMuYXBwZW5kKCclcyAlcycgJSAoR2VuZXJhdG9yLnR5cGVfc3RyaW5nX2Zv
cl9jaGVja2VkX2Zvcm1hbF9ldmVudF9wYXJhbWV0ZXIocGFyYW1ldGVyKSwgcGFyYW1ldGVyLnBh
cmFtZXRlcl9uYW1lKSkKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UocGFyYW1ldGVyLnR5cGUs
IEVudW1UeXBlKSBhbmQgcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lIG5vdCBpbiB1c2VkX2VudW1f
bmFtZXM6CisgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2Fub255
bW91c19lbnVtX2Zvcl9wYXJhbWV0ZXIocGFyYW1ldGVyLCBldmVudCkpCisgICAgICAgICAgICAg
ICAgdXNlZF9lbnVtX25hbWVzLmFkZChwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpCisKKyAgICAg
ICAgbGluZXMuYXBwZW5kKCIgICAgdm9pZCAlcyglcyk7IiAlIChldmVudC5ldmVudF9uYW1lLCAi
LCAiLmpvaW4oZm9ybWFsX3BhcmFtZXRlcnMpKSkKKyAgICAgICAgcmV0dXJuICJcbiIuam9pbihs
aW5lcykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9jb2RlZ2VuL2dlbmVyYXRlX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0
ZV9mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5Cm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY0ZTVh
NjgzZmIyMWNhOTBhZjMzNDU0MmRkZDZiYjA3NmZjZjY1NzQKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9m
cm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5CkBAIC0wLDAgKzEsMTIyIEBACisj
IS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE0IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChjKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisj
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworIyBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisKKworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBzdHJpbmcKK2Zyb20g
c3RyaW5nIGltcG9ydCBUZW1wbGF0ZQorCitmcm9tIGdlbmVyYXRvciBpbXBvcnQgR2VuZXJhdG9y
LCB1Y2ZpcnN0Citmcm9tIGdlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IEdlbmVyYXRvclRlbXBs
YXRlcyBhcyBUZW1wbGF0ZXMKK2Zyb20gbW9kZWxzIGltcG9ydCBPYmplY3RUeXBlLCBBcnJheVR5
cGUKKworbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2JhbCcpCisKKworY2xhc3MgRnJvbnRl
bmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IoR2VuZXJhdG9yKToKKyAgICBkZWYg
X19pbml0X18oc2VsZiwgbW9kZWwsIGlucHV0X2ZpbGVwYXRoKToKKyAgICAgICAgR2VuZXJhdG9y
Ll9faW5pdF9fKHNlbGYsIG1vZGVsLCBpbnB1dF9maWxlcGF0aCkKKworICAgIGRlZiBvdXRwdXRf
ZmlsZW5hbWUoc2VsZik6CisgICAgICAgIHJldHVybiAiSW5zcGVjdG9yJXNGcm9udGVuZERpc3Bh
dGNoZXJzLmNwcCIgJSBzZWxmLm1vZGVsKCkuZnJhbWV3b3JrLnNldHRpbmcoJ3ByZWZpeCcpCisK
KyAgICBkZWYgZG9tYWluc190b19nZW5lcmF0ZShzZWxmKToKKyAgICAgICAgcmV0dXJuIGZpbHRl
cihsYW1iZGEgZG9tYWluOiBsZW4oZG9tYWluLmV2ZW50cykgPiAwLCBHZW5lcmF0b3IuZG9tYWlu
c190b19nZW5lcmF0ZShzZWxmKSkKKworICAgIGRlZiBnZW5lcmF0ZV9vdXRwdXQoc2VsZik6Cisg
ICAgICAgIHNlY29uZGFyeV9oZWFkZXJzID0gWyc8d3RmL3RleHQvQ1N0cmluZy5oPiddCisKKyAg
ICAgICAgaGVhZGVyX2FyZ3MgPSB7CisgICAgICAgICAgICAncHJpbWFyeUluY2x1ZGUnOiAnIklu
c3BlY3RvciVzRnJvbnRlbmREaXNwYXRjaGVycy5oIicgJSBzZWxmLm1vZGVsKCkuZnJhbWV3b3Jr
LnNldHRpbmcoJ3ByZWZpeCcpLAorICAgICAgICAgICAgJ3NlY29uZGFyeUluY2x1ZGVzJzogIlxu
Ii5qb2luKFsnI2luY2x1ZGUgJXMnICUgaGVhZGVyIGZvciBoZWFkZXIgaW4gc2Vjb25kYXJ5X2hl
YWRlcnNdKSwKKyAgICAgICAgICAgICdpbnB1dEZpbGVuYW1lJzogc2VsZi5faW5wdXRfZmlsZXBh
dGgKKyAgICAgICAgfQorCisgICAgICAgIHNlY3Rpb25zID0gW10KKyAgICAgICAgc2VjdGlvbnMu
YXBwZW5kKHNlbGYuZ2VuZXJhdGVfbGljZW5zZSgpKQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQo
VGVtcGxhdGUoVGVtcGxhdGVzLkNwcEltcGxlbWVudGF0aW9uUHJlbHVkZSkuc3Vic3RpdHV0ZShO
b25lLCAqKmhlYWRlcl9hcmdzKSkKKyAgICAgICAgc2VjdGlvbnMuZXh0ZW5kKG1hcChzZWxmLl9n
ZW5lcmF0ZV9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uc19mb3JfZG9tYWluLCBzZWxmLmRvbWFp
bnNfdG9fZ2VuZXJhdGUoKSkpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChUZW1wbGF0ZShUZW1w
bGF0ZXMuQ3BwSW1wbGVtZW50YXRpb25Qb3N0bHVkZSkuc3Vic3RpdHV0ZShOb25lLCAqKmhlYWRl
cl9hcmdzKSkKKyAgICAgICAgcmV0dXJuICJcblxuIi5qb2luKHNlY3Rpb25zKQorCisgICAgIyBQ
cml2YXRlIG1ldGhvZHMuCisKKyAgICBkZWYgX2dlbmVyYXRlX2Rpc3BhdGNoZXJfaW1wbGVtZW50
YXRpb25zX2Zvcl9kb21haW4oc2VsZiwgZG9tYWluKToKKyAgICAgICAgaW1wbGVtZW50YXRpb25z
ID0gW10KKyAgICAgICAgZm9yIGV2ZW50IGluIGRvbWFpbi5ldmVudHM6CisgICAgICAgICAgICBp
bXBsZW1lbnRhdGlvbnMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2Rpc3BhdGNoZXJfaW1wbGVtZW50
YXRpb25fZm9yX2V2ZW50KGV2ZW50LCBkb21haW4pKQorCisgICAgICAgIHJldHVybiBHZW5lcmF0
b3Iud3JhcF93aXRoX2d1YXJkX2Zvcl9kb21haW4oZG9tYWluLCAiXG5cbiIuam9pbihpbXBsZW1l
bnRhdGlvbnMpKQorCisgICAgZGVmIF9nZW5lcmF0ZV9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9u
X2Zvcl9ldmVudChzZWxmLCBldmVudCwgZG9tYWluKToKKyAgICAgICAgbGluZXMgPSBbXQorICAg
ICAgICBwYXJhbWV0ZXJfYXNzaWdubWVudHMgPSBbXQorICAgICAgICBmb3JtYWxfcGFyYW1ldGVy
cyA9IFtdCisKKyAgICAgICAgZm9yIHBhcmFtZXRlciBpbiBldmVudC5ldmVudF9wYXJhbWV0ZXJz
OgorCisgICAgICAgICAgICBwYXJhbWV0ZXJfdmFsdWUgPSBwYXJhbWV0ZXIucGFyYW1ldGVyX25h
bWUKKyAgICAgICAgICAgIGlmIHBhcmFtZXRlci5pc19vcHRpb25hbCBhbmQgbm90IEdlbmVyYXRv
ci5zaG91bGRfcGFzc19ieV9jb3B5X2Zvcl9yZXR1cm5fdHlwZShwYXJhbWV0ZXIudHlwZSk6Cisg
ICAgICAgICAgICAgICAgcGFyYW1ldGVyX3ZhbHVlID0gJyonICsgcGFyYW1ldGVyX3ZhbHVlCisg
ICAgICAgICAgICBpZiBwYXJhbWV0ZXIudHlwZS5pc19lbnVtKCk6CisgICAgICAgICAgICAgICAg
ZnJhbWV3b3JrX3ByZWZpeCA9IHNlbGYubW9kZWwoKS5mcmFtZXdvcmsuc2V0dGluZygncHJlZml4
JykKKyAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfdmFsdWUgPSAnSW5zcGVjdG9yOjpUeXBlQnVp
bGRlcjo6Z2V0JXNFbnVtQ29uc3RhbnRWYWx1ZSglcyknICUgKGZyYW1ld29ya19wcmVmaXgsIHBh
cmFtZXRlcl92YWx1ZSkKKworICAgICAgICAgICAgcGFyYW1ldGVyX2FyZ3MgPSB7CisgICAgICAg
ICAgICAgICAgJ3BhcmFtZXRlclR5cGUnOiBHZW5lcmF0b3IudHlwZV9zdHJpbmdfZm9yX3N0YWNr
X291dF9wYXJhbWV0ZXIocGFyYW1ldGVyKSwKKyAgICAgICAgICAgICAgICAncGFyYW1ldGVyTmFt
ZSc6IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwKKyAgICAgICAgICAgICAgICAncGFyYW1ldGVy
VmFsdWUnOiBwYXJhbWV0ZXJfdmFsdWUsCisgICAgICAgICAgICAgICAgJ2tleWVkU2V0TWV0aG9k
JzogR2VuZXJhdG9yLmtleWVkX3NldF9tZXRob2RfZm9yX3R5cGUocGFyYW1ldGVyLnR5cGUpLAor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6Cisg
ICAgICAgICAgICAgICAgcGFyYW1ldGVyX2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgIGlmICglKHBh
cmFtZXRlck5hbWUpcyknICUgcGFyYW1ldGVyX2FyZ3MpCisgICAgICAgICAgICAgICAgcGFyYW1l
dGVyX2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgICAgICBwYXJhbXNPYmplY3QtPiUoa2V5ZWRTZXRN
ZXRob2QpcyhBU0NJSUxpdGVyYWwoIiUocGFyYW1ldGVyTmFtZSlzIiksICUocGFyYW1ldGVyVmFs
dWUpcyk7JyAlIHBhcmFtZXRlcl9hcmdzKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAg
ICAgICBwYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAgcGFyYW1zT2JqZWN0LT4lKGtl
eWVkU2V0TWV0aG9kKXMoQVNDSUlMaXRlcmFsKCIlKHBhcmFtZXRlck5hbWUpcyIpLCAlKHBhcmFt
ZXRlclZhbHVlKXMpOycgJSBwYXJhbWV0ZXJfYXJncykKKworICAgICAgICAgICAgZm9ybWFsX3Bh
cmFtZXRlcnMuYXBwZW5kKCclcyAlcycgJSAoR2VuZXJhdG9yLnR5cGVfc3RyaW5nX2Zvcl9jaGVj
a2VkX2Zvcm1hbF9ldmVudF9wYXJhbWV0ZXIocGFyYW1ldGVyKSwgcGFyYW1ldGVyLnBhcmFtZXRl
cl9uYW1lKSkKKworICAgICAgICBldmVudF9hcmdzID0geworICAgICAgICAgICAgJ2RvbWFpbk5h
bWUnOiBkb21haW4uZG9tYWluX25hbWUsCisgICAgICAgICAgICAnZXZlbnROYW1lJzogZXZlbnQu
ZXZlbnRfbmFtZSwKKyAgICAgICAgICAgICdmb3JtYWxQYXJhbWV0ZXJzJzogIiwgIi5qb2luKGZv
cm1hbF9wYXJhbWV0ZXJzKQorICAgICAgICB9CisKKyAgICAgICAgbGluZXMuYXBwZW5kKCd2b2lk
IEluc3BlY3RvciUoZG9tYWluTmFtZSlzRnJvbnRlbmREaXNwYXRjaGVyOjolKGV2ZW50TmFtZSlz
KCUoZm9ybWFsUGFyYW1ldGVycylzKScgJSBldmVudF9hcmdzKQorICAgICAgICBsaW5lcy5hcHBl
bmQoJ3snKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBqc29uTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7JykKKyAgICAgICAgbGlu
ZXMuYXBwZW5kKCcgICAganNvbk1lc3NhZ2UtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoIm1ldGhv
ZCIpLCBBU0NJSUxpdGVyYWwoIiUoZG9tYWluTmFtZSlzLiUoZXZlbnROYW1lKXMiKSk7JyAlIGV2
ZW50X2FyZ3MpCisKKyAgICAgICAgaWYgbGVuKHBhcmFtZXRlcl9hc3NpZ25tZW50cykgPiAwOgor
ICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFy
YW1zT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsnKQorICAgICAgICAgICAgbGlu
ZXMuZXh0ZW5kKHBhcmFtZXRlcl9hc3NpZ25tZW50cykKKyAgICAgICAgICAgIGxpbmVzLmFwcGVu
ZCgnICAgIGpzb25NZXNzYWdlLT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJwYXJhbXMiKSwgcGFy
YW1zT2JqZWN0KTsnKQorCisgICAgICAgIGxpbmVzLmFwcGVuZCgnJykKKyAgICAgICAgbGluZXMu
YXBwZW5kKCcgICAgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9u
dGVuZChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOycpCisgICAgICAgIGxpbmVzLmFwcGVu
ZCgnfScpCisgICAgICAgIHJldHVybiAiXG4iLmpvaW4obGluZXMpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV90eXBl
X2J1aWxkZXJfaGVhZGVyLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2NvZGVnZW4vZ2VuZXJhdGVfdHlwZV9idWlsZGVyX2hlYWRlci5weQpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43
OWY2NzZmNmU1YjI4NTM0MWEzYjFhMmQ0NzAxNTgwYTI3ZTUxZmJkCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJh
dGVfdHlwZV9idWlsZGVyX2hlYWRlci5weQpAQCAtMCwwICsxLDM0NiBAQAorIyEvdXNyL2Jpbi9l
bnYgcHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoYykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJl
IG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyMgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisjIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMg
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorCisKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgcmUKK2ltcG9ydCBzdHJpbmcKK2Zyb20g
c3RyaW5nIGltcG9ydCBUZW1wbGF0ZQorCitmcm9tIGdlbmVyYXRvciBpbXBvcnQgR2VuZXJhdG9y
LCB1Y2ZpcnN0Citmcm9tIGdlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IEdlbmVyYXRvclRlbXBs
YXRlcyBhcyBUZW1wbGF0ZXMKK2Zyb20gbW9kZWxzIGltcG9ydCBFbnVtVHlwZSwgT2JqZWN0VHlw
ZSwgUHJpbWl0aXZlVHlwZSwgQWxpYXNlZFR5cGUsIEFycmF5VHlwZSwgRnJhbWV3b3JrcworCits
b2cgPSBsb2dnaW5nLmdldExvZ2dlcignZ2xvYmFsJykKKworCitjbGFzcyBUeXBlQnVpbGRlckhl
YWRlckdlbmVyYXRvcihHZW5lcmF0b3IpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtb2RlbCwg
aW5wdXRfZmlsZXBhdGgpOgorICAgICAgICBHZW5lcmF0b3IuX19pbml0X18oc2VsZiwgbW9kZWws
IGlucHV0X2ZpbGVwYXRoKQorCisgICAgZGVmIG91dHB1dF9maWxlbmFtZShzZWxmKToKKyAgICAg
ICAgcmV0dXJuICJJbnNwZWN0b3Ilc1R5cGVCdWlsZGVycy5oIiAlIHNlbGYubW9kZWwoKS5mcmFt
ZXdvcmsuc2V0dGluZygncHJlZml4JykKKworICAgIGRlZiBnZW5lcmF0ZV9vdXRwdXQoc2VsZik6
CisgICAgICAgIGRvbWFpbnMgPSBzZWxmLmRvbWFpbnNfdG9fZ2VuZXJhdGUoKQorICAgICAgICBz
ZWxmLmNhbGN1bGF0ZV90eXBlc19yZXF1aXJpbmdfc2hhcGVfYXNzZXJ0aW9ucyhkb21haW5zKQor
CisgICAgICAgIGhlYWRlcnMgPSBzZXQoWworICAgICAgICAgICAgJzxpbnNwZWN0b3IvSW5zcGVj
dG9yVHlwZUJ1aWxkZXIuaD4nLAorICAgICAgICAgICAgJzx3dGYvQXNzZXJ0aW9ucy5oPicsCisg
ICAgICAgICAgICAnPHd0Zi9QYXNzUmVmUHRyLmg+JworICAgICAgICBdKQorCisgICAgICAgIGlm
IHNlbGYubW9kZWwoKS5mcmFtZXdvcmsgaXMgbm90IEZyYW1ld29ya3MuSmF2YVNjcmlwdENvcmU6
CisgICAgICAgICAgICBoZWFkZXJzLmFkZCgnPGluc3BlY3Rvci9JbnNwZWN0b3JKU1R5cGVCdWls
ZGVycy5oPicpCisKKyAgICAgICAgZXhwb3J0X21hY3JvID0gc2VsZi5tb2RlbCgpLmZyYW1ld29y
ay5zZXR0aW5nKCdleHBvcnRfbWFjcm8nLCBOb25lKQorICAgICAgICBmcmFtZXdvcmtfcHJlZml4
ID0gc2VsZi5tb2RlbCgpLmZyYW1ld29yay5zZXR0aW5nKCdwcmVmaXgnKQorCisgICAgICAgIGhl
YWRlcl9hcmdzID0geworICAgICAgICAgICAgJ2hlYWRlckd1YXJkU3RyaW5nJzogcmUuc3ViKCdc
VysnLCAnXycsIHNlbGYub3V0cHV0X2ZpbGVuYW1lKCkpLAorICAgICAgICAgICAgJ2luY2x1ZGVz
JzogJ1xuJy5qb2luKFsnI2luY2x1ZGUgJyArIGhlYWRlciBmb3IgaGVhZGVyIGluIHNvcnRlZCho
ZWFkZXJzKV0pLAorICAgICAgICAgICAgJ3R5cGVkZWZzJzogJycsCisgICAgICAgICAgICAnaW5w
dXRGaWxlbmFtZSc6IHNlbGYuX2lucHV0X2ZpbGVwYXRoCisgICAgICAgIH0KKworICAgICAgICBy
ZXR1cm5fdHlwZSA9ICdTdHJpbmcnCisgICAgICAgIHJldHVybl90eXBlX3dpdGhfZXhwb3J0X21h
Y3JvID0gW3JldHVybl90eXBlXQorICAgICAgICBpZiBleHBvcnRfbWFjcm8gaXMgbm90IE5vbmU6
CisgICAgICAgICAgICByZXR1cm5fdHlwZV93aXRoX2V4cG9ydF9tYWNyb1s6MF0gPSBbZXhwb3J0
X21hY3JvXQorCisgICAgICAgIHNlY3Rpb25zID0gW10KKyAgICAgICAgc2VjdGlvbnMuYXBwZW5k
KHNlbGYuZ2VuZXJhdGVfbGljZW5zZSgpKQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVtcGxh
dGUoVGVtcGxhdGVzLkNwcEhlYWRlclByZWx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJf
YXJncykpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZCgnbmFtZXNwYWNlIFR5cGVCdWlsZGVyIHsn
KQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfZm9yd2FyZF9kZWNsYXJh
dGlvbnMoZG9tYWlucykpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV90
eXBlZGVmcyhkb21haW5zKSkKKyAgICAgICAgc2VjdGlvbnMuYXBwZW5kKCclcyBnZXQlc0VudW1D
b25zdGFudFZhbHVlKGludCBjb2RlKTsnICUgKCcgJy5qb2luKHJldHVybl90eXBlX3dpdGhfZXhw
b3J0X21hY3JvKSwgZnJhbWV3b3JrX3ByZWZpeCkpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZCgn
XG4nLmpvaW4oWworICAgICAgICAgICAgJ3RlbXBsYXRlPHR5cGVuYW1lIFQ+ICVzIGdldCVzRW51
bUNvbnN0YW50VmFsdWUoVCBlbnVtVmFsdWUpJyAlIChyZXR1cm5fdHlwZSwgZnJhbWV3b3JrX3By
ZWZpeCksCisgICAgICAgICAgICAneycsCisgICAgICAgICAgICAnICAgIHJldHVybiBnZXQlc0Vu
dW1Db25zdGFudFZhbHVlKHN0YXRpY19jYXN0PGludD4oZW51bVZhbHVlKSk7JyAlIGZyYW1ld29y
a19wcmVmaXgsCisgICAgICAgICAgICAnfSddKSkKKworICAgICAgICBidWlsZGVyX3NlY3Rpb25z
ID0gbWFwKHNlbGYuX2dlbmVyYXRlX2J1aWxkZXJzX2Zvcl9kb21haW4sIGRvbWFpbnMpCisgICAg
ICAgIHNlY3Rpb25zLmV4dGVuZChmaWx0ZXIobGFtYmRhIHNlY3Rpb246IGxlbihzZWN0aW9uKSA+
IDAsIGJ1aWxkZXJfc2VjdGlvbnMpKQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5fZ2Vu
ZXJhdGVfZm9yd2FyZF9kZWNsYXJhdGlvbnNfZm9yX2JpbmRpbmdfdHJhaXRzKCkpCisgICAgICAg
IHNlY3Rpb25zLmFwcGVuZCgnfSAvLyBuYW1lc3BhY2UgVHlwZUJ1aWxkZXInKQorICAgICAgICBz
ZWN0aW9ucy5hcHBlbmQoVGVtcGxhdGUoVGVtcGxhdGVzLkNwcEhlYWRlclBvc3RsdWRlKS5zdWJz
dGl0dXRlKE5vbmUsICoqaGVhZGVyX2FyZ3MpKQorICAgICAgICByZXR1cm4gIlxuXG4iLmpvaW4o
c2VjdGlvbnMpCisKKyAgICAjIFByaXZhdGUgbWV0aG9kcy4KKworICAgICMgRklYTUU6IG1vdmUg
YnVpbGRlcnMgb3V0IG9mIGNsYXNzZXMsIHVuY29tbWVudCBmb3J3YXJkIGRlY2xhcmF0aW9uCisK
KyAgICBkZWYgX2dlbmVyYXRlX2ZvcndhcmRfZGVjbGFyYXRpb25zKHNlbGYsIGRvbWFpbnMpOgor
ICAgICAgICBzZWN0aW9ucyA9IFtdCisKKyAgICAgICAgZm9yIGRvbWFpbiBpbiBkb21haW5zOgor
ICAgICAgICAgICAgZGVjbGFyYXRpb25fdHlwZXMgPSBbZGVjbC50eXBlIGZvciBkZWNsIGluIGRv
bWFpbi50eXBlX2RlY2xhcmF0aW9uc10KKyAgICAgICAgICAgIG9iamVjdF90eXBlcyA9IGZpbHRl
cihsYW1iZGEgX3R5cGU6IGlzaW5zdGFuY2UoX3R5cGUsIE9iamVjdFR5cGUpLCBkZWNsYXJhdGlv
bl90eXBlcykKKyAgICAgICAgICAgIGVudW1fdHlwZXMgPSBmaWx0ZXIobGFtYmRhIF90eXBlOiBp
c2luc3RhbmNlKF90eXBlLCBFbnVtVHlwZSksIGRlY2xhcmF0aW9uX3R5cGVzKQorICAgICAgICAg
ICAgaWYgbGVuKG9iamVjdF90eXBlcykgKyBsZW4oZW51bV90eXBlcykgPT0gMDoKKyAgICAgICAg
ICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBkb21haW5fbGluZXMgPSBbXQorICAgICAg
ICAgICAgZG9tYWluX2xpbmVzLmFwcGVuZCgnbmFtZXNwYWNlICVzIHsnICUgZG9tYWluLmRvbWFp
bl9uYW1lKQorCisgICAgICAgICAgICBvYmplY3RfdHlwZV9uYW1lcyA9IFtfdHlwZS5yYXdfbmFt
ZSgpIGZvciBfdHlwZSBpbiBvYmplY3RfdHlwZXNdCisgICAgICAgICAgICBlbnVtX3R5cGVfbmFt
ZXMgPSBbX3R5cGUucmF3X25hbWUoKSBmb3IgX3R5cGUgaW4gZW51bV90eXBlc10KKworICAgICAg
ICAgICAgIyBGb3J3YXJkLWRlY2xhcmUgYWxsIGNsYXNzZXMgc28gdGhlIHR5cGUgYnVpbGRlcnMg
d29uJ3QgYnJlYWsgaWYgcmVhcnJhbmdlZC4KKyAgICAgICAgICAgIGRvbWFpbl9saW5lcy5leHRl
bmQoJ2NsYXNzICVzOycgJSBuYW1lIGZvciBuYW1lIGluIHNvcnRlZChvYmplY3RfdHlwZV9uYW1l
cykpCisgICAgICAgICAgICBkb21haW5fbGluZXMuZXh0ZW5kKCdlbnVtIGNsYXNzICVzOycgJSBu
YW1lIGZvciBuYW1lIGluIHNvcnRlZChlbnVtX3R5cGVfbmFtZXMpKQorICAgICAgICAgICAgZG9t
YWluX2xpbmVzLmFwcGVuZCgnfSAvLyAlcycgJSBkb21haW4uZG9tYWluX25hbWUpCisgICAgICAg
ICAgICBzZWN0aW9ucy5hcHBlbmQoR2VuZXJhdG9yLndyYXBfd2l0aF9ndWFyZF9mb3JfZG9tYWlu
KGRvbWFpbiwgJ1xuJy5qb2luKGRvbWFpbl9saW5lcykpKQorCisgICAgICAgIGlmIGxlbihzZWN0
aW9ucykgPT0gMDoKKyAgICAgICAgICAgIHJldHVybiAnJworICAgICAgICBlbHNlOgorICAgICAg
ICAgICAgcmV0dXJuICIiIi8vIEZvcndhcmQgZGVjbGFyYXRpb25zLgorJXMKKy8vIEVuZCBvZiBm
b3J3YXJkIGRlY2xhcmF0aW9ucy4KKyIiIiAlICdcblxuJy5qb2luKHNlY3Rpb25zKQorCisgICAg
ZGVmIF9nZW5lcmF0ZV90eXBlZGVmcyhzZWxmLCBkb21haW5zKToKKyAgICAgICAgc2VjdGlvbnMg
PSBtYXAoc2VsZi5fZ2VuZXJhdGVfdHlwZWRlZnNfZm9yX2RvbWFpbiwgZG9tYWlucykKKyAgICAg
ICAgc2VjdGlvbnMgPSBmaWx0ZXIobGFtYmRhIHRleHQ6IGxlbih0ZXh0KSA+IDAsIHNlY3Rpb25z
KQorCisgICAgICAgIGlmIGxlbihzZWN0aW9ucykgPT0gMDoKKyAgICAgICAgICAgIHJldHVybiAn
JworICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuICIiIi8vIFR5cGVkZWZzLgorJXMK
Ky8vIEVuZCBvZiB0eXBlZGVmcy4iIiIgJSAnXG5cbicuam9pbihzZWN0aW9ucykKKworICAgIGRl
ZiBfZ2VuZXJhdGVfdHlwZWRlZnNfZm9yX2RvbWFpbihzZWxmLCBkb21haW4pOgorICAgICAgICBw
cmltaXRpdmVfZGVjbGFyYXRpb25zID0gZmlsdGVyKGxhbWJkYSBkZWNsOiBpc2luc3RhbmNlKGRl
Y2wudHlwZSwgQWxpYXNlZFR5cGUpLCBkb21haW4udHlwZV9kZWNsYXJhdGlvbnMpCisgICAgICAg
IGlmIGxlbihwcmltaXRpdmVfZGVjbGFyYXRpb25zKSA9PSAwOgorICAgICAgICAgICAgcmV0dXJu
ICcnCisKKyAgICAgICAgc2VjdGlvbnMgPSBbXQorICAgICAgICBmb3IgZGVjbGFyYXRpb24gaW4g
cHJpbWl0aXZlX2RlY2xhcmF0aW9uczoKKyAgICAgICAgICAgIHByaW1pdGl2ZV9uYW1lID0gR2Vu
ZXJhdG9yLmNwcF9uYW1lX2Zvcl9wcmltaXRpdmVfdHlwZShkZWNsYXJhdGlvbi50eXBlLmFsaWFz
ZWRfdHlwZSkKKyAgICAgICAgICAgIHR5cGVkZWZfbGluZXMgPSBbXQorICAgICAgICAgICAgaWYg
bGVuKGRlY2xhcmF0aW9uLmRlc2NyaXB0aW9uKSA+IDA6CisgICAgICAgICAgICAgICAgdHlwZWRl
Zl9saW5lcy5hcHBlbmQoJy8qICVzICovJyAlIGRlY2xhcmF0aW9uLmRlc2NyaXB0aW9uKQorICAg
ICAgICAgICAgdHlwZWRlZl9saW5lcy5hcHBlbmQoJ3R5cGVkZWYgJXMgJXM7JyAlIChwcmltaXRp
dmVfbmFtZSwgZGVjbGFyYXRpb24udHlwZV9uYW1lKSkKKyAgICAgICAgICAgIHNlY3Rpb25zLmFw
cGVuZCgnXG4nLmpvaW4odHlwZWRlZl9saW5lcykpCisKKyAgICAgICAgbGluZXMgPSBbXQorICAg
ICAgICBsaW5lcy5hcHBlbmQoJ25hbWVzcGFjZSAlcyB7JyAlIGRvbWFpbi5kb21haW5fbmFtZSkK
KyAgICAgICAgbGluZXMuYXBwZW5kKCdcblxuJy5qb2luKHNlY3Rpb25zKSkKKyAgICAgICAgbGlu
ZXMuYXBwZW5kKCd9IC8vICVzJyAlIGRvbWFpbi5kb21haW5fbmFtZSkKKyAgICAgICAgcmV0dXJu
IEdlbmVyYXRvci53cmFwX3dpdGhfZ3VhcmRfZm9yX2RvbWFpbihkb21haW4sICdcbicuam9pbihs
aW5lcykpCisKKyAgICBkZWYgX2dlbmVyYXRlX2J1aWxkZXJzX2Zvcl9kb21haW4oc2VsZiwgZG9t
YWluKToKKyAgICAgICAgc2VjdGlvbnMgPSBbXQorCisgICAgICAgIGZvciB0eXBlX2RlY2xhcmF0
aW9uIGluIGRvbWFpbi50eXBlX2RlY2xhcmF0aW9uczoKKyAgICAgICAgICAgIGlmIGlzaW5zdGFu
Y2UodHlwZV9kZWNsYXJhdGlvbi50eXBlLCBFbnVtVHlwZSk6CisgICAgICAgICAgICAgICAgc2Vj
dGlvbnMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX3N0cnVjdF9mb3JfZW51bV9kZWNsYXJhdGlvbih0
eXBlX2RlY2xhcmF0aW9uKSkKKyAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh0eXBlX2RlY2xh
cmF0aW9uLnR5cGUsIE9iamVjdFR5cGUpOgorICAgICAgICAgICAgICAgIHNlY3Rpb25zLmFwcGVu
ZChzZWxmLl9nZW5lcmF0ZV9jbGFzc19mb3Jfb2JqZWN0X2RlY2xhcmF0aW9uKHR5cGVfZGVjbGFy
YXRpb24sIGRvbWFpbikpCisKKyAgICAgICAgc2VjdGlvbnMgPSBmaWx0ZXIobGFtYmRhIHNlY3Rp
b246IGxlbihzZWN0aW9uKSA+IDAsIHNlY3Rpb25zKQorICAgICAgICBpZiBsZW4oc2VjdGlvbnMp
ID09IDA6CisgICAgICAgICAgICByZXR1cm4gJycKKworICAgICAgICBsaW5lcyA9IFtdCisgICAg
ICAgIGxpbmVzLmFwcGVuZCgnbmFtZXNwYWNlICVzIHsnICUgZG9tYWluLmRvbWFpbl9uYW1lKQor
ICAgICAgICBsaW5lcy5hcHBlbmQoJ1xuJy5qb2luKHNlY3Rpb25zKSkKKyAgICAgICAgbGluZXMu
YXBwZW5kKCd9IC8vICVzJyAlIGRvbWFpbi5kb21haW5fbmFtZSkKKyAgICAgICAgcmV0dXJuIEdl
bmVyYXRvci53cmFwX3dpdGhfZ3VhcmRfZm9yX2RvbWFpbihkb21haW4sICdcbicuam9pbihsaW5l
cykpCisKKyAgICBkZWYgX2dlbmVyYXRlX2NsYXNzX2Zvcl9vYmplY3RfZGVjbGFyYXRpb24oc2Vs
ZiwgdHlwZV9kZWNsYXJhdGlvbiwgZG9tYWluKToKKyAgICAgICAgaWYgbGVuKHR5cGVfZGVjbGFy
YXRpb24udHlwZV9tZW1iZXJzKSA9PSAwOgorICAgICAgICAgICAgcmV0dXJuICcnCisKKyAgICAg
ICAgZW51bV9tZW1iZXJzID0gZmlsdGVyKGxhbWJkYSBtZW1iZXI6IGlzaW5zdGFuY2UobWVtYmVy
LnR5cGUsIEVudW1UeXBlKSBhbmQgbWVtYmVyLnR5cGUuaXNfYW5vbnltb3VzLCB0eXBlX2RlY2xh
cmF0aW9uLnR5cGVfbWVtYmVycykKKyAgICAgICAgcmVxdWlyZWRfbWVtYmVycyA9IGZpbHRlcihs
YW1iZGEgbWVtYmVyOiBub3QgbWVtYmVyLmlzX29wdGlvbmFsLCB0eXBlX2RlY2xhcmF0aW9uLnR5
cGVfbWVtYmVycykKKyAgICAgICAgb3B0aW9uYWxfbWVtYmVycyA9IGZpbHRlcihsYW1iZGEgbWVt
YmVyOiBtZW1iZXIuaXNfb3B0aW9uYWwsIHR5cGVfZGVjbGFyYXRpb24udHlwZV9tZW1iZXJzKQor
ICAgICAgICBvYmplY3RfbmFtZSA9IHR5cGVfZGVjbGFyYXRpb24udHlwZV9uYW1lCisKKyAgICAg
ICAgbGluZXMgPSBbXQorICAgICAgICBpZiBsZW4odHlwZV9kZWNsYXJhdGlvbi5kZXNjcmlwdGlv
bikgPiAwOgorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcvKiAlcyAqLycgJSB0eXBlX2RlY2xh
cmF0aW9uLmRlc2NyaXB0aW9uKQorICAgICAgICBiYXNlX2NsYXNzID0gJ0luc3BlY3Rvcjo6SW5z
cGVjdG9yT2JqZWN0JworICAgICAgICBpZiBub3QgR2VuZXJhdG9yLnR5cGVfaGFzX29wZW5fZmll
bGRzKHR5cGVfZGVjbGFyYXRpb24udHlwZSk6CisgICAgICAgICAgICBiYXNlX2NsYXNzID0gYmFz
ZV9jbGFzcyArICdCYXNlJworICAgICAgICBsaW5lcy5hcHBlbmQoJ2NsYXNzICVzIDogcHVibGlj
ICVzIHsnICUgKG9iamVjdF9uYW1lLCBiYXNlX2NsYXNzKSkKKyAgICAgICAgbGluZXMuYXBwZW5k
KCdwdWJsaWM6JykKKyAgICAgICAgZm9yIGVudW1fbWVtYmVyIGluIGVudW1fbWVtYmVyczoKKyAg
ICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5IG5hbWUg
XCclc1wnIHdoaWxlIGdlbmVyYXRpbmcgJXMuJyAlIChlbnVtX21lbWJlci5tZW1iZXJfbmFtZSwg
b2JqZWN0X25hbWUpKQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX3N0
cnVjdF9mb3JfYW5vbnltb3VzX2VudW1fbWVtYmVyKGVudW1fbWVtYmVyKSkKKyAgICAgICAgbGlu
ZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2J1aWxkZXJfc3RhdGVfZW51bSh0eXBlX2RlY2xhcmF0
aW9uKSkKKworICAgICAgICBjb25zdHJ1Y3Rvcl9leGFtcGxlID0gW10KKyAgICAgICAgY29uc3Ry
dWN0b3JfZXhhbXBsZS5hcHBlbmQoJyAgICAgKiBSZWZQdHI8JXM+IHJlc3VsdCA9ICVzOjpjcmVh
dGUoKScgJSAob2JqZWN0X25hbWUsIG9iamVjdF9uYW1lKSkKKyAgICAgICAgZm9yIG1lbWJlciBp
biByZXF1aXJlZF9tZW1iZXJzOgorICAgICAgICAgICAgY29uc3RydWN0b3JfZXhhbXBsZS5hcHBl
bmQoJyAgICAgKiAgICAgLnNldCVzKC4uLiknICUgdWNmaXJzdChtZW1iZXIubWVtYmVyX25hbWUp
KQorCisgICAgICAgIGJ1aWxkZXJfYXJncyA9IHsKKyAgICAgICAgICAgICdvYmplY3RUeXBlJzog
b2JqZWN0X25hbWUsCisgICAgICAgICAgICAnY29uc3RydWN0b3JFeGFtcGxlJzogJ1xuJy5qb2lu
KGNvbnN0cnVjdG9yX2V4YW1wbGUpICsgJzsnLAorICAgICAgICB9CisKKyAgICAgICAgbGluZXMu
YXBwZW5kKFRlbXBsYXRlKFRlbXBsYXRlcy5UeXBlQnVpbGRlckRlY2xhcmF0aW9uUHJlbHVkZSku
c3Vic3RpdHV0ZShOb25lLCAqKmJ1aWxkZXJfYXJncykpCisgICAgICAgIGZvciB0eXBlX21lbWJl
ciBpbiByZXF1aXJlZF9tZW1iZXJzOgorICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuX2dl
bmVyYXRlX2J1aWxkZXJfc2V0dGVyX2Zvcl9tZW1iZXIodHlwZV9tZW1iZXIsIGRvbWFpbikpCisg
ICAgICAgIGxpbmVzLmFwcGVuZChUZW1wbGF0ZShUZW1wbGF0ZXMuVHlwZUJ1aWxkZXJEZWNsYXJh
dGlvblBvc3RsdWRlKS5zdWJzdGl0dXRlKE5vbmUsICoqYnVpbGRlcl9hcmdzKSkKKyAgICAgICAg
Zm9yIG1lbWJlciBpbiBvcHRpb25hbF9tZW1iZXJzOgorICAgICAgICAgICAgbGluZXMuYXBwZW5k
KHNlbGYuX2dlbmVyYXRlX3VuY2hlY2tlZF9zZXR0ZXJfZm9yX21lbWJlcihtZW1iZXIsIGRvbWFp
bikpCisKKyAgICAgICAgaWYgR2VuZXJhdG9yLnR5cGVfaGFzX29wZW5fZmllbGRzKHR5cGVfZGVj
bGFyYXRpb24udHlwZSk6CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJycpCisgICAgICAgICAg
ICBsaW5lcy5hcHBlbmQoJyAgICAvLyBQcm9wZXJ0eSBuYW1lcyBmb3IgdHlwZSBnZW5lcmF0ZWQg
YXMgb3Blbi4nKQorICAgICAgICAgICAgZm9yIHR5cGVfbWVtYmVyIGluIHR5cGVfZGVjbGFyYXRp
b24udHlwZV9tZW1iZXJzOgorICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIHN0YXRp
YyBjb25zdCBjaGFyKiAlczsnICUgdWNmaXJzdCh0eXBlX21lbWJlci5tZW1iZXJfbmFtZSkpCisK
KyAgICAgICAgbGluZXMuYXBwZW5kKCd9OycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnJykKKyAg
ICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKKworICAgIGRlZiBfZ2VuZXJhdGVfc3RydWN0
X2Zvcl9lbnVtX2RlY2xhcmF0aW9uKHNlbGYsIGVudW1fZGVjbGFyYXRpb24pOgorICAgICAgICBs
aW5lcyA9IFtdCisgICAgICAgIGxpbmVzLmFwcGVuZCgnLyogJXMgKi8nICUgZW51bV9kZWNsYXJh
dGlvbi5kZXNjcmlwdGlvbikKKyAgICAgICAgbGluZXMuZXh0ZW5kKHNlbGYuX2dlbmVyYXRlX3N0
cnVjdF9mb3JfZW51bV90eXBlKGVudW1fZGVjbGFyYXRpb24udHlwZV9uYW1lLCBlbnVtX2RlY2xh
cmF0aW9uLnR5cGUpKQorICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQorCisgICAgZGVm
IF9nZW5lcmF0ZV9zdHJ1Y3RfZm9yX2Fub255bW91c19lbnVtX21lbWJlcihzZWxmLCBlbnVtX21l
bWJlcik6CisgICAgICAgIGRlZiBhcHBseV9pbmRlbnRhdGlvbihsaW5lKToKKyAgICAgICAgICAg
IGlmIGxpbmUuc3RhcnRzd2l0aCgoJyMnLCAnLyonLCAnKi8nLCAnLy8nKSkgb3IgbGVuKGxpbmUp
IGlzIDA6CisgICAgICAgICAgICAgICAgcmV0dXJuIGxpbmUKKyAgICAgICAgICAgIGVsc2U6Cisg
ICAgICAgICAgICAgICAgcmV0dXJuICcgICAgJyArIGxpbmUKKworICAgICAgICBpbmRlbnRlZF9s
aW5lcyA9IG1hcChhcHBseV9pbmRlbnRhdGlvbiwgc2VsZi5fZ2VuZXJhdGVfc3RydWN0X2Zvcl9l
bnVtX3R5cGUoZW51bV9tZW1iZXIubWVtYmVyX25hbWUsIGVudW1fbWVtYmVyLnR5cGUpKQorICAg
ICAgICByZXR1cm4gJ1xuJy5qb2luKGluZGVudGVkX2xpbmVzKQorCisgICAgZGVmIF9nZW5lcmF0
ZV9zdHJ1Y3RfZm9yX2VudW1fdHlwZShzZWxmLCBlbnVtX25hbWUsIGVudW1fdHlwZSk6CisgICAg
ICAgIGxpbmVzID0gW10KKyAgICAgICAgZW51bV9uYW1lID0gdWNmaXJzdChlbnVtX25hbWUpCisg
ICAgICAgIGxpbmVzLmFwcGVuZCgnZW51bSBjbGFzcyAlcyB7JyAlIGVudW1fbmFtZSkKKyAgICAg
ICAgZm9yIGVudW1fdmFsdWUgaW4gZW51bV90eXBlLmVudW1fdmFsdWVzKCk6CisgICAgICAgICAg
ICBsaW5lcy5hcHBlbmQoJyAgICAlcyA9ICVzLCcgJSAoR2VuZXJhdG9yLnN0eWxpemVkX25hbWVf
Zm9yX2VudW1fdmFsdWUoZW51bV92YWx1ZSksIHNlbGYuZW5jb2RpbmdfZm9yX2VudW1fdmFsdWUo
ZW51bV92YWx1ZSkpKQorICAgICAgICBsaW5lcy5hcHBlbmQoJ307IC8vIGVudW0gY2xhc3MgJXMn
ICUgZW51bV9uYW1lKQorICAgICAgICByZXR1cm4gbGluZXMgICMgVGhlIGNhbGxlciBtYXkgd2Fu
dCB0byBhZGp1c3QgaW5kZW50YXRpb24sIHNvIGRvbid0IGpvaW4gdGhlc2UgbGluZXMuCisKKyAg
ICBkZWYgX2dlbmVyYXRlX2J1aWxkZXJfc3RhdGVfZW51bShzZWxmLCB0eXBlX2RlY2xhcmF0aW9u
KToKKyAgICAgICAgbGluZXMgPSBbXQorICAgICAgICByZXF1aXJlZF9tZW1iZXJzID0gZmlsdGVy
KGxhbWJkYSBtZW1iZXI6IG5vdCBtZW1iZXIuaXNfb3B0aW9uYWwsIHR5cGVfZGVjbGFyYXRpb24u
dHlwZV9tZW1iZXJzKQorICAgICAgICBlbnVtX3ZhbHVlcyA9IFtdCisKKyAgICAgICAgbGluZXMu
YXBwZW5kKCcgICAgZW51bSB7JykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIE5vRmll
bGRzU2V0ID0gMCwnKQorICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4ocmVxdWlyZWRfbWVtYmVy
cykpOgorICAgICAgICAgICAgZW51bV92YWx1ZSA9ICIlc1NldCIgJSB1Y2ZpcnN0KHJlcXVpcmVk
X21lbWJlcnNbaV0ubWVtYmVyX25hbWUpCisgICAgICAgICAgICBlbnVtX3ZhbHVlcy5hcHBlbmQo
ZW51bV92YWx1ZSkKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICAlcyA9IDEgPDwg
JWQsJyAlIChlbnVtX3ZhbHVlLCBpKSkKKyAgICAgICAgaWYgbGVuKGVudW1fdmFsdWVzKSA+IDA6
CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgQWxsRmllbGRzU2V0ID0gKCVzKScg
JSAnIHwgJy5qb2luKGVudW1fdmFsdWVzKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxp
bmVzLmFwcGVuZCgnICAgICAgICBBbGxGaWVsZHNTZXQgPSAwJykKKyAgICAgICAgbGluZXMuYXBw
ZW5kKCcgICAgfTsnKQorICAgICAgICBsaW5lcy5hcHBlbmQoJycpCisgICAgICAgIHJldHVybiAn
XG4nLmpvaW4obGluZXMpCisKKyAgICBkZWYgX2dlbmVyYXRlX2J1aWxkZXJfc2V0dGVyX2Zvcl9t
ZW1iZXIoc2VsZiwgdHlwZV9tZW1iZXIsIGRvbWFpbik6CisgICAgICAgIHNldHRlcl9hcmdzID0g
eworICAgICAgICAgICAgJ2NhbWVsTmFtZSc6IHVjZmlyc3QodHlwZV9tZW1iZXIubWVtYmVyX25h
bWUpLAorICAgICAgICAgICAgJ2ZyYW1ld29ya1ByZWZpeCc6IHNlbGYubW9kZWwoKS5mcmFtZXdv
cmsuc2V0dGluZygncHJlZml4JyksCisgICAgICAgICAgICAna2V5ZWRTZXQnOiBHZW5lcmF0b3Iu
a2V5ZWRfc2V0X21ldGhvZF9mb3JfdHlwZSh0eXBlX21lbWJlci50eXBlKSwKKyAgICAgICAgICAg
ICduYW1lJzogdHlwZV9tZW1iZXIubWVtYmVyX25hbWUsCisgICAgICAgICAgICAncGFyYW1ldGVy
VHlwZSc6IEdlbmVyYXRvci50eXBlX3N0cmluZ19mb3JfdHlwZV9tZW1iZXIodHlwZV9tZW1iZXIp
CisgICAgICAgIH0KKworICAgICAgICBsaW5lcyA9IFtdCisgICAgICAgIGxpbmVzLmFwcGVuZCgn
JykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCAlKGNhbWVs
TmFtZSlzU2V0PiYgc2V0JShjYW1lbE5hbWUpcyglKHBhcmFtZXRlclR5cGUpcyB2YWx1ZSknICUg
c2V0dGVyX2FyZ3MpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICB7JykKKyAgICAgICAg
bGluZXMuYXBwZW5kKCcgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgJShjYW1l
bE5hbWUpc1NldCksIHByb3BlcnR5XyUobmFtZSlzX2FscmVhZHlfc2V0KTsnICUgc2V0dGVyX2Fy
Z3MpCisKKyAgICAgICAgaWYgaXNpbnN0YW5jZSh0eXBlX21lbWJlci50eXBlLCBFbnVtVHlwZSk6
CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgICAgIG1fcmVzdWx0LT4lKGtleWVk
U2V0KXMoQVNDSUlMaXRlcmFsKCIlKG5hbWUpcyIpLCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpn
ZXQlKGZyYW1ld29ya1ByZWZpeClzRW51bUNvbnN0YW50VmFsdWUoc3RhdGljX2Nhc3Q8aW50Pih2
YWx1ZSkpKTsnICUgc2V0dGVyX2FyZ3MpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsaW5l
cy5hcHBlbmQoJyAgICAgICAgICAgIG1fcmVzdWx0LT4lKGtleWVkU2V0KXMoQVNDSUlMaXRlcmFs
KCIlKG5hbWUpcyIpLCB2YWx1ZSk7JyAlIHNldHRlcl9hcmdzKQorICAgICAgICBsaW5lcy5hcHBl
bmQoJyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8JShjYW1lbE5hbWUpc1NldD4oKTsnICUg
c2V0dGVyX2FyZ3MpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICB9JykKKyAgICAgICAg
cmV0dXJuICdcbicuam9pbihsaW5lcykKKworICAgIGRlZiBfZ2VuZXJhdGVfdW5jaGVja2VkX3Nl
dHRlcl9mb3JfbWVtYmVyKHNlbGYsIHR5cGVfbWVtYmVyLCBkb21haW4pOgorICAgICAgICBzZXR0
ZXJfYXJncyA9IHsKKyAgICAgICAgICAgICdjYW1lbE5hbWUnOiB1Y2ZpcnN0KHR5cGVfbWVtYmVy
Lm1lbWJlcl9uYW1lKSwKKyAgICAgICAgICAgICdmcmFtZXdvcmtQcmVmaXgnOiBzZWxmLm1vZGVs
KCkuZnJhbWV3b3JrLnNldHRpbmcoJ3ByZWZpeCcpLAorICAgICAgICAgICAgJ2tleWVkU2V0Jzog
R2VuZXJhdG9yLmtleWVkX3NldF9tZXRob2RfZm9yX3R5cGUodHlwZV9tZW1iZXIudHlwZSksCisg
ICAgICAgICAgICAnbmFtZSc6IHR5cGVfbWVtYmVyLm1lbWJlcl9uYW1lLAorICAgICAgICAgICAg
J3BhcmFtZXRlclR5cGUnOiBHZW5lcmF0b3IudHlwZV9zdHJpbmdfZm9yX3R5cGVfbWVtYmVyKHR5
cGVfbWVtYmVyKQorICAgICAgICB9CisKKyAgICAgICAgbGluZXMgPSBbXQorICAgICAgICBsaW5l
cy5hcHBlbmQoJycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIHZvaWQgc2V0JShjYW1lbE5h
bWUpcyglKHBhcmFtZXRlclR5cGUpcyB2YWx1ZSknICUgc2V0dGVyX2FyZ3MpCisgICAgICAgIGxp
bmVzLmFwcGVuZCgnICAgIHsnKQorICAgICAgICBpZiBpc2luc3RhbmNlKHR5cGVfbWVtYmVyLnR5
cGUsIEVudW1UeXBlKToKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBJbnNwZWN0
b3JPYmplY3RCYXNlOjolKGtleWVkU2V0KXMoQVNDSUlMaXRlcmFsKCIlKG5hbWUpcyIpLCBJbnNw
ZWN0b3I6OlR5cGVCdWlsZGVyOjpnZXQlKGZyYW1ld29ya1ByZWZpeClzRW51bUNvbnN0YW50VmFs
dWUoc3RhdGljX2Nhc3Q8aW50Pih2YWx1ZSkpKTsnICUgc2V0dGVyX2FyZ3MpCisgICAgICAgIGVs
c2U6CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgSW5zcGVjdG9yT2JqZWN0QmFz
ZTo6JShrZXllZFNldClzKEFTQ0lJTGl0ZXJhbCgiJShuYW1lKXMiKSwgdmFsdWUpOycgJSBzZXR0
ZXJfYXJncykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgfScpCisgICAgICAgIHJldHVybiAn
XG4nLmpvaW4obGluZXMpCisKKyAgICBkZWYgX2dlbmVyYXRlX2ZvcndhcmRfZGVjbGFyYXRpb25z
X2Zvcl9iaW5kaW5nX3RyYWl0cyhzZWxmKToKKyAgICAgICAgIyBBIGxpc3Qgb2YgKGJ1aWxkZXJf
dHlwZSwgbmVlZHNfcnVudGltZV9jYXN0KQorICAgICAgICB0eXBlX2FyZ3VtZW50cyA9IFtdCisK
KyAgICAgICAgZm9yIGRvbWFpbiBpbiBzZWxmLmRvbWFpbnNfdG9fZ2VuZXJhdGUoKToKKyAgICAg
ICAgICAgIGRlY2xhcmF0aW9uc190b19nZW5lcmF0ZSA9IGZpbHRlcihsYW1iZGEgZGVjbDogc2Vs
Zi50eXBlX25lZWRzX3NoYXBlX2Fzc2VydGlvbnMoZGVjbC50eXBlKSwgZG9tYWluLnR5cGVfZGVj
bGFyYXRpb25zKQorCisgICAgICAgICAgICBmb3IgdHlwZV9kZWNsYXJhdGlvbiBpbiBkZWNsYXJh
dGlvbnNfdG9fZ2VuZXJhdGU6CisgICAgICAgICAgICAgICAgZm9yIHR5cGVfbWVtYmVyIGluIHR5
cGVfZGVjbGFyYXRpb24udHlwZV9tZW1iZXJzOgorICAgICAgICAgICAgICAgICAgICBpZiBpc2lu
c3RhbmNlKHR5cGVfbWVtYmVyLnR5cGUsIEVudW1UeXBlKToKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHR5cGVfYXJndW1lbnRzLmFwcGVuZCgoR2VuZXJhdG9yLnR5cGVfYnVpbGRlcl9zdHJpbmdf
Zm9yX3R5cGVfbWVtYmVyKHR5cGVfbWVtYmVyLCB0eXBlX2RlY2xhcmF0aW9uKSwgRmFsc2UpKQor
CisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh0eXBlX2RlY2xhcmF0aW9uLnR5cGUsIE9i
amVjdFR5cGUpOgorICAgICAgICAgICAgICAgICAgICB0eXBlX2FyZ3VtZW50cy5hcHBlbmQoKEdl
bmVyYXRvci50eXBlX2J1aWxkZXJfc3RyaW5nX2Zvcl90eXBlKHR5cGVfZGVjbGFyYXRpb24udHlw
ZSksIEdlbmVyYXRvci50eXBlX25lZWRzX3J1bnRpbWVfY2FzdHModHlwZV9kZWNsYXJhdGlvbi50
eXBlKSkpCisKKyAgICAgICAgc3RydWN0X2tleXdvcmRzID0gWydzdHJ1Y3QnXQorICAgICAgICBm
dW5jdGlvbl9rZXl3b3JkcyA9IFsnc3RhdGljIHZvaWQnXQorICAgICAgICBleHBvcnRfbWFjcm8g
PSBzZWxmLm1vZGVsKCkuZnJhbWV3b3JrLnNldHRpbmcoJ2V4cG9ydF9tYWNybycsIE5vbmUpCisg
ICAgICAgIGlmIGV4cG9ydF9tYWNybyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHN0cnVjdF9r
ZXl3b3Jkcy5hcHBlbmQoZXhwb3J0X21hY3JvKQorICAgICAgICAgICAgI2Z1bmN0aW9uX2tleXdv
cmRzWzE6MV0gPSBbZXhwb3J0X21hY3JvXQorCisgICAgICAgIGxpbmVzID0gW10KKyAgICAgICAg
Zm9yIGFyZ3VtZW50IGluIHR5cGVfYXJndW1lbnRzOgorICAgICAgICAgICAgbGluZXMuYXBwZW5k
KCd0ZW1wbGF0ZTw+ICVzIEJpbmRpbmdUcmFpdHM8JXM+IHsnICUgKCcgJy5qb2luKHN0cnVjdF9r
ZXl3b3JkcyksIGFyZ3VtZW50WzBdKSkKKyAgICAgICAgICAgIGlmIGFyZ3VtZW50WzFdOgorICAg
ICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnc3RhdGljIFBhc3NSZWZQdHI8JXM+IHJ1bnRpbWVD
YXN0KFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4gdmFsdWUpOycgJSBhcmd1
bWVudFswXSkKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnI2lmICFBU1NFUlRfRElTQUJMRUQn
KQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCclcyBhc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlw
ZShJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlKik7JyAlICcgJy5qb2luKGZ1bmN0aW9uX2tleXdv
cmRzKSkKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnI2VuZGlmIC8vICFBU1NFUlRfRElTQUJM
RUQnKQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCd9OycpCisgICAgICAgIHJldHVybiAnXG4n
LmpvaW4obGluZXMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV90eXBlX2J1aWxkZXJfaW1wbGVtZW50YXRpb24ucHkg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0
ZV90eXBlX2J1aWxkZXJfaW1wbGVtZW50YXRpb24ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzY5MmFhOGFiOTNj
MTExNmQwOGQxZDhmYjJlZWE4ZmJlMzBiNDEwMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX3R5cGVfYnVp
bGRlcl9pbXBsZW1lbnRhdGlvbi5weQpAQCAtMCwwICsxLDE4NCBAQAorIyEvdXNyL2Jpbi9lbnYg
cHl0aG9uCisjCisjIENvcHlyaWdodCAoYykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisjIENvcHlyaWdodCAoYykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1l
dDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyMgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisj
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisjIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorCisKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgc3RyaW5nCitmcm9tIHN0cmluZyBpbXBvcnQg
VGVtcGxhdGUKKworZnJvbSBnZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvciwgdWNmaXJzdAorZnJv
bSBnZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgVGVtcGxh
dGVzCitmcm9tIG1vZGVscyBpbXBvcnQgQWxpYXNlZFR5cGUsIEFycmF5VHlwZSwgRW51bVR5cGUs
IE9iamVjdFR5cGUKKworbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2JhbCcpCisKKworY2xh
c3MgVHlwZUJ1aWxkZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihHZW5lcmF0b3IpOgorICAgIGRl
ZiBfX2luaXRfXyhzZWxmLCBtb2RlbCwgaW5wdXRfZmlsZXBhdGgpOgorICAgICAgICBHZW5lcmF0
b3IuX19pbml0X18oc2VsZiwgbW9kZWwsIGlucHV0X2ZpbGVwYXRoKQorCisgICAgZGVmIG91dHB1
dF9maWxlbmFtZShzZWxmKToKKyAgICAgICAgcmV0dXJuICJJbnNwZWN0b3Ilc1R5cGVCdWlsZGVy
cy5jcHAiICUgc2VsZi5tb2RlbCgpLmZyYW1ld29yay5zZXR0aW5nKCdwcmVmaXgnKQorCisgICAg
ZGVmIGdlbmVyYXRlX291dHB1dChzZWxmKToKKyAgICAgICAgZG9tYWlucyA9IHNlbGYuZG9tYWlu
c190b19nZW5lcmF0ZSgpCisgICAgICAgIHNlbGYuY2FsY3VsYXRlX3R5cGVzX3JlcXVpcmluZ19z
aGFwZV9hc3NlcnRpb25zKGRvbWFpbnMpCisKKyAgICAgICAgc2Vjb25kYXJ5X2hlYWRlcnMgPSBb
Jzx3dGYvdGV4dC9DU3RyaW5nLmg+J10KKworICAgICAgICBoZWFkZXJfYXJncyA9IHsKKyAgICAg
ICAgICAgICdwcmltYXJ5SW5jbHVkZSc6ICciSW5zcGVjdG9yJXNUeXBlQnVpbGRlcnMuaCInICUg
c2VsZi5tb2RlbCgpLmZyYW1ld29yay5zZXR0aW5nKCdwcmVmaXgnKSwKKyAgICAgICAgICAgICdz
ZWNvbmRhcnlJbmNsdWRlcyc6ICJcbiIuam9pbihbJyNpbmNsdWRlICVzJyAlIGhlYWRlciBmb3Ig
aGVhZGVyIGluIHNlY29uZGFyeV9oZWFkZXJzXSksCisgICAgICAgICAgICAnaW5wdXRGaWxlbmFt
ZSc6IHNlbGYuX2lucHV0X2ZpbGVwYXRoCisgICAgICAgIH0KKworICAgICAgICBzZWN0aW9ucyA9
IFtdCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLmdlbmVyYXRlX2xpY2Vuc2UoKSkKKyAg
ICAgICAgc2VjdGlvbnMuYXBwZW5kKFRlbXBsYXRlKFRlbXBsYXRlcy5DcHBJbXBsZW1lbnRhdGlv
blByZWx1ZGUpLnN1YnN0aXR1dGUoTm9uZSwgKipoZWFkZXJfYXJncykpCisgICAgICAgIHNlY3Rp
b25zLmFwcGVuZCgnbmFtZXNwYWNlIFR5cGVCdWlsZGVyIHsnKQorICAgICAgICBzZWN0aW9ucy5h
cHBlbmQoc2VsZi5fZ2VuZXJhdGVfZW51bV9tYXBwaW5nKCkpCisgICAgICAgIHNlY3Rpb25zLmFw
cGVuZChzZWxmLl9nZW5lcmF0ZV9vcGVuX2ZpZWxkX25hbWVzKCkpCisgICAgICAgIGJ1aWxkZXJf
c2VjdGlvbnMgPSBtYXAoc2VsZi5fZ2VuZXJhdGVfYnVpbGRlcnNfZm9yX2RvbWFpbiwgZG9tYWlu
cykKKyAgICAgICAgc2VjdGlvbnMuZXh0ZW5kKGZpbHRlcihsYW1iZGEgc2VjdGlvbjogbGVuKHNl
Y3Rpb24pID4gMCwgYnVpbGRlcl9zZWN0aW9ucykpCisgICAgICAgIHNlY3Rpb25zLmFwcGVuZCgn
fSAvLyBuYW1lc3BhY2UgVHlwZUJ1aWxkZXInKQorICAgICAgICBzZWN0aW9ucy5hcHBlbmQoVGVt
cGxhdGUoVGVtcGxhdGVzLkNwcEltcGxlbWVudGF0aW9uUG9zdGx1ZGUpLnN1YnN0aXR1dGUoTm9u
ZSwgKipoZWFkZXJfYXJncykpCisKKyAgICAgICAgcmV0dXJuICJcblxuIi5qb2luKHNlY3Rpb25z
KQorCisgICAgIyBQcml2YXRlIG1ldGhvZHMuCisKKyAgICBkZWYgX2dlbmVyYXRlX2VudW1fbWFw
cGluZyhzZWxmKToKKyAgICAgICAgZnJhbWV3b3JrX3ByZWZpeCA9IHNlbGYubW9kZWwoKS5mcmFt
ZXdvcmsuc2V0dGluZygncHJlZml4JykKKyAgICAgICAgbGluZXMgPSBbXQorCisgICAgICAgIGxp
bmVzLmFwcGVuZCgnc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGVudW1fY29uc3RhbnRfdmFsdWVz
W10gPSB7JykKKyAgICAgICAgbGluZXMuZXh0ZW5kKFsnICAgICIlcyIsJyAlIGVudW1fdmFsdWUg
Zm9yIGVudW1fdmFsdWUgaW4gc2VsZi5hc3NpZ25lZF9lbnVtX3ZhbHVlcygpXSkKKyAgICAgICAg
bGluZXMuYXBwZW5kKCd9OycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnJykKKyAgICAgICAgbGlu
ZXMuYXBwZW5kKCdTdHJpbmcgZ2V0JXNFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSkgeycgJSBm
cmFtZXdvcmtfcHJlZml4KQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICByZXR1cm4gZW51bV9j
b25zdGFudF92YWx1ZXNbY29kZV07JykKKyAgICAgICAgbGluZXMuYXBwZW5kKCd9JykKKworICAg
ICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQorCisgICAgZGVmIF9nZW5lcmF0ZV9vcGVuX2Zp
ZWxkX25hbWVzKHNlbGYpOgorICAgICAgICBsaW5lcyA9IFtdCisgICAgICAgIGZvciBkb21haW4g
aW4gc2VsZi5kb21haW5zX3RvX2dlbmVyYXRlKCk6CisgICAgICAgICAgICBmb3IgdHlwZV9kZWNs
YXJhdGlvbiBpbiBmaWx0ZXIobGFtYmRhIGRlY2w6IEdlbmVyYXRvci50eXBlX2hhc19vcGVuX2Zp
ZWxkcyhkZWNsLnR5cGUpLCBkb21haW4udHlwZV9kZWNsYXJhdGlvbnMpOgorICAgICAgICAgICAg
ICAgIGZvciB0eXBlX21lbWJlciBpbiBzb3J0ZWQodHlwZV9kZWNsYXJhdGlvbi50eXBlX21lbWJl
cnMsIGtleT1sYW1iZGEgbWVtYmVyOiBtZW1iZXIubWVtYmVyX25hbWUpOgorICAgICAgICAgICAg
ICAgICAgICBmaWVsZF9uYW1lID0gJzo6Jy5qb2luKFsnSW5zcGVjdG9yJywgJ1R5cGVCdWlsZGVy
JywgZG9tYWluLmRvbWFpbl9uYW1lLCB1Y2ZpcnN0KHR5cGVfZGVjbGFyYXRpb24udHlwZV9uYW1l
KSwgdWNmaXJzdCh0eXBlX21lbWJlci5tZW1iZXJfbmFtZSldKQorICAgICAgICAgICAgICAgICAg
ICBsaW5lcy5hcHBlbmQoJ2NvbnN0IGNoYXIqICVzID0gIiVzIjsnICUgKGZpZWxkX25hbWUsIHR5
cGVfbWVtYmVyLm1lbWJlcl9uYW1lKSkKKworICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVz
KQorCisgICAgZGVmIF9nZW5lcmF0ZV9idWlsZGVyc19mb3JfZG9tYWluKHNlbGYsIGRvbWFpbik6
CisgICAgICAgIHNlY3Rpb25zID0gW10KKyAgICAgICAgZGVjbGFyYXRpb25zX3RvX2dlbmVyYXRl
ID0gZmlsdGVyKGxhbWJkYSBkZWNsOiBzZWxmLnR5cGVfbmVlZHNfc2hhcGVfYXNzZXJ0aW9ucyhk
ZWNsLnR5cGUpLCBkb21haW4udHlwZV9kZWNsYXJhdGlvbnMpCisKKyAgICAgICAgZm9yIHR5cGVf
ZGVjbGFyYXRpb24gaW4gZGVjbGFyYXRpb25zX3RvX2dlbmVyYXRlOgorICAgICAgICAgICAgZm9y
IHR5cGVfbWVtYmVyIGluIHR5cGVfZGVjbGFyYXRpb24udHlwZV9tZW1iZXJzOgorICAgICAgICAg
ICAgICAgIGlmIGlzaW5zdGFuY2UodHlwZV9tZW1iZXIudHlwZSwgRW51bVR5cGUpOgorICAgICAg
ICAgICAgICAgICAgICBzZWN0aW9ucy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYXNzZXJ0aW9uX2Zv
cl9lbnVtKHR5cGVfbWVtYmVyLCB0eXBlX2RlY2xhcmF0aW9uKSkKKworICAgICAgICAgICAgaWYg
aXNpbnN0YW5jZSh0eXBlX2RlY2xhcmF0aW9uLnR5cGUsIE9iamVjdFR5cGUpOgorICAgICAgICAg
ICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9hc3NlcnRpb25fZm9yX29iamVj
dF9kZWNsYXJhdGlvbih0eXBlX2RlY2xhcmF0aW9uKSkKKyAgICAgICAgICAgICAgICBpZiBHZW5l
cmF0b3IudHlwZV9uZWVkc19ydW50aW1lX2Nhc3RzKHR5cGVfZGVjbGFyYXRpb24udHlwZSk6Cisg
ICAgICAgICAgICAgICAgICAgIHNlY3Rpb25zLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9ydW50aW1l
X2Nhc3RfZm9yX29iamVjdF9kZWNsYXJhdGlvbih0eXBlX2RlY2xhcmF0aW9uKSkKKworICAgICAg
ICByZXR1cm4gJ1xuXG4nLmpvaW4oc2VjdGlvbnMpCisKKyAgICBkZWYgX2dlbmVyYXRlX3J1bnRp
bWVfY2FzdF9mb3Jfb2JqZWN0X2RlY2xhcmF0aW9uKHNlbGYsIG9iamVjdF9kZWNsYXJhdGlvbik6
CisgICAgICAgIGFyZ3MgPSB7CisgICAgICAgICAgICAnb2JqZWN0VHlwZSc6IEdlbmVyYXRvci50
eXBlX2J1aWxkZXJfc3RyaW5nX2Zvcl90eXBlKG9iamVjdF9kZWNsYXJhdGlvbi50eXBlKQorICAg
ICAgICB9CisgICAgICAgIHJldHVybiBUZW1wbGF0ZShUZW1wbGF0ZXMuVHlwZUJ1aWxkZXJPYmpl
Y3RSdW50aW1lQ2FzdCkuc3Vic3RpdHV0ZShOb25lLCAqKmFyZ3MpCisKKyAgICBkZWYgX2dlbmVy
YXRlX2Fzc2VydGlvbl9mb3Jfb2JqZWN0X2RlY2xhcmF0aW9uKHNlbGYsIG9iamVjdF9kZWNsYXJh
dGlvbik6CisgICAgICAgIHJlcXVpcmVkX21lbWJlcnMgPSBmaWx0ZXIobGFtYmRhIG1lbWJlcjog
bm90IG1lbWJlci5pc19vcHRpb25hbCwgb2JqZWN0X2RlY2xhcmF0aW9uLnR5cGVfbWVtYmVycykK
KyAgICAgICAgb3B0aW9uYWxfbWVtYmVycyA9IGZpbHRlcihsYW1iZGEgbWVtYmVyOiBtZW1iZXIu
aXNfb3B0aW9uYWwsIG9iamVjdF9kZWNsYXJhdGlvbi50eXBlX21lbWJlcnMpCisgICAgICAgIHNo
b3VsZF9jb3VudF9wcm9wZXJ0aWVzID0gbm90IEdlbmVyYXRvci50eXBlX2hhc19vcGVuX2ZpZWxk
cyhvYmplY3RfZGVjbGFyYXRpb24udHlwZSkKKyAgICAgICAgbGluZXMgPSBbXQorCisgICAgICAg
IGxpbmVzLmFwcGVuZCgnI2lmICFBU1NFUlRfRElTQUJMRUQnKQorICAgICAgICBsaW5lcy5hcHBl
bmQoJ3ZvaWQgQmluZGluZ1RyYWl0czwlcz46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKElu
c3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUqIHZhbHVlKScgJSAoR2VuZXJhdG9yLnR5cGVfYnVpbGRl
cl9zdHJpbmdfZm9yX3R5cGUob2JqZWN0X2RlY2xhcmF0aW9uLnR5cGUpKSkKKyAgICAgICAgbGlu
ZXMuYXBwZW5kKCIiInsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBvYmplY3Q7CisgICAg
Ym9vbCBjYXN0UmVzID0gdmFsdWUtPmFzT2JqZWN0KCZvYmplY3QpOworICAgIEFTU0VSVF9VTlVT
RUQoY2FzdFJlcywgY2FzdFJlcyk7IiIiKQorICAgICAgICBmb3IgdHlwZV9tZW1iZXIgaW4gcmVx
dWlyZWRfbWVtYmVyczoKKyAgICAgICAgICAgIGFyZ3MgPSB7CisgICAgICAgICAgICAgICAgJ21l
bWJlck5hbWUnOiB0eXBlX21lbWJlci5tZW1iZXJfbmFtZSwKKyAgICAgICAgICAgICAgICAnYXNz
ZXJ0TWV0aG9kJzogR2VuZXJhdG9yLmFzc2VydGlvbl9tZXRob2RfZm9yX3R5cGVfbWVtYmVyKHR5
cGVfbWVtYmVyLCBvYmplY3RfZGVjbGFyYXRpb24pCisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGxpbmVzLmFwcGVuZCgiIiIgICAgeworICAgICAgICBJbnNwZWN0b3JPYmplY3Q6Oml0ZXJh
dG9yICUobWVtYmVyTmFtZSlzUG9zID0gb2JqZWN0LT5maW5kKEFTQ0lJTGl0ZXJhbCgiJShtZW1i
ZXJOYW1lKXMiKSk7CisgICAgICAgIEFTU0VSVCglKG1lbWJlck5hbWUpc1BvcyAhPSBvYmplY3Qt
PmVuZCgpKTsKKyAgICAgICAgJShhc3NlcnRNZXRob2QpcyglKG1lbWJlck5hbWUpc1Bvcy0+dmFs
dWUuZ2V0KCkpOworICAgIH0iIiIgJSBhcmdzKQorCisgICAgICAgIGlmIHNob3VsZF9jb3VudF9w
cm9wZXJ0aWVzOgorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcnKQorICAgICAgICAgICAgbGlu
ZXMuYXBwZW5kKCcgICAgaW50IGZvdW5kUHJvcGVydGllc0NvdW50ID0gJXM7JyAlIGxlbihyZXF1
aXJlZF9tZW1iZXJzKSkKKworICAgICAgICBmb3IgdHlwZV9tZW1iZXIgaW4gb3B0aW9uYWxfbWVt
YmVyczoKKyAgICAgICAgICAgIGFyZ3MgPSB7CisgICAgICAgICAgICAgICAgJ21lbWJlck5hbWUn
OiB0eXBlX21lbWJlci5tZW1iZXJfbmFtZSwKKyAgICAgICAgICAgICAgICAnYXNzZXJ0TWV0aG9k
JzogR2VuZXJhdG9yLmFzc2VydGlvbl9tZXRob2RfZm9yX3R5cGVfbWVtYmVyKHR5cGVfbWVtYmVy
LCBvYmplY3RfZGVjbGFyYXRpb24pCisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGxpbmVz
LmFwcGVuZCgiIiIgICAgeworICAgICAgICBJbnNwZWN0b3JPYmplY3Q6Oml0ZXJhdG9yICUobWVt
YmVyTmFtZSlzUG9zID0gb2JqZWN0LT5maW5kKEFTQ0lJTGl0ZXJhbCgiJShtZW1iZXJOYW1lKXMi
KSk7CisgICAgICAgIGlmICglKG1lbWJlck5hbWUpc1BvcyAhPSBvYmplY3QtPmVuZCgpKSB7Cisg
ICAgICAgICAgICAlKGFzc2VydE1ldGhvZClzKCUobWVtYmVyTmFtZSlzUG9zLT52YWx1ZS5nZXQo
KSk7IiIiICUgYXJncykKKworICAgICAgICAgICAgaWYgc2hvdWxkX2NvdW50X3Byb3BlcnRpZXM6
CisgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgICAgICArK2ZvdW5kUHJvcGVy
dGllc0NvdW50OycpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgfScpCisgICAg
ICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICB9JykKKworICAgICAgICBpZiBzaG91bGRfY291bnRf
cHJvcGVydGllczoKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGlmIChmb3VuZFByb3Bl
cnRpZXNDb3VudCAhPSBvYmplY3QtPnNpemUoKSknKQorICAgICAgICAgICAgbGluZXMuYXBwZW5k
KCcgICAgICAgIEZBVEFMKCJVbmV4cGVjdGVkIHByb3BlcnRpZXMgaW4gb2JqZWN0OiAlc1xcbiIs
IG9iamVjdC0+dG9KU09OU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOycpCisgICAgICAgIGxpbmVz
LmFwcGVuZCgnfScpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnI2VuZGlmIC8vICFBU1NFUlRfRElT
QUJMRUQnKQorICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQorCisgICAgZGVmIF9nZW5l
cmF0ZV9hc3NlcnRpb25fZm9yX2VudW0oc2VsZiwgZW51bV9tZW1iZXIsIG9iamVjdF9kZWNsYXJh
dGlvbik6CisgICAgICAgIGxpbmVzID0gW10KKyAgICAgICAgbGluZXMuYXBwZW5kKCcjaWYgIUFT
U0VSVF9ESVNBQkxFRCcpCisgICAgICAgIGxpbmVzLmFwcGVuZCgndm9pZCAlcyhJbnNwZWN0b3I6
Okluc3BlY3RvclZhbHVlKiB2YWx1ZSknICUgR2VuZXJhdG9yLmFzc2VydGlvbl9tZXRob2RfZm9y
X3R5cGVfbWVtYmVyKGVudW1fbWVtYmVyLCBvYmplY3RfZGVjbGFyYXRpb24pKQorICAgICAgICBs
aW5lcy5hcHBlbmQoJ3snKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBTdHJpbmcgczsnKQor
ICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBib29sIGNhc3RfcmVzID0gdmFsdWUtPmFzU3RyaW5n
KCZzKTsnKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBBU1NFUlQoY2FzdF9yZXMpOycpCisK
KyAgICAgICAgYXNzZXJ0X2NvbmRpdGlvbiA9ICcgfHwgJy5qb2luKFsncyA9PSAiJXMiJyAlIGVu
dW1fdmFsdWUgZm9yIGVudW1fdmFsdWUgaW4gZW51bV9tZW1iZXIudHlwZS5lbnVtX3ZhbHVlcygp
XSkKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgQVNTRVJUKCVzKTsnICUgYXNzZXJ0X2NvbmRp
dGlvbikKKyAgICAgICAgbGluZXMuYXBwZW5kKCd9JykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcj
ZW5kaWYgLy8gIUFTU0VSVF9ESVNBQkxFRCcpCisKKyAgICAgICAgcmV0dXJuICdcbicuam9pbihs
aW5lcykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9jb2RlZ2VuL2dlbmVyYXRvci5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRvci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kNjllNDQ4ZWNmZGM0NGYz
OGMyODBkNjhlZmE5MGI1ZjA1MjdlNWVlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdG9yLnB5CkBAIC0wLDAg
KzEsNDk2IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE0
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChjKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorIyBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgb3Mu
cGF0aAoraW1wb3J0IHJlCitmcm9tIHN0cmluZyBpbXBvcnQgVGVtcGxhdGUKKworZnJvbSBnZW5l
cmF0b3JfdGVtcGxhdGVzIGltcG9ydCBHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgVGVtcGxhdGVzCitm
cm9tIG1vZGVscyBpbXBvcnQgUHJpbWl0aXZlVHlwZSwgT2JqZWN0VHlwZSwgQXJyYXlUeXBlLCBF
bnVtVHlwZSwgQWxpYXNlZFR5cGUKKworbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2JhbCcp
CisKKworZGVmIHVjZmlyc3Qoc3RyKToKKyAgICByZXR1cm4gc3RyWzoxXS51cHBlcigpICsgc3Ry
WzE6XQorCitfUFJJTUlUSVZFX1RPX0NQUF9OQU1FX01BUCA9IHsKKyAgICAnYm9vbGVhbic6ICdi
b29sJywKKyAgICAnaW50ZWdlcic6ICdpbnQnLAorICAgICdudW1iZXInOiAnZG91YmxlJywKKyAg
ICAnc3RyaW5nJzogJ1N0cmluZycsCisgICAgJ29iamVjdCc6ICdJbnNwZWN0b3I6Okluc3BlY3Rv
ck9iamVjdCcsCisgICAgJ2FueSc6ICdJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlJworfQorCisj
IEZJWE1FOiBUaGlzIHNob3VsZCBiZSBjb252ZXJ0ZWQgaW50byBhIHByb3BlcnR5IG9uIHRoZSBk
b21haW4gaW4gSlNPTi4KK19ET01BSU5fVE9fQ1BQX0dVQVJEX01BUCA9IHsKKyAgICAnRGF0YWJh
c2UnOiAiRU5BQkxFKFNRTF9EQVRBQkFTRSkiLAorICAgICdJbmRleGVkREInOiAiRU5BQkxFKElO
REVYRURfREFUQUJBU0UpIiwKKyAgICAnUmVwbGF5JzogIkVOQUJMRShXRUJfUkVQTEFZKSIsCit9
CisKK19BTFdBWVNfVVBQRVJDQVNFRF9FTlVNX1ZBTFVFX1NVQlNUUklOR1MgPSBzZXQoWydBUEkn
LCAnQ1NTJywgJ0RPTScsICdIVE1MJywgJ1hIUicsICdYTUwnXSkKKworIyBUaGVzZSBvYmplY3Rz
IGFyZSBidWlsdCBtYW51YWxseSBieSBjcmVhdGluZyBhbmQgc2V0dGluZyBJbnNwZWN0b3JWYWx1
ZXMuCisjIEJlZm9yZSBzZW5kaW5nIHRoZXNlIG92ZXIgdGhlIHByb3RvY29sLCB0aGVpciBzaGFw
ZXMgYXJlIGNoZWNrZWQgYWdhaW5zdCB0aGUgc3BlY2lmaWNhdGlvbi4KKyMgU28sIGFueSB0eXBl
cyByZWZlcmVuY2VkIGJ5IHRoZXNlIHR5cGVzIHJlcXVpcmUgZGVidWctb25seSBhc3NlcnRpb25z
IHRoYXQgY2hlY2sgdmFsdWVzLgorIyBDYWxjdWxhdGluZyBuZWNlc3NhcnkgYXNzZXJ0aW9ucyBp
cyBhbm5veWluZywgYW5kIGFkZHMgYSBsb3Qgb2YgY29tcGxleGl0eSB0byB0aGUgZ2VuZXJhdG9y
LgorCisjIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBjb252ZXJ0ZWQgaW50byBhIHByb3BlcnR5IGlu
IEpTT04uCitfVFlQRVNfTkVFRElOR19SVU5USU1FX0NBU1RTID0gc2V0KFsKKyAgICAiUnVudGlt
ZS5SZW1vdGVPYmplY3QiLAorICAgICJSdW50aW1lLlByb3BlcnR5RGVzY3JpcHRvciIsCisgICAg
IlJ1bnRpbWUuSW50ZXJuYWxQcm9wZXJ0eURlc2NyaXB0b3IiLAorICAgICJEZWJ1Z2dlci5GdW5j
dGlvbkRldGFpbHMiLAorICAgICJEZWJ1Z2dlci5DYWxsRnJhbWUiLAorICAgICJDYW52YXMuVHJh
Y2VMb2ciLAorICAgICJDYW52YXMuUmVzb3VyY2VJbmZvIiwKKyAgICAiQ2FudmFzLlJlc291cmNl
U3RhdGUiLAorICAgICMgVGhpcyBzaG91bGQgYmUgYSB0ZW1wb3JhcnkgaGFjay4gVGltZWxpbmVF
dmVudCBzaG91bGQgYmUgY3JlYXRlZCB2aWEgZ2VuZXJhdGVkIEMrKyBBUEkuCisgICAgIlRpbWVs
aW5lLlRpbWVsaW5lRXZlbnQiLAorICAgICMgRm9yIHRlc3RpbmcgcHVycG9zZXMgb25seS4KKyAg
ICAiVGVzdC5UeXBlTmVlZGluZ0Nhc3QiCitdKQorCisjIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBj
b252ZXJ0ZWQgaW50byBhIHByb3BlcnR5IGluIEpTT04uCitfVFlQRVNfV0lUSF9PUEVOX0ZJRUxE
UyA9IHNldChbCisgICAgIlRpbWVsaW5lLlRpbWVsaW5lRXZlbnQiLAorICAgICMgSW5zcGVjdG9y
U3R5bGVTaGVldCBub3Qgb25seSBjcmVhdGVzIHRoaXMgcHJvcGVydHkgYnV0IHdhbnRzIHRvIHJl
YWQgaXQgYW5kIG1vZGlmeSBpdC4KKyAgICAiQ1NTLkNTU1Byb3BlcnR5IiwKKyAgICAjIEluc3Bl
Y3RvclJlc291cmNlQWdlbnQgbmVlZHMgdG8gdXBkYXRlIG1pbWUtdHlwZS4KKyAgICAiTmV0d29y
ay5SZXNwb25zZSIsCisgICAgIyBGb3IgdGVzdGluZyBwdXJwb3NlcyBvbmx5LgorICAgICJUZXN0
Lk9wZW5QYXJhbWV0ZXJCdW5kbGUiCitdKQorCisKK2NsYXNzIEdlbmVyYXRvcjoKKyAgICBkZWYg
X19pbml0X18oc2VsZiwgbW9kZWwsIGlucHV0X2ZpbGVwYXRoKToKKyAgICAgICAgc2VsZi5fbW9k
ZWwgPSBtb2RlbAorICAgICAgICBzZWxmLl9pbnB1dF9maWxlcGF0aCA9IGlucHV0X2ZpbGVwYXRo
CisKKyAgICBkZWYgbW9kZWwoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9tb2RlbAorCisg
ICAgZGVmIGdlbmVyYXRlX2xpY2Vuc2Uoc2VsZik6CisgICAgICAgIHJldHVybiBUZW1wbGF0ZShU
ZW1wbGF0ZXMuQ29weXJpZ2h0QmxvY2spLnN1YnN0aXR1dGUoTm9uZSwgaW5wdXRGaWxlbmFtZT1v
cy5wYXRoLmJhc2VuYW1lKHNlbGYuX2lucHV0X2ZpbGVwYXRoKSkKKworICAgICMgVGhlc2UgbWV0
aG9kcyBhcmUgb3ZlcnJpZGRlbiBieSBzdWJjbGFzc2VzLgorICAgIGRlZiBkb21haW5zX3RvX2dl
bmVyYXRlKHNlbGYpOgorICAgICAgICByZXR1cm4gZmlsdGVyKGxhbWJkYSBkb21haW46IG5vdCBk
b21haW4uaXNfc3VwcGxlbWVudGFsLCBzZWxmLm1vZGVsKCkuZG9tYWlucykKKworICAgIGRlZiBn
ZW5lcmF0ZV9vdXRwdXQoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBvdXRwdXRfZmls
ZW5hbWUoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBlbmNvZGluZ19mb3JfZW51bV92
YWx1ZShzZWxmLCBlbnVtX3ZhbHVlKToKKyAgICAgICAgaWYgbm90IGhhc2F0dHIoc2VsZiwgIl9h
c3NpZ25lZF9lbnVtX3ZhbHVlcyIpOgorICAgICAgICAgICAgc2VsZi5fdHJhdmVyc2VfYW5kX2Fz
c2lnbl9lbnVtX3ZhbHVlcygpCisKKyAgICAgICAgcmV0dXJuIHNlbGYuX2VudW1fdmFsdWVfZW5j
b2RpbmdzW2VudW1fdmFsdWVdCisKKyAgICBkZWYgYXNzaWduZWRfZW51bV92YWx1ZXMoc2VsZik6
CisgICAgICAgIGlmIG5vdCBoYXNhdHRyKHNlbGYsICJfYXNzaWduZWRfZW51bV92YWx1ZXMiKToK
KyAgICAgICAgICAgIHNlbGYuX3RyYXZlcnNlX2FuZF9hc3NpZ25fZW51bV92YWx1ZXMoKQorCisg
ICAgICAgIHJldHVybiBzZWxmLl9hc3NpZ25lZF9lbnVtX3ZhbHVlc1s6XSAgIyBTbGljZS4KKwor
ICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgdHlwZV9uZWVkc19ydW50aW1lX2Nhc3RzKF90eXBl
KToKKyAgICAgICAgcmV0dXJuIF90eXBlLnF1YWxpZmllZF9uYW1lKCkgaW4gX1RZUEVTX05FRURJ
TkdfUlVOVElNRV9DQVNUUworCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiB0eXBlX2hhc19v
cGVuX2ZpZWxkcyhfdHlwZSk6CisgICAgICAgIHJldHVybiBfdHlwZS5xdWFsaWZpZWRfbmFtZSgp
IGluIF9UWVBFU19XSVRIX09QRU5fRklFTERTCisKKyAgICBkZWYgdHlwZV9uZWVkc19zaGFwZV9h
c3NlcnRpb25zKHNlbGYsIF90eXBlKToKKyAgICAgICAgaWYgbm90IGhhc2F0dHIoc2VsZiwgIl90
eXBlc19uZWVkaW5nX3NoYXBlX2Fzc2VydGlvbnMiKToKKyAgICAgICAgICAgIHNlbGYuY2FsY3Vs
YXRlX3R5cGVzX3JlcXVpcmluZ19zaGFwZV9hc3NlcnRpb25zKHNlbGYubW9kZWwoKS5kb21haW5z
KQorCisgICAgICAgIHJldHVybiBfdHlwZSBpbiBzZWxmLl90eXBlc19uZWVkaW5nX3NoYXBlX2Fz
c2VydGlvbnMKKworICAgICMgVG8gcmVzdHJpY3QgdGhlIGRvbWFpbnMgb3ZlciB3aGljaCB3ZSBj
b21wdXRlIHR5cGVzIG5lZWRpbmcgYXNzZXJ0aW9ucywgY2FsbCB0aGlzIG1ldGhvZAorICAgICMg
YmVmb3JlIGdlbmVyYXRpbmcgYW55IG91dHB1dCB3aXRoIHRoZSBkZXNpcmVkIGRvbWFpbnMgcGFy
YW1ldGVyLiBUaGUgY29tcHV0ZWQKKyAgICAjIHNldCBvZiB0eXBlcyB3aWxsIG5vdCBiZSBhdXRv
bWF0aWNhbGx5IHJlZ2VuZXJhdGVkIG9uIHN1YnNlcXVlbnQgY2FsbHMgdG8KKyAgICAjIEdlbmVy
YXRvci50eXBlc19uZWVkaW5nX3NoYXBlX2Fzc2VydGlvbnMoKS4KKyAgICBkZWYgY2FsY3VsYXRl
X3R5cGVzX3JlcXVpcmluZ19zaGFwZV9hc3NlcnRpb25zKHNlbGYsIGRvbWFpbnMpOgorICAgICAg
ICBkb21haW5fbmFtZXMgPSBtYXAobGFtYmRhIGRvbWFpbjogZG9tYWluLmRvbWFpbl9uYW1lLCBk
b21haW5zKQorICAgICAgICBsb2cuZGVidWcoIj4gQ2FsY3VsYXRpbmcgdHlwZXMgdGhhdCBuZWVk
IHNoYXBlIGFzc2VydGlvbnMgKGVsaWdpYmxlIGRvbWFpbnM6ICVzKSIgJSAiLCAiLmpvaW4oZG9t
YWluX25hbWVzKSkKKworICAgICAgICAjIE11dGF0ZXMgdGhlIHBhc3NlZC1pbiBzZXQ7IHRoaXMg
c2ltcGxpZmllcyBjaGVja3MgdG8gcHJldmVudCBpbmZpbml0ZSByZWN1cnNpb24uCisgICAgICAg
IGRlZiBnYXRoZXJfdHJhbnNpdGl2ZWx5X3JlZmVyZW5jZWRfdHlwZXMoX3R5cGUsIGdhdGhlcmVk
X3R5cGVzKToKKyAgICAgICAgICAgIGlmIF90eXBlIGluIGdhdGhlcmVkX3R5cGVzOgorICAgICAg
ICAgICAgICAgIHJldHVybgorCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBPYmpl
Y3RUeXBlKToKKyAgICAgICAgICAgICAgICBsb2cuZGVidWcoIj4gQWRkaW5nIHR5cGUgJXMgdG8g
bGlzdCBvZiB0eXBlcyBuZWVkaW5nIHNoYXBlIGFzc2VydGlvbnMuIiAlIF90eXBlLnF1YWxpZmll
ZF9uYW1lKCkpCisgICAgICAgICAgICAgICAgZ2F0aGVyZWRfdHlwZXMuYWRkKF90eXBlKQorICAg
ICAgICAgICAgICAgIGZvciB0eXBlX21lbWJlciBpbiBfdHlwZS5tZW1iZXJzOgorICAgICAgICAg
ICAgICAgICAgICBnYXRoZXJfdHJhbnNpdGl2ZWx5X3JlZmVyZW5jZWRfdHlwZXModHlwZV9tZW1i
ZXIudHlwZSwgZ2F0aGVyZWRfdHlwZXMpCisgICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2UoX3R5
cGUsIEVudW1UeXBlKToKKyAgICAgICAgICAgICAgICBsb2cuZGVidWcoIj4gQWRkaW5nIHR5cGUg
JXMgdG8gbGlzdCBvZiB0eXBlcyBuZWVkaW5nIHNoYXBlIGFzc2VydGlvbnMuIiAlIF90eXBlLnF1
YWxpZmllZF9uYW1lKCkpCisgICAgICAgICAgICAgICAgZ2F0aGVyZWRfdHlwZXMuYWRkKF90eXBl
KQorICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKF90eXBlLCBBbGlhc2VkVHlwZSk6CisgICAg
ICAgICAgICAgICAgZ2F0aGVyX3RyYW5zaXRpdmVseV9yZWZlcmVuY2VkX3R5cGVzKF90eXBlLmFs
aWFzZWRfdHlwZSwgZ2F0aGVyZWRfdHlwZXMpCisgICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2Uo
X3R5cGUsIEFycmF5VHlwZSk6CisgICAgICAgICAgICAgICAgZ2F0aGVyX3RyYW5zaXRpdmVseV9y
ZWZlcmVuY2VkX3R5cGVzKF90eXBlLmVsZW1lbnRfdHlwZSwgZ2F0aGVyZWRfdHlwZXMpCisKKyAg
ICAgICAgZm91bmRfdHlwZXMgPSBzZXQoKQorICAgICAgICBmb3IgZG9tYWluIGluIGRvbWFpbnM6
CisgICAgICAgICAgICBmb3IgZGVjbGFyYXRpb24gaW4gZG9tYWluLnR5cGVfZGVjbGFyYXRpb25z
OgorICAgICAgICAgICAgICAgIGlmIGRlY2xhcmF0aW9uLnR5cGUucXVhbGlmaWVkX25hbWUoKSBp
biBfVFlQRVNfTkVFRElOR19SVU5USU1FX0NBU1RTOgorICAgICAgICAgICAgICAgICAgICBsb2cu
ZGVidWcoIj4gR2F0aGVyaW5nIHR5cGVzIHJlZmVyZW5jZWQgYnkgJXMgdG8gZ2VuZXJhdGUgc2hh
cGUgYXNzZXJ0aW9ucy4iICUgZGVjbGFyYXRpb24udHlwZS5xdWFsaWZpZWRfbmFtZSgpKQorICAg
ICAgICAgICAgICAgICAgICBnYXRoZXJfdHJhbnNpdGl2ZWx5X3JlZmVyZW5jZWRfdHlwZXMoZGVj
bGFyYXRpb24udHlwZSwgZm91bmRfdHlwZXMpCisKKyAgICAgICAgc2VsZi5fdHlwZXNfbmVlZGlu
Z19zaGFwZV9hc3NlcnRpb25zID0gZm91bmRfdHlwZXMKKworICAgICMgUHJpdmF0ZSBoZWxwZXIg
aW5zdGFuY2UgbWV0aG9kcy4KKyAgICBkZWYgX3RyYXZlcnNlX2FuZF9hc3NpZ25fZW51bV92YWx1
ZXMoc2VsZik6CisgICAgICAgIHNlbGYuX2VudW1fdmFsdWVfZW5jb2RpbmdzID0ge30KKyAgICAg
ICAgc2VsZi5fYXNzaWduZWRfZW51bV92YWx1ZXMgPSBbXQorICAgICAgICBhbGxfdHlwZXMgPSBb
XQorCisgICAgICAgIGRvbWFpbnMgPSBzZWxmLmRvbWFpbnNfdG9fZ2VuZXJhdGUoKQorCisgICAg
ICAgIGZvciBkb21haW4gaW4gZG9tYWluczoKKyAgICAgICAgICAgIGZvciB0eXBlX2RlY2xhcmF0
aW9uIGluIGRvbWFpbi50eXBlX2RlY2xhcmF0aW9uczoKKyAgICAgICAgICAgICAgICBhbGxfdHlw
ZXMuYXBwZW5kKHR5cGVfZGVjbGFyYXRpb24udHlwZSkKKyAgICAgICAgICAgICAgICBmb3IgdHlw
ZV9tZW1iZXIgaW4gdHlwZV9kZWNsYXJhdGlvbi50eXBlX21lbWJlcnM6CisgICAgICAgICAgICAg
ICAgICAgIGFsbF90eXBlcy5hcHBlbmQodHlwZV9tZW1iZXIudHlwZSkKKworICAgICAgICBmb3Ig
ZG9tYWluIGluIGRvbWFpbnM6CisgICAgICAgICAgICBmb3IgZXZlbnQgaW4gZG9tYWluLmV2ZW50
czoKKyAgICAgICAgICAgICAgICBhbGxfdHlwZXMuZXh0ZW5kKFtwYXJhbWV0ZXIudHlwZSBmb3Ig
cGFyYW1ldGVyIGluIGV2ZW50LmV2ZW50X3BhcmFtZXRlcnNdKQorCisgICAgICAgIGZvciBkb21h
aW4gaW4gZG9tYWluczoKKyAgICAgICAgICAgIGZvciBjb21tYW5kIGluIGRvbWFpbi5jb21tYW5k
czoKKyAgICAgICAgICAgICAgICBhbGxfdHlwZXMuZXh0ZW5kKFtwYXJhbWV0ZXIudHlwZSBmb3Ig
cGFyYW1ldGVyIGluIGNvbW1hbmQuY2FsbF9wYXJhbWV0ZXJzXSkKKyAgICAgICAgICAgICAgICBh
bGxfdHlwZXMuZXh0ZW5kKFtwYXJhbWV0ZXIudHlwZSBmb3IgcGFyYW1ldGVyIGluIGNvbW1hbmQu
cmV0dXJuX3BhcmFtZXRlcnNdKQorCisgICAgICAgIGZvciBfdHlwZSBpbiBhbGxfdHlwZXM6Cisg
ICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShfdHlwZSwgRW51bVR5cGUpOgorICAgICAgICAg
ICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBtYXAoc2VsZi5fYXNzaWduX2VuY29kaW5nX2Zv
cl9lbnVtX3ZhbHVlLCBfdHlwZS5lbnVtX3ZhbHVlcygpKQorCisgICAgZGVmIF9hc3NpZ25fZW5j
b2RpbmdfZm9yX2VudW1fdmFsdWUoc2VsZiwgZW51bV92YWx1ZSk6CisgICAgICAgIGlmIGVudW1f
dmFsdWUgaW4gc2VsZi5fZW51bV92YWx1ZV9lbmNvZGluZ3M6CisgICAgICAgICAgICByZXR1cm4K
KworICAgICAgICBzZWxmLl9lbnVtX3ZhbHVlX2VuY29kaW5nc1tlbnVtX3ZhbHVlXSA9IGxlbihz
ZWxmLl9hc3NpZ25lZF9lbnVtX3ZhbHVlcykKKyAgICAgICAgc2VsZi5fYXNzaWduZWRfZW51bV92
YWx1ZXMuYXBwZW5kKGVudW1fdmFsdWUpCisKKyAgICAjIE1pc2NlbGxhbmVvdXMgdGV4dCBtYW5p
cHVsYXRpb24gcm91dGluZXMuCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiB3cmFwX3dpdGhf
Z3VhcmRfZm9yX2RvbWFpbihkb21haW4sIHRleHQpOgorICAgICAgICBndWFyZCA9IF9ET01BSU5f
VE9fQ1BQX0dVQVJEX01BUC5nZXQoZG9tYWluLmRvbWFpbl9uYW1lKQorICAgICAgICBpZiBndWFy
ZCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGxpbmVzID0gWworICAgICAgICAgICAgICAgICcj
aWYgJXMnICUgZ3VhcmQsCisgICAgICAgICAgICAgICAgdGV4dCwKKyAgICAgICAgICAgICAgICAn
I2VuZGlmIC8vICVzJyAlIGd1YXJkCisgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgcmV0
dXJuICdcbicuam9pbihsaW5lcykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiB0
ZXh0CisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIHN0eWxpemVkX25hbWVfZm9yX2VudW1f
dmFsdWUoZW51bV92YWx1ZSk6CisgICAgICAgIHJlZ2V4ID0gJyglcyknICUgInwiLmpvaW4oX0FM
V0FZU19VUFBFUkNBU0VEX0VOVU1fVkFMVUVfU1VCU1RSSU5HUykKKworICAgICAgICBkZWYgcmVw
bGFjZUNhbGxiYWNrKG1hdGNoKToKKyAgICAgICAgICAgIHJldHVybiBtYXRjaC5ncm91cCgxKS51
cHBlcigpCisKKyAgICAgICAgIyBTcGxpdCBvbiBoeXBoZW4sIGludHJvZHVjZSBjYW1lbGNhc2Us
IGFuZCBmb3JjZSB1cHBlcmNhc2luZyBvZiBhY3Jvbnltcy4KKyAgICAgICAgc3Vid29yZHMgPSBt
YXAodWNmaXJzdCwgZW51bV92YWx1ZS5zcGxpdCgnLScpKQorICAgICAgICByZXR1cm4gcmUuc3Vi
KHJlZ2V4LCByZXBsYWNlQ2FsbGJhY2ssICIiLmpvaW4oc3Vid29yZHMpLCBmbGFncz1yZS5JR05P
UkVDQVNFKQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBrZXllZF9nZXRfbWV0aG9kX2Zv
cl90eXBlKF90eXBlKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgT2JqZWN0VHlwZSk6
CisgICAgICAgICAgICByZXR1cm4gJ2dldE9iamVjdCcKKyAgICAgICAgaWYgaXNpbnN0YW5jZShf
dHlwZSwgQXJyYXlUeXBlKToKKyAgICAgICAgICAgIHJldHVybiAnZ2V0QXJyYXknCisgICAgICAg
IGlmIGlzaW5zdGFuY2UoX3R5cGUsIFByaW1pdGl2ZVR5cGUpOgorICAgICAgICAgICAgaWYgX3R5
cGUucmF3X25hbWUoKSBpcyAnaW50ZWdlcic6CisgICAgICAgICAgICAgICAgcmV0dXJuICdnZXRJ
bnQnCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiAnZ2V0JyArIHVj
Zmlyc3QoX3R5cGUucmF3X25hbWUoKSkKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgQWxp
YXNlZFR5cGUpOgorICAgICAgICAgICAgcmV0dXJuIEdlbmVyYXRvci5rZXllZF9nZXRfbWV0aG9k
X2Zvcl90eXBlKF90eXBlLmFsaWFzZWRfdHlwZSkKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlw
ZSwgRW51bVR5cGUpOgorICAgICAgICAgICAgcmV0dXJuIEdlbmVyYXRvci5rZXllZF9nZXRfbWV0
aG9kX2Zvcl90eXBlKF90eXBlLnByaW1pdGl2ZV90eXBlKQorCisgICAgQHN0YXRpY21ldGhvZAor
ICAgIGRlZiBrZXllZF9zZXRfbWV0aG9kX2Zvcl90eXBlKF90eXBlKToKKyAgICAgICAgaWYgaXNp
bnN0YW5jZShfdHlwZSwgT2JqZWN0VHlwZSk6CisgICAgICAgICAgICByZXR1cm4gJ3NldE9iamVj
dCcKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgQXJyYXlUeXBlKToKKyAgICAgICAgICAg
IHJldHVybiAnc2V0QXJyYXknCisgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIFByaW1pdGl2
ZVR5cGUpOgorICAgICAgICAgICAgaWYgX3R5cGUucmF3X25hbWUoKSBpbiBbJ2ludGVnZXInLCAn
bnVtYmVyJ106CisgICAgICAgICAgICAgICAgcmV0dXJuICdzZXROdW1iZXInCisgICAgICAgICAg
ICBlbGlmIF90eXBlLnJhd19uYW1lKCkgaW4gWydhbnknXToKKyAgICAgICAgICAgICAgICByZXR1
cm4gJ3NldFZhbHVlJworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4g
J3NldCcgKyB1Y2ZpcnN0KF90eXBlLnJhd19uYW1lKCkpCisgICAgICAgIGlmIGlzaW5zdGFuY2Uo
X3R5cGUsIEFsaWFzZWRUeXBlKToKKyAgICAgICAgICAgIHJldHVybiBHZW5lcmF0b3Iua2V5ZWRf
c2V0X21ldGhvZF9mb3JfdHlwZShfdHlwZS5hbGlhc2VkX3R5cGUpCisgICAgICAgIGlmIGlzaW5z
dGFuY2UoX3R5cGUsIEVudW1UeXBlKToKKyAgICAgICAgICAgIHJldHVybiBHZW5lcmF0b3Iua2V5
ZWRfc2V0X21ldGhvZF9mb3JfdHlwZShfdHlwZS5wcmltaXRpdmVfdHlwZSkKKworICAgICMgR2Vu
ZXJhdGUgdHlwZSByZXByZXNlbnRhdGlvbnMgZm9yIHZhcmlvdXMgc2l0dWF0aW9ucy4KKyAgICBA
c3RhdGljbWV0aG9kCisgICAgZGVmIHR5cGVfYnVpbGRlcl9zdHJpbmdfZm9yX3R5cGUoX3R5cGUp
OgorICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBPYmplY3RUeXBlKSBhbmQgbGVuKF90eXBl
Lm1lbWJlcnMpID09IDA6CisgICAgICAgICAgICByZXR1cm4gJ0luc3BlY3Rvcjo6SW5zcGVjdG9y
T2JqZWN0JworICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCAoT2JqZWN0VHlwZSwgQWxpYXNl
ZFR5cGUsIEVudW1UeXBlKSk6CisgICAgICAgICAgICByZXR1cm4gJ0luc3BlY3Rvcjo6VHlwZUJ1
aWxkZXI6OiVzOjolcycgJSAoX3R5cGUudHlwZV9kb21haW4oKS5kb21haW5fbmFtZSwgX3R5cGUu
cmF3X25hbWUoKSkKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgQXJyYXlUeXBlKToKKyAg
ICAgICAgICAgIHJldHVybiAnSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk8JXM+JyAlIEdl
bmVyYXRvci50eXBlX2J1aWxkZXJfc3RyaW5nX2Zvcl90eXBlKF90eXBlLmVsZW1lbnRfdHlwZSkK
KyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgUHJpbWl0aXZlVHlwZSk6CisgICAgICAgICAg
ICByZXR1cm4gR2VuZXJhdG9yLmNwcF9uYW1lX2Zvcl9wcmltaXRpdmVfdHlwZShfdHlwZSkKKwor
ICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgdHlwZV9idWlsZGVyX3N0cmluZ19mb3JfdHlwZV9t
ZW1iZXIodHlwZV9tZW1iZXIsIG9iamVjdF9kZWNsYXJhdGlvbik6CisgICAgICAgIGlmIGlzaW5z
dGFuY2UodHlwZV9tZW1iZXIudHlwZSwgRW51bVR5cGUpIGFuZCB0eXBlX21lbWJlci50eXBlLmlz
X2Fub255bW91czoKKyAgICAgICAgICAgIHJldHVybiAnOjonLmpvaW4oW0dlbmVyYXRvci50eXBl
X2J1aWxkZXJfc3RyaW5nX2Zvcl90eXBlKG9iamVjdF9kZWNsYXJhdGlvbi50eXBlKSwgdWNmaXJz
dCh0eXBlX21lbWJlci5tZW1iZXJfbmFtZSldKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAg
cmV0dXJuIEdlbmVyYXRvci50eXBlX2J1aWxkZXJfc3RyaW5nX2Zvcl90eXBlKHR5cGVfbWVtYmVy
LnR5cGUpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIHR5cGVfc3RyaW5nX2Zvcl91bmNo
ZWNrZWRfZm9ybWFsX2luX3BhcmFtZXRlcihwYXJhbWV0ZXIpOgorICAgICAgICBfdHlwZSA9IHBh
cmFtZXRlci50eXBlCisgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEFsaWFzZWRUeXBlKToK
KyAgICAgICAgICAgIF90eXBlID0gX3R5cGUuYWxpYXNlZF90eXBlICAjIEZhbGwgdGhyb3VnaCB0
byBlbnVtIG9yIHByaW1pdGl2ZS4KKworICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBFbnVt
VHlwZSk6CisgICAgICAgICAgICBfdHlwZSA9IF90eXBlLnByaW1pdGl2ZV90eXBlICAjIEZhbGwg
dGhyb3VnaCB0byBwcmltaXRpdmUuCisKKyAgICAgICAgc2lnaWwgPSAnKicgaWYgcGFyYW1ldGVy
LmlzX29wdGlvbmFsIGVsc2UgJyYnCisgICAgICAgICMgVGhpcyBoYW5kbGVzIHRoZSAnYW55JyB0
eXBlIGFuZCBvYmplY3RzIHdpdGggZGVmaW5lZCBwcm9wZXJ0aWVzLgorICAgICAgICBpZiBpc2lu
c3RhbmNlKF90eXBlLCBPYmplY3RUeXBlKSBvciBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpIGlzICdv
YmplY3QnOgorICAgICAgICAgICAgcmV0dXJuICdjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNw
ZWN0b3JPYmplY3Q+JyArIHNpZ2lsCisgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEFycmF5
VHlwZSk6CisgICAgICAgICAgICByZXR1cm4gJ2NvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3Bl
Y3RvckFycmF5PicgKyBzaWdpbAorICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBQcmltaXRp
dmVUeXBlKToKKyAgICAgICAgICAgIGNwcF9uYW1lID0gR2VuZXJhdG9yLmNwcF9uYW1lX2Zvcl9w
cmltaXRpdmVfdHlwZShfdHlwZSkKKyAgICAgICAgICAgIGlmIHBhcmFtZXRlci5pc19vcHRpb25h
bDoKKyAgICAgICAgICAgICAgICByZXR1cm4gJ2NvbnN0ICVzKicgJSBjcHBfbmFtZQorICAgICAg
ICAgICAgZWxpZiBfdHlwZS5yYXdfbmFtZSgpIGluIFsnc3RyaW5nJ106CisgICAgICAgICAgICAg
ICAgcmV0dXJuICdjb25zdCAlcyYnICUgY3BwX25hbWUKKyAgICAgICAgICAgIGVsc2U6CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGNwcF9uYW1lCisKKyAgICAgICAgcmV0dXJuICJ1bmtub3duX3Vu
Y2hlY2tlZF9mb3JtYWxfaW5fcGFyYW1ldGVyX3R5cGUiCisKKyAgICBAc3RhdGljbWV0aG9kCisg
ICAgZGVmIHR5cGVfc3RyaW5nX2Zvcl9jaGVja2VkX2Zvcm1hbF9ldmVudF9wYXJhbWV0ZXIocGFy
YW1ldGVyKToKKyAgICAgICAgcmV0dXJuIEdlbmVyYXRvci50eXBlX3N0cmluZ19mb3JfdHlwZV93
aXRoX25hbWUocGFyYW1ldGVyLnR5cGUsIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwgcGFyYW1l
dGVyLmlzX29wdGlvbmFsKQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiB0eXBlX3N0cmlu
Z19mb3JfdHlwZV9tZW1iZXIobWVtYmVyKToKKyAgICAgICAgcmV0dXJuIEdlbmVyYXRvci50eXBl
X3N0cmluZ19mb3JfdHlwZV93aXRoX25hbWUobWVtYmVyLnR5cGUsIG1lbWJlci5tZW1iZXJfbmFt
ZSwgRmFsc2UpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIHR5cGVfc3RyaW5nX2Zvcl90
eXBlX3dpdGhfbmFtZShfdHlwZSwgdHlwZV9uYW1lLCBpc19vcHRpb25hbCk6CisgICAgICAgIGlm
IGlzaW5zdGFuY2UoX3R5cGUsIChBcnJheVR5cGUsIE9iamVjdFR5cGUpKToKKyAgICAgICAgICAg
IHJldHVybiAnUGFzc1JlZlB0cjwlcz4nICUgR2VuZXJhdG9yLnR5cGVfYnVpbGRlcl9zdHJpbmdf
Zm9yX3R5cGUoX3R5cGUpCisgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEFsaWFzZWRUeXBl
KToKKyAgICAgICAgICAgIGJ1aWxkZXJfdHlwZSA9IEdlbmVyYXRvci50eXBlX2J1aWxkZXJfc3Ry
aW5nX2Zvcl90eXBlKF90eXBlKQorICAgICAgICAgICAgaWYgaXNfb3B0aW9uYWw6CisgICAgICAg
ICAgICAgICAgcmV0dXJuICdjb25zdCAlcyogY29uc3QnICUgYnVpbGRlcl90eXBlCisgICAgICAg
ICAgICBlbGlmIF90eXBlLmFsaWFzZWRfdHlwZS5xdWFsaWZpZWRfbmFtZSgpIGluIFsnaW50ZWdl
cicsICdudW1iZXInXToKKyAgICAgICAgICAgICAgICByZXR1cm4gR2VuZXJhdG9yLmNwcF9uYW1l
X2Zvcl9wcmltaXRpdmVfdHlwZShfdHlwZS5hbGlhc2VkX3R5cGUpCisgICAgICAgICAgICBlbGlm
IF90eXBlLmFsaWFzZWRfdHlwZS5xdWFsaWZpZWRfbmFtZSgpIGluIFsnc3RyaW5nJ106CisgICAg
ICAgICAgICAgICAgcmV0dXJuICdjb25zdCAlcyYnICUgYnVpbGRlcl90eXBlCisgICAgICAgICAg
ICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBidWlsZGVyX3R5cGUKKyAgICAgICAgaWYg
aXNpbnN0YW5jZShfdHlwZSwgUHJpbWl0aXZlVHlwZSk6CisgICAgICAgICAgICBjcHBfbmFtZSA9
IEdlbmVyYXRvci5jcHBfbmFtZV9mb3JfcHJpbWl0aXZlX3R5cGUoX3R5cGUpCisgICAgICAgICAg
ICBpZiBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpIGluIFsnb2JqZWN0J106CisgICAgICAgICAgICAg
ICAgcmV0dXJuICdQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PicKKyAgICAg
ICAgICAgIGVsaWYgX3R5cGUucXVhbGlmaWVkX25hbWUoKSBpbiBbJ2FueSddOgorICAgICAgICAg
ICAgICAgIHJldHVybiAnUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPicKKyAg
ICAgICAgICAgIGVsaWYgaXNfb3B0aW9uYWw6CisgICAgICAgICAgICAgICAgcmV0dXJuICdjb25z
dCAlcyogY29uc3QnICUgY3BwX25hbWUKKyAgICAgICAgICAgIGVsaWYgX3R5cGUucXVhbGlmaWVk
X25hbWUoKSBpbiBbJ3N0cmluZyddOgorICAgICAgICAgICAgICAgIHJldHVybiAnY29uc3QgJXMm
JyAlIGNwcF9uYW1lCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBj
cHBfbmFtZQorICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBFbnVtVHlwZSk6CisgICAgICAg
ICAgICBpZiBfdHlwZS5pc19hbm9ueW1vdXM6CisgICAgICAgICAgICAgICAgZW51bV90eXBlX25h
bWUgPSB1Y2ZpcnN0KHR5cGVfbmFtZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAg
ICAgZW51bV90eXBlX25hbWUgPSAnSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6JXM6OiVzJyAlIChf
dHlwZS50eXBlX2RvbWFpbigpLmRvbWFpbl9uYW1lLCBfdHlwZS5yYXdfbmFtZSgpKQorCisgICAg
ICAgICAgICBpZiBpc19vcHRpb25hbDoKKyAgICAgICAgICAgICAgICByZXR1cm4gJyVzKicgJSBl
bnVtX3R5cGVfbmFtZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4g
JyVzJyAlIGVudW1fdHlwZV9uYW1lCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIHR5cGVf
c3RyaW5nX2Zvcl9mb3JtYWxfb3V0X3BhcmFtZXRlcihwYXJhbWV0ZXIpOgorICAgICAgICBfdHlw
ZSA9IHBhcmFtZXRlci50eXBlCisKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgQWxpYXNl
ZFR5cGUpOgorICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5hbGlhc2VkX3R5cGUgICMgRmFsbCB0
aHJvdWdoLgorCisgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIChPYmplY3RUeXBlLCBBcnJh
eVR5cGUpKToKKyAgICAgICAgICAgIHJldHVybiAnUmVmUHRyPCVzPiYnICUgR2VuZXJhdG9yLnR5
cGVfYnVpbGRlcl9zdHJpbmdfZm9yX3R5cGUoX3R5cGUpCisgICAgICAgIGlmIGlzaW5zdGFuY2Uo
X3R5cGUsIFByaW1pdGl2ZVR5cGUpOgorICAgICAgICAgICAgY3BwX25hbWUgPSBHZW5lcmF0b3Iu
Y3BwX25hbWVfZm9yX3ByaW1pdGl2ZV90eXBlKF90eXBlKQorICAgICAgICAgICAgaWYgcGFyYW1l
dGVyLmlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAgIHJldHVybiAiSW5zcGVjdG9yOjpUeXBl
QnVpbGRlcjo6T3B0T3V0cHV0PCVzPioiICUgY3BwX25hbWUKKyAgICAgICAgICAgIGVsc2U6Cisg
ICAgICAgICAgICAgICAgcmV0dXJuICclcyonICUgY3BwX25hbWUKKyAgICAgICAgaWYgaXNpbnN0
YW5jZShfdHlwZSwgRW51bVR5cGUpOgorICAgICAgICAgICAgaWYgX3R5cGUuaXNfYW5vbnltb3Vz
OgorICAgICAgICAgICAgICAgIHJldHVybiAnSW5zcGVjdG9yJXNCYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXI6OiVzKicgJSAoX3R5cGUudHlwZV9kb21haW4oKS5kb21haW5fbmFtZSwgdWNmaXJzdChw
YXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAg
ICAgICByZXR1cm4gJ0luc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OiVzOjolcyonICUgKF90eXBlLnR5
cGVfZG9tYWluKCkuZG9tYWluX25hbWUsIF90eXBlLnJhd19uYW1lKCkpCisKKyAgICAgICAgcmFp
c2UgVmFsdWVFcnJvcigidW5rbm93biBmb3JtYWwgb3V0IHBhcmFtZXRlciB0eXBlLiIpCisKKyAg
ICAjIEZJWE1FOiB0aGlzIGlzIG9ubHkgc2xpZ2h0bHkgZGlmZmVyZW50IGZyb20gb3V0IHBhcmFt
ZXRlcnM7IHRoZXkgY291bGQgYmUgdW5pZmllZC4KKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVm
IHR5cGVfc3RyaW5nX2Zvcl9mb3JtYWxfYXN5bmNfcGFyYW1ldGVyKHBhcmFtZXRlcik6CisgICAg
ICAgIF90eXBlID0gcGFyYW1ldGVyLnR5cGUKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwg
QWxpYXNlZFR5cGUpOgorICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5hbGlhc2VkX3R5cGUgICMg
RmFsbCB0aHJvdWdoLgorCisgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKToK
KyAgICAgICAgICAgIF90eXBlID0gX3R5cGUucHJpbWl0aXZlX3R5cGUgICMgRmFsbCB0aHJvdWdo
LgorCisgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIChPYmplY3RUeXBlLCBBcnJheVR5cGUp
KToKKyAgICAgICAgICAgIHJldHVybiAnUGFzc1JlZlB0cjwlcz4nICUgR2VuZXJhdG9yLnR5cGVf
YnVpbGRlcl9zdHJpbmdfZm9yX3R5cGUoX3R5cGUpCisgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5
cGUsIFByaW1pdGl2ZVR5cGUpOgorICAgICAgICAgICAgY3BwX25hbWUgPSBHZW5lcmF0b3IuY3Bw
X25hbWVfZm9yX3ByaW1pdGl2ZV90eXBlKF90eXBlKQorICAgICAgICAgICAgaWYgcGFyYW1ldGVy
LmlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAgIHJldHVybiAiSW5zcGVjdG9yOjpUeXBlQnVp
bGRlcjo6T3B0T3V0cHV0PCVzPioiICUgY3BwX25hbWUKKyAgICAgICAgICAgIGVsaWYgX3R5cGUu
cXVhbGlmaWVkX25hbWUoKSBpbiBbJ2ludGVnZXInLCAnbnVtYmVyJ106CisgICAgICAgICAgICAg
ICAgcmV0dXJuIEdlbmVyYXRvci5jcHBfbmFtZV9mb3JfcHJpbWl0aXZlX3R5cGUoX3R5cGUpCisg
ICAgICAgICAgICBlbGlmIF90eXBlLnF1YWxpZmllZF9uYW1lKCkgaW4gWydzdHJpbmcnXToKKyAg
ICAgICAgICAgICAgICByZXR1cm4gJ2NvbnN0ICVzJicgJSBjcHBfbmFtZQorICAgICAgICAgICAg
ZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gY3BwX25hbWUKKworICAgICAgICByYWlzZSBW
YWx1ZUVycm9yKCJVbmtub3duIGZvcm1hbCBhc3luYyBwYXJhbWV0ZXIgdHlwZS4iKQorCisgICAg
IyBJbi1wYXJhbWV0ZXJzIGRvbid0IHVzZSBidWlsZGVyIHR5cGVzLCBiZWNhdXNlIHRoZXkgY291
bGQgYmUgcGFzc2VkCisgICAgIyAib3BlbiB0eXBlcyIgdGhhdCBhcmUgbWFudWFsbHkgY29uc3Ry
dWN0ZWQgb3V0IG9mIEluc3BlY3Rvck9iamVjdHMuCisKKyAgICAjIEZJWE1FOiBPbmx5IHBhcmFt
ZXRlcnMgdGhhdCBhcmUgYWN0dWFsbHkgb3BlbiB0eXBlcyBzaG91bGQgbmVlZCBub24tYnVpbGRl
ciBwYXJhbWV0ZXIgdHlwZXMuCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiB0eXBlX3N0cmlu
Z19mb3Jfc3RhY2tfaW5fcGFyYW1ldGVyKHBhcmFtZXRlcik6CisgICAgICAgIF90eXBlID0gcGFy
YW1ldGVyLnR5cGUKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgQWxpYXNlZFR5cGUpOgor
ICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5hbGlhc2VkX3R5cGUgICMgRmFsbCB0aHJvdWdoLgor
CisgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKToKKyAgICAgICAgICAgIF90
eXBlID0gX3R5cGUucHJpbWl0aXZlX3R5cGUgICMgRmFsbCB0aHJvdWdoLgorCisgICAgICAgIGlm
IGlzaW5zdGFuY2UoX3R5cGUsIE9iamVjdFR5cGUpOgorICAgICAgICAgICAgcmV0dXJuICJSZWZQ
dHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IgorICAgICAgICBpZiBpc2luc3RhbmNlKF90
eXBlLCBBcnJheVR5cGUpOgorICAgICAgICAgICAgcmV0dXJuICJSZWZQdHI8SW5zcGVjdG9yOjpJ
bnNwZWN0b3JBcnJheT4iCisgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIFByaW1pdGl2ZVR5
cGUpOgorICAgICAgICAgICAgY3BwX25hbWUgPSBHZW5lcmF0b3IuY3BwX25hbWVfZm9yX3ByaW1p
dGl2ZV90eXBlKF90eXBlKQorICAgICAgICAgICAgaWYgX3R5cGUucXVhbGlmaWVkX25hbWUoKSBp
biBbJ2FueScsICdvYmplY3QnXToKKyAgICAgICAgICAgICAgICByZXR1cm4gIlJlZlB0cjwlcz4i
ICUgR2VuZXJhdG9yLmNwcF9uYW1lX2Zvcl9wcmltaXRpdmVfdHlwZShfdHlwZSkKKyAgICAgICAg
ICAgIGVsaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsIGFuZCBfdHlwZS5xdWFsaWZpZWRfbmFtZSgp
IG5vdCBpbiBbJ2Jvb2xlYW4nLCAnc3RyaW5nJywgJ2ludGVnZXInXToKKyAgICAgICAgICAgICAg
ICByZXR1cm4gIkluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6Ok9wdE91dHB1dDwlcz4iICUgY3BwX25h
bWUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIGNwcF9uYW1lCisK
KyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIHR5cGVfc3RyaW5nX2Zvcl9zdGFja19vdXRfcGFy
YW1ldGVyKHBhcmFtZXRlcik6CisgICAgICAgIF90eXBlID0gcGFyYW1ldGVyLnR5cGUKKyAgICAg
ICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgKEFycmF5VHlwZSwgT2JqZWN0VHlwZSkpOgorICAgICAg
ICAgICAgcmV0dXJuICdSZWZQdHI8JXM+JyAlIEdlbmVyYXRvci50eXBlX2J1aWxkZXJfc3RyaW5n
X2Zvcl90eXBlKF90eXBlKQorICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBBbGlhc2VkVHlw
ZSk6CisgICAgICAgICAgICBidWlsZGVyX3R5cGUgPSBHZW5lcmF0b3IudHlwZV9idWlsZGVyX3N0
cmluZ19mb3JfdHlwZShfdHlwZSkKKyAgICAgICAgICAgIGlmIHBhcmFtZXRlci5pc19vcHRpb25h
bDoKKyAgICAgICAgICAgICAgICByZXR1cm4gIkluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6Ok9wdE91
dHB1dDwlcz4iICUgYnVpbGRlcl90eXBlCisgICAgICAgICAgICByZXR1cm4gJyVzJyAlIGJ1aWxk
ZXJfdHlwZQorICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBQcmltaXRpdmVUeXBlKToKKyAg
ICAgICAgICAgIGNwcF9uYW1lID0gR2VuZXJhdG9yLmNwcF9uYW1lX2Zvcl9wcmltaXRpdmVfdHlw
ZShfdHlwZSkKKyAgICAgICAgICAgIGlmIHBhcmFtZXRlci5pc19vcHRpb25hbDoKKyAgICAgICAg
ICAgICAgICByZXR1cm4gIkluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6Ok9wdE91dHB1dDwlcz4iICUg
Y3BwX25hbWUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIGNwcF9u
YW1lCisgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKToKKyAgICAgICAgICAg
IGlmIF90eXBlLmlzX2Fub255bW91czoKKyAgICAgICAgICAgICAgICByZXR1cm4gJ0luc3BlY3Rv
ciVzQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjolcycgJSAoX3R5cGUudHlwZV9kb21haW4oKS5k
b21haW5fbmFtZSwgdWNmaXJzdChwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpKQorICAgICAgICAg
ICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gJ0luc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6
OiVzOjolcycgJSAoX3R5cGUudHlwZV9kb21haW4oKS5kb21haW5fbmFtZSwgX3R5cGUucmF3X25h
bWUoKSkKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgYXNzZXJ0aW9uX21ldGhvZF9mb3Jf
dHlwZV9tZW1iZXIodHlwZV9tZW1iZXIsIG9iamVjdF9kZWNsYXJhdGlvbik6CisKKyAgICAgICAg
ZGVmIGFzc2VydGlvbl9tZXRob2RfZm9yX3R5cGUoX3R5cGUpOgorICAgICAgICAgICAgcmV0dXJu
ICdCaW5kaW5nVHJhaXRzPCVzPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUnICUgR2VuZXJh
dG9yLnR5cGVfYnVpbGRlcl9zdHJpbmdfZm9yX3R5cGUoX3R5cGUpCisKKyAgICAgICAgaWYgaXNp
bnN0YW5jZSh0eXBlX21lbWJlci50eXBlLCBBbGlhc2VkVHlwZSk6CisgICAgICAgICAgICByZXR1
cm4gYXNzZXJ0aW9uX21ldGhvZF9mb3JfdHlwZSh0eXBlX21lbWJlci50eXBlLmFsaWFzZWRfdHlw
ZSkKKyAgICAgICAgaWYgaXNpbnN0YW5jZSh0eXBlX21lbWJlci50eXBlLCBFbnVtVHlwZSkgYW5k
IHR5cGVfbWVtYmVyLnR5cGUuaXNfYW5vbnltb3VzOgorICAgICAgICAgICAgcmV0dXJuICdCaW5k
aW5nVHJhaXRzPCVzPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUnICUgR2VuZXJhdG9yLnR5
cGVfYnVpbGRlcl9zdHJpbmdfZm9yX3R5cGVfbWVtYmVyKHR5cGVfbWVtYmVyLCBvYmplY3RfZGVj
bGFyYXRpb24pCisKKyAgICAgICAgcmV0dXJuIGFzc2VydGlvbl9tZXRob2RfZm9yX3R5cGUodHlw
ZV9tZW1iZXIudHlwZSkKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgY3BwX25hbWVfZm9y
X3ByaW1pdGl2ZV90eXBlKF90eXBlKToKKyAgICAgICAgcmV0dXJuIF9QUklNSVRJVkVfVE9fQ1BQ
X05BTUVfTUFQLmdldChfdHlwZS5yYXdfbmFtZSgpKQorCisgICAgQHN0YXRpY21ldGhvZAorICAg
IGRlZiBqc19uYW1lX2Zvcl9wYXJhbWV0ZXJfdHlwZShfdHlwZSk6CisgICAgICAgIF90eXBlID0g
X3R5cGUKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgQWxpYXNlZFR5cGUpOgorICAgICAg
ICAgICAgX3R5cGUgPSBfdHlwZS5hbGlhc2VkX3R5cGUgICMgRmFsbCB0aHJvdWdoLgorICAgICAg
ICBpZiBpc2luc3RhbmNlKF90eXBlLCBFbnVtVHlwZSk6CisgICAgICAgICAgICBfdHlwZSA9IF90
eXBlLnByaW1pdGl2ZV90eXBlICAjIEZhbGwgdGhyb3VnaC4KKworICAgICAgICBpZiBpc2luc3Rh
bmNlKF90eXBlLCAoQXJyYXlUeXBlLCBPYmplY3RUeXBlKSk6CisgICAgICAgICAgICByZXR1cm4g
J29iamVjdCcKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgUHJpbWl0aXZlVHlwZSk6Cisg
ICAgICAgICAgICBpZiBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpIGluIFsnb2JqZWN0JywgJ2FueSdd
OgorICAgICAgICAgICAgICAgIHJldHVybiAnb2JqZWN0JworICAgICAgICAgICAgZWxpZiBfdHlw
ZS5xdWFsaWZpZWRfbmFtZSgpIGluIFsnaW50ZWdlcicsICdudW1iZXInXToKKyAgICAgICAgICAg
ICAgICByZXR1cm4gJ251bWJlcicKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAg
cmV0dXJuIF90eXBlLnF1YWxpZmllZF9uYW1lKCkKKworICAgICMgRGVjaWRlIHdoZXRoZXIgY2Vy
dGFpbiBoZWxwZXJzIGFyZSBuZWNlc3NhcnkgaW4gYSBzaXR1YXRpb24uCisgICAgQHN0YXRpY21l
dGhvZAorICAgIGRlZiBzaG91bGRfdXNlX3dyYXBwZXJfZm9yX3JldHVybl90eXBlKF90eXBlKToK
KyAgICAgICAgcmV0dXJuIG5vdCBpc2luc3RhbmNlKF90eXBlLCAoQXJyYXlUeXBlLCBPYmplY3RU
eXBlKSkKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgc2hvdWxkX3Bhc3NfYnlfY29weV9m
b3JfcmV0dXJuX3R5cGUoX3R5cGUpOgorICAgICAgICByZXR1cm4gaXNpbnN0YW5jZShfdHlwZSwg
KEFycmF5VHlwZSwgT2JqZWN0VHlwZSkpIG9yIChpc2luc3RhbmNlKF90eXBlLCAoUHJpbWl0aXZl
VHlwZSkpIGFuZCBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpID09ICJvYmplY3QiKQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJh
dG9yX3RlbXBsYXRlcy5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9jb2RlZ2VuL2dlbmVyYXRvcl90ZW1wbGF0ZXMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjlmMGYzNzUxY2Jh
OTJlZWRmMzlhMmI2Mzk1M2Y3ZGNiODFkNzA3OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRvcl90ZW1wbGF0
ZXMucHkKQEAgLTAsMCArMSwyNjYgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyBDb3B5
cmlnaHQgKGMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmln
aHQgKGMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisj
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisj
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisjIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworIyBHZW5lcmF0b3Ig
dGVtcGxhdGVzLCB3aGljaCBjYW4gYmUgZmlsbGVkIHdpdGggc3RyaW5nLlRlbXBsYXRlLgorIyBG
b2xsb3dpbmcgYXJlIGNsYXNzZXMgdGhhdCBmaWxsIHRoZSB0ZW1wbGF0ZXMgZnJvbSB0aGUgdHlw
ZWNoZWNrZWQgbW9kZWwuCisKKworY2xhc3MgR2VuZXJhdG9yVGVtcGxhdGVzOgorICAgIENvcHly
aWdodEJsb2NrID0gKAorICAgICIiIi8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
JHtpbnB1dEZpbGVuYW1lfQorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eSIiIikKKworICAgIENwcEhlYWRlclByZWx1ZGUgPSAoCisgICAgIiIiI2lmbmRlZiAke2hlYWRl
ckd1YXJkU3RyaW5nfQorI2RlZmluZSAke2hlYWRlckd1YXJkU3RyaW5nfQorCisjaWYgRU5BQkxF
KElOU1BFQ1RPUikKKworJHtpbmNsdWRlc30KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKyR7
dHlwZWRlZnN9IiIiKQorCisgICAgQ3BwSGVhZGVyUG9zdGx1ZGUgPSAoCisgICAgIiIifSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorCisjZW5k
aWYgLy8gIWRlZmluZWQoJHtoZWFkZXJHdWFyZFN0cmluZ30pIiIiKQorCisgICAgQ3BwSW1wbGVt
ZW50YXRpb25QcmVsdWRlID0gKAorICAgICIiIiNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICR7cHJpbWFyeUluY2x1ZGV9CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCiske3NlY29uZGFy
eUluY2x1ZGVzfQorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsiIiIpCisKKyAgICBDcHBJbXBsZW1l
bnRhdGlvblBvc3RsdWRlID0gKAorICAgICIiIn0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisj
ZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKyIiIikKKworICAgIEJhY2tlbmREaXNwYXRjaGVy
SGVhZGVyRG9tYWluSGFuZGxlckRlY2xhcmF0aW9uID0gKAorICAgICIiIiR7Y2xhc3NBbmRFeHBv
cnRNYWNyb30gSW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7
CitwdWJsaWM6Ciske2NvbW1hbmREZWNsYXJhdGlvbnN9Citwcm90ZWN0ZWQ6CisgICAgdmlydHVh
bCB+SW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpOworfTsi
IiIpCisKKyAgICBCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckRvbWFpbkRpc3BhdGNoZXJEZWNsYXJh
dGlvbiA9ICgKKyAgICAiIiIke2NsYXNzQW5kRXhwb3J0TWFjcm99IEluc3BlY3RvciR7ZG9tYWlu
TmFtZX1CYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3BlY3Rv
clN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFz
c1JlZlB0cjxJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShJ
bnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiwgSW5zcGVjdG9yJHtkb21haW5O
YW1lfUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOworICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRj
aChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFBhc3NSZWZQdHI8SW5zcGVjdG9y
OjpJbnNwZWN0b3JPYmplY3Q+IG1lc3NhZ2UpIG92ZXJyaWRlOworJHtjb21tYW5kRGVjbGFyYXRp
b25zfQorcHJpdmF0ZToKKyAgICBJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNo
ZXIoSW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciosIEluc3BlY3RvciR7ZG9t
YWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKKyAgICBJbnNwZWN0b3Ike2RvbWFp
bk5hbWV9QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBtX2FnZW50OworfTsiIiIpCisKKyAgICBC
YWNrZW5kRGlzcGF0Y2hlckhlYWRlckFzeW5jQ29tbWFuZERlY2xhcmF0aW9uID0gKAorICAgICIi
IiAgICBjbGFzcyAke2NhbGxiYWNrTmFtZX0gOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlIHsKKyAgICBwdWJsaWM6CisgICAgICAgICR7
Y2FsbGJhY2tOYW1lfShQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXI+LCBpbnQgaWQpOworICAgICAgICB2b2lkIHNlbmRTdWNjZXNzKCR7b3V0UGFyYW1ldGVy
c30pOworICAgIH07CisgICAgdmlydHVhbCB2b2lkICR7Y29tbWFuZE5hbWV9KCR7aW5QYXJhbWV0
ZXJzfSkgPSAwOyIiIikKKworICAgIEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25TbWFs
bFN3aXRjaCA9ICgKKyAgICAiIiJ2b2lkIEluc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlz
cGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBQYXNz
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbWVzc2FnZSkKK3sKKyAgICBSZWY8SW5zcGVjdG9yJHtk
b21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKKworJHtkaXNwYXRj
aENhc2VzfQorICAgIGVsc2UKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJv
dG9jb2xFcnJvcigmY2FsbElkLCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90
Rm91bmQsIFN0cmluZygiJyIpICsgIiR7ZG9tYWluTmFtZX0iICsgJy4nICsgbWV0aG9kICsgIicg
d2FzIG5vdCBmb3VuZCIpOworfSIiIikKKworICAgIEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50
YXRpb25MYXJnZVN3aXRjaCA9ICgKKyIiInZvaWQgSW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tl
bmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBtZXRob2Qs
IFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtZXNzYWdlKQoreworICAgIFJlZjxJbnNwZWN0
b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOworCisgICAg
dHlwZWRlZiB2b2lkIChJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXI6OipD
YWxsSGFuZGxlcikobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0
JiBtZXNzYWdlKTsKKyAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBDYWxsSGFuZGxlcj4gRGlz
cGF0Y2hNYXA7CisgICAgREVQUkVDQVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FMKERpc3BhdGNoTWFw
LCBkaXNwYXRjaE1hcCwgKCkpOworICAgIGlmIChkaXNwYXRjaE1hcC5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgc3RhdGljIGNvbnN0IHN0cnVjdCBNZXRob2RUYWJsZSB7CisgICAgICAgICAgICBjb25z
dCBjaGFyKiBuYW1lOworICAgICAgICAgICAgQ2FsbEhhbmRsZXIgaGFuZGxlcjsKKyAgICAgICAg
fSBjb21tYW5kc1tdID0geworJHtkaXNwYXRjaENhc2VzfQorICAgICAgICB9OworICAgICAgICBz
aXplX3QgbGVuZ3RoID0gV1RGX0FSUkFZX0xFTkdUSChjb21tYW5kcyk7CisgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCisgICAgICAgICAgICBkaXNwYXRjaE1hcC5h
ZGQoY29tbWFuZHNbaV0ubmFtZSwgY29tbWFuZHNbaV0uaGFuZGxlcik7CisgICAgfQorCisgICAg
SGFzaE1hcDxTdHJpbmcsIENhbGxIYW5kbGVyPjo6aXRlcmF0b3IgaXQgPSBkaXNwYXRjaE1hcC5m
aW5kKG1ldGhvZCk7CisgICAgaWYgKGl0ID09IGRpc3BhdGNoTWFwLmVuZCgpKSB7CisgICAgICAg
IG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCBTdHJpbmcoIiciKSArICIke2Rv
bWFpbk5hbWV9IiArICcuJyArIG1ldGhvZCArICInIHdhcyBub3QgZm91bmQiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgICgoKnRoaXMpLippdC0+dmFsdWUpKGNhbGxJZCwgKm1lc3Nh
Z2UuZ2V0KCkpOworfSIiIikKKworICAgIEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25E
b21haW5Db25zdHJ1Y3RvciA9ICgKKyAgICAiIiJQYXNzUmVmUHRyPEluc3BlY3RvciR7ZG9tYWlu
TmFtZX1CYWNrZW5kRGlzcGF0Y2hlcj4gSW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNw
YXRjaGVyOjpjcmVhdGUoSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRj
aGVyLCBJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2Vu
dCkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEluc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNr
ZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlciwgYWdlbnQpKTsKK30KKworSW5zcGVjdG9y
JHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyOjpJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFj
a2VuZERpc3BhdGNoZXIoSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRj
aGVyLCBJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2Vu
dCkKKyAgICA6IEluc3BlY3RvclN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmRE
aXNwYXRjaGVyKQorICAgICwgbV9hZ2VudChhZ2VudCkKK3sKKyAgICBtX2JhY2tlbmREaXNwYXRj
aGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4oQVNDSUlMaXRlcmFsKCIke2RvbWFpbk5h
bWV9IiksIHRoaXMpOworfSIiIikKKworICAgIEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRp
b25QcmVwYXJlQ29tbWFuZEFyZ3VtZW50cyA9ICgKKyIiIiAgICBSZWZQdHI8SW5zcGVjdG9yQXJy
YXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOworICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IG1lc3NhZ2UuZ2V0T2JqZWN0KEFT
Q0lJTGl0ZXJhbCgicGFyYW1zIikpOworICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFp
bmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOworICAgIEluc3BlY3RvckFycmF5KiBwcm90
b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOworJHtpblBhcmFtZXRlckRlY2xh
cmF0aW9uc30KKyAgICBpZiAocHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CisgICAgICAgIFN0
cmluZyBlcnJvck1lc3NhZ2UgPSBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0
aG9kIFwnJXNcJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiJHtkb21haW5OYW1lfS4ke2NvbW1hbmRO
YW1lfSIpOworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9y
KCZjYWxsSWQsIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCBlcnJv
ck1lc3NhZ2UsIHByb3RvY29sRXJyb3JzLnJlbGVhc2UoKSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisiIiIpCisKKyAgICBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uQXN5bmNDb21t
YW5kID0gKAorIiIiSW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVySGFuZGxl
cjo6JHtjYWxsYmFja05hbWV9Ojoke2NhbGxiYWNrTmFtZX0oUGFzc1JlZlB0cjxJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlcj4gYmFja2VuZERpc3BhdGNoZXIsIGludCBpZCkgOiBJbnNwZWN0b3I6
Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2UoYmFja2VuZERpc3BhdGNo
ZXIsIGlkKSB7IH0KKwordm9pZCBJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNo
ZXJIYW5kbGVyOjoke2NhbGxiYWNrTmFtZX06OnNlbmRTdWNjZXNzKCR7Zm9ybWFsUGFyYW1ldGVy
c30pCit7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4ganNvbk1lc3NhZ2UgPSBJbnNwZWN0
b3JPYmplY3Q6OmNyZWF0ZSgpOworJHtvdXRQYXJhbWV0ZXJBc3NpZ25tZW50c30KKyAgICBzZW5k
SWZBY3RpdmUoanNvbk1lc3NhZ2UsIEVycm9yU3RyaW5nKCkpOworfSIiIikKKworICAgIEZyb250
ZW5kRGlzcGF0Y2hlckRvbWFpbkRpc3BhdGNoZXJEZWNsYXJhdGlvbiA9ICgKKyIiIiR7Y2xhc3NB
bmRFeHBvcnRNYWNyb30gSW5zcGVjdG9yJHtkb21haW5OYW1lfUZyb250ZW5kRGlzcGF0Y2hlciB7
CitwdWJsaWM6CisgICAgSW5zcGVjdG9yJHtkb21haW5OYW1lfUZyb250ZW5kRGlzcGF0Y2hlcihJ
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgOiBtX2lu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbChpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgfQorJHtl
dmVudERlY2xhcmF0aW9uc30KK3ByaXZhdGU6CisgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
KiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKK307IiIiKQorCisgICAgVHlwZUJ1aWxkZXJE
ZWNsYXJhdGlvblByZWx1ZGUgPSAoCisiIiIgICAgdGVtcGxhdGU8aW50IFNUQVRFPgorICAgIGNs
YXNzIEJ1aWxkZXIgeworICAgIHByaXZhdGU6CisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3I6Oklu
c3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CisKKyAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1
aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwor
ICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPC8qJHtvYmplY3RUeXBlfSov
SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IHB0cikKKyAgICAgICAgeworICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9u
b25faW5pdF9zdGF0ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKKyAgICAgICAgfQor
ICAgICAgICBmcmllbmQgY2xhc3MgJHtvYmplY3RUeXBlfTsKKyAgICBwdWJsaWM6IiIiKQorCisg
ICAgVHlwZUJ1aWxkZXJEZWNsYXJhdGlvblBvc3RsdWRlID0gKAorIiIiCisgICAgICAgIG9wZXJh
dG9yIFJlZlB0cjwke29iamVjdFR5cGV9PiYgKCkKKyAgICAgICAgeworICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsK
KyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZigke29iamVjdFR5cGV9KSA9PSBzaXpl
b2YoSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QpLCBjYW5ub3RfY2FzdCk7CisgICAgICAgICAg
ICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPCR7b2JqZWN0VHlwZX0+Kj4oJm1fcmVz
dWx0KTsKKyAgICAgICAgfQorCisgICAgICAgIFBhc3NSZWZQdHI8JHtvYmplY3RUeXBlfT4gcmVs
ZWFzZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBSZWZQdHI8JHtvYmplY3RUeXBl
fT4oKnRoaXMpLnJlbGVhc2UoKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICAvKgorICAgICAq
IFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKKyR7Y29uc3RydWN0b3JFeGFtcGxlfQorICAgICAqLwor
ICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0Ojpj
cmVhdGUoKSk7CisgICAgfQorICAgIHR5cGVkZWYgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6U3Ry
dWN0SXRlbVRyYWl0cyBJdGVtVHJhaXRzOyIiIikKKworICAgIFR5cGVCdWlsZGVyT2JqZWN0UnVu
dGltZUNhc3QgPSAoCisiIiJQYXNzUmVmUHRyPCR7b2JqZWN0VHlwZX0+IEJpbmRpbmdUcmFpdHM8
JHtvYmplY3RUeXBlfT46OnJ1bnRpbWVDYXN0KFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0
b3JWYWx1ZT4gdmFsdWUpCit7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0
PiBvYmplY3Q7CisgICAgYm9vbCBjYXN0UmVzID0gdmFsdWUtPmFzT2JqZWN0KCZvYmplY3QpOwor
ICAgIEFTU0VSVF9VTlVTRUQoY2FzdFJlcywgY2FzdFJlcyk7CisjaWYgIUFTU0VSVF9ESVNBQkxF
RAorICAgIEJpbmRpbmdUcmFpdHM8JHtvYmplY3RUeXBlfT46OmFzc2VydFZhbHVlSGFzRXhwZWN0
ZWRUeXBlKG9iamVjdC5nZXQoKSk7CisjZW5kaWYgIC8vICFBU1NFUlRfRElTQUJMRUQKKyAgICBD
T01QSUxFX0FTU0VSVChzaXplb2YoJHtvYmplY3RUeXBlfSkgPT0gc2l6ZW9mKEluc3BlY3Rvcjo6
SW5zcGVjdG9yT2JqZWN0QmFzZSksIHR5cGVfY2FzdF9wcm9ibGVtKTsKKyAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8JHtvYmplY3RUeXBlfSo+KHN0YXRpY19jYXN0PEluc3BlY3Rvcjo6SW5zcGVjdG9y
T2JqZWN0QmFzZSo+KG9iamVjdC5nZXQoKSkpOworfQorIiIiCispCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9tb2RlbHMucHkgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9tb2RlbHMucHkK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNGFjMDJmYmNiZWExNTViN2JjZTNmYTJmMWE0NjYxMDA5NmIyYjFlMwotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9j
b2RlZ2VuL21vZGVscy5weQpAQCAtMCwwICsxLDU4MCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9u
CisjCisjIENvcHlyaWdodCAoYykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisjIENvcHlyaWdodCAoYykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMg
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisjIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitp
bXBvcnQgbG9nZ2luZworCitsb2cgPSBsb2dnaW5nLmdldExvZ2dlcignZ2xvYmFsJykKKworCitk
ZWYgdWNmaXJzdChzdHIpOgorICAgIHJldHVybiBzdHJbOjFdLnVwcGVyKCkgKyBzdHJbMTpdCisK
KworX0ZSQU1FV09SS19DT05GSUdfTUFQID0geworICAgICJHbG9iYWwiOiB7CisgICAgICAgICJw
cmVmaXgiOiAiIiwKKyAgICB9LAorCisgICAgIldURiI6IHsKKyAgICAgICAgInByZWZpeCI6ICJX
VEYiLAorICAgIH0sCisgICAgIkphdmFTY3JpcHRDb3JlIjogeworICAgICAgICAicHJlZml4Ijog
IkpTIiwKKyAgICAgICAgImV4cG9ydF9tYWNybyI6ICJKU19FWFBPUlRfUFJJVkFURSIKKyAgICB9
LAorICAgICJXZWJDb3JlIjogeworICAgICAgICAicHJlZml4IjogIldlYiIsCisgICAgfSwKKyAg
ICAjIFVzZWQgZm9yIGNvZGUgZ2VuZXJhdG9yIHRlc3RzLgorICAgICJUZXN0IjogeworICAgICAg
ICAicHJlZml4IjogIlRlc3QiLAorICAgIH0KK30KKworCisjIEZJWE1FOiBUaGVzZSBzaG91bGQg
YmUgY29udmVydGVkIGludG8gSlNPTiBwcm9wZXJ0aWVzLCBvciByZW5hbWVkLgorX1RZUEVTX05F
RURJTkdfUkVOQU1FX1dPUktBUk9VTkRTID0geworICAgICdSR0JBJzogJ1JnYmEnLCAjIFJHQkEg
aXMgcmVwb3J0ZWQgdG8gYmUgY29uZmxpY3Rpbmcgd2l0aCBhIGRlZmluZSBuYW1lIGluIFdpbmRv
d3MgQ0UuCisgICAgIyBGb3IgdGVzdGluZyBvbmx5LgorICAgICdVbnBsZWFzYW50TmFtZSc6ICdI
YXBweU5hbWUnCit9CisKKworY2xhc3MgUGFyc2VFeGNlcHRpb24oRXhjZXB0aW9uKToKKyAgICBw
YXNzCisKKworY2xhc3MgVHlwZWNoZWNrRXhjZXB0aW9uKEV4Y2VwdGlvbik6CisgICAgcGFzcwor
CisKK2NsYXNzIEZyYW1ld29yazoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSk6CisgICAg
ICAgIHNlbGYuX3NldHRpbmdzID0gX0ZSQU1FV09SS19DT05GSUdfTUFQW25hbWVdCisgICAgICAg
IHNlbGYubmFtZSA9IG5hbWUKKworICAgIGRlZiBzZXR0aW5nKHNlbGYsIGtleSwgZGVmYXVsdD0n
Jyk6CisgICAgICAgIHJldHVybiBzZWxmLl9zZXR0aW5ncy5nZXQoa2V5LCBkZWZhdWx0KQorCisg
ICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBmcm9tU3RyaW5nKGZyYW1ld29ya1N0cmluZyk6Cisg
ICAgICAgIGlmIGZyYW1ld29ya1N0cmluZyA9PSAiR2xvYmFsIjoKKyAgICAgICAgICAgIHJldHVy
biBGcmFtZXdvcmtzLkdsb2JhbAorCisgICAgICAgIGlmIGZyYW1ld29ya1N0cmluZyA9PSAiV1RG
IjoKKyAgICAgICAgICAgIHJldHVybiBGcmFtZXdvcmtzLldURgorCisgICAgICAgIGlmIGZyYW1l
d29ya1N0cmluZyA9PSAiSmF2YVNjcmlwdENvcmUiOgorICAgICAgICAgICAgcmV0dXJuIEZyYW1l
d29ya3MuSmF2YVNjcmlwdENvcmUKKworICAgICAgICBpZiBmcmFtZXdvcmtTdHJpbmcgPT0gIldl
YkNvcmUiOgorICAgICAgICAgICAgcmV0dXJuIEZyYW1ld29ya3MuV2ViQ29yZQorCisgICAgICAg
IGlmIGZyYW1ld29ya1N0cmluZyA9PSAiVGVzdCI6CisgICAgICAgICAgICByZXR1cm4gRnJhbWV3
b3Jrcy5UZXN0CisKKyAgICAgICAgcmFpc2UgUGFyc2VFeGNlcHRpb24oIlVua25vd24gZnJhbWV3
b3JrOiAlcyIgJSBmcmFtZXdvcmtTdHJpbmcpCisKKworY2xhc3MgRnJhbWV3b3JrczoKKyAgICBH
bG9iYWwgPSBGcmFtZXdvcmsoIkdsb2JhbCIpCisgICAgV1RGID0gRnJhbWV3b3JrKCJXVEYiKQor
ICAgIEphdmFTY3JpcHRDb3JlID0gRnJhbWV3b3JrKCJKYXZhU2NyaXB0Q29yZSIpCisgICAgV2Vi
Q29yZSA9IEZyYW1ld29yaygiV2ViQ29yZSIpCisgICAgVGVzdCA9IEZyYW1ld29yaygiVGVzdCIp
CisKKworY2xhc3MgVHlwZVJlZmVyZW5jZToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdHlwZV9r
aW5kLCByZWZlcmVuY2VkX3R5cGVfbmFtZSwgZW51bV92YWx1ZXMsIGFycmF5X2l0ZW1zKToKKyAg
ICAgICAgc2VsZi50eXBlX2tpbmQgPSB0eXBlX2tpbmQKKyAgICAgICAgc2VsZi5yZWZlcmVuY2Vk
X3R5cGVfbmFtZSA9IF9UWVBFU19ORUVESU5HX1JFTkFNRV9XT1JLQVJPVU5EUy5nZXQocmVmZXJl
bmNlZF90eXBlX25hbWUsIHJlZmVyZW5jZWRfdHlwZV9uYW1lKQorICAgICAgICBzZWxmLmVudW1f
dmFsdWVzID0gZW51bV92YWx1ZXMKKyAgICAgICAgaWYgYXJyYXlfaXRlbXMgaXMgTm9uZToKKyAg
ICAgICAgICAgIHNlbGYuYXJyYXlfdHlwZV9yZWYgPSBOb25lCisgICAgICAgIGVsc2U6CisgICAg
ICAgICAgICBzZWxmLmFycmF5X3R5cGVfcmVmID0gVHlwZVJlZmVyZW5jZShhcnJheV9pdGVtcy5n
ZXQoJ3R5cGUnKSwgYXJyYXlfaXRlbXMuZ2V0KCckcmVmJyksIGFycmF5X2l0ZW1zLmdldCgnZW51
bScpLCBhcnJheV9pdGVtcy5nZXQoJ2l0ZW1zJykpCisKKyAgICAgICAgaWYgdHlwZV9raW5kIGlz
IG5vdCBOb25lIGFuZCByZWZlcmVuY2VkX3R5cGVfbmFtZSBpcyBub3QgTm9uZToKKyAgICAgICAg
ICAgIHJhaXNlIFBhcnNlRXhjZXB0aW9uKCJUeXBlIHJlZmVyZW5jZSBjYW5ub3QgaGF2ZSBib3Ro
ICd0eXBlJyBhbmQgJyRyZWYnIGtleXMuIikKKworICAgICAgICBpZiB0eXBlX2tpbmQgPT0gImFy
cmF5IiBhbmQgYXJyYXlfaXRlbXMgaXMgTm9uZToKKyAgICAgICAgICAgIHJhaXNlIFBhcnNlRXhj
ZXB0aW9uKCJUeXBlIHJlZmVyZW5jZSB3aXRoIHR5cGUgJ2FycmF5JyBtdXN0IGhhdmUga2V5ICdp
dGVtcycgdG8gZGVmaW5lIGFycmF5IGVsZW1lbnQgdHlwZS4iKQorCisgICAgICAgIGlmIGVudW1f
dmFsdWVzIGlzIG5vdCBOb25lIGFuZCBsZW4oZW51bV92YWx1ZXMpID09IDA6CisgICAgICAgICAg
ICByYWlzZSBQYXJzZUV4Y2VwdGlvbigiVHlwZSByZWZlcmVuY2Ugd2l0aCBlbnVtIHZhbHVlcyBt
dXN0IGhhdmUgYXQgbGVhc3Qgb25lIGVudW0gdmFsdWUuIikKKworICAgIGRlZiByZWZlcmVuY2Vk
X25hbWUoc2VsZik6CisgICAgICAgIGlmIHNlbGYucmVmZXJlbmNlZF90eXBlX25hbWUgaXMgbm90
IE5vbmU6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5yZWZlcmVuY2VkX3R5cGVfbmFtZQorICAg
ICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYudHlwZV9raW5kICAjIGludGVnZXIs
IHN0cmluZywgbnVtYmVyLCBib29sZWFuLCBlbnVtLCBvYmplY3QsIGFycmF5CisKKworY2xhc3Mg
VHlwZToKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBf
X2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICByZXR1cm4gc2VsZi5xdWFsaWZpZWRfbmFtZSgp
ID09IG90aGVyLnF1YWxpZmllZF9uYW1lKCkKKworICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKKyAg
ICAgICAgcmV0dXJuIHNlbGYucXVhbGlmaWVkX25hbWUoKS5fX2hhc2hfXygpCisKKyAgICBkZWYg
cmF3X25hbWUoc2VsZik6CisgICAgICAgIHJldHVybiBfVFlQRVNfTkVFRElOR19SRU5BTUVfV09S
S0FST1VORFMuZ2V0KHNlbGYuX25hbWUsIHNlbGYuX25hbWUpCisKKyAgICAjIFRoZXNlIG1ldGhv
ZHMgc2hvdWxkIGJlIG92ZXJyaWRkZW4gYnkgc3ViY2xhc3Nlcy4KKyAgICBkZWYgaXNfZW51bShz
ZWxmKToKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgdHlwZV9kb21haW4oc2VsZik6
CisgICAgICAgIHBhc3MKKworICAgIGRlZiBxdWFsaWZpZWRfbmFtZShzZWxmKToKKyAgICAgICAg
cGFzcworCisgICAgIyBUaGlzIGlzIHVzZWQgdG8gcmVzb2x2ZSBuZXN0ZWQgdHlwZXMgYWZ0ZXIg
aW5zdGFuY2VzIGFyZSBjcmVhdGVkLgorICAgIGRlZiByZXNvbHZlX3R5cGVfcmVmZXJlbmNlcyhz
ZWxmLCBwcm90b2NvbCk6CisgICAgICAgIHBhc3MKKworCitjbGFzcyBQcmltaXRpdmVUeXBlKFR5
cGUpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lKToKKyAgICAgICAgc2VsZi5fbmFtZSA9
IG5hbWUKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICdQcmltaXRp
dmVUeXBlWyVzXScgJSBzZWxmLnF1YWxpZmllZF9uYW1lKCkKKworICAgIGRlZiB0eXBlX2RvbWFp
bihzZWxmKToKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBxdWFsaWZpZWRfbmFtZShz
ZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYucmF3X25hbWUoKQorCisKK2NsYXNzIEFsaWFzZWRU
eXBlKFR5cGUpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCBkb21haW4sIGFsaWFzZWRf
dHlwZV9yZWYpOgorICAgICAgICBzZWxmLl9uYW1lID0gbmFtZQorICAgICAgICBzZWxmLl9kb21h
aW4gPSBkb21haW4KKyAgICAgICAgc2VsZi5fYWxpYXNlZF90eXBlX3JlZiA9IGFsaWFzZWRfdHlw
ZV9yZWYKKyAgICAgICAgc2VsZi5hbGlhc2VkX3R5cGUgPSBOb25lCisKKyAgICBkZWYgX19yZXBy
X18oc2VsZik6CisgICAgICAgIGlmIHNlbGYuYWxpYXNlZF90eXBlIGlzIG5vdCBOb25lOgorICAg
ICAgICAgICAgcmV0dXJuICdBbGlhc2VkVHlwZVslcyAtPiAlcl0nICUgKHNlbGYucXVhbGlmaWVk
X25hbWUoKSwgc2VsZi5hbGlhc2VkX3R5cGUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBy
ZXR1cm4gJ0FsaWFzZWRUeXBlWyVzIC0+ICh1bnJlc29sdmVkKV0nICUgc2VsZi5xdWFsaWZpZWRf
bmFtZSgpCisKKyAgICBkZWYgaXNfZW51bShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuYWxp
YXNlZF90eXBlLmlzX2VudW0oKQorCisgICAgZGVmIHR5cGVfZG9tYWluKHNlbGYpOgorICAgICAg
ICByZXR1cm4gc2VsZi5fZG9tYWluCisKKyAgICBkZWYgcXVhbGlmaWVkX25hbWUoc2VsZik6Cisg
ICAgICAgIHJldHVybiAgIi4iLmpvaW4oW3NlbGYudHlwZV9kb21haW4oKS5kb21haW5fbmFtZSwg
c2VsZi5yYXdfbmFtZSgpXSkKKworICAgIGRlZiByZXNvbHZlX3R5cGVfcmVmZXJlbmNlcyhzZWxm
LCBwcm90b2NvbCk6CisgICAgICAgIGlmIHNlbGYuYWxpYXNlZF90eXBlIGlzIG5vdCBOb25lOgor
ICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgc2VsZi5hbGlhc2VkX3R5cGUgPSBwcm90b2Nv
bC5sb29rdXBfdHlwZV9yZWZlcmVuY2Uoc2VsZi5fYWxpYXNlZF90eXBlX3JlZiwgc2VsZi50eXBl
X2RvbWFpbigpKQorICAgICAgICBsb2cuZGVidWcoIjwgUmVzb2x2ZWQgdHlwZSByZWZlcmVuY2Ug
Zm9yIGFsaWFzZWQgdHlwZSBpbiAlczogJXMiICUgKHNlbGYucXVhbGlmaWVkX25hbWUoKSwgc2Vs
Zi5hbGlhc2VkX3R5cGUucXVhbGlmaWVkX25hbWUoKSkpCisKKworY2xhc3MgRW51bVR5cGUoVHlw
ZSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsIGRvbWFpbiwgdmFsdWVzLCBwcmltaXRp
dmVfdHlwZV9yZWYsIGlzX2Fub255bW91cz1GYWxzZSk6CisgICAgICAgIHNlbGYuX25hbWUgPSBu
YW1lCisgICAgICAgIHNlbGYuX2RvbWFpbiA9IGRvbWFpbgorICAgICAgICBzZWxmLl92YWx1ZXMg
PSB2YWx1ZXMKKyAgICAgICAgc2VsZi5fcHJpbWl0aXZlX3R5cGVfcmVmID0gcHJpbWl0aXZlX3R5
cGVfcmVmCisgICAgICAgIHNlbGYucHJpbWl0aXZlX3R5cGUgPSBOb25lCisgICAgICAgIHNlbGYu
aXNfYW5vbnltb3VzID0gaXNfYW5vbnltb3VzCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6Cisg
ICAgICAgIHJldHVybiAnRW51bVR5cGVbdmFsdWVfdHlwZT0lczsgdmFsdWVzPSVzXScgJSAoc2Vs
Zi5xdWFsaWZpZWRfbmFtZSgpLCAnLCAnLmpvaW4obWFwKHN0ciwgc2VsZi5lbnVtX3ZhbHVlcygp
KSkpCisKKyAgICBkZWYgaXNfZW51bShzZWxmKToKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAg
IGRlZiB0eXBlX2RvbWFpbihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2RvbWFpbgorCisg
ICAgZGVmIGVudW1fdmFsdWVzKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fdmFsdWVzCisK
KyAgICBkZWYgcXVhbGlmaWVkX25hbWUoc2VsZik6CisgICAgICAgIHJldHVybiAgIi4iLmpvaW4o
W3NlbGYudHlwZV9kb21haW4oKS5kb21haW5fbmFtZSwgc2VsZi5yYXdfbmFtZSgpXSkKKworICAg
IGRlZiByZXNvbHZlX3R5cGVfcmVmZXJlbmNlcyhzZWxmLCBwcm90b2NvbCk6CisgICAgICAgIGlm
IHNlbGYucHJpbWl0aXZlX3R5cGUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICByZXR1cm4KKwor
ICAgICAgICBzZWxmLnByaW1pdGl2ZV90eXBlID0gcHJvdG9jb2wubG9va3VwX3R5cGVfcmVmZXJl
bmNlKHNlbGYuX3ByaW1pdGl2ZV90eXBlX3JlZiwgRG9tYWlucy5HTE9CQUwpCisgICAgICAgIGxv
Zy5kZWJ1ZygiPCBSZXNvbHZlZCB0eXBlIHJlZmVyZW5jZSBmb3IgZW51bSB0eXBlIGluICVzOiAl
cyIgJSAoc2VsZi5xdWFsaWZpZWRfbmFtZSgpLCBzZWxmLnByaW1pdGl2ZV90eXBlLnF1YWxpZmll
ZF9uYW1lKCkpKQorICAgICAgICBsb2cuZGVidWcoIjw8IGVudW0gdmFsdWVzOiAlcyIgJSBzZWxm
LmVudW1fdmFsdWVzKCkpCisKKworY2xhc3MgQXJyYXlUeXBlKFR5cGUpOgorICAgIGRlZiBfX2lu
aXRfXyhzZWxmLCBlbGVtZW50X3R5cGVfcmVmLCBkb21haW4pOgorICAgICAgICBzZWxmLl9kb21h
aW4gPSBkb21haW4KKyAgICAgICAgc2VsZi5fZWxlbWVudF90eXBlX3JlZiA9IGVsZW1lbnRfdHlw
ZV9yZWYKKyAgICAgICAgc2VsZi5lbGVtZW50X3R5cGUgPSBOb25lCisKKyAgICBkZWYgX19yZXBy
X18oc2VsZik6CisgICAgICAgIGlmIHNlbGYuZWxlbWVudF90eXBlIGlzIG5vdCBOb25lOgorICAg
ICAgICAgICAgcmV0dXJuICdBcnJheVR5cGVbZWxlbWVudF90eXBlPSVyXScgJSBzZWxmLmVsZW1l
bnRfdHlwZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuICdBcnJheVR5cGVbZWxl
bWVudF90eXBlPSh1bnJlc29sdmVkKV0nCisKKyAgICBkZWYgdHlwZV9kb21haW4oc2VsZik6Cisg
ICAgICAgIHJldHVybiBzZWxmLl9kb21haW4KKworICAgIGRlZiBxdWFsaWZpZWRfbmFtZShzZWxm
KToKKyAgICAgICAgcmV0dXJuICAiLiIuam9pbihbImFycmF5Iiwgc2VsZi5lbGVtZW50X3R5cGUu
cXVhbGlmaWVkX25hbWUoKV0pCisKKyAgICBkZWYgcmVzb2x2ZV90eXBlX3JlZmVyZW5jZXMoc2Vs
ZiwgcHJvdG9jb2wpOgorICAgICAgICBpZiBzZWxmLmVsZW1lbnRfdHlwZSBpcyBub3QgTm9uZToK
KyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHNlbGYuZWxlbWVudF90eXBlID0gcHJvdG9j
b2wubG9va3VwX3R5cGVfcmVmZXJlbmNlKHNlbGYuX2VsZW1lbnRfdHlwZV9yZWYsIHNlbGYudHlw
ZV9kb21haW4oKSkKKyAgICAgICAgbG9nLmRlYnVnKCI8IFJlc29sdmVkIHR5cGUgcmVmZXJlbmNl
IGZvciBlbGVtZW50IHR5cGUgaW4gJXM6ICVzIiAlIChzZWxmLnF1YWxpZmllZF9uYW1lKCksIHNl
bGYuZWxlbWVudF90eXBlLnF1YWxpZmllZF9uYW1lKCkpKQorCisKK2NsYXNzIE9iamVjdFR5cGUo
VHlwZSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsIGRvbWFpbiwgbWVtYmVycyk6Cisg
ICAgICAgIHNlbGYuX25hbWUgPSBuYW1lCisgICAgICAgIHNlbGYuX2RvbWFpbiA9IGRvbWFpbgor
ICAgICAgICBzZWxmLm1lbWJlcnMgPSBtZW1iZXJzCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6
CisgICAgICAgIHJldHVybiAnT2JqZWN0VHlwZVslc10nICUgc2VsZi5xdWFsaWZpZWRfbmFtZSgp
CisKKyAgICBkZWYgdHlwZV9kb21haW4oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9kb21h
aW4KKworICAgIGRlZiBxdWFsaWZpZWRfbmFtZShzZWxmKToKKyAgICAgICAgcmV0dXJuICAiLiIu
am9pbihbc2VsZi50eXBlX2RvbWFpbigpLmRvbWFpbl9uYW1lLCBzZWxmLnJhd19uYW1lKCldKQor
CisKK2RlZiBjaGVja19mb3JfcmVxdWlyZWRfcHJvcGVydGllcyhwcm9wcywgb2JqLCB3aGF0KToK
KyAgICBmb3IgcHJvcCBpbiBwcm9wczoKKyAgICAgICAgaWYgcHJvcCBub3QgaW4gb2JqOgorICAg
ICAgICAgICAgcmFpc2UgUGFyc2VFeGNlcHRpb24oIldoZW4gcGFyc2luZyAlcywgcmVxdWlyZWQg
cHJvcGVydHkgbWlzc2luZzogJXMiICUgKHdoYXQsIHByb3ApKQorCisKK2NsYXNzIFByb3RvY29s
OgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmcmFtZXdvcmtfbmFtZSk6CisgICAgICAgIHNlbGYu
ZG9tYWlucyA9IFtdCisgICAgICAgIHNlbGYudHlwZXNfYnlfbmFtZSA9IHt9CisgICAgICAgIHNl
bGYuZnJhbWV3b3JrID0gRnJhbWV3b3JrLmZyb21TdHJpbmcoZnJhbWV3b3JrX25hbWUpCisKKyAg
ICBkZWYgcGFyc2Vfc3BlY2lmaWNhdGlvbihzZWxmLCBqc29uLCBpc1N1cHBsZW1lbnRhbCk6Cisg
ICAgICAgIGxvZy5kZWJ1ZygicGFyc2UgdG9wbGV2ZWwiKQorCisgICAgICAgIGlmIGlzaW5zdGFu
Y2UoanNvbiwgZGljdCkgYW5kICdkb21haW5zJyBpbiBqc29uOgorICAgICAgICAgICAganNvbiA9
IGpzb25bJ2RvbWFpbnMnXQorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShqc29uLCBsaXN0KToK
KyAgICAgICAgICAgIGpzb24gPSBbanNvbl0KKworICAgICAgICBmb3IgZG9tYWluIGluIGpzb246
CisgICAgICAgICAgICBzZWxmLnBhcnNlX2RvbWFpbihkb21haW4sIGlzU3VwcGxlbWVudGFsKQor
CisgICAgZGVmIHBhcnNlX2RvbWFpbihzZWxmLCBqc29uLCBpc1N1cHBsZW1lbnRhbCk6CisgICAg
ICAgIGNoZWNrX2Zvcl9yZXF1aXJlZF9wcm9wZXJ0aWVzKFsnZG9tYWluJ10sIGpzb24sICJkb21h
aW4iKQorICAgICAgICBsb2cuZGVidWcoInBhcnNlIGRvbWFpbiAiICsganNvblsnZG9tYWluJ10p
CisKKyAgICAgICAgdHlwZXMgPSBbXQorICAgICAgICBjb21tYW5kcyA9IFtdCisgICAgICAgIGV2
ZW50cyA9IFtdCisKKyAgICAgICAgaWYgJ3R5cGVzJyBpbiBqc29uOgorICAgICAgICAgICAgaWYg
bm90IGlzaW5zdGFuY2UoanNvblsndHlwZXMnXSwgbGlzdCk6CisgICAgICAgICAgICAgICAgcmFp
c2UgUGFyc2VFeGNlcHRpb24oIk1hbGZvcm1lZCBkb21haW4gc3BlY2lmaWNhdGlvbjogdHlwZXMg
aXMgbm90IGFuIGFycmF5IikKKyAgICAgICAgICAgIHR5cGVzLmV4dGVuZChbc2VsZi5wYXJzZV90
eXBlX2RlY2xhcmF0aW9uKGRlY2xhcmF0aW9uKSBmb3IgZGVjbGFyYXRpb24gaW4ganNvblsndHlw
ZXMnXV0pCisKKyAgICAgICAgaWYgJ2NvbW1hbmRzJyBpbiBqc29uOgorICAgICAgICAgICAgaWYg
bm90IGlzaW5zdGFuY2UoanNvblsnY29tbWFuZHMnXSwgbGlzdCk6CisgICAgICAgICAgICAgICAg
cmFpc2UgUGFyc2VFeGNlcHRpb24oIk1hbGZvcm1lZCBkb21haW4gc3BlY2lmaWNhdGlvbjogY29t
bWFuZHMgaXMgbm90IGFuIGFycmF5IikKKyAgICAgICAgICAgIGNvbW1hbmRzLmV4dGVuZChbc2Vs
Zi5wYXJzZV9jb21tYW5kKGNvbW1hbmQpIGZvciBjb21tYW5kIGluIGpzb25bJ2NvbW1hbmRzJ11d
KQorCisgICAgICAgIGlmICdldmVudHMnIGluIGpzb246CisgICAgICAgICAgICBpZiBub3QgaXNp
bnN0YW5jZShqc29uWydldmVudHMnXSwgbGlzdCk6CisgICAgICAgICAgICAgICAgcmFpc2UgUGFy
c2VFeGNlcHRpb24oIk1hbGZvcm1lZCBkb21haW4gc3BlY2lmaWNhdGlvbjogZXZlbnRzIGlzIG5v
dCBhbiBhcnJheSIpCisgICAgICAgICAgICBldmVudHMuZXh0ZW5kKFtzZWxmLnBhcnNlX2V2ZW50
KGV2ZW50KSBmb3IgZXZlbnQgaW4ganNvblsnZXZlbnRzJ11dKQorCisgICAgICAgIHNlbGYuZG9t
YWlucy5hcHBlbmQoRG9tYWluKGpzb25bJ2RvbWFpbiddLCBqc29uLmdldCgnZGVzY3JpcHRpb24n
LCAiIiksIGlzU3VwcGxlbWVudGFsLCB0eXBlcywgY29tbWFuZHMsIGV2ZW50cykpCisKKyAgICBk
ZWYgcGFyc2VfdHlwZV9kZWNsYXJhdGlvbihzZWxmLCBqc29uKToKKyAgICAgICAgY2hlY2tfZm9y
X3JlcXVpcmVkX3Byb3BlcnRpZXMoWydpZCcsICd0eXBlJ10sIGpzb24sICJ0eXBlIikKKyAgICAg
ICAgbG9nLmRlYnVnKCJwYXJzZSB0eXBlICVzIiAlIGpzb25bJ2lkJ10pCisKKyAgICAgICAgdHlw
ZV9tZW1iZXJzID0gW10KKworICAgICAgICBpZiAncHJvcGVydGllcycgaW4ganNvbjoKKyAgICAg
ICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGpzb25bJ3Byb3BlcnRpZXMnXSwgbGlzdCk6CisgICAg
ICAgICAgICAgICAgcmFpc2UgUGFyc2VFeGNlcHRpb24oIk1hbGZvcm1lZCB0eXBlIHNwZWNpZmlj
YXRpb246IHByb3BlcnRpZXMgaXMgbm90IGFuIGFycmF5IikKKyAgICAgICAgICAgIHR5cGVfbWVt
YmVycy5leHRlbmQoW3NlbGYucGFyc2VfdHlwZV9tZW1iZXIobWVtYmVyKSBmb3IgbWVtYmVyIGlu
IGpzb25bJ3Byb3BlcnRpZXMnXV0pCisKKyAgICAgICAgdHlwZV9yZWYgPSBUeXBlUmVmZXJlbmNl
KGpzb25bJ3R5cGUnXSwganNvbi5nZXQoJyRyZWYnKSwganNvbi5nZXQoJ2VudW0nKSwganNvbi5n
ZXQoJ2l0ZW1zJykpCisgICAgICAgIHJldHVybiBUeXBlRGVjbGFyYXRpb24oanNvblsnaWQnXSwg
dHlwZV9yZWYsIGpzb24uZ2V0KCJkZXNjcmlwdGlvbiIsICIiKSwgdHlwZV9tZW1iZXJzKQorCisg
ICAgZGVmIHBhcnNlX3R5cGVfbWVtYmVyKHNlbGYsIGpzb24pOgorICAgICAgICBjaGVja19mb3Jf
cmVxdWlyZWRfcHJvcGVydGllcyhbJ25hbWUnXSwganNvbiwgInR5cGUgbWVtYmVyIikKKyAgICAg
ICAgbG9nLmRlYnVnKCJwYXJzZSB0eXBlIG1lbWJlciAlcyIgJSBqc29uWyduYW1lJ10pCisKKyAg
ICAgICAgdHlwZV9yZWYgPSBUeXBlUmVmZXJlbmNlKGpzb24uZ2V0KCd0eXBlJyksIGpzb24uZ2V0
KCckcmVmJyksIGpzb24uZ2V0KCdlbnVtJyksIGpzb24uZ2V0KCdpdGVtcycpKQorICAgICAgICBy
ZXR1cm4gVHlwZU1lbWJlcihqc29uWyduYW1lJ10sIHR5cGVfcmVmLCBqc29uLmdldCgnb3B0aW9u
YWwnLCBGYWxzZSksIGpzb24uZ2V0KCdkZXNjcmlwdGlvbicsICIiKSkKKworICAgIGRlZiBwYXJz
ZV9jb21tYW5kKHNlbGYsIGpzb24pOgorICAgICAgICBjaGVja19mb3JfcmVxdWlyZWRfcHJvcGVy
dGllcyhbJ25hbWUnXSwganNvbiwgImNvbW1hbmQiKQorICAgICAgICBsb2cuZGVidWcoInBhcnNl
IGNvbW1hbmQgJXMiICUganNvblsnbmFtZSddKQorCisgICAgICAgIGNhbGxfcGFyYW1ldGVycyA9
IFtdCisgICAgICAgIHJldHVybl9wYXJhbWV0ZXJzID0gW10KKworICAgICAgICBpZiAncGFyYW1l
dGVycycgaW4ganNvbjoKKyAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGpzb25bJ3BhcmFt
ZXRlcnMnXSwgbGlzdCk6CisgICAgICAgICAgICAgICAgcmFpc2UgUGFyc2VFeGNlcHRpb24oIk1h
bGZvcm1lZCBjb21tYW5kIHNwZWNpZmljYXRpb246IHBhcmFtZXRlcnMgaXMgbm90IGFuIGFycmF5
IikKKyAgICAgICAgICAgIGNhbGxfcGFyYW1ldGVycy5leHRlbmQoW3NlbGYucGFyc2VfY2FsbF9v
cl9yZXR1cm5fcGFyYW1ldGVyKHBhcmFtZXRlcikgZm9yIHBhcmFtZXRlciBpbiBqc29uWydwYXJh
bWV0ZXJzJ11dKQorCisgICAgICAgIGlmICdyZXR1cm5zJyBpbiBqc29uOgorICAgICAgICAgICAg
aWYgbm90IGlzaW5zdGFuY2UoanNvblsncmV0dXJucyddLCBsaXN0KToKKyAgICAgICAgICAgICAg
ICByYWlzZSBQYXJzZUV4Y2VwdGlvbigiTWFsZm9ybWVkIGNvbW1hbmQgc3BlY2lmaWNhdGlvbjog
cmV0dXJucyBpcyBub3QgYW4gYXJyYXkiKQorICAgICAgICAgICAgcmV0dXJuX3BhcmFtZXRlcnMu
ZXh0ZW5kKFtzZWxmLnBhcnNlX2NhbGxfb3JfcmV0dXJuX3BhcmFtZXRlcihwYXJhbWV0ZXIpIGZv
ciBwYXJhbWV0ZXIgaW4ganNvblsncmV0dXJucyddXSkKKworICAgICAgICByZXR1cm4gQ29tbWFu
ZChqc29uWyduYW1lJ10sIGNhbGxfcGFyYW1ldGVycywgcmV0dXJuX3BhcmFtZXRlcnMsIGpzb24u
Z2V0KCdkZXNjcmlwdGlvbicsICIiKSwganNvbi5nZXQoJ2FzeW5jJywgRmFsc2UpKQorCisgICAg
ZGVmIHBhcnNlX2V2ZW50KHNlbGYsIGpzb24pOgorICAgICAgICBjaGVja19mb3JfcmVxdWlyZWRf
cHJvcGVydGllcyhbJ25hbWUnXSwganNvbiwgImV2ZW50IikKKyAgICAgICAgbG9nLmRlYnVnKCJw
YXJzZSBldmVudCAlcyIgJSBqc29uWyduYW1lJ10pCisKKyAgICAgICAgZXZlbnRfcGFyYW1ldGVy
cyA9IFtdCisKKyAgICAgICAgaWYgJ3BhcmFtZXRlcnMnIGluIGpzb246CisgICAgICAgICAgICBp
ZiBub3QgaXNpbnN0YW5jZShqc29uWydwYXJhbWV0ZXJzJ10sIGxpc3QpOgorICAgICAgICAgICAg
ICAgIHJhaXNlIFBhcnNlRXhjZXB0aW9uKCJNYWxmb3JtZWQgZXZlbnQgc3BlY2lmaWNhdGlvbjog
cGFyYW1ldGVycyBpcyBub3QgYW4gYXJyYXkiKQorICAgICAgICAgICAgZXZlbnRfcGFyYW1ldGVy
cy5leHRlbmQoW3NlbGYucGFyc2VfY2FsbF9vcl9yZXR1cm5fcGFyYW1ldGVyKHBhcmFtZXRlcikg
Zm9yIHBhcmFtZXRlciBpbiBqc29uWydwYXJhbWV0ZXJzJ11dKQorCisgICAgICAgIHJldHVybiBF
dmVudChqc29uWyduYW1lJ10sIGV2ZW50X3BhcmFtZXRlcnMsIGpzb24uZ2V0KCdkZXNjcmlwdGlv
bicsICIiKSkKKworICAgIGRlZiBwYXJzZV9jYWxsX29yX3JldHVybl9wYXJhbWV0ZXIoc2VsZiwg
anNvbik6CisgICAgICAgIGNoZWNrX2Zvcl9yZXF1aXJlZF9wcm9wZXJ0aWVzKFsnbmFtZSddLCBq
c29uLCAicGFyYW1ldGVyIikKKyAgICAgICAgbG9nLmRlYnVnKCJwYXJzZSBwYXJhbWV0ZXIgJXMi
ICUganNvblsnbmFtZSddKQorCisgICAgICAgIHR5cGVfcmVmID0gVHlwZVJlZmVyZW5jZShqc29u
LmdldCgndHlwZScpLCBqc29uLmdldCgnJHJlZicpLCBqc29uLmdldCgnZW51bScpLCBqc29uLmdl
dCgnaXRlbXMnKSkKKyAgICAgICAgcmV0dXJuIFBhcmFtZXRlcihqc29uWyduYW1lJ10sIHR5cGVf
cmVmLCBqc29uLmdldCgnb3B0aW9uYWwnLCBGYWxzZSksIGpzb24uZ2V0KCdkZXNjcmlwdGlvbics
ICIiKSkKKworICAgIGRlZiByZXNvbHZlX3R5cGVzKHNlbGYpOgorICAgICAgICBxdWFsaWZpZWRf
ZGVjbGFyZWRfdHlwZV9uYW1lcyA9IHNldChbJ2Jvb2xlYW4nLCAnc3RyaW5nJywgJ2ludGVnZXIn
LCAnbnVtYmVyJywgJ2VudW0nLCAnYXJyYXknLCAnb2JqZWN0JywgJ2FueSddKQorCisgICAgICAg
IHNlbGYudHlwZXNfYnlfbmFtZVsnc3RyaW5nJ10gPSBQcmltaXRpdmVUeXBlKCdzdHJpbmcnKQor
ICAgICAgICBmb3IgX3ByaW1pdGl2ZV90eXBlIGluIFsnYm9vbGVhbicsICdpbnRlZ2VyJywgJ251
bWJlciddOgorICAgICAgICAgICAgc2VsZi50eXBlc19ieV9uYW1lW19wcmltaXRpdmVfdHlwZV0g
PSBQcmltaXRpdmVUeXBlKF9wcmltaXRpdmVfdHlwZSkKKyAgICAgICAgZm9yIF9vYmplY3RfdHlw
ZSBpbiBbJ2FueScsICdvYmplY3QnXToKKyAgICAgICAgICAgIHNlbGYudHlwZXNfYnlfbmFtZVtf
b2JqZWN0X3R5cGVdID0gUHJpbWl0aXZlVHlwZShfb2JqZWN0X3R5cGUpCisKKyAgICAgICAgIyBH
YXRoZXIgcXVhbGlmaWVkIHR5cGUgbmFtZXMgZnJvbSB0eXBlIGRlY2xhcmF0aW9ucyBpbiBlYWNo
IGRvbWFpbi4KKyAgICAgICAgZm9yIGRvbWFpbiBpbiBzZWxmLmRvbWFpbnM6CisgICAgICAgICAg
ICBmb3IgZGVjbGFyYXRpb24gaW4gZG9tYWluLnR5cGVfZGVjbGFyYXRpb25zOgorICAgICAgICAg
ICAgICAgICMgQmFzaWMgc2FuaXR5IGNoZWNraW5nLgorICAgICAgICAgICAgICAgIGlmIGRlY2xh
cmF0aW9uLnR5cGVfcmVmLnJlZmVyZW5jZWRfdHlwZV9uYW1lIGlzIG5vdCBOb25lOgorICAgICAg
ICAgICAgICAgICAgICByYWlzZSBUeXBlY2hlY2tFeGNlcHRpb24oIlR5cGUgZGVjbGFyYXRpb25z
IG11c3QgbmFtZSBhIGJhc2UgdHlwZSwgbm90IGEgdHlwZSByZWZlcmVuY2UuIikKKworICAgICAg
ICAgICAgICAgICMgRmluZCBkdXBsaWNhdGUgcXVhbGlmaWVkIHR5cGUgbmFtZXMuCisgICAgICAg
ICAgICAgICAgcXVhbGlmaWVkX3R5cGVfbmFtZSA9ICIuIi5qb2luKFtkb21haW4uZG9tYWluX25h
bWUsIGRlY2xhcmF0aW9uLnR5cGVfbmFtZV0pCisgICAgICAgICAgICAgICAgaWYgcXVhbGlmaWVk
X3R5cGVfbmFtZSBpbiBxdWFsaWZpZWRfZGVjbGFyZWRfdHlwZV9uYW1lczoKKyAgICAgICAgICAg
ICAgICAgICAgcmFpc2UgVHlwZWNoZWNrRXhjZXB0aW9uKCJEdXBsaWNhdGUgdHlwZSBkZWNsYXJh
dGlvbjogJXMiICUgcXVhbGlmaWVkX3R5cGVfbmFtZSkKKworICAgICAgICAgICAgICAgIHF1YWxp
ZmllZF9kZWNsYXJlZF90eXBlX25hbWVzLmFkZChxdWFsaWZpZWRfdHlwZV9uYW1lKQorCisgICAg
ICAgICAgICAgICAgdHlwZV9pbnN0YW5jZSA9IE5vbmUKKworICAgICAgICAgICAgICAgIGtpbmQg
PSBkZWNsYXJhdGlvbi50eXBlX3JlZi50eXBlX2tpbmQKKyAgICAgICAgICAgICAgICBpZiBkZWNs
YXJhdGlvbi50eXBlX3JlZi5lbnVtX3ZhbHVlcyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAg
ICAgICAgcHJpbWl0aXZlX3R5cGVfcmVmID0gVHlwZVJlZmVyZW5jZShkZWNsYXJhdGlvbi50eXBl
X3JlZi50eXBlX2tpbmQsIE5vbmUsIE5vbmUsIE5vbmUpCisgICAgICAgICAgICAgICAgICAgIHR5
cGVfaW5zdGFuY2UgPSBFbnVtVHlwZShkZWNsYXJhdGlvbi50eXBlX25hbWUsIGRvbWFpbiwgZGVj
bGFyYXRpb24udHlwZV9yZWYuZW51bV92YWx1ZXMsIHByaW1pdGl2ZV90eXBlX3JlZikKKyAgICAg
ICAgICAgICAgICBlbGlmIGtpbmQgPT0gImFycmF5IjoKKyAgICAgICAgICAgICAgICAgICAgdHlw
ZV9pbnN0YW5jZSA9IEFycmF5VHlwZShkZWNsYXJhdGlvbi50eXBlX3JlZi5hcnJheV90eXBlX3Jl
ZiwgZG9tYWluKQorICAgICAgICAgICAgICAgIGVsaWYga2luZCA9PSAib2JqZWN0IjoKKyAgICAg
ICAgICAgICAgICAgICAgdHlwZV9pbnN0YW5jZSA9IE9iamVjdFR5cGUoZGVjbGFyYXRpb24udHlw
ZV9uYW1lLCBkb21haW4sIGRlY2xhcmF0aW9uLnR5cGVfbWVtYmVycykKKyAgICAgICAgICAgICAg
ICBlbHNlOgorICAgICAgICAgICAgICAgICAgICB0eXBlX2luc3RhbmNlID0gQWxpYXNlZFR5cGUo
ZGVjbGFyYXRpb24udHlwZV9uYW1lLCBkb21haW4sIGRlY2xhcmF0aW9uLnR5cGVfcmVmKQorCisg
ICAgICAgICAgICAgICAgbG9nLmRlYnVnKCI8IENyZWF0ZWQgZnJlc2ggdHlwZSAlciBmb3IgZGVj
bGFyYXRpb24gJXMiICUgKHR5cGVfaW5zdGFuY2UsIHF1YWxpZmllZF90eXBlX25hbWUpKQorICAg
ICAgICAgICAgICAgIHNlbGYudHlwZXNfYnlfbmFtZVtxdWFsaWZpZWRfdHlwZV9uYW1lXSA9IHR5
cGVfaW5zdGFuY2UKKworICAgICAgICAjIFJlc29sdmUgYWxsIHR5cGUgcmVmZXJlbmNlcyByZWN1
cnNpdmVseS4KKyAgICAgICAgZm9yIGRvbWFpbiBpbiBzZWxmLmRvbWFpbnM6CisgICAgICAgICAg
ICBkb21haW4ucmVzb2x2ZV90eXBlX3JlZmVyZW5jZXMoc2VsZikKKworICAgIGRlZiBsb29rdXBf
dHlwZV9mb3JfZGVjbGFyYXRpb24oc2VsZiwgZGVjbGFyYXRpb24sIGRvbWFpbik6CisgICAgICAg
ICMgVGhpcyB3aWxsIG9ubHkgbWF0Y2ggYSB0eXBlIGRlZmluZWQgaW4gdGhlIHNhbWUgZG9tYWlu
LCB3aGVyZSBwcmVmaXhlcyBhcmVuJ3QgcmVxdWlyZWQuCisgICAgICAgIHF1YWxpZmllZF9uYW1l
ID0gIi4iLmpvaW4oW2RvbWFpbi5kb21haW5fbmFtZSwgZGVjbGFyYXRpb24udHlwZV9uYW1lXSkK
KyAgICAgICAgaWYgcXVhbGlmaWVkX25hbWUgaW4gc2VsZi50eXBlc19ieV9uYW1lOgorICAgICAg
ICAgICAgZm91bmRfdHlwZSA9IHNlbGYudHlwZXNfYnlfbmFtZVtxdWFsaWZpZWRfbmFtZV0KKyAg
ICAgICAgICAgIGZvdW5kX3R5cGUucmVzb2x2ZV90eXBlX3JlZmVyZW5jZXMoc2VsZikKKyAgICAg
ICAgICAgIHJldHVybiBmb3VuZF90eXBlCisKKyAgICAgICAgcmFpc2UgVHlwZWNoZWNrRXhjZXB0
aW9uKCJMb29rdXAgZmFpbGVkIGZvciB0eXBlIGRlY2xhcmF0aW9uOiAlcyAocmVmZXJlbmNlZCBm
cm9tIGRvbWFpbjogJXMpIiAlIChkZWNsYXJhdGlvbi50eXBlX25hbWUsIGRvbWFpbi5kb21haW5f
bmFtZSkpCisKKyAgICBkZWYgbG9va3VwX3R5cGVfcmVmZXJlbmNlKHNlbGYsIHR5cGVfcmVmLCBk
b21haW4pOgorICAgICAgICAjIElmIHJlZmVyZW5jZSBpcyB0byBhbiBhbm9ueW1vdXMgYXJyYXkg
dHlwZSwgY3JlYXRlIGEgZnJlc2ggaW5zdGFuY2UuCisgICAgICAgIGlmIHR5cGVfcmVmLnR5cGVf
a2luZCA9PSAiYXJyYXkiOgorICAgICAgICAgICAgdHlwZV9pbnN0YW5jZSA9IEFycmF5VHlwZSh0
eXBlX3JlZi5hcnJheV90eXBlX3JlZiwgZG9tYWluKQorICAgICAgICAgICAgdHlwZV9pbnN0YW5j
ZS5yZXNvbHZlX3R5cGVfcmVmZXJlbmNlcyhzZWxmKQorICAgICAgICAgICAgbG9nLmRlYnVnKCI8
IENyZWF0ZWQgZnJlc2ggdHlwZSBpbnN0YW5jZSBmb3IgYW5vbnltb3VzIGFycmF5IHR5cGU6ICVz
IiAlIHR5cGVfaW5zdGFuY2UucXVhbGlmaWVkX25hbWUoKSkKKyAgICAgICAgICAgIHJldHVybiB0
eXBlX2luc3RhbmNlCisKKyAgICAgICAgIyBJZiByZWZlcmVuY2UgaXMgdG8gYW4gYW5vbnltb3Vz
IGVudW0gdHlwZSwgY3JlYXRlIGEgZnJlc2ggaW5zdGFuY2UuCisgICAgICAgIGlmIHR5cGVfcmVm
LmVudW1fdmFsdWVzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgIyBXZSBuZWVkIHRvIGNyZWF0
ZSBhIHR5cGUgcmVmZXJlbmNlIHdpdGhvdXQgZW51bSB2YWx1ZXMgYXMgdGhlIGVudW0ncyBuZXN0
ZWQgdHlwZS4KKyAgICAgICAgICAgIHByaW1pdGl2ZV90eXBlX3JlZiA9IFR5cGVSZWZlcmVuY2Uo
dHlwZV9yZWYudHlwZV9raW5kLCBOb25lLCBOb25lLCBOb25lKQorICAgICAgICAgICAgdHlwZV9p
bnN0YW5jZSA9IEVudW1UeXBlKCIoYW5vbnltb3VzKSIsIGRvbWFpbiwgdHlwZV9yZWYuZW51bV92
YWx1ZXMsIHByaW1pdGl2ZV90eXBlX3JlZiwgVHJ1ZSkKKyAgICAgICAgICAgIHR5cGVfaW5zdGFu
Y2UucmVzb2x2ZV90eXBlX3JlZmVyZW5jZXMoc2VsZikKKyAgICAgICAgICAgIGxvZy5kZWJ1Zygi
PCBDcmVhdGVkIGZyZXNoIHR5cGUgaW5zdGFuY2UgZm9yIGFub255bW91cyBlbnVtIHR5cGU6ICVz
IiAlIHR5cGVfaW5zdGFuY2UucXVhbGlmaWVkX25hbWUoKSkKKyAgICAgICAgICAgIHJldHVybiB0
eXBlX2luc3RhbmNlCisKKyAgICAgICAgIyBUaGlzIHdpbGwgbWF0Y2ggd2hlbiByZWZlcmVuY2lu
ZyBhIHR5cGUgZGVmaW5lZCBpbiB0aGUgc2FtZSBkb21haW4sIHdoZXJlIHByZWZpeGVzIGFyZW4n
dCByZXF1aXJlZC4KKyAgICAgICAgcXVhbGlmaWVkX25hbWUgPSAiLiIuam9pbihbZG9tYWluLmRv
bWFpbl9uYW1lLCB0eXBlX3JlZi5yZWZlcmVuY2VkX25hbWUoKV0pCisgICAgICAgIGlmIHF1YWxp
ZmllZF9uYW1lIGluIHNlbGYudHlwZXNfYnlfbmFtZToKKyAgICAgICAgICAgIGZvdW5kX3R5cGUg
PSBzZWxmLnR5cGVzX2J5X25hbWVbcXVhbGlmaWVkX25hbWVdCisgICAgICAgICAgICBmb3VuZF90
eXBlLnJlc29sdmVfdHlwZV9yZWZlcmVuY2VzKHNlbGYpCisgICAgICAgICAgICBsb2cuZGVidWco
IjwgTG9va3VwIHN1Y2NlZWRlZCBmb3IgdW5xdWFsaWZpZWQgdHlwZTogJXMiICUgZm91bmRfdHlw
ZS5xdWFsaWZpZWRfbmFtZSgpKQorICAgICAgICAgICAgcmV0dXJuIGZvdW5kX3R5cGUKKworICAg
ICAgICAjIFRoaXMgd2lsbCBtYXRjaCBwcmltaXRpdmUgdHlwZXMgYW5kIGZ1bGx5LXF1YWxpZmll
ZCB0eXBlcyBmcm9tIGEgZGlmZmVyZW50IGRvbWFpbi4KKyAgICAgICAgaWYgdHlwZV9yZWYucmVm
ZXJlbmNlZF9uYW1lKCkgaW4gc2VsZi50eXBlc19ieV9uYW1lOgorICAgICAgICAgICAgZm91bmRf
dHlwZSA9IHNlbGYudHlwZXNfYnlfbmFtZVt0eXBlX3JlZi5yZWZlcmVuY2VkX25hbWUoKV0KKyAg
ICAgICAgICAgIGZvdW5kX3R5cGUucmVzb2x2ZV90eXBlX3JlZmVyZW5jZXMoc2VsZikKKyAgICAg
ICAgICAgIGxvZy5kZWJ1ZygiPCBMb29rdXAgc3VjY2VlZGVkIGZvciBwcmltaXRpdmUgb3IgcXVh
bGlmaWVkIHR5cGU6ICVzIiAlIGZvdW5kX3R5cGUucXVhbGlmaWVkX25hbWUoKSkKKyAgICAgICAg
ICAgIHJldHVybiBmb3VuZF90eXBlCisKKyAgICAgICAgcmFpc2UgVHlwZWNoZWNrRXhjZXB0aW9u
KCJMb29rdXAgZmFpbGVkIGZvciB0eXBlIHJlZmVyZW5jZTogJXMgKHJlZmVyZW5jZWQgZnJvbSBk
b21haW46ICVzKSIgJSAodHlwZV9yZWYucmVmZXJlbmNlZF9uYW1lKCksIGRvbWFpbi5kb21haW5f
bmFtZSkpCisKKworY2xhc3MgRG9tYWluOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkb21haW5f
bmFtZSwgZGVzY3JpcHRpb24sIGlzU3VwcGxlbWVudGFsLCB0eXBlX2RlY2xhcmF0aW9ucywgY29t
bWFuZHMsIGV2ZW50cyk6CisgICAgICAgIHNlbGYuZG9tYWluX25hbWUgPSBkb21haW5fbmFtZQor
ICAgICAgICBzZWxmLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb24KKyAgICAgICAgc2VsZi5pc19z
dXBwbGVtZW50YWwgPSBpc1N1cHBsZW1lbnRhbAorICAgICAgICBzZWxmLnR5cGVfZGVjbGFyYXRp
b25zID0gdHlwZV9kZWNsYXJhdGlvbnMKKyAgICAgICAgc2VsZi5jb21tYW5kcyA9IGNvbW1hbmRz
CisgICAgICAgIHNlbGYuZXZlbnRzID0gZXZlbnRzCisKKyAgICBkZWYgcmVzb2x2ZV90eXBlX3Jl
ZmVyZW5jZXMoc2VsZiwgcHJvdG9jb2wpOgorICAgICAgICBsb2cuZGVidWcoIj4gUmVzb2x2aW5n
IHR5cGUgZGVjbGFyYXRpb25zIGZvciBkb21haW46ICVzIiAlIHNlbGYuZG9tYWluX25hbWUpCisg
ICAgICAgIGZvciBkZWNsYXJhdGlvbiBpbiBzZWxmLnR5cGVfZGVjbGFyYXRpb25zOgorICAgICAg
ICAgICAgZGVjbGFyYXRpb24ucmVzb2x2ZV90eXBlX3JlZmVyZW5jZXMocHJvdG9jb2wsIHNlbGYp
CisKKyAgICAgICAgbG9nLmRlYnVnKCI+IFJlc29sdmluZyB0eXBlcyBpbiBjb21tYW5kcyBmb3Ig
ZG9tYWluOiAlcyIgJSBzZWxmLmRvbWFpbl9uYW1lKQorICAgICAgICBmb3IgY29tbWFuZCBpbiBz
ZWxmLmNvbW1hbmRzOgorICAgICAgICAgICAgY29tbWFuZC5yZXNvbHZlX3R5cGVfcmVmZXJlbmNl
cyhwcm90b2NvbCwgc2VsZikKKworICAgICAgICBsb2cuZGVidWcoIj4gUmVzb2x2aW5nIHR5cGVz
IGluIGV2ZW50cyBmb3IgZG9tYWluOiAlcyIgJSBzZWxmLmRvbWFpbl9uYW1lKQorICAgICAgICBm
b3IgZXZlbnQgaW4gc2VsZi5ldmVudHM6CisgICAgICAgICAgICBldmVudC5yZXNvbHZlX3R5cGVf
cmVmZXJlbmNlcyhwcm90b2NvbCwgc2VsZikKKworCitjbGFzcyBEb21haW5zOgorICAgIEdMT0JB
TCA9IERvbWFpbigiIiwgIlRoZSBnbG9iYWwgZG9tYWluLCBpbiB3aGljaCBwcmltaXRpdmUgdHlw
ZXMgYXJlIGltcGxpY2l0bHkgZGVjbGFyZWQuIiwgVHJ1ZSwgW10sIFtdLCBbXSkKKworCitjbGFz
cyBUeXBlRGVjbGFyYXRpb246CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHR5cGVfbmFtZSwgdHlw
ZV9yZWYsIGRlc2NyaXB0aW9uLCB0eXBlX21lbWJlcnMpOgorICAgICAgICBzZWxmLnR5cGVfbmFt
ZSA9IF9UWVBFU19ORUVESU5HX1JFTkFNRV9XT1JLQVJPVU5EUy5nZXQodHlwZV9uYW1lLCB0eXBl
X25hbWUpCisgICAgICAgIHNlbGYudHlwZV9yZWYgPSB0eXBlX3JlZgorICAgICAgICBzZWxmLmRl
c2NyaXB0aW9uID0gZGVzY3JpcHRpb24KKyAgICAgICAgc2VsZi50eXBlX21lbWJlcnMgPSB0eXBl
X21lbWJlcnMKKworICAgICAgICBpZiBzZWxmLnR5cGVfbmFtZSAhPSB1Y2ZpcnN0KHNlbGYudHlw
ZV9uYW1lKToKKyAgICAgICAgICAgIHJhaXNlIFBhcnNlRXhjZXB0aW9uKCJUeXBlcyBtdXN0IGJl
Z2luIHdpdGggYW4gdXBwZXJjYXNlIGNoYXJhY3Rlci4iKQorCisgICAgZGVmIHJlc29sdmVfdHlw
ZV9yZWZlcmVuY2VzKHNlbGYsIHByb3RvY29sLCBkb21haW4pOgorICAgICAgICBsb2cuZGVidWco
Ij4+IFJlc29sdmluZyB0eXBlIHJlZmVyZW5jZXMgZm9yIHR5cGUgZGVjbGFyYXRpb246ICVzIiAl
IHNlbGYudHlwZV9uYW1lKQorICAgICAgICBzZWxmLnR5cGUgPSBwcm90b2NvbC5sb29rdXBfdHlw
ZV9mb3JfZGVjbGFyYXRpb24oc2VsZiwgZG9tYWluKQorICAgICAgICBmb3IgbWVtYmVyIGluIHNl
bGYudHlwZV9tZW1iZXJzOgorICAgICAgICAgICAgbWVtYmVyLnJlc29sdmVfdHlwZV9yZWZlcmVu
Y2VzKHByb3RvY29sLCBkb21haW4pCisKKworY2xhc3MgVHlwZU1lbWJlcjoKKyAgICBkZWYgX19p
bml0X18oc2VsZiwgbWVtYmVyX25hbWUsIHR5cGVfcmVmLCBpc19vcHRpb25hbCwgZGVzY3JpcHRp
b24pOgorICAgICAgICBzZWxmLm1lbWJlcl9uYW1lID0gbWVtYmVyX25hbWUKKyAgICAgICAgc2Vs
Zi50eXBlX3JlZiA9IHR5cGVfcmVmCisgICAgICAgIHNlbGYuaXNfb3B0aW9uYWwgPSBpc19vcHRp
b25hbAorICAgICAgICBzZWxmLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb24KKworICAgICAgICBp
ZiBzZWxmLmlzX29wdGlvbmFsIG5vdCBpbiBbVHJ1ZSwgRmFsc2VdOgorICAgICAgICAgICAgcmFp
c2UgUGFyc2VFeGNlcHRpb24oIlRoZSAnb3B0aW9uYWwnIGZsYWcgZm9yIGEgdHlwZSBtZW1iZXIg
bXVzdCBiZSBhIGJvb2xlYW4gbGl0ZXJhbC4iKQorCisgICAgZGVmIHJlc29sdmVfdHlwZV9yZWZl
cmVuY2VzKHNlbGYsIHByb3RvY29sLCBkb21haW4pOgorICAgICAgICBsb2cuZGVidWcoIj4+PiBS
ZXNvbHZpbmcgdHlwZSByZWZlcmVuY2VzIGZvciB0eXBlIG1lbWJlcjogJXMiICUgc2VsZi5tZW1i
ZXJfbmFtZSkKKyAgICAgICAgc2VsZi50eXBlID0gcHJvdG9jb2wubG9va3VwX3R5cGVfcmVmZXJl
bmNlKHNlbGYudHlwZV9yZWYsIGRvbWFpbikKKworCitjbGFzcyBQYXJhbWV0ZXI6CisgICAgZGVm
IF9faW5pdF9fKHNlbGYsIHBhcmFtZXRlcl9uYW1lLCB0eXBlX3JlZiwgaXNfb3B0aW9uYWwsIGRl
c2NyaXB0aW9uKToKKyAgICAgICAgc2VsZi5wYXJhbWV0ZXJfbmFtZSA9IHBhcmFtZXRlcl9uYW1l
CisgICAgICAgIHNlbGYudHlwZV9yZWYgPSB0eXBlX3JlZgorICAgICAgICBzZWxmLmlzX29wdGlv
bmFsID0gaXNfb3B0aW9uYWwKKyAgICAgICAgc2VsZi5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9u
CisKKyAgICAgICAgaWYgc2VsZi5pc19vcHRpb25hbCBub3QgaW4gW1RydWUsIEZhbHNlXToKKyAg
ICAgICAgICAgIHJhaXNlIFBhcnNlRXhjZXB0aW9uKCJUaGUgJ29wdGlvbmFsJyBmbGFnIGZvciBh
IHBhcmFtZXRlciBtdXN0IGJlIGEgYm9vbGVhbiBsaXRlcmFsLiIpCisKKyAgICBkZWYgcmVzb2x2
ZV90eXBlX3JlZmVyZW5jZXMoc2VsZiwgcHJvdG9jb2wsIGRvbWFpbik6CisgICAgICAgIGxvZy5k
ZWJ1ZygiPj4+IFJlc29sdmluZyB0eXBlIHJlZmVyZW5jZXMgZm9yIHBhcmFtZXRlcjogJXMiICUg
c2VsZi5wYXJhbWV0ZXJfbmFtZSkKKyAgICAgICAgc2VsZi50eXBlID0gcHJvdG9jb2wubG9va3Vw
X3R5cGVfcmVmZXJlbmNlKHNlbGYudHlwZV9yZWYsIGRvbWFpbikKKworCitjbGFzcyBDb21tYW5k
OgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb21tYW5kX25hbWUsIGNhbGxfcGFyYW1ldGVycywg
cmV0dXJuX3BhcmFtZXRlcnMsIGRlc2NyaXB0aW9uLCBpc19hc3luYyk6CisgICAgICAgIHNlbGYu
Y29tbWFuZF9uYW1lID0gY29tbWFuZF9uYW1lCisgICAgICAgIHNlbGYuY2FsbF9wYXJhbWV0ZXJz
ID0gY2FsbF9wYXJhbWV0ZXJzCisgICAgICAgIHNlbGYucmV0dXJuX3BhcmFtZXRlcnMgPSByZXR1
cm5fcGFyYW1ldGVycworICAgICAgICBzZWxmLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb24KKyAg
ICAgICAgc2VsZi5pc19hc3luYyA9IGlzX2FzeW5jCisKKyAgICBkZWYgcmVzb2x2ZV90eXBlX3Jl
ZmVyZW5jZXMoc2VsZiwgcHJvdG9jb2wsIGRvbWFpbik6CisgICAgICAgIGxvZy5kZWJ1ZygiPj4g
UmVzb2x2aW5nIHR5cGUgcmVmZXJlbmNlcyBmb3IgY2FsbCBwYXJhbWV0ZXJzIGluIGNvbW1hbmQ6
ICVzIiAlIHNlbGYuY29tbWFuZF9uYW1lKQorICAgICAgICBmb3IgcGFyYW1ldGVyIGluIHNlbGYu
Y2FsbF9wYXJhbWV0ZXJzOgorICAgICAgICAgICAgcGFyYW1ldGVyLnJlc29sdmVfdHlwZV9yZWZl
cmVuY2VzKHByb3RvY29sLCBkb21haW4pCisKKyAgICAgICAgbG9nLmRlYnVnKCI+PiBSZXNvbHZp
bmcgdHlwZSByZWZlcmVuY2VzIGZvciByZXR1cm4gcGFyYW1ldGVycyBpbiBjb21tYW5kOiAlcyIg
JSBzZWxmLmNvbW1hbmRfbmFtZSkKKyAgICAgICAgZm9yIHBhcmFtZXRlciBpbiBzZWxmLnJldHVy
bl9wYXJhbWV0ZXJzOgorICAgICAgICAgICAgcGFyYW1ldGVyLnJlc29sdmVfdHlwZV9yZWZlcmVu
Y2VzKHByb3RvY29sLCBkb21haW4pCisKKworY2xhc3MgRXZlbnQ6CisgICAgZGVmIF9faW5pdF9f
KHNlbGYsIGV2ZW50X25hbWUsIGV2ZW50X3BhcmFtZXRlcnMsIGRlc2NyaXB0aW9uKToKKyAgICAg
ICAgc2VsZi5ldmVudF9uYW1lID0gZXZlbnRfbmFtZQorICAgICAgICBzZWxmLmV2ZW50X3BhcmFt
ZXRlcnMgPSBldmVudF9wYXJhbWV0ZXJzCisgICAgICAgIHNlbGYuZGVzY3JpcHRpb24gPSBkZXNj
cmlwdGlvbgorCisgICAgZGVmIHJlc29sdmVfdHlwZV9yZWZlcmVuY2VzKHNlbGYsIHByb3RvY29s
LCBkb21haW4pOgorICAgICAgICBsb2cuZGVidWcoIj4+IFJlc29sdmluZyB0eXBlIHJlZmVyZW5j
ZXMgZm9yIHBhcmFtZXRlcnMgaW4gZXZlbnQ6ICVzIiAlIHNlbGYuZXZlbnRfbmFtZSkKKyAgICAg
ICAgZm9yIHBhcmFtZXRlciBpbiBzZWxmLmV2ZW50X3BhcmFtZXRlcnM6CisgICAgICAgICAgICBw
YXJhbWV0ZXIucmVzb2x2ZV90eXBlX3JlZmVyZW5jZXMocHJvdG9jb2wsIGRvbWFpbikKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5Cm5l
dyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjJmZDZkZmJlNzNkYTNmZTRmMmUxYTRjM2QxZWFiNDU1ZDg3OGNlNmIKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CkBAIC0wLDAgKzEsMTg2IEBACisj
IS91c3IvYmluL2VudiBweXRob24KKyMKKyMgQ29weXJpZ2h0IChjKSAyMDE0IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChjKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisj
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworIyBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisKKyMgVGhpcyBzY3JpcHQgZ2VuZXJhdGVzIEpTIGFuZCBDKysgYmlu
ZGluZ3MgZm9yIHRoZSBpbnNwZWN0b3IgcHJvdG9jb2wuCisjIEdlbmVyYXRvcnMgZm9yIGluZGl2
aWR1YWwgZmlsZXMgYXJlIGxvY2F0ZWQgaW4gdGhlIGNvZGVnZW4vIGRpcmVjdG9yeS4KKworaW1w
b3J0IG9zLnBhdGgKK2ltcG9ydCByZQoraW1wb3J0IHN5cworaW1wb3J0IHN0cmluZworZnJvbSBz
dHJpbmcgaW1wb3J0IFRlbXBsYXRlCitpbXBvcnQgb3B0cGFyc2UKK2ltcG9ydCBsb2dnaW5nCisK
K3RyeToKKyAgICBpbXBvcnQganNvbgorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIGltcG9ydCBz
aW1wbGVqc29uIGFzIGpzb24KKwordHJ5OgorICAgIGZyb20gY29kZWdlbiBpbXBvcnQgKgorCisj
IFdoZW4gY29weWluZyBnZW5lcmF0b3IgZmlsZXMgdG8gSmF2YVNjcmlwdENvcmUncyBwcml2YXRl
IGhlYWRlcnMgb24gTWFjLAorIyB0aGUgY29kZWdlbi8gbW9kdWxlIGRpcmVjdG9yeSBpcyBmbGF0
dGVuZWQuIFNvLCBpbXBvcnQgZGlyZWN0bHkuCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgaW1w
b3J0IG1vZGVscworICAgIGZyb20gbW9kZWxzIGltcG9ydCAqCisgICAgZnJvbSBnZW5lcmF0b3Ig
aW1wb3J0ICoKKworICAgIGZyb20gZ2VuZXJhdGVfYmFja2VuZF9jb21tYW5kcyBpbXBvcnQgKgor
ICAgIGZyb20gZ2VuZXJhdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlciBpbXBvcnQgKgorICAg
IGZyb20gZ2VuZXJhdGVfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uIGltcG9ydCAq
CisgICAgZnJvbSBnZW5lcmF0ZV9mcm9udGVuZF9kaXNwYXRjaGVyX2hlYWRlciBpbXBvcnQgKgor
ICAgIGZyb20gZ2VuZXJhdGVfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbiBpbXBv
cnQgKgorICAgIGZyb20gZ2VuZXJhdGVfdHlwZV9idWlsZGVyX2hlYWRlciBpbXBvcnQgKgorICAg
IGZyb20gZ2VuZXJhdGVfdHlwZV9idWlsZGVyX2ltcGxlbWVudGF0aW9uIGltcG9ydCAqCisKKwor
bG9nZ2luZy5iYXNpY0NvbmZpZyhmb3JtYXQ9JyUobGV2ZWxuYW1lKXM6ICUobWVzc2FnZSlzJywg
bGV2ZWw9bG9nZ2luZy5FUlJPUikKK2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQor
CisKKyMgQSB3cml0ZXIgdGhhdCBvbmx5IHVwZGF0ZXMgZmlsZSBpZiBpdCBhY3R1YWxseSBjaGFu
Z2VkLgorY2xhc3MgSW5jcmVtZW50YWxGaWxlV3JpdGVyOgorICAgIGRlZiBfX2luaXRfXyhzZWxm
LCBmaWxlcGF0aCwgZm9yY2Vfb3V0cHV0KToKKyAgICAgICAgc2VsZi5fZmlsZXBhdGggPSBmaWxl
cGF0aAorICAgICAgICBzZWxmLl9vdXRwdXQgPSAiIgorICAgICAgICBzZWxmLmZvcmNlX291dHB1
dCA9IGZvcmNlX291dHB1dAorCisgICAgZGVmIHdyaXRlKHNlbGYsIHRleHQpOgorICAgICAgICBz
ZWxmLl9vdXRwdXQgKz0gdGV4dAorCisgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICB0ZXh0
X2NoYW5nZWQgPSBUcnVlCisgICAgICAgIHNlbGYuX291dHB1dCA9IHNlbGYuX291dHB1dC5yc3Ry
aXAoKSArICJcbiIKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiBzZWxmLmZvcmNlX291
dHB1dDoKKyAgICAgICAgICAgICAgICByYWlzZQorCisgICAgICAgICAgICByZWFkX2ZpbGUgPSBv
cGVuKHNlbGYuX2ZpbGVwYXRoLCAiciIpCisgICAgICAgICAgICBvbGRfdGV4dCA9IHJlYWRfZmls
ZS5yZWFkKCkKKyAgICAgICAgICAgIHJlYWRfZmlsZS5jbG9zZSgpCisgICAgICAgICAgICB0ZXh0
X2NoYW5nZWQgPSBvbGRfdGV4dCAhPSBzZWxmLl9vdXRwdXQKKyAgICAgICAgZXhjZXB0OgorICAg
ICAgICAgICAgIyBJZ25vcmUsIGp1c3Qgb3ZlcndyaXRlIGJ5IGRlZmF1bHQKKyAgICAgICAgICAg
IHBhc3MKKworICAgICAgICBpZiB0ZXh0X2NoYW5nZWQgb3Igc2VsZi5mb3JjZV9vdXRwdXQ6Cisg
ICAgICAgICAgICBvdXRfZmlsZSA9IG9wZW4oc2VsZi5fZmlsZXBhdGgsICJ3IikKKyAgICAgICAg
ICAgIG91dF9maWxlLndyaXRlKHNlbGYuX291dHB1dCkKKyAgICAgICAgICAgIG91dF9maWxlLmNs
b3NlKCkKKworCitkZWYgZ2VuZXJhdGVfZnJvbV9zcGVjaWZpY2F0aW9uKHByaW1hcnlfc3BlY2lm
aWNhdGlvbl9maWxlcGF0aD1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dXBwbGVtZW50YWxfc3BlY2lmaWNhdGlvbl9maWxlcGF0aHM9W10sCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbmNhdGVuYXRlX291dHB1dD1GYWxzZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgb3V0cHV0X2RpcnBhdGg9Tm9uZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZm9yY2Vfb3V0cHV0PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmcmFtZXdvcmtfbmFtZT0iIik6CisKKyAgICBkZWYgbG9hZF9zcGVjaWZpY2F0
aW9uKHByb3RvY29sLCBmaWxlcGF0aCwgaXNTdXBwbGVtZW50YWw9RmFsc2UpOgorICAgICAgICB0
cnk6CisgICAgICAgICAgICB3aXRoIG9wZW4oZmlsZXBhdGgsICJyIikgYXMgaW5wdXRfZmlsZToK
KyAgICAgICAgICAgICAgICBwYXJzZWRfanNvbiA9IGpzb24ubG9hZChpbnB1dF9maWxlKQorICAg
ICAgICAgICAgICAgIHByb3RvY29sLnBhcnNlX3NwZWNpZmljYXRpb24ocGFyc2VkX2pzb24sIGlz
U3VwcGxlbWVudGFsKQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvciBhcyBlOgorICAgICAgICAg
ICAgcmFpc2UgRXhjZXB0aW9uKCJFcnJvciBwYXJzaW5nIHZhbGlkIEpTT04gaW4gZmlsZTogIiAr
IGZpbGVwYXRoKQorCisgICAgcHJvdG9jb2wgPSBtb2RlbHMuUHJvdG9jb2woZnJhbWV3b3JrX25h
bWUpCisgICAgZm9yIHNwZWNpZmljYXRpb24gaW4gc3VwcGxlbWVudGFsX3NwZWNpZmljYXRpb25f
ZmlsZXBhdGhzOgorICAgICAgICBsb2FkX3NwZWNpZmljYXRpb24ocHJvdG9jb2wsIHNwZWNpZmlj
YXRpb24sIGlzU3VwcGxlbWVudGFsPVRydWUpCisgICAgbG9hZF9zcGVjaWZpY2F0aW9uKHByb3Rv
Y29sLCBwcmltYXJ5X3NwZWNpZmljYXRpb25fZmlsZXBhdGgsIGlzU3VwcGxlbWVudGFsPUZhbHNl
KQorCisgICAgcHJvdG9jb2wucmVzb2x2ZV90eXBlcygpCisKKyAgICBnZW5lcmF0b3JzID0gW10K
KyAgICBnZW5lcmF0b3JzLmFwcGVuZChCYWNrZW5kQ29tbWFuZHNHZW5lcmF0b3IocHJvdG9jb2ws
IHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aCkpCisgICAgZ2VuZXJhdG9ycy5hcHBlbmQo
QmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IocHJvdG9jb2wsIHByaW1hcnlfc3BlY2lm
aWNhdGlvbl9maWxlcGF0aCkpCisgICAgZ2VuZXJhdG9ycy5hcHBlbmQoQmFja2VuZERpc3BhdGNo
ZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihwcm90b2NvbCwgcHJpbWFyeV9zcGVjaWZpY2F0aW9u
X2ZpbGVwYXRoKSkKKyAgICBnZW5lcmF0b3JzLmFwcGVuZChGcm9udGVuZERpc3BhdGNoZXJIZWFk
ZXJHZW5lcmF0b3IocHJvdG9jb2wsIHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aCkpCisg
ICAgZ2VuZXJhdG9ycy5hcHBlbmQoRnJvbnRlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5l
cmF0b3IocHJvdG9jb2wsIHByaW1hcnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aCkpCisgICAgZ2Vu
ZXJhdG9ycy5hcHBlbmQoVHlwZUJ1aWxkZXJIZWFkZXJHZW5lcmF0b3IocHJvdG9jb2wsIHByaW1h
cnlfc3BlY2lmaWNhdGlvbl9maWxlcGF0aCkpCisgICAgZ2VuZXJhdG9ycy5hcHBlbmQoVHlwZUJ1
aWxkZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihwcm90b2NvbCwgcHJpbWFyeV9zcGVjaWZpY2F0
aW9uX2ZpbGVwYXRoKSkKKworICAgIHNpbmdsZV9vdXRwdXRfZmlsZV9jb250ZW50cyA9IFtdCisK
KyAgICBmb3IgZ2VuZXJhdG9yIGluIGdlbmVyYXRvcnM6CisgICAgICAgIG91dHB1dCA9IGdlbmVy
YXRvci5nZW5lcmF0ZV9vdXRwdXQoKQorICAgICAgICBpZiBjb25jYXRlbmF0ZV9vdXRwdXQ6Cisg
ICAgICAgICAgICBzaW5nbGVfb3V0cHV0X2ZpbGVfY29udGVudHMuYXBwZW5kKCcjIyMgQmVnaW4g
RmlsZTogJXMnICUgZ2VuZXJhdG9yLm91dHB1dF9maWxlbmFtZSgpKQorICAgICAgICAgICAgc2lu
Z2xlX291dHB1dF9maWxlX2NvbnRlbnRzLmFwcGVuZChvdXRwdXQpCisgICAgICAgICAgICBzaW5n
bGVfb3V0cHV0X2ZpbGVfY29udGVudHMuYXBwZW5kKCcjIyMgRW5kIEZpbGU6ICVzJyAlIGdlbmVy
YXRvci5vdXRwdXRfZmlsZW5hbWUoKSkKKyAgICAgICAgICAgIHNpbmdsZV9vdXRwdXRfZmlsZV9j
b250ZW50cy5hcHBlbmQoJycpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBvdXRwdXRfZmls
ZSA9IEluY3JlbWVudGFsRmlsZVdyaXRlcihvcy5wYXRoLmpvaW4ob3V0cHV0X2RpcnBhdGgsIGdl
bmVyYXRvci5vdXRwdXRfZmlsZW5hbWUoKSksIGZvcmNlX291dHB1dCkKKyAgICAgICAgICAgIG91
dHB1dF9maWxlLndyaXRlKG91dHB1dCkKKyAgICAgICAgICAgIG91dHB1dF9maWxlLmNsb3NlKCkK
KworICAgIGlmIGNvbmNhdGVuYXRlX291dHB1dDoKKyAgICAgICAgZmlsZW5hbWUgPSBvcy5wYXRo
LmpvaW4ob3MucGF0aC5iYXNlbmFtZShwcmltYXJ5X3NwZWNpZmljYXRpb25fZmlsZXBhdGgpICsg
Jy1yZXN1bHQnKQorICAgICAgICBvdXRwdXRfZmlsZSA9IEluY3JlbWVudGFsRmlsZVdyaXRlcihv
cy5wYXRoLmpvaW4ob3V0cHV0X2RpcnBhdGgsIGZpbGVuYW1lKSwgZm9yY2Vfb3V0cHV0KQorICAg
ICAgICBvdXRwdXRfZmlsZS53cml0ZSgnXG4nLmpvaW4oc2luZ2xlX291dHB1dF9maWxlX2NvbnRl
bnRzKSkKKyAgICAgICAgb3V0cHV0X2ZpbGUuY2xvc2UoKQorCisKK2lmIF9fbmFtZV9fID09ICdf
X21haW5fXyc6CisgICAgYWxsb3dlZF9mcmFtZXdvcmtfbmFtZXMgPSBbJ1dURicsICdKYXZhU2Ny
aXB0Q29yZScsICdXZWJDb3JlJywgJ1dlYktpdCcsICdXZWJLaXQyJywgJ1Rlc3QnXQorICAgIGNs
aV9wYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIodXNhZ2U9InVzYWdlOiAlcHJvZyBbb3B0
aW9uc10gUHJpbWFyeVByb3RvY29sLmpzb24gW1N1cHBsZW1lbnRhbFByb3RvY29sLmpzb24gLi4u
XSIpCisgICAgY2xpX3BhcnNlci5hZGRfb3B0aW9uKCItbyIsICItLW91dHB1dERpciIsIGhlbHA9
IkRpcmVjdG9yeSB3aGVyZSBnZW5lcmF0ZWQgZmlsZXMgc2hvdWxkIGJlIHdyaXR0ZW4uIikKKyAg
ICBjbGlfcGFyc2VyLmFkZF9vcHRpb24oIi0tZnJhbWV3b3JrIiwgdHlwZT0iY2hvaWNlIiwgY2hv
aWNlcz1hbGxvd2VkX2ZyYW1ld29ya19uYW1lcywgaGVscD0iVGhlIGZyYW1ld29yayB0aGF0IHRo
ZSBwcmltYXJ5IHNwZWNpZmljYXRpb24gYmVsb25ncyB0by4iKQorICAgIGNsaV9wYXJzZXIuYWRk
X29wdGlvbigiLS1mb3JjZSIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGhlbHA9IkZvcmNlIG91dHB1
dCBvZiBnZW5lcmF0ZWQgc2NyaXB0cywgZXZlbiBpZiBub3RoaW5nIGNoYW5nZWQuIikKKyAgICBj
bGlfcGFyc2VyLmFkZF9vcHRpb24oIi12IiwgIi0tZGVidWciLCBhY3Rpb249InN0b3JlX3RydWUi
LCBoZWxwPSJMb2cgZXh0cmEgb3V0cHV0IGZvciBkZWJ1Z2dpbmcgdGhlIGdlbmVyYXRvciBpdHNl
bGYuIikKKyAgICBjbGlfcGFyc2VyLmFkZF9vcHRpb24oIi10IiwgIi0tdGVzdCIsIGFjdGlvbj0i
c3RvcmVfdHJ1ZSIsIGhlbHA9IkVuYWJsZSB0ZXN0IG1vZGUuIFVzZSB1bmlxdWUgb3V0cHV0IGZp
bGVuYW1lcyBjcmVhdGVkIGJ5IHByZXBlbmRpbmcgdGhlIGlucHV0IGZpbGVuYW1lLiIpCisKKyAg
ICBvcHRpb25zID0gTm9uZQorCisgICAgYXJnX29wdGlvbnMsIGFyZ192YWx1ZXMgPSBjbGlfcGFy
c2VyLnBhcnNlX2FyZ3MoKQorICAgIGlmIChsZW4oYXJnX3ZhbHVlcykgPCAxKToKKyAgICAgICAg
cmFpc2UgUGFyc2VFeGNlcHRpb24oIkF0IGxlYXN0IG9uZSBwbGFpbiBhcmd1bWVudCBleHBlY3Rl
ZCIpCisKKyAgICBpZiBub3QgYXJnX29wdGlvbnMub3V0cHV0RGlyOgorICAgICAgICByYWlzZSBQ
YXJzZUV4Y2VwdGlvbigiTWlzc2luZyBvdXRwdXQgZGlyZWN0b3J5IikKKworICAgIGlmIGFyZ19v
cHRpb25zLmRlYnVnOgorICAgICAgICBsb2cuc2V0TGV2ZWwobG9nZ2luZy5ERUJVRykKKworICAg
IG9wdGlvbnMgPSB7CisgICAgICAgICdwcmltYXJ5X3NwZWNpZmljYXRpb25fZmlsZXBhdGgnOiBh
cmdfdmFsdWVzWzBdLAorICAgICAgICAnc3VwcGxlbWVudGFsX3NwZWNpZmljYXRpb25fZmlsZXBh
dGhzJzogYXJnX3ZhbHVlc1sxOl0sCisgICAgICAgICdvdXRwdXRfZGlycGF0aCc6IGFyZ19vcHRp
b25zLm91dHB1dERpciwKKyAgICAgICAgJ2NvbmNhdGVuYXRlX291dHB1dCc6IGFyZ19vcHRpb25z
LnRlc3QsCisgICAgICAgICdmcmFtZXdvcmtfbmFtZSc6IGFyZ19vcHRpb25zLmZyYW1ld29yaywK
KyAgICAgICAgJ2ZvcmNlX291dHB1dCc6IGFyZ19vcHRpb25zLmZvcmNlCisgICAgfQorCisgICAg
dHJ5OgorICAgICAgICBnZW5lcmF0ZV9mcm9tX3NwZWNpZmljYXRpb24oKipvcHRpb25zKQorICAg
IGV4Y2VwdCAoUGFyc2VFeGNlcHRpb24sIFR5cGVjaGVja0V4Y2VwdGlvbikgYXMgZToKKyAgICAg
ICAgaWYgYXJnX29wdGlvbnMudGVzdDoKKyAgICAgICAgICAgIGxvZy5lcnJvcihlLm1lc3NhZ2Up
CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSAgIyBGb3JjZSB0aGUgYnVpbGQgdG8g
ZmFpbC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9jb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2NvbW1hbmRzLXdpdGgtYXN5bmMtYXR0
cmlidXRlLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTYxYjVjZWFiMTRjN2FjMzdlZTUxYTliZDdjOTIwM2Zj
NWJhYjEwYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9jb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uCkBAIC0w
LDAgKzEsMTAwIEBACit7CisgICAgImRvbWFpbiI6ICJEYXRhYmFzZSIsCisgICAgInR5cGVzIjog
WworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiRGF0YWJhc2VJZCIsCisgICAgICAgICAg
ICAidHlwZSI6ICJpbnRlZ2VyIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUg
aWRlbnRpZmllciBvZiBEYXRhYmFzZSBvYmplY3QuIgorICAgICAgICB9LAorICAgICAgICB7Cisg
ICAgICAgICAgICAiaWQiOiAiUHJpbWFyeUNvbG9ycyIsCisgICAgICAgICAgICAidHlwZSI6ICJz
dHJpbmciLAorICAgICAgICAgICAgImVudW0iOiBbInJlZCIsICJncmVlbiIsICJibHVlIl0KKyAg
ICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIkVycm9yIiwKKyAgICAgICAg
ICAgICJ0eXBlIjogIm9iamVjdCIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiRGF0YWJh
c2UgZXJyb3IuIiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWworICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAibWVzc2FnZSIsICJ0eXBlIjogInN0cmluZyIsICJkZXNjcmlwdGlvbiI6ICJF
cnJvciBtZXNzYWdlLiIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvZGUiLCAidHlw
ZSI6ICJpbnRlZ2VyIiwgImRlc2NyaXB0aW9uIjogIkVycm9yIGNvZGUuIiB9CisgICAgICAgICAg
ICBdCisgICAgICAgIH0KKyAgICBdLAorICAgICJjb21tYW5kcyI6IFsKKyAgICAgICAgeworICAg
ICAgICAgICAgIm5hbWUiOiAiZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyIsCisg
ICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImRh
dGFiYXNlSWQiLCAiJHJlZiI6ICJEYXRhYmFzZUlkIiB9LAorICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAicXVlcnkiLCAidHlwZSI6ICJzdHJpbmciIH0KKyAgICAgICAgICAgIF0sCisgICAgICAg
ICAgICAicmV0dXJucyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbHVtbk5hbWVz
IiwgInR5cGUiOiAiYXJyYXkiLCAib3B0aW9uYWwiOiB0cnVlLCAiaXRlbXMiOiB7ICJ0eXBlIjog
InN0cmluZyIgfSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibm90ZXMiLCAidHlwZSI6
ICJzdHJpbmciLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJ0aW1lc3RhbXAiLCAidHlwZSI6ICJudW1iZXIiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJ2YWx1ZXMiLCAidHlwZSI6ICJvYmplY3QiLCAib3B0aW9u
YWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwYXlsb2FkIiwgInR5cGUi
OiAiYW55IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
ZGF0YWJhc2VJZCIsICIkcmVmIjogIkRhdGFiYXNlSWQiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisg
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzcWxFcnJvciIsICIkcmVmIjogIkVycm9yIiwgIm9w
dGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic2NyZWVuQ29sb3Ii
LCAiJHJlZiI6ICJQcmltYXJ5Q29sb3JzIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAicHJpbnRDb2xvciIsICJ0eXBlIjogInN0cmluZyIsICJlbnVtIjog
WyJjeWFuIiwgIm1hZ2VudGEiLCAieWVsbG93IiwgImJsYWNrIl0sICJvcHRpb25hbCI6IHRydWUg
fQorICAgICAgICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFt
ZSI6ICJleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyIsCisgICAgICAgICAgICAi
YXN5bmMiOiB0cnVlLAorICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCisgICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJkYXRhYmFzZUlkIiwgIiRyZWYiOiAiRGF0YWJhc2VJZCIgfSwKKyAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogInF1ZXJ5IiwgInR5cGUiOiAic3RyaW5nIiB9CisgICAgICAg
ICAgICBdLAorICAgICAgICAgICAgInJldHVybnMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogImFycmF5IiwgIm9wdGlvbmFsIjogdHJ1ZSwgIml0
ZW1zIjogeyAidHlwZSI6ICJzdHJpbmciIH0gfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjog
Im5vdGVzIiwgInR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAidGltZXN0YW1wIiwgInR5cGUiOiAibnVtYmVyIiwgIm9wdGlvbmFs
IjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidmFsdWVzIiwgInR5cGUiOiAi
b2JqZWN0IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
cGF5bG9hZCIsICJ0eXBlIjogImFueSIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogImRhdGFiYXNlSWQiLCAiJHJlZiI6ICJEYXRhYmFzZUlkIiwgIm9wdGlv
bmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic3FsRXJyb3IiLCAiJHJl
ZiI6ICJFcnJvciIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1l
IjogInNjcmVlbkNvbG9yIiwgIiRyZWYiOiAiUHJpbWFyeUNvbG9ycyIsICJvcHRpb25hbCI6IHRy
dWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInByaW50Q29sb3IiLCAidHlwZSI6ICJz
dHJpbmciLCAiZW51bSI6IFsiY3lhbiIsICJtYWdlbnRhIiwgInllbGxvdyIsICJibGFjayJdLCAi
b3B0aW9uYWwiOiB0cnVlIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgewor
ICAgICAgICAgICAgIm5hbWUiOiAiZXhlY3V0ZVNRTFN5bmMiLAorICAgICAgICAgICAgInBhcmFt
ZXRlcnMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJkYXRhYmFzZUlkIiwgIiRyZWYi
OiAiRGF0YWJhc2VJZCIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInF1ZXJ5IiwgInR5
cGUiOiAic3RyaW5nIiB9CisgICAgICAgICAgICBdLAorICAgICAgICAgICAgInJldHVybnMiOiBb
CisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogImFycmF5
IiwgIml0ZW1zIjogeyAidHlwZSI6ICJzdHJpbmciIH0gfSwKKyAgICAgICAgICAgICAgICB7ICJu
YW1lIjogIm5vdGVzIiwgInR5cGUiOiAic3RyaW5nIiB9LAorICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAidGltZXN0YW1wIiwgInR5cGUiOiAibnVtYmVyIiB9LAorICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAidmFsdWVzIiwgInR5cGUiOiAib2JqZWN0IiB9LAorICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAicGF5bG9hZCIsICJ0eXBlIjogImFueSIgfSwKKyAgICAgICAgICAgICAgICB7ICJu
YW1lIjogImRhdGFiYXNlSWQiLCAiJHJlZiI6ICJEYXRhYmFzZUlkIiB9LAorICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAic3FsRXJyb3IiLCAiJHJlZiI6ICJFcnJvciIgfSwKKyAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogInNjcmVlbkNvbG9yIiwgIiRyZWYiOiAiUHJpbWFyeUNvbG9ycyIgfSwK
KyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInByaW50Q29sb3IiLCAidHlwZSI6ICJzdHJpbmci
LCAiZW51bSI6IFsiY3lhbiIsICJtYWdlbnRhIiwgInllbGxvdyIsICJibGFjayJdIH0KKyAgICAg
ICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAiZXhl
Y3V0ZVNRTEFzeW5jIiwKKyAgICAgICAgICAgICJhc3luYyI6IHRydWUsCisgICAgICAgICAgICAi
cGFyYW1ldGVycyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImRhdGFiYXNlSWQiLCAi
JHJlZiI6ICJEYXRhYmFzZUlkIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicXVlcnki
LCAidHlwZSI6ICJzdHJpbmciIH0KKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICAicmV0dXJu
cyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAi
YXJyYXkiLCAiaXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSB9LAorICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAibm90ZXMiLCAidHlwZSI6ICJzdHJpbmciIH0sCisgICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJ0aW1lc3RhbXAiLCAidHlwZSI6ICJudW1iZXIiIH0sCisgICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJ2YWx1ZXMiLCAidHlwZSI6ICJvYmplY3QiIH0sCisgICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJwYXlsb2FkIiwgInR5cGUiOiAiYW55IiB9LAorICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAiZGF0YWJhc2VJZCIsICIkcmVmIjogIkRhdGFiYXNlSWQiIH0sCisgICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJzcWxFcnJvciIsICIkcmVmIjogIkVycm9yIiB9LAorICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAic2NyZWVuQ29sb3IiLCAiJHJlZiI6ICJQcmltYXJ5Q29sb3Jz
IiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicHJpbnRDb2xvciIsICJ0eXBlIjogInN0
cmluZyIsICJlbnVtIjogWyJjeWFuIiwgIm1hZ2VudGEiLCAieWVsbG93IiwgImJsYWNrIl0gfQor
ICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2NvbW1hbmRzLXdpdGgtb3B0aW9u
YWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2NvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4t
cGFyYW1ldGVycy5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjM4NTYxZTczNDU3NTU3Yjk1MGNhYmNjZGMyZTk5
YTlhM2MxOTM0MGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1w
YXJhbWV0ZXJzLmpzb24KQEAgLTAsMCArMSw3NiBAQAoreworICAgICJkb21haW4iOiAiRGF0YWJh
c2UiLAorICAgICJ0eXBlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIkRhdGFi
YXNlSWQiLAorICAgICAgICAgICAgInR5cGUiOiAiaW50ZWdlciIsCisgICAgICAgICAgICAiZGVz
Y3JpcHRpb24iOiAiVW5pcXVlIGlkZW50aWZpZXIgb2YgRGF0YWJhc2Ugb2JqZWN0LiIKKyAgICAg
ICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIlByaW1hcnlDb2xvcnMiLAorICAg
ICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKKyAgICAgICAgICAgICJlbnVtIjogWyJyZWQiLCAi
Z3JlZW4iLCAiYmx1ZSJdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6
ICJFcnJvciIsCisgICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAorICAgICAgICAgICAgImRl
c2NyaXB0aW9uIjogIkRhdGFiYXNlIGVycm9yLiIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6
IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm1lc3NhZ2UiLCAidHlwZSI6ICJzdHJpbmci
LCAiZGVzY3JpcHRpb24iOiAiRXJyb3IgbWVzc2FnZS4iIH0sCisgICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJjb2RlIiwgInR5cGUiOiAiaW50ZWdlciIsICJkZXNjcmlwdGlvbiI6ICJFcnJvciBj
b2RlLiIgfQorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXSwKKyAgICAiY29tbWFuZHMi
OiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImV4ZWN1dGVBbGxPcHRpb25hbFBh
cmFtZXRlcnMiLAorICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCisgICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogImFycmF5IiwgIm9wdGlvbmFsIjogdHJ1
ZSwgIml0ZW1zIjogeyAidHlwZSI6ICJzdHJpbmciIH0gfSwKKyAgICAgICAgICAgICAgICB7ICJu
YW1lIjogIm5vdGVzIiwgInR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAidGltZXN0YW1wIiwgInR5cGUiOiAibnVtYmVyIiwgIm9w
dGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidmFsdWVzIiwgInR5
cGUiOiAib2JqZWN0IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAicGF5bG9hZCIsICJ0eXBlIjogImFueSIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogImRhdGFiYXNlSWQiLCAiJHJlZiI6ICJEYXRhYmFzZUlkIiwg
Im9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic3FsRXJyb3Ii
LCAiJHJlZiI6ICJFcnJvciIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7
ICJuYW1lIjogInNjcmVlbkNvbG9yIiwgIiRyZWYiOiAiUHJpbWFyeUNvbG9ycyIsICJvcHRpb25h
bCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInByaW50Q29sb3IiLCAidHlw
ZSI6ICJzdHJpbmciLCAiZW51bSI6IFsiY3lhbiIsICJtYWdlbnRhIiwgInllbGxvdyIsICJibGFj
ayJdLCAib3B0aW9uYWwiOiB0cnVlIH0KKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICAicmV0
dXJucyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbHVtbk5hbWVzIiwgInR5cGUi
OiAiYXJyYXkiLCAib3B0aW9uYWwiOiB0cnVlLCAiaXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIg
fSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibm90ZXMiLCAidHlwZSI6ICJzdHJpbmci
LCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0aW1lc3Rh
bXAiLCAidHlwZSI6ICJudW1iZXIiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJ2YWx1ZXMiLCAidHlwZSI6ICJvYmplY3QiLCAib3B0aW9uYWwiOiB0cnVl
IH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwYXlsb2FkIiwgInR5cGUiOiAiYW55Iiwg
Im9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZGF0YWJhc2VJ
ZCIsICIkcmVmIjogIkRhdGFiYXNlSWQiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJzcWxFcnJvciIsICIkcmVmIjogIkVycm9yIiwgIm9wdGlvbmFsIjog
dHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic2NyZWVuQ29sb3IiLCAiJHJlZiI6
ICJQcmltYXJ5Q29sb3JzIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAicHJpbnRDb2xvciIsICJ0eXBlIjogInN0cmluZyIsICJlbnVtIjogWyJjeWFuIiwg
Im1hZ2VudGEiLCAieWVsbG93IiwgImJsYWNrIl0sICJvcHRpb25hbCI6IHRydWUgfQorICAgICAg
ICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJleGVj
dXRlTm9PcHRpb25hbFBhcmFtZXRlcnMiLAorICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCisg
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogImFycmF5Iiwg
Iml0ZW1zIjogeyAidHlwZSI6ICJzdHJpbmciIH0gfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1l
IjogIm5vdGVzIiwgInR5cGUiOiAic3RyaW5nIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAidGltZXN0YW1wIiwgInR5cGUiOiAibnVtYmVyIiB9LAorICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAidmFsdWVzIiwgInR5cGUiOiAib2JqZWN0IiB9LAorICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAicGF5bG9hZCIsICJ0eXBlIjogImFueSIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1l
IjogImRhdGFiYXNlSWQiLCAiJHJlZiI6ICJEYXRhYmFzZUlkIiB9LAorICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAic3FsRXJyb3IiLCAiJHJlZiI6ICJFcnJvciIgfSwKKyAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogInNjcmVlbkNvbG9yIiwgIiRyZWYiOiAiUHJpbWFyeUNvbG9ycyIgfSwKKyAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogInByaW50Q29sb3IiLCAidHlwZSI6ICJzdHJpbmciLCAi
ZW51bSI6IFsiY3lhbiIsICJtYWdlbnRhIiwgInllbGxvdyIsICJibGFjayJdIH0KKyAgICAgICAg
ICAgIF0sCisgICAgICAgICAgICAicmV0dXJucyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1l
IjogImNvbHVtbk5hbWVzIiwgInR5cGUiOiAiYXJyYXkiLCAiaXRlbXMiOiB7ICJ0eXBlIjogInN0
cmluZyIgfSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibm90ZXMiLCAidHlwZSI6ICJz
dHJpbmciIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0aW1lc3RhbXAiLCAidHlwZSI6
ICJudW1iZXIiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ2YWx1ZXMiLCAidHlwZSI6
ICJvYmplY3QiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwYXlsb2FkIiwgInR5cGUi
OiAiYW55IiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZGF0YWJhc2VJZCIsICIkcmVm
IjogIkRhdGFiYXNlSWQiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzcWxFcnJvciIs
ICIkcmVmIjogIkVycm9yIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic2NyZWVuQ29s
b3IiLCAiJHJlZiI6ICJQcmltYXJ5Q29sb3JzIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAicHJpbnRDb2xvciIsICJ0eXBlIjogInN0cmluZyIsICJlbnVtIjogWyJjeWFuIiwgIm1hZ2Vu
dGEiLCAieWVsbG93IiwgImJsYWNrIl0gfQorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAg
XQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2RvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbiBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9kb21haW5zLXdpdGgtdmFyeWlu
Zy1jb21tYW5kLXNpemVzLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTRhOGVjYjE3NmQzYjhlYzliZjk2Njc2
ZTYzY2VhMDUxNDY2Yjg2OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9kb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNp
emVzLmpzb24KQEAgLTAsMCArMSw1NCBAQAorWworeworICAgICJkb21haW4iOiAiTmV0d29yazEi
LAorICAgICJjb21tYW5kcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAibG9h
ZFJlc291cmNlMSIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiTG9hZHMgYSByZXNvdXJj
ZSBpbiB0aGUgY29udGV4dCBvZiBhIGZyYW1lIG9uIHRoZSBpbnNwZWN0ZWQgcGFnZSB3aXRob3V0
IGNyb3NzIG9yaWdpbiBjaGVja3MuIgorICAgICAgICB9CisgICAgXQorfSwKK3sKKyAgICAiZG9t
YWluIjogIk5ldHdvcmsyIiwKKyAgICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAg
ICJpZCI6ICJMb2FkZXJJZCIsCisgICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAorICAgICAg
ICAgICAgImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBsb2FkZXIgaWRlbnRpZmllci4iCisgICAgICAg
IH0KKyAgICBdCit9LAoreworICAgICJkb21haW4iOiAiTmV0d29yazMiLAorICAgICJjb21tYW5k
cyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgIm5hbWUiOiAibG9hZFJlc291cmNlMSIsCisg
ICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiTG9hZHMgYSByZXNvdXJjZSBpbiB0aGUgY29udGV4
dCBvZiBhIGZyYW1lIG9uIHRoZSBpbnNwZWN0ZWQgcGFnZSB3aXRob3V0IGNyb3NzIG9yaWdpbiBj
aGVja3MuIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJsb2Fk
UmVzb3VyY2UyIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJMb2FkcyBhIHJlc291cmNl
IGluIHRoZSBjb250ZXh0IG9mIGEgZnJhbWUgb24gdGhlIGluc3BlY3RlZCBwYWdlIHdpdGhvdXQg
Y3Jvc3Mgb3JpZ2luIGNoZWNrcy4iCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAg
ICJuYW1lIjogImxvYWRSZXNvdXJjZTMiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkxv
YWRzIGEgcmVzb3VyY2UgaW4gdGhlIGNvbnRleHQgb2YgYSBmcmFtZSBvbiB0aGUgaW5zcGVjdGVk
IHBhZ2Ugd2l0aG91dCBjcm9zcyBvcmlnaW4gY2hlY2tzLiIKKyAgICAgICAgfSwKKyAgICAgICAg
eworICAgICAgICAgICAgIm5hbWUiOiAibG9hZFJlc291cmNlNCIsCisgICAgICAgICAgICAiZGVz
Y3JpcHRpb24iOiAiTG9hZHMgYSByZXNvdXJjZSBpbiB0aGUgY29udGV4dCBvZiBhIGZyYW1lIG9u
IHRoZSBpbnNwZWN0ZWQgcGFnZSB3aXRob3V0IGNyb3NzIG9yaWdpbiBjaGVja3MuIgorICAgICAg
ICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJsb2FkUmVzb3VyY2U1IiwKKyAg
ICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJMb2FkcyBhIHJlc291cmNlIGluIHRoZSBjb250ZXh0
IG9mIGEgZnJhbWUgb24gdGhlIGluc3BlY3RlZCBwYWdlIHdpdGhvdXQgY3Jvc3Mgb3JpZ2luIGNo
ZWNrcy4iCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImxvYWRS
ZXNvdXJjZTYiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkxvYWRzIGEgcmVzb3VyY2Ug
aW4gdGhlIGNvbnRleHQgb2YgYSBmcmFtZSBvbiB0aGUgaW5zcGVjdGVkIHBhZ2Ugd2l0aG91dCBj
cm9zcyBvcmlnaW4gY2hlY2tzLiIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAg
Im5hbWUiOiAibG9hZFJlc291cmNlNyIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiTG9h
ZHMgYSByZXNvdXJjZSBpbiB0aGUgY29udGV4dCBvZiBhIGZyYW1lIG9uIHRoZSBpbnNwZWN0ZWQg
cGFnZSB3aXRob3V0IGNyb3NzIG9yaWdpbiBjaGVja3MuIgorICAgICAgICB9CisgICAgXQorfQor
XQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2V2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbiBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9ldmVudHMtd2l0aC1vcHRpb25hbC1wYXJh
bWV0ZXJzLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWVmYzdjYjMxOWIwYjM2ZmE5NWM0NzE0MDMwNTM3Nzg2
MjRhZmMxMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9ldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24KQEAg
LTAsMCArMSw1MiBAQAoreworICAgICJkb21haW4iOiAiRGF0YWJhc2UiLAorICAgICJ0eXBlcyI6
IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIkRhdGFiYXNlSWQiLAorICAgICAgICAg
ICAgInR5cGUiOiAic3RyaW5nIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUg
aWRlbnRpZmllciBvZiBEYXRhYmFzZSBvYmplY3QuIgorICAgICAgICB9LAorICAgICAgICB7Cisg
ICAgICAgICAgICAiaWQiOiAiUHJpbWFyeUNvbG9ycyIsCisgICAgICAgICAgICAidHlwZSI6ICJz
dHJpbmciLAorICAgICAgICAgICAgInZhbHVlcyI6IFsicmVkIiwgImdyZWVuIiwgImJsdWUiXQor
ICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiRXJyb3IiLAorICAgICAg
ICAgICAgInR5cGUiOiAib2JqZWN0IiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJEYXRh
YmFzZSBlcnJvci4iLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCisgICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJtZXNzYWdlIiwgInR5cGUiOiAic3RyaW5nIiwgImRlc2NyaXB0aW9uIjog
IkVycm9yIG1lc3NhZ2UuIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29kZSIsICJ0
eXBlIjogImludGVnZXIiLCAiZGVzY3JpcHRpb24iOiAiRXJyb3IgY29kZS4iIH0KKyAgICAgICAg
ICAgIF0KKyAgICAgICAgfQorICAgIF0sCisgICAgImV2ZW50cyI6IFsKKyAgICAgICAgeworICAg
ICAgICAgICAgIm5hbWUiOiAiZGlkRXhlY3V0ZU9wdGlvbmFsUGFyYW1ldGVycyIsCisgICAgICAg
ICAgICAicGFyYW1ldGVycyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbHVtbk5h
bWVzIiwgInR5cGUiOiAiYXJyYXkiLCAib3B0aW9uYWwiOiB0cnVlLCAiaXRlbXMiOiB7ICJ0eXBl
IjogInN0cmluZyIgfSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibm90ZXMiLCAidHlw
ZSI6ICJzdHJpbmciLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJ0aW1lc3RhbXAiLCAidHlwZSI6ICJudW1iZXIiLCAib3B0aW9uYWwiOiB0cnVlIH0sCisg
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ2YWx1ZXMiLCAidHlwZSI6ICJvYmplY3QiLCAib3B0
aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwYXlsb2FkIiwgInR5
cGUiOiAiYW55IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAic3FsRXJyb3IiLCAiJHJlZiI6ICJFcnJvciIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogInNjcmVlbkNvbG9yIiwgIiRyZWYiOiAiUHJpbWFyeUNvbG9y
cyIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInByaW50
Q29sb3IiLCAidHlwZSI6ICJzdHJpbmciLCAidmFsdWVzIjogWyJjeWFuIiwgIm1hZ2VudGEiLCAi
eWVsbG93IiwgImJsYWNrIl0sICJvcHRpb25hbCI6IHRydWUgfQorICAgICAgICAgICAgXQorICAg
ICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJkaWRFeGVjdXRlTm9PcHRp
b25hbFBhcmFtZXRlcnMiLAorICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCisgICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogImFycmF5IiwgIml0ZW1zIjog
eyAidHlwZSI6ICJzdHJpbmciIH0gfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm5vdGVz
IiwgInR5cGUiOiAic3RyaW5nIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidGltZXN0
YW1wIiwgInR5cGUiOiAibnVtYmVyIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidmFs
dWVzIiwgInR5cGUiOiAib2JqZWN0IiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicGF5
bG9hZCIsICJ0eXBlIjogImFueSIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNxbEVy
cm9yIiwgIiRyZWYiOiAiRXJyb3IiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzY3Jl
ZW5Db2xvciIsICIkcmVmIjogIlByaW1hcnlDb2xvcnMiIH0sCisgICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJwcmludENvbG9yIiwgInR5cGUiOiAic3RyaW5nIiwgInZhbHVlcyI6IFsiY3lhbiIs
ICJtYWdlbnRhIiwgInllbGxvdyIsICJibGFjayJdIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAg
fQorICAgIF0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9leHBlY3RlZC9jb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29u
LXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9l
eHBlY3RlZC9jb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uLXJlc3VsdApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5hNWI3Y2FlNDJiNjlhMmE3MWI5OTQ5ZWMwY2JmOTM0NTUwMTMxYTIxCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4
cGVjdGVkL2NvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24tcmVzdWx0CkBAIC0wLDAg
KzEsNzM4IEBACisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdEJhY2tlbmRDb21tYW5kcy5q
cworLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLWFzeW5j
LWF0dHJpYnV0ZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmlu
ZGluZ3MucHkKKworLy8gRGF0YWJhc2UuCitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRGF0YWJh
c2VEaXNwYXRjaGVyID0gSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbkRpc3BhdGNoZXIu
YmluZChJbnNwZWN0b3JCYWNrZW5kLCAiRGF0YWJhc2UiKTsKK0luc3BlY3RvckJhY2tlbmQucmVn
aXN0ZXJFbnVtKCJEYXRhYmFzZS5QcmltYXJ5Q29sb3JzIiwge1JlZDogInJlZCIsIEdyZWVuOiAi
Z3JlZW4iLCBCbHVlOiAiYmx1ZSJ9KTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5k
KCJEYXRhYmFzZS5leGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzIiwgW3sibmFtZSI6
ICJkYXRhYmFzZUlkIiwgInR5cGUiOiAibnVtYmVyIiwgIm9wdGlvbmFsIjogZmFsc2V9LCB7Im5h
bWUiOiAicXVlcnkiLCAidHlwZSI6ICJzdHJpbmciLCAib3B0aW9uYWwiOiBmYWxzZX1dLCBbImNv
bHVtbk5hbWVzIiwgIm5vdGVzIiwgInRpbWVzdGFtcCIsICJ2YWx1ZXMiLCAicGF5bG9hZCIsICJk
YXRhYmFzZUlkIiwgInNxbEVycm9yIiwgInNjcmVlbkNvbG9yIiwgInByaW50Q29sb3IiXSk7CitJ
bnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiRGF0YWJhc2UuZXhlY3V0ZVNRTEFzeW5j
T3B0aW9uYWxSZXR1cm5WYWx1ZXMiLCBbeyJuYW1lIjogImRhdGFiYXNlSWQiLCAidHlwZSI6ICJu
dW1iZXIiLCAib3B0aW9uYWwiOiBmYWxzZX0sIHsibmFtZSI6ICJxdWVyeSIsICJ0eXBlIjogInN0
cmluZyIsICJvcHRpb25hbCI6IGZhbHNlfV0sIFsiY29sdW1uTmFtZXMiLCAibm90ZXMiLCAidGlt
ZXN0YW1wIiwgInZhbHVlcyIsICJwYXlsb2FkIiwgImRhdGFiYXNlSWQiLCAic3FsRXJyb3IiLCAi
c2NyZWVuQ29sb3IiLCAicHJpbnRDb2xvciJdKTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJD
b21tYW5kKCJEYXRhYmFzZS5leGVjdXRlU1FMU3luYyIsIFt7Im5hbWUiOiAiZGF0YWJhc2VJZCIs
ICJ0eXBlIjogIm51bWJlciIsICJvcHRpb25hbCI6IGZhbHNlfSwgeyJuYW1lIjogInF1ZXJ5Iiwg
InR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjogZmFsc2V9XSwgWyJjb2x1bW5OYW1lcyIsICJu
b3RlcyIsICJ0aW1lc3RhbXAiLCAidmFsdWVzIiwgInBheWxvYWQiLCAiZGF0YWJhc2VJZCIsICJz
cWxFcnJvciIsICJzY3JlZW5Db2xvciIsICJwcmludENvbG9yIl0pOworSW5zcGVjdG9yQmFja2Vu
ZC5yZWdpc3RlckNvbW1hbmQoIkRhdGFiYXNlLmV4ZWN1dGVTUUxBc3luYyIsIFt7Im5hbWUiOiAi
ZGF0YWJhc2VJZCIsICJ0eXBlIjogIm51bWJlciIsICJvcHRpb25hbCI6IGZhbHNlfSwgeyJuYW1l
IjogInF1ZXJ5IiwgInR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjogZmFsc2V9XSwgWyJjb2x1
bW5OYW1lcyIsICJub3RlcyIsICJ0aW1lc3RhbXAiLCAidmFsdWVzIiwgInBheWxvYWQiLCAiZGF0
YWJhc2VJZCIsICJzcWxFcnJvciIsICJzY3JlZW5Db2xvciIsICJwcmludENvbG9yIl0pOworIyMj
IEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0QmFja2VuZENvbW1hbmRzLmpzCisKKyMjIyBCZWdpbiBG
aWxlOiBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbgorLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2Nv
ZGVnZW4vZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpZm5kZWYg
SW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVyc19oCisjZGVmaW5lIEluc3BlY3RvclRlc3RC
YWNrZW5kRGlzcGF0Y2hlcnNfaAorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUg
Ikluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuaCIKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwor
dHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKKyNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQor
Y2xhc3MgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgeworcHVibGlj
OgorICAgIC8vIE5hbWVkIGFmdGVyIHBhcmFtZXRlciAnc2NyZWVuQ29sb3InIHdoaWxlIGdlbmVy
YXRpbmcgY29tbWFuZC9ldmVudCBleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzLgor
ICAgIGVudW0gY2xhc3MgU2NyZWVuQ29sb3IgeworICAgICAgICBSZWQgPSAwLAorICAgICAgICBH
cmVlbiA9IDEsCisgICAgICAgIEJsdWUgPSAyLAorICAgIH07IC8vIGVudW0gY2xhc3MgU2NyZWVu
Q29sb3IKKyAgICAvLyBOYW1lZCBhZnRlciBwYXJhbWV0ZXIgJ3ByaW50Q29sb3InIHdoaWxlIGdl
bmVyYXRpbmcgY29tbWFuZC9ldmVudCBleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVz
LgorICAgIGVudW0gY2xhc3MgUHJpbnRDb2xvciB7CisgICAgICAgIEN5YW4gPSAzLAorICAgICAg
ICBNYWdlbnRhID0gNCwKKyAgICAgICAgWWVsbG93ID0gNSwKKyAgICAgICAgQmxhY2sgPSA2LAor
ICAgIH07IC8vIGVudW0gY2xhc3MgUHJpbnRDb2xvcgorICAgIHZpcnR1YWwgdm9pZCBleGVjdXRl
U1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKEVycm9yU3RyaW5nKiwgaW50IGluX2RhdGFiYXNl
SWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnksIFJlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVy
OjpBcnJheTxTdHJpbmc+PiYgb3B0X291dF9jb2x1bW5OYW1lcywgSW5zcGVjdG9yOjpUeXBlQnVp
bGRlcjo6T3B0T3V0cHV0PFN0cmluZz4qIG9wdF9vdXRfbm90ZXMsIEluc3BlY3Rvcjo6VHlwZUJ1
aWxkZXI6Ok9wdE91dHB1dDxkb3VibGU+KiBvcHRfb3V0X3RpbWVzdGFtcCwgSW5zcGVjdG9yOjpU
eXBlQnVpbGRlcjo6T3B0T3V0cHV0PEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0Piogb3B0X291
dF92YWx1ZXMsIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6Ok9wdE91dHB1dDxJbnNwZWN0b3I6Oklu
c3BlY3RvclZhbHVlPiogb3B0X291dF9wYXlsb2FkLCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpP
cHRPdXRwdXQ8aW50Piogb3B0X291dF9kYXRhYmFzZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpUeXBl
QnVpbGRlcjo6RGF0YWJhc2U6OkVycm9yPiYgb3B0X291dF9zcWxFcnJvciwgSW5zcGVjdG9yOjpU
eXBlQnVpbGRlcjo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMqIG9wdF9vdXRfc2NyZWVuQ29sb3Is
IEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQcmludENvbG9yKiBv
cHRfb3V0X3ByaW50Q29sb3IpID0gMDsKKyAgICBjbGFzcyBFeGVjdXRlU1FMQXN5bmNPcHRpb25h
bFJldHVyblZhbHVlc0NhbGxiYWNrIDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZSB7CisgICAgcHVibGljOgorICAgICAgICBFeGVjdXRl
U1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc0NhbGxiYWNrKFBhc3NSZWZQdHI8SW5zcGVjdG9y
OjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcj4sIGludCBpZCk7CisgICAgICAgIHZvaWQgc2Vu
ZFN1Y2Nlc3MoUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheTxTdHJpbmc+
PiBjb2x1bW5OYW1lcywgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6T3B0T3V0cHV0PFN0cmluZz4q
IG5vdGVzLCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8ZG91YmxlPiogdGltZXN0
YW1wLCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8SW5zcGVjdG9yOjpJbnNwZWN0
b3JPYmplY3Q+KiB2YWx1ZXMsIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6Ok9wdE91dHB1dDxJbnNw
ZWN0b3I6Okluc3BlY3RvclZhbHVlPiogcGF5bG9hZCwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6
T3B0T3V0cHV0PGludD4qIGRhdGFiYXNlSWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVp
bGRlcjo6RGF0YWJhc2U6OkVycm9yPiBzcWxFcnJvciwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6
T3B0T3V0cHV0PFN0cmluZz4qIHNjcmVlbkNvbG9yLCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpP
cHRPdXRwdXQ8U3RyaW5nPiogcHJpbnRDb2xvcik7CisgICAgfTsKKyAgICB2aXJ0dWFsIHZvaWQg
ZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMoRXJyb3JTdHJpbmcqLCBpbnQgaW5f
ZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSwgUGFzc1JlZlB0cjxFeGVjdXRlU1FM
QXN5bmNPcHRpb25hbFJldHVyblZhbHVlc0NhbGxiYWNrPiBjYWxsYmFjaykgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBleGVjdXRlU1FMU3luYyhFcnJvclN0cmluZyosIGludCBpbl9kYXRhYmFzZUlk
LCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5LCBSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6
QXJyYXk8U3RyaW5nPj4mIG91dF9jb2x1bW5OYW1lcywgU3RyaW5nKiBvdXRfbm90ZXMsIGRvdWJs
ZSogb3V0X3RpbWVzdGFtcCwgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QqIG91dF92YWx1ZXMs
IEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUqIG91dF9wYXlsb2FkLCBpbnQqIG91dF9kYXRhYmFz
ZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6RGF0YWJhc2U6OkVycm9yPiYgb3V0
X3NxbEVycm9yLCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9y
cyogb3V0X3NjcmVlbkNvbG9yLCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFu
ZGxlcjo6UHJpbnRDb2xvciogb3V0X3ByaW50Q29sb3IpID0gMDsKKyAgICBjbGFzcyBFeGVjdXRl
U1FMQXN5bmNDYWxsYmFjayA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyOjpDYWxsYmFja0Jhc2UgeworICAgIHB1YmxpYzoKKyAgICAgICAgRXhlY3V0ZVNRTEFz
eW5jQ2FsbGJhY2soUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyPiwgaW50IGlkKTsKKyAgICAgICAgdm9pZCBzZW5kU3VjY2VzcyhQYXNzUmVmUHRyPEluc3Bl
Y3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5PFN0cmluZz4+IGNvbHVtbk5hbWVzLCBjb25zdCBTdHJp
bmcmIG5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCB2
YWx1ZXMsIEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUgcGF5bG9hZCwgaW50IGRhdGFiYXNlSWQs
IFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6RGF0YWJhc2U6OkVycm9yPiBzcWxF
cnJvciwgY29uc3QgU3RyaW5nJiBzY3JlZW5Db2xvciwgY29uc3QgU3RyaW5nJiBwcmludENvbG9y
KTsKKyAgICB9OworICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU1FMQXN5bmMoRXJyb3JTdHJpbmcq
LCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSwgUGFzc1JlZlB0cjxF
eGVjdXRlU1FMQXN5bmNDYWxsYmFjaz4gY2FsbGJhY2spID0gMDsKK3Byb3RlY3RlZDoKKyAgICB2
aXJ0dWFsIH5JbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpOworfTsK
KyNlbmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQorCisjaWYgRU5BQkxFKFNRTF9EQVRBQkFT
RSkKK2NsYXNzIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJs
aWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7Citw
dWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlz
cGF0Y2hlcj4gY3JlYXRlKEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqLCBJ
bnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOworICAgIHZpcnR1YWwg
dm9pZCBkaXNwYXRjaChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IG1lc3NhZ2UpIG92ZXJyaWRlOworcHJpdmF0
ZToKKyAgICB2b2lkIGV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyBjYWxs
SWQsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsKKyAgICB2b2lk
IGV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgY2FsbElkLCBjb25zdCBJ
bnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7CisgICAgdm9pZCBleGVjdXRlU1FM
U3luYyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QmIG1lc3Nh
Z2UpOworICAgIHZvaWQgZXhlY3V0ZVNRTEFzeW5jKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0
b3I6Okluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7Citwcml2YXRlOgorICAgIEluc3BlY3RvckRh
dGFiYXNlQmFja2VuZERpc3BhdGNoZXIoSW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlciosIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7CisgICAg
SW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIG1fYWdlbnQ7Cit9Owor
I2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0UpCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rv
cgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKworI2VuZGlmIC8vICFkZWZpbmVkKElu
c3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnNfaCkKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9y
VGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0
QmFja2VuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2
ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8v
IERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJv
bSBjb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKworI2lmIEVOQUJMRShJ
TlNQRUNUT1IpCisKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
Lmg+CisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPgorI2luY2x1ZGUgPHd0
Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKyNpZiBFTkFCTEUo
U1FMX0RBVEFCQVNFKQorSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6
On5JbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpIHsgfQorI2VuZGlm
IC8vIEVOQUJMRShTUUxfREFUQUJBU0UpCisKKyNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQorUGFz
c1JlZlB0cjxJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyPiBJbnNwZWN0b3JEYXRh
YmFzZUJhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUoSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIq
IGJhY2tlbmREaXNwYXRjaGVyLCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFu
ZGxlciogYWdlbnQpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnNwZWN0b3JEYXRhYmFz
ZUJhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyLCBhZ2VudCkpOworfQorCitJbnNw
ZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmRE
aXNwYXRjaGVyKEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlciwg
SW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQorICAgIDog
SW5zcGVjdG9yU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIp
CisgICAgLCBtX2FnZW50KGFnZW50KQoreworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lz
dGVyRGlzcGF0Y2hlckZvckRvbWFpbihBU0NJSUxpdGVyYWwoIkRhdGFiYXNlIiksIHRoaXMpOwor
fQorCit2b2lkIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxv
bmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IG1lc3NhZ2UpCit7CisgICAgUmVmPEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNo
ZXI+IHByb3RlY3QoKnRoaXMpOworCisgICAgaWYgKG1ldGhvZCA9PSAiZXhlY3V0ZVNRTFN5bmNP
cHRpb25hbFJldHVyblZhbHVlcyIpCisgICAgICAgIGV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1
cm5WYWx1ZXMoY2FsbElkLCAqbWVzc2FnZS5nZXQoKSk7CisgICAgZWxzZSBpZiAobWV0aG9kID09
ICJleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyIpCisgICAgICAgIGV4ZWN1dGVT
UUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGNhbGxJZCwgKm1lc3NhZ2UuZ2V0KCkpOworICAg
IGVsc2UgaWYgKG1ldGhvZCA9PSAiZXhlY3V0ZVNRTFN5bmMiKQorICAgICAgICBleGVjdXRlU1FM
U3luYyhjYWxsSWQsICptZXNzYWdlLmdldCgpKTsKKyAgICBlbHNlIGlmIChtZXRob2QgPT0gImV4
ZWN1dGVTUUxBc3luYyIpCisgICAgICAgIGV4ZWN1dGVTUUxBc3luYyhjYWxsSWQsICptZXNzYWdl
LmdldCgpKTsKKyAgICBlbHNlCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFBy
b3RvY29sRXJyb3IoJmNhbGxJZCwgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5v
dEZvdW5kLCBTdHJpbmcoIiciKSArICJEYXRhYmFzZSIgKyAnLicgKyBtZXRob2QgKyAiJyB3YXMg
bm90IGZvdW5kIik7Cit9CisKK3ZvaWQgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hl
cjo6ZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIGNhbGxJZCwgY29uc3Qg
SW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKQoreworICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4g
cHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyID0gbWVzc2FnZS5nZXRPYmplY3QoQVNDSUlM
aXRlcmFsKCJwYXJhbXMiKSk7CisgICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQ
dHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7CisgICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29s
RXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMuZ2V0KCk7CisgICAgaW50IGluX2RhdGFiYXNlSWQg
PSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0SW50KHBhcmFtc0NvbnRhaW5lclB0ciwg
QVNDSUlMaXRlcmFsKCJkYXRhYmFzZUlkIiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzUHRyKTsK
KyAgICBTdHJpbmcgaW5fcXVlcnkgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0U3Ry
aW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJxdWVyeSIpLCBudWxscHRyLCBw
cm90b2NvbEVycm9yc1B0cik7CisgICAgaWYgKHByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewor
ICAgICAgICBTdHJpbmcgZXJyb3JNZXNzYWdlID0gU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1l
bnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJEYXRhYmFzZS5leGVjdXRl
U1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzIik7CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNo
ZXItPnJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXI6OkludmFsaWRQYXJhbXMsIGVycm9yTWVzc2FnZSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgp
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEVycm9yU3RyaW5nIGVycm9yOworICAg
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCk7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5PFN0cmluZz4+IG91
dF9jb2x1bW5OYW1lczsKKyAgICBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8U3Ry
aW5nPiBvdXRfbm90ZXM7CisgICAgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6T3B0T3V0cHV0PGRv
dWJsZT4gb3V0X3RpbWVzdGFtcDsKKyAgICBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpPcHRPdXRw
dXQ8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IG91dF92YWx1ZXM7CisgICAgSW5zcGVjdG9y
OjpUeXBlQnVpbGRlcjo6T3B0T3V0cHV0PEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+IG91dF9w
YXlsb2FkOworICAgIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6Ok9wdE91dHB1dDxJbnNwZWN0b3I6
OlR5cGVCdWlsZGVyOjpEYXRhYmFzZTo6RGF0YWJhc2VJZD4gb3V0X2RhdGFiYXNlSWQ7CisgICAg
UmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkRhdGFiYXNlOjpFcnJvcj4gb3V0X3NxbEVy
cm9yOworICAgIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3Jz
IG91dF9zY3JlZW5Db2xvcjsKKyAgICBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVy
SGFuZGxlcjo6UHJpbnRDb2xvciBvdXRfcHJpbnRDb2xvcjsKKyAgICBtX2FnZW50LT5leGVjdXRl
U1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKCZlcnJvciwgaW5fZGF0YWJhc2VJZCwgaW5fcXVl
cnksIG91dF9jb2x1bW5OYW1lcywgJm91dF9ub3RlcywgJm91dF90aW1lc3RhbXAsIG91dF92YWx1
ZXMsICZvdXRfcGF5bG9hZCwgJm91dF9kYXRhYmFzZUlkLCBvdXRfc3FsRXJyb3IsICZvdXRfc2Ny
ZWVuQ29sb3IsICZvdXRfcHJpbnRDb2xvcik7CisKKyAgICBpZiAoIWVycm9yLmxlbmd0aCgpKSB7
CisgICAgICAgIGlmIChvdXRfY29sdW1uTmFtZXMpCisgICAgICAgICAgICByZXN1bHQtPnNldEFy
cmF5KEFTQ0lJTGl0ZXJhbCgiY29sdW1uTmFtZXMiKSwgb3V0X2NvbHVtbk5hbWVzKTsKKyAgICAg
ICAgaWYgKG91dF9ub3Rlcy5pc0Fzc2lnbmVkKCkpCisgICAgICAgICAgICByZXN1bHQtPnNldFN0
cmluZyhBU0NJSUxpdGVyYWwoIm5vdGVzIiksIG91dF9ub3Rlcy5nZXRWYWx1ZSgpKTsKKyAgICAg
ICAgaWYgKG91dF90aW1lc3RhbXAuaXNBc3NpZ25lZCgpKQorICAgICAgICAgICAgcmVzdWx0LT5z
ZXROdW1iZXIoQVNDSUlMaXRlcmFsKCJ0aW1lc3RhbXAiKSwgb3V0X3RpbWVzdGFtcC5nZXRWYWx1
ZSgpKTsKKyAgICAgICAgaWYgKG91dF92YWx1ZXMuaXNBc3NpZ25lZCgpKQorICAgICAgICAgICAg
cmVzdWx0LT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJ2YWx1ZXMiKSwgb3V0X3ZhbHVlcy5nZXRW
YWx1ZSgpKTsKKyAgICAgICAgaWYgKG91dF9wYXlsb2FkLmlzQXNzaWduZWQoKSkKKyAgICAgICAg
ICAgIHJlc3VsdC0+c2V0VmFsdWUoQVNDSUlMaXRlcmFsKCJwYXlsb2FkIiksIG91dF9wYXlsb2Fk
LmdldFZhbHVlKCkpOworICAgICAgICBpZiAob3V0X2RhdGFiYXNlSWQuaXNBc3NpZ25lZCgpKQor
ICAgICAgICAgICAgcmVzdWx0LT5zZXROdW1iZXIoQVNDSUlMaXRlcmFsKCJkYXRhYmFzZUlkIiks
IG91dF9kYXRhYmFzZUlkLmdldFZhbHVlKCkpOworICAgICAgICBpZiAob3V0X3NxbEVycm9yKQor
ICAgICAgICAgICAgcmVzdWx0LT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJzcWxFcnJvciIpLCBv
dXRfc3FsRXJyb3IpOworICAgICAgICBpZiAob3V0X3NjcmVlbkNvbG9yLmlzQXNzaWduZWQoKSkK
KyAgICAgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgic2NyZWVuQ29sb3Ii
KSwgb3V0X3NjcmVlbkNvbG9yLmdldFZhbHVlKCkpOworICAgICAgICBpZiAob3V0X3ByaW50Q29s
b3IuaXNBc3NpZ25lZCgpKQorICAgICAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoQVNDSUlMaXRl
cmFsKCJwcmludENvbG9yIiksIG91dF9wcmludENvbG9yLmdldFZhbHVlKCkpOworICAgIH0KKyAg
ICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFz
ZSgpLCBlcnJvcik7Cit9CisKK0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyOjpFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc0NhbGxiYWNrOjpFeGVjdXRl
U1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc0NhbGxiYWNrKFBhc3NSZWZQdHI8SW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXI+IGJhY2tlbmREaXNwYXRjaGVyLCBpbnQgaWQpIDogSW5zcGVjdG9y
OjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlKGJhY2tlbmREaXNwYXRj
aGVyLCBpZCkgeyB9CisKK3ZvaWQgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXI6OkV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJhY2s6OnNlbmRT
dWNjZXNzKFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk8U3RyaW5nPj4g
Y29sdW1uTmFtZXMsIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6Ok9wdE91dHB1dDxTdHJpbmc+KiBu
b3RlcywgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6T3B0T3V0cHV0PGRvdWJsZT4qIHRpbWVzdGFt
cCwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6T3B0T3V0cHV0PEluc3BlY3Rvcjo6SW5zcGVjdG9y
T2JqZWN0PiogdmFsdWVzLCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8SW5zcGVj
dG9yOjpJbnNwZWN0b3JWYWx1ZT4qIHBheWxvYWQsIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6Ok9w
dE91dHB1dDxpbnQ+KiBkYXRhYmFzZUlkLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxk
ZXI6OkRhdGFiYXNlOjpFcnJvcj4gc3FsRXJyb3IsIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6Ok9w
dE91dHB1dDxTdHJpbmc+KiBzY3JlZW5Db2xvciwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6T3B0
T3V0cHV0PFN0cmluZz4qIHByaW50Q29sb3IpCit7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4ganNvbk1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIGlmIChjb2x1
bW5OYW1lcykKKyAgICAgICAganNvbk1lc3NhZ2UtPnNldEFycmF5KEFTQ0lJTGl0ZXJhbCgiY29s
dW1uTmFtZXMiKSwgY29sdW1uTmFtZXMpOworICAgIGlmIChub3Rlcy5pc0Fzc2lnbmVkKCkpCisg
ICAgICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJub3RlcyIpLCBub3Rl
cy5nZXRWYWx1ZSgpKTsKKyAgICBpZiAodGltZXN0YW1wLmlzQXNzaWduZWQoKSkKKyAgICAgICAg
anNvbk1lc3NhZ2UtPnNldE51bWJlcihBU0NJSUxpdGVyYWwoInRpbWVzdGFtcCIpLCB0aW1lc3Rh
bXAuZ2V0VmFsdWUoKSk7CisgICAgaWYgKHZhbHVlcy5pc0Fzc2lnbmVkKCkpCisgICAgICAgIGpz
b25NZXNzYWdlLT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJ2YWx1ZXMiKSwgdmFsdWVzLmdldFZh
bHVlKCkpOworICAgIGlmIChwYXlsb2FkLmlzQXNzaWduZWQoKSkKKyAgICAgICAganNvbk1lc3Nh
Z2UtPnNldFZhbHVlKEFTQ0lJTGl0ZXJhbCgicGF5bG9hZCIpLCBwYXlsb2FkLmdldFZhbHVlKCkp
OworICAgIGlmIChkYXRhYmFzZUlkLmlzQXNzaWduZWQoKSkKKyAgICAgICAganNvbk1lc3NhZ2Ut
PnNldE51bWJlcihBU0NJSUxpdGVyYWwoImRhdGFiYXNlSWQiKSwgZGF0YWJhc2VJZC5nZXRWYWx1
ZSgpKTsKKyAgICBpZiAoc3FsRXJyb3IpCisgICAgICAgIGpzb25NZXNzYWdlLT5zZXRPYmplY3Qo
QVNDSUlMaXRlcmFsKCJzcWxFcnJvciIpLCBzcWxFcnJvcik7CisgICAgaWYgKHNjcmVlbkNvbG9y
LmlzQXNzaWduZWQoKSkKKyAgICAgICAganNvbk1lc3NhZ2UtPnNldFN0cmluZyhBU0NJSUxpdGVy
YWwoInNjcmVlbkNvbG9yIiksIHNjcmVlbkNvbG9yLmdldFZhbHVlKCkpOworICAgIGlmIChwcmlu
dENvbG9yLmlzQXNzaWduZWQoKSkKKyAgICAgICAganNvbk1lc3NhZ2UtPnNldFN0cmluZyhBU0NJ
SUxpdGVyYWwoInByaW50Q29sb3IiKSwgcHJpbnRDb2xvci5nZXRWYWx1ZSgpKTsKKyAgICBzZW5k
SWZBY3RpdmUoanNvbk1lc3NhZ2UsIEVycm9yU3RyaW5nKCkpOworfQorCit2b2lkIEluc3BlY3Rv
ckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJu
VmFsdWVzKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpCit7Cisg
ICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm90b2NvbEVycm9ycyA9IEluc3BlY3RvckFycmF5
OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXIg
PSBtZXNzYWdlLmdldE9iamVjdChBU0NJSUxpdGVyYWwoInBhcmFtcyIpKTsKKyAgICBJbnNwZWN0
b3JPYmplY3QqIHBhcmFtc0NvbnRhaW5lclB0ciA9IHBhcmFtc0NvbnRhaW5lci5nZXQoKTsKKyAg
ICBJbnNwZWN0b3JBcnJheSogcHJvdG9jb2xFcnJvcnNQdHIgPSBwcm90b2NvbEVycm9ycy5nZXQo
KTsKKyAgICBpbnQgaW5fZGF0YWJhc2VJZCA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpn
ZXRJbnQocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoImRhdGFiYXNlSWQiKSwgbnVs
bHB0ciwgcHJvdG9jb2xFcnJvcnNQdHIpOworICAgIFN0cmluZyBpbl9xdWVyeSA9IEluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyOjpnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxp
dGVyYWwoInF1ZXJ5IiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzUHRyKTsKKyAgICBpZiAocHJv
dG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CisgICAgICAgIFN0cmluZyBlcnJvck1lc3NhZ2UgPSBT
dHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJv
Y2Vzc2VkIiwgIkRhdGFiYXNlLmV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzIik7
CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJ
ZCwgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OkludmFsaWRQYXJhbXMsIGVycm9yTWVzc2Fn
ZSwgcHJvdG9jb2xFcnJvcnMucmVsZWFzZSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIEVycm9yU3RyaW5nIGVycm9yOworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3Vs
dCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPEluc3BlY3RvckRhdGFi
YXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVy
blZhbHVlc0NhbGxiYWNrPiBjYWxsYmFjayA9IGFkb3B0UmVmKG5ldyBJbnNwZWN0b3JEYXRhYmFz
ZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5W
YWx1ZXNDYWxsYmFjayhtX2JhY2tlbmREaXNwYXRjaGVyLGNhbGxJZCkpOworICAgIG1fYWdlbnQt
PmV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKCZlcnJvciwgaW5fZGF0YWJhc2VJ
ZCwgaW5fcXVlcnksIGNhbGxiYWNrKTsKKworICAgIGlmIChlcnJvci5sZW5ndGgoKSkgeworICAg
ICAgICBjYWxsYmFjay0+ZGlzYWJsZSgpOworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5y
ZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CisgICAgICAgIHJldHVybjsKKyAgICB9Cit9
CisKK3ZvaWQgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTFN5
bmMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSkKK3sKKyAgICBS
ZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yQXJyYXk6OmNy
ZWF0ZSgpOworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lciA9IG1l
c3NhZ2UuZ2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicGFyYW1zIikpOworICAgIEluc3BlY3Rvck9i
amVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdldCgpOworICAgIElu
c3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJyb3JzLmdldCgpOwor
ICAgIGludCBpbl9kYXRhYmFzZUlkID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldElu
dChwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgiZGF0YWJhc2VJZCIpLCBudWxscHRy
LCBwcm90b2NvbEVycm9yc1B0cik7CisgICAgU3RyaW5nIGluX3F1ZXJ5ID0gSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXI6OmdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJh
bCgicXVlcnkiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnNQdHIpOworICAgIGlmIChwcm90b2Nv
bEVycm9ycy0+bGVuZ3RoKCkpIHsKKyAgICAgICAgU3RyaW5nIGVycm9yTWVzc2FnZSA9IFN0cmlu
Zzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNz
ZWQiLCAiRGF0YWJhc2UuZXhlY3V0ZVNRTFN5bmMiKTsKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0
Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElkLCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlcjo6SW52YWxpZFBhcmFtcywgZXJyb3JNZXNzYWdlLCBwcm90b2NvbEVycm9ycy5yZWxlYXNl
KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgRXJyb3JTdHJpbmcgZXJyb3I7Cisg
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk8U3RyaW5nPj4g
b3V0X2NvbHVtbk5hbWVzOworICAgIFN0cmluZyBvdXRfbm90ZXM7CisgICAgZG91YmxlIG91dF90
aW1lc3RhbXA7CisgICAgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Qgb3V0X3ZhbHVlczsKKyAg
ICBJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlIG91dF9wYXlsb2FkOworICAgIEluc3BlY3Rvcjo6
VHlwZUJ1aWxkZXI6OkRhdGFiYXNlOjpEYXRhYmFzZUlkIG91dF9kYXRhYmFzZUlkOworICAgIFJl
ZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpEYXRhYmFzZTo6RXJyb3I+IG91dF9zcWxFcnJv
cjsKKyAgICBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyBv
dXRfc2NyZWVuQ29sb3I7CisgICAgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXI6OlByaW50Q29sb3Igb3V0X3ByaW50Q29sb3I7CisgICAgbV9hZ2VudC0+ZXhlY3V0ZVNR
TFN5bmMoJmVycm9yLCBpbl9kYXRhYmFzZUlkLCBpbl9xdWVyeSwgb3V0X2NvbHVtbk5hbWVzLCAm
b3V0X25vdGVzLCAmb3V0X3RpbWVzdGFtcCwgb3V0X3ZhbHVlcywgJm91dF9wYXlsb2FkLCAmb3V0
X2RhdGFiYXNlSWQsIG91dF9zcWxFcnJvciwgJm91dF9zY3JlZW5Db2xvciwgJm91dF9wcmludENv
bG9yKTsKKworICAgIGlmICghZXJyb3IubGVuZ3RoKCkpIHsKKyAgICAgICAgcmVzdWx0LT5zZXRB
cnJheShBU0NJSUxpdGVyYWwoImNvbHVtbk5hbWVzIiksIG91dF9jb2x1bW5OYW1lcyk7CisgICAg
ICAgIHJlc3VsdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgibm90ZXMiKSwgb3V0X25vdGVzKTsK
KyAgICAgICAgcmVzdWx0LT5zZXROdW1iZXIoQVNDSUlMaXRlcmFsKCJ0aW1lc3RhbXAiKSwgb3V0
X3RpbWVzdGFtcCk7CisgICAgICAgIHJlc3VsdC0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgidmFs
dWVzIiksIG91dF92YWx1ZXMpOworICAgICAgICByZXN1bHQtPnNldFZhbHVlKEFTQ0lJTGl0ZXJh
bCgicGF5bG9hZCIpLCBvdXRfcGF5bG9hZCk7CisgICAgICAgIHJlc3VsdC0+c2V0TnVtYmVyKEFT
Q0lJTGl0ZXJhbCgiZGF0YWJhc2VJZCIpLCBvdXRfZGF0YWJhc2VJZCk7CisgICAgICAgIHJlc3Vs
dC0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgic3FsRXJyb3IiKSwgb3V0X3NxbEVycm9yKTsKKyAg
ICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJzY3JlZW5Db2xvciIpLCBJbnNw
ZWN0b3I6OlR5cGVCdWlsZGVyOjpnZXRUZXN0RW51bUNvbnN0YW50VmFsdWUob3V0X3NjcmVlbkNv
bG9yKSk7CisgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgicHJpbnRDb2xv
ciIpLCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpnZXRUZXN0RW51bUNvbnN0YW50VmFsdWUob3V0
X3ByaW50Q29sb3IpKTsKKyAgICB9CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3Bv
bnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgZXJyb3IpOworfQorCitJbnNwZWN0b3JEYXRh
YmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jQ2FsbGJhY2s6OkV4
ZWN1dGVTUUxBc3luY0NhbGxiYWNrKFBhc3NSZWZQdHI8SW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXI+IGJhY2tlbmREaXNwYXRjaGVyLCBpbnQgaWQpIDogSW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlKGJhY2tlbmREaXNwYXRjaGVyLCBpZCkgeyB9CisK
K3ZvaWQgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkV4ZWN1dGVT
UUxBc3luY0NhbGxiYWNrOjpzZW5kU3VjY2VzcyhQYXNzUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1
aWxkZXI6OkFycmF5PFN0cmluZz4+IGNvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIG5vdGVzLCBk
b3VibGUgdGltZXN0YW1wLCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCB2YWx1ZXMsIEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yVmFsdWUgcGF5bG9hZCwgaW50IGRhdGFiYXNlSWQsIFBhc3NSZWZQdHI8
SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6RGF0YWJhc2U6OkVycm9yPiBzcWxFcnJvciwgY29uc3Qg
U3RyaW5nJiBzY3JlZW5Db2xvciwgY29uc3QgU3RyaW5nJiBwcmludENvbG9yKQoreworICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGpzb25NZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsKKyAgICBqc29uTWVzc2FnZS0+c2V0QXJyYXkoQVNDSUlMaXRlcmFsKCJjb2x1bW5OYW1l
cyIpLCBjb2x1bW5OYW1lcyk7CisgICAganNvbk1lc3NhZ2UtPnNldFN0cmluZyhBU0NJSUxpdGVy
YWwoIm5vdGVzIiksIG5vdGVzKTsKKyAgICBqc29uTWVzc2FnZS0+c2V0TnVtYmVyKEFTQ0lJTGl0
ZXJhbCgidGltZXN0YW1wIiksIHRpbWVzdGFtcCk7CisgICAganNvbk1lc3NhZ2UtPnNldE9iamVj
dChBU0NJSUxpdGVyYWwoInZhbHVlcyIpLCB2YWx1ZXMpOworICAgIGpzb25NZXNzYWdlLT5zZXRW
YWx1ZShBU0NJSUxpdGVyYWwoInBheWxvYWQiKSwgcGF5bG9hZCk7CisgICAganNvbk1lc3NhZ2Ut
PnNldE51bWJlcihBU0NJSUxpdGVyYWwoImRhdGFiYXNlSWQiKSwgZGF0YWJhc2VJZCk7CisgICAg
anNvbk1lc3NhZ2UtPnNldE9iamVjdChBU0NJSUxpdGVyYWwoInNxbEVycm9yIiksIHNxbEVycm9y
KTsKKyAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgic2NyZWVuQ29sb3Ii
KSwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Z2V0VGVzdEVudW1Db25zdGFudFZhbHVlKHNjcmVl
bkNvbG9yKSk7CisgICAganNvbk1lc3NhZ2UtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInByaW50
Q29sb3IiKSwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Z2V0VGVzdEVudW1Db25zdGFudFZhbHVl
KHByaW50Q29sb3IpKTsKKyAgICBzZW5kSWZBY3RpdmUoanNvbk1lc3NhZ2UsIEVycm9yU3RyaW5n
KCkpOworfQorCit2b2lkIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1
dGVTUUxBc3luYyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKQor
eworICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3JB
cnJheTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFp
bmVyID0gbWVzc2FnZS5nZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJwYXJhbXMiKSk7CisgICAgSW5z
cGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXNDb250YWluZXIuZ2V0KCk7
CisgICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0gcHJvdG9jb2xFcnJvcnMu
Z2V0KCk7CisgICAgaW50IGluX2RhdGFiYXNlSWQgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
cjo6Z2V0SW50KHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJkYXRhYmFzZUlkIiks
IG51bGxwdHIsIHByb3RvY29sRXJyb3JzUHRyKTsKKyAgICBTdHJpbmcgaW5fcXVlcnkgPSBJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgQVND
SUlMaXRlcmFsKCJxdWVyeSIpLCBudWxscHRyLCBwcm90b2NvbEVycm9yc1B0cik7CisgICAgaWYg
KHByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgeworICAgICAgICBTdHJpbmcgZXJyb3JNZXNzYWdl
ID0gU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJl
IHByb2Nlc3NlZCIsICJEYXRhYmFzZS5leGVjdXRlU1FMQXN5bmMiKTsKKyAgICAgICAgbV9iYWNr
ZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElkLCBJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFtcywgZXJyb3JNZXNzYWdlLCBwcm90b2NvbEVycm9y
cy5yZWxlYXNlKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgRXJyb3JTdHJpbmcg
ZXJyb3I7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2Jq
ZWN0OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXI6OkV4ZWN1dGVTUUxBc3luY0NhbGxiYWNrPiBjYWxsYmFjayA9IGFkb3B0UmVm
KG5ldyBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNR
TEFzeW5jQ2FsbGJhY2sobV9iYWNrZW5kRGlzcGF0Y2hlcixjYWxsSWQpKTsKKyAgICBtX2FnZW50
LT5leGVjdXRlU1FMQXN5bmMoJmVycm9yLCBpbl9kYXRhYmFzZUlkLCBpbl9xdWVyeSwgY2FsbGJh
Y2spOworCisgICAgaWYgKGVycm9yLmxlbmd0aCgpKSB7CisgICAgICAgIGNhbGxiYWNrLT5kaXNh
YmxlKCk7CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3Io
JmNhbGxJZCwgSW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJy
b3IsIGVycm9yKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KK30KKyNlbmRpZiAvLyBFTkFCTEUo
U1FMX0RBVEFCQVNFKQorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVO
QUJMRShJTlNQRUNUT1IpCisKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNw
YXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RGcm9udGVuZERpc3Bh
dGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNo
aW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBU
SElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0
aC1hc3luYy1hdHRyaWJ1dGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisKKyNpZm5kZWYgSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hl
cnNfaAorI2RlZmluZSBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVyc19oCisKKyNpZiBF
TkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSAiSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5o
IgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4KKyNpbmNs
dWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQ
dHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3Bl
Y3RvciB7CisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJM
RShJTlNQRUNUT1IpCisKKyNlbmRpZiAvLyAhZGVmaW5lZChJbnNwZWN0b3JUZXN0RnJvbnRlbmRE
aXNwYXRjaGVyc19oKQorIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRj
aGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVy
cy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5n
dG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElT
IEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1h
c3luYy1hdHRyaWJ1dGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JU
ZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK30g
Ly8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKwor
IyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKworIyMj
IEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuaAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uCisv
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Y29kZWdlbi9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2lmbmRl
ZiBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzX2gKKyNkZWZpbmUgSW5zcGVjdG9yVGVzdFR5cGVC
dWlsZGVyc19oCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSA8aW5zcGVjdG9y
L0luc3BlY3RvckpTVHlwZUJ1aWxkZXJzLmg+CisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3Rv
clR5cGVCdWlsZGVyLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3
dGYvUGFzc1JlZlB0ci5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKK25hbWVzcGFj
ZSBUeXBlQnVpbGRlciB7CisKKy8vIEZvcndhcmQgZGVjbGFyYXRpb25zLgorI2lmIEVOQUJMRShT
UUxfREFUQUJBU0UpCituYW1lc3BhY2UgRGF0YWJhc2UgeworY2xhc3MgRXJyb3I7CitlbnVtIGNs
YXNzIFByaW1hcnlDb2xvcnM7Cit9IC8vIERhdGFiYXNlCisjZW5kaWYgLy8gRU5BQkxFKFNRTF9E
QVRBQkFTRSkKKy8vIEVuZCBvZiBmb3J3YXJkIGRlY2xhcmF0aW9ucy4KKworCisvLyBUeXBlZGVm
cy4KKyNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQorbmFtZXNwYWNlIERhdGFiYXNlIHsKKy8qIFVu
aXF1ZSBpZGVudGlmaWVyIG9mIERhdGFiYXNlIG9iamVjdC4gKi8KK3R5cGVkZWYgaW50IERhdGFi
YXNlSWQ7Cit9IC8vIERhdGFiYXNlCisjZW5kaWYgLy8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKKy8v
IEVuZCBvZiB0eXBlZGVmcy4KKworU3RyaW5nIGdldFRlc3RFbnVtQ29uc3RhbnRWYWx1ZShpbnQg
Y29kZSk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IFN0cmluZyBnZXRUZXN0RW51bUNvbnN0YW50
VmFsdWUoVCBlbnVtVmFsdWUpCit7CisgICAgcmV0dXJuIGdldFRlc3RFbnVtQ29uc3RhbnRWYWx1
ZShzdGF0aWNfY2FzdDxpbnQ+KGVudW1WYWx1ZSkpOworfQorCisjaWYgRU5BQkxFKFNRTF9EQVRB
QkFTRSkKK25hbWVzcGFjZSBEYXRhYmFzZSB7CisvKiAgKi8KK2VudW0gY2xhc3MgUHJpbWFyeUNv
bG9ycyB7CisgICAgUmVkID0gMCwKKyAgICBHcmVlbiA9IDEsCisgICAgQmx1ZSA9IDIsCit9OyAv
LyBlbnVtIGNsYXNzIFByaW1hcnlDb2xvcnMKKy8qIERhdGFiYXNlIGVycm9yLiAqLworY2xhc3Mg
RXJyb3IgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3RCYXNlIHsKK3B1YmxpYzoK
KyAgICBlbnVtIHsKKyAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAorICAgICAgICBNZXNzYWdlU2V0
ID0gMSA8PCAwLAorICAgICAgICBDb2RlU2V0ID0gMSA8PCAxLAorICAgICAgICBBbGxGaWVsZHNT
ZXQgPSAoTWVzc2FnZVNldCB8IENvZGVTZXQpCisgICAgfTsKKworICAgIHRlbXBsYXRlPGludCBT
VEFURT4KKyAgICBjbGFzcyBCdWlsZGVyIHsKKyAgICBwcml2YXRlOgorICAgICAgICBSZWZQdHI8
SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OworCisgICAgICAgIHRlbXBsYXRl
PGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RF
UD4qPih0aGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjwvKkVy
cm9yKi9JbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gcHRyKQorICAgICAgICB7CisgICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVk
X2luX25vbl9pbml0X3N0YXRlKTsKKyAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOworICAgICAg
ICB9CisgICAgICAgIGZyaWVuZCBjbGFzcyBFcnJvcjsKKyAgICBwdWJsaWM6CisKKyAgICAgICAg
QnVpbGRlcjxTVEFURSB8IE1lc3NhZ2VTZXQ+JiBzZXRNZXNzYWdlKGNvbnN0IFN0cmluZyYgdmFs
dWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBNZXNz
YWdlU2V0KSwgcHJvcGVydHlfbWVzc2FnZV9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jl
c3VsdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgibWVzc2FnZSIpLCB2YWx1ZSk7CisgICAgICAg
ICAgICByZXR1cm4gY2FzdFN0YXRlPE1lc3NhZ2VTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAg
ICBCdWlsZGVyPFNUQVRFIHwgQ29kZVNldD4mIHNldENvZGUoaW50IHZhbHVlKQorICAgICAgICB7
CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQ29kZVNldCksIHByb3BlcnR5
X2NvZGVfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcihBU0NJ
SUxpdGVyYWwoImNvZGUiKSwgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxD
b2RlU2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgb3BlcmF0b3IgUmVmUHRyPEVycm9yPiYg
KCkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmll
bGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KHNpemVvZihFcnJvcikgPT0gc2l6ZW9mKEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0KSwgY2Fu
bm90X2Nhc3QpOworICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxF
cnJvcj4qPigmbV9yZXN1bHQpOworICAgICAgICB9CisKKyAgICAgICAgUGFzc1JlZlB0cjxFcnJv
cj4gcmVsZWFzZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBSZWZQdHI8RXJyb3I+
KCp0aGlzKS5yZWxlYXNlKCk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgLyoKKyAgICAgKiBT
eW50aGV0aWMgY29uc3RydWN0b3I6CisgICAgICogUmVmUHRyPEVycm9yPiByZXN1bHQgPSBFcnJv
cjo6Y3JlYXRlKCkKKyAgICAgKiAgICAgLnNldE1lc3NhZ2UoLi4uKQorICAgICAqICAgICAuc2V0
Q29kZSguLi4pOworICAgICAqLworICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVh
dGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEluc3BlY3Rv
cjo6SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7CisgICAgfQorICAgIHR5cGVkZWYgSW5zcGVj
dG9yOjpUeXBlQnVpbGRlcjo6U3RydWN0SXRlbVRyYWl0cyBJdGVtVHJhaXRzOworfTsKKworfSAv
LyBEYXRhYmFzZQorI2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0UpCisKKworCit9IC8vIG5h
bWVzcGFjZSBUeXBlQnVpbGRlcgorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlm
IC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyNlbmRpZiAvLyAhZGVmaW5lZChJbnNwZWN0b3JUZXN0
VHlwZUJ1aWxkZXJzX2gpCisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMu
aAorCisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5jcHAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1
dGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JUZXN0VHlwZUJ1aWxk
ZXJzLmgiCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworbmFtZXNwYWNlIFR5cGVCdWlsZGVy
IHsKKworc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGVudW1fY29uc3RhbnRfdmFsdWVzW10gPSB7
CisgICAgInJlZCIsCisgICAgImdyZWVuIiwKKyAgICAiYmx1ZSIsCisgICAgImN5YW4iLAorICAg
ICJtYWdlbnRhIiwKKyAgICAieWVsbG93IiwKKyAgICAiYmxhY2siLAorfTsKKworU3RyaW5nIGdl
dFRlc3RFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSkgeworICAgIHJldHVybiBlbnVtX2NvbnN0
YW50X3ZhbHVlc1tjb2RlXTsKK30KKworCisKK30gLy8gbmFtZXNwYWNlIFR5cGVCdWlsZGVyCisK
K30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikK
KworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmNwcApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVk
L2NvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uLXJlc3Vs
dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3Rl
ZC9jb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbi1yZXN1
bHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNDc1OWUyMWZhMzExMjFiNWMwNjRkMmE0YWY3ZGI1MzcyODY1NGM5Ngot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9leHBlY3RlZC9jb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFt
ZXRlcnMuanNvbi1yZXN1bHQKQEAgLTAsMCArMSw2NDUgQEAKKyMjIyBCZWdpbiBGaWxlOiBJbnNw
ZWN0b3JUZXN0QmFja2VuZENvbW1hbmRzLmpzCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCBmcm9tIGNvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29u
CisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvY29kZWdlbi9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworLy8g
RGF0YWJhc2UuCitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRW51bSgiRGF0YWJhc2UuUHJpbWFy
eUNvbG9ycyIsIHtSZWQ6ICJyZWQiLCBHcmVlbjogImdyZWVuIiwgQmx1ZTogImJsdWUifSk7CitJ
bnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiRGF0YWJhc2UuZXhlY3V0ZUFsbE9wdGlv
bmFsUGFyYW1ldGVycyIsIFt7Im5hbWUiOiAiY29sdW1uTmFtZXMiLCAidHlwZSI6ICJvYmplY3Qi
LCAib3B0aW9uYWwiOiB0cnVlfSwgeyJuYW1lIjogIm5vdGVzIiwgInR5cGUiOiAic3RyaW5nIiwg
Im9wdGlvbmFsIjogdHJ1ZX0sIHsibmFtZSI6ICJ0aW1lc3RhbXAiLCAidHlwZSI6ICJudW1iZXIi
LCAib3B0aW9uYWwiOiB0cnVlfSwgeyJuYW1lIjogInZhbHVlcyIsICJ0eXBlIjogIm9iamVjdCIs
ICJvcHRpb25hbCI6IHRydWV9LCB7Im5hbWUiOiAicGF5bG9hZCIsICJ0eXBlIjogIm9iamVjdCIs
ICJvcHRpb25hbCI6IHRydWV9LCB7Im5hbWUiOiAiZGF0YWJhc2VJZCIsICJ0eXBlIjogIm51bWJl
ciIsICJvcHRpb25hbCI6IHRydWV9LCB7Im5hbWUiOiAic3FsRXJyb3IiLCAidHlwZSI6ICJvYmpl
Y3QiLCAib3B0aW9uYWwiOiB0cnVlfSwgeyJuYW1lIjogInNjcmVlbkNvbG9yIiwgInR5cGUiOiAi
c3RyaW5nIiwgIm9wdGlvbmFsIjogdHJ1ZX0sIHsibmFtZSI6ICJwcmludENvbG9yIiwgInR5cGUi
OiAic3RyaW5nIiwgIm9wdGlvbmFsIjogdHJ1ZX1dLCBbImNvbHVtbk5hbWVzIiwgIm5vdGVzIiwg
InRpbWVzdGFtcCIsICJ2YWx1ZXMiLCAicGF5bG9hZCIsICJkYXRhYmFzZUlkIiwgInNxbEVycm9y
IiwgInNjcmVlbkNvbG9yIiwgInByaW50Q29sb3IiXSk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lz
dGVyQ29tbWFuZCgiRGF0YWJhc2UuZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzIiwgW3sibmFt
ZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogIm9iamVjdCIsICJvcHRpb25hbCI6IGZhbHNlfSwg
eyJuYW1lIjogIm5vdGVzIiwgInR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjogZmFsc2V9LCB7
Im5hbWUiOiAidGltZXN0YW1wIiwgInR5cGUiOiAibnVtYmVyIiwgIm9wdGlvbmFsIjogZmFsc2V9
LCB7Im5hbWUiOiAidmFsdWVzIiwgInR5cGUiOiAib2JqZWN0IiwgIm9wdGlvbmFsIjogZmFsc2V9
LCB7Im5hbWUiOiAicGF5bG9hZCIsICJ0eXBlIjogIm9iamVjdCIsICJvcHRpb25hbCI6IGZhbHNl
fSwgeyJuYW1lIjogImRhdGFiYXNlSWQiLCAidHlwZSI6ICJudW1iZXIiLCAib3B0aW9uYWwiOiBm
YWxzZX0sIHsibmFtZSI6ICJzcWxFcnJvciIsICJ0eXBlIjogIm9iamVjdCIsICJvcHRpb25hbCI6
IGZhbHNlfSwgeyJuYW1lIjogInNjcmVlbkNvbG9yIiwgInR5cGUiOiAic3RyaW5nIiwgIm9wdGlv
bmFsIjogZmFsc2V9LCB7Im5hbWUiOiAicHJpbnRDb2xvciIsICJ0eXBlIjogInN0cmluZyIsICJv
cHRpb25hbCI6IGZhbHNlfV0sIFsiY29sdW1uTmFtZXMiLCAibm90ZXMiLCAidGltZXN0YW1wIiwg
InZhbHVlcyIsICJwYXlsb2FkIiwgImRhdGFiYXNlSWQiLCAic3FsRXJyb3IiLCAic2NyZWVuQ29s
b3IiLCAicHJpbnRDb2xvciJdKTsKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdEJhY2tlbmRD
b21tYW5kcy5qcworCisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRj
aGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgt
b3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2lmbmRlZiBJbnNwZWN0b3JUZXN0QmFj
a2VuZERpc3BhdGNoZXJzX2gKKyNkZWZpbmUgSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVy
c19oCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSAiSW5zcGVjdG9yVGVzdFR5
cGVCdWlsZGVycy5oIgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0eXBlZGVmIFN0cmluZyBF
cnJvclN0cmluZzsKKworI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCitjbGFzcyBJbnNwZWN0b3JE
YXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7CitwdWJsaWM6CisgICAgLy8gTmFtZWQg
YWZ0ZXIgcGFyYW1ldGVyICdzY3JlZW5Db2xvcicgd2hpbGUgZ2VuZXJhdGluZyBjb21tYW5kL2V2
ZW50IGV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMuCisgICAgZW51bSBjbGFzcyBTY3JlZW5D
b2xvciB7CisgICAgICAgIFJlZCA9IDAsCisgICAgICAgIEdyZWVuID0gMSwKKyAgICAgICAgQmx1
ZSA9IDIsCisgICAgfTsgLy8gZW51bSBjbGFzcyBTY3JlZW5Db2xvcgorICAgIC8vIE5hbWVkIGFm
dGVyIHBhcmFtZXRlciAncHJpbnRDb2xvcicgd2hpbGUgZ2VuZXJhdGluZyBjb21tYW5kL2V2ZW50
IGV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMuCisgICAgZW51bSBjbGFzcyBQcmludENvbG9y
IHsKKyAgICAgICAgQ3lhbiA9IDMsCisgICAgICAgIE1hZ2VudGEgPSA0LAorICAgICAgICBZZWxs
b3cgPSA1LAorICAgICAgICBCbGFjayA9IDYsCisgICAgfTsgLy8gZW51bSBjbGFzcyBQcmludENv
bG9yCisgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMoRXJyb3JT
dHJpbmcqLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheT4qIGluX2NvbHVt
bk5hbWVzLCBjb25zdCBTdHJpbmcqIGluX25vdGVzLCBjb25zdCBkb3VibGUqIGluX3RpbWVzdGFt
cCwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiogaW5fdmFsdWVzLCBj
b25zdCBJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlKiBpbl9wYXlsb2FkLCBjb25zdCBpbnQqIGlu
X2RhdGFiYXNlSWQsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4qIGlu
X3NxbEVycm9yLCBjb25zdCBTdHJpbmcqIGluX3NjcmVlbkNvbG9yLCBjb25zdCBTdHJpbmcqIGlu
X3ByaW50Q29sb3IsIFJlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheTxTdHJpbmc+
PiYgb3B0X291dF9jb2x1bW5OYW1lcywgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6T3B0T3V0cHV0
PFN0cmluZz4qIG9wdF9vdXRfbm90ZXMsIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6Ok9wdE91dHB1
dDxkb3VibGU+KiBvcHRfb3V0X3RpbWVzdGFtcCwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6T3B0
T3V0cHV0PEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0Piogb3B0X291dF92YWx1ZXMsIEluc3Bl
Y3Rvcjo6VHlwZUJ1aWxkZXI6Ok9wdE91dHB1dDxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiog
b3B0X291dF9wYXlsb2FkLCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8aW50Piog
b3B0X291dF9kYXRhYmFzZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6RGF0YWJh
c2U6OkVycm9yPiYgb3B0X291dF9zcWxFcnJvciwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6RGF0
YWJhc2U6OlByaW1hcnlDb2xvcnMqIG9wdF9vdXRfc2NyZWVuQ29sb3IsIEluc3BlY3RvckRhdGFi
YXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQcmludENvbG9yKiBvcHRfb3V0X3ByaW50Q29s
b3IpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKEVy
cm9yU3RyaW5nKiwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXk+JiBpbl9j
b2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBpbl9ub3RlcywgZG91YmxlIGluX3RpbWVzdGFtcCwg
Y29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYgaW5fdmFsdWVzLCBJbnNw
ZWN0b3I6Okluc3BlY3RvclZhbHVlIGluX3BheWxvYWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25z
dCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+JiBpbl9zcWxFcnJvciwgY29uc3Qg
U3RyaW5nJiBpbl9zY3JlZW5Db2xvciwgY29uc3QgU3RyaW5nJiBpbl9wcmludENvbG9yLCBSZWZQ
dHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk8U3RyaW5nPj4mIG91dF9jb2x1bW5OYW1l
cywgU3RyaW5nKiBvdXRfbm90ZXMsIGRvdWJsZSogb3V0X3RpbWVzdGFtcCwgSW5zcGVjdG9yOjpJ
bnNwZWN0b3JPYmplY3QqIG91dF92YWx1ZXMsIEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUqIG91
dF9wYXlsb2FkLCBpbnQqIG91dF9kYXRhYmFzZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVp
bGRlcjo6RGF0YWJhc2U6OkVycm9yPiYgb3V0X3NxbEVycm9yLCBJbnNwZWN0b3I6OlR5cGVCdWls
ZGVyOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyogb3V0X3NjcmVlbkNvbG9yLCBJbnNwZWN0b3JE
YXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UHJpbnRDb2xvciogb3V0X3ByaW50Q29s
b3IpID0gMDsKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIH5JbnNwZWN0b3JEYXRhYmFzZUJhY2tl
bmREaXNwYXRjaGVySGFuZGxlcigpOworfTsKKyNlbmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNF
KQorCisjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKK2NsYXNzIEluc3BlY3RvckRhdGFiYXNlQmFj
a2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JTdXBwbGVt
ZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8
SW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEluc3BlY3Rvcjo6SW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXIqLCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRj
aGVySGFuZGxlciopOworICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaChsb25nIGNhbGxJZCwgY29u
c3QgU3RyaW5nJiBtZXRob2QsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+
IG1lc3NhZ2UpIG92ZXJyaWRlOworcHJpdmF0ZToKKyAgICB2b2lkIGV4ZWN1dGVBbGxPcHRpb25h
bFBhcmFtZXRlcnMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0
JiBtZXNzYWdlKTsKKyAgICB2b2lkIGV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhsb25nIGNh
bGxJZCwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpOworcHJpdmF0
ZToKKyAgICBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKEluc3BlY3Rvcjo6SW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXIqLCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRj
aGVySGFuZGxlciopOworICAgIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyKiBtX2FnZW50OworfTsKKyNlbmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQorCit9IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyNl
bmRpZiAvLyAhZGVmaW5lZChJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzX2gpCisjIyMg
RW5kIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4g
RmlsZTogSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIGZyb20gY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1w
YXJhbWV0ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5k
aW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yVGVzdEJh
Y2tlbmREaXNwYXRjaGVycy5oIgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUg
PGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4KKyNpbmNsdWRlIDxpbnNwZWN0
b3IvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCitu
YW1lc3BhY2UgSW5zcGVjdG9yIHsKKworI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCitJbnNwZWN0
b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6fkluc3BlY3RvckRhdGFiYXNlQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyKCkgeyB9CisjZW5kaWYgLy8gRU5BQkxFKFNRTF9EQVRBQkFT
RSkKKworI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCitQYXNzUmVmUHRyPEluc3BlY3RvckRhdGFi
YXNlQmFja2VuZERpc3BhdGNoZXI+IEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6
OmNyZWF0ZShJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIsIElu
c3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKK3sKKyAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIoYmFj
a2VuZERpc3BhdGNoZXIsIGFnZW50KSk7Cit9CisKK0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERp
c3BhdGNoZXI6Okluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIoSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyLCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tl
bmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCisgICAgOiBJbnNwZWN0b3JTdXBwbGVtZW50YWxC
YWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlcikKKyAgICAsIG1fYWdlbnQoYWdlbnQp
Cit7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRjaGVyRm9yRG9tYWlu
KEFTQ0lJTGl0ZXJhbCgiRGF0YWJhc2UiKSwgdGhpcyk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yRGF0
YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmlu
ZyYgbWV0aG9kLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbWVzc2FnZSkKK3sKKyAgICBS
ZWY8SW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7CisK
KyAgICBpZiAobWV0aG9kID09ICJleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzIikKKyAgICAg
ICAgZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhjYWxsSWQsICptZXNzYWdlLmdldCgpKTsK
KyAgICBlbHNlIGlmIChtZXRob2QgPT0gImV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyIpCisg
ICAgICAgIGV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhjYWxsSWQsICptZXNzYWdlLmdldCgp
KTsKKyAgICBlbHNlCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29s
RXJyb3IoJmNhbGxJZCwgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5k
LCBTdHJpbmcoIiciKSArICJEYXRhYmFzZSIgKyAnLicgKyBtZXRob2QgKyAiJyB3YXMgbm90IGZv
dW5kIik7Cit9CisKK3ZvaWQgSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhl
Y3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2Jq
ZWN0JiBtZXNzYWdlKQoreworICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvdG9jb2xFcnJv
cnMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gcGFyYW1zQ29udGFpbmVyID0gbWVzc2FnZS5nZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJwYXJh
bXMiKSk7CisgICAgSW5zcGVjdG9yT2JqZWN0KiBwYXJhbXNDb250YWluZXJQdHIgPSBwYXJhbXND
b250YWluZXIuZ2V0KCk7CisgICAgSW5zcGVjdG9yQXJyYXkqIHByb3RvY29sRXJyb3JzUHRyID0g
cHJvdG9jb2xFcnJvcnMuZ2V0KCk7CisgICAgYm9vbCBjb2x1bW5OYW1lc192YWx1ZUZvdW5kID0g
ZmFsc2U7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXk+IGluX2NvbHVtbk5h
bWVzID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldEFycmF5KHBhcmFtc0NvbnRhaW5l
clB0ciwgQVNDSUlMaXRlcmFsKCJjb2x1bW5OYW1lcyIpLCAmY29sdW1uTmFtZXNfdmFsdWVGb3Vu
ZCwgcHJvdG9jb2xFcnJvcnNQdHIpOworICAgIGJvb2wgbm90ZXNfdmFsdWVGb3VuZCA9IGZhbHNl
OworICAgIFN0cmluZyBpbl9ub3RlcyA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRT
dHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoIm5vdGVzIiksICZub3Rlc192
YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9yc1B0cik7CisgICAgYm9vbCB0aW1lc3RhbXBfdmFsdWVG
b3VuZCA9IGZhbHNlOworICAgIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6Ok9wdE91dHB1dDxkb3Vi
bGU+IGluX3RpbWVzdGFtcCA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXROdW1iZXIo
cGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoInRpbWVzdGFtcCIpLCAmdGltZXN0YW1w
X3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzUHRyKTsKKyAgICBib29sIHZhbHVlc192YWx1ZUZv
dW5kID0gZmFsc2U7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBpbl92
YWx1ZXMgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0T2JqZWN0KHBhcmFtc0NvbnRh
aW5lclB0ciwgQVNDSUlMaXRlcmFsKCJ2YWx1ZXMiKSwgJnZhbHVlc192YWx1ZUZvdW5kLCBwcm90
b2NvbEVycm9yc1B0cik7CisgICAgYm9vbCBwYXlsb2FkX3ZhbHVlRm91bmQgPSBmYWxzZTsKKyAg
ICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4gaW5fcGF5bG9hZCA9IEluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyOjpnZXRBbnkocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVy
YWwoInBheWxvYWQiKSwgJnBheWxvYWRfdmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJvcnNQdHIpOwor
ICAgIGJvb2wgZGF0YWJhc2VJZF92YWx1ZUZvdW5kID0gZmFsc2U7CisgICAgaW50IGluX2RhdGFi
YXNlSWQgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0SW50KHBhcmFtc0NvbnRhaW5l
clB0ciwgQVNDSUlMaXRlcmFsKCJkYXRhYmFzZUlkIiksICZkYXRhYmFzZUlkX3ZhbHVlRm91bmQs
IHByb3RvY29sRXJyb3JzUHRyKTsKKyAgICBib29sIHNxbEVycm9yX3ZhbHVlRm91bmQgPSBmYWxz
ZTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IGluX3NxbEVycm9yID0g
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldE9iamVjdChwYXJhbXNDb250YWluZXJQdHIs
IEFTQ0lJTGl0ZXJhbCgic3FsRXJyb3IiKSwgJnNxbEVycm9yX3ZhbHVlRm91bmQsIHByb3RvY29s
RXJyb3JzUHRyKTsKKyAgICBib29sIHNjcmVlbkNvbG9yX3ZhbHVlRm91bmQgPSBmYWxzZTsKKyAg
ICBTdHJpbmcgaW5fc2NyZWVuQ29sb3IgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0
U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJzY3JlZW5Db2xvciIpLCAm
c2NyZWVuQ29sb3JfdmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJvcnNQdHIpOworICAgIGJvb2wgcHJp
bnRDb2xvcl92YWx1ZUZvdW5kID0gZmFsc2U7CisgICAgU3RyaW5nIGluX3ByaW50Q29sb3IgPSBJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lclB0ciwg
QVNDSUlMaXRlcmFsKCJwcmludENvbG9yIiksICZwcmludENvbG9yX3ZhbHVlRm91bmQsIHByb3Rv
Y29sRXJyb3JzUHRyKTsKKyAgICBpZiAocHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7CisgICAg
ICAgIFN0cmluZyBlcnJvck1lc3NhZ2UgPSBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMg
b2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkRhdGFiYXNlLmV4ZWN1dGVBbGxP
cHRpb25hbFBhcmFtZXRlcnMiKTsKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0
UHJvdG9jb2xFcnJvcigmY2FsbElkLCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxp
ZFBhcmFtcywgZXJyb3JNZXNzYWdlLCBwcm90b2NvbEVycm9ycy5yZWxlYXNlKCkpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgRXJyb3JTdHJpbmcgZXJyb3I7CisgICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBS
ZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk8U3RyaW5nPj4gb3V0X2NvbHVtbk5h
bWVzOworICAgIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6Ok9wdE91dHB1dDxTdHJpbmc+IG91dF9u
b3RlczsKKyAgICBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpPcHRPdXRwdXQ8ZG91YmxlPiBvdXRf
dGltZXN0YW1wOworICAgIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6Ok9wdE91dHB1dDxJbnNwZWN0
b3I6Okluc3BlY3Rvck9iamVjdD4gb3V0X3ZhbHVlczsKKyAgICBJbnNwZWN0b3I6OlR5cGVCdWls
ZGVyOjpPcHRPdXRwdXQ8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4gb3V0X3BheWxvYWQ7Cisg
ICAgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6T3B0T3V0cHV0PEluc3BlY3Rvcjo6VHlwZUJ1aWxk
ZXI6OkRhdGFiYXNlOjpEYXRhYmFzZUlkPiBvdXRfZGF0YWJhc2VJZDsKKyAgICBSZWZQdHI8SW5z
cGVjdG9yOjpUeXBlQnVpbGRlcjo6RGF0YWJhc2U6OkVycm9yPiBvdXRfc3FsRXJyb3I7CisgICAg
SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMgb3V0X3NjcmVl
bkNvbG9yOworICAgIEluc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQ
cmludENvbG9yIG91dF9wcmludENvbG9yOworICAgIG1fYWdlbnQtPmV4ZWN1dGVBbGxPcHRpb25h
bFBhcmFtZXRlcnMoJmVycm9yLCBjb2x1bW5OYW1lc192YWx1ZUZvdW5kID8gJmluX2NvbHVtbk5h
bWVzIDogbnVsbHB0ciwgbm90ZXNfdmFsdWVGb3VuZCA/ICZpbl9ub3RlcyA6IG51bGxwdHIsIHRp
bWVzdGFtcF92YWx1ZUZvdW5kID8gJmluX3RpbWVzdGFtcCA6IG51bGxwdHIsIHZhbHVlc192YWx1
ZUZvdW5kID8gJmluX3ZhbHVlcyA6IG51bGxwdHIsIHBheWxvYWRfdmFsdWVGb3VuZCA/ICZpbl9w
YXlsb2FkIDogbnVsbHB0ciwgZGF0YWJhc2VJZF92YWx1ZUZvdW5kID8gJmluX2RhdGFiYXNlSWQg
OiBudWxscHRyLCBzcWxFcnJvcl92YWx1ZUZvdW5kID8gJmluX3NxbEVycm9yIDogbnVsbHB0ciwg
c2NyZWVuQ29sb3JfdmFsdWVGb3VuZCA/ICZpbl9zY3JlZW5Db2xvciA6IG51bGxwdHIsIHByaW50
Q29sb3JfdmFsdWVGb3VuZCA/ICZpbl9wcmludENvbG9yIDogbnVsbHB0ciwgb3V0X2NvbHVtbk5h
bWVzLCAmb3V0X25vdGVzLCAmb3V0X3RpbWVzdGFtcCwgb3V0X3ZhbHVlcywgJm91dF9wYXlsb2Fk
LCAmb3V0X2RhdGFiYXNlSWQsIG91dF9zcWxFcnJvciwgJm91dF9zY3JlZW5Db2xvciwgJm91dF9w
cmludENvbG9yKTsKKworICAgIGlmICghZXJyb3IubGVuZ3RoKCkpIHsKKyAgICAgICAgaWYgKG91
dF9jb2x1bW5OYW1lcykKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0QXJyYXkoQVNDSUlMaXRlcmFs
KCJjb2x1bW5OYW1lcyIpLCBvdXRfY29sdW1uTmFtZXMpOworICAgICAgICBpZiAob3V0X25vdGVz
LmlzQXNzaWduZWQoKSkKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJh
bCgibm90ZXMiKSwgb3V0X25vdGVzLmdldFZhbHVlKCkpOworICAgICAgICBpZiAob3V0X3RpbWVz
dGFtcC5pc0Fzc2lnbmVkKCkpCisgICAgICAgICAgICByZXN1bHQtPnNldE51bWJlcihBU0NJSUxp
dGVyYWwoInRpbWVzdGFtcCIpLCBvdXRfdGltZXN0YW1wLmdldFZhbHVlKCkpOworICAgICAgICBp
ZiAob3V0X3ZhbHVlcy5pc0Fzc2lnbmVkKCkpCisgICAgICAgICAgICByZXN1bHQtPnNldE9iamVj
dChBU0NJSUxpdGVyYWwoInZhbHVlcyIpLCBvdXRfdmFsdWVzLmdldFZhbHVlKCkpOworICAgICAg
ICBpZiAob3V0X3BheWxvYWQuaXNBc3NpZ25lZCgpKQorICAgICAgICAgICAgcmVzdWx0LT5zZXRW
YWx1ZShBU0NJSUxpdGVyYWwoInBheWxvYWQiKSwgb3V0X3BheWxvYWQuZ2V0VmFsdWUoKSk7Cisg
ICAgICAgIGlmIChvdXRfZGF0YWJhc2VJZC5pc0Fzc2lnbmVkKCkpCisgICAgICAgICAgICByZXN1
bHQtPnNldE51bWJlcihBU0NJSUxpdGVyYWwoImRhdGFiYXNlSWQiKSwgb3V0X2RhdGFiYXNlSWQu
Z2V0VmFsdWUoKSk7CisgICAgICAgIGlmIChvdXRfc3FsRXJyb3IpCisgICAgICAgICAgICByZXN1
bHQtPnNldE9iamVjdChBU0NJSUxpdGVyYWwoInNxbEVycm9yIiksIG91dF9zcWxFcnJvcik7Cisg
ICAgICAgIGlmIChvdXRfc2NyZWVuQ29sb3IuaXNBc3NpZ25lZCgpKQorICAgICAgICAgICAgcmVz
dWx0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJzY3JlZW5Db2xvciIpLCBvdXRfc2NyZWVuQ29s
b3IuZ2V0VmFsdWUoKSk7CisgICAgICAgIGlmIChvdXRfcHJpbnRDb2xvci5pc0Fzc2lnbmVkKCkp
CisgICAgICAgICAgICByZXN1bHQtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInByaW50Q29sb3Ii
KSwgb3V0X3ByaW50Q29sb3IuZ2V0VmFsdWUoKSk7CisgICAgfQorICAgIG1fYmFja2VuZERpc3Bh
dGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIGVycm9yKTsKK30K
Kwordm9pZCBJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlTm9PcHRp
b25hbFBhcmFtZXRlcnMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2Fn
ZSkKK3sKKyAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0gSW5zcGVj
dG9yQXJyYXk6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0Nv
bnRhaW5lciA9IG1lc3NhZ2UuZ2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicGFyYW1zIikpOworICAg
IEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFpbmVyLmdl
dCgpOworICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3RvY29sRXJy
b3JzLmdldCgpOworICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5PiBpbl9jb2x1
bW5OYW1lcyA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRBcnJheShwYXJhbXNDb250
YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgiY29sdW1uTmFtZXMiKSwgbnVsbHB0ciwgcHJvdG9jb2xF
cnJvcnNQdHIpOworICAgIFN0cmluZyBpbl9ub3RlcyA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyOjpnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJSUxpdGVyYWwoIm5vdGVzIiks
IG51bGxwdHIsIHByb3RvY29sRXJyb3JzUHRyKTsKKyAgICBkb3VibGUgaW5fdGltZXN0YW1wID0g
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldE51bWJlcihwYXJhbXNDb250YWluZXJQdHIs
IEFTQ0lJTGl0ZXJhbCgidGltZXN0YW1wIiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzUHRyKTsK
KyAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IGluX3ZhbHVlcyA9IEluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRPYmplY3QocGFyYW1zQ29udGFpbmVyUHRyLCBBU0NJ
SUxpdGVyYWwoInZhbHVlcyIpLCBudWxscHRyLCBwcm90b2NvbEVycm9yc1B0cik7CisgICAgUmVm
UHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+IGluX3BheWxvYWQgPSBJbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlcjo6Z2V0QW55KHBhcmFtc0NvbnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJw
YXlsb2FkIiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzUHRyKTsKKyAgICBpbnQgaW5fZGF0YWJh
c2VJZCA9IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpnZXRJbnQocGFyYW1zQ29udGFpbmVy
UHRyLCBBU0NJSUxpdGVyYWwoImRhdGFiYXNlSWQiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnNQ
dHIpOworICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gaW5fc3FsRXJyb3Ig
PSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0T2JqZWN0KHBhcmFtc0NvbnRhaW5lclB0
ciwgQVNDSUlMaXRlcmFsKCJzcWxFcnJvciIpLCBudWxscHRyLCBwcm90b2NvbEVycm9yc1B0cik7
CisgICAgU3RyaW5nIGluX3NjcmVlbkNvbG9yID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6
OmdldFN0cmluZyhwYXJhbXNDb250YWluZXJQdHIsIEFTQ0lJTGl0ZXJhbCgic2NyZWVuQ29sb3Ii
KSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnNQdHIpOworICAgIFN0cmluZyBpbl9wcmludENvbG9y
ID0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldFN0cmluZyhwYXJhbXNDb250YWluZXJQ
dHIsIEFTQ0lJTGl0ZXJhbCgicHJpbnRDb2xvciIpLCBudWxscHRyLCBwcm90b2NvbEVycm9yc1B0
cik7CisgICAgaWYgKHByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgeworICAgICAgICBTdHJpbmcg
ZXJyb3JNZXNzYWdlID0gU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAn
JXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJEYXRhYmFzZS5leGVjdXRlTm9PcHRpb25hbFBhcmFt
ZXRlcnMiKTsKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJv
cigmY2FsbElkLCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFtcywgZXJy
b3JNZXNzYWdlLCBwcm90b2NvbEVycm9ycy5yZWxlYXNlKCkpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgRXJyb3JTdHJpbmcgZXJyb3I7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8SW5zcGVj
dG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk8U3RyaW5nPj4gb3V0X2NvbHVtbk5hbWVzOworICAgIFN0
cmluZyBvdXRfbm90ZXM7CisgICAgZG91YmxlIG91dF90aW1lc3RhbXA7CisgICAgSW5zcGVjdG9y
OjpJbnNwZWN0b3JPYmplY3Qgb3V0X3ZhbHVlczsKKyAgICBJbnNwZWN0b3I6Okluc3BlY3RvclZh
bHVlIG91dF9wYXlsb2FkOworICAgIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkRhdGFiYXNlOjpE
YXRhYmFzZUlkIG91dF9kYXRhYmFzZUlkOworICAgIFJlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWls
ZGVyOjpEYXRhYmFzZTo6RXJyb3I+IG91dF9zcWxFcnJvcjsKKyAgICBJbnNwZWN0b3I6OlR5cGVC
dWlsZGVyOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyBvdXRfc2NyZWVuQ29sb3I7CisgICAgSW5z
cGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3Igb3V0X3By
aW50Q29sb3I7CisgICAgbV9hZ2VudC0+ZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKCZlcnJv
ciwgaW5fY29sdW1uTmFtZXMsIGluX25vdGVzLCBpbl90aW1lc3RhbXAsIGluX3ZhbHVlcywgaW5f
cGF5bG9hZCwgaW5fZGF0YWJhc2VJZCwgaW5fc3FsRXJyb3IsIGluX3NjcmVlbkNvbG9yLCBpbl9w
cmludENvbG9yLCBvdXRfY29sdW1uTmFtZXMsICZvdXRfbm90ZXMsICZvdXRfdGltZXN0YW1wLCBv
dXRfdmFsdWVzLCAmb3V0X3BheWxvYWQsICZvdXRfZGF0YWJhc2VJZCwgb3V0X3NxbEVycm9yLCAm
b3V0X3NjcmVlbkNvbG9yLCAmb3V0X3ByaW50Q29sb3IpOworCisgICAgaWYgKCFlcnJvci5sZW5n
dGgoKSkgeworICAgICAgICByZXN1bHQtPnNldEFycmF5KEFTQ0lJTGl0ZXJhbCgiY29sdW1uTmFt
ZXMiKSwgb3V0X2NvbHVtbk5hbWVzKTsKKyAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoQVNDSUlM
aXRlcmFsKCJub3RlcyIpLCBvdXRfbm90ZXMpOworICAgICAgICByZXN1bHQtPnNldE51bWJlcihB
U0NJSUxpdGVyYWwoInRpbWVzdGFtcCIpLCBvdXRfdGltZXN0YW1wKTsKKyAgICAgICAgcmVzdWx0
LT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJ2YWx1ZXMiKSwgb3V0X3ZhbHVlcyk7CisgICAgICAg
IHJlc3VsdC0+c2V0VmFsdWUoQVNDSUlMaXRlcmFsKCJwYXlsb2FkIiksIG91dF9wYXlsb2FkKTsK
KyAgICAgICAgcmVzdWx0LT5zZXROdW1iZXIoQVNDSUlMaXRlcmFsKCJkYXRhYmFzZUlkIiksIG91
dF9kYXRhYmFzZUlkKTsKKyAgICAgICAgcmVzdWx0LT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJz
cWxFcnJvciIpLCBvdXRfc3FsRXJyb3IpOworICAgICAgICByZXN1bHQtPnNldFN0cmluZyhBU0NJ
SUxpdGVyYWwoInNjcmVlbkNvbG9yIiksIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OmdldFRlc3RF
bnVtQ29uc3RhbnRWYWx1ZShvdXRfc2NyZWVuQ29sb3IpKTsKKyAgICAgICAgcmVzdWx0LT5zZXRT
dHJpbmcoQVNDSUlMaXRlcmFsKCJwcmludENvbG9yIiksIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6
OmdldFRlc3RFbnVtQ29uc3RhbnRWYWx1ZShvdXRfcHJpbnRDb2xvcikpOworICAgIH0KKyAgICBt
X2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVsZWFzZSgp
LCBlcnJvcik7Cit9CisjZW5kaWYgLy8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKKworfSAvLyBuYW1l
c3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorCisjIyMgRW5k
IEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBG
aWxlOiBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFy
YW1ldGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKKworI2lmbmRlZiBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVyc19oCisjZGVm
aW5lIEluc3BlY3RvclRlc3RGcm9udGVuZERpc3BhdGNoZXJzX2gKKworI2lmIEVOQUJMRShJTlNQ
RUNUT1IpCisKKyNpbmNsdWRlICJJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmgiCisjaW5jbHVk
ZSA8aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oPgorI2luY2x1ZGUgPGluc3Bl
Y3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwor
CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RP
UikKKworI2VuZGlmIC8vICFkZWZpbmVkKEluc3BlY3RvclRlc3RGcm9udGVuZERpc3BhdGNoZXJz
X2gpCisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKwor
IyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQg
aXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9wdGlvbmFsLWNh
bGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnNw
ZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikK
KworI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7
CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RP
UikKKworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAK
KworIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuaAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBjb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0
dXJuLXBhcmFtZXRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5CisKKyNpZm5kZWYgSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVyc19oCisjZGVm
aW5lIEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnNfaAorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikK
KworI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JKU1R5cGVCdWlsZGVycy5oPgorI2luY2x1
ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JUeXBlQnVpbGRlci5oPgorI2luY2x1ZGUgPHd0Zi9Bc3Nl
cnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKworbmFtZXNwYWNlIEluc3Bl
Y3RvciB7CisKKworCituYW1lc3BhY2UgVHlwZUJ1aWxkZXIgeworCisvLyBGb3J3YXJkIGRlY2xh
cmF0aW9ucy4KKyNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQorbmFtZXNwYWNlIERhdGFiYXNlIHsK
K2NsYXNzIEVycm9yOworZW51bSBjbGFzcyBQcmltYXJ5Q29sb3JzOworfSAvLyBEYXRhYmFzZQor
I2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0UpCisvLyBFbmQgb2YgZm9yd2FyZCBkZWNsYXJh
dGlvbnMuCisKKworLy8gVHlwZWRlZnMuCisjaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKK25hbWVz
cGFjZSBEYXRhYmFzZSB7CisvKiBVbmlxdWUgaWRlbnRpZmllciBvZiBEYXRhYmFzZSBvYmplY3Qu
ICovCit0eXBlZGVmIGludCBEYXRhYmFzZUlkOworfSAvLyBEYXRhYmFzZQorI2VuZGlmIC8vIEVO
QUJMRShTUUxfREFUQUJBU0UpCisvLyBFbmQgb2YgdHlwZWRlZnMuCisKK1N0cmluZyBnZXRUZXN0
RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBTdHJp
bmcgZ2V0VGVzdEVudW1Db25zdGFudFZhbHVlKFQgZW51bVZhbHVlKQoreworICAgIHJldHVybiBn
ZXRUZXN0RW51bUNvbnN0YW50VmFsdWUoc3RhdGljX2Nhc3Q8aW50PihlbnVtVmFsdWUpKTsKK30K
KworI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCituYW1lc3BhY2UgRGF0YWJhc2UgeworLyogICov
CitlbnVtIGNsYXNzIFByaW1hcnlDb2xvcnMgeworICAgIFJlZCA9IDAsCisgICAgR3JlZW4gPSAx
LAorICAgIEJsdWUgPSAyLAorfTsgLy8gZW51bSBjbGFzcyBQcmltYXJ5Q29sb3JzCisvKiBEYXRh
YmFzZSBlcnJvci4gKi8KK2NsYXNzIEVycm9yIDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9y
T2JqZWN0QmFzZSB7CitwdWJsaWM6CisgICAgZW51bSB7CisgICAgICAgIE5vRmllbGRzU2V0ID0g
MCwKKyAgICAgICAgTWVzc2FnZVNldCA9IDEgPDwgMCwKKyAgICAgICAgQ29kZVNldCA9IDEgPDwg
MSwKKyAgICAgICAgQWxsRmllbGRzU2V0ID0gKE1lc3NhZ2VTZXQgfCBDb2RlU2V0KQorICAgIH07
CisKKyAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CisgICAgY2xhc3MgQnVpbGRlciB7CisgICAgcHJp
dmF0ZToKKyAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3Vs
dDsKKworICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBj
YXN0U3RhdGUoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nh
c3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CisgICAgICAgIH0KKworICAgICAgICBC
dWlsZGVyKFBhc3NSZWZQdHI8LypFcnJvciovSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IHB0
cikKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVs
ZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CisgICAgICAgICAgICBt
X3Jlc3VsdCA9IHB0cjsKKyAgICAgICAgfQorICAgICAgICBmcmllbmQgY2xhc3MgRXJyb3I7Cisg
ICAgcHVibGljOgorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBNZXNzYWdlU2V0PiYgc2V0TWVz
c2FnZShjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxF
X0FTU0VSVCghKFNUQVRFICYgTWVzc2FnZVNldCksIHByb3BlcnR5X21lc3NhZ2VfYWxyZWFkeV9z
ZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoIm1lc3Nh
Z2UiKSwgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxNZXNzYWdlU2V0Pigp
OworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IENvZGVTZXQ+JiBzZXRDb2Rl
KGludCB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFU
RSAmIENvZGVTZXQpLCBwcm9wZXJ0eV9jb2RlX2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1f
cmVzdWx0LT5zZXROdW1iZXIoQVNDSUlMaXRlcmFsKCJjb2RlIiksIHZhbHVlKTsKKyAgICAgICAg
ICAgIHJldHVybiBjYXN0U3RhdGU8Q29kZVNldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIG9w
ZXJhdG9yIFJlZlB0cjxFcnJvcj4mICgpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CisgICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoRXJyb3IpID09IHNpemVvZihJbnNwZWN0b3I6
Okluc3BlY3Rvck9iamVjdCksIGNhbm5vdF9jYXN0KTsKKyAgICAgICAgICAgIHJldHVybiAqcmVp
bnRlcnByZXRfY2FzdDxSZWZQdHI8RXJyb3I+Kj4oJm1fcmVzdWx0KTsKKyAgICAgICAgfQorCisg
ICAgICAgIFBhc3NSZWZQdHI8RXJyb3I+IHJlbGVhc2UoKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gUmVmUHRyPEVycm9yPigqdGhpcykucmVsZWFzZSgpOworICAgICAgICB9CisgICAg
fTsKKworICAgIC8qCisgICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgorICAgICAqIFJlZlB0
cjxFcnJvcj4gcmVzdWx0ID0gRXJyb3I6OmNyZWF0ZSgpCisgICAgICogICAgIC5zZXRNZXNzYWdl
KC4uLikKKyAgICAgKiAgICAgLnNldENvZGUoLi4uKTsKKyAgICAgKi8KKyAgICBzdGF0aWMgQnVp
bGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBCdWlsZGVy
PE5vRmllbGRzU2V0PihJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkpOworICAg
IH0KKyAgICB0eXBlZGVmIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlN0cnVjdEl0ZW1UcmFpdHMg
SXRlbVRyYWl0czsKK307CisKK30gLy8gRGF0YWJhc2UKKyNlbmRpZiAvLyBFTkFCTEUoU1FMX0RB
VEFCQVNFKQorCisKKworfSAvLyBuYW1lc3BhY2UgVHlwZUJ1aWxkZXIKKworfSAvLyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorCisjZW5kaWYgLy8g
IWRlZmluZWQoSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVyc19oKQorIyMjIEVuZCBGaWxlOiBJbnNw
ZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RU
eXBlQnVpbGRlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGNvbW1h
bmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuaCIKKworI2lmIEVOQUJM
RShJTlNQRUNUT1IpCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFj
ZSBJbnNwZWN0b3IgeworCituYW1lc3BhY2UgVHlwZUJ1aWxkZXIgeworCitzdGF0aWMgY29uc3Qg
Y2hhciogY29uc3QgZW51bV9jb25zdGFudF92YWx1ZXNbXSA9IHsKKyAgICAicmVkIiwKKyAgICAi
Z3JlZW4iLAorICAgICJibHVlIiwKKyAgICAiY3lhbiIsCisgICAgIm1hZ2VudGEiLAorICAgICJ5
ZWxsb3ciLAorICAgICJibGFjayIsCit9OworCitTdHJpbmcgZ2V0VGVzdEVudW1Db25zdGFudFZh
bHVlKGludCBjb2RlKSB7CisgICAgcmV0dXJuIGVudW1fY29uc3RhbnRfdmFsdWVzW2NvZGVdOwor
fQorCisKKworfSAvLyBuYW1lc3BhY2UgVHlwZUJ1aWxkZXIKKworfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorCisjIyMgRW5kIEZpbGU6IElu
c3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZG9tYWlucy13aXRoLXZhcnlp
bmctY29tbWFuZC1zaXplcy5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9kb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5k
LXNpemVzLmpzb24tcmVzdWx0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg0ZjE0YjMxZjk0ZmVkZmVlMjRhOTFlNGEw
MmJhYTViOThjNzgzMDUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZG9tYWlucy13aXRoLXZhcnlpbmctY29t
bWFuZC1zaXplcy5qc29uLXJlc3VsdApAQCAtMCwwICsxLDU2NiBAQAorIyMjIEJlZ2luIEZpbGU6
IEluc3BlY3RvclRlc3RCYWNrZW5kQ29tbWFuZHMuanMKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
MywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCisvLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29k
ZWdlbi9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworLy8gTmV0d29y
azEuCitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiTmV0d29yazEubG9hZFJlc291
cmNlMSIsIFtdLCBbXSk7CisKKy8vIE5ldHdvcmszLgorSW5zcGVjdG9yQmFja2VuZC5yZWdpc3Rl
ckNvbW1hbmQoIk5ldHdvcmszLmxvYWRSZXNvdXJjZTEiLCBbXSwgW10pOworSW5zcGVjdG9yQmFj
a2VuZC5yZWdpc3RlckNvbW1hbmQoIk5ldHdvcmszLmxvYWRSZXNvdXJjZTIiLCBbXSwgW10pOwor
SW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIk5ldHdvcmszLmxvYWRSZXNvdXJjZTMi
LCBbXSwgW10pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIk5ldHdvcmszLmxv
YWRSZXNvdXJjZTQiLCBbXSwgW10pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQo
Ik5ldHdvcmszLmxvYWRSZXNvdXJjZTUiLCBbXSwgW10pOworSW5zcGVjdG9yQmFja2VuZC5yZWdp
c3RlckNvbW1hbmQoIk5ldHdvcmszLmxvYWRSZXNvdXJjZTYiLCBbXSwgW10pOworSW5zcGVjdG9y
QmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIk5ldHdvcmszLmxvYWRSZXNvdXJjZTciLCBbXSwgW10p
OworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0QmFja2VuZENvbW1hbmRzLmpzCisKKyMjIyBC
ZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXpl
cy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkK
KworI2lmbmRlZiBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzX2gKKyNkZWZpbmUgSW5z
cGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVyc19oCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQor
CisjaW5jbHVkZSAiSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5oIgorI2luY2x1ZGUgPGluc3Bl
Y3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVm
UHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNw
ZWN0b3IgeworCit0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKworY2xhc3MgSW5zcGVjdG9y
TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgeworcHVibGljOgorICAgIHZpcnR1YWwg
dm9pZCBsb2FkUmVzb3VyY2UxKEVycm9yU3RyaW5nKikgPSAwOworcHJvdGVjdGVkOgorICAgIHZp
cnR1YWwgfkluc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCk7Cit9Owor
CitjbGFzcyBJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7CitwdWJs
aWM6CisgICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTEoRXJyb3JTdHJpbmcqKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTIoRXJyb3JTdHJpbmcqKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIGxvYWRSZXNvdXJjZTMoRXJyb3JTdHJpbmcqKSA9IDA7CisgICAgdmlydHVhbCB2
b2lkIGxvYWRSZXNvdXJjZTQoRXJyb3JTdHJpbmcqKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGxv
YWRSZXNvdXJjZTUoRXJyb3JTdHJpbmcqKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGxvYWRSZXNv
dXJjZTYoRXJyb3JTdHJpbmcqKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTco
RXJyb3JTdHJpbmcqKSA9IDA7Citwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB+SW5zcGVjdG9yTmV0
d29yazNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKTsKK307CisKK2NsYXNzIEluc3BlY3Rvck5l
dHdvcmsxQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0
b3JTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgc3RhdGljIFBh
c3NSZWZQdHI8SW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqLCBJbnNwZWN0b3JOZXR3b3JrMUJhY2tl
bmREaXNwYXRjaGVySGFuZGxlciopOworICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaChsb25nIGNh
bGxJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0
b3JPYmplY3Q+IG1lc3NhZ2UpIG92ZXJyaWRlOworcHJpdmF0ZToKKyAgICB2b2lkIGxvYWRSZXNv
dXJjZTEobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0JiBtZXNz
YWdlKTsKK3ByaXZhdGU6CisgICAgSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcihJ
bnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiwgSW5zcGVjdG9yTmV0d29yazFC
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKKyAgICBJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmRE
aXNwYXRjaGVySGFuZGxlciogbV9hZ2VudDsKK307CisKK2NsYXNzIEluc3BlY3Rvck5ldHdvcmsz
QmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JTdXBw
bGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEluc3BlY3Rvcjo6
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqLCBJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNw
YXRjaGVySGFuZGxlciopOworICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaChsb25nIGNhbGxJZCwg
Y29uc3QgU3RyaW5nJiBtZXRob2QsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmpl
Y3Q+IG1lc3NhZ2UpIG92ZXJyaWRlOworcHJpdmF0ZToKKyAgICB2b2lkIGxvYWRSZXNvdXJjZTEo
bG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsK
KyAgICB2b2lkIGxvYWRSZXNvdXJjZTIobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvcjo6SW5z
cGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsKKyAgICB2b2lkIGxvYWRSZXNvdXJjZTMobG9uZyBjYWxs
SWQsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsKKyAgICB2b2lk
IGxvYWRSZXNvdXJjZTQobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2Jq
ZWN0JiBtZXNzYWdlKTsKKyAgICB2b2lkIGxvYWRSZXNvdXJjZTUobG9uZyBjYWxsSWQsIGNvbnN0
IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsKKyAgICB2b2lkIGxvYWRSZXNv
dXJjZTYobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0JiBtZXNz
YWdlKTsKKyAgICB2b2lkIGxvYWRSZXNvdXJjZTcobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rv
cjo6SW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsKK3ByaXZhdGU6CisgICAgSW5zcGVjdG9yTmV0
d29yazNCYWNrZW5kRGlzcGF0Y2hlcihJbnNwZWN0b3I6Okluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyKiwgSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKKyAgICBJ
bnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciogbV9hZ2VudDsKK307CisK
K30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikK
KworI2VuZGlmIC8vICFkZWZpbmVkKEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnNfaCkK
KyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBC
ZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNp
emVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yVGVzdEJhY2tlbmRE
aXNwYXRjaGVycy5oIgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUgPGluc3Bl
Y3Rvci9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4KKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5z
cGVjdG9yVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKKworSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXI6On5JbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpIHsgfQorSW5z
cGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6On5JbnNwZWN0b3JOZXR3b3Jr
M0JhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpIHsgfQorCitQYXNzUmVmUHRyPEluc3BlY3Rvck5l
dHdvcmsxQmFja2VuZERpc3BhdGNoZXI+IEluc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNo
ZXI6OmNyZWF0ZShJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIs
IEluc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKK3sKKyAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IEluc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIo
YmFja2VuZERpc3BhdGNoZXIsIGFnZW50KSk7Cit9CisKK0luc3BlY3Rvck5ldHdvcmsxQmFja2Vu
ZERpc3BhdGNoZXI6Okluc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIoSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmREaXNwYXRjaGVyLCBJbnNwZWN0b3JOZXR3b3JrMUJh
Y2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCisgICAgOiBJbnNwZWN0b3JTdXBwbGVtZW50
YWxCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlcikKKyAgICAsIG1fYWdlbnQoYWdl
bnQpCit7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRjaGVyRm9yRG9t
YWluKEFTQ0lJTGl0ZXJhbCgiTmV0d29yazEiKSwgdGhpcyk7Cit9CisKK3ZvaWQgSW5zcGVjdG9y
TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyBjYWxsSWQsIGNvbnN0IFN0
cmluZyYgbWV0aG9kLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbWVzc2FnZSkKK3sKKyAg
ICBSZWY8SW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7
CisKKyAgICBpZiAobWV0aG9kID09ICJsb2FkUmVzb3VyY2UxIikKKyAgICAgICAgbG9hZFJlc291
cmNlMShjYWxsSWQsICptZXNzYWdlLmdldCgpKTsKKyAgICBlbHNlCisgICAgICAgIG1fYmFja2Vu
ZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCBTdHJpbmcoIiciKSArICJOZXR3b3JrMSIgKyAn
LicgKyBtZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7Cit9CisKK3ZvaWQgSW5zcGVjdG9yTmV0
d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMShsb25nIGNhbGxJZCwgY29uc3Qg
SW5zcGVjdG9yT2JqZWN0JikKK3sKKyAgICBFcnJvclN0cmluZyBlcnJvcjsKKyAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAg
IG1fYWdlbnQtPmxvYWRSZXNvdXJjZTEoJmVycm9yKTsKKworICAgIG1fYmFja2VuZERpc3BhdGNo
ZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIGVycm9yKTsKK30KKwor
UGFzc1JlZlB0cjxJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyPiBJbnNwZWN0b3JO
ZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUoSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXIqIGJhY2tlbmREaXNwYXRjaGVyLCBJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVy
SGFuZGxlciogYWdlbnQpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnNwZWN0b3JOZXR3
b3JrM0JhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyLCBhZ2VudCkpOworfQorCitJ
bnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpJbnNwZWN0b3JOZXR3b3JrM0JhY2tl
bmREaXNwYXRjaGVyKEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hl
ciwgSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQorICAg
IDogSW5zcGVjdG9yU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNo
ZXIpCisgICAgLCBtX2FnZW50KGFnZW50KQoreworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJl
Z2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbihBU0NJSUxpdGVyYWwoIk5ldHdvcmszIiksIHRoaXMp
OworfQorCit2b2lkIEluc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNo
KGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IG1lc3NhZ2UpCit7CisgICAgUmVmPEluc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3Bh
dGNoZXI+IHByb3RlY3QoKnRoaXMpOworCisgICAgdHlwZWRlZiB2b2lkIChJbnNwZWN0b3JOZXR3
b3JrM0JhY2tlbmREaXNwYXRjaGVyOjoqQ2FsbEhhbmRsZXIpKGxvbmcgY2FsbElkLCBjb25zdCBJ
bnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7CisgICAgdHlwZWRlZiBIYXNoTWFw
PFN0cmluZywgQ2FsbEhhbmRsZXI+IERpc3BhdGNoTWFwOworICAgIERFUFJFQ0FURURfREVGSU5F
X1NUQVRJQ19MT0NBTChEaXNwYXRjaE1hcCwgZGlzcGF0Y2hNYXAsICgpKTsKKyAgICBpZiAoZGlz
cGF0Y2hNYXAuaXNFbXB0eSgpKSB7CisgICAgICAgIHN0YXRpYyBjb25zdCBzdHJ1Y3QgTWV0aG9k
VGFibGUgeworICAgICAgICAgICAgY29uc3QgY2hhciogbmFtZTsKKyAgICAgICAgICAgIENhbGxI
YW5kbGVyIGhhbmRsZXI7CisgICAgICAgIH0gY29tbWFuZHNbXSA9IHsKKyAgICAgICAgICAgIHsg
ImxvYWRSZXNvdXJjZTEiLCAmSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9h
ZFJlc291cmNlMSB9LAorICAgICAgICAgICAgeyAibG9hZFJlc291cmNlMiIsICZJbnNwZWN0b3JO
ZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UyIH0sCisgICAgICAgICAgICB7
ICJsb2FkUmVzb3VyY2UzIiwgJkluc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6Omxv
YWRSZXNvdXJjZTMgfSwKKyAgICAgICAgICAgIHsgImxvYWRSZXNvdXJjZTQiLCAmSW5zcGVjdG9y
TmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNCB9LAorICAgICAgICAgICAg
eyAibG9hZFJlc291cmNlNSIsICZJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjps
b2FkUmVzb3VyY2U1IH0sCisgICAgICAgICAgICB7ICJsb2FkUmVzb3VyY2U2IiwgJkluc3BlY3Rv
ck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTYgfSwKKyAgICAgICAgICAg
IHsgImxvYWRSZXNvdXJjZTciLCAmSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6
bG9hZFJlc291cmNlNyB9LAorICAgICAgICB9OworICAgICAgICBzaXplX3QgbGVuZ3RoID0gV1RG
X0FSUkFZX0xFTkdUSChjb21tYW5kcyk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bGVuZ3RoOyArK2kpCisgICAgICAgICAgICBkaXNwYXRjaE1hcC5hZGQoY29tbWFuZHNbaV0ubmFt
ZSwgY29tbWFuZHNbaV0uaGFuZGxlcik7CisgICAgfQorCisgICAgSGFzaE1hcDxTdHJpbmcsIENh
bGxIYW5kbGVyPjo6aXRlcmF0b3IgaXQgPSBkaXNwYXRjaE1hcC5maW5kKG1ldGhvZCk7CisgICAg
aWYgKGl0ID09IGRpc3BhdGNoTWFwLmVuZCgpKSB7CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNo
ZXItPnJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXI6Ok1ldGhvZE5vdEZvdW5kLCBTdHJpbmcoIiciKSArICJOZXR3b3JrMyIgKyAnLicgKyBtZXRo
b2QgKyAiJyB3YXMgbm90IGZvdW5kIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAo
KCp0aGlzKS4qaXQtPnZhbHVlKShjYWxsSWQsICptZXNzYWdlLmdldCgpKTsKK30KKwordm9pZCBJ
bnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UxKGxvbmcgY2Fs
bElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmKQoreworICAgIEVycm9yU3RyaW5nIGVycm9yOwor
ICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3Jl
YXRlKCk7CisgICAgbV9hZ2VudC0+bG9hZFJlc291cmNlMSgmZXJyb3IpOworCisgICAgbV9iYWNr
ZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgZXJy
b3IpOworfQorCit2b2lkIEluc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRS
ZXNvdXJjZTIobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYpCit7CisgICAgRXJy
b3JTdHJpbmcgZXJyb3I7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5z
cGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBtX2FnZW50LT5sb2FkUmVzb3VyY2UyKCZlcnJv
cik7CisKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1
bHQucmVsZWFzZSgpLCBlcnJvcik7Cit9CisKK3ZvaWQgSW5zcGVjdG9yTmV0d29yazNCYWNrZW5k
RGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2Jq
ZWN0JikKK3sKKyAgICBFcnJvclN0cmluZyBlcnJvcjsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIG1fYWdlbnQtPmxv
YWRSZXNvdXJjZTMoJmVycm9yKTsKKworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNw
b25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIGVycm9yKTsKK30KKwordm9pZCBJbnNwZWN0
b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U0KGxvbmcgY2FsbElkLCBj
b25zdCBJbnNwZWN0b3JPYmplY3QmKQoreworICAgIEVycm9yU3RyaW5nIGVycm9yOworICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7
CisgICAgbV9hZ2VudC0+bG9hZFJlc291cmNlNCgmZXJyb3IpOworCisgICAgbV9iYWNrZW5kRGlz
cGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgZXJyb3IpOwor
fQorCit2b2lkIEluc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJj
ZTUobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYpCit7CisgICAgRXJyb3JTdHJp
bmcgZXJyb3I7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBtX2FnZW50LT5sb2FkUmVzb3VyY2U1KCZlcnJvcik7CisK
KyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElkLCByZXN1bHQucmVs
ZWFzZSgpLCBlcnJvcik7Cit9CisKK3ZvaWQgSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0
Y2hlcjo6bG9hZFJlc291cmNlNihsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JikK
K3sKKyAgICBFcnJvclN0cmluZyBlcnJvcjsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBy
ZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIG1fYWdlbnQtPmxvYWRSZXNv
dXJjZTYoJmVycm9yKTsKKworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShj
YWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIGVycm9yKTsKK30KKwordm9pZCBJbnNwZWN0b3JOZXR3
b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U3KGxvbmcgY2FsbElkLCBjb25zdCBJ
bnNwZWN0b3JPYmplY3QmKQoreworICAgIEVycm9yU3RyaW5nIGVycm9yOworICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAg
bV9hZ2VudC0+bG9hZFJlc291cmNlNygmZXJyb3IpOworCisgICAgbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgcmVzdWx0LnJlbGVhc2UoKSwgZXJyb3IpOworfQorCit9
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisK
KyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKworIyMj
IEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1z
aXplcy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkKKworI2lmbmRlZiBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVyc19oCisjZGVmaW5l
IEluc3BlY3RvclRlc3RGcm9udGVuZERpc3BhdGNoZXJzX2gKKworI2lmIEVOQUJMRShJTlNQRUNU
T1IpCisKKyNpbmNsdWRlICJJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmgiCisjaW5jbHVkZSA8
aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oPgorI2luY2x1ZGUgPGluc3BlY3Rv
ci9JbnNwZWN0b3JWYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisK
K30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikK
KworI2VuZGlmIC8vICFkZWZpbmVkKEluc3BlY3RvclRlc3RGcm9udGVuZERpc3BhdGNoZXJzX2gp
CisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKworIyMj
IEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBkb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5k
LXNpemVzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yVGVzdEZyb250
ZW5kRGlzcGF0Y2hlcnMuaCIKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRlIDx3
dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit9IC8vIG5hbWVz
cGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyMjIyBFbmQg
RmlsZTogSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBG
aWxlOiBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
MywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uCisvLyBi
eSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29k
ZWdlbi9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2lmbmRlZiBJ
bnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzX2gKKyNkZWZpbmUgSW5zcGVjdG9yVGVzdFR5cGVCdWls
ZGVyc19oCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSA8aW5zcGVjdG9yL0lu
c3BlY3RvckpTVHlwZUJ1aWxkZXJzLmg+CisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclR5
cGVCdWlsZGVyLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYv
UGFzc1JlZlB0ci5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKK25hbWVzcGFjZSBU
eXBlQnVpbGRlciB7CisKKworCisvLyBUeXBlZGVmcy4KK25hbWVzcGFjZSBOZXR3b3JrMiB7Cisv
KiBVbmlxdWUgbG9hZGVyIGlkZW50aWZpZXIuICovCit0eXBlZGVmIFN0cmluZyBMb2FkZXJJZDsK
K30gLy8gTmV0d29yazIKKy8vIEVuZCBvZiB0eXBlZGVmcy4KKworU3RyaW5nIGdldFRlc3RFbnVt
Q29uc3RhbnRWYWx1ZShpbnQgY29kZSk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IFN0cmluZyBn
ZXRUZXN0RW51bUNvbnN0YW50VmFsdWUoVCBlbnVtVmFsdWUpCit7CisgICAgcmV0dXJuIGdldFRl
c3RFbnVtQ29uc3RhbnRWYWx1ZShzdGF0aWNfY2FzdDxpbnQ+KGVudW1WYWx1ZSkpOworfQorCisK
KworfSAvLyBuYW1lc3BhY2UgVHlwZUJ1aWxkZXIKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
CisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorCisjZW5kaWYgLy8gIWRlZmluZWQoSW5z
cGVjdG9yVGVzdFR5cGVCdWlsZGVyc19oKQorIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0VHlw
ZUJ1aWxkZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMu
Y3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rv
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBG
SUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGRvbWFpbnMtd2l0aC12YXJ5
aW5nLWNvbW1hbmQtc2l6ZXMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnNwZWN0
b3JUZXN0VHlwZUJ1aWxkZXJzLmgiCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVk
ZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworbmFtZXNw
YWNlIFR5cGVCdWlsZGVyIHsKKworc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGVudW1fY29uc3Rh
bnRfdmFsdWVzW10gPSB7Cit9OworCitTdHJpbmcgZ2V0VGVzdEVudW1Db25zdGFudFZhbHVlKGlu
dCBjb2RlKSB7CisgICAgcmV0dXJuIGVudW1fY29uc3RhbnRfdmFsdWVzW2NvZGVdOworfQorCisK
KworfSAvLyBuYW1lc3BhY2UgVHlwZUJ1aWxkZXIKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
CisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorCisjIyMgRW5kIEZpbGU6IEluc3BlY3Rv
clRlc3RUeXBlQnVpbGRlcnMuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFy
YW1ldGVycy5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9leHBlY3RlZC9ldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24t
cmVzdWx0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmI0YjExNjNkMGM4ZjViMDAwMjlkMTk4N2VhMzlhOGYzZTU5NzBj
OGEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZXhwZWN0ZWQvZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29u
LXJlc3VsdApAQCAtMCwwICsxLDUxMSBAQAorIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RC
YWNrZW5kQ29tbWFuZHMuanMKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBO
T1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZl
bnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworLy8gRGF0YWJhc2UuCitJbnNwZWN0b3JCYWNr
ZW5kLnJlZ2lzdGVyRGF0YWJhc2VEaXNwYXRjaGVyID0gSW5zcGVjdG9yQmFja2VuZC5yZWdpc3Rl
ckRvbWFpbkRpc3BhdGNoZXIuYmluZChJbnNwZWN0b3JCYWNrZW5kLCAiRGF0YWJhc2UiKTsKK0lu
c3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFdmVudCgiRGF0YWJhc2UuZGlkRXhlY3V0ZU9wdGlvbmFs
UGFyYW1ldGVycyIsIFsiY29sdW1uTmFtZXMiLCAibm90ZXMiLCAidGltZXN0YW1wIiwgInZhbHVl
cyIsICJwYXlsb2FkIiwgInNxbEVycm9yIiwgInNjcmVlbkNvbG9yIiwgInByaW50Q29sb3IiXSk7
CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRXZlbnQoIkRhdGFiYXNlLmRpZEV4ZWN1dGVOb09w
dGlvbmFsUGFyYW1ldGVycyIsIFsiY29sdW1uTmFtZXMiLCAibm90ZXMiLCAidGltZXN0YW1wIiwg
InZhbHVlcyIsICJwYXlsb2FkIiwgInNxbEVycm9yIiwgInNjcmVlbkNvbG9yIiwgInByaW50Q29s
b3IiXSk7CisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kQ29tbWFuZHMuanMKKwor
IyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0
ZXJzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5w
eQorCisjaWZuZGVmIEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnNfaAorI2RlZmluZSBJ
bnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzX2gKKworI2lmIEVOQUJMRShJTlNQRUNUT1Ip
CisKKyNpbmNsdWRlICJJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmgiCisjaW5jbHVkZSA8aW5z
cGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NS
ZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIElu
c3BlY3RvciB7CisKK3R5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCit9IC8vIG5hbWVzcGFj
ZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyNlbmRpZiAvLyAh
ZGVmaW5lZChJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzX2gpCisjIyMgRW5kIEZpbGU6
IEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogSW5z
cGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
MywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uCisvLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdl
bi9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKKwor
I2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsLmg+CisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisK
KworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNU
T1IpCisKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAK
KworIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0
IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFy
YW1ldGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGlu
Z3MucHkKKworI2lmbmRlZiBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVyc19oCisjZGVm
aW5lIEluc3BlY3RvclRlc3RGcm9udGVuZERpc3BhdGNoZXJzX2gKKworI2lmIEVOQUJMRShJTlNQ
RUNUT1IpCisKKyNpbmNsdWRlICJJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmgiCisjaW5jbHVk
ZSA8aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oPgorI2luY2x1ZGUgPGluc3Bl
Y3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwor
CisKKyNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQorY2xhc3MgSW5zcGVjdG9yRGF0YWJhc2VGcm9u
dGVuZERpc3BhdGNoZXIgeworcHVibGljOgorICAgIEluc3BlY3RvckRhdGFiYXNlRnJvbnRlbmRE
aXNwYXRjaGVyKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsKSA6IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKGluc3BlY3RvckZyb250ZW5kQ2hhbm5l
bCkgeyB9CisgICAgdm9pZCBkaWRFeGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJzKFBhc3NSZWZQdHI8
SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk8U3RyaW5nPj4gY29sdW1uTmFtZXMsIGNvbnN0
IFN0cmluZyogY29uc3Qgbm90ZXMsIGNvbnN0IGRvdWJsZSogY29uc3QgdGltZXN0YW1wLCBQYXNz
UmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZXMsIFBhc3NSZWZQdHI8SW5z
cGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4gcGF5bG9hZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlR5
cGVCdWlsZGVyOjpEYXRhYmFzZTo6RXJyb3I+IHNxbEVycm9yLCBjb25zdCBJbnNwZWN0b3I6OlR5
cGVCdWlsZGVyOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyogY29uc3Qgc2NyZWVuQ29sb3IsIGNv
bnN0IFN0cmluZyogY29uc3QgcHJpbnRDb2xvcik7CisgICAgdm9pZCBkaWRFeGVjdXRlTm9PcHRp
b25hbFBhcmFtZXRlcnMoUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheTxT
dHJpbmc+PiBjb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBub3RlcywgZG91YmxlIHRpbWVzdGFt
cCwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gdmFsdWVzLCBQYXNzUmVm
UHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+IHBheWxvYWQsIFBhc3NSZWZQdHI8SW5zcGVj
dG9yOjpUeXBlQnVpbGRlcjo6RGF0YWJhc2U6OkVycm9yPiBzcWxFcnJvciwgY29uc3QgSW5zcGVj
dG9yOjpUeXBlQnVpbGRlcjo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMmIHNjcmVlbkNvbG9yLCBj
b25zdCBTdHJpbmcmIHByaW50Q29sb3IpOworcHJpdmF0ZToKKyAgICBJbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwqIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOworfTsKKyNlbmRpZiAvLyBFTkFC
TEUoU1FMX0RBVEFCQVNFKQorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8v
IEVOQUJMRShJTlNQRUNUT1IpCisKKyNlbmRpZiAvLyAhZGVmaW5lZChJbnNwZWN0b3JUZXN0RnJv
bnRlbmREaXNwYXRjaGVyc19oKQorIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0RnJvbnRlbmRE
aXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNw
YXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnRzLXdp
dGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIklu
c3BlY3RvclRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9S
KQorCisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9y
IHsKKworI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCit2b2lkIEluc3BlY3RvckRhdGFiYXNlRnJv
bnRlbmREaXNwYXRjaGVyOjpkaWRFeGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJzKFBhc3NSZWZQdHI8
SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk8U3RyaW5nPj4gY29sdW1uTmFtZXMsIGNvbnN0
IFN0cmluZyogY29uc3Qgbm90ZXMsIGNvbnN0IGRvdWJsZSogY29uc3QgdGltZXN0YW1wLCBQYXNz
UmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZXMsIFBhc3NSZWZQdHI8SW5z
cGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4gcGF5bG9hZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlR5
cGVCdWlsZGVyOjpEYXRhYmFzZTo6RXJyb3I+IHNxbEVycm9yLCBjb25zdCBJbnNwZWN0b3I6OlR5
cGVCdWlsZGVyOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyogY29uc3Qgc2NyZWVuQ29sb3IsIGNv
bnN0IFN0cmluZyogY29uc3QgcHJpbnRDb2xvcikKK3sKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBqc29uTWVzc2FnZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAganNvbk1l
c3NhZ2UtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoIm1ldGhvZCIpLCBBU0NJSUxpdGVyYWwoIkRh
dGFiYXNlLmRpZEV4ZWN1dGVPcHRpb25hbFBhcmFtZXRlcnMiKSk7CisgICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAg
ICBpZiAoY29sdW1uTmFtZXMpCisgICAgICAgIHBhcmFtc09iamVjdC0+c2V0QXJyYXkoQVNDSUlM
aXRlcmFsKCJjb2x1bW5OYW1lcyIpLCBjb2x1bW5OYW1lcyk7CisgICAgaWYgKG5vdGVzKQorICAg
ICAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoIm5vdGVzIiksICpub3Rl
cyk7CisgICAgaWYgKHRpbWVzdGFtcCkKKyAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXROdW1iZXIo
QVNDSUlMaXRlcmFsKCJ0aW1lc3RhbXAiKSwgKnRpbWVzdGFtcCk7CisgICAgaWYgKHZhbHVlcykK
KyAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJ2YWx1ZXMiKSwg
dmFsdWVzKTsKKyAgICBpZiAocGF5bG9hZCkKKyAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRWYWx1
ZShBU0NJSUxpdGVyYWwoInBheWxvYWQiKSwgKnBheWxvYWQpOworICAgIGlmIChzcWxFcnJvcikK
KyAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJzcWxFcnJvciIp
LCBzcWxFcnJvcik7CisgICAgaWYgKHNjcmVlbkNvbG9yKQorICAgICAgICBwYXJhbXNPYmplY3Qt
PnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInNjcmVlbkNvbG9yIiksICpzY3JlZW5Db2xvcik7Cisg
ICAgaWYgKHByaW50Q29sb3IpCisgICAgICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKEFTQ0lJ
TGl0ZXJhbCgicHJpbnRDb2xvciIpLCAqcHJpbnRDb2xvcik7CisgICAganNvbk1lc3NhZ2UtPnNl
dE9iamVjdChBU0NJSUxpdGVyYWwoInBhcmFtcyIpLCBwYXJhbXNPYmplY3QpOworCisgICAgbV9p
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChqc29uTWVzc2Fn
ZS0+dG9KU09OU3RyaW5nKCkpOworfQorCit2b2lkIEluc3BlY3RvckRhdGFiYXNlRnJvbnRlbmRE
aXNwYXRjaGVyOjpkaWRFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMoUGFzc1JlZlB0cjxJbnNw
ZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheTxTdHJpbmc+PiBjb2x1bW5OYW1lcywgY29uc3QgU3Ry
aW5nJiBub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3Bl
Y3Rvck9iamVjdD4gdmFsdWVzLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+
IHBheWxvYWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6RGF0YWJhc2U6OkVy
cm9yPiBzcWxFcnJvciwgY29uc3QgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6RGF0YWJhc2U6OlBy
aW1hcnlDb2xvcnMmIHNjcmVlbkNvbG9yLCBjb25zdCBTdHJpbmcmIHByaW50Q29sb3IpCit7Cisg
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4ganNvbk1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6
OmNyZWF0ZSgpOworICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJtZXRo
b2QiKSwgQVNDSUlMaXRlcmFsKCJEYXRhYmFzZS5kaWRFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRl
cnMiKSk7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSW5zcGVj
dG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBwYXJhbXNPYmplY3QtPnNldEFycmF5KEFTQ0lJTGl0
ZXJhbCgiY29sdW1uTmFtZXMiKSwgY29sdW1uTmFtZXMpOworICAgIHBhcmFtc09iamVjdC0+c2V0
U3RyaW5nKEFTQ0lJTGl0ZXJhbCgibm90ZXMiKSwgbm90ZXMpOworICAgIHBhcmFtc09iamVjdC0+
c2V0TnVtYmVyKEFTQ0lJTGl0ZXJhbCgidGltZXN0YW1wIiksIHRpbWVzdGFtcCk7CisgICAgcGFy
YW1zT2JqZWN0LT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJ2YWx1ZXMiKSwgdmFsdWVzKTsKKyAg
ICBwYXJhbXNPYmplY3QtPnNldFZhbHVlKEFTQ0lJTGl0ZXJhbCgicGF5bG9hZCIpLCBwYXlsb2Fk
KTsKKyAgICBwYXJhbXNPYmplY3QtPnNldE9iamVjdChBU0NJSUxpdGVyYWwoInNxbEVycm9yIiks
IHNxbEVycm9yKTsKKyAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInNj
cmVlbkNvbG9yIiksIHNjcmVlbkNvbG9yKTsKKyAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZyhB
U0NJSUxpdGVyYWwoInByaW50Q29sb3IiKSwgcHJpbnRDb2xvcik7CisgICAganNvbk1lc3NhZ2Ut
PnNldE9iamVjdChBU0NJSUxpdGVyYWwoInBhcmFtcyIpLCBwYXJhbXNPYmplY3QpOworCisgICAg
bV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChqc29uTWVz
c2FnZS0+dG9KU09OU3RyaW5nKCkpOworfQorI2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0Up
CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RP
UikKKworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAK
KworIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuaAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJz
Lmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQor
CisjaWZuZGVmIEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnNfaAorI2RlZmluZSBJbnNwZWN0b3JU
ZXN0VHlwZUJ1aWxkZXJzX2gKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRlIDxp
bnNwZWN0b3IvSW5zcGVjdG9ySlNUeXBlQnVpbGRlcnMuaD4KKyNpbmNsdWRlIDxpbnNwZWN0b3Iv
SW5zcGVjdG9yVHlwZUJ1aWxkZXIuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2lu
Y2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKwor
bmFtZXNwYWNlIFR5cGVCdWlsZGVyIHsKKworLy8gRm9yd2FyZCBkZWNsYXJhdGlvbnMuCisjaWYg
RU5BQkxFKFNRTF9EQVRBQkFTRSkKK25hbWVzcGFjZSBEYXRhYmFzZSB7CitjbGFzcyBFcnJvcjsK
K30gLy8gRGF0YWJhc2UKKyNlbmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQorLy8gRW5kIG9m
IGZvcndhcmQgZGVjbGFyYXRpb25zLgorCisKKy8vIFR5cGVkZWZzLgorI2lmIEVOQUJMRShTUUxf
REFUQUJBU0UpCituYW1lc3BhY2UgRGF0YWJhc2UgeworLyogVW5pcXVlIGlkZW50aWZpZXIgb2Yg
RGF0YWJhc2Ugb2JqZWN0LiAqLwordHlwZWRlZiBTdHJpbmcgRGF0YWJhc2VJZDsKKwordHlwZWRl
ZiBTdHJpbmcgUHJpbWFyeUNvbG9yczsKK30gLy8gRGF0YWJhc2UKKyNlbmRpZiAvLyBFTkFCTEUo
U1FMX0RBVEFCQVNFKQorLy8gRW5kIG9mIHR5cGVkZWZzLgorCitTdHJpbmcgZ2V0VGVzdEVudW1D
b25zdGFudFZhbHVlKGludCBjb2RlKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gU3RyaW5nIGdl
dFRlc3RFbnVtQ29uc3RhbnRWYWx1ZShUIGVudW1WYWx1ZSkKK3sKKyAgICByZXR1cm4gZ2V0VGVz
dEVudW1Db25zdGFudFZhbHVlKHN0YXRpY19jYXN0PGludD4oZW51bVZhbHVlKSk7Cit9CisKKyNp
ZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQorbmFtZXNwYWNlIERhdGFiYXNlIHsKKy8qIERhdGFiYXNl
IGVycm9yLiAqLworY2xhc3MgRXJyb3IgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmpl
Y3RCYXNlIHsKK3B1YmxpYzoKKyAgICBlbnVtIHsKKyAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAor
ICAgICAgICBNZXNzYWdlU2V0ID0gMSA8PCAwLAorICAgICAgICBDb2RlU2V0ID0gMSA8PCAxLAor
ICAgICAgICBBbGxGaWVsZHNTZXQgPSAoTWVzc2FnZVNldCB8IENvZGVTZXQpCisgICAgfTsKKwor
ICAgIHRlbXBsYXRlPGludCBTVEFURT4KKyAgICBjbGFzcyBCdWlsZGVyIHsKKyAgICBwcml2YXRl
OgorICAgICAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0Owor
CisgICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RT
dGF0ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxC
dWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxk
ZXIoUGFzc1JlZlB0cjwvKkVycm9yKi9JbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gcHRyKQor
ICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1Nl
dCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKKyAgICAgICAgICAgIG1fcmVz
dWx0ID0gcHRyOworICAgICAgICB9CisgICAgICAgIGZyaWVuZCBjbGFzcyBFcnJvcjsKKyAgICBw
dWJsaWM6CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IE1lc3NhZ2VTZXQ+JiBzZXRNZXNzYWdl
KGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKCEoU1RBVEUgJiBNZXNzYWdlU2V0KSwgcHJvcGVydHlfbWVzc2FnZV9hbHJlYWR5X3NldCk7
CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgibWVzc2FnZSIp
LCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE1lc3NhZ2VTZXQ+KCk7Cisg
ICAgICAgIH0KKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQ29kZVNldD4mIHNldENvZGUoaW50
IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYg
Q29kZVNldCksIHByb3BlcnR5X2NvZGVfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1
bHQtPnNldE51bWJlcihBU0NJSUxpdGVyYWwoImNvZGUiKSwgdmFsdWUpOworICAgICAgICAgICAg
cmV0dXJuIGNhc3RTdGF0ZTxDb2RlU2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgb3BlcmF0
b3IgUmVmUHRyPEVycm9yPiYgKCkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKKyAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihFcnJvcikgPT0gc2l6ZW9mKEluc3BlY3Rvcjo6SW5z
cGVjdG9yT2JqZWN0KSwgY2Fubm90X2Nhc3QpOworICAgICAgICAgICAgcmV0dXJuICpyZWludGVy
cHJldF9jYXN0PFJlZlB0cjxFcnJvcj4qPigmbV9yZXN1bHQpOworICAgICAgICB9CisKKyAgICAg
ICAgUGFzc1JlZlB0cjxFcnJvcj4gcmVsZWFzZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBSZWZQdHI8RXJyb3I+KCp0aGlzKS5yZWxlYXNlKCk7CisgICAgICAgIH0KKyAgICB9Owor
CisgICAgLyoKKyAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CisgICAgICogUmVmUHRyPEVy
cm9yPiByZXN1bHQgPSBFcnJvcjo6Y3JlYXRlKCkKKyAgICAgKiAgICAgLnNldE1lc3NhZ2UoLi4u
KQorICAgICAqICAgICAuc2V0Q29kZSguLi4pOworICAgICAqLworICAgIHN0YXRpYyBCdWlsZGVy
PE5vRmllbGRzU2V0PiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9G
aWVsZHNTZXQ+KEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7CisgICAgfQor
ICAgIHR5cGVkZWYgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6U3RydWN0SXRlbVRyYWl0cyBJdGVt
VHJhaXRzOworfTsKKworfSAvLyBEYXRhYmFzZQorI2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJB
U0UpCisKKworCit9IC8vIG5hbWVzcGFjZSBUeXBlQnVpbGRlcgorCit9IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyNlbmRpZiAvLyAhZGVm
aW5lZChJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzX2gpCisjIyMgRW5kIEZpbGU6IEluc3BlY3Rv
clRlc3RUeXBlQnVpbGRlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdFR5cGVC
dWlsZGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBX
YXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJ
VCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gZXZlbnRzLXdp
dGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIklu
c3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuaCIKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCitu
YW1lc3BhY2UgVHlwZUJ1aWxkZXIgeworCitzdGF0aWMgY29uc3QgY2hhciogY29uc3QgZW51bV9j
b25zdGFudF92YWx1ZXNbXSA9IHsKK307CisKK1N0cmluZyBnZXRUZXN0RW51bUNvbnN0YW50VmFs
dWUoaW50IGNvZGUpIHsKKyAgICByZXR1cm4gZW51bV9jb25zdGFudF92YWx1ZXNbY29kZV07Cit9
CisKKworCit9IC8vIG5hbWVzcGFjZSBUeXBlQnVpbGRlcgorCit9IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyMjIyBFbmQgRmlsZTogSW5z
cGVjdG9yVGVzdFR5cGVCdWlsZGVycy5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWR1cGxpY2F0ZS10
eXBlLWRlY2xhcmF0aW9ucy5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tZHVwbGljYXRlLXR5cGUtZGVjbGFy
YXRpb25zLmpzb24tZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDQ3Y2RmOGUyOGU4NTY2MTBhMjZmODE1NDk0
M2YzNmNmOGI3ZDFmNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLWR1cGxpY2F0ZS10eXBlLWRl
Y2xhcmF0aW9ucy5qc29uLWVycm9yCkBAIC0wLDAgKzEgQEAKK0VSUk9SOiBEdXBsaWNhdGUgdHlw
ZSBkZWNsYXJhdGlvbjogUnVudGltZS5SZW1vdGVPYmplY3RJZApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24t
ZW51bS13aXRoLW5vLXZhbHVlcy5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tZW51bS13aXRoLW5vLXZhbHVl
cy5qc29uLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI2NTVjMmI5MDdlMDJlM2U4NGNiM2Y2NmZhMWY1OGUx
M2Q5YjdiNTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1lbnVtLXdpdGgtbm8tdmFsdWVzLmpz
b24tZXJyb3IKQEAgLTAsMCArMSBAQAorRVJST1I6IFR5cGUgcmVmZXJlbmNlIHdpdGggZW51bSB2
YWx1ZXMgbXVzdCBoYXZlIGF0IGxlYXN0IG9uZSBlbnVtIHZhbHVlLgpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwt
b24tc3RyaW5nLXR5cGVkLW9wdGlvbmFsLXBhcmFtZXRlci1mbGFnLmpzb24tZXJyb3IgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1v
bi1zdHJpbmctdHlwZWQtb3B0aW9uYWwtcGFyYW1ldGVyLWZsYWcuanNvbi1lcnJvcgpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi45N2IyYWYwZTQ3ZTkzZjgwNDk3OTQ0NDcyNTdkZjMyNzIzZjA2ODI0Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4
cGVjdGVkL2ZhaWwtb24tc3RyaW5nLXR5cGVkLW9wdGlvbmFsLXBhcmFtZXRlci1mbGFnLmpzb24t
ZXJyb3IKQEAgLTAsMCArMSBAQAorRVJST1I6IFRoZSAnb3B0aW9uYWwnIGZsYWcgZm9yIGEgcGFy
YW1ldGVyIG11c3QgYmUgYSBib29sZWFuIGxpdGVyYWwuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi1zdHJp
bmctdHlwZWQtb3B0aW9uYWwtdHlwZS1tZW1iZXIuanNvbi1lcnJvciBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLXN0cmluZy10
eXBlZC1vcHRpb25hbC10eXBlLW1lbWJlci5qc29uLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg2ZGYzNzUw
YzFhNzc5Nzg5M2NiZmI3ZTI4NzZkOTJjY2VjYzJmOTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1v
bi1zdHJpbmctdHlwZWQtb3B0aW9uYWwtdHlwZS1tZW1iZXIuanNvbi1lcnJvcgpAQCAtMCwwICsx
IEBACitFUlJPUjogVGhlICdvcHRpb25hbCcgZmxhZyBmb3IgYSB0eXBlIG1lbWJlciBtdXN0IGJl
IGEgYm9vbGVhbiBsaXRlcmFsLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tdHlwZS1kZWNsYXJhdGlvbi11
c2luZy10eXBlLXJlZmVyZW5jZS5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tdHlwZS1kZWNsYXJhdGlvbi11
c2luZy10eXBlLXJlZmVyZW5jZS5qc29uLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQyZjU3NTNhNDM5NjE0
NGViNTY2YzVjNTk2OGQwNDlhZWM2MTgyZGIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFpbC1vbi10eXBl
LWRlY2xhcmF0aW9uLXVzaW5nLXR5cGUtcmVmZXJlbmNlLmpzb24tZXJyb3IKQEAgLTAsMCArMSBA
QAorRVJST1I6IFR5cGUgcmVmZXJlbmNlIGNhbm5vdCBoYXZlIGJvdGggJ3R5cGUnIGFuZCAnJHJl
Zicga2V5cy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLXR5cGUtd2l0aC1sb3dlcmNhc2UtbmFtZS5qc29u
LWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4
cGVjdGVkL2ZhaWwtb24tdHlwZS13aXRoLWxvd2VyY2FzZS1uYW1lLmpzb24tZXJyb3IKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNGU0NjIyNTBjMGFmODBhMTc5ZTA2YWFmNDVkMjFlYjU0NmRiODgxNAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9l
eHBlY3RlZC9mYWlsLW9uLXR5cGUtd2l0aC1sb3dlcmNhc2UtbmFtZS5qc29uLWVycm9yCkBAIC0w
LDAgKzEgQEAKK0VSUk9SOiBUeXBlcyBtdXN0IGJlZ2luIHdpdGggYW4gdXBwZXJjYXNlIGNoYXJh
Y3Rlci4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1k
ZWNsYXJhdGlvbi5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tdW5rbm93bi10eXBlLXJlZmVyZW5jZS1pbi10
eXBlLWRlY2xhcmF0aW9uLmpzb24tZXJyb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDNjNzgyZDg5ZGI1NjVkNzI0
ZTc1NDBlMzJlZGNmZGJkNzlhMmY3MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9mYWlsLW9uLXVua25vd24t
dHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1kZWNsYXJhdGlvbi5qc29uLWVycm9yCkBAIC0wLDAgKzEg
QEAKK0VSUk9SOiBMb29rdXAgZmFpbGVkIGZvciB0eXBlIHJlZmVyZW5jZTogZHJhZ29uIChyZWZl
cmVuY2VkIGZyb20gZG9tYWluOiBSdW50aW1lKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tdW5rbm93bi10
eXBlLXJlZmVyZW5jZS1pbi10eXBlLW1lbWJlci5qc29uLWVycm9yIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2ZhaWwtb24tdW5rbm93bi10
eXBlLXJlZmVyZW5jZS1pbi10eXBlLW1lbWJlci5qc29uLWVycm9yCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZhZjY2
NzJjYmVmMDk2MzBmZDliZThmZmFkYWNlMTJjNTYxMWNjYTgKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZmFp
bC1vbi11bmtub3duLXR5cGUtcmVmZXJlbmNlLWluLXR5cGUtbWVtYmVyLmpzb24tZXJyb3IKQEAg
LTAsMCArMSBAQAorRVJST1I6IExvb2t1cCBmYWlsZWQgZm9yIHR5cGUgcmVmZXJlbmNlOiBDb2xv
ciAocmVmZXJlbmNlZCBmcm9tIGRvbWFpbjogRmFudGFzeSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9zYW1lLXR5cGUt
aWQtZGlmZmVyZW50LWRvbWFpbi5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9zYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRv
bWFpbi5qc29uLXJlc3VsdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xYWZkYzU4NzkxNjFkODlmYzg3MjAzYmY2OTIw
MzYxYWRjOWJhYjkzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3NhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9t
YWluLmpzb24tcmVzdWx0CkBAIC0wLDAgKzEsMzcwIEBACisjIyMgQmVnaW4gRmlsZTogSW5zcGVj
dG9yVGVzdEJhY2tlbmRDb21tYW5kcy5qcworLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
Ky8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSBzYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCisvLyBieSB0aGUgc2NyaXB0
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9y
VGVzdEJhY2tlbmRDb21tYW5kcy5qcworCisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdEJh
Y2tlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNh
bWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaWZuZGVmIEluc3BlY3RvclRlc3RCYWNrZW5k
RGlzcGF0Y2hlcnNfaAorI2RlZmluZSBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzX2gK
KworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRlICJJbnNwZWN0b3JUZXN0VHlwZUJ1
aWxkZXJzLmgiCisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
Lmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK3R5cGVkZWYgU3RyaW5nIEVycm9y
U3RyaW5nOworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJ
TlNQRUNUT1IpCisKKyNlbmRpZiAvLyAhZGVmaW5lZChJbnNwZWN0b3JUZXN0QmFja2VuZERpc3Bh
dGNoZXJzX2gpCisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMu
aAorCisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVycy5jcHAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUu
IEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2FtZS10eXBlLWlkLWRpZmZlcmVu
dC1kb21haW4uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRp
bmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JUZXN0QmFj
a2VuZERpc3BhdGNoZXJzLmgiCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSA8
aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oPgorI2luY2x1ZGUgPGluc3BlY3Rv
ci9JbnNwZWN0b3JWYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25h
bWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNl
bmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorCisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RC
YWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0RnJv
bnRlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNp
dHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8g
Tk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNh
bWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaWZuZGVmIEluc3BlY3RvclRlc3RGcm9udGVu
ZERpc3BhdGNoZXJzX2gKKyNkZWZpbmUgSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnNf
aAorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUgIkluc3BlY3RvclRlc3RUeXBl
QnVpbGRlcnMuaCIKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
Lmg+CisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPgorI2luY2x1ZGUgPHd0
Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVz
cGFjZSBJbnNwZWN0b3IgeworCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRp
ZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorCisjZW5kaWYgLy8gIWRlZmluZWQoSW5zcGVjdG9yVGVz
dEZyb250ZW5kRGlzcGF0Y2hlcnNfaCkKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdEZyb250
ZW5kRGlzcGF0Y2hlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdEZyb250ZW5k
RGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNhbWUt
dHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
SW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKKworI2lmIEVOQUJMRShJTlNQRUNU
T1IpCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0
b3IgeworCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQ
RUNUT1IpCisKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMu
Y3BwCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmgKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21h
aW4uanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisKKyNpZm5kZWYgSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVyc19oCisjZGVmaW5lIEluc3BlY3Rv
clRlc3RUeXBlQnVpbGRlcnNfaAorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUg
PGluc3BlY3Rvci9JbnNwZWN0b3JKU1R5cGVCdWlsZGVycy5oPgorI2luY2x1ZGUgPGluc3BlY3Rv
ci9JbnNwZWN0b3JUeXBlQnVpbGRlci5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Cisj
aW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKwor
CituYW1lc3BhY2UgVHlwZUJ1aWxkZXIgeworCisKKworLy8gVHlwZWRlZnMuCituYW1lc3BhY2Ug
UnVudGltZSB7CisvKiBVbmlxdWUgb2JqZWN0IGlkZW50aWZpZXIuICovCit0eXBlZGVmIFN0cmlu
ZyBSZW1vdGVPYmplY3RJZDsKK30gLy8gUnVudGltZQorCituYW1lc3BhY2UgUnVudGltZTIgewor
LyogVW5pcXVlIG9iamVjdCBpZGVudGlmaWVyLiAqLwordHlwZWRlZiBTdHJpbmcgUmVtb3RlT2Jq
ZWN0SWQ7Cit9IC8vIFJ1bnRpbWUyCisvLyBFbmQgb2YgdHlwZWRlZnMuCisKK1N0cmluZyBnZXRU
ZXN0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBT
dHJpbmcgZ2V0VGVzdEVudW1Db25zdGFudFZhbHVlKFQgZW51bVZhbHVlKQoreworICAgIHJldHVy
biBnZXRUZXN0RW51bUNvbnN0YW50VmFsdWUoc3RhdGljX2Nhc3Q8aW50PihlbnVtVmFsdWUpKTsK
K30KKworCisKK30gLy8gbmFtZXNwYWNlIFR5cGVCdWlsZGVyCisKK30gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKworI2VuZGlmIC8vICFkZWZp
bmVkKEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnNfaCkKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9y
VGVzdFR5cGVCdWlsZGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0VHlwZUJ1
aWxkZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzYW1lLXR5cGUt
aWQtZGlmZmVyZW50LWRvbWFpbi5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJv
dG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkluc3Bl
Y3RvclRlc3RUeXBlQnVpbGRlcnMuaCIKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNs
dWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCituYW1l
c3BhY2UgVHlwZUJ1aWxkZXIgeworCitzdGF0aWMgY29uc3QgY2hhciogY29uc3QgZW51bV9jb25z
dGFudF92YWx1ZXNbXSA9IHsKK307CisKK1N0cmluZyBnZXRUZXN0RW51bUNvbnN0YW50VmFsdWUo
aW50IGNvZGUpIHsKKyAgICByZXR1cm4gZW51bV9jb25zdGFudF92YWx1ZXNbY29kZV07Cit9CisK
KworCit9IC8vIG5hbWVzcGFjZSBUeXBlQnVpbGRlcgorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyMjIyBFbmQgRmlsZTogSW5zcGVj
dG9yVGVzdFR5cGVCdWlsZGVycy5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9zaGFkb3dlZC1vcHRpb25hbC10eXBl
LXNldHRlcnMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZXhwZWN0ZWQvc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24t
cmVzdWx0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmUyMDM3ZGMzNzJiNWNkOGVkOTJhZjU2ZDQwZTVkMWY4YjNmYjI2
YzUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZXhwZWN0ZWQvc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24t
cmVzdWx0CkBAIC0wLDAgKzEsNDQ2IEBACisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdEJh
Y2tlbmRDb21tYW5kcy5qcworLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaGFk
b3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RCYWNr
ZW5kQ29tbWFuZHMuanMKKworIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kRGlz
cGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaGFkb3dlZC1v
cHRpb25hbC10eXBlLXNldHRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5CisKKyNpZm5kZWYgSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRj
aGVyc19oCisjZGVmaW5lIEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnNfaAorCisjaWYg
RU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUgIkluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMu
aCIKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNp
bmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwordHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7
CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RP
UikKKworI2VuZGlmIC8vICFkZWZpbmVkKEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnNf
aCkKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMj
IyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMg
YXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRl
cnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JUZXN0QmFja2VuZERp
c3BhdGNoZXJzLmgiCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSA8aW5zcGVj
dG9yL0luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oPgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNw
ZWN0b3JWYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFj
ZSBJbnNwZWN0b3IgeworCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAv
LyBFTkFCTEUoSU5TUEVDVE9SKQorCisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5k
RGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0RnJvbnRlbmRE
aXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2Yg
V2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVE
SVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHNoYWRvd2Vk
LW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZS1pbnNwZWN0b3It
cHJvdG9jb2wtYmluZGluZ3MucHkKKworI2lmbmRlZiBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNw
YXRjaGVyc19oCisjZGVmaW5lIEluc3BlY3RvclRlc3RGcm9udGVuZERpc3BhdGNoZXJzX2gKKwor
I2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRlICJJbnNwZWN0b3JUZXN0VHlwZUJ1aWxk
ZXJzLmgiCisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oPgor
I2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvUGFz
c1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8g
RU5BQkxFKElOU1BFQ1RPUikKKworI2VuZGlmIC8vICFkZWZpbmVkKEluc3BlY3RvclRlc3RGcm9u
dGVuZERpc3BhdGNoZXJzX2gpCisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RGcm9udGVuZERp
c3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RGcm9udGVuZERpc3Bh
dGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdh
c2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElU
IFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaGFkb3dlZC1v
cHRpb25hbC10eXBlLXNldHRlcnMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnNw
ZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikK
KworI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7
CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RP
UikKKworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAK
KworIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuaAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBzaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMu
anNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisK
KyNpZm5kZWYgSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVyc19oCisjZGVmaW5lIEluc3BlY3RvclRl
c3RUeXBlQnVpbGRlcnNfaAorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUgPGlu
c3BlY3Rvci9JbnNwZWN0b3JKU1R5cGVCdWlsZGVycy5oPgorI2luY2x1ZGUgPGluc3BlY3Rvci9J
bnNwZWN0b3JUeXBlQnVpbGRlci5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5j
bHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCitu
YW1lc3BhY2UgVHlwZUJ1aWxkZXIgeworCisvLyBGb3J3YXJkIGRlY2xhcmF0aW9ucy4KK25hbWVz
cGFjZSBSdW50aW1lIHsKK2NsYXNzIEtleVBhdGg7Cit9IC8vIFJ1bnRpbWUKKy8vIEVuZCBvZiBm
b3J3YXJkIGRlY2xhcmF0aW9ucy4KKworCisKKworU3RyaW5nIGdldFRlc3RFbnVtQ29uc3RhbnRW
YWx1ZShpbnQgY29kZSk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IFN0cmluZyBnZXRUZXN0RW51
bUNvbnN0YW50VmFsdWUoVCBlbnVtVmFsdWUpCit7CisgICAgcmV0dXJuIGdldFRlc3RFbnVtQ29u
c3RhbnRWYWx1ZShzdGF0aWNfY2FzdDxpbnQ+KGVudW1WYWx1ZSkpOworfQorCituYW1lc3BhY2Ug
UnVudGltZSB7CisvKiBLZXkgcGF0aC4gKi8KK2NsYXNzIEtleVBhdGggOiBwdWJsaWMgSW5zcGVj
dG9yOjpJbnNwZWN0b3JPYmplY3RCYXNlIHsKK3B1YmxpYzoKKyAgICAvLyBOYW1lZCBhZnRlciBw
cm9wZXJ0eSBuYW1lICd0eXBlJyB3aGlsZSBnZW5lcmF0aW5nIEtleVBhdGguCisgICAgZW51bSBj
bGFzcyBUeXBlIHsKKyAgICAgICAgTnVsbCA9IDAsCisgICAgICAgIFN0cmluZyA9IDEsCisgICAg
ICAgIEFycmF5ID0gMiwKKyAgICB9OyAvLyBlbnVtIGNsYXNzIFR5cGUKKyAgICBlbnVtIHsKKyAg
ICAgICAgTm9GaWVsZHNTZXQgPSAwLAorICAgICAgICBUeXBlU2V0ID0gMSA8PCAwLAorICAgICAg
ICBBbGxGaWVsZHNTZXQgPSAoVHlwZVNldCkKKyAgICB9OworCisgICAgdGVtcGxhdGU8aW50IFNU
QVRFPgorICAgIGNsYXNzIEJ1aWxkZXIgeworICAgIHByaXZhdGU6CisgICAgICAgIFJlZlB0cjxJ
bnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CisKKyAgICAgICAgdGVtcGxhdGU8
aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQ
Pio+KHRoaXMpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPC8qS2V5
UGF0aCovSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IHB0cikKKyAgICAgICAgeworICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRl
ZF9pbl9ub25faW5pdF9zdGF0ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKKyAgICAg
ICAgfQorICAgICAgICBmcmllbmQgY2xhc3MgS2V5UGF0aDsKKyAgICBwdWJsaWM6CisKKyAgICAg
ICAgQnVpbGRlcjxTVEFURSB8IFR5cGVTZXQ+JiBzZXRUeXBlKFR5cGUgdmFsdWUpCisgICAgICAg
IHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBUeXBlU2V0KSwgcHJvcGVy
dHlfdHlwZV9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKEFT
Q0lJTGl0ZXJhbCgidHlwZSIpLCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpnZXRUZXN0RW51bUNv
bnN0YW50VmFsdWUoc3RhdGljX2Nhc3Q8aW50Pih2YWx1ZSkpKTsKKyAgICAgICAgICAgIHJldHVy
biBjYXN0U3RhdGU8VHlwZVNldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIG9wZXJhdG9yIFJl
ZlB0cjxLZXlQYXRoPiYgKCkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
U1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKKyAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKHNpemVvZihLZXlQYXRoKSA9PSBzaXplb2YoSW5zcGVjdG9yOjpJbnNw
ZWN0b3JPYmplY3QpLCBjYW5ub3RfY2FzdCk7CisgICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJw
cmV0X2Nhc3Q8UmVmUHRyPEtleVBhdGg+Kj4oJm1fcmVzdWx0KTsKKyAgICAgICAgfQorCisgICAg
ICAgIFBhc3NSZWZQdHI8S2V5UGF0aD4gcmVsZWFzZSgpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBSZWZQdHI8S2V5UGF0aD4oKnRoaXMpLnJlbGVhc2UoKTsKKyAgICAgICAgfQorICAg
IH07CisKKyAgICAvKgorICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKKyAgICAgKiBSZWZQ
dHI8S2V5UGF0aD4gcmVzdWx0ID0gS2V5UGF0aDo6Y3JlYXRlKCkKKyAgICAgKiAgICAgLnNldFR5
cGUoLi4uKTsKKyAgICAgKi8KKyAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRl
KCkKKyAgICB7CisgICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihJbnNwZWN0b3I6
Okluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkpOworICAgIH0KKyAgICB0eXBlZGVmIEluc3BlY3Rv
cjo6VHlwZUJ1aWxkZXI6OlN0cnVjdEl0ZW1UcmFpdHMgSXRlbVRyYWl0czsKKworICAgIHZvaWQg
c2V0U3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgeworICAgICAgICBJbnNwZWN0b3JP
YmplY3RCYXNlOjpzZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJzdHJpbmciKSwgdmFsdWUpOworICAg
IH0KKworICAgIHZvaWQgc2V0QXJyYXkoUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVy
OjpBcnJheTxTdHJpbmc+PiB2YWx1ZSkKKyAgICB7CisgICAgICAgIEluc3BlY3Rvck9iamVjdEJh
c2U6OnNldEFycmF5KEFTQ0lJTGl0ZXJhbCgiYXJyYXkiKSwgdmFsdWUpOworICAgIH0KK307CisK
K30gLy8gUnVudGltZQorCisKKworfSAvLyBuYW1lc3BhY2UgVHlwZUJ1aWxkZXIKKworfSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorCisjZW5k
aWYgLy8gIWRlZmluZWQoSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVyc19oKQorIyMjIEVuZCBGaWxl
OiBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IEluc3BlY3Rv
clRlc3RUeXBlQnVpbGRlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8g
RE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9t
IHNoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuaCIKKworI2lmIEVOQUJMRShJTlNQRUNU
T1IpCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0
b3IgeworCituYW1lc3BhY2UgVHlwZUJ1aWxkZXIgeworCitzdGF0aWMgY29uc3QgY2hhciogY29u
c3QgZW51bV9jb25zdGFudF92YWx1ZXNbXSA9IHsKKyAgICAibnVsbCIsCisgICAgInN0cmluZyIs
CisgICAgImFycmF5IiwKK307CisKK1N0cmluZyBnZXRUZXN0RW51bUNvbnN0YW50VmFsdWUoaW50
IGNvZGUpIHsKKyAgICByZXR1cm4gZW51bV9jb25zdGFudF92YWx1ZXNbY29kZV07Cit9CisKKwor
Cit9IC8vIG5hbWVzcGFjZSBUeXBlQnVpbGRlcgorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
KworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9y
VGVzdFR5cGVCdWlsZGVycy5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQt
cHJpbWl0aXZlLXR5cGUuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1p
dGl2ZS10eXBlLmpzb24tcmVzdWx0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk5YWZlMTA2OGIyMjYxNWVkZmUxNTFk
NWMxNzAyYzBiNDFmOTYxMTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1hbGlh
c2VkLXByaW1pdGl2ZS10eXBlLmpzb24tcmVzdWx0CkBAIC0wLDAgKzEsMzY1IEBACisjIyMgQmVn
aW4gRmlsZTogSW5zcGVjdG9yVGVzdEJhY2tlbmRDb21tYW5kcy5qcworLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5
cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kQ29tbWFuZHMuanMKKworIyMjIEJl
Z2luIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZl
LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdz
LnB5CisKKyNpZm5kZWYgSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVyc19oCisjZGVmaW5l
IEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnNfaAorCisjaWYgRU5BQkxFKElOU1BFQ1RP
UikKKworI2luY2x1ZGUgIkluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuaCIKKyNpbmNsdWRlIDxp
bnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx3dGYvUGFz
c1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKKwordHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKK30gLy8gbmFtZXNw
YWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKworI2VuZGlmIC8v
ICFkZWZpbmVkKEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnNfaCkKKyMjIyBFbmQgRmls
ZTogSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBJ
bnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNv
bgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2NvZGVnZW4vZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNo
ZXJzLmgiCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSA8aW5zcGVjdG9yL0lu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oPgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JW
YWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNw
ZWN0b3IgeworCisKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFC
TEUoSU5TUEVDVE9SKQorCisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0
Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRj
aGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRp
b24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2lmbmRlZiBJbnNwZWN0b3JUZXN0RnJvbnRlbmRE
aXNwYXRjaGVyc19oCisjZGVmaW5lIEluc3BlY3RvclRlc3RGcm9udGVuZERpc3BhdGNoZXJzX2gK
KworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRlICJJbnNwZWN0b3JUZXN0VHlwZUJ1
aWxkZXJzLmgiCisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5o
PgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYv
UGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYg
Ly8gRU5BQkxFKElOU1BFQ1RPUikKKworI2VuZGlmIC8vICFkZWZpbmVkKEluc3BlY3RvclRlc3RG
cm9udGVuZERpc3BhdGNoZXJzX2gpCisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RGcm9udGVu
ZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RGcm9udGVuZERp
c3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9m
IFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBF
RElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRl
Y2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgorCisjaWYgRU5BQkxF
KElOU1BFQ1RPUikKKworI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNl
IEluc3BlY3RvciB7CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5B
QkxFKElOU1BFQ1RPUikKKworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNw
YXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMu
aAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklM
RS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFs
aWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGUtaW5zcGVjdG9yLXBy
b3RvY29sLWJpbmRpbmdzLnB5CisKKyNpZm5kZWYgSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVyc19o
CisjZGVmaW5lIEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnNfaAorCisjaWYgRU5BQkxFKElOU1BF
Q1RPUikKKworI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JKU1R5cGVCdWlsZGVycy5oPgor
I2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JUeXBlQnVpbGRlci5oPgorI2luY2x1ZGUgPHd0
Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKworbmFtZXNwYWNl
IEluc3BlY3RvciB7CisKKworCituYW1lc3BhY2UgVHlwZUJ1aWxkZXIgeworCisKKworLy8gVHlw
ZWRlZnMuCituYW1lc3BhY2UgUnVudGltZSB7CisvKiBVbmlxdWUgb2JqZWN0IGlkZW50aWZpZXIu
ICovCit0eXBlZGVmIGludCBSZW1vdGVPYmplY3RJZDsKK30gLy8gUnVudGltZQorLy8gRW5kIG9m
IHR5cGVkZWZzLgorCitTdHJpbmcgZ2V0VGVzdEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKTsK
KwordGVtcGxhdGU8dHlwZW5hbWUgVD4gU3RyaW5nIGdldFRlc3RFbnVtQ29uc3RhbnRWYWx1ZShU
IGVudW1WYWx1ZSkKK3sKKyAgICByZXR1cm4gZ2V0VGVzdEVudW1Db25zdGFudFZhbHVlKHN0YXRp
Y19jYXN0PGludD4oZW51bVZhbHVlKSk7Cit9CisKKworCit9IC8vIG5hbWVzcGFjZSBUeXBlQnVp
bGRlcgorCit9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQ
RUNUT1IpCisKKyNlbmRpZiAvLyAhZGVmaW5lZChJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzX2gp
CisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuaAorCisjIyMgQmVnaW4g
RmlsZTogSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpz
b24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9jb2RlZ2VuL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5o
IgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcu
aD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK25hbWVzcGFjZSBUeXBlQnVpbGRlciB7CisK
K3N0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBlbnVtX2NvbnN0YW50X3ZhbHVlc1tdID0geworfTsK
KworU3RyaW5nIGdldFRlc3RFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSkgeworICAgIHJldHVy
biBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb2RlXTsKK30KKworCisKK30gLy8gbmFtZXNwYWNlIFR5
cGVCdWlsZGVyCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxF
KElOU1BFQ1RPUikKKworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmNw
cApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uLXJlc3VsdCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBl
LWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbi1yZXN1bHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDYzYmYyYjlh
ODRkZGQ5YzFiZjU3YTE2MDY1MGMzNGI4YzU2ZDlhZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRl
Y2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbi1yZXN1bHQKQEAgLTAsMCArMSwzODggQEAKKyMjIyBC
ZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0QmFja2VuZENvbW1hbmRzLmpzCisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uCisv
LyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Y29kZWdlbi9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworLy8gRGVi
dWdnZXIuCitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRW51bSgiRGVidWdnZXIuUmVhc29uIiwg
e0RpZWQ6ICJEaWVkIiwgRmFpbnRlZDogIkZhaW50ZWQiLCBIdW5ncnk6ICJIdW5ncnkifSk7Cisj
IyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kQ29tbWFuZHMuanMKKworIyMjIEJlZ2lu
IEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbgorLy8g
YnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2Nv
ZGVnZW4vZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpZm5kZWYg
SW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVyc19oCisjZGVmaW5lIEluc3BlY3RvclRlc3RC
YWNrZW5kRGlzcGF0Y2hlcnNfaAorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUg
Ikluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuaCIKKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKwor
dHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgor
CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKworI2VuZGlmIC8vICFkZWZpbmVkKEluc3Bl
Y3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnNfaCkKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVz
dEJhY2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0QmFj
a2VuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0
eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCisKKyNpZiBFTkFCTEUoSU5TUEVD
VE9SKQorCisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oPgor
I2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworfSAvLyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorCisjIyMgRW5kIEZp
bGU6IEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxl
OiBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uCisvLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdl
bi9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2lmbmRlZiBJbnNw
ZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVyc19oCisjZGVmaW5lIEluc3BlY3RvclRlc3RGcm9u
dGVuZERpc3BhdGNoZXJzX2gKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRlICJJ
bnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmgiCisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbC5oPgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMu
aD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKK30gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKworI2VuZGlmIC8vICFkZWZp
bmVkKEluc3BlY3RvclRlc3RGcm9udGVuZERpc3BhdGNoZXJzX2gpCisjIyMgRW5kIEZpbGU6IElu
c3BlY3RvclRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IEluc3Bl
Y3RvclRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbgorLy8gYnkgdGhlIHNj
cmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2Vu
ZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgorCisjaWYg
RU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFt
ZXNwYWNlIEluc3BlY3RvciB7CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisjZW5kaWYg
Ly8gRU5BQkxFKElOU1BFQ1RPUikKKworIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0RnJvbnRl
bmREaXNwYXRjaGVycy5jcHAKKworIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RUeXBlQnVp
bGRlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hp
bmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRI
SVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0
aW9uLWFycmF5LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5CisKKyNpZm5kZWYgSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVyc19oCisjZGVm
aW5lIEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnNfaAorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikK
KworI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JKU1R5cGVCdWlsZGVycy5oPgorI2luY2x1
ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JUeXBlQnVpbGRlci5oPgorI2luY2x1ZGUgPHd0Zi9Bc3Nl
cnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKworbmFtZXNwYWNlIEluc3Bl
Y3RvciB7CisKKworCituYW1lc3BhY2UgVHlwZUJ1aWxkZXIgeworCisvLyBGb3J3YXJkIGRlY2xh
cmF0aW9ucy4KK25hbWVzcGFjZSBEZWJ1Z2dlciB7CitlbnVtIGNsYXNzIFJlYXNvbjsKK30gLy8g
RGVidWdnZXIKKy8vIEVuZCBvZiBmb3J3YXJkIGRlY2xhcmF0aW9ucy4KKworCisvLyBUeXBlZGVm
cy4KK25hbWVzcGFjZSBEZWJ1Z2dlciB7Cit0eXBlZGVmIGludCBCcmVha3BvaW50SWQ7Cit9IC8v
IERlYnVnZ2VyCisKK25hbWVzcGFjZSBSdW50aW1lIHsKK3R5cGVkZWYgaW50IE9iamVjdElkOwor
fSAvLyBSdW50aW1lCisvLyBFbmQgb2YgdHlwZWRlZnMuCisKK1N0cmluZyBnZXRUZXN0RW51bUNv
bnN0YW50VmFsdWUoaW50IGNvZGUpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBTdHJpbmcgZ2V0
VGVzdEVudW1Db25zdGFudFZhbHVlKFQgZW51bVZhbHVlKQoreworICAgIHJldHVybiBnZXRUZXN0
RW51bUNvbnN0YW50VmFsdWUoc3RhdGljX2Nhc3Q8aW50PihlbnVtVmFsdWUpKTsKK30KKworbmFt
ZXNwYWNlIERlYnVnZ2VyIHsKKy8qICAqLworZW51bSBjbGFzcyBSZWFzb24geworICAgIERpZWQg
PSAwLAorICAgIEZhaW50ZWQgPSAxLAorICAgIEh1bmdyeSA9IDIsCit9OyAvLyBlbnVtIGNsYXNz
IFJlYXNvbgorfSAvLyBEZWJ1Z2dlcgorCisKKworfSAvLyBuYW1lc3BhY2UgVHlwZUJ1aWxkZXIK
KworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9S
KQorCisjZW5kaWYgLy8gIWRlZmluZWQoSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVyc19oKQorIyMj
IEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6
IEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMs
IDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uCisvLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuaCIKKworI2lmIEVOQUJMRShJ
TlNQRUNUT1IpCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJ
bnNwZWN0b3IgeworCituYW1lc3BhY2UgVHlwZUJ1aWxkZXIgeworCitzdGF0aWMgY29uc3QgY2hh
ciogY29uc3QgZW51bV9jb25zdGFudF92YWx1ZXNbXSA9IHsKKyAgICAiRGllZCIsCisgICAgIkZh
aW50ZWQiLAorICAgICJIdW5ncnkiLAorfTsKKworU3RyaW5nIGdldFRlc3RFbnVtQ29uc3RhbnRW
YWx1ZShpbnQgY29kZSkgeworICAgIHJldHVybiBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb2RlXTsK
K30KKworCisKK30gLy8gbmFtZXNwYWNlIFR5cGVCdWlsZGVyCisKK30gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKworIyMjIEVuZCBGaWxlOiBJ
bnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24t
ZW51bS10eXBlLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24tcmVz
dWx0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmU1ZDJmYjBmZTUxOTY0NTZiN2U1NmYyMjZlMGNhYzI2OWJiOGY3ZWMK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbi1yZXN1bHQK
QEAgLTAsMCArMSwzOTQgQEAKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0QmFja2VuZENv
bW1hbmRzLmpzCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFy
YXRpb24tZW51bS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQorCisvLyBSdW50aW1lLgorSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckVu
dW0oIlJ1bnRpbWUuRmFybUFuaW1hbHMiLCB7UGlnczogIlBpZ3MiLCBDb3dzOiAiQ293cyIsIENh
dHM6ICJDYXRzIiwgSGVuczogIkhlbnMifSk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRW51
bSgiUnVudGltZS5Ud29MZWdnZWRBbmltYWxzIiwge0R1Y2tzOiAiRHVja3MiLCBIZW5zOiAiSGVu
cyIsIENyb3dzOiAiQ3Jvd3MiLCBGbGFtaW5nb3M6ICJGbGFtaW5nb3MifSk7CisjIyMgRW5kIEZp
bGU6IEluc3BlY3RvclRlc3RCYWNrZW5kQ29tbWFuZHMuanMKKworIyMjIEJlZ2luIEZpbGU6IElu
c3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uCisvLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2lmbmRlZiBJbnNwZWN0b3JU
ZXN0QmFja2VuZERpc3BhdGNoZXJzX2gKKyNkZWZpbmUgSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNw
YXRjaGVyc19oCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSAiSW5zcGVjdG9y
VGVzdFR5cGVCdWlsZGVycy5oIgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0eXBlZGVmIFN0
cmluZyBFcnJvclN0cmluZzsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAv
LyBFTkFCTEUoSU5TUEVDVE9SKQorCisjZW5kaWYgLy8gIWRlZmluZWQoSW5zcGVjdG9yVGVzdEJh
Y2tlbmREaXNwYXRjaGVyc19oKQorIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0QmFja2VuZERp
c3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0
Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFy
YXRpb24tZW51bS10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2Nv
bC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9y
VGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2lu
Y2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4KKyNpbmNsdWRlIDxp
bnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5o
PgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3Rv
cgorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKworIyMjIEVuZCBGaWxlOiBJbnNwZWN0
b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9y
VGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBV
bml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
Ky8vIERPIE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
ZnJvbSB0eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZS1p
bnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2lmbmRlZiBJbnNwZWN0b3JUZXN0RnJv
bnRlbmREaXNwYXRjaGVyc19oCisjZGVmaW5lIEluc3BlY3RvclRlc3RGcm9udGVuZERpc3BhdGNo
ZXJzX2gKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRlICJJbnNwZWN0b3JUZXN0
VHlwZUJ1aWxkZXJzLmgiCisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2hh
bm5lbC5oPgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4KKyNpbmNsdWRl
IDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCitu
YW1lc3BhY2UgSW5zcGVjdG9yIHsKKworCisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisj
ZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKworI2VuZGlmIC8vICFkZWZpbmVkKEluc3BlY3Rv
clRlc3RGcm9udGVuZERpc3BhdGNoZXJzX2gpCisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RG
cm9udGVuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RGcm9u
dGVuZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0
eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZS1pbnNwZWN0
b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
Ikluc3BlY3RvclRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCisKKyNpZiBFTkFCTEUoSU5TUEVD
VE9SKQorCisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVj
dG9yIHsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5T
UEVDVE9SKQorCisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RGcm9udGVuZERpc3BhdGNoZXJz
LmNwcAorCisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5oCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tZW51bS10eXBl
Lmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQor
CisjaWZuZGVmIEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnNfaAorI2RlZmluZSBJbnNwZWN0b3JU
ZXN0VHlwZUJ1aWxkZXJzX2gKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRlIDxp
bnNwZWN0b3IvSW5zcGVjdG9ySlNUeXBlQnVpbGRlcnMuaD4KKyNpbmNsdWRlIDxpbnNwZWN0b3Iv
SW5zcGVjdG9yVHlwZUJ1aWxkZXIuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2lu
Y2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKwor
bmFtZXNwYWNlIFR5cGVCdWlsZGVyIHsKKworLy8gRm9yd2FyZCBkZWNsYXJhdGlvbnMuCituYW1l
c3BhY2UgUnVudGltZSB7CitlbnVtIGNsYXNzIEZhcm1BbmltYWxzOworZW51bSBjbGFzcyBUd29M
ZWdnZWRBbmltYWxzOworfSAvLyBSdW50aW1lCisvLyBFbmQgb2YgZm9yd2FyZCBkZWNsYXJhdGlv
bnMuCisKKworCisKK1N0cmluZyBnZXRUZXN0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpOwor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBTdHJpbmcgZ2V0VGVzdEVudW1Db25zdGFudFZhbHVlKFQg
ZW51bVZhbHVlKQoreworICAgIHJldHVybiBnZXRUZXN0RW51bUNvbnN0YW50VmFsdWUoc3RhdGlj
X2Nhc3Q8aW50PihlbnVtVmFsdWUpKTsKK30KKworbmFtZXNwYWNlIFJ1bnRpbWUgeworLyogICov
CitlbnVtIGNsYXNzIEZhcm1BbmltYWxzIHsKKyAgICBQaWdzID0gMCwKKyAgICBDb3dzID0gMSwK
KyAgICBDYXRzID0gMiwKKyAgICBIZW5zID0gMywKK307IC8vIGVudW0gY2xhc3MgRmFybUFuaW1h
bHMKKy8qICAqLworZW51bSBjbGFzcyBUd29MZWdnZWRBbmltYWxzIHsKKyAgICBEdWNrcyA9IDQs
CisgICAgSGVucyA9IDMsCisgICAgQ3Jvd3MgPSA1LAorICAgIEZsYW1pbmdvcyA9IDYsCit9OyAv
LyBlbnVtIGNsYXNzIFR3b0xlZ2dlZEFuaW1hbHMKK30gLy8gUnVudGltZQorCisKKworfSAvLyBu
YW1lc3BhY2UgVHlwZUJ1aWxkZXIKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRp
ZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorCisjZW5kaWYgLy8gIWRlZmluZWQoSW5zcGVjdG9yVGVz
dFR5cGVCdWlsZGVyc19oKQorIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJz
LmgKKworIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuY3BwCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tZW51bS10eXBl
Lmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVy
cy5oIgorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJp
bmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKK25hbWVzcGFjZSBUeXBlQnVpbGRlciB7
CisKK3N0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBlbnVtX2NvbnN0YW50X3ZhbHVlc1tdID0gewor
ICAgICJQaWdzIiwKKyAgICAiQ293cyIsCisgICAgIkNhdHMiLAorICAgICJIZW5zIiwKKyAgICAi
RHVja3MiLAorICAgICJDcm93cyIsCisgICAgIkZsYW1pbmdvcyIsCit9OworCitTdHJpbmcgZ2V0
VGVzdEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKSB7CisgICAgcmV0dXJuIGVudW1fY29uc3Rh
bnRfdmFsdWVzW2NvZGVdOworfQorCisKKworfSAvLyBuYW1lc3BhY2UgVHlwZUJ1aWxkZXIKKwor
fSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQor
CisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuY3BwCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQv
dHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9u
LW9iamVjdC10eXBlLmpzb24tcmVzdWx0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJlOGNjZmU4MzE0OWM0MjBiNGZm
NzNiNjA5NzVkZGNlMWJjOGM5ZGEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1v
YmplY3QtdHlwZS5qc29uLXJlc3VsdApAQCAtMCwwICsxLDkwMCBAQAorIyMjIEJlZ2luIEZpbGU6
IEluc3BlY3RvclRlc3RCYWNrZW5kQ29tbWFuZHMuanMKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
MywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCisvLyBieSB0aGUg
c2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9n
ZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworLy8gVGVzdC4KK0luc3Bl
Y3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJUZXN0LmF0dGVtcHRDdXJzZSIsIFt7Im5hbWUi
OiAiY3Vyc2UiLCAidHlwZSI6ICJvYmplY3QiLCAib3B0aW9uYWwiOiBmYWxzZX1dLCBbImNlbnNv
cmVkQ3Vyc2UiXSk7CisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kQ29tbWFuZHMu
anMKKworIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5PVCBFRElUIFRISVMgRklMRS4g
SXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBlLWRlY2xhcmF0aW9uLW9iamVj
dC10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5n
cy5weQorCisjaWZuZGVmIEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnNfaAorI2RlZmlu
ZSBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzX2gKKworI2lmIEVOQUJMRShJTlNQRUNU
T1IpCisKKyNpbmNsdWRlICJJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzLmgiCisjaW5jbHVkZSA8
aW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8d3RmL1Bh
c3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNl
IEluc3BlY3RvciB7CisKK3R5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCitjbGFzcyBJbnNw
ZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFs
IHZvaWQgYXR0ZW1wdEN1cnNlKEVycm9yU3RyaW5nKiwgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6
SW5zcGVjdG9yT2JqZWN0PiYgaW5fY3Vyc2UsIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6Ok9wdE91
dHB1dDxTdHJpbmc+KiBvcHRfb3V0X2NlbnNvcmVkQ3Vyc2UpID0gMDsKK3Byb3RlY3RlZDoKKyAg
ICB2aXJ0dWFsIH5JbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCk7Cit9Owor
CitjbGFzcyBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgSW5z
cGVjdG9yOjpJbnNwZWN0b3JTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7CitwdWJsaWM6
CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVyPiBj
cmVhdGUoSW5zcGVjdG9yOjpJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlciosIEluc3BlY3RvclRl
c3RCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2go
bG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6
SW5zcGVjdG9yT2JqZWN0PiBtZXNzYWdlKSBvdmVycmlkZTsKK3ByaXZhdGU6CisgICAgdm9pZCBh
dHRlbXB0Q3Vyc2UobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0
JiBtZXNzYWdlKTsKK3ByaXZhdGU6CisgICAgSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVy
KEluc3BlY3Rvcjo6SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIqLCBJbnNwZWN0b3JUZXN0QmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyKik7CisgICAgSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRj
aGVySGFuZGxlciogbV9hZ2VudDsKK307CisKK30gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgorCisj
ZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKKworI2VuZGlmIC8vICFkZWZpbmVkKEluc3BlY3Rv
clRlc3RCYWNrZW5kRGlzcGF0Y2hlcnNfaCkKKyMjIyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdEJh
Y2tlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0QmFja2Vu
ZERpc3BhdGNoZXJzLmNwcAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5
IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERPIE5P
VCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0eXBl
LWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlLWluc3BlY3Rv
ci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
SW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgorCisjaWYgRU5BQkxFKElOU1BFQ1RP
UikKKworI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4KKyNp
bmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworSW5zcGVjdG9yVGVzdEJhY2tl
bmREaXNwYXRjaGVySGFuZGxlcjo6fkluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXIoKSB7IH0KKworUGFzc1JlZlB0cjxJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXI+IElu
c3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKEluc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlciwgSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVy
SGFuZGxlciogYWdlbnQpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnNwZWN0b3JUZXN0
QmFja2VuZERpc3BhdGNoZXIoYmFja2VuZERpc3BhdGNoZXIsIGFnZW50KSk7Cit9CisKK0luc3Bl
Y3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcjo6SW5zcGVjdG9yVGVzdEJhY2tlbmREaXNwYXRjaGVy
KEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlciwgSW5zcGVjdG9y
VGVzdEJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCisgICAgOiBJbnNwZWN0b3JTdXBw
bGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlcikKKyAgICAsIG1fYWdl
bnQoYWdlbnQpCit7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRjaGVy
Rm9yRG9tYWluKEFTQ0lJTGl0ZXJhbCgiVGVzdCIpLCB0aGlzKTsKK30KKwordm9pZCBJbnNwZWN0
b3JUZXN0QmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgY2FsbElkLCBjb25zdCBTdHJp
bmcmIG1ldGhvZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1lc3NhZ2UpCit7CisgICAg
UmVmPEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7CisKKyAg
ICBpZiAobWV0aG9kID09ICJhdHRlbXB0Q3Vyc2UiKQorICAgICAgICBhdHRlbXB0Q3Vyc2UoY2Fs
bElkLCAqbWVzc2FnZS5nZXQoKSk7CisgICAgZWxzZQorICAgICAgICBtX2JhY2tlbmREaXNwYXRj
aGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIEluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyOjpNZXRob2ROb3RGb3VuZCwgU3RyaW5nKCInIikgKyAiVGVzdCIgKyAnLicgKyBtZXRob2Qg
KyAiJyB3YXMgbm90IGZvdW5kIik7Cit9CisKK3ZvaWQgSW5zcGVjdG9yVGVzdEJhY2tlbmREaXNw
YXRjaGVyOjphdHRlbXB0Q3Vyc2UobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYg
bWVzc2FnZSkKK3sKKyAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3RvY29sRXJyb3JzID0g
SW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBh
cmFtc0NvbnRhaW5lciA9IG1lc3NhZ2UuZ2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicGFyYW1zIikp
OworICAgIEluc3BlY3Rvck9iamVjdCogcGFyYW1zQ29udGFpbmVyUHRyID0gcGFyYW1zQ29udGFp
bmVyLmdldCgpOworICAgIEluc3BlY3RvckFycmF5KiBwcm90b2NvbEVycm9yc1B0ciA9IHByb3Rv
Y29sRXJyb3JzLmdldCgpOworICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4g
aW5fY3Vyc2UgPSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0T2JqZWN0KHBhcmFtc0Nv
bnRhaW5lclB0ciwgQVNDSUlMaXRlcmFsKCJjdXJzZSIpLCBudWxscHRyLCBwcm90b2NvbEVycm9y
c1B0cik7CisgICAgaWYgKHByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgeworICAgICAgICBTdHJp
bmcgZXJyb3JNZXNzYWdlID0gU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhv
ZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJUZXN0LmF0dGVtcHRDdXJzZSIpOworICAgICAg
ICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIEluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCBlcnJvck1lc3NhZ2UsIHByb3Rv
Y29sRXJyb3JzLnJlbGVhc2UoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBFcnJv
clN0cmluZyBlcnJvcjsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNw
ZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6Ok9wdE91
dHB1dDxTdHJpbmc+IG91dF9jZW5zb3JlZEN1cnNlOworICAgIG1fYWdlbnQtPmF0dGVtcHRDdXJz
ZSgmZXJyb3IsIGluX2N1cnNlLCAmb3V0X2NlbnNvcmVkQ3Vyc2UpOworCisgICAgaWYgKCFlcnJv
ci5sZW5ndGgoKSkKKyAgICAgICAgaWYgKG91dF9jZW5zb3JlZEN1cnNlLmlzQXNzaWduZWQoKSkK
KyAgICAgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgiY2Vuc29yZWRDdXJz
ZSIpLCBvdXRfY2Vuc29yZWRDdXJzZS5nZXRWYWx1ZSgpKTsKKworICAgIG1fYmFja2VuZERpc3Bh
dGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIHJlc3VsdC5yZWxlYXNlKCksIGVycm9yKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9S
KQorCisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisK
KyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBp
cyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5
cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5
CisKKyNpZm5kZWYgSW5zcGVjdG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnNfaAorI2RlZmluZSBJ
bnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVyc19oCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9S
KQorCisjaW5jbHVkZSAiSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5oIgorI2luY2x1ZGUgPGlu
c3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4KKyNpbmNsdWRlIDxpbnNwZWN0b3Iv
SW5zcGVjdG9yVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCit9
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisK
KyNlbmRpZiAvLyAhZGVmaW5lZChJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVyc19oKQor
IyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisKKyMjIyBC
ZWdpbiBGaWxlOiBJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5q
c29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvY29kZWdlbi9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkluc3BlY3RvclRlc3RGcm9udGVuZERpc3Bh
dGNoZXJzLmgiCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorCisjIyMgRW5kIEZpbGU6IElu
c3BlY3RvclRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogSW5z
cGVjdG9yVGVzdFR5cGVCdWlsZGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVu
aXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
Ly8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBm
cm9tIHR5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbgorLy8gYnkgdGhlIHNjcmlwdDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGUt
aW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpZm5kZWYgSW5zcGVjdG9yVGVzdFR5
cGVCdWlsZGVyc19oCisjZGVmaW5lIEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnNfaAorCisjaWYg
RU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JKU1R5cGVC
dWlsZGVycy5oPgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JUeXBlQnVpbGRlci5oPgor
I2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4K
KworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCituYW1lc3BhY2UgVHlwZUJ1aWxkZXIgewor
CisvLyBGb3J3YXJkIGRlY2xhcmF0aW9ucy4KKyNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQorbmFt
ZXNwYWNlIERhdGFiYXNlIHsKK2NsYXNzIER1bW15T2JqZWN0OworY2xhc3MgRXJyb3I7CitjbGFz
cyBPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzOworY2xhc3MgT3B0aW9uYWxQYXJhbWV0
ZXJCdW5kbGU7CitjbGFzcyBQYXJhbWV0ZXJCdW5kbGU7Cit9IC8vIERhdGFiYXNlCisjZW5kaWYg
Ly8gRU5BQkxFKFNRTF9EQVRBQkFTRSkKKworbmFtZXNwYWNlIFRlc3QgeworY2xhc3MgSGFwcHlO
YW1lOworY2xhc3MgUGFyYW1ldGVyQnVuZGxlOworfSAvLyBUZXN0CisvLyBFbmQgb2YgZm9yd2Fy
ZCBkZWNsYXJhdGlvbnMuCisKKworCisKK1N0cmluZyBnZXRUZXN0RW51bUNvbnN0YW50VmFsdWUo
aW50IGNvZGUpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBTdHJpbmcgZ2V0VGVzdEVudW1Db25z
dGFudFZhbHVlKFQgZW51bVZhbHVlKQoreworICAgIHJldHVybiBnZXRUZXN0RW51bUNvbnN0YW50
VmFsdWUoc3RhdGljX2Nhc3Q8aW50PihlbnVtVmFsdWUpKTsKK30KKworI2lmIEVOQUJMRShTUUxf
REFUQUJBU0UpCituYW1lc3BhY2UgRGF0YWJhc2UgeworLyogRGF0YWJhc2UgZXJyb3IuICovCitj
bGFzcyBFcnJvciA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdEJhc2UgeworcHVi
bGljOgorICAgIGVudW0geworICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCisgICAgICAgIE1lc3Nh
Z2VTZXQgPSAxIDw8IDAsCisgICAgICAgIENvZGVTZXQgPSAxIDw8IDEsCisgICAgICAgIEFsbEZp
ZWxkc1NldCA9IChNZXNzYWdlU2V0IHwgQ29kZVNldCkKKyAgICB9OworCisgICAgdGVtcGxhdGU8
aW50IFNUQVRFPgorICAgIGNsYXNzIEJ1aWxkZXIgeworICAgIHByaXZhdGU6CisgICAgICAgIFJl
ZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CisKKyAgICAgICAgdGVt
cGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUg
fCBTVEVQPio+KHRoaXMpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRy
PC8qRXJyb3IqL0luc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBwdHIpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2Ny
ZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOworICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7Cisg
ICAgICAgIH0KKyAgICAgICAgZnJpZW5kIGNsYXNzIEVycm9yOworICAgIHB1YmxpYzoKKworICAg
ICAgICBCdWlsZGVyPFNUQVRFIHwgTWVzc2FnZVNldD4mIHNldE1lc3NhZ2UoY29uc3QgU3RyaW5n
JiB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAm
IE1lc3NhZ2VTZXQpLCBwcm9wZXJ0eV9tZXNzYWdlX2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAg
IG1fcmVzdWx0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJtZXNzYWdlIiksIHZhbHVlKTsKKyAg
ICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TWVzc2FnZVNldD4oKTsKKyAgICAgICAgfQorCisg
ICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDb2RlU2V0PiYgc2V0Q29kZShpbnQgdmFsdWUpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBDb2RlU2V0KSwgcHJv
cGVydHlfY29kZV9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVy
KEFTQ0lJTGl0ZXJhbCgiY29kZSIpLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0
YXRlPENvZGVTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBvcGVyYXRvciBSZWZQdHI8RXJy
b3I+JiAoKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBB
bGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOworICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoc2l6ZW9mKEVycm9yKSA9PSBzaXplb2YoSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Qp
LCBjYW5ub3RfY2FzdCk7CisgICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVm
UHRyPEVycm9yPio+KCZtX3Jlc3VsdCk7CisgICAgICAgIH0KKworICAgICAgICBQYXNzUmVmUHRy
PEVycm9yPiByZWxlYXNlKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxF
cnJvcj4oKnRoaXMpLnJlbGVhc2UoKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICAvKgorICAg
ICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKKyAgICAgKiBSZWZQdHI8RXJyb3I+IHJlc3VsdCA9
IEVycm9yOjpjcmVhdGUoKQorICAgICAqICAgICAuc2V0TWVzc2FnZSguLi4pCisgICAgICogICAg
IC5zZXRDb2RlKC4uLik7CisgICAgICovCisgICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+
IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSW5z
cGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpKTsKKyAgICB9CisgICAgdHlwZWRlZiBJ
bnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpTdHJ1Y3RJdGVtVHJhaXRzIEl0ZW1UcmFpdHM7Cit9Owor
CitjbGFzcyBPcHRpb25hbFBhcmFtZXRlckJ1bmRsZSA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3Bl
Y3Rvck9iamVjdEJhc2UgeworcHVibGljOgorICAgIGVudW0geworICAgICAgICBOb0ZpZWxkc1Nl
dCA9IDAsCisgICAgICAgIEFsbEZpZWxkc1NldCA9IDAKKyAgICB9OworCisgICAgdGVtcGxhdGU8
aW50IFNUQVRFPgorICAgIGNsYXNzIEJ1aWxkZXIgeworICAgIHByaXZhdGU6CisgICAgICAgIFJl
ZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CisKKyAgICAgICAgdGVt
cGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUg
fCBTVEVQPio+KHRoaXMpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRy
PC8qT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGUqL0luc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBw
dHIpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmll
bGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOworICAgICAgICAgICAg
bV9yZXN1bHQgPSBwdHI7CisgICAgICAgIH0KKyAgICAgICAgZnJpZW5kIGNsYXNzIE9wdGlvbmFs
UGFyYW1ldGVyQnVuZGxlOworICAgIHB1YmxpYzoKKworICAgICAgICBvcGVyYXRvciBSZWZQdHI8
T3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU+JiAoKQorICAgICAgICB7CisgICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwor
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKE9wdGlvbmFsUGFyYW1ldGVyQnVuZGxl
KSA9PSBzaXplb2YoSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QpLCBjYW5ub3RfY2FzdCk7Cisg
ICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPE9wdGlvbmFsUGFyYW1l
dGVyQnVuZGxlPio+KCZtX3Jlc3VsdCk7CisgICAgICAgIH0KKworICAgICAgICBQYXNzUmVmUHRy
PE9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlPiByZWxlYXNlKCkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIFJlZlB0cjxPcHRpb25hbFBhcmFtZXRlckJ1bmRsZT4oKnRoaXMpLnJlbGVhc2Uo
KTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICAvKgorICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1
Y3RvcjoKKyAgICAgKiBSZWZQdHI8T3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU+IHJlc3VsdCA9IE9w
dGlvbmFsUGFyYW1ldGVyQnVuZGxlOjpjcmVhdGUoKTsKKyAgICAgKi8KKyAgICBzdGF0aWMgQnVp
bGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBCdWlsZGVy
PE5vRmllbGRzU2V0PihJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkpOworICAg
IH0KKyAgICB0eXBlZGVmIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlN0cnVjdEl0ZW1UcmFpdHMg
SXRlbVRyYWl0czsKKworICAgIHZvaWQgc2V0Q29sdW1uTmFtZXMoUGFzc1JlZlB0cjxJbnNwZWN0
b3I6OlR5cGVCdWlsZGVyOjpBcnJheTxTdHJpbmc+PiB2YWx1ZSkKKyAgICB7CisgICAgICAgIElu
c3BlY3Rvck9iamVjdEJhc2U6OnNldEFycmF5KEFTQ0lJTGl0ZXJhbCgiY29sdW1uTmFtZXMiKSwg
dmFsdWUpOworICAgIH0KKworICAgIHZvaWQgc2V0Tm90ZXMoY29uc3QgU3RyaW5nJiB2YWx1ZSkK
KyAgICB7CisgICAgICAgIEluc3BlY3Rvck9iamVjdEJhc2U6OnNldFN0cmluZyhBU0NJSUxpdGVy
YWwoIm5vdGVzIiksIHZhbHVlKTsKKyAgICB9CisKKyAgICB2b2lkIHNldFRpbWVzdGFtcChkb3Vi
bGUgdmFsdWUpCisgICAgeworICAgICAgICBJbnNwZWN0b3JPYmplY3RCYXNlOjpzZXROdW1iZXIo
QVNDSUlMaXRlcmFsKCJ0aW1lc3RhbXAiKSwgdmFsdWUpOworICAgIH0KKworICAgIHZvaWQgc2V0
VmFsdWVzKFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQorICAg
IHsKKyAgICAgICAgSW5zcGVjdG9yT2JqZWN0QmFzZTo6c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgi
dmFsdWVzIiksIHZhbHVlKTsKKyAgICB9CisKKyAgICB2b2lkIHNldFBheWxvYWQoUGFzc1JlZlB0
cjxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiB2YWx1ZSkKKyAgICB7CisgICAgICAgIEluc3Bl
Y3Rvck9iamVjdEJhc2U6OnNldFZhbHVlKEFTQ0lJTGl0ZXJhbCgicGF5bG9hZCIpLCB2YWx1ZSk7
CisgICAgfQorCisgICAgdm9pZCBzZXRFcnJvcihQYXNzUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1
aWxkZXI6OkRhdGFiYXNlOjpFcnJvcj4gdmFsdWUpCisgICAgeworICAgICAgICBJbnNwZWN0b3JP
YmplY3RCYXNlOjpzZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJlcnJvciIpLCB2YWx1ZSk7CisgICAg
fQorfTsKKworY2xhc3MgUGFyYW1ldGVyQnVuZGxlIDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVj
dG9yT2JqZWN0QmFzZSB7CitwdWJsaWM6CisgICAgZW51bSB7CisgICAgICAgIE5vRmllbGRzU2V0
ID0gMCwKKyAgICAgICAgQ29sdW1uTmFtZXNTZXQgPSAxIDw8IDAsCisgICAgICAgIE5vdGVzU2V0
ID0gMSA8PCAxLAorICAgICAgICBUaW1lc3RhbXBTZXQgPSAxIDw8IDIsCisgICAgICAgIFZhbHVl
c1NldCA9IDEgPDwgMywKKyAgICAgICAgUGF5bG9hZFNldCA9IDEgPDwgNCwKKyAgICAgICAgRXJy
b3JTZXQgPSAxIDw8IDUsCisgICAgICAgIEFsbEZpZWxkc1NldCA9IChDb2x1bW5OYW1lc1NldCB8
IE5vdGVzU2V0IHwgVGltZXN0YW1wU2V0IHwgVmFsdWVzU2V0IHwgUGF5bG9hZFNldCB8IEVycm9y
U2V0KQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CisgICAgY2xhc3MgQnVpbGRl
ciB7CisgICAgcHJpdmF0ZToKKyAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2Jq
ZWN0PiBtX3Jlc3VsdDsKKworICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFU
RSB8IFNURVA+JiBjYXN0U3RhdGUoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gKnJl
aW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CisgICAgICAgIH0K
KworICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8LypQYXJhbWV0ZXJCdW5kbGUqL0luc3BlY3Rv
cjo6SW5zcGVjdG9yT2JqZWN0PiBwdHIpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRf
c3RhdGUpOworICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CisgICAgICAgIH0KKyAgICAgICAg
ZnJpZW5kIGNsYXNzIFBhcmFtZXRlckJ1bmRsZTsKKyAgICBwdWJsaWM6CisKKyAgICAgICAgQnVp
bGRlcjxTVEFURSB8IENvbHVtbk5hbWVzU2V0PiYgc2V0Q29sdW1uTmFtZXMoUGFzc1JlZlB0cjxJ
bnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheTxTdHJpbmc+PiB2YWx1ZSkKKyAgICAgICAgewor
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIENvbHVtbk5hbWVzU2V0KSwgcHJv
cGVydHlfY29sdW1uTmFtZXNfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNl
dEFycmF5KEFTQ0lJTGl0ZXJhbCgiY29sdW1uTmFtZXMiKSwgdmFsdWUpOworICAgICAgICAgICAg
cmV0dXJuIGNhc3RTdGF0ZTxDb2x1bW5OYW1lc1NldD4oKTsKKyAgICAgICAgfQorCisgICAgICAg
IEJ1aWxkZXI8U1RBVEUgfCBOb3Rlc1NldD4mIHNldE5vdGVzKGNvbnN0IFN0cmluZyYgdmFsdWUp
CisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBOb3Rlc1Nl
dCksIHByb3BlcnR5X25vdGVzX2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5z
ZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJub3RlcyIpLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1
cm4gY2FzdFN0YXRlPE5vdGVzU2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcjxT
VEFURSB8IFRpbWVzdGFtcFNldD4mIHNldFRpbWVzdGFtcChkb3VibGUgdmFsdWUpCisgICAgICAg
IHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBUaW1lc3RhbXBTZXQpLCBw
cm9wZXJ0eV90aW1lc3RhbXBfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNl
dE51bWJlcihBU0NJSUxpdGVyYWwoInRpbWVzdGFtcCIpLCB2YWx1ZSk7CisgICAgICAgICAgICBy
ZXR1cm4gY2FzdFN0YXRlPFRpbWVzdGFtcFNldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1
aWxkZXI8U1RBVEUgfCBWYWx1ZXNTZXQ+JiBzZXRWYWx1ZXMoUGFzc1JlZlB0cjxJbnNwZWN0b3I6
Okluc3BlY3Rvck9iamVjdD4gdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKCEoU1RBVEUgJiBWYWx1ZXNTZXQpLCBwcm9wZXJ0eV92YWx1ZXNfYWxyZWFkeV9zZXQp
OworICAgICAgICAgICAgbV9yZXN1bHQtPnNldE9iamVjdChBU0NJSUxpdGVyYWwoInZhbHVlcyIp
LCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFZhbHVlc1NldD4oKTsKKyAg
ICAgICAgfQorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBQYXlsb2FkU2V0PiYgc2V0UGF5bG9h
ZChQYXNzUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+IHZhbHVlKQorICAgICAgICB7
CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgUGF5bG9hZFNldCksIHByb3Bl
cnR5X3BheWxvYWRfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldFZhbHVl
KEFTQ0lJTGl0ZXJhbCgicGF5bG9hZCIpLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2Fz
dFN0YXRlPFBheWxvYWRTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyPFNUQVRF
IHwgRXJyb3JTZXQ+JiBzZXRFcnJvcihQYXNzUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6
OkRhdGFiYXNlOjpFcnJvcj4gdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKCEoU1RBVEUgJiBFcnJvclNldCksIHByb3BlcnR5X2Vycm9yX2FscmVhZHlfc2V0KTsK
KyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJlcnJvciIpLCB2
YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEVycm9yU2V0PigpOworICAgICAg
ICB9CisKKyAgICAgICAgb3BlcmF0b3IgUmVmUHRyPFBhcmFtZXRlckJ1bmRsZT4mICgpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwg
cmVzdWx0X2lzX25vdF9yZWFkeSk7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2Yo
UGFyYW1ldGVyQnVuZGxlKSA9PSBzaXplb2YoSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QpLCBj
YW5ub3RfY2FzdCk7CisgICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRy
PFBhcmFtZXRlckJ1bmRsZT4qPigmbV9yZXN1bHQpOworICAgICAgICB9CisKKyAgICAgICAgUGFz
c1JlZlB0cjxQYXJhbWV0ZXJCdW5kbGU+IHJlbGVhc2UoKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gUmVmUHRyPFBhcmFtZXRlckJ1bmRsZT4oKnRoaXMpLnJlbGVhc2UoKTsKKyAgICAg
ICAgfQorICAgIH07CisKKyAgICAvKgorICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKKyAg
ICAgKiBSZWZQdHI8UGFyYW1ldGVyQnVuZGxlPiByZXN1bHQgPSBQYXJhbWV0ZXJCdW5kbGU6OmNy
ZWF0ZSgpCisgICAgICogICAgIC5zZXRDb2x1bW5OYW1lcyguLi4pCisgICAgICogICAgIC5zZXRO
b3RlcyguLi4pCisgICAgICogICAgIC5zZXRUaW1lc3RhbXAoLi4uKQorICAgICAqICAgICAuc2V0
VmFsdWVzKC4uLikKKyAgICAgKiAgICAgLnNldFBheWxvYWQoLi4uKQorICAgICAqICAgICAuc2V0
RXJyb3IoLi4uKTsKKyAgICAgKi8KKyAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3Jl
YXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihJbnNwZWN0
b3I6Okluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkpOworICAgIH0KKyAgICB0eXBlZGVmIEluc3Bl
Y3Rvcjo6VHlwZUJ1aWxkZXI6OlN0cnVjdEl0ZW1UcmFpdHMgSXRlbVRyYWl0czsKK307CisKKy8q
IENvbmZsaWN0ZWQgbmFtZXMgbWF5IGNhdXNlIGdlbmVyYXRlZCBnZXR0ZXJzL3NldHRlcnMgdG8g
Y2xhc2ggd2l0aCBidWlsdC1pbiBJbnNwZWN0b3JPYmplY3QgbWV0aG9kcy4gKi8KK2NsYXNzIE9i
amVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHMgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0
b3JPYmplY3RCYXNlIHsKK3B1YmxpYzoKKyAgICBlbnVtIHsKKyAgICAgICAgTm9GaWVsZHNTZXQg
PSAwLAorICAgICAgICBJbnRlZ2VyU2V0ID0gMSA8PCAwLAorICAgICAgICBBcnJheVNldCA9IDEg
PDwgMSwKKyAgICAgICAgU3RyaW5nU2V0ID0gMSA8PCAyLAorICAgICAgICBWYWx1ZVNldCA9IDEg
PDwgMywKKyAgICAgICAgT2JqZWN0U2V0ID0gMSA8PCA0LAorICAgICAgICBBbGxGaWVsZHNTZXQg
PSAoSW50ZWdlclNldCB8IEFycmF5U2V0IHwgU3RyaW5nU2V0IHwgVmFsdWVTZXQgfCBPYmplY3RT
ZXQpCisgICAgfTsKKworICAgIHRlbXBsYXRlPGludCBTVEFURT4KKyAgICBjbGFzcyBCdWlsZGVy
IHsKKyAgICBwcml2YXRlOgorICAgICAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmpl
Y3Q+IG1fcmVzdWx0OworCisgICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRF
IHwgU1RFUD4mIGNhc3RTdGF0ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAqcmVp
bnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKKyAgICAgICAgfQor
CisgICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjwvKk9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25m
bGljdHMqL0luc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBwdHIpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0
ZWRfaW5fbm9uX2luaXRfc3RhdGUpOworICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CisgICAg
ICAgIH0KKyAgICAgICAgZnJpZW5kIGNsYXNzIE9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGlj
dHM7CisgICAgcHVibGljOgorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBJbnRlZ2VyU2V0PiYg
c2V0SW50ZWdlcihjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBD
T01QSUxFX0FTU0VSVCghKFNUQVRFICYgSW50ZWdlclNldCksIHByb3BlcnR5X2ludGVnZXJfYWxy
ZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwo
ImludGVnZXIiKSwgdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxJbnRlZ2Vy
U2V0PigpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IEFycmF5U2V0PiYg
c2V0QXJyYXkoY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoIShTVEFURSAmIEFycmF5U2V0KSwgcHJvcGVydHlfYXJyYXlfYWxyZWFkeV9z
ZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoImFycmF5
IiksIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8QXJyYXlTZXQ+KCk7Cisg
ICAgICAgIH0KKworICAgICAgICBCdWlsZGVyPFNUQVRFIHwgU3RyaW5nU2V0PiYgc2V0U3RyaW5n
KGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKCEoU1RBVEUgJiBTdHJpbmdTZXQpLCBwcm9wZXJ0eV9zdHJpbmdfYWxyZWFkeV9zZXQpOwor
ICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInN0cmluZyIpLCB2
YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFN0cmluZ1NldD4oKTsKKyAgICAg
ICAgfQorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBWYWx1ZVNldD4mIHNldFZhbHVlKGNvbnN0
IFN0cmluZyYgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEo
U1RBVEUgJiBWYWx1ZVNldCksIHByb3BlcnR5X3ZhbHVlX2FscmVhZHlfc2V0KTsKKyAgICAgICAg
ICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJ2YWx1ZSIpLCB2YWx1ZSk7Cisg
ICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFZhbHVlU2V0PigpOworICAgICAgICB9CisKKyAg
ICAgICAgQnVpbGRlcjxTVEFURSB8IE9iamVjdFNldD4mIHNldE9iamVjdChjb25zdCBTdHJpbmcm
IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYg
T2JqZWN0U2V0KSwgcHJvcGVydHlfb2JqZWN0X2FscmVhZHlfc2V0KTsKKyAgICAgICAgICAgIG1f
cmVzdWx0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJvYmplY3QiKSwgdmFsdWUpOworICAgICAg
ICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxPYmplY3RTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAg
ICBvcGVyYXRvciBSZWZQdHI8T2JqZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0cz4mICgpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1Nl
dCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXpl
b2YoT2JqZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0cykgPT0gc2l6ZW9mKEluc3BlY3Rvcjo6
SW5zcGVjdG9yT2JqZWN0KSwgY2Fubm90X2Nhc3QpOworICAgICAgICAgICAgcmV0dXJuICpyZWlu
dGVycHJldF9jYXN0PFJlZlB0cjxPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzPio+KCZt
X3Jlc3VsdCk7CisgICAgICAgIH0KKworICAgICAgICBQYXNzUmVmUHRyPE9iamVjdFdpdGhQcm9w
ZXJ0eU5hbWVDb25mbGljdHM+IHJlbGVhc2UoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gUmVmUHRyPE9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHM+KCp0aGlzKS5yZWxlYXNl
KCk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgLyoKKyAgICAgKiBTeW50aGV0aWMgY29uc3Ry
dWN0b3I6CisgICAgICogUmVmUHRyPE9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHM+IHJl
c3VsdCA9IE9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHM6OmNyZWF0ZSgpCisgICAgICog
ICAgIC5zZXRJbnRlZ2VyKC4uLikKKyAgICAgKiAgICAgLnNldEFycmF5KC4uLikKKyAgICAgKiAg
ICAgLnNldFN0cmluZyguLi4pCisgICAgICogICAgIC5zZXRWYWx1ZSguLi4pCisgICAgICogICAg
IC5zZXRPYmplY3QoLi4uKTsKKyAgICAgKi8KKyAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1Nl
dD4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihJ
bnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkpOworICAgIH0KKyAgICB0eXBlZGVm
IEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlN0cnVjdEl0ZW1UcmFpdHMgSXRlbVRyYWl0czsKK307
CisKK30gLy8gRGF0YWJhc2UKKyNlbmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQorCituYW1l
c3BhY2UgVGVzdCB7CitjbGFzcyBQYXJhbWV0ZXJCdW5kbGUgOiBwdWJsaWMgSW5zcGVjdG9yOjpJ
bnNwZWN0b3JPYmplY3RCYXNlIHsKK3B1YmxpYzoKKyAgICBlbnVtIHsKKyAgICAgICAgTm9GaWVs
ZHNTZXQgPSAwLAorICAgICAgICBDb2x1bW5OYW1lc1NldCA9IDEgPDwgMCwKKyAgICAgICAgTm90
ZXNTZXQgPSAxIDw8IDEsCisgICAgICAgIFRpbWVzdGFtcFNldCA9IDEgPDwgMiwKKyAgICAgICAg
VmFsdWVzU2V0ID0gMSA8PCAzLAorICAgICAgICBQYXlsb2FkU2V0ID0gMSA8PCA0LAorICAgICAg
ICBFcnJvclNldCA9IDEgPDwgNSwKKyAgICAgICAgQWxsRmllbGRzU2V0ID0gKENvbHVtbk5hbWVz
U2V0IHwgTm90ZXNTZXQgfCBUaW1lc3RhbXBTZXQgfCBWYWx1ZXNTZXQgfCBQYXlsb2FkU2V0IHwg
RXJyb3JTZXQpCisgICAgfTsKKworICAgIHRlbXBsYXRlPGludCBTVEFURT4KKyAgICBjbGFzcyBC
dWlsZGVyIHsKKyAgICBwcml2YXRlOgorICAgICAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0
b3JPYmplY3Q+IG1fcmVzdWx0OworCisgICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVy
PFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKKyAgICAg
ICAgfQorCisgICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjwvKlBhcmFtZXRlckJ1bmRsZSovSW5z
cGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IHB0cikKKyAgICAgICAgeworICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25f
aW5pdF9zdGF0ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKKyAgICAgICAgfQorICAg
ICAgICBmcmllbmQgY2xhc3MgUGFyYW1ldGVyQnVuZGxlOworICAgIHB1YmxpYzoKKworICAgICAg
ICBCdWlsZGVyPFNUQVRFIHwgQ29sdW1uTmFtZXNTZXQ+JiBzZXRDb2x1bW5OYW1lcyhQYXNzUmVm
UHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5PFN0cmluZz4+IHZhbHVlKQorICAgICAg
ICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQ29sdW1uTmFtZXNTZXQp
LCBwcm9wZXJ0eV9jb2x1bW5OYW1lc19hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3Vs
dC0+c2V0QXJyYXkoQVNDSUlMaXRlcmFsKCJjb2x1bW5OYW1lcyIpLCB2YWx1ZSk7CisgICAgICAg
ICAgICByZXR1cm4gY2FzdFN0YXRlPENvbHVtbk5hbWVzU2V0PigpOworICAgICAgICB9CisKKyAg
ICAgICAgQnVpbGRlcjxTVEFURSB8IE5vdGVzU2V0PiYgc2V0Tm90ZXMoY29uc3QgU3RyaW5nJiB2
YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE5v
dGVzU2V0KSwgcHJvcGVydHlfbm90ZXNfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1
bHQtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoIm5vdGVzIiksIHZhbHVlKTsKKyAgICAgICAgICAg
IHJldHVybiBjYXN0U3RhdGU8Tm90ZXNTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBCdWls
ZGVyPFNUQVRFIHwgVGltZXN0YW1wU2V0PiYgc2V0VGltZXN0YW1wKGRvdWJsZSB2YWx1ZSkKKyAg
ICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFRpbWVzdGFtcFNl
dCksIHByb3BlcnR5X3RpbWVzdGFtcF9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3Vs
dC0+c2V0TnVtYmVyKEFTQ0lJTGl0ZXJhbCgidGltZXN0YW1wIiksIHZhbHVlKTsKKyAgICAgICAg
ICAgIHJldHVybiBjYXN0U3RhdGU8VGltZXN0YW1wU2V0PigpOworICAgICAgICB9CisKKyAgICAg
ICAgQnVpbGRlcjxTVEFURSB8IFZhbHVlc1NldD4mIHNldFZhbHVlcyhQYXNzUmVmUHRyPEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoIShTVEFURSAmIFZhbHVlc1NldCksIHByb3BlcnR5X3ZhbHVlc19hbHJlYWR5
X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgidmFs
dWVzIiksIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VmFsdWVzU2V0Pigp
OworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IFBheWxvYWRTZXQ+JiBzZXRQ
YXlsb2FkKFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4gdmFsdWUpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBQYXlsb2FkU2V0KSwg
cHJvcGVydHlfcGF5bG9hZF9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0
VmFsdWUoQVNDSUlMaXRlcmFsKCJwYXlsb2FkIiksIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVy
biBjYXN0U3RhdGU8UGF5bG9hZFNldD4oKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBFcnJvclNldD4mIHNldEVycm9yKFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVp
bGRlcjo6RGF0YWJhc2U6OkVycm9yPiB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoIShTVEFURSAmIEVycm9yU2V0KSwgcHJvcGVydHlfZXJyb3JfYWxyZWFkeV9z
ZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldE9iamVjdChBU0NJSUxpdGVyYWwoImVycm9y
IiksIHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8RXJyb3JTZXQ+KCk7Cisg
ICAgICAgIH0KKworICAgICAgICBvcGVyYXRvciBSZWZQdHI8UGFyYW1ldGVyQnVuZGxlPiYgKCkK
KyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRz
U2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNp
emVvZihQYXJhbWV0ZXJCdW5kbGUpID09IHNpemVvZihJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVj
dCksIGNhbm5vdF9jYXN0KTsKKyAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxS
ZWZQdHI8UGFyYW1ldGVyQnVuZGxlPio+KCZtX3Jlc3VsdCk7CisgICAgICAgIH0KKworICAgICAg
ICBQYXNzUmVmUHRyPFBhcmFtZXRlckJ1bmRsZT4gcmVsZWFzZSgpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBSZWZQdHI8UGFyYW1ldGVyQnVuZGxlPigqdGhpcykucmVsZWFzZSgpOwor
ICAgICAgICB9CisgICAgfTsKKworICAgIC8qCisgICAgICogU3ludGhldGljIGNvbnN0cnVjdG9y
OgorICAgICAqIFJlZlB0cjxQYXJhbWV0ZXJCdW5kbGU+IHJlc3VsdCA9IFBhcmFtZXRlckJ1bmRs
ZTo6Y3JlYXRlKCkKKyAgICAgKiAgICAgLnNldENvbHVtbk5hbWVzKC4uLikKKyAgICAgKiAgICAg
LnNldE5vdGVzKC4uLikKKyAgICAgKiAgICAgLnNldFRpbWVzdGFtcCguLi4pCisgICAgICogICAg
IC5zZXRWYWx1ZXMoLi4uKQorICAgICAqICAgICAuc2V0UGF5bG9hZCguLi4pCisgICAgICogICAg
IC5zZXRFcnJvciguLi4pOworICAgICAqLworICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0
PiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KElu
c3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7CisgICAgfQorICAgIHR5cGVkZWYg
SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6U3RydWN0SXRlbVRyYWl0cyBJdGVtVHJhaXRzOworfTsK
KworfSAvLyBUZXN0CisKKworCit9IC8vIG5hbWVzcGFjZSBUeXBlQnVpbGRlcgorCit9IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyNlbmRp
ZiAvLyAhZGVmaW5lZChJbnNwZWN0b3JUZXN0VHlwZUJ1aWxkZXJzX2gpCisjIyMgRW5kIEZpbGU6
IEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuaAorCisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9y
VGVzdFR5cGVCdWlsZGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVy
c2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBE
TyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20g
dHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uCisvLyBieSB0aGUgc2NyaXB0OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZS1pbnNw
ZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnMuaCIKKworI2lmIEVOQUJMRShJTlNQRUNUT1Ip
CisKKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3Ig
eworCituYW1lc3BhY2UgVHlwZUJ1aWxkZXIgeworCitzdGF0aWMgY29uc3QgY2hhciogY29uc3Qg
ZW51bV9jb25zdGFudF92YWx1ZXNbXSA9IHsKK307CisKK1N0cmluZyBnZXRUZXN0RW51bUNvbnN0
YW50VmFsdWUoaW50IGNvZGUpIHsKKyAgICByZXR1cm4gZW51bV9jb25zdGFudF92YWx1ZXNbY29k
ZV07Cit9CisKKworCit9IC8vIG5hbWVzcGFjZSBUeXBlQnVpbGRlcgorCit9IC8vIG5hbWVzcGFj
ZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyMjIyBFbmQgRmls
ZTogSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLXJlcXVpcmlu
Zy1ydW50aW1lLWNhc3RzLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMu
anNvbi1yZXN1bHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDU2ZjUyMzIyYjQwN2QzN2I5MjkxZDFiMWRhOGNiMTI1
YTQzMThmMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpz
b24tcmVzdWx0CkBAIC0wLDAgKzEsNzI3IEBACisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVz
dEJhY2tlbmRDb21tYW5kcy5qcworLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFdhc2hpbmd0b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIERP
IE5PVCBFRElUIFRISVMgRklMRS4gSXQgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSB0
eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24KKy8vIGJ5IHRoZSBzY3JpcHQ6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlLWluc3Bl
Y3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQorCisvLyBUZXN0LgorSW5zcGVjdG9yQmFja2VuZC5y
ZWdpc3RlckVudW0oIlRlc3QuVW5jYXN0ZWRBbmltYWxzIiwge1BpZ3M6ICJQaWdzIiwgQ293czog
IkNvd3MiLCBDYXRzOiAiQ2F0cyIsIEhlbnM6ICJIZW5zIn0pOworSW5zcGVjdG9yQmFja2VuZC5y
ZWdpc3RlckVudW0oIlRlc3QuQ2FzdGVkQW5pbWFscyIsIHtEdWNrczogIkR1Y2tzIiwgSGVuczog
IkhlbnMiLCBDcm93czogIkNyb3dzIiwgRmxhbWluZ29zOiAiRmxhbWluZ29zIn0pOworIyMjIEVu
ZCBGaWxlOiBJbnNwZWN0b3JUZXN0QmFja2VuZENvbW1hbmRzLmpzCisKKyMjIyBCZWdpbiBGaWxl
OiBJbnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGZyb20gdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uCisvLyBieSB0
aGUgc2NyaXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdl
bi9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2lmbmRlZiBJbnNw
ZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzX2gKKyNkZWZpbmUgSW5zcGVjdG9yVGVzdEJhY2tl
bmREaXNwYXRjaGVyc19oCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSAiSW5z
cGVjdG9yVGVzdFR5cGVCdWlsZGVycy5oIgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCit0eXBl
ZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNl
bmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorCisjZW5kaWYgLy8gIWRlZmluZWQoSW5zcGVjdG9y
VGVzdEJhY2tlbmREaXNwYXRjaGVyc19oKQorIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JUZXN0QmFj
a2VuZERpc3BhdGNoZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RCYWNrZW5k
RGlzcGF0Y2hlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9U
IEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUt
cmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGUtaW5zcGVjdG9y
LXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJ
bnNwZWN0b3JUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9S
KQorCisjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oPgorI2lu
Y2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+CisKK25hbWVzcGFjZSBJbnNwZWN0b3IgeworCisKKworfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorCisjIyMgRW5kIEZpbGU6
IEluc3BlY3RvclRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwCisKKyMjIyBCZWdpbiBGaWxlOiBJ
bnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBmcm9tIHR5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbgorLy8gYnkgdGhl
IHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4v
Z2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5CisKKyNpZm5kZWYgSW5zcGVj
dG9yVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnNfaAorI2RlZmluZSBJbnNwZWN0b3JUZXN0RnJvbnRl
bmREaXNwYXRjaGVyc19oCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSAiSW5z
cGVjdG9yVGVzdFR5cGVCdWlsZGVycy5oIgorI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwuaD4KKyNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+
CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KKworbmFtZXNwYWNlIEluc3BlY3RvciB7CisKKworCit9IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyNlbmRpZiAvLyAhZGVmaW5l
ZChJbnNwZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVyc19oKQorIyMjIEVuZCBGaWxlOiBJbnNw
ZWN0b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oCisKKyMjIyBCZWdpbiBGaWxlOiBJbnNwZWN0
b3JUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5jcHAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywg
MjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisvLyBETyBOT1QgRURJVCBUSElTIEZJTEUuIEl0IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIGZyb20gdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uCisvLyBieSB0aGUgc2Ny
aXB0OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5l
cmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkluc3BlY3RvclRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCisKKyNpZiBF
TkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1l
c3BhY2UgSW5zcGVjdG9yIHsKKworfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCisKKyNlbmRpZiAv
LyBFTkFCTEUoSU5TUEVDVE9SKQorCisjIyMgRW5kIEZpbGU6IEluc3BlY3RvclRlc3RGcm9udGVu
ZERpc3BhdGNoZXJzLmNwcAorCisjIyMgQmVnaW4gRmlsZTogSW5zcGVjdG9yVGVzdFR5cGVCdWls
ZGVycy5oCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGlu
Z3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQgVEhJ
UyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtcmVxdWlyaW5n
LXJ1bnRpbWUtY2FzdHMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29s
LWJpbmRpbmdzLnB5CisKKyNpZm5kZWYgSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVyc19oCisjZGVm
aW5lIEluc3BlY3RvclRlc3RUeXBlQnVpbGRlcnNfaAorCisjaWYgRU5BQkxFKElOU1BFQ1RPUikK
KworI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JKU1R5cGVCdWlsZGVycy5oPgorI2luY2x1
ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JUeXBlQnVpbGRlci5oPgorI2luY2x1ZGUgPHd0Zi9Bc3Nl
cnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKworbmFtZXNwYWNlIEluc3Bl
Y3RvciB7CisKKworCituYW1lc3BhY2UgVHlwZUJ1aWxkZXIgeworCisvLyBGb3J3YXJkIGRlY2xh
cmF0aW9ucy4KK25hbWVzcGFjZSBUZXN0IHsKK2NsYXNzIFJlY3Vyc2l2ZU9iamVjdDE7CitjbGFz
cyBSZWN1cnNpdmVPYmplY3QyOworY2xhc3MgVHlwZU5lZWRpbmdDYXN0OworZW51bSBjbGFzcyBD
YXN0ZWRBbmltYWxzOworZW51bSBjbGFzcyBVbmNhc3RlZEFuaW1hbHM7Cit9IC8vIFRlc3QKKy8v
IEVuZCBvZiBmb3J3YXJkIGRlY2xhcmF0aW9ucy4KKworCisvLyBUeXBlZGVmcy4KK25hbWVzcGFj
ZSBUZXN0IHsKK3R5cGVkZWYgaW50IENhc3RlZE9iamVjdElkOworCit0eXBlZGVmIGludCBVbmNh
c3RlZE9iamVjdElkOworfSAvLyBUZXN0CisvLyBFbmQgb2YgdHlwZWRlZnMuCisKK1N0cmluZyBn
ZXRUZXN0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBTdHJpbmcgZ2V0VGVzdEVudW1Db25zdGFudFZhbHVlKFQgZW51bVZhbHVlKQoreworICAgIHJl
dHVybiBnZXRUZXN0RW51bUNvbnN0YW50VmFsdWUoc3RhdGljX2Nhc3Q8aW50PihlbnVtVmFsdWUp
KTsKK30KKworbmFtZXNwYWNlIFRlc3QgeworLyogQSBkdW1teSB0eXBlIHRoYXQgcmVxdWlyZXMg
cnVudGltZSBjYXN0cywgYW5kIGZvcmNlcyBub24tcHJpbWl0aXZlIHJlZmVyZW5jZWQgdHlwZXMg
dG8gYWxzbyBlbWl0IHJ1bnRpbWUgY2FzdCBoZWxwZXJzLiAqLworY2xhc3MgVHlwZU5lZWRpbmdD
YXN0IDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0QmFzZSB7CitwdWJsaWM6Cisg
ICAgZW51bSB7CisgICAgICAgIE5vRmllbGRzU2V0ID0gMCwKKyAgICAgICAgU3RyaW5nU2V0ID0g
MSA8PCAwLAorICAgICAgICBOdW1iZXJTZXQgPSAxIDw8IDEsCisgICAgICAgIEFuaW1hbHNTZXQg
PSAxIDw8IDIsCisgICAgICAgIElkU2V0ID0gMSA8PCAzLAorICAgICAgICBUcmVlU2V0ID0gMSA8
PCA0LAorICAgICAgICBBbGxGaWVsZHNTZXQgPSAoU3RyaW5nU2V0IHwgTnVtYmVyU2V0IHwgQW5p
bWFsc1NldCB8IElkU2V0IHwgVHJlZVNldCkKKyAgICB9OworCisgICAgdGVtcGxhdGU8aW50IFNU
QVRFPgorICAgIGNsYXNzIEJ1aWxkZXIgeworICAgIHByaXZhdGU6CisgICAgICAgIFJlZlB0cjxJ
bnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CisKKyAgICAgICAgdGVtcGxhdGU8
aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQ
Pio+KHRoaXMpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPC8qVHlw
ZU5lZWRpbmdDYXN0Ki9JbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gcHRyKQorICAgICAgICB7
CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRl
cl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKKyAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRy
OworICAgICAgICB9CisgICAgICAgIGZyaWVuZCBjbGFzcyBUeXBlTmVlZGluZ0Nhc3Q7CisgICAg
cHVibGljOgorCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBTdHJpbmdTZXQ+JiBzZXRTdHJpbmco
Y29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoIShTVEFURSAmIFN0cmluZ1NldCksIHByb3BlcnR5X3N0cmluZ19hbHJlYWR5X3NldCk7Cisg
ICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgic3RyaW5nIiksIHZh
bHVlKTsKKyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8U3RyaW5nU2V0PigpOworICAgICAg
ICB9CisKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IE51bWJlclNldD4mIHNldE51bWJlcihpbnQg
dmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBO
dW1iZXJTZXQpLCBwcm9wZXJ0eV9udW1iZXJfYWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9y
ZXN1bHQtPnNldE51bWJlcihBU0NJSUxpdGVyYWwoIm51bWJlciIpLCB2YWx1ZSk7CisgICAgICAg
ICAgICByZXR1cm4gY2FzdFN0YXRlPE51bWJlclNldD4oKTsKKyAgICAgICAgfQorCisgICAgICAg
IEJ1aWxkZXI8U1RBVEUgfCBBbmltYWxzU2V0PiYgc2V0QW5pbWFscyhJbnNwZWN0b3I6OlR5cGVC
dWlsZGVyOjpUZXN0OjpDYXN0ZWRBbmltYWxzIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQW5pbWFsc1NldCksIHByb3BlcnR5X2FuaW1hbHNf
YWxyZWFkeV9zZXQpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZyhBU0NJSUxpdGVy
YWwoImFuaW1hbHMiKSwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Z2V0VGVzdEVudW1Db25zdGFu
dFZhbHVlKHN0YXRpY19jYXN0PGludD4odmFsdWUpKSk7CisgICAgICAgICAgICByZXR1cm4gY2Fz
dFN0YXRlPEFuaW1hbHNTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyPFNUQVRF
IHwgSWRTZXQ+JiBzZXRJZChpbnQgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKCEoU1RBVEUgJiBJZFNldCksIHByb3BlcnR5X2lkX2FscmVhZHlfc2V0KTsKKyAg
ICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoQVNDSUlMaXRlcmFsKCJpZCIpLCB2YWx1ZSk7
CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPElkU2V0PigpOworICAgICAgICB9CisKKyAg
ICAgICAgQnVpbGRlcjxTVEFURSB8IFRyZWVTZXQ+JiBzZXRUcmVlKFBhc3NSZWZQdHI8SW5zcGVj
dG9yOjpUeXBlQnVpbGRlcjo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0MT4gdmFsdWUpCisgICAgICAg
IHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBUcmVlU2V0KSwgcHJvcGVy
dHlfdHJlZV9hbHJlYWR5X3NldCk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0KEFT
Q0lJTGl0ZXJhbCgidHJlZSIpLCB2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRl
PFRyZWVTZXQ+KCk7CisgICAgICAgIH0KKworICAgICAgICBvcGVyYXRvciBSZWZQdHI8VHlwZU5l
ZWRpbmdDYXN0PiYgKCkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RB
VEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKKyAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKHNpemVvZihUeXBlTmVlZGluZ0Nhc3QpID09IHNpemVvZihJbnNwZWN0b3I6
Okluc3BlY3Rvck9iamVjdCksIGNhbm5vdF9jYXN0KTsKKyAgICAgICAgICAgIHJldHVybiAqcmVp
bnRlcnByZXRfY2FzdDxSZWZQdHI8VHlwZU5lZWRpbmdDYXN0Pio+KCZtX3Jlc3VsdCk7CisgICAg
ICAgIH0KKworICAgICAgICBQYXNzUmVmUHRyPFR5cGVOZWVkaW5nQ2FzdD4gcmVsZWFzZSgpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBSZWZQdHI8VHlwZU5lZWRpbmdDYXN0PigqdGhp
cykucmVsZWFzZSgpOworICAgICAgICB9CisgICAgfTsKKworICAgIC8qCisgICAgICogU3ludGhl
dGljIGNvbnN0cnVjdG9yOgorICAgICAqIFJlZlB0cjxUeXBlTmVlZGluZ0Nhc3Q+IHJlc3VsdCA9
IFR5cGVOZWVkaW5nQ2FzdDo6Y3JlYXRlKCkKKyAgICAgKiAgICAgLnNldFN0cmluZyguLi4pCisg
ICAgICogICAgIC5zZXROdW1iZXIoLi4uKQorICAgICAqICAgICAuc2V0QW5pbWFscyguLi4pCisg
ICAgICogICAgIC5zZXRJZCguLi4pCisgICAgICogICAgIC5zZXRUcmVlKC4uLik7CisgICAgICov
CisgICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCisgICAgeworICAgICAg
ICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q6
OmNyZWF0ZSgpKTsKKyAgICB9CisgICAgdHlwZWRlZiBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpT
dHJ1Y3RJdGVtVHJhaXRzIEl0ZW1UcmFpdHM7Cit9OworCisvKiAgKi8KK2VudW0gY2xhc3MgVW5j
YXN0ZWRBbmltYWxzIHsKKyAgICBQaWdzID0gNCwKKyAgICBDb3dzID0gNSwKKyAgICBDYXRzID0g
NiwKKyAgICBIZW5zID0gMSwKK307IC8vIGVudW0gY2xhc3MgVW5jYXN0ZWRBbmltYWxzCisvKiAg
Ki8KK2VudW0gY2xhc3MgQ2FzdGVkQW5pbWFscyB7CisgICAgRHVja3MgPSAwLAorICAgIEhlbnMg
PSAxLAorICAgIENyb3dzID0gMiwKKyAgICBGbGFtaW5nb3MgPSAzLAorfTsgLy8gZW51bSBjbGFz
cyBDYXN0ZWRBbmltYWxzCitjbGFzcyBSZWN1cnNpdmVPYmplY3QxIDogcHVibGljIEluc3BlY3Rv
cjo6SW5zcGVjdG9yT2JqZWN0QmFzZSB7CitwdWJsaWM6CisgICAgZW51bSB7CisgICAgICAgIE5v
RmllbGRzU2V0ID0gMCwKKyAgICAgICAgQWxsRmllbGRzU2V0ID0gMAorICAgIH07CisKKyAgICB0
ZW1wbGF0ZTxpbnQgU1RBVEU+CisgICAgY2xhc3MgQnVpbGRlciB7CisgICAgcHJpdmF0ZToKKyAg
ICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKKworICAg
ICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUo
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRl
cjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CisgICAgICAgIH0KKworICAgICAgICBCdWlsZGVyKFBh
c3NSZWZQdHI8LypSZWN1cnNpdmVPYmplY3QxKi9JbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4g
cHRyKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0Zp
ZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKKyAgICAgICAgICAg
IG1fcmVzdWx0ID0gcHRyOworICAgICAgICB9CisgICAgICAgIGZyaWVuZCBjbGFzcyBSZWN1cnNp
dmVPYmplY3QxOworICAgIHB1YmxpYzoKKworICAgICAgICBvcGVyYXRvciBSZWZQdHI8UmVjdXJz
aXZlT2JqZWN0MT4mICgpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNU
QVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CisgICAgICAgICAgICBD
T01QSUxFX0FTU0VSVChzaXplb2YoUmVjdXJzaXZlT2JqZWN0MSkgPT0gc2l6ZW9mKEluc3BlY3Rv
cjo6SW5zcGVjdG9yT2JqZWN0KSwgY2Fubm90X2Nhc3QpOworICAgICAgICAgICAgcmV0dXJuICpy
ZWludGVycHJldF9jYXN0PFJlZlB0cjxSZWN1cnNpdmVPYmplY3QxPio+KCZtX3Jlc3VsdCk7Cisg
ICAgICAgIH0KKworICAgICAgICBQYXNzUmVmUHRyPFJlY3Vyc2l2ZU9iamVjdDE+IHJlbGVhc2Uo
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gUmVmUHRyPFJlY3Vyc2l2ZU9iamVjdDE+
KCp0aGlzKS5yZWxlYXNlKCk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgLyoKKyAgICAgKiBT
eW50aGV0aWMgY29uc3RydWN0b3I6CisgICAgICogUmVmUHRyPFJlY3Vyc2l2ZU9iamVjdDE+IHJl
c3VsdCA9IFJlY3Vyc2l2ZU9iamVjdDE6OmNyZWF0ZSgpOworICAgICAqLworICAgIHN0YXRpYyBC
dWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEJ1aWxk
ZXI8Tm9GaWVsZHNTZXQ+KEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7Cisg
ICAgfQorICAgIHR5cGVkZWYgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6U3RydWN0SXRlbVRyYWl0
cyBJdGVtVHJhaXRzOworCisgICAgdm9pZCBzZXRPYmooUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlR5
cGVCdWlsZGVyOjpUZXN0OjpSZWN1cnNpdmVPYmplY3QyPiB2YWx1ZSkKKyAgICB7CisgICAgICAg
IEluc3BlY3Rvck9iamVjdEJhc2U6OnNldE9iamVjdChBU0NJSUxpdGVyYWwoIm9iaiIpLCB2YWx1
ZSk7CisgICAgfQorfTsKKworY2xhc3MgUmVjdXJzaXZlT2JqZWN0MiA6IHB1YmxpYyBJbnNwZWN0
b3I6Okluc3BlY3Rvck9iamVjdEJhc2UgeworcHVibGljOgorICAgIGVudW0geworICAgICAgICBO
b0ZpZWxkc1NldCA9IDAsCisgICAgICAgIEFsbEZpZWxkc1NldCA9IDAKKyAgICB9OworCisgICAg
dGVtcGxhdGU8aW50IFNUQVRFPgorICAgIGNsYXNzIEJ1aWxkZXIgeworICAgIHByaXZhdGU6Cisg
ICAgICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CisKKyAg
ICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRl
KCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxk
ZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcihQ
YXNzUmVmUHRyPC8qUmVjdXJzaXZlT2JqZWN0MiovSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+
IHB0cikKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9G
aWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CisgICAgICAgICAg
ICBtX3Jlc3VsdCA9IHB0cjsKKyAgICAgICAgfQorICAgICAgICBmcmllbmQgY2xhc3MgUmVjdXJz
aXZlT2JqZWN0MjsKKyAgICBwdWJsaWM6CisKKyAgICAgICAgb3BlcmF0b3IgUmVmUHRyPFJlY3Vy
c2l2ZU9iamVjdDI+JiAoKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChT
VEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOworICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoc2l6ZW9mKFJlY3Vyc2l2ZU9iamVjdDIpID09IHNpemVvZihJbnNwZWN0
b3I6Okluc3BlY3Rvck9iamVjdCksIGNhbm5vdF9jYXN0KTsKKyAgICAgICAgICAgIHJldHVybiAq
cmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8UmVjdXJzaXZlT2JqZWN0Mj4qPigmbV9yZXN1bHQpOwor
ICAgICAgICB9CisKKyAgICAgICAgUGFzc1JlZlB0cjxSZWN1cnNpdmVPYmplY3QyPiByZWxlYXNl
KCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxSZWN1cnNpdmVPYmplY3Qy
PigqdGhpcykucmVsZWFzZSgpOworICAgICAgICB9CisgICAgfTsKKworICAgIC8qCisgICAgICog
U3ludGhldGljIGNvbnN0cnVjdG9yOgorICAgICAqIFJlZlB0cjxSZWN1cnNpdmVPYmplY3QyPiBy
ZXN1bHQgPSBSZWN1cnNpdmVPYmplY3QyOjpjcmVhdGUoKTsKKyAgICAgKi8KKyAgICBzdGF0aWMg
QnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBCdWls
ZGVyPE5vRmllbGRzU2V0PihJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkpOwor
ICAgIH0KKyAgICB0eXBlZGVmIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlN0cnVjdEl0ZW1UcmFp
dHMgSXRlbVRyYWl0czsKKworICAgIHZvaWQgc2V0T2JqKFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpU
eXBlQnVpbGRlcjo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0MT4gdmFsdWUpCisgICAgeworICAgICAg
ICBJbnNwZWN0b3JPYmplY3RCYXNlOjpzZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJvYmoiKSwgdmFs
dWUpOworICAgIH0KK307CisKK30gLy8gVGVzdAorCit0ZW1wbGF0ZTw+IHN0cnVjdCBCaW5kaW5n
VHJhaXRzPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlRlc3Q6OkNhc3RlZEFuaW1hbHM+IHsKKyNp
ZiAhQVNTRVJUX0RJU0FCTEVECitzdGF0aWMgdm9pZCBhc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlw
ZShJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlKik7CisjZW5kaWYgLy8gIUFTU0VSVF9ESVNBQkxF
RAorfTsKK3RlbXBsYXRlPD4gc3RydWN0IEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpUeXBlQnVp
bGRlcjo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0PiB7CitzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0
b3I6OlR5cGVCdWlsZGVyOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3Q+IHJ1bnRpbWVDYXN0KFBhc3NS
ZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4gdmFsdWUpOworI2lmICFBU1NFUlRfRElT
QUJMRUQKK3N0YXRpYyB2b2lkIGFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKEluc3BlY3Rvcjo6
SW5zcGVjdG9yVmFsdWUqKTsKKyNlbmRpZiAvLyAhQVNTRVJUX0RJU0FCTEVECit9OwordGVtcGxh
dGU8PiBzdHJ1Y3QgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpUZXN0OjpS
ZWN1cnNpdmVPYmplY3QxPiB7CisjaWYgIUFTU0VSVF9ESVNBQkxFRAorc3RhdGljIHZvaWQgYXNz
ZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSopOworI2Vu
ZGlmIC8vICFBU1NFUlRfRElTQUJMRUQKK307Cit0ZW1wbGF0ZTw+IHN0cnVjdCBCaW5kaW5nVHJh
aXRzPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDI+IHsKKyNp
ZiAhQVNTRVJUX0RJU0FCTEVECitzdGF0aWMgdm9pZCBhc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlw
ZShJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlKik7CisjZW5kaWYgLy8gIUFTU0VSVF9ESVNBQkxF
RAorfTsKKworfSAvLyBuYW1lc3BhY2UgVHlwZUJ1aWxkZXIKKworfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorCisjZW5kaWYgLy8gIWRlZmlu
ZWQoSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVyc19oKQorIyMjIEVuZCBGaWxlOiBJbnNwZWN0b3JU
ZXN0VHlwZUJ1aWxkZXJzLmgKKworIyMjIEJlZ2luIEZpbGU6IEluc3BlY3RvclRlc3RUeXBlQnVp
bGRlcnMuY3BwCisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2Fz
aGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRE8gTk9UIEVESVQg
VEhJUyBGSUxFLiBJdCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHR5cGUtcmVxdWly
aW5nLXJ1bnRpbWUtY2FzdHMuanNvbgorLy8gYnkgdGhlIHNjcmlwdDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3Rv
Y29sLWJpbmRpbmdzLnB5CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnNwZWN0
b3JUZXN0VHlwZUJ1aWxkZXJzLmgiCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVk
ZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsKKworbmFtZXNw
YWNlIFR5cGVCdWlsZGVyIHsKKworc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGVudW1fY29uc3Rh
bnRfdmFsdWVzW10gPSB7CisgICAgIkR1Y2tzIiwKKyAgICAiSGVucyIsCisgICAgIkNyb3dzIiwK
KyAgICAiRmxhbWluZ29zIiwKKyAgICAiUGlncyIsCisgICAgIkNvd3MiLAorICAgICJDYXRzIiwK
K307CisKK1N0cmluZyBnZXRUZXN0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpIHsKKyAgICBy
ZXR1cm4gZW51bV9jb25zdGFudF92YWx1ZXNbY29kZV07Cit9CisKKworCisjaWYgIUFTU0VSVF9E
SVNBQkxFRAordm9pZCBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlRlc3Q6
OkNhc3RlZEFuaW1hbHM+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShJbnNwZWN0b3I6Oklu
c3BlY3RvclZhbHVlKiB2YWx1ZSkKK3sKKyAgICBTdHJpbmcgczsKKyAgICBib29sIGNhc3RfcmVz
ID0gdmFsdWUtPmFzU3RyaW5nKCZzKTsKKyAgICBBU1NFUlQoY2FzdF9yZXMpOworICAgIEFTU0VS
VChzID09ICJEdWNrcyIgfHwgcyA9PSAiSGVucyIgfHwgcyA9PSAiQ3Jvd3MiIHx8IHMgPT0gIkZs
YW1pbmdvcyIpOworfQorI2VuZGlmIC8vICFBU1NFUlRfRElTQUJMRUQKKworI2lmICFBU1NFUlRf
RElTQUJMRUQKK3ZvaWQgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpUZXN0
OjpUeXBlTmVlZGluZ0Nhc3Q+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShJbnNwZWN0b3I6
Okluc3BlY3RvclZhbHVlKiB2YWx1ZSkKK3sKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBv
YmplY3Q7CisgICAgYm9vbCBjYXN0UmVzID0gdmFsdWUtPmFzT2JqZWN0KCZvYmplY3QpOworICAg
IEFTU0VSVF9VTlVTRUQoY2FzdFJlcywgY2FzdFJlcyk7CisgICAgeworICAgICAgICBJbnNwZWN0
b3JPYmplY3Q6Oml0ZXJhdG9yIHN0cmluZ1BvcyA9IG9iamVjdC0+ZmluZChBU0NJSUxpdGVyYWwo
InN0cmluZyIpKTsKKyAgICAgICAgQVNTRVJUKHN0cmluZ1BvcyAhPSBvYmplY3QtPmVuZCgpKTsK
KyAgICAgICAgQmluZGluZ1RyYWl0czxTdHJpbmc+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlw
ZShzdHJpbmdQb3MtPnZhbHVlLmdldCgpKTsKKyAgICB9CisgICAgeworICAgICAgICBJbnNwZWN0
b3JPYmplY3Q6Oml0ZXJhdG9yIG51bWJlclBvcyA9IG9iamVjdC0+ZmluZChBU0NJSUxpdGVyYWwo
Im51bWJlciIpKTsKKyAgICAgICAgQVNTRVJUKG51bWJlclBvcyAhPSBvYmplY3QtPmVuZCgpKTsK
KyAgICAgICAgQmluZGluZ1RyYWl0czxpbnQ+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShu
dW1iZXJQb3MtPnZhbHVlLmdldCgpKTsKKyAgICB9CisgICAgeworICAgICAgICBJbnNwZWN0b3JP
YmplY3Q6Oml0ZXJhdG9yIGFuaW1hbHNQb3MgPSBvYmplY3QtPmZpbmQoQVNDSUlMaXRlcmFsKCJh
bmltYWxzIikpOworICAgICAgICBBU1NFUlQoYW5pbWFsc1BvcyAhPSBvYmplY3QtPmVuZCgpKTsK
KyAgICAgICAgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpUZXN0OjpDYXN0
ZWRBbmltYWxzPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoYW5pbWFsc1Bvcy0+dmFsdWUu
Z2V0KCkpOworICAgIH0KKyAgICB7CisgICAgICAgIEluc3BlY3Rvck9iamVjdDo6aXRlcmF0b3Ig
aWRQb3MgPSBvYmplY3QtPmZpbmQoQVNDSUlMaXRlcmFsKCJpZCIpKTsKKyAgICAgICAgQVNTRVJU
KGlkUG9zICE9IG9iamVjdC0+ZW5kKCkpOworICAgICAgICBCaW5kaW5nVHJhaXRzPGludD46OmFz
c2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKGlkUG9zLT52YWx1ZS5nZXQoKSk7CisgICAgfQorICAg
IHsKKyAgICAgICAgSW5zcGVjdG9yT2JqZWN0OjppdGVyYXRvciB0cmVlUG9zID0gb2JqZWN0LT5m
aW5kKEFTQ0lJTGl0ZXJhbCgidHJlZSIpKTsKKyAgICAgICAgQVNTRVJUKHRyZWVQb3MgIT0gb2Jq
ZWN0LT5lbmQoKSk7CisgICAgICAgIEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpUeXBlQnVpbGRl
cjo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0MT46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKHRy
ZWVQb3MtPnZhbHVlLmdldCgpKTsKKyAgICB9CisKKyAgICBpbnQgZm91bmRQcm9wZXJ0aWVzQ291
bnQgPSA1OworICAgIGlmIChmb3VuZFByb3BlcnRpZXNDb3VudCAhPSBvYmplY3QtPnNpemUoKSkK
KyAgICAgICAgRkFUQUwoIlVuZXhwZWN0ZWQgcHJvcGVydGllcyBpbiBvYmplY3Q6ICVzXG4iLCBv
YmplY3QtPnRvSlNPTlN0cmluZygpLmFzY2lpKCkuZGF0YSgpKTsKK30KKyNlbmRpZiAvLyAhQVNT
RVJUX0RJU0FCTEVECisKK1Bhc3NSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6VGVzdDo6
VHlwZU5lZWRpbmdDYXN0PiBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlRl
c3Q6OlR5cGVOZWVkaW5nQ2FzdD46OnJ1bnRpbWVDYXN0KFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJ
bnNwZWN0b3JWYWx1ZT4gdmFsdWUpCit7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9y
T2JqZWN0PiBvYmplY3Q7CisgICAgYm9vbCBjYXN0UmVzID0gdmFsdWUtPmFzT2JqZWN0KCZvYmpl
Y3QpOworICAgIEFTU0VSVF9VTlVTRUQoY2FzdFJlcywgY2FzdFJlcyk7CisjaWYgIUFTU0VSVF9E
SVNBQkxFRAorICAgIEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6VGVzdDo6
VHlwZU5lZWRpbmdDYXN0Pjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUob2JqZWN0LmdldCgp
KTsKKyNlbmRpZiAgLy8gIUFTU0VSVF9ESVNBQkxFRAorICAgIENPTVBJTEVfQVNTRVJUKHNpemVv
ZihJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3QpID09IHNpemVv
ZihJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdEJhc2UpLCB0eXBlX2Nhc3RfcHJvYmxlbSk7Cisg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlRlc3Q6OlR5cGVO
ZWVkaW5nQ2FzdCo+KHN0YXRpY19jYXN0PEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0QmFzZSo+
KG9iamVjdC5nZXQoKSkpOworfQorCisKKyNpZiAhQVNTRVJUX0RJU0FCTEVECit2b2lkIEJpbmRp
bmdUcmFpdHM8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0MT46
OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUqIHZh
bHVlKQoreworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG9iamVjdDsKKyAgICBib29sIGNh
c3RSZXMgPSB2YWx1ZS0+YXNPYmplY3QoJm9iamVjdCk7CisgICAgQVNTRVJUX1VOVVNFRChjYXN0
UmVzLCBjYXN0UmVzKTsKKworICAgIGludCBmb3VuZFByb3BlcnRpZXNDb3VudCA9IDA7CisgICAg
eworICAgICAgICBJbnNwZWN0b3JPYmplY3Q6Oml0ZXJhdG9yIG9ialBvcyA9IG9iamVjdC0+Zmlu
ZChBU0NJSUxpdGVyYWwoIm9iaiIpKTsKKyAgICAgICAgaWYgKG9ialBvcyAhPSBvYmplY3QtPmVu
ZCgpKSB7CisgICAgICAgICAgICBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6
OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDI+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShvYmpQ
b3MtPnZhbHVlLmdldCgpKTsKKyAgICAgICAgICAgICsrZm91bmRQcm9wZXJ0aWVzQ291bnQ7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgaWYgKGZvdW5kUHJvcGVydGllc0NvdW50ICE9IG9iamVjdC0+
c2l6ZSgpKQorICAgICAgICBGQVRBTCgiVW5leHBlY3RlZCBwcm9wZXJ0aWVzIGluIG9iamVjdDog
JXNcbiIsIG9iamVjdC0+dG9KU09OU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOworfQorI2VuZGlm
IC8vICFBU1NFUlRfRElTQUJMRUQKKworI2lmICFBU1NFUlRfRElTQUJMRUQKK3ZvaWQgQmluZGlu
Z1RyYWl0czxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpUZXN0OjpSZWN1cnNpdmVPYmplY3QyPjo6
YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSogdmFs
dWUpCit7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gb2JqZWN0OworICAgIGJvb2wgY2Fz
dFJlcyA9IHZhbHVlLT5hc09iamVjdCgmb2JqZWN0KTsKKyAgICBBU1NFUlRfVU5VU0VEKGNhc3RS
ZXMsIGNhc3RSZXMpOworCisgICAgaW50IGZvdW5kUHJvcGVydGllc0NvdW50ID0gMDsKKyAgICB7
CisgICAgICAgIEluc3BlY3Rvck9iamVjdDo6aXRlcmF0b3Igb2JqUG9zID0gb2JqZWN0LT5maW5k
KEFTQ0lJTGl0ZXJhbCgib2JqIikpOworICAgICAgICBpZiAob2JqUG9zICE9IG9iamVjdC0+ZW5k
KCkpIHsKKyAgICAgICAgICAgIEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6
VGVzdDo6UmVjdXJzaXZlT2JqZWN0MT46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKG9ialBv
cy0+dmFsdWUuZ2V0KCkpOworICAgICAgICAgICAgKytmb3VuZFByb3BlcnRpZXNDb3VudDsKKyAg
ICAgICAgfQorICAgIH0KKyAgICBpZiAoZm91bmRQcm9wZXJ0aWVzQ291bnQgIT0gb2JqZWN0LT5z
aXplKCkpCisgICAgICAgIEZBVEFMKCJVbmV4cGVjdGVkIHByb3BlcnRpZXMgaW4gb2JqZWN0OiAl
c1xuIiwgb2JqZWN0LT50b0pTT05TdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSk7Cit9CisjZW5kaWYg
Ly8gIUFTU0VSVF9ESVNBQkxFRAorCit9IC8vIG5hbWVzcGFjZSBUeXBlQnVpbGRlcgorCit9IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyMj
IyBFbmQgRmlsZTogSW5zcGVjdG9yVGVzdFR5cGVCdWlsZGVycy5jcHAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWR1cGxp
Y2F0ZS10eXBlLWRlY2xhcmF0aW9ucy5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tZHVwbGljYXRlLXR5cGUtZGVjbGFyYXRpb25zLmpz
b24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNzAyZmM2YTMyNzBhNjQ2YTQ1MDQ0N2ZkYzA0MDEzOTk1YTk0MmJmMAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9mYWlsLW9uLWR1cGxpY2F0ZS10eXBlLWRlY2xhcmF0aW9ucy5qc29uCkBAIC0wLDAg
KzEsMTUgQEAKK3sKKyAgICAiZG9tYWluIjogIlJ1bnRpbWUiLAorICAgICJ0eXBlcyI6IFsKKyAg
ICAgICAgeworICAgICAgICAgICAgImlkIjogIlJlbW90ZU9iamVjdElkIiwKKyAgICAgICAgICAg
ICJ0eXBlIjogInN0cmluZyIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5pcXVlIG9i
amVjdCBpZGVudGlmaWVyLiIKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlk
IjogIlJlbW90ZU9iamVjdElkIiwKKyAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCisgICAg
ICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5pcXVlIG9iamVjdCBpZGVudGlmaWVyLiIKKyAgICAg
ICAgfQorICAgIF0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWVudW0td2l0aC1uby12YWx1ZXMuanNvbiBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLWVudW0td2l0
aC1uby12YWx1ZXMuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yMzJhN2MzMjQ5YTQwYmQ0NDdlMTlhOTJhOGU1
NjkzMGQzZjg1OTU3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tZW51bS13aXRoLW5vLXZhbHVlcy5qc29uCkBA
IC0wLDAgKzEsMTAgQEAKK3sKKyAgICAiZG9tYWluIjogIkRhdGFiYXNlIiwKKyAgICAidHlwZXMi
OiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJQcmltYXJ5Q29sb3JzIiwKKyAgICAg
ICAgICAgICJ0eXBlIjogInN0cmluZyIsCisgICAgICAgICAgICAiZW51bSI6IFtdCisgICAgICAg
IH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1zdHJpbmctdHlwZWQtb3B0aW9uYWwtcGFyYW1ldGVyLWZs
YWcuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9m
YWlsLW9uLXN0cmluZy10eXBlZC1vcHRpb25hbC1wYXJhbWV0ZXItZmxhZy5qc29uCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjQwMTJjNzliNmIzOGMyMWRmZjYwN2ZlYzllZTkwYjI4MDMxMGY5MDgKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFp
bC1vbi1zdHJpbmctdHlwZWQtb3B0aW9uYWwtcGFyYW1ldGVyLWZsYWcuanNvbgpAQCAtMCwwICsx
LDE4IEBACit7CisgICAgImRvbWFpbiI6ICJEYXRhYmFzZSIsCisgICAgInR5cGVzIjogWworICAg
ICAgICB7CisgICAgICAgICAgICAiaWQiOiAiRGF0YWJhc2VJZCIsCisgICAgICAgICAgICAidHlw
ZSI6ICJzdHJpbmciLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBpZGVudGlm
aWVyIG9mIERhdGFiYXNlIG9iamVjdC4iCisgICAgICAgIH0KKyAgICBdLAorICAgICJldmVudHMi
OiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJuYW1lIjogImRpZEV4ZWN1dGVPcHRpb25hbFBh
cmFtZXRlcnMiLAorICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCisgICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6ICJ0
cnVlIiB9CisgICAgICAgICAgICBdCisgICAgICAgIH0KKyAgICBdCit9CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1zdHJp
bmctdHlwZWQtb3B0aW9uYWwtdHlwZS1tZW1iZXIuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLXN0cmluZy10eXBlZC1vcHRpb25hbC10
eXBlLW1lbWJlci5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNhM2VmMjhhOGY4ODE0Y2M2MTdmYjVkNWJjMjEz
MDZkMGFhZDRmZDAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi1zdHJpbmctdHlwZWQtb3B0aW9uYWwtdHlwZS1t
ZW1iZXIuanNvbgpAQCAtMCwwICsxLDE2IEBACitbCit7CisgICAgImRvbWFpbiI6ICJEYXRhYmFz
ZSIsCisgICAgInR5cGVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiRXJyb3Ii
LAorICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlv
biI6ICJEYXRhYmFzZSBlcnJvci4iLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCisgICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJtZXNzYWdlIiwgInR5cGUiOiAic3RyaW5nIiwgImRlc2Ny
aXB0aW9uIjogIkVycm9yIG1lc3NhZ2UuIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
Y29kZSIsICJ0eXBlIjogImludGVnZXIiLCAiZGVzY3JpcHRpb24iOiAiRXJyb3IgY29kZS4iLCAi
b3B0aW9uYWwiOiAiZmFsc2UiIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0KK30K
K10KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9mYWlsLW9uLXR5cGUtZGVjbGFyYXRpb24tdXNpbmctdHlwZS1yZWZlcmVuY2UuanNvbiBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLXR5
cGUtZGVjbGFyYXRpb24tdXNpbmctdHlwZS1yZWZlcmVuY2UuanNvbgpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xOWI3
NTkwY2NjNmY2YmMzNDQzYTRhMjgzY2E2ZmNjZmRmMzI3NzM0Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tdHlw
ZS1kZWNsYXJhdGlvbi11c2luZy10eXBlLXJlZmVyZW5jZS5qc29uCkBAIC0wLDAgKzEsMTMgQEAK
K1sKK3sKKyAgICAiZG9tYWluIjogIlJ1bnRpbWUiLAorICAgICJ0eXBlcyI6IFsKKyAgICAgICAg
eworICAgICAgICAgICAgImlkIjogIlJlbW90ZU9iamVjdElkIiwKKyAgICAgICAgICAgICJ0eXBl
IjogIm9iamVjdCIsCisgICAgICAgICAgICAiJHJlZiI6ICJTb21lVHlwZSIsCisgICAgICAgICAg
ICAiZGVzY3JpcHRpb24iOiAiVW5pcXVlIG9iamVjdCBpZGVudGlmaWVyLiIKKyAgICAgICAgfQor
ICAgIF0KK30KK10KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9mYWlsLW9uLXR5cGUtd2l0aC1sb3dlcmNhc2UtbmFtZS5qc29uIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2ZhaWwtb24tdHlwZS13
aXRoLWxvd2VyY2FzZS1uYW1lLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTMxOTAxZTRhOWFkOTkzNmIwMWJi
YWVkOTdhMWQ0ZGEzNDg0NzhiMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLXR5cGUtd2l0aC1sb3dlcmNhc2Ut
bmFtZS5qc29uCkBAIC0wLDAgKzEsMTAgQEAKK3sKKyAgICAiZG9tYWluIjogIkRhdGFiYXNlIiwK
KyAgICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJkYXRhYmFzZUlk
IiwKKyAgICAgICAgICAgICJ0eXBlIjogImludGVnZXIiLAorICAgICAgICAgICAgImRlc2NyaXB0
aW9uIjogIlVuaXF1ZSBpZGVudGlmaWVyIG9mIERhdGFiYXNlIG9iamVjdC4iCisgICAgICAgIH0K
KyAgICBdCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZmFpbC1vbi11bmtub3duLXR5cGUtcmVmZXJlbmNlLWluLXR5cGUtZGVjbGFy
YXRpb24uanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9mYWlsLW9uLXVua25vd24tdHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1kZWNsYXJhdGlvbi5qc29u
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmQ2ODg3YTI3NDExOTAwYTgwZDUwZjAwM2VhYzM2YzEzYTk5ZmFlNTgKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZmFpbC1vbi11bmtub3duLXR5cGUtcmVmZXJlbmNlLWluLXR5cGUtZGVjbGFyYXRpb24u
anNvbgpAQCAtMCwwICsxLDEyIEBACitbCit7CisgICAgImRvbWFpbiI6ICJSdW50aW1lIiwKKyAg
ICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJSZW1vdGVPYmplY3RJ
ZCIsCisgICAgICAgICAgICAidHlwZSI6ICJkcmFnb24iLAorICAgICAgICAgICAgImRlc2NyaXB0
aW9uIjogIlVuaXF1ZSBvYmplY3QgaWRlbnRpZmllci4iCisgICAgICAgIH0KKyAgICBdCit9Citd
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZmFpbC1vbi11bmtub3duLXR5cGUtcmVmZXJlbmNlLWluLXR5cGUtbWVtYmVyLmpzb24gYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZmFpbC1vbi11bmtu
b3duLXR5cGUtcmVmZXJlbmNlLWluLXR5cGUtbWVtYmVyLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjgxN2Ri
NTA0NGRjMWYyODU1NzAwOGMxZjE3NjFmMWIwNjhmNGNlNgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9mYWlsLW9uLXVua25v
d24tdHlwZS1yZWZlcmVuY2UtaW4tdHlwZS1tZW1iZXIuanNvbgpAQCAtMCwwICsxLDE1IEBACitb
Cit7CisgICAgImRvbWFpbiI6ICJGYW50YXN5IiwKKyAgICAidHlwZXMiOiBbCisgICAgICAgIHsK
KyAgICAgICAgICAgICJpZCI6ICJEcmFnb25FZ2ciLAorICAgICAgICAgICAgInR5cGUiOiAib2Jq
ZWN0IiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJBIGRyYWdvbiBlZ2cuIiwKKyAgICAg
ICAgICAgICJwcm9wZXJ0aWVzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29sb3Ii
LCAiJHJlZiI6ICJDb2xvciIgfQorICAgICAgICAgICAgXQorICAgICAgICB9CisgICAgXQorfQor
XQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL3NhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21h
aW4uanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4zYmY0ZGZmNWNjYzI5ZDBlOGMxZmE0YjJkZDMyODNlNzcxNjMy
YzdkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL3NhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24KQEAgLTAsMCAr
MSwyMiBAQAorWworeworICAgICJkb21haW4iOiAiUnVudGltZSIsCisgICAgInR5cGVzIjogWwor
ICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiUmVtb3RlT2JqZWN0SWQiLAorICAgICAgICAg
ICAgInR5cGUiOiAic3RyaW5nIiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVbmlxdWUg
b2JqZWN0IGlkZW50aWZpZXIuIgorICAgICAgICB9CisgICAgXQorfSwKK3sKKyAgICAiZG9tYWlu
IjogIlJ1bnRpbWUyIiwKKyAgICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJp
ZCI6ICJSZW1vdGVPYmplY3RJZCIsCisgICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAorICAg
ICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVuaXF1ZSBvYmplY3QgaWRlbnRpZmllci4iCisgICAg
ICAgIH0KKyAgICBdCit9CitdCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24g
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvc2hhZG93ZWQt
b3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjBhMGMxNTUyNzUwZjYyODI4
OGNmZjQxOTM5NmJkNmY2YWY3NDlmZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9zaGFkb3dlZC1vcHRpb25hbC10eXBlLXNl
dHRlcnMuanNvbgpAQCAtMCwwICsxLDMxIEBACit7CisgICAgImRvbWFpbiI6ICJSdW50aW1lIiwK
KyAgICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJLZXlQYXRoIiwK
KyAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24i
OiAiS2V5IHBhdGguIiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWworICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAidHlwZSIsCisgICAgICAgICAgICAg
ICAgICAgICJ0eXBlIjogInN0cmluZyIsCisgICAgICAgICAgICAgICAgICAgICJlbnVtIjogWyJu
dWxsIiwgInN0cmluZyIsICJhcnJheSJdLAorICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRp
b24iOiAiS2V5IHBhdGggdHlwZS4iCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgICJuYW1lIjogInN0cmluZyIsCisgICAgICAgICAgICAg
ICAgICAgICJ0eXBlIjogInN0cmluZyIsCisgICAgICAgICAgICAgICAgICAgICJvcHRpb25hbCI6
IHRydWUsCisgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJTdHJpbmcgdmFsdWUu
IgorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICAibmFtZSI6ICJhcnJheSIsCisgICAgICAgICAgICAgICAgICAgICJ0eXBlIjogImFycmF5
IiwKKyAgICAgICAgICAgICAgICAgICAgIm9wdGlvbmFsIjogdHJ1ZSwKKyAgICAgICAgICAgICAg
ICAgICAgIml0ZW1zIjogeyAidHlwZSI6ICJzdHJpbmciIH0sCisgICAgICAgICAgICAgICAgICAg
ICJkZXNjcmlwdGlvbiI6ICJBcnJheSB2YWx1ZS4iCisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgXQorICAgICAgICB9CisgICAgXQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3R5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1w
cmltaXRpdmUtdHlwZS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL3R5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmNiYzlkNTM5NDc4ZGI0OTVjOTYwNjdlY2Q1NGE5NWJlNTJmOGQwNzAKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24KQEAgLTAsMCAr
MSwxMCBAQAoreworICAgICJkb21haW4iOiAiUnVudGltZSIsCisgICAgInR5cGVzIjogWworICAg
ICAgICB7CisgICAgICAgICAgICAiaWQiOiAiUmVtb3RlT2JqZWN0SWQiLAorICAgICAgICAgICAg
InR5cGUiOiAiaW50ZWdlciIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVW5pcXVlIG9i
amVjdCBpZGVudGlmaWVyLiIKKyAgICAgICAgfQorICAgIF0KK30KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy90eXBlLWRlY2xhcmF0aW9u
LWFycmF5LXR5cGUuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy90eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbgpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jZmIw
OGJkOTQwYjY0ZmI2NjAzOTY1Y2UxYjA0ZDNmYzk3NDllYTkwCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3R5cGUtZGVjbGFy
YXRpb24tYXJyYXktdHlwZS5qc29uCkBAIC0wLDAgKzEsNTAgQEAKK1sKK3sKKyAgICAiZG9tYWlu
IjogIkRlYnVnZ2VyIiwKKyAgICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJp
ZCI6ICJCcmVha3BvaW50SWQiLAorICAgICAgICAgICAgInR5cGUiOiAiaW50ZWdlciIKKyAgICAg
ICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIlJlYXNvbiIsCisgICAgICAgICAg
ICAidHlwZSI6ICJzdHJpbmciLAorICAgICAgICAgICAgImVudW0iOiBbIkRpZWQiLCAiRmFpbnRl
ZCIsICJIdW5ncnkiXQorICAgICAgICB9CisgICAgXQorfSwKK3sKKyAgICAiZG9tYWluIjogIlJ1
bnRpbWUiLAorICAgICJ0eXBlcyI6IFsKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIk9i
amVjdElkIiwKKyAgICAgICAgICAgICJ0eXBlIjogImludGVnZXIiCisgICAgICAgIH0sCisgICAg
ICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJMdWNreU51bWJlcnMiLAorICAgICAgICAgICAgInR5
cGUiOiAiYXJyYXkiLAorICAgICAgICAgICAgIml0ZW1zIjogeyAidHlwZSI6ICJpbnRlZ2VyIiB9
CisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJCYWJ5TmFtZXMiLAor
ICAgICAgICAgICAgInR5cGUiOiAiYXJyYXkiLAorICAgICAgICAgICAgIml0ZW1zIjogeyAidHlw
ZSI6ICJzdHJpbmciIH0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjog
Ik5ld09iamVjdHMiLAorICAgICAgICAgICAgInR5cGUiOiAiYXJyYXkiLAorICAgICAgICAgICAg
Iml0ZW1zIjogeyAiJHJlZiI6ICJPYmplY3RJZCIgfQorICAgICAgICB9LAorICAgICAgICB7Cisg
ICAgICAgICAgICAiaWQiOiAiT2xkT2JqZWN0cyIsCisgICAgICAgICAgICAidHlwZSI6ICJhcnJh
eSIsCisgICAgICAgICAgICAiaXRlbXMiOiB7ICIkcmVmIjogIkRlYnVnZ2VyLkJyZWFrcG9pbnRJ
ZCIgfQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiU3RvcFJlYXNv
bnMiLAorICAgICAgICAgICAgInR5cGUiOiAiYXJyYXkiLAorICAgICAgICAgICAgIml0ZW1zIjog
eyAiJHJlZiI6ICJEZWJ1Z2dlci5SZWFzb24iIH0KKyAgICAgICAgfQorICAgIF0KK30KK10KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy90
eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3R5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24KbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uOWYwYWVlOWM5MWI5NWFiYWYzODdlNzJhOTFhMzMzOGI1NzlkYTlhYQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy90eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uCkBAIC0wLDAgKzEsMTUgQEAKK3sKKyAg
ICAiZG9tYWluIjogIlJ1bnRpbWUiLAorICAgICJ0eXBlcyI6IFsKKyAgICAgICAgeworICAgICAg
ICAgICAgImlkIjogIkZhcm1BbmltYWxzIiwKKyAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIs
CisgICAgICAgICAgICAiZW51bSI6IFsiUGlncyIsICJDb3dzIiwgIkNhdHMiLCAiSGVucyJdCisg
ICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJUd29MZWdnZWRBbmltYWxz
IiwKKyAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCisgICAgICAgICAgICAiZW51bSI6IFsi
RHVja3MiLCAiSGVucyIsICJDcm93cyIsICJGbGFtaW5nb3MiXQorICAgICAgICB9CisgICAgXQor
fQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL3R5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy90eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBl
Lmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNmY1N2FkMmNmNWY3OGJjNjU0ZGY4MWE5M2RiYjU2MDY5ZDE1YTQz
MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy90eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24KQEAgLTAsMCArMSw5
NyBAQAorWworeworICAgICJkb21haW4iOiAiRGF0YWJhc2UiLAorICAgICJkZXNjcmlwdGlvbiI6
ICJUZXN0IHR5cGUgYnVpbGRlciBnZW5lcmF0aW9uIG9mIHZhcmlvdXMgb2JqZWN0IHR5cGVzLiIs
CisgICAgInR5cGVzIjogWworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiRXJyb3IiLAor
ICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKKyAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6
ICJEYXRhYmFzZSBlcnJvci4iLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCisgICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJtZXNzYWdlIiwgInR5cGUiOiAic3RyaW5nIiwgImRlc2NyaXB0
aW9uIjogIkVycm9yIG1lc3NhZ2UuIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY29k
ZSIsICJ0eXBlIjogImludGVnZXIiLCAiZGVzY3JpcHRpb24iOiAiRXJyb3IgY29kZS4iIH0KKyAg
ICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgImlkIjogIk9w
dGlvbmFsUGFyYW1ldGVyQnVuZGxlIiwKKyAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCisg
ICAgICAgICAgICAicHJvcGVydGllcyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNv
bHVtbk5hbWVzIiwgInR5cGUiOiAiYXJyYXkiLCAib3B0aW9uYWwiOiB0cnVlLCAiaXRlbXMiOiB7
ICJ0eXBlIjogInN0cmluZyIgfSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibm90ZXMi
LCAidHlwZSI6ICJzdHJpbmciLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJ0aW1lc3RhbXAiLCAidHlwZSI6ICJudW1iZXIiLCAib3B0aW9uYWwiOiB0cnVl
IH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ2YWx1ZXMiLCAidHlwZSI6ICJvYmplY3Qi
LCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwYXlsb2Fk
IiwgInR5cGUiOiAiYW55IiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAiZXJyb3IiLCAiJHJlZiI6ICJFcnJvciIsICJvcHRpb25hbCI6IHRydWUgfQorICAg
ICAgICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiUGFy
YW1ldGVyQnVuZGxlIiwKKyAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCisgICAgICAgICAg
ICAicHJvcGVydGllcyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNvbHVtbk5hbWVz
IiwgInR5cGUiOiAiYXJyYXkiLCAiaXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSB9LAorICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAibm90ZXMiLCAidHlwZSI6ICJzdHJpbmciIH0sCisgICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJ0aW1lc3RhbXAiLCAidHlwZSI6ICJudW1iZXIiIH0sCisg
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ2YWx1ZXMiLCAidHlwZSI6ICJvYmplY3QiIH0sCisg
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwYXlsb2FkIiwgInR5cGUiOiAiYW55IiB9LAorICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAiZXJyb3IiLCAiJHJlZiI6ICJFcnJvciIgfQorICAgICAg
ICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiT2JqZWN0
V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0cyIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAi
Q29uZmxpY3RlZCBuYW1lcyBtYXkgY2F1c2UgZ2VuZXJhdGVkIGdldHRlcnMvc2V0dGVycyB0byBj
bGFzaCB3aXRoIGJ1aWx0LWluIEluc3BlY3Rvck9iamVjdCBtZXRob2RzLiIsCisgICAgICAgICAg
ICAidHlwZSI6ICJvYmplY3QiLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCisgICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJpbnRlZ2VyIiwgInR5cGUiOiAic3RyaW5nIiB9LAorICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAiYXJyYXkiLCAidHlwZSI6ICJzdHJpbmciIH0sCisgICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJzdHJpbmciLCAidHlwZSI6ICJzdHJpbmciIH0sCisgICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJ2YWx1ZSIsICJ0eXBlIjogInN0cmluZyIgfSwKKyAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogIm9iamVjdCIsICJ0eXBlIjogInN0cmluZyIgfQorICAgICAgICAg
ICAgXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiRHVtbXlPYmpl
Y3QiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkFuIG9wZW4gb2JqZWN0IHRoYXQgZG9l
c24ndCBoYXZlIGFueSBwcmVkZWZpbmVkIGZpZWxkcy4iLAorICAgICAgICAgICAgInR5cGUiOiAi
b2JqZWN0IgorICAgICAgICB9CisgICAgXQorfSwKK3sKKyAgICAiZG9tYWluIjogIlRlc3QiLAor
ICAgICJkZXNjcmlwdGlvbiI6ICJUZXN0IHRoZSBnZW5lcmF0aW9uIG9mIHNwZWNpYWwgYmVoYXZp
b3JzIHRoYXQgb25seSBhcHBseSB0byBzcGVjaWZpYyBjbGFzc2VzLiIsCisgICAgInR5cGVzIjog
WworICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiVW5wbGVhc2FudE5hbWUiLAorICAgICAg
ICAgICAgImRlc2NyaXB0aW9uIjogIlRoaXMgdHlwZSBzaG91bGQgYmUgcmVuYW1lZCB0byBIYXBw
eU5hbWUiLAorICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKKyAgICAgICAgICAgICJtZW1i
ZXJzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibm90ZXMiLCAidHlwZSI6ICJzdHJp
bmciIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0aW1lc3RhbXAiLCAidHlwZSI6ICJu
dW1iZXIiIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ2YWx1ZXMiLCAidHlwZSI6ICJv
YmplY3QiIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAg
ICAgImlkIjogIlBhcmFtZXRlckJ1bmRsZSIsCisgICAgICAgICAgICAidHlwZSI6ICJvYmplY3Qi
LAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJjb2x1bW5OYW1lcyIsICJ0eXBlIjogImFycmF5IiwgIml0ZW1zIjogeyAidHlwZSI6ICJzdHJp
bmciIH0gfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm5vdGVzIiwgInR5cGUiOiAic3Ry
aW5nIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidGltZXN0YW1wIiwgInR5cGUiOiAi
bnVtYmVyIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidmFsdWVzIiwgInR5cGUiOiAi
b2JqZWN0IiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicGF5bG9hZCIsICJ0eXBlIjog
ImFueSIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImVycm9yIiwgIiRyZWYiOiAiRGF0
YWJhc2UuRXJyb3IiIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0sCisgICAgImNv
bW1hbmRzIjogWworICAgICAgICB7CisgICAgICAgICAgICAibmFtZSI6ICJhdHRlbXB0Q3Vyc2Ui
LAorICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJjdXJzZSIsICIkcmVmIjogIlVucGxlYXNhbnROYW1lIiB9CisgICAgICAgICAgICBdLAorICAg
ICAgICAgICAgInJldHVybnMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjZW5zb3Jl
ZEN1cnNlIiwgInR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjogdHJ1ZSB9CisgICAgICAgICAg
ICBdCisgICAgICAgIH0KKyAgICBdCit9CitdCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0
cy5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3R5
cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44M2Q5NGJlODk3ZDIy
Y2MwNThiYjY0NmZlY2Q5YTQ3MzAzN2I2YjkyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL3R5cGUtcmVxdWlyaW5nLXJ1bnRp
bWUtY2FzdHMuanNvbgpAQCAtMCwwICsxLDUxIEBACitbCit7CisgICAgImRvbWFpbiI6ICJUZXN0
IiwKKyAgICAidHlwZXMiOiBbCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJUeXBlTmVl
ZGluZ0Nhc3QiLAorICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKKyAgICAgICAgICAgICJk
ZXNjcmlwdGlvbiI6ICJBIGR1bW15IHR5cGUgdGhhdCByZXF1aXJlcyBydW50aW1lIGNhc3RzLCBh
bmQgZm9yY2VzIG5vbi1wcmltaXRpdmUgcmVmZXJlbmNlZCB0eXBlcyB0byBhbHNvIGVtaXQgcnVu
dGltZSBjYXN0IGhlbHBlcnMuIiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWworICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAic3RyaW5nIiwgInR5cGUiOiAic3RyaW5nIiwgImRlc2NyaXB0
aW9uIjogIlN0cmluZyBtZW1iZXIuIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibnVt
YmVyIiwgInR5cGUiOiAiaW50ZWdlciIsICJkZXNjcmlwdGlvbiI6ICJOdW1iZXIgbWVtYmVyLiIg
fSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImFuaW1hbHMiLCAiJHJlZiI6ICJDYXN0ZWRB
bmltYWxzIiwgImRlc2NyaXB0aW9uIjogIkVudW0gbWVtYmVyLiIgfSwKKyAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogImlkIiwgIiRyZWYiOiAiQ2FzdGVkT2JqZWN0SWQiLCAiZGVzY3JpcHRpb24i
OiAiQWxpYXNlZCBtZW1iZXIuIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidHJlZSIs
ICIkcmVmIjogIlJlY3Vyc2l2ZU9iamVjdDEiLCAiZGVzY3JpcHRpb24iOiAiUmVjdXJzaXZlIG9i
amVjdCBtZW1iZXIuIiB9CisgICAgICAgICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAg
ICAgICAgICAgICJpZCI6ICJDYXN0ZWRPYmplY3RJZCIsCisgICAgICAgICAgICAidHlwZSI6ICJp
bnRlZ2VyIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiVW5jYXN0
ZWRPYmplY3RJZCIsCisgICAgICAgICAgICAidHlwZSI6ICJpbnRlZ2VyIgorICAgICAgICB9LAor
ICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiVW5jYXN0ZWRBbmltYWxzIiwKKyAgICAgICAg
ICAgICJ0eXBlIjogInN0cmluZyIsCisgICAgICAgICAgICAiZW51bSI6IFsiUGlncyIsICJDb3dz
IiwgIkNhdHMiLCAiSGVucyJdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJp
ZCI6ICJDYXN0ZWRBbmltYWxzIiwKKyAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCisgICAg
ICAgICAgICAiZW51bSI6IFsiRHVja3MiLCAiSGVucyIsICJDcm93cyIsICJGbGFtaW5nb3MiXQor
ICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiUmVjdXJzaXZlT2JqZWN0
MSIsCisgICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAorICAgICAgICAgICAgInByb3BlcnRp
ZXMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJvYmoiLCAiJHJlZiI6ICJSZWN1cnNp
dmVPYmplY3QyIiwgIm9wdGlvbmFsIjogdHJ1ZSB9CisgICAgICAgICAgICBdCisgICAgICAgIH0s
CisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJSZWN1cnNpdmVPYmplY3QyIiwKKyAgICAg
ICAgICAgICJ0eXBlIjogIm9iamVjdCIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IFsKKyAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogIm9iaiIsICIkcmVmIjogIlJlY3Vyc2l2ZU9iamVjdDEi
LCAib3B0aW9uYWwiOiB0cnVlIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfQorICAgIF0KK30K
K10KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dl
YkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggZjU2ZjBlZDA3YzY1MTE4NDQ5MzhjNzZhZDg2NGJm
ZGRjMzJhYjY0Ny4uY2UxNTgxZGQ5NTkyMjlhYmIxODdkZGRlYmJlMGJhMGRjMTdmNzI1OCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQKQEAgLTc4Nyw2ICs3ODcsMjEgQEAgc2V0KFdlYkNvcmVfSURMX0ZJ
TEVTCiAKIHNldChXZWJDb3JlX0lOU1BFQ1RPUl9TQ1JJUFRTX0RJUiAiJHtKQVZBU0NSSVBUQ09S
RV9ESVJ9L2luc3BlY3Rvci9zY3JpcHRzIikKIAorc2V0KFdlYkNvcmVfSU5TUEVDVE9SX1BST1RP
Q09MX1NDUklQVFMKKyAgICAke1dlYkNvcmVfSU5TUEVDVE9SX1NDUklQVFNfRElSfS9nZW5lcmF0
ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3MucHkKKyAgICAke1dlYkNvcmVfSU5TUEVDVE9S
X1NDUklQVFNfRElSfS9jb2RlZ2VuL2dlbmVyYXRlX2JhY2tlbmRfY29tbWFuZHMucHkKKyAgICAk
e1dlYkNvcmVfSU5TUEVDVE9SX1NDUklQVFNfRElSfS9jb2RlZ2VuL2dlbmVyYXRlX2JhY2tlbmRf
ZGlzcGF0Y2hlcl9oZWFkZXIucHkKKyAgICAke1dlYkNvcmVfSU5TUEVDVE9SX1NDUklQVFNfRElS
fS9jb2RlZ2VuL2dlbmVyYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQor
ICAgICR7V2ViQ29yZV9JTlNQRUNUT1JfU0NSSVBUU19ESVJ9L2NvZGVnZW4vZ2VuZXJhdGVfZnJv
bnRlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkKKyAgICAke1dlYkNvcmVfSU5TUEVDVE9SX1NDUklQ
VFNfRElSfS9jb2RlZ2VuL2dlbmVyYXRlX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRp
b24ucHkKKyAgICAke1dlYkNvcmVfSU5TUEVDVE9SX1NDUklQVFNfRElSfS9jb2RlZ2VuL2dlbmVy
YXRlX3R5cGVfYnVpbGRlcl9oZWFkZXIucHkKKyAgICAke1dlYkNvcmVfSU5TUEVDVE9SX1NDUklQ
VFNfRElSfS9jb2RlZ2VuL2dlbmVyYXRlX3R5cGVfYnVpbGRlcl9pbXBsZW1lbnRhdGlvbi5weQor
ICAgICR7V2ViQ29yZV9JTlNQRUNUT1JfU0NSSVBUU19ESVJ9L2NvZGVnZW4vZ2VuZXJhdG9yLnB5
CisgICAgJHtXZWJDb3JlX0lOU1BFQ1RPUl9TQ1JJUFRTX0RJUn0vY29kZWdlbi9nZW5lcmF0b3Jf
dGVtcGxhdGVzLnB5CisgICAgJHtXZWJDb3JlX0lOU1BFQ1RPUl9TQ1JJUFRTX0RJUn0vY29kZWdl
bi9fX2luaXRfXy5weQorICAgICR7V2ViQ29yZV9JTlNQRUNUT1JfU0NSSVBUU19ESVJ9L2NvZGVn
ZW4vbW9kZWxzLnB5CispCisKIHNldChXZWJDb3JlX0lOU1BFQ1RPUl9ET01BSU5TCiAgICAgJHtX
RUJDT1JFX0RJUn0vaW5zcGVjdG9yL3Byb3RvY29sL0FwcGxpY2F0aW9uQ2FjaGUuanNvbgogICAg
ICR7V0VCQ09SRV9ESVJ9L2luc3BlY3Rvci9wcm90b2NvbC9DU1MuanNvbgpAQCAtMzI2NCw3ICsz
Mjc5LDcgQEAgYWRkX2N1c3RvbV9jb21tYW5kKAogICAgIENPTU1BTkQgJHtQWVRIT05fRVhFQ1VU
QUJMRX0gJHtXZWJDb3JlX0lOU1BFQ1RPUl9TQ1JJUFRTX0RJUn0vZ2VuZXJhdGUtY29tYmluZWQt
aW5zcGVjdG9yLWpzb24ucHkgJHtXZWJDb3JlX0lOU1BFQ1RPUl9ET01BSU5TfSA+ICR7REVSSVZF
RF9TT1VSQ0VTX1dFQkNPUkVfRElSfS9JbnNwZWN0b3JXZWIuanNvbgogICAgIFZFUkJBVElNKQog
Ci0jIEFsbCBXZWIgSW5zcGVjdG9yIGdlbmVyYXRlZCBmaWxlcyBhcmUgY3JlYXRlZCB3aXRoIHRo
aXMgb25lIGNhbGwgdG8gQ29kZUdlbmVyYXRvckluc3BlY3Rvci5wbQorIyBBbGwgV2ViIEluc3Bl
Y3RvciBnZW5lcmF0ZWQgZmlsZXMgYXJlIGNyZWF0ZWQgd2l0aCB0aGlzIG9uZSBjYWxsIHRvIGdl
bmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1iaW5kaW5ncy5weQogYWRkX2N1c3RvbV9jb21tYW5k
KAogICAgIE9VVFBVVCAke0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0vSW5zcGVjdG9yV2Vi
QmFja2VuZERpc3BhdGNoZXJzLmNwcAogICAgICAgICAgICAke0RFUklWRURfU09VUkNFU19XRUJD
T1JFX0RJUn0vSW5zcGVjdG9yV2ViQmFja2VuZERpc3BhdGNoZXJzLmgKQEAgLTMyNzQsMTEgKzMy
ODksOSBAQCBhZGRfY3VzdG9tX2NvbW1hbmQoCiAgICAgICAgICAgICR7REVSSVZFRF9TT1VSQ0VT
X1dFQkNPUkVfRElSfS9JbnNwZWN0b3JXZWJUeXBlQnVpbGRlcnMuaAogICAgICAgICAgICAke0RF
UklWRURfU09VUkNFU19XRUJJTlNQRUNUT1JVSV9ESVJ9L1VzZXJJbnRlcmZhY2UvUHJvdG9jb2wv
SW5zcGVjdG9yV2ViQmFja2VuZENvbW1hbmRzLmpzCiAgICAgTUFJTl9ERVBFTkRFTkNZICR7REVS
SVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfS9JbnNwZWN0b3JXZWIuanNvbgotICAgIERFUEVORFMg
JHtXZWJDb3JlX0lOU1BFQ1RPUl9TQ1JJUFRTX0RJUn0vQ29kZUdlbmVyYXRvckluc3BlY3Rvci5w
eQotICAgICAgICAgICAgJHtXZWJDb3JlX0lOU1BFQ1RPUl9TQ1JJUFRTX0RJUn0vQ29kZUdlbmVy
YXRvckluc3BlY3RvclN0cmluZ3MucHkKKyAgICBERVBFTkRTICR7V2ViQ29yZV9JTlNQRUNUT1Jf
UFJPVE9DT0xfU0NSSVBUU30KICAgICAgICAgICAgICR7REVSSVZFRF9TT1VSQ0VTX0pBVkFTQ1JJ
UFRDT1JFX0RJUn0vSW5zcGVjdG9ySlMuanNvbgotICAgICAgICAgICAgJHtERVJJVkVEX1NPVVJD
RVNfSkFWQVNDUklQVENPUkVfRElSfS9pbnNwZWN0b3IvSW5zcGVjdG9ySlNUeXBlQnVpbGRlcnMu
aAotICAgIENPTU1BTkQgJHtQWVRIT05fRVhFQ1VUQUJMRX0gJHtXZWJDb3JlX0lOU1BFQ1RPUl9T
Q1JJUFRTX0RJUn0vQ29kZUdlbmVyYXRvckluc3BlY3Rvci5weSAke0RFUklWRURfU09VUkNFU19X
RUJDT1JFX0RJUn0vSW5zcGVjdG9yV2ViLmpzb24gJHtERVJJVkVEX1NPVVJDRVNfSkFWQVNDUklQ
VENPUkVfRElSfS9JbnNwZWN0b3JKUy5qc29uIC0tb3V0cHV0X2hfZGlyICIke0RFUklWRURfU09V
UkNFU19XRUJDT1JFX0RJUn0iIC0tb3V0cHV0X2NwcF9kaXIgIiR7REVSSVZFRF9TT1VSQ0VTX1dF
QkNPUkVfRElSfSIgLS1vdXRwdXRfanNfZGlyICIke0RFUklWRURfU09VUkNFU19XRUJJTlNQRUNU
T1JVSV9ESVJ9L1VzZXJJbnRlcmZhY2UvUHJvdG9jb2wiIC0tb3V0cHV0X3R5cGUgV2ViIC0td3Jp
dGVfYWx3YXlzCisgICAgQ09NTUFORCAke1BZVEhPTl9FWEVDVVRBQkxFfSAke1dlYkNvcmVfSU5T
UEVDVE9SX1NDUklQVFNfRElSfS9nZW5lcmF0ZS1pbnNwZWN0b3ItcHJvdG9jb2wtYmluZGluZ3Mu
cHkgLS1vdXRwdXREaXIgIiR7REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfSIgLS1mcmFtZXdv
cmsgV2ViQ29yZSAke0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0vSW5zcGVjdG9yV2ViLmpz
b24gJHtERVJJVkVEX1NPVVJDRVNfSkFWQVNDUklQVENPUkVfRElSfS9JbnNwZWN0b3JKUy5qc29u
ICYmIGNwICR7REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfS9JbnNwZWN0b3JXZWJCYWNrZW5k
Q29tbWFuZHMuanMgJHtERVJJVkVEX1NPVVJDRVNfV0VCSU5TUEVDVE9SVUlfRElSfS9Vc2VySW50
ZXJmYWNlL1Byb3RvY29sCiAgICAgVkVSQkFUSU0pCiAKIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09V
UkNFUwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZSBiL1Nv
dXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKaW5kZXggZTQxNzVhODk3ZTNkZGZhZDhk
MzI4Yzg3NDY2ZTllZmMyMmY5MWQyOC4uYTljZjZjMjFlYTIzZmU1YTFiMWY2N2ZiNWY0ZjM2OTg5
NTVlM2Y0OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQor
KysgYi9Tb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCkBAIC0xMTUxLDggKzExNTEs
MTggQEAgaWZlcSAoJChmaW5kc3RyaW5nIEVOQUJMRV9XRUJfUkVQTEFZLCQoRkVBVFVSRV9ERUZJ
TkVTKSksIEVOQUJMRV9XRUJfUkVQTEFZKQogZW5kaWYKIAogSU5TUEVDVE9SX0dFTkVSQVRPUl9T
Q1JJUFRTID0gXAotCSQoSW5zcGVjdG9yU2NyaXB0cykvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5w
eSBcCi0JJChJbnNwZWN0b3JTY3JpcHRzKS9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yU3RyaW5ncy5w
eSBcCisgICAgJChJbnNwZWN0b3JTY3JpcHRzKS9nZW5lcmF0ZV9iYWNrZW5kX2NvbW1hbmRzLnB5
IFwKKyAgICAkKEluc3BlY3RvclNjcmlwdHMpL2dlbmVyYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9o
ZWFkZXIucHkgXAorICAgICQoSW5zcGVjdG9yU2NyaXB0cykvZ2VuZXJhdGVfYmFja2VuZF9kaXNw
YXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5IFwKKyAgICAkKEluc3BlY3RvclNjcmlwdHMpL2dlbmVy
YXRlX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5IFwKKyAgICAkKEluc3BlY3RvclNjcmlw
dHMpL2dlbmVyYXRlX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkgXAorICAg
ICQoSW5zcGVjdG9yU2NyaXB0cykvZ2VuZXJhdGVfdHlwZV9idWlsZGVyX2hlYWRlci5weSBcCisg
ICAgJChJbnNwZWN0b3JTY3JpcHRzKS9nZW5lcmF0ZV90eXBlX2J1aWxkZXJfaW1wbGVtZW50YXRp
b24ucHkgXAorICAgICQoSW5zcGVjdG9yU2NyaXB0cykvZ2VuZXJhdG9yX3RlbXBsYXRlcy5weSBc
CisgICAgJChJbnNwZWN0b3JTY3JpcHRzKS9nZW5lcmF0b3IucHkgXAorICAgICQoSW5zcGVjdG9y
U2NyaXB0cykvZ2VuZXJhdGUtY29tYmluZWQtaW5zcGVjdG9yLWpzb24ucHkgXAorICAgICQoSW5z
cGVjdG9yU2NyaXB0cykvZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5IFwK
KyAgICAkKEluc3BlY3RvclNjcmlwdHMpL21vZGVscy5weSBcCiAjCiAKIGFsbCA6IEluc3BlY3Rv
cldlYi5qc29uCkBAIC0xMTcwLDcgKzExODAsNyBAQCBJbnNwZWN0b3JXZWIuanNvbiA6ICQoSW5z
cGVjdG9yU2NyaXB0cykvZ2VuZXJhdGUtY29tYmluZWQtaW5zcGVjdG9yLWpzb24ucHkgJChJTgog
YWxsIDogSW5zcGVjdG9yV2ViRnJvbnRlbmREaXNwYXRjaGVycy5oCiAKIEluc3BlY3RvcldlYkZy
b250ZW5kRGlzcGF0Y2hlcnMuaCA6IEluc3BlY3RvcldlYi5qc29uICQoSW5zcGVjdG9yU2NyaXB0
cykvSW5zcGVjdG9ySlMuanNvbiAkKElOU1BFQ1RPUl9HRU5FUkFUT1JfU0NSSVBUUykKLQkkKFBZ
VEhPTikgJChJbnNwZWN0b3JTY3JpcHRzKS9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5IC4vSW5z
cGVjdG9yV2ViLmpzb24gJChJbnNwZWN0b3JTY3JpcHRzKS9JbnNwZWN0b3JKUy5qc29uIC0tb3V0
cHV0X2hfZGlyIC4gLS1vdXRwdXRfY3BwX2RpciAuIC0tb3V0cHV0X2pzX2RpciAuIC0tb3V0cHV0
X3R5cGUgV2ViCisJJChQWVRIT04pICQoSW5zcGVjdG9yU2NyaXB0cykvZ2VuZXJhdGUtaW5zcGVj
dG9yLXByb3RvY29sLWJpbmRpbmdzLnB5IC0tZnJhbWV3b3JrIFdlYkNvcmUgLS1vdXRwdXREaXIg
LiAuL0luc3BlY3RvcldlYi5qc29uICQoSW5zcGVjdG9yU2NyaXB0cykvSW5zcGVjdG9ySlMuanNv
bgogCiBhbGwgOiBJbnNwZWN0b3JPdmVybGF5UGFnZS5oCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9Db21tYW5kTGluZUFQSUhvc3QuY3BwIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0NvbW1hbmRMaW5lQVBJSG9zdC5jcHAKaW5kZXggNTdiOTIxYWVkOWNkNGFkNTNl
OTViMTRjYjFjOTM2ZDY0YTEwZTQ4MS4uYjY4YjRjZTlkMjliNzkwYTMyOWNmMjI4NGEzNmI1NjZj
ZGI5MmMwZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvbW1hbmRMaW5l
QVBJSG9zdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvbW1hbmRMaW5lQVBJ
SG9zdC5jcHAKQEAgLTk1LDcgKzk1LDcgQEAgdm9pZCBDb21tYW5kTGluZUFQSUhvc3Q6OmRpc2Nv
bm5lY3QoKQogdm9pZCBDb21tYW5kTGluZUFQSUhvc3Q6Omluc3BlY3RJbXBsKFBhc3NSZWZQdHI8
SW5zcGVjdG9yVmFsdWU+IG9iamVjdCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gaGludHMp
CiB7CiAgICAgaWYgKG1faW5zcGVjdG9yQWdlbnQpIHsKLSAgICAgICAgUmVmUHRyPEluc3BlY3Rv
cjo6VHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4gcmVtb3RlT2JqZWN0ID0gSW5z
cGVjdG9yOjpUeXBlQnVpbGRlcjo6UnVudGltZTo6UmVtb3RlT2JqZWN0OjpydW50aW1lQ2FzdChv
YmplY3QpOworICAgICAgICBSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UnVudGltZTo6
UmVtb3RlT2JqZWN0PiByZW1vdGVPYmplY3QgPSBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6VHlw
ZUJ1aWxkZXI6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD46OnJ1bnRpbWVDYXN0KG9iamVjdCk7CiAg
ICAgICAgIG1faW5zcGVjdG9yQWdlbnQtPmluc3BlY3QocmVtb3RlT2JqZWN0LCBoaW50cy0+YXNP
YmplY3QoKSk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckNTU0FnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JDU1NBZ2VudC5jcHAKaW5kZXggMzA1YTk5NTRkZjFhOTdmMWMwYzA3MWQ4NGY3NDkxMGFhMDBk
NmY4Yy4uMTY5ZDM3Y2IyZTI3NGU2MWViMDEyZjQyNzExMDk4OWJlOWUxNDMwNyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwCkBAIC0xMDAwLDkg
KzEwMDAsOSBAQCBJbnNwZWN0b3JTdHlsZVNoZWV0KiBJbnNwZWN0b3JDU1NBZ2VudDo6YXNzZXJ0
U3R5bGVTaGVldEZvcklkKEVycm9yU3RyaW5nKiBlcnJvcgogICAgIHJldHVybiBpdC0+dmFsdWUu
Z2V0KCk7CiB9CiAKLUluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNTUzo6U3R5bGVTaGVldE9yaWdp
bjo6RW51bSBJbnNwZWN0b3JDU1NBZ2VudDo6ZGV0ZWN0T3JpZ2luKENTU1N0eWxlU2hlZXQqIHBh
Z2VTdHlsZVNoZWV0LCBEb2N1bWVudCogb3duZXJEb2N1bWVudCkKK0luc3BlY3Rvcjo6VHlwZUJ1
aWxkZXI6OkNTUzo6U3R5bGVTaGVldE9yaWdpbiBJbnNwZWN0b3JDU1NBZ2VudDo6ZGV0ZWN0T3Jp
Z2luKENTU1N0eWxlU2hlZXQqIHBhZ2VTdHlsZVNoZWV0LCBEb2N1bWVudCogb3duZXJEb2N1bWVu
dCkKIHsKLSAgICBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW46
OkVudW0gb3JpZ2luID0gSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q1NTOjpTdHlsZVNoZWV0T3Jp
Z2luOjpSZWd1bGFyOworICAgIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNTUzo6U3R5bGVTaGVl
dE9yaWdpbiBvcmlnaW4gPSBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDU1M6OlN0eWxlU2hlZXRP
cmlnaW46OlJlZ3VsYXI7CiAgICAgaWYgKHBhZ2VTdHlsZVNoZWV0ICYmICFwYWdlU3R5bGVTaGVl
dC0+b3duZXJOb2RlKCkgJiYgcGFnZVN0eWxlU2hlZXQtPmhyZWYoKS5pc0VtcHR5KCkpCiAgICAg
ICAgIG9yaWdpbiA9IEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNTUzo6U3R5bGVTaGVldE9yaWdp
bjo6VXNlckFnZW50OwogICAgIGVsc2UgaWYgKHBhZ2VTdHlsZVNoZWV0ICYmIHBhZ2VTdHlsZVNo
ZWV0LT5vd25lck5vZGUoKSAmJiBwYWdlU3R5bGVTaGVldC0+b3duZXJOb2RlKCktPm5vZGVOYW1l
KCkgPT0gIiNkb2N1bWVudCIpCkBAIC0xMTA2LDcgKzExMDYsNyBAQCBQYXNzUmVmUHRyPEluc3Bl
Y3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5PEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNTUzo6UmVn
aW9uPj4gSQogICAgIFJlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheTxJbnNwZWN0
b3I6OlR5cGVCdWlsZGVyOjpDU1M6OlJlZ2lvbj4+IHJlZ2lvbnMgPSBJbnNwZWN0b3I6OlR5cGVC
dWlsZGVyOjpBcnJheTxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDU1M6OlJlZ2lvbj46OmNyZWF0
ZSgpOwogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlZ2lvbkxpc3QtPmxlbmd0aCgp
OyArK2kpIHsKLSAgICAgICAgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q1NTOjpSZWdpb246OlJl
Z2lvbk92ZXJzZXQ6OkVudW0gcmVnaW9uT3ZlcnNldDsKKyAgICAgICAgSW5zcGVjdG9yOjpUeXBl
QnVpbGRlcjo6Q1NTOjpSZWdpb246OlJlZ2lvbk92ZXJzZXQgcmVnaW9uT3ZlcnNldDsKIAogICAg
ICAgICBzd2l0Y2ggKHRvRWxlbWVudChyZWdpb25MaXN0LT5pdGVtKGkpKS0+cmVnaW9uT3ZlcnNl
dFN0YXRlKCkpIHsKICAgICAgICAgY2FzZSBSZWdpb25GaXQ6CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5oCmluZGV4IDM2NTIzN2YwMzZhNmNmNmJiZTFhNWY1
MzM3NGI3NWNlNTI2MDc4ZjIuLjE3NTVkNzIwYzMxNWUyZWQ4YzFkYTYwNGYyMDVmNmJiZGU5ZDAx
NWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2Vu
dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5oCkBA
IC0xNDksNyArMTQ5LDcgQEAgcHJpdmF0ZToKICAgICBJbnNwZWN0b3JTdHlsZVNoZWV0KiBiaW5k
U3R5bGVTaGVldChDU1NTdHlsZVNoZWV0Kik7CiAgICAgSW5zcGVjdG9yU3R5bGVTaGVldCogdmlh
SW5zcGVjdG9yU3R5bGVTaGVldChEb2N1bWVudCosIGJvb2wgY3JlYXRlSWZBYnNlbnQpOwogICAg
IEluc3BlY3RvclN0eWxlU2hlZXQqIGFzc2VydFN0eWxlU2hlZXRGb3JJZChFcnJvclN0cmluZyos
IGNvbnN0IFN0cmluZyYpOwotICAgIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNTUzo6U3R5bGVT
aGVldE9yaWdpbjo6RW51bSBkZXRlY3RPcmlnaW4oQ1NTU3R5bGVTaGVldCogcGFnZVN0eWxlU2hl
ZXQsIERvY3VtZW50KiBvd25lckRvY3VtZW50KTsKKyAgICBJbnNwZWN0b3I6OlR5cGVCdWlsZGVy
OjpDU1M6OlN0eWxlU2hlZXRPcmlnaW4gZGV0ZWN0T3JpZ2luKENTU1N0eWxlU2hlZXQqIHBhZ2VT
dHlsZVNoZWV0LCBEb2N1bWVudCogb3duZXJEb2N1bWVudCk7CiAKICAgICBQYXNzUmVmUHRyPElu
c3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTUnVsZT4gYnVpbGRPYmplY3RGb3JSdWxlKFN0
eWxlUnVsZSosIFN0eWxlUmVzb2x2ZXImKTsKICAgICBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6VHlw
ZUJ1aWxkZXI6OkNTUzo6Q1NTUnVsZT4gYnVpbGRPYmplY3RGb3JSdWxlKENTU1N0eWxlUnVsZSop
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAKaW5k
ZXggYWZlZWU5NDM3MTQzZWJhODJhMTFkYWM4MWNiOGRlYmE1YTcwZTU0YS4uYjJjYjRjNjQwZDY1
ZWY1NDM1ODM2ZmZmNTdlM2U0M2M3MDdmNjFjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCkBAIC0xNDQ1LDcgKzE0NDUsNyBAQCBQYXNzUmVm
UHRyPFR5cGVCdWlsZGVyOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzPiBJbnNwZWN0b3JE
T01BZ2VudDo6YnVpbGRPYgogCiAgICAgTm9kZSogYWN0aXZlRGVzY2VuZGFudE5vZGUgPSBudWxs
cHRyOwogICAgIGJvb2wgYnVzeSA9IGZhbHNlOwotICAgIFR5cGVCdWlsZGVyOjpET006OkFjY2Vz
c2liaWxpdHlQcm9wZXJ0aWVzOjpDaGVja2VkOjpFbnVtIGNoZWNrZWQgPSBUeXBlQnVpbGRlcjo6
RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6Q2hlY2tlZDo6RmFsc2U7CisgICAgVHlwZUJ1
aWxkZXI6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6OkNoZWNrZWQgY2hlY2tlZCA9IFR5
cGVCdWlsZGVyOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpDaGVja2VkOjpGYWxzZTsK
ICAgICBSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk8aW50Pj4gY2hpbGROb2Rl
SWRzOwogICAgIFJlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheTxpbnQ+PiBjb250
cm9sbGVkTm9kZUlkczsKICAgICBib29sIGV4aXN0cyA9IGZhbHNlOwpAQCAtMTQ1NSwxMiArMTQ1
NSwxMiBAQCBQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0
aWVzPiBJbnNwZWN0b3JET01BZ2VudDo6YnVpbGRPYgogICAgIGJvb2wgZm9jdXNlZCA9IGZhbHNl
OwogICAgIGJvb2wgaWdub3JlZCA9IHRydWU7CiAgICAgYm9vbCBpZ25vcmVkQnlEZWZhdWx0ID0g
ZmFsc2U7Ci0gICAgVHlwZUJ1aWxkZXI6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6Oklu
dmFsaWQ6OkVudW0gaW52YWxpZCA9IFR5cGVCdWlsZGVyOjpET006OkFjY2Vzc2liaWxpdHlQcm9w
ZXJ0aWVzOjpJbnZhbGlkOjpGYWxzZTsKKyAgICBUeXBlQnVpbGRlcjo6RE9NOjpBY2Nlc3NpYmls
aXR5UHJvcGVydGllczo6SW52YWxpZCBpbnZhbGlkID0gVHlwZUJ1aWxkZXI6OkRPTTo6QWNjZXNz
aWJpbGl0eVByb3BlcnRpZXM6OkludmFsaWQ6OkZhbHNlOwogICAgIGJvb2wgaGlkZGVuID0gZmFs
c2U7CiAgICAgU3RyaW5nIGxhYmVsOwogICAgIGJvb2wgbGl2ZVJlZ2lvbkF0b21pYyA9IGZhbHNl
OwogICAgIFJlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheTxTdHJpbmc+PiBsaXZl
UmVnaW9uUmVsZXZhbnQ7Ci0gICAgVHlwZUJ1aWxkZXI6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3Bl
cnRpZXM6OkxpdmVSZWdpb25TdGF0dXM6OkVudW0gbGl2ZVJlZ2lvblN0YXR1cyA9IFR5cGVCdWls
ZGVyOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpMaXZlUmVnaW9uU3RhdHVzOjpPZmY7
CisgICAgVHlwZUJ1aWxkZXI6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6OkxpdmVSZWdp
b25TdGF0dXMgbGl2ZVJlZ2lvblN0YXR1cyA9IFR5cGVCdWlsZGVyOjpET006OkFjY2Vzc2liaWxp
dHlQcm9wZXJ0aWVzOjpMaXZlUmVnaW9uU3RhdHVzOjpPZmY7CiAgICAgTm9kZSogbW91c2VFdmVu
dE5vZGUgPSBudWxscHRyOwogICAgIFJlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJh
eTxpbnQ+PiBvd25lZE5vZGVJZHM7CiAgICAgTm9kZSogcGFyZW50Tm9kZSA9IG51bGxwdHI7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCmluZGV4
IDQ1YmYwZWVlODQ2Zjc3MDllZDQyZTI3NGZkMTE3Zjk2NDgyNDE4ZGUuLjI4YmI5MTk3ZjdjMGYw
MTFjMDhjOWUxNGY5ZmNhMDY4NjJhODRiMTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCkBAIC0yODcsNyArMjg3LDcgQEAgQ2FjaGVkUmVz
b3VyY2UqIEluc3BlY3RvclBhZ2VBZ2VudDo6Y2FjaGVkUmVzb3VyY2UoRnJhbWUqIGZyYW1lLCBj
b25zdCBVUkwmIHVybCkKICAgICByZXR1cm4gY2FjaGVkUmVzb3VyY2U7CiB9CiAKLUluc3BlY3Rv
cjo6VHlwZUJ1aWxkZXI6OlBhZ2U6OlJlc291cmNlVHlwZTo6RW51bSBJbnNwZWN0b3JQYWdlQWdl
bnQ6OnJlc291cmNlVHlwZUpzb24oSW5zcGVjdG9yUGFnZUFnZW50OjpSZXNvdXJjZVR5cGUgcmVz
b3VyY2VUeXBlKQorSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UGFnZTo6UmVzb3VyY2VUeXBlIElu
c3BlY3RvclBhZ2VBZ2VudDo6cmVzb3VyY2VUeXBlSnNvbihJbnNwZWN0b3JQYWdlQWdlbnQ6OlJl
c291cmNlVHlwZSByZXNvdXJjZVR5cGUpCiB7CiAgICAgc3dpdGNoIChyZXNvdXJjZVR5cGUpIHsK
ICAgICBjYXNlIERvY3VtZW50UmVzb3VyY2U6CkBAIC0zMzUsNyArMzM1LDcgQEAgSW5zcGVjdG9y
UGFnZUFnZW50OjpSZXNvdXJjZVR5cGUgSW5zcGVjdG9yUGFnZUFnZW50OjpjYWNoZWRSZXNvdXJj
ZVR5cGUoY29uc3QgQ2EKICAgICByZXR1cm4gSW5zcGVjdG9yUGFnZUFnZW50OjpPdGhlclJlc291
cmNlOwogfQogCi1JbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpQYWdlOjpSZXNvdXJjZVR5cGU6OkVu
dW0gSW5zcGVjdG9yUGFnZUFnZW50OjpjYWNoZWRSZXNvdXJjZVR5cGVKc29uKGNvbnN0IENhY2hl
ZFJlc291cmNlJiBjYWNoZWRSZXNvdXJjZSkKK0luc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlBhZ2U6
OlJlc291cmNlVHlwZSBJbnNwZWN0b3JQYWdlQWdlbnQ6OmNhY2hlZFJlc291cmNlVHlwZUpzb24o
Y29uc3QgQ2FjaGVkUmVzb3VyY2UmIGNhY2hlZFJlc291cmNlKQogewogICAgIHJldHVybiByZXNv
dXJjZVR5cGVKc29uKGNhY2hlZFJlc291cmNlVHlwZShjYWNoZWRSZXNvdXJjZSkpOwogfQpAQCAt
NzA2LDcgKzcwNiw3IEBAIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpzZXRDb250aW51b3VzUGFp
bnRpbmdFbmFibGVkKEVycm9yU3RyaW5nKiwgYm9vbCBlbmFibGVkCiAgICAgICAgIG1haW5GcmFt
ZSgpLT52aWV3KCktPmludmFsaWRhdGUoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6
OmdldFNjcmlwdEV4ZWN1dGlvblN0YXR1cyhFcnJvclN0cmluZyosIEluc3BlY3RvclBhZ2VCYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlJlc3VsdDo6RW51bSogc3RhdHVzKQordm9pZCBJbnNwZWN0
b3JQYWdlQWdlbnQ6OmdldFNjcmlwdEV4ZWN1dGlvblN0YXR1cyhFcnJvclN0cmluZyosIEluc3Bl
Y3RvclBhZ2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlJlc3VsdCogc3RhdHVzKQogewogICAg
IGJvb2wgZGlzYWJsZWRCeVNjcmlwdENvbnRyb2xsZXIgPSBmYWxzZTsKICAgICBib29sIGRpc2Fi
bGVkSW5TZXR0aW5ncyA9IGZhbHNlOwpAQCAtOTYzLDEzICs5NjMsMTMgQEAgUGFzc1JlZlB0cjxJ
bnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpQYWdlOjpGcmFtZT4gSW5zcGVjdG9yUGFnZUFnZW50Ojpi
dWlsZE9iamVjdEYKIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UGFnZTo6RnJh
bWVSZXNvdXJjZVRyZWU+IEluc3BlY3RvclBhZ2VBZ2VudDo6YnVpbGRPYmplY3RGb3JGcmFtZVRy
ZWUoRnJhbWUqIGZyYW1lKQogewogICAgIFJlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpQ
YWdlOjpGcmFtZT4gZnJhbWVPYmplY3QgPSBidWlsZE9iamVjdEZvckZyYW1lKGZyYW1lKTsKLSAg
ICBSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk8SW5zcGVjdG9yOjpUeXBlQnVp
bGRlcjo6UGFnZTo6RnJhbWVSZXNvdXJjZVRyZWU6OlJlc291cmNlcz4+IHN1YnJlc291cmNlcyA9
IEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5PEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlBh
Z2U6OkZyYW1lUmVzb3VyY2VUcmVlOjpSZXNvdXJjZXM+OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8
SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UGFn
ZTo6RnJhbWVSZXNvdXJjZT4+IHN1YnJlc291cmNlcyA9IEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6
OkFycmF5PEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlBhZ2U6OkZyYW1lUmVzb3VyY2U+OjpjcmVh
dGUoKTsKICAgICBSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UGFnZTo6RnJhbWVSZXNv
dXJjZVRyZWU+IHJlc3VsdCA9IEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlBhZ2U6OkZyYW1lUmVz
b3VyY2VUcmVlOjpjcmVhdGUoKQogICAgICAgICAgLnNldEZyYW1lKGZyYW1lT2JqZWN0KQogICAg
ICAgICAgLnNldFJlc291cmNlcyhzdWJyZXNvdXJjZXMpOwogCiAgICAgZm9yIChhdXRvKiBjYWNo
ZWRSZXNvdXJjZSA6IGNhY2hlZFJlc291cmNlc0ZvckZyYW1lKGZyYW1lKSkgewotICAgICAgICBS
ZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UGFnZTo6RnJhbWVSZXNvdXJjZVRyZWU6OlJl
c291cmNlcz4gcmVzb3VyY2VPYmplY3QgPSBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpQYWdlOjpG
cmFtZVJlc291cmNlVHJlZTo6UmVzb3VyY2VzOjpjcmVhdGUoKQorICAgICAgICBSZWZQdHI8SW5z
cGVjdG9yOjpUeXBlQnVpbGRlcjo6UGFnZTo6RnJhbWVSZXNvdXJjZT4gcmVzb3VyY2VPYmplY3Qg
PSBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpQYWdlOjpGcmFtZVJlc291cmNlOjpjcmVhdGUoKQog
ICAgICAgICAgICAgLnNldFVybChjYWNoZWRSZXNvdXJjZS0+dXJsKCkpCiAgICAgICAgICAgICAu
c2V0VHlwZShjYWNoZWRSZXNvdXJjZVR5cGVKc29uKCpjYWNoZWRSZXNvdXJjZSkpCiAgICAgICAg
ICAgICAuc2V0TWltZVR5cGUoY2FjaGVkUmVzb3VyY2UtPnJlc3BvbnNlKCkubWltZVR5cGUoKSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50
LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmgKaW5kZXgg
Y2E0ZmYyZjAwM2NlYmE5ODE2OGQwNzc5OTMzNGM1ZmJkNWM5YTMxMS4uOWY4N2QyMjlkNDM2NzA5
NmYyODYwMzgxZWYyM2QzYjIyNTMxOTRiNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JQYWdlQWdlbnQuaApAQCAtOTAsOSArOTAsOSBAQCBwdWJsaWM6CiAKICAgICBz
dGF0aWMgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IHJlc291cmNlRGF0YShGcmFtZSosIGNvbnN0
IFVSTCYsIFN0cmluZyogdGV4dEVuY29kaW5nTmFtZSk7CiAgICAgc3RhdGljIENhY2hlZFJlc291
cmNlKiBjYWNoZWRSZXNvdXJjZShGcmFtZSosIGNvbnN0IFVSTCYpOwotICAgIHN0YXRpYyBJbnNw
ZWN0b3I6OlR5cGVCdWlsZGVyOjpQYWdlOjpSZXNvdXJjZVR5cGU6OkVudW0gcmVzb3VyY2VUeXBl
SnNvbihSZXNvdXJjZVR5cGUpOworICAgIHN0YXRpYyBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpQ
YWdlOjpSZXNvdXJjZVR5cGUgcmVzb3VyY2VUeXBlSnNvbihSZXNvdXJjZVR5cGUpOwogICAgIHN0
YXRpYyBSZXNvdXJjZVR5cGUgY2FjaGVkUmVzb3VyY2VUeXBlKGNvbnN0IENhY2hlZFJlc291cmNl
Jik7Ci0gICAgc3RhdGljIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlBhZ2U6OlJlc291cmNlVHlw
ZTo6RW51bSBjYWNoZWRSZXNvdXJjZVR5cGVKc29uKGNvbnN0IENhY2hlZFJlc291cmNlJik7Cisg
ICAgc3RhdGljIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlBhZ2U6OlJlc291cmNlVHlwZSBjYWNo
ZWRSZXNvdXJjZVR5cGVKc29uKGNvbnN0IENhY2hlZFJlc291cmNlJik7CiAKICAgICAvLyBQYWdl
IEFQSSBmb3IgSW5zcGVjdG9yRnJvbnRlbmQKICAgICB2aXJ0dWFsIHZvaWQgZW5hYmxlKEVycm9y
U3RyaW5nKikgb3ZlcnJpZGU7CkBAIC0xMTUsNyArMTE1LDcgQEAgcHVibGljOgogICAgIHZpcnR1
YWwgdm9pZCBzZXRTaG93RlBTQ291bnRlcihFcnJvclN0cmluZyosIGJvb2wgc2hvdykgb3ZlcnJp
ZGU7CiAgICAgdmlydHVhbCB2b2lkIGNhbkNvbnRpbnVvdXNseVBhaW50KEVycm9yU3RyaW5nKiwg
Ym9vbCopIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBzZXRDb250aW51b3VzUGFpbnRpbmdF
bmFibGVkKEVycm9yU3RyaW5nKiwgYm9vbCBlbmFibGVkKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFs
IHZvaWQgZ2V0U2NyaXB0RXhlY3V0aW9uU3RhdHVzKEVycm9yU3RyaW5nKiwgSW5zcGVjdG9yOjpJ
bnNwZWN0b3JQYWdlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpSZXN1bHQ6OkVudW0qKSBvdmVy
cmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0U2NyaXB0RXhlY3V0aW9uU3RhdHVzKEVycm9yU3Ry
aW5nKiwgSW5zcGVjdG9yOjpJbnNwZWN0b3JQYWdlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpS
ZXN1bHQqKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0U2NyaXB0RXhlY3V0aW9uRGlz
YWJsZWQoRXJyb3JTdHJpbmcqLCBib29sKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0
VG91Y2hFbXVsYXRpb25FbmFibGVkKEVycm9yU3RyaW5nKiwgYm9vbCkgb3ZlcnJpZGU7CiAgICAg
dmlydHVhbCB2b2lkIHNldEVtdWxhdGVkTWVkaWEoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcm
KSBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JSZXBsYXlBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUmVw
bGF5QWdlbnQuY3BwCmluZGV4IGRmMDgxOGU4N2YwYTc0MDBiMGE2MWUzMTdjNDIwZDdmOTA1MGE2
MTYuLmY0ODBjNTQwNzNjMDAyNzU0NGVmYTQ4YzlmYWI1ZTFjMTRkYTJmNGIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXBsYXlBZ2VudC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJlcGxheUFnZW50LmNwcApAQCAtOTAs
MjIgKzkwLDIyIEBAIHN0YXRpYyBQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpSZXBsYXk6OlJlcGxh
eVNlc3Npb24+IGJ1aWxkSW5zcGVjdG9yT2JqZWN0Rm9yU2VzCiAgICAgcmV0dXJuIHNlc3Npb25P
YmplY3QucmVsZWFzZSgpOwogfQogCi1zdGF0aWMgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UmVw
bGF5OjpTZXNzaW9uU3RhdGU6OkVudW0gYnVpbGRJbnNwZWN0b3JPYmplY3RGb3JTZXNzaW9uU3Rh
dGUoU2Vzc2lvblN0YXRlIHNlc3Npb25TdGF0ZSkKK3N0YXRpYyBUeXBlQnVpbGRlcjo6UmVwbGF5
OjpTZXNzaW9uU3RhdGUgYnVpbGRJbnNwZWN0b3JPYmplY3RGb3JTZXNzaW9uU3RhdGUoV2ViQ29y
ZTo6U2Vzc2lvblN0YXRlIHNlc3Npb25TdGF0ZSkKIHsKICAgICBzd2l0Y2ggKHNlc3Npb25TdGF0
ZSkgewotICAgIGNhc2UgU2Vzc2lvblN0YXRlOjpDYXB0dXJpbmc6IHJldHVybiBJbnNwZWN0b3I6
OlR5cGVCdWlsZGVyOjpSZXBsYXk6OlNlc3Npb25TdGF0ZTo6Q2FwdHVyaW5nOwotICAgIGNhc2Ug
U2Vzc2lvblN0YXRlOjpJbmFjdGl2ZTogcmV0dXJuIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlJl
cGxheTo6U2Vzc2lvblN0YXRlOjpJbmFjdGl2ZTsKLSAgICBjYXNlIFNlc3Npb25TdGF0ZTo6UmVw
bGF5aW5nOiByZXR1cm4gSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UmVwbGF5OjpTZXNzaW9uU3Rh
dGU6OlJlcGxheWluZzsKKyAgICBjYXNlIFdlYkNvcmU6OlNlc3Npb25TdGF0ZTo6Q2FwdHVyaW5n
OiByZXR1cm4gVHlwZUJ1aWxkZXI6OlJlcGxheTo6U2Vzc2lvblN0YXRlOjpDYXB0dXJpbmc7Cisg
ICAgY2FzZSBXZWJDb3JlOjpTZXNzaW9uU3RhdGU6OkluYWN0aXZlOiByZXR1cm4gVHlwZUJ1aWxk
ZXI6OlJlcGxheTo6U2Vzc2lvblN0YXRlOjpJbmFjdGl2ZTsKKyAgICBjYXNlIFdlYkNvcmU6OlNl
c3Npb25TdGF0ZTo6UmVwbGF5aW5nOiByZXR1cm4gVHlwZUJ1aWxkZXI6OlJlcGxheTo6U2Vzc2lv
blN0YXRlOjpSZXBsYXlpbmc7CiAgICAgfQogfQogCi1zdGF0aWMgSW5zcGVjdG9yOjpUeXBlQnVp
bGRlcjo6UmVwbGF5OjpTZWdtZW50U3RhdGU6OkVudW0gYnVpbGRJbnNwZWN0b3JPYmplY3RGb3JT
ZWdtZW50U3RhdGUoU2VnbWVudFN0YXRlIHNlZ21lbnRTdGF0ZSkKK3N0YXRpYyBUeXBlQnVpbGRl
cjo6UmVwbGF5OjpTZWdtZW50U3RhdGUgYnVpbGRJbnNwZWN0b3JPYmplY3RGb3JTZWdtZW50U3Rh
dGUoV2ViQ29yZTo6U2VnbWVudFN0YXRlIHNlZ21lbnRTdGF0ZSkKIHsKICAgICBzd2l0Y2ggKHNl
Z21lbnRTdGF0ZSkgewotICAgIGNhc2UgU2VnbWVudFN0YXRlOjpBcHBlbmRpbmc6IHJldHVybiBJ
bnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpSZXBsYXk6OlNlZ21lbnRTdGF0ZTo6QXBwZW5kaW5nOwot
ICAgIGNhc2UgU2VnbWVudFN0YXRlOjpVbmxvYWRlZDogcmV0dXJuIEluc3BlY3Rvcjo6VHlwZUJ1
aWxkZXI6OlJlcGxheTo6U2VnbWVudFN0YXRlOjpVbmxvYWRlZDsKLSAgICBjYXNlIFNlZ21lbnRT
dGF0ZTo6TG9hZGVkOiByZXR1cm4gSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UmVwbGF5OjpTZWdt
ZW50U3RhdGU6OkxvYWRlZDsKLSAgICBjYXNlIFNlZ21lbnRTdGF0ZTo6RGlzcGF0Y2hpbmc6IHJl
dHVybiBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpSZXBsYXk6OlNlZ21lbnRTdGF0ZTo6RGlzcGF0
Y2hpbmc7CisgICAgY2FzZSBXZWJDb3JlOjpTZWdtZW50U3RhdGU6OkFwcGVuZGluZzogcmV0dXJu
IFR5cGVCdWlsZGVyOjpSZXBsYXk6OlNlZ21lbnRTdGF0ZTo6QXBwZW5kaW5nOworICAgIGNhc2Ug
V2ViQ29yZTo6U2VnbWVudFN0YXRlOjpVbmxvYWRlZDogcmV0dXJuIFR5cGVCdWlsZGVyOjpSZXBs
YXk6OlNlZ21lbnRTdGF0ZTo6VW5sb2FkZWQ7CisgICAgY2FzZSBXZWJDb3JlOjpTZWdtZW50U3Rh
dGU6OkxvYWRlZDogcmV0dXJuIFR5cGVCdWlsZGVyOjpSZXBsYXk6OlNlZ21lbnRTdGF0ZTo6TG9h
ZGVkOworICAgIGNhc2UgV2ViQ29yZTo6U2VnbWVudFN0YXRlOjpEaXNwYXRjaGluZzogcmV0dXJu
IFR5cGVCdWlsZGVyOjpSZXBsYXk6OlNlZ21lbnRTdGF0ZTo6RGlzcGF0Y2hpbmc7CiAgICAgfQog
fQogCkBAIC0xNjgsNyArMTY4LDcgQEAgSW5zcGVjdG9yUmVwbGF5QWdlbnQ6On5JbnNwZWN0b3JS
ZXBsYXlBZ2VudCgpCiAgICAgQVNTRVJUKCFtX3NlZ21lbnRzTWFwLnNpemUoKSk7CiB9CiAKLVNl
c3Npb25TdGF0ZSBJbnNwZWN0b3JSZXBsYXlBZ2VudDo6c2Vzc2lvblN0YXRlKCkgY29uc3QKK1dl
YkNvcmU6OlNlc3Npb25TdGF0ZSBJbnNwZWN0b3JSZXBsYXlBZ2VudDo6c2Vzc2lvblN0YXRlKCkg
Y29uc3QKIHsKICAgICByZXR1cm4gbV9wYWdlLnJlcGxheUNvbnRyb2xsZXIoKS5zZXNzaW9uU3Rh
dGUoKTsKIH0KQEAgLTE3OSw3ICsxNzksNyBAQCB2b2lkIEluc3BlY3RvclJlcGxheUFnZW50Ojpk
aWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKgogICAg
IG1fYmFja2VuZERpc3BhdGNoZXIgPSBJbnNwZWN0b3JSZXBsYXlCYWNrZW5kRGlzcGF0Y2hlcjo6
Y3JlYXRlKGJhY2tlbmREaXNwYXRjaGVyLCB0aGlzKTsKIAogICAgIG1faW5zdHJ1bWVudGluZ0Fn
ZW50cy0+c2V0SW5zcGVjdG9yUmVwbGF5QWdlbnQodGhpcyk7Ci0gICAgQVNTRVJUKHNlc3Npb25T
dGF0ZSgpID09IFNlc3Npb25TdGF0ZTo6SW5hY3RpdmUpOworICAgIEFTU0VSVChzZXNzaW9uU3Rh
dGUoKSA9PSBXZWJDb3JlOjpTZXNzaW9uU3RhdGU6OkluYWN0aXZlKTsKIAogICAgIC8vIEtlZXAg
dHJhY2sgb2YgdGhlIChkZWZhdWx0KSBzZXNzaW9uIGN1cnJlbnRseSBsb2FkZWQgYnkgUmVwbGF5
Q29udHJvbGxlciwKICAgICAvLyBhbmQgYW55IHNlZ21lbnRzIHdpdGhpbiB0aGUgc2Vzc2lvbi4K
QEAgLTIwNCwxOSArMjA0LDE5IEBAIHZvaWQgSW5zcGVjdG9yUmVwbGF5QWdlbnQ6OndpbGxEZXN0
cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3RvckRpc2Nvbm5lY3RSZWFzCiAKIHZvaWQgSW5z
cGVjdG9yUmVwbGF5QWdlbnQ6OmZyYW1lTmF2aWdhdGVkKERvY3VtZW50TG9hZGVyKiBsb2FkZXIp
CiB7Ci0gICAgaWYgKHNlc3Npb25TdGF0ZSgpICE9IFNlc3Npb25TdGF0ZTo6SW5hY3RpdmUpCisg
ICAgaWYgKHNlc3Npb25TdGF0ZSgpICE9IFdlYkNvcmU6OlNlc3Npb25TdGF0ZTo6SW5hY3RpdmUp
CiAgICAgICAgIG1fcGFnZS5yZXBsYXlDb250cm9sbGVyKCkuZnJhbWVOYXZpZ2F0ZWQobG9hZGVy
KTsKIH0KIAogdm9pZCBJbnNwZWN0b3JSZXBsYXlBZ2VudDo6ZnJhbWVEZXRhY2hlZChGcmFtZSog
ZnJhbWUpCiB7Ci0gICAgaWYgKHNlc3Npb25TdGF0ZSgpICE9IFNlc3Npb25TdGF0ZTo6SW5hY3Rp
dmUpCisgICAgaWYgKHNlc3Npb25TdGF0ZSgpICE9IFdlYkNvcmU6OlNlc3Npb25TdGF0ZTo6SW5h
Y3RpdmUpCiAgICAgICAgIG1fcGFnZS5yZXBsYXlDb250cm9sbGVyKCkuZnJhbWVEZXRhY2hlZChm
cmFtZSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yUmVwbGF5QWdlbnQ6OndpbGxEaXNwYXRjaEV2ZW50
KGNvbnN0IEV2ZW50JiBldmVudCwgRnJhbWUqIGZyYW1lKQogewotICAgIGlmIChzZXNzaW9uU3Rh
dGUoKSAhPSBTZXNzaW9uU3RhdGU6OkluYWN0aXZlKQorICAgIGlmIChzZXNzaW9uU3RhdGUoKSAh
PSBXZWJDb3JlOjpTZXNzaW9uU3RhdGU6OkluYWN0aXZlKQogICAgICAgICBtX3BhZ2UucmVwbGF5
Q29udHJvbGxlcigpLndpbGxEaXNwYXRjaEV2ZW50KGV2ZW50LCBmcmFtZSk7CiB9CiAKQEAgLTMx
OSw3ICszMTksNyBAQCB2b2lkIEluc3BlY3RvclJlcGxheUFnZW50OjpwbGF5YmFja0ZpbmlzaGVk
KCkKIAogdm9pZCBJbnNwZWN0b3JSZXBsYXlBZ2VudDo6c3RhcnRDYXB0dXJpbmcoRXJyb3JTdHJp
bmcqIGVycm9yU3RyaW5nKQogewotICAgIGlmIChzZXNzaW9uU3RhdGUoKSAhPSBTZXNzaW9uU3Rh
dGU6OkluYWN0aXZlKSB7CisgICAgaWYgKHNlc3Npb25TdGF0ZSgpICE9IFdlYkNvcmU6OlNlc3Np
b25TdGF0ZTo6SW5hY3RpdmUpIHsKICAgICAgICAgKmVycm9yU3RyaW5nID0gQVNDSUlMaXRlcmFs
KCJDYW4ndCBzdGFydCBjYXB0dXJpbmcgaWYgdGhlIHNlc3Npb24gaXMgYWxyZWFkeSBjYXB0dXJp
bmcgb3IgcmVwbGF5aW5nLiIpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMzI5LDcgKzMy
OSw3IEBAIHZvaWQgSW5zcGVjdG9yUmVwbGF5QWdlbnQ6OnN0YXJ0Q2FwdHVyaW5nKEVycm9yU3Ry
aW5nKiBlcnJvclN0cmluZykKIAogdm9pZCBJbnNwZWN0b3JSZXBsYXlBZ2VudDo6c3RvcENhcHR1
cmluZyhFcnJvclN0cmluZyogZXJyb3JTdHJpbmcpCiB7Ci0gICAgaWYgKHNlc3Npb25TdGF0ZSgp
ICE9IFNlc3Npb25TdGF0ZTo6Q2FwdHVyaW5nKSB7CisgICAgaWYgKHNlc3Npb25TdGF0ZSgpICE9
IFdlYkNvcmU6OlNlc3Npb25TdGF0ZTo6Q2FwdHVyaW5nKSB7CiAgICAgICAgICplcnJvclN0cmlu
ZyA9IEFTQ0lJTGl0ZXJhbCgiQ2FuJ3Qgc3RvcCBjYXB0dXJpbmcgaWYgY2FwdHVyZSBpcyBub3Qg
aW4gcHJvZ3Jlc3MuIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zNTAsNyArMzUwLDcg
QEAgdm9pZCBJbnNwZWN0b3JSZXBsYXlBZ2VudDo6cmVwbGF5VG9Qb3NpdGlvbihFcnJvclN0cmlu
ZyogZXJyb3JTdHJpbmcsIGNvbnN0IFJlZlAKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IGlmIChzZXNzaW9uU3RhdGUoKSA9PSBTZXNzaW9uU3RhdGU6OkNhcHR1cmluZykgeworICAgIGlm
IChzZXNzaW9uU3RhdGUoKSA9PSBXZWJDb3JlOjpTZXNzaW9uU3RhdGU6OkNhcHR1cmluZykgewog
ICAgICAgICAqZXJyb3JTdHJpbmcgPSBBU0NJSUxpdGVyYWwoIkNhbid0IHN0YXJ0IHJlcGxheSB3
aGlsZSBjYXB0dXJlIGlzIGluIHByb2dyZXNzLiIpOwogICAgICAgICByZXR1cm47CiAgICAgfQpA
QCAtMzYwLDcgKzM2MCw3IEBAIHZvaWQgSW5zcGVjdG9yUmVwbGF5QWdlbnQ6OnJlcGxheVRvUG9z
aXRpb24oRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBjb25zdCBSZWZQCiAKIHZvaWQgSW5zcGVj
dG9yUmVwbGF5QWdlbnQ6OnJlcGxheVRvQ29tcGxldGlvbihFcnJvclN0cmluZyogZXJyb3JTdHJp
bmcsIGJvb2wgZmFzdFJlcGxheSkKIHsKLSAgICBpZiAoc2Vzc2lvblN0YXRlKCkgPT0gU2Vzc2lv
blN0YXRlOjpDYXB0dXJpbmcpIHsKKyAgICBpZiAoc2Vzc2lvblN0YXRlKCkgPT0gV2ViQ29yZTo6
U2Vzc2lvblN0YXRlOjpDYXB0dXJpbmcpIHsKICAgICAgICAgKmVycm9yU3RyaW5nID0gQVNDSUlM
aXRlcmFsKCJDYW4ndCBzdGFydCByZXBsYXkgd2hpbGUgY2FwdHVyZSBpcyBpbiBwcm9ncmVzcy4i
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTM3MCw3ICszNzAsNyBAQCB2b2lkIEluc3Bl
Y3RvclJlcGxheUFnZW50OjpyZXBsYXlUb0NvbXBsZXRpb24oRXJyb3JTdHJpbmcqIGVycm9yU3Ry
aW5nLCBib29sIGZhcwogCiB2b2lkIEluc3BlY3RvclJlcGxheUFnZW50OjpwYXVzZVBsYXliYWNr
KEVycm9yU3RyaW5nKiBlcnJvclN0cmluZykKIHsKLSAgICBpZiAoc2Vzc2lvblN0YXRlKCkgIT0g
U2Vzc2lvblN0YXRlOjpSZXBsYXlpbmcpIHsKKyAgICBpZiAoc2Vzc2lvblN0YXRlKCkgIT0gV2Vi
Q29yZTo6U2Vzc2lvblN0YXRlOjpSZXBsYXlpbmcpIHsKICAgICAgICAgKmVycm9yU3RyaW5nID0g
QVNDSUlMaXRlcmFsKCJDYW4ndCBwYXVzZSBwbGF5YmFjayBpZiBwbGF5YmFjayBpcyBub3QgaW4g
cHJvZ3Jlc3MuIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zODAsNyArMzgwLDcgQEAg
dm9pZCBJbnNwZWN0b3JSZXBsYXlBZ2VudDo6cGF1c2VQbGF5YmFjayhFcnJvclN0cmluZyogZXJy
b3JTdHJpbmcpCiAKIHZvaWQgSW5zcGVjdG9yUmVwbGF5QWdlbnQ6OmNhbmNlbFBsYXliYWNrKEVy
cm9yU3RyaW5nKiBlcnJvclN0cmluZykKIHsKLSAgICBpZiAoc2Vzc2lvblN0YXRlKCkgPT0gU2Vz
c2lvblN0YXRlOjpDYXB0dXJpbmcpIHsKKyAgICBpZiAoc2Vzc2lvblN0YXRlKCkgPT0gV2ViQ29y
ZTo6U2Vzc2lvblN0YXRlOjpDYXB0dXJpbmcpIHsKICAgICAgICAgKmVycm9yU3RyaW5nID0gQVND
SUlMaXRlcmFsKCJDYW4ndCBjYW5jZWwgcGxheWJhY2sgaWYgY2FwdHVyZSBpcyBpbiBwcm9ncmVz
cy4iKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTM4OCwxMSArMzg4LDExIEBAIHZvaWQg
SW5zcGVjdG9yUmVwbGF5QWdlbnQ6OmNhbmNlbFBsYXliYWNrKEVycm9yU3RyaW5nKiBlcnJvclN0
cmluZykKICAgICBtX3BhZ2UucmVwbGF5Q29udHJvbGxlcigpLmNhbmNlbFBsYXliYWNrKCk7CiB9
CiAKLXZvaWQgSW5zcGVjdG9yUmVwbGF5QWdlbnQ6OnN3aXRjaFNlc3Npb24oRXJyb3JTdHJpbmcq
IGVycm9yU3RyaW5nLCBTZXNzaW9uSWRlbnRpZmllciBpZGVudGlmaWVyKQordm9pZCBJbnNwZWN0
b3JSZXBsYXlBZ2VudDo6c3dpdGNoU2Vzc2lvbihFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIFR5
cGVCdWlsZGVyOjpSZXBsYXk6OlNlc3Npb25JZGVudGlmaWVyIGlkZW50aWZpZXIpCiB7CiAgICAg
QVNTRVJUKGlkZW50aWZpZXIgPiAwKTsKIAotICAgIGlmIChzZXNzaW9uU3RhdGUoKSAhPSBTZXNz
aW9uU3RhdGU6OkluYWN0aXZlKSB7CisgICAgaWYgKHNlc3Npb25TdGF0ZSgpICE9IFdlYkNvcmU6
OlNlc3Npb25TdGF0ZTo6SW5hY3RpdmUpIHsKICAgICAgICAgKmVycm9yU3RyaW5nID0gQVNDSUlM
aXRlcmFsKCJDYW4ndCBzd2l0Y2ggc2Vzc2lvbnMgdW5sZXNzIHRoZSBzZXNzaW9uIGlzIG5laXRo
ZXIgY2FwdHVyaW5nIG9yIHJlcGxheWluZy4iKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAg
LTQwNCw3ICs0MDQsNyBAQCB2b2lkIEluc3BlY3RvclJlcGxheUFnZW50Ojpzd2l0Y2hTZXNzaW9u
KEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgU2Vzc2lvbklkZW50aQogICAgIG1fcGFnZS5yZXBs
YXlDb250cm9sbGVyKCkuc3dpdGNoU2Vzc2lvbihzZXNzaW9uKTsKIH0KIAotdm9pZCBJbnNwZWN0
b3JSZXBsYXlBZ2VudDo6aW5zZXJ0U2Vzc2lvblNlZ21lbnQoRXJyb3JTdHJpbmcqIGVycm9yU3Ry
aW5nLCBTZXNzaW9uSWRlbnRpZmllciBzZXNzaW9uSWRlbnRpZmllciwgU2VnbWVudElkZW50aWZp
ZXIgc2VnbWVudElkZW50aWZpZXIsIGludCBzZWdtZW50SW5kZXgpCit2b2lkIEluc3BlY3RvclJl
cGxheUFnZW50OjppbnNlcnRTZXNzaW9uU2VnbWVudChFcnJvclN0cmluZyogZXJyb3JTdHJpbmcs
IFR5cGVCdWlsZGVyOjpSZXBsYXk6OlNlc3Npb25JZGVudGlmaWVyIHNlc3Npb25JZGVudGlmaWVy
LCBTZWdtZW50SWRlbnRpZmllciBzZWdtZW50SWRlbnRpZmllciwgaW50IHNlZ21lbnRJbmRleCkK
IHsKICAgICBBU1NFUlQoc2Vzc2lvbklkZW50aWZpZXIgPiAwKTsKICAgICBBU1NFUlQoc2VnbWVu
dElkZW50aWZpZXIgPiAwKTsKQEAgLTQyMSw3ICs0MjEsNyBAQCB2b2lkIEluc3BlY3RvclJlcGxh
eUFnZW50OjppbnNlcnRTZXNzaW9uU2VnbWVudChFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIFNl
c3NpbwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKHNlc3Npb24gPT0gbV9wYWdl
LnJlcGxheUNvbnRyb2xsZXIoKS5sb2FkZWRTZXNzaW9uKCkgJiYgc2Vzc2lvblN0YXRlKCkgIT0g
U2Vzc2lvblN0YXRlOjpJbmFjdGl2ZSkgeworICAgIGlmIChzZXNzaW9uID09IG1fcGFnZS5yZXBs
YXlDb250cm9sbGVyKCkubG9hZGVkU2Vzc2lvbigpICYmIHNlc3Npb25TdGF0ZSgpICE9IFdlYkNv
cmU6OlNlc3Npb25TdGF0ZTo6SW5hY3RpdmUpIHsKICAgICAgICAgKmVycm9yU3RyaW5nID0gQVND
SUlMaXRlcmFsKCJDYW4ndCBtb2RpZnkgYSBsb2FkZWQgc2Vzc2lvbiB1bmxlc3MgdGhlIHNlc3Np
b24gaXMgaW5hY3RpdmUuIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC00MzAsNyArNDMw
LDcgQEAgdm9pZCBJbnNwZWN0b3JSZXBsYXlBZ2VudDo6aW5zZXJ0U2Vzc2lvblNlZ21lbnQoRXJy
b3JTdHJpbmcqIGVycm9yU3RyaW5nLCBTZXNzaW8KICAgICBzZXNzaW9uTW9kaWZpZWQoc2Vzc2lv
bik7CiB9CiAKLXZvaWQgSW5zcGVjdG9yUmVwbGF5QWdlbnQ6OnJlbW92ZVNlc3Npb25TZWdtZW50
KEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgU2Vzc2lvbklkZW50aWZpZXIgaWRlbnRpZmllciwg
aW50IHNlZ21lbnRJbmRleCkKK3ZvaWQgSW5zcGVjdG9yUmVwbGF5QWdlbnQ6OnJlbW92ZVNlc3Np
b25TZWdtZW50KEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgVHlwZUJ1aWxkZXI6OlJlcGxheTo6
U2Vzc2lvbklkZW50aWZpZXIgaWRlbnRpZmllciwgaW50IHNlZ21lbnRJbmRleCkKIHsKICAgICBB
U1NFUlQoaWRlbnRpZmllciA+IDApOwogICAgIEFTU0VSVChzZWdtZW50SW5kZXggPj0gMCk7CkBA
IC00NDUsNyArNDQ1LDcgQEAgdm9pZCBJbnNwZWN0b3JSZXBsYXlBZ2VudDo6cmVtb3ZlU2Vzc2lv
blNlZ21lbnQoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBTZXNzaW8KICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIGlmIChzZXNzaW9uID09IG1fcGFnZS5yZXBsYXlDb250cm9sbGVyKCku
bG9hZGVkU2Vzc2lvbigpICYmIHNlc3Npb25TdGF0ZSgpICE9IFNlc3Npb25TdGF0ZTo6SW5hY3Rp
dmUpIHsKKyAgICBpZiAoc2Vzc2lvbiA9PSBtX3BhZ2UucmVwbGF5Q29udHJvbGxlcigpLmxvYWRl
ZFNlc3Npb24oKSAmJiBzZXNzaW9uU3RhdGUoKSAhPSBXZWJDb3JlOjpTZXNzaW9uU3RhdGU6Oklu
YWN0aXZlKSB7CiAgICAgICAgICplcnJvclN0cmluZyA9IEFTQ0lJTGl0ZXJhbCgiQ2FuJ3QgbW9k
aWZ5IGEgbG9hZGVkIHNlc3Npb24gdW5sZXNzIHRoZSBzZXNzaW9uIGlzIGluYWN0aXZlLiIpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtNDgwLDcgKzQ4MCw3IEBAIFBhc3NSZWZQdHI8UmVw
bGF5U2Vzc2lvblNlZ21lbnQ+IEluc3BlY3RvclJlcGxheUFnZW50OjpmaW5kU2VnbWVudChFcnJv
clN0cmluZyoKICAgICByZXR1cm4gaXQtPnZhbHVlOwogfQogCi12b2lkIEluc3BlY3RvclJlcGxh
eUFnZW50OjpjdXJyZW50UmVwbGF5U3RhdGUoRXJyb3JTdHJpbmcqLCBTZXNzaW9uSWRlbnRpZmll
ciogc2Vzc2lvbklkZW50aWZpZXIsIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6Ok9wdE91dHB1dDxp
bnQ+KiBzZWdtZW50SWRlbnRpZmllciwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UmVwbGF5OjpT
ZXNzaW9uU3RhdGU6OkVudW0qIHNlc3Npb25TdGF0ZSwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6
UmVwbGF5OjpTZWdtZW50U3RhdGU6OkVudW0qIHNlZ21lbnRTdGF0ZSwgUmVmUHRyPEluc3BlY3Rv
cjo6VHlwZUJ1aWxkZXI6OlJlcGxheTo6UmVwbGF5UG9zaXRpb24+JiByZXBsYXlQb3NpdGlvbikK
K3ZvaWQgSW5zcGVjdG9yUmVwbGF5QWdlbnQ6OmN1cnJlbnRSZXBsYXlTdGF0ZShFcnJvclN0cmlu
ZyosIFR5cGVCdWlsZGVyOjpSZXBsYXk6OlNlc3Npb25JZGVudGlmaWVyKiBzZXNzaW9uSWRlbnRp
ZmllciwgVHlwZUJ1aWxkZXI6Ok9wdE91dHB1dDxUeXBlQnVpbGRlcjo6UmVwbGF5OjpTZWdtZW50
SWRlbnRpZmllcj4qIHNlZ21lbnRJZGVudGlmaWVyLCBUeXBlQnVpbGRlcjo6UmVwbGF5OjpTZXNz
aW9uU3RhdGUqIHNlc3Npb25TdGF0ZSwgVHlwZUJ1aWxkZXI6OlJlcGxheTo6U2VnbWVudFN0YXRl
KiBzZWdtZW50U3RhdGUsIFJlZlB0cjxUeXBlQnVpbGRlcjo6UmVwbGF5OjpSZXBsYXlQb3NpdGlv
bj4mIHJlcGxheVBvc2l0aW9uKQogewogICAgICpzZXNzaW9uU3RhdGUgPSBidWlsZEluc3BlY3Rv
ck9iamVjdEZvclNlc3Npb25TdGF0ZShtX3BhZ2UucmVwbGF5Q29udHJvbGxlcigpLnNlc3Npb25T
dGF0ZSgpKTsKICAgICAqc2VnbWVudFN0YXRlID0gYnVpbGRJbnNwZWN0b3JPYmplY3RGb3JTZWdt
ZW50U3RhdGUobV9wYWdlLnJlcGxheUNvbnRyb2xsZXIoKS5zZWdtZW50U3RhdGUoKSk7CkBAIC00
OTIsMTQgKzQ5MiwxNCBAQCB2b2lkIEluc3BlY3RvclJlcGxheUFnZW50OjpjdXJyZW50UmVwbGF5
U3RhdGUoRXJyb3JTdHJpbmcqLCBTZXNzaW9uSWRlbnRpZmllciogcwogICAgIHJlcGxheVBvc2l0
aW9uID0gYnVpbGRJbnNwZWN0b3JPYmplY3RGb3JQb3NpdGlvbihtX3BhZ2UucmVwbGF5Q29udHJv
bGxlcigpLmN1cnJlbnRQb3NpdGlvbigpKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSZXBsYXlBZ2Vu
dDo6Z2V0QXZhaWxhYmxlU2Vzc2lvbnMoRXJyb3JTdHJpbmcqLCBSZWZQdHI8SW5zcGVjdG9yOjpU
eXBlQnVpbGRlcjo6QXJyYXk8U2Vzc2lvbklkZW50aWZpZXI+PiYgc2Vzc2lvbnNMaXN0KQordm9p
ZCBJbnNwZWN0b3JSZXBsYXlBZ2VudDo6Z2V0QXZhaWxhYmxlU2Vzc2lvbnMoRXJyb3JTdHJpbmcq
LCBSZWZQdHI8VHlwZUJ1aWxkZXI6OkFycmF5PFNlc3Npb25JZGVudGlmaWVyPj4mIHNlc3Npb25z
TGlzdCkKIHsKLSAgICBzZXNzaW9uc0xpc3QgPSBUeXBlQnVpbGRlcjo6QXJyYXk8U2Vzc2lvbklk
ZW50aWZpZXI+OjpjcmVhdGUoKTsKKyAgICBzZXNzaW9uc0xpc3QgPSBUeXBlQnVpbGRlcjo6QXJy
YXk8VHlwZUJ1aWxkZXI6OlJlcGxheTo6U2Vzc2lvbklkZW50aWZpZXI+OjpjcmVhdGUoKTsKICAg
ICBmb3IgKGF1dG8mIHBhaXIgOiBtX3Nlc3Npb25zTWFwKQogICAgICAgICBzZXNzaW9uc0xpc3Qt
PmFkZEl0ZW0ocGFpci5rZXkpOwogfQogCi12b2lkIEluc3BlY3RvclJlcGxheUFnZW50OjpnZXRT
ZXNzaW9uRGF0YShFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIFNlc3Npb25JZGVudGlmaWVyIGlk
ZW50aWZpZXIsIFJlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpSZXBsYXk6OlJlcGxheVNl
c3Npb24+JiBzZXJpYWxpemVkT2JqZWN0KQordm9pZCBJbnNwZWN0b3JSZXBsYXlBZ2VudDo6Z2V0
U2Vzc2lvbkRhdGEoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBUeXBlQnVpbGRlcjo6UmVwbGF5
OjpTZXNzaW9uSWRlbnRpZmllciBpZGVudGlmaWVyLCBSZWZQdHI8VHlwZUJ1aWxkZXI6OlJlcGxh
eTo6UmVwbGF5U2Vzc2lvbj4mIHNlcmlhbGl6ZWRPYmplY3QpCiB7CiAgICAgUmVmUHRyPFJlcGxh
eVNlc3Npb24+IHNlc3Npb24gPSBmaW5kU2Vzc2lvbihlcnJvclN0cmluZywgaWRlbnRpZmllcik7
CiAgICAgaWYgKCFzZXNzaW9uKSB7CkBAIC01MTAsNyArNTEwLDcgQEAgdm9pZCBJbnNwZWN0b3JS
ZXBsYXlBZ2VudDo6Z2V0U2Vzc2lvbkRhdGEoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBTZXNz
aW9uSWRlbnQKICAgICBzZXJpYWxpemVkT2JqZWN0ID0gYnVpbGRJbnNwZWN0b3JPYmplY3RGb3JT
ZXNzaW9uKHNlc3Npb24pOwogfQogCi12b2lkIEluc3BlY3RvclJlcGxheUFnZW50OjpnZXRTZWdt
ZW50RGF0YShFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIFNlZ21lbnRJZGVudGlmaWVyIGlkZW50
aWZpZXIsIFJlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpSZXBsYXk6OlNlc3Npb25TZWdt
ZW50PiYgc2VyaWFsaXplZE9iamVjdCkKK3ZvaWQgSW5zcGVjdG9yUmVwbGF5QWdlbnQ6OmdldFNl
Z21lbnREYXRhKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgVHlwZUJ1aWxkZXI6OlJlcGxheTo6
U2VnbWVudElkZW50aWZpZXIgaWRlbnRpZmllciwgUmVmUHRyPFR5cGVCdWlsZGVyOjpSZXBsYXk6
OlNlc3Npb25TZWdtZW50PiYgc2VyaWFsaXplZE9iamVjdCkKIHsKICAgICBSZWZQdHI8UmVwbGF5
U2Vzc2lvblNlZ21lbnQ+IHNlZ21lbnQgPSBmaW5kU2VnbWVudChlcnJvclN0cmluZywgaWRlbnRp
Zmllcik7CiAgICAgaWYgKCFzZWdtZW50KSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yUmVwbGF5QWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JSZXBsYXlBZ2VudC5oCmluZGV4IDY5YzE0YjY1NTQ0YzgyMzE3OTI0NWFjNDgw
ZGNkNDNkYzM2MWYzMGYuLmY3YmNlNmY0Y2ZiMDlhZjRkNDJkYzE2ZjIxMzNiMjVmNTg3OTQxYjQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXBsYXlBZ2Vu
dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXBsYXlBZ2VudC5o
CkBAIC0xMDEsMTggKzEwMSwxOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGNhbmNlbFBs
YXliYWNrKEVycm9yU3RyaW5nKikgb3ZlcnJpZGU7CiAKICAgICB2aXJ0dWFsIHZvaWQgc3dpdGNo
U2Vzc2lvbihFcnJvclN0cmluZyosIFNlc3Npb25JZGVudGlmaWVyKSBvdmVycmlkZTsKLSAgICB2
aXJ0dWFsIHZvaWQgaW5zZXJ0U2Vzc2lvblNlZ21lbnQoRXJyb3JTdHJpbmcqLCBTZXNzaW9uSWRl
bnRpZmllciwgU2VnbWVudElkZW50aWZpZXIsIGludCBzZWdtZW50SW5kZXgpIG92ZXJyaWRlOwot
ICAgIHZpcnR1YWwgdm9pZCByZW1vdmVTZXNzaW9uU2VnbWVudChFcnJvclN0cmluZyosIFNlc3Np
b25JZGVudGlmaWVyLCBpbnQgc2VnbWVudEluZGV4KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZv
aWQgaW5zZXJ0U2Vzc2lvblNlZ21lbnQoRXJyb3JTdHJpbmcqLCBJbnNwZWN0b3I6OlR5cGVCdWls
ZGVyOjpSZXBsYXk6OlNlc3Npb25JZGVudGlmaWVyLCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpS
ZXBsYXk6OlNlZ21lbnRJZGVudGlmaWVyLCBpbnQgc2VnbWVudEluZGV4KSBvdmVycmlkZTsKKyAg
ICB2aXJ0dWFsIHZvaWQgcmVtb3ZlU2Vzc2lvblNlZ21lbnQoRXJyb3JTdHJpbmcqLCBJbnNwZWN0
b3I6OlR5cGVCdWlsZGVyOjpSZXBsYXk6OlNlc3Npb25JZGVudGlmaWVyLCBpbnQgc2VnbWVudElu
ZGV4KSBvdmVycmlkZTsKIAotICAgIHZpcnR1YWwgdm9pZCBjdXJyZW50UmVwbGF5U3RhdGUoRXJy
b3JTdHJpbmcqLCBTZXNzaW9uSWRlbnRpZmllciosIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6Ok9w
dE91dHB1dDxpbnQ+KiBzZWdtZW50SWRlbnRpZmllciwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6
UmVwbGF5OjpTZXNzaW9uU3RhdGU6OkVudW0qIHNlc3Npb25TdGF0ZSwgSW5zcGVjdG9yOjpUeXBl
QnVpbGRlcjo6UmVwbGF5OjpTZWdtZW50U3RhdGU6OkVudW0qIHNlZ21lbnRTdGF0ZSwgUmVmUHRy
PEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlJlcGxheTo6UmVwbGF5UG9zaXRpb24+Jikgb3ZlcnJp
ZGU7Ci0gICAgdmlydHVhbCB2b2lkIGdldEF2YWlsYWJsZVNlc3Npb25zKEVycm9yU3RyaW5nKiwg
UmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5PFNlc3Npb25JZGVudGlmaWVyPj4m
KSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZ2V0U2Vzc2lvbkRhdGEoRXJyb3JTdHJpbmcq
LCBTZXNzaW9uSWRlbnRpZmllciwgUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlJlcGxh
eTo6UmVwbGF5U2Vzc2lvbj4mKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZ2V0U2VnbWVu
dERhdGEoRXJyb3JTdHJpbmcqLCBTZWdtZW50SWRlbnRpZmllciwgUmVmUHRyPEluc3BlY3Rvcjo6
VHlwZUJ1aWxkZXI6OlJlcGxheTo6U2Vzc2lvblNlZ21lbnQ+Jikgb3ZlcnJpZGU7CisgICAgdmly
dHVhbCB2b2lkIGN1cnJlbnRSZXBsYXlTdGF0ZShFcnJvclN0cmluZyosIEluc3BlY3Rvcjo6VHlw
ZUJ1aWxkZXI6OlJlcGxheTo6U2Vzc2lvbklkZW50aWZpZXIqLCBJbnNwZWN0b3I6OlR5cGVCdWls
ZGVyOjpPcHRPdXRwdXQ8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UmVwbGF5OjpTZWdtZW50SWRl
bnRpZmllcj4qLCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpSZXBsYXk6OlNlc3Npb25TdGF0ZSos
IEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlJlcGxheTo6U2VnbWVudFN0YXRlKiBzZWdtZW50U3Rh
dGUsIFJlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpSZXBsYXk6OlJlcGxheVBvc2l0aW9u
PiYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBnZXRBdmFpbGFibGVTZXNzaW9ucyhFcnJv
clN0cmluZyosIFJlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheTxJbnNwZWN0b3I6
OlR5cGVCdWlsZGVyOjpSZXBsYXk6OlNlc3Npb25JZGVudGlmaWVyPj4mKSBvdmVycmlkZTsKKyAg
ICB2aXJ0dWFsIHZvaWQgZ2V0U2Vzc2lvbkRhdGEoRXJyb3JTdHJpbmcqLCBJbnNwZWN0b3I6OlR5
cGVCdWlsZGVyOjpSZXBsYXk6OlNlc3Npb25JZGVudGlmaWVyLCBSZWZQdHI8SW5zcGVjdG9yOjpU
eXBlQnVpbGRlcjo6UmVwbGF5OjpSZXBsYXlTZXNzaW9uPiYpIG92ZXJyaWRlOworICAgIHZpcnR1
YWwgdm9pZCBnZXRTZWdtZW50RGF0YShFcnJvclN0cmluZyosIEluc3BlY3Rvcjo6VHlwZUJ1aWxk
ZXI6OlJlcGxheTo6U2VnbWVudElkZW50aWZpZXIsIFJlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWls
ZGVyOjpSZXBsYXk6OlNlc3Npb25TZWdtZW50PiYpIG92ZXJyaWRlOwogCiBwcml2YXRlOgogICAg
IFBhc3NSZWZQdHI8UmVwbGF5U2Vzc2lvbj4gZmluZFNlc3Npb24oRXJyb3JTdHJpbmcqLCBTZXNz
aW9uSWRlbnRpZmllcik7CiAgICAgUGFzc1JlZlB0cjxSZXBsYXlTZXNzaW9uU2VnbWVudD4gZmlu
ZFNlZ21lbnQoRXJyb3JTdHJpbmcqLCBTZWdtZW50SWRlbnRpZmllcik7Ci0gICAgU2Vzc2lvblN0
YXRlIHNlc3Npb25TdGF0ZSgpIGNvbnN0OworICAgIFdlYkNvcmU6OlNlc3Npb25TdGF0ZSBzZXNz
aW9uU3RhdGUoKSBjb25zdDsKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxJbnNwZWN0b3I6Okluc3Bl
Y3RvclJlcGxheUZyb250ZW5kRGlzcGF0Y2hlcj4gbV9mcm9udGVuZERpc3BhdGNoZXI7CiAgICAg
UmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yUmVwbGF5QmFja2VuZERpc3BhdGNoZXI+IG1fYmFj
a2VuZERpc3BhdGNoZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yUmVzb3VyY2VBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yUmVzb3VyY2VBZ2VudC5jcHAKaW5kZXggYTQ3MDMwZDJkZjE3M2IwNWUwZjFhYTgzMjg2MTdk
MDE4ZjBmZjAxMC4uYjQ2OGYzNTU2OTk0ZjY2OWE2MDgzMmFhYTlmZTE5NWMwNWMwZDI0MyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlQWdlbnQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZUFnZW50
LmNwcApAQCAtMzE3LDcgKzMxNyw3IEBAIHZvaWQgSW5zcGVjdG9yUmVzb3VyY2VBZ2VudDo6d2ls
bFNlbmRSZXF1ZXN0KHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgRG9jdW1lbnRMCiAgICAgICAg
IHJlcXVlc3Quc2V0SFRUUEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpDYWNoZUNvbnRyb2ws
ICJuby1jYWNoZSIpOwogICAgIH0KIAotICAgIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlBhZ2U6
OlJlc291cmNlVHlwZTo6RW51bSByZXNvdXJjZVR5cGUgPSBJbnNwZWN0b3JQYWdlQWdlbnQ6OnJl
c291cmNlVHlwZUpzb24odHlwZSk7CisgICAgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UGFnZTo6
UmVzb3VyY2VUeXBlIHJlc291cmNlVHlwZSA9IEluc3BlY3RvclBhZ2VBZ2VudDo6cmVzb3VyY2VU
eXBlSnNvbih0eXBlKTsKIAogICAgIFJlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpOZXR3
b3JrOjpJbml0aWF0b3I+IGluaXRpYXRvck9iamVjdCA9IGJ1aWxkSW5pdGlhdG9yT2JqZWN0KGxv
YWRlci0+ZnJhbWUoKSA/IGxvYWRlci0+ZnJhbWUoKS0+ZG9jdW1lbnQoKSA6IG51bGxwdHIpOwog
ICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5yZXF1ZXN0V2lsbEJlU2VudChyZXF1ZXN0SWQsIG1f
cGFnZUFnZW50LT5mcmFtZUlkKGxvYWRlci0+ZnJhbWUoKSksIG1fcGFnZUFnZW50LT5sb2FkZXJJ
ZChsb2FkZXIpLCBsb2FkZXItPnVybCgpLnN0cmluZygpLCBidWlsZE9iamVjdEZvclJlc291cmNl
UmVxdWVzdChyZXF1ZXN0KSwgY3VycmVudFRpbWUoKSwgaW5pdGlhdG9yT2JqZWN0LCBidWlsZE9i
amVjdEZvclJlc291cmNlUmVzcG9uc2UocmVkaXJlY3RSZXNwb25zZSwgbG9hZGVyKSwgdHlwZSAh
PSBJbnNwZWN0b3JQYWdlQWdlbnQ6Ok90aGVyUmVzb3VyY2UgPyAmcmVzb3VyY2VUeXBlIDogbnVs
bHB0cik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5
bGVTaGVldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVl
dC5jcHAKaW5kZXggYzM4ODM3Nzg3YTZjMWYyZjNlZmIzZGRiOTFlZjcyNTU0ODVhOWQxOC4uOGYy
YjgyYjdmNmI0YmZhMjkwOTYzNzFhZTJhMGRhMDY3ZTdmODk0NCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcApAQCAtMTY2LDcgKzE2Niw3
IEBAIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNTUzo6U291cmNl
UmFuZ2U+IGJ1aWxkU291cmNlUmFuZ2VPYmplCiBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3I6
OlR5cGVCdWlsZGVyOjpDU1M6OkNTU01lZGlhPiBidWlsZE1lZGlhT2JqZWN0KGNvbnN0IE1lZGlh
TGlzdCogbWVkaWEsIE1lZGlhTGlzdFNvdXJjZSBtZWRpYUxpc3RTb3VyY2UsIGNvbnN0IFN0cmlu
ZyYgc291cmNlVVJMKQogewogICAgIC8vIE1ha2UgY2VydGFpbiBjb21waWxlcnMgaGFwcHkgYnkg
aW5pdGlhbGl6aW5nIHxzb3VyY2V8IHVwLWZyb250LgotICAgIEluc3BlY3Rvcjo6VHlwZUJ1aWxk
ZXI6OkNTUzo6Q1NTTWVkaWE6OlNvdXJjZTo6RW51bSBzb3VyY2UgPSBJbnNwZWN0b3I6OlR5cGVC
dWlsZGVyOjpDU1M6OkNTU01lZGlhOjpTb3VyY2U6OklubGluZVNoZWV0OworICAgIEluc3BlY3Rv
cjo6VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTTWVkaWE6OlNvdXJjZSBzb3VyY2UgPSBJbnNwZWN0b3I6
OlR5cGVCdWlsZGVyOjpDU1M6OkNTU01lZGlhOjpTb3VyY2U6OklubGluZVNoZWV0OwogICAgIHN3
aXRjaCAobWVkaWFMaXN0U291cmNlKSB7CiAgICAgY2FzZSBNZWRpYUxpc3RTb3VyY2VNZWRpYVJ1
bGU6CiAgICAgICAgIHNvdXJjZSA9IEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTTWVk
aWE6OlNvdXJjZTo6TWVkaWFSdWxlOwpAQCAtNTI4LDcgKzUyOCwxMyBAQCBQYXNzUmVmUHRyPElu
c3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTU3R5bGU+IEluc3BlY3RvclN0eWxlOjpzdHls
ZVdpdGhQcm9wZQogICAgICAgICBjb25zdCBDU1NQcm9wZXJ0eVNvdXJjZURhdGEmIHByb3BlcnR5
RW50cnkgPSBpdC0+c291cmNlRGF0YTsKICAgICAgICAgY29uc3QgU3RyaW5nJiBuYW1lID0gcHJv
cGVydHlFbnRyeS5uYW1lOwogCi0gICAgICAgIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNTUzo6
Q1NTUHJvcGVydHk6OlN0YXR1czo6RW51bSBzdGF0dXMgPSBpdC0+ZGlzYWJsZWQgPyBJbnNwZWN0
b3I6OlR5cGVCdWlsZGVyOjpDU1M6OkNTU1Byb3BlcnR5OjpTdGF0dXM6OkRpc2FibGVkIDogSW5z
cGVjdG9yOjpUeXBlQnVpbGRlcjo6Q1NTOjpDU1NQcm9wZXJ0eTo6U3RhdHVzOjpBY3RpdmU7Cisg
ICAgICAgIC8vIFZpc3VhbCBTdHVkaW8gZGlzYWdyZWVzIHdpdGggb3RoZXIgY29tcGlsZXJzIGFz
IHRvIHdoZXRoZXIgJ2NsYXNzJyBpcyBuZWVkZWQgaGVyZS4KKyNpZiBDT01QSUxFUihNU1ZDKQor
ICAgICAgICBlbnVtIGNsYXNzIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTUHJvcGVy
dHlTdGF0dXMgc3RhdHVzOworI2Vsc2UKKyAgICAgICAgZW51bSBJbnNwZWN0b3I6OlR5cGVCdWls
ZGVyOjpDU1M6OkNTU1Byb3BlcnR5U3RhdHVzIHN0YXR1czsKKyNlbmRpZgorICAgICAgICBzdGF0
dXMgPSBpdC0+ZGlzYWJsZWQgPyBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDU1M6OkNTU1Byb3Bl
cnR5U3RhdHVzOjpEaXNhYmxlZCA6IEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTUHJv
cGVydHlTdGF0dXM6OkFjdGl2ZTsKIAogICAgICAgICBSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVp
bGRlcjo6Q1NTOjpDU1NQcm9wZXJ0eT4gcHJvcGVydHkgPSBJbnNwZWN0b3I6OlR5cGVCdWlsZGVy
OjpDU1M6OkNTU1Byb3BlcnR5OjpjcmVhdGUoKQogICAgICAgICAgICAgLnNldE5hbWUobmFtZS5s
b3dlcigpKQpAQCAtNTcxLDkgKzU3Nyw5IEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVp
bGRlcjo6Q1NTOjpDU1NTdHlsZT4gSW5zcGVjdG9yU3R5bGU6OnN0eWxlV2l0aFByb3BlCiAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoc3VjY2Vzc1N0YXR1cyAmJiBwcmV2aW91c1N0YXR1cyAh
PSAiaW5hY3RpdmUiKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnR5
RW50cnkuaW1wb3J0YW50IHx8ICFzdWNjZXNzUHJpb3JpdHkpIC8vIFByaW9yaXR5IG5vdCBzZXQg
PT0gIm5vdCBpbXBvcnRhbnQiLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG91
bGRJbmFjdGl2YXRlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlm
IChzdGF0dXMgPT0gSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q1NTOjpDU1NQcm9wZXJ0eTo6U3Rh
dHVzOjpBY3RpdmUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChzdGF0
dXMgPT0gSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q1NTOjpDU1NQcm9wZXJ0eVN0YXR1czo6QWN0
aXZlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEluYWN0aXZhdGUgYSBu
b24taW1wb3J0YW50IHByb3BlcnR5IGZvbGxvd2luZyB0aGUgc2FtZS1uYW1lZCBpbXBvcnRhbnQg
cHJvcGVydHkuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IEluc3Bl
Y3Rvcjo6VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTUHJvcGVydHk6OlN0YXR1czo6SW5hY3RpdmU7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IEluc3BlY3Rvcjo6VHlwZUJ1
aWxkZXI6OkNTUzo6Q1NTUHJvcGVydHlTdGF0dXM6OkluYWN0aXZlOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKQEAgLTU4Niw3ICs1OTIsNyBAQCBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6
VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTU3R5bGU+IEluc3BlY3RvclN0eWxlOjpzdHlsZVdpdGhQcm9w
ZQogICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWVUb1ByZXZpb3VzQWN0aXZlUHJvcGVy
dHkuc2V0KGNhbm9uaWNhbFByb3BlcnR5TmFtZSwgcHJvcGVydHkpOwogCiAgICAgICAgICAgICAg
ICAgaWYgKHNob3VsZEluYWN0aXZhdGUpIHsKLSAgICAgICAgICAgICAgICAgICAgYWN0aXZlSXQt
PnZhbHVlLT5zZXRTdGF0dXMoSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q1NTOjpDU1NQcm9wZXJ0
eTo6U3RhdHVzOjpJbmFjdGl2ZSk7CisgICAgICAgICAgICAgICAgICAgIGFjdGl2ZUl0LT52YWx1
ZS0+c2V0U3RhdHVzKEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTUHJvcGVydHlTdGF0
dXM6OkluYWN0aXZlKTsKICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lVG9QcmV2aW91
c0FjdGl2ZVByb3BlcnR5LnNldChjYW5vbmljYWxQcm9wZXJ0eU5hbWUsIHByb3BlcnR5KTsKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2UgewpAQCAtNTk0LDcgKzYwMCw3IEBA
IFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q1NTOjpDU1NTdHlsZT4gSW5zcGVj
dG9yU3R5bGU6OnN0eWxlV2l0aFByb3BlCiAgICAgICAgICAgICAgICAgLy8gRGVmYXVsdCAiaW1w
bGljaXQiID09IGZhbHNlLgogICAgICAgICAgICAgICAgIGlmIChpbXBsaWNpdCkKICAgICAgICAg
ICAgICAgICAgICAgcHJvcGVydHktPnNldEltcGxpY2l0KHRydWUpOwotICAgICAgICAgICAgICAg
IHN0YXR1cyA9IEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTUHJvcGVydHk6OlN0YXR1
czo6U3R5bGU7CisgICAgICAgICAgICAgICAgc3RhdHVzID0gSW5zcGVjdG9yOjpUeXBlQnVpbGRl
cjo6Q1NTOjpDU1NQcm9wZXJ0eVN0YXR1czo6U3R5bGU7CiAKICAgICAgICAgICAgICAgICBTdHJp
bmcgc2hvcnRoYW5kID0gbV9zdHlsZS0+Z2V0UHJvcGVydHlTaG9ydGhhbmQobmFtZSk7CiAgICAg
ICAgICAgICAgICAgaWYgKCFzaG9ydGhhbmQuaXNFbXB0eSgpKSB7CkBAIC02MTAsNyArNjE2LDcg
QEAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDU1M6OkNTU1N0eWxlPiBJbnNw
ZWN0b3JTdHlsZTo6c3R5bGVXaXRoUHJvcGUKICAgICAgICAgfQogCiAgICAgICAgIC8vIERlZmF1
bHQgInN0YXR1cyIgPT0gInN0eWxlIi4KLSAgICAgICAgaWYgKHN0YXR1cyAhPSBJbnNwZWN0b3I6
OlR5cGVCdWlsZGVyOjpDU1M6OkNTU1Byb3BlcnR5OjpTdGF0dXM6OlN0eWxlKQorICAgICAgICBp
ZiAoc3RhdHVzICE9IEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTUHJvcGVydHlTdGF0
dXM6OlN0eWxlKQogICAgICAgICAgICAgcHJvcGVydHktPnNldFN0YXR1cyhzdGF0dXMpOwogICAg
IH0KIApAQCAtNzQ5LDcgKzc1NSw3IEBAIE5ld0xpbmVBbmRXaGl0ZXNwYWNlJiBJbnNwZWN0b3JT
dHlsZTo6bmV3TGluZUFuZFdoaXRlc3BhY2VEZWxpbWl0ZXJzKCkgY29uc3QKICAgICByZXR1cm4g
bV9mb3JtYXQ7CiB9CiAKLVBhc3NSZWZQdHI8SW5zcGVjdG9yU3R5bGVTaGVldD4gSW5zcGVjdG9y
U3R5bGVTaGVldDo6Y3JlYXRlKEluc3BlY3RvclBhZ2VBZ2VudCogcGFnZUFnZW50LCBjb25zdCBT
dHJpbmcmIGlkLCBQYXNzUmVmUHRyPENTU1N0eWxlU2hlZXQ+IHBhZ2VTdHlsZVNoZWV0LCBJbnNw
ZWN0b3I6OlR5cGVCdWlsZGVyOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW46OkVudW0gb3JpZ2luLCBj
b25zdCBTdHJpbmcmIGRvY3VtZW50VVJMLCBMaXN0ZW5lciogbGlzdGVuZXIpCitQYXNzUmVmUHRy
PEluc3BlY3RvclN0eWxlU2hlZXQ+IEluc3BlY3RvclN0eWxlU2hlZXQ6OmNyZWF0ZShJbnNwZWN0
b3JQYWdlQWdlbnQqIHBhZ2VBZ2VudCwgY29uc3QgU3RyaW5nJiBpZCwgUGFzc1JlZlB0cjxDU1NT
dHlsZVNoZWV0PiBwYWdlU3R5bGVTaGVldCwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q1NTOjpT
dHlsZVNoZWV0T3JpZ2luIG9yaWdpbiwgY29uc3QgU3RyaW5nJiBkb2N1bWVudFVSTCwgTGlzdGVu
ZXIqIGxpc3RlbmVyKQogewogICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW5zcGVjdG9yU3R5bGVT
aGVldChwYWdlQWdlbnQsIGlkLCBwYWdlU3R5bGVTaGVldCwgb3JpZ2luLCBkb2N1bWVudFVSTCwg
bGlzdGVuZXIpKTsKIH0KQEAgLTc2Miw3ICs3NjgsNyBAQCBTdHJpbmcgSW5zcGVjdG9yU3R5bGVT
aGVldDo6c3R5bGVTaGVldFVSTChDU1NTdHlsZVNoZWV0KiBwYWdlU3R5bGVTaGVldCkKICAgICBy
ZXR1cm4gZW1wdHlTdHJpbmcoKTsKIH0KIAotSW5zcGVjdG9yU3R5bGVTaGVldDo6SW5zcGVjdG9y
U3R5bGVTaGVldChJbnNwZWN0b3JQYWdlQWdlbnQqIHBhZ2VBZ2VudCwgY29uc3QgU3RyaW5nJiBp
ZCwgUGFzc1JlZlB0cjxDU1NTdHlsZVNoZWV0PiBwYWdlU3R5bGVTaGVldCwgSW5zcGVjdG9yOjpU
eXBlQnVpbGRlcjo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luOjpFbnVtIG9yaWdpbiwgY29uc3QgU3Ry
aW5nJiBkb2N1bWVudFVSTCwgTGlzdGVuZXIqIGxpc3RlbmVyKQorSW5zcGVjdG9yU3R5bGVTaGVl
dDo6SW5zcGVjdG9yU3R5bGVTaGVldChJbnNwZWN0b3JQYWdlQWdlbnQqIHBhZ2VBZ2VudCwgY29u
c3QgU3RyaW5nJiBpZCwgUGFzc1JlZlB0cjxDU1NTdHlsZVNoZWV0PiBwYWdlU3R5bGVTaGVldCwg
SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luIG9yaWdpbiwgY29u
c3QgU3RyaW5nJiBkb2N1bWVudFVSTCwgTGlzdGVuZXIqIGxpc3RlbmVyKQogICAgIDogbV9wYWdl
QWdlbnQocGFnZUFnZW50KQogICAgICwgbV9pZChpZCkKICAgICAsIG1fcGFnZVN0eWxlU2hlZXQo
cGFnZVN0eWxlU2hlZXQpCkBAIC0xNDI2LDEyICsxNDMyLDEyIEBAIHZvaWQgSW5zcGVjdG9yU3R5
bGVTaGVldDo6Y29sbGVjdEZsYXRSdWxlcyhQYXNzUmVmUHRyPENTU1J1bGVMaXN0PiBydWxlTGlz
dCwgQ1NTCiAgICAgfQogfQogCi1QYXNzUmVmUHRyPEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxp
bmVTdHlsZT4gSW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlOjpjcmVhdGUoSW5zcGVj
dG9yUGFnZUFnZW50KiBwYWdlQWdlbnQsIGNvbnN0IFN0cmluZyYgaWQsIFBhc3NSZWZQdHI8RWxl
bWVudD4gZWxlbWVudCwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q1NTOjpTdHlsZVNoZWV0T3Jp
Z2luOjpFbnVtIG9yaWdpbiwgTGlzdGVuZXIqIGxpc3RlbmVyKQorUGFzc1JlZlB0cjxJbnNwZWN0
b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU+IEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVT
dHlsZTo6Y3JlYXRlKEluc3BlY3RvclBhZ2VBZ2VudCogcGFnZUFnZW50LCBjb25zdCBTdHJpbmcm
IGlkLCBQYXNzUmVmUHRyPEVsZW1lbnQ+IGVsZW1lbnQsIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6
OkNTUzo6U3R5bGVTaGVldE9yaWdpbiBvcmlnaW4sIExpc3RlbmVyKiBsaXN0ZW5lcikKIHsKICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZShw
YWdlQWdlbnQsIGlkLCBlbGVtZW50LCBvcmlnaW4sIGxpc3RlbmVyKSk7CiB9CiAKLUluc3BlY3Rv
clN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZTo6SW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0
eWxlKEluc3BlY3RvclBhZ2VBZ2VudCogcGFnZUFnZW50LCBjb25zdCBTdHJpbmcmIGlkLCBQYXNz
UmVmUHRyPEVsZW1lbnQ+IGVsZW1lbnQsIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNTUzo6U3R5
bGVTaGVldE9yaWdpbjo6RW51bSBvcmlnaW4sIExpc3RlbmVyKiBsaXN0ZW5lcikKK0luc3BlY3Rv
clN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZTo6SW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0
eWxlKEluc3BlY3RvclBhZ2VBZ2VudCogcGFnZUFnZW50LCBjb25zdCBTdHJpbmcmIGlkLCBQYXNz
UmVmUHRyPEVsZW1lbnQ+IGVsZW1lbnQsIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNTUzo6U3R5
bGVTaGVldE9yaWdpbiBvcmlnaW4sIExpc3RlbmVyKiBsaXN0ZW5lcikKICAgICA6IEluc3BlY3Rv
clN0eWxlU2hlZXQocGFnZUFnZW50LCBpZCwgbnVsbHB0ciwgb3JpZ2luLCAiIiwgbGlzdGVuZXIp
CiAgICAgLCBtX2VsZW1lbnQoZWxlbWVudCkKICAgICAsIG1fcnVsZVNvdXJjZURhdGEobnVsbHB0
cikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNo
ZWV0LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5oCmlu
ZGV4IDhiMTkxZmUwODQzOWI1ZjhlNzdhMjc1OTU5N2U2MzNkYTk5ZTBmNGYuLjBjYTVhNTNhZWU1
YzM4MzNmZjk4NWI5YjEzNTc5NDMwOTg3MjA1NmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuaApAQCAtMTgxLDcgKzE4MSw3IEBAIHB1YmxpYzoK
ICAgICB9OwogCiAgICAgdHlwZWRlZiBIYXNoTWFwPENTU1N0eWxlRGVjbGFyYXRpb24qLCBSZWZQ
dHI8SW5zcGVjdG9yU3R5bGU+PiBJbnNwZWN0b3JTdHlsZU1hcDsKLSAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxJbnNwZWN0b3JTdHlsZVNoZWV0PiBjcmVhdGUoSW5zcGVjdG9yUGFnZUFnZW50KiwgY29u
c3QgU3RyaW5nJiBpZCwgUGFzc1JlZlB0cjxDU1NTdHlsZVNoZWV0PiBwYWdlU3R5bGVTaGVldCwg
SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luOjpFbnVtLCBjb25z
dCBTdHJpbmcmIGRvY3VtZW50VVJMLCBMaXN0ZW5lciopOworICAgIHN0YXRpYyBQYXNzUmVmUHRy
PEluc3BlY3RvclN0eWxlU2hlZXQ+IGNyZWF0ZShJbnNwZWN0b3JQYWdlQWdlbnQqLCBjb25zdCBT
dHJpbmcmIGlkLCBQYXNzUmVmUHRyPENTU1N0eWxlU2hlZXQ+IHBhZ2VTdHlsZVNoZWV0LCBJbnNw
ZWN0b3I6OlR5cGVCdWlsZGVyOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW4sIGNvbnN0IFN0cmluZyYg
ZG9jdW1lbnRVUkwsIExpc3RlbmVyKik7CiAgICAgc3RhdGljIFN0cmluZyBzdHlsZVNoZWV0VVJM
KENTU1N0eWxlU2hlZXQqIHBhZ2VTdHlsZVNoZWV0KTsKIAogICAgIHZpcnR1YWwgfkluc3BlY3Rv
clN0eWxlU2hlZXQoKTsKQEAgLTIxMiw3ICsyMTIsNyBAQCBwdWJsaWM6CiAgICAgSW5zcGVjdG9y
Q1NTSWQgc3R5bGVJZChDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSkgY29uc3QgeyByZXR1cm4g
cnVsZU9yU3R5bGVJZChzdHlsZSk7IH0KIAogcHJvdGVjdGVkOgotICAgIEluc3BlY3RvclN0eWxl
U2hlZXQoSW5zcGVjdG9yUGFnZUFnZW50KiwgY29uc3QgU3RyaW5nJiBpZCwgUGFzc1JlZlB0cjxD
U1NTdHlsZVNoZWV0PiBwYWdlU3R5bGVTaGVldCwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q1NT
OjpTdHlsZVNoZWV0T3JpZ2luOjpFbnVtLCBjb25zdCBTdHJpbmcmIGRvY3VtZW50VVJMLCBMaXN0
ZW5lciopOworICAgIEluc3BlY3RvclN0eWxlU2hlZXQoSW5zcGVjdG9yUGFnZUFnZW50KiwgY29u
c3QgU3RyaW5nJiBpZCwgUGFzc1JlZlB0cjxDU1NTdHlsZVNoZWV0PiBwYWdlU3R5bGVTaGVldCwg
SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luLCBjb25zdCBTdHJp
bmcmIGRvY3VtZW50VVJMLCBMaXN0ZW5lciopOwogCiAgICAgYm9vbCBjYW5CaW5kKCkgY29uc3Qg
eyByZXR1cm4gbV9vcmlnaW4gIT0gSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Q1NTOjpTdHlsZVNo
ZWV0T3JpZ2luOjpVc2VyQWdlbnQgJiYgbV9vcmlnaW4gIT0gSW5zcGVjdG9yOjpUeXBlQnVpbGRl
cjo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luOjpVc2VyOyB9CiAgICAgSW5zcGVjdG9yQ1NTSWQgcnVs
ZU9yU3R5bGVJZChDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSkgY29uc3Q7CkBAIC0yNDgsNyAr
MjQ4LDcgQEAgcHJpdmF0ZToKICAgICBJbnNwZWN0b3JQYWdlQWdlbnQqIG1fcGFnZUFnZW50Owog
ICAgIFN0cmluZyBtX2lkOwogICAgIFJlZlB0cjxDU1NTdHlsZVNoZWV0PiBtX3BhZ2VTdHlsZVNo
ZWV0OwotICAgIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6
RW51bSBtX29yaWdpbjsKKyAgICBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDU1M6OlN0eWxlU2hl
ZXRPcmlnaW4gbV9vcmlnaW47CiAgICAgU3RyaW5nIG1fZG9jdW1lbnRVUkw7CiAgICAgYm9vbCBt
X2lzUmV2YWxpZGF0aW5nOwogICAgIFBhcnNlZFN0eWxlU2hlZXQqIG1fcGFyc2VkU3R5bGVTaGVl
dDsKQEAgLTI1OSwxNCArMjU5LDE0IEBAIHByaXZhdGU6CiAKIGNsYXNzIEluc3BlY3RvclN0eWxl
U2hlZXRGb3JJbmxpbmVTdHlsZSA6IHB1YmxpYyBJbnNwZWN0b3JTdHlsZVNoZWV0IHsKIHB1Ymxp
YzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5
bGU+IGNyZWF0ZShJbnNwZWN0b3JQYWdlQWdlbnQqLCBjb25zdCBTdHJpbmcmIGlkLCBQYXNzUmVm
UHRyPEVsZW1lbnQ+LCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpDU1M6OlN0eWxlU2hlZXRPcmln
aW46OkVudW0sIExpc3RlbmVyKik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yU3R5
bGVTaGVldEZvcklubGluZVN0eWxlPiBjcmVhdGUoSW5zcGVjdG9yUGFnZUFnZW50KiwgY29uc3Qg
U3RyaW5nJiBpZCwgUGFzc1JlZlB0cjxFbGVtZW50PiwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6
Q1NTOjpTdHlsZVNoZWV0T3JpZ2luLCBMaXN0ZW5lciopOwogCiAgICAgdm9pZCBkaWRNb2RpZnlF
bGVtZW50QXR0cmlidXRlKCk7CiAgICAgdmlydHVhbCBib29sIGdldFRleHQoU3RyaW5nKiByZXN1
bHQpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5
bGVGb3JJZChjb25zdCBJbnNwZWN0b3JDU1NJZCYgaWQpIGNvbnN0IG92ZXJyaWRlIHsgQVNTRVJU
X1VOVVNFRChpZCwgIWlkLm9yZGluYWwoKSk7IHJldHVybiBpbmxpbmVTdHlsZSgpOyB9CiAKIHBy
b3RlY3RlZDoKLSAgICBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGUoSW5zcGVjdG9y
UGFnZUFnZW50KiwgY29uc3QgU3RyaW5nJiBpZCwgUGFzc1JlZlB0cjxFbGVtZW50PiwgSW5zcGVj
dG9yOjpUeXBlQnVpbGRlcjo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luOjpFbnVtLCBMaXN0ZW5lciop
OworICAgIEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZShJbnNwZWN0b3JQYWdlQWdl
bnQqLCBjb25zdCBTdHJpbmcmIGlkLCBQYXNzUmVmUHRyPEVsZW1lbnQ+LCBJbnNwZWN0b3I6OlR5
cGVCdWlsZGVyOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW4sIExpc3RlbmVyKik7CiAKICAgICB2aXJ0
dWFsIERvY3VtZW50KiBvd25lckRvY3VtZW50KCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVh
bCBSZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+IHJ1bGVTb3VyY2VEYXRhRm9yKENTU1N0eWxlRGVj
bGFyYXRpb24qIHN0eWxlKSBjb25zdCBvdmVycmlkZSB7IEFTU0VSVF9VTlVTRUQoc3R5bGUsIHN0
eWxlID09IGlubGluZVN0eWxlKCkpOyByZXR1cm4gbV9ydWxlU291cmNlRGF0YTsgfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclRpbWVsaW5lQWdlbnQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclRpbWVsaW5lQWdlbnQuY3BwCmlu
ZGV4IDI0MjY5NzRmNDcwNmE3MWJmOTdmOWQyNDI1YzczY2Q0Mjk5OTRhMTQuLmFjZTU2M2ZlNjI5
MTNmY2FlZTAyM2JjNzUyZWQxMWY5NzYyZDI1MTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JUaW1lbGluZUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5jcHAKQEAgLTU1NCw3ICs1NTQsNyBA
QCB2b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OmJyZWFrcG9pbnRBY3Rpb25Qcm9iZShKU0M6
OkV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSQogICAgIGFwcGVuZFJlY29yZChUaW1lbGluZVJlY29y
ZEZhY3Rvcnk6OmNyZWF0ZVByb2JlU2FtcGxlRGF0YShhY3Rpb24sIGhpdENvdW50KSwgVGltZWxp
bmVSZWNvcmRUeXBlOjpQcm9iZVNhbXBsZSwgZmFsc2UsIGZyYW1lRnJvbUV4ZWNTdGF0ZShleGVj
KSk7CiB9CiAKLXN0YXRpYyBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpUaW1lbGluZTo6RXZlbnRU
eXBlOjpFbnVtIHRvUHJvdG9jb2woVGltZWxpbmVSZWNvcmRUeXBlIHR5cGUpCitzdGF0aWMgSW5z
cGVjdG9yOjpUeXBlQnVpbGRlcjo6VGltZWxpbmU6OkV2ZW50VHlwZSB0b1Byb3RvY29sKFRpbWVs
aW5lUmVjb3JkVHlwZSB0eXBlKQogewogICAgIHN3aXRjaCAodHlwZSkgewogICAgIGNhc2UgVGlt
ZWxpbmVSZWNvcmRUeXBlOjpFdmVudERpc3BhdGNoOgpAQCAtNjQ2LDcgKzY0Niw3IEBAIHZvaWQg
SW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6YWRkUmVjb3JkVG9UaW1lbGluZShQYXNzUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gcHJwCiB7CiAgICAgcHJwUmVjb3JkLT5zZXRTdHJpbmcoInR5cGUiLCBJ
bnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpnZXRXZWJFbnVtQ29uc3RhbnRWYWx1ZSh0b1Byb3RvY29s
KHR5cGUpKSk7CiAKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6VGltZWxpbmU6
OlRpbWVsaW5lRXZlbnQ+IHJlY29yZCA9IEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlRpbWVsaW5l
OjpUaW1lbGluZUV2ZW50OjpydW50aW1lQ2FzdChwcnBSZWNvcmQpOworICAgIFJlZlB0cjxJbnNw
ZWN0b3I6OlR5cGVCdWlsZGVyOjpUaW1lbGluZTo6VGltZWxpbmVFdmVudD4gcmVjb3JkID0gQmlu
ZGluZ1RyYWl0czxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpUaW1lbGluZTo6VGltZWxpbmVFdmVu
dD46OnJ1bnRpbWVDYXN0KHBycFJlY29yZCk7CiAKICAgICBpZiAobV9yZWNvcmRTdGFjay5pc0Vt
cHR5KCkpCiAgICAgICAgIHNlbmRFdmVudChyZWNvcmQucmVsZWFzZSgpKTsKQEAgLTcxNCw3ICs3
MTQsNyBAQCB2b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OnNlbmRFdmVudChQYXNzUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gZXZlbnQpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIEZJWE1F
OiBydW50aW1lQ2FzdCBpcyBhIGhhY2suIFdlIGRvIGl0IGJlY2F1c2Ugd2UgY2FuJ3QgYnVpbGQg
VGltZWxpbmVFdmVudCBkaXJlY3RseSBub3cuCi0gICAgUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1
aWxkZXI6OlRpbWVsaW5lOjpUaW1lbGluZUV2ZW50PiByZWNvcmRDaGVja2VkID0gSW5zcGVjdG9y
OjpUeXBlQnVpbGRlcjo6VGltZWxpbmU6OlRpbWVsaW5lRXZlbnQ6OnJ1bnRpbWVDYXN0KGV2ZW50
KTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6VGltZWxpbmU6OlRpbWVsaW5l
RXZlbnQ+IHJlY29yZENoZWNrZWQgPSBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6VHlwZUJ1aWxk
ZXI6OlRpbWVsaW5lOjpUaW1lbGluZUV2ZW50Pjo6cnVudGltZUNhc3QoZXZlbnQpOwogICAgIG1f
ZnJvbnRlbmREaXNwYXRjaGVyLT5ldmVudFJlY29yZGVkKHJlY29yZENoZWNrZWQucmVsZWFzZSgp
KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL3Byb3RvY29sL0NT
Uy5qc29uIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL3Byb3RvY29sL0NTUy5qc29uCmluZGV4
IGNhOTBjZjc0MWJmNmMxYjg5MzY4N2FmZTFmNjBlMDRlNDAyZGM4NGMuLjljNWIyNzU0NWViOWJj
YTc4YWQ5ZTJlM2VjYWY2MDI0OWNiZmM2MDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9wcm90b2NvbC9DU1MuanNvbgorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
cHJvdG9jb2wvQ1NTLmpzb24KQEAgLTE2Myw2ICsxNjMsMTIgQEAKICAgICAgICAgICAgICJkZXNj
cmlwdGlvbiI6ICJDU1Mgc3R5bGUgcmVwcmVzZW50YXRpb24uIgogICAgICAgICB9LAogICAgICAg
ICB7CisgICAgICAgICAgICAiaWQiOiAiQ1NTUHJvcGVydHlTdGF0dXMiLAorCSAgICAidHlwZSI6
ICJzdHJpbmciLAorICAgICAgICAgICAgImVudW0iOiBbImFjdGl2ZSIsICJpbmFjdGl2ZSIsICJk
aXNhYmxlZCIsICJzdHlsZSJdLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlRoZSBwcm9w
ZXJ0eSBzdGF0dXM6IFwiYWN0aXZlXCIgaWYgdGhlIHByb3BlcnR5IGlzIGVmZmVjdGl2ZSBpbiB0
aGUgc3R5bGUsIFwiaW5hY3RpdmVcIiBpZiB0aGUgcHJvcGVydHkgaXMgb3ZlcnJpZGRlbiBieSBh
IHNhbWUtbmFtZWQgcHJvcGVydHkgaW4gdGhpcyBzdHlsZSBsYXRlciBvbiwgXCJkaXNhYmxlZFwi
IGlmIHRoZSBwcm9wZXJ0eSBpcyBkaXNhYmxlZCBieSB0aGUgdXNlciwgXCJzdHlsZVwiIChpbXBs
aWVkIGlmIGFic2VudCkgaWYgdGhlIHByb3BlcnR5IGlzIHJlcG9ydGVkIGJ5IHRoZSBicm93c2Vy
IHJhdGhlciB0aGFuIGJ5IHRoZSBDU1Mgc291cmNlIHBhcnNlci4iCisgICAgICAgIH0sCisgICAg
ICAgIHsKICAgICAgICAgICAgICJpZCI6ICJDU1NQcm9wZXJ0eSIsCiAgICAgICAgICAgICAidHlw
ZSI6ICJvYmplY3QiLAogICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCkBAIC0xNzIsNyArMTc4
LDcgQEAKICAgICAgICAgICAgICAgICB7ICJuYW1lIjogImltcGxpY2l0IiwgInR5cGUiOiAiYm9v
bGVhbiIsICJvcHRpb25hbCI6IHRydWUsICJkZXNjcmlwdGlvbiI6ICJXaGV0aGVyIHRoZSBwcm9w
ZXJ0eSBpcyBpbXBsaWNpdCAoaW1wbGllcyA8Y29kZT5mYWxzZTwvY29kZT4gaWYgYWJzZW50KS4i
IH0sCiAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0ZXh0IiwgInR5cGUiOiAic3RyaW5nIiwg
Im9wdGlvbmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9uIjogIlRoZSBmdWxsIHByb3BlcnR5IHRleHQg
YXMgc3BlY2lmaWVkIGluIHRoZSBzdHlsZS4iIH0sCiAgICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJwYXJzZWRPayIsICJ0eXBlIjogImJvb2xlYW4iLCAib3B0aW9uYWwiOiB0cnVlLCAiZGVzY3Jp
cHRpb24iOiAiV2hldGhlciB0aGUgcHJvcGVydHkgaXMgdW5kZXJzdG9vZCBieSB0aGUgYnJvd3Nl
ciAoaW1wbGllcyA8Y29kZT50cnVlPC9jb2RlPiBpZiBhYnNlbnQpLiIgfSwKLSAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogInN0YXR1cyIsICJ0eXBlIjogInN0cmluZyIsICJlbnVtIjogWyJhY3Rp
dmUiLCAiaW5hY3RpdmUiLCAiZGlzYWJsZWQiLCAic3R5bGUiXSwgIm9wdGlvbmFsIjogdHJ1ZSwg
ImRlc2NyaXB0aW9uIjogIlRoZSBwcm9wZXJ0eSBzdGF0dXM6IFwiYWN0aXZlXCIgaWYgdGhlIHBy
b3BlcnR5IGlzIGVmZmVjdGl2ZSBpbiB0aGUgc3R5bGUsIFwiaW5hY3RpdmVcIiBpZiB0aGUgcHJv
cGVydHkgaXMgb3ZlcnJpZGRlbiBieSBhIHNhbWUtbmFtZWQgcHJvcGVydHkgaW4gdGhpcyBzdHls
ZSBsYXRlciBvbiwgXCJkaXNhYmxlZFwiIGlmIHRoZSBwcm9wZXJ0eSBpcyBkaXNhYmxlZCBieSB0
aGUgdXNlciwgXCJzdHlsZVwiIChpbXBsaWVkIGlmIGFic2VudCkgaWYgdGhlIHByb3BlcnR5IGlz
IHJlcG9ydGVkIGJ5IHRoZSBicm93c2VyIHJhdGhlciB0aGFuIGJ5IHRoZSBDU1Mgc291cmNlIHBh
cnNlci4iIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzdGF0dXMiLCAiJHJlZiI6ICJD
U1NQcm9wZXJ0eVN0YXR1cyIsICJvcHRpb25hbCI6IHRydWUsICJkZXNjcmlwdGlvbiI6ICJXaGV0
aGVyIHRoZSBwcm9wZXJ0eSBpcyBhY3RpdmUgb3IgZGlzYWJsZWQuIiB9LAogICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAicmFuZ2UiLCAiJHJlZiI6ICJTb3VyY2VSYW5nZSIsICJvcHRpb25hbCI6
IHRydWUsICJkZXNjcmlwdGlvbiI6ICJUaGUgZW50aXJlIHByb3BlcnR5IHJhbmdlIGluIHRoZSBl
bmNsb3Npbmcgc3R5bGUgZGVjbGFyYXRpb24gKGlmIGF2YWlsYWJsZSkuIiB9CiAgICAgICAgICAg
ICBdLAogICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkNTUyBzdHlsZSBlZmZlY3RpdmUgdmlz
dWFsIGRpbWVuc2lvbnMgYW5kIHNvdXJjZSBvZmZzZXRzLiIKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9QYWdlLmpzb24gYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvcHJvdG9jb2wvUGFnZS5qc29uCmluZGV4IDNhZmRiYzBjZDNkMjdkNTE2NGQyNmU4YmQz
MmM0ZDc2ZmRmZGQyNzUuLjg4YTc2YzQ2ZjJiZWZjZGE0ZGIxYTQ1MDRmNzJmMmUyMmQ2NzE1MDAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9QYWdlLmpzb24K
KysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL3Byb3RvY29sL1BhZ2UuanNvbgpAQCAtMjks
MjYgKzI5LDI1IEBACiAgICAgICAgICAgICBdCiAgICAgICAgIH0sCiAgICAgICAgIHsKKyAgICAg
ICAgICAgICJpZCI6ICJGcmFtZVJlc291cmNlIiwKKyAgICAgICAgICAgICJ0eXBlIjogIm9iamVj
dCIsCisgICAgICAgICAgICAicHJvcGVydGllcyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1l
IjogInVybCIsICJ0eXBlIjogInN0cmluZyIsICJkZXNjcmlwdGlvbiI6ICJSZXNvdXJjZSBVUkwu
IiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidHlwZSIsICIkcmVmIjogIlJlc291cmNl
VHlwZSIsICJkZXNjcmlwdGlvbiI6ICJUeXBlIG9mIHRoaXMgcmVzb3VyY2UuIiB9LAorICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAibWltZVR5cGUiLCAidHlwZSI6ICJzdHJpbmciLCAiZGVzY3Jp
cHRpb24iOiAiUmVzb3VyY2UgbWltZVR5cGUgYXMgZGV0ZXJtaW5lZCBieSB0aGUgYnJvd3Nlci4i
IH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJmYWlsZWQiLCAidHlwZSI6ICJib29sZWFu
IiwgIm9wdGlvbmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9uIjogIlRydWUgaWYgdGhlIHJlc291cmNl
IGZhaWxlZCB0byBsb2FkLiIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNhbmNlbGVk
IiwgInR5cGUiOiAiYm9vbGVhbiIsICJvcHRpb25hbCI6IHRydWUsICJkZXNjcmlwdGlvbiI6ICJU
cnVlIGlmIHRoZSByZXNvdXJjZSB3YXMgY2FuY2VsZWQgZHVyaW5nIGxvYWRpbmcuIiB9LAorICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAic291cmNlTWFwVVJMIiwgInR5cGUiOiAic3RyaW5nIiwg
Im9wdGlvbmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9uIjogIlVSTCBvZiBzb3VyY2UgbWFwIGFzc29j
aWF0ZWQgd2l0aCB0aGlzIHJlc291cmNlIChpZiBhbnkpLiIgfQorICAgICAgICAgICAgXQorICAg
ICAgICB9LAorICAgICAgICB7CiAgICAgICAgICAgICAiaWQiOiAiRnJhbWVSZXNvdXJjZVRyZWUi
LAogICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKICAgICAgICAgICAgICJkZXNjcmlwdGlv
biI6ICJJbmZvcm1hdGlvbiBhYm91dCB0aGUgRnJhbWUgaGllcmFyY2h5IGFsb25nIHdpdGggdGhl
aXIgY2FjaGVkIHJlc291cmNlcy4iLAogICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCiAgICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJmcmFtZSIsICIkcmVmIjogIkZyYW1lIiwgImRlc2NyaXB0
aW9uIjogIkZyYW1lIGluZm9ybWF0aW9uIGZvciB0aGlzIHRyZWUgaXRlbS4iIH0sCiAgICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJjaGlsZEZyYW1lcyIsICJ0eXBlIjogImFycmF5IiwgIm9wdGlv
bmFsIjogdHJ1ZSwgIml0ZW1zIjogeyAiJHJlZiI6ICJGcmFtZVJlc291cmNlVHJlZSIgfSwgImRl
c2NyaXB0aW9uIjogIkNoaWxkIGZyYW1lcy4iIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJyZXNvdXJjZXMiLCAidHlwZSI6ICJhcnJheSIsCi0gICAgICAgICAgICAgICAgICAgICJpdGVt
cyI6IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAicHJvcGVydGllcyI6IFsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogInVybCIsICJ0eXBlIjogInN0cmluZyIsICJkZXNjcmlwdGlvbiI6ICJS
ZXNvdXJjZSBVUkwuIiB9LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
dHlwZSIsICIkcmVmIjogIlJlc291cmNlVHlwZSIsICJkZXNjcmlwdGlvbiI6ICJUeXBlIG9mIHRo
aXMgcmVzb3VyY2UuIiB9LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
bWltZVR5cGUiLCAidHlwZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRpb24iOiAiUmVzb3VyY2UgbWlt
ZVR5cGUgYXMgZGV0ZXJtaW5lZCBieSB0aGUgYnJvd3Nlci4iIH0sCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJmYWlsZWQiLCAidHlwZSI6ICJib29sZWFuIiwgIm9wdGlv
bmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9uIjogIlRydWUgaWYgdGhlIHJlc291cmNlIGZhaWxlZCB0
byBsb2FkLiIgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogImNhbmNl
bGVkIiwgInR5cGUiOiAiYm9vbGVhbiIsICJvcHRpb25hbCI6IHRydWUsICJkZXNjcmlwdGlvbiI6
ICJUcnVlIGlmIHRoZSByZXNvdXJjZSB3YXMgY2FuY2VsZWQgZHVyaW5nIGxvYWRpbmcuIiB9LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic291cmNlTWFwVVJMIiwgInR5
cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9uIjogIlVSTCBvZiBz
b3VyY2UgbWFwIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHJlc291cmNlIChpZiBhbnkpLiIgfQotICAg
ICAgICAgICAgICAgICAgICAgICAgXQotICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAg
ICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiSW5mb3JtYXRpb24gYWJvdXQgZnJhbWUgcmVzb3Vy
Y2VzLiIKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJyZXNv
dXJjZXMiLCAidHlwZSI6ICJhcnJheSIsICJpdGVtcyI6IHsgIiRyZWYiOiAiRnJhbWVSZXNvdXJj
ZSIgfSwgImRlc2NyaXB0aW9uIjogIkluZm9ybWF0aW9uIGFib3V0IGZyYW1lIHJlc291cmNlcy4i
IH0KICAgICAgICAgICAgIF0KICAgICAgICAgfSwKICAgICAgICAgewpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkluc3BlY3RvclVJL1ZlcnNpb25zL0luc3BlY3Rvci1pT1MtNi4wLmpzb24gYi9Tb3Vy
Y2UvV2ViSW5zcGVjdG9yVUkvVmVyc2lvbnMvSW5zcGVjdG9yLWlPUy02LjAuanNvbgppbmRleCAx
NDgzNzgxYmE1MGIxODExZDdkNmNhZmNkNTBhNDExNGE5YWM5ZDA1Li4zNTAyNDVmZjhiNjlmMDg1
MmY0MDEwMWFkMWQ3Zjg1OTMxMTBjN2IwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvVmVyc2lvbnMvSW5zcGVjdG9yLWlPUy02LjAuanNvbgorKysgYi9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvVmVyc2lvbnMvSW5zcGVjdG9yLWlPUy02LjAuanNvbgpAQCAtNjgsMjUgKzY4LDI0IEBA
CiAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgfSwKICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAiaWQiOiAiRnJhbWVSZXNvdXJjZSIsCisgICAgICAgICAgICAgICAgInR5cGUi
OiAib2JqZWN0IiwKKyAgICAgICAgICAgICAgICAicHJvcGVydGllcyI6IFsKKyAgICAgICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJ1cmwiLCAidHlwZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRpb24i
OiAiUmVzb3VyY2UgVVJMLiIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0eXBl
IiwgIiRyZWYiOiAiUmVzb3VyY2VUeXBlIiwgImRlc2NyaXB0aW9uIjogIlR5cGUgb2YgdGhpcyBy
ZXNvdXJjZS4iIH0sCisgICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibWltZVR5cGUiLCAi
dHlwZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRpb24iOiAiUmVzb3VyY2UgbWltZVR5cGUgYXMgZGV0
ZXJtaW5lZCBieSB0aGUgYnJvd3Nlci4iIH0sCisgICAgICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAiZmFpbGVkIiwgInR5cGUiOiAiYm9vbGVhbiIsICJvcHRpb25hbCI6IHRydWUsICJkZXNjcmlw
dGlvbiI6ICJUcnVlIGlmIHRoZSByZXNvdXJjZSBmYWlsZWQgdG8gbG9hZC4iIH0sCisgICAgICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAiY2FuY2VsZWQiLCAidHlwZSI6ICJib29sZWFuIiwgIm9w
dGlvbmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9uIjogIlRydWUgaWYgdGhlIHJlc291cmNlIHdhcyBj
YW5jZWxlZCBkdXJpbmcgbG9hZGluZy4iIH0KKyAgICAgICAgICAgICAgICBdCisgICAgICAgICAg
ICB9LAorICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICJpZCI6ICJGcmFtZVJlc291cmNl
VHJlZSIsCiAgICAgICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKICAgICAgICAgICAgICAg
ICAiZGVzY3JpcHRpb24iOiAiSW5mb3JtYXRpb24gYWJvdXQgdGhlIEZyYW1lIGhpZXJhcmNoeSBh
bG9uZyB3aXRoIHRoZWlyIGNhY2hlZCByZXNvdXJjZXMuIiwKICAgICAgICAgICAgICAgICAicHJv
cGVydGllcyI6IFsKICAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJmcmFtZSIsICIkcmVm
IjogIkZyYW1lIiwgImRlc2NyaXB0aW9uIjogIkZyYW1lIGluZm9ybWF0aW9uIGZvciB0aGlzIHRy
ZWUgaXRlbS4iIH0sCiAgICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY2hpbGRGcmFtZXMi
LCAidHlwZSI6ICJhcnJheSIsICJvcHRpb25hbCI6IHRydWUsICJpdGVtcyI6IHsgIiRyZWYiOiAi
RnJhbWVSZXNvdXJjZVRyZWUiIH0sICJkZXNjcmlwdGlvbiI6ICJDaGlsZCBmcmFtZXMuIiB9LAot
ICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInJlc291cmNlcyIsICJ0eXBlIjogImFycmF5
IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICJpdGVtcyI6IHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJwcm9wZXJ0aWVzIjogWwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICJuYW1l
IjogInVybCIsICJ0eXBlIjogInN0cmluZyIsICJkZXNjcmlwdGlvbiI6ICJSZXNvdXJjZSBVUkwu
IiB9LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInR5cGUiLCAi
JHJlZiI6ICJSZXNvdXJjZVR5cGUiLCAiZGVzY3JpcHRpb24iOiAiVHlwZSBvZiB0aGlzIHJlc291
cmNlLiIgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJtaW1l
VHlwZSIsICJ0eXBlIjogInN0cmluZyIsICJkZXNjcmlwdGlvbiI6ICJSZXNvdXJjZSBtaW1lVHlw
ZSBhcyBkZXRlcm1pbmVkIGJ5IHRoZSBicm93c2VyLiIgfSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJmYWlsZWQiLCAidHlwZSI6ICJib29sZWFuIiwgIm9wdGlv
bmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9uIjogIlRydWUgaWYgdGhlIHJlc291cmNlIGZhaWxlZCB0
byBsb2FkLiIgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJj
YW5jZWxlZCIsICJ0eXBlIjogImJvb2xlYW4iLCAib3B0aW9uYWwiOiB0cnVlLCAiZGVzY3JpcHRp
b24iOiAiVHJ1ZSBpZiB0aGUgcmVzb3VyY2Ugd2FzIGNhbmNlbGVkIGR1cmluZyBsb2FkaW5nLiIg
fQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KLSAgICAgICAgICAgICAgICAgICAgICAg
IH0sCi0gICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiSW5mb3JtYXRpb24g
YWJvdXQgZnJhbWUgcmVzb3VyY2VzLiIKLSAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogInJlc291cmNlcyIsICJ0eXBlIjogImFycmF5IiwgIml0ZW1z
IjogeyAiJHJlZiI6ICJGcmFtZVJlc291cmNlIiB9LCAiZGVzY3JpcHRpb24iOiAiSW5mb3JtYXRp
b24gYWJvdXQgZnJhbWUgcmVzb3VyY2VzLiIgfQogICAgICAgICAgICAgICAgIF0KICAgICAgICAg
ICAgIH0sCiAgICAgICAgICAgICB7CkBAIC0xNTg3LDcgKzE1ODYsNyBAQAogICAgICAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogIm5hbWUiLCAidHlwZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRpb24i
OiAiQ29tcHV0ZWQgc3R5bGUgcHJvcGVydHkgbmFtZS4iIH0sCiAgICAgICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAidmFsdWUiLCAidHlwZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRpb24iOiAiQ29t
cHV0ZWQgc3R5bGUgcHJvcGVydHkgdmFsdWUuIiB9CiAgICAgICAgICAgICAgICAgXQotICAgICAg
ICAgICAgfSwgICAgICAgICAgICAKKyAgICAgICAgICAgIH0sCiAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICAgImlkIjogIkNTU1N0eWxlIiwKICAgICAgICAgICAgICAgICAidHlwZSI6ICJv
YmplY3QiLApAQCAtMTYwMyw2ICsxNjAyLDEyIEBACiAgICAgICAgICAgICAgICAgImRlc2NyaXB0
aW9uIjogIkNTUyBzdHlsZSByZXByZXNlbnRhdGlvbi4iCiAgICAgICAgICAgICB9LAogICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICJpZCI6ICJDU1NQcm9wZXJ0eVN0YXR1cyIsCisgICAg
ICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKKyAgICAgICAgICAgICAgICAiZW51bSI6IFsi
YWN0aXZlIiwgImluYWN0aXZlIiwgImRpc2FibGVkIiwgInN0eWxlIl0sCisgICAgICAgICAgICAg
ICAgImRlc2NyaXB0aW9uIjogIlRoZSBwcm9wZXJ0eSBzdGF0dXM6IFwiYWN0aXZlXCIgKGltcGxp
ZWQgaWYgYWJzZW50KSBpZiB0aGUgcHJvcGVydHkgaXMgZWZmZWN0aXZlIGluIHRoZSBzdHlsZSwg
XCJpbmFjdGl2ZVwiIGlmIHRoZSBwcm9wZXJ0eSBpcyBvdmVycmlkZGVuIGJ5IGEgc2FtZS1uYW1l
ZCBwcm9wZXJ0eSBpbiB0aGlzIHN0eWxlIGxhdGVyIG9uLCBcImRpc2FibGVkXCIgaWYgdGhlIHBy
b3BlcnR5IGlzIGRpc2FibGVkIGJ5IHRoZSB1c2VyLCBcInN0eWxlXCIgaWYgdGhlIHByb3BlcnR5
IGlzIHJlcG9ydGVkIGJ5IHRoZSBicm93c2VyIHJhdGhlciB0aGFuIGJ5IHRoZSBDU1Mgc291cmNl
IHBhcnNlci4iCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
ICJpZCI6ICJDU1NQcm9wZXJ0eSIsCiAgICAgICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwK
ICAgICAgICAgICAgICAgICAicHJvcGVydGllcyI6IFsKQEAgLTE2MTIsNyArMTYxNyw3IEBACiAg
ICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiaW1wbGljaXQiLCAidHlwZSI6ICJib29sZWFu
IiwgIm9wdGlvbmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9uIjogIldoZXRoZXIgdGhlIHByb3BlcnR5
IGlzIGltcGxpY2l0IChpbXBsaWVzIDxjb2RlPmZhbHNlPC9jb2RlPiBpZiBhYnNlbnQpLiIgfSwK
ICAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0ZXh0IiwgInR5cGUiOiAic3RyaW5nIiwg
Im9wdGlvbmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9uIjogIlRoZSBmdWxsIHByb3BlcnR5IHRleHQg
YXMgc3BlY2lmaWVkIGluIHRoZSBzdHlsZS4iIH0sCiAgICAgICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAicGFyc2VkT2siLCAidHlwZSI6ICJib29sZWFuIiwgIm9wdGlvbmFsIjogdHJ1ZSwgImRl
c2NyaXB0aW9uIjogIldoZXRoZXIgdGhlIHByb3BlcnR5IGlzIHVuZGVyc3Rvb2QgYnkgdGhlIGJy
b3dzZXIgKGltcGxpZXMgPGNvZGU+dHJ1ZTwvY29kZT4gaWYgYWJzZW50KS4iIH0sCi0gICAgICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAic3RhdHVzIiwgInR5cGUiOiAic3RyaW5nIiwgImVudW0i
OiBbImFjdGl2ZSIsICJpbmFjdGl2ZSIsICJkaXNhYmxlZCIsICJzdHlsZSJdLCAib3B0aW9uYWwi
OiB0cnVlLCAiZGVzY3JpcHRpb24iOiAiVGhlIHByb3BlcnR5IHN0YXR1czogXCJhY3RpdmVcIiAo
aW1wbGllZCBpZiBhYnNlbnQpIGlmIHRoZSBwcm9wZXJ0eSBpcyBlZmZlY3RpdmUgaW4gdGhlIHN0
eWxlLCBcImluYWN0aXZlXCIgaWYgdGhlIHByb3BlcnR5IGlzIG92ZXJyaWRkZW4gYnkgYSBzYW1l
LW5hbWVkIHByb3BlcnR5IGluIHRoaXMgc3R5bGUgbGF0ZXIgb24sIFwiZGlzYWJsZWRcIiBpZiB0
aGUgcHJvcGVydHkgaXMgZGlzYWJsZWQgYnkgdGhlIHVzZXIsIFwic3R5bGVcIiBpZiB0aGUgcHJv
cGVydHkgaXMgcmVwb3J0ZWQgYnkgdGhlIGJyb3dzZXIgcmF0aGVyIHRoYW4gYnkgdGhlIENTUyBz
b3VyY2UgcGFyc2VyLiIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzdGF0dXMi
LCAiJHJlZiI6ICJDU1NQcm9wZXJ0eVN0YXR1cyIsICJvcHRpb25hbCI6IHRydWUsICJkZXNjcmlw
dGlvbiI6ICJXaGV0aGVyIHRoZSBwcm9wZXJ0eSBpcyBhY3RpdmUgb3IgZGlzYWJsZWQuIiB9LAog
ICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNob3J0aGFuZE5hbWUiLCAidHlwZSI6ICJz
dHJpbmciLCAib3B0aW9uYWwiOiB0cnVlLCAiZGVzY3JpcHRpb24iOiAiVGhlIHJlbGF0ZWQgc2hv
cnRoYW5kIHByb3BlcnR5IG5hbWUgKGFic2VudCBpZiB0aGlzIHByb3BlcnR5IGlzIG5vdCBhIGxv
bmdoYW5kKS4iIH0sCiAgICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicmFuZ2UiLCAiJHJl
ZiI6ICJTb3VyY2VSYW5nZSIsICJvcHRpb25hbCI6IHRydWUsICJkZXNjcmlwdGlvbiI6ICJUaGUg
ZW50aXJlIHByb3BlcnR5IHJhbmdlIGluIHRoZSBlbmNsb3Npbmcgc3R5bGUgZGVjbGFyYXRpb24g
KGlmIGF2YWlsYWJsZSkuIiB9CiAgICAgICAgICAgICAgICAgXSwKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJJbnNwZWN0b3JVSS9WZXJzaW9ucy9JbnNwZWN0b3ItaU9TLTcuMC5qc29uIGIvU291cmNl
L1dlYkluc3BlY3RvclVJL1ZlcnNpb25zL0luc3BlY3Rvci1pT1MtNy4wLmpzb24KaW5kZXggZDA1
MzIwOWI2MjkzOThkNmMwODk3MzJjYzJkYmJhZWUyMTc5YzVjMC4uNjhhZTFiNTA3MTc1ZDI0MWY2
ZDk2NzAzYTJhYjRhZTViYWRjOGRlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJ
L1ZlcnNpb25zL0luc3BlY3Rvci1pT1MtNy4wLmpzb24KKysrIGIvU291cmNlL1dlYkluc3BlY3Rv
clVJL1ZlcnNpb25zL0luc3BlY3Rvci1pT1MtNy4wLmpzb24KQEAgLTY1LDI2ICs2NSwyNSBAQAog
ICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgImlkIjogIkZyYW1lUmVzb3VyY2UiLAorICAgICAgICAgICAgICAgICJ0eXBlIjog
Im9iamVjdCIsCisgICAgICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCisgICAgICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAidXJsIiwgInR5cGUiOiAic3RyaW5nIiwgImRlc2NyaXB0aW9uIjog
IlJlc291cmNlIFVSTC4iIH0sCisgICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidHlwZSIs
ICIkcmVmIjogIlJlc291cmNlVHlwZSIsICJkZXNjcmlwdGlvbiI6ICJUeXBlIG9mIHRoaXMgcmVz
b3VyY2UuIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm1pbWVUeXBlIiwgInR5
cGUiOiAic3RyaW5nIiwgImRlc2NyaXB0aW9uIjogIlJlc291cmNlIG1pbWVUeXBlIGFzIGRldGVy
bWluZWQgYnkgdGhlIGJyb3dzZXIuIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjog
ImZhaWxlZCIsICJ0eXBlIjogImJvb2xlYW4iLCAib3B0aW9uYWwiOiB0cnVlLCAiZGVzY3JpcHRp
b24iOiAiVHJ1ZSBpZiB0aGUgcmVzb3VyY2UgZmFpbGVkIHRvIGxvYWQuIiB9LAorICAgICAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogImNhbmNlbGVkIiwgInR5cGUiOiAiYm9vbGVhbiIsICJvcHRp
b25hbCI6IHRydWUsICJkZXNjcmlwdGlvbiI6ICJUcnVlIGlmIHRoZSByZXNvdXJjZSB3YXMgY2Fu
Y2VsZWQgZHVyaW5nIGxvYWRpbmcuIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjog
InNvdXJjZU1hcFVSTCIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IHRydWUsICJkZXNj
cmlwdGlvbiI6ICJVUkwgb2Ygc291cmNlIG1hcCBhc3NvY2lhdGVkIHdpdGggdGhpcyByZXNvdXJj
ZSAoaWYgYW55KS4iIH0KKyAgICAgICAgICAgICAgICBdCisgICAgICAgICAgICB9LAorICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgICJpZCI6ICJGcmFtZVJlc291cmNlVHJlZSIsCiAgICAg
ICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKICAgICAgICAgICAgICAgICAiZGVzY3JpcHRp
b24iOiAiSW5mb3JtYXRpb24gYWJvdXQgdGhlIEZyYW1lIGhpZXJhcmNoeSBhbG9uZyB3aXRoIHRo
ZWlyIGNhY2hlZCByZXNvdXJjZXMuIiwKICAgICAgICAgICAgICAgICAicHJvcGVydGllcyI6IFsK
ICAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJmcmFtZSIsICIkcmVmIjogIkZyYW1lIiwg
ImRlc2NyaXB0aW9uIjogIkZyYW1lIGluZm9ybWF0aW9uIGZvciB0aGlzIHRyZWUgaXRlbS4iIH0s
CiAgICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiY2hpbGRGcmFtZXMiLCAidHlwZSI6ICJh
cnJheSIsICJvcHRpb25hbCI6IHRydWUsICJpdGVtcyI6IHsgIiRyZWYiOiAiRnJhbWVSZXNvdXJj
ZVRyZWUiIH0sICJkZXNjcmlwdGlvbiI6ICJDaGlsZCBmcmFtZXMuIiB9LAotICAgICAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogInJlc291cmNlcyIsICJ0eXBlIjogImFycmF5IiwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICJpdGVtcyI6IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
dHlwZSI6ICJvYmplY3QiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwcm9wZXJ0aWVz
IjogWwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInVybCIsICJ0
eXBlIjogInN0cmluZyIsICJkZXNjcmlwdGlvbiI6ICJSZXNvdXJjZSBVUkwuIiB9LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInR5cGUiLCAiJHJlZiI6ICJSZXNv
dXJjZVR5cGUiLCAiZGVzY3JpcHRpb24iOiAiVHlwZSBvZiB0aGlzIHJlc291cmNlLiIgfSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJtaW1lVHlwZSIsICJ0eXBl
IjogInN0cmluZyIsICJkZXNjcmlwdGlvbiI6ICJSZXNvdXJjZSBtaW1lVHlwZSBhcyBkZXRlcm1p
bmVkIGJ5IHRoZSBicm93c2VyLiIgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJmYWlsZWQiLCAidHlwZSI6ICJib29sZWFuIiwgIm9wdGlvbmFsIjogdHJ1ZSwg
ImRlc2NyaXB0aW9uIjogIlRydWUgaWYgdGhlIHJlc291cmNlIGZhaWxlZCB0byBsb2FkLiIgfSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjYW5jZWxlZCIsICJ0
eXBlIjogImJvb2xlYW4iLCAib3B0aW9uYWwiOiB0cnVlLCAiZGVzY3JpcHRpb24iOiAiVHJ1ZSBp
ZiB0aGUgcmVzb3VyY2Ugd2FzIGNhbmNlbGVkIGR1cmluZyBsb2FkaW5nLiIgfSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzb3VyY2VNYXBVUkwiLCAidHlwZSI6
ICJzdHJpbmciLCAib3B0aW9uYWwiOiB0cnVlLCAiZGVzY3JpcHRpb24iOiAiVVJMIG9mIHNvdXJj
ZSBtYXAgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcmVzb3VyY2UgKGlmIGFueSkuIiB9Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXQotICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJJbmZvcm1hdGlvbiBhYm91dCBmcmFt
ZSByZXNvdXJjZXMuIgotICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAicmVzb3VyY2VzIiwgInR5cGUiOiAiYXJyYXkiLCAiaXRlbXMiOiB7ICIkcmVm
IjogIkZyYW1lUmVzb3VyY2UiIH0sICJkZXNjcmlwdGlvbiI6ICJJbmZvcm1hdGlvbiBhYm91dCBm
cmFtZSByZXNvdXJjZXMuIiB9CiAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgfSwKICAg
ICAgICAgICAgIHsKQEAgLTE5MTcsNiArMTkxNiwxMiBAQAogICAgICAgICAgICAgICAgICJkZXNj
cmlwdGlvbiI6ICJDU1Mgc3R5bGUgcmVwcmVzZW50YXRpb24uIgogICAgICAgICAgICAgfSwKICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAiaWQiOiAiQ1NTUHJvcGVydHlTdGF0dXMiLAor
ICAgICAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCisgICAgICAgICAgICAgICAgImVudW0i
OiBbImFjdGl2ZSIsICJpbmFjdGl2ZSIsICJkaXNhYmxlZCIsICJzdHlsZSJdLAorICAgICAgICAg
ICAgICAgICJkZXNjcmlwdGlvbiI6ICJUaGUgcHJvcGVydHkgc3RhdHVzOiBcImFjdGl2ZVwiIChp
bXBsaWVkIGlmIGFic2VudCkgaWYgdGhlIHByb3BlcnR5IGlzIGVmZmVjdGl2ZSBpbiB0aGUgc3R5
bGUsIFwiaW5hY3RpdmVcIiBpZiB0aGUgcHJvcGVydHkgaXMgb3ZlcnJpZGRlbiBieSBhIHNhbWUt
bmFtZWQgcHJvcGVydHkgaW4gdGhpcyBzdHlsZSBsYXRlciBvbiwgXCJkaXNhYmxlZFwiIGlmIHRo
ZSBwcm9wZXJ0eSBpcyBkaXNhYmxlZCBieSB0aGUgdXNlciwgXCJzdHlsZVwiIGlmIHRoZSBwcm9w
ZXJ0eSBpcyByZXBvcnRlZCBieSB0aGUgYnJvd3NlciByYXRoZXIgdGhhbiBieSB0aGUgQ1NTIHNv
dXJjZSBwYXJzZXIuIgorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgICAiaWQiOiAiQ1NTUHJvcGVydHkiLAogICAgICAgICAgICAgICAgICJ0eXBlIjogIm9iamVj
dCIsCiAgICAgICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCkBAIC0xOTI2LDcgKzE5MzEsNyBA
QAogICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogImltcGxpY2l0IiwgInR5cGUiOiAiYm9v
bGVhbiIsICJvcHRpb25hbCI6IHRydWUsICJkZXNjcmlwdGlvbiI6ICJXaGV0aGVyIHRoZSBwcm9w
ZXJ0eSBpcyBpbXBsaWNpdCAoaW1wbGllcyA8Y29kZT5mYWxzZTwvY29kZT4gaWYgYWJzZW50KS4i
IH0sCiAgICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidGV4dCIsICJ0eXBlIjogInN0cmlu
ZyIsICJvcHRpb25hbCI6IHRydWUsICJkZXNjcmlwdGlvbiI6ICJUaGUgZnVsbCBwcm9wZXJ0eSB0
ZXh0IGFzIHNwZWNpZmllZCBpbiB0aGUgc3R5bGUuIiB9LAogICAgICAgICAgICAgICAgICAgICB7
ICJuYW1lIjogInBhcnNlZE9rIiwgInR5cGUiOiAiYm9vbGVhbiIsICJvcHRpb25hbCI6IHRydWUs
ICJkZXNjcmlwdGlvbiI6ICJXaGV0aGVyIHRoZSBwcm9wZXJ0eSBpcyB1bmRlcnN0b29kIGJ5IHRo
ZSBicm93c2VyIChpbXBsaWVzIDxjb2RlPnRydWU8L2NvZGU+IGlmIGFic2VudCkuIiB9LAotICAg
ICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInN0YXR1cyIsICJ0eXBlIjogInN0cmluZyIsICJl
bnVtIjogWyJhY3RpdmUiLCAiaW5hY3RpdmUiLCAiZGlzYWJsZWQiLCAic3R5bGUiXSwgIm9wdGlv
bmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9uIjogIlRoZSBwcm9wZXJ0eSBzdGF0dXM6IFwiYWN0aXZl
XCIgaWYgdGhlIHByb3BlcnR5IGlzIGVmZmVjdGl2ZSBpbiB0aGUgc3R5bGUsIFwiaW5hY3RpdmVc
IiBpZiB0aGUgcHJvcGVydHkgaXMgb3ZlcnJpZGRlbiBieSBhIHNhbWUtbmFtZWQgcHJvcGVydHkg
aW4gdGhpcyBzdHlsZSBsYXRlciBvbiwgXCJkaXNhYmxlZFwiIGlmIHRoZSBwcm9wZXJ0eSBpcyBk
aXNhYmxlZCBieSB0aGUgdXNlciwgXCJzdHlsZVwiIChpbXBsaWVkIGlmIGFic2VudCkgaWYgdGhl
IHByb3BlcnR5IGlzIHJlcG9ydGVkIGJ5IHRoZSBicm93c2VyIHJhdGhlciB0aGFuIGJ5IHRoZSBD
U1Mgc291cmNlIHBhcnNlci4iIH0sCisgICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic3Rh
dHVzIiwgIiRyZWYiOiAiQ1NTUHJvcGVydHlTdGF0dXMiLCAib3B0aW9uYWwiOiB0cnVlLCAiZGVz
Y3JpcHRpb24iOiAiV2hldGhlciB0aGUgcHJvcGVydHkgaXMgYWN0aXZlIG9yIGRpc2FibGVkLiIg
fSwKICAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJyYW5nZSIsICIkcmVmIjogIlNvdXJj
ZVJhbmdlIiwgIm9wdGlvbmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9uIjogIlRoZSBlbnRpcmUgcHJv
cGVydHkgcmFuZ2UgaW4gdGhlIGVuY2xvc2luZyBzdHlsZSBkZWNsYXJhdGlvbiAoaWYgYXZhaWxh
YmxlKS4iIH0KICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICJkZXNjcmlwdGlv
biI6ICJDU1Mgc3R5bGUgZWZmZWN0aXZlIHZpc3VhbCBkaW1lbnNpb25zIGFuZCBzb3VyY2Ugb2Zm
c2V0cy4iCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5k
ZXggMzhmYWM2MzI4ZWZhNWE4NzJhNWQ1MGI0MjU4MjRhYWNlMzEyODQ0OC4uNzcwNWExNjBlYTRj
NGNiZjM0YTIzMDdlN2UzY2RjODJkNDU3Y2RiYSAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9n
CisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ0IEBACisyMDE0LTA4LTE0ICBCcmlh
biBKLiBCdXJnICA8YnVyZ0Bjcy53YXNoaW5ndG9uLmVkdT4KKworICAgICAgICBXZWIgSW5zcGVj
dG9yOiByZXdyaXRlIENvZGVHZW5lcmF0b3JJbnNwZWN0b3IgdG8gYmUgbW9kdWxhciBhbmQgdGVz
dGFibGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEz
MTU5NgorCisgICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNvcmFyby4KKworICAgICAgICAq
IFNjcmlwdHMvcnVuLWluc3BlY3Rvci1nZW5lcmF0b3ItdGVzdHM6IEFkZGVkLgorICAgICAgICAo
bWFpbik6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9pbnNwZWN0b3IvX19pbml0X18ucHk6
IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvaW5zcGVjdG9yL21haW4ucHk6IEFk
ZGVkLgorICAgICAgICAoSW5zcGVjdG9yR2VuZXJhdG9yVGVzdHMpOgorICAgICAgICAoSW5zcGVj
dG9yR2VuZXJhdG9yVGVzdHMuX19pbml0X18pOgorICAgICAgICAoSW5zcGVjdG9yR2VuZXJhdG9y
VGVzdHMuZ2VuZXJhdGVfZnJvbV9qc29uKToKKyAgICAgICAgKEluc3BlY3RvckdlbmVyYXRvclRl
c3RzLndyaXRlX2Vycm9yX2ZpbGUpOgorICAgICAgICAoSW5zcGVjdG9yR2VuZXJhdG9yVGVzdHMu
ZGV0ZWN0X2NoYW5nZXMpOgorICAgICAgICAoSW5zcGVjdG9yR2VuZXJhdG9yVGVzdHMucnVuX3Rl
c3RzKToKKyAgICAgICAgKEluc3BlY3RvckdlbmVyYXRvclRlc3RzLm1haW4pOgorCisyMDE0LTA4
LTA5ICBCcmlhbiBKLiBCdXJnICA8YnVyZ0Bjcy53YXNoaW5ndG9uLmVkdT4KKworICAgICAgICBX
ZWIgSW5zcGVjdG9yOiByZXdyaXRlIENvZGVHZW5lcmF0b3JJbnNwZWN0b3IgdG8gYmUgbW9kdWxh
ciBhbmQgdGVzdGFibGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTEzMTU5NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEFkZCBhIHdyYXBwZXIgc2NyaXB0IGZvciBydW5uaW5nIGluc3BlY3RvciBiaW5kaW5n
cyBnZW5lcmF0b3IgdGVzdHMuCisgICAgICAgIEl0IGlzIGFkYXB0ZWQgZnJvbSB0aGUgRE9NIGJp
bmRpbmdzIGFuZCByZXBsYXkgZ2VuZXJhdG9yIHRlc3Qgc2NyaXB0cy4KKworICAgICAgICAqIFNj
cmlwdHMvcnVuLWluc3BlY3Rvci1nZW5lcmF0b3ItdGVzdHM6IEFkZGVkLgorICAgICAgICAobWFp
bik6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9pbnNwZWN0b3IvX19pbml0X18ucHk6IEFk
ZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvaW5zcGVjdG9yL21haW4ucHk6IEFkZGVk
LgorICAgICAgICAoSW5zcGVjdG9yR2VuZXJhdG9yVGVzdHMpOgorICAgICAgICAoSW5zcGVjdG9y
R2VuZXJhdG9yVGVzdHMuX19pbml0X18pOgorICAgICAgICAoSW5zcGVjdG9yR2VuZXJhdG9yVGVz
dHMuZ2VuZXJhdGVfZnJvbV9qc29uKToKKyAgICAgICAgKEluc3BlY3RvckdlbmVyYXRvclRlc3Rz
LndyaXRlX2Vycm9yX2ZpbGUpOgorICAgICAgICAoSW5zcGVjdG9yR2VuZXJhdG9yVGVzdHMuZGV0
ZWN0X2NoYW5nZXMpOgorICAgICAgICAoSW5zcGVjdG9yR2VuZXJhdG9yVGVzdHMucnVuX3Rlc3Rz
KToKKyAgICAgICAgKEluc3BlY3RvckdlbmVyYXRvclRlc3RzLm1haW4pOgorCiAyMDE0LTA4LTE0
ICBCcmVudCBGdWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgogCiAgICAgICAgIFtXaW5dIEV4
dGVuZCBhdXRvLXZlcnNpb24gYW5kIHZlcnNpb24tc3RhbXAgZm9yIFJDX1Byb2plY3RCdWlsZFZl
cnNpb24KZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvcnVuLWluc3BlY3Rvci1nZW5lcmF0b3It
dGVzdHMgYi9Ub29scy9TY3JpcHRzL3J1bi1pbnNwZWN0b3ItZ2VuZXJhdG9yLXRlc3RzCm5ldyBm
aWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmFhYWIxODAwYmNhNmY3ZThhMzQ5NmU1OTE4NDIxZWVhZTJkMzhkODIKLS0tIC9kZXYv
bnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3J1bi1pbnNwZWN0b3ItZ2VuZXJhdG9yLXRlc3RzCkBA
IC0wLDAgKzEsNDIgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyBDb3B5cmlnaHQgKEMpIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisj
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworIyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisjIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0IHN5cworZnJvbSB3ZWJraXRweS5jb21tb24uc3lz
dGVtIGltcG9ydCBleGVjdXRpdmUKKworZGVmIG1haW4oYXJndik6CisgICAgIiIiUnVucyByZXBs
YXkgaW5wdXQgY29kZSBnZW5lcmF0b3Igb24gdGVzdCBzcGVjaWZpY2F0aW9uIGZpbGVzIGFuZCBj
b21wYXJlcworICAgIHRoZSByZXN1bHRzIHdpdGggcmVmZXJlbmNlIGZpbGVzLgorCisgICAgT3B0
aW9uczoKKyAgICAgICAtLXJlc2V0LXJlc3VsdHM6IE92ZXJ3cml0ZXMgdGhlIHJlZmVyZW5jZSBm
aWxlcyB3aXRoIHRoZSBnZW5lcmF0ZWQgcmVzdWx0cy4KKworICAgICIiIgorICAgIHJlc2V0X3Jl
c3VsdHMgPSAiLS1yZXNldC1yZXN1bHRzIiBpbiBhcmd2CisKKyAgICBmcm9tIHdlYmtpdHB5Lmlu
c3BlY3Rvci5tYWluIGltcG9ydCBJbnNwZWN0b3JHZW5lcmF0b3JUZXN0cworICAgIHJldHVybiBJ
bnNwZWN0b3JHZW5lcmF0b3JUZXN0cyhyZXNldF9yZXN1bHRzLCBleGVjdXRpdmUuRXhlY3V0aXZl
KCkpLm1haW4oKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHN5cy5leGl0KG1h
aW4oc3lzLmFyZ3YpKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9pbnNwZWN0
b3IvX19pbml0X18ucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2luc3BlY3Rvci9fX2luaXRf
Xy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5lZjY1YmVlNWJiNzdlOTZlYmM3Y2Q5YzQ3NjQwNjkwZmJkYThhYzE5
Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9pbnNwZWN0b3IvX19p
bml0X18ucHkKQEAgLTAsMCArMSBAQAorIyBSZXF1aXJlZCBmb3IgUHl0aG9uIHRvIHNlYXJjaCB0
aGlzIGRpcmVjdG9yeSBmb3IgbW9kdWxlIGZpbGVzCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L2luc3BlY3Rvci9tYWluLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9pbnNw
ZWN0b3IvbWFpbi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43NjlmMDQxMmZjNjMwMzZhY2NhNzRjZjc1OWM4NzRl
NTdjYjFkZWFkCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9pbnNw
ZWN0b3IvbWFpbi5weQpAQCAtMCwwICsxLDEzNCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTEgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
IyBhcmUgbWV0OgorIworIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisj
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUwor
IyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQKKyMgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBCisjIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBIT0xERVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisj
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisj
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgb3MKK2ltcG9ydCBvcy5wYXRo
CitpbXBvcnQgc2h1dGlsCitpbXBvcnQgc3lzCitpbXBvcnQgdGVtcGZpbGUKK2Zyb20gd2Via2l0
cHkuY29tbW9uLmNoZWNrb3V0LnNjbS5kZXRlY3Rpb24gaW1wb3J0IGRldGVjdF9zY21fc3lzdGVt
Citmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uZXhlY3V0aXZlIGltcG9ydCBTY3JpcHRFcnJv
cgorCisKK2NsYXNzIEluc3BlY3RvckdlbmVyYXRvclRlc3RzOgorCisgICAgZGVmIF9faW5pdF9f
KHNlbGYsIHJlc2V0X3Jlc3VsdHMsIGV4ZWN1dGl2ZSk6CisgICAgICAgIHNlbGYucmVzZXRfcmVz
dWx0cyA9IHJlc2V0X3Jlc3VsdHMKKyAgICAgICAgc2VsZi5leGVjdXRpdmUgPSBleGVjdXRpdmUK
KworICAgIGRlZiBnZW5lcmF0ZV9mcm9tX2pzb24oc2VsZiwganNvbl9maWxlLCBvdXRwdXRfZGly
ZWN0b3J5KToKKyAgICAgICAgY21kID0gWydweXRob24nLAorICAgICAgICAgICAgICAgJ0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2dlbmVyYXRlLWluc3BlY3Rvci1wcm90b2NvbC1i
aW5kaW5ncy5weScsCisgICAgICAgICAgICAgICAnLS1vdXRwdXREaXInLCBvdXRwdXRfZGlyZWN0
b3J5LAorICAgICAgICAgICAgICAgJy0tZm9yY2UnLAorICAgICAgICAgICAgICAgJy0tZnJhbWV3
b3JrJywgJ1Rlc3QnLAorICAgICAgICAgICAgICAgJy0tdGVzdCcsCisgICAgICAgICAgICAgICBq
c29uX2ZpbGVdCisKKyAgICAgICAgZXhpdF9jb2RlID0gMAorICAgICAgICB0cnk6CisgICAgICAg
ICAgICBzdGRlcnJfb3V0cHV0ID0gc2VsZi5leGVjdXRpdmUucnVuX2NvbW1hbmQoY21kKQorICAg
ICAgICAgICAgaWYgc3RkZXJyX291dHB1dDoKKyAgICAgICAgICAgICAgICBzZWxmLndyaXRlX2Vy
cm9yX2ZpbGUoanNvbl9maWxlLCBvdXRwdXRfZGlyZWN0b3J5LCBzdGRlcnJfb3V0cHV0KQorICAg
ICAgICBleGNlcHQgU2NyaXB0RXJyb3IsIGU6CisgICAgICAgICAgICBwcmludCBlLm91dHB1dAor
ICAgICAgICAgICAgZXhpdF9jb2RlID0gZS5leGl0X2NvZGUKKyAgICAgICAgcmV0dXJuIGV4aXRf
Y29kZQorCisgICAgZGVmIHdyaXRlX2Vycm9yX2ZpbGUoc2VsZiwgaW5wdXRfZmlsZXBhdGgsIG91
dHB1dF9kaXJlY3RvcnksIGVycm9yX291dHB1dCk6CisgICAgICAgIG91dHB1dF9maWxlcGF0aCA9
IG9zLnBhdGguam9pbihvdXRwdXRfZGlyZWN0b3J5LCBvcy5wYXRoLmJhc2VuYW1lKGlucHV0X2Zp
bGVwYXRoKSArICctZXJyb3InKQorCisgICAgICAgIHdpdGggb3BlbihvdXRwdXRfZmlsZXBhdGgs
ICJ3IikgYXMgb3V0cHV0X2ZpbGU6CisgICAgICAgICAgICBvdXRwdXRfZmlsZS53cml0ZShlcnJv
cl9vdXRwdXQpCisKKyAgICBkZWYgZGV0ZWN0X2NoYW5nZXMoc2VsZiwgd29ya19kaXJlY3Rvcnks
IHJlZmVyZW5jZV9kaXJlY3RvcnkpOgorICAgICAgICBjaGFuZ2VzX2ZvdW5kID0gRmFsc2UKKyAg
ICAgICAgZm9yIG91dHB1dF9maWxlIGluIG9zLmxpc3RkaXIod29ya19kaXJlY3RvcnkpOgorICAg
ICAgICAgICAgY21kID0gWydkaWZmJywKKyAgICAgICAgICAgICAgICAgICAnLXUnLAorICAgICAg
ICAgICAgICAgICAgICctTicsCisgICAgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKHJlZmVy
ZW5jZV9kaXJlY3RvcnksIG91dHB1dF9maWxlKSwKKyAgICAgICAgICAgICAgICAgICBvcy5wYXRo
LmpvaW4od29ya19kaXJlY3RvcnksIG91dHB1dF9maWxlKV0KKworICAgICAgICAgICAgZXhpdF9j
b2RlID0gMAorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG91dHB1dCA9IHNlbGYu
ZXhlY3V0aXZlLnJ1bl9jb21tYW5kKGNtZCkKKyAgICAgICAgICAgIGV4Y2VwdCBTY3JpcHRFcnJv
ciwgZToKKyAgICAgICAgICAgICAgICBvdXRwdXQgPSBlLm91dHB1dAorICAgICAgICAgICAgICAg
IGV4aXRfY29kZSA9IGUuZXhpdF9jb2RlCisKKyAgICAgICAgICAgIGlmIGV4aXRfY29kZSBvciBv
dXRwdXQ6CisgICAgICAgICAgICAgICAgcHJpbnQgJ0ZBSUw6ICVzJyAlIG91dHB1dF9maWxlCisg
ICAgICAgICAgICAgICAgcHJpbnQgb3V0cHV0CisgICAgICAgICAgICAgICAgY2hhbmdlc19mb3Vu
ZCA9IFRydWUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcHJpbnQgJ1BBU1M6
ICVzJyAlIG91dHB1dF9maWxlCisgICAgICAgIHJldHVybiBjaGFuZ2VzX2ZvdW5kCisKKyAgICBk
ZWYgcnVuX3Rlc3RzKHNlbGYsIGlucHV0X2RpcmVjdG9yeSwgcmVmZXJlbmNlX2RpcmVjdG9yeSk6
CisgICAgICAgIHdvcmtfZGlyZWN0b3J5ID0gcmVmZXJlbmNlX2RpcmVjdG9yeQorCisgICAgICAg
IHBhc3NlZCA9IFRydWUKKyAgICAgICAgZm9yIGlucHV0X2ZpbGUgaW4gb3MubGlzdGRpcihpbnB1
dF9kaXJlY3RvcnkpOgorICAgICAgICAgICAgKG5hbWUsIGV4dGVuc2lvbikgPSBvcy5wYXRoLnNw
bGl0ZXh0KGlucHV0X2ZpbGUpCisgICAgICAgICAgICBpZiBleHRlbnNpb24gIT0gJy5qc29uJzoK
KyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgIyBHZW5lcmF0ZSBvdXRwdXQg
aW50byB0aGUgd29yayBkaXJlY3RvcnkgKGVpdGhlciB0aGUgZ2l2ZW4gb25lIG9yIGEKKyAgICAg
ICAgICAgICMgdGVtcCBvbmUgaWYgbm90IHJlc2V0X3Jlc3VsdHMgaXMgcGVyZm9ybWVkKQorICAg
ICAgICAgICAgaWYgbm90IHNlbGYucmVzZXRfcmVzdWx0czoKKyAgICAgICAgICAgICAgICB3b3Jr
X2RpcmVjdG9yeSA9IHRlbXBmaWxlLm1rZHRlbXAoKQorCisgICAgICAgICAgICBpZiBzZWxmLmdl
bmVyYXRlX2Zyb21fanNvbihvcy5wYXRoLmpvaW4oaW5wdXRfZGlyZWN0b3J5LCBpbnB1dF9maWxl
KSwgd29ya19kaXJlY3RvcnkpOgorICAgICAgICAgICAgICAgIHBhc3NlZCA9IEZhbHNlCisKKyAg
ICAgICAgICAgIGlmIHNlbGYucmVzZXRfcmVzdWx0czoKKyAgICAgICAgICAgICAgICBwcmludCAi
UmVzZXQgcmVzdWx0cyBmb3IgdGVzdDogJXMiICUgKGlucHV0X2ZpbGUpCisgICAgICAgICAgICAg
ICAgY29udGludWUKKworICAgICAgICAgICAgIyBEZXRlY3QgY2hhbmdlcworICAgICAgICAgICAg
aWYgc2VsZi5kZXRlY3RfY2hhbmdlcyh3b3JrX2RpcmVjdG9yeSwgcmVmZXJlbmNlX2RpcmVjdG9y
eSk6CisgICAgICAgICAgICAgICAgcGFzc2VkID0gRmFsc2UKKyAgICAgICAgICAgIHNodXRpbC5y
bXRyZWUod29ya19kaXJlY3RvcnkpCisKKyAgICAgICAgcmV0dXJuIHBhc3NlZAorCisgICAgZGVm
IG1haW4oc2VsZik6CisgICAgICAgIGN1cnJlbnRfc2NtID0gZGV0ZWN0X3NjbV9zeXN0ZW0ob3Mu
Y3VyZGlyKQorICAgICAgICBvcy5jaGRpcihvcy5wYXRoLmpvaW4oY3VycmVudF9zY20uY2hlY2tv
dXRfcm9vdCwgJ1NvdXJjZScpKQorCisgICAgICAgIGFsbF90ZXN0c19wYXNzZWQgPSBUcnVlCisK
KyAgICAgICAgaW5wdXRfZGlyZWN0b3J5ID0gb3MucGF0aC5qb2luKCdKYXZhU2NyaXB0Q29yZScs
ICdpbnNwZWN0b3InLCAnc2NyaXB0cycsICd0ZXN0cycpCisgICAgICAgIHJlZmVyZW5jZV9kaXJl
Y3RvcnkgPSBvcy5wYXRoLmpvaW4oJ0phdmFTY3JpcHRDb3JlJywgJ2luc3BlY3RvcicsICdzY3Jp
cHRzJywgJ3Rlc3RzJywgJ2V4cGVjdGVkJykKKyAgICAgICAgaWYgbm90IHNlbGYucnVuX3Rlc3Rz
KGlucHV0X2RpcmVjdG9yeSwgcmVmZXJlbmNlX2RpcmVjdG9yeSk6CisgICAgICAgICAgICBhbGxf
dGVzdHNfcGFzc2VkID0gRmFsc2UKKworICAgICAgICBwcmludCAnJworICAgICAgICBpZiBhbGxf
dGVzdHNfcGFzc2VkOgorICAgICAgICAgICAgcHJpbnQgJ0FsbCB0ZXN0cyBQQVNTIScKKyAgICAg
ICAgICAgIHJldHVybiAwCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwcmludCAnU29tZSB0
ZXN0cyBGQUlMISAoVG8gdXBkYXRlIHRoZSByZWZlcmVuY2UgZmlsZXMsIGV4ZWN1dGUgInJ1bi1p
bnNwZWN0b3ItZ2VuZXJhdG9yLXRlc3RzIC0tcmVzZXQtcmVzdWx0cyIpJworICAgICAgICAgICAg
cmV0dXJuIC0xCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>